From 981e2ee4989fa5b134341b651fe4bc2236d0f20f Mon Sep 17 00:00:00 2001 From: grom Date: Sat, 17 Oct 2026 22:13:14 -0600 Subject: [PATCH] framexml: six rows of the chain's own toc the manifest never had MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit benilla loads `assets/ui/benilla.toc`, not the player's `Interface\FrameXML\FrameXML.toc`, so a row the chain carries and the manifest omits is silently absent — no read, no warning, just a missing global or template surfacing as somebody else's error. Diffing the two found 29 such rows. Six of them land here. `Turtle_ArenaUI\Turtle_ArenaUITemplates.xml` is the one that was costing four errors per inspect: `Blizzard_InspectUI\InspectArenaFrame.xml` inherits `ArenaTeamTemplate` from it and then reads `$parentText`, `$parentDetails` and nine `$parentDetails*` children by name, so all three team-button OnLoads and `InspectArenaFrame_OnShow` raised on nil. `Globals.lua` publishes `print`, `TURTLE_WOW_VERSION`, `TW_CLASS_TOKEN`, `Turtle_AvailableChallenges`, `GAME_YELLOW` and the realm's three `ADDON_MSG_*_DELIMITER`s. `Overrides.lua` is Turtle's two-continent map. `Hooks.lua` is the realm's tooltip layer: the guild line, the shift-click hint and `FixSetInspect`. `ChronoboonTimers.lua` and `SpellChatLinks.lua` are self-contained. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01SgstFWtn1RxEJ5kVrpgYwn --- crates/benilla-app/assets/ui/benilla.toc | 30 ++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/crates/benilla-app/assets/ui/benilla.toc b/crates/benilla-app/assets/ui/benilla.toc index d08351aa..402d8b3e 100644 --- a/crates/benilla-app/assets/ui/benilla.toc +++ b/crates/benilla-app/assets/ui/benilla.toc @@ -17,6 +17,16 @@ Interface\FrameXML\Fonts.xml # Second, not first as in the reference, because entry 0 must be Fonts.xml. Interface\FrameXML\GlobalStrings.lua +# TurtleWoW's own two rows after GlobalStrings (its `FrameXML.toc` 11-12), both the client half of +# server-side systems. `Globals.lua` publishes `print`, `TURTLE_WOW_VERSION`, `TW_CLASS_TOKEN`, +# `Turtle_AvailableChallenges`, `GAME_YELLOW` and the three `ADDON_MSG_*_DELIMITER`s that every +# `CHAT_MSG_ADDON` protocol on this realm splits on; it also re-declares `sizeof`/`explode`/`wipe`/ +# `trim`, which our UI stdlib seeds for a chain that lacks the file, and the chain's own copy wins +# here, as in the reference. `Overrides.lua` is Turtle's two-continent map: `CONTINENTS_LENGTH = 2` +# and a `GetMapContinents` wrapper that returns exactly Kalimdor and Azeroth, dropping any further +# row the chain's `WorldMapContinent.dbc` carries. +Interface\FrameXML\Globals.lua +Interface\FrameXML\Overrides.lua # `Localize()` runs at load and overwrites GlobalStrings keys, so this follows them. Interface\FrameXML\Localization.xml # `GetText` is a Lua global, not an engine binding: the client's `0x703bf0` calls it. @@ -170,6 +180,17 @@ Interface\FrameXML\LFT\LFT.lua Interface\FrameXML\LFT\LFTTemplates.xml Interface\FrameXML\LFT\LFT.xml Interface\FrameXML\OctoLFTBlinkPause\OctoLFTBlinkPause.lua +# TurtleWoW's own three loose rows (its `FrameXML.toc` 103-105), all Lua over verbs that already +# exist. `Hooks.lua` is the realm's tooltip layer: the guild line under a player's name (gated on +# its own `TOOLTIP_GUILD_NAMES` CVar), the shift-click hint while a trade, auction or mail window +# is up, and `FixSetInspect`, which recolours an inspected or transmogrified item's set lines by +# what the unit actually wears — the reason a set bonus reads gray on this realm without it. +# `ChronoboonTimers.lua` adds the Chronoboon Displacer's stored-buff lines to its bag tooltip; +# `SpellChatLinks.lua` answers the realm's `TW_CHAT_MSG_WHISPER` spell/talent link protocol, so a +# linked spell in chat opens a tooltip instead of nothing. +Interface\FrameXML\Hooks.lua +Interface\FrameXML\ChronoboonTimers.lua +Interface\FrameXML\SpellChatLinks.lua # TurtleWoW's own FrameXML additions, in the reference `FrameXML.toc` order (patch-3.mpq). These # are the client half of Turtle's custom systems: `Turtle_TransmogUI` hooks `GOSSIP_SHOW`, hides # the stock gossip frame for its NPCs and drives the transmog window over `TW_TRANSMOG` addon @@ -186,6 +207,15 @@ Interface\FrameXML\Turtle_TransmogUI\Turtle_TransmogUITemplates.xml Interface\FrameXML\Turtle_TransmogUI\Turtle_TransmogUI.xml Interface\FrameXML\Turtle_ShopUI\Turtle_ShopUITemplates.xml Interface\FrameXML\Turtle_ShopUI\Turtle_ShopUI.xml +# Turtle's arena templates, the one row of its `# Arena` block (its `FrameXML.toc` 108-112) that +# stands alone: it inherits nothing but stock fonts and declares no handler of its own at load. +# `Blizzard_InspectUI`'s own `InspectArenaFrame.xml` inherits `ArenaTeamTemplate` for its three +# team buttons and then reads `$parentText`, `$parentDetails` and nine `$parentDetails*` children +# by name, so without this row the inspect window raised four times per inspect — three OnLoads +# and `InspectArenaFrame_OnShow`. The other four rows (`Turtle_ArenaUI.lua` and the arena, queue +# and registrar windows) are the same pattern as the Inspect-Talents and Guild-Bank UIs above: +# they need the arena verbs built first, so they are not loaded here yet. +Interface\FrameXML\Turtle_ArenaUI\Turtle_ArenaUITemplates.xml # Turtle's honour/arena merchant (Stormwind armoury PvP gear, the Custom_Merchant NPCs): it hooks # `GOSSIP_SHOW`, hides the gossip frame for an NPC whose greeting is `CUSTOM_MERCHANT_TRIGGER` and # fills over `TW_Merchant` addon messages. Without it that trigger text is what the stock gossip