![]() |
Routines |
Prev: C30A | Up: Map | Next: C433 |
Used by the routine at C2E7.
|
||||
C3C1 | LD A,(IX+$00) | Computes new TRIANGLE x-position based on x-delta | ||
C3C4 | ADD A,(IX+$04) | |||
C3C7 | LD (IX+$00),A | |||
C3CA | LD A,(IX+$01) | Computes new TRIANGLE y-position based on y-delta | ||
C3CD | ADD A,(IX+$05) | |||
C3D0 | LD (IX+$01),A | |||
C3D3 | LD A,(IX+$09) | Enemy type $0F not exist. Never jump | ||
C3D6 | CP $0F | |||
C3D8 | JP Z,$C3EA | |||
C3DB | LD HL,($A1B4) | Set HL the address of the tile type buffer under enemy | ||
C3DE | LD DE,$0020 | Check if tile type buffer on enemy position is wall | ||
C3E1 | AND A | |||
C3E2 | SBC HL,DE | |||
C3E4 | CALL $CDF5 | |||
C3E7 | JP Z,$9807 | Jump to destroy enemy is tile is wall | ||
C3EA | DEC (IX+$11) | Decrement state change counter | ||
C3ED | RET NZ | Return if not zero | ||
C3EE | LD A,R | Generate a random number between 2 and 5 | ||
C3F0 | AND $03 | |||
C3F2 | ADD A,$02 | |||
C3F4 | LD (IX+$11),A | Set this number to state change counter | ||
C3F7 | LD A,(IX+$09) | Enemy type $0F not exist. Never jump | ||
C3FA | CP $0F | |||
C3FC | JP Z,$C409 | |||
C3FF | LD A,(IX+$12) | Change movement state | ||
C402 | XOR $01 | |||
C404 | LD (IX+$12),A | |||
C407 | OR A | Return if no movement change state | ||
C408 | RET Z | |||
C409 | LD A,R | Set A a random number between 8 and 15 | ||
C40B | AND $07 | |||
C40D | ADD A,$08 | |||
C40F | LD (IX+$11),A | Reset state change counter with this number | ||
Set x/y-delta
|
||||
C412 | LD (IX+$04),$01 | Set x-delta to 1 | ||
C416 | LD A,($A24F) | if x-position of Rex is less than x-position of TRIANGLE then set x-delta to -1 | ||
C419 | CP (IX+$00) | |||
C41C | JP NC,$C423 | |||
C41F | LD (IX+$04),$FF | |||
C423 | LD (IX+$05),$01 | Set y-delta to 1 | ||
C427 | LD A,($A250) | if y-position of Rex is less than y-position of TRIANGLE then set y-delta to -1 | ||
C42A | CP (IX+$01) | |||
C42D | RET NC | |||
C42E | LD (IX+$05),$FF | |||
C432 | RET |
Prev: C30A | Up: Map | Next: C433 |