Advertisement
TheBlad768

S3K Boss (DEZ) Update 2

Nov 17th, 2018
517
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; ---------------------------------------------------------------------------
  2. ; Босс-смертельный шар
  3. ; ---------------------------------------------------------------------------
  4.  
  5. ; Hits
  6. BossRobot_Hits  = 8
  7.  
  8. ; Attributes
  9. _Setup1         = 2
  10. _Setup2         = 4
  11. _Setup3         = 6
  12.  
  13. ; Animates
  14. setOpen         = 1
  15. setClose            = 2
  16.  
  17. ; =============== S U B R O U T I N E =======================================
  18.  
  19. Obj_BossRobot:
  20.         moveq   #0,d0
  21.         move.b  routine(a0),d0
  22.         move.w  BossRobot_Index(pc,d0.w),d0
  23.         jsr BossRobot_Index(pc,d0.w)
  24.         bsr.w   BossRobot_CheckTouch
  25.         lea Ani_BossRobot(pc),a1
  26.         jsr (Animate_Sprite).l
  27.         jmp (Draw_And_Touch_Sprite).l
  28. ; ---------------------------------------------------------------------------
  29.  
  30. BossRobot_Index: offsetTable
  31.         offsetTableEntry.w BossRobot_Init       ; 0
  32.         offsetTableEntry.w BossRobot_Setup      ; 2
  33.         offsetTableEntry.w BossRobot_Setup2 ; 4
  34. ; ---------------------------------------------------------------------------
  35.  
  36. BossRobot_Init:
  37.         lea ObjDat3_BossRobot(pc),a1
  38.         jsr (SetUp_ObjAttributes).l
  39.         st  collision_property(a0)
  40.         st  (Boss_flag).w
  41.         move.b  #36,y_radius(a0)
  42.         move.l  #BossRobot_Robotnik_Intro,$34(a0)
  43.         jmp (Swing_Setup1).l
  44. ; ---------------------------------------------------------------------------
  45.  
  46. BossRobot_Setup2:
  47.         move.w  (Player_1+x_pos).w,d0
  48.         sub.w   x_pos(a0),d0
  49.         asl.w   #4,d0
  50.         move.w  d0,x_vel(a0)
  51.  
  52. BossRobot_Setup:
  53.         jsr (Swing_UpAndDown).l
  54.         jsr (MoveSprite2).l
  55.         jmp (Obj_Wait).l
  56.  
  57. ; =============== S U B R O U T I N E =======================================
  58.  
  59. BossRobot_Robotnik_Intro:
  60.         bset    #3,$38(a0)
  61.         move.l  #BossRobot_Robotnik_Intro_Return,$34(a0)
  62.         lea ChildObjDat_Robotnik_Intro(pc),a2
  63.         jmp (CreateChild6_Simple).l
  64. ; ---------------------------------------------------------------------------
  65.  
  66. BossRobot_Robotnik_Intro_FindRobotnik_Start:
  67.         sfx sfx_Boom,0,0,0
  68.         movea.w $44(a0),a1
  69.         move.b  #_Setup1,routine(a1)
  70.         move.w  #$F,$2E(a0)
  71.         move.l  #BossRobot_Robotnik_Intro_FindRobotnik,$34(a0)
  72.         sf  (Screen_Shaking_Flag).w
  73.         rts
  74. ; ---------------------------------------------------------------------------
  75.  
  76. BossRobot_Robotnik_Intro_FindRobotnik:
  77.         movea.w $44(a0),a1
  78.         move.w  x_pos(a1),d0
  79.         sub.w   x_pos(a0),d0
  80.         subq.w  #8,d0
  81.         bne.s   +
  82.         move.l  #BossRobot_Robotnik_Intro_Return,$34(a0)
  83. +       asl.w   #4,d0
  84.         move.w  d0,x_vel(a0)
  85.  
  86. BossRobot_Robotnik_Intro_Return:
  87.         rts
  88.  
  89. ; =============== S U B R O U T I N E =======================================
  90.  
  91. BossRobot_Startup:
  92.         andi.b  #-$D,$38(a0)
  93.         move.b  #BossRobot_Hits,collision_property(a0)
  94.         move.w  #$4F,$2E(a0)
  95.         sf  (Ctrl_1_locked).w
  96.         jsr (Restore_PlayerControl).l
  97.         lea ChildObjDat_BossRobot_CreateShield_Process(pc),a2
  98.         jsr (CreateChild6_Simple).l
  99.         move.l  BossRobot_Movement(pc),d0
  100.         bra.s   BossRobot_SetSubroutine
  101. ; ---------------------------------------------------------------------------
  102.  
  103. BossRobot_CheckSubroutine:
  104.         lea BossRobot_Movement(pc),a1
  105.         cmpi.b  #(BossRobot_Hits/2)+1,collision_property(a0)
  106.         bhs.s   +
  107.         lea BossRobot_Movement2(pc),a1
  108. +       jsr (Random_Number).l
  109.         andi.w  #%1100,d0
  110.         move.l  (a1,d0.w),d0
  111.         cmp.l   $30(a0),d0
  112.         beq.s   BossRobot_Startup_Return
  113.  
  114. BossRobot_SetSubroutine:
  115.         move.l  d0,$30(a0)
  116.         move.l  d0,$34(a0)
  117.         move.b  #_Setup1,routine(a0)
  118.         clr.w   x_vel(a0)
  119.         clearRAM3 Pos_objtable_Start, Pos_objtable_End
  120.  
  121. BossRobot_Startup_Return:
  122.         rts
  123. ; ---------------------------------------------------------------------------
  124.  
  125. BossRobot_Movement:
  126.         dc.l BossRobot_MoveFallingBall_Start        ; 0
  127.         dc.l BossRobot_MoveCircularChaseBall_Start  ; 1
  128.         dc.l BossRobot_MoveRepulsionBall_Start      ; 2
  129.         dc.l BossRobot_MoveShootingBall_Start       ; 3
  130. BossRobot_Movement2:
  131.         dc.l BossRobot_MoveFallingWaitBall_Start    ; 0
  132.         dc.l BossRobot_MoveRepulsionBall_Start      ; 1
  133.         dc.l BossRobot_MoveMultiplyingBall_Start    ; 2
  134.         dc.l BossRobot_MoveSwingBall_Start      ; 3
  135. ; ---------------------------------------------------------------------------
  136. ; Босс атакует с помощью падающего шара
  137. ; ---------------------------------------------------------------------------
  138.  
  139. ; =============== S U B R O U T I N E =======================================
  140.  
  141. BossRobot_MoveFallingBall_Start:
  142.         move.b  #8,$39(a0)
  143.  
  144. BossRobot_MoveFallingBall_FindSonic:
  145.         move.b  #_Setup2,routine(a0)
  146.         move.w  #$1F,$2E(a0)
  147.         move.l  #BossRobot_MoveFallingBall_Attack,$34(a0)
  148.         moveq   #sfx_Boom,d0
  149.         jmp (Play_Sound_2).l
  150. ; ---------------------------------------------------------------------------
  151.  
  152. BossRobot_MoveFallingBall_Attack:
  153.         move.b  #_Setup1,routine(a0)
  154.         clr.w   x_vel(a0)
  155.         move.w  #$1F,$2E(a0)
  156.         move.l  #BossRobot_MoveFallingBall_FindSonic,$34(a0)
  157.         subq.b  #1,$39(a0)
  158.         bne.s   +
  159.         move.l  #BossRobot_CheckSubroutine,$34(a0)
  160. +       lea ChildObjDat_FallingBall(pc),a2
  161.         jmp (CreateChild6_Simple).l
  162. ; ---------------------------------------------------------------------------
  163. ; Босс атакует с помощью циркулирующих шаров
  164. ; ---------------------------------------------------------------------------
  165.  
  166. ; =============== S U B R O U T I N E =======================================
  167.  
  168. BossRobot_MoveCircularChaseBall_Start:
  169.         move.l  #BossRobot_MoveCircularChaseBall_CheckPosition,$34(a0)
  170.         sfx sfx_Boom,0,0,0
  171.  
  172. BossRobot_MoveCircularChaseBall_CheckPosition:
  173.         move.w  (Camera_X_pos).w,d0
  174.         addi.w  #$A0,d0
  175.         sub.w   x_pos(a0),d0
  176.         bne.s   +
  177.         move.l  #BossRobot_MoveCircularChaseBall_Create,$34(a0)
  178. +       asl.w   #4,d0
  179.         move.w  d0,x_vel(a0)
  180.  
  181. BossRobot_MoveCircularChaseBall_Wait:
  182.         rts
  183. ; ---------------------------------------------------------------------------
  184.  
  185. BossRobot_MoveCircularChaseBall_Create:
  186.         move.l  #BossRobot_MoveCircularChaseBall_Wait,$34(a0)
  187.         lea ChildObjDat_CircularBall(pc),a2
  188.         jmp (CreateChild6_Simple).l
  189. ; ---------------------------------------------------------------------------
  190.  
  191. BossRobot_MoveCircularChaseBall_SetMove:
  192.         move.l  #BossRobot_MoveCircularChaseBall_Move,$34(a0)
  193.         jsr (Random_Number).l
  194.         move.w  #$80,x_vel(a0)
  195.         andi.w  #1,d0
  196.         bne.s   BossRobot_MoveCircularChaseBall_Move
  197.         neg.w   x_vel(a0)
  198.  
  199. BossRobot_MoveCircularChaseBall_Move:
  200.         move.w  (Camera_X_pos).w,d0
  201.         tst.w   x_vel(a0)
  202.         bpl.s   +
  203.         addi.w  #$40,d0         ; Проверить левую сторону
  204.         cmp.w   x_pos(a0),d0
  205.         bhs.s   ++
  206.         bra.s   +++
  207. +       addi.w  #$100,d0        ; Проверить правую сторону
  208.         cmp.w   x_pos(a0),d0
  209.         bhs.s   ++
  210. +       neg.w   x_vel(a0)
  211. +       rts
  212. ; ---------------------------------------------------------------------------
  213. ; Босс атакует с помощью отталкивающихся шаров
  214. ; ---------------------------------------------------------------------------
  215.  
  216. ; =============== S U B R O U T I N E =======================================
  217.  
  218. BossRobot_MoveRepulsionBall_Start:
  219.         move.l  #BossRobot_MoveRepulsionBall_CheckPosition,$34(a0)
  220.         sfx sfx_Boom,0,0,0
  221.         jsr (Random_Number).l
  222.         andi.w  #6,d0
  223.         move.w  d0,$3C(a0)
  224.         move.w  BossRobot_SetPos(pc,d0.w),$3A(a0)
  225.  
  226. BossRobot_MoveRepulsionBall_CheckPosition:
  227.         move.w  (Camera_X_pos).w,d0
  228.         add.w   $3A(a0),d0
  229.         sub.w   x_pos(a0),d0
  230.         bne.s   +
  231.         move.l  #BossRobot_MoveRepulsionBall_Create,$34(a0)
  232. +       asl.w   #4,d0
  233.         move.w  d0,x_vel(a0)
  234.  
  235. BossRobot_MoveRepulsionBall_Wait:
  236.         rts
  237. ; ---------------------------------------------------------------------------
  238.  
  239. BossRobot_SetPos:
  240.         dc.w $40        ; Левая сторона
  241.         dc.w $A0    ; Середина
  242.         dc.w $100   ; Правая сторона
  243.         dc.w $A0    ; Середина
  244. BossRobot_SetPos2:
  245.         dc.w -$40   ; Левая сторона
  246.         dc.w -$40   ; Середина
  247.         dc.w $180   ; Правая сторона
  248.         dc.w $180   ; Середина
  249. BossRobot_SetPos3:
  250.         dc.w $40        ; Левая сторона
  251.         dc.w $40        ; Середина
  252.         dc.w $100   ; Правая сторона
  253.         dc.w $100   ; Середина
  254. ; ---------------------------------------------------------------------------
  255.  
  256. BossRobot_MoveRepulsionBall_Create:
  257.         move.w  #$3F,$2E(a0)
  258.         move.l  #BossRobot_MoveRepulsionBall_SetHidePosition,$34(a0)
  259.         lea ChildObjDat_RepulsionBall(pc),a2
  260.         jmp (CreateChild6_Simple).l
  261. ; ---------------------------------------------------------------------------
  262.  
  263. BossRobot_MoveRepulsionBall_SetHidePosition:
  264.         andi.b  #-$D,$38(a0)
  265.         move.b  #setClose,anim(a0)
  266.         sfx sfx_Boom,0,0,0
  267.         move.l  #BossRobot_MoveRepulsionBall_HidePosition,$34(a0)
  268.         move.w  $3C(a0),d0
  269.         move.w  BossRobot_SetPos2(pc,d0.w),$3A(a0)
  270.  
  271. BossRobot_MoveRepulsionBall_HidePosition:
  272.         move.w  (Camera_X_pos).w,d0
  273.         add.w   $3A(a0),d0
  274.         sub.w   x_pos(a0),d0
  275.         bne.s   +
  276.         move.l  #BossRobot_MoveRepulsionBall_Wait,$34(a0)
  277. +       asl.w   #4,d0
  278.         move.w  d0,x_vel(a0)
  279.         rts
  280. ; ---------------------------------------------------------------------------
  281.  
  282. BossRobot_MoveRepulsionBall_SetReturnPosition:
  283.         sfx sfx_Boom,0,0,0
  284.         move.l  #BossRobot_MoveRepulsionBall_ReturnPosition,$34(a0)
  285.         move.w  $3C(a0),d0
  286.         move.w  BossRobot_SetPos3(pc,d0.w),$3A(a0)
  287.  
  288. BossRobot_MoveRepulsionBall_ReturnPosition:
  289.         move.w  (Camera_X_pos).w,d0
  290.         add.w   $3A(a0),d0
  291.         sub.w   x_pos(a0),d0
  292.         bne.s   +
  293.         move.l  #BossRobot_CheckSubroutine,$34(a0)
  294. +       asl.w   #4,d0
  295.         move.w  d0,x_vel(a0)
  296.         rts
  297. ; ---------------------------------------------------------------------------
  298. ; Босс атакует с помощью циркулирующих шаров
  299. ; ---------------------------------------------------------------------------
  300.  
  301. ; =============== S U B R O U T I N E =======================================
  302.  
  303. BossRobot_MoveShootingBall_Start:
  304.         move.w  (Camera_X_pos).w,d0
  305.         addi.w  #$A0,d0
  306.         move.w  #$40,$3A(a0)
  307.         sub.w   x_pos(a0),d0
  308.         bgt.s   +
  309.         move.w  #$100,$3A(a0)
  310. +       move.l  #BossRobot_MoveShootingBall_CheckPosition,$34(a0)
  311.         sfx sfx_Boom,0,0,0
  312.  
  313. BossRobot_MoveShootingBall_CheckPosition:
  314.         move.w  (Camera_X_pos).w,d0
  315.         add.w   $3A(a0),d0
  316.         sub.w   x_pos(a0),d0
  317.         bne.s   +
  318.         move.l  #BossRobot_MoveShootingBall_Create,$34(a0)
  319. +       asl.w   #4,d0
  320.         move.w  d0,x_vel(a0)
  321.         rts
  322. ; ---------------------------------------------------------------------------
  323.  
  324. BossRobot_MoveShootingBall_Create:
  325.         move.w  $3A(a0),d0
  326.         move.w  #-$40,d1
  327.         cmpi.w  #$100,d0
  328.         bne.s   +
  329.         move.w  #$180,d1
  330. +       move.w  d1,$3A(a0)
  331.         move.w  #$6F,$2E(a0)
  332.         move.l  #BossRobot_MoveShootingBall_HidePosition,$34(a0)
  333.         lea ChildObjDat_ShootingBall(pc),a2
  334.         jmp (CreateChild6_Simple).l
  335. ; ---------------------------------------------------------------------------
  336.  
  337. BossRobot_MoveShootingBall_HidePosition:
  338.         move.w  (Camera_X_pos).w,d0
  339.         add.w   $3A(a0),d0
  340.         sub.w   x_pos(a0),d0
  341.         bne.s   +
  342.         move.l  #BossRobot_MoveShootingBall_Wait,$34(a0)
  343. +       asl.w   #4,d0
  344.         move.w  d0,x_vel(a0)
  345.  
  346. BossRobot_MoveShootingBall_Wait:
  347.         rts
  348. ; ---------------------------------------------------------------------------
  349.  
  350. BossRobot_MoveShootingBall_SetReturnPosition:
  351.         sfx sfx_Boom,0,0,0
  352.         move.l  #BossRobot_MoveRepulsionBall_ReturnPosition,$34(a0)
  353.         move.w  $3A(a0),d0
  354.         move.w  #$40,d1
  355.         cmpi.w  #$180,d0
  356.         bne.s   +
  357.         move.w  #$100,d1
  358. +       move.w  d1,$3A(a0)
  359.         rts
  360. ; ---------------------------------------------------------------------------
  361. ; Выстрел кучей падающих шаров
  362. ; ---------------------------------------------------------------------------
  363.  
  364. ; =============== S U B R O U T I N E =======================================
  365.  
  366. BossRobot_MoveFallingWaitBall_Start:
  367.         move.w  (Camera_X_pos).w,d0
  368.         addi.w  #$A0,d0
  369.         move.w  #$40,$3A(a0)
  370.         sub.w   x_pos(a0),d0
  371.         bgt.s   +
  372.         move.w  #$100,$3A(a0)
  373. +       move.l  #BossRobot_MoveFallingWaitBall_CheckPosition,$34(a0)
  374.         sfx sfx_Boom,0,0,0
  375.  
  376. BossRobot_MoveFallingWaitBall_CheckPosition:
  377.         move.w  (Camera_X_pos).w,d0
  378.         add.w   $3A(a0),d0
  379.         sub.w   x_pos(a0),d0
  380.         bne.s   +
  381.         move.w  #$DF,$2E(a0)
  382.         bset    #3,$38(a0)
  383.         move.b  #setOpen,anim(a0)
  384.         lea ChildObjDat_FallingWaitBall_Intro(pc),a2
  385.         jsr (CreateChild6_Simple).l
  386.         move.l  #BossRobot_MoveFallingWaitBall_SetHidePosition,$34(a0)
  387. +       asl.w   #4,d0
  388.         move.w  d0,x_vel(a0)
  389.         rts
  390. ; ---------------------------------------------------------------------------
  391.  
  392. BossRobot_MoveFallingWaitBall_SetHidePosition:
  393.         move.w  (Camera_X_pos).w,d0
  394.         addi.w  #$A0,d0
  395.         move.w  #-$40,$3A(a0)
  396.         sub.w   x_pos(a0),d0
  397.         bgt.s   +
  398.         move.w  #$180,$3A(a0)
  399. +       andi.b  #-$D,$38(a0)
  400.         move.b  #setClose,anim(a0)
  401.         move.l  #BossRobot_MoveFallingWaitBall_CheckHidePosition,$34(a0)
  402.         sfx sfx_Boom,0,0,0
  403.  
  404. BossRobot_MoveFallingWaitBall_CheckHidePosition:
  405.         move.w  (Camera_X_pos).w,d0
  406.         add.w   $3A(a0),d0
  407.         sub.w   x_pos(a0),d0
  408.         bne.s   +
  409.         move.b  #3,$39(a0)
  410.         move.w  #$F,$2E(a0)
  411.         move.l  #BossRobot_MoveFallingWaitBall_Create,$34(a0)
  412. +       asl.w   #4,d0
  413.         move.w  d0,x_vel(a0)
  414.         rts
  415. ; ---------------------------------------------------------------------------
  416.  
  417. BossRobot_MoveFallingWaitBall_Create:
  418.         move.w  #$EF,$2E(a0)
  419.         bsr.s   BossRobot_MoveFallingWaitBall_CreateBallAim
  420.         subq.b  #1,$39(a0)
  421.         bne.s   BossRobot_MoveFallingWaitBall_Return
  422.         move.l  #BossRobot_MoveFallingWaitBall_ReturnBack,$34(a0)
  423.  
  424. BossRobot_MoveFallingWaitBall_Return:
  425.         rts
  426. ; ---------------------------------------------------------------------------
  427.  
  428. BossRobot_MoveFallingWaitBall_CreateBallAim:
  429.         jsr (Random_Number).l
  430.         andi.w  #$E,d0
  431.         move.w  ObjDat_FallingWaitBall_Xpos_Random(pc,d0.w),d0
  432.         cmp.w   $3A(a0),d0
  433.         beq.s   BossRobot_MoveFallingWaitBall_CreateBallAim
  434.         move.w  d0,$3A(a0)
  435.         move.w  d0,$3C(a0)
  436.         lea ObjDat_FallingWaitBall_Xpos(pc),a2
  437.         cmpi.w  #$90,$3C(a0)
  438.         blo.s       +
  439.         lea ObjDat_FallingWaitBall_Xpos_Negative(pc),a2
  440. +       moveq   #0,d2
  441.         move.w  #9-1,d1
  442. -       jsr (Create_New_Sprite3).l
  443.         bne.s   +
  444.         move.l  #Obj_FallingWaitBall,address(a1)
  445.         move.w  a0,parent3(a1)
  446. -       move.w  (a2)+,d0
  447.         cmp.w   $3C(a0),d0
  448.         beq.s   -
  449.         add.w   (Camera_X_pos).w,d0
  450.         move.w  d0,x_pos(a1)
  451.         move.w  (Camera_Y_pos).w,d0
  452.         subi.w  #$20,d0
  453.         move.w  d0,y_pos(a1)
  454.         move.b  d2,subtype(a1)
  455.         addq.w  #2,d2
  456.         dbf d1,--
  457.         move.w  $3C(a0),$3E(a1)
  458. +       rts
  459. ; ---------------------------------------------------------------------------
  460.  
  461. ObjDat_FallingWaitBall_Xpos_Random:
  462.         dc.w $50
  463.         dc.w $F0
  464.         dc.w $90
  465.         dc.w $B0
  466.         dc.w $70
  467.         dc.w $110
  468.         dc.w $30
  469.         dc.w $D0
  470. ObjDat_FallingWaitBall_Xpos:
  471.         dc.w $10
  472.         dc.w $30
  473.         dc.w $50
  474.         dc.w $70
  475.         dc.w $90
  476.         dc.w $B0
  477.         dc.w $D0
  478.         dc.w $F0
  479.         dc.w $110
  480.         dc.w $130
  481. ObjDat_FallingWaitBall_Xpos_Negative:
  482.         dc.w $130
  483.         dc.w $110
  484.         dc.w $F0
  485.         dc.w $D0
  486.         dc.w $B0
  487.         dc.w $90
  488.         dc.w $70
  489.         dc.w $50
  490.         dc.w $30
  491.         dc.w $10
  492. ; ---------------------------------------------------------------------------
  493.  
  494. BossRobot_MoveFallingWaitBall_ReturnBack:
  495.         move.w  (Camera_X_pos).w,d0
  496.         addi.w  #$A0,d0
  497.         move.w  #$40,$3A(a0)
  498.         sub.w   x_pos(a0),d0
  499.         bgt.s   +
  500.         move.w  #$100,$3A(a0)
  501. +       andi.b  #-$D,$38(a0)
  502.         move.b  #setClose,anim(a0)
  503.         move.l  #BossRobot_MoveFallingWaitBall_CheckReturnPosition,$34(a0)
  504.         sfx sfx_Boom,0,0,0
  505.  
  506. BossRobot_MoveFallingWaitBall_CheckReturnPosition:
  507.         move.w  (Camera_X_pos).w,d0
  508.         add.w   $3A(a0),d0
  509.         sub.w   x_pos(a0),d0
  510.         bne.s   +
  511.         move.w  #$F,$2E(a0)
  512.         move.l  #BossRobot_CheckSubroutine,$34(a0)
  513. +       asl.w   #4,d0
  514.         move.w  d0,x_vel(a0)
  515.         rts
  516. ; ---------------------------------------------------------------------------
  517. ; Выстрел кучей падающих шаров
  518. ; ---------------------------------------------------------------------------
  519.  
  520. ; =============== S U B R O U T I N E =======================================
  521.  
  522. BossRobot_MoveSwingBall_Start:
  523.         move.b  #4,$39(a0)
  524.  
  525. BossRobot_MoveSwingBall_FindSonic:
  526.         move.b  #_Setup2,routine(a0)
  527.         move.w  #$1F,$2E(a0)
  528.         move.l  #BossRobot_MoveSwingBall_Attack,$34(a0)
  529.         clearRAM3 Pos_objtable_Start, Pos_objtable_End
  530.         moveq   #sfx_Boom,d0
  531.         jmp (Play_Sound_2).l
  532. ; ---------------------------------------------------------------------------
  533.  
  534. BossRobot_MoveSwingBall_Attack:
  535.         move.b  #_Setup1,routine(a0)
  536.         clr.w   x_vel(a0)
  537.         move.w  #$5F,$2E(a0)
  538.         move.l  #BossRobot_MoveSwingBall_FindSonic,$34(a0)
  539.         subq.b  #1,$39(a0)
  540.         bne.s   +
  541.         move.l  #BossRobot_CheckSubroutine,$34(a0)
  542. +       lea ChildObjDat_SwingBall(pc),a2
  543.         jmp (CreateChild1_Normal).l
  544. ; ---------------------------------------------------------------------------
  545. ; Выстрел умножающимся шаром
  546. ; ---------------------------------------------------------------------------
  547.  
  548. ; =============== S U B R O U T I N E =======================================
  549.  
  550. BossRobot_MoveMultiplyingBall_Start:
  551.         move.l  #BossRobot_MoveMultiplyingBall_CheckPosition,$34(a0)
  552.         sfx sfx_Boom,0,0,0
  553.  
  554. BossRobot_MoveMultiplyingBall_CheckPosition:
  555.         move.w  (Camera_X_pos).w,d0
  556.         addi.w  #$A0,d0
  557.         sub.w   x_pos(a0),d0
  558.         bne.s   +
  559.         move.l  #BossRobot_MoveMultiplyingBall_Create,$34(a0)
  560. +       asl.w   #4,d0
  561.         move.w  d0,x_vel(a0)
  562.  
  563. BossRobot_MoveMultiplyingBall_Wait:
  564.         rts
  565. ; ---------------------------------------------------------------------------
  566.  
  567. BossRobot_MoveMultiplyingBall_Create:
  568.         move.l  #BossRobot_MoveMultiplyingBall_Wait,$34(a0)
  569.         lea ChildObjDat_MultiplyingBall(pc),a2
  570.         jmp (CreateChild6_Simple).l
  571. ; ---------------------------------------------------------------------------
  572. ; Проверка урона
  573. ; ---------------------------------------------------------------------------
  574.  
  575. ; =============== S U B R O U T I N E =======================================
  576.  
  577. BossRobot_CheckTouch:
  578.         btst    #4,$38(a0)
  579.         bne.s   BossRobot_CheckTouch_Return
  580.         tst.b   collision_flags(a0)
  581.         bne.s   BossRobot_CheckTouch_Return
  582.         tst.b   collision_property(a0)
  583.         beq.s   BossRobot_CheckTouch_WaitExplosive
  584.         tst.b   $1C(a0)
  585.         bne.s   +
  586.         move.b  #$80,$1C(a0)
  587.         sfx sfx_HitBoss,0,0,0
  588.         bset    #6,status(a0)
  589. +       moveq   #0,d0
  590.         btst    #0,$1C(a0)
  591.         bne.s   +
  592.         addi.w  #6*2,d0
  593. +       bsr.w   BossRobot_PalFlash
  594.         subq.b  #1,$1C(a0)
  595.         bne.s   BossRobot_CheckTouch_Return
  596.         bclr    #6,status(a0)
  597.         move.b  collision_restore_flags(a0),collision_flags(a0)
  598.  
  599. BossRobot_CheckTouch_Return:
  600.         rts
  601. ; ---------------------------------------------------------------------------
  602.  
  603. BossRobot_CheckTouch_WaitExplosive:
  604.         move.l  #BossRobot_CheckTouch_WaitPlayerExplosive,address(a0)
  605.         move.w  #$2020,$3A(a0)
  606.         bset    #7,status(a0)
  607.         clr.l   x_vel(a0)
  608.         clr.w   $2E(a0)
  609.         jmp (BossDefeated_NoTime).l
  610. ; ---------------------------------------------------------------------------
  611.  
  612. BossRobot_CheckTouch_WaitPlayerExplosive:
  613.         lea (Player_1).w,a1
  614.         btst    #Status_InAir,status(a1)
  615.         bne.s   BossRobot_CheckTouch_TimeExplosive
  616.         move.l  #BossRobot_CheckTouch_TimeExplosive,address(a0)
  617.         clr.w   (Ctrl_1_logical).w
  618.         jsr (Find_SonicTails).l
  619.         move.b  #$81,object_control(a1)
  620.         move.w  #id_LookUp<<8,anim(a1)
  621.         jsr (Stop_Object).l
  622.         bclr    #Status_Facing,status(a1)
  623.         tst.w   d0
  624.         beq.s   +
  625.         bset    #Status_Facing,status(a1)
  626. +       lea ChildObjDat_Dialog_Process(pc),a2
  627.         jsr (CreateChild6_Simple).l
  628.         bne.s   BossRobot_CheckTouch_TimeExplosive
  629.         move.b  #_Defeated,routine(a1)
  630.         move.l  #DialogDefeated_Process_Index-4,$34(a1)
  631.         move.b  #(DialogDefeated_Process_Index_End-DialogDefeated_Process_Index)/8,$39(a1)
  632.  
  633. BossRobot_CheckTouch_TimeExplosive:
  634.         subq.w  #1,$2E(a0)
  635.         bpl.s   +
  636.         jsr (loc_83E7E).l
  637. +       jmp (Draw_Sprite).l
  638. ; ---------------------------------------------------------------------------
  639.  
  640. BossRobot_CheckTouch_Explosive:
  641.         move.l  #Wait_NewDelay,address(a0)
  642.         move.l  #BossRobot_CheckTouch_Explosive_SetFalling,$34(a0)
  643.         lea (Child6_CreateBossExplosion).l,a2
  644.         jsr (CreateChild6_Simple).l
  645.         jmp (Draw_Sprite).l
  646. ; ---------------------------------------------------------------------------
  647.  
  648. BossRobot_CheckTouch_Explosive_SetFalling:
  649.         addq.b  #2,(Dynamic_resize_routine).w
  650.         lea PLC_Robotnik(pc),a6
  651.         jsr (LoadPLC_Raw_KosM).l
  652.         move.l  #BossRobot_CheckTouch_Explosive_Falling,address(a0)
  653.  
  654. BossRobot_CheckTouch_Explosive_Falling:
  655.         jsr (MoveSprite_LightGravity).l
  656.         jsr (Draw_Sprite).l
  657.         jsr (ObjHitFloor).l
  658.         tst.w   d1
  659.         bpl.w   BossRobot_CheckTouch_Return
  660.         add.w   d1,y_pos(a0)
  661.         bclr    #7,render_flags(a0)
  662.         move.b  #$4F,(Negative_flash_timer).w
  663.         move.l  #Go_Delete_Sprite_2,address(a0)
  664.         sfx sfx_WallSmash,0,0,0
  665.         lea ChildObjDat_BossRobot_FlickerMove(pc),a2
  666.         jsr (CreateChild6_Simple).l
  667.         lea ChildObjDat_RobotnikJetpack_Intro(pc),a2
  668.         jmp (CreateChild6_Simple).l
  669. ; ---------------------------------------------------------------------------
  670. ; Создание щита
  671. ; ---------------------------------------------------------------------------
  672.  
  673. ; =============== S U B R O U T I N E =======================================
  674.  
  675. Obj_BossRobot_CreateShield_Process:
  676.         move.w  #$4F,$2E(a0)
  677.         move.l  #BossRobot_CreateShield_Process_Wait,address(a0)
  678.  
  679. BossRobot_CreateShield_Process_Wait:
  680.         subq.w  #1,$2E(a0)
  681.         bpl.s   BossRobot_CreateShield_Return
  682.         move.l  #BossRobot_CreateShield_Process_Main,address(a0)
  683.  
  684. BossRobot_CreateShield_Process_Main:
  685.         movea.w parent3(a0),a1
  686.         btst    #7,status(a1)
  687.         bne.w   DEZExplosion_Delete
  688.         btst    #4,$38(a1)
  689.         bne.s   BossRobot_CreateShield_Return
  690.         tst.b   $1C(a1)
  691.         bne.s   BossRobot_CreateShield_HurtBoss
  692.         subq.w  #1,$2E(a0)
  693.         bpl.s   BossRobot_CreateShield_Return
  694.         bra.s   BossRobot_CreateShield_LoadShield
  695. ; ---------------------------------------------------------------------------
  696.  
  697. BossRobot_CreateShield_HurtBoss:
  698.         move.l  #BossRobot_CreateShield_HurtBossWait,address(a0)
  699.  
  700. BossRobot_CreateShield_HurtBossWait:
  701.         movea.w parent3(a0),a1
  702.         tst.b   $1C(a1)
  703.         bne.s   BossRobot_CreateShield_Return
  704.  
  705. BossRobot_CreateShield_LoadShield:
  706.         move.l  a0,-(sp)
  707.         movea.w parent3(a0),a0
  708.         bset    #4,$38(a0)
  709.         clr.b   collision_flags(a0)
  710.         lea ChildObjDat_BossRobot_Shield(pc),a2
  711.         jsr (CreateChild6_Simple).l
  712.         movea.l (sp)+,a0
  713.         sfx sfx_Magnet,0,0,0
  714.         move.w  #$4F,$2E(a0)
  715.         move.l  #BossRobot_CreateShield_Process_Main,address(a0)
  716.  
  717. BossRobot_CreateShield_Return:
  718.         rts
  719. ; ---------------------------------------------------------------------------
  720. ; Тень
  721. ; ---------------------------------------------------------------------------
  722.  
  723. ; =============== S U B R O U T I N E =======================================
  724.  
  725. Obj_ChasingBall_Trail:
  726.         moveq   #0,d0
  727.         move.b  subtype(a0),d0
  728.         lsl.b   #4,d0
  729.         addi.b  #$24,d0
  730.         move.b  d0,subtype(a0)
  731.         lea ObjDat3_ChasingBall_Trail(pc),a1
  732.         jsr (SetUp_ObjAttributes3).l
  733.         move.l  #+,address(a0)
  734. +       jsr (Child_GetVRAMPriorityOnce).l
  735.         bsr.w   Obj_ChasingBall_CopyPos
  736.         jmp (Child_DrawTouch_Sprite_Explosion).l
  737. ; ---------------------------------------------------------------------------
  738. ; Тень 2
  739. ; ---------------------------------------------------------------------------
  740.  
  741. ; =============== S U B R O U T I N E =======================================
  742.  
  743. Obj_ChasingBall_Trail_2:
  744.         moveq   #0,d0
  745.         move.b  subtype(a0),d0
  746.         lsl.b   #4,d0
  747.         addi.b  #$24,d0
  748.         move.b  d0,subtype(a0)
  749.         lea ObjDat3_ChasingBall_Trail(pc),a1
  750.         jsr (SetUp_ObjAttributes3).l
  751.         move.l  #+,address(a0)
  752. +       jsr (Child_GetVRAMPriorityOnce).l
  753.         bsr.w   Obj_ChasingBall_CopyPos2
  754.         jmp (Child_DrawTouch_Sprite_Explosion).l
  755. ; ---------------------------------------------------------------------------
  756. ; Тень отталкивающегося шара
  757. ; ---------------------------------------------------------------------------
  758.  
  759. ; =============== S U B R O U T I N E =======================================
  760.  
  761. Obj_RepulsionBall_Trail:
  762.         moveq   #0,d0
  763.         move.b  subtype(a0),d0
  764.         lsl.b   #3,d0
  765.         addi.b  #$14,d0
  766.         move.b  d0,subtype(a0)
  767.         lea ObjDat3_ChasingBall_Trail(pc),a1
  768.         jsr (SetUp_ObjAttributes3).l
  769.         move.l  #+,address(a0)
  770. +       bsr.w   Obj_ChasingBall_CopyPos
  771.         jmp (Child_DrawTouch_Sprite_Explosion).l
  772. ; ---------------------------------------------------------------------------
  773. ; Падающий шар
  774. ; ---------------------------------------------------------------------------
  775.  
  776. ; =============== S U B R O U T I N E =======================================
  777.  
  778. Obj_FallingBall:
  779.         moveq   #0,d0
  780.         move.b  routine(a0),d0
  781.         move.w  FallingBall_Index(pc,d0.w),d0
  782.         jsr FallingBall_Index(pc,d0.w)
  783.         jmp (Child_DrawTouch_Sprite_CircularExplosion).l
  784. ; ---------------------------------------------------------------------------
  785.  
  786. FallingBall_Index: offsetTable
  787.         offsetTableEntry.w FallingBall_Init     ; 0
  788.         offsetTableEntry.w FallingBall_Setup        ; 2
  789. ; ---------------------------------------------------------------------------
  790.  
  791. FallingBall_Init:
  792.         lea ObjDat3_ChasingBall(pc),a1
  793.         jsr (SetUp_ObjAttributes).l
  794.         movea.w parent3(a0),a1
  795.         bset    #3,$38(a1)
  796.         move.b  #setOpen,anim(a1)
  797.         move.l  #FallingBall_Explosion,$34(a0)
  798.         move.l  #AniRaw_ChasingBall,$30(a0)
  799.  
  800. FallingBall_Setup:
  801.         jsr (Animate_Raw).l
  802.         jsr (MoveSprite).l
  803.         jmp (ObjHitFloor_DoRoutine).l
  804. ; ---------------------------------------------------------------------------
  805.  
  806. FallingBall_Explosion:
  807.         movea.w parent3(a0),a1
  808.         andi.b  #-$D,$38(a1)
  809.         move.b  #setClose,anim(a1)
  810.  
  811. FallingWaitBall_Explosion:
  812.         sfx sfx_BreakBridge,0,0,0
  813.         move.l  #Go_Delete_Sprite,$34(a0)
  814.         move.w  #$14,(Screen_Shaking_Flag).w
  815.         lea ChildObjDat_DEZExplosion(pc),a2
  816.         jmp (CreateChild6_Simple).l
  817. ; ---------------------------------------------------------------------------
  818. ; Вращающийся и преследующий шар
  819. ; ---------------------------------------------------------------------------
  820.  
  821. ; =============== S U B R O U T I N E =======================================
  822.  
  823. Obj_CircularChaseBall:
  824.         moveq   #0,d0
  825.         move.b  routine(a0),d0
  826.         move.w  CircularChaseBall_Index(pc,d0.w),d0
  827.         jsr CircularChaseBall_Index(pc,d0.w)
  828.         bsr.w   CircularChaseBall_SetTrail
  829.         jmp (Child_DrawTouch_Sprite_CircularExplosion).l
  830. ; ---------------------------------------------------------------------------
  831.  
  832. CircularChaseBall_Index: offsetTable
  833.         offsetTableEntry.w CircularChaseBall_Init       ; 0
  834.         offsetTableEntry.w CircularChaseBall_Setup  ; 2
  835.         offsetTableEntry.w CircularChaseBall_Setup2 ; 4
  836.         offsetTableEntry.w CircularChaseBall_Setup3 ; 6
  837. ; ---------------------------------------------------------------------------
  838.  
  839. CircularChaseBall_Init:
  840.         lea ObjDat3_ChasingBall(pc),a1
  841.         jsr (SetUp_ObjAttributes).l
  842.         move.b  #2,$3A(a0)
  843.         move.b  #2,$40(a0)
  844.         move.w  #$1F,$2E(a0)
  845.         tst.b   subtype(a0)
  846.         beq.s   +
  847.         move.w  #$5F,$2E(a0)
  848. +       move.l  #CircularChaseBall_MoveDown,$34(a0)
  849.         move.l  #AniRaw_ChasingBall,$30(a0)
  850.         lea ChildObjDat_ChasingBall_Trail2(pc),a2
  851.         tst.b   subtype(a0)
  852.         bne.s   +
  853.         movea.w parent3(a0),a1
  854.         bset    #3,$38(a1)
  855.         move.b  #setOpen,anim(a1)
  856.         sfx sfx_Laser2,0,0,0
  857.         lea ChildObjDat_ChasingBall_Trail(pc),a2
  858. +       jmp (CreateChild6_Simple).l
  859. ; ---------------------------------------------------------------------------
  860.  
  861. CircularChaseBall_Setup3:
  862.         jsr (Find_SonicTails).l
  863.         jsr (Change_FlipX).l
  864.         move.w  #$400,d0
  865.         moveq   #$20,d1
  866.         jsr (Chase_Object).l
  867.         bra.s   CircularChaseBall_Setup
  868. ; ---------------------------------------------------------------------------
  869.  
  870. CircularChaseBall_Setup2:
  871.         move.b  $40(a0),d0
  872.         add.b   d0,$3C(a0)
  873.         move.b  $3A(a0),d2
  874.         jsr (MoveSprite_CircularSimple).l
  875.  
  876. CircularChaseBall_Setup:
  877.         jsr (Animate_Raw).l
  878.         jsr (MoveSprite2).l
  879.         jmp (Obj_Wait).l
  880. ; ---------------------------------------------------------------------------
  881.  
  882. CircularChaseBall_MoveDown:
  883.         move.w  #$100,y_vel(a0)
  884.         move.w  #$3F,$2E(a0)
  885.         move.l  #CircularChaseBall_MoveClosed,$34(a0)
  886.         rts
  887. ; ---------------------------------------------------------------------------
  888.  
  889. CircularChaseBall_MoveClosed:
  890.         move.b  #_Setup2,routine(a0)
  891.         clr.w   y_vel(a0)
  892.         move.w  #$180,priority(a0)
  893.         ori.w   #$C000,art_tile(a0)
  894.         move.w  #$9F,$2E(a0)
  895.         move.l  #CircularChaseBall_SetChase,$34(a0)
  896.         tst.b   subtype(a0)
  897.         beq.s   +
  898.         movea.w parent3(a0),a1
  899.         andi.b  #-$D,$38(a1)
  900.         move.b  #setClose,anim(a1)
  901.         move.w  #$17F,$2E(a0)
  902.         move.w  #$4F,$2E(a1)
  903.         move.l  #BossRobot_MoveCircularChaseBall_SetMove,$34(a1)
  904. +       rts
  905. ; ---------------------------------------------------------------------------
  906.  
  907. CircularChaseBall_SetChase:
  908.         move.w  #4*60,$2E(a0)
  909.         move.l  #CircularChaseBall_Remove,$34(a0)
  910.         move.b  #_Setup3,routine(a0)
  911.         moveq   #sfx_Flash,d0
  912.         jmp (Play_Sound_2).l
  913. ; ---------------------------------------------------------------------------
  914.  
  915. CircularChaseBall_Remove:
  916.         tst.b   subtype(a0)
  917.         beq.s   +
  918.         movea.w parent3(a0),a1
  919.         move.w  #$4F,$2E(a1)
  920.         move.l  #BossRobot_CheckSubroutine,$34(a1)
  921. +       move.l  #Go_Delete_Sprite,address(a0)
  922.         lea ChildObjDat_DEZCircularExplosion(pc),a2
  923.         jmp (CreateChild6_Simple).l
  924. ; ---------------------------------------------------------------------------
  925.  
  926. CircularChaseBall_SetTrail:
  927.         moveq   #0,d0
  928.         move.b  subtype(a0),d0
  929.         add.w   d0,d0
  930.         jmp CircularChaseBall_TrailIndex(pc,d0.w)
  931. ; ---------------------------------------------------------------------------
  932.  
  933. CircularChaseBall_TrailIndex:
  934.         bra.w   Obj_ChasingBall_SendPos
  935.         bra.w   Obj_ChasingBall_SendPos2
  936. ; ---------------------------------------------------------------------------
  937. ; Отталкивающийся шар
  938. ; ---------------------------------------------------------------------------
  939.  
  940. ; =============== S U B R O U T I N E =======================================
  941.  
  942. Obj_RepulsionBall:
  943.         moveq   #0,d0
  944.         move.b  routine(a0),d0
  945.         move.w  RepulsionBall_Index(pc,d0.w),d0
  946.         jsr RepulsionBall_Index(pc,d0.w)
  947.         bsr.w   Obj_ChasingBall_SendPos
  948.         jmp (Child_DrawTouch_Sprite_Explosion).l
  949. ; ---------------------------------------------------------------------------
  950.  
  951. RepulsionBall_Index: offsetTable
  952.         offsetTableEntry.w RepulsionBall_Init       ; 0
  953.         offsetTableEntry.w RepulsionBall_Setup      ; 2
  954.         offsetTableEntry.w RepulsionBall_Setup2     ; 4
  955. ; ---------------------------------------------------------------------------
  956.  
  957. RepulsionBall_Init:
  958.         lea ObjDat3_ShootingBall_Missile(pc),a1
  959.         jsr (SetUp_ObjAttributes).l
  960.         move.w  #$400,y_vel(a0)
  961.         move.l  #RepulsionBall_CheckTouch,$34(a0)
  962.         movea.w parent3(a0),a1
  963.         bset    #3,$38(a1)
  964.         move.b  #setOpen,anim(a1)
  965.         sfx sfx_Laser,0,0,0
  966.         lea ChildObjDat_RepulsionBall_Trail(pc),a2
  967.         jmp (CreateChild6_Simple).l
  968. ; ---------------------------------------------------------------------------
  969.  
  970. RepulsionBall_Setup:
  971.         jsr (MoveSprite2).l
  972.         jmp (ObjHitFloor_DoRoutine).l
  973. ; ---------------------------------------------------------------------------
  974.  
  975. RepulsionBall_Setup2:
  976.         bsr.s   RepulsionBall_CheckWall
  977.         jsr (MoveSprite2).l
  978.         jmp (Obj_Wait).l
  979. ; ---------------------------------------------------------------------------
  980.  
  981. RepulsionBall_CheckTouch:
  982.         move.b  #_Setup2,routine(a0)
  983.         move.l  #RepulsionBall_Remove,$34(a0)
  984.         jsr (Random_Number).l
  985.         andi.w  #$C,d0
  986.         move.l  ObDat_RepulsionBallSpeed(pc,d0.w),x_vel(a0)
  987.         lsr.w   d0
  988.         move.w  ObDat_RepulsionBallTimer(pc,d0.w),$2E(a0)
  989.         jsr (Random_Number).l
  990.         andi.w  #1,d0
  991.         bne.s   +
  992.         neg.l   x_vel(a0)
  993. +       rts
  994. ; ---------------------------------------------------------------------------
  995.  
  996. ObDat_RepulsionBallTimer:
  997.         dc.w 4*60
  998.         dc.w 7*60
  999.         dc.w 6*60
  1000.         dc.w 4*60
  1001. ObDat_RepulsionBallSpeed:
  1002.         dc.w $400, $400 ; Xpos, Ypos
  1003.         dc.w $100, $500 ; Xpos, Ypos
  1004.         dc.w $400, $100 ; Xpos, Ypos
  1005.         dc.w $400, $400 ; Xpos, Ypos
  1006. ; ---------------------------------------------------------------------------
  1007.  
  1008. RepulsionBall_Remove:
  1009.         movea.w parent3(a0),a1
  1010.         move.w  #$F,$2E(a1)
  1011.         move.l  #Go_Delete_Sprite,address(a0)
  1012.         move.l  #BossRobot_MoveRepulsionBall_SetReturnPosition,$34(a1)
  1013.         rts
  1014. ; ---------------------------------------------------------------------------
  1015.  
  1016. RepulsionBall_CheckWall:
  1017.         move.w  (Camera_Y_pos).w,d0
  1018.         tst.w   y_vel(a0)
  1019.         bmi.s   +
  1020.         addi.w  #$C8,d0         ; Проверить пол
  1021.         cmp.w   y_pos(a0),d0
  1022.         blo.s       ++
  1023.         bra.s   +++
  1024. +       addi.w  #$18,d0         ; Проверить потолок
  1025.         cmp.w   y_pos(a0),d0
  1026.         blo.s       ++
  1027. +       neg.w   y_vel(a0)
  1028.         sfx sfx_Laser5,0,0,0
  1029. +       move.w  (Camera_X_pos).w,d0
  1030.         tst.w   x_vel(a0)
  1031.         bpl.s   +
  1032.         addq.w  #8,d0           ; Проверить левую сторону стены
  1033.         cmp.w   x_pos(a0),d0
  1034.         bhs.s   ++
  1035.         bra.s   +++
  1036. +       addi.w  #$138,d0        ; Проверить правую сторону стены
  1037.         cmp.w   x_pos(a0),d0
  1038.         bhs.s   ++
  1039. +       neg.w   x_vel(a0)
  1040.         sfx sfx_Laser5,0,0,0
  1041. +       rts
  1042. ; ---------------------------------------------------------------------------
  1043. ; Стреляющий по радиусу шар
  1044. ; ---------------------------------------------------------------------------
  1045.  
  1046. ; =============== S U B R O U T I N E =======================================
  1047.  
  1048. Obj_ShootingBall:
  1049.         moveq   #0,d0
  1050.         move.b  routine(a0),d0
  1051.         move.w  ShootingBall_Index(pc,d0.w),d0
  1052.         jsr ShootingBall_Index(pc,d0.w)
  1053.         jmp (Child_DrawTouch_Sprite_CircularExplosion).l
  1054. ; ---------------------------------------------------------------------------
  1055.  
  1056. ShootingBall_Index: offsetTable
  1057.         offsetTableEntry.w ShootingBall_Init        ; 0
  1058.         offsetTableEntry.w ShootingBall_Setup   ; 2
  1059.         offsetTableEntry.w ShootingBall_Setup2  ; 4
  1060.         offsetTableEntry.w ShootingBall_Setup3  ; 6
  1061. ; ---------------------------------------------------------------------------
  1062.  
  1063. ShootingBall_Init:
  1064.         lea ObjDat3_ChasingBall(pc),a1
  1065.         jsr (SetUp_ObjAttributes).l
  1066.         movea.w parent3(a0),a1
  1067.         bset    #3,$38(a1)
  1068.         move.b  #setOpen,anim(a1)
  1069.         move.b  #24/2,y_radius(a0)
  1070.         move.l  #ShootingBall_SetBounced,$34(a0)
  1071.         move.l  #AniRaw_ChasingBall,$30(a0)
  1072.         jsr (Random_Number).l
  1073.         andi.w  #1,d0
  1074.         bne.s   +
  1075.         not.w   d0
  1076. +       move.b  d0,$40(a0)
  1077.         sfx sfx_Laser,0,0,0
  1078.  
  1079. ShootingBall_Return:
  1080.         rts
  1081. ; ---------------------------------------------------------------------------
  1082.  
  1083. ShootingBall_Setup:
  1084.         jsr (Animate_Raw).l
  1085.         jsr (MoveSprite).l
  1086.         jmp (ObjHitFloor_DoRoutine).l
  1087. ; ---------------------------------------------------------------------------
  1088.  
  1089. ShootingBall_Setup3:
  1090.         bsr.w   ShootingBall_Shoot
  1091.  
  1092. ShootingBall_Setup2:
  1093.         jsr (Animate_Raw).l
  1094.         jsr (MoveSprite2).l
  1095.         jmp (Obj_Wait).l
  1096. ; ---------------------------------------------------------------------------
  1097.  
  1098. ShootingBall_SetBounced:
  1099.         movea.w parent3(a0),a1
  1100.         andi.b  #-$D,$38(a1)
  1101.         move.b  #setClose,anim(a1)
  1102.         move.l  #ShootingBall_CheckBounced,$34(a0)
  1103.         move.w  #$100,x_vel(a0)
  1104.         cmpi.w  #$180,$3A(a1)
  1105.         bne.s   ShootingBall_CheckBounced
  1106.         neg.w   x_vel(a0)
  1107.  
  1108. ShootingBall_CheckBounced:
  1109.         move.w  y_vel(a0),d0
  1110.         bmi.s   ShootingBall_Return
  1111.         cmpi.w  #$180,d0
  1112.         bhs.s   ShootingBall_Fall
  1113.         move.b  #_Setup2,routine(a0)
  1114.         move.l  #ShootingBall_CheckPosition,$34(a0)
  1115.         sfx sfx_Squeak,0,0,0
  1116.         lea ChildObjDat_DEZGravitySwitch(pc),a2
  1117.         jmp (CreateChild6_Simple).l
  1118. ; ---------------------------------------------------------------------------
  1119.  
  1120. ShootingBall_Fall:
  1121.         asr.w   d0
  1122.         neg.w   d0
  1123.         move.w  d0,y_vel(a0)
  1124.         moveq   #sfx_Emerald,d0
  1125.         jmp (Play_Sound_2).l
  1126. ; ---------------------------------------------------------------------------
  1127.  
  1128. ShootingBall_CheckPosition:
  1129.         move.w  (Camera_X_pos).w,d0
  1130.         addi.w  #$A0,d0
  1131.         sub.w   x_pos(a0),d0
  1132.         asl.w   #4,d0
  1133.         move.w  d0,x_vel(a0)
  1134.         move.w  (Camera_Y_pos).w,d0
  1135.         addi.w  #$70,d0
  1136.         sub.w   y_pos(a0),d0
  1137.         bne.s   +
  1138.         lea ChildObjDat_ShootingBall_Wave(pc),a2
  1139.         jsr (CreateChild6_Simple).l
  1140.         move.w  #$1F,$2E(a0)
  1141.         move.l  #ShootingBall_CheckPositionWait,$34(a0)
  1142. +       asl.w   #4,d0
  1143.         move.w  d0,y_vel(a0)
  1144.         rts
  1145. ; ---------------------------------------------------------------------------
  1146.  
  1147. ShootingBall_CheckPositionWait:
  1148.         move.b  #_Setup3,routine(a0)
  1149.         sfx sfx_Flash,0,0,0
  1150.         move.b  #4,(Hyper_Sonic_flash_timer).w
  1151.         move.w  #5*60,$2E(a0)
  1152.         move.l  #ShootingBall_Remove,$34(a0)
  1153.         rts
  1154. ; ---------------------------------------------------------------------------
  1155.  
  1156. ShootingBall_Remove:
  1157.         movea.w parent3(a0),a1
  1158.         move.w  #$2F,$2E(a1)
  1159.         sfx sfx_BreakBridge,0,0,0
  1160.         move.l  #BossRobot_MoveShootingBall_SetReturnPosition,$34(a1)
  1161.         move.l  #Obj_DEZCircularExplosion,address(a0)
  1162.  
  1163. ShootingBall_Remove_Return:
  1164.         rts
  1165. ; ---------------------------------------------------------------------------
  1166.  
  1167. ShootingBall_Shoot:
  1168.         move.b  $40(a0),d0
  1169.         add.b   d0,$3C(a0)
  1170.         moveq   #sfx_Fire,d0
  1171.         jsr (Wait_Play_Sound).l
  1172.         btst    #0,(Level_frame_counter+1).w
  1173.         beq.s   ShootingBall_Remove_Return
  1174.         lea ChildObjDat_ShootingBall_Missile(pc),a2
  1175.         jmp (CreateChild6_Simple).l
  1176. ; ---------------------------------------------------------------------------
  1177. ; Волна перед началом стрельбы шаров по радиусу
  1178. ; ---------------------------------------------------------------------------
  1179.  
  1180. ; =============== S U B R O U T I N E =======================================
  1181.  
  1182. Obj_ShootingBall_Wave:
  1183.         moveq   #0,d0
  1184.         move.b  routine(a0),d0
  1185.         move.w  ShootingBall_Wave_Index(pc,d0.w),d0
  1186.         jsr ShootingBall_Wave_Index(pc,d0.w)
  1187.         jmp (Draw_Sprite).l
  1188. ; ---------------------------------------------------------------------------
  1189.  
  1190. ShootingBall_Wave_Index: offsetTable
  1191.         offsetTableEntry.w ShootingBall_Wave_Init       ; 0
  1192.         offsetTableEntry.w ShootingBall_Wave_Setup      ; 2
  1193.         offsetTableEntry.w ShootingBall_Wave_Setup2 ; 4
  1194.         offsetTableEntry.w ShootingBall_Wave_Setup3 ; 6
  1195. ; ---------------------------------------------------------------------------
  1196.  
  1197. ShootingBall_Wave_Init:
  1198.         lea ObjDat3_ShootingBall_Wave(pc),a1
  1199.         jsr (SetUp_ObjAttributes).l
  1200.         move.w  #$400,y_vel(a0)
  1201.         tst.b   subtype(a0)
  1202.         beq.s   +
  1203.         neg.w   y_vel(a0)
  1204.         bset    #1,render_flags(a0)
  1205.         move.b  #_Setup2,routine(a0)
  1206. +       move.l  #ShootingBall_Wave_Falling,$34(a0)
  1207.  
  1208. ShootingBall_Wave_Setup:
  1209.         jsr (MoveSprite2).l
  1210.         jmp (ObjHitFloor_DoRoutine).l
  1211. ; ---------------------------------------------------------------------------
  1212.  
  1213. ShootingBall_Wave_Setup2:
  1214.         jsr (MoveSprite2).l
  1215.         jmp (ObjHitCeiling_DoRoutine).l
  1216. ; ---------------------------------------------------------------------------
  1217.  
  1218. ShootingBall_Wave_Setup3:
  1219.         jmp (Animate_Raw).l
  1220. ; ---------------------------------------------------------------------------
  1221.  
  1222. ShootingBall_Wave_Falling:
  1223.         move.b  #_Setup3,routine(a0)
  1224.         move.w  #$80,priority(a0)
  1225.         move.l  #Go_Delete_Sprite,$34(a0)
  1226.         move.l  #AniRaw_ShootingBall_Wave,$30(a0)
  1227.         rts
  1228. ; ---------------------------------------------------------------------------
  1229. ; Снаряд для выстрела по радиусу
  1230. ; ---------------------------------------------------------------------------
  1231.  
  1232. ; =============== S U B R O U T I N E =======================================
  1233.  
  1234. Obj_ShootingBall_Missile:
  1235.         moveq   #0,d0
  1236.         move.b  subtype(a0),d0
  1237.         lsl.b   #6,d0
  1238.         move.b  d0,$3F(a0)
  1239.         lea ObjDat3_ShootingBall_Missile(pc),a1
  1240.         jsr (SetUp_ObjAttributes).l
  1241.         move.l  #+,address(a0)
  1242.         movea.w parent3(a0),a1
  1243.         move.b  $3C(a1),d0
  1244.         add.b   $3F(a0),d0
  1245.         jsr (GetSineCosine).l
  1246.         move.w  #$C00,d2
  1247.         muls.w  d2,d0
  1248.         asr.l   #8,d0
  1249.         move.w  d0,x_vel(a0)
  1250.         muls.w  d2,d1
  1251.         asr.l   #8,d1
  1252.         move.w  d1,y_vel(a0)
  1253. +       jsr (MoveSprite2).l
  1254.         bsr.s   ShootingBall_Missile_CheckFloor
  1255.         jmp (Sprite_ChildCheckDeleteTouchXY).l
  1256. ; ---------------------------------------------------------------------------
  1257.  
  1258. ShootingBall_Missile_CheckFloor:
  1259.         move.w  (Camera_Y_pos).w,d0
  1260.         addi.w  #16,d0
  1261.         cmp.w   y_pos(a0),d0
  1262.         bhs.s   +
  1263.         addi.w  #192,d0
  1264.         cmp.w   y_pos(a0),d0
  1265.         bhs.s   ShootingBall_Missile_Return
  1266. +       move.w  #4,(Screen_Shaking_Flag).w
  1267.         btst    #1,(Level_frame_counter+1).w
  1268.         beq.s   ShootingBall_Missile_Return
  1269.         move.l  #loc_1E746,address(a0)
  1270.  
  1271. ShootingBall_Missile_Return:
  1272.         rts
  1273. ; ---------------------------------------------------------------------------
  1274. ; Падающий ждущий шар (кат-сцена)
  1275. ; ---------------------------------------------------------------------------
  1276.  
  1277. ; =============== S U B R O U T I N E =======================================
  1278.  
  1279. Obj_FallingWaitBall_Intro:
  1280.         moveq   #0,d0
  1281.         move.b  subtype(a0),d0
  1282.         lsl.w       #2,d0
  1283.         addq.w  #8,d0
  1284.         move.w  d0,$2E(a0)
  1285.         lea ObjDat3_ChasingBall(pc),a1
  1286.         jsr (SetUp_ObjAttributes).l
  1287.         ori.w   #$C000,art_tile(a0)
  1288.         move.w  #$800,y_vel(a0)
  1289.         move.l  #+,address(a0)
  1290.         move.l  #FallingWaitBall_Intro_Sound,$34(a0)
  1291.         move.l  #AniRaw_ChasingBall,$30(a0)
  1292. +       jsr (Animate_Raw).l
  1293.         jsr (Obj_Wait).l
  1294.         jmp (Sprite_ChildCheckDeleteTouchXY).l
  1295. ; ---------------------------------------------------------------------------
  1296.  
  1297. FallingWaitBall_Intro_Sound:
  1298.         move.l  #MoveSprite2,$34(a0)
  1299.         moveq   #sfx_Ghost,d0
  1300.         jmp (Play_Sound_2).l
  1301. ; ---------------------------------------------------------------------------
  1302. ; Падающий ждущий шар
  1303. ; ---------------------------------------------------------------------------
  1304.  
  1305. ; =============== S U B R O U T I N E =======================================
  1306.  
  1307. Obj_FallingWaitBall:
  1308.         moveq   #0,d0
  1309.         move.b  routine(a0),d0
  1310.         move.w  FallingWaitBall_Index(pc,d0.w),d0
  1311.         jsr FallingWaitBall_Index(pc,d0.w)
  1312.         jmp (Child_DrawTouch_Sprite_CircularExplosion).l
  1313. ; ---------------------------------------------------------------------------
  1314.  
  1315. FallingWaitBall_Index: offsetTable
  1316.         offsetTableEntry.w FallingWaitBall_Init     ; 0
  1317.         offsetTableEntry.w FallingWaitBall_Setup        ; 2
  1318.         offsetTableEntry.w FallingWaitBall_Setup2   ; 4
  1319.         offsetTableEntry.w FallingWaitBall_Setup3   ; 6
  1320. ; ---------------------------------------------------------------------------
  1321.  
  1322. FallingWaitBall_Init:
  1323.         lea ObjDat3_ChasingBall(pc),a1
  1324.         jsr (SetUp_ObjAttributes).l
  1325.         ori.w   #$C000,art_tile(a0)
  1326.         move.l  #FallingWaitBall_Waiting,$34(a0)
  1327.         move.l  #AniRaw_ChasingBall,$30(a0)
  1328.         move.b  subtype(a0),d0
  1329.         lsl.w       #2,d0
  1330.         addi.w  #$40,d0
  1331.         move.w  d0,$2E(a0)
  1332.         cmpi.b  #(9-1)*2,subtype(a0)
  1333.         bne.s   +
  1334.         lea ChildObjDat_FallingWaitBall_Aim(pc),a2
  1335.         jsr (CreateChild6_Simple).l
  1336.         bne.s   +
  1337.         move.w  $3E(a0),$3E(a1)
  1338. +       rts
  1339. ; ---------------------------------------------------------------------------
  1340.  
  1341. FallingWaitBall_Setup:
  1342.         jsr (Animate_Raw).l
  1343.         jmp (Obj_Wait).l
  1344. ; ---------------------------------------------------------------------------
  1345.  
  1346. FallingWaitBall_Setup2:
  1347.         jsr (Animate_Raw).l
  1348.         jsr (MoveSprite).l
  1349.         jmp (Obj_Wait).l
  1350. ; ---------------------------------------------------------------------------
  1351.  
  1352. FallingWaitBall_Setup3:
  1353.         jsr (Animate_Raw).l
  1354.         jsr (MoveSprite).l
  1355.         jmp (ObjHitFloor_DoRoutine).l
  1356. ; ---------------------------------------------------------------------------
  1357.  
  1358. FallingWaitBall_Waiting:
  1359.         move.b  #_Setup2,routine(a0)
  1360.         move.w  #$1F,$2E(a0)
  1361.         move.l  #FallingWaitBall_Waiting2,$34(a0)
  1362.         tst.b       subtype(a0)
  1363.         bne.s   +
  1364.         sfx sfx_Falling,0,0,0
  1365. +       rts
  1366. ; ---------------------------------------------------------------------------
  1367.  
  1368. FallingWaitBall_Waiting2:
  1369.         move.b  #_Setup3,routine(a0)
  1370.         eori.w  #$4000,art_tile(a0)
  1371.         move.l  #FallingWaitBall_Explosion,$34(a0)
  1372.         rts
  1373. ; ---------------------------------------------------------------------------
  1374. ; Прицел для вращающегося и преследующего шара
  1375. ; ---------------------------------------------------------------------------
  1376.  
  1377. ; =============== S U B R O U T I N E =======================================
  1378.  
  1379. Obj_FallingWaitBall_Aim:
  1380.         move.w  (Camera_X_pos).w,d0
  1381.         add.w   $3E(a0),d0
  1382.         move.w  d0,x_pos(a0)
  1383.         move.w  (Camera_Y_pos).w,d0
  1384.         add.w   #$C8,d0
  1385.         move.w  d0,y_pos(a0)
  1386.         sfx sfx_Squeak,0,0,0
  1387.         lea ObjDat3_FallingWaitBall_Aim(pc),a1
  1388.         jsr (SetUp_ObjAttributes).l
  1389.         move.w  #$40,$2E(a0)
  1390.         move.l  #+,address(a0)
  1391.         move.l  #Go_Delete_Sprite,$34(a0)
  1392.         move.l  #AniRaw_FallingWaitBall_Aim,$30(a0)
  1393. +       jsr (Animate_Raw).l
  1394.         jsr (Obj_Wait).l
  1395.         jmp (Draw_Sprite).l
  1396. ; ---------------------------------------------------------------------------
  1397. ; Раскачивающийся шар
  1398. ; ---------------------------------------------------------------------------
  1399.  
  1400. ; =============== S U B R O U T I N E =======================================
  1401.  
  1402. Obj_SwingBall:
  1403.         moveq   #0,d0
  1404.         move.b  routine(a0),d0
  1405.         move.w  SwingBall_Index(pc,d0.w),d0
  1406.         jsr SwingBall_Index(pc,d0.w)
  1407.         bsr.w   CircularChaseBall_SetTrail
  1408.         jmp (Sprite_ChildCheckDeleteTouchXY).l
  1409. ; ---------------------------------------------------------------------------
  1410.  
  1411. SwingBall_Index: offsetTable
  1412.         offsetTableEntry.w SwingBall_Init       ; 0
  1413.         offsetTableEntry.w SwingBall_Setup      ; 2
  1414.         offsetTableEntry.w SwingBall_Setup2 ; 4
  1415. ; ---------------------------------------------------------------------------
  1416.  
  1417. SwingBall_Init:
  1418.         lea ObjDat3_ChasingBall(pc),a1
  1419.         jsr (SetUp_ObjAttributes).l
  1420.         ori.w   #$C000,art_tile(a0)
  1421.         move.w  #$F,$2E(a0)
  1422.         move.l  #SwingBall_MoveDown,$34(a0)
  1423.         move.l  #AniRaw_ChasingBall,$30(a0)
  1424.         move.b  #6,$40(a0)
  1425.         lea ChildObjDat_ChasingBall_Trail2(pc),a2
  1426.         tst.b   subtype(a0)
  1427.         bne.s   +
  1428.         neg.b   $40(a0)
  1429.         movea.w parent3(a0),a1
  1430.         bset    #3,$38(a1)
  1431.         move.b  #setOpen,anim(a1)
  1432.         sfx sfx_Laser2,0,0,0
  1433.         lea ChildObjDat_ChasingBall_Trail(pc),a2
  1434. +       jmp (CreateChild6_Simple).l
  1435. ; ---------------------------------------------------------------------------
  1436.  
  1437. SwingBall_Setup2:
  1438.         move.b  $40(a0),d0
  1439.         add.b   d0,$3C(a0)
  1440.         move.b  $3C(a0),d0
  1441.         jsr (GetSineCosine).l
  1442.         asl.w   #2,d0
  1443.         move.w  d0,x_vel(a0)
  1444.  
  1445. SwingBall_Setup:
  1446.         jsr (Animate_Raw).l
  1447.         jsr (MoveSprite2).l
  1448.         jmp (Obj_Wait).l
  1449. ; ---------------------------------------------------------------------------
  1450.  
  1451. SwingBall_MoveDown:
  1452.         move.b  #_Setup2,routine(a0)
  1453.         move.w  #$300,y_vel(a0)
  1454.         move.l  #SwingBall_SetClose,$34(a0)
  1455.  
  1456. SwingBall_SetClose:
  1457.         tst.b   subtype(a0)
  1458.         bne.s   SwingBall_Return
  1459.         tst.b   render_flags(a0)
  1460.         bmi.s   SwingBall_Return
  1461.         movea.w parent3(a0),a1
  1462.         andi.b  #-$D,$38(a1)
  1463.         move.b  #setClose,anim(a1)
  1464.         move.l  #SwingBall_Return,$34(a0)
  1465.  
  1466. SwingBall_Return:
  1467.         rts
  1468. ; ---------------------------------------------------------------------------
  1469. ; Умножающийся шар
  1470. ; ---------------------------------------------------------------------------
  1471.  
  1472. ; =============== S U B R O U T I N E =======================================
  1473.  
  1474. Obj_MultiplyingBall:
  1475.         moveq   #0,d0
  1476.         move.b  routine(a0),d0
  1477.         move.w  MultiplyingBall_Index(pc,d0.w),d0
  1478.         jsr MultiplyingBall_Index(pc,d0.w)
  1479.         jmp (Draw_And_Touch_Sprite).l
  1480. ; ---------------------------------------------------------------------------
  1481.  
  1482. MultiplyingBall_Index: offsetTable
  1483.         offsetTableEntry.w MultiplyingBall_Init     ; 0
  1484.         offsetTableEntry.w MultiplyingBall_Setup        ; 2
  1485.         offsetTableEntry.w MultiplyingBall_Setup2   ; 4
  1486. ; ---------------------------------------------------------------------------
  1487.  
  1488. MultiplyingBall_Init:
  1489.         lea ObjDat3_ChasingBall(pc),a1
  1490.         jsr (SetUp_ObjAttributes).l
  1491.         sfx sfx_Laser,0,0,0
  1492.         movea.w parent3(a0),a1
  1493.         bset    #3,$38(a1)
  1494.         move.b  #setOpen,anim(a1)
  1495.         move.b  #24/2,y_radius(a0)
  1496.         move.l  #MultiplyingBall_MoveDown,$34(a0)
  1497.         move.l  #AniRaw_ChasingBall,$30(a0)
  1498.  
  1499. MultiplyingBall_Setup:
  1500.         jsr (Animate_Raw).l
  1501.         jsr (MoveSprite).l
  1502.         jmp (ObjHitFloor_DoRoutine).l
  1503. ; ---------------------------------------------------------------------------
  1504.  
  1505. MultiplyingBall_Setup2:
  1506.         jsr (Animate_Raw).l
  1507.  
  1508. MultiplyingBall_Setup3:
  1509.         jsr (MoveSprite2).l
  1510.         jmp (Obj_Wait).l
  1511. ; ---------------------------------------------------------------------------
  1512.  
  1513. MultiplyingBall_MoveDown:
  1514.         movea.w parent3(a0),a1
  1515.         andi.b  #-$D,$38(a1)
  1516.         move.b  #setClose,anim(a1)
  1517.         move.b  #_Setup2,routine(a0)
  1518.         move.w  #-$200,y_vel(a0)
  1519.         move.l  #MultiplyingBall_Setup3,address(a0)
  1520.         move.l  #MultiplyingBall_Create,$34(a0)
  1521.         rts
  1522. ; ---------------------------------------------------------------------------
  1523.  
  1524. MultiplyingBall_Create:
  1525.         clr.w   y_vel(a0)
  1526.         movea.w parent3(a0),a1
  1527.         move.w  #$27,$2E(a0)
  1528.         move.w  #$3F,$2E(a1)
  1529.         move.l  #Obj_Wait,address(a0)
  1530.         move.l  #Go_Delete_Sprite_2,$34(a0)
  1531.         move.l  #BossRobot_CheckSubroutine,$34(a1)
  1532.         lea ChildObjDat_MultiplyingBall_Extra_Left(pc),a2
  1533.         jsr (CreateChild6_Simple).l
  1534.         lea ChildObjDat_MultiplyingBall_Extra_Right(pc),a2
  1535.         jmp (CreateChild6_Simple).l
  1536. ; ---------------------------------------------------------------------------
  1537. ; Дополнительный умножающийся шар
  1538. ; ---------------------------------------------------------------------------
  1539.  
  1540. ; =============== S U B R O U T I N E =======================================
  1541.  
  1542. Obj_MultiplyingBall_Extra_Left:
  1543.         st  $40(a0)
  1544.  
  1545. Obj_MultiplyingBall_Extra_Right:
  1546.         moveq   #0,d0
  1547.         move.b  subtype(a0),d0
  1548.         lsl.w   #2,d0
  1549.         addq.w  #4,d0
  1550.         move.w  d0,$2E(a0)
  1551.         move.w  #$400,x_vel(a0)
  1552.         tst.b   $40(a0)
  1553.         beq.s   +
  1554.         neg.w   x_vel(a0)
  1555. +       lea ObjDat3_MultiplyingBall(pc),a1
  1556.         jsr (SetUp_ObjAttributes3).l
  1557.         move.l  #+,address(a0)
  1558.         move.l  #MultiplyingBall_Extra_Stop,$34(a0)
  1559.         move.l  #AniRaw_ChasingBall,$30(a0)
  1560. +       jsr (Animate_Raw).l
  1561.         jsr (MoveSprite2).l
  1562.         jsr (Obj_Wait).l
  1563.         tst.b   $41(a0)
  1564.         bne.s   +
  1565.         btst    #0,(Level_frame_counter+1).w
  1566.         beq.s   MultiplyingBall_Extra_AddToTouchList
  1567. +       jmp (Child_DrawTouch_Sprite_Explosion).l
  1568. ; ---------------------------------------------------------------------------
  1569.  
  1570. MultiplyingBall_Extra_AddToTouchList:
  1571.         jmp (Child_AddToTouchList).l
  1572. ; ---------------------------------------------------------------------------
  1573.  
  1574. MultiplyingBall_Extra_Stop:
  1575.         clr.w   x_vel(a0)
  1576.         st  $41(a0)
  1577.         move.b  #$82,collision_flags(a0)
  1578.         move.l  #MultiplyingBall_Extra_Check,$34(a0)
  1579.         tst.b   $40(a0)
  1580.         beq.s   MultiplyingBall_Extra_Check
  1581.         sfx sfx_Laser5,0,0,0
  1582.  
  1583. MultiplyingBall_Extra_Check:
  1584.         movea.w parent3(a0),a1
  1585.         btst    #4,$38(a1)
  1586.         beq.s   MultiplyingBall_Extra_Return
  1587.         tst.b   $40(a0)
  1588.         beq.s   MultiplyingBall_Extra_Remove
  1589.         cmpi.b  #(5-1)*2,subtype(a0)
  1590.         bne.s   MultiplyingBall_Extra_Remove
  1591.         sfx sfx_Flash,0,0,0
  1592.         move.b  #4,(Hyper_Sonic_flash_timer).w
  1593.  
  1594. MultiplyingBall_Extra_Remove:
  1595.         move.l  #Go_Delete_Sprite,$34(a0)
  1596.  
  1597. MultiplyingBall_Extra_Return:
  1598.         rts
  1599. ; ---------------------------------------------------------------------------
  1600. ; Щит
  1601. ; ---------------------------------------------------------------------------
  1602.  
  1603. ; =============== S U B R O U T I N E =======================================
  1604.  
  1605. Obj_BossRobot_Shield:
  1606.         lea ObjDat3_BossRobot_Shield(pc),a1
  1607.         jsr (SetUp_ObjAttributes3).l
  1608.         ori.w   #$8000,art_tile(a0)
  1609.         move.b  #2,collision_property(a0)
  1610.         move.l  #BossRobot_Shield_Shot,address(a0)
  1611.         lea (Player_1).w,a2
  1612.         movea.w parent3(a0),a1
  1613.         jsr (CalcObjAngle).l
  1614.         move.b  d0,$3C(a0)
  1615.         st  $40(a0)
  1616.         tst.b   render_flags(a1)
  1617.         spl $41(a0)
  1618.         bsr.w   BossRobot_Shield_ChgFrame
  1619.         jsr (MoveSprite_CircularSimpleRadius).l
  1620.  
  1621. BossRobot_Shield_Shot:
  1622.         movea.w parent3(a0),a1
  1623.         move.w  x_pos(a1),d0
  1624.         sub.w   x_pos(a0),d0
  1625.         asl.w   #5,d0
  1626.         move.w  d0,x_vel(a0)
  1627.         move.w  y_pos(a1),d0
  1628.         sub.w   y_pos(a0),d0
  1629.         asl.w   #5,d0
  1630.         move.w  d0,y_vel(a0)
  1631.         jsr (Find_OtherObject).l
  1632.         cmpi.w  #64,d2
  1633.         bhs.s   +
  1634.         cmpi.w  #64,d3
  1635.         bhs.s   +
  1636.         sfx sfx_Attachment2,0,0,0
  1637.         move.l  #BossRobot_Shield_Angle,address(a0)
  1638. +       jsr (MoveSprite2).l
  1639.         tst.b   $41(a0)
  1640.         bne.w   BossRobot_Shield_Return
  1641.         jmp (Child_Draw_Sprite).l
  1642. ; ---------------------------------------------------------------------------
  1643.  
  1644. BossRobot_Shield_Angle:
  1645.         lea (Player_1).w,a2
  1646.         movea.w parent3(a0),a1
  1647.         jsr (CalcObjAngle).l
  1648.         movea.w parent3(a0),a1
  1649.         btst    #3,$38(a1)
  1650.         beq.s   +
  1651.         move.b  d0,d1
  1652.         smi d2
  1653.         addi.b  #$30,d1
  1654.         cmpi.b  #$60,d1
  1655.         bhs.s   +
  1656.         moveq   #$30,d0
  1657.         tst.b   d2
  1658.         beq.s   +
  1659.         moveq   #-$30,d0
  1660. +       move.b  d0,$3C(a0)
  1661.         lea AngleLookup_BossRobot(pc),a2
  1662.         jsr (MoveSprite_AtAngleLookup).l
  1663.         bsr.s   BossRobot_Shield_CheckBreak
  1664.         bsr.s   BossRobot_Shield_ChgFrame
  1665.         jmp (Child_DrawTouch_Sprite).l
  1666. ; ---------------------------------------------------------------------------
  1667.  
  1668. BossRobot_Shield_ChgFrame:
  1669.         moveq   #0,d0
  1670.         move.b  $3C(a0),d0
  1671.         bclr    #7,d0
  1672.         sne d2
  1673.         moveq   #4,d3           ; current frame
  1674.         lea byte_7FB0A(pc),a1
  1675.         btst    #6,d0
  1676.         beq.s   +
  1677.         moveq   #10,d3          ; current frame
  1678.         addq.w  #8,a1
  1679. +
  1680. -       cmp.b   (a1)+,d0            ; d0 - current angle
  1681.         blo.s       +
  1682.         addq.w  #1,d3
  1683.         bra.s   -
  1684. ; ---------------------------------------------------------------------------
  1685. +       move.b  d3,mapping_frame(a0)
  1686.         move.b  render_flags(a0),d0
  1687.         andi.b  #-4,d0
  1688.         tst.b   d2
  1689.         beq.s   +
  1690.         ori.b   #3,d0
  1691. +       move.b  d0,render_flags(a0)
  1692.         rts
  1693. ; ---------------------------------------------------------------------------
  1694.  
  1695. byte_7FB0A:     ; frame angle
  1696.         dc.b 5, $10, $1B, $26, $31, $3C, $40, 0
  1697.         dc.b $45, $50, $5B, $66, $71, $7C, $80, 0
  1698. ; ---------------------------------------------------------------------------
  1699.  
  1700. BossRobot_Shield_CheckBreak:
  1701.         tst.b   collision_flags(a0)
  1702.         bne.s   BossRobot_Shield_Return
  1703.         tst.b   collision_property(a0)
  1704.         beq.s   BossRobot_Shield_CheckBreak_Remove
  1705.         tst.b   $1C(a0)
  1706.         bne.s   +
  1707.         move.b  #$20,$1C(a0)
  1708.         sfx sfx_Bumper,0,0,0
  1709.         jsr (Random_Number).l
  1710. +       moveq   #0,d0
  1711.         btst    #0,$1C(a0)
  1712.         bne.s   +
  1713.         addq.w  #3*2,d0
  1714. +       bsr.w   BossRobot_Shield_PalFlash
  1715.         subq.b  #1,$1C(a0)
  1716.         bne.s   BossRobot_Shield_Return
  1717.         move.b  $25(a0),collision_flags(a0)
  1718.  
  1719. BossRobot_Shield_Return:
  1720.         rts
  1721. ; ---------------------------------------------------------------------------
  1722.  
  1723. BossRobot_Shield_CheckBreak_Remove:
  1724.         movea.w parent3(a0),a1
  1725.         bclr    #4,$38(a1)
  1726.         move.b  #$F,collision_flags(a1)
  1727.         lea (Child6_CreateBossExplosion).l,a2
  1728.         jsr (CreateChild1_Normal).l
  1729.         bne.s   +
  1730.         move.b  #6,subtype(a1)
  1731. +       move.l  #Obj_FlickerMove,address(a0)
  1732.         moveq   #1<<2,d0
  1733.         jsr (Set_IndexedVelocity).l
  1734.         jmp (Draw_Sprite).l
  1735. ; ---------------------------------------------------------------------------
  1736. ; Взрывы
  1737. ; ---------------------------------------------------------------------------
  1738.  
  1739. ; =============== S U B R O U T I N E =======================================
  1740.  
  1741. Obj_DEZExplosion:
  1742.         moveq   #1,d2
  1743.         move.w  #8-1,d1
  1744.  
  1745. -       jsr (Create_New_Sprite3).l
  1746.         bne.s   +
  1747.         move.l  #Obj_DEZExplosion_Anim,address(a1)
  1748.         move.l  #Map_BossDEZExplosion,mappings(a1)
  1749.         move.w  #$530,art_tile(a1)
  1750.         move.b  #4,render_flags(a1)
  1751.         move.w  #$100,priority(a1)
  1752.         move.b  #24/2,width_pixels(a1)
  1753.         move.b  #24/2,height_pixels(a1)
  1754.         move.w  x_pos(a0),x_pos(a1)
  1755.         move.w  y_pos(a0),y_pos(a1)
  1756.         move.w  d2,d3
  1757.         asl.w   #8,d3
  1758.         neg.w   d3
  1759.         move.w  d3,y_vel(a1)
  1760.         move.b  #3,anim_frame_timer(a1)
  1761.         move.b  #$8B,collision_flags(a1)
  1762.         addq.w  #1,d2
  1763.         dbf d1,-
  1764. +       bra.s   DEZExplosion_Delete
  1765. ; ---------------------------------------------------------------------------
  1766.  
  1767. Obj_DEZExplosion_Anim:
  1768.         subq.b  #1,anim_frame_timer(a0)
  1769.         bpl.s   +
  1770.         move.b  #7,anim_frame_timer(a0)
  1771.         addq.b  #1,mapping_frame(a0)
  1772.         cmpi.b  #7,mapping_frame(a0)
  1773.         beq.s   DEZExplosion_Delete
  1774.         cmpi.b  #5,mapping_frame(a0)
  1775.         bne.s   +
  1776.         move.b  #0,collision_flags(a0)
  1777. +       jsr (MoveSprite).l
  1778.         jmp (Draw_And_Touch_Sprite).l
  1779. ; ---------------------------------------------------------------------------
  1780.  
  1781. DEZExplosion_Delete:
  1782.         jmp (Delete_Current_Sprite).l
  1783.  
  1784. ; =============== S U B R O U T I N E =======================================
  1785.  
  1786. Obj_DEZCircularExplosion:
  1787.         moveq   #0,d2
  1788.         move.w  #8-1,d1
  1789.  
  1790. -       jsr (Create_New_Sprite3).l
  1791.         bne.s   +
  1792.         move.l  #Obj_DEZCircularExplosion_Anim,address(a1)
  1793.         move.l  #Map_BossDEZExplosion,mappings(a1)
  1794.         move.w  #$8530,art_tile(a1)
  1795.         move.b  #4,render_flags(a1)
  1796.         move.w  #$100,priority(a1)
  1797.         move.b  #24/2,width_pixels(a1)
  1798.         move.b  #24/2,height_pixels(a1)
  1799.         move.w  x_pos(a0),x_pos(a1)
  1800.         move.w  y_pos(a0),y_pos(a1)
  1801.         move.b  #3,anim_frame_timer(a1)
  1802.         move.b  #8,$3A(a1)
  1803.         move.b  d2,angle(a1)
  1804.         move.b  #8,$40(a1)
  1805.         addi.w  #$20,d2
  1806.         dbf d1,-
  1807. +       bra.s   DEZExplosion_Delete
  1808. ; ---------------------------------------------------------------------------
  1809.  
  1810. Obj_DEZCircularExplosion_Anim:
  1811.         subq.b  #1,anim_frame_timer(a0)
  1812.         bpl.s   +
  1813.         move.b  #7,anim_frame_timer(a0)
  1814.         addq.b  #1,mapping_frame(a0)
  1815.         subq.b  #1,$3A(a0)
  1816.         cmpi.b  #7,mapping_frame(a0)
  1817.         beq.w   DEZExplosion_Delete
  1818. +       move.b  $40(a0),d0
  1819.         sub.b   d0,angle(a0)
  1820.         move.b  angle(a0),d0
  1821.         jsr (GetSineCosine).l
  1822.         moveq   #0,d2
  1823.         move.b  $3A(a0),d2
  1824.         asr.w   d2,d0
  1825.         add.w   d0,x_pos(a0)
  1826.         asr.w   d2,d1
  1827.         add.w   d1,y_pos(a0)
  1828.         jmp (Draw_Sprite).l
  1829.  
  1830. ; =============== S U B R O U T I N E =======================================
  1831.  
  1832. Obj_BossRobot_FlickerMove:
  1833.         lea ObjDat3_BossRobot_Flicker(pc),a1
  1834.         jsr (SetUp_ObjAttributes3).l
  1835.         move.l  #Obj_FlickerMove,address(a0)
  1836.         moveq   #0,d0
  1837.         move.b  subtype(a0),d0
  1838.         lsr.b   #1,d0
  1839.         addi.b  #$11,d0
  1840.         move.b  d0,mapping_frame(a0)
  1841.         moveq   #2<<2,d0
  1842.         jsr (Set_IndexedVelocity).l
  1843.         jmp (Draw_Sprite).l
  1844.  
  1845. ; =============== S U B R O U T I N E =======================================
  1846.  
  1847. Obj_ChasingBall_SendPos:
  1848.         move.w  (Pos_objtable_index).w,d0
  1849.         lea (Pos_objTable).w,a1
  1850.         lea (a1,d0.w),a1
  1851.         move.w  x_pos(a0),(a1)+
  1852.         move.w  y_pos(a0),(a1)+
  1853.         addq.b  #4,(Pos_objtable_byte).w
  1854.         rts
  1855. ; ---------------------------------------------------------------------------
  1856.  
  1857. Obj_ChasingBall_SendPos2:
  1858.         move.w  (Pos_obj2table_index).w,d0
  1859.         lea (Pos_obj2Table).w,a1
  1860.         lea (a1,d0.w),a1
  1861.         move.w  x_pos(a0),(a1)+
  1862.         move.w  y_pos(a0),(a1)+
  1863.         addq.b  #4,(Pos_obj2table_byte).w
  1864.         rts
  1865. ; ---------------------------------------------------------------------------
  1866.  
  1867. Obj_ChasingBall_CopyPos:
  1868.         move.w  (Pos_objtable_index).w,d0
  1869.         lea (Pos_objtable).w,a1
  1870.         bra.s   Obj_ChasingBall_CopyPosSet
  1871. ; ---------------------------------------------------------------------------
  1872.  
  1873. Obj_ChasingBall_CopyPos2:
  1874.         move.w  (Pos_obj2table_index).w,d0
  1875.         lea (Pos_obj2table).w,a1
  1876.  
  1877. Obj_ChasingBall_CopyPosSet:
  1878.         sub.b   subtype(a0),d0
  1879.         lea (a1,d0.w),a1
  1880.         move.w  (a1)+,x_pos(a0)
  1881.         move.w  (a1)+,y_pos(a0)
  1882.         rts
  1883.  
  1884. ; =============== S U B R O U T I N E =======================================
  1885.  
  1886. BossRobot_PalFlash:
  1887.         lea LoadBossRobot_PalRAM(pc),a1
  1888.         lea LoadBossRobot_PalCycle(pc,d0.w),a2
  1889.         jmp (CopyWordData_6).l
  1890. ; ---------------------------------------------------------------------------
  1891.  
  1892. LoadBossRobot_PalRAM:
  1893.         dc.w Normal_palette_line_2+6
  1894.         dc.w Normal_palette_line_2+8
  1895.         dc.w Normal_palette_line_2+$18
  1896.         dc.w Normal_palette_line_2+$1A
  1897.         dc.w Normal_palette_line_2+$1C
  1898.         dc.w Normal_palette_line_2+$1E
  1899. LoadBossRobot_PalCycle:
  1900.         dc.w $E, 8, $866, $644, $422, 0
  1901.         dc.w $888, $AAA, $888, $AAA, $CCC, $EEE
  1902.  
  1903. ; =============== S U B R O U T I N E =======================================
  1904.  
  1905. BossRobot_Shield_PalFlash:
  1906.         lea LoadBossRobot_Shield_PalRAM(pc),a1
  1907.         lea LoadBossRobot_Shield_PalCycle(pc,d0.w),a2
  1908.         jmp (CopyWordData_3).l
  1909. ; ---------------------------------------------------------------------------
  1910.  
  1911. LoadBossRobot_Shield_PalRAM:
  1912.         dc.w Normal_palette_line_2+$10
  1913.         dc.w Normal_palette_line_2+$12
  1914.         dc.w Normal_palette_line_2+$14
  1915. LoadBossRobot_Shield_PalCycle:
  1916.         dc.w $EC0, $A80, $860
  1917.         dc.w $E0E, $A0A, $808
  1918.  
  1919. ; =============== S U B R O U T I N E =======================================
  1920.  
  1921. ObjDat3_BossRobot:
  1922.         dc.l Map_BossRobot
  1923.         dc.w $22B0
  1924.         dc.w $200
  1925.         dc.b 80/2
  1926.         dc.b 80/2
  1927.         dc.b 0
  1928.         dc.b $F
  1929. ObjDat3_BossRobot_Shield:
  1930.         dc.w $180
  1931.         dc.b 48/2
  1932.         dc.b 48/2
  1933.         dc.b 4
  1934.         dc.b 7
  1935. ObjDat3_BossRobot_Flicker:
  1936.         dc.w 0
  1937.         dc.b 80/2
  1938.         dc.b 80/2
  1939.         dc.b 4
  1940.         dc.b 0
  1941. ObjDat3_ShootingBall_Wave:
  1942.         dc.l Map_BossBallWave
  1943.         dc.w $83A1
  1944.         dc.w $280
  1945.         dc.b 64/2
  1946.         dc.b 64/2
  1947.         dc.b 0
  1948.         dc.b 0
  1949. ObjDat3_ChasingBall:
  1950.         dc.l Map_BossBall
  1951.         dc.w $350
  1952.         dc.w $280
  1953.         dc.b 32/2
  1954.         dc.b 24/2
  1955.         dc.b 1
  1956.         dc.b $82
  1957. ObjDat3_ShootingBall_Missile:
  1958.         dc.l Map_BossBall
  1959.         dc.w $350
  1960.         dc.w $280
  1961.         dc.b 16/2
  1962.         dc.b 16/2
  1963.         dc.b 0
  1964.         dc.b $8B
  1965. ObjDat3_ChasingBall_Trail:
  1966.         dc.w $280
  1967.         dc.b 16/2
  1968.         dc.b 16/2
  1969.         dc.b 0
  1970.         dc.b $8B
  1971. ObjDat3_FallingWaitBall_Aim:
  1972.         dc.l Map_BossAim
  1973.         dc.w $E394
  1974.         dc.w 0
  1975.         dc.b 44/2
  1976.         dc.b 44/2
  1977.         dc.b 0
  1978.         dc.b 0
  1979. ObjDat3_MultiplyingBall:
  1980.         dc.w $280
  1981.         dc.b 32/2
  1982.         dc.b 24/2
  1983.         dc.b 1
  1984.         dc.b 0
  1985. AniRaw_ChasingBall:
  1986.         dc.b 1, 1, 2, 1, 5, $FC
  1987. AniRaw_FallingWaitBall_Aim:
  1988.         dc.b 0, 0, 1, $FC
  1989. AniRaw_ShootingBall_Wave:
  1990.         dc.b    1, 0, 1, 2, 3, 4, $F4,0
  1991. ChildObjDat_ChasingBall_Trail:
  1992.         dc.w 4-1
  1993.         dc.l Obj_ChasingBall_Trail
  1994. ChildObjDat_ChasingBall_Trail2:
  1995.         dc.w 4-1
  1996.         dc.l Obj_ChasingBall_Trail_2
  1997. ChildObjDat_RepulsionBall_Trail:
  1998.         dc.w 12-1
  1999.         dc.l Obj_RepulsionBall_Trail
  2000. ChildObjDat_FallingBall:
  2001.         dc.w 1-1
  2002.         dc.l Obj_FallingBall
  2003. ChildObjDat_CircularBall:
  2004.         dc.w 2-1
  2005.         dc.l Obj_CircularChaseBall
  2006. ChildObjDat_ShootingBall:
  2007.         dc.w 1-1
  2008.         dc.l Obj_ShootingBall
  2009. ChildObjDat_ShootingBall_Wave:
  2010.         dc.w 2-1
  2011.         dc.l Obj_ShootingBall_Wave
  2012. ChildObjDat_ShootingBall_Missile:
  2013.         dc.w 2-1
  2014.         dc.l Obj_ShootingBall_Missile
  2015. ChildObjDat_RepulsionBall:
  2016.         dc.w 1-1
  2017.         dc.l Obj_RepulsionBall
  2018. ChildObjDat_BossRobot_CreateShield_Process:
  2019.         dc.w 1-1
  2020.         dc.l Obj_BossRobot_CreateShield_Process
  2021. ChildObjDat_BossRobot_Shield:
  2022.         dc.w 1-1
  2023.         dc.l Obj_BossRobot_Shield
  2024. ChildObjDat_FallingWaitBall_Aim:
  2025.         dc.w 1-1
  2026.         dc.l Obj_FallingWaitBall_Aim
  2027. ChildObjDat_FallingWaitBall_Intro:
  2028.         dc.w 27-1
  2029.         dc.l Obj_FallingWaitBall_Intro
  2030. ChildObjDat_MultiplyingBall:
  2031.         dc.w 1-1
  2032.         dc.l Obj_MultiplyingBall
  2033. ChildObjDat_MultiplyingBall_Extra_Left:
  2034.         dc.w 5-1
  2035.         dc.l Obj_MultiplyingBall_Extra_Left
  2036. ChildObjDat_MultiplyingBall_Extra_Right:
  2037.         dc.w 5-1
  2038.         dc.l Obj_MultiplyingBall_Extra_Right
  2039. ChildObjDat_SwingBall:
  2040.         dc.w 2-1
  2041.         dc.l Obj_SwingBall
  2042.         dc.b 22
  2043.         dc.b 0
  2044.         dc.l Obj_SwingBall
  2045.         dc.b -22
  2046.         dc.b 0
  2047. ChildObjDat_DEZExplosion:
  2048.         dc.w 1-1
  2049.         dc.l Obj_DEZExplosion
  2050. ChildObjDat_DEZCircularExplosion:
  2051.         dc.w 1-1
  2052.         dc.l Obj_DEZCircularExplosion
  2053. ChildObjDat_DEZGravitySwitch:
  2054.         dc.w 2-1
  2055.         dc.l Obj_DEZGravitySwitch
  2056. ChildObjDat_BossRobot_FlickerMove:
  2057.         dc.w 6-1
  2058.         dc.l Obj_BossRobot_FlickerMove
  2059. AngleLookup_BossRobot:
  2060.         dc.b 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, $A, $B, $C, $D, $D, $E, $F, $10, $11, $12
  2061.         dc.b $13, $14, $15, $15, $16, $17, $18, $19, $19, $1A, $1B, $1C, $1C, $1D, $1E, $1E, $1F, $20, $20, $21
  2062.         dc.b $21, $22, $22, $23, $23, $24, $24, $25, $25, $25, $26, $26, $26, $27, $27, $27, $27, $27, $28, $28
  2063.         dc.b $28, $28, $28, $28
  2064. PLC_BossRobot: plrlistheader
  2065.         plreq $3A1, ArtKosM_BossBallWave
  2066. PLC_BossRobot_End
  2067. ; ---------------------------------------------------------------------------
  2068.  
  2069.         include "Objects/Boss/Object Data/Anim - Boss.asm"
  2070.         include "Objects/Boss/Object Data/Map - Boss.asm"
  2071.         include "Objects/Boss/Object Data/Map - Ball.asm"
  2072.         include "Objects/Boss/Object Data/Map - Ball Wave.asm"
  2073.         include "Objects/Boss/Object Data/Map - Aim.asm"
  2074.         include "Objects/Boss/Object Data/Map - Explosion.asm"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement