darkin.space is a multiplayer space shooter I've been working on for years now. It's inspired by classics like DarkOrbit and Realm of the Mad God - one of those .io games where you fly around, shoot stuff, and try not to get blown up.
The Journey
It's been rewritten a few times over the years:
Backend
- Started with a JavaScript backend using WebSockets
- Then moved to TypeScript for better type safety
- Eventually rewrote everything in Go using the Actor model and ECS
Each game world runs in its own isolated actor, so if one crashes it doesn't bring down the entire backend.
Client
- Game Maker Studio 1.4 - initial prototype
- Game Maker Studio 2 - upgraded for better features
- Godot Engine - final rewrite for its open-source nature and CI/CD support
The switch to Godot was mainly for automated builds through CI pipelines, which Game Maker Studio made quite painful. (godot >>> GMS)
Architecture
The game has two main parts:
The Lobby - A web-based hub where players can:
- Join games via OAuth authentication
- View leaderboards
- Accept and track quests
- Manage their profile
The Game Server - Handles real-time gameplay with:
- WebSocket connections for low-latency communication
- Actor model for isolated, fault-tolerant game worlds
- ECS architecture for performant entity management
- RESTful API for lobby interactions
darkin.space is still a work in progress, something I work on when I find the time. It's been a great learning project for experimenting with different technologies and architectures.