Prev: C4C7 Up: Map Next: C520
C4EB: Handler: Scenic Events
Used by the routine at GameLoop.
Handles checking if a scenic event should occur ... and also, handles jumping to the correct related scenic event routine to action it.
Handler_ScenicEvents C4EB LD HL,$BC78 HL=Table_ScenicEventLocations.
C4EE LD BC,($BD30) Set a counter in BC for *Count_ScenicEvents.
Handler_ScenicEvents_Loop C4F2 LD A,($BCCB) Load *CurrentRoom into A.
C4F5 CPIR Search for the matching room.
C4F7 JR NZ,ScenicEvents_Return Jump to ScenicEvents_Return if no events at all were found in the table.
An event was found to be processed!
First though, stash away the current pointer and index in the search, so this can be resumed later.
C4F9 LD ($BD7D),HL Write the table position to *TempStore_TablePointer.
C4FC LD ($BD7F),BC Write the counter to *TempStore_TableIndex.
Calculate the event index and get the event handler.
C500 INC BC Adjust the counter for the sum.
C501 LD HL,($BD30) HL=*Count_ScenicEvents.
C504 AND A Calculate the index.
C505 SBC HL,BC
C507 EX DE,HL Move the index into DE (as GetTableEntry uses E).
C508 LD IX,($BD24) Load IX with *Pointer_JumpTable_ScenicEvents which contains a pointer to the scenic event rountines jump table.
C50C CALL GetTableEntry Call GetTableEntry.
C50F LD DE,$C514 Push ScenicEvents_PostProcessing onto the stack (as the return address).
C512 PUSH DE
C513 JP (HL) Jump to the event handler held by HL.
This is the return point after the handler has finished executing.
ScenicEvents_PostProcessing C514 LD HL,($BD7D) Restore *TempStore_TablePointer to HL.
C517 LD BC,($BD7F) Restore *TempStore_TableIndex to BC.
C51B XOR A Jump to Handler_ScenicEvents_Loop if there are any further events to process.
C51C OR C
C51D JR NZ,Handler_ScenicEvents_Loop
ScenicEvents_Return C51F RET Return.
Prev: C4C7 Up: Map Next: C520