202 karma · joined April 17, 2022
I don't get why every language's community doesn't just do the same thing: roll an idiomatic UI lib on top of SDL. It was tough, but I was able to do it as a single person (who was also building an entire game engine at the same time) over the course of a couple years.
The thumb clusters are definitely a pain, I find myself only really using the 3 closest buttons one each side. Even then, the closest button on the upper row requires a stretch that gets uncomfortable after a while. It hasn't been bad enough for me to consider trying other keyboards though--the prices are too high for me to feel comfortable buying something I might not like.
To anyone that switches to a split keyboard, I strongly recommend also getting a trackball mouse (I use a Ploopy Adept). It lets you center the keyboard in front of you without needing to stretch too far while manipulating the mouse.
I don't mean to be reductive though, clearly a lot of work has gone into this architecture and they know their problems better than I do. Props to the devs for seeing it through and getting the game launched!
I've also been working on an engine for the past few years if you want some code examples: https://github.com/Net5F/AmalgamEngine
For example, developers often devise a system of generic water tiles that they can fit together to form any sort of river. But how do you algorithmically go from the text "I want a river that starts large, gets narrow, then turns East" to a valid map layout? The water tiles and the ways they fit together are specific to the world, so there's nowhere near enough data to train a model. You could hardcode procedural logic based on key phrases ("river" + "start large" + "get narrow" + "turn east"), but that's a lot of work for a very limited implementation.
The most promising idea I've come up with is a node-based intermediate representation. You could use general data on rivers to determine how they're shaped, then use that to translate the user's prompt into a series of nodes on a map. Then, you just need to hand-implement a system to iterate the nodes and place tiles based on whether the next node is straight ahead, turning, etc. This approach could generalize to other concepts like mountains. At that point, it's just about making the text-based stage sufficiently predictive of what the user wants instead of just being a Logo-like.
C++ is (I'm guessing) currently holding up an order of magnitude more applications than whatever you think is better than it. Clearly it has upsides, so it's baffling to me when people greet attempts to reduce the downsides with either "This doesn't make sense, just scrap it for something else" or endless nitpicks about the approach chosen.
A smart guy has decided to put his time towards improving a hugely influential language. That seems like an uncontroversial positive to me, and I welcome any useful results.
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.
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.
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.