![]() |
Routines |
| Prev: D1B9 | Up: Map | Next: D4AC |
|
Used by the routine at BA5C.
|
||||
| D215 | LD A,($A055) | Return if Rex is dead | ||
| D218 | OR A | |||
| D219 | RET NZ | |||
|
Configure opcodes for collision box according to enemy type
|
||||
| D21A | LD A,$1E | Configure opcode ADD A at $D28D to add $1E (y-position height range) | ||
| D21C | LD ($D28E),A | |||
| D21F | LD A,$16 | Configure opcode ADD A at $D29D to add $1E (x-position width range) | ||
| D221 | LD ($D29E),A | |||
| D224 | LD A,$10 | Configure opcode ADD A at $D30F and $D320 to add $10 | ||
| D226 | LD ($D310),A | |||
| D229 | LD ($D321),A | |||
| D22C | LD A,$10 | Configure opcode SUB at $D298 to substract $10 (x-position width range) | ||
| D22E | LD ($D299),A | |||
| D231 | LD A,(IX+$02) | Jump forward if enemy moving left | ||
| D234 | OR A | |||
| D235 | JP Z,$D23D | |||
| D238 | LD A,$08 | Enemy moving right, configure opcode SUB at $D298 to substract $08 (x-position width range) | ||
| D23A | LD ($D299),A | |||
| D23D | LD A,(IX+$09) | Check enemy type | ||
| D240 | AND $7F | |||
| D242 | CP $10 | is BOSS? | ||
| D244 | JP Z,$D254 | Jump to reconfigure opcodes | ||
| D247 | CP $0E | is a MINE? | ||
| D249 | JP Z,$D269 | Jump to reconfigure opcodes | ||
| D24C | CP $0F | is a BLOB? | ||
| D24E | JP Z,$D269 | Jump to reconfigure opcodes | ||
| D251 | JP $D27B | Jump forward and check for collision | ||
|
Configure opcodes for BOSS
|
||||
| D254 | LD A,$3E | Configure opcode ADD A at $D28D to add $3E (y-position height range) | ||
| D256 | LD ($D28E),A | |||
| D259 | LD A,$36 | Configure opcode ADD A at $D29D to add $36 (x-position width range) | ||
| D25B | LD ($D29E),A | |||
| D25E | LD A,$30 | Configure opcode ADD A at $D30F and $D320 to add $30 | ||
| D260 | LD ($D310),A | |||
| D263 | LD ($D321),A | |||
| D266 | JP $D27B | Jump forward and check for collision | ||
|
Configure opcodes for MINE and BLOB
|
||||
| D269 | LD A,$16 | Configure opcode ADD A at $D28D to add $16 (y-position height range) | ||
| D26B | LD ($D28E),A | |||
| D26E | LD A,$0E | Configure opcode ADD A at $D29D to add $0E (x-position width range) | ||
| D270 | LD ($D29E),A | |||
| D273 | LD A,$08 | Configure opcode ADD A at $D30F and $D320 to add $08 | ||
| D275 | LD ($D310),A | |||
| D278 | LD ($D321),A | |||
| D27B | LD A,($A060) | Jump forward if Rex is teleporting | ||
| D27E | OR A | |||
| D27F | JP NZ,$D2F6 | |||
| D282 | LD HL,$A0B7 | Set HL the y-position of Rex | ||
| D285 | LD A,(IX+$01) | Check if y-position of enemy is in the range of collision with Rex and jump forward if not | ||
| D288 | SUB $10 | |||
| D28A | CP (HL) | |||
| D28B | JR NC,$D2F6 | |||
| D28D | ADD A,$1E | |||
| D28F | CP (HL) | |||
| D290 | JR C,$D2F6 | |||
| D292 | LD HL,$A0B6 | Set HL the x-position of Rex | ||
| D295 | LD A,(IX+$00) | Check if x-position of enemy is in the range of collision with Rex | ||
| D298 | SUB $10 | |||
| D29A | CP (HL) | |||
| D29B | JR NC,$D2F6 | |||
| D29D | ADD A,$16 | |||
| D29F | CP (HL) | |||
| D2A0 | JR C,$D2F6 | |||
|
collision with Rex detected and shield activated
|
||||
| D2A2 | LD A,($A049) | Jump forward if shield not activated | ||
| D2A5 | OR A | |||
| D2A6 | JP Z,$D2CC | |||
| D2A9 | LD A,(IX+$09) | Jump forward if entity is bubble, smartbomb or question | ||
| D2AC | CP $FE | |||
| D2AE | JP Z,$D2CC | |||
| D2B1 | CP $FD | |||
| D2B3 | JP Z,$D2CC | |||
| D2B6 | CP $FC | |||
| D2B8 | JP Z,$D2CC | |||
| D2BB | CALL $981F | Destroy enemy | ||
| D2BE | LD A,(IX+$14) | Computes shield loss into L shield loss = enemy health * 4 | ||
| D2C1 | SLA A | |||
| D2C3 | SLA A | |||
| D2C5 | LD L,A | |||
| D2C6 | CALL $99CE | Handle shield loss | ||
| D2C9 | JP $D2E1 | Jump forward | ||
|
collision with Rex detected and shield not activated
|
||||
| D2CC | LD A,(IX+$09) | Jump forward if entity is bubble, smartbomb or question | ||
| D2CF | CP $FE | |||
| D2D1 | JP Z,$D2E1 | |||
| D2D4 | CP $FD | |||
| D2D6 | JP Z,$D2E1 | |||
| D2D9 | CP $FC | |||
| D2DB | JP Z,$D2E1 | |||
| D2DE | CALL $9BDA | Handle Rex dead | ||
|
Rex takes bubble, smartbombs or question
|
||||
| D2E1 | LD A,(IX+$09) | check enemy? | ||
| D2E4 | CP $FE | is bubble? | ||
| D2E6 | CALL Z,$D46C | Jump to handles Rex takes bubble | ||
| D2E9 | CP $FD | is smartbomb? | ||
| D2EB | CALL Z,$D494 | Jump to handle Rex takes smartbomb | ||
| D2EE | LD A,(IX+$09) | |||
| D2F1 | CP $FC | is question? | ||
| D2F3 | CALL Z,$D4B6 | Jump to handle question | ||
|
check collision with Rex projectiles
|
||||
| D2F6 | LD IY,$5B60 | Set IY to the base address for Rex projectiles configuration | ||
| D2FA | LD B,$1E | Set B to the number of projectiles to check | ||
| D2FC | LD A,(IY+$06) | Set A to the projectile status | ||
| D2FF | CP $01 | is flying? | ||
| D301 | JP NZ,$D3A7 | Jump to check another projectile if not flying | ||
| D304 | 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 | ||
| D307 | ADD A,$05 | |||
| D309 | CP (IY+$01) | |||
| D30C | JP NC,$D3A7 | |||
| D30F | ADD A,$10 | |||
| D311 | CP (IY+$01) | |||
| D314 | JP C,$D3A7 | |||
| D317 | LD A,(IX+$00) | Jump to check another projectile if x-position of projectile is not in range collision with then enemy x-position | ||
| D31A | CP (IY+$00) | |||
| D31D | JP NC,$D3A7 | |||
| D320 | ADD A,$10 | |||
| D322 | CP (IY+$00) | |||
| D325 | JP C,$D3A7 | |||
|
handle projectile collision with entity
|
||||
| D328 | LD A,(IX+$09) | Check for entity type | ||
| D32B | CP $FE | Jump to check another projectile if entity is bubble | ||
| D32D | JP Z,$D3A7 | |||
| D330 | CP $FD | Jump to check another projectile if entity is smartbomb | ||
| D332 | JP Z,$D3A7 | |||
| D335 | CP $FC | Jump to handle another projectile if entity is question | ||
| D337 | JP Z,$D3A7 | |||
| D33A | LD A,($A013) | Jump forward if weapon type is laser | ||
| D33D | CP $02 | |||
| D33F | JP NZ,$D349 | |||
| D342 | LD (IY+$06),$00 | Destroy laser projectile | ||
| D346 | JP $D35B | Jump forward | ||
|
non laser impact
|
||||
| D349 | LD (IY+$06),$02 | Set projectile status to impact #1 | ||
| D34D | LD A,($D842) | Check channel 3 | ||
| D350 | CP $FF | Jump forward if channel in use | ||
| D352 | JP NZ,$D35B | |||
| D355 | LD DE,$D787 | Set DE to base address for projectile impact sound | ||
| D358 | CALL $D5E7 | Configure sound channel and mixer register | ||
|
handle enemy behaviour on projectile impact
|
||||
| D35B | LD A,(IX+$09) | Check enemy type | ||
| D35E | CP $06 | Handle collision if enemy type FOOT MAN DYING 6 | ||
| D360 | CALL Z,$D41F | |||
| D363 | LD A,(IX+$09) | Check enemy type | ||
| D366 | CP $06 | Jump to handle next projectile if enemy type is FOOT MAN DYING 6 | ||
| D368 | JP Z,$D3A7 | |||
| D36B | LD A,(IX+$14) | Jump forward to handle next projectile if enemy health is zero | ||
| D36E | OR A | |||
| D36F | JP Z,$D3A7 | |||
| D372 | DEC A | Decrement enemy health | ||
| D373 | LD (IX+$14),A | |||
| D376 | CP $01 | Jump forward if enemy health <> 1 | ||
| D378 | JP NZ,$D3B1 | |||
|
enemy health is equal to 1
|
||||
| D37B | LD A,(IX+$09) | Jump forward and destroy enemy if enemy type is not FOOT MAN | ||
| D37E | AND $7F | |||
| D380 | OR A | |||
| D381 | JP NZ,$D3A4 | |||
| D384 | LD A,(IX+$02) | Jump forward to check projectile direction if FOOT MAN is facing left | ||
| D387 | OR A | |||
| D388 | JP NZ,$D396 | |||
| D38B | LD A,(IY+$04) | check projectile direction | ||
| D38E | BIT 7,A | |||
| D390 | JP NZ,$D39E | Jump forward and FOOT MAN dying #6 animation | ||
| D393 | JP $D3A4 | Jump to destroy enemy | ||
| D396 | LD A,(IY+$04) | check projectile direction | ||
| D399 | BIT 7,A | |||
| D39B | JP NZ,$D3A4 | Jump to destroy enemy if projectile is facing left | ||
| D39E | CALL $D3C2 | Handle FOOT MAN dying #6 | ||
| D3A1 | JP $D3A7 | Jump to handle next projectile | ||
| D3A4 | CALL $981F | Destroy enemy | ||
|
check for the next projectile if any
|
||||
| D3A7 | LD DE,$000F | Set IY point to the next projectile configuration | ||
| D3AA | ADD IY,DE | |||
| D3AC | DEC B | Decrement projectile counter | ||
| D3AD | JP NZ,$D2FC | Jump back and handle next projectil until there are projectiles | ||
| D3B0 | RET | |||
|
Enemy health is <> 1
|
||||
| D3B1 | LD A,(IX+$09) | Jump and handle next projectile if enemy type is not SCANNER | ||
| D3B4 | AND $7F | |||
| D3B6 | CP $08 | |||
| D3B8 | JP NZ,$D3A7 | |||
| D3BB | LD (IX+$10),$04 | Reset scanner speed | ||
| D3BF | JP $D3A7 | Jump back and handle next projectile | ||
|
Handle FOOT MAN dying #6
|
||||
| D3C2 | LD A,($A013) | Check weapon type | ||
| D3C5 | CP $02 | Jump to destroy enemy if weapon type is laser | ||
| D3C7 | JP Z,$981F | |||
| D3CA | CP $04 | Configure FOOT MAN jumping if weapon type is spray | ||
| D3CC | CALL Z,$C602 | |||
| D3CF | LD A,(IX+$02) | Change direction | ||
| D3D2 | XOR $01 | |||
| D3D4 | LD (IX+$02),A | |||
| D3D7 | LD A,$04 | Set speed | ||
| D3D9 | LD (IX+$10),A | |||
| D3DC | LD HL,$AE85 | Set address of table offsets for FOOT MAN dying animation | ||
| D3DF | LD (IX+$0A),L | |||
| D3E2 | LD (IX+$0B),H | |||
| D3E5 | LD HL,$8632 | Set address for graphic data of FOOT MAN dying | ||
| D3E8 | LD (IX+$16),L | |||
| D3EB | LD (IX+$17),H | |||
| D3EE | LD (IX+$09),$06 | Set enemy type | ||
| D3F2 | LD (IX+$11),$06 | Set counter for state change | ||
| D3F6 | LD (IX+$14),$02 | Set health | ||
| D3FA | LD (IX+$0E),$03 | Set sprite width | ||
| D3FE | LD A,($A013) | Return if weapon type is spray or laser | ||
| D401 | CP $04 | |||
| D403 | RET Z | |||
| D404 | CP $02 | |||
| D406 | RET Z | |||
| D407 | LD HL,$5843 | Set base address to attribute file for score points | ||
| D40A | LD ($A039),HL | |||
| D40D | LD A,$09 | Init counter for score points | ||
| D40F | LD ($A03B),A | |||
| D412 | LD HL,$0002 | Set next score points | ||
| D415 | LD ($A03C),HL | |||
| D418 | LD DE,$0001 | Set actual score points | ||
| D41B | CALL $9A27 | Increment score | ||
| D41E | RET | |||
|
handle projectile collision with FOOT MAN dying 6
|
||||
| D41F | LD A,($A013) | Return if projectile type is spray | ||
| D422 | CP $04 | |||
| D424 | RET Z | |||
| D425 | LD A,$04 | Set enemy speed | ||
| D427 | LD (IX+$10),A | |||
| D42A | LD HL,$AE85 | Set address pointer for offsets animation | ||
| D42D | LD (IX+$0A),L | |||
| D430 | LD (IX+$0B),H | |||
| D433 | LD HL,$8632 | Set address pointer of graphic data for FOOTMAN dying | ||
| D436 | LD (IX+$16),L | |||
| D439 | LD (IX+$17),H | |||
| D43C | LD (IX+$09),$06 | Set entity type | ||
| D440 | LD (IX+$11),$06 | Set counter for state change | ||
| D444 | LD (IX+$14),$02 | Set enemy health | ||
| D448 | LD A,($A03B) | Decrement score points counter and return if zero | ||
| D44B | DEC A | |||
| D44C | RET Z | |||
| D44D | LD ($A03B),A | Set the new score point counter value | ||
| D450 | LD DE,($A03C) | Set DE bonus score points | ||
| D454 | CALL $9A27 | Increment score | ||
| D457 | LD HL,($A03C) | Increment bonus score points | ||
| D45A | LD DE,$0001 | |||
| D45D | ADD HL,DE | |||
| D45E | LD ($A03C),HL | |||
| D461 | LD HL,($A039) | Increment base address into attribute file pointing to bonus points icon in HUD | ||
| D464 | LD DE,$0003 | |||
| D467 | ADD HL,DE | |||
| D468 | LD ($A039),HL | |||
| D46B | RET | |||
|
handle Rex takes bubble
|
||||
| D46C | PUSH AF | Save AF | ||
| D46D | LD DE,$D7DB | Set DE sound buffer for catching small bubble | ||
| D470 | CALL $D5E7 | Configure sound channel and mixer register | ||
| D473 | LD (IX+$0C),$00 | Set bubble not visible | ||
| D477 | LD A,$26 | Set A the quantity of energy to increase | ||
| D479 | CALL $B98E | Handle weapon energy increase | ||
| D47C | XOR A | Active HDU flash | ||
| D47D | LD ($A042),A | |||
| D480 | LD A,(IX+$15) | Jump forward and return if bubble small | ||
| D483 | OR A | |||
| D484 | JP Z,$D492 | |||
| D487 | LD A,$26 | Set A the quantity of energy to increase | ||
| D489 | CALL $B98E | Handle weapon energy increase | ||
| D48C | LD DE,$D7C6 | Set DE sound buffer for catching big bubble | ||
| D48F | CALL $D5E7 | Configure sound channel and mixer register | ||
| D492 | POP AF | Restore AF | ||
| D493 | RET | |||
|
handle Rex takes smartbomb
|
||||
| D494 | LD (IX+$0C),$00 | Set smartbomb to not visible | ||
| D498 | LD A,($A06C) | Increase number of smartbombs | ||
| D49B | INC A | |||
| D49C | CP $04 | Return if number of smartbombs is qual to 4 | ||
| D49E | RET Z | |||
| D49F | LD ($A06C),A | Set the new number of smartbombs | ||
| D4A2 | CALL $A1C9 | Draw smartbombs | ||
| D4A5 | LD DE,$D7F0 | Set DE to the address for the smartbomb take sound | ||
| D4A8 | CALL $D5E7 | Configure sound channel and mixer register | ||
| D4AB | RET | |||
| Prev: D1B9 | Up: Map | Next: D4AC |