Commit Graph
101 Commits
Author SHA1 Message Date
pkuzicandClaude Opus 5.5 89ad90a710 Merge upstream/main (samwhosung/benilla b17be271) into the graphics programme
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-26 21:28:31 +01:00
pkuzicandClaude Opus 5.5 3e59cc126c MONKEY (fix-wind): visible foliage wind + Foliage Wind Strength slider
The owner's "wind does not work" was the motion being too small to see (WXL's
0.06 yd grass tips on a 6 s wave, 0.1 yd tree crowns). Retuned at the 9 yd/s
base speed:
- grass: tips about +-0.2-0.3 yd, 2.5 s main wave (182 cycles/wrap), 1.1 s
  cross flutter (410); 55 yd gust bands roll downwind (68), swelling the sway
  to 1.2x and lulling it to 0.55x; a bent tip dips (no stretched blades).
  Parting around units unchanged.
- trees/bushes: 4 s crown sway (114), 5.5 s side wave (82), 0.8 s leaf
  flutter (569); crown weight grows with height (0.43x at 1.5 yd, 1x at 6 yd,
  1.3x cap), so canopies sway about +-0.3 yd while bushes nod and bases stay
  planted.
- new cvar foliageWindStrength 0.25..3 (default 1, not on the preset ladder):
  Advanced Graphics slider under Foliage Wind (EN+RU label/tooltip), greyed
  while Foliage Wind is Off; carried in sway_strength, so the parting ignores
  it; a storm adds up to +60 % sway.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-26 17:53:32 +01:00
Sam SungandClaude Opus 5.5 de0fa568d7 A stale useUiScale comment, and a usage line for doc-links.py (#376)
Two small fixes.

- `OptionsFrame.xml`: the comment on the missing Use UI Scale checkbox said benilla has no `useUiScale`. It is registered at "0" and never read, which is why the UI scale always applies.
- `scripts/doc-links.py`: `--help` and `-h` print the usage in the module doc instead of running the full `cargo doc` pass.

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

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 02:38:27 +07:00
pkuzicandClaude Opus 5.5 6bf7c409a2 MONKEY (integration): merge graphics-programme-presets
Graphics Preset ladder + Render Distance (farclip ceiling 1497). Conflict in
options_tests: the Advanced page now has 33 rows (preset + render distance lead,
then the 31 programme rows). The three round-3 rows join the ladder:
ambientOcclusion 0/0/1/2/2, zoneSkyboxes 0/0/1/1/1, lampFog 0/0/1/2/2
(Classic/Low/Medium/High/Ultra); the preset tooltip names them (EN+RU).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 19:52:52 +01:00
pkuzicandClaude Opus 5.5 810cc56df6 MONKEY (integration): RU torch-terrain tooltip newline; RenderSubmesh.stage1 in the billboard-card test
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 19:28:49 +01:00
pkuzicandClaude Opus 5.5 552a0b61c6 MONKEY (integration): fix the programme's test failures (warm names, shader embed, dev door, CRLF/path-separator test bugs, float compare, tooltip newlines) and declare the missing system orders
- ssao.wgsl registered in shaders::plugin and loaded by its embedded path
- wind/wetness/fog-model MonkeyFrame writers ordered; viewer publish before its readers;
  sky clock + sky tier before LightingConsumeSet; zone skybox chain joins the consume set;
  grass benders read GlobalTransform
- ambiguity ceiling re-measured with the reason (MatAnimTable allocator + exclusive-system pairs)
- verb_event_gate: Windows separators; AddSkillUp/RemoveSkillUp GAP rows
- ui_session portrait test: CRLF checkout
- spell envelope fuse assertion: f32 tolerance
- daylightWindowSplit tooltip: escaped \n (raw line breaks broke the Lua chunk)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 19:09:34 +01:00
Claude c7f91ef62c MONKEY (presets): Graphics Preset ladder and Render Distance row
Advanced Graphics gains a Graphics Preset row (cvar graphicsQuality:
Classic / Low / Medium / High / Ultra / Custom) and a Render Distance slider
on farclip (177..1497, same cvar as Graphics' Terrain Distance). The ladder is
GRAPHICS_PRESETS in cvars.rs, one line per governed row with a column per
rung; lightingQuality is itself a row, so the lighting ladder's members follow
it. The lighting ladder gains an Ultra rung (4096 sun map, 16/8 torch maps,
High water, High volumetric fog). The label is re-derived every frame beside
lightingQuality, so editing a governed row shows Custom.

A player whose config.toml names no graphicsQuality is seeded to High at
startup over the rows the file does not carry; captures, tests and malformed
files never seed, and the rows keep their per-lane registered defaults. The
page's Defaults lands on High too. ambientOcclusion, zoneSkyboxes and lampFog
are commented one-line TODO rows until their cvars land.

Verified: cargo test -p benilla-app --lib -- options cvars preset (136
passed, incl. 7 new preset tests); full benilla-app lib: 3722 passed, 5
pre-existing failures unrelated to this change (spell envelope float, schedule
ambiguity ceiling, pipe_warm fog/shaft/shadow lanes, dev-plane cfg). The
options UI tests need WoW data and were skipped; no captures (no install in
the cloud). Built on Linux only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Toc8dZYuTKW1JWBFbMb5S1
2026-09-25 18:00:24 +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
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 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 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 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 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
pkuzicandGPT-5.6 Sol (Codex) eef0083236 MONKEY (lampfog): add options and visual proofs
Co-Authored-By: GPT-5.6 Sol (Codex)
2026-09-25 16:01:28 +01:00
Sam SungandClaude Opus 5.5 36fc2870bb Five comments state the reference facts right (#318)
- OptionsFrame.xml and options_tests.rs: the stock camera-style dropdown writes "0" for Never
  (UIOptionsFrame.lua:525,536,547), not "3"; the `alt` entry only shows a stored "3" as Never.
- unit/bindings.rs: TargetByName's silent miss is a gap (#52), not a deviation; the reference's
  messages are 0x127 ERR_UNIT_NOT_FOUND and 0xb8 ERR_GENERIC_NO_TARGET.
- fields/unit.rs: the melee reach's 5.0 is a floor (0x6e35bf-0x6e35ce), not a cap.
- tests/nameplate.rs: pfUI's click-through is nameplates.lua:1228.

Comments only; code unchanged. Built on macOS.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-25 18:47:30 +07:00
pkuzic db23b19a87 Merge gfx/wet into integration
# Conflicts:
#	LIGHTING.md
#	crates/benilla-app/assets/ui/OptionsFrame.xml
#	crates/benilla-app/src/cvars.rs
#	crates/benilla-app/src/monkey_gfx.rs
#	crates/benilla-assets/src/materials.rs
#	crates/benilla-assets/src/shaders/fog_hook.wgsl
#	crates/benilla-assets/src/shaders/monkey_frame.wgsl
#	crates/benilla-world/src/lighting/monkey_frame.rs
#	crates/benilla-world/src/shaders/static_gx.wgsl
2026-09-25 12:06:14 +01:00
pkuzic ff046d0a8a Merge gfx/fog into integration
# Conflicts:
#	LIGHTING.md
#	crates/benilla-app/assets/ui/OptionsFrame.xml
#	crates/benilla-app/src/cvars.rs
#	crates/benilla-app/src/monkey_gfx.rs
#	crates/benilla-assets/src/shaders/enhanced_water.wgsl
#	crates/benilla-assets/src/shaders/fog_hook.wgsl
#	crates/benilla-assets/src/shaders/monkey_frame.wgsl
#	crates/benilla-world/src/lighting/monkey_frame.rs
#	crates/benilla-world/src/shaders/sky.wgsl
#	crates/benilla-world/src/sky.rs
2026-09-25 11:59:43 +01:00
pkuzic 816274419d Merge gfx/wind into integration
# Conflicts:
#	LIGHTING.md
#	THIRD-PARTY.md
#	crates/benilla-app/src/cvars.rs
#	crates/benilla-assets/src/materials.rs
#	crates/benilla-assets/src/shaders/wow_model.wgsl
#	crates/benilla-world/src/shaders/static_gx.wgsl
2026-09-25 11:49:31 +01:00
pkuzic df2da452bc Merge gfx/daylight into integration
# Conflicts:
#	LIGHTING.md
#	crates/benilla-app/src/cvars.rs
2026-09-25 11:46:41 +01:00
pkuzic f2723a4553 Merge gfx/sky into integration
# Conflicts:
#	LIGHTING.md
#	THIRD-PARTY.md
#	crates/benilla-app/assets/ui/OptionsFrame.xml
#	crates/benilla-app/src/capture/scenarios.rs
#	crates/benilla-app/src/cvars.rs
#	crates/benilla-app/src/game_plugins.rs
#	crates/benilla-app/src/lib.rs
#	crates/benilla-app/src/video.rs
2026-09-25 11:45:19 +01:00
Sam SungandClaude Opus 5.5 409feeaf2a benilla-app ui_script tests: each checks what it claims, no dead probes (#306)
Test health in `benilla-app`'s `ui_script` tests, found while the crate's comments were rewritten. No shipped code changes.

- `every_texture_frame_outranks_its_status_bars` listed `ManaBar` twice, so its floor of 6 counted each mana pair twice. It checks the two bars of each texture frame once now, with a floor of 4.
- `the_unit_frames_publish_every_name_the_reference_declares` exempted the five `PlayerFrameGroupIndicator*` names, which the stock `PlayerFrame.xml` declares and the loader now builds. The exemption hid their loss and is gone.
- Two tests renamed for what they assert: `escape_closes_bag_and_panel_releases_loot_and_keeps_the_held_item` (ESC keeps the held item, as stock `ToggleGameMenu` has no `ClearCursor`) and `in_flight_roll_opens_without_a_name_or_icon`.
- Dead lines out: two `LOOT_UPDATE` fires (not a 1.12 event; nothing registers it), a read of a Lua global nothing sets, and a string table that the real `GlobalStrings.lua`, loaded right after, overwrote.
- Comments on the camera-style dropdown (`OptionsFrame.xml` and its test) now give 1.12's values as the stock dropdown writes them (`UIOptionsFrame.lua:525,536,547`): Smart 1, Always 2, Never 0. They are not a deviation.

The edited tests pass with the install present (82 run, none skipped) before the land gates.

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

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-25 17:41:21 +07:00
Sam SungandClaude Opus 5.5 05ab92ce73 Comments in the UI XML and the Lua fork's manifest: no dead marker, no record number (#300)
Fixes #31. The last comments outside the Rust sources that carried a dead name or a private record number:

- `OptionsFrame.xml` and `SpellBookAdapters.xml` drop the `BENILLA_ALLOW_OWN_UI=1` marker, which no code or test reads.
- `third_party/lua-src/Cargo.toml` says why the fork exists without its record number, in plain case.

Comment text only: every file is identical with its comments stripped. The Rust test comments #31 also listed were rewritten with their crates' comment passes.

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

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-25 17:09:35 +07:00
pkuzicandClaude Opus 5.5 8122881312 MONKEY (wet): wet hooks in terrain/static_gx/wow_model, rain rings on water, rainSurfaces cvar + row, wet- scenarios
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 10:32:05 +01:00
pkuzicandClaude Opus 5.5 42b4783660 MONKEY (fog): fogModel cvar, Advanced Graphics row, fog-duskwood scenarios, docs
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 09:21:02 +01:00
pkuzicandGPT-5.6 Sol (Codex) 347f675f91 MONKEY (wind): add shared WarcraftXL wind field
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)
2026-09-25 08:06:55 +01:00
pkuzicandGPT-5.6 Sol (Codex) 5ffdc828c8 Merge gfx/post into integration
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)
2026-09-25 08:01:24 +01:00
pkuzicandClaude Opus 5.5 91ac4d1481 MONKEY (sky): skyQuality tier — smooth gradient, sun glow, night sky, High cloud detail + sun march
skyQuality 0 Classic (unchanged), 1 Enhanced, 2 High; Advanced Graphics row (EN+RU),
cvar bridge, sky-* scenarios above the canopy. Cloud technique ported from WarcraftXL
wxl-retail-clouds (THIRD-PARTY.md).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 04:09:34 +01:00
pkuzicandClaude Opus 5.5 bd1c6de9f8 MONKEY (skybox): zoneSkyboxes cvar, Advanced Graphics row, skybox- capture scenarios
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 03:23:35 +01:00
pkuzicandGPT-5.6 Sol (Codex) 6b1af8338f MONKEY (post): port zone colour grading
Co-Authored-By: GPT-5.6 Sol (Codex)
2026-09-25 03:07:06 +01:00
pkuzicandGPT-5.6 Sol (Codex) 5e61bf676d MONKEY (post): add depth-occluded sun shafts
Co-Authored-By: GPT-5.6 Sol (Codex)
2026-09-25 03:00:04 +01:00
pkuzicandClaude Opus 5.5 ca667d2b35 MONKEY (ao): depth-only half-res SSAO pass before the water copy, cvar ambientOcclusion + Advanced Graphics row
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 02:52:56 +01:00
pkuzicandClaude Opus 5.5 adc9d277e7 MONKEY (daylight): terrain as a caster in exterior torch cube maps (torchTerrainShadows, default off)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 02:52:49 +01:00
pkuzicandGPT-5.6 Sol (Codex) 36d03ee462 MONKEY (post): route emissive materials into HDR
Co-Authored-By: GPT-5.6 Sol (Codex)
2026-09-25 02:02:19 +01:00
pkuzicandClaude Opus 5.5 8c263244c9 MONKEY (p0): skyDither cvar for the FFXGlow deband dither
The combine's dither lane was armed only by the WOW_DITHER env var. It is now
the `skyDither` cvar (0/1, default 0 = reference look; Graphics preset High
= 1) with an Advanced Graphics "Sky Dithering" checkbox row (EN + RU). The
cvar lands on `benilla_world::ffx_glow::SkyDither` (extracted) through the new
`benilla-app/src/monkey_gfx.rs` bridge; WOW_DITHER=1 still forces it on.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 01:34:25 +01:00
pkuzicandClaude Opus 5.5 129ea35f5a Merge upstream main (samwhosung/benilla fd386e75) into lighting
71 upstream commits: the repo-wide comment rewrite, the hover highlight as the
scene ambient, M2 Mod/Mod2x batches drawing the bare texel, test and contribution
changes. Conflicts were comment-vs-code in 36 files; where upstream changed only
comments our code was kept, and wow_model.wgsl carries both our lighting lanes
and upstream's new unlit/Mod/Mod2x paths.

Follow-ups folded in:
- our nine Advanced Graphics / water / fog options tests take upstream's
  wow_data_or_skip! guard
- PostUpdate ambiguity ceiling re-measured under upstream's new census: 466,
  with the per-family breakdown in the comment
- LIGHTING.md: new upstream base

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 00:18:30 +01:00
pkuzicandClaude Opus 5.5 2e486e3612 MONKEY: water module split, depth look, High reflections, volumetric fog
Water (Enhanced/High; Classic stays byte-identical to upstream):
- the enhanced water now lives in its own WGSL library, benilla::enhanced_water
  (enhanced_water.wgsl), with its own bindings 103-106; upstream liquid.wgsl
  keeps three small hooks only
- depth look: per-channel extinction over the real path through the water,
  refraction of an opaque-colour copy bent by the waves (samples landing on
  anything in front of the water are refused via the scene depth), caustic
  web on sunlit shallow beds
- High: screen-space reflection of the scenery (bisected march against the
  scene depth)
- the module fogs its own surface terms only (the refracted/reflected scene is
  already fogged); depth+colour copies run both-or-neither
- credits: portions derived from WarcraftXL wxl-experimental-water by
  iThorgrim, used with permission (WATER.md)

Volumetric fog (Advanced Graphics -> Volumetric Fog: Off/Low/High, cvar
volumetricFog, env WOW_VOLFOG): own fullscreen pass after the main pass,
near-field haze converging on the zone fog colour, denser at dawn and in
weather, faint indoors, plus sun/moon light shafts from the shadow map.

Tests: addon-harness oracle fixtures no longer require unix symlinks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 23:16:18 +01:00
pkuzicandClaude Opus 5.5 18914f02f6 MONKEY: enhanced water module (Water Quality: Classic/Enhanced/High) + lava glow
Water (Enhanced/High only; Classic stays byte-identical to upstream):
- scene depth resolved after the main opaque pass and bound to liquids
  (liquid/scene_depth.rs, water_depth.rs)
- procedural multi-band waves with analytic normals; long ocean swell moves
  vertices, mirrored on the CPU (liquid/waves.rs)
- separate ocean and inland profiles; depth-driven colour and soft edge
- Fresnel sky reflection, sun path, moon path, point-light glints
- beach surf driven by the shore wave phase: continuous front, dissolving
  lace, swash sheet; only where the authored sea bed is shallow, so sunken
  objects never foam; thin bed clutter (grass, reeds) ignored for contact foam
- swimmers: wake foam, treading rings, visual-only bob with the swell
- river flow effect tried and removed at the owner's request

Lava: magma surfaces emit warm point lights through the lighting module
(lighting/lava_light.rs, lavaLightGain).

Options: Water Quality + Lava Glow rows (EN, RU strings prepared).
Docs: WATER.md. Credits: design reference WarcraftXL wxl-experimental-water,
author iThorgrim (reuse permitted with attribution).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 23:15:57 +01:00
SamandClaude Opus 5.5 64cca13af1 comments: the era settings screens say why they replace 1.12's
The options window, the ESC menu and the key bindings page follow the 1.15 era client because
1.12's settings screens are much worse to use.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 05:26:00 +07:00
SamandClaude Opus 5.5 e6484675e2 comments: the options window says what each part is and why
1,874 comment lines become 430; the code is unchanged. The note about
reference graphics CVars that pfUI writes and benilla leaves
unregistered described the CVar registry, not this file. It moves there
with its addresses.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 19:57:37 +07:00
pkuzicandClaude Fable 5.1 45594e2cb4 MONKEY: lighting round 6 — Advanced Graphics options page, moon shadows, ground-effect spell lights
- Advanced Graphics page: Lighting Quality preset (Off/Low/Medium/High/Custom, one const table,
  Off = the original client's look), shadow rows moved from Graphics, Shadow Resolution, Moon
  Shadows, interior/torch/fire/spell/night rows; EN+RU strings; works in player builds.
- Moon shadows: the single shadow rig re-aims at the moon at night (MoonShadowStrength 0.35);
  attenuates only the night sky term, never point lights; covers terrain, WMO exteriors, models
  and retained doodads; stateful hand-over for clock jumps; blob gated on a built silhouette;
  zero cost at strength 0. Signed fog_params.z carries +sun / -moon*strength.
- Area spell lights: SpellLightMode::Area for Flamestrike, Rain of Fire, Consecration, Flare,
  Explosive Trap (school-based where the model says nothing); Blizzard/Hurricane/Volley/frost
  traps stay dark; repeating impacts deduped; benilla-extract spellvis prints the area block.
1121 world+formats tests; 8/8 WGSL probes; UI and world smoke scenes clean.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-18 14:32:04 +01:00
pkuzicandClaude Fable 5.1 d36a2303f7 Merge upstream/main (samwhosung/benilla 66388278, 78 commits) into everwood-cs
Keeps both sides: upstream's settings rework, model_render rework, mesh-tag change-gating,
static_gx node move + diagnostics span, WorldPointLight, brightness/weather options,
weapon trails; and the MONKEY lighting stack (sun shadow lanes, dynamic interiors, cube-map
torch shadows, daylight fixtures, spell lights, bake floor, K=12 exterior selection, debug panel).
All MONKEY light lanes migrated from Bevy PointLight to upstream's WorldPointLight.
1091 world+formats tests green; all 8 WGSL probes OK; server-less smoke (inn, Northshire) clean.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 10:46:19 +01:00
SamandClaude Fable 5.1 9caacad153 brightness saves, the glue box holds still, and Questie's notes hover
- the Brightness slider in the options window changes the picture and keeps its value; it was writing to no setting at all, so every reopen read 50% again (2186)
- the login, realm and character screens share one letterboxed frame, so clicking down the character roster no longer slides the backdrop and every panel over it; at 4:3 nothing changes (2187)
- Questie's world-map notes show their tooltip on hover: the note hands the tooltip a frame where an anchor name goes, which benilla refused with a script error and the reference reads as the default anchor (2176)
- with OmniCC installed, a warrior in a stance sees the countdown on action bar 1 again: raising that bar's buttons by script carried their cooldown sweep up over the count (2189)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-11 21:06:04 +07:00
SamandClaude Fable 5.1 fcb159c151 camera rows land in Options, brightness arrives, /reload loses nothing
- fourteen settings get their switch on the Options window: the Camera box from Follow Terrain and Head Bob to Water Collision and Smart Pivot, plus Attack on Assist, Auto Clear AFK, Auto Self Cast, Enhanced Tooltips, Player Guild Names and Show Target Damage (2180)
- the Graphics page gains Weather Intensity, scaling rain, snow and mist, and Brightness, applied as a final pass over the whole finished frame; GetGamma and SetGamma answer in the slider's unit (2181, 2182)
- hovering a disabled button fires no OnEnter, no OnLeave and no highlight, as the reference's does, so AtlasLoot's unset QuickLook buttons stop throwing a Lua error on every hover (2183)
- a chat window dragged, resized, recoloured or renamed just before a /reload keeps the change, and the meeting stone's minimap icon comes back after a /reload while you are still queued (2184)
- swimming at the surface, the camera stops snapping into your character every couple of seconds: the water leg of the camera trace is a bare ray, as the reference's is, so the boom stops on the plane rather than a probe radius short of it (2185)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-11 21:05:18 +07:00
SamandClaude Fable 5.1 6d663299f8 the video options window goes stock, and water collision returns whole
- the reference's own video options window loads hidden, so pfUI's video skin and any addon reaching for its sliders and check buttons by name finds real frames; our own options window is BenillaOptionsFrame now, and ESC still opens it (2177)
- GetScreenResolutions, GetCurrentResolution, SetScreenResolution, GetRefreshRates, GetVideoCaps, RestartGx and RestoreVideoDefaults answer off the monitor's own modes, so CT_Viewport loads clean (2177)
- three of those verbs were corrected against a second read of the binary: GetRefreshRates answers nothing on a device with no rates, GetVideoCaps always gives a number for triple buffering, and RestoreVideoDefaults writes the ten rows the verb writes (2177)
- the camera's water collision is back with both halves: the boom stops at a water surface, and a swimmer's camera keeps a constant 2/9 yd clearance over the waterline whatever the body underneath does (2179)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-11 21:04:35 +07:00
SamandClaude Fable 5.1 0a3c0692b1 pfUI's hdgraphic runs, the plates settle, and the water camera comes out
- pfUI's hdgraphic module runs: SetWorldDetail and GetWorldDetail are real verbs with the reference's three stops, and the near clip plane is a live setting at 0.100 yd rather than a frozen 0.111 (2163)
- nameplates stop drawing a black box on hover or click, stop jittering a frame behind a moving creature, and a unit that walks into range later gets its plate; a unit with no level wears no skull, and the wheel zooms over a plate (2168)
- the faint one-pixel box around every letter of a magnified overhead name is gone, each glyph now carrying its own transparent padding; interface text drawn at 1:1 is byte-identical (2169)
- the camera's water collision comes back out for now: its pivot corridor dropped the camera a yard in one frame at head depth, which is the snapping reported around the surface while swimming (2165)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-11 21:02:02 +07:00
SamandClaude Fable 5.1 99b55f58ee a bad macro fails on its own, and script errors name their frame
- a macro with a Lua error fails on its own and lands in the script error channel instead of aborting the UI function that ran it; RunScript names its chunk by the source text, and a bad or empty argument is a quiet no-op (2136)
- a script error or debugstack frame names its handler as Frame:OnClick instead of a whole CreateFrame sentence, an inline <Script> block is no longer mistaken for the .lua beside it, and a handler's line numbers stop reading one too high (2136)
- GetAddOnInfo and its seven siblings raise the reference's own Usage and out-of-range messages, GetAddOnInfo("2") is the second addon, and assert(a, b) answers one value, as the client's Lua 5.0 does (2139)
- frillDensity and gxApi are real settings: pfUI's hdgraphic module reads world detail through frillDensity, its system tooltip names the live render backend, and the two spellings of the ground clutter knob stay one knob (2151)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-11 20:54:29 +07:00
SamandClaude Fable 5.1 26fb54b402 fourteen settings go live, /leave holds, and /assist can swing
- mouse-look speed is cameraYawMoveSpeed and cameraPitchMoveSpeed, so pfUI's afkcam does what it asks and an addon driving the stock Interface Options window runs its load and Defaults walks to the end; the shipped feel does not move (2147)
- the eight combat-log range sliders are real settings, so BigWigs' Range plugin and DPSMate read and write them, and the Show Pet Melee Damage and periodic-spell settings genuinely silence what they gate (2147)
- the stock Sound Options window loads hidden beside ours for addons to find, and its three check-box settings are real: the listener sits at your character, emote voices can be muted, zone music can loop without its silence gap (2147)
- /assist with assistAttack set selects and starts swinging; /leave General survives a relog, a /join puts the channel back in its chat window's list, and SetGuildRecruitmentMode joins and leaves GuildRecruitment - City (2144)
- wipe, strsplit, strjoin, strtrim, strconcat and tostringall are gone: no 1.12 client has them, and the addons that call them are multi-client builds whose vanilla path raises on the real client too (2146)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-11 20:53:36 +07:00
SamandClaude Fable 5.1 de9f5edb45 zone channels survive a border crossing, and nameplates survive a login
- crossing a zone border prints one Changed Channel line instead of a leave and a join, and General and LocalDefense keep printing in the new zone; walking out of a capital keeps Trade's number and its registration instead of dropping it (2130)
- outside a capital the channel numbers are the reference's: a fresh character holds 1 General, 2 Trade (suspended until a city) and 3 LocalDefense, so /2 reaches the same channel it does on the real client (2137)
- logging into a character reads that character's zone, not the previous one's, so a login in the Eastern Plaguelands no longer joins and leaves Stormwind's channels first; a chat cache with General saved as a custom name gets its id back (2130)
- the Show Tutorials option survives a /reload: it loaded unchecked and clicking it reset every dismissed tutorial account-wide; a world entry no longer switches off nameplates you had turned on (2131, 2132)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-11 20:51:41 +07:00
SamandClaude Fable 5.1 a753a8b55d an addon's font draws in its own face, and Bartender2 keeps its profile
- text shapes in the face an addon asked for: MikScrollingBattleText draws in its own Porky instead of a system sans, and Arial Narrow and Friz Quadrata are no longer drawn by the Mac's own fonts (2123)
- Bartender2 and Cartographer stop resetting their profile at every login: a stack trace opens on the caller, where AceDB reads its addon's folder; a font's reported height is a number before its face resolves, which Tablet-2.0 does arithmetic on (2121, 2129)
- a button highlight built from a texture object draws, so Bongos' bar-drag button, _Nameplates' mouseover glow and Quiver's option rows show theirs; clearing a state texture removes it instead of drawing it in every state (2124)
- a toc's repeated SavedVariables lines add up, so all 25 of CT_RaidAssist's saved globals persist instead of seven; colour-mapped TGA icons decode, so FonzAppraiser's and FuBar_WeaponRebuffFu's draw (2126, 2128)
- MikScrollingBattleText's DoT lines are back with their school tints, and the school word is capitalised; a chat line with no colour stays white, and the short colour-id form of adding a message works (2127, 2125)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-11 20:50:59 +07:00
SamandClaude Fable 5.1 c343d236e9 cooldowns survive a relog, the MOTD prints, and lost channels come back
- a cooldown still running when you log out and back in keeps sweeping instead of vanishing, and another character no longer inherits the previous session's cooldowns (2116)
- the server's Welcome and Patch 1.12 lines print at login in system yellow, and a character whose General, Trade and LocalDefense had gone silent for good gets them back at the next login (2119, 2120)
- the stock Interface Options window loads hidden beside ours, so pfUI's options skin finds the real thing; the Auto-join Guild Recruitment Channel row has a real store, and a /reload no longer trips on its camera dropdowns (2115)
- the combat log words a power gain on the display scale, so MikScrollingBattleText shows +1 Rage where it showed +10; a 1.12 predicate answers 1 or nil rather than a Lua boolean, the test ColorPickerPlus makes (2117, 2118)
- a Lua error quotes a program element with a backquote the way 5.0 does, so AceLibrary's argument checks report their caller instead of raising inside the error path (2122)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-11 20:50:37 +07:00