mirror of
https://github.com/HIllya51/LunaHook.git
synced 2025-01-12 04:49:37 +08:00
fix
This commit is contained in:
parent
c8a495cbe1
commit
a543d45a6f
@ -87,6 +87,7 @@ bool vita3k::attach_function()
|
||||
}
|
||||
|
||||
|
||||
namespace{
|
||||
bool FPCSG01023(void* data, size_t* len, HookParam* hp){
|
||||
auto s = std::string((char*)data,*len);
|
||||
s = std::regex_replace(s, std::regex("<br>"), "");
|
||||
@ -200,7 +201,68 @@ bool FPCSG00216(void* data, size_t* len, HookParam* hp){
|
||||
s = std::regex_replace(s, std::regex("#Pos\\[[\\s\\S]*?\\]"), "");
|
||||
return write_string_overwrite(data,len,s);
|
||||
}
|
||||
namespace{
|
||||
|
||||
|
||||
void TPCSG00291(hook_stack* stack, HookParam* hp, uintptr_t* data, uintptr_t* split, size_t* len){
|
||||
auto a2= VITA3K::emu_arg(stack)[0];
|
||||
|
||||
auto vm = *(DWORD*)(a2+(0x28));
|
||||
vm=*(DWORD*)VITA3K::emu_addr(stack,vm);
|
||||
vm=*(DWORD*)VITA3K::emu_addr(stack,vm+8);
|
||||
uintptr_t address=VITA3K::emu_addr(stack,vm);
|
||||
auto len1=*(DWORD*)(address+4);
|
||||
auto p=address+0x20;
|
||||
if(len1>4 && *(WORD*)(p+2)==0){
|
||||
auto p1=*(DWORD*)(address+8);
|
||||
vm=*(DWORD*)VITA3K::emu_addr(stack,vm);
|
||||
vm=*(DWORD*)VITA3K::emu_addr(stack,vm+0xC);
|
||||
p=VITA3K::emu_addr(stack,vm);
|
||||
}
|
||||
static int fm=0;
|
||||
static std::string pre;
|
||||
auto b=fm;
|
||||
auto s=[](uintptr_t address){
|
||||
auto frist = *(WORD*)address;
|
||||
auto lo = frist & 0xFF; // uppercase: 41->5A
|
||||
auto hi = frist >> 8;
|
||||
if (hi == 0 && (lo > 0x5a || lo < 0x41) /* T,W,? */) {
|
||||
return std::string();
|
||||
}
|
||||
std::string s ;int i = 0;WORD c;
|
||||
char buf[3]={0};
|
||||
while ((c = *(WORD*)(address+i)) != 0) {
|
||||
// reverse endian: ShiftJIS BE => LE
|
||||
buf[0] = c >> 8;
|
||||
buf[1] = c & 0xFF;
|
||||
|
||||
if (c == 0x815e /* / */) {
|
||||
s += ' '; // single line
|
||||
}
|
||||
else if (buf[0] == 0) {
|
||||
//// UTF16 LE turned BE: 5700=>0057, 3100, 3500
|
||||
//// 4e00 6d00=>PLAYER
|
||||
// do nothing
|
||||
if (buf[1] == 0x4e) {
|
||||
s += "PLAYER";
|
||||
fm++;
|
||||
}
|
||||
}
|
||||
else {
|
||||
s+=buf;
|
||||
}
|
||||
i += 2;
|
||||
}
|
||||
return s;
|
||||
}(p);
|
||||
if(b>0){
|
||||
fm--;
|
||||
return;
|
||||
}
|
||||
if(s==pre)return ;
|
||||
pre=s;
|
||||
write_string_new(data,len,s);
|
||||
}
|
||||
|
||||
auto _=[](){
|
||||
emfunctionhooks={
|
||||
//Tsuihou Senkyo
|
||||
@ -246,7 +308,7 @@ auto _=[](){
|
||||
{0x80058608,{0,1,0,0,FPCSG00389,"PCSG00389"}},//dialogue,sjis
|
||||
{0x80021292,{0,0,0,0,FPCSG00389,"PCSG00389"}},//name
|
||||
//Amagami
|
||||
//to complex.
|
||||
{0x80070658,{0,0,0,TPCSG00291,0,"PCSG00291"}},
|
||||
//Rui wa Tomo o Yobu
|
||||
{0x81003db0,{CODEC_UTF8,1,0,0,FPCSG00839,"PCSG00216"}},//dialogue
|
||||
|
||||
|
@ -171,6 +171,9 @@ bool yuzusuyu::attach_function()
|
||||
};
|
||||
return NewHook(hp,"YuzuDoJit");
|
||||
}
|
||||
|
||||
|
||||
namespace{
|
||||
int readu8(BYTE* addr){
|
||||
int numBytes = 0;
|
||||
auto firstByte=*addr;
|
||||
@ -1169,7 +1172,6 @@ bool F01000EA00D2EE000(void* data, size_t* len, HookParam* hp){
|
||||
s = std::regex_replace(s, std::wregex(L"<.+?>"), L"");
|
||||
return write_string_overwrite(data,len,s);
|
||||
}
|
||||
namespace{
|
||||
auto _=[](){
|
||||
emfunctionhooks={
|
||||
//Memories Off
|
||||
|
@ -15,14 +15,26 @@ public:
|
||||
}
|
||||
namespace VITA3K
|
||||
{
|
||||
class emu_addr{
|
||||
hook_stack* stack;
|
||||
DWORD addr;
|
||||
public:
|
||||
emu_addr(hook_stack* stack_,DWORD addr_):stack(stack_),addr(addr_){};
|
||||
operator uintptr_t(){
|
||||
auto base=stack->r13;
|
||||
return base+addr;
|
||||
}
|
||||
operator DWORD*(){
|
||||
return (DWORD*)(uintptr_t)*this;
|
||||
}
|
||||
};
|
||||
class emu_arg{
|
||||
hook_stack* stack;
|
||||
public:
|
||||
emu_arg(hook_stack* stack_):stack(stack_){};
|
||||
uintptr_t operator [](int idx){
|
||||
auto base=stack->r13;
|
||||
auto args=(uint32_t*)stack->r15;
|
||||
return base+args[idx];
|
||||
return emu_addr(stack,args[idx]);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
#include<queue>
|
||||
#include"emujitarg.hpp"
|
||||
|
||||
namespace ppsspp{
|
||||
bool ULJS00403_filter(void* data, size_t* len, HookParam* hp){
|
||||
std::string result = std::string((char*)data,*len);
|
||||
std::regex newlinePattern(R"((\\n)+)");
|
||||
@ -251,43 +252,42 @@ void QNPJH50909(hook_stack* stack, HookParam* hp, uintptr_t* data, uintptr_t* sp
|
||||
if(0x6e87==*(WORD*)*data)*len=0;
|
||||
if(0x000a==*(WORD*)*data)*len=0;
|
||||
}
|
||||
namespace ppsspp{
|
||||
std::unordered_map<uintptr_t,emfuncinfo>emfunctionhooks= {
|
||||
//Shinigami to Shoujo
|
||||
{0x883bf34,{0,1,0,0,ULJS00403_filter,"ULJS00403"}},
|
||||
//Amagami
|
||||
{0x0886775c,{0,0,0,ULJS00339,0,"ULJS00339"}},// String.length()
|
||||
//Sekai de Ichiban Dame na Koi
|
||||
{0x8814adc,{0,0,0,0,NPJH50909_filter,"ULJM05878"}},// name + dialouge
|
||||
{0x8850b2c,{0,0,0,0,NPJH50909_filter,"ULJM05878"}},// onscreen toast
|
||||
//Dunamis15
|
||||
{0x0891D72C,{CODEC_UTF8,0,0,0,ULJM06119_filter,"ULJM06119"}},
|
||||
//Princess Evangile Portable
|
||||
{0x88506d0,{CODEC_UTF16,2,0,0,ULJM06036_filter,"ULJM06036"}},// [0x88506d0(2)...0x088507C0(?)] // name text text (line doubled)
|
||||
//Kin'iro no Corda 2f
|
||||
{0x89b59dc,{0,0,0,ULJM05428,0,"ULJM05428"}},
|
||||
//Kin'iro no Corda
|
||||
{0x886162c,{0,0,0,ULJM05054,0,"ULJM05054"}},// dialogue: 0x886162c (x1), 0x889d5fc-0x889d520(a2) fullLine
|
||||
{0x8899e90,{0,0,0,ULJM05054,0,"ULJM05054"}},// name 0x88da57c, 0x8899ca4 (x0, oneTime), 0x8899e90
|
||||
//Sol Trigger
|
||||
{0x8952cfc,{CODEC_UTF8,0,0,0,NPJH50619F,"NPJH50619"}},//dialog
|
||||
{0x884aad4,{CODEC_UTF8,0,0,0,NPJH50619F,"NPJH50619"}},//description
|
||||
{0x882e1b0,{CODEC_UTF8,0,0,0,NPJH50619F,"NPJH50619"}},//system
|
||||
{0x88bb108,{CODEC_UTF8,2,0,0,NPJH50619F,"NPJH50619"}},//battle tutorial
|
||||
{0x89526a0,{CODEC_UTF8,0,0,0,NPJH50619F,"NPJH50619"}},//battle info
|
||||
{0x88bcef8,{CODEC_UTF8,1,0,0,NPJH50619F,"NPJH50619"}},//battle talk
|
||||
//Fate/EXTRA CCC
|
||||
{0x8958490,{0,0,0,0,NPJH50505F,"NPJH50505"}},
|
||||
//Kamigami no Asobi InFinite
|
||||
{0x088630f8,{0,0,0,QNPJH50909,0,"NPJH50909"}}, // text, choice (debounce trailing 400ms), TODO: better hook
|
||||
{0x0887813c,{0,3,4,0,0,"NPJH50909"}}, // Question YN
|
||||
//Gekka Ryouran Romance
|
||||
{0x88eeba4,{0,0,0,0,ULJM05943F,"ULJM05943"}},// a0 - monologue text
|
||||
{0x8875e0c,{0,1,6,0,ULJM05943F,"ULJM05943"}},// a1 - dialogue text
|
||||
//My Merry May with be
|
||||
{0x886F014,{0,3,0,0,FULJM05603,"ULJM05603"}},
|
||||
//Corpse Party -The Anthology- Sachiko no Ren'ai Yuugi ♥ Hysteric Birthday 2U - Regular Edition
|
||||
{0x88517C8,{0,1,0,0,FULJM05603,"ULJM06114"}},
|
||||
};
|
||||
std::unordered_map<uintptr_t,emfuncinfo>emfunctionhooks= {
|
||||
//Shinigami to Shoujo
|
||||
{0x883bf34,{0,1,0,0,ULJS00403_filter,"ULJS00403"}},
|
||||
//Amagami
|
||||
{0x0886775c,{0,0,0,ULJS00339,0,"ULJS00339"}},// String.length()
|
||||
//Sekai de Ichiban Dame na Koi
|
||||
{0x8814adc,{0,0,0,0,NPJH50909_filter,"ULJM05878"}},// name + dialouge
|
||||
{0x8850b2c,{0,0,0,0,NPJH50909_filter,"ULJM05878"}},// onscreen toast
|
||||
//Dunamis15
|
||||
{0x0891D72C,{CODEC_UTF8,0,0,0,ULJM06119_filter,"ULJM06119"}},
|
||||
//Princess Evangile Portable
|
||||
{0x88506d0,{CODEC_UTF16,2,0,0,ULJM06036_filter,"ULJM06036"}},// [0x88506d0(2)...0x088507C0(?)] // name text text (line doubled)
|
||||
//Kin'iro no Corda 2f
|
||||
{0x89b59dc,{0,0,0,ULJM05428,0,"ULJM05428"}},
|
||||
//Kin'iro no Corda
|
||||
{0x886162c,{0,0,0,ULJM05054,0,"ULJM05054"}},// dialogue: 0x886162c (x1), 0x889d5fc-0x889d520(a2) fullLine
|
||||
{0x8899e90,{0,0,0,ULJM05054,0,"ULJM05054"}},// name 0x88da57c, 0x8899ca4 (x0, oneTime), 0x8899e90
|
||||
//Sol Trigger
|
||||
{0x8952cfc,{CODEC_UTF8,0,0,0,NPJH50619F,"NPJH50619"}},//dialog
|
||||
{0x884aad4,{CODEC_UTF8,0,0,0,NPJH50619F,"NPJH50619"}},//description
|
||||
{0x882e1b0,{CODEC_UTF8,0,0,0,NPJH50619F,"NPJH50619"}},//system
|
||||
{0x88bb108,{CODEC_UTF8,2,0,0,NPJH50619F,"NPJH50619"}},//battle tutorial
|
||||
{0x89526a0,{CODEC_UTF8,0,0,0,NPJH50619F,"NPJH50619"}},//battle info
|
||||
{0x88bcef8,{CODEC_UTF8,1,0,0,NPJH50619F,"NPJH50619"}},//battle talk
|
||||
//Fate/EXTRA CCC
|
||||
{0x8958490,{0,0,0,0,NPJH50505F,"NPJH50505"}},
|
||||
//Kamigami no Asobi InFinite
|
||||
{0x088630f8,{0,0,0,QNPJH50909,0,"NPJH50909"}}, // text, choice (debounce trailing 400ms), TODO: better hook
|
||||
{0x0887813c,{0,3,4,0,0,"NPJH50909"}}, // Question YN
|
||||
//Gekka Ryouran Romance
|
||||
{0x88eeba4,{0,0,0,0,ULJM05943F,"ULJM05943"}},// a0 - monologue text
|
||||
{0x8875e0c,{0,1,6,0,ULJM05943F,"ULJM05943"}},// a1 - dialogue text
|
||||
//My Merry May with be
|
||||
{0x886F014,{0,3,0,0,FULJM05603,"ULJM05603"}},
|
||||
//Corpse Party -The Anthology- Sachiko no Ren'ai Yuugi ♥ Hysteric Birthday 2U - Regular Edition
|
||||
{0x88517C8,{0,1,0,0,FULJM05603,"ULJM06114"}},
|
||||
};
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user