Fighting Vipers is one of the best fighting games on the Saturn, and that’s saying something - the system has a bunch of great fighters. It’s very replayable, and has lots of unlockable stuff. You can, for example, play as a giant bear if you complete enough matches.
The Japanese version of the game has even more hidden things to find, especially for the character Honey. In particular, you can unlock extra costumes for her: one is a Hawaiian themed outfit, and the other is a school uniform. They’re available from the character select screen (except in Arcade mode):
A while back, I discovered that the game has a third costume for Honey. This one is notable because it seems to be based on one from another of the best Saturn fighters, Virtua Fighter. Compare Pai and Honey1:
The Pai costume isn’t unlockable - there’s no way to activate it within the game. But I’ve made a patch to make it playable. You can get it from SegaXtreme.
The patch also unlocks the other hidden things on the disc, so you don’t have to play for dozens of hours to see everything. And it also includes a previously-unknown Backup Debugger that I found while I was looking into all of this! See below for details on how the patch works.
Honey’s Pai outfit
When you use one of the character select screens to choose a fighter, a numeric version of your choice ultimately gets stored at memory address 06092420
. The character list is:
00: Grace | 08: Mahler
01: Bahn | 09: Pepsiman
02: Raxel | 0a: Kumachan
03: Tokio | 0b: Honey (Pai outfit)
04: Sanman | 0c: Honey (breakable skirt)
05: Jane | 0d: Honey (school uniform)
06: Honey | 0e: Honey (Hawaiian outfit)
07: Picky | 0f: B.M.
Arcade Mode and Versus mode both call the function at 05c7d398
to do this store operation2. That function copies your choice of character from a temporary location to the target mentioned above. It also handles player 2’s character choice and both players’ costume choice.
I replaced its logic with my own, which gets rid of the costume handling. In its place, my code changes character index 06
to character index 0b
.
I’d have liked to keep the costume choices, but there’s not a lot of room to maneuver - this bit of assembly seems to be hand written, and you can’t use certain registers without disrupting the calling function.
This makes Pai Honey playable. But there’s a problem in Arcade mode: when you reach the match with the original Honey, you get some weird graphical artifacts3. I fixed it by replacing Honey with Kumachan:
The list of characters you fight in Arcade mode is stored at 05c78000
, and all we have to do is replace Honey’s entry with Kumachan’s:
05c78005 0a
One more issue: If another player joins Arcade mode (or if you summon Pepsiman by not pressing any buttons during a match), the game crashes. This is because the Arcade character select screen doesn’t have display information for Pai Honey.
To fix this, I reset player 1’s character choice:
05c7a79e e100 # Set player 1's character to Grace
05c7a7a2 e100 # Allow player 1's cursor to move
I’m sure none of you are wondering “What happens if you break Pai Honey’s armor,” because of course the point of this hack is to see her new costume; not the lack of it. But the answer is “the same thing that happens when you use the breakable skirt feature.”
The backup debugger
The mode select screen gets a second Options item when you beat Arcade mode. But there’s actually a third Options item, which can be unlocked with a button code!
On the mode select screen, use controller 2 to input this sequence:
Up, Up, Up, Up, Y,
Down, Down, Down, Down, Z,
Left, Left, Left, Left, Y,
Right, Right, Right, Right, Z
You have to do it very quickly. There’s a counter at 060880d8
that tracks the number of correct entries you’ve made. A sound effect plays when the code takes effect, but you have to press B to drop back to the title screen and re-enter the mode select screen to see the result.
Selecting the new item brings up the Backup Debugger:
When you launch it, it puts a special file into your backup RAM, so beware using it with a save file you care about:
It’s not terribly user-friendly. You can navigate the items with the D-pad and use A and C to adjust some settings. B returns you to the menu. I don’t yet understand what the menu items do. If you figure something out, tell me about it!
This patch skips the code and enables the menu directly:
06033992 e101
Unlocking characters, options, and portraits
After it parses your save file, Fighting Vipers stores the characters you’ve unlocked as bit flags at 00200080
. There’s one bit for Pepsiman, one bit for B.M., etc.
The simplest way to unlock every character is to replace every read of the bit flags with -1, which has all bits set:
05c79e94 e3ff # Read -1 instead of the dynamic value
060383a6 e1ff
06040672 e1ff
060335e0 e1ff
To unlock Big Head mode, we need to have played 200 matches. The match count is loaded to 00200048
, but rather than reading in a constant value, we can just tell the game that the value it read was big enough. The same trick works for Wall Display, which requires 300 training moves to have been mastered.
060335f6 0018 # Set "true" even if the count wasn't high enough
06033608 0018
0603366a 0018
06033644 0018
060333e2 0018
0603342c 0018
06029096 0009 # Don't reset the options
Portrait mode checks the array of booleans starting at 002000e8
to see which ones are unlocked. The function at 060445fc
doesn’t start at the beginning by default, however; it puts you partway into the list. We’ll force it to (a) start at the first position, and (b) always read a value of 01
instead of the actual array’s content:
060446b0 0018 # Replace "greater than" with "true"
060446c2 e001 # Read a static 1
Some portraits seem to be repeated when absolutely everything is unlocked. I’m not sure what’s up with that!
Outro
For a very thorough explanation of the secrets in Fighting Vipers, see this article from Gaming Hell.
For hacks that unlock hidden features in other games, see:
Many thanks to Danthrax for testing an early version of my patch!
If you doubt that it’s really supposed to be Pai, I don’t blame you. But the game’s files include MHON0.BIN
and MPAI0.BIN
, which is a pretty big hint.
Yes, Fighting Vipers runs game code from VDP1’s VRAM; I don’t know why.
Somehow the game has no issue with Honey versus Honey in the 2 player modes. I’m not sure why that works when Arcade mode doesn’t!