Routines |
Prev: 59783 | Up: Map | Next: 59933 |
|
||||
For active cursor-type spells such as SERVANT, OPEN, REVEAL etc., pressing FIRE cancels the spell.
The exceptions are the FLAME and ELECTRIC spells, which keep the aiming cursor on-screen, allowing for multiple missiles to be fired without having to activate the spell from the scroll list again.
|
||||
59869 | LD A,(60117) | Flag indicating whether (any part of) graphic is visible on screen | ||
59872 | CP 0 | 0 = not visible, 1 = visible | ||
59874 | JP Z,59917 | If not visible, the servant/eye cursor has moved off the bottom of the playing area. Doing this cancels the spell, and in the case of the repeat-firing FLAME and ELECTRIC spells, it's the ONLY way to cancel the spell. Jump to 59917 for deactivation. |
||
59877 | LD A,(60210) | Check FIRE key controls | ||
59880 | CP 0 | |||
59882 | JP Z,60064 | If not pressed, jump straight to RET | ||
FIRE control key pressed.
This routine determines what action needs to be taken when FIRE is pressed when the cursor icon/servant is active:
|
||||
59885 | LD A,(60362) | This byte's value holds the action to take when a servant/spell icon spell is cast | ||
59888 | CP 0 | For non-cursor spells, this byte is zero | ||
59890 | JR Z,59903 | ...so make sure it's not one of these | ||
59892 | LD C,A | Temp store of byte's 'action-value' in C register | ||
59893 | AND 128 | Check bit 7, which is set for missile type spells (MISSILE, FIREBALL etc.) | ||
59895 | JR Z,59903 | |||
59897 | LD A,C | If it's set, retrieve the original byte... | ||
59898 | AND 127 | Filter out bit 7 | ||
59900 | LD (60568),A | ...and store the remaining value | ||
59903 | LD A,(60359) | Check the spell type | ||
59906 | CP 3 | 3 = ELECTRIC and FLAME spells | ||
59908 | JR NZ,59917 | |||
For the FLAME and ELECTRIC spells, the aiming cursor remains on screen after firing. So the energy cost of the spell is deducted from Maroc's energy bar each time a bolt is fired, rather than just at the point of casting.
|
||||
59910 | LD A,(60358) | First get the energy cost of the spell... | ||
59913 | CALL 58316 | ...and reduce Maroc's energy accordingly. | ||
59916 | RET | ...In this case, there's no more action to be taken re: the spell aiming cursor icon | ||
For other spells, cancel the spell and get rid of the controllable sprite (flashing eye cursor, or servant):
|
||||
59917 | LD A,0 | Set draw/erase flag to ERASE | ||
59919 | LD (60111),A | |||
59922 | LD (60140),A | Also reset the temp store scroll spell number pointer (I think) | ||
59925 | LD HL,(60564) | Retrieve the graphic address pointer to the servant/cursor icon graphic | ||
59928 | CALL 56216 | ...and erase the graphic from screen. | ||
59931 | JR 60018 | Jump to the routine that resets the flashing attributes indicating an active spell, at the top right of the scroll |
Prev: 59783 | Up: Map | Next: 59933 |