![]() |
Routines |
| Prev: 8FF4 | Up: Map | Next: 90EA |
| 9028 | LD A,($8407) | Pick up the number of the current cavern from 8407 | ||
| 902B | INC A | Increment the cavern number | ||
| 902C | CP $14 | Is the current cavern The Final Barrier? | ||
| 902E | JR NZ,$9091 | Jump if not | ||
| 9030 | LD A,($845A) | Pick up the game mode indicator from 845A | ||
| 9033 | OR A | Are we in demo mode? | ||
| 9034 | JP NZ,$9090 | Jump if so | ||
| 9037 | LD A,($845D) | Pick up the 6031769 key counter from 845D | ||
| 903A | CP $07 | Is cheat mode activated? | ||
| 903C | JR Z,$9090 | Jump if so | ||
|
Willy has made it through The Final Barrier without cheating.
|
||||
| 903E | LD C,$00 | Draw Willy at (2,19) on the ground above the portal | ||
| 9040 | LD DE,$8260 | |||
| 9043 | LD HL,$4053 | |||
| 9046 | CALL $8FF4 | |||
| 9049 | LD DE,$B2E0 | Draw the swordfish graphic (see B2E0) over the portal | ||
| 904C | LD HL,$40B3 | |||
| 904F | CALL $8FF4 | |||
| 9052 | LD HL,$5853 | Point HL at (2,19) in the attribute file | ||
| 9055 | LD DE,$001F | Prepare DE for addition | ||
| 9058 | LD (HL),$2F | Set the attributes for the upper half of Willy's sprite at (2,19) and (2,20) to 0x2F (INK 7: PAPER 5) | ||
| 905A | INC HL | |||
| 905B | LD (HL),$2F | |||
| 905D | ADD HL,DE | Set the attributes for the lower half of Willy's sprite at (3,19) and (3,20) to 0x27 (INK 7: PAPER 4) | ||
| 905E | LD (HL),$27 | |||
| 9060 | INC HL | |||
| 9061 | LD (HL),$27 | |||
| 9063 | ADD HL,DE | Point HL at (5,19) in the attribute file | ||
| 9064 | INC HL | |||
| 9065 | ADD HL,DE | |||
| 9066 | LD (HL),$45 | Set the attributes for the fish at (5,19) and (5,20) to 0x45 (INK 5: PAPER 0: BRIGHT 1) | ||
| 9068 | INC HL | |||
| 9069 | LD (HL),$45 | |||
| 906B | ADD HL,DE | Set the attribute for the handle of the sword at (6,19) to 0x46 (INK 6: PAPER 0: BRIGHT 1) | ||
| 906C | LD (HL),$46 | |||
| 906E | INC HL | Set the attribute for the blade of the sword at (6,20) to 0x47 (INK 7: PAPER 0: BRIGHT 1) | ||
| 906F | LD (HL),$47 | |||
| 9071 | ADD HL,DE | Set the attributes at (7,19) and (7,20) to 0x00 (to hide Willy's feet just below where the portal was) | ||
| 9072 | LD (HL),$00 | |||
| 9074 | INC HL | |||
| 9075 | LD (HL),$00 | |||
|
Now play a celebratory sound effect.
|
||||
| 9077 | LD BC,$0000 | Prepare C and D for the celebratory sound effect | ||
| 907A | LD D,$32 | |||
| 907C | XOR A | A=0 (black border) | ||
| 907D | OUT ($FE),A | Produce the celebratory sound effect: Willy has escaped from the mine | ||
| 907F | XOR $18 | |||
| 9081 | LD E,A | |||
| 9082 | LD A,C | |||
| 9083 | ADD A,D | |||
| 9084 | ADD A,D | |||
| 9085 | ADD A,D | |||
| 9086 | LD B,A | |||
| 9087 | LD A,E | |||
| 9088 | DJNZ $9088 | |||
| 908A | DEC C | |||
| 908B | JR NZ,$907D | |||
| 908D | DEC D | |||
| 908E | JR NZ,$907D | |||
| 9090 | XOR A | A=0x00 (the next cavern will be Central Cavern) | ||
| 9091 | LD ($8407),A | Update the cavern number at 8407 | ||
|
The next section of code cycles the INK and PAPER colours of the current cavern.
|
||||
| 9094 | LD A,$3F | Initialise A to 0x3F (INK 7: PAPER 7) | ||
| 9096 | LD HL,$5800 | Set the attributes for the top two-thirds of the screen to the value in A | ||
| 9099 | LD DE,$5801 | |||
| 909C | LD BC,$01FF | |||
| 909F | LD (HL),A | |||
| 90A0 | LDIR | |||
| 90A2 | LD BC,$0004 | Pause for about 0.004s | ||
| 90A5 | DJNZ $90A5 | |||
| 90A7 | DEC C | |||
| 90A8 | JR NZ,$90A5 | |||
| 90AA | DEC A | Decrement the attribute value in A | ||
| 90AB | JR NZ,$9096 | Jump back until we've gone through all attribute values from 0x3F down to 0x01 | ||
| 90AD | LD A,($845A) | Pick up the game mode indicator from 845A | ||
| 90B0 | OR A | Are we in demo mode? | ||
| 90B1 | JP NZ,$8691 | If so, demo the next cavern | ||
|
The following loop increases the score and decreases the air supply until it runs out, while playing a sound effect.
|
||||
| 90B4 | CALL $8A3C | Decrease the air remaining in the current cavern | ||
| 90B7 | JP Z,$8691 | Move to the next cavern if the air supply is now gone | ||
| 90BA | LD HL,$842E | Add 1 to the score | ||
| 90BD | CALL $90FE | |||
| 90C0 | LD IX,$8429 | Print the new score at (19,26) | ||
| 90C4 | LD C,$06 | |||
| 90C6 | LD DE,$507A | |||
| 90C9 | CALL $92BA | |||
| 90CC | LD C,$04 | This value determines the duration of the sound effect | ||
| 90CE | LD A,($80BC) | Pick up the remaining air supply (S) from 80BC | ||
| 90D1 | CPL | D=2*(63-S); this value determines the pitch of the sound effect (which decreases with the amount of air remaining) | ||
| 90D2 | AND $3F | |||
| 90D4 | RLC A | |||
| 90D6 | LD D,A | |||
| 90D7 | LD A,$00 | Produce a short note | ||
| 90D9 | OUT ($FE),A | |||
| 90DB | LD B,D | |||
| 90DC | DJNZ $90DC | |||
| 90DE | LD A,$18 | |||
| 90E0 | OUT ($FE),A | |||
| 90E2 | LD B,D | |||
| 90E3 | DJNZ $90E3 | |||
| 90E5 | DEC C | |||
| 90E6 | JR NZ,$90D7 | |||
| 90E8 | JR $90B4 | Jump back to decrease the air supply again | ||
| Prev: 8FF4 | Up: Map | Next: 90EA |