Manic Miner: Routine at 35388

| Routines

35388: Decrease the air remaining in the current cavern

Used by the routines at 34574, 36211 and 36904. Returns with the zero flag set if there is no air remaining.
35388 | LD A,(32957) | Update the game clock at 32957
35391 | SUB 4
35393 | LD (32957),A
35396 | CP 252 | Was it just decreased from zero?
35398 | JR NZ,35413 | Jump if not
35400 | LD A,(32956) | Pick up the value of the remaining air supply from 32956
35403 | CP 36 | Has the air supply run out?
35405 | RET Z | Return (with the zero flag set) if so
35406 | DEC A | Decrement the air supply at 32956
35407 | LD (32956),A
35410 | LD A,(32957) | Pick up the value of the game clock at 32957
35413 | AND 224 | A=INT(A/32); this value specifies how many pixels to draw from left to right in the cell at the right end of the air bar
35415 | RLCA
35416 | RLCA
35417 | RLCA
35418 | LD E,0 | Initialise E to 0 (all bits reset)
35420 | OR A | Do we need to draw any pixels in the cell at the right end of the air bar?
35421 | JR Z,35430 | Jump if not
35423 | LD B,A | Copy the number of pixels to draw (1-7) to B
35424 | RRC E | Set this many bits in E (from bit 7 towards bit 0)
35426 | SET 7,E
35428 | DJNZ 35424
35430 | LD A,(32956) | Pick up the value of the remaining air supply from 32956
35433 | LD L,A | Set HL to the display file address at which to draw the top row of pixels in the cell at the right end of the air bar
35434 | LD H,82
35436 | LD B,4 | There are four rows of pixels to draw
35438 | LD (HL),E | Draw the four rows of pixels at the right end of the air bar
35439 | INC H
35440 | DJNZ 35438
35442 | XOR A | Reset the zero flag to indicate that there is still some air remaining; these instructions are redundant, since the zero flag is already reset at this point
35443 | INC A
35444 | RET |