The Last Spell

The Last Spell

Not enough ratings
Last Spell Damage Formulas
By peddroelm
breakdown of damage calculation chains
   
Award
Favorite
Favorited
Unfavorite
While this remains surprisingly accurate for release version ..here's updated version
testing Methodology
this game in its current state has Dev logging enabled to
"<Drive>:\Users\<user>\AppData\LocalLow\Ishtar Games\The Last Spell\Logs\"
on my Windows machine.

It doesn't log much combat damage chain related info out of the gate (has the dodge rolls) but with a little dnSpy code re-compiling help extra calls to the logging function can be inserted in various points of interest.

The result is a 'low effort' mod for the game version [0.92.1.3_beta] that replaces TheLastStand.dll with a version with extra combat logging .

Low effort because:
- it logs in the same file as the dev log and thus the output will be mixed.
- some of the functions in the damage chain are also called by UI helpers during the targeting process (will dump extra combat chain log lines while aiming/evaluating attacks not just only while actually executing a damaging ability)
- will not survive the next patch/release - as it will for sure send it an updated TheLastStand.dll.

So this is not a quality of life easy to use mod, for the moment a testing tool.

example 'cleaned up' combat log output start of Lighning Strike propagation Chain

Zuzanna 1442632329 uses Lightning Strike : !! WAS HIT !! Dodge roll : 59 < -14 = ([17 TargetDodge] * [1 skill dodge mul ] * [1 range ring dodge multiplier] - [31 Accuracy] ) ; Clawer (840376793) Skill(weapon) Base Damage Range 89 - 159; skill damage multiplier 1.5 // Compute Damage Data Damage Range 134 - 238 with skill damage multiplier 1.5 applied // Compute Damage Data Damage Range 201.6 - 238 upped by [CLAMPED] Reliability; 65% unit reliability; 0% reliability from perks; //Compute Caster Range Damage Range 369.936 - 436.73 after applying *1.835 Damage Multiplier for 'MagicalDamage' Damage Type //Compute Caster Range Damage Range 458.7206 - 541.5452 after applying *(1.24 OverallDamage Multiplier + 0 NOT_SpecialistPerk) [!CLAMPED!] //Compute Caster Range Damage Range 458.7206 - 541.5452 after applying *1 Injury Multiplier //Compute Caster Range ROUNDED damage range 459 - 542 //Compute Caster Range Damage Range 459 - 542 after applying 'Isolated' and/or 'Opportunistic' and/or 'Momentum' multipliers //Compute Final Damage Range 0 sum multiplier LoneWolf & Relentless Perks + 0 overall damage from ?other? perks //Compute Perk Percentage Damage Range 459 - 542 after compute perk damage range //Compute Final Damage Range Damage Range 417 - 493 AFTER resistance multiplier (- Caster DR reduction = *(1- 0.18
  • ) )
    Damage Range 417 - 493 after Subtracting target's block = 0 //Compute Final Damage Range
    Final Damage Range 417 - 493; 0.1992831 FixedRngRoll (if > 0); 0.9684955 RNG ROLL; 432 Selected Damage in Range
    !!CRIT!! [PLAYER] to Crit ROLL : 44 < [62 unit CTC] + [0 Attack Crit bonus(ex martial artist)] + [15 perks like firstBlood] | Zuzanna vs Clawer (840376793)
    Damage 820.8 Upped by crit Multiplier 1.9

01. Damage Calculation Chain; there is Max 1 unit=target per tile
Regardless of the type of ability used to do the damage:

-single target (single tile = target selection)
-multihit( multiple tiles = targets selection )
-AOE ( multiple tiles = targets selection in ability pre-defined pattern shape)
-propagation hits ( here the viable tiles=targets are selected automatically up to the max number of bounces while viable adjacent targets are available during each bounce)

THE DAMAGE CALCULATION CHAIN is 'traversed' separately/individually for each and every tile=unit affected by any ability.
a DODGE RNG ROLL is allowed for targets to avoid damage by non AUTOHIT abilities
Accurate = AUTOHIT skills:

-Shorbow: Precise Shot single target
-Longbow : Snipe Shot single target
-Sledgehammer: Ground Smash up to 5 targets AOE
-MH Pistol & OH Pistol: Grapeshot up to 9 targets AOE
-Active 'Hitman' perk.

All the others allow the ROLL to DODGE damage (effects will be applied either way).

The chance to dodge =
Target's Dodge * Attacker_SkillDodgeMultiplier * RageToTargetRingDodgeMultiplier -
Attacker's Accuracy

Attacker_SkillDodgeMultiplier = 1 for all skills except

1.5 ( Axe:Shred ; Great Axe: Swing; Shortbow: Powershot; Crossbow: Heavy Bolt )
2 (Rifle:Hip Shot)

RageToTargetRingDodgeMultiplier : Applies to ranged attacks . Going further than the first 'ring' 1.75, 2, 2.25, 2.5 ..etc (+0.25 per ring progression)

Dodge is capped at 95%.

Sources of dodge gear, level ups and Longbow BUFF 40%.
Sources of Accuracy gear, level ups and perks Steady Aim 10%, Don't Panic 10%.

Observations
- if the calculated chance to dodge < ZERO = AUTOHIT..
- negative accuracy will enable dodge roll even vs 0 Dodge Targets !!! (sell/unequip -accuracy gear in the early game) . Don't dual wield -accuracy weapons before (if ever) you've got the accuracy to compensate.
- THERE ARE NO INACCURATE magic damage weapons. Magic weapon users WILL NEED THE LEAST ACCURACY INVESTMENT. (max monster dodge in night 12 = ?)
- some melee weapons come with -accuracy, few melee skills have SkillDodgeMultiplier = 1.5. Depending on weapon use combination melee weapon users will in some cases need more accuracy than the magic ones but not too much..
- Ranged weapon users will need the most accuracy when targeting near max distance (pistol , 1h xbow, longbow, shortbow, xbow, rifle) sorted in order of accuracy need. Hipshot can get good range but need ungodly amounts of accuracy to hit reliably at range. Maybe pay attention and don't chance hip shots at long range without checking the calculated dodge chance in the targeting preview. +Range stat doesn't synergise greatly with ranged weapons (increases need for accuracy) ..

example
Thurlow 182252553 uses Hip Shot :
!! WAS HIT !! Dodge roll : 43 < 16 = ([14 TargetDodge] * [2 skill dodge mul ] * [2.25 range ring dodge multiplier] - [47 Accuracy] ) vs Clawer (218000062)\
...



Skill base damage range (=weapon base damage range) and SkillDamageMultiplier
Target didn't get a chance to or failed to dodge so we're up to some damage application:

Stormy 1648345860 uses Death Ray : !! WAS HIT !! Dodge roll : 19 < -17 = ([14 TargetDodge] * [1 skill dodge mul ] * [1 range ring dodge multiplier] - [31 Accuracy] ) ; Splitter (436379298) Skill(weapon) Base Damage Range 96 - 115; skill damage multiplier 2 // Compute Damage Data
Damage Range 192 - 230 with skill damage multiplier 2 applied // Compute Damage Data
..

Weapon's base damage range is displayed on when viewing the weapon in the inventory/ shop / night reward/ production building select & collect your prize pop ups.

punch 40-50 *1
deadly punch 60-75 *1

Weapon's base damage range depends on its type, tier and quality.
Two handed weapons tend to have more damage than 1 handed ones,

Tomes , 2H axes, 1h axe, short and longbows have larger variance ( Max - Min ).. Will get more out of the Reliability stat . (more on that when Reliability is applied).

There are 6 Tier levels for gear (and weapons). Base, I, II, III, IV, V.

There are 2 Quality levels - Default and 'inferior'. The damage range of an 'inferior' is roughly ~ as the default one of the same tier -1;
'Inferior' weapons have the prefix 'rusty' for the melee weapons, 'wooden' for ranged weapons and 'journeyman's' for the magic weapons.

Damage progression per tier seems ~10% exponential. But not exactly the same for all weapon types.
(Ex for Default Quality 1H swords
90 * 1,1 ^ 0 = 90 Max Base.
90 * 1,1 ^ 1= 99 Max Tier I
90 * 1,1 ^ 2= 108.9 Rounds to 109 Max Tier II
90 * 1,1 ^ 3= 119.79 Rounds to 120 Max Tier III
90 * 1,1 ^ 4= 131.769 Rounds to 132 Max Tier IV
90 * 1,1 ^ 5 =144,9459 rounds to 145 Max Tier V

85 * 1,09 ^Tier seems to cover the max for 'Rusty' 1H swords

Got some more base damage range data in this[docs.google.com] google sheet.

First modification to the base damage range is applying (multiplying by its skill damage multiplier).

For a lot of skills the 'skill damage multiplier' is 1.
This is the case for left-est skill in the UI for every weapon. (Ex Dagger: Backstab, 1h Sword: Slice ..)

this[docs.google.com] same google sheet has all the skill damage multipliers and more skill related info in a different tab.

Here again's the log example from the top.
96 - 115 is the base damage range for a Tier V Magic Orb.
Death Ray has *2 skill damage multiplier

Stormy 1648345860 uses Death Ray : !! WAS HIT !! Dodge roll : 19 < -17 = ([14 TargetDodge] * [1 skill dodge mul ] * [1 range ring dodge multiplier] - [31 Accuracy] ) ; Splitter (436379298) Skill(weapon) Base Damage Range 96 - 115; skill damage multiplier 2 // Compute Damage Data
Damage Range 192 - 230 with skill damage multiplier 2 applied // Compute Damage Data
..




Upping the minimum damage using the [capped] Reliability stat.
Stormy 1648345860 uses Death Ray : !! WAS HIT !! Dodge roll : 19 < -17 = ([14 TargetDodge] * [1 skill dodge mul ] * [1 range ring dodge multiplier] - [31 Accuracy] ) ; Splitter (436379298) Skill(weapon) Base Damage Range 96 - 115; skill damage multiplier 2 // Compute Damage Data Damage Range 192 - 230 with skill damage multiplier 2 applied // Compute Damage Data Damage Range 230 - 230 upped by [CLAMPED] Reliability; 133% unit reliability; 0% reliability from perks; //Compute Caster Range ..

Reliability shifts the new min damage value to min + (max-min) * Reliability %. It will go as per the skills description all the way to the max value but no further at 100% reliability. It reduces damage variance by tightening the damage range (upping the min).

CAPPED AT 100% FROM ALL SOURCES. (no point going overboard..anymore)

{ It wasn't always this way. Before game version [0.92.1.3_beta] released YESTERDAY ! there was a cap on the reliability stat but not on the reliability stat + 50% reliability from the 'Cherry Picking' perk. Until yesterday it was possible to get your min-max damage up to newMin = newMax = max + (max-min) /2 vs isolated targets. This benefited the high variance weapons (tome, axes, bows) more .. This has been fixed ! 1 day before the release of this guide :) . }

the sources for this stat are level ups, gear and perks
'Confident' = shows on char info when active. Likes healing potions and 'vampire' perk.
'Cherry Picker' = this one's effect over the damage range can be viewed in some cases using the targeting cursors but not always possible with the AOE targeting cursors that are tied to the same mouse movement one would use to check the damage prediction over various tiles in the targeted AOE. REST ASSURED (damage logs show) this perk applies correctly for AOE attacks and even propagation hits when appropriate .
Use of 'cherrypicking' with AOE abilities is WEIRD since one CANNOT control the order the tiles in the AWAY will be attacked and which ones will/could remain isolated as the game applies the hits in the AOE. If one wants to make certain a target targeted by an AOE ability will be isolated for 'CherryPicking' possibile damage boost, it should do it BEFORE executing that particular AOE attack.

Here's an example of cherry picking applying to the last hit in a 10 hit lighting strike propagation chain. the '50% reliability from perks; is 'cherryPicking'

!! WAS HIT !! Dodge roll : 19 < -14 = ([17 TargetDodge] * [1 skill dodge mul ] * [1 range ring dodge multiplier] - [31 Accuracy] ) ; Clawer (826194524) Skill(weapon) Base Damage Range 89 - 159; skill damage multiplier 1.5 ; propagation Index 10 // Compute Propagated Damage Data Damage Range 134 - 238 with skill damage multiplier 1.5 applied // Compute Propagated Damage Data
Damage Range 238 - 238 upped by [CLAMPED] Reliability; 65% unit reliability; 50% reliability from perks; //Compute Caster Range
Damage Range 437.92 - 437.92 after applying *1.84 Damage Multiplier for 'MagicalDamage' Damage Type //Compute Caster Range Damage Range 543.0208 - 543.0208 after applying *(1.24 OverallDamage Multiplier + 0 NOT_SpecialistPerk) [!CLAMPED!] //Compute Caster Range Damage Range 543.0208 - 543.0208 after applying *1 Injury Multiplier //Compute Caster Range ROUNDED damage range 543 - 543 //Compute Caster Range Damage Range 543 - 543 after applying 'Isolated' and/or 'Opportunistic' and/or 'Momentum' multipliers //Compute Final Damage Range 0 sum multiplier LoneWolf & Relentless Perks + 0 overall damage from ?other? perks //Compute Perk Percentage Damage Range 543 - 543 after compute perk damage range //Compute Final Damage Range Damage Range 494 - 494 AFTER resistance multiplier (- Caster DR reduction = *(1- 0.18
  • ) )
    Damage Range 494 - 494 after Subtracting target's block = 0 //Compute Final Damage Range
    Final Damage Range 494 - 494; 0.1992831 FixedRngRoll ( FOR PROPAGATION HITS ); 494 Selected Damage in Range // Compute Propagated Damage Data
    !! CRIT PROPAGATION CHAIN !! Damage 938.6 upped by crit multiplier 1.9 // Compute Propagated Damage Data
    ROUNDED Damage 506 after *0.5386151 = 0.94 propagation damage multiplier ^ 10 propagation index Damage fallof is applied // Compute Propagated Damage Data
    ..




Applying the damage type multiplier to the damage range
Stormy 1648345860 uses Death Ray : !! WAS HIT !! Dodge roll : 19 < -17 = ([14 TargetDodge] * [1 skill dodge mul ] * [1 range ring dodge multiplier] - [31 Accuracy] ) ; Splitter (436379298) Skill(weapon) Base Damage Range 96 - 115; skill damage multiplier 2 // Compute Damage Data Damage Range 192 - 230 with skill damage multiplier 2 applied // Compute Damage Data Damage Range 230 - 230 upped by [CLAMPED] Reliability; 133% unit reliability; 0% reliability from perks; //Compute Caster Range Damage Range 396.75 - 396.75 after applying *1.725 Damage Multiplier for 'MagicalDamage' Damage Type //Compute Caster Range ..

There are 3 damage types ('physical' for melee weapons, 'ranged' for the ranged weapons and 'magic' for the magic weapons).

All three are capped at +100% (*2) and the reason one (should NOT) mix weapon types past the first week when the gear making buildings start to come online and HEROES SPECIALIZE into ONE DAMAGE TYPE. (the damage type specialization process starts of course from level 1+ but the effects begin to feel much more significant one tier V gear begins to come in) ...

The sources for this stat are level ups and gear.

Magic damage type heroes have access to the 'Magic Fuel' tier III perk that adds Floor(curMana/2)/100 to the magic damage type multiplier. Using this perk with a lot of +mana from gear/level ups frees the gear for other stats ...
Ex: 30 current mana => +15% to the magic damage multiplier
Applying the genericDamageMultiplier to the damage range
Zuzanna 1442632329 uses Lightning Strike : !! WAS HIT !! Dodge roll : 59 < -14 = ([17 TargetDodge] * [1 skill dodge mul ] * [1 range ring dodge multiplier] - [31 Accuracy] ) ; Clawer (840376793) Skill(weapon) Base Damage Range 89 - 159; skill damage multiplier 1.5 // Compute Damage Data Damage Range 134 - 238 with skill damage multiplier 1.5 applied // Compute Damage Data Damage Range 201.6 - 238 upped by [CLAMPED] Reliability; 65% unit reliability; 0% reliability from perks; //Compute Caster Range Damage Range 369.936 - 436.73 after applying *1.835 Damage Multiplier for 'MagicalDamage' Damage Type //Compute Caster Range Damage Range 458.7206 - 541.5452 after applying *(1.24 OverallDamage Multiplier + 0 Don't Panic ?) [!CLAMPED!] //Compute Caster Range ...

This one is also capped at +100% *2 , but unless you're a great axe specialist harder to reach the cap than the damage type multipliers.

Sources level ups, gear, buffs from 2h axe and / or Wrath Armor and most perks that list damage .

Cheer 10%; DeadEye -10%; Specialist 20%; Berserk 2% * # received hits during current night.
'Don't Panic' 30% should add here (visible conditional effect on targeting cursor) (99% certain looking at code, haven't tested it yet)

'Lone Wolf' and 'Relentless' while worded the same apply later down the damage calculation chain, correctly indicated when possible by aiming helper cursors.
Applying the injuryDamagePenalty multipliers
Players don't suffer damage loss at low HP (they lose accuracy and mobility points at low HP).

This step currently only has meaning for injured enemies.

Don't have a log example of injured enemy attacking , will edit one in later.

Zuzanna 1442632329 uses Lightning Strike : !! WAS HIT !! Dodge roll : 59 < -14 = ([17 TargetDodge] * [1 skill dodge mul ] * [1 range ring dodge multiplier] - [31 Accuracy] ) ; Clawer (840376793) Skill(weapon) Base Damage Range 89 - 159; skill damage multiplier 1.5 // Compute Damage Data Damage Range 134 - 238 with skill damage multiplier 1.5 applied // Compute Damage Data Damage Range 201.6 - 238 upped by [CLAMPED] Reliability; 65% unit reliability; 0% reliability from perks; //Compute Caster Range Damage Range 369.936 - 436.73 after applying *1.835 Damage Multiplier for 'MagicalDamage' Damage Type //Compute Caster Range Damage Range 458.7206 - 541.5452 after applying *(1.24 OverallDamage Multiplier + 0 NOT_SpecialistPerk) [!CLAMPED!] //Compute Caster Range Damage Range 458.7206 - 541.5452 after applying *1 Injury Multiplier //Compute Caster Range ..

the damage range switches from floats to ints (rounding errors for every multiplication)
From now on EVERY Multiplication carries rounding error.
Applying 'Isolated' and or 'Opportunist' and or 'Momentum' multipliers to the damage range
Stormy 1648345860 uses Infect : !! WAS HIT !! Dodge roll : 13 < -11 = ([20 TargetDodge] * [1 skill dodge mul ] * [1 range ring dodge multiplier] - [31 Accuracy] ) ; Accursed (334533627) Skill(weapon) Base Damage Range 86 - 103; skill damage multiplier 1 // Compute Damage Data Damage Range 86 - 103 with skill damage multiplier 1 applied // Compute Damage Data Damage Range 103 - 103 upped by [CLAMPED] Reliability; 133% unit reliability; 50% reliability from perks; //Compute Caster Range Damage Range 178.705 - 178.705 after applying *1.735 Damage Multiplier for 'MagicalDamage' Damage Type //Compute Caster Range Damage Range 178.705 - 178.705 after applying *(1 OverallDamage Multiplier + 0 NOT_SpecialistPerk) [!CLAMPED!] //Compute Caster Range Damage Range 178.705 - 178.705 after applying *1 Injury Multiplier //Compute Caster Range ROUNDED damage range 179 - 179 //Compute Caster Range
DETAILED Damage Range 358 - 358 after applying 'Isolated' and/or 'Opportunistic' and/or 'Momentum' multipliers //Compute Final Damage Range
..

179 * (1 + 1 + 0) = 358

Infect skill has 100% isolated bonus.
Stormy had 0% isolated bonus stat.

Isolated Multiplier = ( 100 + Skill_Isolated + Char Isolated stat)/100
Opportunist Multiplier = ( 100 + Skill_Opportunist + Char Opportunist)/100
Momentum Multiplier = ( 100 + Skill_Momentum + Char Opportunist)/100 * # tiles // momentum capped at *2 ? during last patch.

These multipliers are applied in 'cascade' BUT there is currently no skill that has more than one such conditional multiplier attached so AT MOST one of those multipliers will apply.

The skill MUST have one of these conditional multiplier to apply it.
There is also other conditions required
- 'isolated' requires the target to have no ally in North, South, West or Est tiles.
- 'opportunist' requires any debuff active on the target
- 'momentum' skills requires tile movement since the last momentum activation

Isolated skills : ( Dagger: Backstab 100%; Longbow: Long Shot 50%; Rifle: Assassinate 100%; Orb 100%)

Opportunist skills : (1h Hammer: Crush 100% AOE; Druidic Staff: Centipedes 75%; Power Staff: Scorching Wave 100% 6 tile AOE)

Momentum skills (1h Sword: Slice 5%; 2h Sword : Thurst 20%; Spear: Rush 10%; Pistol: Pistol Shot 10%; Scepter: Magic Bash 50% !! ).



sum 'Lone Wolf' and 'Reckless' perks multiplier
Stormy 1648345860 uses Infect : !! WAS HIT !! Dodge roll : 13 < -11 = ([20 TargetDodge] * [1 skill dodge mul ] * [1 range ring dodge multiplier] - [31 Accuracy] ) ; Accursed (334533627) Skill(weapon) Base Damage Range 86 - 103; skill damage multiplier 1 // Compute Damage Data Damage Range 86 - 103 with skill damage multiplier 1 applied // Compute Damage Data Damage Range 103 - 103 upped by [CLAMPED] Reliability; 133% unit reliability; 50% reliability from perks; //Compute Caster Range Damage Range 178.705 - 178.705 after applying *1.735 Damage Multiplier for 'MagicalDamage' Damage Type //Compute Caster Range Damage Range 178.705 - 178.705 after applying *(1 OverallDamage Multiplier + 0 NOT_SpecialistPerk) [!CLAMPED!] //Compute Caster Range Damage Range 178.705 - 178.705 after applying *1 Injury Multiplier //Compute Caster Range ROUNDED damage range 179 - 179 //Compute Caster Range DETAILED Damage Range 358 - 358 after applying 'Isolated' and/or 'Opportunistic' and/or 'Momentum' multipliers //Compute Final Damage Range
0.09999999 sum multiplier LoneWolf & Relentless Perks + 0 overall damage from ?other? perks //Compute Perk Percentage
Damage Range 394 - 394 after compute perk damage range //Compute Final Damage Range
..

In the example above Stormy had 'LoneWolf' active. * ( 1 + 0.1 + 0 ); //

These bonuses don't add to the universalDamageMultiplier. Instead their effects are added and multiplied separately. The targeting UI helper will show this mutiplier when possible as 'perks' .

Source : Lone Wolf and Relentless perks ..

Observation: Relentless bonuses (damage/ armor pierce & block ignore) APPLY for the whole propagation chain (SledgeHammer Mega Stomp) !!
Applying Resistance (% damage) multiplier
Stormy 1648345860 uses Infect : !! WAS HIT !! Dodge roll : 13 < -11 = ([20 TargetDodge] * [1 skill dodge mul ] * [1 range ring dodge multiplier] - [31 Accuracy] ) ; Accursed (334533627) Skill(weapon) Base Damage Range 86 - 103; skill damage multiplier 1 // Compute Damage Data Damage Range 86 - 103 with skill damage multiplier 1 applied // Compute Damage Data Damage Range 103 - 103 upped by [CLAMPED] Reliability; 133% unit reliability; 50% reliability from perks; //Compute Caster Range Damage Range 178.705 - 178.705 after applying *1.735 Damage Multiplier for 'MagicalDamage' Damage Type //Compute Caster Range Damage Range 178.705 - 178.705 after applying *(1 OverallDamage Multiplier + 0 NOT_SpecialistPerk) [!CLAMPED!] //Compute Caster Range Damage Range 178.705 - 178.705 after applying *1 Injury Multiplier //Compute Caster Range ROUNDED damage range 179 - 179 //Compute Caster Range DETAILED Damage Range 358 - 358 after applying 'Isolated' and/or 'Opportunistic' and/or 'Momentum' multipliers //Compute Final Damage Range 0.09999999 sum multiplier LoneWolf & Relentless Perks + 0 overall damage from ?other? perks //Compute Perk Percentage Damage Range 394 - 394 after compute perk damage range //Compute Final Damage Range
Damage Range 284 - 284 AFTER % resistance multiplier (- Caster DR reduction = *(1- 0.56
  • ) )
...

Damage Reduction Multiplier = 1 - ((TargetReduction - AttackerDamageReduction) / 100 ) * (0.5 if magic damage type)

Sources for both gear and level ups.
Debuffs for resistance :
Tome: Weakening Touch -20% per stack. 2H axe: Berserk -15% per stack.

Resistance Lower Cap = -50% . The is also very likely high cap as 100% would make targets IMMUNE TO DAMAGE.

Observations
-Damage Reduction less valuable for magic users
-Negative Resistance makes it amplify damage .
Subtracting target's Block
Stormy 1648345860 uses Death Ray : !! WAS HIT !! Dodge roll : 19 < -17 = ([14 TargetDodge] * [1 skill dodge mul ] * [1 range ring dodge multiplier] - [31 Accuracy] ) ; Splitter (436379298) Skill(weapon) Base Damage Range 96 - 115; skill damage multiplier 2 // Compute Damage Data Damage Range 192 - 230 with skill damage multiplier 2 applied // Compute Damage Data Damage Range 230 - 230 upped by [CLAMPED] Reliability; 133% unit reliability; 0% reliability from perks; //Compute Caster Range Damage Range 396.75 - 396.75 after applying *1.725 Damage Multiplier for 'MagicalDamage' Damage Type //Compute Caster Range Damage Range 396.75 - 396.75 after applying *(1 OverallDamage Multiplier + 0 NOT_SpecialistPerk) [!CLAMPED!] //Compute Caster Range Damage Range 396.75 - 396.75 after applying *1 Injury Multiplier //Compute Caster Range ROUNDED damage range 397 - 397 //Compute Caster Range Damage Range 397 - 397 after applying 'Isolated' and/or 'Opportunistic' and/or 'Momentum' multipliers //Compute Final Damage Range 0.09999999 sum multiplier LoneWolf & Relentless Perks + 0 overall damage from ?other? perks //Compute Perk Percentage Damage Range 437 - 437 after compute perk damage range //Compute Final Damage Range Damage Range 393 - 393 AFTER resistance multiplier (- Caster DR reduction = *(1- 0.2
  • ) )
    Damage Range 353 - 353 after Subtracting target's block = 40 //Compute Final Damage Range
...

BLOCK IGNORERs :
-Pistol: Pistol Shot (this is a potentially HARD hitting ability (momentum))
-Xbow: Heavy Bolt (this is low variance HARD hitting ability)
- Assassinate (this is low variance VERY HARD hitting ability)(isolated)
- Active 'Hitman' Perk

Observations
-Block is subtracted BEFORE the crit multipliers. Its effect is THUS MULTIPLIED by the crit multiplier for critical strikes.
RNG ROLL - selecting the damage value in the [int] damage range
non-propagation bounce example

BallistaTower uses Mounted Ballista Bolt : Skill(weapon) Base Damage Range 90 - 120; skill damage multiplier 1 // Compute Damage Data Damage Range 90 - 120 with skill damage multiplier 1 applied // Compute Damage Data Damage Range 90 - 120 after applying *1 Damage Multiplier for '' Damage Type //Compute Caster Range ROUNDED damage range 90 - 120 //Compute Caster Range Damage Range 90 - 120 after applying 'Isolated' and/or 'Opportunistic' and/or 'Momentum' multipliers //Compute Final Damage Range DETAILED Damage Range 90 - 120 AFTER % damage reduced (- Caster DR reduction = *(1- 0
  • ) )
    DETAILED Damage Range 70 - 100 after Subtracting target's block = 20 //Compute Final Damage Range
    Final Damage Range 70 - 100; -1 FixedRngRoll (if > 0); 0.4896876 RNG ROLL; 85 Selected Damage in Range

propagation bounce example
Zuzanna 1442632329 uses Lightning Strike : .. !! WAS HIT !! Dodge roll : 53 < -14 = ([17 TargetDodge] * [1 skill dodge mul ] * [1 range ring dodge multiplier] - [31 Accuracy] ) ; Clawer (1621283793) Skill(weapon) Base Damage Range 89 - 159; skill damage multiplier 1.5 ; propagation Index 1 // Compute Propagated Damage Data Damage Range 134 - 238 with skill damage multiplier 1.5 applied // Compute Propagated Damage Data Damage Range 201.6 - 238 upped by [CLAMPED] Reliability; 65% unit reliability; 0% reliability from perks; //Compute Caster Range Damage Range 370.944 - 437.92 after applying *1.84 Damage Multiplier for 'MagicalDamage' Damage Type //Compute Caster Range Damage Range 459.9706 - 543.0208 after applying *(1.24 OverallDamage Multiplier + 0 NOT_SpecialistPerk) [!CLAMPED!] //Compute Caster Range Damage Range 459.9706 - 543.0208 after applying *1 Injury Multiplier //Compute Caster Range ROUNDED damage range 460 - 543 //Compute Caster Range Damage Range 460 - 543 after applying 'Isolated' and/or 'Opportunistic' and/or 'Momentum' multipliers //Compute Final Damage Range 0 sum multiplier LoneWolf & Relentless Perks + 0 overall damage from ?other? perks //Compute Perk Percentage Damage Range 460 - 543 after compute perk damage range //Compute Final Damage Range Damage Range 418 - 494 AFTER resistance multiplier (- Caster DR reduction = *(1- 0.18
  • ) )
    Damage Range 418 - 494 after Subtracting target's block = 0 //Compute Final Damage Range
    DETAILED Final Damage Range 418 - 494; 0.1992831 FixedRngRoll ( FOR PROPAGATION HITS ); 433 Selected Damage in Range // Compute Propagated Damage Data
    ..
  • [/code]

    Propagation chain starters and non propagation hit use RNG ROLL to select the damage VALUE from the [damage range] FOR EVERY HIT !

    Propagation bounce hits USE THE RNG ROLL to select the damage VALUE from the [damage range] and to crit RNG ROLL OF THE CHAIN STARTER.
    PROPAGATION CHAINS ROLL ONCE for Damage value selection in damage interval and to crit PER PROPAGATION CHAIN !!

    RNG to crit ROLL (for non propagation bounces) and CritMultiplier
    Non propagation hits roll to crit for every hit.
    Propagation Chains use the chain starter hit to crit roll. IF THE CHAIN STARTER CRITS ALL THE CHAIN CRITS..


    non propagation example

    Stormy 1648345860 uses Putrid Ball : !! WAS HIT !! Dodge roll : 53 < -11 = ([20 TargetDodge] * [1 skill dodge mul ] * [1 range ring dodge multiplier] - [31 Accuracy] ) ; Accursed (334533627) Skill(weapon) Base Damage Range 86 - 103; skill damage multiplier 1.25 // Compute Damage Data Damage Range 108 - 129 with skill damage multiplier 1.25 applied // Compute Damage Data Damage Range 129 - 129 upped by [CLAMPED] Reliability; 133% unit reliability; 0% reliability from perks; //Compute Caster Range Damage Range 221.88 - 221.88 after applying *1.72 Damage Multiplier for 'MagicalDamage' Damage Type //Compute Caster Range Damage Range 221.88 - 221.88 after applying *(1 OverallDamage Multiplier + 0 NOT_SpecialistPerk) [!CLAMPED!] //Compute Caster Range Damage Range 221.88 - 221.88 after applying *1 Injury Multiplier //Compute Caster Range ROUNDED damage range 222 - 222 //Compute Caster Range Damage Range 222 - 222 after applying 'Isolated' and/or 'Opportunistic' and/or 'Momentum' multipliers //Compute Final Damage Range 0.09999999 sum multiplier LoneWolf & Relentless Perks + 0 overall damage from ?other? perks //Compute Perk Percentage Damage Range 244 - 244 after compute perk damage range //Compute Final Damage Range Damage Range 176 - 176 AFTER resistance multiplier (- Caster DR reduction = *(1- 0.56
    • ) )
      Damage Range 176 - 176 after Subtracting target's block = 0 //Compute Final Damage Range
      Final Damage Range 176 - 176; -1 FixedRngRoll (if > 0); 0.9573073 RNG ROLL; 176 Selected Damage in Range
      !!CRIT!! [PLAYER] to Crit ROLL : 57 < [74 unit CTC] + [0 Attack Crit bonus(ex martial artist)] + [15 perks like firstBlood] | Stormy vs Accursed (334533627)
      Damage 396 Upped by crit Multiplier 2.25

      ...

    10-th propagation bounce example

    Zuzanna 1442632329 uses Lightning Strike : .. !! WAS HIT !! Dodge roll : 19 < -14 = ([17 TargetDodge] * [1 skill dodge mul ] * [1 range ring dodge multiplier] - [31 Accuracy] ) ; Clawer (826194524) Skill(weapon) Base Damage Range 89 - 159; skill damage multiplier 1.5 ; propagation Index 10 // Compute Propagated Damage Data Damage Range 134 - 238 with skill damage multiplier 1.5 applied // Compute Propagated Damage Data Damage Range 238 - 238 upped by [CLAMPED] Reliability; 65% unit reliability; 50% reliability from perks; //Compute Caster Range Damage Range 437.92 - 437.92 after applying *1.84 Damage Multiplier for 'MagicalDamage' Damage Type //Compute Caster Range Damage Range 543.0208 - 543.0208 after applying *(1.24 OverallDamage Multiplier + 0 NOT_SpecialistPerk) [!CLAMPED!] //Compute Caster Range Damage Range 543.0208 - 543.0208 after applying *1 Injury Multiplier //Compute Caster Range ROUNDED damage range 543 - 543 //Compute Caster Range Damage Range 543 - 543 after applying 'Isolated' and/or 'Opportunistic' and/or 'Momentum' multipliers //Compute Final Damage Range 0 sum multiplier LoneWolf & Relentless Perks + 0 overall damage from ?other? perks //Compute Perk Percentage Damage Range 543 - 543 after compute perk damage range //Compute Final Damage Range Damage Range 494 - 494 AFTER resistance multiplier (- Caster DR reduction = *(1- 0.18
  • ) )
    Damage Range 494 - 494 after Subtracting target's block = 0 //Compute Final Damage Range
    Final Damage Range 494 - 494; 0.1992831 FixedRngRoll ( FOR PROPAGATION HITS ); 494 Selected Damage in Range // Compute Propagated Damage Data
    !! CRIT PROPAGATION CHAIN !! Damage 938.6 upped by crit multiplier 1.9 // Compute Propagated Damage Data
    ...
  • [/code]

    Crit Chance capped at 100%
    sources level ups. gear, Perks
    Critical Master +2% per non crit hit. Resets on crit
    Martial Artist +20% for 'Deadly Punch' . Not shown ingame. the log catches it. (could 'catch' it perma critting at 80% listed Chance to Crit)
    First Blood +15% vs full health enemies. Not shown ingame. the log catches it. (could 'catch' it perma critting at 85% listed Chance to Crit vs full health enemies).

    All chars should reach >70% CTC by night 11 ! Gives tons of overkill damage and infinite mana with Mana Collector perk. Makes more predictable KILLER propagation chains.

    Crit Multiplier is probably capped by the cap is above 3.1 . Sources level ups and gear.
    Perk Deadeye + 50% CritMultiplier. (don't take it too early!)

    Bounce exponential damage nerf multiplier
    This one applies ONLY to bounces in a propagation chain.

    Bounce Damage Multiplier = Propagation Damage ^ Propagation Index

    Propagation Damage is capped at 100% ( *1) damage should go down from bounce to bounce

    ex for 10-th bounce with Propagation Damage = 94 %
    0.94 ^ 10 = 0.5386151

    ex for 10-th bounce with Propagation Damage = 82 %
    0.82 ^ 10 = 0.137448 !!
    'low' Propagation Damage can really destroy the damage out of your propagation chains !

    Initiator NOT A GREAT PERK for propagation chain users (saps chain damage, adds low damage bounces at the end that might never happen since chains often die prematurely due to lack of viable targets)

    Propagation Skills:
    -Sledgehammer: x1 Mega Stomp 5
    -Hand Xbow: x1 Blaze 3
    -Scepter : x2 Hammer of Faith 5 (damage and stun)
    -Druid Staff: x2 Bee Sting 5 (damage and poison)
    -Tome of Secrets: x2 Weakening Touch 4 (debuff)
    -Tome of Secrets: x1 Lightning Strike 9

    log example
    Lightning Strike 10 bounce chain.
    Shown Chain Starter, first and 10-th bounces.

    Zuzanna 1442632329 uses Lightning Strike : !! WAS HIT !! Dodge roll : 59 < -14 = ([17 TargetDodge] * [1 skill dodge mul ] * [1 range ring dodge multiplier] - [31 Accuracy] ) ; Clawer (840376793) Skill(weapon) Base Damage Range 89 - 159; skill damage multiplier 1.5 // Compute Damage Data Damage Range 134 - 238 with skill damage multiplier 1.5 applied // Compute Damage Data Damage Range 201.6 - 238 upped by [CLAMPED] Reliability; 65% unit reliability; 0% reliability from perks; //Compute Caster Range Damage Range 369.936 - 436.73 after applying *1.835 Damage Multiplier for 'MagicalDamage' Damage Type //Compute Caster Range Damage Range 458.7206 - 541.5452 after applying *(1.24 OverallDamage Multiplier + 0 NOT_SpecialistPerk) [!CLAMPED!] //Compute Caster Range Damage Range 458.7206 - 541.5452 after applying *1 Injury Multiplier //Compute Caster Range ROUNDED damage range 459 - 542 //Compute Caster Range Damage Range 459 - 542 after applying 'Isolated' and/or 'Opportunistic' and/or 'Momentum' multipliers //Compute Final Damage Range 0 sum multiplier LoneWolf & Relentless Perks + 0 overall damage from ?other? perks //Compute Perk Percentage Damage Range 459 - 542 after compute perk damage range //Compute Final Damage Range Damage Range 417 - 493 AFTER resistance multiplier (- Caster DR reduction = *(1- 0.18
    • ) )
      Damage Range 417 - 493 after Subtracting target's block = 0 //Compute Final Damage Range
      Final Damage Range 417 - 493; 0.1992831 FixedRngRoll (if > 0); 0.9684955 RNG ROLL; 432 Selected Damage in Range
      !!CRIT!! [PLAYER] to Crit ROLL : 44 < [62 unit CTC] + [0 Attack Crit bonus(ex martial artist)] + [15 perks like firstBlood] | Zuzanna vs Clawer (840376793)
      Damage 820.8 Upped by crit Multiplier 1.9
      ..
      !! WAS HIT !! Dodge roll : 53 < -14 = ([17 TargetDodge] * [1 skill dodge mul ] * [1 range ring dodge multiplier] - [31 Accuracy] ) ; Clawer (1621283793)
      Skill(weapon) Base Damage Range 89 - 159; skill damage multiplier 1.5 ; propagation Index 1 // Compute Propagated Damage Data
      Damage Range 134 - 238 with skill damage multiplier 1.5 applied // Compute Propagated Damage Data
      Damage Range 201.6 - 238 upped by [CLAMPED] Reliability; 65% unit reliability; 0% reliability from perks; //Compute Caster Range
      Damage Range 370.944 - 437.92 after applying *1.84 Damage Multiplier for 'MagicalDamage' Damage Type //Compute Caster Range
      Damage Range 459.9706 - 543.0208 after applying *(1.24 OverallDamage Multiplier + 0 NOT_SpecialistPerk) [!CLAMPED!] //Compute Caster Range
      Damage Range 459.9706 - 543.0208 after applying *1 Injury Multiplier //Compute Caster Range
      ROUNDED damage range 460 - 543 //Compute Caster Range
      Damage Range 460 - 543 after applying 'Isolated' and/or 'Opportunistic' and/or 'Momentum' multipliers //Compute Final Damage Range
      0 sum multiplier LoneWolf & Relentless Perks + 0 overall damage from ?other? perks //Compute Perk Percentage
      Damage Range 460 - 543 after compute perk damage range //Compute Final Damage Range
      Damage Range 418 - 494 AFTER resistance multiplier (- Caster DR reduction = *(1- 0.18
    • ) )
      Damage Range 418 - 494 after Subtracting target's block = 0 //Compute Final Damage Range
      DETAILED Final Damage Range 418 - 494; 0.1992831 FixedRngRoll ( FOR PROPAGATION HITS ); 433 Selected Damage in Range // Compute Propagated Damage Data
      !! CRIT PROPAGATION CHAIN !! Damage 822.7 upped by crit multiplier 1.9 // Compute Propagated Damage Data
      ROUNDED Damage 773 after *0.94 = 0.94 propagation damage multiplier ^ 1 propagation index Damage fallof is applied // Compute Propagated Damage Data
      ...
      !! WAS HIT !! Dodge roll : 19 < -14 = ([17 TargetDodge] * [1 skill dodge mul ] * [1 range ring dodge multiplier] - [31 Accuracy] ) ; Clawer (826194524)
      Skill(weapon) Base Damage Range 89 - 159; skill damage multiplier 1.5 ; propagation Index 10 // Compute Propagated Damage Data
      Damage Range 134 - 238 with skill damage multiplier 1.5 applied // Compute Propagated Damage Data
      Damage Range 238 - 238 upped by [CLAMPED] Reliability; 65% unit reliability; 50% reliability from perks; //Compute Caster Range
      Damage Range 437.92 - 437.92 after applying *1.84 Damage Multiplier for 'MagicalDamage' Damage Type //Compute Caster Range
      Damage Range 543.0208 - 543.0208 after applying *(1.24 OverallDamage Multiplier + 0 NOT_SpecialistPerk) [!CLAMPED!] //Compute Caster Range
      Damage Range 543.0208 - 543.0208 after applying *1 Injury Multiplier //Compute Caster Range
      ROUNDED damage range 543 - 543 //Compute Caster Range
      Damage Range 543 - 543 after applying 'Isolated' and/or 'Opportunistic' and/or 'Momentum' multipliers //Compute Final Damage Range
      0 sum multiplier LoneWolf & Relentless Perks + 0 overall damage from ?other? perks //Compute Perk Percentage
      Damage Range 543 - 543 after compute perk damage range //Compute Final Damage Range
      Damage Range 494 - 494 AFTER resistance multiplier (- Caster DR reduction = *(1- 0.18
    • ) )
      Damage Range 494 - 494 after Subtracting target's block = 0 //Compute Final Damage Range
      Final Damage Range 494 - 494; 0.1992831 FixedRngRoll ( FOR PROPAGATION HITS ); 494 Selected Damage in Range // Compute Propagated Damage Data
      !! CRIT PROPAGATION CHAIN !! Damage 938.6 upped by crit multiplier 1.9 // Compute Propagated Damage Data
      ROUNDED Damage 506 after *0.5386151 = 0.94 propagation damage multiplier ^ 10 propagation index Damage fallof is applied // Compute Propagated Damage Data
      ..
    Damage Application to target
    here it checks for armor pierce (ignore) {some perks and monsters have it}
    damage type physical doing double damage vs armor
    substracts hitpoints from armor and eventual health

    ...
    Poison Damage
    Are applied at the beginning of a unit's turn (multiple poison instances can be active on a unit at the same time , each with its own poison damage amount and turns remaining value).

    Base poison damage scales with weapon type and tier. ( there is 'poisonous' trash perk that adds 20 base poison damage as melee retaliation, 20 base damage is simply unworkable (way too low))

    Damage per tick = Base Poison Damage * Poison Damage Multiplier

    IGNORES target dodge for application, is armor piercing (ignores armor), resistance and block ! ..

    Sources of poison:

    - the 'Poisonous' trash perk
    - Hand Xbow: Slow Death (might have the highest base it doesn't scale : Single target)
    - Orb: Putrid Ball x5 target AOE (no scaling but at least AOE)
    - Dagger: Throwing Dagger (scales with multishot)
    - Druid Staff: Bee Sting (scales with Propagation allowing multiple applications on the same target). Normally propagation impact damage goes down by each bounce, the poison damage stays the same.



    Vampire perk (and HealingReceived Breakpoints)
    calls GainHealth so E_Stat.HealingReceived is applied to the base value.

    between 1% and 24.99% E_Stat.HealingReceived you'll gain 5 HP per vampire activation
    between 25% and 49.99% E_Stat.HealingReceived you'll gain 6 HP per vampire activation.
    between 50% and 74.99% E_Stat.HealingReceived you'll gain 7 HP per vampire activation.
    between 75% and 99.99% E_Stat.HealingReceived you'll gain 8 HP per vampire activation.

    public float GainHealth(float amount, bool refreshHud = true) { amount *= this.Unit.GetClampedStatValue(UnitStatDefinition.E_Stat.HealingReceived, false) / 100f; amount = Mathf.Ceil(amount); float result = this.IncreaseBaseStat(UnitStatDefinition.E_Stat.Health, amount, false, refreshHud); this.UpdateInjuryStage(); }
    Installing/Uninstalling the extra combat logging mod
    install

    Download https://drive.google.com/file/d/1kUywan325bXCboSwNzYpa3qstHpINeM6 TheLastSpell.dll and overwrite ...steamapps\common\The Last Spell\The Last Spell_Data\Managed\TheLastStand.dll

    link evernote document [www.evernote.com]with the modifications


    uninstall
    Right click game in steam and select properties verify local files integrity (will find the modified file and replace it back)
    4 Comments
    Gengarian Oct 18, 2021 @ 8:30pm 
    Thanks
    peddroelm  [author] Oct 18, 2021 @ 8:26pm 
    @Gengarian sure
    Gengarian Oct 18, 2021 @ 8:22pm 
    @peddroelm I am writing a guide and wanted to reference yours in mine as a great look into specifics. Is it all good if I link to your guide?
    RaaaahMan Jul 11, 2021 @ 12:47pm 
    Lots of info here. Thanks!