Actions

SCHG How-to

Port sonic 2 beta 4's background deformation system into the nick aracde prototype

From Sonic Retro

Revision as of 22:02, 23 September 2017 by Shadow05 (talk | contribs) (Created page with "Hello again last time on nick arcade hacking I showed you how to port the parallax clouds into the nick arcade prototype well today i'm going to show how to port beta 4's defo...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Hello again last time on nick arcade hacking I showed you how to port the parallax clouds into the nick arcade prototype well today i'm going to show how to port beta 4's deformation system so without further ado let's get started!

Part 1 The code

So first of all find the code {it's called scrollblock 1-6} and replace it with this.

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


ScrollBlock1:				; CODE XREF: ROM:00005E74�p
					; ROM:00006006�p ...
		move.l	($FFFFEE08).w,d2
		move.l	d2,d0
		add.l	d4,d0
		move.l	d0,($FFFFEE08).w
		move.l	d0,d1
		swap	d1
		andi.w	#$10,d1
		move.b	($FFFFEE42).w,d3
		eor.b	d3,d1
		bne.s	loc_66EA
		eori.b	#$10,($FFFFEE42).w
		sub.l	d2,d0
		bpl.s	loc_66E4
		bset	#2,($FFFFEE52).w
		bra.s	loc_66EA
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_66E4:				; CODE XREF: ScrollBlock1+24�j
		bset	#3,($FFFFEE52).w

loc_66EA:				; CODE XREF: ScrollBlock1+1A�j
					; ScrollBlock1+2C�j
		move.l	($FFFFEE0C).w,d3
		move.l	d3,d0
		add.l	d5,d0
		move.l	d0,($FFFFEE0C).w
		move.l	d0,d1
		swap	d1
		andi.w	#$10,d1
		move.b	($FFFFEE43).w,d2
		eor.b	d2,d1
		bne.s	locret_671E
		eori.b	#$10,($FFFFEE43).w
		sub.l	d3,d0
		bpl.s	loc_6718
		bset	#0,($FFFFEE52).w
		rts
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_6718:				; CODE XREF: ScrollBlock1+58�j
		bset	#1,($FFFFEE52).w

locret_671E:				; CODE XREF: ScrollBlock1+4E�j
		rts
; End of function ScrollBlock1


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


ScrollBlock2:				; CODE XREF: ROM:00006362�p
		move.l	($FFFFEE08).w,d2
		move.l	d2,d0
		add.l	d4,d0
		move.l	d0,($FFFFEE08).w
		move.l	d0,d1
		swap.w	d1
		and.w	#$10,d1
		move.b	($FFFFEE42).w,d3
		eor.b	d3,d1
		bne.s	loc_B71A
		eor.b	#$10,($FFFFEE42).w
		sub.l	d2,d0
		bpl.s	loc_B714
		bset D6,($FFFFEE52).w
		bra.s	loc_B71A
loc_B714:
		addq.b	#1,d6
		bset D6,($FFFFEE52).w
loc_B71A:
		rts
; End of function ScrollBlock2

; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

ScrollBlock3:
		move.l	($FFFFEE0C).w,d3
		move.l	d3,d0
		add.l	d5,d0
Scroll_Block_3_D0: 
		move.l	d0,($FFFFEE0C).w
		move.l	d0,d1
		swap.w	d1
		and.w	#$10,d1
		move.b	($FFFFEE43).w,d2
		eor.b	d2,d1
		bne.s	loc_B74E
		eor.b	#$10,($FFFFEE43).w
		sub.l	d3,d0
		bpl.s	loc_B748
		bset D6,($FFFFEE52).w
		rts
;--------------------------------------------------------------------------------
loc_B748:
		addq.b	#1,d6
		bset D6,($FFFFEE52).w
loc_B74E:
		rts
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


ScrollBlock4:				; CODE XREF: ROM:00006354�p
		move.l	($FFFFEE10).w,d2
		move.l	d2,d0
		add.l	d4,d0
		move.l	d0,($FFFFEE10).w
		move.l	d0,d1
		swap.w	d1
		and.w	#$10,d1
		move.b	($FFFFEE44).w,d3
		eor.b	d3,d1
		bne.s	loc_B782
		eor.b	#$10,($FFFFEE44).w
		sub.l	d2,d0
		bpl.s	loc_B77C
		bset D6,($FFFFEE54).w
		bra.s	loc_B782
loc_B77C:
		addq.b	#1,d6
		bset D6,($FFFFEE54).w
loc_B782:
		rts
; End of function ScrollBlock4


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


ScrollBlock5:				; CODE XREF: ROM:00005B7E�p
					; ROM:00005C78�p ...
		move.l	($FFFFEE18).w,d2
		move.l	d2,d0
		add.l	d4,d0
		move.l	d0,($FFFFEE18).w
		move.l	d0,d1
		swap.w	d1
		and.w	#$10,d1
		move.b	($FFFFEE46).w,d3
		eor.b	d3,d1
		bne.s	loc_B7B6
		eor.b	#$10,($FFFFEE46).w
		sub.l	d2,d0
		bpl.s	loc_B7B0
		bset D6,($FFFFEE56).w
		bra.s	loc_B7B6
loc_B7B0:
		addq.b	#1,d6
		bset D6,($FFFFEE56).w
loc_B7B6:
		rts
; End of function ScrollBlock5


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


ScrollBlock6:				; CODE XREF: ROM:00005B70�p
					; ROM:00005C6A�p
		move.l	($FFFFEE18).w,d2
		move.l	d2,d0
		add.l	d4,d0
		move.l	d0,($FFFFEE18).w
		move.l	d0,d1
		swap	d1
		andi.w	#$10,d1
		move.b	($FFFFEE46).w,d3
		eor.b	d3,d1
		bne.s	locret_681E
		eori.b	#$10,($FFFFEE46).w
		sub.l	d2,d0
		bpl.s	loc_6818
		bset	d6,($FFFFEE56).w
		bra.s	locret_681E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_6818:				; CODE XREF: ScrollBlock6+24�j
		addq.b	#1,d6
		bset	d6,($FFFFEE56).w

locret_681E:				; CODE XREF: ScrollBlock6+1A�j
					; ScrollBlock6+2A�j
		rts
; End of function ScrollBlock6

; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
		lea	($C00004),a5
		lea	($C00000),a6
		lea	($FFFFEE52).w,a2
		lea	($FFFFEE08).w,a3
		lea	($FFFF8080).w,a4
		move.w	#$6000,d2
		bsr	sub_69B2
		lea	($FFFFEE54).w,a2
		lea	($FFFFEE10).w,a3
		bra	sub_6A82

There you go you ported it but we have some problems

Part 2 fixing and changing backgrounds

So you ported it but we need to fix some backgrounds

We can also add some parallax scrolling

  1. Chemical plant parallax
  2. Hidden palace fix
  3. Hill top parallax
  4. Emerald hill deformation fix
  5. Green hill fix {WIP}

Chemical plant

Find chemical plant's deformation code and change it to this.

Deform_CPZ:				; DATA XREF: ROM:Deform_Index�o
		move.w	($FFFFEEB0).w,d4
		ext.l	d4
		asl.l	#5,d4
		move.w	($FFFFEEB2).w,d5
		ext.l	d5
		asl.l	#6,d5
		bsr	ScrollBlock1 
		move.w	($FFFFEEB0).w,d4
		ext.l	d4
		asl.l	#7,d4
		moveq	#4,d6
		bsr	ScrollBlock4 
		move.w	($FFFFEE0C).w,d0
		move.w	d0,($FFFFEE14).w
		move.w	d0,($FFFFF618).w
		move.b	($FFFFEE52).w,d0
		or.b	($FFFFEE54).w,d0
		move.b	d0,($FFFFEE56).w
		clr.b	($FFFFEE52).w
		clr.b	($FFFFEE54).w
		move.b	($FFFFFE0F).w,d1
		and.w	#7,d1
		bne.s	loc_B0AA
		subq.w	#1,($FFFFA800).w
loc_B0AA:
		lea	(byte_6BCB),a0
		move.w	($FFFFEE0C).w,d0
		move.w	d0,d2
		and.w	#$3F0,d0
		lsr.w	#4,d0
		lea	0(a0,d0),a0
		move.w	d0,d4
		lea	($FFFFE000).w,a1
		move.w	#$E,d1
		move.w	($FFFFEE00).w,d0
		neg.w	d0
		swap.w	d0
		and.w	#$F,d2
		move.w	($FFFFEE08).w,d0
		cmp.b	#$12,d4
		beq.s	loc_B128
		bcs.s	loc_B0E6
		move.w	($FFFFEE10).w,d0
loc_B0E6:
		neg.w	d0
		add.w	d2,d2
		jmp	loc_B100(pc,d2)
loc_B0EE: 
		move.w	($FFFFEE08).w,d0
		cmp.b	#$12,d4
		beq.s	loc_B132
		bcs.s	loc_B0FE
		move.w	($FFFFEE10).w,d0
loc_B0FE:
		neg.w	d0
loc_B100: 
		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)+
		addq.b	#1,d4
		dbra	d1,loc_B0EE
		rts
;--------------------------------------------------------------------------------
loc_B128:
		move.w	#$F,d0
		sub.w	d2,d0
		move.w	d0,d2
		bra.s	loc_B136
loc_B132:
		move.w	#$F,d2
loc_B136:
		move.w	($FFFFEE08).w,d3
		neg.w	d3
		move.w	($FFFFA800).w,d0
		and.w	#$1F,d0
		lea	0(a2,d0),a2
loc_B14C: 
		move.b	(a2)+,d0
		ext.w	d0
		add.w	d3,d0
		move.l	d0,(a1)+
		dbra	d2,loc_B14C
		addq.b	#1,d4
		dbra	d1,loc_B0EE
		rts

Hidden palace vertical scrolling fix

So goto hidden palace's deformation code and change it to this.

Deform_HPZ:				; DATA XREF: ROM:Deform_Index�o
		move.w	($FFFFEEB0).w,d4
		ext.l	d4
		asl.l	#6,d4
		moveq	#2,d6
		bsr	ScrollBlock2 
		move.w	($FFFFEEB2).w,d5
		ext.l	d5
		asl.l	#7,d5
		moveq	#6,d6
		bsr	ScrollBlock3 
		move.w	($FFFFEE0C).w,($FFFFF618).w
		lea	($FFFFA800).w,a1
		move.w	($FFFFEE00).w,d2
		neg.w	d2
		move.w	d2,d0
		asr.w	#1,d0
		move.w	#7,d1
loc_AA40: 
		move.w	d0,(a1)+
		dbra	d1,loc_AA40
		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
		lea	($FFFFA860).w,a2
		swap.w	d3
		add.l	d0,d3
		swap.w	d3
		move.w	d3,(a1)+
		move.w	d3,(a1)+
		move.w	d3,(a1)+
		move.w	d3,-(a2)
		move.w	d3,-(a2)
		move.w	d3,-(a2)
		swap.w	d3
		add.l	d0,d3
		swap.w	d3
		move.w	d3,(a1)+
		move.w	d3,(a1)+
		move.w	d3,-(a2)
		move.w	d3,-(a2)
		swap.w	d3
		add.l	d0,d3
		swap.w	d3
		move.w	d3,(a1)+
		move.w	d3,-(a2)
		swap.w	d3
		add.l	d0,d3
		swap.w	d3
		move.w	d3,(a1)+
		move.w	d3,-(a2)
		move.w	($FFFFEE08).w,d0
		neg.w	d0
		move.w	#$19,d1
loc_AAA2: 
		move.w	d0,(a1)+
		dbra	d1,loc_AAA2
		add.w	#$E,a1
		move.w	d2,d0
		asr.w	#1,d0
		move.w	#$17,d1
loc_AAB4: 
		move.w	d0,(a1)+
		dbra	d1,loc_AAB4
		lea	($FFFFA800).w,a2
		move.w	($FFFFEE0C).w,d0
		move.w	d0,d2
		and.w	#$3F0,d0
		lsr.w	#3,d0
		lea	0(a2,d0),a2
		bra	loc_6306

Hill top scrolling clouds and Emerald hill deformation fix

I have shown you how to do this in the past so to do it click on these links.

EHZ fix Here!

HTZ scrolling clouds here!

That's it!

SCHG How-To Guide: Sonic 2 Beta (16-bit)
Fixing Bugs
Fix EHZ Deformation Bug
Design Choices
Add final spindash to Sonic 2 Beta