Repository navigation
Fire Rate and Reloading
Every weapon in Flan's Mod Ultimate 2.0 answers two questions after each shot: how long until the next round, and whether that round needs a reload first. This page documents both, for handheld guns, deployed guns, AA guns, driveable weapon banks, seat guns, mecha hand guns and Apocalypse shooters.
Two ideas run through all of it:
- A cadence is a delay in ticks, and it may carry a fraction. A weapon firing faster than once per tick fires several times in the same tick instead of being rounded down to it.
- Reloading never lets a weapon outrun its own rate of fire. Wherever a reload and a cadence both apply, the wait is the longer of the two.
- Ticks, rounds per minute and sub-tick rates
- Apocalypse shooters
- Handheld and deployed guns
- AA guns
- Driveable weapon banks
- Banks firing mounted guns
- Banks firing shells, bombs and missiles
- Magazines and ReloadRounds
- Choosing what is loaded
- Seat guns and mecha hand guns
- Heads-up display
- Key reference
- Compatibility summary
The game runs at 20 ticks per second, so a rate of fire and a delay convert as:
delayTicks = 1200 / roundsPerMin
roundsPerMin = 1200 / delayTicks
1200 RPM is one round per tick, 600 RPM is one every two ticks, 60 RPM is one per second.
Rates above 1200 RPM work. A weapon whose delay is shorter than a tick fires more than once in the same tick, because firing adds its delay to whatever cooldown is left rather than overwriting it. The same carry keeps rates that do not divide evenly into ticks honest: 800 RPM is 1.5 ticks per shot, and over sixty ticks it produces forty rounds rather than the thirty a round-up would give.
The one limit is a floor of 0.05 ticks, or 24000 RPM, which exists so that a
delay of zero — reachable through an attachment multiplier of zero, or by
declaring no rate at all — cannot make a firing loop spin forever.
A weapon that has not fired for a while does not bank shots. Its cooldown settles just below zero and stays there, so opening fire after a long pause releases one round, not a minute's worth.
Survivors and skull drones carry the fractional remainder between shots using the same cooldown rule as other guns. Full-auto and minigun modes may fire several rounds in one tick; semi-auto and burst modes fire at most one round per tick. Each round checks the loaded ammunition again, so an empty gun stops the firing loop and starts its usual reload rather than firing through it.
Survivors aim for 20 ticks at a visible target within 15 blocks, then attempt fire every tick while those conditions hold. Losing sight, leaving range or changing targets starts a new aim period. The old additional 10/20-tick difficulty wait between trigger pulls no longer applies. Survivor semi-auto uses twice the gun's delay, and every third burst round uses three times the delay. Drones use the gun's delay with a minimum of five ticks for semi-auto.
Survivors reload from their consumable reserves in the gun's reload time. Drones keep their reusable reserve magazine and wait three times the gun's reload time. Reloads replace the cooldown with the full reload delay; fractional carry applies between shots, not across a reload.
GunType resolves its cadence in this order:
grip secondary fire (when the gun is in secondary mode and has a grip)
> RoundsPerMin
> ShootDelay (legacy ticks)
> 2 ticks (600 RPM)
Attachment ShootDelayMultipliers then multiply the result, and an attachment
that overrides the fire mode to burst floors it at three ticks.
ReloadTime is the whole-magazine reload, in ticks. It is scaled by attachment
reload multipliers and by the loaded ammunition's ReloadTimeMultiplier, and a
gun with more than one ammo slot (NumAmmoSlots) pays ReloadTime / slots for
each slot it actually has to fill, so a shotgun loading three shells waits for
three shells and not for a full tube.
When the gun runs dry, the wait is max(ReloadTime, ShootDelay). A quick
reload cannot make a slow weapon cycle faster than its own action allows. This is
what governs a launcher whose ammunition holds a single round: every shot is
followed by a reload, so ReloadTime is the key that decides its rate of fire and
ShootDelay barely matters.
Deployed guns use the same GunType keys and the same rule. They reload when the
loaded item has no rounds left in it, which is not the same as the slot being
empty — a spent belt is still an item.
AAGunType reads the same two cadence keys with the same precedence:
RoundsPerMin > ShootDelay > 1 tick
The fallback is one tick rather than two, which is the cadence an AA gun declaring neither key has always had.
ReloadTime is scaled by the heaviest ReloadTimeMultiplier among the rounds
loaded, and floored at the gun's own cadence exactly as a handheld gun's is.
A multi-barrel mount reloads as one weapon. The crew reloads only once every
barrel has run dry, and then loads them all together on a single ReloadTime. A
barrel that empties early simply stops firing while the others carry on; it does
not stand the whole mount down. ShareAmmo mounts feed every barrel from one
slot and are unaffected.
RoundsPerMin on an AA gun counts firing events, not projectiles. With
FireAlternately false every loaded barrel fires on the same event, so projectile
output is event RPM multiplied by NumBarrels and NumBullets.
A driveable has a primary and a secondary bank. What a bank is determines which rules apply to it:
Primary / Secondary
|
The bank is | Governed by |
|---|---|---|
Gun |
mounted guns | Banks firing mounted guns |
Shell, Bomb, Missile, Mine
|
the vehicle's own ordnance | Banks firing shells, bombs and missiles |
None |
nothing | — |
Both banks share one cooldown readout each, covering reloading and the delay between shots alike. A driver only needs to know whether the weapon can fire.
A bank whose shoot points carry a PilotGun or AddGun mount fires a real
GunType, so by default the gun owns both its cadence and its reload time.
The vehicle overrides that only by stating a key of its own, and it does so per
key:
| The definition states | Cadence from | Reload from |
|---|---|---|
| nothing | the mounted gun | the mounted gun |
ShootDelayPrimary (or any alias) |
the vehicle | the mounted gun |
ReloadTimePrimary |
the mounted gun | the vehicle |
| both | the vehicle | the vehicle |
ReadWeaponsFromGunTypes true |
the gun, always | the gun, always |
ReadWeaponsFromGunTypes is therefore no longer the only way to defer to a gun;
it is the way to make deferring unconditional, so that a vehicle key added later
cannot quietly shadow the gun category.
With ReadWeaponsFromGunTypes true, a mounted gun bank also plays its gun
type's shoot sound and uses that gun's sound range, even if the driveable
defines a shoot sound for the bank. Crewed passenger seat guns use their own
gun type's shoot and reload sounds independently of the driver's banks.
The gun's own ReloadSound plays on every reload of such a bank, whoever owns the
timings, including the reload that follows loading ammunition into its slot. A gun
without one falls back only to that bank's ReloadSoundPrimary /
ReloadSoundSecondary: the shared ReloadSound and ShootReloadSound belong to
the main gun, so a machine gun never sounds like a shell being loaded. Only the
restocked bank reloads; loading shells or a passenger's belt leaves a gun bank alone.
FlashModel DefaultFlash enables the three-frame default muzzle flash on a
driveable. Successful shots from primary and secondary gun or shell banks flash
at the specific shoot point and barrel that fired. Passenger guns flash at their
GunOrigin barrel. Flashes follow the live muzzle and aim as the driveable moves
or turns.
A mounted gun's FlashModel and FlashTexture replace the default flash for that
point. Its MuzzleFlashModel is used when it has no FlashModel. Its
ShowMuzzleFlashParticle, MuzzleFlashParticle, and MuzzleFlashParticleSize
settings also apply at that muzzle. Existing ShootParticlesPrimary and
ShootParticlesSecondary effects continue to spawn separately.
The WW2 Tiger I (WW2_Vehicle_TigerI_1A) includes the setting as an example.
A deployable gun uses its gun definition's FlashModel in the same way; the
WW2 MG42 Zweibein (WW2_MG_MG42ZB_1A) also selects DefaultFlash.
A bank firing the vehicle's own ordnance has no gun to defer to. Its cadence — the delay between rounds within one magazine — resolves like this:
ShootDelayPrimarySeconds (seconds, x20)
> RoundsPerMinPrimary
> ShootDelayPrimary > ShellDelay > BombDelay
> 60 rounds per minute
with ShootDelaySecondarySeconds, RoundsPerMinSecondary, ShootDelaySecondary
and bare ShootDelay as the secondary bank's equivalents. The first key present
in the file wins, so a pack carrying several for backwards compatibility still
gets the reading it intends.
Its reload time is the longest figure the definition states anywhere for that bank:
reloadTime = max( ReloadTime, ReloadTimePrimary,
ShootDelayPrimarySeconds, RoundsPerMinPrimary,
ShootDelayPrimary, ShellDelay, BombDelay, ShootDelay,
the resolved cadence )
Every key is converted to ticks first. Taking the maximum rather than a priority
order is deliberate, and it is what keeps old packs working: a definition that
expresses a tank's whole loading cycle as ShellDelay 60 and states no reload
time still reloads in three seconds, because its one stated figure is also its
longest. A definition that states both a fast cadence and a slow reload gets
both, used for what each describes.
Because the reload can never fall below the cadence, a bomb rack that states only a release interval behaves exactly as it always did: its "reload" and its interval are the same number.
A bank fires a magazine, then reloads. The magazine holds:
magazineSize = min( ReloadRoundsPrimary, RoundsPerItem of the loaded ammunition )
RoundsPerItem is declared on the ammunition and defaults to one round per item,
which is why a tank shell costs a full reload after every shot.
ReloadRoundsPrimary / ReloadRoundsSecondary, with ReloadRounds as a shared
fallback, exist for a weapon that is reloaded more often than its ammunition item
would imply. A Panzer II feeding its 2 cm gun from ten-round magazines states
ReloadRoundsPrimary 10 whatever the ammunition item holds, and the gun then
fires ten rounds at its cadence, reloads, and fires ten more. Zero, the default,
leaves the ammunition item's own count in charge.
Rounds are counted as fired, not as consumed. A creative crew reloads on exactly the schedule everyone else does, even though their ammunition is never used up. A reload also happens early if the item being fired runs out before the magazine does, which is what a partly spent belt does.
Every reload plays the bank's ReloadSoundPrimary / ReloadSoundSecondary,
falling back to a shared ReloadSound.
An ordnance bank fires what the crew has chambered, not simply whatever sits in the lowest slot.
- The first round aboard is the one loaded. Slots are ranked by the order they were filled in, so a crew that stows armour-piercing first has armour-piercing chambered. Slots filled in the same tick — by a command, for instance — are ranked by slot number, lowest first.
- Chambering costs the bank's reload time, whether it is the first round aboard, the round after a magazine ran out, or a round the crew swapped to.
-
Press the ammunition key to swap. This is the same binding that picks a
handheld gun's ammunition,
[by default, listed as Preferred Ammo in the Controls screen. It moves to the next usable round in slot order, preferring the primary ordnance bank and falling back to the secondary — so a fighter-bomber withPrimary GunandSecondary Bombcycles its bombs. - Swapping a shell costs a fresh reload, because it means working one round out of the breech and another in. Swapping again interrupts that reload and starts another, so a crew may keep changing its mind for as long as it is willing to keep waiting.
- Swapping a bomb or a missile is free. They are selected on their racks rather than loaded into anything.
What is chambered survives saving and reloading the world, mid-reload included, and is tracked whether or not anyone is aboard — so mounting a vehicle that is already stocked costs nothing.
A passenger seat's gun is outside every driveable key above. It uses its own
GunType cadence and its own ReloadTime, reloading when its magazine is
spent and playing its own ReloadSound. A hull with twenty passenger mounts
therefore needs no driveable timing keys at all — only correct gun definitions.
Loading ammunition into a seat gun's slot also costs that reload, just as
restocking a driver's gun bank does: putting the first belt into an empty gun,
swapping in a different round, or topping the slot up all make the gunner wait
out ReloadTime before the first shot. Firing, and the automatic refill from
cargo when a belt runs out, do not count as a restock.
Mecha hand guns behave the same way, with two deliberate floors: a semi-automatic hand gun cannot cycle faster than five ticks, and a failed reload costs at least four.
A weapon is called ready whenever it is not reloading. The ordinary delay between shots deliberately does not show as a reload: a gunner holding the trigger on an autocannon would otherwise watch the line flicker between reloading and ready at the cyclic rate, which tells them nothing.
A driver, and the crew of an AA gun, see one readiness line per weapon bank. Both read identically, in the same words:
Shell: Ready the weapon can fire
Shell: Ready (7/10) ... with 7 of its 10 rounds left before a reload
Shell: Reload Time: 3.5 seconds reloading, and how long is left of it
Shell: No Ammo nothing aboard to fire
The round count appears only when a magazine holds more than one round, so a tank
gun reloading after every shell simply reads Shell: Ready, while an autocannon
carrying ReloadRoundsPrimary 10 counts its burst down.
A mounted gun gets one line naming the weapon instead, so a gunner can tell
which gun the numbers belong to. This covers the gun on a seat, a deployed gun,
and a driver's weapon bank whose type is Gun — a tank's coaxial machine gun is
reported as the machine gun it is, not as an anonymous "ordnance bank":
MG 34: 247/300
MG 34: Reload Time: 1.4 seconds
MG 34: No Ammo
The count is what the gun's ammunition slot holds against what went into it at the last restock. In creative, where firing never consumes the item, the count still runs down towards the next reload. A seat mounting no gun shows no line.
Each crew member sees only the weapons they work. The driver sees both weapon banks and, under Current Ammo, the round loaded in each of them. A passenger sees only the gun on their own seat and the round it is loaded with; the driver's banks and smoke are not shown to them.
So the driver of a Panzer II sees both of its weapons at once: its 2 cm gun as a shell bank counting down its magazine, and its coaxial machine gun by name.
| Key | Type | Applies to | Purpose |
|---|---|---|---|
RoundsPerMin |
float RPM |
GunType, AAGunType
|
Rate of fire; overrides ShootDelay. |
ShootDelay |
float ticks |
GunType, AAGunType
|
Legacy cadence. |
ReloadTime |
int ticks |
GunType, AAGunType
|
Magazine reload; the running-dry wait is this or the cadence, whichever is longer. |
ShootDelayPrimarySeconds / ShootDelaySecondarySeconds
|
float seconds | DriveableType |
Highest-priority bank cadence. |
RoundsPerMinPrimary / RoundsPerMinSecondary
|
float RPM | DriveableType |
Bank cadence as a rate. |
ShootDelayPrimary / ShellDelay / BombDelay
|
float ticks | DriveableType |
Primary bank cadence aliases, in priority order. |
ShootDelaySecondary / ShootDelay
|
float ticks | DriveableType |
Secondary bank cadence aliases. |
ReloadTimePrimary / ReloadTimeSecondary
|
int ticks | DriveableType |
Bank reload time. |
ReloadTime |
int ticks | DriveableType |
Shared reload time, counted into both banks. |
ReloadRoundsPrimary / ReloadRoundsSecondary
|
int rounds | DriveableType |
Rounds fired between reloads, when fewer than the ammunition holds. |
ReloadRounds |
int rounds | DriveableType |
Shared fallback for both banks. |
ReloadSoundPrimary / ReloadSoundSecondary
|
sound | DriveableType |
Bank reload sound. |
ReloadSound |
sound | DriveableType |
Shared fallback for both banks. |
ReadWeaponsFromGunTypes |
bool | DriveableType |
Makes mounted gun types unconditionally authoritative. |
RoundsPerItem |
int rounds | ammunition | Rounds an ammunition item holds; defaults to one. |
ReloadTimeMultiplier |
float | ammunition | Scales the reload time of whatever loads this round. |
- Packs authoring only
ShootDelayorRoundsPerMinare unchanged, except that rates that did not divide evenly into ticks are now honoured instead of being rounded up. - A driveable bank stating only a delay key keeps that delay as both its cadence and its reload time, so nothing slows down.
- A gun bank that previously relied on
ReadWeaponsFromGunTypesstill behaves identically. A gun bank that did not now defers to its mounted gun instead of silently sitting at 60 RPM, unless the definition states a key of its own. -
ReloadRounds, the sharedReloadTimeand the sharedReloadSoundare new keys. Omitting them keeps the previous behaviour exactly. - An AA gun declaring neither
RoundsPerMinnorShootDelaykeeps its one-round- per-tick cadence.
A gun with one ammo slot containing live multi-round ammunition uses a tactical reload duration. By default this is 80% of the ordinary ReloadTime; TacticalReloadMultiplier configures the factor. This is a gameplay default, not a claim about historical reload speeds. Set the multiplier to 1, or TacticalReloadTime 0, to retain ordinary timing. A positive TacticalReloadTime gives an explicit duration instead; attachment, ammunition and enchantment multipliers still apply. Empty guns use their ordinary reload duration.
Internal/multiple-slot and single-round loads receive no automatic bonus. An explicit positive tactical time enables it when they contain live ammunition; the existing proportional slot-reload calculation still applies. The secondary grip uses its own SecondaryReloadTime. NPCs and other integrations querying equipped weapon properties receive the same ammunition-aware duration.
The reviewed belt-fed Vickers, M240, M2, M60, M249, M1919, MG 34, MG 42 and Maxim categories set TacticalReloadMultiplier 1 to preserve their current belt service cycle. Category settings remain editable through the Category System.
SecondarySwitchTime and SecondaryUnSwitchTime independently control entering and leaving secondary mode (defaults: eight ticks, or 0.4 seconds; zero disables a delay). The server selects the duration and rejects switching while the weapon is busy or a reload is pending. Shots and reload requests stay blocked until the switch finishes, and the previous burst queue is cleared. The client displays a brief dip; SecondarySwitchMovement false removes that movement without removing the delay.
A grip attachment using RenderOnlyOnMode true hides its model and ammunition in primary mode, except during a switch. This is intended for mode-dependent or deployed components; a physically mounted launcher should normally remain visible. These controls do not load glTF animation clips or refund ammunition when changing modes.