Manic Miner: Routine at 37173

| Routines

37173: Move and draw the Kong Beast in the current cavern

Used by the routine at 34574.
37173 | LD HL,23558 | Flip the left-hand switch at (0,6) if Willy is touching it
37176 | CALL 37403
37179 | LD A,(32987) | Pick up the Kong Beast's status from 32987
37182 | CP 2 | Is the Kong Beast already dead?
37184 | RET Z | Return if so
37185 | LD A,(29958) | Pick up the sixth pixel row of the left-hand switch from the screen buffer at 28672
37188 | CP 16 | Has the switch been flipped?
37190 | JP Z,37369 | Jump if not
The left-hand switch has been flipped. Deal with opening up the wall if that is still in progress.
37193 | LD A,(24433) | Pick up the attribute byte of the tile at (11,17) in the buffer at 24064
37196 | OR A | Has the wall there been removed yet?
37197 | JR Z,37238 | Jump if so
37199 | LD HL,32625 | Point HL at the bottom row of pixels of the wall tile at (11,17) in the screen buffer at 28672
37202 | LD A,(HL) | Pick up a pixel row
37203 | OR A | Is it blank yet?
37204 | JR NZ,37228 | Jump if not
37206 | DEC H | Point HL at the next pixel row up
37207 | LD A,H | Have we checked all 8 pixel rows yet?
37208 | CP 119
37210 | JR NZ,37202 | If not, jump back to check the next one
37212 | LD A,(32800) | Pick up the attribute byte of the background tile for the current cavern from 32800
37215 | LD (24433),A | Change the attributes at (11,17) and (12,17) in the buffer at 24064 to match the background tile (the wall there is now gone)
37218 | LD (24465),A
37221 | LD A,114 | Update the seventh byte of the guardian definition at 32965 so that the guardian moves through the opening in the wall
37223 | LD (32971),A
37226 | JR 37238 |
37228 | LD (HL),0 | Clear a pixel row of the wall tile at (11,17) in the screen buffer at 28672
37230 | LD L,145 | Point HL at the opposite pixel row of the wall tile one cell down at (12,17)
37232 | LD A,H
37233 | XOR 7
37235 | LD H,A
37236 | LD (HL),0 | Clear that pixel row as well
Now check the right-hand switch.
37238 | LD HL,23570 | Flip the right-hand switch at (0,18) if Willy is touching it (and it hasn't already been flipped)
37241 | CALL 37403
37244 | JR NZ,37277 | Jump if the switch was not flipped
37246 | XOR A | Initialise the Kong Beast's pixel y-coordinate at 32988 to 0
37247 | LD (32988),A
37250 | INC A | Update the Kong Beast's status at 32987 to 1: he is falling
37251 | LD (32987),A
37254 | LD A,(32800) | Pick up the attribute byte of the background tile for the current cavern from 32800
37257 | LD (24143),A | Change the attributes of the floor beneath the Kong Beast in the buffer at 24064 to match that of the background tile
37260 | LD (24144),A
37263 | LD HL,28751 | Point HL at (2,15) in the screen buffer at 28672
37266 | LD B,8 | Clear the cells at (2,15) and (2,16), removing the floor beneath the Kong Beast
37268 | LD (HL),0
37270 | INC L
37271 | LD (HL),0
37273 | DEC L
37274 | INC H
37275 | DJNZ 37268
37277 | LD A,(32987) | Pick up the Kong Beast's status from 32987
37280 | OR A | Is the Kong Beast still on the ledge?
37281 | JR Z,37369 | Jump if so
The Kong Beast is falling.
37283 | LD A,(32988) | Pick up the Kong Beast's pixel y-coordinate from 32988
37286 | CP 100 | Has he fallen into the portal yet?
37288 | JR Z,37363 | Jump if so
37290 | ADD A,4 | Add 4 to the Kong Beast's pixel y-coordinate at 32988 (moving him downwards)
37292 | LD (32988),A
37295 | LD C,A | Copy the pixel y-coordinate to C; this value determines the pitch of the sound effect
37296 | LD D,16 | This value determines the duration of the sound effect
37298 | LD A,(32883) | Pick up the border colour for the current cavern from 32883
37301 | OUT (254),A | Make a falling sound effect
37303 | XOR 24
37305 | LD B,C
37306 | DJNZ 37306
37308 | DEC D
37309 | JR NZ,37301
37311 | LD A,C | Copy the Kong Beast's pixel y-coordinate back into A
37312 | RLCA | Point DE at the entry in the screen buffer address lookup table at 33536 that corresponds to the Kong Beast's pixel y-coordinate
37313 | LD E,A
37314 | LD D,131
37316 | LD A,(DE) | Point HL at the address of the Kong Beast's location in the screen buffer at 24576
37317 | OR 15
37319 | LD L,A
37320 | INC DE
37321 | LD A,(DE)
37322 | LD H,A
37323 | LD D,129 | Use bit 5 of the value of the game clock at 32957 (which is toggled once every eight passes through the main loop) to point DE at the graphic data for the appropriate Kong Beast sprite
37325 | LD A,(32957)
37328 | AND 32
37330 | OR 64
37332 | LD E,A
37333 | LD C,0 | Draw the Kong Beast to the screen buffer at 24576
37335 | CALL 36852
37338 | LD HL,33836 | Add 100 to the score
37341 | CALL 37118
37344 | LD A,(32988) | Pick up the Kong Beast's pixel y-coordinate from 32988
37347 | AND 120 | Point HL at the address of the Kong Beast's location in the attribute buffer at 23552
37349 | LD L,A
37350 | LD H,23
37352 | ADD HL,HL
37353 | ADD HL,HL
37354 | LD A,L
37355 | OR 15
37357 | LD L,A
37358 | LD A,6 | The Kong Beast is drawn with yellow INK
37360 | JP 36447 | Set the attribute bytes for the Kong Beast
The Kong Beast has fallen into the portal.
37363 | LD A,2 | Set the Kong Beast's status at 32987 to 2: he is dead
37365 | LD (32987),A
37368 | RET |
The Kong Beast is still on the ledge.
37369 | LD A,(32957) | Pick up the value of the game clock at 32957
37372 | AND 32 | Use bit 5 of this value (which is toggled once every eight passes through the main loop) to point DE at the graphic data for the appropriate Kong Beast sprite
37374 | LD E,A
37375 | LD D,129
37377 | LD HL,24591 | Draw the Kong Beast at (0,15) in the screen buffer at 24576
37380 | LD C,1
37382 | CALL 36852
37385 | JP NZ,36102 | Kill Willy if he collided with the Kong Beast
37388 | LD A,68 | A=68 (INK 4: PAPER 0: BRIGHT 1)
37390 | LD (23599),A | Set the attribute bytes for the Kong Beast in the buffer at 23552
37393 | LD (23600),A
37396 | LD (23567),A
37399 | LD (23568),A
37402 | RET |