![]() |
Routines |
Prev: 29912 | Up: Map | Next: 30017 |
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:
|
||||||||||||||
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 |
Prev: 29912 | Up: Map | Next: 30017 |