![]() |
Routines |
| Prev: 35841 | Up: Map | Next: 36147 |
|
Used by the routine at 35841.
|
||||
| 35914 | LD HL,16384 | Clear the top two-thirds of the display file | ||
| 35917 | LD DE,16385 | |||
| 35920 | LD BC,4095 | |||
| 35923 | LD (HL),0 | |||
| 35925 | LDIR | |||
| 35927 | XOR A | Initialise the temporary game status buffer variable at 34276; this variable will determine the distance of the foot from the top of the screen | ||
| 35928 | LD (34276),A | |||
| 35931 | LD DE,40256 | Draw Willy at (12,15) | ||
| 35934 | LD HL,18575 | |||
| 35937 | LD C,0 | |||
| 35939 | CALL 37974 | |||
| 35942 | LD DE,40032 | Draw the barrel underneath Willy at (14,15) | ||
| 35945 | LD HL,18639 | |||
| 35948 | LD C,0 | |||
| 35950 | CALL 37974 | |||
|
The following loop draws the foot's descent onto the barrel that supports Willy while producing a sound effect.
|
||||
| 35953 | LD A,(34276) | Pick up the distance variable from 34276 | ||
| 35956 | LD C,A | Point BC at the corresponding entry in the screen buffer address lookup table at 33280 | ||
| 35957 | LD B,130 | |||
| 35959 | LD A,(BC) | Point HL at the corresponding location in the display file | ||
| 35960 | OR 15 | |||
| 35962 | LD L,A | |||
| 35963 | INC BC | |||
| 35964 | LD A,(BC) | |||
| 35965 | SUB 32 | |||
| 35967 | LD H,A | |||
| 35968 | LD DE,40000 | Draw the foot at this location, without erasing the foot at the previous location; this leaves the portion of the foot sprite that's above the ankle in place, and makes the foot appear as if it's at the end of a long, extending leg | ||
| 35971 | LD C,0 | |||
| 35973 | CALL 37974 | |||
| 35976 | LD A,(34276) | Pick up the distance variable from 34276 | ||
| 35979 | CPL | A=255-A | ||
| 35980 | LD E,A | Store this value (63-255) in E; it determines the (rising) pitch of the sound effect that will be made | ||
| 35981 | XOR A | A=0 (black border) | ||
| 35982 | LD BC,64 | C=64; this value determines the duration of the sound effect | ||
| 35985 | OUT (254),A | Produce a short note whose pitch is determined by E | ||
| 35987 | XOR 24 | |||
| 35989 | LD B,E | |||
| 35990 | DJNZ 35990 | |||
| 35992 | DEC C | |||
| 35993 | JR NZ,35985 | |||
| 35995 | LD HL,22528 | Prepare BC, DE and HL for setting the attribute bytes in the top two-thirds of the screen | ||
| 35998 | LD DE,22529 | |||
| 36001 | LD BC,511 | |||
| 36004 | LD A,(34276) | Pick up the distance variable from 34276 | ||
| 36007 | AND 12 | Keep only bits 2 and 3 | ||
| 36009 | RLCA | Shift bits 2 and 3 into bits 3 and 4; these bits determine the PAPER colour: 0, 1, 2 or 3 | ||
| 36010 | OR 71 | Set bits 0-2 (INK 7) and 6 (BRIGHT 1) | ||
| 36012 | LD (HL),A | Copy this attribute value into the top two-thirds of the screen | ||
| 36013 | LDIR | |||
| 36015 | AND 250 | Reset bits 0 and 2, and retain all other bits | ||
| 36017 | OR 2 | Set bit 1 (INK 2) | ||
| 36019 | LD (22991),A | Copy this attribute value to the cells at (14,15), (14,16), (15, 15) and (15, 16) (where the barrel is, so that it remains red) | ||
| 36022 | LD (22992),A | |||
| 36025 | LD (23023),A | |||
| 36028 | LD (23024),A | |||
| 36031 | LD A,(34276) | Add 4 to the distance variable at 34276; this will move the foot sprite down two pixel rows | ||
| 36034 | ADD A,4 | |||
| 36036 | LD (34276),A | |||
| 36039 | CP 196 | Has the foot met the barrel yet? | ||
| 36041 | JR NZ,35953 | Jump back if not | ||
|
Now print the "Game Over" message, just to drive the point home.
|
||||
| 36043 | LD IX,34164 | Print "Game" (see 34164) at (6,10) | ||
| 36047 | LD C,4 | |||
| 36049 | LD DE,16586 | |||
| 36052 | CALL 38528 | |||
| 36055 | LD IX,34168 | Print "Over" (see 34168) at (6,18) | ||
| 36059 | LD C,4 | |||
| 36061 | LD DE,16594 | |||
| 36064 | CALL 38528 | |||
| 36067 | LD BC,0 | Prepare the delay counters for the following loop; the counter in C will also determine the INK colours to use for the "Game Over" message | ||
| 36070 | LD D,6 | |||
|
The following loop makes the "Game Over" message glisten for about 1.57s.
|
||||
| 36072 | DJNZ 36072 | Delay for about a millisecond | ||
| 36074 | LD A,C | Change the INK colour of the "G" in "Game" at (6,10) | ||
| 36075 | AND 7 | |||
| 36077 | OR 64 | |||
| 36079 | LD (22730),A | |||
| 36082 | INC A | Change the INK colour of the "a" in "Game" at (6,11) | ||
| 36083 | AND 7 | |||
| 36085 | OR 64 | |||
| 36087 | LD (22731),A | |||
| 36090 | INC A | Change the INK colour of the "m" in "Game" at (6,12) | ||
| 36091 | AND 7 | |||
| 36093 | OR 64 | |||
| 36095 | LD (22732),A | |||
| 36098 | INC A | Change the INK colour of the "e" in "Game" at (6,13) | ||
| 36099 | AND 7 | |||
| 36101 | OR 64 | |||
| 36103 | LD (22733),A | |||
| 36106 | INC A | Change the INK colour of the "O" in "Over" at (6,18) | ||
| 36107 | AND 7 | |||
| 36109 | OR 64 | |||
| 36111 | LD (22738),A | |||
| 36114 | INC A | Change the INK colour of the "v" in "Over" at (6,19) | ||
| 36115 | AND 7 | |||
| 36117 | OR 64 | |||
| 36119 | LD (22739),A | |||
| 36122 | INC A | Change the INK colour of the "e" in "Over" at (6,20) | ||
| 36123 | AND 7 | |||
| 36125 | OR 64 | |||
| 36127 | LD (22740),A | |||
| 36130 | INC A | Change the INK colour of the "r" in "Over" at (6,21) | ||
| 36131 | AND 7 | |||
| 36133 | OR 64 | |||
| 36135 | LD (22741),A | |||
| 36138 | DEC C | Decrement the counter in C | ||
| 36139 | JR NZ,36072 | Jump back unless it's zero | ||
| 36141 | DEC D | Decrement the counter in D (initially 6) | ||
| 36142 | JR NZ,36072 | Jump back unless it's zero | ||
| 36144 | JP 34762 | Display the title screen and play the theme tune | ||
| Prev: 35841 | Up: Map | Next: 36147 |