{% extends "base.html" %} {% block title %}{% if game %}Edit{% else %}Add{% endif %} Game — Admin — {{ config.BBS_NAME }}{% endblock %} {% block extra_css %} {% endblock %} {% block content %}

{% if game %} Edit: {{ game.name }} {% else %} Add New Game{% endif %}

Back
{{ form.hidden_tag() }} {% if form.errors %}
Save failed — fix the errors below:
{% endif %}
General
{{ form.name.label(class="form-label") }} {{ form.name(class="form-control") }}
{{ form.slug.label(class="form-label") }} {{ form.slug(class="form-control") }} URL-safe name, e.g. "my-game"
{{ form.description.label(class="form-label") }} {{ form.description(class="form-control", rows=3) }}
{{ form.category.label(class="form-label") }} {{ form.category(class="form-control") }}
{{ form.game_type.label(class="form-label") }} {{ form.game_type(class="form-control", id="game_type_select") }}
{{ form.icon.label(class="form-label") }} {{ form.icon(class="form-control", placeholder="bi-controller") }}
{{ form.max_nodes.label(class="form-label") }} {{ form.max_nodes(class="form-control") }}
{{ form.sort_order.label(class="form-label") }} {{ form.sort_order(class="form-control") }}
{{ form.is_active(class="form-check-input") }} {{ form.is_active.label(class="form-check-label") }}
{{ form.is_multiplayer(class="form-check-input") }} {{ form.is_multiplayer.label(class="form-check-label") }}
DOS Door Settings
{{ form.executable_path.label(class="form-label") }} {{ form.executable_path(class="form-control", placeholder="/games/LORD/LORD.EXE") }}
{{ form.working_directory.label(class="form-label") }} {{ form.working_directory(class="form-control") }}
{{ form.command_line_args.label(class="form-label") }} {{ form.command_line_args(class="form-control") }}
{{ form.drop_file_type.label(class="form-label") }} {{ form.drop_file_type(class="form-control") }}
{{ form.drop_file_path.label(class="form-label") }} {{ form.drop_file_path(class="form-control") }}
{{ form.use_dosbox(class="form-check-input") }} {{ form.use_dosbox.label(class="form-check-label") }}
Native Door Settings
{{ form.executable_path.label(class="form-label") }} {{ form.executable_path(class="form-control") }}
{{ form.working_directory.label(class="form-label") }} {{ form.working_directory(class="form-control") }}
{{ form.command_line_args.label(class="form-label") }} {{ form.command_line_args(class="form-control") }}
{{ form.drop_file_type.label(class="form-label") }} {{ form.drop_file_type(class="form-control") }}
{{ form.drop_file_path.label(class="form-label") }} {{ form.drop_file_path(class="form-control") }}
Mystic BBS Python Settings
{{ form.mystic_script_path.label(class="form-label") }} {{ form.mystic_script_path(class="form-control", placeholder="/games/mygame.mpy") }}
Mystic BBS Pascal Script (.mps) Settings
{{ form.mystic_script_path.label(class="form-label") }} {{ form.mystic_script_path(class="form-control", placeholder="/games/dopewars.mps") }} Requires the Mystic BBS runtime (mystic) installed on the server. Set MYSTIC_BBS_PATH env var if it is not at /usr/local/bin/mystic.
Synchronet JS Settings
{{ form.synchronet_script_path.label(class="form-label") }} {{ form.synchronet_script_path(class="form-control", placeholder="/games/galaga.js") }}
{{ form.synchronet_exec_dir.label(class="form-label") }} {{ form.synchronet_exec_dir(class="form-control", placeholder="/sbbs/exec") }} Path to Synchronet stdlib (frame.js, etc.)
In-Browser DOS Game Settings
{{ form.web_game_url.label(class="form-label") }} {{ form.web_game_url(class="form-control", placeholder="/games/dos-data/doom.zip") }} Path served by the /games/dos-data/ route, e.g. /games/dos-data/doom.zip
{{ form.command_line_args.label(class="form-label") }} {{ form.command_line_args(class="form-control", placeholder="DOOM.EXE") }} DOS executable (reference only — autoexec is in the ZIP's dosbox.conf)
Web Game Settings
{{ form.web_game_module.label(class="form-label") }} {{ form.web_game_module(class="form-control", placeholder="hangman") }} Template module name (hangman, snake, etc.)
{{ form.web_game_url.label(class="form-label") }} {{ form.web_game_url(class="form-control", placeholder="https://…") }}
A-Net Game Server (rlogin)
{{ form.executable_path(class="form-control", placeholder="game.a-net-online.lol:513", id="executable_path") }} Default rlogin port is 513.
{{ form.command_line_args(class="form-control", placeholder="@USER@-ANET 8hf30n^! [xtrn=LORD408]", id="command_line_args") }} Three space-separated fields: USER_TEMPLATE PASSWORD [TERMINAL].
About the BBS tag suffix. Synchronet game servers namespace inbound users by source BBS — the same way Synchronet's own ?rlogin client uses -s-[TAG] (e.g., -s-ANET) to mark the BBS tag. Here, you build the same tag into the user template directly: @USER@-ANET means "send the BBS user's name with -ANET appended." The remote Synchronet will see your user log in as username-ANET. Coordinate the tag + password with the remote sysop.

Tokens in USER_TEMPLATE: @USER@ → BBS username, @ALIAS@ → display name, %U / %u → username (Mystic/Synchronet style).
TERMINAL is optional. Set to xtrn=GAMENAME (e.g., xtrn=LORD408) to drop the user straight into a specific door instead of the remote BBS's door menu. Supported door codes are listed on the server's website.

Examples for game.a-net-online.lol (replace YOUR_PASS with the password the remote sysop assigned to your BBS):
  • Door menu: @USER@-ANET YOUR_PASS
  • Direct LORD: @USER@-ANET YOUR_PASS xtrn=LORD408
  • Direct ASSASSIN: @USER@-ANET YOUR_PASS xtrn=ASSASSIN
  • RPG category menu: @USER@-ANET YOUR_PASS xtrn_sec=RPG
{{ form.submit(class="btn btn-primary") }} Cancel
{% endblock %} {% block extra_js %} {% endblock %}