Advertisement
Leo40Bin

Splash/Spindash Dust/Skid Dust from S2, for S1 Hivebrain

May 14th, 2019
2,304
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; ===========================================================================
  2. ; ----------------------------------------------------------------------------
  3. ; Object 05 - Splash in ARZ, dust when skidding, dust when Spindashing
  4. ; ----------------------------------------------------------------------------
  5. ; Sprite_1DD20:
  6. Dust:
  7.         moveq   #0,d0
  8.         move.b  $24(a0),d0
  9.         move.w  Dust_Index(pc,d0.w),d1
  10.         jmp Dust_Index(pc,d1.w)
  11. ; ===========================================================================
  12. ; off_1DD2E:
  13. Dust_Index:
  14.         dc.w Dust_Init-Dust_Index           ; 0
  15.         dc.w Dust_Main-Dust_Index           ; 2
  16.         dc.w Dust_Delete-Dust_Index     ; 4
  17.         dc.w Dust_CheckSkid-Dust_Index  ; 6
  18. ; ===========================================================================
  19. ; loc_1DD36:
  20. Dust_Init:
  21.         addq.b  #2,$24(a0)
  22.         move.l  #Obj05_Map,4(a0)
  23.         ori.b   #4,1(a0)
  24.         move.b  #1,$18(a0)
  25.         move.b  #$10,$19(a0)
  26.         move.w  #$7A0,2(a0)
  27.  
  28. ; loc_1DD90:
  29. Dust_Main:
  30.         lea ($FFFFD000).w,a2    ; a2=character
  31.         moveq   #0,d0
  32.         move.b  $1C(a0),d0  ; use current animation as a secondary routine counter
  33.         add.w   d0,d0
  34.         move.w  Dust_DisplayModes(pc,d0.w),d1
  35.         jmp Dust_DisplayModes(pc,d1.w)
  36. ; ===========================================================================
  37. ; off_1DDA4:
  38. Dust_DisplayModes:
  39.         dc.w Dust_Display-Dust_DisplayModes ; 0
  40.         dc.w Dust_MdSplash-Dust_DisplayModes    ; 2
  41.         dc.w Dust_MdSpindashDust-Dust_DisplayModes  ; 4
  42.         dc.w Dust_MdSkidDust-Dust_DisplayModes  ; 6
  43. ; ===========================================================================
  44. ; loc_1DDAC:
  45. Dust_MdSplash:
  46.         move.w  ($FFFFF646).w,$C(a0)
  47.         tst.b   $1D(a0)
  48.         bne.s   Dust_Display
  49.         move.w  8(a2),8(a0)
  50.         move.b  #0,$22(a0)
  51.         andi.w  #$7FFF,2(a0)
  52.         bra.s   Dust_Display
  53. ; ===========================================================================
  54. ; loc_1DDCC:
  55. Dust_MdSpindashDust:
  56.         cmpi.b  #$C,($FFFFFE15).w
  57.         blo.s   Dust_ResetDisplayMode
  58.         cmpi.b  #4,$24(a2)
  59.         bhs.s   Dust_ResetDisplayMode
  60.         tst.b   $39(a2) ; is Sonic performing a Spindash?
  61.         beq.s   Dust_ResetDisplayMode
  62.         move.w  8(a2),8(a0)
  63.         move.w  $C(a2),$C(a0)
  64.         move.b  $22(a2),$22(a0)
  65.         andi.b  #1,$22(a0)
  66.         andi.w  #$7FFF,2(a0)
  67.         tst.w   2(a2)
  68.         bpl.s   Dust_Display
  69.         ori.w   #$8000,2(a0)
  70.         bra.s   Dust_Display
  71. ; ===========================================================================
  72. ; loc_1DE20:
  73. Dust_MdSkidDust:
  74.         cmpi.b  #$C,($FFFFFE15).w
  75.         blo.s   Dust_ResetDisplayMode
  76.  
  77. ; loc_1DE28:
  78. Dust_Display:
  79.         lea (Ani_Obj05).l,a1
  80.         jsr (AnimateSprite).l
  81.         bsr.w   Dust_LoadArt
  82.         jmp (DisplaySprite).l
  83. ; ===========================================================================
  84. ; loc_1DE3E:
  85. Dust_ResetDisplayMode:
  86.         move.b  #0,$1C(a0)
  87.         rts
  88. ; ===========================================================================
  89. Dust_Delete:
  90.         bra.w   DeleteObject
  91. ; ===========================================================================
  92. ; loc_1DE4A:
  93. Dust_CheckSkid:
  94.         lea ($FFFFD000).w,a2 ; a2=character
  95.         cmpi.b  #$D,$1C(a2)
  96.         beq.s   Dust_SkidDust
  97.         move.b  #2,$24(a0)
  98.         move.b  #0,$32(a0)
  99.         rts
  100. ; ===========================================================================
  101. ; loc_1DE64:
  102. Dust_SkidDust:
  103.         subq.b  #1,$32(a0)
  104.         bpl.s   loc_1DEE0
  105.         move.b  #3,$32(a0)
  106.         bsr.w   SingleObjLoad
  107.         bne.s   loc_1DEE0
  108.         move.b  (a0),(a1) ; load obj08
  109.         move.w  8(a2),8(a1)
  110.         move.w  $C(a2),$C(a1)
  111.         addi.w  #$10,$C(a1)
  112.         move.b  #0,$22(a1)
  113.         move.b  #3,$1C(a1)
  114.         addq.b  #2,$24(a1)
  115.         move.l  4(a0),4(a1)
  116.         move.b  1(a0),1(a1)
  117.         move.b  #1,$18(a1)
  118.         move.b  #4,$19(a1)
  119.         move.w  2(a0),2(a1)
  120.         andi.w  #$7FFF,2(a1)
  121.         tst.w   2(a2)
  122.         bpl.s   loc_1DEE0
  123.         ori.w   #$8000,2(a1)
  124.  
  125. loc_1DEE0:
  126.         bsr.s   Dust_LoadArt
  127.         rts
  128. ; ===========================================================================
  129. ; loc_1DEE4:
  130. Dust_LoadArt:
  131.         moveq   #0,d0
  132.         move.b  $1A(a0),d0  ; load frame number
  133.         cmp.b   $30(a0),d0 ; has frame changed?
  134.         beq.s   @nochange   ; if not, branch
  135.  
  136.         move.b  d0,$30(a0)
  137.         lea (Obj05_DPLC).l,a2 ; load PLC script
  138.         add.w   d0,d0
  139.         adda.w  (a2,d0.w),a2
  140.         moveq   #0,d5
  141.         move.b  (a2)+,d5
  142.         subq.w  #1,d5
  143.         bmi.s   @nochange
  144.         move.w  #$F400,d4
  145.         move.l  #Art_Dust,d6
  146.  
  147. @readentry:
  148.         moveq   #0,d1
  149.         move.b  (a2)+,d1
  150.         lsl.w   #8,d1
  151.         move.b  (a2)+,d1
  152.         move.w  d1,d3
  153.         lsr.w   #8,d3
  154.         andi.w  #$F0,d3
  155.         addi.w  #$10,d3
  156.         andi.w  #$FFF,d1
  157.         lsl.l   #5,d1
  158.         add.l   d6,d1
  159.         move.w  d4,d2
  160.         add.w   d3,d4
  161.         add.w   d3,d4
  162.         jsr (QueueDMATransfer).l
  163.         dbf d5,@readentry   ; repeat for number of entries
  164.  
  165. @nochange:
  166.         rts
  167.  
  168. ; ===========================================================================
  169. ; animation script
  170. ; off_1DF38: Ani_obj08:
  171. Ani_Obj05:
  172.         dc.w Obj05Ani_Null-Ani_Obj05    ; 0
  173.         dc.w Obj05Ani_Splash-Ani_Obj05  ; 1
  174.         dc.w Obj05Ani_Dash-Ani_Obj05    ; 2
  175.         dc.w Obj05Ani_Skid-Ani_Obj05    ; 3
  176. Obj05Ani_Null:  dc.b $1F,  0,$FF
  177.     even
  178. Obj05Ani_Splash:dc.b   3,  1,  2,  3,  4,  5,  6,  7,  8,  9,$FD,  0
  179.     even
  180. Obj05Ani_Dash:  dc.b   1, $A, $B, $C, $D, $E, $F,$10,$FF
  181.     even
  182. Obj05Ani_Skid:  dc.b   3,$11,$12,$13,$14,$FC
  183.     even
  184.  
  185. ; sprite mappings
  186. ; Obj08_MapUnc_1DF5E:
  187. Obj05_Map: 
  188.         dc.w Obj05_Map_2C-Obj05_Map, Obj05_Map_2D-Obj05_Map
  189.         dc.w Obj05_Map_33-Obj05_Map, Obj05_Map_39-Obj05_Map
  190.         dc.w Obj05_Map_3F-Obj05_Map, Obj05_Map_45-Obj05_Map
  191.         dc.w Obj05_Map_4B-Obj05_Map, Obj05_Map_51-Obj05_Map
  192.         dc.w Obj05_Map_57-Obj05_Map, Obj05_Map_5D-Obj05_Map
  193.         dc.w Obj05_Map_63-Obj05_Map, Obj05_Map_69-Obj05_Map
  194.         dc.w Obj05_Map_6F-Obj05_Map, Obj05_Map_75-Obj05_Map
  195.         dc.w Obj05_Map_80-Obj05_Map, Obj05_Map_8B-Obj05_Map
  196.         dc.w Obj05_Map_96-Obj05_Map, Obj05_Map_A1-Obj05_Map
  197.         dc.w Obj05_Map_A7-Obj05_Map, Obj05_Map_AD-Obj05_Map
  198.         dc.w Obj05_Map_B3-Obj05_Map, Obj05_Map_B9-Obj05_Map
  199. Obj05_Map_2C:   dc.b 0 
  200. Obj05_Map_2D:   dc.b 1 
  201.         dc.b $F2, $D, 0, 0, $F0
  202. Obj05_Map_33:   dc.b 1 
  203.         dc.b $E2, $F, 0, 0, $F0
  204. Obj05_Map_39:   dc.b 1 
  205.         dc.b $E2, $F, 0, 0, $F0
  206. Obj05_Map_3F:   dc.b 1 
  207.         dc.b $E2, $F, 0, 0, $F0
  208. Obj05_Map_45:   dc.b 1 
  209.         dc.b $E2, $F, 0, 0, $F0
  210. Obj05_Map_4B:   dc.b 1 
  211.         dc.b $E2, $F, 0, 0, $F0
  212. Obj05_Map_51:   dc.b 1 
  213.         dc.b $F2, $D, 0, 0, $F0
  214. Obj05_Map_57:   dc.b 1 
  215.         dc.b $F2, $D, 0, 0, $F0
  216. Obj05_Map_5D:   dc.b 1 
  217.         dc.b $F2, $D, 0, 0, $F0
  218. Obj05_Map_63:   dc.b 1 
  219.         dc.b 4, $D, 0, 0, $E0  
  220. Obj05_Map_69:   dc.b 1 
  221.         dc.b 4, $D, 0, 0, $E0  
  222. Obj05_Map_6F:   dc.b 1 
  223.         dc.b 4, $D, 0, 0, $E0  
  224. Obj05_Map_75:   dc.b 2 
  225.         dc.b $F4, 1, 0, 0, $E8 
  226.         dc.b 4, $D, 0, 2, $E0  
  227. Obj05_Map_80:   dc.b 2 
  228.         dc.b $F4, 5, 0, 0, $E8 
  229.         dc.b 4, $D, 0, 4, $E0  
  230. Obj05_Map_8B:   dc.b 2 
  231.         dc.b $F4, 9, 0, 0, $E0 
  232.         dc.b 4, $D, 0, 6, $E0  
  233. Obj05_Map_96:   dc.b 2 
  234.         dc.b $F4, 9, 0, 0, $E0 
  235.         dc.b 4, $D, 0, 6, $E0  
  236. Obj05_Map_A1:   dc.b 1 
  237.         dc.b $F8, 5, 0, 0, $F8 
  238. Obj05_Map_A7:   dc.b 1 
  239.         dc.b $F8, 5, 0, 4, $F8 
  240. Obj05_Map_AD:   dc.b 1 
  241.         dc.b $F8, 5, 0, 8, $F8 
  242. Obj05_Map_B3:   dc.b 1 
  243.         dc.b $F8, 5, 0, $C, $F8
  244. Obj05_Map_B9:   dc.b 0 
  245.         even
  246.  
  247. ; dynamic pattern loading cues
  248. ; Obj08_MapRUnc_1E074:
  249. Obj05_DPLC:
  250.         dc.w Obj05_DPLC_2C-Obj05_DPLC, Obj05_DPLC_2D-Obj05_DPLC
  251.         dc.w Obj05_DPLC_30-Obj05_DPLC, Obj05_DPLC_33-Obj05_DPLC
  252.         dc.w Obj05_DPLC_36-Obj05_DPLC, Obj05_DPLC_39-Obj05_DPLC
  253.         dc.w Obj05_DPLC_3C-Obj05_DPLC, Obj05_DPLC_3F-Obj05_DPLC
  254.         dc.w Obj05_DPLC_42-Obj05_DPLC, Obj05_DPLC_45-Obj05_DPLC
  255.         dc.w Obj05_DPLC_48-Obj05_DPLC, Obj05_DPLC_4B-Obj05_DPLC
  256.         dc.w Obj05_DPLC_4E-Obj05_DPLC, Obj05_DPLC_51-Obj05_DPLC
  257.         dc.w Obj05_DPLC_56-Obj05_DPLC, Obj05_DPLC_5B-Obj05_DPLC
  258.         dc.w Obj05_DPLC_60-Obj05_DPLC, Obj05_DPLC_65-Obj05_DPLC
  259.         dc.w Obj05_DPLC_66-Obj05_DPLC, Obj05_DPLC_67-Obj05_DPLC
  260.         dc.w Obj05_DPLC_68-Obj05_DPLC, Obj05_DPLC_69-Obj05_DPLC
  261. Obj05_DPLC_2C:  dc.b 0 
  262. Obj05_DPLC_2D:  dc.b 1, $70, 0 
  263. Obj05_DPLC_30:  dc.b 1, $F0, 8 
  264. Obj05_DPLC_33:  dc.b 1, $F0, $18   
  265. Obj05_DPLC_36:  dc.b 1, $F0, $28   
  266. Obj05_DPLC_39:  dc.b 1, $F0, $38   
  267. Obj05_DPLC_3C:  dc.b 1, $F0, $48   
  268. Obj05_DPLC_3F:  dc.b 1, $70, $58   
  269. Obj05_DPLC_42:  dc.b 1, $70, $60   
  270. Obj05_DPLC_45:  dc.b 1, $70, $68   
  271. Obj05_DPLC_48:  dc.b 1, $70, $70   
  272. Obj05_DPLC_4B:  dc.b 1, $70, $78   
  273. Obj05_DPLC_4E:  dc.b 1, $70, $80   
  274. Obj05_DPLC_51:  dc.b 2, $10, $88, $70, $8A 
  275. Obj05_DPLC_56:  dc.b 2, $30, $92, $70, $96 
  276. Obj05_DPLC_5B:  dc.b 2, $50, $9E, $70, $A4 
  277. Obj05_DPLC_60:  dc.b 2, $50, $AC, $70, $B2 
  278. Obj05_DPLC_65:  dc.b 0 
  279. Obj05_DPLC_66:  dc.b 0 
  280. Obj05_DPLC_67:  dc.b 0 
  281. Obj05_DPLC_68:  dc.b 0 
  282. Obj05_DPLC_69:  dc.b 1, $F0, $BA   
  283.         even
  284.  
  285. ; ===========================================================================
  286. ; END OF OBJECT CODE
  287. ; ===========================================================================
  288.  
  289. ; ===========================================================================
  290. ; To implement the skid dust, add the following code:
  291.         cmpi.b  #$C,($FFFFFE15).w
  292.         blo.s   closest_locret  ; if he's drowning, branch to not make dust
  293.         move.b  #6,($FFFFD1E4).w
  294.         move.b  #$15,($FFFFD1DA).w
  295. ; ...to the ends of loc_130BA and loc_13120, and replace closest_locret with... the closest locret.
  296. ; I also recommend you change your skidding animation to be 4 frames long, and to end by changing to the walking animation.
  297. ; Why? Fixes a funky-looking bug where the skid dust animation loops (even though it's not supposed to do that, sp00ky).
  298. ; ===========================================================================
  299. ; To activate spindash dust:
  300.         cmpi.b  #$C,($FFFFFE15).w   ; if he's drowning, branch to not make dust
  301.         blo.s   @skip_following_line
  302.         move.b  #1,($FFFFD1DC).w
  303. ; ...and to deactivate it:
  304.         move.b  #0,($FFFFD1DC).w
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement