Actions

SCHG How-to

Difference between revisions of "Port the REV01 Background Effects"

From Sonic Retro

m (Credits: wikilinks)
m (Text replacement - "\[\[Category:SCHG How-tos.*" to "")
 
(15 intermediate revisions by 7 users not shown)
Line 1: Line 1:
''(Guide originally written by [[jman2050]])''
+
{{GuideBy|jman2050}}
  
==Introduction==
+
Looking at the REV01 version of ''[[Sonic 1]]'', I can see why it's Rev01. They pretty much completely overhauled the entire BG deformation part of the engine. The drawing system has been changed (and from what I've seen, more similar to the way ''[[Sonic 2]]'' does things) and the deformation data for every level has been changed to fit this new code. Also, in every level besides SBZ2, it was used to enhance the deformation effects. To see the difference in your own ''Sonic 1'' ROM hack, you'll have to do the following...
Looking at the REV01 version of ''[[Sonic 1]]'', I can see why it's Rev01. They pretty much completely overhauled the entire BG deformation part of the engine. The drawing system has been changed (and from what I've seen, more similar to the way Sonic 2 does things) and the deformation data for every level has been changed to fit this new code. Also, in every level besides SBZ2, it was used to enhance the deformation effects. To see the difference in your own Sonic 1 rom, you'll have to do the following...
 
  
==Steps==
+
==The Steps You Need==
 
===Step 1===
 
===Step 1===
First, we'll do the easiest change. Go to label Obj0A_WobbleData in [[Hivebrain]]'s 2005 disassembly and replace the entire block with this:
+
First, we'll do the easiest change. Go to label Obj0A_WobbleData in [[User:Hivebrain|Hivebrain]]'s 2005 disassembly and replace the entire block with this:
<asm>Obj0A_WobbleData:
+
<syntaxhighlight lang="asm">Obj0A_WobbleData:
 
dc.b 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2
 
dc.b 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2
 
dc.b 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3
 
dc.b 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3
Line 25: Line 24:
 
dc.b -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4
 
dc.b -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4
 
dc.b -4, -4, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3, -2
 
dc.b -4, -4, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3, -2
dc.b -2, -2, -2, -2, -1, -1, -1, -1, -1</asm>
+
dc.b -2, -2, -2, -2, -1, -1, -1, -1, -1</syntaxhighlight>
  
 
The programmers extended this array so it would also be usable by the deformation data even though it was designed to be used by the water bubbles.
 
The programmers extended this array so it would also be usable by the deformation data even though it was designed to be used by the water bubbles.
Line 31: Line 30:
 
===Step 2===
 
===Step 2===
 
Next, we'll do the BGScroll data. Go to BGScroll_GHZ in the disassembly. Replace everything from there until the end of BGScroll_End with the following:
 
Next, we'll do the BGScroll data. Go to BGScroll_GHZ in the disassembly. Replace everything from there until the end of BGScroll_End with the following:
<asm>BgScroll_GHZ: ; XREF: BgScroll_Index
+
<syntaxhighlight lang="asm">BgScroll_GHZ: ; XREF: BgScroll_Index
 
clr.l ($FFFFF708).w
 
clr.l ($FFFFF708).w
 
clr.l ($FFFFF70C).w
 
clr.l ($FFFFF70C).w
Line 98: Line 97:
 
clr.l (a2)+
 
clr.l (a2)+
 
clr.l (a2)+
 
clr.l (a2)+
rts  </asm>
+
rts  </syntaxhighlight>
  
 
The starting deformation data for every stage needed to be changed. To be precise, it prevents bugs that occur in the scrolling in SBZ and SYZ, and prevents a bug that causes GHZ's bg not to appear at all.
 
The starting deformation data for every stage needed to be changed. To be precise, it prevents bugs that occur in the scrolling in SBZ and SYZ, and prevents a bug that causes GHZ's bg not to appear at all.
Line 104: Line 103:
 
===Step 3===
 
===Step 3===
 
Next, we'll do the deformation data itself. Go to Deform_GHZ, and replace everything from there until the end of Deform_SBZ, straight down (right before ScrollHoriz) with the following:
 
Next, we'll do the deformation data itself. Go to Deform_GHZ, and replace everything from there until the end of Deform_SBZ, straight down (right before ScrollHoriz) with the following:
<asm>Deform_GHZ:
+
<syntaxhighlight lang="asm">Deform_GHZ:
 
move.w ($FFFFF73A).w,d4
 
move.w ($FFFFF73A).w,d4
 
ext.l d4
 
ext.l d4
Line 127: Line 126:
 
moveq #0,d0
 
moveq #0,d0
  
Deform_GHZ_1: ; CODE XREF: Deform_GHZ+36�j
+
Deform_GHZ_1: ; XREF: Deform_GHZ
 
move.w d0,d4
 
move.w d0,d4
 
move.w d0,($FFFFF618).w
 
move.w d0,($FFFFF618).w
Line 135: Line 134:
 
moveq #0,d0
 
moveq #0,d0
  
Deform_GHZ_2: ; CODE XREF: Deform_GHZ+4A�j
+
Deform_GHZ_2: ; XREF: Deform_GHZ
 
neg.w d0
 
neg.w d0
 
swap d0
 
swap d0
Line 149: Line 148:
 
bcs.s Deform_GHZ_4
 
bcs.s Deform_GHZ_4
  
Deform_GHZ_3: ; CODE XREF: Deform_GHZ+7C�j
+
Deform_GHZ_3: ; XREF: Deform_GHZ
 
move.l d0,(a1)+
 
move.l d0,(a1)+
 
dbf d1,Deform_GHZ_3
 
dbf d1,Deform_GHZ_3
  
Deform_GHZ_4: ; CODE XREF: Deform_GHZ+78�j
+
Deform_GHZ_4: ; XREF: Deform_GHZ
 
move.w ($FFFFA804).w,d0
 
move.w ($FFFFA804).w,d0
 
add.w ($FFFFF718).w,d0
 
add.w ($FFFFF718).w,d0
Line 159: Line 158:
 
move.w #$F,d1
 
move.w #$F,d1
  
Deform_GHZ_5: ; CODE XREF: Deform_GHZ+90�j
+
Deform_GHZ_5: ; XREF: Deform_GHZ
 
move.l d0,(a1)+
 
move.l d0,(a1)+
 
dbf d1,Deform_GHZ_5
 
dbf d1,Deform_GHZ_5
Line 167: Line 166:
 
move.w #$F,d1
 
move.w #$F,d1
  
Deform_GHZ_6: ; CODE XREF: Deform_GHZ+A4�j
+
Deform_GHZ_6: ; XREF: Deform_GHZ
 
move.l d0,(a1)+
 
move.l d0,(a1)+
 
dbf d1,Deform_GHZ_6
 
dbf d1,Deform_GHZ_6
Line 174: Line 173:
 
neg.w d0
 
neg.w d0
  
Deform_GHZ_7: ; CODE XREF: Deform_GHZ+B4�j
+
Deform_GHZ_7: ; XREF: Deform_GHZ
 
move.l d0,(a1)+
 
move.l d0,(a1)+
 
dbf d1,Deform_GHZ_7
 
dbf d1,Deform_GHZ_7
Line 181: Line 180:
 
neg.w d0
 
neg.w d0
  
Deform_GHZ_8: ; CODE XREF: Deform_GHZ+C4�j
+
Deform_GHZ_8: ; XREF: Deform_GHZ
 
move.l d0,(a1)+
 
move.l d0,(a1)+
 
dbf d1,Deform_GHZ_8
 
dbf d1,Deform_GHZ_8
Line 197: Line 196:
 
add.w d4,d1
 
add.w d4,d1
  
Deform_GHZ_9: ; CODE XREF: Deform_GHZ+F4�j
+
Deform_GHZ_9: ; XREF: Deform_GHZ
 
move.w d3,d0
 
move.w d3,d0
 
neg.w d0
 
neg.w d0
Line 209: Line 208:
  
  
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
+
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  
  
Line 241: Line 240:
 
move.w ($FFFFF704).w,d5
 
move.w ($FFFFF704).w,d5
  
Deform_LZ_1: ; CODE XREF: Deform_LZ+6E�j
+
Deform_LZ_1: ; XREF: Deform_LZ
 
cmp.w d4,d5
 
cmp.w d4,d5
 
bge.s Deform_LZ_2
 
bge.s Deform_LZ_2
Line 250: Line 249:
 
dbf d1,Deform_LZ_1
 
dbf d1,Deform_LZ_1
 
rts
 
rts
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
  
Deform_LZ_2: ; CODE XREF: Deform_LZ+64�j
+
Deform_LZ_2: ; XREF: Deform_LZ
; Deform_LZ+8C�j
 
 
move.b (a3,d3.w),d4
 
move.b (a3,d3.w),d4
 
ext.w d4
 
ext.w d4
Line 268: Line 266:
 
; End of function Deform_LZ
 
; End of function Deform_LZ
  
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
 
LZ_Wave_Data: dc.b  1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
 
LZ_Wave_Data: dc.b  1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
; DATA XREF: Deform_LZ+1A�o
 
 
dc.b  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
 
dc.b  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
 
dc.b  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
 
dc.b  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
Line 287: Line 284:
 
dc.b  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
 
dc.b  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
  
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
+
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  
  
Line 319: Line 316:
 
add.w d1,d0
 
add.w d1,d0
  
Deform_MZ_1: ; CODE XREF: Deform_MZ+3C�j
+
Deform_MZ_1: ; XREF: Deform_MZ
 
move.w d0,($FFFFF714).w
 
move.w d0,($FFFFF714).w
 
move.w d0,($FFFFF71C).w
 
move.w d0,($FFFFF71C).w
Line 346: Line 343:
 
move.w #4,d1
 
move.w #4,d1
  
Deform_MZ_2: ; CODE XREF: Deform_MZ+9E�j
+
Deform_MZ_2: ; XREF: Deform_MZ
 
move.w d3,(a1)+
 
move.w d3,(a1)+
 
swap d3
 
swap d3
Line 356: Line 353:
 
move.w #1,d1
 
move.w #1,d1
  
Deform_MZ_3: ; CODE XREF: Deform_MZ+AE�j
+
Deform_MZ_3: ; XREF: Deform_MZ
 
move.w d0,(a1)+
 
move.w d0,(a1)+
 
dbf d1,Deform_MZ_3
 
dbf d1,Deform_MZ_3
Line 363: Line 360:
 
move.w #8,d1
 
move.w #8,d1
  
Deform_MZ_4: ; CODE XREF: Deform_MZ+BE�j
+
Deform_MZ_4: ; XREF: Deform_MZ
 
move.w d0,(a1)+
 
move.w d0,(a1)+
 
dbf d1,Deform_MZ_4
 
dbf d1,Deform_MZ_4
Line 370: Line 367:
 
move.w #$F,d1
 
move.w #$F,d1
  
Deform_MZ_5: ; CODE XREF: Deform_MZ+CE�j
+
Deform_MZ_5: ; XREF: Deform_MZ
 
move.w d0,(a1)+
 
move.w d0,(a1)+
 
dbf d1,Deform_MZ_5
 
dbf d1,Deform_MZ_5
Line 381: Line 378:
 
move.w #$100,d0
 
move.w #$100,d0
  
Deform_MZ_6: ; CODE XREF: Deform_MZ+E4�j
+
Deform_MZ_6: ; XREF: Deform_MZ
 
andi.w #$1F0,d0
 
andi.w #$1F0,d0
 
lsr.w #3,d0
 
lsr.w #3,d0
 
lea (a2,d0.w),a2
 
lea (a2,d0.w),a2
 
bra.w Deform_All
 
bra.w Deform_All
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
  
 
Deform_SLZ:
 
Deform_SLZ:
Line 410: Line 407:
 
move.w #$1B,d1
 
move.w #$1B,d1
  
Deform_SLZ_1: ; CODE XREF: Deform_MZ+138�j
+
Deform_SLZ_1: ; XREF: Deform_MZ
 
move.w d3,(a1)+
 
move.w d3,(a1)+
 
swap d3
 
swap d3
Line 423: Line 420:
 
move.w #4,d1
 
move.w #4,d1
  
Deform_SLZ_2: ; CODE XREF: Deform_MZ+14C�j
+
Deform_SLZ_2: ; XREF: Deform_MZ
 
move.w d0,(a1)+
 
move.w d0,(a1)+
 
dbf d1,Deform_SLZ_2
 
dbf d1,Deform_SLZ_2
Line 430: Line 427:
 
move.w #4,d1
 
move.w #4,d1
  
Deform_SLZ_3: ; CODE XREF: Deform_MZ+15A�j
+
Deform_SLZ_3: ; XREF: Deform_MZ
 
move.w d0,(a1)+
 
move.w d0,(a1)+
 
dbf d1,Deform_SLZ_3
 
dbf d1,Deform_SLZ_3
Line 437: Line 434:
 
move.w #$1D,d1
 
move.w #$1D,d1
  
Deform_SLZ_4: ; CODE XREF: Deform_MZ+168�j
+
Deform_SLZ_4: ; XREF: Deform_MZ
 
move.w d0,(a1)+
 
move.w d0,(a1)+
 
dbf d1,Deform_SLZ_4
 
dbf d1,Deform_SLZ_4
Line 448: Line 445:
 
lea (a2,d0.w),a2
 
lea (a2,d0.w),a2
  
Deform_All: ; CODE XREF: Deform_MZ+F4�j
+
Deform_All: ; XREF: Deform_MZ, Deform_SYZ, ...
; Deform_SYZ+A8�j ...
 
 
lea ($FFFFCC00).w,a1
 
lea ($FFFFCC00).w,a1
 
move.w #$E,d1
 
move.w #$E,d1
Line 461: Line 457:
 
; End of function Deform_MZ
 
; End of function Deform_MZ
  
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
  
Deform_All_1: ; CODE XREF: ROM:0000670A�j
+
Deform_All_1: ; XREF: Deform_All
 
move.w (a2)+,d0
 
move.w (a2)+,d0
  
Line 486: Line 482:
 
rts
 
rts
  
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
+
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  
  
Line 515: Line 511:
 
move.w #7,d1
 
move.w #7,d1
  
Deform_SYZ_1: ; CODE XREF: Deform_SYZ+48�j
+
Deform_SYZ_1: ; XREF: Deform_SYZ
 
move.w d3,(a1)+
 
move.w d3,(a1)+
 
swap d3
 
swap d3
Line 525: Line 521:
 
move.w #4,d1
 
move.w #4,d1
  
Deform_SYZ_2: ; CODE XREF: Deform_SYZ+56�j
+
Deform_SYZ_2: ; XREF: Deform_SYZ
 
move.w d0,(a1)+
 
move.w d0,(a1)+
 
dbf d1,Deform_SYZ_2
 
dbf d1,Deform_SYZ_2
Line 532: Line 528:
 
move.w #5,d1
 
move.w #5,d1
  
Deform_SYZ_3: ; CODE XREF: Deform_SYZ+64�j
+
Deform_SYZ_3: ; XREF: Deform_SYZ
 
move.w d0,(a1)+
 
move.w d0,(a1)+
 
dbf d1,Deform_SYZ_3
 
dbf d1,Deform_SYZ_3
Line 550: Line 546:
 
move.w #$D,d1
 
move.w #$D,d1
  
Deform_SYZ_4: ; CODE XREF: Deform_SYZ+90�j
+
Deform_SYZ_4: ; XREF: Deform_SYZ
 
move.w d3,(a1)+
 
move.w d3,(a1)+
 
swap d3
 
swap d3
Line 566: Line 562:
  
  
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
+
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  
  
Line 621: Line 617:
 
move.w #3,d1
 
move.w #3,d1
  
Deform_SBZ_1: ; CODE XREF: Deform_SBZ+9A�j
+
Deform_SBZ_1: ; XREF: Deform_SBZ
 
move.w d3,(a1)+
 
move.w d3,(a1)+
 
swap d3
 
swap d3
Line 631: Line 627:
 
move.w #9,d1
 
move.w #9,d1
  
Deform_SBZ_2: ; CODE XREF: Deform_SBZ+AA�j
+
Deform_SBZ_2: ; XREF: Deform_SBZ
 
move.w d0,(a1)+
 
move.w d0,(a1)+
 
dbf d1,Deform_SBZ_2
 
dbf d1,Deform_SBZ_2
Line 638: Line 634:
 
move.w #6,d1
 
move.w #6,d1
  
Deform_SBZ_3: ; CODE XREF: Deform_SBZ+BA�j
+
Deform_SBZ_3: ; XREF: Deform_SBZ
 
move.w d0,(a1)+
 
move.w d0,(a1)+
 
dbf d1,Deform_SBZ_3
 
dbf d1,Deform_SBZ_3
Line 645: Line 641:
 
move.w #$A,d1
 
move.w #$A,d1
  
Deform_SBZ_4: ; CODE XREF: Deform_SBZ+CA�j
+
Deform_SBZ_4: ; XREF: Deform_SBZ
 
move.w d0,(a1)+
 
move.w d0,(a1)+
 
dbf d1,Deform_SBZ_4
 
dbf d1,Deform_SBZ_4
Line 655: Line 651:
 
lea (a2,d0.w),a2
 
lea (a2,d0.w),a2
 
bra.w Deform_All
 
bra.w Deform_All
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
  
Deform_SBZ_Act2: ; CODE XREF: Deform_SBZ+4�j
+
Deform_SBZ_Act2: ; XREF: Deform_SBZ
 
move.w ($FFFFF73A).w,d4
 
move.w ($FFFFF73A).w,d4
 
ext.l d4
 
ext.l d4
Line 674: Line 670:
 
neg.w d0
 
neg.w d0
  
Deform_SBZ_Act2_1: ; CODE XREF: Deform_SBZ+118�j
+
Deform_SBZ_Act2_1: ; XREF: Deform_SBZ
 
move.l d0,(a1)+
 
move.l d0,(a1)+
 
dbf d1,Deform_SBZ_Act2_1
 
dbf d1,Deform_SBZ_Act2_1
 
rts
 
rts
; End of function Deform_SBZ</asm>
+
; End of function Deform_SBZ</syntaxhighlight>
  
 
===Step 4===
 
===Step 4===
 
The new Bg drawing system required a different method of scrolling the BGs themselves. Go to ScrollBlock1 and replace everything from there until the end of ScrollBlock4 with the following:
 
The new Bg drawing system required a different method of scrolling the BGs themselves. Go to ScrollBlock1 and replace everything from there until the end of ScrollBlock4 with the following:
<asm>ScrollBlock1: ; CODE XREF: Deform_LZ+10�p
+
<syntaxhighlight lang="asm">ScrollBlock1: ; XREF: Deform_LZ, Deform_SBZ
; Deform_SBZ+F6�p
 
 
move.l ($FFFFF708).w,d2
 
move.l ($FFFFF708).w,d2
 
move.l d2,d0
 
move.l d2,d0
Line 699: Line 694:
 
bset #2,($FFFFF756).w
 
bset #2,($FFFFF756).w
 
bra.s ScrollBlock1_2
 
bra.s ScrollBlock1_2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
  
ScrollBlock1_1: ; CODE XREF: ScrollBlock1+24�j
+
ScrollBlock1_1: ; XREF: ScrollBlock1
 
bset #3,($FFFFF756).w
 
bset #3,($FFFFF756).w
  
ScrollBlock1_2: ; CODE XREF: Deform_SBZ+42�p
+
ScrollBlock1_2: ; XREF: ScrollBlock1, Deform_SBZ, ...
; ScrollBlock1+1A�j ...
 
 
move.l ($FFFFF70C).w,d3
 
move.l ($FFFFF70C).w,d3
 
move.l d3,d0
 
move.l d3,d0
Line 721: Line 715:
 
bset #0,($FFFFF756).w
 
bset #0,($FFFFF756).w
 
rts
 
rts
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
  
ScrollBlock1_3: ; CODE XREF: ScrollBlock1+58�j
+
ScrollBlock1_3: ; XREF: ScrollBlock1
 
bset #1,($FFFFF756).w
 
bset #1,($FFFFF756).w
  
ScrollBlock1_End: ; CODE XREF: ScrollBlock1+4E�j
+
ScrollBlock1_End: ; XREF: ScrollBlock1
 
rts
 
rts
 
; End of function ScrollBlock1
 
; End of function ScrollBlock1
  
  
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
+
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  
  
ScrollBlock2: ; CODE XREF: Deform_MZ+100�p
+
ScrollBlock2: ; XREF: Deform_MZ, Deform_SYZ
; Deform_SYZ+E�p
 
 
move.l ($FFFFF70C).w,d3
 
move.l ($FFFFF70C).w,d3
 
move.l d3,d0
 
move.l d3,d0
Line 751: Line 744:
 
bset #4,($FFFFF756).w
 
bset #4,($FFFFF756).w
 
rts
 
rts
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
  
ScrollBlock2_1: ; CODE XREF: ScrollBlock2+24�j
+
ScrollBlock2_1: ; XREF: ScrollBlock2
 
bset #5,($FFFFF756).w
 
bset #5,($FFFFF756).w
  
ScrollBlock2_End: ; CODE XREF: ScrollBlock2+1A�j
+
ScrollBlock2_End: ; XREF: ScrollBlock2
 
rts
 
rts
 
; End of function ScrollBlock2
 
; End of function ScrollBlock2
  
  
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
+
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  
  
ScrollBlock3: ; CODE XREF: Deform_MZ+50�p
+
ScrollBlock3: ; XREF: Deform_MZ
 
move.w ($FFFFF70C).w,d3
 
move.w ($FFFFF70C).w,d3
 
move.w d0,($FFFFF70C).w
 
move.w d0,($FFFFF70C).w
Line 777: Line 770:
 
bset #0,($FFFFF756).w
 
bset #0,($FFFFF756).w
 
rts
 
rts
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
  
ScrollBlock3_1: ; CODE XREF: ScrollBlock3+1E�j
+
ScrollBlock3_1: ; XREF: ScrollBlock3
 
bset #1,($FFFFF756).w
 
bset #1,($FFFFF756).w
  
ScrollBlock3_End: ; CODE XREF: ScrollBlock3+14�j
+
ScrollBlock3_End: ; XREF: ScrollBlock3
 
rts
 
rts
 
; End of function ScrollBlock3
 
; End of function ScrollBlock3
  
  
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
+
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  
  
ScrollBlock4: ; CODE XREF: Deform_MZ+10�p
+
ScrollBlock4: ; XREF: Deform_MZ, Deform_SBZ
; Deform_SBZ+12�p
 
 
move.l ($FFFFF708).w,d2
 
move.l ($FFFFF708).w,d2
 
move.l d2,d0
 
move.l d2,d0
Line 807: Line 799:
 
bset d6,($FFFFF756).w
 
bset d6,($FFFFF756).w
 
bra.s ScrollBlock4_End
 
bra.s ScrollBlock4_End
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
  
ScrollBlock4_1: ; CODE XREF: ScrollBlock4+24�j
+
ScrollBlock4_1: ; XREF: ScrollBlock4
 
addq.b #1,d6
 
addq.b #1,d6
 
bset d6,($FFFFF756).w
 
bset d6,($FFFFF756).w
  
ScrollBlock4_End: ; CODE XREF: ScrollBlock4+1A�j
+
ScrollBlock4_End: ; XREF: ScrollBlock4
; ScrollBlock4+2A�j
 
 
rts
 
rts
 
; End of function ScrollBlock4
 
; End of function ScrollBlock4
  
  
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
+
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  
  
ScrollBlock5: ; CODE XREF: Deform_GHZ+1E�p
+
ScrollBlock5: ; XREF: Deform_GHZ, Deform_MZ, ...
; Deform_MZ+2C�p ...
 
 
move.l ($FFFFF710).w,d2
 
move.l ($FFFFF710).w,d2
 
move.l d2,d0
 
move.l d2,d0
Line 839: Line 829:
 
bset d6,($FFFFF758).w
 
bset d6,($FFFFF758).w
 
bra.s ScrollBlock5_End
 
bra.s ScrollBlock5_End
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
  
ScrollBlock5_1: ; CODE XREF: ScrollBlock5+24�j
+
ScrollBlock5_1: ; XREF: ScrollBlock5
 
addq.b #1,d6
 
addq.b #1,d6
 
bset d6,($FFFFF758).w
 
bset d6,($FFFFF758).w
  
ScrollBlock5_End: ; CODE XREF: ScrollBlock5+1A�j
+
ScrollBlock5_End: ; XREF: ScrollBlock5
; ScrollBlock5+2A�j
 
 
rts
 
rts
 
; End of function ScrollBlock5
 
; End of function ScrollBlock5
  
  
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
+
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  
  
ScrollBlock6: ; CODE XREF: Deform_GHZ+10�p
+
ScrollBlock6: ; XREF: Deform_GHZ, Deform_MZ, ...
; Deform_MZ+1E�p ...
 
 
move.l ($FFFFF718).w,d2
 
move.l ($FFFFF718).w,d2
 
move.l d2,d0
 
move.l d2,d0
Line 871: Line 859:
 
bset d6,($FFFFF75A).w
 
bset d6,($FFFFF75A).w
 
bra.s ScrollBlock6_End
 
bra.s ScrollBlock6_End
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
  
ScrollBlock6_1: ; CODE XREF: ScrollBlock6+24�j
+
ScrollBlock6_1: ; XREF: ScrollBlock6
 
addq.b #1,d6
 
addq.b #1,d6
 
bset d6,($FFFFF75A).w
 
bset d6,($FFFFF75A).w
  
ScrollBlock6_End: ; CODE XREF: ScrollBlock6+1A�j
+
ScrollBlock6_End: ; XREF: ScrollBlock6
; ScrollBlock6+2A�j
 
 
rts
 
rts
; End of function ScrollBlock6</asm>
+
; End of function ScrollBlock6</syntaxhighlight>
  
 
Don't worry that there are six BGScroll functions now, that's taken cared of.
 
Don't worry that there are six BGScroll functions now, that's taken cared of.
Line 886: Line 873:
 
===Step 5===
 
===Step 5===
 
Finally, the biggest part: the BG drawing code. Go to sub_6886 and replace everything from there until the end of LoadTilesFromStart2 (that's a VERY long way, up until MainLoadBlockLoad) with the following:
 
Finally, the biggest part: the BG drawing code. Go to sub_6886 and replace everything from there until the end of LoadTilesFromStart2 (that's a VERY long way, up until MainLoadBlockLoad) with the following:
<asm>sub_6886:
+
<syntaxhighlight lang="asm">sub_6886:
 
lea ($C00004).l,a5
 
lea ($C00004).l,a5
 
lea ($C00000).l,a6
 
lea ($C00000).l,a6
Line 930: Line 917:
 
moveq #$F,d6 ;
 
moveq #$F,d6 ;
  
Draw_All: ; CODE XREF: ROM:0000DAEA�j
+
Draw_All:
 
movem.l d4-d6,-(sp) ; This whole routine basically redraws the whole
 
movem.l d4-d6,-(sp) ; This whole routine basically redraws the whole
 
moveq #-$10,d5 ; area instead of merely a line of tiles
 
moveq #-$10,d5 ; area instead of merely a line of tiles
Line 955: Line 942:
 
bsr.w DrawTiles_LR
 
bsr.w DrawTiles_LR
  
loc_6CBE: ; CODE XREF: ROM:00006CAC�j
+
loc_6CBE:
 
bclr #1,(a2)
 
bclr #1,(a2)
 
beq.s loc_6CD8
 
beq.s loc_6CD8
Line 965: Line 952:
 
bsr.w DrawTiles_LR
 
bsr.w DrawTiles_LR
  
loc_6CD8: ; CODE XREF: ROM:00006CC2�j
+
loc_6CD8:
 
bclr #2,(a2)
 
bclr #2,(a2)
 
beq.s loc_6CEE
 
beq.s loc_6CEE
Line 975: Line 962:
 
bsr.w DrawTiles_TB
 
bsr.w DrawTiles_TB
  
loc_6CEE: ; CODE XREF: ROM:00006CDC�j
+
loc_6CEE:
 
bclr #3,(a2)
 
bclr #3,(a2)
 
beq.s locret_6D08
 
beq.s locret_6D08
Line 985: Line 972:
 
bsr.w DrawTiles_TB
 
bsr.w DrawTiles_TB
  
locret_6D08: ; CODE XREF: ROM:00006CA6�j
+
locret_6D08:
; ROM:00006CF2�j
 
 
rts
 
rts
  
Line 995: Line 981:
  
  
sub_6D0A: ; CODE XREF: ROM:00006C4C�p
+
sub_6D0A:
; ROM:00006C78�p
 
 
tst.b (a2)
 
tst.b (a2)
 
beq.w locret_6DA4
 
beq.w locret_6DA4
Line 1,008: Line 993:
 
bsr.w DrawTiles_LR
 
bsr.w DrawTiles_LR
  
loc_6D26: ; CODE XREF: sub_6D0A+A�j
+
loc_6D26:
 
bclr #1,(a2)
 
bclr #1,(a2)
 
beq.s loc_6D40
 
beq.s loc_6D40
Line 1,018: Line 1,003:
 
bsr.w DrawTiles_LR
 
bsr.w DrawTiles_LR
  
loc_6D40: ; CODE XREF: sub_6D0A+20�j
+
loc_6D40:
 
bclr #2,(a2)
 
bclr #2,(a2)
 
beq.s loc_6D56
 
beq.s loc_6D56
Line 1,028: Line 1,013:
 
bsr.w DrawTiles_TB
 
bsr.w DrawTiles_TB
  
loc_6D56: ; CODE XREF: sub_6D0A+3A�j
+
loc_6D56:
 
bclr #3,(a2)
 
bclr #3,(a2)
 
beq.s loc_6D70
 
beq.s loc_6D70
Line 1,038: Line 1,023:
 
bsr.w DrawTiles_TB
 
bsr.w DrawTiles_TB
  
loc_6D70: ; CODE XREF: sub_6D0A+50�j
+
loc_6D70:
 
bclr #4,(a2)
 
bclr #4,(a2)
 
beq.s loc_6D88
 
beq.s loc_6D88
Line 1,049: Line 1,034:
 
bsr.w DrawTiles_LR3
 
bsr.w DrawTiles_LR3
  
loc_6D88: ; CODE XREF: sub_6D0A+6A�j
+
loc_6D88:
 
bclr #5,(a2)
 
bclr #5,(a2)
 
beq.s locret_6DA4
 
beq.s locret_6DA4
Line 1,060: Line 1,045:
 
bsr.w DrawTiles_LR3
 
bsr.w DrawTiles_LR3
  
locret_6DA4: ; CODE XREF: sub_6D0A+2�j sub_6D0A+82�j
+
locret_6DA4:
 
rts
 
rts
 
; End of function sub_6D0A
 
; End of function sub_6D0A
  
  
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
+
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  
  
sub_6DA6: ; CODE XREF: ROM:00006C58�j
+
sub_6DA6:
; ROM:00006C84�p
 
 
tst.b (a2)
 
tst.b (a2)
 
beq.w locret_6DF2
 
beq.w locret_6DF2
Line 1,084: Line 1,068:
 
bsr.w DrawTiles_TB2
 
bsr.w DrawTiles_TB2
  
loc_6DD2: ; CODE XREF: sub_6DA6+14�j
+
loc_6DD2:
 
bclr #1,(a2)
 
bclr #1,(a2)
 
beq.s locret_6DF2
 
beq.s locret_6DF2
Line 1,095: Line 1,079:
 
bsr.w DrawTiles_TB2
 
bsr.w DrawTiles_TB2
  
locret_6DF2: ; CODE XREF: sub_6DA6+2�j sub_6DA6+30�j
+
locret_6DF2:
 
rts
 
rts
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
unk_6DF4: dc.b  0 ; ; DATA XREF: sub_6DA6+E6�o
+
unk_6DF4: dc.b  0 ;
unk_6DF5: dc.b  0 ; ; DATA XREF: sub_6DA6+82�o
+
unk_6DF5: dc.b  0 ;
; ROM:00007290�o
 
 
dc.b  0 ;   
 
dc.b  0 ;   
 
dc.b  0 ;   
 
dc.b  0 ;   
Line 1,133: Line 1,116:
 
dc.b  2 ;   
 
dc.b  2 ;   
 
dc.b  0 ;   
 
dc.b  0 ;   
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
  
loc_6E16: ; CODE XREF: sub_6DA6+C�j
+
loc_6E16:
 
moveq #-$10,d4
 
moveq #-$10,d4
 
bclr #0,(a2)
 
bclr #0,(a2)
Line 1,143: Line 1,126:
 
move.w #$E0,d4 ; 'à'
 
move.w #$E0,d4 ; 'à'
  
loc_6E28: ; CODE XREF: sub_6DA6+76�j
+
loc_6E28:
 
lea (unk_6DF5).l,a0
 
lea (unk_6DF5).l,a0
 
move.w ($FFFFF70C).w,d0
 
move.w ($FFFFF70C).w,d0
Line 1,159: Line 1,142:
 
bsr.w DrawTiles_LR
 
bsr.w DrawTiles_LR
 
bra.s loc_6E72
 
bra.s loc_6E72
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
  
loc_6E5E: ; CODE XREF: sub_6DA6+A2�j
+
loc_6E5E:
 
moveq #0,d5
 
moveq #0,d5
 
movem.l d4-d5,-(sp)
 
movem.l d4-d5,-(sp)
Line 1,169: Line 1,152:
 
bsr.w DrawTiles_LR3
 
bsr.w DrawTiles_LR3
  
loc_6E72: ; CODE XREF: sub_6DA6+7C�j sub_6DA6+B6�j
+
loc_6E72:
 
tst.b (a2)
 
tst.b (a2)
 
bne.s loc_6E78
 
bne.s loc_6E78
 
rts
 
rts
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
  
loc_6E78: ; CODE XREF: sub_6DA6+CE�j
+
loc_6E78:
 
moveq #-$10,d4
 
moveq #-$10,d4
 
moveq #-$10,d5
 
moveq #-$10,d5
Line 1,185: Line 1,168:
 
move.w #$140,d5
 
move.w #$140,d5
  
loc_6E8C: ; CODE XREF: sub_6DA6+DC�j
+
loc_6E8C:
 
lea (unk_6DF4).l,a0
 
lea (unk_6DF4).l,a0
 
move.w ($FFFFF70C).w,d0
 
move.w ($FFFFF70C).w,d0
Line 1,195: Line 1,178:
  
  
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
+
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  
  
sub_6EA4: ; CODE XREF: ROM:00006C90�p
+
sub_6EA4:
 
tst.b (a2)
 
tst.b (a2)
 
beq.w locret_6EF0
 
beq.w locret_6EF0
Line 1,213: Line 1,196:
 
bsr.w DrawTiles_TB2
 
bsr.w DrawTiles_TB2
  
loc_6ED0_2: ; CODE XREF: sub_6EA4+14�j
+
loc_6ED0_2:
 
bclr #1,(a2)
 
bclr #1,(a2)
 
beq.s locret_6EF0
 
beq.s locret_6EF0
Line 1,224: Line 1,207:
 
bsr.w DrawTiles_TB2
 
bsr.w DrawTiles_TB2
  
locret_6EF0: ; CODE XREF: sub_6EA4+2�j sub_6EA4+30�j
+
locret_6EF0:
 
rts
 
rts
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
unk_6EF2: dc.b  0 ; ; DATA XREF: sub_6EA4+124�o
+
unk_6EF2: dc.b  0 ;
unk_6EF3: dc.b  0 ; ; DATA XREF: sub_6EA4+C2�o
+
unk_6EF3: dc.b  0 ;
; ROM:00007262�o
 
 
dc.b  0 ;   
 
dc.b  0 ;   
 
dc.b  0 ;   
 
dc.b  0 ;   
Line 1,326: Line 1,308:
 
dc.b  2 ;   
 
dc.b  2 ;   
 
dc.b  0 ;   
 
dc.b  0 ;   
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
  
loc_6F54: ; CODE XREF: sub_6EA4+C�j
+
loc_6F54:
 
moveq #-$10,d4
 
moveq #-$10,d4
 
bclr #0,(a2)
 
bclr #0,(a2)
Line 1,336: Line 1,318:
 
move.w #$E0,d4 ; 'à'
 
move.w #$E0,d4 ; 'à'
  
loc_6F66: ; CODE XREF: sub_6EA4+B6�j
+
loc_6F66:
 
lea (unk_6EF3).l,a0
 
lea (unk_6EF3).l,a0
 
move.w ($FFFFF70C).w,d0
 
move.w ($FFFFF70C).w,d0
Line 1,352: Line 1,334:
 
bsr.w DrawTiles_LR
 
bsr.w DrawTiles_LR
 
bra.s loc_6FAE
 
bra.s loc_6FAE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
  
loc_6F9A: ; CODE XREF: sub_6EA4+E0�j
+
loc_6F9A:
 
moveq #0,d5
 
moveq #0,d5
 
movem.l d4-d5,-(sp)
 
movem.l d4-d5,-(sp)
Line 1,362: Line 1,344:
 
bsr.w DrawTiles_LR3
 
bsr.w DrawTiles_LR3
  
loc_6FAE: ; CODE XREF: sub_6EA4+BC�j sub_6EA4+F4�j
+
loc_6FAE:
 
tst.b (a2)
 
tst.b (a2)
 
bne.s loc_6FB4
 
bne.s loc_6FB4
 
rts
 
rts
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
  
loc_6FB4: ; CODE XREF: sub_6EA4+10C�j
+
loc_6FB4:
 
moveq #-$10,d4
 
moveq #-$10,d4
 
moveq #-$10,d5
 
moveq #-$10,d5
Line 1,378: Line 1,360:
 
move.w #$140,d5
 
move.w #$140,d5
  
loc_6FC8: ; CODE XREF: sub_6EA4+11A�j
+
loc_6FC8:
 
lea (unk_6EF2).l,a0
 
lea (unk_6EF2).l,a0
 
move.w ($FFFFF70C).w,d0
 
move.w ($FFFFF70C).w,d0
Line 1,386: Line 1,368:
 
lea (a0,d0.w),a0
 
lea (a0,d0.w),a0
 
bra.w loc_6FEC
 
bra.w loc_6FEC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
unk_6FE4: dc.b $FF ; ; DATA XREF: sub_6DA6+98�o
+
unk_6FE4: dc.b $FF ;
 
dc.b $18 ;   
 
dc.b $18 ;   
 
dc.b $FF ;   
 
dc.b $FF ;   
Line 1,395: Line 1,377:
 
dc.b $FF ;   
 
dc.b $FF ;   
 
dc.b $28 ; (
 
dc.b $28 ; (
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
  
loc_6FEC: ; CODE XREF: sub_6DA6+FA�j
+
loc_6FEC:
; sub_6EA4+13C�j
 
 
moveq #$F,d6
 
moveq #$F,d6
 
move.l #$800000,d7
 
move.l #$800000,d7
  
loc_6FF4: ; CODE XREF: sub_6EA4+17C�j
+
loc_6FF4:
 
moveq #0,d0
 
moveq #0,d0
 
move.b (a0)+,d0
 
move.b (a0)+,d0
Line 1,416: Line 1,397:
 
movem.l (sp)+,d4-d5/a0
 
movem.l (sp)+,d4-d5/a0
  
loc_701C: ; CODE XREF: sub_6EA4+156�j
+
loc_701C:
 
addi.w #$10,d4
 
addi.w #$10,d4
 
dbf d6,loc_6FF4
 
dbf d6,loc_6FF4
Line 1,424: Line 1,405:
  
  
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
+
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  
  
DrawTiles_LR: ; CODE XREF: ROM:00006CBA�p
+
DrawTiles_LR:
; ROM:00006CD4�p ...
 
 
moveq #$15,d6
 
moveq #$15,d6
 
; End of function DrawTiles_LR
 
; End of function DrawTiles_LR
  
  
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
+
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  
  
DrawTiles_LR2: ; CODE XREF: LoadTilesFromStart2+16�p
+
DrawTiles_LR2:
 
move.l #$800000,d7
 
move.l #$800000,d7
 
move.l d0,d1
 
move.l d0,d1
  
loc_7032: ; CODE XREF: DrawTiles_LR2+24�j
+
loc_7032:
 
movem.l d4-d5,-(sp)
 
movem.l d4-d5,-(sp)
 
bsr.w sub_712A
 
bsr.w sub_712A
Line 1,454: Line 1,434:
  
  
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
+
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  
  
DrawTiles_LR3: ; CODE XREF: sub_6D0A+7A�p sub_6D0A+96�p ...
+
DrawTiles_LR3:
 
move.l #$800000,d7
 
move.l #$800000,d7
 
move.l d0,d1
 
move.l d0,d1
  
loc_705C: ; CODE XREF: DrawTiles_LR3+24�j
+
loc_705C:
 
movem.l d4-d5,-(sp)
 
movem.l d4-d5,-(sp)
 
bsr.w loc_712C
 
bsr.w loc_712C
Line 1,475: Line 1,455:
  
  
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
+
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  
  
DrawTiles_TB: ; CODE XREF: ROM:00006CEA�p
+
DrawTiles_TB:
; ROM:00006D04�p ...
 
 
moveq #$F,d6
 
moveq #$F,d6
 
; End of function DrawTiles_TB
 
; End of function DrawTiles_TB
  
  
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
+
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  
  
DrawTiles_TB2: ; CODE XREF: sub_6DA6+28�p sub_6DA6+48�p ...
+
DrawTiles_TB2:
 
move.l #$800000,d7
 
move.l #$800000,d7
 
move.l d0,d1
 
move.l d0,d1
  
loc_7088: ; CODE XREF: DrawTiles_TB2+26�j
+
loc_7088:
 
movem.l d4-d5,-(sp)
 
movem.l d4-d5,-(sp)
 
bsr.w sub_712A
 
bsr.w sub_712A
Line 1,505: Line 1,484:
  
  
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
+
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  
  
sub_70AC: ; CODE XREF: sub_6EA4+170�p
+
sub_70AC:
; DrawTiles_LR2+12�p ...
 
 
or.w d2,d0
 
or.w d2,d0
 
swap d0
 
swap d0
Line 1,522: Line 1,500:
 
move.l (a1)+,(a6)
 
move.l (a1)+,(a6)
 
rts
 
rts
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
  
loc_70C8: ; CODE XREF: sub_70AC+E�j
+
loc_70C8:
 
move.l d0,(a5)
 
move.l d0,(a5)
 
move.l (a1)+,d4
 
move.l (a1)+,d4
Line 1,537: Line 1,515:
 
move.l d4,(a6)
 
move.l d4,(a6)
 
rts
 
rts
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
  
loc_70E8: ; CODE XREF: sub_70AC+8�j
+
loc_70E8:
 
btst #3,(a0)
 
btst #3,(a0)
 
bne.s loc_710A
 
bne.s loc_710A
Line 1,552: Line 1,530:
 
move.l d5,(a6)
 
move.l d5,(a6)
 
rts
 
rts
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
  
loc_710A: ; CODE XREF: sub_70AC+40�j
+
loc_710A:
 
move.l d0,(a5)
 
move.l d0,(a5)
 
move.l (a1)+,d5
 
move.l (a1)+,d5
Line 1,570: Line 1,548:
  
  
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
+
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  
  
sub_712A: ; CODE XREF: sub_6EA4+164�p
+
sub_712A:
; DrawTiles_LR2+C�p ...
 
 
add.w (a3),d5
 
add.w (a3),d5
  
loc_712C: ; CODE XREF: DrawTiles_LR3+C�p
+
loc_712C:
 
add.w 4(a3),d4
 
add.w 4(a3),d4
 
lea ($FFFFB000).w,a1
 
lea ($FFFFB000).w,a1
Line 1,605: Line 1,582:
 
adda.w d3,a1
 
adda.w d3,a1
  
locret_7172: ; CODE XREF: sub_712A+24�j
+
locret_7172:
 
rts
 
rts
 
; End of function sub_712A
 
; End of function sub_712A
  
  
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
+
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  
  
Calc_VRAM_Pos: ; CODE XREF: ROM:00006CB2�p
+
Calc_VRAM_Pos:
; ROM:00006CCA�p ...
 
 
add.w (a3),d5
 
add.w (a3),d5
  
loc_7176: ; CODE XREF: sub_6D0A+70�p sub_6D0A+8A�p ...
+
loc_7176:
 
add.w 4(a3),d4
 
add.w 4(a3),d4
 
andi.w #$F0,d4 ; 'ð'
 
andi.w #$F0,d4 ; 'ð'
Line 1,630: Line 1,606:
 
; End of function Calc_VRAM_Pos
 
; End of function Calc_VRAM_Pos
  
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
 
add.w 4(a3),d4
 
add.w 4(a3),d4
 
add.w (a3),d5
 
add.w (a3),d5
Line 1,643: Line 1,619:
 
rts
 
rts
  
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
+
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  
  
LoadTilesFromStart: ; CODE XREF: ROM:0000395A�p
+
LoadTilesFromStart:
; ROM:000051B8�p
 
 
lea ($C00004).l,a5
 
lea ($C00004).l,a5
 
lea ($C00000).l,a6
 
lea ($C00000).l,a6
Line 1,668: Line 1,643:
  
  
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
+
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  
  
LoadTilesFromStart2: ; CODE XREF: ROM:00003096�p
+
LoadTilesFromStart2:
; ROM:0000536A�p ...
 
 
moveq #-$10,d4
 
moveq #-$10,d4
 
moveq #$F,d6
 
moveq #$F,d6
  
loc_71FC: ; CODE XREF: LoadTilesFromStart2+22�j
+
loc_71FC:
 
movem.l d4-d6,-(sp)
 
movem.l d4-d6,-(sp)
 
moveq #0,d5
 
moveq #0,d5
Line 1,691: Line 1,665:
 
; End of function LoadTilesFromStart2
 
; End of function LoadTilesFromStart2
  
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
  
loc_7220: ; CODE XREF: LoadTilesFromStart+2A�j
+
loc_7220:
; LoadTilesFromStart+48�j
 
 
moveq #0,d4
 
moveq #0,d4
 
moveq #$F,d6
 
moveq #$F,d6
  
loc_7224: ; CODE XREF: ROM:00007244�j
+
loc_7224:
 
movem.l d4-d6,-(sp)
 
movem.l d4-d6,-(sp)
 
lea (unk_724A).l,a0
 
lea (unk_724A).l,a0
Line 1,709: Line 1,682:
 
dbf d6,loc_7224
 
dbf d6,loc_7224
 
rts
 
rts
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
unk_724A: dc.b  0 ; ; DATA XREF: ROM:00007228�o
+
unk_724A: dc.b  0 ;
 
dc.b  0 ;   
 
dc.b  0 ;   
 
dc.b  0 ;   
 
dc.b  0 ;   
Line 1,726: Line 1,699:
 
dc.b  0 ;   
 
dc.b  0 ;   
 
dc.b  0 ;   
 
dc.b  0 ;   
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
  
loc_725A: ; CODE XREF: LoadTilesFromStart+34�j
+
loc_725A:
 
moveq #-$10,d4
 
moveq #-$10,d4
 
moveq #$F,d6
 
moveq #$F,d6
  
loc_725E: ; CODE XREF: ROM:00007282�j
+
loc_725E:
 
movem.l d4-d6,-(sp)
 
movem.l d4-d6,-(sp)
 
lea (unk_6EF3).l,a0
 
lea (unk_6EF3).l,a0
Line 1,744: Line 1,717:
 
dbf d6,loc_725E
 
dbf d6,loc_725E
 
rts
 
rts
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
  
loc_7288: ; CODE XREF: LoadTilesFromStart+3E�j
+
loc_7288:
 
moveq #-$10,d4
 
moveq #-$10,d4
 
moveq #$F,d6
 
moveq #$F,d6
  
loc_728C: ; CODE XREF: ROM:000072AC�j
+
loc_728C:
 
movem.l d4-d6,-(sp)
 
movem.l d4-d6,-(sp)
 
lea (unk_6DF5).l,a0
 
lea (unk_6DF5).l,a0
Line 1,761: Line 1,734:
 
dbf d6,loc_728C
 
dbf d6,loc_728C
 
rts
 
rts
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
 
unk_72B2: dc.b $F7 ; ÷
 
unk_72B2: dc.b $F7 ; ÷
 
dc.b  8 ;   
 
dc.b  8 ;   
Line 1,771: Line 1,744:
 
dc.b $18 ;   
 
dc.b $18 ;   
  
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
+
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  
  
sub_72BA: ; CODE XREF: ROM:00007238�p
+
sub_72BA:
; ROM:00007276�p ...
 
 
lsr.w #4,d0
 
lsr.w #4,d0
 
move.b (a0,d0.w),d0
 
move.b (a0,d0.w),d0
Line 1,786: Line 1,758:
 
bsr.w DrawTiles_LR
 
bsr.w DrawTiles_LR
 
bra.s locret_72EE
 
bra.s locret_72EE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
+
; ===========================================================================
  
loc_72DA: ; CODE XREF: sub_72BA+A�j
+
loc_72DA:
 
moveq #0,d5
 
moveq #0,d5
 
movem.l d4-d5,-(sp)
 
movem.l d4-d5,-(sp)
Line 1,796: Line 1,768:
 
bsr.w DrawTiles_LR3
 
bsr.w DrawTiles_LR3
  
locret_72EE: ; CODE XREF: sub_72BA+1E�j
+
locret_72EE:
 
rts
 
rts
; End of function sub_72BA</asm>
+
; End of function sub_72BA</syntaxhighlight>
  
 
===Step 6===
 
===Step 6===
Line 1,804: Line 1,776:
  
 
==Credits==
 
==Credits==
*[[Hivebrain]] - for attempting this first
+
*[[User:Hivebrain|Hivebrain]] - for attempting this first
*[[Tweaker]] - for his assistance when I had some issues to resolve.
+
*[[User:Tweaker|Tweaker]] - for his assistance when I had some issues to resolve.
 +
 
 +
==Extra step==
 +
 
 +
If you get errors upon compiling, you'll need to follow this extra step.
 +
===Fixing the errors===
 +
Alright, so after you've followed the main guide, you'll need to go here in your disasm:
 +
<syntaxhighlight lang="asm">Obj89: ; XREF: Obj_Index
 +
moveq #0,d0
 +
move.b $24(a0),d0
 +
move.w Obj89_Index(pc,d0.w),d1
 +
jmp Obj89_Index(pc,d1.w)
 +
; ===========================================================================
 +
Obj89_Index: dc.w Obj89_Main-Obj89_Index
 +
dc.w Obj89_Move-Obj89_Index
 +
dc.w Obj89_GotoCredits-Obj89_Index
 +
; ===========================================================================
 +
 
 +
Obj89_Main: ; XREF: Obj89_Index
 +
addq.b #2,$24(a0)
 +
move.w #-$20,8(a0) ; object starts outside the level boundary
 +
move.w #$D8,$A(a0)
 +
move.l #Map_obj89,4(a0)
 +
move.w #$5C5,2(a0)
 +
move.b #0,1(a0)
 +
move.b #0,$18(a0)
 +
 
 +
Obj89_Move: ; XREF: Obj89_Index
 +
cmpi.w #$C0,8(a0) ; has object reached $C0?
 +
beq.s Obj89_Delay ; if yes, branch
 +
addi.w #$10,8(a0) ; move object to the right
 +
bra.w DisplaySprite
 +
; ===========================================================================
 +
 
 +
Obj89_Delay: ; XREF: Obj89_Move
 +
addq.b #2,$24(a0)
 +
move.w #120,$30(a0) ; set duration for delay (2 seconds)
 +
 
 +
Obj89_GotoCredits: ; XREF: Obj89_Index
 +
subq.w #1,$30(a0) ; subtract 1 from duration
 +
bpl.s Obj89_Display
 +
move.b #$1C,($FFFFF600).w ; exit to credits
 +
 
 +
Obj89_Display:
 +
bra.w DisplaySprite</syntaxhighlight>
 +
You should see this line occurring twice:
 +
<syntaxhighlight lang="asm">          bra.w  DisplaySprite</syntaxhighlight>
 +
This is the problem. The code you just installed for the better background effects is bigger than the original code, and those lines that I mentioned have a specific branch range. Since some code has shifted, it is now out of range, causing the error. So let's change this code to something a bit more, shall I say, pliable. So, replace those two lines with this:
 +
<syntaxhighlight lang="asm">          jmp DisplaySprite</syntaxhighlight>
 +
That simple "jmp" command should do the trick.
 +
 
 +
And that's it! The errors should be gone! (If you still get errors, leave a message on this guide's talk page explaining how it all happens and I'll try to create a fix for it.) Have fun, and enjoy the Rev01 background effects!
  
[[Category:SCHG How-tos]]
+
(Oh, and you can still use this fix without following the actual guide, as it still works, and should make your life easier in case something else happens like the error I just explained above.)
 +
       
 +
{{S1Howtos}}
 +
|Port the REV01 Background Effects]]

Latest revision as of 11:11, 25 August 2018

(Original guide by jman2050)

Looking at the REV01 version of Sonic 1, I can see why it's Rev01. They pretty much completely overhauled the entire BG deformation part of the engine. The drawing system has been changed (and from what I've seen, more similar to the way Sonic 2 does things) and the deformation data for every level has been changed to fit this new code. Also, in every level besides SBZ2, it was used to enhance the deformation effects. To see the difference in your own Sonic 1 ROM hack, you'll have to do the following...

The Steps You Need

Step 1

First, we'll do the easiest change. Go to label Obj0A_WobbleData in Hivebrain's 2005 disassembly and replace the entire block with this:

Obj0A_WobbleData:
		dc.b 0, 0, 0, 0, 0, 0,	1, 1, 1, 1, 1, 2, 2, 2,	2, 2, 2
		dc.b 2,	3, 3, 3, 3, 3, 3, 3, 3,	3, 3, 3, 3, 3, 3, 4, 3
		dc.b 3,	3, 3, 3, 3, 3, 3, 3, 3,	3, 3, 3, 3, 2, 2, 2, 2
		dc.b 2,	2, 2, 1, 1, 1, 1, 1, 0,	0, 0, 0, 0, 0, -1, -1
		dc.b -1, -1, -1, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3
		dc.b -3, -3, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4
		dc.b -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4
		dc.b -4, -4, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3, -2
		dc.b -2, -2, -2, -2, -1, -1, -1, -1, -1
		dc.b 0, 0, 0, 0, 0, 0,	1, 1, 1, 1, 1, 2, 2, 2,	2, 2, 2
		dc.b 2,	3, 3, 3, 3, 3, 3, 3, 3,	3, 3, 3, 3, 3, 3, 4, 3
		dc.b 3,	3, 3, 3, 3, 3, 3, 3, 3,	3, 3, 3, 3, 2, 2, 2, 2
		dc.b 2,	2, 2, 1, 1, 1, 1, 1, 0,	0, 0, 0, 0, 0, -1, -1
		dc.b -1, -1, -1, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3
		dc.b -3, -3, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4
		dc.b -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4
		dc.b -4, -4, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3, -2
		dc.b -2, -2, -2, -2, -1, -1, -1, -1, -1

The programmers extended this array so it would also be usable by the deformation data even though it was designed to be used by the water bubbles.

Step 2

Next, we'll do the BGScroll data. Go to BGScroll_GHZ in the disassembly. Replace everything from there until the end of BGScroll_End with the following:

BgScroll_GHZ:				; XREF: BgScroll_Index
		clr.l	($FFFFF708).w
		clr.l	($FFFFF70C).w
		clr.l	($FFFFF714).w
		clr.l	($FFFFF71C).w
		lea	($FFFFA800).w,a2
		clr.l	(a2)+
		clr.l	(a2)+
		clr.l	(a2)+
		rts 
; ===========================================================================

BgScroll_LZ:				; XREF: BgScroll_Index
		asr.l	#1,d0
		move.w	d0,($FFFFF70C).w
		rts	
; ===========================================================================

BgScroll_MZ:				; XREF: BgScroll_Index
		rts	
; ===========================================================================

BgScroll_SLZ:				; XREF: BgScroll_Index
		asr.l	#1,d0
		addi.w	#$C0,d0
		move.w	d0,($FFFFF70C).w
		clr.l	($FFFFF708).w
		rts	
; ===========================================================================

BgScroll_SYZ:				; XREF: BgScroll_Index
		asl.l	#4,d0
		move.l	d0,d2
		asl.l	#1,d0
		add.l	d2,d0
		asr.l	#8,d0
		addq.w	#1,d0
		move.w	d0,($FFFFF70C).w
		clr.l	($FFFFF708).w
		rts	
; ===========================================================================

BgScroll_SBZ:				; XREF: BgScroll_Index
		andi.w	#$7F8,d0
		asr.w	#3,d0
		addq.w	#1,d0
		move.w	d0,($FFFFF70C).w
		rts	
; ===========================================================================

BgScroll_End:				; XREF: BgScroll_Index
		move.w	($FFFFF700).w,d0
		asr.w	#1,d0
		move.w	d0,($FFFFF708).w
		move.w	d0,($FFFFF710).w
		asr.w	#2,d0
		move.w	d0,d1
		add.w	d0,d0
		add.w	d1,d0
		move.w	d0,($FFFFF718).w
		clr.l	($FFFFF70C).w
		clr.l	($FFFFF714).w
		clr.l	($FFFFF71C).w
		lea	($FFFFA800).w,a2
		clr.l	(a2)+
		clr.l	(a2)+
		clr.l	(a2)+
		rts

The starting deformation data for every stage needed to be changed. To be precise, it prevents bugs that occur in the scrolling in SBZ and SYZ, and prevents a bug that causes GHZ's bg not to appear at all.

Step 3

Next, we'll do the deformation data itself. Go to Deform_GHZ, and replace everything from there until the end of Deform_SBZ, straight down (right before ScrollHoriz) with the following:

Deform_GHZ:
		move.w	($FFFFF73A).w,d4
		ext.l	d4
		asl.l	#5,d4
		move.l	d4,d1
		asl.l	#1,d4
		add.l	d1,d4
		moveq	#0,d6
		bsr.w	ScrollBlock6
		move.w	($FFFFF73A).w,d4
		ext.l	d4
		asl.l	#7,d4
		moveq	#0,d6
		bsr.w	ScrollBlock5
		lea	($FFFFCC00).w,a1
		move.w	($FFFFF704).w,d0
		andi.w	#$7FF,d0
		lsr.w	#5,d0
		neg.w	d0
		addi.w	#$20,d0	; ' '
		bpl.s	Deform_GHZ_1
		moveq	#0,d0

Deform_GHZ_1:				; XREF: Deform_GHZ
		move.w	d0,d4
		move.w	d0,($FFFFF618).w
		move.w	($FFFFF700).w,d0
		cmpi.b	#4,($FFFFF600).w
		bne.s	Deform_GHZ_2
		moveq	#0,d0

Deform_GHZ_2:				; XREF: Deform_GHZ
		neg.w	d0
		swap	d0
		lea	($FFFFA800).w,a2
		addi.l	#$10000,(a2)+
		addi.l	#$C000,(a2)+
		addi.l	#$8000,(a2)+
		move.w	($FFFFA800).w,d0
		add.w	($FFFFF718).w,d0
		neg.w	d0
		move.w	#$1F,d1
		sub.w	d4,d1
		bcs.s	Deform_GHZ_4

Deform_GHZ_3:				; XREF: Deform_GHZ
		move.l	d0,(a1)+
		dbf	d1,Deform_GHZ_3

Deform_GHZ_4:				; XREF: Deform_GHZ
		move.w	($FFFFA804).w,d0
		add.w	($FFFFF718).w,d0
		neg.w	d0
		move.w	#$F,d1

Deform_GHZ_5:				; XREF: Deform_GHZ
		move.l	d0,(a1)+
		dbf	d1,Deform_GHZ_5
		move.w	($FFFFA808).w,d0
		add.w	($FFFFF718).w,d0
		neg.w	d0
		move.w	#$F,d1

Deform_GHZ_6:				; XREF: Deform_GHZ
		move.l	d0,(a1)+
		dbf	d1,Deform_GHZ_6
		move.w	#$2F,d1	; '/'
		move.w	($FFFFF718).w,d0
		neg.w	d0

Deform_GHZ_7:				; XREF: Deform_GHZ
		move.l	d0,(a1)+
		dbf	d1,Deform_GHZ_7
		move.w	#$27,d1	; '''
		move.w	($FFFFF710).w,d0
		neg.w	d0

Deform_GHZ_8:				; XREF: Deform_GHZ
		move.l	d0,(a1)+
		dbf	d1,Deform_GHZ_8
		move.w	($FFFFF710).w,d0
		move.w	($FFFFF700).w,d2
		sub.w	d0,d2
		ext.l	d2
		asl.l	#8,d2
		divs.w	#$68,d2	; 'h'
		ext.l	d2
		asl.l	#8,d2
		moveq	#0,d3
		move.w	d0,d3
		move.w	#$47,d1	; 'G'
		add.w	d4,d1

Deform_GHZ_9:				; XREF: Deform_GHZ
		move.w	d3,d0
		neg.w	d0
		move.l	d0,(a1)+
		swap	d3
		add.l	d2,d3
		swap	d3
		dbf	d1,Deform_GHZ_9
		rts	
; End of function Deform_GHZ


; ||||||||||||||| S U B	R O U T	I N E |||||||||||||||||||||||||||||||||||||||


Deform_LZ:
		move.w	($FFFFF73A).w,d4
		ext.l	d4
		asl.l	#7,d4
		move.w	($FFFFF73C).w,d5
		ext.l	d5
		asl.l	#7,d5
		bsr.w	ScrollBlock1
		move.w	($FFFFF70C).w,($FFFFF618).w
		lea	(LZ_Wave_Data).l,a3
		lea	(Obj0A_WobbleData).l,a2
		move.b	($FFFFF7D8).w,d2
		move.b	d2,d3
		addi.w	#$80,($FFFFF7D8).w ; '€'
		add.w	($FFFFF70C).w,d2
		andi.w	#$FF,d2
		add.w	($FFFFF704).w,d3
		andi.w	#$FF,d3
		lea	($FFFFCC00).w,a1
		move.w	#$DF,d1	; 'ß'
		move.w	($FFFFF700).w,d0
		neg.w	d0
		move.w	d0,d6
		swap	d0
		move.w	($FFFFF708).w,d0
		neg.w	d0
		move.w	($FFFFF646).w,d4
		move.w	($FFFFF704).w,d5

Deform_LZ_1:				; XREF: Deform_LZ
		cmp.w	d4,d5
		bge.s	Deform_LZ_2
		move.l	d0,(a1)+
		addq.w	#1,d5
		addq.b	#1,d2
		addq.b	#1,d3
		dbf	d1,Deform_LZ_1
		rts	
; ===========================================================================

Deform_LZ_2:				; XREF: Deform_LZ
		move.b	(a3,d3.w),d4
		ext.w	d4
		add.w	d6,d4
		move.w	d4,(a1)+
		move.b	(a2,d2.w),d4
		ext.w	d4
		add.w	d0,d4
		move.w	d4,(a1)+
		addq.b	#1,d2
		addq.b	#1,d3
		dbf	d1,Deform_LZ_2
		rts	
; End of function Deform_LZ

; ===========================================================================
LZ_Wave_Data:	dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
		dc.b   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
		dc.b   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
		dc.b   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
		dc.b   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
		dc.b   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
		dc.b   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
		dc.b   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
		dc.b $FF,$FF,$FE,$FE,$FD,$FD,$FD,$FD,$FE,$FE,$FF,$FF,  0,  0,  0,  0
		dc.b   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
		dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
		dc.b   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
		dc.b   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
		dc.b   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
		dc.b   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
		dc.b   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0

; ||||||||||||||| S U B	R O U T	I N E |||||||||||||||||||||||||||||||||||||||


Deform_MZ:
		move.w	($FFFFF73A).w,d4
		ext.l	d4
		asl.l	#6,d4
		move.l	d4,d1
		asl.l	#1,d4
		add.l	d1,d4
		moveq	#2,d6
		bsr.w	ScrollBlock4
		move.w	($FFFFF73A).w,d4
		ext.l	d4
		asl.l	#6,d4
		moveq	#6,d6
		bsr.w	ScrollBlock6
		move.w	($FFFFF73A).w,d4
		ext.l	d4
		asl.l	#7,d4
		moveq	#4,d6
		bsr.w	ScrollBlock5
		move.w	#$200,d0
		move.w	($FFFFF704).w,d1
		subi.w	#$1C8,d1
		bcs.s	Deform_MZ_1
		move.w	d1,d2
		add.w	d1,d1
		add.w	d2,d1
		asr.w	#2,d1
		add.w	d1,d0

Deform_MZ_1:				; XREF: Deform_MZ
		move.w	d0,($FFFFF714).w
		move.w	d0,($FFFFF71C).w
		bsr.w	ScrollBlock3
		move.w	($FFFFF70C).w,($FFFFF618).w
		move.b	($FFFFF756).w,d0
		or.b	($FFFFF758).w,d0
		or.b	d0,($FFFFF75A).w
		clr.b	($FFFFF756).w
		clr.b	($FFFFF758).w
		lea	($FFFFA800).w,a1
		move.w	($FFFFF700).w,d2
		neg.w	d2
		move.w	d2,d0
		asr.w	#2,d0
		sub.w	d2,d0
		ext.l	d0
		asl.l	#3,d0
		divs.w	#5,d0
		ext.l	d0
		asl.l	#4,d0
		asl.l	#8,d0
		moveq	#0,d3
		move.w	d2,d3
		asr.w	#1,d3
		move.w	#4,d1

Deform_MZ_2:				; XREF: Deform_MZ
		move.w	d3,(a1)+
		swap	d3
		add.l	d0,d3
		swap	d3
		dbf	d1,Deform_MZ_2
		move.w	($FFFFF718).w,d0
		neg.w	d0
		move.w	#1,d1

Deform_MZ_3:				; XREF: Deform_MZ
		move.w	d0,(a1)+
		dbf	d1,Deform_MZ_3
		move.w	($FFFFF710).w,d0
		neg.w	d0
		move.w	#8,d1

Deform_MZ_4:				; XREF: Deform_MZ
		move.w	d0,(a1)+
		dbf	d1,Deform_MZ_4
		move.w	($FFFFF708).w,d0
		neg.w	d0
		move.w	#$F,d1

Deform_MZ_5:				; XREF: Deform_MZ
		move.w	d0,(a1)+
		dbf	d1,Deform_MZ_5
		lea	($FFFFA800).w,a2
		move.w	($FFFFF70C).w,d0
		subi.w	#$200,d0
		move.w	d0,d2
		cmpi.w	#$100,d0
		bcs.s	Deform_MZ_6
		move.w	#$100,d0

Deform_MZ_6:				; XREF: Deform_MZ
		andi.w	#$1F0,d0
		lsr.w	#3,d0
		lea	(a2,d0.w),a2
		bra.w	Deform_All
; ===========================================================================

Deform_SLZ:
		move.w	($FFFFF73C).w,d5
		ext.l	d5
		asl.l	#7,d5
		bsr.w	ScrollBlock2
		move.w	($FFFFF70C).w,($FFFFF618).w
		lea	($FFFFA800).w,a1
		move.w	($FFFFF700).w,d2
		neg.w	d2
		move.w	d2,d0
		asr.w	#3,d0
		sub.w	d2,d0
		ext.l	d0
		asl.l	#4,d0
		divs.w	#$1C,d0
		ext.l	d0
		asl.l	#4,d0
		asl.l	#8,d0
		moveq	#0,d3
		move.w	d2,d3
		move.w	#$1B,d1

Deform_SLZ_1:				; XREF: Deform_MZ
		move.w	d3,(a1)+
		swap	d3
		add.l	d0,d3
		swap	d3
		dbf	d1,Deform_SLZ_1
		move.w	d2,d0
		asr.w	#3,d0
		move.w	d0,d1
		asr.w	#1,d1
		add.w	d1,d0
		move.w	#4,d1

Deform_SLZ_2:				; XREF: Deform_MZ
		move.w	d0,(a1)+
		dbf	d1,Deform_SLZ_2
		move.w	d2,d0
		asr.w	#2,d0
		move.w	#4,d1

Deform_SLZ_3:				; XREF: Deform_MZ
		move.w	d0,(a1)+
		dbf	d1,Deform_SLZ_3
		move.w	d2,d0
		asr.w	#1,d0
		move.w	#$1D,d1

Deform_SLZ_4:				; XREF: Deform_MZ
		move.w	d0,(a1)+
		dbf	d1,Deform_SLZ_4
		lea	($FFFFA800).w,a2
		move.w	($FFFFF70C).w,d0
		move.w	d0,d2
		subi.w	#$C0,d0	; 'À'
		andi.w	#$3F0,d0
		lsr.w	#3,d0
		lea	(a2,d0.w),a2

Deform_All:				; XREF: Deform_MZ, Deform_SYZ, ...
		lea	($FFFFCC00).w,a1
		move.w	#$E,d1
		move.w	($FFFFF700).w,d0
		neg.w	d0
		swap	d0
		andi.w	#$F,d2
		add.w	d2,d2
		move.w	(a2)+,d0
		jmp	Deform_All_2(pc,d2.w)
; End of function Deform_MZ

; ===========================================================================

Deform_All_1:				; XREF: Deform_All
		move.w	(a2)+,d0

Deform_All_2:
		move.l	d0,(a1)+
		move.l	d0,(a1)+
		move.l	d0,(a1)+
		move.l	d0,(a1)+
		move.l	d0,(a1)+
		move.l	d0,(a1)+
		move.l	d0,(a1)+
		move.l	d0,(a1)+
		move.l	d0,(a1)+
		move.l	d0,(a1)+
		move.l	d0,(a1)+
		move.l	d0,(a1)+
		move.l	d0,(a1)+
		move.l	d0,(a1)+
		move.l	d0,(a1)+
		move.l	d0,(a1)+
		dbf	d1,Deform_All_1
		rts	

; ||||||||||||||| S U B	R O U T	I N E |||||||||||||||||||||||||||||||||||||||


Deform_SYZ:
		move.w	($FFFFF73C).w,d5
		ext.l	d5
		asl.l	#4,d5
		move.l	d5,d1
		asl.l	#1,d5
		add.l	d1,d5
		bsr.w	ScrollBlock2
		move.w	($FFFFF70C).w,($FFFFF618).w
		lea	($FFFFA800).w,a1
		move.w	($FFFFF700).w,d2
		neg.w	d2
		move.w	d2,d0
		asr.w	#3,d0
		sub.w	d2,d0
		ext.l	d0
		asl.l	#3,d0
		divs.w	#8,d0
		ext.l	d0
		asl.l	#4,d0
		asl.l	#8,d0
		moveq	#0,d3
		move.w	d2,d3
		asr.w	#1,d3
		move.w	#7,d1

Deform_SYZ_1:				; XREF: Deform_SYZ
		move.w	d3,(a1)+
		swap	d3
		add.l	d0,d3
		swap	d3
		dbf	d1,Deform_SYZ_1
		move.w	d2,d0
		asr.w	#3,d0
		move.w	#4,d1

Deform_SYZ_2:				; XREF: Deform_SYZ
		move.w	d0,(a1)+
		dbf	d1,Deform_SYZ_2
		move.w	d2,d0
		asr.w	#2,d0
		move.w	#5,d1

Deform_SYZ_3:				; XREF: Deform_SYZ
		move.w	d0,(a1)+
		dbf	d1,Deform_SYZ_3
		move.w	d2,d0
		move.w	d2,d1
		asr.w	#1,d1
		sub.w	d1,d0
		ext.l	d0
		asl.l	#4,d0
		divs.w	#$E,d0
		ext.l	d0
		asl.l	#4,d0
		asl.l	#8,d0
		moveq	#0,d3
		move.w	d2,d3
		asr.w	#1,d3
		move.w	#$D,d1

Deform_SYZ_4:				; XREF: Deform_SYZ
		move.w	d3,(a1)+
		swap	d3
		add.l	d0,d3
		swap	d3
		dbf	d1,Deform_SYZ_4
		lea	($FFFFA800).w,a2
		move.w	($FFFFF70C).w,d0
		move.w	d0,d2
		andi.w	#$1F0,d0
		lsr.w	#3,d0
		lea	(a2,d0.w),a2
		bra.w	Deform_All
; End of function Deform_SYZ


; ||||||||||||||| S U B	R O U T	I N E |||||||||||||||||||||||||||||||||||||||


Deform_SBZ:
		tst.b	($FFFFFE11).w
		bne.w	Deform_SBZ_Act2
		move.w	($FFFFF73A).w,d4
		ext.l	d4
		asl.l	#7,d4
		moveq	#2,d6
		bsr.w	ScrollBlock4
		move.w	($FFFFF73A).w,d4
		ext.l	d4
		asl.l	#6,d4
		moveq	#6,d6
		bsr.w	ScrollBlock6
		move.w	($FFFFF73A).w,d4
		ext.l	d4
		asl.l	#5,d4
		move.l	d4,d1
		asl.l	#1,d4
		add.l	d1,d4
		moveq	#4,d6
		bsr.w	ScrollBlock5
		moveq	#0,d4
		move.w	($FFFFF73C).w,d5
		ext.l	d5
		asl.l	#5,d5
		bsr.w	ScrollBlock1_2
		move.w	($FFFFF70C).w,d0
		move.w	d0,($FFFFF714).w
		move.w	d0,($FFFFF71C).w
		move.w	d0,($FFFFF618).w
		move.b	($FFFFF756).w,d0
		or.b	($FFFFF75A).w,d0
		or.b	d0,($FFFFF758).w
		clr.b	($FFFFF756).w
		clr.b	($FFFFF75A).w
		lea	($FFFFA800).w,a1
		move.w	($FFFFF700).w,d2
		neg.w	d2
		asr.w	#2,d2
		move.w	d2,d0
		asr.w	#1,d0
		sub.w	d2,d0
		ext.l	d0
		asl.l	#3,d0
		divs.w	#4,d0
		ext.l	d0
		asl.l	#4,d0
		asl.l	#8,d0
		moveq	#0,d3
		move.w	d2,d3
		move.w	#3,d1

Deform_SBZ_1:				; XREF: Deform_SBZ
		move.w	d3,(a1)+
		swap	d3
		add.l	d0,d3
		swap	d3
		dbf	d1,Deform_SBZ_1
		move.w	($FFFFF718).w,d0
		neg.w	d0
		move.w	#9,d1

Deform_SBZ_2:				; XREF: Deform_SBZ
		move.w	d0,(a1)+
		dbf	d1,Deform_SBZ_2
		move.w	($FFFFF710).w,d0
		neg.w	d0
		move.w	#6,d1

Deform_SBZ_3:				; XREF: Deform_SBZ
		move.w	d0,(a1)+
		dbf	d1,Deform_SBZ_3
		move.w	($FFFFF708).w,d0
		neg.w	d0
		move.w	#$A,d1

Deform_SBZ_4:				; XREF: Deform_SBZ
		move.w	d0,(a1)+
		dbf	d1,Deform_SBZ_4
		lea	($FFFFA800).w,a2
		move.w	($FFFFF70C).w,d0
		move.w	d0,d2
		andi.w	#$1F0,d0
		lsr.w	#3,d0
		lea	(a2,d0.w),a2
		bra.w	Deform_All
; ===========================================================================

Deform_SBZ_Act2:			; XREF: Deform_SBZ
		move.w	($FFFFF73A).w,d4
		ext.l	d4
		asl.l	#6,d4
		move.w	($FFFFF73C).w,d5
		ext.l	d5
		asl.l	#5,d5
		bsr.w	ScrollBlock1
		move.w	($FFFFF70C).w,($FFFFF618).w
		lea	($FFFFCC00).w,a1
		move.w	#$DF,d1	; 'ß'
		move.w	($FFFFF700).w,d0
		neg.w	d0
		swap	d0
		move.w	($FFFFF708).w,d0
		neg.w	d0

Deform_SBZ_Act2_1:			; XREF: Deform_SBZ
		move.l	d0,(a1)+
		dbf	d1,Deform_SBZ_Act2_1
		rts	
; End of function Deform_SBZ

Step 4

The new Bg drawing system required a different method of scrolling the BGs themselves. Go to ScrollBlock1 and replace everything from there until the end of ScrollBlock4 with the following:

ScrollBlock1:				; XREF: Deform_LZ, Deform_SBZ
		move.l	($FFFFF708).w,d2
		move.l	d2,d0
		add.l	d4,d0
		move.l	d0,($FFFFF708).w
		move.l	d0,d1
		swap	d1
		andi.w	#$10,d1
		move.b	($FFFFF74C).w,d3
		eor.b	d3,d1
		bne.s	ScrollBlock1_2
		eori.b	#$10,($FFFFF74C).w
		sub.l	d2,d0
		bpl.s	ScrollBlock1_1
		bset	#2,($FFFFF756).w
		bra.s	ScrollBlock1_2
; ===========================================================================

ScrollBlock1_1:				; XREF: ScrollBlock1
		bset	#3,($FFFFF756).w

ScrollBlock1_2:				; XREF: ScrollBlock1, Deform_SBZ, ...
		move.l	($FFFFF70C).w,d3
		move.l	d3,d0
		add.l	d5,d0
		move.l	d0,($FFFFF70C).w
		move.l	d0,d1
		swap	d1
		andi.w	#$10,d1
		move.b	($FFFFF74D).w,d2
		eor.b	d2,d1
		bne.s	ScrollBlock1_End
		eori.b	#$10,($FFFFF74D).w
		sub.l	d3,d0
		bpl.s	ScrollBlock1_3
		bset	#0,($FFFFF756).w
		rts	
; ===========================================================================

ScrollBlock1_3:				; XREF: ScrollBlock1
		bset	#1,($FFFFF756).w

ScrollBlock1_End:			; XREF: ScrollBlock1
		rts	
; End of function ScrollBlock1


; ||||||||||||||| S U B	R O U T	I N E |||||||||||||||||||||||||||||||||||||||


ScrollBlock2:				; XREF: Deform_MZ, Deform_SYZ
		move.l	($FFFFF70C).w,d3
		move.l	d3,d0
		add.l	d5,d0
		move.l	d0,($FFFFF70C).w
		move.l	d0,d1
		swap	d1
		andi.w	#$10,d1
		move.b	($FFFFF74D).w,d2
		eor.b	d2,d1
		bne.s	ScrollBlock2_End
		eori.b	#$10,($FFFFF74D).w
		sub.l	d3,d0
		bpl.s	ScrollBlock2_1
		bset	#4,($FFFFF756).w
		rts	
; ===========================================================================

ScrollBlock2_1:				; XREF: ScrollBlock2
		bset	#5,($FFFFF756).w

ScrollBlock2_End:			; XREF: ScrollBlock2
		rts	
; End of function ScrollBlock2


; ||||||||||||||| S U B	R O U T	I N E |||||||||||||||||||||||||||||||||||||||


ScrollBlock3:				; XREF: Deform_MZ
		move.w	($FFFFF70C).w,d3
		move.w	d0,($FFFFF70C).w
		move.w	d0,d1
		andi.w	#$10,d1
		move.b	($FFFFF74D).w,d2
		eor.b	d2,d1
		bne.s	ScrollBlock3_End
		eori.b	#$10,($FFFFF74D).w
		sub.w	d3,d0
		bpl.s	ScrollBlock3_1
		bset	#0,($FFFFF756).w
		rts	
; ===========================================================================

ScrollBlock3_1:				; XREF: ScrollBlock3
		bset	#1,($FFFFF756).w

ScrollBlock3_End:			; XREF: ScrollBlock3
		rts	
; End of function ScrollBlock3


; ||||||||||||||| S U B	R O U T	I N E |||||||||||||||||||||||||||||||||||||||


ScrollBlock4:				; XREF: Deform_MZ, Deform_SBZ
		move.l	($FFFFF708).w,d2
		move.l	d2,d0
		add.l	d4,d0
		move.l	d0,($FFFFF708).w
		move.l	d0,d1
		swap	d1
		andi.w	#$10,d1
		move.b	($FFFFF74C).w,d3
		eor.b	d3,d1
		bne.s	ScrollBlock4_End
		eori.b	#$10,($FFFFF74C).w
		sub.l	d2,d0
		bpl.s	ScrollBlock4_1
		bset	d6,($FFFFF756).w
		bra.s	ScrollBlock4_End
; ===========================================================================

ScrollBlock4_1:				; XREF: ScrollBlock4
		addq.b	#1,d6
		bset	d6,($FFFFF756).w

ScrollBlock4_End:			; XREF: ScrollBlock4
		rts	
; End of function ScrollBlock4


; ||||||||||||||| S U B	R O U T	I N E |||||||||||||||||||||||||||||||||||||||


ScrollBlock5:				; XREF: Deform_GHZ, Deform_MZ, ...
		move.l	($FFFFF710).w,d2
		move.l	d2,d0
		add.l	d4,d0
		move.l	d0,($FFFFF710).w
		move.l	d0,d1
		swap	d1
		andi.w	#$10,d1
		move.b	($FFFFF74E).w,d3
		eor.b	d3,d1
		bne.s	ScrollBlock5_End
		eori.b	#$10,($FFFFF74E).w
		sub.l	d2,d0
		bpl.s	ScrollBlock5_1
		bset	d6,($FFFFF758).w
		bra.s	ScrollBlock5_End
; ===========================================================================

ScrollBlock5_1:				; XREF: ScrollBlock5
		addq.b	#1,d6
		bset	d6,($FFFFF758).w

ScrollBlock5_End:			; XREF: ScrollBlock5
		rts	
; End of function ScrollBlock5


; ||||||||||||||| S U B	R O U T	I N E |||||||||||||||||||||||||||||||||||||||


ScrollBlock6:				; XREF: Deform_GHZ, Deform_MZ, ...
		move.l	($FFFFF718).w,d2
		move.l	d2,d0
		add.l	d4,d0
		move.l	d0,($FFFFF718).w
		move.l	d0,d1
		swap	d1
		andi.w	#$10,d1
		move.b	($FFFFF750).w,d3
		eor.b	d3,d1
		bne.s	ScrollBlock6_End
		eori.b	#$10,($FFFFF750).w
		sub.l	d2,d0
		bpl.s	ScrollBlock6_1
		bset	d6,($FFFFF75A).w
		bra.s	ScrollBlock6_End
; ===========================================================================

ScrollBlock6_1:				; XREF: ScrollBlock6
		addq.b	#1,d6
		bset	d6,($FFFFF75A).w

ScrollBlock6_End:			; XREF: ScrollBlock6
		rts	
; End of function ScrollBlock6

Don't worry that there are six BGScroll functions now, that's taken cared of.

Step 5

Finally, the biggest part: the BG drawing code. Go to sub_6886 and replace everything from there until the end of LoadTilesFromStart2 (that's a VERY long way, up until MainLoadBlockLoad) with the following:

sub_6886:		
		lea	($C00004).l,a5
		lea	($C00000).l,a6
		lea	($FFFFF756).w,a2
		lea	($FFFFF708).w,a3
		lea	($FFFFA440).w,a4
		move.w	#$6000,d2
		bsr.w	sub_6D0A
		lea	($FFFFF758).w,a2
		lea	($FFFFF710).w,a3
		bra.w	sub_6DA6
; End of function sub_6886

; ---------------------------------------------------------------------------
; Subroutine to	display	correct	tiles as you move
; ---------------------------------------------------------------------------

; ||||||||||||||| S U B	R O U T	I N E |||||||||||||||||||||||||||||||||||||||


LoadTilesAsYouMove:			; XREF: Demo_Time
		lea	($C00004).l,a5
		lea	($C00000).l,a6
		lea	($FFFFFF32).w,a2
		lea	($FFFFFF18).w,a3
		lea	($FFFFA440).w,a4
		move.w	#$6000,d2
		bsr.w	sub_6D0A
		lea	($FFFFFF34).w,a2
		lea	($FFFFFF20).w,a3
		bsr.w	sub_6DA6
		lea	($FFFFFF36).w,a2
		lea	($FFFFFF28).w,a3
		bsr.w	sub_6EA4
		lea	($FFFFFF30).w,a2
		lea	($FFFFFF10).w,a3
		lea	($FFFFA400).w,a4
		move.w	#$4000,d2
		tst.b	($FFFFF745).w
		beq.s	Draw_FG
		move.b	#0,($FFFFF745).w	;Reset the redraw flag
		moveq	#-$10,d4			;Go to top line oflevel data relative camera position
		moveq	#$F,d6				;

Draw_All:
		movem.l	d4-d6,-(sp)			; This whole routine basically redraws the whole
		moveq	#-$10,d5			; area instead of merely a line of tiles
		move.w	d4,d1
		bsr.w	Calc_VRAM_Pos
		move.w	d1,d4
		moveq	#-$10,d5
		bsr.w	DrawTiles_LR
		movem.l	(sp)+,d4-d6
		addi.w	#$10,d4
		dbf	d6,Draw_All
		rts	

Draw_FG:
		tst.b	(a2)
		beq.s	locret_6D08
		bclr	#0,(a2)
		beq.s	loc_6CBE
		moveq	#-$10,d4
		moveq	#-$10,d5
		bsr.w	Calc_VRAM_Pos
		moveq	#-$10,d4
		moveq	#-$10,d5
		bsr.w	DrawTiles_LR

loc_6CBE:
		bclr	#1,(a2)
		beq.s	loc_6CD8
		move.w	#$E0,d4	; 'à'
		moveq	#-$10,d5
		bsr.w	Calc_VRAM_Pos
		move.w	#$E0,d4	; 'à'
		moveq	#-$10,d5
		bsr.w	DrawTiles_LR

loc_6CD8:
		bclr	#2,(a2)
		beq.s	loc_6CEE
		moveq	#-$10,d4
		moveq	#-$10,d5
		bsr.w	Calc_VRAM_Pos
		moveq	#-$10,d4
		moveq	#-$10,d5
		bsr.w	DrawTiles_TB

loc_6CEE:
		bclr	#3,(a2)
		beq.s	locret_6D08
		moveq	#-$10,d4
		move.w	#$140,d5
		bsr.w	Calc_VRAM_Pos
		moveq	#-$10,d4
		move.w	#$140,d5
		bsr.w	DrawTiles_TB

locret_6D08:
		rts	

; End of function LoadTilesAsYouMove


; ||||||||||||||| S U B	R O U T	I N E |||||||||||||||||||||||||||||||||||||||


sub_6D0A:
		tst.b	(a2)
		beq.w	locret_6DA4
		bclr	#0,(a2)
		beq.s	loc_6D26
		moveq	#-$10,d4
		moveq	#-$10,d5
		bsr.w	Calc_VRAM_Pos
		moveq	#-$10,d4
		moveq	#-$10,d5
		bsr.w	DrawTiles_LR

loc_6D26:
		bclr	#1,(a2)
		beq.s	loc_6D40
		move.w	#$E0,d4	; 'à'
		moveq	#-$10,d5
		bsr.w	Calc_VRAM_Pos
		move.w	#$E0,d4	; 'à'
		moveq	#-$10,d5
		bsr.w	DrawTiles_LR

loc_6D40:
		bclr	#2,(a2)
		beq.s	loc_6D56
		moveq	#-$10,d4
		moveq	#-$10,d5
		bsr.w	Calc_VRAM_Pos
		moveq	#-$10,d4
		moveq	#-$10,d5
		bsr.w	DrawTiles_TB

loc_6D56:
		bclr	#3,(a2)
		beq.s	loc_6D70
		moveq	#-$10,d4
		move.w	#$140,d5
		bsr.w	Calc_VRAM_Pos
		moveq	#-$10,d4
		move.w	#$140,d5
		bsr.w	DrawTiles_TB

loc_6D70:
		bclr	#4,(a2)
		beq.s	loc_6D88
		moveq	#-$10,d4
		moveq	#0,d5
		bsr.w	loc_7176
		moveq	#-$10,d4
		moveq	#0,d5
		moveq	#$1F,d6
		bsr.w	DrawTiles_LR3

loc_6D88:
		bclr	#5,(a2)
		beq.s	locret_6DA4
		move.w	#$E0,d4	; 'à'
		moveq	#0,d5
		bsr.w	loc_7176
		move.w	#$E0,d4	; 'à'
		moveq	#0,d5
		moveq	#$1F,d6
		bsr.w	DrawTiles_LR3

locret_6DA4:
		rts	
; End of function sub_6D0A


; ||||||||||||||| S U B	R O U T	I N E |||||||||||||||||||||||||||||||||||||||


sub_6DA6:
		tst.b	(a2)
		beq.w	locret_6DF2
		cmpi.b	#5,($FFFFFE10).w
		beq.w	loc_6E16
		bclr	#0,(a2)
		beq.s	loc_6DD2
		move.w	#$70,d4	; 'p'
		moveq	#-$10,d5
		bsr.w	Calc_VRAM_Pos
		move.w	#$70,d4	; 'p'
		moveq	#-$10,d5
		moveq	#2,d6
		bsr.w	DrawTiles_TB2

loc_6DD2:
		bclr	#1,(a2)
		beq.s	locret_6DF2
		move.w	#$70,d4	; 'p'
		move.w	#$140,d5
		bsr.w	Calc_VRAM_Pos
		move.w	#$70,d4	; 'p'
		move.w	#$140,d5
		moveq	#2,d6
		bsr.w	DrawTiles_TB2

locret_6DF2:
		rts	
; ===========================================================================
unk_6DF4:	dc.b   0 ;	 
unk_6DF5:	dc.b   0 ;	 
		dc.b   0 ;  
		dc.b   0 ;  
		dc.b   0 ;  
		dc.b   6 ;  
		dc.b   6 ;  
		dc.b   6 ;  
		dc.b   6 ;  
		dc.b   6 ;  
		dc.b   6 ;  
		dc.b   6 ;  
		dc.b   6 ;  
		dc.b   6 ;  
		dc.b   6 ;  
		dc.b   4 ;  
		dc.b   4 ;  
		dc.b   4 ;  
		dc.b   4 ;  
		dc.b   4 ;  
		dc.b   4 ;  
		dc.b   4 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   0 ;  
; ===========================================================================

loc_6E16:
		moveq	#-$10,d4
		bclr	#0,(a2)
		bne.s	loc_6E28
		bclr	#1,(a2)
		beq.s	loc_6E72
		move.w	#$E0,d4	; 'à'

loc_6E28:
		lea	(unk_6DF5).l,a0
		move.w	($FFFFF70C).w,d0
		add.w	d4,d0
		andi.w	#$1F0,d0
		lsr.w	#4,d0
		move.b	(a0,d0.w),d0
		lea	(unk_6FE4).l,a3
		movea.w	(a3,d0.w),a3
		beq.s	loc_6E5E
		moveq	#-$10,d5
		movem.l	d4-d5,-(sp)
		bsr.w	Calc_VRAM_Pos
		movem.l	(sp)+,d4-d5
		bsr.w	DrawTiles_LR
		bra.s	loc_6E72
; ===========================================================================

loc_6E5E:
		moveq	#0,d5
		movem.l	d4-d5,-(sp)
		bsr.w	loc_7176
		movem.l	(sp)+,d4-d5
		moveq	#$1F,d6
		bsr.w	DrawTiles_LR3

loc_6E72:
		tst.b	(a2)
		bne.s	loc_6E78
		rts	
; ===========================================================================

loc_6E78:
		moveq	#-$10,d4
		moveq	#-$10,d5
		move.b	(a2),d0
		andi.b	#-$58,d0
		beq.s	loc_6E8C
		lsr.b	#1,d0
		move.b	d0,(a2)
		move.w	#$140,d5

loc_6E8C:
		lea	(unk_6DF4).l,a0
		move.w	($FFFFF70C).w,d0
		andi.w	#$1F0,d0
		lsr.w	#4,d0
		lea	(a0,d0.w),a0
		bra.w	loc_6FEC
; End of function sub_6DA6


; ||||||||||||||| S U B	R O U T	I N E |||||||||||||||||||||||||||||||||||||||


sub_6EA4:
		tst.b	(a2)
		beq.w	locret_6EF0
		cmpi.b	#2,($FFFFFE10).w
		beq.w	loc_6F54
		bclr	#0,(a2)
		beq.s	loc_6ED0_2
		move.w	#$40,d4	; '@'
		moveq	#-$10,d5
		bsr.w	Calc_VRAM_Pos
		move.w	#$40,d4	; '@'
		moveq	#-$10,d5
		moveq	#2,d6
		bsr.w	DrawTiles_TB2

loc_6ED0_2:
		bclr	#1,(a2)
		beq.s	locret_6EF0
		move.w	#$40,d4	; '@'
		move.w	#$140,d5
		bsr.w	Calc_VRAM_Pos
		move.w	#$40,d4	; '@'
		move.w	#$140,d5
		moveq	#2,d6
		bsr.w	DrawTiles_TB2

locret_6EF0:
		rts	
; ===========================================================================
unk_6EF2:	dc.b   0 ;	 
unk_6EF3:	dc.b   0 ;	 
		dc.b   0 ;  
		dc.b   0 ;  
		dc.b   0 ;  
		dc.b   0 ;  
		dc.b   6 ;  
		dc.b   6 ;  
		dc.b   4 ;  
		dc.b   4 ;  
		dc.b   4 ;  
		dc.b   4 ;  
		dc.b   4 ;  
		dc.b   4 ;  
		dc.b   4 ;  
		dc.b   4 ;  
		dc.b   4 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   2 ;  
		dc.b   0 ;  
; ===========================================================================

loc_6F54:
		moveq	#-$10,d4
		bclr	#0,(a2)
		bne.s	loc_6F66
		bclr	#1,(a2)
		beq.s	loc_6FAE
		move.w	#$E0,d4	; 'à'

loc_6F66:
		lea	(unk_6EF3).l,a0
		move.w	($FFFFF70C).w,d0
		subi.w	#$200,d0
		add.w	d4,d0
		andi.w	#$7F0,d0
		lsr.w	#4,d0
		move.b	(a0,d0.w),d0
		movea.w	unk_6FE4(pc,d0.w),a3
		beq.s	loc_6F9A
		moveq	#-$10,d5
		movem.l	d4-d5,-(sp)
		bsr.w	Calc_VRAM_Pos
		movem.l	(sp)+,d4-d5
		bsr.w	DrawTiles_LR
		bra.s	loc_6FAE
; ===========================================================================

loc_6F9A:
		moveq	#0,d5
		movem.l	d4-d5,-(sp)
		bsr.w	loc_7176
		movem.l	(sp)+,d4-d5
		moveq	#$1F,d6
		bsr.w	DrawTiles_LR3

loc_6FAE:
		tst.b	(a2)
		bne.s	loc_6FB4
		rts	
; ===========================================================================

loc_6FB4:
		moveq	#-$10,d4
		moveq	#-$10,d5
		move.b	(a2),d0
		andi.b	#-$58,d0
		beq.s	loc_6FC8
		lsr.b	#1,d0
		move.b	d0,(a2)
		move.w	#$140,d5

loc_6FC8:
		lea	(unk_6EF2).l,a0
		move.w	($FFFFF70C).w,d0
		subi.w	#$200,d0
		andi.w	#$7F0,d0
		lsr.w	#4,d0
		lea	(a0,d0.w),a0
		bra.w	loc_6FEC
; ===========================================================================
unk_6FE4:	dc.b $FF ;  
		dc.b $18 ;  
		dc.b $FF ;  
		dc.b $18 ;  
		dc.b $FF ;  
		dc.b $20 ;  
		dc.b $FF ;  
		dc.b $28 ; (
; ===========================================================================

loc_6FEC:
		moveq	#$F,d6
		move.l	#$800000,d7

loc_6FF4:
		moveq	#0,d0
		move.b	(a0)+,d0
		btst	d0,(a2)
		beq.s	loc_701C
		movea.w	unk_6FE4(pc,d0.w),a3
		movem.l	d4-d5/a0,-(sp)
		movem.l	d4-d5,-(sp)
		bsr.w	sub_712A
		movem.l	(sp)+,d4-d5
		bsr.w	Calc_VRAM_Pos
		bsr.w	sub_70AC
		movem.l	(sp)+,d4-d5/a0

loc_701C:
		addi.w	#$10,d4
		dbf	d6,loc_6FF4
		clr.b	(a2)
		rts	
; End of function sub_6EA4


; ||||||||||||||| S U B	R O U T	I N E |||||||||||||||||||||||||||||||||||||||


DrawTiles_LR:
		moveq	#$15,d6
; End of function DrawTiles_LR


; ||||||||||||||| S U B	R O U T	I N E |||||||||||||||||||||||||||||||||||||||


DrawTiles_LR2:
		move.l	#$800000,d7
		move.l	d0,d1

loc_7032:
		movem.l	d4-d5,-(sp)
		bsr.w	sub_712A
		move.l	d1,d0
		bsr.w	sub_70AC
		addq.b	#4,d1
		andi.b	#$7F,d1	; '?'
		movem.l	(sp)+,d4-d5
		addi.w	#$10,d5
		dbf	d6,loc_7032
		rts	
; End of function DrawTiles_LR2


; ||||||||||||||| S U B	R O U T	I N E |||||||||||||||||||||||||||||||||||||||


DrawTiles_LR3:
		move.l	#$800000,d7
		move.l	d0,d1

loc_705C:
		movem.l	d4-d5,-(sp)
		bsr.w	loc_712C
		move.l	d1,d0
		bsr.w	sub_70AC
		addq.b	#4,d1
		andi.b	#$7F,d1	; '?'
		movem.l	(sp)+,d4-d5
		addi.w	#$10,d5
		dbf	d6,loc_705C
		rts	
; End of function DrawTiles_LR3


; ||||||||||||||| S U B	R O U T	I N E |||||||||||||||||||||||||||||||||||||||


DrawTiles_TB:
		moveq	#$F,d6
; End of function DrawTiles_TB


; ||||||||||||||| S U B	R O U T	I N E |||||||||||||||||||||||||||||||||||||||


DrawTiles_TB2:
		move.l	#$800000,d7
		move.l	d0,d1

loc_7088:
		movem.l	d4-d5,-(sp)
		bsr.w	sub_712A
		move.l	d1,d0
		bsr.w	sub_70AC
		addi.w	#$100,d1
		andi.w	#$FFF,d1
		movem.l	(sp)+,d4-d5
		addi.w	#$10,d4
		dbf	d6,loc_7088
		rts	
; End of function DrawTiles_TB2


; ||||||||||||||| S U B	R O U T	I N E |||||||||||||||||||||||||||||||||||||||


sub_70AC:
		or.w	d2,d0
		swap	d0
		btst	#4,(a0)
		bne.s	loc_70E8
		btst	#3,(a0)
		bne.s	loc_70C8
		move.l	d0,(a5)
		move.l	(a1)+,(a6)
		add.l	d7,d0
		move.l	d0,(a5)
		move.l	(a1)+,(a6)
		rts	
; ===========================================================================

loc_70C8:
		move.l	d0,(a5)
		move.l	(a1)+,d4
		eori.l	#$8000800,d4
		swap	d4
		move.l	d4,(a6)
		add.l	d7,d0
		move.l	d0,(a5)
		move.l	(a1)+,d4
		eori.l	#$8000800,d4
		swap	d4
		move.l	d4,(a6)
		rts	
; ===========================================================================

loc_70E8:
		btst	#3,(a0)
		bne.s	loc_710A
		move.l	d0,(a5)
		move.l	(a1)+,d5
		move.l	(a1)+,d4
		eori.l	#$10001000,d4
		move.l	d4,(a6)
		add.l	d7,d0
		move.l	d0,(a5)
		eori.l	#$10001000,d5
		move.l	d5,(a6)
		rts	
; ===========================================================================

loc_710A:
		move.l	d0,(a5)
		move.l	(a1)+,d5
		move.l	(a1)+,d4
		eori.l	#$18001800,d4
		swap	d4
		move.l	d4,(a6)
		add.l	d7,d0
		move.l	d0,(a5)
		eori.l	#$18001800,d5
		swap	d5
		move.l	d5,(a6)
		rts	
; End of function sub_70AC


; ||||||||||||||| S U B	R O U T	I N E |||||||||||||||||||||||||||||||||||||||


sub_712A:
		add.w	(a3),d5

loc_712C:
		add.w	4(a3),d4
		lea	($FFFFB000).w,a1
		move.w	d4,d3
		lsr.w	#1,d3
		andi.w	#$380,d3
		lsr.w	#3,d5
		move.w	d5,d0
		lsr.w	#5,d0
		andi.w	#$7F,d0	; '?'
		add.w	d3,d0
		moveq	#-1,d3
		move.b	(a4,d0.w),d3
		beq.s	locret_7172
		subq.b	#1,d3
		andi.w	#$7F,d3	; '?'
		ror.w	#7,d3
		add.w	d4,d4
		andi.w	#$1E0,d4
		andi.w	#$1E,d5
		add.w	d4,d3
		add.w	d5,d3
		movea.l	d3,a0
		move.w	(a0),d3
		andi.w	#$3FF,d3
		lsl.w	#3,d3
		adda.w	d3,a1

locret_7172:
		rts	
; End of function sub_712A


; ||||||||||||||| S U B	R O U T	I N E |||||||||||||||||||||||||||||||||||||||


Calc_VRAM_Pos:
		add.w	(a3),d5

loc_7176:
		add.w	4(a3),d4
		andi.w	#$F0,d4	; 'ð'
		andi.w	#$1F0,d5
		lsl.w	#4,d4
		lsr.w	#2,d5
		add.w	d5,d4
		moveq	#3,d0
		swap	d0
		move.w	d4,d0
		rts	
; End of function Calc_VRAM_Pos

; ===========================================================================
		add.w	4(a3),d4
		add.w	(a3),d5
		andi.w	#$F0,d4	; 'ð'
		andi.w	#$1F0,d5
		lsl.w	#4,d4
		lsr.w	#2,d5
		add.w	d5,d4
		moveq	#2,d0
		swap	d0
		move.w	d4,d0
		rts	

; ||||||||||||||| S U B	R O U T	I N E |||||||||||||||||||||||||||||||||||||||


LoadTilesFromStart:
		lea	($C00004).l,a5
		lea	($C00000).l,a6
		lea	($FFFFF700).w,a3
		lea	($FFFFA400).w,a4
		move.w	#$4000,d2
		bsr.s	LoadTilesFromStart2
		lea	($FFFFF708).w,a3
		lea	($FFFFA440).w,a4
		move.w	#$6000,d2
		tst.b	($FFFFFE10).w
		beq.w	loc_7220
		cmpi.b	#2,($FFFFFE10).w
		beq.w	loc_725A
		cmpi.w	#$500,($FFFFFE10).w
		beq.w	loc_7288
		cmpi.b	#6,($FFFFFE10).w
		beq.w	loc_7220
; End of function LoadTilesFromStart


; ||||||||||||||| S U B	R O U T	I N E |||||||||||||||||||||||||||||||||||||||


LoadTilesFromStart2:
		moveq	#-$10,d4
		moveq	#$F,d6

loc_71FC:
		movem.l	d4-d6,-(sp)
		moveq	#0,d5
		move.w	d4,d1
		bsr.w	Calc_VRAM_Pos
		move.w	d1,d4
		moveq	#0,d5
		moveq	#$1F,d6
		bsr.w	DrawTiles_LR2
		movem.l	(sp)+,d4-d6
		addi.w	#$10,d4
		dbf	d6,loc_71FC
		rts	
; End of function LoadTilesFromStart2

; ===========================================================================

loc_7220:
		moveq	#0,d4
		moveq	#$F,d6

loc_7224:
		movem.l	d4-d6,-(sp)
		lea	(unk_724A).l,a0
		move.w	($FFFFF70C).w,d0
		add.w	d4,d0
		andi.w	#$F0,d0	; 'ð'
		bsr.w	sub_72BA
		movem.l	(sp)+,d4-d6
		addi.w	#$10,d4
		dbf	d6,loc_7224
		rts	
; ===========================================================================
unk_724A:	dc.b   0 ;	 
		dc.b   0 ;  
		dc.b   0 ;  
		dc.b   0 ;  
		dc.b   6 ;  
		dc.b   6 ;  
		dc.b   6 ;  
		dc.b   4 ;  
		dc.b   4 ;  
		dc.b   4 ;  
		dc.b   0 ;  
		dc.b   0 ;  
		dc.b   0 ;  
		dc.b   0 ;  
		dc.b   0 ;  
		dc.b   0 ;  
; ===========================================================================

loc_725A:
		moveq	#-$10,d4
		moveq	#$F,d6

loc_725E:
		movem.l	d4-d6,-(sp)
		lea	(unk_6EF3).l,a0
		move.w	($FFFFF70C).w,d0
		subi.w	#$200,d0
		add.w	d4,d0
		andi.w	#$7F0,d0
		bsr.w	sub_72BA
		movem.l	(sp)+,d4-d6
		addi.w	#$10,d4
		dbf	d6,loc_725E
		rts	
; ===========================================================================

loc_7288:
		moveq	#-$10,d4
		moveq	#$F,d6

loc_728C:
		movem.l	d4-d6,-(sp)
		lea	(unk_6DF5).l,a0
		move.w	($FFFFF70C).w,d0
		add.w	d4,d0
		andi.w	#$1F0,d0
		bsr.w	sub_72BA
		movem.l	(sp)+,d4-d6
		addi.w	#$10,d4
		dbf	d6,loc_728C
		rts	
; ===========================================================================
unk_72B2:	dc.b $F7 ; ÷
		dc.b   8 ;  
		dc.b $F7 ; ÷
		dc.b   8 ;  
		dc.b $F7 ; ÷
		dc.b $10 ;  
		dc.b $F7 ; ÷
		dc.b $18 ;  

; ||||||||||||||| S U B	R O U T	I N E |||||||||||||||||||||||||||||||||||||||


sub_72BA:
		lsr.w	#4,d0
		move.b	(a0,d0.w),d0
		movea.w	unk_72B2(pc,d0.w),a3
		beq.s	loc_72DA
		moveq	#-$10,d5
		movem.l	d4-d5,-(sp)
		bsr.w	Calc_VRAM_Pos
		movem.l	(sp)+,d4-d5
		bsr.w	DrawTiles_LR
		bra.s	locret_72EE
; ===========================================================================

loc_72DA:
		moveq	#0,d5
		movem.l	d4-d5,-(sp)
		bsr.w	loc_7176
		movem.l	(sp)+,d4-d5
		moveq	#$1F,d6
		bsr.w	DrawTiles_LR3

locret_72EE:
		rts	
; End of function sub_72BA

Step 6

Assuming you haven't changed the backgrounds of your levels, compile it and give it a go!

Credits

  • Hivebrain - for attempting this first
  • Tweaker - for his assistance when I had some issues to resolve.

Extra step

If you get errors upon compiling, you'll need to follow this extra step.

Fixing the errors

Alright, so after you've followed the main guide, you'll need to go here in your disasm:

Obj89:					; XREF: Obj_Index
		moveq	#0,d0
		move.b	$24(a0),d0
		move.w	Obj89_Index(pc,d0.w),d1
		jmp	Obj89_Index(pc,d1.w)
; ===========================================================================
Obj89_Index:	dc.w Obj89_Main-Obj89_Index
		dc.w Obj89_Move-Obj89_Index
		dc.w Obj89_GotoCredits-Obj89_Index
; ===========================================================================

Obj89_Main:				; XREF: Obj89_Index
		addq.b	#2,$24(a0)
		move.w	#-$20,8(a0)	; object starts	outside	the level boundary
		move.w	#$D8,$A(a0)
		move.l	#Map_obj89,4(a0)
		move.w	#$5C5,2(a0)
		move.b	#0,1(a0)
		move.b	#0,$18(a0)

Obj89_Move:				; XREF: Obj89_Index
		cmpi.w	#$C0,8(a0)	; has object reached $C0?
		beq.s	Obj89_Delay	; if yes, branch
		addi.w	#$10,8(a0)	; move object to the right
		bra.w	DisplaySprite
; ===========================================================================

Obj89_Delay:				; XREF: Obj89_Move
		addq.b	#2,$24(a0)
		move.w	#120,$30(a0)	; set duration for delay (2 seconds)

Obj89_GotoCredits:			; XREF: Obj89_Index
		subq.w	#1,$30(a0)	; subtract 1 from duration
		bpl.s	Obj89_Display
		move.b	#$1C,($FFFFF600).w ; exit to credits

Obj89_Display:
		bra.w	DisplaySprite

You should see this line occurring twice:

           bra.w   DisplaySprite

This is the problem. The code you just installed for the better background effects is bigger than the original code, and those lines that I mentioned have a specific branch range. Since some code has shifted, it is now out of range, causing the error. So let's change this code to something a bit more, shall I say, pliable. So, replace those two lines with this:

           jmp	DisplaySprite

That simple "jmp" command should do the trick.

And that's it! The errors should be gone! (If you still get errors, leave a message on this guide's talk page explaining how it all happens and I'll try to create a fix for it.) Have fun, and enjoy the Rev01 background effects!

(Oh, and you can still use this fix without following the actual guide, as it still works, and should make your life easier in case something else happens like the error I just explained above.)

SCHG How-To Guide: Sonic the Hedgehog (16-bit)
Fixing Bugs
Fix Demo Playback | Fix a Race Condition with Pattern Load Cues | Fix the SEGA Sound | Display the Press Start Button Text | Fix the Level Select Menu | Fix the Hidden Points Bug | Fix Accidental Deletion of Scattered Rings | Fix Ring Timers | Fix the Walk-Jump Bug | Correct Drowning Bugs | Fix the Death Boundary Bug | Fix the Camera Follow Bug | Fix Song Restoration Bugs | Fix the HUD Blinking | Fix the Level Select Graphics Bug | Fix a remember sprite related bug
Changing Design Choices
Change Spike Behavior | Collide with Water After Being Hurt | Fix Special Stage Jumping Physics | Improve the Fade In\Fade Out Progression Routines | Fix Scattered Rings' Underwater Physics | Remove the Speed Cap | Port the REV01 Background Effects | Port Sonic 2's Level Art Loader | Retain Rings Between Acts | Add Sonic 2 (Simon Wai Prototype) Level Select | Improve ObjectMove Subroutines | Port Sonic 2 Level Select
Adding Features
Add Spin Dash ( Part 1 / Part 2 / Part 3 / Part 4 ) | Add Eggman Monitor | Add Super Sonic | Add the Air Roll
Sound Features
Expand the Sound Index | Play Different Songs Per Act | Port Sonic 2 Final Sound Driver | Port Sonic 3's Sound Driver | Port Flamewing's Sonic 3 & Knuckles Sound Driver | Change The SEGA Sound
Extending the Game
Load Chunks From ROM | Add Extra Characters | Make an Alternative Title Screen | Use Dynamic Tilesets | Make GHZ Load Alternate Art | Make Ending Load Alternate Art | Add a New Zone | Set Up the Goggle Monitor | Add New Moves | Add a Dynamic Collision System | Dynamic Special Stage Walls System | Extend Sprite Mappings and Art Limit | Enigma Credits | Use Dynamic Palettes
Miscellaneous
Convert the Hivebrain 2005 Disassembly to ASM68K
Split Disassembly Guides
Set Up a Split Disassembly | Basic Level Editing | Basic Art Editing | Basic ASM Editing (Spin Dash)

|Port the REV01 Background Effects]]