Title normalization hot fix
This commit is contained in:
@@ -142,6 +142,9 @@ Rules:
|
|||||||
- `title_style` only changes generated child display text while composing titles;
|
- `title_style` only changes generated child display text while composing titles;
|
||||||
generated feat keys, TLK keys, row IDs, family metadata, and source references
|
generated feat keys, TLK keys, row IDs, family metadata, and source references
|
||||||
remain tied to generated family identity
|
remain tied to generated family identity
|
||||||
|
- generated family title text is authoritative for family-managed existing rows
|
||||||
|
as well as newly allocated rows, so in-game TLK names and generated wiki titles
|
||||||
|
are derived from the same normalized `FEAT` text
|
||||||
- `title_style.child_case` defaults to `preserve`; `lower` lowercases the resolved
|
- `title_style.child_case` defaults to `preserve`; `lower` lowercases the resolved
|
||||||
child display text after parenthetical formatting
|
child display text after parenthetical formatting
|
||||||
- `title_style.child_parenthetical` defaults to `preserve`; `comma` flattens one
|
- `title_style.child_parenthetical` defaults to `preserve`; `comma` flattens one
|
||||||
|
|||||||
@@ -1898,10 +1898,6 @@ func buildFamilyExpansionGeneratedModule(path string, obj map[string]any, ctx *f
|
|||||||
override[field] = map[string]any{"id": prereqKey}
|
override[field] = map[string]any{"id": prereqKey}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !ctx.featKeyExists(featKey) {
|
|
||||||
if spec.LabelPrefix != "" {
|
|
||||||
override["LABEL"] = spec.LabelPrefix + "_" + labelSuffix
|
|
||||||
}
|
|
||||||
if spec.NamePrefix != "" {
|
if spec.NamePrefix != "" {
|
||||||
override["FEAT"] = map[string]any{
|
override["FEAT"] = map[string]any{
|
||||||
"tlk": map[string]any{
|
"tlk": map[string]any{
|
||||||
@@ -1910,6 +1906,10 @@ func buildFamilyExpansionGeneratedModule(path string, obj map[string]any, ctx *f
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if !ctx.featKeyExists(featKey) {
|
||||||
|
if spec.LabelPrefix != "" {
|
||||||
|
override["LABEL"] = spec.LabelPrefix + "_" + labelSuffix
|
||||||
|
}
|
||||||
for _, field := range spec.TemplateFields {
|
for _, field := range spec.TemplateFields {
|
||||||
override[field] = map[string]any{"field": field, "ref": spec.Template}
|
override[field] = map[string]any{"field": field, "ref": spec.Template}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2994,6 +2994,59 @@ func TestGeneratedWeaponFeatTitleStyleUsesSourceDisplayNameWithStableIdentity(t
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGeneratedWeaponFeatTitleStyleRewritesExistingFamilyFeatName(t *testing.T) {
|
||||||
|
root := testProjectRoot(t)
|
||||||
|
writeFeatGeneratedHarness(t, root, map[string]string{
|
||||||
|
"weapon_focus.json": `{
|
||||||
|
"family": "weapon_focus",
|
||||||
|
"family_key": "weapon_focus",
|
||||||
|
"template": "masterfeats:weaponfocus",
|
||||||
|
"name_prefix": "Weapon Focus",
|
||||||
|
"label_prefix": "FEAT_WEAPON_FOCUS",
|
||||||
|
"constant_prefix": "FEAT_WEAPON_FOCUS",
|
||||||
|
"identity_source": "child_source_value",
|
||||||
|
"child_source": {"dataset":"baseitems","column":"WeaponFocusFeat"},
|
||||||
|
"title_style": {"child_case":"lower","child_parenthetical":"preserve"},
|
||||||
|
"overrides": {}
|
||||||
|
}` + "\n",
|
||||||
|
}, map[string]int{"feat:weapon_focus_dwaxe": 3003})
|
||||||
|
writeFile(t, filepath.Join(root, "topdata", "base_dialog.json"), `{
|
||||||
|
"entries": {
|
||||||
|
"83310": {"text": "Dwarven Waraxe"}
|
||||||
|
}
|
||||||
|
}`+"\n")
|
||||||
|
writeFile(t, filepath.Join(root, "topdata", "data", "baseitems", "base.json"), `{
|
||||||
|
"output": "baseitems.2da",
|
||||||
|
"columns": ["label", "Name", "WeaponFocusFeat"],
|
||||||
|
"rows": [
|
||||||
|
{"id": 108, "key": "baseitems:dwarvenwaraxe", "label": "dwaxe", "Name": "83310", "WeaponFocusFeat": "3003"}
|
||||||
|
]
|
||||||
|
}`+"\n")
|
||||||
|
writeFile(t, filepath.Join(root, "topdata", "data", "baseitems", "lock.json"), `{"baseitems:dwarvenwaraxe":108}`+"\n")
|
||||||
|
writeFile(t, filepath.Join(root, "topdata", "data", "feat", "base.json"), `{
|
||||||
|
"output": "feat.2da",
|
||||||
|
"compare_reference": false,
|
||||||
|
"columns": ["LABEL","FEAT","DESCRIPTION","MASTERFEAT","Constant"],
|
||||||
|
"rows": [
|
||||||
|
{
|
||||||
|
"id": 3003,
|
||||||
|
"key": "feat:weapon_focus_dwaxe",
|
||||||
|
"LABEL": "FEAT_WEAPON_FOCUS_DWAXE",
|
||||||
|
"FEAT": 83318,
|
||||||
|
"DESCRIPTION": "****",
|
||||||
|
"MASTERFEAT": 6,
|
||||||
|
"Constant": "FEAT_WEAPON_FOCUS_DWAXE"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}`+"\n")
|
||||||
|
|
||||||
|
module := buildGeneratedFeatModuleForTest(t, root, "weapon_focus.json")
|
||||||
|
override := generatedFeatOverrideByKey(t, module, "feat:weapon_focus_dwaxe")
|
||||||
|
if text := generatedFeatOverrideTitle(t, override); text != "Weapon Focus (dwarven waraxe)" {
|
||||||
|
t.Fatalf("expected existing generated family row to receive normalized FEAT TLK text, got %q", text)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestGeneratedSkillFeatTitleStyleFlattensChildParenthetical(t *testing.T) {
|
func TestGeneratedSkillFeatTitleStyleFlattensChildParenthetical(t *testing.T) {
|
||||||
root := testProjectRoot(t)
|
root := testProjectRoot(t)
|
||||||
writeFeatGeneratedHarness(t, root, map[string]string{
|
writeFeatGeneratedHarness(t, root, map[string]string{
|
||||||
|
|||||||
Reference in New Issue
Block a user