![]() |
Routines |
| Prev: CD66 | Up: Map | Next: CDD7 |
|
Used by the routine at C89F.
|
||||
|
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):
|
||||
| CD88 | LD A,($EC9C) | Check FREEZE spell timer counter | ||
| CD8B | CP $00 | |||
| CD8D | JR NZ,$CDA6 | If it's > 0, the FREEZE spell is still in place so skip the footsteps check | ||
|
Create short intervals between footsteps
|
||||
| CD8F | LD A,($EAAA) | Game timer | ||
| CD92 | AND $03 | Check if either bit 0 or 1 are set | ||
| CD94 | JR NZ,$CDA6 | If so, skip the footstep sounds (this creates a short interval in the sound, to mimic a footstep effect) | ||
|
Check creature type (EB46). 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.
|
||||
| CD96 | LD A,($EB46) | Check creature type number | ||
| CD99 | CP $08 | |||
| CD9B | JR C,$CDA6 | Creature number < 8 - warlock | ||
| CD9D | CP $0B | |||
| CD9F | JR NC,$CDA6 | Creature number >= 11 - a wraith or a demon | ||
| CDA1 | LD A,$10 | If the creature type is 8, 9, or 10, set the byte at EB56 to start with the speaker bit on (bit 4). | ||
| CDA3 | LD ($EB56),A | |||
| CDA6 | LD HL,($EB44) | Pointer to data set at 6C7C/6CB4 | ||
| CDA9 | LD BC,$0008 | Copy 8 bytes to creature data buffer at EBA5 | ||
| CDAC | LD DE,$EBA5 | |||
| CDAF | LDIR | |||
| CDB1 | LD A,($EBA5) | Creature attribute/colour byte - first byte of current creature set at 6CB4 | ||
| CDB4 | LD ($EAA8),A | Copy into room item working data buffer | ||
|
Check if any creatures have been destroyed (e.g. by a missile fired by Maroc)
|
||||
| CDB7 | LD A,($EB4E) | Item (creature) properties byte | ||
| CDBA | LD C,A | Temp store in C register | ||
| CDBB | AND $E0 | Check top 3 bits (bits 5-7) If any of these are set, it means the creature is disintegrating or materializing |
||
| CDBD | JP NZ,$CF99 | If so, don't run any more checks for this creature - skip out of this routine | ||
| CDC0 | LD A,C | Retrieve item/creature properties byte | ||
| CDC1 | AND $01 | Check bit 0 - if set, it means the creature is on-screen/visible | ||
| CDC3 | JR Z,$CDD7 | 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
|
||||
| CDC5 | LD A,($EBA9) | 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 6C7C) |
||
| CDC8 | LD C,A | Store in C register, which is used as the event value to check in the following CALL | ||
| CDC9 | CALL $DFCD | Check if Maroc has destroyed a creature with a missile/bolt or wraithbane | ||
| CDCC | CP $00 | The A register is returned with 0 (no collision) or 1 (positive collision detected) | ||
| CDCE | JP NZ,$D07C | 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. | ||
| CDD1 | LD A,($EBAA) | Otherwise get event/collision value for for creatures opening/closing doors (17) | ||
| CDD4 | CALL $E2B0 | ...and add this to the collision/event set in the table at 7FB3 ready for checking next game cycle | ||
| Prev: CD66 | Up: Map | Next: CDD7 |