| Routines

29952: Process the event table

Used by the routine at 61568. Scans the event table at 24544 and processes every active entry.
29952 | LD HL,30051 | Set the operand of the JP instruction at 29963 (below) to 30051 (RET)
29955 | LD (29964),HL
29958 | LD HL,24544 | Point HL at the event table at 24544
29961 | LD A,(HL) | Collect the first byte of an entry
29962 | INC A | Set the zero flag if it's 255
The operand of the JP instruction that follows is changed (by this routine) using entries in the event table at 24544 during the game as follows:
Operand | Entry | Occasion
--- | --- | ---
31236 | 24626 | Sam finds the dead body in the hotel
24914 | 24586 | Sam enters no. 15 using the key (in game mode 1)
24914 | 24695 | Sam climbs the stairs up to the roof of the apartment building next to no. 74 (in game mode 2, after he has entered the hotel's right-hand green room while disguised as a woman)
29963 | JP Z,30051 | Jump if we've reached the end of the event table
29966 | AND 2 | Is this event active?
29968 | JR NZ,29989 | Jump if not
29970 | PUSH HL | Save the event table entry pointer
29971 | INC HL | Point HL at the third byte of the entry
29972 | INC HL
29973 | LD B,(HL) | B=number of conditions to check
29974 | INC HL | DE=address to check
29975 | LD E,(HL)
29976 | INC HL
29977 | LD D,(HL)
29978 | INC HL | A=opcode of the 'JR' instruction to place at 29986 (below)
29979 | LD A,(HL)
29980 | INC HL | Point HL at the value to compare with (DE)
29981 | LD (29986),A | Set the instruction at 29986 (below) to 'JR Z', 'JR NZ', 'JR C' or 'JR NC' as appropriate
29984 | LD A,(DE) | Check the condition
29985 | CP (HL)
29986 | JR 29996 | This instruction is set to 'JR Z', 'JR NZ', 'JR C' or 'JR NC' above
29988 | POP HL | Restore the event table entry pointer to HL
29989 | INC HL | Point HL at the second byte of the entry
29990 | LD E,(HL) | Move HL along to the first byte of the next entry
29991 | LD D,0
29993 | ADD HL,DE
29994 | JR 29961 | Jump back to examine the next entry
29996 | DJNZ 29974 | Jump back to check the next condition in the entry
If we get here, then every condition in the entry was satisfied.
29998 | INC HL | B=number of POKEs in the entry
29999 | LD B,(HL)
30000 | INC HL | DE=address to POKE
30001 | LD E,(HL)
30002 | INC HL
30003 | LD D,(HL)
30004 | INC HL | A=byte to POKE
30005 | LD A,(HL)
30006 | LD (DE),A | Do the POKE
30007 | DJNZ 30000 | Jump back until every POKE has been done
The entry has been processed.
30009 | POP HL | Restore the event table entry pointer to HL
30010 | BIT 6,(HL) | Should this entry be deactivated now?
30012 | JR NZ,29989 | Move along to the next entry if not
30014 | INC (HL) | Otherwise deactivate the entry by setting bit 0 of the first byte
30015 | JR 29989 | Move along to the next entry