• src/doors/syncconquer/plans/2026-07-11-syncdawn-vendor-plan.md src/doo

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Sun Jul 12 05:11:38 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/bdcfda5915a2c5e7a88d95fd
    Added Files:
    src/doors/syncconquer/plans/2026-07-11-syncdawn-vendor-plan.md src/doors/syncconquer/vanilla/tiberiandawn/CMakeLists.txt aadata.cpp abstract.cpp abstract.h adata.cpp aircraft.cpp aircraft.h anim.cpp anim.h audio.cpp base.cpp base.h bbdata.cpp bdata.cpp building.cpp building.h bullet.cpp bullet.h cargo.cpp cargo.h cc_icon.rc ccini.cpp ccini.h cdata.cpp cell.cpp cell.h checkbox.cpp checkbox.h cheklist.cpp cheklist.h colrlist.cpp colrlist.h combat.cpp compat.h confdlg.cpp confdlg.h conquer.cpp conquer.h const.cpp coord.cpp credits.cpp credits.h debug.cpp debug.h defines.h dial8.cpp dial8.h dialog.cpp display.cpp display.h dllinterface.cpp dllinterface.h dllinterfaceeditor.cpp dllinterfaceversion.h door.cpp door.h drive.cpp drive.h drop.cpp drop.h edit.cpp edit.h ending.cpp ending.h event.cpp event.h expand.cpp externs.h facing.cpp facing.h factory.cpp factory.h findpath.cpp flasher.cpp flasher.h fly.cpp fly.h foot.cpp foot.h function.h fuse.cpp fuse.h gamedlg.cpp gamedlg.h gauge.cpp gauge.h globals.cpp goptions.cpp goptions.h gscreen.cpp gscreen.h hdata.cpp heap.cpp heap.h help.cpp help.h house.cpp house.h iconset.cpp idata.cpp infantry.cpp infantry.h init.cpp intro.cpp intro.h iomap.cpp ioobj.cpp ipxconn.cpp ipxconn.h ipxgconn.cpp ipxgconn.h ipxmgr.cpp ipxmgr.h jshell.cpp jshell.h layer.cpp layer.h lib.cpp license.txt list.cpp list.h loaddlg.cpp loaddlg.h logic.cpp logic.h map.cpp map.h mapeddlg.cpp mapedit.cpp mapedit.h mapedplc.cpp mapedsel.cpp mapedtm.cpp mapsel.cpp menus.cpp miscasm.cpp miscasm.h mission.cpp mission.h monoc.cpp monoc.h mouse.cpp mouse.h mplayer.cpp msgbox.cpp msgbox.h msglist.cpp msglist.h netdlg.cpp nulldlg.cpp object.cpp object.h odata.cpp options.cpp options.h overlay.cpp overlay.h phone.h power.cpp power.h profile.cpp queue.cpp radar.cpp radar.h radio.cpp radio.h reg_icon.rc reinf.cpp rules.cpp rules.h savedlg.h saveload.cpp scenario.cpp scenario.h scenarioini.cpp score.cpp score.h scroll.cpp scroll.h sdata.cpp session.h shapebtn.cpp sidebar.cpp sidebar.h sidebarglyphx.cpp sidebarglyphx.h slider.cpp slider.h smudge.cpp smudge.h sounddlg.cpp sounddlg.h special.cpp special.h stage.h startup.cpp stats.cpp super.cpp super.h tab.cpp tab.h tarcom.cpp tarcom.h target.cpp target.h tdata.cpp team.cpp team.h teamtype.cpp teamtype.h techno.cpp techno.h template.cpp template.h terrain.cpp terrain.h textblit.h textbtn.cpp textbtn.h theme.cpp theme.h tile.h trigger.cpp trigger.h turret.cpp turret.h txtlabel.cpp txtlabel.h type.h udata.cpp unit.cpp unit.h visudlg.cpp visudlg.h winstub.cpp
    Modified Files:
    src/doors/syncconquer/CMakeLists.txt PROVENANCE.md build.sh deploy.js src/doors/syncconquer/door/door.h door_io.c src/doors/syncconquer/vanilla/common/cdfile.cpp src/doors/syncconquer/vanilla/redalert/options.cpp
    Log Message:
    syncdawn: vendor Tiberian Dawn and build it as the door's 2nd title

    Adds SyncDawn -- Command & Conquer: Tiberian Dawn -- as the second title
    of the SyncConquer door family, built from the SAME door seam and vendored Vanilla Conquer engine as SyncAlert (Red Alert).

    - Vendor vanilla/tiberiandawn/ at the already-pinned Vanilla Conquer commit
    (7f351daed0), same subset policy as the rest of the tree.

    - CMakeLists.txt: make BUILD_VANILLATD an overridable cache var (was FORCE
    OFF) and add a guarded if(TARGET VanillaTD) block that mirrors VanillaRA
    (console subsystem, the door engine-seam TUs, termgfx, JXL, xpdev), builds
    with SYNCCONQUER_TD, and names the binary syncdawn. build.sh builds both
    titles by default ("./build.sh ra" = Red Alert only); deploy.js deploys
    both (syncdawn skipped if not built).

    - door/door_io.c: title-agnostic per-target identity (SYNCCONQUER_TD selects
    the DOOR_SHORT_NAME/DISPLAY_NAME/GAME_NAME branding, the required-asset
    manifest DOOR_ASSET_REQ, and the per-node data-dir/log/cache basename so
    the two titles never collide); a door_engine_data_dir() accessor the TD
    engine reads for its file-search path; and movie suppression via the
    door's <name>.ini "[game] movies" (door_config_no_movies) instead of an
    env var. door.h declares the accessor.

    - Vendored local patches on top of tiberiandawn/ (and two shared common/,
    redalert/ files) for the door: font/palette load from cached mixes with a
    fallback for fonts the freeware data omits; keep the assets dir on the
    engine file-search path across CD-check refreshes (common/cdfile.cpp); the
    FMV cutscene-audio enable; the game-neutral music-volume hotkey hook
    (redalert/options.cpp rename + a TD hook); the Sound Controls slider widen;
    and a SyncDawn version line in the menus. Each is recorded in PROVENANCE.md
    (patches 21-26).

    SyncAlert (Red Alert) is unchanged -- its branding, asset manifest, and
    paths are the default when SYNCCONQUER_TD is undefined.

    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

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