This week was all battle system work: defining rules, tightening equations, and locking in pieces that make combat feel intentional instead of placeholder. No video this time, just an update.
Deciding Before Coding
I wrote out every open question as a working doc: the current state, the real decision, and the the options. Defense model. Regen. Turn timing. Hit and miss. Elements. Status logic. Enemy behavior. Revives.
One rule surfaced immediately and steered everything that followed: every stat should matter. Resolve stopped being the magic defense dump stat and picked up multiple jobs. Fortitude, Aptitude, and Presence gained second and third responsibilities. Even Might, the pure damage stat, now sharpens accuracy. By the time I started coding, nothing was a surprise because the arguments were already settled.
The Round Clock
The battle runs on a speed-driven clock where fast fighters act twice before slow ones move once. Great for pacing, terrible for timing things like poison, regen, and buff durations.
So I defined a round: a round ends when every living combatant has acted. That boundary is where damage-over-time burns, buffs tick down, and everyone recovers a small amount of HP, SP, and MP, each scaled off Fortitude, Resolve, and Aptitude. Moving statuses off “your turn” and onto “the round” was the riskiest refactor, so I tackled it first.
Hit, Graze, Miss
Attacks can finally miss, but not in the flat feel-bad way. Accuracy, a blend of offense, speed, and presence, contests the target’s Evasion as a ratio. Slippery enemies stay slippery whether you’re level 5 or 85.
As evasion rises, hits degrade into grazes before becoming full misses. Four outcomes on every swing: miss, graze, hit, crit. A cluster of statuses snapped to life the moment accuracy existed: Blinded, Windswept, Focus, Evasion Up, even Haste’s downside.
The Five-Fold Wheel
Elements are now a proper wheel: Fire, Ice, Wind, Lightning, and Earth, with its own status, Petrified, which roots you in stone and kills your ability to dodge. Enemies can resist, take extra, be immune, or even absorb an element and heal from it. Weapons and skills carry elements, and the affinity tags on monsters finally matter.
Statuses That Bite, and Enemies That Bite Back
Hostile statuses no longer land for free. Each one rolls against Fortitude or Resolve depending on its nature, and skills have their own apply chance. High Resolve bosses shrug off stuns that would flatten a common mook.
Enemies also became real combatants. They use the same skill system the party does, spend resources, and act based on behavior tags: brutes swing, casters open with spells, supports mend allies, bosses lean on their full kit. They can land multi-hit, elemental, status-inflicting, and AoE attacks through the same pipeline the player uses.
The Long Tail
I filled in the edges: true AoE that rolls each target independently, Stagger which slows enemies and opens them up to crits, Confused which can flip attacks onto their own side, Frightened, Silenced, morale buffs, and Heartcall Decoction, a revive item that pulls a fallen ally back at one-third HP.
Where It Stands
The combat system is done. Defense that matters, a round clock everything ticks on, a four-tier hit model, a five-element wheel, resisted statuses, real AoE, enemies using the same tools you do, and a revive that gives you a way back from a bad turn.
What’s left is content: signature skill kits for each character, hand-built enemy stat blocks for each zone, and a couple flagged follow-ups like Phase’s deeper stages and weapon infusion. Next, I’ll keep pushing these pieces forward while starting on the tilemap system so I can finally build the world instead of running everything in a placeholder test environment.