Port sonic 2 beta 4's background deformation system into the nick aracde prototype
From Sonic Retro
Hello everyone Shadow05 here
last time 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!
Contents
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 have ported the system but we need to fix some backgrounds.
We can also add some parallax scrolling .
- Chemical plant parallax
- Hidden palace fix
- Hill top parallax
- Emerald hill deformation fix
- 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 already shown you how to do this in the past so to do it click on these links.
That's it!
SCHG How-To Guide: Sonic 2 Beta (16-bit) |
---|
Design Choices |
Add final spindash to Sonic 2 Beta | SCHG How-to:How to port paralax plouds to the Nick Arcade prototype |