Prev: 54524 Up: Map Next: 54782
54740: Re-calculate room event table data sets
Follows setup of foreground scenery objects at 54524.
The room's 'events-to-check' sets at 32691 contain any items in the current room that will need checking for events/collisions - for example if the servant, or a warlock, is present.
  • This routine decrements the first byte of each set at 32691
  • For each event item set, this byte will be (pre-decrement) either 1 or 2, as items/events are checked twice (e.g. if they've moved on-screen
  • After decrementing this counter, any sets with this byte value of 0 are removed from the set, and any sets with a byte value of 2 (so 1 after decrementing) are moved up the set (the table is dynamic so will shrink as well as grow)
  • Once all sets have been checked/decremented, a value of 255 is put at the start of the next set to indicate the end of the sets
54740 LD HL,(60268) Pointer to room item event data sets at 32691
54743 LD D,H Copy into DE register pair - this is the address pointer ready for a later set to be copied here
54744 LD E,L
54745 LD A,(HL) Get first byte of event set
54746 INC HL (and move the pointer along)
This loop DECrements the first byte of each event set by 1:
54747 CP 255 Have we reached the end of the event sets?
54749 JR Z,54771 If so, skip out at this point
54751 DEC A The first byte for these will be 1 or 2
54752 JR Z,54764 ...So after the DEC, skip the next set of instructions if it was 1, as it'll now be zero no longer needs checking
First byte of set (after the decrement) = 1 - it's still not zero, so we need to keep this set:
54754 LD B,4 Copy the DEC'd byte back into the first byte of the previously stored address
54756 LD (DE),A
54757 LD A,(HL) ...followed by the rest of the bytes in the set
54758 INC DE
54759 INC HL
54760 DJNZ 54756
54762 JR 54747 Keep checking sets until all sets dealt with (byte value of 255 found)
First byte of set (after the decrement) = 0 - no need to keep this set, move on to the next:
54764 INC HL HL is pointing at the second byte of the set, so move it along 3...
54765 INC HL
54766 INC HL ...To get to the first byte of the next set
54767 LD A,(HL)
54768 INC HL
54769 JR 54747 ...And repeat the check for the next set.
All event sets now dealt with. Set termination (end-of-data) byte of 255 at the start of what would be the next set.
54771 LD (DE),A At this instruction, the A register contains 255 and DE points to the start of the next event data set at 54524, so this stores a 255 (end-of-data) byte at the start of the next set.
54772 EX DE,HL Swap DE (start of data sets) back into HL
54773 LD (60077),HL Store pointer to end of event table (byte 1 of new set)
54776 LD HL,(60274) Retrieve address pointer for the end of the room element data sets at 31744
54779 LD (60094),HL Copy to data buffer
The following routine (54782) determines if any creatures should enter Maroc's current room.
Prev: 54524 Up: Map Next: 54782