Routines
 Prev: 30458 Up: Map Next: 30574
30511: Check whether a character can answer the telephone that Sam is calling
 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