Written by Claude (Opus 5), an LLM made by Anthropic, posted at andy5995's direction.
Every dropfile format the game reads carries a flag saying whether the caller wants ANSI, and all three parsers set it. Nothing downstream reads it. A door session writes escape sequences whichever way the flag points, so a caller whose terminal has no ANSI support, or who has graphics turned off in their BBS profile, gets the sequences printed as text on every screen.
Local play does better, and only on Windows: the console is asked whether it can render ANSI, and the escapes are stripped when it says no (#98). A door caller cannot be probed that way — they are at the far end of a socket — so the flag the BBS already collected from their profile is the signal to use.
The lightbar menus fail worst, because they depend on ANSI both for the highlight and for repainting in place (#99). Every other screen is readable but littered.
Worth settling as part of this:
- Which behaviour a cleared flag should produce: strip the escapes, as local play does, or pick plainer output at the point it is generated.
- Whether the three parsers agree. Because the flag has never been read, a parser taking it from the wrong field would not have shown up yet —
DOOR32.SYS carries it as an emulation value, DOOR.SYS as GR on line 20, and DORINFO as a graphics number, so they are three unrelated shapes.
What I actually checked: I read the parsers and confirmed each assigns the flag, searched the tree for any read of it and found none, and read the door session setup, which does not consult it. I have not run the game against a caller with graphics off.
How the original handles it
BRE does not trust the dropfile. It asks the caller directly, in BRE.EXE:
This game is much more enjoyable with ANSI graphics enabled.
Do you want ANSI Graphics?
andy5995 recalled that prompt and it is confirmed in the binary's strings. Asking every session sidesteps a stale or misconfigured flag, at the cost of one keypress.
A prompt is not the only way to cover it. The flag could supply the session's default, with the Preferences menu carrying an override for the caller whose flag is wrong — no extra gate on first run, and still a way out. The open question there is lifetime: ANSI belongs to the connection rather than to the empire, so an override stored against the empire would follow a player to a session where it no longer applies. Either keep the override to the current session, or persist it and accept that it can go stale.
Every dropfile format the game reads carries a flag saying whether the caller wants ANSI, and all three parsers set it. Nothing downstream reads it. A door session writes escape sequences whichever way the flag points, so a caller whose terminal has no ANSI support, or who has graphics turned off in their BBS profile, gets the sequences printed as text on every screen.
Local play does better, and only on Windows: the console is asked whether it can render ANSI, and the escapes are stripped when it says no (#98). A door caller cannot be probed that way — they are at the far end of a socket — so the flag the BBS already collected from their profile is the signal to use.
The lightbar menus fail worst, because they depend on ANSI both for the highlight and for repainting in place (#99). Every other screen is readable but littered.
Worth settling as part of this:
DOOR32.SYScarries it as an emulation value,DOOR.SYSasGRon line 20, andDORINFOas a graphics number, so they are three unrelated shapes.What I actually checked: I read the parsers and confirmed each assigns the flag, searched the tree for any read of it and found none, and read the door session setup, which does not consult it. I have not run the game against a caller with graphics off.
How the original handles it
BRE does not trust the dropfile. It asks the caller directly, in
BRE.EXE:andy5995 recalled that prompt and it is confirmed in the binary's strings. Asking every session sidesteps a stale or misconfigured flag, at the cost of one keypress.
A prompt is not the only way to cover it. The flag could supply the session's default, with the Preferences menu carrying an override for the caller whose flag is wrong — no extra gate on first run, and still a way out. The open question there is lifetime: ANSI belongs to the connection rather than to the empire, so an override stored against the empire would follow a player to a session where it no longer applies. Either keep the override to the current session, or persist it and accept that it can go stale.