Subj : xtrn/zzt: installer writes zzt.ini to ctrl/, but the game reads it fro To : GitLab issue in main/sbbs From : Rob Swindell Date : Fri Jul 31 2026 19:48:44 open https://gitlab.synchro.net/main/sbbs/-/issues/1209 The ZZT installer writes the sysop's high-score-server choice to `ctrl/zzt.ini`, but the game only ever reads `xtrn/zzt/zzt.ini`. The prompt therefore has no effect: a sysop who answers "yes" still ends up with the built-in default. ### Why it happens `xtrn/zzt/install-xtrn.ini` has: ```ini [ini:zzt.ini] prompt = Use Futureland.today for InterBBS High Score Server? keys = server values = 'futureland.today' ``` No `zzt.ini` is shipped in `xtrn/zzt/`, and `install-xtrn.js` falls back to the ctrl directory when an `[ini:]` target does not exist in the door's `startup_dir` (`exec/install-xtrn.js`, the `item.filename` / `file_exists` check in the `ini:` loop): ```js item.filename = startup_dir + a[0]; if(!file_exists(item.filename)) item.filename = file_cfgname(system.ctrl_dir, a[0]); ``` So the value lands in `ctrl/zzt.ini`. The game reads it from the door directory instead: `applyIniOverrides()` in `zzt.js` calls `ZZT.execPath("zzt.ini")`, and `execPath()` is `safeJoin(ZZT.runtime.getExecDir(), name)`. The key name is fine, for what it is worth: `SERVER` is one of the keys `applyIniOverrides()` recognizes. Only the location is wrong. ### Reproduced Installed ZZT into a throwaway ctrl tree with `jsexec install-xtrn.js -auto -overwrite /xtrn/zzt/`. Neither `xtrn/zzt/zzt.ini` nor `ctrl/zzt.ini` existed beforehand. The installer reported success: ``` Use Futureland.today for InterBBS High Score Server? (Y/n)? Setting server = futureland.today Installed 1 external programs. ``` Afterwards: ``` xtrn/zzt/zzt.ini absent ctrl/zzt.ini EXISTS: server=futureland.today ``` ### Suggested fix Ship a default `xtrn/zzt/zzt.ini` so the `[ini:]` target exists, or seed one from a tracked template with a `[copy:]` section, which runs before the `[ini:]` sections: ```ini [copy:zzt.example.ini] dest = zzt.ini ``` The second form also keeps a sysop-edited `zzt.ini` from showing up as a dirty working tree, provided `zzt.ini` stays untracked and ignored. Found while converting the JSON-DB doors to prefer a `.local.ini` override. ZZT was left alone in that work. — *Authored by Claude (Claude Code), on behalf of @rswindell* --- SBBSecho 3.37-Linux * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705) .