In a previous edition I looked at Shining the Holy Ark for Saturn. I found an unusual method for enabling that game’s debug menu in that game, so I naturally wondered about its predecessor: does it have any secrets?
Answer: yes! It’s also got a debug menu that can be activated in a somewhat unusual way. Details on how this works are below — grab two controllers if you want to try it out.
The debug mode cheat
The name entry screen is secretly listening for input from controller 2:
Enter the sequence below on the second controller, but press each button two or three times:
Start, Start, Start,
Up, Up, Down, Up,
Left, Right, Left, Right,
A, B, C,
Z, Y, X,
Start, Start, Start,
Up, Up, Down, Up,
Left, Right, Left, Right,
X, Y, Z,
C, B, A,
Start, Start, Start,
Up, Up, Down, Up,
Left, Right, Left, Right,
L, R, L, R, L, R,
Start
It’s OK if you press a wrong button during the sequence, just so long as each of them eventually gets entered. You’ll hear a sound effect after the last button is pressed.
After entering the code, the debug menu is enabled:
The coolest items are TR (R button), which allows you to warp to arbitrary locations…
…and TL (L button), which gives you extra health, items, and spells:
There’s a thorough discussion of the items in the Shining Wisdom article at TCRF — check it out.
Technical details
The function at 060bca4e
(NTSC-J version) has the cheat handling code. It looks like this:
if debug_flag == 0x00:
if cheat_buttons[cheat_counter] == 999:
play_sfx(0x99)
debug_flag = 0x01
target_button = cheat_buttons[cheat_counter]
held_button = get_held_button(2) # Controller 2
if held_button == target_button:
cheat_counter += 1
The array I’m calling cheat_buttons
starts like this:
060c2af4 0800 # Start
060c2af6 0000 # ...
060c2af8 0800 # Start
060c2afa 0000 # ...
060c2afc 0800 # Start
060c2bfe 0000 # ...
060c2b00 1000 # Up
060c2b02 0000 # ...
060c2b04 1000 # Up
060c2b06 2000 # Down
060c2b08 2000 # Up
It uses a pretty common mapping of bit patterns to Saturn controller buttons. The list ends with a sentinel value of 999 (03e7
in hex).
I’m not exactly sure why some of the presses have 0000
values in between them and some don’t, but the code entry is forgiving enough that it doesn’t really matter.
The get_held_button
function in my pseudocode (at 06011ca4
) returns the value at 06027328
if its input argument is 1
. This is controller 1’s currently-held button. It returns the value at 06027334
if its input argument is 2, for controller 2.
The debug_flag
is the one highlighted on TCRF, and lives at 06006637
.
Outro
As far as I can tell, there’s not a way to access the debug features in the Shining Force III games (see TCRF) with button codes. I still hope to come up with something cool for that trilogy, though!
Which other games have hidden features that can be accessed via hacking? Tell me your favorites in the comments; I’ll add the games to my list.
