Doors & games

Old doors, new ones, one menu.

NetBBS ships with three bundled games: Retro Trivia, Voidrunner and War Dialer. Next to them, a SysOp can add trusted native programs, classic DOS doors through DOSBox-X, doors built for another operating system in a virtual machine per caller, and remote services such as DoorParty and BBSLink. To the caller, they are all just doors.

For callers

Pick a door, play, come back.

Native doors, DOS classics and remote services sit in one picker. Both bundled games last between visits: Voidrunner keeps each pilot's career, and War Dialer runs one shared world that every caller plays in.

doors — available doors
Harbor Lights › Available doors
page 1/1, 7 total
───────────────────────────────
  01. Barren Realms Elite [remote: DoorParty] - Operator-run tunnel.
  02. BBSLink [remote: BBSLink] - Dozens of classic doors from one service.
  03. Global War - DOS 2.7, turn-based conquest.
  04. Legend of the Red Dragon - DOS 4.07, via DOSBox-X and BNU.
  05. Retro Trivia - Native bundled quiz door.
  06. TradeWars 2002 - DOS 3.09, persistent galaxy.
  07. Voidrunner - Native bundled space game.

  [/] Find                                 [B]ack
    Find by name                             Return without picking
or type a number to select; Ctrl-L: redraw, Ctrl-H: help
Choice:
The door menu
Native NetBBS doors, DOS classics under DOSBox-X, and remote services — one picker, no difference to the caller.
voidrunner — command deck
╭─ ◤ VOIDRUNNER · Command Deck: 1,850cr ───────────────────────────────── 1/1 ╮
│  KESTREL TERMINAL  Industrial · Outer Fringe  CALM 0                        │
│  Day 1  Rank Rookie Hauler  ◈ 1,850cr                                       │
├─ SHIP ──────────────────────────────────────────────────────────────────────┤
│  HULL  ████████████░░░░░░░░  36/60  Scuffed          /\                     │
│  FUEL  ██████████████████░░  21/24  Shuttle     <x==[__]=== >               │
│  HOLD  ░░░░░░░░░░░░░░░░░░░░   0/24  0 lots          /__\                    │
├─ STATION SERVICES ──────────────────────────────────────────────────────────┤
│  [M] Market: 7 goods      [Y] Yard repair/refit    [B] Board: 3 offers      │
│  [C] Chart: 4 links       [S] Status               [H] Hall of Fame         │
│  [G] Guide                [N] Archive              [T] Ledger               │
│  [V] Viewport             [O] Display              [Q] Disembark            │
│  [P] Concord              [W] Blackwake                                     │
╰─────────────────────────────────────────────────────────────────────────────╯
[X] Expand [Q] Exit: 
Voidrunner: the command deck
Gauges, silhouette and a service grid, on a career with a fight behind it and a hull that shows it.
voidrunner — commodity market
╭─ ◤ VOIDRUNNER · Market: 2,160cr ─────────────────────────────────────── 1/1 ╮
│  APHELION TERMINAL Industrial   hold ░░░░░░░░ 0/24                          │
│  COMMODITY           BUY  SELL  STOCK  DEMAND  HELD  SPREAD                 │
│  [A] Food             19    17     48      96     0  ▁▄███ dear             │
│  [C] Textiles         18    17     48      48     0  ▁████ dear             │
│  [D] Machinery        39    36     96      48     0  ▁▄▄██ cheap            │
│  [E] Electronics     176   162     48      96     0  ▁▄▄██ dear             │
│  [F] Raw Ore          30    28     48      48     0  ▁▄▄▄█ typical          │
│  [G] Refined Metals   45    41     96      48     0  ▁▁▄▄█ cheap            │
│  [H] Medicine         95    87     48      48     0  ▁▄▄▄█ typical          │
│  Prices per unit. Only jumps advance days; reopening does not replenish     │
│  stock.                                                                     │
╰─────────────────────────────────────────────────────────────────────────────╯
[A,C-H] Trade [X] Futures [B] Back: 
Voidrunner: trading
A station's market: buy and sell prices, stock and demand for every good, and whether it is cheap or dear here.
voidrunner — contracts
╭─ ◤ VOIDRUNNER · Contracts ───────────────────────────────────────────── 1/1 ╮
│  [1] ⟦BOUNTY⟧ Freeport  OFFER                                        +550cr │
│      danger 1 · 1 jumps · day 18 ██████ · COMBAT                            │
│  [2] ⟦ESCORT⟧ Nightgate  OFFER                                     +1,000cr │
│      danger ? · 4 jumps · day 35 ██████ · CONVOY                            │
│  [3] ⟦SURVEY⟧ Dustwake  OFFER                                        +440cr │
│      danger ? · 3 jumps · no deadline · SURVEY                              │
│  Active: 0/3                                                                │
│  New offers on day 4                                                        │
╰─────────────────────────────────────────────────────────────────────────────╯
[1-9] Details [B] Back: 
Voidrunner: contracts
Bounties, escorts and surveys, each with its pay, distance and deadline.
war dialer — switchboard
┌─ ▚ SWITCHBOARD ──────────────────────────────────────────────── page 1/2 ─┐
│  Thiesi ⟦[::]⟧   ⟦WANNABE⟧   season 2 · 27d 23h 30m left                  │
│  rank 100 ░░░░░░░░░░░░░░░░░░░░   next Script Kiddie                       │
├───────────────────────────────────────────────────────────────────────────┤
│  CASH $176   HEAT ███░░░░░░░░░░░░░░░░░ 17                                 │
│  CREW ●○○ 1 free   2 posted                                               │
│  TURNS ▮▮▮▮▮▮▮▮▮▮▮▮▮▯▯ 13/15   refill 23h 30m                             │
│  HOLD ●●○○○○○○○○ 2/10   income $5/hr                                      │
│  SHIELD newcomer 1d 23h 30m   NEW 0                                       │
│  OPS none   KIT untrained / empty                                         │
├─ THE SCENE ───────────────────────────────────────────────────────────────┤
│  ◆ 1══◇ 2══◈ 3══◆ 4══◉ 5   ◆ yours 2   ◈ rival 1   ◉ NPC 3   ◇ free 4     │
│  ║                   ║                                                    │
│  ◇10══◇ 9══◇ 8══◉ 7══◉ 6                                                  │
├─ FEED ────────────────────────────────────────────────────────────────────┤
│  ● 22:58 Rooted 212-555 Uptown Exchange; +$2/hour and +50 Rank.           │
│  ● 22:58 Kilobaud raided you and got away with $340! All-attacker raid    │
│          shield: 24 hours.                                                │
│  ● 22:58 Crackdown closed season 1. Final Rank 0; place 3/3; no medal.    │
│          Fresh season 2: competitive resources reset. Back on the         │
└───────────────────────────────────────────────────────────────────────────┘
[T] Trade [C] Crew [J] Job   [R] Raid [X] Root  [G] Gar  [S] Kit  [O] Ops
[B] Rank  [E] Map  [V] Rival [H] Log  [I] Scene [?] Help [Q] Quit
[N] Next  [P] Prev   dial ›
War Dialer: the switchboard
The ten-exchange ring with two exchanges taken, the gauges a single turn moves, and an owner's color that means the same thing everywhere.
war dialer — contracts
┌─ ▚ CONTRACT BOARD ───────────────────────────────────── 1 available crew ─┐
│  [1] Fence dial-up access on the boards                                   │
│      odds █████░░░░░░░░░ 33%   difficulty 2   pays $60-$100   rank +15    │
│  [2] Skim a mail-order software warehouse                                 │
│      odds ██░░░░░░░░░░░░ 14%   difficulty 6   pays $100-$170   rank +15   │
│  [3] Loot a phone company's billing database                              │
│      odds █░░░░░░░░░░░░░ 10%   difficulty 12   pays $170-$280   rank +15  │
│  [4] Pad a regional bank's wire transfer                                  │
│      odds █░░░░░░░░░░░░░ 10%   difficulty 20   pays $260-$400   rank +15  │
│  [5] Divert a mid-size firm's payroll run                                 │
│      odds █░░░░░░░░░░░░░ 10%   difficulty 30   pays $380-$560   rank +15  │
└───────────────────────────────────────────────────────────────────────────┘
pick [1] [2] [3] [4] [5]
[B] Back  [Q] Cancel
War Dialer: picking a job
Jobs for the crew, each with its odds, difficulty, pay and the rank it earns.
For SysOps

One profile per door, whatever it runs on.

Every door has a compatibility profile: the adapter that runs it, how its terminal is connected, which drop files it gets, and the limits it runs under. Setup templates fill in the known-good values for the verified games, and setup checks catch mistakes before callers see the door.

SysOp console — Doors
Harbor Lights › Doors
page 1/1, 7 total
─────────────────────
  01. Amiga Empire - A Linux door in a per-caller VM
  02. DoorParty - Dozens of doors on a remote server
  03. Global War - Turn-based world conquest
  04. Legend of the Red Dragon - LORD 4.07 under DOSBox-X
  05. TradeWars 2002 - The classic space trading game
  06. Voidrunner - Bundled: trade, fight and explore a living galaxy
  07. War Dialer - Bundled: build a phreaker crew, raid your rivals

[/] Find  [B]ack — or type a number to select; Ctrl-L: redraw, Ctrl-H: help
Choice:
Every door in one list
Bundled games, DOS classics, a door in a virtual machine and a remote service, managed from the same console screen.
SysOp — door compatibility
Harbor Lights / Door compatibility
----------------------------------
External installs are manual. See docs/NetBBS-door-guide.md. Templates need
local paths and game setup.
RUNTIME
  01 Setup template:                    (none)
  02 Import JSON:                       (none)
  03 Restore original API on Save:      False
  04 Adapter:                           dosbox
  05 I/O endpoint:                      socketpair
  06 Executable/runtime path:           /usr/pkg/bin/dosbox-x
  07 Arguments:                         (none)

[01-30] change  [S]ave  [B]ack
(Ctrl-H for help on these fields)
(Section 1 of 6: < > switches)
Choice:
Configuring a DOS door
The Runtime section of a door's compatibility profile — the adapter, the I/O endpoint and the emulator path. Five more sections cover the files, the terminal, the limits and the setup checks.
SysOp — door compatibility, Advanced
Harbor Lights / Door compatibility
----------------------------------
External installs are manual. See docs/NetBBS-door-guide.md. Templates need
local paths and game setup.
ADVANCED
  24 Custom environment (JSON):         {}
  25 External runner argv (JSON):       []
  26 Adapter options (JSON):            {"accel": "tcg", "boot_timeout_seconds":
                                        60, "command": "{install_dir}/door
                                        -D{door32} -X", "guest_memory_mb": 256,
                                        "initrd":
                                        "/var/games/netbbs/vm/initrd.cpio",
                                        "kernel":
                                        "/var/games/netbbs/vm/vmlinux"}
  27 Companion service (JSON):          {}

[01-30] change  [S]ave  [B]ack
(Ctrl-H for help on these fields)
(Section 5 of 6: < > switches)
Choice:
A door from another platform
A Linux door set up from the VM template: the guest kernel and initramfs, the guest's memory, and the door's command line inside the guest.
How doors run

Limits, adapters and honest boundaries.

Each door is its own process, and the SysOp decides what it may use.

Door runtime

  • Its own subprocess, started without a shell, under enforced CPU, memory, time and process limits.
  • Resource limits, not a sandbox. A native door can read what the service account can, so install only doors you trust.

Classic DOS doors

  • LORD, TradeWars 2002 and Global War through an operator-installed DOSBox-X, over an emulated serial/FOSSIL link.
  • Classic drop files: DOOR.SYS, DORINFO1.DEF, CHAIN.TXT and DOOR32.SYS. CP437 output is converted for callers' UTF-8 terminals.

Native, remote and VM

  • Native and remote: stdio, a controlling terminal, a private DOOR32 socket, or an allowlisted remote door service such as DoorParty or BBSLink.
  • Doors from other platforms run in their own qemu guest per caller, with no network and only two shared directories. POSIX hosts only.

Doors that talk back

  • An opt-in, per-door hook lets a game post to chosen message boards and speak in chosen chat channels, under hourly ceilings the SysOp sets.
  • Verified, and says so. The door setup guide lists which games and adapters have been checked on NetBSD and Debian, and which have not.

Run a node, open the door menu.

The bundled games work out of the box. The door setup guide covers everything else.