Prev: 69D4 Up: Map Next: 6A46
6A05: Change Actor Speeds
Used by the routines at HandleTackWasherBolt and HandleChocolate.
Changes the speeds of the actor by one towards the direction in byte 06 of the actor (bit 0 is set for down, and bit 1 is set for right), but only every other frame. The speeds are limited to 02 in either direction. The actor is then moved by MoveBouncingActor.
Input
IX Actor
ChangeActorSpeeds 6A05 BIT 0,(IX+$07) Jump to ChangeActorSpeeds_Move if bit 0 of the frame counter is set.
6A09 JR NZ,ChangeActorSpeeds_Move
6A0B BIT 0,(IX+$06) Jump to ChangeActorSpeeds_Up if the actor is not moving down.
6A0F JR Z,ChangeActorSpeeds_Up
6A11 LD A,(IX+$05) Fetch the vertical speed.
6A14 CP $02 Jump to ChangeActorSpeeds_Horizontal if it is already at the limit.
6A16 JR Z,ChangeActorSpeeds_Horizontal
6A18 INC (IX+$05) Increase the vertical speed by one.
ChangeActorSpeeds_Horizontal 6A1B BIT 1,(IX+$06) Jump to ChangeActorSpeeds_Left if the actor is not moving right.
6A1F JR Z,ChangeActorSpeeds_Left
6A21 LD A,(IX+$04) Fetch the horizontal speed.
6A24 CP $02 Jump to ChangeActorSpeeds_Move if it is already at the limit.
6A26 JR Z,ChangeActorSpeeds_Move
6A28 INC (IX+$04) Increase the horizontal speed by one.
This entry point is used by the routine at HandleChocolate.
ChangeActorSpeeds_Move 6A2B JP MoveBouncingActor Move the actor using MoveBouncingActor.
ChangeActorSpeeds_Up 6A2E LD A,(IX+$05) Fetch the vertical speed.
6A31 CP $FE Jump to ChangeActorSpeeds_Horizontal if it is already at the limit.
6A33 JR Z,ChangeActorSpeeds_Horizontal
6A35 DEC (IX+$05) Decrease the vertical speed by one.
6A38 JR ChangeActorSpeeds_Horizontal Jump to ChangeActorSpeeds_Horizontal.
ChangeActorSpeeds_Left 6A3A LD A,(IX+$04) Fetch the horizontal speed.
6A3D CP $FE Jump to ChangeActorSpeeds_Move if it is already at the limit.
6A3F JR Z,ChangeActorSpeeds_Move
6A41 DEC (IX+$04) Decrease the horizontal speed by one.
6A44 JR ChangeActorSpeeds_Move Jump to ChangeActorSpeeds_Move.
Prev: 69D4 Up: Map Next: 6A46