TheBlad768

Boss(BSR) Update 2

Feb 7th, 2020
771
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; ---------------------------------------------------------------------------
  2. ; Босс-Sonic Runners
  3. ; ---------------------------------------------------------------------------
  4.  
  5. ; Hits
  6. BossSR_Hits     = 8
  7.  
  8. ; Attributes
  9. ;_Setup1            = 2
  10. ;_Setup2            = 4
  11. ;_Setup3            = 6
  12.  
  13. ; Dynamic object variables
  14. obBSR_Routine   = $30   ; .b
  15. obBSR_Pinch     = $31   ; .b
  16. obBSR_Warning   = $32   ; .b
  17.  
  18. ; =============== S U B R O U T I N E =======================================
  19.  
  20. Obj_BossSR:
  21.         move.l  #Obj_Wait,address(a0)
  22.         move.w  #$1F,$2E(a0)
  23.         move.l  #Obj_BossSR_CreateTYM,$34(a0)
  24.  
  25. Obj_BossSR_Wait:
  26.         rts
  27. ; ---------------------------------------------------------------------------
  28.  
  29. Obj_BossSR_CreateTYM:
  30.         move.l  #Obj_BossSR_Wait,$34(a0)
  31.         lea ChildObjDat_BossSRTYM(pc),a2
  32.         jmp (CreateChild6_Simple).l
  33. ; ---------------------------------------------------------------------------
  34.  
  35. Obj_BossSR_Start:
  36.         move.l  #Obj_BossSR_Main,address(a0)
  37.  
  38. Obj_BossSR_Main:
  39.         moveq   #0,d0
  40.         move.b  routine(a0),d0
  41.         move.w  BossSR_Index(pc,d0.w),d0
  42.         jsr BossSR_Index(pc,d0.w)
  43.         bsr.w   BossSR_CheckTouch
  44.         jmp (Draw_And_Touch_Sprite).l
  45. ; ---------------------------------------------------------------------------
  46.  
  47. BossSR_Index: offsetTable
  48.         offsetTableEntry.w BossSR_Init      ; 0
  49.         offsetTableEntry.w BossSR_Setup ; 2
  50.         offsetTableEntry.w BossSR_Setup2    ; 4
  51.         offsetTableEntry.w BossSR_Setup3    ; 6
  52. ; ---------------------------------------------------------------------------
  53.  
  54. BossSR_Init:
  55.         lea ObjDat_BossSR(pc),a1
  56.         jsr (SetUp_ObjAttributes).l
  57.         move.b  #_Setup2,routine(a0)
  58.         move.b  #BossSR_Hits,collision_property(a0)
  59.         st  (Boss_flag).w
  60.         move.w  #$7F,$2E(a0)
  61.         move.l  #BossSR_MoveDown_Intro,$34(a0)
  62.         move.w  #$100,y_vel(a0)
  63.         lea ChildObjDat_RobotnikHud(pc),a2
  64.         jsr (CreateChild6_Simple).l
  65.         bne.s   +
  66.         move.w  a0,parent3(a1)
  67. +       lea Child1_MakeRoboHead3(pc),a2
  68.         jsr (CreateChild1_Normal).l
  69.         lea ChildObjDat_RobotnikFire(pc),a2
  70.         jsr (CreateChild1_Normal).l
  71.         lea ChildObjDat_BossSRTube(pc),a2
  72.         jmp (CreateChild1_Normal).l
  73. ; ---------------------------------------------------------------------------
  74.  
  75. BossSR_Setup3:
  76.         move.b  (Level_frame_counter+1).w,d0
  77.         andi.w  #7,d0
  78.         bne.s   BossSR_Setup
  79.         sfx sfx_BreakBridge,0,0,0
  80.  
  81. BossSR_Setup:
  82.         jsr (Swing_UpAndDown).l
  83.  
  84. BossSR_Setup2:
  85.         jsr (MoveSprite2).l
  86.         jmp (Obj_Wait).l
  87. ; ---------------------------------------------------------------------------
  88.  
  89. BossSR_MoveDown_Intro:
  90.         move.b  #_Setup1,routine(a0)
  91.         move.l  #BossSR_MoveDown_Laugh,$34(a0)
  92.         clr.w   y_vel(a0)
  93.         jmp (Swing_Setup1).l
  94. ; ---------------------------------------------------------------------------
  95.  
  96. BossSR_MoveDown_Laugh:
  97.         bset    #5,status(a0)
  98.         move.w  #$4F,$2E(a0)
  99.         move.l  #BossSR_MoveDown_StopLaugh,$34(a0)
  100.         rts
  101. ; ---------------------------------------------------------------------------
  102.  
  103. BossSR_MoveDown_StopLaugh:
  104.         move.w  #$F,$2E(a0)
  105.         move.l  #BossSR_SetSubroutine,$34(a0)
  106.         bclr    #5,status(a0)
  107.         rts
  108.  
  109. ; =============== S U B R O U T I N E =======================================
  110.  
  111. BossSR_PinchMode:
  112.         sf  obBSR_Pinch(a0)
  113.         bset    #6,status(a0)
  114.         move.b  #_Setup3,routine(a0)
  115.         move.w  #$4F,$2E(a0)
  116.         clr.b   obBSR_Routine(a0)
  117.         move.l  #BossSR_PinchMode_Stop,$34(a0)
  118.         lea ChildObjDat_BossSRTube_Fire(pc),a2
  119.         jmp (CreateChild6_Simple).l
  120. ; ---------------------------------------------------------------------------
  121.  
  122. BossSR_PinchMode_Stop:
  123.         bclr    #6,status(a0)
  124.         move.l  #BossSR_SetSubroutine,$34(a0)
  125.         rts
  126.  
  127. ; =============== S U B R O U T I N E =======================================
  128.  
  129. BossSR_SetSubroutine:
  130.         tst.b   obBSR_Pinch(a0)
  131.         bne.s   BossSR_PinchMode
  132.         moveq   #0,d0
  133.         move.b  obBSR_Routine(a0),d0
  134.         addq.b  #1,obBSR_Routine(a0)
  135.         lea BossSR_SetMovement(pc),a1
  136.         cmpi.b  #BossSR_Hits/4+1,$29(a0)
  137.         bhs.s   +
  138.         lea BossSR_SetPinchMovement(pc),a1
  139. +       move.b  (a1,d0.w),d0
  140.         bmi.s   +
  141.         move.l  BossSR_Movement(pc,d0.w),$34(a0)
  142.         rts
  143. +       clr.b   obBSR_Routine(a0)
  144.         rts
  145. ; ---------------------------------------------------------------------------
  146.  
  147. _SpikeBallJump      = 0
  148. _SpikeBallDown      = 1<<2
  149. _RocketUp           = 2<<2
  150. _RocketDown         = 3<<2
  151. _RocketUpDown       = 4<<2
  152. _BossAttack         = 5<<2
  153. _SpikeBallJump2     = 6<<2
  154. _SpikeBallDown2     = 7<<2
  155. _SpikeBallJumpx2    = 8<<2
  156. _SpikeBallDownx2    = 9<<2
  157. _SpikeBallUp            = 10<<2
  158. _BossLaugh          = 11<<2
  159. _BossLaserDown      = 12<<2
  160. _BossLaserUp        = 13<<2
  161. ; ---------------------------------------------------------------------------
  162.  
  163. BossSR_Movement:
  164.         dc.l BossSR_SpikeBallJump_Attack        ; 0
  165.         dc.l BossSR_SpikeBallDown_Attack        ; 1
  166.         dc.l BossSR_RocketUp_Attack         ; 2
  167.         dc.l BossSR_RocketDown_Attack       ; 3
  168.         dc.l BossSR_RocketUpDown_Attack     ; 4
  169.         dc.l BossSR_Boss_Attack             ; 5
  170.         dc.l BossSR_SpikeBallJump2_Attack       ; 6
  171.         dc.l BossSR_SpikeBallDown2_Attack       ; 7
  172.         dc.l BossSR_SpikeBallJumpx2_Attack  ; 8
  173.         dc.l BossSR_SpikeBallDownx2_Attack  ; 9
  174.         dc.l BossSR_SpikeBallUp_Attack      ; 10
  175.         dc.l BossSR_Boss_Laugh              ; 11
  176.         dc.l BossSR_Laser_Attack_Down       ; 12 (Pinch)
  177.         dc.l BossSR_Laser_Attack_Up         ; 13 (Pinch)
  178. ; ---------------------------------------------------------------------------
  179.  
  180. BossSR_SetMovement:
  181.         dc.b _SpikeBallJump
  182.         dc.b _SpikeBallJump
  183.         dc.b _SpikeBallJump
  184.         dc.b _SpikeBallDown
  185.         dc.b _SpikeBallDown
  186.         dc.b _SpikeBallJump2
  187.         dc.b _SpikeBallJump
  188.         dc.b _SpikeBallJump
  189.         dc.b _SpikeBallDown
  190.         dc.b _SpikeBallDown2
  191.         dc.b _SpikeBallDown
  192.         dc.b _SpikeBallDown
  193.         dc.b _BossLaugh
  194.         dc.b _RocketDown
  195.         dc.b _RocketDown
  196.         dc.b _RocketUp
  197.         dc.b _RocketDown
  198.         dc.b _SpikeBallJumpx2
  199.         dc.b _BossLaugh
  200.         dc.b _SpikeBallUp
  201.         dc.b _SpikeBallDown
  202.         dc.b _SpikeBallUp
  203.         dc.b _SpikeBallDown
  204.         dc.b _SpikeBallUp
  205.         dc.b _RocketUpDown
  206.         dc.b _SpikeBallDown
  207.         dc.b _SpikeBallDownx2
  208.         dc.b _SpikeBallJump
  209.         dc.b _SpikeBallJumpx2
  210.         dc.b _SpikeBallDown
  211.         dc.b _SpikeBallDownx2
  212.         dc.b _SpikeBallJump
  213.         dc.b _SpikeBallJumpx2
  214.         dc.b _SpikeBallDown
  215.         dc.b _SpikeBallDown
  216.         dc.b _SpikeBallJump
  217.         dc.b _SpikeBallDown2
  218.         dc.b _SpikeBallDown
  219.         dc.b _SpikeBallDown
  220.         dc.b _SpikeBallJump
  221.         dc.b _SpikeBallDownx2
  222.         dc.b _BossLaugh
  223.         dc.b _RocketDown
  224.         dc.b _RocketUpDown
  225.         dc.b _RocketUp
  226.         dc.b _RocketDown
  227.         dc.b _RocketUp
  228.         dc.b _BossLaugh
  229.         dc.b _BossAttack
  230.         dc.b _BossLaugh
  231.         dc.b _SpikeBallDownx2
  232.         dc.b _SpikeBallJumpx2
  233.         dc.b _SpikeBallDownx2
  234.         dc.b _SpikeBallJumpx2
  235.         dc.b _SpikeBallDownx2
  236.         dc.b _SpikeBallJumpx2
  237.         dc.b _SpikeBallUp
  238.         dc.b _SpikeBallUp
  239.         dc.b _SpikeBallDown
  240.         dc.b _SpikeBallDown
  241.         dc.b _SpikeBallUp
  242.         dc.b _SpikeBallUp
  243.         dc.b _SpikeBallDown
  244.         dc.b _SpikeBallUp
  245.         dc.b _SpikeBallJump
  246.         dc.b _SpikeBallDown
  247.         dc.b _SpikeBallJump
  248.         dc.b _SpikeBallDown
  249.         dc.b _SpikeBallJump
  250.         dc.b _SpikeBallDown
  251.         dc.b _SpikeBallJump2
  252.         dc.b -1 ; Конец
  253.     even
  254.  
  255. BossSR_SetPinchMovement:
  256.         dc.b _BossLaserDown
  257.         dc.b _BossLaserUp
  258.         dc.b _BossLaserDown
  259.         dc.b _BossLaserUp
  260.         dc.b _BossLaserDown
  261.         dc.b _BossLaserUp
  262.         dc.b _BossAttack
  263.         dc.b _RocketUp
  264.         dc.b _RocketDown
  265.         dc.b _RocketUpDown
  266.         dc.b _RocketUp
  267.         dc.b _RocketDown
  268.         dc.b _RocketUpDown
  269.         dc.b _BossLaserDown
  270.         dc.b _BossLaserDown
  271.         dc.b _BossLaserDown
  272.         dc.b _BossLaserUp
  273.         dc.b _RocketUpDown
  274.         dc.b _BossLaserDown
  275.         dc.b _BossLaserUp
  276.         dc.b _RocketUpDown
  277.         dc.b _RocketUpDown
  278.         dc.b _BossAttack
  279.         dc.b _RocketUp
  280.         dc.b _RocketDown
  281.         dc.b _RocketUp
  282.         dc.b _RocketDown
  283.         dc.b -1 ; Конец
  284.     even
  285. ; ---------------------------------------------------------------------------
  286. ; Босс атакует с помощью шипастого шара
  287. ; ---------------------------------------------------------------------------
  288.  
  289. ; =============== S U B R O U T I N E =======================================
  290.  
  291. BossSR_SpikeBallJump_Attack:
  292.         move.b  #_Setup2,routine(a0)
  293.         move.w  #-$200,y_vel(a0)
  294.         move.l  #BossSR_SpikeBallJump_CheckPos,$34(a0)
  295.  
  296. BossSR_SpikeBallJump_CheckPos:
  297.         move.w  (Camera_Y_pos).w,d0
  298.         addi.w  #$60,d0
  299.         cmp.w   y_pos(a0),d0
  300.         blo.s       +
  301.         move.w  d0,y_pos(a0)
  302.         move.b  #_Setup1,routine(a0)
  303.         move.l  #BossSR_SpikeBallJump_Attack_Start,$34(a0)
  304.         clr.w   y_vel(a0)
  305.         jsr (Swing_Setup1).l
  306. +       rts
  307. ; ---------------------------------------------------------------------------
  308.  
  309. BossSR_SpikeBallJump_Attack_Start:
  310.         move.w  #$2F,$2E(a0)
  311.         move.l  #BossSR_SetSubroutine,$34(a0)
  312.         sfx sfx_SpikeBall2,0,0,0
  313.         lea ChildObjDat_BossSRSpikeBall(pc),a2
  314.         jmp (CreateChild6_Simple).l
  315. ; ---------------------------------------------------------------------------
  316. ; Босс атакует с помощью шипастого шара 2
  317. ; ---------------------------------------------------------------------------
  318.  
  319. ; =============== S U B R O U T I N E =======================================
  320.  
  321. BossSR_SpikeBallDown_Attack:
  322.         move.b  #_Setup2,routine(a0)
  323.         move.w  #$200,y_vel(a0)
  324.         move.l  #BossSR_SpikeBallDown_CheckPos,$34(a0)
  325.  
  326. BossSR_SpikeBallDown_CheckPos:
  327.         move.w  (Camera_Y_pos).w,d0
  328.         addi.w  #$80,d0
  329.         cmp.w   y_pos(a0),d0
  330.         bhs.s   +
  331.         move.w  d0,y_pos(a0)
  332.         move.b  #_Setup1,routine(a0)
  333.         move.l  #BossSR_SpikeBallDown_Attack_Start,$34(a0)
  334.         clr.w   y_vel(a0)
  335.         jsr (Swing_Setup1).l
  336. +       rts
  337. ; ---------------------------------------------------------------------------
  338.  
  339. BossSR_SpikeBallDown_Attack_Start:
  340.         move.w  #$2F,$2E(a0)
  341.         move.l  #BossSR_SetSubroutine,$34(a0)
  342.         sfx sfx_SpikeBall2,0,0,0
  343.         lea ChildObjDat_BossSRSpikeBall(pc),a2
  344.         jsr (CreateChild6_Simple).l
  345.         bne.s   +
  346.         move.b  #2,subtype(a1)
  347. +       rts
  348. ; ---------------------------------------------------------------------------
  349. ; Босс атакует с помощью ракеты (Вверх)
  350. ; ---------------------------------------------------------------------------
  351.  
  352. ; =============== S U B R O U T I N E =======================================
  353.  
  354. BossSR_RocketUp_Attack:
  355.         move.b  #_Setup2,routine(a0)
  356.         move.w  #$200,y_vel(a0)
  357.         move.l  #BossSR_RocketUp_CheckPos,$34(a0)
  358.  
  359. BossSR_RocketUp_CheckPos:
  360.         move.w  (Camera_Y_pos).w,d0
  361.         addi.w  #$A0,d0
  362.         cmp.w   y_pos(a0),d0
  363.         bhs.s   +
  364.         move.w  d0,y_pos(a0)
  365.         move.b  #_Setup1,routine(a0)
  366.         move.l  #BossSR_RocketUp_Attack_Start,$34(a0)
  367.         clr.w   y_vel(a0)
  368.         jsr (Swing_Setup1).l
  369. +       rts
  370. ; ---------------------------------------------------------------------------
  371.  
  372. BossSR_RocketUp_Attack_Start:
  373.         move.b  #_Setup1,routine(a0)
  374.         move.w  #$2F,$2E(a0)
  375.         sfx sfx_FireShot,0,0,0
  376.         move.l  #BossSR_SetSubroutine,$34(a0)
  377.         lea ChildObjDat_BossSRRocket(pc),a2
  378.         jmp (CreateChild6_Simple).l
  379. ; ---------------------------------------------------------------------------
  380. ; Босс атакует с помощью ракеты (Вниз)
  381. ; ---------------------------------------------------------------------------
  382.  
  383. ; =============== S U B R O U T I N E =======================================
  384.  
  385. BossSR_RocketDown_Attack:
  386.         move.b  #_Setup2,routine(a0)
  387.         move.w  #-$200,y_vel(a0)
  388.         move.l  #BossSR_RocketDown_CheckPos,$34(a0)
  389.  
  390. BossSR_RocketDown_CheckPos:
  391.         move.w  (Camera_Y_pos).w,d0
  392.         addi.w  #$60,d0
  393.         cmp.w   y_pos(a0),d0
  394.         blo.s       +
  395.         move.w  d0,y_pos(a0)
  396.         move.b  #_Setup1,routine(a0)
  397.         move.l  #BossSR_RocketDown_Attack_Start,$34(a0)
  398.         clr.w   y_vel(a0)
  399.         jsr (Swing_Setup1).l
  400. +       rts
  401. ; ---------------------------------------------------------------------------
  402.  
  403. BossSR_RocketDown_Attack_Start:
  404.         move.b  #_Setup1,routine(a0)
  405.         move.w  #$2F,$2E(a0)
  406.         sfx sfx_FireShot,0,0,0
  407.         move.l  #BossSR_SetSubroutine,$34(a0)
  408.         lea ChildObjDat_BossSRRocket(pc),a2
  409.         jsr (CreateChild6_Simple).l
  410.         bne.s   +
  411.         move.b  #2,subtype(a1)
  412. +       rts
  413. ; ---------------------------------------------------------------------------
  414. ; Босс атакует с помощью ракеты (Вверх/Вниз)
  415. ; ---------------------------------------------------------------------------
  416.  
  417. BossSR_RocketUpDown_Attack:
  418.         move.b  #_Setup2,routine(a0)
  419.         move.w  #-$200,y_vel(a0)
  420.         move.l  #BossSR_RocketUpDown_CheckPos,$34(a0)
  421.  
  422. BossSR_RocketUpDown_CheckPos:
  423.         move.w  (Camera_Y_pos).w,d0
  424.         addi.w  #$30,d0
  425.         cmp.w   y_pos(a0),d0
  426.         blo.s       +
  427.         move.w  d0,y_pos(a0)
  428.         move.b  #_Setup1,routine(a0)
  429.         move.l  #BossSR_RocketUpDown_Attack_Start,$34(a0)
  430.         clr.w   y_vel(a0)
  431.         jsr (Swing_Setup1).l
  432. +       rts
  433. ; ---------------------------------------------------------------------------
  434.  
  435. BossSR_RocketUpDown_Attack_Start:
  436.         move.b  #_Setup1,routine(a0)
  437.         move.w  #$2F,$2E(a0)
  438.         sfx sfx_FireShot,0,0,0
  439.         move.l  #BossSR_SetSubroutine,$34(a0)
  440.         lea ChildObjDat_BossSRRocket2(pc),a2
  441.         jmp (CreateChild6_Simple).l
  442. ; ---------------------------------------------------------------------------
  443. ; Босс атакует самостоятельно
  444. ; ---------------------------------------------------------------------------
  445.  
  446. ; =============== S U B R O U T I N E =======================================
  447.  
  448. BossSR_Boss_Attack:
  449.         move.b  #_Setup2,routine(a0)
  450.         move.w  #$200,y_vel(a0)
  451.         move.l  #BossSR_Boss_Attack_CheckPos,$34(a0)
  452.  
  453. BossSR_Boss_Attack_CheckPos:
  454.         move.w  (Camera_Y_pos).w,d0
  455.         addi.w  #$A0,d0
  456.         cmp.w   y_pos(a0),d0
  457.         bhs.s   +
  458.         move.w  d0,y_pos(a0)
  459.         sfx sfx_Squeak,0,0,0
  460.         move.l  #BossSR_Boss_Attack_MoveAttack,$34(a0)
  461.         clr.w   y_vel(a0)
  462. +       rts
  463. ; ---------------------------------------------------------------------------
  464.  
  465. BossSR_Boss_Attack_MoveAttack:
  466.         move.w  #-$600,x_vel(a0)
  467.         move.w  #$5F,$2E(a0)
  468.         move.l  #BossSR_Boss_Attack_MoveDown,$34(a0)
  469.         rts
  470. ; ---------------------------------------------------------------------------
  471.  
  472. BossSR_Boss_Attack_MoveDown:
  473.         move.w  #$DC8,x_pos(a0)
  474.         move.w  #$358,y_pos(a0)
  475.         move.w  #$100,y_vel(a0)
  476.         move.w  #$7F,$2E(a0)
  477.         move.l  #BossSR_Boss_Attack_StopMove,$34(a0)
  478.         clr.w   x_vel(a0)
  479.         rts
  480. ; ---------------------------------------------------------------------------
  481.  
  482. BossSR_Boss_Attack_StopMove:
  483.         move.b  #_Setup1,routine(a0)
  484.         move.w  #$1F,$2E(a0)
  485.         move.l  #BossSR_SetSubroutine,$34(a0)
  486.         clr.w   y_vel(a0)
  487.         jmp (Swing_Setup1).l
  488. ; ---------------------------------------------------------------------------
  489. ; Босс атакует с помощью шипастого шара 3
  490. ; ---------------------------------------------------------------------------
  491.  
  492. ; =============== S U B R O U T I N E =======================================
  493.  
  494. BossSR_SpikeBallJump2_Attack:
  495.         move.b  #_Setup2,routine(a0)
  496.         move.w  #-$200,y_vel(a0)
  497.         move.l  #BossSR_SpikeBallJump2_CheckPos,$34(a0)
  498.  
  499. BossSR_SpikeBallJump2_CheckPos:
  500.         move.w  (Camera_Y_pos).w,d0
  501.         addi.w  #$60,d0
  502.         cmp.w   y_pos(a0),d0
  503.         blo.s       +
  504.         move.w  d0,y_pos(a0)
  505.         move.b  #_Setup1,routine(a0)
  506.         move.l  #BossSR_SpikeBallJump2_Attack_Start,$34(a0)
  507.         clr.w   y_vel(a0)
  508.         jsr (Swing_Setup1).l
  509. +       rts
  510. ; ---------------------------------------------------------------------------
  511.  
  512. BossSR_SpikeBallJump2_Attack_Start:
  513.         move.w  #$37,$2E(a0)
  514.         move.l  #BossSR_SetSubroutine,$34(a0)
  515.         sfx sfx_SpikeBall2,0,0,0
  516.         lea ChildObjDat_BossSRSpikeBall(pc),a2
  517.         jsr (CreateChild6_Simple).l
  518.         bne.s   +
  519.         move.b  #4,subtype(a1)
  520. +       rts
  521. ; ---------------------------------------------------------------------------
  522. ; Босс атакует с помощью шипастого шара 4
  523. ; ---------------------------------------------------------------------------
  524.  
  525. ; =============== S U B R O U T I N E =======================================
  526.  
  527. BossSR_SpikeBallDown2_Attack:
  528.         move.b  #_Setup2,routine(a0)
  529.         move.w  #$200,y_vel(a0)
  530.         move.l  #BossSR_SpikeBallDown2_CheckPos,$34(a0)
  531.  
  532. BossSR_SpikeBallDown2_CheckPos:
  533.         move.w  (Camera_Y_pos).w,d0
  534.         addi.w  #$80,d0
  535.         cmp.w   y_pos(a0),d0
  536.         bhs.s   +
  537.         move.w  d0,y_pos(a0)
  538.         move.b  #_Setup1,routine(a0)
  539.         move.l  #BossSR_SpikeBallDown2_Attack_Start,$34(a0)
  540.         clr.w   y_vel(a0)
  541.         jsr (Swing_Setup1).l
  542. +       rts
  543. ; ---------------------------------------------------------------------------
  544.  
  545. BossSR_SpikeBallDown2_Attack_Start:
  546.         move.w  #$37,$2E(a0)
  547.         move.l  #BossSR_SetSubroutine,$34(a0)
  548.         sfx sfx_SpikeBall2,0,0,0
  549.         lea ChildObjDat_BossSRSpikeBall(pc),a2
  550.         jsr (CreateChild6_Simple).l
  551.         bne.s   +
  552.         move.b  #6,subtype(a1)
  553. +       rts
  554. ; ---------------------------------------------------------------------------
  555. ; Босс атакует с помощью шипастого шара x2
  556. ; ---------------------------------------------------------------------------
  557.  
  558. BossSR_SpikeBallJumpx2_Attack:
  559.         move.b  #_Setup2,routine(a0)
  560.         move.w  #-$200,y_vel(a0)
  561.         move.l  #BossSR_SpikeBallJumpx2_CheckPos,$34(a0)
  562.  
  563. BossSR_SpikeBallJumpx2_CheckPos:
  564.         move.w  (Camera_Y_pos).w,d0
  565.         addi.w  #$60,d0
  566.         cmp.w   y_pos(a0),d0
  567.         blo.s       +
  568.         move.w  d0,y_pos(a0)
  569.         move.b  #_Setup1,routine(a0)
  570.         move.l  #BossSR_SpikeBallJumpx2_Attack_Start,$34(a0)
  571.         clr.w   y_vel(a0)
  572.         jsr (Swing_Setup1).l
  573. +       rts
  574. ; ---------------------------------------------------------------------------
  575.  
  576. BossSR_SpikeBallJumpx2_Attack_Start:
  577.         move.w  #$F,$2E(a0)
  578.         move.l  #BossSR_SpikeBallJumpx2_Attack_Start2,$34(a0)
  579.         sfx sfx_SpikeBall2,0,0,0
  580.         lea ChildObjDat_BossSRSpikeBall(pc),a2
  581.         jmp (CreateChild6_Simple).l
  582. ; ---------------------------------------------------------------------------
  583.  
  584. BossSR_SpikeBallJumpx2_Attack_Start2:
  585.         move.w  #$3F,$2E(a0)
  586.         move.l  #BossSR_SetSubroutine,$34(a0)
  587.         sfx sfx_SpikeBall2,0,0,0
  588.         lea ChildObjDat_BossSRSpikeBall(pc),a2
  589.         jmp (CreateChild6_Simple).l
  590. ; ---------------------------------------------------------------------------
  591. ; Босс атакует с помощью шипастого шара 2 x2
  592. ; ---------------------------------------------------------------------------
  593.  
  594. ; =============== S U B R O U T I N E =======================================
  595.  
  596. BossSR_SpikeBallDownx2_Attack:
  597.         move.b  #_Setup2,routine(a0)
  598.         move.w  #$200,y_vel(a0)
  599.         move.l  #BossSR_SpikeBallDownx2_CheckPos,$34(a0)
  600.  
  601. BossSR_SpikeBallDownx2_CheckPos:
  602.         move.w  (Camera_Y_pos).w,d0
  603.         addi.w  #$80,d0
  604.         cmp.w   y_pos(a0),d0
  605.         bhs.s   +
  606.         move.w  d0,y_pos(a0)
  607.         move.b  #_Setup1,routine(a0)
  608.         move.l  #BossSR_SpikeBallDownx2_Attack_Start,$34(a0)
  609.         clr.w   y_vel(a0)
  610.         jsr (Swing_Setup1).l
  611. +       rts
  612. ; ---------------------------------------------------------------------------
  613.  
  614. BossSR_SpikeBallDownx2_Attack_Start:
  615.         move.w  #$B,$2E(a0)
  616.         move.l  #BossSR_SpikeBallDownx2_Attack_Start2,$34(a0)
  617.         sfx sfx_SpikeBall2,0,0,0
  618.         lea ChildObjDat_BossSRSpikeBall(pc),a2
  619.         jsr (CreateChild6_Simple).l
  620.         bne.s   +
  621.         move.b  #2,subtype(a1)
  622. +       rts
  623. ; ---------------------------------------------------------------------------
  624.  
  625. BossSR_SpikeBallDownx2_Attack_Start2:
  626.         move.w  #$3F,$2E(a0)
  627.         move.l  #BossSR_SetSubroutine,$34(a0)
  628.         sfx sfx_SpikeBall2,0,0,0
  629.         lea ChildObjDat_BossSRSpikeBall(pc),a2
  630.         jsr (CreateChild6_Simple).l
  631.         bne.s   +
  632.         move.b  #2,subtype(a1)
  633. +       rts
  634. ; ---------------------------------------------------------------------------
  635. ; Босс атакует с помощью шипастого шара 5
  636. ; ---------------------------------------------------------------------------
  637.  
  638. BossSR_SpikeBallUp_Attack:
  639.         move.b  #_Setup2,routine(a0)
  640.         move.w  #-$200,y_vel(a0)
  641.         move.l  #BossSR_SpikeBallUp_CheckPos,$34(a0)
  642.  
  643. BossSR_SpikeBallUp_CheckPos:
  644.         move.w  (Camera_Y_pos).w,d0
  645.         addi.w  #$60,d0
  646.         cmp.w   y_pos(a0),d0
  647.         blo.s       +
  648.         move.w  d0,y_pos(a0)
  649.         move.b  #_Setup1,routine(a0)
  650.         move.l  #BossSR_SpikeBallUp_Attack_Start,$34(a0)
  651.         clr.w   y_vel(a0)
  652.         jsr (Swing_Setup1).l
  653. +       rts
  654. ; ---------------------------------------------------------------------------
  655.  
  656. BossSR_SpikeBallUp_Attack_Start:
  657.         move.w  #$2F,$2E(a0)
  658.         move.l  #BossSR_SetSubroutine,$34(a0)
  659.         sfx sfx_SpikeBall2,0,0,0
  660.         lea ChildObjDat_BossSRSpikeBall(pc),a2
  661.         jsr (CreateChild6_Simple).l
  662.         bne.s   +
  663.         move.b  #8,subtype(a1)
  664. +       rts
  665. ; ---------------------------------------------------------------------------
  666. ; Босс смеётся
  667. ; ---------------------------------------------------------------------------
  668.  
  669. BossSR_Boss_Laugh:
  670.         bset    #5,status(a0)
  671.         move.w  #$4F,$2E(a0)
  672.         move.l  #BossSR_Boss_Laugh_Stop,$34(a0)
  673.         rts
  674. ; ---------------------------------------------------------------------------
  675.  
  676. BossSR_Boss_Laugh_Stop:
  677.         bclr    #5,status(a0)
  678.         move.w  #$2F,$2E(a0)
  679.         move.l  #BossSR_SetSubroutine,$34(a0)
  680.         rts
  681. ; ---------------------------------------------------------------------------
  682. ; Босс атакует с помощью лазера (Сверху)
  683. ; ---------------------------------------------------------------------------
  684.  
  685. BossSR_Laser_Attack_Up:
  686.         move.b  #_Setup2,routine(a0)
  687.         move.w  #-$200,y_vel(a0)
  688.         move.l  #BossSR_Laser_Up_CheckPos,$34(a0)
  689.  
  690. BossSR_Laser_Up_CheckPos:
  691.         move.w  (Camera_Y_pos).w,d0
  692.         addi.w  #$80,d0
  693.         cmp.w   y_pos(a0),d0
  694.         blo.s       ++
  695.         move.w  d0,y_pos(a0)
  696.         tst.b   obBSR_Warning(a0)
  697.         bne.s   +
  698.         st  obBSR_Warning(a0)
  699.         sfx sfx_Siren,0,0,0
  700.         move.w  #$F,$2E(a0)
  701. +       move.l  #BossSR_Laser_Up_Attack_Start,$34(a0)
  702.         clr.w   y_vel(a0)
  703. +       rts
  704. ; ---------------------------------------------------------------------------
  705.  
  706. BossSR_Laser_Up_Attack_Start:
  707.         sfx sfx_Laser6,0,0,0
  708.         move.w  #$F,$2E(a0)
  709.         move.l  #BossSR_Laser_Up_Stop,$34(a0)
  710.         lea ChildObjDat_BossSRLaser(pc),a2
  711.         jmp (CreateChild1_Normal).l
  712. ; ---------------------------------------------------------------------------
  713.  
  714. BossSR_Laser_Up_Stop:
  715.         move.b  #_Setup1,routine(a0)
  716.         move.w  #$1F,$2E(a0)
  717.         move.l  #BossSR_SetSubroutine,$34(a0)
  718.         jmp (Swing_Setup1).l
  719. ; ---------------------------------------------------------------------------
  720. ; Босс атакует с помощью лазера (Снизу)
  721. ; ---------------------------------------------------------------------------
  722.  
  723. BossSR_Laser_Attack_Down:
  724.         move.b  #_Setup2,routine(a0)
  725.         move.w  #$200,y_vel(a0)
  726.         move.l  #BossSR_Laser_Down_CheckPos,$34(a0)
  727.  
  728. BossSR_Laser_Down_CheckPos:
  729.         move.w  (Camera_Y_pos).w,d0
  730.         addi.w  #$B0,d0
  731.         cmp.w   y_pos(a0),d0
  732.         bhs.s   ++
  733.         move.w  d0,y_pos(a0)
  734.         tst.b   obBSR_Warning(a0)
  735.         bne.s   +
  736.         st  obBSR_Warning(a0)
  737.         sfx sfx_Siren,0,0,0
  738.         move.w  #$F,$2E(a0)
  739. +       move.l  #BossSR_Laser_Down_Attack_Start,$34(a0)
  740.         clr.w   y_vel(a0)
  741. +       rts
  742. ; ---------------------------------------------------------------------------
  743.  
  744. BossSR_Laser_Down_Attack_Start:
  745.         sfx sfx_Laser6,0,0,0
  746.         move.w  #$F,$2E(a0)
  747.         move.l  #BossSR_Laser_Down_Stop,$34(a0)
  748.         lea ChildObjDat_BossSRLaser(pc),a2
  749.         jmp (CreateChild1_Normal).l
  750. ; ---------------------------------------------------------------------------
  751.  
  752. BossSR_Laser_Down_Stop:
  753.         move.b  #_Setup1,routine(a0)
  754.         move.w  #$1F,$2E(a0)
  755.         move.l  #BossSR_SetSubroutine,$34(a0)
  756.         jmp (Swing_Setup1).l
  757. ; ---------------------------------------------------------------------------
  758. ; Проверка урона
  759. ; ---------------------------------------------------------------------------
  760.  
  761. ; =============== S U B R O U T I N E =======================================
  762.  
  763. BossSR_CheckTouch:
  764.         tst.b   collision_flags(a0)
  765.         bne.s   BossSR_CheckTouch_Return
  766.         tst.b   collision_property(a0)
  767.         beq.s   BossSR_CheckTouch_WaitExplosive
  768.         tst.b   $1C(a0)
  769.         bne.s   ++
  770.         move.b  #$30,$1C(a0)
  771.         sfx sfx_HitBoss,0,0,0
  772.         bset    #6,status(a0)
  773.         tst.w   (Ring_count).w
  774.         bne.s   +
  775.         jsr (Create_New_Sprite).l
  776.         bne.s   +
  777.         move.l  #Obj_Bouncing_Ring,(a1)
  778.         move.w  x_pos(a0),x_pos(a1)
  779.         move.w  y_pos(a0),y_pos(a1)
  780.         move.w  a0,$3E(a1)
  781. +       cmpi.b  #BossSR_Hits/4,$29(a0)
  782.         bne.s   +
  783.         st  obBSR_Pinch(a0)
  784. +       moveq   #0,d0
  785.         btst    #0,$1C(a0)
  786.         bne.s   +
  787.         addq.w  #3*2,d0
  788. +       jsr (BossFlash).l
  789.         subq.b  #1,$1C(a0)
  790.         bne.s   BossSR_CheckTouch_Return
  791.         bclr    #6,status(a0)
  792.         move.b  collision_restore_flags(a0),collision_flags(a0)
  793.  
  794. BossSR_CheckTouch_Return:
  795.         rts
  796. ; ---------------------------------------------------------------------------
  797.  
  798. BossSR_CheckTouch_WaitExplosive:
  799.         move.l  #Wait_FadeToLevelMusic,address(a0)
  800.         move.l  #BossSR_CheckTouch_WaitExplosive_Restore,$34(a0)
  801.         addq.b  #2,(BackgroundEvent_routine).w
  802.         bset    #7,status(a0)
  803.         lea (Child6_CreateBossExplosion).l,a2
  804.         jsr (CreateChild1_Normal).l
  805.         bne.s   +
  806.         move.b  #4,subtype(a1)
  807. +       move.w  #$7F,$2E(a0)
  808.         jmp (BossDefeated_NoTime).l
  809. ; ---------------------------------------------------------------------------
  810.  
  811. BossSR_CheckTouch_WaitExplosive_Restore:
  812.         move.l  #loc_7A3E6,(a0)
  813.         bset    #0,render_flags(a0)
  814.         move.w  #$400,x_vel(a0)
  815.         clr.w   y_vel(a0)
  816.         rts
  817. ; ---------------------------------------------------------------------------
  818.  
  819. loc_7A3E6:
  820.         subq.w  #1,$2E(a0)
  821.         bmi.s   loc_7A3F8
  822.         jsr (MoveSprite2).l
  823.         jmp (Draw_Sprite).l
  824. ; ---------------------------------------------------------------------------
  825.  
  826. loc_7A3F8:
  827.         addq.b  #2,(Dynamic_resize_routine).w
  828.         move.l  #Go_Delete_Sprite,address(a0)
  829.         rts
  830. ; ---------------------------------------------------------------------------
  831. ; Огонь из трубы босса
  832. ; ---------------------------------------------------------------------------
  833.  
  834. ; =============== S U B R O U T I N E =======================================
  835.  
  836. Obj_BossSRTube_Fire:
  837.         btst    #1,(Level_frame_counter+1).w
  838.         beq.s   BossSRTube_Fire_Draw
  839.         move.l  a0,-(sp)
  840.         movea.w parent3(a0),a0
  841.         lea ChildObjDat_BossGreyBall_Fire(pc),a2
  842.         jsr (CreateChild1_Normal).l
  843.         bne.s   +
  844.         move.b  #24/2,$3A(a1)
  845.         move.b  #24/2,$3B(a1)
  846.         move.w  #$100,$3C(a1)
  847. +       movea.l (sp)+,a0
  848.  
  849. BossSRTube_Fire_Draw:
  850.         jsr (Refresh_ChildPositionAdjusted).l
  851.         jmp (Child_CheckParent).l
  852. ; ---------------------------------------------------------------------------
  853. ; Труба босса
  854. ; ---------------------------------------------------------------------------
  855.  
  856. ; =============== S U B R O U T I N E =======================================
  857.  
  858. Obj_BossSRTube:
  859.         lea ObjDat_BossSRTube(pc),a1
  860.         jsr (SetUp_ObjAttributes).l
  861.         move.l  #+,address(a0)
  862. +       jsr (Refresh_ChildPositionAdjusted).l
  863.         moveq   #0,d0
  864.         jmp (Child_Draw_Sprite_FlickerMove).l
  865. ; ---------------------------------------------------------------------------
  866. ; Шипастый шар босса
  867. ; ---------------------------------------------------------------------------
  868.  
  869. ; =============== S U B R O U T I N E =======================================
  870.  
  871. Obj_BossSRSpikeBall:
  872.         moveq   #0,d0
  873.         move.b  routine(a0),d0
  874.         move.w  BossSRSpikeBall_Index(pc,d0.w),d1
  875.         jsr BossSRSpikeBall_Index(pc,d1.w)
  876.         movea.w parent3(a0),a1
  877.         btst    #7,status(a1)
  878.         bne.w   BossSRSpikeBall_Remove
  879.         jmp (Sprite_CheckDeleteTouchXY).l
  880. ; ---------------------------------------------------------------------------
  881.  
  882. BossSRSpikeBall_Index: offsetTable
  883.         offsetTableEntry.w BossSRSpikeBall_Init
  884.         offsetTableEntry.w BossSRSpikeBall_Setup
  885.         offsetTableEntry.w BossSRSpikeBall_Setup2
  886.         offsetTableEntry.w BossSRSpikeBall_Setup3
  887.         offsetTableEntry.w BossSRSpikeBall_Setup4
  888.         offsetTableEntry.w BossSRSpikeBall_Setup5
  889. ; ---------------------------------------------------------------------------
  890.  
  891. BossSRSpikeBall_Init:
  892.         lea ObjDat_BossSRSpikeBall(pc),a1
  893.         jsr (SetUp_ObjAttributes).l
  894.         move.b  #48/2,y_radius(a0)
  895.         move.l  #BossSRSpikeBall_Fall,$34(a0)
  896.         tst.b   subtype(a0)
  897.         beq.s   +
  898.         move.l  #BossSRSpikeBall_Fall2,$34(a0)
  899. +       cmpi.b  #4,subtype(a0)
  900.         bne.s   +
  901.         move.b  #_Setup3,routine(a0)
  902.         move.l  #BossSRSpikeBall_Fall,$34(a0)
  903.         clr.b   collision_flags(a0)
  904. +       cmpi.b  #6,subtype(a0)
  905.         bne.s   +
  906.         move.b  #_Setup3,routine(a0)
  907.         move.l  #BossSRSpikeBall_Fall4,$34(a0)
  908.         clr.b   collision_flags(a0)
  909. +       cmpi.b  #8,subtype(a0)
  910.         bne.s   +
  911.         move.l  #BossSRSpikeBall_Fall5,$34(a0)
  912.         move.b  #128/2,y_radius(a0)
  913. +       rts
  914. ; ---------------------------------------------------------------------------
  915.  
  916. BossSRSpikeBall_Setup3:
  917.         bsr.w   BossSRSpikeBall_CheckPlayer
  918.         btst    #0,(V_int_run_count+3).w
  919.         beq.s   BossSRSpikeBall_Setup
  920.         eori.w  #$6000,art_tile(a0)
  921.  
  922. BossSRSpikeBall_Setup:
  923.         jsr (MoveSprite).l
  924.         jmp (ObjHitFloor_DoRoutine).l
  925. ; ---------------------------------------------------------------------------
  926.  
  927. BossSRSpikeBall_Setup5:
  928.         moveq   #0,d0
  929.         move.b  angle(a0),d0
  930.         addq.b  #4,d0
  931.         move.b  d0,angle(a0)
  932.         jsr (GetSineCosine).l
  933.         asr.w   #2,d0
  934.         neg.w   d0
  935.         move.w  d0,y_vel(a0)
  936.         bra.s   BossSRSpikeBall_Setup2
  937. ; ---------------------------------------------------------------------------
  938.  
  939. BossSRSpikeBall_Setup4:
  940.         btst    #0,(V_int_run_count+3).w
  941.         beq.s   BossSRSpikeBall_Setup2
  942.         eori.w  #$6000,art_tile(a0)
  943.  
  944. BossSRSpikeBall_Setup2:
  945.         jsr (MoveSprite2).l
  946.         jmp (Obj_Wait).l
  947. ; ---------------------------------------------------------------------------
  948.  
  949. BossSRSpikeBall_Fall:
  950.         sfx sfx_SpikeBall,0,0,0
  951.         move.w  #-$300,x_vel(a0)
  952.         move.w  #-$500,y_vel(a0)
  953.         lea ChildObjDat_BossGreyBall_Spark(pc),a2
  954.         jmp (CreateChild6_Simple).l
  955. ; ---------------------------------------------------------------------------
  956.  
  957. BossSRSpikeBall_Fall5:
  958.         move.b  #_Setup2,routine(a0)
  959.         move.w  #-$400,x_vel(a0)
  960.         move.w  #4,$2E(a0)
  961.         move.l  #BossSRSpikeBall_Fall_Up,$34(a0)
  962.         clr.w   y_vel(a0)
  963.         lea ChildObjDat_BossSRSpikeBallFan(pc),a2
  964.         jmp (CreateChild1_Normal).l
  965. ; ---------------------------------------------------------------------------
  966.  
  967. BossSRSpikeBall_Fall_Up:
  968.         move.b  #_Setup5,routine(a0)
  969.         move.w  #-$200,y_vel(a0)
  970.         move.w  #7,$2E(a0)
  971.         move.l  #BossSRSpikeBall_Fall6,$34(a0)
  972.         rts
  973. ; ---------------------------------------------------------------------------
  974.  
  975. BossSRSpikeBall_Fall2:
  976.         move.b  #_Setup2,routine(a0)
  977.  
  978. BossSRSpikeBall_Fall4:
  979.         sfx sfx_SpikeBall,0,0,0
  980.         move.w  #-$400,x_vel(a0)
  981.  
  982. BossSRSpikeBall_Fall6:
  983.         clr.w   y_vel(a0)
  984.         move.l  #BossSRSpikeBall_Return,$34(a0)
  985.  
  986. BossSRSpikeBall_Return:
  987.         rts
  988. ; ---------------------------------------------------------------------------
  989.  
  990. obSpikeBall_CheckXY:
  991.         dc.w -32        ; X right pos
  992.         dc.w 40     ; X left pos
  993.         dc.w -32        ; Y down pos
  994.         dc.w 64     ; Y up pos
  995. ; ---------------------------------------------------------------------------
  996.  
  997. BossSRSpikeBall_CheckPlayer:
  998.         lea (Player_1).w,a1
  999.         lea obSpikeBall_CheckXY(pc),a2
  1000.         jsr (Check_InMyRange).l
  1001.         beq.s   BossSRSpikeBall_CheckPlayer_Return
  1002.         jsr (Check_PlayerAttack).l
  1003.         beq.s   BossSRSpikeBall_Hurt
  1004.         tst.w   y_vel(a1)
  1005.         bpl.s   BossSRSpikeBall_Hurt
  1006.         move.b  #_Setup4,routine(a0)
  1007.         movea.w parent3(a0),a1
  1008.         move.w  x_pos(a0),d1
  1009.         move.w  y_pos(a0),d2
  1010.         sub.w   x_pos(a1),d1
  1011.         sub.w   y_pos(a1),d2
  1012.         jsr (GetArcTan).l
  1013.         jsr (GetSineCosine).l
  1014.         move.w  #-$A00,d2
  1015.         muls.w  d2,d1
  1016.         asr.l   #8,d1
  1017.         move.w  d1,x_vel(a0)
  1018.         muls.w  d2,d0
  1019.         asr.l   #8,d0
  1020.         move.w  d0,y_vel(a0)
  1021.         sfx sfx_SpikeAttack,0,0,0
  1022.         move.l  #BossSRSpikeBall_Fall3,$34(a0)
  1023.  
  1024. BossSRSpikeBall_CheckPlayer_Return:
  1025.         rts
  1026. ; ---------------------------------------------------------------------------
  1027.  
  1028. BossSRSpikeBall_Hurt:
  1029.         jmp (sub_24280).l
  1030. ; ---------------------------------------------------------------------------
  1031.  
  1032. BossSRSpikeBall_Fall3:
  1033.         move.w  (Camera_X_pos).w,d0
  1034.         addi.w  #$110,d0
  1035.         cmp.w   x_pos(a0),d0
  1036.         bge.s   BossSRSpikeBall_Fall3_Return
  1037.         movea.w parent3(a0),a1
  1038.         move.b  collision_flags(a1),collision_restore_flags(a1)
  1039.         move.b  #0,collision_flags(a1)
  1040.         subq.b  #1,boss_hitcount2(a1)
  1041.         clr.l   x_vel(a0)
  1042.         lea ChildObjDat_BossGreyBall_Splinter(pc),a2
  1043.         jsr (CreateChild6_Simple).l
  1044.  
  1045. BossSRSpikeBall_Remove:
  1046.         move.l  #Go_Delete_Sprite,address(a0)
  1047.  
  1048. BossSRSpikeBall_Fall3_Return:
  1049.         rts
  1050. ; ---------------------------------------------------------------------------
  1051. ; Шипастый шар босса (Пропеллер)
  1052. ; ---------------------------------------------------------------------------
  1053.  
  1054. Obj_BossSRSpikeBallFan:
  1055.         lea ObjDat_BossSRSpikeBallFan(pc),a1
  1056.         jsr (SetUp_ObjAttributes).l
  1057.         move.l  #BossSRSpikeBallFan_Move,address(a0)
  1058.  
  1059. BossSRSpikeBallFan_Move:
  1060.         subq.b  #1,child_dy(a0)
  1061.         cmpi.b  #-16,child_dy(a0)
  1062.         bne.s   BossSRSpikeBallFan_Draw
  1063.         move.l  #BossSRSpikeBallFan_Animate,address(a0)
  1064.  
  1065. BossSRSpikeBallFan_Animate:
  1066.         lea AniRaw_BossSRSpikeBallFan(pc),a1
  1067.         jsr (Animate_RawNoSST).l
  1068.  
  1069. BossSRSpikeBallFan_Draw:
  1070.         jsr (Refresh_ChildPositionAdjusted).l
  1071.         jmp (Child_Draw_Sprite).l
  1072. ; ---------------------------------------------------------------------------
  1073.  
  1074. AniRaw_BossSRSpikeBallFan:  dc.b 0, 3, 0, 1, 2, $FC
  1075.     even
  1076. ; ---------------------------------------------------------------------------
  1077. ; Ракета босса
  1078. ; ---------------------------------------------------------------------------
  1079.  
  1080. ; =============== S U B R O U T I N E =======================================
  1081.  
  1082. Obj_BossSRRocket:
  1083.         move.w  (Camera_X_pos).w,d0
  1084.         addi.w  #$140,d0
  1085.         move.w  d0,x_pos(a0)
  1086.         move.w  (Camera_Y_pos).w,d0
  1087.         move.w  #$70,d1
  1088.         tst.b   subtype(a0)
  1089.         beq.s   +
  1090.         move.w  #$C0,d1
  1091. +       add.w   d1,d0
  1092.         move.w  d0,y_pos(a0)
  1093.         lea ObjDat_BossSRRocket(pc),a1
  1094.         jsr (SetUp_ObjAttributes).l
  1095.         move.w  #-$600,x_vel(a0)
  1096.         lea ChildObjDat_BossSRRocket_Fire(pc),a2
  1097.         jsr (CreateChild1_Normal).l
  1098.         move.l  #+,address(a0)
  1099. +       jsr (MoveSprite2).l
  1100.         movea.w parent3(a0),a1
  1101.         btst    #7,status(a1)
  1102.         bne.w   BossSRSpikeBall_Remove
  1103.         move.b  (V_int_run_count+3).w,d3
  1104.         andi.b  #7,d3
  1105.         bne.s   +
  1106.         lea ChildObjDat_BossSRRocket_Smoke(pc),a2
  1107.         jsr (CreateChild1_Normal).l
  1108. +       jmp (Sprite_CheckDeleteTouchXY).l
  1109. ; ---------------------------------------------------------------------------
  1110. ; Ракета босса (Огонь)
  1111. ; ---------------------------------------------------------------------------
  1112.  
  1113. ; =============== S U B R O U T I N E =======================================
  1114.  
  1115. Obj_BossSRRocket_Fire:
  1116.         lea ObjDat_BossSRRocket_Fire(pc),a1
  1117.         jsr (SetUp_ObjAttributes).l
  1118.         move.l  #+,address(a0)
  1119. +       moveq   #1,d0
  1120.         btst    #0,(V_int_run_count+3).w
  1121.         beq.s   +
  1122.         addq.b  #1,d0
  1123. +       move.b  d0,mapping_frame(a0)
  1124.         jsr (Refresh_ChildPositionAdjusted).l
  1125.         jmp (Child_Draw_Sprite).l
  1126. ; ---------------------------------------------------------------------------
  1127. ; Ракета босса (Дым)
  1128. ; ---------------------------------------------------------------------------
  1129.  
  1130. ; =============== S U B R O U T I N E =======================================
  1131.  
  1132. Obj_BossSRRocket_Smoke:
  1133.         lea ObjDat_BossSRRocket_Smoke(pc),a1
  1134.         jsr (SetUp_ObjAttributes).l
  1135.         move.l  #Go_Delete_Sprite,$34(a0)
  1136.         move.l  #BossSRRocket_Smoke_Draw,(a0)
  1137.         movea.w parent3(a0),a1
  1138.         move.w  x_vel(a1),d0
  1139.         asr.w   #3,d0
  1140.         move.w  d0,x_vel(a0)
  1141.  
  1142. BossSRRocket_Smoke_Draw:
  1143.         lea AniRaw_BossSRRocket_Smoke(pc),a1
  1144.         jsr (Animate_RawNoSSTMultiDelay).l
  1145.         jsr (MoveSprite2).l
  1146.         jmp (Child_Draw_Sprite).l
  1147. ; ---------------------------------------------------------------------------
  1148.  
  1149. AniRaw_BossSRRocket_Smoke:
  1150.         dc.b 0, 3
  1151.         dc.b 0, 3
  1152.         dc.b 1, 3
  1153.         dc.b 2, 4
  1154.         dc.b 3, 5
  1155.         dc.b $F4, 0
  1156. ; ---------------------------------------------------------------------------
  1157. ; Лазер босса
  1158. ; ---------------------------------------------------------------------------
  1159.  
  1160. ; =============== S U B R O U T I N E =======================================
  1161.  
  1162. Obj_BossSRLaser:
  1163.         lea ObjDat3_BossSRLaser(pc),a1
  1164.         jsr (SetUp_ObjAttributes).l
  1165.         movea.w parent3(a0),a1
  1166.         jsr (Refresh_ChildPositionAdjusted).l
  1167.         moveq   #0,d0
  1168.         tst.b   subtype(a0)
  1169.         beq.s   loc_7ABB8
  1170.         moveq   #6,d0
  1171.         move.b  #0,mapping_frame(a0)
  1172.         move.w  #$100,priority(a0)
  1173.  
  1174. loc_7ABB8:
  1175.         move.w  d0,$2E(a0)
  1176.         move.l  #loc_7ABC2,(a0)
  1177.  
  1178. loc_7ABC2:
  1179.         subq.w  #1,$2E(a0)
  1180.         bmi.s   loc_7ABCE
  1181.         jmp (Child_Draw_Sprite).l
  1182. ; ---------------------------------------------------------------------------
  1183.  
  1184. loc_7ABCE:
  1185.         move.l  #loc_7ABEE,(a0)
  1186.         move.w  #-$700,d0
  1187.         btst    #0,render_flags(a0)
  1188.         beq.s   loc_7ABE2
  1189.         neg.w   d0
  1190.  
  1191. loc_7ABE2:
  1192.         move.w  d0,x_vel(a0)
  1193.  
  1194. loc_7ABEE:
  1195.         jsr (MoveSprite2).l
  1196.         jmp (Sprite_CheckDeleteTouch).l
  1197. ; ---------------------------------------------------------------------------
  1198. ; Test your might
  1199. ; ---------------------------------------------------------------------------
  1200.  
  1201. ; =============== S U B R O U T I N E =======================================
  1202.  
  1203. Obj_BossSRTYM:
  1204.         move.w  (Camera_X_pos).w,d0
  1205.         addi.w  #$64,d0
  1206.         move.w  d0,x_pos(a0)
  1207.         move.w  (Camera_Y_pos).w,d0
  1208.         addi.w  #$60,d0
  1209.         move.w  d0,y_pos(a0)
  1210.         lea ObjDat3_BossSRTYM(pc),a1
  1211.         jsr (SetUp_ObjAttributes).l
  1212.         move.w  #$A7,$2E(a0)
  1213.         move.l  #BossSRTYM_Draw,address(a0)
  1214.  
  1215. BossSRTYM_Draw:
  1216.         subq.w  #1,$2E(a0)
  1217.         bmi.s   BossSRTYM_Remove
  1218.         btst    #3,$2F(a0)
  1219.         beq.s   BossSRTYM_CheckParent
  1220.         jmp (Child_Draw_Sprite).l
  1221. ; ---------------------------------------------------------------------------
  1222.  
  1223. BossSRTYM_CheckParent:
  1224.         jmp (Child_CheckParent).l
  1225. ; ---------------------------------------------------------------------------
  1226.  
  1227. BossSRTYM_Remove:
  1228.         movea.w parent3(a0),a1
  1229.         move.w  #$2F,$2E(a1)
  1230.         move.l  #Obj_BossSR_Start,$34(a1)
  1231.         move.l  #Go_Delete_Sprite,address(a0)
  1232.         rts
  1233. ; ---------------------------------------------------------------------------
  1234. ; Голова роботника
  1235. ; ---------------------------------------------------------------------------
  1236.  
  1237. ; =============== S U B R O U T I N E =======================================
  1238.  
  1239. Obj_RobotnikHead3:
  1240.         jsr (Refresh_ChildPositionAdjusted).l
  1241.         moveq   #0,d0
  1242.         move.b  routine(a0),d0
  1243.         move.w  RobotnikHead3_Index(pc,d0.w),d1
  1244.         jsr RobotnikHead3_Index(pc,d1.w)
  1245.         jmp (Child_Draw_Sprite2).l
  1246. ; ---------------------------------------------------------------------------
  1247.  
  1248. RobotnikHead3_Index: offsetTable
  1249.         offsetTableEntry.w Obj_RobotnikHead3Init
  1250.         offsetTableEntry.w Obj_RobotnikHead3Main
  1251.         offsetTableEntry.w Obj_RobotnikHead3End
  1252. ; ---------------------------------------------------------------------------
  1253.  
  1254. Obj_RobotnikHead3Init:
  1255.         lea ObjDat_RobotnikHead(pc),a1
  1256.         jsr (SetUp_ObjAttributes).l
  1257.         move.l  #AniRaw_RobotnikHead,$30(a0)
  1258.         movea.w parent3(a0),a1
  1259.         btst    #7,art_tile(a1)
  1260.         beq.s   +
  1261.         bset    #7,art_tile(a0)
  1262. +       rts
  1263. ; ---------------------------------------------------------------------------
  1264.  
  1265. Obj_RobotnikHead3Main:
  1266.         movea.w parent3(a0),a1
  1267.         btst    #5,status(a1)
  1268.         bne.s   Obj_RobotnikHead3_Laugh
  1269.         cmpi.b  #id_SonicHurt,(Player_1+routine).w
  1270.         bhs.s   Obj_RobotnikHead3_Laugh
  1271.         jsr (Animate_Raw).l
  1272.         movea.w parent3(a0),a1
  1273.         btst    #7,status(a1)
  1274.         bne.s   ++
  1275.         btst    #6,status(a1)
  1276.         beq.s   +
  1277.         move.b  #2,mapping_frame(a0)
  1278. +       rts
  1279. ; ---------------------------------------------------------------------------
  1280. +       move.b  #4,routine(a0)
  1281.         move.b  #5,mapping_frame(a0)
  1282.  
  1283. Obj_RobotnikHeadEnd:
  1284.         rts
  1285. ; ---------------------------------------------------------------------------
  1286.  
  1287. Obj_RobotnikHead3End:
  1288.         movea.w parent3(a0),a1
  1289.         btst    #7,status(a1)
  1290.         bne.s   Obj_RobotnikHeadEnd
  1291.         lea AniRaw_RobotnikHead(pc),a1
  1292.         jmp (Animate_RawNoSST).l
  1293. ; ---------------------------------------------------------------------------
  1294.  
  1295. Obj_RobotnikHead3_Laugh:
  1296.         lea AniRaw_RobotnikHead_Laugh(pc),a1
  1297.         jmp (Animate_RawNoSST).l
  1298. ; ---------------------------------------------------------------------------
  1299. ; Огонь из корабля
  1300. ; ---------------------------------------------------------------------------
  1301.  
  1302. ; =============== S U B R O U T I N E =======================================
  1303.  
  1304. Obj_RobotnikFire:
  1305.         lea ObjDat3_RobotnikFire(pc),a1
  1306.         jsr (SetUp_ObjAttributes3).l
  1307.         move.l  #+,(a0)
  1308. +       movea.w parent3(a0),a1
  1309.         btst    #7,status(a1)
  1310.         bne.s   RobotnikFire_Remove
  1311.         btst    #6,$38(a1)
  1312.         bne.s   Obj_RobotnikHeadEnd
  1313.         btst    #0,(V_int_run_count+3).w
  1314.         bne.s   Obj_RobotnikHeadEnd
  1315.         jsr (Refresh_ChildPositionAdjusted).l
  1316.         jsr (Add_SpriteToCollisionResponseList).l
  1317.         jmp (Draw_Sprite).l
  1318. ; ---------------------------------------------------------------------------
  1319.  
  1320. RobotnikFire_Remove:
  1321.         jmp (Delete_Current_Sprite).l
  1322.  
  1323. ; =============== S U B R O U T I N E =======================================
  1324.  
  1325. ObjDat_BossSR:
  1326.         dc.l Map_RobotnikShip
  1327.         dc.w $E0
  1328.         dc.w $200
  1329.         dc.b 80/2
  1330.         dc.b 80/2
  1331.         dc.b 7
  1332.         dc.b $F
  1333. ObjDat_RobotnikHead:
  1334.         dc.l Map_RobotnikShip
  1335.         dc.w $E0
  1336.         dc.w $280
  1337.         dc.b $10
  1338.         dc.b 8
  1339.         dc.b 0
  1340.         dc.b 0
  1341. ObjDat3_RobotnikFire:
  1342.         dc.w $200
  1343.         dc.b 8
  1344.         dc.b 4
  1345.         dc.b 8
  1346.         dc.b 0
  1347. ObjDat_BossSRTube:
  1348.         dc.l Map_RobotnikTube
  1349.         dc.w $6152
  1350.         dc.w $180
  1351.         dc.b 48/2
  1352.         dc.b 16/2
  1353.         dc.b 0
  1354.         dc.b 0
  1355. ObjDat_BossSRSpikeBall:
  1356.         dc.l Map_RobotnikSpikeBall
  1357.         dc.w $6168
  1358.         dc.w $280
  1359.         dc.b 48/2
  1360.         dc.b 48/2
  1361.         dc.b 0
  1362.         dc.b $F|$80
  1363. ObjDat_BossSRSpikeBallFan:
  1364.         dc.l Map_RobotnikSpikeBallFan
  1365.         dc.w $61B9
  1366.         dc.w $300
  1367.         dc.b 48/2
  1368.         dc.b 8/2
  1369.         dc.b 2
  1370.         dc.b 0
  1371. ObjDat_BossSRRocket:
  1372.         dc.l Map_RobotnikRocket
  1373.         dc.w $6158
  1374.         dc.w $280
  1375.         dc.b 64/2
  1376.         dc.b 16/2
  1377.         dc.b 0
  1378.         dc.b $B|$80
  1379. ObjDat_BossSRRocket_Fire:
  1380.         dc.l Map_RobotnikRocket
  1381.         dc.w $6158
  1382.         dc.w $280
  1383.         dc.b 16/2
  1384.         dc.b 16/2
  1385.         dc.b 1
  1386.         dc.b 0
  1387. ObjDat_BossSRRocket_Smoke:
  1388.         dc.l Map_RobotnikRocket_Smoke
  1389.         dc.w $61C5
  1390.         dc.w $300
  1391.         dc.b 16/2
  1392.         dc.b 16/2
  1393.         dc.b 0
  1394.         dc.b 0
  1395. ObjDat3_BossSRLaser:
  1396.         dc.l Map_RobotnikLaser
  1397.         dc.w $617E
  1398.         dc.w $280
  1399.         dc.b 48/2
  1400.         dc.b 16/2
  1401.         dc.b 1
  1402.         dc.b $1C|$80
  1403. ObjDat3_BossSRTYM:
  1404.         dc.l Map_RobotnikTYM
  1405.         dc.w $2186
  1406.         dc.w $280
  1407.         dc.b 136/2
  1408.         dc.b 24/2
  1409.         dc.b 0
  1410.         dc.b 0
  1411. AniRaw_RobotnikHead:
  1412.         dc.b 5
  1413.         dc.b 0
  1414.         dc.b 1
  1415.         dc.b $FC
  1416. AniRaw_RobotnikHead_Laugh:
  1417.         dc.b 5
  1418.         dc.b 3
  1419.         dc.b 4
  1420.         dc.b $FC
  1421. Child1_MakeRoboHead3:
  1422.         dc.w 1-1
  1423.         dc.l Obj_RobotnikHead3
  1424.         dc.b 0, $E4
  1425. ChildObjDat_RobotnikFire:
  1426.         dc.w 1-1
  1427.         dc.l Obj_RobotnikFire
  1428.         dc.b $1E, 0
  1429. ChildObjDat_BossSRTYM:
  1430.         dc.w 1-1
  1431.         dc.l Obj_BossSRTYM
  1432. ChildObjDat_BossSRTube:
  1433.         dc.w 1-1
  1434.         dc.l Obj_BossSRTube
  1435.         dc.b -16, 24
  1436. ChildObjDat_BossSRTube_Fire:
  1437.         dc.w 1-1
  1438.         dc.l Obj_BossSRTube_Fire
  1439. ChildObjDat_BossSRSpikeBall:
  1440.         dc.w 1-1
  1441.         dc.l Obj_BossSRSpikeBall
  1442. ChildObjDat_BossSRSpikeBallFan:
  1443.         dc.w 1-1
  1444.         dc.l Obj_BossSRSpikeBallFan
  1445.         dc.b -4, 0
  1446. ChildObjDat_BossSRRocket:
  1447.         dc.w 1-1
  1448.         dc.l Obj_BossSRRocket
  1449. ChildObjDat_BossSRRocket2:
  1450.         dc.w 2-1
  1451.         dc.l Obj_BossSRRocket
  1452. ChildObjDat_BossSRRocket_Fire:
  1453.         dc.w 1-1
  1454.         dc.l Obj_BossSRRocket_Fire
  1455.         dc.b 48, 0
  1456. ChildObjDat_BossSRRocket_Smoke:
  1457.         dc.w 1-1
  1458.         dc.l Obj_BossSRRocket_Smoke
  1459.         dc.b 40, -8
  1460. ChildObjDat_BossSRLaser:
  1461.         dc.w 2-1
  1462.         dc.l Obj_BossSRLaser
  1463.         dc.b $F4, $FC
  1464.         dc.l Obj_BossSRLaser
  1465.         dc.b $E8, $FC
  1466. ; ---------------------------------------------------------------------------
  1467.  
  1468.         include "Objects/Boss Robotnik/Object Data/Map - Robotnik Laser.asm"
  1469.         include "Objects/Boss Robotnik/Object Data/Map - Robotnik Rocket.asm"
  1470.         include "Objects/Boss Robotnik/Object Data/Map - Robotnik Rocket Smoke.asm"
  1471.         include "Objects/Boss Robotnik/Object Data/Map - Robotnik Ship.asm"
  1472.         include "Objects/Boss Robotnik/Object Data/Map - Robotnik Spike Ball Fan.asm"
  1473.         include "Objects/Boss Robotnik/Object Data/Map - Robotnik Spike Ball.asm"
  1474.         include "Objects/Boss Robotnik/Object Data/Map - Robotnik Tube.asm"
  1475.         include "Objects/Boss Robotnik/Object Data/Map - Robotnik TYM.asm"
RAW Paste Data