Routines |
Prev: 59933 | Up: Map | Next: 60065 |
|
||||
The player has cast the same spell as the current active ongoing effect spell - this deactivates the effect.
Clear the active spell name from small scroll in bottom right of screen:
|
||||
59956 | LD L,249 | Low byte of screen display address for left-hand character in scroll | ||
59958 | LD A,7 | 7 characters to clear | ||
59960 | LD B,8 | 8 pixel lines in each character | ||
59962 | LD H,80 | High byte of screen display address | ||
59964 | LD (HL),0 | Clear display byte | ||
59966 | INC H | Move down one pixel | ||
59967 | DJNZ 59964 | Repeat x 8 pixels | ||
59969 | INC L | Move right one character square | ||
59970 | DEC A | Repeat for 7 character squares | ||
59971 | JR NZ,59960 | |||
Check which spell was deactivated, and reset the relevant effect accordingly:
|
||||
59973 | LD A,(60137) | Check which effect spell was activated - spell number (0-27) in list at 28156 | ||
59976 | CP 2 | SHIELD spell | ||
59978 | JR Z,59990 | |||
59980 | CP 11 | PROTECT spell | ||
59982 | JR Z,59990 | |||
59984 | CP 18 | DEFENCE spell | ||
59986 | LD A,0 | |||
59988 | JR NZ,59992 | |||
59990 | LD A,255 | SHIELD, PROTECT and DEFENCE also have a graphic shimmering barrier effect, which will need to be deactivated/erased. Set flag (255) to indicate that any current on-screen graphics will get erased. | ||
For 'effect' spells, the number of charges for the spell is reduced when the spell is deactivated, otherwise the final charge would make the effect permanent.
|
||||
59992 | LD (60137),A | Set active 'effect' spell to 0, or 255 if SHIELD, PROTECT or DEFENCE. | ||
59995 | LD A,0 | |||
59997 | LD (60373),A | Spell no longer active, so set the ongoing energy drain (e.g. SHIELD) or heal (e.g. CHALICE) byte value to zero | ||
60000 | LD A,(60360) | Check number of charges for spell | ||
60003 | CP 255 | If unlimited charges, no need to decrease | ||
60005 | JR Z,60018 | |||
Decrease number of spell charges
|
||||
60007 | DEC A | Decrement spell charges counter | ||
60008 | LD (60360),A | ..and store new value. | ||
60011 | CP 0 | Out of spell charges? | ||
60013 | JR NZ,60018 | |||
60015 | LD (60357),A | ...If so, set the spell's acquired/owned flag to 0, so that the spell gets removed from Maroc's spell list | ||
Sets the attributes of a 2x2 square in the top right of the scroll (that may have been flashing), and a line of 16 characters of the bottom of the scroll, to INK 0 (black) PAPER 6 (yellow).
|
||||
60018 | LD HL,23127 | Top right of scroll | ||
60021 | LD (HL),48 | Set to INK 0, PAPER 6 | ||
60023 | INC HL | Adjacent square | ||
60024 | LD (HL),48 | Ditto | ||
60026 | LD HL,23159 | Same for the 2 squares below | ||
60029 | LD (HL),48 | |||
60031 | INC HL | |||
60032 | LD (HL),48 | |||
It's not clear why the bottom row of the scroll also needs setting - it may be that originally active effect spell names appeared here, rather than over on the bottom right.
|
||||
60034 | LD HL,23239 | Bottom left of scroll | ||
60037 | LD B,16 | 16 characters along the bottom of the scroll | ||
60039 | LD (HL),48 | Set to INK 0, PAPER 6 | ||
60041 | INC HL | |||
60042 | DJNZ 60039 | Continue for rest of the row | ||
60044 | LD HL,60357 | Spell data buffer | ||
60047 | LD DE,(60135) | Get spell data address pointer to spell in list at 28156 | ||
60051 | LD BC,16 | 16 bytes of data to copy | ||
60054 | LDIR | |||
60056 | LD A,0 | Set spell selection status byte to 0 | ||
60058 | LD (60129),A | |||
60061 | CALL 57081 | Clear all of the scroll text | ||
60064 | RET |
Prev: 59933 | Up: Map | Next: 60065 |