BattleSport is a combination sports / vehicular combat game from Cyclone Studios. It was published for the 3DO in 1996, and ported to the Saturn and PlayStation in 1997.
There are a bunch of cheat codes listed for the 3DO version on the cheat sites. Some of them seem to work on the Saturn version without modification, but is the list comprehensive? And does anything work on PlayStation? I decided to check…
Saturn and 3DO: button codes
Good news — there are a bunch of unreported cheat codes for the 3DO and Saturn versions of this game. All of them are entered at the mode select screen. The buttons are the same for both 3DO and Saturn, provided you interpret L
as LS
and R
as RS
.
The sequences that require holding multiple buttons are reasonably forgiving — for example, to do L+R+A
, you can first hold L
, then R
, then A
. You’ll hear a sound effect (“Oh, yeah!”) if you’ve entered a code correctly.
The video codes
These codes play one of the games video files:
Credits: L+R+C
Opening: L+R+A
"Your tournament ends here":
R+B, C, L+C, L+A,
Right, A, Left, C
"Champion":
L+A, Right, L+Left, R+Right,
A, R+C, L+A, R+A,
Left, L+Left, L+Left, L+R+Left,
L+R+B
I think all of these were previously undocumented?
The opponent codes
These codes unlock opponents that you can play against:
Bull: A, B, Left, B, A, L+Left, L+A, Right
Bog: Left, R+A, L+A, Right, A, C, R+B
Kubo: Left, L+C, B, A, L+A, L+Right
Ariana: B, Left, L+Right, R+A, L+C, L+A
Veteran: R+Right, Left, R+B, A, L+C, L+Left, R+Right
Andro: R+A, L+Left, A, L+Right, C, B, C, L+A, L+Left
Pthark: L+B, Right, R+Right, L+Right, L+C, L+B, R+A
Wertol: Left, L+Right, B, C, L+A, L+Right, L+Right, L+A
Ka'av: L+B, Right, R+Right, L+Right, R+Right, Left, R+Left, A
Quazar: L+B, Right, R+Right, L+Right, Left, L+C, B, A, L+A
All but Quazar: A, R+Right, L+R+Right, L+B, L+A, L+R+B, R+A, R+Left, R+C, A
Some of these were known previously, but I don’t think the “unlock all but Quazar” one was. Quazar is the star of his own 3DO game, so he’s a guest character.
The tank codes
These codes allow you to choose different tanks for yourself:
Invader: R+B, C, L+Right, A, L+A, L+B, R+Right
T-Shark: A, L+Left, R+A, L+Right, B, R+C, L+C, L+Left
Repulse: L+A, Left, R+Right, L+B, L+C, R+B, R+A
Scorpion: Left, L+Right, A, C, L+Right, L+Right, L+C, L+A
Brawler: Right, R+A, L+C, L+Right, A, L+C, R+B, Left
Stingray: L+Left, L+C, Right, A, L+A, L+Right, L+A
Past-time: A, Left, L+Right, R+Left, L+C, L+A, L+Right
Quazar's: R+A, Left, R+Left, Right, L+C, L+B, R+Right
B'sotto: R+C, L+Left, Right, L+B, C, R+B, C, L+A, Left
All tanks: L+Right, A, L+R+Right, L+C, Left, L+C, L+B, C, A, L+A, A, L+A
Some of these were known previously, but I think the “all tanks” one is new. Quazar’s tanks is way overpowered!
The arena codes
These codes let you play in additional arenas — I think the first code is new:
Extra arenas 1: B, A, L+C, L+Right, A, L+C, R+B, R+Left
Extra arenas 2: Right, L+A, R+C, L+C, Left, L+C, R+B, Left
Press left at the arena selection screen to see the additional ones:
Notice that the secret arenas on the Saturn version seem to be missing: contrast the gray ground texture on Saturn with the 3DO’s blue:
Technical details
There’s one code whose effect I can’t figure out:
Unknown: A, B, C, A, B, C, L+A, L+B, L+C, R+A, R+B, R+C
Based on where its effect is referenced, I think this may be intended to alter sound effects somehow? Even with speakers turned up I couldn’t hear a difference.
That code provides a nice illustration of how the codes are stored in memory, though. The array at 06092a2c
(Saturn NTSC-U version) holds the sequences of buttons for each of the codes. Each button gets a bit pattern, and when the buttons are held in combination, the patterns are OR-ed together:
06093080 08000000 # A
06093084 04000000 # B
06093088 02000000 # C
0609308c 08000000 # A
06093090 04000000 # B
06093094 02000000 # C
06093098 08200000 # L+A
0609309c 04200000 # L+B
060930a0 02200000 # L+C
060930a4 08400000 # R+A
060930a8 04400000 # R+B
060930ac 02400000 # R+C
A is 08000000
, L is 00200000
, so L+A is 08200000
.
Everything is more or less the same on 3DO — the button list starts at 000d4888
.
PlayStation: special names
The PlayStation version of Battlesport uses an entirely different system for cheat codes. Instead of pressing buttons on the title screen, you enter special names for your character1.
The function at 800228cc
(NTSC-U version) does a halfhearted hash of your name entry and then compares it to 31 different stored values. If the hash matches one of them, a cheat effect is applied. I replicated the hashing algorithm in a Python script and enlisted Malenko2 to run force search over all of the possible strings on his spare server.
Only two out answers came back: CHEATOFF and NOCHEAT, both of which simply reset the “unlocked stuff” flag field (at 800b8aac
). Strange! Did I mess up the algorithm somehow?
I asked Ryan Govostes3 for assistance, and he wrote back to say that he used a theorem prover (Microsoft’s Z3) to determine that those were the only matches using uppercase letters. However, he found that if numbers were allowed, he got some hits. Did the developers make these codes impossible to enter? You can’t put numbers into the name entry screen!
…or can you? I checked the function at 80022690
, which handles name entry, for clues. Here’s Ghidra’s decompilation of one section, with my labels added:
letter = letter_index + 0x40; // 1 is 'A', 2 is 'B', etc...
if (
(letter < 0x5b) && // 0x5b represents backspace
(player_1_name_length_01 < 8) // 8 is the maximum input length
) {
if (
(p1_held_button & 8) != 0) && // Holding R1
(p1_held_button & 2) != 0) && // Holding R2
(p1_pressed_button & 4) != 0) && // Pressing L1
(letter < 'K') // Index 0 through 9
) {
letter = letter_index + 0x2f; // 1 is '0', 2 is '1', etc...
}
Normally when you enter a letter, the index gets added to 40
. So index 01
becomes 41
, which is ASCII A
. But if you’re holding R1
and R2
and and then L1+X
to select your letter, the offset is 2F
instead — 01 becomes 41, which is ASCII 0
. Very tricky! You can’t see any numbers you enter onscreen, so the special names are particularly difficult to enter.
Ryan came up with an efficient solver program to give all of the special names. He explained:
Thinking about this hash function more carefully, I realized what the algorithm was doing: using the characters of the name (shifted, and with a modulus applied) as digits in a base 6 and base 7 system. To go in reverse, we start the “full" numbers composed from these digits,
x
andiVar6
, which we deduced from z. We split these into their digits; we get a digit-pair (one fromx
and one fromiVar6
) per character of the name. We use a lookup table to get back from digit-pairs to characters.
Here are the names for unlocking opponents. Hold R1+R2 and press L1+X to select A for 0, B for 1, etc.
Bull: 0BULL0
Bog: BOG1BOG
Kubo: KUBO777
Ariana: 55ARIANA
Veteran: 1KA1TAN1
Andro: ARN0LD
Pthark: BOB27BOB
Wertol: L1CHL1CH
Ka'av: OKMA5TER
Quazar: QMACH1NE
0PPMEPLZ: All opponents
These names unlock tanks:
Invader : 0UTDARTH
T-Shark: THE42T
Repulse: MAGN3T
Scorpion: 3TR1AD
Brawler: B1GGUY8
Stingray: SLP2PRY
Past-time: 6FUT06
Quazar: YELMBL41
B'Sotto: XVOC394
Venom : B0RG67
B1GTNX9: All tanks up to Past-time
The Venom tank seems to be exclusive to this version of the game. Note it shares a model with the Past-time tank, which looks different from its Saturn and 3DO counterparts (see the screenshot above):
These special names unlock arenas:
Extra arenas 1: WAY6TUF3
Extra arenas 2: MAN0MAN9
There are some PlayStation extras, too: 123DEBUG enables split screen mode, even against a CPU opponent. Pressing Start toggles this, sort of — the effect is kind of buggy:
If you enter DEM0 and then return to the title screen (Select button), the game starts playing auto demos.
Two more I couldn’t figure out: PG13 and PR0G. These might not do anything? The latter is referenced in the title screen code, but if it has an effect it wasn’t discernible to me.
Outro
Thanks for reading! For previous coverage of new cheat codes for old games, see my archive.
For more 3DO-related articles, see my coverage of:
The 3DO version of Battlesport also uses the player’s name for accessing “hidden message” Easter eggs. The list on GameFAQs looks right to me.
Malenko previously appeared in the Kingdom Grandprix, High Velocity, Tokyo Highway Battle, and Tony Hawk’s Pro Skater 3 articles. Check out his translation patch for Saturn Bomberman Fight!!, which I contributed a few things to.
Ryan previously assisted on the Tony Hawk’s Pro Skater 3 article. Check out his GPU accelerated THPS hash cracker here.
Thank you. Please take a look "under the microscope" at these games for the Dreamcast console:
Prince of Persia: Arabian Nights
MDK2
Evil Twin: Cyprien's Chronicles