Load order is defined in CombatMode/Embeds.xml (included
from CombatMode/CombatMode.toc).
| Folder | Role |
|---|---|
| CombatMode/Libs/ | Embedded libraries (LibStub, Ace3, LibEditMode, …); treat as vendored code per .cursor/rules/combatmode-vendored-libs.mdc. |
| CombatMode/Constants/ | Static tables and constants consumed by runtime modules (frame watch tables, radial data, reticle data, etc.). |
| CombatMode/Core/ | Runtime behavior modules: addon lifecycle + dispatch, dedicated free-look controller, crosshair/reticle targeting, click overrides, cursor unlock, healing radial, plus supporting modules (animations, interaction HUD, macro builders, addon bar resolvers). |
| CombatMode/Config/ | AceConfig option tables (Config*.lua), shared UI helpers (ConfigShared.lua), assembly (ConfigCategories.lua → CM.Config.OptionCategories), in-game changelog (ConfigChangelogData.lua + ConfigChangelogPanel.lua; body synced from CombatMode/CHANGELOG.md via scripts/sync-changelog-to-lua.ps1), plus standalone editors: Reticle CVar (ReticleCVarEditorData.lua, ReticleCVarEditorPanel.lua; account overrides in CM.DB.global.reticleTargetingCVarOverrides, merged at runtime via Core/RuntimeCVarManager.lua) and Targeting Macro Prelines (TargetingMacroPrelinesEditor.lua). |
| CombatMode/UI/ | Non-AceConfig client UI (e.g. LibEditMode crosshair registration and preview). |
| CombatMode/assets/ | Art and title textures referenced by the TOC and UI. |
- CombatMode/Libs — dependency order preserved in
CombatMode/Embeds.xml. - CombatMode/Core/Runtime.lua — must run first so
AceAddon:NewAddon("CombatMode")exists. - CombatMode/Constants/ — constants/data modules initialize
CM.Constantsand must load before feature consumers. - CombatMode/Core/ — remaining runtime scripts. Runtime “submodules” loaded immediately after constants:
- Core/RuntimeEventRouter.lua (event routing +
_G.CombatMode_OnEvent) - Core/RuntimeCVarManager.lua (all CVar-writing helpers; reticle preset +
reticleTargetingCVarOverrides→CM.GetEffectiveReticleTargetingCVarValues) - Core/RuntimeBindingQueue.lua (combat-safe deferred binding updates)
- Core/RuntimeBootstrap.lua (startup sequence)
Then feature modules, including Core/FreeLookController.lua for mouselook transitions, and CombatMode/UI/CrosshairEditMode.lua after CombatMode/Core/Crosshair.lua (Edit Mode uses
CMAPIs).
- Core/RuntimeEventRouter.lua (event routing +
- CombatMode/Config/ —
ConfigShared.luafirst (definesCM.Config.OptionsUI), then ConfigChangelogData.lua and ConfigChangelogPanel.lua (before ConfigAbout.lua), then each remainingConfig*.lua. Standalone editors load inEmbeds.xmlbefore the category that opens them (e.g. ReticleCVarEditor + TargetingMacroPrelinesEditor before ConfigReticleTargeting.lua), then ConfigCategories.lua (wiresCM.Config.OptionCategories). - Frame —
CombatModeFrameXML inCombatMode/Embeds.xml; scripts call globals defined in CombatMode/Core/Runtime.lua.
- Slash:
/cm,/combatmode,/undocm(Core). - Options: Blizzard settings → Combat Mode; trees built from
CM.Config.AboutOptionsandCM.Config.OptionCategories. - Changelog (in-game):
CM.Config.ShowChangelog()(About → View Changelog, or auto after version bump viaCore/Runtime.lua+CM.Config.MaybeShowChangelogOnNewVersion); body stringCM.Config.ChangelogTextinConfig/ConfigChangelogData.lua, maintained fromCombatMode/CHANGELOG.mdwithscripts/sync-changelog-to-lua.ps1.