Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Sonic_Homing:
- btst #7,$21(a0)
- beq.w return_homing
- move.w #$90-1,d1 ; run the first $90 objects in levels
- lea (Object_RAM).w,a1 ; a1=object
- movea #0,a2
- HomeObject:
- move.b (a1),d0 ; get the object's ID
- beq.s HomeNextObject ; if it's obj00, skip it
- cmpi.b #$26,d0
- beq.s +
- move.b collision_property(a1),d0
- cmpi.b #$40,d0
- bcc.s HomeNextObject
- + move.w y_pos(a1),d3
- cmp.w y_pos(a0),d3
- blt.s HomeNextObject ;if the object is above Sonic, don't home in on it
- cmpi.w #1,(Hold_Dir).w
- bne.s +
- move.w x_pos(a1),d3
- cmp.w x_pos(a0),d3
- blt.s HomeNextObject
- + cmpi.w #-1,(Hold_Dir).w
- bne.s +
- move.w x_pos(a1),d3
- cmp.w x_pos(a0),d3
- bgt.s HomeNextObject
- + move.w x_pos(a1),d3
- sub.w x_pos(a0),d3
- move.w y_pos(a1),d4
- sub.w Y_pos(a0),d4
- add.w d4,d3
- cmpi.w #$4000,d3 ;maximum distance
- bge.s HomeNextObject
- cmpi.l #0,a2
- beq.s +
- cmp.w d2,d3
- bge.s HomeNextObject
- + lea (a1),a2
- move.w d3,d2
- HomeNextObject:
- lea next_object(a1),a1 ; load 0bj address
- dbf d1,HomeObject
- cmpi.l #0,a2
- beq.s HomeNoLock
- bra.s return_homing
- HomeNoLock:
- bclr #7,$21(a0)
- bset #6,$21(a0)
- move.w #$600,x_vel(a0)
- btst #0,status(a0)
- beq.s +
- neg.w x_vel(a0)
- + move.w #-$340,d0
- tst.b (Super_Sonic_flag).w
- beq.s +
- move.w #-$400,d0 ; set higher jump speed if super
- +
- btst #6,status(a0) ; Test if underwater
- beq.s +
- move.w #-$1C0,d0 ; set lower jump speed if under
- + move.w d0,y_vel(a0)
- return_homing:
- rts
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement