![]() |
Routines |
| Prev: C918 | Up: Map | Next: CA49 |
|
This moves a character on the X axis.
Used by the routine at character_behaviour.
|
||||||||||||||||||
| vischar_move_x | CA11 | LD A,(HL) | Read vischar.target.x (target position) | |||||||||||||||
| CA12 | CALL multiply_by_8 | Multiply it by 1, 4 or 8 (self modified by cb_self_modify) | ||||||||||||||||
| CA15 | LD A,L | Point HL at vischar.mi.pos.x (current position) | ||||||||||||||||
| CA16 | ADD A,$0B | |||||||||||||||||
| CA18 | LD L,A | |||||||||||||||||
| CA19 | LD E,(HL) | Read vischar.mi.pos.x | ||||||||||||||||
| CA1A | INC L | |||||||||||||||||
| CA1B | LD D,(HL) | |||||||||||||||||
| CA1C | EX DE,HL | Free up HL | ||||||||||||||||
| CA1D | SBC HL,BC | Compute the delta: current position - target position | ||||||||||||||||
| CA1F | JR Z,vmx_equal | Jump if it's zero | ||||||||||||||||
| CA21 | JP M,vmx_negative | Jump if it's negative | ||||||||||||||||
|
The delta was positive
|
||||||||||||||||||
| vmx_positive | CA24 | LD A,H | Delta >= 256? | |||||||||||||||
| CA25 | AND A | |||||||||||||||||
| CA26 | JR NZ,vmx_delta_too_big | Jump if so | ||||||||||||||||
| CA28 | LD A,L | Delta < 3? | ||||||||||||||||
| CA29 | CP $03 | |||||||||||||||||
| CA2B | JR C,vmx_equal | Jump if it's in range | ||||||||||||||||
|
The delta was three or greater
|
||||||||||||||||||
| vmx_delta_too_big | CA2D | LD A,$08 | Return input_RIGHT + input_DOWN (6 + 2) | |||||||||||||||
| CA2F | RET | |||||||||||||||||
|
The delta was negative
|
||||||||||||||||||
| vmx_negative | CA30 | LD A,H | Delta < -256? | |||||||||||||||
| CA31 | CP $FF | |||||||||||||||||
| CA33 | JR NZ,vmx_delta_too_small | Jump if so | ||||||||||||||||
| CA35 | LD A,L | Delta >= -2? | ||||||||||||||||
| CA36 | CP $FE | |||||||||||||||||
| CA38 | JP NC,vmx_equal | Jump if it's in range | ||||||||||||||||
|
The delta was less than negative three
|
||||||||||||||||||
| vmx_delta_too_small | CA3B | LD A,$04 | Return input_LEFT + input_UP (3 + 1) | |||||||||||||||
| CA3D | RET | |||||||||||||||||
|
The delta was -2..2
|
||||||||||||||||||
| vmx_equal | CA3E | EX DE,HL | Move vischar back into HL | |||||||||||||||
| CA3F | LD A,L | Point HL at vischar->mi.pos.x | ||||||||||||||||
| CA40 | SUB $0B | |||||||||||||||||
| CA42 | LD L,A | |||||||||||||||||
| CA43 | SET 5,(IY+$07) | Set vischar.counter_and_flags flag vischar_BYTE7_Y_DOMINANT so that next time we'll use vischar_move_y in preference | ||||||||||||||||
| CA47 | XOR A | Return input_NONE (0) | ||||||||||||||||
| CA48 | RET | |||||||||||||||||
| Prev: C918 | Up: Map | Next: CA49 |