Decision & Baseline Lock PASS 2026-09-06
เก็บ evidence, approve visual direction, ระบุ TBD blockers และ freeze migration targets.
Exit complete: asset backup/redirect strategy และ acceptance matrix reviewed; known Quick Slot drag gap routed to G3.แผน implement แบบละเอียดสำหรับเปลี่ยน UI ปัจจุบันไปสู่ Hybrid CommonUI + UMG ตาม FEAT-HUD-UI โดยแยก verified baseline, target architecture, C++ work, user-only Widget Blueprint work, dependency gates, migration, testing และหลักฐานที่ต้องมีเพื่อผ่านแต่ละ milestone
Production schedule — 2026-09-13: PIPE-ROADMAP now defines 32 focused phases (P00–P31). Phase 0/1/2/3 references retained in this document are legacy scope bands, not the new phase numbers. The owner confirmed limited-area core-loop proof before full-map expansion; see the roadmap for dependencies, audited status and remaining work.
UI ปัจจุบันเป็น UMG widgets ที่ถูกเปิดโดย GameInstance subsystems แยกกันและยังไม่มี screen stack กลาง ขณะที่ target design ต้องรองรับ menu navigation, modal priority, controller focus, dynamic glyphs, multiplayer input blocking, SP pause, localization และทุกระบบที่ยังพัฒนาไม่ครบ แผนนี้จึงสร้าง foundation ก่อน แล้วค่อยย้าย screen แบบ vertical slices โดยไม่ตัดระบบเดิมพร้อมกันทั้งหมด
| Area | Verified current state | Target / consequence |
|---|---|---|
| Dependencies | Implemented and owner-verified for G1: CommonUI is enabled; CommonUI/CommonInput are module dependencies; UCommonGameViewportClient is configured. | The owner completed the configured viewport and local-player PIE checks on 2026-09-07. |
| Widget spawning | Implemented and owner-verified for G1: ULambeerUIManagerSubsystem owns the root, layers, blocking input and compatibility presentation. The HUD, inventory and character-creation subsystems route through it. WBP_UIRoot exists with the verified four-layer hierarchy. | The owner reported the G1 runtime creation, layer, focus, input restoration and pause matrix passing on 2026-09-07. |
| HUD | G3 PASS 2026-09-10: After owner Editor reopen, Unreal MCP compiled/saved WBP_HUDRoot with StatusBars, Compass, PromptHost, BloodOverlay, Text_Weight, ScreenEffects, Reticle, Minimap, ContextStatusList, Hands and QuickSlots. Child assets: WBP_Hands, WBP_QuickSlots, WBP_Reticle, WBP_Minimap, WBP_ContextStatusList, WBP_ScreenEffects. WBP_StatusBars has eight bars. WBP_HUD is preserved as fallback; HitMarker was removed from that asset. MCP GetWidgets on WBP_HUDRoot shows no empty BindWidget holes and no HitMarker. Owner reported eight GAS-colored bars, UI_G3GiveBackWeapons, ADS-hidden reticle, no HitMarker, nearby 2 m / LOS blood, low-health 30/20/10 edges, rain-lens droplets, and prompt quantity/denied on 2026-09-10. | Passive HUD remains UMG and updates from ULambeerHUDAdapter snapshots. Skeletal L1810, magazine-as-item and material wet-look are G3.2. Rain VFX is out of G3. HOLD text waits for an interactable with duration > 0. |
| Hit feedback | C++ HitMarker API is gone. Unreal MCP removed the HitMarker widget from WBP_HUD. After Editor reopen, WBP_HUDRoot has no HitMarker bind. A repository search of Source/Lambeer finds no hit/headshot/kill marker presentation path. Owner reported no HitMarker in dedicated-server PIE on 2026-09-10. | No further G3 hit-marker presentation work. |
| Survival | GAS attributes Energy/Sleep/Immunity exist with Init 100 / Max 100 and session replication. The server survival tick applies approved DA_SurvivalTuning drain/regen. Jog drains 1 Energy every 5 seconds; sprint (Run) drains 1 Energy every 1 second. Sleeping dims the screen slightly (alpha 0.22). Owner reported bed sleep and that dim passed in PIE on 2026-09-09. Status bars bind from adapter delegates rather than Tick polling of gameplay values. | Do not invent unapproved rates or save-format values. UI must not synthesize missing backends. |
| Inventory | Use-quick assignment no longer requires bUsableFromQuickSlot; possessed items including held stacks can bind to HUD slots 3–0. HUD display uses 10 slots with 1–2 reserved for Back Weapon. HeldHand ↔ UseQuick pairing is implemented. G4 UI-CORE-001 owner-reported pass 2026-09-12: activatable inventory; Tab opens and closes without crash; Escape/Close still work. G4 UI-CORE-002 owner-reported pass 2026-09-11 commands and 2026-09-12 worn-slot/Tab retest: merge/split/drop/sort/search/Use/Equip/pickup routing, Worn row, and sandbox clothing pickups. The owner-approved presentation and side-by-side loot layout retain UI-CORE-003 and move to G4.2. | G4.2 implementation in progress 2026-09-13: Unreal MCP imported /Game/Lambeer/UI/Inventory/Textures/T_UI_Inventory_Panel_9Slice, T_UI_Inventory_Slot_9Slice and T_UI_Inventory_FocusCorners. UE 5.8 has no TC_UserInterface2D; these textures use the same verified UI mapping as G2 icons: TC_EditorIcon, TEXTUREGROUP_UI, TMGS_NoMipmaps, Never Stream, Clamp, sRGB. Designer WBP_Inventory is Safe Zone → header → 36/64 split → Q1–Q0 → action hints, with Worn on Box_WornSlots above Scroll_Containers and duplicate BackSlots collapsed. /Game/Lambeer/UI/Inventory/WBP_ContainerTransfer is parented to ULambeerContainerTransferWidget. Unreal MCP bound designer Transfer_Target in WBP_Inventory and compiled/saved the inventory widgets against the rebuilt Editor. Owner PIE 2026-09-13 showed missing inventory string-table keys, then later the 36/64 hierarchy with gray engine buttons and overlapping Worn labels (not a chrome pass). 28 Inventory.* keys are saved; designer slot/panel chrome was written and widgets compiled/saved. Owner PIE retest after C++ rebuild is not recorded. The concept PNG remains design reference only. Character capture remains a placeholder. G4 UI-CORE-004 owner-reported pass 2026-09-13: world map screen, local category filters, pan/zoom/center, server-validated shared ping, and temporary map image T_WorldMap_Temporary (1024×576, not geographically registered). Unreal MCP created/compiled/saved /Game/Lambeer/UI/Map/WBP_WorldMap after the owner Editor reopen (parent ULambeerMapScreen; empty designer tree; C++ fallback layout still builds at runtime). Owner reported missing icons after UI_G3AddMarker Death, then that the full-map death diamond was still missing and that the minimap must show the same image with a smaller center pip. Owner later reported the minimap image rotating with the camera and the full-map death diamond following the pawn. Source now uses a frozen 50 m fallback while the map is open, filled diamonds, a world-XY chevron, a north-up minimap image, and an 8 px player pip. Owner-reported pass 2026-09-12 for that north-up / frozen-death retest. Owner-reported pass 2026-09-13 for pan/zoom/center, shared ping, filter toggles and map↔inventory Tab switching. Canvas clips to bounds so zoomed paint stays inside the map panel. Owner-reported pass 2026-09-13 for that zoom clip retest. G4 UI-CORE-005 owner-reported pass 2026-09-13. G4 UI-CORE-006 owner-reported pass 2026-09-13: death/respawn screen, Last Bed after Sleep, and Fresh Spawn to the four sandbox towns. Immediate-respawn close already passed 2026-09-12. Sandbox towns are not production geography. G4 UI-CORE-007 owner-reported dedicated-server pause 2026-09-12 and standalone PAUSED 2026-09-13. G4 UI-CORE-008 owner-reported pass 2026-09-13. |
| Handedness | ELambeerItemHandedness defaults to OneHanded. Held-item placement rejects two-hand occupancy when the other hand is filled. Per-item TwoHanded tagging is still user asset work. | Author TwoHanded on real item Data Assets; Crowbar/Pistol stubs stay OneHanded until tagged. |
| Interaction | FInteractionPromptState is emitted to the HUD adapter. WBP_HUDRoot owns PromptHost and projects/clamps in C++. Denied candidates can still focus for a denied prompt. Legacy prompt widget spawn is skipped when the HUD PromptHost exists. Quantity uses pickup stack count; denied uses generic Cannot interact; hold text requires GetInteractHoldDuration > 0. Owner reported prompt quantity/denied on 2026-09-10. | No G3 debug hold fixture. HOLD presentation waits for a real hold action. |
| Tests | Source/Lambeer/Tests/LambeerHUDContractTests.cpp covers reserved slots, status sort, compass offset and WorldYawToHudYaw (look-right from north is HUD east / screen-right), observation invalidation, low-health tiers, overlay alpha, two-hand lock helper, reticle mapping, firearm inspection/blood-distance rules, skeletal mesh resolve, magazine-as-item rules, inventory activatable parent, inventory command helpers (ExpectedItemId match, sort compare, auto-equip eligibility, split-half quantity, merge-to-MaxStack), G4.2 Worn presentation order plus slot size / label size / 36+64 fill tokens, map view helpers, pause session rules, pause activatable parent, and settings persist/confirm rules plus settings activatable parent. Inventory Search assertions were removed with the feature on 2026-09-14. Headless non-PIE Lambeer.HUD passed 24/24 on 2026-09-14 after the look-right E/W follow-through (report: Saved/Automation/CompassEWFix/index.json). Source/Lambeer/Tests/LambeerPersistenceContractTests.cpp covers P07 schema, codec, migrate/refuse, checksum/rollback and world-index file rules; headless Lambeer.Persistence passed 6/6. | Owner runs Widget/PIE validation; controller coverage remains deferred until hardware. P07 restart/rejoin PIE remains owner-only. |
| Character creation | [OWNER-REPORTED VISUAL/PERSISTENCE PASS 2026-09-16] Native creation subsystem/widget and WBP_CharacterCreation use the owner-approved street box blockout via a client-only streamed stage and cosmetic MetaHuman preview. Owner reported the remaining visual checks and remaining persistence/restart/rejoin checks passed. [OWNER-REPORTED DEDICATED FOLLOW-CAMERA PASS 2026-09-16] Extra dedicated first-time creation now restores the hip follow camera behind the pawn; returning clients that skip creation do not cover this. Barber remains on its portrait path. See canonical evidence. Final environment assets and art lighting/time of day remain later content. | G5 stays open for Steam/Feedback/production-map work. Do not reopen this visual/persistence, follow-camera, or Null/LAN join slice from that remainder. |
| Glyphs | Xbox and PlayStation imported assets exist under Content/Lambeer/UI/ControllerGlyphs/. | Map verified assets through CommonInput controller data; do not rename until package license/source verification. |
| Persistence | P07 owner-reported pass 2026-09-14: USaveSubsystem installs USQLiteSaveBackend per opened world (Saved/Lambeer/Worlds/<id>/world.db). Create/list/rename/delete/open, missing/corrupt/incompatible probes, 30-second dirty flush, critical flushes and remembered-world pointer in ULambeerUserSettings are implemented. Headless Lambeer.Persistence passed 6/6. UE 5.8 SQLiteCore omits WAL; committed transactions are the crash-safety surface. Owner Dedicated Server + two Preview restart/rejoin restored player/world state, collected map pickups and dead-save spawn select. P08 owner-reported pass 2026-09-16: Main Menu/Continue/Save World Select, character-entry restore, spawn recovery and Pause Save/Exit persistence passed. Dedicated Null/LAN advertise, Pause disconnect and Server Browser join/rejoin are implemented; owner reported Refresh/Join 2026-09-16. Steam/production-map work stays blocked. | UI calls session/save services; it never invents durable state. Deferred production destination stays UI-FE-008/ROAD-P08-04. |
TBD-HUD-UI-001, TBD-HUD-UI-002, and TBD-HUD-UI-008, approved the migration/rollback strategy, and supplied the interaction/input baseline below. The inability to drag an item into a Quick Slot is a captured legacy gap assigned to G3, not a G0 blocker.| Task | Verified evidence (2026-09-06) | Required close action | State |
|---|---|---|---|
UI-PLN-001 | [CONFIRMED] Back Weapon 1–2 exclusively reserve numbered slots 1–2. Other items cannot be bound to those two slots; no displaced manual binding or restore behavior exists. | Implementation tests must reject non-Back-Weapon assignment to reserved indices 0–1 and verify Back Weapon removal leaves the reserved slot empty. | Complete |
UI-PLN-002 | [CONFIRMED] Owner approved the documented palette, layouts, and exactly 64 SVG solid/silhouette icons on 2026-09-06. | Use the approved sources for G2 import; retain source/license provenance before shipping. | Complete |
UI-PLN-003 | [CONFIRMED] Use Google Sans from RawResource/Fonts/Google_Sans/. Sixteen TTF files were found and each contains 87 Thai-block codepoints including the basic Thai set. Font metadata and the official source repository identify SIL Open Font License 1.1 without Reserved Font Names; OFL.txt is retained beside the fonts. | Target /Game/Lambeer/UI/Common/Fonts/FF_UI_Primary; Regular is the default face with Medium/SemiBold/Bold variants. Google Sans supplies English and Thai glyphs; verify shaping, line breaks and tabular figures after user import. | Complete |
UI-PLN-004 | Unreal MCP asset/config/reference audit completed. Development Game target compiled and linked successfully; log: Saved/Baselines/HUDUI_G0_GameBuild.log. The initial Editor build was blocked at final DLL link by the running Editor (LNK1104); after closing the lock, the owner reported a successful clean Editor build on 2026-09-06 and the rebuilt Binaries/Win64/UnrealEditor-Lambeer.dll was verified on disk. | Baseline compile evidence is complete. The existing warning that HairStrandsCore is used without declaring the HairStrands plugin remains recorded for G1/project cleanup. | Complete |
UI-PLN-005 | User supplied legacy HUD, inventory, and interaction-prompt screenshots. The owner reported that Wood can be dragged among Hand 1, Hand 2, and Pocket, while dragging Wood into a Quick Slot does not work. Unreal MCP logs corroborate two user-run L_Dev_Sandbox PIE sessions using a dedicated-server world plus two clients; all three worlds tore down after each session. No agent-run PIE claim is made. | Baseline is complete for migration comparison. Preserve the Quick Slot drag failure as a known legacy gap and verify its correction under UI-HUD-010 in G3; controller, denied/out-of-range, and hold behavior remain unverified rather than implicitly passed. | Complete |
| Asset | Hard package dependencies | Registry referencers | Migration disposition |
|---|---|---|---|
/Game/Lambeer/UI/Common/WBP_InteractionPrompt | SlateCore, UMG, UMGEditor | /Game/Lambeer/Characters/Player/Blueprints/BP_PlayerCharacter | Preserve path until the player Blueprint is manually migrated and verified. |
/Game/Lambeer/UI/HUD/WBP_HUD | WBP_Compass, WBP_StatusBars, Lambeer/UMG modules | No registry referencer; loaded by config and C++ fallback soft class path. | Preserve as compatibility HUD until the new root passes cook and user PIE. |
/Game/Lambeer/UI/HUD/WBP_Compass | Lambeer/UMG modules | WBP_HUD | Migrate behind the new HUD adapter before any move/rename. |
/Game/Lambeer/UI/HUD/WBP_StatusBars | Lambeer/UMG modules | WBP_HUD | Migrate behind event-driven state before any move/rename. |
/Game/Lambeer/UI/Inventory/WBP_Inventory | WBP_InventorySlot, Lambeer/UMG modules | No registry referencer; loaded by config and C++ fallback soft class path. | Preserve as compatibility screen until CommonUI activation passes user PIE. |
/Game/Lambeer/UI/Inventory/WBP_InventoryContainer | Lambeer/UMG modules | No registry referencer reported. | Preserve; runtime creation is a code/config path not represented as a hard package reference. |
/Game/Lambeer/UI/Inventory/WBP_InventorySlot | Lambeer/UMG modules | WBP_Inventory | Preserve through inventory-screen migration. |
Config snapshot: DefaultGame.ini points HUD and inventory soft classes to WBP_HUD and WBP_Inventory. Lambeer.Build.cs includes UMG/Slate/SlateCore but not CommonUI/CommonInput, and Lambeer.uproject does not enable CommonUI. Xbox and PlayStation glyph assets exist under /Game/Lambeer/UI/ControllerGlyphs/.
WBP_HUD, WBP_Inventory, or WBP_InteractionPrompt during G1–G2.
E 0, and 0 / 10 kg. The capture does not show an interaction prompt or prove behavior across other resolutions.

E prompt is visible near screen center while the player faces a cube. This static capture proves prompt visibility and placement only; it does not prove activation, denied/out-of-range, hold, or controller behavior.Unreal MCP log corroboration: user-run New Editor Window PIE started on /Game/Lambeer/World/Maps/L_Dev_Sandbox/L_Dev_Sandbox at 20:12 and 20:13 local time with one dedicated-server world and two client worlds. The logs prove session topology/start/teardown only, not visual or interaction correctness.
| Area | Minimum capture | G0 record (2026-09-06) |
|---|---|---|
| HUD | Spawn HUD; health/stamina/hunger/thirst/temperature, compass, weight, blood overlay, and interaction prompt visible/hidden transitions. | Captured: five stats, compass, weight, and visible E prompt. Blood overlay and prompt hidden transition are not shown. |
| Inventory | Open/close; mouse and keyboard focus; drag/click assignment; both hands; Back Weapon 1–2; all eight current quick slots; container transfer/drop. | Captured/reported: inventory layout; Wood drag among Hand 1, Hand 2, and Pocket succeeds. Known gap: drag into Quick Slot fails. Controller/focus restoration is unverified. |
| Interaction | Valid target, no target, denied/out-of-range, prompt placement, hold behavior if present, and return of game input. | Captured: visible E prompt while facing a cube. Activation, no-target transition, denied/out-of-range, hold, and controller behavior are unverified. |
| Session | Single-player baseline and current multiplayer mode if available; confirm whether opening inventory pauses the world. | Corroborated by Unreal MCP: dedicated server plus two clients in two user-run sessions. Pause and authority behavior are unverified. |
| Scope | Evidence | State |
|---|---|---|
UI-FND-001 | CommonUI enabled; CommonUI/CommonInput linked. The previously undeclared HairStrands plugin dependency is now explicit. Development Editor and Game targets compiled successfully on 2026-09-06. | Complete |
UI-FND-002–004 | UCommonGameViewportClient is configured; ULambeerUIManagerSubsystem and ULambeerUIRootWidget compile. Unreal MCP loaded all three runtime classes on UE 5.8.2 and verified the root hierarchy in paint order: HUD, Screen, Modal, Toast. The owner verified runtime creation and layer behavior in the requested PIE matrix. | Complete |
UI-FND-006–008 | ULambeerActivatableWidget, typed input mode, Back/initial-focus contract, tagged Screen/Modal push-pop, duplicate-modal rejection, cursor/game-input restoration and standalone-only pause request compile. DT_UI_CommonActions maps Accept to Enter/Space/Gamepad Face Button Bottom and Back to Escape/Gamepad Face Button Right. BP_LambeerCommonUIInputData supplies those rows through CommonInputSettings.InputData with Enhanced Input support intentionally disabled for this legacy CommonUI route. The owner verified focus, modal-first Back order, final-layer input restoration and the SP/MP pause policy in PIE. | Complete |
UI-FND-009 | HUD, inventory and character-creation subsystems delegate presentation/dismissal to the LocalPlayer UI manager. Repository search finds no direct viewport or input-mode ownership in those three facades. Existing non-activatable widgets retain a manager-owned fallback during migration, and the owner reported the requested G1 regression checks passing. | Complete |
| Cook | Windows iterative cook completed with 934 packages saved, 0 errors and one Model Context Protocol EULA notice. No PIE result is inferred from cook. | Pass |
| Unreal MCP audit | Verified UE 5.8.2, CommonUI viewport class and native UI classes. On 2026-09-07 Unreal MCP corrected and compiled WBP_UIRoot, completed WBP_G1_DummyScreen, created WBP_G1_DummyModal, added both initial-focus overrides, then created and verified DT_UI_CommonActions plus BP_LambeerCommonUIInputData. All affected assets were saved. No computer-use or PIE automation was used. | Complete |
UI-FND-005)/Game/Lambeer/UI/HUD/WBP_UIRoot with parent class ULambeerUIRootWidget.Layer_GameHUD as Overlay; Layer_Screens as CommonActivatableWidgetStack; Layer_Modals as CommonActivatableWidgetStack; Layer_Toast as Overlay. Names and types must match exactly.UI-FND-010)/Game/Lambeer/UI/Tests/WBP_G1_DummyScreen and WBP_G1_DummyModal are parented to ULambeerActivatableWidget, contain two focusable buttons, and implement GetInitialFocusTarget. Both compile and are saved./Game/Lambeer/UI/Common/Input/DT_UI_CommonActions and BP_LambeerCommonUIInputData provide the global CommonUI Accept/Back actions; Config/DefaultGame.ini selects the generated Input Data class.UI_G1PushTestWidget /Game/Lambeer/UI/Tests/WBP_G1_DummyScreen.WBP_G1_DummyScreen_C false, then UI_G1PushTestWidget /Game/Lambeer/UI/Tests/WBP_G1_DummyModal.WBP_G1_DummyModal_C true. These development-only commands avoid temporary level/PlayerController Blueprint wiring.UI_G1SetPauseRequested true, verify only standalone pauses, then run UI_G1SetPauseRequested false. Multiplayer must never pause the server. Stop PIE and report pass/fail per device plus any log warnings or screenshots.Optional recovery commands: UI_G1PopTestLayer true pops the modal; UI_G1PopTestLayer false pops the screen. G1 is closed from the owner-reported results above; these commands remain available for future regression diagnosis.
AddToPassiveLayer creating the HUD Overlay Slot with UE defaults HAlign_Left / VAlign_Top, which constrained the HUD Canvas to desired size instead of the available safe area. The runtime HUD Overlay Slot now uses Fill/Fill before applying presentation settings. Owner confirmed HUDScale after that fix, then confirmed SafeZoneScale and TextScale. Very large HUD scales can still exceed the available space; no approved maximum scale or overlap policy is established. Safe Zone Scale multiplies platform-provided safe margins and is visually unchanged on a normal Windows display until a debug safe zone is enabled.BaseGame.ini already supplies %GAMEDIR%Content/Localization/Game. Editor preview requires switching both culture and game-localization preview resources via UI_G2SetCulture th/UI_G2SetCulture en. Missing-glyph boxes in the String Table Editor use Slate's default Editor font, not FF_UI_Primary; the project module adds the Thai Unicode range to the shared Editor font for the current session only. FF_UI_Primary also uses the four Google Sans faces as its explicit fallback typeface. Owner confirmed Thai rendering and English/Thai Gallery sample switching after those corrections.| Task | Evidence | State |
|---|---|---|
UI-DSN-001 | Exactly 64 approved SVG sources were rasterized at 256×256 because UE Texture Factory does not accept SVG. Unreal MCP imported /Game/Lambeer/UI/Common/Icons/T_UI_*, then verified Clamp, NoMipmaps, TC_EditorIcon, TEXTUREGROUP_UI, sRGB, non-streaming and bilinear settings. Each asset retains its source-SVG metadata. | Complete |
UI-DSN-002 | Eight compiled/saved CommonUI style classes cover Body/Heading/Caption and Primary/Secondary/Danger/Tab/ListRow. After the owner reported boxed Thai glyphs, Unreal MCP changed all 17 gallery TextBlocks from Roboto to FF_UI_Primary while preserving face/size and disabling Simple Text Mode. Owner PIE step 5.2 passed on 2026-09-08. | Complete; 5.2 passed |
UI-DSN-003 | BP_UI_ControllerData_Xbox and BP_UI_ControllerData_PlayStation each contain 16 verified key-brush mappings. DefaultGame.ini registers both classes and Common action rows include Accept, Back, Context, TabLeft and TabRight. | Deferred: physical hardware unavailable |
UI-DSN-004 | ULambeerUIManagerSubsystem binds CommonInput's native input-method event, broadcasts input type + gamepad name, preserves the focused Slate widget and requests focus refresh only when focus is absent. Development Game build passed. | Deferred: Xbox/PlayStation runtime evidence |
UI-DSN-005 | The owner imported Regular, Medium, SemiBold and Bold as Font Face assets and created runtime composite font FF_UI_Primary. Unreal MCP verified all four face references, Runtime cache type, assignments and 87 Thai-range codepoints in every source TTF. The same four Google Sans faces are also the composite font's explicit fallback typeface so weight names remain intact. Owner PIE step 5.2 passed, then the owner confirmed Thai Gallery culture rendering on 2026-09-08. | Complete; 5.2 and Thai culture PASS |
UI-DSN-006 | The project locks the engine ShortestSide DPI curve and WBP_UIRoot wraps HUD/Toast in Safe Zones. HUD Scale applies only to point-anchored HUD children and leaves stretched overlays full-screen. The current HitMarker, Text_Weight, StatusBars and Compass persist Render Transform Pivot values equal to their Canvas Slot Alignment. Text Scale changes actual TextBlock font sizes so layout reflows. Windows Safe Zone testing uses r.DebugSafeZone.TitleRatio below 1.0 with r.DebugSafeZone.Mode 1. Owner confirmed HUDScale, SafeZoneScale and TextScale on 2026-09-08. | Complete; HUDScale, SafeZoneScale, TextScale PASS |
UI-DSN-007 | ST_UI_Common_EN and ST_UI_Common_TH contain the same 24 keys; English/Thai localization reports are 175/175 and Game.locres is compiled. The gallery's four culture samples bind to ST_UI_Common_EN keys (Input.DeviceChanged, Modal.ConfirmTitle, Error.Generic, Warning.WorldContinues) and resolve Thai through Game.locres. Owner confirmed English/Thai switching with UI_G2SetCulture on 2026-09-08. Remaining Gallery development labels are not covered by these four bindings. | Complete; 5.7 Thai PASS |
WBP_UIRoot and WBP_G2_ComponentGallery were required before the scale and culture helpers could be verified in PIE./Game/Lambeer/UI/Common/Fonts/; runtime composite font FF_UI_Primary contains the four named faces and OFL.txt remains in source control.FF_UI_Primary was assigned to all 17 gallery TextBlocks.UI_G2SetPresentationScales HUDScale TextScale SafeZoneScale. Increased HUD Scale must grow inward: top-left grows down/right, top-right down/left, bottom-left up/right and bottom-right up/left. Windows Safe Zone comparison uses r.DebugSafeZone.TitleRatio 0.90 and r.DebugSafeZone.Mode 1 between scale 0.0 and 1.0, then restore TitleRatio 1.0 and Mode 0. Full-bleed visuals are not the Safe Zone observation target. No approved maximum HUD scale or overlap policy is established.UI_G2SetCulture th and UI_G2SetCulture en switch the four bound Gallery samples. Remaining Gallery development labels are not covered by those String Table bindings. The widget references ST_UI_Common_EN; Thai is resolved from Game.locres.Lambeer.HUD tests in the loaded Editor: six passed; StatusSort failed because its assertion expected one hidden ordinary row although the sole visible row was occupied by a critical status, leaving two hidden ordinary rows. The assertion is corrected in source and covers zero/one/two/three-row budgets. Owner subsequently compiled/reopened Editor; MCP reran all seven tests: 7/7 Success, zero errors and warnings. This verifies the prior HUD correction, before the new melee-classification source change. Source fixes also advance blood/wet visual timelines without rebuilding/broadcasting all gameplay snapshots each frame, prevent the legacy blood image from drawing over the new effects widget, remove the overflow click delegate on destruction, and keep a visible collapse symbol after expanding statuses. Lambeer Win64 Development build succeeded. The prior Editor build block was resolved by the owner compiling/reopening Editor; the new melee-classification change still requires a later Editor rebuild. No new PIE result is asserted.bMeleeWeapon (default false, explicit content classification). HUD adapter checks both held stacks on existing held-item events and selects Melee through the existing reticle priority function. No firearm/tool is automatically classified by name or category. Source is prepared; Editor property loading and authoring confirmed melee assets remain pending the next rebuild. The chamber/magazine production backend is not implemented by the debug observer.Item.Weapon.L1810, magazine capacity 18, new instances start with a full magazine and an empty chamber. Instance ChamberCount/MagazineCount live on FInventoryStack. MagazineCapacity > 0 marks a firearm. Field checks now run a server channel: Shift+R 3 s per held firearm, Alt+R 5 s per held firearm, right then left, apply HUD knowledge only when the whole sequence finishes. Move, damage, death or held-item identity change discards the sequence. MCP created /Game/Lambeer/Core/Data/Items/DA_Item_L1810. Weight 1.2 kg, durability 100 and throw 0.6 s / 900 cm/s are copied from DA_Item_Pistol, not a measured L1810 mass. World/held meshes remain the Engine cube because SKM_L1810 is a skeletal mesh and the item visual pipeline is StaticMesh-only. Skeletal visuals and magazine-as-item install are G3.2. Owner reported inspection working on 2026-09-10.UWidget::Slot hide fix. Owner then reported “ผ่านแล้ว”. Scoped result: L_Dev_Sandbox bed sleep, slight Sleeping screen dim, and the Jog/sprint Energy drain used to make that test visible. Earlier the same day the owner reported the other throw/sledgehammer checks on that map passed before bed sleep was unblocked. Earlier MCP ran 11 Lambeer.HUD tests in the loaded Editor: 11 succeeded, 0 failed, 0 test warnings. That includes EditableSurvivalTuning, ThrowLifecycle, SurvivalRates, WetnessRates and the prior HUD tests. This does not close G3.DA_Item_* assets under /Game/Lambeer/Core/Data/Items have throwable enabled and approved windup/speed defaults. All nine still use the Engine cube for world/held meshes, and all have melee classification disabled. No production model hookup is implied. Owner chose a new Sledgehammer item instead of changing Crowbar. MCP created and verified DA_Item_Sledgehammer plus BP_Pickup_Sledgehammer_Test; see canonical item tuning. /Game/Lambeer/Interaction/BP_Bed_Test uses the native bed backend and a cube placeholder mesh. MCP placed both test actors in L_Dev_Sandbox near PlayerStart (pickup about 200 cm forward, bed about 250 cm to the right) and saved the map. The placed pickup instance uses the Sledgehammer static mesh at imported scale 1, Movable. Owner reported the throw/sledgehammer checks on that map passed on 2026-09-09, then reported bed sleep and the Sleeping dim passed after the later Energy/dim work. Final bed art and sleeping animation are not implemented./Game/Lambeer/Core/Data/Survival/DA_SurvivalTuning (ULambeerSurvivalTuning). Owner Energy drain is Jog −1 / 5s (−12/min) and sprint −1 / 1s (−60/min). There is no PlayerState Blueprint; BP_LambeerGameMode uses native ALambeerPlayerState. The Data Asset is assigned on Default__LambeerPlayerState:Survival.Tuning and the survival-component CDO. ConstructorHelpers loads the same path after Editor rebuild. Class defaults match the approved rates when Tuning is null.ApplyDamage notifies owning clients when the impact is within 2 m of the pawn view and a visibility trace to that view is clear. MCP created DA_Item_L1810 and placed RainShelter_G3Test (volume bounds X 200–600, Y −200–200, Z 200–600), visible roof RainShelterRoof_G3Test with tag RainShelter, and pickup Pickup_L1810_Test at about (200, −150, 260). Map save verified 2026-09-10: those actors are in saved L_Dev_Sandbox (is_dirty false). Owner later reported nearby blood, rain-lens droplets and shelter. G3 rain presentation is HUD droplets + UI_G3SetRain; rain VFX is out of G3. Material wet-look mapping is G3.2.Pickup_L1810_Test, Shift+R / Alt+R showed no ammo, and Lambeer.Damage 10 showed no blood. Source cause: hand cards hid chamber/magazine behind “Durability state only” because L1810 tracks durability; G3 does not require a separate magazine item. Lambeer.Damage from a client console did not deliver the blood overlay (Client RPC from the client is dropped). Fixes in source: firearm cards always show Chamber/Mag knowledge; L1810 remains a firearm if capacity was not saved on the DA; inspection prints a cyan on-screen status; Lambeer.Damage server-applies and notifies the local HUD. This does not close G3. Owner must rebuild Editor and re-run PIE.IMC_Default R + chord IA_Alt, remappable). Those extra binds are removed. Leftover Alt was being reported as handled UI input by CommonUI; ULambeerGameViewportClient now delivers modifier keys to gameplay the same way Shift already reached Enhanced Input. It is not a magazine-specific binding. Lambeer.Damage 10 still showed no tint: WBP_HUDRoot.BloodOverlay was collapsed whenever ScreenEffects existed, and WBP_ScreenEffects.Image_Blood is a NoImage brush so alpha tint draws nothing. HUD overlay paints again with the Engine white square; ScreenEffects blood uses the same fill; the adapter ticks the 2 s / 5 s fade. Self-damage still skips the visibility trace. This does not close G3.Lambeer.Damage 10 still doing nothing. Source then always starts the local overlay when the damaged actor is that client’s pawn (the 2 m / LOS rule remains for nearby hits only). Lambeer.Damage also calls the local notify after apply, and HUD BloodOverlay is raised above ScreenEffects. Later log diagnosis: the client console never executed the cheat; see command unrecognized and owner-reported pass.Command not recognized: Lambeer.Damage 10 and the same for LambeerDamage 10, while HUD had already spawned on BP_LambeerPlayerController. Engine AddCheats() without force skips clients because they have no AuthGameMode, so ULambeerCheatManager was never created on the window that accepted the console command. Overlay/RPC patches cannot run if the cheat never executes. Source now calls EnableCheats() from ReceivedPlayer in non-Shipping so the client Preview console can reach Lambeer.Damage.EnableCheats, the owner reported Lambeer.Damage 10 passed. Recorded pass scope: dedicated-server PIE with two client Preview windows; in-game console on a client window; self-damage cheat recognized; local blood overlay path. Not recorded: nearby (non-self) 2 m / LOS hits, low-health edge tiers, rain VFX, or G3 gate close. This is owner-reported runtime evidence, not agent-run PIE.L_Dev_Sandbox loaded; PIE was not running. The G3 sandbox actors are on disk (is_dirty false): RainShelter_G3Test, RainShelterRoof_G3Test (tag RainShelter), Pickup_L1810_Test, BP_Pickup_Sledgehammer_Test, BP_Bed_Test. WBP_HUDRoot still has twelve named widgets and no HitMarker. WBP_ScreenEffects.Image_Sleep was a BindWidget hole (C++ previously constructed it at runtime); Unreal MCP added the Image, compiled and saved the asset. Readback: collapsed, Engine white square, black alpha 0. DA_Item_L1810 still has capacity 18 and Engine cube meshes. DA_Item_Sledgehammer remains TwoHanded and melee. Find-assets for Niagara under /Game returned none. Automation Lambeer.HUD ran 13/13 Success, 0 errors, 0 warnings.UI_G3GiveBackWeapons and keys 1/2; ADS hides the reticle; no HitMarker; nearby 2 m / LOS blood overlay; low-health 30/20/10 edges; UI_G3SetRain lens droplets plus shelter. Owner decided G3 rain presentation stays HUD droplets + UI_G3SetRain; no rain VFX in this gate. Skeletal L1810 visuals, magazine-as-item install and material wet-look mapping move to G3.2.x10 result was supplied. HOLD text was not a G3 PIE target: no sandbox interactable returns GetInteractHoldDuration > 0, and the owner did not request a debug hold fixture. HOLD presentation waits for a real hold action. This closes G3.PromptHost already projects near the target. Quantity and denied use live interactables. Hold has no authored duration in this sandbox. Lambeer.SpawnPickup and Lambeer.GiveItem require a host pawn; a Dedicated Server client Preview prints needs host, and the Dedicated Server window usually has no pawn.
Pickup_L1810_Test or the sledgehammer. The prompt should read Pick up {name} plus x1. HUD appends xN whenever quantity is greater than 0; a qty-1 pickup must not invent a larger count. Quantity x10: start Listen Server PIE instead, then on the host window run Lambeer.SpawnPickup Item.Wood 10 and look at that cube for x10.CanInteract is true if any hand is empty or inventory CanFit. Typical spawn has no worn storage, so pockets cannot fit and the prompt should stay visible with the second line Cannot interact. Pressing E must not take it. Optional, same client: Lambeer.InteractDump should print can=no for that pickup. If pants/backpack are already equipped, leftover pickups still go to pockets; unequip that storage or fill on Listen Server (Lambeer.GiveItem is also host-only).GetInteractHoldDuration above zero. Bed, pickups and barber are tap actions. The HUD would append HOLD Ns only when an interactable returns a duration. Missing HOLD text on Sleep/Pick up is not a HUD bug. Owner closed G3 without a debug hold fixture; HOLD presentation waits for a real hold action.L_Dev_Sandbox already has BP_Bed_Test near PlayerStart. Press the same Interact key used for pickups (IA_Interact, E) while looking at the cube; standing still is not required to start sleep. The screen should dim slightly while Sleeping. Energy/Sleep should recover. Move after sleep has started, take damage or destroy the bed: recovery must stop and the dim must clear. The cube is a functional bed placeholder; final bed art and sleeping animation are not implemented. Pick up the placed Sledgehammer, confirm two-hand occupancy and the melee reticle, then throw it.Use the existing canonical feature decisions below; no gameplay tuning or approval state is inferred. Pending questions have been sent to the owner.
Backend source progress, 2026-09-10: server weather intensity, shelter queries, survival rates/hysteresis, body/lens wetness, held-item and worn-clothing rain/swim/dry, bed interaction and HUD survival delegates are added. ApplyDamage can drive the blood overlay. Owner reported Lambeer.Damage 10 on a dedicated-server client on 2026-09-10, then nearby 2 m / LOS hits, low-health edges, rain-lens shelter, and prompt quantity/denied the same day. L1810 instance ammo and timed field inspection are in source; owner reported that inspection working the same day. MCP verified the sandbox G3 actors are saved. Owner decided rain VFX is out of G3. Skeletal L1810, magazine-as-item and material wet-look are G3.2. G3 is closed.
DA_Item_L1810 / Item.Weapon.L1810, capacity 18. G3 new stacks used full mag / empty chamber; G3.2 new stacks spawn with no magazine. Timed inspection applies HUD knowledge only after the full sequence. Owner reported Shift+R / magazine inspection working on 2026-09-10. Debug UI_G3ObserveWeapon remains. G3 used Engine-cube world/held visuals; G3.2 assigned SKM_L1810 on 2026-09-11. Owner reported skeletal world/held/back visuals and magazine-as-item on 2026-09-11.Lambeer.Damage 10 on a dedicated-server client on 2026-09-10, then nearby 2 m / LOS hits and low-health 30/20/10 edges the same day. The confirmed 2-second hold / 5-second fade remains unchanged.L_Dev_Sandbox; map save verified 2026-09-10. Owner reported UI_G3SetRain lens droplets plus shelter on 2026-09-10. G3 rain presentation is HUD droplets + UI_G3SetRain only. Rain VFX is out of G3. Material wet-look mapping is G3.2.UI_G3SetRain. HOLD text waits for a real hold action; no G3 debug hold fixture. Xbox/PlayStation hardware checks remain deferred. G3.2 skeletal L1810 and magazine-as-item later passed owner PIE on 2026-09-11; wet-look remains deferred. That follow-through does not reopen this gate.Lambeer.Damage C++ change and reported that cheat passed. Later C++ still needs a closed-Editor LambeerEditor Win64 Development rebuild when Live Coding is active. PIE remains owner-only.UI_G3NotifyBlood, UI_G3NotifyWet 1, UI_G3PushStatus Bleeding 2 1: reported working.UI_G3AddMarker Death: later PIE reported working (compass/minimap diamonds).UI_G3GiveBackWeapons; ADS does not hide the center square reticle; UI_G3ObserveWeapon does not put an item in a hand; eight bars remain gray. Session tooling: docs/handoff-g3-hud.md. Owner later reported those HUD close items passed on 2026-09-10; see checklist 1–7.LambeerEditor Win64 Development, and reopen. Regression test source now checks ADS with interaction/combat readiness; execution remains unverified. Validation: Lambeer Win64 Development build succeeded after this fix pass; git diff --check passed; all 40 HTML documents passed the documentation validator with 0 errors/0 warnings. Game-target compilation does not verify the currently loaded Editor DLL or PIE behavior.| Task | Evidence | State |
|---|---|---|
UI-HUD-001 | FUIHUDSnapshot and ULambeerHUDAdapter rebuild from GAS/inventory/aim/prompt delegates. Compass/minimap NativeTick is heading-only; screen-effects NativeTick runs only while overlay alpha is live. Owner reported eight GAS-colored bars on 2026-09-10. | Complete |
UI-HUD-002 | Energy/Sleep/Immunity plus Max* attributes Init 100 / Max 100, session replicated. Server survival tick applies approved DA_SurvivalTuning drain/regen through instant SetByCaller GEs on Data.Energy/Data.Sleep/Data.Immunity. Jog is −1 Energy / 5s; sprint (Run) is −1 Energy / 1s. Owner reported bed sleep PIE on 2026-09-09 after that drain was visible. Persistence/save format was not invented. | Complete — G3 session attributes; persistence not invented |
UI-HUD-003 | Status bars consume snapshot delegates. MCP added Energy/Sleep/Immunity rows. C++ now also injects T_Ui_Stat_* icons for Health/Stamina/Hunger/Thirst/Temperature when those BindWidgets are missing. Numeric labels remain collapsed. HUD root requests an initial snapshot; adapter listens for possession changes, retries missing sources and binds a late/replaced PlayerState ASC even when the pawn is unchanged. Attribute delegates handle subsequent value/max replication, including initial zero values; no stat values are fabricated. Missing icons are inserted into the existing horizontal row before Slate construction, preserving SizeBox layout. Owner reported the eight bars no longer gray on 2026-09-10. | Complete |
UI-HUD-004 | C++ HitMarker API removed. MCP deleted the HitMarker widget from WBP_HUD. After Editor reopen, WBP_HUDRoot has no HitMarker bind. Source search has no presentation path. Owner reported no HitMarker in dedicated-server PIE on 2026-09-10. | Complete |
UI-HUD-005 | MCP created/compiled/saved /Game/Lambeer/UI/HUD/WBP_HUDRoot with viewport-edge StatusBars (top-left), Compass (top-center), PromptHost, BloodOverlay, Text_Weight, ScreenEffects (full screen), Reticle (center), Minimap (top-right), ContextStatusList (left below bars), Hands (bottom-left) and QuickSlots (bottom-center). Child WBPs: WBP_Hands, WBP_QuickSlots, WBP_Reticle, WBP_Minimap, WBP_ContextStatusList, WBP_ScreenEffects. MCP GetWidgets shows all BindWidget names bound. Owner-reported HUD close checklist 1–7 used this root. | Complete |
UI-HUD-006–008 | C++ widgets and matching WBPs compiled/saved. MCP GetWidgets on WBP_HUDRoot still shows StatusBars, Compass, PromptHost, BloodOverlay, Text_Weight, ScreenEffects, Reticle, Minimap, ContextStatusList, Hands and QuickSlots with no HitMarker. Status onset now stamps GetServerWorldTimeSeconds. Status list stays empty until gameplay/debug inject besides Energy/Sleep/Immunity/Wet from survival. Minimap is a heading disc plus shared markers. G3 used a direction ring because no radar radius was approved. G4 now scales marker distance with a 50 m implementation clamp (LambeerHUDPresentation::MinimapRangeCm), paints temporary T_WorldMap_Temporary north-up on the minimap disc, and uses an 8 px center pip plus a heading chevron; that is still not an approved radar range. Owner reported status injectors and marker diamonds on 2026-09-08 and the north-up / walk-only diamond retest on 2026-09-12. | Complete |
UI-HUD-009 | Handedness enum defaults OneHanded. Two-hand occupancy is enforced in UHeldItemComponent. DA_Item_Sledgehammer is TwoHanded; owner reported two-hand occupancy on 2026-09-09. Remaining production DA tagging is not a G3 HUD blocker. | Complete — C++ contract + sledgehammer |
UI-HUD-010 | HUD slots 1–0; 1–2 reserved for Back Weapon; 3–0 are eight use-quick. Runtime keys 1–0. Wood assignment no longer requires bUsableFromQuickSlot. Owner PIE confirmed Wood→3–0. Development-only server RPCs now support the owning dedicated-server client, preserve occupied back slots, and report grant/equip failures to that client. Mock holsterable Item.Weapon.MockBack plus UI_G3GiveBackWeapons and ULambeerBackWeaponVisualComponent were added so keys 1–2 can be tested without authored weapon assets. Owner reported UI_G3GiveBackWeapons and keys 1/2 on 2026-09-10. | Complete |
UI-HUD-011 | Reticle maps ADS Hidden > Interaction > Throw > Melee > Shoulder > Hip, matching FEAT-HUD-UI / AC-UI-003 (ADS hides all reticles). The reticle host also collapses in ADS; projected interaction prompts remain separate. Melee reads held-item classification. Throw windup feeds the existing Throw reticle priority. Owner reported ADS hides the reticle on 2026-09-10 and throw/sledgehammer melee on 2026-09-09. Hip/Shoulder/Interact matrix is not newly reported as a full sweep. | Complete — G3 ADS-hidden + throw/melee source |
UI-HUD-012 | Structured prompt + projected PromptHost + denied-focus. Quantity comes from pickup stack quantity. Owner reported quantity/denied on 2026-09-10. HOLD text waits for GetInteractHoldDuration > 0; no G3 debug hold fixture. | Complete — G3 quantity/denied; HOLD waits for a real hold action |
UI-HUD-013 | Low-health 30/20/10%; blood hold 2s + fade 5s; wet fade 5s. Sleeping applies a slight black dim (alpha 0.22) for G3 bed testing; owner reported that dim passed in PIE on 2026-09-09. Lens wetness follows survival bLensExposed. Held items and occupied clothing use the approved rain/swim/dry rates. Nearby ApplyDamage still requires 2 m and a clear visibility trace. Hits on the local pawn always start that client’s overlay. HUD BloodOverlay uses the Engine white square and sits above ScreenEffects. Owner reported self-hit overlay, nearby 2 m / LOS hits, low-health edges and UI_G3SetRain lens droplets plus shelter on 2026-09-10. G3 rain presentation is HUD droplets + UI_G3SetRain only; rain VFX is out of G3. | Complete — G3 HUD droplets; rain VFX out of G3 |
UI-HUD-014 | Firearm hand cards show Chamber/Mag even when the item also tracks durability. Production inspection uses actual stack chamber/magazine counts on L1810 (18/0 on new stacks); no magazine item is required in this G3 slice. Owner reported chamber/magazine inspection working on 2026-09-10. Debug UI_G3ObserveWeapon remains. Invalidate on item id/quantity change. [CONFIRMED 2026-09-14] Observation is not persisted; every fired round clears Chamber and Mag to UNKNOWN (P10 fire path). Magazine-as-item install is G3.2 UI-HUD-016. | Complete — G3 knowledge mask; magazine-as-item is G3.2 |
FInventoryStack.OriginBackSlot replicates with its stack and follows hand swaps; physical EquippedItems is empty while drawn, so back mesh and weight are not duplicated. GetAssignedBackWeaponStack exposes logical slot ownership to HUD/inventory; both show In hand. Server quick-slot switching plans on copies before committing. Q1/left and Q2/right use physical slot contents for draw/store/exchange, including the confirmed empty-slot fallback from the other hand. Storing into another slot clears the original reservation. When exchanging, the new in-hand stack cannot mask the physically stored item in that slot. Q3–Q0 retain one-handed coexistence and the existing replacement preflight; ordinary held items are never overwritten. Failed preflight leaves the original state untouched. Generic held transfers clear the reservation; occupied reserved back slots reject equip replacement. No inventory cell/weight capacity is needed for an internal back↔hand move. New Lambeer.HUD.BackWeaponReturn regression source covers identical item IDs with different durability, Q1/left→empty Q2 storage, right-hand/Q2 exchange, repeated swaps, dual holding, Q2 selection with both hands occupied, use-quick alongside a weapon and two-handed/no-discard guards. Game Development build passed after this flow change. The agent Editor-build attempt was blocked by Live Coding; owner subsequently reported the latest correction passed (see scoped result). Automation execution remains unverified.UI_G3GiveOneHanded [Key=1] uses the existing Item.Weapon.MockBack OneHanded fixture. UI_G3GiveTwoHanded [Key=2] uses Item.Weapon.MockTwoHanded, explicitly TwoHanded. Key accepts 1–9 or 0 as printed on the keyboard: 1–2 equip a back slot, 3–0 bind an inventory fixture to use-quick. Both commands execute on the server for the owning client. For Q3–Q0, an already-held matching fixture is bound without granting a duplicate; failed grants report weight/cell usage. They are disabled in Shipping/Test, preserve conflicting assignments and report capacity/assignment failure in the client console. Mocks have no mesh; inspect the hand cards. The TwoHanded fixture copies the existing mock's test weight/stack/durability settings, not production weapon tuning; real Data Assets remain unchanged.
UI_G3GiveOneHanded 1, UI_G3GiveOneHanded 2, then keys 1→2. Both hands should be occupied; key 1 returns only Back1. For use-quick instead, use UI_G3GiveOneHanded 3 with key 1→3 and verify both hands.UI_G3GiveOneHanded 1, UI_G3GiveTwoHanded 2, then keys 1→2→1. Entering TwoHanded stores the outgoing weapon in the selected occupied slot and locks the sibling hand; subsequent Q1/Q2 input follows selected-slot storage/exchange. UI_G3GiveTwoHanded 4 tests a use-quick two-handed item instead. An ordinary two-handed item without a back origin must be stowed manually before another item can replace it.PlanBackExchange; same-type/different-durability regression source covers the exact confirmed examples, repeated exchange, dual holding, right-hand priority, two-handed occupancy and failure preservation.L_Dev_Sandbox throw/sledgehammer checks passed, then that bed sleep could not start until Energy drain and a visible Sleeping dim were added. After Jog −1 Energy / 5s, sprint −1 Energy / 1s, and the slight black dim (alpha 0.22), the owner compiled the C4458 fix and replied “ผ่านแล้ว”. Recorded pass scope: Interact-to-sleep on BP_Bed_Test without standing still; screen dims while Sleeping; Energy drain while Jog/Run is visible enough to leave max Energy; throw/sledgehammer checks on that map from earlier the same day. Not recorded: full throw matrix in MP/near-wall, firearm inspections, blood-impact source, or G3 gate close. This is owner-reported runtime evidence, not agent-run PIE.L_Dev_Sandbox.UI_G3NotifyBlood first; re-check after respawn and confirm subsequent attribute changes update the bars.UI_G3GiveBackWeapons from the owning client in dedicated-server PIE (also re-check standalone/listen server), then keys 1 and 2 to hold both one-handed Mock Back Weapons simultaneously. Confirm each back slot becomes empty when its item is drawn; the held item appears only in Hands. Press the same key again to return it; test 1→2→1 (only Back1 returns; Back2 stays in hand) and 1→3 (Wood alongside a one-handed weapon), including full inventory and two identical weapons with distinct durability. With only Q1 assigned, draw using 1 then press empty Q2: confirm storage in Q2, Q1 clears and the hand empties. With right-hand A and Q2 B, press 2 and verify exact-stack exchange (including durability). Empty Q1/Q2 with no held item is a no-op; missing Q3–Q0 items leave held state unchanged. Slots 3–0 remain Wood use-quick.UI_G3ToggleADS. ADS hides the reticle both away from and while facing an interactable; exit ADS restores the appropriate reticle. The projected prompt is a separate widget.UI_G3AddMarker Death should show a red diamond on the compass tape and minimap ring, 4 m ahead, plus an on-screen hint.UI_G3ObserveWeapon 0 1 8 should change the bottom-left right-hand card from UNKNOWN to Chamber 1 / Mag 8. If the hand is empty, the server gives/takes the mock into that hand first. Also test UI_G3ObserveWeapon 1 1 8 for the left hand; wait for replication. Mock has no assigned mesh, so verify the hand card rather than a visible weapon model. Change held item/quantity and confirm UNKNOWN returns. Check full inventory, two-handed occupancy and repeated give commands for clear feedback/no replacement of occupied slots.L_Dev_Sandbox. After Editor rebuild if C++ changed: pick up Pickup_L1810_Test (cube near the sledgehammer, negative Y) or UI_G3GiveL1810 / Lambeer.GiveItem Item.Weapon.L1810. Bottom-left hand card should read L1810 with Chamber UNKNOWN and Mag UNKNOWN immediately; no separate magazine item is required in this slice. Click the PIE viewport so it has keyboard focus. Stand still: Shift+R should print a cyan “Checking chamber (3s)” then Chamber 0; Alt+R should print “Checking magazine (5s)” then Mag 18. Both use the authored Enhanced Input chords (R + IA_Shift / R + IA_Alt); there is no extra magazine bind. If the gun is not in a hand, cyan “No firearm in hands to inspect.” Moving, taking damage, dying or swapping the held item before the timer finishes must leave UNKNOWN. Lambeer.Damage 10 should print a red “Blood overlay”, splash a full-screen red tint (2 s hold / 5 s fade), and show ok in the console. Compare with UI_G3NotifyBlood if isolating the overlay. Owner-reported pass 2026-09-10: L1810 field inspection and Lambeer.Damage 10 on a dedicated-server client Preview window.UI_G3SetRain 1 should start lens droplets while unsheltered at PlayerStart. Worn clothing and held items should gain WetAmount (no wet mesh look until G3.2 materials expose it). Walk +X under the cube roof around (400, 0) to enter RainShelter_G3Test; wetting from rain should stop. UI_G3SetRain 0 should start the 5-second lens fade. G3 rain presentation is HUD droplets + UI_G3SetRain only; rain VFX is out of G3. Owner-reported pass 2026-09-10: droplets plus shelter.Lambeer.HUD, run those tests. This is an Editor automation pass, not PIE.PIE-UI-001–005 rows stay partial where noted; they do not reopen G3.LambeerEditor Win64 Development and reopening. Wet-look (UI-HUD-017) remains deferred and is not part of this close.UI-HUD-015 — Complete. C++ skeletal pipeline plus MCP-assigned SKM_L1810 on DA_Item_L1810. Owner reported world/held/back skeletal presentation (not a visible Engine cube). Grip pose remains unpolished content. Character holster sockets back_weapon_1 / back_weapon_2 were authored 2026-09-18; per-slot BackHolster1Relative / BackHolster2Relative are now on ULambeerItemDefinition and stay identity until calibrated. Owner PIE for that placement is not claimed. L1810_PhysicsAsset exists on disk but is not assigned to the skeletal mesh; the Engine cube remains the pickup collision proxy.UI-HUD-016 — Complete. Tarkov magazine-as-item. Owner reported: new L1810 shows No mag; magazine inspect after Alt+R is 0; load ammo onto mag; 3 s mag install while standing still; move cancels install; RMB remove magazine (3 s) and unload ammo. Data Assets and sandbox pickups were MCP-saved 2026-09-11.UI-HUD-017 — deferred by owner. MI_L1810, the magazine MI, and MetaHuman materials have no WetAmount parameter. Do not invent roughness/albedo/drip mapping. WetAmount scalar remains on pawns/stacks. This does not reopen G3.2 015/016.G3 historical full-mag spawn is superseded for new stacks only; it does not reopen G3. Debug UI_G3ObserveWeapon remains.
Map save verified 2026-09-11 (L_Dev_Sandbox is_dirty false). MCP placed magazine and ammo pickups beside the existing L1810 pickup: Pickup_L1810_Test at (200, −150, 260); Pickup_L1810_Magazine_Test at (240, −150, 260), stack Item.Magazine.L1810 ×1; Pickup_Ammo_9x19_Test at (280, −150, 260), stack Item.Ammo.9x19 ×18.
UI_G3GiveL1810 or pick up Pickup_L1810_Test: skeletal L1810 in hand and in the world (not a visible Engine cube). Inventory label shows No mag. Shift+R / Alt+R still work; after magazine inspect, Mag is 0.UI_G3GiveL1810Magazine and UI_G3Give9x19, or pick up Pickup_L1810_Magazine_Test and Pickup_Ammo_9x19_Test. Drag ammo onto the mag (count rises). Drag mag onto the gun and stand still 3 s. Moving should cancel. Right-click the gun: Remove magazine (3 s). Right-click the mag: Unload ammo.UI_G3SetRain.UI-CORE-001 and UI-CORE-002: Tab opens and closes without crash; Worn clothing slots are visible; sandbox Pants/Glasses/Body Armor/Backpack pickups equip. Command rules already passed 2026-09-11. Owner approved the Inventory presentation on 2026-09-12 and moved preserved task UI-CORE-003 to planned Gate G4.2. Owner-reported pass 2026-09-12 for the UI-CORE-004 north-up minimap and frozen full-map death-diamond retest. Owner-reported pass 2026-09-13 for pan/zoom/center, shared ping, filter toggles, map↔inventory Tab switching, and the zoom-clip retest (zoomed image stays inside the map panel). Owner-reported pass 2026-09-12 for the UI-CORE-005/UI-CORE-006 follow-through: backpack contents stay packed in the death bag, interact opens loot panels and allows individual take, and immediate respawn clears the blood overlay plus the death screen. Owner-reported pass 2026-09-13 for UI-CORE-005. Owner-reported pass 2026-09-13 for UI-CORE-006 Last Bed and four-town Fresh Spawn. Owner-reported pass 2026-09-12 for UI-CORE-007 dedicated-server client: Escape opens pause with WORLD CONTINUES WHILE MENU IS OPEN., local move/look blocked, other client/server keep running, Resume/Escape/Back close; inventory Escape closes inventory first; Tab/M do not stack. Owner-reported pass 2026-09-13 for standalone PAUSED/world-pause. Owner-reported pass 2026-09-13 for UI-CORE-008: settings language/font, Display Revert, HUD Scale/Safe Zone persist, categories, stacking, and no Text Scale control after rebuild (locked at 1.0). Xbox/PlayStation hardware checks remain deferred. UI-CORE-003 remains planned in G4.2. Agent does not run PIE.UI-CORE-001 + UI-CORE-002). Owner reported the inventory retest passed after the Tab-close crash fix and clothing pickups. Scope: Dedicated Server + two client Preview windows; Tab toggle; Escape/Close; Worn row; drag/Equip of the four existing clothing items. Does not close G4. The approved Character + Container Focus layout, side-by-side loot, Take All/Transfer All UI and final modal presentation are G4.2; map, death/spawn, pause, settings and controller remain out of this pass.C++ in this change set:
ULambeerInventoryWidget derives ULambeerActivatableWidget. BindWidget names and assignment/magazine/drop logic are unchanged.ULambeerInventorySubsystem opens through ULambeerUIManagerSubsystem::PushWidget on UI.Layer.Screen and closes with DeactivateWidget. It no longer calls PresentLegacyWidget, DismissLegacyWidget, or ReleaseKeyboardToGame.NativeOnActivated and unbind in NativeOnDeactivated/NativeDestruct. Back/Close notify the facade so the open map cannot go stale.Button_Close when Blueprint GetInitialFocusTarget is unset.IA_Inventory bind. Registering that same UInputAction through RegisterUIActionBinding crashed on 2026-09-12 because CommonUI Enhanced Input support is off (LegacyActionData assert). Tab is consumed by a Slate input preprocessor while the screen is active. Owner-reported pass 2026-09-12: Tab opens and closes; Escape still closes.Unreal MCP 2026-09-11 (after owner Editor rebuild): PIE was not running. CompileWidgetBlueprint and save of /Game/Lambeer/UI/Inventory/WBP_Inventory succeeded. Parent remains ULambeerInventoryWidget (Common UI Plugin category). GetWidgets still reports 20 widgets including bound Button_Close.
IA_Inventory again). Escape (CommonUI Back) and Close remain available. After close, movement/look and the game cursor state return.[CONFIRMED 2026-09-11 owner answers] Command rules below are canonical. Stale-selection uses ExpectedItemId (the stack’s ItemId at the requested index). There is no generation token. Server rejects when the index is empty, missing, or holds a different item.
bCanHolsterOnBack takes an empty back slot before storage.TryAddStack / PickContainerWithSpace). Side-by-side loot UI is UI-CORE-003 in G4.2. World-container interact opens inventory loot panels; Take All from those panels uses TryTakeAllFromWorldLoot, not vacuum TransferAllTo on Interact.LinkedTransferInventory is set.TryUseStackAt rejects without consuming and logs.Def->EquipmentSlot. Holsterable Weapon/Tool uses the first empty BackWeapon1 then BackWeapon2; if both are occupied, Equip displaces BackWeapon1. Occupied slots pack the previous worn-storage contents into NestedContents, then move that item into player storage when there is space, otherwise drop it as a world pickup. Drag from loot/death-bag cells onto Worn/Back uses TryEquipStackFromWorldLoot. World pickup/store still does not replace worn clothing.Context menu still includes Unload ammo / Remove magazine. Owner-reported command pass 2026-09-11 for merge, split, drop, sort, search, Use (no consume), Equip, and pickup routing. Two gaps in that PIE were worn clothing wear slots and Tab-close. Those crashed on the first rebuild (RegisterUIActionBinding / LegacyActionData). Owner-reported pass 2026-09-12: inventory opens without that crash; Tab closes; nine wear slots are visible at the top of Scroll_Containers; sandbox Pants/Glasses/Body Armor/Backpack pickups equip into Legs/Eyes/Armor/Pack. G4.2 now binds the nine Worn targets to designer Box_WornSlots above the container list (not inside the scroll) and replaces the temporary C++ split window with an in-widget overlay. Take All / Transfer All presentation is that G4.2 transfer layout.
Map save verified 2026-09-12 (L_Dev_Sandbox is_dirty false). MCP placed the four existing clothing/equipment pickups on a row opposite the L1810 cubes (positive Y, Z 260): Pickup_Clothes_Pants_Test at (200, 50, 260) Item.Clothes.Pants ×1; Pickup_Clothes_Glasses_Test at (240, 50, 260) Item.Clothes.Glasses ×1; Pickup_Clothes_BodyArmor_Test at (280, 50, 260) Item.Clothes.BodyArmor ×1; Pickup_Backpack_Improvised_Test at (320, 50, 260) Item.Backpack.Improvised ×1. No Head, Torso, Feet, Hands, or Vest Data Assets exist, so those wear slots have no sandbox pickup.
UnrealEditor-Lambeer.dll is not locked.LambeerEditor Win64 Development and reopen this project.WBP_Inventory.UI-CORE-003 in G4.2.UI-CORE-003 is preserved on Gate G4.2. It owns the approved Character + Container Focus hierarchy, WBP_ContainerTransfer, and context/split overlay presentation. Inventory Search was removed by owner decision on 2026-09-14. Map, death/spawn, pause and settings remain closed G4 tasks.
C++ in this change set. Owner-reported pass 2026-09-12 for the north-up minimap and frozen full-map death-diamond retest. Owner-reported pass 2026-09-13 for pan/zoom/center, shared ping, filter toggles, map↔inventory Tab switching, and the zoom-clip retest. Unreal MCP 2026-09-12 (after owner Editor reopen): created, compiled and saved /Game/Lambeer/UI/Map/WBP_WorldMap. Parent is ULambeerMapScreen. GetWidgets reports an empty designer tree (0 widgets). Runtime layout still comes from the C++ fallback in ULambeerMapScreen::EnsureLayout. DefaultGame.ini MapWidgetClass now points at WBP_WorldMap_C. Unreal MCP 2026-09-12: imported owner-supplied temporary map image as /Game/Lambeer/UI/Map/T_WorldMap_Temporary (1024×576, TEXTUREGROUP_UI, clamp, never-stream). Source file: RawResource/UI/Map/WorldMap_Temporary.jpg. The canvas draws that texture with the same pan/zoom as markers. The image is not geographically registered to L_Dev_Sandbox or any production footprint; TBD-WORLD-001 is unchanged.
UI_G3AddMarker Death the world-map player icon left the center, the minimap death diamond stuck to the rim, then the full-map diamond was still missing, then the minimap image rotated with the camera and the full-map diamond followed the pawn. Cause of the last two: heading-up Image_Disc rotation, and NativeTick recapturing player-centered fallback bounds every frame. Source keeps the minimap image north-up, projects minimap markers in world XY, draws a heading chevron at the pip, and freezes fallback bounds while the map is open (KeepOrMakeFallbackBounds). Owner reported that retest passed: the island image does not spin with the camera; the heading chevron shows facing; walking with the full map open leaves the death diamond in place and moves the player chevron; the minimap diamond moves only when the pawn walks. Scope does not include pan/zoom/center, shared ping, filter toggles, or map↔inventory Tab switching. Neither the 50 m clamp nor the pip size is a production footprint or an approved radar radius. The temporary image is not geographically registered.UI-CORE-004 remainder + zoom clip). Owner reported pan, zoom, Center player, shared ping, filter toggles and map↔inventory Tab switching passed, then that the zoomed map image stays inside the map panel after the ClipToBounds / Slate clip follow-through. Does not close G4 (UI-CORE-006 Last Bed / four-town Fresh Spawn remain).ULambeerMapScreen derives ULambeerActivatableWidget and opens through ULambeerMapSubsystem on UI.Layer.Screen. Opening the map closes inventory and the reverse, so the two screens do not stack.M via runtime IA_UI_Map_Runtime (or authored IA_UI_Map if present). Menu mode blocks the PlayerController bind, so the map screen uses a Slate preprocessor the same way inventory uses Tab. Escape/Close still use CommonUI Back. Tab from the map switches to inventory.ULambeerHUDAdapter and already feed compass/minimap. The screen exposes All plus one toggle per ELambeerUIMarkerCategory.TBD-WORLD-001. Temporary image T_WorldMap_Temporary fills world UV 0–1 and pans/zooms with the view. Player/marker positions on that image are not a claimed geographic match.Image_Disc draws the same temporary T_WorldMap_Temporary inside the circular disc, north-up. The image does not rotate with camera yaw. Nearby markers use the 50 m implementation range on a north-up disc (HUD east / Unreal −X right, world +Y up) and sit inward from the rim; markers beyond the clamp stay on the rim. Looking around rotates the center heading chevron only. Walking moves markers relative to the pip. The center player pip is 8 px so a 4 m death diamond is not covered. Compass tape remains heading-only. The 50 m value is not an approved radar radius. Player/marker positions on that image are not a claimed geographic match. [OWNER CORRECTION 2026-09-14] east-is-right follows look-right, not Unreal +X.ALambeerPlayerState replicates one ping per player. The server rejects non-finite positions. No ping duration or max range is authored. Debug: UI_G4ToggleMap, UI_G4SetPing / UI_G4SetPing 0.UnrealEditor-Lambeer.dll is not locked.LambeerEditor Win64 Development and reopen this project. WBP_WorldMap was created after that reopen.LambeerEditor Win64 Development compile so Live Coding / the locked DLL does not keep the previous map paint path.LambeerEditor Win64 Development and reopen this project.M (or UI_G4ToggleMap). The map opens without stacking on inventory and shows T_WorldMap_Temporary (island aerial). The “No authored map image” label is hidden. M, Escape and Close dismiss it. After close, movement/look return. In this multiplayer topology the world keeps running.UI_G3AddMarker Death. A filled red death diamond appears, then stays on the same full-map location while the player chevron moves. Minimap shows the temporary island image north-up (it does not spin with the camera). The heading chevron shows facing. The nearby death diamond sits inward from the rim, stays in world direction when looking around, and moves on the disc only when the player walks. Owner-reported pass 2026-09-13: filter toggles. Do not expect those diamonds to sit on a correct island location.UI_G4SetPing is an alternate path 4 m ahead of the pawn.M from inventory opens the map. They do not remain stacked.C++ in this change set. Owner-reported pass 2026-09-12 for nested backpack dump, death-bag loot-panel interact with individual take, and immediate-respawn HUD/death-screen refresh. Owner-reported pass 2026-09-13 for UI-CORE-005. Last Bed and four-town Fresh Spawn were UI-CORE-006 and later passed 2026-09-13. Full-loot hardcore: inventory stacks, then held items, then worn/back equipment dump into ALambeerDeathBag. Worn-container contents (backpack, pants, vest, …) whose ContainerId matches that worn item’s ItemId are packed into FInventoryStack::NestedContents on that item, so they stay inside the dropped backpack instead of flattening as loose bag stacks. Body.Pockets stacks stay loose. Empty dump does not spawn a bag; the death screen still opens. Interact on the bag (and other AWorldDropContainer crates) opens inventory loot panels instead of vacuum TransferAllTo. Clients read ReplicatedLootStacks because the container inventory is not owner-replicated. Take / drag into a player container uses TryTakeFromWorldLoot; Take All uses TryTakeAllFromWorldLoot. Nested panels list packed contents so another player can pick those items individually. Equipping a packed storage item unpacks NestedContents back into worn ContainerId stacks. The bag destroys itself when emptied. G4.2 side-by-side transfer layout is not used yet; loot panels append under the current Scroll_Containers list. No production despawn timer is authored; UI_G4DestroyDeathBag / Lambeer.DestroyDeathBag covers the despawn-without-empty path. Death diamonds come from live replicated bags for every client, not from UI_G3AddMarker. Killer name is empty for self/unknown (UI shows Unknown). Cause ids are Damage / Unknown. Last selected bed for G4 is the bed last used to start Sleep. Health restores to MaxHealth on respawn; Hunger/Energy and other attributes are not reset. Owning-client HUD refresh on respawn clears the blood overlay timer and suppresses stale 0-Health low-HP edges until attributes replicate (NotifyLivingPresentation / ClientNotifyLivingPresentation). No ragdoll: movement is disabled until a valid respawn. Death-bag slot/weight caps are implementation so full-loot is not truncated (MinDeathBagSlots = 20, MinDeathBagWeight = 100000), not a production bag size.
FLambeerDeathRecord replicates on ALambeerPlayerState. Lethal Health clamp on the PlayerState ASC calls AuthorityNotifyLethalDamage once.Lambeer.Kill / UI_G4Kill, Lambeer.DestroyDeathBag / UI_G4DestroyDeathBag, UI_G4RespawnBed, UI_G4RespawnTown (default Town.NorthCoast).C++ in this change set. Owner-reported pass 2026-09-12 that immediate respawn closes this screen. Owner-reported pass 2026-09-13 for Last Bed after Sleep and Fresh Spawn to the four sandbox towns. ULambeerDeathScreen derives ULambeerActivatableWidget and hosts the same map canvas as the world map (pan/zoom, no ping). Runtime layout comes from C++ EnsureLayout when the Widget Blueprint designer tree is empty. Unreal MCP 2026-09-12 (after owner Editor reopen): created, compiled and saved /Game/Lambeer/UI/Map/WBP_DeathRespawn. Parent is ULambeerDeathScreen. GetWidgets reports an empty designer tree (0 widgets). DefaultGame.ini DeathWidgetClass points at WBP_DeathRespawn_C. Map save verified 2026-09-12 (L_Dev_Sandbox is_dirty false). Four ALambeerSpawnRegion sandbox stand-ins sit in outliner folder G4/SpawnRegions, about 8 m from PlayerStart (0, 0, 302) on the lower sandbox floor: SpawnRegion_NorthCoast Town.NorthCoast at about (0, 800, 151); SpawnRegion_SouthCoast Town.SouthCoast at about (0, −800, 150); SpawnRegion_River Town.River at about (800, 0, 150); SpawnRegion_Isthmus Town.Isthmus at about (−800, 0, 150). They are not geographically registered and TBD-WORLD-001 is unchanged. Missing regions disable that town button with reason “No authored spawn region”. Last Bed is disabled until a sleep-on-bed has been recorded. Fresh Spawn does not include a sleeping bag.
UI-CORE-005 / UI-CORE-006 follow-through). Owner reported “ผ่านแล้ว” for the three remaining death checks after the Editor rebuild. Scope: Dedicated Server + two client Preview windows; items placed in a worn backpack stay packed inside that backpack in the death bag; the other client’s Interact opens inventory loot panels and can take nested items individually; immediate respawn clears the blood overlay / low-HP edges and closes the death screen. Does not close G4. Last Bed, four-town Fresh Spawn, empty-bag marker lifecycle, Take All, DestroyDeathBag, and Tab/M stacking over the death screen are not newly itemized. G4.2 side-by-side transfer layout is out of this pass.UI-CORE-005). Owner reported the death/respawn state and death-marker lifecycle passed. Does not close G4 by itself. UI-CORE-006 Last Bed and four-town Fresh Spawn were not newly named in this report.UI-CORE-006). Owner reported Last Bed after Sleep and Fresh Spawn to the four sandbox towns passed. No sleeping bag. Sandbox towns are not production geography. Closes UI-CORE-006 and Gate G4. UI-CORE-003 remains G4.2. Xbox/PlayStation remain deferred. Agent does not run PIE.UnrealEditor-Lambeer.dll is not locked.LambeerEditor Win64 Development and reopen this project. Unreal MCP then created WBP_DeathRespawn and the four sandbox spawn regions.Lambeer.Kill. Those items stay inside the backpack in the death bag, not as loose bag stacks. Killer Unknown, cause Damage, death-screen copy, Last Bed disabled, and four town buttons were not newly itemized.UI-CORE-005.C++ in this change set. Unreal MCP 2026-09-12 (after owner Editor reopen): created, compiled and saved /Game/Lambeer/UI/Menus/WBP_PauseMenu. Parent is ULambeerPauseScreen. GetWidgets reports an empty designer tree (0 widgets). Runtime layout comes from C++ EnsureLayout. DefaultGame.ini PauseWidgetClass points at WBP_PauseMenu_C. Owner-reported pass 2026-09-12 for dedicated-server client pause, inventory-first Escape, and Tab/M not stacking. Owner-reported pass 2026-09-13 for standalone PAUSED/world-pause. ULambeerPauseScreen derives ULambeerActivatableWidget and opens through ULambeerPauseSubsystem on UI.Layer.Screen. Opening pause closes inventory and map. Death and character-creation screens refuse pause. Tab/M do not open inventory or map while pause is open. Settings and Exit-to-main remain out of this slice (UI-CORE-008 and Gate G5).
NM_Standalone may pause. Listen-server and dedicated-server clients never pause; engine APlayerController::SetPause is already a no-op on NM_Client, but listen-server would pause every connected pawn if that guard used “not client”.WORLD CONTINUES WHILE MENU IS OPEN. Title is MENU. Standalone title is PAUSED and the warning is hidden. Local move/look remain blocked by the existing UI manager Menu input path.IA_InventoryEscape_Runtime). While pause is open, Escape/Back/Resume close it. Inventory still consumes the first Escape. Map still uses CommonUI Back. Death still ignores Back.UI_G4TogglePause. G1 UI_G1SetPauseRequested remains a standalone-only manager flag and is not the pause screen.UI-CORE-007 dedicated-server pause). Owner reported “ผ่านแล้ว” for the required pause checks after WBP_PauseMenu existed. Scope: Dedicated Server + two client Preview windows; HUD-only Escape opens pause with WORLD CONTINUES WHILE MENU IS OPEN.; local move/look stop; the dedicated-server world and the other client keep running; Resume, Escape and CommonUI Back close it and restore movement/look; inventory Escape closes inventory and does not open pause on that same press; Tab/M do not stack inventory or map on pause. Does not close G4. Standalone PAUSED/world-pause, Settings and Exit-to-main are not newly itemized.UI-CORE-007 standalone PAUSED). Owner reported the remaining pause check passed. Single Player Exit-to-main later passed as UI-FE-009 on 2026-09-16. Dedicated Exit-to-main later passed as UI-FE-005 on 2026-09-16. Does not close G4.UnrealEditor-Lambeer.dll is not locked.LambeerEditor Win64 Development and reopen this project. Unreal MCP then created /Game/Lambeer/UI/Menus/WBP_PauseMenu.UI_G4TogglePause). The menu opens, movement/look stop, and the warning WORLD CONTINUES WHILE MENU IS OPEN. is visible. The dedicated-server world and the other client keep running. Resume, Escape and CommonUI Back close it and restore movement/look.UI-CORE-008. Do not treat Exit-to-main as part of this slice.C++ in this change set. ULambeerUserSettings subclasses UGameUserSettings. DefaultEngine.ini sets GameUserSettingsClassName=/Script/Lambeer.LambeerUserSettings. HUD Scale, Safe Zone Scale and language (en/th) persist on that object. Text Scale is not a G4 Settings field (owner decision 2026-09-13; runtime stays at 1.0). Display resolution and window mode use engine UGameUserSettings fields. Opening the screen copies applied values into a draft. Apply validates then writes; Revert restores the last applied draft. HUD scale changes live-preview and persist only on Apply. Display changes apply tentatively and must be confirmed; they revert after 15 seconds, on Revert, or if the screen closes. That 15-second window is an implementation clamp, not an approved gameplay setting. Graphics, Audio, Voice, Controller, Mouse + Keyboard, Gameplay and Accessibility are listed with an explicit unavailable reason and have no persistable fields. Crosshair Customization is listed under HUD as waiting for approved values. Exit-to-main remains Gate G5. Invalid culture, non-positive scales, Safe Zone outside 0–1, non-positive resolution and unknown window mode cannot persist. ULambeerSettingsScreen derives ULambeerActivatableWidget and opens through ULambeerSettingsSubsystem on UI.Layer.Screen. Pause Settings stacks this screen without closing pause. Escape/Back close settings first. Tab/M still do not stack. Death closes settings then pause. Unreal MCP 2026-09-12 (after owner Editor reopen): created, compiled and saved /Game/Lambeer/UI/Menus/WBP_Settings. Parent is ULambeerSettingsScreen. GetWidgets reports an empty designer tree (0 widgets). Runtime layout comes from C++ EnsureLayout. DefaultGame.ini SettingsWidgetClass points at WBP_Settings_C. Debug: UI_G4ToggleSettings, UI_G4ApplySettings, UI_G4RevertSettings, UI_G4ConfirmDisplay.
ST_UI_Common_EN / ST_UI_Common_TH. Apply th sets culture like UI_G2SetCulture, then refreshes this screen from the TH table. Owner reported 2026-09-12 that Apply th left the settings labels in English, then <MISSING STRING TABLE ENTRY>, then Thai tofu boxes (C++ EnsureLayout used engine Roboto). Follow-through writes the 36 Settings.* keys, force-saves the tables, and applies /Game/Lambeer/UI/Common/Fonts/FF_UI_Primary to settings/pause runtime TextBlocks. Owner-reported pass 2026-09-13: Thai settings labels render with FF_UI_Primary (no tofu). C++ HUD/pause NSLOCTEXT still stays English until a later locres gather. G2 Gallery samples still switch through Game.locres; that Gallery path is not newly itemized in this retest.UI-CORE-008 language/font). Owner reported Apply th shows Thai settings labels with FF_UI_Primary and no missing-glyph boxes.UI-CORE-008 G4 settings slice). Owner reported HUD has no Text Scale control after rebuild. Display Revert, language/font, categories, HUD Scale/Safe Zone persist and stacking already passed. Text Scale stays locked at 1.0 in G4; player-facing Text Size remains on the accessibility list for a later settings pass. G2 UI_G2SetPresentationScales remains a debug path. G4 later closed 2026-09-13 after UI-CORE-006. UI-CORE-003 remains G4.2.UnrealEditor-Lambeer.dll is not locked.LambeerEditor Win64 Development and reopen this project. Unreal MCP then created /Game/Lambeer/UI/Menus/WBP_Settings.UI_G4ToggleSettings). The nine confirmed categories are listed. HUD and Display are editable. Graphics/Audio/Voice/Controller/Mouse + Keyboard/Gameplay/Accessibility show a reason and Apply is disabled.1.0). Owner confirmed the HUD category has no Text Scale control after rebuild.th then Apply switches the settings category/field labels to the TH string-table copy and renders those glyphs with FF_UI_Primary (no tofu). fr is not offered and cannot persist. C++ HUD/pause NSLOCTEXT remaining in English is not a fail for this slice. G2 locres-backed Gallery samples are not newly itemized in this retest.Current owner direction — 2026-09-14: Inventory_UI_NEW.png replaces Rescue Equipment as the complete Inventory/transfer visual source of truth. Runtime behavior and the approved layout remain unchanged.
WBP_Inventory compile/save/readback pass; readback reports 43 widgets and no Search widget. UI-CORE-003 and G4.2 are closed; G4.3 is the next gate.LambeerInventoryPresentation::SlotSize and SlotLabelFontSize. Closed-Editor LambeerEditor Win64 Development rebuilt successfully; focused non-PIE Inventory tests passed 3/3 with zero warnings/errors. Owner PIE pending.
RawResource/ConceptReference/Inventory_UI_NEW.png · 1920×1080: use its palette, surface hierarchy, fine outlines, typography hierarchy and cyan interaction states. The existing layout contract remains authoritative; sample items, counts, character art and key hints are illustrative and stay live at runtime./Game/Lambeer/UI/Inventory/Textures/NightOps/T_UI_Inventory_NightOps_Focus, with source RawResource/UI/Inventory/UMG/NightOps/ui_inventory_night_ops_focus_corners.png; live states tint it cyan or danger red. Item icons, Drop glyph and portrait material remain separate content assets.Theme authority: FEAT-HUD-UI Night Ops override. The legacy anchor g42-rescue-pack is preserved for inbound document links. Runtime tokens in LambeerInventoryPresentation.h are Background #070D12, Surface #0D161C, Raised #121E26, Border #364A56, Border Bright #617580, Accent #58EBEF, Text #DFE7EA and Muted #8797A0. Google Sans Medium/SemiBold plus letter spacing provides the reference's condensed technical hierarchy while preserving English/Thai glyph support.
| Element | Implementation | State contract |
|---|---|---|
| Shell / panel / slot | Resource-less dark RoundedBox fill with 1 px steel-blue outline and 2–3 px radii | No layout or desired-size change between states |
| Buttons / split input | Dark fill and fine outline; no light plates or orange action blocks | Cyan outline on hover/focus/press; disabled remains muted |
| Focus / selection / drop target | T_UI_Inventory_NightOps_Focus Image overlay | Cyan corners; danger red for denied; color is reinforced by corner shape |
| Scrollbar | Resource-less near-black track and steel thumb | Cyan thumb on hover/drag; no stretched bitmap |
| Text | Cool white primary and blue-gray secondary; quantities remain white | Live localized text, never baked into the reference image |
UEditableTextBox style pointer. The retained fix writes WidgetStyle on the UObject and calls SynchronizeProperties(); the Night Ops change does not restore the unsafe setter path.Button_Slot from HitTestInvisible to Visible in ULambeerInventorySlotWidget::NativeConstruct. The hit-testable child button consumed the left mouse press before the parent slot's NativeOnMouseButtonDown could call DetectDragIfPressed. Source restores HitTestInvisible and records the input-ownership reason beside that assignment. The closed-Editor LambeerEditor Win64 Development rebuild passed, the affected Widget Blueprints compiled/saved, and the owner later confirmed the retained drag routes passed.Lambeer Win64 Development and LambeerEditor Win64 Development built successfully. Headless non-PIE automation executed Lambeer.HUD.PhysicalBackSlots and Lambeer.HUD.BackWeaponReturn: 2/2 Success, process exit 0. Evidence: Saved/Logs/G42PhysicalBackSlots.log and Saved/Automation/G42PhysicalBackSlots/index.json. Owner Dedicated Server + two-client PIE remains pending. Previous declarations that the regression was fixed were premature; no runtime pass is recorded.The owner supplied Inventory_UI_NEW.png and requested a full presentation replacement while preserving behavior and layout. The reference does not add its sample inventory, capacities, clothing, character or key hints to runtime state.
Dimmer/SafeZone_Inventory retain the 10%–90% viewport anchors with 0/15 px offsets. The new pass changes those elements only from Rescue off-white/orange chrome to Night Ops dark surfaces, steel outlines, white/muted text and cyan state accents. The owner confirmed drag, split, sort, drop, hand/Q1/Q2 and Player/Target transfer passed; Search was removed rather than retained.LambeerEditor Win64 Development rebuild, all four Inventory Widget Blueprint compiles/save/readback and three focused non-PIE Inventory tests passed with zero warnings/errors. The owner then reported the corrected PIE presentation passed. Layout and command behavior are unchanged.WBP_InventorySlot. Lambeer.HUD.InventoryActivatable, Lambeer.HUD.InventoryCommandRules and Lambeer.HUD.InventoryPresentationFallback passed 3/3 with zero warnings/errors./Game/Lambeer/UI/Inventory/Textures/RescueEquipment/ assets, their source pack and the superseded RawResource/ConceptReference/Inventory_UI.png were deleted after empty referencer checks. They remain recoverable from version control. The neutral focus-corner mask was moved and renamed under NightOps; it is not used with the former palette.ULambeerItemDefinition assets had no Icon. Generated, inspected, imported and assigned all 13 icons under /Game/Lambeer/UI/Inventory/Textures/Items/. Sources and full built-in prompts: Icons/generation.json. L1810, its magazine and Sledgehammer used MCP asset-thumbnail references; the other icons are representative art for existing definitions whose inspected world mesh was a placeholder. The icons deliberately use an opaque navy background. No item quantities, ownership or gameplay values were changed.Latest owner correction — 2026-09-14; native build passed; owner PIE pending: The prior WrapBox still received only its desired width because its HorizontalBox slot used HAlign_Left. The saved asset and native layout now use HAlign_Fill on that parent slot, while the WrapBox contents remain left-aligned. NativeGetDesiredFocusTarget now returns the first equipment slot instead of its non-focusable layout panel. This corrects the earlier explanation of the focus warning. WBP_Inventory compiled/saved and parent alignment readback passed; LambeerEditor Win64 Development rebuilt successfully on 2026-09-14 (DLL 00:21:19). Focused non-PIE Lambeer.HUD.InventoryCommandRules passed 1/1 with zero warnings/errors; report: Saved/Automation/InventoryWornWidthFocus/index.json. Owner client PIE must still verify row fill and absence of the focus warning.
UniformGridPanel because it moved four cells down despite remaining right-side width. WBP_Inventory now contains a left-aligned, allotted-width Wrap_WornSlots; it places as many cells as fit on the current row and wraps only the remainder. Q3–Q0 and Drop remain 104×104 action targets; Q1/Q2 and Left/Right Hand remain 104 high and stretch horizontally to consume the remaining row width. Item titles and quantities are separate floating Overlay layers; neither contributes a VerticalBox layout height or pushes the icon. Every item brush remains centered at its authored aspect, and the square root clips residual overflow. Container grids use left alignment. Worn/Quick title rows are collapsed. Drop is a frameless navy arrow-to-tray icon with tooltip and color-state feedback. Slot and item titles use 12-point white text over the navy well with ellipsis/full tooltip and no label plate. Close and per-container Sort retain the 14-point compact token; Search is removed. Unreal MCP replaced the Worn UniformGrid with WrapBox, compiled/saved the Widget Blueprint, and readback confirmed responsive allotted-width flow with 4 px spacing. With Editor and Live Coding closed, LambeerEditor Win64 Development rebuilt successfully. Focused non-PIE Lambeer.HUD.InventoryCommandRules passed without warnings/errors./Game/Lambeer/UI/Inventory/Materials/M_UI_InventoryPortrait was created, wired, compiled and saved via MCP (SceneColor RGB, inverted capture alpha). Lighting, pose, attachment visibility, gamma, framing and capture cost have not been observed in PIE.[OWNER-REPORTED G4.2 PASS 2026-09-14] The owner accepted the final Night Ops PIE presentation and confirmed drag, split, sort, drop, hand/Q1/Q2 and Player/Target transfer passed. Search failed and was explicitly removed as unsuitable for this game. After removal, Development Game/Editor builds, WBP_Inventory compile/save/readback and focused non-PIE Inventory automation 3/3 passed; the saved widget tree has 43 widgets and no Search widget. The owner then confirmed the field-free header, Title/Weight/Close layout and complete item presentation passed. G4.2 / UI-CORE-003 is closed.
The earlier olive/brass pack was removed on 2026-09-13. The superseded seven-texture Rescue Equipment pack and its Inventory_UI.png reference were removed on 2026-09-14 after empty referencer checks. Night Ops now uses resource-less brushes plus one neutral focus-corner mask.
UI-CORE-003WBP_Inventory, WBP_InventoryContainer and WBP_InventorySlot through Unreal MCP before editing. Preserve the existing parent classes and C++ BindWidget names: CharacterPreview, Slot_HeldRight, Slot_HeldLeft, Slot_Drop, Box_UseQuickSlots, Scroll_Containers, optional Box_WornSlots, Text_Weight and Button_Close. Edit_Search was removed 2026-09-14.WBP_Inventory as Safe Zone → header → 36/64 main split → fixed Q1–Q0 row → action footer. Bind the existing nine Worn slots above Scroll_Containers; keep only the container list scrollable. The optional character capture may retain a placeholder until its capture actor is authored.WBP_InventoryContainer so title, used/capacity and per-container Sort remain visible while its slot grid is rebuilt. Preserve C++ generation and server-authoritative container capacity; do not infer slots from the concept image./Game/Lambeer/UI/Inventory/WBP_ContainerTransfer only after confirming the required parent/factory path through Unreal MCP. Reuse the existing LinkedTransferInventory seam and existing Take All / Transfer All commands; the widget must not own or duplicate either inventory.ExpectedItemId semantics. Context, Sort, Use, Equip, Drop, magazine actions and failure reasons remain projections of existing C++ commands. Search is excluded.WBP_ContainerTransfer to /Script/Lambeer.LambeerContainerTransferWidget, added designer Transfer_Target (collapsed until transfer mode; Scroll_Loot remains the collapsed fallback), and compiled/saved WBP_Inventory, WBP_InventorySlot, WBP_InventoryContainer and WBP_ContainerTransfer. Chrome follow-through (same day, PIE stopped): designer Button_Slot is NoDrawType so Image_Frame 9-slice is visible; Worn labels are 10 pt wrapped FF_UI_Primary; CharacterPreview uses T_UI_Inventory_Panel_9Slice. Remaining close work is owner KBM PIE after a closed-Editor C++ rebuild if Live Coding still serves an old inventory DLL. Character capture remains a placeholder panel.NetMode: Client). Owner PIE 2026-09-13 first showed <MISSING STRING TABLE ENTRY> on inventory chrome while Close already resolved from Navigation.Close. Root cause: StringTableTools.set_entry did not mark packages dirty. Follow-through: 28 Inventory.* keys are saved in ST_UI_Common_EN/TH (force-dirty + save). A later owner capture showed those labels, HUD mostly hidden, and the 36/64 split, but still not the approved concept: default gray RoundedBox UButton chrome covering Image_Frame 9-slice; Worn labels at designer 24 pt Bold without wrap (EYEWEARHANDSPACK); CharacterPreview a NoImage fill that matched the dimmer. Designer follow-through (PIE stopped): Button_Slot NoDrawType, 10 pt wrapped FF_UI_Primary, panel 9-slice on CharacterPreview, slot 9-slice on Close/Sort, widgets compiled/saved. C++ ApplySplitSizing and SynchronizeProperties still need a closed-Editor LambeerEditor Win64 Development rebuild if Live Coding left an old DLL. Empty space under a short container list is expected (only that region fills/scrolls). The concept PNG is not a runtime background. Character capture remains a placeholder panel, not a MetaHuman render.ExpectedItemId. Split uses the in-widget overlay (Split confirm/cancel); Escape closes the overlay first.WBP_Inventory, child widgets and WBP_ContainerTransfer compile/save with every required BindWidget resolved and no duplicate Back Weapon UI.ExpectedItemId; opening the screen in multiplayer never pauses the world.UI-HUD-018 and G4.3 are closed.All three concepts keep the confirmed HUD information contract and use Inventory_UI_NEW.png only as the palette, surface, border, typography and cyan-state reference. Option A / Stats V2 is the owner-approved implementation reference. Options B and C remain reference-only. Images are layout/presentation concepts, not screenshots or approved gameplay data. Exact prompts, provenance, selection and implementation state are recorded in generation.json.

Owner-approved and implemented. Maximum open view. Eight Stats use the compact 2×4 live icon-node system with four equal shaped segments, threshold ticks, angular current-level markers, exact current values and restrained semantic fills. Q1–Q0 are square; single-hand, empty-hand and both-hands cards share one fixed size.
RawResource/ConceptReference/HUD_UI.png, the selected concept image and the owner's annotated runtime screenshots serving as the revision-3 visual targets. The owner confirmed the full G4.3 PIE checklist passed. Concept item art, quantities, status examples and background remain illustrative; runtime item/state data continues to come from the existing snapshot and item definitions.| Source PNG | Source size | Proposed Unreal target | Widget / Brush role |
|---|---|---|---|
ui_hud_night_ops_focus_corners.png | 1254×1254 RGBA | /Game/Lambeer/UI/HUD/Textures/NightOps/T_UI_HUD_NightOps_Focus | Reused G4.2 neutral mask for HipRelaxed, smaller ShoulderAim and cyan Interaction corners; Interaction adds a live Slate diamond |
ui_hud_night_ops_reticle_melee.png | 1254×1254 RGBA | /Game/Lambeer/UI/HUD/Textures/NightOps/T_UI_HUD_NightOps_Reticle_Melee | Flat white alpha mask; melee brackets plus hollow center ring |
ui_hud_night_ops_reticle_throw.png | 1254×1254 RGBA | /Game/Lambeer/UI/HUD/Textures/NightOps/T_UI_HUD_NightOps_Reticle_Throw | Flat white alpha mask; segmented readiness arc plus hollow center ring, not trajectory prediction |
ui_hud_night_ops_low_health_vignette.png | 1672×941 RGBA | /Game/Lambeer/UI/HUD/Textures/NightOps/T_UI_HUD_NightOps_FX_LowHealth | WBP_ScreenEffects; existing 30/20/10 opacity tiers |
ui_hud_night_ops_blood_lens.png | 1672×941 RGBA | /Game/Lambeer/UI/HUD/Textures/NightOps/T_UI_HUD_NightOps_FX_BloodLens | WBP_ScreenEffects; existing 2-second hold / 5-second fade; legacy root overlay is collapsed to avoid double rendering |
ui_hud_night_ops_wet_lens.png | 1672×941 RGBA | /Game/Lambeer/UI/HUD/Textures/NightOps/T_UI_HUD_NightOps_FX_WetLens | WBP_ScreenEffects; existing rain/swim source and 5-second fade |
Texture2D using UE 5.8's UI compression setting (TC_EditorIcon), TEXTUREGROUP_UI, NoMipmaps, Never Stream, Clamp X/Y, sRGB and preserved alpha.LambeerEditor Win64 Development compiled and linked successfully. Headless non-PIE Lambeer.HUD automation passed 24/24 with zero warnings/failures. Evidence: Saved/Logs/G43ReferenceAlignmentPass2.log and Saved/Automation/G43ReferenceAlignmentPass2/index.json. After reopening UE 5.8, Unreal MCP compiled/saved WBP_HUDRoot (12 widgets), WBP_StatusBars (1), WBP_Hands (6), WBP_QuickSlots (1), WBP_Compass (3) and WBP_Minimap (3) with expected native parents. HUD-root readback confirms Stats 440×240 at 24/64 inset, Quick Slots 1040×130 at 56 bottom inset, Hands 300×260 at 32/60 inset, and Minimap 264×264 at 32/24 inset. This is not PIE acceptance.LambeerEditor Win64 Development compiled and linked successfully after one corrected incomplete-type include. Headless non-PIE Lambeer.HUD automation passed 24/24 with zero warnings/failures. Evidence: Saved/Logs/G43OwnerFeedbackPass3.log and Saved/Automation/G43OwnerFeedbackPass3/index.json. After reopening UE 5.8, Unreal MCP compiled, saved and read back WBP_HUDRoot, WBP_Hands, WBP_QuickSlots, WBP_StatusBars and WBP_Compass. HUD-root readback confirms Quick Slots 1020×102, Compass 720×48 and the themed Weight copy slot at 58 px left; Stats, Hands and Minimap retain their established root extents. This is not PIE acceptance.ULambeerStatusBarsWidget consumes eight snapshot values that preserve normalized, exact current and maximum values and caches the eight verified stat textures. Its resource-less custom paint draws the 2×4 icon nodes, four equal shaped segments, three threshold ticks, continuous angular markers and the exact current value at right. Filled-segment count, marker, icon, shape and number encode state without color-only meaning.WorldYawToHudYaw maps Unreal look-right onto HUD east for the tape, compass markers and north-up heading chevrons. Minimap/full-map X follow HUD east (Unreal −X) so symbols rotate with the camera. Preserve the north-up temporary map, 8 px player pip, 50 m clamp and authority; this owner correction changes only E/W screen mapping.UI-HUD-018WBP_HUDRoot, WBP_StatusBars, WBP_Hands, WBP_QuickSlots, WBP_Reticle, WBP_Minimap, WBP_ContextStatusList and WBP_ScreenEffects hierarchy, parent classes and BindWidget names before editing./Game/Lambeer/UI/HUD/Textures/NightOps/, apply/read back the import contract and record caps.LambeerEditor Win64 Development passed and headless non-PIE Lambeer.HUD automation passed 24/24. After reopening, Unreal MCP compiled/saved/read back the four Option A-affected Widget Blueprints against the rebuilt DLL; all packages are clean.HUD_UI.png; fix the white Stats render path; rebuild compass/minimap/prompt/hands/slots presentation. Editor build and HUD automation 24/24 pass; Unreal MCP compiles/saves the six affected Widget Blueprints. Owner PIE acceptance remains pending.WorldYawToHudYaw maps Unreal look-right onto HUD east; minimap disc X, full-map UV X and the north-up island image follow that convention. This does not reopen G4.3. Closed-Editor LambeerEditor Win64 Development compiled and linked; headless non-PIE Lambeer.HUD passed 24/24 (0 failed / 0 not run). Evidence: Saved/Logs/CompassEWFix.log and Saved/Automation/CompassEWFix/index.json. Owner PIE remains pending.Texture2D assets exist at the documented targets with alpha and UI import settings verified; resource-less chrome and final runtime caps are recorded.LambeerEditor Win64 Development, headless non-PIE Lambeer.HUD automation 24/24 and both Widget Blueprint validations also pass. UI-MENU-001 and G4.4 are closed.The three concept boards preserve the completed UI-CORE-007/UI-CORE-008 behavior. Option B is the implementation reference; A and C remain unselected references. Generated examples, provenance and prompt constraints are recorded in generation.json.

Unselected reference. A centered modal composition with balanced symmetry.
UI-MENU-001English and ภาษาไทย; persisted culture IDs remain en/th.UI-CORE-007/UI-CORE-008, keep Text Scale locked at 1.0, keep unsupported categories unavailable, and do not add Exit-to-main or any G5 feature.LambeerEditor Win64 Development rebuilt and linked successfully. Headless Lambeer.HUD passed 24/24 with 0 failed and 0 not run, including display-name/culture mapping assertions; report: Saved/Automation/G44MenuFeedbackLanguageWarning/index.json. After reopening UE 5.8, Unreal MCP compiled, saved and read back WBP_PauseMenu and WBP_Settings; both retain their expected native parents, empty designer trees and clean saved state. Their authoritative runtime layouts remain the native EnsureLayout implementations. This is not PIE acceptance.English/ภาษาไทย language options, Apply/Revert/Back and the display-confirm modal.LambeerPlayerKey. Development Server Browser defaults to the Community tab because unmarked Null/LAN dedicated sessions are Community unless -LambeerOfficial is set. Owner reported first-time Character Creation on an extra dedicated client restores the gameplay follow camera behind the pawn, then Refresh/Join from the returned client. Steam metadata, Feedback URL and the packaged production gameplay destination remain blocked on TBD-HUD-UI-004/UI-FE-008. No agent PIE claim is made.ULambeerSaveWorldScreen now builds the owner-supplied sidebar/card/action-rail composition from RawResource/ConceptReference/P08_UI_Save_world.png. ULambeerServerBrowserScreen now builds the matching sidebar/search/refresh/table-row composition from P08_UI_Server_browser.png, including row-level Favorite and Join actions. ULambeerFrontendRowButton carries opaque world/server IDs through parameterless UButton clicks; presentation never parses those IDs. Existing create/rename/two-step delete/open, refresh/cancel/search/filter/favorite/join and error-state routes are retained. Closed-Editor LambeerEditor Win64 Development passed; focused Lambeer.Frontend automation passed 4/4; Unreal MCP compiled/saved/read back both Widget Blueprint children with expected native parents and no dirty packages. This is non-PIE evidence only.L_Dev_Sandbox. After Exit to Main Menu, do not stop PIE. Open Server Browser from that returned client (Community tab) while the hidden dedicated world and the other client keep running. Expected row name is the open world id, usually default. Output Log should contain P08 in-process host on Refresh; P08 advertised session start GameSession (ok) is still expected when the dedicated world begins play.L_Dev_Sandbox. Type in a client Preview window. The dedicated world is started automatically and is hidden under one-process PIE.P08 advertised session or P08 advertised session start GameSession (ok) on the dedicated server. The dedicated world and the other client must keep running for the rest of this checklist.pie-3 is the required first-time-creation check; returning clients that skip creation do not cover this.Optional session name/type for local dedicated: -LambeerServerName="Bangkok Test", -LambeerOfficial, -LambeerFriendlyFire=1. Unmarked dedicated sessions stay Community and omit friendly-fire metadata rather than inventing a value.
Owner approved. The Hybrid CommonUI + UMG architecture, one root per local player, four-layer ownership model, compatibility-facade migration, and SP/MP input-state policy below are frozen for G1 implementation.
ULambeerUIManagerSubsystem : ULocalPlayerSubsystem └─ WBP_UIRoot : ULambeerUIRootWidget / UCommonUserWidget ├─ Layer_GameHUD : Overlay // passive UMG │ ├─ WBP_HUDRoot : ULambeerHUDWidget │ ├─ WBP_ContextStatusList │ ├─ WBP_NotificationFeed │ └─ WBP_InteractionPromptHost ├─ Layer_Screens : UCommonActivatableWidgetStack // one primary screen ├─ Layer_Modals : UCommonActivatableWidgetStack // context/split/errors └─ Layer_Toast : WBP_ToastQueue // non-blocking notices Gameplay components replicate canonical state. UI manager owns only local presentation, activation, focus, safe-zone and device state. Every server mutation is requested through the owning gameplay component/service and re-rendered from accepted state.
ULambeerUIManagerSubsystem is the only layer/router owner per local player.ULambeerActivatableWidget centralizes CommonUI input config, back behavior, initial focus and restoration.UUserWidget; screens/modals derive from CommonUI activatable bases.| Layer | Input | Cursor/focus | World |
|---|---|---|---|
| HUD only | Game | No cursor; viewport focus | Runs |
| Primary screen in MP | Menu | Cursor for KBM; deterministic CommonUI focus for controller | Runs; movement/action contexts blocked |
| Pause screen in SP | Menu | Same navigation contract | Paused by session authority |
| Modal | Menu | Focus trapped inside top modal; Back closes modal first | Inherits underlying SP/MP rule |
| Radial | All | Stick/mouse selection; cancel restores game focus | Runs |
Paths marked Proposed do not exist yet. Existing Blueprint assets must be edited by the user.
Source/Lambeer/UI/ ├─ Common/ [Proposed] │ ├─ LambeerUIManagerSubsystem.h/.cpp │ ├─ LambeerUIRootWidget.h/.cpp │ ├─ LambeerActivatableWidget.h/.cpp │ ├─ LambeerUIActionTypes.h │ └─ LambeerUITypes.h ├─ HUD/ [Proposed organization] │ ├─ LambeerHUDWidget.* [move only in planned migration] │ ├─ LambeerStatusBarsWidget.* │ ├─ LambeerCompassWidget.* │ ├─ LambeerInteractionPromptWidget.* │ └─ LambeerScreenEffectsWidget.* ├─ Screens/ [Proposed] │ ├─ LambeerInventoryWidget.* [G4 UI-CORE-001/002 owner pass 2026-09-12; G4.2 Night Ops visual pass 2026-09-14, interaction acceptance pending] │ ├─ LambeerMapScreen.* / LambeerMapSubsystem.* / LambeerMapPresentation.* [G4 UI-CORE-004 owner pass 2026-09-13 including zoom clip; frozen 50 m fallback while open; north-up minimap; owner north-up/frozen-death pass 2026-09-12] │ ├─ LambeerDeathScreen.* / LambeerDeathSubsystem.* [G4 UI-CORE-005 owner pass 2026-09-13; UI-CORE-006 owner pass 2026-09-13 Last Bed / four-town Fresh Spawn; also LambeerDeathBag.*, LambeerSpawnRegion.*, LambeerDeathTypes/Rules; owner nested-dump / loot-panel / HUD-refresh pass 2026-09-12; four sandbox spawn regions on L_Dev_Sandbox] │ ├─ LambeerSpawnScreen.* │ ├─ LambeerCraftingScreen.* / LambeerWorkbenchScreen.* │ ├─ LambeerPauseScreen.* / LambeerPauseSubsystem.* / LambeerPauseRules.h [G4 UI-CORE-007 behavior pass; G4.4 Night Ops Option B owner-accepted] │ ├─ LambeerSettingsScreen.* / LambeerSettingsSubsystem.* / LambeerUserSettings.* / LambeerSettingsRules.h [G4 UI-CORE-008 behavior pass; G4.4 Night Ops Option B owner-accepted; Text Scale locked 1.0] │ └─ LambeerServerBrowserScreen.* / LambeerGroupScreen.* └─ Legacy/ [optional transitional namespace, no asset move] Content/Lambeer/UI/ ├─ Common/Styles/ DA_UITheme, CommonButton/Text styles [Proposed] ├─ Common/Icons/ T_UI_* imported from RawResource/UI/Icons/ [Proposed] ├─ Common/Input/ CommonInput controller data + action data [Proposed] ├─ HUD/ WBP_UIRoot, WBP_HUDRoot, HUD child widgets; Textures/T_UI_HUD_* [G4.3 Night Ops revision 3 integrated and owner-accepted] ├─ Menus/ WBP_PauseMenu + WBP_Settings [G4 behavior pass; G4.4 Night Ops Option B owner-accepted]; Main/Save/Server/Character/Spawn remain later gates ├─ Inventory/ existing assets + context/transfer screens [Mixed] ├─ Map/ WBP_WorldMap, T_WorldMap_Temporary (1024×576 temp image), WBP_DeathRespawn [G4 UI-CORE-004 2026-09-12; UI-CORE-006 WBP_DeathRespawn 2026-09-12] ├─ Crafting/, Building/, Weapons/, Social/, Settings/ [Proposed] └─ ControllerGlyphs/ [Verified existing; preserve] Config: Lambeer.uproject, Lambeer.Build.cs, DefaultEngine.ini, DefaultGame.ini Input: Content/Lambeer/Core/Input/Actions/ and IMC_Default
WBP_HUD, WBP_Inventory or legacy subsystems until the new root loads, screen activation works, asset references are redirected, cook succeeds, and the user records the matching PIE gate as passed.ชื่อด้านล่างเป็น target contract จาก feature spec; implementation must first search for an existing gameplay-owned equivalent and reuse it where semantics match.
| Contract | Producer / authority | Consumer | Implementation rule |
|---|---|---|---|
FUIHUDSnapshot | Local adapter reading GAS/inventory/aim | HUD root | Normalized values + availability flags; no replicated duplicate. |
FUIWeaponHandState | Held/combat components + client knowledge mask | Hand cards | Observed chamber/mag data is separate from hidden server truth and invalidated on unknowable changes. |
FInteractionPromptState | UInteractionComponent | Prompt widget | Actor/target ID, action, label, quantity, hold, denied reason, alternatives; server still validates execution. |
FUIMapMarker | Marker service; server for shared, local for filter state | Compass/minimap/map/spawn | Stable MarkerId, category, world position, visibility scope, source entity, expiry. |
FCraftingQueueEntry | Player/station crafting authority | Crafting screen/queue | Persistent server record with reserved inputs and recovery state. |
FMagazineLoadPlan | Weapon/magazine authority | Planner modal | Server validates ammo compatibility/capacity; pure function builds preview fire order. |
FWorldSaveSummary | Local save index service | Save select/Main Continue | Summary only; corrupt/incompatible state is explicit. |
FServerBrowserEntry | Online session/backend adapter | Server browser | Session IDs remain opaque; favorite is local/user preference. |
FUIAchievementEntry | Per-character/server progression authority | Achievement screen/toast | Catalog/reward payload blocked by TBD-E2F4910C. |
FGroupActivityLogEntry | Server group registry | Group screen | Actor/action/target/event type; retention blocked by TBD-HUD-UI-007. |
OnHUDSnapshotChanged(const FUIHUDSnapshot&) OnInteractionPromptChanged(const FInteractionPromptState&) OnObservedWeaponInfoChanged(ELambeerHeldHand, const FUIWeaponHandState&) OnMapMarkersChanged(const TArray<FUIMapMarker>&) OnCraftQueueChanged(FGuid QueueId) OnAchievementUnlocked(FName AchievementId, const FRewardPayload&) OnGroupActivityLogged(const FGroupActivityLogEntry&) OnInputMethodChanged(ECommonInputType, FName GamepadName)
PIPE-ROADMAP P00–P31 is the cross-system production schedule. Preserve the strict sequence G4 → G4.2 → G4.3 → G4.4 → G5. G4.4 was added after the owner selected the Pause/Settings Option B presentation on 2026-09-14; its early implementation does not bypass G4.3 acceptance. After G5, G6 and G7 are scheduled per system/backend dependency; squad and boss cooperation can be delivered before Skills/Vehicles. This supersedes an interpretation that every G6 task must close before any G7 task starts.
G6 weapon work maps to P11, crafting to P15, building to P16, boss to P18, progression to P21 and vehicle to P23. G7 squad/chat/voice maps to P19; remaining clan administration/territory scope maps to P22. UI-SOC-001/002 retain their IDs and full scope: a squad-only increment is partial until the clan work is accepted. G6/G7 aggregate completion still requires every task’s evidence; a backend-blocked shell is not an implemented gameplay system. G8 final acceptance follows aggregate closure.
Task statuses below remain authoritative for their recorded evidence. The roadmap separately reports concurrent source changes as unverified implementation, never as a PIE or gate pass.
ไม่มี calendar dates ตาม roadmap หลัก แต่ละ gate ต้องผ่าน exit criteria ก่อนเปิดงานที่พึ่งพา gate ถัดไป งาน screen ที่ไม่พึ่ง backend สามารถทำ visual shell ล่วงหน้าได้โดยแสดง unavailable/preview state เท่านั้น
เก็บ evidence, approve visual direction, ระบุ TBD blockers และ freeze migration targets.
Exit complete: asset backup/redirect strategy และ acceptance matrix reviewed; known Quick Slot drag gap routed to G3.Plugin/modules, viewport client, C++ root/layers, activatable base, routing, legacy CommonUI Accept/Back input data, Editor/Game compile, Windows cook and all three G1 Widget Blueprints are implemented. Unreal MCP verified the saved assets and the owner confirmed the complete requested PIE matrix, including modal-first Back behavior.
Exit: satisfied; proceed to G2.Theme, typography, buttons, icons, fonts and localization are implemented. Owner confirmed 5.2 glyphs, HUDScale, SafeZoneScale, TextScale and Thai Gallery culture switching.
Exit: satisfied for KBM/design-system; Xbox/PlayStation hardware checks remain deferred/unverified. Proceed to G3.8-stat layout, reticle, hands, quick slots, compass/minimap, prompt and screen effects. Owner reported HUD close checklist 1–8. Rain presentation is HUD droplets + UI_G3SetRain.
Owner reported skeletal L1810 world/held/back visuals and magazine load/install/remove. Wet-look remains deferred until materials expose WetAmount. Rain VFX stays out. Does not reopen G3.
UI-HUD-015 and UI-HUD-016. UI-HUD-017 stays deferred.Inventory command/lifecycle foundation, world map, death/spawn, pause and settings. Owner reported UI-CORE-001 and UI-CORE-002 passed 2026-09-12 (Tab toggle, Worn slots, clothing pickups; commands already passed 2026-09-11). Owner-approved Inventory presentation moved under preserved UI-CORE-003 to G4.2. Owner reported UI-CORE-004 passed 2026-09-13 including the zoom-clip retest. Owner reported UI-CORE-005 passed 2026-09-13. Owner reported UI-CORE-006 Last Bed and four-town Fresh Spawn passed 2026-09-13. Owner reported UI-CORE-007 dedicated-server pause 2026-09-12 and standalone PAUSED 2026-09-13. Owner reported UI-CORE-008 passed 2026-09-13 (Thai settings labels, Display Revert, HUD Scale/Safe Zone, no Text Scale control). Xbox/PlayStation remain deferred.
Night Ops designer chrome and its single focus-mask texture are saved; the former Rescue texture pack was removed after referencer checks. Source corrections preserve the existing layout, Q1/Q2 and hand/back routes. The owner passed the final presentation plus drag, split, sort, drop, hand/Q1/Q2 and Player/Target transfer. Search failed and was removed by explicit owner decision. Development Game/Editor builds, the field-free Widget Blueprint compile/save/readback and focused non-PIE automation 3/3 passed. The owner then confirmed the Search-free header and retained layout passed.
Exit: closed; proceed to G4.3.Runs after G4.2 and before G4.4. Owner-correction revision 3 preserves the completed G3/G4 behavior contracts; native build, HUD automation 24/24 and five affected Widget Blueprint compile/save/readback checks pass. The owner reported the full PIE checklist passed.
Exit: satisfied;UI-HUD-018 and G4.3 are closed.Owner-selected Option B is implemented as a left tactical Pause rail and wide Settings workbench. Native build, HUD automation 24/24 and both Widget Blueprint compile/save/readbacks pass without changing the closed G4 behavior contracts. The owner reported the full PIE checklist passed.
Exit: satisfied;UI-MENU-001 and G4.4 are closed, making G5 the next eligible gate.Owner selected Option C “Survivor Dossier.” Native implementation and Widget Blueprint readback remain in place. On 2026-09-16 the owner reported UI-FE-001, UI-FE-003, UI-FE-004, UI-FE-005, UI-FE-006, UI-FE-007 and UI-FE-009 passed, including remaining Character Creation visual checks, remaining persistence/restart/rejoin checks, dedicated Pause/Exit/restore and Server Browser Refresh/Join. UI-FE-002 was already complete. Dedicated/listen persistable worlds advertise a Null/LAN session; Pause Exit to Main Menu is visible on dedicated clients; join appends LambeerPlayerKey. Owner reported extra-client first-time Character Creation restores the hip follow camera. UE 5.8 Play As Client is the dedicated topology; one-process PIE lists that host by listen port. Steam metadata, Feedback URL and the production gameplay destination remain blocked on UI-FE-008. This does not close G5.
Crafting, building, workbench/mag planner, skills, achievements, vehicle and boss.
Exit: each screen is wired to authoritative interface or visibly backend-blocked.Group management, logs, chat and voice controls.
Exit: permissions, privacy controls and channel/failure states validated.English/Thai, semantic palettes, rebinds, scalability, automated checks, cook/package.
Exit: DoD matrix complete; user records final PIE evidence.| ID | Gate | Status | Lane | Work item | Files / assets | Dependency | Exit evidence |
|---|---|---|---|---|---|---|---|
UI-PLN-001 | G0 | Complete | Design | Resolve Quick Slot 1–2 vs Back Weapon 1–2 collision/restore semantics. | FEAT-HUD-UI | Owner decision recorded 2026-09-06. | Slots 1–2 are exclusively reserved for Back Weapon 1–2; no alternate binding or manual-binding restore state. |
UI-PLN-002 | G0 | Complete | Design | Approve visual tokens, layouts and 64-icon solid/silhouette kit. | RawResource/UI/Icons/ | Owner approval recorded 2026-09-06. | Visual system and complete 64-icon kit marked confirmed in FEAT-HUD-UI. |
UI-PLN-003 | G0 | Complete | Design | Select Thai-capable font file and verify license/repository path. | RawResource/Fonts/Google_Sans/ → /Game/Lambeer/UI/Common/Fonts/FF_UI_Primary | Owner approval, local glyph audit, embedded OFL metadata, official source repository, and retained OFL.txt. | Google Sans Regular/Medium/SemiBold/Bold approved; Thai coverage and SIL OFL 1.1 evidence verified. |
UI-PLN-004 | G0 | Complete | C++ | Capture current compile state, asset references and UI configuration before migration. | Lambeer.uproject, Build.cs, Config, existing UI C++/assets | None | Unreal MCP reference audit and Development Game build succeeded; owner reported the clean Editor rebuild passed after the prior DLL lock was removed. |
UI-PLN-005 | G0 | Complete | QA | Record current HUD/inventory/interaction behavior in PIE for regression reference. | Existing maps/widgets; screenshots under Documentation/assets/evidence/hud-ui-g0/ | Only user may run PIE | Three owner-supplied captures retained; Hand 1/Hand 2/Pocket drag succeeds, Quick Slot drag fails, and the unverified interaction/input cases are explicitly bounded. |
UI-FND-001 | G1 | Complete | C++ | Enable CommonUI plugin and add CommonUI/CommonInput module dependencies. | Lambeer.uproject, Source/Lambeer/Lambeer.Build.cs | G0 baseline | Editor and Development targets compile without missing module errors. |
UI-FND-002 | G1 | Complete | C++ | Configure UCommonGameViewportClient and verify project startup uses it. | Config/DefaultEngine.ini | UI-FND-001 | Viewport class verified in the owner-run G1 runtime matrix. |
UI-FND-003 | G1 | Complete | C++ | Create ULambeerUIManagerSubsystem : ULocalPlayerSubsystem. | Source/Lambeer/UI/Common/LambeerUIManagerSubsystem.* | UI-FND-001 | Root creation and layer ownership passed the owner-run G1 runtime matrix. |
UI-FND-004 | G1 | Complete | C++ | Create root class and typed layer accessors. | LambeerUIRootWidget.* | UI-FND-003 | HUD/Screen/Modal/Toast layers resolve and operate in verified paint order. |
UI-FND-005 | G1 | Complete | Editor | Create WBP_UIRoot with named layer hierarchy. | /Game/Lambeer/UI/HUD/WBP_UIRoot | UI-FND-004 | Blueprint compiles; every BindWidget name matches C++. |
UI-FND-006 | G1 | Complete | C++ | Create ULambeerActivatableWidget with input config, Back and initial-focus contract. | LambeerActivatableWidget.* | UI-FND-001 | Top screen/modal focus and deterministic modal-first Back order passed PIE. |
UI-FND-007 | G1 | Complete | C++ | Implement push/pop APIs by layer tag and soft class reference. | LambeerUIManagerSubsystem.*, LambeerUIActionTypes.h | UI-FND-004/006 | Screen/modal push-pop and duplicate-modal policy passed the requested G1 checks. |
UI-FND-008 | G1 | Complete | C++ | Centralize cursor, gameplay mapping suppression, focus restoration and SP/MP pause request. | UI manager + LambeerPlayerController.* | UI-FND-007 | Final-layer input restoration and the requested standalone/multiplayer pause checks passed. |
UI-FND-009 | G1 | Complete | C++ | Turn existing HUD/inventory/character subsystems into temporary facades that route to UI manager. | Source/Lambeer/UI/Lambeer*Subsystem.* | UI-FND-007/008 | The requested G1 compatibility/regression checks passed. |
UI-FND-010 | G1 | Complete | QA | PIE smoke: dummy primary screen + modal with KBM/Xbox/PlayStation. | WBP test screen/modal | UI-FND-001–009 | Owner reported focus, Back, cursor, restoration and world-pause checks passing on 2026-09-07. |
UI-DSN-001 | G2 | Complete | Editor | Import approved 64 SVG icons as tintable UI textures. | RawResource/UI/Icons/ → /Game/Lambeer/UI/Common/Icons/T_UI_* | Approved source kit; Unreal MCP import via 256×256 transparent raster intermediates | Unreal MCP verified all 64 assets and required UI texture settings. |
UI-DSN-002 | G2 | Complete | Editor | Create theme, button, text, tab, list-row, progress and modal style assets. | /Game/Lambeer/UI/Common/Styles/, WBP_G2_ComponentGallery | UI-PLN-002/003 | Assets compile; Google Sans Thai rendering passed owner PIE step 5.2 on 2026-09-08. |
UI-DSN-003 | G2 | Deferred | Editor | Create CommonInput controller data for Xbox and PlayStation from verified glyph assets. | /Game/Lambeer/UI/Common/Input/, existing ControllerGlyphs | UI-FND-001 | Assets are saved; physical controller validation is deferred until hardware is available. |
UI-DSN-004 | G2 | Deferred | C++ | Expose input-method change event and preserve focused semantic control on device switch. | UI manager/common widgets | UI-DSN-003 | Development Game compiles; physical Xbox/PlayStation focus evidence is deferred. |
UI-DSN-005 | G2 | Complete | Editor | Import approved Google Sans faces and configure composite/fallback font. | RawResource/Fonts/Google_Sans/ → /Game/Lambeer/UI/Common/Fonts/FF_UI_Primary | Resolved TBD-HUD-UI-002 | Font assets/bindings verified; owner PIE step 5.2 and Thai Gallery culture switching passed on 2026-09-08. |
UI-DSN-006 | G2 | Complete | C++ | Implement centralized DPI, HUD scale, safe-zone and text-scale application. | UI manager + root presentation settings | UI-FND-005 | Owner confirmed HUDScale, SafeZoneScale and TextScale on 2026-09-08. No approved maximum HUD scale or overlap policy is established. |
UI-DSN-007 | G2 | Complete | Design | Create English source string table keys for all navigation, states and errors; add Thai translations. | ST_UI_Common_EN, ST_UI_Common_TH | Approved copy/font | 24 keys and locres are complete; owner confirmed the four bound Gallery samples switch English/Thai on 2026-09-08. |
UI-HUD-001 | G3 | Complete | C++ | Create UI snapshot types and event-driven HUD adapter. | LambeerUITypes.h, HUD adapter/subsystem | G1 | Snapshot changes only when source state changes; unavailable fields are explicit. Owner reported eight GAS-colored bars 2026-09-10. |
UI-HUD-002 | G3 | Complete | Backend | Add gameplay-owned Energy, Sleep and Immunity attributes/events. | LambeerAttributeSet.* and survival system | Canonical survival design | Attributes replicate this session; approved drain/regen ticks; owner reported bed-sleep PIE 2026-09-09; persistence was not invented. |
UI-HUD-003 | G3 | Complete | C++ | Refactor status bars from Tick polling to attribute delegates; support eight bars. | LambeerStatusBarsWidget.*, WBP_StatusBars | UI-HUD-001/002 | No persistent gameplay polling; 8 normalized values render without numbers. Owner reported bars no longer gray 2026-09-10. |
UI-HUD-004 | G3 | Complete | C++ | Remove HitMarker field/API and all bindings. | LambeerHUDWidget.*, WBP_HUD | Confirmed no-hit-feedback rule | C++ path removed; WBP_HUD HitMarker deleted via MCP; owner reported no HitMarker 2026-09-10. |
UI-HUD-005 | G3 | Complete | Editor | Create WBP_HUDRoot and child hierarchy with actual viewport-edge anchors. | /Game/Lambeer/UI/HUD/WBP_HUDRoot | G2, UI-HUD-001 | Root and child WBPs compiled/saved via MCP after Editor reopen; all BindWidget names bound. Owner HUD close checklist 1–7 used this root. |
UI-HUD-006 | G3 | Complete | C++ | Implement contextual status list ordering by severity/time and non-hidden critical overflow. | Status presentation model/widget base | Gameplay status tags/events | C++ sort/overflow exists; onset uses replicated server world time. Owner reported status injectors 2026-09-08. |
UI-HUD-007 | G3 | Complete | C++ | Replace heading text with compass tape and shared marker projection. | LambeerCompassWidget.*, map marker service | FUIMapMarker contract | C++ tape + MCP Overlay_Tape; owner reported marker diamonds 2026-09-08. Owner correction 2026-09-14: look-right from N is HUD east on tape and map/minimap symbols; WorldYawToHudYaw plus east-is-right disc/UV X. Owner PIE of that mapping is pending. |
UI-HUD-008 | G3 | Complete | C++ | Implement minimap view model, filters and player heading. | Map service + minimap widget base | UI-HUD-007 | C++ heading disc + shared markers; WBP_Minimap compiled/saved. G3 used a direction ring. G4 scales distance with a 50 m implementation clamp and paints a north-up temporary map image; still not an approved radar radius. Owner reported marker diamonds 2026-09-08 and the north-up / walk-only diamond retest 2026-09-12. |
UI-HUD-009 | G3 | Complete | Backend | Add item handedness to Data Asset contract and enforce atomic two-handed occupancy. | LambeerItemDefinition.h, held/equipment components, item assets | Per-item Data Asset rule; user asset edits | C++ default OneHanded + occupancy; sledgehammer TwoHanded owner-reported 2026-09-09. Remaining production DA tagging is not a G3 HUD blocker. |
UI-HUD-010 | G3 | Complete | C++ | Migrate Quick Slots 8→10, reserve display slots 1–2 for Back Weapon 1–2, bind 1–0 actions and present both hands. | Equipment types/component, PlayerController, input assets, HUD/inventory | UI-HUD-009 + resolved TBD-HUD-UI-001 | C++ contract and Wood assignment are implemented; owner reported unified Q1–Q0 on 2026-09-08 and UI_G3GiveBackWeapons keys 1/2 on 2026-09-10. |
UI-HUD-011 | G3 | Complete | C++ | Implement reticle state machine; ADS hidden; no damage confirmation. | Aim/combat events + reticle widget base | Existing aim component | Deterministic mapping in C++; owner reported ADS hides reticle 2026-09-10 and throw/sledgehammer melee 2026-09-09. |
UI-HUD-012 | G3 | Complete | C++ | Replace text-only prompt event with structured prompt state and projected placement. | InteractionComponent.*, prompt host/widget | G2 glyphs | Structured state + HUD PromptHost compiled; owner reported quantity/denied 2026-09-10. HOLD waits for a real hold action; no G3 debug fixture. |
UI-HUD-013 | G3 | Complete | C++ | Implement low-health thresholds and blood/wet screen-effect timelines. | LambeerScreenEffectsWidget.*, effect events | Health/blood/wetness sources | Confirmed 30/20/10 and 2s/5s/5s timelines in C++; Sleeping dim alpha 0.22 owner-reported pass 2026-09-09. Nearby 2 m / LOS blood, low-health edges and rain-lens droplets owner-reported 2026-09-10. Rain VFX is out of G3. |
UI-HUD-014 | G3 | Complete | C++ | Implement observed chamber/magazine knowledge mask and invalidation rules. | Combat/weapon component + hand presentation | Weapon backend | L1810 instance ammo and timed field inspection are in source. Owner reported inspect pass 2026-09-10. Magazine-as-item is G3.2 UI-HUD-016. [CONFIRMED 2026-09-14] Observation is not persisted. Every fired round must clear chamber and magazine knowledge to UNKNOWN; hook that into the P10 fire path. Current invalidation still covers item/quantity identity changes. |
UI-HUD-015 | G3.2 | Complete | C++ | Extend item visual pipeline from StaticMesh-only to skeletal L1810 for world, held and back presentation. | Item definition visual fields, held/back visual components, SKM_L1810 | G3 L1810 item + existing StaticMesh pipeline | MCP readback 2026-09-11: DA_Item_L1810 skeletal fields point at SKM_L1810; Engine cube remains the pickup collision proxy. Owner reported world/held/back skeletal visuals 2026-09-11. Grip pose remains unpolished content. |
UI-HUD-016 | G3.2 | Complete | Backend | Magazine-as-item install for L1810 using the existing magazine mesh. | Firearm stack, magazine item, L1810_Magazine | G3 chamber/magazine counts on the firearm stack | New L1810 stacks have no mag. MCP created/saved magazine and 9x19 Data Assets and sandbox pickups 2026-09-11. Owner reported load, 3 s install, move-cancel, unload and remove on 2026-09-11. |
UI-HUD-017 | G3.2 | Blocked — deferred | Editor | Map confirmed WetAmount scalar onto materials for a visible wet look. | Character/item materials that expose WetAmount | Confirmed wetness scalar; mapping values remain TBD | Owner deferred: current L1810/magazine/MetaHuman materials have no WetAmount parameter. Do not invent roughness/albedo/drip numbers. |
UI-CORE-001 | G4 | Complete — owner-reported Tab open/close 2026-09-12; Escape still works; no RegisterUIActionBinding crash | C++ | Convert inventory screen to activatable lifecycle without losing existing assignment logic. | LambeerInventoryWidget.*, subsystem facade | G1 | Open/close, delegate cleanup and focus restoration pass; no direct input-mode ownership. |
UI-CORE-002 | G4 | Complete — owner-reported commands 2026-09-11; worn slots and clothing pickup/equip 2026-09-12. Search was removed by owner decision 2026-09-14. Take All/Transfer All presentation stays UI-CORE-003 in G4.2 | Backend | Add validated Split, quantity Drop, Use, Equip, Sort, Take All and Transfer All commands; Inventory Search is excluded. | Inventory/equipment components, LambeerInventoryCommandRules.h, inventory widget context menu | Inventory feature rules | Server rejects invalid/stale indices via ExpectedItemId and preserves item-instance state. |
UI-CORE-004 | G4 | Complete — owner-reported pan/zoom/center, ping, filters, Tab switching and zoom-clip retest 2026-09-13; north-up minimap / frozen death diamond 2026-09-12 | C++ | Build shared map screen/view model with category toggles, pan, zoom, center and ping. | LambeerMapScreen.*, LambeerMapSubsystem.*, LambeerMapPresentation.*, WBP_WorldMap, WBP_Minimap, T_WorldMap_Temporary, marker service, ALambeerPlayerState ping | UI-HUD-007/008 | Full map starts revealed; filters are local; shared ping is server validated; zoomed paint stays inside the map panel. |
UI-CORE-005 | G4 | Complete — owner-reported pass 2026-09-13; nested dump / loot-panel / HUD refresh already passed 2026-09-12 | Backend | Provide death/respawn state and death-marker lifecycle events. | LambeerDeathTypes.h, LambeerDeathRules.h, LambeerDeathBag.*, ALambeerPlayerState death record, ULambeerAttributeSet lethal Health, ULambeerSurvivalComponent last slept bed | Gameplay backend | Marker clears on despawn or empty bag; killer/cause/location are authoritative. Worn-container contents stay nested in the dropped item. Interact opens loot panels. Respawn clears blood/low-HP overlays. G4 had no authored despawn timer. P07 2026-09-14: death bags persist with a 24-hour remaining world-up despawn; see TECH-NETWORK-ARCH. Last bed is last Sleep start. |
UI-CORE-006 | G4 | Complete — owner-reported Last Bed after Sleep and four-town Fresh Spawn 2026-09-13; immediate-respawn close 2026-09-12 | C++ | Create full-map spawn/death screen with last bed or Fresh Spawn and four-town flow. | LambeerDeathScreen.*, LambeerDeathSubsystem.*, LambeerSpawnRegion.*, WBP_DeathRespawn | UI-CORE-004/005 | No sleeping-bag option; invalid/occupied choice reports reason and remains selectable only when valid. Sandbox towns are not production geography. P07 2026-09-14: loading a dead player record reopens this screen instead of a locked corpse. |
UI-CORE-007 | G4 | Complete — owner-reported dedicated-server pause 2026-09-12; standalone PAUSED/world-pause 2026-09-13 | C++ | Create pause/menu policy using session type rather than client assumption. | LambeerPauseRules.h, LambeerPauseScreen.*, LambeerPauseSubsystem.*, WBP_PauseMenu | G1 | SP pauses; MP shows “WORLD CONTINUES…” and only blocks local controls. World pause is NM_Standalone only, not a client/host assumption. |
UI-CORE-008 | G4 | Complete — owner-reported 2026-09-13: language/font, categories, stacking, HUD Scale/Safe Zone, Display Revert; Text Scale removed from G4 Settings (locked 1.0) and confirmed absent after rebuild | C++ | Create settings model with staged apply/revert and per-category adapters. | LambeerUserSettings.*, LambeerSettingsRules.h, LambeerSettingsScreen.*, LambeerSettingsSubsystem.*, WBP_Settings | G2 | Invalid unsupported settings cannot persist; risky display changes can revert safely. G4 does not persist player Text Scale. |
UI-CORE-003 | G4.2 | Complete — owner-reported Night Ops visual, retained-interaction and field-free header PIE pass 2026-09-14 | Editor | Implement Character + Container Focus inventory, context/split presentation and side-by-side Player/Target transfer layout using the Night Ops visual source while preserving retained behavior; Inventory Search is excluded. | WBP_Inventory, WBP_InventoryContainer, WBP_InventorySlot, WBP_ContainerTransfer, LambeerInventoryWidget.*, LambeerInventoryPresentation.h, LambeerContainerTransferWidget.*, RawResource/ConceptReference/Inventory_UI_NEW.png, RawResource/UI/Inventory/UMG/NightOps/ui_inventory_night_ops_focus_corners.png | Every G4 task and G4 exit criterion complete | Night Ops brush tokens and focus mask saved with no Rescue references; Development Game/Editor builds, field-free WBP_Inventory compile/save/readback and three focused non-PIE tests pass. Owner KBM PIE accepted the corrected presentation, retained drag/command/transfer interactions and Search-free header. Search was removed after its sole failure. Controllers are deferred until hardware. |
UI-HUD-018 | G4.3 | Complete — owner-reported full revision-3 PIE pass 2026-09-14 | Editor | Implement HUD frame, segmented Stats, minimap, reticle and screen-effect presentation without changing the completed G3/G4 gameplay contracts. | WBP_HUDRoot and HUD child widgets; RawResource/UI/HUD/UMG/NightOps/*.png; /Game/Lambeer/UI/HUD/Textures/NightOps/T_UI_HUD_NightOps_* | G4.2 complete; G4.3 precedes G4.4 | Six accepted textures have verified UI settings/alpha/runtime caps; revision-3 native build and HUD automation 24/24 pass; five affected widgets compile/save/read back cleanly; the owner reported the complete G4.3 PIE checklist passed. Controllers remain deferred until hardware and are outside this closure. |
UI-MENU-001 | G4.4 | Complete — owner-reported full Option B PIE pass 2026-09-14 | C++ | Apply the Night Ops Tactical Side Rail presentation to Pause and Settings while preserving their completed behavior. | LambeerPauseScreen.*, LambeerSettingsRules.h, LambeerSettingsScreen.*, WBP_PauseMenu, WBP_Settings, RawResource/UI/Menus/Concepts/NightOps/ | G4 behavior and G4.3 complete | 340×820 Pause rail and 1480×820 Settings workbench are built with resource-less Night Ops chrome. The former world-continues warning is absent; language choices render white as English/ภาษาไทย while persisting en/th. Editor build, HUD automation 24/24 and both Widget Blueprint compile/save/readbacks pass. The owner reported the complete dedicated-server/Standalone Pause, Settings, stacking and responsive EN/TH PIE checklist passed. |
UI-FE-001 | G5 | Complete — owner-reported PIE pass 2026-09-16 | C++ | Create frontend root and Main Menu activatable screen. | LambeerFrontendSubsystem.*, LambeerMainMenuScreen.*, WBP_MainMenu | G1/G2; selected Option C | Continue and unavailable Feedback expose explicit reasons; Feedback can open only a configured HTTP(S) URL. Native build and Widget Blueprint compile/save/readback pass. Configured Feedback URL remains deferred on UI-FE-008. |
UI-FE-002 | G5 | Complete — P07 backend and owner restart/rejoin PIE 2026-09-14 | Backend | Implement local world/save index and last-world pointer. | USaveSubsystem, USQLiteSaveBackend, FLambeerWorldSaveSummary, ULambeerUserSettings | Resolved TBD-HUD-UI-003: embedded NM_Standalone; P07 SQLite world store | Create/list/rename/delete/open and missing/corrupt/incompatible probes work without UI owning save bytes. Remembered world lives in client settings. Headless Lambeer.Persistence 6/6. Screens that consume the index stay UI-FE-001/UI-FE-003. |
UI-FE-003 | G5 | Complete — functional owner PIE pass 2026-09-16; reference-refresh visual PIE pending | C++ | Create Save World Select screen and Continue routing. | LambeerSaveWorldScreen.*, USaveSubsystem, USQLiteSaveBackend, WBP_SaveWorldSelect | UI-FE-002 | Start SP opens selection; Continue validates the remembered P07 world before travel. Create/list/rename/two-step delete and explicit invalid reasons are wired. The aliased probe path that falsely marked healthy worlds Missing is fixed. The owner-supplied P08_UI_Save_world.png refresh adds the Night Ops sidebar, visible selectable world cards and separate action rail without changing persistence authority. Native/automation/Widget Blueprint validation passes; refreshed visual PIE acceptance remains pending. Packaged production gameplay destination remains deferred on UI-FE-008/ROAD-P08-04. |
UI-FE-004 | G5 | Complete — owner-reported Null/LAN PIE pass 2026-09-16 | Backend | Create online session/server-browser adapter. | LambeerSessionSubsystem.*, LambeerSessionRules.h, FLambeerServerBrowserEntry | Online platform integration | Official/community, favorites, ping, population, search/filter metadata, cancellable refresh and join failures are supplied. Dedicated/listen persistable worlds advertise a Null/LAN session. One-process PIE lists those hosts by listen port instead of Null FindSessions. Owner reported Refresh/Join. Development uses OnlineSubsystemNull; Steam metadata/provider acceptance stays with TBD-HUD-UI-004/UI-FE-008. |
UI-FE-005 | G5 | Complete — functional owner PIE pass 2026-09-16; reference-refresh visual PIE pending | C++ | Create Server Browser screen with cancellable refresh/join flow. | LambeerServerBrowserScreen.*, WBP_ServerBrowser, LambeerPauseScreen.* | UI-FE-004 | Refresh/cancel, tabs, favorites, search/filter and join routing are wired; stale/full/version/timeout errors are explicit. The owner-supplied P08_UI_Server_browser.png refresh presents visible Favorite/Server/Players/Ping/Action rows with row-level Join while retaining advanced filters and provider-neutral opaque IDs. Native/automation/Widget Blueprint validation passes; refreshed visual PIE acceptance remains pending. Join appends LambeerPlayerKey. Pause Exit to Main Menu is visible on dedicated clients; Save stays standalone-only. Default browser tab is Community because unmarked Null/LAN dedicated sessions are Community. Owner reported dedicated Pause/Exit/restore and Server Browser Refresh/Join 2026-09-16. UE 5.8 Play As Client starts the dedicated world automatically. Optional Cancel/stale-join checks were not required for this close. Steam discovery stays with UI-FE-008. |
UI-FE-006 | G5 | Complete — owner-reported spawn recovery/rejoin PIE pass 2026-09-16 | Backend | Expose character-per-server existence, creation commit and persisted-position entry state. | ALambeerPlayerState, ALambeerGameMode, ULambeerWorldPersistenceSubsystem, ULambeerUIManagerSubsystem | Network/persistence backend | Server validates first appearance, then requires starter-town selection; existing characters skip creation and restore persisted state/position. bInitialSpawnChosen round-trips in P07 storage. Fresh entry explicitly requests Character Creation; the LocalPlayer rebuilds a root whose PlayerController or world changed across travel; pre-creation/Error states do not create player rows; and incomplete legacy rows re-enter creation. Player-scoped writes capture, commit and read back the supplied character. Early reads ensure storage readiness independently of BeginPlay; teardown preserves the final pawn record. See lifecycle correction. Owner reported Continue skip, spawn recovery, town/move/save/restart and rejoin passed. |
UI-FE-007 | G5 | Complete — owner-reported visual PIE pass 2026-09-16 | Editor | Create WBP_CharacterCreation child and preview hierarchy. | ULambeerCharacterCreationWidget, ULambeerUIManagerSubsystem, /Game/Lambeer/UI/Menus/WBP_CharacterCreation | Existing C++ base + G2 | Config soft path resolves; native layout exposes gender/preset/hair, skin HSV, eye RGB, live portrait and server-owned initial commit. Widget Blueprint compiles/saves/readbacks cleanly. Owner reported remaining visual checks passed, including lighting/framing, travel-flash, streamed-stage presentation, Escape-to-Main confirmation, exposure parity and commit/rejoin presentation. Final environment assets and art lighting/time of day remain later content. |
UI-FE-008 | G5 | Blocked — deferred later 2026-09-16 | C++ | Configure Steam metadata and external Feedback URL. | Config/platform settings | TBD-HUD-UI-004 | Invalid/missing URL is disabled with reason; no custom launcher/patcher. Owner postponed remaining Steam/Feedback/production-destination work after accepting the Single Player frontend slice. |
UI-FE-009 | G5 | Complete — owner-reported PIE pass 2026-09-16 | C++ | Add Single Player Save and Exit to Main Menu actions to Pause; require a fresh save before exit when the latest durable snapshot is older than 30 seconds. | LambeerPauseScreen.*, LambeerPersistenceRules.h, ULambeerWorldPersistenceSubsystem, WBP_PauseMenu | UI-CORE-007, P07 required-player snapshot path | Save always captures and read-verifies the owning player and remains standalone-only. A required-save failure cancels travel and remains visible in the Pause status line. Owner reported the Single Player Pause Save/Exit behavior passed. Dedicated Exit to Main Menu (no local save) later passed as UI-FE-005 on 2026-09-16. |
UI-SYS-001 | G6 | Blocked | Backend | Implement persistent player/station crafting queues with immediate reservation and cancel refund. | Crafting components/services | TBD-HUD-UI-005 for destruction overflow | Earlier queue entries reduce availability; logout/leave does not stop queue. |
UI-SYS-002 | G6 | Not started | C++ | Create searchable recipe/detail/queue screen. | LambeerCraftingScreen.*, WBP_Crafting | UI-SYS-001 | Player source uses carried inventory; station source uses only station storage. |
UI-SYS-003 | G6 | Not started | Backend | Expose building catalog, placement preview state, cost/tier/snap/rotation and failure code. | Building system interfaces | Building backend | Commit is server validated; UI preview cannot authorize placement. |
UI-SYS-004 | G6 | User-only | Editor | Create build selection/action radial widgets. | WBP_BuildRadial, WBP_BuildActionRadial | UI-SYS-003 | Cost/tier/snap/rotation/failure and Upgrade/Repair/Demolish/Authorize visible contextually. |
UI-SYS-005 | G6 | Not started | Backend | Implement pure magazine-plan expansion and authoritative load validation. | Weapon/magazine types and tests | Weapon backend | Head→Loop→Tail order; capacity may stop mid-loop pattern; incompatible ammo rejected. |
UI-SYS-006 | G6 | Not started | C++ | Create workbench screen, 3D preview contract and magazine planner modal. | LambeerWorkbenchScreen.*, target widgets | UI-SYS-005 + weapon actions | Default drag order and advanced planner preview match server sequence. |
UI-SYS-007 | G6 | Not started | Backend | Expose skill XP, level, progress and next-bonus data per character/server. | Skill progression service | P21 skill backend | Exact XP is authoritative; missing next bonus has explicit state. |
UI-SYS-008 | G6 | Blocked | C++ | Create achievement catalog/progress/reward screen and unlock toast. | Achievement screen/toast | TBD-E2F4910C | Cannot finalize catalog/reward action until canonical decision resolves. |
UI-SYS-009 | G6 | Not started | C++ | Create vehicle HUD adapter and widget. | FVehicleHUDState, WBP_VehicleHUD | Vehicle backend | Diegetic speed/RPM; overlay fuel/damage/gear/seats/access; storage via Inventory. |
UI-SYS-010 | G6 | Not started | C++ | Create boss health and inspected respawn-state presentation. | WBP_BossHUD, marker interaction | Boss backend + marker service | Timer hidden before inspection; occupied state uses exact approved copy. |
UI-SOC-001 | G7 | Blocked | Backend | Finalize and implement clan naming/tag, promote/kick authority and log retention. | Group registry/service | TBD-HUD-UI-007 | Leader/Officer/Member permissions have server tests and audit semantics. |
UI-SOC-002 | G7 | Not started | C++ | Create group screen: Create, Invite Inbox, roster, roles, activity log; no Search/Join. | LambeerGroupScreen.*, WBP_ClanSquad | UI-SOC-001 | Actor/action/target and death/online/offline entries render; permissions disable with reason. |
UI-SOC-003 | G7 | Not started | Backend | Provide text chat channels Server/Proximity/Squad with moderation/error state. | Chat service | Online backend | Channel membership and rejected sends are authoritative. |
UI-SOC-004 | G7 | User-only | Editor | Create chat panel/entry/channel widgets. | WBP_TextChat | UI-SOC-003 | Keyboard/controller entry, unread state and channel switching work without focus trap. |
UI-SOC-005 | G7 | Not started | Backend | Expose voice channel/PTT/speaker/per-player volume/mute/block state. | Voice service | Platform voice integration | Privacy actions persist at intended scope; unavailable microphone is explicit. |
UI-SOC-006 | G7 | Not started | C++ | Create voice panel and world speaking indicator; retain no squad roster HUD. | WBP_VoicePanel, speaking marker widget | UI-SOC-005 | Speaking state appears near character/map context without persistent roster panel. |
UI-ACC-001 | G8 | Not started | C++ | Implement semantic palette presets; never recolor raw meanings ad hoc. | Theme/settings service | G2 styles | Colorblind modes preserve icon/text/shape redundancy. |
UI-ACC-002 | G8 | Not started | C++ | Implement subtitle presentation for English/Thai; no environmental captions. | Subtitle widget/settings | Localization/audio events | Speaker/text timing wraps without clipping at scale extremes. |
UI-ACC-003 | G8 | Not started | C++ | Connect Reduce Camera Shake and Disable Flashing (black instead of white) settings. | User settings + camera/effect systems | Gameplay VFX integration | Every flash source follows centralized policy; critical information remains visible. |
UI-ACC-004 | G8 | Not started | C++ | Implement full rebind model, conflict detection and hold/toggle aim/crouch/sprint. | Enhanced Input settings service/screens | Input action inventory | Bindings survive restart and glyph display updates from resolved mapping. |
UI-QA-001 | G8 | Ready | QA | Add C++ automation tests for pure contracts: magazine expansion, marker lifecycle, quick-slot validation, setting serialization and queue math. | New test translation units under Source/Lambeer | Corresponding backend functions | Tests pass in non-PIE automation run; no UI screenshot claim. |
UI-QA-002 | G8 | Ready | QA | Add static checks for forbidden HitMarker bindings, hard-coded user strings and invalid soft widget paths. | Validation script/build checks | G3–G7 | CI/local validation reports actionable file/path and exits non-zero on violation. |
UI-QA-003 | G8 | User-only | QA | Run complete manual PIE matrix from FEAT-HUD-UI. | PIE checklist UI-001–012 | Only user may run PIE | User records results, build/config, screenshots and defect IDs. |
UI-QA-004 | G8 | Not started | QA | Compile Editor/Game/Server targets and run content validation + cook/package smoke. | Project targets/content | All required gates | No missing classes/assets, redirector errors or uncooked UI dependencies. |
UI-QA-005 | G8 | User-only | QA | Verify FHD/2K/4K, 16:10/21:9/32:9, EN/TH and KBM/Xbox/PlayStation matrix. | Packaged/PIE builds | Only user performs interactive verification | No clipping, overlap, focus trap or unreadable semantic state; evidence retained. |
No tasks match the current filters.
Screen IDs และหน้าที่เป็น canonical ใน FEAT-HUD-UI; ตารางนี้ชี้เฉพาะ implementation owner task และ gate เพื่อไม่ทำซ้ำ behavior specification
| Screen ID | Target Widget | Primary task(s) | Gate | Backend condition |
|---|---|---|---|---|
UI-SCR-MAIN | WBP_MainMenu | UI-FE-001, UI-FE-008 | G5 | Local-world summary + configured Feedback URL |
UI-SCR-SAVES | WBP_SaveWorldSelect | UI-FE-002, UI-FE-003 | G5 | Local save index |
UI-SCR-SERVER | WBP_ServerBrowser | UI-FE-004, UI-FE-005 | G5 | Online session adapter |
UI-SCR-CHAR | WBP_CharacterCreation | UI-FE-006, UI-FE-007 | G5 | Character-per-server service |
UI-SCR-SPAWN | WBP_SpawnMap | UI-CORE-004–006 | G4/G5 | Authoritative spawn eligibility |
UI-HUD-ROOT | WBP_HUDRoot | UI-HUD-001–014, UI-HUD-018 | G3 / G4.3 | Per-source availability flags; G4.3 presentation must preserve completed adapters |
UI-HUD-PROMPT | WBP_InteractionPrompt | UI-HUD-012 | G3 | Structured interaction state |
UI-HUD-BOSS | WBP_BossHUD | UI-SYS-010 | G6 | Boss/marker events |
UI-HUD-VEHICLE | WBP_VehicleHUD | UI-SYS-009 | G6 | Vehicle state provider |
UI-SCR-INVENTORY | WBP_Inventory | UI-CORE-001–003, UI-HUD-010 | G4 / G4.2 | Inventory/equipment/held commands |
UI-SCR-CONTAINER | WBP_ContainerTransfer | UI-CORE-002, UI-CORE-003 | G4.2 | Two authoritative inventories |
UI-SCR-CRAFT | WBP_Crafting | UI-SYS-001, UI-SYS-002 | G6 | Queue/reservation service |
UI-SCR-BUILD | WBP_BuildRadial | UI-SYS-003, UI-SYS-004 | G6 | Placement preview/provider |
UI-SCR-BUILD-ACTION | WBP_BuildActionRadial | UI-SYS-003, UI-SYS-004 | G6 | Server-authorized target actions |
UI-SCR-WORKBENCH | WBP_WeaponWorkbench | UI-SYS-005, UI-SYS-006 | G6 | Weapon action/compatibility service |
UI-SCR-MAG | WBP_MagazineLoadPlanner | UI-SYS-005, UI-SYS-006 | G6 | Magazine load validation |
UI-SCR-MAP | WBP_WorldMap | UI-CORE-004, UI-HUD-007, 008 | G3/G4 | Marker registry |
UI-SCR-SKILLS | WBP_Skills | UI-SYS-007 | G6 | Skill progression service |
UI-SCR-ACHIEVE | WBP_Achievements | UI-SYS-008 | G6 | TBD-E2F4910C |
UI-SCR-GROUP | WBP_ClanSquad | UI-SOC-001, UI-SOC-002 | G7 | TBD-HUD-UI-007 |
UI-SCR-CHAT | WBP_TextChat | UI-SOC-003, UI-SOC-004 | G7 | Chat service |
UI-SCR-VOICE | WBP_VoicePanel | UI-SOC-005, UI-SOC-006 | G7 | Platform voice service |
UI-SCR-DEATH | WBP_DeathRespawn | UI-CORE-005, UI-CORE-006 | G4 | Death/loot/spawn services |
UI-SCR-PAUSE | WBP_PauseMenu | UI-CORE-007, UI-MENU-001, UI-FE-009 | G4 / G4.4 / G5 | Session-type authority; Single Player required-player persistence; presentation cannot alter pause policy |
UI-SCR-SETTINGS | WBP_Settings | UI-CORE-008, UI-MENU-001, UI-ACC-001–004 | G4 / G4.4 / G8 | User settings/input services; G4.4 adds presentation only |
UI-CORE-002 send ExpectedItemId with the index and reject when that stack is missing or a different item. There is no generation token.For capture commands, UI/inventory diagnosis, per-process multiplayer profiling and before/after evidence, follow TECH-PERFORMANCE-PROFILING. This runbook adds no approved numeric budget or new PIE result.
ไม่มี numeric performance budget ที่อนุมัติ จึงใช้ structural rules และวัดจริงโดยไม่ตั้งตัวเลขเป้าหมายเอง
| Risk | Implementation control | Evidence |
|---|---|---|
| Per-frame HUD polling | Bind GAS/component delegates; use Tick only for visual interpolation and only while visible. | Unreal Insights trace + source review; no actor scans in widget Tick. |
| Large inventory/list rebuild | Diff by stable IDs, virtualize long lists where supported, defer thumbnails and cancel stale requests. | Profile worst verified inventory/catalog data when backend exists. |
| Map marker volume | Central registry, category filtering before widget creation, pooled marker widgets and distance/viewport projection. | Marker-count scenario derived from actual content; no invented count. |
| Soft asset load failure | Async load; loading/error state; no null dereference; log asset path once. | Missing-asset test with one intentionally invalid development fixture. |
| Device hot-swap | Update glyphs without rebuilding screen; restore focus by semantic control ID. | User PIE device-switch matrix. |
| Network disconnect/stale action | Cancel pending UI operation, return to safe frontend state, invalidate cached selection. | Disconnect/reconnect test with recorded result. |
| Thai text expansion | No fixed text-width assumptions; wrapping/min-width/ellipsis only where full label is recoverable. | EN/TH pseudo-long-string screen sweep. |
PIE-UI-001–005 on WBP_HUDRoot.PIE-UI-001…012.| Dimension | Required variants | Core assertions |
|---|---|---|
| Resolution | 1920×1080, 2560×1440, 3840×2160 | Scale, readability, no clip/overlap |
| Aspect | 16:9, 16:10, 21:9, 32:9 | HUD uses actual viewport edges; center content remains stable |
| Input | KBM now; Xbox/PlayStation deferred until hardware is available | Glyph, focus, Back, context and tabs; deferred device rows remain unverified |
| Language | English, Thai | Wrapping, fallback glyphs, subtitle readability |
| Session | Single Player, listen/local development if applicable, dedicated multiplayer | Pause/input blocking, authority, reconnect |
| State | Loading, Ready, Empty, Error, Stale, Denied | No blank or dead-end screen |
FEAT-HUD-UI; proposed asset is verified after creation.| ID | Status | Affects / decision | Does not block |
|---|---|---|---|
TBD-HUD-UI-001 | Resolved 2026-09-06 | Back Weapon 1–2 exclusively reserve display slots 1–2/internal indices 0–1; alternate bindings are rejected and no manual-binding restore state exists. | — |
TBD-HUD-UI-002 | Resolved 2026-09-06 | Google Sans is approved; 16 local TTFs have verified Thai coverage, embedded OFL metadata matches the official source, and RawResource/Fonts/Google_Sans/OFL.txt is retained. Target: /Game/Lambeer/UI/Common/Fonts/FF_UI_Primary. | — |
TBD-HUD-UI-003 | Resolved 2026-09-14 | Shipping SP uses embedded NM_Standalone authority. Save-list UI stays session-agnostic. Canonical persistence contract: TECH-NETWORK-ARCH. | — |
TBD-HUD-UI-004 | Open — Steam/Feedback still blocked | Steam metadata and working Feedback action | Accepted Single Player Main Menu layout, Continue/Save World Select, Character Creation visual, persistence/restart and Pause Save/Exit. Owner-reported Null/LAN dedicated Pause/Exit/restore and Server Browser Refresh/Join do not resolve this TBD. |
TBD-HUD-UI-005 | Open | Station-destruction refund overflow transaction | Queue UI and ordinary cancel/refund path |
TBD-E2F4910C | Open | Final achievement entries, thresholds, reward payload/action | Catalog shell, progress component and unlock-toast contract |
TBD-HUD-UI-007 | Open | Clan naming/tag, promote/kick and log retention implementation | Group screen layout and confirmed invite roles |
TBD-HUD-UI-008 | Resolved 2026-09-06 | Documented visual tokens, layouts, and 64-icon kit are approved for implementation. | — |
Plan source of truth: เอกสารนี้กำหนด implementation order, file impacts, gates และ verification evidence ส่วนพฤติกรรม player-facing ยังคง canonical ใน FEAT-HUD-UI และ gameplay authority/value อยู่ใน feature/technical docs ของระบบนั้น