Custom ANSI Screens
ANetBBS supports replacing every built-in menu header and session screen
with a sysop-supplied CP437 ANSI art file. If the file is present it is
displayed; if absent the built-in menu renders as normal. No restart needed —
the file is read fresh on every menu entry.
How it works
Drop a standard CP437 .ans file (Moebius, PabloDraw, TheDraw, etc.) into
the correct directory with the slot name shown below. The BBS reads it as raw
bytes and sends it directly to the terminal, so every block graphic and color
code reaches the user exactly as drawn.
Slot reference
Session screens — data/text/<slot>.ans
These appear at connection time, not inside a menu loop.
| Filename | When it appears |
|---|---|
welcome.ans |
Login / welcome screen (shown before the main menu) |
newuser.ans |
Shown to a user who just created an account |
goodbye.ans |
Logoff screen |
Menu headers — data/text/menus/<slot>.ans
These replace the banner at the top of the named menu. The menu items
(hotkeys, labels, prompt) are still rendered below the ANSI art.
| Filename | Menu |
|---|---|
main.ans |
Main BBS menu |
game_center.ans |
Game Center (top-level games menu) |
door_games.ans |
Door Games list (shows installed doors) |
chat.ans |
Chat Systems menu |
irc_chat.ans |
IRC Chat menu |
dialout.ans |
Dial Out — Visit Another BBS |
sysop_users.ans |
Sysop -> Manage Users list header |
sysop_boards.ans |
Sysop -> Manage Boards list header |
sysop_status.ans |
Sysop -> Server Status header |
(The Sysop Tools top-level menu itself is a scrolling lightbar screen
with fixed row positions, so it can't take a custom art header the way
these can -- it always shows the standard banner.)
Any menu you create through Admin → Menus also supports a file override
using the menu's name as the filename (e.g. a menu named utilities →
data/text/menus/utilities.ans).
Widescreen (132-column) support
Session screens (welcome, goodbye, newuser, and any custom ansi
slot) also support a widescreen variant for terminals that negotiate
132 columns: drop a <slot>132.ans file alongside the regular
<slot>.ans and ANetBBS serves it automatically to those sessions
instead of the 80-column art. There's also a <slot>.asc plain-ASCII
fallback for terminals that can't render ANSI at all. ANetBBS checks
these file-based drop-ins before falling back to the database-driven
screen, so they're the fastest way to swap in art without touching
Admin.
Multiple screens in one login (classic multi-logon-screen style)
Drop in more than one numbered file for the same slot and ANetBBS shows
all of them, in order, every login — the same idea as Synchronet's
logon1.ans/logon2.ans/logon3.ans convention:
data/text/welcome132.ans <- shown first (the plain file counts as #1)
data/text/welcome132_2.ans <- shown second
data/text/welcome132_3.ans <- shown third
Numbers don't need to be contiguous — whatever _N files exist are used
in ascending order. This works independently per screen/variant
(welcome, welcome132, welcome.asc, goodbye, etc. each get their
own sequence), and a single file behaves exactly as before — nothing
extra to set up unless you actually want more than one.
Each variant controls its own pause — ANetBBS doesn't insert one
automatically between screens in a sequence. Put @PAUSE@ at the end of
a variant if you want the visitor to press a key before the next one
loads.
Random variant: _ran naming
Want a different single screen picked at random each login instead of
the whole sequence? Use _ran in the filename in place of the plain
numbered naming:
data/text/welcome132_ran.ans <- random variant #1
data/text/welcome132_2_ran.ans <- random variant #2
data/text/welcome132_3_ran.ans <- random variant #3
With _ran naming, each login shows one file from the group,
chosen at random, instead of the whole sequence. If both a _ran group
and a plain numbered group exist for the same slot, the _ran group
wins. Works for any screen — mix and match per-screen as you like (full
sequence for welcome, random-pick-one for goodbye, say).
File format
Standard CP437 ANSI art. SAUCE records (metadata appended by editors) are
harmless — the file is sent as-is, so keep the file 23–25 lines tall to
avoid pushing the menu items off screen.
Recommended editors:
- Moebius (cross-platform, free)
- PabloDraw (Windows/Mac)
- TheDraw (DOS classic, runs in DOSBox)
Permissions
Files must be readable by the service user (anetbbs). After copying via
SCP as your own login, set ownership:
sudo chown anetbbs:anetbbs /opt/anetbbs/data/text/menus/game_center.ans
Or fix the whole directory at once:
sudo chown -R anetbbs:anetbbs /opt/anetbbs/data/text/
Removing an override
Delete (or rename) the .ans file. The built-in menu returns on the next
visit — no restart needed.
See also
- Themes — web UI color palette
- Sysop Guide