
Overheat
Hold the trigger too long and your gun cooks. The muzzle glows red, smoke pours off the barrel, and a flashing OVERHEAT warning tells you it won't fire until it cools.Overheat
Guns get hot. Keep the trigger down and smoke starts pouring off the barrel; keep going and it cooks off — OVERHEAT!! flashes red in front of you and the gun refuses to fire until it cools.
Nothing to install but the DLL. The smoke and the warning panel are both built in code at runtime — no asset bundle.
What happens
Heat builds per round. A thin bar appears under your sight line once a gun passes 35% heat, going amber → red as it climbs.
Smoke from about 30% heat. It comes out of the gun's actual firePointTransform, drifts with the barrel while you move, and curls with noise as it rises. Emission scales with heat, so a warm gun wisps and a cooked one gushes.
The muzzle starts glowing at about 45%. The tip of the barrel comes up dull red, goes cherry, then orange as it approaches cook-off — roughly the order real steel does it. It casts actual light, so in a dark room you can see the heat on the walls and on your own hands. Glow is deliberately later than smoke, because metal smokes off before it visibly colours.
At 100% the gun locks out. The trigger does nothing. The warning panel appears and pulses red until heat falls back to 35%, which takes about three seconds. Full cool from there is another second and a half.
The panel pulses on a smooth sine at 2.5 Hz rather than hard-blinking on and off — it reads as just as urgent in a headset without the strobe.
The heat model
One round adds (1 / ShotsToOverheat) × sqrt(10 / roundsPerSecond).
That square root is a deliberate halfway house between "every round costs the same heat" (which makes a minigun overheat in half a second) and "every gun takes the same time" (which makes fire rate meaningless). Faster guns still cook off sooner in wall-clock, but they get more rounds out first. At the defaults — 35 shots, 0.22 cooling:
| Gun | Rounds to overheat | Time on full auto |
|---|---|---|
| 300 RPM | 25 | 4.9s |
| 600 RPM | 35 | 3.5s |
| 900 RPM | 43 | 2.9s |
| 1200 RPM | 50 | 2.5s |
| 3000 RPM | 78 | 1.6s |
Turn Scale By Fire Rate off in BoneMenu if you want a flat round count regardless of weapon.
Cooling runs at 0.22 per second whether you are holding the gun or not, so a cooked weapon you drop or holster is usable again by the time you pick it back up. Lockout ends at 35% heat rather than at zero — that hysteresis is what stops you firing one round, overheating instantly, and repeating.
Semi-auto pistols essentially never overheat, because you cannot pull a trigger 35 times fast enough to outrun the cooling. That is intended.
Settings
BoneMenu → Overheat.
| Default | ||
|---|---|---|
| Shots To Overheat | 35 | The whole difficulty dial, on the front page |
| Cool Per Second | 0.22 | |
| Resume At Heat | 0.35 | Lockout ends here |
| Scale By Fire Rate | on | The sqrt curve above |
| Affect NPC Guns | off | On, and enemies cook their guns too |
| Smoke Starts At | 0.30 | |
| Smoke Amount | 1.0 | Up to 4x if you want it theatrical |
| Barrel Glow | on | |
| Glow Starts At | 0.45 | |
| Glow Size | 1.0 | |
| Glow Casts Light | on | Turn off to save a real-time light per hot gun |
| Show Warning / Heat Bar | on | |
| Flash Rate | 2.5 Hz | |
| Scale / Distance / Height | 1.0 / 0.55 / −0.12 | Where the panel sits relative to your head |
Cool Everything Now on the front page clears all heat instantly.
Install
Requires MelonLoader and BoneLib.
Drop Overheat.dll into BONELAB/Mods/.
Notes
Only your guns heat up, by default. A gun counts as yours when one of the hands attached to its trigger grip belongs to the player's RigManager — NPC hands carry their own manager, so this separates them exactly rather than guessing.
Blocking happens at Gun.Fire(), which is the entry point for a trigger pull, so a locked-out gun skips the whole shot — animation, projectile and ammo — instead of ending up half-fired. Rounds are counted in Gun.OnFire(), which only runs once a shot is actually committed; if that method is unavailable the mod falls back to counting in Fire() and says so in the console.
Guns are pooled in BONELAB — a despawned one is disabled and later handed back out with the same instance id. Heat is keyed on that id, so the mod resets a gun's heat whenever it finds it inactive, and evicts entries that have been cold and untouched for 25 seconds. The dictionary cannot grow across a session.
Particle modules are stripped in this build. VelocityOverLifetime, ForceOverLifetime, LimitVelocityOverLifetime and TextureSheetAnimation all survive IL2CPP as empty shells with no settable members, and ShapeModule.enabled is gone too. The smoke gets its rise from negative gravity and its drift from the noise module, which did survive.
The gun's own materials are never touched. The glow is an additive billboard plus a point light parented to the fire point, not an emissive tint on the weapon. Weapon materials are shared assets — tinting one would light up every copy of that gun in the scene, and there would be nothing dependable to restore afterwards.
The first time you fire, the console prints the gun's RPM and how many rounds it will take to cook — a quick way to confirm the hook landed and to sanity-check your tuning.
Changelog
1.1.0 — Added the glowing muzzle: dull red → cherry → orange as heat climbs, with a real point light so it spills onto nearby surfaces.
1.0.0 — Initial release.