« on: February 09, 2021, 01:48:22 am »
So the game uses 4 byte pointers which point to "RIFF" "files". The RIFF files contain "src code" "jump" and script data. Quite an interesting format. It's no wonder the game was never fan translated...
In any case, the src code junk is not a big deal, however, I need some more info on the "jump" data. I tried No$GBA's debugger, and ARM7 is much different to 6502. It's more similar to Intel processors which I don't have much experience with. I hypothesize that data after "JUMP" contains embedded pointer data. I know for a fact the game uses embedded reads, but I need some more info on it.
By the way, your tool doesn't dump / insert all dialogue in the game.
After 1 year and a half postponed my mod, I finally get another gem here, thanks for FCandChill finally I able to understand about the pointer of this game (maybe not all but i'm sure it has quite same rules). I don't know about SRC CODE and many things in ASM but I found the way we extend the dialogues by understanding the RIFF pointer and STR pointer.
I'll try to explain here but in the end of this post I share a link of my spreadsheet for better understanding.
so the pointer is pointing the RIFF, I take an example of Sock Hook dialogue because it can be tested really early in the game. the RIFF started at x2DDE5C. After the RIFF code, there will be a number of RIFF length, for this case writen B1 03 00 00 which we know it's big endian, so it's mean 03B1 = 945 bytes of RIFF file which ended at x2DE20C.
For String code STR start at x2DE120,
followed by the length of the string, for this case x2DE124: E5 00 00 00 which mean 229 bytes of SRT sequence
then followed by the number of strings, for this case x2DE128: 09 00 00 00, so there will be 9 strings,
then the next set of bytes indicate the "pointer" of the strings
1. x2DE12C: 00 00 00 00 -> byte 0th
2. x2DE130: 16 00 00 00 -> byte 22nd
3. x2DE134: 33 00 00 00 -> byte 51st
9. x2DE14C: B2 00 00 00 -> byte 178th
then x2DE150 is the start of strings, which now we know, 1st string is at byte 0th, x2DE150, 2nd string is at byte 22th, x2DE166, 3rd string is at byte 51st, x2DE183, 9th string at byte 178th, x2DE202.
so, to extend the dialogue, we can repoint the RIFF pointer, x2DDE5C which found at xF8F5C (5C DE 2D 08) change the value to our new pointer (ex: 00 D0 75 08 pointing x75D000), change the dialogue, calculate then repoint the strings' pointer, change the length of RIFF and STR.
here the spreadsheet for example
Of Course to translate the game we need decent information about how the dialogues printed, and we need to do many experiment to make the letters printed well.
I'm not professional coder so I can't make the tools for editing, I mod manually in the hexacode. So if anyone want to make the tools, I really appreciate it. In this post, I share my knowledge from digging this ROM before, you guys can use it freely
My tool was updated! I made some improvements which can help in your project.
after trying pinguimbozo's program, what I wrote above is not efficient. pinguimbozo program is more efficient by "jump" some offset directly from STR sequence than my method which make a new RIFF that consume more memory. brilliant idea pinguimbozo I'll add another information to the spreadsheet about how pinguimbozo make a jump