Voxelius devlog (0.0.1.2512)
On February 17th 2025 I decided to make a slight rewrite of the entire game to integrate almost all the cool features from an internal work-in-progress branch of QFengine (an experimental quake-like game engine that uses Voxelius as a base for its source code tree); One can say I finished today with the release of the second public test in 2025.
Parting ways with Git LFS
People that want to build the project must not be bothered to also install Git LFS addon and enable it for the cloned repository. In general, using LFS kind of became a huge annoying thing that spilled over. Again, the tree has been lost (archived, actually) again (last time I decided to part ways with any kind of GPL’ed code, the archived tree is still a thing as well).
No more crusty singleplayer
I decided against supporting single-player at all. Especially because Voxelius as a game has always been supposed to be a multiplayer-only. If you want an almost singleplayer experince, no one stops you from spinning up a local dedicated server. Sorry not sorry.
Feature generation
After like what? Three months? Yeah… The game now generates nice trees around the world that have absolutely nothing in common with a bigger voxel game made by good people but owned by Microsoft.
New title card
Because I decided to move away from keeping stuff in an organization and mostly work on the game myself, it makes sense to change the client splash to something more about myself.
Player movement
People complained about not being able to fly around the world, especially when you get stuck somewhere. So I decided to add (for debugging purposes) a flight mode alongside making some very needed improvements to the toggle system.
You can toggle flight mode by holding F3
and pressing F
Toggles system overhaul
Speaking of toggles. Now the game defines GLFW_KEY_F3
as DEBUG_KEY
and restricts any kind of configuration to bind to that key. Additionaly, the entire toggles system now introduces toggles::get
and toggles::set
functions instead of directly accessing boolean values.
Threading and Tasks
A new threaded task system has been put in place that allows not only meshing but general-purpose tasks to run in the background while the game renders the world and processes input. Your desired threaded task must extend the Task
class defined in shared/threading.hh
and implement a process
method that would run in a separate thread and a finalize
thread that would run in the main thread after process
returns.
Also now one can specify the amount of pooled threads the application can use by specifying the threads
with a desired number or max
to use the constant value of std::thread::hardware_concurrency
:
vclient -threads max -game.username untodesu
Oh and also, configuration keys from client.conf
and server.conf
can now be overriden by putting them in the command line arguments.
Experimental gamepad support
I was given a gamepad at work for work purposes, but also added a semi-competent support for gamepad input to Voxelius (I prevent burning out by switching to hobby projects from time to time). The settings screen got a special tab for input configuration and three sub-tabs for mouse, keyboard and gamepad.
You can switch between gamepad and keyboard-mouse input on the fly by holding F3
(the DEBUG_KEY
) and pressing P
. When the game detects a connected gamepad, it blocks all keyboard and mouse input and instead prioritizes gamepad when the gamepad input is enabled.
you should be able to bind buttons and axes with a similar way one binds keys in the configuration. To bind a button, press on the control, then while it’s displaying ...
, press the gamepad button. Same thing works with axes, except you should pull it to its limit for the game to recognize the input.
NOTE: gamepad support is by no means complete, you still can’t place or break voxels and switch between slots in the hotbar. I suppose one of the next public test releases should rectify this and fully define all the inputs a player can have for the gamepad.
Server browser overhaul
The game got a direct connection screen, making the server browser almost fully feature-complete compared to Minecraft.
The server browser will also now display a warning text and a tooltip when the server bothered by it reports a different protocol version.
Aggressive caching
Considering world generation might now be certainly slow, it makes sense for the server (where constant disk usage spikes don’t usually correlate with disk degradation) to aggressively cache every generated chunk. To enable this mode, pass agressive-caching
command-line parameter:
vserver -agressive-caching -threads max