Files
EscapistsReintroduced/docs/discovery-map-usability.md
T

3.2 KiB
Raw Blame History

Discovery markers during ordinary play

ERR_DiscoveryMap.c now creates successor-owned objective markers with their label already set, refreshes the existing native text widget when knowledge changes, and prevents native annotation editing/dragging/deletion from altering objective facts. Discovery knowledge and location coordinates remain server-owned; local marker presentation adds no synchronization or mission progress authority.

The installed native implementation establishes the defects:

  • SCR_MapMarkerManagerComponent.InsertStaticMarker:169–175 assigns a local player owner and synchronously calls OnCreateMarker.
  • SCR_MapMarkerBase.SetCustomText:198–201 changes only stored data. OnCreateMarker:344–378 initializes a widget from that data; OnUpdate:409–431 updates position, not label text. Previously a map already open during discovery could show a blank newly-created marker or retain Unknown location after identification until reopening.
  • SCR_MapMarkersUI.IsOwnedMarker:114–123 controls editing and dragging at lines 1080,1287,1303. Its deletion entry and quickbind check CanBeRemovedByOwner at lines947,1049. Previously objective markers passed all these native checks, so a player could remove a discovery marker permanently or move it to a false coordinate; the successor's cached knowledge prevented restoration.

The new ERR_DiscoveryMarker subclass changes only these authored local markers. It clears the insertion-assigned owner at the native creation boundary and marks itself nonremovable. Its label is scenario-authored rather than a player annotation, so its own creation and label updates use the native synchronous text path; unrelated player marker filtering and behavior remain unchanged. Label updates while closed retain model data for native recreation without creating duplicate markers.

ERR_NativeDiscoveryMapProbe.Run() is an opt-in WORKBENCH check, to invoke once after a real local fixture participant and native marker manager exist. It creates two owned hidden native marker widgets: the unchanged vanilla marker demonstrates the stale text and user-annotation eligibility; the successor marker demonstrates immediate label refresh and protected ownership. It then detaches/recreates its own widget and checks retained text and exact marker-count cleanup. No mission locations, discovery state, inventories, map menus or player input are altered. Invoke Stop() from fixture cleanup if interrupted. The probe has not been run by this agent; native compilation and the actual result remain pending centrally. python3 tools/check.py passed after these changes.

The audit also inspected native prison gate inheritance/context, stock SCR_OpenStorageAction, radio tuning phase/knowledge checks and native helicopter/result presentation. Source alone does not establish held-input reachability, collision clearance while walking through the gate, dragging stock in a real inventory window or manual boarding/flying. These remain ordinary-play tests; direct completion fixtures cannot substitute for them. A separate inherited-gate destruction/progression vulnerability was reported for follow-up, without changing gate health in this marker patch.