Routines |
Prev: 58945 | Up: Map | Next: 59130 |
Used by the routine at 58945.
|
||||
This routine cycles through the spell list at 28156, printing any spells that have been collected.
If the first byte of a spell's data set is 16, it means the spell has been collected and is available for display/selection.
Check whether it's up or down that's been pressed:
|
||||
59033 | LD C,A | Temp store for up/down flag: 1 = up, -1 (255) = down | ||
59034 | LD A,(60070) | Retrieve the counter flag set in the previous routine, used to create the incremental pitch sound effects as the player scrolls through the spells | ||
59037 | CP 0 | Skip next two instructions if zero (reached max pitch) | ||
59039 | JR Z,59045 | |||
59041 | DEC A | Otherwise decrement... | ||
59042 | LD (60070),A | ...and re-store. | ||
59045 | LD A,C | Retrieve the up/down flag value from C register | ||
59046 | CP 1 | Check if UP pressed. If not, run the following routine for DOWN. | ||
59048 | JR Z,59089 | |||
DOWN pressed while in spell menu:
|
||||
59050 | LD A,(60130) | Spell counter (up to 27 spells) for current spell | ||
59053 | LD HL,(60131) | Address pointer for the current position in the spell list (spells at 28156) | ||
59056 | LD DE,65520 | |||
59059 | CP 0 | If we don't currently have a counter position (byte at 60130 is zero), then start at the end of the spell list ready to move up it | ||
59061 | JR NZ,59070 | |||
59063 | LD HL,(60263) | Address pointer for the end of the spell list texts at 28604 | ||
59066 | LD A,(60265) | Total number of spells (27) | ||
59069 | INC A | Incremented ready for decrement at the start of the following loop | ||
59070 | ADD HL,DE | Subtracts 16 from HL - first check is the data set for the last spell (MESSAGE) at 28588 | ||
59071 | DEC A | Decrement spell number counter (starts at 27) | ||
59072 | LD C,A | Store temporarily | ||
59073 | LD A,(HL) | Get 'spell collected' data byte | ||
59074 | CP 16 | Has the spell been collected (byte value = 16)? | ||
59076 | LD A,C | (Retrieve spell number counter) | ||
59077 | JR NZ,59059 | If it hasn't been collected, keep checking the rest of the spells | ||
59079 | LD (60130),A | Spell is available, so store the spell counter... | ||
59082 | LD (60131),HL | ...and the spell list address pointer | ||
59085 | CALL 57139 | Print the spell names on the scroll | ||
59088 | RET | |||
UP pressed while in spell menu:
|
||||
59089 | LD A,(60130) | Spell counter (up to 27 spells) for current spell | ||
59092 | LD C,A | |||
59093 | LD HL,(60131) | Address pointer for the current position in the spell list (spells at 28156) | ||
59096 | LD DE,16 | Offset for the spell address pointer to move down to the next spell | ||
59099 | LD A,(60265) | Total number of spells | ||
59102 | CP C | Check if we've reached the end of the list... | ||
59103 | JR NZ,59112 | |||
59105 | LD HL,(60261) | ...If so, switch to the start of the spell list | ||
59108 | LD C,0 | ...and set the spell counter to zero | ||
59110 | JR 59114 | |||
59112 | ADD HL,DE | Move down to next spell | ||
59113 | INC C | Increment the spell counter | ||
59114 | LD A,(HL) | Get 'spell collected' data byte | ||
59115 | CP 16 | Has the spell been collected (byte value = 16)? | ||
59117 | JR NZ,59099 | If it hasn't been collected, keep checking the rest of the spells | ||
59119 | LD A,C | Spell is available, so store the spell counter... | ||
59120 | LD (60130),A | |||
59123 | LD (60131),HL | ...and the spell list address pointer | ||
59126 | CALL 57139 | Print the spell names on the scroll | ||
59129 | RET |
Prev: 58945 | Up: Map | Next: 59130 |