Under the microscope: O.D.T. (PlayStation)
Escape... Or Die Trying
There are lots of ways to cheat at O.D.T., the 1998 game from Psygnosis. Here are nine different codes that you can put into the pause menu:
You could find these in books and magazines way back when, but not in the official O.D.T. strategy guide. It suggested that you call the Psygnosis Hint Line for tips instead.
The Upgrade Spells code is kind of a disappointment. It doesn’t do anything unless you already have some spells. Lame, right?
Let’s look at the game data to see if there’s a more effective way to cheat.
When the game is paused, the function at 8007a338 (NTSC-U version) is checking for controller input. It reads from the array of structs at 8009f1ac to determine how to react to the input. Each struct corresponds to a cheat code, and is made up of:
Two bytes that indicate the length of the button sequence that follows.
Two bytes that serve as the counter for how many correct buttons have been entered.
An array of two-byte patterns that correspond to cheat sequence buttons.
The struct for the Restore Energy code above looks like this in its default state:
8009f1ac 0x05 # Five buttons in the code
8009f1ae 0x00 # Zero buttons entered so far
8009f1b0 0x8000 # Left
8009f1b2 0x2000 # Right
8009f1b4 0x8000 # Left
8009f1b6 0x2000 # Right
8009f1b8 0x80 # SquareThere are ten cheat structs in the array. The first nine correspond to the ones in the table above, but the last one is new. The button sequence is: R1, L2, R2, L1, Triangle, Down.
What’s it do? Gives you every spell, of course!
Aha, the missing cheat code. How does it work?
After you enter one of the codes, the index of its associated struct is used to determine which branch of the cheat handler function executes. The logic for branch 0x9 looks like this (pseudo-Python adapted from Ghidra’s decompilation):
for i in range(18):
if (i == 4) or (i == 7):
continue
set_spell_level_8002c25c(spell_data_800a9ea0, i, 0, 0)That is, it loops through 18 spell slots and invokes a function for each one. Makes sense! But it skips slot 4 and slot 7.
What happens if those don’t get skipped? Special placeholder items with the label Inventory Full! get added to the spell list:
You can assign these placeholders to a button, just like a normal spell:
But if you try to use them, your character immediately dies and then the game locks up:
Now I can see why the programmer skipped over these slots.
Outro
I wonder if the Hint Line operators knew about this extra code? If you worked in a Psygnosis call center in the 1990s, get in touch…
Thanks for reading Rings of Saturn. Subscribe here on Substack for more retro game reverse engineering articles every week:










I wonder if those were intended to be working spells they just couldn't get right? It's kinda hilarious that it fails so hard, that first your character dies, and then the *game* dies! "You're doing it wrong..."