Skip to content

Batch 54 · Stat projection and player resource rules

2026-10-27. Starting HEAD 134e59e5; implementation a86b4742, with documentation committed separately. This is a checkpoint within the grouped R3 work, not completion of R3 or the rebuild.

Implementation boundary

PlayerStatProjection calculates from explicit primitive inputs/effects and returns a snapshot. PlayerModifier supplies live values and publishes results through its existing fields. Previous maximum-health/potion-cap reads, arithmetic/casts, setup yield order, update scheduling and upgrade mutation methods remain. This preserves stat consumers including Wu Ran/Tiamra companions and Zenova-specific inputs; their actual attacks are not exercised here.

PlayerResourceCycle owns stamina delay, immunity timing/gate, spending, recovery caps and heal transactions. IPlayerResourceState maps to existing Player/Entity fields without copying balances or changing serialized authoring. Player still owns perk checks, healing feedback and the scaled wait. Existing damage/death methods and all upgrade mutations are byte-preserved. No source/asset GUID is replaced and no scene/prefab/data file is edited.

Direct resource/stat mutation callers, ordered damage/status reactions, death/revive cancellation, dash hooks and explicit shared-scene capability activation remain. Active combat/vitals are still disabled in the shared arena. No caching/performance improvement or complete ownership migration is claimed.

Lightweight evidence

A headless pre-change capture records 217 stat cases across all seven released characters: 31 variants each, three projections and 24 outputs per case. Cases include individual stat abilities, mixed temporary/stat combinations, changed runtime weapon rates, changing live resources and previous-maximum behavior. The first capture fixture incorrectly treated one AbilityHolder field as a property and exits 1; corrected fixture capture exits 0 in 30.590 seconds. No game defect is inferred from that fixture error.

PlayerCapabilityReference.json preserves original source/Player/PlayerModifier identity and observations, SHA256 e1b1910376dfa4f0a68fb102b2071dc3b21bd3ae19a1dfe9f4f55856db89fa67. Reference values are not regenerated from the extraction.

Final combined checks exit 0 in 24.896 seconds, Unity 6000.2.8f1, Linux64 headless: all 217 original stat cases, 14 original character setup cases, six resource-rule groups and original resource sequences pass. The six groups cover stamina cap/tick boundaries; spend/pause/delayed resume; health/potion/wait/lock/caps; zero-power recovery; requested immunity/expiry; and player isolation/live stat projection. Setup checks reuse the earlier original 92-field/yield reference. Earlier scoped extraction comparison also exits 0 in 25.640 seconds. Existing CS8785 generator warnings remain; accepted logs contain no exception heading.

No new native build, desktop control or full playthrough; those remain in the later integration campaign. Batch 52 is the latest native smoke and predates these changes. No physical-device or Windows qualification claim.

Preservation and continuation

Private pre-change backup retains recoverable project/profile bytes. All 7,777 captured project files outside two intended source edits match; ten source/reference/metadata files are added. Reviewed generated Linux-toolchain package entries were archived and restored. Shared Unity session prefs were restored to exact original bytes; normal game-profile files/membership match the capture. Unresolved audio deletions and untracked Linux.meta remain excluded. Raw logs/backups stay outside Git. All 27 workstream follow-ups remain open.

Continue the R3 group with ordered damage/status, death/revive and minimum dash, migrating their remaining resource/stat callers and activation together. Preserve the character-specific attack routes. Use compilation and affected automated checks; reserve full control/build testing for the planned integration campaign.