From f3ecb5c96818cadaf00f620253ba16fd9c8d1ac7 Mon Sep 17 00:00:00 2001 From: Sam Date: Mon, 31 Aug 2026 19:50:08 +0700 Subject: [PATCH] a cinematic holds your body, and all seven chat windows exist MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - a cinematic holds the body while the camera flies: the streaming focus follows the eye — a Tauren's intro opens 1741 yards from the body — so the body's own ground unloaded under it and it fell (z=59.4 to −62 in four seconds, the server yanking it back); it now takes the same hold a teleport takes, released when the focus comes home to a resident tile, and the loading screen stops covering the fly-by, because "the player's ground is missing" is not a load while the eye is deliberately elsewhere; the letterbox measurement prints as an ordinary info line, and scripts/cine.sh plays any one cinematic and prints what the client did to the world while the camera was away - a cinematic cuts the zone music: the reference asserts exactly what /console EnableMusic 0 asserts, through the same setter — a cut, not a fade, the music pump dead for the duration, resume at +3.000 s — and benilla asserts the runtime flag, never the CVar, or quitting during a 102-second intro would save your music off for good; ambience is deliberately untouched (it has the analogous flag and the cinematic never writes it); the narration has no category at all — its flags route it around every volume slider but not around the Enable Sound Effects gate, so unchecking that silences it — and the listener follows the cinematic camera for the duration - addons can walk a UI they did not build: GetChildren/GetNumChildren/GetRegions/GetNumRegions land — the basis of the whole reskin genre, and the wall four of the twenty most-installed 1.12 addons died on: pfUI drew nothing before and now paints 495 quads, ShaguDPS 71 → 566, pfQuest 3 → 498 — with the reference's own quirks: the title region is NOT in the list (its creation path never reaches the region linker), hidden regions are returned and counted, oldest first; the Model widget gets its Lua surface (SetModel, SetSequence and siblings, read out of the shipped image, where SetRotation and SetFacing are two names for one slot); and the Minimap carries the nine engine-created Model children no XML declares, built before the frame descent, the ninth being the player arrow Questie indexes as ({Minimap:GetChildren()})[9] - all seven chat windows come from one template, tabs and scroll buttons included — whether a window is shown has nothing to do with whether its globals resolve, and pfUI reads every piece of that furniture for all seven, unguarded; isDocked only on windows 1 and 2 (the chat-cache's own DOCKED byte), SELECTED_CHAT_FRAME seated beside DEFAULT_CHAT_FRAME (the window you last picked vs the one FrameXML prints to), and the four per-window fields ChatFrame_OnLoad seats; two more one-name walls fell — a Button's label answers to its second spelling NormalText, which KLHThreatMeter's column headers die without, and ABANDON_QUEST_WITH_ITEMS is declared because a dialog table is read at load whatever the client later shows, leaving Questie with zero errors of ours — and the addon harness gains --probe/--eval, one addon's VM answering a question in ~5 s instead of a 90 s corpus run Co-Authored-By: Claude Fable 5 --- crates/benilla-app/assets/ui/ChatFrame.xml | 370 +++++++++--------- .../benilla-app/assets/ui/CinematicFrame.xml | 8 +- .../benilla-app/assets/ui/QuestLogFrame.xml | 31 ++ crates/benilla-app/examples/addon_harness.rs | 50 +++ crates/benilla-app/src/addon_harness/mod.rs | 45 ++- crates/benilla-app/src/addon_harness/probe.rs | 129 ++++++ .../src/addon_harness/probe_tests.rs | 150 +++++++ crates/benilla-app/src/cinematic.rs | 27 +- crates/benilla-app/src/loading_screen.rs | 21 +- crates/benilla-app/src/minimap/mod.rs | 26 ++ crates/benilla-app/src/player/world_focus.rs | 119 +++++- crates/benilla-app/src/sound/cinematic.rs | 41 +- crates/benilla-app/src/sound/mod.rs | 64 ++- crates/benilla-app/src/sound/zone.rs | 107 ++++- crates/benilla-app/src/ui_chat/tests.rs | 32 +- crates/benilla-ui/src/loader/mod.rs | 20 + crates/benilla-ui/src/loader/tests.rs | 178 +++++++++ crates/benilla-ui/src/loader/widgets.rs | 64 ++- crates/benilla-ui/src/script/minimap.rs | 47 ++- crates/benilla-ui/src/script/mod.rs | 61 ++- crates/benilla-ui/src/script/modelframe.rs | 280 +++++++++++++ crates/benilla-ui/src/script/object.rs | 4 + .../src/script/object/frame_state.rs | 144 +++++++ crates/benilla-ui/src/script/tests/minimap.rs | 73 +++- crates/benilla-ui/src/script/tests/mod.rs | 2 + .../benilla-ui/src/script/tests/modelframe.rs | 179 +++++++++ .../src/script/tests/structure_queries.rs | 170 ++++++++ crates/benilla-ui/src/widget/kinds/mod.rs | 124 ++++++ crates/benilla-ui/src/widget/mod.rs | 44 ++- crates/benilla-world/src/terrain_stream.rs | 11 + 30 files changed, 2360 insertions(+), 261 deletions(-) create mode 100644 crates/benilla-app/src/addon_harness/probe.rs create mode 100644 crates/benilla-app/src/addon_harness/probe_tests.rs create mode 100644 crates/benilla-ui/src/script/modelframe.rs create mode 100644 crates/benilla-ui/src/script/tests/modelframe.rs create mode 100644 crates/benilla-ui/src/script/tests/structure_queries.rs diff --git a/crates/benilla-app/assets/ui/ChatFrame.xml b/crates/benilla-app/assets/ui/ChatFrame.xml index 1e59a4ec..171324f9 100644 --- a/crates/benilla-app/assets/ui/ChatFrame.xml +++ b/crates/benilla-app/assets/ui/ChatFrame.xml @@ -580,6 +580,13 @@ local frame = getglobal("ChatFrame" .. i) if i == id then frame:Show() else frame:Hide() end end + -- `SELECTED_CHAT_FRAME` tracks the SELECTION, which is what makes it different from + -- `DEFAULT_CHAT_FRAME` (the print target, seeded once and left alone). The reference + -- writes it from the tab's own OnClick before it even reaches FCF_SelectDockFrame + -- (`FloatingChatFrame.lua:1232`) and again on a drag (`FloatingChatFrame.xml:158`); + -- ours has one selection verb that every one of those paths goes through, so it is + -- written here rather than replicated at three call sites. + SELECTED_CHAT_FRAME = getglobal("ChatFrame" .. id) or SELECTED_CHAT_FRAME if BenillaFCF.flashTab == id then BenillaFCF.flashTab = 0 local flash = getglobal("ChatFrame" .. id .. "TabFlash") @@ -1185,22 +1192,31 @@ end ]]> - + - -