Download docs/research/QVM_VIEW_MOTION.md from nmarshall/urt-rs: direct link, hf CLI and curl.
- Browser
- Download file 6.52 kB
-
https://huggingface.co/nmarshall/urt-rs/resolve/main/docs/research/QVM_VIEW_MOTION.md
- Command line
-
hf download hf://nmarshall/urt-rs/docs/research/QVM_VIEW_MOTION.md
-
curl -L -o QVM_VIEW_MOTION.md https://huggingface.co/nmarshall/urt-rs/resolve/main/docs/research/QVM_VIEW_MOTION.md
Game-QVM view angles, basis vectors and position tails
RE-425–427 / F-178–180. qvm-view-motion.json retains shipped qagame instruction evidence, 42 view-helper probes, twelve supplied-trig basis probes and 48 position-tail probes. Reproduce with python3 scripts/analyze_qvm_view_motion.py; verify with python3 scripts/test_qvm_view_motion.py.
This follows child clock and dispatch. All results are bounded synthetic instruction evaluations. No full QVM, original executable, native callee or collision/physics system executes. View conversion is evaluated separately. The basis slice records the view-helper call without effects and uses supplied source angles and trig return words. Position tails use supplied post-acceleration velocity and timestep; preceding friction/acceleration/collision/callback effects remain omitted.
VIEW-001 — Complete view helper53186 (RE-425)
The helper rejects type5 immediately. Other types proceed when type2, player-state+220 bit2048, or player-state+208 >0; otherwise they return without angle/delta mutations.
For each of three axes it adds the command angle at command+4/+8/+12 to player-state delta word+56/+60/+64, stores the low16 bits in a local halfword, then sign-extends that halfword. Thus extra high word bits, including the extra keyed-decoder bit16 described in CMD-002, are discarded in this consumer. This does not close other angle-word consumers, buttons or legal key-domain work.
Axis0 has a separate pitch-like policy:
- Clamp the signed halfword to[-18000,14000].
- On a clamp, rewrite its delta word to signed32(clamp_boundary-original_command_angle). The other delta words are retained.
- Add2000, storing again through the local halfword.
- Convert the resulting signed integer to binary32, multiply by exact binary32 word1001652224 (360/65536), and store at player-state+152.
Axes1/2 skip clamp/bias and store their signed16 scaled results at+156/+160. Pitch output after clamp/bias ranges from-87.890625 to87.890625 in the observed degree-like scale. The bias does not independently add2000 to the persistent delta word.
42 probes cover type/flag/health-like gates; values around both clamp boundaries; signed16 wrap; and command words65536/65537 with supplied deltas0/100. Tests independently predict exact float words, unchanged outputs on rejection and full-word delta rewrites. No input-angle producer, exceptional arithmetic, overlapping pointers or actual runtime fixture is established here.
VIEW-002 — Basis construction with supplied trig returns (RE-426)
The child slice53789–54022 records helper53186(player-state,frame+4) only when frame+240 ==0. It then reads player-state view words+156/+152/+160 in yaw/pitch/roll order, multiplies each by binary32 word1016003125, and records targets-104/-105 for paired trig returns. Six return words per probe are supplied by an ordinary sin/cos model after binary32 radian scaling; native trap implementations, argument reduction, error cases and floating-control behavior do not execute.
The evaluated multiply/add/negate sequence constructs nine words at35023892 through35023924: three candidate forward/right/up basis vectors. Supplied-angle fixtures0/90-degree axes, a mixed30/45/60 case and negative/180-degree values exercise signs and rounding. The final helper50525 request is recorded without effects.
Twelve probes (six angle triples, skip flag0/1) verify call gating, trig argument words, exact basis words from independent rotation formulas with binary32 operation rounding, vector lengths and orthogonality. These checks establish conditional algebra and data flow; they do not validate the native trig ABI/return convention, helper50525 effects, coordinate conventions for the complete game or a composed view-to-physics pipeline.
VIEW-003 — Two mode-specific position-update tails (RE-427)
Helper42486's tail42671–42836 examines absolute values of three supplied velocity words at player-state+32/+36/+40. If all are <=1, it returns without integrating position. If any is >1, it updates all three position words+20/+24/+28 as binary32(position + binary32(velocity * global35023928)). The threshold is per component, not vector magnitude. Equal1/-1 does not trigger integration.
Helper45461's tail45813–45885 performs the same three update expressions without that threshold. Neither retained tail changes velocity or calls a helper. This observation does not characterize earlier acceleration/friction or prove that either complete mode lacks collisions or other effects.
48 probes cover zero, sub-unit, exact +/-1, just-over-threshold components on each axis and mixed velocities, with supplied fractional times0/0.016/1. Independent rounded arithmetic predicts every position word and verifies velocity retention and empty call lists.
Evaluator boundaries and validation
The QVM slice model adds explicit byte-backed STORE2/LOAD2/SEX16 for local halfwords, finite ADDF/SUBF/NEGF and finite float comparisons. Unknown halfword reads or stores without explicit byte memory fail; general word/halfword alias coherence remains unmodeled. Nonfinite arithmetic/comparison inputs fail closed rather than inventing native NaN/infinity behavior. Earlier finite MULF behavior/output is retained.
Eight tests independently verify view gates/clamps/bias/deltas/word-bit truncation, trig request/skip behavior, rounded basis algebra and orthogonality, per-component threshold/unconditional position tails, source/boundary evidence, halfword operations/failure domains and finite arithmetic rejection. Previous report regeneration checks protect shared evaluator users.
RE-424 remains open for full mode/callee/runtime work. RE-428 must recover native trig services/return ABI and helper50525, compose view updates with real child vectors, trace complete mode friction/acceleration and collision effects, verify field/type/coordinate meanings and angle producer/key domains, characterize alias/exceptional/control-state cases, continue main movement branches and validate full gameplay/macOS/Linux before Rust/Bevy/Solari compatibility claims. Packet/entity/player/snapshot/rendering milestones remain open.
Follow-up: command scaling and acceleration recovers two helpers and partially composes them into a mode caller through position integration. Friction, native sqrt, complete basis/callee/collision effects and runtime validation remain open.