![]() |
Routines |
Prev: CF59 | Up: Map | Next: D244 |
Used by the routine at BC48.
|
||||
CFB5 | LD A,($A1EE) | Return if Rex is dead | ||
CFB8 | OR A | |||
CFB9 | RET NZ | |||
Configure opcodes for collision box according to enemy type
|
||||
CFBA | LD A,$1E | Configure opcode ADD A at $D00E to add $1E (y-position height range) | ||
CFBC | LD ($D00F),A | |||
CFBF | LD A,$16 | Configure opcode ADD A at $D01E to add $1E (x-position width range) | ||
CFC1 | LD ($D01F),A | |||
CFC4 | LD A,$10 | Configure opcode ADD A at $D0A7 and $D0B8 to add $10 | ||
CFC6 | LD ($D0A8),A | |||
CFC9 | LD ($D0B9),A | |||
CFCC | LD A,$10 | Configure opcode SUB at $D019 to substract $10 (x-position width range) | ||
CFCE | LD ($D01A),A | |||
CFD1 | LD A,(IX+$02) | Jump forward if enemy moving left | ||
CFD4 | OR A | |||
CFD5 | JP Z,$CFDD | |||
CFD8 | LD A,$08 | Enemy moving right, configure opcode SUB at $D019 to substract $08 (x-position width range) | ||
CFDA | LD ($D01A),A | |||
CFDD | LD A,(IX+$09) | Check enemy type | ||
CFE0 | AND $7F | |||
CFE2 | CP $0E | is TRIANGLE? | ||
CFE4 | JP Z,$CFEA | Jump to reconfigure opcodes | ||
CFE7 | JP $CFFC | Jump forward and check for collision | ||
reconfigure opcodes for TRIANGLE
|
||||
CFEA | LD A,$16 | Configure opcode ADD A at $D00E to add $16 (y-position height range) | ||
CFEC | LD ($D00F),A | |||
CFEF | LD A,$0E | Configure opcode ADD A at $D01E to add $0E (x-position width range) | ||
CFF1 | LD ($D01F),A | |||
CFF4 | LD A,$08 | Configure opcode ADD A at $D0A7 and $D0B8 to add $08 | ||
CFF6 | LD ($D0A8),A | |||
CFF9 | LD ($D0B9),A | |||
CFFC | LD A,($A1F9) | Jump forward if Rex is teleporting | ||
CFFF | OR A | |||
D000 | JP NZ,$D07E | |||
check collision with Rex
|
||||
D003 | LD HL,$A250 | Set HL the y-position of Rex | ||
D006 | LD A,(IX+$01) | Check if y-position of enemy is in the range of collision with Rex and jump forward if not | ||
D009 | SUB $10 | |||
D00B | CP (HL) | |||
D00C | JR NC,$D07E | |||
D00E | ADD A,$1E | |||
D010 | CP (HL) | |||
D011 | JR C,$D07E | |||
D013 | LD HL,$A24F | Set HL the x-position of Rex | ||
D016 | LD A,(IX+$00) | Check if x-position of enemy is in the range of collision with Rex | ||
D019 | SUB $10 | |||
D01B | CP (HL) | |||
D01C | JR NC,$D07E | |||
D01E | ADD A,$16 | |||
D020 | CP (HL) | |||
D021 | JR C,$D07E | |||
collision with Rex detected and shield activated
|
||||
D023 | LD A,($A1E2) | Jump forward if shield not activated | ||
D026 | OR A | |||
D027 | JP Z,$D04D | |||
D02A | LD A,(IX+$09) | Jump forward if entity is bubble, smartbomb or question | ||
D02D | CP $FE | |||
D02F | JP Z,$D04D | |||
D032 | CP $FD | |||
D034 | JP Z,$D04D | |||
D037 | CP $FC | |||
D039 | JP Z,$D04D | |||
D03C | CALL $9807 | Destroy enemy | ||
D03F | LD A,(IX+$14) | Computes shield loss into L shield loss = enemy health * 4 | ||
D042 | SLA A | |||
D044 | SLA A | |||
D046 | LD L,A | |||
D047 | CALL $98EC | Handle shield loss | ||
D04A | JP $D069 | Jump forward | ||
collision with Rex detected and shield not activated
|
||||
D04D | LD A,(IX+$18) | Jump forward if enemy is teleporting | ||
D050 | OR A | |||
D051 | JP NZ,$D07E | |||
D054 | LD A,(IX+$09) | Jump forward if entity is bubble, smartbomb or question | ||
D057 | CP $FE | |||
D059 | JP Z,$D069 | |||
D05C | CP $FD | |||
D05E | JP Z,$D069 | |||
D061 | CP $FC | |||
D063 | JP Z,$D069 | |||
D066 | CALL $9CC5 | Handle Rex dead | ||
Rex takes bubble, smartbombs or question
|
||||
D069 | LD A,(IX+$09) | check enemy? | ||
D06C | CP $FE | is bubble? | ||
D06E | CALL Z,$D204 | Jump to handles Rex takes bubble | ||
D071 | CP $FD | is smartbomb? | ||
D073 | CALL Z,$D22C | Jump to handle Rex takes smartbomb | ||
D076 | LD A,(IX+$09) | |||
D079 | CP $FC | is question? | ||
D07B | CALL Z,$D24E | Jump to handle question | ||
No collision with Rex - Check collision with Rex projectiles
|
||||
D07E | LD A,(IX+$09) | Return if enemy is DROP | ||
D081 | CP $82 | |||
D083 | RET Z | |||
D084 | CP $84 | Jump forward if enemy is not PINE | ||
D086 | JP NZ,$D08E | |||
D089 | LD A,(IX+$12) | Return if PINE animation state is stand-by | ||
D08C | OR A | |||
D08D | RET Z | |||
D08E | LD IY,$5B60 | Set IY to the base address for Rex projectiles configuration | ||
D092 | LD B,$1E | Set B to the number of projectiles to check | ||
D094 | LD A,(IY+$06) | Set A to the projectile status | ||
D097 | CP $01 | is flying? | ||
D099 | JP NZ,$D13F | Jump to check another projectile if not flying | ||
D09C | LD A,(IX+$01) | Jump to check another projectile if y-position of projectile is not in range of collision with the enemy y-position | ||
D09F | ADD A,$05 | |||
D0A1 | CP (IY+$01) | |||
D0A4 | JP NC,$D13F | |||
D0A7 | ADD A,$10 | |||
D0A9 | CP (IY+$01) | |||
D0AC | JP C,$D13F | |||
D0AF | LD A,(IX+$00) | Jump to check another projectile if x-position of projectile is not in range collision with then enemy x-position | ||
D0B2 | CP (IY+$00) | |||
D0B5 | JP NC,$D13F | |||
D0B8 | ADD A,$10 | |||
D0BA | CP (IY+$00) | |||
D0BD | JP C,$D13F | |||
handle projectile collision with entity
|
||||
D0C0 | LD A,(IX+$09) | Check for entity type | ||
D0C3 | CP $FE | Jump to check another projectile if entity is bubble | ||
D0C5 | JP Z,$D13F | |||
D0C8 | CP $FD | Jump to check another projectile if entity is smartbomb | ||
D0CA | JP Z,$D13F | |||
D0CD | CP $FC | Jump to handle another projectile if entity is question | ||
D0CF | JP Z,$D13F | |||
D0D2 | LD A,($A1AC) | Jump forward if weapon type is laser | ||
D0D5 | CP $02 | |||
D0D7 | JP NZ,$D0E1 | |||
D0DA | LD (IY+$06),$00 | Destroy laser projectile | ||
D0DE | JP $D0F3 | Jump forward | ||
non laser impact
|
||||
D0E1 | LD (IY+$06),$02 | Set projectile status to impact #1 | ||
D0E5 | LD A,($D5DA) | Check channel 3 | ||
D0E8 | CP $FF | Jump forward if channel in use | ||
D0EA | JP NZ,$D0F3 | |||
D0ED | LD DE,$D51F | Set DE to base address for projectile impact sound | ||
D0F0 | CALL $D37F | Configure sound channel and mixer register | ||
handle enemy behaviour on projectile impact
|
||||
D0F3 | LD A,(IX+$09) | Check enemy type | ||
D0F6 | CP $06 | Handle collision if enemy type FOOT MAN DYING 6 | ||
D0F8 | CALL Z,$D1B7 | |||
D0FB | LD A,(IX+$09) | Check enemy type | ||
D0FE | CP $06 | Jump to handle next projectile if enemy type is FOOT MAN DYING 6 | ||
D100 | JP Z,$D13F | |||
D103 | LD A,(IX+$14) | Jump forward to handle next projectile if enemy health is zero | ||
D106 | OR A | |||
D107 | JP Z,$D13F | |||
D10A | DEC A | Decrement enemy health | ||
D10B | LD (IX+$14),A | |||
D10E | CP $01 | Jump forward if enemy health <> 1 | ||
D110 | JP NZ,$D149 | |||
enemy health is equal to 1
|
||||
D113 | LD A,(IX+$09) | Jump forward and destroy enemy if enemy type is not FOOT MAN | ||
D116 | AND $7F | |||
D118 | OR A | |||
D119 | JP NZ,$D13C | |||
D11C | LD A,(IX+$02) | Jump forward to check projectile direction if FOOT MAN is facing left | ||
D11F | OR A | |||
D120 | JP NZ,$D12E | |||
D123 | LD A,(IY+$04) | check projectile direction | ||
D126 | BIT 7,A | |||
D128 | JP NZ,$D136 | Jump forward and FOOT MAN dying #6 animation | ||
D12B | JP $D13C | Jump to destroy enemy | ||
D12E | LD A,(IY+$04) | check projectile direction | ||
D131 | BIT 7,A | |||
D133 | JP NZ,$D13C | Jump to destroy enemy if projectile is facing left | ||
D136 | CALL $D15A | Handle FOOT MAN dying #6 | ||
D139 | JP $D13F | Jump to handle next projectile | ||
D13C | CALL $9807 | Destroy enemy | ||
check for the next projectile if any
|
||||
D13F | LD DE,$000F | Set IY point to the next projectile configuration | ||
D142 | ADD IY,DE | |||
D144 | DEC B | Decrement projectile counter | ||
D145 | JP NZ,$D094 | Jump back and handle next projectil until there are projectiles | ||
D148 | RET | |||
Enemy health is <> 1
|
||||
D149 | LD A,(IX+$09) | Jump and handle next projectile. Enemy type $08 doesn't exist | ||
D14C | AND $7F | |||
D14E | CP $08 | |||
D150 | JP NZ,$D13F | |||
D153 | LD (IX+$10),$04 | Code not executed | ||
D157 | JP $D13F | |||
Handle FOOT MAN dying #6
|
||||
D15A | LD A,($A1AC) | Check weapon type | ||
D15D | CP $02 | Jump to destroy enemy if weapon type is laser | ||
D15F | JP Z,$9807 | |||
D162 | CP $04 | Configure FOOT MAN jumping if weapon type is spray | ||
D164 | CALL Z,$C673 | |||
D167 | LD A,(IX+$02) | Change direction | ||
D16A | XOR $01 | |||
D16C | LD (IX+$02),A | |||
D16F | LD A,$04 | Set speed | ||
D171 | LD (IX+$10),A | |||
D174 | LD HL,$AF7A | Set address of table offsets for FOOT MAN dying animation | ||
D177 | LD (IX+$0A),L | |||
D17A | LD (IX+$0B),H | |||
D17D | LD HL,$8258 | Set address for graphic data of FOOT MAN dying | ||
D180 | LD (IX+$16),L | |||
D183 | LD (IX+$17),H | |||
D186 | LD (IX+$09),$06 | Set enemy type | ||
D18A | LD (IX+$11),$06 | Set counter for state change | ||
D18E | LD (IX+$14),$02 | Set health | ||
D192 | LD (IX+$0E),$03 | Set sprite width | ||
D196 | LD A,($A1AC) | Return if weapon type is spray or laser | ||
D199 | CP $04 | |||
D19B | RET Z | |||
D19C | CP $02 | |||
D19E | RET Z | |||
D19F | LD HL,$5843 | Set base address to attribute file for score points | ||
D1A2 | LD ($A1D2),HL | |||
D1A5 | LD A,$09 | Init counter for score points | ||
D1A7 | LD ($A1D4),A | |||
D1AA | LD HL,$0002 | Set next score points | ||
D1AD | LD ($A1D5),HL | |||
D1B0 | LD DE,$0001 | Set actual score points | ||
D1B3 | CALL $9945 | Increment score | ||
D1B6 | RET | |||
handle projectile collision with FOOT MAN dying 6
|
||||
D1B7 | LD A,($A1AC) | Return if projectile type is spray | ||
D1BA | CP $04 | |||
D1BC | RET Z | |||
D1BD | LD A,$04 | Set enemy speed | ||
D1BF | LD (IX+$10),A | |||
D1C2 | LD HL,$AF7A | Set address pointer for offsets animation | ||
D1C5 | LD (IX+$0A),L | |||
D1C8 | LD (IX+$0B),H | |||
D1CB | LD HL,$8258 | Set address pointer of graphic data for FOOTMAN dying | ||
D1CE | LD (IX+$16),L | |||
D1D1 | LD (IX+$17),H | |||
D1D4 | LD (IX+$09),$06 | Set entity type | ||
D1D8 | LD (IX+$11),$06 | Set counter for state change | ||
D1DC | LD (IX+$14),$02 | Set enemy health | ||
D1E0 | LD A,($A1D4) | Decrement score points counter and return if zero | ||
D1E3 | DEC A | |||
D1E4 | RET Z | |||
D1E5 | LD ($A1D4),A | Set the new score point counter value | ||
D1E8 | LD DE,($A1D5) | Set DE bonus score points | ||
D1EC | CALL $9945 | Increment score | ||
D1EF | LD HL,($A1D5) | Increment bonus score points | ||
D1F2 | LD DE,$0001 | |||
D1F5 | ADD HL,DE | |||
D1F6 | LD ($A1D5),HL | |||
D1F9 | LD HL,($A1D2) | Increment base address into attribute file pointing to bonus points icon in HUD | ||
D1FC | LD DE,$0003 | |||
D1FF | ADD HL,DE | |||
D200 | LD ($A1D2),HL | |||
D203 | RET | |||
handle Rex takes bubble
|
||||
D204 | PUSH AF | Save AF | ||
D205 | LD DE,$D573 | Set DE sound buffer for catching small bubble | ||
D208 | CALL $D37F | Configure sound channel and mixer register | ||
D20B | LD (IX+$0C),$00 | Set bubble not visible | ||
D20F | LD A,$26 | Set A the quantity of energy to increase | ||
D211 | CALL $BA09 | Handle weapon energy increase | ||
D214 | XOR A | Active HDU flash | ||
D215 | LD ($A1DB),A | |||
D218 | LD A,(IX+$15) | Jump forward and return if bubble small | ||
D21B | OR A | |||
D21C | JP Z,$D22A | |||
D21F | LD A,$26 | Set A the quantity of energy to increase | ||
D221 | CALL $BA09 | Handle weapon energy increase | ||
D224 | LD DE,$D55E | Set DE sound buffer for catching big bubble | ||
D227 | CALL $D37F | Configure sound channel and mixer register | ||
D22A | POP AF | Restore AF | ||
D22B | RET | |||
handle Rex takes smartbomb
|
||||
D22C | LD (IX+$0C),$00 | Set smartbomb to not visible | ||
D230 | LD A,($A205) | Increase number of smartbombs | ||
D233 | INC A | |||
D234 | CP $04 | Return if number of smartbombs is qual to 4 | ||
D236 | RET Z | |||
D237 | LD ($A205),A | Set the new number of smartbombs | ||
D23A | CALL $A371 | Draw smartbombs | ||
D23D | LD DE,$D588 | Set DE to the address for the smartbomb take sound | ||
D240 | CALL $D37F | Configure sound channel and mixer register | ||
D243 | RET |
Prev: CF59 | Up: Map | Next: D244 |