Files
ClassicAPI/docs/BlizzardScriptAPI.md
Brues ed7e7628c7 docs: catalogue the Lua base library the batch scan never saw
BlizzardScriptAPI.md and raw_globals.txt were built by walking the 54
FrameScript_RegisterFunction batches, so the Lua standard libraries —
bound by luaL_openlib from luaL_reg tables at state creation — were
missing entirely. That gap read as "1.12 has no debugprofilestart", which
is wrong: the pair is stock since 1.7.0, in the base-library table at
0x00811E28 (36 entries: setglobal … debugstack).

Add the table to both files, with the mechanism (FUN_00703B80 runs the
lib open and the alias snippet at .data 0x008722E8 right before
FUN_LOAD_SCRIPT_FUNCTIONS), the debugprofile pair's clock (rdtsc delta
over a boot-calibrated ticks-per-second, milliseconds as a double), and
the rule this taught: check these tables or /dump the name before
declaring a global absent.
2026-09-12 04:15:44 -05:00

953 lines
40 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Blizzard Script API — `C:\WoW\Octo\WoW.exe` (Vanilla 1.12.1 / Turtle WoW)
Catalogue of every Lua function and frame-method that the WoW client exposes
to addons, recovered by scanning the binary directly. This is the source of
truth for "what can a Lua addon call?" — extracted by walking the engine's
own registration tables.
ImageBase `0x00400000`. All VAs in this doc use that base.
## How Blizzard wires Lua
There are two Blizzard registries, plus the Lua standard libraries, which are
bound a third way (§3) and are NOT in the batch counts below.
### 1. Global functions — `FrameScript_RegisterFunction` at `0x00704120`
Calling convention: `__fastcall(ecx = const char *name, edx = lua_CFunction func)`.
At call time the C function is wrapped as a closure and assigned to the global
table at `LUA_GLOBALSINDEX (-10001)`.
The client never registers globals one-by-one with hard-coded immediates.
Instead, every batch is a `{ char *name; void *func; }[]` array in `.data`
that gets walked by an inline loop:
```asm
; canonical pattern — appears 54 times in the binary
56 push esi
33 F6 xor esi, esi
.loop:
8B 96 <addr+4> mov edx, [esi + table+4] ; func ptr
8B 8E <addr+0> mov ecx, [esi + table+0] ; name ptr
E8 <FrameScript_RegisterFunction>
83 C6 08 add esi, 8 ; entry stride
81 FE <count*8> cmp esi, count*8 ; (or `83 FE imm8` for small)
72 <-back> jb .loop
5E pop esi
C3 ret
```
Recovering every batch and its entries: 54 tables, **1153 globals total**
(of which 2 tables / 15 entries are Turtle WoW additions, broken out in
[`TurtleScriptAPI.md`](TurtleScriptAPI.md)).
### 2. Frame methods — iterator at `0x00701D80`
Calling convention: `__fastcall(ecx = MethodEntry *table, edx = count, [stack] = context)`.
Each frame-type method registry is a single trampoline:
```asm
68 <context> push <context VA> ; e.g. 0x00C0CF20 for GameTooltip
BA <count> mov edx, count
B9 <table> mov ecx, table VA
E8 <iterator> call 0x00701D80
C3 ret
```
23 tables found, **481 methods total**. The runtime dispatcher at `0x005368D0`
resolves `frame:method(...)` by looking the name up in the matching context.
### 3. Lua standard libraries — `luaL_openlib` tables
The Lua 5.0 standard libraries, and Blizzard's replacements inside them, are
bound by `luaL_openlib` walking one `luaL_reg { char *name; lua_CFunction
func; }[]` table per library when the Lua state is created (`FUN_00703B80`,
called immediately BEFORE `FUN_LOAD_SCRIPT_FUNCTIONS`). They never pass
through `FrameScript_RegisterFunction`, so none of them appear in the 54
batches above or in the loop scan behind `raw_globals.txt` — which is how
`debugprofilestart` / `debugprofilestop` (stock since 1.7.0) went
uncatalogued here until 2026-09. **Before declaring a global absent, check
these tables or `/dump` the name in game.**
**Base library** — table `[0x00811E28]`, 36 entries, `.rdata`. Blizzard's
own base library: the stock 5.0 set minus `dofile`/`loadfile`/`require`/
`print` (`print` is a ClassicAPI backport), plus the `debug*` /
`*errorhandler` / `date` / `time` additions.
```
0x00702770 setglobal 0x00702DF0 type
0x007027B0 getglobal 0x00702E30 tonumber
0x007027E0 debugload 0x00702F40 tostring
0x007027F0 debuginfo 0x007030A0 unpack
0x00702800 debugprint 0x007030F0 rawequal
0x00702810 debugdump 0x00703130 rawget
0x00702820 debugbreak 0x00703160 rawset
0x00702830 debugtimestamp 0x007031A0 assert
0x00702840 debugprofilestart 0x00703200 gcinfo
0x00702860 debugprofilestop 0x00703250 collectgarbage
0x00702900 seterrorhandler 0x00703280 loadstring
0x00702950 geterrorhandler 0x007032F0 pcall
0x00702970 error 0x00703340 xpcall
0x007029F0 getmetatable 0x007033A0 date
0x00702A40 setmetatable 0x007035A0 time
0x00702AC0 getfenv 0x00703760 debugstack
0x00702BE0 setfenv
0x00702C90 next
0x00702CD0 ipairs
0x00702DA0 pairs
```
`debugprofilestart` stores `rdtsc` in `0x00CEEB58` (u64);
`debugprofilestop` pushes `|rdtsc − start| / (ticksPerSecond / 1000)` as a
double, where `ticksPerSecond` is `FUN_0042C020` = `(int64)(1000.0 /
[0x008332C8])` — a TSC scale calibrated at boot (the image holds `1.0`). So:
milliseconds with a sub-microsecond fraction, from the CPU counter, unrelated
to the engine's millisecond tick and to `GetTime()`.
The `table`, `string` and `math` libraries have the same shape (the `table`
library's `luaL_reg` is at `0x00822D70` — see `Offsets.h`
`FUN_LUA_TABLE_INSERT`) and are not enumerated here. The short global
aliases (`tinsert`, `getn`, `strlen`, `format`, `floor`, …) are not registered
at all: an embedded Lua chunk at `.data 0x008722E8`, run by the same state
init, assigns them from the library tables (`tinsert = tab.insert`). A module
that registers over a library function must therefore re-bind its alias —
`Game::Lua::RegisterGlobalAlias`.
## Scope
The 54 global-function batches split into two phases:
* **Glue** (login screen): batches with call sites in `0x00458xxx..0x004736xx`.
Five tables, 109 functions. Available only before `EnterWorld`.
* **In-game**: everything else. 47 tables, 1029 functions (excluding Turtle).
These are what an in-world addon can call. (`PlaySound` and friends are
technically the glue Sound batch and become available again post-login
through other means.)
Frame methods are all in-game; the per-frame-type contexts are populated as
the FrameScript engine boots and stay live for the world session.
## In-game global functions — by category
The category labels reflect the function set; the table VAs are where each
batch lives in `.data`.
### Sound `[0x00835A50]` — 4
```
PlaySound PlayMusic PlaySoundFile StopMusic
```
### Chat & channels `[0x00843618]` — 50
```
SendChatMessage SendAddonMessage GetNumLaguages GetLanguageByIndex
GetDefaultLanguage DoEmote LoggingChat LoggingCombat JoinChannelByName
LeaveChannelByName ListChannelByName ListChannels GetChannelList
SetChannelPassword SetChannelOwner DisplayChannelOwner GetChannelName
ChannelModerator ChannelUnmoderator ChannelMute ChannelUnmute
ChannelInvite ChannelKick ChannelBan ChannelUnban
ChannelToggleAnnouncements ChannelModerate ChangeChatColor
ResetChatColors GetChatTypeIndex GetChatWindowInfo GetChatWindowMessages
GetChatWindowChannels AddChatWindowMessages RemoveChatWindowMessages
AddChatWindowChannel RemoveChatWindowChannel SetChatWindowName
SetChatWindowSize SetChatWindowColor SetChatWindowAlpha
SetChatWindowLocked SetChatWindowDocked SetChatWindowShown
EnumerateServerChannels RequestRaidInfo GetGuildRecruitmentMode
SetGuildRecruitmentMode GetNumSavedInstances GetSavedInstanceInfo
```
Note: `GetNumLaguages` is misspelled in the binary (sic).
### World map `[0x00845078]` — 23
```
GetMapContinents GetMapZones SetMapZoom SetMapToCurrentZone GetMapInfo
GetCurrentMapContinent GetCurrentMapZone ProcessMapClick UpdateMapHighlight
GetPlayerMapPosition GetCorpseMapPosition GetNumMapLandmarks
GetMapLandmarkInfo GetWorldLocMapPosition GetNumMapOverlays
GetMapOverlayInfo CreateWorldMapArrowFrame CreateMiniWorldMapArrowFrame
UpdateWorldMapArrowFrames PositionWorldMapArrowFrame
PositionMiniWorldMapArrowFrame ShowWorldMapArrowFrame
ShowMiniWorldMapArrowFrame
```
### Battlefields / PvP queue `[0x008457E0]` — 31
```
GetNumBattlefields GetBattlefieldInfo GetBattlefieldInstanceInfo
JoinBattlefield SetSelectedBattlefield GetSelectedBattlefield
AcceptBattlefieldPort GetBattlefieldStatus GetBattlefieldPortExpiration
GetBattlefieldInstanceExpiration GetBattlefieldInstanceRunTime
GetBattlefieldEstimatedWaitTime GetBattlefieldTimeWaited
CloseBattlefield ShowBattlefieldList RequestBattlefieldScoreData
GetNumBattlefieldScores GetBattlefieldScore GetBattlefieldWinner
SetBattlefieldScoreFaction LeaveBattlefield GetNumBattlefieldStats
GetBattlefieldStatInfo GetBattlefieldStatData RequestBattlefieldPositions
GetNumBattlefieldPositions GetBattlefieldPosition
GetNumBattlefieldFlagPositions GetBattlefieldFlagPosition
CanJoinBattlefieldAsGroup GetBattlefieldMapIconScale
```
### Mail `[0x00845EB0]` — 30
```
CloseMail ClearSendMail ClickSendMailItemButton SetSendMailMoney
GetSendMailMoney SetSendMailCOD GetSendMailCOD GetNumStationeries
GetStationeryInfo SelectStationery GetSelectedStationeryTexture
GetNumPackages GetPackageInfo SelectPackage GetSendMailItem
GetSendMailPrice SendMail CheckInbox GetInboxNumItems
GetInboxHeaderInfo GetInboxText GetInboxInvoiceInfo GetInboxItem
TakeInboxMoney TakeInboxItem TakeInboxTextItem ReturnInboxItem
DeleteInboxItem InboxItemCanDelete HasNewMail
```
### Spellbook `[0x00846648]` — 19
```
GetNumSpellTabs GetSpellTabInfo GetSpellTexture GetSpellName
GetSpellCooldown GetSpellAutocast ToggleSpellAutocast PickupSpell
CastSpell IsCurrentCast UpdateSpells PlayerHasSpells HasPetSpells
IsSpellPassive GetNumShapeshiftForms GetShapeshiftFormInfo
CastShapeshiftForm GetShapeshiftFormCooldown CastSpellByName
```
### Tutorials `[0x00846B04]` — 4
```
TutorialsEnabled FlagTutorial ClearTutorials ResetTutorials
```
### Key bindings `[0x00846C88]` — 9
```
GetNumBindings GetBinding SetBinding GetBindingKey GetBindingAction
RunBinding GetCurrentBindingSet LoadBindings SaveBindings
```
### Raid `[0x00847240]` — 16
```
GetNumRaidMembers GetRaidRosterInfo SetRaidRosterSelection
GetRaidRosterSelection IsRaidLeader IsRaidOfficer SetRaidSubgroup
SwapRaidSubgroup ConvertToRaid PromoteToAssistant DemoteAssistant
SetRaidTarget GetRaidTargetIndex DoReadyCheck ConfirmReadyCheck
CheckReadyCheckTime
```
### Pet `[0x008475A0]` — 28
```
PetHasActionBar GetPetActionInfo GetPetActionCooldown GetPetActionsUsable
IsPetAttackActive PickupPetAction TogglePetAutocast CastPetAction
PetPassiveMode PetDefensiveMode PetAggressiveMode PetWait PetFollow
PetAttack PetStopAttack PetAbandon PetDismiss PetRename
PetCanBeAbandoned PetCanBeRenamed GetPetTimeRemaining HasPetUI
GetPetLoyalty GetPetTrainingPoints GetPetExperience GetPetHappiness
GetPetFoodTypes GetPetIcon
```
### Trade `[0x008479F8]` — 14
```
CloseTrade ClickTradeButton ClickTargetTradeButton GetTradeTargetItemInfo
GetTradeTargetItemLink GetTradePlayerItemInfo GetTradePlayerItemLink
AcceptTrade CancelTradeAccept GetPlayerTradeMoney GetTargetTradeMoney
PickupTradeMoney AddTradeMoney SetTradeMoney
```
### Loot `[0x00847CF0]` — 16
```
SetLootPortrait GetNumLootItems GetLootSlotInfo GetLootSlotLink
LootSlotIsItem LootSlotIsCoin LootSlot CloseLoot IsFishingLoot
GetMasterLootCandidate GiveMasterLoot GetLootRollItemInfo
GetLootRollItemLink GetLootRollTimeLeft RollOnLoot ConfirmLootRoll
```
### World state UI `[0x00848414]` — 2
```
GetNumWorldStateUI GetWorldStateUIInfo
```
### Inventory & player items `[0x008484D0]` — 27
```
GetInventorySlotInfo GetInventoryItemTexture GetInventoryItemBroken
GetInventoryItemCount GetInventoryItemQuality GetInventoryItemCooldown
GetInventoryItemLink KeyRingButtonIDToInvSlotID PickupInventoryItem
UseInventoryItem IsInventoryItemLocked PutItemInBag PutItemInBackpack
PickupBagFromSlot CursorCanGoInSlot ShowInventorySellCursor
SetInventoryPortaitTexture GetGuildInfo GetInventoryAlertStatus
UpdateInventoryAlertStatus OffhandHasWeapon HasInspectHonorData
RequestInspectHonorData GetInspectHonorData ClearInspectPlayer
GetWeaponEnchantInfo HasWandEquipped
```
Note: `SetInventoryPortaitTexture` is misspelled in the binary (sic).
### Meeting Stone `[0x00848CE8]` — 3
```
IsInMeetingStoneQueue CancelMeetingStoneRequest GetMeetingStoneStatusText
```
### Pet stables `[0x00848DA0]` — 13
```
ClosePetStables StablePet UnstablePet BuyStableSlot GetNumStablePets
GetNumStableSlots GetStablePetInfo GetNextStableSlotCost ClickStablePet
PickupStablePet GetSelectedStablePet SetPetStablePaperdoll
GetStablePetFoodTypes
```
### Auction house `[0x008490A8]` — 23
```
CloseAuctionHouse GetAuctionHouseDepositRate CalculateAuctionDeposit
ClickAuctionSellItemButton GetAuctionSellItemInfo StartAuction
QueryAuctionItems GetOwnerAuctionItems GetBidderAuctionItems
GetNumAuctionItems GetAuctionItemInfo GetAuctionItemLink
GetAuctionItemTimeLeft PlaceAuctionBid GetAuctionItemClasses
GetAuctionItemSubClasses GetAuctionInvTypes CanSendAuctionQuery
SortAuctionItems SetSelectedAuctionItem GetSelectedAuctionItem
IsAuctionSortReversed CancelAuction
```
### Guild roster & ranks `[0x008496D8]` — 32
```
GetNumGuildMembers GetGuildRosterMOTD GetGuildRosterInfo
GetGuildRosterLastOnline GuildRosterSetPublicNote GuildRosterSetOfficerNote
SetGuildRosterSelection GetGuildRosterSelection CanGuildPromote
CanGuildDemote CanGuildInvite CanGuildRemove CanEditMOTD
CanEditPublicNote CanEditOfficerNote CanViewOfficerNote CanEditGuildInfo
SortGuildRoster SetGuildRosterShowOffline GetGuildRosterShowOffline
GuildControlGetNumRanks GuildControlGetRankName GuildControlSetRank
GuildControlGetRankFlags GuildControlSetRankFlag GuildControlSaveRank
GuildControlAddRank GuildControlDelRank CloseGuildRoster GuildRoster
GetGuildInfoText SetGuildInfoText
```
### Skills `[0x00849CF8]` — 13
```
GetNumSkillLines GetSkillLineInfo AbandonSkill CollapseSkillHeader
ExpandSkillHeader AddSkillUp RemoveSkillUp GetAdjustedSkillPoints
AcceptSkillUps CancelSkillUps BuySkillTier SetSelectedSkill
GetSelectedSkill
```
### Duel `[0x00849FA8]` — 4
```
StartDuel StartDuelUnit AcceptDuel CancelDuel
```
### Reputation / factions `[0x0084A0A8]` — 12
```
GetNumFactions GetFactionInfo GetWatchedFactionInfo SetWatchedFactionIndex
FactionToggleAtWar CollapseFactionHeader SetFactionInactive SetFactionActive
IsFactionInactive ExpandFactionHeader SetSelectedFaction GetSelectedFaction
```
### Trainer `[0x0084A3E0]` — 30
```
OpenTrainer CloseTrainer GetNumTrainerServices GetTrainerServiceInfo
SelectTrainerService IsTradeskillTrainer IsTalentTrainer
GetTrainerSelectionIndex GetTrainerGreetingText GetTrainerServiceIcon
GetTrainerServiceSkillLine GetTrainerServiceCost GetTrainerServiceLevelReq
GetTrainerServiceSkillReq GetTrainerServiceNumAbilityReq
GetTrainerServiceAbilityReq GetTrainerServiceStepReq
GetTrainerServiceDescription IsTrainerServiceSkillStep
IsTrainerServiceLearnSpell IsTrainerServiceTradeSkill
GetTrainerServiceStepIncrease BuyTrainerService SetTrainerServiceTypeFilter
SetTrainerSkillLineFilter GetTrainerServiceTypeFilter
GetTrainerSkillLineFilter GetTrainerSkillLines CollapseTrainerSkillLine
ExpandTrainerSkillLine
```
### Taxi `[0x0084ADA8]` — 14
```
SetTaxiMap NumTaxiNodes TaxiNodeName TaxiNodePosition TaxiNodeCost
TakeTaxiNode CloseTaxiMap TaxiNodeGetType TaxiNodeSetCurrent
TaxiGetSrcX TaxiGetSrcY TaxiGetDestX TaxiGetDestY GetNumRoutes
```
### Quest log `[0x0084B0F0]` — 34
```
GetNumQuestLogEntries GetQuestLogTitle SelectQuestLogEntry
GetQuestLogSelection SetAbandonQuest GetAbandonQuestName
GetAbandonQuestItems AbandonQuest IsUnitOnQuest GetQuestLogQuestText
GetNumQuestLeaderBoards GetQuestLogLeaderBoard GetQuestLogTimeLeft
IsCurrentQuestFailed GetNumQuestLogRewards GetNumQuestLogChoices
GetQuestLogRewardInfo GetQuestLogChoiceInfo GetQuestLogItemLink
GetQuestLogRewardMoney GetQuestLogRewardSpell GetQuestLogRequiredMoney
GetQuestLogPushable QuestLogPushQuest GetQuestTimers GetQuestIndexForTimer
CollapseQuestHeader ExpandQuestHeader GetQuestGreenRange
GetNumQuestWatches IsQuestWatched AddQuestWatch RemoveQuestWatch
GetQuestIndexForWatch
```
### Gossip `[0x0084B7E8]` — 8
```
GetGossipText GetGossipOptions GetGossipAvailableQuests
GetGossipActiveQuests SelectGossipOption SelectGossipAvailableQuest
SelectGossipActiveQuest CloseGossip
```
### Item text (books) `[0x0084BA00]` — 9
```
ItemTextGetItem ItemTextGetCreator ItemTextGetMaterial ItemTextGetPage
ItemTextGetText ItemTextHasNextPage ItemTextPrevPage ItemTextNextPage
CloseItemText
```
### Player buffs `[0x0084BB20]` — 8
```
GetPlayerBuff GetPlayerBuffTexture GetPlayerBuffDispelType
GetPlayerBuffApplications GetPlayerBuffTimeLeft CancelPlayerBuff
GetTrackingTexture CancelTrackingBuff
```
### Action bars `[0x0084BD10]` — 21
```
GetActionTexture GetActionCount GetActionCooldown GetActionAutocast
GetActionText HasAction UseAction PickupAction PlaceAction
IsAttackAction IsCurrentAction IsAutoRepeatAction IsUsableAction
IsConsumableAction IsEquippedAction IsActionInRange ActionHasRange
GetBonusBarOffset ChangeActionBarPage GetActionBarToggles SetActionBarToggles
```
### Party / LFG `[0x0084C170]` — 16
```
GetNumPartyMembers GetPartyMember GetPartyLeaderIndex IsPartyLeader
LeaveParty GetLootMethod SetLootMethod GetLootThreshold SetLootThreshold
GetLookingForGroup SetLookingForGroup LFGQuery GetNumLFGResults
GetLFGResults GetLFGTypes GetLFGTypeEntries
```
### Macros `[0x0084C990]` — 9
```
CreateMacro GetNumMacros GetMacroInfo DeleteMacro EditMacro
GetNumMacroIcons GetMacroIconInfo PickupMacro GetMacroIndexByName
```
### Talents `[0x0084CCF0]` — 6
```
GetNumTalentTabs GetTalentTabInfo GetNumTalents GetTalentInfo
GetTalentPrereqs LearnTalent
```
### Petition (guild charter, arena charter) `[0x0084CEA0]` — 8
```
ClosePetition GetPetitionInfo GetNumPetitionNames GetPetitionNameInfo
CanSignPetition SignPetition OfferPetition RenamePetition
```
### Guild registrar `[0x0084D00C]` — 5
```
CloseGuildRegistrar GetGuildCharterCost BuyGuildCharter
TurnInGuildCharter GetTabardInfo
```
### Tabard creation `[0x0084D0B4]` — 2
```
CloseTabardCreation GetTabardCreationCost
```
### Crafting (enchanting / beast training) `[0x0084D108]` — 19
```
CloseCraft GetCraftName GetCraftButtonToken GetCraftDisplaySkillLine
GetNumCrafts GetCraftInfo SelectCraft GetCraftSelectionIndex GetCraftIcon
GetCraftSkillLine GetCraftItemLink GetCraftNumReagents
GetCraftReagentInfo GetCraftReagentItemLink GetCraftSpellFocus
GetCraftDescription CollapseCraftSkillLine ExpandCraftSkillLine DoCraft
```
### Bank `[0x0084D5DC]` — 5
```
BankButtonIDToInvSlotID GetNumBankSlots GetBankSlotCost PurchaseSlot
CloseBankFrame
```
### Container / bags `[0x0084D688]` — 11
```
ContainerIDToInventoryID GetContainerNumSlots GetContainerItemInfo
GetContainerItemLink GetContainerItemCooldown PickupContainerItem
SplitContainerItem UseContainerItem ShowContainerSellCursor
SetBagPortaitTexture GetBagName
```
Note: `SetBagPortaitTexture` is misspelled in the binary (sic).
### Merchant `[0x0084DA28]` — 18
```
CloseMerchant GetMerchantNumItems GetMerchantItemInfo GetBuybackItemInfo
GetMerchantItemLink GetMerchantItemMaxStack PickupMerchantItem
BuyMerchantItem BuybackItem CanMerchantRepair ShowMerchantSellCursor
ShowBuybackSellCursor ShowRepairCursor HideRepairCursor InRepairMode
GetRepairAllCost RepairAllItems GetNumBuybackItems
```
### Tradeskills (professions) `[0x0084DDD0]` — 26
```
CloseTradeSkill GetNumTradeSkills GetTradeSkillInfo SelectTradeSkill
GetTradeSkillSelectionIndex GetTradeSkillCooldown GetTradeSkillIcon
GetTradeSkillNumMade GetTradeSkillLine GetTradeSkillItemStats
GetTradeSkillItemLink GetTradeSkillNumReagents GetTradeSkillReagentInfo
GetTradeSkillReagentItemLink GetTradeSkillTools GetTradeSkillSubClasses
GetTradeSkillInvSlots SetTradeSkillSubClassFilter GetTradeSkillSubClassFilter
SetTradeSkillInvSlotFilter GetTradeSkillInvSlotFilter
CollapseTradeSkillSubClass ExpandTradeSkillSubClass GetFirstTradeSkill
GetTradeskillRepeatCount DoTradeSkill
```
### Quest interaction (NPC quest dialog) `[0x0084E968]` — 31
```
CloseQuest GetTitleText GetGreetingText GetQuestText GetObjectiveText
GetProgressText GetRewardText GetNumAvailableQuests GetNumActiveQuests
GetAvailableTitle GetActiveTitle GetAvailableLevel GetActiveLevel
SelectAvailableQuest SelectActiveQuest AcceptQuest DeclineQuest
IsQuestCompletable CompleteQuest GetQuestReward GetRewardMoney
GetRewardSpell GetQuestMoneyToGet GetNumQuestRewards GetNumQuestChoices
GetNumQuestItems GetQuestItemInfo GetQuestItemLink QuestChooseRewardError
ConfirmAcceptQuest GetQuestBackgroundMaterial
```
### Camera `[0x0084F7A0]` — 21
```
CameraZoomIn CameraZoomOut MoveViewInStart MoveViewInStop
MoveViewOutStart MoveViewOutStop MoveViewLeftStart MoveViewLeftStop
MoveViewRightStart MoveViewRightStop MoveViewUpStart MoveViewUpStop
MoveViewDownStart MoveViewDownStop ToggleMouseMove SetView SaveView
ResetView NextView PrevView FlipCameraYaw
```
### Movement & mouselook `[0x008500B8]` — 26
```
Jump ToggleRun ToggleAutoRun MoveForwardStart MoveForwardStop
MoveBackwardStart MoveBackwardStop TurnLeftStart TurnLeftStop
TurnRightStart TurnRightStop StrafeLeftStart StrafeLeftStop
StrafeRightStart StrafeRightStop PitchUpStart PitchUpStop PitchDownStart
PitchDownStop TurnOrActionStart TurnOrActionStop CameraOrSelectOrMoveStart
CameraOrSelectOrMoveStop MouselookStart MouselookStop IsMouselooking
```
### Time / file I/O `[0x008503F4]` — 6
```
GetTime GetGameTime ConsoleExec ReadFile DeleteFile AppendToFile
```
### Unit & PvP `[0x00850438]` — 83
```
UnitExists UnitIsVisible UnitIsUnit UnitIsPlayer UnitIsCorpse
UnitIsPartyLeader UnitInParty UnitPlayerOrPetInParty UnitInRaid
UnitPlayerOrPetInRaid UnitPlayerControlled UnitIsPVP UnitIsPVPFreeForAll
UnitFactionGroup UnitReaction UnitIsEnemy UnitIsFriend UnitCanCooperate
UnitCanAssist UnitCanAttack UnitIsCharmed UnitIsPlusMob
UnitClassification UnitName UnitPVPName UnitXP UnitXPMax UnitHealth
UnitHealthMax UnitMana UnitManaMax UnitPowerType UnitOnTaxi UnitIsDead
UnitIsGhost UnitIsDeadOrGhost UnitIsConnected UnitAffectingCombat
UnitSex UnitLevel GetMoney UnitRace UnitClass UnitResistance UnitStat
UnitAttackBothHands UnitDamage UnitRangedDamage UnitRangedAttack
UnitAttackSpeed UnitAttackPower UnitRangedAttackPower UnitDefense
UnitArmor UnitCharacterPoints UnitBuff UnitDebuff UnitIsTapped
UnitIsTappedByPlayer UnitIsTrivial UnitIsCivilian UnitHasRelicSlot
SetPortraitTexture HasFullControl GetComboPoints IsInGuild IsGuildLeader
IsResting GetDodgeChance GetBlockChance GetParryChance UnitCreatureType
UnitCreatureFamily GetResSicknessDuration GetPVPSessionStats
GetPVPYesterdayStats GetPVPThisWeekStats GetPVPLastWeekStats
GetPVPLifetimeStats UnitPVPRank GetPVPRankInfo GetPVPRankProgress
GetInspectPVPRankProgress
```
### Friends / Who / Ignore `[0x0085D830]` — 19
```
GetNumFriends GetFriendInfo SetSelectedFriend GetSelectedFriend
AddFriend RemoveFriend ShowFriends GetNumIgnores GetIgnoreName
SetSelectedIgnore GetSelectedIgnore AddOrDelIgnore AddIgnore DelIgnore
SendWho GetNumWhoResults GetWhoInfo SetWhoToUI SortWho
```
### Spell targeting `[0x0086F950]` — 5
```
SpellIsTargeting SpellCanTargetUnit SpellTargetUnit SpellStopTargeting
SpellStopCasting
```
### Frame creation (FrameScript core) `[0x00872E74]` — 4
```
GetNumFrames EnumerateFrames CreateFont CreateFrame
```
### Big "miscellaneous" batch `[0x0083DE68]` — 216
This is the firehose — everything else FrameXML touches. Registered by the
main `FUN_LOAD_SCRIPT_FUNCTIONS` loop at `0x00490282`.
```
FrameXML_Debug GetBuildInfo ReloadUI RegisterForSave SetLayoutMode
IsShiftKeyDown IsControlKeyDown IsAltKeyDown SetConsoleKey Screenshot
GetFramerate TogglePerformanceDisplay TogglePerformanceValues
ResetPerformanceValues GetDebugStats RegisterCVar GetCVar SetCVar
GetCVarDefault GetWorldDetail SetWorldDetail GetWaterDetail SetWaterDetail
GetFarclip SetFarclip GetTerrainMip SetTerrainMip GetDoodadAnim
SetDoodadAnim GetTexLodBias SetTexLodBias SetBaseMip GetBaseMip
GetGamma SetGamma ToggleTris TogglePortals ToggleCollision
ToggleCollisionDisplay TogglePlayerBounds Stuck Logout Quit
ShowNameplates HideNameplates ShowFriendNameplates HideFriendNameplates
SetCursor ClearCursor CursorHasItem CursorHasSpell CursorHasMoney
EquipCursorItem DeleteCursorItem EquipPendingItem CancelPendingEquip
TargetUnit TargetNearestEnemy TargetNearestFriend TargetNearestPartyMember
TargetNearestRaidMember TargetLastTarget TargetLastEnemy AttackTarget
AssistUnit AssistByName TargetByName FollowUnit FollowByName
ClearTarget AutoEquipCursorItem ToggleSheath GetZoneText GetRealZoneText
GetSubZoneText GetMinimapZoneText InitiateTrade CanInspect NotifyInspect
InviteToParty InviteByName UninviteFromParty UninviteFromRaid
UninviteByName PromoteToPartyLeader PromoteByName RequestTimePlayed
RepopMe AcceptResurrect DeclineResurrect ResurrectHasSickness
ResurrectHasTimer BeginTrade CancelTrade AcceptGroup DeclineGroup
AcceptGuild DeclineGuild CancelLogout ForceLogout ForceQuit
GetCursorMoney DropCursorMoney PickupPlayerMoney ShowInspectCursor
ResetCursor HasSoulstone UseSoulstone HasKey GuildInviteByName
GuildUninviteByName GuildPromoteByName GuildDemoteByName
GuildSetLeaderByName GuildSetMOTD GuildLeave GuildDisband GuildInfo
GetScreenWidth GetScreenHeight GetDamageBonusStat GetReleaseTimeRemaining
GetCorpseRecoveryDelay GetInstanceBootTimeRemaining GetSummonConfirmTimeLeft
GetSummonConfirmSummoner GetSummonConfirmAreaName ConfirmSummon
GetCursorPosition GetNetStats SitOrStand StopCinematic RunScript
CheckInteractDistance GetScreenResolutions GetCurrentResolution
SetScreenResolution GetRefreshRates SetupFullscreenScale
GetMultisampleFormats GetCurrentMultisampleFormat SetMultisampleFormat
RandomRoll OpeningCinematic InCinematic IsWindowsClient IsMacClient
IsLinuxClient GetGMTicket NewGMTicket UpdateGMTicket DeleteGMTicket
GMSurveyQuestion GMSurveyAnswerSubmit GMSurveyCommentSubmit GMSurveySubmit
GetGMStatus AcceptXPLoss CheckSpiritHealerDist CheckTalentMasterDist
CheckPetUntrainerDist CheckBinderDist RetrieveCorpse BindEnchant
ReplaceEnchant ReplaceTradeEnchant NotWhileDeadError GetRestState
GetXPExhaustion GetTimeToWellRested GMRequestPlayerInfo GetCoinIcon
GetZonePVPInfo TogglePVP ConfirmBindOnUse SetPortraitToTexture GetLocale
GetGMTicketCategories DropItemOnUnit RestartGx RestoreVideoDefaults
GetBindLocation GetVideoCaps ConfirmTalentWipe ConfirmPetUnlearn
ConfirmBinder ShowingHelm ShowingCloak ShowHelm ShowCloak
SetEuropeanNumbers GetAreaSpiritHealerTime AcceptAreaSpiritHeal
CancelAreaSpiritHeal GetMouseFocus GetRealmName GetItemQualityColor
GetItemInfo GetNumAddOns GetAddOnInfo GetAddOnMetadata GetAddOnDependencies
EnableAddOn EnableAllAddOns DisableAddOn DisableAllAddOns
ResetDisabledAddOns IsAddOnLoadOnDemand IsAddOnLoaded LoadAddOn
PartialPlayTime NoPlayTime GetBillingTimeRested ResetInstances
CanShowResetInstances IsInInstance
```
## Glue (login screen) global functions
These are only registered while the game is at the login/character-select
screen. Addons running in-world cannot reach them. Listed for completeness.
### Glue main `[0x008373B8]` — 60
```
GetBuildInfo GetLocale GetSavedAccountName SetSavedAccountName
SetCurrentScreen QuitGame PlayGlueMusic PlayCreditsMusic StopGlueMusic
GetMovieResolution GetScreenWidth GetScreenHeight LaunchURL
ShowTOSNotice TOSAccepted AcceptTOS ShowEULANotice EULAAccepted
AcceptEULA ShowScanningNotice ScanningAccepted AcceptScanning
ShowContestNotice ContestAccepted AcceptContest DefaultServerLogin
StatusDialogClick GetServerName DisconnectFromServer IsConnectedToServer
EnterWorld Screenshot PatchDownloadProgress PatchDownloadCancel
PatchDownloadApply GetNumAddOns GetAddOnInfo LaunchAddOnURL
GetAddOnDependencies GetAddOnEnableState EnableAddOn EnableAllAddOns
DisableAddOn DisableAllAddOns SaveAddOns ResetAddOns
IsAddonVersionCheckEnabled SetAddonVersionCheck GetScriptMemory
SetScriptMemory GetCursorPosition ShowCursor HideCursor
SetMovieSubtitles GetMovieSubtitles GetBillingTimeRemaining GetBillingPlan
GetBillingTimeRested SurveyNotificationDone PINEntered
```
### Realm list `[0x00837EA0]` — 10
```
RequestRealmList CancelRealmListQuery GetNumRealms GetRealmInfo
ChangeRealm GetRealmCategories SetPreferredInfo SortRealms
GetSelectedCategory RealmListDialogCancelled
```
### Character creation `[0x008380F8]` — 24
```
SetCharCustomizeFrame SetCharCustomizeBackground ResetCharCustomize
GetNameForRace GetFactionForRace GetAvailableRaces GetClassesForRace
GetHairCustomization GetFacialHairCustomization GetSelectedRace
GetSelectedSex GetSelectedClass SetSelectedRace SetSelectedSex
SetSelectedClass UpdateCustomizationBackground UpdateCustomizationScene
HasCharCustomization CycleCharCustomization RandomizeCharCustomization
GetCharacterCreateFacing SetCharacterCreateFacing GetRandomName
CreateCharacter
```
### Character select `[0x00838578]` — 11
```
SetCharSelectModelFrame SetCharSelectBackground GetCharacterListUpdate
GetNumCharacters GetCharacterInfo SelectCharacter DeleteCharacter
RenameCharacter UpdateSelectionCustomizationScene GetCharacterSelectFacing
SetCharacterSelectFacing
```
## Frame types & their methods
23 method tables registered with the runtime dispatcher (iterator at
`0x00701D80`). Identification by method-set is unambiguous; for the four
in-game types registered alongside `LoadScriptFunctions` the type name
literally precedes the table in `.data` and is confirmed.
### `LootButton` — 1 method `[table 0x00847CE4, ctx 0x00B71B64]` ✓
```
SetSlot
```
Confirmed: `"LootButton"` string at `0x00843414` is referenced 4 bytes before the table base.
### `Minimap` — 10 `[table 0x0084C538, ctx 0x00BC81B0]` ✓
```
SetMaskTexture SetIconTexture SetBlipTexture SetArrowModel SetPlayerModel
GetZoomLevels GetZoom SetZoom PingLocation GetPingPosition
```
Confirmed: `"Minimap"` string at `0x00843448` is referenced near the table.
### `TabardModel` — 10 `[table 0x0084EE40, ctx 0x00BE089C]` ✓
```
InitializeTabardColors Save CycleVariation GetUpperBackgroundFileName
GetLowerBackgroundFileName GetUpperEmblemFileName GetLowerEmblemFileName
GetUpperEmblemTexture GetLowerEmblemTexture CanSaveTabardNow
```
### `DressUpModel` — 3 `[table 0x0084F190, ctx 0x00BE0938]` ✓
```
Undress Dress TryOn
```
### `PlayerModel` — 3 `[table 0x0084F1FC, ctx 0x00BE09D8]` ✓
```
SetUnit RefreshUnit SetRotation
```
### `GameTooltip` — 46 `[table 0x00854198, ctx 0x00C0CF20]` ✓
```
AddFontStrings SetMinimumWidth SetPadding IsOwned SetOwner GetAnchorType
ClearLines AddLine AddDoubleLine SetText AppendText FadeOut SetHyperlink
SetAction SetPetAction SetShapeshift SetPlayerBuff SetTrackingSpell
SetSpell SetInventoryItem SetLootItem SetQuestItem SetQuestLogItem
SetTrainerService SetTradeSkillItem SetCraftItem SetCraftSpell
SetMerchantItem SetTradePlayerItem SetTradeTargetItem SetBagItem SetUnit
SetUnitBuff SetUnitDebuff SetTalent SetSendMailItem SetInboxItem
SetAuctionSellItem SetAuctionItem NumLines SetQuestRewardSpell
SetQuestLogRewardSpell SetAuctionCompareItem SetMerchantCompareItem
SetBuybackItem SetLootRollItem
```
### `Model` — 23 `[table 0x00878948, ctx 0x00CF0C8C]`
```
SetModel GetModel ClearModel SetPosition SetFacing SetModelScale
SetSequence SetSequenceTime SetCamera SetLight GetLight GetPosition
GetFacing GetModelScale AdvanceTime ReplaceIconTexture SetFogColor
GetFogColor SetFogNear GetFogNear SetFogFar GetFogFar ClearFog
```
### `Frame` — 68 `[table 0x00878EC0, ctx 0x00CF4D38]`
```
GetFrameType IsFrameType GetTitleRegion CreateTitleRegion CreateTexture
CreateFontString GetNumRegions GetRegions GetNumChildren GetChildren
GetFrameStrata SetFrameStrata GetFrameLevel SetFrameLevel HasScript
GetScript SetScript RegisterEvent UnregisterEvent RegisterAllEvents
UnregisterAllEvents GetAlpha SetAlpha GetEffectiveScale GetScale SetScale
GetID SetID SetToplevel IsToplevel EnableDrawLayer DisableDrawLayer
Show Hide IsVisible IsShown Raise Lower GetHitRectInsets
SetHitRectInsets GetMinResize SetMinResize GetMaxResize SetMaxResize
SetMovable IsMovable SetResizable IsResizable StartMoving StartSizing
StopMovingOrSizing SetUserPlaced IsUserPlaced SetClampedToScreen
IsClampedToScreen RegisterForDrag EnableKeyboard IsKeyboardEnabled
EnableMouse IsMouseEnabled EnableMouseWheel IsMouseWheelEnabled
GetBackdrop SetBackdrop GetBackdropColor SetBackdropColor
GetBackdropBorderColor SetBackdropBorderColor
```
### `Button` — 39 `[table 0x00879D00, ctx 0x00CF4E14]`
```
Enable Disable IsEnabled GetButtonState SetButtonState SetTextFontObject
GetTextFontObject SetDisabledFontObject GetDisabledFontObject
SetHighlightFontObject GetHighlightFontObject SetFont GetFont
SetFontString GetFontString SetText GetText SetTextColor GetTextColor
SetDisabledTextColor GetDisabledTextColor SetHighlightTextColor
GetHighlightTextColor SetNormalTexture GetNormalTexture SetPushedTexture
GetPushedTexture SetDisabledTexture GetDisabledTexture SetHighlightTexture
GetHighlightTexture SetPushedTextOffset GetPushedTextOffset GetTextWidth
GetTextHeight RegisterForClicks Click LockHighlight UnlockHighlight
```
### `MovieFrame` — 3 `[table 0x0087AB4C, ctx 0x00CF512C]`
```
StartMovie StopMovie EnableSubtitles
```
### `ColorSelect` — 12 `[table 0x0087ABB0, ctx 0x00CF5178]`
```
GetColorWheelTexture SetColorWheelTexture GetColorWheelThumbTexture
SetColorWheelThumbTexture GetColorValueTexture SetColorValueTexture
GetColorValueThumbTexture SetColorValueThumbTexture SetColorHSV GetColorHSV
SetColorRGB GetColorRGB
```
### `StatusBar` — 10 `[table 0x0087B010, ctx 0x00CF51CC]`
```
GetOrientation SetOrientation GetMinMaxValues SetMinMaxValues GetValue
SetValue GetStatusBarTexture SetStatusBarTexture GetStatusBarColor
SetStatusBarColor
```
### `Slider` — 10 `[table 0x0087B260, ctx 0x00CF5208]`
```
GetThumbTexture SetThumbTexture GetOrientation SetOrientation
GetMinMaxValues SetMinMaxValues GetValue SetValue GetValueStep
SetValueStep
```
### `ScrollFrame` — 9 `[table 0x0087B3C0, ctx 0x00CF5250]`
```
SetScrollChild GetScrollChild SetHorizontalScroll SetVerticalScroll
GetHorizontalScroll GetVerticalScroll GetHorizontalScrollRange
GetVerticalScrollRange UpdateScrollChildRect
```
### `ScrollingMessageFrame` — 40 `[table 0x0087B5C0, ctx 0x00CF5294]`
```
SetFontObject GetFontObject SetFont GetFont SetTextColor GetTextColor
SetShadowColor GetShadowColor SetShadowOffset GetShadowOffset SetSpacing
GetSpacing SetJustifyH GetJustifyH SetJustifyV GetJustifyV AddMessage
ScrollUp ScrollDown PageUp PageDown ScrollToTop ScrollToBottom
SetScrollFromBottom AtTop AtBottom UpdateColorByID GetNumMessages
GetNumLinesDisplayed GetCurrentScroll GetCurrentLine GetMaxLines
SetMaxLines SetFading GetFading SetTimeVisible GetTimeVisible
SetFadeDuration GetFadeDuration Clear
```
### `MessageFrame` — 26 `[table 0x0087B960, ctx 0x00CF52DC]`
```
SetFontObject GetFontObject SetFont GetFont SetTextColor GetTextColor
SetShadowColor GetShadowColor SetShadowOffset GetShadowOffset SetSpacing
GetSpacing SetJustifyH GetJustifyH SetJustifyV GetJustifyV SetInsertMode
GetInsertMode SetFading GetFading SetTimeVisible GetTimeVisible
SetFadeDuration GetFadeDuration AddMessage Clear
```
### `SimpleHTML` — 19 `[table 0x0087BA80, ctx 0x00CF5328]`
```
SetFontObject GetFontObject SetFont GetFont SetTextColor GetTextColor
SetShadowColor GetShadowColor SetShadowOffset GetShadowOffset SetSpacing
GetSpacing SetJustifyH GetJustifyH SetJustifyV GetJustifyV SetText
SetHyperlinkFormat GetHyperlinkFormat
```
### `EditBox` — 48 `[table 0x0087BB68, ctx 0x00CF5378]`
```
SetFontObject GetFontObject SetFont GetFont SetTextColor GetTextColor
SetShadowColor GetShadowColor SetShadowOffset GetShadowOffset SetSpacing
GetSpacing SetJustifyH GetJustifyH SetJustifyV GetJustifyV SetAutoFocus
IsAutoFocus SetMultiLine IsMultiLine SetNumeric IsNumeric SetPassword
IsPassword SetBlinkSpeed GetBlinkSpeed Insert SetText GetText SetNumber
GetNumber HighlightText AddHistoryLine SetTextInsets GetTextInsets
SetFocus ClearFocus SetMaxBytes GetMaxBytes SetMaxLetters GetMaxLetters
GetNumLetters GetHistoryLines SetHistoryLines GetInputLanguage
ToggleInputLanguage SetAltArrowKeyMode GetAltArrowKeyMode
```
### `CheckButton` — 6 `[table 0x0087BF74, ctx 0x00CF53B4]`
```
SetChecked GetChecked GetCheckedTexture SetCheckedTexture
GetDisabledCheckedTexture SetDisabledCheckedTexture
```
### `Texture` — 22 `[table 0x0087C128, ctx 0x00CF5434]`
```
GetDrawLayer SetDrawLayer GetBlendMode SetBlendMode GetVertexColor
SetVertexColor SetGradient SetGradientAlpha SetAlpha GetAlpha Show Hide
IsVisible IsShown GetTexture SetTexture GetTexCoord SetTexCoord
SetTexCoordModifiesRect GetTexCoordModifiesRect SetDesaturated IsDesaturated
```
### `FontString` — 32 `[table 0x0087C1D8, ctx 0x00CF5400]`
```
GetDrawLayer SetDrawLayer SetVertexColor GetAlpha SetAlpha SetAlphaGradient
Show Hide IsVisible IsShown GetFontObject SetFontObject GetFont SetFont
GetText SetText GetTextColor SetTextColor GetShadowColor SetShadowColor
GetShadowOffset SetShadowOffset GetSpacing SetSpacing SetTextHeight
GetStringWidth GetJustifyH SetJustifyH GetJustifyV SetJustifyV
SetNonSpaceWrap CanNonSpaceWrap
```
### `Font` (FontInstance) — 22 `[table 0x0087C7C8, ctx 0x00CF546C]`
```
GetObjectType IsObjectType GetName SetFontObject GetFontObject
CopyFontObject SetFont GetFont SetAlpha GetAlpha SetTextColor GetTextColor
SetShadowColor GetShadowColor SetShadowOffset GetShadowOffset SetSpacing
GetSpacing SetJustifyH GetJustifyH SetJustifyV GetJustifyV
```
### `Region` (LayoutFrame base) — 19 `[table 0x0087C9B8, ctx 0x00CF54B4]`
```
GetObjectType IsObjectType GetName GetParent SetParent GetCenter GetLeft
GetRight GetTop GetBottom GetWidth SetWidth GetHeight SetHeight
GetNumPoints GetPoint SetPoint SetAllPoints ClearAllPoints
```
## Inheritance
Each method table is a flat namespace; the dispatcher walks a per-type
context. Vanilla still has a class hierarchy though, so a `:GetWidth()` call
on a `Frame` resolves through `Region`. Educated reading of the contexts:
```
Region ; core layout (GetWidth, SetPoint, ...)
├── Frame ; events, scripts, scale
│ ├── Button
│ │ └── CheckButton
│ ├── EditBox
│ ├── Slider
│ ├── StatusBar
│ ├── ScrollFrame
│ ├── ScrollingMessageFrame
│ ├── MessageFrame
│ ├── SimpleHTML
│ ├── ColorSelect
│ ├── MovieFrame
│ ├── Model
│ │ ├── PlayerModel
│ │ ├── DressUpModel
│ │ └── TabardModel
│ ├── Minimap
│ ├── GameTooltip
│ └── LootButton ; (probably extends Button)
├── LayeredRegion (visual) ; not visible as own table here
│ ├── Texture
│ └── FontString
└── FontInstance ; the FontString font config
WorldFrame ; type name exists, no methods of its own
```
The exact parent linkage between contexts isn't proven from this scan —
verifying would require disassembling the dispatcher at `0x005368D0`.
## Rough numbers
| Surface | Tables | Entries |
|-------------------|--------|---------|
| Globals (in-game) | 47 | 1029 |
| Globals (glue) | 5 | 109 |
| Frame methods | 23 | 481 |
| **Total** | **75** | **1619** |
(54 register-call sites and 1153 entries in the binary, minus the 2 / 15
Turtle additions.)
## How this was extracted
Methodology, for whoever has to redo this when Turtle ships another build:
1. Locate `FrameScript_RegisterFunction` (`0x00704120`) — verified by reading the
prologue and finding the LUA_GLOBALSINDEX (`-10001 = 0xFFFFD8EF`) constant
in a tail call.
2. Scan all of `.text` for `E8` calls to that VA. Every hit is a registration
site. (54 in this build.)
3. For each call site, recognise the canonical loop pattern (`56 33 F6 8B 96 …
8B 8E … E8 … 83 C6 08 [81|83] FE … 72 …`) and extract the table base from
`mov ecx, [esi+disp32]` and the row count from the `cmp` immediate. Both
8-bit and 32-bit `cmp` forms exist; handle both.
4. Walk each table reading 8-byte `{name, func}` records.
5. For the iterator at `0x00701D80`, do the same: scan `.text` for callers
(23 sites), extract `ecx` (table), `edx` (count), and the pushed context.
6. Frame-type identification: confirmed where a `char *typeName` pointer lives
in `.data` immediately before the method table. Otherwise inferred from
the method set, which is unambiguous for every standard widget.
Raw extracted dumps are kept alongside this doc as `raw_globals.txt` and
`raw_methods.txt` for cross-checking VAs.