Actions

SCHG How-to

Difference between revisions of "Extend the level index past $10 in Sonic 2"

From Sonic Retro

m (Branch fixes: formatting)
(Blanked the page)
Line 1: Line 1:
''(Original guide by [[kram]], current revision that fixes major bugs and extends properly by [[GARY 'M 9]])''
 
''(Updated again by [[kram]], adding back custom titlecard mappings howto, due to guide being unfinished, thus finally fixing the "ZONE ZONE" bug.  Replace all the empty levels with your new ones.)''
 
  
'''WARNING:'''  Unless you are working with Xenowhirl's 2007 Sonic 2 disassembly, I strongly recommend you [[SCHG_How-to:Port_Sonic_1's_Sound_Driver_to_Sonic_2|port the Sonic 1 sound driver]] first before proceeding.  A lot of major data shifting will occur in this tutorial and it '''will''' make the rom size a '''lot''' bigger than it was before.  This '''will''' break the sonic2 or even sonic2 beta sound driver, thus so you definitely want the sonic 1 sound driver due to the fact that it can take the shifting and still work properly. However, if you are using Xenowhirl's 2007 Sonic 2 disassembly, it is not necessary to port any other sound driver, since that uses disassembled Z80 code which automatically references the correct locations and can thus work properly even if there are massive location shifts.
 
 
You probably noticed that all the indexes in the game stop at $10 and when you try to extend it, by extending the MLLB, you get weird glitches or even crashes, that is because you haven't extended all the indexes that need to be extended.
 
 
==Extending the Titlecard index==
 
First we find:
 
 
<asm>
 
Obj34_TitleCardData:
 
dc.b    8,    0, $80, $1B
 
dc.w $240, $120, $B8
 
 
dc.b  $A,  $11, $40, $1C
 
dc.w  $28, $148, $D0
 
 
dc.b  $C,  $12, $18, $1C
 
dc.w  $68, $188, $D0
 
 
dc.b    2,    0,  0,  0
 
dc.w    0,    0,  0
 
 
dc.b    4,  $15, $48,  8
 
dc.w $2A8, $168,$120
 
 
dc.b    6,  $16,  8, $15
 
dc.w  $80,  $F0, $F0
 
</asm>
 
 
and change it to:
 
<asm>
 
Obj34_TitleCardData:
 
dc.b    8,    0, $80, $1B ; this is the zone string start index and  placement
 
dc.w $240, $120, $B8
 
 
dc.b  $A, $21, $40, $1C ; "ZONE" string index number and placement
 
dc.w  $28, $148, $D0
 
 
dc.b  $C,  $22, $18, $1C ; act number start index and placement
 
dc.w  $68, $188, $D0
 
 
dc.b    2,    0,  0,  0 ; this part of the titlecard is totally unknown, colored backdrop possibly
 
dc.w    0,    0,  0
 
 
dc.b    4,  $25, $48,  8 ; red strip edge index and placement
 
dc.w $2A8, $168,$120
 
 
dc.b    6,  $26,  8, $15 ; red "Sonic The Hedgehog" string and placement
 
dc.w  $80,  $F0, $F0
 
</asm>
 
 
next, find:
 
<asm>
 
    jsr      sub_13D10(pc)
 
    move.b    (Current_Zone).w,d0
 
    cmpi.b    #$10,d0
 
    beq.s    BranchTo9_DeleteObject
 
    cmpi.b    #6,d0
 
    beq.s    BranchTo9_DeleteObject
 
    cmpi.b    #$E,d0
 
    beq.s    BranchTo9_DeleteObject
 
    move.b    (Current_Act).w,d1
 
    addi.b    #$12,d1
 
    cmpi.b    #5,d0
 
    bne.s    loc_13E18
 
    moveq    #$14,d1
 
</asm>
 
 
and change it to:
 
<asm>
 
    jsr      sub_13D10(pc)
 
    move.b    (Current_Zone).w,d0
 
    cmpi.b    #$10,d0
 
    beq.s    BranchTo9_DeleteObject
 
    cmpi.b    #6,d0
 
    beq.s    BranchTo9_DeleteObject
 
    cmpi.b    #$E,d0
 
    beq.s    BranchTo9_DeleteObject
 
    move.b    (Current_Act).w,d1
 
    addi.b    #$22,d1                  ; Act number mappings (Act 1)
 
    cmpi.b    #5,d0
 
    bne.s    loc_13E18
 
    moveq    #$24,d1                  ; Act number mappings (Act 3).  Used for drawing MTZ (0x05) titlecard only
 
</asm>
 
 
Now we have the offset data of where to load the mappings for the titlecards shifted so that we can now start working on updating the mappings and not have that strange "ZONE ZONE" bug that [[GARY 'M 9]] left behind and I intended to correct.
 
 
Next, another thing I wanted to see others correct.  this time, I will explain why I changed byte_15820 into a 16-bit relative offset index as opposed to it staying as a byte-by-byte relative offset that does not point correctly, and to appropriately handle the string data in word_15832, as well as allow that string data to be properly represented.  This time I will make it even clearer too.
 
 
Next off, in this part of the hack the first thing before converting to a better manageable datatype, we want to replace the byte_15820 handler with a better one.
 
 
look for:
 
<asm>
 
; loc_157D2:
 
LoadTitleCard:
 
bsr.s LoadTitleCard0
 
moveq #0,d0
 
move.b (Current_Zone).w,d0
 
move.b byte_15820(pc,d0.w),d0
 
lea word_15832(pc),a0
 
lea (a0,d0.w),a0
 
move.l #$7BC00002,d0
 
</asm>
 
 
and we want to replace it with:
 
<asm>
 
; loc_157D2:
 
LoadTitleCard:
 
bsr.s LoadTitleCard0
 
moveq #0,d0
 
move.b (Current_Zone).w,d0
 
add.w d0,d0
 
move.w Off_Titlecardtext(pc,d0.w),d0
 
lea Off_Titlecardtext(pc,d0.w),a0
 
move.l #$7BC00002,d0
 
</asm>
 
 
That takes care of the loader, now time to update the string data.
 
 
find:
 
<asm>
 
; unknown
 
byte_15820:
 
dc.b  0,  0,  0,  0,$10,$10,$98,$20,$2C,  0,$3C,$46,$58,$68,$A8,$7A
 
dc.b $8A,  0 ; 16
 
; unknown
 
word_15832:
 
dc.w $2A06,$3804,    4,$2604, $C04,$1804,$1C02,$FFFF
 
dc.w $2A06,$4004,$3804,$3004,$2604,$1C02,$3C04,$FFFF; 8
 
dc.w $1804,$1C02,$2604,$4004,$3004,$FFFF,$1804,$1C02; 16
 
dc.w  $C04,$3004,    4,$2604, $804,$FFFF,$1C02,$2604; 24
 
dc.w  $804,    4,$FFFF,$2A06,$5604,$3C04,$4004,$1C02; 32
 
dc.w  $804,    4,$4804,$FFFF, $804,    4,$3C04,$1C02; 40
 
dc.w $1404,$1804,$4004,$FFFF, $804,$1804,$2A06,$1C02; 48
 
dc.w 4,$2604,$3004,$4004,$FFFF,    4,$3404,$4404; 56
 
dc.w $4004,$1C02, $804,$3804,$FFFF,$3C04,$2204,$5604; 64
 
dc.w  $804,$1804,    4,$FFFF,$4C06,$1C02,$1404,$1004; 72
 
dc.w $3804,$4004,$3C04,$FFFF, $C04,    4,$4004,$1804; 80
 
dc.w $1404,$FFFF ; 88
 
</asm>
 
 
and replace it with:
 
<asm>
 
;byte_15820
 
Off_Titlecardtext:
 
dc.w  Text_EHZ-Off_Titlecardtext ; EHZ Titlecard 00
 
dc.w  Text_LZ-Off_Titlecardtext  ;  LZ Titlecard 01
 
dc.w  Text_WZ-Off_Titlecardtext  ;  WZ Titlecard 02
 
dc.w  Text_DHZ-Off_Titlecardtext ; DHZ Titlecard 03
 
dc.w  Text_MTZ-Off_Titlecardtext ; MTZ Titlecard 04
 
dc.w  Text_MTZ-Off_Titlecardtext ; MTZ Titlecard 05
 
dc.w  Text_WFZ-Off_Titlecardtext ; WFZ Titlecard 06
 
dc.w  Text_HTZ-Off_Titlecardtext ; HTZ Titlecard 07
 
dc.w  Text_HPZ-Off_Titlecardtext ; HPZ Titlecard 08
 
dc.w  Text_GCZ-Off_Titlecardtext ; GCZ Titlecard 09
 
dc.w  Text_OOZ-Off_Titlecardtext ; OOZ Titlecard 0A
 
dc.w  Text_MCZ-Off_Titlecardtext ; MCZ Titlecard 0B
 
dc.w  Text_CNZ-Off_Titlecardtext ; CNZ Titlecard 0C
 
dc.w  Text_CPZ-Off_Titlecardtext ; CPZ Titlecard 0D
 
dc.w  Text_DEZ-Off_Titlecardtext ; DEZ Titlecard 0E
 
dc.w  Text_ARZ-Off_Titlecardtext ; ARZ Titlecard 0F
 
dc.w  Text_SCZ-Off_Titlecardtext ; SCZ Titlecard 10
 
dc.w  Text_NZ-Off_Titlecardtext  ;  NZ Titlecard 11
 
dc.w  Text_NZ-Off_Titlecardtext  ;  NZ Titlecard 12
 
dc.w  Text_NZ-Off_Titlecardtext  ;  NZ Titlecard 13
 
dc.w  Text_NZ-Off_Titlecardtext  ;  NZ Titlecard 14
 
dc.w  Text_NZ-Off_Titlecardtext  ;  NZ Titlecard 15
 
dc.w  Text_NZ-Off_Titlecardtext  ;  NZ Titlecard 16
 
dc.w  Text_NZ-Off_Titlecardtext  ;  NZ Titlecard 17
 
dc.w  Text_NZ-Off_Titlecardtext  ;  NZ Titlecard 18
 
dc.w  Text_NZ-Off_Titlecardtext  ;  NZ Titlecard 19
 
dc.w  Text_NZ-Off_Titlecardtext  ;  NZ Titlecard 1A
 
dc.w  Text_NZ-Off_Titlecardtext  ;  NZ Titlecard 1B
 
dc.w  Text_NZ-Off_Titlecardtext  ;  NZ Titlecard 1C
 
dc.w  Text_NZ-Off_Titlecardtext  ;  NZ Titlecard 1D
 
dc.w  Text_NZ-Off_Titlecardtext  ;  NZ Titlecard 1E
 
dc.w  Text_NZ-Off_Titlecardtext  ;  NZ Titlecard 1F
 
dc.w  Text_NZ-Off_Titlecardtext  ;  NZ Titlecard 20
 
 
;word_15832
 
Text_EHZ: dc.b $2A,$38,$00,$26,$0C,$18,$1C ; 'MRALDHI'
 
  dc.w $FFFF ; '<EOF>'
 
Text_LZ:  dc.b $26,$00,$04,$56,$38,$1C,$40,$18 ; 'LABYRITH'
 
  dc.w $FFFF ; '<EOF>'
 
Text_WZ:  dc.b $4C,$0C ; 'WD'
 
  dc.w $FFFF ; '<EOF>'
 
Text_DHZ: dc.b $0C,$44,$3C,$40,$18,$1C,$26 ; 'DUSTHIL'
 
  dc.w $FFFF ; '<EOF>'
 
Text_MTZ: dc.b $2A,$40,$38,$30,$26,$1C,$3C ; 'MTRPLIS'
 
  dc.w $FFFF ; '<EOF>'
 
Text_WFZ: dc.b $4C,$1C,$14,$10,$38,$40,$3C ; 'WIGFRTS'
 
  dc.w $FFFF ; '<EOF>'
 
Text_HTZ: dc.b $18,$1C,$26,$40,$30 ; 'HILTP'
 
  dc.w $FFFF ; '<EOF>'
 
Text_HPZ: dc.b $18,$1C,$0C,$30,$00,$26,$08 ; 'HIDPALCE'
 
  dc.w $FFFF ; '<EOF>'
 
Text_GCZ: dc.b $14,$08,$1C,$0C,$40,$56 ; 'GCIDTY'
 
  dc.w $FFFF ; '<EOF>'
 
Text_OOZ: dc.b $1C,$26,$08,$00 ; 'ILCAN'
 
  dc.w $FFFF ; '<EOF>'
 
Text_MCZ: dc.b $2A,$56,$3C,$40,$1C,$08,$00,$48 ; 'MYSTICAV'
 
  dc.w $FFFF ; '<EOF>'
 
Text_CNZ: dc.b $08,$00,$3C,$1C,$14,$18,$40 ; 'CASIGHT'
 
  dc.w $FFFF ; '<EOF>'
 
Text_CPZ: dc.b $08,$18,$2A,$1C,$00,$26,$30,$40 ; 'CHMICALPT'
 
  dc.w $FFFF ; '<EOF>'
 
Text_DEZ: dc.b $0C,$00,$40,$18,$14 ; 'DATHG'
 
  dc.w $FFFF ; '<EOF>'
 
Text_ARZ: dc.b $00,$34,$44,$40,$1C,$08,$38 ; 'AQUTICR'
 
  dc.w $FFFF ; '<EOF>'
 
Text_SCZ: dc.b $3C,$22,$56,$08,$18,$00,$3C ; 'SKYCHAS'
 
  dc.w $FFFF ; '<EOF>'
 
Text_NZ:  dc.b $4C ; 'W'
 
  dc.w $FFFF ; '<EOF>'
 
</asm>
 
 
This extends the title card index to $20, adds titlecards for Wood Zone, Labyrinth Zone, Dust Hill Zone, Genocide City Zone, and an empty New Zone titlecard for every single level above SCZ, compacts the titlecard text data for all titlecards, and makes it more easier to manage.  you will be wondering probably what to do with the mappings.  Well that is what is next.
 
 
find:
 
<asm>
 
; -------------------------------------------------------------------------------
 
; sprite mappings
 
; -------------------------------------------------------------------------------
 
Obj34_MapUnc_147BA: BINCLUDE "mappings/sprite/obj34.bin"
 
; -------------------------------------------------------------------------------
 
</asm>
 
 
and replace it with:
 
<asm>
 
; -------------------------------------------------------------------------------
 
; sprite mappings
 
; -------------------------------------------------------------------------------
 
Obj34_MapUnc_147BA: dc.w Titlecard_EHZ-Obj34_MapUnc_147BA ; EHZ 00
 
    dc.w Titlecard_LZ-Obj34_MapUnc_147BA  ; LZ  01
 
    dc.w Titlecard_WZ-Obj34_MapUnc_147BA  ; WZ  02
 
    dc.w Titlecard_DHZ-Obj34_MapUnc_147BA ; DHZ 03
 
    dc.w Titlecard_MTZ-Obj34_MapUnc_147BA ; MTZ 04
 
    dc.w Titlecard_MTZ-Obj34_MapUnc_147BA ; MTZ 05
 
    dc.w Titlecard_WFZ-Obj34_MapUnc_147BA ; WFZ 06
 
    dc.w Titlecard_HTZ-Obj34_MapUnc_147BA ; HTZ 07
 
    dc.w Titlecard_HPZ-Obj34_MapUnc_147BA ; HPZ 08
 
    dc.w Titlecard_GCZ-Obj34_MapUnc_147BA ; GCZ 09
 
    dc.w Titlecard_OOZ-Obj34_MapUnc_147BA ; OOZ 0A
 
    dc.w Titlecard_MCZ-Obj34_MapUnc_147BA ; MCZ 0B
 
    dc.w Titlecard_CNZ-Obj34_MapUnc_147BA ; CNZ 0C
 
    dc.w Titlecard_CPZ-Obj34_MapUnc_147BA ; CPZ 0D
 
    dc.w Titlecard_DEZ-Obj34_MapUnc_147BA ; DEZ 0E
 
    dc.w Titlecard_ARZ-Obj34_MapUnc_147BA ; ARZ 0F
 
    dc.w Titlecard_SCZ-Obj34_MapUnc_147BA ; SCZ 10
 
    dc.w Titlecard_NZ-Obj34_MapUnc_147BA  ; NZ  11
 
    dc.w Titlecard_NZ-Obj34_MapUnc_147BA  ; NZ  12
 
    dc.w Titlecard_NZ-Obj34_MapUnc_147BA  ; NZ  13
 
    dc.w Titlecard_NZ-Obj34_MapUnc_147BA  ; NZ  14
 
    dc.w Titlecard_NZ-Obj34_MapUnc_147BA  ; NZ  15
 
    dc.w Titlecard_NZ-Obj34_MapUnc_147BA  ; NZ  16
 
    dc.w Titlecard_NZ-Obj34_MapUnc_147BA  ; NZ  17
 
    dc.w Titlecard_NZ-Obj34_MapUnc_147BA  ; NZ  18
 
    dc.w Titlecard_NZ-Obj34_MapUnc_147BA  ; NZ  19
 
    dc.w Titlecard_NZ-Obj34_MapUnc_147BA  ; NZ  1A
 
    dc.w Titlecard_NZ-Obj34_MapUnc_147BA  ; NZ  1B
 
    dc.w Titlecard_NZ-Obj34_MapUnc_147BA  ; NZ  1C
 
    dc.w Titlecard_NZ-Obj34_MapUnc_147BA  ; NZ  1D
 
    dc.w Titlecard_NZ-Obj34_MapUnc_147BA  ; NZ  1E
 
    dc.w Titlecard_NZ-Obj34_MapUnc_147BA  ; NZ  1F
 
    dc.w Titlecard_NZ-Obj34_MapUnc_147BA  ; NZ  20
 
    dc.w T_ZONE-Obj34_MapUnc_147BA        ; "ZONE"
 
    dc.w T_ACT1-Obj34_MapUnc_147BA        ; "1"
 
    dc.w T_ACT2-Obj34_MapUnc_147BA        ; "2"
 
    dc.w T_ACT3-Obj34_MapUnc_147BA        ; "3"
 
    dc.w T_STH-Obj34_MapUnc_147BA        ; "SONIC THE HEDGEHOG"
 
    dc.w T_STRIPEDGE-Obj34_MapUnc_147BA  ; ">"
 
 
Titlecard_EHZ:     dc.w $b ; number of letters
 
    dc.w $0005, $8580, $82C0, $FFC0 ;E
 
    dc.w $0009, $85DE, $82EF, $FFD0 ;M
 
    dc.w $0005, $8580, $82C0, $FFE8 ;E
 
    dc.w $0005, $85E4, $82F2, $FFF8 ;R
 
    dc.w $0005, $85E8, $82F4, $0008 ;A
 
    dc.w $0005, $85EC, $82F6, $0018 ;L
 
    dc.w $0005, $85F0, $82F8, $0028 ;D
 
 
    dc.w $0005, $85F4, $82FA, $0048 ;H
 
    dc.w $0001, $85F8, $82F2, $0058 ;I
 
    dc.w $0005, $85EC, $82F6, $0060 ;L
 
    dc.w $0005, $85EC, $82F6, $0070 ;L
 
 
Titlecard_LZ:     dc.w $9 ; number of letters
 
    dc.w $0005, $85DE, $82EF, $FFE8 ;L
 
    dc.w $0005, $85E2, $82F1, $FFF8 ;A
 
    dc.w $0005, $85E6, $82F3, $0008 ;B
 
    dc.w $0005, $85EA, $82F5, $0018 ;Y
 
    dc.w $0005, $85EE, $82F7, $0028 ;R
 
    dc.w $0001, $85F2, $82F9, $0038 ;I
 
    dc.w $0005, $8584, $82C2, $0040 ;N
 
    dc.w $0005, $85F4, $82FA, $0050 ;T
 
    dc.w $0005, $85F8, $82FC, $0060 ;H
 
 
Titlecard_WZ:     dc.w $4 ; number of letters
 
    dc.w $0009, $85DE, $82EF, $0008 ;W
 
    dc.w $0005, $8588, $82C4, $0010 ;O
 
    dc.w $0005, $8588, $82C4, $0020 ;O
 
    dc.w $0005, $85E4, $82F2, $0030 ;D
 
 
 
Titlecard_DHZ:     dc.w $8 ; number of letters
 
    dc.w $0005, $85DE, $82EF, $FFE8 ;D
 
    dc.w $0005, $85E2, $82F1, $FFF8 ;U
 
    dc.w $0005, $85E6, $82F3, $0008 ;S
 
    dc.w $0005, $85EA, $82F5, $0018 ;T
 
 
    dc.w $0005, $85EE, $82F7, $0038 ;H
 
    dc.w $0001, $85F2, $82F9, $0048 ;I
 
    dc.w $0005, $85F4, $82FA, $0050 ;L
 
    dc.w $0005, $85F4, $82FA, $0060 ;L
 
 
Titlecard_MTZ:     dc.w $a ; number of letters
 
    dc.w $0009, $85DE, $82EF, $FFE8 ;M
 
    dc.w $0005, $8580, $82C0, $FFF8 ;E
 
    dc.w $0005, $85E4, $82F2, $0008 ;T
 
    dc.w $0005, $85E8, $82F4, $0018 ;R
 
    dc.w $0005, $8588, $82C4, $0028 ;O
 
    dc.w $0005, $85EC, $82F6, $0038 ;P
 
    dc.w $0005, $8588, $82C4, $0048 ;O
 
    dc.w $0005, $85F0, $82F8, $0058 ;L
 
    dc.w $0001, $85F4, $82FA, $0068 ;I
 
    dc.w $0005, $85F6, $82FB, $0070 ;S
 
 
Titlecard_WFZ:     dc.w $c ; number of letters
 
    dc.w $0009, $85DE, $82EF, $FFB0 ;W
 
    dc.w $0001, $85E4, $82F2, $FFC8 ;I
 
    dc.w $0005, $8584, $82C2, $FFD0 ;N
 
    dc.w $0005, $85E6, $82F3, $FFE0 ;G
 
 
    dc.w $0005, $85EA, $82F5, $0000 ;F
 
    dc.w $0005, $8588, $82C4, $0010 ;O
 
    dc.w $0005, $85EE, $82F7, $0020 ;R
 
    dc.w $0005, $85F2, $82F9, $0030 ;T
 
    dc.w $0005, $85EE, $82F7, $0040 ;R
 
    dc.w $0005, $8580, $82C0, $0050 ;E
 
    dc.w $0005, $85F6, $82FB, $0060 ;S
 
    dc.w $0005, $85F6, $82FB, $0070 ;S
 
 
Titlecard_HTZ:     dc.w $7 ; number of letters
 
    dc.w $0005, $85DE, $82EF, $0008 ;H
 
    dc.w $0001, $85E2, $82F1, $0018 ;I
 
    dc.w $0005, $85E4, $82F2, $0020 ;L
 
    dc.w $0005, $85E4, $82F2, $0030 ;L
 
 
    dc.w $0005, $85E8, $82F4, $0050 ;T
 
    dc.w $0005, $8588, $82C4, $0060 ;O
 
    dc.w $0005, $85EC, $82F6, $0070 ;P
 
 
Titlecard_HPZ:     dc.w $c ; number of letters
 
    dc.w $0005, $85DE, $82EF, $FFB8 ;H
 
    dc.w $0001, $85E2, $82F1, $FFC8 ;I
 
    dc.w $0005, $85E4, $82F2, $FFD0 ;D
 
    dc.w $0005, $85E4, $82F2, $FFE0 ;D
 
    dc.w $0005, $8580, $82C0, $FFF0 ;E
 
    dc.w $0005, $8584, $82C4, $0000 ;N
 
 
    dc.w $0005, $85E8, $82F4, $0020 ;P
 
    dc.w $0005, $85EC, $82F6, $0030 ;A
 
    dc.w $0005, $85F0, $82F8, $0040 ;L
 
    dc.w $0005, $85EC, $82F6, $0050 ;A
 
    dc.w $0005, $85F4, $82FA, $0060 ;C
 
    dc.w $0005, $8580, $82C0, $0070 ;E
 
 
Titlecard_GCZ:     dc.w $c ; number of letters
 
    dc.w $0005, $85DE, $82EF, $FFB8 ;G
 
    dc.w $0005, $8580, $82C0, $FFC8 ;E
 
    dc.w $0005, $8584, $82C2, $FFD8 ;N
 
    dc.w $0005, $8588, $82C4, $FFE8 ;O
 
    dc.w $0005, $85E2, $82F1, $FFF8 ;C
 
    dc.w $0001, $85E6, $82F3, $0008 ;I
 
    dc.w $0005, $85E8, $82F4, $0010 ;D
 
    dc.w $0005, $8580, $82C0, $0020 ;E
 
 
    dc.w $0005, $85E2, $82F1, $0040 ;C
 
    dc.w $0001, $85E6, $82F3, $0050 ;I
 
    dc.w $0005, $85EC, $82F6, $0058 ;T
 
    dc.w $0005, $85F0, $82F8, $0068 ;Y
 
 
Titlecard_OOZ:     dc.w $8 ; number of letters
 
    dc.w $0005, $8588, $82C4, $FFF8 ;O
 
    dc.w $0001, $85DE, $82EF, $0008 ;I
 
    dc.w $0005, $85E0, $82F0, $0010 ;L
 
 
    dc.w $0005, $8588, $82C4, $0030 ;O
 
    dc.w $0005, $85E4, $82F2, $0040 ;C
 
    dc.w $0005, $8580, $82C0, $0050 ;E
 
    dc.w $0005, $85E8, $82F4, $0060 ;A
 
    dc.w $0005, $8584, $82C2, $0070 ;N
 
 
Titlecard_MCZ:     dc.w $a ; number of letters
 
    dc.w $0009, $85DE, $82EF, $FFD0 ;M
 
    dc.w $0005, $85E4, $82F2, $FFE8 ;Y
 
    dc.w $0005, $85E8, $82F4, $FFF8 ;S
 
    dc.w $0005, $85EC, $82F6, $0008 ;T
 
    dc.w $0001, $85F0, $82F8, $0018 ;I
 
    dc.w $0005, $85F2, $82F9, $0020 ;C
 
 
    dc.w $0005, $85F2, $82F9, $0040 ;C
 
    dc.w $0005, $85F6, $82FB, $0050 ;A
 
    dc.w $0005, $85FA, $82FD, $0060 ;V
 
    dc.w $0005, $8580, $82C0, $0070 ;E
 
 
Titlecard_CNZ:     dc.w $b ; number of letters
 
    dc.w $0005, $85DE, $82EF, $FFD0 ;C
 
    dc.w $0005, $85E2, $82F1, $FFE0 ;A
 
    dc.w $0005, $85E6, $82F3, $FFF0 ;S
 
    dc.w $0001, $85EA, $82F5, $0000 ;I
 
    dc.w $0005, $8584, $82C2, $0008 ;N
 
    dc.w $0005, $8588, $82C4, $0018 ;O
 
 
    dc.w $0005, $8584, $82C2, $0038 ;N
 
    dc.w $0001, $85EA, $82F5, $0048 ;I
 
    dc.w $0005, $85EC, $82F6, $0050 ;G
 
    dc.w $0005, $85F0, $82F8, $0060 ;H
 
    dc.w $0005, $85F4, $82FA, $0070 ;T
 
 
Titlecard_CPZ:     dc.w $d ; number of letters
 
    dc.w $0005, $85DE, $82EF, $FFA0 ;C
 
    dc.w $0005, $85E2, $82F1, $FFB0 ;H
 
    dc.w $0005, $8580, $82C0, $FFC0 ;E
 
    dc.w $0009, $85E6, $82F3, $FFD0 ;M
 
    dc.w $0001, $85EC, $82F6, $FFE8 ;I
 
    dc.w $0005, $85DE, $82EF, $FFF0 ;C
 
    dc.w $0005, $85EE, $82F7, $0000 ;A
 
    dc.w $0005, $85F2, $82F9, $0010 ;L
 
 
    dc.w $0005, $85F6, $82FB, $0030 ;P
 
    dc.w $0005, $85F2, $82F9, $0040 ;L
 
    dc.w $0005, $85EE, $82F7, $0050 ;A
 
    dc.w $0005, $8584, $82C2, $0060 ;N
 
    dc.w $0005, $85FA, $82FD, $0070 ;T
 
 
Titlecard_DEZ:     dc.w $8 ; number of letters
 
    dc.w $0005, $85DE, $82EF, $FFF0 ;D
 
    dc.w $0005, $8580, $82C0, $0000 ;E
 
    dc.w $0005, $85E2, $82F1, $0010 ;A
 
    dc.w $0005, $85E6, $82F3, $0020 ;T
 
    dc.w $0005, $85EA, $82F5, $0030 ;H
 
 
    dc.w $0005, $8580, $82C0, $0050 ;E
 
    dc.w $0005, $85EE, $82F7, $0060 ;G
 
    dc.w $0005, $85EE, $82F7, $0070 ;G
 
 
Titlecard_ARZ:     dc.w $c ; number of letters
 
    dc.w $0005, $85DE, $82EF, $FFD0 ;A
 
    dc.w $0005, $85E2, $82F1, $FFE0 ;Q
 
    dc.w $0005, $85E6, $82F3, $FFF0 ;U
 
    dc.w $0005, $85DE, $82EF, $0000 ;A
 
    dc.w $0005, $85EA, $82F5, $0010 ;T
 
    dc.w $0001, $85EE, $82F7, $0020 ;I
 
    dc.w $0005, $85F0, $82F8, $0028 ;C
 
 
    dc.w $0005, $85F4, $82FA, $0048 ;R
 
    dc.w $0005, $85E6, $82F3, $0058 ;U
 
    dc.w $0001, $85EE, $82F7, $0068 ;I
 
    dc.w $0005, $8584, $82C2, $0070 ;N
 
 
Titlecard_SCZ:     dc.w $8 ; number of letters
 
    dc.w $0005, $85DE, $82EF, $FFF0 ;S
 
    dc.w $0005, $85E2, $82F1, $0000 ;K
 
    dc.w $0005, $85E6, $82F3, $0010 ;Y
 
 
    dc.w $0005, $85EA, $82F5, $0030 ;C
 
    dc.w $0005, $85EE, $82F7, $0040 ;H
 
    dc.w $0005, $85F2, $82F7, $0050 ;A
 
    dc.w $0005, $85DE, $82EF, $0060 ;S
 
    dc.w $0005, $8580, $82C0, $0070 ;E
 
 
Titlecard_NZ:     dc.w $3 ; number of letters
 
    dc.w $0005, $8584, $82C2, $0048 ;N
 
    dc.w $0005, $8580, $82C0, $0058 ;E
 
    dc.w $0009, $85DE, $82EF, $0068 ;W
 
 
T_ZONE:     dc.w $4 ; number of letters
 
    dc.w $0005, $858C, $82C6, $0000 ;Z
 
    dc.w $0005, $8588, $82C4, $0010 ;O
 
    dc.w $0005, $8584, $82C2, $0020 ;N
 
    dc.w $0005, $8580, $82C0, $0030 ;E
 
 
 
T_ACT1:             dc.w $1 ; number of letters
 
    dc.w $0007, $A590, $A2C8, $0000 ;1
 
 
T_ACT2:     dc.w $1 ; number of letters
 
    dc.w $000B, $A598, $A2CC, $0000 ;2
 
 
T_ACT3:     dc.w $1 ; number of letters
 
    dc.w $000B, $A5A4, $A2D2, $0000 ;3
 
 
T_STH:          dc.w $5 ; number of letters
 
    dc.w $000D, $85B0, $82DE, $FFB8 ;SONI
 
    dc.w $000D, $85B8, $82DC, $FFD8 ;C TH
 
    dc.w $000D, $85C0, $82E0, $FFF8 ;E HE
 
    dc.w $000D, $85C8, $82E4, $0018 ;DGEH
 
    dc.w $0005, $85D0, $82E8, $0038 ;OG
 
 
T_STRIPEDGE:     dc.w $7 ; number of letters
 
    dc.w $9003, $85D4, $82EA, $0000 ;>
 
    dc.w $B003, $85D4, $82EA, $0000 ;>
 
    dc.w $D003, $85D4, $82EA, $0000 ;>
 
    dc.w $F003, $85D4, $82EA, $0000 ;>
 
    dc.w $1003, $85D4, $82EA, $0000 ;>
 
    dc.w $3003, $85D4, $82EA, $0000 ;>
 
    dc.w $5003, $85D4, $82EA, $0000 ;>
 
 
; -------------------------------------------------------------------------------
 
</asm>
 
 
==Extending the cycling palette information==
 
Now we want to locate:
 
<asm>
 
; off_19F4:
 
PalCycle:
 
dc.w PalCycle_EHZ - PalCycle ; 0
 
dc.w PalCycle_Null - PalCycle ; 1
 
dc.w PalCycle_Level2 - PalCycle ; 2
 
dc.w PalCycle_Null - PalCycle ; 3
 
dc.w PalCycle_MTZ - PalCycle ; 4
 
dc.w PalCycle_MTZ - PalCycle ; 5
 
dc.w PalCycle_WFZ - PalCycle ; 6
 
dc.w PalCycle_HTZ - PalCycle ; 7
 
dc.w PalCycle_HPZ - PalCycle ; 8
 
dc.w PalCycle_Null - PalCycle ; 9
 
dc.w PalCycle_OOZ - PalCycle ; 10
 
dc.w PalCycle_MCZ - PalCycle ; 11
 
dc.w PalCycle_CNZ - PalCycle ; 12
 
dc.w PalCycle_CPZ - PalCycle ; 13
 
dc.w PalCycle_CPZ - PalCycle ; 14
 
dc.w PalCycle_ARZ - PalCycle ; 15
 
dc.w PalCycle_WFZ - PalCycle ; 16
 
</asm>
 
 
and replace it with:
 
<asm>
 
; off_19F4:
 
PalCycle:
 
dc.w PalCycle_EHZ - PalCycle ; 00
 
dc.w PalCycle_Null - PalCycle ; 01
 
dc.w PalCycle_Level2 - PalCycle ; 02
 
dc.w PalCycle_Null - PalCycle ; 03
 
dc.w PalCycle_MTZ - PalCycle ; 04
 
dc.w PalCycle_MTZ - PalCycle ; 05
 
dc.w PalCycle_WFZ - PalCycle ; 06
 
dc.w PalCycle_HTZ - PalCycle ; 07
 
dc.w PalCycle_HPZ - PalCycle ; 08
 
dc.w PalCycle_Null - PalCycle ; 09
 
dc.w PalCycle_OOZ - PalCycle ; 0A
 
dc.w PalCycle_MCZ - PalCycle ; 0B
 
dc.w PalCycle_CNZ - PalCycle ; 0C
 
dc.w PalCycle_CPZ - PalCycle ; 0D
 
dc.w PalCycle_CPZ - PalCycle ; 0E
 
dc.w PalCycle_ARZ - PalCycle ; 0F
 
dc.w PalCycle_WFZ - PalCycle ; 10
 
dc.w PalCycle_Null - PalCycle ; 11
 
dc.w PalCycle_Null - PalCycle ; 12
 
dc.w PalCycle_Null - PalCycle ; 13
 
dc.w PalCycle_Null - PalCycle ; 14
 
dc.w PalCycle_Null - PalCycle ; 15
 
dc.w PalCycle_Null - PalCycle ; 16
 
dc.w PalCycle_Null - PalCycle ; 17
 
dc.w PalCycle_Null - PalCycle ; 18
 
dc.w PalCycle_Null - PalCycle ; 19
 
dc.w PalCycle_Null - PalCycle ; 1A
 
dc.w PalCycle_Null - PalCycle ; 1B
 
dc.w PalCycle_Null - PalCycle ; 1C
 
dc.w PalCycle_Null - PalCycle ; 1D
 
dc.w PalCycle_Null - PalCycle ; 1E
 
dc.w PalCycle_Null - PalCycle ; 1F
 
dc.w PalCycle_Null - PalCycle ; 20
 
</asm>
 
 
That inserts empty slots for the cycling palettes of out new levels.
 
 
==Extending the static palette list==
 
Next we locate:
 
<asm>
 
PalPointers:
 
palptr Pal_SEGA,  Normal_palette, $1F
 
palptr Pal_Title, Normal_palette_line2, 7
 
palptr Pal_UNK1,  Normal_palette, $1F
 
palptr Pal_BGND,  Normal_palette, $F
 
palptr Pal_EHZ,  Normal_palette_line2, $17
 
palptr Pal_EHZ,  Normal_palette_line2, $17
 
palptr Pal_WZ,    Normal_palette_line2, $17
 
palptr Pal_EHZ,  Normal_palette_line2, $17
 
palptr Pal_MTZ,  Normal_palette_line2, $17
 
palptr Pal_MTZ,  Normal_palette_line2, $17
 
palptr Pal_WFZ,  Normal_palette_line2, $17
 
palptr Pal_HTZ,  Normal_palette_line2, $17
 
palptr Pal_HPZ,  Normal_palette_line2, $17
 
palptr Pal_EHZ,  Normal_palette_line2, $17
 
palptr Pal_OOZ,  Normal_palette_line2, $17
 
palptr Pal_MCZ,  Normal_palette_line2, $17
 
palptr Pal_CNZ,  Normal_palette_line2, $17
 
palptr Pal_CPZ,  Normal_palette_line2, $17
 
palptr Pal_DEZ,  Normal_palette_line2, $17
 
palptr Pal_ARZ,  Normal_palette_line2, $17
 
palptr Pal_SCZ,  Normal_palette_line2, $17
 
palptr Pal_HPZ_U, Normal_palette, $1F
 
palptr Pal_CPZ_U, Normal_palette, $1F
 
palptr Pal_ARZ_U, Normal_palette, $1F
 
palptr Pal_SS,    Normal_palette, $17
 
palptr Pal_UNK2,  Normal_palette_line2, 7
 
palptr Pal_UNK3,  Normal_palette_line2, 7
 
palptr Pal_SS1,  Normal_palette_line4, 7
 
palptr Pal_SS2,  Normal_palette_line4, 7
 
palptr Pal_SS3,  Normal_palette_line4, 7
 
palptr Pal_SS4,  Normal_palette_line4, 7
 
palptr Pal_SS5,  Normal_palette_line4, 7
 
palptr Pal_SS6,  Normal_palette_line4, 7
 
palptr Pal_SS7,  Normal_palette_line4, 7
 
palptr Pal_UNK4,  Normal_palette_line4, 7
 
palptr Pal_UNK5,  Normal_palette_line4, 7
 
palptr Pal_UNK6,  Normal_palette_line4, 7
 
palptr Pal_OOZ_B, Normal_palette_line2, 7
 
palptr Pal_Menu,  Normal_palette, $1F
 
palptr Pal_UNK7,  Normal_palette, $1F
 
 
; ----------------------------------------------------------------------------
 
Pal_SEGA:  BINCLUDE "art/palettes/Sega screen.bin" ; SEGA screen palette (Sonic and initial background)
 
Pal_Title: BINCLUDE "art/palettes/Title screen.bin" ; Title screen Palette
 
Pal_UNK1:  BINCLUDE "art/palettes/Unknown 1.bin" ; Unknown palette 1 (leftover S1 level select palette?)
 
Pal_BGND:  BINCLUDE "art/palettes/SonicAndTails.bin" ; "Sonic and Miles" background palette (also usually the primary palette line)
 
Pal_EHZ:  BINCLUDE "art/palettes/EHZ.bin" ; Emerald Hill Zone palette
 
Pal_WZ:    BINCLUDE "art/palettes/Wood Zone.bin" ; Wood Zone palette
 
Pal_MTZ:  BINCLUDE "art/palettes/MTZ.bin" ; Metropolis Zone palette
 
Pal_WFZ:  BINCLUDE "art/palettes/WFZ.bin" ; Wing Fortress Zone palette
 
Pal_HTZ:  BINCLUDE "art/palettes/HTZ.bin" ; Hill Top Zone palette
 
Pal_HPZ:  BINCLUDE "art/palettes/HPZ.bin" ; Hidden Palace Zone palette
 
Pal_HPZ_U: BINCLUDE "art/palettes/HPZ underwater.bin" ; Hidden Palace Zone underwater palette
 
Pal_OOZ:  BINCLUDE "art/palettes/OOZ.bin" ; Oil Ocean Zone palette
 
Pal_MCZ:  BINCLUDE "art/palettes/MCZ.bin" ; Mystic Cave Zone palette
 
Pal_CNZ:  BINCLUDE "art/palettes/CNZ.bin" ; Casino Night Zone palette
 
Pal_CPZ:  BINCLUDE "art/palettes/CPZ.bin" ; Chemical Plant Zone palette
 
Pal_CPZ_U: BINCLUDE "art/palettes/CPZ underwater.bin" ; Chemical Plant Zone underwater palette
 
Pal_DEZ:  BINCLUDE "art/palettes/DEZ.bin" ; Death Egg Zone palette
 
Pal_ARZ:  BINCLUDE "art/palettes/ARZ.bin" ; Aquatic Ruin Zone palette
 
Pal_ARZ_U: BINCLUDE "art/palettes/ARZ underwater.bin" ; Aquatic Ruin Zone underwater palette
 
Pal_SCZ:  BINCLUDE "art/palettes/SCZ.bin" ; Sky Chase Zone palette
 
Pal_UNK2:  BINCLUDE "art/palettes/Unknown 2.bin" ; Unknown palette 2
 
Pal_UNK3:  BINCLUDE "art/palettes/Unknown 3.bin" ; Unknown palette 3
 
Pal_OOZ_B: BINCLUDE "art/palettes/OOZ Boss.bin" ; Oil Ocean Zone boss palette
 
Pal_Menu:  BINCLUDE "art/palettes/Menu.bin" ; Menu palette
 
Pal_SS:    BINCLUDE "art/palettes/Special Stage Main.bin" ; Special Stage palette
 
Pal_SS1:  BINCLUDE "art/palettes/Special Stage 1.bin" ; Special Stage 1 palette
 
Pal_SS2:  BINCLUDE "art/palettes/Special Stage 2.bin" ; Special Stage 2 palette
 
Pal_SS3:  BINCLUDE "art/palettes/Special Stage 3.bin" ; Special Stage 3 palette
 
Pal_SS4:  BINCLUDE "art/palettes/Special Stage 4.bin" ; Special Stage 4 palette
 
Pal_SS5:  BINCLUDE "art/palettes/Special Stage 5.bin" ; Special Stage 5 palette
 
Pal_SS6:  BINCLUDE "art/palettes/Special Stage 6.bin" ; Special Stage 6 palette
 
Pal_SS7:  BINCLUDE "art/palettes/Special Stage 7.bin" ; Special Stage 7 palette
 
Pal_UNK4:  BINCLUDE "art/palettes/Special Stage 1 2p.bin" ; Special Stage 1 2p palette
 
Pal_UNK5:  BINCLUDE "art/palettes/Special Stage 2 2p.bin" ; Special Stage 2 2p palette
 
Pal_UNK6:  BINCLUDE "art/palettes/Special Stage 3 2p.bin" ; Special Stage 3 2p palette
 
Pal_UNK7:  BINCLUDE "art/palettes/Special Stage Results Screen.bin" ; Special Stage Results Screen palette
 
</asm>
 
 
and replace it with:
 
<asm>
 
PalPointers:
 
palptr Pal_SEGA,  Normal_palette, $1F
 
palptr Pal_Title, Normal_palette_line2, 7
 
palptr Pal_UNK1,  Normal_palette, $1F
 
palptr Pal_BGND,  Normal_palette, $F
 
palptr Pal_EHZ,  Normal_palette_line2, $17
 
palptr Pal_EHZ,  Normal_palette_line2, $17
 
palptr Pal_WZ,    Normal_palette_line2, $17
 
palptr Pal_EHZ,  Normal_palette_line2, $17
 
palptr Pal_MTZ,  Normal_palette_line2, $17
 
palptr Pal_MTZ,  Normal_palette_line2, $17
 
palptr Pal_WFZ,  Normal_palette_line2, $17
 
palptr Pal_HTZ,  Normal_palette_line2, $17
 
palptr Pal_HPZ,  Normal_palette_line2, $17
 
palptr Pal_EHZ,  Normal_palette_line2, $17
 
palptr Pal_OOZ,  Normal_palette_line2, $17
 
palptr Pal_MCZ,  Normal_palette_line2, $17
 
palptr Pal_CNZ,  Normal_palette_line2, $17
 
palptr Pal_CPZ,  Normal_palette_line2, $17
 
palptr Pal_DEZ,  Normal_palette_line2, $17
 
palptr Pal_ARZ,  Normal_palette_line2, $17
 
palptr Pal_SCZ,  Normal_palette_line2, $17
 
palptr Pal_HPZ_U, Normal_palette, $1F
 
palptr Pal_CPZ_U, Normal_palette, $1F
 
palptr Pal_ARZ_U, Normal_palette, $1F
 
palptr Pal_SS,    Normal_palette, $17
 
palptr Pal_UNK2,  Normal_palette_line2, 7
 
palptr Pal_UNK3,  Normal_palette_line2, 7
 
palptr Pal_SS1,  Normal_palette_line4, 7
 
palptr Pal_SS2,  Normal_palette_line4, 7
 
palptr Pal_SS3,  Normal_palette_line4, 7
 
palptr Pal_SS4,  Normal_palette_line4, 7
 
palptr Pal_SS5,  Normal_palette_line4, 7
 
palptr Pal_SS6,  Normal_palette_line4, 7
 
palptr Pal_SS7,  Normal_palette_line4, 7
 
palptr Pal_UNK4,  Normal_palette_line4, 7
 
palptr Pal_UNK5,  Normal_palette_line4, 7
 
palptr Pal_UNK6,  Normal_palette_line4, 7
 
palptr Pal_OOZ_B, Normal_palette_line2, 7
 
palptr Pal_Menu,  Normal_palette, $1F
 
palptr Pal_UNK7,  Normal_palette, $1F
 
palptr Pal_Lev11,  Normal_palette_line2, $17
 
palptr Pal_Lev12,  Normal_palette_line2, $17
 
palptr Pal_Lev13,  Normal_palette_line2, $17
 
palptr Pal_Lev14,  Normal_palette_line2, $17
 
palptr Pal_Lev15,  Normal_palette_line2, $17
 
palptr Pal_Lev16,  Normal_palette_line2, $17
 
palptr Pal_Lev17,  Normal_palette_line2, $17
 
palptr Pal_Lev18,  Normal_palette_line2, $17
 
palptr Pal_Lev19,  Normal_palette_line2, $17
 
palptr Pal_Lev1A,  Normal_palette_line2, $17
 
palptr Pal_Lev1B,  Normal_palette_line2, $17
 
palptr Pal_Lev1C,  Normal_palette_line2, $17
 
palptr Pal_Lev1D,  Normal_palette_line2, $17
 
palptr Pal_Lev1E,  Normal_palette_line2, $17
 
palptr Pal_Lev1F,  Normal_palette_line2, $17
 
palptr Pal_Lev20,  Normal_palette_line2, $17
 
 
; ----------------------------------------------------------------------------
 
Pal_SEGA:  BINCLUDE "art/palettes/Sega screen.bin" ; SEGA screen palette (Sonic and initial background)
 
Pal_Title: BINCLUDE "art/palettes/Title screen.bin" ; Title screen Palette
 
Pal_UNK1:  BINCLUDE "art/palettes/Unknown 1.bin" ; Unknown palette 1 (leftover S1 level select palette?)
 
Pal_BGND:  BINCLUDE "art/palettes/SonicAndTails.bin" ; "Sonic and Miles" background palette (also usually the primary palette line)
 
Pal_EHZ:  BINCLUDE "art/palettes/EHZ.bin" ; Emerald Hill Zone palette
 
Pal_WZ:    BINCLUDE "art/palettes/Wood Zone.bin" ; Wood Zone palette
 
Pal_MTZ:  BINCLUDE "art/palettes/MTZ.bin" ; Metropolis Zone palette
 
Pal_WFZ:  BINCLUDE "art/palettes/WFZ.bin" ; Wing Fortress Zone palette
 
Pal_HTZ:  BINCLUDE "art/palettes/HTZ.bin" ; Hill Top Zone palette
 
Pal_HPZ:  BINCLUDE "art/palettes/HPZ.bin" ; Hidden Palace Zone palette
 
Pal_HPZ_U: BINCLUDE "art/palettes/HPZ underwater.bin" ; Hidden Palace Zone underwater palette
 
Pal_OOZ:  BINCLUDE "art/palettes/OOZ.bin" ; Oil Ocean Zone palette
 
Pal_MCZ:  BINCLUDE "art/palettes/MCZ.bin" ; Mystic Cave Zone palette
 
Pal_CNZ:  BINCLUDE "art/palettes/CNZ.bin" ; Casino Night Zone palette
 
Pal_CPZ:  BINCLUDE "art/palettes/CPZ.bin" ; Chemical Plant Zone palette
 
Pal_CPZ_U: BINCLUDE "art/palettes/CPZ underwater.bin" ; Chemical Plant Zone underwater palette
 
Pal_DEZ:  BINCLUDE "art/palettes/DEZ.bin" ; Death Egg Zone palette
 
Pal_ARZ:  BINCLUDE "art/palettes/ARZ.bin" ; Aquatic Ruin Zone palette
 
Pal_ARZ_U: BINCLUDE "art/palettes/ARZ underwater.bin" ; Aquatic Ruin Zone underwater palette
 
Pal_SCZ:  BINCLUDE "art/palettes/SCZ.bin" ; Sky Chase Zone palette
 
Pal_Lev11:  BINCLUDE "art/palettes/Lev11.bin" ; New Level palette
 
Pal_Lev12:  BINCLUDE "art/palettes/Lev12.bin" ; New Level palette
 
Pal_Lev13:  BINCLUDE "art/palettes/Lev13.bin" ; New Level palette
 
Pal_Lev14:  BINCLUDE "art/palettes/Lev14.bin" ; New Level palette
 
Pal_Lev15:  BINCLUDE "art/palettes/Lev15.bin" ; New Level palette
 
Pal_Lev16:  BINCLUDE "art/palettes/Lev16.bin" ; New Level palette
 
Pal_Lev17:  BINCLUDE "art/palettes/Lev17.bin" ; New Level palette
 
Pal_Lev18:  BINCLUDE "art/palettes/Lev18.bin" ; New Level palette
 
Pal_Lev19:  BINCLUDE "art/palettes/Lev19.bin" ; New Level palette
 
Pal_Lev1A:  BINCLUDE "art/palettes/Lev1A.bin" ; New Level palette
 
Pal_Lev1B:  BINCLUDE "art/palettes/Lev1B.bin" ; New Level palette
 
Pal_Lev1C:  BINCLUDE "art/palettes/Lev1C.bin" ; New Level palette
 
Pal_Lev1D:  BINCLUDE "art/palettes/Lev1D.bin" ; New Level palette
 
Pal_Lev1E:  BINCLUDE "art/palettes/Lev1E.bin" ; New Level palette
 
Pal_Lev1F:  BINCLUDE "art/palettes/Lev1F.bin" ; New Level palette
 
Pal_Lev20:  BINCLUDE "art/palettes/Lev20.bin" ; New Level palette
 
Pal_UNK2:  BINCLUDE "art/palettes/Unknown 2.bin" ; Unknown palette 2
 
Pal_UNK3:  BINCLUDE "art/palettes/Unknown 3.bin" ; Unknown palette 3
 
Pal_OOZ_B: BINCLUDE "art/palettes/OOZ Boss.bin" ; Oil Ocean Zone boss palette
 
Pal_Menu:  BINCLUDE "art/palettes/Menu.bin" ; Menu palette
 
Pal_SS:    BINCLUDE "art/palettes/Special Stage Main.bin" ; Special Stage palette
 
Pal_SS1:  BINCLUDE "art/palettes/Special Stage 1.bin" ; Special Stage 1 palette
 
Pal_SS2:  BINCLUDE "art/palettes/Special Stage 2.bin" ; Special Stage 2 palette
 
Pal_SS3:  BINCLUDE "art/palettes/Special Stage 3.bin" ; Special Stage 3 palette
 
Pal_SS4:  BINCLUDE "art/palettes/Special Stage 4.bin" ; Special Stage 4 palette
 
Pal_SS5:  BINCLUDE "art/palettes/Special Stage 5.bin" ; Special Stage 5 palette
 
Pal_SS6:  BINCLUDE "art/palettes/Special Stage 6.bin" ; Special Stage 6 palette
 
Pal_SS7:  BINCLUDE "art/palettes/Special Stage 7.bin" ; Special Stage 7 palette
 
Pal_UNK4:  BINCLUDE "art/palettes/Special Stage 1 2p.bin" ; Special Stage 1 2p palette
 
Pal_UNK5:  BINCLUDE "art/palettes/Special Stage 2 2p.bin" ; Special Stage 2 2p palette
 
Pal_UNK6:  BINCLUDE "art/palettes/Special Stage 3 2p.bin" ; Special Stage 3 2p palette
 
Pal_UNK7:  BINCLUDE "art/palettes/Special Stage Results Screen.bin" ; Special Stage Results Screen palette
 
</asm>
 
 
That inserts our new palettes, which we will be using when we start on the main level load block.
 
 
==Extending Zone Procedures and Scripts==
 
Now we need to add the zone scripts.
 
 
Find:
 
<asm>
 
PLC_DYNANM: ; Zone ID
 
dc.w Dynamic_Normal-PLC_DYNANM ; $00
 
dc.w Animated_EHZ-PLC_DYNANM
 
 
dc.w Dynamic_Null-PLC_DYNANM ; $01
 
dc.w Animated_Null-PLC_DYNANM
 
 
dc.w Dynamic_Null-PLC_DYNANM ; $02
 
dc.w Animated_Null-PLC_DYNANM
 
 
dc.w Dynamic_Null-PLC_DYNANM ; $03
 
dc.w Animated_Null-PLC_DYNANM
 
 
dc.w Dynamic_Normal-PLC_DYNANM ; $04
 
dc.w Animated_MTZ-PLC_DYNANM
 
 
dc.w Dynamic_Normal-PLC_DYNANM ; $05
 
dc.w Animated_MTZ-PLC_DYNANM
 
 
dc.w Dynamic_Null-PLC_DYNANM ; $06
 
dc.w Animated_Null-PLC_DYNANM
 
 
dc.w Dynamic_HTZ-PLC_DYNANM ; $07
 
dc.w Animated_HTZ-PLC_DYNANM
 
 
dc.w Dynamic_Normal-PLC_DYNANM ; $08
 
dc.w Animated_OOZ-PLC_DYNANM
 
 
dc.w Dynamic_Null-PLC_DYNANM ; $09
 
dc.w Animated_Null-PLC_DYNANM
 
 
dc.w Dynamic_Normal-PLC_DYNANM ; $0A
 
dc.w Animated_OOZ2-PLC_DYNANM
 
 
dc.w Dynamic_Null-PLC_DYNANM ; $0B
 
dc.w Animated_Null-PLC_DYNANM
 
 
dc.w Dynamic_CNZ-PLC_DYNANM ; $0C
 
dc.w Animated_CNZ-PLC_DYNANM
 
 
dc.w Dynamic_Normal-PLC_DYNANM ; $0D
 
dc.w Animated_CPZ-PLC_DYNANM
 
 
dc.w Dynamic_Normal-PLC_DYNANM ; $0F
 
dc.w Animated_DEZ-PLC_DYNANM
 
 
dc.w Dynamic_ARZ-PLC_DYNANM ; $10
 
dc.w Animated_ARZ-PLC_DYNANM
 
 
dc.w Dynamic_Null-PLC_DYNANM ; $11
 
dc.w Animated_Null-PLC_DYNANM ; yes, level $11
 
</asm>
 
 
and add to the end of it:
 
<asm>
 
dc.w Dynamic_Null-PLC_DYNANM
 
dc.w Animated_Null-PLC_DYNANM
 
 
dc.w Dynamic_Null-PLC_DYNANM
 
dc.w Animated_Null-PLC_DYNANM
 
 
dc.w Dynamic_Null-PLC_DYNANM
 
dc.w Animated_Null-PLC_DYNANM
 
 
dc.w Dynamic_Null-PLC_DYNANM
 
dc.w Animated_Null-PLC_DYNANM
 
 
dc.w Dynamic_Null-PLC_DYNANM
 
dc.w Animated_Null-PLC_DYNANM
 
 
dc.w Dynamic_Null-PLC_DYNANM
 
dc.w Animated_Null-PLC_DYNANM
 
 
dc.w Dynamic_Null-PLC_DYNANM
 
dc.w Animated_Null-PLC_DYNANM
 
 
dc.w Dynamic_Null-PLC_DYNANM
 
dc.w Animated_Null-PLC_DYNANM
 
 
dc.w Dynamic_Null-PLC_DYNANM
 
dc.w Animated_Null-PLC_DYNANM
 
 
dc.w Dynamic_Null-PLC_DYNANM
 
dc.w Animated_Null-PLC_DYNANM
 
 
dc.w Dynamic_Null-PLC_DYNANM
 
dc.w Animated_Null-PLC_DYNANM
 
 
dc.w Dynamic_Null-PLC_DYNANM
 
dc.w Animated_Null-PLC_DYNANM
 
 
dc.w Dynamic_Null-PLC_DYNANM
 
dc.w Animated_Null-PLC_DYNANM
 
 
dc.w Dynamic_Null-PLC_DYNANM
 
dc.w Animated_Null-PLC_DYNANM
 
 
dc.w Dynamic_Null-PLC_DYNANM
 
dc.w Animated_Null-PLC_DYNANM
 
</asm>
 
 
This creates scripts for the new levels. To make complex animations (like the HPZ pulsing ball) you will need to create a Anim*level*.bin and add it to the Anim*level*.bin files and add it to the animated pattern mappings. See the section below.
 
 
==Extending Animated Pattern Mappings==
 
 
Find:
 
<asm>
 
AnimPatMaps:
 
dc.w APM16_EHZ - AnimPatMaps ;  0
 
dc.w APM_Null - AnimPatMaps  ;  1
 
dc.w APM_Null - AnimPatMaps  ;  2
 
dc.w APM_Null - AnimPatMaps  ;  3
 
dc.w APM16_MTZ - AnimPatMaps ;  4
 
dc.w APM16_MTZ - AnimPatMaps ;  5
 
dc.w APM_Null - AnimPatMaps  ;  6
 
dc.w APM16_EHZ - AnimPatMaps ;  7
 
dc.w APM_HPZ - AnimPatMaps  ;  8
 
dc.w APM_Null - AnimPatMaps  ;  9
 
dc.w APM_OOZ - AnimPatMaps  ; $A
 
dc.w APM_Null - AnimPatMaps  ; $B
 
dc.w APM_CNZ - AnimPatMaps  ; $C
 
dc.w APM_CPZ - AnimPatMaps  ; $D
 
dc.w APM_DEZ - AnimPatMaps  ; $E
 
dc.w APM_ARZ - AnimPatMaps  ; $F
 
dc.w APM_Null - AnimPatMaps  ;$10
 
</asm>
 
 
then add this to the end
 
<asm>
 
dc.w APM_Null - AnimPatMaps
 
dc.w APM_Null - AnimPatMaps
 
dc.w APM_Null - AnimPatMaps
 
dc.w APM_Null - AnimPatMaps
 
dc.w APM_Null - AnimPatMaps
 
dc.w APM_Null - AnimPatMaps
 
dc.w APM_Null - AnimPatMaps
 
dc.w APM_Null - AnimPatMaps
 
dc.w APM_Null - AnimPatMaps
 
dc.w APM_Null - AnimPatMaps
 
dc.w APM_Null - AnimPatMaps
 
dc.w APM_Null - AnimPatMaps
 
dc.w APM_Null - AnimPatMaps
 
dc.w APM_Null - AnimPatMaps
 
dc.w APM_Null - AnimPatMaps
 
dc.w APM_Null - AnimPatMaps
 
</asm>
 
 
then edit and change as needed. Add the new .bin files to below here:
 
<asm>
 
; byte_40372:
 
APM16_EHZ: BINCLUDE "mappings/16x16/AnimEHZ.bin"
 
 
; byte_403EE:
 
APM16_MTZ: BINCLUDE "mappings/16x16/AnimMTZ.bin"
 
 
; byte_404C2:
 
APM_HPZ: BINCLUDE "mappings/16x16/AnimHPZ.bin"
 
 
; byte_405B6:
 
APM_OOZ: BINCLUDE "mappings/16x16/AnimOOZ.bin"
 
 
; byte_4061A:
 
APM_CNZ: BINCLUDE "mappings/16x16/AnimCNZ.bin"
 
 
; byte_406BE:
 
APM_CNZ2P: BINCLUDE "mappings/16x16/AnimCNZ2P.bin"
 
 
; byte_40762:
 
APM_CPZ: BINCLUDE "mappings/16x16/AnimCPZ.bin"
 
 
; byte_4076E:
 
APM_DEZ: BINCLUDE "mappings/16x16/AnimDEZ.bin"
 
 
; byte_4077A:
 
APM_ARZ: BINCLUDE "mappings/16x16/AnimARZ.bin"
 
 
; byte_407BE:
 
APM_Null: dc.w  0
 
</asm>
 
 
and then possibly create the nessisary load queries for them. (If so, you need to know what you're doing here.)
 
 
==Extending the 1 Player and 2 Player music playlists==
 
next we find:
 
<asm>
 
; loc_40AE:
 
Level_GetBgm:
 
tst.w (Demo_mode_flag).w
 
bmi.s loc_4114
 
moveq #0,d0
 
move.b (Current_Zone).w,d0
 
lea MusicList(pc),a1
 
tst.w (Two_player_mode).w
 
beq.s Level_PlayBgm
 
lea MusicList2(pc),a1
 
</asm>
 
 
and replace it with:
 
<asm>
 
; loc_40AE:
 
Level_GetBgm:
 
tst.w (Demo_mode_flag).w
 
bmi.s loc_4114
 
moveq #0,d0
 
move.b (Current_Zone).w,d0
 
lea MusicList(pc),a1
 
tst.w (Two_player_mode).w
 
beq.s Level_PlayBgm
 
jsr Level_2PlayerBGMList
 
</asm>
 
 
 
now we want to find:
 
<asm>
 
;----------------------------------------------------------------------------
 
; 1P Music Playlist
 
;----------------------------------------------------------------------------
 
; byte_3EA0:
 
MusicList:
 
dc.b  2+$80 ; 0 ; EHZ
 
dc.b  2+$80 ; 1
 
dc.b  5+$80 ; 2
 
dc.b  4+$80 ; 3
 
dc.b  5+$80 ; 4 ; MTZ1,2
 
dc.b  5+$80 ; 5 ; MTZ3
 
dc.b  $F+$80 ; 6 ; WFZ
 
dc.b  6+$80 ; 7 ; HTZ
 
dc.b $10+$80 ; 8
 
dc.b  $D+$80 ; 9
 
dc.b  4+$80 ; 10 ; OOZ
 
dc.b  $B+$80 ; 11 ; MCZ
 
dc.b  $9+$80 ; 12 ; CNZ
 
dc.b  $E+$80 ; 13 ; CPZ
 
dc.b  $A+$80 ; 14 ; DEZ
 
dc.b  7+$80 ; 15 ; ARZ
 
dc.b  $D+$80 ; 16 ; SCZ
 
dc.b  0 ; 17
 
;----------------------------------------------------------------------------
 
; 2P Music Playlist
 
;----------------------------------------------------------------------------
 
; byte_3EB2:
 
MusicList2:
 
dc.b  $C+$80 ; 0  ; EHZ 2P
 
dc.b  2+$80 ; 1
 
dc.b  5+$80 ; 2
 
dc.b  4+$80 ; 3
 
dc.b  5+$80 ; 4
 
dc.b  5+$80 ; 5
 
dc.b  $F+$80 ; 6
 
dc.b  6+$80 ; 7
 
dc.b $10+$80 ; 8
 
dc.b  $D+$80 ; 9
 
dc.b  4+$80 ; 10
 
dc.b  3+$80 ; 11 ; MCZ 2P
 
dc.b  8+$80 ; 12 ; CNZ 2P
 
dc.b  $E+$80 ; 13
 
dc.b  $A+$80 ; 14
 
dc.b  7+$80 ; 15
 
dc.b  $D+$80 ; 16
 
dc.b  0 ; 17
 
</asm>
 
 
and replace it with:
 
<asm>
 
;----------------------------------------------------------------------------
 
; 2P Music Playlist
 
;----------------------------------------------------------------------------
 
; byte_3EB2:
 
MusicList2:
 
dc.b  $C+$80 ; 00  ; EHZ 2P
 
dc.b  2+$80 ; 01
 
dc.b  5+$80 ; 02
 
dc.b  4+$80 ; 03
 
dc.b  5+$80 ; 04
 
dc.b  5+$80 ; 05
 
dc.b  $F+$80 ; 06
 
dc.b  6+$80 ; 07
 
dc.b $10+$80 ; 08
 
dc.b  $D+$80 ; 09
 
dc.b  4+$80 ; 0A
 
dc.b  3+$80 ; 0B ; MCZ 2P
 
dc.b  8+$80 ; 0C ; CNZ 2P
 
dc.b  $E+$80 ; 0D
 
dc.b  $A+$80 ; 0E
 
dc.b  7+$80 ; 0F
 
dc.b  $D+$80 ; 10
 
dc.b  2+$80 ; 11
 
dc.b  2+$80 ; 12
 
dc.b  2+$80 ; 13
 
dc.b  2+$80 ; 14
 
dc.b  2+$80 ; 15
 
dc.b  2+$80 ; 16
 
dc.b  2+$80 ; 17
 
dc.b  2+$80 ; 18
 
dc.b  2+$80 ; 19
 
dc.b  2+$80 ; 1A
 
dc.b  2+$80 ; 1B
 
dc.b  2+$80 ; 1C
 
dc.b  2+$80 ; 1D
 
dc.b  2+$80 ; 1E
 
dc.b  2+$80 ; 1F
 
dc.b  2+$80 ; 20
 
dc.b  0
 
 
Level_2PlayerBGMList:
 
lea MusicList2(pc),a1
 
rts
 
 
;----------------------------------------------------------------------------
 
; 1P Music Playlist
 
;----------------------------------------------------------------------------
 
; byte_3EA0:
 
MusicList:
 
dc.b  2+$80 ; 00 ; EHZ
 
dc.b  2+$80 ; 01
 
dc.b  5+$80 ; 02
 
dc.b  4+$80 ; 03
 
dc.b  5+$80 ; 04 ; MTZ1,2
 
dc.b  5+$80 ; 05 ; MTZ3
 
dc.b  $F+$80 ; 06 ; WFZ
 
dc.b  6+$80 ; 07 ; HTZ
 
dc.b $10+$80 ; 08
 
dc.b  $D+$80 ; 09
 
dc.b  4+$80 ; 0A ; OOZ
 
dc.b  $B+$80 ; 0B ; MCZ
 
dc.b  $9+$80 ; 0C; CNZ
 
dc.b  $E+$80 ; 0D ; CPZ
 
dc.b  $A+$80 ; 0E ; DEZ
 
dc.b  7+$80 ; 0F ; ARZ
 
dc.b  $D+$80 ; 10 ; SCZ
 
dc.b  2+$80 ; 11
 
dc.b  2+$80 ; 12
 
dc.b  2+$80 ; 13
 
dc.b  2+$80 ; 14
 
dc.b  2+$80 ; 15
 
dc.b  2+$80 ; 16
 
dc.b  2+$80 ; 17
 
dc.b  2+$80 ; 18
 
dc.b  2+$80 ; 19
 
dc.b  2+$80 ; 1A
 
dc.b  2+$80 ; 1B
 
dc.b  2+$80 ; 1C
 
dc.b  2+$80 ; 1D
 
dc.b  2+$80 ; 1E
 
dc.b  2+$80 ; 1F
 
dc.b  2+$80 ; 20
 
dc.b  0
 
</asm>
 
 
That updates our music list for both 2 player and 1 player modes, and fixes an error that sometimes occurs during the build process relating to somwthing not fitting in a signed byte, which can easily happen when you have a lot of added zones.
 
 
 
==Branch fixes==
 
Before we go any further, I will note that if you tried to compile now, you would have some "jump distance too big" errors, lets fix them:
 
 
first, we will find:
 
<asm>
 
GameModesArray: ;;
 
bra.w SegaScreen ; $00 SEGA screen mode
 
bra.w TitleScreen ; $04 Title screen mode
 
bra.w Level ; $08 Demo mode
 
bra.w Level ; $0C Zone play mode
 
bra.w SpecialStage ; $10 Special stage play mode
 
bra.w ContinueScreen ; $14 Continue mode
 
bra.w TwoPlayerResults ; $18 2P results mode
 
bra.w LevelSelectMenu2P ; $1C 2P level select mode
 
bra.w JmpTo_EndingSequence ; $20 End sequence mode
 
bra.w OptionsMenu ; $24 Options mode
 
bra.w LevelSelectMenu ; $28 Level select mode
 
; ===========================================================================
 
</asm>
 
 
and replace it with:
 
<asm>
 
GameModesArray: ;;
 
bra.w SegaScreen ; $00 SEGA screen mode
 
bra.w TitleScreen ; $04 Title screen mode
 
bra.w Level ; $08 Demo mode
 
bra.w Level ; $0C Zone play mode
 
bra.w SpecialStage ; $10 Special stage play mode
 
bra.w ContinueScreen ; $14 Continue mode
 
bra.w Jmpto_TwoPlayerResults ; $18 2P results mode
 
bra.w LevelSelectMenu2P ; $1C 2P level select mode
 
bra.w JmpTo_EndingSequence ; $20 End sequence mode
 
bra.w OptionsMenu ; $24 Options mode
 
bra.w LevelSelectMenu ; $28 Level select mode
 
; ===========================================================================
 
Jmpto_TwoPlayerResults:
 
jmp TwoPlayerResults
 
</asm>
 
 
then we we will find:
 
<asm>
 
MenuScreen:
 
bsr.w Pal_FadeFrom
 
move #$2700,sr
 
move.w ($FFFFF60C).w,d0
 
andi.b #-$41,d0
 
move.w d0,(VDP_control_port).l
 
bsr.w ClearScreen
 
lea (VDP_control_port).l,a6
 
move.w #$8004,(a6)
 
move.w #$8230,(a6)
 
move.w #$8407,(a6)
 
move.w #$8230,(a6)
 
move.w #$8700,(a6)
 
move.w #$8C81,(a6)
 
move.w #$9001,(a6)
 
clearRAM Sprite_Table_Input,$400
 
clearRAM Object_RAM,$2000
 
 
clr.w (VDP_Command_Buffer).w
 
move.l #VDP_Command_Buffer,(VDP_Command_Buffer_Slot).w
 
move.l #$42000000,(VDP_control_port).l
 
lea (ArtNem_FontStuff).l,a0
 
bsr.w NemDec
 
move.l #$4E000000,(VDP_control_port).l
 
lea (ArtNem_MenuBox).l,a0
 
bsr.w NemDec
 
move.l #$52000000,(VDP_control_port).l
 
lea (ArtNem_LevelSelectPics).l,a0
 
bsr.w NemDec
 
</asm>
 
 
we want to change it to:
 
<asm>
 
MenuScreen:
 
bsr.w Pal_FadeFrom
 
move #$2700,sr
 
move.w ($FFFFF60C).w,d0
 
andi.b #-$41,d0
 
move.w d0,(VDP_control_port).l
 
bsr.w JumpTo_ClearScreen
 
lea (VDP_control_port).l,a6
 
move.w #$8004,(a6)
 
move.w #$8230,(a6)
 
move.w #$8407,(a6)
 
move.w #$8230,(a6)
 
move.w #$8700,(a6)
 
move.w #$8C81,(a6)
 
move.w #$9001,(a6)
 
jmp Cont_MenuScreen
 
 
 
JumpTo_ClearScreen:
 
jmp ClearScreen
 
JumpTo_NemDec000:
 
jmp ClearScreen
 
 
Cont_MenuScreen:
 
 
clearRAM Sprite_Table_Input,$400
 
clearRAM Object_RAM,$2000
 
 
clr.w (VDP_Command_Buffer).w
 
move.l #VDP_Command_Buffer,(VDP_Command_Buffer_Slot).w
 
move.l #$42000000,(VDP_control_port).l
 
lea (ArtNem_FontStuff).l,a0
 
bsr.w JumpTo_NemDec000
 
move.l #$4E000000,(VDP_control_port).l
 
lea (ArtNem_MenuBox).l,a0
 
bsr.w JumpTo_NemDec000
 
move.l #$52000000,(VDP_control_port).l
 
lea (ArtNem_LevelSelectPics).l,a0
 
bsr.w JumpTo_NemDec000
 
</asm>
 
 
now we want to locate:
 
<asm>
 
MenuScreen_LevelSelect:
 
lea (Metablock_Table).l,a1
 
lea (MapEng_LevSel).l,a0
 
move.w #0,d0
 
bsr.w EniDec
 
lea (Metablock_Table).l,a1
 
move.l #$40000003,d0
 
moveq #$27,d1
 
moveq #$1B,d2
 
bsr.w JmpTo_ShowVDPGraphics
 
moveq #0,d3
 
bsr.w loc_965A
 
lea ($FFFF08C0).l,a1
 
lea (MapEng_LevSelIcon).l,a0
 
move.w #$90,d0
 
bsr.w EniDec
 
bsr.w loc_9688
 
clr.w (Player_mode).w
 
clr.w (Results_Screen_2P).w
 
clr.b (Level_started_flag).w
 
clr.w ($FFFFF7F0).w
 
lea (word_87C6).l,a2
 
bsr.w JmpTo2_Dynamic_Normal
 
moveq #$26,d0
 
bsr.w PalLoad1
 
lea (Normal_palette_line3).w,a1
 
lea (Second_palette_line3).w,a2
 
moveq #7,d1
 
</asm>
 
 
and change it to:
 
<asm>
 
MenuScreen_LevelSelect:
 
lea (Metablock_Table).l,a1
 
lea (MapEng_LevSel).l,a0
 
move.w #0,d0
 
bsr.w JumpTo_EniDec
 
lea (Metablock_Table).l,a1
 
move.l #$40000003,d0
 
moveq #$27,d1
 
moveq #$1B,d2
 
bsr.w JmpTo_ShowVDPGraphics
 
moveq #0,d3
 
bsr.w loc_965A
 
lea ($FFFF08C0).l,a1
 
lea (MapEng_LevSelIcon).l,a0
 
move.w #$90,d0
 
bsr.w JumpTo_EniDec
 
bsr.w loc_9688
 
clr.w (Player_mode).w
 
clr.w (Results_Screen_2P).w
 
clr.b (Level_started_flag).w
 
clr.w ($FFFFF7F0).w
 
lea (word_87C6).l,a2
 
bsr.w JmpTo2_Dynamic_Normal
 
moveq #$26,d0
 
bsr.w PalLoad1
 
lea (Normal_palette_line3).w,a1
 
lea (Second_palette_line3).w,a2
 
moveq #7,d1
 
jmp loc_9366
 
 
JumpTo_EniDec:
 
jmp EniDec
 
</asm>
 
 
next we want to find:
 
<asm>
 
; loc_8FCC:
 
MenuScreen_Options:
 
lea (Metablock_Table).l,a1
 
lea (MapEng_Options).l,a0
 
move.w #$70,d0
 
bsr.w EniDec
 
lea ($FFFF0160).l,a1
 
lea (MapEng_Options).l,a0
 
move.w #$2070,d0
 
bsr.w EniDec
 
clr.b (Options_menu_box).w
 
bsr.w sub_9186
 
addq.b #1,(Options_menu_box).w
 
bsr.w loc_91F8
 
addq.b #1,(Options_menu_box).w
 
bsr.w loc_91F8
 
clr.b (Options_menu_box).w
 
clr.b (Level_started_flag).w
 
clr.w ($FFFFF7F0).w
 
lea (word_87C6).l,a2
 
bsr.w JmpTo2_Dynamic_Normal
 
moveq #$26,d0
 
bsr.w PalLoad1
 
move.b #-$6F,d0
 
bsr.w JmpTo_PlayMusic
 
clr.w (Two_player_mode).w
 
clr.l (Camera_X_pos).w
 
clr.l (Camera_Y_pos).w
 
clr.w (Correct_cheat_entries).w
 
clr.w (Correct_cheat_entries_2).w
 
move.b #$16,(Delay_Time).w
 
bsr.w DelayProgram
 
move.w ($FFFFF60C).w,d0
 
ori.b #$40,d0
 
move.w d0,(VDP_control_port).l
 
bsr.w Pal_FadeTo
 
</asm>
 
 
and change it to:
 
<asm>
 
MenuScreen_Options:
 
lea (Metablock_Table).l,a1
 
lea (MapEng_Options).l,a0
 
move.w #$70,d0
 
bsr.w JmpTo_EniDec
 
lea ($FFFF0160).l,a1
 
lea (MapEng_Options).l,a0
 
move.w #$2070,d0
 
bsr.w JmpTo_EniDec
 
clr.b (Options_menu_box).w
 
bsr.w sub_9186
 
addq.b #1,(Options_menu_box).w
 
bsr.w loc_91F8
 
addq.b #1,(Options_menu_box).w
 
bsr.w loc_91F8
 
clr.b (Options_menu_box).w
 
clr.b (Level_started_flag).w
 
clr.w ($FFFFF7F0).w
 
lea (word_87C6).l,a2
 
bsr.w JmpTo2_Dynamic_Normal
 
moveq #$26,d0
 
bsr.w PalLoad1
 
move.b #-$6F,d0
 
bsr.w JmpTo_PlayMusic
 
clr.w (Two_player_mode).w
 
clr.l (Camera_X_pos).w
 
clr.l (Camera_Y_pos).w
 
clr.w (Correct_cheat_entries).w
 
clr.w (Correct_cheat_entries_2).w
 
move.b #$16,(Delay_Time).w
 
bsr.w DelayProgram
 
move.w ($FFFFF60C).w,d0
 
ori.b #$40,d0
 
move.w d0,(VDP_control_port).l
 
bsr.w Pal_FadeTo
 
</asm>
 
 
Find:
 
<asm>
 
loc_4114:
 
moveq #3,d0
 
bsr.w PalLoad1 ; load Sonic's palette line
 
bsr.w LevelSizeLoad
 
bsr.w JmpTo_DeformBgLayer
 
clr.w (Vscroll_Factor).w
 
move.w #-$E0,($FFFFF61E).w
 
 
clearRAM Horiz_Scroll_Buf,$400
 
 
bsr.w sub_4E98
 
bsr.w JmpTo_loadZoneBlockMaps
 
jsr (loc_402D4).l
 
bsr.w JmpTo_loc_E300
 
jsr (FloorLog_Unk).l
 
bsr.w LoadCollisionIndexes
 
bsr.w WaterEffects
 
bsr.w InitPlayers
 
move.w #0,(Ctrl_1_Logical).w
 
move.w #0,(Ctrl_2_Logical).w
 
move.w #0,(Ctrl_1).w
 
move.w #0,(Ctrl_2).w
 
move.b #1,(Control_Locked).w
 
move.b #1,($FFFFF7CF).w
 
move.b #0,(Level_started_flag).w
 
; Level_ChkWater:
 
tst.b (Water_flag).w ; does level have water?
 
beq.s + ; if not, branch
 
move.b #4,(Object_RAM+$380).w ; load Obj04 (water surface) at $FFFFB380
 
move.w #$60,(Object_RAM+$380+x_pos).w ; set horizontal offset
 
move.b #4,(Object_RAM+$3C0).w ; load Obj04 (water surface) at $FFFFB3C0
 
move.w #$120,(Object_RAM+$3C0+x_pos).w ; set different horizontal offset
 
+
 
cmpi.b #$D,(Current_Zone).w ; check if zone == CPZ
 
bne.s + ; branch if not
 
move.b #$7C,(Object_RAM+$340).w ; load Obj7C (CPZ pylon) at $FFFFB340
 
+
 
cmpi.b #$A,(Current_Zone).w ; check if zone == OOZ
 
bne.s Level_ClrHUD ; branch if not
 
move.b #7,(Object_RAM+$380).w ; load Obj07 (OOZ oil) at $FFFFB380
 
</asm>
 
 
and replace it with:
 
<asm>
 
loc_4114:
 
moveq #3,d0
 
bsr.w PalLoad1 ; load Sonic's palette line
 
bsr.w JmpTo_LevelSizeLoad
 
bsr.w JmpTo_DeformBgLayer
 
clr.w (Vscroll_Factor).w
 
move.w #-$E0,($FFFFF61E).w
 
 
clearRAM Horiz_Scroll_Buf,$400
 
 
bsr.w sub_4E98
 
bsr.w JmpTo_loadZoneBlockMaps
 
jsr (loc_402D4).l
 
bsr.w JmpTo_loc_E300
 
jsr (FloorLog_Unk).l
 
bsr.w LoadCollisionIndexes
 
bsr.w WaterEffects
 
bsr.w InitPlayers
 
move.w #0,(Ctrl_1_Logical).w
 
move.w #0,(Ctrl_2_Logical).w
 
move.w #0,(Ctrl_1).w
 
move.w #0,(Ctrl_2).w
 
move.b #1,(Control_Locked).w
 
move.b #1,($FFFFF7CF).w
 
move.b #0,(Level_started_flag).w
 
; Level_ChkWater:
 
tst.b (Water_flag).w ; does level have water?
 
beq.s + ; if not, branch
 
move.b #4,(Object_RAM+$380).w ; load Obj04 (water surface) at $FFFFB380
 
move.w #$60,(Object_RAM+$380+x_pos).w ; set horizontal offset
 
move.b #4,(Object_RAM+$3C0).w ; load Obj04 (water surface) at $FFFFB3C0
 
move.w #$120,(Object_RAM+$3C0+x_pos).w ; set different horizontal offset
 
+
 
cmpi.b #$D,(Current_Zone).w ; check if zone == CPZ
 
bne.s + ; branch if not
 
move.b #$7C,(Object_RAM+$340).w ; load Obj7C (CPZ pylon) at $FFFFB340
 
+
 
cmpi.b #$A,(Current_Zone).w ; check if zone == OOZ
 
bne.s Level_ClrHUD ; branch if not
 
move.b #7,(Object_RAM+$380).w ; load Obj07 (OOZ oil) at $FFFFB380
 
 
JmpTo_LevelSizeLoad:
 
jmp LevelSizeLoad
 
</asm>
 
 
Now we find:
 
<asm>
 
sub_9EF4:
 
tst.b ($FFFFF660).w
 
beq.w return_A0BE
 
bsr.w Pal_FadeFrom
 
lea (VDP_control_port).l,a6
 
move.w #$8004,(a6)
 
move.w #$8230,(a6)
 
move.w #$8407,(a6)
 
move.w #$9001,(a6)
 
move.w #$9200,(a6)
 
move.w #$8B03,(a6)
 
move.w #$8700,(a6)
 
clr.b (Water_move).w
 
move.w #$8C81,(a6)
 
bsr.w JmpTo_ClearScreen
 
</asm>
 
 
and change it to:
 
<asm>
 
JmpTo_Pal_FadeFrom:
 
jmp Pal_FadeFrom
 
 
sub_9EF4:
 
tst.b ($FFFFF660).w
 
beq.w return_A0BE
 
bsr.w JmpTo_Pal_FadeFrom
 
lea (VDP_control_port).l,a6
 
move.w #$8004,(a6)
 
move.w #$8230,(a6)
 
move.w #$8407,(a6)
 
move.w #$9001,(a6)
 
move.w #$9200,(a6)
 
move.w #$8B03,(a6)
 
move.w #$8700,(a6)
 
clr.b (Water_move).w
 
move.w #$8C81,(a6)
 
bsr.w JmpTo_ClearScreen
 
</asm>
 
 
now we want to find:
 
<asm>
 
loc_9FE6:
 
bsr.w JmpTo_ClearScreen
 
bsr.w sub_B262
 
bsr.w Pal_FadeTo
 
move.w #$18E,d0
 
btst #6,(Graphics_Flags).w
 
beq.s loc_A002
 
move.w #$144,d0
 
</asm>
 
 
and change it to:
 
<asm>
 
loc_9FE6:
 
bsr.w JmpTo_ClearScreen
 
bsr.w sub_B262
 
bsr.w JmpTo_Pal_FadeTo
 
move.w #$18E,d0
 
btst #6,(Graphics_Flags).w
 
beq.s loc_A002
 
move.w #$144,d0
 
jmp loc_A002
 
 
JmpTo_Pal_FadeTo:
 
jmp Pal_FadeTo
 
</asm>
 
 
now we want to find:
 
<asm>
 
loc_A002:
 
move.b #$18,(Delay_Time).w
 
bsr.w DelayProgram
 
dbf d0,loc_A002
 
bsr.w Pal_FadeFrom
 
lea (off_B2CA).l,a1
 
addq.w #1,($FFFFFF4C).w
 
move.w ($FFFFFF4C).w,d0
 
lsl.w #2,d0
 
move.l (a1,d0.w),d0
 
bpl.s loc_9FE6
 
bsr.w Pal_FadeFrom
 
bsr.w JmpTo_ClearScreen
 
</asm>
 
 
and we want to to change it to:
 
<asm>
 
loc_A002:
 
move.b #$18,(Delay_Time).w
 
bsr.w DelayProgram
 
dbf d0,loc_A002
 
bsr.w JmpTo_Pal_FadeFrom
 
lea (off_B2CA).l,a1
 
addq.w #1,($FFFFFF4C).w
 
move.w ($FFFFFF4C).w,d0
 
lsl.w #2,d0
 
move.l (a1,d0.w),d0
 
bpl.s loc_9FE6
 
bsr.w JmpTo_Pal_FadeFrom
 
bsr.w JmpTo_ClearScreen
 
</asm>
 
 
now we find:
 
<asm>
 
bcs.s Obj17_Main
 
moveq #0,d6
 
; loc_10372:
 
Obj17_MakeHelix:
 
bsr.w SingleObjLoad2
 
</asm>
 
 
and change it to:
 
<asm>
 
bcs.s JumpTo_Obj17_Main
 
moveq #0,d6
 
jmp Obj17_MakeHelix
 
 
JumpTo_Obj17_Main:
 
jmp Obj17_Main
 
JumpTo_SingleObjLoad2:
 
jmp SingleObjLoad2
 
 
; loc_10372:
 
Obj17_MakeHelix:
 
bsr.w JumpTo_SingleObjLoad2
 
</asm>
 
 
after that, your rom will build correctly for jump issues, but for addressing, that's different.
 
 
==Fixing Addressing==
 
 
Find:
 
<asm>
 
loc_A5A6:
 
bsr.s sub_A58C
 
subq.w #1,objoff_3C(a0)
 
bpl.s return_A5E6
 
move.w #2,objoff_3C(a0)
 
move.w objoff_32(a0),d0
 
cmpi.w #$1C,d0
 
bcc.s loc_A5E8
 
addq.w #1,objoff_32(a0)
 
move.w ($FFFFF750).w,d1
 
move.w off_A5FC(pc,d1.w),d1
 
lea off_A5FC(pc,d1.w),a1
 
move.b (a1,d0.w),mapping_frame(a0)
 
add.w d0,d0
 
add.w d0,d0
 
move.l word_A656(pc,d0.w),d1
 
move.w d1,y_pos(a0)
 
swap d1
 
move.w d1,x_pos(a0)
 
</asm>
 
 
and replace it with:
 
<asm>
 
loc_A5A6:
 
bsr.s sub_A58C
 
subq.w #1,objoff_3C(a0)
 
bpl.s return_A5E6
 
move.w #2,objoff_3C(a0)
 
move.w objoff_32(a0),d0
 
cmpi.w #$1C,d0
 
bcc.s loc_A5E8
 
addq.w #1,objoff_32(a0)
 
move.w ($FFFFF750).w,d1
 
move.w off_A5FC(pc,d1.w),d1
 
lea off_A5FC(pc,d1.w),a1
 
move.b (a1,d0.w),mapping_frame(a0)
 
add.w d0,d0
 
add.w d0,d0
 
jmp loc2_A5A6
 
</asm>
 
 
Now find:
 
<asm>
 
loc_A6C6:
 
subq.w #1,objoff_3C(a0)
 
bmi.s loc_A720
 
tst.b (Super_Sonic_flag).w
 
beq.s return_A70A
 
subq.b #1,objoff_31(a0)
 
bpl.s return_A70A
 
addq.b #3,objoff_31(a0)
 
move.w objoff_32(a0),d0
 
addq.w #4,objoff_32(a0)
 
cmpi.w #$78,d0
 
bcc.s return_A70A
 
cmpi.w #$C,d0
 
bcs.s loc_A70C
 
bsr.w loc_A594
 
move.l word_A766(pc,d0.w),d1
 
move.w d1,y_pos(a0)
 
swap d1
 
move.w d1,x_pos(a0)
 
lsr.w #2,d0
 
move.b byte_A748(pc,d0.w),mapping_frame(a0)
 
</asm>
 
 
and replace it with:
 
<asm>
 
loc_A6C6:
 
subq.w #1,objoff_3C(a0)
 
bmi.s loc_A720
 
tst.b (Super_Sonic_flag).w
 
beq.s return_A70A
 
subq.b #1,objoff_31(a0)
 
bpl.s return_A70A
 
addq.b #3,objoff_31(a0)
 
move.w objoff_32(a0),d0
 
addq.w #4,objoff_32(a0)
 
cmpi.w #$78,d0
 
bcc.s return_A70A
 
cmpi.w #$C,d0
 
bcs.s loc_A70C
 
bsr.w loc_A594
 
jmp loc2_A6C6
 
</asm>
 
 
Then find:
 
<asm>
 
loc_A70C:
 
move.l word_A766(pc,d0.w),d0
 
lea (MainCharacter).w,a1 ; a1=character
 
move.w d0,y_pos(a1)
 
swap d0
 
move.w d0,x_pos(a1)
 
rts
 
</asm>
 
 
and replace it with:
 
<asm>
 
loc_A70C:
 
jmp loc2_A70C
 
</asm>
 
 
Now find:
 
<asm>
 
loc_285D2:
 
moveq #7,d1
 
moveq #0,d4
 
lea (byte_28726).l,a2
 
movea.l a0,a1
 
move.w x_pos(a0),d2
 
move.w y_pos(a0),d3
 
bset #7,status(a0)
 
bra.s loc_285F4
 
</asm>
 
 
and replace it with:
 
<asm>
 
loc_285D2:
 
moveq #7,d1
 
moveq #0,d4
 
jmp loc2_285D2
 
</asm>
 
 
Then find:
 
<asm>
 
loc_286A2:
 
move.w d1,objoff_36(a0)
 
add.w objoff_34(a0),d1
 
lea byte_28726(pc,d1.w),a1
 
move.b (a1)+,d0
 
ext.w d0
 
add.w objoff_32(a0),d0
 
move.w d0,x_pos(a0)
 
move.b (a1)+,d0
 
ext.w d0
 
add.w objoff_30(a0),d0
 
move.w d0,y_pos(a0)
 
move.b (a1)+,mapping_frame(a0)
 
</asm>
 
 
and change it to:
 
<asm>
 
loc_286A2:
 
move.w d1,objoff_36(a0)
 
add.w objoff_34(a0),d1
 
jmp loc2_286A2
 
</asm>
 
 
Now add this to the end of your ROM:
 
<asm>
 
; ===========================================================================
 
 
loc2_A5A6:
 
move.l word_A656(pc,d0.w),d1
 
move.w d1,y_pos(a0)
 
swap d1
 
move.w d1,x_pos(a0)
 
; ===========================================================================
 
 
word_A656:
 
dc.w  $A0,  $70,  $B0, $70,  $B6,  $71,  $BC, $72
 
dc.w  $C4,  $74,  $C8, $75,  $CA,  $76,  $CC, $77; 8
 
dc.w  $CE,  $78,  $D0, $79,  $D2,  $7A,  $D4, $7B; 16
 
dc.w  $D6,  $7C,  $D9, $7E,  $DC,  $81,  $DE, $84; 24
 
dc.w  $E1,  $87,  $E4, $8B,  $E7,  $8F,  $EC, $94; 32
 
dc.w  $F0,  $99,  $F5, $9D,  $F9,  $A4, $100, $AC; 40
 
dc.w  $108,  $B8, $112, $C4, $11F,  $D3, $12C, $FA; 48
 
; ===========================================================================
 
 
loc2_A6C6:
 
move.l word_A766(pc,d0.w),d1
 
move.w d1,y_pos(a0)
 
swap d1
 
move.w d1,x_pos(a0)
 
lsr.w #2,d0
 
move.b byte_A748(pc,d0.w),mapping_frame(a0)
 
; ===========================================================================
 
 
loc2_A70C:
 
move.l word_A766(pc,d0.w),d0
 
lea (MainCharacter).w,a1 ; a1=character
 
move.w d0,y_pos(a1)
 
swap d0
 
move.w d0,x_pos(a1)
 
rts
 
; ===========================================================================
 
 
byte_A748:
 
dc.b $12,$12,$12,$12,$12,$12,$12,$13,$13,$13,$13,$13,$13,$14,$14,$14
 
dc.b $14,$15,$15,$15,$16,$16,$16,$16,$16,$16,$16,$16,$16,  0; 16
 
; ===========================================================================
 
 
word_A766:
 
dc.w  $C0
 
dc.w  $90 ; 1
 
dc.w  $B0 ; 2
 
dc.w  $91 ; 3
 
dc.w  $A8 ; 4
 
dc.w  $92 ; 5
 
dc.w  $9B ; 6
 
dc.w  $96 ; 7
 
dc.w  $99 ; 8
 
dc.w  $98 ; 9
 
dc.w  $98 ; 10
 
dc.w  $99 ; 11
 
dc.w  $99 ; 12
 
dc.w  $9A ; 13
 
dc.w  $9B ; 14
 
dc.w  $9C ; 15
 
dc.w  $9F ; 16
 
dc.w  $9E ; 17
 
dc.w  $A4 ; 18
 
dc.w  $A0 ; 19
 
dc.w  $AC ; 20
 
dc.w  $A2 ; 21
 
dc.w  $B7 ; 22
 
dc.w  $A5 ; 23
 
dc.w  $C4 ; 24
 
dc.w  $A8 ; 25
 
dc.w  $D3 ; 26
 
dc.w  $AB ; 27
 
dc.w  $DE ; 28
 
dc.w  $AE ; 29
 
dc.w  $E8 ; 30
 
dc.w  $B0 ; 31
 
dc.w  $EF ; 32
 
dc.w  $B2 ; 33
 
dc.w  $F4 ; 34
 
dc.w  $B5 ; 35
 
dc.w  $F9 ; 36
 
dc.w  $B8 ; 37
 
dc.w  $FC ; 38
 
dc.w  $BB ; 39
 
dc.w  $FE ; 40
 
dc.w  $BE ; 41
 
dc.w  $FF ; 42
 
dc.w  $C0 ; 43
 
dc.w  $100 ; 44
 
dc.w  $C2 ; 45
 
dc.w  $101 ; 46
 
dc.w  $C5 ; 47
 
dc.w  $102 ; 48
 
dc.w  $C8 ; 49
 
dc.w  $102 ; 50
 
dc.w  $CC ; 51
 
dc.w  $101 ; 52
 
dc.w  $D1 ; 53
 
dc.w  $FD ; 54
 
dc.w  $D7 ; 55
 
dc.w  $F9 ; 56
 
dc.w  $DE ; 57
 
dc.w  $F9 ; 58
 
dc.w  $118 ; 59
 
; ===========================================================================
 
 
loc2_285D2:
 
lea (byte_28726).l,a2
 
movea.l a0,a1
 
move.w x_pos(a0),d2
 
move.w y_pos(a0),d3
 
bset #7,status(a0)
 
bra.s JmpTo_loc_285F4
 
 
JmpTo_loc_285F4
 
jmp loc_285F4
 
; ===========================================================================
 
 
loc2_286A2
 
lea byte_28726(pc,d1.w),a1 ; addressing not needed
 
move.b (a1)+,d0
 
ext.w d0
 
add.w objoff_32(a0),d0
 
move.w d0,x_pos(a0)
 
move.b (a1)+,d0
 
ext.w d0
 
add.w objoff_30(a0),d0
 
move.w d0,y_pos(a0)
 
move.b (a1)+,mapping_frame(a0)
 
; ===========================================================================
 
 
byte_28726:
 
dc.b  0,$B8,  0,$32,$CE,  4,$48,  0,  8,$32,$32, $C,  0,$48,$10,$CE; 16
 
dc.b $32,$14,$B8,  0,$18,$CE,$CE,$1C, $D,$B8,  1,$3F,$DA,  5,$48, $C; 32
 
dc.b  9,$27,$3C, $D,$F3,$48,$11,$C1,$26,$15,$B8,$F4,$19,$D9,$C4,$1D; 48
 
dc.b $19,$BC,  2,$46,$E9,  6,$46,$17, $A,$19,$44, $E,$E7,$44,$12,$BA; 64
 
dc.b $17,$16,$BA,$E9,$1A,$E7,$BC,$1E,$27,$C4,  3,$48,$F4,  7,$3F,$26; 80
 
dc.b  $B, $D,$48, $F,$D9,$3C,$13,$B8, $C,$17,$C1,$DA,$1B,$F3,$B8,$1F; 96
 
; ===========================================================================
 
</asm>
 
 
Then delete any index pasted here to prevent a double defined error while building.
 
 
==Extending the demo list==
 
now we will prepare everything so that we can put in new demo files for our new levels.
 
 
find:
 
<asm>; off_4948:
 
DemoScriptPointers:
 
dc.l Demo_EHZ ; $00
 
dc.l Demo_EHZ ; $01
 
dc.l Demo_EHZ ; $02
 
dc.l Demo_EHZ ; $03
 
dc.l Demo_EHZ ; $04
 
dc.l Demo_EHZ ; $05
 
dc.l Demo_EHZ ; $06
 
dc.l Demo_EHZ ; $07
 
dc.l Demo_EHZ ; $08
 
dc.l Demo_EHZ ; $09
 
dc.l Demo_EHZ ; $0A
 
dc.l Demo_EHZ ; $0B
 
dc.l Demo_CNZ ; $0C
 
dc.l Demo_CPZ ; $0D
 
dc.l Demo_EHZ ; $0E
 
dc.l Demo_ARZ ; $0F
 
dc.l Demo_EHZ ; $10
 
</asm>
 
 
and insert after it:
 
<asm>
 
dc.l Demo_EHZ ; $11
 
dc.l Demo_EHZ ; $12
 
dc.l Demo_EHZ ; $13
 
dc.l Demo_EHZ ; $14
 
dc.l Demo_EHZ ; $15
 
dc.l Demo_EHZ ; $16
 
dc.l Demo_EHZ ; $17
 
dc.l Demo_EHZ ; $18
 
dc.l Demo_EHZ ; $19
 
dc.l Demo_EHZ ; $1A
 
dc.l Demo_EHZ ; $1B
 
dc.l Demo_EHZ ; $1C
 
dc.l Demo_EHZ ; $1D
 
dc.l Demo_EHZ ; $1E
 
dc.l Demo_EHZ ; $1F
 
dc.l Demo_EHZ ; $20
 
</asm>
 
 
==Extending the Collision index==
 
You would want solidity in your new zones, wouldn't you?  Here we will extend the solidity list so that our extra levels can have solid ground for that blue hedgehog to walk on.
 
 
lets start off by extending the primary collision index.  find:
 
<asm>
 
Off_ColP:
 
dc.l ColP_EHZHTZ
 
dc.l Off_Level ; 1
 
dc.l ColP_MTZ ; 2
 
dc.l Off_Level ; 3
 
dc.l ColP_MTZ ; 4
 
dc.l ColP_MTZ ; 5
 
dc.l ColP_WFZSCZ ; 6
 
dc.l ColP_EHZHTZ ; 7
 
dc.l ColP_OOZ ; 8
 
dc.l Off_Level ; 9
 
dc.l ColP_OOZ ; 10
 
dc.l ColP_MCZ ; 11
 
dc.l ColP_CNZ ; 12
 
dc.l ColP_CPZDEZ ; 13
 
dc.l ColP_CPZDEZ ; 14
 
dc.l ColP_ARZ ; 15
 
dc.l ColP_WFZSCZ ; 16
 
</asm>
 
 
and replace it with:
 
<asm>
 
Off_ColP:
 
dc.l ColP_EHZHTZ ;00
 
dc.l ColP_EHZHTZ ;01
 
dc.l ColP_MTZ ;02
 
dc.l ColP_MTZ ;03
 
dc.l ColP_MTZ ;04
 
dc.l ColP_MTZ ;05
 
dc.l ColP_WFZSCZ ;06
 
dc.l ColP_EHZHTZ ;07
 
dc.l ColP_OOZ ;08
 
dc.l ColP_OOZ ;09
 
dc.l ColP_OOZ ;0A
 
dc.l ColP_MCZ ;0B
 
dc.l ColP_CNZ ;0C
 
dc.l ColP_CPZDEZ ;0D
 
dc.l ColP_CPZDEZ ;0E
 
dc.l ColP_ARZ ;0F
 
dc.l ColP_WFZSCZ ;10
 
dc.l ColP_Lev11 ;11
 
dc.l ColP_Lev12 ;12
 
dc.l ColP_Lev13 ;13
 
dc.l ColP_Lev14 ;14
 
dc.l ColP_Lev15 ;15
 
dc.l ColP_Lev16 ;16
 
dc.l ColP_Lev17 ;17
 
dc.l ColP_Lev18 ;18
 
dc.l ColP_Lev19 ;19
 
dc.l ColP_Lev1A ;1A
 
dc.l ColP_Lev1B ;1B
 
dc.l ColP_Lev1C ;1C
 
dc.l ColP_Lev1D ;1D
 
dc.l ColP_Lev1E ;1E
 
dc.l ColP_Lev1F ;1F
 
dc.l ColP_Lev20 ;20
 
</asm>
 
 
now we will extend the secondary collision index. find:
 
<asm>
 
Off_ColS:
 
dc.l ColS_EHZHTZ
 
dc.l Off_Level ; 1
 
dc.l ColP_MTZ ; 2
 
dc.l Off_Level ; 3
 
dc.l ColP_MTZ ; 4
 
dc.l ColP_MTZ ; 5
 
dc.l ColS_WFZSCZ ; 6
 
dc.l ColS_EHZHTZ ; 7
 
dc.l ColP_OOZ ; 8
 
dc.l Off_Level ; 9
 
dc.l ColP_OOZ ; 10
 
dc.l ColP_MCZ ; 11
 
dc.l ColS_CNZ ; 12
 
dc.l ColS_CPZDEZ ; 13
 
dc.l ColS_CPZDEZ ; 14
 
dc.l ColS_ARZ ; 15
 
dc.l ColS_WFZSCZ ; 16
 
</asm>
 
 
we will replace it with:
 
<asm>
 
Off_ColS:
 
dc.l ColS_EHZHTZ ;00
 
dc.l ColP_EHZHTZ ;01
 
dc.l ColP_MTZ ;02
 
dc.l Off_Level ;03
 
dc.l ColP_MTZ ;04
 
dc.l ColP_MTZ ;05
 
dc.l ColS_WFZSCZ ;06
 
dc.l ColS_EHZHTZ ;07
 
dc.l ColP_OOZ ;08
 
dc.l Off_Level ;09
 
dc.l ColP_OOZ ;0A
 
dc.l ColP_MCZ ;0B
 
dc.l ColS_CNZ ;0C
 
dc.l ColS_CPZDEZ ;0D
 
dc.l ColS_CPZDEZ ;0E
 
dc.l ColS_ARZ ;0F
 
dc.l ColS_WFZSCZ ;10
 
dc.l ColS_Lev11 ;11
 
dc.l ColS_Lev12 ;12
 
dc.l ColS_Lev13 ;13
 
dc.l ColS_Lev14 ;14
 
dc.l ColS_Lev15 ;15
 
dc.l ColS_Lev16 ;16
 
dc.l ColS_Lev17 ;17
 
dc.l ColS_Lev18 ;18
 
dc.l ColS_Lev19 ;19
 
dc.l ColS_Lev1A ;1A
 
dc.l ColS_Lev1B ;1B
 
dc.l ColS_Lev1C ;1C
 
dc.l ColS_Lev1D ;1D
 
dc.l ColS_Lev1E ;1E
 
dc.l ColS_Lev1F ;1F
 
dc.l ColS_Lev20 ;20
 
</asm>
 
 
Now, in order to fix a bug that makes collision swaps more buggy than a savestate loaded from another game, we need to do some splitting and moving.
 
 
Find:
 
<asm>
 
LoadCollisionIndexes:
 
moveq #0,d0
 
move.b (Current_Zone).w,d0
 
lsl.w #2,d0
 
move.l #Primary_Collision,(Collision_addr).w
 
move.w d0,-(sp)
 
movea.l Off_ColP(pc,d0.w),a0
 
lea (Primary_Collision).w,a1
 
bsr.w KosDec
 
move.w (sp)+,d0
 
movea.l Off_ColS(pc,d0.w),a0
 
lea (Secondary_Collision).w,a1
 
bra.w KosDec
 
</asm>
 
 
and replace it with:
 
<asm>
 
moveq #0,d0
 
move.b (Current_Zone).w,d0
 
lsl.w #2,d0
 
move.l #Primary_Collision,(Collision_addr).w
 
move.w d0,-(sp)
 
movea.l Off_ColP(pc,d0.w),a0
 
lea (Primary_Collision).w,a1
 
bsr.w KosDec
 
move.w (sp)+,d0
 
jsr LoadSecondaryCollisionIndexes
 
</asm>
 
 
Then go to the end of the ROM and add the following:
 
<asm>
 
LoadSecondaryCollisionIndexes:
 
movea.l Off_ColS(pc,d0.w),a0
 
lea (Secondary_Collision).w,a1
 
bra.w JmpTo3_KosDec
 
 
JmpTo3_KosDec:
 
jmp KosDec
 
</asm>
 
 
then Off_ColS index directly below that location.
 
 
next we need to define the symbols (duh).  find:
 
<asm>
 
; WFZ/SCZ secondary 16x16 collision index (Kozinski compression)
 
ColS_WFZSCZ: BINCLUDE "collision/WFZ and SCZ secondary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
</asm>
 
and we will insert the new collision entries after that as follows:
 
<asm>
 
; new level primary 16x16 collision index (Kozinski compression)
 
ColP_Lev11: BINCLUDE "collision/Lev11 primary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level secondary 16x16 collision index (Kozinski compression)
 
ColS_Lev11: BINCLUDE "collision/Lev11 secondary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level primary 16x16 collision index (Kozinski compression)
 
ColP_Lev12: BINCLUDE "collision/Lev12 primary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level secondary 16x16 collision index (Kozinski compression)
 
ColS_Lev12: BINCLUDE "collision/Lev12 secondary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level primary 16x16 collision index (Kozinski compression)
 
ColP_Lev13: BINCLUDE "collision/Lev13 primary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level secondary 16x16 collision index (Kozinski compression)
 
ColS_Lev13: BINCLUDE "collision/Lev13 secondary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level primary 16x16 collision index (Kozinski compression)
 
ColP_Lev14: BINCLUDE "collision/Lev14 primary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level secondary 16x16 collision index (Kozinski compression)
 
ColS_Lev14: BINCLUDE "collision/Lev14 secondary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level primary 16x16 collision index (Kozinski compression)
 
ColP_Lev15: BINCLUDE "collision/Lev15 primary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level secondary 16x16 collision index (Kozinski compression)
 
ColS_Lev15: BINCLUDE "collision/Lev15 secondary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level primary 16x16 collision index (Kozinski compression)
 
ColP_Lev16: BINCLUDE "collision/Lev16 primary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level secondary 16x16 collision index (Kozinski compression)
 
ColS_Lev16: BINCLUDE "collision/Lev16 secondary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level primary 16x16 collision index (Kozinski compression)
 
ColP_Lev17: BINCLUDE "collision/Lev17 primary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level secondary 16x16 collision index (Kozinski compression)
 
ColS_Lev17: BINCLUDE "collision/Lev17 secondary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level primary 16x16 collision index (Kozinski compression)
 
ColP_Lev18: BINCLUDE "collision/Lev18 primary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level secondary 16x16 collision index (Kozinski compression)
 
ColS_Lev18: BINCLUDE "collision/Lev18 secondary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level primary 16x16 collision index (Kozinski compression)
 
ColP_Lev19: BINCLUDE "collision/Lev19 primary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level secondary 16x16 collision index (Kozinski compression)
 
ColS_Lev19: BINCLUDE "collision/Lev19 secondary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level primary 16x16 collision index (Kozinski compression)
 
ColP_Lev1A: BINCLUDE "collision/Lev1A primary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level secondary 16x16 collision index (Kozinski compression)
 
ColS_Lev1A: BINCLUDE "collision/Lev1A secondary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level primary 16x16 collision index (Kozinski compression)
 
ColP_Lev1B: BINCLUDE "collision/Lev1B primary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level secondary 16x16 collision index (Kozinski compression)
 
ColS_Lev1B: BINCLUDE "collision/Lev1B secondary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level primary 16x16 collision index (Kozinski compression)
 
ColP_Lev1C: BINCLUDE "collision/Lev1C primary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level secondary 16x16 collision index (Kozinski compression)
 
ColS_Lev1C: BINCLUDE "collision/Lev1C secondary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level primary 16x16 collision index (Kozinski compression)
 
ColP_Lev1D: BINCLUDE "collision/Lev1D primary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level secondary 16x16 collision index (Kozinski compression)
 
ColS_Lev1D: BINCLUDE "collision/Lev1D secondary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level primary 16x16 collision index (Kozinski compression)
 
ColP_Lev1E: BINCLUDE "collision/Lev1E primary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level secondary 16x16 collision index (Kozinski compression)
 
ColS_Lev1E: BINCLUDE "collision/Lev1E secondary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level primary 16x16 collision index (Kozinski compression)
 
ColP_Lev1F: BINCLUDE "collision/Lev1F primary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level secondary 16x16 collision index (Kozinski compression)
 
ColS_Lev1F: BINCLUDE "collision/Lev1F secondary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level primary 16x16 collision index (Kozinski compression)
 
ColP_Lev20: BINCLUDE "collision/Lev20 primary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
; new level secondary 16x16 collision index (Kozinski compression)
 
ColS_Lev20: BINCLUDE "collision/Lev20 secondary 16x16 collision index.bin"
 
;---------------------------------------------------------------------------------------
 
</asm>
 
 
==Extending Rings Index==
 
Now we add rings to our new levels.
 
 
Find:
 
<asm>
 
Off_Rings:
 
dc.w Rings_EHZ_1 - Off_Rings ; 0  $00
 
dc.w Rings_EHZ_2 - Off_Rings ; 1
 
dc.w Rings_Lev1_1 - Off_Rings ; 2  $01
 
dc.w Rings_Lev1_2 - Off_Rings ; 3
 
dc.w Rings_Lev2_1 - Off_Rings ; 4  $02
 
dc.w Rings_Lev2_2 - Off_Rings ; 5
 
dc.w Rings_Lev3_1 - Off_Rings ; 6  $03
 
dc.w Rings_Lev3_2 - Off_Rings ; 7
 
dc.w Rings_MTZ_1 - Off_Rings ; 8  $04
 
dc.w Rings_MTZ_2 - Off_Rings ; 9
 
dc.w Rings_MTZ_3 - Off_Rings ; 10 $05
 
dc.w Rings_MTZ_4 - Off_Rings ; 11
 
dc.w Rings_WFZ_1 - Off_Rings ; 12 $06
 
dc.w Rings_WFZ_2 - Off_Rings ; 13
 
dc.w Rings_HTZ_1 - Off_Rings ; 14 $07
 
dc.w Rings_HTZ_2 - Off_Rings ; 15
 
dc.w Rings_HPZ_1 - Off_Rings ; 16 $08
 
dc.w Rings_HPZ_2 - Off_Rings ; 17
 
dc.w Rings_Lev9_1 - Off_Rings ; 18 $09
 
dc.w Rings_Lev9_2 - Off_Rings ; 19
 
dc.w Rings_OOZ_1 - Off_Rings ; 20 $0A
 
dc.w Rings_OOZ_2 - Off_Rings ; 21
 
dc.w Rings_MCZ_1 - Off_Rings ; 22 $0B
 
dc.w Rings_MCZ_2 - Off_Rings ; 23
 
dc.w Rings_CNZ_1 - Off_Rings ; 24 $0C
 
dc.w Rings_CNZ_2 - Off_Rings ; 25
 
dc.w Rings_CPZ_1 - Off_Rings ; 26 $0D
 
dc.w Rings_CPZ_2 - Off_Rings ; 27
 
dc.w Rings_DEZ_1 - Off_Rings ; 28 $0E
 
dc.w Rings_DEZ_2 - Off_Rings ; 29
 
dc.w Rings_ARZ_1 - Off_Rings ; 30 $0F
 
dc.w Rings_ARZ_2 - Off_Rings ; 31
 
dc.w Rings_SCZ_1 - Off_Rings ; 32 $10
 
dc.w Rings_SCZ_2 - Off_Rings ; 33
 
</asm>
 
 
and add this to the end:
 
<asm>
 
dc.w Rings_Lev_11_1 - Off_Rings ; 34 $11
 
dc.w Rings_Lev_11_2 - Off_Rings ; 35
 
dc.w Rings_Lev_12_1 - Off_Rings ; 36 $12
 
dc.w Rings_Lev_12_2 - Off_Rings ; 37
 
dc.w Rings_Lev_13_1 - Off_Rings ; 38 $13
 
dc.w Rings_Lev_13_2 - Off_Rings ; 39
 
dc.w Rings_Lev_14_1 - Off_Rings ; 40 $14
 
dc.w Rings_Lev_14_2 - Off_Rings ; 41
 
dc.w Rings_Lev_15_1 - Off_Rings ; 42 $15
 
dc.w Rings_Lev_15_2 - Off_Rings ; 43
 
dc.w Rings_Lev_16_1 - Off_Rings ; 44 $16
 
dc.w Rings_Lev_16_2 - Off_Rings ; 45
 
dc.w Rings_Lev_17_1 - Off_Rings ; 46 $17
 
dc.w Rings_Lev_17_2 - Off_Rings ; 47
 
dc.w Rings_Lev_18_1 - Off_Rings ; 48 $18
 
dc.w Rings_Lev_18_2 - Off_Rings ; 49
 
dc.w Rings_Lev_19_1 - Off_Rings ; 50 $19
 
dc.w Rings_Lev_19_2 - Off_Rings ; 51
 
dc.w Rings_Lev_1A_1 - Off_Rings ; 52 $1A
 
dc.w Rings_Lev_1A_2 - Off_Rings ; 53
 
dc.w Rings_Lev_1B_1 - Off_Rings ; 54 $1B
 
dc.w Rings_Lev_1B_2 - Off_Rings ; 55
 
dc.w Rings_Lev_1C_1 - Off_Rings ; 56 $1C
 
dc.w Rings_Lev_1C_2 - Off_Rings ; 57
 
dc.w Rings_Lev_1D_1 - Off_Rings ; 58 $1D
 
dc.w Rings_Lev_1D_2 - Off_Rings ; 59
 
dc.w Rings_Lev_1E_1 - Off_Rings ; 60 $1E
 
dc.w Rings_Lev_1E_2 - Off_Rings ; 61
 
dc.w Rings_Lev_1F_1 - Off_Rings ; 62 $1F
 
dc.w Rings_Lev_1F_2 - Off_Rings ; 63
 
dc.w Rings_Lev_20_1 - Off_Rings ; 64 $20
 
dc.w Rings_Lev_20_2 - Off_Rings ; 65
 
</asm>
 
 
Now find:
 
<asm>
 
Rings_EHZ_1: BINCLUDE "level/rings/EHZ_1.bin"
 
Rings_EHZ_2: BINCLUDE "level/rings/EHZ_2.bin"
 
Rings_Lev1_1: BINCLUDE "level/rings/01_1.bin"
 
Rings_Lev1_2: BINCLUDE "level/rings/01_2.bin"
 
Rings_Lev2_1: BINCLUDE "level/rings/02_1.bin"
 
Rings_Lev2_2: BINCLUDE "level/rings/02_2.bin"
 
Rings_Lev3_1: BINCLUDE "level/rings/03_1.bin"
 
Rings_Lev3_2: BINCLUDE "level/rings/03_2.bin"
 
Rings_MTZ_1: BINCLUDE "level/rings/MTZ_1.bin"
 
Rings_MTZ_2: BINCLUDE "level/rings/MTZ_2.bin"
 
Rings_MTZ_3: BINCLUDE "level/rings/MTZ_3.bin"
 
Rings_MTZ_4: BINCLUDE "level/rings/MTZ_4.bin"
 
Rings_HTZ_1: BINCLUDE "level/rings/HTZ_1.bin"
 
Rings_HTZ_2: BINCLUDE "level/rings/HTZ_2.bin"
 
Rings_HPZ_1: BINCLUDE "level/rings/HPZ_1.bin"
 
Rings_HPZ_2: BINCLUDE "level/rings/HPZ_2.bin"
 
Rings_Lev9_1: BINCLUDE "level/rings/09_1.bin"
 
Rings_Lev9_2: BINCLUDE "level/rings/09_2.bin"
 
Rings_OOZ_1: BINCLUDE "level/rings/OOZ_1.bin"
 
Rings_OOZ_2: BINCLUDE "level/rings/OOZ_2.bin"
 
Rings_MCZ_1: BINCLUDE "level/rings/MCZ_1.bin"
 
Rings_MCZ_2: BINCLUDE "level/rings/MCZ_2.bin"
 
Rings_CNZ_1: BINCLUDE "level/rings/CNZ_1.bin"
 
Rings_CNZ_2: BINCLUDE "level/rings/CNZ_2.bin"
 
Rings_CPZ_1: BINCLUDE "level/rings/CPZ_1.bin"
 
Rings_CPZ_2: BINCLUDE "level/rings/CPZ_2.bin"
 
Rings_DEZ_1: BINCLUDE "level/rings/DEZ_1.bin"
 
Rings_DEZ_2: BINCLUDE "level/rings/DEZ_2.bin"
 
Rings_WFZ_1: BINCLUDE "level/rings/WFZ_1.bin"
 
Rings_WFZ_2: BINCLUDE "level/rings/WFZ_2.bin"
 
Rings_ARZ_1: BINCLUDE "level/rings/ARZ_1.bin"
 
Rings_ARZ_2: BINCLUDE "level/rings/ARZ_2.bin"
 
Rings_SCZ_1: BINCLUDE "level/rings/SCZ_1.bin"
 
Rings_SCZ_2: BINCLUDE "level/rings/SCZ_2.bin"
 
</asm>
 
 
and add this to the end:
 
<asm>
 
Rings_Lev_11_1: BINCLUDE "level/rings/Lev_11_1.bin"
 
Rings_Lev_11_2: BINCLUDE "level/rings/Lev_11_2.bin"
 
Rings_Lev_12_1: BINCLUDE "level/rings/Lev_12_1.bin"
 
Rings_Lev_12_2: BINCLUDE "level/rings/Lev_12_2.bin"
 
Rings_Lev_13_1: BINCLUDE "level/rings/Lev_13_1.bin"
 
Rings_Lev_13_2: BINCLUDE "level/rings/Lev_13_2.bin"
 
Rings_Lev_14_1: BINCLUDE "level/rings/Lev_14_1.bin"
 
Rings_Lev_14_2: BINCLUDE "level/rings/Lev_14_2.bin"
 
Rings_Lev_15_1: BINCLUDE "level/rings/Lev_15_1.bin"
 
Rings_Lev_15_2: BINCLUDE "level/rings/Lev_15_2.bin"
 
Rings_Lev_16_1: BINCLUDE "level/rings/Lev_16_1.bin"
 
Rings_Lev_16_2: BINCLUDE "level/rings/Lev_16_2.bin"
 
Rings_Lev_17_1: BINCLUDE "level/rings/Lev_17_1.bin"
 
Rings_Lev_17_2: BINCLUDE "level/rings/Lev_17_2.bin"
 
Rings_Lev_18_1: BINCLUDE "level/rings/Lev_18_1.bin"
 
Rings_Lev_18_2: BINCLUDE "level/rings/Lev_18_2.bin"
 
Rings_Lev_19_1: BINCLUDE "level/rings/Lev_19_1.bin"
 
Rings_Lev_19_2: BINCLUDE "level/rings/Lev_19_2.bin"
 
Rings_Lev_1A_1: BINCLUDE "level/rings/Lev_1A_1.bin"
 
Rings_Lev_1A_2: BINCLUDE "level/rings/Lev_1A_2.bin"
 
Rings_Lev_1B_1: BINCLUDE "level/rings/Lev_1B_1.bin"
 
Rings_Lev_1B_2: BINCLUDE "level/rings/Lev_1B_2.bin"
 
Rings_Lev_1C_1: BINCLUDE "level/rings/Lev_1C_1.bin"
 
Rings_Lev_1C_2: BINCLUDE "level/rings/Lev_1C_2.bin"
 
Rings_Lev_1D_1: BINCLUDE "level/rings/Lev_1D_1.bin"
 
Rings_Lev_1D_2: BINCLUDE "level/rings/Lev_1D_2.bin"
 
Rings_Lev_1E_1: BINCLUDE "level/rings/Lev_1E_1.bin"
 
Rings_Lev_1E_2: BINCLUDE "level/rings/Lev_1E_2.bin"
 
Rings_Lev_1F_1: BINCLUDE "level/rings/Lev_1F_1.bin"
 
Rings_Lev_1F_2: BINCLUDE "level/rings/Lev_1F_2.bin"
 
Rings_Lev_20_1: BINCLUDE "level/rings/Lev_20_1.bin"
 
Rings_Lev_20_2: BINCLUDE "level/rings/Lev_20_2.bin"
 
</asm>
 
 
Create the necessary blank files then edit them as needed.
 
 
==Extending the object index==
 
This is similar to extending the ring index.
 
 
Find:
 
<asm>
 
Off_Objects:
 
dc.w Objects_EHZ_1 - Off_Objects ; 0  $00
 
dc.w Objects_EHZ_2 - Off_Objects ; 1
 
dc.w Objects_Null3 - Off_Objects ; 2  $01
 
dc.w Objects_Null3 - Off_Objects ; 3
 
dc.w Objects_Null3 - Off_Objects ; 4  $02
 
dc.w Objects_Null3 - Off_Objects ; 5
 
dc.w Objects_Null3 - Off_Objects ; 6  $03
 
dc.w Objects_Null3 - Off_Objects ; 7
 
dc.w Objects_MTZ_1 - Off_Objects ; 8  $04
 
dc.w Objects_MTZ_2 - Off_Objects ; 9
 
dc.w Objects_MTZ_3 - Off_Objects ; 10 $05
 
dc.w Objects_MTZ_3 - Off_Objects ; 11
 
dc.w Objects_WFZ_1 - Off_Objects ; 12 $06
 
dc.w Objects_WFZ_2 - Off_Objects ; 13
 
dc.w Objects_HTZ_1 - Off_Objects ; 14 $07
 
dc.w Objects_HTZ_2 - Off_Objects ; 15
 
dc.w Objects_HPZ_1 - Off_Objects ; 16 $08
 
dc.w Objects_HPZ_2 - Off_Objects ; 17
 
dc.w Objects_Null3 - Off_Objects ; 18 $09
 
dc.w Objects_Null3 - Off_Objects ; 19
 
dc.w Objects_OOZ_1 - Off_Objects ; 20 $0A
 
dc.w Objects_OOZ_2 - Off_Objects ; 21
 
dc.w Objects_MCZ_1 - Off_Objects ; 22 $0B
 
dc.w Objects_MCZ_2 - Off_Objects ; 23
 
dc.w Objects_CNZ_1 - Off_Objects ; 24 $0C
 
dc.w Objects_CNZ_2 - Off_Objects ; 25
 
dc.w Objects_CPZ_1 - Off_Objects ; 26 $0D
 
dc.w Objects_CPZ_2 - Off_Objects ; 27
 
dc.w Objects_DEZ_1 - Off_Objects ; 28 $0E
 
dc.w Objects_DEZ_2 - Off_Objects ; 29
 
dc.w Objects_ARZ_1 - Off_Objects ; 30 $0F
 
dc.w Objects_ARZ_2 - Off_Objects ; 31
 
dc.w Objects_SCZ_1 - Off_Objects ; 32 $10
 
dc.w Objects_SCZ_2 - Off_Objects ; 33
 
</asm>
 
 
then add this to the end:
 
<asm>
 
dc.w Objects_Lev_11_1 - Off_Objects ; 34 $11
 
dc.w Objects_Lev_11_2 - Off_Objects ; 35
 
dc.w Objects_Lev_12_1 - Off_Objects ; 36 $12
 
dc.w Objects_Lev_12_2 - Off_Objects ; 17
 
dc.w Objects_Lev_13_1 - Off_Objects ; 38 $13
 
dc.w Objects_Lev_13_2 - Off_Objects ; 39
 
dc.w Objects_Lev_14_1 - Off_Objects ; 40 $14
 
dc.w Objects_Lev_14_2 - Off_Objects ; 41
 
dc.w Objects_Lev_15_1 - Off_Objects ; 42 $15
 
dc.w Objects_Lev_15_2 - Off_Objects ; 43
 
dc.w Objects_Lev_16_1 - Off_Objects ; 44 $16
 
dc.w Objects_Lev_16_2 - Off_Objects ; 45
 
dc.w Objects_Lev_17_1 - Off_Objects ; 46 $17
 
dc.w Objects_Lev_17_2 - Off_Objects ; 47
 
dc.w Objects_Lev_18_1 - Off_Objects ; 48 $18
 
dc.w Objects_Lev_18_2 - Off_Objects ; 49
 
dc.w Objects_Lev_19_1 - Off_Objects ; 50 $19
 
dc.w Objects_Lev_19_2 - Off_Objects ; 51
 
dc.w Objects_Lev_1A_1 - Off_Objects ; 52 $1A
 
dc.w Objects_Lev_1A_2 - Off_Objects ; 53
 
dc.w Objects_Lev_1B_1 - Off_Objects ; 54 $1B
 
dc.w Objects_Lev_1B_2 - Off_Objects ; 55
 
dc.w Objects_Lev_1C_1 - Off_Objects ; 56 $1C
 
dc.w Objects_Lev_1C_2 - Off_Objects ; 57
 
dc.w Objects_Lev_1D_1 - Off_Objects ; 58 $1D
 
dc.w Objects_Lev_1D_2 - Off_Objects ; 59
 
dc.w Objects_Lev_1E_1 - Off_Objects ; 60 $1E
 
dc.w Objects_Lev_1E_2 - Off_Objects ; 61
 
dc.w Objects_Lev_1F_1 - Off_Objects ; 62 $1F
 
dc.w Objects_Lev_1F_2 - Off_Objects ; 63
 
dc.w Objects_Lev_20_1 - Off_Objects ; 64 $20
 
dc.w Objects_Lev_20_2 - Off_Objects ; 65
 
</asm>
 
 
Then find:
 
<asm>
 
;Objects_Null1: ; unused
 
BINCLUDE "level/objects/Null_1.bin"
 
 
Objects_EHZ_1: BINCLUDE "level/objects/EHZ_1.bin"
 
Objects_EHZ_2: BINCLUDE "level/objects/EHZ_2.bin"
 
Objects_MTZ_1: BINCLUDE "level/objects/MTZ_1.bin"
 
Objects_MTZ_2: BINCLUDE "level/objects/MTZ_2.bin"
 
Objects_MTZ_3: BINCLUDE "level/objects/MTZ_3.bin"
 
Objects_WFZ_1: BINCLUDE "level/objects/WFZ_1.bin"
 
Objects_WFZ_2: BINCLUDE "level/objects/WFZ_2.bin"
 
Objects_HTZ_1: BINCLUDE "level/objects/HTZ_1.bin"
 
Objects_HTZ_2: BINCLUDE "level/objects/HTZ_2.bin"
 
Objects_HPZ_1: BINCLUDE "level/objects/HPZ_1.bin"
 
Objects_HPZ_2: BINCLUDE "level/objects/HPZ_2.bin"
 
 
;Objects_Null2: ; unused
 
BINCLUDE "level/objects/Null_2.bin"
 
 
Objects_OOZ_1: BINCLUDE "level/objects/OOZ_1.bin"
 
Objects_OOZ_2: BINCLUDE "level/objects/OOZ_2.bin"
 
Objects_MCZ_1: BINCLUDE "level/objects/MCZ_1.bin"
 
Objects_MCZ_2: BINCLUDE "level/objects/MCZ_2.bin"
 
Objects_CNZ_1: BINCLUDE "level/objects/CNZ_1.bin"
 
Objects_CNZ_2: BINCLUDE "level/objects/CNZ_2.bin"
 
Objects_CPZ_1: BINCLUDE "level/objects/CPZ_1.bin"
 
Objects_CPZ_2: BINCLUDE "level/objects/CPZ_2.bin"
 
Objects_DEZ_1: BINCLUDE "level/objects/DEZ_1.bin"
 
Objects_DEZ_2: BINCLUDE "level/objects/DEZ_2.bin"
 
Objects_ARZ_1: BINCLUDE "level/objects/ARZ_1.bin"
 
Objects_ARZ_2: BINCLUDE "level/objects/ARZ_2.bin"
 
Objects_SCZ_1: BINCLUDE "level/objects/SCZ_1.bin"
 
Objects_SCZ_2: BINCLUDE "level/objects/SCZ_2.bin"
 
Objects_Null3: BINCLUDE "level/objects/Null_3.bin"
 
 
;Objects_Null4: ; unused
 
BINCLUDE "level/objects/Null_4.bin"
 
;Objects_Null5: ; unused
 
BINCLUDE "level/objects/Null_5.bin"
 
;Objects_Null6: ; unused
 
BINCLUDE "level/objects/Null_6.bin"
 
</asm>
 
 
then add this to the end:
 
 
<asm>
 
Objects_Lev_11_1: BINCLUDE "level/objects/Lev_11_1.bin"
 
Objects_Lev_11_2: BINCLUDE "level/objects/Lev_11_2.bin"
 
Objects_Lev_12_1: BINCLUDE "level/objects/Lev_12_1.bin"
 
Objects_Lev_12_2: BINCLUDE "level/objects/Lev_12_2.bin"
 
Objects_Lev_13_1: BINCLUDE "level/objects/Lev_13_1.bin"
 
Objects_Lev_13_2: BINCLUDE "level/objects/Lev_13_2.bin"
 
Objects_Lev_14_1: BINCLUDE "level/objects/Lev_14_1.bin"
 
Objects_Lev_14_2: BINCLUDE "level/objects/Lev_14_2.bin"
 
Objects_Lev_15_1: BINCLUDE "level/objects/Lev_15_1.bin"
 
Objects_Lev_15_2: BINCLUDE "level/objects/Lev_15_2.bin"
 
Objects_Lev_16_1: BINCLUDE "level/objects/Lev_16_1.bin"
 
Objects_Lev_16_2: BINCLUDE "level/objects/Lev_16_2.bin"
 
Objects_Lev_17_1: BINCLUDE "level/objects/Lev_17_1.bin"
 
Objects_Lev_17_2: BINCLUDE "level/objects/Lev_17_2.bin"
 
Objects_Lev_18_1: BINCLUDE "level/objects/Lev_18_1.bin"
 
Objects_Lev_18_2: BINCLUDE "level/objects/Lev_18_2.bin"
 
Objects_Lev_19_1: BINCLUDE "level/objects/Lev_19_1.bin"
 
Objects_Lev_19_2: BINCLUDE "level/objects/Lev_19_2.bin"
 
Objects_Lev_1A_1: BINCLUDE "level/objects/Lev_1A_1.bin"
 
Objects_Lev_1A_2: BINCLUDE "level/objects/Lev_1A_2.bin"
 
Objects_Lev_1B_1: BINCLUDE "level/objects/Lev_1B_1.bin"
 
Objects_Lev_1B_2: BINCLUDE "level/objects/Lev_1B_2.bin"
 
Objects_Lev_1C_1: BINCLUDE "level/objects/Lev_1C_1.bin"
 
Objects_Lev_1C_2: BINCLUDE "level/objects/Lev_1C_2.bin"
 
Objects_Lev_1D_1: BINCLUDE "level/objects/Lev_1D_1.bin"
 
Objects_Lev_1D_2: BINCLUDE "level/objects/Lev_1D_2.bin"
 
Objects_Lev_1E_1: BINCLUDE "level/objects/Lev_1E_1.bin"
 
Objects_Lev_1E_2: BINCLUDE "level/objects/Lev_1E_2.bin"
 
Objects_Lev_1F_1: BINCLUDE "level/objects/Lev_1F_1.bin"
 
Objects_Lev_1F_2: BINCLUDE "level/objects/Lev_1F_2.bin"
 
Objects_Lev_20_1: BINCLUDE "level/objects/Lev_20_1.bin"
 
Objects_Lev_20_2: BINCLUDE "level/objects/Lev_20_2.bin"
 
</asm>
 
 
==Extending tiles and patterns index==
 
Find:
 
<asm>
 
;----------------------------------------------------------------------------------
 
; EHZ 16x16 block mappings (Kosinski compression) ; was: (Kozinski compression)
 
BM16_EHZ: BINCLUDE "mappings/16x16/EHZ.bin"
 
;-----------------------------------------------------------------------------------
 
; EHZ/HTZ main level patterns (Kosinski compression)
 
; ArtKoz_95C24:
 
ArtKos_EHZ: BINCLUDE "art/kosinski/EHZ_HTZ.bin"
 
;-----------------------------------------------------------------------------------
 
; HTZ 16x16 block mappings (Kosinski compression)
 
BM16_HTZ: BINCLUDE "mappings/16x16/HTZ.bin"
 
;-----------------------------------------------------------------------------------
 
; HTZ pattern suppliment to EHZ level patterns (Kosinski compression)
 
; ArtKoz_98AB4:
 
ArtKos_HTZ: BINCLUDE "art/kosinski/HTZ_Supp.bin"
 
;-----------------------------------------------------------------------------------
 
; EHZ/HTZ 128x128 block mappings (Kosinski compression)
 
BM128_EHZ: BINCLUDE "mappings/128x128/EHZ_HTZ.bin"
 
;-----------------------------------------------------------------------------------
 
; MTZ 16x16 block mappings (Kosinski compression)
 
BM16_MTZ: BINCLUDE "mappings/16x16/MTZ.bin"
 
;-----------------------------------------------------------------------------------
 
; MTZ main level patterns (Kosinski compression)
 
; ArtKoz_9DB64:
 
ArtKos_MTZ: BINCLUDE "art/kosinski/MTZ.bin"
 
;-----------------------------------------------------------------------------------
 
; MTZ 128x128 block mappings (Kosinski compression)
 
BM128_MTZ: BINCLUDE "mappings/128x128/MTZ.bin"
 
;-----------------------------------------------------------------------------------
 
; OOZ 16x16 block mappings (Kosinski compression)
 
BM16_OOZ: BINCLUDE "mappings/16x16/OOZ.bin"
 
;-----------------------------------------------------------------------------------
 
; OOZ main level patterns (Kosinski compression)
 
; ArtKoz_A4204:
 
ArtKos_OOZ: BINCLUDE "art/kosinski/OOZ.bin"
 
;-----------------------------------------------------------------------------------
 
; OOZ 128x128 block mappings (Kosinski compression)
 
BM128_OOZ: BINCLUDE "mappings/128x128/OOZ.bin"
 
;-----------------------------------------------------------------------------------
 
; MCZ 16x16 block mappings (Kosinski compression)
 
BM16_MCZ: BINCLUDE "mappings/16x16/MCZ.bin"
 
;-----------------------------------------------------------------------------------
 
; MCZ main level patterns (Kosinski compression)
 
; ArtKoz_A9D74:
 
ArtKos_MCZ: BINCLUDE "art/kosinski/MCZ.bin"
 
;-----------------------------------------------------------------------------------
 
; MCZ 128x128 block mappings (Kosinski compression)
 
BM128_MCZ: BINCLUDE "mappings/128x128/MCZ.bin"
 
;-----------------------------------------------------------------------------------
 
; CNZ 16x16 block mappings (Kosinski compression)
 
BM16_CNZ: BINCLUDE "mappings/16x16/CNZ.bin"
 
;-----------------------------------------------------------------------------------
 
; CNZ main level patterns (Kosinski compression)
 
; ArtKoz_B0894:
 
ArtKos_CNZ: BINCLUDE "art/kosinski/CNZ.bin"
 
;-----------------------------------------------------------------------------------
 
; CNZ 128x128 block mappings (Kosinski compression)
 
BM128_CNZ: BINCLUDE "mappings/128x128/CNZ.bin"
 
;-----------------------------------------------------------------------------------
 
; CPZ/DEZ 16x16 block mappings (Kosinski compression)
 
BM16_CPZ: BINCLUDE "mappings/16x16/CPZ_DEZ.bin"
 
;-----------------------------------------------------------------------------------
 
; CPZ/DEZ main level patterns (Kosinski compression)
 
; ArtKoz_B6174:
 
ArtKos_CPZ: BINCLUDE "art/kosinski/CPZ_DEZ.bin"
 
;-----------------------------------------------------------------------------------
 
; CPZ/DEZ 128x128 block mappings (Kosinski compression)
 
BM128_CPZ: BINCLUDE "mappings/128x128/CPZ_DEZ.bin"
 
;-----------------------------------------------------------------------------------
 
; ARZ 16x16 block mappings (Kosinski compression)
 
BM16_ARZ: BINCLUDE "mappings/16x16/ARZ.bin"
 
;-----------------------------------------------------------------------------------
 
; ARZ main level patterns (Kosinski compression)
 
; ArtKoz_BCC24:
 
ArtKos_ARZ: BINCLUDE "art/kosinski/ARZ.bin"
 
;-----------------------------------------------------------------------------------
 
; ARZ 128x128 block mappings (Kosinski compression)
 
BM128_ARZ: BINCLUDE "mappings/128x128/ARZ.bin"
 
;-----------------------------------------------------------------------------------
 
; WFZ/SCZ 16x16 block mappings (Kosinski compression)
 
BM16_WFZ: BINCLUDE "mappings/16x16/WFZ_SCZ.bin"
 
;-----------------------------------------------------------------------------------
 
; WFZ/SCZ main level patterns (Kosinski compression)
 
; ArtKoz_C5004:
 
ArtKos_SCZ: BINCLUDE "art/kosinski/WFZ_SCZ.bin"
 
;-----------------------------------------------------------------------------------
 
; WFZ pattern suppliment to SCZ tiles (Kosinski compression)
 
; ArtKoz_C7EC4:
 
ArtKos_WFZ: BINCLUDE "art/kosinski/WFZ_Supp.bin"
 
;-----------------------------------------------------------------------------------
 
; WFZ/SCZ 128x128 block mappings (Kosinski compression)
 
BM128_WFZ: BINCLUDE "mappings/128x128/WFZ_SCZ.bin"
 
</asm>
 
 
then add this to the end:
 
<asm>
 
;-----------------------------------------------------------------------------------
 
; Lev_11 16x16 block mappings (Kosinski compression)
 
BM16_Lev_11: BINCLUDE "mappings/16x16/Lev_11.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_11 main level patterns (Kosinski compression)
 
; ArtKoz_9DB64:
 
ArtKos_Lev_11: BINCLUDE "art/kosinski/Lev_11.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_11 128x128 block mappings (Kosinski compression)
 
BM128_Lev_11: BINCLUDE "mappings/128x128/Lev_11.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_12 16x16 block mappings (Kosinski compression)
 
BM16_Lev_12: BINCLUDE "mappings/16x16/Lev_12.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_12 main level patterns (Kosinski compression)
 
; ArtKoz_9DB64:
 
ArtKos_Lev_12: BINCLUDE "art/kosinski/Lev_12.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_12 128x128 block mappings (Kosinski compression)
 
BM128_Lev_12: BINCLUDE "mappings/128x128/Lev_12.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_13 16x16 block mappings (Kosinski compression)
 
BM16_Lev_13: BINCLUDE "mappings/16x16/Lev_13.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_13 main level patterns (Kosinski compression)
 
; ArtKoz_9DB64:
 
ArtKos_Lev_13: BINCLUDE "art/kosinski/Lev_13.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_13 128x128 block mappings (Kosinski compression)
 
BM128_Lev_13: BINCLUDE "mappings/128x128/Lev_13.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_14 16x16 block mappings (Kosinski compression)
 
BM16_Lev_14: BINCLUDE "mappings/16x16/Lev_14.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_14 main level patterns (Kosinski compression)
 
; ArtKoz_9DB64:
 
ArtKos_Lev_14: BINCLUDE "art/kosinski/Lev_14.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_14 128x128 block mappings (Kosinski compression)
 
BM128_Lev_14: BINCLUDE "mappings/128x128/Lev_14.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_15 16x16 block mappings (Kosinski compression)
 
BM16_Lev_15: BINCLUDE "mappings/16x16/Lev_15.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_15 main level patterns (Kosinski compression)
 
; ArtKoz_9DB64:
 
ArtKos_Lev_15: BINCLUDE "art/kosinski/Lev_15.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_15 128x128 block mappings (Kosinski compression)
 
BM128_Lev_15: BINCLUDE "mappings/128x128/Lev_15.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_16 16x16 block mappings (Kosinski compression)
 
BM16_Lev_16: BINCLUDE "mappings/16x16/Lev_16.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_16 main level patterns (Kosinski compression)
 
; ArtKoz_9DB64:
 
ArtKos_Lev_16: BINCLUDE "art/kosinski/Lev_16.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_16 128x128 block mappings (Kosinski compression)
 
BM128_Lev_16: BINCLUDE "mappings/128x128/Lev_16.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_17 16x16 block mappings (Kosinski compression)
 
BM16_Lev_17: BINCLUDE "mappings/16x16/Lev_17.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_17 main level patterns (Kosinski compression)
 
; ArtKoz_9DB64:
 
ArtKos_Lev_17: BINCLUDE "art/kosinski/Lev_17.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_17 128x128 block mappings (Kosinski compression)
 
BM128_Lev_17: BINCLUDE "mappings/128x128/Lev_17.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_18 16x16 block mappings (Kosinski compression)
 
BM16_Lev_18: BINCLUDE "mappings/16x16/Lev_18.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_18 main level patterns (Kosinski compression)
 
; ArtKoz_9DB64:
 
ArtKos_Lev_18: BINCLUDE "art/kosinski/Lev_18.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_18 128x128 block mappings (Kosinski compression)
 
BM128_Lev_18: BINCLUDE "mappings/128x128/Lev_18.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_19 16x16 block mappings (Kosinski compression)
 
BM16_Lev_19: BINCLUDE "mappings/16x16/Lev_19.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_19 main level patterns (Kosinski compression)
 
; ArtKoz_9DB64:
 
ArtKos_Lev_19: BINCLUDE "art/kosinski/Lev_19.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_19 128x128 block mappings (Kosinski compression)
 
BM128_Lev_19: BINCLUDE "mappings/128x128/Lev_19.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_1A 16x16 block mappings (Kosinski compression)
 
BM16_Lev_1A: BINCLUDE "mappings/16x16/Lev_1A.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_1A main level patterns (Kosinski compression)
 
; ArtKoz_9DB64:
 
ArtKos_Lev_1A: BINCLUDE "art/kosinski/Lev_1A.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_1A 128x128 block mappings (Kosinski compression)
 
BM128_Lev_1A: BINCLUDE "mappings/128x128/Lev_1A.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_1B 16x16 block mappings (Kosinski compression)
 
BM16_Lev_1B: BINCLUDE "mappings/16x16/Lev_1B.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_1B main level patterns (Kosinski compression)
 
; ArtKoz_9DB64:
 
ArtKos_Lev_1B: BINCLUDE "art/kosinski/Lev_1B.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_1B 128x128 block mappings (Kosinski compression)
 
BM128_Lev_1B: BINCLUDE "mappings/128x128/Lev_1B.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_1C 16x16 block mappings (Kosinski compression)
 
BM16_Lev_1C: BINCLUDE "mappings/16x16/Lev_1C.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_1C main level patterns (Kosinski compression)
 
; ArtKoz_9DB64:
 
ArtKos_Lev_1C: BINCLUDE "art/kosinski/Lev_1C.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_1C 128x128 block mappings (Kosinski compression)
 
BM128_Lev_1C: BINCLUDE "mappings/128x128/Lev_1C.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_1D 16x16 block mappings (Kosinski compression)
 
BM16_Lev_1D: BINCLUDE "mappings/16x16/Lev_1D.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_1D main level patterns (Kosinski compression)
 
; ArtKoz_9DB64:
 
ArtKos_Lev_1D: BINCLUDE "art/kosinski/Lev_1D.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_1D 128x128 block mappings (Kosinski compression)
 
BM128_Lev_1D: BINCLUDE "mappings/128x128/Lev_1D.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_1E 16x16 block mappings (Kosinski compression)
 
BM16_Lev_1E: BINCLUDE "mappings/16x16/Lev_1E.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_1E main level patterns (Kosinski compression)
 
; ArtKoz_9DB64:
 
ArtKos_Lev_1E: BINCLUDE "art/kosinski/Lev_1E.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_1E 128x128 block mappings (Kosinski compression)
 
BM128_Lev_1E: BINCLUDE "mappings/128x128/Lev_1E.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_1F 16x16 block mappings (Kosinski compression)
 
BM16_Lev_1F: BINCLUDE "mappings/16x16/Lev_1F.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_1F main level patterns (Kosinski compression)
 
; ArtKoz_9DB64:
 
ArtKos_Lev_1F: BINCLUDE "art/kosinski/Lev_1F.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_1F 128x128 block mappings (Kosinski compression)
 
BM128_Lev_1F: BINCLUDE "mappings/128x128/Lev_1F.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_20 16x16 block mappings (Kosinski compression)
 
BM16_Lev_20: BINCLUDE "mappings/16x16/Lev_20.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_20 main level patterns (Kosinski compression)
 
; ArtKoz_9DB64:
 
ArtKos_Lev_20: BINCLUDE "art/kosinski/Lev_20.bin"
 
;-----------------------------------------------------------------------------------
 
; Lev_20 128x128 block mappings (Kosinski compression)
 
BM128_Lev_20: BINCLUDE "mappings/128x128/Lev_20.bin"
 
</asm>
 
 
Then add optional pattern supplements to suit your hack's needs.
 
 
Now find:
 
<asm>
 
LevelArtPointers:
 
levartptrs  4,  5,  4, ArtKos_EHZ, BM16_EHZ, BM128_EHZ ;  0 ; EHZ  ; EMERALD HILL ZONE
 
levartptrs  6,  7,  5, ArtKos_EHZ, BM16_EHZ, BM128_EHZ ;  1 ; LEV1 ; LEVEL 1 (UNUSED)
 
levartptrs  8,  9,  6, ArtKos_EHZ, BM16_EHZ, BM128_EHZ ;  2 ; LEV2 ; LEVEL 2 (UNUSED)
 
levartptrs  $A, $B,  7, ArtKos_EHZ, BM16_EHZ, BM128_EHZ ;  3 ; LEV3 ; LEVEL 3 (UNUSED)
 
levartptrs  $C, $D,  8, ArtKos_MTZ, BM16_MTZ, BM128_MTZ ;  4 ; MTZ  ; METROPOLIS ZONE ACTS 1 & 2
 
levartptrs  $C, $D,  8, ArtKos_MTZ, BM16_MTZ, BM128_MTZ ;  5 ; MTZ3 ; METROPOLIS ZONE ACT 3
 
levartptrs $10,$11, $A, ArtKos_SCZ, BM16_WFZ, BM128_WFZ ;  6 ; WFZ  ; WING FORTRESS ZONE
 
levartptrs $12,$13, $B, ArtKos_EHZ, BM16_EHZ, BM128_EHZ ;  7 ; HTZ  ; HILL TOP ZONE
 
levartptrs $14,$15, $C,  BM16_OOZ,  BM16_OOZ,  BM16_OOZ ;  8 ; HPZ  ; HIDDEN PALACE ZONE (UNUSED)
 
levartptrs $16,$17, $D, ArtKos_EHZ, BM16_EHZ, BM128_EHZ ;  9 ; LEV9 ; LEVEL 9 (UNUSED)
 
levartptrs $18,$19, $E, ArtKos_OOZ, BM16_OOZ, BM128_OOZ ;  $A ; OOZ  ; OIL OCEAN ZONE
 
levartptrs $1A,$1B, $F, ArtKos_MCZ, BM16_MCZ, BM128_MCZ ;  $B ; MCZ  ; MYSTIC CAVE ZONE
 
levartptrs $1C,$1D,$10, ArtKos_CNZ, BM16_CNZ, BM128_CNZ ;  $C ; CNZ  ; CASINO NIGHT ZONE
 
levartptrs $1E,$1F,$11, ArtKos_CPZ, BM16_CPZ, BM128_CPZ ;  $D ; CPZ  ; CHEMICAL PLANT ZONE
 
levartptrs $20,$21,$12, ArtKos_CPZ, BM16_CPZ, BM128_CPZ ;  $E ; DEZ  ; DEATH EGG ZONE
 
levartptrs $22,$23,$13, ArtKos_ARZ, BM16_ARZ, BM128_ARZ ;  $F ; ARZ  ; AQUATIC RUIN ZONE
 
levartptrs $24,$25,$14, ArtKos_SCZ, BM16_WFZ, BM128_WFZ ; $10 ; SCZ  ; SKY CHASE ZONE
 
</asm>
 
 
then add this to the end:
 
<asm>
 
levartptrs  $26,  $27,  $15, ArtKos_Lev_11, BM16_Lev_11, BM128_Lev_11 ;  0 ; Lev_11  ; LEV_11 ZONE
 
levartptrs  $28,  $29,  $16, ArtKos_Lev_12, BM16_Lev_12, BM128_Lev_12 ;  0 ; Lev_12  ; LEV_12 ZONE
 
levartptrs  $2A,  $2B,  $17, ArtKos_Lev_13, BM16_Lev_13, BM128_Lev_13 ;  0 ; Lev_13  ; LEV_13 ZONE
 
levartptrs  $2C,  $2D,  $18, ArtKos_Lev_14, BM16_Lev_14, BM128_Lev_14 ;  0 ; Lev_14  ; LEV_14 ZONE
 
levartptrs  $2E,  $2F,  $19, ArtKos_Lev_15, BM16_Lev_15, BM128_Lev_15 ;  0 ; Lev_15  ; LEV_15 ZONE
 
levartptrs  $30,  $31,  $1A, ArtKos_Lev_16, BM16_Lev_16, BM128_Lev_16 ;  0 ; Lev_16  ; LEV_16 ZONE
 
levartptrs  $32,  $33,  $1B, ArtKos_Lev_17, BM16_Lev_17, BM128_Lev_17 ;  0 ; Lev_17  ; LEV_17 ZONE
 
levartptrs  $34,  $35,  $1C, ArtKos_Lev_18, BM16_Lev_18, BM128_Lev_18 ;  0 ; Lev_18  ; LEV_18 ZONE
 
levartptrs  $36,  $37,  $1D, ArtKos_Lev_19, BM16_Lev_19, BM128_Lev_19 ;  0 ; Lev_19  ; LEV_19 ZONE
 
levartptrs  $38,  $39,  $1E, ArtKos_Lev_1A, BM16_Lev_1A, BM128_Lev_1A ;  0 ; Lev_1A  ; LEV_1A ZONE
 
levartptrs  $3A,  $3B,  $1F, ArtKos_Lev_1B, BM16_Lev_1B, BM128_Lev_1B ;  0 ; Lev_1B  ; LEV_1B ZONE
 
levartptrs  $3C,  $3D,  $20, ArtKos_Lev_1C, BM16_Lev_1C, BM128_Lev_1C ;  0 ; Lev_1C  ; LEV_1C ZONE
 
levartptrs  $3E,  $3F,  $21, ArtKos_Lev_1D, BM16_Lev_1D, BM128_Lev_1D ;  0 ; Lev_1D  ; LEV_1D ZONE
 
levartptrs  $40,  $41,  $22, ArtKos_Lev_1E, BM16_Lev_1E, BM128_Lev_1E ;  0 ; Lev_1E  ; LEV_1E ZONE
 
levartptrs  $42,  $43,  $23, ArtKos_Lev_1F, BM16_Lev_1F, BM128_Lev_1F ;  0 ; Lev_1F  ; LEV_1F ZONE
 
levartptrs  $44,  $45,  $24, ArtKos_Lev_20, BM16_Lev_20, BM128_Lev_20 ;  0 ; Lev_20  ; LEV_20 ZONE
 
</asm>
 
 
After this is added, you possibly need to add loading queries to the texture load index. Create the .bin files and you're finished.
 
 
==Extending level and tile layout indexes==
 
 
Now you need to extend the layout index and we're done extending most level essentials.
 
 
Find:
 
<asm>
 
Off_Level:
 
dc.w Level_EHZ1-Off_Level
 
dc.w Level_EHZ2-Off_Level; 1
 
dc.w Level_EHZ1-Off_Level; 2
 
dc.w Level_EHZ1-Off_Level; 3
 
dc.w Level_EHZ1-Off_Level; 4
 
dc.w Level_EHZ1-Off_Level; 5
 
dc.w Level_EHZ1-Off_Level; 6
 
dc.w Level_EHZ1-Off_Level; 7
 
dc.w Level_MTZ1-Off_Level; 8
 
dc.w Level_MTZ2-Off_Level; 9
 
dc.w Level_MTZ3-Off_Level; 10
 
dc.w Level_MTZ3-Off_Level; 11
 
dc.w Level_WFZ-Off_Level; 12
 
dc.w Level_WFZ-Off_Level; 13
 
dc.w Level_HTZ1-Off_Level; 14
 
dc.w Level_HTZ2-Off_Level; 15
 
dc.w Level_OOZ1-Off_Level; 16
 
dc.w Level_OOZ1-Off_Level; 17
 
dc.w Level_EHZ1-Off_Level; 18
 
dc.w Level_EHZ1-Off_Level; 19
 
dc.w Level_OOZ1-Off_Level; 20
 
dc.w Level_OOZ2-Off_Level; 21
 
dc.w Level_MCZ1-Off_Level; 22
 
dc.w Level_MCZ2-Off_Level; 23
 
dc.w Level_CNZ1-Off_Level; 24
 
dc.w Level_CNZ2-Off_Level; 25
 
dc.w Level_CPZ1-Off_Level; 26
 
dc.w Level_CPZ2-Off_Level; 27
 
dc.w Level_DEZ-Off_Level; 28
 
dc.w Level_DEZ-Off_Level; 29
 
dc.w Level_ARZ1-Off_Level; 30
 
dc.w Level_ARZ2-Off_Level; 31
 
dc.w Level_SCZ-Off_Level; 32
 
dc.w Level_SCZ-Off_Level; 33
 
</asm>
 
 
and add this to the end:
 
<asm>
 
dc.w Level_Lev11_1-Off_Level
 
dc.w Level_Lev11_2-Off_Level
 
dc.w Level_Lev12_1-Off_Level
 
dc.w Level_Lev12_2-Off_Level
 
dc.w Level_Lev13_1-Off_Level
 
dc.w Level_Lev13_2-Off_Level
 
dc.w Level_Lev14_1-Off_Level
 
dc.w Level_Lev14_2-Off_Level
 
dc.w Level_Lev15_1-Off_Level
 
dc.w Level_Lev15_2-Off_Level
 
dc.w Level_Lev16_1-Off_Level
 
dc.w Level_Lev16_2-Off_Level
 
dc.w Level_Lev17_1-Off_Level
 
dc.w Level_Lev17_2-Off_Level
 
dc.w Level_Lev18_1-Off_Level
 
dc.w Level_Lev18_2-Off_Level
 
dc.w Level_Lev19_1-Off_Level
 
dc.w Level_Lev19_2-Off_Level
 
dc.w Level_Lev1A_1-Off_Level
 
dc.w Level_Lev1A_2-Off_Level
 
dc.w Level_Lev1B_1-Off_Level
 
dc.w Level_Lev1B_2-Off_Level
 
dc.w Level_Lev1C_1-Off_Level
 
dc.w Level_Lev1C_2-Off_Level
 
dc.w Level_Lev1D_1-Off_Level
 
dc.w Level_Lev1D_2-Off_Level
 
dc.w Level_Lev1E_1-Off_Level
 
dc.w Level_Lev1E_2-Off_Level
 
dc.w Level_Lev1F_1-Off_Level
 
dc.w Level_Lev1F_2-Off_Level
 
dc.w Level_Lev20_1-Off_Level
 
dc.w Level_Lev20_2-Off_Level
 
</asm>
 
 
Then find:
 
<asm>
 
;---------------------------------------------------------------------------------------
 
; EHZ act 1 level layout (Kosinski compression)
 
Level_EHZ1: BINCLUDE "level/layout/EHZ_1.bin"
 
;---------------------------------------------------------------------------------------
 
; EHZ act 2 level layout (Kosinski compression)
 
Level_EHZ2: BINCLUDE "level/layout/EHZ_2.bin"
 
;---------------------------------------------------------------------------------------
 
; MTZ act 1 level layout (Kosinski compression)
 
Level_MTZ1: BINCLUDE "level/layout/MTZ_1.bin"
 
;---------------------------------------------------------------------------------------
 
; MTZ act 2 level layout (Kosinski compression)
 
Level_MTZ2: BINCLUDE "level/layout/MTZ_2.bin"
 
;---------------------------------------------------------------------------------------
 
; MTZ act 3 level layout (Kosinski compression)
 
Level_MTZ3: BINCLUDE "level/layout/MTZ_3.bin"
 
;---------------------------------------------------------------------------------------
 
; WFZ level layout (Kosinski compression)
 
Level_WFZ: BINCLUDE "level/layout/WFZ.bin"
 
;---------------------------------------------------------------------------------------
 
; HTZ act 1 level layout (Kosinski compression)
 
Level_HTZ1: BINCLUDE "level/layout/HTZ_1.bin"
 
;---------------------------------------------------------------------------------------
 
; HTZ act 2 level layout (Kosinski compression)
 
Level_HTZ2: BINCLUDE "level/layout/HTZ_2.bin"
 
;---------------------------------------------------------------------------------------
 
; OOZ act 1 level layout (Kosinski compression)
 
Level_OOZ1: BINCLUDE "level/layout/OOZ_1.bin"
 
;---------------------------------------------------------------------------------------
 
; OOZ act 2 level layout (Kosinski compression)
 
Level_OOZ2: BINCLUDE "level/layout/OOZ_2.bin"
 
;---------------------------------------------------------------------------------------
 
; MCZ act 1 level layout (Kosinski compression)
 
Level_MCZ1: BINCLUDE "level/layout/MCZ_1.bin"
 
;---------------------------------------------------------------------------------------
 
; MCZ act 2 level layout (Kosinski compression)
 
Level_MCZ2: BINCLUDE "level/layout/MCZ_2.bin"
 
;---------------------------------------------------------------------------------------
 
; CNZ act 1 level layout (Kosinski compression)
 
Level_CNZ1: BINCLUDE "level/layout/CNZ_1.bin"
 
;---------------------------------------------------------------------------------------
 
; CNZ act 2 level layout (Kosinski compression)
 
Level_CNZ2: BINCLUDE "level/layout/CNZ_2.bin"
 
;---------------------------------------------------------------------------------------
 
; CPZ act 1 level layout (Kosinski compression)
 
Level_CPZ1: BINCLUDE "level/layout/CPZ_1.bin"
 
;---------------------------------------------------------------------------------------
 
; CPZ act 2 level layout (Kosinski compression)
 
Level_CPZ2: BINCLUDE "level/layout/CPZ_2.bin"
 
;---------------------------------------------------------------------------------------
 
; DEZ level layout (Kosinski compression)
 
Level_DEZ: BINCLUDE "level/layout/DEZ.bin"
 
;---------------------------------------------------------------------------------------
 
; ARZ act 1 level layout (Kosinski compression)
 
Level_ARZ1: BINCLUDE "level/layout/ARZ_1.bin"
 
;---------------------------------------------------------------------------------------
 
; ARZ act 2 level layout (Kosinski compression)
 
Level_ARZ2: BINCLUDE "level/layout/ARZ_2.bin"
 
;---------------------------------------------------------------------------------------
 
; SCZ level layout (Kosinski compression)
 
Level_SCZ: BINCLUDE "level/layout/SCZ.bin"
 
</asm>
 
 
then add this at the end:
 
<asm>
 
;---------------------------------------------------------------------------------------
 
; Lev11 act 1 level layout (Kosinski compression)
 
Level_Lev11_1: BINCLUDE "level/layout/Lev11_1.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev11 act 2 level layout (Kosinski compression)
 
Level_Lev11_2: BINCLUDE "level/layout/Lev11_2.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev12_1 level layout (Kosinski compression)
 
Level_Lev12_1: BINCLUDE "level/layout/Lev12_1.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev12_2 level layout (Kosinski compression)
 
Level_Lev12_1: BINCLUDE "level/layout/Lev12_2.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev13_1 level layout (Kosinski compression)
 
Level_Lev13_1: BINCLUDE "level/layout/Lev13_1.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev13_2 level layout (Kosinski compression)
 
Level_Lev13_2: BINCLUDE "level/layout/Lev13_2.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev14_1 level layout (Kosinski compression)
 
Level_Lev14_1: BINCLUDE "level/layout/Lev14_1.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev14_2 level layout (Kosinski compression)
 
Level_Lev14_2: BINCLUDE "level/layout/Lev14_2.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev15_1 level layout (Kosinski compression)
 
Level_Lev15_1: BINCLUDE "level/layout/Lev15_1.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev15_2 level layout (Kosinski compression)
 
Level_Lev15_2: BINCLUDE "level/layout/Lev15_2.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev16_1 level layout (Kosinski compression)
 
Level_Lev16_1: BINCLUDE "level/layout/Lev16_1.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev16_2 level layout (Kosinski compression)
 
Level_Lev16_2: BINCLUDE "level/layout/Lev16_2.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev17_1 level layout (Kosinski compression)
 
Level_Lev17_1: BINCLUDE "level/layout/Lev17_1.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev17_2 level layout (Kosinski compression)
 
Level_Lev17_2: BINCLUDE "level/layout/Lev17_2.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev18_1 level layout (Kosinski compression)
 
Level_Lev18_1: BINCLUDE "level/layout/Lev18_1.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev18_2 level layout (Kosinski compression)
 
Level_Lev18_2: BINCLUDE "level/layout/Lev18_2.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev19_1 level layout (Kosinski compression)
 
Level_Lev19_1: BINCLUDE "level/layout/Lev19_1.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev19_2 level layout (Kosinski compression)
 
Level_Lev19_2: BINCLUDE "level/layout/Lev19_2.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev1A_1 level layout (Kosinski compression)
 
Level_Lev1A_1: BINCLUDE "level/layout/Lev1A_1.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev1A_2 level layout (Kosinski compression)
 
Level_Lev1A_2: BINCLUDE "level/layout/Lev1A_2.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev1B_1 level layout (Kosinski compression)
 
Level_Lev1B_1: BINCLUDE "level/layout/Lev1B_1.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev1B_2 level layout (Kosinski compression)
 
Level_Lev1B_2: BINCLUDE "level/layout/Lev1B_2.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev1C_1 level layout (Kosinski compression)
 
Level_Lev1C_1: BINCLUDE "level/layout/Lev1C_1.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev1C_2 level layout (Kosinski compression)
 
Level_Lev1C_2: BINCLUDE "level/layout/Lev1C_2.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev1D_1 level layout (Kosinski compression)
 
Level_Lev1D_1: BINCLUDE "level/layout/Lev1D_1.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev1D_2 level layout (Kosinski compression)
 
Level_Lev1D_2: BINCLUDE "level/layout/Lev1D_2.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev1E_1 level layout (Kosinski compression)
 
Level_Lev1E_1: BINCLUDE "level/layout/Lev1E_1.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev1E_2 level layout (Kosinski compression)
 
Level_Lev1E_2: BINCLUDE "level/layout/Lev1E_2.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev1F_1 level layout (Kosinski compression)
 
Level_Lev1F_1: BINCLUDE "level/layout/Lev1F_1.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev1F_2 level layout (Kosinski compression)
 
Level_Lev1F_2: BINCLUDE "level/layout/Lev1F_2.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev20_1 level layout (Kosinski compression)
 
Level_Lev20_1: BINCLUDE "level/layout/Lev20_1.bin"
 
;---------------------------------------------------------------------------------------
 
; Lev20_2 level layout (Kosinski compression)
 
Level_Lev20_2: BINCLUDE "level/layout/Lev20_2.bin"
 
</asm>
 
 
Now create the .bin files.
 
 
==Extending the definition of act 2 (setting up our new levels so that they can have bosses in other words)==
 
just being able to use sign posts in your new levels can be boring after a while, so we will make those changes so that we can put custom bosses in our new levels, actually extending the sprite pointer list is not within the scope of the tutorial, though highly recommended.
 
 
find:
 
<asm>SetLevelEndType:
 
move.w #0,(Level_Has_Signpost).w ; set level type to non-signpost
 
tst.w (Two_player_mode).w ; is it two-player competitive mode?
 
bne.s LevelEnd_SetSignpost ; if yes, branch
 
cmpi.w #$001,(Current_ZoneAndAct).w
 
beq.w return_4C46 ; if EHZ2, return
 
cmpi.w #$500,(Current_ZoneAndAct).w
 
beq.w return_4C46 ; if MTZ3, return
 
cmpi.w #$600,(Current_ZoneAndAct).w
 
beq.w return_4C46 ; if WFZ, return
 
cmpi.w #$701,(Current_ZoneAndAct).w
 
beq.w return_4C46 ; if HTZ2, return
 
cmpi.w #$A01,(Current_ZoneAndAct).w
 
beq.w return_4C46 ; if OOZ2, return
 
cmpi.w #$B01,(Current_ZoneAndAct).w
 
beq.s return_4C46 ; if MCZ2, return
 
cmpi.w #$C01,(Current_ZoneAndAct).w
 
beq.s return_4C46 ; if CNZ2, return
 
cmpi.w #$D01,(Current_ZoneAndAct).w
 
beq.s return_4C46 ; if CPZ2, return
 
cmpi.w #$E00,(Current_ZoneAndAct).w
 
beq.s return_4C46 ; if DEZ, return
 
cmpi.w #$F01,(Current_ZoneAndAct).w
 
beq.s return_4C46 ; if ARZ2, return
 
cmpi.w #$1000,(Current_ZoneAndAct).w
 
beq.s return_4C46 ; if SCZ, return
 
</asm>
 
we will change it to:
 
<asm>
 
JmpTo_LevelEnd_SetSignpost
 
jmp LevelEnd_SetSignpost
 
 
SetLevelEndType:
 
move.w #0,(Level_Has_Signpost).w ; set level type to non-signpost
 
tst.w (Two_player_mode).w ; is it two-player competitive mode?
 
bne.s JmpTo_LevelEnd_SetSignpost ; if yes, branch
 
cmpi.w #$001,(Current_ZoneAndAct).w
 
beq.w return_4C46 ; if EHZ2, return
 
cmpi.w #$101,(Current_ZoneAndAct).w
 
beq.w return_4C46 ; if LZ2, return
 
cmpi.w #$201,(Current_ZoneAndAct).w
 
beq.w return_4C46 ; if WZ2, return
 
cmpi.w #$301,(Current_ZoneAndAct).w
 
beq.w return_4C46 ; if DHZ2, return
 
cmpi.w #$500,(Current_ZoneAndAct).w
 
beq.w return_4C46 ; if MTZ3, return
 
cmpi.w #$600,(Current_ZoneAndAct).w
 
beq.w return_4C46 ; if WFZ, return
 
cmpi.w #$701,(Current_ZoneAndAct).w
 
beq.w return_4C46 ; if HTZ2, return
 
cmpi.w #$801,(Current_ZoneAndAct).w
 
beq.w return_4C46 ; if HPZ2, return
 
cmpi.w #$901,(Current_ZoneAndAct).w
 
beq.w return_4C46 ; if GCZ2, return
 
cmpi.w #$A01,(Current_ZoneAndAct).w
 
beq.w return_4C46 ; if OOZ2, return
 
bra.s SetLevelEndType2
 
 
return_4C46:
 
rts
 
 
SetLevelEndType2:
 
cmpi.w #$B01,(Current_ZoneAndAct).w
 
beq.s return2_4C46 ; if MCZ2, return
 
cmpi.w #$C01,(Current_ZoneAndAct).w
 
beq.s return2_4C46 ; if CNZ2, return
 
cmpi.w #$D01,(Current_ZoneAndAct).w
 
beq.s return2_4C46 ; if CPZ2, return
 
cmpi.w #$E00,(Current_ZoneAndAct).w
 
beq.s return2_4C46 ; if DEZ, return
 
cmpi.w #$F01,(Current_ZoneAndAct).w
 
beq.s return2_4C46 ; if ARZ2, return
 
cmpi.w #$1000,(Current_ZoneAndAct).w
 
beq.s return2_4C46 ; if SCZ, return
 
cmpi.w #$1000,(Current_ZoneAndAct).w
 
beq.s return2_4C46 ; if SCZ, return
 
cmpi.w #$1101,(Current_ZoneAndAct).w
 
beq.s return2_4C46 ; if one of our new levels in act 2, return
 
cmpi.w #$1201,(Current_ZoneAndAct).w
 
beq.s return2_4C46 ; if one of our new levels in act 2, return
 
cmpi.w #$1301,(Current_ZoneAndAct).w
 
beq.s return2_4C46 ; if one of our new levels in act 2, return
 
cmpi.w #$1401,(Current_ZoneAndAct).w
 
bra.s SetLevelEndType3
 
 
return2_4C46:
 
rts
 
 
SetLevelEndType3:
 
beq.s return3_4C46 ; if one of our new levels in act 2, return
 
cmpi.w #$1501,(Current_ZoneAndAct).w
 
beq.s return3_4C46 ; if one of our new levels in act 2, return
 
cmpi.w #$1601,(Current_ZoneAndAct).w
 
beq.s return3_4C46 ; if one of our new levels in act 2, return
 
cmpi.w #$1701,(Current_ZoneAndAct).w
 
beq.s return3_4C46 ; if one of our new levels in act 2, return
 
cmpi.w #$1801,(Current_ZoneAndAct).w
 
beq.s return3_4C46 ; if one of our new levels in act 2, return
 
cmpi.w #$1901,(Current_ZoneAndAct).w
 
beq.s return3_4C46 ; if one of our new levels in act 2, return
 
cmpi.w #$1A01,(Current_ZoneAndAct).w
 
beq.s return3_4C46 ; if one of our new levels in act 2, return
 
cmpi.w #$1B01,(Current_ZoneAndAct).w
 
beq.s return3_4C46 ; if one of our new levels in act 2, return
 
cmpi.w #$1C01,(Current_ZoneAndAct).w
 
beq.s return3_4C46 ; if one of our new levels in act 2, return
 
cmpi.w #$1D01,(Current_ZoneAndAct).w
 
beq.s return3_4C46 ; if one of our new levels in act 2, return
 
cmpi.w #$1E01,(Current_ZoneAndAct).w
 
beq.s return3_4C46 ; if one of our new levels in act 2, return
 
cmpi.w #$1F01,(Current_ZoneAndAct).w
 
beq.s return3_4C46 ; if one of our new levels in act 2, return
 
cmpi.w #$2001,(Current_ZoneAndAct).w
 
beq.s return3_4C46 ; if one of our new levels in act 2, return
 
 
; loc_4C40:
 
LevelEnd_SetSignpost:
 
move.w #1,(Level_Has_Signpost).w ; set level type to signpost
 
 
return3_4C46:
 
rts
 
</asm>
 
 
==Extend Level Size Array==
 
our levels need a size, right?  This part of the guide gives us just that.
 
 
what we need to find is:
 
<asm>
 
WrdArr_LvlSize:
 
dc.w $0, $29A0, $0, $320 ; $00  ; EHZ act 2
 
dc.w $0, $2940, $0, $420 ; EHZ act 2
 
dc.w $0, $3FFF, $0, $720 ; $01
 
dc.w $0, $3FFF, $0, $720
 
dc.w $0, $3FFF, $0, $720 ; $02
 
dc.w $0, $3FFF, $0, $720
 
dc.w $0, $3FFF, $0, $720 ; $03
 
dc.w $0, $3FFF, $0, $720
 
dc.w $0, $2280, -$100, $800 ; $04 ; MTZ act 1
 
dc.w $0, $1E80, -$100, $800 ; MTZ act 2
 
dc.w $0, $2A80, -$100, $800 ; $05 ; MTZ act 3
 
dc.w $0, $3FFF, -$100, $800
 
dc.w $0, $3FFF, $0, $720 ; $06 ; WFZ
 
dc.w $0, $3FFF, $0, $720
 
dc.w $0, $2800, $0, $720 ; $07 ; HTZ act 1
 
dc.w $0, $3280, $0, $720 ; HTZ act 2
 
dc.w $0, $3FFF, $0, $720 ; $08
 
dc.w $0, $3FFF, $0, $720
 
dc.w $0, $3FFF, $0, $720 ; $09
 
dc.w $0, $3FFF, $0, $720
 
dc.w $0, $2F80, $0, $680 ; $0A ; OOZ act 1
 
dc.w $0, $2D00, $0, $680 ; OOZ act 2
 
dc.w $0, $2380, $3C0, $720 ; $0B ; MCZ act 1
 
dc.w $0, $3FFF, $60, $720 ; MCZ act 2
 
dc.w $0, $27A0, $0, $720 ; $0C ; CNZ act 1
 
dc.w $0, $2A80, $0, $720 ; CNZ act 2
 
dc.w $0, $2780, $0, $720 ; $0D ; CPZ act 1
 
dc.w $0, $2A80, $0, $720 ; CPZ act 2
 
dc.w $0, $1000, $C8, $C8 ; $0F ; DEZ
 
dc.w $0, $1000,  $C8, $C8
 
dc.w $0, $28C0, $200, $600 ; $10 ; ARZ act 1
 
dc.w $0, $3FFF, $180, $710 ; ARZ act 2
 
dc.w $0, $3FFF, $0, $000 ; $11 ; SCZ
 
dc.w $0, $3FFF, $0, $720
 
</asm>
 
 
and we will change it to:
 
<asm>
 
WrdArr_LvlSize:
 
dc.w $0, $29A0, $0, $320 ; $00  ; EHZ act 2
 
dc.w $0, $2940, $0, $420 ; EHZ act 2
 
dc.w $0, $3FFF, $0, $720 ; $01
 
dc.w $0, $3FFF, $0, $720
 
dc.w $0, $3FFF, $0, $720 ; $02
 
dc.w $0, $3FFF, $0, $720
 
dc.w $0, $3FFF, $0, $720 ; $03
 
dc.w $0, $3FFF, $0, $720
 
dc.w $0, $2280, -$100, $800 ; $04 ; MTZ act 1
 
dc.w $0, $1E80, -$100, $800 ; MTZ act 2
 
dc.w $0, $2A80, -$100, $800 ; $05 ; MTZ act 3
 
dc.w $0, $3FFF, -$100, $800
 
dc.w $0, $3FFF, $0, $720 ; $06 ; WFZ
 
dc.w $0, $3FFF, $0, $720
 
dc.w $0, $2800, $0, $720 ; $07 ; HTZ act 1
 
dc.w $0, $3280, $0, $720 ; HTZ act 2
 
dc.w $0, $3FFF, $0, $720 ; $08
 
dc.w $0, $3FFF, $0, $720
 
dc.w $0, $3FFF, $0, $720 ; $09
 
dc.w $0, $3FFF, $0, $720
 
dc.w $0, $2F80, $0, $680 ; $0A ; OOZ act 1
 
dc.w $0, $2D00, $0, $680 ; OOZ act 2
 
dc.w $0, $2380, $3C0, $720 ; $0B ; MCZ act 1
 
dc.w $0, $3FFF, $60, $720 ; MCZ act 2
 
dc.w $0, $27A0, $0, $720 ; $0C ; CNZ act 1
 
dc.w $0, $2A80, $0, $720 ; CNZ act 2
 
dc.w $0, $2780, $0, $720 ; $0D ; CPZ act 1
 
dc.w $0, $2A80, $0, $720 ; CPZ act 2
 
dc.w $0, $1000, $C8, $C8 ; $0E ; DEZ
 
dc.w $0, $1000,  $C8, $C8
 
dc.w $0, $28C0, $200, $600 ; $0F ; ARZ act 1
 
dc.w $0, $3FFF, $180, $710 ; ARZ act 2
 
dc.w $0, $3FFF, $0, $000 ; $10 ; SCZ
 
dc.w $0, $3FFF, $0, $720
 
dc.w $0, $3FFF, $0, $720 ; $11 ;one of our new levels (act 1)
 
dc.w $0, $3FFF, $0, $720 ;one of our new levels (act 2)
 
dc.w $0, $3FFF, $0, $720 ; $12 ;one of our new levels (act 1)
 
dc.w $0, $3FFF, $0, $720 ;one of our new levels (act 2)
 
dc.w $0, $3FFF, $0, $720 ; $13 ;one of our new levels (act 1)
 
dc.w $0, $3FFF, $0, $720 ;one of our new levels (act 2)
 
dc.w $0, $3FFF, $0, $720 ; $14 ;one of our new levels (act 1)
 
dc.w $0, $3FFF, $0, $720 ;one of our new levels (act 2)
 
dc.w $0, $3FFF, $0, $720 ; $15 ;one of our new levels (act 1)
 
dc.w $0, $3FFF, $0, $720 ;one of our new levels (act 2)
 
dc.w $0, $3FFF, $0, $720 ; $16 ;one of our new levels (act 1)
 
dc.w $0, $3FFF, $0, $720 ;one of our new levels (act 2)
 
dc.w $0, $3FFF, $0, $720 ; $17 ;one of our new levels (act 1)
 
dc.w $0, $3FFF, $0, $720 ;one of our new levels (act 2)
 
dc.w $0, $3FFF, $0, $720 ; $18 ;one of our new levels (act 1)
 
dc.w $0, $3FFF, $0, $720 ;one of our new levels (act 2)
 
dc.w $0, $3FFF, $0, $720 ; $19 ;one of our new levels (act 1)
 
dc.w $0, $3FFF, $0, $720 ;one of our new levels (act 2)
 
dc.w $0, $3FFF, $0, $720 ; $1A ;one of our new levels (act 1)
 
dc.w $0, $3FFF, $0, $720 ;one of our new levels (act 2)
 
dc.w $0, $3FFF, $0, $720 ; $1B ;one of our new levels (act 1)
 
dc.w $0, $3FFF, $0, $720 ;one of our new levels (act 2)
 
dc.w $0, $3FFF, $0, $720 ; $1C ;one of our new levels (act 1)
 
dc.w $0, $3FFF, $0, $720 ;one of our new levels (act 2)
 
dc.w $0, $3FFF, $0, $720 ; $1D ;one of our new levels (act 1)
 
dc.w $0, $3FFF, $0, $720 ;one of our new levels (act 2)
 
dc.w $0, $3FFF, $0, $720 ; $1E ;one of our new levels (act 1)
 
dc.w $0, $3FFF, $0, $720 ;one of our new levels (act 2)
 
dc.w $0, $3FFF, $0, $720 ; $1F ;one of our new levels (act 1)
 
dc.w $0, $3FFF, $0, $720 ;one of our new levels (act 2)
 
dc.w $0, $3FFF, $0, $720 ; $20 ;one of our new levels (act 1)
 
dc.w $0, $3FFF, $0, $720 ;one of our new levels (act 2)
 
</asm>
 
 
==Extending the Start Location Index==
 
Sonic has to start somewhere right?
 
 
Find this:
 
<asm>
 
WrdArr_StartLoc:
 
dc.w $60, $28F ; $00
 
dc.w $60, $2AF
 
dc.w $60, $28F ; $01
 
dc.w $60, $2AF
 
dc.w $60, $1AC ; $02
 
dc.w $60, $1AC
 
dc.w $60, $28F ; $03
 
dc.w $60, $2AF
 
dc.w $60, $28C ; $04
 
dc.w $60, $5EC
 
dc.w $60, $20C ; $05
 
dc.w $60, $2AF
 
dc.w $60, $4CC ; $06
 
dc.w $1E0, $4CC
 
dc.w $60, $3EF ; $07
 
dc.w $60, $6AF
 
dc.w $230, $1AC ; $08
 
dc.w $230, $1AC
 
dc.w $60, $28F ; $09
 
dc.w $60, $2AF
 
dc.w $60, $6AC ; $0A
 
dc.w $60, $56C
 
dc.w $60, $6AC ; $0B
 
dc.w $60, $5AC
 
dc.w $60, $2AC ; $0C
 
dc.w $60, $58C
 
dc.w $60, $1EC ; $0D
 
dc.w $60, $12C
 
dc.w $60, $12D ; $0E
 
dc.w $60, $12D
 
dc.w $60, $37E ; $0F
 
dc.w $60, $37E
 
dc.w $120, $70 ; $10
 
dc.w $140, $70
 
</asm>
 
 
then add this to the end:
 
<asm>
 
dc.w 0, 0 ; $11
 
dc.w 0, 0
 
dc.w 0, 0 ; $12
 
dc.w 0, 0
 
dc.w 0, 0 ; $13
 
dc.w 0, 0
 
dc.w 0, 0 ; $14
 
dc.w 0, 0
 
dc.w 0, 0 ; $15
 
dc.w 0, 0
 
dc.w 0, 0 ; $16
 
dc.w 0, 0
 
dc.w 0, 0 ; $17
 
dc.w 0, 0
 
dc.w 0, 0 ; $18
 
dc.w 0, 0
 
dc.w 0, 0 ; $19
 
dc.w 0, 0
 
dc.w 0, 0 ; $1A
 
dc.w 0, 0
 
dc.w 0, 0 ; $1B
 
dc.w 0, 0
 
dc.w 0, 0 ; $1C
 
dc.w 0, 0
 
dc.w 0, 0 ; $1D
 
dc.w 0, 0
 
dc.w 0, 0 ; $1E
 
dc.w 0, 0
 
dc.w 0, 0 ; $1F
 
dc.w 0, 0
 
dc.w 0, 0 ; $20
 
dc.w 0, 0
 
</asm>
 
 
then replace the 0s with the desired x and y co-ordinance.
 
 
==Notes==
 
 
All new .bin files need to be created in order for the ROM to build. If something doesn't load correctly (besides new animated patterns that you have just made by youself, only major things like ROM crashes) please don't hesitate to ask for help and/or get it working and edit this article. (Like the title cards being broken for levels past $10)
 
 
[[Category:SCHG How-tos|Extend the level index past $10 in Sonic 2]]
 

Revision as of 12:54, 15 December 2010