Files
EscapistsReintroduced/docs/evidence/passenger-handbrake-2026-10-30

Passenger handbrake validation

The feature adds a held Space input for a conscious front passenger in wheeled vehicles. Authority derives the passenger from the requesting player controller, requires the current admitted mission body, and validates the actual occupied seat. Seat points are compared in vehicle coordinates, excluding driver, turret, rear and tandem seats. The held state is replicated from authority. Heartbeats are sent every 250 ms; a 250 ms authority timer expires a demand older than one second even when the passenger no longer receives input callbacks.

The driver's native CarHandBrake action receives the extra demand before native control preparation. No release is written over the driver's action, and no gear or service-brake values are changed. An already-set persistent brake or a native persistent-brake toggle is left alone. Chat, menus, incapacity, leaving the seat, and mission completion stop the passenger input.

Native fixture

native-probe.c runs only in a disposable Workbench source snapshot. It suppresses normal scenario preparation and supplies two scripted occupants and a locally controlled driver. The passenger demand is injected through the production server-side setter; this does not exercise physical Space input, the admission RPC, or replication between two clients. Those remain a dedicated-server playtest.

The fixture checks UAZ front/rear/driver seat eligibility, native brake engagement and release, preservation of an existing parking brake, lease expiry without heartbeats, and front-seat selection in a rotated S105. prepare-native.py copies the exact addon sources and adds the temporary fixture and runner choice.

Earlier native experiments found that editing CharacterInputContext in OnApplyControls did not drive the brake, and ordinary held input released an existing parking latch. The implementation uses the native actor action and skips that extra demand while the parking brake is already set.

Result

All feature assertions completed successfully in the final run. No script errors were reported. The strict runner exited 1 because it also counts 13 pre-existing localization/world asset diagnostics; they are retained in native-checks.log and the runner record. Cleanup and source immutability checks passed.

Additional checks: git diff --check, generated-menu freshness, and the four Workshop changelog tests passed. At validation time the published Workshop version was 0.0.131; the native checks preceded publication of this change.