mirror of
https://github.com/HIllya51/LunaTranslator.git
synced 2025-01-15 08:53:53 +08:00
.
This commit is contained in:
parent
a7c4452a9e
commit
775c53a2a3
@ -806,7 +806,7 @@ namespace
|
|||||||
* 004985CC CC INT3
|
* 004985CC CC INT3
|
||||||
* 004985CD CC INT3
|
* 004985CD CC INT3
|
||||||
*/
|
*/
|
||||||
bool attach(ULONG startAddress, ULONG stopAddress, HookParamType code)
|
bool attach(ULONG startAddress, ULONG stopAddress, bool utf8)
|
||||||
{
|
{
|
||||||
const uint8_t bytes[] = {
|
const uint8_t bytes[] = {
|
||||||
0xe8, XX4, // 004b00dc e8 7f191300 call .005e1a60 ; jichi: hook after here
|
0xe8, XX4, // 004b00dc e8 7f191300 call .005e1a60 ; jichi: hook after here
|
||||||
@ -821,10 +821,29 @@ namespace
|
|||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = addr + 5;
|
hp.address = addr + 5;
|
||||||
hp.type = USING_STRING | EMBED_ABLE | NO_CONTEXT;
|
hp.type = USING_STRING | EMBED_ABLE | NO_CONTEXT;
|
||||||
if (code)
|
if (utf8)
|
||||||
hp.type |= code;
|
hp.type |= CODEC_UTF8;
|
||||||
else
|
else
|
||||||
|
{
|
||||||
hp.type |= EMBED_DYNA_SJIS;
|
hp.type |= EMBED_DYNA_SJIS;
|
||||||
|
|
||||||
|
static ULONG p;
|
||||||
|
p = Patch::patchEncoding(startAddress, stopAddress);
|
||||||
|
if (p)
|
||||||
|
{
|
||||||
|
hp.type |= EMBED_DYNA_SJIS;
|
||||||
|
hp.embed_hook_font = F_GetGlyphOutlineA;
|
||||||
|
patch_fun = []()
|
||||||
|
{
|
||||||
|
if (*(WORD *)p == 0xc985)
|
||||||
|
{ // test ecx,ecx , thiscall
|
||||||
|
ReplaceFunction((PVOID)p, (PVOID)(ULONG)Patch::Private::thiscallisLeadByteChar);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ReplaceFunction((PVOID)p, (PVOID)(ULONG)Patch::Private::isLeadByteChar);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
hp.text_fun = Private::hookBefore;
|
hp.text_fun = Private::hookBefore;
|
||||||
hp.embed_fun = Private::hookafter;
|
hp.embed_fun = Private::hookafter;
|
||||||
hp.embed_hook_font = F_GetGlyphOutlineA;
|
hp.embed_hook_font = F_GetGlyphOutlineA;
|
||||||
@ -833,23 +852,6 @@ namespace
|
|||||||
buffer->from(std::regex_replace(buffer->strA(), std::regex(R"(\[(.+?)/.+\])"), "$1"));
|
buffer->from(std::regex_replace(buffer->strA(), std::regex(R"(\[(.+?)/.+\])"), "$1"));
|
||||||
};
|
};
|
||||||
|
|
||||||
static ULONG p;
|
|
||||||
p = Patch::patchEncoding(startAddress, stopAddress);
|
|
||||||
if (p)
|
|
||||||
{
|
|
||||||
hp.type |= EMBED_DYNA_SJIS;
|
|
||||||
hp.embed_hook_font = F_GetGlyphOutlineA;
|
|
||||||
patch_fun = []()
|
|
||||||
{
|
|
||||||
if (*(WORD *)p == 0xc985)
|
|
||||||
{ // test ecx,ecx , thiscall
|
|
||||||
ReplaceFunction((PVOID)p, (PVOID)(ULONG)Patch::Private::thiscallisLeadByteChar);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
ReplaceFunction((PVOID)p, (PVOID)(ULONG)Patch::Private::isLeadByteChar);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return NewHook(hp, "EmbedCS2");
|
return NewHook(hp, "EmbedCS2");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -928,14 +930,14 @@ if ( a9 )
|
|||||||
}
|
}
|
||||||
bool CatSystem::attach_function()
|
bool CatSystem::attach_function()
|
||||||
{
|
{
|
||||||
HookParamType code = CODEC_ANSI_LE;
|
bool utf8 = false;
|
||||||
auto b1 = InsertCatSystemHook();
|
auto b1 = InsertCatSystemHook();
|
||||||
if (!b1)
|
if (!b1)
|
||||||
{
|
{
|
||||||
b1 |= InsertCatSystem2Hook();
|
b1 |= InsertCatSystem2Hook();
|
||||||
code = CODEC_UTF8;
|
utf8 = true;
|
||||||
}
|
}
|
||||||
auto embed = ScenarioHook::attach(processStartAddress, processStopAddress, code);
|
auto embed = ScenarioHook::attach(processStartAddress, processStopAddress, utf8);
|
||||||
b1 = b1 || cs2();
|
b1 = b1 || cs2();
|
||||||
b1 |= embed;
|
b1 |= embed;
|
||||||
return b1;
|
return b1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user