v0.5.24-dev
A playtest-report pass. Almost every fix here is the same shape: a system
that worked correctly while the thing telling you about it did not.
Conviction decides it
Faith and Brave have scaled damage since the first commit, but gated exactly
three abilities — everything else in the blessing, affliction and talk catalogs
simply landed. An enemy's conviction had no say in whether they were slept,
charmed, stopped, blinded or struck undead. 49 abilities now roll for it.
It is the geometric mean of the two Faiths plus half the caster's MA, capped at
95 — nothing gated on belief is ever certain. Geometric rather than arithmetic
because Faith 0 and 100 are things the game can do to a unit (atheist and
faith pin them there at the cost of a whole ability), and an average lets a
Faith-90 caster still land on an Atheist'd target more than half the time,
refunding the turn that bought the immunity. MA is halved on a measurement, not
taste: gear is not optional, so the live range is 5–29 rather than the job
table's 5–18, and at full weight a geared caster hit the ceiling against a
devout target — the gate would have been inert for exactly the classes whose
kit it governs.
Item charges
The Apothecary's whole kit and the Ninja's thrown stock cost zero MP because
they are items — which left them costing nothing at all. Three each per
battle. Counted against the same tally the results board has kept since
v0.5.19, so charges inherit the whiff rule for free: a potion thrown at open
ground was never thrown, and a shuriken that misses is gone.
Durations that were only ever decoration
status_duration was threaded through five of the twenty-five status-applying
arms. The other twenty passed None — so a duration authored on Guard or
Protect compiled, registered, exported, rendered on a codex page and did
nothing. All twenty honour it now. Found by putting the registry in front of
Joe as a spreadsheet and watching which column he typed in.
Odin rides in as a skeleton warrior
odin joins lich as a real model rather than a painted plate. What a summon
does and what it holds now live in a table keyed by summon id, deliberately
not derived: nothing on an ability row distinguishes a swordsman from a caster
— both rows read MagicDamage, Dark, rare — so Odin cleaves and the Lich casts
because of what they are. Verified before the animation was written: both
KayKit skeletons ship weaponless, so a warrior given a two-handed chop and no
sword swings its bare fists.
Six eidolons arrive as themselves
Summon art has been a built-and-empty seam since v0.5.22 — every one of the
sixteen summons turned up as the same generic bloom, so Ifrit and Carbuncle
were the same apparition in different colours. Ifrit, Shiva, Bahamut,
Leviathan, Odin and Carbuncle now have painted plates, in the house style of
the job portraits. The other ten still take the bloom, which is the table
working as designed rather than a job half finished: a missing entry costs one
illustration, never the spell.
Each plate flares mid-attack, not at rest — a creature posing is a creature
that turned up and did nothing. The attack is body language only: no breath
weapon, no beam, no glow off the hands, because the engine already draws the
magic and tints it by the ability's element. A plate drawing its own would
double it up and fix in paint a colour the palette is entitled to change.
The damage forecast was swinging an empty hand
Hovering a target quoted a swing thrown with no weapon at all — no weapon
power, no class stat, no Brave sharpening. It misleads worst where it matters
most, because a weapon class chooses which stat the swing reads: a summoner
with PA 4 holding a staff swings on its MA of 26, and the forecast said 4. In
one playtest a Rending Reel previewed at about 21, landed for 159, and
killed its caster's own Chronomancer through the gap.
The number on the hover is now the number the hit deals. The forecast also
never applied a target's innate elemental weakness, which the resolver has
always applied on the very next line.
Petrify is as good as dead until somebody breaks it
It used to be a two-turn stun wearing a dramatic name — a unit petrified on
turn 17 was swinging again on turn 21. Now it takes the unit out of the fight
entirely: no turns, and it doesn't count toward its team still standing, so
petrifying the last enemy wins. It also doesn't wear off. The way back is a
Cleanse — Esuna, Remedy, any of them — which is what makes the harshest status
in the game fair.
A charge costs the turns it takes
Committing a charge used to cost nothing but the action slot: the caster kept
taking full turns while the spell wound up, which made charging strictly better
than casting instantly — same effect, bigger numbers, and you still got to
play. A charging unit is now simply out of the turn order until its cast lands,
exactly as an airborne dragoon already was.
And a dragoon comes down where it went up. Jump spends the action slot and
left the move slot open, so a samurai could leap, stroll three tiles, and
"crash down" wherever it had walked to. You can't walk in mid-air any more.
Aiming at open ground is your mistake
A whiff no longer refunds its MP. The refund was written for a starvation bug
whose real defect was the silence around it, and that was fixed two releases
ago — what remained was the game paying for misclicks. Whiffs now announce
themselves with a popup and a battle-log line, on instant and charged casts
alike. Pointing at something an ability genuinely can't affect is still a
refusal, and still costs nothing.
The AI stops blowing up its own team
One guard was wrong in both directions. It only ever asked whether the caster
was standing too close, so allies were never considered — a Geomancer dropped a
Sinkhole two squares away, killed its own thief, wounded its own Orator and hit
itself for 51, for zero damage to the other side. That one cast decided the
match. The same guard also vetoed any enemy standing near the caster, and the
AI only ever weighed two targets to begin with, so casters routinely found
nothing to do and shuffled a tile instead of casting.
Bots now read the true blast footprint — the same one the resolver uses — and
weigh every enemy they can see.
Better gear, more often
Ultimate gear now drops at 5% instead of 1%, and rare at 10%, taken out of
common. A one-in-a-hundred ultimate meant whole evenings without ever seeing
the top of the ladder; gear is rolled fresh every battle and never owned, so a
generous top end costs no permanent power — only a better story.
A living unit lying on the ground
The client took a hit's full damage off HP, including the part a barrier had
already eaten. A Bard on 63 behind a 25-point barrier took a 70-damage hit,
dropped to zero client-side, played its death animation and hung a skull over
its head — while the engine correctly had it alive on 18. The next sync
restored the HP, so it went on taking turns while lying on the floor.
The battle log now reads "hits Bard for 70 (25 absorbed, 45 to HP)", the client
no longer decides who is dead, and a unit that is alive is stood back up
whatever else goes wrong.
The results board
Now takes three quarters of the screen instead of a fixed panel a third of its
height, with each army on its own full-width row. A 3v3 with every unit's kit,
gear and ability breakdown no longer scrolls at all.
Hover tooltips on that board were also silently broken: an apostrophe anywhere
in an item or ability description — "restore an ally's HP", "a bard's relic" —
broke the tag it lived in, printing raw markup across the row and, worse,
swallowing whole skills off the line so a unit's kit simply looked shorter than
it was. Around two dozen descriptions carry one.
The live scoreboard (Tab) gained the HEAL column the results board has had
since v0.5.15.