8aacb48798
release.yml now releases the game by itself: after every green checks run of a push to main, every hour (a release the cooldown held goes out without another merge) and by hand. tools/release_train.py decides from the pull requests merged since the last published game release: a release when one changed what players run and the last release is 3 hours old, at once for a pull request labelled release-now; skip-release pull requests don't count. RELEASES_PAUSED=1 stops it. Tags vYYYY.MM.DD, then .1, .2 the same UTC day. Linux (ubuntu-22.04) and Windows build on GitHub with Cargo caches, macOS on the Mac mini's runner (MAC_RUNNER=macos-latest sends it to GitHub). Each builds horizon-client, horizon-ctl and horizon-prepare (all three named: --bin selects only the named binaries), checks all three exist, checks their libraries, starts each one, packages with xtask and archives; the Mac also runs the game offscreen for 300 frames on a new world with resources prepared from its own Minecraft. The notes: New (label feature), Fixed (the rest), Known issues (docs/known-issues.md). A hand-started run off main, or with dry_run, builds everything and writes the notes but publishes nothing. docs/release-flow.md describes the flow, the labels, pausing and rolling back; the launcher gets a test that a release turned back into a draft is never offered. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Horizon documentation
To play, use the launcher; the project site is playhorizon.dev. These pages are for developers.
Build and run
- Build from source: your own copy of the game, resource preparation,
cargo run. - Native client: options, controls, the dedicated server,
horizon-ctlscripting, packaging, architecture. - Graphics: the Simple and Advanced graphics settings, the graphics benchmark and what it measured.
- Launcher: installs, updates and starts builds; its CLI and MCP server; releasing it.
- Menus: the title, world list, create world, multiplayer, options and pause screens share the launcher's design tokens and fonts (
crates/horizon-theme), drawn byui_themeover a live frozen backdrop (game/backdrop.rs, blurred and graded bypost.rs). Options → Interface → Menu style switches to vanilla's screens (Classic, kept inhorizon.txt;HORIZON_MENU_STYLE=horizon|classicoverrides it, and scripted runs default to Classic). Title (webm), worlds, options, pause.
Parity
- Rust rewrite status: completion criteria, how to reproduce the validation, and per-area scope.
- Parity workflow:
tools/parity.py, the gate, other machines, merging. - Area notes: block behaviours and ticking, section meshing.
- Decompilation and research lab and decompilation status: the local game inspection workspace the harnesses build on.
Architecture: world generation
- World generation: the pipeline from noise to features.
- Noise generation, compiled density functions, structure density, terrain filling.
- Biomes: lookup, temperatures.
- Surfaces: material surfaces, material conditions, rule libraries, vertical anchors, value providers.
- Carving, heightmaps, feature placement.
Architecture: world data and simulation
- World data: chunk storage, palettes, region files.
- Block-state codecs, scheduled ticks.
- Collision geometry: shapes, collision, movement and fluids.
- Face visibility: which model faces the mesher emits.