12.1.0.10
What's new
12.1.0.10
Added
- add: WoW Forever support. Aurora loads and skins on the Forever beta (1.60.x, client folder
_classic_beta_, interface16001). Despite the 1.x version this is not a classic port: Blizzard built Forever on the Mainline UI architecture with aCamelotgame overlay, so it is handled as a Mainline-family flavor.private.isForeveris gated on the interface range (16000–19999) rather than onWOW_PROJECT_ID, which reports Mainline there, andAURORA_DEBUG_PROJECT = 60selects it. The Forever client also matchesAurora_Mainline.toc, so Aurora has no TOC of its own for the flavor: that one file declares## Interface: 120100, 16001and picksAddOns_Mainline.xmlor the generatedAddOns_Forever.xmlper line, with[AllowLoadGameType standard]against[AllowLoadGameType camelot][ExcludeLoadGameType standard, classic]— the extra Exclude is needed because a client that does not know thecamelottoken treats an unknownAllowLoadGameTypeas a match. Camelot-only skins live inBlizzard_X\Camelot\besideMainline\, mirroring Blizzard's own paths. Nothing here changes retail [forever] - add: the Camelot character panel —
CharacterFrame(six mode tabs and the right-hand pane host),PaperDollFrame(ranged and ammo slots, gear-slot border art hidden by atlas so the bare ammo slot is covered, the model control bar),ReputationFrame,SkillsFrame,PVPRankFrame,BankFrame(page tabs, no TabSystem) andEquipmentFlyout(Camelot's new four-direction popout button). EveryCharacterFrameSidePaneTemplatebuilds its contents from oneFramePoolCollectionof four row templates, so the category and icon rows are skinned once inCharacterFrame.luaand that covers the reputation, skills, currency and PvP rank panes together [forever] - add: the three Forever-only addons.
Blizzard_Statistics— mode tab 6 of the character panel, which retail has no counterpart for since achievements absorbed statistics.Blizzard_LegacySystem— the Progress Track window: frame, side tabs, reward track and challenge page; the talent-style legacy tree page is deliberately left stock, because its contents inheritTalentButtonSquareTemplateand friends, which Aurora skins on no flavor, and doing it here would mean writing the shared talent-tree treatment as a side effect of a Forever-only addon.Blizzard_SwingTimer— the main-hand, off-hand and ranged bars; they are Edit Mode systems, so nothing re-anchors them [forever] - add: the remaining Camelot surfaces — the classic pet journal and
PetStableFrame(Blizzard_StableUIsplits per flavor), the professions book as a page insideProfessionsFrame(Camelot's TOC excludes the standaloneProfessionsBookFrame) plus the unlearn button, the crafting schematic form, theTokenDetailFrameside pane, collections side tabs and the count-style toy tracker, the bag bar and the micro menu bar art, and Camelot's nameplate level badge. The badge is skinned with widget calls only — no Aurora backdrop: that frame belongs to the restricted nameplate system, whereBase.SetBackdropwrites BackdropMixin methods onto the frame table and the taint resurfaces as secret-number errors on the next nameplate reuse cycle. It is gated onselectedBorder, which exists only in the Camelot copy, so retail's badge is untouched [forever] - add:
/aurora skinaudit— lists the skins whosepcallfailed this session, with the client build and interface version. Skins run behindpcall, so a skin written against frames a client does not have fails silently; this turns a login on an unfamiliar flavor into a work list, and it is how the Forever pass was verified wave by wave [shared] - add:
dev/forever_report.py, regenerating the Camelot-vs-Mainline gap analysis from the two source trees and the manifests, with Camelot files in collapsed addons surfaced in section 3.dev/updatexmls.pygrew two report sections of its own: section 9 finds skin templates a flavor calls but never registers — which is what surfaced the nil calls fixed below, and which ignores Lua comments so disabled calls stop reporting — and section 10 lists positional child and region picks (select(n, ...)against a frame's children) for review, those being exactly what breaks when a client adds a child. Namedhooksecurefunctargets the flavor's own tree does not define are flagged too, and each Camelot manifest entry is now markedadditiveorreplacement: the distinction decides whether a Camelot file needs a guard in the existing Mainline skin or a skin of its own [shared] - add:
Skin.UIPanelArrowDropdownButtonTemplate— a 15x16 arrow dropdown whose whole look is one goldcommon-dropdown-a-buttonatlas. Aurora had no skin for it, so callers reached forSkin.DropdownButton, which is written againstWowStyle1DropdownTemplateand leaves the gold arrow alone; on retail that is the yellow button beside the spellbook search box [all] - add:
Skin.ModelSceneControlFrameTemplate— the zoom/rotate/reset bar above a model scene. Camelot shows it on the character panel where retail does not, so it sat there as fivecommon-button-square-graybuttons over the model [all]
Fixed
- fix: every bag after the first lost its skin.
ClickableTitleFramewas removed fromContainerFrameTemplate— a deletion, not a rename; bags drag at frame level now — and the line re-anchoring it had been throwing, silently, behind the skinpcall, taking the rest of the function with it. Removing it exposed a second fault underneath:Skin.ContainerMoneyFrameTemplateis called by the backpack skin and had never been defined, on any flavor, so it had been killing that function since it was written and only the first throw hid it. Both are fixed. The money frame delegates toSkin.SmallMoneyFrameTemplate, which Aurora deliberately no-ops, rather than no-opping here, so bags follow if money frames are ever skinned [mainline/forever] - fix: the pet bar's auto-cast decorations were unskinned, and every line after them in that skin function stopped applying. Blizzard replaced the
AutoCastabletexture and theAutoCastShineframe with anAutoCastOverlayframe holding.Cornersand.Shine; the old field names survived in the skin and had been throwing behind thepcall. The original intent is carried over — the overlay covers the button so its corner art lands on the square button's corners, and the rotating "ants" are pulled inside the button edge instead of overhanging it by 5px [mainline] - fix: the spellbook category tabs kept Blizzard's gold plate.
SpellBookCategoryTabTemplateinheritsTabSystemButtonTemplate, not a panel tab, andInit()puts it in square icon mode — but only the text half ofTabSystemButtonArtTemplatewas ever handled, so routing these throughSkin.PanelTabButtonTemplateskinned art they were not showing. Icon tabs now get their own treatment: square art zeroed, icon cropped and fitted, sized 32x32 to match Blizzard's tab height. It is applied from the tab system's hooks rather than once at skin time, because the tab pool hands the same button back onRemoveAllTabs/AddTaband a button skinned while its icon was still textureless is locked out of ever being treated as an icon tab byIsSkinned— measured on the spellbook, of six pooled tabs four were right, one was raw 44x32 and one was sized but unfitted. Same template, same bug on retail and Forever [mainline/forever] - fix: the profession recipe category headers were never actually skinned. The hook zeroed
LeftPiece/RightPiece/CenterPiece, keys that exist nowhere inListHeaderVisualTemplate— its three-slice isLeft/Middle/Rightwith aHighlightLeft/Middle/Rightset over it. Not a Camelot difference: the template is byte-identical in both trees, so this was equally broken on retail. The highlight trio keeps its job and loses Blizzard's art. The crafting page's two Create buttons are skinned as well; they are built in Lua byProfessionsCraftingPageMixin:CreateControls, which runs after this skin, so the existing guards had simply found nil and skipped them [all] - fix:
Skin.WowStyle2DropdownTemplatewas undefined — the one genuinely live call to an unregistered skin template, reached byBlizzard_HouseEditorfor the pet behaviour and customize-panel dropdowns, and killing the rest of that skin each time. It is aDropdownButtonlike the WowStyle1 ones, differing only in mixin and art, so it takes the same skin [mainline] - fix:
Skin.UIPanelScrollBarButtonhad likewise never been defined, although its callers expect it to leave a retexturable arrow at_auroraTextures[1]. Its only callers today are the Oribos scroll arrows, whose Blizzard templates are gone from every source tree; the skin is defined rather than the callers deleted, because Aurora dispatches skins dynamically in several files and "no static caller" is not proof of unreachable [mainline] - fix: the open-mail divider was hidden by region index —
select(9, ...), which counts the inheritedButtonFrameTemplateregions and does not hold on Forever, where it returned nil and took the rest of the mail skin with it. Both halves share one texture and are matched on it now, so the count no longer matters [mainline/forever] - fix:
ModelPreviewFrame's template close button was found at child index 4, an index that shifts on Forever, whereButtonFrameTemplategains four gamepad focus children (FrameGlow,LeftJumpHint,RightJumpHint,FocusJumpHint). The historical index stays the first guess, so retail behaviour is unchanged, and the search by shape runs only when it does not hold [all] - fix: side tabs showed a gold border around every icon and a glow that kept re-painting itself.
TabGlowAnimationloops the glow's alpha, soSetAlphaalone never stuck; the animation is stopped. The icon is masked into a tab silhouette bycommon-sidetab-maskand is now cropped square like every other Aurora icon — and re-cropped afterUpdateIconInterior, whichSetCheckedcalls last on every state change and which re-sets the texcoords to a shallower crop, leaving each icon's own bevelled edge showing. The selected and hover textures keep their roles and lose their tab shape [all] - fix: Frame-based progress bars no longer throw out of
Skin.FrameTypeStatusBar. Camelot'sColoredProgressBarTemplateis a Frame driving a masked fill through its mixin, with none of theSetStatusBar*API that function uses, so one such frame threw "SetStatusBarTexture is not a function" and took its caller's whole skin with it. They route to the newSkin.ColoredProgressBarTemplateinstead; on retail every caller passes a genuine StatusBar, so nothing changes there [all] - fix:
RatingMenuFrame's classic branch calledSkin.OptionsButtonTemplate, defined nowhere in Aurora and naming a Blizzard template that exists in no source tree — a fossil from an older client. The branch is unreachable as things stand, but it is pointed at the button skin the retail branch uses rather than left calling a nil [mainline] - fix: the skins retail shares with Camelot now tolerate Forever's trimmed frames, where before they threw on the first missing member and lost everything below it. Friends (no
WhoFrame, noFriendsFrameTab2, noWhoList_InitButtonhook, no trial-state hook), Inspect (noInspectFrameTab3, guarded paperdoll slots andInspectPaperDollFrame_OnShow), TokenUI (no currency popup), Mail (paging buttons resolved fromInboxFrame), TrainerUI (cost display fromClassTrainerFrame.money), Professions (no standalone book, no maximize button), the group finder (per-flavor tab and scrollbar templates, role buttons only when the template is registered),ScriptErrorsFrame(CloseButton, Forever's rename ofClose), the spec frame, the tracking button, the character-sheet hook, the parchment page textures, the filter dropdown and the transfer log toggle. Each is a guard or a per-flavor pick, so retail is unaffected [forever]
Changed
- chg: the shared
PaperDollFrameandReputationFrameskin bodies moved toSkin\shared\, with thin per-flavor callers underMainline\andCamelot\;Blizzard_StableUIsplits the same way, and the manifests point at the new paths. No behaviour change on retail [shared] - chg:
Skin.LargeSideTabButtonTemplateis now shared across five surfaces — the Camelot character panel's mode tabs, the bank page tabs, Professions, Collections and the Legacy system — and it crops the bank page tab icons itself rather than each caller doing it [all] - chg:
mainmenubardefaults on for Forever and stays off everywhere else. On retail the bar theming is redundant for most users, who run Bartender4 or Dominos; on Forever there is no such expectation, and the bag bar, micro menu and action bar end caps are all gated behind this one flag, so defaulting it off left three finished skins dead on that client [forever] - chg: the dev-only nil-frame warnings for
DropdownButtonandFilterButtonname the caller, and frames in addons Aurora does not skin are marked as not-a-gap in the Forever report so they stop showing as work [shared]
Known Issues
- On the 1.60.1 Forever beta (build 69913) the client never restores account-level SavedVariables, so
AuroraConfigis empty at every load and only the defaults apply. Confirmed by the Forever developers; not an Aurora bug. Whethermainmenubarshould default on for Forever permanently is a separate, still-open call [forever] - Camelot's gamepad addons are deliberately unskinned — 81 frames, 73 of them in
Blizzard_GamepadActionBars. None of it renders without a controller attached, so none of it can be verified; the gamepad focus children that leak into ordinary Camelot panels are handled where they matter. Revisit if a controller-using tester appears [forever] - The Legacy system's tree page renders with Blizzard's styling, as above [forever]
- The Camelot bank, and slot and pane positioning across the character panel, have had a static and skin-audit pass but no in-game walk-through [forever]
- The
ShouldShowMawBuffsguard added in 12.1.0.8 still owns a Blizzard global, and the 25%-of-taintLogcost measured for 12.1.0.9 is unchanged. The trade should be re-priced rather than left standing [mainline] - The world-event/scenario UI widgets still render with Blizzard's styling while that skin is gated [mainline]
- The
GameTooltip_InsertFrametaint described under 12.1.0.2 is unchanged [mainline]
Detailed Changes
This mod has no additional files
