Years ago, I used to play a game for the Nintendo Entertainment System called Star Voyager. The basic premise is simple: you're a pilot of a space fighter, and you need to defeat an armada of aliens who are bent on destroying you and your space station, simply because they are mean.
The game itself is notoriously difficult. Even with Game Genie cheats, and your shields up, your ship takes damage from the aliens fairly easily, especially if you have the tendency to fly in predictable patterns. Many people have given up on the game as a relic that was too difficult in the 90's without the manual and without something that gives you a significant edge.
RESET Subroutine
Well, today I think I found the ultimate advantage. While digging into the game with a debugger running, I came across an interesting and noteworthy phenomenon in the code: the game was purposely leaving 3 bytes uninitialized during a reset -- $07FD-$07FF. Not only that, but two of these values were being read uninitialized and compared against "magic numbers."
One of these variables was the 2nd player's controller input. Interesting. Another was an entry within a table of possible input values corresponding to A, B, Select, Start, Up, Down, Left, and Right. Also interesting.
The game was checking to see if the following conditions were met:
- You had reset the console 5 times since the time you originally turned it on with the game loaded.
- You were holding Select on Player Two's controller when the game was loading you into the cockpit.
If these conditions were met, then address $9E, which I dubbed MysteryValue, would be set to zero. If these conditions were not met, then MysteryValue would have its previously-set value of nine.
Trying It Out
Instead of hooking up a second controller, I instead used the debugger to make the above conditions true, right when they needed to be.
And nothing seemed to happen.
I checked the map, and I didn't notice anything different.
I exited the map. A little bit of patience, and soon I got a transmission. The game began to inform me that I had, in fact, already won, despite all of the enemies still being visible on the map.
MysteryValue seems to be how many enemies you have left to destroy before victory. By meeting these conditions, we short-circuited the need to destroy them. A better name for the variable might be EnemiesRemaining.
Why is this here?
In my humble opinion, I think this was a trick way for the devs to test the part of the game after you won. All they had to do was load the game, press reset 5 times, hold down Select on the 2nd controller, and then dock with the space station right next to them. Easy testing.
Duplicate with Game Genie Code
We can write our own Game Genie code to set this variable to 0. Let's look at the relevant section of code where the game initializes $9E (EnemiesRemaining) to nine during a normal run.
At the moment when X is being decremented, Y is 0. We can swap STX with STY with a single byte change. Let's try it.
STX with zero page addressing has a value of $86. STY with the same addressing has a value of $84. The Game Genie code to swap out $86 and put $84 in its place at address $D546 is KAKITIVA.
Sure enough, success!
Just start the game, wait for the message congratulating you for winning, and then dock with the station. Enjoy the credits!
Conclusion
- The developers of Star Voyager included a hidden way of accessing the winning screen.
- Load the game normally.
- Restart the NES five times.
- On the last restart, you need to hold down Select on Controller Two until you're fully loaded in the cockpit.
- Wait for the victory message, and then dock with the space station.
- You can trigger the same results with Game Genie code KAKITIVA with no need for any special input on Controller Two.

SOCIAL SHARE CARD GENERATOR