As a kid, your skills (not Claude skills ๐น) could only get you so far in a game. But sometimes, the game itself was the limiting factor...
Picture this: it's a penalty shoot-out. You are the keeper. You read the striker perfectly, you press Down to dive to the bottom corner and... your keeper flies to the top corner instead. The ball rolls gently into the bottom corner. You stare at the controller. The controller stares back.
As a kid, you assume it's you. Sometimes it's not you. It's the game, and it has a bug ๐.
The game
The game is Kunio-kun no Nekketsu Soccer League, a Japanese football game on the NES (the original Nintendo).
The bug, caught on camera ๐ฅ
Holding Down + A + B. The keeper (marked 1) dives up. Again. And again.
In this clip, I hold Down + A + B (you can see the inputs in the bottom-right corner), the button combo for a diving save towards the bottom of the goal. The keeper dives up, and the ball rolls into the net.
9-year-old me did not take this well. Down means up? The world is upside down. Nothing makes sense anymore. I am fuming. Life is unfair. I start shouting at the TV, and my mother tells me to keep quiet and behave.
What actually went wrong
Like most games, this one runs in a loop, about 60 times a second: read the controller, decide what every player wants to do, move them, draw the screen. Along the way, it keeps notes in memory, such as where the keeper is standing and which direction the player is pressing.
The keeper's dive took a shortcut through that loop. When I pressed A + B, the game committed to the dive straight away and skipped the step that records my direction. The dive then used whatever direction was left in memory from earlier, or none at all. And with no direction, the game defaults to up.
That explains both symptoms: Down sends the keeper up, and only some of the time, depending on what I pressed before.
It's one of the oldest bugs in software: acting on stale information.
How it got fixed
As much as I would love to fully be able to debug and fix this myself, I am just out of the loop (pun intended ๐) when it comes to assembly. I tried to fix this myself using the debug tools available to me (save states, changing memory addresses), but none of it worked over days of trying. So, frustrated, I turned to AI, and within 24 minutes the broken loop was fixed.
I gave the AI two things:
- the game file
- the video above showing the error. It is always helpful to give as much context as possible when trying to solve a bug.
Being a thorough engineer, I was not satisfied with simply solving the bug... I wanted to make sure I was using the right tool for the job too, so naturally I created two identical folders, one solving it with Anthropic's Claude Code and the other with OpenAI's Codex. I am pleased to announce that both solved it correctly but differed vastly in their approach and findings provided along the way, so the question is no longer what tool should I use, but rather what problem do I want to tackle now that I am able to with the tools at my disposal. Here is the prompt I used for reference:
"So I have this game called kunio_kun_no_nekketsu_soccer_league_broken.nes in this repo, also attached is a broken.avi video of the bug. Essentially when I press down and the A+B button to jump, the player (goalkeeper) jumps up instead of down. It causes unexpected behaviour during tournament mode with 2 players where one player is the keeper and prevents the ball from being saved on regular occasion.
Can you find where in the ROM this is happening and patch it so that when this routine is triggered it actually jumps down when it should for the keeper, in any mode, tournament or penalty mode etc for either player? So locate the bug, and patch the rom, but make the patch to a NEW rom, so that we have the old broken one for testing and I can load the new fixed ROM and verify it works. As part of your investigation also explain to me like I am 5 how routines in ROMs work, how you are locating the right piece of logic and how you plan to fix it without breaking anything else in the game itself. If you need anything else from me let me know"
Both went to work the same way. They watched the video, ran the game in an emulator to be able to test it with the changes, and pressed the same buttons at the same moment. Then they watched the keeper's direction change in memory, frame by frame.
Both found the same single instruction, the shortcut that skips reading the player's direction, and both fixed it by sending the dive through that step first. Neither touched my original game file. Each handed me a new, fixed copy to test. Up still goes up. Down finally goes down. ๐
Same moment, fixed game. Holding Down + A + B. The keeper (marked 1) finally dives down.
Side note: same diagnosis, two very different bedside manners.
- Claude wrote its own tool to read the game's code, fixed it by changing a single byte, and tested 9 cases. It was honest that it had not tried tournament mode yet (another game mode with 2 players, where one of them is the goalkeeper). Its fix was minimal and elegant, though it also touches the field players' jumps, which it flagged but did not test.
- Codex used a public, annotated map of the game's code, double-checked against my copy, and changed 16 bytes to add a check so the fix only touches the keeper. Then it ran 112 test cases across both keepers, both controllers and all four game modes. It went above and beyond the prompt.
Codex even added a humorous note that the fix "does not guarantee that a mistimed jump will save a shot". That would be a user error, which it is not responsible for ๐ So my reaction times are still my problem.
No more "I have a great idea for an app"
Remember the 2000s? You find out someone at a social event is an app developer, and within 30 seconds you tell them you have "a great idea for an app" and that they need to help you build it. They smile politely. They suddenly need another drink and vanish. ๐น
That awkward conversation is (mostly) a thing of the past.
So what is possible now?
The question is no longer "can I find someone to build or fix this for me?"
The question is now "what creative problem do I want to solve?"
You describe the problem in plain words. You show it, with a video or a screenshot. The AI does the digging. You still need to know what "fixed" looks like, and you still need to test it. But the wall between "I have an idea" and "I have a thing" is a lot lower than it used to be.
Now if you'll excuse me, I have a penalty shoot-out to win โฝ๏ธ. Down means down.
And as always, what a time to be a kid again!