https://gitlab.synchro.net/main/sbbs/-/commit/f8589e01f493bd50dec0ce90
Modified Files:
src/doors/syncconquer/door/door_io.c
Log Message:
syncconquer: patch a palette change instead of repainting the frame
The same gate the sibling doors carried: any change to the palette forced
a whole frame, on both backends. The reasons were real -- the JXL backend
bakes the palette into each frame's RGB pixels, so a fade moves every
affected pixel's colour while leaving the index buffer the diff looks at untouched; and sixel colour registers are shared with what is already
drawn, so redefining one recolours the screen under the parts a patch
would not repaint.
Both are about which pixels a moved entry actually affects, and that is computable. Record WHICH entries moved and let the shared diff treat a
tile drawn with one of them as dirty even when its indices are identical (dirty.h's `stale`); the gate then has nothing left to protect. A change
that reaches no displayed pixel at all -- an engine rewrites its palette
freely and a scene draws with a fraction of it -- now de-dupes instead,
and is deferred rather than dropped: that path updates no state, so the
entries stay pending for the first frame that draws with them.
A SyncTERM box carries no palette by design, so the first box of such a
frame carries exactly the entries that moved. Every other terminal resets registers per image and its used-colour subset already covers it; the JXL backend carries pixels and needs nothing.
Measured on the sibling that could be measured -- Flight of the Amazon
Queen over Windows Terminal -- this gate was 267 frames carrying 77% of everything the door sent, after an earlier fix had already halved the
total. This door's content is different (a strategy map with a static
sidebar, not an adventure scene) so the share will differ, but the gate
is the same and so is the reasoning.
UNVERIFIED beyond compiling: syncalert and syncdawn need game data and a terminal, and neither was run. Worth a play-test on both, watching for a
region that keeps a stale colour -- that is what this class of change
breaks when it is wrong.
Co-Authored-By: Claude Opus 5 (1M context) <
noreply@anthropic.com>
--- SBBSecho 3.37-Linux
* Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)