Hieroxel
A living voxel world in Rust and Bevy 0.20. Endless terrain streams in around you, and the world keeps changing on its own: grass spreads, flowers seed, saplings grow into trees, vines creep down from canopies, moss creeps through caves, leaves wither once their trunk is gone, and sand and gravel fall.
Build
Linux, with Rust, Bevy's system libraries (see
docs/linux_dependencies.md in the Bevy repository) and clang + mold for fast
linking. Without mold, delete .cargo/config.toml. The first build compiles all of
Bevy and takes several minutes.
cargo run --release
Install
./install.sh
Builds the game, installs it to ~/.local/bin/hieroxel and adds Hieroxel to your
app menu under Games. ./install.sh uninstall removes it again; your worlds stay.
VSCodium
Terminal β Run Build Task (Ctrl+Shift+B) opens kitty, builds the release game and
runs it there. The other tasks run it in the editor's terminal, run the tests or the
benchmark, or install the game to the app menu. F5 debugs. Because VSCodium is a
Flatpak, the tasks build on the host through flatpak-spawn --host.
Controls
| Key | Action |
|---|---|
| Click | capture the mouse |
| WASD, Space, Shift | move, jump, sprint |
| F | toggle flying (Space / Ctrl to rise and sink) |
| Left / right / middle mouse | break / place / pick block |
| 1β9, mouse wheel | choose hotbar slot |
| Q / E | change the block in the slot |
| T (hold) | fast-forward the day and the living world |
| G | pause or resume the living world |
| C | toggle cave culling (for comparison) |
| + / β | view distance |
| V | vsync |
| F11 | fullscreen (also bypasses the desktop compositor: more fps) |
| F3 / H | debug overlay / controls help |
| F2 | screenshot (saved next to the worlds folder) |
| Esc | release the mouse |
Options
--world NAME world to load or create (default: world)
--seed N seed for a new world
--view N view distance in chunks (default: 12)
--fullscreen start fullscreen
--find BIOME start above the nearest ocean/beach/plains/forest/desert/tundra/peaks
--time T time of day, 0..1 (0.5 = noon)
--bench SECONDS measure frame times while turning, then quit
--screenshot FILE save a screenshot once loaded, then quit
Worlds are saved in ~/.local/share/hieroxel/worlds/ when you quit and every minute.
How it is built
world/terrain.rs: noise heightmap (continents, ridged mountains), biomes, tunnels and caverns, trees, desert obelisks, cave moss and lumen crystals.world/mesher.rs: greedy mesher with per-vertex ambient occlusion and sky light. Each vertex is 8 bytes.world/mod.rs: chunk columns, background generation and meshing on worker threads, edits, saving.world/living.rs: the random-tick rules that keep the world alive.render/voxel.wesl: one cheap shader for all blocks: texture array, AO, sky light, fog, water waves and swaying plants.render/textures.rs: every block texture is painted procedurally at startup.
License
MIT. See LICENSE.
