Romhacking.net

Romhacking => Newcomer's Board => Topic started by: WretchedAutomaton on August 24, 2019, 06:58:02 pm

Title: Unable to find (suspected) text pointers in Counter Revolution War [PSX]
Post by: WretchedAutomaton on August 24, 2019, 06:58:02 pm
Hi All!

First attempt dabbling at romhacking after being inspired by the 46okumen's excellent patch for the PC98 game CRW - Counter Revolution (AKA Rebellion) War 1, but having some issues at first hurdle.

I'm looking at the Playstation 1 version which is as yet untranslated but have came to a dead end attempting to dump the text script.
There's not too much text at all in the game, and most things like the pre-game introductions / menu text is handled by .tim files with the full text hardbaked into them, so I thought this might be relatively easy, however in-game dialogue appears to use two different character files which is obfuscating the actual text.

The first, smaller, font (both seem to be renamed .tim images) is for static text that appears constantly on the screen and I can find that and alter the raw text which uses this font file by hand editing a binary memory dump. This looks to use a two byte format where the 0000h represents the latin character "A" 0100h "B" and so on.

The issue is the actual character dialogue (which uses the second character / font image file) does not appear to use the same encoding as above.

I've tried parsing memory dumps & .exe files for raw ASCII / SHIFT-JS etc, with no joy, same with relative search (I'm assuming this encoding is also 2 bytes as the font image file shows fair number of kanji characters, which might explain why I've had no luck there).

The dialogue is definitely using this specific font image file for printing to screen, as I can export it, edit it to swap around some character locations, then insert it back in to see the swapped characters get printed out as expected, however it doesn't really help capture where the actual text is located, or even where the font lies in RAM.

Finally, I've tried to catch what I'm assuming now are text pointers being read in at the instruction level, by breaking on an arbitrary memory location I could see being frequently read, then stepping into the ASM while the characters are printed to screen,

I can see each individual letter being printed when doing this, but still can't catch the routine which is handling the printing, only some kind of generic screen update which constantly runs and updates all the sprints, like text borders etc.

Well, apologies for the horrendously long first post! Really just wanted to ask if there was a better way of approaching this, as I'm sure there's either something I've missed above, or more logical way of going about finding pointers on the PS1?

Much obliged for any help!