Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Obj05:
- moveq #0,d0
- move.b $24(a0),d0
- move Obj05_Index(pc,d0.w),d1
- jmp Obj05_Index(pc,d1.w)
- ; ===========================================================================
- Obj05_Index: dc.w Obj05_Init-Obj05_Index ; 0
- dc.w Obj05_Main-Obj05_Index ; 2
- dc.w Obj05_Delete-Obj05_Index ; 4
- dc.w Obj05_DoSkid-Obj05_Index ; 6
- ; ===========================================================================
- Obj05_Init:
- addq.b #2,$24(a0) ; => "Obj05_Main"
- move.l #Map_Obj05,4(a0)
- or.b #4,1(a0)
- move.b #1,$18(a0)
- move.b #$10,$19(a0)
- move #$7A0,2(a0)
- move #$D000,$3E(a0) ; Sonic's object address ($FFFFD000)
- move #$F400,$3C(a0) ; DMA destination address (VRAM)
- Obj05_Main:
- movea.w $3E(a0),a2 ; a2 = Character Object
- moveq #0,d0
- move.b $1C(a0),d0 ; d0 = AnimID
- add d0,d0 ; d0 = AnimID*2
- move Obj05_Index2(pc,d0.w),d1
- jmp Obj05_Index2(pc,d1.w) ; choose routine according to animation number
- ; ===========================================================================
- Obj05_Index2: dc.w Obj05_Display-Obj05_Index2 ; 0
- dc.w Obj05_Splash-Obj05_Index2 ; 1
- dc.w Obj05_Dust-Obj05_Index2 ; 2
- dc.w Obj05_Display-Obj05_Index2 ; 3
- ; ===========================================================================
- Obj05_Splash:
- move ($FFFFF646).w,$C(a0) ; Ypos = Water Level
- tst.b $1D(a0) ; is animation over?
- bne.s Obj05_Display ; if not, branch
- move 8(a2),8(a0) ; Xpos = Sonic.Xpos
- move.b #0,$22(a0)
- and #$7FFF,2(a0)
- bra.s Obj05_Display
- ; ===========================================================================
- Obj05_Dust:
- cmp.b #4,$24(a2)
- bcc.s Obj05_ResetAnim
- tst.b $39(a2)
- beq.s Obj05_ResetAnim
- ; lea ($FFFFD000).w,a2 ; -- WAS LOADED ALREADY!
- ; cmpi.b #6,$24(a2) ; -- DUPLICATE CHECK!
- ; bcc.s Obj05_ResetAnim ;
- ; tst.b $39(a2) ; -- DUPLICATE CHECK!
- ; beq.s Obj05_ResetAnim ;
- move.b 1(a2),1(a0)
- move.w 8(a2),8(a0)
- move.w $C(a2),$C(a0)
- move.b $22(a2),$22(a0)
- and.b #1,$22(a0)
- subq.w #5,$C(a0) ; -- was SUB, optimized to SUBQ
- tst.b $1D(a0) ; is animation over?
- bne.s Obj05_Display ; if not, branch
- and.w #$7FFF,2(a0)
- tst.b 2(a2)
- bpl.s Obj05_Display
- or.w #$8000,2(a0)
- ; ===========================================================================
- Obj05_Display:
- lea Ani_Obj05(pc),a1 ; -- used mode (xxx).l, optimized to d16(pc)
- jsr AnimateSprite
- bsr.w Load_SpinDust_DPLC
- bra.s DisplaySprite
- ; ===========================================================================
- Obj05_ResetAnim:
- sf.b $1C(a0) ; -- used MOVE.B #0, optimized to ST (takes less space)
- rts
- ; ===========================================================================
- Obj05_Delete:
- bra.w DeleteObject
- ; ===========================================================================
- Obj05_DoSkid:
- movea.w $3E(a0),a2 ; a2 = Character
- moveq #$10,d1
- cmp.b #$D,$1C(a2)
- beq.s loc_1DE64
- moveq #6,d1
- cmp.b #3,$21(a2)
- beq.s loc_1DE64
- move.b #2,$24(a0)
- move.b #0,$32(a0)
- rts
- ; ===========================================================================
- loc_1DE64:
- subq.b #1,$32(a0) ; is timer over?
- bpl.s Load_SpinDust_DPLC ; if not, branch
- move.b #3,$32(a0) ; reset timer
- jsr SingleObjLoad
- bne.s Load_SpinDust_DPLC
- move.b 0(a0),0(a1)
- move 8(a2),8(a1)
- move $C(a2),$C(a1)
- ; -- This was check for Tails, do not want
- ; tst.b $34(a0)
- ; beq.s loc_1DE9A
- ; subq.w #4,d1 ; -- was SUB, optimized to SUBQ
- ;loc_1DE9A:
- add.w d1,$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)
- move.w $3E(a0),$3E(a1)
- and.w #$7FFF,2(a1)
- tst.w 2(a2)
- bpl.s Load_SpinDust_DPLC
- or #-$8000,2(a1)
- ; -- Totally useless branch, hey, that code is below!
- ;loc_1DEE0:
- ; bra.s Load_SpinDust_DPLC
- ; rts
- ; ===========================================================================
- Load_SpinDust_DPLC:
- moveq #0,d0
- move.b $1A(a0),d0 ; d0 = Frame
- cmp.b $30(a0),d0 ; Frame = LastFrame?
- beq.w locret_1DF36 ; if yes, branch
- move.b d0,$30(a0) ; LastFrame = Frame
- lea off_1E074(pc),a2 ; -- used mode (xxx).l, optimized to d16(pc)
- add.w d0,d0
- add.w (a2,d0.w),a2
- move.w (a2)+,d5
- subq.w #1,d5
- bmi.w locret_1DF36
- move.w $3C(a0),d4
- loc_1DF0A:
- moveq #0,d1
- move.w (a2)+,d1
- move.w d1,d3
- lsr.w #8,d3
- and.w #$F0,d3
- add.w #$10,d3
- and.w #$FFF,d1
- lsl.l #5,d1
- add.l #Art_Dust,d1
- move.w d4,d2
- add.w d3,d4
- add.w d3,d4
- jsr (QueueDMATransfer).l
- dbf d5,loc_1DF0A
- locret_1DF36:
- rts
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement