Advertisement
TheBlad768

Boss(LBZ2)

Mar 9th, 2021
2,710
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; ---------------------------------------------------------------------------
  2. ; Босс-LBZ2
  3. ; ---------------------------------------------------------------------------
  4.  
  5. ; Hits
  6. BossLBZ2_Hits       = 16
  7.  
  8. ; Attributes
  9. _Setup1             = 2
  10. _Setup2             = 4
  11. _Setup3             = 6
  12. _Setup4             = 8
  13. _Setup5             = $A
  14.  
  15. ; Functions
  16. BlockMoveArms       = 1
  17. BlockArms           = 2
  18. BlockArmsFingers        = 3
  19.  
  20.  
  21. ; Dynamic object variables
  22. obBLBZ2_Grab        = $30   ; .b
  23. obBLBZ2_Routine     = $31   ; .b
  24. obBLBZ2_Timer       = $32   ; .w
  25. obBLBZ2_Count       = $39   ; .b
  26.  
  27. ; =============== S U B R O U T I N E =======================================
  28.  
  29. Obj_BossLBZ2:
  30.         move.l  #Obj_Wait,address(a0)
  31.         move.w  #$1F,$2E(a0)
  32.         move.l  #Obj_BossLBZ2_Start,$34(a0)
  33.         rts
  34. ; ---------------------------------------------------------------------------
  35.  
  36. Obj_BossLBZ2_Start:
  37.         move.l  #Obj_BossLBZ2_Main,address(a0)
  38.  
  39. Obj_BossLBZ2_Main:
  40.         moveq   #0,d0
  41.         move.b  routine(a0),d0
  42.         move.w  BossLBZ2_Index(pc,d0.w),d0
  43.         jsr BossLBZ2_Index(pc,d0.w)
  44.         bsr.w   BossLBZ2_CheckTouch
  45.         jmp (Draw_And_Touch_Sprite).l
  46. ; ---------------------------------------------------------------------------
  47.  
  48. BossLBZ2_Index: offsetTable
  49.         offsetTableEntry.w BossLBZ2_Init        ; 0
  50.         offsetTableEntry.w BossLBZ2_Setup       ; 2
  51.         offsetTableEntry.w BossLBZ2_Setup2      ; 4
  52.         offsetTableEntry.w BossLBZ2_Setup3      ; 6
  53.         offsetTableEntry.w BossLBZ2_Setup4      ; 8
  54.         offsetTableEntry.w BossLBZ2_Setup5      ; A
  55. ; ---------------------------------------------------------------------------
  56.  
  57. BossLBZ2_Init:
  58.         lea ObjDat3_BossLBZ2(pc),a1
  59.         jsr (SetUp_ObjAttributes).l
  60.         move.b  #BossLBZ2_Hits,collision_property(a0)
  61.         st  (Boss_flag).w
  62.         bset    #0,render_flags(a0)
  63.         bset    #BlockArms,$38(a0)
  64.         bset    #BlockArmsFingers,$38(a0)
  65.         move.b  #96/2,y_radius(a0)
  66.         move.l  #BossLBZ2_Intro_MoveLeft,$34(a0)
  67.         lea ChildObjDat_BossLBZ2(pc),a2
  68.         jsr (CreateChild1_Normal).l
  69.         lea Child1_MakeRoboHead4(pc),a2
  70.         jsr (CreateChild1_Normal).l
  71.         jmp (Swing_Setup1).l
  72. ; ---------------------------------------------------------------------------
  73.  
  74. BossLBZ2_Setup5:
  75.         subq.w  #4,y_pos(a0)
  76.         bra.s   BossLBZ2_Setup2_2
  77. ; ---------------------------------------------------------------------------
  78.  
  79. BossLBZ2_Setup4:
  80.         addq.w  #4,y_pos(a0)
  81.         bra.s   BossLBZ2_Setup2_2
  82. ; ---------------------------------------------------------------------------
  83.  
  84. BossLBZ2_Setup3:
  85.         jsr (MoveSprite).l
  86.         jmp (ObjHitFloor_DoRoutine).l
  87. ; ---------------------------------------------------------------------------
  88.  
  89. BossLBZ2_Setup:
  90.         jsr (Swing_UpAndDown).l
  91.  
  92. BossLBZ2_Setup2:
  93.         jsr (MoveSprite2).l
  94.  
  95. BossLBZ2_Setup2_2:
  96.         jmp (Obj_Wait).l
  97.  
  98. ; =============== S U B R O U T I N E =======================================
  99.  
  100. BossLBZ2_Intro_MoveLeft:
  101.         move.w  #-$100,x_vel(a0)
  102.         move.l  #BossLBZ2_Intro_CheckPos,$34(a0)
  103.  
  104. BossLBZ2_Intro_CheckPos:
  105.         move.w  (Camera_X_pos).w,d0
  106.         addi.w  #$A0,d0
  107.         cmp.w   x_pos(a0),d0
  108.         bne.s   BossLBZ2_Intro_Return
  109.         move.w  #$3F,$2E(a0)
  110.         move.l  #BossLBZ2_Intro_MoveRight,$34(a0)
  111.         clr.w   x_vel(a0)
  112.  
  113. BossLBZ2_Intro_Return:
  114.         rts
  115. ; ---------------------------------------------------------------------------
  116.  
  117. BossLBZ2_Intro_MoveRight:
  118.         move.w  #$200,x_vel(a0)
  119.         move.l  #BossLBZ2_Intro_CheckPos2,$34(a0)
  120.         lea ChildObjDat_RobotnikHud(pc),a2
  121.         jsr (CreateChild6_Simple).l
  122.         bne.s   BossLBZ2_Intro_CheckPos2
  123.         move.w  a0,parent3(a1)
  124.  
  125. BossLBZ2_Intro_CheckPos2:
  126.         move.w  (Camera_X_pos).w,d0
  127.         addi.w  #$1A0,d0
  128.         cmp.w   x_pos(a0),d0
  129.         bne.s   BossLBZ2_Intro_Return2
  130.         move.w  #$1F,$2E(a0)
  131.         move.l  #BossLBZ2_SetSubroutine,$34(a0)
  132.         bclr    #0,render_flags(a0)
  133.         bclr    #BlockArms,$38(a0)
  134.         bclr    #BlockArmsFingers,$38(a0)
  135.         clr.w   x_vel(a0)
  136.         eori.b  #$80,collision_flags(a0)
  137.  
  138. BossLBZ2_Intro_Return2:
  139.         rts
  140.  
  141. ; =============== S U B R O U T I N E =======================================
  142.  
  143. BossLBZ2_SetSubroutine:
  144.         moveq   #0,d0
  145.         move.b  obBLBZ2_Routine(a0),d0
  146.         addq.b  #1,obBLBZ2_Routine(a0)
  147.         lea BossLBZ2_SetMovement(pc),a1
  148.  
  149.         move.b  (a1,d0.w),d0
  150.         bmi.s   +
  151.         move.l  BossLBZ2_Movement(pc,d0.w),$34(a0)
  152.         rts
  153. +       clr.b   obBLBZ2_Routine(a0)
  154.         rts
  155. ; ---------------------------------------------------------------------------
  156.  
  157. _BossMovingStraight     = 0
  158. _BossMovingDown     = 1<<2
  159. _BossMovingLeftRight        = 2<<2
  160. _BossMovingJump     = 3<<2
  161. _BossMovingFall         = 4<<2
  162. ; ---------------------------------------------------------------------------
  163.  
  164. BossLBZ2_Movement:
  165.         dc.l BossLBZ2_MovingStraight_Attack     ; 0
  166.         dc.l BossLBZ2_MovingDown_Attack         ; 1
  167.         dc.l BossLBZ2_MovingLeftRight_Attack        ; 2
  168.         dc.l BossLBZ2_MovingJump_Attack         ; 3
  169.         dc.l BossLBZ2_MovingFall_Attack         ; 4
  170. ; ---------------------------------------------------------------------------
  171.  
  172. BossLBZ2_SetMovement:
  173.         dc.b _BossMovingStraight
  174.         dc.b _BossMovingDown
  175.         dc.b _BossMovingLeftRight
  176.         dc.b _BossMovingDown
  177.         dc.b _BossMovingStraight
  178.         dc.b _BossMovingLeftRight
  179.         dc.b _BossMovingJump
  180.         dc.b _BossMovingLeftRight
  181.         dc.b _BossMovingStraight
  182.         dc.b _BossMovingDown
  183.         dc.b _BossMovingFall
  184.         dc.b _BossMovingFall
  185.         dc.b _BossMovingFall
  186.         dc.b _BossMovingLeftRight
  187.         dc.b _BossMovingDown
  188.         dc.b _BossMovingStraight
  189.         dc.b -1 ; Конец
  190.     even
  191. ; ---------------------------------------------------------------------------
  192. ; Босс атакует полетом прямо из за угла
  193. ; ---------------------------------------------------------------------------
  194.  
  195. ; =============== S U B R O U T I N E =======================================
  196.  
  197. BossLBZ2_MovingStraight_Attack:
  198.         move.b  #_Setup2,routine(a0)
  199.         move.w  (Camera_X_pos).w,d0
  200.         move.w  #$1A0,d1
  201.         btst    #0,render_flags(a0)
  202.         beq.s   +
  203.         move.w  #-$80,d1
  204. +       add.w   d1,d0
  205.         move.w  d0,x_pos(a0)
  206.         move.w  (Camera_Y_pos).w,d0
  207.         addi.w  #$80,d0
  208.         move.w  d0,y_pos(a0)
  209.         move.w  #$300,d0
  210.         btst    #0,render_flags(a0)
  211.         bne.s   +
  212.         move.w  #-$400,d0
  213. +       move.w  d0,x_vel(a0)
  214.         bclr    #BlockMoveArms,$38(a0)
  215.         bclr    #BlockArmsFingers,$38(a0)
  216. ;       sfx sfx_Flight,0,0,0
  217.         move.l  #BossLBZ2_MovingStraight_Attack_CheckPos,$34(a0)
  218.         clr.w   y_vel(a0)
  219.  
  220. BossLBZ2_MovingStraight_Attack_CheckPos:
  221.         tst.b   $1C(a0)
  222.         bne.s   BossLBZ2_MovingStraight_Attack_Hit
  223.         move.w  (Camera_X_pos).w,d0
  224.         btst    #0,render_flags(a0)
  225.         bne.s   +
  226.         subi.w  #$60,d0
  227.         cmp.w   x_pos(a0),d0
  228.         ble.s       BossLBZ2_MovingStraight_Attack_Return
  229.         bra.s   ++
  230. +       addi.w  #$1A0,d0
  231.         cmp.w   x_pos(a0),d0
  232.         bge.s   BossLBZ2_MovingStraight_Attack_Return
  233. +       move.w  #$4F,$2E(a0)
  234.         move.l  #BossLBZ2_SetSubroutine,$34(a0)
  235.         bchg    #0,render_flags(a0)
  236.  
  237. BossLBZ2_MovingStraight_Attack_Return:
  238.         rts
  239. ; ---------------------------------------------------------------------------
  240.  
  241. BossLBZ2_MovingStraight_Attack_Hit:
  242.         move.w  #-$400,y_vel(a0)
  243.         move.w  #$600,d0
  244.         btst    #0,render_flags(a0)
  245.         bne.s   +
  246.         neg.w   d0
  247. +       move.w  d0,x_vel(a0)
  248.         move.l  #BossLBZ2_MovingStraight_Attack_Hit_CheckPos,$34(a0)
  249.  
  250. BossLBZ2_MovingStraight_Attack_Hit_CheckPos:
  251.         move.w  (Camera_X_pos).w,d0
  252.         btst    #0,render_flags(a0)
  253.         bne.s   +
  254.         subi.w  #$60,d0
  255.         cmp.w   x_pos(a0),d0
  256.         ble.s       BossLBZ2_MovingStraight_Attack_Hit_Return
  257.         bra.s   ++
  258. +       addi.w  #$1A0,d0
  259.         cmp.w   x_pos(a0),d0
  260.         bge.s   BossLBZ2_MovingStraight_Attack_Hit_Return
  261. +       move.w  #$4F,$2E(a0)
  262.         move.l  #BossLBZ2_SetSubroutine,$34(a0)
  263.         bchg    #0,render_flags(a0)
  264.  
  265. BossLBZ2_MovingStraight_Attack_Hit_Return:
  266.         rts
  267. ; ---------------------------------------------------------------------------
  268. ; Босс атакует полетом под углом из за угла
  269. ; ---------------------------------------------------------------------------
  270.  
  271. ; =============== S U B R O U T I N E =======================================
  272.  
  273. BossLBZ2_MovingDown_Attack:
  274.         move.b  #_Setup2,routine(a0)
  275.         move.w  (Camera_X_pos).w,d0
  276.         move.w  #$1E0,d1
  277.         btst    #0,render_flags(a0)
  278.         beq.s   +
  279.         move.w  #-$80,d1
  280. +       add.w   d1,d0
  281.         move.w  d0,x_pos(a0)
  282.         move.w  (Camera_Y_pos).w,d0
  283.         addi.w  #$40,d0
  284.         move.w  d0,y_pos(a0)
  285.         move.w  #$300,d0
  286.         btst    #0,render_flags(a0)
  287.         bne.s   +
  288.         move.w  #-$400,d0
  289. +       move.w  d0,x_vel(a0)
  290.         bclr    #BlockMoveArms,$38(a0)
  291.         bclr    #BlockArmsFingers,$38(a0)
  292. ;       sfx sfx_Flight,0,0,0
  293.         move.l  #BossLBZ2_MovingDown_Attack_Down,$34(a0)
  294.         move.w  #$100,y_vel(a0)
  295.  
  296. BossLBZ2_MovingDown_Attack_Down:
  297.         tst.b   $1C(a0)
  298.         bne.w   BossLBZ2_MovingStraight_Attack_Hit
  299.         move.w  (Camera_Y_pos).w,d0
  300.         addi.w  #$90,d0
  301.         cmp.w   y_pos(a0),d0
  302.         bhs.s   BossLBZ2_MovingDown_Attack_Return
  303.         move.l  #BossLBZ2_MovingDown_Attack_CheckPos,$34(a0)
  304.         clr.w   y_vel(a0)
  305.  
  306. BossLBZ2_MovingDown_Attack_Return:
  307.         rts
  308. ; ---------------------------------------------------------------------------
  309.  
  310. BossLBZ2_MovingDown_Attack_CheckPos:
  311.         tst.b   $1C(a0)
  312.         bne.w   BossLBZ2_MovingStraight_Attack_Hit
  313.         move.w  (Camera_X_pos).w,d0
  314.         btst    #0,render_flags(a0)
  315.         bne.s   +
  316.         subi.w  #$60,d0
  317.         cmp.w   x_pos(a0),d0
  318.         ble.s       BossLBZ2_MovingDown_Attack_Return2
  319.         bra.s   ++
  320. +       addi.w  #$1A0,d0
  321.         cmp.w   x_pos(a0),d0
  322.         bge.s   BossLBZ2_MovingDown_Attack_Return2
  323. +       move.w  #$4F,$2E(a0)
  324.         move.l  #BossLBZ2_SetSubroutine,$34(a0)
  325.         bchg    #0,render_flags(a0)
  326.  
  327. BossLBZ2_MovingDown_Attack_Return2:
  328.         rts
  329. ; ---------------------------------------------------------------------------
  330. ; Босс атакует полетом под полом
  331. ; ---------------------------------------------------------------------------
  332.  
  333. ; =============== S U B R O U T I N E =======================================
  334.  
  335. BossLBZ2_MovingLeftRight_Attack:
  336.         move.b  #_Setup2,routine(a0)
  337.         move.w  (Camera_X_pos).w,d0
  338.         move.w  #$1A0,d1
  339.         btst    #0,render_flags(a0)
  340.         beq.s   +
  341.         move.w  #-$80,d1
  342. +       add.w   d1,d0
  343.         move.w  d0,x_pos(a0)
  344.         move.w  (Camera_Y_pos).w,d0
  345.         addi.w  #$F0,d0
  346.         move.w  d0,y_pos(a0)
  347.         move.w  #$187,obBLBZ2_Timer(a0)
  348.         move.l  #BossLBZ2_MovingLeftRight_Attack_Move,$34(a0)
  349.         bset    #BlockArms,$38(a0)
  350.         bset    #BlockArmsFingers,$38(a0)
  351.         movea.w $44(a0),a1
  352.         clr.b   $3C(a1)
  353.         clr.w   y_vel(a0)
  354.  
  355. BossLBZ2_MovingLeftRight_Attack_Move:
  356.         move.w  (Camera_X_pos).w,d0
  357.         subq.w  #1,obBLBZ2_Timer(a0)
  358.         bmi.s   BossLBZ2_MovingLeftRight_Attack_MoveUp
  359.         move.w  #-$400,x_vel(a0)
  360.         btst    #0,render_flags(a0)
  361.         beq.s   +
  362.         move.w  #$300,x_vel(a0)
  363.         addi.w  #$130,d0
  364.         cmp.w   x_pos(a0),d0
  365.         bge.s   BossLBZ2_MovingLeftRight_Attack_Return
  366.         bra.s   ++
  367. +       addi.w  #$20,d0
  368.         cmp.w   x_pos(a0),d0
  369.         ble.s       BossLBZ2_MovingLeftRight_Attack_Return
  370. +       bchg    #0,render_flags(a0)
  371.  
  372. BossLBZ2_MovingLeftRight_Attack_Return:
  373.         rts
  374. ; ---------------------------------------------------------------------------
  375.  
  376. BossLBZ2_MovingLeftRight_Attack_MoveUp:
  377.         move.w  #-$300,y_vel(a0)
  378.         move.w  #$400,d0
  379.         btst    #0,render_flags(a0)
  380.         bne.s   +
  381.         neg.w   d0
  382. +       move.w  d0,x_vel(a0)
  383.         move.l  #BossLBZ2_MovingLeftRight_Attack_MoveUp_CheckPos,$34(a0)
  384.         bclr    #BlockArms,$38(a0)
  385.         bclr    #BlockArmsFingers,$38(a0)
  386.  
  387. BossLBZ2_MovingLeftRight_Attack_MoveUp_CheckPos:
  388.         move.w  (Camera_X_pos).w,d0
  389.         btst    #0,render_flags(a0)
  390.         bne.s   +
  391.         subi.w  #$60,d0
  392.         cmp.w   x_pos(a0),d0
  393.         ble.s       BossLBZ2_MovingLeftRight_Attack_MoveUp_Return
  394.         bra.s   ++
  395. +       addi.w  #$1A0,d0
  396.         cmp.w   x_pos(a0),d0
  397.         bge.s   BossLBZ2_MovingLeftRight_Attack_MoveUp_Return
  398. +       move.w  #$4F,$2E(a0)
  399.         move.l  #BossLBZ2_SetSubroutine,$34(a0)
  400.         bchg    #0,render_flags(a0)
  401.  
  402. BossLBZ2_MovingLeftRight_Attack_MoveUp_Return:
  403.         rts
  404. ; ---------------------------------------------------------------------------
  405. ; Босс атакует прыжками об землю
  406. ; ---------------------------------------------------------------------------
  407.  
  408. ; =============== S U B R O U T I N E =======================================
  409.  
  410. BossLBZ2_MovingJump_Attack:
  411.         move.b  #_Setup2,routine(a0)
  412.         move.w  (Camera_X_pos).w,d0
  413.         move.w  #$1A0,d1
  414.         btst    #0,render_flags(a0)
  415.         beq.s   +
  416.         move.w  #-$80,d1
  417. +       add.w   d1,d0
  418.         move.w  d0,x_pos(a0)
  419.         move.w  (Camera_Y_pos).w,d0
  420.         addi.w  #$40,d0
  421.         move.w  d0,y_pos(a0)
  422.         move.w  #$300,d0
  423.         btst    #0,render_flags(a0)
  424.         bne.s   +
  425.         move.w  #-$400,d0
  426. +       move.w  d0,x_vel(a0)
  427. ;       sfx sfx_Flight,0,0,0
  428.         move.l  #BossLBZ2_MovingJump_Attack_CheckPos,$34(a0)
  429.         bset    #BlockArms,$38(a0)
  430.         bset    #BlockArmsFingers,$38(a0)
  431.         movea.w $44(a0),a1
  432.         clr.b   $3C(a1)
  433.         clr.w   y_vel(a0)
  434.  
  435. BossLBZ2_MovingJump_Attack_CheckPos:
  436.         move.w  (Camera_X_pos).w,d0
  437.         btst    #0,render_flags(a0)
  438.         bne.s   +
  439.         addi.w  #$100,d0
  440.         cmp.w   x_pos(a0),d0
  441.         ble.s       BossLBZ2_MovingJump_Attack_Return
  442.         bra.s   ++
  443. +       addi.w  #$40,d0
  444.         cmp.w   x_pos(a0),d0
  445.         bge.s   BossLBZ2_MovingJump_Attack_Return
  446. +       move.l  #BossLBZ2_MovingJump_Attack_SetFindSonic,$34(a0)
  447.         clr.w   x_vel(a0)
  448.  
  449. BossLBZ2_MovingJump_Attack_Return:
  450.         rts
  451. ; ---------------------------------------------------------------------------
  452.  
  453. BossLBZ2_MovingJump_Attack_SetFindSonic:
  454.         move.b  #_Setup3,routine(a0)
  455.         move.w  #$100,d0
  456.         btst    #0,render_flags(a0)
  457.         bne.s   +
  458.         move.w  #-$200,d0
  459. +       move.w  d0,x_vel(a0)
  460.         move.l  #BossLBZ2_MovingJump_Attack_FindSonic,$34(a0)
  461.         move.b  #8,obBLBZ2_Count(a0)
  462.         rts
  463. ; ---------------------------------------------------------------------------
  464.  
  465. BossLBZ2_MovingJump_Attack_FindSonic:
  466.         sfx sfx_Bounce2,0,0,0
  467.         lea ChildObjDat_BossLBZ2_Spark(pc),a2
  468.         jsr (CreateChild1_Normal).l
  469.         move.w  #$14,(Screen_Shaking_Flag).w
  470.         move.w  #-$680,y_vel(a0)
  471.         jsr (Find_SonicObject).l
  472.         addi.w  #$10,d2
  473.         cmpi.w  #$20,d2
  474.         bcs.s   ++
  475.         move.w  #$200,d1
  476.         tst.w   d0
  477.         bne.s   +
  478.         neg.w   d1
  479. +       move.w  d1,x_vel(a0)
  480. +       jsr (Change_FlipXWithVelocity).l
  481.         subq.b  #1,obBLBZ2_Count(a0)
  482.         bne.s   BossLBZ2_MovingJump_Attack_FindSonic_Return
  483.         move.b  #_Setup2,routine(a0)
  484.         move.l  #BossLBZ2_MovingLeftRight_Attack_MoveUp,$34(a0)
  485.  
  486. BossLBZ2_MovingJump_Attack_FindSonic_Return:
  487.         rts
  488. ; ---------------------------------------------------------------------------
  489. ; Босс атакует падением на соника с помощью прицела
  490. ; ---------------------------------------------------------------------------
  491.  
  492. ; =============== S U B R O U T I N E =======================================
  493.  
  494. BossLBZ2_MovingFall_Attack:
  495.         move.b  #_Setup2,routine(a0)
  496.         move.w  (Camera_X_pos).w,d0
  497.         add.w   #$A0,d0
  498.         move.w  d0,x_pos(a0)
  499.         move.w  (Camera_Y_pos).w,d0
  500.         subi.w  #$40,d0
  501.         move.w  d0,y_pos(a0)
  502.         move.l  #BossLBZ2_MovingFall_Attack_Return,$34(a0)
  503.         bset    #BlockArms,$38(a0)
  504.         bclr    #BlockArmsFingers,$38(a0)
  505.         movea.w $44(a0),a1
  506.         clr.b   $3C(a1)
  507.         clr.l   x_vel(a0)
  508.         sfx sfx_Squeak,0,0,0
  509.         lea ChildObjDat_BossLBZ2_Aim(pc),a2
  510.         jsr (CreateChild6_Simple).l
  511.  
  512. BossLBZ2_MovingFall_Attack_Return:
  513.         rts
  514. ; ---------------------------------------------------------------------------
  515.  
  516. BossLBZ2_MovingFall_Attack_SetFall:
  517.         move.b  #_Setup3,routine(a0)
  518.         move.l  #BossLBZ2_MovingFall_Attack_Fall,$34(a0)
  519.         rts
  520. ; ---------------------------------------------------------------------------
  521.  
  522. BossLBZ2_MovingFall_Attack_Fall:
  523.         move.b  #_Setup4,routine(a0)
  524.         move.w  #3,$2E(a0)
  525.         move.l  #BossLBZ2_MovingFall_Attack_FallRestore,$34(a0)
  526.         clr.w   y_vel(a0)
  527.         bset    #BlockMoveArms,$38(a0)
  528.         sfx sfx_Attack,0,0,0
  529.         bset    #BlockArmsFingers,$38(a0)
  530.         move.w  #$14,(Screen_Shaking_Flag).w
  531.         lea ChildObjDat_BossLBZ2_Spark(pc),a2
  532.         jmp (CreateChild1_Normal).l
  533. ; ---------------------------------------------------------------------------
  534.  
  535. BossLBZ2_MovingFall_Attack_FallRestore:
  536.         move.b  #_Setup5,routine(a0)
  537.         move.w  #3,$2E(a0)
  538.         move.l  #BossLBZ2_MovingFall_Attack_EndFall,$34(a0)
  539.         rts
  540. ; ---------------------------------------------------------------------------
  541.  
  542. BossLBZ2_MovingFall_Attack_EndFall:
  543.         move.b  #_Setup2,routine(a0)
  544.         move.w  #$3F,$2E(a0)
  545.         move.l  #BossLBZ2_MovingFall_Attack_CheckPos2,$34(a0)
  546.         bclr    #BlockMoveArms,$38(a0)
  547.         move.w  #$400,d0
  548.         btst    #0,render_flags(a0)
  549.         beq.s   +
  550.         neg.w   d0
  551. +       move.w  d0,x_vel(a0)
  552.         move.w  #-$600,y_vel(a0)
  553.         rts
  554. ; ---------------------------------------------------------------------------
  555.  
  556. BossLBZ2_MovingFall_Attack_CheckPos2:
  557.         move.w  (Camera_X_pos).w,d0
  558.         btst    #0,render_flags(a0)
  559.         beq.s   +
  560.         subi.w  #$60,d0
  561.         cmp.w   x_pos(a0),d0
  562.         ble.s       BossLBZ2_MovingFall_Attack_Return2
  563.         bra.s   ++
  564. +       addi.w  #$1A0,d0
  565.         cmp.w   x_pos(a0),d0
  566.         bge.s   BossLBZ2_MovingFall_Attack_Return2
  567. +       move.w  #$2F,$2E(a0)
  568.         move.l  #BossLBZ2_MovingFall_Attack_Restore,$34(a0)
  569.         clr.l   x_vel(a0)
  570.         move.w  (Camera_X_pos).w,d0
  571.         addi.w  #$A0,d0
  572.         move.w  d0,x_pos(a0)
  573.         move.w  (Camera_Y_pos).w,d0
  574.         subi.w  #$40,d0
  575.         move.w  d0,y_pos(a0)
  576.  
  577. BossLBZ2_MovingFall_Attack_Return2:
  578.         rts
  579. ; ---------------------------------------------------------------------------
  580.  
  581. BossLBZ2_MovingFall_Attack_Restore:
  582.         move.l  #BossLBZ2_SetSubroutine,$34(a0)
  583.         rts
  584. ; ---------------------------------------------------------------------------
  585. ; Босс атакует захватом
  586. ; ---------------------------------------------------------------------------
  587.  
  588. ; =============== S U B R O U T I N E =======================================
  589.  
  590. BossLBZ2_HitsGround_Start:
  591.         move.w  #-$400,y_vel(a0)
  592.         move.w  #$600,d0
  593.         btst    #0,render_flags(a0)
  594.         bne.s   +
  595.         neg.w   d0
  596. +       move.w  d0,x_vel(a0)
  597.         move.l  #BossLBZ2_HitsGround_CheckPos,$34(a0)
  598.  
  599. BossLBZ2_HitsGround_CheckPos:
  600.         move.w  (Camera_X_pos).w,d0
  601.         btst    #0,render_flags(a0)
  602.         bne.s   +
  603.         subi.w  #$60,d0
  604.         cmp.w   x_pos(a0),d0
  605.         ble.s       BossLBZ2_HitsGround_Return
  606.         bra.s   ++
  607. +       addi.w  #$1A0,d0
  608.         cmp.w   x_pos(a0),d0
  609.         bge.s   BossLBZ2_HitsGround_Return
  610. +       move.w  #7,$2E(a0)
  611.         move.l  #BossLBZ2_HitsGround_SetFall,$34(a0)
  612.         clr.l   x_vel(a0)
  613.         bchg    #0,render_flags(a0)
  614.         movea.w $44(a0),a1
  615.         clr.b   $3C(a1)
  616.         move.w  (Camera_X_pos).w,d0
  617.         addi.w  #$A0,d0
  618.         move.w  d0,x_pos(a0)
  619.         move.w  (Camera_Y_pos).w,d0
  620.         subi.w  #$40,d0
  621.         move.w  d0,y_pos(a0)
  622.  
  623. BossLBZ2_HitsGround_Return:
  624.         rts
  625. ; ---------------------------------------------------------------------------
  626.  
  627. BossLBZ2_HitsGround_SetFall:
  628.         move.b  #_Setup3,routine(a0)
  629.         move.l  #BossLBZ2_HitsGround_Fall,$34(a0)
  630.         rts
  631. ; ---------------------------------------------------------------------------
  632.  
  633. BossLBZ2_HitsGround_Fall:
  634.         move.b  #_Setup4,routine(a0)
  635.         move.w  #3,$2E(a0)
  636.         move.l  #BossLBZ2_HitsGround_FallRestore,$34(a0)
  637.         clr.w   y_vel(a0)
  638.         bset    #BlockMoveArms,$38(a0)
  639.         bset    #BlockArmsFingers,$38(a0)
  640.         sfx sfx_Attack,0,0,0
  641.         move.w  #$14,(Screen_Shaking_Flag).w
  642.         lea ChildObjDat_BossLBZ2_Spark(pc),a2
  643.         jmp (CreateChild1_Normal).l
  644. ; ---------------------------------------------------------------------------
  645.  
  646. BossLBZ2_HitsGround_FallRestore:
  647.         move.b  #_Setup5,routine(a0)
  648.         move.w  #3,$2E(a0)
  649.         move.l  #BossLBZ2_HitsGround_EndFall,$34(a0)
  650.         rts
  651. ; ---------------------------------------------------------------------------
  652.  
  653. BossLBZ2_HitsGround_EndFall:
  654.         move.b  #_Setup2,routine(a0)
  655.         move.w  #$3F,$2E(a0)
  656.         move.l  #BossLBZ2_HitsGround_CheckPos2,$34(a0)
  657.         clr.b   obBLBZ2_Grab(a0)
  658.         bclr    #BlockMoveArms,$38(a0)
  659.         move.w  #$400,d0
  660.         btst    #0,render_flags(a0)
  661.         beq.s   +
  662.         neg.w   d0
  663. +       move.w  d0,x_vel(a0)
  664.         move.w  #-$600,y_vel(a0)
  665.         movea.l a0,a2
  666.         lea (Player_1).w,a0
  667.         jsr (HurtCharacter).l
  668.         movea.l a2,a0
  669.         rts
  670. ; ---------------------------------------------------------------------------
  671.  
  672. BossLBZ2_HitsGround_CheckPos2:
  673.         move.w  (Camera_X_pos).w,d0
  674.         btst    #0,render_flags(a0)
  675.         beq.s   +
  676.         subi.w  #$60,d0
  677.         cmp.w   x_pos(a0),d0
  678.         ble.s       BossLBZ2_HitsGround_Return2
  679.         bra.s   ++
  680. +       addi.w  #$1A0,d0
  681.         cmp.w   x_pos(a0),d0
  682.         bge.s   BossLBZ2_HitsGround_Return2
  683. +       move.w  #$2F,$2E(a0)
  684.         move.l  #BossLBZ2_HitsGround_Restore,$34(a0)
  685.         clr.l   x_vel(a0)
  686.         move.w  (Camera_X_pos).w,d0
  687.         addi.w  #$A0,d0
  688.         move.w  d0,x_pos(a0)
  689.         move.w  (Camera_Y_pos).w,d0
  690.         subi.w  #$40,d0
  691.         move.w  d0,y_pos(a0)
  692.  
  693. BossLBZ2_HitsGround_Return2:
  694.         rts
  695. ; ---------------------------------------------------------------------------
  696.  
  697. BossLBZ2_HitsGround_Restore:
  698.         move.l  #BossLBZ2_SetSubroutine,$34(a0)
  699.         rts
  700. ; ---------------------------------------------------------------------------
  701. ; Проверка урона
  702. ; ---------------------------------------------------------------------------
  703.  
  704. ; =============== S U B R O U T I N E =======================================
  705.  
  706. BossLBZ2_CheckTouch:
  707.         tst.b   collision_flags(a0)
  708.         bne.s   BossLBZ2_CheckTouch_Return
  709.         tst.b   collision_property(a0)
  710.         beq.s   BossLBZ2_CheckTouch_WaitExplosive
  711.         tst.b   $1C(a0)
  712.         bne.s   +
  713.         move.b  #$3C,$1C(a0)
  714.         sfx sfx_HitBoss,0,0,0
  715.         movea.w $44(a0),a1
  716.         clr.b   collision_flags(a1)
  717.         bset    #6,status(a0)
  718. +       moveq   #0,d0
  719.         btst    #0,$1C(a0)
  720.         bne.s   +
  721.         addi.w  #6*2,d0
  722. +       bsr.w   sub_75084
  723.         subq.b  #1,$1C(a0)
  724.         bne.s   BossLBZ2_CheckTouch_Return
  725.         bclr    #6,status(a0)
  726.         move.b  collision_restore_flags(a0),collision_flags(a0)
  727.         movea.w $44(a0),a1
  728.         move.b  #$2D|$80,collision_flags(a1)
  729.  
  730. BossLBZ2_CheckTouch_Return:
  731.         rts
  732. ; ---------------------------------------------------------------------------
  733.  
  734. BossLBZ2_CheckTouch_WaitExplosive:
  735.         move.l  #Wait_FadeToLevelMusic,address(a0)
  736.         move.l  #loc_746D8,$34(a0)
  737.         jsr (BossDefeated).l
  738.         lea (Child6_CreateBossExplosion).l,a2
  739.         jsr (CreateChild6_Simple).l
  740.         bne.s   +
  741.         move.b  #4,subtype(a1)
  742. +       tst.b   obBLBZ2_Grab(a0)
  743.         beq.s   BossLBZ2_CheckTouch_WaitExplosive_Return
  744.         jsr (Restore_PlayerControl).l
  745.  
  746. BossLBZ2_CheckTouch_WaitExplosive_Return:
  747.         rts
  748. ; ---------------------------------------------------------------------------
  749.  
  750. loc_746D8:
  751.         move.l  #loc_746F4,address(a0)
  752.         move.b  #7,mapping_frame(a0)
  753.         bset    #4,$38(a0)
  754.         lea ChildObjDat_BossLBZ2_FlickerMove(pc),a2
  755.         jmp (CreateChild1_Normal).l
  756. ; ---------------------------------------------------------------------------
  757.  
  758. loc_746F4:
  759.         move.w  y_pos(a0),d0
  760.         subq.w  #1,d0
  761.         move.w  d0,y_pos(a0)
  762.         move.w  (Camera_Y_pos).w,d1
  763.         subi.w  #$40,d1
  764.         cmp.w   d1,d0
  765.         blo.s       loc_74710
  766.         jmp (Draw_Sprite).l
  767. ; ---------------------------------------------------------------------------
  768.  
  769. loc_74710:
  770.         move.l  #loc_7473A,address(a0)
  771.         bclr    #7,render_flags(a0)
  772.         bset    #5,$38(a0)
  773.         bset    #0,render_flags(a0)
  774.         move.w  (Camera_X_pos).w,d2
  775.         addi.w  #$40,d2
  776.         move.w  d2,x_pos(a0)
  777.         rts
  778. ; ---------------------------------------------------------------------------
  779.  
  780. loc_7473A:
  781.         addq.b  #2,(BackgroundEvent_routine).w
  782.         move.l  #Go_Delete_Sprite_2,address(a0)
  783.         rts
  784.  
  785. ; =============== S U B R O U T I N E =======================================
  786.  
  787. Obj_BossLBZ2_Body:
  788.         lea ObjDat3_BossLBZ2_Body(pc),a1
  789.         jsr (SetUp_ObjAttributes).l
  790.         move.l  #+,(a0)
  791. +       jsr (Child_GetPriorityOnce).l
  792.         jsr (Refresh_ChildPositionAdjusted).l
  793.         jmp (Child_Draw_Sprite2).l
  794.  
  795. ; =============== S U B R O U T I N E =======================================
  796.  
  797. Obj_BossLBZ2_Wall:
  798.         lea ObjDat3_BossLBZ2_Wall(pc),a1
  799.         jsr (SetUp_ObjAttributes).l
  800.         move.l  #+,(a0)
  801. +       jsr (Child_GetPriorityOnce).l
  802.         jsr (Refresh_ChildPositionAdjusted).l
  803.         jmp (Child_Draw_Sprite2).l
  804.  
  805. ; =============== S U B R O U T I N E =======================================
  806.  
  807. Obj_BossLBZ2_Fire:
  808.         lea ObjDat3_BossLBZ2_Fire(pc),a1
  809.         jsr (SetUp_ObjAttributes).l
  810.         move.l  #+,(a0)
  811. +       move.b  #$1A|$80,d0
  812.         jsr (sub_74EBC).l
  813.         jsr (Refresh_ChildPositionAdjusted).l
  814.         movea.w parent3(a0),a1
  815.         btst    #7,status(a1)
  816.         bne.s   loc_74BFA
  817.         btst    #0,(V_int_run_count+3).w
  818.         bne.w   locret_74374
  819.         jmp (Draw_Sprite).l
  820. ; ---------------------------------------------------------------------------
  821.  
  822. locret_74374:
  823.         rts
  824. ; ---------------------------------------------------------------------------
  825.  
  826. loc_74BFA:
  827.         jmp (Delete_Current_Sprite).l
  828.  
  829. ; =============== S U B R O U T I N E =======================================
  830.  
  831. Obj_BossLBZ2_Collision:
  832.         move.b  #$1C|$80,$28(a0)
  833.         move.l  #+,(a0)
  834. +       jsr (Refresh_ChildPositionAdjusted).l
  835.         movea.w parent3(a0),a1
  836.         btst    #7,status(a1)
  837.         bne.s   loc_74BFA
  838.         jmp (Add_SpriteToCollisionResponseList).l
  839.  
  840. ; =============== S U B R O U T I N E =======================================
  841.  
  842. Obj_BossLBZ2_Arm:
  843.         moveq   #0,d0
  844.         move.b  routine(a0),d0
  845.         move.w  off_749E6(pc,d0.w),d1
  846.         jsr off_749E6(pc,d1.w)
  847.         moveq   #$C,d0
  848.         jmp (Child_DrawTouch_Sprite_FlickerMove).l
  849. ; ---------------------------------------------------------------------------
  850.  
  851. off_749E6: offsetTable
  852.         offsetTableEntry.w loc_749EC    ; 0
  853.         offsetTableEntry.w loc_74A14    ; 2
  854.         offsetTableEntry.w loc_74A3E    ; 4
  855. ; ---------------------------------------------------------------------------
  856.  
  857. loc_749EC:
  858.         lea ObjDat3_BossLBZ2_Arm(pc),a1
  859.         jsr (SetUp_ObjAttributes).l
  860.         movea.w parent3(a0),a1
  861.         move.w  a0,$44(a1)
  862.         move.b  #$14,child_dx(a0)
  863.         move.b  #-6,child_dy(a0)
  864.         lea ChildObjDat_BossLBZ2_Arm(pc),a2
  865.         jmp (CreateChild1_Normal).l
  866. ; ---------------------------------------------------------------------------
  867.  
  868. loc_74A14:
  869.         movea.w parent3(a0),a1
  870.         btst    #7,art_tile(a1)
  871.         beq.s   +
  872.         bset    #7,art_tile(a0)
  873. +       move.b  #4,routine(a0)
  874.         move.b  #$2D|$80,$28(a0)
  875.  
  876. loc_74A32:
  877.         lea LBZFinalBoss2_CircleLookup(pc),a2
  878.         jmp (MoveSprite_CircularLookup).l
  879. ; ---------------------------------------------------------------------------
  880.  
  881. loc_74A3E:
  882.         movea.w $46(a0),a1
  883.         btst    #1,$38(a1)
  884.         bne.w   locret_74374
  885.         btst    #BlockArms,$38(a1)
  886.         bne.s   loc_74A88
  887.         lea (Player_1).w,a1
  888.         move.b  $3C(a0),d0
  889.         move.w  y_pos(a0),d1
  890.         sub.w   y_pos(a1),d1
  891.         cmpi.w  #-2,d1
  892.         blt.s       loc_74A7C
  893.         cmpi.w  #2,d1
  894.         ble.s       loc_74A88
  895.         subq.b  #1,d0
  896.         cmpi.b  #-$30,d0
  897.         blt.s       loc_74A88
  898.         bra.w   loc_74A84
  899. ; ---------------------------------------------------------------------------
  900.  
  901. loc_74A7C:
  902.         addq.b  #1,d0
  903.         cmpi.b  #0,d0
  904.         bgt.s   loc_74A88
  905.  
  906. loc_74A84:
  907.         move.b  d0,$3C(a0)
  908.  
  909. loc_74A88:
  910.         jsr (Change_FlipXUseParent).l
  911.         lea LBZFinalBoss2_CircleLookup(pc),a2
  912.         jmp (MoveSprite_CircularLookup).l
  913.  
  914. ; =============== S U B R O U T I N E =======================================
  915.  
  916. Obj_BossLBZ2_Arm_Fingers:
  917.         lea ObjDat3_BossLBZ2_Arm_Fingers(pc),a1
  918.         jsr (SetUp_ObjAttributes3).l
  919.         movea.w parent3(a0),a1
  920.         move.w  parent3(a1),$44(a0)
  921.         move.l  #loc_74B36,address(a0)
  922.         move.l  #AniRaw_BossLBZ2_Fingers,$30(a0)
  923.         tst.b   subtype(a0)
  924.         beq.s   loc_74B36
  925.         move.b  #8,mapping_frame(a0)
  926.         move.w  #$180,priority(a0)
  927.         move.l  #AniRaw_BossLBZ2_Fingers2,$30(a0)
  928.  
  929. loc_74B36:
  930.         jsr (Child_GetPriorityOnce).l
  931.  
  932. loc_74B3C:
  933.         jsr (Refresh_ChildPositionAdjusted).l
  934.         movea.w $44(a0),a1
  935.         btst    #BlockArmsFingers,$38(a1)
  936.         bne.s   +
  937.         jsr (Animate_Raw).l
  938. +       movea.w $44(a0),a1
  939.         tst.b   obBLBZ2_Grab(a1)
  940.         beq.s   loc_74B6E
  941.         move.l  #loc_74B76,address(a0)
  942.         move.b  #7,mapping_frame(a0)
  943.         tst.b   subtype(a0)
  944.         beq.s   loc_74B6E
  945.         move.b  #$B,mapping_frame(a0)
  946.         addq.b  #8,child_dx(a0)
  947.  
  948. loc_74B6E:
  949.         moveq   #$C,d0
  950.         jmp (Child_DrawTouch_Sprite_FlickerMove).l
  951. ; ---------------------------------------------------------------------------
  952.  
  953. loc_74B76:
  954.         jsr (Refresh_ChildPositionAdjusted).l
  955.         movea.w $44(a0),a1
  956.         tst.b   obBLBZ2_Grab(a1)
  957.         bne.s   loc_74B96
  958.         move.l  #loc_74B3C,address(a0)
  959.         tst.b   subtype(a0)
  960.         beq.s   loc_74B96
  961.         subq.b  #8,child_dx(a0)
  962.  
  963. loc_74B96:
  964.         moveq   #$C,d0
  965.         jmp (Child_DrawTouch_Sprite_FlickerMove).l
  966.  
  967. ; =============== S U B R O U T I N E =======================================
  968.  
  969. Obj_BossLBZ2_Arm_Ball:
  970.         lea ObjDat3_BossLBZ2_Arm_Ball(pc),a1
  971.         jsr (SetUp_ObjAttributes3).l
  972.         move.l  #loc_74ACA,address(a0)
  973.         movea.w parent3(a0),a1
  974.         movea.w parent3(a1),a2
  975.         move.w  a2,parent3(a0)
  976.         move.w  a1,$44(a0)
  977.         move.w  a1,$44(a0)
  978.         move.b  #$18,child_dx(a0)
  979.         move.b  #-6,child_dy(a0)
  980.  
  981. loc_74ACA:
  982.         jsr (Child_GetPriorityOnce).l
  983.         jsr (Change_FlipXUseParent).l
  984.         movea.w $44(a0),a1
  985.         move.b  $3C(a1),d0
  986.         addi.b  #$14,d0
  987.         move.b  d0,$3C(a0)
  988.         lea (LBZ2FinalBoss2_CircleLookup2).l,a2
  989.         jsr (MoveSprite_CircularLookup).l
  990.         moveq   #$C,d0
  991.         jmp (Child_DrawTouch_Sprite_FlickerMove).l
  992.  
  993. ; =============== S U B R O U T I N E =======================================
  994.  
  995. Obj_BossLBZ2_Arm_CollisionGrab:
  996.         move.l  #loc_74C34,address(a0)
  997.         movea.w parent3(a0),a1
  998.         move.w  parent3(a1),$44(a0)
  999.  
  1000. loc_74C34:
  1001.         jsr (Refresh_ChildPositionAdjusted).l
  1002.         movea.w $44(a0),a1
  1003.         btst    #7,status(a1)
  1004.         bne.s   loc_74C7A
  1005.         btst    #BlockArmsFingers,$38(a1)
  1006.         bne.w   locret_74374
  1007.         btst    #6,status(a1)
  1008.         bne.w   locret_74374
  1009.         lea word_74C84(pc),a1
  1010.         jsr (Check_PlayerInRange).l
  1011.         tst.w   d0
  1012.         beq.s   locret_74C78
  1013.         movea.w d0,a1
  1014.         tst.b   $34(a1)
  1015.         bne.s   locret_74C78
  1016.         cmpi.b  #6,5(a1)
  1017.         bcs.s   loc_74C8C
  1018.  
  1019. locret_74C78:
  1020.         rts
  1021. ; ---------------------------------------------------------------------------
  1022.  
  1023. loc_74C7A:
  1024.         clr.b   (Player_1+object_control).w
  1025.         jmp (Delete_Current_Sprite).l
  1026. ; ---------------------------------------------------------------------------
  1027.  
  1028. word_74C84:     dc.w  $FFF0, $20, $FFF0, $20
  1029. ; ---------------------------------------------------------------------------
  1030.  
  1031. loc_74C8C:
  1032.         move.l  #loc_74CCC,address(a0)
  1033.         movea.w $44(a0),a1
  1034.         st  obBLBZ2_Grab(a1)
  1035.         move.b  #_Setup2,routine(a1)
  1036.         move.w  #7,$2E(a1)
  1037.         move.l  #BossLBZ2_HitsGround_Start,$34(a1)
  1038.         move.w  #$200,y_vel(a1)
  1039.         lea (Player_1).w,a1
  1040.         move.b  #-$7F,object_control(a1)
  1041.         move.b  #2,anim(a1)
  1042.         moveq   #0,d0
  1043.         move.w  d0,x_vel(a1)
  1044.         move.w  d0,y_vel(a1)
  1045.         move.w  d0,ground_vel(a1)
  1046.  
  1047. loc_74CCC:
  1048.         movea.w $44(a0),a1
  1049.         tst.b   obBLBZ2_Grab(a1)
  1050.         beq.s   loc_74CF8
  1051.         btst    #7,status(a1)
  1052.         bne.w   loc_74BFA
  1053.         jsr (Refresh_ChildPositionAdjusted).l
  1054.         lea (Player_1).w,a1
  1055.         move.w  x_pos(a0),x_pos(a1)
  1056.         move.w  y_pos(a0),y_pos(a1)
  1057.         rts
  1058. ; ---------------------------------------------------------------------------
  1059.  
  1060. loc_74CF8:
  1061.         move.l  #loc_74D04,address(a0)
  1062.         move.w  #$40,$2E(a0)
  1063.  
  1064. loc_74D04:
  1065.         subq.w  #1,$2E(a0)
  1066.         bmi.s   loc_74D0C
  1067.         rts
  1068. ; ---------------------------------------------------------------------------
  1069.  
  1070. loc_74D0C:
  1071.         move.l  #loc_74C34,address(a0)
  1072.         rts
  1073. ; ---------------------------------------------------------------------------
  1074. ; Искры
  1075. ; ---------------------------------------------------------------------------
  1076.  
  1077. ; =============== S U B R O U T I N E =======================================
  1078.  
  1079. Obj_BossLBZ2_Spark:
  1080.         lea ObjDat3_BossLBZ2_Spark(pc),a1
  1081.         jsr (SetUp_ObjAttributes).l
  1082.         jsr (Refresh_ChildPositionAdjusted).l
  1083.         moveq   #0,d0
  1084.         move.b  subtype(a0),d0
  1085.         move.w  d0,d1
  1086.         addq.w  #7,d0
  1087.         move.w  d0,$2E(a0)
  1088.         movea.w parent3(a0),a1
  1089.         move.w  x_vel(a1),d0
  1090.         asl.w   #2,d0
  1091.         asl.w   #6,d1
  1092.         add.w   d1,d0
  1093.         neg.w   d0
  1094.         move.w  d0,x_vel(a0)
  1095.         jsr (Random_Number).l
  1096.         andi.w  #$3FF,d0
  1097.         addi.w  #$100,d0
  1098.         neg.w   d0
  1099.         move.w  d0,y_vel(a0)
  1100.         move.l  #Go_Delete_Sprite,$34(a0)
  1101.         move.l  #BossLBZ2_Spark_Draw,address(a0)
  1102.  
  1103. BossLBZ2_Spark_Draw:
  1104.         jsr (MoveSprite2).l
  1105.         jsr (Obj_Wait).l
  1106.         jmp (Sprite_CheckDeleteXY).l
  1107. ; ---------------------------------------------------------------------------
  1108. ; Прицел
  1109. ; ---------------------------------------------------------------------------
  1110.  
  1111. ; =============== S U B R O U T I N E =======================================
  1112.  
  1113. Obj_BossLBZ2_Aim:
  1114.         move.w  (Player_1+x_pos).w,x_pos(a0)
  1115.         move.w  (Camera_Y_pos).w,d0
  1116.         addi.w  #$D0,d0
  1117.         move.w  d0,y_pos(a0)
  1118.         lea ObjDat3_BossLBZ2_Aim(pc),a1
  1119.         jsr (SetUp_ObjAttributes).l
  1120.         move.w  #$7F,$2E(a0)
  1121.         move.l  #+,address(a0)
  1122. +       lea AniRaw_BossLBZ2_Aim(pc),a1
  1123.         jsr (Animate_RawNoSST).l
  1124.         subq.w  #1,$2E(a0)
  1125.         beq.s   BossLBZ2_Aim_Attack_Start
  1126.         lea (Player_1).w,a1
  1127.         move.w  #$200,d0            ; Maximum speed.
  1128.         move.w  #$40,d1             ; Acceleration.
  1129.         jsr (Chase_ObjectXOnly).l
  1130.         jsr (MoveSprite2).l
  1131.         jmp (Draw_Sprite).l
  1132. ; ---------------------------------------------------------------------------
  1133.  
  1134. BossLBZ2_Aim_Attack_Start:
  1135.         move.w  #$4F,$2E(a0)
  1136.         clr.w   x_vel(a0)
  1137.         move.l  #BossLBZ2_Aim_Attack_Wait,address(a0)
  1138.  
  1139. BossLBZ2_Aim_Attack_Wait:
  1140.         lea AniRaw_BossLBZ2_Aim2(pc),a1
  1141.         jsr (Animate_RawNoSST).l
  1142.         jsr (Draw_Sprite).l
  1143.         subq.w  #1,$2E(a0)
  1144.         bpl.s   BossLBZ2_Aim_Return
  1145.         lea (Player_1).w,a1
  1146.         jsr (Find_OtherObject).l
  1147.         movea.w parent3(a0),a1
  1148.         move.w  x_pos(a0),d2
  1149.         move.w  #$30,d1
  1150.         bclr    #0,render_flags(a1)
  1151.         tst.w   d0
  1152.         beq.s   +
  1153.         bset    #0,render_flags(a1)
  1154.         neg.w   d1
  1155. +       add.w   d1,d2
  1156.         move.w  d2,x_pos(a1)
  1157.         move.l  #BossLBZ2_MovingFall_Attack_SetFall,$34(a1)
  1158.         move.l  #Go_Delete_Sprite,address(a0)
  1159.  
  1160. BossLBZ2_Aim_Return:
  1161.         rts
  1162.  
  1163. ; =============== S U B R O U T I N E =======================================
  1164.  
  1165. Obj_BossLBZ2_FlickerMove:
  1166.         lea ObjDat3_BossLBZ2_FlickerMove(pc),a1
  1167.         jsr (SetUp_ObjAttributes).l
  1168.         jsr (Refresh_ChildPositionAdjusted).l
  1169.         move.l  #Obj_FlickerMove,address(a0)
  1170.         moveq   #0,d0
  1171.         move.b  subtype(a0),d0
  1172.         lsr.w   #1,d0
  1173.         addi.b  #$D,d0
  1174.         move.b  d0,mapping_frame(a0)
  1175.         moveq   #0,d0
  1176.         jsr (Set_IndexedVelocity).l
  1177.         jmp (Draw_Sprite).l
  1178.  
  1179. ; =============== S U B R O U T I N E =======================================
  1180.  
  1181. sub_75084:
  1182.         lea word_75092(pc),a1
  1183.         lea word_7509E(pc,d0.w),a2
  1184.         jmp (CopyWordData_6).l
  1185. ; ---------------------------------------------------------------------------
  1186.  
  1187. word_75092:
  1188.         dc.w Normal_palette_line_2+8
  1189.         dc.w Normal_palette_line_2+$1C
  1190.         dc.w Normal_palette_line_2+$10
  1191.         dc.w Normal_palette_line_2+$18
  1192.         dc.w Normal_palette_line_2+$1A
  1193.         dc.w Normal_palette_line_2+$1E
  1194. word_7509E:
  1195.         dc.w 8, $A, 4, $644, $422, 0
  1196.         dc.w $888, $666, $AAA, $AAA, $EEE, $EEE
  1197.  
  1198. ; =============== S U B R O U T I N E =======================================
  1199.  
  1200. ObjDat3_BossLBZ2:
  1201.         dc.l Map_RobotnikShip
  1202.         dc.w $84EA
  1203.         dc.w $280
  1204.         dc.b $1C
  1205.         dc.b $20
  1206.         dc.b $A
  1207.         dc.b $F|$80
  1208. ObjDat3_BossLBZ2_Body:
  1209.         dc.l Map_LBZ2Boss
  1210.         dc.w $20E0
  1211.         dc.w $200
  1212.         dc.b $28
  1213.         dc.b $28
  1214.         dc.b 0
  1215.         dc.b 0
  1216. ObjDat3_BossLBZ2_Wall:
  1217.         dc.l Map_LBZ2Boss
  1218.         dc.w $20E0
  1219.         dc.w $300
  1220.         dc.b $14
  1221.         dc.b $C
  1222.         dc.b 1
  1223.         dc.b 0
  1224. ObjDat3_BossLBZ2_Fire:
  1225.         dc.l Map_LBZ2Boss
  1226.         dc.w $E0
  1227.         dc.w $300
  1228.         dc.b $C
  1229.         dc.b $C
  1230.         dc.b $C
  1231.         dc.b 0
  1232. ObjDat3_BossLBZ2_Arm:
  1233.         dc.l Map_LBZ2Boss
  1234.         dc.w $20E0
  1235.         dc.w $180
  1236.         dc.b $20
  1237.         dc.b $10
  1238.         dc.b 2
  1239.         dc.b 0
  1240. ObjDat3_BossLBZ2_Arm_Fingers:
  1241.         dc.w $80
  1242.         dc.b $14
  1243.         dc.b $14
  1244.         dc.b 4
  1245.         dc.b 0
  1246. ObjDat3_BossLBZ2_Arm_Ball:
  1247.         dc.w $180
  1248.         dc.b 8
  1249.         dc.b 8
  1250.         dc.b 3
  1251.         dc.b 0
  1252. ObjDat3_BossLBZ2_Spark:
  1253.         dc.l Map_LBZ2Boss
  1254.         dc.w $80E0
  1255.         dc.w $80
  1256.         dc.b 16/2
  1257.         dc.b 16/2
  1258.         dc.b $12
  1259.         dc.b 0
  1260. ObjDat3_BossLBZ2_Aim:
  1261.         dc.l Map_LBZ2Boss
  1262.         dc.w $A0E0
  1263.         dc.w $80
  1264.         dc.b 16/2
  1265.         dc.b 16/2
  1266.         dc.b $13
  1267.         dc.b 0
  1268. ObjDat3_BossLBZ2_FlickerMove:
  1269.         dc.l Map_LBZ2Boss
  1270.         dc.w $A0E0
  1271.         dc.w $100
  1272.         dc.b $10
  1273.         dc.b $14
  1274.         dc.b $D
  1275.         dc.b 0
  1276. ChildObjDat_BossLBZ2:
  1277.         dc.w 5-1
  1278.         dc.l Obj_BossLBZ2_Body
  1279.         dc.w $CEC
  1280.         dc.l Obj_BossLBZ2_Wall
  1281.         dc.w $E8
  1282.         dc.l Obj_BossLBZ2_Fire
  1283.         dc.w $38EC
  1284.         dc.l Obj_BossLBZ2_Collision
  1285.         dc.w $4CC
  1286.         dc.l Obj_BossLBZ2_Arm
  1287.         dc.w $1424
  1288. ChildObjDat_BossLBZ2_Arm:
  1289.         dc.w 4-1
  1290.         dc.l Obj_BossLBZ2_Arm_Fingers
  1291.         dc.b -42, -2
  1292.         dc.l Obj_BossLBZ2_Arm_Fingers
  1293.         dc.b -74, -2
  1294.         dc.l Obj_BossLBZ2_Arm_Ball
  1295.         dc.b 0, 0
  1296.         dc.l Obj_BossLBZ2_Arm_CollisionGrab
  1297.         dc.b $C0, $FE
  1298. ChildObjDat_BossLBZ2_Spark:
  1299.         dc.w 8-1
  1300.         dc.l Obj_BossLBZ2_Spark
  1301.         dc.b 0, 40
  1302.         dc.l Obj_BossLBZ2_Spark
  1303.         dc.b 0, 40
  1304.         dc.l Obj_BossLBZ2_Spark
  1305.         dc.b 0, 40
  1306.         dc.l Obj_BossLBZ2_Spark
  1307.         dc.b 0, 40
  1308.         dc.l Obj_BossLBZ2_Spark
  1309.         dc.b 16, 40
  1310.         dc.l Obj_BossLBZ2_Spark
  1311.         dc.b 16, 40
  1312.         dc.l Obj_BossLBZ2_Spark
  1313.         dc.b 16, 40
  1314.         dc.l Obj_BossLBZ2_Spark
  1315.         dc.b 16, 40
  1316. ChildObjDat_BossLBZ2_Aim:
  1317.         dc.w 1-1
  1318.         dc.l Obj_BossLBZ2_Aim
  1319. ChildObjDat_BossLBZ2_FlickerMove:
  1320.         dc.w 5-1
  1321.         dc.l Obj_BossLBZ2_FlickerMove
  1322.         dc.w $F4D4
  1323.         dc.l Obj_BossLBZ2_FlickerMove
  1324.         dc.w $14D4
  1325.         dc.l Obj_BossLBZ2_FlickerMove
  1326.         dc.w $2CE8
  1327.         dc.l Obj_BossLBZ2_FlickerMove
  1328.         dc.w $F4FC
  1329.         dc.l Obj_BossLBZ2_FlickerMove
  1330.         dc.w $14FC
  1331. AniRaw_BossLBZ2_Fingers:
  1332.         dc.b 9
  1333.         dc.b 7
  1334.         dc.b 4
  1335.         dc.b 5
  1336.         dc.b 6
  1337.         dc.b 5
  1338.         dc.b 4
  1339.         dc.b $FC
  1340. AniRaw_BossLBZ2_Fingers2:
  1341.         dc.b 9
  1342.         dc.b $B
  1343.         dc.b 8
  1344.         dc.b 9
  1345.         dc.b $A
  1346.         dc.b 9
  1347.         dc.b 8
  1348.         dc.b $FC
  1349. AniRaw_BossLBZ2_Aim:
  1350.         dc.b 0, $13, $14, $FC
  1351. AniRaw_BossLBZ2_Aim2:
  1352.         dc.b 0, $13, $14, $15, $FC,0
  1353. LBZFinalBoss2_CircleLookup:
  1354.         dc.b   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, $A, $B, $C, $D, $D, $E
  1355.         dc.b  $F,$10,$11,$12,$13,$14,$15,$15,$16,$17,$18,$19,$19,$1A,$1B,$1C
  1356.         dc.b $1C,$1D,$1E,$1E,$1F,$20,$20,$21,$21,$22,$22,$23,$23,$24,$24,$25
  1357.         dc.b $25,$25,$26,$26,$26,$27,$27,$27,$27,$27,$28,$28,$28,$28,$28,$28
  1358. LBZ2FinalBoss2_CircleLookup2:
  1359.         dc.b   0,  0,  1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7
  1360.         dc.b   8,  8,  9,  9,  9, $A, $A, $B, $B, $C, $C, $C, $D, $D, $D, $E
  1361.         dc.b  $E, $E, $F, $F, $F,$10,$10,$10,$11,$11,$11,$11,$12,$12,$12,$12
  1362.         dc.b $12,$13,$13,$13,$13,$13,$13,$14,$14,$14,$14,$14,$14,$14,$14,$14
  1363. ; ---------------------------------------------------------------------------
  1364.  
  1365.         include "Objects/Boss/Object Data/Map - Boss.asm"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement