Community AtlasBrowse the wikiInteractive mapBuild plannerAbout & sources
Local mechanics research · 1.1.1.0

Damage Formula & Effect Stacking

Recovered attribute arithmetic, critical multipliers, empowerment limits and the difference between a damage packet and a final health change.

Reviewed 2026-10-01Shipped baseline; online overrides unobserved

Reviewed local game tables and selected native instructions from Windows build 1.1.1.0. Original-instruction tests use synthetic actors and engine services. They are not gameplay measurements; online overrides have not been observed.

Group modifiers by the attribute they change

The native aggregator separates AddBase, MultiplyAdditive, DivideAdditive, MultiplyCompound, AddFinal and Override. Within one applicable channel, without an Override: V = ((B + sum(AddBase)) × (1 + sum(MultiplyAdditive − 1)) / (1 + sum(DivideAdditive − 1))) × product(MultiplyCompound) + sum(AddFinal). Override handling is a separate branch.

Two +30% Sharpness contributions add to MeleeDamageSourceMultiplier: a neutral base of 1 becomes 1.6. They do not independently multiply to 1.69. Healthy Strike supplies 1 + DamageBoost as MultiplyAdditive on that same attribute when Health / HealthMax meets its threshold. A 0.4 DamageBoost contributes a 1.4 multiplier to that attribute's additive-multiplier group.

After aggregation, the game can apply an instance curve, a class limit or adjustment, and then configured rounding, in that order. Different attributes and damage conditions remain separate. The Build Lab's nominal totals are not a finished health-damage simulation.

Evidence for this section
  • The within-attribute stacking formula is recovered

    direct native code, qualified modifiers within one evaluation channel. Record: reference/local-native-executable-evidence-1.1.1.0.json/findings/0.

    Reviewed record SHA-256: 98cb4f335426b463fb7713b434cdb380b843cf7c58cc6bfc1ba233fe37bf4e6a

  • Healthy Strike sends 1 + DamageBoost

    direct native code plus authored item data. Record: reference/local-native-executable-evidence-1.1.1.0.json/findings/3.

    Reviewed record SHA-256: 98cb4f335426b463fb7713b434cdb380b843cf7c58cc6bfc1ba233fe37bf4e6a

  • Attribute curves precede attribute limits and configured rounding

    direct native call chain. Record: reference/local-native-followup-evidence-1.1.1.0.json/findings/1.

    Reviewed record SHA-256: 0a391d24d99bb4820a2e87030f360387bd895e6d1fef4b6e5289a1db0dc95714

  • Simple passive effect instances use additive attribute contributions

    Native effect construction, stack lookup and previously recovered attribute aggregation. Record: reference/local-equipped-effect-evidence-1.1.1.0.json/findings/1.

    Reviewed record SHA-256: d456f3287ed00f3ca3e95e6def73c88b383823fb41a55127d7a21eca3517aadf

Public evidence manifest and scalar datasets

Two recovered damage paths

MMC_Damage starts from the Health set-by-caller input, adds the source's BaseDamageBonus when the effect qualifies as an attack, then multiplies captured values from all qualifying rules. The constructor defines one additive rule and 29 multiplicative rules, containing 47 attribute captures. An effect coefficient is applied separately; a coefficient is not automatically literal HP damage.

The separate SWDamageData packet path converts percentage input to input × targetMaxHealth / 100 when required. It then adds flat source damage, applies attack-source, general, damage-type and condition factors, applies target resistance and armor factors, applies an eligible survival limit, and returns a nonnegative result. These recovered paths must not be collapsed into one unconditional product of every tooltip bonus.

A single swing can produce a primary packet, elemental packets, splash and later status ticks. Fire Aspect, Poison Fog and Shockwave use separate blast abilities. One hit, one button press, a whole combo and all subsequent damage are different totals.

Evidence for this section
  • Flat damage is added before the qualifying damage factors

    direct native code; MMC_Damage calculation stage. Record: reference/local-native-executable-evidence-1.1.1.0.json/findings/1.

    Reviewed record SHA-256: 98cb4f335426b463fb7713b434cdb380b843cf7c58cc6bfc1ba233fe37bf4e6a

  • The native damage-packet arithmetic is recovered and independently emulated

    direct native code plus 57 synthetic-input CPU-emulation cases. Record: reference/local-native-followup-evidence-1.1.1.0.json/findings/2.

    Reviewed record SHA-256: 0a391d24d99bb4820a2e87030f360387bd895e6d1fef4b6e5289a1db0dc95714

  • One swing can produce several damage packets

    data-chain. Record: reference/local-combat-formula-evidence-1.1.1.0.json/findings/9.

    Reviewed record SHA-256: 3c2eb87416ae4f2b217b79ddd453ed9d65fe98aaee226c2cfa7c69e623cd03d8

Public evidence manifest and scalar datasets

Critical chance and critical damage are separate

The shipped player general critical multiplier is 1.5, overriding the attribute class constructor's 2. Melee and ranged critical attributes start at 1. A qualifying melee critical uses general critical multiplier × melee critical multiplier; ranged uses the ranged counterpart.

Shadow Form adds 1 to critical chance. Critical Precision status overrides chance to 1. Critical Strength status adds 2 to the general critical multiplier, producing 3.5 from the shipped player baseline in isolation. A guaranteed critical does not itself create a second critical-damage multiplier.

The gear effect named Strength internally modifies the melee critical multiplier. Strengthened status modifies general outgoing damage by AddBase +1. These are different effects despite similar names; their values cannot be substituted for one another.

Evidence for this section
  • The shipped player critical baseline is 1.5, overriding the class default of 2

    Native constructor, type attribute import/inheritance/assignment path and DefaultPlayer table. Record: reference/local-equipped-effect-evidence-1.1.1.0.json/findings/2.

    Reviewed record SHA-256: d456f3287ed00f3ca3e95e6def73c88b383823fb41a55127d7a21eca3517aadf

  • General and attack-specific critical multipliers multiply

    direct native code; conditional critical damage factors. Record: reference/local-native-executable-evidence-1.1.1.0.json/findings/2.

    Reviewed record SHA-256: 98cb4f335426b463fb7713b434cdb380b843cf7c58cc6bfc1ba233fe37bf4e6a

  • Shadow Form, the flute and the drums use different critical operations

    data-chain. Record: reference/local-combat-formula-evidence-1.1.1.0.json/findings/1.

    Reviewed record SHA-256: 3c2eb87416ae4f2b217b79ddd453ed9d65fe98aaee226c2cfa7c69e623cd03d8

  • The gear effect Strength is different from Strength status

    direct-data. Record: reference/local-combat-formula-evidence-1.1.1.0.json/findings/10.

    Reviewed record SHA-256: 3c2eb87416ae4f2b217b79ddd453ed9d65fe98aaee226c2cfa7c69e623cd03d8

Public evidence manifest and scalar datasets

Dynamo and Power Amplifier share empowerment

Dynamo and Power Amplifier feed AttackEmpowerment. The native attribute starts at 1 and has a default maximum of 2. The authored adjustment curve's endpoint of 8 does not establish an attainable 8× or 9× damage bonus: the maximum adjustment runs after the curve.

Under unchanged native defaults and independent additive increments, the conditional result is min(2, curve(1 + sum(increments))). These are defaults and arithmetic, not verified activation counts. Refresh behavior, multiple copies and online overrides still matter.

A traced post-target callback removes effects matching CriticalFlurry, Dynamo and LingeringPower when the context is first processed, the source is a player and the attack-source bit test qualifies. That predicate does not settle every miss, proc, splash, multi-target or consumption-order case.

Evidence for this section
  • Dynamo and Power Amplifier feed a shared attribute

    data-chain. Record: reference/local-combat-formula-evidence-1.1.1.0.json/findings/0.

    Reviewed record SHA-256: 3c2eb87416ae4f2b217b79ddd453ed9d65fe98aaee226c2cfa7c69e623cd03d8

  • Empowerment starts at 1 and has a separate native maximum of 2

    direct native initialization and clamp path; live override selection unverified. Record: reference/local-native-followup-evidence-1.1.1.0.json/findings/0.

    Reviewed record SHA-256: 0a391d24d99bb4820a2e87030f360387bd895e6d1fef4b6e5289a1db0dc95714

  • The post-hit path removes empowerment effects once per eligible attack context

    direct native cleanup predicate; some practical source eligibility remains unresolved. Record: reference/local-native-followup-evidence-1.1.1.0.json/findings/6.

    Reviewed record SHA-256: 0a391d24d99bb4820a2e87030f360387bd895e6d1fef4b6e5289a1db0dc95714

Public evidence manifest and scalar datasets

Outgoing buffs, incoming vulnerability and speed

Strengthened contributes +1 and Weakened contributes −0.5 to BaseDamageMultiplier. Starting at 1, both together yield 1.5 before further adjustments. Multiplying 2 by 0.5 would give the wrong attribute result.

Weakened and Zapped/Conductive use MultiplyAdditive on BaseDamageResistanceMultiplier with values 1.5 and 1.25. From a neutral base of 1, their combined value is 1.75 before target adjustments, rather than 1.875. Immunity and other defenses can change the final result.

Melee and ranged attack speed use an authored piecewise linear curve through (1,1), (2,2), (5,3), with constant extrapolation. From input 2 to 5, output is 2 + (input − 2) / 3. This is an attribute curve, not a complete animation or attack-frequency model.

The emerald damage magnitude is 1 + clamp(emeralds / cap, 0, 1) × (maximumMultiplier − 1), bounded between 1 and that maximum. The configured cap and maximum come from the owning ability; this is not an unlimited currency-to-damage conversion.

Evidence for this section
  • Strength and Weakness add on the outgoing-damage attribute

    data-and-engine-model. Record: reference/local-combat-formula-evidence-1.1.1.0.json/findings/3.

    Reviewed record SHA-256: 3c2eb87416ae4f2b217b79ddd453ed9d65fe98aaee226c2cfa7c69e623cd03d8

  • Weakness and Conductive share an incoming-damage attribute

    data-and-engine-model. Record: reference/local-combat-formula-evidence-1.1.1.0.json/findings/4.

    Reviewed record SHA-256: 3c2eb87416ae4f2b217b79ddd453ed9d65fe98aaee226c2cfa7c69e623cd03d8

  • Attack speed has an explicit diminishing-return curve

    data-and-engine-model. Record: reference/local-combat-formula-evidence-1.1.1.0.json/findings/8.

    Reviewed record SHA-256: 3c2eb87416ae4f2b217b79ddd453ed9d65fe98aaee226c2cfa7c69e623cd03d8

  • The emerald damage bonus is linear and capped

    direct native code plus authored item data. Record: reference/local-native-executable-evidence-1.1.1.0.json/findings/4.

    Reviewed record SHA-256: 98cb4f335426b463fb7713b434cdb380b843cf7c58cc6bfc1ba233fe37bf4e6a

Public evidence manifest and scalar datasets

Recovered passive-effect wiring

The following 18 families forward their stored item value to an AddBase modifier in Channel0. Their damage condition must still qualify. Fixed template values are not proof that every tier can roll on every item.

Local passive-effect modifier wiring
EffectAttributeOperationTier I / II / III stored values
SharpnessMeleeDamageSourceMultiplierAddBase · Channel00.1 / 0.2 / 0.3
ImpactRangedDamageSourceMultiplierAddBase · Channel00.1 / 0.2 / 0.3
FinesseMovementDamageMultiplierAddBase · Channel00.15 / 0.25 / 0.35
PyromancerFireDamageMultiplierAddBase · Channel00.1 / 0.15 / 0.2
SorcererArtifactDamageMultiplierAddBase · Channel00.1 / 0.15 / 0.2
ElectromancerLightningDamageMultiplierAddBase · Channel00.1 / 0.15 / 0.2
SoulmancerSoulDamageMultiplierAddBase · Channel00.1 / 0.15 / 0.2
VenomancerPoisonDamageMultiplierAddBase · Channel00.1 / 0.15 / 0.2
Critical EdgeCriticalHitMultiplierAddBase · Channel00.1 / 0.2 / 0.3
StrengthCriticalHitMultiplierMeleeAddBase · Channel00.15 / 0.2 / 0.25
MarksmanCriticalHitMultiplierRangedAddBase · Channel00.15 / 0.2 / 0.25
SharpshooterRangedChargedAttackMultiplierAddBase · Channel00.3 / 0.35 / 0.4
BullyOpportunityMultiplierAddBase · Channel00.25 / 0.35 / 0.5
CryomancerIceDamageMultiplierAddBase · Channel00.1 / 0.15 / 0.2
Point BlankRangedPointBlankAttackMultiplierAddBase · Channel00.25 / 0.5 / 0.75
DuelistPrimaryTargetDamageMultiplierAddBase · Channel00.2 / 0.25 / 0.3
Bounty HunterHurtTargetDamageMultiplierAddBase · Channel00.2 / 0.25 / 0.3
VanguardFullHealthTargetDamageMultiplierAddBase · Channel00.2 / 0.35 / 0.5
Evidence for this section
  • Equipped effect values feed their modifier tags directly

    Native equip chain and 24 synthetic value-forwarding scenarios. Record: reference/local-equipped-effect-evidence-1.1.1.0.json/findings/0.

    Reviewed record SHA-256: d456f3287ed00f3ca3e95e6def73c88b383823fb41a55127d7a21eca3517aadf

  • Simple passive effect instances use additive attribute contributions

    Native effect construction, stack lookup and previously recovered attribute aggregation. Record: reference/local-equipped-effect-evidence-1.1.1.0.json/findings/1.

    Reviewed record SHA-256: d456f3287ed00f3ca3e95e6def73c88b383823fb41a55127d7a21eca3517aadf

Public evidence manifest and scalar datasets

Sources & data coverage

Reviewed local game tables and selected native instructions from Windows build 1.1.1.0. Original-instruction tests use synthetic actors and engine services. They are not gameplay measurements; online overrides have not been observed.

Reviewed evidence manifest and scalar data