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

40 KiB
Raw Permalink Blame History

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 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.