Virtual worlds are really important to me. They've helped me through a lot of tough times, and I think they're a necessary part of our future. Unfortunately, they've largely been stagnant for the past 15 years. This is my attempt to push the needle forward by providing developers with an open-source engine to easily make their own.
This is a sprite-based, isometric-only, single-server, non-instanced engine. I'm keeping it very focused so that we can make the workflow as streamlined and joyful as possible. The full project will eventually also include a chat server and user account management.
A simple demo world is available to play around with, just download and run the client: https://github.com/Net5F/Amalgam/releases/latest
It's still very early, but the netcode and engine architecture are in a pretty good place. I have two network load test scenarios that I'm benchmarking against: 150 clients in 1 area (video link in repo readme), and 1000 in groups of 10. Even on modest hardware, there's plenty of headroom available for adding more features. Still to come: NPCs, items, interactions.
Load test results (Linode server, $30/mo, 2 - 2.6GHz):
Scenario | Bandwidth usage | Average CPU usage (200% max)
150 in 1 | 1.66MB/s | 25%
1000 in 10 | 1.31MB/s | 76%
I welcome all feedback. The project has a long way to go before it's really useful to developers, but I figured I should get over my nerves and start showing it.
Can you explain in what ways? From my perspective virtual worlds are vastly more advanced than 15 years ago, with things like Gather with spatial audio, VRChat with full body tracking, etc.
For example, compared to commercial worlds from 2005 (or text muds from 1995 for that matter), modern virtual worlds are largely the same or worse at helping players form meaningful relationships with eachother. The same goes for their proficiency at helping players connect to the world itself, or at moderating their playerbases.
These are all things that could be more rapidly iterated on in a healthy indy scene, producing new trends and patterns that would lead to more fulfilling interactions with virtual worlds.
Good point about the sprite editor. I've been struggling with finding interesting things to show in picture form since most of the work so far isn't graphical. The sprite editor and in-world build mode are things that I should show, though.
What is the most expensive part of the game loop in terms of processing time?
Specifically with the game loop though, the interest management system takes the most time, with the movement system close behind. The interest management system uses a spatial partitioning grid (the "EntityLocator") to efficiently build lists of what entities are in range of each client entity. The movement system moves entities while enforcing a (currently very simple) collision check.
With 1000 clients connected, the interest management system averages around 600us per run, and the movement system around 450us (measured using Tracy). The server runs at 30 ticks per second, so the simulation loop has to fit within a 33ms deadline each tick.