This is the final version of my explanation of the damage formula. With the new findings, the battle simulations are now almost 100% accurate — so we can finally say that we’ve figured out the real damage formula for the game. You can see it in action on the Battle Simulator.
The simplified version of the formula looks like this:
Kills = √Troops × (Attack × Lethality) / (Enemy’s Defense × Enemy’s Health) × SkillMod - Your troop count scales with the square root, which means having a bigger army doesn’t boost your damage by a huge amount. For example, if you use 10,000 troops, the square root is 100 — but doubling your troops to 20,000 only increases it to 144, not 200. So your damage doesn’t double.
- Attack and Lethality have the same impact since they multiply together. That means Lethality isn’t stronger or more important than Attack — both matter equally.
- Your Attack × Lethality is divided by the enemy’s Defense × Health, so the old idea that “Attack reduces Defense” and “Lethality reduces Health” was completely wrong.
- The most important part of the damage formula is SkillMod, which represents the effects of hero and troop skills. This has the biggest influence on damage, so your main and joiner heroes with strong skills play a huge role in deciding the outcome of your battles.
Skill Mod or “Damage Coefficient”
This part is really important because it’s what controls how joiner skills affect your damage. The formula is:
SkillMod = (DamageUp * OppDefenseDown) / (OppDamageDown * DefenseUp)
In the backend (for joiners), both Attack and Lethality buffs are treated the same → they’re
just DamageUp effects. The “attack” vs. “lethality” wording in the game is just flavor
text for joiner heroes. Mechanically, the only thing that separates them is their
effect_op identifier.
Note: The code examples below are from our simulator. They don’t come from the game’s files, so the actual variable names in the game may be different.
Why Different Joiners (Amane + Chenko) Deal More Damage
When you stack identical joiners, their buffs just add up. But when you stack different joiners, the buffs multiply instead, giving you slightly more damage.
Example 1: Four of the Same Hero (Amane or Chenko, each 25%)
Four Amanes → bonus_effects['DamageUp'][102] = 25 + 25 + 25 + 25 = 100
Four Chenkos → bonus_effects['DamageUp'][101] = 25 + 25 + 25 + 25 = 100
damageUp = 1 + 100/100 = 2.0 (100% boost)
Example 2: Two Amanes + Two Chenkos (25% each)
Amane = effect_op 102 → total 50
Chenko = effect_op 101 → total 50
bonus_effects['DamageUp'] = {'101: 50, 102: 50'}
damageUp = math.prod((1.0 + val/100.0) for val in stats_dict['DamageUp'].values())
damageUp = (1 + 50/100) * (1 + 50/100)
damageUp = 1.5 * 1.5 = 2.25 (125% boost)
Result
- Four identical heroes → 2.0 (100% boost)
- Two Amane + Two Chenko → 2.25 (125% boost)
That’s a 12.5% relative increase in damage just from mixing heroes.
Why This Happens
The math.prod function multiplies each unique effect_op separately:
- If all heroes share the same
effect_op, their buffs just add together. -
If they have different
effect_ops, the buffs compound multiplicatively → leading to higher damage.
Attack vs. Lethality — Which Should You Boost?
Now that we understand the Kingshot damage formula, we know that Attack and Lethality multiply with each other. This means boosting the lower stat between them gives you a bigger increase in overall damage.
In most cases, your Attack is much higher than your Lethality, just like your Defense is usually higher than your Health — mainly because Lethality and Health are harder to improve. So, to get a noticeable boost in damage, focus on increasing Lethality, and to reduce incoming damage more effectively, work on raising Health.
Once your Lethality and Health stats are high enough, then it starts making more sense to focus on Attack and Defense again.