Advertisement
TheBlad768

Boss(BSR)

Dec 21st, 2019
875
0
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.  
  12. ; Dynamic object variables
  13. obBSR_Routine   = $30   ; .b
  14. obBSR_Pinch     = $31   ; .b
  15.  
  16. ; =============== S U B R O U T I N E =======================================
  17.  
  18. Obj_BossSR:
  19.         move.l  #Obj_Wait,address(a0)
  20.         move.w  #$7F,$2E(a0)
  21.         move.l  #Obj_BossSR_Start,$34(a0)
  22.         rts
  23. ; ---------------------------------------------------------------------------
  24.  
  25. Obj_BossSR_Start:
  26.         move.l  #Obj_BossSR_Main,address(a0)
  27.  
  28. Obj_BossSR_Main:
  29.         moveq   #0,d0
  30.         move.b  routine(a0),d0
  31.         move.w  BossSR_Index(pc,d0.w),d0
  32.         jsr BossSR_Index(pc,d0.w)
  33.         bsr.w   BossSR_CheckTouch
  34.         jmp (Draw_And_Touch_Sprite).l
  35. ; ---------------------------------------------------------------------------
  36.  
  37. BossSR_Index: offsetTable
  38.         offsetTableEntry.w BossSR_Init      ; 0
  39.         offsetTableEntry.w BossSR_Setup ; 2
  40.         offsetTableEntry.w BossSR_Setup2    ; 4
  41.         offsetTableEntry.w BossSR_Setup3    ; 6
  42. ; ---------------------------------------------------------------------------
  43.  
  44. BossSR_Init:
  45.         lea ObjDat_BossSR(pc),a1
  46.         jsr (SetUp_ObjAttributes).l
  47.         move.b  #_Setup2,routine(a0)
  48.         move.b  #BossSR_Hits,collision_property(a0)
  49.         st  (Boss_flag).w
  50.         move.w  #$7F,$2E(a0)
  51.         move.l  #BossSR_MoveDown_Intro,$34(a0)
  52.         move.w  #$100,y_vel(a0)
  53.         lea ChildObjDat_RobotnikHud(pc),a2
  54.         jsr (CreateChild6_Simple).l
  55.         bne.s   +
  56.         move.w  a0,parent3(a1)
  57. +       lea Child1_MakeRoboHead3(pc),a2
  58.         jsr (CreateChild1_Normal).l
  59.         lea ChildObjDat_RobotnikFire(pc),a2
  60.         jsr (CreateChild1_Normal).l
  61.         lea ChildObjDat_BossSRTube(pc),a2
  62.         jmp (CreateChild1_Normal).l
  63. ; ---------------------------------------------------------------------------
  64.  
  65. BossSR_Setup3:
  66.         move.b  (Level_frame_counter+1).w,d0
  67.         andi.w  #7,d0
  68.         bne.s   BossSR_Setup
  69.         sfx sfx_BreakBridge,0,0,0
  70.  
  71. BossSR_Setup:
  72.         jsr (Swing_UpAndDown).l
  73.  
  74. BossSR_Setup2:
  75.         jsr (MoveSprite2).l
  76.         jmp (Obj_Wait).l
  77. ; ---------------------------------------------------------------------------
  78.  
  79. BossSR_MoveDown_Intro:
  80.         move.b  #_Setup1,routine(a0)
  81.         move.l  #BossSR_MoveDown_Laugh,$34(a0)
  82.         clr.w   y_vel(a0)
  83.         jmp (Swing_Setup1).l
  84. ; ---------------------------------------------------------------------------
  85.  
  86. BossSR_MoveDown_Laugh:
  87.         bset    #5,status(a0)
  88.         move.w  #$4F,$2E(a0)
  89.         move.l  #BossSR_MoveDown_StopLaugh,$34(a0)
  90.         rts
  91. ; ---------------------------------------------------------------------------
  92.  
  93. BossSR_MoveDown_StopLaugh:
  94.         move.w  #$F,$2E(a0)
  95.         move.l  #BossSR_SetSubroutine,$34(a0)
  96.         bclr    #5,status(a0)
  97.         rts
  98.  
  99. ; =============== S U B R O U T I N E =======================================
  100.  
  101. BossSR_PinchMode:
  102.         sf  obBSR_Pinch(a0)
  103.         bset    #6,status(a0)
  104.         move.b  #_Setup3,routine(a0)
  105.         move.w  #$4F,$2E(a0)
  106.         clr.b   obBSR_Routine(a0)
  107.         move.l  #BossSR_PinchMode_Stop,$34(a0)
  108.         lea ChildObjDat_BossSRTube_Fire(pc),a2
  109.         jmp (CreateChild1_Normal).l
  110. ; ---------------------------------------------------------------------------
  111.  
  112. BossSR_PinchMode_Stop:
  113.         bclr    #6,status(a0)
  114.         move.l  #BossSR_SetSubroutine,$34(a0)
  115.         rts
  116.  
  117. ; =============== S U B R O U T I N E =======================================
  118.  
  119. BossSR_SetSubroutine:
  120.         tst.b   obBSR_Pinch(a0)
  121.         bne.s   BossSR_PinchMode
  122.         moveq   #0,d0
  123.         move.b  obBSR_Routine(a0),d0
  124.         addq.b  #1,obBSR_Routine(a0)
  125.         lea BossSR_SetMovement(pc),a1
  126.         cmpi.b  #BossSR_Hits/4+1,$29(a0)
  127.         bhs.s   +
  128.         lea BossSR_SetMovement2(pc),a1
  129. +       move.b  (a1,d0.w),d0
  130.         bmi.s   +
  131.         move.l  BossSR_Movement(pc,d0.w),$34(a0)
  132.         rts
  133. +       clr.b   obBSR_Routine(a0)
  134.         rts
  135. ; ---------------------------------------------------------------------------
  136.  
  137. BossSR_SetMovement:
  138.         dc.b 0<<2
  139.         dc.b 1<<2
  140.         dc.b 4<<2
  141.         dc.b 1<<2
  142.         dc.b 0<<2
  143.         dc.b 4<<2
  144.         dc.b 0<<2
  145.         dc.b 0<<2
  146.         dc.b 5<<2
  147.         dc.b 2<<2
  148.         dc.b 3<<2
  149.         dc.b 1<<2
  150.         dc.b 1<<2
  151.         dc.b 4<<2
  152.         dc.b 1<<2
  153.         dc.b 0<<2
  154.         dc.b 5<<2
  155.         dc.b 2<<2
  156.         dc.b 4<<2
  157.         dc.b 2<<2
  158.         dc.b 4<<2
  159.         dc.b 2<<2
  160.         dc.b 0<<2
  161.         dc.b 4<<2
  162.         dc.b 0<<2
  163.         dc.b 1<<2
  164.         dc.b 0<<2
  165.         dc.b 4<<2
  166.         dc.b 1<<2
  167.         dc.b 3<<2
  168.         dc.b 0<<2
  169.         dc.b 5<<2
  170.         dc.b 0<<2
  171.         dc.b 0<<2
  172.         dc.b 1<<2
  173.         dc.b 1<<2
  174.         dc.b 4<<2
  175.         dc.b 2<<2
  176.         dc.b 4<<2
  177.         dc.b -1 ; Конец
  178.     even
  179.  
  180. BossSR_SetMovement2:
  181.         dc.b 6<<2
  182.         dc.b 7<<2
  183.         dc.b 3<<2
  184.         dc.b 2<<2
  185.         dc.b 2<<2
  186.         dc.b 6<<2
  187.         dc.b 7<<2
  188.         dc.b 2<<2
  189.         dc.b 6<<2
  190.         dc.b 7<<2
  191.         dc.b -1 ; Конец
  192.     even
  193.  
  194. BossSR_Movement:
  195.         dc.l BossSR_SpikeBall_Attack        ; 0
  196.         dc.l BossSR_SpikeBall2_Attack       ; 1
  197.         dc.l BossSR_Rocket_Attack           ; 2
  198.         dc.l BossSR_Boss_Attack         ; 3
  199.         dc.l BossSR_SpikeBall3_Attack       ; 4
  200.         dc.l BossSR_Boss_Laugh          ; 5
  201.         dc.l BossSR_Laser_Attack_Down   ; 6
  202.         dc.l BossSR_Laser_Attack_Up     ; 7
  203. ; ---------------------------------------------------------------------------
  204. ; Босс атакует с помощью шипастого шара
  205. ; ---------------------------------------------------------------------------
  206.  
  207. ; =============== S U B R O U T I N E =======================================
  208.  
  209. BossSR_SpikeBall_Attack:
  210.         move.b  #_Setup2,routine(a0)
  211.         move.w  #-$200,y_vel(a0)
  212.         move.l  #BossSR_SpikeBall_CheckPos,$34(a0)
  213.  
  214. BossSR_SpikeBall_CheckPos:
  215.         move.w  (Camera_Y_pos).w,d0
  216.         addi.w  #$60,d0
  217.         cmp.w   y_pos(a0),d0
  218.         blo.s       +
  219.         move.w  d0,y_pos(a0)
  220.         move.b  #_Setup1,routine(a0)
  221.         move.l  #BossSR_SpikeBall_Attack_Start,$34(a0)
  222.         clr.w   y_vel(a0)
  223.         jsr (Swing_Setup1).l
  224. +       rts
  225. ; ---------------------------------------------------------------------------
  226.  
  227. BossSR_SpikeBall_Attack_Start:
  228.         move.w  #$7F,$2E(a0)
  229.         move.l  #BossSR_SetSubroutine,$34(a0)
  230.         sfx sfx_SpikeBall2,0,0,0
  231.         lea ChildObjDat_BossSRSpikeBall(pc),a2
  232.         jmp (CreateChild6_Simple).l
  233. ; ---------------------------------------------------------------------------
  234. ; Босс атакует с помощью шипастого шара 2
  235. ; ---------------------------------------------------------------------------
  236.  
  237. ; =============== S U B R O U T I N E =======================================
  238.  
  239. BossSR_SpikeBall2_Attack:
  240.         move.b  #_Setup2,routine(a0)
  241.         move.w  #$200,y_vel(a0)
  242.         move.l  #BossSR_SpikeBall2_CheckPos,$34(a0)
  243.  
  244. BossSR_SpikeBall2_CheckPos:
  245.         move.w  (Camera_Y_pos).w,d0
  246.         addi.w  #$80,d0
  247.         cmp.w   y_pos(a0),d0
  248.         bhs.s   +
  249.         move.w  d0,y_pos(a0)
  250.         move.b  #_Setup1,routine(a0)
  251.         move.l  #BossSR_SpikeBall2_Attack_Start,$34(a0)
  252.         clr.w   y_vel(a0)
  253.         jsr (Swing_Setup1).l
  254. +       rts
  255. ; ---------------------------------------------------------------------------
  256.  
  257. BossSR_SpikeBall2_Attack_Start:
  258.         move.w  #$7F,$2E(a0)
  259.         move.l  #BossSR_SetSubroutine,$34(a0)
  260.         sfx sfx_SpikeBall2,0,0,0
  261.         lea ChildObjDat_BossSRSpikeBall(pc),a2
  262.         jsr (CreateChild6_Simple).l
  263.         bne.s   +
  264.         move.b  #2,subtype(a1)
  265. +       rts
  266. ; ---------------------------------------------------------------------------
  267. ; Босс атакует с помощью ракеты
  268. ; ---------------------------------------------------------------------------
  269.  
  270. ; =============== S U B R O U T I N E =======================================
  271.  
  272. BossSR_Rocket_Attack:
  273.         move.b  #_Setup1,routine(a0)
  274.         move.w  #$4F,$2E(a0)
  275.         sfx sfx_FireShot,0,0,0
  276.         move.l  #BossSR_SetSubroutine,$34(a0)
  277.         lea ChildObjDat_BossSRRocket(pc),a2
  278.         jmp (CreateChild6_Simple).l
  279. ; ---------------------------------------------------------------------------
  280. ; Босс атакует самостоятельно
  281. ; ---------------------------------------------------------------------------
  282.  
  283. ; =============== S U B R O U T I N E =======================================
  284.  
  285. BossSR_Boss_Attack:
  286.         move.b  #_Setup2,routine(a0)
  287.         move.w  #$200,y_vel(a0)
  288.         move.l  #BossSR_Boss_Attack_CheckPos,$34(a0)
  289.  
  290. BossSR_Boss_Attack_CheckPos:
  291.         move.w  (Camera_Y_pos).w,d0
  292.         addi.w  #$A0,d0
  293.         cmp.w   y_pos(a0),d0
  294.         bhs.s   +
  295.         move.w  d0,y_pos(a0)
  296.         sfx sfx_Squeak,0,0,0
  297.         move.l  #BossSR_Boss_Attack_MoveAttack,$34(a0)
  298.         clr.w   y_vel(a0)
  299. +       rts
  300. ; ---------------------------------------------------------------------------
  301.  
  302. BossSR_Boss_Attack_MoveAttack:
  303.         move.w  #-$400,x_vel(a0)
  304.         move.w  #$37,$2E(a0)
  305.         move.l  #BossSR_Boss_Attack_SetMove,$34(a0)
  306.         rts
  307. ; ---------------------------------------------------------------------------
  308.  
  309. BossSR_Boss_Attack_SetMove:
  310.         move.w  #-$100,y_vel(a0)
  311.         move.w  #7,$2E(a0)
  312.         move.l  #BossSR_Boss_Attack_SetMove2,$34(a0)
  313.         rts
  314. ; ---------------------------------------------------------------------------
  315.  
  316. BossSR_Boss_Attack_SetMove2:
  317.         move.w  #$17,$2E(a0)
  318.         move.l  #BossSR_Boss_Attack_StopYMove,$34(a0)
  319.         move.w  #$400,x_vel(a0)
  320.         move.w  #-$180,y_vel(a0)
  321.         rts
  322. ; ---------------------------------------------------------------------------
  323.  
  324. BossSR_Boss_Attack_StopYMove:
  325.         move.w  #$27,$2E(a0)
  326.         move.l  #BossSR_Boss_Attack_StopXMove,$34(a0)
  327.         clr.w   y_vel(a0)
  328.         rts
  329. ; ---------------------------------------------------------------------------
  330.  
  331. BossSR_Boss_Attack_StopXMove:
  332.         move.b  #_Setup1,routine(a0)
  333.         move.w  #$4F,$2E(a0)
  334.         move.l  #BossSR_SetSubroutine,$34(a0)
  335.         clr.w   x_vel(a0)
  336.         jmp (Swing_Setup1).l
  337. ; ---------------------------------------------------------------------------
  338. ; Босс атакует с помощью шипастого шара 3
  339. ; ---------------------------------------------------------------------------
  340.  
  341. ; =============== S U B R O U T I N E =======================================
  342.  
  343. BossSR_SpikeBall3_Attack:
  344.         move.b  #_Setup2,routine(a0)
  345.         move.w  #-$200,y_vel(a0)
  346.         move.l  #BossSR_SpikeBall3_CheckPos,$34(a0)
  347.  
  348. BossSR_SpikeBall3_CheckPos:
  349.         move.w  (Camera_Y_pos).w,d0
  350.         addi.w  #$60,d0
  351.         cmp.w   y_pos(a0),d0
  352.         blo.s       +
  353.         move.w  d0,y_pos(a0)
  354.         move.b  #_Setup1,routine(a0)
  355.         move.l  #BossSR_SpikeBall3_Attack_Start,$34(a0)
  356.         clr.w   y_vel(a0)
  357.         jsr (Swing_Setup1).l
  358. +       rts
  359. ; ---------------------------------------------------------------------------
  360.  
  361. BossSR_SpikeBall3_Attack_Start:
  362.         move.w  #$7F,$2E(a0)
  363.         move.l  #BossSR_SetSubroutine,$34(a0)
  364.         sfx sfx_SpikeBall2,0,0,0
  365.         lea ChildObjDat_BossSRSpikeBall(pc),a2
  366.         jsr (CreateChild6_Simple).l
  367.         bne.s   +
  368.         move.b  #4,subtype(a1)
  369. +       rts
  370. ; ---------------------------------------------------------------------------
  371. ; Босс смеётся
  372. ; ---------------------------------------------------------------------------
  373.  
  374. BossSR_Boss_Laugh:
  375.         bset    #5,status(a0)
  376.         move.w  #$4F,$2E(a0)
  377.         move.l  #BossSR_Boss_Laugh_Stop,$34(a0)
  378.         rts
  379. ; ---------------------------------------------------------------------------
  380.  
  381. BossSR_Boss_Laugh_Stop:
  382.         bclr    #5,status(a0)
  383.         move.w  #$4F,$2E(a0)
  384.         move.l  #BossSR_SetSubroutine,$34(a0)
  385.         rts
  386. ; ---------------------------------------------------------------------------
  387. ; Босс атакует с помощью лазера (Сверху)
  388. ; ---------------------------------------------------------------------------
  389.  
  390. BossSR_Laser_Attack_Up:
  391.         move.b  #_Setup2,routine(a0)
  392.         move.w  #-$200,y_vel(a0)
  393.         move.l  #BossSR_Laser_Up_CheckPos,$34(a0)
  394.  
  395. BossSR_Laser_Up_CheckPos:
  396.         move.w  (Camera_Y_pos).w,d0
  397.         addi.w  #$80,d0
  398.         cmp.w   y_pos(a0),d0
  399.         blo.s       +
  400.         move.w  d0,y_pos(a0)
  401.         sfx sfx_Laser6,0,0,0
  402.         move.l  #BossSR_Laser_Up_Attack_Start,$34(a0)
  403.         clr.w   y_vel(a0)
  404. +       rts
  405. ; ---------------------------------------------------------------------------
  406.  
  407. BossSR_Laser_Up_Attack_Start:
  408.         move.w  #$F,$2E(a0)
  409.         move.l  #BossSR_Laser_Up_Stop,$34(a0)
  410.         lea ChildObjDat_BossSRLaser(pc),a2
  411.         jmp (CreateChild1_Normal).l
  412. ; ---------------------------------------------------------------------------
  413.  
  414. BossSR_Laser_Up_Stop:
  415.         move.b  #_Setup1,routine(a0)
  416.         move.w  #$F,$2E(a0)
  417.         move.l  #BossSR_SetSubroutine,$34(a0)
  418.         jmp (Swing_Setup1).l
  419. ; ---------------------------------------------------------------------------
  420. ; Босс атакует с помощью лазера (Снизу)
  421. ; ---------------------------------------------------------------------------
  422.  
  423. BossSR_Laser_Attack_Down:
  424.         move.b  #_Setup2,routine(a0)
  425.         move.w  #$200,y_vel(a0)
  426.         move.l  #BossSR_Laser_Down_CheckPos,$34(a0)
  427.  
  428. BossSR_Laser_Down_CheckPos:
  429.         move.w  (Camera_Y_pos).w,d0
  430.         addi.w  #$B0,d0
  431.         cmp.w   y_pos(a0),d0
  432.         bhs.s   +
  433.         move.w  d0,y_pos(a0)
  434.         sfx sfx_Laser6,0,0,0
  435.         move.l  #BossSR_Laser_Down_Attack_Start,$34(a0)
  436.         clr.w   y_vel(a0)
  437. +       rts
  438. ; ---------------------------------------------------------------------------
  439.  
  440. BossSR_Laser_Down_Attack_Start:
  441.         move.w  #$F,$2E(a0)
  442.         move.l  #BossSR_Laser_Down_Stop,$34(a0)
  443.         lea ChildObjDat_BossSRLaser(pc),a2
  444.         jmp (CreateChild1_Normal).l
  445. ; ---------------------------------------------------------------------------
  446.  
  447. BossSR_Laser_Down_Stop:
  448.         move.b  #_Setup1,routine(a0)
  449.         move.w  #$F,$2E(a0)
  450.         move.l  #BossSR_SetSubroutine,$34(a0)
  451.         jmp (Swing_Setup1).l
  452. ; ---------------------------------------------------------------------------
  453. ; Проверка урона
  454. ; ---------------------------------------------------------------------------
  455.  
  456. ; =============== S U B R O U T I N E =======================================
  457.  
  458. BossSR_CheckTouch:
  459.         tst.b   collision_flags(a0)
  460.         bne.s   BossSR_CheckTouch_Return
  461.         tst.b   collision_property(a0)
  462.         beq.s   BossSR_CheckTouch_WaitExplosive
  463.         tst.b   $1C(a0)
  464.         bne.s   +
  465.         move.b  #$30,$1C(a0)
  466.         sfx sfx_HitBoss,0,0,0
  467.         bset    #6,status(a0)
  468.         cmpi.b  #BossSR_Hits/4,$29(a0)
  469.         bne.s   +
  470.         st  obBSR_Pinch(a0)
  471. +       moveq   #0,d0
  472.         btst    #0,$1C(a0)
  473.         bne.s   +
  474.         addq.w  #3*2,d0
  475. +       jsr (BossFlash).l
  476.         subq.b  #1,$1C(a0)
  477.         bne.s   BossSR_CheckTouch_Return
  478.         bclr    #6,status(a0)
  479.         move.b  collision_restore_flags(a0),collision_flags(a0)
  480.  
  481. BossSR_CheckTouch_Return:
  482.         rts
  483. ; ---------------------------------------------------------------------------
  484.  
  485. BossSR_CheckTouch_WaitExplosive:
  486.         move.l  #Wait_FadeToLevelMusic,address(a0)
  487.         move.l  #BossSR_CheckTouch_WaitExplosive_Restore,$34(a0)
  488.         addq.b  #2,(BackgroundEvent_routine).w
  489.         bset    #7,status(a0)
  490.         lea (Child6_CreateBossExplosion).l,a2
  491.         jsr (CreateChild1_Normal).l
  492.         bne.s   +
  493.         move.b  #4,subtype(a1)
  494. +       move.w  #$7F,$2E(a0)
  495.         jmp (BossDefeated_NoTime).l
  496. ; ---------------------------------------------------------------------------
  497.  
  498. BossSR_CheckTouch_WaitExplosive_Restore:
  499.         move.l  #loc_7A3E6,(a0)
  500.         bset    #0,render_flags(a0)
  501.         move.w  #$400,x_vel(a0)
  502.         clr.w   y_vel(a0)
  503.         rts
  504. ; ---------------------------------------------------------------------------
  505.  
  506. loc_7A3E6:
  507.         subq.w  #1,$2E(a0)
  508.         bmi.s   loc_7A3F8
  509.         jsr (MoveSprite2).l
  510.         jmp (Draw_Sprite).l
  511. ; ---------------------------------------------------------------------------
  512.  
  513. loc_7A3F8:
  514.         addq.b  #2,(Dynamic_resize_routine).w
  515.         move.l  #Go_Delete_Sprite,address(a0)
  516.         rts
  517. ; ---------------------------------------------------------------------------
  518. ; Огонь из трубы босса
  519. ; ---------------------------------------------------------------------------
  520.  
  521. ; =============== S U B R O U T I N E =======================================
  522.  
  523. Obj_BossSRTube_Fire:
  524.         btst    #1,(Level_frame_counter+1).w
  525.         beq.s   BossSRTube_Fire_Draw
  526.         move.l  a0,-(sp)
  527.         movea.w parent3(a0),a0
  528.         lea ChildObjDat_BossGreyBall_Fire(pc),a2
  529.         jsr (CreateChild1_Normal).l
  530.         bne.s   +
  531.         move.b  #24/2,$3A(a1)
  532.         move.b  #24/2,$3B(a1)
  533.         move.w  #$100,$3C(a1)
  534. +       movea.l (sp)+,a0
  535.  
  536. BossSRTube_Fire_Draw:
  537.         jsr (Refresh_ChildPositionAdjusted).l
  538.         jmp (Child_CheckParent).l
  539. ; ---------------------------------------------------------------------------
  540. ; Труба босса
  541. ; ---------------------------------------------------------------------------
  542.  
  543. ; =============== S U B R O U T I N E =======================================
  544.  
  545. Obj_BossSRTube:
  546.         lea ObjDat_BossSRTube(pc),a1
  547.         jsr (SetUp_ObjAttributes).l
  548.         move.l  #+,address(a0)
  549. +       jsr (Refresh_ChildPositionAdjusted).l
  550.         moveq   #0,d0
  551.         jmp (Child_Draw_Sprite_FlickerMove).l
  552. ; ---------------------------------------------------------------------------
  553. ; Шипастый шар босса
  554. ; ---------------------------------------------------------------------------
  555.  
  556. ; =============== S U B R O U T I N E =======================================
  557.  
  558. Obj_BossSRSpikeBall:
  559.         moveq   #0,d0
  560.         move.b  routine(a0),d0
  561.         move.w  BossSRSpikeBall_Index(pc,d0.w),d1
  562.         jsr BossSRSpikeBall_Index(pc,d1.w)
  563.         movea.w parent3(a0),a1
  564.         btst    #7,status(a1)
  565.         bne.w   BossSRSpikeBall_Remove
  566.         jmp (Sprite_CheckDeleteTouchXY).l
  567. ; ---------------------------------------------------------------------------
  568.  
  569. BossSRSpikeBall_Index: offsetTable
  570.         offsetTableEntry.w BossSRSpikeBall_Init
  571.         offsetTableEntry.w BossSRSpikeBall_Setup
  572.         offsetTableEntry.w BossSRSpikeBall_Setup2
  573.         offsetTableEntry.w BossSRSpikeBall_Setup3
  574.         offsetTableEntry.w BossSRSpikeBall_Setup4
  575. ; ---------------------------------------------------------------------------
  576.  
  577. BossSRSpikeBall_Init:
  578.         lea ObjDat_BossSRSpikeBall(pc),a1
  579.         jsr (SetUp_ObjAttributes).l
  580.         move.b  #48/2,y_radius(a0)
  581.         move.l  #BossSRSpikeBall_Fall,$34(a0)
  582.         tst.b   subtype(a0)
  583.         beq.s   +
  584.         move.l  #BossSRSpikeBall_Fall2,$34(a0)
  585. +       cmpi.b  #4,subtype(a0)
  586.         bne.s   +
  587.         move.b  #_Setup3,routine(a0)
  588.         move.l  #BossSRSpikeBall_Fall,$34(a0)
  589.         clr.b   collision_flags(a0)
  590. +       rts
  591. ; ---------------------------------------------------------------------------
  592.  
  593. BossSRSpikeBall_Setup3:
  594.         bsr.w   BossSRSpikeBall_CheckPlayer
  595.         btst    #0,(V_int_run_count+3).w
  596.         beq.s   BossSRSpikeBall_Setup
  597.         eori.w  #$6000,art_tile(a0)
  598.  
  599. BossSRSpikeBall_Setup:
  600.         jsr (MoveSprite).l
  601.         jmp (ObjHitFloor_DoRoutine).l
  602. ; ---------------------------------------------------------------------------
  603.  
  604. BossSRSpikeBall_Setup4:
  605.         btst    #0,(V_int_run_count+3).w
  606.         beq.s   BossSRSpikeBall_Setup2
  607.         eori.w  #$6000,art_tile(a0)
  608.  
  609. BossSRSpikeBall_Setup2:
  610.         jsr (MoveSprite2).l
  611.         jmp (Obj_Wait).l
  612. ; ---------------------------------------------------------------------------
  613.  
  614. BossSRSpikeBall_Fall:
  615.         sfx sfx_SpikeBall,0,0,0
  616.         move.w  #-$300,x_vel(a0)
  617.         move.w  #-$500,y_vel(a0)
  618.         lea ChildObjDat_BossGreyBall_Spark(pc),a2
  619.         jmp (CreateChild6_Simple).l
  620. ; ---------------------------------------------------------------------------
  621.  
  622. BossSRSpikeBall_Fall2:
  623.         sfx sfx_SpikeBall,0,0,0
  624.         move.b  #_Setup2,routine(a0)
  625.         move.w  #-$400,x_vel(a0)
  626.         clr.w   y_vel(a0)
  627.         move.l  #BossSRSpikeBall_Return,$34(a0)
  628.  
  629. BossSRSpikeBall_Return:
  630.         rts
  631. ; ---------------------------------------------------------------------------
  632.  
  633. obSpikeBall_CheckXY:
  634.         dc.w -32
  635.         dc.w 64
  636.         dc.w -32
  637.         dc.w 64
  638. ; ---------------------------------------------------------------------------
  639.  
  640. BossSRSpikeBall_CheckPlayer:
  641.         lea (Player_1).w,a1
  642.         lea obSpikeBall_CheckXY(pc),a2
  643.         jsr (Check_InMyRange).l
  644.         beq.s   BossSRSpikeBall_CheckPlayer_Return
  645.         move.b  #_Setup4,routine(a0)
  646.         move.w  #$800,x_vel(a0)
  647.         move.w  #-$200,y_vel(a0)
  648.         sfx sfx_SpikeAttack,0,0,0
  649.         move.l  #BossSRSpikeBall_Fall3,$34(a0)
  650.  
  651. BossSRSpikeBall_CheckPlayer_Return:
  652.         rts
  653. ; ---------------------------------------------------------------------------
  654.  
  655. BossSRSpikeBall_Fall3:
  656.         move.w  (Camera_X_pos).w,d0
  657.         addi.w  #$110,d0
  658.         cmp.w   x_pos(a0),d0
  659.         bge.s   BossSRSpikeBall_Fall3_Return
  660.         movea.w parent3(a0),a1
  661.         move.b  collision_flags(a1),collision_restore_flags(a1)
  662.         move.b  #0,collision_flags(a1)
  663.         subq.b  #1,boss_hitcount2(a1)
  664.         clr.l   x_vel(a0)
  665.         lea ChildObjDat_BossGreyBall_Splinter(pc),a2
  666.         jsr (CreateChild6_Simple).l
  667.  
  668. BossSRSpikeBall_Remove:
  669.         move.l  #Go_Delete_Sprite,address(a0)
  670.  
  671. BossSRSpikeBall_Fall3_Return:
  672.         rts
  673. ; ---------------------------------------------------------------------------
  674. ; Ракета босса
  675. ; ---------------------------------------------------------------------------
  676.  
  677. ; =============== S U B R O U T I N E =======================================
  678.  
  679. Obj_BossSRRocket:
  680.         move.w  (Camera_X_pos).w,d0
  681.         addi.w  #$140,d0
  682.         move.w  d0,x_pos(a0)
  683.         move.w  (Camera_Y_pos).w,d0
  684.         addi.w  #$C0,d0
  685.         move.w  d0,y_pos(a0)
  686.         lea ObjDat_BossSRRocket(pc),a1
  687.         jsr (SetUp_ObjAttributes).l
  688.         move.w  #-$500,x_vel(a0)
  689.         lea ChildObjDat_BossSRRocket_Fire(pc),a2
  690.         jsr (CreateChild1_Normal).l
  691.         move.l  #+,address(a0)
  692. +       jsr (MoveSprite2).l
  693.         movea.w parent3(a0),a1
  694.         btst    #7,status(a1)
  695.         bne.w   BossSRSpikeBall_Remove
  696.         jmp (Sprite_CheckDeleteTouchXY).l
  697. ; ---------------------------------------------------------------------------
  698. ; Ракета босса (Огонь)
  699. ; ---------------------------------------------------------------------------
  700.  
  701. ; =============== S U B R O U T I N E =======================================
  702.  
  703. Obj_BossSRRocket_Fire:
  704.         lea ObjDat_BossSRRocket_Fire(pc),a1
  705.         jsr (SetUp_ObjAttributes).l
  706.         move.l  #+,address(a0)
  707. +       moveq   #1,d0
  708.         btst    #0,(V_int_run_count+3).w
  709.         beq.s   +
  710.         addq.b  #1,d0
  711. +       move.b  d0,mapping_frame(a0)
  712.         jsr (Refresh_ChildPositionAdjusted).l
  713.         jmp (Child_Draw_Sprite).l
  714. ; ---------------------------------------------------------------------------
  715. ; Лазер босса
  716. ; ---------------------------------------------------------------------------
  717.  
  718. ; =============== S U B R O U T I N E =======================================
  719.  
  720. Obj_BossSRLaser:
  721.         lea ObjDat3_BossSRLaser(pc),a1
  722.         jsr (SetUp_ObjAttributes).l
  723.         movea.w parent3(a0),a1
  724.         jsr (Refresh_ChildPositionAdjusted).l
  725.         moveq   #0,d0
  726.         tst.b   subtype(a0)
  727.         beq.s   loc_7ABB8
  728.         moveq   #7,d0
  729.         move.b  #0,mapping_frame(a0)
  730.         move.w  #$100,priority(a0)
  731.  
  732. loc_7ABB8:
  733.         move.w  d0,$2E(a0)
  734.         move.l  #loc_7ABC2,(a0)
  735.  
  736. loc_7ABC2:
  737.         subq.w  #1,$2E(a0)
  738.         bmi.s   loc_7ABCE
  739.         jmp (Child_Draw_Sprite).l
  740. ; ---------------------------------------------------------------------------
  741.  
  742. loc_7ABCE:
  743.         move.l  #loc_7ABEE,(a0)
  744.         move.w  #-$600,d0
  745.         btst    #0,render_flags(a0)
  746.         beq.s   loc_7ABE2
  747.         neg.w   d0
  748.  
  749. loc_7ABE2:
  750.         move.w  d0,x_vel(a0)
  751.  
  752. loc_7ABEE:
  753.         jsr (MoveSprite2).l
  754.         jmp (Sprite_CheckDeleteTouch).l
  755. ; ---------------------------------------------------------------------------
  756. ; Голова роботника
  757. ; ---------------------------------------------------------------------------
  758.  
  759. ; =============== S U B R O U T I N E =======================================
  760.  
  761. Obj_RobotnikHead3:
  762.         jsr (Refresh_ChildPositionAdjusted).l
  763.         moveq   #0,d0
  764.         move.b  routine(a0),d0
  765.         move.w  RobotnikHead3_Index(pc,d0.w),d1
  766.         jsr RobotnikHead3_Index(pc,d1.w)
  767.         jmp (Child_Draw_Sprite2).l
  768. ; ---------------------------------------------------------------------------
  769.  
  770. RobotnikHead3_Index: offsetTable
  771.         offsetTableEntry.w Obj_RobotnikHead3Init
  772.         offsetTableEntry.w Obj_RobotnikHead3Main
  773.         offsetTableEntry.w Obj_RobotnikHead3End
  774. ; ---------------------------------------------------------------------------
  775.  
  776. Obj_RobotnikHead3Init:
  777.         lea ObjDat_RobotnikHead(pc),a1
  778.         jsr (SetUp_ObjAttributes).l
  779.         move.l  #AniRaw_RobotnikHead,$30(a0)
  780.         movea.w parent3(a0),a1
  781.         btst    #7,art_tile(a1)
  782.         beq.s   +
  783.         bset    #7,art_tile(a0)
  784. +       rts
  785. ; ---------------------------------------------------------------------------
  786.  
  787. Obj_RobotnikHead3Main:
  788.         movea.w parent3(a0),a1
  789.         btst    #5,status(a1)
  790.         bne.s   Obj_RobotnikHead3_Laugh
  791.         cmpi.b  #id_SonicHurt,(Player_1+routine).w
  792.         bhs.s   Obj_RobotnikHead3_Laugh
  793.         jsr (Animate_Raw).l
  794.         movea.w parent3(a0),a1
  795.         btst    #7,status(a1)
  796.         bne.s   ++
  797.         btst    #6,status(a1)
  798.         beq.s   +
  799.         move.b  #2,mapping_frame(a0)
  800. +       rts
  801. ; ---------------------------------------------------------------------------
  802. +       move.b  #4,routine(a0)
  803.         move.b  #5,mapping_frame(a0)
  804.  
  805. Obj_RobotnikHeadEnd:
  806.         rts
  807. ; ---------------------------------------------------------------------------
  808.  
  809. Obj_RobotnikHead3End:
  810.         movea.w parent3(a0),a1
  811.         btst    #7,status(a1)
  812.         bne.s   Obj_RobotnikHeadEnd
  813.         lea AniRaw_RobotnikHead(pc),a1
  814.         jmp (Animate_RawNoSST).l
  815. ; ---------------------------------------------------------------------------
  816.  
  817. Obj_RobotnikHead3_Laugh:
  818.         lea AniRaw_RobotnikHead_Laugh(pc),a1
  819.         jmp (Animate_RawNoSST).l
  820. ; ---------------------------------------------------------------------------
  821. ; Огонь из корабля
  822. ; ---------------------------------------------------------------------------
  823.  
  824. ; =============== S U B R O U T I N E =======================================
  825.  
  826. Obj_RobotnikFire:
  827.         lea ObjDat3_RobotnikFire(pc),a1
  828.         jsr (SetUp_ObjAttributes3).l
  829.         move.l  #+,(a0)
  830. +       movea.w parent3(a0),a1
  831.         btst    #7,status(a1)
  832.         bne.s   RobotnikFire_Remove
  833.         btst    #6,$38(a1)
  834.         bne.s   Obj_RobotnikHeadEnd
  835.         btst    #0,(V_int_run_count+3).w
  836.         bne.s   Obj_RobotnikHeadEnd
  837.         jsr (Refresh_ChildPositionAdjusted).l
  838.         jsr (Add_SpriteToCollisionResponseList).l
  839.         jmp (Draw_Sprite).l
  840. ; ---------------------------------------------------------------------------
  841.  
  842. RobotnikFire_Remove:
  843.         jmp (Delete_Current_Sprite).l
  844.  
  845. ; =============== S U B R O U T I N E =======================================
  846.  
  847. ObjDat_BossSR:
  848.         dc.l Map_RobotnikShip
  849.         dc.w $E0
  850.         dc.w $200
  851.         dc.b 80/2
  852.         dc.b 80/2
  853.         dc.b 7
  854.         dc.b $F
  855. ObjDat_RobotnikHead:
  856.         dc.l Map_RobotnikShip
  857.         dc.w $E0
  858.         dc.w $280
  859.         dc.b $10
  860.         dc.b 8
  861.         dc.b 0
  862.         dc.b 0
  863. ObjDat3_RobotnikFire:
  864.         dc.w $200
  865.         dc.b 8
  866.         dc.b 4
  867.         dc.b 8
  868.         dc.b 0
  869. ObjDat_BossSRTube:
  870.         dc.l Map_RobotnikTube
  871.         dc.w $6152
  872.         dc.w $180
  873.         dc.b 48/2
  874.         dc.b 16/2
  875.         dc.b 0
  876.         dc.b 0
  877. ObjDat_BossSRSpikeBall:
  878.         dc.l Map_RobotnikSpikeBall
  879.         dc.w $6168
  880.         dc.w $280
  881.         dc.b 48/2
  882.         dc.b 48/2
  883.         dc.b 0
  884.         dc.b $F|$80
  885. ObjDat_BossSRRocket:
  886.         dc.l Map_RobotnikRocket
  887.         dc.w $6158
  888.         dc.w $280
  889.         dc.b 64/2
  890.         dc.b 16/2
  891.         dc.b 0
  892.         dc.b $B|$80
  893. ObjDat_BossSRRocket_Fire:
  894.         dc.l Map_RobotnikRocket
  895.         dc.w $6158
  896.         dc.w $280
  897.         dc.b 16/2
  898.         dc.b 16/2
  899.         dc.b 1
  900.         dc.b 0
  901. ObjDat3_BossSRLaser:
  902.         dc.l Map_RobotnikLaser
  903.         dc.w $617E
  904.         dc.w $280
  905.         dc.b 48/2
  906.         dc.b 16/2
  907.         dc.b 1
  908.         dc.b $9C
  909. AniRaw_RobotnikHead:
  910.         dc.b 5
  911.         dc.b 0
  912.         dc.b 1
  913.         dc.b $FC
  914. AniRaw_RobotnikHead_Laugh:
  915.         dc.b 5
  916.         dc.b 3
  917.         dc.b 4
  918.         dc.b $FC
  919. Child1_MakeRoboHead3:
  920.         dc.w 1-1
  921.         dc.l Obj_RobotnikHead3
  922.         dc.w $E4
  923. ChildObjDat_RobotnikFire:
  924.         dc.w 1-1
  925.         dc.l Obj_RobotnikFire
  926.         dc.w $1E00
  927. ChildObjDat_BossSRTube:
  928.         dc.w 1-1
  929.         dc.l Obj_BossSRTube
  930.         dc.b -16, 24
  931. ChildObjDat_BossSRTube_Fire:
  932.         dc.w 1-1
  933.         dc.l Obj_BossSRTube_Fire
  934.         dc.b 0, 0
  935. ChildObjDat_BossSRSpikeBall:
  936.         dc.w 1-1
  937.         dc.l Obj_BossSRSpikeBall
  938. ChildObjDat_BossSRRocket:
  939.         dc.w 1-1
  940.         dc.l Obj_BossSRRocket
  941. ChildObjDat_BossSRRocket_Fire:
  942.         dc.w 1-1
  943.         dc.l Obj_BossSRRocket_Fire
  944.         dc.b 48, 0
  945. ChildObjDat_BossSRLaser:
  946.         dc.w 2-1
  947.         dc.l Obj_BossSRLaser
  948.         dc.b $F4, $FC
  949.         dc.l Obj_BossSRLaser
  950.         dc.b $E8, $FC
  951. ; ---------------------------------------------------------------------------
  952.  
  953.         include "Objects/Boss Robotnik/Object Data/Map - Robotnik Laser.asm"
  954.         include "Objects/Boss Robotnik/Object Data/Map - Robotnik Rocket.asm"
  955.         include "Objects/Boss Robotnik/Object Data/Map - Robotnik Ship.asm"
  956.         include "Objects/Boss Robotnik/Object Data/Map - Robotnik Spike Ball.asm"
  957.         include "Objects/Boss Robotnik/Object Data/Map - Robotnik Tube.asm"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement