Prev: C978 Up: Map Next: CB03
C9CA: Creates a new mobile enemy on room
Used by the routines at 947A and A915.
C9CA LD A,($A045) Return if generating train in current room
C9CD OR A
C9CE RET NZ
C9CF LD A,($A043) Decrement enemy room enter counter
C9D2 DEC A
C9D3 LD ($A043),A
C9D6 OR A Return if coutner has not reached zero
C9D7 RET NZ
C9D8 LD A,($A044) Reset counter with the original value
C9DB LD ($A043),A
C9DE LD HL,$5E72 Set HL to the base address for enemy status into the enemy configuration table
C9E1 LD A,($A092) Set B to the max number of enemies for the room
C9E4 LD B,A
C9E5 LD A,(HL) Check enemy status
C9E6 OR A Jump forward if enemy dead/not visible
C9E7 JP Z,$C9F1
C9EA LD DE,$0018 Point to the next enemy configuration
C9ED ADD HL,DE
C9EE DJNZ $C9E5 Jump back until all the enemies slots checked
C9F0 RET
try to create a new enemy
C9F1 LD DE,$000C Point HL to the base address for the current slot of enemy configuration
C9F4 AND A
C9F5 SBC HL,DE
C9F7 PUSH HL Set IX to this base address
C9F8 POP IX
C9FA CALL $A375 Set A a pseudo random number
C9FD CP $55 is A less than 85?
C9FF JP C,$CA0F Jump to handle enemy enters from the left
CA02 CP $AA is A less than 170?
CA04 JP C,$CA0B Jump to handle enemy enters from the right
CA07 CALL $CAA7 Handle enemy enters from the top
CA0A RET
CA0B CALL $CA71 Handle enemy enters from the right
CA0E RET
CA0F CALL $CA13 Handle enemy enters from the left
CA12 RET
Handle enemy enters from the left
CA13 LD A,($A02C) Return if no enemies enters from the left
CA16 OR A
CA17 RET Z
CA18 LD A,($A0B6) Return if x-position of Rex less than 48
CA1B CP $30
CA1D RET C
CA1E LD A,$00 Set x-pixel-position of enemy
CA20 LD ($A0AF),A
CA23 CALL $A375 Set A a pseudo random number
CA26 CP $20 Jump back until number generated is between 32 and 168
CA28 JP C,$CA23
CA2B CP $A8
CA2D JP NC,$CA23
CA30 AND $F8 Change number to be grid 8x8 fixed
CA32 LD ($A0B0),A Set this number to the y-pixel-position for the enemy
CA35 CALL $CB03 Check if enemy can be generated
CA38 OR A Jump back if enemy cannot be generated
CA39 JP Z,$CA23
CA3C LD A,$0F Set x-pixel-position of enemy to 15
CA3E LD ($A0AF),A
CA41 CALL $CA49 Configure new enemy
CA44 LD (IX+$02),$00 Set enemy to face right
CA48 RET
Configure new enemy. Used by the routines at CA13, CA71 and CAA7.
CA49 LD A,($A088) Set A and L the type of enemy to generate
CA4C LD L,A
CA4D BIT 7,A Jump forward if generate random FOOT MAN bit is not set
CA4F JP Z,$CA60
try to generate random FOOT MAN
CA52 AND $7F Set L the type of enemy to generate
CA54 LD L,A
CA55 CALL $A388 Set A a pseudo random number between 0 an 1
CA58 AND $01
CA5A OR A if random number is 1 then generate FOOT MAN
CA5B JP Z,$CA60
CA5E LD L,$00 Generate FOOT MAN
CA60 LD A,L Set A the new enemy type to create
CA61 CALL $CB8B Configure the new enemy
CA64 LD A,($A0AF) Set x-pixel-position for enemy
CA67 LD (IX+$00),A
CA6A LD A,($A0B0) Set y-pixel-position for enemy
CA6D LD (IX+$01),A
CA70 RET
Handle enemy enters from the right
CA71 LD A,($A02D) Return if enemies doesn't enters from the right
CA74 OR A
CA75 RET Z
CA76 LD A,($A0B6) Return if x-position of Rex greater than 200
CA79 CP $C8
CA7B RET NC
CA7C LD A,$E0 Set x-position of enemy at A0AF
CA7E LD ($A0AF),A
CA81 CALL $A375 Set A a pseudo random number
CA84 CP $20 Jump back until number generated is between 32 and 168
CA86 JP C,$CA81
CA89 CP $A8
CA8B JP NC,$CA81
CA8E AND $F8 Change number to be grid 8x8 fixed
CA90 LD ($A0B0),A Set this number to the y-pixel-position for the enemy
CA93 CALL $CB03 Check if enemy can be generated
CA96 OR A Jump back if enemy cannot be generated
CA97 JP Z,$CA81
CA9A LD A,$E8 Set x-position of enemy at A0AF
CA9C LD ($A0AF),A
CA9F CALL $CA49 Configure the new enemy
CAA2 LD (IX+$02),$01 Set enemy to face left
CAA6 RET
Handle enemy enters from the top
CAA7 LD A,($A02E) Return if enemies doesn't enters from the top
CAAA OR A
CAAB RET Z
CAAC LD A,($A0B7) Return if y-position of Rex is less than 56
CAAF CP $38
CAB1 RET C
CAB2 LD A,$18 Set y-position of enemy
CAB4 LD ($A0B0),A
CAB7 CALL $A375 Set A a pseudo random number
CABA CP $20 Jump back until number generated is between 32 and 224
CABC JP C,$CAB7
CABF CP $E0
CAC1 JP NC,$CAB7
CAC4 AND $F8 Change number to be grid 8x8 fixed
CAC6 LD ($A0AF),A Set this number to the x-pixel-position for the enemy
CAC9 CALL $A503 Computes into HL the address into tile type buffer for the enemy position
CACC LD A,(HL) Set A to the tile type
CACD OR A Jump back and computes another position if tile type is not background
CACE JP NZ,$CAB7
CAD1 INC HL Increase address into tile type buffer
CAD2 LD A,(HL) Set A to the tile type
CAD3 OR A Jump back and computes another position if tile type is not background
CAD4 JP NZ,$CAB7
CAD7 INC HL Increase address into tile type buffer
CAD8 LD A,(HL) Set A to the tile type
CAD9 OR A Jump back and computes another position if tile type is not background
CADA JP NZ,$CAB7
CADD LD DE,$001E Point HL to the next row
CAE0 ADD HL,DE
CAE1 LD A,(HL) Set A to the tile type
CAE2 OR A Jump back and computes another position if tile type is not background
CAE3 JP NZ,$CAB7
CAE6 INC HL Increase address into tile type buffer
CAE7 LD A,(HL) Set A to the tile type
CAE8 OR A Jump back and computes another position if tile type is not background
CAE9 JP NZ,$CAB7
CAEC LD A,($A0AF) Set the new x-position for enemy
CAEF ADD A,$10
CAF1 LD ($A0AF),A
CAF4 XOR A Set y-position to 0
CAF5 LD ($A0B0),A
CAF8 CALL $CA49 Configure the enemy
CAFB LD A,R Set random facing direction for enemy
CAFD AND $FF
CAFF LD (IX+$02),A
CB02 RET
Prev: C978 Up: Map Next: CB03