urt-rs / docs /research /QVM_LIFECYCLE_RUST_BATCH.md
nmarshall's picture
gameplay: port interception animations
ae4d61e
|
Raw History Blame Contribute Delete
5.38 kB

Protected lifecycle and Rust batch

RE-736–745 continues from e1f7eb5a, with ten independently committed tasks. The goal remains a complete Urban Terror reconstruction in Rust with Bevy/Solari on macOS and Linux. This batch advances numeric simulation contracts and QVM lifecycle evidence; it does not establish a playable game or native binary parity.

Task Result Evidence
RE-736 Complete152386 protected progress and completion requests Protected update
RE-737 Mode10 entry gates, health/meter and protected flags Entry
RE-738 Original descriptor and stance animation dispatch Animation
RE-739 Inventory reset and obituary metadata Obituary
RE-740 Team counters, score requests and repeat penalties Scoring
RE-741 Complete206128 finite source composition Complete interception
RE-742 Actual lethal health suffix to complete interception Health composition
RE-743 Pure Rust protected progress primitive Rust protected update
RE-744 Pure Rust mode10 gate/state primitive Rust entry
RE-745 Pure Rust numeric animation/stance primitive Rust animation

The protected helper adds integer progress converted to float32 and accumulated heat, truncates, clamps negative progress and completes at32000. It consumes heat and copies the resulting progress to a nonnull attacker. Completion selects event107/108 and calls unresolved score/reset/log helpers. Invalid CVFI and flag0 completion with null attacker remain excluded from the finite source fixtures; the Rust numeric primitive explicitly rejects unsupported conversions.

Interception publishes health50 and meter15000, sets protected state, selects numeric animations, clears selected inventory/timer fields, emits obituary28, increments counters and requests scoring/notifications. Same-team penalties require a strictly greater-than2000 clock difference plus the other recovered gates. The health caller consumes a selected lethal interception even if the child's round gate prevents state changes. Source-level composition preserves this behavior.

Temporary event records are fixture allocations. The original277695 allocator is not executed here. Calls205260,6369,6439,7259,278834,285486, formatting70458 and command traps remain captured, with exact request arguments recorded. Numeric pointer arithmetic for names is not equivalent to executing formatting or validating native string access. These reports must not be read as end-to-end lifecycle parity.

The Rust gameplay crate now has four independent numeric contracts: impulse, protected progress, mode10 entry and animation dispatch. It still has no Bevy application loop or automatic lifecycle callback/event ownership. Rust source parity runs on this macOS host. Original binaries/DLLs, Linux execution, interactive graphics and Solari rendering remain unverified by this batch.

Validation cadence

Focused cargo xtask test-group checks precede each task commit. Reports regenerate twice to detect nondeterminism, then affected tests, storage policy, documentation links and whitespace guards run. The optional actual health interception resolver also passed the broader focused health regression without changing prior reports. Rust groups run only gameplay package tests and parity adapters. After commit ten, the single cargo xtask test-full --since e1f7eb5a run passed1413 Python tests and56 Rust tests (10 assets,18 gameplay,28 xtask). Twenty affected report producers regenerated twice byte-identically, and storage,304 documentation link checks and whitespace guards passed. The generated outputs matched committed reports. This documentation-only validation result is recorded by amending the tenth commit.

Remaining limits and next tasks

  1. Recover actual205260 scoring and6369 reset behavior, with argument-domain and aliasing checks.
  2. Recover6439,278834 and285486 notification internals and prove concrete callback registrations.
  3. Compose actual152386 with protected health mutation, including zero-attacker threshold behavior and original low-page reads.
  4. Compose interception from full211239 health entry and original-model contact; extend team/self/nonclient fixture coverage.
  5. Connect shared293732 and successful295018 pellet aggregation to actual health/lifecycle state with real trace responses.
  6. Extend Rust simulation with inventory, scoring, obituary and event ownership, preserving wrapping/signed behavior and explicit unsupported domains.
  7. Resolve numeric animation IDs to original model frame clips and implement hierarchy/tag/frame sampling in Rust.
  8. Continue native18183 loader/library ownership, failure paths and original executable/DLL runtime parity.
  9. Integrate actual asset VFS, simulation and world collision in a macOS/Linux Bevy runtime.
  10. Port rendering/materials to Solari and establish interactive platform validation and end-to-end gameplay acceptance.

RE-735 remains partially advanced, with the same full game objective. None of the ten bounded contracts closes the remaining native, renderer, engine or platform scope.