Prev: C30A Up: Map Next: C433
C3C1: Handle TRIANGLE
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