![]() |
Routines |
| H | 170 (BOY WANDER's pellet) or 171 (ERIC's pellet) |
| 27932 | CALL 25108 | Update SRB for current location of pellet |
| 27935 | LD L,113 | Byte 113 holds the distance left to travel |
| 27937 | DEC (HL) | Has the pellet finished travelling? |
| 27938 | JR NZ,27949 | Jump if not |
| 27940 | LD L,98 | Set the pellet's x-coordinate to 150 (i.e. off-screen) |
| 27942 | LD (HL),150 | |
| 27944 | LD L,112 | Remove the address of this routine from bytes 111 and 112 of the pellet's buffer |
| 27946 | LD (HL),0 | |
| 27948 | RET |
| 27949 | INC E | Set E equal to the next x-coordinate for the pellet |
| 27950 | RLCA | |
| 27951 | JR C,27955 | |
| 27953 | DEC E | |
| 27954 | DEC E | |
| 27955 | LD A,E | A=pellet's next x-coordinate |
| 27956 | CP 96 | Will it still be on-screen? |
| 27958 | JR NC,27940 | Jump back to terminate the pellet if not |
| 27960 | LD A,D | A=pellet's y-coordinate |
| 27961 | CALL 26185 | Is the pellet travelling horizontally? |
| 27964 | JR NZ,27981 | Jump if not |
| 27966 | CP 169 | Is the pellet on the bottom floor? |
| 27968 | JR Z,27981 | Jump if so |
| 27970 | CP 155 | 155=top floor |
| 27972 | LD A,38 | 38=x-coordinate of wall between White and Exam Rooms |
| 27974 | JR NZ,27978 | Jump if the pellet is on the middle floor |
| 27976 | LD A,57 | 57=x-coordinate of wall between Reading and Map Rooms |
| 27978 | CP E | Has the pellet hit a wall? |
| 27979 | JR Z,27940 | Jump back to terminate the pellet if so |
| 27981 | LD L,96 | Byte 96 holds the pellet's animatory state |
| 27983 | LD A,(HL) | Pick this up in A |
| 27984 | CALL 25008 | Update pellet's animatory state and location and update SRB |
| 27987 | LD L,97 | Byte 97 holds the pellet's y-coordinate |
| 27989 | LD A,(HL) | Pick this up in A |
| 27990 | CALL 26185 | Is the pellet travelling horizontally? |
| 27993 | JP NZ,28123 | Jump if not |
| 27996 | LD L,113 | Byte 113 holds the distance left to travel |
| 27998 | LD A,(HL) | Pick this up in A |
| 27999 | CP 8 | is the pellet ready to hit something? |
| 28001 | RET NC | Return if not |
| 28002 | LD DE,44130 | 44130 holds ERIC's x-coordinate |
| 28005 | LD L,E | L=98 |
| 28006 | LD A,(DE) | Pick up ERIC's x-coordinate in A |
| 28007 | CP (HL) | Does it match the pellet's x-coordinate? |
| 28008 | JR NZ,28036 | Jump if not |
| 28010 | DEC E | E=97 |
| 28011 | DEC L | L=97 |
| 28012 | LD A,(DE) | Pick up ERIC's y-coordinate in A |
| 28013 | INC E | E=98 |
| 28014 | CP (HL) | Compare ERIC's y-coordinate with that of the pellet |
| 28015 | LD L,E | L=98 |
| 28016 | JR NZ,28036 | Jump unless ERIC's location matches that of the pellet |
| 28018 | LD DE,32763 | Signal that ERIC has been knocked over by setting bit 4 at 32763 |
| 28021 | EX DE,HL | |
| 28022 | SET 4,(HL) | |
| 28024 | EX DE,HL | |
| 28025 | LD L,113 | The pellet has hit something; set its remaining distance to travel to 1, so it's terminated next time |
| 28027 | LD (HL),1 | |
| 28029 | LD A,D | A=number of character hit by pellet |
| 28030 | CP 168 | Was ANGELFACE hit? |
| 28032 | JP Z,27387 | Add to the score and print it if so |
| 28035 | RET |
| 28036 | LD D,169 | 169=EINSTEIN |
| 28038 | LD B,7 | There are 3 main kids and 4 teachers |
| 28040 | LD A,(DE) | Pick up the potential target's x-coordinate in A |
| 28041 | CP (HL) | Does it match that of the pellet? |
| 28042 | JR Z,28048 | Jump if so |
| 28044 | DEC D | Next main kid or teacher |
| 28045 | DJNZ 28040 | Jump back until main kids and teachers have been checked |
| 28047 | RET | |
| 28048 | DEC E | E=97 |
| 28049 | DEC L | L=97 |
| 28050 | LD A,(DE) | Pick up the potential target's y-coordinate in A |
| 28051 | INC E | E=98 |
| 28052 | CP (HL) | Compare the potential target's y-coordinate |
| 28053 | LD L,E | L=98 |
| 28054 | JR NZ,28044 | Jump unless the potential target's coordinates match |
| 28056 | LD E,112 | Byte 112 may hold the MSB of a controlling routine address; pick this up in A |
| 28058 | LD A,(DE) | |
| 28059 | LD E,L | E=98 |
| 28060 | AND A | Is there a controlling routine address in bytes 111/112? |
| 28061 | JR NZ,28076 | Jump if so |
| 28063 | EX DE,HL | |
| 28064 | LD L,111 | Place the address of the routine at 27206 in bytes 111 and 112 of the character's buffer, which will knock the character over |
| 28066 | LD (HL),70 | |
| 28068 | INC L | |
| 28069 | LD (HL),106 | |
| 28071 | INC L | Place parameter determining how long character will stay down in byte 113 of the character's buffer |
| 28072 | LD (HL),20 | |
| 28074 | JR 28024 |
| 28076 | LD E,96 | Byte 96 holds the potential target's animatory state |
| 28078 | LD A,(DE) | Pick this up in A |
| 28079 | LD E,L | E=98 |
| 28080 | AND 127 | Remove the direction bit (bit 7) |
| 28082 | CP 72 | Is the potential target a kid? |
| 28084 | JR C,28044 | Jump back to consider next main kid or teacher if so |
| 28086 | AND 7 | Retain only bits 0-2 of the teacher's animatory state |
| 28088 | CP 7 | Has the teacher already been knocked down? |
| 28090 | JR NZ,28044 | Jump back to consider next teacher if so |
| 28092 | LD L,111 | Place the address of the routine at 28102 in bytes 111 and 112 of the pellet's character buffer, which will make the pellet travel upwards from now on |
| 28094 | LD (HL),198 | |
| 28096 | LD L,113 | Set the pellet's remaining distance to travel to 5 spaces |
| 28098 | LD (HL),5 | |
| 28100 | RET |