Subj : src/doors/syncconquer/PROVENANCE.md src/doors/syncconquer/door/door_io To : Git commit to main/sbbs/master From : Rob Swindell (on Debian Linux) Date : Sat Jul 11 2026 04:50:47 https://gitlab.synchro.net/main/sbbs/-/commit/f7154ef1336296e8ec07c643 Modified Files: src/doors/syncconquer/PROVENANCE.md src/doors/syncconquer/door/door_io.c src/doors/syncconquer/vanilla/redalert/egos.cpp init.cpp menus.cpp options.cpp scroll.cpp sounddlg.cpp startup.cpp Log Message: syncalert: live-test fixes -- UI polish, portable INI, volume persistence A batch of fixes from SyncTERM live testing, spanning the door's own code and small tracked patches to the vendored engine (PROVENANCE #15-20). UI polish: - Stats overlay (Ctrl-S) now erases to end of line before its SGR reset, so a shorter readout can't leave the previous longer line's tail on screen; the bottom row renders as a clean full-width bar (door_io.c). - Mouse edge-scroll: widened RA's literal 1-pixel scroll border to a small band (scroll.cpp). Over a terminal the pointer is cell-quantized and can't land on the exact edge pixel -- especially the top/left, which the door can't snap to 0 without breaking menu-button clicks -- so edge-scroll was nearly unusable. No click coordinate moves, so menus are unaffected. - Sound Controls music slider now tracks changes made from outside the dialog (the +/- hotkeys) without fighting the mouse: it re-syncs only when ScoreVolume itself changes, never overriding the gauge from its own value (sounddlg.cpp). Portable per-user INI (door_io.c): - The per-user REDALERT.INI is shared across hosts, so it must not carry host-specific absolute paths. UserPath is now dropped entirely (the argv[0] rewrite already makes the engine derive it), and DataPath is written relative to the per-user home via a new door_relpath() helper. Stale absolute keys a previous build wrote are actively removed. Music-volume persistence and behavior: - Root cause of "settings never persist": on exit RA re-saved the config from the INIClass it loaded at startup, and INIClass::Load() merges rather than replaces, so the reload kept the startup snapshot and clobbered whatever the game wrote during play. Fixed by using a fresh INIClass for the exit save (startup.cpp). - Save_Settings now always writes ScoreVolume (was gated to GAME_NORMAL under FIXIT_VERSION_3), and the +/- hotkey persists via Save_Settings, guarded at the rails (options.cpp). - Muting is respected everywhere: removed the force-to-0.4-when-muted override on the title screen and credits scroll (menus.cpp, egos.cpp), and stopped a Skirmish/MP game from overwriting the user's volume with the separate MultiScoreVolume -- the single music-volume setting is now authoritative (init.cpp). Co-Authored-By: Claude Opus 4.8 (1M context) --- þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net .