Appearance
Shared Blueprint menu presentation — 2026-10-06
UE5.6.1 CL44394996, Win64 DX11. Extends the independently authored shared main/pause menus with optional model-driven identity, Begin/Resume labels and confirmation copy. Game Master's design/source/assets remain excluded. No inventory, MassForge or new core dependency. Core is unchanged from ProgressAnimation.
Actual implementation
Both saved menus have the normal editable ReadMenuText Blueprint function and RefreshMenuPresentation custom event. The helper uses public Get UI Model, Cast To IFPresentationData, Select Text, Text Is Empty, Branch and return nodes. Missing/wrong adapter, missing model and empty field take an explicit supplied fallback. Every Initialize Screen calls the parent and refreshes each field. The existing main identity graph is retained through a Sequence; current refresh covers both success and failure paths. No per-frame menu polling or automatic subscription to all optional configuration models.
Dialog creation still constructs fresh IFDialogData and binds its completion once per opening. Public model reads precede its Title/Message/ConfirmLabel setters. The saved gameplay requests, Back, async settings, focus and original Designer tree remain intact. Emberwatch supplies FrontEndBegin, FrontEndResume, PauseIdentity, ReturnPrompt, ReturnAction and QuitPrompt models; its existing FrontEnd title/introduction remains. Outpost supplies none of these and keeps its original fallbacks. No gameplay rules were added. Exact optional names, nodes, fallback editing and refresh recipe.
Editor-only ForgeExampleAuthoring.BindMenuPresentation and Tools/bind_menu_presentation.py create these ordinary saved graphs only in ForgeExamples. The full authoring pipeline includes the step. A marker avoids appending duplicate bindings; a conflicting developer function is preserved rather than overwritten. Raw before-binding menu assets are in AssetSnapshots/Before-MenuBinding. No reference project was resaved.
Failures, compile and source results
The initial editor build failed on an unavailable dynamic-cast accessor and a local Cast variable hiding the Cast template. Corrected to the actual failed pin and qualified template. Build-Example-UE56-MenuBinding failure retained; MenuBindingReady succeeds6.59s. The first QA build used nonexistent FindFPropertyChecked; corrected to guarded FindFProperty. MenuBindingReview failure retained; ReviewReady succeeds4.05s.
Create-MenuBinding-Blueprint-UE56 saves both normal functions/graphs with0errors/warnings. Compile-MenuBinding-AllBlueprints-UE56 loads/compiles exactly27 distinct owned Blueprint paths with0errors/0warnings/0failedloads. No extra Blueprint classes or engine cook-label changes.
All first MenuBinding-Source processes reached genre labels/dialogs and no-source reset, then exited3 because QA tried NewObject<UObject>, an abstract class. This was a fixture creation mistake, not an accepted product result. Replaced it with a concrete UIFPresentationData that does not implement IFDataSource. Build-Example-UE56-MenuBindingFixtureReady succeeds4.01s. Failed logs are preserved and rejected by the verifier.
All four MenuBinding-ReadySource-{RTS,RPG}-{Normal,Enlarged}-UE56.log pass current assertions at measured1280×720/default UI/text and800×600/150%UI/text. They exercise saved Settings/preview/Cancel, Begin/loading/cancel/failure/retry/HUD/pause/resume/return, original menu geometry, synthetic Down/Up/main Back and prior Settings focus restoration. New checks verify actual genre labels, pause caption, return title/message/confirmation and quit title. The same main instance is initialized with None, then a non-adapter, then its original source; fallbacks and identity recover without replacing the screen. Missing named models return a supplied fallback. RPG additionally tests an empty field, live Continue journey label through the saved refresh event, retained Settings focus, restoration of the original label and final geometry.
Inputs are synthetic Slate arrows/Enter/Back. Source/model/initial-focus/slider/lifetime operations are programmatic. No physical-device or native desktop interaction claim. The loading fixture's process-only delayed delegate remains scoped to cancellation; default retries use engine callbacks. Read LOADING_RUNTIME.md for the underlying fixture design.
Fresh package and actual cooked results
Fresh Packages/MenuBindingSlice, both maps: BuildCookRun20.87s/cook command7.87s/485saved478IoStore packages/0cookerrorswarnings. Package-MenuBinding-UE56.log records success. Exact UAT Log.txt is archived as AutomationToolLog.txt with exact FinalCopyWin64_UFSFiles.txt. All four MenuBinding-Cooked-{RTS,RPG}-{Normal,Enlarged}-UE56.log pass the same current flow/model/fallback/live-refresh/focus checks on the inner Windows/ForgeExamples/Binaries/Win64/ForgeExamples.exe.
Both MenuBinding-WorldCooked-{Normal,Enlarged}-UE56.log pass the current RPG saved Begin/Ward/Pause/Resume, real party model/bar/title, theme/rebind/stale-source/range/clear/anchor/return checks. This is a targeted regression after the RPG adapter gained menu models; it does not substitute for complete quest/production/audio/device acceptance.
Commands:
powershell
& Tools/run_loading_reviews.ps1 -Prefix MenuBinding-ReadySource
& Tools/run_loading_reviews.ps1 -Prefix MenuBinding-Cooked -PackagedExecutable '<workspace>/Evidence/Packages/MenuBindingSlice/Windows/ForgeExamples/Binaries/Win64/ForgeExamples.exe'
& Tools/run_world_reviews.ps1 -Prefix MenuBinding-WorldCooked -PackagedExecutable '<workspace>/Evidence/Packages/MenuBindingSlice/Windows/ForgeExamples/Binaries/Win64/ForgeExamples.exe'
python Tools/check_distribution_boundary.py --staging-manifest Evidence/Packages/MenuBindingSlice/FinalCopyWin64_UFSFiles.txt
python Tools/verify_reference_preservation.pyAuthoring uses installed UnrealEditor-Cmd.exe <canonical ForgeExamples.uproject> -run=pythonscript -script=<workspace>/Tools/bind_menu_presentation.py -unattended -NullRHI -nosplash -ddc=InstalledNoZenLocalFallback -abslog=<unique evidence log>. CompileAllBlueprints uses the entire -AllowListFile=Saved/BlueprintChecks/CustomizationAllowList.txt argument quoted. Packaging uses installed UE5.6 RunUAT BuildCookRun -project=<canonical project> -noP4 -platform=Win64 -clientconfig=Development -build -cook -stage -pak -archive -archivedirectory=<fresh archive> -map=/Game/Maps/ForgeOutpost+/Game/Maps/ForgePilgrimage -ubtargs=-NoHotReloadFromIDE -ddc=InstalledNoZenLocalFallback -utf8output.
Evidence and limits
MenuBinding-VerificationSummary.json records8 current menu flows,2 current cooked world regressions and27 owned compiled paths. Tools/verify_loading_review.py now requires current genre/fallback/refresh checks, alongside geometry/navigation/loading; it rejects error/ensure/Accessed None and missing complete results. Negative controls reject both the crashed fixture and the earlier green MenuPresentation-Cooked result that lacks new binding checks. A prior PASS is not current feature evidence.
Current source enlarged RPG main/pause/return and cooked enlarged main/return plus normal pause were visually inspected; six captures are preserved in Visual/MenuBinding-*.png. Journey labels, complete warning, choices and selected Settings focus fit. The primitive scenes, broader HUD/layout/animation/art direction still require polish. No release-readiness claim.
MenuBinding-Boundary.json passes137authored files/45own packages/2647exact staged targets/5546reference hashes. The full candidate source receipt is preserved in MenuBinding-DistributionManifest.json and all137 files rehashed unchanged after packaging. MenuBinding-ReferencePreservation.json verifies reference HEAD/status/changed-file/UI hashes unchanged. These checks do not establish visual originality or ownership rights. No commit/publication or release assembled.
Core unchanged: existing strict independent5.6/5.7/5.8 ProgressAnimation builds/loads remain the applicable core evidence. New menu bindings are tested5.6 only; previous newer-engine sample copies/archives predate them. Physical controller/touch/native switching/glyph/remap/disconnection/drift/jitter/audio, arbitrary/localized copy/safe areas/split-screen/minimum touch targets, true world-pause/concurrent UMG timing, other entry classes/tree/tile,10kentity/performance/serial-safe optional Mass integration and full newer-engine sample acceptance remain open. All new runs exit/cancel previews, unrelated desktop/native/reference sessions untouched. Goal ACTIVE; previous progress is preserved in Progress-before-MenuBinding.md.