6888 Commits

Author SHA1 Message Date
chexit 278f356aa6 Scope camera picture milestones to the run whose frame drew them
A camera shown only as the screen's own view was never prepared: the note
required a non-empty picture list. Two runs picking the same local id both
claimed the screen's frame, though only the first one's camera was drawn
from it. The client now notes whether the frame was a world frame and the
(run, camera id) the screen's world was drawn from, so the main-view
milestone belongs to the run whose selection the screen used, and a title
or loading frame reports the path off without erasing earlier milestones.

A world transition clears the submission, the main-view selection and the
milestones: another world's cameras are not drawn. A camera given to
set-main-view drops its picture target, so its milestone starts over until
a frame is drawn from it. prepared stays a host-side encoding milestone,
not target registration, not a GPU fence, not a visible pixel.

Also gate the client's note on the `mods` feature: without it the default
horizon-client build did not compile.

Verified: horizon-mods 37 unit, 44 sandbox (1 ignored; real Wasmtime
guests, the two-run test shows each id 7 follows only its own pictures and
selection) and 4 api_reference; client checks and build with and without
`mods`; gfx lib tests.

Co-Authored-By: Kimi Code <noreply@moonshot.cn>
2026-11-04 21:04:47 +03:00
chexit efe017ffb1 Report per-run camera picture readiness milestones
API 30 adds render.camera-status: availability, the last noted frame's
mod-camera picture path, the calling run's accepted set-views submission
for this world generation, and per-camera prepared flags. A camera is
prepared when the renderer encoded its picture into the texture target
in a real frame of this generation, or a world frame rendered from it as
the set-main-view selection: a host-side encoding milestone, not target
registration, not a GPU fence, not a visible pixel. An empty set-views
clears the request; a resubmission, world transition or mod reload waits
for a new frame. The renderer reports the pictures it drew each frame;
the game notes the frame after a successful render. Verified with two
real Wasmtime guests sharing local camera id 7: each run's readiness
follows only its own submission and main-view choice, and a world
transition resets both.

Co-Authored-By: Kimi Code <noreply@moonshot.cn>
2026-11-04 21:04:47 +03:00
chexit 73b9d30704 Free a failed film take's files and keep the finished one
The writer removed its video, raw sound and log only when a take was
cancelled, so an encoder error or a non-zero ffmpeg exit left them in the
films folder. A failed take now removes exactly the files it wrote; the
log's last lines move into the error, since the log itself goes.

The encoder always writes <name>.video.mp4, and <name>.mp4 appears only
after a successful mux or rename. A failed, cancelled or no-audio take
therefore cannot overwrite or delete a film of an earlier export with the
same name. The writer's entry point takes the ffmpeg and its arguments so
a test can drive a failing encoder.

Co-Authored-By: Kimi Code <noreply@moonshot.ai>
2026-11-04 20:17:29 +03:00
chexit 45b43f00df Preserve geometric normals for dynamic block models
Co-Authored-By: Kimi Code <noreply@moonshot.ai>
2026-11-04 17:51:24 +03:00
chexit 57f8b2853c Scope mod camera targets to their running owner
Co-Authored-By: Codex <noreply@openai.com>
2026-11-04 16:19:04 +03:00
chexit d8fa77b000 Report per-run sound source application milestones
Co-Authored-By: Codex <noreply@openai.com>
2026-11-04 16:12:51 +03:00
chexit 6230ec7031 Report per-run point light processing milestones
Co-Authored-By: Codex <noreply@openai.com>
2026-11-04 16:09:12 +03:00
chexit e44ad82a9f test: exercise moving mass sources through offline acoustics capture
Co-Authored-By: Codex <noreply@openai.com>
2026-11-04 16:09:12 +03:00
chexit f95f03c08e Add optional mod test fuel profiling
Co-authored-by: Codex <codex@openai.com>
2026-11-03 11:23:47 +03:00
chexit ed7615d362 Add flat render world to mod test scripts
Co-authored-by: Codex <codex@openai.com>
2026-11-03 10:35:16 +03:00
chexit 86e1d272ea Improve mod trap diagnostics
Co-authored-by: Codex <codex@openai.com>
2026-11-03 10:29:06 +03:00
chexit c89c78c470 Scope capture stops and cancel on world changes
Co-Authored-By: Codex <noreply@openai.com>
2026-11-03 00:22:34 +03:00
chexit f4c1131d37 Expose scoped acoustics and capture capability states
Co-Authored-By: Codex <noreply@openai.com>
2026-11-03 00:18:44 +03:00
chexit 86b1014a92 Expose per-world smoke readiness to mods
Co-Authored-By: Codex <noreply@openai.com>
2026-11-02 22:11:51 +03:00
chexit 2095590807 Merge Horizon v0.2.97 into AirDef fork
Preserve AirDef replay lighting and acoustic commands while retaining upstream shadow and HDR fixes. Give the two entity shadow shaders distinct entry points.

Co-Authored-By: Codex <noreply@openai.com>
2026-11-02 01:17:43 +03:00
chexit eae00eafc5 Preserve acoustic resets and bound worker jobs across chunk changes
AirDef #110 #111 #116. Establish canonical standalone fork metadata.

Co-Authored-By: Codex GPT-6.1 Terra <noreply@openai.com>
2026-11-02 01:04:43 +03:00
chexit b717c30924 Acoustics follows chunk residency and voice lifecycle (#110 #111 #112)
Co-Authored-By: Kimi <noreply@moonshot.ai>
2026-11-02 00:10:58 +03:00
chexit 6a893473a4 Mods read live blocks while replay shows history (#105)
Co-Authored-By: Kimi <noreply@moonshot.ai>
2026-11-02 00:10:58 +03:00
chexit 3de52c252c game.world-seed (API 25)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit 734f632cbf Mod canvas with terrain tiles and mouse input (API 24), set-acoustics (API 23), acoustics stage 3: reverb
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit 523c855b09 Mod chunk tickets through the server thread (API 22), softer searchlights and light halos, acoustics stage 2: echo taps
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit 7012640e54 Acoustics stage 1: direct-path occlusion ported from Sound Physics Remastered 453654e (GPL-3.0, separate files), off by default; stereo output on surround devices; mixer sum in a fixed order (API 21)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit 32f6161921 HD clouds: rays from a far point, so the view bob's eye offset does not bend them
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit b809f5eed0 Persistent mod sound sources: start, update, stop with generations, click-free voices, loop sections, voice budget and virtual loops (API 20)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit 4cb83fcc9b Mod command trees: command.set-tree and set-suggestions, typed parse, colouring and completion from one tree (API 19)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit 94dc8eda1a Film export: every frame in flight reaches the writer, listener follows the main view, cloud wind on film frames, set-smoke reports real activity
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit 288bfb66a5 HD: coloured sun through glass and leaves, rain ripples on water, film motion blur and depth of field
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit 71cdcac1db HD clouds and fog polish: cloud panorama, cirrus, terrain-aware fog, far smoke cascade; replay world log and film clock; material overlays by sprite name
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit 251bb6777f Spot lights for mods (render.set-spot-lights, API level 16): surfaces lit in the cone, a volumetric beam stopped by depth (#60); film capture (render.capture-*, set-film-quality, API level 17): fixed-step clock, frames piped to ffmpeg or PNGs, offline audio, no chat in the frames (#58); the client builds without the mods feature again
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit 9c33fdae2c Mods: render.set-main-view (API level 15) renders the screen's world from a mod camera with the full pipeline, so replays get HD and the post effects; small mod views get the post pass with their own camera
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit 43392aec6b HD smoke: young trails drawn at least as wide as a grid cell (density scaled to keep the mass), gentler bulges, so a trail is a smooth ribbon and not a chain of puffs
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit 4a6ab8117a HD clouds composited by depth so terrain and vehicles inside or behind the layer are hidden and those in front stay in front (#67); world-anchored noise everywhere (cloud detail by height above the layer, fog, smoke and puddle scales dividing the wrap) (#68); the replay's time is visual only, gameplay sky darkening uses the world's time (#70)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit b1aaf32851 HD: volumetric smoke and missile trails with clear tunnels through fog and cloud (render.set-smoke, API level 14; #54); sun speculars by material, wet surfaces and puddles in rain, wind in foliage (HORIZON_HD_SPECULAR=0, HORIZON_HD_WIND=0, HORIZON_HD_SMOKE=0); HD shaders checked for HLSL translation in their own test
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit 74d1e61813 HD clouds: noise scales that divide the camera's 65536-block wrap, so the clouds and their shadows no longer jump at x or z = 0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit 60eb9be45f HD split into modules (gfx/hd/: one Rust file and one WGSL file per pass, a shared prelude), contracts for colour, depth, alpha, time and coordinates written down, tests that the frame layout and bindings match between Rust and WGSL (#45)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit 0bcc4b56dc HD fixes: rain level from the world not from rain geometry (#41), TAA history on the jittered grid (#38), vanilla cloud tint without a depth heuristic (#35), air fog once over water (#37), translucent things in front of HD water (#36), cheaper sunrise fan (#39), halos in thick air capped; mods: render.set-time-override (API level 13) so replays show their recorded time of day (#57)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit f87d2c518f Mods: world queries for simulations (render.query-rays, query-sections, world-changes; API level 12): block-exact rays and section occupancy by collision, sight or sound, answered next tick within budgets, and a log of changed sections
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit a8235704e4 HD: Photon-style sunsets (Rec. 2020 atmosphere, sun tint, blue hour; MIT), volumetric clouds with ground shadows instead of vanilla's in HD, volumetric fog with sun shafts and morning mist (HORIZON_HD_CLOUDS=0, HORIZON_HD_VOLFOG=0)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit a8b85116f4 HD water: a darker blue, a little clearer, ripples a little higher
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit 2b52657d85 HD sky and light: a physical atmosphere (Rayleigh, Mie, ozone; constants and transmittance after Photon, MIT) for the sky, haze, fog and water reflections; warmer sunlight from the atmosphere's transmittance, a gentle sky-coloured ambient, soft PCSS-lite shadows near the player, a haze round the sun; lighter water with fine ripples
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit 59426881f3 HD water: no vanilla texture on the surface (the biome colour only), a darker, deeper colour
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit 54ada71e63 HD water: its own pass (colour, normal, depth), the floor under it lit, a composite with world-space waves, refraction with depth absorption in the biome colour, screen-space reflections, Fresnel and a shadowed sun glint (HORIZON_HD_WATER=0 to switch off)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit 172f8ef171 HD: temporal upscaling (HORIZON_HD_SCALE: world, G-buffer and lighting at a lower size, rebuilt to the window in the TAA pass); fix flickering shadows near the player (the near cascade lost its sections on frames the far one was held, the held far matrix ignored the camera's step, plants' normals turned with the camera); TAA keeps more history when still
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit 17d10d1d8c Mods: model handles (render.model-id, model-generation, set-models-by-id; API level 11) so mods send no model names each tick; clear-post and set-lighting documented
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit a321460f1c HD: shadows draw only sun-facing quads and skip buried sections, the far cascade every second frame; TAA (Halton jitter, reprojection by depth, YCoCg variance clipping) before bloom
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit 37cf7ea714 HD: GPU time per pass in the F3 timing list, half-resolution GTAO with a depth-aware blur
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit 2228844b92 HD: lights culled per 16x16 tile (surface and halo lists built on the CPU), a naga test for the lighting shaders
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit 72d9e70187 HD: bind groups cached until a resize or a new source, shadow passes draw only the entities that cast shadows
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit 3cfa79c011 HD lighting stage 2: sun and moon shadow cascades, the world relit (sun by face angle and shadow, sky and block light through the lightmap), light shafts and halos, fog over it again, a light colour grade
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00
chexit fff9f9a746 HD lighting: G-buffer pass, per-pixel mod point lights in HDR, bloom and tone curve; render.set-lights and render.set-lighting (API level 10)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:10:58 +03:00