From 132b1d07c4091dafcb13307455c40c9dbe911daa Mon Sep 17 00:00:00 2001 From: pkuzic Date: Fri, 25 Sep 2026 23:22:02 +0100 Subject: [PATCH] MONKEY (reviewfix): document Classic skybox fidelity Co-Authored-By: GPT-5.6 Sol (Codex) --- LIGHTING.md | 5 +++++ crates/benilla-world/src/skybox.rs | 10 +++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/LIGHTING.md b/LIGHTING.md index ff447c35..59d58ea2 100644 --- a/LIGHTING.md +++ b/LIGHTING.md @@ -38,6 +38,11 @@ behind each constant. | Zone skyboxes | the painted sky a zone's `LightParams` names (clear-weather slot, storm slot lerped by the storm blend) for the living, fading in by the Light sphere falloff with the modern client's crossfade (ghost > WMO > zone); extended `LightSkybox.dbc` flags `0x1` day cycle, `0x2` keep sun/moon/stars/clouds, `0x4` fog-colour horizon cone, plus a celestial second model; every skybox now plays its bones, texture transforms, colour and alpha tracks (`benilla-world/src/skybox.rs`, `skybox_anim.rs`, `benilla-formats/src/light/skybox.rs`) | Advanced Graphics → Zone Skyboxes, cvar `zoneSkyboxes` (0 Off default, 1 On; High = 1), env `WOW_ZONE_SKYBOXES=0\|1` | | Night and interior level | global dimming of the night sky term and of interior ambient | `nightGain`, `interiorGain`, `interiorBakeFloor` | +`zoneSkyboxes = 0` disables only the added living-player zone slot. WMO and ghost skyboxes are +the reference 1.12 slots, so their fidelity fixes remain active in Classic: authored colour and +alpha tracks affect the layer, non-white M2 colours reach the mesh, deterministic captures pose at +their pinned time, and the batch-order base reserves the lower celestial band and final fog cone. + Players reach all of it from **Options -> Advanced Graphics** (a Graphics Preset over everything, a Render Distance slider, a Lighting Quality preset Off / Low / Medium / High / Ultra plus the individual rows; Classic / Off is the original client look). The dev build has a panel for all of it: **Ctrl+Shift+D → Lighting & shadows**, with Dim / Default / Bright presets. diff --git a/crates/benilla-world/src/skybox.rs b/crates/benilla-world/src/skybox.rs index 5c153c57..ba807803 100644 --- a/crates/benilla-world/src/skybox.rs +++ b/crates/benilla-world/src/skybox.rs @@ -24,6 +24,13 @@ //! the game day, `0x2` keeps the celestial pass, `0x4` draws a fog-colour cone over the horizon; //! a celestial model draws as a layer under its main model. Every batch animates //! ([`crate::skybox_anim`]): bones, texture transforms, colour and alpha tracks. +//! +//! MONKEY (reviewfix): those M2-fidelity repairs deliberately also apply when `zoneSkyboxes` is +//! off. The reference WMO and ghost slots animate their authored colour/alpha and texture tracks, +//! use non-white M2 colours, and draw batches in authored order; deterministic captures pose those +//! same tracks at their pinned time rather than substituting the bind pose. The main-order offset +//! only leaves room for a celestial under-layer and the final fog cone. The cvar gates the added +//! zone slot, not fixes to the two 1.12 slots. use std::collections::{HashMap, HashSet}; use std::sync::Arc; @@ -48,7 +55,8 @@ use benilla_formats::{SKYBOX_FOG_BLEND, SKYBOX_FULL_DAY, SKYBOX_KEEP_CELESTIAL}; const SHOW_SKYBOX: u32 = 0x40000; /// MONKEY (skybox): batch-order base of a main model's batches; a celestial layer takes `1..`, so -/// it draws first, under the main model, and the fog cone takes [`FOG_CONE_ORDER`], last. +/// it draws first, under the main model, and the fog cone takes [`FOG_CONE_ORDER`], last. MONKEY +/// (reviewfix): this ordering also protects the reference WMO/ghost slots when zone skyboxes are off. const MAIN_ORDER_BASE: u16 = 24; /// MONKEY (skybox): the fog cone's batch order, the band's last distinct step. const FOG_CONE_ORDER: u16 = 56;