Routines |
Prev: 29731 | Up: Map | Next: 29851 |
Continues from the routine at 29668. Checks whether Sam is standing next to a fuse, door, light switch or telephone, and updates the icon panel as appropriate.
|
||||||||
29733 | LD A,(HL) | A=Sam's y-coordinate | ||||||
29734 | LD DE,29647 | Point DE at the list of x-coordinates of the house doors (at 29647) | ||||||
29737 | CP 31 | 31 is the y-coordinate of the house doors | ||||||
29739 | JR Z,29747 | Jump if Sam's y-coordinate is 31 | ||||||
29741 | CP 33 | 33 is the y-coordinate of the shop doors | ||||||
29743 | JR NZ,29765 | Jump unless Sam's y-coordinate is 33 | ||||||
29745 | LD E,220 | DE=29660 (list of x-coordinates of shop doors) | ||||||
29747 | DEC L | L=1 | ||||||
29748 | LD A,(DE) | A=x-coordinate of a door (or 255) | ||||||
29749 | INC E | Point DE at the next x-coordinate in the list | ||||||
29750 | INC A | Have we reached the end of the list? | ||||||
29751 | JR Z,29765 | Jump if so (Sam's not standing next to a door) | ||||||
29753 | DEC A | A=x-coordinate of the door | ||||||
29754 | CP (HL) | Is Sam's x-coordinate the same? | ||||||
29755 | JR NZ,29748 | Jump back if not to check the next door | ||||||
This entry point is used by the routine at 29668.
|
||||||||
29757 | LD A,(32680) | Set bit 6 at 32680: door icon | ||||||
29760 | SET 6,A | |||||||
29762 | LD (32680),A | |||||||
29765 | LD L,4 | Point HL at byte 4 of Sam's buffer | ||||||
29767 | BIT 0,(HL) | Is Sam indoors? | ||||||
29769 | JP Z,29680 | Update the icon panel now if not | ||||||
29772 | LD L,2 | A=Sam's y-coordinate | ||||||
29774 | LD A,(HL) | |||||||
29775 | CP 33 | Is Sam inside a shop? | ||||||
29777 | JR Z,29800 | Jump if so | ||||||
29779 | SUB 6 | Keep subtracting 6 (the height of a floor) from Sam's y-coordinate until it's negative | ||||||
29781 | JR NC,29779 | |||||||
29783 | CP 251 | Is Sam's y-coordinate 1, 7, 13, 19, 25 or 31? | ||||||
29785 | JP NZ,29680 | Update the icon panel now if not (Sam's on a staircase) | ||||||
29788 | CALL 30116 | Is Sam standing next to a fuse that has not been blown yet? | ||||||
29791 | JR NZ,29800 | Jump if not | ||||||
29793 | LD HL,32680 | Set bit 7 at 32680: fuse icon | ||||||
29796 | SET 7,(HL) | |||||||
29798 | LD H,230 | 230=Sam | ||||||
29800 | CALL 62518 | Is Sam standing next to a light switch? | ||||||
29803 | JR Z,29812 | Jump if not | ||||||
29805 | LD HL,32680 | Set bit 5 at 32680: light bulb icon | ||||||
29808 | SET 5,(HL) | |||||||
29810 | LD H,230 | 230=Sam | ||||||
29812 | CALL 29854 | Is Sam standing next to a telephone? | ||||||
29815 | JP Z,29680 | Update the icon panel now if not | ||||||
Sam is standing next to a telephone. Before showing the telephone icon, we need to update the icon graphic depending on whether the phone is ringing.
|
||||||||
29818 | LD HL,32680 | Set bit 4 at 32680: telephone icon | ||||||
29821 | SET 4,(HL) | |||||||
29823 | JR C,29841 | Jump if the telephone is not ringing | ||||||
29825 | LD A,(23672) | Collect the value of the system variable FRAMES, which is incremented every 20ms | ||||||
29828 | BIT 5,A | Bit 5 of FRAMES alternates every 0.64s | ||||||
29830 | JR Z,29841 | Jump if it's zero now | ||||||
29832 | LD A,(20654) | This is the display file address for the byte in the top-left corner of the telephone icon | ||||||
29835 | DEC A | Is the telephone icon in the ringing phase at the moment? | ||||||
29836 | CALL Z,28660 | If not, make it so | ||||||
29839 | JR 29848 | |||||||
29841 | LD A,(20654) | This is the display file address for the byte in the top-left corner of the telephone icon | ||||||
29844 | DEC A | Is the telephone icon in the ringing phase at the moment? | ||||||
29845 | CALL NZ,28666 | If so, make it appear still (as when between rings) | ||||||
29848 | JP 29680 | Update the icon panel |
Prev: 29731 | Up: Map | Next: 29851 |