Mechanics · the engine heart
The Kingshot damage formula
Kingshot's Expedition combat runs the same engine State of Survival uses — close enough that SoS's open-source code is the most reliable reference we have. This is the whole formula, end to end, in plain words first and full spec below.
Start here — the one-line version
If you've never opened a damage formula in your life, here's the whole fight in one breath:
army size × per-troop power × who-counters-who × skills.
Bigger armies hit harder. Stronger troops hit harder. Landing the right troop type against the enemy adds a flat bonus. Hero and joiner skills multiply the result. Everything below is just those four ideas, made exact — and marked for how sure we are of each piece.
1. Per-troop attack and defense
Every troop carries four base stats stored as small integers: Attack, Lethality, Defense, Health. All your bonuses — research, gear, pets, charms, hero stats — are percentages layered on top. They combine into two numbers per troop: an attack value and a defense value.
att_per_troop = base_atk × (1 + atk%/100) × base_let × (1 + let%/100) / 100 def_per_troop = base_def × (1 + def%/100) × base_hp × (1 + hp%/100) / 100
/100 normalizes the product of the two stat values. Across every tier and troop type, base Lethality = base Defense = 10 — only Attack and Health vary by tier.So a stat with "Attack" in its name and one with "Lethality" both feed the same attack value, multiplicatively. That's why a pure-attack build and a pure-lethality build aren't interchangeable: each factor multiplies the other, and the product is what counts.
2. The round damage formula
For each attacking squad type, against the enemy squad it's engaging this round:
damage = army_factor × att_per_troop_attacker / def_per_troop_target × type_bonus × SkillMod × fatigue_factor / 100 deaths = ceil(damage)
Five multipliers and a divisor. Don't take our word for the arithmetic — drag the levers below and watch deaths recompute. It starts on the canonical example; every value the simulator runs flows through exactly this.
3. What each term means
Army factor
army_factor = sqrt(N_squad_attacker × armyMin) armyMin = min(N_total_attacker, N_total_defender), fixed at fight start
This is the term most simplified calculators get wrong. It's a square root of your attacking squad's size times the smaller total army in the fight — and armyMin is computed once at the start and held constant for the whole battle, even as troops die. Confirmed against the SoS engine and the Bear-trap example.
Type bonus & stat bonuses
A flat +10% damage when the attacker's squad type counters the target's: Infantry beats Cavalry, Cavalry beats Archer, Archer beats Infantry. It's a damage bonus only — there is no defensive type bonus. Confirmed.
Everything else you'd call a "bonus" — attack %, lethality %, defense %, health % from research, gear, pets and charms — has already been folded into att_per_troop and def_per_troop above. A Gordon joiner and an HP pill that both grant the same health % do exactly the same thing to the math.
SkillMod
SkillMod = (DamageUp × OppDefenseDown) / (OppDamageDown × DefenseUp)
The single multiplier that captures every hero skill, joiner skill and widget effect outside the visible stat bonuses. Your damage-ups and the enemy's defense-downs sit in the numerator; the enemy's damage-downs and your own defense-ups in the denominator. It's why four Chenkos lose to two Chenkos plus two Amanes — stacking the same op code has diminishing structure, while diversifying the families multiplies cleanly.
Fatigue factor
fatigue_factor = 1 − round_index × 0.0001 round 0 starts at 1.0
4. The round-zero worked example
This is the anchor. If an engine reproduces this number, its core arithmetic is right; if it returns 187 or 191, something is broken. Round 0, attacker Infantry against defender Infantry:
-- army sizes N_squad_attacker = 40,233 Inf N_total_attacker = 40,233 + 40,323 + 40,233 = 120,789 N_total_defender = 23,644 + 27,644 + 27,584 = 78,872 armyMin = min(120,789, 78,872) = 78,872 army_factor = sqrt(40,233 × 78,872) = 56,335 -- per-troop stats (T10.1 infantry, base_atk 491) att_per_troop = 491 × (1+293.66%) × 10 × (1+251.82%) / 100 = 680 def_per_troop = 2557.9 -- multipliers SkillMod = 1.26 (attacker DamageUp only) type_bonus = 1.00 (Inf vs Inf, no counter) fatigue = 1.0000 (round 0) -- result damage = 56,335 × 680 / 2557.9 × 1.00 × 1.26 × 1.0 / 100 = 188.7 deaths = ceil(188.7) = 189
5. How a round actually runs
A round is a single simultaneous-action cycle. Both fighters compute their damage from the state at the start of the round, and deaths are only applied at the end. That's why the engine produces symmetric outcomes and the occasional double-kill draw.
- Roll every chance-based skill once. Each success injects its effect into the relevant SkillMod family for this round only.
- Attacker Infantry hits the first available enemy line.
- Attacker Cavalry hits — subject to the bypass roll below.
- Attacker Archer hits.
- Mirror steps 2–4 for the defender.
- Sum all incoming damage on each squad, cap at squad size, apply deaths.
- Tick down timed buffs, reset round-only debuffs.
- End if either side has zero total troops; otherwise next round.
In normal PvP there's no round cap and no timeout draw — the fight runs until one army is gone. Confirmed. (Bear Hunt is a separate model that caps at 10 rounds.) In a rally, only the rally leader's troops fight; up to four joiners contribute skills under a four-joiner cap, and leaders must be mythics — all of which feed the same SkillMod above.
6. Targeting, bypass and volley
Each squad attacks the first available enemy line in fixed order: Infantry, then Cavalry, then Archer. "Available" means the line has at least one troop alive at the start of the round.
Cavalry bypass (Ambusher). Roughly 20% of the time a cavalry squad bypasses the frontline and strikes archers directly — one roll per round per cavalry-attacking fighter. Confirmed in-game as a troop ability; the exact 20% is the consistently quoted community figure.
Archer volley. A 10% chance to fire a double attack, modeled as +10% expected archer damage or a per-round roll. Probable — the trait is in the in-game description, but the rate isn't independently confirmed for Kingshot.
FAQ
Is this an official Kingshot tool?
No. Absy Labs is community-built and not affiliated with or endorsed by KingsGroup. It's free and stays free.
Why grade values confirmed / probable / speculative?
Because most "calculators" copy a simplified formula off one guide and never say where it came from. We refuse to ship a number that's secretly a guess wearing a confident font, so every value says how sure we are.
Where does the data come from?
The combat math is read from the open-source SoS engine and checked against in-game battle reports; hero, gear and widget stats are pulled from the live game catalog so the simulator never drifts out of date.
Next up in the methodology series: SkillMod & op codes, stat-bonus aggregation, troops & tiers. Want them prioritised? Tell me in Discord.
See the formula run on your roster.
Quick Fight shows this exact math round by round on a real matchup.