diff --git a/texthook/engine/engine.cc b/texthook/engine/engine.cc index c2c7abc..c181b44 100644 --- a/texthook/engine/engine.cc +++ b/texthook/engine/engine.cc @@ -4143,6 +4143,49 @@ bool InsertMajiroHook() return true; } +bool InsertMajiro3Hook() +{ + //by Blu3train + /* + * Sample games: + * Narcissu 10th Anniversary Anthology Project + * https://vndb.org/v10 + * https://vndb.org/v70 + * https://vndb.org/v18738 + * https://vndb.org/v18739 + * https://vndb.org/v18736 + */ + const BYTE bytes[] = { + 0xC1, 0xE9, 0x02, // shr ecx,02 << hook here + 0xF3, 0xA5, // repe movsd + 0x8B, 0xCA, // mov ecx,edx + 0x8D, 0x95, XX4 // lea edx,[ebp-00000404] + }; + + ULONG range = min(processStopAddress - processStartAddress, MAX_REL_ADDR); + ULONG addr = MemDbg::findBytes(bytes, sizeof(bytes), processStartAddress, processStartAddress + range); + if (!addr) { + ConsoleOutput("vnreng:Majiro3: pattern not found"); + return false; + } + + HookParam hp = {}; + hp.address = addr; + hp.offset = pusha_esi_off - 4; + hp.index = 0; + hp.type = USING_STRING; + ConsoleOutput("vnreng: INSERT Majiro3"); + ConsoleOutput("vnreng:Majiro3: To separate the text between lines flag the \"Flush delay string spacing\" option"); + NewHook(hp, "Majiro3"); + return true; +} + +bool InsertMajiroHooks() +{ + bool ok = InsertMajiroHook(); + return InsertMajiro3Hook() || ok; +} + /******************************************************************************************** CMVS hook: Process name is cmvs.exe or cnvs.exe or cmvs*.exe. Used by PurpleSoftware games. diff --git a/texthook/engine/engine.h b/texthook/engine/engine.h index 5e167b2..12b9a65 100644 --- a/texthook/engine/engine.h +++ b/texthook/engine/engine.h @@ -114,7 +114,7 @@ bool InsertLiveHook(); // Live: live.dll bool InsertLightvnHook(); // Light.vn: Engine.dll & BugTrapU.dll bool InsertLunaSoftHook(); // LunaSoft: Pac/*.pac bool InsertMalieHook(); // Malie@light: malie.ini -bool InsertMajiroHook(); // Majiro: *.arc +bool InsertMajiroHooks(); // Majiro: *.arc bool InsertMarineHeartHook(); // Marine Heart: SAISYS.exe bool InsertMBLHook(); // MBL: *.mbl bool InsertMEDHook(); // MED: *.med diff --git a/texthook/engine/match32.cc b/texthook/engine/match32.cc index fffc4c7..7b03833 100644 --- a/texthook/engine/match32.cc +++ b/texthook/engine/match32.cc @@ -150,7 +150,7 @@ bool DetermineEngineByFile1() return true; } if (Util::CheckFile(L"data*.arc") && Util::CheckFile(L"stream*.arc")) { - InsertMajiroHook(); + InsertMajiroHooks(); return true; } // jichi 5/31/2014