Files
EscapistsReintroduced/docs/evidence/inventory-hitzone-compat-2026-10-03/next-native-ui-check.json
T
jakub 6a667d8deb Capture current mission, AI, map and administration development
Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
2026-10-13 22:52:53 +02:00

32 lines
4.9 KiB
JSON

{
"verdict": "Feasible bounded native callback/UI integration without desktop input or health mutation; not implemented or launched.",
"suggested_fixture": "One explicit WORKBENCH-only inventory-hitzone selector in the existing Core base-smoke lifecycle, after canonical local conscious admission, with a fixed 30-second deadline and ordinary terminal cleanup.",
"steps": [
"Pin current ERR_GameMode, local controller and original roster actor; require its conscious native character, damage manager and inventory manager. Refuse an already-open menu so no user/foreign menu is adopted.",
"Call the actor's SCR_InventoryStorageManagerComponent.OpenInventory() once. Find and retain the exact SCR_InventoryMenuUI from Inventory20Menu, current actor and root identity. This uses native inventory access/life guards and ordinary opening behavior.",
"After native inventory/storage preview readiness, call existing public menu.InspectItem(null) once. This requests ordinary character inspection and invokes native InitializeAllHitZonesUI/InitHitZones; wait for all seven points because native initialization spans frames. Do not copy or invoke individual initializer bodies manually.",
"Expose bounded WORKBENCH-only read access to the native menu's m_aHitZonePoints and owning player; retain its exact seven original containers and the real blood hitzone. Require each adapter's captured mode and sources include that same blood hitzone. No replacement points or synthetic hitzones.",
"Add narrow WORKBENCH counters on the exact containers: override protected UpdateHitZoneState(SCR_HitZone hz, bool updateAttachmentStorage=true), call super exactly once and count only the watched real blood hitzone and refresh value after returning. Arm observation only after initialization, so initial direct calls are excluded.",
"Emit the real blood.GetOnDamageStateChanged(false).Invoke(blood) with exactly one argument. Require every pinned original container's native update counter increases exactly once and receives true; preserve a before/after blood health snapshot. This directly exercises installed ScriptInvoker argument dispatch and the successor wrapper into existing native UI behavior, without injury/treatment simulation.",
"Request CloseMenu(exactOwnedMenu) once; await native menu disappearance/root detachment instead of assuming synchronous close. Retain original point references only for the bounded check. Invoke the same original blood event after close and require old update counters unchanged, demonstrating automatic detach cleanup rather than calling adapter cleanup directly.",
"Optionally one reopen within the same fixed deadline proves seven fresh containers and one update each, while retained old containers stay unchanged. Close only the exact newly owned menu. Complete through existing smoke lifecycle; stop removes probe counters/references and closes only its own still-current menu. No retries or world manipulation."
],
"source_basis": [
"SDK SCR_InventoryStorageManagerComponent.OpenInventory: access and ALIVE guards, native Inventory20Menu open, inventory-open invoker and weapon state handling.",
"SDK SCR_InventoryMenuUI.InspectItem(null): existing public character inspection path, InitializeAllHitZonesUI spreads InitHitZones(true) across frames until CHARACTER_HITZONES_COUNT.",
"SDK SCR_InventoryMenuUI.InitHitZones: actual stock layout and InitializeHitZoneUI with batch refresh flag; no stock implementation copy needed.",
"SDK SCR_HitZone.OnDamageStateChanged: invokes m_OnDamageStateChanged.Invoke(this), exactly matching proposed synthetic notification argument count.",
"Existing ERR_NativeItemStationTeardownProbe.EmitNativeCallbacks already directly invokes real hitzone invokers as a labelled native lifecycle test.",
"Existing ERR_NativeObjectiveMapProbe retains exact owned menu and awaits asynchronous native closure; reuse that ownership pattern."
],
"limits": [
"This proves native one-argument event delivery to actual native inventory widgets and cleanup. It does not prove natural injury creation, treatment efficacy, health policy, manual navigation, visual readability, remote multiplayer or FPS.",
"The deliberate invoker notification is not a naturally occurring damage-state transition; document it explicitly.",
"A hidden native window can instantiate UI but does not by itself prove rendered appearance. No screenshot claim without owned-window UI-inclusive capture.",
"Existing vanilla menu tourniquet/DOT subscriptions and unrelated UI lifecycle errors remain visible; never suppress script errors to pass the probe.",
"Native GUI/storage readiness is asynchronous. If native inspection cannot initialize within the fixed deadline, retain failure rather than constructing substitute widgets or changing UI implementation."
],
"production_changes_required": false,
"live_writes_or_native_execution": false
}