Routines |
Prev: 76FA | Up: Map | Next: 776E |
Used by the routine at 77D3. 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.
|
||||
772F | LD HL,$7F9A | 7F9A holds the identifier of the telephone that Sam is calling | ||
7732 | LD A,(HL) | Pick this up in A | ||
7733 | AND $1F | 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) | ||
7735 | ADD A,A | |||
7736 | ADD A,A | |||
7737 | ADD A,A | |||
7738 | LD E,A | |||
7739 | LD A,(HL) | A=telephone identifier | ||
773A | CP $5C | Is Sam calling his office? | ||
773C | JR Z,$774A | Jump if so | ||
773E | LD A,E | A=telephone's x-coordinate (0, 8, 16,...248) | ||
773F | LD L,$FE | HL=7FFE, which holds the leftmost column of the play area on screen | ||
7741 | CP (HL) | Is the telephone that Sam is calling off screen to the left? | ||
7742 | RET C | Return with the carry flag set if so | ||
7743 | SUB $20 | Does the telephone that Sam is calling have an x-coordinate that is less than 32? | ||
7745 | JR C,$774A | Jump if so (it's on screen) | ||
7747 | CP (HL) | Is the telephone that Sam is calling off screen to the right? | ||
7748 | CCF | Return with the carry flag set if so | ||
7749 | 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.
|
||||
774A | LD L,$9A | Collect the telephone identifier from 7F9A | ||
774C | LD A,(HL) | |||
774D | AND $E0 | D=y-coordinate of the telephone (7, 13, 19, 25 or 31) | ||
774F | RRCA | |||
7750 | RRCA | |||
7751 | RRCA | |||
7752 | LD D,A | |||
7753 | RRCA | |||
7754 | ADD A,D | |||
7755 | ADD A,$07 | |||
7757 | LD D,A | |||
7758 | LD HL,$D702 | Point HL at byte 0x02 of character buffer 0xD7 | ||
775B | LD B,$0F | We will check the locations of characters 0xD7-0xE5 | ||
775D | LD A,(HL) | A=character's y-coordinate | ||
775E | CP D | Does it match that of the telephone? | ||
775F | JR NZ,$7769 | Jump to consider the next character if not | ||
7761 | DEC L | L=0x01 | ||
7762 | LD A,(HL) | A=character's x-coordinate | ||
7763 | INC L | L=0x02 | ||
7764 | AND $F8 | Set the zero flag if the character is in the same 8-tile-wide segment of the play area as the telephone | ||
7766 | CP E | |||
7767 | SCF | Set the carry flag | ||
7768 | RET Z | Return with the carry flag set if the character is close to the telephone | ||
7769 | INC H | Next character | ||
776A | DJNZ $775D | Jump back until every character has been checked | ||
776C | AND A | Reset the carry flag (there is no one close to the telephone) | ||
776D | RET |
Prev: 76FA | Up: Map | Next: 776E |