Files
EscapistsReintroduced/docs/prison-lock-alignment-plan.md

9.1 KiB
Raw Permalink Blame History

Native prison-lock alignment: next bounded experiment

This is a source- and telemetry-based plan, not an executed alignment or lock-picking proof. Do not change action availability, context radius, assets, actor pose, camera pose or the original observation lifetime to obtain a pass.

What the ordinary approach established

The ordinary session logs_2026-09-19_19-13-42, nonce 31a3be1395be435294173595c4fb0659, ended its approach with ten W pulses and fourteen relative turns. The root’s independent raw-route review accepted the interior route; its original runner result failed a legacy inventory-summary requirement. That failure must remain in the original archive. Neither route completion nor proximity establishes a selected lock action.

At native sample 296, real 63752 ms, the raw console records:

Measurement Native value
Actor GetOrigin() <6092.42,211.297,7155.81>
Actual camera position <6092.42,212.921,7155.71>
Actual view direction <0.807436,0,-0.589955>
Registered gate context origin <6092.77,213.226,7154>
Context radius 2
Prison center / gate origin <6090,211.444,7160> / <6090,211.344,7154>

The player was stopped and still inside. Selected lock, selected context and cached permission remained false in the final observations; door state/control remained zero. The context/action/component references remained pinned by the native observer.

Calculated from that actual camera sample, current yaw is 126.154° and pitch 0°. The handle center requires yaw 168.433°, a +42.279° correction, and pitch +9.912°. Camera-to-handle distance is 1.772m; actor-origin-to-handle distance is 2.668m, including 1.929m of height difference. These calculations identify the handle direction, not the engine’s exact selection volume or reference-bone position.

Installed collection rules and their limits

Read directly from installed Arma Reforger/addons/data/data007.pak, resource {6E2BB64764E3BE9B}Prefabs/Characters/Core/DefaultPlayerController.et configures:

SCR_InteractionHandlerComponent {
 GlobalVisibilityRange 2.5
 ReferenceBoneName "head"
 NearbySphereRadius 5
}

DefaultPlayerControllerMP.et inherits that prefab. Thus the authored context radius of 2m is not evidence that collection measures a two-metre sphere from the player’s feet. A native head reference is configured; it is not necessarily identical to the rendered camera origin.

Generated scripts/Game/generated/UserAction/ExtBaseInteractionHandlerComponent.c describes preferred collection as a sphere cast followed by a sphere query, selecting a valid actions-manager context. Its exact native implementation is unavailable here. UserActionContext.GetOrigin() is documented as world space. On-foot SCR_InteractionHandlerComponent.DoIntersectCheck() normally returns false; it enables the alternate context-radius intersection test for vehicle/inspection cases. Do not assume a radius-only test models ordinary walking selection.

There is also a distinct scripted context-change rule: scripts/Game/Interactions/SCR_InteractionHandlerComponent.c:325–374 computes distance from m_ControlledEntity.GetOrigin() to the context and allows a context change beyond context.GetVisibilityRange(handler.GetVisibilityRange())² × 1.1. With the configured 2.5m range and no action-specific extension, that threshold is 2.622m. The measured feet distance is 0.046m beyond it. This rule permits a context change; it neither proves initial collection failed nor forces the current context to clear. The native read-only visibility getters can confirm the effective range if further diagnostics are needed. UpdateLastReferencePoint() updates state and should not be used as telemetry.

Installed selection code (SCR_InteractionHandlerComponent.c:690–832) indexes the filtered/aggregated actions and preserves previous selection. Even a gathered gate context does not guarantee the selected action is ERR_UnlockPrisonAction.

Smallest next step

Use a separately explicit alignment-only variant after the independently verified interior approach. Keep the original player/world/life/nonce pins, private display/focus/pointer ownership, mute/hidden display, no held keys, and original 45-second observation window.

  1. Freeze the final stopped body and measured gate geometry. Recompute handle bearing from fresh native camera/handle positions. First attempt bounded horizontal relative turns only, using the same run’s proven signed yaw calibration, at most 128 pixels per step and the existing measured turn/settling guards. Do not walk closer merely because the feet distance exceeds the context radius.
  2. Stop turning once two fresh consecutive native observations identify the original lock/context with cached permission, or once the bounded yaw target/budget is reached. Require zero action input/progress throughout. Native action selection—not an estimated aim point—is the result being tested.
  3. If yaw alignment does not acquire the lock, record the failure. The calculated +9.9° pitch is a candidate for a later explicitly bounded vertical-input experiment; horizontal calibration does not establish vertical gain/sign. Only after native evidence distinguishes aiming from reach should an additional small, stopped physical approach be considered. No selection setter, direct completion, context modification or teleport is an alternative.

The original input QUEUED clock is 30094ms. Its unchanged expiry is 75094ms, leaving approximately 11.3 seconds after the observed approach completion. Roughly 42° of yaw, potentially 9.9° of pitch, native settling, and a four-second held action leave little margin. Alignment-only is the next logical experiment. Do not extend the observation or approach deadlines to fit F into this run.

A later F-only proof must start with at least six seconds of the original observation budget remaining and stable exact selection, use one bounded F-down/up pair, retain the proposed five-second F lease without changing W’s lease, and prove native progress plus PRISON → RADIO_SEARCH and gate response while still inside. Until those prerequisites are observed, send no F. No runtime or input changes were made for this audit.

Implemented explicit yaw-only experiment

tools/headless_game.py --exercise-prison-alignment requires the existing explicit approach, relative-look, native input/gate observations and private-display inspection. It runs only after the raw native approach has independently passed. The separate alignment policy receives no keyboard-sending capability. Up to six horizontal relative mouse requests, each at most128pixels and15degrees of observed turn, remain subject to current/projected pointer containment and the same private window/focus/prefix ownership checks. The cumulative limit is768pixels. Body drift is limited to0.05m; native movement, action progress and door changes refuse the stage.

A separate immutable eight-second supervisor lease is shortened by the remaining original45-second native lifetime; neither approaching the gate nor starting alignment renews that lifetime. Native geometry, original actor/life/camera/lock/context, nonce, same-run signed calibration and ordered sample receipts remain bound. The stage requires two consecutive stable samples selecting the original lock and context with cached permission and genuinely bound zero progress. It never sends F, vertical movement, pitch or scroll input, and has no direct selection/action/world setter.

The helper and independent raw-log validator are hashed separately from the approach modules. Default keyboard-only and approach-only modes remain explicit alternatives. Simulated checks establish policy and integration boundaries only; a completed native alignment archive is required before claiming that normal input selects the lock.

Native yaw experiment result,19September19:41

The 194128 archived run remains failed: its independent review accepts the prior4.760m approach with10pulses and0.475m final waypoint distance. Four additional horizontal turns acquired the exact gate context, with cached lock permission true, but selected lock and bound progress false. The view had reached the requested yaw region; no F or door action was sent. The eight-second alignment supervisor stopped the run; all attempted W presses were released and private cleanup verified. Next is read-only selected-action/class/order diagnostics to distinguish the disabled stock door action from the available lock, before any separately bounded action-cycling experiment. No larger reach/radius or action-availability change is justified by this result.

The earlier 193924 attempt stopped before alignment,0.982m from the interior waypoint, because the largest observed stop0.907m plus its0.25m margin exceeded remaining distance. It remains a failure; the fresh194128 attempt used unchanged limits. This also documents normal-input timing variability rather than establishing repeated approach reliability.