Unfamiliar with Sonic the Hedgehog 2? WTF is wrong with you? GTFO. :|
Using a Python script, Brad takes your favorite classic games and scrambles the bytes. These are the results.
Oh boy, where to begin? Well first off, welcome to my very first 16-bit ROM corruption of Sonic the Hedgehog 2! This happens to be my largest video by far in both size (2.7GB) and length (21:21). Sorry about the length though, as I'm going to try and keep it shorter for next vid. This was a very exciting game to do and given the nature of the game and the system it runs on, I had to do a few extra things to make it enjoyable.
1. First off, ALL genesis games have a checksum. If the ROM integrity is bad, the checksum needs to be fixed, or else the game will not run at all. At first I used a stand alone program to fix this, until I found out the emulator did that for me, saving time, haha.
2. Remember when I told you that I probably wouldn't do 16 bit corruptions because of the fact that the CPU was less forgiving? Well, I found out that the 68000 is a dream CPU to work with. See if it runs into any exception "illegal instruction, address, divide by 0, etc) it'll go to an address specified in the rom header and run it. For Sonic 2, it'll execute an infinite loop, thereby crashing the game. For other games (notably Sonic 1, Mortal Kombat, etc), it'll actually run code that'll display the error and any relevant debugging information, which is pretty cool. So knowing all taht, I decided to research how it all worked, and then I thought "I wonder if I can get it to bypass it all together. After studying 68000 ASM some more and catting with people on the #retro IRC channel, I was able to figure out a way to pull it off (crudely, mind you, but still). I managed to write my ASM code (in binary, then converted to hex by hand) and inject into the rom, and have it point to said code so that whenever it hit a snag, it would attempt to run the next instruction (2 bytes past the faulting one... which didn't work well for instructions larger than 2 bytes). In any case, it makes the game a LOT less crashy (and I could patch any genesis game the same way to boot). Needless to say this is my first ASm hack and I'm very proud of it. Sure, it makes the rom corruption less "pure," but a LOT easier to get results.
3. Since this is NOT an NES game, the ROM map is all over the place. it took about 23 blocks (!) worth of corruptible data for me to write a script for. Also, with a game like this, there's a lot of COMPRESSED data on there as well, so I couldn't just look at the ROM in a tile editor and easily see where everything is. Thankfully, the internals of the ROM have been thoroughly disassembled and I was able to grab an extensive disassembly from Sonic retro. Using that, I zeroed out all the art and sound samples and recompiled, producing a ROM that was very easy to spot the ares where I didn't want to corrupt. Unfortunately I overlooked the level data which happened to be compressed as well. this will be fixed in Volume 2.
As for recording, I managed to find a couple of bugs in Gens that I'll need to talk to the developers about, notably the fact that the special stage looks blurry. Hopefully I'll be able to get them to take a look before my next vid.
In any case, yeah, I hope you enjoy my vid and I'll see you in Volume 2!
Next game to get corrupted: Sonic the Hedgehog 2 Volume 2
Want to make you own corruptions? Visit http://zophar.net for emulators, tools, and more!