Guest User

Untitled

a guest
Jan 4th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; ---------------------------------------------------------------------------
  2. ; Subroutine Sonic_HomingAttack
  3. ; ---------------------------------------------------------------------------
  4.  
  5. ; ||||||||||||||| S U B   R O U T   I N E |||||||||||||||||||||||||||||||||||||||
  6.  
  7. Sonic_HomingAttack:
  8.         btst    #2,$22(a0)      ; Соник совершил прыжок?
  9.         beq.w   Sonic_HA_Rts        ; перейти, если нет
  10.         tpress  B+C,(SonicControl|Held) ; нажата кнопка B/C?
  11.         beq.w   Sonic_HA_Rts        ; перейти, если нет
  12.         lea ($FFFFD7C0).w,a1    ; начало данных объектов
  13.  
  14. Sonic_HA_ChkList:
  15.         lea $40(a1),a1      ; перейти к следующему объекту
  16.         cmpa.l  #$FFFFF000,a1       ; мы проверели все объекты?
  17.         beq.s   Sonic_HA_Rts        ; перейти, если да
  18.         cmpi.b  #$26,(a1)       ; это монитор?
  19.         beq.s   Sonic_HA_ChkDistanseY   ; если да, проверить растояние между Соником и определённым объектом
  20.         bra.s   Sonic_HA_ChkList    ; если нет, проверять следующий объект
  21. ; ===========================================================================
  22.  
  23. ToPlus:
  24.         tst.w   d0
  25.         bpl.s   @NoNegd0
  26.         neg.w   d0
  27. @NoNegd0    tst.w   d1
  28.         bpl.s   @NoNegd1
  29.         neg.w   d1
  30. @NoNegd1    rts
  31. ; ===========================================================================
  32.  
  33. Sonic_HA_ChkDistanseY:
  34.         move.w  8(a1),d0    ; переместить X-координату объекта          $200
  35.         move.w  $C(a1),d1   ; переместить Y-координату объекта          $200
  36.         sub.w   8(a0),d0    ; вычесть X-координату объекта на X-координату Соника $215-$200=$15
  37.         sub.w   $C(a0),d1   ; вычесть Y-координату объекта на Y-координату Соника $220-$200=$20
  38.         bsr.s   ToPlus
  39.         move.b  #$FF,d2
  40.         cmp.w   d2,d1           ; Соник зашёл в границу обьекта по вертикали снизу?  $FF<$20?
  41.         bmi.s   Sonic_HA_ChkDistanseX   ; перейти, если да                                   нет
  42.         rts
  43. ; ===========================================================================
  44. Sonic_HA_ChkDistanseX:
  45.         cmp.w   d2,d0           ; Соник зашёл в границу обьекта по горизонтали справа? $FF<$15?
  46.         bmi.s   Sonic_HA_ObjDetected    ; перейти, если да                                     нет
  47.         rts
  48. ; ===========================================================================
  49.  
  50. Sonic_HA_ObjDetected:
  51.         jmp *
  52.  
  53. Sonic_HA_Rts:
  54.         rts
  55. ; End of subroutine Sonic_HomingAttack
Add Comment
Please, Sign In to add comment