The Abjuration sigil has a static number of wards no matter how much mana the sigil has.
Unlike other sigils, abjuration requires two mana per ward. This balance ensures offense/defense leans towards offense intentionally, so castles are not just invincible.
Though my wardCapacity
was configurable, I hadn’t handled reducing capacity past the current state. I added a setWardCapacity
function
that removed excess wards and updated the capacity.
public void updateAbjurationSigilMana(Entity sigilEntity) {
Sigil sigil = Comps.sigil.get(sigilEntity);
int wardCapacity = sigil.manaNodes / 2;
// sets total ward slots and removes excess wards that already exist.
setWardCapacity(sigilEntity, wardCapacity);
}
It might be a nice UX to always remove or use double mana from the sigil, but that adds complexity in destruction (one node at a time), so tabling that for later.
Teleport & Boarding
In the current teleport sigil design, mages spellbooks are swapped to a sigil specific set of spells. This design added some complications.
- How to do bulk teleports? Select mages and click teleport?
- What about teleport cooldown management? If it’s tied to a mage, harder to tie to a sigil.
- What about recall?
So based on the new evocation UI panel, I designed a new Teleport panel (placeholder icons, of course).
And rather than mages casting teleport as a spell, I added an explicit TeleportCommand
consumed by the
TeleportSigilSystem
that works on TeleportSigil
s and their current occupants.
Turning ~15 LoC into ~300…
But with this new approach, teleport can now handle multiple units at once, manage its cooldowns, and have
sigil mana requirements that Spell
s certainly wouldn’t have properly handled without tight coupling and janky code.
Similarly, recalling from teleport becomes a simple command with a cooldown.
Above, you’ll see that it requires 2 mana to perform local teleportation. That’s because a single mana only provides Mass Teleport charging. The intent is to unlock boarding by upgrading the Teleport Sigil from its initial rank 1.