Browse docs
Fire and Hose System
Fire system overview
Sky Fire Job includes a dedicated fire runtime with:
- Dynamic fire creation and synchronization
- Fire type profiles with different behavior
- Smoke density, toxic smoke, and confined-space metadata
- Spread logic and environment probing
- Burn decals that build while fire is active
- Burned-out scenes that remain temporarily after extinguishing
The server remains authoritative for active fires and burned scene cleanup.
Hose gameplay
The hose system supports:
- Hydrant connections
- Portable pump support
- Fire vehicle water tanks
- Foam tanks and foam refills
- Radial menu interaction flow
- Synchronized spray start, keep-alive, and stop events
Config.Hose controls water and foam consumption, hose length, supported hydrant props, pump behavior, and compatible fire vehicles.
Firetruck water and foam HUD
The vehicle HUD shows water and foam levels. Use /firetruckhud to show or hide it, and /firetruckhudmove to drag it to another position or change its size. Finish editing with Done or Enter; your layout is saved locally.
Hold Left Ctrl while the HUD is visible to click Water or Foam, then release the key. The same HUD also shows the water level for a supported helicopter Water Bucket.
See Firetruck HUD commands for the editor controls, size limits, key bindings, and visibility conditions.
Multiple vehicle water cannons
Existing single-cannon rows without an ID continue as deckGun with their geometry and tuning preserved.
To opt into several cannons, edit Config.FireSystem.extinguish.firetruck.vehicleModels in sky_firejob/config/config.lua after the existing FireSystem definition. Each row can now have previously absent id and label. In /jobconfig → Fire Jobs → Fire → Extinguishing → Vehicle water cannon, the setting is firetruckWaterCannonModels with columns cannonId/cannonLabel; enablement remains firetruckWaterCannonEnabled. Saved table overrides remain effective.
The following complete two-cannon structure uses placeholders. Replace the model and barrel bones with values verified on your own vehicle, tune its geometry and merge your existing rows; assigning the whole table replaces its list. It does not claim that the default firetruk has a second barrel.
Config.FireSystem.extinguish.firetruck.vehicleModels = {
{
model = "YOUR_SPAWN_NAME",
id = "deckGun",
label = "Roof",
turretBone = "YOUR_ROOF_BARREL_BONE",
turretTipOffset = 1.0,
turretMuzzleOffset = { x = 0.0, y = 0.0, z = 0.0 },
waterVelocity = 30.0,
waterGravityScale = 1.0
},
{
model = "YOUR_SPAWN_NAME",
id = "front",
label = "Front",
turretBone = "YOUR_FRONT_BARREL_BONE",
turretTipOffset = 0.8,
turretMuzzleOffset = { x = 0.0, y = 0.0, z = 0.0 },
waterVelocity = 25.0,
waterGravityScale = 1.0
}
}
Use stable case-sensitive IDs unique within each model, 1–48 ASCII letters/digits/underscore/hyphen. Keep the legacy cannon as deckGun; give each additional cannon its own ID. Do not copy another model's bones/offsets. The vehicle must also be configured in Pump panel → Vehicles (Config.Hose.vehicles) with valid tank, panel, intake and outlet geometry; a cannon row alone does not register a pump vehicle. Inspect actual bones with /debug_vehiclebones and use the existing model editor for pump geometry.
For enhanced pump panels, enable the pump, supply tank-to-pump/external water, build pressure and open each intended outlet. Hold default Left Ctrl in the vehicle HUD, select the named cannon, then use default right mouse to spray. Switching stops the previous stream; release/press spray again. One cannon needs no selector; different crew can use distinct outlets, one operator per outlet. Simple panels retain their supply rules. Existing keybind settings firetruckHudCursorKey, deckGunSprayKey and deckGunSprayGamepadKey are unchanged.
Fire suppression agents
The default setup distinguishes between:
- Water for standard suppression
- Foam for fuel-related or vehicle fuel fires
Vehicle fires use the vehicle_fuel material by default, so foam is the intended extinguishing agent.
Fire profiles
The extended default configuration includes configurable fire profiles for different scene types. These profiles drive values such as:
- Fire class
- Material
- Source scale
- Smoke density
- Toxic smoke state
- Confined-space behavior
- Ventilation impact
The admin fire creator reads these profile definitions directly when opening the fire creator menu.
Register a custom fire type
Custom materials and selectable fire types are separate configuration entries:
| Configuration | Purpose | Where it appears |
|---|---|---|
Config.FireSystem.materials | Defines combustion and which extinguishing agents work | Behavior only; a material is not a selectable fire type |
Config.FireSystem.fireProfiles | Registers a fire type and its runtime values | Admin fire creator and /skyfire |
Config.FireScenarioCreator.firePresets | Allows selected profile keys in the Mission Creator | Mission Creator fire-type list |
Add custom entries at the end of sky_firejob/config/config.lua, after the existing Config.FireSystem block. Use a lowercase, unique key and use the same key in fireProfiles and firePresets.
The following example registers a kitchen grease fire that can be extinguished with the standard fire extinguisher, but not with water, foam, the firetruck cannon, the helicopter bucket, or the portable Water Monitor:
Config.FireSystem.materials.kitchen_grease = {
label = "Kitchen Grease",
fireClass = "K",
combustible = true,
heatRelease = 1.1,
spreadFactor = 0.35,
allowedExtinguishAgents = {
water = false,
foam = false,
water_monitor = false,
extinguisher = true
},
waterEffectiveness = 0.0,
foamEffectiveness = 0.0,
explosionRisk = 0.05
}
Config.FireSystem.fireProfiles = Config.FireSystem.fireProfiles or {}
Config.FireSystem.fireProfiles.kitchen_grease = {
label = "Kitchen Grease Fire",
aliases = { "grease", "greasefire", "kitchenfire" },
fireClass = "K",
stage = { "small", "medium" },
material = "kitchen_grease",
smokeEnabled = true,
smokeDensity = { min = 45, max = 70 },
smokeColor = { r = 105, g = 105, b = 105, a = 220 },
scale = 0.9,
effects = {
flame = {
value = "normal_fire",
label = "Normal Fire",
asset = "scr_martin1",
effectName = "scr_sol1_fire_spot",
scale = 4.0,
zOffset = 0.0
},
smoke = {
value = "normal_smoke",
label = "Normal Smoke",
asset = "core",
effectName = "ent_ray_paleto_gas_plume_amb",
scale = 2.0,
zOffset = 0.2
}
},
confined = true,
ventilation = 0.4,
flameCount = { min = 2, max = 4, integer = true },
radius = { min = 0.8, max = 1.8 },
intensity = { min = 45, max = 70 },
temperature = { min = 420, max = 750, integer = true },
size = { min = 1.4, max = 3.0 },
fuel = { min = 45, max = 75 },
oxygen = { min = 60, max = 82 },
smoke = { min = 50, max = 80 },
spreadSpeed = { min = 0.08, max = 0.22 },
spreadChance = { min = 0.06, max = 0.18 },
flashoverRisk = { min = 4, max = 14 },
damage = { min = 5, max = 10 },
structuralDamage = { min = 0, max = 3 },
lifetime = { min = 360, max = 600, integer = true },
particleScale = { min = 0.7, max = 1.0 },
zOffset = 0.05
}
Config.FireScenarioCreator.firePresets = {
"normal",
"electrical",
"chemical",
"kitchen_grease"
}
firePresets is a list replacement, not an addition to the shipped list. Keep every built-in profile that should remain available and add the custom profile key. A profile appears automatically in the admin fire creator, while only profiles included in firePresets appear in the Mission Creator.
Restart sky_firejob after changing these file-based settings. You can then select Kitchen Grease Fire in either creator or spawn it with /skyfire kitchen_grease.
extinguisher agent and changes which agents are accepted for the custom material.
:::Operational workflow
Typical firefighter gameplay flow:- Go on duty.
- Spawn or access a supported fire vehicle.
- Connect water through truck tank, hydrant, or pump.
- Open hose control from the radial menu.
- Suppress the fire with the correct agent.
- Monitor remaining water, foam, and air supply.
- Clear the scene once active flames are fully resolved.