Overheat
A gauge that a boost or engine fills while it's used and that, at its limit, costs the player power or stops them until it cools.
On this page
An overheat gauge charges for a boost in heat rather than in a meter that runs out. In Excitebike 64 the throttle and the turbo both heat the engine up to 7000, only the turbo heats it past that, and reaching 12000 cuts the engine to 0.3 of its torque until the heat is back to 70001,2.
- Power cutExcitebike 64 (2000). The turbo heats the engine to an overheat at 12000, after which the engine gives 0.3 of its torque whichever button is held, and no takeoff boost, until the heat falls to 7000.1,2,3
Games
| Game | Year | How | Note |
|---|---|---|---|
| Excitebike 64 | 2000 | Power cut | the turbo heats the engine to an overheat at 12000, after which the engine gives 0.3 of its torque whichever button is held, and no takeoff boost, until the heat falls to 7000 |
| BuildCraft | 2011 | Explode | the combustion engine heats as it runs and explodes past its limit unless water cools it |
Every claim about this mechanic, by game (3)
References
- ^ abIn Excitebike 64's US Rev 1 build,
engine_update_heatmoves a rider's engine heat each bike update by a rate fromsEngineHeatRates, picked by whether the heat is above 7000 and by the drive: Z (the turbo), else A (the throttle), else neither. At 7000 or below the rates are −20 with neither, +20 on the throttle, and +40 on the turbo; above 7000 they're −12, −8, and +20. A positive rate while Z is held is divided by the rider's turbo stat, which is 1.0 for CPU riders. The heat is held between 0 and 12000. Reaching 12000 setsoverheated, and while it's set the rate is −20 whatever is held, until the heat is back to 7000 or below. At 60 updates a second, a turbo stat of 1.0 takes a cold engine to 12000 in 425 updates, about 7.1 seconds, and an overheat lasts 250 updates, about 4.2 seconds; the throttle alone holds the heat around 7000 (computed). While the rear wheel is on the ground and the event isn't stopped (EVENT_STOPPED), a surface flaggedSURFACE_COOLS_ENGINE(commented "resets the engine heat") sets the heat to 0.Codechasmlol/excitebike64revisedHow we know
56/* The rider's drive: 2 turbo (Z), 1 throttle (A), 0 neither. */ ⋮ 61 if (rider->input & INPUT_Z) { 62 return 2; ⋮ 64 throttle = rider->input & INPUT_A; 65 return throttle != 0; ⋮ 78 drive = drive_input(rider); 79 hot = 0; 80 if (rider->engine.heat > 7000.0f) { 81 hot = 1; ⋮ 83 if (rider->engine.overheated) { 84 hot = drive = 0; ⋮ 86 rate = sEngineHeatRates[hot][drive]; ⋮
src/game/unnamed/s0_800358C0.c lines 56–106 at 9cdb194 · upstream ↗ 3999f32 sEngineHeatRates[0x6] = { 4000 /* 0x000 */ -20.0f, 20.0f, 40.0f, -12.0f, 4001 /* 0x010 */ -8.0f, 20.0f,
src/data/game_800C2280.c lines 3999–4002 at 9cdb194 · upstream ↗ 115 rider = &gRiders[riderIdx]; 116 engine_update_heat(rider);
src/game/unnamed/s0_800358C0.c lines 114–116 at 9cdb194 · upstream ↗ 125 if (rider->rearWheel.airTicks < 1 && (gEvent.flags & EVENT_STOPPED) == 0) {src/game/unnamed/s0_800358C0.c line 125 at 9cdb194 · upstream ↗ 163 if (rider->rearWheel.surface->flags & SURFACE_COOLS_ENGINE) { 164 rider->engine.heat = 0.0f;
src/game/unnamed/s0_800358C0.c lines 163–165 at 9cdb194 · upstream ↗ 16#define SURFACE_COOLS_ENGINE 0x0200 /* resets the engine heat */include/structs/surface.h line 16 at 9cdb194 · upstream ↗ 349 rider->bike.mass = 250.0f; 350 rider->wallFriction = 0.3f; 351 rider->landing = 1.0f; 352 rider->turbo = 1.0f;
src/game/bikenew.c lines 349–352 at 9cdb194 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-22.
Revised after a check by a second AI model, 2026-10-22.
- ^ abIn Excitebike 64's US Rev 1 build,
engine_updatescales the engine's torque bysTurboPowerScale(1.225) while Z, the turbo, is held, bysThrottlePowerScale(0.75) on A, the throttle, alone, and bysOverheatPowerScale(0.3) while the engine is overheated, whichever of the two is held. The scale applies only while the rear wheel is on the ground and the event isn't stopped (EVENT_STOPPED). With neither button held, or with either held while the event is stopped, the torque is −3728.4995 (commented "engine braking") above a speed of 1 and 0 below it. The turbo gives about 1.63 times the throttle's torque, and an overheated engine 0.4 times the throttle's and about 0.24 times the turbo's (computed).Codechasmlol/excitebike64revisedHow we know
190 if ((rider->input & (INPUT_Z | INPUT_A)) != 0 && (gEvent.flags & EVENT_STOPPED) == 0) { 191 if (rider->rearWheel.airTicks < 1) { 192 if (rider->engine.overheated != 0) { 193 tmp = sOverheatPowerScale; 194 } else if (rider->input & INPUT_Z) { 195 tmp = sTurboPowerScale; 196 } else { 197 tmp = sThrottlePowerScale; ⋮ 199 torque = torque * tmp; 200 rider->engine.torque = torque; ⋮ 202 } else if (1.0f < rider->speed) { 203 rider->engine.torque = -3728.4995f; /* engine braking */ ⋮
src/game/unnamed/s0_800358C0.c lines 190–206 at 9cdb194 · upstream ↗ 4003f32 sTurboPowerScale = 1.225f; 4004f32 sThrottlePowerScale = 0.75f; 4005f32 sOverheatPowerScale = 0.3f;
src/data/game_800C2280.c lines 4003–4005 at 9cdb194 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-22.
Revised after a check by a second AI model, 2026-10-22.
- ^In Excitebike 64's US Rev 1 build,
bike_update_jumpboosts a human rider who leaves the ground while riding and holding Z, the turbo, first pressed fewer than 10 updates earlier (turboPressFrame), on a jump whose predicted time in the air (landingTime, twice the vertical speed over gravity) is longer than a minimum: 0.25 seconds up to a takeoff speed of 10, 0.5 above 20, and linear between. Below a speed of 20 and while the engine isn't overheated, the bike's velocity is scaled so its speed gains 5, less half the speed above 10: 5 at 10 or less, 2.5 at 15, and nothing at 20. If the bike's pitch (rot[0]) is −0x17FF or more, its angular velocity also loses 2 times its right axis; the LodgeNet build subtracts 3, and the decompilers comment that "retail pitches the bike less". CPU riders get no takeoff boost.Codechasmlol/excitebike64How we know
2235 if (rider->rearWheel.airTicks > 0 && rider->frontWheel.airTicks > 0) { 2236 if (rider->airFrames <= 0) { ⋮ 2240 rider->landingTime = (rider->bike.vel.y + rider->bike.vel.y) / GRAVITY; ⋮ 2242 takeoffSpeed = rider->speed; 2243 minAirTime = 0.5f; 2244 if (!(takeoffSpeed > 20.0f)) { 2245 minAirTime = 0.25f; 2246 if (takeoffSpeed > 10.0f) { 2247 minAirTime = (takeoffSpeed - 10.0f) / 40.0f + 0.25f; ⋮ 2250 if (minAirTime < rider->landingTime) {
src/game/bikenew.c lines 2235–2250 at 9cdb194 · upstream ↗ 2258 if (rider->isCpu == 0 && rider->crashState == CRASH_STATE_RIDING && gRaceFrame - rider->turboPressFrame < 10 && (rider->input & INPUT_Z)) { 2259 /* turbo at takeoff: a boost (none when overheated) */ 2260 speed = rider->speed; 2261 if (speed < 20.0f && rider->engine.overheated == 0) { 2262 boost = 5.0f; 2263 if (speed > 10.0f) { 2264 boost = 5.0f - (speed - 10.0f) * 0.5f; ⋮ 2266 if (speed != 0.0f) { 2267 speed = boost / speed + 1.0f; 2268 } else { 2269 speed = 0.0f; ⋮ 2271 rider->bike.vel.x *= speed; ⋮
src/game/bikenew.c lines 2258–2285 at 9cdb194 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-22.
Checked by a second AI model, 2026-10-22.
Sources
Code
- chasmlol. 2026. “Excitebike 64 decompilation (chasmlol/excitebike64).” Commit 9cdb194. chasmlol/excitebike64 @ 9cdb194 · licence, all uses