From 7308046d602fa933a5321a2439caffa56db0162d Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 2 Sep 2026 17:05:57 +0700 Subject: [PATCH] the screen warps underwater, and the ocean darkens with depth MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - the screen warps underwater: submerged, the reference runs a second pass list whose third pass is `FFXGlowWave` (`0x6cb1f0`), binding a 128×128 two-channel sine bump map that displaces both the screen and the blur texcoords by 3.0 full-res pixels — uv rotated 10°, scaled W/128 × 0.88·H/128, two phases at 3174 and 2805 ms; wow-re had carried the swap as "GlowWave, or a duplicate Glow" and the cross-check settled it (the two arms are mutually exclusive and the plain-Glow arm is unreachable on both backends; lava and slime warp too, and a ghost's death pass replaces the glow outright); a dry frame binds the same pipeline object as before this existed, and the phases advance live at 0.313/s and 0.355/s against a predicted 0.315 and 0.357 - ocean is a fifth submersion state — 96.8% of every wet sub-tile in the shipped corpus, so essentially all open water — and it alone runs a depth ramp on the light: `t = clamp(eye.z, −30, 0)`, ambient at `(k+1)/2`, diffuse at `k/4 + 3/4`, exactly k = 0 at −30 yd, gated on the full dword `== 1` at `0x6d2821` (the ramp does NOT drive the fog colour — that store is dead, overwritten before submit); the sun and moon glare fade over a 10-yard depth ramp applied to the slew TARGET, not the drawn alpha — a read one indirection out that two notes had published a verified negative on; the MCLQ fishable bit (0x40) is deliberately unread, since `0x69b5d0` has zero callers in the image and fishability is the server's verdict - the dropdown kit is the reference's own `UIDropDownMenu.xml` (one manifest line for 1150 lines of ours, `DropDownList3` gained, and two fixtures that only worked because our copy was more forgiving); `UnitFactionGroup` returns the English name AND the localized one — ours returned the localized string twice, and the first return names a TEXTURE in every stock consumer (`UI-PVP-`..factionGroup), so on a non-English client every one of them named a file that does not exist Co-Authored-By: Claude Fable 5.1 --- crates/benilla-adt/src/lib.rs | 6 +- .../benilla-app/assets/ui/UIDropDownMenu.xml | 1150 ----------------- crates/benilla-app/assets/ui/UiPanels.xml | 29 + crates/benilla-app/assets/ui/benilla.toc | 15 +- crates/benilla-app/src/ui_chat/tests.rs | 2 +- .../src/ui_script/chat_options_tests.rs | 2 +- .../src/ui_script/chat_resize_tests.rs | 2 +- .../benilla-app/src/ui_script/chat_tests.rs | 2 +- .../src/ui_script/color_picker_tests.rs | 8 +- .../src/ui_script/combo_frame_tests.rs | 2 +- .../src/ui_script/dressup_tests.rs | 2 +- .../src/ui_script/dropdown_tests.rs | 2 +- .../benilla-app/src/ui_script/escape_tests.rs | 13 +- .../src/ui_script/friends_tests.rs | 2 +- .../src/ui_script/game_menu_tests.rs | 8 +- .../benilla-app/src/ui_script/guild_tests.rs | 2 +- .../src/ui_script/instance_tests.rs | 2 +- .../src/ui_script/keybindings_tests.rs | 31 +- .../src/ui_script/merchant_tests.rs | 2 +- .../src/ui_script/options_tests.rs | 35 +- .../src/ui_script/pet_frame_tests.rs | 2 +- .../src/ui_script/petition_tests.rs | 2 +- .../src/ui_script/questlog_tests.rs | 2 +- .../benilla-app/src/ui_script/raid_tests.rs | 2 +- .../src/ui_script/target_aura_tests.rs | 2 +- crates/benilla-app/src/ui_script/test_ui.rs | 4 +- .../src/ui_script/tooltip_anchor_tests.rs | 4 +- .../src/ui_script/tot_frame_tests.rs | 2 +- .../src/ui_script/trainer_tests.rs | 2 +- .../src/ui_script/unit_frame_tests.rs | 4 +- .../src/ui_script/unit_popup_tests.rs | 4 +- .../src/ui_script/world_map_tests.rs | 22 +- crates/benilla-app/src/ui_unit.rs | 19 + crates/benilla-app/tests/auction_frame.rs | 26 +- crates/benilla-app/tests/tradeskill_frame.rs | 28 +- crates/benilla-formats/src/factions.rs | 27 + crates/benilla-formats/src/light.rs | 171 ++- crates/benilla-ui/src/script/unit/bindings.rs | 30 +- crates/benilla-ui/src/script/unit/mod.rs | 16 +- crates/benilla-ui/src/script/unit/tests.rs | 27 + crates/benilla-wmo/src/lib.rs | 4 +- crates/benilla-world/src/ffx_glow.rs | 446 ++++++- crates/benilla-world/src/lighting/resolve.rs | 128 +- crates/benilla-world/src/liquid/drift.rs | 4 +- crates/benilla-world/src/liquid/mod.rs | 5 +- crates/benilla-world/src/liquid/query.rs | 87 +- .../benilla-world/src/shaders/ffx_glow.wgsl | 116 +- crates/benilla-world/src/sun/follow.rs | 72 +- crates/benilla-world/src/world_point.rs | 1 + 49 files changed, 1208 insertions(+), 1368 deletions(-) delete mode 100644 crates/benilla-app/assets/ui/UIDropDownMenu.xml diff --git a/crates/benilla-adt/src/lib.rs b/crates/benilla-adt/src/lib.rs index 4d0ce026..13dd79cb 100644 --- a/crates/benilla-adt/src/lib.rs +++ b/crates/benilla-adt/src/lib.rs @@ -157,8 +157,10 @@ pub struct MclqChunk { pub min_height: f32, pub max_height: f32, pub vertices: Vec, - /// Per-cell flags, row-major 8×8. Low nibble = liquid type (`0xf` = dry/hole); `0x40` fishable, - /// `0x80` shared. + /// Per-cell flags, row-major 8×8. Low nibble = liquid type (`0xf` = dry/hole); `0x80` shared. + /// `0x40` ("fishable") is carried but deliberately unread: its only compiled reader, the + /// reference's fishable query `0x69b5d0`, is a zero-caller dead island — fishability is the + /// server's verdict (`SPELL_FAILED_NOT_FISHABLE` passthru). Decision 1825. pub tile_flags: [u8; 64], } diff --git a/crates/benilla-app/assets/ui/UIDropDownMenu.xml b/crates/benilla-app/assets/ui/UIDropDownMenu.xml deleted file mode 100644 index 39e6a468..00000000 --- a/crates/benilla-app/assets/ui/UIDropDownMenu.xml +++ /dev/null @@ -1,1150 +0,0 @@ - - - - - - - - - - - - - UIDropDownMenuButton_OnClick(); - - - - if ( this.hasArrow ) then - UIDropDownMenuRow_OpenSubmenu(this); - UIDropDownMenu_StopCounting(this:GetParent()); - else - UIDropDownMenuRow_HoverIn(this:GetParent()); - end - getglobal(this:GetName().."Highlight"):Show(); - - - getglobal(this:GetName().."Highlight"):Hide(); - UIDropDownMenuRow_HoverOut(this:GetParent()); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CloseDropDownMenus(); - - - - - - - - - diff --git a/crates/benilla-app/assets/ui/UiPanels.xml b/crates/benilla-app/assets/ui/UiPanels.xml index 3d0a358b..b48c6cf0 100644 --- a/crates/benilla-app/assets/ui/UiPanels.xml +++ b/crates/benilla-app/assets/ui/UiPanels.xml @@ -399,6 +399,35 @@ -- surface (a focused test VM, and the reference's own `ADDON_LOADED` ordering), and this -- runs on the first line of every `ToggleBag`/`ToggleBackpack`/`ToggleKeyRing`, so it is -- the last place that should be the thing to raise. + -- ── Moved here when UIDropDownMenu.xml went to the chain (1751) ────────────────────── + -- The reference keeps `CloseMenus` in `UIParent.lua:984`, not in its dropdown file, and + -- this file is already where our slice of UIParent.lua lives (`IsOptionFrameOpen` below, + -- `CloseAllWindows`, `ToggleGameMenu`). It sits at manifest line 144, ahead of all five + -- consumers — the stock dropdown at 155, MicroMenu, GameMenuFrame and two test kits. + -- + -- The BOUND is inlined rather than read from `UIDROPDOWNMENU_MAXLEVELS`, which lives in the + -- dropdown file: a kit that loads this file and not that one would otherwise fail on + -- `'for' limit must be a number`. Two is the reference's own list count (DropDownList1/2 are + -- what `UIDropDownMenu.xml` declares; the third exists only in later builds). + -- + -- The BODY stays ours and is deliberately not the reference's: stock iterates a `UIMenus` + -- table nothing here declares, ours asks the dropdown lists directly. Same answer, and it + -- retires with this file rather than pretending to be stock. + function CloseMenus() + local closed + for i=1, 2, 1 do + local list = getglobal("DropDownList"..i) + if list and list:IsVisible() then + closed = 1 + end + end + if closed then + CloseDropDownMenus() + end + return closed + end + + function IsOptionFrameOpen() if (GameMenuFrame and GameMenuFrame:IsVisible()) or (OptionsFrame and OptionsFrame:IsVisible()) diff --git a/crates/benilla-app/assets/ui/benilla.toc b/crates/benilla-app/assets/ui/benilla.toc index 47b55922..b0a189a6 100644 --- a/crates/benilla-app/assets/ui/benilla.toc +++ b/crates/benilla-app/assets/ui/benilla.toc @@ -149,10 +149,17 @@ UiPanels.xml # requirement: ItemRef.xml below expands one, and so do the 27 corpus addons that name # GameTooltipTemplate in an XML inherits=. GameTooltip.xml -# The dropdown kit (0203 phase 2's closing sub-slice, widened for 0434 phase 5): -# UIDropDownMenuTemplate + DropDownList1/2 + the UIDropDownMenu_* API — before its -# first customers (the unit popups below, the world map's pickers, the trainer filter). -UIDropDownMenu.xml +# ══ THE DROPDOWN KIT — the reference's own, off the player's chain (1751) ══ +# UIDropDownMenuTemplate + the DropDownList frames + the whole `UIDropDownMenu_*` API — before its +# first customers (the unit popups below, the world map's pickers, the trainer filter). The stock +# file pulls its own `UIDropDownMenu.lua` and ``s UIDropDownMenuTemplates.xml, so this one +# line carries all three. We also gain `DropDownList3`, which our transcription stopped short of. +# +# Ours (0203 phase 2, widened for 0434 phase 5) defined every stock global plus six helpers of its +# own. Five were named nowhere outside the file. The sixth, `CloseMenus`, moved to UiPanels.xml — +# the reference keeps it in `UIParent.lua`, not its dropdown file, and UiPanels is both where our +# slice of UIParent.lua lives and ahead of all five of its consumers. +Interface\FrameXML\UIDropDownMenu.xml # ══ THE UIMenu KIT — the reference's own, off the player's chain (1751, window 21) ══ # `UIMenuTemplate` and `UIMenuButtonTemplate`, with `UIMenu.lua`'s `UIMenu_OnShow`/`_OnUpdate` and # the four `UIMenuButton_*` handlers arriving through the file's own `