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 |