Routines |
Prev: 52582 | Up: Map | Next: 52695 |
Used by the routine at 51359.
|
||||
Play/trigger sounds for creature footsteps and check if any creatures are being destroyed by Maroc's spells or servant-wielded weapons.
Trigger footstep sound effect (for certain creatures):
|
||||
52616 | LD A,(60572) | Check FREEZE spell timer counter | ||
52619 | CP 0 | |||
52621 | JR NZ,52646 | If it's > 0, the FREEZE spell is still in place so skip the footsteps check | ||
Create short intervals between footsteps
|
||||
52623 | LD A,(60074) | Game timer | ||
52626 | AND 3 | Check if either bit 0 or 1 are set | ||
52628 | JR NZ,52646 | If so, skip the footstep sounds (this creates a short interval in the sound, to mimic a footstep effect) | ||
Check creature type (60230). Prepare footstep sound effects for Guardian of Chaos (creature type = 8), goblin warrior (9), and goblin missile thrower (10).
Warlocks (1-7), wraiths (11) and demons (12) make no sound when they move.
|
||||
52630 | LD A,(60230) | Check creature type number | ||
52633 | CP 8 | |||
52635 | JR C,52646 | Creature number < 8 - warlock | ||
52637 | CP 11 | |||
52639 | JR NC,52646 | Creature number >= 11 - a wraith or a demon | ||
52641 | LD A,16 | If the creature type is 8, 9, or 10, set the byte at 60246 to start with the speaker bit on (bit 4). | ||
52643 | LD (60246),A | |||
52646 | LD HL,(60228) | Pointer to data set at 27772/27828 | ||
52649 | LD BC,8 | Copy 8 bytes to creature data buffer at 60325 | ||
52652 | LD DE,60325 | |||
52655 | LDIR | |||
52657 | LD A,(60325) | Creature attribute/colour byte - first byte of current creature set at 27828 | ||
52660 | LD (60072),A | Copy into room item working data buffer | ||
Check if any creatures have been destroyed (e.g. by a missile fired by Maroc)
|
||||
52663 | LD A,(60238) | Item (creature) properties byte | ||
52666 | LD C,A | Temp store in C register | ||
52667 | AND 224 | Check top 3 bits (bits 5-7) If any of these are set, it means the creature is disintegrating or materializing |
||
52669 | JP NZ,53145 | If so, don't run any more checks for this creature - skip out of this routine | ||
52672 | LD A,C | Retrieve item/creature properties byte | ||
52673 | AND 1 | Check bit 0 - if set, it means the creature is on-screen/visible | ||
52675 | JR Z,52695 | Skip the next instructions if creature isn't visible on-screen as creatures need to be on-screen to be destroyed by missiles etc. | ||
Run collision checks for Maroc's spells vs creatures
|
||||
52677 | LD A,(60329) | Collision/event check type (wraiths/demons = 7, other creatures = 3) This indicates which spells or weapons can destroy these sorts of creature For warlocks this is a value matching the missile/bolt type that destroys them (from byte 5 in the warlock table at 27772) |
||
52680 | LD C,A | Store in C register, which is used as the event value to check in the following CALL | ||
52681 | CALL 57293 | Check if Maroc has destroyed a creature with a missile/bolt or wraithbane | ||
52684 | CP 0 | The A register is returned with 0 (no collision) or 1 (positive collision detected) | ||
52686 | JP NZ,53372 | Positive collision (flag = 1), e.g. a wraith touching Maroc while WRAITHBANE is active, or a missile hitting a creature that it destroys - so destroy the creature. | ||
52689 | LD A,(60330) | Otherwise get event/collision value for for creatures opening/closing doors (17) | ||
52692 | CALL 58032 | ...and add this to the collision/event set in the table at 32691 ready for checking next game cycle |
Prev: 52582 | Up: Map | Next: 52695 |