• exec/load/syncretro_lib.js syncretro_lobby.js

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Sunday, July 12, 2026 05:11:38
    https://gitlab.synchro.net/main/sbbs/-/commit/c7f8c479d1bfafc0bd49accc
    Modified Files:
    exec/load/syncretro_lib.js syncretro_lobby.js
    Log Message:
    syncretro: strip cataloging tags from the titles, and page with the nav keys

    The NES sets are named to the No-Intro/GoodNES convention, which staples cataloging tags onto the filename -- "Super Mario Bros. (World).nes", "Castlevania (USA) (Rev 1).nes", "Excitebike (U) [!].nes". The lobby drew
    them verbatim, so every line carried noise the player did not ask for.

    The tags now come off the displayed title. They are NOT discarded, because
    they are the only thing telling two otherwise-identical entries apart:
    "Contra (USA)" and "Contra (Europe)" are different dumps (NTSC vs a 50 Hz
    PAL conversion), and the variant collapse -- which keys on title, year and publisher and HIDES the losers -- would have folded them onto one key and silently dropped one from the picker. So a tag is parsed out of the title,
    kept on the entry, made part of the collapse key, and put back on screen
    only for the entries that would otherwise render identically.

    A tag is recognized by CONTENT, not position: known region words, language codes, GoodNES letter codes, and status/revision words, each alone or in a comma list. Anything else in a trailing parenthetical is part of the title
    and stays -- so "Adventure (AD&D - Cloudy Mountain) (1982) (Mattel).int"
    and the rest of the Intellivision naming are untouched.

    The same collision rule fixes an older wart it did not cause: two different PORTS of one game -- "Pac-Man (1983) (Atarisoft)" and "Pac-Man (1983) (Intv Corp)" -- are deliberately both kept by the collapse, and have always drawn
    as two identical "Pac-Man (1983)" lines. When a colliding entry has no tag,
    its publisher now does the job.

    Paging: Enter and PgDn advance like N, PgUp goes back like P, Home and End
    jump to the first and last page. PgUp is safe to bind even though it
    translates to CTRL_P, the BBS's node-message hotkey: the terminal layer
    turns the escape sequence into the key code and returns before inkey() sees
    its Ctrl-P case, so only a literally typed Ctrl-P pages a node.

    The ROM cache stores sizes and hashes, not titles, so no cache is stale.

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Tuesday, July 21, 2026 01:41:46
    https://gitlab.synchro.net/main/sbbs/-/commit/c5cecef99b9c2feb4b50fe5c
    Modified Files:
    exec/load/syncretro_lib.js syncretro_lobby.js
    Log Message:
    syncretro lobby: shared saves, and display names for identifier ROMs

    Two facts an ARCADE console needs that a cartridge console does not, both
    added as console-spec data so nothing in the shared lobby learns which
    console it is running:

    shared_saves -- the save directory the door is handed. Per-user is right for
    a cartridge console: one player's battery save is not another's. An arcade cabinet is the opposite -- the high-score table is the whole point of the machine, and there is no per-player save to keep apart -- so every player
    gets one directory, under data_dir like the per-user one (both are generated run-time state). Default stays per-user, so the existing consoles are unchanged.

    names.json -- display titles keyed by ROM name. Every cartridge console
    names its files for humans ("Astrosmash (1981) (Mattel).rom"), so the title parser can read a title out of them. An arcade romset cannot be renamed at
    all: MAME finds the driver BY the zip's basename, so puckman.zip has to stay puckman.zip, and a picker showing filenames would list a screenful of eight-letter codes. A console with no names.json is completely unaffected -- the map is empty and the parser runs as before. Keys beginning with '_' are ignored, so the shipped file can carry its own comment (JSON has none).

    Also records, at the point where the door command line is built, that it
    lands in a BBS buffer which truncates silently at 260 characters and that
    the line already runs to ~240 -- so anything added there from now on has to
    buy its space from something else on it.

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