IPB

Welcome Guest ( Log In | Register )


 

Recent Changes | Random | Help | Special Pages | Upload
home | info | forums | svn | irc | podcast | about

We've managed to restore 99% of our file loss earlier in the year, but it's now THE FINAL COUNTDOWN. Visit the wiki file request topic to help make Sonic Retro better than ever.

SCHG How-to:Port the REV01 Background Effects

From Sonic Retro

(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, you'll have to do the following...

Contents

Steps

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.