BattleForAzeroth UI

A simple addon to create BfA style action bars for Classic Era/TBC Anniversary/Retail(in development) servers.
Back to Files

3.1.1

File nameBattleForAzerothUI-3.1.1.zip
Uploader
zeechnzeechn
Uploaded
Sep 27, 2026
Downloads
78
Size
147.8 KB
Flavors
MoP ClassicRetailClassic TBCClassicTitan Reforged Classic
File ID
8991690
Type
R
Release
Supported game versions
  • 12.1.0
  • 5.5.4
  • 3.80.2
  • 2.5.6
  • 1.15.9

What's new

Changelog

All notable changes to BattleForAzerothUI are documented here.


[3.1.1] - 2026-09-27

Fixed

  • Classic action bars: Automatically set up a "BattleForAzerothUI" Edit Mode layout when either bottom bar still uses default positioning. The layout copies the current settings and saves both bottom bars as custom-positioned, preventing Era's combat position manager from resetting their anchors without replacing secure methods. Existing layouts with both bars already custom-positioned are preserved. Setup waits for combat and Edit Mode to end; /bfalayout retries setup if needed.
  • Classic Edit Mode: Suspend BFA positioning while editing and while Blizzard applies a layout, then restore it after the layout pass.

[3.1.0] - 2026-09-10

Added

  • Retail / Midnight: Action bar support for the rebuilt 12.0 UI. Bar positions are written into a dedicated "BattleForAzerothUI" Edit Mode layout and applied by Blizzard's own secure code, so the BfA layout holds without tainting anything. The layout is created and activated automatically on first login (a reload prompt follows); /bfalayout re-applies it. The addon otherwise only decorates — BfA art plate, gryphon end caps, page-number relocation, and flat icon slots — anchored to the action buttons so they track the bars wherever the layout places them.
  • Retail / Midnight: "Show Bottom Right Bar" option in the BfA options panel, kept in sync both ways with Blizzard's Action Bar 3 (MultiBarBottomRight) toggle. Enabling it lays that bar out as a 2×6 block and centers the main + bottom-right cluster; disabling it centers the main bar on its own.
  • Progression clients: the *_classic.lua files now load on every non-Mainline client (Classic Era, TBC Anniversary, WotLK / Titan Reforged, Cataclysm, MoP Classic), since they all share the legacy MainMenuBar UI engine.

Changed

  • Updated the advertised client versions to the current live builds: Midnight 12.1.0 (120100), Mists of Pandaria Classic 5.5.4 (50504), Titan Reforged / WotLK Classic 3.80.2 (38002), TBC Anniversary 2.5.6 (20506), and Classic Era 1.15.9 (11509). Dropped Cataclysm Classic (40402), superseded by MoP Classic.

Fixed

  • Retail / Midnight: Repositioning the action bars no longer taints the UI. An insecure :SetPoint on the Edit Mode system frames used to poison the Edit Mode enter pass — blocking logout ("action blocked" on the game menu), blocking ClearTarget, and throwing a secret-value error on the party frames when Edit Mode opened. Positioning now goes through the Edit Mode layout instead, leaving those paths clean.

[3.0.2] - 2026-09-06

Fixed

  • Classic Era / TBC Anniversary: Fixed action bar taint after zoning in/out of a dungeon, which blocked right-click (self-cast) on action buttons with a "blocked from an action only available to the Blizzard UI" popup until reload. The IsInDefaultPosition overrides on MultiBarBottomLeft/MultiBarBottomRight (added in 3.0.1) replaced a secure Edit Mode method with an insecure closure; on PLAYER_ENTERING_WORLD, Edit Mode's secure per-bar layout reconciliation called it and tainted the action bar setup path. Removed both overrides; skipAutomaticPositioning remains to hold the layout.
  • Classic Era / TBC Anniversary: Fixed the bottom-right action bar (MultiBarBottomRight) 2×6 layout losing its second row (buttons 7–12) off the bottom of the screen after toggling the bar off and on. The frame was pinned to bar 2 by its top edge (TOPLEFT→TOPRIGHT) while its buttons hang from the frame's bottom, so when Edit Mode re-sized the frame to two rows on toggle, the top-pinned frame's bottom dropped and took the buttons with it. Anchored the frame by its bottom edge (BOTTOMLEFT→BOTTOMRIGHT) instead, so it grows upward and both rows stay in place.

[3.0.1] - 2026-07-30

Fixed

  • Classic Era / TBC Anniversary: Action bars no longer drift out of position during combat. The IsInDefaultPosition overrides on MultiBarBottomLeft and MultiBarBottomRight — which stop UpdateBottomActionBarPositions from clearing and resetting their anchors via the secure FramePositionDelegate — were lost when the retail support rebuild reorganized the action bar files, reintroducing the drift originally fixed in 2.4.1. They are restored in actionbars_classic.lua.

[3.0.0] - 2026-07-23

Changed

  • Consolidated Classic Era and TBC Anniversary into single _classic.lua files. Classic Era 1.15.9 now shares the same UI engine as TBC Anniversary 2.5.6, so all five *_anniversary.lua files are removed and their logic merged into the *_classic.lua counterparts with dual guards (WOW_PROJECT_CLASSIC + WOW_PROJECT_BURNING_CRUSADE_CLASSIC).
  • Removed Pixel Perfect option. The scaling option has been removed from the options panel and saved variables — modern WoW clients handle scaling natively.
  • XP bar text toggle no longer requires a reload. The "Experience Bar Text" option now applies immediately.

Fixed

  • Classic Era: XP/reputation bar now works on Classic Era — StatusTrackingBarManager was previously hidden in core.lua, preventing the bar from displaying. It is now preserved and repositioned/resized to match the BfA art.
  • Classic Era: /bfa slash command fixed — Settings.OpenToCategory now receives the numeric category ID from category:GetID() instead of a string.
  • Classic Era: Secondary status bar (reputation) hidden when not at max level to prevent it from stacking behind the action bar art.
  • Classic Era: XP bar repositions correctly after exiting Edit Mode via EDIT_MODE_LAYOUTS_UPDATED event.

[2.4.2] - 2026-06-12

Fixed

  • Classic Era: Fixed hunter pet bar overlapping MultiBarBottomLeft — anchored PetActionBarFrame above its reference bar (pet BOTTOMLEFT → reference TOPLEFT) instead of below it, switching the reference between MultiBarBottomLeft when Bar 2 is shown and MainMenuBar when it is hidden so the pet bar drops to fill the gap
  • Retail engine: Fixed MultiBarBottomLeft combat drift — overrode IsInDefaultPosition to return false on managed bars so UpdateBottomActionBarPositions skips them entirely during combat, preventing ClearAllPoints() + SetToLayoutAnchor() from resetting anchors that insecure addon code cannot override until combat ends

[2.5.0] - 2026-05-19

Added

  • Modern retail / Midnight support (interface 120005, WOW_PROJECT_MAINLINE). New *_retail.lua code path ported to the rebuilt Midnight 12.0 UI: main bar MainActionBar (buttons nested in MainActionBarButtonContainer1..12), gryphons via MainActionBar.EndCaps.LeftEndCap/RightEndCap, default bar art (MainActionBar.BorderArt, atlas UI-HUD-ActionBar-Frame) hidden and replaced with the BfA art, micro menu via MicroMenuContainer, bags via BagsBar (incl. the reagent bag), XP/rep anchored+sized via StatusTrackingBarManager with the BfA backdrop. Forces the BfA layout over Edit Mode (skipAutomaticPositioning + SetPoint hooks + EDIT_MODE_LAYOUTS_UPDATED + C_Timer.After(0) deferral, combat-guarded).

Changed

  • Three-way engine split. The old *_retail.lua files actually targeted the TBC Classic Anniversary engine (interface 20505), not modern retail. They are renamed *_anniversary.lua with logic untouched (still known-good on 20505) and a precise positive guard WOW_PROJECT_ID ~= WOW_PROJECT_BURNING_CRUSADE_CLASSIC. The *_retail.lua namespace now holds the genuine modern-retail (Midnight) port. All guards are now positive per-engine.
  • core.lua made nil-safe for MainMenuBar (does not exist on Midnight) and no longer hides StatusTrackingBarManager on Mainline (the Midnight XP/rep path repurposes it).
  • TOC interface updated 120001 → 120005; all *_anniversary.lua / *_retail.lua files registered.

Known limitations

  • Midnight XP/rep reskin covers position/size + BfA backdrop only; Blizzard's default status-bar textures are not yet stripped (the Midnight StatusTrackingBarManager internal structure differs from 20505 and needs a deeper pass).
  • Midnight bar pixel offsets are ported from the Anniversary layout and may need visual tuning (Midnight's default bar width differs).

[2.4.1] - 2026-03-11

Fixed

  • Retail engine: Fixed MultiBarBottomLeft shifting left during combat — set skipAutomaticPositioning = true on managed bars to prevent UIParentManageBottomFrameContainer from resetting their anchors to UIParent on bar visibility changes during combat
  • Retail engine: Fixed StanceBar anchor point from BOTTOMRIGHT/TOPRIGHT to BOTTOMLEFT/TOPLEFT to match PetActionBar positioning logic

[2.4] - 2026-03-04

Fixed

  • Retail engine: Action bar, MultiBarBottomLeft/Right, pet bar, and stance bar now position correctly

  • Retail engine: Added ClearAllPoints() before all SetPoint() calls on Edit Mode-managed bars, preventing conflicting anchors

  • Retail engine: MultiBarBottomRight 2-row wrap now targets MultiBarBottomRightButtonContainer frames (correct retail API) instead of individual buttons

  • Retail engine: Repositioning is now reactive — hooksecurefunc on bar SetPoint and the EDIT_MODE_LAYOUTS_UPDATED event reapply layout whenever Edit Mode or the game engine moves bars

  • Retail engine: Combat handling improved via PLAYER_REGEN_ENABLED event to apply deferred layout changes after leaving combat

  • Retail engine: Stance bar global corrected to StanceBar (retail) vs StanceBarFrame (Classic Era)

  • Classic Era: Adjusted micro button and backpack button vertical positions (y: 4→0 and y: 47→43) for better alignment in the bottom-right corner

  • Retail engine: Fixed MultiBarBottomRight anchor point from LEFT/RIGHT to TOPLEFT/TOPRIGHT — incorrect anchor caused the frame to drift lower than expected after each hide/reshow cycle

  • Retail engine: Fixed Lua error (abs(nil)) when toggling Bottom Left Bar — PetActionBar was left without any anchor after ClearAllPoints(), causing Edit Mode's layout calculation to fail; it now always receives a SetPoint

Known Issues

  • Retail engine: XP/reputation bar positioning is not yet functional (in progress)

[2.3] - 2026-03-04

Added

  • Retail engine support (interface 20505). The addon now loads and functions on both Classic Era and retail engine servers.
  • xpbar_retail.lua: Uses C_Reputation.GetWatchedFactionData() for reputation tracking (retail engine API). Max level defaults to 70.
  • micromenu_retail.lua: C_Timer.After(0) deferral on all micro button hooks to prevent taint when Edit Mode exits. Loop skips SocialsMicroButton (hidden in BFAUI on retail).
  • actionbars_retail.lua: C_Timer.After(0) deferral on PLAYER_ENTERING_WORLD to counteract Edit Mode overriding bar positions. Explicit anchoring of MultiBarBottomLeft, MultiBarBottomRight, and PetActionBar (retail engine does not auto-position these). MultiBarBottomRightButton7 wrapped below button 1 to produce a 2×6 layout (TOPLEFT relative to MultiBarBottomRightButton1.BOTTOMLEFT).
  • Bag buttons (MainMenuBarBackpackButton, CharacterBag0-3Slot) raised to HIGH frame strata so they render above action bar art frames on retail.

Changed

  • Codebase refactor: core.lua is now a lean entry point (version detection, saved variables, UIHider/HideFrame, texture cleanup). All feature logic has been split into separate files following Bartender4's self-guarding file pattern — each file returns immediately if the wrong client is detected.
    • options_classic.lua / options_retail.lua — slash commands, Settings API, static popups, pixel perfect scaling, gryphon hiding
    • xpbar_classic.lua / xpbar_retail.lua — XP/reputation bar positioning and display logic
    • micromenu_classic.lua / micromenu_retail.lua — micro menu repositioning, latency bar, bag layout
    • actionbars_classic.lua / actionbars_retail.lua — all action bar, pet bar, and stance bar positioning
    • bags_classic.lua / bags_retail.lua — bag space indicator
  • Classic Era uses PetActionBarFrame (correct global name for 1.x); retail uses PetActionBar.
  • micromenu_classic.lua: Micro button loop changed to #MICRO_BUTTONS-1 and skips GuildMicroButton (hidden in BFAUI on Classic Era).
  • actionbars_classic.lua: InitializeBars anchors MultiBarBottomLeftButton1 explicitly to MultiBarBottomLeft at offset (0, -6). This fixes a misalignment that occurred when Warriors switch stances — the game resets MultiBarBottomLeft to {'BOTTOMLEFT', 'ActionButton1', 'TOPLEFT', 0, 17} on each stance change.
  • actionbars_classic.lua: MultiBarBottomRight positioned at ("LEFT", MultiBarBottomLeft, "RIGHT", 43, -6). Page arrow and page number anchors moved outside the InCombatLockdown() guard so they are always set in ActivateLongBar.

Fixed

  • core.lua: StaticPopup_Show(WELCOME_POPUP) corrected to StaticPopup_Show("WELCOME_POPUP") — the variable was nil, causing a Lua error on the first login of a new character.
  • core.lua: BottomRightBarAlpha was incorrectly set from the BottomLeftBar saved variable (copy-paste bug). MultiBarBottomRightButton keybind visibility was always driven by the BottomLeft setting instead of BottomRight.

[2.2] - 2026-02-10

  • Fixed an issue where the options panel was not properly loaded.
  • Fixed the button linking to Blizzard action bar settings.

[2.1] - 2026-01-26

  • Fixed XP bar not hiding at level 60 (max level).
  • Migrated options panel to WoW's Settings API (Settings.RegisterCanvasLayoutCategory). Options accessible via /bfa or Game Menu > Options > AddOns.
  • Fixed reputation bar display — can now show reputation progress when a faction is tracked.

[1.12] - 2025-10-24

  • Fixed errors to make the addon work on WoW Classic Anniversary servers (client 1.15.8).

[1.11]

  • Added free bag space count on the backpack button.
  • Potential fix for XP bar visibility.

[1.10]

  • Updated art assets to match current BfA artwork.
  • Added option to hide gryphons on the main action bar.

[1.09]

  • Fixed frame strata being too low for the XP bar.

[1.08]

  • Changed MicroMenuArt texture to a shorter width (three slots removed).
  • Fixed QuestLogMicroButton placement/sizing for characters below level 10.
  • Small fix to pixel perfect scaling for a bug present in 8.1/Classic.
  • Cleanup and refactoring.

[1.07]

  • Modified to restore the BfA UI to WoW Classic. Removed retail-only code.

[1.06]

  • Objective Tracker now positions correctly beneath Blizzard Arena Frames.
  • Vehicle Seat Indicator positions correctly when Objective Tracker or Arena Frames are visible.
  • Pixel Perfect Mode fixed.
  • Refactored code.

[1.05]

  • Enabling Right Bar while Right Bar 2 is disabled now enlarges and repositions the Right Bar.
  • Fixed visual issue where the Artifact bar moved randomly during battlegrounds.
  • Fixed stance bar positioning for single stance when Bottom Left Bar is hidden.
  • Fixed Exhaustion Tick not repositioning correctly on XP bar resize.
  • Fixed Vehicle Seat Indicator appearing over the Objective/Quest frame.
  • Refactored code.

[1.04]

  • Fixed visual issue when unequipping artifact weapon at max level.
  • Fixed visual issue when logging in at max level with no artifact weapon equipped.

[1.03]

  • Fixed Pet ActionBar positioning and art when Bottom Left ActionBar is hidden.
  • Fixed [ADDON_ACTION_BLOCKED] errors — addon now only calls protected functions outside of combat.

[1.02]

  • Recreated Pixel Perfect Mode; now works on resolutions above 1080p.

[1.01]

  • Fixed issue where the artifact bar appeared on UPDATE_EXHAUSTION event for levels 98–109.

This mod has no additional files