Caelumora — v2.1.0: Faction Presence Redesign
Hey all! v2.1.0 is the headline feature — the territorial conflict UI gets a full redesign with two role-based panels and a click-to-commit army composer. But because this is also the first devlog you’re reading if you’ve been away for a while, the rest of this post catches you up on everything that’s shipped since v1.7.2 — about three weeks of work spread across 14 versions. Skip ahead to the section that interests you.
Your save continues seamlessly through every version below. No migrations break, no progression resets.
🆕 What’s New in v2.1.0 — Faction Presence Redesign
The Territory Status panel that lives on the right rail of every area was a 572-line all-in-one UI that mixed presence bars, stage rails, conflict badges, area effects, tax notices, AND combat operations into one vertical scroll. It was complete but cluttered — Conflict and Warzone players who actually had decisions to make had to scan past three sections to reach the operation controls.
Now it’s two role-based panels, swapped by a 200ms crossfade so the transition reads as one component:
AreaConflictPanelis the default. A single relational tug-of-war bar with your class icon on the left and the rival faction icon on the right, an in-bar projection that lights up when you commit units, a continuous-gradient stage rail with a “Tension N / CONTESTED” needle callout, an inline “Also Present” minor-faction chip row with strategy verbs (pressing/holding/observing), and a “What to do:” guidance line tinted amber.AreaCombatOpsPanelmounts when there’s a stationed rival army and the area is in Conflict or Warzone bracket. Threat-styled owner header with a pulsing “Hostile” pill, a stance toggle (Build presence / Run offensive), a horizontal army composer with click-to-commit unit ticks (default = full commit), a 3-cell cost grid (Presence cut / Reputation / Spoils) that updates live as you toggle, and a full-width Launch Offensive button with a right arrow.
The composer is the headline mechanic change: you can now commit any number of units from 1 to the full army instead of being forced into all-in. Default is full commit because momentum stacks within a single op (compound damage) and completion gold scales with units committed — but if you’re under-leveled and worried about dying, you can dial down and run a smaller op for less risk. The cost grid is honest: the slice now respects the commit count, so the −20 reputation preview at 4-of-10 is exactly what you’ll pay (it used to fight all 10 anyway — that’s fixed).
Active operations stay visible and retreatable even if the bracket cools out of Warzone mid-fight, so you’ll never be stranded with a war running and no UI to retreat from.
The Insano Economy Rebalance (v1.7.2 → v1.7.4)
Insano mode used to be a strict gold-loss spiral mid-game — there just wasn’t enough income to cover assistant upkeep + tax. Three patches fixed that:
- Per-action gold now intrinsically pays out from combat, exploration, gathering, and processing, scaled by skill level. The mid-game (lvl 21–60) gold income across gathering/processing/combat/agility went up roughly 1.5–2×.
- Starter gold seeded for lvl 5–20 combat & exploration so the early-game 0g dead zone is gone.
- Prestige’s Golden Touch (the
goldMultiplierperk) now boosts skill-tree and gemgold_on_actionbonuses — previously it only buffed sell prices, leaving most of its potential value off the table. - Enchantment’s
goldGainproperty now applies to per-action gold, not just sells. - Processing gem pools (smithing/cooking/fletching/crafting/enchanting/jewelry) stopped rolling
gold_on_action, refocusing them on yield and XP — combat/gathering/exploration gems keep gold-on-action as their identity.
Net result: Insano is now a meaningful build choice instead of a tax run.
🔧 Enchant Workflow + Sound Cleanup (v1.8.0 → v1.8.1)
The Enchant Equipment workbench used to demand a dance: craft a regular item → bank it → switch to the Enchant tab → pick the gear → enchant. Now there’s a “Convert Equipment” picker right inside the workbench that takes regular un-enchanted gear and lets you enchant it without leaving the tab. There’s also three new tool enchant recipes at Enchanting lv 25 — enchant_hatchet, enchant_pickaxe, enchant_fishing_rod — so gathering players have access to the same enchant ladder combat players get.
Same window: seven stub 219-byte MP3s that had been quietly throwing Chromium decode errors on tab/purchase/sell/prestige sounds got replaced with real audio. And dungeon clear rewards now route through the unified drop system, so pity tracker, Fortune scaling, the Rare Drop Table, and Chronicle logging all participate. A 🗝️ dungeon_cleared Chronicle card shows clear time, waves cleared, XP, BP, and every drop.
🏗️ Architecture Sprint — Bundles N1 through N4 (v1.8.2 → v1.8.6)
Five back-to-back bundles spent on internal cleanup. The kind of stuff that doesn’t show up in screenshots but compounds over months:
- Title selector auto-collapses after picking. Structure cards in Areas show per-tier buff values on hover. Skill Tree’s WikiBookmark deep-links to the Skill Trees wiki section. Arcane Satchel backpack actually renders artwork instead of a 404 silhouette.
- DungeonPanel and AreaHeader delegate domain logic to dedicated hooks — pure presentation in the components, testable derivation in the hooks. Action-completion flow is now documented at the top of the actions slice.
- AreaConflictPanel and the faction simulation share a single source of truth for action-exclusion lists (the
offer_bones-style filter) — the drift bug class that caused display rates to disagree with actual gameplay is eliminated. New parity test suite across 152 tests catches structural drift between online/offline bonus paths and between sim and display. - EnemyGrid, BankPanel, InventoryPanel, SettingsModal, and WikiSystemsTab — five of the largest untested components — now delegate their inline derivation logic to pure utility functions with 114 new unit tests across the bundle. Save export/import goes through one helper pair across every surface.
The test count went from ~4900 at v1.7.x to 5097 at v1.8.6. Engine-level hygiene that future feature work will benefit from invisibly.
✨ Crystalline Refresh — Full Visual Rebuild (v2.0.0)
This is the one most players noticed visually. A full visual rebuild on top of the v1.8.6 baseline — no balance changes, no new systems, no new content. The game just looks different now:
- Crystal-faceted modal rims (faintly brighter top-left, fading bottom-right) on every modal.
- Unified tab strips across Character, Bank, Shop, Wiki, Faction Shop, Prestige, and Settings — all using Cinzel uppercase labels with a crystal underline when active.
- Tinted chip buttons replace ~300 inline button styles. One vocabulary, parameterized by accent color: crystal for defaults, amber for warnings, red for danger, purple for class, emerald for race, blue for info.
- The Prestige Points counter is now a “hero” surface — the single carved card that earns the full signature treatment per panel.
About 40 component files touched. CSS hex literals normalized to design tokens. The previous look isn’t gone — it just feels more cohesive now.
🧹 AreaModal Retirement + Tier 1–3 Polish (v2.0.1 → v2.0.3)
Three small patches stitched between the Crystalline Refresh and v2.1.0:
- AreaModal removed in v2.0.1. AreaView already covered every render concern (discovered/unlocked indicators, structures, conflict panel, travel CTAs) — the modal was a 378-line redundant surface. Two callers that previously opened it (the dungeon panel and the reputation tab) now navigate to AreaView with the target area pre-selected, which is a UX upgrade since both used to open the modal with no focus context.
- 9-item bundle Tiers 1 & 2 in v2.0.2 + v2.0.3. GemAutoRulesPanel collapsibles for Auto-Salvage and Auto-Lock, sidebar Discord link, denser modal backdrop, opaque WikiEntryCard. Combat now plays a sound on every landed player attack (style-keyed: melee/ranged/magic) and on every incoming enemy hit. Quest objectives that require leveling a capped skill substitute to
complete_actionsinstead — no more unsolvable quests for endgame players. - Operation death penalty in v2.0.3. Dying mid-operation now has real consequences: completion gold is forfeited, the targeted faction takes a rep hit, that faction’s operations go on a 5-minute cooldown, and auto-eat suspends for 30 seconds so you don’t get pulled straight back into food consumption while recovering.
🚧 What’s Next
Lining up for the next stretch:
- Audio adapter follow-through (BACKLOG #197) — proper sound abstraction layer so the placeholder combat hits get real assets
- Drag-and-drop inventory slot reordering (deferred from the unified-inventory spec)
- Ongoing balance tuning based on community feedback on the partial-army composer
If you’re playing v2.1.0 and have thoughts — especially on whether the partial-army composer feels like a real choice or just a UI tax — please pop into the Discord. The feedback loop is genuinely tight; previous suggestions have shipped within days.
💬 Join the Caelumora Discord — patch notes, balance discussion, bug reports, and the occasional dev stream.