Routines |
Prev: 30458 | Up: Map | Next: 30574 |
Used by the routine at 30675. Returns with the carry flag set if the telephone that Sam is calling is both off-screen and not his own, or if there is a character close enough to the telephone to pick it up.
|
||||
30511 | LD HL,32666 | 32666 holds the identifier of the telephone that Sam is calling | ||
30514 | LD A,(HL) | Pick this up in A | ||
30515 | AND 31 | E=x-coordinate of the leftmost column of the 8-tile-wide segment of the play area that contains the telephone (0, 8, 16,...248) | ||
30517 | ADD A,A | |||
30518 | ADD A,A | |||
30519 | ADD A,A | |||
30520 | LD E,A | |||
30521 | LD A,(HL) | A=telephone identifier | ||
30522 | CP 92 | Is Sam calling his office? | ||
30524 | JR Z,30538 | Jump if so | ||
30526 | LD A,E | A=telephone's x-coordinate (0, 8, 16,...248) | ||
30527 | LD L,254 | HL=32766, which holds the leftmost column of the play area on screen | ||
30529 | CP (HL) | Is the telephone that Sam is calling off screen to the left? | ||
30530 | RET C | Return with the carry flag set if so | ||
30531 | SUB 32 | Does the telephone that Sam is calling have an x-coordinate that is less than 32? | ||
30533 | JR C,30538 | Jump if so (it's on screen) | ||
30535 | CP (HL) | Is the telephone that Sam is calling off screen to the right? | ||
30536 | CCF | Return with the carry flag set if so | ||
30537 | RET C | |||
Sam has called his office, or a telephone that is on screen. In this case, Sam will get an answer only if another character is close to the telephone.
|
||||
30538 | LD L,154 | Collect the telephone identifier from 32666 | ||
30540 | LD A,(HL) | |||
30541 | AND 224 | D=y-coordinate of the telephone (7, 13, 19, 25 or 31) | ||
30543 | RRCA | |||
30544 | RRCA | |||
30545 | RRCA | |||
30546 | LD D,A | |||
30547 | RRCA | |||
30548 | ADD A,D | |||
30549 | ADD A,7 | |||
30551 | LD D,A | |||
30552 | LD HL,55042 | Point HL at byte 2 of character buffer 215 | ||
30555 | LD B,15 | We will check the locations of characters 215-229 | ||
30557 | LD A,(HL) | A=character's y-coordinate | ||
30558 | CP D | Does it match that of the telephone? | ||
30559 | JR NZ,30569 | Jump to consider the next character if not | ||
30561 | DEC L | L=1 | ||
30562 | LD A,(HL) | A=character's x-coordinate | ||
30563 | INC L | L=2 | ||
30564 | AND 248 | Set the zero flag if the character is in the same 8-tile-wide segment of the play area as the telephone | ||
30566 | CP E | |||
30567 | SCF | Set the carry flag | ||
30568 | RET Z | Return with the carry flag set if the character is close to the telephone | ||
30569 | INC H | Next character | ||
30570 | DJNZ 30557 | Jump back until every character has been checked | ||
30572 | AND A | Reset the carry flag (there is no one close to the telephone) | ||
30573 | RET |
Prev: 30458 | Up: Map | Next: 30574 |