Commit Graph
1608 Commits
Author SHA1 Message Date
Claude 78d7e94433 MONKEY (polish): per-view post uniforms written at prepare, not allocated per frame
Colour grading and sun shafts built a fresh `UniformBuffer` (a new GPU buffer)
inside their render-graph node every frame. Each view now owns one small
UNIFORM | COPY_DST buffer, created the first frame the effect is on and
rewritten in place with `RenderQueue::write_buffer` in
`RenderSystems::PrepareResources`, the same shape as bloom's prepare-time
uniform. The node only binds it. The pass still gates on the extracted view
component, so the kept buffer never runs a disabled pass.

Verified: cargo check -p benilla-app; rustfmt clean on both files. No GPU
here; built on Linux only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y6yUWgPosSakvL23gtgvpH
2026-09-25 17:46:00 +00:00
Claude 0a227d393e MONKEY (polish): per-view post uniforms written at prepare, not allocated per frame
Colour grading and sun shafts built a fresh `UniformBuffer` (a new GPU buffer)
inside their render-graph node every frame. Each view now owns one small
UNIFORM | COPY_DST buffer, created the first frame the effect is on and
rewritten in place with `RenderQueue::write_buffer` in
`RenderSystems::PrepareResources`, the same shape as bloom's prepare-time
uniform. The node only binds it. The pass still gates on the extracted view
component, so the kept buffer never runs a disabled pass.

Verified: cargo check -p benilla-app; rustfmt clean on both files. No GPU
here; built on Linux only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y6yUWgPosSakvL23gtgvpH
2026-09-25 17:46:00 +00:00
Claude 42635eeeff MONKEY (polish): sun shafts march a half-resolution sky mask
The radial blur read the scene depth 28 times per full-resolution pixel. A
new mask pre-pass (`fs_mask`, R8Unorm at ceil(w/2) x ceil(h/2)) loads the
depth once per half-res texel and thresholds it with the same sky test
(depth <= 1e-7 on infinite reverse-Z); the blur then takes 28 clamp-to-edge
bilinear taps of the mask. Only the mask stage is MSAA-specialised (single
and multisampled depth layouts, one pipeline each); the blur pipeline is
keyed by the target format alone.

Verified: cargo check -p benilla; all four WGSL variants (blur, blur +
MULTISAMPLED, SHAFT_MASK, SHAFT_MASK + MULTISAMPLED) compose and validate
under naga_oil 0.20 / naga 27 offline. No GPU or WoW data in this
environment, so the image is not captured; built on Linux only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y6yUWgPosSakvL23gtgvpH
2026-09-25 17:42:29 +00:00
Claude bc43ed063e MONKEY (polish): sun shafts march a half-resolution sky mask
The radial blur read the scene depth 28 times per full-resolution pixel. A
new mask pre-pass (`fs_mask`, R8Unorm at ceil(w/2) x ceil(h/2)) loads the
depth once per half-res texel and thresholds it with the same sky test
(depth <= 1e-7 on infinite reverse-Z); the blur then takes 28 clamp-to-edge
bilinear taps of the mask. Only the mask stage is MSAA-specialised (single
and multisampled depth layouts, one pipeline each); the blur pipeline is
keyed by the target format alone.

Verified: cargo check -p benilla; all four WGSL variants (blur, blur +
MULTISAMPLED, SHAFT_MASK, SHAFT_MASK + MULTISAMPLED) compose and validate
under naga_oil 0.20 / naga 27 offline. No GPU or WoW data in this
environment, so the image is not captured; built on Linux only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y6yUWgPosSakvL23gtgvpH
2026-09-25 17:42:29 +00:00
Sam SungandClaude Opus 5.5 1d1f0a2c03 Comments in benilla-app, the glue screens, harness, settings and the rest: one line of fact each, no history, no record numbers (#365)
Part of #41: the last of five `benilla-app` pieces. This one is everything the others did not cover: the addon harness, the settings registry, the glue screens (login, realm list, character select and create), key bindings, the minimap, nameplates, the loading screen, transports, the performance instruments, the smaller modules, the integration tests, and the UI asset files (`OptionsFrame.xml`, `benilla.toc` and the rest). Their comments are rewritten to the rule in `docs/METHOD.md`, which is what the code does and the reference fact behind it, in a line. 27,351 comment lines become 11,010.

Fixes #33. Fixes #103.

- **The mechanical strip.** The citations that were only a private record number go first, and each edit is shown to be a pure removal.
- **Wrong facts corrected.** The rewrite corrects the comments that stated wrong facts. Among them:
  - The weapon trail's emissive is 0 (`0x70ca30`): the trail is a type-5 render record, so its ambient-only light term is exact.
  - The camera-style dropdown writes "1", "2", "0" (`UIOptionsFrame.lua:525,536,547`); several register-site addresses in the settings table are corrected.
  - The graphics settings are held until `RestartGx`, as in 1.12; `Fonts.xml`'s early load no longer carries a false reason.
  - vmangos sends a player-name invalidation after a rename (`CharacterHandler.cpp:839`), and the cinematic camera's announce packet has an empty handler there (`MiscHandler.cpp:919`).
  - Stock FrameXML and GlueXML line citations are checked against the stock 1.12 files, and vmangos line citations against the pinned revision.
- **Deviation labels.** "Deviation:" now marks only a choice with its recorded reason. Declining to copy a reference defect is stated plainly, and so is an unbuilt behaviour or an untraced one.
- **Verification.** Every file strips to identical code, apart from test literals in `login/`, `death/` and `ui_script/death_tests.rs` that now use placeholder account and character names, and `cargo fmt --check` is clean. Six second readers compared every file old against new, restored the facts the rewrite had dropped, and checked each new citation against the code, the stock files, vmangos and the reference.

A second commit corrects one comment in `benilla-ui` (`unit_is_grey`: the reference's exclusion is players only). A third lowers `ui_script_wall`'s ceiling from 45 to 40: five gameplay files named `UiScript` only in comments the rewrite removed, and the ratchet asks for the number to follow.

Behaviour differences the rewrite surfaced are filed as their own issues (#339 to #353 among them). String literals are untouched; they are #92.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 00:27:56 +07:00
Sam SungandClaude Opus 5.5 f98c1a5396 Comments in benilla-app, the glue screens, harness, settings and the rest: one line of fact each, no history, no record numbers (#365)
Part of #41: the last of five `benilla-app` pieces. This one is everything the others did not cover: the addon harness, the settings registry, the glue screens (login, realm list, character select and create), key bindings, the minimap, nameplates, the loading screen, transports, the performance instruments, the smaller modules, the integration tests, and the UI asset files (`OptionsFrame.xml`, `benilla.toc` and the rest). Their comments are rewritten to the rule in `docs/METHOD.md`, which is what the code does and the reference fact behind it, in a line. 27,351 comment lines become 11,010.

Fixes #33. Fixes #103.

- **The mechanical strip.** The citations that were only a private record number go first, and each edit is shown to be a pure removal.
- **Wrong facts corrected.** The rewrite corrects the comments that stated wrong facts. Among them:
  - The weapon trail's emissive is 0 (`0x70ca30`): the trail is a type-5 render record, so its ambient-only light term is exact.
  - The camera-style dropdown writes "1", "2", "0" (`UIOptionsFrame.lua:525,536,547`); several register-site addresses in the settings table are corrected.
  - The graphics settings are held until `RestartGx`, as in 1.12; `Fonts.xml`'s early load no longer carries a false reason.
  - vmangos sends a player-name invalidation after a rename (`CharacterHandler.cpp:839`), and the cinematic camera's announce packet has an empty handler there (`MiscHandler.cpp:919`).
  - Stock FrameXML and GlueXML line citations are checked against the stock 1.12 files, and vmangos line citations against the pinned revision.
- **Deviation labels.** "Deviation:" now marks only a choice with its recorded reason. Declining to copy a reference defect is stated plainly, and so is an unbuilt behaviour or an untraced one.
- **Verification.** Every file strips to identical code, apart from test literals in `login/`, `death/` and `ui_script/death_tests.rs` that now use placeholder account and character names, and `cargo fmt --check` is clean. Six second readers compared every file old against new, restored the facts the rewrite had dropped, and checked each new citation against the code, the stock files, vmangos and the reference.

A second commit corrects one comment in `benilla-ui` (`unit_is_grey`: the reference's exclusion is players only). A third lowers `ui_script_wall`'s ceiling from 45 to 40: five gameplay files named `UiScript` only in comments the rewrite removed, and the ratchet asks for the number to follow.

Behaviour differences the rewrite surfaced are filed as their own issues (#339 to #353 among them). String literals are untouched; they are #92.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 00:27:56 +07:00
pkuzicandClaude Opus 5.5 2f68d4c4e6 MONKEY (integration): merge gfx/skybox
Zone Skyboxes row moved to the end of the Advanced Graphics page and added to
OPTIONS_PAGE_ROWS (the lane had left it out of the list).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 18:08:23 +01:00
pkuzicandClaude Opus 5.5 89b68ed26b MONKEY (integration): merge gfx/skybox
Zone Skyboxes row moved to the end of the Advanced Graphics page and added to
OPTIONS_PAGE_ROWS (the lane had left it out of the list).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 18:08:23 +01:00
pkuzicandClaude Opus 5.5 3816d5c47a MONKEY (integration): Advanced Graphics row for daylightWindowSplit (EN+RU)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 18:06:45 +01:00
pkuzicandClaude Opus 5.5 f0a27ae72b MONKEY (integration): Advanced Graphics row for daylightWindowSplit (EN+RU)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 18:06:45 +01:00
pkuzicandClaude Opus 5.5 34f754c5a9 MONKEY (integration): warm the shafts, fog and AO pipelines on every 3-D view
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 18:06:45 +01:00
pkuzicandClaude Opus 5.5 056037c394 MONKEY (integration): warm the shafts, fog and AO pipelines on every 3-D view
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 18:06:45 +01:00
pkuzicandClaude Opus 5.5 eefd0037db MONKEY (integration): capture-only knobs ask run_mode::dev_affordances (one dev door)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 18:06:45 +01:00
pkuzicandClaude Opus 5.5 d0da764f6c MONKEY (integration): capture-only knobs ask run_mode::dev_affordances (one dev door)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 18:06:45 +01:00
pkuzicandClaude Opus 5.5 22d75ea613 MONKEY (skybox): second texture stage for two-texture skybox batches
RenderSubmesh carries stage 1 (texture, UV set, transform, Mod/Mod2x) for
textureCount 2 batches; M2Vertex reads UV1. WowModelExt gains a stage1
uniform + texture binding 94/95 and the WOW_STAGE1 shader def, so every
one-texture batch compiles the old code. The skybox lane binds stage 1 on
its own material copies and drives its transform rows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 17:50:38 +01:00
pkuzicandClaude Opus 5.5 74cb4dff90 MONKEY (skybox): second texture stage for two-texture skybox batches
RenderSubmesh carries stage 1 (texture, UV set, transform, Mod/Mod2x) for
textureCount 2 batches; M2Vertex reads UV1. WowModelExt gains a stage1
uniform + texture binding 94/95 and the WOW_STAGE1 shader def, so every
one-texture batch compiles the old code. The skybox lane binds stage 1 on
its own material copies and drives its transform rows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 17:50:38 +01:00
pkuzicandClaude Opus 5.5 4ba6e7c9c2 MONKEY (integration): keep build_light_data within Bevy's 16 system params (post + lampfog each added one)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 17:47:26 +01:00
pkuzicandClaude Opus 5.5 f5101bc233 MONKEY (integration): keep build_light_data within Bevy's 16 system params (post + lampfog each added one)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 17:47:26 +01:00
pkuzicandClaude Opus 5.5 d554ffe939 MONKEY (integration): merge gfx/lampfog
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 17:36:40 +01:00
pkuzicandClaude Opus 5.5 f99c83845b MONKEY (integration): merge gfx/lampfog
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 17:36:40 +01:00
pkuzicandClaude Opus 5.5 c1e4569af3 MONKEY (integration): merge gfx/ao
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 17:33:52 +01:00
pkuzicandClaude Opus 5.5 8e87044539 MONKEY (integration): merge gfx/ao
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 17:33:52 +01:00
pkuzicandClaude Opus 5.5 c524b205c7 MONKEY (fix-daylight): repair the Torch Terrain Shadows tooltip string
The daylight lane's tooltip had raw line breaks inside a Lua string instead of
an escaped blank line, a syntax error that broke OptionsFrame.xml's inline
script (an error dialog on the UI-fixture captures).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 17:18:44 +01:00
pkuzicandClaude Opus 5.5 9f874e33e6 MONKEY (fix-daylight): repair the Torch Terrain Shadows tooltip string
The daylight lane's tooltip had raw line breaks inside a Lua string instead of
an escaped blank line, a syntax error that broke OptionsFrame.xml's inline
script (an error dialog on the UI-fixture captures).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 17:18:44 +01:00
pkuzicandClaude Opus 5.5 5d201387ee MONKEY (fix-fog): LightFogBand sample without a per-frame Vec (review B11)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 17:17:00 +01:00
pkuzicandClaude Opus 5.5 e6a36bfff6 MONKEY (fix-fog): LightFogBand sample without a per-frame Vec (review B11)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 17:17:00 +01:00
pkuzicandClaude Opus 5.5 361850a49d MONKEY (fix-wind): document the static shadow under swaying leaves (review W6)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 17:04:05 +01:00
pkuzicandClaude Opus 5.5 b8fea8e78c MONKEY (fix-wind): document the static shadow under swaying leaves (review W6)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 17:04:05 +01:00
pkuzicandClaude Opus 5.5 55e155cb97 MONKEY (fix-wet): wet-stormwind-night capture scenario
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 17:03:14 +01:00
pkuzicandClaude Opus 5.5 b259f54242 MONKEY (fix-wet): wet-stormwind-night capture scenario
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 17:03:14 +01:00
pkuzicandClaude Opus 5.5 5cadc52a49 MONKEY (fix-daylight): gate the district window split; per-slot terrain torch keys
Review B4: the Stormwind window split changed the default image with no switch.
New cvar daylightWindowSplit (default 1 = merged behaviour, a future High-only
preset member), bridged to daylight::set_window_split. Review B5: each settled
exterior torch slot is keyed by the resident tiles whose footprint reaches its
sphere (terrain_torch_generation_near), not a global stamp that re-rendered
every slot on any stream event.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 17:02:15 +01:00
pkuzicandClaude Opus 5.5 7808f34cb2 MONKEY (fix-daylight): gate the district window split; per-slot terrain torch keys
Review B4: the Stormwind window split changed the default image with no switch.
New cvar daylightWindowSplit (default 1 = merged behaviour, a future High-only
preset member), bridged to daylight::set_window_split. Review B5: each settled
exterior torch slot is keyed by the resident tiles whose footprint reaches its
sphere (terrain_torch_generation_near), not a global stamp that re-rendered
every slot on any stream event.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 17:02:15 +01:00
pkuzicandClaude Opus 5.5 cd32ca2044 MONKEY (fix-wind): one grass bend span per model; warm the clutter UV_1 layout
Review W4: the bend height was normalised per submesh, so a trunk + canopy
detail doodad tore apart at the seam; the span is now taken over all of the
model's submeshes. Review W5: clutter meshes carry UV_1 (VERTEX_UVS_B), so the
six clutter pipelines are also warmed on the POS+NORMAL+UV0+UV1+COLOR quad.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 17:02:12 +01:00
pkuzicandClaude Opus 5.5 bc7dc6509b MONKEY (fix-wind): one grass bend span per model; warm the clutter UV_1 layout
Review W4: the bend height was normalised per submesh, so a trunk + canopy
detail doodad tore apart at the seam; the span is now taken over all of the
model's submeshes. Review W5: clutter meshes carry UV_1 (VERTEX_UVS_B), so the
six clutter pipelines are also warmed on the POS+NORMAL+UV0+UV1+COLOR quad.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 17:02:12 +01:00
pkuzicandClaude Opus 5.5 263d7ab765 MONKEY (fix-sky): order the sky and cloud FX readers after tick_clouds
Review B9: update_sky_colors and update_cloud_fx read the cloud coverage with no
order against tick_clouds, so the glow's cover sample was this frame's or the
last one's nondeterministically. New CloudTick set; both run after it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 17:02:09 +01:00
pkuzicandClaude Opus 5.5 cf7b401599 MONKEY (fix-sky): order the sky and cloud FX readers after tick_clouds
Review B9: update_sky_colors and update_cloud_fx read the cloud coverage with no
order against tick_clouds, so the glow's cover sample was this frame's or the
last one's nondeterministically. New CloudTick set; both run after it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 17:02:09 +01:00
pkuzicandClaude Opus 5.5 4f5dd17f8d MONKEY (fix-sky): day-long f64 sky clock; twinkle rates whole cycles per wrap
Review B2: the f32 clock wrapped hourly and every star's twinkle jumped at the
wrap. It now accumulates in f64 and wraps at 86400 s; the shader rounds each
twinkle rate to whole cycles per wrap, so the stars are seamless. The High
cloud detail drift still re-patterns once per 24 h (noted).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 16:57:20 +01:00
pkuzicandClaude Opus 5.5 474b641499 MONKEY (fix-sky): day-long f64 sky clock; twinkle rates whole cycles per wrap
Review B2: the f32 clock wrapped hourly and every star's twinkle jumped at the
wrap. It now accumulates in f64 and wraps at 86400 s; the shader rounds each
twinkle rate to whole cycles per wrap, so the stars are seamless. The High
cloud detail drift still re-patterns once per 24 h (noted).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 16:57:20 +01:00
pkuzicandClaude Opus 5.5 9c7e5fa4da MONKEY (fix-wet): seamless ripple wrap, no dry-weather churn, no sheen NaN, windows stay lit
Review B3: floor(cycle) % 50 keeps the ring roll continuous across the 1000 s
wrap. B8: publish the ripple clock only while it rains. B7: nudge the wet
sheen half-vector off zero. B6: WORD_WINDOW batches are excluded from wet
darkening.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 16:56:30 +01:00
pkuzicandClaude Opus 5.5 499fdd935f MONKEY (fix-wet): seamless ripple wrap, no dry-weather churn, no sheen NaN, windows stay lit
Review B3: floor(cycle) % 50 keeps the ring roll continuous across the 1000 s
wrap. B8: publish the ripple clock only while it rains. B7: nudge the wet
sheen half-vector off zero. B6: WORD_WINDOW batches are excluded from wet
darkening.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 16:56:30 +01:00
pkuzicandClaude Opus 5.5 76cee36b2c MONKEY (fix-post): bloom keeps the base image; window gain on the light term only
Review P4: emissive_boost now lifts only above a 0.6 knee (equal to the old
gain at 1.0), so additive spells and lava keep their look and the excess feeds
the bloom. Review P3: the window gain applies to static_gx's SIDN light term
before fog, not to the whole fogged batch. Review P6: Low-tier extract taps
scale with the quarter-size target. Review P7: excess capped at 64 (no NaN).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 16:55:55 +01:00
pkuzicandClaude Opus 5.5 75eb764df4 MONKEY (fix-post): bloom keeps the base image; window gain on the light term only
Review P4: emissive_boost now lifts only above a 0.6 knee (equal to the old
gain at 1.0), so additive spells and lava keep their look and the excess feeds
the bloom. Review P3: the window gain applies to static_gx's SIDN light term
before fog, not to the whole fogged batch. Review P6: Low-tier extract taps
scale with the quarter-size target. Review P7: excess capped at 64 (no NaN).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 16:55:55 +01:00
pkuzicandClaude Opus 5.5 bcc528d6fd MONKEY (fix-post): sun shafts fall off radially; exact sky-depth test; one MSAA sample
Review P1: the path mean lifted every clear sky pixel equally; it is now the
occlusion ratio times an aspect-corrected radial falloff from the sun.
Review P2: sky = depth <= 1e-7 (cleared / sky-pinned), no longer a nearclip-
dependent ramp. Review P5 (partial): read one MSAA sample per tap.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 16:54:58 +01:00
pkuzicandClaude Opus 5.5 5854ac39c6 MONKEY (fix-post): sun shafts fall off radially; exact sky-depth test; one MSAA sample
Review P1: the path mean lifted every clear sky pixel equally; it is now the
occlusion ratio times an aspect-corrected radial falloff from the sun.
Review P2: sky = depth <= 1e-7 (cleared / sky-pinned), no longer a nearclip-
dependent ramp. Review P5 (partial): read one MSAA sample per tap.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 16:54:58 +01:00
pkuzicandClaude Opus 5.5 72a0a36fe8 MONKEY (fix-sky): Enhanced/High sky mixes the Modern fog horizon into the gradient
The integration wrapped the final gamma colour in fog_sky_horizon, whose weight
is 1 at 0 deg, so the sunset glow was erased at the horizon. Mix the Modern far
fog colour into the linear gradient before the glow and stars (review A1) and
return from the SKY_FX branch; the Classic tail keeps fog_sky_horizon.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 16:54:31 +01:00
pkuzicandClaude Opus 5.5 968f939883 MONKEY (fix-sky): Enhanced/High sky mixes the Modern fog horizon into the gradient
The integration wrapped the final gamma colour in fog_sky_horizon, whose weight
is 1 at 0 deg, so the sunset glow was erased at the horizon. Mix the Modern far
fog colour into the linear gradient before the glow and stars (review A1) and
return from the SKY_FX branch; the Classic tail keeps fog_sky_horizon.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 16:54:31 +01:00
pkuzicandClaude Opus 5.5 512c81f43e MONKEY (fix-wind): tree exile sway rides a material marker, not MeshTag bit 18
Bit 18 aliases the top lane-weight bit and bit 12 of the interior probe slot,
so doorway units and probe-lit interior props swayed like trees. A classified
leaf batch's fade-band exile now gets marked copies of its cutout/blend
materials (clutter_fade.z bit 14, FOLIAGE_WIND_MARKER, not a key axis) and
wow_model.wgsl sways only those.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 16:54:08 +01:00
pkuzicandClaude Opus 5.5 57e21bfc2a MONKEY (fix-wind): tree exile sway rides a material marker, not MeshTag bit 18
Bit 18 aliases the top lane-weight bit and bit 12 of the interior probe slot,
so doorway units and probe-lit interior props swayed like trees. A classified
leaf batch's fade-band exile now gets marked copies of its cutout/blend
materials (clutter_fade.z bit 14, FOLIAGE_WIND_MARKER, not a key axis) and
wow_model.wgsl sways only those.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 16:54:08 +01:00
pkuzicandClaude Opus 5.5 f0526d610b MONKEY (fix-wind): integrate wind travel on the CPU; fixed-heading spatial phase
The wave phase was k*speed(t)*t (its rate grows with session age: ~33 Hz noise
after 10 min) and its spatial term rotated about the world origin with the veer
(hundreds of rad/s at 9k yd from the first second). Now update_wind integrates
travel += speed*dt in f64 and publishes it wrapped at 4096 yd (wind_b.x); every
wave rate is a whole number of cycles per wrap, so the wrap is seamless. The
spatial term uses the fixed profile heading (wind_a.z); the veer and gust turn
only the bend. Capture offset WOW_CAPTURE_WIND_T for late-session shots.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 16:54:07 +01:00
pkuzicandClaude Opus 5.5 5f7237aa98 MONKEY (fix-wind): integrate wind travel on the CPU; fixed-heading spatial phase
The wave phase was k*speed(t)*t (its rate grows with session age: ~33 Hz noise
after 10 min) and its spatial term rotated about the world origin with the veer
(hundreds of rad/s at 9k yd from the first second). Now update_wind integrates
travel += speed*dt in f64 and publishes it wrapped at 4096 yd (wind_b.x); every
wave rate is a whole number of cycles per wrap, so the wrap is seamless. The
spatial term uses the fixed profile heading (wind_a.z); the veer and gust turn
only the bend. Capture offset WOW_CAPTURE_WIND_T for late-session shots.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 16:54:07 +01:00