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 using Docker.
- 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 |
| Game Server | 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 | Docker Compose | Container management, 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
- Docker Compose
- 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.
-
Configure environment
- There's a fair bit to get setup and running locally, feel free to message me directly if you're looking to get started quickly (@softwareantics on Discord).
- I have plans in the future to automate through process through a CLI tool if my project gains enough traction.
-
Build and run services
docker-compose up --build
-
Set up SSL certificate
certutil -addstore "Root" "%APPDATA%\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 © 2025 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.