the minimap and world map go stock, and the chat loses its white plate
- the minimap cluster and the battleground list are the reference's own `Minimap.xml` and `BattlefieldFrame.xml`, ours deleted, and the sixteen engine names the static probe found unbound are built, not stubbed: the battleground list and queue family (the as-group join refused client-side with no packet when the map's `MaxPlayers` is below the group), the bodyless `CMSG_BATTLEFIELD_STATUS` on world enter — benilla never sent it, so a queue joined before a reconnect was invisible — the 5.5556 yd `BATTLEFIELDS_CLOSED` leash, and the meeting-stone pair over the `0x295` five-way table with both asymmetries; the ping's lifetime is the stock Lua's now (held 5 s, faded 0.5 s), `GetPingPosition` answers two numbers always — our nil was a Lua error on every frame of the stock `Minimap_OnUpdate` — and the map-change drop the reference never had is gone (1974)
- the world map is the reference's own `WorldMapFrame.xml`, our transcription deleted; built for it: the arrow-frame family (an anonymous `Model` child at its 33.6 px footprint, drawn app-side as the minimap's own arrow sprite through one shared constant), the battleground position family over `MSG_BATTLEGROUND_PLAYER_POSITIONS` both ways (the reference's 5000 ms request throttle), and `GetPlayerMapPosition` resolving `raid1..raid40` where it knew only the party (B320); `SetupFullscreenScale` — the engine binding `0x48c270` the map's and the cinematic frame's OnShow call, which our map had stood in for with Lua — is bound to the carved law `min(0.75 · aspect, 1)` off the configured aspect, written through the frame's own `SetScale` (1.0 at 4:3 and wider, 0.9375 at 5:4); a hovered POI writes the map's own area label, not the tooltip; named gap: `WorldMapPing` draws nothing yet (1980, 1981)
- the tutorial frame is the reference's own `TutorialFrame.xml`, over a tutorial system benilla never had: two bit banks filled from `SMSG_TUTORIAL_FLAGS` — the fire-once bank `TriggerTutorial` reads and sets (never a send) and the acknowledged bank `FlagTutorial` writes and sends; there is no tutorial CVar in the binary (210 `CVar::Register` sites censused), so "disable tutorials" is every bit acknowledged; the sites this app can produce are wired (the world-enter Welcome cascade, the level-up arm, item pushes, the loot sparkle, the meeting-stone and battleground arms), the rest named; the loader learned `<TitleRegion>` — the stock frame's drag handle, a region that emits no quad; and the `TabardModel` widget kind arrives ahead of its window, five ints bounded by the `.rdata` table `{170, 17, 6, 17, 51}` and the constant 100 000 tabard cost (1976, 1977)
- the chat window drew as an opaque white plate: the chat-cache loader, gated on `InWorld` alone, restored into the boot VM 130 ms before the deferred entry load filled it, and its per-VM memo then blocked the restore that would have reached the real frames — the plate the stock Lua tints black stayed the XML's white; between the entry edge and the load there is now no VM in the world (the edge parks the boot VM, the load takes it back), so no in-world feed pushes into a VM with no interface; the perf pill reads `59 fps 7.0 ms 17.3 cpu` — the MAIN thread's milliseconds in full text and the process-wide sum dim, because the sum of every thread's CPU time had been read as a frame time (a raid read 17 on it at a solid 60 with the main thread at 7); and `WOW_PROBE_UI_ONE_TEX=1` is a pricing lever, never a look, for the draw-count ceiling a UI atlas would reach before one is built (1978, 1954)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -43,11 +43,15 @@ mod auction;
|
||||
mod aura;
|
||||
mod backdrop;
|
||||
mod bank;
|
||||
mod battlefield_positions;
|
||||
mod battlefield_queue;
|
||||
mod battlefield_score;
|
||||
mod bind_confirm;
|
||||
mod binder;
|
||||
mod binding_abi;
|
||||
mod dialog_verbs;
|
||||
mod tutorial;
|
||||
mod worldmap_arrow;
|
||||
// The five camera views + FlipCameraYaw — the reference's `UIUtil\Camera.cpp` Lua surface.
|
||||
mod button;
|
||||
mod camera_view;
|
||||
@@ -84,6 +88,7 @@ mod gossip;
|
||||
mod guild;
|
||||
mod handler_prof;
|
||||
mod screenshot;
|
||||
mod tabard;
|
||||
pub use handler_prof::HandlerRow;
|
||||
mod inspect;
|
||||
mod item_stats;
|
||||
@@ -162,6 +167,8 @@ pub use auction::{
|
||||
pub use aura::{AuraState, TrackingState};
|
||||
pub use backdrop::{inset_atlas_bleed, pieces, Backdrop, BackdropPiece, Insets};
|
||||
pub use bank::BankState;
|
||||
pub use battlefield_positions::{BattlefieldFlagView, BattlefieldPositionView};
|
||||
pub use battlefield_queue::{BattlefieldListView, BattlefieldMapInfo, BattlefieldQueueSlot};
|
||||
pub use battlefield_score::{BattlefieldScoreRow, BattlefieldScores, BattlefieldStatColumn};
|
||||
pub use bind_confirm::PendingEquipAnswer;
|
||||
pub use camera_view::{CameraViewRequest, CAMERA_VIEW_COUNT};
|
||||
@@ -199,6 +206,7 @@ pub use petition::{
|
||||
validate_guild_name, PetitionRecordView, PetitionRequest, PetitionState, PETITION_TYPE_CHARTER,
|
||||
PETITION_TYPE_PETITION,
|
||||
};
|
||||
pub use worldmap_arrow::{ARROW_FOOTPRINT_PX, ARROW_MODEL};
|
||||
|
||||
pub use inspect::{InspectView, UnitReach};
|
||||
pub use item_stats::{item_usable, ItemSetView, ItemTemplateView, PlayerReqState};
|
||||
@@ -611,6 +619,10 @@ impl UiScript {
|
||||
talent::install(&lua)?;
|
||||
dialog_verbs::install(&lua)?;
|
||||
battlefield_score::install(&lua)?;
|
||||
battlefield_queue::install(&lua)?;
|
||||
battlefield_positions::install(&lua)?;
|
||||
tutorial::install(&lua)?;
|
||||
worldmap_arrow::install(&lua)?;
|
||||
shapeshift::install(&lua)?;
|
||||
pet::install(&lua)?;
|
||||
gossip::install(&lua)?;
|
||||
@@ -625,6 +637,7 @@ impl UiScript {
|
||||
trade::install(&lua)?;
|
||||
inspect::install(&lua)?;
|
||||
dressup::install(&lua)?;
|
||||
tabard::install(&lua)?;
|
||||
tradeskill::install(&lua)?;
|
||||
craft::install(&lua)?;
|
||||
reputation::install(&lua)?;
|
||||
@@ -853,7 +866,7 @@ impl UiScript {
|
||||
///
|
||||
/// One field, not one per widget: there is exactly one ping (decision 1596), and the old
|
||||
/// per-widget push walked the whole ~3k-frame arena every frame a ping was live.
|
||||
pub fn set_minimap_ping(&mut self, ping: Option<(f32, f32)>) {
|
||||
pub fn set_minimap_ping(&mut self, ping: (f32, f32)) {
|
||||
self.model_mut().minimap_ping = ping;
|
||||
}
|
||||
|
||||
@@ -1050,6 +1063,20 @@ impl UiScript {
|
||||
.any(|(_, f)| f.name.as_deref() == Some(name) && f.effective_visible)
|
||||
}
|
||||
|
||||
/// The effective alpha of the frame with this global name while it is effectively visible,
|
||||
/// `None` when it is hidden or no live frame carries the name. The read side of a frame whose
|
||||
/// pixels a host draws for the engine: the stock `MiniMapPing` is a `<Model>` this engine
|
||||
/// renders nothing for, so the app's ping sprite follows the frame's own show/hide and alpha
|
||||
/// — the lifetime the reference's `Minimap.lua` owns — instead of keeping a clock of its own
|
||||
/// (1974). A linear scan, like [`Self::frame_visible`].
|
||||
pub fn frame_effective_alpha(&self, name: &str) -> Option<f32> {
|
||||
self.model_ref()
|
||||
.arena
|
||||
.iter_frames()
|
||||
.find(|(_, f)| f.name.as_deref() == Some(name) && f.effective_visible)
|
||||
.map(|(_, f)| f.effective_alpha)
|
||||
}
|
||||
|
||||
/// Resolve every frame's rect: sync each frame's effective scale from the arena into its layout
|
||||
/// input, run the [`crate::layout`] graph (screen root as the external base), and cache the
|
||||
/// resolved rects. `GetWidth`/`GetHeight`/`extract` read this cache.
|
||||
@@ -1419,6 +1446,7 @@ impl UiScript {
|
||||
crate::widget::FrameKind::Model => "Model",
|
||||
crate::widget::FrameKind::PlayerModel => "PlayerModel",
|
||||
crate::widget::FrameKind::DressUpModel => "DressUpModel",
|
||||
crate::widget::FrameKind::TabardModel => "TabardModel",
|
||||
crate::widget::FrameKind::MessageFrame => "MessageFrame",
|
||||
crate::widget::FrameKind::ScrollingMessageFrame => "ScrollingMessageFrame",
|
||||
crate::widget::FrameKind::ColorSelect => "ColorSelect",
|
||||
|
||||
Reference in New Issue
Block a user