Breaking Videogames

For those who can't play a video game without dissecting it


Project maintained by banyaszvonat Hosted on GitHub Pages — Theme by mattgraham

The Spyro work thus far had been uncomplicated, but that’s because I’ve been able to avoid a unique feature of the PSX, overlays. I don’t entirely understand it, but the idea seems to be akin to virtual memory or bank switching: loading chunks of code at fixed^[1] addresses at runtime. These aren’t stored in the main executable, so the two options for getting them are finding them on the CD, or dumping them from memory when they’re loaded. With my current workflow, there’s either uncertainty about where it ends (if dumped from memory), or where it begins (if extracted from files), so they’re slightly cumbersome to work with.

Anyway, in Spyro, each level is associated with a couple of function pointers, set during level transitions. These point into the overlay to functions that do… something. What I’m currently trying to find out is what these pointers mean. I was able to dump one of the overlays, but I’ll have to figure out a workflow that doesn’t involve flipping between two decompiles.

Anyway, here’s some reading I found useful:

Reverse-engineering PSX games with Ghidra

TDR: Practice Using OVERLAYS

Meanwhile, getting ever closer to finishing the draft of the Big Disgaea Article, which will tie together some of the posts from here. May even feature a legitimate use for a code cave, unlike a certain #1 second-generation Blizzard employee.


^[1]: Fixed to that particular overlay that is.

Back to index