Routines |
Prev: 53372 | Up: Map | Next: 53484 |
Used by the routine at 51359.
|
||||
...There's a missile/bolt flying around in the room..!
This routine copies the missile's data from the table at 27868 into a working (missile) buffer at 60317.
It also checks if Maroc has a counter defence spell active (SHIELD, DEFENCE etc.)
|
||||
53403 | LD A,(60238) | Missile properties byte | ||
53406 | AND 1 | Check if it's is on-screen (bit 1 is set) | ||
53408 | JP Z,53569 | ...if not, skip out to a later instruction | ||
53411 | LD HL,(60228) | Get address pointer to missile type (in table at 27868) | ||
53414 | LD BC,8 | Copy the 8 bytes of missile data into missile working buffer table at 60317 | ||
53417 | LD DE,60317 | |||
53420 | LDIR | |||
53422 | LD A,(60319) | Missile attribute (INK) colour | ||
53425 | LD (60072),A | Copy into item data buffer | ||
53428 | LD A,(60320) | Missile's event/collision type to check (stored as the 4th byte in the missile/bolt table at 27868) | ||
53431 | CP 0 | |||
53433 | JR Z,53438 | If it's zero (no event), don't copy any event data (shouldn't happen as there's a value for each missile) | ||
53435 | CALL 58032 | ...If it's not zero, copy item event data into working buffer | ||
COUNTER SPELL #1 CHECK
|
||||
53438 | LD A,(60137) | Get currently active 'effect' spell (value = 0 if none currently in effect) | ||
53441 | LD C,A | Copy to C register | ||
53442 | LD A,(60321) | Defence counter spell #1 (the spell in this slot is always AMULET) | ||
53445 | CP 0 | |||
53447 | JR Z,53452 | Check for zero - if no counter spell in this slot (shouldn't happen as there's a value for every counter slot) | ||
53449 | CP C | Check counter spell vs current active spell number | ||
53450 | JR Z,53472 | If there's a match, can skip the next two checks straight to 53472 | ||
COUNTER SPELL #2 CHECK
|
||||
53452 | LD A,(60323) | Defence counter spell #2 | ||
53455 | CP 0 | Check for zero - if no counter spell in this slot (shouldn't happen as there's a value for every counter slot) | ||
53457 | JR Z,53462 | |||
53459 | CP C | Check counter spell vs current active spell number | ||
53460 | JR Z,53472 | If there's a match, can skip the final check and jump straight to 53472 | ||
COUNTER SPELL #2 CHECK
|
||||
53462 | LD A,(60324) | Defence counter spell #3 | ||
53465 | CP 0 | heck for zero - if no counter spell in this slot (shouldn't happen as there's a value for every counter slot) | ||
53467 | JR Z,53526 | |||
53469 | CP C | Check counter spell vs current active spell number | ||
53470 | JR NZ,53526 | If there's NO match, jump out of the routine here | ||
The following instructions are redundant (possibly duplicated), as CP C has already happened in a previous check
|
||||
53472 | CP C | - | ||
53473 | JR NZ,53526 | - | ||
There's a match between the missile/bolt fired and an active shielding spell around Maroc that will negate/deflect it
The following instructions check for a collision against Maroc's flickering shielding/protective spell
|
||||
53475 | LD C,1 | For the usual collision/event detection routine (57293) the C register is set an event/collision type. On this occasion loading the C register is unnecessary as it's not actually needed/used for this (special) missile routine. | ||
53477 | CALL 57990 | Check for a collision between the fired bolt/missile and the shield/barrier around Maroc | ||
53480 | CP 0 | The A register is returned with 0 if no collision, or 8 (this byte is used elsewhere for the accompanying sound effect) if there's a collision | ||
53482 | JR Z,53526 | If no collision, jump out of this routine/check |
Prev: 53372 | Up: Map | Next: 53484 |