How to fix the Level Select menu so it have the true in-game order

Discussion in 'Engineering & Reverse Engineering' started by STHX, May 26, 2008.

  1. STHX

    STHX

    SEGAAAAAAAAA?!? Member
    1,796
    0
    16
    The world of Trophies
    Sonic In Mushroom Kingdom
    Before starting, probably some people will say this topic is useless or not needed (also most mayor hacks do not have the old level select menu), however, others, like me, may find this useful for their hack, so I'm doing this for them, and also to check if I understood this process completely (If I'm wrong, please someone correct me. Where I live nobody is a programmer/RomHacker, so I can't ask anybody). The first part is based on the SCHG:Sonic The Hedgehog Text Editing, the second part has some original research. Also, this topic is useless if you use ESE, but it helps if you use a disassembly.
    NOTE: Hivebrain 2005 Disassembly used. Sorry if it has differences from other disassemblies.
    Anyway, Let's Start:

    Introduction:
    If you have been on this board for a long time, chance is you have played Sonic The Hedgehog, and if you played it, you know it has a Level Select code (UP DOWN LEFT RIGHT to activate it, A+START to enter the level select menu). However, the Zone order in the menu is not the actual in-game order, but the original planned order.

    [​IMG]

    This topic will show you how to change it and still mantain its functions.
    You will need an Hex Editor for this.

    Step 1: The Text

    From the Hivebrain 2005 Disassembly open with an hex editor the file menutext.bin in the misc folder. You should have something like this:

    17 22 15 15 1E FF 18 19 1C 1C FF 10 1F 1E 15 FF FF 23 24 11 17 15 FF 01 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 02 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 03 1C 11 12 0F 22 19 1E 24 18 FF 10 1F 1E 15 FF FF FF 23 24 11 17 15 FF 01 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 02 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 03 1D 11 22 12 1C 15 FF 10 1F 1E 15 FF FF FF FF FF FF 23 24 11 17 15 FF 01 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 02 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 03 23 24 11 22 FF 1C 19 17 18 24 FF 10 1F 1E 15 FF FF 23 24 11 17 15 FF 01 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 02 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 03 23 20 22 19 1E 17 FF 0F 11 22 14 FF 10 1F 1E 15 FF 23 24 11 17 15 FF 01 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 02 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 03 23 13 22 11 20 FF 12 22 11 19 1E FF 10 1F 1E 15 FF 23 24 11 17 15 FF 01 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 02 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 03 16 19 1E 11 1C FF 10 1F 1E 15 FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 20 15 13 19 11 1C FF 23 24 11 17 15 FF FF FF FF FF FF FF FF FF FF FF 23 1F 25 1E 14 FF 23 15 1C 15 13 24 FF FF FF FF FF FF FF FF FF FF FF FF

    Now, if you have read the article SCHG:Sonic The Hedgehog Text Editing on the wiki, you know that all of this bytes can be translated to a character. In particular:

    00 = 0 01 = 1 02 = 2 03 = 3 04 = 4
    05 = 5 06 = 6 07 = 7 08 = 8 09 = 9
    0A = $ 0B = - 0C = = 0D = <- 0E = <-
    0F = Y 10 = Z 11 = A 12 = B 13 = C
    14 = D 15 = E 16 = F 17 = G 18 = H
    19 = I 1A = J 1B = K 1C = L 1D = M
    1E = N 1F = O 20 = P 21 = Q 22 = R
    23 = S 24 = T 25 = U 26 = V 27 = W
    28 = X FF = (space)

    These are the corrisponding values, that, when rearranged will look like this:

    17 22 15 15 1E FF 18 19 1C 1C FF 10 1F 1E 15 FF FF 23 24 11 17 15 FF 01 (GREEN HILL ZONE STAGE 1)
    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 02 (STAGE 2)
    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 03 (STAGE 3)
    1C 11 12 0F 22 19 1E 24 18 FF 10 1F 1E 15 FF FF FF 23 24 11 17 15 FF 01 (LABYRINTH ZONE STAGE 1)
    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 02 (STAGE 2)
    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 03 (STAGE 3)
    1D 11 22 12 1C 15 FF 10 1F 1E 15 FF FF FF FF FF FF 23 24 11 17 15 FF 01 (MARBLE ZONE STAGE 1)
    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 02 (STAGE 2)
    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 03 (STAGE 3)
    23 24 11 22 FF 1C 19 17 18 24 FF 10 1F 1E 15 FF FF 23 24 11 17 15 FF 01 (STAR LIGHT ZONE STAGE 1)
    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 02 (STAGE 2)
    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 03 (STAGE 3)
    23 20 22 19 1E 17 FF 0F 11 22 14 FF 10 1F 1E 15 FF 23 24 11 17 15 FF 01 (SPRING YARD ZONE STAGE 1)
    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 02 (STAGE 2)
    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 03 (STAGE 3)
    23 13 22 11 20 FF 12 22 11 19 1E FF 10 1F 1E 15 FF 23 24 11 17 15 FF 01 (SCRAP BRAIN ZONE STAGE 1)
    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 02 (STAGE 2)
    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 03 (STAGE 3)
    16 19 1E 11 1C FF 10 1F 1E 15 FF FF FF FF FF FF FF FF FF FF FF FF FF FF (FINAL ZONE)
    23 20 15 13 19 11 1C FF 23 24 11 17 15 FF FF FF FF FF FF FF FF FF FF FF (SPECIAL STAGE)
    23 1F 25 1E 14 FF 23 15 1C 15 13 24 FF FF FF FF FF FF FF FF FF FF FF FF (SOUND SELECT)

    Now you can change the code to make it reflect the true in-game Zone order (GHZ MZ SYZ LZ SLZ SBZ FZ). In the end, you should have somethign like this:

    17 22 15 15 1E FF 18 19 1C 1C FF 10 1F 1E 15 FF FF 23 24 11 17 15 FF 01 (GREEN HILL ZONE STAGE 1)
    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 02 (STAGE 2)
    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 03 (STAGE 3)
    1D 11 22 12 1C 15 FF 10 1F 1E 15 FF FF FF FF FF FF 23 24 11 17 15 FF 01 (MARBLE ZONE STAGE 1)
    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 02 (STAGE 2)
    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 03 (STAGE 3)
    23 20 22 19 1E 17 FF 0F 11 22 14 FF 10 1F 1E 15 FF 23 24 11 17 15 FF 01 (SPRING YARD ZONE STAGE 1)
    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 02 (STAGE 2)
    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 03 (STAGE 3)
    1C 11 12 0F 22 19 1E 24 18 FF 10 1F 1E 15 FF FF FF 23 24 11 17 15 FF 01 (LABYRINTH ZONE STAGE 1)
    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 02 (STAGE 2)
    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 03 (STAGE 3)
    23 24 11 22 FF 1C 19 17 18 24 FF 10 1F 1E 15 FF FF 23 24 11 17 15 FF 01 (STAR LIGHT ZONE STAGE 1)
    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 02 (STAGE 2)
    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 03 (STAGE 3)
    23 13 22 11 20 FF 12 22 11 19 1E FF 10 1F 1E 15 FF 23 24 11 17 15 FF 01 (SCRAP BRAIN ZONE STAGE 1)
    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 02 (STAGE 2)
    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 23 24 11 17 15 FF 03 (STAGE 3)
    16 19 1E 11 1C FF 10 1F 1E 15 FF FF FF FF FF FF FF FF FF FF FF FF FF FF (FINAL ZONE)
    23 20 15 13 19 11 1C FF 23 24 11 17 15 FF FF FF FF FF FF FF FF FF FF FF (SPECIAL STAGE)
    23 1F 25 1E 14 FF 23 15 1C 15 13 24 FF FF FF FF FF FF FF FF FF FF FF FF (SOUND SELECT)

    Save, test, build, and you should have done it. However, now that the text is changed, there seems to a bigger problem,

    [​IMG]

    Because if you select Marble Zone 1

    [​IMG]

    You will go to Labyrinth!
    So, does this mean we screwed up? Yes, but only because the level pointers were not altered, and now we will change them.

    Step 2: The Level Pointers

    From the Hivebrain 2005 Disassembly open with an hex editor the file ls-point.bin in the misc folder. You should have something like this:

    00 00 00 01 00 02 01 00 01 01 01 02 02 00 02 01 02 02 03 00 03 01 03 02 04 00 04 01 04 02 05 00 05 01 01 03 05 02 07 00 80 00

    This file tell the game in what Zone the various selection of the Level Select Menu will take Sonic (The Level Pointers)
    But... What does it mean? Before going on, let me explain something on the Zones.
    The game give a hex value to all Zones and to all Acts, and the order follows (Again) the original planned order of the levels. Each level is identified with a pair of bytes, the first indicate the zone number (remember, they are in Hex, and they start at 00):

    00 = GHZ
    01 = LZ
    02 = MZ
    03 = SLZ
    04 = SYZ
    05 = SBZ
    07 = Special Stage

    While the second indicate the zone act:

    00 = Act 1
    01 = Act 2
    02 = Act 3
    03 = Act 4 [No, it's not a mistake. Sonic The Hedgehog has a fourth Act, I'll explain this after]

    Still unclear? Then let's arrange the code:

    (GREEN HILL ZONE STAGE 1) 00 00
    (STAGE 2) 00 01
    (STAGE 3) 00 02
    (LABYRINTH ZONE STAGE 1 01 00
    (STAGE 2) 01 01
    (STAGE 3) 01 02
    (MARBLE ZONE STAGE 1) 02 00
    (STAGE 2) 02 01
    (STAGE 3) 02 02
    (STAR LIGHT ZONE STAGE 1) 03 00
    (STAGE 2) 03 01
    (STAGE 3) 03 02
    (SPRING YARD ZONE STAGE 1) 04 00
    (STAGE 2) 04 01
    (STAGE 3) 04 02
    (SCRAP BRAIN ZONE STAGE 1) 05 00
    (STAGE 2) 05 01
    (STAGE 3) 01 03 [Remember the fourth act thing? Then do not forget that SBZ Act 3 is in truth LZ act 4. This is important! FZ is the true SBZ Act 3]
    (FINAL ZONE) 05 02
    (SPECIAL STAGE) 07 00
    (SOUND SELECT) 80 00 [This do not point to any level. I suppose it just tell the game to set the Sound Select number to 80]

    Now it's a lot easier to understand that bunch of Hex values. Now change them so they reflect the new Text in the menu (You should have something like this: 00 00 00 01 00 02 02 00 02 01 02 02 04 00 04 01 04 02 01 00 01 01 01 02 03 00 03 01 03 02 05 00 05 01 01 03 05 02 07 00 80 00):

    (GREEN HILL ZONE STAGE 1) 00 00
    (STAGE 2) 00 01
    (STAGE 3) 00 02
    (MARBLE ZONE STAGE 1) 02 00
    (STAGE 2) 02 01
    (STAGE 3) 02 02
    (SPRING YARD ZONE STAGE 1) 04 00
    (STAGE 2) 04 01
    (STAGE 3) 04 02
    (LABYRINTH ZONE STAGE 1 01 00
    (STAGE 2) 01 01
    (STAGE 3) 01 02
    (STAR LIGHT ZONE STAGE 1) 03 00
    (STAGE 2) 03 01
    (STAGE 3) 03 02
    (SCRAP BRAIN ZONE STAGE 1) 05 00
    (STAGE 2) 05 01
    (STAGE 3) 01 03
    (FINAL ZONE) 05 02
    (SPECIAL STAGE) 07 00
    (SOUND SELECT) 80 00

    Save, build, and try again to select Marble Zone Stage 1

    [​IMG]

    Success!!! The level select menu now not only have the the Zones in the right order, but you will actually go there when you select them.

    Final note: This can help you if you plan to change the Zone names (Or the order) in your hack, and still have a perfect Level Select Menu.
    Have fun :lol: .


    EDIT: Stupid me accented all the Us in the word menu, but now it is fixed... Wait, no. The one in the title need to be fixed too.
     
  2. Puto

    Puto

    Shin'ichi Kudō, detective. Tech Member
    2,013
    0
    0
    Portugal, Oeiras
    Part of Team Megamix, but haven't done any actual work in ages.
    One question... why did you use an accented ù in "menu"?
     
  3. STHX

    STHX

    SEGAAAAAAAAA?!? Member
    1,796
    0
    16
    The world of Trophies
    Sonic In Mushroom Kingdom
    Sorry, I italianized the word, I'll fix this now.
     
  4. nineko

    nineko

    I am the Holy Cat Tech Member
    Go Italy :D

    Now, to add some content to this post, since I don't like to write useless comments.

    If you plan to add more levels, being them Act 4s or new Zones, it's easy to add more lines to the menu.
    For one, you just have to add a new row of 24 bytes in menutext.bin, and a new row of 2 bytes in ls_point.bin using the syntaxes described above. This is the easiest part.
    Now, you have to edit a few sections of the asm code.

    Look here:
    Code (Text):
    1. LevSelControls:     ; XREF: LevelSelect
    2.         move.b  ($FFFFF605).w,d1
    3.         andi.b  #3,d1; is up/down pressed and held?
    4.         bne.s   LevSel_UpDown; if yes, branch
    5.         subq.w  #1,($FFFFFF80).w; subtract 1 from time  to next move
    6.         bpl.s   LevSel_SndTest; if time remains, branch
    7.  
    8. LevSel_UpDown:
    9.         move.w  #$B,($FFFFFF80).w; reset time delay
    10.         move.b  ($FFFFF604).w,d1
    11.         andi.b  #3,d1; is up/down pressed?
    12.         beq.s   LevSel_SndTest; if not, branch
    13.         move.w  ($FFFFFF82).w,d0
    14.         btst    #0,d1; is up    pressed?
    15.         beq.s   LevSel_Down; if not, branch
    16.         subq.w  #1,d0; move up 1 selection
    17.         bcc.s   LevSel_Down
    18.         moveq   #$14,d0; if selection moves below 0, jump to selection  $14; THIS LINE HAS TO BE EDITED
    19.  
    20. LevSel_Down:
    21.         btst    #1,d1; is down pressed?
    22.         beq.s   LevSel_Refresh; if not, branch
    23.         addq.w  #1,d0; move down 1 selection
    24.         cmpi.w  #$15,d0; THIS LINE HAS TO BE EDITED
    25.         bcs.s   LevSel_Refresh
    26.         moveq   #0,d0; if selection moves above $14,    jump to selection 0
    27.  
    28. LevSel_Refresh:
    29.         move.w  d0,($FFFFFF82).w; set new selection
    30.         bsr.w   LevSelTextLoad; refresh text
    31.         rts
    32. ; ===========================================================================
    33.  
    34. LevSel_SndTest:     ; XREF: LevSelControls
    35.         cmpi.w  #$14,($FFFFFF82).w; is  item $14 selected?; THIS LINE HAS TO BE EDITED
    36.         bne.s   LevSel_NoMove; if not, branch
    37.         move.b  ($FFFFF605).w,d1
    38.         andi.b  #$C,d1; is left/right   pressed?
    39.         beq.s   LevSel_NoMove; if not, branch
    40.         move.w  ($FFFFFF84).w,d0
    41.         btst    #2,d1; is left pressed?
    42.         beq.s   LevSel_Right; if not, branch
    43.         subq.w  #1,d0; subtract 1 from sound    test
    44.         bcc.s   LevSel_Right
    45.         moveq   #$4F,d0; if sound test  moves below 0, set to $4F
    46.  
    47. LevSel_Right:
    48.         btst    #3,d1; is right pressed?
    49.         beq.s   LevSel_Refresh2; if not, branch
    50.         addq.w  #1,d0; add 1    to sound test
    51.         cmpi.w  #$50,d0
    52.         bcs.s   LevSel_Refresh2
    53.         moveq   #0,d0; if sound test    moves above $4F, set to 0
    54.  
    55. LevSel_Refresh2:
    56.         move.w  d0,($FFFFFF84).w; set sound test number
    57.         bsr.w   LevSelTextLoad; refresh text
    58.  
    59. LevSel_NoMove:
    60.         rts
    61. ; End of function LevSelControls
    There are three lines that need to be changed.
    Edit the #$14 in the first moveq to #$15, the #$15 in the first cmpi.w to #$16, and the #$14 in the other cmpi.w to #$15

    What will this do? This will tell the game that you can now select one more line, and that the sound test has been shifted down by one line.

    Now, right below that code, you should find this:
    Code (Text):
    1. LevSelTextLoad:     ; XREF: TitleScreen
    2.         lea (LevelMenuText).l,a1
    3.         lea ($C00000).l,a6
    4.         move.l  #$62100003,d4; screen position (text); THIS LINE HAS TO BE EDITED
    5.         move.w  #$E680,d3; VRAM setting
    6.         moveq   #$14,d1; number of lines of text; THIS LINE HAS TO BE EDITED
    7.  
    8. loc_34FE:       ; XREF: LevSelTextLoad+26j
    9.         move.l  d4,4(a6)
    10.         bsr.w   LevSel_ChgLine
    11.         addi.l  #$800000,d4
    12.         dbf d1,loc_34FE
    13.         moveq   #0,d0
    14.         move.w  ($FFFFFF82).w,d0
    15.         move.w  d0,d1
    16.         move.l  #$62100003,d4; THIS LINE HAS TO BE EDITED
    17.         lsl.w   #7,d0
    18.         swap    d0
    19.         add.l   d0,d4
    20.         lea (LevelMenuText).l,a1
    21.         lsl.w   #3,d1
    22.         move.w  d1,d0
    23.         add.w   d1,d1
    24.         add.w   d0,d1
    25.         adda.w  d1,a1
    26.         move.w  #$C680,d3
    27.         move.l  d4,4(a6)
    28.         bsr.w   LevSel_ChgLine
    29.         move.w  #$E680,d3
    30.         cmpi.w  #$14,($FFFFFF82).w; THIS LINE HAS TO BE EDITED
    31.         bne.s   loc_3550
    32.         move.w  #$C680,d3
    33.  
    34. loc_3550:
    35.         move.l  #$6C300003,($C00004).l; screen  position (sound test); THIS LINE HAS TO BE EDITED
    36.         move.w  ($FFFFFF84).w,d0
    37.         addi.w  #$80,d0
    38.         move.b  d0,d2
    39.         lsr.b   #4,d0
    40.         bsr.w   LevSel_ChgSnd
    41.         move.b  d2,d0
    42.         bsr.w   LevSel_ChgSnd
    43.         rts
    44. ; End of function LevSelTextLoad
    Now, you see two more #$14 that need to be changed to #$15, but there is more to do: change the parameter in move.l #$62100003,d4 and in move.l #$6C300003,($C00004).l

    That parameter express the coordinates on the screen where the text is loaded. The first one ($62100003), which appears twice, refers to the main block of text (all except the sound test number); the second one ($6C300003)) refers to the sound test number. You actually have two chances here: edit the $62100003 and move all the text up by one row, or edit the $6C300003 and move the sound test number down one row. To do this, remember that each row is 8 pixels high. So, in the first case, you have to change $62100003 to $61900003 (both of them!); in the second case, you have to change the $6C300003 to $6CB00003. That, or you can experiment new placements that better suit your imagination. So, straight from my hack, here is the result (minus the special stage selector, which is a completely different matter):
    [​IMG]

    Have fun!
     
  5. Tweaker

    Tweaker

    Misfits
    12,389
    0
    0
    Alternatively, download the Sonic 1 Japanese ROM. =P

    Nice to see someone understand this process, though. It's not terribly complicated—in fact, it's the most basic of the basic—but if it's what helps you understand things, go for it. :)
     
  6. STHX

    STHX

    SEGAAAAAAAAA?!? Member
    1,796
    0
    16
    The world of Trophies
    Sonic In Mushroom Kingdom
    This is the very first programming/Hex thing (The very first ASM thing I did was the succeful importing of my midframes in Sonic 1) I did in my whole life, and it helped me understanding the Sonic Engine a lot more.
     
  7. Overlord

    Overlord

    ...did we just switch realities? Moderator
    The funny thing is, that's exactly what I was thinking, that and "or use STE to do it". However that wouldn't do the pointers or work on a split assembly, sooo... =P
     
  8. nineko

    nineko

    I am the Holy Cat Tech Member
    There is Esrael Sonic Editor, which can fix the pointers as well. But it doesn't work on a split disassembly. A workaround for this would be to edit a clean rom and then split it.
     
  9. STHX

    STHX

    SEGAAAAAAAAA?!? Member
    1,796
    0
    16
    The world of Trophies
    Sonic In Mushroom Kingdom
    Anything that can be edited with ESE can then be imported to a disassembly if you split the edited ROM (Minus the Zone Title Cards, which, in the disassembly, have the mapping in ASM format and, thus, can't be imported).
    Or, this would be true if ESE actually saved my Special Stage Layouts.
    Ironically, I learned how to change the Level Select Menu Text, the Level Pointers, the Title Cards (both the Zones and the Credits ones without using SonMapED), the Level Order, the Level Layout and the palette (Well, with a little help from SonED2) directly from a disassembly by myself (Things that I could import with ease after splitting the edited ROM), but I can't change the SS Layouts in my hack because:
    A - I still can't do it by myself.
    B - ESE do not save them in the ROM.
    And so, if I can't find a solution, the hack I'm working on will always have the original SS Layout (This is important for me because the Sonic 1 Special Stage is my favorite SS ever).


    On a side note, I noticed this mini-guide was added to the SCHG How-tos. This made me very proud, because I didn't thought this was enought worthy for that (Thanks Nineko).
     
  10. Thehackery

    Thehackery

    Pending Approvals
    20
    0
    0
    Newcastle
    Sonic The Hedgehog 1.1 and Sonic The Hedgehog 2.1
    Wierd, ESE II works for my special stages. (Though it didn't at first) I'm just disappointed that only the one-way blocks, the scrapped life icons, walls, the dreaded GOAL blocks, and most importantly, the Chaos Emeralds work.