“WILD SHOT!”

Madison Williams
8 min readJan 27, 2020

--

One Man’s Obsessive Quest to Unlock the Secrets of NBA Jam ‘94

My friends and I get together at Lake Tahoe in the spring every year to play board games, laugh, and this past year, play NBA Jam ’94 on the SNES.

I had played it before in arcades and other settings and it was always curiously fun as hell. The speed of the game, the classic NBA Stars, the announcer audio, the cartoonish high-flying antics, and the combination of simplistic controls and surprising depth makes the game an underrated classic in my opinion.

I bought an SNES for my office, and got my coworkers into the game as well, and playing every lunch is super fun.

As fun as it is though, my friends and coworkers are competitive. And to top it off, so much of NBA Jam is completely unknown. How exactly do you get better at a 25 year old game? In this day and age, there are endless wikis, YouTube videos, blog posts, streamers, and VODs to give you an edge on any modern game. NBA Jam ’94 has almost nothing. Or, until this post, had almost nothing.

How The Hell Does This Game Work?

Stat sheet for the Charles Barkley Suns

The first, and best resource that I found on the internet was this GameFAQs post by user “Fast Eddie” from, you guessed it, 25 years ago. It has the normal GameFAQs stuff like cheat codes, how to beat the computer easily to “win” the game and all that stuff. But there were sparse few paragraphs that answered the really burning questions that I had.

Questions Like:

  • How does your 3pt score (1–6) affect other types of jump-shooting?
  • How exactly does shot percentage get calculated?
  • How exactly does a defending player affect shot percentage?
  • What does the defense stat do exactly?
  • Are there any hidden stats? CPU Bill Laimbeer seems especially violent compared to other players.
  • When a ball-handler is pushed down, how is the percentage that they will drop the ball calculated? Is that affected by any known stat?

I needed these questions answered, and there was absolutely nothing out there for me. After months of coming up with nothing, I had an interesting idea.

There are ROMs of these games posted online for people that run emulators. (note: If you don’t know what ROMs are, think of them as ripping the data off of a SNES game cartridge, and digitizing it into a file on a PC. These files are then run by programs called Emulators, that mimic how an SNES or some other console would play your “cartridge” file.)

Some people have even gone so far as to hack their own customized versions of NBA Jam. I scoured ROM hacking message boards to try and find someone, anyone that might be able to give me answers. I ended up finding a hacked ROM version of NBA Jam Tournament Edition. Not quite the same game, but should be close enough. The author of the ROM hack’s email was in one of the README files packaged with the ROM, so I figured… why not just shoot him an email?

And so, like any definitely not-creepy internet stalker, I sent him an email. It took two weeks to get a response, but boy was it worth the wait.

The Email

Hunting through message boards, downloading ROMs, reading the README file, and then just emailing the author just screams 90s internet. It really felt like a throwback interaction that just doesn’t happen a whole lot these days.

So, what were his answers to my burning questions? Here they are, in all their glory.

On Shooting

Your 3pt stat does affect all jump shots, to a certain extent. Also, it should be pointed out that the internal stats really range from 0 to 10 as they do in the arcade game, even though the stat rating bars show 0 to 6. For example, a 5 out of 10 would be displayed as a 3 out of 6. Due to this rounding, this makes some players appear worse than they actually are, and some appear better than they actually are.

I don’t know exactly how shot percentage is calculated. I would need to do some debugging with the shot percentage display active. For some reason, I can’t get the code for that working.

On Defense

From my observations, the Defense stat is primarily for blocking and interceptions in the air. The stat variable only appears to be checked while a defending player is jumping.

Hidden Stats!?

You suspected right — there are two hidden stats. I have attached a text file containing all stats for each player in the game. I have labelled one of them Steal, which is checked when the defending player makes contact with the ball-handler on the ground. The used values for this stat fall between 36 and 46, but as these seem to be weird arbitrary numbers (could these be percentages?), and the values have a range of 10, I used 0 to 10 in the attached document. Setting a player’s Steal value to 0 does seem to make it impossible to intercept the ball when they are on the floor.

Why Bill Laimbeer is Out For Blood

The other one is what I have referred to as the AI Level. Note that this is not the same thing as the Drone Difficulty setting in Options; changing that option doesn’t appear to have any effect on this variable. AI Level is different from the others in that it can be set to a negative value. This variable is checked every frame. Values can range from -11 to 5. Each player on a team shares the same AI Level. These essentially increment in the order of the teams you face in single player head-to-head mode, so Derek Harper and Jim Jackson of the Dallas Mavericks both have an AI level of -11, while Scottie Pippen and Horace Grant of the Chicago Bulls — as well as all secret players (even though you never face them as CPUs!) — have an AI level of 5. Bill Laimbeer and Isiah Thomas both have an AI level of 1, which is on the higher end of the range. This might explain why Laimbeer seems so aggressive.

This is an absolute treasure trove of knowledge. He even generated a text file for me with all the stats!

Using this data, I created a spreadsheet to do some actual science to see what player is actually the best player in the game. What I found — was shocking (Gamers Hate Him!):

The Cold, Hard Data

This is every player in my edition of NBA Jam ’94, ranked by their aggregate score, not counting for AI level. My Agg. Score stat is a calculated sum of their stats, but weighted against my own subjective view of how valuable that stat actually is for winning games. Here’s the multipliers I used for each stat:

Speed: 1.5x
3pt (shooting): 1x
Dunks: 0.5x
Defense: 1x
Steal: 1.5x
AI Level: 1x

I think Speed might be under-weighted slightly in this model, but we’re going to go with 1.5x for now. Using this model, Isiah Thomas sits on top, side-by-side with none other than Mitch Richmond.

Now, if you didn’t watch basketball in the 90s, you probably have no idea who Mitch Richmond is. I don’t blame you, I was one of those people. The Kings sucked in the 90s, but Mitch Richmond did not. Please treat yourself to this highlight video of Mitch cooking the Hakeem Olajuwan Rockets in ’95.

Mitch Richmond had the unfortunate circumstance that many NBA players shared at the time, the curse of being in his prime during Jordan’s prime, and being on a bad team to boot. The man is a freaking Hall of Famer though, despite all that.

But I digress — Mitch Richmond is an absolute monster in NBA Jam ’94. He is the only player with the maximum speed of 10, meaning he will beat literally any other player in a foot-race. They also made him unrealistically tall (The real Mitch was “only” 6'6"), with maxed out dunk, meaning he can perform every super-dunk in the game.

What my arbitrary model clearly shows, is that Mitch Richmond is a walking bucket.

My advice for 1v1? Play as my guy Mitch Rich on the Sacramento Kings, and only pass the ball to your teammate Wayman Tisdale if you’re being double-teamed. Tisdale is very slow, but his AI puts him on the 3pt line pretty frequently and is a respectable shooter from out there if left open.

So, what about 2v2? According to my model, it’s going to be the Detroit Pistons, though the Kings, Magic, and Jazz are all within 3 points, comfortably making up the A-tier teams. There really isn’t much of an S-tier for this game in 2v2, which is a very good thing. You can get a really fair matchup playing any of the top 10 or so teams against each other. Here’s my comprehensive 2v2 power rankings with their Agg. Score stat in parenthesis.

  1. Detroit Pistons (72.5)
  2. Sacramento Kings (72)
  3. Orlando Magic (70.5)
  4. Utah Jazz (69.5)
  5. Charlotte Hornets (69.5)
  6. Chicago Bulls (69) (nice)
  7. Golden State Warriors (67.5)
  8. New York Knicks (65.5)
  9. Los Angeles Clippers (62.5)
  10. Dallas Mavericks (61.5)
  11. San Antonio Spurs (61)
  12. Cleveland Cavaliers (61)
  13. Phoenix Suns v1.1 (60)
  14. Atlanta Hawks (60)
  15. Portland Trailblazers (59.5)
  16. Seattle Supersonics (59)
  17. Phoenix Suns v1.0 (59)
  18. Philadelphia 76ers (58)
  19. Houston Rockets (56.5)
  20. Denver Nuggets (56.5)
  21. Minnesota Timberwolves (56)
  22. Milwaukee Bucks (55)
  23. Washington Bullets (54.5)
  24. Boston Celtics (53.5)
  25. New Jersey Nets (53)
  26. Los Angeles Lakers (53)
  27. Miami Heat (51)
  28. Indiana Pacers (48)

After all this, it’s ironic that when we play at work, we don’t play with the top tier teams anymore. It’s actually been more fun to play as the bottom 10 teams against one another. When the players have really bad stats, I think it magnifies the need to play sound, fundamental basketball. The game becomes about taking good shots, playing good defense, and just generally playing to your team’s strength (or lack thereof).

As much as my questions have been answered, there still remains unsolved mysteries and questions that need answering.

  1. By what factors, and by how much can a defending player affect the percentage of a jump-shot percentage?
  2. When a player is pushed down using a turbo-steal combination from a defender, how is it determined whether they drop the ball or not?
  3. There are some legends that players might have “hot spots” on the floor that increase their base shooting percentage the closer you get to this hot spot. If they exist, where are these “hot spots” for each player?
  4. What determines whether or not the ball pops out during a dunk attempt?
  5. Player height is definitely a factor in the ability to contest shots, get rebounds, and block shots. Is there a data set that contains all the height data for each player?

If you, or anyone you know might have answers to some of these questions, please send them to this post, and I will add any answers to my spreadsheet and this compendium for future players of NBA Jam to use as a resource.

Before I go, I would also like to shill the game I’m working on, due to release in 2020: Captain Contraband. Check it out, and wishlist it on Steam if you think it’s cool!

--

--

Madison Williams

Madison is a programmer, game developer, and proud father of two cats. He is currently working on his debut commercial game, Captain Contraband.