Under the Microscope: Batman Forever: The Arcade Game

In this edition, we’re looking at the Saturn version of Batman Forever: The Arcade Game. This was a console port of Acclaim’s and Iguana’s 1996 ST-V arcade title.

Some cheat sites have codes listed for the PlayStation version of this game, e.g. GameFAQs:

I was interested to see if I could find equivalent codes for the Saturn version. But these don’t actually work on PlayStation! They seem to be completely hallucinated.

Fortunately, I did find a Saturn-exclusive cheat code that seems to have stayed hidden for 30 years. Details are below…


The Easter egg

This game has a very unusual code entry sequence. Here are the buttons that you need to press:

Controller 1: Left, Down, Right, Up, X, X, X, A, B

Controller 2: Right, Down, Left, Up, X, X, X, A, B

But there’s a catch: the two controllers can’t be more than 2 buttons out of sequence with each other. That is, if player 1 puts in their first two buttons, they have to wait for player 2 to put in a button before proceeding.

The code is entered on the logo screens (Warner Bros., DC, Acclaim, Iguana).

The Acclaim and Iguana logos.

If you got it right, this screen will pop up after the Acclaim logo — Photoshopped pictures of 15 members of the development staff!

15 modified developer photos.

Based on the game credits, the pictures are of:

The credits screen.

A few names are ambiguous: Jason could be Jason Carpenter or Jason Moulton. Mike and Mick could be Michael Daubert or Michael McCallion. I have no idea on Malc, but that name also appears on the default scoreboard.

Mick, Scot, Malc, and Rich on the scoreboard.

If you can fill in any details, leave a comment!


Technical details

The function at 06021b30 is listening for input during the logo sequence. It looks like a fairly standard cheat code handler — it tests whether the button player 1 has just pressed matches a particular progression. Here’s a fragment from Ghidra’s decompilation (with my labels added):

      if (p1_pressed_060dddfc == p1_buttons_[p1_cheat_counter_06041018]) {
        p1_cheat_counter_06041018 = p1_cheat_counter_06041018 + 1;
      }

You can see that it also checks a progression for player 2:

      if (p2_pressed_060dde40 == p2_buttons_[p2_cheat_counter_0609a3f4]) {
        p2_cheat_counter_0609a3f4 = p2_cheat_counter_0609a3f4 + 1;
      }

But here’s the twist: if the two progressions get too out of sync, they both reset. One player going too fast or too slow means both players fail and have to start over:

  delta = p2_cheat_counter_0609a3f4 - p1_cheat_counter_06041018;
  if (delta < 0) {
    delta = -delta;
  }
  if (2 < delta) {
    p1_cheat_counter_06041018 = 0;
    p2_cheat_counter_0609a3f4 = 0;

The button sequences are represented using bitmasks, as is standard for most games.

The original ST-V arcade version of this game also has the cheat code listening function. It uses a different set of buttons, but the Easter egg picture is the same:

I couldn’t get the Kick button working when using the Mednafen emulator’s ST-V mode, but I’m reasonably confident that it will work on real hardware.

The arcade game’s button layout.

Outro

Thanks for reading. Under the microscope will be back with another Saturn game whose name starts with “B” soon. Will it be Battle Garegga? Battle Athletes? Bust-A-Move 3? Blazing Dragons? Tune in next week to find out.

About the author

Bo Bayles

Rings of Saturn: 32bits.substack.com

Be the first to comment

Leave a comment

Your email address will not be published.


*