![]() |
Routines |
| Prev: 30267 | Up: Map | Next: 30419 |
|
Used by the routine at Game_Loop.
|
||||
| Handler_Fuel | 30268 | CALL UpdateScoreDisplay | Call UpdateScoreDisplay. | |
| 30271 | LD HL,(30780) | HL=*Fuel. | ||
| 30274 | LD A,H | Jump to ProcessFuelConsumption if H is lower than 128. | ||
| 30275 | CP 128 | |||
| 30277 | JR C,ProcessFuelConsumption | |||
| 30279 | LD HL,(30766) | HL=*LevelProgressPointer. | ||
| 30282 | LD A,(HL) | A=*HL. | ||
| 30283 | DEC A | Decrease A by one. | ||
| 30284 | JR Z,TriggerOutOfFuel | Jump to TriggerOutOfFuel if A is zero. | ||
| 30286 | CP 49 | Call WaitForNextFrame if A is higher than 49. | ||
| 30288 | CALL NC,WaitForNextFrame | |||
| 30291 | CP 45 | Call WaitForNextFrame if A is lower than 45. | ||
| 30293 | CALL C,WaitForNextFrame | |||
| 30296 | NOP | No operation. | ||
| 30297 | NOP | |||
| 30298 | NOP | |||
| 30299 | NOP | |||
|
Start the "Out Of Fuel" sequence.
|
||||
| TriggerOutOfFuel | 30300 | CALL RemoveSprites | Call RemoveSprites. | |
| 30303 | LD A,(30754) | A=*Speed. | ||
| 30306 | BIT 7,A | Check the direction bit. | ||
| 30308 | LD A,135 | Load the base player sprite into A (135). | ||
| 30310 | JR NZ,SetWheelieSprite | Jump to SetWheelieSprite if the player is moving left. | ||
| 30312 | ADD A,64 | Modify the player sprite ID for the player moving right (199). | ||
| SetWheelieSprite | 30314 | LD (30772),A | Write the player sprite ID to *PlayerSpriteID. | |
| 30317 | CALL Handler_PlayerSprite | Call Handler_PlayerSprite. | ||
|
Print the "OUT OF FUEL" messaging in the footer.
|
||||
| 30320 | LD A,169 | A=169 (INK: BLUE, PAPER: CYAN FLASH: ON). | ||
| 30322 | LD HL,47750 | HL=Messaging_OutOfFuel. | ||
| 30325 | CALL PrintFooterColourString | Call PrintFooterColourString. | ||
|
Play the "out of fuel" audio.
|
||||
| 30328 | LD D,16 | Set an outer loop count in D for 16 iterations. | ||
| 30330 | LD C,1 | Set the initial tone value in C to 1. | ||
| PlayFuelSound_OuterLoop | 30332 | LD HL,7680 | Set the tone duration counter in HL to 7680. | |
| 30335 | LD A,C | Get current tone value. | ||
| PlayFuelSound_ToneLoop | 30336 | LD B,C | Set inner delay counter. | |
| 30337 | OUT (254),A | Send to the speaker. | ||
| 30339 | XOR %00010000 | Flip the speaker bit. | ||
| PlayFuelSound_InnerDelayLoop | 30341 | DJNZ PlayFuelSound_InnerDelayLoop | Decrease the inner delay counter by one and loop back to PlayFuelSound_InnerDelayLoop until the counter is zero. | |
| 30343 | DEC L | Decrease the tone duration low byte by one. | ||
| 30344 | JR NZ,PlayFuelSound_ToneLoop | Jump back to PlayFuelSound_ToneLoop until the tone duration low byte is zero. | ||
| 30346 | DEC H | Decrease the tone duration high byte by one. | ||
| 30347 | JR NZ,PlayFuelSound_ToneLoop | Jump back to PlayFuelSound_ToneLoop until the tone duration high byte is zero. | ||
| 30349 | INC C | Increase the tone frequency by one (higher pitch). | ||
| 30350 | DEC D | Decrease the outer loop counter by one. | ||
| 30351 | JR NZ,PlayFuelSound_OuterLoop | Jump back to PlayFuelSound_OuterLoop until the outer loop counter is zero. | ||
|
Reset the players fuel and restart the game.
|
||||
| 30353 | LD HL,13312 | Write 13312 to *Fuel. | ||
| 30356 | LD (30780),HL | |||
| 30359 | JP Check_DemoMode | Jump to Check_DemoMode. | ||
|
Normal fuel consumption processing.
|
||||
| ProcessFuelConsumption | 30362 | LD A,(30754) | A=*Speed. | |
| 30365 | BIT 7,A | Check the direction bit. | ||
| 30367 | JR NZ,CalculateFuelConsumption | Jump to CalculateFuelConsumption if the player is moving backwards. | ||
|
The player is moving forwards.
|
||||
| 30369 | CPL | Invert the speed for forward movement calculation. | ||
| CalculateFuelConsumption | 30370 | SUB 126 | Calculate the fuel consumption rate in DE; (speed-126)/2. | |
| 30372 | SRL A | |||
| 30374 | LD E,A | |||
| 30375 | LD D,0 | |||
| 30377 | AND A | Subtract the consumption from the players fuel level. | ||
| 30378 | SBC HL,DE | |||
| 30380 | LD (30780),HL | Write the updated fuel value back to *Fuel. | ||
| 30383 | JR C,Handler_Fuel_0 | Jump to Handler_Fuel_0 if the fuel value is negative. | ||
|
Update the fuel gauge display.
|
||||
| 30385 | LD A,H | Get the fuel high byte. | ||
| 30386 | SRL A | Divide it by 4. | ||
| 30388 | SRL A | |||
| 30390 | CPL | Invert the byte for the gauge display. | ||
| 30391 | SUB 12 | Abjust by an offset of 12 bytes for where the gauge displays. | ||
| 30393 | LD L,A | Set this value in L. | ||
| 30394 | LD H,186 | Load the high byte in H with 186. | ||
| 30396 | LD DE,23141 | Point DE to the gauge position 23141 (attribute buffer location). | ||
| 30399 | CALL CopyTwelveBytes | Call CopyTwelveBytes. | ||
|
Handle fuel-related audio effects during gameplay.
|
||||
| 30402 | LD HL,(30780) | HL=*Fuel. | ||
| 30405 | LD A,H | Call 27984 if the fuel level is 1024 or higher, or for every 64 fuel units (which creates pulses as the fuel decreases). | ||
| 30406 | CP 4 | |||
| 30408 | CALL NC,27984 | |||
| 30411 | BIT 6,L | |||
| 30413 | CALL NZ,27984 | |||
| Handler_Fuel_0 | 30416 | JP WaitForNextFrame | Jump to WaitForNextFrame. | |
| Prev: 30267 | Up: Map | Next: 30419 |