Quick links: Wiki page (Sonic Classic Heroes) Wiki page (Sonic 2 Heroes) Latest revision (v0.15.03e1) Latest preview video Edit: new revision is out. Revision 0.15.03e1: Download it here. Edit: New revision is out. Revision 0.15.03d8: Download it here. Edit: New revision is out. Revision 0.15.0d31: Download it here. Partial list of changes from previous release: Spoiler General Implemented system to prevent objects from dragging/pushing players inside terrain. When an object pulls a player inside terrain, the player will just stick to the edge of terrain instead. When an object pushes a player inside terrain, said player will simply be crushed instead. This system is more lenient than the one from SCD/Taxman versions. Fixed several collision issues in numerous levels. Changed how ledge clipping work so that you can no longer fall through solid terrain. Implemented a leniency system for movement that allows slow moving characters to duck/look up while over objects just as they could on terrain. Non-solid platform objects now prevent you from falling through them if you started above them and was moving down fast enough. Solid and non-solid platform objects rising fast enough will force a player moving up to land on them, instead of clipping through. You can look at speedruns of FZ in stock Sonic 1 to see why. Completely redesigned options screen. Pushed CRAM dots offscreen everywhere. Level wrapping is now impossible. Optimized the engine throughout. Replaced all Nemesis art by KosM-compressed art and a KosM-backed PLC queue. Also using ultra optimized Kosinski decoder. Generic 1-up icon to avoid the heavy logic of deciding which icon to show, and load, when swapping characters. Added option to select 'Super Dash' or 'Hyper Dash' when using the all-emeralds cheat code. Super Dash now extends all the way to the end of the level, with proper graphics for Sonic in signpost, mentions of 'Team Super' or 'Team Hyper' when appropriate. Got rid of continues. '99 continue' cheat renamed to '99 lives' cheat. HUD moves out of the way for some cutscenes. Fixed music selection logic to be consistent: boss music will have precedence over all but drowning music, which will override super/hyper/invincibility music, which will override level music. Solid and non-solid platform objects will forcibly despawn CPU-controlled characters when deleted. They will also keep checking collisions while offscreen if any character is standing on them. Removed stray unreachable rings throughout. It is now possible to achieve a perfect in every level. Removed now useless invisible solid objects and similar objects stuck inside walls. Fixed numerous graphic glitches. Numerous minor graphical and animation improvements. Object specific Implemented comprehensive ring bouncing system where spilled rings will bounce from floors, walls and ceilings much more frequently than they do in stock S2. Spilled rings can now become attracted rings if a player with a lightning shield comes near them. Fixed numerous issues with spintubes and teleporters in CPZ, SBZ, and MTZ, including crashes that have been reported numerous times. Fixed numerous end-of-level issues with both signposts and egg prisons. Fixed buggy double-jump interactions with springs. Fixed a few issues with big rings. Fixed broken water palette when losing a lightning shield due to being dunked into water. Fixed a PAL bug in sound driver in drowning music compared to stock S2 driver. Fixed several cases of vertical screen wrapping bugs where relative orientations are needed. Fixed sticking issue when jumping off of objects underwater. Fixed issues with Charmy dashing up at the end of levels. Fixed S2 special stage HUDs. Eggman no longer loses his head in S1 levels if he is scrolled partially offscreen. This is most easily seen in FZ/SBZ4. Screen is released faster after defeating Eggman at the end of each level. Air bubbles can only be consumed by human players. AI players can use them, but they will remain in place. Level timer will stop when you defeat the boss, like in S3&K. Exceptions are LZ boss, and Silver Sonic. Fixed numerous single-frame bugs on objects throughout the game. If you know about one, it is probably fixed; if you think you discovered a new one, it has probably been fixed already. If you find out one which is not fixed, drop me a line! FZ/SBZ4 boss is now affected by insta-shield's extended attack radius. SBZ electrocuters use some emergency palette swaps to prevent some cases when they flashed red. You can now stand on lava and collect spilled rings, among other things. You can now make leaves fall in ARZ and hit badniks behind the leaf generator, among other things. LZ spikeballs would sometimes not show their chains when they were just offscreen. Numerous fixes to water surface object. Numerous minor fixes to objects throughout, including some caused by using nameless temporaries. End of level score tally will now run while the animals are escaping from the egg prison. Level Specific Secret paths in several levels. Some more secret goodies in several levels. Boss pillars in ARZ start rising as soon as possible. GHZ2 has a Mania-style spike pit replacing bottomless pit on the middle of the level. All of SBZ3, FZ/SBZ4, SCZ, and WFZ, now have score tallies. In SCZ, destroying badniks while maintaining an uninterrupted chain will give a 'chain bonus' at the score tally. This replaces the normal time bonus. Bottom kill plane is disabled in DEZ. Improved background scrolling in OOZ: the hidden third of the background which was never seen in stock S2 is now visible. Fixed background section in HTZ post-lava rising sections: in HTZ2, it is no longer possible to see an incorrectly scrolled background when coming out of the tunnel with sufficient speed. Fixed scrolling of background clouds in WFZ. They will no longer move in the wrong direction when you walk around. Fixed numerous issues in WFZ->DEZ transition. Character specific Fixed balancing issues for the Chaotix. Sonic now has a drop dash which can be activated by pressing and holding B while on air. Other jump buttons will trigger jump actions as normal. Tails can land faster by pressing down while flying. When Tails is flying and carrying another character, if you swap from Tails to one of the carried characters, you can make Tails boost up by pressing up if he is being controlled by the AI. This is equivalent to pressing a jump button when controlling Tails directly. Tails will no longer pick up AI-controlled characters while swimming underwater. Fixed black pixels on Tails' ears in some poses. Fixed misaligned mappings for Knuckles being held by Tails. Players being carried by Tails can jump directly down by pressing down+jump. Knuckles and Vector can drop from a wall climb by pressing down+jump. Fixed numerous issue in Hive Mode. Improved spawning of AI Sonic/Espio/Vector. Improved spawning of Knuckles by having him glide from the side and from further down. Spindash/peelout charging will not reduce charge on frames when you press a jump button to charge. Tails' tails no longer cause RAM corruption in S2 special stages when he is in third place. Knuckles/Vector pushing on the sides of an object will no longer cause players standing on that object to keep their balance. Holding up/down during title card allows charging spindash/peelout from the first frame of input. Un-nerfed the speed stats of Vector and Charmy, they now match those of Espio, Tails and Knuckles. Sonic is now the only character that has enhanced stats, and the only one to give a boost to others when on the lead. Sonic now has enhanced top speed when he has speed shoes. He also has enhanced acceleration when super/hyper *and* with speed shoes. Chaotix can now become super with a single set of emeralds, and hyper with both. Hyper Knuckles/Hyper Vector climb quake caused numerous issues when camera X position < 5. Chaotix now have proper corkscrew animations. Coop modes In Chaotix coop mode, the energy bands can force a player to detach from the ground if the pull is strong enough. Energy bands will no longer pull players on different layers. This makes loops less painful. Control modes The EA 4 Way Play multitap is now supported along with the Sega TeamPlayer. Input code has been heavily optimized. New 6-button controller control scheme: A/B/C are jump buttons, X swaps players like A does in a 3-button controller, Z swaps players in the opposite order, and Y swaps the sidekicks. Additionally, Mode button can be used to transform into super/hyper *instead of* a jump button; it can be emulated by holding two of A/B/C and pressing a third. Special pause commands: pressing A during pause will return to title screen; pressing B will restart the current level; pressing C will either kill both of player 2 and player 3 (if C was pressed by player 1) or kill whatever player presses C during a pause (otherwise). The C button clauses are intended to prevent you from getting stuck while on Chaotix coop mode. When a character is being controlled by another player, said character is ineligible for a swap, unless the player is holding any of the swap buttons. Miscellaneous Pre-scaled Sonic, Tails, Knuckles, Mighty, and Ray graphics for Sega screen. Modified credits with no fades. Instead, there is scrolling between each screen. Also, credits now uses SCH menu background. Fixed end of game branding. Emeralds now flash to white and back in special stage results instead of flickering. Spoiler Changelog: Revision 0.10.008a: Download it here Enhancements over previous revision: Espio can attach more easily to ceilings now. New continue icons for Chaotix by E-122-Psi. Espio will now path swap while walking on walls (e.g., loops). Credits screen scrolls text into and out of view instead of fading palette. Charmy can no longer carry Espio and Vector, that is just too ridiculous and overpowered. Sorted credits by alphabetical order. Espio now uses rolling sprites instead of twisting sprites when appropriate. Enhancements over original games: Advancing lava wall in MZ2 now waits for the players to all be below a closing hatch. GHZ collision improvements for climbing and flying. A few layout and collision improvements for SLZ. Espio has an 8-way twisting sprites now. Bugs fixed from previous revision: Super dash now works for Chaotix too. Fixed super dash ending with Chaotix (and future teams). Better handling of large and small sizes when "landing" on walls and ceilings. Added a "jumping area" for Vector in SYZ3 button. Fixed bug preventing any team with Vector in it from progressing to Death Egg. Graphical errors in Chaotix signposts. Fixed glass blocks in MZ. Made Vector normal size for the time being due to numerous size-related bugs. Fixed a few issues with Knuckles' and Vector's climbing when grabbing a wall near the floor, as well as with Vector's ledge climb. ARZ boss pillars were clearing 'on-air' flag too late. Several objects that set rolling state could crash the game. Charmy can now roll when played by humans to allow breaking (say) breakable HTZ floor. Swapping to a CPU-controlled Charmy that was chargins a spindash will reset mode correctly. Aligned uncompressed art so that DMA does not cross a 128kB boundary, and fixed DMA function to break this case up. Made sure no code exists on the upper 2MB area to prevent conflicts when SRAM is being used. S1->S2 transition fixed for all cases with all teams. Charmy is forced down more powerfully at the end of act (no more infinite dashing). Fixed non-working switch in MTZ1; ironically, the fixes for slope glitch caused this issue by allowing off-screen switches to call SolidObject when offscreen as they should. S monitor was causing characters to get stuck when it ended. Certain characters can enter in CPZ tubes in a different manner and would get stuck; they can break the breakable blocks from underneath now. Credits was still displaying Sonic 2 Heroes. Still need to fix the end-of-credits logo. Upward speed cap was not being enforced for Charmy. Charmy can now break breakable walls. Characters in forced spin mode will no longer display their running frames when landing on ground. Bugs fixed from the original games: Silver Sonic being defeated on a specific frame can prevent further progress. Fixed remaining case in ARZ boss where he could take off quickly when defeated (thanks goes to RedHotSonic). Revision 0.10: Download it here. Changelog: Enhancements over previous revision: Added Chaotix-style coop mode (based on idea given in unrelated context by Iceman404) where players are tied to one another by energy bands. In this mode, players 2 and 3 can activate signposts and starposts. Team Chaotix is now up, with graphics by E-122-Psi, some by Iceman404 and a lot of palette editing by me. Several performance improvements. Submerged lightning and fire shield monitors turn into bubble shield monitors. Hyper monitors in super dash mode now change music to Super Sonic. Started porting over S3&K's raw animation system; for now, only performance critical objects have been changed. If either P2 or P3 presses 'C' during pause, he commits suicide. Enhancements over original games: Performance improvements in LZ. Bugs fixed from previous revision: Fixed some collision issues in ARZ. Underwater palette cycles for LZ conveyors was wrong. Super das mode correctly reverts to level music instead of super music when reverting from drowning. A mistimed fire shield dash no longer breaks WFZ cutscene. Eliminated several ways of triggering slope glitch for offscreen characters. Anyone can trigger SBZ3 transition to FZ now. Fixed death bug in a specific region of LZ3 caused by a workaround inherited from S1&2 which seems to not be needed anymore. Fixed address error that could come as a result of LZ gargoyle's fireballs hitting walls. Not changing game type in options does not reset level select choice. Drowning countdown loads correct graphics when drowning in shallow water (e.g., LZ1 start). Wrong branch in Knuckles' balancing code means he didn't balance correctly on all edges. Bugs fixed from the original games: Deaths can wrap around to the top of the screen in vertically wrapping levels. Wrong collision with walls and ceilings while walking on them. Older revisions and their changelogs are folded below: Revision 0.07f6: Download it here Changelog: Bugs fixed from previous revision: Knuckles could gain anti-gravity glitch on Scrap Brain Zone by standing on a vanishing platform as it vanishes if Tails was not standing on that same platform. Fixed some wrapping bugs. Bugs fixed from the original games: Jumping from rolling into the MTZ yellow spring walls left you without control, forcing you to use a double-jump action. Revision 0.07f5: Download it here Changelog: Enhancements over previous revision: Lag reduction in GHZ by reducing object count. Moved HUD half a tile to the right to account for TV overscan in real hardware. Enhancements over original games: LZ spikeballs on chains and spikeball chains are no longer as laggy. Bugs fixed from previous revision: Night mode should be enabled without having to hold C until you reset the console. Depending on order, enabling cheats would cause garbled text in options screen. After getting all emeralds, level select would show the 8th emerald as the next special stage target. Speeds were not correctly reset when changing characters. Added missing S2&K extra life in CPZ2. Some platforms in SLZ had weird behavior in some cases. Save games now get really deleted (was missing a write to SRAM). A few minor physics fixes in normal game. S1 special stages physics improvements (prevents getting stuck and allows hands-free path to emerald in first stage). Inhaling bubbles will set the correct animation and correctly disable gliding/climbing/flying. Fixed instant death by jumping over a certain set of spikes in GHZ3 Lives, continues and emeralds collected are now saved at the end of special stages, instead of after the end of the (next) act. Incorrect flipping on S2 special stage animations. Ensure a valid next level after selecting special stages on level select. Orbinaut's orbs will bounce away when touched by shield even if they were still circling the Orbinaut. Fix to SYZ3 start had unacceptable side-effects, and has been reverted. New attempt using different method should have no side-effects. Shadow positioning error in S2 Special Stages of the last character when he was at the left edge and falling. Extra delays in joypad reading functions so it works better in real hardware. Super Sonic's underwater palette did not revert correctly. Fixed abrupt (and incorrect) water level change in end of LZ3. Fixed jumping through wall bug if you gathered enough speed in first slide at LZ3 start. Bugs fixed from the original games: SpirituInsanum's fix for top-right reloading glitch. Revision 0.07f4: Download it here (mirror). This is probably the last bugfix revision I will do for now; the next revision will have more than simple bugfixes (unless a critical show-stopping bug is unearthed). Enhancements over previous revision: Small layout change in SYZ2, most visible at the end of the level with Tails. Layout changes in MZ (all acts) so people will stop complaining about Knuckles not being able to climb sprites. Also added something in these levels for explorers. If AI on S2 special stages is disabled, the single player HUD is shown instead. Removed last traces of old options screen and level select menu. Enhancements over original games: Small optimizations in S2 special stage physics. Bugs fixed from previous revision: Entering special stages from options screen correctly fades everything to white. Special stage entry sound plays if you gain an extra life at the end-of-act score tally. Knuckles incorrectly did not check collision with terrain when gliding, falling from glide or sliding if the bit for being standing on an object was set. GHZ edge wall object did not correctly set its standing height and horizontal position. Having Tails drag a character onto the big ring will now correctly remove the character from the world. Bugs fixed from the original games: S2 special stages now have symmetric animations with regards to the vertical and horizontal center lines. S2 special stage bomb collisions keep the sign of angular speed. Time over when drowning and time over when dying bugs; getting hurt then drowning bug; all based on code by RedHotSonic. No more monitors hidden in walls in SBZ2. Added some path swappers in CPZ2 to fix priority issues. Climbing animation issue if touching the side of a sprite before jumping to climb. Revision 0.07f3: Download it here. Enhancements over previous revision: Minor speed improvements on several routines. Bugs fixed from previous revision: Both fireballs from CNZ boss spikeball went on the same direction. Vanishing flaming grass platforms in MZ, along with several potentially bad bugs related to it. Bugs fixed from the original games: Duck then jump bug on vertically looping levels. Fixed SYZ3 glitch through floor, hopefully without side-effects. Revision 0.07f2: Download it here. Enhancements over previous revision: The character that entered the big ring is the one that goes to special stage. If the leader presses 'A' in the S2 special stages, he will move to the front if he is not already there. Can't gather more than 99 continues. Bugs fixed from previous revision: Blue shade in CNZ big ring. Incorrect starting level in Sonic 2 only mode. Graphical glitches in S1->S2 transition, S1 ending, including Tails' tails. All pushing block issues have been fixed. Fixed color-changing Newtron in GHZ2. Fixed some special stage results bugs. Correctly initializing previous DPLC on objects where this could be an issue (big ring, end of level signpost). S2 Special stage Knuckles had a frame with wrong priority in a couple of tiles. Bug involving scattering/attracted rings and being hurt. Revision 0.07 final: Download it here Download it here. Enhancements over previous revision: Start+A goes back to title screen. You no longer turn into team Hyper with the all-emeralds cheat if you wait for the 100 rings to run out, then collect 50 rings and transform. Sol and chaos emeralds flash at half the frequency on the results screen, with a 1-frame offset between them so they can appear simultaneously. Save games. New options/level select replacement. Enhancements over original games: EHZ spiral pathway and MTZ cylinder played havoc with spawning CPU animations. Bugs fixed from previous revision: LZ doors could prevent you from being sucked on unrelated water tunnels. Improved Sonic spawning on water levels. Hopefully, that lightning shield on water bug I can never reproduce. Fixed starpole animation issues due to premature clearing of respawn flag then being reloaded, coupled with the S3&K object manager. End-of-game Heroes emblem palette. Continue screen. Bugs fixed from the original games: Fixed a couple of pixels on Sonic's ducking sprites. Fixed alignment for Knuckles looking up. Cannot gain more than 99 lives and glitch the lives counter. Revision 0.07 beta 5a: Download it here. Bugs fixed from previous revision: Rings attracted by lightning shield were misbehaving when any of the players got hit. Bugs fixed from the original games: Attracted rings did not count for perfect bonus if collected after the shield was lost. Revision 0.07 beta 5: Download it here. Changelog: Enhancements over previous revision: Improved positioning of Knuckles when climbing over a ledge. Slightly changed collision in S1 special stages in an attempt to prevent people from getting stuck. Probably buggy! Enhancements over original games: Attracted rings should follow the players the right way on looping levels. Bugs fixed from previous revision: Push blocks worked wrong when being pushed to the left. Two tiles in one single frame of bubble shield bounce somehow got blanked. End of super transformation correctly reverses Knuckles' and Tails' colors once again. Animated tiles at the background of SBZ2 and FZ. Fixed explosions on FZ boss and on Silver Sonic, which showed incorrectly under some conditions. Vines in HTZ zip lines looked wrong. Rexxon's fireball looked wrong. Sol animated wrong after throwing all fireballs. One frame os Sonic's jumping animation in S2 Special Stages had missing foreground flag. Incorrect water ripples, introduced by two off-by-one errors in previous revision. Burrobots wrap their Y position, allowing a certain pair of them to be killed. Fixed ring priorities. Bugs fixed from the original games: Fixed superfast water slides while holding down. Water surface continues to animate when leader dies. Revision 0.07 beta 4: Download it here. Changelog: Enhancements over previous revision: Less lag from water ripples, based on some ideas by djohe. Less lag from invincibility stars. Enhancements over original games: Faster ring processing (based on code by redhotsonic, SpirituInsanum and djohe). Bugs fixed from previous revision: Fixed crash when playing with 2 players, swapping them, then moving near a monitor. Getting emeralds caused the S1->S2 transition to fail. Fixed fix for loops in wrapping levels. Incorrect use of Super Sonic ending pose on some cases when ending the level as Hyper Sonic. Wrong background scrolling in ARZ (both acts). Fixed garbled invincibility stars graphics. Fixed lightning flash from getting the lightning shield while underwater (can happen in LZ boss as the water rises). Fixed animation glitch from S2 special stages. S2 special stage ring count shows up wrong with a single player. Push blocks are slower. Bugs fixed from the original games: Bugged interactions of 1-up and speed shoes. Revision 0.07 beta: Download it here. Changelog: Enhancements over previous revision: Hack is now Sonic Classic Heroes, with new title screen emblem by Cinossu and layout by JojHeywood. Level select icons for Sonic 1 levels, including special stage(s). New act icons for Aquatic Ruin, Sky Chase and Wing Fortress, Neo. New background water ripple data for ARZ and CPZ. Removed more unused art from Sonic/Super Sonic/Tails/Knuckles. Removed triply redundant code in player objects. Made TeamPlayer code slightly more efficient. Spruced up end-of-game credits; better font colors for pre-title screen screen. Halved look up/down delay down to 1 second. More tweaks to super underwater palettes. Team selection persists after end-of-act. Can swap characters at end-of-act under relaxed conditions (has to be on-screen only). Implemented Xodras' suggestion to allow swap of player-controlled characters if the players are pressing a switch button. Switched to faster ObjectMove and ObjectMoveAndFall from S3&K. Team Super now gains extra lives at 200 and 300 rings, instead of 100 and 200. S3&K-style V-Int and H-Int handlers. S3&K-style terrain collision and slope resistance. A few palette tweaks. Knuckles now has his proper 3 shades without the need for ugly hacks for super Knuckles. In the interest of better support for future teams, the HUD icons have been moved around in VRAM so all characters can have $20 tiles again. Improvements on Sonic's and Tails' small sprites in ending so as to be better compatible with other teams. Improved Super Sonic ending image, Super Sonic end-of-act signpost, both by Mikel Crawford. Ported proper Super Flickies from S3&K (Team Super, Team Hyper, their endings). Ported all Hyper abilities and palettes (but not the after-images). Taken rings, broken monitors and destroyed badniks are saved when entering (and restored exiting) Special Stage. Perfect count is also kept. Reported graphics of lightning shield, bubble shield, super and invincibility stars, insta-shield, hyper stars from S3&K with more detail (using palette line 2 now). The same was done for the black-and-white sprites of Sonic, Tails and Knuckles. Freed turtles parachute to safety in Sky Chase zone. New HUD layout. Timer now only shows centiseconds (milliseconds was fake precision anyway), back to 7-digit scores, ring counter centered. Centiseconds are now shown based on auto-generated lookup table. Changed starpost positioning behavior to have all characters together at the starpole because of a certain starpole in SBZ1. New, better life icon/HUD icon for Sonic, Tails, Super Sonic and Knuckles. Inproved collapsing platform and breakable wall code, based on S3&K. Ported S3&K sprite manager and priority system to reduce lag and free some RAM. Removed code for unused scrolling effect in CPZ2. Using slight variation of Neo's font for HUD. Sonic 2 chaos emeralds are now called sol emeralds. Added new Sonic 1 special stage and emerald. Sol emeralds and chaos emeralds have the same colors and are collected in the same order. Show "Team Sonic" got through/got emerald/got all emeralds on 3-player games. Changed Deebs' Modern Genesis Amy to E-122-Psi's Classic Amy (Tornado, end of game). Large grayscale pixel art on ending done by Neo. All players move at the same speed when running after destroying EggRobo. Eggman now uses a consistent look throughout the whole game. His glasses are also no longer black. Converted all mappings to S3&K-style, eliminating the unused 2P mode entry. This reduces size slightly, and slightly increases speed. Shields now animate globally except when doing double-jump action. Hybrid S3&K and Chaotix object manager and memory allocator to reduce lag. Applied djohe's improved fix for OOZ launcher balls. Several code optimizations. Blue nomal shield no longer exists, having been replaced with golden shield. Team Hyper transformation from having all 14 emeralds, Team Super with either set. Invincibility monitors become S monitors when super/hyper. When picking up the monitor, it may act as speed shoes (if you are hyper or are playing with a team that can't become hyper), invincibility (if transformation ends before bonus is given) or gives you 20 rings and transform you into hyper for about 20 seconds. Fully functional S1 ending and S1->S2 transition. Zone ordered tables for Oil Slides, Wind Tunnels. Reordered zone IDs and zone tables to eliminate special cases almost everywhere. Enhancements over original games: Smarter art loading in Final Zone causes boss fight to begin faster. Big Ring does a better job of removing the player that went through it. Variable jump height in S1 special stage by Mercury (yes, I love this fix). Characters face the right way in Scrap Brain Zone 3. Signpost takes slightly longer to stop spinning if a big ring is on-screen. Perfect bonus for collecting all rings in S1 special stages. Bugs fixed from previous revision: Incorrect animation was being shown when Knuckles hit a boss while gliding. Fixed subtle bug in 3- versus 6-button controller input reading that was harmless only due to sheer luck. Fixed subtle bug in TeamPlayer code that caused a controller to be skipped and was harmless only as long as you had at least 3 controllers by the time a port with a multitap was finished reading. Corrected tone shift in PSG sounds, and modulation differences in all sounds, from S3&K. Deef's credits entry was being accidentaly overwritten by Aquaslash's. Lava bubble from HTZ boss (and the fire it set) cut through the fire shield because flag was being set on wrong object. Performing level select code in options screen incorrectly triggered Team Super mode. Fixed several cases of the walk on air glitch when player 2 or 3 was offscreen in a platform or other solid object. A few fixes to breakable plating in Wing Fortress zone, which now breaks faster if multiple characters are hanging onto it. Fixed bugs in seesaws. Pinball mode objects now restore characters to their proper state when it unloads. End-of-act signposts are loaded regardless of screen's vertical position. Act pics for ARZ2, SCZ and WFZ were wrong (all showed that of ARZ1). Knuckles is too low when celebrating from AI spawn. Missing Nebula in Sky Chase. It is now impossible to fall off the Tornado before it gets shot down at the start of WFZ. Ring manager checked for mapping frame instead of animation ID to see if the character was ducking. Aquis' and Octus' projectiles now reflected by shields. Fixed graphical shield curruption when entering special stages. Control bug fix on wind tunnels. Fixed permanent whiteout of water if 2 characters with lightning shields lose it by getting submerged within 4 frames of each other. Seesaws could not be used to build up speed. Sonic will now correctly respawn when there is water. ARZ boss' arrows fall when stood on for long enough by anyone (part fixed from original by Esrael, part broken by internal changes). Sonic no longer continuously despawns then respawns if the leader is above the top of the screen. Fixed crash on Sega Screen on emulated Japanese systems. Fixed concurrent drowning countdowns. Fixed rare death crash when swapping to a player which will die while HUD animates. Bugs fixed from the original games: ARZ leaves generator (a normally invisible sprite) suddenly appears when main player dies. Clearing the position array/status array vectors ignored the current status byte (facing, etc.). Can't enter a big ring if you haven't passed through the signpost. Removed 2 unreachable rings from ARZ2. It should now be possible to get perfects on Oil Ocean 2 and Metropolis 2. Harmless bug where the invisible grabber that allows the player to grab onto Robotnik's getaway ship in WFZ was coded to hurt the player, but didn't because he happened to be in ball form. Eggrobo will also remove collision from head when being hit on the body. Background blue mountains in HTZ scroll continuously now. MCZ balls on chains did not properly delete themselves when offscreen. Vladikcomper's PLC buffer fix. Death/hurt bug with CPZ tubes. The collision hit box of CPZ boss' Mega Mack did not match its graphics. The Mega Mack could not hit ducking characters. Droplets will no longer loop around the level. CPZ boss gets gunked by Mega Mack when hit (by Esrael). Tails' tails animation error when pushing (by RedHotSonic). Accidental deletion of scattered rings when crossing the bottom boundary of looping levels (by RedHotSonic). Collision width of ARZ boss' pillars (by MoDuLe). Animation of ARZ boss when players are hurt (by RedHotSonic). Fixed multiple CNZ boss bugs (by RedHotSonic). Boss Deconstruction Behavior (by Esrael and RedHotSonic). Tails' tails also flashes when Tails is hurt. Damaged Eggman would vanish after going offscreen in Final Zone. Fixed Knuckles' continuous fast climb animation when near the bottom of a ledge (including small ledges). CPU will no longer keep madly jumping again and again when the leader is standing beside something. Revision v0.06h: download it here. Changelog: Enhancements over previous revision: Super Sonic can now do a super dash similar to that of Hyper Sonic in S3&K -- but without blanking the screen or killing badniks. Added small move lock (1/6 of a second) on peelout release to prevent speed loss until player starts to hold forward. Normal shield's jump dash and homing attack display "sparks" (optional build flag causes it to display after-images of the shield instead). Removed useless code in Knuckles' check for double jump action in fall-from-glide animation; improved double-jump code for all characters. Lag reduction, particularly on MTZ2. Solid objects and platforms, if entirely offscreen, will now only clear standing and pushing flags, as needed. Improved super underwater palettes, as well as the way they are hadled/chosen. Chickens fly away in Sky Chase zone. Turtles still die. S3&K-styled act icons for title cards and score tally, by Neo. S3&K-like font for title card. Improved level select icons by Neo. Removed useless code from camera handling code. CPUs no longer lose shield/invincibility status/speed shoes when dying. CPUs are now better stewards for shields too, and won't lose them when hit. Character traits bit field to de-hard-coding character abilities and effects (currently, for super strength, super speed, power glide, protective flight, shield abilities/insta-shield, peelout). Ported S3&K-style code pointer in object SST instead of object ID, so that I can now have as many objects as I want/need. Slightly increased dynamic object limit. Removed lots of unused code/objects/data. Vastly improved address error debugger (just in case). Edited acts: some goodies were added to CPZ (some ported from S2&K), some to HTZ1, some to MCZ. Edited the start of MTZ2 to eliminate ultra-high number of platform objects, which caused severe lag. Added a red spring into *that* spike pit in MCZ2. Added path swappers to prevent being stuck on CNZ plungers. Also added/moved some path swappers on CPZ. Added ceilings to some parts of MCZ that lacked them, fixed some collision woes at the top of HTZ1. Fixed areas in WFZ where you could get traped by flying/double-jumping from below. New water ripple data for CPZ2. Bugs fixed from previous revision: Various character selection bugs for 1- and 2-players. Missing collision for MTZ boss' laser and for two MCZ objects. Fixed endings for 1- and 2-players, and most egregiously for Tails solo. AI no longer try to jump if looking up, thus unwittingly charging a spindash/peelout. Fixed priority bugs with SFX, particularly peelout/peelout release. Sign post at end of acts only loads its art when it is really needed. Music would not resume if swapping from drowning character. Drowning countdown for Knuckles was bugged. Fixed spawning bug on some MTZ moving platforms. Spindash/peelout no longer reset the animation on every button press, giving a smoother animation. Flickies are no longer color mismatched during super transformation. Mostly harmless (by luck) initialization bug of rings display in Special Stage. Fixed respawn bug with Sonic on levels with water. Fixed bug with 1-Up song loops. Bugs fixed from the original games: Moved up end-of-act signposts that were buried too far in the ground. Revision v0.06f: download it here. Changelog: Enhancements over previous revision: New Super Sonic slot icon by ICEknight. Slot machine is a lot more random now. SCD peelout release sound, and SCD-based spindash-like charging peelout sound (both courtesy of Aquaslash, the latter heavily modified by myself). Bugs fixed from previous revision: The old layering order code for Tails' tails caused too many bugs and has been reverted; a new side-effect-free version has been put in place instead. Only game leader was shown in 1-up monitors. Slot machine was treating Knuckles as jackpots and rings as bars. Also, it is possible to get bars again. Fixed game/time over text colors. Fixed glitched counter on time over. Continue icons did not appear on the foreground. ARZ boss screen would not lock if you came flying from above. Could be screen-locked on CPZ if trying to get to the boss arena by flying from on high. Delayed collision effects made Crawl much less formidable. Fixed OOZ speed-up bug if Tails carried Sonic or Knuckles into the launcher balls or block launcher. Fixed continue screen for real now, including code to wrap continues into multiple lines if needed. Fire shield was exceeding its allotted VRAM in a couple of frames of normal animation for Sonic. Sonic's CPU forcibly despawns Sonic when he is not on-screen, moving down and below the top edge of the screen. This fixes screen wrapping problems in Sky Chase zone, and possibly others. Fixed invincibility song not playing with less than 3 characters. Bugs fixed from the original games: Standing in ARZ boss' pillars while some other character kills the boss no longer makes character walk on air. Some MTZ spintubes would let you fall through the destination floor if you were on super state, had enough speed when entering the tube and kept holding forward as you reappear on the other end. Revision v0.06e: download it here. Changelog: Enhancements over previous revision: Each character now has his own independent chain bonus counter. New mappings/art for MTZ boss to make it look closer to original. Making smarter use of HUD code to reduce DMA transfers related to portraits when swapping characters to a bare minimum. Knuckles has been added to CNZ slot machine, giving 25 rings (same as Tails). Added also Super Sonic slot image by Gsuki, used when super transformation is on. Slightly modified the workings of the super cheat (code still the same). Bugs fixed from previous revision: ARZ boss did not load unless you were playing with all 3 characters. Continue screen fixed. Fixed damn Sonic respawning bug when leader is dead. Tails' tails could appear behind other characters. Tails could save Sonic or Knuckles from drowning by carrying them while drowning countdown ends. CPU respawning while leader jumped down to WFZ end-of-act cutscene prevented cutscene from working. Sonic could turn super with regular shield instead of doing homing attack. This has been changed for consistency with other shields. Shields could overwrite VRAM for super stars if you turned super after breaking a shield monitor but before the shield appeared. Fixed Oil Ocean launcher speed-up bug (by MoDule). Buggy interactions and controls with wind tunnels. Bugs fixed from the original games: Incorrect register usage during slot machine randomization. Revision v0.06d: download it here. Changelog: Enhancements over previous revision: Special Stage AIs more responsive. Added Cyletn Nite to credits. Use continue icons from S3&K for Sonic/Tails/Knuckles. Bugs fixed from previous revision: Wrong stats were used when super transformation ends. Fixed flickys on ending sequence when Tails was present and not all emeralds had been collected. Could gain lives from rings again and again after coming back from special stages. Bug queue: Continue screen Tails' tails may appear behind other characters. Revision v0.06c: download it here. Changelog: Enhancements over previous revision: Display 9:59:999 on time over. Sonic now has the peel-out. Works exactly like spindash, but holding 'up' instead of 'down'. Tails and Knuckles can charge a spindash by holding either 'up' or 'down' and pressing jump buttons. This is mostly to help the AI. Bugs fixed from previous revision: Exiting a special stage resets the minutes count on the clock to zero, but seconds remain intact. 1-Up monitor was not being correctly refreshed when swapping leaders/reverting back from super status. Having ever used a bubble shield bounce caused crashes when getting back for special stages or when switching levels. Options screen graphics were corrupted if you entered the options screen again after pressing start on the Sega screen. Super Sonic had wrong mappings for looking up frame. Revision v0.06b: download it here. Changelog: Enhancements over previous revision: Credits screen duration is adjusted for the additional screens. New Super Sonic sprite for looking up, by Gsuki. Only human-controlled characters can break monitors. New carried character art for vertical alignment. CPU players will target unadjustment position of leader when leader is on the air or standing on an object. Bugs fixed from previous revision: Incorrect score tally after special stages 2p HUD problems Characters can keep stars after invincibility is over Second or third players could not swap characters. Edit: New revision is out. Revision 0.06a: download it here. Changelog for revision 0.06: Enhancements over previous revision: New extra data/extra objects/function vtable object code for Sonic/Tails/Knuckles reduces code triplication with benefits. Fully functional multitap support; the first 3 joypads found will be used for P1, P2 and P3 in the order in which they are found. Fully functional support for 6-button controllers (although only X is used at the moment) (works on Gens, Regen and Kega Fusion). Ported S3&K object manager to reduce lag (particularly MTZ2) (thanks to MoDule for tutorial). Ported water ripple effects (thanks to MoDule for tutorial and Alriightyman for S3&K AIZ ripple data). Ported S3&K collision manager to free RAM (thanks to MoDule for tutorial; I fixed a few invalid assumptions on collision data size). Got rid of Silver Sonic's unnecessary decoding at Sega screen. Knuckles drops from a higher position when respawning, making him slightly more efficient. Sonic does not go as high up in the air when respawning. Swapped Tails and Knuckles at the ending cutscene. Tails CPU is controllable during flight/swim by a human-controlled carried character, and interprets up as being jump (similar to S3&K MG2 boss). You can now swap to/from a character in more circumstances (e.g., while either or both characters are hanging from a vine in MCZ). New Sonic 2 Heroes title screen, featuring FeliciaVal's Knuckles and Dark Sonic's logo layout idea. New Special Stage palette and graphics allowing Sonic, Tails and Knuckles to use the same palette lines. Special Stages load faster because Sonic/Tails/Knuckles art is now BINCLUDE'd uncompressed and read directly from ROM. Optimized all DPLC (and respective mappings) to minimize the amount of DMA transfers. Rings and shields are retained when returning from a Special Stage. New rounded icons for HUD, with some art tweaking by Drex. Super Sonic has his own separate portrait, green eyes and all. Super Sonic has his own unique portrait, including his green eyes, for 1-up monitors. S3&K-style horizontal springs, which catapult them if you touch their side whether or not you are on the ground. LOst's faster angle->direction calculation. Removed last traces of 2P mode and debug mode. Smarter (faster) handling of art swapping and portrait swapping for super palette swaps, as well as smarter mappings/DPLC handling for Super Sonic and (Super) Knuckles. Hack branded end of game logo. New end-sequence sprites for Super Tails. Super Tails and Super Knuckles also fly alongside Super Sonic when falling from the Death Egg, instead of falling helplessly. Flickies are back in ending sequence, and display correctly when super (done by remapping their graphics to use a different color than the light blue). Flickies always show when Tails is present; otherwise, eagles show if Sonic is present. Knuckles is saddled with chickens. CPU respawns better in Sky Chase during the Wing Fortress encounter. Complete Super Sonic sprite set, with more detail. Removed redundant/unused art from Sonic, Super Sonic, Knuckles and Tails. S3&K-style commemorations at end of non-boss acts. Sonic can do a Homing attack/jump dash when using the standard S2 shield (based on code by Selbi). Improved priority for drawing order and collision order for player characters. Tails can now carry Sonic and Knuckles at the same time. Sonic now has a higher top speed (2 pixels/frame higher) than vanilla Sonic 2's top speed. Top speed when super or with speed shoes is unchanged, as is acceleration, deceleration and jump strength. Moreover, when Sonic is in the lead, Tails and Knuckles will share Sonic's top speed, acceleration, deceleration and jump strength. This is to help the other players/AI to stay on screen. If Sonic is not in the lead, he is faster than the other characters. Knuckles jumping ability is no longer nerfed. The rationale is that the original S3&K nerf was most likely done to force the use of different paths for Knuckles in certain scenarios (while Knuckles' ability to break down some walls prevented Sonic/Tails from taking these paths). Improved sound driver. Bugs fixed from previous revision: You could break some breakable objects by standing on them while an AI was jumping. Plungers in CNZ should work correctly in all circumstances. Invincibility and super stars were not setting their parent objects. Controllers were unreliable when under control of several objects (vines, hooks, breakable platings, Tornado). The cutscene at the end of WFZ now works on all circumstances. Moreover, characters will always face right after falling (a.k.a., "the ship is over THERE"). CPUs had issues when respawning after defeating final boss. Drowning checks were accidentally removed and you couldn't drown. Grabber (spider badnik from CPZ) now works correctly. There was a VRAM conflict between HTZ boss art and the animated BG. Animation tiles are now loaded even when title card is active to prevent a few frames' worth of garbled animated graphics (most noticeable in HTZ 1 clouds and flowers). You can no longer swap to a hurt or dying character. Special Stages could not be accessed. Optimized super PLC/portrait loading by reducing DMA transfers to VDP memory in order to prevent garbled graphics in some situations. Lives counter was not working correctly. Collision data got broken in one of the previous revisions for some levels (e.g., MTZ). Crash on MCZ switch vines. Underwater palettes for Super transformation are now in. Rings were restored when you died after going through a checkpoint. Leader no longer appears in front of title card if you die after hitting a checkpoint. Knuckles has his proper lower jump when being controlled by a human player. Special Stage messages no longer broken. Removed final traces of (unused) debug mode. Super palettes now correctly forces the (re)loading of the correct sprites when needed. Fixed a few oversights in imported collision routines. Fixed transformation bug with Sonic's mappings and DPLC when standing still. Fixed all transformation bugs when players other than Sonic triggered the transformation. Eliminated redundant cleaning of pattern name table A in endgame, which caused Knuckles to disappear for a few frames. MoDule's fix for bug in ARZ Boss arrow's platform behavior. MoDule's fix for collision with water after being hurt. Fixed bugged interation of super transformation while being carried. Fixed issues with in-water/out-of-water transition when Tails was carrying someone. Fixed Sonic respawn in levels with water. When leader is dead, CPU despawns when offscreen and does not respawn afterwards (a.k.a. screenwrapping Sonic/Knuckles glitch). Invincibility stars and shields glitched with game over/time over text. Wind tunnel bugs. Fixed bug that caused HTZ rising lava to be lacking solidity. Fixed SFX for insta-shield and Knuckles' slide. Special stage results screen now work. Bugs fixed from the original games: Several gliding/climbing/flying interaction issues with objects (similar issues plague S3&K, so I am chalking this up to 'original bugs'). Knuckles' gliding/sliding code did not work correctly when landing on sprite-based floor-type objects. Fixed Special Stage animation bugs when Sonic/Tails(/Knuckles) are fully horizontal. Tails' y-position was incorrectly adjusted in pinball mode or when grabbing an air bubble. Fixed the infamous screen boundary spindash bug. Special Stage CPU control was inactive while the CPU was jumping. The arms of Special Stage Tails and Knuckles were incorrectly colored. Moved WFZ palette switcher closer to the pre-boss rivet, so it cannot be skipped. Special stage HUD no longer covers the start banner. Got rid of double decoding of Tornado and cloud art in WFZ. Jump height bug when exiting water (by MoDule). Tornado no longer continually respawns at the start of Wing Fortress zone. --------- Revision 0.05: download it here. Changelog for revision 0.05: - Now works on Regen. - Completely fixed ending, including new pictures of Amy. - Pre-title screen credits are now correct. - Endgame credits added. If anyone feels they should be included, speak up and say why. - Fixed bug where going super when not controlling Sonic messed up the art. - Fixed ARZ water surface. - Fixed HTZ end of level text getting mixed up with clouds. - Fixed cycling palettes in Emerald Hill's waterfalls. - The WFZ boss laser now hurts you when it is moving, as it should. - The laser walls in WFZ boss prevent you from going past it by pushing it offscreen. - Fixed Knuckles gliding crash. - Sonic AI now respawns from the bottom of the screen, moving up at high speed. - Fixed all remaining underwater/speed shoe/super speed issues, whether be it from CPU respawning or else. Speed shoes also work correctly in water. - Speed shoes and invincibility now always end correctly. - Fixed priority of Tails's tails. - Music should correctly speed-up with speed shoes and slow down without them. - AI gets the leader's layers when respawning. - Fixed climbing on air bug which happens with Knuckles if you grab on a wall and let an object push you down. - Fixed Sega screen. - ROM title fixed. (yeah, I know I said these last two would be the last ones... sue me) Changelog for revision 0.04: - Tails and Knuckles respawn better. - AI follows slightly greater delay. - New primary palette using Xenowhirl's method. - The current leader always stays in front of the other two characters. - All characters are playable in Sky Chase. - Tornado doesn't jerk as much around when jumping, and should be exceedingly hard to fall from as player 1. - Wing Fortress cutscene bugs fixed. - Super palette rotation is independent for the 3 characters, and identical to S3&K's. Like in S3&K, there are some side effects of Super Tails. - Fixed end of level results in Aquatic Ruin and Casino Night zones. - Fixed breakaway panels in Wing Fortress. - Knuckles climbing has been fixed when facing left. --------- Changelog for revision 0.03: The following bugs from revision 0.02 have been fixed: - Sonic's AI still does not set an animation when respawning, so he uses whatever he was using when he disappeared. - Mystic Cave vines, Wing Fortress hooks, plates and hangers don't work correctly with Tails or Knuckles (or with AIs). These were bugs for 2p Tails in the original too, but the Wing Fortress ones were harmless. - Wind tunnels did not work correctly for Tails or Knuckles. - Speed shoes speed up the music, instead of slowing it down. - [CNZ] [t]he Pinball flippers and launchers don't seem to work unless everyone is present (as well as some other bugs with the same root cause). - Layers get reset to the same layers of the character that hit the last starpole. This hopefully minimizes the layering issues. - Forgot to mention: CPU characters will now respawn underwater and in a few other conditions which were filtered out before. New feature: Tails and Knuckles are playable in Wing Fortress and Death Egg. Cutscene at the end is working well, and the improved AI does a good job of not falling to their deaths in the platformer sections. Still have to do the code for Sky Chase. Of note: the level select is enabled by default as it makes it easier for debugging. You can enable it by holding A and pressing start at the title as usual (earlier revisions also had it enabled). Edit: The values given below are inaccurate, and may lead to crashes, starting at version v0.06. Use them at your own peril. While I haven't implement the character switching option, you can fiddle with variable $FFFF72. It is a word value, and the following values have work in the game: $0001 - Sonic solo $0022 - Tails solo $0014 - Knuckles solo $001C - Blue Knuckles solo $0003 - Sonic and Tails, Sonic leads $0053 - Sonic and Tails, Tails leads $0045 - Sonic and Knuckles, Sonic leads $004D - Sonic and Blue Knuckles, Sonic leads $0015 - Sonic and Knuckles, Knuckles leads $001D - Sonic and Blue Knuckles, Blue Knuckles leads $0026 - Tails and Knuckles, Tails leads $002E - Tails and Knuckles, Knuckles leads $0066 - Tails and Blue Knuckles, Tails leads $006E - Tails and Blue Knuckles, Blue Knuckles leads $0007 - Default: Sonic, Tails and Knuckles, Sonic leads, Tails is 2P $0017 - Sonic, Tails and Knuckles, Knuckles leads, Sonic is 2P $0027 - Sonic, Tails and Knuckles, Tails leads, Sonic is 2P $0047 - Sonic, Tails and Knuckles, Sonic leads, Knuckles is 2P $0057 - Sonic, Tails and Knuckles, Tails leads, Sonic is 2P $0067 - Sonic, Tails and Knuckles, Knuckles leads, Tails is 2P $000F - Sonic, Tails and Blue Knuckles, Sonic leads, Tails is 2P $001F - Sonic, Tails and Blue Knuckles, Blue Knuckles leads, Sonic is 2P $002F - Sonic, Tails and Blue Knuckles, Tails leads, Sonic is 2P $004F - Sonic, Tails and Blue Knuckles, Sonic leads, Blue Knuckles is 2P $005F - Sonic, Tails and Blue Knuckles, Tails leads, Sonic is 2P $006F - Sonic, Tails and Blue Knuckles, Blue Knuckles leads, Tails is 2P -------------------- The rest of the original post follows: Argh. Dammit, that is the first hack I am working with and you do this! I was waiting for the hack to be closer to ready (such as character selection, Sonic's AI still does not have a proper animation for getting back on screen, special stages are probably broken), but here is what I have so far. I also have been digging through multitap code to implement 3-players, but so far you can swap the characters with 'A' (the 2nd player can also do this, but only with the AI-controlled players).