Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
Battle for Azeroth alpha UI changes observations
Welcome. You will find here my personal observations on the changes in the game's UI code for each new build of the Battle for Azeroth alpha. Please keep in mind those are my personal observations and I might miss or misunderstand things. If an error is found I will do my best to correct it as soon as possible. These observations I made from observing the "diffs" from build to build and some of them have no in-game confirmation yet, so keep that in mind.
I am also trying to update the Wowpedia article for the Patch 8.0.1/API changes when I can confirm and check the changes and new APIs in game. If you can participate in documenting the changes, please come help us :)
You might also want to look at Blizzard's official post on the changes for add-ons (although they left out many things that I found here ^^)
8.0.1 (26567 - 2018-05-08
C_IslandsQueueAPI to get info about the expedition islands
C_Map.GetMapPosFromWorldPos(continentID, worldPosition, overrideUiMapID)and
C_Map.GetWorldPosFromMapPos(uiMapID, mapPosition) to convert map and world coordinates back and forth.
C_EncounterJournal.GetDungeonEntrancesForMap(mapID)to get the dungeon entrances available on a given map
C_Map.GetMapLinksForMap(mapID)to get links between maps (like in the latest raids, for navigating between floors)
QuestUtils_CanUseAutoGroupFinder(questID, isDropdownRequest)has been removed
- New battlefield map (it uses the same data provider model as the world map)
- New Communities settings UI
- New Banner, Dungeon Entrance, Contributions, Map links and Selectable graveyards POI Providers for the World Map
- New expedition islands queue frame
- New community related alerts
- Some Quest related constants have been removed, new ones are in (Quest tags can be found in
- Changes to the Communities UI to pick an avatar.
- There are a lot of changes in the warfront UI code (unit info, etc.)
TestWorldMapFramehas finally been renamed to
WorldMapFrame. WorldMapFrame code has been remove except for a few functions that are doing nothing for now but are marked for being reimplemented
- Prestige icons are hidden in free for all or neutral PvP environment
8.0.1 (26530) - 2018-04-30
C_Map.GetPlayerMapPosition(uiMapID, unitToken)returns a
C_MapExplorationInfoAPI with two methods:
GetExploredAreaIDsAtPosition(uiMapID, normalizedPosition), returns a table of
GetExploredMapTextures(uiMapID), returns an
- New method in
- New method in
- New method in
- New methods in
CancelSpellByName(spellName)function to remove a buff from the player, to replace
CancelUnitBuff("player", name, rank)
PlayerLocationAPI (to abstract GUID & co when calling APIs) can now create a location from a voice member ID
GameTooltip_SetTitle(tooltip, text, overrideColor, wrap),
GameTooltip_AddNormalLine(tooltip, text, wrap),
GameTooltip_AddInstructionLine(tooltip, text, wrap), and
GameTooltip_AddColoredLine(tooltip, text, color, wrap)to easily handle setting and adding texts to the GameTooltip. Note that the color argument must be from the
CallMethodOnNearestAncestor(frame, methodName, ...)to call the first available method corresponding to the method name in the parents of the given frame.
- Some functions have been removed
UNIT_SPELLCAST_SENTargs are now
unit, target, castGUID, spellIDinstead of `unit, guidString, spellID
C_TransmogCollection.GetAppearanceSources(appearanceID)now accepts an optional slot number as a second parameter.
PARTY_LOOT_METHOD_CHANGEDhas been removed
- The guild recruitment UI has been moved to a separate frame with refactored code.
- The Communities feature received new UIs to display guild news, perks, info and rewards directly in the Communities UI. (It sounds like the guild UI is gonna be deprecated at some point )
- Dig sites, flight points, pet tamers, and garrison plots have been added to the new World Map Frame (new
UIWidgetTemplateBulletTextListto display a list with a bullet texture before the text.
UIWidgetTemplateHorizontalCurrenciesto display currency info in a list and
UIWidgetTemplateIconTextAndCurrenciesto display currencies as icons with text on the side
UIWidgetTemplateTextWithStateto display a text where the text color depends on the state (passed via
- The tutorials have been added back to the new World Map Frame
- New toasts for Island Expeditions to show Azerite gains
- New keybindings to toggle self mute and self deafen in voice chat
- The master loot button has been removed from the raid UI (RIP)
- They have added back the behavior to right-click on players on the map during battlegrounds to report them for being AFK.
- The World Quest map pin provider now supports displaying spell effects (for the instant finisher I suppose)
- The Battlefield minimap has been commented out from UIParent for now, they are probably looking into implementing a small World Map Frame
- There was a few changes in the UIDropDownMenu.lua code, I will have to check if that's to fix the taint (finally) or not
8.0.1 (26491) - 2018-04-23
- Only changes are in Blizzard's feedback addon. It's renamed
PTR_IssueReporter. It's position is now saved between sessions. It will now pop-up when some activities (island expeditions, warfronts) are completed by the player to gather feedback.
8.0.1 (26476) - 2018-04-19
In this build add-ons and
/script, /run, /dump commands are now enabled. The interface version number has been incremented to
C_AreaPoiInforeceived it functions (it was empty before), like
C_CampaignInfoAPI with functions to track the current chapter of the campaign and get info.
CustomBindingManagerused to create
CustomBindingButtonto use to bind keys of different types (special for Push to talk). Documentation says "Utility to mimic game action-binding functionality, while allowing metakeys to be recognized on their own. t's currently not allowed for addons to add custom binding types, but that should only prevent this button from appearing in the keybinds window, it's still permitted that addons can make their own systems that leverage these bindings. "
MapUtil.FindBestAreaNameAtMouse(mapID, normalizedCursorX, normalizedCursorY)to get the name of a region/sub-zone at map coordinates.
:AddTexture(texture)to add a Texture (the widget, not the path) to the group, then use
:IsFullyLoaded()to check if the entire group of textures has been fully loaded (used for the map textures, see more below).
- The quest log has new UI for the war campaign. It shows the chapters for the expansion's main campaign. Note that the button is inside the scroll view and will scroll alongside it (while the previous story-lines button was outside of the scroll frame and stayed fixed).
- The new world map is now active (the name of the frame is still
TestWorldMapFrameso anything that uses
WorldMapFramewill not be shown on this new frame!). You can use
WorldMapFrame:Switch()to switch back to the old world map.
- Map textures are now pre-loaded when the player enters a zone, so they are available when the map is opened
- New code to bind push to talk to keys
- The channel frame display voice chat status (muted, currently speaking).
- New voice activity notifications to display who is talking.
- The adventure map has been added to the BfA mission table (like in Legion)
- New Gossip POI (probably for gossip indicators like the bronze dragons to switch phases), Map Exploration POI and Shared Map POI provider for the map
8.0.1 (26433) - 2018-04-13
C_AreaPoiInfo, empty for now.
PlayerLocationmixin, used to abstract a Player. It is used in some new APIs instead of giving a unitID, a GUID or a PlayerName-RealmName token. Use
PlayerLocation:CreateFromChatLineID(chatLineID)and use the object in the APIs that uses those.
C_InvasionInfowith functions like
KeyCommandAPI that handles fireing commands on key presses.
KeyCommand_Create(command, runOnUp, key)create a command a new
KeyCommand. (It's not protected as far as I can see, but it probably won't stay that way)
DoublyLinkedListMixinto create a list with
QuestLogOwnerMixinused for assigning the QuestLog Frame from to the (new) Map Frame. This is probably temporary and will be removed in the future as it is used in the temporary compatibility layer between the new and the old WorldMap Frames.
ReportPlayer(complaintType, PlayerLocation, comment)functions.
GetBestMapForUnit(unitToken), only work for player and party members, returns the current uiMapID. Instead of using
C_Map.GetCurrentMapID()(which outputs the map currently shown in the UI), the UI code use
C_Map.GetBestMapForUnit("player")to get the current map of the player.
C_VignetteInfonow has functions to get vignette info and positions using a vignette GUID
- There are a bunch of modifications for voice chat, to handle voice strenght and display it visually to the player.
- The new
WorldMapFramehas received its scrolling controller canvas (now a mixin), its minimize and maximize buttons, the QuestFrame has been anchored to it, Invasions and Vignettes now have
WorldMapDataProviders. It is almost ready for testing!
- The Communities features has a lot of changes, and a lot of it is protected and not accessible to add-ons. The dialog to add or create a community, to pick an avatar. But creating a community still doesn't work and the feature is not ready for testing just yet
- Framestack's code to handle key commands (alt to move in stack, ctrl to open in table inspect) has been refactored. Hitting ctrl-C on a texture will copy the texture path to the clipboard!
- The limit on chat channels joined has been increased from 10 to 20 chat channels.
- Players can be reported for voice chat language offense.
ShowQuestLog()functions is gone in favor of
OpenQuestLog(mapID)(mapID is optional).
OpenWorldMap(mapID)(mapID is optional).
StatusTrackingBarmixin now has a priority property used to know which status bar should be displayed in priority when multiple things are being tracked (XP, rep, honor, azurite, etc.)
- New UI for chat frame scrolling (the background is no longer visible, the back-to-bottom button is smaller to fit the scroll thumb
- Voice chat is now available. You get a notification to join instance voice chat when you join a instanced group.
AzeriteBarto show an XP-like bar for Azerite power.
UIWidgetTemplateStackedResourceTrackerused to show
widgetInfo.resourcesinfo (text, tooltip, icon) that are stack upon each other. They are automatically anchored on as a list from top to bottom (used in the Warfront UI for resources)
8.0.1 (26367) - 2018-04-03
C_CreatureInfowith function to
GetRaceInfo(raceID)to get the localized name and client (non-localized name) using IDs.
C_FogOfWarused for a fog of war effect on the expeditions islands, you can
GetFogOfWarInfo(fogOfWarID). A fog of war has a background texture atlas, a mask atlas and a mask scalar.
C_Spellused to get data from spell IDs. You can check
IsSpellDataCached(spellID), and you can
RequestLoadSpellData(spellID)(there is no direct access to the spell info in the API as for now, you still have to use the older functions).
C_PartyPosehave their in-game documentation added (the APIs themselves were added in the previous build).
Spellobject-oriented API. Use
Spell:CreateFromSpellID(spellID)to create a
Spellobject and get its info using the object's methods
PredictedSettingmixin, created using
wrapTablemust have methods to set a setting value
setFunction(value)and get the setting value
getFunction(). You can use the
:Set(value)a setting. If the value was set using
:Get()method will return a cached value instead of calling the
getFunction(). This is used in the talent UI to immediately set a talent choice and use that choice as the current value, while the client sends the command and receive the answer from events. Calling the
:Clear()method reset the cached value. There is
PredictedTogglemixin with the same effect, for boolean values. It offers a
:Toggle()method that invert the current value.
ChatChannelTypeenumeration table now references
Party, Raid, Instance, Battleground. There might be a consolidation of the channel types.
The subtext (rank info) of many of the spell and buff/debuff stuff has been removed. This means many of the functions now returns less values (
UnitAuradoesn't return the second value
GetMacroSpell(id)returns one value instead of 3,
UnitCastingInfo(unit)2nd return value is gone). This is an upcoming issue in many add-ons that retrieves spell or buff/debuff info as many return values shifted places.
nameSubtexthas been removed from the arguments of many spell related unit events (
UNIT_SPELLCAST_INTERRUPTED, etc.). The UI code has been updated in many many places to reflect this change.
C_VoiceChatAPI now reference push to talk bindings and voice activation sensitivity.
- The functions deprecated in 7.x have now been removed (they were re-implemented in Lua to stay available for a while, in files that are no longer loaded)
UIMapIDToWorldMapAreaIDfile has been added to the
Blizzard_Deprecatedfolder. The file itself doesn't run code, but it has a CSV formatted table to map old map area IDs to the new UIMapIDs (this was asked on the #wowuidev IRC)
- More data provider has been added for the new World Map, like active quests, fog of war, landmarks, scenario data (still not available for testing yet).
- The PTR Feedback tool now ignores a hard-coded list of locations (but I don't know what IDs correspond to yet).
- Archeology uses some of the new APIs introduced recently.
- The keybindings button has been refactored to use mixins and templates. The code to handle modifier keys has been refactored too.
- There are a bunch of changes to the Communities and Voice chat UI code (those are still not available for testing yet).
- Many parts of the UI now uses
C_CreatureInfoto get class info.
- The new World Map should now have more UI elements to it (navigation bar, tracking button, emissaries UI). Those elements have been re-implemented as mixins and XML templates. (The map is still not ready for testing and doesn't replace the current world map, it's frame name is still
- The audio options lets you set the voice chat mic sensitivity
- The quest UI now handles up to 50 quests in the list (the server limit is still 25)
- The Dark iron dwarfs and Mag'har orcs have been added to the character creation code
- First Aid has been removed from the background texture of the spellbook, but the text strings are still here.
New UI Widgets
UIWidgetTemplateTooltipFrametemplate that automatically show and hide the
GameTooltipon enter and leave, and uses
self.tooltipfor the tooltip text.
UIWidgetTemplateStatusBartemplate that defines a standard status bar with a label. The info that shall be passed to
:Setup(widgetInfo)must contain a
textfield. The widget will automatically compute the percentage and set the status bar filling status.
UIWidgetTemplateDoubleIconAndTexttemplate (two text with an icon on the right).
New frame scripts
8.0.1 (26310) - 2018-03-27
C_QuestLineAPI to get available quest lines and their info (name, questID, etc.)
C_MapAPI, modern way to interact with the map. Use
C_Map.GetCurrentMapID()to get the current map ID,
C_Map.GetMapInfo(mapID)to get some info,
C_Map.GetMapArtLayerTextures(mapID, level)to get the map textures (as a table) for a specific level,
C_Map.SetMap(mapID)to set the world map
MapUtiltable with various methods to check map types and get some info.
VehicleUtil.GetVehicleInfo(vehicleType)to get info (texture, size) for vehicle a type.
New world map
- New world map Blizzard add-on
Blizzard_WorldMap(instead of a
Framefile). The entire code is now a Lua mixin and XML templates. It is probably not ready yet to be tested as the old world map is still here, and the new frame is called
TestWorldMapFrame. It looks like everything has been rewritten.
- A lot of the world map indicators (the text at the top that says the zone name and required level, the battlefield falgs, bonus objectives, corpse, dungeon entrance, group memebers, quest points, vehicles, world quests) have been refactor into their own individual files (Lua mixins and XML templates) inside the
- The fancy flight map (the one that can zoom) now supports more POI types. The zooming behavior has been tweaked.
PartyPoseUI, related to the Islands scenarios. It shows the winning team, with their 3D models and a banner of their faction in the victory UI. Note that there is a
PartyPosemodule that is broad, and an
IslandsPartyPosethat uses the first module specifically for the Islands stuff, meaning we could see this victory UI used elsewhere.
UIWidgetTemplateIconTextAndBackground(from that new UI widget module), same as
UIWidgetTemplateIconAndTextbut with a background
- Fishing is getting a tradeskill UI, probably for upgrades like mining or herbalism.
- The map "expansions" IDs have changed, you can find the new IDs at the top of the FrameXML/WorldMapFrame.lua
- The maximum number of quests is no longer hardcoded in the UI but instead retrieved from
C_QuestLog.GetMaxNumQuests(), which could indicate that this number will change. At the moment it returns 50!
- The BattlegroundChatFilters (to filter out "x leaved/joined" at the start and end of battlegrounds) now uses a mixin
BattlegroundChatFiltersMixininstead of a bunch of global functions. Many of the variables and "constants" it uses are now local, so they can't be modified by others.
- The functions
SetItemButtonDesaturatednow support buttons with icon textures accessed via
button.Icon, on top of
_G[button:GetName().."IconTexture"]because sticking to a naming convention is hard.
- They remove the
print()that was left in the LFG UI
8.0.1 (26287) - 2018-03-22
- The chat channels UI has been moved out of the Social frame, into a separate frame. You now access it using the speaker icon on the chat frame.
- New Communities and Voice channels. Internal name for functions for the Communities is
Cluband Voice channels is
- Communities: You can create clubs, invite people, they can accept or decline, you can leave, you can send a club chat to a regular chat window. The owner can delete messages, kick people. It has tickets that you can redeem (no idea what this is yet). It remembers where you were. You can set a channel subject, privilege access. It's essentially Discord. Bnet channels shows your Bnet avatar from the launcher. It doesn't seem to support
SendAddonMessage, I will have tot test that.
- Voice channels are built on top of communities. It what you'd expect. You can choose an input, set volumes, mute people or edit their volume (for you or everyone). They can be used for party/instance/raid too. You can use push to talk or voice detection.
- The audio options has been adapted for this.
- Changes to the keybinding UI. The code was refactored, but I couldn't find new interesting things.
- A lot of the code for the Battle.net friends has been refactored to use new stuff for the toast notifcations.
- Framestack now also highlight individual textures and indicates their asset name, using a new
- Changes to how portraits are displayed in the UI (the round texture in the top left corner of many frames).
SetPortraitTextureFromCreatureDisplayID(texture, displayInfo)allow displaying anything there as long as you have display info for the model you want to have.
- The character frame indicates if the player armor reduction is effective against the target
- The "garrison" mission table for BfA was added. OrderHall UI code has been moved around.
- Modifications and fixes to the Azerite system and UI (both temporary and final)
- PvP talent frame fixes.
- The character button in the micro menu buttons bar will pulse if you can upgrade Azerite empowered items.
- Fixes to the new
- The code for autocompletion has been modified in many places (not sure the impact of it)
- There are a bunch of new intrinsic Frames (if you don't know, those are Widgets defined in Lua and XML, that you can use directly like a standard widget. The
ScrollingMessageFramewas made a intrinsic widget a few patches ago).
ContainedAlertFramecan be used to show alert frame buttons at the bottom of the screen, like loot toast. The
AlertFrameSystemsystem has been changed to use those and the loot alerts use them.
FauxScrollFramecode has been modernized a little.
TruncatedTooltipScripts has been moved to the
SharedUIPanelTemplates.luafile, with the other similar stuff.
AzeriteUtilglobal table, with
CanAccessObject(obj)function, returns true if the object (Frame, Button, whatever) is accessible, or false if it is forbidden (either always or because of combat).
tIndexOf(table, item)function to get the index of an item in a table.
Wrap(value, max), to wrap back when incrementing numbers. For example, if value is
21but max is
20, it will return
ExecuteFrameScript(frame, script, ...)function. It tries to get the script, and if it exists it securely call the script of the frame with the args
EventRegistrationHelpermixin. Inherit and call
self:AddEvents(listOfEvents)to quickly register a list of events.
CreateTabGroup(frame1, frame2, frame3)to create a group of frame (editbox) that can be tabbed to (like in a form). Then call
tabGroup:OnTabPressed()when your frames received
OnTabPressedto have it automatically move the focus to the next frame. It supports the Shift modifier to go back to the previous field.
ContinuableContainer, used when you want to execute something when the info for multiple
Itemis loaded. You
:AddContinuable(continuable)to it and the callback you give it via
:ContinueOnLoad(callback)will be called when all items info are loaded.
- A new
BattlegroundChatFilterssystem to filter out system messages when many player leave or join a battleground when it starts or end.
- They removed more code from the old voice chat system removed in 7.2 that was somehow still there.
8.0.1 (26231) - 2018-03-14
- Temporary UI for Azerite empowered item was added. The temporary UI is used on regular clients, while GM clients use the previously implemented (and probably buggy) permanent UI.
- Some fixes to the tradeskill UI (like categories lines)
UIWidgetTemplateDoubleStatusBarwidget in the new
UIWidgetslayout thing. It's a widget with two status bars side by side. You call
UIWidgetTemplateDoubleStatusBarMixin:Setup(widgetInfo)to set the values, widgetInfo should have fields to indicate the values (current, min and max) for the
leftBarand for the
rightBar. The right bar is filled from the right to the left. The bars have icons at each extremity. It is not used anywhere yet. An implementation of this widget can be found in the Island Expeditions UI, the two bars at the top, width the right bar filling from right to left.
DevBuildAlertson the login (Glue) screen (similar to maintenance announcements), the content is received via the
CompactUnitFramenow shows buffs and debuffs stacks up to 99 (was 9 before)
TransformTreeFrameNodePoolMixin) used to animate/transform UI stuff using 2D vectors. It seems quite advanced and beyond my grasp 😅 Stuff are linked, and pushed, and moved 🤔 It is used to animate the glowing rings around an Azerite empowered item (it's multiple textures animated together, glowing brighter the more it is empowered (ranks))
8.0.1 (26175) - 2018-03-07
BattlefieldDocumentationrenamed back to
UIWidgetManager, with a bunch of mixins to manage a pool of instances of the same UI Widget and manage their layout in relation with each other (stacked frames or grids) and decorate the frame (via a
:Setup(info)method called on the frames created). You give the info for the widget using a function you define when registering a manager. When a new element is added to the stack, the layout is refreshed and the element sorted. Some of the stuff using this new layout system are
UIWidgetTemplateIconAndText. A good example of the usage is Blizzard_UIWidgetTemplateIconAndText
- A lot of
IconOverlaytextures were added everywhere in the UI, hidden by default. As pointed out by @Gethe the
iconOverlayis to display an overlay on Azerite empowered items.
- Modifications to the PvP talents inspection frame.
Blizzard_PTRFeedbackaddon is back
Modelwidget seems to accept a second display info ID when using the
:SetDisplayInfo(displayInfoID)method, used as a mount for the model (used in the quest frame 3D model drawer)
Modelwidget's scale attribute is now
modelScale, probably to avoid confusion with the Frame's scale attribute.
8.0.1 (26131) - 2018-02-27
There is nothing interesting in this BfA alpha build ¯\_(ツ)_/¯ Mostly bug fixes and improvements to existing stuff.
8.0.1 (26095) - 2018-02-22
C_BattlefieldInfonamespace renamed to
C_PvP, documentation has new methods about the war game mode.
- PvP talent frame changes (it seems pvp talent are available at level 20 instead of 100)
- More of the UI and code for the war game mode
/pvpcommand to toggle PvP flag
CurrencyContainerUtilglobal table. Only has one function
GetCurrencyContainerInfo(currencyID, numItems, name, texture, quality), which returns
name, texture, numItems, quality. Used in the LFG and quest UIs to get info about a currency reward.
UIExpandingButtonMixinwith methods to create a button that expands a frame (like a drawer). A direction can be specified, left or right. Used in the player talents frame to open the PvP frame
8.0.1 (26032) - 2017-02-14
ChatInfodocumentation about addon messages, with functions like
SendAddonMessage. The documentation also mentions a new
SendAddonMessageLogged(prefix, message, chatType, [target])documented as
Intended for plain text payloads; logged and throttled.
FrameUtilglobal table with two methods:
FrameUtil.UnregisterFrameForEvents(frame, events)to quickly register a table of
8.0.1 (25976) - 2018-02-07
- Dressing room for battle pets and mounts (ctrl-click on links to preview)
- Main menu bar (micro menu) is now a mixin (table with methods) instead of many individual functions (means it can be reused 🤔)
- Changes in the new multi-action bar layout (minimum scaling, layout changes)
- The quests ignore/unignore button has been removed from the code (was hidden in UI since 7.2)
- Duplicated code in the realm list UI has been removed.
8.0.1 (25902) - 2018-01-28 (First alpha build)
- New documentations for A LOT (probably all) of events, with their arguments.
ObjectAPI documentation, for object-oriented programming, currently for
ItemLocations. You can create items object (
Item:CreateFromEquipmentSlot(equipmentSlotIndex)) and then use their methods to get data from them (
- Some event names changed (like
- New Azerite item empowering UI code
- New Warfront UI code
- Voice chat related code that was still here has been removed or commented out
StatusTrackingBarTemplate(progress bar above action bar), and new
StatusTrackingBarUI codes to use it. Old code has been removed (everything was stuffed inside
- New keyboard shortcut to toggle debug aid (
ToggleDebugAIDisplay(), not sure what it does yet)
- The GM survey UI has been removed
- Micro menu buttons and bags have been moved (visible on Blizzcon previews)
- New honor (PvP) talents UI is being hinted at in the code comments
- Changes to how additional action bars are handled (since everything moved)
- Changes to how quests POI on the maps are displayed (colored for daily etc.)
- More alert dialogs have the locked cancel button for a few seconds behavior to avoid human error (LFG queues, BG queues)
UIDropDownMenuTemplates(maybe a way to use native dropdown without taint?)
- Slash commands that require a target (
/invite) now outputs an error message if no target is specified