-
Notifications
You must be signed in to change notification settings - Fork 7
Beta Level Order
(Original guide by RetroKoH)
Source: See Commit
Commit: c38f62d
This mod can be toggled in S1Fixed by setting BetaLevelOrder to 0 or 1.
Here is Sonic 1's Level Order, according to the REV01 Level Select:

Did you know that Sonic 1's level order used to be radically different? I mean, you probably did if you've ever seen the original Level Select order, or the internal order of zones in the game for that matter:

It's said that the level order was changed due to the original order being too steep of a difficulty curve for players. Well, what if we wanted to play the game in this way? We can do that, actually!
First, we should actually change the in-game progression order. The Got Through cards are actually responsible for this, as they take your current zone/act ID, and use these to set the next zone/act ID prior to the level transition. All we need to do is change the IDs around. Open__incObj/3A Got Through Card.asm_ and find LevelOrder. Change the listed data to this:
LevelOrder:
; Green Hill Zone
dc.b id_GHZ, 1 ; Act 1
dc.b id_GHZ, 2 ; Act 2
dc.b id_LZ, 0 ; Act 3
dc.b 0, 0
; Labyrinth Zone
dc.b id_LZ, 1 ; Act 1
dc.b id_LZ, 2 ; Act 2
dc.b id_MZ, 0 ; Act 3
dc.b id_SBZ, 2 ; Scrap Brain Zone Act 3
; Marble Zone
dc.b id_MZ, 1 ; Act 1
dc.b id_MZ, 2 ; Act 2
dc.b id_SLZ, 0 ; Act 3
dc.b 0, 0
; Star Light Zone
dc.b id_SLZ, 1 ; Act 1
dc.b id_SLZ, 2 ; Act 2
dc.b id_SYZ, 0 ; Act 3
dc.b 0, 0
; Spring Yard Zone
dc.b id_SYZ, 1 ; Act 1
dc.b id_SYZ, 2 ; Act 2
dc.b id_SBZ, 0 ; Act 3
dc.b 0, 0
; Scrap Brain Zone
dc.b id_SBZ, 1 ; Act 1
dc.b id_LZ, 3 ; Act 2
dc.b 0, 0 ; Final Zone
dc.b 0, 0
even
zonewarning LevelOrder,8That makes our game follow the new (old) progression, but now we need to change the Level Select. This is actually very easy, as modern Sonic 1 disassemblies already have this as an option, listed under if Revision=0.
Look for the labels LevSel_Ptrs and LevelMenuText, and use the data listed under if Revision=0. The Menu Text is just a binary blob (unless you followed the ASCII guide) but you'll simply want to use the one that doesn't have (JP) in the filename. The pointers should look like this:
LevSel_Ptrs:
dc.b id_GHZ, 0
dc.b id_GHZ, 1
dc.b id_GHZ, 2
dc.b id_LZ, 0
dc.b id_LZ, 1
dc.b id_LZ, 2
dc.b id_MZ, 0
dc.b id_MZ, 1
dc.b id_MZ, 2
dc.b id_SLZ, 0
dc.b id_SLZ, 1
dc.b id_SLZ, 2
dc.b id_SYZ, 0
dc.b id_SYZ, 1
dc.b id_SYZ, 2
dc.b id_SBZ, 0
dc.b id_SBZ, 1
dc.b id_LZ, 3
dc.b id_SBZ, 2
dc.b id_SS, 0 ; Special Stage
dc.w $8000 ; Sound Test
evenIf you DID follow the ASCII guide (which you should), this is what your level select text should look like:
LevelMenuText:
dc.b "GREEN HILL ZONE STAGE 1"
dc.b " STAGE 2"
dc.b " STAGE 3"
dc.b "LABYRINTH ZONE STAGE 1"
dc.b " STAGE 2"
dc.b " STAGE 3"
dc.b "MARBLE ZONE STAGE 1"
dc.b " STAGE 2"
dc.b " STAGE 3"
dc.b "STAR LIGHT ZONE STAGE 1"
dc.b " STAGE 2"
dc.b " STAGE 3"
dc.b "SPRING YARD ZONE STAGE 1"
dc.b " STAGE 2"
dc.b " STAGE 3"
dc.b "SCRAP BRAIN ZONE STAGE 1"
dc.b " STAGE 2"
dc.b " STAGE 3"
dc.b "FINAL ZONE "
dc.b "SPECIAL STAGE "
dc.b "SOUND SELECT "
evenAnd there we go. We have the beta level order reimplemented!