acdream/src
Erik 51a5fe99ef fix(anim): hold the last frame at a cyclic seam instead of blending into frame 0 (Holtburg windmill flap-back); register AP-233
The Holtburg windmill (Setup 0x020003E5, cycle 0x0300061B) is a 60-frame
quarter turn that loops by 4-blade symmetry: frame 59 and frame 0 are the
same picture but 88.5 deg apart. BuildBlendedFrame wrapped the cyclic
node's next-frame index to frame 0, so the seam slerped 88.5 deg backwards
inside one 33 ms interval - the blades visibly flapped back every two
seconds.

Retail never blends animation frames at all: CPartArray::UpdateParts
(0x005190F0) applies get_part_frame(floor(frame_number)), holding every
authored frame for its interval and hard-cutting at the wrap. The
render-side blend now holds the boundary frame at BOTH ends of a node's
window - the same rule the #61 link-tail fix already applied to one-shot
nodes - so every seam is retail's cut while interior frames stay smooth
(the owner's choice over dropping the blend, 2026-08-23). Register row
AP-233 records the blend as the deviation it has been since the R1-P5
cutover.

Test: Advance_CyclicSeamHoldsLastFrameInsteadOfBlendingIntoFrame0 (fails
on the previous code at ~45 deg, passes held at 90 deg). Core 4,696/0,
App 6,068/0 hermetic (Release).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-23 10:36:47 +02:00
..
AcDream.App fix #425: pack resident budget is a 1080p ceiling that scales with pixel count; an explicit Apply retries a failed selection 2026-08-23 10:00:11 +02:00
AcDream.Bake build: make release restore reproducible 2026-08-18 10:29:00 +02:00
AcDream.Cli fix: make locale-independence real, not assumed — parsing, casing, comparison 2026-08-19 20:11:32 +02:00
AcDream.Content feat(quest): QT5/QT6 — the Journal panel, and the button that was already there 2026-08-21 15:12:05 +02:00
AcDream.Core fix(anim): hold the last frame at a cyclic seam instead of blending into frame 0 (Holtburg windmill flap-back); register AP-233 2026-08-23 10:36:47 +02:00
AcDream.Core.Net fix(journal): the location readout is a FIELD, refresh at the click, and Abandon works 2026-08-21 16:19:18 +02:00
AcDream.Headless feat(render): implement Campaign AR and terrain fidelity 2026-08-22 13:13:29 +02:00
AcDream.Launcher feat(plugins): enforce apiVersion; launcher plugins default ON with "none" opt-out 2026-08-20 21:28:04 +02:00
AcDream.Launcher.Core feat(plugins): enforce apiVersion; launcher plugins default ON with "none" opt-out 2026-08-20 21:28:04 +02:00
AcDream.Platform feat(render): implement Campaign AR and terrain fidelity 2026-08-22 13:13:29 +02:00
AcDream.Plugin.Abstractions fix(render): foliage wind keys on the DAT-classified WeatherKind, not the day-group index (Campaign VM VM6) 2026-08-23 01:07:54 +02:00
AcDream.Plugins.MossTank feat(render): implement Campaign AR and terrain fidelity 2026-08-22 13:13:29 +02:00
AcDream.Plugins.Smoke build: make release restore reproducible 2026-08-18 10:29:00 +02:00
AcDream.Runtime feat(journal): QJ1/QJ2 — the journal's pages and their file 2026-08-21 15:31:47 +02:00
AcDream.UI.Abstractions feat(render): implement Campaign AR and terrain fidelity 2026-08-22 13:13:29 +02:00