Health, Shields & Displayed Damage
Why calculated damage, a popup and actual health lost can differ; recovered rejection rules, clamps and conditional survival protection.
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.
Damage popups have their own scaling
For a supported source slot and nonzero weapon multiplier W, displayScale = (1 + (ItemPower − 1) × 0.05) / W. Power 101 gives a numerator of 6; Power 143 gives 8.1. If a packet is B × W × otherFactors, multiplying it by this display scale cancels W in that expression.
The display helper and raw Health/Shield application are separate. Final popup formatting, rounding and every message consumer are not fully traced. A larger floating number cannot by itself establish the same increase in actual health removed.
Evidence for this section
- Floating damage numbers use linear Item Power scaling and can cancel the outgoing weapon multiplier
native display helper, 43 synthetic CPU emulation cases; conditional algebra. Record:
reference/local-weapon-power-evidence-1.1.1.0.json/findings/3.Reviewed record SHA-256:
e6dc83dce5131896015667bd9bfdc557abf5323849f6f22af54f570a6caa56b8 - Computed packet damage is routed to raw Health or Shield separately from visual scaling
direct native call sites; later health effects can still reject or alter the result. Record:
reference/local-native-followup-evidence-1.1.1.0.json/findings/7.Reviewed record SHA-256:
0a391d24d99bb4820a2e87030f360387bd895e6d1fef4b6e5289a1db0dc95714
A damage request can be rejected or clamped
The selected negative-Health handler rejects invulnerable targets and negligible magnitudes. An accepted modifier then passes through native attribute storage and its bounds. Overkill, a minimum Health bound and float32 precision can make health lost differ from the requested magnitude.
For a potentially lethal effect carrying the SW.Status asset predicate, the handler rejects the entire modifier when the target has NoExecute or the effect has StatusNonLethal. It does not simply reduce Health to 1. With Health 100, a qualifying nonlethal request of 20 can apply, while 100 or 150 is rejected.
A follow-up static trace shows the runtime effect finalizer adds the current type tag to both asset and owned tags. Generated Burning and Poisoned effects therefore receive their SW.Status descendant tag on that path. The additional NoExecute or StatusNonLethal condition is still required; this does not make all damage over time nonlethal.
Nine further controlled native checks connect GetAllAssetTags to the Health gate: definition asset tags and dynamic asset tags are combined, while target-owned status alone does not substitute for an effect asset tag. The sublethal cases bypass this tag check. Tag union and parent expansion remain explicit engine fixtures; this is not a full actor-lifecycle test.
Evidence for this section
- A damage request now reaches the native Health/Shield fields in controlled tests
Selected original-instruction execution with synthetic reflection and event services. Record:
reference/local-health-application-evidence-1.1.1.0.json/findings/0.Reviewed record SHA-256:
8d207e25e3097fb7d8a61cd5697066a763a741ec8b65351f8a3280c45344bee6 - Health limits apply to the stored base value
Native class registration and adjustment trace; emulated mode provider and clamp/storage path. Record:
reference/local-health-application-evidence-1.1.1.0.json/findings/1.Reviewed record SHA-256:
8d207e25e3097fb7d8a61cd5697066a763a741ec8b65351f8a3280c45344bee6 - The nonlethal status guard rejects the entire lethal modifier
Native gate execution with explicit target/effect tag predicates. Record:
reference/local-health-application-evidence-1.1.1.0.json/findings/3.Reviewed record SHA-256:
8d207e25e3097fb7d8a61cd5697066a763a741ec8b65351f8a3280c45344bee6 - An accepted modifier can still produce no stored health change
Native threshold and float32 arithmetic/storage boundary cases. Record:
reference/local-health-application-evidence-1.1.1.0.json/findings/4.Reviewed record SHA-256:
8d207e25e3097fb7d8a61cd5697066a763a741ec8b65351f8a3280c45344bee6 - Generated status effects receive their own type as an asset tag
Static native instruction and data-flow trace; not yet a full engine execution test. Record:
reference/local-status-tag-construction-evidence-1.1.1.0.json/findings/0.Reviewed record SHA-256:
d5823171f0c968f3d0c999fbce040d2fd018ec5fbf513203b6d6c90d4f70b6ac - The native Health gate reads the union of effect-definition and dynamic asset tags
Nine selected original-instruction cases with synthetic tag primitives and attributes. Record:
reference/local-status-asset-health-evidence-1.1.1.0.json/findings/0.Reviewed record SHA-256:
6e0834a0ae478f4f6183de21f02ee39d481bd950cbaa33d79619144816553e79
Shield routing depends on the effect's binding
The reviewed negative-Health path redirects to Shield only when current Shield is positive and the effect's ProtectedByShield value is positive. Its missing-binding fallback is zero. Having Shield points alone does not select that branch.
In an isolated native fixture, Health 100 / Shield 50 receiving damage 80 with protection enabled leaves Health at 100 and clamps current Shield to 0. The selected routine redirects the whole request; it does not split off another Health modifier. This is not a universal no-overflow guarantee: reactive listeners, persistent modifiers and alternative paths were excluded from that fixture.
The conditional poison example can now be carried through isolated Health storage: from independent Health-100 targets, a request of 4 removes 4 and a request of 64 removes 64 under the supplied neutral conditions. Actual bangle-to-target gameplay bindings still have to be closed before this becomes a general build prediction.
Evidence for this section
- Shield redirection depends on an effect binding as well as available Shield
Native Health pre-execution, attribute-mode and storage trace with explicit Shield fixtures. Record:
reference/local-health-application-evidence-1.1.1.0.json/findings/2.Reviewed record SHA-256:
8d207e25e3097fb7d8a61cd5697066a763a741ec8b65351f8a3280c45344bee6 - The conditional poison example now includes isolated Health loss
Portable model with twenty-five native comparisons and eighteen invalid-input rejections; conditional stage composition. Record:
reference/local-health-application-evidence-1.1.1.0.json/findings/5.Reviewed record SHA-256:
8d207e25e3097fb7d8a61cd5697066a763a741ec8b65351f8a3280c45344bee6
Other survival and maximum-health rules
The separate damage-packet path has conditional survival protection. The shipped player definition uses player-count thresholds of 40%, 60%, 70% and 80% for one to four counted players. When enabled, a lethal packet must meet both the damage threshold and current-health threshold; its damage is then reduced to current Health minus 1% of maximum Health, with a nonnegative final result. This is distinct from the status handler's all-or-nothing rejection.
For a valid owner and nonzero old maximum, the HealthMax callback writes clamp(currentHealth × newMax / oldMax, 0, newMax) as the new Health base. It preserves the fraction in that callback; other equipment, healing or respawn behavior can do additional work.
Evidence for this section
- Player-count thresholds control conditional protection against a lethal damage packet
direct native branch, authored DefaultPlayer data and CPU emulation. Record:
reference/local-native-followup-evidence-1.1.1.0.json/findings/3.Reviewed record SHA-256:
0a391d24d99bb4820a2e87030f360387bd895e6d1fef4b6e5289a1db0dc95714 - The health callback preserves the health fraction when maximum health changes
direct native attribute-change callback. Record:
reference/local-native-followup-evidence-1.1.1.0.json/findings/5.Reviewed record SHA-256:
0a391d24d99bb4820a2e87030f360387bd895e6d1fef4b6e5289a1db0dc95714
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.