Prev: 6AF6 Up: Map Next: 6C0C
6BC8: 8-Direction Movement Jump Table
Shared 8-direction movement jump table. Used by the red bird (UpdateRedBirdMovement), helicopter (Handler_Helicopter) and UFO (Handler_UFO). The entry point is self-modified at 6BC9 to jump to one of 8 directional movement handlers. Each handler adjusts B (Y) and/or C (X) by the speed value at *HL, then falls through to Validate_Position to validate the position.
Direction Index X Y
Up 0 - −speed
Up-right 1 +speed −speed
Right 2 +speed -
Down-right 3 +speed +speed
Down 4 - +speed
Down-left 5 −speed +speed
Left 6 −speed -
Up-left 7 −speed −speed
Direction_Jump_Table 6BC8 JR Direction_Up Self-modified jump; offset written by caller routine.
Direction_Up 6BCA JR Move_Up Jump to Move_Up (up).
Direction_UpRight 6BCC JR Move_UpRight Jump to Move_UpRight (up-right).
Direction_Right 6BCE JR Move_Right Jump to Move_Right (right).
Direction_DownRight 6BD0 JR Move_DownRight Jump to Move_DownRight (down-right).
Direction_Down 6BD2 JR Move_Down Jump to Move_Down (down).
Direction_DownLeft 6BD4 JR Move_DownLeft Jump to Move_DownLeft (down-left).
Direction_Left 6BD6 JR Move_Left Jump to Move_Left (left).
Direction_UpLeft 6BD8 JR Move_UpLeft Jump to Move_UpLeft (up-left).
Movement handlers. Each adjusts B and/or C by the speed value at *HL, then falls through to Validate_Position.
Move_Up 6BDA LD A,B B-=*HL (subtract speed from Y).
6BDB SUB (HL)
6BDC LD B,A
6BDD JR Validate_Position Jump to Validate_Position.
Move_UpRight 6BDF LD A,B B-=*HL (Y − speed).
6BE0 SUB (HL)
6BE1 LD B,A
6BE2 LD A,C C+=*HL (X + speed).
6BE3 ADD A,(HL)
6BE4 LD C,A
6BE5 JR Validate_Position Jump to Validate_Position.
Move_Right 6BE7 LD A,C C+=*HL (X + speed).
6BE8 ADD A,(HL)
6BE9 LD C,A
6BEA JR Validate_Position Jump to Validate_Position.
Move_DownRight 6BEC LD A,C C+=*HL (X + speed).
6BED ADD A,(HL)
6BEE LD C,A
6BEF LD A,B B+=*HL (Y + speed).
6BF0 ADD A,(HL)
6BF1 LD B,A
6BF2 JR Validate_Position Jump to Validate_Position.
Move_Down 6BF4 LD A,B B+=*HL (Y + speed).
6BF5 ADD A,(HL)
6BF6 LD B,A
6BF7 JR Validate_Position Jump to Validate_Position.
Move_DownLeft 6BF9 LD A,B B+=*HL (Y + speed).
6BFA ADD A,(HL)
6BFB LD B,A
6BFC LD A,C C-=*HL (X − speed).
6BFD SUB (HL)
6BFE LD C,A
6BFF JR Validate_Position Jump to Validate_Position.
Move_Left 6C01 LD A,C C-=*HL (X − speed).
6C02 SUB (HL)
6C03 LD C,A
6C04 JR Validate_Position Jump to Validate_Position.
Move_UpLeft 6C06 LD A,B B-=*HL (Y − speed).
6C07 SUB (HL)
6C08 LD B,A
6C09 LD A,C C-=*HL (X − speed).
6C0A SUB (HL)
6C0B LD C,A
Continue on to Validate_Position.
Prev: 6AF6 Up: Map Next: 6C0C