Confirm with your password

Balance formula and tuning

Let A be GCO's actual effective Block Armor and P its incoming stagger pressure:

P = max(0, hit.damage.GetTotalStaggerDamage() * max(0, hit.staggerMultiplier))
Capacity = CapacityBase + CapacityPerBlockArmor * A
ratio = P / Capacity
efficiency = clamp(LowArmorPenalty / (1 + A / ReferenceArmor), Minimum, Maximum)
x = max(0, ratio - StartRatio) / (BreakRatio - StartRatio)

if x < 1:
    multiplier = clamp(efficiency * (1 - x)^(-OverloadExponent), Minimum, Maximum)
else:
    multiplier = Maximum

baseline = P * (1 - clamp01(B - 0.05)) / max(0.05, T)
newCost = baseline * multiplier

B is GCO's combined category base rate and global base-rate multiplier. T is its computed block-break threshold multiplier. The mod retains both. Damage multipliers already present in the hit are not applied twice.

The audited game's stagger-damage sum includes blunt, slash, pierce and lightning. It excludes fire, frost, poison, spirit, chop, pickaxe and generic damage. The UI's blocked-damage number is not a substitute for P.

The original GCO cost is:

oldCost = max(0, P * max(0, 1 - clamp01(B + A/1000 - 0.05)) / max(0.05, T))

The mod reconstructs the baseline so the original high-armor zero-cost plateau cannot neutralize its efficiency/overload multiplier. Explicit zero-cost tuning through GCO's combined base rate still produces a zero baseline. Capacity-based failure remains independent of that baseline.

With start/break ratios of 1 and 2.5, the following are raw overload factors before armor efficiency and the final multiplier cap:

Pressure / Capacity Exponent 1 Exponent 2 Exponent 3
1.00 1.00 1.00 1.00
1.25 1.20 1.44 1.73
1.50 1.50 2.25 3.38
1.75 2.00 4.00 8.00
2.00 3.00 9.00 27.00
2.50 Forced failure Forced failure Forced failure

Forced failure requires positive pressure, enabled guard capacity and GCO's Souls-break mode for the active category. Exhaustion can cause guard failure before the forced threshold.

Invalid start/break pairs temporarily use Start + 1.5, capped at 100. If the maximum multiplier is below the minimum, the effective maximum equals the minimum. Non-finite values fall back to defaults and supported numeric ranges are enforced. These repairs affect the cached model without rewriting synchronized config values.