There are a bunch of cheat codes already documented for this sequel to Mat Hoffman’s Pro BMX. Both GameFAQs and IGN have dozens. But are their lists complete? I decided to check.
Answer: they’re not! I found a few extra codes that haven’t been reported in the decades since this game was released.
This code, entered at the Press Start screen, unlocks all riders at once:
PlayStation 2: Triangle, L1, Square, Right, Left, Circle, Circle
GameCube: B, L, Y, Right, Left, X, X
Xbox: B, L, Y, Right, Left, X, X
The one, also entered at the Press Start screen, unlocks the multiplayer Tiki Battle:
PlayStation 2: L1, Left, Up, Up, Up, Left
GameCube: L, Left, Up, Up, Up, Left
Xbox: L, Left, Up, Up, Up, Left
See below for more on how the codes work, and for details on the reverse engineering that went into locating them.
Unlock all riders
There are cheat codes to unlock each of these riders individually, but the new one unlocks them all at once.
The two normal human riders are Vanessa and Day Smith:
Then there’s Mime and Bigfoot:
And the lava demon Volcano:
Unlock multiplayer Tiki Battle mode
Normally this game is about doing bike stunts. But there’s a mini-game called Tiki Battle that’s a first person shooter that you can unlock:
There’s also a multiplayer version of this mini-game that you can unlock. It’s available in the Multiplayer menu (and you have to have a second controller plugged in):
The cheat code for unlocking the single player Tiki Battle has been known for ages, but the multiplayer cheat code seems to be new.
Technical details
I used these tools to examine the game code:
The PCSX2 emulator and the and RALibretro Memory Inspector
The Dolphin emulator’s debugger
Ghidra and the ghidra-emotionengine-reloaded and Ghidra-GameCube-Loader plugins
I started with PS2. Searching for values that changed when pressing buttons using the RALibretro Memory Inspector led me to this region of memory:
The array starting at 018079a0
(PS2 NTSC-U version) records your button history. When you press Triangle, a 00000000
appears. When you press Circle, 00000001
appears. The full mapping is as follows:
Next to the button history array is a counter at 01807960
that keeps track of how long it is. This sort of button counter is common in cheat code systems, so I set a read break point for it in the PCSX2 debugger.
That led to the function 0027ae60
. With my function labels it looks like this:
if button_history[0] == L1_BUTTON:
check_L1_cheat_01()
check_L1_cheat_02()
check_L1_cheat_03()
elif button_history[0] == R1_BUTTON:
check_R1_cheat_01()
check_R1_cheat_02()
...
That is, the game checks the first button you’ve pressed. Based on that it calls various functions to examine the rest of the buttons. There are a total of 37 checks. They all look like:
if button_history_[0] == L1_BUTTON:
if (history_length >= 1) and (button_history[1] == LEFT_BUTTON):
if (history_length >= 2) and (button_history[2] == RIGHT_BUTTON):
...
That is, there’s logic for each button in every sequence. I’m puzzled; why didn’t they use a table and compare the history elements to each entry? There’s just a ton of code for every check.
Anyway, I mapped out all of the sequences and then compared them to the ones known by the Internet. After I’d crossed out all of those, I was left with the two new ones.
Thankfully, there’s a 1:1 mapping between the code buttons for PS2 and GameCube, so translating the codes was a snap.
Outro
See my earlier article on the first Mat Hoffman’s Pro BMX game for more from this series. And for many more cheat code discoveries see my archive.
Which other games should I be examining? Tell me in the comments!
