Files

20 KiB
Raw Permalink Blame History

Experimental two-pad aircraft route

The isolated twenty-metre route has successful baseline and route-gain native mechanism runs. The 192238 gain run also passed 38 assertions with one completion and zero errors; its measured comparison and single-run limits appear below. For the earlier baseline, the 155909 archive records 38 passing assertions, one completion and zero script/runtime or engine errors against its captured 192-file addon source snapshot. It reached the immutable destination, held position, landed with actual contact and shut down the original aircraft. This is not operational HQ dispatch, a general route capability or multiplayer acceptance. The earlier ninety-second timeout remains archived; the successful run uses the bounded 160-second translation stage within the unchanged 240-second overall lease. Earlier normal, cancellation and four-metre translation archives retain their separate scopes.

Bound and ownership

ERR_AircraftRouteEnvelope.QualifyRoute(mode, aircraft, pilot, destination) accepts only an immutable straight horizontal leg of 18–20.05 metres. The five-centimetre tolerance accommodates initial native settling relative to the fixture's authored twenty-metre endpoint. Destination Y is terrain-derived; callers cannot command an airborne landing altitude. This experimental range is separate from the unchanged original five-metre-target controller.

The qualifier first executes the existing stock Mi-8 health/seat/ground/complete model-and-rotor footprint qualification. It then checks the destination column and the entire rectangle enclosing both endpoints with a forty-metre margin. A native WORLD/ENTS box sweep covers the corridor up to sixty metres, and a separate low ENTS sweep rejects objects across the entire possible landing area. Exclusions contain only the bounded, measured original aircraft/pilot hierarchies. Near-level terrain must remain within 0.3 metres of the starting ground height on a grid no more than two metres apart, covering the route and a twenty-two-metre margin (the eight-metre possible centre deviation plus the existing fourteen-metre pad terrain footprint). The grid is bounded to at most 35×35 samples. This is a sampled terrain qualification, not mathematical proof that no sub-grid hole exists; actual gear contact, attitude and motion still gate landing success. Native obstacle traces are continuous sweeps, not endpoint-only checks. Conservative refusal is expected where the enlarged area is obstructed.

The resulting subclass retains the original envelope's exact-instance, server/mode, two-second native-clock, movement and single-claim guards. It adds no validity setter or alternative Claim implementation. It binds the original home, immutable destination, measured footprint, aircraft and pilot.

ERR_AircraftRouteFlight.StartRoute(mode, aircraft, originalGroup, pilot, exactSeat, route, token, absoluteDeadline) is single-use. The class derives from ERR_AircraftFlight so both modes use the same exclusive airframe registry, original native ownership/health predicates, signed actor-local input proof, engine start, fuel checks, capture behavior and cleanup. It cannot be started through the inherited point-only Start/StartTranslation entry points. There is no second registry, aircraft allocation or permission bypass.

The allocating owner must retain it and call the existing exact-actor PrepareActions before native character controls, exact-aircraft PrepareHelicopter after native helicopter controls, and Tick() regularly until terminal. Cancel, Finished, State, Reason, OrderToken, translation observations and aircraft identity remain inherited. Arrived, Destination and LandingPoint add read-only observations. There are no production hooks or HQ registrations.

Flight and cancellation

The native startup and five-second hover sequence is preserved. The route uses native autohover, a 0.03 actor-local cyclic magnitude cap and 0.5m/s requested horizontal speed toward its fixed endpoint. The archived run used velocity-error gain 0.05; the current candidate uses route-only gain 0.10 while translating, with the isolated 192238 native comparison now passed; its limits are detailed below. Landing and the original short-translation controller retain gain 0.05. Movement and settling now have an experimental 160-second stage bound, clamped to the unchanged absolute overall maximum of 240 seconds. The first ninety-second attempt timed out; the 160-second stage completed in the isolated 155909 run. That result does not establish timing reliability on other routes or workloads. The destination must be held within 0.75 metres, below 0.25m/s horizontal speed and within the original hover constraints for five continuous seconds.

Unlike the original radial-eight-metre mode, the separate route mode limits the aircraft origin to less than eight metres from the fixed, endpoint-clamped segment, including its endpoint caps. The pre-translation stages retain the original start-pad eight-metre radius. Relative height remains -3 through 18 metres, with uprightness at least 0.85; both native input callbacks and Tick enforce this envelope and the original deadlines. The original home is never rebased to manufacture progress.

Normal arrival descends onto the immutable destination. Airborne cancellation instead freezes the actual current horizontal landing point once, inside the already qualified corridor. Capped lateral braking/position control continues during descent. Ground contact must be physically stable for two seconds and within 0.75 metres of that landing point before native engine shutdown; ground contact also zeros cyclic demand. Repeated cancellation cannot move the landing point or renew the deadline. Loss of ownership relinquishes without captured-input writes; deadline, capability or geometry faults remain FAILED and do not claim a safe landing or asset availability. This does not guarantee recovery after an arbitrary airborne fault. World/mission teardown retains the existing ownership revocation contract.

Opt-in native fixture integration

The new WORKBENCH-only ERR_NativeAircraftRouteProbe exposes ERR_NativeAircraftRouteProbe(mode), int Tick(float now) and void Stop(). It enables only when errSmoke=1 and errSmokeOutcome=aircraft-route. Its separate exact-owner hooks delegate native super in the established order. Existing aircraft and Core powered probes remain inactive for this outcome. The probe uses the existing WORKBENCH read-only deadline getter; there is no production state override.

The integrated one-round Chat outcome aircraft-route constructs this probe in smoke step230, forwards Tick, requires successful step231 before explicit fixture reset, and calls Stop on failure/teardown. It uses the same bounded 330-second world deadline / at least 420-second hidden-run timeout as other aircraft fixtures. The probe itself has a 300-second deadline and controller operations remain at most 240 seconds. Emit the existing generic completion marker only after Tick returns 1. Do not wire this into normal mission preparation or HQ decisions.

The fixture surveys bounded candidate pads before allocating exactly one Mi-8, one original group and one native-seated pilot. It uses one initial physics wake and no later transform, velocity, health or fuel writes. Post-spawn qualification must succeed independently. Its endpoint is fixed twenty metres east before takeoff. Success requires the actual controller's COMPLETE and Arrived state, the original aircraft/pilot/seat, a measured destination hold, meaningful physical displacement, final target error at most 0.75 metres, real ground contact, engine off, consumed finite fuel and one engine/controller start. Neither CANCELLED nor FAILED qualifies a route. Cleanup clears the test hooks/controller before disposing only unchanged, unclaimed fixture assets; captured entities are preserved. Fixture disposal on failure is explicitly not a successful production cancellation landing.

Source-local checks

  • python tests/test_aircraft_route_envelope.py executes actual corridor/hold rules and the survey body with terrain/native trace boundaries substituted. It rejects endpoint overrun, lateral/height/tilt violations, terrain discontinuity samples and either obstacle trace refusal, and verifies the full swept rectangle/exclusion geometry.
  • python tests/test_aircraft_route_policy.py executes actual route entry/stage/landing/lease methods together with the original cancellation method. It checks immutable destination, interrupted holds, exact target landing, cancellation's frozen landing centre, unchanged deadlines, capture/expiry/geometry refusal and preservation of the complete native startup/tick sequence apart from the new geometry gate.
  • python tests/test_aircraft_route_probe.py checks actual result policies and finite opt-in fixture/native callback/cleanup boundaries.

These pass alongside the existing aircraft controller/envelope/translation/probe tests. They are source-local regressions with fake native boundaries, not native flight, radio delivery, transport, repeated-sortie or multiplayer evidence. The ordinary mission's lack of authored enemy airframes, no-player HQ tick pause and operational stop/availability contracts remain outside this experimental change.

Historical timeout and successful bounded follow-up

The 155105 native route archive records 36 passing assertions, zero completions and two explicit fixture-failure messages. Corrected route source compiled, the actual aircraft/pilot and full post-spawn corridor qualified, and native input produced stable approximately eight-metre hover followed by physical translation toward the immutable endpoint. Requested distance was 20.2198 metres; at the ninety-second translation deadline, displacement was 12.0775 metres with 8.14241 metres still remaining and 1,546 translation input updates. The actual controller reported FAILED with bounded flight stage expired; arrival, destination hold, landing and shutdown were not completed. This is failed-flight evidence, not an accepted route.

The follow-up changes only the route stage bound to Math.Min(originalDeadline, now + 160000) and adds WORKBENCH-only read-only telemetry to the existing two-second diagnostic. It reports world position, velocity vector, signed progress along the immutable segment, distance from its endpoint-clamped segment, current landing/destination error, computed world demand, projected forward/aside demand, world basis vectors and remaining stage/overall milliseconds. These demands are recomputed observations of the existing equation, not proof that a native callback consumed that exact sample. The native control equations, gains, ownership, physical envelope, overall 240-second lease and terminal criteria are unchanged. An explicit CORRIDOR accepted log distinguishes full route survey success from earlier candidate-pad checks.

The timeout run's recorded final twenty seconds gained approximately 2.56 metres in radial distance over 20.2 seconds, while reported physical speed was approximately 0.15–0.18m/s. From 8.14 metres remaining, reaching the 0.75-metre acceptance radius at roughly 0.13m/s plus a five-second hold would need about another 62 seconds, before extra proportional braking near the endpoint. Thus 150 seconds would be marginal; 160 seconds leaves only a small route margin. The observed approximately 45-second startup/hover plus a full 160-second leg and an estimated 25-second landing totals approximately 230 seconds, only ten seconds below the unchanged absolute lease. This was the pre-run timing estimate, not the later landing evidence. Further slowdown or longer startup may still legitimately fail; the source does not extend or renew that lease to make the fixture pass.

The 155909 console records a requested distance of 20.2214 metres from the actual post-hover origin. The destination hold completed at 0.546151 metres error after 2,716 translation updates. Final physical displacement was 20.1261 metres with 0.129942 metres target error. The controller reached COMPLETE with one initial wake, one engine start, one controller start and the original pilot/seat; native assertions required ground contact, engine off and finite fuel consumption. The runner record retains smoke-completed and unchanged source across the run. These observations qualify this one newly authored experimental leg only. They do not establish radio-authorized HQ routing, transport loading, repeated sorties, dynamic obstacle avoidance, remote ownership or human piloting.

Route-only gain candidate and native comparison

The captured 155909 source remains the accepted baseline, not evidence for this candidate. In that console, translation began at approximately native time 58,559ms and the destination hold completed at 213,917ms: approximately 155.36 seconds of the 160-second stage. The first logged sample within two metres was at 195,709ms, so approximately 137.15 seconds were spent reaching the final two metres. Across sixty cruise samples with more than two metres remaining, progress along the fixed segment was 15.6404 metres over 119.4608 seconds (0.131m/s). Computed demand magnitude never exceeded 0.01919, below the existing 0.03 cap. Thus the five-second hold was not the principal delay. Native simulator velocity and finite-difference position progress are separate observations; these figures use the logged world positions and clock.

The candidate changes only TRANSLATING velocity-error gain from 0.05 to 0.10 through ERR_AircraftRouteRules.Demand. Desired velocity remains horizontal error * 0.25, capped at 0.5m/s; demand remains capped at magnitude 0.03. Landing—including cancellation descent—uses the unchanged shared demand. The read-only fixture diagnostic selects the same equation as the controller. No deadline, terrain/obstacle qualification, speed/arrival criterion, input ownership, rotor proof or native asset is changed. The single native comparison below demonstrates faster completion in that run, not repeatable stability across conditions; the exposed native autohover API does not document its internal response law.

The 192238 run repeated the existing twenty-metre native route and passed 38 assertions, one completion and zero recorded script/runtime or engine errors. It preserves the original hold, physical landing and shutdown criteria. Preserve any failed run and its original errors. The existing cancellation regression must still preserve the captured landing point, original lease and shared landing gain. Longer field routes and HQ dispatch remain unimplemented; changing this gain does not qualify either.

python tests/test_aircraft_route_demand.py executes the actual demand methods and route native-control callback with fake native boundaries. It checks horizontal speed/magnitude caps, opposing-velocity braking, zero vertical output, TRANSLATING-only selection, unchanged landing demand after cancellation and grounded zero cyclic. These are source-local policy checks, not native flight evidence.

Measured 155909 → 192238 comparison

The machine-readable comparison records exact input archive paths, every archive file hash, console/launch/end-manifest binding checks, source-snapshot differences, console event lines and calculation methods. It adds no acceptance verdict beyond the original archived reports.

Measurement Baseline gain 0.05 Route gain 0.10
Translation start → completed destination hold 155.365s 69.293s
Sampled cruise progress along the fixed route 0.131m/s 0.322m/s
Translation start → successful shutdown/result 170.542s 84.984s
Completed hold → first logged ground contact 12.150s 11.640s
Completed hold → COMPLETE 15.177s 15.691s
Error at completed hold 0.546m 0.398m
Final target error 0.130m 0.099m

The measured translation duration decreased by 55.4% (86.072 seconds), while cruise progress increased by 2.46 times. Landing duration remained approximately unchanged. The candidate's recorded translation height stayed 7.996–8.024 metres; maximum sampled cross-track distance was 3.044 metres, including the initial post-hover offset. No endpoint crossing appears in the two-second telemetry: the largest logged along-route position during translation/landing was 19.912 metres for the nominal 20 metre endpoint. This is sampled evidence, not proof of zero inter-sample oscillation. Both native runs completed on the original aircraft/pilot with actual contact, engine off and finite fuel consumption.

These are one run per gain, not a matched-load performance/FPS benchmark. Initial requested distances differed slightly (20.2214 m versus 20.2311 m), and the complete source snapshots contain 192 versus 195 files with nine differing paths recorded in the comparison. The baseline used gain 0.05 and the candidate route uses 0.10; the unchanged shared flight controller hash is retained in both source manifests. The result supports this isolated candidate mechanism only. It does not establish repeatability, longer terrain routes, operational HQ dispatch, multiplayer/remote ownership or cancellation under the new gain. No qualification, deadline or arrival requirement was widened for this comparison.

Production control callback bridge candidate

ERR_AircraftControlBridge.c connects the native character callback before super and the helicopter callback after super to ERR_AircraftFlight's existing exact-airframe registry. A callback does not create, register or choose a flight. Dispatch rechecks the original lease, token, qualification and current mode/world/aircraft/pilot ownership before the controller performs its existing capability/deadline/envelope checks. Captured ownership is relinquished without actuator writes. An actor's physical vehicle and a controller's owner provide bounded direct registry lookups; unrelated gameplay remains inert.

The two Workbench probes retain their native callback counters solely as observations. They no longer call PrepareActions or PrepareHelicopter, so the production bridge owns the single actuator path independent of inherited modded-class order. Successful fixture completion still requires the controller's internal callback/readback gates and physical flight/landing outcome. The new actual-method regression and existing flight/route policy checks pass; the 194527 native route now passes38assertions through physical target hold/contact landing/engine off. The 195446 airborne cancellation passes39assertions through retained control, original lease and real contact landing. Both have zero captured engine/script errors and unchanged196-file source provenance. The ordinary194928 launch compiles the bridge outsideWorkbench with no captured engine errors; it creates no autonomous flights.

This supplies only the control bridge. Ordinary mission preparation still does not allocate or dispatch an enemy aircraft; an HQ-owned finite-aircraft service, radio-authorized assignment, retained flight ticking through empty-server conditions and useful terrain-qualified routing remain unfinished.