Viewing revision r1 of Custom ANSI Screens — saved 2026-08-03 01:34 EDT .
“Initial seed content”
Jump to current version Full history

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

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