Appearance
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
- 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.
- 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.
- 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.
- 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.
- 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.