Prev: 27382 Up: Map Next: 27660
27592: 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 27593 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 27592 JR Direction_Up Self-modified jump; offset written by caller routine.
Direction_Up 27594 JR Move_Up Jump to Move_Up (up).
Direction_UpRight 27596 JR Move_UpRight Jump to Move_UpRight (up-right).
Direction_Right 27598 JR Move_Right Jump to Move_Right (right).
Direction_DownRight 27600 JR Move_DownRight Jump to Move_DownRight (down-right).
Direction_Down 27602 JR Move_Down Jump to Move_Down (down).
Direction_DownLeft 27604 JR Move_DownLeft Jump to Move_DownLeft (down-left).
Direction_Left 27606 JR Move_Left Jump to Move_Left (left).
Direction_UpLeft 27608 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 27610 LD A,B B-=*HL (subtract speed from Y).
27611 SUB (HL)
27612 LD B,A
27613 JR Validate_Position Jump to Validate_Position.
Move_UpRight 27615 LD A,B B-=*HL (Y − speed).
27616 SUB (HL)
27617 LD B,A
27618 LD A,C C+=*HL (X + speed).
27619 ADD A,(HL)
27620 LD C,A
27621 JR Validate_Position Jump to Validate_Position.
Move_Right 27623 LD A,C C+=*HL (X + speed).
27624 ADD A,(HL)
27625 LD C,A
27626 JR Validate_Position Jump to Validate_Position.
Move_DownRight 27628 LD A,C C+=*HL (X + speed).
27629 ADD A,(HL)
27630 LD C,A
27631 LD A,B B+=*HL (Y + speed).
27632 ADD A,(HL)
27633 LD B,A
27634 JR Validate_Position Jump to Validate_Position.
Move_Down 27636 LD A,B B+=*HL (Y + speed).
27637 ADD A,(HL)
27638 LD B,A
27639 JR Validate_Position Jump to Validate_Position.
Move_DownLeft 27641 LD A,B B+=*HL (Y + speed).
27642 ADD A,(HL)
27643 LD B,A
27644 LD A,C C-=*HL (X − speed).
27645 SUB (HL)
27646 LD C,A
27647 JR Validate_Position Jump to Validate_Position.
Move_Left 27649 LD A,C C-=*HL (X − speed).
27650 SUB (HL)
27651 LD C,A
27652 JR Validate_Position Jump to Validate_Position.
Move_UpLeft 27654 LD A,B B-=*HL (Y − speed).
27655 SUB (HL)
27656 LD B,A
27657 LD A,C C-=*HL (X − speed).
27658 SUB (HL)
27659 LD C,A
Continue on to Validate_Position.
Prev: 27382 Up: Map Next: 27660