Files
benilla-octo/docs/classic-api-functions.md
T
gromandClaude Opus 5 81d96af35d Everwood: the HD/OctoWoW line of benilla, imported onto upstream
This checkout had no git history at all, so this one commit carries the whole
of the Everwood work as a single import on top of chairmanpow/benilla-octo's
`main` (706cd71). The two trees have genuinely diverged — each has files the
other does not — so this is a fork point, not a catch-up.

Today's work, which is the reason a baseline exists at all:

- Booth previews no longer cast world shadows (`NO_BOOTH_SHADOW`). Portrait
  characters were entering the sun's shadow cascades, so every skinned-rig
  shadow specialization compiled live mid-frame; the hitch detector logged
  "main thread blocked 1316 ms" beside a `compiled LIVE` warning. This was
  the Fashion/Tmog stutter.
- Per-pane dress-up: each `DressUpModel` pane assembles and stages its own
  tried-on look instead of every pane mirroring the live player.
- Item template cache is append-only JSONL written on the IO pool, replacing
  an 11.6 MB whole-map JSON rewrite on the main thread every 10 s.
- `WOW_SYSTEM_TIMING` rebuilt per-thread: it took 2 mutexes per system enter
  and 4 per exit, costing 15 ms a frame (590 fps -> 60) and corrupting the
  measurements it was taken to produce.
- The visibility-churn sweep moved to its own `WOW_FLASH_CHURN` switch, so a
  frame-cost reading no longer pays 2.7 ms a frame for it.

Local state (`benilla-config/`, `logs/`, `target/`) is excluded by the
existing .gitignore; the account credential it holds is not in this commit.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SgstFWtn1RxEJ5kVrpgYwn
2026-10-15 15:01:14 -06:00

422 lines
22 KiB
Markdown

# ClassicAPI function inventory
A namespace-by-namespace list of every function `brues-code/ClassicAPI` documents in its own
`docs/API.md`, fetched 2026-10-05 for `docs/ADDON_COMPAT.md`'s ClassicAPI tracking. This is the
checklist for porting it into `crates/benilla-ui/src/script/compat/classic_api.rs` — check items
off there as they land; this file is the source list, not the status (status lives in
`ADDON_COMPAT.md`, one line per namespace, not per function, so it stays scannable).
Re-fetch `docs/API.md` from the upstream repo before resuming this work — this is a point-in-time
copy of names and one-line summaries, not argument types or behavior; the upstream file is still
the authoritative spec for implementing any one of these.
**Already free, no porting needed:** parsing Lua 5.1 *syntax* (not stdlib — see
`classic_api.rs`'s own doc comment on the stdlib/`lua50.rs` collision) covers the `Lua` namespace's
syntax-level items. `strsplit`/`strjoin`/`strtrim`(as `trim`)/`wipe` already exist as benilla
globals for unrelated reasons (TurtleWoW FrameXML compat, see `reference_surface.rs`'s exception
list) — the `Lua` namespace entries below for those four are therefore also already satisfied.
**Built so far** (per-namespace status, including what each one skipped and why, is
`docs/ADDON_COMPAT.md`'s ClassicAPI section — one row per namespace):
- `Unit`: `UnitGUID`, `UnitTokenFromGUID`.
- `Time`: `C_Timer.After`/`NewTimer`/`NewTicker`.
- `Container`: all of `C_Container.*` but `GetContainerItemCharges`/`GetContainerItemRepairCost`/
`GetContainerItemQuestInfo`/`GetContainerItemEquipmentSetInfo`/`IsContainerItemOpenable`, which
honestly answer nil/false.
- `UnitAuras`: all of `C_UnitAuras.*`; the two `Register*` hooks accept and discard.
- `CreatureInfo`: `GetRaceInfo`, `GetFactionInfo`, `GetClassInfo`, `GetCreatureID`. The two race getters read the
player's own `ChrRaces.dbc` through a new app→VM feed, not a table frozen into this client —
which is what makes OctoWoW's row 10 read **"High Elf"** rather than Blizzard's "Blood Elf"
while `clientFileString` stays `"BloodElf"` for the art paths. `GetRaceInfo` must keep answering
nil past the last race: pfUI walks until nil and an always-non-nil answer hangs the load.
- `State`: `IsSwimming`, `IsMounted`, `IsIndoors`, `IsOutdoors`, `IsFalling`,
`GetShapeshiftFormID`, `IsInGroup`, `IsInRaid`.
- `Spell`: 15 of ~45 (`DoesSpellExist`, the name/texture/subtext/info getters, `IsSpellPassive`,
`IsSpellKnown`, `IsCurrentSpell`, `GetSpellCooldown`, `IsSpellUsable`, `GetSchoolString`,
`CanDualWield`, `CastAtCursor`, `CastAtUnit`, `CancelSpellByID`). The five display getters read
`Spell.dbc` through the host probe, so they answer for any shipped spell; the predicates read the
player's book, which is the right source for them.
- `SpellBook`: 5 of ~19 (`FindSpellBookSlotByID`, `GetSpellBookItemInfo`,
`GetNumSpellBookSkillLines`, `GetSpellBookSkillLineInfo`, `GetSpellBookItemSkillLineIndex`).
- `ColorUtil`: all 8 of `C_ColorUtil.*` (pure maths + the `|c` escape builders).
- `ClassColor`: `C_ClassColor.GetClassColor`, over FrameXML's own `RAID_CLASS_COLORS`.
- `Expansion`: all 3.
- `Input`: 7 of 9 — the six sided modifier getters (each answering the combined bit the engine
tracks) and `IsModifierKeyDown`; `IsMouseButtonDown`/`GetMouseButtonClicked` have no honest
backing state.
- `Lua`: the additive half only — `table.count`, `Mixin`, `CreateFromMixins`, `strreplace`.
The `lua50.rs`-nilled 5.1 stdlib stays nilled, and so does `strrev` (`tests/stdlib.rs` pins it),
by the deferred decision above.
- `Currency`: `C_CurrencyInfo.GetCoinTextureString`, delegating to FrameXML's own.
- `Events`: `GetFramesRegisteredForEvent`; `C_EventUtils.IsEventValid` has no valid-event set.
- `System`: `GetPhysicalScreenSize` (logical rect, not device pixels); no `CopyToClipboard`.
- `Combat`: `InCombatLockdown` (always false, correctly).
- `Hooks`: `hooksecurefunc`, both forms — chains, passes the original's returns through, and
isolates a hook's error from the call it wrapped.
- `Frame` (widget **methods**, not globals): `SetShown`, `GetSize`/`SetSize`, `GetRect`,
`SetFormattedText`, `HookScript`, `IsEventRegistered`, `GetEffectiveAlpha`, and the four
`*Attribute` verbs as a plain per-frame store. The mask/atlas families, the secure-template
drivers and the text-measurement getters are skipped with reasons.
- `Quest`: 8 of ~13 `C_QuestLog.*` (the index↔questID mapping, `GetInfo`/`GetQuestLogTitle`,
`IsOnQuest`/`IsUnitOnQuest`, `GetNumQuestObjectives`); the four standalone-cache probes and the
bare `GetQuestLogLeaderBoardID` have no data behind them.
- `Faction`: all 3 bare id-keyed globals + 11 of 12 `C_Reputation.*`; only
`GetLastStandingChange` has no record to read. Answers for *listed* factions (no DBC here).
- `FriendList`: 8 of 13 `C_FriendList.*`; the notes pair and the two guid-keyed predicates have no
backing data.
- `Gossip`: all 11 of `C_GossipInfo.*` (selection stays index-keyed — 1.12 sends no option id).
- `MerchantFrame`: 3 real of 6 `C_MerchantFrame.*`, the other 3 honest constants (refunds and
one-click junk sale are later-era features).
- `Mail`: both link getters — which also closes SuperWoW's own pair.
- `CVar`: all 8 of `C_CVar.*`. `SetTempCVar`/`RemoveTempCVar` are genuinely non-persisting
(`CvarSlot::temp_original` + the snapshot), not just live-for-Lua.
- `NamePlate`: all 4 of `C_NamePlate.*`, over the existing plate pool.
- `Macro`: `C_Macro.GetMacroIcon`/`CreateMacro`/`EditMacro`. `GetMacroSpell`/`GetMacroItem`/
`StopMacro`/`SetMacroDisplay` and the four `Get*MacroIcons` need directive resolution, macro
execution, or icon provenance that does not exist — see `docs/ADDON_COMPAT.md`.
- `Action`: `GetActionInfo`.
- `Item`: 37 of ~55 `C_Item.*` — the identity/data/getter/predicate families over the one item
template cache, with `ItemLocation` accepted as the plain `{bagID,slotIndex}` /
`{equipmentSlotIndex}` table. The guid, item-level, item-stat and lock families are skipped with
reasons. **`ItemLocation` itself now exists** as a real mixin
(`compat/classic_api/item_location.rs`) with `CreateFromBagAndSlot`/`CreateFromEquipmentSlot`/
`CreateEmpty` and the whole `ItemLocationMixin`; the plain table still works, because the mixin
hands out exactly that table with methods copied on. `GetItemUniquenessByID` stays out: the fact
(`max_count`) is here but upstream's return shape is not, and the two candidate shapes behave
differently — `docs/ADDON_COMPAT.md` has the argument.
- `Map`: 4 of 27 `C_Map.*` — `GetMapWorldSize`, `GetMapAreaIDs`, `GetMapOverlays`, `GetAreas`.
The first three read the world-map catalog the app already pushes, no new feed; `GetMapOverlays`
answers **every** shipped overlay row, explored or not, which is what separates it from the stock
`GetNumMapOverlays`/`GetMapOverlayInfo` pair. `GetAreas` is the whole `AreaTable.dbc` name column
(1,480 rows, where the catalog keeps the ~80 that have a map) and is a feed of its own,
`ui_world_map::seed_area_names`; it is what pfQuest's minimap pass resolves the player's zone
through, so without it the world map drew pins and the minimap drew none. `GetAreaTriggerInfo`
still needs an app→VM feed and is specified in `ADDON_COMPAT.md`; the rest are later-era or
app-side.
- `PlayerInfo`: `C_PlayerInfo.CanUseItem` alone, the same function value `C_Item.IsUsableItem`
answers from so the two cannot disagree. The nine `PlayerLocation`-keyed members have no source
here.
- **`GetClassInfo`'s class table is a new app→VM feed** of the player's own `ChrClasses.dbc`
(`benilla-formats`' `chr_classes.rs` fields 5 and 14 → `benilla-app`'s `ui_chr_classes.rs` →
`UiScript::set_class_info`), the same shape the race feed takes and for the same reason. Nil for
a gap is load-bearing: 1.12 leaves ids 6 and 10 empty and pfQuest walks `1, 32` straight through
them. Worth knowing before touching it: all nine shipped enUS rows satisfy
`className:upper() == classFile`, so a reader that derived one from the other is invisible on
real data — a test records the coincidence and another uses a renamed fixture to pin the
independence.
- **Not ClassicAPI, built anyway**: `TableUtil.Execute` (`table_util.rs`). Blizzard's own FrameXML
helper, which this install's pfQuest calls at file scope — absent, it aborted `map.lua` and left
`pfMap` undefined.
- `AddOns`: 9 of 10 `C_AddOns.*`, all delegating to the stock addon globals;
`GetAddOnLocalTable` is absent (1.12 passes addon files no arguments, so no such table exists).
- `GameTooltip` (widget **methods**): the reader family — `GetItem`, `GetSpell`, `HasItem`,
`HasSpell`, `GetUnit`, `HasUnit`, `GetOwner`, `IsEquippedItem` — over new `TooltipState::subject`
state recorded at the one item renderer and the one spell renderer. `GetUnitGUID`, the
GameObject pair, the `Set*ByID` aliases and the talent/set/totem/compare setters are skipped
with reasons.
## Account
SaveAccount, DeleteAccount, GetSavedAccounts, LoginWithSavedAccount
## Action
GetActionInfo
## AddOns (`C_AddOns`)
GetAddOnName, GetAddOnTitle, GetAddOnNotes, IsAddOnLoadable, IsAddOnLoaded, LoadAddOn,
GetAddOnSecurity, DoesAddOnExist, GetAddOnOptionalDependencies, GetAddOnLocalTable
## APIDocumentation
C_APIDocumentation.GetSystems, C_APIDocumentation.GetSystem, _classicapi_UndocumentedAPI
## AuctionHouse (`C_AuctionHouse`)
PostItem
## AuraUtil
ForEachAura, FindAura, FindAuraByName, UnpackAuraData
## CharacterList
GetSavedCharacterOrder, SetSavedCharacterOrder
## Chat
GetCurrentChatGUID
## Class
FillLocalizedClassList
## ClassColor (`C_ClassColor`)
GetClassColor
## ColorUtil (`C_ColorUtil`)
ConvertRGBToHSV, ConvertHSVToRGB, ConvertHSVToHSL, ConvertHSLToHSV, ConvertHSLToRGB,
GenerateTextColorCode, WrapTextInColor, WrapTextInColorCode
## Combat
InCombatLockdown, StartAttack, StopAttack
## Console
ConsoleExec, ConsoleEcho, ConsolePrintAllMatchingCommands, ConsoleIsActive,
ConsoleGetColorFromType, ConsoleGetFontHeight, SetConsoleKey, CalculateStringEditDistance,
ConsoleGetAllCommands
## Container (`C_Container`)
GetContainerItemID, GetContainerItemInfo, HasContainerItem, GetItemCooldown, GetContainerItemDurability,
GetContainerItemRepairCost, GetContainerItemCharges, GetContainerNumFreeSlots, GetContainerFreeSlots,
GetContainerItemQuestInfo, GetContainerItemEquipmentSetInfo, CalculateTotalNumberOfFreeBagSlots,
IsContainerItemOpenable, PlayerHasHearthstone, UseHearthstone, SwapItems, MoveItem, AutoStoreItem,
SortBags, SortBankBags, GetSortBagsRightToLeft, SetSortBagsRightToLeft, GetBackpackAutosortDisabled,
SetBackpackAutosortDisabled, GetBankAutosortDisabled, SetBankAutosortDisabled
## Creature (`C_CreatureInfo`)
GetCreatureID, GetCreatureInfoByID, RequestLoadCreatureByID, GetRaceInfo, GetClassInfo,
GetCreatureFamilyInfo, GetCreatureFamilyIDs, GetFactionInfo, GetCreatureTypeInfo, GetCreatureTypeIDs
## Currency
GetCoinTextureString (also `C_CurrencyInfo.GetCoinTextureString`)
## CVar (`C_CVar`)
GetCVarInfo, DoesCVarExist, AreCVarsLoaded, GetCVarBitfield, SetCVarBitfield, SetTempCVar,
RemoveTempCVar, GetCVarBool
## Cursor
GetCursorInfo
## EquipmentSet (`C_EquipmentSet`)
CanUseEquipmentSets, GetNumEquipmentSets, GetEquipmentSetIDs, GetEquipmentSetID, GetEquipmentSetInfo,
GetIgnoredSlots, GetItemIDs, GetItemLocations, CreateEquipmentSet, SaveEquipmentSet,
ModifyEquipmentSet, DeleteEquipmentSet, IgnoreSlotForSave, UnignoreSlotForSave, IsSlotIgnoredForSave,
ClearIgnoredSlotsForSave, EquipmentSetContainsLockedItems, UseEquipmentSet, PickupEquipmentSet
## Events
C_EventUtils.IsEventValid, GetFramesRegisteredForEvent
## Expansion
GetClassicExpansionLevel, ClassicExpansionAtLeast, ClassicExpansionAtMost
## Faction
GetFactionIDByIndex, GetFactionInfoByID, GetFactionParentID, C_Reputation.GetFactionStandings,
C_Reputation.GetWatchedFactionData, C_Reputation.GetFactionDataByID, C_Reputation.GetFactionDataByIndex,
C_Reputation.SetSelectedFactionByID, C_Reputation.SetWatchedFactionByID,
C_Reputation.ToggleFactionAtWarByID, C_Reputation.IsFactionActive, C_Reputation.IsFactionActiveByID,
C_Reputation.SetFactionInactiveByID, C_Reputation.SetFactionActiveByID, C_Reputation.GetLastStandingChange
## Focus
FocusUnit, ClearFocus
## Frame
region:SetPoint (1-arg form), SetSize, GetSize, IsMouseOver, GetRect, IsDragging, GetMouseFoci,
SetShown, GetStringHeight, GetUnboundedStringWidth, GetWrappedWidth, GetNumLines, GetLineHeight,
IsTruncated, SetMaxLines, GetMaxLines, SetFormattedText, SetRotation, SetVertexOffset, SetMask,
CreateMaskTexture, AddMaskTexture, RemoveMaskTexture, GetNumMaskTextures, GetMaskTexture,
SetColorTexture, SetAtlas, GetAtlas, ResetTexCoord, SetSpriteSheetCell, SetDesaturation,
GetDesaturation, SetCursorPosition, GetCursorPosition, GetUTF8CursorPosition, ClearHighlightText,
HasFocus, HasText, SetHighlightColor, GetHighlightColor, ClearHistory, SetResizeBounds, HookScript,
IsEventRegistered, RegisterUnitEvent, GetEffectiveAlpha, SetAttribute, SetAttributeNoHandler,
ClearAttribute, GetAttribute, SetModernScriptArgs, GetModernScriptArgs, SecureCmdOptionParse,
RegisterStateDriver, UnregisterStateDriver, RegisterAttributeDriver, UnregisterAttributeDriver,
RegisterUnitWatch, UnregisterUnitWatch, UnitWatchRegistered, SecureButton_GetAttribute,
SecureButton_GetUnit, GetClickFrame
## FriendList (`C_FriendList`)
SendWhoQueryByName, IsWhoQueryPending, GetNumWhoResults, GetWhoInfo, IsFriend, IsIgnored,
IsIgnoredByGuid, GetNumFriends, GetNumOnlineFriends, GetFriendInfo, GetFriendInfoByIndex,
SetFriendNotes, SetFriendNotesByIndex
## GameObject (`C_GameObjectInfo`)
GetGameObjectInfoByID, RequestLoadGameObjectByID, ClosestGameObjectPosition
## GameTooltip
SetSpellByID, AddSpellByID, SetTalentByID, SetInventoryItemByID, SetHyperlinkCompareItem,
IsEquippedItem, SetItemByGUID, SetEquipmentSet, SetTotem, GetItem, GetSpell, HasItem, HasSpell,
GetUnit, GetUnitGUID, HasUnit, GetGameObject, HasGameObject, GetOwner
## Glue (`C_Glue`)
IsFirstLoadThisSession, IsOnGlueScreen
## Gossip (`C_GossipInfo`)
GetText, GetOptions, GetAvailableQuests, GetActiveQuests, GetNumOptions, GetNumAvailableQuests,
GetNumActiveQuests, SelectOption, SelectOptionByIndex, SelectAvailableQuest, SelectActiveQuest,
CloseGossip
## Hooks
hooksecurefunc (both forms)
## Input
IsLeftShiftKeyDown, IsRightShiftKeyDown, IsLeftControlKeyDown, IsRightControlKeyDown,
IsLeftAltKeyDown, IsRightAltKeyDown, IsModifierKeyDown, IsMouseButtonDown, GetMouseButtonClicked
## Instance
GetInstanceInfo
## Item (`C_Item`)
DoesItemExist, DoesItemExistByID, EquipItemByName, GetCurrentItemLevel, GetDetailedItemLevelInfo,
GetItemCount, GetItemData, GetItemDataByID, GetItemFamily, GetItemGUID, GetItemID, GetItemInfo,
GetItemInfoInstant, GetItemInventorySlotInfo, GetItemInventorySlotKey, GetItemInventoryType,
GetItemInventoryTypeByID, GetItemLink, GetItemLocation, GetItemMaxStackSize,
GetItemMaxStackSizeByID, GetItemName, GetItemNameByID, GetItemQuality, GetItemQualityByID,
GetItemSellPrice, GetItemSellPriceByID, GetItemSetID, GetItemSetIDByID, GetItemSetInfo,
GetItemSpell, GetItemStatDelta, GetItemStats, GetItemClassInfo, GetItemSubClassInfo,
GetItemUniqueness, GetItemUniquenessByID, GetStackCount, GetWeaponEnchantInfo,
GetItemTempEnchantInfo, GetEnchantInfo, IsBound, IsConsumableItem, IsEquippableItem, IsUsableItem,
IsEquippedItem, IsItemDataCachedByID, IsItemDataCached, IsItemGUIDInInventory, IsItemInRange,
IsItemOpenable, IsLocked, LockItem, LockItemByGUID, PickupItem, RequestLoadItemDataByID,
RequestLoadItemData, UnlockAllItems, UnlockItem, UseAtCursor, UseAtUnit, UseItemByName,
GetAverageItemLevel, GetInventoryItemDurability, GetInventoryItemID, GetInventoryItemRepairCost,
GetInventoryItemsForSlot, GetItemIcon, GetItemIconByID, OffhandHasWeapon
## Loot (`C_Loot`)
GetNearbyLootableUnits, LootUnit, LootUnitItem, ScanNearbyLoot, LootAllCorpses, IsScanInProgress,
GetLastScanResults
## LootHistory (`C_LootHistory`)
GetNumItems, GetItem, GetPlayerInfo
## LossOfControl (`C_LossOfControl`)
GetActiveLossOfControlDataCount, GetActiveLossOfControlData, GetSchoolLockout
## Lua
select, unpack, xpcall, collectgarbage, table.wipe, table.count, table.maxn, Mixin,
CreateFromMixins, strsplit, strjoin, strtrim, strreplace, string.reverse, strrev, math.fmod,
math.modf, coroutine.create, coroutine.resume, coroutine.yield, coroutine.status, coroutine.wrap,
coroutine.running
## Macros
CastSpellNoToggle (macro line), StopMacro, GetMacroSpell, GetMacroItem, GetMacroIcons,
GetMacroItemIcons, GetLooseMacroIcons, GetLooseMacroItemIcons, C_Macro.CreateMacro,
C_Macro.EditMacro, C_Macro.GetMacroIcon, C_Macro.SetMacroDisplay
## Mail
GetSendMailItemLink, GetInboxItemLink
## Map (`C_Map`)
CanSetUserWaypointOnMap, GetAreaInfo, GetAreas, GetAreaTriggerInfo, GetAreaTriggers,
GetBestMapForUnit, GetFallbackWorldMapID, GetMapAreaIDs, GetMapArtLayers, GetMapArtLayerTextures,
GetMapChildrenInfo, GetMapInfo, GetMapInfoAtPosition, GetMapOverlays, GetMapPosFromWorldPos,
GetMapRectOnMap, GetMapWorldSize, GetPlayerMapPosition, GetUserWaypoint, HasUserWaypoint,
ClearUserWaypoint, GetUserWaypointHyperlink, GetUserWaypointFromHyperlink,
GetUserWaypointPositionForMap, GetWorldPosFromMapPos, MapHasArt, SetUserWaypoint
## MapExplorationInfo (`C_MapExplorationInfo`)
GetExploredMapTextures, GetUnexploredMapTextures
## MerchantFrame (`C_MerchantFrame`)
GetItemInfo, GetBuybackItemID, GetNumJunkItems, SellAllJunkItems, IsMerchantItemRefundable,
IsSellAllJunkEnabled
## Model
model:SetDisplayInfo, model:SetCreature
## ChatBubbles (`C_ChatBubbles`)
GetAllChatBubbles
## NamePlate (`C_NamePlate`)
GetNamePlates, GetNamePlateGUIDs, GetNamePlateForUnit, GetNamePlateForGUID
## NameCache
GetPlayerInfoByGUID, UnitNameFromGUID, C_PlayerCache.GetPlayerInfoByName,
C_PlayerCache.RememberPlayer, C_PlayerCache.SetEnabled, C_PlayerCache.IsEnabled,
C_PlayerCache.SetScanEnabled, C_PlayerCache.IsScanEnabled
## NewItems (`C_NewItems`)
IsNewItem, RemoveNewItem, ClearAll
## PlayerInfo (`C_PlayerInfo`)
CanUseItem, GUIDIsPlayer, GUIDIsCreature, GUIDIsPet, GUIDIsGameObject, GetName, GetClass, GetRace,
GetSex, IsConnected
## Quest (`C_QuestLog`)
GetInfo, GetQuestLogTitle, GetQuestIDForLogIndex, GetLogIndexForQuestID, GetHeaderIndexForQuest,
RequestLoadQuestByID, IsOnQuest, IsUnitOnQuest, GetTitleForQuestID, GetQuestDetails,
GetNumQuestObjectives, IsQuestDataCachedByID, GetQuestLogLeaderBoardID
## Sound
PlaySound (both forms), C_Sound.PlaySound, C_Sound.PlaySoundWithOptions,
C_Sound.GetSoundScaledVolume, C_Sound.IsPlaying, C_Sound.PlayItemSound,
C_Sound.PlayVocalErrorSound, MuteSoundFile, UnmuteSoundFile, C_Sound.GetRecentSoundFiles
## Spell (`C_Spell`, plus several bare globals)
DoesSpellExist, GetSchoolString, GetSpellInfo (both forms), GetSpellName, GetSpellTexture,
GetSpellLink (both forms), GetSpellDescription, GetSpellMechanicByID, GetSpellEffectInfo,
GetSpellEffectMechanics, GetSpellDispelType, GetSpellRadius (both forms), GetSpellPowerCost,
GetSpellReagents, GetSpellCastCount, GetSpellSubtext, IsPassiveSpell (both forms),
IsSpellPassive, IsPlayerSpell, CanDualWield, IsSpellKnown, GetSpellBonusDamage,
GetSpellBonusHealing, IsUsableSpell (both forms), IsSpellUsable, GetSpellCooldown,
GetSpellLossOfControlCooldown, IsCurrentSpell, IsSelfBuff, SpellHasRange (both forms),
IsSpellInRange, IsAutoAttackSpell, IsRangedAutoAttackSpell, IsNextMeleeSpell, ResetsMeleeSwing,
IsHarmfulSpell, IsHelpfulSpell, IsSpellHarmful, IsSpellHelpful, GetSpellSchool,
CastSpellNoToggle, CastAtCursor, CastAtUnit, CancelSpellByID, CancelSpellByName,
UnitCastingInfo, CastingInfo, UnitChannelInfo, ChannelInfo, GetSpellLevelInfo,
GetSpellRequiredTargetLevel
## SpellBook (`C_SpellBook`)
FindSpellBookSlotByID, GetSpellBookItemInfo, GetNumSpellBookSkillLines, GetSpellBookSkillLineInfo,
GetSpellBookItemSkillLineIndex, GetSkillLineIndexByID, GetSpellBookItemCastCount,
GetSpellBookItemLossOfControlCooldownInfo, GetSpellBookItemLossOfControlCooldownDuration,
IsClassTalentSpellBookItem, ContainsAnyDisenchantSpell, GetSpellLevelLearned,
GetCurrentLevelSpells, GetPlayerSpellsByAura, GetSkillLineName, GetSkillLineRank,
GetSpellSkillLine, IsAutoAttackSpellBookItem, IsRangedAutoAttackSpellBookItem
## State
IsMounted, Dismount, IsStealthed, IsFalling, IsSwimming, IsIndoors, IsOutdoors,
IsAssistingRitual, IsInGroup, IsInRaid, GetMirrorTimerInfo, GetMirrorTimerProgress,
GetShapeshiftFormID, CancelShapeshiftForm, GetSheathState
## SwingTimer (`C_SwingTimer`)
EnableRangeCheck, IsTargetWithinSwingRange
## System
GetPhysicalScreenSize, CopyToClipboard
## Talent
GetTalentSpellID, GetTalentIDByIndex
## Targeting
GetPlayerFacing, TargetDirectionEnemy, TargetDirectionFriend, TargetNearest,
TargetNearestEnemyPlayer, TargetNearestFriendPlayer
## TaxiMap (`C_TaxiMap`)
GetTaxiNodesForMap, GetAllTaxiNodes, GetTaxiPaths, GetTaxiPathWaypoints, GetTaxiRoute
## Texture (`C_Texture`)
GetAtlasInfo, GetAtlasExists, GetAtlasID, GetAtlasElementID, GetAtlasElements, RegisterAtlas
## Time
GetServerTime, GetTimeCached, C_Timer.After, C_Timer.NewTimer, C_Timer.NewTicker,
C_DateAndTime.GetCurrentCalendarTime, C_DateAndTime.GetCalendarTimeFromEpoch,
C_DateAndTime.AdjustTimeByDays, C_DateAndTime.AdjustTimeByMinutes,
C_DateAndTime.CompareCalendarTime, C_DateAndTime.GetServerTimeLocal,
C_DateAndTime.GetSecondsUntilDailyReset
## Totem
GetTotemInfo, GetTotemTimeLeft, GetTotemDuration, TargetTotem
## Tracking
GetNumTrackingTypes, GetTrackingInfo, SetTracking
## TradeSkillUI (`C_TradeSkillUI`)
GetTradeSkillListLink, GetCraftListLink, GetTradeSkillListRecipes
## UIColor (`C_UIColor`)
GetColors
## Unit
UnitGUID (done), UnitTokenFromGUID (done), UnitTokenFromName, UnitSubName, UnitCreatureFamilyID,
UnitCreatureTypeID, UnitCreatureID, GetUnitSpeed, UnitClassBase, UnitRaceBase, UnitIsAFK,
UnitIsDND, UnitIsFeignDeath, UnitIsInMyGuild, UnitIsPossessed, UnitIsMinion, UnitIsPet,
UnitIsOtherPlayersPet, UnitOwnerGUID, UnitCreatedBySpell, UnitStandState, UnitInRange,
UnitDistanceSquared, UnitPosition, UnitInLineOfSight, ClosestUnitPosition, UnitHealthMissing,
UnitPower, UnitPowerMax, UnitPowerMissing, UnitPowerType, UnitSpellHaste, UnitSpellTargetName
## UnitAuras (`C_UnitAuras`)
GetAuraDataByIndex, GetBuffDataByIndex, GetDebuffDataByIndex, UnitAura, UnitBuff, UnitDebuff,
GetAuraSlots, GetAuraDataBySlot, UnitAuraBySlot, GetUnitAuraBySpellID, GetPlayerAuraBySpellID,
GetAuraDataBySpellName, RegisterComboDuration, RegisterAuraDurationModifierByTrigger,
GetUnitAuras, GetAuraDispelTypeColor
## VoiceChat (`C_VoiceChat`)
GetTtsVoices, GetRemoteTtsVoices, SpeakText, StopSpeakingText
## XMLUtil (`C_XMLUtil`)
GetTemplates, GetTemplateInfo, DoesTemplateExist