Skip to content

Saved Blueprint UMG animation — 2026-10-06 ​

UE5.6.1 CL44394996, Win64 DX11. This slice adds an independently authored editable SurveyArrive timeline to the playable Watchpost survey. Its screen remains a saved Blueprint IFScreen; its actions/model remain the example-owned BP_WatchpostSource. Core adds no animation framework or game-specific base class. Game Master's exclusive design, animations/source/assets and all inventory mechanics remain excluded.

Actual implementation ​

The saved UMG animation targets SurveySurface.RenderOpacity:0.35 at0s,0.86 at0.12s,1 at0.24s; timeline range ends0.241s. A real Blueprint variable exposes the surface. BP_OnActivated stops/resets, then plays only when ReduceSurveyMotion is false. Play Animation uses Restore State true. Public OnPreferencesUpdated receives presented initial/live settings and stops/resets when Reduced Motion becomes true. BP_OnDeactivated stops/resets before the existing Release Entry graph. No latent exit delay or per-frame settings poll. Actual Blueprint nodes and authoring recipe.

ForgeAnimationAuthoring creates ordinary engine UWidgetAnimation/MovieScene/float-channel objects, the same editable asset types used by UMG's animation editor. Its editor module declares direct MovieScene/MovieSceneTracks dependencies; packaged runtime does not load that module. Tools/create_animation_example.py upgrades only the guarded own ForgeExamples project. Full create_blueprint_examples.py includes the new step. All27 owned Blueprint classes and the existing explicit cook label remain unchanged in count. Earlier raw survey asset preserved at AssetSnapshots/Before-SurveyAnimation/WBP_WatchpostSurvey.uasset; reference projects never resaved.

Runtime failures and fixes ​

  1. Initial authoring compiled C++ but asserted while wiring SurveySurface: the original surface was not a Blueprint variable. Actual node-pin logging exposed its empty getter. Marked it variable, compiled before node creation, then saved cleanly. Create-Animation/AnimationPins failures retained; Create-AnimationSurface and Create-AnimationRestore successful authoring logs report one animation,0 errors/warnings. The QA header also needed a direct UWidget forward declaration; failed AnimationReview build and repaired AnimationReviewReady build retained.
  2. First actual source runs crashed in SlateRHIRenderer DrawSlateRenderBatch with RenderBatch.NumIndices>0. The procedural progress leaf could submit degenerate lines during a layout change. Installed antialiased-line tessellation skips zero-length segments, leaving no indices. Core IFProgressWidget now rejects nonfinite/nonpositive allocated sizes and finite point arrays with no nonzero segment before submitting lines. Animation-Source failures retained. The same normal/enlarged flow then rendered successfully in Animation-Geometry; actual filled segments remain visible in final captures and model tests.
  3. Animation-Geometry showed a lifecycle failure despite engine exit0: Stop Animation followed by Set Render Opacity1 could leave a dim surface after the queued engine evaluation. Installed UE5.6 FWidgetAnimationState::Stop resets time to zero and queues a return-to-start evaluation. Play Animation Restore State true, with a baseline opacity1, repairs interruption without delaying navigation. Live Reduce Motion, Back and stale-write checks now pass.
  4. The interval ticker's supplied frame delta was unsuitable for accumulated stage elapsed time. Changed QA scheduling to explicit monotonic stage timestamps. A capture can stall rendering without advancing UMG playback; the first Restore normal test prematurely asserted completion from a fixed wall-clock delay. The final fixture waits for actual IsAnimationPlaying=false. Failed logs retained, not accepted as product proof.
  5. Visual review caught the Reduced screenshot being requested in the same stage as Back, showing the menu rather than the verified survey. Added a separate capture-hold stage before navigation. Final ReadySource/Cooked captures show the actual fully visible Reduced Motion screen.

Final source and exact cooked results ​

Animation-ReadySource-{Normal,Enlarged}-UE56.log and Animation-Cooked-{Normal,Enlarged}-UE56.log pass all current assertions at measured1280×720/defaults and800×600/150%UI and text. Runs use RenderOffscreen, synthetic Slate Enter/Escape, programmatic root/source setup and a reversible preference preview. They observe actual UMG playback/time/changing opacity; enable Reduced Motion while playback is active; activate the saved Blueprint action while motion is suppressed; disable Reduced Motion without spontaneous replay; close/release/reopen; use Back during active playback; check no later stale opacity write; wait for natural completion at opacity1; retain nested CommonUI focus; activate the same adapter again; open with motion already reduced; and remove the root while playback is active. Three sampled initial playback states per final run, minimum opacity0.350–0.351. Current cooked intermediate time0.054s/opacity0.543 and settled playing0/opacity1 are logged. These are state observations, not latency/performance guarantees.

Tools/run_animation_reviews.ps1 takes a unique Prefix and optional PackagedExecutable/EngineVersion/ProjectPath. Tools/verify_animation_review.py requires actual engine/version/viewport, every current lifecycle assertion, observed playback and one complete PASS, rejecting errors/ensures/Accessed None. Animation-InitialVerification.json retains a negative control: the exit0 Animation-Geometry-Normal failure is correctly rejected. Animation-VerificationSummary.json records the accepted current four animation flows,27-BP compilation and three independent core loads.

Compile-AnimationReady-AllBlueprints-UE56.log loads/compiles exactly27 distinct owned Blueprint paths,0 errors/warnings/failed own loads. Latest sample Editor build Build-Example-UE56-AnimationCaptureReady.log succeeds3.64s; prior Settled build3.62s. No plugin/example source or asset changed after the final build/package.

Fresh both-map Development Packages/BlueprintAnimationSlice: BuildCookRun22.42s/cook7.89s/485 saved packages/478 IoStore packages/0 cook errors/warnings. Exact UAT Log.txt is preserved as archive AutomationToolLog.txt, together with exact FinalCopyWin64_UFSFiles.txt. Command: installed UE5.6 RunUAT BuildCookRun -project=<canonical ForgeExamples.uproject> -noP4 -platform=Win64 -clientconfig=Development -build -cook -stage -pak -archive -archivedirectory=<fresh internal archive> -map=/Game/Maps/ForgeOutpost+/Game/Maps/ForgePilgrimage -ubtargs=-NoHotReloadFromIDE -ddc=InstalledNoZenLocalFallback -utf8output. Package-BlueprintAnimation-UE56.log records actual success. Cooked testing uses that archive's inner Windows/ForgeExamples/Binaries/Win64/ForgeExamples.exe.

The current source/exact cooked original customization flow also passes both sizes (Animation-CustomizationSource/Cooked-*-UE56.log), including saved theme/actions/focus, synthetic device changes behind a modal and root notification cleanup. Two current exact cooked world-entry regressions pass (Animation-WorldCooked-*-UE56.log), including real Ward model/title/bar updates, replacement/theme/range/pause/anchor/return cleanup. Earlier full loading/journal/production evidence belongs to its recorded revisions; it was not rerun without a relevant change to those implementations.

Visual review, boundaries and compatibility ​

Actual source/cooked arrival, settled and enlarged Reduced captures reviewed and copied into Visual/Animation-{Source,Cooked}-*.png. The card genuinely changes opacity, then fully reveals its text/buttons/filled segments; the enlarged reduced version wraps prose without hiding the count or return control. These images and runtime assertions establish this bounded animation/lifecycle slice. The primitive scene, broader HUD/menu layouts and complete choreography still need polish; no release-readiness claim.

Animation-Boundary.json passes137 authored source files/45 own packages/2647 exact staging targets against5546 reference hashes. Animation-ReferencePreservation.json verifies all reference HEAD/status/changed-file hashes and5546UI packages unchanged. Exact hash/membership checks do not detect transformed visual copies or establish licensing. The mandatory original-design policy still applies. No commit/publication or release assembled.

After the actual progress-renderer repair, fresh UE56/57/58-ProgressAnimation strict independent Editor Development/Game Development/Shipping builds pass43.94/46.34/44.38s. Each example/inventory/Mass-free host loads22 reflected core types, all10 original plugin assets and the current public APIs with0 errors/warnings. Logs BuildPlugin-UE*-ProgressAnimation.log, CoreHost-UE*-ProgressAnimation-Load.log and UE*-ProgressAnimation-CoreLoad.json. Earlier settings automation was not repeated for this paint guard. The new saved animation/example editor dependencies are tested on5.6 only; older5.7/5.8 sample customization proofs predate them.

All newly launched processes exit, preference previews cancel and unrelated native/reference/desktop sessions remain untouched. Last hardware evidence remains the17:23:33.667UTC XInput1.4 probe: four disconnected slots; non-XInput/touch not enumerated. Physical/native switching/glyph/remap/disconnection/drift, audible routing, arbitrary/concurrent timelines/exit choreography, true world-pause timeline timing, long localization/safe-area/split-screen, other entry classes/tree/tile, broader original presentation, newer-engine full sample/cooked checks and optional Mass/performance remain active gates. Goal ACTIVE; this checkpoint is not completion.

UIForge v0.1.0 · Blueprint and C++ development documentation.

Enlarged documentation image

Enlarged documentation image