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.
40 KiB
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:
; 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).
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:
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 beforeEnterWorld. - In-game: everything else. 47 tables, 1029 functions (excluding Turtle).
These are what an in-world addon can call. (
PlaySoundand 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:
- Locate
FrameScript_RegisterFunction(0x00704120) — verified by reading the prologue and finding the LUA_GLOBALSINDEX (-10001 = 0xFFFFD8EF) constant in a tail call. - Scan all of
.textforE8calls to that VA. Every hit is a registration site. (54 in this build.) - 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 frommov ecx, [esi+disp32]and the row count from thecmpimmediate. Both 8-bit and 32-bitcmpforms exist; handle both. - Walk each table reading 8-byte
{name, func}records. - For the iterator at
0x00701D80, do the same: scan.textfor callers (23 sites), extractecx(table),edx(count), and the pushed context. - Frame-type identification: confirmed where a
char *typeNamepointer lives in.dataimmediately 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.