Skip to content

Feature set 175. - #90

Merged
jackfperryjr merged 1 commit into
mainfrom
features-175
Aug 11, 2026
Merged

Feature set 175.#90
jackfperryjr merged 1 commit into
mainfrom
features-175

Conversation

@jackfperryjr

Copy link
Copy Markdown
Owner

Closes out the three items left open after #89: the characters side, Final Fantasy VIII, and the two MMOs.

Characters — the release prefix was an open wildcard

One article covers a character's whole career, so a spin-off's fields sit directly beside the numbered entry's. The prefix pattern accepted any tag, and whichever came first won:

Row stored actually from
Ashe, Penelo, Vaan, Balthier (XII) Time Mage, Dancer, Sky Pirate XII has no fixed jobs xiirw — Revenant Wings
Auron (X) Full Break, Dragon Fang, Shooting Star Bushido x2 cc — X-2 Creature Creator
Zack Fair (VII) SOLDIER Sword, Buster Sword… not playable in VII viicc — Crisis Core
Dark Kain, Golbez (IV) Dragoon, Lunarian no IV job ivtay — The After Years
Serah Farron (XIII) Starseeker, Ultima Arrow XIII-2 gear xiii2

Only a mainline tag is admitted now — ffvii, plus the remakes ffviir / ffviir2, which are still that entry. This subsumes the old ultimate weapon guard, since a qualifier isn't a mainline tag either.

Two more defects surfaced the same way, both as markup in live values:

  • editor comments weren't stripped, and the unterminated form is the normal case — the comment opens on the field's line and closes further down the article, so the value arrives here already cut. Y'jhimei's occupation was <!--Physical desc.
  • a stated None was returned as a value rather than treated as absent

Data pass: 44 cells. 23 cleared where the only source was another title, 15 trimmed to the numbered entry's own list, 6 filled. Hand-curated values were deliberately left alone — Fran's job of Hunter appears nowhere on her article, so it was kept. A further 11 rows were skipped entirely because the article they match is about a different title (release = FFT on Agrias and Ramza, whose rows are XIV).

Final Fantasy VIII — 0 to 85

VIII states stats as coefficients of a level curve, so there is no scalar in the wikitext to read — which is why aliases could never reach it. The template renders those coefficients into a row per level, so the values now come from the wiki's own table at level 50, the level SphereScale already quotes its tuning at.

658 cells filled across 85 of 118 enemies — HP, attack, defence, magic attack, magic defence, speed, evasion and EXP, where previously every one was null.

The other 33 are bosses. They carry the coefficients but render no table, because lvmod scales them against the party rather than fixing a level. I verified HP = a·L² + b·L + c against all 63 enemies where both the coefficients and a rendered table exist (62 exact), so their HP is computable — but their level is not a number the article gives, and I would rather leave the rows empty than invent one.

This does not change any game: VIII is not in BattlePool.GameIds. Its comment there said it was absent "for want of stats", which is now false, so it is re-documented. On the stated bar it would qualify — 68% of the 85 have an elemental weakness, between VI (69%) and V (45%), where II was excluded at under 1%. What it lacks is moves: 14 of 85 list an ability. Adding it is a gameplay decision, so I have not made it.

Final Fantasy XI and XIV — not a source problem

Not one of the 419 rows has an enemy stats infobox. Classifying what they actually are:

XI (327) XIV (92)
index / prose page 168 87
enemy infobox, no stats 134 0
race or family page 25 5
enemy stats infobox 0 0

The top rows by popularity are Yagudo, Quadav, Beastmen, Amalj'aa, Beasts of the Final Days, Final Fantasy XIV superbosses — beast tribes and index pages, not monsters. There is no per-enemy stat to fetch because these rows do not denote enemies.

I probed the alternatives anyway. XIVAPI (v1 and v2), Garland Tools, BG-Wiki and FFXIclopedia all respond, but BG-Wiki's stat fields are blank for the FFXI mobs sampled (Ancient Warrior, Soulflayer) and Tonberry is a 32-byte stub. Only Minotaur had an HP. This is the residue of the monster-contamination cleanup, and it wants curation — deleting or reclassifying family pages — not an integration.

Final Fantasy X's battle curve — investigated, not a bug

FFX's median pairing sits at 0.31 where every other game is 0.50. Its defence is genuinely bimodal in the source: p25 = 1, p50 = 10, p75 = 100, p90 = 167, against an attack that is concentrated at p50 = 28. Spot-checked against the articles — Bite Bug and Coeurl really are defence 1, Crawler 100, Ghost 120.

Matching medians cannot fix a shape mismatch, so FFX fights run a wider spread than the rest (p10 17 turns, p50 11, p90 2). Correcting it would mean rank-matching the distributions rather than their medians, which is a much larger change to a model that was just adjusted. Left alone deliberately.

Testing

573 tests pass, 13 new. dotnet format --verify-no-changes and the Release build are clean.

Both data passes were verified against the real parsers before writing — a harness ran all 34 affected character articles through ParseCharacterField / ParseCharacterFieldList / ParseInfoboxField and diffed all 44 cells: 0 mismatches. Every write was guarded on the old value still being what the review saw, and revert SQL exists for both.

🤖 Generated with Claude Code

A character article covers a whole career, and a spin-off's fields sit right beside the
numbered entry's. The release prefix was an open wildcard, so whichever came first won:
Ashe and Penelo were Revenant Wings jobs ("xiirw job"), Auron's abilities were X-2's
Creature Creator movelist ("x2 cc abilities") rather than Bushido, Zack carried a weapon
out of Crisis Core ("viicc weapon") for a game he is not playable in, and Dark Kain and
Golbez held The After Years data ("ivtay").

Only a mainline tag is admitted now — ffvii, and the remakes ffviir and ffviir2, which are
still that entry. It subsumes the "ultimate weapon" guard, since a qualifier is not a
mainline tag either, and a stated "None" is treated as no value rather than stored.

Two more fixes found the same way, as markup sitting in live values:

  - editor comments were not stripped, and the unterminated form is the normal case here
    because the comment opens on the field's line and closes further down the article.
    Final Fantasy XV's Y'jhimei had an occupation of "<!--Physical desc."

  - a stated placeholder is no longer returned as a value.

The corresponding data pass corrected 44 cells: 23 cleared where the only source was
another title, 15 trimmed to the numbered entry's own list, and 6 filled. Hand-curated
values were left alone — Fran's job of Hunter appears nowhere on her article.

Final Fantasy VIII's absence from the battle pool is re-documented: it is no longer a
data problem, since 85 of its 118 enemies now hold real stats.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@jackfperryjr
jackfperryjr merged commit fdf4db2 into main Aug 11, 2026
1 check passed
@jackfperryjr
jackfperryjr deleted the features-175 branch August 11, 2026 22:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant