Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; ===========================================================================
- ; ----------------------------------------------------------------------------
- ; Object 05 - Splash in ARZ, dust when skidding, dust when Spindashing
- ; ----------------------------------------------------------------------------
- ; Sprite_1DD20:
- Dust:
- moveq #0,d0
- move.b $24(a0),d0
- move.w Dust_Index(pc,d0.w),d1
- jmp Dust_Index(pc,d1.w)
- ; ===========================================================================
- ; off_1DD2E:
- Dust_Index:
- dc.w Dust_Init-Dust_Index ; 0
- dc.w Dust_Main-Dust_Index ; 2
- dc.w Dust_Delete-Dust_Index ; 4
- dc.w Dust_CheckSkid-Dust_Index ; 6
- ; ===========================================================================
- ; loc_1DD36:
- Dust_Init:
- addq.b #2,$24(a0)
- move.l #Obj05_Map,4(a0)
- ori.b #4,1(a0)
- move.b #1,$18(a0)
- move.b #$10,$19(a0)
- move.w #$7A0,2(a0)
- ; loc_1DD90:
- Dust_Main:
- lea ($FFFFD000).w,a2 ; a2=character
- moveq #0,d0
- move.b $1C(a0),d0 ; use current animation as a secondary routine counter
- add.w d0,d0
- move.w Dust_DisplayModes(pc,d0.w),d1
- jmp Dust_DisplayModes(pc,d1.w)
- ; ===========================================================================
- ; off_1DDA4:
- Dust_DisplayModes:
- dc.w Dust_Display-Dust_DisplayModes ; 0
- dc.w Dust_MdSplash-Dust_DisplayModes ; 2
- dc.w Dust_MdSpindashDust-Dust_DisplayModes ; 4
- dc.w Dust_MdSkidDust-Dust_DisplayModes ; 6
- ; ===========================================================================
- ; loc_1DDAC:
- Dust_MdSplash:
- move.w ($FFFFF646).w,$C(a0)
- tst.b $1D(a0)
- bne.s Dust_Display
- move.w 8(a2),8(a0)
- move.b #0,$22(a0)
- andi.w #$7FFF,2(a0)
- bra.s Dust_Display
- ; ===========================================================================
- ; loc_1DDCC:
- Dust_MdSpindashDust:
- cmpi.b #$C,($FFFFFE15).w
- blo.s Dust_ResetDisplayMode
- cmpi.b #4,$24(a2)
- bhs.s Dust_ResetDisplayMode
- tst.b $39(a2) ; is Sonic performing a Spindash?
- beq.s Dust_ResetDisplayMode
- move.w 8(a2),8(a0)
- move.w $C(a2),$C(a0)
- move.b $22(a2),$22(a0)
- andi.b #1,$22(a0)
- andi.w #$7FFF,2(a0)
- tst.w 2(a2)
- bpl.s Dust_Display
- ori.w #$8000,2(a0)
- bra.s Dust_Display
- ; ===========================================================================
- ; loc_1DE20:
- Dust_MdSkidDust:
- cmpi.b #$C,($FFFFFE15).w
- blo.s Dust_ResetDisplayMode
- ; loc_1DE28:
- Dust_Display:
- lea (Ani_Obj05).l,a1
- jsr (AnimateSprite).l
- bsr.w Dust_LoadArt
- jmp (DisplaySprite).l
- ; ===========================================================================
- ; loc_1DE3E:
- Dust_ResetDisplayMode:
- move.b #0,$1C(a0)
- rts
- ; ===========================================================================
- Dust_Delete:
- bra.w DeleteObject
- ; ===========================================================================
- ; loc_1DE4A:
- Dust_CheckSkid:
- lea ($FFFFD000).w,a2 ; a2=character
- cmpi.b #$D,$1C(a2)
- beq.s Dust_SkidDust
- move.b #2,$24(a0)
- move.b #0,$32(a0)
- rts
- ; ===========================================================================
- ; loc_1DE64:
- Dust_SkidDust:
- subq.b #1,$32(a0)
- bpl.s loc_1DEE0
- move.b #3,$32(a0)
- bsr.w SingleObjLoad
- bne.s loc_1DEE0
- move.b (a0),(a1) ; load obj08
- move.w 8(a2),8(a1)
- move.w $C(a2),$C(a1)
- addi.w #$10,$C(a1)
- move.b #0,$22(a1)
- move.b #3,$1C(a1)
- addq.b #2,$24(a1)
- move.l 4(a0),4(a1)
- move.b 1(a0),1(a1)
- move.b #1,$18(a1)
- move.b #4,$19(a1)
- move.w 2(a0),2(a1)
- andi.w #$7FFF,2(a1)
- tst.w 2(a2)
- bpl.s loc_1DEE0
- ori.w #$8000,2(a1)
- loc_1DEE0:
- bsr.s Dust_LoadArt
- rts
- ; ===========================================================================
- ; loc_1DEE4:
- Dust_LoadArt:
- moveq #0,d0
- move.b $1A(a0),d0 ; load frame number
- cmp.b $30(a0),d0 ; has frame changed?
- beq.s @nochange ; if not, branch
- move.b d0,$30(a0)
- lea (Obj05_DPLC).l,a2 ; load PLC script
- add.w d0,d0
- adda.w (a2,d0.w),a2
- moveq #0,d5
- move.b (a2)+,d5
- subq.w #1,d5
- bmi.s @nochange
- move.w #$F400,d4
- move.l #Art_Dust,d6
- @readentry:
- moveq #0,d1
- move.b (a2)+,d1
- lsl.w #8,d1
- move.b (a2)+,d1
- move.w d1,d3
- lsr.w #8,d3
- andi.w #$F0,d3
- addi.w #$10,d3
- andi.w #$FFF,d1
- lsl.l #5,d1
- add.l d6,d1
- move.w d4,d2
- add.w d3,d4
- add.w d3,d4
- jsr (QueueDMATransfer).l
- dbf d5,@readentry ; repeat for number of entries
- @nochange:
- rts
- ; ===========================================================================
- ; animation script
- ; off_1DF38: Ani_obj08:
- Ani_Obj05:
- dc.w Obj05Ani_Null-Ani_Obj05 ; 0
- dc.w Obj05Ani_Splash-Ani_Obj05 ; 1
- dc.w Obj05Ani_Dash-Ani_Obj05 ; 2
- dc.w Obj05Ani_Skid-Ani_Obj05 ; 3
- Obj05Ani_Null: dc.b $1F, 0,$FF
- even
- Obj05Ani_Splash:dc.b 3, 1, 2, 3, 4, 5, 6, 7, 8, 9,$FD, 0
- even
- Obj05Ani_Dash: dc.b 1, $A, $B, $C, $D, $E, $F,$10,$FF
- even
- Obj05Ani_Skid: dc.b 3,$11,$12,$13,$14,$FC
- even
- ; sprite mappings
- ; Obj08_MapUnc_1DF5E:
- Obj05_Map:
- dc.w Obj05_Map_2C-Obj05_Map, Obj05_Map_2D-Obj05_Map
- dc.w Obj05_Map_33-Obj05_Map, Obj05_Map_39-Obj05_Map
- dc.w Obj05_Map_3F-Obj05_Map, Obj05_Map_45-Obj05_Map
- dc.w Obj05_Map_4B-Obj05_Map, Obj05_Map_51-Obj05_Map
- dc.w Obj05_Map_57-Obj05_Map, Obj05_Map_5D-Obj05_Map
- dc.w Obj05_Map_63-Obj05_Map, Obj05_Map_69-Obj05_Map
- dc.w Obj05_Map_6F-Obj05_Map, Obj05_Map_75-Obj05_Map
- dc.w Obj05_Map_80-Obj05_Map, Obj05_Map_8B-Obj05_Map
- dc.w Obj05_Map_96-Obj05_Map, Obj05_Map_A1-Obj05_Map
- dc.w Obj05_Map_A7-Obj05_Map, Obj05_Map_AD-Obj05_Map
- dc.w Obj05_Map_B3-Obj05_Map, Obj05_Map_B9-Obj05_Map
- Obj05_Map_2C: dc.b 0
- Obj05_Map_2D: dc.b 1
- dc.b $F2, $D, 0, 0, $F0
- Obj05_Map_33: dc.b 1
- dc.b $E2, $F, 0, 0, $F0
- Obj05_Map_39: dc.b 1
- dc.b $E2, $F, 0, 0, $F0
- Obj05_Map_3F: dc.b 1
- dc.b $E2, $F, 0, 0, $F0
- Obj05_Map_45: dc.b 1
- dc.b $E2, $F, 0, 0, $F0
- Obj05_Map_4B: dc.b 1
- dc.b $E2, $F, 0, 0, $F0
- Obj05_Map_51: dc.b 1
- dc.b $F2, $D, 0, 0, $F0
- Obj05_Map_57: dc.b 1
- dc.b $F2, $D, 0, 0, $F0
- Obj05_Map_5D: dc.b 1
- dc.b $F2, $D, 0, 0, $F0
- Obj05_Map_63: dc.b 1
- dc.b 4, $D, 0, 0, $E0
- Obj05_Map_69: dc.b 1
- dc.b 4, $D, 0, 0, $E0
- Obj05_Map_6F: dc.b 1
- dc.b 4, $D, 0, 0, $E0
- Obj05_Map_75: dc.b 2
- dc.b $F4, 1, 0, 0, $E8
- dc.b 4, $D, 0, 2, $E0
- Obj05_Map_80: dc.b 2
- dc.b $F4, 5, 0, 0, $E8
- dc.b 4, $D, 0, 4, $E0
- Obj05_Map_8B: dc.b 2
- dc.b $F4, 9, 0, 0, $E0
- dc.b 4, $D, 0, 6, $E0
- Obj05_Map_96: dc.b 2
- dc.b $F4, 9, 0, 0, $E0
- dc.b 4, $D, 0, 6, $E0
- Obj05_Map_A1: dc.b 1
- dc.b $F8, 5, 0, 0, $F8
- Obj05_Map_A7: dc.b 1
- dc.b $F8, 5, 0, 4, $F8
- Obj05_Map_AD: dc.b 1
- dc.b $F8, 5, 0, 8, $F8
- Obj05_Map_B3: dc.b 1
- dc.b $F8, 5, 0, $C, $F8
- Obj05_Map_B9: dc.b 0
- even
- ; dynamic pattern loading cues
- ; Obj08_MapRUnc_1E074:
- Obj05_DPLC:
- dc.w Obj05_DPLC_2C-Obj05_DPLC, Obj05_DPLC_2D-Obj05_DPLC
- dc.w Obj05_DPLC_30-Obj05_DPLC, Obj05_DPLC_33-Obj05_DPLC
- dc.w Obj05_DPLC_36-Obj05_DPLC, Obj05_DPLC_39-Obj05_DPLC
- dc.w Obj05_DPLC_3C-Obj05_DPLC, Obj05_DPLC_3F-Obj05_DPLC
- dc.w Obj05_DPLC_42-Obj05_DPLC, Obj05_DPLC_45-Obj05_DPLC
- dc.w Obj05_DPLC_48-Obj05_DPLC, Obj05_DPLC_4B-Obj05_DPLC
- dc.w Obj05_DPLC_4E-Obj05_DPLC, Obj05_DPLC_51-Obj05_DPLC
- dc.w Obj05_DPLC_56-Obj05_DPLC, Obj05_DPLC_5B-Obj05_DPLC
- dc.w Obj05_DPLC_60-Obj05_DPLC, Obj05_DPLC_65-Obj05_DPLC
- dc.w Obj05_DPLC_66-Obj05_DPLC, Obj05_DPLC_67-Obj05_DPLC
- dc.w Obj05_DPLC_68-Obj05_DPLC, Obj05_DPLC_69-Obj05_DPLC
- Obj05_DPLC_2C: dc.b 0
- Obj05_DPLC_2D: dc.b 1, $70, 0
- Obj05_DPLC_30: dc.b 1, $F0, 8
- Obj05_DPLC_33: dc.b 1, $F0, $18
- Obj05_DPLC_36: dc.b 1, $F0, $28
- Obj05_DPLC_39: dc.b 1, $F0, $38
- Obj05_DPLC_3C: dc.b 1, $F0, $48
- Obj05_DPLC_3F: dc.b 1, $70, $58
- Obj05_DPLC_42: dc.b 1, $70, $60
- Obj05_DPLC_45: dc.b 1, $70, $68
- Obj05_DPLC_48: dc.b 1, $70, $70
- Obj05_DPLC_4B: dc.b 1, $70, $78
- Obj05_DPLC_4E: dc.b 1, $70, $80
- Obj05_DPLC_51: dc.b 2, $10, $88, $70, $8A
- Obj05_DPLC_56: dc.b 2, $30, $92, $70, $96
- Obj05_DPLC_5B: dc.b 2, $50, $9E, $70, $A4
- Obj05_DPLC_60: dc.b 2, $50, $AC, $70, $B2
- Obj05_DPLC_65: dc.b 0
- Obj05_DPLC_66: dc.b 0
- Obj05_DPLC_67: dc.b 0
- Obj05_DPLC_68: dc.b 0
- Obj05_DPLC_69: dc.b 1, $F0, $BA
- even
- ; ===========================================================================
- ; END OF OBJECT CODE
- ; ===========================================================================
- ; ===========================================================================
- ; To implement the skid dust, add the following code:
- cmpi.b #$C,($FFFFFE15).w
- blo.s closest_locret ; if he's drowning, branch to not make dust
- move.b #6,($FFFFD1E4).w
- move.b #$15,($FFFFD1DA).w
- ; ...to the ends of loc_130BA and loc_13120, and replace closest_locret with... the closest locret.
- ; I also recommend you change your skidding animation to be 4 frames long, and to end by changing to the walking animation.
- ; Why? Fixes a funky-looking bug where the skid dust animation loops (even though it's not supposed to do that, sp00ky).
- ; ===========================================================================
- ; To activate spindash dust:
- cmpi.b #$C,($FFFFFE15).w ; if he's drowning, branch to not make dust
- blo.s @skip_following_line
- move.b #1,($FFFFD1DC).w
- ; ...and to deactivate it:
- move.b #0,($FFFFD1DC).w
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement