| Prev: 6DEB | Up: Map | Next: 6E40 |
6DFF: Consume fuel and update gauge display
|
Decrements fuel level by 1 every 2 frames (on even ticks only). At 50fps, this equals ~25 units/second. A full tank (255) lasts ~10 seconds. Fuel consumption does NOT vary with scroll speed.
|
||||
| consume_fuel | 6DFF | LD A,($5EEF) | Skip if odd tick (fuel only consumed on even ticks). | |
| 6E02 | AND $01 | |||
| 6E04 | CP $00 | |||
| 6E06 | RET NZ | |||
| 6E07 | LD A,($5F66) | Decrement fuel level in state_fuel. | ||
| 6E0A | DEC A | |||
| 6E0B | LD ($5F66),A | |||
| 6E0E | AND $03 | Skip gauge update unless (fuel AND 3) == 0 (every 4th decrement). | ||
| 6E10 | CP $00 | |||
| 6E12 | RET NZ | |||
| 6E13 | LD A,($5F66) | If fuel == 0, game over (jump to handle_player_death). | ||
| 6E16 | CP $00 | |||
| 6E18 | JP Z,handle_player_death | |||
| 6E1B | AND $C0 | If fuel low (top 2 bits = 0), call register_low_fuel to set low fuel warning. | ||
| 6E1D | CP $00 | |||
| 6E1F | CALL Z,register_low_fuel | |||
| update_fuel_gauge | 6E22 | LD A,($5F66) | Calculate gauge position: B = $A8 (row), C = (fuel >> 2) + $40 (column). | |
| 6E25 | LD B,$A8 | |||
| 6E27 | SRL A | |||
| 6E29 | SRL A | |||
| 6E2B | ADD A,$40 | |||
| 6E2D | LD C,A | |||
| 6E2E | CALL calculate_pixel_address | Compute screen address from B,C coordinates. | ||
| draw_fuel_gauge_loop | 6E31 | LD A,$08 | Loop counter: 8 rows of gauge. | |
| 6E33 | LD D,$86 | Set pixel pattern $86 for gauge. | ||
| draw_fuel_gauge_row_loop | 6E35 | PUSH AF | Draw row, move down, decrement counter, loop for 8 rows. | |
| 6E36 | CALL calculate_fuel_gauge_offset | |||
| 6E39 | INC H | |||
| 6E3A | POP AF | |||
| 6E3B | DEC A | |||
| 6E3C | JP NZ,draw_fuel_gauge_row_loop | |||
| 6E3F | RET | |||
| Prev: 6DEB | Up: Map | Next: 6E40 |