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.
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.
> Unfortunately, they've largely been stagnant for the past 15 years.
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.
I'm speaking mostly to the design of our virtual worlds. New tech is certainly interesting, but I feel we're trying to build a roof before the walls.
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.
Nice work!
I like this isometric perspective, it is so simple yet looks so good. I like also that I can understand and implement its rendering without knowing much about computer graphics.
I don't have time to test it out myself right now, but as a suggestion, maybe you could include some more picture in the repository description (I would be especially interested in the sprite editor).
All credit to https://kenney.nl/ for the art. These free isometric assets have been invaluable during development, and they look great!
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.
It's worth saying that, by far, most of the processor time goes towards the networking (serializing, compressing, sending, receiving).
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.
That's a really good idea. I've been thinking of what I could do as the first little reference project after I split up the engine and project code. I think a small world with text chat and games like tic tac toe would be perfect.
Apparently this code is written in C++, as some files have a ”.cpp” suffix. There is a comment about MSVC, so I don’t know what OS it is written. It would be interesting if it worked on SerenityOS, as that community could help sustain it during its startup phase.
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.