- 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 <noreply@anthropic.com>
66 lines
3.2 KiB
XML
66 lines
3.2 KiB
XML
<Ui>
|
|
<!--
|
|
The cinematic frame — what makes InCinematic() true, and the ESC that skips a fly-by.
|
|
Transcribed from the reference's Interface\FrameXML\CinematicFrame.xml + .lua (decision
|
|
1602 permits it); the engine half is crate::cinematic.
|
|
|
|
This frame is load-bearing for exactly one thing, and it is not a picture: it is the WHOLE
|
|
skip path. In the reference, StopCinematic (0x48b970) has zero native callers and no
|
|
Bindings.xml row — the only thing that ever calls it is the OnKeyDown below, reached
|
|
because this fullscreen frame is keyboard-enabled and showing. No frame on screen means no
|
|
way out of a 102-second Night Elf intro.
|
|
|
|
THE BLACK BARS ARE NOT HERE, deliberately. The reference draws them as two textures on this
|
|
frame; we draw them as Bevy UI nodes in crate::cinematic instead, because a cinematic hides
|
|
the HUD through UiHidden — which kills both of ui_pass's quad lanes wholesale, and the
|
|
FrameXML layer is one of them. Bars declared here would go dark along with the action bars
|
|
they exist to replace. The bar LAW is unchanged and still the reference's — but it is BOTH
|
|
halves of it (decision 1701): the Lua's `if width/height > 4/3` guards a *recompute*, not
|
|
whether there are bars, and below it the XML's own `1024x128` textures stand on the native
|
|
1024x768 sheet, i.e. height/6 — which is the 2:1 crop evaluated at exactly 4:3. One
|
|
expression covers both: `min((h - min(w/2, h))/2, h/6)`. See `drive_letterbox`.
|
|
|
|
So this frame draws nothing at all. It is kept rather than replaced with an engine-side key
|
|
handler because the skip path IS a frame in the reference: keeping it means ESC works for
|
|
the same reason it works there, and an addon that hooks CinematicFrame still finds it.
|
|
|
|
RunBinding("SCREENSHOT") is kept as the reference has it: while this frame eats the
|
|
keyboard, the screenshot key is the one binding that still has to get through.
|
|
-->
|
|
<Script><![CDATA[
|
|
function CinematicFrame_OnLoad()
|
|
this:RegisterEvent("CINEMATIC_START");
|
|
this:RegisterEvent("CINEMATIC_STOP");
|
|
end
|
|
|
|
function CinematicFrame_OnEvent()
|
|
if ( event == "CINEMATIC_START" ) then
|
|
ShowUIPanel(this, 1);
|
|
return;
|
|
end
|
|
if ( event == "CINEMATIC_STOP" ) then
|
|
HideUIPanel(this);
|
|
return;
|
|
end
|
|
end
|
|
]]></Script>
|
|
<Frame name="CinematicFrame" setAllPoints="true" hidden="true" enableKeyboard="true" enableMouse="true">
|
|
<Scripts>
|
|
<OnLoad>
|
|
CinematicFrame_OnLoad();
|
|
</OnLoad>
|
|
<OnEvent>
|
|
CinematicFrame_OnEvent();
|
|
</OnEvent>
|
|
<OnKeyDown>
|
|
local screenshotKey = GetBindingKey("SCREENSHOT");
|
|
if ( arg1 == "ESCAPE" ) then
|
|
StopCinematic();
|
|
elseif ( screenshotKey and (arg1 == screenshotKey) ) then
|
|
RunBinding("SCREENSHOT");
|
|
end
|
|
</OnKeyDown>
|
|
</Scripts>
|
|
</Frame>
|
|
</Ui>
|