packages: the registry text a game fills is keys (Maroon Lake's phase 26.4) - ThingKind.name, GearKind blurb/howto/names, HintCard's words, JobDef title/text/how, NpcLine and NpcChoice text, WeatherKind.name are @Text Key fields (a compiled row that leaves one out takes its derived key, the English is the game's en.po); what a package hands back as text is the key's marked text, "" for none; NpcName.name, NpcChoice.line and SettingDef.text are not text and lose @Text; ludic.i18n's tr/trf/trn/key_text say @alloc_ok (tr is a cast); the packages' tests with key literals (built, not run); changes/text-keys-data.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Orkun ÇAKILKAYA 2026-09-30 00:29:03 +03:00
parent 86146782f7
commit 86644e6533
21 changed files with 81 additions and 54 deletions

View file

@ -2,8 +2,8 @@
# anything to say winning, each line in its turn given its `chance`; a line's words are its `text`,
# or the story's (NpcTalk.say) when it `fill`s; a line may offer choices, each answered by a line
export property NpcChoice {
@Text text: string = ""
@Text line: string = "" # the key of the line that answers it ("" ends the talk)
@Text text: Key = null # its words (the derived key npc_lines.<row>.choices.<i>.text)
line: string = "" # the key of the line that answers it ("" ends the talk)
code: int = -1 # the game's, carried by the Talked fact
}
@ -13,7 +13,7 @@ export property NpcLine {
@Ref(NpcActs) act: int = -1 # NPCA_* (-1: whatever they are doing)
prio: int = 0
chance: int = 100 # percent: how often this line is even considered
@Text text: string = ""
@Text text: Key = null # its words, a text key (null when it `fill`s)
fill: bool = false
choices: []NpcChoice = null
}
@ -30,7 +30,9 @@ function np_line_fits(p: NpcPerson, l: NpcLine) -> bool {
export function npc_words(p: NpcPerson, line: int) -> string {
if line < 0 or line >= NPCL_COUNT { return "" }
if NpcLines[line].fill { return NpcTalk.say(p, line) }
return NpcLines[line].text
if NpcLines[line].text == null { return "" }
@alloc_ok("a cast: a key's marked text, nothing is made")
return string(NpcLines[line].text)
}
# the line it would say now (-1: none), its words kept for npc_said()