PLAY HARD, Win Hard
by TakuikaNinja
How one all-nighter lead to new cheat code discoveries in Ken Griffey Jr.’s Winning Run (SNES).
If you just want the codes, look on The Cutting Room Floor.
PLAYing HARD to Find
I should give some background regarding the game itself before getting into the 30-year-old mystery I solved. Ken Griffey Jr.’s Winning Run is a baseball game developed by Rare for the SNES. Being a 1996 release, it makes heavy use of pre-rendered 3D graphics and features an ominous soundscape composed by Eveline Novakovic (of Donkey Kong Country 3 fame).
Say what you want about the multitude of baseball video games out there, but at least this one has a unique aesthetic. One look on GameFAQs shows that it has a dedicated fanbase - team statistics, reports of full 162-game season completions, cheat codes, you name it. However, there was one mystery which stumped them for decades.
Winning a season in this game rewards you with hidden teams to play against. Four teams can be unlocked depending on the length of the season, with all of them being unlocked after winning a full 162-game season:
- Tampa Bay Devil Rays
- Arizona Diamondbacks
- Nintendo
- Nintendo 64
The Tampa Bay Devil Rays and Arizona Diamondbacks would not make their MLB debut until 2 years after the game’s release. The Nintendo and Nintendo 64 teams are made up of Nintendo of America and Rare employees, respectively. Yeah, this game was released so late that it references a newer console. Pretty wild, isn’t it?
It was already known that entering A, B, X, Y, Up, Down, Select on the title screen reveals the Hidden Games mode which lets you play against these hidden teams. What stumped players was the vague message shown after winning against all of them:
It is possible to play as the hidden teams but only if you ‘PLAY HARD.’
There was absolutely nothing to go off of here. It didn’t help that the game erases the save data containing the hidden team unlocks after displaying this message. Players on GameFAQs tried everything: performing landslide victories over every opponent, entering any button combination they could come up with based on the capitalised letters - nothing worked. One player (ReyVGM) even went so far as to contact the game designer to ask if they remembered anything about the game’s cheat codes. He was met with a response which implied that the game unfortunately may not have shipped with the functionality intact. That discussion was mirrored to a talk page on TCRF.
The All-Nighter
The date is 2026-02-27. TCRF has recently been making a push to include introductions in game articles. This naturally means that we have to actively seek out articles with missing intros. After adding intros to a handful of pages I could find, I had a look at Ken Griffey Jr.’s Winning Run. I was a fan of its soundtrack and so decided to make note of that in its intro. That’s when the TODO tag caught my eye:
Game Designer Oliver Davies said at one point there were button codes to unlock the hidden teams and the credits. Read the talk page for more.
I upgraded this to the “investigate” tag and had a look at the talk page section it was referencing. What a nerd-snipe that was. I immediately went to work.
The first thing I did was to locate the code and data for the known cheat codes. That way, I could look for similar structures in the game’s ROM to find other cheat codes. Unsurprisingly, it turned out the codes were stored as lists of raw 16-bit controller values. (Hidden Games mode cheat highlighted below)

From there I was able to locate the common code/routine responsible for checking input sequences, which used the Select button to signal the process. This in term revealed a few title screen cheats I hadn’t seen any documentation for:
(note: the L/R in these strings are Left/Right, not the shoulder buttons)
Unlock All Hidden Teams (as opponents only): XUARBDYL
EF DF C7 DE = $DFEF, $DEC7
$DEC7 = 40 00, 00 08, 80 00, 00 01, 00 80, 00 04, 00 40, 00 02, 00 00
Credits Sequence: YABBADABBADU
(probably has a prerequisite? only seems to reliably work after XUARBDYL)
B9 DF E7 DE = $DFB9, $DEE7
$DEE7 = 00 40, 80 00, 00 80, 00 80, 80 00, 00 04, 80 00, 00 80, 00 80, 80 00, 00 04, 00 08, 00 00
(Yeah, I can’t believe there’s a Flintstones reference in here, either)
I subsequently went and validated the cheat codes used during actual matches, which was largely irrelevant for this topic except for the fact that codes were internally duplicated for each player/controller. Then I found this set of duplicated codes:
?: XXX
45 DF 25 DF = $DF45, $DF25
$DF25 = 40 00, 40 00, 40 00, 00 00
?: AAA
4A DF 2D DF = $DF4A, $DF2D
$DF2D = 80 00, 80 00, 80 00, 00 00
?: BBB
4F DF 35 DF = $DF4F, $DF35
$DF35 = 00 80, 00 80, 00 80, 00 00
?: YYY
54 DF 3D DF = $DF54, $DF3D
$DF3D = 00 40, 00 40, 00 40, 00 00
?: XXX
5C DF 25 DF = $DF5C, $DF25
$DF25 = 40 00, 40 00, 40 00, 00 00
?: AAA
61 DF 2D DF = $DF61, $DF2D
$DF2D = 80 00, 80 00, 80 00, 00 00
?: BBB
66 DF 35 DF = $DF66, $DF35
$DF35 = 00 80, 00 80, 00 80, 00 00
?: YYY
6B DF 3D DF = $DF6B, $DF3D
$DF3D = 00 40, 00 40, 00 40, 00 00
Well ain’t that suspicious. I traced the input list pointers in Mesen2’s debugger to see if they were used. Low and behold, this section of code was being executed on the pre-game screen in 2P and exhibition matches. (The one where the two team logos are shown over the batting view):
(0x13CB is the player’s input list, and 0xDF01 is a list of cheat code structures containing the input list pointers. 0x80E1B5 is the common checking routine.)
The revelation occurred when I saw this pattern (repeated for player 1):
038C5E AD A5 13 lda $13a5 [P2_Held]
038C61 89 30 00 bit #$0030
038C64 F0 29 beq $038c8f
The 0x0030 constant being used for the BIT instruction (bit test) corresponds to the L/R shoulder buttons on the controller. The branch following it is skipped when one of the shoulder buttons is being held, thus the cheat code inputs are only tracked while holding a shoulder button.
So I went ahead and inputted one of the codes while holding a shoulder button. That was it! Mystery solved 30 years after the game’s release!

I then looked at the time and realised I had done an all-nighter. Oops! At this point, I decided to finish the job by adding my discoveries to the TCRF page.
Here are the new cheat codes. Again, they must be entered by either player on the pre-game screen for a 2P or exhibition match:
| Team | Code |
|---|---|
| Tampa Bay Devil Rays | L/R + X, X, X, Select |
| Arizona Diamondbacks | L/R + A, A, A, Select |
| Nintendo | L/R + B, B, B, Select |
| Nintendo 64 | L/R + Y, Y, Y, Select |
(Note that both players cannot pick the same hidden team)
The new codes were eventually noticed and picked up by a couple outlets including Rare Gamer, GameXplain, Time Extension, Retro Game Attic, and of course GameFAQs.
More Cheats
I found a few more undocumented cheat codes later on.
The game designer discussion did yield one valid cheat code, though it was used for a completely different purpose in the end:
Wrong region/system screen ($FE1AF9 = 5):
Force boot on wrong SNES/SFC system: BAYSBALLSUX on controller 2 (note: S = Start)
B0 DE 98 DE = $DEB0, $DE98
$DE98 = 00 80, 80 00, 00 40, 00 10, 00 80, 80 00, 00 02, 00 02, 00 10, 00 08, 40 00, 00 00
(i.e. “baseball sux”)
That code is funnier when you remember that Rare was founded in Britain, and that this game was only released in the USA. The programmer must’ve been pretty pissed off about having to lock out consoles in their own country for a sports game they didn’t particularly enjoy making.
And last but certainly not least, the following input lists were seemingly left unreferenced by the game’s code:
?: AYD
(no pointers found?)
$DE7C = 80 00, 00 40, 00 04, 00 00
?: LYXDYX
(no pointers found?)
$DE84 = 00 02, 00 40, 40 00, 00 04, 00 40, 40 00, 00 00
(Maybe those are meant to spell “AIDS” and “licks dicks”? Big oof if so…)
Closing Thoughts
I think the main takeaway from this saga is that our memories become unreliable over such extended periods of time. People had mostly given up on this mystery after hearing back from the game designer. This investigation of the game code revealed that their claims were actually misleading. It’s no one’s fault, really - it’s difficult to remember such minor details for a project one slogged through decades ago.
I’m reminded of a Bluesky thread from Phil Salvador of VGHF:
It is extremely funny to read an interview with a game developer where they make big sweeping claims about what happened behind the scenes... and then find a company memo that directly contradicts their claims
— Phil Salvador (@philsalv.bsky.social) March 26, 2026 at 2:55 AM
Memory is imperfect! It changes over time! We retell stories over and over and make ourselves the main characters. That's why primary source documents are so important, because a piece of paper written 30 years ago doesn't change
— Phil Salvador (@philsalv.bsky.social) March 26, 2026 at 2:57 AM
I guess that lesson of preserving primary sources could extend to personal blog sites like this one. That aside, I’m very proud to have put this 30-year-old mystery to rest. (Actually, we still have no idea what ‘PLAY HARD’ had to do with the cheat codes)
Next Time…
Maybe something related to chiptune, I’m not sure at this point.
P.S. Oh, uh, in case you’ve noticed me in a video about the discovery of Arbitrary Code Execution (ACE) in SMB2J and eventually SMB1: I appreciate the attention but A) I already knew I’d be in the video because Kosmic asked me in advance about the repost I made, and B) I want to emphasize that I didn’t directly contribute to the ACE research beyond a basic remark about the SMB2J crash leading to a CHR-RAM write. I was simply in a game of repost telephone at the right time and place.
tags: SNES - 65C816 - reverse-engineering - cheats - baseball - Rare