| Routines

25554: Get the play area region identifier for a given location

Used by the routines at 25700, 25843 and 32379. The value returned in A (corresponding to the location in DE) is as follows:
ID | Region
--- | ---
189 | Top floor, left of the left study door in the boys' skool
190 | Middle floor, left of the far wall of the Science Lab storeroom
191 | Anywhere on the bottom floor (or in mid-air!)
192 | Assembly hall stage
193 | Near the middle-floor window in the boys' skool
194 | Top floor, right of the left study door in the boys' skool
195 | Middle floor, girls' skool
196 | Top floor, girls' skool
Or if the entry point at 25557 is used (for ERIC's location):
ID | Region
--- | ---
0 | None of the places below (ERIC is never allowed here)
1 | Playground
2 | Various places in the boys' skool outside classrooms
3 | Assembly hall
4 | Dining hall
5 | Revision Library, outside the Yellow Room door
6 | Science Lab
7 | Blue Room
8 | Yellow Room
The carry flag is set upon return to the caller of this routine if the coordinates in DE correspond to a location on a staircase.
Input
D | y-coordinate of the play area (3-17)
E | x-coordinate of the play area (0-190)
25554 | CALL 28067 | Divert back to the calling routine with A=192 and the carry flag reset if the character is on the assembly hall stage; otherwise return here with B=182 and C=59
This entry point is used by the routine at 32000 with ERIC's coordinates in DE, B=185, and C=59.
25557 | LD A,D | A=y-coordinate
25558 | INC B | Set B to 183 (186) if D<=6 (top floor), 184 (187) if 7<=D<=13 (middle floor), or 185 (188) if 14<=D<=18 (bottom floor)
25559 | SUB 7
25561 | JR NC,25558
Now BC will be used to index one of the skool region tables that contain the location identifiers:
Address | Region
--- | ---
46908 | Top floor
47164 | Middle floor
47420 | Bottom floor
47676 | Top floor (ERIC)
47932 | Middle floor (ERIC)
48188 | Bottom floor (ERIC)
25563 | CP 252 | Does D=3, 10 or 17 (top, middle, bottom floor)?
25565 | JR Z,25571 | Jump if so
25567 | SCF | Signal: D does not correspond exactly to the top, middle or bottom floor
25568 | NOP |
25569 | NOP
25570 | NOP
25571 | PUSH AF | Save the carry flag temporarily
25572 | INC C | Point BC at the appropriate entry in one of the region tables
25573 | LD A,(BC)
25574 | INC C
25575 | CP E
25576 | JR C,25572
25578 | POP AF | Restore the carry flag (reset if D=3, 10 or 17; set otherwise)
25579 | LD A,(BC) | A=region identifier (189-196 or 0-8; see the tables above)
25580 | RET |