New version
After nearly five months of game development, web development and dealing with the consequences of not making regular backups, I have finally released Spaceships v1.5.0. This version introduces a new major aspect of the game, a singleplayer mode with actual gameplay.
Right now singleplayer has been implemented in the form of levels and combat with bot players. To complete a level, you must navigate the map and destroy all bot players without losing all your lives. Right now five levels have been created so far, each progressively more difficult. In addition to gameplay, these five levels include a story displayed at the beginning of a level, and so these levels are considered the game’s story mode.
Version 1.5.0 is incompatible with all 1.4.x versions. If you’re version is 1.4.x and you try to connect to a v1.5.0 server, you will get an error.[1]
Story
In the story that I have written for story mode, the year is 2031 and all consumer devices have extreme authoritarian restrictions on them that prevent users from installing custom operating systems and applications, and restrict the websites users visit. The system that enforces these restrictions is the Environment Verification Integrity Library, or EVIL, which is created and maintained by Globye, a company affiliated with the US government. The restrictions imposed by EVIL aren’t entirely fictional, they exist in the modern world on most mobile phones which prevent the user from installing an operating system of their choice on their “own” phones. This technology in the real world is euphemistically known as “trusted computing”, and might in the future exist on laptop and desktop computers.
The restrictions imposed by EVIL are enforced using public-key cryptography. One way of thwarting these restrictions is to get access to Globye’s private key, which will allow custom operating systems with none of Globye’s restrictions to be installed on any EVIL device.
In story mode, you are an insurgent in the Digital Underground Resistance Front (DURF) fighting in a military operation against Globye with the goal of completely destroying EVIL. DURF plans on destroying EVIL by recovering Globye’s private key in a physical attack on Globye’s premises. DURF has intelligence that Globye’s private key is stored inside a bunker on Epstein island, known in the story as LSJ (“Little Saint James”). The five levels in story mode consist of the player taking over a military ship to sail to Epstein island and breaking into the bunker to liberate this private key.
Screenshots
Here is a screenshot of these five levels in the GUI.

Here’s a screenshot showing the start of level 1. Attached to this post is a video showing the completion of this level.

Regeneration change
One major change to gameplay that has been implemented in both levels and multiplayer is how regeneration works. Previously the player regenerated health at a constant amount, taking 50 seconds to regenerate from almost no health to full health.
A problem with this model of regeneration is that regeneration for an unlimited amount of time can make the levels too easy, and it makes gameplay more boring by incentivising players to wait for their health to fully regenerate before taking on a battle.
The way regeneration works has been changed so that by default the player regenerates at twice the original rate, but only for 25 seconds. In effect, under the assumption of no health powerups, this is equivalent to the player being able to fully regenerate one entire health bar’s worth of health, but no more.
Changelog
Here is an incomplete list of all the changes I have made over these months of development.
Major changes
- Story mode.
- Levels.
- Bot players.
- Allowing many player options to be configured in the world config, no longer needing the hacky solution of effect zones.
Minor changes
- Changed the default regeneration configuration.
- Now requiring all worlds to be finite, limited to a size of 65536x65536.
- Changed the link and background colour in the GUI. The link colour has been changed from cyan to light yellow, and the background has been changed to a darker grey.
- Increased font size of GUI labels from 12 to 14.
- Addition of four new sky presets (Night Dark, Night Light, Galaxy Dark and Galaxy Light), and changes to the Night, Galaxy and Ocean presets.
- Some sounds effects are slightly quieter (bug fixed in sound generation).
- Increased GUI scrolling speed, especially on a touchpad when using Wayland.
- Made multiple changes to the server config schema, including:
- The addition of many RON extensions which make writing configs more convenient, but these are incompatible with older configs.
- Changed many occurrences of rectangles to use a dedicated type, rather than just
p0andp1. - Renaming of many structs.
- Improved performance when there are a large number of players by optimising the implementation of thrust and block collision sounds.
- Security improvements for publication servers that mitigate a certain type of denial-of-service attack.
- Changed the UI to only show the bottom-left status (which includes the number of players and spectators and the ping) when the chat window is open, as it’s otherwise distracting.
Bug fixes
- Fixed panic when the server’s stdin or stdout isn’t a terminal (issue 19).
- Fixed bug with GUI state being impossible to reenter if you click the back button in it.
- No longer panicking if the sound fails to initialise (like if on Flatpak with permissions disabled).
- Fixed error message in discovery when game server is of an incompatible version. Now it’s correct about whether the server is a development server.
- Fixed segmentation fault during panic on the client (issue 1).
- Fixed bug with the client process not closing on X11 on some distros (works fine on Arch Linux, broken on Debian 12) when the window closes.
- Fixed horrible sounding loud audio popping whenever the player’s position is NaN.
Note that if you’re on v1.4.2 or v1.4.3 due to a bug in the error message, you will get a warning saying that a v1.5.0 server is running a “development version” when it is not. ↩︎

