feat: add persistent-world station game
Bevy ECS workspace with three crates:
- game_core: rsn data definitions, components, Tiled map loader, protocol
- game_server: authoritative simulation, Rune scripting, persistence,
dedicated server binary
- game_client: rendering, UI and input; embeds the server for
singleplayer and hosting
Items, recipes, buildings and skills are defined in assets/data, behavior
in Rune scripts under assets/scripts, and maps are made in Tiled.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-18 17:44:13 +00:00
|
|
|
# Changelog
|
|
|
|
|
|
|
|
|
|
All notable changes to this project are documented in this file. The format is
|
|
|
|
|
based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
|
|
|
|
|
|
|
## [Unreleased]
|
|
|
|
|
|
2026-10-21 20:53:24 +00:00
|
|
|
### Changed
|
|
|
|
|
|
|
|
|
|
- Tiled exports and newly created conversion layers place Objects above Ground
|
|
|
|
|
Items, Triggers, Wiring/Plumbing and Floors, with Floors and Wiring/Plumbing
|
|
|
|
|
hidden by default in the editor without affecting gameplay.
|
|
|
|
|
|
feat: add persistent-world station game
Bevy ECS workspace with three crates:
- game_core: rsn data definitions, components, Tiled map loader, protocol
- game_server: authoritative simulation, Rune scripting, persistence,
dedicated server binary
- game_client: rendering, UI and input; embeds the server for
singleplayer and hosting
Items, recipes, buildings and skills are defined in assets/data, behavior
in Rune scripts under assets/scripts, and maps are made in Tiled.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-18 17:44:13 +00:00
|
|
|
### Added
|
|
|
|
|
|
2026-10-21 21:36:34 +00:00
|
|
|
- A Station Object Brush in Tiled with per-tile brush property settings and
|
|
|
|
|
independently editable wall/floor objects, drag previews and stroke undo.
|
|
|
|
|
Open the bundled `assets/station.tiled-project` to load Station extensions
|
|
|
|
|
without installing them globally (Tiled requests permission on first use).
|
2026-10-21 20:42:51 +00:00
|
|
|
- `cargo xtask watch --serve` serves the packaging output with directory listings
|
|
|
|
|
and downloads at `http://127.0.0.1:9932/`, including while rebuilds are paused.
|
2026-10-21 20:30:03 +00:00
|
|
|
- `cargo xtask watch` rebuilds and packs after a resettable 10-second quiet period,
|
|
|
|
|
with automatic rebuilds paused while `dist/NOREBUILD` exists.
|
2026-10-21 19:40:20 +00:00
|
|
|
- Separate gameplay floor and structure layers, with buildable/removable floors
|
|
|
|
|
and windows. Marked painted Tiled tiles become stateful gameplay entities;
|
|
|
|
|
removing floors exposes the map's configurable default terrain.
|
|
|
|
|
- A bundled Tiled extension to convert painted gameplay tiles into editable
|
|
|
|
|
objects, preserving properties and flips with conflict checks and undo support.
|
2026-10-21 18:22:13 +00:00
|
|
|
- Admin `export [FILE]` and `import [FILE]` commands for editable Tiled snapshots of
|
|
|
|
|
terrain, buildings and ground items, including health, script variables, machine
|
|
|
|
|
contents and processing state. Imports replace the map while preserving characters.
|
2026-10-21 18:22:32 +00:00
|
|
|
- Native chat text editing with word navigation, keyboard/mouse selection, system
|
|
|
|
|
clipboard copy/cut/paste, bounded sent-message history and role-aware command completion.
|
feat: add persistent-world station game
Bevy ECS workspace with three crates:
- game_core: rsn data definitions, components, Tiled map loader, protocol
- game_server: authoritative simulation, Rune scripting, persistence,
dedicated server binary
- game_client: rendering, UI and input; embeds the server for
singleplayer and hosting
Items, recipes, buildings and skills are defined in assets/data, behavior
in Rune scripts under assets/scripts, and maps are made in Tiled.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-18 17:44:13 +00:00
|
|
|
- Persistent-world station game with singleplayer, hosting (`--host`) and
|
|
|
|
|
joining (`--connect`), plus a dedicated `game-server`.
|
|
|
|
|
- Data-driven items, recipes, buildings and skills in `assets/data/*.rsn`.
|
|
|
|
|
- Rune scripting for item use, building interaction and crafting hooks.
|
|
|
|
|
- Tiled map support (solid tiles/layers; `spawn`, `building` and `item`
|
|
|
|
|
objects).
|
|
|
|
|
- Saving of the world and characters (autosave, and on exit, Ctrl-C or
|
|
|
|
|
SIGTERM).
|
|
|
|
|
- Crafting, construction/deconstruction, skills, hunger, health and respawning.
|
|
|
|
|
- Windows client builds for GitHub and Gitea CI; release builds run without a
|
|
|
|
|
console window.
|
2026-10-18 18:08:45 +00:00
|
|
|
- `cargo xtask pack` builds the client and server and packs them with their
|
|
|
|
|
assets into a distributable archive; CI publishes these archives.
|
2026-10-18 18:28:16 +00:00
|
|
|
- Machines (`machines` in data files): buildings with input/output slots that
|
|
|
|
|
process their own timed recipes, with optional custom window layouts and
|
|
|
|
|
background images. The furnace is now a machine (ore + log fuel), and a new
|
|
|
|
|
assembler makes tools.
|
2026-10-18 18:21:07 +00:00
|
|
|
- GitHub `Package` workflow builds archives for Windows (zip), Linux and macOS
|
|
|
|
|
(tar.gz).
|
2026-10-18 18:47:43 +00:00
|
|
|
- Worlds are stored with sqlx in SQLite (default) or PostgreSQL, keyed by a world
|
|
|
|
|
UUID so many worlds can share one database. Singleplayer saves are SQLite files
|
|
|
|
|
in the platform data directory. Autosaves run in the background. The server has
|
|
|
|
|
new `--database URL` and `--world NAME|UUID` options.
|
2026-10-18 19:41:58 +00:00
|
|
|
- The dedicated server is configured by `server.toml` plus command-line
|
|
|
|
|
overrides, and it accepts terminal commands for save, shutdown and live config
|
|
|
|
|
changes.
|
feat!: start menu, file-based UI, machine windows and server access control
- Start menu with new game (optionally hosted), load/delete saves and join
server screens; CLI options skip it.
- Menus and HUD are built from rsn layouts in assets/ui with a shared theme,
bindings, conditional visibility and tooltips.
- Machine windows place slots and backgrounds from the machine's ui
definition; slots are filled from and emptied into the inventory.
- Chat with / commands, pause menu, clickable inventory, craft and build
menus.
- Server passwords, admins, whitelist, bans, kicks and admin commands from
the terminal or chat; changes are written to the config file. The hosting
player is always admin.
- Clients keep a player id in client.toml; characters belong to it.
BREAKING CHANGE: protocol version 3 adds the player id and password to
Login, and characters are keyed by player id instead of name, so characters
in existing worlds are not restored.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-18 20:29:05 +00:00
|
|
|
- Start menu with new game (optionally hosted), load/delete saved games and
|
|
|
|
|
join server screens. Running the client without options shows it.
|
|
|
|
|
- Menus and HUD are defined by layout files in `assets/ui/` (rsn) with a shared
|
|
|
|
|
theme, `{binding}` placeholders, conditional visibility and tooltips.
|
|
|
|
|
- Machine windows: insert and take items from machine slots, using the machine's
|
|
|
|
|
slot positions and background image, with a progress bar.
|
|
|
|
|
- Chat (Enter/T) with `/` commands, a pause menu (Esc) and clickable inventory,
|
|
|
|
|
crafting and build menus.
|
|
|
|
|
- Server passwords, admins, a whitelist, bans, kicks and admin commands in the
|
|
|
|
|
server terminal and in-game chat. Changes are written to the config file. The
|
|
|
|
|
player hosting a world is always admin.
|
|
|
|
|
- The client profile (`client.toml`) stores a player id; characters belong to
|
|
|
|
|
it instead of to a name.
|
|
|
|
|
|
|
|
|
|
### Changed
|
|
|
|
|
|
2026-10-21 20:20:13 +00:00
|
|
|
- Tiled exports always use the `.tmx` extension and separate floors, structures,
|
|
|
|
|
ground items and spawn points into named object layers, with a reserved
|
|
|
|
|
wiring/plumbing layer. The Tiled converter uses the same layer organization.
|
2026-10-21 18:22:13 +00:00
|
|
|
- Tiled property overrides apply to new-world seeds as well as imported maps.
|
|
|
|
|
Terrain is persisted with world state and replicated to connected clients.
|
|
|
|
|
Save databases migrate automatically to schema version 2.
|
2026-10-18 21:15:16 +00:00
|
|
|
- Characters move freely instead of tile by tile: diagonal movement, sliding
|
|
|
|
|
along walls and around corners. Their exact position is saved.
|
2026-10-21 19:40:20 +00:00
|
|
|
- **Breaking:** network protocol version 6. Layered building state and authoritative terrain are replicated,
|
2026-10-21 18:22:13 +00:00
|
|
|
logins carry a player id and password, and movement is sent as a direction vector,
|
|
|
|
|
so older clients and servers can't connect. Characters saved by name
|
feat!: start menu, file-based UI, machine windows and server access control
- Start menu with new game (optionally hosted), load/delete saves and join
server screens; CLI options skip it.
- Menus and HUD are built from rsn layouts in assets/ui with a shared theme,
bindings, conditional visibility and tooltips.
- Machine windows place slots and backgrounds from the machine's ui
definition; slots are filled from and emptied into the inventory.
- Chat with / commands, pause menu, clickable inventory, craft and build
menus.
- Server passwords, admins, whitelist, bans, kicks and admin commands from
the terminal or chat; changes are written to the config file. The hosting
player is always admin.
- Clients keep a player id in client.toml; characters belong to it.
BREAKING CHANGE: protocol version 3 adds the player id and password to
Login, and characters are keyed by player id instead of name, so characters
in existing worlds are not restored.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-18 20:29:05 +00:00
|
|
|
in existing worlds are not carried over to player ids.
|
2026-10-18 18:47:43 +00:00
|
|
|
|
|
|
|
|
### Removed
|
|
|
|
|
|
|
|
|
|
- The rsn save file format and the `--save FILE` server option. Existing rsn saves
|
|
|
|
|
are not migrated.
|