Advertisement
Guest User

Untitled

a guest
Jul 4th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Sonic_Homing:
  2.     btst    #7,$21(a0)
  3.     beq.w   return_homing
  4.     move.w  #$90-1,d1   ; run the first $90 objects in levels
  5.     lea (Object_RAM).w,a1 ; a1=object
  6.     movea   #0,a2
  7. HomeObject:
  8.     move.b  (a1),d0 ; get the object's ID
  9.     beq.s   HomeNextObject ; if it's obj00, skip it
  10.     cmpi.b  #$26,d0
  11.     beq.s   +
  12.     move.b  collision_property(a1),d0
  13.     cmpi.b  #$40,d0
  14.     bcc.s   HomeNextObject
  15. +   move.w  y_pos(a1),d3
  16.     cmp.w   y_pos(a0),d3
  17.     blt.s   HomeNextObject ;if the object is above Sonic, don't home in on it
  18.     cmpi.w  #1,(Hold_Dir).w
  19.     bne.s   +
  20.     move.w  x_pos(a1),d3
  21.     cmp.w   x_pos(a0),d3
  22.     blt.s   HomeNextObject
  23. +   cmpi.w  #-1,(Hold_Dir).w
  24.     bne.s   +
  25.     move.w  x_pos(a1),d3
  26.     cmp.w   x_pos(a0),d3
  27.     bgt.s   HomeNextObject
  28. +   move.w  x_pos(a1),d3
  29.     sub.w   x_pos(a0),d3
  30.     move.w  y_pos(a1),d4
  31.     sub.w   Y_pos(a0),d4
  32.     add.w   d4,d3
  33.     cmpi.w  #$4000,d3 ;maximum distance
  34.     bge.s   HomeNextObject
  35.     cmpi.l  #0,a2
  36.     beq.s   +
  37.     cmp.w   d2,d3
  38.     bge.s   HomeNextObject
  39. +   lea (a1),a2
  40.     move.w  d3,d2
  41. HomeNextObject:
  42.     lea next_object(a1),a1 ; load 0bj address
  43.     dbf d1,HomeObject
  44.     cmpi.l  #0,a2
  45.     beq.s   HomeNoLock
  46.     bra.s   return_homing
  47. HomeNoLock:
  48.     bclr    #7,$21(a0)
  49.     bset    #6,$21(a0)
  50.     move.w  #$600,x_vel(a0)
  51.     btst    #0,status(a0)
  52.     beq.s   +
  53.     neg.w   x_vel(a0)
  54. +   move.w  #-$340,d0
  55.     tst.b   (Super_Sonic_flag).w
  56.     beq.s   +
  57.     move.w  #-$400,d0   ; set higher jump speed if super
  58. +
  59.     btst    #6,status(a0)   ; Test if underwater
  60.     beq.s   +
  61.     move.w  #-$1C0,d0   ; set lower jump speed if under
  62. +   move.w  d0,y_vel(a0)
  63. return_homing:
  64.     rts
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement