Under the microscope: RoboCop (PlayStation 2, GameCube, Xbox)
Putting serious reverse engineering tools to frivolous use
This article is about RoboCop, the 2003 game from Titus Interactive. It had an unusual set of releases: the Xbox version came out in the U.S. and in PAL regions, the PlayStation 2 version came out in PAL regions and in Japan, and the GameCube version came out only in Japan. It was not terribly well reviewed.
Why look at it? Well, it bugs me when I see something like this on one of the cheat sites:

There’s only one code listed. It’s only for one platform. There are 22 upvotes and 13 downvotes. Does it actually work? Is there an equivalent on the other platforms? Is there really only one code? I decided to investigate.
Answers: the listed code does not work (who are these 22 upvoters?). There are equivalents on other platforms. And there are several more codes! Details on how everything actually works are below…
The reverse engineering
The PS2 version of this game shipped with debug symbols. That makes locating the cheat handling code very easy: just search for functions that contain the word Cheat.
The most interesting function is called TiCheatCodeTest. This is the one that actually checks for buttons being pressed. Its logic is something like this pseudo-Python:
def TiCheatCodeTest(cheat_info, pressed_button):
ret = 0
if cheat_info.targets[cheat_info.counter] == pressed_button:
cheat_info.counter += 1
if cheat_info.targets[cheat_info.counter] == 0:
ret = -1
cheat_info.effect = ~cheat_info.effect
cheat_info.counter = 0
else:
cheat_info.counter = 0
return retThe variable I’m calling cheat_info is a struct with this format:
4 bytes: A numeric ID.
16 bytes: An ASCII string with a name (e.g.
PowerNoNull).80 bytes: An array of bitmasks that represent controller buttons.
1 byte: A tracking counter.
1 byte: An effect tracker.
By setting an execution breakpoint for that function, I was able to find the memory addresses of all of the cheat_info structs for PS2. There aren’t debug symbols in the GameCube or Xbox versions, but it’s straightforward to locate the equivalent structs in those versions by searching for the ASCII names.
The tracking counters were useful for determining what buttons go with the bitmasks. If you press the right button, the counter goes up. If you press the wrong button, it goes back to zero. Based on some educated guesses and trial & error, I found that the correspondences are:
Before we get to mapping these to cheats, there are a couple of oddities. First: The PS2 and GameCube versions have the same set of cheats, but the Xbox version is missing some. Second: A few cheats are impossible to enter due to lack of controller buttons:
One labeled ModeShooter can’t be entered on GameCube because there’s no button that corresponds to one of the values in the bitmask array. However, it doesn’t seem to do anything on PS2 (buttons: L1, L2, R1, R2, L3, R3).
Another labeled Cheat code B can’t be entered on Xbox for the same reason. This one doesn’t seem to do anything either – there’s no effect on PS2 (buttons: R1, L3) or GameCube (buttons: R, Start).
Five of the cheats work, though. What do they do?
The cheats
The first cheat is called PowerNoNull. Enter it during gameplay. It resets your Power level when it falls to zero, effectively making you immortal.
PS2: Up, Up, Down, Down, Right, Right, Left, Left
Xbox: Up, Up, Down, Down, Right, Right, Left, Left
GameCube: Up, Up, Down, Down, Right, Right, Left, Left
The second cheat is called MunitionNoNull. Enter it during gameplay. It gives you unlimited ammunition – the HUD will stop displaying your remaining ammo after you shoot your weapon:
PS2: Up, Left, Down, Right
Xbox: Up, Left, Down, Right, X, Up, Left, Down, Right, B
GameCube: Up, Left, Down, Right, X, Up, Left, Down, Right, B
The third cheat is called Invincible, and it does what you might expect – it prevents your Shield and Power from draining when you take fire. Enter it during gameplay:
PS2: Up, Up, Up, Down, Down, Down, Right, Right, Right, Left, Left, Left
Xbox: Up, Up, Up, Down, Down, Down, Right, Right, Right, Left, Left, Left
GameCube: Up, Up, Up, Down, Down, Down, Right, Right, Right, Left, Left, Left
The fourth cheat is called LevelOk. It completes the current level. Enter it during gameplay:
PS2: Triangle, Circle, X, Triangle, Triangle, Circle, X, Triangle, X, Square
Xbox: B, X, A, B, B, X, A, B, A, Y
GameCube: B, X, A, B, B, X, A, B, A, Y
The fifth cheat is called LevelMenu. It isn’t implemented on Xbox, alas. The cheat gives you a level select item in the Options menu. Enter it on the main menu:
PS2: L1, L1, L2, L2, R1, R1, R2, R2, R2, R2, R1, R1, L2, L2, L1, L1, L1, L2, R1, R2, R2, R1, L2, L1
GameCube: L, L, Z, Z, R, R, R, R, Z, Z, L, L, L, Z, R, R, Z, L
Outro
Thanks for reading Rings of Saturn. If you know of other games that have sketchy cheat codes listed somewhere, leave a comment – I like finding the definitive answers.
I’ll be back with more retro game reverse engineering articles soon. Check out the archive for more in the meantime!











Maken X (DC) - https://www.neoseeker.com/makenx/cheats/dc/
I couldn't enter these cheat codes.
Test Drive V-Rally (US) and V-Rally 2: Expert Edition (EU) - https://gamefaqs.gamespot.com/dreamcast/199236-test-drive-v-rally/cheats
I also couldn't enter this cheat code.