Winterhaven is a work-in-progress 2D top-down online role-playing game set in a medieval fantasy world. Experience real-time multiplayer gameplay with smooth movement and secure networking infrastructure.
This project showcases full-stack game server development capabilities, demonstrating expertise in distributed systems, real-time networking, and secure architecture.
We have a simple MVP demo environment setup for people to test out Winterhaven in it's early stages. Below you'll find instructions to play:
- Download the clients latest release here.
- Extract
Client-x64.zipand run theClientapplication.
Note
The game is not complete and is only hosted to showcase the project to potential employers whilst I'm looking for work. User account data does not persist and as a result, if the server crashes, your account will be deleted.
Warning
In rare cases, you may not be able to register or login due to the hosts networking bandwidth limitations for their free tier; however, this issue only occurs in instances where the client is built and ran from GMs CLI; compiled instances of the client seem to be fine.
-
Security Infrastructure
- ASP.NET Identity authentication.
- JWT-based authorization.
- Single-session enforcement.
- SSL/TLS encryption via Caddy reverse proxy.
-
Technical Architecture
- Containerized microservices on Kubernetes.
- MSSQL database with Entity Framework Core.
- Real-time WebSocket communication.
- Clean architecture by design.
-
Multiplayer Experience
- Register and login via the game client.
- Player movement with client-side prediction and server reconciliation.
- Communicate with other players on the same server.
| Component | Technology | Purpose |
|---|---|---|
| Client | GameMaker (GML) | Game rendering, input handling, client-side prediction |
| Gateway | ASP.NET Core, C#, StreamJsonRpc | Centralized connection service for all clients |
| Room | GameMaker (GML) | Real-time game logic, state authority, world simulation |
| Web API | ASP.NET Core, C# | Authentication, user management, data persistence |
| Database | MSSQL + EF Core | Player data, accounts, persistent storage |
| Reverse Proxy | Caddy | SSL/TLS termination, routing |
| Orchestration | Kubernetes | Cluster orchestration, service coordination |
Note
Are you an employer or just hoping to test out the game as quickly as possible? I've hosted it online in a test environment. All you need to do is download the client, make an account and login.
- Docker Desktop
- Kubernetes
- GameMaker (Latest Stable, not LTS)
- Download the latest release for the client.
- Get the latest release from GitHub Releases.
- Please note that due to licensing requirements the client cannot be open-source.
- Follow the Kubernetes setup guide here.
- Extract the Caddy root certificate and trust it:
$pod = kubectl get pod -l app=caddy -o jsonpath='{.items[0].metadata.name}' kubectl exec $pod -- cat /data/root.pem > "$env:APPDATA\Winterhaven\Caddy\root.pem" certutil -addstore "Root" "$env:APPDATA\Winterhaven\Caddy\root.pem"
- Launch the client through GameMaker IDE or Stitch, create an account and have fun!
See CHANGELOG.md for version history.
- @meseta - It seems like whenever I encounter an issue with NetCode, this man has a solution.
- @yellowafterlife - Your PromiseGML implementation has saved me from multiple headaches.
- @Sidorakh - HTTP.GML helped me get up and running quickly!
- @bscotch - Stitch for VS Code is a godsend; thank you!
This project is dedicated to my dearly departed partner Bellamy, I love you level 7.
Copyright ยฉ 2026 Mathew O'Dwyer. All rights reserved.
This software is proprietary and may not be redistributed, modified, or used commercially without explicit permission from Mathew O'Dwyer.