Prev: 8A76 Up: Map Next: 8AE6
8AC0: Move towards x
Input
IX Sprite data
A Polar x to move towards
move_towards_x 8AC0 LD B,$01 Direction = 1
8AC2 SUB (IX+$02) Distance = desired x - x
8AC5 RET Z Return if same
8AC6 JR NC,move_towards_x_0 Jump if distance > 0
8AC8 LD B,$FF Direction = -1
8ACA NEG abs(distance)
move_towards_x_0 8ACC CP $21 Is it longer than half way around?
8ACE LD A,B A = direction
8ACF JR C,move_towards_x_1 Jump if not
8AD1 NEG Else switch direction
move_towards_x_1 8AD3 LD B,A B = direction
8AD4 ADD A,(IX+$02) Direction + x
8AD7 AND $3F Mod 64
8AD9 LD (IX+$02),A Save new x
8ADC LD A,$10 $10
8ADE ADD A,B $10 + direction, i.e. $0F or $11
8ADF LD (IX+$00),A Change sprite type
8AE2 INC (IX+$05) Mark for pattern reload
8AE5 RET
Prev: 8A76 Up: Map Next: 8AE6