Hello my name is Patrick and I have been working for a while on an english patch for LB CE for PSP. I have reverse engineered the scripts and imageformats of the game, but I have an issue that I used at least 3 months trying for solve and so.. here are the details.
Below is an image from the game showind a test dialog message I have written in Shift-JIS:
The space between the letters are what I have been trying to fix. Writing ASCII won't work since it will eventually make the game crash. I believe the ASCII letters are interpreted in some way as commands which ends up making the game crash (I have also trying using unicode, so that every letter consisted of two bytes like normal shiftjis characters, but that didn't solve the issue).
I concluded after trying numous combinations that I would have to hack the program itself rather than the game files.
From this point a friend gave me a post from this site with the same issue called "
Zettai Zetsumei Toshi 3" link:http://gbatemp.net/threads/zettai-zetsumei-toshi-3.345409/page-3
Using "010 editor" I found that one byte had been changed, namely 0x8030 had been changed to 0x8000,
so I tried changing all 0x8030 to 0x8000 in the LB eboot, but that didn't change anything.
From this point I tried debugging using PPSSPP and found that when the game crashes with ASCII text, the game crashed (captured by visual studio though JIT debugging)
with this message:
With a fragment of the disassembly (the last instruction makes it crash) looking like this:
Now I also tried making a map of all the methods a change of dialog message invokes.
And have been trying to change random integers I could find. I have also tried changing random integers I could find in IDA Pro, but nothing made a difference.
So far my only idea of what I can do is to take all these methods and try changing integers I find anywhere in them, but even that won't garantee anything and will take a long while.
I guess I would just like to hear from you if you have any idea what I could try at this point? Is what I am currently doing the only way to do this?
Below is an image from the game showind a test dialog message I have written in Shift-JIS:
The space between the letters are what I have been trying to fix. Writing ASCII won't work since it will eventually make the game crash. I believe the ASCII letters are interpreted in some way as commands which ends up making the game crash (I have also trying using unicode, so that every letter consisted of two bytes like normal shiftjis characters, but that didn't solve the issue).
I concluded after trying numous combinations that I would have to hack the program itself rather than the game files.
From this point a friend gave me a post from this site with the same issue called "
Zettai Zetsumei Toshi 3" link:http://gbatemp.net/threads/zettai-zetsumei-toshi-3.345409/page-3
Using "010 editor" I found that one byte had been changed, namely 0x8030 had been changed to 0x8000,
so I tried changing all 0x8030 to 0x8000 in the LB eboot, but that didn't change anything.
From this point I tried debugging using PPSSPP and found that when the game crashes with ASCII text, the game crashed (captured by visual studio though JIT debugging)
with this message:
Code:
First-chance exception at 0x0dd4f50b in PPSSPPWindows.exe: 0xC0000005: Access violation writing location 0x0880005c.[/FONT]
[FONT=arial]Unhandled exception at 0x0dd4f50b in PPSSPPWindows.exe: 0xC0000005: Access violation writing location 0x0880005c.[/FONT]
[FONT=arial]
Code:
0DD4F45C ja 0DD4F46D[/FONT]
[FONT=arial]0DD4F45E mov dword ptr ds:[1138E98h],89E0C84h[/FONT]
[FONT=arial]0DD4F468 jmp 07820004[/FONT]
[FONT=arial]0DD4F46D mov eax,dword ptr ds:[1138B70h][/FONT]
[FONT=arial]0DD4F473 and eax,3FFFFFFFh[/FONT]
[FONT=arial]0DD4F479 mov esi,dword ptr [eax+8800008h][/FONT]
[FONT=arial]0DD4F47F mov edi,dword ptr ds:[1138B84h][/FONT]
[FONT=arial]0DD4F485 add edi,0FFFFDB98h[/FONT]
[FONT=arial]0DD4F48B lea edi,[edi+8][/FONT]
[FONT=arial]0DD4F48E cmp esi,edi[/FONT]
[FONT=arial]0DD4F490 mov dword ptr ds:[1138B60h],edi[/FONT]
[FONT=arial]0DD4F496 mov dword ptr ds:[1138B64h],esi[/FONT]
[FONT=arial]0DD4F49C je 0DD4F4D0[/FONT]
[FONT=arial]0DD4F4A2 mov eax,dword ptr ds:[1138B70h][/FONT]
[FONT=arial]0DD4F4A8 and eax,3FFFFFFFh[/FONT]
[FONT=arial]0DD4F4AE mov esi,dword ptr [eax+880000Ch][/FONT]
[FONT=arial]0DD4F4B4 mov dword ptr ds:[1138B60h],esi[/FONT]
[FONT=arial]0DD4F4BA sub dword ptr ds:[1138EB4h],5[/FONT]
[FONT=arial]0DD4F4C1 jmp 0DD4F4E8[/FONT]
[FONT=arial]0DD4F4C6 add dword ptr [esp+ecx-62h],ecx[/FONT]
[FONT=arial]0DD4F4CA or cl,ch[/FONT]
[FONT=arial]0DD4F4CC push ebx[/FONT]
[FONT=arial]0DD4F4CD or ebp,dword ptr [ebp-4BD27C07h][/FONT]
[FONT=arial]0DD4F4D3 mov ss,word ptr [ebx][/FONT]
[FONT=arial]0DD4F4D5 add dword ptr ds:[5079CE9h],eax[/FONT]
[FONT=arial]0DD4F4DB add byte ptr [ecx],al[/FONT]
[FONT=arial]0DD4F4DD cwde[/FONT]
[FONT=arial]0DD4F4DE or al,9Eh[/FONT]
[FONT=arial]0DD4F4E0 or cl,ch[/FONT]
[FONT=arial]0DD4F4E2 cmp eax,90F9AD0Bh[/FONT]
[FONT=arial]0DD4F4E7 int 3[/FONT]
[FONT=arial]0DD4F4E8 ja 0DD4F4F9[/FONT]
[FONT=arial]0DD4F4EA mov dword ptr ds:[1138E98h],89E0C4Ch[/FONT]
[FONT=arial]0DD4F4F4 jmp 07820004[/FONT]
[FONT=arial]0DD4F4F9 mov esi,dword ptr ds:[1138B64h][/FONT]
[FONT=arial]0DD4F4FF mov eax,dword ptr ds:[1138B60h][/FONT]
[FONT=arial]0DD4F505 and eax,3FFFFFFFh[/FONT]
[FONT=arial]0DD4F50B mov dword ptr [eax+8800008h],esi
Now I also tried making a map of all the methods a change of dialog message invokes.
And have been trying to change random integers I could find. I have also tried changing random integers I could find in IDA Pro, but nothing made a difference.
So far my only idea of what I can do is to take all these methods and try changing integers I find anywhere in them, but even that won't garantee anything and will take a long while.
I guess I would just like to hear from you if you have any idea what I could try at this point? Is what I am currently doing the only way to do this?