• src/doors/syncrpg/door/help_term.cpp help_term.h syncrpg_version.hsrc/

    From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Thu Jul 23 02:11:47 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/84f78b99fc596f30ecf1d868
    Added Files:
    src/doors/syncrpg/door/help_term.cpp help_term.h syncrpg_version.h Modified Files:
    src/doors/syncrpg/CMakeLists.txt PROVENANCE.md src/doors/syncrpg/door/input_term.cpp syncrpg.cpp ui_term.cpp src/doors/syncrpg/easyrpg/src/scene_logo.cpp
    Log Message:
    syncrpg: show the door's version, and add a help page

    Nothing in SyncRPG identified the door, or which build of it a caller
    was running, and nothing told them the controls -- Yume Nikki has no
    menu of its own that could host either.

    Wire up synchronet_gitinfo() (syncrpg had none, unlike the four sibling
    termgfx doors) and add syncrpg_version_line(): version, short git hash
    and build date -- the stamp SyncDOOM's m_menu.c, SyncDuke's menues.c, SyncRetro's main.c and syncmoo1's sm_door_version_line() already paint.

    It surfaces in two places:

    * The EasyRPG startup splash, in the right-hand slot of the single
    text row it draws (scene_logo.cpp -- this door's FIRST vendored
    source edit, recorded in PROVENANCE.md's new "Local patches"
    section). EasyRPG's own version keeps the left slot; easyrpg.org
    yields the right one but is still shown in the engine's
    Settings > About, so no attribution is lost. The two share that row
    because there is no second one to be had: it already runs to y=231
    of a 240px screen. Single-spaced, unlike the siblings' double, to
    fit the 48 characters the row holds.

    * A door-drawn help page, since the splash flashes past. Opened with
    F1 or the termgfx GMM hotkey (Ctrl+<letter>, syncrpg.ini "[input]
    menu_key", default Ctrl-G -- same key and spellings as syncscumm,
    so a sysop learns one convention); any key closes it. Composited
    onto the engine's display surface in the game's own font from
    UpdateDisplay(), which makes the engine's own per-frame repaint of
    main_surface the restore path -- no ANSI overlay, no suppressed
    presents, no new termgfx entry points, and nothing fighting the
    present path's whole-frame de-dupe to get the screen back.

    EasyRPG's own about page was tried first and rejected: F1 opens
    Scene_Settings, which also carries video/audio/input settings, key
    rebinding, and a config write to a SYSTEM-WIDE profile directory that
    escapes the door's per-user sandbox. F1 stays unforwarded to the
    engine, and input_term.cpp records why so it is not re-litigated.

    Both triggers are explicit rather than "any unmapped key": the door's
    unmapped bucket is not all keypresses (unrecognized CSI sequences,
    terminal replies, stray bytes), and Ctrl+<letter> is indistinguishable
    from the bare letter at that layer, so Ctrl-A would be the WASD A.

    The help page lists Insert ahead of Escape for Cancel -- Escape works
    now, but Insert survives every terminal and keyboard-protocol
    combination the door supports -- and omits a bare 'q', which quits on
    the legacy byte path but reaches the game as a letter under kitty and
    evdev. That inconsistency is noted in help_term.cpp and is worth
    settling in termgfx itself.

    Verified live on SyncTERM against the Win32/MSVC build; not yet
    compiled under GCC/Clang.

    Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>

    ---
    � Synchronet � Vertrauen � Home of Synchronet � [vert/cvs/bbs].synchro.net