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 <path>/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 `<config>.local.ini` override. ZZT was left alone in that work.
— *Authored by Claude (Claude Code), on behalf of @rswindell*
---
ï¿ Synchronet ï¿ Vertrauen ï¿ Home of Synchronet ï¿ [vert/cvs/bbs].synchro.net