Prev: 50375 Up: Map Next: 50464
50411: 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 50411 LD HL,48248 HL=Table_ScenicEventLocations.
50414 LD BC,(48432) Set a counter in BC for *Count_ScenicEvents.
Handler_ScenicEvents_Loop 50418 LD A,(48331) Load *CurrentRoom into A.
50421 CPIR Search for the matching room.
50423 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.
50425 LD (48509),HL Write the table position to *TempStore_TablePointer.
50428 LD (48511),BC Write the counter to *TempStore_TableIndex.
Calculate the event index and get the event handler.
50432 INC BC Adjust the counter for the sum.
50433 LD HL,(48432) HL=*Count_ScenicEvents.
50436 AND A Calculate the index.
50437 SBC HL,BC
50439 EX DE,HL Move the index into DE (as GetTableEntry uses E).
50440 LD IX,(48420) Load IX with *Pointer_JumpTable_ScenicEvents which contains a pointer to the scenic event rountines jump table.
50444 CALL GetTableEntry Call GetTableEntry.
50447 LD DE,50452 Push ScenicEvents_PostProcessing onto the stack (as the return address).
50450 PUSH DE
50451 JP (HL) Jump to the event handler held by HL.
This is the return point after the handler has finished executing.
ScenicEvents_PostProcessing 50452 LD HL,(48509) Restore *TempStore_TablePointer to HL.
50455 LD BC,(48511) Restore *TempStore_TableIndex to BC.
50459 XOR A Jump to Handler_ScenicEvents_Loop if there are any further events to process.
50460 OR C
50461 JR NZ,Handler_ScenicEvents_Loop
ScenicEvents_Return 50463 RET Return.
Prev: 50375 Up: Map Next: 50464