Feature set 175. - #90
Merged
Merged
Conversation
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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:
xiirw— Revenant Wingsx2 cc— X-2 Creature Creatorviicc— Crisis Coreivtay— The After Yearsxiii2Only a mainline tag is admitted now —
ffvii, plus the remakesffviir/ffviir2, which are still that entry. This subsumes the oldultimate weaponguard, since a qualifier isn't a mainline tag either.Two more defects surfaced the same way, both as markup in live values:
<!--Physical desc.Nonewas returned as a value rather than treated as absentData 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
Hunterappears 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 = FFTon 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
SphereScalealready 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
lvmodscales them against the party rather than fixing a level. I verifiedHP = a·L² + b·L + cagainst 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:
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) andTonberryis a 32-byte stub. OnlyMinotaurhad 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-changesand 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/ParseInfoboxFieldand 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