Mail has been fixed; you should now be able to confirm your e-mail address, watch pages, and the like.
Please report any issues on Discord.

Proto:Sonic the Hedgehog 3

From The Cutting Room Floor
Jump to navigation Jump to search

This page details one or more prototype versions of Sonic the Hedgehog 3.

Hiddenpalace.org logo.png  This prototype is documented on Hidden Palace.

Download.png Download Sonic the Hedgehog 3 (Nov 3, 1993 prototype)
File: Sonic the Hedgehog 3 (Nov 3, 1993 prototype).bin (2 MB) (info)
Careful, you'll lose an eye.
This page or section needs more images.
There's a whole lotta words here, but not enough pictures. Please fix this.
Sonic 3 November 3rd Title.png

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.

Hmmm...
To do:
  • Find the differences between the final and early tracks.
  • Rip and compare sound effects.
  • Early level layouts for the rest of the maps in the leftover data.
  • Other changes.
  • Try to apply the leftover data.

Sub-Pages

Sonic 3 Flying Battery icon.PNG
Stage Differences
Some minor, some major, some unplayable.
SoundIcon.png
Sound Differences
Why is Sonic & Knuckles Collection stuff here?

Gameplay Differences

  • Sonic has a Drop Dash-esque move that can be performed by Up before jumping, and keeping it held while in mid-air.
  • 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.

Super Sonic

Sonic3 Nov3-1993 Super Sonic.png

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.

Graphical Differences

  • 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.
Sonic 3 Prototype Glitch Water.png
  • A majority of object palettes are not finalized.
  • The Speed Shoes and Heavy Shoes icons in Competition mode have different icons:
Proto Final
S3Proto Competition Item.png S3Final Competition Item.png

Title Screen

Proto Final
Why's it so dimly lit in this render? Ah, there we go!

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.
  • The palettes appear to be broken in some fashion. 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;

Tails Knuckles
Sonic 3 November 3rd Tails Name Card.png Sonic 3 November 3rd Knuckles Name Card.png
  • 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.
(Source: Sonic Retro, Original TCRF Research)

Level Select

Sonic3LevelSelect.png

Almost the same as the final game, though it plays no music, rendering the File Select theme unused.

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
Mushroom Valley 005C0E:0700 005C10:0701
Sandopolis 005C12:0800 005C14:0801
Lava Reef 005C16:0900 005C18:0901
Sky Sanctuary 005C1A:0A00 005C1C:0A01
Death Egg 005C1E:0B00 005C20:0B01
The Doomsday 005C2A:0C00 005C2A:0C01
ID 0D 005BF2:0D00 005BF4:0D01
Lava Reef Act 3/Boss 005BF6:1600
Hidden Palace 005BF8:1601
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.

Unused Objects and Enemies

ID Offset Name Description
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.
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.
B6 0003CE96 FBZ2 Barrier Eggman The mid-boss of Flying Battery Act 2. Although coded, it isn't actually placed in the stage.
C5 0004178A Hidden monitors that can be revealed by the falling signpost.
CA 00035AD2 Sonic during the Angel Island intro sequence.

Unused Graphics

What could it mean?

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.

Sonic3 Nov3-1993 AIZ1 Tornado Cutscene.gif

Compressed graphics in 0x182624 contain Tornado plane sprites, indicating that the cutscene with Sonic surfing would be removed soon.

Awww, it's so cute!

A smaller version of the Turbo Spikers. This was found in an unreferenced Konsinki Moduled-compressed archive at 0x132802.

Act Clear Signs

Early
Sonic3-signpost-proto.png
Proto/Final
Sonic3-signpost-final.png

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.

Unused Palettes

Hmmm...
To do:
Add the rest of the offsets and images.

Hydrocity Zone Act 1 underwater

Original Alternate
0x1F53AA
Sonic3 Nov3-1993 HCZ1 Unused Palette Underwater screenshot 2.png

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
Sonic3 Nov3-1993 HCZ1 Used Palette.png Sonic3 Nov3-1993 HCZ1 Unused Palette 1.png Sonic3 Nov3-1993 HCZ1 Unused Palette 2.png
Sonic3 Nov3-1993 HCZ1 Unused Palette 1 screenshot 1.png Sonic3 Nov3-1993 HCZ1 Unused Palette 2 screenshot 1.png

Hydrocity Zone 2
Apparently Act 2 was intended to use the Act 1 background earlier in development.

Original Alternate 1 Alternate 2
Sonic3 Nov3-1993 HCZ2 Unused Palette.png Sonic3 Nov3-1993 HCZ2 Unused Palette 1.png
0x1F534A
Sonic3 Nov3-1993 HCZ2 Unused Palette 1 screenshot 1.png Sonic3 Nov3-1993 HCZ2 Unused Palette 2 screenshot 2.png

IceCap Zone Act 1 and 2 "Cavern Area"

Original Alternate 1 Alternate 2
Sonic3 Nov3-1993 ICZ1-2 Used Palette.png Sonic3 Nov3-1993 ICZ1-2 Unused Palette 1.png
0x1F554A
Sonic3 Nov3-1993 ICZ1-2 Unused Palette 2 screenshot 2.png

IceCap Zone Act 2 "Outside"

Original Alternate
0x1F55AA
Sonic3 Nov3-1993 ICZ2 Unused Palette 2 screenshot 2.png

Mushroom Valley Zone Act 1 and 2

Original Alternate 1
0x1F582A and 0x1F588A
Sonic the Hedgehog 3 (Nov 3

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.

Original Alternate
0x1F302E and 0x1F594A

Balloon Park Zone
This palette matches the final icon's colors.

Original Alternate
0x1F5B2A
Sonic the Hedgehog 3 (Nov 3, 1993 prototype) BPZ.png

Chrome Gadget Zone
This palette shows an otherwise-unseen part of the background, and also matches the final icon's colors.

Original Alternate
Sonic the Hedgehog 3 (Nov 3, 1993 prototype) CGZ Pallete 2.png
Sonic the Hedgehog 3 (Nov 3, 1993 prototype) CGZ alt 2.png

Angel Island Zone Act 1 (used in an early cutscene?)

Hmmm...
To do:
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.

Alternate 1
0x1F5C4A
Sonic the Hedgehog 3 (Nov 3, 1993 prototype) AIZ 2.png

Data Leftovers

NotesIcon.png
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.

0x1E96D4 (Used) 0x1F25AE (Very Old) 0x1F4E6A (Old)
Sonic 3 Nov3 Palletes 1E96D4.png Sonic 3 Nov3 Palletes 1F25AE.png Sonic 3 Nov3 Palletes 1F4E6A.png
The prototype main color palette array, a large majority of which are referenced and used. It does not contain the palettes for Mushroom Valley or Lava Reef. The oldest group of unused palettes. Hydrocity's bricks have orange/purple colors, and the outside palette for IceCap Act 2 does not exist. The Mushroom Valley and Lava Reef palettes are still present, and of all the Competition Zones, only Azure Lake has an entry, and early boss palettes are present as well. Another group of unused palettes. Mostly similar to the previous one, except Hydrocity now has the final brick brown shades, an early version of IceCap Act 2's outdoors palette exists, and more of the Competition Zones have palettes with only Endless Mine still missing.

Source Code

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.

At 0xAFF0E:

                          ,WhichMessage
                Bra     @DoneInput

@InComingHail:
                Move.w  #3,WhichMessage
                Bra     @DoneInput

@ImpulseDamaged:
                Move.w  #4,WhichMessage
                Bra     @DoneInput

At 0xBFAB4:

                                                                  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                 

At 0xCF970:

                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  

At 0xDFEF3:

                                              _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