Advertisement
TheBlad768

S3K Boss (DEZ)

Sep 3rd, 2018
443
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; ---------------------------------------------------------------------------
  2. ; Босс-смертельный шар
  3. ; ---------------------------------------------------------------------------
  4.  
  5. ; Hits
  6. BossRobot_Hits  = 12
  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  obRoutine(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.         move.b  #-1,$29(a0)
  40.         move.b  #1,(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+$10).w,d0
  48.         sub.w   $10(a0),d0
  49.         asl.w   #4,d0
  50.         move.w  d0,$18(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.         move.l  #BossRobot_Robotnik_Intro_Locret,$34(a0)
  61.         lea ChildObjDat_Robotnik_Intro(pc),a2
  62.         jmp (CreateChild6_Simple).l
  63. ; ---------------------------------------------------------------------------
  64.  
  65. BossRobot_Robotnik_Intro_FindRobotnik_Start:
  66.         sfx sfx_Boom,0,0,0
  67.         move.w  #$F,$2E(a0)
  68.         move.l  #BossRobot_Robotnik_Intro_FindRobotnik,$34(a0)
  69.         rts
  70. ; ---------------------------------------------------------------------------
  71.  
  72. BossRobot_Robotnik_Intro_FindRobotnik:
  73.         movea.w $44(a0),a1
  74.         move.w  $10(a1),d0
  75.         sub.w   $10(a0),d0
  76.         subq.w  #8,d0
  77.         bne.s   +
  78.         move.l  #BossRobot_Robotnik_Intro_Locret,$34(a0)
  79. +       asl.w   #4,d0
  80.         move.w  d0,$18(a0)
  81.  
  82. BossRobot_Robotnik_Intro_Locret:
  83.         rts
  84.  
  85. ; =============== S U B R O U T I N E =======================================
  86.  
  87. BossRobot_Startup:
  88.         move.b  #BossRobot_Hits,$29(a0)
  89.         move.w  #$4F,$2E(a0)
  90.  
  91. BossRobot_SetSubroutine:
  92.         moveq   #0,d0
  93.         move.b  $30(a0),d0
  94.         addq.b  #1,$30(a0)
  95.         lea BossRobot_SetMovement(pc),a1
  96.         cmpi.b  #BossRobot_Hits/2,$29(a0)
  97.         bhs.s   +
  98.         lea BossRobot_SetMovement2(pc),a1
  99. +       move.b  (a1,d0.w),d0
  100.         bpl.s   +
  101.         clr.b   $30(a0)
  102.         bra.s   BossRobot_Startup_Locret
  103. ; ---------------------------------------------------------------------------
  104. +       lsl.w   #2,d0
  105.         move.l  BossRobot_Movement(pc,d0.w),$34(a0)
  106.         move.b  #_Setup1,5(a0)
  107.         clr.w   $18(a0)
  108.         clearRAM3 Pos_objtable_Start, Pos_objtable_End
  109.  
  110. BossRobot_Startup_Locret:
  111.         rts
  112. ; ---------------------------------------------------------------------------
  113.  
  114. BossRobot_SetMovement:
  115.         dc.b 0
  116.         dc.b 2
  117.         dc.b 1
  118.         dc.b 2
  119.         dc.b 0
  120.         dc.b 3
  121.         dc.b 2
  122.         dc.b 1
  123.         dc.b 2
  124.         dc.b 0
  125.         dc.b 3
  126.         dc.b 1
  127.         dc.w -1 ; Конец
  128. BossRobot_SetMovement2:
  129.         dc.b 4
  130.         dc.b 2
  131.         dc.b 3
  132.         dc.b 2
  133.         dc.b 5
  134.         dc.b 4
  135.         dc.b 3
  136.         dc.b 2
  137.         dc.b 5
  138.         dc.b 3
  139.         dc.w -1 ; Конец
  140. BossRobot_Movement:
  141.         dc.l BossRobot_MoveFallingBall_Start        ; 0
  142.         dc.l BossRobot_MoveCircularChaseBall_Start  ; 1
  143.         dc.l BossRobot_MoveRepulsionBall_Start      ; 2
  144.         dc.l BossRobot_MoveShootingBall_Start       ; 3
  145. ; Extra
  146.         dc.l BossRobot_MoveFallingWaitBall_Start    ; 4
  147.         dc.l BossRobot_MoveSwingBall_Start      ; 5
  148. ; ---------------------------------------------------------------------------
  149. ; Босс атакует с помощью падающего шара
  150. ; ---------------------------------------------------------------------------
  151.  
  152. ; =============== S U B R O U T I N E =======================================
  153.  
  154. BossRobot_MoveFallingBall_Start:
  155.         move.b  #8,$39(a0)
  156.  
  157. BossRobot_MoveFallingBall_FindSonic:
  158.         move.b  #_Setup2,5(a0)
  159.         move.w  #$1F,$2E(a0)
  160.         move.l  #BossRobot_MoveFallingBall_Attack,$34(a0)
  161.         moveq   #sfx_Boom,d0
  162.         jmp (Play_Sound_2).l
  163. ; ---------------------------------------------------------------------------
  164.  
  165. BossRobot_MoveFallingBall_Attack:
  166.         move.b  #_Setup1,5(a0)
  167.         move.w  #0,$18(a0)
  168.         move.w  #$1F,$2E(a0)
  169.         move.l  #BossRobot_MoveFallingBall_FindSonic,$34(a0)
  170.         subq.b  #1,$39(a0)
  171.         bne.s   +
  172.         move.l  #BossRobot_SetSubroutine,$34(a0)
  173. +       lea ChildObjDat_FallingBall(pc),a2
  174.         jmp (CreateChild6_Simple).l
  175. ; ---------------------------------------------------------------------------
  176. ; Босс атакует с помощью циркулирующих шаров
  177. ; ---------------------------------------------------------------------------
  178.  
  179. ; =============== S U B R O U T I N E =======================================
  180.  
  181. BossRobot_MoveCircularChaseBall_Start:
  182.         move.l  #BossRobot_MoveCircularChaseBall_CheckPosition,$34(a0)
  183.         sfx sfx_Boom,0,0,0
  184.  
  185. BossRobot_MoveCircularChaseBall_CheckPosition:
  186.         move.w  (Camera_X_pos).w,d0
  187.         addi.w  #$A0,d0
  188.         sub.w   $10(a0),d0
  189.         bne.s   +
  190.         move.l  #BossRobot_MoveCircularChaseBall_Create,$34(a0)
  191. +       asl.w   #4,d0
  192.         move.w  d0,$18(a0)
  193.  
  194. BossRobot_MoveCircularChaseBall_Wait:
  195.         rts
  196. ; ---------------------------------------------------------------------------
  197.  
  198. BossRobot_MoveCircularChaseBall_Create:
  199.         move.l  #BossRobot_MoveCircularChaseBall_Wait,$34(a0)
  200.         lea ChildObjDat_CircularBall(pc),a2
  201.         jmp (CreateChild6_Simple).l
  202. ; ---------------------------------------------------------------------------
  203.  
  204. BossRobot_MoveCircularChaseBall_SetMove:
  205.         move.l  #BossRobot_MoveCircularChaseBall_Move,$34(a0)
  206.         move.w  (RNG_seed).w,d0
  207.         move.w  #$80,$18(a0)
  208.         andi.w  #1,d0
  209.         bne.s   BossRobot_MoveCircularChaseBall_Move
  210.         neg.w   $18(a0)
  211.  
  212. BossRobot_MoveCircularChaseBall_Move:
  213.         move.w  (Camera_X_pos).w,d0
  214.         tst.w   $18(a0)
  215.         bpl.s   +
  216.         addi.w  #$40,d0         ; Проверить левую сторону
  217.         cmp.w   $10(a0),d0
  218.         bhs.s   ++
  219.         bra.s   +++
  220. +       addi.w  #$100,d0        ; Проверить правую сторону
  221.         cmp.w   $10(a0),d0
  222.         bhs.s   ++
  223. +       neg.w   $18(a0)
  224. +       rts
  225. ; ---------------------------------------------------------------------------
  226. ; Босс атакует с помощью отталкивающихся шаров
  227. ; ---------------------------------------------------------------------------
  228.  
  229. ; =============== S U B R O U T I N E =======================================
  230.  
  231. BossRobot_MoveRepulsionBall_Start:
  232.         move.l  #BossRobot_MoveRepulsionBall_CheckPosition,$34(a0)
  233.         sfx sfx_Boom,0,0,0
  234.         move.w  (RNG_seed).w,d0
  235.         andi.w  #6,d0
  236.         move.w  d0,$3C(a0)
  237.         move.w  BossRobot_SetPos(pc,d0.w),$3A(a0)
  238.  
  239. BossRobot_MoveRepulsionBall_CheckPosition:
  240.         move.w  (Camera_X_pos).w,d0
  241.         add.w   $3A(a0),d0
  242.         sub.w   $10(a0),d0
  243.         bne.s   +
  244.         move.l  #BossRobot_MoveRepulsionBall_Create,$34(a0)
  245. +       asl.w   #4,d0
  246.         move.w  d0,$18(a0)
  247.  
  248. BossRobot_MoveRepulsionBall_Wait:
  249.         rts
  250. ; ---------------------------------------------------------------------------
  251.  
  252. BossRobot_SetPos:
  253.         dc.w $40        ; Левая сторона
  254.         dc.w $A0    ; Середина
  255.         dc.w $100   ; Правая сторона
  256.         dc.w $A0    ; Середина
  257. BossRobot_SetPos2:
  258.         dc.w -$40   ; Левая сторона
  259.         dc.w -$40   ; Середина
  260.         dc.w $180   ; Правая сторона
  261.         dc.w $180   ; Середина
  262. BossRobot_SetPos3:
  263.         dc.w $40        ; Левая сторона
  264.         dc.w $40        ; Середина
  265.         dc.w $100   ; Правая сторона
  266.         dc.w $100   ; Середина
  267. ; ---------------------------------------------------------------------------
  268.  
  269. BossRobot_MoveRepulsionBall_Create:
  270.         move.w  #$3F,$2E(a0)
  271.         move.l  #BossRobot_MoveRepulsionBall_SetHidePosition,$34(a0)
  272.         lea ChildObjDat_RepulsionBall(pc),a2
  273.         jmp (CreateChild6_Simple).l
  274. ; ---------------------------------------------------------------------------
  275.  
  276. BossRobot_MoveRepulsionBall_SetHidePosition:
  277.         move.b  #setClose,$20(a0)
  278.         sfx sfx_Boom,0,0,0
  279.         move.l  #BossRobot_MoveRepulsionBall_HidePosition,$34(a0)
  280.         move.w  $3C(a0),d0
  281.         move.w  BossRobot_SetPos2(pc,d0.w),$3A(a0)
  282.  
  283. BossRobot_MoveRepulsionBall_HidePosition:
  284.         move.w  (Camera_X_pos).w,d0
  285.         add.w   $3A(a0),d0
  286.         sub.w   $10(a0),d0
  287.         bne.s   +
  288.         move.l  #BossRobot_MoveRepulsionBall_Wait,$34(a0)
  289. +       asl.w   #4,d0
  290.         move.w  d0,$18(a0)
  291.         rts
  292. ; ---------------------------------------------------------------------------
  293.  
  294. BossRobot_MoveRepulsionBall_SetReturnPosition:
  295.         sfx sfx_Boom,0,0,0
  296.         move.l  #BossRobot_MoveRepulsionBall_ReturnPosition,$34(a0)
  297.         move.w  $3C(a0),d0
  298.         move.w  BossRobot_SetPos3(pc,d0.w),$3A(a0)
  299.  
  300. BossRobot_MoveRepulsionBall_ReturnPosition:
  301.         move.w  (Camera_X_pos).w,d0
  302.         add.w   $3A(a0),d0
  303.         sub.w   $10(a0),d0
  304.         bne.s   +
  305.         move.l  #BossRobot_SetSubroutine,$34(a0)
  306. +       asl.w   #4,d0
  307.         move.w  d0,$18(a0)
  308.         rts
  309. ; ---------------------------------------------------------------------------
  310. ; Босс атакует с помощью циркулирующих шаров
  311. ; ---------------------------------------------------------------------------
  312.  
  313. ; =============== S U B R O U T I N E =======================================
  314.  
  315. BossRobot_MoveShootingBall_Start:
  316.         move.w  (Camera_X_pos).w,d0
  317.         addi.w  #$A0,d0
  318.         move.w  #$40,$3A(a0)
  319.         sub.w   $10(a0),d0
  320.         bgt.s   +
  321.         move.w  #$100,$3A(a0)
  322. +       move.l  #BossRobot_MoveShootingBall_CheckPosition,$34(a0)
  323.         sfx sfx_Boom,0,0,0
  324.  
  325. BossRobot_MoveShootingBall_CheckPosition:
  326.         move.w  (Camera_X_pos).w,d0
  327.         add.w   $3A(a0),d0
  328.         sub.w   $10(a0),d0
  329.         bne.s   +
  330.         move.l  #BossRobot_MoveShootingBall_Create,$34(a0)
  331. +       asl.w   #4,d0
  332.         move.w  d0,$18(a0)
  333.         rts
  334. ; ---------------------------------------------------------------------------
  335.  
  336. BossRobot_MoveShootingBall_Create:
  337.         move.w  $3A(a0),d0
  338.         move.w  #-$40,d1
  339.         cmpi.w  #$100,d0
  340.         bne.s   +
  341.         move.w  #$180,d1
  342. +       move.w  d1,$3A(a0)
  343.         move.w  #$6F,$2E(a0)
  344.         move.l  #BossRobot_MoveShootingBall_HidePosition,$34(a0)
  345.         lea ChildObjDat_ShootingBall(pc),a2
  346.         jmp (CreateChild6_Simple).l
  347. ; ---------------------------------------------------------------------------
  348.  
  349. BossRobot_MoveShootingBall_HidePosition:
  350.         move.w  (Camera_X_pos).w,d0
  351.         add.w   $3A(a0),d0
  352.         sub.w   $10(a0),d0
  353.         bne.s   +
  354.         move.l  #BossRobot_MoveShootingBall_Wait,$34(a0)
  355. +       asl.w   #4,d0
  356.         move.w  d0,$18(a0)
  357.  
  358. BossRobot_MoveShootingBall_Wait:
  359.         rts
  360. ; ---------------------------------------------------------------------------
  361.  
  362. BossRobot_MoveShootingBall_SetReturnPosition:
  363.         sfx sfx_Boom,0,0,0
  364.         move.l  #BossRobot_MoveRepulsionBall_ReturnPosition,$34(a0)
  365.         move.w  $3A(a0),d0
  366.         move.w  #$40,d1
  367.         cmpi.w  #$180,d0
  368.         bne.s   +
  369.         move.w  #$100,d1
  370. +       move.w  d1,$3A(a0)
  371.         rts
  372. ; ---------------------------------------------------------------------------
  373. ; Выстрел кучей падающих шаров
  374. ; ---------------------------------------------------------------------------
  375.  
  376. ; =============== S U B R O U T I N E =======================================
  377.  
  378. BossRobot_MoveFallingWaitBall_Start:
  379.         move.w  (Camera_X_pos).w,d0
  380.         addi.w  #$A0,d0
  381.         move.w  #$40,$3A(a0)
  382.         sub.w   $10(a0),d0
  383.         bgt.s   +
  384.         move.w  #$100,$3A(a0)
  385. +       move.l  #BossRobot_MoveFallingWaitBall_CheckPosition,$34(a0)
  386.         sfx sfx_Boom,0,0,0
  387.  
  388. BossRobot_MoveFallingWaitBall_CheckPosition:
  389.         move.w  (Camera_X_pos).w,d0
  390.         add.w   $3A(a0),d0
  391.         sub.w   $10(a0),d0
  392.         bne.s   +
  393.         move.w  #$DF,$2E(a0)
  394.         move.b  #setOpen,$20(a0)
  395.         lea ChildObjDat_FallingWaitBall_Intro(pc),a2
  396.         jsr (CreateChild6_Simple).l
  397.         move.l  #BossRobot_MoveFallingWaitBall_SetHidePosition,$34(a0)
  398. +       asl.w   #4,d0
  399.         move.w  d0,$18(a0)
  400.         rts
  401. ; ---------------------------------------------------------------------------
  402.  
  403. BossRobot_MoveFallingWaitBall_SetHidePosition:
  404.         move.w  (Camera_X_pos).w,d0
  405.         addi.w  #$A0,d0
  406.         move.w  #-$40,$3A(a0)
  407.         sub.w   $10(a0),d0
  408.         bgt.s   +
  409.         move.w  #$180,$3A(a0)
  410. +       move.b  #setClose,$20(a0)
  411.         move.l  #BossRobot_MoveFallingWaitBall_CheckHidePosition,$34(a0)
  412.         sfx sfx_Boom,0,0,0
  413.  
  414. BossRobot_MoveFallingWaitBall_CheckHidePosition:
  415.         move.w  (Camera_X_pos).w,d0
  416.         add.w   $3A(a0),d0
  417.         sub.w   $10(a0),d0
  418.         bne.s   +
  419.         move.b  #3,$39(a0)
  420.         move.w  #$F,$2E(a0)
  421.         move.l  #BossRobot_MoveFallingWaitBall_Create,$34(a0)
  422. +       asl.w   #4,d0
  423.         move.w  d0,$18(a0)
  424.         rts
  425. ; ---------------------------------------------------------------------------
  426.  
  427. BossRobot_MoveFallingWaitBall_Create:
  428.         move.w  #$EF,$2E(a0)
  429.         bsr.s   BossRobot_MoveFallingWaitBall_CreateBallAim
  430.         subq.b  #1,$39(a0)
  431.         bne.s   BossRobot_MoveFallingWaitBall_Locret
  432.         move.l  #BossRobot_MoveFallingWaitBall_Return,$34(a0)
  433.  
  434. BossRobot_MoveFallingWaitBall_Locret:
  435.         rts
  436. ; ---------------------------------------------------------------------------
  437.  
  438. BossRobot_MoveFallingWaitBall_CreateBallAim:
  439.         move.w  (RNG_seed).w,d0
  440.         andi.w  #$E,d0
  441.         move.w  ObjDat_FallingWaitBall_Xpos_Random(pc,d0.w),$3C(a0)
  442.         lea ObjDat_FallingWaitBall_Xpos(pc),a2
  443.         cmpi.w  #$90,$3C(a0)
  444.         blo.s       +
  445.         lea ObjDat_FallingWaitBall_Xpos_Negative(pc),a2
  446. +       moveq   #0,d2
  447.         move.w  #9-1,d1
  448. -       jsr (Create_New_Sprite3).l
  449.         bne.s   +
  450.         move.l  #Obj_FallingWaitBall,(a1)
  451.         move.w  a0,$46(a1)
  452. -       move.w  (a2)+,d0
  453.         cmp.w   $3C(a0),d0
  454.         beq.s   -
  455.         add.w   (Camera_X_pos).w,d0
  456.         move.w  d0,$10(a1)
  457.         move.w  (Camera_Y_pos).w,d0
  458.         subi.w  #$20,d0
  459.         move.w  d0,$14(a1)
  460.         move.b  d2,$2C(a1)
  461.         addq.w  #2,d2
  462.         dbf d1,--
  463.         move.w  $3C(a0),$3E(a1)
  464. +       rts
  465. ; ---------------------------------------------------------------------------
  466.  
  467. ObjDat_FallingWaitBall_Xpos_Random:
  468.         dc.w $50
  469.         dc.w $F0
  470.         dc.w $90
  471.         dc.w $B0
  472.         dc.w $70
  473.         dc.w $110
  474.         dc.w $30
  475.         dc.w $D0
  476. ObjDat_FallingWaitBall_Xpos:
  477.         dc.w $10
  478.         dc.w $30
  479.         dc.w $50
  480.         dc.w $70
  481.         dc.w $90
  482.         dc.w $B0
  483.         dc.w $D0
  484.         dc.w $F0
  485.         dc.w $110
  486.         dc.w $130
  487. ObjDat_FallingWaitBall_Xpos_Negative:
  488.         dc.w $130
  489.         dc.w $110
  490.         dc.w $F0
  491.         dc.w $D0
  492.         dc.w $B0
  493.         dc.w $90
  494.         dc.w $70
  495.         dc.w $50
  496.         dc.w $30
  497.         dc.w $10
  498. ; ---------------------------------------------------------------------------
  499.  
  500. BossRobot_MoveFallingWaitBall_Return:
  501.         move.w  (Camera_X_pos).w,d0
  502.         addi.w  #$A0,d0
  503.         move.w  #$40,$3A(a0)
  504.         sub.w   $10(a0),d0
  505.         bgt.s   +
  506.         move.w  #$100,$3A(a0)
  507. +       move.b  #setClose,$20(a0)
  508.         move.l  #BossRobot_MoveFallingWaitBall_CheckReturnPosition,$34(a0)
  509.         sfx sfx_Boom,0,0,0
  510.  
  511. BossRobot_MoveFallingWaitBall_CheckReturnPosition:
  512.         move.w  (Camera_X_pos).w,d0
  513.         add.w   $3A(a0),d0
  514.         sub.w   $10(a0),d0
  515.         bne.s   +
  516.         move.w  #$F,$2E(a0)
  517.         move.l  #BossRobot_SetSubroutine,$34(a0)
  518. +       asl.w   #4,d0
  519.         move.w  d0,$18(a0)
  520.         rts
  521. ; ---------------------------------------------------------------------------
  522. ; Выстрел кучей падающих шаров
  523. ; ---------------------------------------------------------------------------
  524.  
  525. ; =============== S U B R O U T I N E =======================================
  526.  
  527. BossRobot_MoveSwingBall_Start:
  528.         move.b  #8,$39(a0)
  529.  
  530. BossRobot_MoveSwingBall_FindSonic:
  531.         move.b  #_Setup2,5(a0)
  532.         move.w  #$1F,$2E(a0)
  533.         move.l  #BossRobot_MoveSwingBall_Attack,$34(a0)
  534.         clearRAM3 Pos_objtable_Start, Pos_objtable_End
  535.         moveq   #sfx_Boom,d0
  536.         jmp (Play_Sound_2).l
  537. ; ---------------------------------------------------------------------------
  538.  
  539. BossRobot_MoveSwingBall_Attack:
  540.         move.b  #_Setup1,5(a0)
  541.         move.w  #0,$18(a0)
  542.         move.w  #$5F,$2E(a0)
  543.         move.l  #BossRobot_MoveSwingBall_FindSonic,$34(a0)
  544.         subq.b  #1,$39(a0)
  545.         bne.s   +
  546.         move.l  #BossRobot_SetSubroutine,$34(a0)
  547. +       lea ChildObjDat_SwingBall(pc),a2
  548.         jmp (CreateChild1_Normal).l
  549. ; ---------------------------------------------------------------------------
  550. ; Проверка урона
  551. ; ---------------------------------------------------------------------------
  552.  
  553. ; =============== S U B R O U T I N E =======================================
  554.  
  555. BossRobot_CheckTouch:
  556.         tst.b   $28(a0)
  557.         bne.s   BossRobot_CheckTouch_Locret
  558.         move.b  $29(a0),d0
  559.         beq.s   BossRobot_CheckTouch_Explosive
  560.         tst.b   $1C(a0)
  561.         bne.s   +
  562.         move.b  #$80,$1C(a0)
  563.         sfx sfx_HitBoss,0,0,0
  564.         cmpi.b  #BossRobot_Hits/2-1,d0
  565.         bne.s   +
  566.         clr.b   $30(a0)
  567. +       moveq   #0,d0
  568.         btst    #0,$1C(a0)
  569.         bne.s   +
  570.         addi.w  #6*2,d0
  571. +       bsr.w   BossRobot_PalFlash
  572.         subq.b  #1,$1C(a0)
  573.         bne.s   BossRobot_CheckTouch_Locret
  574.         move.b  $25(a0),$28(a0)
  575.  
  576. BossRobot_CheckTouch_Locret:
  577.         rts
  578. ; ---------------------------------------------------------------------------
  579.  
  580. BossRobot_CheckTouch_Explosive:
  581.         move.l  #Wait_NewDelay,(a0)
  582.         bset    #7,$2A(a0)
  583.         clr.l   $18(a0)
  584.         move.l  #BossRobot_CheckTouch_Explosive_SetFalling,$34(a0)
  585.         lea (Child6_CreateBossExplosion).l,a2
  586.         jsr (CreateChild6_Simple).l
  587.         jmp (BossDefeated).l
  588. ; ---------------------------------------------------------------------------
  589.  
  590. BossRobot_CheckTouch_Explosive_SetFalling:
  591.         addq.b  #2,(Dynamic_resize_routine).w
  592.         move.l  #BossRobot_CheckTouch_Explosive_Falling,(a0)
  593.  
  594. BossRobot_CheckTouch_Explosive_Falling:
  595.         jsr (MoveSprite_LightGravity).l
  596.         jsr (Draw_Sprite).l
  597.         jsr (ObjHitFloor).l
  598.         tst.w   d1
  599.         bpl.s   BossRobot_CheckTouch_Locret
  600.         add.w   d1,$14(a0)
  601.         bclr    #7,4(a0)
  602.         move.l  #Go_Delete_Sprite_2,(a0)
  603.         sfx sfx_WallSmash,0,0,0
  604.         lea ChildObjDat_BossRobot_FlickerMove(pc),a2
  605.         jsr (CreateChild6_Simple).l
  606.         lea ChildObjDat_RobotnikJetpack_Intro(pc),a2
  607.         jmp (CreateChild6_Simple).l
  608. ; ---------------------------------------------------------------------------
  609. ; Тень
  610. ; ---------------------------------------------------------------------------
  611.  
  612. ; =============== S U B R O U T I N E =======================================
  613.  
  614. Obj_ChasingBall_Trail:
  615.         moveq   #0,d0
  616.         move.b  $2C(a0),d0
  617.         lsl.w   #4,d0
  618.         addi.b  #$24,d0
  619.         move.b  d0,$2C(a0)
  620.         lea ObjDat3_ChasingBall_Trail(pc),a1
  621.         jsr (SetUp_ObjAttributes3).l
  622.         move.l  #+,(a0)
  623. +       jsr (Child_GetVRAMPriorityOnce).l
  624.         jsr Obj_ChasingBall_CopyPos(pc)
  625.         jmp (Child_DrawTouch_Sprite_Explosion).l
  626. ; ---------------------------------------------------------------------------
  627. ; Тень 2
  628. ; ---------------------------------------------------------------------------
  629.  
  630. ; =============== S U B R O U T I N E =======================================
  631.  
  632. Obj_ChasingBall_Trail_2:
  633.         moveq   #0,d0
  634.         move.b  $2C(a0),d0
  635.         lsl.w   #4,d0
  636.         addi.b  #$24,d0
  637.         move.b  d0,$2C(a0)
  638.         lea ObjDat3_ChasingBall_Trail(pc),a1
  639.         jsr (SetUp_ObjAttributes3).l
  640.         move.l  #+,(a0)
  641. +       jsr (Child_GetVRAMPriorityOnce).l
  642.         jsr Obj_ChasingBall_CopyPos2(pc)
  643.         jmp (Child_DrawTouch_Sprite_Explosion).l
  644. ; ---------------------------------------------------------------------------
  645. ; Тень отталкивающегося шара
  646. ; ---------------------------------------------------------------------------
  647.  
  648. ; =============== S U B R O U T I N E =======================================
  649.  
  650. Obj_RepulsionBall_Trail:
  651.         moveq   #0,d0
  652.         move.b  $2C(a0),d0
  653.         lsl.w   #3,d0
  654.         addi.w  #$14,d0
  655.         move.b  d0,$2C(a0)
  656.         lea ObjDat3_ChasingBall_Trail(pc),a1
  657.         jsr (SetUp_ObjAttributes3).l
  658.         move.l  #+,(a0)
  659. +       jsr Obj_ChasingBall_CopyPos(pc)
  660.         jmp (Child_DrawTouch_Sprite_Explosion).l
  661. ; ---------------------------------------------------------------------------
  662. ; Падающий шар
  663. ; ---------------------------------------------------------------------------
  664.  
  665. ; =============== S U B R O U T I N E =======================================
  666.  
  667. Obj_FallingBall:
  668.         moveq   #0,d0
  669.         move.b  obRoutine(a0),d0
  670.         move.w  FallingBall_Index(pc,d0.w),d0
  671.         jsr FallingBall_Index(pc,d0.w)
  672.         jmp (Child_DrawTouch_Sprite_CircularExplosion).l
  673. ; ---------------------------------------------------------------------------
  674.  
  675. FallingBall_Index: offsetTable
  676.         offsetTableEntry.w FallingBall_Init     ; 0
  677.         offsetTableEntry.w FallingBall_Setup        ; 2
  678. ; ---------------------------------------------------------------------------
  679.  
  680. FallingBall_Init:
  681.         lea ObjDat3_ChasingBall(pc),a1
  682.         jsr (SetUp_ObjAttributes).l
  683.         movea.w $46(a0),a1
  684.         move.b  #setOpen,$20(a1)
  685.         move.l  #FallingBall_Explosion,$34(a0)
  686.         move.l  #AniRaw_ChasingBall,$30(a0)
  687.  
  688. FallingBall_Setup:
  689.         jsr (Animate_Raw).l
  690.         jsr (MoveSprite).l
  691.         jmp (ObjHitFloor_DoRoutine).l
  692. ; ---------------------------------------------------------------------------
  693.  
  694. FallingBall_Explosion:
  695.         movea.w $46(a0),a1
  696.         move.b  #setClose,$20(a1)
  697.  
  698. FallingWaitBall_Explosion:
  699.         sfx sfx_BreakBridge,0,0,0
  700.         move.l  #Go_Delete_Sprite,$34(a0)
  701.         move.w  #$14,(Screen_Shaking_Flag).w
  702.         lea ChildObjDat_DEZExplosion(pc),a2
  703.         jmp (CreateChild6_Simple).l
  704. ; ---------------------------------------------------------------------------
  705. ; Вращающийся и преследующий шар
  706. ; ---------------------------------------------------------------------------
  707.  
  708. ; =============== S U B R O U T I N E =======================================
  709.  
  710. Obj_CircularChaseBall:
  711.         moveq   #0,d0
  712.         move.b  obRoutine(a0),d0
  713.         move.w  CircularChaseBall_Index(pc,d0.w),d0
  714.         jsr CircularChaseBall_Index(pc,d0.w)
  715.         bsr.w   CircularChaseBall_SetTrail
  716.         jmp (Child_DrawTouch_Sprite_CircularExplosion).l
  717. ; ---------------------------------------------------------------------------
  718.  
  719. CircularChaseBall_Index: offsetTable
  720.         offsetTableEntry.w CircularChaseBall_Init       ; 0
  721.         offsetTableEntry.w CircularChaseBall_Setup  ; 2
  722.         offsetTableEntry.w CircularChaseBall_Setup2 ; 4
  723.         offsetTableEntry.w CircularChaseBall_Setup3 ; 6
  724. ; ---------------------------------------------------------------------------
  725.  
  726. CircularChaseBall_Init:
  727.         lea ObjDat3_ChasingBall(pc),a1
  728.         jsr (SetUp_ObjAttributes).l
  729.         move.b  #2,$3A(a0)
  730.         move.b  #2,$40(a0)
  731.         move.w  #$1F,$2E(a0)
  732.         tst.b   $2C(a0)
  733.         beq.s   +
  734.         move.w  #$5F,$2E(a0)
  735. +       move.l  #CircularChaseBall_MoveDown,$34(a0)
  736.         move.l  #AniRaw_ChasingBall,$30(a0)
  737.         lea ChildObjDat_ChasingBall_Trail2(pc),a2
  738.         tst.b   $2C(a0)
  739.         bne.s   +
  740.         movea.w $46(a0),a1
  741.         move.b  #setOpen,$20(a1)
  742.         sfx sfx_Laser2,0,0,0
  743.         lea ChildObjDat_ChasingBall_Trail(pc),a2
  744. +       jmp (CreateChild6_Simple).l
  745. ; ---------------------------------------------------------------------------
  746.  
  747. CircularChaseBall_Setup3:
  748.         jsr (Find_SonicTails).l
  749.         jsr (Change_FlipX).l
  750.         move.w  #$400,d0
  751.         moveq   #$20,d1
  752.         jsr (Chase_Object).l
  753.         bra.s   CircularChaseBall_Setup
  754. ; ---------------------------------------------------------------------------
  755.  
  756. CircularChaseBall_Setup2:
  757.         move.b  $40(a0),d0
  758.         add.b   d0,$3C(a0)
  759.         move.b  $3A(a0),d2
  760.         jsr (MoveSprite_CircularSimple).l
  761.  
  762. CircularChaseBall_Setup:
  763.         jsr (Animate_Raw).l
  764.         jsr (MoveSprite2).l
  765.         jmp (Obj_Wait).l
  766. ; ---------------------------------------------------------------------------
  767.  
  768. CircularChaseBall_MoveDown:
  769.         move.w  #$100,$1A(a0)
  770.         move.w  #$3F,$2E(a0)
  771.         move.l  #CircularChaseBall_MoveClosed,$34(a0)
  772.         rts
  773. ; ---------------------------------------------------------------------------
  774.  
  775. CircularChaseBall_MoveClosed:
  776.         move.b  #_Setup2,5(a0)
  777.         clr.w   $1A(a0)
  778.         ori.w   #$C000,$A(a0)
  779.         move.w  #$9F,$2E(a0)
  780.         move.l  #CircularChaseBall_SetChase,$34(a0)
  781.         tst.b   $2C(a0)
  782.         beq.s   +
  783.         movea.w $46(a0),a1
  784.         move.b  #setClose,$20(a1)
  785.         move.w  #$2EF,$2E(a0)
  786.         move.w  #$4F,$2E(a1)
  787.         move.l  #BossRobot_MoveCircularChaseBall_SetMove,$34(a1)
  788. +       rts
  789. ; ---------------------------------------------------------------------------
  790.  
  791. CircularChaseBall_SetChase:
  792.         move.w  #$19F,$2E(a0)
  793.         move.l  #CircularChaseBall_Remove,$34(a0)
  794.         move.b  #_Setup3,5(a0)
  795.         moveq   #sfx_Flash,d0
  796.         jmp (Play_Sound_2).l
  797. ; ---------------------------------------------------------------------------
  798.  
  799. CircularChaseBall_Remove:
  800.         tst.b   $2C(a0)
  801.         beq.s   +
  802.         movea.w $46(a0),a1
  803.         move.w  #$4F,$2E(a1)
  804.         move.l  #BossRobot_SetSubroutine,$34(a1)
  805. +       move.l  #Go_Delete_Sprite,(a0)
  806.         lea ChildObjDat_DEZCircularExplosion(pc),a2
  807.         jmp (CreateChild6_Simple).l
  808. ; ---------------------------------------------------------------------------
  809.  
  810. CircularChaseBall_SetTrail:
  811.         moveq   #0,d0
  812.         move.b  $2C(a0),d0
  813.         add.w   d0,d0
  814.         jmp CircularChaseBall_TrailIndex(pc,d0.w)
  815. ; ---------------------------------------------------------------------------
  816.  
  817. CircularChaseBall_TrailIndex:
  818.         bra.w   Obj_ChasingBall_SendPos
  819.         bra.w   Obj_ChasingBall_SendPos2
  820. ; ---------------------------------------------------------------------------
  821. ; Отталкивающийся шар
  822. ; ---------------------------------------------------------------------------
  823.  
  824. ; =============== S U B R O U T I N E =======================================
  825.  
  826. Obj_RepulsionBall:
  827.         moveq   #0,d0
  828.         move.b  obRoutine(a0),d0
  829.         move.w  RepulsionBall_Index(pc,d0.w),d0
  830.         jsr RepulsionBall_Index(pc,d0.w)
  831.         jsr Obj_ChasingBall_SendPos(pc)
  832.         jmp (Child_DrawTouch_Sprite_Explosion).l
  833. ; ---------------------------------------------------------------------------
  834.  
  835. RepulsionBall_Index: offsetTable
  836.         offsetTableEntry.w RepulsionBall_Init       ; 0
  837.         offsetTableEntry.w RepulsionBall_Setup      ; 2
  838.         offsetTableEntry.w RepulsionBall_Setup2     ; 4
  839. ; ---------------------------------------------------------------------------
  840.  
  841. RepulsionBall_Init:
  842.         lea ObjDat3_ShootingBall_Missile(pc),a1
  843.         jsr (SetUp_ObjAttributes).l
  844.         move.w  #$400,$1A(a0)
  845.         move.l  #Repulsion_CheckTouch,$34(a0)
  846.         movea.w $46(a0),a1
  847.         move.b  #setOpen,$20(a1)
  848.         sfx sfx_Laser,0,0,0
  849.         lea ChildObjDat_RepulsionBall_Trail(pc),a2
  850.         jmp (CreateChild6_Simple).l
  851. ; ---------------------------------------------------------------------------
  852.  
  853. RepulsionBall_Setup:
  854.         jsr (MoveSprite2).l
  855.         jmp (ObjHitFloor_DoRoutine).l
  856. ; ---------------------------------------------------------------------------
  857.  
  858. RepulsionBall_Setup2:
  859.         jsr Repulsion_CheckWall(pc)
  860.         jsr (MoveSprite2).l
  861.         jmp (Obj_Wait).l
  862. ; ---------------------------------------------------------------------------
  863.  
  864. Repulsion_CheckTouch:
  865.         move.b  #_Setup2,5(a0)
  866.         move.w  #9*60,$2E(a0)
  867.         move.l  #Repulsion_Remove,$34(a0)
  868.         move.w  (RNG_seed).w,d0
  869.         move.w  d0,d1
  870.         andi.w  #$C,d0
  871.         move.l  ObDat_RepulsionSpeed(pc,d0.w),$18(a0)
  872.         andi.w  #1,d1
  873.         bne.s   +
  874.         neg.l   $18(a0)
  875. +       rts
  876. ; ---------------------------------------------------------------------------
  877.  
  878. ObDat_RepulsionSpeed:
  879.         dc.w $400, $600 ; Xpos, Ypos
  880.         dc.w $100, $600 ; Xpos, Ypos
  881.         dc.w $400, $100 ; Xpos, Ypos
  882.         dc.w $400, $600 ; Xpos, Ypos
  883. ; ---------------------------------------------------------------------------
  884.  
  885. Repulsion_Remove:
  886.         movea.w $46(a0),a1
  887.         move.w  #$F,$2E(a1)
  888.         move.l  #BossRobot_MoveRepulsionBall_SetReturnPosition,$34(a1)
  889.         move.l  #Go_Delete_Sprite,(a0)
  890.         rts
  891. ; ---------------------------------------------------------------------------
  892.  
  893. Repulsion_CheckWall:
  894.         move.w  (Camera_Y_pos).w,d0
  895.         tst.w   $1A(a0)
  896.         bmi.s   +
  897.         addi.w  #$C8,d0         ; Проверить пол
  898.         cmp.w   $14(a0),d0
  899.         blo.s       ++
  900.         bra.s   +++
  901. +       addi.w  #$18,d0         ; Проверить потолок
  902.         cmp.w   $14(a0),d0
  903.         blo.s       ++
  904. +       neg.w   $1A(a0)
  905.         sfx sfx_Laser5,0,0,0
  906. +       move.w  (Camera_X_pos).w,d0
  907.         tst.w   $18(a0)
  908.         bpl.s   +
  909.         addq.w  #8,d0           ; Проверить левую сторону стены
  910.         cmp.w   $10(a0),d0
  911.         bhs.s   ++
  912.         bra.s   +++
  913. +       addi.w  #$138,d0        ; Проверить правую сторону стены
  914.         cmp.w   $10(a0),d0
  915.         bhs.s   ++
  916. +       neg.w   $18(a0)
  917.         sfx sfx_Laser5,0,0,0
  918. +       rts
  919. ; ---------------------------------------------------------------------------
  920. ; Стреляющий по радиусу шар
  921. ; ---------------------------------------------------------------------------
  922.  
  923. ; =============== S U B R O U T I N E =======================================
  924.  
  925. Obj_ShootingBall:
  926.         moveq   #0,d0
  927.         move.b  obRoutine(a0),d0
  928.         move.w  ShootingBall_Index(pc,d0.w),d0
  929.         jsr ShootingBall_Index(pc,d0.w)
  930.         jmp (Child_DrawTouch_Sprite_CircularExplosion).l
  931. ; ---------------------------------------------------------------------------
  932.  
  933. ShootingBall_Index: offsetTable
  934.         offsetTableEntry.w ShootingBall_Init        ; 0
  935.         offsetTableEntry.w ShootingBall_Setup   ; 2
  936.         offsetTableEntry.w ShootingBall_Setup2  ; 4
  937.         offsetTableEntry.w ShootingBall_Setup3  ; 6
  938. ; ---------------------------------------------------------------------------
  939.  
  940. ShootingBall_Init:
  941.         lea ObjDat3_ChasingBall(pc),a1
  942.         jsr (SetUp_ObjAttributes).l
  943.         movea.w $46(a0),a1
  944.         move.b  #setOpen,$20(a1)
  945.         move.b  #12,y_radius(a0)
  946.         move.l  #ShootingBall_SetBounced,$34(a0)
  947.         move.l  #AniRaw_ChasingBall,$30(a0)
  948.         move.w  (RNG_seed).w,d0
  949.         andi.w  #1,d0
  950.         bne.s   +
  951.         not.w   d0
  952. +       move.b  d0,$40(a0)
  953.         sfx sfx_Laser,0,0,0
  954.  
  955. ShootingBall_Locret:
  956.         rts
  957. ; ---------------------------------------------------------------------------
  958.  
  959. ShootingBall_Setup:
  960.         jsr (Animate_Raw).l
  961.         jsr (MoveSprite).l
  962.         jmp (ObjHitFloor_DoRoutine).l
  963. ; ---------------------------------------------------------------------------
  964.  
  965. ShootingBall_Setup3:
  966.         jsr ShootingBall_Shoot(pc)
  967.  
  968. ShootingBall_Setup2:
  969.         jsr (Animate_Raw).l
  970.         jsr (MoveSprite2).l
  971.         jmp (Obj_Wait).l
  972. ; ---------------------------------------------------------------------------
  973.  
  974. ShootingBall_SetBounced:
  975.         movea.w $46(a0),a1
  976.         move.b  #setClose,$20(a1)
  977.         move.l  #ShootingBall_CheckBounced,$34(a0)
  978.         move.w  #$100,$18(a0)
  979.         cmpi.w  #$180,$3A(a1)
  980.         bne.s   ShootingBall_CheckBounced
  981.         neg.w   $18(a0)
  982.  
  983. ShootingBall_CheckBounced:
  984.         move.w  $1A(a0),d0
  985.         bmi.s   ShootingBall_Locret
  986.         cmpi.w  #$180,d0
  987.         bhs.s   ShootingBall_Fall
  988.         move.b  #_Setup2,5(a0)
  989.         move.l  #ShootingBall_CheckPosition,$34(a0)
  990.         sfx sfx_Squeak,0,0,0
  991.         lea ChildObjDat_DEZGravitySwitch(pc),a2
  992.         jmp (CreateChild6_Simple).l
  993. ; ---------------------------------------------------------------------------
  994.  
  995. ShootingBall_Fall:
  996.         asr.w   d0
  997.         neg.w   d0
  998.         move.w  d0,$1A(a0)
  999.         moveq   #sfx_Emerald,d0
  1000.         jmp (Play_Sound_2).l
  1001. ; ---------------------------------------------------------------------------
  1002.  
  1003. ShootingBall_CheckPosition:
  1004.         move.w  (Camera_X_pos).w,d0
  1005.         addi.w  #$A0,d0
  1006.         sub.w   $10(a0),d0
  1007.         asl.w   #4,d0
  1008.         move.w  d0,$18(a0)
  1009.         move.w  (Camera_Y_pos).w,d0
  1010.         addi.w  #$70,d0
  1011.         sub.w   $14(a0),d0
  1012.         bne.s   +
  1013.         move.b  #_Setup3,5(a0)
  1014.         move.w  #16*60,$2E(a0)
  1015.         move.l  #ShootingBall_Remove,$34(a0)
  1016. +       asl.w   #4,d0
  1017.         move.w  d0,$1A(a0)
  1018.         rts
  1019. ; ---------------------------------------------------------------------------
  1020.  
  1021. ShootingBall_Remove:
  1022.         movea.w $46(a0),a1
  1023.         move.w  #$F,$2E(a1)
  1024.         sfx sfx_BreakBridge,0,0,0
  1025.         move.l  #BossRobot_MoveShootingBall_SetReturnPosition,$34(a1)
  1026.         move.l  #Obj_DEZCircularExplosion,(a0)
  1027.  
  1028. ShootingBall_Remove_Locret:
  1029.         rts
  1030. ; ---------------------------------------------------------------------------
  1031.  
  1032. ShootingBall_Shoot:
  1033.         move.b  $40(a0),d0
  1034.         add.b   d0,$3C(a0)
  1035.         moveq   #sfx_Fire,d0
  1036.         jsr (Wait_Play_Sound).l
  1037.         btst    #0,(Level_frame_counter+1).w
  1038.         beq.s   ShootingBall_Remove_Locret
  1039.         lea ChildObjDat_ShootingBall_Missile(pc),a2
  1040.         jmp (CreateChild6_Simple).l
  1041. ; ---------------------------------------------------------------------------
  1042. ; Снаряд для выстрела по радиусу
  1043. ; ---------------------------------------------------------------------------
  1044.  
  1045. ; =============== S U B R O U T I N E =======================================
  1046.  
  1047. Obj_ShootingBall_Missile:
  1048.         moveq   #0,d0
  1049.         move.b  $2C(a0),d0
  1050.         lsl.w   #6,d0
  1051.         move.b  d0,$3F(a0)
  1052.         lea ObjDat3_ShootingBall_Missile(pc),a1
  1053.         jsr (SetUp_ObjAttributes).l
  1054.         move.l  #+,(a0)
  1055.         movea.w $46(a0),a1
  1056.         move.b  $3C(a1),d0
  1057.         add.b   $3F(a0),d0
  1058.         jsr (GetSineCosine).l
  1059.         move.w  #$C00,d2
  1060.         muls.w  d2,d0
  1061.         asr.l   #8,d0
  1062.         move.w  d0,$18(a0)
  1063.         muls.w  d2,d1
  1064.         asr.l   #8,d1
  1065.         move.w  d1,$1A(a0)
  1066. +       jsr (MoveSprite2).l
  1067.         bsr.s   ShootingBall_Missile_CheckFloor
  1068.         jmp (Sprite_ChildCheckDeleteTouchXY).l
  1069. ; ---------------------------------------------------------------------------
  1070.  
  1071. ShootingBall_Missile_CheckFloor:
  1072.         move.w  (Camera_Y_pos).w,d0
  1073.         addi.w  #$10,d0
  1074.         cmp.w   $14(a0),d0
  1075.         bhs.s   +
  1076.         addi.w  #$C0,d0
  1077.         cmp.w   $14(a0),d0
  1078.         bhs.s   ShootingBall_Missile_Locret
  1079. +       move.w  #4,(Screen_Shaking_Flag).w
  1080.         btst    #1,(Level_frame_counter+1).w
  1081.         beq.s   ShootingBall_Missile_Locret
  1082.         move.l  #loc_1E746,(a0)
  1083.  
  1084. ShootingBall_Missile_Locret:
  1085.         rts
  1086. ; ---------------------------------------------------------------------------
  1087. ; Падающий ждущий шар (кат-сцена)
  1088. ; ---------------------------------------------------------------------------
  1089.  
  1090. ; =============== S U B R O U T I N E =======================================
  1091.  
  1092. Obj_FallingWaitBall_Intro:
  1093.         moveq   #0,d0
  1094.         move.b  $2C(a0),d0
  1095.         lsl.w       #2,d0
  1096.         addq.w  #8,d0
  1097.         move.w  d0,$2E(a0)
  1098.         lea ObjDat3_ChasingBall(pc),a1
  1099.         jsr (SetUp_ObjAttributes).l
  1100.         ori.w   #$C000,$A(a0)
  1101.         move.w  #$800,$1A(a0)
  1102.         move.l  #+,(a0)
  1103.         move.l  #FallingWaitBall_Intro_Sound,$34(a0)
  1104.         move.l  #AniRaw_ChasingBall,$30(a0)
  1105. +       jsr (Animate_Raw).l
  1106.         jsr (Obj_Wait).l
  1107.         jmp (Sprite_ChildCheckDeleteTouchXY).l
  1108. ; ---------------------------------------------------------------------------
  1109.  
  1110. FallingWaitBall_Intro_Sound:
  1111.         move.l  #MoveSprite2,$34(a0)
  1112.         moveq   #sfx_Ghost,d0
  1113.         jmp (Play_Sound_2).l
  1114. ; ---------------------------------------------------------------------------
  1115. ; Падающий ждущий шар
  1116. ; ---------------------------------------------------------------------------
  1117.  
  1118. ; =============== S U B R O U T I N E =======================================
  1119.  
  1120. Obj_FallingWaitBall:
  1121.         moveq   #0,d0
  1122.         move.b  obRoutine(a0),d0
  1123.         move.w  FallingWaitBall_Index(pc,d0.w),d0
  1124.         jsr FallingWaitBall_Index(pc,d0.w)
  1125.         jmp (Child_DrawTouch_Sprite_CircularExplosion).l
  1126. ; ---------------------------------------------------------------------------
  1127.  
  1128. FallingWaitBall_Index: offsetTable
  1129.         offsetTableEntry.w FallingWaitBall_Init     ; 0
  1130.         offsetTableEntry.w FallingWaitBall_Setup        ; 2
  1131.         offsetTableEntry.w FallingWaitBall_Setup2   ; 4
  1132.         offsetTableEntry.w FallingWaitBall_Setup3   ; 6
  1133. ; ---------------------------------------------------------------------------
  1134.  
  1135. FallingWaitBall_Init:
  1136.         lea ObjDat3_ChasingBall(pc),a1
  1137.         jsr (SetUp_ObjAttributes).l
  1138.         ori.w   #$C000,$A(a0)
  1139.         move.l  #FallingWaitBall_Waiting,$34(a0)
  1140.         move.l  #AniRaw_ChasingBall,$30(a0)
  1141.         move.b  $2C(a0),d0
  1142.         lsl.w       #2,d0
  1143.         addi.w  #$20,d0
  1144.         move.w  d0,$2E(a0)
  1145.         cmpi.b  #$10,$2C(a0)
  1146.         bne.s   +
  1147.         lea ChildObjDat_FallingWaitBall_Aim(pc),a2
  1148.         jsr (CreateChild6_Simple).l
  1149.         bne.s   +
  1150.         move.w  $3E(a0),$3E(a1)
  1151. +       rts
  1152. ; ---------------------------------------------------------------------------
  1153.  
  1154. FallingWaitBall_Setup:
  1155.         jsr (Animate_Raw).l
  1156.         jmp (Obj_Wait).l
  1157. ; ---------------------------------------------------------------------------
  1158.  
  1159. FallingWaitBall_Setup2:
  1160.         jsr (Animate_Raw).l
  1161.         jsr (MoveSprite).l
  1162.         jmp (Obj_Wait).l
  1163. ; ---------------------------------------------------------------------------
  1164.  
  1165. FallingWaitBall_Setup3:
  1166.         jsr (Animate_Raw).l
  1167.         jsr (MoveSprite).l
  1168.         jmp (ObjHitFloor_DoRoutine).l
  1169. ; ---------------------------------------------------------------------------
  1170.  
  1171. FallingWaitBall_Waiting:
  1172.         move.b  #_Setup2,5(a0)
  1173.         move.w  #$1F,$2E(a0)
  1174.         move.l  #FallingWaitBall_Waiting2,$34(a0)
  1175.         tst.b       $2C(a0)
  1176.         bne.s   +
  1177.         sfx sfx_Falling,0,0,0
  1178. +       rts
  1179. ; ---------------------------------------------------------------------------
  1180.  
  1181. FallingWaitBall_Waiting2:
  1182.         move.b  #_Setup3,5(a0)
  1183.         eori.w  #$4000,$A(a0)
  1184.         move.l  #FallingWaitBall_Explosion,$34(a0)
  1185.         rts
  1186. ; ---------------------------------------------------------------------------
  1187. ; Прицел для вращающегося и преследующего шара
  1188. ; ---------------------------------------------------------------------------
  1189.  
  1190. ; =============== S U B R O U T I N E =======================================
  1191.  
  1192. Obj_FallingWaitBall_Aim:
  1193.         move.w  (Camera_X_pos).w,d0
  1194.         add.w   $3E(a0),d0
  1195.         move.w  d0,$10(a0)
  1196.         move.w  (Camera_Y_pos).w,d0
  1197.         add.w   #$C8,d0
  1198.         move.w  d0,$14(a0)
  1199.         sfx sfx_Squeak,0,0,0
  1200.         lea ObjDat3_FallingWaitBall_Aim(pc),a1
  1201.         jsr (SetUp_ObjAttributes).l
  1202.         move.w  #$2F,$2E(a0)
  1203.         move.l  #+,(a0)
  1204.         move.l  #Go_Delete_Sprite,$34(a0)
  1205.         move.l  #AniRaw_FallingWaitBall_Aim,$30(a0)
  1206. +       jsr (Animate_Raw).l
  1207.         jsr (Obj_Wait).l
  1208.         jmp (Draw_Sprite).l
  1209. ; ---------------------------------------------------------------------------
  1210. ; Раскачивающийся шар
  1211. ; ---------------------------------------------------------------------------
  1212.  
  1213. ; =============== S U B R O U T I N E =======================================
  1214.  
  1215. Obj_SwingBall:
  1216.         moveq   #0,d0
  1217.         move.b  obRoutine(a0),d0
  1218.         move.w  SwingBall_Index(pc,d0.w),d0
  1219.         jsr SwingBall_Index(pc,d0.w)
  1220.         bsr.w   CircularChaseBall_SetTrail
  1221.         jmp (Sprite_ChildCheckDeleteTouchXY).l
  1222. ; ---------------------------------------------------------------------------
  1223.  
  1224. SwingBall_Index: offsetTable
  1225.         offsetTableEntry.w SwingBall_Init       ; 0
  1226.         offsetTableEntry.w SwingBall_Setup      ; 2
  1227.         offsetTableEntry.w SwingBall_Setup2 ; 4
  1228. ; ---------------------------------------------------------------------------
  1229.  
  1230. SwingBall_Init:
  1231.         lea ObjDat3_ChasingBall(pc),a1
  1232.         jsr (SetUp_ObjAttributes).l
  1233.         ori.w   #$C000,$A(a0)
  1234.         move.w  #$F,$2E(a0)
  1235.         move.l  #SwingBall_MoveDown,$34(a0)
  1236.         move.l  #AniRaw_ChasingBall,$30(a0)
  1237.         move.b  #6,$40(a0)
  1238.         lea ChildObjDat_ChasingBall_Trail2(pc),a2
  1239.         tst.b   $2C(a0)
  1240.         bne.s   +
  1241.         neg.w   $40(a0)
  1242.         movea.w $46(a0),a1
  1243.         move.b  #setOpen,$20(a1)
  1244.         sfx sfx_Laser2,0,0,0
  1245.         lea ChildObjDat_ChasingBall_Trail(pc),a2
  1246. +       jmp (CreateChild6_Simple).l
  1247. ; ---------------------------------------------------------------------------
  1248.  
  1249. SwingBall_Setup2:
  1250.         move.b  $40(a0),d0
  1251.         add.b   d0,$3C(a0)
  1252.         move.b  $3C(a0),d0
  1253.         jsr (GetSineCosine).l
  1254.         asl.w   #2,d0
  1255.         move.w  d0,$18(a0)
  1256.  
  1257. SwingBall_Setup:
  1258.         jsr (Animate_Raw).l
  1259.         jsr (MoveSprite2).l
  1260.         jmp (Obj_Wait).l
  1261. ; ---------------------------------------------------------------------------
  1262.  
  1263. SwingBall_MoveDown:
  1264.         move.b  #_Setup2,5(a0)
  1265.         move.w  #$300,$1A(a0)
  1266.         move.l  #SwingBall_SetClose,$34(a0)
  1267.  
  1268. SwingBall_SetClose:
  1269.         tst.b   $2C(a0)
  1270.         bne.s   SwingBall_Locret
  1271.         tst.b   4(a0)
  1272.         bmi.s   SwingBall_Locret
  1273.         movea.w $46(a0),a1
  1274.         move.b  #setClose,$20(a1)
  1275.  
  1276. SwingBall_Locret:
  1277.         rts
  1278. ; ---------------------------------------------------------------------------
  1279. ; Взрывы
  1280. ; ---------------------------------------------------------------------------
  1281.  
  1282. ; =============== S U B R O U T I N E =======================================
  1283.  
  1284. Obj_DEZExplosion:
  1285.         moveq   #1,d2
  1286.         move.w  #8-1,d1
  1287.  
  1288. -       jsr (Create_New_Sprite3).l
  1289.         bne.s   +
  1290.         move.l  #Obj_DEZExplosion_Anim,(a1)
  1291.         move.l  #Map_BossDEZExplosion,$C(a1)
  1292.         move.w  #$530,$A(a1)
  1293.         move.b  #4,4(a1)
  1294.         move.w  #$100,8(a1)
  1295.         move.b  #$C,7(a1)
  1296.         move.b  #$C,6(a1)
  1297.         move.w  $10(a0),$10(a1)
  1298.         move.w  $14(a0),$14(a1)
  1299.         move.w  d2,d3
  1300.         asl.w   #8,d3
  1301.         neg.w   d3
  1302.         move.w  d3,$1A(a1)
  1303.         move.b  #3,$24(a1)
  1304.         move.b  #$8B,$28(a1)
  1305.         addq.w  #1,d2
  1306.         dbf d1,-
  1307. +       bra.s   DEZExplosion_Delete
  1308. ; ---------------------------------------------------------------------------
  1309.  
  1310. Obj_DEZExplosion_Anim:
  1311.         subq.b  #1,$24(a0)
  1312.         bpl.s   +
  1313.         move.b  #7,$24(a0)
  1314.         addq.b  #1,$22(a0)
  1315.         cmpi.b  #7,$22(a0)
  1316.         beq.s   DEZExplosion_Delete
  1317.         cmpi.b  #5,$22(a0)
  1318.         bne.s   +
  1319.         move.b  #0,$28(a0)
  1320. +       jsr (MoveSprite).l
  1321.         jmp (Draw_And_Touch_Sprite).l
  1322. ; ---------------------------------------------------------------------------
  1323.  
  1324. DEZExplosion_Delete:
  1325.         jmp (Delete_Current_Sprite).l
  1326.  
  1327. ; =============== S U B R O U T I N E =======================================
  1328.  
  1329. Obj_DEZCircularExplosion:
  1330.         moveq   #0,d2
  1331.         move.w  #8-1,d1
  1332.  
  1333. -       jsr (Create_New_Sprite3).l
  1334.         bne.s   +
  1335.         move.l  #Obj_DEZCircularExplosion_Anim,(a1)
  1336.         move.l  #Map_BossDEZExplosion,$C(a1)
  1337.         move.w  #$8530,$A(a1)
  1338.         move.b  #4,4(a1)
  1339.         move.w  #$100,8(a1)
  1340.         move.b  #$C,7(a1)
  1341.         move.b  #$C,6(a1)
  1342.         move.w  $10(a0),$10(a1)
  1343.         move.w  $14(a0),$14(a1)
  1344.         move.b  #3,$24(a1)
  1345.         move.b  #8,$3A(a1)
  1346.         move.b  d2,$26(a1)
  1347.         move.b  #8,$40(a1)
  1348.         addi.w  #$20,d2
  1349.         dbf d1,-
  1350. +       bra.s   DEZExplosion_Delete
  1351. ; ---------------------------------------------------------------------------
  1352.  
  1353. Obj_DEZCircularExplosion_Anim:
  1354.         subq.b  #1,$24(a0)
  1355.         bpl.s   +
  1356.         move.b  #7,$24(a0)
  1357.         addq.b  #1,$22(a0)
  1358.         subq.b  #1,$3A(a0)
  1359.         cmpi.b  #7,$22(a0)
  1360.         beq.w   DEZExplosion_Delete
  1361. +       move.b  $40(a0),d0
  1362.         sub.b   d0,$26(a0)
  1363.         move.b  $26(a0),d0
  1364.         jsr (GetSineCosine).l
  1365.         moveq   #0,d2
  1366.         move.b  $3A(a0),d2
  1367.         asr.w   d2,d0
  1368.         add.w   d0,$10(a0)
  1369.         asr.w   d2,d1
  1370.         add.w   d1,$14(a0)
  1371.         jmp (Draw_Sprite).l
  1372.  
  1373. ; =============== S U B R O U T I N E =======================================
  1374.  
  1375. Obj_BossRobot_FlickerMove:
  1376.         lea ObjDat3_BossRobot_Flicker(pc),a1
  1377.         jsr (SetUp_ObjAttributes3).l
  1378.         move.l  #Obj_FlickerMove,(a0)
  1379.         moveq   #0,d0
  1380.         move.b  $2C(a0),d0
  1381.         lsr.b   #1,d0
  1382.         addq.b  #4,d0
  1383.         move.b  d0,$22(a0)
  1384.         moveq   #8,d0
  1385.         jsr (Set_IndexedVelocity).l
  1386.         jmp (Draw_Sprite).l
  1387.  
  1388. ; =============== S U B R O U T I N E =======================================
  1389.  
  1390. Obj_ChasingBall_SendPos:
  1391.         move.w  (Pos_objtable_index).w,d0
  1392.         lea (Pos_objTable).w,a1
  1393.         lea (a1,d0.w),a1
  1394.         move.w  x_pos(a0),(a1)+
  1395.         move.w  y_pos(a0),(a1)+
  1396.         addq.b  #4,(Pos_objtable_byte).w
  1397.         rts
  1398. ; ---------------------------------------------------------------------------
  1399.  
  1400. Obj_ChasingBall_SendPos2:
  1401.         move.w  (Pos_obj2table_index).w,d0
  1402.         lea (Pos_obj2Table).w,a1
  1403.         lea (a1,d0.w),a1
  1404.         move.w  x_pos(a0),(a1)+
  1405.         move.w  y_pos(a0),(a1)+
  1406.         addq.b  #4,(Pos_obj2table_byte).w
  1407.         rts
  1408. ; ---------------------------------------------------------------------------
  1409.  
  1410. Obj_ChasingBall_CopyPos:
  1411.         move.w  (Pos_objtable_index).w,d0
  1412.         lea (Pos_objtable).w,a1
  1413.         bra.s   Obj_ChasingBall_CopyPosSet
  1414. ; ---------------------------------------------------------------------------
  1415.  
  1416. Obj_ChasingBall_CopyPos2:
  1417.         move.w  (Pos_obj2table_index).w,d0
  1418.         lea (Pos_obj2table).w,a1
  1419.  
  1420. Obj_ChasingBall_CopyPosSet:
  1421.         sub.b   $2C(a0),d0
  1422.         lea (a1,d0.w),a1
  1423.         move.w  (a1)+,x_pos(a0)
  1424.         move.w  (a1)+,y_pos(a0)
  1425.         rts
  1426.  
  1427. ; =============== S U B R O U T I N E =======================================
  1428.  
  1429. BossRobot_PalFlash:
  1430.         lea LoadBossRobot_PalRAM(pc),a1
  1431.         lea LoadBossRobot_PalCycle(pc,d0.w),a2
  1432.         jmp (CopyWordData_6).l
  1433. ; ---------------------------------------------------------------------------
  1434.  
  1435. LoadBossRobot_PalRAM:
  1436.         dc.w Normal_palette_line_2+6
  1437.         dc.w Normal_palette_line_2+8
  1438.         dc.w Normal_palette_line_2+$16
  1439.         dc.w Normal_palette_line_2+$18
  1440.         dc.w Normal_palette_line_2+$1A
  1441.         dc.w Normal_palette_line_2+$1C
  1442. LoadBossRobot_PalCycle:
  1443.         dc.w $E, 8, $866, $644, $422, 0
  1444.         dc.w $888, $AAA, $888, $AAA, $CCC, $EEE
  1445.  
  1446. ; =============== S U B R O U T I N E =======================================
  1447.  
  1448. ObjDat3_BossRobot:
  1449.         dc.l Map_BossRobot
  1450.         dc.w $22B0
  1451.         dc.w $200
  1452.         dc.b 80/2
  1453.         dc.b 80/2
  1454.         dc.b 0
  1455.         dc.b $F
  1456. ObjDat3_BossRobot_Flicker:
  1457.         dc.w 0
  1458.         dc.b 80/2
  1459.         dc.b 80/2
  1460.         dc.b 4
  1461.         dc.b 0
  1462. ObjDat3_ChasingBall:
  1463.         dc.l Map_BossBall
  1464.         dc.w $2F0
  1465.         dc.w $280
  1466.         dc.b 32/2
  1467.         dc.b 24/2
  1468.         dc.b 1
  1469.         dc.b $82
  1470. ObjDat3_ShootingBall_Missile:
  1471.         dc.l Map_BossBall
  1472.         dc.w $2F0
  1473.         dc.w $280
  1474.         dc.b 16/2
  1475.         dc.b 16/2
  1476.         dc.b 0
  1477.         dc.b $8B
  1478. ObjDat3_ChasingBall_Trail:
  1479.         dc.w $280
  1480.         dc.b 16/2
  1481.         dc.b 16/2
  1482.         dc.b 0
  1483.         dc.b $8B
  1484. ObjDat3_FallingWaitBall_Aim:
  1485.         dc.l Map_BossAim
  1486.         dc.w $E334
  1487.         dc.w 0
  1488.         dc.b 44/2
  1489.         dc.b 44/2
  1490.         dc.b 0
  1491.         dc.b 0
  1492. AniRaw_ChasingBall:
  1493.         dc.b 1, 1, 2, 1, 5, $FC
  1494. AniRaw_FallingWaitBall_Aim:
  1495.         dc.b 0, 0, 1, $FC
  1496. ChildObjDat_ChasingBall_Trail:
  1497.         dc.w 4-1
  1498.         dc.l Obj_ChasingBall_Trail
  1499. ChildObjDat_ChasingBall_Trail2:
  1500.         dc.w 4-1
  1501.         dc.l Obj_ChasingBall_Trail_2
  1502. ChildObjDat_RepulsionBall_Trail:
  1503.         dc.w 12-1
  1504.         dc.l Obj_RepulsionBall_Trail
  1505. ChildObjDat_FallingBall:
  1506.         dc.w 1-1
  1507.         dc.l Obj_FallingBall
  1508. ChildObjDat_CircularBall:
  1509.         dc.w 2-1
  1510.         dc.l Obj_CircularChaseBall
  1511. ChildObjDat_ShootingBall:
  1512.         dc.w 1-1
  1513.         dc.l Obj_ShootingBall
  1514. ChildObjDat_ShootingBall_Missile:
  1515.         dc.w 2-1
  1516.         dc.l Obj_ShootingBall_Missile
  1517. ChildObjDat_RepulsionBall:
  1518.         dc.w 1-1
  1519.         dc.l Obj_RepulsionBall
  1520. ChildObjDat_FallingWaitBall_Aim:
  1521.         dc.w 1-1
  1522.         dc.l Obj_FallingWaitBall_Aim
  1523. ChildObjDat_FallingWaitBall_Intro:
  1524.         dc.w 27-1
  1525.         dc.l Obj_FallingWaitBall_Intro
  1526. ChildObjDat_SwingBall:
  1527.         dc.w 2-1
  1528.         dc.l Obj_SwingBall
  1529.         dc.b $16
  1530.         dc.b 0
  1531.         dc.l Obj_SwingBall
  1532.         dc.b -$16
  1533.         dc.b 0
  1534. ChildObjDat_DEZCircularExplosion:
  1535.         dc.w 1-1
  1536.         dc.l Obj_DEZCircularExplosion
  1537. ChildObjDat_DEZExplosion:
  1538.         dc.w 1-1
  1539.         dc.l Obj_DEZExplosion
  1540. ChildObjDat_DEZGravitySwitch:
  1541.         dc.w 2-1
  1542.         dc.l Obj_DEZGravitySwitch
  1543. ChildObjDat_BossRobot_FlickerMove:
  1544.         dc.w 6-1
  1545.         dc.l Obj_BossRobot_FlickerMove
  1546. ; ---------------------------------------------------------------------------
  1547.  
  1548.         include "Objects/Boss/Object Data/Anim - Boss.asm"
  1549.         include "Objects/Boss/Object Data/Map - Boss.asm"
  1550.         include "Objects/Boss/Object Data/Map - Ball.asm"
  1551.         include "Objects/Boss/Object Data/Map - Aim.asm"
  1552.         include "Objects/Boss/Object Data/Map - Explosion.asm"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement