Let deterministic captures read an explicitly selected BENILLA_HOME config while keeping every capture persistence path disabled. This makes the post ON/OFF homes effective without weakening capture hermeticity.
Co-Authored-By: GPT-5.6 Sol (Codex)
fog_hook.wgsl: radial exponential fog fitted to the zone's 1.12 start/end
(60 % survival mid-span, closed over the last stretch so the zone end
holds), optional height fog, end-fog colour shift, sun-fog lobe; interior
WMO spans stay classic; the WDL hull pair takes the far colour.
lighting/fog_model.rs fills the MonkeyFrame fog rows each frame (derived
from the 1.12 bands, or LightFogBand.dbc rows); fog_d.x carries the scene
fog end as the Modern flag, fog_d.zw the octahedral sun direction.
resolve.rs: Modern stretches the fog end with farclip past 777 only.
sky.wgsl/sky.rs: the dome's low band eases into the same far colour.
Classic packs zeros and every new path branches out.
Includes the cherry-picked p0 fix 05d6b1ad (MonkeyFrame rows fog_a..).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fog_hook.wgsl: radial exponential fog fitted to the zone's 1.12 start/end
(60 % survival mid-span, closed over the last stretch so the zone end
holds), optional height fog, end-fog colour shift, sun-fog lobe; interior
WMO spans stay classic; the WDL hull pair takes the far colour.
lighting/fog_model.rs fills the MonkeyFrame fog rows each frame (derived
from the 1.12 bands, or LightFogBand.dbc rows); fog_d.x carries the scene
fog end as the Modern flag, fog_d.zw the octahedral sun direction.
resolve.rs: Modern stretches the fog end with farclip past 777 only.
sky.wgsl/sky.rs: the dome's low band eases into the same far colour.
Classic packs zeros and every new path branches out.
Includes the cherry-picked p0 fix 05d6b1ad (MonkeyFrame rows fog_a..).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
benilla-formats/src/light/fog_band.rs reads our LightFogBand.dbc (the
LightFloatBand record, 13 rows per LightParams: height fog, curve blend,
sun-fog rgb/strength/angle, end-fog rgb/distance). Absent file = empty
catalog, no error. blend_chain exposes the area-light blend order so a
side table folds with the same law as the stock bands.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
benilla-formats/src/light/fog_band.rs reads our LightFogBand.dbc (the
LightFloatBand record, 13 rows per LightParams: height fog, curve blend,
sun-fog rgb/strength/angle, end-fog rgb/distance). Absent file = empty
catalog, no error. blend_chain exposes the area-light blend order so a
side table folds with the same law as the stock bands.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Part of #92. The headers benilla writes at the top of a player's saved-variables files and chat cache carried a private record number, so every player's own files held one. They now say only what the file is.
- The chat cache's repair marker is now `# benilla-writer 2`. The check is `contains`, so a file stamped with the longer marker still counts as repaired and is not re-seeded.
- The other record numbers in these four files' literals go too: one log line and five assert messages. So does one test name, now `one_line_rows_without_addedversion_still_parse`.
- Every change is to string-literal text, proven with comments stripped and every literal masked, except the renamed test.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Part of #92. The headers benilla writes at the top of a player's saved-variables files and chat cache carried a private record number, so every player's own files held one. They now say only what the file is.
- The chat cache's repair marker is now `# benilla-writer 2`. The check is `contains`, so a file stamped with the longer marker still counts as repaired and is not re-seeded.
- The other record numbers in these four files' literals go too: one log line and five assert messages. So does one test name, now `one_line_rows_without_addedversion_still_parse`.
- Every change is to string-literal text, proven with comments stripped and every literal masked, except the renamed test.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
naga_oil refuses a composable-module identifier that naga's namer would
rewrite (a trailing digit gets a '_'), which failed every pipeline that
imports monkey_frame / enhanced_water (models, WMOs, liquid invisible).
MonkeyFrame rows are renamed fog_a..fog_d, wind_a/b, wet_a (same order and
layout), and enhanced_water's padding member _sh_c16 becomes _sh_quad.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
naga_oil refuses a composable-module identifier that naga's namer would
rewrite (a trailing digit gets a '_'), which failed every pipeline that
imports monkey_frame / enhanced_water (models, WMOs, liquid invisible).
MonkeyFrame rows are renamed fog_a..fog_d, wind_a/b, wet_a (same order and
layout), and enhanced_water's padding member _sh_c16 becomes _sh_quad.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Part of #41: the second of five `benilla-app` pieces. This one is the UI windows: chat, the NPC windows (gossip, merchant, trainer, taxi, bank, mail, auction, quest giver), the unit, party, raid and aura feeds, the action bar, bags, tooltips, macros, the spellbook, the world map and the smaller panels. 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. 26,648 comment lines become 9,221.
Fixes#98.
- **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:
- Several client addresses carried a `0x400000` slip (`UPDATE_MACROS` is `0x852460`, not `0x452460`; the macro store's globals likewise).
- `QUEST_WATCH_UPDATE` carries the quest-log row (`0x4df880` scans the log table at `0xbb71c0`), not a watch-list position.
- The stock `ChatFrame_DisplayTimePlayed` now ships, so benilla's own `/played` lines duplicate it (#194); trainer refusals are logged, not shown on the error line; the player's cast result is `SMSG_CAST_RESULT`.
- Stock FrameXML and `Blizzard_*` line citations are checked against the stock 1.12 files, and vmangos line citations against the vmangos revision nearest the one the local server runs.
- Dozens more turned up on the way: docs sitting on the wrong item, removed functions, stale counts, broken intra-doc links.
- One test comment in `ui_script/questlog_tests.rs`, which landed with #184, carried the same watch-index slip and gets the same fix.
- **Deviation labels.** "Deviation:" now marks only a choice with a reason. An unbuilt behaviour, or one whose reference side is untraced, says so plainly.
- **Verification.** Every file strips to identical code, 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.
Behaviour differences the rewrite surfaced are filed as their own issues (#188, #204, #222 and #259 among them). The comments here state what the code does. 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>
Part of #41: the second of five `benilla-app` pieces. This one is the UI windows: chat, the NPC windows (gossip, merchant, trainer, taxi, bank, mail, auction, quest giver), the unit, party, raid and aura feeds, the action bar, bags, tooltips, macros, the spellbook, the world map and the smaller panels. 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. 26,648 comment lines become 9,221.
Fixes#98.
- **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:
- Several client addresses carried a `0x400000` slip (`UPDATE_MACROS` is `0x852460`, not `0x452460`; the macro store's globals likewise).
- `QUEST_WATCH_UPDATE` carries the quest-log row (`0x4df880` scans the log table at `0xbb71c0`), not a watch-list position.
- The stock `ChatFrame_DisplayTimePlayed` now ships, so benilla's own `/played` lines duplicate it (#194); trainer refusals are logged, not shown on the error line; the player's cast result is `SMSG_CAST_RESULT`.
- Stock FrameXML and `Blizzard_*` line citations are checked against the stock 1.12 files, and vmangos line citations against the vmangos revision nearest the one the local server runs.
- Dozens more turned up on the way: docs sitting on the wrong item, removed functions, stale counts, broken intra-doc links.
- One test comment in `ui_script/questlog_tests.rs`, which landed with #184, carried the same watch-index slip and gets the same fix.
- **Deviation labels.** "Deviation:" now marks only a choice with a reason. An unbuilt behaviour, or one whose reference side is untraced, says so plainly.
- **Verification.** Every file strips to identical code, 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.
Behaviour differences the rewrite surfaced are filed as their own issues (#188, #204, #222 and #259 among them). The comments here state what the code does. 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>
naga_oil refuses a composable-module identifier that naga's namer would
rewrite (a trailing digit gets a '_'), which failed every pipeline that
imports monkey_frame / enhanced_water (models, WMOs, liquid invisible).
MonkeyFrame rows are renamed fog_a..fog_d, wind_a/b, wet_a (same order and
layout), and enhanced_water's padding member _sh_c16 becomes _sh_quad.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
naga_oil refuses a composable-module identifier that naga's namer would
rewrite (a trailing digit gets a '_'), which failed every pipeline that
imports monkey_frame / enhanced_water (models, WMOs, liquid invisible).
MonkeyFrame rows are renamed fog_a..fog_d, wind_a/b, wet_a (same order and
layout), and enhanced_water's padding member _sh_c16 becomes _sh_quad.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Classify static alpha-tested tree and bush leaf batches, log accepted model paths, and apply gentle anchor-phased crown sway and flutter in both retained and fade-twin render paths. Keep animated doodads and tree shadows unchanged, and add wind capture instruments.
Co-Authored-By: GPT-5.6 Sol (Codex)
Classify static alpha-tested tree and bush leaf batches, log accepted model paths, and apply gentle anchor-phased crown sway and flutter in both retained and fade-twin render paths. Keep animated doodads and tree shadows unchanged, and add wind capture instruments.
Co-Authored-By: GPT-5.6 Sol (Codex)
Author bend weight from source-mesh height in clutter UV1, preserve texture coordinates and cutout alpha, and apply WarcraftXL's two-wave gust, lean, phase, variance, and distance fade in the model vertex path. Fill the player plus seven nearest unit benders without per-frame allocation.
Co-Authored-By: GPT-5.6 Sol (Codex)
Author bend weight from source-mesh height in clutter UV1, preserve texture coordinates and cutout alpha, and apply WarcraftXL's two-wave gust, lean, phase, variance, and distance fade in the model vertex path. Fill the player plus seven nearest unit benders without per-frame allocation.
Co-Authored-By: GPT-5.6 Sol (Codex)
Port the stateless gust and veer profile, scale it from live weather, and publish one sample through the WindField resource and MonkeyFrame each frame. Add the foliageWind tier CVar, High preset value, and Advanced Graphics row.
Co-Authored-By: GPT-5.6 Sol (Codex)
Port the stateless gust and veer profile, scale it from live weather, and publish one sample through the WindField resource and MonkeyFrame each frame. Add the foliageWind tier CVar, High preset value, and Advanced Graphics row.
Co-Authored-By: GPT-5.6 Sol (Codex)
Preserve p0 fog and MonkeyFrame hooks, water's row-view ABI, and the post lane's emissive, bloom, sun-shaft, grading, cvar, and options work.
Co-Authored-By: GPT-5.6 Sol (Codex)
Preserve p0 fog and MonkeyFrame hooks, water's row-view ABI, and the post lane's emissive, bloom, sun-shaft, grading, cvar, and options work.
Co-Authored-By: GPT-5.6 Sol (Codex)
enhanced_water.wgsl keeps the water lane's row view of the shared light buffer (fixes the WGSL
composer failure); the p0 fog hook reads the MonkeyFrame block through water_monkey() (row 533).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
enhanced_water.wgsl keeps the water lane's row view of the shared light buffer (fixes the WGSL
composer failure); the p0 fog hook reads the MonkeyFrame block through water_monkey() (row 533).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The README now leads with the whole game being playable, keeps the two open fronts (the long
tail, and addons, options and performance), drops the downloads goal, and sends packaged builds
and server changes to forks, with GitHub's fork list linked.
Corrected against the code:
- A server that requires Warden is refused at the handshake (benilla-protocol
world/session.rs), so the README asks for Warden off; vmangos ships with it off
(mangosd.conf.dist.in, Warden.WinEnabled and Warden.OSXEnabled default to 0).
- `cargo run` builds the default `dev` feature, which keeps benilla-config/ at the repo root
(benilla-app local_state.rs), so the addon folder is named there, not beside the binary.
- The named addons are the ones whose fixes landed: Questie (3e92b4f0), pfUI (0a3c0692),
Bagnon (321bcbb3) and Bartender2 (a753a8b5).
- assets/ui holds adapters and the options, game menu, key bindings and script log windows
benilla draws itself; the options window and the ESC menu follow the Classic Era client.
- The client reports enUS and reads the enUS DBC columns, so the install asked for is English.
Kept after checking: no third-party WoW crates in any manifest; on Linux, Wayland and X11 load
at run time, so ALSA, udev and pkg-config are the whole build-time list; localhost:3724 is the
default; WOW_USER and WOW_PASS log in from a plain clone. Every link resolves.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The README now leads with the whole game being playable, keeps the two open fronts (the long
tail, and addons, options and performance), drops the downloads goal, and sends packaged builds
and server changes to forks, with GitHub's fork list linked.
Corrected against the code:
- A server that requires Warden is refused at the handshake (benilla-protocol
world/session.rs), so the README asks for Warden off; vmangos ships with it off
(mangosd.conf.dist.in, Warden.WinEnabled and Warden.OSXEnabled default to 0).
- `cargo run` builds the default `dev` feature, which keeps benilla-config/ at the repo root
(benilla-app local_state.rs), so the addon folder is named there, not beside the binary.
- The named addons are the ones whose fixes landed: Questie (3e92b4f0), pfUI (0a3c0692),
Bagnon (321bcbb3) and Bartender2 (a753a8b5).
- assets/ui holds adapters and the options, game menu, key bindings and script log windows
benilla draws itself; the options window and the ESC menu follow the Classic Era client.
- The client reports enUS and reads the enUS DBC columns, so the install asked for is English.
Kept after checking: no third-party WoW crates in any manifest; on Linux, Wayland and X11 load
at run time, so ALSA, udev and pkg-config are the whole build-time list; localhost:3724 is the
default; WOW_USER and WOW_PASS log in from a plain clone. Every link resolves.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>