Super Punch-Out!! Blindfolded Race at GDQx 2019

Watching a lot of speedruns, as I’ve said before, can give you a distorted view of what video game difficulty is actually like. Speedrunning has been a going hobby for well over a decade now. New strategies are worked out and evolve. If they’re good ones, they become a part of everyone’s runs and are further refined. If they’re not good ones they’re discarded. What I’m saying is, the state-of-the-art advances. It doesn’t recede. People keep getting better. TASes are even more optimized than that, and are at this point really a completely different process, more scripting and exploring program function than playing a game in the traditional manner.

There may come a time, eventually, where, confident that runs have been perfected, speedrun becomes less focused-upon. Then after a period, people may come back and try to match the records of old. Or, maybe people will just stop speedrunning games, at least from the NES and SNES era. Many of these games are deep, but they aren’t an inexhaustible resource.

When you watch a speedrun, even one that’s three or four years old, you aren’t watching the effort of one person, but of a chain of people stretching back. Runners watch each other’s attempts and try to improve upon them. There aren’t many secrets.

Watching speedrunners who have played these games hundreds of times may cause you to think that the games are somehow easy. One way some challenge can still be preserved is in attempting challenge runs, like completing a game blindfolded. Like Punch-Out. Finishing Punch-Out blindfolded. That’s something that people do, but it’s still pretty challenging.

And it’s generally considered that Super Punch-Out!! for the SNES is the hardest Punch-Out game to do blindfolded. I’d think that that would be NES Punch-Out, since Tyson at the end is very random and can knock Little Mac down in a single punch throughout the first half of the first round, but the commentators on this video say it’s SNES Punch-Out, and I believe them. In this race, both players take a defeat at one point! That’s not something you often see at GDQ.

If you know what you’re doing Super Punch-Out is a fairly short game. This whole run (a race between two people) takes about 22 minutes from start to end. One nice thing about this race is that it doesn’t become a case, common in speedrun races, where one player jumps into the lead and stays there the entire rest of the race. The lead changes a couple of times, and is up in the air until the last fight.

If you’ve never encountered Super Punch-Out!! before, you might be surprised by how much it differs from the much better-known NES game. NES is very much a game of pattern recognition and exploitation. The SNES version brings back the two arcade games’ power meter, adds a dizzy mechanic that can affect every opponent, and just has a lot more randomness. Not blindfolded it may be a little easier than the NES game, it doesn’t have any opponents like Mike Tyson. But it still has its challenges, as much personality as the 8-bit game, and further, doesn’t lean nearly as hard on ethnic stereotypes, and those are all good things!

Behind the Code Examines The NES Punch-Out!! Boxer Engine

Here’s another of those deep-dive NES internal videos from Behind the Code, possibly the most complex one they’ve done to date. Most game engines, when you examine their basic logic, are basically physics simulations, with some AI included to determine how actors behave.

Not so with the Punch-Out!! games. They are essentially entirely different kinds of games from that. You have certain things you can do moment to moment, and opposing boxers do too. Each of those opponents basically runs a big script, made out of byte code, that determines their behavior throughout each round of each fight. I am struck both by the simplicity (no need to simulate gravity) and the complexity (boxers take all kinds of things into account) of the system.

One of the interesting things shown is that the engine can affect more than just the boxers, but can also subtly affect the crowd, which is how the previously-revealed fact that a specific camera person in the crowd uses his flash right at the moment the player must counter Bald Bull’s charge move. It turns out that this isn’t the only instance of this happening in the game!

You don’t need to know 6502 assembly code to get what the narrator is talking about, but a lot of code is shown, so those of you who understand it may get a bit more out of it. Here are a few basics to help you follow along.

The 6502 has only three registers (bits of memory internal to the CPU that can be accessed quickly), the Accumulator (sometimes called just A), the X register, and the Y register. Each is only one byte long. The Accumulator is by far the most flexible, but all three are general-purpose registers. The most common instructions are Loads (LDA, LDX, LDY), Stores (STA, STX, STY), Transfers between registers (TAX, TAY), Incrementing and Decrementing (INX, INY, DEX, DEY), Adding (ADC), Subtracting (SBC), Comparing (CMP), Branches (some of them, Branch Not-Equal to Zero: BNE, Branch Equal to Zero: BEQ, Branch of Carry Set: BCS, Branch on Carry Clear: BCC), Jump (JMP), Jump to Subroutine (JSR), and Return from Subroutine (RTS). While some instructions are just one byte long, the longest any 6502 instruction can be is three bytes, and the opcode (the command itself) is always just one.

(I wrote all of that from memory. I figured, I have all of this in my head from my coding youth, I might as well use some of it.)

The 6502 can only address 64K of memory, so often systems will use bank switching to connect various memories to it within that space. The great majority of NES/Famicom games had to do this. Punch-Out!! was unique on the NES in that it was the only game to use Nintendo’s MMC2 chip. (I wonder if the chip was designed ahead of time, and they made this game as an excuse to use it?) Punch-Out!! uses MMC2 to bank in each boxer’s large data script as needed.

Behind The Code: How Do Boxers Work in Mike Tyson’s Punch-Out!!? (Youtube, 20 minutes)

Video: The Minimum Punches To Beat NES Punch-Out!!

Please forgive the two exclamation points in the title. We writers are only given a limited number of exclamation points to use every month by the shadowy Punctuation Cabal, but Punch-Out!!’s title has two of them in it, so to properly stylize it I have to use two each time. Wasteful! Oops, there’s another one. I’m just going to save them from here on out. But anyway.

YouTuber Pap is a TAS speedrunner, meaning, he deals with absolutes. He knows the state of the machine, and isn’t limited by any puny human reaction times, but works by recording button sequences that can be played back infallibly. He asked a question: what’s the minimum number of punches needed to play through the main game of Punch-Out? The answer is 120, but since the game has significant randomness, it’s really unlikely.

He presents what is probably the definitive answer, but that’s not really the interesting thing about it. His video is a master class on the game’s state, how it determines knockdowns and knock-outs, and how it awards stars. Some interesting things revealed:

  1. If a fighter ever gets up on a count of 1, connecting with a single star punch can knock them back down immediately.
  2. Many star punches are awarded based on successful punches where the opponent is not stunned or knocked down. You get them on a cycle based on a count that differs with each fighter. Special timing doesn’t have anything to do with it; it’s if the hit was successful of not. Late punches after stunning give star punches because the opponent is no longer stunned, not because they’re late.
  3. On top of that, there are random stars that are awarded sometimes. This randomness is significant for the minimum punch count challenge. But these stars can only occur if you already have at least one star! Keeping a star in reserve actually helps you earn more stars more easily.
  4. You having full health affects multiple boxers in significant ways, including sometimes turning knockdowns into knockouts.
  5. Soda Popinski has a trick where, if you hold down while he’s preparing to uppercut, he delays. He can then be gut-punched, and if you do, your next star punch will always knock him down.
  6. In the second fight with Bald Bull, I always wondered why it was difficult for me to counter his bull charge at first. Turns out, it wasn’t just me. The “long” version of his charge has a shorter success window, of just four frames! The “short” version, which happens if you dodge the long version, however, has a window of 13 frames. It’s so long it’s almost a gimmie. (I am resisting the urge to expend another exclamation point there.)
  7. The greatest minimum number of punches needed to beat any opponent is a tie between King Hippo (an atypical opponent in many ways) and Mr. Sandman (not surprising at all) at 20.
  8. The lowest minimum number is one, which can be gotten from Glass Joe (of course), the rematch against Piston Honda (huh) and the rematch against Bald Bull (what?).
  9. Mike Tyson/Mr. Dream can be defeated in six punches.

Long Hidden Two-Player Mode Found In SNES Super Punch-Out!!

The Twitter account Unlisted Cheats searches for and reports on undiscovered codes in classic games. They found a real doozy yesterday, about a secret two-player mode in the SNES game Super Punch-Out!! The news hit Reddit and has gotten up to 4,400 positive votes, so, folk seems really interested.

Bald Bull is one of those memorable characters who’s been in several games, but doesn’t get the respect he deserves. The crowd loves the Turkish Titan! And now you can play as him!
(Image credit: Mobygames)

(Note, for clarity, you have to say the SNES game Super Punch-Out!!, because Nintendo made a different arcade game that they also called Super Punch-Out!! Also, the exclamation points are part of the name. I’m not just really excited.)

To do it, Y+R must be held on controller 2, and Start pressed on controller 1. This loads a screen where any opponent may be selected

The opponent select screen. (Image credit: Unlisted Cheats)

Then, on the character info screen, hold B+Y, again on controller 2, and press Start on controller 1 to allow player 2 to control the opposing boxer.

The code even works on the version of the game on Nintendo Switch Online, so if you have an account there you can try it out without setting up an emulator or digging up an old cartridge.

It’s interesting to note the times that the big gaming sites reported on this. As of this writing (yesterday) and according to Google, Ars Technica reported on it 18 hours ago, followed by IGN (16 hours), Kotaku (15 hours), and then Eurogamer. Reddit says the post went up there 19 hours ago, and Unlisted Cheats posted it 20 hours ago. News travels fast in the videoscape.

The phenomenon of the cheat code has gone kind of out of fashion these days. They still exist, but tend to be more for debugging than anything, especially since interesting features can conceivably locked behind paid DLC gates and bring in more lucre to the mothership. I know of a particularly interesting code that news broke about some time back, but let’s give that its own moment in the sun, tomorrow….