Download docs/research/QVM_GROUND.md from nmarshall/urt-rs: direct link, hf CLI and curl.
- Browser
- Download file 8.81 kB
-
https://huggingface.co/nmarshall/urt-rs/resolve/main/docs/research/QVM_GROUND.md
- Command line
-
hf download hf://nmarshall/urt-rs/docs/research/QVM_GROUND.md
-
curl -L -o QVM_GROUND.md https://huggingface.co/nmarshall/urt-rs/resolve/main/docs/research/QVM_GROUND.md
Game-QVM content levels, ground trace and friction inputs
RE-437β439 / F-187β189. qvm-ground.json retains shipped qagame helpers47217/46773, 28 point-content probes, 168 ground-classification probes and sixteen scalar friction bridges. Reproduce with python3 scripts/analyze_qvm_ground.py; verify with python3 scripts/test_qvm_ground.py.
This follows friction policy recovery. Results are bounded synthetic QVM instruction evaluations. No complete QVM, original executable, native callback or collision executes. Point-content return words and the complete 56-byte trace output are supplied. Recovery, ground-lost, landing and event helper effects are omitted; only the recovery Boolean return is supplied explicitly. Trace normals/contact legality are not validated. Scalar bridges do not transfer a complete collision/movement state.
GROUND-001 β Three content samples and frame level (RE-437)
Helper47217 resets frame+208 and frame+212 to zero. It records the callback stored at frame+228 (supplied encoded target-26) with a point pointer and player-state+140 value. Source position comes from player-state+20/+24/+28.
Sample heights relative to source Z are:
- Z-24+1.
- Z-24+trunc_toward_zero((player-state[+164]+24)/2).
- Z-24+(player-state[+164]+24).
X/Y remain the source coordinates. The second/third calls occur only when the preceding return word includes mask56. The first accepted return is copied without masking to frame+208, and frame+212 becomes1/2/3 according to how many successive samples include mask56. A miss stops further sampling; zero successful samples retain both reset words.
28 probes cover supplied height words-5/20/38/39 and seven content-return patterns, including unrelated bits and 0xffffffff. Independent tests verify exact sampled float words, integer half-height truncation, callback requests, short-circuit counts, raw first-return retention and final level. Water/liquid-like level terminology is provisional until content bits, callback ABI and producers/consumers are confirmed.
GROUND-002 β Trace request, copy and caller-side classification (RE-438)
Helper46773 records the callback stored at frame+224 (supplied target-25) with these explicit arguments:
| Slot | Observed value |
|---|---|
| 8 | Local 56-byte trace destination |
| 12 | Player-state position pointer (+20) |
| 16/20 | Frame+184 / frame+196 bounds pointers |
| 24 | Local endpoint with Z decreased by binary32 0.25 |
| 28 | Player-state+140 value |
| 32 | Frame+28 mask |
The full supplied trace is copied to global35023944. Its word at offset44 becomes global35023988, connecting the earlier friction surface-word input to this trace producer. Supplied trace entity at offset52 feeds the later ground/entity requests. This establishes the QVM record-copy offsets; the native trace callback and complete native/QVM structure ABI are still open.
The caller then applies this priority (all fields refer to the supplied trace/state):
| Condition | Caller-side path and stores |
|---|---|
| Trace word0 nonzero | Record46296(trace); supplied zero result returns immediately |
| Trace fraction word+8 == binary32 1 | Record46527(); clear globals35023940/35023936; return |
| Velocity Z >0 and rounded dot(velocity,trace normal) >10 | Toggle player-state+12 bit4096, record39525 animation-code request, set ground word+68=1023, clear both globals |
| Trace normal Z < binary32 0.7 | Ground+68=1023; global35023940=1, global35023936=0 |
| Frame level+212 >2 | Same plane/walk stores as the preceding branch |
| Remaining path | Clear player-state+12 masks16/2; set both globals to1; process landing state and record new ground/entity |
The kick-path request selects code26/30 when bit4096 was initially set, or28/32 when initially clear, depending on nonnegative/negative forward byte. The new ground/entity word is the supplied trace entity, eight in these fixtures.
On the remaining path, initial player-state+12 bit128 is cleared and player-state+16 reset to0. If prior ground word+68 was1023, it records helper45912(new entity), then sets the timer word to250 only when saved vertical word35024024 is strictly below-200. It assigns the new ground word and records helper39253(new entity). No landing/event helper effects are applied.
168 probes vary allsolid/recovery, fraction, normal Z, upward velocity, level, previous ground, PS flags, saved fall velocity and signed forward direction. They cover the exact0.7 and-200 thresholds and strict dot>10 condition. Independent oracles check full trace copy, callback shape, branch priority, caller stores and recorded call ordering.
Initial global sentinels11/22 demonstrate when this caller does not assign them, such as failed recovery; they are not a claim that real movement reaches such values. The earlier scratch-reset and external helper effects are not composed. Successful recovery fixtures continue with an unchanged supplied record, which is conditional on the omitted recovery effects.
GROUND-003 β Scalar producer-to-friction bridge (RE-439)
Sixteen fixtures evaluate content samples, pass the resulting level into ground classification, then pass the resulting walk/global35023936, trace-derived surface/global35023988, level/frame+212 and PS flags into the previously recovered friction helper. They combine levels0β3, supplied normal Z0.5/1 and surface words0/2.
This connects concrete producer offsets to earlier friction gates: the frame level comes from successive content-mask hits, the walk input comes from ground classification and the surface input comes from the copied trace's offset44. The friction fixtures retain independently supplied velocity(200,0,0) and verified initialized coefficient words; only these scalar states are bridged.
Tests use the independent friction arithmetic oracle to verify the resulting drop/ratio/vector and exact transferred values. Point/trace callbacks, real coefficient writers, complete frame/PS changes, other helper effects and collisions remain omitted. Full simulation/gameplay equivalence is not established.
Validation and next tasks
Eight tests independently verify sampling/masks/points/requests, trace arguments/endpoints/full copy, classification/stores/helper ordering, strict thresholds, scalar friction propagation, source/coefficient bytes and explicit scope. The full suite runs; the direct friction dependency and new ground report are regenerated, with the new report checked twice for identical bytes. No existing analyzer/evaluator code changes in this batch.
RE-436 remains open for complete policy/producers/runtime work. RE-440 must recover native point/trace callback ABI and collision results, content/surface bit meanings and bounds/height producers, recovery/ground-lost/landing/touch helper effects, actual scratch reset and prior state, full frame/PS/collision-to-friction composition, coefficient writers and gameplay/macOS/Linux before Rust/Bevy/Solari compatibility claims. Packet/entity/player/snapshot/rendering milestones remain open.
Follow-up: posture recovery identifies helper47422 bounds/height producers and transfers selected outputs into content and ground fixtures (RE-441β443). Optional explicit bounds in the ground analyzer preserve default report bytes. Actual native collision and complete state composition remain open under RE-440/444.
Follow-up: contact-list recovery explains helper39253 sentinel/capacity/dedup/append behavior for bounded synthetic lists (RE-447). Native contact generation and complete ground/list/entity effects remain open.
Follow-up: main environment shared-state recovery completes bounded RE-501β503, evaluating these content/ground bodies before and after selected movement with actual current vectors, terminal touch effects and derived mode inputs. Native/callee/legal/full runtime limits remain explicit.
Follow-up: ground-loss and landing-prefix recovery completes bounded RE-509β511, distinguishing46527 short-query retention from46773 caller walk clearing and documenting45912 timer/impact prefix limits.
Follow-up: landing/event queue caller composition completes bounded RE-513β515, replacing omitted landing effects in selected actual ground/main chains and preserving caller timer/touch ordering. Native/other callees/legal/full runtime limits remain explicit.
Follow-up: allsolid recovery caller composition completes bounded RE-517β519, replacing supplied46296 returns with evaluated search/retrace/global-copy effects at selected actual ground/main boundaries. Native contact validity and broader callee/runtime limits remain explicit.