Proto:Sonic the Hedgehog 3
This page details one or more prototype versions of Sonic the Hedgehog 3.
This prototype is documented on Hidden Palace.
|Download Sonic the Hedgehog 3 (Nov 3, 1993 prototype)
File: Sonic the Hedgehog 3 (Nov 3, 1993 prototype).bin (2 MB) (info)
|This page or section needs more images. |
There's a whole lotta words here, but not enough pictures. Please fix this.
The November 3rd, 1993 prototype of Sonic the Hedgehog 3 was dumped on November 16, 2019 as the finale of Hidden Palace's Sonic Month. It is the first and currently the only true prototype of Sonic 3 to have been discovered, as all previous prerelease ROM images match the final. Although the EPROM labels claim a date of 3 November 1993, the ROM header suggests the data is actually from October.
The October date makes sense, given that this build is wildly incomplete for a game that was supposed to be finished by the end of November. It was made at a time where Sonic 3 was starting to be split into two separate games. Differences include early sprites, palettes, character abilities, missing Act transitions, and different music that would later be repurposed for Sonic & Knuckles Collection. Flying Battery Zone (which was moved to Sonic & Knuckles) is still present by default, and Lava Reef also exists deep within the ROM. It's also horrendously buggy, especially in regards to music.
The prototype seems to be the same one that was showcased in Sega Magazine in December 1993, given that all of the screenshots are 1:1 matches of what's seen in this prototype.
| Stage Differences|
Some minor, some major, some unplayable.
| Sound Differences|
Why is Sonic & Knuckles Collection stuff here?
- Sonic has a Drop Dash-esque move that can be performed by Up before jumping, and keeping it held while in mid-air. Sonic retains this ability as well in Competition Mode.
- Elemental shields lack their specific effects.
- Special Stage rings aren't present, though all their respective locations are.
- The insta-shield isn't present yet.
- Even though sparkles appear above checkpoints when Sonic has 50 rings, the bonus stages are inaccessible through normal play.
- It's very easy to clip into walls due to unfinished collision.
- Tails will fly instead of swimming when attempting to fly underwater, and is also capable of carrying Sonic underwater.
- Tails' flight ability is incomplete, and every jump press will result in maximum levitation, regardless of drop speed.
- Tails cannot change his flight direction if jumping from a curve-pipe.
- Tails cannot get tired from flying or swimming.
- Tails cannot enter Debug mode.
- Super Sonic has been partially implemented, and has the ability to shoot rings, which was removed from the final.
- The demo of Angel Island Zone Act 1 is a bit different, and also desyncs.
- The "animation test" accessed by pressing B + C in Debug Mode has not been implemented.
- Many stage transitions have not been properly implemented yet, so the Level Select is required to continue to the next Zone in most cases.
- Objects that Sonic can hang onto still act like Wing Fortress' from Sonic 2, in that Sonic won't curl into a ball when jumping off, and his animation stays the same.
- The Competition Mode levels are overall more complete than the single-player ones and even feature the final game's player sprites. There are still some things that were changed, however:
- The Grand Prix and Time Trial modes (as well as the monitor options) do not exist as a result of a lack of menu for the mode.
- The prototype features little markers near the black line that show the positions of the two players. They often change between three sprites for unknown reasons. These were removed in the final game, yet their sprites still exist within the data.
- The lap counter uses the blue/yellow palette of the "TIME" text instead of the final's red/white palette.
- It's possible to complete a lap in Chrome Gadget by jumping over the goal post.
- The game will declare a GOAL at Lap 6 rather than the final's Lap 5, but the race never ends. As a result, races can go all the way up to Lap 9, which results in it rolling over to 0 and continuing from there.
Coding for Super Sonic exists even though the Special Stages haven't been created yet, thereby preventing you from gaining any Chaos Emeralds. He can only be accessed by destroying an S monitor. Most of the code is reused from Sonic 2, with a few adjustments: the invincibility music plays instead of using a unique track, and the palette cycling has been adjusted to only use three colors in Sonic's palette instead of the four colors that Sonic 2 required.
However, the actual colors used are still based on Sonic 2's palette format (where the darkest blue in Sonic's palette is indexed first, followed by progressively lighter shades of blue) instead of Sonic 3's format (where the lightest blue color is indexed first, followed by darker shades). As such, the palettes for both Super Sonic and Sonic's palette after the transformation runs out are glitched.
- Sonic and Tails' sprites are the same as the ones in Sonic 2, albeit updated for Sonic 3's palette with some new sprites.
- Fire Shields always overlap the player.
- The HUD numbers have some shading that were removed in the final. The shine on the HUD text is also larger.
- Neither Sonic nor Tails have victory poses, instead using their "hurt" sprites upon finishing an Act.
- The Bubble Shield uses simpler graphics compared to the final.
- The invincibility stars are missing, but they do show up using the Fire Shield's graphics if the player has a Fire Shield.
- Some frames for the Lightning Shield haven't been positioned properly.
- The "Game Over" graphic is still the Sonic 2 sprite, and thus looks incorrect with the palette used in Sonic 3.
- Title cards for levels use a different palette, and graphics from the stage load early, making the title cards garbled after a few seconds.
- Many sprites, such as the water behind Sonic's surfboard while he is surfing to Angel Island, are glitched.
- A majority of object palettes are not finalized.
- The Speed Shoes and Heavy Shoes icons in Competition mode have different icons:
The title screen uses some very, very basic graphics. Specific visual differences include:
- There's no background at all - the final adds a nice skyline of Angel Island Zone. This also means no Tails (and Knuckles in Sonic 3 & Knuckles) or Tornado.
- Sonic's render was not touched up at all from his conversion to 4bpp and the palette appears to be computer generated, therefore, color clamping issues show up. The logo banner was changed from a light blue/white to a red/white color scheme, and the logo itself was changed from dark blue with orange outlines (the way the text was presented on the box art for previous titles) to yellow with dark blue outlines. There's also no TM next to the banner.
- The model for the ring and Sonic himself seems to be the same but with some differences, Sonic's pupils are move rounder, his fingers are fatter, and his ears have no inside. The ring's positioning as well as the lighting were updated. The final render makes better use of the color space, since it dithers colors where the proto render doesn't. Sonic's mouth is also notably absent from the render entirely, implying that it was a drawn-on feature when it was added to the final game's render. Sonic also isn't animated, though the banner still bounces up and down. The rest of his body is present below the ring, unlike the final.
- Incidentally, the text reading "Sonic the Hedgehog" below the logo is finalized - this simple text carried its way into the final build of the game.
- The "Copyright 1994 SEGA" text is absent, which is likely more of a given.
- Pressing Up, Up, Down, Down, Up, Up will enable Debug Mode.
- There are no menu options. Pressing Start automatically sends the player to the Level Select.
- Using the patch code FFFFD0:0000 will disable Level Select. Doing so will allow the game to immediately start on Zone 1 as in Sonic 1 and Sonic 2. This does not disable the soft reset (pause, A) or frame advance (pause, B) functions, however.
Playing as Tails or Knuckles
You can play as different characters by pressing the following button combinations at the title screen:
- Sonic & Tails: A + Start
- Sonic alone: B + Start
- Tails alone: C + Start
You can also play as different characters by using the cheat codes FFEF4C:000? FFFF08:000? FFFF0A:000?, where "?" is one of the following:
- 0 - Sonic & Tails
- 1 - Sonic
- 2 - Tails
- 3 - Knuckles (will use Tails' sprites instead)
Tails and Knuckles have graphical problems with their end-of-level signposts, however;
- When playing as Tails, the signpost will display a blue Knuckles instead of Tails' image.
- Knuckles has data in the game and his name card is still present, though when playing as him the signpost will load Robotnik's image instead of Knuckles'.
- When playing as Knuckles, the player object doesn't correctly set the collision plane when spawned, making navigating the stages very difficult. Setting memory address FFB046 to 0x0C will fix this.
Almost the same as the final game, though it plays no music, rendering the File Select theme unused. One other difference is pressing B while the Sound Test selection is highlighted will play the error buzzer sound.
As in the final game, none of the Sonic & Knuckles Zones are selectable by default (with the exception of Flying Battery). Unlike in the final game, all bonus stages are accessible (the last 2P VS Act goes to the gumball machine, while the two "Bonus" Acts go to the Sonic & Knuckles bonus stages).
The below Pro Action Replay codes can be used to regain access to these Zones:
|Zone||Act 1 Code||Act 2 Code|
|Lava Reef Act 3/Boss||005BF6:1600|
|Death Egg Final Boss||005BFA:1700|
|Hidden Palace (Special Stage Ring)||005BFC:1701|
Each level can be played through the level select. Lava Reef, Sky Sanctuary, and Death Egg are accessible using the first, second, and third 2P VS options respectively, while The Doomsday uses the Sound Test option. The gumball machine bonus stage can be played by selecting "Bonus". "ID 0D" can be accessed by selecting Angel Island Act 1 and 2. Lava Reef Act 3 and Hidden Palace can be played by selecting Hydrocity. Finally, the Death Egg final boss and Hidden Palace (Special Stage Ring) can be accessed through Marble Garden Act 1 and 2.
Sonic 2 Menu Leftovers
By setting the game's screen mode to $24, you can access the Sonic 2 options menu. Alternatively, you can use the patch code FFF600:2400 or hack the menu back in yourself. Much like the Level Select, no music is played here.
Pressing Start will begin the game at Angel Island with the selected character. The Sound Test can also be used to enter Sonic 2 specific cheat codes.
- Level Select: Although enabled by default, the level select cheat can be entered by playing sounds 19, 65, 09, 17 (September 17, 1965 being Yuji Naka's birthday).
- Extra Continues: For 14 extra continues, play sounds 01, 01, 02, 04. Unlike Sonic 2, this cheat plays the continue theme which is otherwise unused in this prototype.
It's also possible to find the 2 Player Level Select from Sonic 2 using the patch code FFF600:1C00. However, selecting any of the zones on this screen will send you back to the title screen, so you can't really do anything with this menu. Data for the Sonic 2 Results Menu also exists, but it can't be seen.
Unused Objects and Enemies
|0B||0001B338||Eosian Spheres||A mass of spheres that can be spawned in Angel Island Zone Act 1 through debug mode. It's worth noting the coding for the object is separate from the test Special Stages, despite the similar behavior.|
|12||0001C6A0||LBZ Platform||A glitched platform that appears to belong to Launch Base Zone.|
|1A||0001DFCE||Speed Cannon?||A seesaw-esque object that forces Sonic to run extremely fast upon pressing the jump button. It seems to belong to LBZ.|
|1C||0001E6C6||Spinning Spike?||A very strange object that appears to be spinning. It seems to belong to LBZ.|
|1D||0001C228||Grabbing Platform||One of the LBZ platforms, but with a "grabber" underneath that can hold Sonic. Its tile mappings appear to be somewhat glitched.|
|84||00040704||Hey Ho||A very glitched version of Hey Ho, the Mushroom Valley Act 1 boss.|
|86||0003F11A||Beam Rocket||An early version of the Launch Base Zone Act 2 boss.|
|90||00049FB6||Fireworm?||Fireworm badnik for Lava Reef Zone. Crashes the game while trying to DMA nonexistent sprites.|
|91||0004A29C||Iwadomoki||The exploding "fake stone" badnik. Can crash the game.|
|92||0004A400||Toxomister||The smoke clouds do not hurt Sonic; they only slow Sonic down.|
|93||000495CC||Madmole||The mushrooms it throws have an exaggerated effect on Sonic. It appears in the Mushroom Valley object layout.|
|94||000499BC||Mushmeanie||The bouncing mushroom enemy from Mushroom Valley Zone.|
|95||00049B24||Dragonfly||Flies up and down, as in the final game.|
|96||00049DCA||Butterdroid||Butterfly badnik from Mushroom Valley Zone.|
|97||00049E50||Cluckoid||Chicken badnik from Mushroom Valley Zone.|
|98||0004107E||Sandopolis Golem||The miniboss from Sandopolis Zone.|
|B1||00039F9E||Knuckle's MGZ2 Boss||Knuckles's variant of the Marble Garden Zone Act 2. Although coded, it isn't actually placed in the stage.|
|B6||0003CE96||FBZ2 Barrier Eggman||The mid-boss of Flying Battery Zone Act 2. Although coded, it isn't actually placed in the stage.|
|C5||0004178A||Hidden Monitors||Hidden monitors that can be revealed by the falling signpost.|
|CA||00035AD2||Tornado Intro||Sonic during the Angel Island intro sequence.|
|N/A||0001AA34||Sprite Scaling Test||Another object that can be spawned in Angel Island Zone Act 1 through debug mode. It uses a software scaling algorithm to scale sprites, although the original graphics are no longer present in ROM.|
|N/A||0000F972||Classic Shield||A non-elemental shield seen in Sonic 1 and Sonic 2 exists in a functional state, albeit unused and lacking graphics.|
|N/A||00010C60||Big Ring||The big ring object and associated flash object from Sonic 1 still exists. It was presumably reused as a basis for hidden rings in the final game.|
|N/A||00010FC2||Slot Machine Rings||Leftover code for slot machine rings seen in Sonic 2's Casino Night Zone can be found.|
|N/A||00024BCC||Special Stage Results||Leftover object code for the Special Stage results screen used in Sonic 2.|
Unused grey scale death frame leftover from Sonic 1 and Sonic 2.
A vertical animation for Sonic holding onto something. A similar animation would be used in the final game for the intro of Mushroom Hill Zone Act 2.
Possible early graphics for a button used by Knuckles. These tiles are loaded early on in the space used for the burning Angel Island Zone stage graphics.
Compressed graphics in 0x182624 contain Tornado plane sprites, indicating that the cutscene with Sonic surfing would be removed soon.
A smaller version of the Turbo Spikers. This was found in an unreferenced Konsinki Moduled-compressed archive at 0x132802.
Act Clear Signs
In Sonic 3, the sign frames are uncompressed and loaded dynamically over each other to conserve video memory. This said, also present in the game's data is an unused copy of the same art compressed like in Sonic 2, strongly suggesting it is from earlier in development.
Although Sonic, Tails, and Robotnik are basically the same as their Sonic 2 counterparts, Knuckles appears for the first time, with a slightly different appearance relative to the final art. This early version is still present in the final game, as well as in Sonic & Knuckles.
Add the rest of the offsets and images.
Hydrocity Zone Act 1 underwater
Hydrocity Zone Act 1
The bricks in the oldest palette are red in the foreground and lavender in the background. Later palettes changed them to green and purple.
|Original||Alternate 1||Alternate 2|
Hydrocity Zone 2
Apparently Act 2 was intended to use the Act 1 background earlier in development.
|Original||Alternate 1||Alternate 2|
IceCap Zone Act 1 and 2 "Cavern Area"
|Original||Alternate 1||Alternate 2|
IceCap Zone Act 2 "Outside"
Mushroom Valley Zone Act 1 and 2
Lava Reef Zone Act 2
Although the color gradients are disorganized, these color palettes are almost the same as the final version rather than the Sonic 3C 0408 prototype.
Balloon Park Zone
This palette matches the final icon's colors.
Chrome Gadget Zone
This palette shows an otherwise-unseen part of the background, and also matches the final icon's colors.
Angel Island Zone Act 1 (used in an early cutscene?)
Offset for the Very Old version.
An unused AIZ1 color palette appears to be a mix between the beach cutscene and the forest interior, as if the forest background did not exist. This color palette has been removed in the version used by the prototype.
| Data Leftover|
Listing with the location of data leftover from other rewrites of old builds during development.
Towards the end of the binary, two partial blocks of older data exist, which contain Lava Reef Zone data and older palettes (and potentially other levels' data), among other things.
The palette block used in-game is the one on the left.
Pieces of the source code for Star Trek: The Next Generation linger at various parts of the ROM. Like other prototypes, this was likely the result of the game formerly occupying the cartridge before being mostly overwritten.
,WhichMessage Bra @DoneInput @InComingHail: Move.w #3,WhichMessage Bra @DoneInput @ImpulseDamaged: Move.w #4,WhichMessage Bra @DoneInput
the screen. DMAScrollArrows: Subq.w #1,ArrowDelay ; Determine if arrow buffers or blanks should Bne.s @NoTogg ; be DMA'ed this makes the arrows flash. Move.w #15,ArrowDelay ; Reset delay between flashes. Eor.w #1,ArrowToggle ; Toggle between blanks and arrows. @NoTogg: Tst.w ArrowToggle ; Branch to relevent bit. Beq.s @ArrowsOff ; ====== Arrows on, DMA the buffers. ====== Lea UpArrowBuffer,A0 ; Source. Lea ScrollBBase+(27*2)+(21*64),A1 ; Destination. Move.w #1,D0 ; Number of words. Move.l #VDP_VRAMWrite,D1 ; Set to write to VRAM. Moveq #2,D2 ; Auto increment. Jsr PushDMA ; Move characters to VRAM. Lea DownArrowBuffer,A0 ; Source. Lea ScrollBBase+(27*2)+(26*64),A1 ; Destination. Move.w #1,D0
Lea ScrollBBase+($b*64)+(27*2),A1 Jsr Word_2GVRAM Move.w #AsciiOffset+CHR_Palette0+CHR_HighPri,D5 ; Color is different if in impulse. Bra @DoneSeperators @NotImpulse: Move.w #AsciiOffset+CHR_Palette3+CHR_HighPri+'.',D0 ; Place decimal points and '/' seperators. Lea ScrollBBase+($5*64)+(28*2),A1 Jsr Word_2GVRAM Lea ScrollBBase+($7*64)+(27*2),A1 Jsr Word_2GVRAM Lea ScrollBBase+($d*64)+(28*2),A1 Jsr Word_2GVRAM Move.w #AsciiOffset+CHR_Palette3+CHR_HighPri+'/',D0 Lea ScrollBBase+($9*64)+(27*2),A1 Jsr Word_2GVRAM Lea ScrollBBase+($b*64)+(27*2),A1 Jsr Word_2GVRAM Move.w #AsciiOffset+CHR_Palette3+CHR_HighPri,D5 ; Set up character color. @DoneSeperators: Move.w CurrentDistance,D7 ; Get whole part of DISTANCE. Moveq #3,D6 ; Three characters. Moveq #'$',D2 ; Lead with a spaces. Lea ScrollBBase+($5*64)+(25*2),A1 ; Screen destination. Jsr PrintVal ; Print it. Move.w CurrentDistance+2,D7 ; Get fractional part of DISTANCE. Moveq #2,D6 ; Two digits. Move.w
_No1,VIEW_NOT_FLIPPED,VIEW_SIZE_6 Dc.b VIEW_PLANET10,VIEW_PAL_NoA,VIEW_FLIPPED,VIEW_SIZE_6 Dc.b VIEW_PLANET4,VIEW_PAL_NoC,VIEW_FLIPPED,VIEW_SIZE_7 Dc.b VIEW_PLANET10,VIEW_PAL_No1,VIEW_NOT_FLIPPED,VIEW_SIZE_7