From c4f432d0c3cab8f8d7cd8652ec345a17f45f5385 Mon Sep 17 00:00:00 2001 From: Sam Date: Mon, 31 Aug 2026 20:15:16 +0700 Subject: [PATCH] the world map blips are the reference's, and particles go untinted MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - the world map speaks the reference's names: WorldMapTooltip is declared (six corpus addons index it; pfUI dies on it at file scope), the blackout frame takes the reference's spelling BlackoutWorld, and the four hand-written party blips become the reference's own unit-blip templates — all 44 blips as instances, each with its published $parentIcon, the name pfUI recolours group blips by class through; the 40 raid ones are declared but not positioned yet, named in the OUT list rather than faked - the templates addons build their own buttons from are published: ItemButtonTemplate, ContainerFrameItemButtonTemplate and the bag-slot chain — most of the handler scripts were live the whole time (this client executes the reference's own container and paper-doll code off the player's patch chain), so what was missing was mostly declarations, not behaviour — the bank arm stays out and is named as the omission it is; OptionsFrameSliders becomes real, with the three Graphics rows reading it and re-reading on show, so an addon's write to a slider's bounds actually moves the slider; and the template census that had ranked these at "zero demand" learns to see a local bound to a literal — its table went from 3 rows to 7 - the bindings answer in 1.12's own shapes: Button:IsEnabled() answers the NUMBER 1 or 0 (0 is truthy in Lua, so the reference's own == 0 tests got false forever, and three of our files had hand-worked around the divergence rather than fixed it); the constructors' string arguments are four shapes, not one rule — pfUI passes a Button where a template name goes and the reference constructs the FontString and ignores it; SetInventoryItem returns THREE values, the reference's own paper doll destructuring repairCost; UnitIsVisible is object presence and nothing else (57 bytes, one branch, no distance — an out-of-range party member is exists-yes, visible-nil); the tapped pair reads the two dynamic-flags bits, and its repaint wire fires UNIT_FACTION on the tap bit — the half a passing predicate test never sees; UnitIsPartyLeader is two ORed legs covering disjoint failures (a held stranger leading their own party, and an out-of-range member with no object to read a flag from); and the four nameplate verbs take no argument and return zero values - the ghost's wisps compose onto its body instead of over it — the four emitters drew at full strength over a body at alpha 0.5, and now inherit the instance alpha down the attachment chain the way the reference recomposes it per frame; the residual we had parked ("the wisps should inherit the tint too") is REFUTED at the bytes: a particle batch commits hardcoded white RGB, and even that never reaches the fragment — particles are never tinted, only the alpha crosses, applied to the alpha byte alone — so the shipped shader split was already right and no code changes Co-Authored-By: Claude Fable 5 --- crates/benilla-app/assets/ui/BagFrame.xml | 43 ++- .../assets/ui/ContainerFrameAdapters.xml | 69 +++++ crates/benilla-app/assets/ui/FriendsFrame.xml | 11 +- .../assets/ui/ItemButtonTemplate.xml | 82 ++++- .../assets/ui/ItemSlotButtonTemplates.xml | 102 +++++++ crates/benilla-app/assets/ui/MacroFrame.xml | 8 +- crates/benilla-app/assets/ui/OptionsFrame.xml | 71 ++++- crates/benilla-app/assets/ui/UnitFrames.xml | 44 ++- .../benilla-app/assets/ui/WorldMapFrame.xml | 263 +++++++++++----- .../assets/ui/WorldMapFrameTemplates.xml | 72 +++++ crates/benilla-app/assets/ui/benilla.toc | 9 + crates/benilla-app/src/addon_harness/mod.rs | 151 ++++++++- crates/benilla-app/src/portrait/booth.rs | 55 +++- crates/benilla-app/src/portrait/dressup.rs | 1 + crates/benilla-app/src/portrait/glue_booth.rs | 1 + crates/benilla-app/src/portrait/mod.rs | 1 + crates/benilla-app/src/ui_party/feed.rs | 5 + .../benilla-app/src/ui_script/death_tests.rs | 6 +- .../src/ui_script/faux_scroll_tests.rs | 8 +- .../src/ui_script/frame_flag_gate.rs | 6 - .../src/ui_script/friends_tests.rs | 18 +- .../src/ui_script/game_menu_tests.rs | 12 +- .../benilla-app/src/ui_script/guild_tests.rs | 2 +- .../src/ui_script/inspect_tests.rs | 2 +- .../src/ui_script/keybindings_tests.rs | 6 +- .../benilla-app/src/ui_script/macro_tests.rs | 4 +- .../src/ui_script/merchant_tests.rs | 3 +- .../src/ui_script/minimap_tests.rs | 2 +- .../src/ui_script/options_tests.rs | 57 ++-- .../src/ui_script/panel_template_tests.rs | 6 +- .../benilla-app/src/ui_script/panel_tests.rs | 4 +- .../src/ui_script/petition_tests.rs | 8 +- .../benilla-app/src/ui_script/quest_tests.rs | 6 +- .../src/ui_script/questlog_tests.rs | 14 +- .../benilla-app/src/ui_script/raid_tests.rs | 13 +- .../benilla-app/src/ui_script/reference_ui.rs | 23 +- .../src/ui_script/reputation_frame_tests.rs | 2 +- .../src/ui_script/spellbook_tests.rs | 3 +- .../src/ui_script/static_popup_tests.rs | 4 +- .../src/ui_script/trainer_tests.rs | 6 +- .../src/ui_script/unit_frame_tests.rs | 6 + .../src/ui_script/unit_popup_tests.rs | 4 +- .../src/ui_script/world_map_tests.rs | 4 + crates/benilla-app/src/ui_unit.rs | 117 ++++++- crates/benilla-app/src/vplates.rs | 4 +- crates/benilla-app/tests/auction_frame.rs | 26 +- crates/benilla-app/tests/mail_frame.rs | 8 +- crates/benilla-app/tests/trade_frame.rs | 2 +- .../messages/update_object/fields/player.rs | 15 + .../src/messages/update_object/fields/unit.rs | 16 + crates/benilla-ui/src/loader/geometry.rs | 2 +- crates/benilla-ui/src/script/binding_abi.rs | 32 ++ crates/benilla-ui/src/script/button.rs | 23 +- crates/benilla-ui/src/script/char_stats.rs | 23 ++ crates/benilla-ui/src/script/cvars.rs | 75 ++++- crates/benilla-ui/src/script/mod.rs | 2 +- crates/benilla-ui/src/script/object.rs | 39 ++- .../src/script/object/events_regions.rs | 62 ++-- crates/benilla-ui/src/script/party.rs | 17 ++ crates/benilla-ui/src/script/tests/button.rs | 3 +- .../src/script/tests/reference_surface.rs | 71 +++++ crates/benilla-ui/src/script/tests/regions.rs | 104 +++++++ .../src/script/tests/tooltip_item/bindings.rs | 12 + .../benilla-ui/src/script/tooltip_item/mod.rs | 41 ++- crates/benilla-ui/src/script/unit/bindings.rs | 117 +++++++ crates/benilla-ui/src/script/unit/mod.rs | 59 ++++ crates/benilla-ui/src/script/unit/tests.rs | 286 +++++++++++++++++- crates/benilla-world/src/model_fade.rs | 85 +++++- 68 files changed, 2186 insertions(+), 272 deletions(-) create mode 100644 crates/benilla-app/assets/ui/ItemSlotButtonTemplates.xml create mode 100644 crates/benilla-app/assets/ui/WorldMapFrameTemplates.xml diff --git a/crates/benilla-app/assets/ui/BagFrame.xml b/crates/benilla-app/assets/ui/BagFrame.xml index 4bf6846e..f7cc7950 100644 --- a/crates/benilla-app/assets/ui/BagFrame.xml +++ b/crates/benilla-app/assets/ui/BagFrame.xml @@ -974,6 +974,47 @@ BenillaBagBarSlot_OnEnter(this) end + -- ref BagSlotButton_OnClick / _OnDrag / _OnShiftClick (MainMenuBarBagButtons.lua l.3-53), + -- published beside _OnEnter above for the same reason it was: they are the names + -- BagSlotButtonTemplate binds, and an addon that builds its bag bar from that template + -- reaches them and nothing else. pfUI is the measured caller (modules/bags.lua l.537), and + -- it CHAINS them — `GetScript("OnEnter")` then calling what it got — so a missing one is + -- not a dead button, it is a nil call inside the addon's own wrapper. + -- + -- **Our four bar slots do not come through here** and are untouched: they carry an explicit + -- bagId from BenillaBagBarSlot_OnLoad and wire the Benilla bodies directly. These three + -- exist so a TEMPLATE-built button reaches the same bodies — one implementation, two entry + -- points, which is the whole point of publishing the reference's name over ours. + -- + -- NOT the reference's bodies, and the difference is forced rather than chosen: all three of + -- its versions scan ContainerFrame1..NUM_CONTAINER_FRAMES to re-derive the checked state, + -- and reach for PutItemInBag / PickupBagFromSlot. benilla builds no ContainerFrame windows + -- and binds neither verb — our equip/swap arm is PickupInventoryItem (0208 1b) and our + -- checked state is read off BenillaBagFrame. Sourcing MainMenuBarBagButtons.lua instead + -- of writing these would have handed every caller a body that raises on `frame:GetID()` + -- against a nil ContainerFrame1, which is why that file is NOT in reference_ui's SOURCED + -- list while PaperDollFrame.lua is. + function BagSlotButton_OnClick() + BenillaBagBarSlot_OnClick(this) + end + + -- The drag arm: ref picks the equipped bag up with PickupBagFromSlot; ours is the same + -- PickupInventoryItem transition the bar slots already use, so an empty cursor picks the + -- bag up and a held bag places it. + function BagSlotButton_OnDrag() + BenillaBagBarSlot_Place(this) + end + + -- Shift-click opens every bag if this slot HOLDS one (ref l.38-41 verbatim), then re-reads + -- the checked state off our own window the way BenillaBagBarSlot_OnClick's tail does. + function BagSlotButton_OnShiftClick() + if GetInventoryItemTexture("player", this:GetID()) then + OpenAllBags() + end + local frame = this.bagId and getglobal("BenillaBagFrame" .. this.bagId) + this:SetChecked(frame and frame:IsShown()) + end + -- ref OnLeave for both (l.100-102 / the template's own): a plain Hide, no fade — the item -- half of the split BenillaUnitFrame_OnLeave's comment describes. function BenillaBagBarButton_OnLeave() @@ -1074,7 +1115,7 @@ -- drag feedback, IsInventoryItemLocked — the bag-slot twin of BenillaBagSlot_Update). if IsInventoryItemLocked(invSlot) then button.icon:SetVertexColor(0.4, 0.4, 0.4) - elseif button:IsEnabled() then + elseif button:IsEnabled() ~= 0 then button.icon:SetVertexColor(1, 1, 1) else -- Disabled by Disable_BagButtons below: keep the grey. The reference needs no such diff --git a/crates/benilla-app/assets/ui/ContainerFrameAdapters.xml b/crates/benilla-app/assets/ui/ContainerFrameAdapters.xml index 6dbf4f00..ccaa7997 100644 --- a/crates/benilla-app/assets/ui/ContainerFrameAdapters.xml +++ b/crates/benilla-app/assets/ui/ContainerFrameAdapters.xml @@ -104,4 +104,73 @@ end ]]> + + + diff --git a/crates/benilla-app/assets/ui/FriendsFrame.xml b/crates/benilla-app/assets/ui/FriendsFrame.xml index ecaf1e23..e9baaa03 100644 --- a/crates/benilla-app/assets/ui/FriendsFrame.xml +++ b/crates/benilla-app/assets/ui/FriendsFrame.xml @@ -559,13 +559,12 @@ return getglobal(token) end - -- `Button:IsEnabled()` answers 1/0 in 1.12 and a BOOLEAN in this engine - -- (`benilla-ui/src/script/button.rs`), so the ref's own `IsEnabled() == 0` test would be - -- false forever here and the promote/demote pair would never hide. This reads both - -- spellings and is the only place in the file that needs to. + -- The ref's own `IsEnabled() == 0` (FriendsFrame.lua l.404), which works here again: + -- IsEnabled answers the NUMBER 1 or 0 (button.rs, wow-re button-enabled-state.md). This + -- used to read BOTH spellings because the engine returned a boolean, and the dual read + -- went with that divergence rather than outliving it as the workaround that hides it. local function guildButtonDisabled(button) - local enabled = button:IsEnabled() - return (not enabled) or (enabled == 0) + return button:IsEnabled() == 0 end -- The page button and the view's squeezable column share one rule: a visible scroll bar diff --git a/crates/benilla-app/assets/ui/ItemButtonTemplate.xml b/crates/benilla-app/assets/ui/ItemButtonTemplate.xml index 470b84e1..20039646 100644 --- a/crates/benilla-app/assets/ui/ItemButtonTemplate.xml +++ b/crates/benilla-app/assets/ui/ItemButtonTemplate.xml @@ -43,12 +43,47 @@ anyway because the family is one contract and, once the tint verb below is shared, they are one line each; that is stated rather than dressed up as demand (1210). - **The virtual `ItemButtonTemplate` Button is deliberately NOT here.** The harness's template - demand ranks it at zero on both axes — no corpus addon names it in a `CreateFrame` fourth - argument or an XML `inherits=` (they name their own `*ItemButtonTemplate`s, or - `ContainerFrameItemButtonTemplate`) — and our own bag windows already have - `BenillaBagSlotTemplate`. Building an unwanted template is exactly the unmeasured work 1210 - was written about. + **The virtual `ItemButtonTemplate` Button IS here now — 1719: a prior measured decision is + revisited when the measurement changes, and it changed.** The paragraph below is kept because + it records how the number was wrong before it was also incomplete. It used to say + "the harness's template demand ranks it at zero on both axes", full stop. The zero was real; + the demand was not. pfUI asks for `ContainerFrameItemButtonTemplate` — which the reference + declares as `inherits="ItemButtonTemplate"` (ContainerFrame.xml l.4), so it wants this one + transitively — through a shape the census could not see: + + local tpl = "ContainerFrameItemButtonTemplate" + if bag == -1 then tpl = "BankItemButtonGenericTemplate" end + CreateFrame("Button", "pfBag" .. bag .. "item" .. slot, pfUI.bags[bag], tpl) + + The instrument said so at itself the whole time (`missing_templates`' doc named the literal-only + bound), which is the difference between an honest under-report and a wrong number — but a bound + stated at the function and forgotten at the call site is only half a guard. The census now + resolves a local bound to a literal, and a test asserts both what it sees and what it still + cannot (concatenation, table fields, parameters). + + That paragraph then weighed the chain as "a real unit of work" and left it. **The weighing was + wrong, and wrong for a reason worth recording: it priced the SCRIPTS, which we already have.** + `ContainerFrameItemButtonTemplate`'s handlers are `ContainerFrameItemButton_OnLoad/_OnClick/ + _OnEnter/_OnUpdate` and `KeyRingItemButton_OnClick` — and this client does not transcribe those, + it EXECUTES the reference's own `ContainerFrame.lua` off the player's patch chain + (`ui_script::reference_ui`, SOURCED). They have been live the whole time. What was missing was + never the behaviour; it was two XML declarations, because the reference ships its templates in + `ContainerFrame.xml` and that file is not in the sourced set. + + So the chain costs what it actually costs: this Button, and `ContainerFrameItemButtonTemplate` + in ContainerFrameAdapters.xml beside the adapter that already wraps one of those very handlers. + Our own bag windows keep `BenillaBagSlotTemplate` and are untouched — that is our design (0216), + a thousand lines of it, and this template is the reference's PUBLISHED surface for addons that + build their own slots. Two things that look alike because they do the same job; only one of them + is an API. + + **The bank arm is NOT here, and this is the omission, not an oversight** (1134 §4). + `BankItemButtonGenericTemplate` inherits `BankItemButtonTemplate` (BankFrame.xml l.-), whose + handlers — `BankFrameItemButton_OnLoad`, `_OnEvent`, `BankFrameItemButtonGeneric_OnClick` — + live in `BankFrame.lua`, which is NOT sourced, and whose OnEnter calls `this:GetInventorySlot()`, + a widget method we do not bind. That is the real unit of work the paragraph above thought it was + describing. pfUI reaches it only for `bag == -1`, so its bag arm works and its bank arm raises + where it raises today. --> + + + diff --git a/crates/benilla-app/assets/ui/ItemSlotButtonTemplates.xml b/crates/benilla-app/assets/ui/ItemSlotButtonTemplates.xml new file mode 100644 index 00000000..dae01e53 --- /dev/null +++ b/crates/benilla-app/assets/ui/ItemSlotButtonTemplates.xml @@ -0,0 +1,102 @@ + + + + + + + + + + PaperDollItemSlotButton_OnLoad(); + this:RegisterEvent("BAG_UPDATE"); + this.isBag = 1; + -- OURS, and the one deviation in this file's scripts. The reference's three bag + -- handlers each recompute a `translatedID` from these same two ids at every call + -- site; our bodies read `button.bagId`, the field BenillaBagBarSlot_OnLoad sets for + -- the four hand-wired slots. Resolving it once here is what lets a template-built + -- button and a hand-wired one share one implementation instead of two. + this.bagId = this:GetID() - CharacterBag0Slot:GetID() + 1; + + + if ( IsShiftKeyDown() ) then + BagSlotButton_OnShiftClick(); + else + BagSlotButton_OnClick(); + end + + BagSlotButton_OnDrag(); + BagSlotButton_OnClick(); + BagSlotButton_OnEnter(); + + + + diff --git a/crates/benilla-app/assets/ui/MacroFrame.xml b/crates/benilla-app/assets/ui/MacroFrame.xml index ba632752..54236062 100644 --- a/crates/benilla-app/assets/ui/MacroFrame.xml +++ b/crates/benilla-app/assets/ui/MacroFrame.xml @@ -885,10 +885,10 @@ getglobal("BenillaMacroPopupFrame"):Hide() - -- The ref writes `IsEnabled() ~= 0`; this engine's IsEnabled returns - -- a BOOLEAN (button.rs), for which `~= 0` is always true — plain - -- truthiness is the correct read here. - if getglobal("BenillaMacroPopupOkayButton"):IsEnabled() then + -- The ref's own spelling, and now literally ours: IsEnabled answers the + -- NUMBER 1 or 0 (button.rs, wow-re button-enabled-state.md). Plain + -- truthiness would be WRONG here — 0 is truthy in Lua. + if getglobal("BenillaMacroPopupOkayButton"):IsEnabled() ~= 0 then BenillaMacroPopupOkayButton_OnClick() end diff --git a/crates/benilla-app/assets/ui/OptionsFrame.xml b/crates/benilla-app/assets/ui/OptionsFrame.xml index b3200428..1b57d570 100644 --- a/crates/benilla-app/assets/ui/OptionsFrame.xml +++ b/crates/benilla-app/assets/ui/OptionsFrame.xml @@ -866,6 +866,43 @@ -- refreshing guard: SetMinMaxValues re-clamps the held value and fires OnValueChanged, -- and that clamp is wiring, not a player gesture — without the guard every load would -- SetCVar the template's 0 clamped into the new range. + -- ── OptionsFrameSliders — ref OptionsFrame.lua l.24-34 ────────────────────────────── + -- The reference's options-slider table: one row per graphics slider, carrying the bounds + -- the slider is built with. It is PUBLISHED, so addons read and write it — pfUI's + -- `hdgraphic` module opens with `_G.OptionsFrameSliders[3].maxValue = 15` + -- (modules/hdgraphic.lua l.3) and died on the nil, taking the module with it. + -- + -- **It is the real thing, not a shape put here to satisfy that write.** The three rows + -- below are the source of truth for our own Graphics page: each row's OnLoad reads its + -- bounds from here rather than carrying literals, and the page re-applies them on every + -- OnShow, which is what makes an addon's write actually move the slider. A table nothing + -- read would be a name with no behaviour behind it (1134 §4) — worse than absent, because + -- the write would appear to succeed. + -- + -- **Three rows, not the reference's nine.** Ours are its rows 1-3 in its own order, and the + -- `func` strings match our CVars exactly (uiscale/farclip/WorldDetail) — which is why + -- pfUI's index 3 lands on Environment Detail here as it does there. The other six + -- (TerrainMip, BaseMip, Gamma, anisotropic, spellEffectLevel, weatherDensity) have no + -- benilla knob behind them; listing them would publish six rows whose writes do nothing. + -- 0959/1649 own which knobs this page ships, and this table follows that, not the reverse. + -- + -- `benillaRow` is ours: the reference addresses its sliders as OptionsFrameSlider1..9, a + -- numbering our page does not use, so each row names the child it drives instead. + -- + -- NOT bound, and named rather than faked: pfUI's module goes on to hook `SetWorldDetail` + -- and drive `ConsoleExec("frillDensity ...")`, `lodDist`, `nearClip`, `maxLOD`. benilla has + -- no console and none of those CVars. Neither verb is called at load, so the module loads + -- and its slider write lands; its EXTENDED arm cannot work here and a no-op ConsoleExec + -- would be exactly the silent pretence 1203 exists to forbid. + OptionsFrameSliders = { + { text = "UI Scale", func = "uiscale", + minValue = 0.64, maxValue = 1.0, valueStep = 0.01, benillaRow = "RowUiScale" }, + { text = "Terrain Distance", func = "farclip", + minValue = 177, maxValue = 777, valueStep = 60, benillaRow = "RowFarclip" }, + { text = "Environment Detail", func = "WorldDetail", + minValue = 0, maxValue = 2, valueStep = 1, benillaRow = "RowWorldDetail" }, + } + function OptionsSliderRow_Setup(row, min, max, step, fmt, stops) local slider = getglobal(row:GetName() .. "ControlSlider") row.fmt = fmt @@ -2280,7 +2317,9 @@ OptionsRow_OnLoad(self, "uiScale", "UI Scale", "OPTION_TOOLTIP_UI_SCALE") - OptionsSliderRow_Setup(self, 0.64, 1.0, 0.01) + OptionsSliderRow_Setup(self, OptionsFrameSliders[1].minValue, + OptionsFrameSliders[1].maxValue, + OptionsFrameSliders[1].valueStep) -- era registers its uiscale row CommitFlag.Apply -- (Graphics.lua l.684): the one row whose live -- write would rescale the very slider mid-drag — @@ -2296,7 +2335,9 @@ OptionsRow_OnLoad(self, "farclip", "Terrain Distance", "OPTION_TOOLTIP_FARCLIP") - OptionsSliderRow_Setup(self, 177, 777, 60, "raw") + OptionsSliderRow_Setup(self, OptionsFrameSliders[2].minValue, + OptionsFrameSliders[2].maxValue, + OptionsFrameSliders[2].valueStep, "raw") @@ -2310,7 +2351,9 @@ -- The stop names are the era preset ladder's (its -- quality dropdowns say Low/Medium/High); 1.12's -- slider had no stop labels to quote. - OptionsSliderRow_Setup(self, 0, 2, 1, nil, + OptionsSliderRow_Setup(self, OptionsFrameSliders[3].minValue, + OptionsFrameSliders[3].maxValue, + OptionsFrameSliders[3].valueStep, nil, { "Low", "Medium", "High" }) @@ -2410,6 +2453,28 @@ + + + + for i = 1, table.getn(OptionsFrameSliders) do + local info = OptionsFrameSliders[i] + local row = info.benillaRow and getglobal(this:GetName() .. info.benillaRow) + if ( row ) then + OptionsSliderRow_Setup(row, info.minValue, info.maxValue, + info.valueStep, row.fmt, row.stops) + end + end + + - + + @@ -670,13 +746,37 @@ + + + + this.unit = "player"; + this:SetFrameLevel(this:GetFrameLevel() + 1); + + WorldMapUnit_OnEnter() + WorldMapTooltip:Hide() + + tooltip to a WorldMapTooltip; ours rides the shared GameTooltip through + the side-pick every marker on the sheet shares. That parenthetical used to + read "this map ships no separate tooltip" and is no longer true — + WorldMapTooltip is declared below. The UNIT blips moved onto it with + WorldMapUnit_OnEnter; the sheet MARKERS (this one, the POIs) deliberately + did not, because they share WorldMapMarker_ShowTooltip and moving one + moves all of them. That is a deviation left standing, not an oversight. --> @@ -696,70 +796,61 @@ - - - - - - - - - - - WorldMapParty_OnEnter(this) - GameTooltip:Hide() - - - - - - - - - - - - WorldMapParty_OnEnter(this) - GameTooltip:Hide() - - - - - - - - - - - - WorldMapParty_OnEnter(this) - GameTooltip:Hide() - - - - - - - - - - - - WorldMapParty_OnEnter(this) - GameTooltip:Hide() - - + The RAID forty are declared here and positioned NOWHERE: WorldMapParty_Update below drives + the party arm only, because `GetPlayerMapPosition` answers (0,0) for every `raid` token and + the reference's battleground arm needs GetNumBattlefieldPositions / GetBattlefieldPosition, + which we do not bind. Declared-and-hidden is what the reference does with them out of a + raid anyway; the difference is that ours stay that way. Named in the OUT list. --> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -803,7 +894,7 @@ - WorldMapBlackout:Show(); + BlackoutWorld:Show(); SetupFullscreenScale(); SetMapToCurrentZone(); WorldMapFrame_Update(); @@ -812,7 +903,7 @@ CloseDropDownMenus(); - WorldMapBlackout:Hide(); + BlackoutWorld:Hide(); if UpdateMicroButtons then UpdateMicroButtons() end; PlaySound("igQuestLogClose"); @@ -823,4 +914,20 @@ + + +