Under the microscope: Thunder Force V (Saturn, PlayStation)
Constituted Ray Art Weapons
In this edition I’m examining Thunder Force V, the horizontal shoot-em-up from Technosoft. I found:
A cheat code for the Saturn version that lets you start from any course.
A similar cheat code for the PlayStation reissue, Perfect System.
Details are below!
The Saturn version
Enter this sequence at the title screen:
L, R, Z, B, Y, C, X, StartYou’ve gotta go fast with this: you’re only allowed 15 frames between button presses. If you take too long or press a wrong button you have to start over by pressing Start and then B.
You’ll hear a sound effect if you entered the code correctly. Choose Game Start to get to the Course Select screen:
Choose the usual 1 > 2 > 3 progression. Before answering the OK? Yes / No prompt, use the following button combinations along with Start to activate a different starting course:
Stage 4: Hold Y+Z
Stage 5: Hold X
Stage 6: Hold X+Z
Stage 7: Hold X+Y
You’ll be given weapons that are appropriate for the course you choose.
The PlayStation version
For the PlayStation version, this is the code to enter at the title screen:
Triangle, Triangle, X, Circle, Square, Circle, Select, StartAt the course selection screen use these button combinations along with Start to change your starting course.
Stage 4: Hold Select+Triangle+X
Stage 5: Hold Select+Square
Stage 6: Hold Select+Square+X
Stage 7: Hold Select+Square+Triangle
Technical details
I found this code the way I usually find codes: I located where in memory the game stores user input (you can use Cheat Engine or similar for this), then set a read breakpoint for those addresses (I use the Mednafen debugger for both Saturn and PlayStation).
On Saturn, the code handling is in the function at 06029e14. Its logic looks like this pseudo-Python:
if code_entry_allowed != 0:
if pressed_button == cheat_buttons[correct_counter]:
correct_counter += 1
timeout_frames = 15
if correct_counter > 7:
cheat_effect |= 1
elif pressed_button == 0x00:
timeout_frames -= 1
if timeout_frames < 0:
code_entry_allowed = 0
else:
code_entry_allowed = 0The code_buttons sequence starts at 060437e4. It uses a standard (for Saturn) mapping of bit patterns to buttons:
060437e4 0008 # L
060437e6 0080 # R
060437e8 0010 # Z
060437ea 0100 # B
060437ec 0020 # Y
060437ee 0200 # C
060437f0 0040 # X
060437f2 0800 # StartThe cheat_effect value is stored at 0601ac14. Its value is checked on the Course Select screen. The function at 060318d8 has logic like this:
if held_button & X_BUTTON != 0:
course_flags |= 4
if held_button & Y_BUTTON != 0:
course_flags |= 2
if held_button & Z_BUTTON != 0:
course_flags |= 1
if course_flags > 6:
course_flags = 0The flags combine to alter the starting course as shown above. If you hold X+Y+Z, all alterations are reset.
All of the code handling logic is identical on the PlayStation version. The NTSC-U version has the code button sequence stored at 800b8bb0.
Outro
For more on Thunder Force V, see my earlier article about a prototype build hiding out on a demo disc.
And for many more articles on retro game reverse engineering, subscribe to Rings of Saturn here on Substack:






