Game Genie declassified: That summer I played 230 Game Boy games
eurogamer.net
eurogamer.net
I don't really buy it, though. Listing a numeric offset can't possibly be any kind of legal risk, and anyone with a brain would understand that's how the device worked anyway. And especially, Nintendo could easily disassemble the BIOS and see the grade-school level cipher being used. Plus, Pro Action Replay used raw address:value pairs and never had any issues.
I always figured the point was to make it hard for normal people to tweak the codes, and to bloat out their code lists. You can have "Start with 3 lives; 5 lives; 9 lives", but if the last value is 03,05,09 ... then there's not much point in offering three codes.
I got tired of the shady websites full of ads giving you Game Genie codes for the wrong regions, so I worked with another person (mightymo) who made a list of all known codes. Then I decoded all of them to raw address:value pairs, and I ship all of those codes in a database with my emulator. The downside of this is you can't input your own codes in the weird Game Genie encode format. But so far, no one has complained.
Now moving onto the GBA era, and the devices just got disgusting. Each game would have a "master code" you had to enter first. That was actually an RNG seed value for all subsequent codes. So many people must have wasted so much time hand-keying in those things for zero added value. I'm almost completely certain the purpose of those was for the manufacturers to protect their codes from being stolen by competitors with similar hardware devices.
Theoretically, if the code also for some reason needed to contain the original byte-value of the address at that offset, you could be sued for copyright-infringing reproduction ("you published one byte of the game ROM!") Encryption would prevent this being a clear reproduction.
One could then argue, given that, that when it's trivial to deduce what the original value would have been given what the code does, you still have published a reproduction. E.g., if a code XXXXXX:YY means "give a player 0xYY lives at the start of the game", and the game regularly starts with 0x05 lives, then it's clear that byte $XXXXXX of the ROM must be 0x05.
The NES and Game Boy devices usually needed this. Without it, bank-switching would result in one code changing several actual ROM bytes, when you only wanted to change one. The SNES almost never used bank switching so it wasn't necessary there.
Still, it's not a one-way hash function here. If you were sufficiently bored, it would be very easy to deduce the encoding for at least the :value portion of the codes, just by comparing the codes in the book. I actually did something similar as a kid. If a phrase (as in a sentence of text) were illegal, using rot13 on it wouldn't make it legal. And Nintendo were chomping at the bit to ban/outlaw/block Game Genie devices (Nintendo has a sad history of being fiercely litigious against everyone), so I'm certain they would have gone for this had they thought they stood a chance at winning.
That would be one hell of a jury trial, though. "They clearly reproduced the number 5, which was in our original game! It's obviously an illegal reproduction of our copyrighted game code!"
He also implemented a much faster delta patch creation algorithm (polynomial time instead of quadratic), so it's definitely the superior option at present.
Why risk it and spend money on lawyers?
Awesome bit of marketing right there!
It worked very much like the examples given in the linked article, except you had to find the memory locations yourself, in most cases. So for example, if you wanted to find a cheat for extra lives, you'd start the game, drop out into the "Hacker" tool, search memory for "3", then lose a life, then search the results for "2", and test anything that was left by modifying it. Fun stuff.
That's right, if you've got a Raspberry Pi or other RISC computer on your hands, you can re-live the 90's once again, and emulate the 80's from within it.
Have fun.
each letter is one hex digit.
GG CODE: ghi-jkl-mno
Address = lijk XOR 0xF000
Data = gh
Compare = mo ROTATED right by 2, and the result XOR by 0xBA
Mystery value = n
Codes can be 6 or 9 digits long, 6 digits if the compare value feature is not used.
The game genie can only modify addresses in the 0000-7fff range, meaning it cannot modify on-cart ram banked in the a000-bfff area (the later datel action replay, however, can modify this and other ram areas, using a periodic interrupt and swapping out the interrupt vectors for its own)
Mystery value has a min of 0, never greater than 7? this was apparently, from what I remember from the usenet leak, intended to thwart games which would checksum their roms before starting, but seems to me to have little practical use, and I'm not even sure how it worked if it worked at all, it may have restored the original value if it saw an access to rom 'mystery value' bytes away from the value being changed by the code within a certain number of cycles, or something like that.
The compare value is so that the game genie can selectively patch values in banked rom gameboy games which have multiple rom pages appear at certain addresses due to mapper chips, in which case it will only replace the value at said address if the compare value matches.
LN
http://www.smspower.org/maxim/forumstuff/gamegenie.html
(This was designed for the Sega Game Gear version, but the Game Boy algorithm is the same.)
I never had the cartridge myself, but the cartridge wasn't necessary to play the dumped games.
What you really wanted was an Action Replay.
I feel like we live in similar times any time I see a good javascript game!
Diabolical! I wonder if Nintendo ever used this one in the courts.
It actually recently showed up on Steam for $5 for some reason. It runs on all platforms (Mac, Windows, Linux, and by extension most of the UNIXes that can emulate one of the three), and has generally good reviews, if you're interested.
https://en.wikipedia.org/wiki/Lexmark_International,_Inc._v.....
http://www.eurogamer.net/articles/2013-07-04-born-slippy-the...
> There is a law for variables names?
It's a funny thing that programmers try to view the law as a programming language (and even sometimes try to work around it that way, such as for example by writing GPL wrappers). Judges and juries don't care so much about that but kind of detail, but about what people declare and what they do in regards to the legal text. Also, it's all very subjective and slightly unpredictable.
In the original Game Genie article, you see that they were doing one kind of legal workaround that is known to work: clean-room reverse engineering. That's why one team would come up with the codes and without telling details to the other guy they would ask him to test the code.
I'm not sure if anyone at MS ever confirmed it but we presumed MS had put it there so that if anyone was found selling unofficial hard drives then you could of been found to be breaking copyright laws because you needed to include the Microsoft logo in the hard drives you were selling for them to work on the 360.
I especially liked its variable search function. When you started the variable search you could choose whether you knew the value of the variable you were looking for or not. Then, at any time, you could pause the game and tell the game either what exact value the variable should have now or simply that it was the same, different, greater or lower than the previous value. The GameShark itself then kept track of all memory positions which matched those constraints. This made it really easy to find where in memory something was stored. Playing around with this little toy taught me a few valuable lessons in debugging.
The coolest thing I managed to pull off was playing the Single Player levels of Perfect Dark in Multiplayer. It took a while, since the current level wasn't stored in the same place for Single Player and Multiplayer. I seem to remember there being some difference in the level numbering, as well.
I think I would have been more into assembler-level stuff in CS earlier in my education and career; enough to have made it my focus.
That would have been the thing to totally jazz me and change my thinking.
I never really got the hang of asm myself, though... I should probably give writing some GB software a crack at some point. I might actually learn it if there's a use.
I know what Mickey Mouse game they're talking about too. "Mickey's Dangerous Chase" I'm pretty sure. At least it had patrol dogs and fire hydrants, so it seems likely.
Anyways, these days you can try your hand on cheat finding on most well developed emulators.
I pull them out every once in a while. The Codebreaker is more interesting to play with now than it was as a kid actually, because I can understand more of its functions.