Advertisement
vladikcomper

Sonic 3K - Starpost Object annotated

Jun 19th, 2012
286
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Obj_StarPost:
  2.  
  3.         moveq   #0,d0
  4.         move.b  5(a0),d0
  5.         move.w  off_2CFB6(pc,d0.w),d1
  6.         jmp off_2CFB6(pc,d1.w)
  7. ; ---------------------------------------------------------------------------
  8. off_2CFB6:  dc.w loc_2CFC0-off_2CFB6    ; $00
  9.  
  10.         dc.w loc_2D012-off_2CFB6    ; $02
  11.         dc.w loc_2D0F8-off_2CFB6    ; $04
  12.         dc.w loc_2D10A-off_2CFB6    ; $06
  13.         dc.w loc_2D47E-off_2CFB6    ; $08
  14. ; ---------------------------------------------------------------------------
  15.  
  16. loc_2CFC0:
  17.         addq.b  #2,5(a0)        ; => "loc_2D012"
  18.         move.l  #Map_StarPost,$C(a0)
  19.         move.w  #$5EC,$A(a0)
  20.         move.b  #4,4(a0)
  21.         move.b  #8,7(a0)
  22.         move.b  #$28,6(a0)
  23.         move.w  #$280,8(a0)
  24.         movea.w respawn_addr(a0),a2
  25.         btst    #0,(a2)
  26.         bne.s   loc_2D008
  27.         move.b  (Last_star_post_hit).w,d1
  28.         andi.b  #$7F,d1
  29.         move.b  $2C(a0),d2
  30.         andi.b  #$7F,d2
  31.         cmp.b   d2,d1
  32.         bcs.s   loc_2D012
  33.  
  34. loc_2D008:
  35.         bset    #0,(a2)
  36.         move.b  #2,$20(a0)
  37.  
  38. loc_2D012:
  39.  
  40.         tst.w   (Debug_placement_mode).w
  41.         bne.w   loc_2D0F8
  42.         lea (Player_1).w,a3
  43.         move.b  (Last_star_post_hit).w,d1
  44.         bsr.s   sub_2D028
  45.         bra.w   loc_2D0F8
  46.  
  47. ; =============== S U B R O U T I N E =======================================
  48.  
  49.  
  50. sub_2D028:
  51.         andi.b  #$7F,d1
  52.         move.b  $2C(a0),d2
  53.         andi.b  #$7F,d2
  54.         cmp.b   d2,d1
  55.         bcc.w   loc_2D0EA
  56.         move.w  $10(a3),d0
  57.         sub.w   $10(a0),d0
  58.         addi.w  #8,d0
  59.         cmpi.w  #$10,d0
  60.         bcc.w   locret_2D0E8
  61.         move.w  $14(a3),d0
  62.         sub.w   $14(a0),d0
  63.         addi.w  #$40,d0
  64.         cmpi.w  #$68,d0
  65.         bcc.w   locret_2D0E8
  66.         moveq   #$63,d0
  67.         jsr (Play_Sound_2).l
  68.         jsr (Create_New_Sprite).l
  69.         bne.s   loc_2D0D0
  70.         move.l  #Obj_StarPost,(a1)
  71.         move.b  #6,5(a1)        ; => "loc_2D10A"
  72.         move.w  $10(a0),$30(a1)
  73.         move.w  $14(a0),$32(a1)
  74.         subi.w  #$14,$32(a1)
  75.         move.l  $C(a0),$C(a1)
  76.         move.w  $A(a0),$A(a1)
  77.         move.b  #4,4(a1)
  78.         move.b  #8,7(a1)
  79.         move.b  #8,6(a1)
  80.         move.w  #$200,8(a1)
  81.         move.b  #2,$22(a1)
  82.         move.w  #$20,$36(a1)
  83.         move.w  a0,$3E(a1)
  84.         cmpi.w  #20,(Ring_count).w  ; do you have 20+ rings?
  85.         bcs.s   loc_2D0D0       ; if not, branch
  86.         bsr.w   sub_2D3C8       ; load stars
  87.  
  88. loc_2D0D0:
  89.  
  90.         move.b  #1,$20(a0)
  91.         bsr.w   sub_2D164       ; save level data
  92.         move.b  #4,5(a0)        ; => "loc_2D0F8"
  93.         movea.w respawn_addr(a0),a2
  94.         bset    #0,(a2)
  95.  
  96. locret_2D0E8:
  97.  
  98.         rts
  99. ; ---------------------------------------------------------------------------
  100.  
  101. loc_2D0EA:
  102.         tst.b   $20(a0)
  103.         bne.s   locret_2D0F6
  104.         move.b  #2,$20(a0)
  105.  
  106. locret_2D0F6:
  107.         rts
  108. ; End of function sub_2D028
  109.  
  110. ; ---------------------------------------------------------------------------
  111.  
  112. loc_2D0F8:
  113.  
  114.  
  115.         lea (Ani_Starpost).l,a1
  116.         jsr (Animate_Sprite).l
  117.         jmp (Sprite_OnScreen_Test).l
  118. ; ---------------------------------------------------------------------------
  119.  
  120. loc_2D10A:
  121.         subq.w  #1,$36(a0)
  122.         bpl.s   loc_2D12E
  123.         movea.w $3E(a0),a1
  124.         cmpi.l  #Obj_StarPost,(a1)
  125.         bne.s   loc_2D128
  126.         move.b  #2,$20(a1)
  127.         move.b  #0,$22(a1)
  128.  
  129. loc_2D128:
  130.         jmp (Delete_Current_Sprite).l
  131. ; ---------------------------------------------------------------------------
  132.  
  133. loc_2D12E:
  134.         move.b  $26(a0),d0
  135.         subi.b  #$10,$26(a0)
  136.         subi.b  #$40,d0
  137.         jsr (GetSineCosine).l
  138.         muls.w  #$C00,d1
  139.         swap    d1
  140.         add.w   $30(a0),d1
  141.         move.w  d1,$10(a0)
  142.         muls.w  #$C00,d0
  143.         swap    d0
  144.  
  145.         add.w   $32(a0),d0
  146.         move.w  d0,$14(a0)
  147.         jmp (Sprite_OnScreen_Test).l
  148.  
  149. ; =============== S U B R O U T I N E =======================================
  150.  
  151.  
  152. sub_2D164:
  153.         move.b  $2C(a0),(Last_star_post_hit).w
  154.         move.w  $10(a0),(Saved_X_pos).w
  155.         move.w  $14(a0),(Saved_Y_pos).w
  156. ; End of function sub_2D164
  157.  
  158.  
  159. ; =============== S U B R O U T I N E =======================================
  160.  
  161.  
  162. Save_Level_Data:
  163.  
  164.         move.b  (Last_star_post_hit).w,(Saved_last_star_post_hit).w
  165.         move.w  (Current_zone_and_act).w,(Saved_zone_and_act).w
  166.         move.w  (Apparent_zone_and_act).w,(Saved_apparent_zone_and_act).w
  167.         move.w  ($FFFFB00A).w,(Saved_art_tile).w
  168.         move.w  ($FFFFB046).w,(Saved_solid_bits).w
  169.         move.w  (Ring_count).w,(Saved_ring_count).w
  170.         move.b  (Extra_life_flags).w,(Saved_extra_life_flags).w
  171.         move.l  (Timer).w,(Saved_timer).w
  172.         move.b  (Dynamic_resize_routine).w,(Saved_dynamic_resize_routine).w
  173.         move.w  (Camera_max_Y_pos).w,(Saved_camera_max_Y_pos).w
  174.         move.w  (Camera_X_pos).w,(Saved_camera_X_pos).w
  175.         move.w  (Camera_Y_pos).w,(Saved_camera_Y_pos).w
  176.         move.w  (Mean_water_level).w,(Saved_mean_water_level).w
  177.         move.b  (Water_full_screen_flag).w,(Saved_water_full_screen_flag).w
  178.         rts
  179. ; End of function Save_Level_Data
  180.  
  181.  
  182. ; =============== S U B R O U T I N E =======================================
  183.  
  184.  
  185. Save_Level_Data2:
  186.         move.b  (Last_star_post_hit).w,(Saved2_last_star_post_hit).w
  187.         move.w  (Current_zone_and_act).w,(Saved2_zone_and_act).w
  188.         move.w  (Apparent_zone_and_act).w,(Saved2_apparent_zone_and_act).w
  189.         move.w  $10(a0),(Saved2_X_pos).w
  190.         move.w  $14(a0),(Saved2_Y_pos).w
  191.         move.w  ($FFFFB00A).w,(Saved2_art_tile).w
  192.         move.w  ($FFFFB046).w,(Saved2_solid_bits).w
  193.         move.w  (Ring_count).w,(Saved2_ring_count).w
  194.         move.b  (Extra_life_flags).w,(Saved2_extra_life_flags).w
  195.         move.l  (Timer).w,(Saved2_timer).w
  196.         move.b  (Dynamic_resize_routine).w,(Saved2_dynamic_resize_routine).w
  197.         move.w  (Camera_max_Y_pos).w,(Saved2_camera_max_Y_pos).w
  198.         move.w  (Camera_X_pos).w,(Saved2_camera_X_pos).w
  199.         move.w  (Camera_Y_pos).w,(Saved2_camera_Y_pos).w
  200.         move.w  (Mean_water_level).w,(Saved2_mean_water_level).w
  201.         move.b  (Water_full_screen_flag).w,(Saved2_water_full_screen_flag).w
  202.         move.b  ($FFFFB02B).w,(Saved2_status_secondary).w
  203.         rts
  204. ; End of function Save_Level_Data2
  205.  
  206.  
  207. ; =============== S U B R O U T I N E =======================================
  208.  
  209.  
  210. Load_Starpost_Settings:
  211.         tst.b   (Special_bonus_entry_flag).w
  212.         bne.w   loc_2D2C2
  213.         move.b  (Saved_last_star_post_hit).w,(Last_star_post_hit).w
  214.         move.w  (Saved_zone_and_act).w,(Current_zone_and_act).w
  215.         move.w  (Saved_apparent_zone_and_act).w,(Apparent_zone_and_act).w
  216.         move.w  (Saved_X_pos).w,($FFFFB010).w
  217.         move.w  (Saved_Y_pos).w,($FFFFB014).w
  218.         move.w  (Saved_ring_count).w,(Ring_count).w
  219.         move.b  (Saved_extra_life_flags).w,(Extra_life_flags).w
  220.         tst.b   ($FFFFFF97).w
  221.         bne.s   loc_2D274
  222.         clr.w   (Ring_count).w
  223.         clr.b   (Extra_life_flags).w
  224.  
  225. loc_2D274:
  226.         move.l  (Saved_timer).w,(Timer).w
  227.         move.b  #$3B,(Timer_frame).w
  228.         subq.b  #1,(Timer_second).w
  229.         move.w  (Saved_art_tile).w,($FFFFB00A).w
  230.         move.w  (Saved_solid_bits).w,($FFFFB046).w
  231.         move.b  (Saved_dynamic_resize_routine).w,(Dynamic_resize_routine).w
  232.         move.w  (Saved_camera_max_Y_pos).w,(Camera_max_Y_pos).w
  233.         move.w  (Saved_camera_max_Y_pos).w,(Camera_target_max_Y_pos).w
  234.         move.w  (Saved_camera_X_pos).w,(Camera_X_pos).w
  235.         move.w  (Saved_camera_Y_pos).w,(Camera_Y_pos).w
  236.         tst.b   (Water_flag).w
  237.         beq.s   locret_2D2C0
  238.         move.w  (Saved_mean_water_level).w,(Mean_water_level).w
  239.         move.b  (Saved_water_full_screen_flag).w,(Water_full_screen_flag).w
  240.  
  241. locret_2D2C0:
  242.         rts
  243. ; ---------------------------------------------------------------------------
  244.  
  245. loc_2D2C2:
  246.         clr.b   (Special_bonus_entry_flag).w
  247.         move.w  (Saved2_zone_and_act).w,(Current_zone_and_act).w
  248.         move.w  (Saved2_apparent_zone_and_act).w,(Apparent_zone_and_act).w
  249.         move.w  (Saved2_X_pos).w,($FFFFB010).w
  250.         move.w  (Saved2_Y_pos).w,($FFFFB014).w
  251.         move.w  (Saved2_ring_count).w,(Ring_count).w
  252.         move.b  (Saved2_extra_life_flags).w,(Extra_life_flags).w
  253.         move.l  (Saved2_timer).w,(Timer).w
  254.         move.b  #$3B,(Timer_frame).w
  255.         subq.b  #1,(Timer_second).w
  256.         move.w  (Saved2_art_tile).w,($FFFFB00A).w
  257.         move.w  (Saved2_solid_bits).w,($FFFFB046).w
  258.         move.b  (Saved2_dynamic_resize_routine).w,(Dynamic_resize_routine).w
  259.         move.w  (Saved2_camera_max_Y_pos).w,(Camera_max_Y_pos).w
  260.         move.w  (Saved2_camera_max_Y_pos).w,(Camera_target_max_Y_pos).w
  261.         move.w  (Saved2_camera_X_pos).w,(Camera_X_pos).w
  262.         move.w  (Saved2_camera_Y_pos).w,(Camera_Y_pos).w
  263.         tst.b   (Water_flag).w
  264.         beq.s   locret_2D336
  265.         move.w  (Saved2_mean_water_level).w,(Mean_water_level).w
  266.         move.b  (Saved2_water_full_screen_flag).w,(Water_full_screen_flag).w
  267.  
  268. locret_2D336:
  269.         rts
  270. ; End of function Load_Starpost_Settings
  271.  
  272. ; ---------------------------------------------------------------------------
  273. Ani_Starpost:   include "General\Sprites\Starpost\Anim - Starpost.asm"
  274.  
  275. Map_StarPost:   include "General\Sprites\Starpost\Map - Starpost.asm"
  276.  
  277. Map_StarpostStars:  include "General\Sprites\Starpost\Map - Starpost Stars.asm"
  278.  
  279. ; =============== S U B R O U T I N E =======================================
  280.  
  281. ; Load Stars
  282. sub_2D3C8:
  283.         moveq   #3,d1           ; do 4 objects
  284.         moveq   #0,d2
  285.  
  286. loc_2D3CC:
  287.         jsr (Create_New_Sprite).l
  288.         bne.s   loc_2D436
  289.         move.l  (a0),(a1)
  290.         move.l  #Map_StarpostStars,$C(a1)
  291.         move.w  #$5EC,$A(a1)
  292.         move.b  #4,4(a1)
  293.         move.b  #8,5(a1)
  294.         move.w  $10(a0),d0
  295.         move.w  d0,$10(a1)
  296.         move.w  d0,$30(a1)
  297.         move.w  $14(a0),d0
  298.         subi.w  #$30,d0
  299.         move.w  d0,$14(a1)
  300.         move.w  d0,$32(a1)
  301.         move.w  8(a0),8(a1)
  302.         move.b  #8,7(a1)
  303.         move.b  #1,$22(a1)
  304.         move.w  #-$400,$18(a1)
  305.         move.w  #0,$1A(a1)
  306.         move.w  d2,$34(a1)
  307.         addi.w  #$40,d2
  308.         dbf d1,loc_2D3CC
  309.  
  310. loc_2D436:
  311.         lea (ArtKosM_StarPostStars3).l,a1   ; == STARS ART, TYPE 1 ==
  312.         move.w  (Ring_count).w,d0   ; d0 = Rings
  313.         subi.w  #20,d0          ; d0 = Rings - 20
  314.         divu.w  #15,d0          ; d0 = (Rings - 20) / 15
  315.         ext.l   d0
  316.         moveq   #2,d2
  317.         tst.w   (SK_alone_flag).w
  318.         bne.s   loc_2D454       ; if game is SK, branch
  319.         moveq   #3,d2
  320.  
  321. loc_2D454:
  322.         divu.w  d2,d0           ; also divide d0 by 2 for SK, or by 3 for S3K
  323.         swap    d0          ; get remainder
  324.         tst.w   d0
  325.         beq.s   loc_2D474       ; if remainder is zero, branch
  326.         lea (ArtKosM_StarPost_Stars1).l,a1  ; == STARS ART, TYPE 2 ==
  327.         cmpi.w  #1,d0
  328.         beq.s   loc_2D474
  329.         tst.w   (SK_alone_flag).w
  330.         bne.s   loc_2D474       ; if game is SK, branch
  331.         lea (ArtKosM_StarPostStars2).l,a1   ; == STARS ART, TYPE 3 ==
  332.  
  333. loc_2D474:
  334.  
  335.         move.w  #-$4280,d2      ; VRAM position for art
  336.         jmp (Queue_Kos_Module).l    ; decompress art
  337. ; End of function sub_2D3C8
  338.  
  339. ; ===========================================================================
  340. ; ---------------------------------------------------------------------------
  341. ; Starpost Stars
  342. ; ---------------------------------------------------------------------------
  343.  
  344. loc_2D47E:
  345.         move.b  $29(a0),d0      ; has Sonic touched stars?
  346.         beq.w   loc_2D50A       ; if not, goto stars processing code
  347.         andi.b  #1,d0
  348.         beq.s   loc_2D506
  349.         move.b  #2,(Special_bonus_entry_flag).w
  350.         move.w  #$1500,d1       ; == SPECIAL STAGE, TYPE 1 ==
  351.         move.w  (Saved_ring_count).w,d0 ; d0 = Rings
  352.         subi.w  #$14,d0         ; d0 = Rings - 20
  353.         divu.w  #$F,d0          ; d0 = (Rings - 20) / 15
  354.         ext.l   d0
  355.         moveq   #2,d2
  356.         tst.w   (SK_alone_flag).w
  357.         bne.s   loc_2D4AE       ; if game is SK, branch
  358.         moveq   #3,d2
  359.  
  360. loc_2D4AE:
  361.         divu.w  d2,d0           ; also divide d0 by 2 for SK, or by 3 for S3K
  362.         swap    d0          ; get remainder
  363.         tst.w   d0
  364.         beq.s   loc_2D4CA       ; if remainder is zero, branch
  365.         move.w  #$1400,d1       ; == SPECIAL STAGE, TYPE 2 ==
  366.         cmpi.w  #1,d0
  367.         beq.s   loc_2D4CA
  368.         tst.w   (SK_alone_flag).w
  369.         bne.s   loc_2D4CA       ; if game is SK, branch
  370.         move.w  #$1300,d1       ; == SPECIAL STAGE, TYPE 3 ==
  371.  
  372. loc_2D4CA:
  373.  
  374.         move.w  d1,(Current_zone_and_act).w ; setup new game mode
  375.         move.w  d1,(Apparent_zone_and_act).w
  376.         move.w  (Ring_count).w,(Saved_ring_count).w
  377.         move.b  (Extra_life_flags).w,(Saved_extra_life_flags).w
  378.         move.b  #0,(Last_star_post_hit).w
  379.         move.b  #1,(Restart_level_flag).w   ; quit from the level
  380.         move.b  ($FFFFB02B).w,d0
  381.         andi.b  #$71,d0
  382.         move.b  d0,(Saved2_status_secondary).w
  383.         move.b  d0,(Saved_status_secondary).w
  384.         move.b  #1,($FFFFFF97).w
  385.         jsr (Clear_SpriteRingMem).l
  386.  
  387. loc_2D506:
  388.         clr.b   $29(a0)         ; clear collision flag
  389.  
  390. ; Stars processing code    
  391.  
  392. loc_2D50A:
  393.         addi.w  #$A,$34(a0)
  394.         move.w  $34(a0),d0
  395.         andi.w  #$FF,d0
  396.         jsr (GetSineCosine).l
  397.         asr.w   #5,d0
  398.         asr.w   #3,d1
  399.         move.w  d1,d3
  400.         move.w  $34(a0),d2
  401.         andi.w  #$3E0,d2
  402.         lsr.w   #5,d2
  403.         moveq   #2,d5
  404.         moveq   #0,d4
  405.         cmpi.w  #$10,d2
  406.         ble.s   loc_2D53A
  407.         neg.w   d1
  408.  
  409. loc_2D53A:
  410.         andi.w  #$F,d2
  411.         cmpi.w  #8,d2
  412.         ble.s   loc_2D54A
  413.         neg.w   d2
  414.         andi.w  #7,d2
  415.  
  416. loc_2D54A:
  417.  
  418.         lsr.w   #1,d2
  419.         beq.s   loc_2D550
  420.         add.w   d1,d4
  421.  
  422. loc_2D550:
  423.         asl.w   #1,d1
  424.         dbf d5,loc_2D54A
  425.         asr.w   #4,d4
  426.         add.w   d4,d0
  427.         addq.w  #1,$36(a0)
  428.         move.w  $36(a0),d1
  429.         cmpi.w  #$80,d1
  430.         beq.s   loc_2D574
  431.         bgt.s   loc_2D57A
  432.  
  433. loc_2D56A:
  434.         muls.w  d1,d0
  435.         muls.w  d1,d3
  436.         asr.w   #7,d0
  437.         asr.w   #7,d3
  438.         bra.s   loc_2D58C
  439. ; ---------------------------------------------------------------------------
  440.  
  441. loc_2D574:
  442.         move.b  #-$28,$28(a0)
  443.  
  444. loc_2D57A:
  445.         cmpi.w  #$180,d1
  446.         ble.s   loc_2D58C
  447.         neg.w   d1
  448.         addi.w  #$200,d1
  449.         bmi.w   loc_2D5C0
  450.         bra.s   loc_2D56A
  451. ; ---------------------------------------------------------------------------
  452.  
  453. loc_2D58C:
  454.  
  455.         move.w  $30(a0),d2
  456.         add.w   d3,d2
  457.         move.w  d2,$10(a0)
  458.         move.w  $32(a0),d2
  459.         add.w   d0,d2
  460.         move.w  d2,$14(a0)
  461.         addq.b  #1,$23(a0)
  462.         move.b  $23(a0),d0
  463.         andi.w  #6,d0
  464.         lsr.w   #1,d0
  465.         cmpi.b  #3,d0
  466.         bne.s   loc_2D5B6
  467.         moveq   #1,d0
  468.  
  469. loc_2D5B6:
  470.         move.b  d0,$22(a0)
  471.         jmp (loc_1B662).l
  472. ; ---------------------------------------------------------------------------
  473.  
  474. loc_2D5C0:
  475.         jmp (Delete_Current_Sprite).l
  476. ; ---------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement