Routines |
Prev: 35563 | Up: Map | Next: 35841 |
Used by the routine at 35245. The main entry point is used when resuming the game after it has been paused.
|
||||
35591 | LD HL,39424 | Copy the attribute bytes from 39424 to the bottom third of the screen | ||
35594 | LD DE,23040 | |||
35597 | LD BC,256 | |||
35600 | LDIR | |||
35602 | LD A,(32990) | Pick up the border colour for the current room from 32990 | ||
35605 | OUT (254),A | Restore the border colour | ||
This entry point is used by the routine at 35245.
|
||||
35607 | LD A,(34257) | Pick up the airborne status indicator from 34257 | ||
35610 | CP 255 | Has Willy landed after falling from too great a height, or collided with a nasty, an arrow, a guardian, or Maria? | ||
35612 | JP Z,35841 | If so, lose a life | ||
Now read the keys H, J, K, L and ENTER (which toggle the in-game music).
|
||||
35615 | LD B,191 | Prepare B for reading keys H-J-K-L-ENTER | ||
35617 | LD HL,34274 | Point HL at the music flags at 34274 | ||
35620 | IN A,(C) | Read keys H-J-K-L-ENTER; note that if the game has just resumed after being paused, C holds 0 instead of 254, which is a bug | ||
35622 | AND 31 | Are any of these keys being pressed? | ||
35624 | CP 31 | |||
35626 | JR Z,35638 | Jump if not | ||
35628 | BIT 0,(HL) | Were any of these keys being pressed the last time we checked? | ||
35630 | JR NZ,35640 | Jump if so | ||
35632 | LD A,(HL) | Set bit 0 (the keypress flag) and flip bit 1 (the in-game music flag) at 34274 | ||
35633 | XOR 3 | |||
35635 | LD (HL),A | |||
35636 | JR 35640 | |||
35638 | RES 0,(HL) | Reset bit 0 (the keypress flag) at 34274 | ||
35640 | BIT 1,(HL) | Has the in-game music been switched off? | ||
35642 | JR NZ,35696 | Jump if so | ||
The next section of code plays a note of the in-game music.
|
||||
35644 | XOR A | Reset the inactivity timer at 34272 (the game does not automatically pause after a period of inactivity if the in-game music is playing) | ||
35645 | LD (34272),A | |||
35648 | LD A,(34273) | Increment the in-game music note index at 34273 | ||
35651 | INC A | |||
35652 | LD (34273),A | |||
35655 | AND 126 | Point HL at the appropriate entry in the tune data table at 34399 | ||
35657 | RRCA | |||
35658 | LD E,A | |||
35659 | LD D,0 | |||
35661 | LD HL,34399 | |||
35664 | ADD HL,DE | |||
35665 | LD A,(34252) | Pick up the number of lives remaining (0-7) from 34252 | ||
35668 | RLCA | A=28-4A; this value adjusts the pitch of the note that is played depending on how many lives are remaining (the more lives remaining, the higher the pitch) | ||
35669 | RLCA | |||
35670 | SUB 28 | |||
35672 | NEG | |||
35674 | ADD A,(HL) | Add the entry from the tune data table for the current note | ||
35675 | LD D,A | Copy this value to D (which determines the pitch of the note) | ||
35676 | LD A,(32990) | Pick up the border colour for the current room from 32990 | ||
35679 | LD E,D | Initialise the pitch delay counter in E | ||
35680 | LD BC,3 | Initialise the duration delay counters in B (0) and C (3) | ||
35683 | OUT (254),A | Produce a note of the in-game music | ||
35685 | DEC E | |||
35686 | JR NZ,35691 | |||
35688 | LD E,D | |||
35689 | XOR 24 | |||
35691 | DJNZ 35683 | |||
35693 | DEC C | |||
35694 | JR NZ,35683 | |||
Here we check the teleport keys.
|
||||
35696 | LD BC,61438 | Read keys 6-7-8-9-0 | ||
35699 | IN A,(C) | |||
35701 | BIT 1,A | Is '9' (the activator key) being pressed? | ||
35703 | JP NZ,35735 | Jump if not | ||
35706 | AND 16 | Keep only bit 4 (corresponding to the '6' key), flip it, and move it into bit 5 | ||
35708 | XOR 16 | |||
35710 | RLCA | |||
35711 | LD D,A | Now bit 5 of D is set if '6' is being pressed | ||
35712 | LD A,(34275) | Pick up the WRITETYPER key counter from 34275 | ||
35715 | CP 10 | Has WRITETYPER been keyed in yet? | ||
35717 | JP NZ,35735 | Jump if not | ||
35720 | LD BC,63486 | Read keys 1-2-3-4-5 | ||
35723 | IN A,(C) | |||
35725 | CPL | Keep only bits 0-4 and flip them | ||
35726 | AND 31 | |||
35728 | OR D | Copy bit 5 of D into A; now A holds the number of the room to teleport to | ||
35729 | LD (33824),A | Store the room number at 33824 | ||
35732 | JP 35090 | Teleport into the room | ||
Finally, check the WRITETYPER keys.
|
||||
35735 | LD A,(34275) | Pick up the WRITETYPER key counter from 34275 | ||
35738 | CP 10 | Has WRITETYPER been keyed in yet? | ||
35740 | JP Z,35245 | If so, jump back to the start of the main loop | ||
35743 | LD A,(33824) | Pick up the current room number from 33824 | ||
35746 | CP 28 | Are we in First Landing? | ||
35748 | JP NZ,35245 | If not, jump back to the start of the main loop | ||
35751 | LD A,(34255) | Pick up Willy's y-coordinate from 34255 | ||
35754 | CP 208 | Is Willy on the floor at the bottom of the staircase? | ||
35756 | JP NZ,35245 | If not, jump back to the start of the main loop | ||
35759 | LD A,(34275) | Pick up the WRITETYPER key counter (0-9) from 34275 | ||
35762 | RLCA | Point IX at the corresponding entry in the WRITETYPER table at 34279 | ||
35763 | LD E,A | |||
35764 | LD D,0 | |||
35766 | LD IX,34279 | |||
35770 | ADD IX,DE | |||
35772 | LD BC,64510 | Read keys Q-W-E-R-T | ||
35775 | IN A,(C) | |||
35777 | AND 31 | Keep only bits 0-4 | ||
35779 | CP (IX+0) | Does this match the first byte of the entry in the WRITETYPER table? | ||
35782 | JR Z,35802 | Jump if so | ||
35784 | CP 31 | Are any of the keys Q-W-E-R-T being pressed? | ||
35786 | JP Z,35245 | If not, jump back to the start of the main loop | ||
35789 | CP (IX-2) | Does the keyboard reading match the first byte of the previous entry in the WRITETYPER table? | ||
35792 | JP Z,35245 | If so, jump back to the start of the main loop | ||
35795 | XOR A | Reset the WRITETYPER key counter at 34275 to 0 (an incorrect key was pressed) | ||
35796 | LD (34275),A | |||
35799 | JP 35245 | Jump back to the start of the main loop | ||
35802 | LD B,223 | Read keys Y-U-I-O-P | ||
35804 | IN A,(C) | |||
35806 | AND 31 | Keep only bits 0-4 | ||
35808 | CP (IX+1) | Does this match the second byte of the entry in the WRITETYPER table? | ||
35811 | JR Z,35831 | If so, jump to increment the WRITETYPER key counter | ||
35813 | CP 31 | Are any of the keys Y-U-I-O-P being pressed? | ||
35815 | JP Z,35245 | If not, jump back to the start of the main loop | ||
35818 | CP (IX-1) | Does the keyboard reading match the second byte of the previous entry in the WRITETYPER table? | ||
35821 | JP Z,35245 | If so, jump back to the start of the main loop | ||
35824 | XOR A | Reset the WRITETYPER key counter at 34275 to 0 (an incorrect key was pressed) | ||
35825 | LD (34275),A | |||
35828 | JP 35245 | Jump back to the start of the main loop | ||
35831 | LD A,(34275) | Increment the WRITETYPER key counter at 34275 | ||
35834 | INC A | |||
35835 | LD (34275),A | |||
35838 | JP 35245 | Jump back to the start of the main loop |
Prev: 35563 | Up: Map | Next: 35841 |