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