A text-based game engine, with content for an adults-only post-apocalyptic themed MUD.
Go to file
2023-12-30 19:07:16 +11:00
.ci Fix bug in deploy script causing missed deploy. 2023-02-18 00:34:30 +11:00
ansi Split most room data to YAML for faster compile times. 2023-10-08 16:34:55 +11:00
ansi_macro NPC data to separate YAML 2023-10-09 21:38:12 +11:00
ansi_markup Split most room data to YAML for faster compile times. 2023-10-08 16:34:55 +11:00
blastmud_game Cleanup most of the less_explicit mode support 2023-12-30 19:07:16 +11:00
blastmud_interfaces Add gear command. 2023-06-03 23:47:29 +10:00
blastmud_listener NPC data to separate YAML 2023-10-09 21:38:12 +11:00
docs Implement blades (partially), + fix some attack bugs. 2023-09-11 21:40:41 +10:00
schema Cleanup most of the less_explicit mode support 2023-12-30 19:07:16 +11:00
scripts Make build pipeline do cargo build 2023-02-12 18:00:25 +11:00
.concourse.yml Attempt to deploy as part of pipeline. 2023-02-12 23:05:34 +11:00
.gitignore Add gear command. 2023-06-03 23:47:29 +10:00
Cargo.lock NPC data to separate YAML 2023-10-09 21:38:12 +11:00
Cargo.toml Fix warnings from latest version of Rust/Cargo. 2023-10-08 16:47:48 +11:00
LICENSE Add initial README and LICENSE 2022-12-13 23:16:12 +11:00
README.md Update for new classification. 2023-12-27 11:56:35 +11:00

Blastmud

A component of a Rust-based mud (multi-user text-based game). Unlike many muds, it is designed to be completely Free software (other than an age-verification file - see below), with the game core written in Rust rather than in any form of softcode. Only user data forms part of the database. Even the map is programmed in a normal text editor, and can be tested locally before being deployed to the game.

Architecture

Blastmud consists of the following main components:

  • blastmud_listener is intended to be a long-running component that accepts connections from users. It can't be changed without disconnecting all users.
  • blastmud_interfaces is a shared library defining the interface between the listener and the gameserver. It can't be changed without disconnecting all users.
  • blastmud_game implements the gameserver. It does not hold any long-lived state, and so can be safely redeployed and replaced without disconnecting all users.
  • A PostgreSQL database is used to store the entire state (user data) of the game. It is used with synchronous_commit turned off so that recently changed data is only stored in memory.

Status

Blastmud is under active development, but is currently playable.

Schema management

We only keep the latest version in version control, and use migra (pip3 install migra) to identify changes between the production schema and the latest in code.

The latest schema is under schema.

Create a user with a secret password, and username blast. Create a production database called blast.

To get to the latest schema:

  • Run psql -d template1 <schema/schema.sql to create the temporary blast_schemaonly database.
  • Run migra "postgresql:///blast" "postgresql:///blast_schemaonly" > /tmp/update.sql
  • Check /tmp/update.sql and if it looks good, apply it with psql -U blast -d blast </tmp/update.sql