nmarshall commited on
Commit
e1f7eb5
·
1 Parent(s): 5529416

gameplay: source impulse contract

Browse files
Cargo.lock CHANGED
@@ -6,6 +6,10 @@ version = 4
6
  name = "urt-assets"
7
  version = "0.1.0"
8
 
 
 
 
 
9
  [[package]]
10
  name = "xtask"
11
  version = "0.1.0"
 
6
  name = "urt-assets"
7
  version = "0.1.0"
8
 
9
+ [[package]]
10
+ name = "urt-gameplay"
11
+ version = "0.1.0"
12
+
13
  [[package]]
14
  name = "xtask"
15
  version = "0.1.0"
Cargo.toml CHANGED
@@ -1,3 +1,3 @@
1
  [workspace]
2
- members = ["crates/urt-assets", "xtask"]
3
  resolver = "3"
 
1
  [workspace]
2
+ members = ["crates/urt-assets", "crates/urt-gameplay", "xtask"]
3
  resolver = "3"
crates/urt-gameplay/Cargo.toml ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ [package]
2
+ name = "urt-gameplay"
3
+ version = "0.1.0"
4
+ edition = "2024"
5
+ publish = false
crates/urt-gameplay/README.md ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # urt-gameplay
2
+
3
+ Dependency-free recovered gameplay primitives for the Rust rewrite. The first primitive ports QVM213009 velocity/timer behavior with source-order float32 operations. It accepts a supplied direction and preserves source guards, timer clamp and flag ordering.
4
+
5
+ ```sh
6
+ cargo test --offline --package urt-gameplay
7
+ cargo xtask test-group gameplay
8
+ ```
9
+
10
+ The CLI `urt-impulse` accepts unsigned words (client, knockback bits, scale bits, timer, flags, direction bits, velocity bits) and emits exact output words. It is a validation tool, not a game executable. Active nonfinite inputs/results and out-of-range integer conversion are rejected; their original runtime semantics remain unverified. Inactive no-client/zero-knockback guards preserve input state.
11
+
12
+ [Original source contract](../../docs/research/QVM_HEALTH_IMPULSE.md) and [Rust/source parity](../../docs/research/RUST_HEALTH_IMPULSE.md) retain the finite fixture scope. No Bevy component adapter, health/death system, native runtime or Solari rendering is included. Local validation is on macOS; Linux execution remains pending.
crates/urt-gameplay/src/bin/urt-impulse.rs ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ use urt_gameplay::{Motion, impulse};
2
+ fn main() {
3
+ if let Err(error) = run() {
4
+ eprintln!("{error}");
5
+ std::process::exit(2);
6
+ }
7
+ }
8
+ fn run() -> Result<(), String> {
9
+ let words: Vec<u32> = std::env::args()
10
+ .skip(1)
11
+ .map(|s| s.parse::<u32>().map_err(|e| e.to_string()))
12
+ .collect::<Result<_, _>>()?;
13
+ if words.len() != 11 || words[0] > 1 {
14
+ return Err("expected client(0/1), kb/scale float bits, timer/flags words, three direction and three velocity float words".into());
15
+ }
16
+ let r = impulse(
17
+ words[0] != 0,
18
+ [
19
+ f32::from_bits(words[5]),
20
+ f32::from_bits(words[6]),
21
+ f32::from_bits(words[7]),
22
+ ],
23
+ f32::from_bits(words[2]),
24
+ f32::from_bits(words[1]),
25
+ Motion {
26
+ timer: words[3] as i32,
27
+ flags: words[4],
28
+ velocity: [
29
+ f32::from_bits(words[8]),
30
+ f32::from_bits(words[9]),
31
+ f32::from_bits(words[10]),
32
+ ],
33
+ },
34
+ )
35
+ .map_err(|e| format!("unsupported input: {e:?}"))?;
36
+ println!(
37
+ "{{\"12\":{},\"16\":{},\"32\":{},\"36\":{},\"40\":{}}}",
38
+ r.flags,
39
+ r.timer as u32,
40
+ r.velocity[0].to_bits(),
41
+ r.velocity[1].to_bits(),
42
+ r.velocity[2].to_bits()
43
+ );
44
+ Ok(())
45
+ }
crates/urt-gameplay/src/lib.rs ADDED
@@ -0,0 +1,146 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ //! Recovered finite-domain gameplay contracts; no engine or rendering dependency.
2
+ #[derive(Clone, Copy, Debug, PartialEq)]
3
+ pub struct Motion {
4
+ pub velocity: [f32; 3],
5
+ pub timer: i32,
6
+ pub flags: u32,
7
+ }
8
+ #[derive(Clone, Copy, Debug, PartialEq, Eq)]
9
+ pub enum ImpulseError {
10
+ NonFinite,
11
+ TimerOutOfRange,
12
+ }
13
+ /// QVM213009: direction is supplied, not normalized here. Preserve f32 order.
14
+ /// Active paths reject nonfinite values/results and unsupported CVFI domains.
15
+ pub fn impulse(
16
+ has_client: bool,
17
+ direction: [f32; 3],
18
+ scale: f32,
19
+ knockback: f32,
20
+ state: Motion,
21
+ ) -> Result<Motion, ImpulseError> {
22
+ if !has_client || knockback == 0.0 {
23
+ return Ok(state);
24
+ }
25
+ if !direction
26
+ .iter()
27
+ .chain(state.velocity.iter())
28
+ .all(|v| v.is_finite())
29
+ || !scale.is_finite()
30
+ || !knockback.is_finite()
31
+ {
32
+ return Err(ImpulseError::NonFinite);
33
+ }
34
+ let coefficient = (scale * knockback) / 200.0;
35
+ let mut next = state;
36
+ for (velocity, component) in next.velocity.iter_mut().zip(direction) {
37
+ *velocity += component * coefficient;
38
+ }
39
+ if !next.velocity.iter().all(|v| v.is_finite()) {
40
+ return Err(ImpulseError::NonFinite);
41
+ }
42
+ if state.timer == 0 {
43
+ let timer = knockback * 2.0;
44
+ if !timer.is_finite()
45
+ || (timer as f64) < (i32::MIN as f64)
46
+ || (timer as f64) > (i32::MAX as f64)
47
+ {
48
+ return Err(ImpulseError::TimerOutOfRange);
49
+ }
50
+ next.timer = (timer as i32).clamp(50, 200);
51
+ next.flags |= 64;
52
+ }
53
+ Ok(next)
54
+ }
55
+ #[cfg(test)]
56
+ mod tests {
57
+ use super::*;
58
+ fn state() -> Motion {
59
+ Motion {
60
+ velocity: [1., -2., 3.],
61
+ timer: 0,
62
+ flags: 8,
63
+ }
64
+ }
65
+ #[test]
66
+ fn zero_and_no_client_preserve_state() {
67
+ assert_eq!(
68
+ impulse(true, [1.; 3], 1000., -0., state()).unwrap(),
69
+ state()
70
+ );
71
+ assert_eq!(
72
+ impulse(false, [f32::NAN; 3], f32::NAN, f32::NAN, state()).unwrap(),
73
+ state()
74
+ );
75
+ }
76
+ #[test]
77
+ fn source_order_fixture() {
78
+ let r = impulse(true, [0.6, -0.8, 0.25], 1000., 25., state()).unwrap();
79
+ assert_eq!(
80
+ r,
81
+ Motion {
82
+ velocity: [76., -102., 34.25],
83
+ timer: 50,
84
+ flags: 72
85
+ }
86
+ );
87
+ }
88
+ #[test]
89
+ fn timer_bounds() {
90
+ assert_eq!(impulse(true, [0.; 3], 0., 0.25, state()).unwrap().timer, 50);
91
+ assert_eq!(
92
+ impulse(true, [0.; 3], 0., 101., state()).unwrap().timer,
93
+ 200
94
+ );
95
+ }
96
+ #[test]
97
+ fn existing_timer_keeps_flags_but_changes_velocity() {
98
+ let s = Motion {
99
+ timer: -1,
100
+ ..state()
101
+ };
102
+ let r = impulse(true, [1., 0., 0.], 1000., 25., s).unwrap();
103
+ assert_eq!(r.timer, -1);
104
+ assert_eq!(r.flags, 8);
105
+ assert_eq!(r.velocity, [126., -2., 3.]);
106
+ }
107
+ #[test]
108
+ fn negative_knockback_is_not_clamped_to_zero() {
109
+ let r = impulse(true, [0., 1., 0.], 1000., -2., state()).unwrap();
110
+ assert_eq!(r.velocity, [1., -12., 3.]);
111
+ assert_eq!(r.timer, 50);
112
+ }
113
+ #[test]
114
+ fn existing_flag_bits_are_preserved() {
115
+ let r = impulse(
116
+ true,
117
+ [0.; 3],
118
+ 0.,
119
+ 1.,
120
+ Motion {
121
+ flags: 0x80000008,
122
+ ..state()
123
+ },
124
+ )
125
+ .unwrap();
126
+ assert_eq!(r.flags, 0x80000048);
127
+ }
128
+ #[test]
129
+ fn active_nonfinite_and_overflow_are_rejected() {
130
+ assert_eq!(
131
+ impulse(true, [f32::NAN; 3], 1., 1., state()),
132
+ Err(ImpulseError::NonFinite)
133
+ );
134
+ assert_eq!(
135
+ impulse(true, [f32::MAX; 3], f32::MAX, 100., state()),
136
+ Err(ImpulseError::NonFinite)
137
+ );
138
+ }
139
+ #[test]
140
+ fn unsupported_integer_conversion_is_rejected() {
141
+ assert_eq!(
142
+ impulse(true, [0.; 3], 0., f32::MAX, state()),
143
+ Err(ImpulseError::TimerOutOfRange)
144
+ );
145
+ }
146
+ }
docs/ASSET_PIPELINE_TODO.md CHANGED
@@ -865,3 +865,9 @@ Research progress: RE-732 [report](research/QVM_HEALTH_COMPLETE.md); original as
865
 
866
 
867
  Research progress: RE-733 [report](research/QVM_CONTACT_HEALTH.md); original assets unchanged.
 
 
 
 
 
 
 
865
 
866
 
867
  Research progress: RE-733 [report](research/QVM_CONTACT_HEALTH.md); original assets unchanged.
868
+
869
+
870
+ Research progress: RE-734 [report](research/RUST_HEALTH_IMPULSE.md); original assets unchanged.
871
+
872
+
873
+ RE-725–734 batch: [health, contact and Rust impulse findings](research/QVM_HEALTH_RUST_BATCH.md). Complete finite211239/213009 and original-context contact composition now execute with explicit unresolved callback/native boundaries. The Rust impulse primitive matches96 fixtures; full Bevy/Solari/platform gameplay remains open. RE-724 is partially advanced and RE-735 tracks subsequent work.
docs/FINDINGS.md CHANGED
@@ -1211,3 +1211,9 @@ RE-714–723 batch complete: [complete contact and health prefixes](research/QVM
1211
 
1212
 
1213
  **RE-733 — Complete original-model contact to actual health:** Original-model contact now executes actual211239 health/impulse effects while preserving contact return, event payload and special-weapon4 bypass behavior; default captured-health reports remain unchanged. [Evidence](research/QVM_CONTACT_HEALTH.md).
 
 
 
 
 
 
 
1211
 
1212
 
1213
  **RE-733 — Complete original-model contact to actual health:** Original-model contact now executes actual211239 health/impulse effects while preserving contact return, event payload and special-weapon4 bypass behavior; default captured-health reports remain unchanged. [Evidence](research/QVM_CONTACT_HEALTH.md).
1214
+
1215
+
1216
+ **RE-734 — Rust source-order health impulse primitive:** Dependency-free urt-gameplay ports213009 velocity/timer rules; exact word comparisons match all96 source fixtures, with active nonfinite/unsupported integer-conversion domains rejected explicitly. [Evidence](research/RUST_HEALTH_IMPULSE.md).
1217
+
1218
+
1219
+ RE-725–734 batch: [health, contact and Rust impulse findings](research/QVM_HEALTH_RUST_BATCH.md). Complete finite211239/213009 and original-context contact composition now execute with explicit unresolved callback/native boundaries. The Rust impulse primitive matches96 fixtures; full Bevy/Solari/platform gameplay remains open. RE-724 is partially advanced and RE-735 tracks subsequent work.
docs/PROVISIONAL_TODO.md CHANGED
@@ -1200,3 +1200,9 @@ Research progress: RE-732 [report](research/QVM_HEALTH_COMPLETE.md); full native
1200
 
1201
 
1202
  Research progress: RE-733 [report](research/QVM_CONTACT_HEALTH.md); full native/platform/game scope remains open.
 
 
 
 
 
 
 
1200
 
1201
 
1202
  Research progress: RE-733 [report](research/QVM_CONTACT_HEALTH.md); full native/platform/game scope remains open.
1203
+
1204
+
1205
+ Research progress: RE-734 [report](research/RUST_HEALTH_IMPULSE.md); full native/platform/game scope remains open.
1206
+
1207
+
1208
+ RE-725–734 batch: [health, contact and Rust impulse findings](research/QVM_HEALTH_RUST_BATCH.md). Complete finite211239/213009 and original-context contact composition now execute with explicit unresolved callback/native boundaries. The Rust impulse primitive matches96 fixtures; full Bevy/Solari/platform gameplay remains open. RE-724 is partially advanced and RE-735 tracks subsequent work.
docs/RESEARCH_LEDGER.md CHANGED
@@ -1308,3 +1308,16 @@ Complete211239 now composes gates, routing, normalization, bookkeeping, special
1308
  ## 2026-10-21 — RE-733 Complete original-model contact to actual health
1309
 
1310
  Original-model contact now executes actual211239 health/impulse effects while preserving contact return, event payload and special-weapon4 bypass behavior; default captured-health reports remain unchanged. Focused `cargo xtask test-group contact` passes (163 Python tests); selected reports regenerate twice byte-identically, with storage, links and whitespace guards. New report: 1079948 bytes. Full-suite validation is deferred to the tenth batch commit. No original assets, Rust runtime or shared VM evaluator changed.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1308
  ## 2026-10-21 — RE-733 Complete original-model contact to actual health
1309
 
1310
  Original-model contact now executes actual211239 health/impulse effects while preserving contact return, event payload and special-weapon4 bypass behavior; default captured-health reports remain unchanged. Focused `cargo xtask test-group contact` passes (163 Python tests); selected reports regenerate twice byte-identically, with storage, links and whitespace guards. New report: 1079948 bytes. Full-suite validation is deferred to the tenth batch commit. No original assets, Rust runtime or shared VM evaluator changed.
1311
+
1312
+
1313
+ ## 2026-10-21 — RE-734 Rust source-order health impulse primitive
1314
+
1315
+ Dependency-free urt-gameplay ports213009 velocity/timer rules; exact word comparisons match all96 source fixtures, with active nonfinite/unsupported integer-conversion domains rejected explicitly. Focused `cargo xtask test-group gameplay` passes (4 Python tests); selected reports regenerate twice byte-identically, with storage, links and whitespace guards. New report: 55810 bytes. Full-suite validation is deferred to the tenth batch commit. Adds the Rust impulse primitive; original assets and shared VM evaluator remain unchanged.
1316
+
1317
+
1318
+ RE-734 also passes28 focused xtask unit tests after replacing brittle fixed health-group counts with required-consumer assertions. The [RE-725–734 overview](research/QVM_HEALTH_RUST_BATCH.md) records per-task reduced checks and the full-suite gate scheduled after commit ten. Original assets and the shared VM evaluator are unchanged.
1319
+
1320
+
1321
+ ## 2026-10-21 — RE-725–734 batch gate after commit ten
1322
+
1323
+ Exactly ten task commits follow1550ce07. Each task passed focused cargo xtask checks before its commit. The one full `cargo xtask test-full --since 1550ce07` run after commit ten passes all1,383 Python tests and46 Rust tests (10 assets,28 runner,8 gameplay). Twenty affected producers regenerate twice byte-identically; all committed reports remain unchanged after the run. Storage/filter, documentation links and staged/unstaged whitespace guards pass. Only this result documentation is amended into the tenth task commit; no second full run is needed for the metadata update. Original assets/shared VM evaluator remain unchanged; RE-735 records unresolved callback/native/shared-pellet/platform work.
docs/REVERSE_ENGINEERING_TODO.md CHANGED
@@ -1215,7 +1215,7 @@ Purpose: turn the supplied installation into an evidence-backed specification of
1215
  - [x] RE-723 Health normalization and knockback selection ([report](research/QVM_HEALTH_KNOCKBACK.md)).
1216
 
1217
 
1218
- - [ ] RE-724 Complete health211239 and impulse213009, compose actual contact/health/shared-pellet paths with original-model geometry, capture native parity and advance interactive Rust/Bevy/Solari on macOS/Linux. See the [next ten tasks](research/QVM_CONTACT_HEALTH_BATCH.md#remaining-limits-and-next-ten-tasks).
1219
 
1220
 
1221
  - [x] RE-725 Health pointer fallback and target routing ([report](research/QVM_HEALTH_ROUTING.md)).
@@ -1243,3 +1243,9 @@ Purpose: turn the supplied installation into an evidence-backed specification of
1243
 
1244
 
1245
  - [x] RE-733 Complete original-model contact to actual health ([report](research/QVM_CONTACT_HEALTH.md)).
 
 
 
 
 
 
 
1215
  - [x] RE-723 Health normalization and knockback selection ([report](research/QVM_HEALTH_KNOCKBACK.md)).
1216
 
1217
 
1218
+ - [ ] RE-724 Complete health211239 and impulse213009, compose actual contact/health/shared-pellet paths with original-model geometry, capture native parity and advance interactive Rust/Bevy/Solari on macOS/Linux. Partially advanced by RE-725–734: complete finite health/contact and a Rust impulse primitive are recovered; callbacks/shared-pellet/native/platform scope remains open. See the [next ten tasks](research/QVM_CONTACT_HEALTH_BATCH.md#remaining-limits-and-next-ten-tasks).
1219
 
1220
 
1221
  - [x] RE-725 Health pointer fallback and target routing ([report](research/QVM_HEALTH_ROUTING.md)).
 
1243
 
1244
 
1245
  - [x] RE-733 Complete original-model contact to actual health ([report](research/QVM_CONTACT_HEALTH.md)).
1246
+
1247
+
1248
+ - [x] RE-734 Rust source-order health impulse primitive ([report](research/RUST_HEALTH_IMPULSE.md)).
1249
+
1250
+
1251
+ - [ ] RE-735 Resolve actual health callbacks/interception, continue shared/pellet health composition, port additional simulation contracts into Rust and validate native/platform/runtime behavior. See the [next tasks](research/QVM_HEALTH_RUST_BATCH.md#remaining-limits-and-next-tasks).
docs/RUST_BEVY_SOLARI_TODO.md CHANGED
@@ -237,3 +237,8 @@ These are design candidates, not files already implemented. Share authoritative
237
  - [ ] RW-171 Establish signing/notarization policy where applicable, reproducible release manifests, checksums, and permitted asset distribution.
238
  - [ ] RW-172 Document installation, controls, conversion, development, server administration, compatibility, hardware, performance, and troubleshooting.
239
  - [ ] RW-173 Complete the full final validation gate, close required-content/behavior/rendering blockers, and publish a versioned fidelity/compatibility report.
 
 
 
 
 
 
237
  - [ ] RW-171 Establish signing/notarization policy where applicable, reproducible release manifests, checksums, and permitted asset distribution.
238
  - [ ] RW-172 Document installation, controls, conversion, development, server administration, compatibility, hardware, performance, and troubleshooting.
239
  - [ ] RW-173 Complete the full final validation gate, close required-content/behavior/rendering blockers, and publish a versioned fidelity/compatibility report.
240
+
241
+
242
+ ## Recovered gameplay primitive — RE-734
243
+
244
+ The dependency-free [urt-gameplay impulse port](../crates/urt-gameplay/README.md) matches96 source213009 fixtures exactly, with eight Rust unit tests. This is the first finite gameplay primitive; full Rust health/death, Bevy components, native parity, Solari rendering and macOS/Linux gameplay remain open. See the [batch findings](research/QVM_HEALTH_RUST_BATCH.md).
docs/TESTING.md CHANGED
@@ -28,7 +28,7 @@ cargo xtask test-full --since <batch-base>
28
 
29
  `--path scripts/qvm_health_support.py` adds an explicit changed input to `test-changed` or `test-full`, useful for previews without editing a file. Paths are repository-relative. `--dry-run` prints the selected report producers, test modules, reasons and fallback conditions without executing analyzers/tests/checks. Cargo may still compile the runner.
30
 
31
- Use focused validation before each task commit and `test-full --since <batch-base>` before pushing a batch. Full native macOS/Linux runtime, rendering and release validation remain separate project gates; this runner does not execute the original game or establish those milestones.
32
 
33
  Cargo, rustc, Python 3 and Git must be available. Set `RUSTC` if the compiler is outside PATH, and `PYTHON` to override the default `python3` executable. Set up the repository's [storage filters](STORAGE.md) first: every executed validation requires `storage_policy.py check --require-setup`. Asset corpus checks require the local extracted assets. Native analyzers also require their original inputs, pinned reference files and existing native-analysis tools. The runner does not fetch those prerequisites or install dependencies.
34
 
@@ -36,13 +36,13 @@ Cargo, rustc, Python 3 and Git must be available. Set `RUSTC` if the compiler is
36
 
37
  The graph follows input → consumer edges through local Python imports, report producers/outputs, report readers and imported test oracles. Changes to a generated report also select its producer, so testing cannot silently accept a hand-edited cached report. Changes under `crates/urt-assets/` select its Rust/Python corpus parity producer and downstream consumers, plus Rust workspace tests.
38
 
39
- For example, `qvm_health_support.py` currently selects two analyzers, `analyze_qvm_health_gates.py` and `analyze_qvm_health_knockback.py`, and their two test modules. A shared QVM evaluator or broad native parser change can correctly select most of the research suite. Selection is conservative at the Python module level, not individual function level.
40
 
41
  The graph combines:
42
 
43
  - Current Python syntax, inspected with `ast` without importing repository modules. This handles imports and literal report reads/writes, including test-to-test helper dependencies.
44
  - The versioned [registry](../xtask/checks.tsv), which declares report ownership, dynamic path dependencies, reviewed multi-output writers and named groups.
45
- - Explicit Rust crate-to-corpus validation rules in the runner.
46
 
47
  Groups currently include `health`, `contact`, `damage`, `md3`, `movement`, `native`, `network` and `storage`. A group is a set of graph roots and includes downstream dependents; it is not an isolated folder or a promise to exclude dependent systems. Imports can make a broad native group reach most research tests.
48
 
 
28
 
29
  `--path scripts/qvm_health_support.py` adds an explicit changed input to `test-changed` or `test-full`, useful for previews without editing a file. Paths are repository-relative. `--dry-run` prints the selected report producers, test modules, reasons and fallback conditions without executing analyzers/tests/checks. Cargo may still compile the runner.
30
 
31
+ Use focused validation before each task commit. For ten-commit batches, run `test-full --since <batch-base>` once after the tenth commit and before pushing. If registry/workspace edits would force broad automatic fallback during a batch, use a reviewed explicit group plus relevant package tests, then retain the full batch gate; do not disable fallback or omit affected shared-helper consumers. Full native macOS/Linux runtime, rendering and release validation remain separate project gates; this runner does not execute the original game or establish those milestones.
32
 
33
  Cargo, rustc, Python 3 and Git must be available. Set `RUSTC` if the compiler is outside PATH, and `PYTHON` to override the default `python3` executable. Set up the repository's [storage filters](STORAGE.md) first: every executed validation requires `storage_policy.py check --require-setup`. Asset corpus checks require the local extracted assets. Native analyzers also require their original inputs, pinned reference files and existing native-analysis tools. The runner does not fetch those prerequisites or install dependencies.
34
 
 
36
 
37
  The graph follows input → consumer edges through local Python imports, report producers/outputs, report readers and imported test oracles. Changes to a generated report also select its producer, so testing cannot silently accept a hand-edited cached report. Changes under `crates/urt-assets/` select its Rust/Python corpus parity producer and downstream consumers, plus Rust workspace tests.
38
 
39
+ For example, `qvm_health_support.py` selects the health-gates/knockback analyzers and their growing downstream health, contact and Rust parity consumers. Preview the current scope with `cargo xtask test-group health --dry-run`; group membership is not a fixed test count. A shared QVM evaluator or broad native parser change can correctly select most of the research suite. Selection is conservative at the Python module level, not individual function level.
40
 
41
  The graph combines:
42
 
43
  - Current Python syntax, inspected with `ast` without importing repository modules. This handles imports and literal report reads/writes, including test-to-test helper dependencies.
44
  - The versioned [registry](../xtask/checks.tsv), which declares report ownership, dynamic path dependencies, reviewed multi-output writers and named groups.
45
+ - Rust crate-to-corpus validation rules in the runner and registry. The gameplay crate declares its source/manifest dependencies explicitly in the registry.
46
 
47
  Groups currently include `health`, `contact`, `damage`, `md3`, `movement`, `native`, `network` and `storage`. A group is a set of graph roots and includes downstream dependents; it is not an isolated folder or a promise to exclude dependent systems. Imports can make a broad native group reach most research tests.
48
 
docs/research/QVM_CONTACT_HEALTH_BATCH.md CHANGED
@@ -43,3 +43,6 @@ RE-713 is partially advanced: complete contact composition and health prefixes a
43
  8. Continue shared293732 trace/contact/statistics and successful295018 pellet aggregation using original-model geometry.
44
  9. Recover native loader18183 ownership/endian/failure and capture original executable/DLL parity for geometry, math, inventory and live animation/clock domains.
45
  10. Port verified asset/interpolation/geometry contracts into Rust, integrate Bevy/Solari, and validate the first interactive macOS/Linux slice with the remaining map/material/texture/audio/network/lifecycle/packaging work.
 
 
 
 
43
  8. Continue shared293732 trace/contact/statistics and successful295018 pellet aggregation using original-model geometry.
44
  9. Recover native loader18183 ownership/endian/failure and capture original executable/DLL parity for geometry, math, inventory and live animation/clock domains.
45
  10. Port verified asset/interpolation/geometry contracts into Rust, integrate Bevy/Solari, and validate the first interactive macOS/Linux slice with the remaining map/material/texture/audio/network/lifecycle/packaging work.
46
+
47
+
48
+ Follow-up: [RE-725–734](QVM_HEALTH_RUST_BATCH.md) composes complete finite health/contact flow and ports source213009 into Rust. Concrete callbacks, native parity, shared/pellet callers and playable platforms remain open; RE-735 tracks subsequent work.
docs/research/QVM_HEALTH_RUST_BATCH.md ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Health effects, contact composition and Rust impulse: RE-725–734
2
+
3
+ Ten separately committed tasks extend the [contact/health-prefix batch](QVM_CONTACT_HEALTH_BATCH.md). Complete211239 now runs through ordinary/special health changes and actual213009 impulses, and complete292545 composes it with cached original-model contexts. A dependency-free Rust gameplay crate ports the finite impulse contract. Captured callbacks and native/world/platform behavior remain open.
4
+
5
+ | Task | Completed scope | Evidence |
6
+ | --- | --- | --- |
7
+ | RE-725 | Pointer fallback and special target-kind routing | [Routing](QVM_HEALTH_ROUTING.md) |
8
+ | RE-726 | Attacker credit, minimum damage and client damage records | [Bookkeeping](QVM_HEALTH_CREDIT.md) |
9
+ | RE-727 | Magic-checksum classes, method filters and actual RNG | [Special targets](QVM_HEALTH_SPECIAL_TARGET.md) |
10
+ | RE-728 | Mode10 lethal interception and method24 override | [Interception](QVM_HEALTH_INTERCEPTS.md) |
11
+ | RE-729 | Ordinary subtraction, protected floor and actual meter child | [Mutation](QVM_HEALTH_MUTATION.md) |
12
+ | RE-730 | Packed meter cap, pain/death ABI and terminal ordering | [Terminal processing](QVM_HEALTH_TERMINAL.md) |
13
+ | RE-731 | Complete source velocity impulse and movement timer | [Impulse](QVM_HEALTH_IMPULSE.md) |
14
+ | RE-732 | Complete211239 with actual RNG/meter/impulse children | [Complete health](QVM_HEALTH_COMPLETE.md) |
15
+ | RE-733 | Original-model contact composed with actual health | [Contact to health](QVM_CONTACT_HEALTH.md) |
16
+ | RE-734 | Rust impulse library/CLI and exact source-word parity | [Rust port](RUST_HEALTH_IMPULSE.md) |
17
+
18
+ ## Recovered behavior
19
+
20
+ Null inflictor/attacker pointers become the world record. Target kind4 with a nonmagic checksum diverts to a callback gated by target656 and object state, then exits. Accepted normal damage updates attacker credit and client damage records, clamps incoming integer damage to at least1 and publishes attacker/method/direction or origin before subtraction.
21
+
22
+ The magic checksum uses an original11-entry class jump table. Method34 forces health−999; other methods can be filtered, halved or replaced by1/2/3 damage using actual36717 seed updates and thresholds50/85. Mode10 can intercept lethal distinct-client damage through206128. Method24/global34066516 can request an impulse without ordinary subtraction. These intercepted/callback effects are captured, not supplied as successful gameplay outcomes.
23
+
24
+ Ordinary damage subtracts selected damage. A protected-client flag floors health at5 and updates flags/meter state before capturing152386. Actual211197 drains client184 by300×selected damage with floor0. Attacker/location and client208 health publish before terminal processing. The terminal entity health floor−999 does not republish client208, so the two fields can differ afterward. Packed client228 low16 values above500 become exactly500, clearing the upper word, except for method26. Pain/death callbacks use distinct argument layouts and ordering.
25
+
26
+ Complete213009 adds supplied direction×(global scale×knockback/200) in source float32 order. It skips null clients and float zero knockback. Velocity can change while an existing nonzero timer remains intact. A zero timer becomes truncating knockback×2 clamped to50–200 and movement flag64 is set. Direction normalization occurs earlier in211239; the impulse helper does not normalize.
27
+
28
+ The complete health oracle checks tracked entity/client fields, direction, attacker credit, seed and tracking state. Contact composition preserves original scalar returns and event payloads while applying actual health/impulse changes afterward. All35 cached contact cases retain their exact report provenance. The nonclient sample reads file-backed VM words104/220, both zero; this finite flat-VM case does not establish native null-pointer or live-world legality. Special weapon4 contact still bypasses ordinary health dispatch.
29
+
30
+ ## Rust and validation policy
31
+
32
+ [urt-gameplay](../../crates/urt-gameplay/README.md) contains a dependency-free simulation primitive and word-oriented CLI. All96 source impulse fixtures match exactly; eight Rust unit tests cover guards, timer bounds, bit preservation, negative knockback and explicit domain rejection. Active nonfinite/output-overflow and unsupported float-to-integer domains reject rather than guessing original runtime behavior. No Bevy adapter, renderer or full Rust health/death system is introduced. Host validation is on macOS; Linux execution remains open.
33
+
34
+ Each task uses focused `cargo xtask test-group` validation before its commit, with two-pass affected report regeneration and storage/link/whitespace guards. Focused Python counts grow from12 to41 for the health group; the shared contact-helper change uses the contact group (163 tests). The Rust task uses the gameplay group (four Python parity tests plus its eight package tests) and28 focused xtask unit tests. No full workspace/suite run occurs before the tenth task commit. Registry ownership and groups are updated with each task; the representative xtask health check now requires known consumers without hard-coding a fixed group size.
35
+
36
+ The single full-suite gate ran after commit ten using `cargo xtask test-full --since 1550ce07`: all1,383 Python tests and46 Rust tests passed. Twenty affected report producers regenerated twice byte-identically, leaving the working tree clean. The Python baseline grows1341→1383; Rust now includes10 asset tests,28 runner tests and8 gameplay tests. Final task documentation is amended only to record these results. Original assets and the shared VM evaluator remain unchanged; earlier reports retain their default captured-child behavior.
37
+
38
+ ## Remaining limits and next tasks
39
+
40
+ RE-724 is partially advanced. Complete function control flow and finite source contracts do not resolve the original registered callback implementations, native math/link/heap behavior, live-world geometry or platform/game completion. RE-735 tracks subsequent work:
41
+
42
+ 1. Recover152386 protected updates and206128 mode10 interception effects beyond captured requests.
43
+ 2. Resolve object/pain/death callback registrations and concrete implementations from actual entity/native evidence.
44
+ 3. Validate full nonclient health and VM low-page reads, extreme integer/clock domains and native reference parity.
45
+ 4. Compose shared293732 firing trace/contact/statistics through actual health and original-model geometry.
46
+ 5. Recover successful295018 pellet aggregation and compose its target/location health effects.
47
+ 6. Port verified health gates, damage selection and attribution into Rust with exact source fixtures.
48
+ 7. Add Rust frame/tag/hierarchy/geometry contracts and explicit Bevy asset/VFS resolution for case and archive variants.
49
+ 8. Recover native loader18183 ownership/endian/failure and confirm model lifetime contracts.
50
+ 9. Capture original executable/DLL traces for geometry, math, callbacks, inventory and live frame/clock state.
51
+ 10. Integrate and validate an interactive macOS/Linux Bevy/Solari slice, continuing maps/materials/textures/audio/network/lifecycle/packaging work.
docs/research/README.md CHANGED
@@ -801,3 +801,9 @@ The extension collector adds five focused tests for native tail calls, command-r
801
 
802
 
803
  [RE-733: Complete original-model contact to actual health](QVM_CONTACT_HEALTH.md).
 
 
 
 
 
 
 
801
 
802
 
803
  [RE-733: Complete original-model contact to actual health](QVM_CONTACT_HEALTH.md).
804
+
805
+
806
+ [RE-734: Rust source-order health impulse primitive](RUST_HEALTH_IMPULSE.md).
807
+
808
+
809
+ [RE-725–734 batch overview and subsequent tasks](QVM_HEALTH_RUST_BATCH.md).
docs/research/RUST_HEALTH_IMPULSE.md ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # Rust source-order health impulse primitive
2
+
3
+ RE-734. Reproduce with `python3 scripts/analyze_rust_health_impulse.py`; validate with `cargo xtask test-group gameplay`. See the [machine report](rust-health-impulse.json).
4
+
5
+ The new dependency-free Rust crate urt-gameplay implements the finite213009 impulse contract using source-order float32 arithmetic, short-circuit guards, timer clamp and flag preservation. The CLI accepts/returns exact unsigned words. Eight Rust tests exercise numeric domains, existing timers, negative knockback and unsupported inputs. Python/Rust comparisons retain the source report hash and compare all96 source fixtures, with an independent float32 oracle and explicit nonfinite rejection. The package-scoped report producer keeps crate test ownership independent of the workspace. The xtask representative health test now checks mandatory consumers rather than a fixed count, allowing new health dependents without false failures. This is a headless simulation primitive, not Bevy integration or gameplay completion; native/Linux runtime parity and nonfinite original semantics remain open.
6
+
7
+ No original executable/full VM/native world collision or rendering runs. Supplied callback/native responses and fixture domains remain explicit; complete macOS/Linux Rust/Bevy/Solari gameplay remains open.
docs/research/rust-health-impulse.json ADDED
@@ -0,0 +1,2991 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "limits": "Rust/source213009 word parity across96 finite fixtures; no-client preservation additionally checked in Rust. Active nonfinite/unsupported CVFI domains reject explicitly. Host macOS; Linux and full Bevy/Solari gameplay remain open.",
3
+ "probes": [
4
+ {
5
+ "initial_motion": {
6
+ "12": 8,
7
+ "16": 0,
8
+ "32": 1065353216,
9
+ "36": 3221225472,
10
+ "40": 1077936128
11
+ },
12
+ "input": {
13
+ "client": false,
14
+ "direction": [
15
+ 0,
16
+ 0,
17
+ 0
18
+ ],
19
+ "knockback": -2,
20
+ "scale": 0,
21
+ "timer": 0
22
+ },
23
+ "rust": {
24
+ "12": 8,
25
+ "16": 0,
26
+ "32": 1065353216,
27
+ "36": 3221225472,
28
+ "40": 1077936128
29
+ },
30
+ "source_final": null
31
+ },
32
+ {
33
+ "initial_motion": {
34
+ "12": 8,
35
+ "16": 0,
36
+ "32": 1065353216,
37
+ "36": 3221225472,
38
+ "40": 1077936128
39
+ },
40
+ "input": {
41
+ "client": false,
42
+ "direction": [
43
+ 0.6,
44
+ -0.8,
45
+ 0.25
46
+ ],
47
+ "knockback": -2,
48
+ "scale": 0,
49
+ "timer": 0
50
+ },
51
+ "rust": {
52
+ "12": 8,
53
+ "16": 0,
54
+ "32": 1065353216,
55
+ "36": 3221225472,
56
+ "40": 1077936128
57
+ },
58
+ "source_final": null
59
+ },
60
+ {
61
+ "initial_motion": {
62
+ "12": 8,
63
+ "16": 10,
64
+ "32": 1065353216,
65
+ "36": 3221225472,
66
+ "40": 1077936128
67
+ },
68
+ "input": {
69
+ "client": false,
70
+ "direction": [
71
+ 0,
72
+ 0,
73
+ 0
74
+ ],
75
+ "knockback": -2,
76
+ "scale": 0,
77
+ "timer": 10
78
+ },
79
+ "rust": {
80
+ "12": 8,
81
+ "16": 10,
82
+ "32": 1065353216,
83
+ "36": 3221225472,
84
+ "40": 1077936128
85
+ },
86
+ "source_final": null
87
+ },
88
+ {
89
+ "initial_motion": {
90
+ "12": 8,
91
+ "16": 10,
92
+ "32": 1065353216,
93
+ "36": 3221225472,
94
+ "40": 1077936128
95
+ },
96
+ "input": {
97
+ "client": false,
98
+ "direction": [
99
+ 0.6,
100
+ -0.8,
101
+ 0.25
102
+ ],
103
+ "knockback": -2,
104
+ "scale": 0,
105
+ "timer": 10
106
+ },
107
+ "rust": {
108
+ "12": 8,
109
+ "16": 10,
110
+ "32": 1065353216,
111
+ "36": 3221225472,
112
+ "40": 1077936128
113
+ },
114
+ "source_final": null
115
+ },
116
+ {
117
+ "initial_motion": {
118
+ "12": 8,
119
+ "16": 0,
120
+ "32": 1065353216,
121
+ "36": 3221225472,
122
+ "40": 1077936128
123
+ },
124
+ "input": {
125
+ "client": false,
126
+ "direction": [
127
+ 0,
128
+ 0,
129
+ 0
130
+ ],
131
+ "knockback": -2,
132
+ "scale": 1000,
133
+ "timer": 0
134
+ },
135
+ "rust": {
136
+ "12": 8,
137
+ "16": 0,
138
+ "32": 1065353216,
139
+ "36": 3221225472,
140
+ "40": 1077936128
141
+ },
142
+ "source_final": null
143
+ },
144
+ {
145
+ "initial_motion": {
146
+ "12": 8,
147
+ "16": 0,
148
+ "32": 1065353216,
149
+ "36": 3221225472,
150
+ "40": 1077936128
151
+ },
152
+ "input": {
153
+ "client": false,
154
+ "direction": [
155
+ 0.6,
156
+ -0.8,
157
+ 0.25
158
+ ],
159
+ "knockback": -2,
160
+ "scale": 1000,
161
+ "timer": 0
162
+ },
163
+ "rust": {
164
+ "12": 8,
165
+ "16": 0,
166
+ "32": 1065353216,
167
+ "36": 3221225472,
168
+ "40": 1077936128
169
+ },
170
+ "source_final": null
171
+ },
172
+ {
173
+ "initial_motion": {
174
+ "12": 8,
175
+ "16": 10,
176
+ "32": 1065353216,
177
+ "36": 3221225472,
178
+ "40": 1077936128
179
+ },
180
+ "input": {
181
+ "client": false,
182
+ "direction": [
183
+ 0,
184
+ 0,
185
+ 0
186
+ ],
187
+ "knockback": -2,
188
+ "scale": 1000,
189
+ "timer": 10
190
+ },
191
+ "rust": {
192
+ "12": 8,
193
+ "16": 10,
194
+ "32": 1065353216,
195
+ "36": 3221225472,
196
+ "40": 1077936128
197
+ },
198
+ "source_final": null
199
+ },
200
+ {
201
+ "initial_motion": {
202
+ "12": 8,
203
+ "16": 10,
204
+ "32": 1065353216,
205
+ "36": 3221225472,
206
+ "40": 1077936128
207
+ },
208
+ "input": {
209
+ "client": false,
210
+ "direction": [
211
+ 0.6,
212
+ -0.8,
213
+ 0.25
214
+ ],
215
+ "knockback": -2,
216
+ "scale": 1000,
217
+ "timer": 10
218
+ },
219
+ "rust": {
220
+ "12": 8,
221
+ "16": 10,
222
+ "32": 1065353216,
223
+ "36": 3221225472,
224
+ "40": 1077936128
225
+ },
226
+ "source_final": null
227
+ },
228
+ {
229
+ "initial_motion": {
230
+ "12": 8,
231
+ "16": 0,
232
+ "32": 1065353216,
233
+ "36": 3221225472,
234
+ "40": 1077936128
235
+ },
236
+ "input": {
237
+ "client": false,
238
+ "direction": [
239
+ 0,
240
+ 0,
241
+ 0
242
+ ],
243
+ "knockback": 0,
244
+ "scale": 0,
245
+ "timer": 0
246
+ },
247
+ "rust": {
248
+ "12": 8,
249
+ "16": 0,
250
+ "32": 1065353216,
251
+ "36": 3221225472,
252
+ "40": 1077936128
253
+ },
254
+ "source_final": null
255
+ },
256
+ {
257
+ "initial_motion": {
258
+ "12": 8,
259
+ "16": 0,
260
+ "32": 1065353216,
261
+ "36": 3221225472,
262
+ "40": 1077936128
263
+ },
264
+ "input": {
265
+ "client": false,
266
+ "direction": [
267
+ 0.6,
268
+ -0.8,
269
+ 0.25
270
+ ],
271
+ "knockback": 0,
272
+ "scale": 0,
273
+ "timer": 0
274
+ },
275
+ "rust": {
276
+ "12": 8,
277
+ "16": 0,
278
+ "32": 1065353216,
279
+ "36": 3221225472,
280
+ "40": 1077936128
281
+ },
282
+ "source_final": null
283
+ },
284
+ {
285
+ "initial_motion": {
286
+ "12": 8,
287
+ "16": 10,
288
+ "32": 1065353216,
289
+ "36": 3221225472,
290
+ "40": 1077936128
291
+ },
292
+ "input": {
293
+ "client": false,
294
+ "direction": [
295
+ 0,
296
+ 0,
297
+ 0
298
+ ],
299
+ "knockback": 0,
300
+ "scale": 0,
301
+ "timer": 10
302
+ },
303
+ "rust": {
304
+ "12": 8,
305
+ "16": 10,
306
+ "32": 1065353216,
307
+ "36": 3221225472,
308
+ "40": 1077936128
309
+ },
310
+ "source_final": null
311
+ },
312
+ {
313
+ "initial_motion": {
314
+ "12": 8,
315
+ "16": 10,
316
+ "32": 1065353216,
317
+ "36": 3221225472,
318
+ "40": 1077936128
319
+ },
320
+ "input": {
321
+ "client": false,
322
+ "direction": [
323
+ 0.6,
324
+ -0.8,
325
+ 0.25
326
+ ],
327
+ "knockback": 0,
328
+ "scale": 0,
329
+ "timer": 10
330
+ },
331
+ "rust": {
332
+ "12": 8,
333
+ "16": 10,
334
+ "32": 1065353216,
335
+ "36": 3221225472,
336
+ "40": 1077936128
337
+ },
338
+ "source_final": null
339
+ },
340
+ {
341
+ "initial_motion": {
342
+ "12": 8,
343
+ "16": 0,
344
+ "32": 1065353216,
345
+ "36": 3221225472,
346
+ "40": 1077936128
347
+ },
348
+ "input": {
349
+ "client": false,
350
+ "direction": [
351
+ 0,
352
+ 0,
353
+ 0
354
+ ],
355
+ "knockback": 0,
356
+ "scale": 1000,
357
+ "timer": 0
358
+ },
359
+ "rust": {
360
+ "12": 8,
361
+ "16": 0,
362
+ "32": 1065353216,
363
+ "36": 3221225472,
364
+ "40": 1077936128
365
+ },
366
+ "source_final": null
367
+ },
368
+ {
369
+ "initial_motion": {
370
+ "12": 8,
371
+ "16": 0,
372
+ "32": 1065353216,
373
+ "36": 3221225472,
374
+ "40": 1077936128
375
+ },
376
+ "input": {
377
+ "client": false,
378
+ "direction": [
379
+ 0.6,
380
+ -0.8,
381
+ 0.25
382
+ ],
383
+ "knockback": 0,
384
+ "scale": 1000,
385
+ "timer": 0
386
+ },
387
+ "rust": {
388
+ "12": 8,
389
+ "16": 0,
390
+ "32": 1065353216,
391
+ "36": 3221225472,
392
+ "40": 1077936128
393
+ },
394
+ "source_final": null
395
+ },
396
+ {
397
+ "initial_motion": {
398
+ "12": 8,
399
+ "16": 10,
400
+ "32": 1065353216,
401
+ "36": 3221225472,
402
+ "40": 1077936128
403
+ },
404
+ "input": {
405
+ "client": false,
406
+ "direction": [
407
+ 0,
408
+ 0,
409
+ 0
410
+ ],
411
+ "knockback": 0,
412
+ "scale": 1000,
413
+ "timer": 10
414
+ },
415
+ "rust": {
416
+ "12": 8,
417
+ "16": 10,
418
+ "32": 1065353216,
419
+ "36": 3221225472,
420
+ "40": 1077936128
421
+ },
422
+ "source_final": null
423
+ },
424
+ {
425
+ "initial_motion": {
426
+ "12": 8,
427
+ "16": 10,
428
+ "32": 1065353216,
429
+ "36": 3221225472,
430
+ "40": 1077936128
431
+ },
432
+ "input": {
433
+ "client": false,
434
+ "direction": [
435
+ 0.6,
436
+ -0.8,
437
+ 0.25
438
+ ],
439
+ "knockback": 0,
440
+ "scale": 1000,
441
+ "timer": 10
442
+ },
443
+ "rust": {
444
+ "12": 8,
445
+ "16": 10,
446
+ "32": 1065353216,
447
+ "36": 3221225472,
448
+ "40": 1077936128
449
+ },
450
+ "source_final": null
451
+ },
452
+ {
453
+ "initial_motion": {
454
+ "12": 8,
455
+ "16": 0,
456
+ "32": 1065353216,
457
+ "36": 3221225472,
458
+ "40": 1077936128
459
+ },
460
+ "input": {
461
+ "client": false,
462
+ "direction": [
463
+ 0,
464
+ 0,
465
+ 0
466
+ ],
467
+ "knockback": 0.25,
468
+ "scale": 0,
469
+ "timer": 0
470
+ },
471
+ "rust": {
472
+ "12": 8,
473
+ "16": 0,
474
+ "32": 1065353216,
475
+ "36": 3221225472,
476
+ "40": 1077936128
477
+ },
478
+ "source_final": null
479
+ },
480
+ {
481
+ "initial_motion": {
482
+ "12": 8,
483
+ "16": 0,
484
+ "32": 1065353216,
485
+ "36": 3221225472,
486
+ "40": 1077936128
487
+ },
488
+ "input": {
489
+ "client": false,
490
+ "direction": [
491
+ 0.6,
492
+ -0.8,
493
+ 0.25
494
+ ],
495
+ "knockback": 0.25,
496
+ "scale": 0,
497
+ "timer": 0
498
+ },
499
+ "rust": {
500
+ "12": 8,
501
+ "16": 0,
502
+ "32": 1065353216,
503
+ "36": 3221225472,
504
+ "40": 1077936128
505
+ },
506
+ "source_final": null
507
+ },
508
+ {
509
+ "initial_motion": {
510
+ "12": 8,
511
+ "16": 10,
512
+ "32": 1065353216,
513
+ "36": 3221225472,
514
+ "40": 1077936128
515
+ },
516
+ "input": {
517
+ "client": false,
518
+ "direction": [
519
+ 0,
520
+ 0,
521
+ 0
522
+ ],
523
+ "knockback": 0.25,
524
+ "scale": 0,
525
+ "timer": 10
526
+ },
527
+ "rust": {
528
+ "12": 8,
529
+ "16": 10,
530
+ "32": 1065353216,
531
+ "36": 3221225472,
532
+ "40": 1077936128
533
+ },
534
+ "source_final": null
535
+ },
536
+ {
537
+ "initial_motion": {
538
+ "12": 8,
539
+ "16": 10,
540
+ "32": 1065353216,
541
+ "36": 3221225472,
542
+ "40": 1077936128
543
+ },
544
+ "input": {
545
+ "client": false,
546
+ "direction": [
547
+ 0.6,
548
+ -0.8,
549
+ 0.25
550
+ ],
551
+ "knockback": 0.25,
552
+ "scale": 0,
553
+ "timer": 10
554
+ },
555
+ "rust": {
556
+ "12": 8,
557
+ "16": 10,
558
+ "32": 1065353216,
559
+ "36": 3221225472,
560
+ "40": 1077936128
561
+ },
562
+ "source_final": null
563
+ },
564
+ {
565
+ "initial_motion": {
566
+ "12": 8,
567
+ "16": 0,
568
+ "32": 1065353216,
569
+ "36": 3221225472,
570
+ "40": 1077936128
571
+ },
572
+ "input": {
573
+ "client": false,
574
+ "direction": [
575
+ 0,
576
+ 0,
577
+ 0
578
+ ],
579
+ "knockback": 0.25,
580
+ "scale": 1000,
581
+ "timer": 0
582
+ },
583
+ "rust": {
584
+ "12": 8,
585
+ "16": 0,
586
+ "32": 1065353216,
587
+ "36": 3221225472,
588
+ "40": 1077936128
589
+ },
590
+ "source_final": null
591
+ },
592
+ {
593
+ "initial_motion": {
594
+ "12": 8,
595
+ "16": 0,
596
+ "32": 1065353216,
597
+ "36": 3221225472,
598
+ "40": 1077936128
599
+ },
600
+ "input": {
601
+ "client": false,
602
+ "direction": [
603
+ 0.6,
604
+ -0.8,
605
+ 0.25
606
+ ],
607
+ "knockback": 0.25,
608
+ "scale": 1000,
609
+ "timer": 0
610
+ },
611
+ "rust": {
612
+ "12": 8,
613
+ "16": 0,
614
+ "32": 1065353216,
615
+ "36": 3221225472,
616
+ "40": 1077936128
617
+ },
618
+ "source_final": null
619
+ },
620
+ {
621
+ "initial_motion": {
622
+ "12": 8,
623
+ "16": 10,
624
+ "32": 1065353216,
625
+ "36": 3221225472,
626
+ "40": 1077936128
627
+ },
628
+ "input": {
629
+ "client": false,
630
+ "direction": [
631
+ 0,
632
+ 0,
633
+ 0
634
+ ],
635
+ "knockback": 0.25,
636
+ "scale": 1000,
637
+ "timer": 10
638
+ },
639
+ "rust": {
640
+ "12": 8,
641
+ "16": 10,
642
+ "32": 1065353216,
643
+ "36": 3221225472,
644
+ "40": 1077936128
645
+ },
646
+ "source_final": null
647
+ },
648
+ {
649
+ "initial_motion": {
650
+ "12": 8,
651
+ "16": 10,
652
+ "32": 1065353216,
653
+ "36": 3221225472,
654
+ "40": 1077936128
655
+ },
656
+ "input": {
657
+ "client": false,
658
+ "direction": [
659
+ 0.6,
660
+ -0.8,
661
+ 0.25
662
+ ],
663
+ "knockback": 0.25,
664
+ "scale": 1000,
665
+ "timer": 10
666
+ },
667
+ "rust": {
668
+ "12": 8,
669
+ "16": 10,
670
+ "32": 1065353216,
671
+ "36": 3221225472,
672
+ "40": 1077936128
673
+ },
674
+ "source_final": null
675
+ },
676
+ {
677
+ "initial_motion": {
678
+ "12": 8,
679
+ "16": 0,
680
+ "32": 1065353216,
681
+ "36": 3221225472,
682
+ "40": 1077936128
683
+ },
684
+ "input": {
685
+ "client": false,
686
+ "direction": [
687
+ 0,
688
+ 0,
689
+ 0
690
+ ],
691
+ "knockback": 25,
692
+ "scale": 0,
693
+ "timer": 0
694
+ },
695
+ "rust": {
696
+ "12": 8,
697
+ "16": 0,
698
+ "32": 1065353216,
699
+ "36": 3221225472,
700
+ "40": 1077936128
701
+ },
702
+ "source_final": null
703
+ },
704
+ {
705
+ "initial_motion": {
706
+ "12": 8,
707
+ "16": 0,
708
+ "32": 1065353216,
709
+ "36": 3221225472,
710
+ "40": 1077936128
711
+ },
712
+ "input": {
713
+ "client": false,
714
+ "direction": [
715
+ 0.6,
716
+ -0.8,
717
+ 0.25
718
+ ],
719
+ "knockback": 25,
720
+ "scale": 0,
721
+ "timer": 0
722
+ },
723
+ "rust": {
724
+ "12": 8,
725
+ "16": 0,
726
+ "32": 1065353216,
727
+ "36": 3221225472,
728
+ "40": 1077936128
729
+ },
730
+ "source_final": null
731
+ },
732
+ {
733
+ "initial_motion": {
734
+ "12": 8,
735
+ "16": 10,
736
+ "32": 1065353216,
737
+ "36": 3221225472,
738
+ "40": 1077936128
739
+ },
740
+ "input": {
741
+ "client": false,
742
+ "direction": [
743
+ 0,
744
+ 0,
745
+ 0
746
+ ],
747
+ "knockback": 25,
748
+ "scale": 0,
749
+ "timer": 10
750
+ },
751
+ "rust": {
752
+ "12": 8,
753
+ "16": 10,
754
+ "32": 1065353216,
755
+ "36": 3221225472,
756
+ "40": 1077936128
757
+ },
758
+ "source_final": null
759
+ },
760
+ {
761
+ "initial_motion": {
762
+ "12": 8,
763
+ "16": 10,
764
+ "32": 1065353216,
765
+ "36": 3221225472,
766
+ "40": 1077936128
767
+ },
768
+ "input": {
769
+ "client": false,
770
+ "direction": [
771
+ 0.6,
772
+ -0.8,
773
+ 0.25
774
+ ],
775
+ "knockback": 25,
776
+ "scale": 0,
777
+ "timer": 10
778
+ },
779
+ "rust": {
780
+ "12": 8,
781
+ "16": 10,
782
+ "32": 1065353216,
783
+ "36": 3221225472,
784
+ "40": 1077936128
785
+ },
786
+ "source_final": null
787
+ },
788
+ {
789
+ "initial_motion": {
790
+ "12": 8,
791
+ "16": 0,
792
+ "32": 1065353216,
793
+ "36": 3221225472,
794
+ "40": 1077936128
795
+ },
796
+ "input": {
797
+ "client": false,
798
+ "direction": [
799
+ 0,
800
+ 0,
801
+ 0
802
+ ],
803
+ "knockback": 25,
804
+ "scale": 1000,
805
+ "timer": 0
806
+ },
807
+ "rust": {
808
+ "12": 8,
809
+ "16": 0,
810
+ "32": 1065353216,
811
+ "36": 3221225472,
812
+ "40": 1077936128
813
+ },
814
+ "source_final": null
815
+ },
816
+ {
817
+ "initial_motion": {
818
+ "12": 8,
819
+ "16": 0,
820
+ "32": 1065353216,
821
+ "36": 3221225472,
822
+ "40": 1077936128
823
+ },
824
+ "input": {
825
+ "client": false,
826
+ "direction": [
827
+ 0.6,
828
+ -0.8,
829
+ 0.25
830
+ ],
831
+ "knockback": 25,
832
+ "scale": 1000,
833
+ "timer": 0
834
+ },
835
+ "rust": {
836
+ "12": 8,
837
+ "16": 0,
838
+ "32": 1065353216,
839
+ "36": 3221225472,
840
+ "40": 1077936128
841
+ },
842
+ "source_final": null
843
+ },
844
+ {
845
+ "initial_motion": {
846
+ "12": 8,
847
+ "16": 10,
848
+ "32": 1065353216,
849
+ "36": 3221225472,
850
+ "40": 1077936128
851
+ },
852
+ "input": {
853
+ "client": false,
854
+ "direction": [
855
+ 0,
856
+ 0,
857
+ 0
858
+ ],
859
+ "knockback": 25,
860
+ "scale": 1000,
861
+ "timer": 10
862
+ },
863
+ "rust": {
864
+ "12": 8,
865
+ "16": 10,
866
+ "32": 1065353216,
867
+ "36": 3221225472,
868
+ "40": 1077936128
869
+ },
870
+ "source_final": null
871
+ },
872
+ {
873
+ "initial_motion": {
874
+ "12": 8,
875
+ "16": 10,
876
+ "32": 1065353216,
877
+ "36": 3221225472,
878
+ "40": 1077936128
879
+ },
880
+ "input": {
881
+ "client": false,
882
+ "direction": [
883
+ 0.6,
884
+ -0.8,
885
+ 0.25
886
+ ],
887
+ "knockback": 25,
888
+ "scale": 1000,
889
+ "timer": 10
890
+ },
891
+ "rust": {
892
+ "12": 8,
893
+ "16": 10,
894
+ "32": 1065353216,
895
+ "36": 3221225472,
896
+ "40": 1077936128
897
+ },
898
+ "source_final": null
899
+ },
900
+ {
901
+ "initial_motion": {
902
+ "12": 8,
903
+ "16": 0,
904
+ "32": 1065353216,
905
+ "36": 3221225472,
906
+ "40": 1077936128
907
+ },
908
+ "input": {
909
+ "client": false,
910
+ "direction": [
911
+ 0,
912
+ 0,
913
+ 0
914
+ ],
915
+ "knockback": 100,
916
+ "scale": 0,
917
+ "timer": 0
918
+ },
919
+ "rust": {
920
+ "12": 8,
921
+ "16": 0,
922
+ "32": 1065353216,
923
+ "36": 3221225472,
924
+ "40": 1077936128
925
+ },
926
+ "source_final": null
927
+ },
928
+ {
929
+ "initial_motion": {
930
+ "12": 8,
931
+ "16": 0,
932
+ "32": 1065353216,
933
+ "36": 3221225472,
934
+ "40": 1077936128
935
+ },
936
+ "input": {
937
+ "client": false,
938
+ "direction": [
939
+ 0.6,
940
+ -0.8,
941
+ 0.25
942
+ ],
943
+ "knockback": 100,
944
+ "scale": 0,
945
+ "timer": 0
946
+ },
947
+ "rust": {
948
+ "12": 8,
949
+ "16": 0,
950
+ "32": 1065353216,
951
+ "36": 3221225472,
952
+ "40": 1077936128
953
+ },
954
+ "source_final": null
955
+ },
956
+ {
957
+ "initial_motion": {
958
+ "12": 8,
959
+ "16": 10,
960
+ "32": 1065353216,
961
+ "36": 3221225472,
962
+ "40": 1077936128
963
+ },
964
+ "input": {
965
+ "client": false,
966
+ "direction": [
967
+ 0,
968
+ 0,
969
+ 0
970
+ ],
971
+ "knockback": 100,
972
+ "scale": 0,
973
+ "timer": 10
974
+ },
975
+ "rust": {
976
+ "12": 8,
977
+ "16": 10,
978
+ "32": 1065353216,
979
+ "36": 3221225472,
980
+ "40": 1077936128
981
+ },
982
+ "source_final": null
983
+ },
984
+ {
985
+ "initial_motion": {
986
+ "12": 8,
987
+ "16": 10,
988
+ "32": 1065353216,
989
+ "36": 3221225472,
990
+ "40": 1077936128
991
+ },
992
+ "input": {
993
+ "client": false,
994
+ "direction": [
995
+ 0.6,
996
+ -0.8,
997
+ 0.25
998
+ ],
999
+ "knockback": 100,
1000
+ "scale": 0,
1001
+ "timer": 10
1002
+ },
1003
+ "rust": {
1004
+ "12": 8,
1005
+ "16": 10,
1006
+ "32": 1065353216,
1007
+ "36": 3221225472,
1008
+ "40": 1077936128
1009
+ },
1010
+ "source_final": null
1011
+ },
1012
+ {
1013
+ "initial_motion": {
1014
+ "12": 8,
1015
+ "16": 0,
1016
+ "32": 1065353216,
1017
+ "36": 3221225472,
1018
+ "40": 1077936128
1019
+ },
1020
+ "input": {
1021
+ "client": false,
1022
+ "direction": [
1023
+ 0,
1024
+ 0,
1025
+ 0
1026
+ ],
1027
+ "knockback": 100,
1028
+ "scale": 1000,
1029
+ "timer": 0
1030
+ },
1031
+ "rust": {
1032
+ "12": 8,
1033
+ "16": 0,
1034
+ "32": 1065353216,
1035
+ "36": 3221225472,
1036
+ "40": 1077936128
1037
+ },
1038
+ "source_final": null
1039
+ },
1040
+ {
1041
+ "initial_motion": {
1042
+ "12": 8,
1043
+ "16": 0,
1044
+ "32": 1065353216,
1045
+ "36": 3221225472,
1046
+ "40": 1077936128
1047
+ },
1048
+ "input": {
1049
+ "client": false,
1050
+ "direction": [
1051
+ 0.6,
1052
+ -0.8,
1053
+ 0.25
1054
+ ],
1055
+ "knockback": 100,
1056
+ "scale": 1000,
1057
+ "timer": 0
1058
+ },
1059
+ "rust": {
1060
+ "12": 8,
1061
+ "16": 0,
1062
+ "32": 1065353216,
1063
+ "36": 3221225472,
1064
+ "40": 1077936128
1065
+ },
1066
+ "source_final": null
1067
+ },
1068
+ {
1069
+ "initial_motion": {
1070
+ "12": 8,
1071
+ "16": 10,
1072
+ "32": 1065353216,
1073
+ "36": 3221225472,
1074
+ "40": 1077936128
1075
+ },
1076
+ "input": {
1077
+ "client": false,
1078
+ "direction": [
1079
+ 0,
1080
+ 0,
1081
+ 0
1082
+ ],
1083
+ "knockback": 100,
1084
+ "scale": 1000,
1085
+ "timer": 10
1086
+ },
1087
+ "rust": {
1088
+ "12": 8,
1089
+ "16": 10,
1090
+ "32": 1065353216,
1091
+ "36": 3221225472,
1092
+ "40": 1077936128
1093
+ },
1094
+ "source_final": null
1095
+ },
1096
+ {
1097
+ "initial_motion": {
1098
+ "12": 8,
1099
+ "16": 10,
1100
+ "32": 1065353216,
1101
+ "36": 3221225472,
1102
+ "40": 1077936128
1103
+ },
1104
+ "input": {
1105
+ "client": false,
1106
+ "direction": [
1107
+ 0.6,
1108
+ -0.8,
1109
+ 0.25
1110
+ ],
1111
+ "knockback": 100,
1112
+ "scale": 1000,
1113
+ "timer": 10
1114
+ },
1115
+ "rust": {
1116
+ "12": 8,
1117
+ "16": 10,
1118
+ "32": 1065353216,
1119
+ "36": 3221225472,
1120
+ "40": 1077936128
1121
+ },
1122
+ "source_final": null
1123
+ },
1124
+ {
1125
+ "initial_motion": {
1126
+ "12": 8,
1127
+ "16": 0,
1128
+ "32": 1065353216,
1129
+ "36": 3221225472,
1130
+ "40": 1077936128
1131
+ },
1132
+ "input": {
1133
+ "client": false,
1134
+ "direction": [
1135
+ 0,
1136
+ 0,
1137
+ 0
1138
+ ],
1139
+ "knockback": 101,
1140
+ "scale": 0,
1141
+ "timer": 0
1142
+ },
1143
+ "rust": {
1144
+ "12": 8,
1145
+ "16": 0,
1146
+ "32": 1065353216,
1147
+ "36": 3221225472,
1148
+ "40": 1077936128
1149
+ },
1150
+ "source_final": null
1151
+ },
1152
+ {
1153
+ "initial_motion": {
1154
+ "12": 8,
1155
+ "16": 0,
1156
+ "32": 1065353216,
1157
+ "36": 3221225472,
1158
+ "40": 1077936128
1159
+ },
1160
+ "input": {
1161
+ "client": false,
1162
+ "direction": [
1163
+ 0.6,
1164
+ -0.8,
1165
+ 0.25
1166
+ ],
1167
+ "knockback": 101,
1168
+ "scale": 0,
1169
+ "timer": 0
1170
+ },
1171
+ "rust": {
1172
+ "12": 8,
1173
+ "16": 0,
1174
+ "32": 1065353216,
1175
+ "36": 3221225472,
1176
+ "40": 1077936128
1177
+ },
1178
+ "source_final": null
1179
+ },
1180
+ {
1181
+ "initial_motion": {
1182
+ "12": 8,
1183
+ "16": 10,
1184
+ "32": 1065353216,
1185
+ "36": 3221225472,
1186
+ "40": 1077936128
1187
+ },
1188
+ "input": {
1189
+ "client": false,
1190
+ "direction": [
1191
+ 0,
1192
+ 0,
1193
+ 0
1194
+ ],
1195
+ "knockback": 101,
1196
+ "scale": 0,
1197
+ "timer": 10
1198
+ },
1199
+ "rust": {
1200
+ "12": 8,
1201
+ "16": 10,
1202
+ "32": 1065353216,
1203
+ "36": 3221225472,
1204
+ "40": 1077936128
1205
+ },
1206
+ "source_final": null
1207
+ },
1208
+ {
1209
+ "initial_motion": {
1210
+ "12": 8,
1211
+ "16": 10,
1212
+ "32": 1065353216,
1213
+ "36": 3221225472,
1214
+ "40": 1077936128
1215
+ },
1216
+ "input": {
1217
+ "client": false,
1218
+ "direction": [
1219
+ 0.6,
1220
+ -0.8,
1221
+ 0.25
1222
+ ],
1223
+ "knockback": 101,
1224
+ "scale": 0,
1225
+ "timer": 10
1226
+ },
1227
+ "rust": {
1228
+ "12": 8,
1229
+ "16": 10,
1230
+ "32": 1065353216,
1231
+ "36": 3221225472,
1232
+ "40": 1077936128
1233
+ },
1234
+ "source_final": null
1235
+ },
1236
+ {
1237
+ "initial_motion": {
1238
+ "12": 8,
1239
+ "16": 0,
1240
+ "32": 1065353216,
1241
+ "36": 3221225472,
1242
+ "40": 1077936128
1243
+ },
1244
+ "input": {
1245
+ "client": false,
1246
+ "direction": [
1247
+ 0,
1248
+ 0,
1249
+ 0
1250
+ ],
1251
+ "knockback": 101,
1252
+ "scale": 1000,
1253
+ "timer": 0
1254
+ },
1255
+ "rust": {
1256
+ "12": 8,
1257
+ "16": 0,
1258
+ "32": 1065353216,
1259
+ "36": 3221225472,
1260
+ "40": 1077936128
1261
+ },
1262
+ "source_final": null
1263
+ },
1264
+ {
1265
+ "initial_motion": {
1266
+ "12": 8,
1267
+ "16": 0,
1268
+ "32": 1065353216,
1269
+ "36": 3221225472,
1270
+ "40": 1077936128
1271
+ },
1272
+ "input": {
1273
+ "client": false,
1274
+ "direction": [
1275
+ 0.6,
1276
+ -0.8,
1277
+ 0.25
1278
+ ],
1279
+ "knockback": 101,
1280
+ "scale": 1000,
1281
+ "timer": 0
1282
+ },
1283
+ "rust": {
1284
+ "12": 8,
1285
+ "16": 0,
1286
+ "32": 1065353216,
1287
+ "36": 3221225472,
1288
+ "40": 1077936128
1289
+ },
1290
+ "source_final": null
1291
+ },
1292
+ {
1293
+ "initial_motion": {
1294
+ "12": 8,
1295
+ "16": 10,
1296
+ "32": 1065353216,
1297
+ "36": 3221225472,
1298
+ "40": 1077936128
1299
+ },
1300
+ "input": {
1301
+ "client": false,
1302
+ "direction": [
1303
+ 0,
1304
+ 0,
1305
+ 0
1306
+ ],
1307
+ "knockback": 101,
1308
+ "scale": 1000,
1309
+ "timer": 10
1310
+ },
1311
+ "rust": {
1312
+ "12": 8,
1313
+ "16": 10,
1314
+ "32": 1065353216,
1315
+ "36": 3221225472,
1316
+ "40": 1077936128
1317
+ },
1318
+ "source_final": null
1319
+ },
1320
+ {
1321
+ "initial_motion": {
1322
+ "12": 8,
1323
+ "16": 10,
1324
+ "32": 1065353216,
1325
+ "36": 3221225472,
1326
+ "40": 1077936128
1327
+ },
1328
+ "input": {
1329
+ "client": false,
1330
+ "direction": [
1331
+ 0.6,
1332
+ -0.8,
1333
+ 0.25
1334
+ ],
1335
+ "knockback": 101,
1336
+ "scale": 1000,
1337
+ "timer": 10
1338
+ },
1339
+ "rust": {
1340
+ "12": 8,
1341
+ "16": 10,
1342
+ "32": 1065353216,
1343
+ "36": 3221225472,
1344
+ "40": 1077936128
1345
+ },
1346
+ "source_final": null
1347
+ },
1348
+ {
1349
+ "initial_motion": {
1350
+ "12": 8,
1351
+ "16": 0,
1352
+ "32": 1065353216,
1353
+ "36": 3221225472,
1354
+ "40": 1077936128
1355
+ },
1356
+ "input": {
1357
+ "client": true,
1358
+ "direction": [
1359
+ 0,
1360
+ 0,
1361
+ 0
1362
+ ],
1363
+ "knockback": -2,
1364
+ "scale": 0,
1365
+ "timer": 0
1366
+ },
1367
+ "rust": {
1368
+ "12": 72,
1369
+ "16": 50,
1370
+ "32": 1065353216,
1371
+ "36": 3221225472,
1372
+ "40": 1077936128
1373
+ },
1374
+ "source_final": {
1375
+ "12": 72,
1376
+ "16": 50,
1377
+ "32": 1065353216,
1378
+ "36": 3221225472,
1379
+ "40": 1077936128
1380
+ }
1381
+ },
1382
+ {
1383
+ "initial_motion": {
1384
+ "12": 8,
1385
+ "16": 0,
1386
+ "32": 1065353216,
1387
+ "36": 3221225472,
1388
+ "40": 1077936128
1389
+ },
1390
+ "input": {
1391
+ "client": true,
1392
+ "direction": [
1393
+ 0.6,
1394
+ -0.8,
1395
+ 0.25
1396
+ ],
1397
+ "knockback": -2,
1398
+ "scale": 0,
1399
+ "timer": 0
1400
+ },
1401
+ "rust": {
1402
+ "12": 72,
1403
+ "16": 50,
1404
+ "32": 1065353216,
1405
+ "36": 3221225472,
1406
+ "40": 1077936128
1407
+ },
1408
+ "source_final": {
1409
+ "12": 72,
1410
+ "16": 50,
1411
+ "32": 1065353216,
1412
+ "36": 3221225472,
1413
+ "40": 1077936128
1414
+ }
1415
+ },
1416
+ {
1417
+ "initial_motion": {
1418
+ "12": 8,
1419
+ "16": 10,
1420
+ "32": 1065353216,
1421
+ "36": 3221225472,
1422
+ "40": 1077936128
1423
+ },
1424
+ "input": {
1425
+ "client": true,
1426
+ "direction": [
1427
+ 0,
1428
+ 0,
1429
+ 0
1430
+ ],
1431
+ "knockback": -2,
1432
+ "scale": 0,
1433
+ "timer": 10
1434
+ },
1435
+ "rust": {
1436
+ "12": 8,
1437
+ "16": 10,
1438
+ "32": 1065353216,
1439
+ "36": 3221225472,
1440
+ "40": 1077936128
1441
+ },
1442
+ "source_final": {
1443
+ "12": 8,
1444
+ "16": 10,
1445
+ "32": 1065353216,
1446
+ "36": 3221225472,
1447
+ "40": 1077936128
1448
+ }
1449
+ },
1450
+ {
1451
+ "initial_motion": {
1452
+ "12": 8,
1453
+ "16": 10,
1454
+ "32": 1065353216,
1455
+ "36": 3221225472,
1456
+ "40": 1077936128
1457
+ },
1458
+ "input": {
1459
+ "client": true,
1460
+ "direction": [
1461
+ 0.6,
1462
+ -0.8,
1463
+ 0.25
1464
+ ],
1465
+ "knockback": -2,
1466
+ "scale": 0,
1467
+ "timer": 10
1468
+ },
1469
+ "rust": {
1470
+ "12": 8,
1471
+ "16": 10,
1472
+ "32": 1065353216,
1473
+ "36": 3221225472,
1474
+ "40": 1077936128
1475
+ },
1476
+ "source_final": {
1477
+ "12": 8,
1478
+ "16": 10,
1479
+ "32": 1065353216,
1480
+ "36": 3221225472,
1481
+ "40": 1077936128
1482
+ }
1483
+ },
1484
+ {
1485
+ "initial_motion": {
1486
+ "12": 8,
1487
+ "16": 0,
1488
+ "32": 1065353216,
1489
+ "36": 3221225472,
1490
+ "40": 1077936128
1491
+ },
1492
+ "input": {
1493
+ "client": true,
1494
+ "direction": [
1495
+ 0,
1496
+ 0,
1497
+ 0
1498
+ ],
1499
+ "knockback": -2,
1500
+ "scale": 1000,
1501
+ "timer": 0
1502
+ },
1503
+ "rust": {
1504
+ "12": 72,
1505
+ "16": 50,
1506
+ "32": 1065353216,
1507
+ "36": 3221225472,
1508
+ "40": 1077936128
1509
+ },
1510
+ "source_final": {
1511
+ "12": 72,
1512
+ "16": 50,
1513
+ "32": 1065353216,
1514
+ "36": 3221225472,
1515
+ "40": 1077936128
1516
+ }
1517
+ },
1518
+ {
1519
+ "initial_motion": {
1520
+ "12": 8,
1521
+ "16": 0,
1522
+ "32": 1065353216,
1523
+ "36": 3221225472,
1524
+ "40": 1077936128
1525
+ },
1526
+ "input": {
1527
+ "client": true,
1528
+ "direction": [
1529
+ 0.6,
1530
+ -0.8,
1531
+ 0.25
1532
+ ],
1533
+ "knockback": -2,
1534
+ "scale": 1000,
1535
+ "timer": 0
1536
+ },
1537
+ "rust": {
1538
+ "12": 72,
1539
+ "16": 50,
1540
+ "32": 3231711232,
1541
+ "36": 1086324736,
1542
+ "40": 1056964608
1543
+ },
1544
+ "source_final": {
1545
+ "12": 72,
1546
+ "16": 50,
1547
+ "32": 3231711232,
1548
+ "36": 1086324736,
1549
+ "40": 1056964608
1550
+ }
1551
+ },
1552
+ {
1553
+ "initial_motion": {
1554
+ "12": 8,
1555
+ "16": 10,
1556
+ "32": 1065353216,
1557
+ "36": 3221225472,
1558
+ "40": 1077936128
1559
+ },
1560
+ "input": {
1561
+ "client": true,
1562
+ "direction": [
1563
+ 0,
1564
+ 0,
1565
+ 0
1566
+ ],
1567
+ "knockback": -2,
1568
+ "scale": 1000,
1569
+ "timer": 10
1570
+ },
1571
+ "rust": {
1572
+ "12": 8,
1573
+ "16": 10,
1574
+ "32": 1065353216,
1575
+ "36": 3221225472,
1576
+ "40": 1077936128
1577
+ },
1578
+ "source_final": {
1579
+ "12": 8,
1580
+ "16": 10,
1581
+ "32": 1065353216,
1582
+ "36": 3221225472,
1583
+ "40": 1077936128
1584
+ }
1585
+ },
1586
+ {
1587
+ "initial_motion": {
1588
+ "12": 8,
1589
+ "16": 10,
1590
+ "32": 1065353216,
1591
+ "36": 3221225472,
1592
+ "40": 1077936128
1593
+ },
1594
+ "input": {
1595
+ "client": true,
1596
+ "direction": [
1597
+ 0.6,
1598
+ -0.8,
1599
+ 0.25
1600
+ ],
1601
+ "knockback": -2,
1602
+ "scale": 1000,
1603
+ "timer": 10
1604
+ },
1605
+ "rust": {
1606
+ "12": 8,
1607
+ "16": 10,
1608
+ "32": 3231711232,
1609
+ "36": 1086324736,
1610
+ "40": 1056964608
1611
+ },
1612
+ "source_final": {
1613
+ "12": 8,
1614
+ "16": 10,
1615
+ "32": 3231711232,
1616
+ "36": 1086324736,
1617
+ "40": 1056964608
1618
+ }
1619
+ },
1620
+ {
1621
+ "initial_motion": {
1622
+ "12": 8,
1623
+ "16": 0,
1624
+ "32": 1065353216,
1625
+ "36": 3221225472,
1626
+ "40": 1077936128
1627
+ },
1628
+ "input": {
1629
+ "client": true,
1630
+ "direction": [
1631
+ 0,
1632
+ 0,
1633
+ 0
1634
+ ],
1635
+ "knockback": 0,
1636
+ "scale": 0,
1637
+ "timer": 0
1638
+ },
1639
+ "rust": {
1640
+ "12": 8,
1641
+ "16": 0,
1642
+ "32": 1065353216,
1643
+ "36": 3221225472,
1644
+ "40": 1077936128
1645
+ },
1646
+ "source_final": {
1647
+ "12": 8,
1648
+ "16": 0,
1649
+ "32": 1065353216,
1650
+ "36": 3221225472,
1651
+ "40": 1077936128
1652
+ }
1653
+ },
1654
+ {
1655
+ "initial_motion": {
1656
+ "12": 8,
1657
+ "16": 0,
1658
+ "32": 1065353216,
1659
+ "36": 3221225472,
1660
+ "40": 1077936128
1661
+ },
1662
+ "input": {
1663
+ "client": true,
1664
+ "direction": [
1665
+ 0.6,
1666
+ -0.8,
1667
+ 0.25
1668
+ ],
1669
+ "knockback": 0,
1670
+ "scale": 0,
1671
+ "timer": 0
1672
+ },
1673
+ "rust": {
1674
+ "12": 8,
1675
+ "16": 0,
1676
+ "32": 1065353216,
1677
+ "36": 3221225472,
1678
+ "40": 1077936128
1679
+ },
1680
+ "source_final": {
1681
+ "12": 8,
1682
+ "16": 0,
1683
+ "32": 1065353216,
1684
+ "36": 3221225472,
1685
+ "40": 1077936128
1686
+ }
1687
+ },
1688
+ {
1689
+ "initial_motion": {
1690
+ "12": 8,
1691
+ "16": 10,
1692
+ "32": 1065353216,
1693
+ "36": 3221225472,
1694
+ "40": 1077936128
1695
+ },
1696
+ "input": {
1697
+ "client": true,
1698
+ "direction": [
1699
+ 0,
1700
+ 0,
1701
+ 0
1702
+ ],
1703
+ "knockback": 0,
1704
+ "scale": 0,
1705
+ "timer": 10
1706
+ },
1707
+ "rust": {
1708
+ "12": 8,
1709
+ "16": 10,
1710
+ "32": 1065353216,
1711
+ "36": 3221225472,
1712
+ "40": 1077936128
1713
+ },
1714
+ "source_final": {
1715
+ "12": 8,
1716
+ "16": 10,
1717
+ "32": 1065353216,
1718
+ "36": 3221225472,
1719
+ "40": 1077936128
1720
+ }
1721
+ },
1722
+ {
1723
+ "initial_motion": {
1724
+ "12": 8,
1725
+ "16": 10,
1726
+ "32": 1065353216,
1727
+ "36": 3221225472,
1728
+ "40": 1077936128
1729
+ },
1730
+ "input": {
1731
+ "client": true,
1732
+ "direction": [
1733
+ 0.6,
1734
+ -0.8,
1735
+ 0.25
1736
+ ],
1737
+ "knockback": 0,
1738
+ "scale": 0,
1739
+ "timer": 10
1740
+ },
1741
+ "rust": {
1742
+ "12": 8,
1743
+ "16": 10,
1744
+ "32": 1065353216,
1745
+ "36": 3221225472,
1746
+ "40": 1077936128
1747
+ },
1748
+ "source_final": {
1749
+ "12": 8,
1750
+ "16": 10,
1751
+ "32": 1065353216,
1752
+ "36": 3221225472,
1753
+ "40": 1077936128
1754
+ }
1755
+ },
1756
+ {
1757
+ "initial_motion": {
1758
+ "12": 8,
1759
+ "16": 0,
1760
+ "32": 1065353216,
1761
+ "36": 3221225472,
1762
+ "40": 1077936128
1763
+ },
1764
+ "input": {
1765
+ "client": true,
1766
+ "direction": [
1767
+ 0,
1768
+ 0,
1769
+ 0
1770
+ ],
1771
+ "knockback": 0,
1772
+ "scale": 1000,
1773
+ "timer": 0
1774
+ },
1775
+ "rust": {
1776
+ "12": 8,
1777
+ "16": 0,
1778
+ "32": 1065353216,
1779
+ "36": 3221225472,
1780
+ "40": 1077936128
1781
+ },
1782
+ "source_final": {
1783
+ "12": 8,
1784
+ "16": 0,
1785
+ "32": 1065353216,
1786
+ "36": 3221225472,
1787
+ "40": 1077936128
1788
+ }
1789
+ },
1790
+ {
1791
+ "initial_motion": {
1792
+ "12": 8,
1793
+ "16": 0,
1794
+ "32": 1065353216,
1795
+ "36": 3221225472,
1796
+ "40": 1077936128
1797
+ },
1798
+ "input": {
1799
+ "client": true,
1800
+ "direction": [
1801
+ 0.6,
1802
+ -0.8,
1803
+ 0.25
1804
+ ],
1805
+ "knockback": 0,
1806
+ "scale": 1000,
1807
+ "timer": 0
1808
+ },
1809
+ "rust": {
1810
+ "12": 8,
1811
+ "16": 0,
1812
+ "32": 1065353216,
1813
+ "36": 3221225472,
1814
+ "40": 1077936128
1815
+ },
1816
+ "source_final": {
1817
+ "12": 8,
1818
+ "16": 0,
1819
+ "32": 1065353216,
1820
+ "36": 3221225472,
1821
+ "40": 1077936128
1822
+ }
1823
+ },
1824
+ {
1825
+ "initial_motion": {
1826
+ "12": 8,
1827
+ "16": 10,
1828
+ "32": 1065353216,
1829
+ "36": 3221225472,
1830
+ "40": 1077936128
1831
+ },
1832
+ "input": {
1833
+ "client": true,
1834
+ "direction": [
1835
+ 0,
1836
+ 0,
1837
+ 0
1838
+ ],
1839
+ "knockback": 0,
1840
+ "scale": 1000,
1841
+ "timer": 10
1842
+ },
1843
+ "rust": {
1844
+ "12": 8,
1845
+ "16": 10,
1846
+ "32": 1065353216,
1847
+ "36": 3221225472,
1848
+ "40": 1077936128
1849
+ },
1850
+ "source_final": {
1851
+ "12": 8,
1852
+ "16": 10,
1853
+ "32": 1065353216,
1854
+ "36": 3221225472,
1855
+ "40": 1077936128
1856
+ }
1857
+ },
1858
+ {
1859
+ "initial_motion": {
1860
+ "12": 8,
1861
+ "16": 10,
1862
+ "32": 1065353216,
1863
+ "36": 3221225472,
1864
+ "40": 1077936128
1865
+ },
1866
+ "input": {
1867
+ "client": true,
1868
+ "direction": [
1869
+ 0.6,
1870
+ -0.8,
1871
+ 0.25
1872
+ ],
1873
+ "knockback": 0,
1874
+ "scale": 1000,
1875
+ "timer": 10
1876
+ },
1877
+ "rust": {
1878
+ "12": 8,
1879
+ "16": 10,
1880
+ "32": 1065353216,
1881
+ "36": 3221225472,
1882
+ "40": 1077936128
1883
+ },
1884
+ "source_final": {
1885
+ "12": 8,
1886
+ "16": 10,
1887
+ "32": 1065353216,
1888
+ "36": 3221225472,
1889
+ "40": 1077936128
1890
+ }
1891
+ },
1892
+ {
1893
+ "initial_motion": {
1894
+ "12": 8,
1895
+ "16": 0,
1896
+ "32": 1065353216,
1897
+ "36": 3221225472,
1898
+ "40": 1077936128
1899
+ },
1900
+ "input": {
1901
+ "client": true,
1902
+ "direction": [
1903
+ 0,
1904
+ 0,
1905
+ 0
1906
+ ],
1907
+ "knockback": 0.25,
1908
+ "scale": 0,
1909
+ "timer": 0
1910
+ },
1911
+ "rust": {
1912
+ "12": 72,
1913
+ "16": 50,
1914
+ "32": 1065353216,
1915
+ "36": 3221225472,
1916
+ "40": 1077936128
1917
+ },
1918
+ "source_final": {
1919
+ "12": 72,
1920
+ "16": 50,
1921
+ "32": 1065353216,
1922
+ "36": 3221225472,
1923
+ "40": 1077936128
1924
+ }
1925
+ },
1926
+ {
1927
+ "initial_motion": {
1928
+ "12": 8,
1929
+ "16": 0,
1930
+ "32": 1065353216,
1931
+ "36": 3221225472,
1932
+ "40": 1077936128
1933
+ },
1934
+ "input": {
1935
+ "client": true,
1936
+ "direction": [
1937
+ 0.6,
1938
+ -0.8,
1939
+ 0.25
1940
+ ],
1941
+ "knockback": 0.25,
1942
+ "scale": 0,
1943
+ "timer": 0
1944
+ },
1945
+ "rust": {
1946
+ "12": 72,
1947
+ "16": 50,
1948
+ "32": 1065353216,
1949
+ "36": 3221225472,
1950
+ "40": 1077936128
1951
+ },
1952
+ "source_final": {
1953
+ "12": 72,
1954
+ "16": 50,
1955
+ "32": 1065353216,
1956
+ "36": 3221225472,
1957
+ "40": 1077936128
1958
+ }
1959
+ },
1960
+ {
1961
+ "initial_motion": {
1962
+ "12": 8,
1963
+ "16": 10,
1964
+ "32": 1065353216,
1965
+ "36": 3221225472,
1966
+ "40": 1077936128
1967
+ },
1968
+ "input": {
1969
+ "client": true,
1970
+ "direction": [
1971
+ 0,
1972
+ 0,
1973
+ 0
1974
+ ],
1975
+ "knockback": 0.25,
1976
+ "scale": 0,
1977
+ "timer": 10
1978
+ },
1979
+ "rust": {
1980
+ "12": 8,
1981
+ "16": 10,
1982
+ "32": 1065353216,
1983
+ "36": 3221225472,
1984
+ "40": 1077936128
1985
+ },
1986
+ "source_final": {
1987
+ "12": 8,
1988
+ "16": 10,
1989
+ "32": 1065353216,
1990
+ "36": 3221225472,
1991
+ "40": 1077936128
1992
+ }
1993
+ },
1994
+ {
1995
+ "initial_motion": {
1996
+ "12": 8,
1997
+ "16": 10,
1998
+ "32": 1065353216,
1999
+ "36": 3221225472,
2000
+ "40": 1077936128
2001
+ },
2002
+ "input": {
2003
+ "client": true,
2004
+ "direction": [
2005
+ 0.6,
2006
+ -0.8,
2007
+ 0.25
2008
+ ],
2009
+ "knockback": 0.25,
2010
+ "scale": 0,
2011
+ "timer": 10
2012
+ },
2013
+ "rust": {
2014
+ "12": 8,
2015
+ "16": 10,
2016
+ "32": 1065353216,
2017
+ "36": 3221225472,
2018
+ "40": 1077936128
2019
+ },
2020
+ "source_final": {
2021
+ "12": 8,
2022
+ "16": 10,
2023
+ "32": 1065353216,
2024
+ "36": 3221225472,
2025
+ "40": 1077936128
2026
+ }
2027
+ },
2028
+ {
2029
+ "initial_motion": {
2030
+ "12": 8,
2031
+ "16": 0,
2032
+ "32": 1065353216,
2033
+ "36": 3221225472,
2034
+ "40": 1077936128
2035
+ },
2036
+ "input": {
2037
+ "client": true,
2038
+ "direction": [
2039
+ 0,
2040
+ 0,
2041
+ 0
2042
+ ],
2043
+ "knockback": 0.25,
2044
+ "scale": 1000,
2045
+ "timer": 0
2046
+ },
2047
+ "rust": {
2048
+ "12": 72,
2049
+ "16": 50,
2050
+ "32": 1065353216,
2051
+ "36": 3221225472,
2052
+ "40": 1077936128
2053
+ },
2054
+ "source_final": {
2055
+ "12": 72,
2056
+ "16": 50,
2057
+ "32": 1065353216,
2058
+ "36": 3221225472,
2059
+ "40": 1077936128
2060
+ }
2061
+ },
2062
+ {
2063
+ "initial_motion": {
2064
+ "12": 8,
2065
+ "16": 0,
2066
+ "32": 1065353216,
2067
+ "36": 3221225472,
2068
+ "40": 1077936128
2069
+ },
2070
+ "input": {
2071
+ "client": true,
2072
+ "direction": [
2073
+ 0.6,
2074
+ -0.8,
2075
+ 0.25
2076
+ ],
2077
+ "knockback": 0.25,
2078
+ "scale": 1000,
2079
+ "timer": 0
2080
+ },
2081
+ "rust": {
2082
+ "12": 72,
2083
+ "16": 50,
2084
+ "32": 1071644672,
2085
+ "36": 3225419776,
2086
+ "40": 1079246848
2087
+ },
2088
+ "source_final": {
2089
+ "12": 72,
2090
+ "16": 50,
2091
+ "32": 1071644672,
2092
+ "36": 3225419776,
2093
+ "40": 1079246848
2094
+ }
2095
+ },
2096
+ {
2097
+ "initial_motion": {
2098
+ "12": 8,
2099
+ "16": 10,
2100
+ "32": 1065353216,
2101
+ "36": 3221225472,
2102
+ "40": 1077936128
2103
+ },
2104
+ "input": {
2105
+ "client": true,
2106
+ "direction": [
2107
+ 0,
2108
+ 0,
2109
+ 0
2110
+ ],
2111
+ "knockback": 0.25,
2112
+ "scale": 1000,
2113
+ "timer": 10
2114
+ },
2115
+ "rust": {
2116
+ "12": 8,
2117
+ "16": 10,
2118
+ "32": 1065353216,
2119
+ "36": 3221225472,
2120
+ "40": 1077936128
2121
+ },
2122
+ "source_final": {
2123
+ "12": 8,
2124
+ "16": 10,
2125
+ "32": 1065353216,
2126
+ "36": 3221225472,
2127
+ "40": 1077936128
2128
+ }
2129
+ },
2130
+ {
2131
+ "initial_motion": {
2132
+ "12": 8,
2133
+ "16": 10,
2134
+ "32": 1065353216,
2135
+ "36": 3221225472,
2136
+ "40": 1077936128
2137
+ },
2138
+ "input": {
2139
+ "client": true,
2140
+ "direction": [
2141
+ 0.6,
2142
+ -0.8,
2143
+ 0.25
2144
+ ],
2145
+ "knockback": 0.25,
2146
+ "scale": 1000,
2147
+ "timer": 10
2148
+ },
2149
+ "rust": {
2150
+ "12": 8,
2151
+ "16": 10,
2152
+ "32": 1071644672,
2153
+ "36": 3225419776,
2154
+ "40": 1079246848
2155
+ },
2156
+ "source_final": {
2157
+ "12": 8,
2158
+ "16": 10,
2159
+ "32": 1071644672,
2160
+ "36": 3225419776,
2161
+ "40": 1079246848
2162
+ }
2163
+ },
2164
+ {
2165
+ "initial_motion": {
2166
+ "12": 8,
2167
+ "16": 0,
2168
+ "32": 1065353216,
2169
+ "36": 3221225472,
2170
+ "40": 1077936128
2171
+ },
2172
+ "input": {
2173
+ "client": true,
2174
+ "direction": [
2175
+ 0,
2176
+ 0,
2177
+ 0
2178
+ ],
2179
+ "knockback": 25,
2180
+ "scale": 0,
2181
+ "timer": 0
2182
+ },
2183
+ "rust": {
2184
+ "12": 72,
2185
+ "16": 50,
2186
+ "32": 1065353216,
2187
+ "36": 3221225472,
2188
+ "40": 1077936128
2189
+ },
2190
+ "source_final": {
2191
+ "12": 72,
2192
+ "16": 50,
2193
+ "32": 1065353216,
2194
+ "36": 3221225472,
2195
+ "40": 1077936128
2196
+ }
2197
+ },
2198
+ {
2199
+ "initial_motion": {
2200
+ "12": 8,
2201
+ "16": 0,
2202
+ "32": 1065353216,
2203
+ "36": 3221225472,
2204
+ "40": 1077936128
2205
+ },
2206
+ "input": {
2207
+ "client": true,
2208
+ "direction": [
2209
+ 0.6,
2210
+ -0.8,
2211
+ 0.25
2212
+ ],
2213
+ "knockback": 25,
2214
+ "scale": 0,
2215
+ "timer": 0
2216
+ },
2217
+ "rust": {
2218
+ "12": 72,
2219
+ "16": 50,
2220
+ "32": 1065353216,
2221
+ "36": 3221225472,
2222
+ "40": 1077936128
2223
+ },
2224
+ "source_final": {
2225
+ "12": 72,
2226
+ "16": 50,
2227
+ "32": 1065353216,
2228
+ "36": 3221225472,
2229
+ "40": 1077936128
2230
+ }
2231
+ },
2232
+ {
2233
+ "initial_motion": {
2234
+ "12": 8,
2235
+ "16": 10,
2236
+ "32": 1065353216,
2237
+ "36": 3221225472,
2238
+ "40": 1077936128
2239
+ },
2240
+ "input": {
2241
+ "client": true,
2242
+ "direction": [
2243
+ 0,
2244
+ 0,
2245
+ 0
2246
+ ],
2247
+ "knockback": 25,
2248
+ "scale": 0,
2249
+ "timer": 10
2250
+ },
2251
+ "rust": {
2252
+ "12": 8,
2253
+ "16": 10,
2254
+ "32": 1065353216,
2255
+ "36": 3221225472,
2256
+ "40": 1077936128
2257
+ },
2258
+ "source_final": {
2259
+ "12": 8,
2260
+ "16": 10,
2261
+ "32": 1065353216,
2262
+ "36": 3221225472,
2263
+ "40": 1077936128
2264
+ }
2265
+ },
2266
+ {
2267
+ "initial_motion": {
2268
+ "12": 8,
2269
+ "16": 10,
2270
+ "32": 1065353216,
2271
+ "36": 3221225472,
2272
+ "40": 1077936128
2273
+ },
2274
+ "input": {
2275
+ "client": true,
2276
+ "direction": [
2277
+ 0.6,
2278
+ -0.8,
2279
+ 0.25
2280
+ ],
2281
+ "knockback": 25,
2282
+ "scale": 0,
2283
+ "timer": 10
2284
+ },
2285
+ "rust": {
2286
+ "12": 8,
2287
+ "16": 10,
2288
+ "32": 1065353216,
2289
+ "36": 3221225472,
2290
+ "40": 1077936128
2291
+ },
2292
+ "source_final": {
2293
+ "12": 8,
2294
+ "16": 10,
2295
+ "32": 1065353216,
2296
+ "36": 3221225472,
2297
+ "40": 1077936128
2298
+ }
2299
+ },
2300
+ {
2301
+ "initial_motion": {
2302
+ "12": 8,
2303
+ "16": 0,
2304
+ "32": 1065353216,
2305
+ "36": 3221225472,
2306
+ "40": 1077936128
2307
+ },
2308
+ "input": {
2309
+ "client": true,
2310
+ "direction": [
2311
+ 0,
2312
+ 0,
2313
+ 0
2314
+ ],
2315
+ "knockback": 25,
2316
+ "scale": 1000,
2317
+ "timer": 0
2318
+ },
2319
+ "rust": {
2320
+ "12": 72,
2321
+ "16": 50,
2322
+ "32": 1065353216,
2323
+ "36": 3221225472,
2324
+ "40": 1077936128
2325
+ },
2326
+ "source_final": {
2327
+ "12": 72,
2328
+ "16": 50,
2329
+ "32": 1065353216,
2330
+ "36": 3221225472,
2331
+ "40": 1077936128
2332
+ }
2333
+ },
2334
+ {
2335
+ "initial_motion": {
2336
+ "12": 8,
2337
+ "16": 0,
2338
+ "32": 1065353216,
2339
+ "36": 3221225472,
2340
+ "40": 1077936128
2341
+ },
2342
+ "input": {
2343
+ "client": true,
2344
+ "direction": [
2345
+ 0.6,
2346
+ -0.8,
2347
+ 0.25
2348
+ ],
2349
+ "knockback": 25,
2350
+ "scale": 1000,
2351
+ "timer": 0
2352
+ },
2353
+ "rust": {
2354
+ "12": 72,
2355
+ "16": 50,
2356
+ "32": 1117257728,
2357
+ "36": 3268149248,
2358
+ "40": 1107886080
2359
+ },
2360
+ "source_final": {
2361
+ "12": 72,
2362
+ "16": 50,
2363
+ "32": 1117257728,
2364
+ "36": 3268149248,
2365
+ "40": 1107886080
2366
+ }
2367
+ },
2368
+ {
2369
+ "initial_motion": {
2370
+ "12": 8,
2371
+ "16": 10,
2372
+ "32": 1065353216,
2373
+ "36": 3221225472,
2374
+ "40": 1077936128
2375
+ },
2376
+ "input": {
2377
+ "client": true,
2378
+ "direction": [
2379
+ 0,
2380
+ 0,
2381
+ 0
2382
+ ],
2383
+ "knockback": 25,
2384
+ "scale": 1000,
2385
+ "timer": 10
2386
+ },
2387
+ "rust": {
2388
+ "12": 8,
2389
+ "16": 10,
2390
+ "32": 1065353216,
2391
+ "36": 3221225472,
2392
+ "40": 1077936128
2393
+ },
2394
+ "source_final": {
2395
+ "12": 8,
2396
+ "16": 10,
2397
+ "32": 1065353216,
2398
+ "36": 3221225472,
2399
+ "40": 1077936128
2400
+ }
2401
+ },
2402
+ {
2403
+ "initial_motion": {
2404
+ "12": 8,
2405
+ "16": 10,
2406
+ "32": 1065353216,
2407
+ "36": 3221225472,
2408
+ "40": 1077936128
2409
+ },
2410
+ "input": {
2411
+ "client": true,
2412
+ "direction": [
2413
+ 0.6,
2414
+ -0.8,
2415
+ 0.25
2416
+ ],
2417
+ "knockback": 25,
2418
+ "scale": 1000,
2419
+ "timer": 10
2420
+ },
2421
+ "rust": {
2422
+ "12": 8,
2423
+ "16": 10,
2424
+ "32": 1117257728,
2425
+ "36": 3268149248,
2426
+ "40": 1107886080
2427
+ },
2428
+ "source_final": {
2429
+ "12": 8,
2430
+ "16": 10,
2431
+ "32": 1117257728,
2432
+ "36": 3268149248,
2433
+ "40": 1107886080
2434
+ }
2435
+ },
2436
+ {
2437
+ "initial_motion": {
2438
+ "12": 8,
2439
+ "16": 0,
2440
+ "32": 1065353216,
2441
+ "36": 3221225472,
2442
+ "40": 1077936128
2443
+ },
2444
+ "input": {
2445
+ "client": true,
2446
+ "direction": [
2447
+ 0,
2448
+ 0,
2449
+ 0
2450
+ ],
2451
+ "knockback": 100,
2452
+ "scale": 0,
2453
+ "timer": 0
2454
+ },
2455
+ "rust": {
2456
+ "12": 72,
2457
+ "16": 200,
2458
+ "32": 1065353216,
2459
+ "36": 3221225472,
2460
+ "40": 1077936128
2461
+ },
2462
+ "source_final": {
2463
+ "12": 72,
2464
+ "16": 200,
2465
+ "32": 1065353216,
2466
+ "36": 3221225472,
2467
+ "40": 1077936128
2468
+ }
2469
+ },
2470
+ {
2471
+ "initial_motion": {
2472
+ "12": 8,
2473
+ "16": 0,
2474
+ "32": 1065353216,
2475
+ "36": 3221225472,
2476
+ "40": 1077936128
2477
+ },
2478
+ "input": {
2479
+ "client": true,
2480
+ "direction": [
2481
+ 0.6,
2482
+ -0.8,
2483
+ 0.25
2484
+ ],
2485
+ "knockback": 100,
2486
+ "scale": 0,
2487
+ "timer": 0
2488
+ },
2489
+ "rust": {
2490
+ "12": 72,
2491
+ "16": 200,
2492
+ "32": 1065353216,
2493
+ "36": 3221225472,
2494
+ "40": 1077936128
2495
+ },
2496
+ "source_final": {
2497
+ "12": 72,
2498
+ "16": 200,
2499
+ "32": 1065353216,
2500
+ "36": 3221225472,
2501
+ "40": 1077936128
2502
+ }
2503
+ },
2504
+ {
2505
+ "initial_motion": {
2506
+ "12": 8,
2507
+ "16": 10,
2508
+ "32": 1065353216,
2509
+ "36": 3221225472,
2510
+ "40": 1077936128
2511
+ },
2512
+ "input": {
2513
+ "client": true,
2514
+ "direction": [
2515
+ 0,
2516
+ 0,
2517
+ 0
2518
+ ],
2519
+ "knockback": 100,
2520
+ "scale": 0,
2521
+ "timer": 10
2522
+ },
2523
+ "rust": {
2524
+ "12": 8,
2525
+ "16": 10,
2526
+ "32": 1065353216,
2527
+ "36": 3221225472,
2528
+ "40": 1077936128
2529
+ },
2530
+ "source_final": {
2531
+ "12": 8,
2532
+ "16": 10,
2533
+ "32": 1065353216,
2534
+ "36": 3221225472,
2535
+ "40": 1077936128
2536
+ }
2537
+ },
2538
+ {
2539
+ "initial_motion": {
2540
+ "12": 8,
2541
+ "16": 10,
2542
+ "32": 1065353216,
2543
+ "36": 3221225472,
2544
+ "40": 1077936128
2545
+ },
2546
+ "input": {
2547
+ "client": true,
2548
+ "direction": [
2549
+ 0.6,
2550
+ -0.8,
2551
+ 0.25
2552
+ ],
2553
+ "knockback": 100,
2554
+ "scale": 0,
2555
+ "timer": 10
2556
+ },
2557
+ "rust": {
2558
+ "12": 8,
2559
+ "16": 10,
2560
+ "32": 1065353216,
2561
+ "36": 3221225472,
2562
+ "40": 1077936128
2563
+ },
2564
+ "source_final": {
2565
+ "12": 8,
2566
+ "16": 10,
2567
+ "32": 1065353216,
2568
+ "36": 3221225472,
2569
+ "40": 1077936128
2570
+ }
2571
+ },
2572
+ {
2573
+ "initial_motion": {
2574
+ "12": 8,
2575
+ "16": 0,
2576
+ "32": 1065353216,
2577
+ "36": 3221225472,
2578
+ "40": 1077936128
2579
+ },
2580
+ "input": {
2581
+ "client": true,
2582
+ "direction": [
2583
+ 0,
2584
+ 0,
2585
+ 0
2586
+ ],
2587
+ "knockback": 100,
2588
+ "scale": 1000,
2589
+ "timer": 0
2590
+ },
2591
+ "rust": {
2592
+ "12": 72,
2593
+ "16": 200,
2594
+ "32": 1065353216,
2595
+ "36": 3221225472,
2596
+ "40": 1077936128
2597
+ },
2598
+ "source_final": {
2599
+ "12": 72,
2600
+ "16": 200,
2601
+ "32": 1065353216,
2602
+ "36": 3221225472,
2603
+ "40": 1077936128
2604
+ }
2605
+ },
2606
+ {
2607
+ "initial_motion": {
2608
+ "12": 8,
2609
+ "16": 0,
2610
+ "32": 1065353216,
2611
+ "36": 3221225472,
2612
+ "40": 1077936128
2613
+ },
2614
+ "input": {
2615
+ "client": true,
2616
+ "direction": [
2617
+ 0.6,
2618
+ -0.8,
2619
+ 0.25
2620
+ ],
2621
+ "knockback": 100,
2622
+ "scale": 1000,
2623
+ "timer": 0
2624
+ },
2625
+ "rust": {
2626
+ "12": 72,
2627
+ "16": 200,
2628
+ "32": 1133936640,
2629
+ "36": 3284729856,
2630
+ "40": 1124073472
2631
+ },
2632
+ "source_final": {
2633
+ "12": 72,
2634
+ "16": 200,
2635
+ "32": 1133936640,
2636
+ "36": 3284729856,
2637
+ "40": 1124073472
2638
+ }
2639
+ },
2640
+ {
2641
+ "initial_motion": {
2642
+ "12": 8,
2643
+ "16": 10,
2644
+ "32": 1065353216,
2645
+ "36": 3221225472,
2646
+ "40": 1077936128
2647
+ },
2648
+ "input": {
2649
+ "client": true,
2650
+ "direction": [
2651
+ 0,
2652
+ 0,
2653
+ 0
2654
+ ],
2655
+ "knockback": 100,
2656
+ "scale": 1000,
2657
+ "timer": 10
2658
+ },
2659
+ "rust": {
2660
+ "12": 8,
2661
+ "16": 10,
2662
+ "32": 1065353216,
2663
+ "36": 3221225472,
2664
+ "40": 1077936128
2665
+ },
2666
+ "source_final": {
2667
+ "12": 8,
2668
+ "16": 10,
2669
+ "32": 1065353216,
2670
+ "36": 3221225472,
2671
+ "40": 1077936128
2672
+ }
2673
+ },
2674
+ {
2675
+ "initial_motion": {
2676
+ "12": 8,
2677
+ "16": 10,
2678
+ "32": 1065353216,
2679
+ "36": 3221225472,
2680
+ "40": 1077936128
2681
+ },
2682
+ "input": {
2683
+ "client": true,
2684
+ "direction": [
2685
+ 0.6,
2686
+ -0.8,
2687
+ 0.25
2688
+ ],
2689
+ "knockback": 100,
2690
+ "scale": 1000,
2691
+ "timer": 10
2692
+ },
2693
+ "rust": {
2694
+ "12": 8,
2695
+ "16": 10,
2696
+ "32": 1133936640,
2697
+ "36": 3284729856,
2698
+ "40": 1124073472
2699
+ },
2700
+ "source_final": {
2701
+ "12": 8,
2702
+ "16": 10,
2703
+ "32": 1133936640,
2704
+ "36": 3284729856,
2705
+ "40": 1124073472
2706
+ }
2707
+ },
2708
+ {
2709
+ "initial_motion": {
2710
+ "12": 8,
2711
+ "16": 0,
2712
+ "32": 1065353216,
2713
+ "36": 3221225472,
2714
+ "40": 1077936128
2715
+ },
2716
+ "input": {
2717
+ "client": true,
2718
+ "direction": [
2719
+ 0,
2720
+ 0,
2721
+ 0
2722
+ ],
2723
+ "knockback": 101,
2724
+ "scale": 0,
2725
+ "timer": 0
2726
+ },
2727
+ "rust": {
2728
+ "12": 72,
2729
+ "16": 200,
2730
+ "32": 1065353216,
2731
+ "36": 3221225472,
2732
+ "40": 1077936128
2733
+ },
2734
+ "source_final": {
2735
+ "12": 72,
2736
+ "16": 200,
2737
+ "32": 1065353216,
2738
+ "36": 3221225472,
2739
+ "40": 1077936128
2740
+ }
2741
+ },
2742
+ {
2743
+ "initial_motion": {
2744
+ "12": 8,
2745
+ "16": 0,
2746
+ "32": 1065353216,
2747
+ "36": 3221225472,
2748
+ "40": 1077936128
2749
+ },
2750
+ "input": {
2751
+ "client": true,
2752
+ "direction": [
2753
+ 0.6,
2754
+ -0.8,
2755
+ 0.25
2756
+ ],
2757
+ "knockback": 101,
2758
+ "scale": 0,
2759
+ "timer": 0
2760
+ },
2761
+ "rust": {
2762
+ "12": 72,
2763
+ "16": 200,
2764
+ "32": 1065353216,
2765
+ "36": 3221225472,
2766
+ "40": 1077936128
2767
+ },
2768
+ "source_final": {
2769
+ "12": 72,
2770
+ "16": 200,
2771
+ "32": 1065353216,
2772
+ "36": 3221225472,
2773
+ "40": 1077936128
2774
+ }
2775
+ },
2776
+ {
2777
+ "initial_motion": {
2778
+ "12": 8,
2779
+ "16": 10,
2780
+ "32": 1065353216,
2781
+ "36": 3221225472,
2782
+ "40": 1077936128
2783
+ },
2784
+ "input": {
2785
+ "client": true,
2786
+ "direction": [
2787
+ 0,
2788
+ 0,
2789
+ 0
2790
+ ],
2791
+ "knockback": 101,
2792
+ "scale": 0,
2793
+ "timer": 10
2794
+ },
2795
+ "rust": {
2796
+ "12": 8,
2797
+ "16": 10,
2798
+ "32": 1065353216,
2799
+ "36": 3221225472,
2800
+ "40": 1077936128
2801
+ },
2802
+ "source_final": {
2803
+ "12": 8,
2804
+ "16": 10,
2805
+ "32": 1065353216,
2806
+ "36": 3221225472,
2807
+ "40": 1077936128
2808
+ }
2809
+ },
2810
+ {
2811
+ "initial_motion": {
2812
+ "12": 8,
2813
+ "16": 10,
2814
+ "32": 1065353216,
2815
+ "36": 3221225472,
2816
+ "40": 1077936128
2817
+ },
2818
+ "input": {
2819
+ "client": true,
2820
+ "direction": [
2821
+ 0.6,
2822
+ -0.8,
2823
+ 0.25
2824
+ ],
2825
+ "knockback": 101,
2826
+ "scale": 0,
2827
+ "timer": 10
2828
+ },
2829
+ "rust": {
2830
+ "12": 8,
2831
+ "16": 10,
2832
+ "32": 1065353216,
2833
+ "36": 3221225472,
2834
+ "40": 1077936128
2835
+ },
2836
+ "source_final": {
2837
+ "12": 8,
2838
+ "16": 10,
2839
+ "32": 1065353216,
2840
+ "36": 3221225472,
2841
+ "40": 1077936128
2842
+ }
2843
+ },
2844
+ {
2845
+ "initial_motion": {
2846
+ "12": 8,
2847
+ "16": 0,
2848
+ "32": 1065353216,
2849
+ "36": 3221225472,
2850
+ "40": 1077936128
2851
+ },
2852
+ "input": {
2853
+ "client": true,
2854
+ "direction": [
2855
+ 0,
2856
+ 0,
2857
+ 0
2858
+ ],
2859
+ "knockback": 101,
2860
+ "scale": 1000,
2861
+ "timer": 0
2862
+ },
2863
+ "rust": {
2864
+ "12": 72,
2865
+ "16": 200,
2866
+ "32": 1065353216,
2867
+ "36": 3221225472,
2868
+ "40": 1077936128
2869
+ },
2870
+ "source_final": {
2871
+ "12": 72,
2872
+ "16": 200,
2873
+ "32": 1065353216,
2874
+ "36": 3221225472,
2875
+ "40": 1077936128
2876
+ }
2877
+ },
2878
+ {
2879
+ "initial_motion": {
2880
+ "12": 8,
2881
+ "16": 0,
2882
+ "32": 1065353216,
2883
+ "36": 3221225472,
2884
+ "40": 1077936128
2885
+ },
2886
+ "input": {
2887
+ "client": true,
2888
+ "direction": [
2889
+ 0.6,
2890
+ -0.8,
2891
+ 0.25
2892
+ ],
2893
+ "knockback": 101,
2894
+ "scale": 1000,
2895
+ "timer": 0
2896
+ },
2897
+ "rust": {
2898
+ "12": 72,
2899
+ "16": 200,
2900
+ "32": 1134034944,
2901
+ "36": 3284860928,
2902
+ "40": 1124155392
2903
+ },
2904
+ "source_final": {
2905
+ "12": 72,
2906
+ "16": 200,
2907
+ "32": 1134034944,
2908
+ "36": 3284860928,
2909
+ "40": 1124155392
2910
+ }
2911
+ },
2912
+ {
2913
+ "initial_motion": {
2914
+ "12": 8,
2915
+ "16": 10,
2916
+ "32": 1065353216,
2917
+ "36": 3221225472,
2918
+ "40": 1077936128
2919
+ },
2920
+ "input": {
2921
+ "client": true,
2922
+ "direction": [
2923
+ 0,
2924
+ 0,
2925
+ 0
2926
+ ],
2927
+ "knockback": 101,
2928
+ "scale": 1000,
2929
+ "timer": 10
2930
+ },
2931
+ "rust": {
2932
+ "12": 8,
2933
+ "16": 10,
2934
+ "32": 1065353216,
2935
+ "36": 3221225472,
2936
+ "40": 1077936128
2937
+ },
2938
+ "source_final": {
2939
+ "12": 8,
2940
+ "16": 10,
2941
+ "32": 1065353216,
2942
+ "36": 3221225472,
2943
+ "40": 1077936128
2944
+ }
2945
+ },
2946
+ {
2947
+ "initial_motion": {
2948
+ "12": 8,
2949
+ "16": 10,
2950
+ "32": 1065353216,
2951
+ "36": 3221225472,
2952
+ "40": 1077936128
2953
+ },
2954
+ "input": {
2955
+ "client": true,
2956
+ "direction": [
2957
+ 0.6,
2958
+ -0.8,
2959
+ 0.25
2960
+ ],
2961
+ "knockback": 101,
2962
+ "scale": 1000,
2963
+ "timer": 10
2964
+ },
2965
+ "rust": {
2966
+ "12": 8,
2967
+ "16": 10,
2968
+ "32": 1134034944,
2969
+ "36": 3284860928,
2970
+ "40": 1124155392
2971
+ },
2972
+ "source_final": {
2973
+ "12": 8,
2974
+ "16": 10,
2975
+ "32": 1134034944,
2976
+ "36": 3284860928,
2977
+ "40": 1124155392
2978
+ }
2979
+ }
2980
+ ],
2981
+ "rejections": [
2982
+ {
2983
+ "case": "active-nan-direction",
2984
+ "error": "unsupported input: NonFinite",
2985
+ "exit_code": 2
2986
+ }
2987
+ ],
2988
+ "rust_unit_tests": 8,
2989
+ "source_report": "docs/research/qvm-health-impulse.json",
2990
+ "source_report_sha256": "625fd8064004ea6dbdf398d51d0af844d9c635ff04c0a0790886dddb6ab81e71"
2991
+ }
scripts/analyze_rust_health_impulse.py ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Rust impulse contract against every source213009 fixture with exact words."""
3
+ import hashlib,json,os,re,subprocess
4
+ from pathlib import Path
5
+ from analyze_qvm import write_json
6
+ from analyze_qvm_acceleration import word
7
+
8
+ def main():
9
+ test=subprocess.run(['cargo','test','--offline','--package','urt-gameplay'],capture_output=True,text=True,check=True);count=sum(int(v) for v in re.findall(r'test result: ok\. (\d+) passed',test.stdout))
10
+ subprocess.run(['cargo','build','--offline','--package','urt-gameplay','--bin','urt-impulse'],capture_output=True,text=True,check=True)
11
+ binary=Path(os.environ.get('CARGO_TARGET_DIR','target'))/'debug'/'urt-impulse';path=Path('docs/research/qvm-health-impulse.json');data=path.read_bytes();rows=[]
12
+ for p in json.loads(data)['probes']:
13
+ a=p['input'];initial=p['initial'] or {'12':8,'16':a['timer'],'32':word(1),'36':word(-2),'40':word(3)};args=[int(a['client']),word(a['knockback']),word(a['scale']),initial['16'],initial['12'],*map(word,a['direction']),initial['32'],initial['36'],initial['40']];r=subprocess.run([str(binary),*map(str,args)],capture_output=True,text=True,check=True);rows.append({'input':a,'initial_motion':initial,'source_final':p['final'],'rust':json.loads(r.stdout)})
14
+ bad=[1,word(1),word(1),0,8,0x7fc00000,0,0,0,0,0];r=subprocess.run([str(binary),*map(str,bad)],capture_output=True,text=True);assert r.returncode!=0
15
+ write_json(Path('docs/research/rust-health-impulse.json'),{'source_report':str(path),'source_report_sha256':hashlib.sha256(data).hexdigest(),'rust_unit_tests':count,'probes':rows,'rejections':[{'case':'active-nan-direction','exit_code':r.returncode,'error':r.stderr.strip()}],'limits':'Rust/source213009 word parity across96 finite fixtures; no-client preservation additionally checked in Rust. Active nonfinite/unsupported CVFI domains reject explicitly. Host macOS; Linux and full Bevy/Solari gameplay remain open.'})
16
+ if __name__=='__main__':main()
scripts/test_rust_health_impulse.py ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import hashlib,json,unittest
2
+ from pathlib import Path
3
+ from test_qvm_health_impulse import expected
4
+ class RustHealthImpulseTests(unittest.TestCase):
5
+ @classmethod
6
+ def setUpClass(cls):cls.r=json.loads(Path('docs/research/rust-health-impulse.json').read_text())
7
+ def test_all_source_fixture_words_and_inactive_state(self):
8
+ self.assertEqual(len(self.r['probes']),96)
9
+ for p in self.r['probes']:self.assertEqual(p['rust'],p['source_final'] if p['input']['client'] else p['initial_motion'])
10
+ def test_independent_float32_oracle(self):
11
+ for p in self.r['probes']:
12
+ q={'input':p['input'],'initial':p['initial_motion']};self.assertEqual(p['rust'],expected(q) if p['input']['client'] else p['initial_motion'])
13
+ def test_source_identity_and_test_ownership(self):
14
+ self.assertEqual(hashlib.sha256(Path(self.r['source_report']).read_bytes()).hexdigest(),self.r['source_report_sha256']);self.assertEqual(self.r['rust_unit_tests'],8)
15
+ def test_nonfinite_rejection_is_explicit(self):self.assertEqual(self.r['rejections'][0]['case'],'active-nan-direction');self.assertNotEqual(self.r['rejections'][0]['exit_code'],0)
16
+ if __name__=='__main__':unittest.main()
xtask/checks.tsv CHANGED
@@ -1162,3 +1162,11 @@ edge docs/research/qvm-health-complete.json scripts/test_qvm_health_complete.py
1162
  report scripts/analyze_qvm_contact_health.py docs/research/qvm-contact-health.json
1163
  edge docs/research/qvm-contact-health.json scripts/test_qvm_contact_health.py
1164
  group contact scripts/analyze_qvm_contact_health.py
 
 
 
 
 
 
 
 
 
1162
  report scripts/analyze_qvm_contact_health.py docs/research/qvm-contact-health.json
1163
  edge docs/research/qvm-contact-health.json scripts/test_qvm_contact_health.py
1164
  group contact scripts/analyze_qvm_contact_health.py
1165
+ edge Cargo.toml scripts/analyze_rust_health_impulse.py
1166
+ edge Cargo.lock scripts/analyze_rust_health_impulse.py
1167
+ edge crates/urt-gameplay/Cargo.toml scripts/analyze_rust_health_impulse.py
1168
+ edge crates/urt-gameplay/src/lib.rs scripts/analyze_rust_health_impulse.py
1169
+ edge crates/urt-gameplay/src/bin/urt-impulse.rs scripts/analyze_rust_health_impulse.py
1170
+ report scripts/analyze_rust_health_impulse.py docs/research/rust-health-impulse.json
1171
+ edge docs/research/rust-health-impulse.json scripts/test_rust_health_impulse.py
1172
+ group gameplay scripts/analyze_rust_health_impulse.py
xtask/src/lib.rs CHANGED
@@ -1011,8 +1011,22 @@ mod integration_tests {
1011
  root,
1012
  )
1013
  .unwrap();
1014
- assert_eq!(health.tests.len(), 2);
1015
- assert_eq!(health.producers.len(), 2);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1016
  assert!(health.fallback.is_empty());
1017
  // Validate the entire registry DAG, including multi-output native/QVM writers.
1018
  g.producers_in_order(&g.outputs.keys().cloned().collect())
 
1011
  root,
1012
  )
1013
  .unwrap();
1014
+ assert!(health.tests.contains("scripts/test_qvm_health_gates.py"));
1015
+ assert!(
1016
+ health
1017
+ .tests
1018
+ .contains("scripts/test_qvm_health_knockback.py")
1019
+ );
1020
+ assert!(
1021
+ health
1022
+ .producers
1023
+ .contains(&"scripts/analyze_qvm_health_gates.py".into())
1024
+ );
1025
+ assert!(
1026
+ health
1027
+ .producers
1028
+ .contains(&"scripts/analyze_qvm_health_knockback.py".into())
1029
+ );
1030
  assert!(health.fallback.is_empty());
1031
  // Validate the entire registry DAG, including multi-output native/QVM writers.
1032
  g.producers_in_order(&g.outputs.keys().cloned().collect())