![]() |
Routines |
| Prev: 7423 | Up: Map | Next: 749B |
|
Continues from the routine at 73E4. Checks whether Sam is standing next to a fuse, door, light switch or telephone, and updates the icon panel as appropriate.
|
||||||||
| 7425 | LD A,(HL) | A=Sam's y-coordinate | ||||||
| 7426 | LD DE,$73CF | Point DE at the list of x-coordinates of the house doors (at 73CF) | ||||||
| 7429 | CP $1F | 31 is the y-coordinate of the house doors | ||||||
| 742B | JR Z,$7433 | Jump if Sam's y-coordinate is 31 | ||||||
| 742D | CP $21 | 33 is the y-coordinate of the shop doors | ||||||
| 742F | JR NZ,$7445 | Jump unless Sam's y-coordinate is 33 | ||||||
| 7431 | LD E,$DC | DE=73DC (list of x-coordinates of shop doors) | ||||||
| 7433 | DEC L | L=0x01 | ||||||
| 7434 | LD A,(DE) | A=x-coordinate of a door (or 0xFF) | ||||||
| 7435 | INC E | Point DE at the next x-coordinate in the list | ||||||
| 7436 | INC A | Have we reached the end of the list? | ||||||
| 7437 | JR Z,$7445 | Jump if so (Sam's not standing next to a door) | ||||||
| 7439 | DEC A | A=x-coordinate of the door | ||||||
| 743A | CP (HL) | Is Sam's x-coordinate the same? | ||||||
| 743B | JR NZ,$7434 | Jump back if not to check the next door | ||||||
|
This entry point is used by the routine at 73E4.
|
||||||||
| 743D | LD A,($7FA8) | Set bit 6 at 7FA8: door icon | ||||||
| 7440 | SET 6,A | |||||||
| 7442 | LD ($7FA8),A | |||||||
| 7445 | LD L,$04 | Point HL at byte 0x04 of Sam's buffer | ||||||
| 7447 | BIT 0,(HL) | Is Sam indoors? | ||||||
| 7449 | JP Z,$73F0 | Update the icon panel now if not | ||||||
| 744C | LD L,$02 | A=Sam's y-coordinate | ||||||
| 744E | LD A,(HL) | |||||||
| 744F | CP $21 | Is Sam inside a shop? | ||||||
| 7451 | JR Z,$7468 | Jump if so | ||||||
| 7453 | SUB $06 | Keep subtracting 6 (the height of a floor) from Sam's y-coordinate until it's negative | ||||||
| 7455 | JR NC,$7453 | |||||||
| 7457 | CP $FB | Is Sam's y-coordinate 1, 7, 13, 19, 25 or 31? | ||||||
| 7459 | JP NZ,$73F0 | Update the icon panel now if not (Sam's on a staircase) | ||||||
| 745C | CALL $75A4 | Is Sam standing next to a fuse that has not been blown yet? | ||||||
| 745F | JR NZ,$7468 | Jump if not | ||||||
| 7461 | LD HL,$7FA8 | Set bit 7 at 7FA8: fuse icon | ||||||
| 7464 | SET 7,(HL) | |||||||
| 7466 | LD H,$E6 | 0xE6=Sam | ||||||
| 7468 | CALL $F436 | Is Sam standing next to a light switch? | ||||||
| 746B | JR Z,$7474 | Jump if not | ||||||
| 746D | LD HL,$7FA8 | Set bit 5 at 7FA8: light bulb icon | ||||||
| 7470 | SET 5,(HL) | |||||||
| 7472 | LD H,$E6 | 0xE6=Sam | ||||||
| 7474 | CALL $749E | Is Sam standing next to a telephone? | ||||||
| 7477 | JP Z,$73F0 | 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.
|
||||||||
| 747A | LD HL,$7FA8 | Set bit 4 at 7FA8: telephone icon | ||||||
| 747D | SET 4,(HL) | |||||||
| 747F | JR C,$7491 | Jump if the telephone is not ringing | ||||||
| 7481 | LD A,($5C78) | Collect the value of the system variable FRAMES, which is incremented every 20ms | ||||||
| 7484 | BIT 5,A | Bit 5 of FRAMES alternates every 0.64s | ||||||
| 7486 | JR Z,$7491 | Jump if it's zero now | ||||||
| 7488 | LD A,($50AE) | This is the display file address for the byte in the top-left corner of the telephone icon | ||||||
| 748B | DEC A | Is the telephone icon in the ringing phase at the moment? | ||||||
| 748C | CALL Z,$6FF4 | If not, make it so | ||||||
| 748F | JR $7498 | |||||||
| 7491 | LD A,($50AE) | This is the display file address for the byte in the top-left corner of the telephone icon | ||||||
| 7494 | DEC A | Is the telephone icon in the ringing phase at the moment? | ||||||
| 7495 | CALL NZ,$6FFA | If so, make it appear still (as when between rings) | ||||||
| 7498 | JP $73F0 | Update the icon panel | ||||||
| Prev: 7423 | Up: Map | Next: 749B |