Repository navigation
The row generator refuses a flat enchantment row on a stat the game reads nowhere (#2387) - #2583
Merged
sdubois777 merged 1 commit intoOct 29, 2026
Conversation
…eads nowhere (#2387) Co-Authored-By: Claude Opus 5.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.
The row generator now refuses a flat enchantment row whose stat the game reads nowhere (#2387). Until now such a row (a misspelling, or a stat whose mechanism has not merged) was written to
game/Data/EnchantmentEffects.csvand did nothing in play, with no message.What changed
tools/generate_datatables.py:stats_with_an_attribute(), besidestats_with_no_attribute(). It readsUCataclysmPlayerClassStats::StatToAttributefromCataclysmPlayerClassStats.cpp, resolving entries named by constant from theirconst TCHAR* X::Y = TEXT("...")definitions (tests excluded). It raises rather than returning a partial set when the map is missing, when parsed entries do not equal the attribute getters (130 = 130 today), or when a constant has no definition.validate_enchantment_effects: a row with no Action, Value Kind flat, and a Stat in neither list is refused, naming the row and the stat.tools/tests/test_generate_datatables.py: two tests. Controls first: flat rows on a stat with an attribute and on one without both pass; a misspelt stat is refused with one complaint; an action row is not asked. And the attribute list is read for both literal and constant entries.docs/DECISIONS.md: the entry.Why flat rows were exempt
Deliberate, and a different question: the existing check asks whether an increase has a base under it, and a flat row is a base. Nothing asked whether the game reads the flat row's stat. The base check is unchanged.
Evidence (at 96ba64b on development 21d6a63)
tools/prove_guard.pyin a git-archive copy, breakand Falsebefore the attribute-list test: "PROVED: 1 failed, 1031 passed | restored: 1032 passed"; named_failures:TestEnchantmentEffects::test_a_flat_row_on_a_stat_the_game_reads_nowhere_is_refused.generate_datatables.pyexit 0;git diff --exit-code --stat game/Dataexit 0;--check: "All 29 DataTable CSVs are up to date."Not done: the Passive Effects sheet's flat rows have the same gap (
validate_passive_effects), filed as #2582.🤖 Generated with Claude Code