variantxyz

mild software hipster

platform sec at ******** by day / gameboy jrpg hacker by night / vwf enthusiast / avatar by the infallible ColorBrews



Anyone ever play or hear of this one?

I grew up with the GB/GBC and that general era of handhelds was my younger childhood. I figured I was pretty familiar with it, but even to this day, over two decades later, I still find games that surprise me.

For all the ones I've seen, this one honestly seems pretty niche, even within Japan. One of Koei's few GBC titles, Metamode, is a Link's Awakening-style action RPG, but man it goes pretty deep.

I actually picked it up from a local game store maybe 6-7 years ago because the box looked pretty cool and it was like 5$. I can't read Japanese though, so I just fumbled around a bit. There's various classes and abilities and it just... plays like Link's Awakening. It's fairly intuitive but super customizable. There's a ton of 'classes' with different weapons and abilities, and a skill system associated with each to build up your character and equip different things and unlock more classes. Something I definitely want to play translated one day...

Has a catchy little opening theme too: https://www.youtube.com/watch?v=XfchiVQX19w

Technical Stuff

I did spend some time disassembling it for translation. The game is built with what seems to be GBDK and effectively operates on a set of events for each screen (corresponding to NPCs/monsters and their attributes, what text to draw, how cutscenes play out). I actually think I've got the general gist of it down... but the problem is a boring one: I need to identify every event in order to parse out what's dialog and what isn't...

Unlike some other games (like Medabots or Dragon Quest 1-3), text isn't conveniently stored in a table with adjacent pointers and referenced in a scripting engine. Text is effectively loaded in a resource section per 'scene' along with every other possible resource, along with another section that acts like a set of 'commands' for that screen. The commands are effectively 1 byte offsets into a function table (I guess, maybe a 'vtable' is more accurate), and have a variable number of arguments.

For example, the command 0x02 is what I refer to as 'LoadSceneText', and it has 1 byte for whether the text box is on the top or bottom of the screen, and one byte indicating what the text offset is within the current scene's resource table. Another is 0x06, which moves a character in a scene. This command takes 3 arguments (one byte each): the entity ID, the direction, and the distance. There's actually also the possibility of a command being variable length too (with one of the parameters indicating the total length). You can probably start to see why it's problematic to try and get only text out of this.

I guess, maybe luckily, the high bit of the command byte is used as a contextual control bit, and so there's really only 0x7F (127) commands to disassemble... ugh. Realistically, I don't even need to know the actual effects of those bytes if I can map the lengths (or how to determine the lengths) of each command, but I can't say it's the most interesting approach.

Honestly, maybe someone should just ask Koei Tecmo if they'll just release the code for the game.


You must log in to comment.

in reply to @variantxyz's post: