let's use relative pointers so that everything is obfuscated! that's fun!

doing all these RAM searches would be 10% easier if this game used ASCII

but the GBA was the last final system where it was super common to have all your text messages encoded in BS-8, the text encoding you just pulled out of your ass

ugh. I set a watchpoint and figured out where the text buffer is getting updated, and loaded it up in ghidra, and... IT'S A FUCKING MEMCPY

okay I found a function at 08002498 which is definitely "get string from table by index". It's called twice for each dialogue, since the title of the person talking is stored separately from their line.

ANNOYINGLY it turns out the portraits are stored somewhere completely different. Fuck.

OH GOOD I tried set a breakpoint on the tile-write and it's deep in the bowels of a BIOS function named LZ77UnCompReadNormalWrite16bit.

In other words, they're compressed in the ROM. Fuck.

BINGO.
The function at FUN_0800dce0 is called with the ID of the portrait to display. Change the value in r0 when it's called, and you change what portrait loads!

so by re-running this dialogue but changing the argument to this function, I can iterate through every portrait in the game.

downloading 4gb of longplay video so I can name some of these characters

Follow

@foone this one's a Space Quest quote, isn't it

Sign in to participate in the conversation
Computer Fairies

Computer Fairies is a Mastodon instance that aims to be as queer, friendly and furry as possible. We welcome all kinds of computer fairies!