Minigames
Every hands-on action is done with the tool in your hand, not a generic progress bar: a pressure gauge on the pump, a cut line on the hydraulic cutter, a dial for coupling threads, a checklist for the SCBA. Every run shows a timer and finishes with a grade (clean, good or rough).
Kinds
| Kind | How it plays | Used for |
|---|---|---|
| Gauge | An analog dial with momentum: feather the hold to keep it in the band. Surges knock it off (a second line opens, the load swings). Hydraulic tools have a grip meter that drops if you change force too fast | Pump pressure, primer, hydrant valve, spreader force, ram, lifting airbags, winch tension, SCBA refill, hose clamp, bleeding control |
| Procedure | You do each step of the procedure with your hands, one at a time; nothing to put in order. The step decides the motion: crank hand over hand (valves, threads), pump on the beat (primer bulbs, rinsing), steady a load in the band while you hold (lifting, hauling, throttle), switch a lever along its path (brakes, shifters), watch a reading and press in the green (gauges, tell-tales), align onto the mark and set it (fitting, placing, connecting), or hold (radio calls, paperwork). Slips come from how you do it. A config step can force a motion: { text = '...', action = 'crank' }. | Pump operator test, buddy rescue, spill containment, reservoir, portable pump, generator, search pattern, packaging a casualty, investigation report |
| Inspect | Readings are hidden until you test each item (hold). Judge it, then sign off. You can't sign off untested items | SCBA check, hazmat suit check, station tool inspection |
| Choice | Readings appear line by line while a decision timer runs. Wrong answers explain themselves and drop out | Pump diagnostics, truck maintenance, confined space air, inspection alarm panel and sprinklers |
| Pick | A free cursor over a diagram (a car for extrication). Hover a point to read it, mark the right ones, confirm with Q | Stabilisation points, cutting points (avoid airbag inflators), hinge cuts, airbag placement, rope anchors |
| Aim (spray) | Several fires burn at once and new flare-ups appear. Q switches jet and fog. Water is limited and wasted off target | Nozzle hotspot attack, controlled suppression |
| Aim (find) | A thermal lens over a noisy scene with decoys (radiators, appliances, vapour, ash). People pulse, decoys don't | Thermal room search, scene examination, source detection |
| Pattern | Repeat the moves. The rope draws as you tie, hesitating lets it go slack | Knots, hose repack folds |
| Timing | Hold to wind up, release in the sweet spot. Too weak or overswung is a slip. On forcible entry the door cracks with each good strike | Forcible entry with the axe, stuck relief valve, rubble, debris, firebreak raking |
| Track | Hold to cut and steer on the moving line. Thick sections cut slower and heat the blade; overheat it and you wait for it to cool | Hydraulic cutter, hose lay, oil sweeping |
| Align | Turn to the mark and engage, then hold to thread it while it twists off line. Drift too far and it cross-threads | Ram alignment, monitor coupling, tripod, splint, evidence photos |
Hand tools worked with the mouse
Tools you turn, saw or pry by hand open a control next to the work and you work it with the mouse. There is no step list: you have to know what you are doing, and mistakes show up in the world.
| Control | How it plays | Used for |
|---|---|---|
| Turn | Circle the mouse to turn the nut, cap, coupling or valve. Some caps and old valves are seized: knock them loose with the wrench first. Tightening too fast as it snugs up cross-threads it, and you have to back it off half a turn | Hydrant cap and supply coupling, leaking hose couplings, gas meter valves |
| Cab | The truck's controls: parking brake, transmission and the road / pump switch. Shift to pump in drive and it grinds; put it in gear with the brake off and the truck rolls | Engaging the pump |
| Valve | The hydrant's operating nut. The first part is stiff; once water flows, turning too fast slams the line (water hammer) | Opening a hydrant |
| Saw | Hold and drag down to lean into the cut. Ease off through knots, hinges and doubled-up metal, or it binds and kicks back | Chainsaw on fallen trees and doors, rescue saw on car doors |
| Pry | Drag the halligan's fork into the gap next to the lock, click to drive it in, then drag down to lever the door. Jerk it and the fork slips out. With the irons the axe drives it in for you | Forcible entry with the halligan or irons |
| Drag | Pull the loop out of a kinked hose. Yank it and it folds back | Hose kinks |
| Cylinder | Change an SCBA cylinder: close the valve, bleed the line, undo the coupling, take the empty one off, fit the spare, do it up and open the valve. Undo the coupling under pressure and air blasts out; open the valve before it is tight and air leaks. Lost air comes off the new cylinder | Swapping a spare cylinder, also on a crewmate's back |
| Swipe | Drag your ID card through the reader in one smooth swipe. Too fast, too slow or not all the way and it won't read | Clocking in and out (Config.DutySwipe) |
Turn
Saw
Pry
Cylinder
Swipe
Cab
Valve
The props move with your hands. While you work a control, the real object in the world follows it: the wrench turns on the hydrant's top nut and on the gas cylinder as you circle the mouse, the supply coupling slides onto the hydrant outlet as you do it up, the forced door strains open as you lever the halligan (jolts on each strike, slams back if the fork slips, swings open when it gives), and you hold the empty SCBA cylinder as it comes off and the spare as it goes on. Models and offsets: Config.DeviceProps in config_tools.lua.
Worked on the real thing
- Hotspot attack: no panel. Flare-ups burn around the deep-seated fire and you put each one out with the real hose: aim the stream at it until it dies. Jet knocks one down fast, fog covers more but slower. Ones you leave alone grow back, and a new one can flare up (
Config.Nozzle.world). - Spreaders: hold E and the real door is forced open. At each creak, let go for a moment so the tips take a fresh bite; push through it and they slip and the door springs back.
- Cutter: aim the blades at each hinge on the real door and hold E to cut. Off the hinge nothing cuts. Both hinges through and the door comes off (
Config.Extrication.world).
Walk-around jobs
Some routine jobs are done by walking around in the world instead of on a panel:
- Truck check: walk round the truck and inspect each point (bonnet, cab, lockers, pump panel, tanks, tyres, hose bed, lights). The bonnet and doors open, the beacons are tested and a soft tyre is soft on the truck. Mark each point serviceable (E) or write it up (G). A soft tyre you write up is topped up on the spot. Defects you miss stay on the truck. Minigame name
walkaround. - Decontamination: a decon tent with stations from the dirty end to the clean end: rinse, scrub, final rinse, peel the suit off. Stand under the rinse until it is done. Walk into a later station early and you carry the contamination with you: back to the start. Minigame name
decon_walk.
Set either to false in Config.Minigames.games to get the old panel back.
Backing a crewmate up
Target a crewmate on duty and pick Back them up. While you stay close, heavy jobs go easier for them: wider zones, more time, one more slip, partner strikes on the halligan and faster saw cuts. When they start working you kneel in beside them. X stops. Config.Minigames.assist:
assist = {
enabled = true,
range = 4.0, -- metres
maxTime = 120, -- seconds before backing up stops by itself
games = { ram = true, airbags = true, door_work = true, ... },
required = {}, -- jobs that can't be done alone, e.g. { ram = true }
},Getting quicker with experience
Routine jobs get quicker the more often a firefighter does them: fewer strikes and rounds, more time, and the walk-around readings come up faster. Once a job is second nature, jobs in skip become a short progress bar. Counts are kept per character. Config.Minigames.experience:
experience = {
enabled = true,
games = { walkaround = 20, hydrant = 25, cylinder_swap = 15, hose_repack = 15, ... }, -- times until second nature
skip = { hose_repack = true, tool_check = true },
},Complications
After some jobs there is a chance something goes wrong and needs a short extra job of another kind: a slab shifts at a collapse and needs shoring, the ram slips on the sill, roots across a firebreak, a spill running for a drain. Config.Minigames.complications:
complications = {
enabled = true,
chance = 0.25,
list = {
ram = {
{ text = 'The ram slips on the sill: reseat it', kind = 'align', params = { targets = 1, tolerance = 10 } },
},
},
},kind is any of the kinds above.
The scene reacts
The minigame isn't only on the panel. While you play, the world reacts to what you do:
- Close-up camera: the camera moves in over your shoulder and looks at the work (the door, the car, the hotspot, the patient), with a little handheld sway. It eases back out when you're done.
- Hotspot attack: the real hose sprays at the fire (jet or fog, whichever you pick in the minigame) and steam rises off it, with a bigger burst when a hotspot goes out.
- Spreaders: the car door opens as the force builds, and drops back if you lose the bite.
- Cutters, saws, chainsaw: sparks or wood chips fly while you cut, and a bind jolts you back a step.
- Hydrants and valves: a clank on every knock with the wrench.
- SCBA: air hisses out of the set when the cylinder change goes wrong, and the empty cylinder lies on the ground.
- Forcible entry and collapses: every good strike throws splinters off the door; digging out a collapse kicks up dust.
- Hits and slips: a good hit jolts the camera; a slip shakes it and flashes the edges of the screen red. The edges darken a little while a minigame is open, so your eyes go to the work.
Camera settings are in Config.Minigames.camera:
camera = {
enabled = true, -- false keeps the normal camera for everyone
distance = 1.15, -- metres behind your head
side = 0.55, -- metres to the right (over the shoulder)
height = 0.35, -- metres above your head
lift = 9.0, -- degrees it tilts down, so the work sits above the panel
fov = 50.0,
ease = 650, -- ms to move in / out
sway = 0.18, -- handheld sway (0 = none)
linger = 1300, -- ms it stays after a minigame, so back-to-back ones don't jump
},Screenshots
Pump pressure (gauge)
Spreader force (gauge with grip)
Pump operator test (procedure)
SCBA inspection (inspect)
Stabilisation points (pick)
Nozzle hotspot attack (aim)
Thermal search (aim)
Knots (pattern)
Forcible entry (timing)
Cutter (track)
Hydrant coupling (align)
Controls
Panel minigames work on keyboard and controller (game controls, not the mouse). The hand tools above are worked with the mouse; turn, saw and drag also take A / D or S held down.
| Keyboard | Controller | |
|---|---|---|
| Move | WASD / arrows | Stick / d-pad |
| Action | E / SPACE / ENTER | A |
| Second action | Q | RB |
| Stop | BACKSPACE | B |
Difficulty
Config.Minigames in shared/config_minigames.lua:
| Preset | |
|---|---|
casual | Short and forgiving: wide zones, slow movement, 6 slips allowed |
standard | Tool-specific precision and timing, recoverable mistakes, 4 slips |
advanced | Narrow zones, fast drift, multi-step tasks, 3 slips |
A mistake never ends the job by itself: the tool slips and you lose a few seconds or redo a step. Only a run of slips (failAfter) starts that action over.
Each minigame in games can be:
nozzle = true, -- use the preset
nozzle = false, -- off: a short progress bar instead
nozzle = 'advanced', -- its own preset
nozzle = { preset = 'advanced', time = 1.3 }, -- own preset, holds / cuts take 30% longerThe checklists, defects, placards and diagnostics shown are text in Config.DrillContent, so you can translate or extend them.
Old checks = { 'easy', 'medium' } lists in the config still work: they run as a timing minigame (one release per entry, harder entries move faster) instead of a skill bar.
Accessibility
Players open Minigame settings in the tablet's Settings (the gear, top right) to set, for themselves:
- Assist mode: wider zones, slower drift, more time, two extra slips.
- Toggle instead of hold: press once to start, again to stop.
- Slow timing: timing and tracking at half speed, patterns stay visible.
- Reduced motion: no sliding or shaking.
- Larger panel: drawn 20% larger.
- Keep my camera: no close-up camera during minigames.
Server defaults are in Config.Minigames.accessibility.