Under the Microscope: NBA Jam Tournament Edition, NBA Jam Extreme

The two Saturn NBA Jam games all have lots of “secret” stuff — cheat codes, bonus teams, extra players. Most of these things were documented in magazines and online in the 90s, but a few were missed. For example, Saturn enthusiast Malenko discovered new players in Tournament Edition in 2023.

In this edition, I’m going to highlight some more things that have escaped notice for decades:

  • Two new cheat codes for Tournament Edition.
  • Three new bonus characters and a few odds and ends for Extreme.

Details are below!


NBA Jam Tournament Edition

There are nearly comprehensive lists of hidden things in Tournament Edition. For the Saturn version Sega Retro has the best documentation of the cheat codes and Easter eggs. But as of this writing, even that site is missing two codes.

Both of the new codes are entered on the Tonight’s Match-up screen:

Where to enter the codes

The first is:

Y, Y, Y, B, Down, Down, Up, Left

This enables the Powerup Turbo effect, which gives you unlimited Turbo.

Powerup Turbo enabled

The second is:

Down, Right, C, Y, C, Right, Down

This enables Powerup Push. Now if you push an opponent, they’ll go flying across the court.

Powerup Push enabled

Technical details: The codes start at 060678a4 in the NTSC-U version. Each one starts with a 16-bit representation of its length, followed by an array of 16-bit patterns that represent the button sequence. For the Powerup Turbo code, we have:

  • Size: 8
  • Buttons: [0x20, 0x20, 0x20, 0x100, 0x2000, 0x2000, 0x1000, 0x4000]

0x20 is Y, 0x100 is B, 0x2000 is Down, 0x1000 is Up, and 0x4000 is Left.

When you press buttons on the Tonight’s Match-up screen, the buffer at 06073e38 starts filling up. The function at 0604a348 reads through this buffer and compares it to 19 different codes. Here’s Ghidra’s decompilation of that function with my variable names added:

bool check_cheat_0604a348(ushort *history_1_,ushort *cheat_buttons_1_)
{
  int index_3;
  int index_1;
  uint size_1;
  uint index_2;
  
  size_1 = (uint)*cheat_buttons_1_;
  index_1 = 0;
  if (0 < (int)(30 - size_1)) {
    do {
      index_2 = 0;
      index_3 = 0;
      if (size_1 != 0) {
        do {
          if (history_1_[index_3] != cheat_buttons_1_[index_3 + 1]) break;
          index_3 = index_3 + 1;
          index_2 = index_2 + 1;
        } while (index_3 < (int)size_1);
      }
      index_1 = index_1 + 1;
      if (index_2 == size_1) {
        return index_2 == size_1;
      }
      history_1_ = history_1_ + 1;
    } while (index_1 < (int)(30 - size_1));
  }
  return false;
}


NBA Jam Extreme

Most of the hidden characters in Extreme have been documented. But there are a few that don’t seem to be mentioned anywhere.

In particular, these three on the hidden Invisible team seem to be new. To access them, start a new game. When prompted to Keep Record, say Yes. Then enter these initials and dates:

  • Evan Bell: EVN, May 25.
  • Toughguy Nicholas: G_N, Feb 9.
  • Stats Tolman: KID, Aug 13.

These are all cartoon mummies:

Evan Bell, Toughguy Nicholas, and Stats Tolman

There are several other initial and date combinations that don’t appear online. One notable one is ABC and Jan 1 — this activates every hidden team:

All hidden teams available

There are other codes that do the same thing — JBP, May 17 also unlocks all teams (and lets you play as arcade game developer Jeff Peters). Here is the full list of effects, with new items in bold:

There are some other tricks you can do on the Keep Record screen that are well-documented online. For example, if you enter PLAYOFFS two letters at a time (backspace after each pair), you can start in the playoffs.

Enter SECRET like this, and you’ll get these Secret Teams screens:

The partially finished “Secret Teams” mode

This doesn’t actually activate any hidden teams, however. The feature seems to be incomplete? This code doesn’t appear in the PlayStation version.

There are more unfinished effects like this:

  • MOON — sets a bit, but nothing reads it.
  • ARMSTRONG — would have the same effect as MOON.
  • ONEQ — seems to have been related to text display somehow, but doesn’t actually work.
  • FOURQ — would have undone the effect of ONEQ.

The developers presumably ran out of time and didn’t bother taking these out.

Technical details: All of the special initials and dates are stored in plaintext. In the NTSC-U version, they’re loaded to 0607c528. The “unlock all” pair from above is ABC0101.

The function at 06063a94 uses a version of strcmp to check player entry against each of the special initials. This function reads entire strings (up to their null terminators), so you have to type in the exact initials.

By contrast, the function at 060502d4 uses strncmp to to check player entry against the longer names (which are also stored in plaintext). The difference between strcmp and strncmp is that the latter is given a size limit. For the SECRET name, that limit is 6. So it will match if you enter your name as SECRETABC, SECRETXYZ, or anything else that starts with SECRET.


Outro

Thanks for reading. I’ll be back with another article about a Saturn article next week! Check out my Substack page for more retro game reverse engineering in the meantime.


Discover more from SEGA SATURN, SHIRO!

Subscribe to get the latest posts sent to your email.

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.


*