# Data tables for DataTextScanner (category "data"), one slot per line: kind|file|slot|reason
#   table  the slot's strings reach a player's screen in English: counted
#   nouns  a slot named *Name/*Names holding common nouns (abilities, items, classes, monsters): counted
#   names  proper nouns (NPC, god, boss, place, founder names): not translation targets, not counted
#   keyed  English source or fallback of a Loc key the display resolves first: already translatable, not counted
# A slot says where a literal sits (see DataTextScanner.SlotOf): init.X object initialiser member X,
# decl:X field or local X, new:T#i constructor argument i, init.[k]= dictionary value, dictpair#i
# element i of a { a, b } pair, =X assignment in code, call:M#i argument i of a call to M, and
# /tuple#i for element i of a tuple inside any of these.
# Slots not listed are not counted: ids, keys, SQL, file names, log text, dead code, admin screens,
# and strings already counted as output call arguments (HardcodedTextScanner).
# Not a table, not counted: CombatResult.CombatLog entries. Its only printing reader is
# MainStreetLocation.TestCombat, which has no caller.
# When adding a table of player text, prefer Loc keys; if it must hold English, list it here.

# --- Scripts/Core -------------------------------------------------------------------------------
keyed|Scripts/Core/GameConfig.cs|decl:ClassNames|class.* (GameConfig.GetLocalizedClassName) at character creation; the array is the English name of the wiki export (WikiDataExporter) and the admin tools
names|Scripts/Core/GameConfig.cs|decl:CanonGodNames|god names
names|Scripts/Core/GameConfig.cs|decl:DefaultBishopName|NPC name
names|Scripts/Core/GameConfig.cs|decl:DefaultGossipMongerName|NPC name
names|Scripts/Core/GameConfig.cs|decl:DefaultMagicShopOwner|NPC name
names|Scripts/Core/GameConfig.cs|decl:DefaultPriestName|NPC name
names|Scripts/Core/GameConfig.cs|decl:SupremeCreatorName|god name
names|Scripts/Core/GameConfig.cs|decl:DefaultLoveCornerName|place name, also a location.name.{id} key; raw only in the who list and NPC location labels
names|Scripts/Core/GameConfig.cs|decl:DefaultPrisonName|place name, also a location.name.{id} key; raw only in the who list and NPC location labels
keyed|Scripts/Core/GameConfig.cs|decl:EyeColors|appearance.eye.N (GameConfig.GetLocalizedEyeColor); the character saves the number
keyed|Scripts/Core/GameConfig.cs|decl:HairColors|appearance.hair.N (GameConfig.GetLocalizedHairColor); the character saves the number
keyed|Scripts/Core/GameConfig.cs|decl:SkinColors|appearance.skin.N (GameConfig.GetLocalizedSkinColor); the character saves the number
table|Scripts/Core/GameConfig.cs|decl:GodTitles|kept English: god rank titles written into the shared news (stored, one text for every reader) and the chat name (MudChatSystem); a god's own screens show god.title.N (GodText.Title, CombatEngine.GodRankTitleLine)
keyed|Scripts/Core/GameConfig.cs|decl:DefaultMessageOfTheDay|motd.default (GameConfig.MessageOfTheDayText, while the message is still this default); stored English in the sysop config (SysOpConfigSystem) and the server settings (ServerSettingsRegistry motd)
keyed|Scripts/Core/GameConfig.cs|decl:PrisonDemandResponse1|prison.demand_response_1 (PrisonLocation); the const is read only by a test
keyed|Scripts/Core/GameConfig.cs|decl:PrisonDemandResponse2|prison.demand_response_2 (PrisonLocation); the const is read only by a test
keyed|Scripts/Core/GameConfig.cs|decl:PrisonDemandResponse3|prison.demand_response_3 (PrisonLocation); the const is read only by a test
keyed|Scripts/Core/GameConfig.cs|decl:PrisonDemandResponse4|prison.demand_response_4 (PrisonLocation); the const is read only by a test
keyed|Scripts/Core/GameConfig.cs|decl:PrisonDemandResponse5|prison.demand_response_5 (PrisonLocation); the const is read only by a test
keyed|Scripts/Core/GameConfig.cs|decl:RaceNames|race.* (GameConfig.GetLocalizedRaceName) at character creation; the array is the English name of the wiki export (WikiDataExporter)
keyed|Scripts/Core/GameConfig.cs|decl:WeddingCeremonyMessages|wedding.ceremony_msg_N
keyed|Scripts/Core/GameConfig.cs|init.Description|material.{id}.desc (CraftingMaterialDef.LocDescription); materials are stored by Id
keyed|Scripts/Core/GameConfig.cs|init.Name|material.{id}.name (CraftingMaterialDef.LocName); materials are stored by Id
keyed|Scripts/Core/GameConfig.cs|init.[k]=|creation.race_desc.*, creation.race_restriction.*, creation.prestige_desc.* (GameConfig.GetLocalizedRaceDescription, GetLocalizedRaceRestriction, GetLocalizedPrestigeDescription)

# --- Scripts/AI ---------------------------------------------------------------------------------

# --- Scripts/Data -------------------------------------------------------------------------------
keyed|Scripts/Data/BeastData.cs|init.Name|monster.name.{id} (MonsterNames.Display, by the English name); stored English: saved as Pet.Name (WildernessLocation TryBeastEncounter), matched by name in CombatEngine
keyed|Scripts/Data/BeastData.cs|init.Species|dungeon.beast.{id}.species
keyed|Scripts/Data/BeastData.cs|init.EncounterFlavor|beast.{id}.encounter
keyed|Scripts/Data/BeastData.cs|init.PassiveDescription|beast.{id}.passive
keyed|Scripts/Data/BeastData.cs|init.TameSuccessFlavor|beast.{id}.tame
names|Scripts/Data/ClassicNPCs.cs|init.Name|NPC names
keyed|Scripts/Data/DruidShrineData.cs|init.AttunementDescription|shrine.{id}.attune
keyed|Scripts/Data/DruidShrineData.cs|init.FlavorDescription|shrine.{id}.flavor
keyed|Scripts/Data/DruidShrineData.cs|init.GodPatron|shrine.{id}.god
keyed|Scripts/Data/DruidShrineData.cs|init.Name|shrine.{id}.name
keyed|Scripts/Data/DruidShrineData.cs|init.PassiveSummary|shrine.{id}.passive
keyed|Scripts/Data/DungeonSettlementData.cs|init.Description|dungeon.settlement.{id}.description
keyed|Scripts/Data/DungeonSettlementData.cs|init.FirstGreeting|dungeon.settlement.{id}.greeting_first
keyed|Scripts/Data/DungeonSettlementData.cs|init.LoreFragments|dungeon.settlement.{id}.lore.{i}
keyed|Scripts/Data/DungeonSettlementData.cs|init.NPCTitle|dungeon.settlement.{id}.npc_title
keyed|Scripts/Data/DungeonSettlementData.cs|init.ReturnGreeting|dungeon.settlement.{id}.greeting_return
names|Scripts/Data/DungeonSettlementData.cs|init.Name|settlement place names
names|Scripts/Data/DungeonSettlementData.cs|init.NPCName|settlement NPC names
table|Scripts/Data/FounderStatueData.cs|decl:ART_AMARANTH|kept English: words drawn into fixed-width statue art (FounderStatueSystem.RenderStatueArt)
table|Scripts/Data/FounderStatueData.cs|decl:ART_AURA|kept English: words drawn into fixed-width statue art (FounderStatueSystem.RenderStatueArt)
table|Scripts/Data/FounderStatueData.cs|decl:ART_BIAXIN|kept English: words drawn into fixed-width statue art (FounderStatueSystem.RenderStatueArt)
table|Scripts/Data/FounderStatueData.cs|decl:ART_COOSH_CRACKED|kept English: words drawn into fixed-width statue art (FounderStatueSystem.RenderStatueArt)
table|Scripts/Data/FounderStatueData.cs|decl:ART_FASTFINGE|kept English: words drawn into fixed-width statue art (FounderStatueSystem.RenderStatueArt)
table|Scripts/Data/FounderStatueData.cs|decl:ART_LUELDORA|kept English: words drawn into fixed-width statue art (FounderStatueSystem.RenderStatueArt)
table|Scripts/Data/FounderStatueData.cs|decl:ART_MYSTIC|kept English: words drawn into fixed-width statue art (FounderStatueSystem.RenderStatueArt)
table|Scripts/Data/FounderStatueData.cs|decl:ART_QUENT|kept English: words drawn into fixed-width statue art (FounderStatueSystem.RenderStatueArt)
table|Scripts/Data/FounderStatueData.cs|decl:ART_SANDOVAL|kept English: words drawn into fixed-width statue art (FounderStatueSystem.RenderStatueArt)
table|Scripts/Data/FounderStatueData.cs|decl:ART_SEDZ|kept English: words drawn into fixed-width statue art (FounderStatueSystem.RenderStatueArt)
table|Scripts/Data/FounderStatueData.cs|decl:ART_SPUDMAN|kept English: words drawn into fixed-width statue art (FounderStatueSystem.RenderStatueArt)
table|Scripts/Data/FounderStatueData.cs|decl:ART_ZENGAZU_CRACKED|kept English: words drawn into fixed-width statue art (FounderStatueSystem.RenderStatueArt)
keyed|Scripts/Data/FounderStatueData.cs|init.AchievementTag|founder.tag_* (FounderStatueSystem.TagLabel); the record stays English
keyed|Scripts/Data/FounderStatueData.cs|init.ClassName|class names and founder.unknown (FounderStatueSystem.ClassLabel); the record stays English
keyed|Scripts/Data/FounderStatueData.cs|init.EndingTag|founder.ending_* (FounderStatueSystem.EndingLabel); the record stays English
keyed|Scripts/Data/FounderStatueData.cs|init.Inscription|founder.inscription_{n} (FounderStatueSystem.InscriptionText); the record stays English
keyed|Scripts/Data/FounderStatueData.cs|init.RaceName|race names and founder.unknown (FounderStatueSystem.RaceLabel); the record stays English
names|Scripts/Data/FounderStatueData.cs|init.DisplayName|founder character names
names|Scripts/Data/FounderStatueData.cs|init.DivineName|god names
keyed|Scripts/Data/OldGodsData.cs|init.DefeatDialogue|oldgod.{key}.defeat.N
keyed|Scripts/Data/OldGodsData.cs|init.IntroDialogue|oldgod.{key}.intro.N
keyed|Scripts/Data/OldGodsData.cs|init.LossDialogue|oldgod.{key}.loss.N
keyed|Scripts/Data/OldGodsData.cs|init.Phase2Dialogue|oldgod.{key}.phase2.N
keyed|Scripts/Data/OldGodsData.cs|init.Phase3Dialogue|oldgod.{key}.phase3.N
keyed|Scripts/Data/OldGodsData.cs|init.SaveDialogue|oldgod.{key}.save.N
keyed|Scripts/Data/OldGodsData.cs|init.Phase1Abilities|oldgod.ability.{id} (OldGodsData.AbilityLabel, CombatEngine.BossAbilityLabel); stored English: CombatEngine picks each ability's effect by its name
keyed|Scripts/Data/OldGodsData.cs|init.Phase2Abilities|oldgod.ability.{id} (OldGodsData.AbilityLabel, CombatEngine.BossAbilityLabel); stored English: CombatEngine picks each ability's effect by its name
keyed|Scripts/Data/OldGodsData.cs|init.Phase3Abilities|oldgod.ability.{id} (OldGodsData.AbilityLabel, CombatEngine.BossAbilityLabel); stored English: CombatEngine picks each ability's effect by its name
keyed|Scripts/Data/OldGodsData.cs|init.Name|oldgod.{key}.name (LocName, MonsterNames); the proper name is the same in every language; stored English as the boss monster's Name
keyed|Scripts/Data/OldGodsData.cs|init.Title|oldgod.{key}.title (LocTitle)
keyed|Scripts/Data/RiddleDatabase.cs|init.AlternateAnswers|riddle.{id}.alt.N
keyed|Scripts/Data/RiddleDatabase.cs|init.Answer|riddle.{id}.answer
keyed|Scripts/Data/RiddleDatabase.cs|init.Hint|riddle.{id}.hint
keyed|Scripts/Data/RiddleDatabase.cs|init.Text|riddle.{id}.text.N
keyed|Scripts/Data/SecretBosses.cs|init.BattleCry|secretboss.{key}.battlecry
keyed|Scripts/Data/SecretBosses.cs|init.ChoiceOptions|secretboss.{key}.choice.N
keyed|Scripts/Data/SecretBosses.cs|init.DialogueBeforeFight|secretboss.{key}.predialogue.N
keyed|Scripts/Data/SecretBosses.cs|init.IntroText|secretboss.{key}.intro.N
keyed|Scripts/Data/SecretBosses.cs|init.VictoryText|secretboss.{key}.victory.N
names|Scripts/Data/SecretBosses.cs|init.Name|boss names
names|Scripts/Data/SecretBosses.cs|init.Title|boss titles, kept English by design
keyed|Scripts/Data/SpecializationData.cs|init.Name|spec.{class}.{spec}.name (SpecDefinition.LocName); the save stores the ClassSpecialization id, the wiki exports en and the keys
keyed|Scripts/Data/WorldBossData.cs|init.DefeatDialogue|worldboss.{id}.defeat.N
keyed|Scripts/Data/WorldBossData.cs|init.Description|worldboss.{id}.ability.pN.i.desc
keyed|Scripts/Data/WorldBossData.cs|init.Name|worldboss.{id}.ability.pN.i.name; boss names are proper nouns
keyed|Scripts/Data/WorldBossData.cs|init.Phase2Dialogue|worldboss.{id}.phase2.N
keyed|Scripts/Data/WorldBossData.cs|init.Phase3Dialogue|worldboss.{id}.phase3.N
keyed|Scripts/Data/WorldBossData.cs|init.SpawnDialogue|worldboss.{id}.spawn.N
keyed|Scripts/Data/WorldBossData.cs|init.Element|worldboss.element.{element} (WorldBossDatabase.ElementLabel); stored English: the boss monster's family and the loot element word
names|Scripts/Data/WorldBossData.cs|init.Title|boss titles, kept English by design

# --- Scripts/Locations --------------------------------------------------------------------------
names|Scripts/Locations/ArenaLocation.cs|BaseConstructorInitializer#1|place name, also a location.name.{id} key; raw only in the who list and NPC location labels
names|Scripts/Locations/ArmorShopLocation.cs|BaseConstructorInitializer#1|place name, also a location.name.{id} key; raw only in the who list and NPC location labels
names|Scripts/Locations/ArmorShopLocation.cs|decl:shopkeeperName|shopkeeper name
names|Scripts/Locations/ChurchLocation.cs|=LocationName|place name, also a location.name.{id} key; raw only in the who list and NPC location labels
names|Scripts/Locations/ChurchLocation.cs|=bishopName|NPC name
names|Scripts/Locations/ChurchLocation.cs|=priestName|NPC name
names|Scripts/Locations/DarkAlleyLocation.cs|BaseConstructorInitializer#1|place name, also a location.name.{id} key; raw only in the who list and NPC location labels
keyed|Scripts/Locations/DarkAlleyLocation.cs|new:EvilDeedDef#1|dark_alley.deed_{id}_name
keyed|Scripts/Locations/DarkAlleyLocation.cs|new:EvilDeedDef#2|dark_alley.deed_{id}_desc
keyed|Scripts/Locations/DarkAlleyLocation.cs|new:EvilDeedDef#17|dark_alley.deed_{id}_news
names|Scripts/Locations/DungeonLocation.cs|BaseConstructorInitializer#1|place name, also a location.name.{id} key; raw only in the who list and NPC location labels
names|Scripts/Locations/DungeonLocation.cs|decl:duelistTemplates/tuple#0|duelist names
names|Scripts/Locations/DungeonLocation.cs|decl:npcInfo/tuple#0|NPC names
names|Scripts/Locations/DungeonLocation.cs|decl:npcInfo/tuple#1|NPC names with titles
names|Scripts/Locations/DungeonLocation.cs|=currentPlayer.CurrentLocation|place name, also a location.name.{id} key; raw only in the who list and NPC location labels
names|Scripts/Locations/DungeonLocation.cs|=player!.CurrentLocation|place name, also a location.name.{id} key; raw only in the who list and NPC location labels
names|Scripts/Locations/DungeonLocation.cs|=player.CurrentLocation|place name, also a location.name.{id} key; raw only in the who list and NPC location labels
keyed|Scripts/Locations/DungeonLocation.cs|decl:name|monster.name.{id} (MonsterNames.Display, by the English name); stored English as Monster.Name
keyed|Scripts/Locations/DungeonLocation.cs|decl:names|monster.name.{id} (MonsterNames.Display, by the English name); stored English as Monster.Name
keyed|Scripts/Locations/DungeonLocation.cs|dictpair#1|monster.name.{id} (MonsterNames.Display, by the English name); floor boss names stored English as Monster.Name
names|Scripts/Locations/DungeonLocation.cs|init.Name|unique NPC name
keyed|Scripts/Locations/DungeonLocation.cs|=memberTypes|monster.name.{id} (MonsterNames.Display, by the English name); stored English as Monster.Name
keyed|Scripts/Locations/DungeonLocation.cs|=name|monster.leader around the member's monster.name.{id} (MonsterNames); stored English as Monster.Name
names|Scripts/Locations/HealerLocation.cs|BaseConstructorInitializer#1|place name, also a location.name.{id} key; raw only in the who list and NPC location labels
names|Scripts/Locations/HealerLocation.cs|decl:HealerName|shop name
names|Scripts/Locations/HealerLocation.cs|decl:Manager|NPC name
names|Scripts/Locations/HomeLocation.cs|BaseConstructorInitializer#1|place name, also a location.name.{id} key; raw only in the who list and NPC location labels
names|Scripts/Locations/LoveStreetLocation.cs|BaseConstructorInitializer#1|place name, also a location.name.{id} key; raw only in the who list and NPC location labels
names|Scripts/Locations/LoveStreetLocation.cs|new:Courtesan#0|courtesan names
names|Scripts/Locations/LoveStreetLocation.cs|new:Gigolo#0|gigolo names
names|Scripts/Locations/PrisonLocation.cs|decl:vexName|NPC name
names|Scripts/Locations/TempleLocation.cs|=LocationName|place name, also a location.name.{id} key; raw only in the who list and NPC location labels

# --- Scripts/Systems ----------------------------------------------------------------------------
keyed|Scripts/Systems/ArtifactSystem.cs|dictpair#0|artifact.stat.{key} (ArtifactData.StatLabel); the keys stay English: ApplyArtifactBonuses and ArtifactStatGrants read them
keyed|Scripts/Systems/ArtifactSystem.cs|init.Description|artifact.{id}.desc (ArtifactData.LocDescription)
keyed|Scripts/Systems/ArtifactSystem.cs|init.LoreText|artifact.{id}.lore.{n} (ArtifactData.LocLore)
keyed|Scripts/Systems/ArtifactSystem.cs|init.SpecialAbility|artifact.{id}.ability (ArtifactData.LocAbility)
keyed|Scripts/Systems/ArtifactSystem.cs|init.Name|artifact.{id}.name (ArtifactData.LocName); artifacts are stored by type
names|Scripts/Systems/BetrayalSystem.cs|init.NPCName|NPC names
table|Scripts/Systems/CharacterCreationSystem.cs|init.Description|kept English: stored on the starting weapon (Equipment.Description, saved with the item); no screen shows it
keyed|Scripts/Systems/CharacterCreationSystem.cs|switcharm/tuple#0|item.* (ItemNames.Display, by the English name); stored English as the starting weapon's Equipment.Name
keyed|Scripts/Systems/ClassAbilitySystem.cs|init.Description|ability.{id}.desc
keyed|Scripts/Systems/ClassAbilitySystem.cs|init.Name|ability.{id}.name
names|Scripts/Systems/DialogueSystem.cs|init.Speaker|speaker names: god names stay as they are; the stored English picks the colour and the Electron portrait; the Mysterious Stranger title shows through dialogue.speaker.mysterious_stranger
keyed|Scripts/Systems/FactionSystem.cs|init.Name|faction.name_* (FactionSystem.NameLabel); the English data name is not shown
keyed|Scripts/Systems/FactionSystem.cs|init.Ranks|faction.rank_{faction}_{n} (FactionSystem.RankLabel); FactionRank, the number, is saved
keyed|Scripts/Systems/FeatureInteractionSystem.cs|init.Text|feature.lore.{hash}
names|Scripts/Systems/FeatureInteractionSystem.cs|init.RevealsOldGod|Old God names
keyed|Scripts/Systems/FileSaveBackend.cs|init.SaveType|engine.save_type_* (GameEngine.SaveTypeLabel, which matches these English words); never written to disk
names|Scripts/Systems/GodSystem.cs|decl:defaultGods/tuple#0|god names
keyed|Scripts/Systems/GodSystem.cs|decl:defaultGods/tuple#1|god.epithet.*
keyed|Scripts/Systems/GodSystem.cs|decl:defaultGods/tuple#4|god.desc.*
names|Scripts/Systems/GodSystem.cs|decl:defaultGods/tuple#5|god names
keyed|Scripts/Systems/NPCItemGenerator.cs|decl:QualityPrefixes|stored English name prefix; ItemNames shows it through item.rarity.fine/superior/cursed or item.quality.*
keyed|Scripts/Systems/NPCItemGenerator.cs|dictpair#0|stored English template names and prefixes; ItemNames shows item.{TemplateLocKey} and the prefix keys
keyed|Scripts/Systems/NPCItemGenerator.cs|init.Name|stored English fallback names; ItemNames shows item.{TemplateLocKey}
keyed|Scripts/Systems/PrisonActivitySystem.cs|dictpair#1/tuple#0|prison.activity_{id}_name
keyed|Scripts/Systems/PrisonActivitySystem.cs|dictpair#1/tuple#1|prison.activity_{id}_desc
keyed|Scripts/Systems/PrisonActivitySystem.cs|dictpair#1/tuple#2|prison.activity_{id}_effect
keyed|Scripts/Systems/QuestSystem.cs|call:CreateStarterQuest#7/tuple#0|monster.name.{id} (MonsterNames.Display, by the English name) (QuestSystem.ShowMonsterArgs, QuestHallLocation); stored English: QuestMonster names and objective targets (SaveSystem, OnlineStateManager), matched against killed monsters
keyed|Scripts/Systems/QuestSystem.cs|decl:bossName|monster.name.{id} (MonsterNames.Display, by the English name) (QuestSystem.ShowMonsterArgs); stored English as the objective target
keyed|Scripts/Systems/QuestSystem.cs|decl:highLevel|monster.name.{id} (MonsterNames.Display, by the English name) (CastleLocation.QuestTargetLabel); stored English: QuestMonster and objective TargetName, matched against killed monsters
keyed|Scripts/Systems/QuestSystem.cs|decl:lowLevel|monster.name.{id} (MonsterNames.Display, by the English name) (CastleLocation.QuestTargetLabel); stored English: QuestMonster and objective TargetName, matched against killed monsters
keyed|Scripts/Systems/QuestSystem.cs|decl:midLevel|monster.name.{id} (MonsterNames.Display, by the English name) (CastleLocation.QuestTargetLabel); stored English: QuestMonster and objective TargetName, matched against killed monsters
keyed|Scripts/Systems/QuestSystem.cs|decl:BountyBoardInitiator|quest.initiator.bounty_board (Quest.GetDisplayInitiator); stored and compared in English (QuestSystem GetBountyBoardQuests, RefreshBountyBoard)
keyed|Scripts/Systems/QuestSystem.cs|init.TargetId|ids, not shown: the contract text is merc.contract.{id}.objective; a monster name matched in UpdateObjectiveProgress (shown through monster.name.{id} where an objective names it) or a GameLocation enum name matched in OnLocationVisited
keyed|Scripts/Systems/QuestSystem.cs|=targetName|dungeon.floor (CastleLocation.QuestTargetLabel at Castle and GameEngine); saved as objective TargetName in English
keyed|Scripts/Systems/QuestSystem.cs|init.Comment|merc.contract.{id}.comment
keyed|Scripts/Systems/QuestSystem.cs|init.Title|merc.contract.{id}.title
names|Scripts/Systems/RareEncounters.cs|decl:godNames|god names
keyed|Scripts/Systems/SettlementSystem.cs|init.Description|settlement.pbuilding.{id}.desc
keyed|Scripts/Systems/SettlementSystem.cs|init.EffectDescription|settlement.pbuilding.{id}.effect
keyed|Scripts/Systems/SettlementSystem.cs|init.Name|settlement.pbuilding.{id}.name
names|Scripts/Systems/SettlementSystem.cs|init.ProposerName|NPC name
keyed|Scripts/Systems/TownNPCStorySystem.cs|init.Description|npc_story.{id}.description
keyed|Scripts/Systems/TownNPCStorySystem.cs|init.Dialogue|npc_story.{id}.stageN.dialogue.i
keyed|Scripts/Systems/TownNPCStorySystem.cs|init.Prompt|npc_story.{id}.stageN.choice.prompt
keyed|Scripts/Systems/TownNPCStorySystem.cs|init.Text|npc_story.{id}.stageN.choice.{key}.text
keyed|Scripts/Systems/TownNPCStorySystem.cs|init.Title|npc_story.{id}.title
names|Scripts/Systems/VisualNovelDialogueSystem.cs|decl:targetName2|NPC name fallback
table|Scripts/Systems/VisualNovelDialogueSystem.cs|init.Initiator|kept English: stored in Quest.Initiator (saved); the fallback for an NPC with no name

# --- Scripts/UI ---------------------------------------------------------------------------------
table|Scripts/UI/ANSIArt.cs|decl:BossVictory|kept English: words drawn into fixed-width art (user: "Keep the art English"), CombatEngine
table|Scripts/UI/ANSIArt.cs|decl:Death|kept English: words drawn into fixed-width art (user: "Keep the art English"), CombatEngine
table|Scripts/UI/ANSIArt.cs|decl:DungeonEntrance|kept English: words drawn into fixed-width art (user: "Keep the art English"), DungeonLocation
table|Scripts/UI/ANSIArt.cs|decl:LevelUp|kept English: words drawn into fixed-width art (user: "Keep the art English"), LevelMasterLocation
table|Scripts/UI/ANSIArt.cs|decl:Treasure|kept English: words drawn into fixed-width art (user: "Keep the art English"), DungeonLocation

# --- more tables (second survey pass) -----------------------------------------------------------
# Not listed on purpose: Electron payload slots (MenuItemData labels and similar, counted in the
# "electron" category), tuples passed to output helpers such as ShowBBSMenuRow (already counted as
# output calls), NPC memory descriptions that only the web dashboard shows, and GMCP labels for MUD clients.
nouns|Scripts/Core/GameEngine.cs|decl:displayName|kept English: fallback name stored as the online presence name (OnlineStateManager.StartOnlineTracking) and shared in the who list and login broadcast
names|Scripts/Core/GameEngine.cs|decl:locations|place name, also a location.name.{id} key; raw only in the who list and NPC location labels
table|Scripts/Core/GameEngine.cs|decl:name|kept English: fallback name of an NPC read from the NPC data file; it becomes the stored NPC.Name, matched by name
nouns|Scripts/Core/GameEngine.cs|decl:ngDisplayName|kept English: fallback name stored as the online presence name (OnlineStateManager.StartOnlineTracking) and shared in the who list
names|Scripts/Core/GameEngine.cs|decl:fonts|font names
keyed|Scripts/Core/Items.cs|decl:ClassicArmorTable/tuple#0|stored English on picked-up armour; ItemNames shows item.{TemplateLocKey}
keyed|Scripts/Core/Items.cs|decl:ClassicWeaponTable/tuple#0|stored English on picked-up weapons; ItemNames shows item.{TemplateLocKey}
keyed|Scripts/Core/King.cs|decl:AvailableMonsters/tuple#0|monster.name.{id} (MonsterNames.Display, by the English name) (CastleLocation guard lists, siege, news); stored English on the court (MonsterGuard.Name) and matched by name (ChallengeSystem DefenceLosses, CastleLocation dismiss)
table|Scripts/Core/King.cs|decl:Role|court member role "Advisor": saved in CourtMemberSaveData, shown through CastleLocation.CourtRoleLabel
table|Scripts/Core/King.cs|=name|fallback king name: becomes the stored King.Name, matched by name everywhere
names|Scripts/Core/King.cs|=npc.CurrentLocation|place name, also a location.name.{id} key; raw only in the who list and NPC location labels
names|Scripts/Core/NPC.cs|=CurrentLocation|place name, also a location.name.{id} key; raw only in the who list and NPC location labels
names|Scripts/Core/NPC.cs|decl:CurrentLocation|place name, also a location.name.{id} key; raw only in the who list and NPC location labels
names|Scripts/Core/NPC.cs|decl:locations|place name, also a location.name.{id} key; raw only in the who list and NPC location labels
names|Scripts/Core/Child.cs|decl:femaleNames|given names
names|Scripts/Core/Child.cs|decl:maleNames|given names
keyed|Scripts/Data/EquipmentData.cs|init.Name|stored English item names; ItemNames shows item.{TemplateLocKey} by EquipmentData id
keyed|Scripts/Data/GauntletChampionData.cs|decl:CrowdAmbiance|gauntlet.crowd_ambiance.{i}
keyed|Scripts/Data/GauntletChampionData.cs|decl:WarmupWaveFlavor|gauntlet.warmup.{i}
keyed|Scripts/Data/GauntletChampionData.cs|init.CrowdReaction|gauntlet.champ.{id}.crowd
keyed|Scripts/Data/GauntletChampionData.cs|init.EntranceAnnouncement|gauntlet.champ.{id}.entrance.{i}
keyed|Scripts/Data/GauntletChampionData.cs|init.FlavorDescription|gauntlet.champ.{id}.drop_flavor
keyed|Scripts/Data/GauntletChampionData.cs|init.LoreLine|gauntlet.champ.{id}.lore
names|Scripts/Data/GauntletChampionData.cs|init.GodPatron|god names
keyed|Scripts/Data/GauntletChampionData.cs|init.ItemName|item.{name} (ItemNames templates); stored English as Equipment.Name (AnchorRoadLocation)
names|Scripts/Data/GauntletChampionData.cs|init.Name|champion names
names|Scripts/Data/GauntletChampionData.cs|init.Title|champion titles
keyed|Scripts/Data/HonorTournamentData.cs|init.CrowdReaction|tournament.champ.{id}.crowd
keyed|Scripts/Data/HonorTournamentData.cs|init.EntranceAnnouncement|tournament.champ.{id}.entrance.{i}
keyed|Scripts/Data/HonorTournamentData.cs|init.FlavorDescription|tournament.champ.{id}.drop_flavor
keyed|Scripts/Data/HonorTournamentData.cs|init.LoreLine|tournament.champ.{id}.lore
keyed|Scripts/Data/HonorTournamentData.cs|init.Name|tournament.champ.{id}.name
keyed|Scripts/Data/HonorTournamentData.cs|init.ItemName|item.{name} (ItemNames templates); stored English as the drop's Name (SanctumLocation)
keyed|Scripts/Data/MonsterFamilies.cs|init.FamilyName|monster.family.{id} (MonsterNames.Family); stored English as Monster.FamilyName, matched by classification and abilities
keyed|Scripts/Data/MonsterFamilies.cs|init.Name|monster.name.{id} (MonsterNames.Display, by the English name), champions through monster.champion.{family}; stored English as Monster.Name and TierName (quest kills, CombatEngine name checks)
keyed|Scripts/Data/WildernessData.cs|init.ForagingResults/tuple#0|wilderness.forage.{id}.{i}
keyed|Scripts/Data/WildernessData.cs|init.ForagingResults/tuple#1|wilderness.forage.{id}.{i}
keyed|Scripts/Data/WildernessData.cs|init.TravelerEncounters/tuple#0|wilderness.traveler.{id}.{i}
keyed|Scripts/Data/WildernessData.cs|init.TravelerEncounters/tuple#1|wilderness.traveler.{id}.{i}
keyed|Scripts/Data/WildernessData.cs|init.Description|wilderness.region and discovery desc keys
keyed|Scripts/Data/WildernessData.cs|init.Direction|wilderness.direction.{key}
keyed|Scripts/Data/WildernessData.cs|init.Name|wilderness.region and discovery name keys
keyed|Scripts/Data/WildernessData.cs|init.RuinsEncounters|wilderness.ruins.{id}.{i}
keyed|Scripts/Data/WildernessData.cs|init.MonsterNames|monster.name.{id} (MonsterNames.Display, by the English name); stored English: monster.Name and TierName for quest kills, GetMonsterProfile lookup, CombatEngine undead name checks
names|Scripts/Locations/AnchorRoadLocation.cs|BaseConstructorInitializer#1|place name, also a location.name.{id} key; raw only in the who list and NPC location labels
names|Scripts/Locations/BankLocation.cs|BaseConstructorInitializer#1|place name, also a location.name.{id} key; raw only in the who list and NPC location labels
names|Scripts/Locations/BankLocation.cs|decl:BankerName|NPC name
names|Scripts/Locations/BaseLocation.cs|decl:fonts|font names
table|Scripts/Locations/CastleLocation.cs|=currentPlayer.NobleTitle|King/Queen stored in NobleTitle: compared in CastleLocation (TriggerRebellion, AbdicatePlayerThroneAsync), saved, the chat prefix (MudChatSystem); shown keyed by NobleTitleLabel
keyed|Scripts/Locations/CastleLocation.cs|decl:OrphanBackstories|castle.orphan_backstory_N; stored in RoyalOrphan.BackgroundStory in English, shown by OrphanBackstoryText
keyed|Scripts/Locations/CastleLocation.cs|decl:RoyalQuestTypes|castle.quest_type_N; English passed to QuestSystem.CreateRoyalAudienceQuest, which matches words in it
keyed|Scripts/Locations/CastleLocation.cs|decl:role|castle.role_tank, castle.role_dps, castle.role_support; stored RoyalMercenary.Role and the MercenaryNames key, shown by MercRoleLabel
table|Scripts/Locations/CastleLocation.cs|decl:title|knight title Sir/Dame stored in NobleTitle and the unlocked titles (compared in SanctumLocation, GameEngine, BaseLocation); shown keyed by NobleTitleLabel
table|Scripts/Locations/CastleLocation.cs|EqualsValueClause|reign end reason "Died", stored in the monarch history and shown as stored
nouns|Scripts/Locations/CastleLocation.cs|init.Name|armory item names, stored on the item (the shown name is keyed: castle.armory_item_*)
names|Scripts/Locations/CastleLocation.cs|decl:firstNames|guard names
names|Scripts/Locations/CastleLocation.cs|decl:OrphanNamesFemale|orphan names
names|Scripts/Locations/CastleLocation.cs|decl:OrphanNamesMale|orphan names
names|Scripts/Locations/CastleLocation.cs|init.[k]=|mercenary names
names|Scripts/Locations/InnLocation.cs|decl:godFloorMap/tuple#2|Old God names
names|Scripts/Locations/LevelMasterLocation.cs|new()#0|master names
keyed|Scripts/Locations/LevelMasterLocation.cs|new()#1|level_master.desc_good, desc_neutral, desc_evil (MasterInfo.LocDescription)
names|Scripts/Locations/MagicShopLocation.cs|BaseConstructorInitializer#1|place name, also a location.name.{id} key; raw only in the who list and NPC location labels
nouns|Scripts/Locations/MagicShopLocation.cs|decl:StatNames|stat code an enchant appends to the stored item name, English in every language (GearSetFamilyResolver)
table|Scripts/Locations/MagicShopLocation.cs|decl:NamedEnchantTags/tuple#1|enchant name tags, stored, English in every language (GearSetFamilyResolver)
nouns|Scripts/Locations/MagicShopLocation.cs|=targetEquip.Name|item name prefix, stored, English in every language (GearSetFamilyResolver)
nouns|Scripts/Locations/MagicShopLocation.cs|=targetItem.Name|item name prefix, stored, English in every language (GearSetFamilyResolver)
names|Scripts/Locations/MainStreetLocation.cs|BaseConstructorInitializer#1|place name, also a location.name.{id} key; raw only in the who list and NPC location labels
names|Scripts/Locations/MainStreetLocation.cs|decl:allGods/tuple#1|Old God names
names|Scripts/Locations/MusicShopLocation.cs|BaseConstructorInitializer#1|place name, also a location.name.{id} key; raw only in the who list and NPC location labels
keyed|Scripts/Locations/MusicShopLocation.cs|decl:BattleHymnSongs/tuple#0|music.song.{pool}.{i}.*
keyed|Scripts/Locations/MusicShopLocation.cs|decl:BattleHymnSongs/tuple#1|music.song.{pool}.{i}.*
keyed|Scripts/Locations/MusicShopLocation.cs|decl:BattleHymnSongs/tuple#3|music.song.{pool}.{i}.*
keyed|Scripts/Locations/MusicShopLocation.cs|decl:FortuneSongs/tuple#0|music.song.{pool}.{i}.*
keyed|Scripts/Locations/MusicShopLocation.cs|decl:FortuneSongs/tuple#1|music.song.{pool}.{i}.*
keyed|Scripts/Locations/MusicShopLocation.cs|decl:FortuneSongs/tuple#3|music.song.{pool}.{i}.*
keyed|Scripts/Locations/MusicShopLocation.cs|decl:IronLullabySongs/tuple#0|music.song.{pool}.{i}.*
keyed|Scripts/Locations/MusicShopLocation.cs|decl:IronLullabySongs/tuple#1|music.song.{pool}.{i}.*
keyed|Scripts/Locations/MusicShopLocation.cs|decl:IronLullabySongs/tuple#3|music.song.{pool}.{i}.*
keyed|Scripts/Locations/MusicShopLocation.cs|decl:LoreSongs/tuple#1|music.lore.{god}.*
keyed|Scripts/Locations/MusicShopLocation.cs|decl:LoreSongs/tuple#3|music.lore.{god}.*
keyed|Scripts/Locations/MusicShopLocation.cs|decl:WarMarchSongs/tuple#0|music.song.{pool}.{i}.*
keyed|Scripts/Locations/MusicShopLocation.cs|decl:WarMarchSongs/tuple#1|music.song.{pool}.{i}.*
keyed|Scripts/Locations/MusicShopLocation.cs|decl:WarMarchSongs/tuple#3|music.song.{pool}.{i}.*
names|Scripts/Locations/MusicShopLocation.cs|decl:performer|NPC names
names|Scripts/Locations/MusicShopLocation.cs|decl:seller|NPC names
names|Scripts/Locations/WeaponShopLocation.cs|decl:shopkeeperName|shopkeeper name
keyed|Scripts/Systems/AchievementSystem.cs|init.Description|achievement.{id}.desc (Achievement.LocDescription); the English stays for achievements.json and the wiki en
keyed|Scripts/Systems/AchievementSystem.cs|init.Name|achievement.{id}.name (Achievement.LocName, NameIn); the id, not the name, is saved and sent to Steam
keyed|Scripts/Systems/AchievementSystem.cs|init.SecretHint|achievement.{id}.hint (Achievement.LocSecretHint); the wiki export keeps the English field
keyed|Scripts/Systems/AchievementSystem.cs|init.UnlockMessage|achievement.{id}.unlock (Achievement.LocUnlockMessage)
names|Scripts/Systems/CombatEngine.cs|init.Name|unique boss name
keyed|Scripts/Systems/CompanionSystem.cs|init.Abilities|ability.*.name, spell.cleric.*.name, music_shop.song_*, companion.ability.* (Companion.AbilityLabel); shown only
keyed|Scripts/Systems/CompanionSystem.cs|init.BackstoryBrief|companion.{id}.backstory (Companion.LocBackstory)
keyed|Scripts/Systems/CompanionSystem.cs|init.Description|companion.{id}.desc (Companion.LocDescription)
keyed|Scripts/Systems/CompanionSystem.cs|init.DialogueHints|companion.{id}.hint.N (Companion.LocDialogueHint)
keyed|Scripts/Systems/CompanionSystem.cs|init.PersonalQuestDescription|companion.{id}.quest_desc (Companion.LocQuestDescription)
keyed|Scripts/Systems/CompanionSystem.cs|init.PersonalQuestLocationHint|companion.{id}.quest_hint (Companion.LocQuestHint)
keyed|Scripts/Systems/CompanionSystem.cs|init.PersonalQuestName|companion.{id}.quest_name (Companion.LocQuestName); the saved history keeps the English name, shown through HistoryLabel
keyed|Scripts/Systems/CompanionSystem.cs|init.Title|companion.{id}.title (Companion.LocTitle)
names|Scripts/Systems/CompanionSystem.cs|init.Name|companion names
keyed|Scripts/Systems/DivineBoonRegistry.cs|init.Alignments|temple.align.* (PantheonLocation.AlignmentLabel); stored English: IsAvailableForAlignment compares them with GodAlignment
keyed|Scripts/Systems/DivineBoonRegistry.cs|init.Description|boon.{id}.desc (BoonDefinition.LocDescription)
keyed|Scripts/Systems/DivineBoonRegistry.cs|init.Name|boon.{id}.name (BoonDefinition.LocName); the config stores the boon id
keyed|Scripts/Systems/DreamSystem.cs|init.Content|dream.{id}.content.{i}
keyed|Scripts/Systems/DreamSystem.cs|init.Description|vision.{id}.desc
keyed|Scripts/Systems/DreamSystem.cs|init.PhilosophicalHint|dream.{id}.hint
keyed|Scripts/Systems/DreamSystem.cs|init.Title|dream.{id}.title
names|Scripts/Systems/FamilySystem.cs|decl:GeneratedSurnames|surnames
keyed|Scripts/Systems/LootGenerator.cs|decl:ArmorTemplates/tuple#0|item.{name}
keyed|Scripts/Systems/LootGenerator.cs|decl:ArmsArmorTemplates/tuple#0|item.{name}
keyed|Scripts/Systems/LootGenerator.cs|decl:CloakArmorTemplates/tuple#0|item.{name}
keyed|Scripts/Systems/LootGenerator.cs|decl:FaceArmorTemplates/tuple#0|item.{name}
keyed|Scripts/Systems/LootGenerator.cs|decl:FeetArmorTemplates/tuple#0|item.{name}
keyed|Scripts/Systems/LootGenerator.cs|decl:HandsArmorTemplates/tuple#0|item.{name}
keyed|Scripts/Systems/LootGenerator.cs|decl:HeadArmorTemplates/tuple#0|item.{name}
keyed|Scripts/Systems/LootGenerator.cs|decl:LegsArmorTemplates/tuple#0|item.{name}
keyed|Scripts/Systems/LootGenerator.cs|decl:NecklaceTemplates/tuple#0|item.{name}
keyed|Scripts/Systems/LootGenerator.cs|decl:RingTemplates/tuple#0|item.{name}
keyed|Scripts/Systems/LootGenerator.cs|decl:ShieldTemplates/tuple#0|item.{name}
keyed|Scripts/Systems/LootGenerator.cs|decl:WaistArmorTemplates/tuple#0|item.{name}
keyed|Scripts/Systems/LootGenerator.cs|decl:WeaponTemplates/tuple#0|item.{name}
keyed|Scripts/Systems/LootGenerator.cs|dictpair#1/tuple#0|item.effect.{effect}.name
keyed|Scripts/Systems/LootGenerator.cs|dictpair#1/tuple#1|item.effect.{effect}.prefix
keyed|Scripts/Systems/LootGenerator.cs|dictpair#1/tuple#2|item.effect.{effect}.suffix
names|Scripts/Systems/NewsSystem.cs|EqualsValueClause|place name, also a location.name.{id} key; raw only in the who list and NPC location labels
names|Scripts/Systems/NPCSpawnSystem.cs|decl:ImmigrantFemaleNames|NPC first names
names|Scripts/Systems/NPCSpawnSystem.cs|decl:ImmigrantMaleNames|NPC first names
names|Scripts/Systems/NPCSpawnSystem.cs|decl:ImmigrantSurnames|NPC surnames
names|Scripts/Systems/NPCSpawnSystem.cs|decl:locations|place name, also a location.name.{id} key; raw only in the who list and NPC location labels
names|Scripts/Systems/NPCSpawnSystem.cs|=npc.CurrentLocation|place name, also a location.name.{id} key; raw only in the who list and NPC location labels
keyed|Scripts/Systems/SpellSystem.cs|new:SpellInfo#1|spell.{class}.{level}.name
keyed|Scripts/Systems/SpellSystem.cs|new:SpellInfo#2|spell.{class}.{level}.desc
names|Scripts/Systems/SpellSystem.cs|new:SpellInfo#5|invented incantation words
names|Scripts/Systems/SqlSaveBackend.cs|init.Location|place name, also a location.name.{id} key; raw only in the who list and NPC location labels
keyed|Scripts/Systems/StrangerEncounterSystem.cs|init.ClosingNarration|stranger.scripted.{type}.closing.{i}
keyed|Scripts/Systems/StrangerEncounterSystem.cs|init.Dialogue|stranger.scripted.{type}.dialogue.{i}
keyed|Scripts/Systems/StrangerEncounterSystem.cs|init.IntroNarration|stranger.scripted.{type}.intro.{i}
keyed|Scripts/Systems/StrangerEncounterSystem.cs|init.StrangerReply|stranger.scripted.{type}.response.{k}.reply.{i}
keyed|Scripts/Systems/StrangerEncounterSystem.cs|init.Text|stranger.scripted.{type}.response.{k}.text
keyed|Scripts/Systems/StrangerEncounterSystem.cs|init.Title|stranger.scripted.{type}.title
keyed|Scripts/Systems/StrangerEncounterSystem.cs|new:StrangerDisguiseData#0|stranger.disguise.{enum}.name
keyed|Scripts/Systems/StrangerEncounterSystem.cs|new:StrangerDisguiseData#1|stranger.disguise.{enum}.desc
names|Scripts/Systems/StreetEncounterSystem.cs|decl:fallbackNames|gang names
names|Scripts/Systems/StreetEncounterSystem.cs|decl:hunterNames|bounty hunter personal names
keyed|Scripts/Systems/StreetEncounterSystem.cs|init.Name|street_encounter.merchant.item.*
table|Scripts/Systems/StreetEncounterSystem.cs|init.Role|court role "Advisor": saved in CourtMemberSaveData and compared by CastleLocation, so it stays English; CastleLocation prints it raw
names|Scripts/Systems/WorldEventSystem.cs|decl:DistantRegions|region names
names|Scripts/Systems/WorldInitializerSystem.cs|decl:femaleFirstNames|NPC names
names|Scripts/Systems/WorldInitializerSystem.cs|decl:lastNames|NPC surnames
names|Scripts/Systems/WorldInitializerSystem.cs|decl:maleFirstNames|NPC names
names|Scripts/Systems/WorldInitializerSystem.cs|decl:OceanTeamNamesPrefixes|team names
names|Scripts/Systems/WorldInitializerSystem.cs|decl:OceanTeamNamesSuffixes|team names
names|Scripts/Systems/WorldSimulator.cs|decl:firstNames|court member names
names|Scripts/Systems/WorldSimulator.cs|decl:lastNames|court member surnames
names|Scripts/Systems/WorldSimulator.cs|decl:TeamNamePrefixes|team names
names|Scripts/Systems/WorldSimulator.cs|decl:TeamNameSuffixes|team names

# --- tables built through helper calls in Scripts/Data -------------------------------------------
keyed|Scripts/Data/EquipmentData.cs|call:CreateArmor#1|stored English armour names; ItemNames shows item.{TemplateLocKey} by EquipmentData id
keyed|Scripts/Data/EquipmentData.cs|call:CreateAccessory#1|stored English accessory names; ItemNames shows item.{TemplateLocKey} by EquipmentData id
keyed|Scripts/Data/DiscoveryData.cs|call:D#5|discovery.{id}.* via DiscoverySystem.Resolve
keyed|Scripts/Data/DiscoveryData.cs|call:D#6|discovery.{id}.* via DiscoverySystem.Resolve
keyed|Scripts/Data/DiscoveryData.cs|call:Narr#0|discovery.{id}.* via DiscoverySystem.Resolve
keyed|Scripts/Data/DiscoveryData.cs|call:Choice#0|discovery.{id}.* via DiscoverySystem.Resolve
keyed|Scripts/Data/DiscoveryData.cs|call:Ch#0|discovery.{id}.* via DiscoverySystem.Resolve
keyed|Scripts/Data/DiscoveryData.cs|call:Ch#1|discovery.{id}.* via DiscoverySystem.Resolve
keyed|Scripts/Data/DiscoveryData.cs|call:Leave#0|discovery.{id}.* via DiscoverySystem.Resolve
keyed|Scripts/Data/DiscoveryData.cs|call:Leave#1|discovery.{id}.* via DiscoverySystem.Resolve
keyed|Scripts/Data/DiscoveryData.cs|call:Skill#1|discovery.{id}.* via DiscoverySystem.Resolve
keyed|Scripts/Data/DiscoveryData.cs|call:Skill#2|discovery.{id}.* via DiscoverySystem.Resolve
keyed|Scripts/Data/DiscoveryData.cs|call:Skill#3|discovery.{id}.* via DiscoverySystem.Resolve
keyed|Scripts/Data/DiscoveryData.cs|call:Skill#5|discovery.{id}.* via DiscoverySystem.Resolve
keyed|Scripts/Data/DiscoveryData.cs|call:Risk#0|discovery.{id}.* via DiscoverySystem.Resolve
keyed|Scripts/Data/DiscoveryData.cs|call:Risk#1|discovery.{id}.* via DiscoverySystem.Resolve
keyed|Scripts/Data/DiscoveryData.cs|call:Risk#2|discovery.{id}.* via DiscoverySystem.Resolve
keyed|Scripts/Data/DiscoveryData.cs|call:Risk#4|discovery.{id}.* via DiscoverySystem.Resolve
keyed|Scripts/Data/DiscoveryData.cs|call:Trap#0|discovery.{id}.* via DiscoverySystem.Resolve
