I did something today I hadn’t expected to be able to do so quickly.
You all know the old Pokemon games, right? “Simpler times” and whatnot. I decided it might be fun to replay one of those, for old times sake. But let’s face it, the games can get kind of grindy, so why not spice things up a bit? Following the advice of yesterday’s post, I added some self-imposed rules to the game. A commonly used set, actually. A so-called “Nuzlocke challenge”. You can only catch the first Pokemon you encounter in an area, and if they die in battle, you have to release them (they’re “dead”). Nicknames are mandatory.
Now this makes things rather interesting. You start to get attached to key players in your team, species you wouldn’t have otherwise thought of catching. And when they die by stupid mistake, harsh defeat or tactical sacrifice, it’s super sad to see them go. But you can always bend the rules on the go to save their little asses, like some kind of overly-attached wimp.
Which got me to thinking, wouldn’t it be cool if these rules were enforced by the game? People have been modifying the games for years now, surely this must be possible to do? I stumbled upon the disassembled computer code for the game (conveniently published by a fan) and decided I’d do some digging. Managed to find a function that did what I needed (delete a creature from existence), but I just had to find the right time to call that function.
It was quite the struggle getting it right. I ended up writing the same piece of code in two different places, but at least it works. And that’s a miracle, considering I’m not particularly fluent in assembly. After a bit of reading I knew how to add or compare numbers, and how to point to memory addresses, but that’s about the extent of my knowledge. Luckily a lot can be accomplished by mimicking other parts of existing code, so as long as I could call the function in a similar manner to native implementations, I’d be good.
And I was, it worked! Guess I can call myself a ROM hacking expert now?