Files
EscapistsReintroduced/docs/objective-map-presentation.md
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

4.1 KiB

Authored objective map presentation

Discovered sites and recovered mine warnings use their own map UI elements. They no longer enter the native player-annotation registry, whose user-content filtering also applies to static markers. Normal annotations and their restrictions are unchanged.

The objective icons now use the owned UI/Textures/ERR/SiteMarkers.imageset atlas: violet circular backgrounds with black symbols. The icon widget uses white tint so the texture keeps its colours. The existing 36-pixel footprint, labels and discovery restrictions remain unchanged. Artwork and a labelled preview are in art/map-markers.

ERR_DiscoveryMarker retains the existing disclosed position/icon/text API. Rough site and mine positions remain stable 500 m grid centers. ERR_ObjectiveMapPresentation renders only those disclosed coordinates and owns its widget plus open/close/pan/zoom subscriptions. Stop and location deletion remove that presentation. Updating a clue changes the existing widget; reopening or replacing the map recreates it for the current map/configuration/canvas/container.

The standard map uses a sibling of the native UIIconsContainer under its existing MapFrame. Native faction/task refresh can clear its own icons without removing objectives. The shared map has an authored ERR_ObjectiveOverlay frame inside RTTexture0. Canvas-to-parent screen offsets and DPI conversion position the icon; viewport culling uses current projected pixels. Cursor input is ignored by the objective layout.

The opt-in Workbench objective-map fixture requires Core and one round. It opens the real native map menu through its API, then the shared-map root, supplies synthetic already-disclosed marker data, and checks rough/exact updates, pan/culling, asynchronous menu close/reopen, reused configuration with a new root, and teardown. It does not discover a mission location, move a player, alter inventory, simulate user input or change annotation restrictions. Its menu-close request waits for the native next-update callback. Six fixed capture holds permit a read-only observer to inspect the exact private test window.

System.MakeScreenshot captures from these runs showed only the world view and are not evidence of map UI rendering. UI qualification must refer to separately retained private-window screenshots and their process/display bindings. The shared fixture disables the render target and binds no physical model, so shared-root UI geometry does not establish visibility of the held texture or the normal 500 ms capture.

See the source-bound evidence and current status for completed checks. Manual map interaction, held-map capture, restricted-platform behavior, remote replication/JIP and multiplayer remain separate validation work. The previous packaged handoff remains unchanged until an explicit refresh.

Validation — 2 October 2026

All 283 registered regression programs pass. The final isolated map fixture completes 101 assertions and one completion with zero script/runtime failures; 16 engine errors remain. The normal escape route completes 63 assertions and one round with zero script/runtime failures; 13 engine errors remain. All sessions were hidden/muted with confirmed cleanup and unchanged inputs. See raw UI captures, preservation and exact limits.

Question-mark lookup correction (2026-10-12)

The question-mark atlas identifier is now quoted ("mark-question"), and the icon generator quotes image identifiers. The objective widget now uses the native image-load result: failed loads hide the untextured rectangle and remain eligible for retry on the next refresh. Successful loads retain the existing cache.

Targeted map-element, presentation and native-fixture policy tests pass. The private Workbench attempt stopped before launch because installed dependency 595F2BF2F44836FB no longer matches its recorded manifest; native rendering remains unverified. The broader repository check stops at the unrelated civilian-traffic ServerTick assertion.