Translation updates. Almost done I think.

This commit is contained in:
Storm Dragon
2026-02-27 23:55:31 -05:00
parent 566c87c7c2
commit 18a09882b8
46 changed files with 1542 additions and 602 deletions
+1 -1
View File
@@ -68,7 +68,7 @@ class Finding:
def iter_nvgt_files() -> List[Path]:
files: List[Path] = []
entrypoints = [ROOT / "draugnorak.nvgt", ROOT / "excluded_sounds.nvgt"]
entrypoints = [ROOT / "draugnorak.nvgt", ROOT / "src" / "sound_settings.nvgt"]
for entry in entrypoints:
if entry.exists():
files.append(entry)
+488 -1
View File
@@ -51,7 +51,7 @@ SKIP_FILE_NAMES = {"crash.log"}
def iter_nvgt_files() -> List[Path]:
files: List[Path] = []
entrypoints = [ROOT / "draugnorak.nvgt", ROOT / "excluded_sounds.nvgt"]
entrypoints = [ROOT / "draugnorak.nvgt", ROOT / "src" / "sound_settings.nvgt"]
for entry in entrypoints:
if entry.exists():
files.append(entry)
@@ -449,6 +449,14 @@ def write_catalog(entries: Dict[str, Dict[str, object]], output_path: Path) -> N
("system.language.selected", "Language set to {language}."),
("system.language.english_label", "English (en)"),
("system.ui.window_title", "Draugnorak"),
("system.main_menu.prompt", "Draugnorak. Main menu."),
("system.game.new_game_started", "New game started."),
("system.game.loaded", "Game loaded."),
("system.game.paused_prompt", "Paused. Press backspace to resume."),
("system.game.resumed", "Resumed."),
("system.exit.confirm", "Really exit?"),
("system.direction.west", "west"),
("system.direction.east", "east"),
("system.sex.male", "Male"),
("system.sex.female", "Female"),
("system.new_character.choose_sex", "Choose your sex."),
@@ -460,11 +468,16 @@ def write_catalog(entries: Dict[str, Dict[str, object]], output_path: Path) -> N
"Are you sure you want to delete the character {name} gender {sex} days {day}?"),
("system.load_game.delete_save_heading", "Delete Save"),
("system.load_game.delete_save_failed", "Unable to delete save."),
("system.load_game.save_deleted", "Save deleted."),
("system.load_game.no_saves_found", "No saves found."),
("system.load_game.unable_to_load", "Unable to load save."),
("system.load_game.select_prompt", "Load game. Select character. Press delete to remove a save."),
("system.quick_slot.no_item_bound", "No item bound to slot {slot}."),
("system.menu.closed", "Closed."),
("system.menu.canceled", "Canceled."),
("system.menu.no_options", "No options."),
("system.menu.no_matches", "No matches for {arg1}."),
("system.menu.main.story", "The story"),
("system.option.no", "No"),
("system.option.yes", "Yes"),
("system.inventory.cant_carry_any_more_item", "You can't carry any more {item}."),
@@ -474,9 +487,146 @@ def write_catalog(entries: Dict[str, Dict[str, object]], output_path: Path) -> N
("system.inventory.option.base_storage", "Base storage"),
("system.inventory.count_set_to_slot", "{name} count set to slot {slot}."),
("system.inventory.need_quiver_for_arrows", "You need a quiver to carry arrows."),
("system.inventory.max_arrows_with_quivers", "You can only carry {max} arrows with your current quivers."),
("system.inventory.item_not_available", "Item not available."),
("system.search.found_item", "Found {item}."),
("system.search.found_nothing", "Found nothing."),
("system.pickup.item", "Picked up {item}."),
("system.time.period.am", "am"),
("system.time.period.pm", "pm"),
("system.time.report", "{hour} oclock {period} day {day}"),
("system.time.report_with_conditions", "{time}. {conditions}"),
("system.time.condition.sunny", "Sunny"),
("system.time.condition.daylight", "Daylight"),
("system.time.condition.dark", "Dark"),
("system.time.condition.windy", "Windy"),
("system.time.condition.raining", "Raining"),
("system.time.condition.storming", "Storming"),
("system.time.condition.moon_and_stars", "Moon and stars"),
("system.time.event.area_expanded", "The area has expanded! New territory discovered to the east."),
("system.time.event.mountain_discovered", "A mountain range has been discovered to the east!"),
("system.time.event.invasion_source_mountains", "the mountains"),
("system.time.event.invasion_source_new_area", "the new area"),
("system.time.event.invasion_start", "{enemy_plural} are invading from {source}!"),
("system.time.event.zombie_swarm_spotted", "A swarm of zombies has been spotted."),
("system.time.event.survivor_joins_one", "A survivor joins your base."),
("system.time.event.survivor_joins_many", "{count} survivors join your base."),
("system.time.event.base_max_capacity", "Your base is at maximum capacity."),
("system.time.event.invasion_ended", "The {enemy} invasion has ended."),
("system.time.event.blessing_speed_fades", "The speed blessing fades."),
("system.time.event.blessing_resident_fades", "The residents' purpose fades."),
("system.time.event.blessing_search_fades", "The eagle's sight fades."),
("system.time.event.sun_setting", "The sun is setting."),
("system.time.event.sky_brightening", "The sky begins to brighten."),
("system.time.event.residents_repaired_barricade", "Residents repaired the barricade. +{health} health."),
("system.time.event.incense_burned_out", "The incense has burned out."),
("system.combat.burning", "Burning! {health} health remaining."),
("system.combat.health_status", "{health} health."),
("system.combat.you_died", "You have died."),
("system.enemies.residents_killed_attacker", "Residents killed an attacking {enemy}."),
("system.enemies.resident_taken", "A resident has been taken."),
("system.action.fire.intensity.giant_blaze", "Giant blaze"),
("system.action.fire.intensity.small_fire", "Small fire"),
("system.action.fire.intensity.glowing_coals", "A few glowing coals"),
("system.action.fire.estimate.less_than_one_hour", "less than 1 hour"),
("system.action.fire.estimate.approximately_one_hour", "approximately 1 hour"),
("system.action.fire.estimate.approximately_hours", "approximately {hours} hours"),
("system.action.fire.status", "{label}. {estimate} remaining."),
("system.action.no_fire_nearby", "No fire nearby."),
("system.action.no_snare_nearby", "No snare nearby."),
("system.action.snare_holds", "Snare holds a {catch_type}."),
("system.action.snare_set_inactive", "Snare is set but not active yet."),
("system.action.snare_set_empty", "Snare is set and empty."),
("system.action.fish_on_line", "Fish on the line."),
("system.action.no_fish_on_line", "No fish on the line."),
("system.action.cannot_place_snares_in_base", "Cannot place snares in the base area."),
("system.action.snare_already_here", "There is already a snare here."),
("system.action.snare_set", "Snare set."),
("system.action.no_snares_to_place", "No snares to place."),
("system.action.feed_fire.stick", "You dump an arm load of sticks into the fire."),
("system.action.feed_fire.vine", "You toss a few vines and leaves into the fire."),
("system.action.feed_fire.log", "You heave a log into the fire."),
("system.action.no_altar_built", "No altar built."),
("system.action.need_clay_pot_for_incense", "You need a clay pot to burn incense."),
("system.action.no_incense_to_burn", "No incense to burn."),
("system.action.incense_burning", "Incense burning. {hours} hours remaining."),
("system.action.no_sticks_to_feed_fire", "No sticks to feed fire."),
("system.action.dumped_sticks", "Dumped {amount} sticks into the fire."),
("system.action.no_vines_to_feed_fire", "No vines to feed fire."),
("system.action.dumped_vines", "Dumped {amount} vines into the fire."),
("system.action.no_logs_to_feed_fire", "No logs to feed fire."),
("system.action.dumped_logs", "Dumped {amount} logs into the fire."),
("system.action.burned_incense", "Burned {amount} incense. +{hours} hours."),
("system.action.option.place_snare", "Place Snare"),
("system.action.option.feed_fire_stick", "Feed fire with stick"),
("system.action.option.feed_fire_vine", "Feed fire with vine"),
("system.action.option.feed_fire_log", "Feed fire with log"),
("system.action.option.burn_incense", "Burn incense"),
("system.action.option.check_fire", "Check fire"),
("system.action.option.check_snare", "Check snare"),
("system.action.option.check_fishing_pole", "Check fishing pole"),
("system.action.menu.prompt", "Action menu. {option}"),
("system.action.cant_do_that", "Can't do that."),
("system.base_info.not_in_base", "You are not in the base."),
("system.base_info.menu.no_options", "Base info. No options."),
("system.base_info.menu.prompt", "Base info. {option}"),
("system.base.barricade_fallen", "The barricade has fallen!"),
("system.base.no_food_residents_hungry", "No food, residents are hungry."),
("system.base.resident_fishing_pole_broke_one", "A resident's fishing pole broke."),
("system.base.resident_fishing_pole_broke_many", "{count} fishing poles broke."),
("system.base.resident_caught_fish_one", "Resident caught a fish and added it to storage."),
("system.base.resident_caught_fish_many", "Residents caught {count} fish and added them to storage."),
("system.base.resident_smoked_fish", "Resident smoked a fish into {yield} smoked fish."),
("system.base.livestock_produced",
"Livestock produced {meat} meat, {skins} skins, and {feathers} feathers and added to storage."),
("system.base.resident_spear_broke_one", "A resident's spear broke from wear."),
("system.base.resident_spear_broke_many", "{count} spears broke from wear."),
("system.base.resident_sling_broke_one", "A resident's sling broke from wear."),
("system.base.resident_sling_broke_many", "{count} slings broke from wear."),
("system.base.resident_bow_broke_one", "A resident's bow broke from wear."),
("system.base.resident_bow_broke_many", "{count} bows broke from wear."),
("system.base.resident_clothing_repair_one",
"A resident is mending clothing. Used {vines} vines, {skins} skins, and {down} down."),
("system.base.resident_clothing_repair_many",
"Residents are mending clothing. Used {vines} vines, {skins} skins, and {down} down."),
("system.base.snare_escape_during_check",
"A {catch_type} escaped while a resident checked the snare at x {position}."),
("system.base.resident_retrieved_from_snare",
"Resident retrieved {game_type} from snare at x {position} y 0 and reset it."),
("system.base.resident_knife_broke_butchering", "A resident's knife broke while butchering."),
("system.base.resident_butchered_result",
"Resident butchered {game_type}. Added {meat} meat, {skins} skins, {feathers} feathers, {down} down, {sinew} sinew to storage."),
("system.base.resident_added_to_storage", "Resident added {item} to storage."),
("system.base.resident_basket_broke_one", "A resident's basket broke."),
("system.base.resident_basket_broke_many", "{count} baskets broke."),
("system.base.resident_basket_broke_foraging_one", "A resident's basket broke while foraging."),
("system.base.resident_basket_broke_foraging_many", "{count} baskets broke while foraging."),
("system.base.resident_gathered_basket_food_one", "Resident gathered a basket of fruits and nuts."),
("system.base.resident_gathered_basket_food_many",
"Residents gathered {count} baskets of fruits and nuts."),
("system.fishing.size.small", "small"),
("system.fishing.size.medium", "medium sized"),
("system.fishing.size.large", "large"),
("system.fishing.size.monster", "monster"),
("system.fishing.pole_broke.default", "Your fishing pole broke."),
("system.fishing.pole_broke.switched_weapons", "You switched weapons and your fishing pole broke."),
("system.fishing.pole_broke.moved_fish_got_away", "You moved and the fish got away. Your fishing pole broke."),
("system.fishing.pole_broke.moved", "You moved and your fishing pole broke."),
("system.fishing.require_pole_equipped", "You need a fishing pole equipped."),
("system.fishing.require_near_stream", "You need to be within 2 tiles of a stream."),
("system.fishing.fish_on_line", "A fish is on the line!"),
("system.fishing.caught", "Caught a {size} {fish}."),
("system.fishing.fish_slipped_off_water", "The fish slipped off in the water."),
("system.fishing.fish_got_away", "The fish got away."),
("system.fishing.fish_still_on_line", "The fish is still on the line."),
("system.fishing.stopped", "You stop fishing."),
("system.altar.must_be_in_base", "Must be in base to use altar."),
("system.altar.no_altar_built", "No altar built."),
("system.altar.runed_cannot_sacrifice", "Runed items cannot be sacrificed."),
("system.altar.nothing_to_sacrifice", "Nothing to sacrifice."),
("system.altar.sacrificed_one", "Sacrificed 1 {item}. Favor +{gain}. Total {total}."),
("system.altar.sacrificed_many", "Sacrificed {count} {items}. Favor +{gain}. Total {total}."),
("system.altar.menu.prompt", "Altar. Favor {favor}."),
("system.storage.window_title", "Inventory"),
("system.storage.transfer_prompt", "{prompt} (max {max})"),
("system.storage.deposit_how_many", "Deposit how many?"),
@@ -489,6 +639,11 @@ def write_catalog(entries: Dict[str, Dict[str, object]], output_path: Path) -> N
("system.storage.menu_title", "Base storage."),
("system.storage.menu.prompt", "Base storage. {option}"),
("system.storage.menu.no_options", "Base storage. No options."),
("system.storage.runed_item_name", "Runed {equipment} of {rune}"),
("system.storage.deposited_one", "Deposited {name}."),
("system.storage.deposited_many", "Deposited {amount} {item}."),
("system.storage.withdrew_one", "Withdrew {name}."),
("system.storage.withdrew_many", "Withdrew {amount} {item}."),
("system.crafting.require.fire_within_three_clay_pot",
"You need a fire within 3 tiles to craft a clay pot."),
("system.crafting.require.fire_within_three_clay_pots",
@@ -511,10 +666,152 @@ def write_catalog(entries: Dict[str, Dict[str, object]], output_path: Path) -> N
("system.character.pet.abandon_confirm", "Really abandon your pet? {option}"),
("system.character.pet.unconscious_cannot_abandon",
"Your {pet} is unconscious. You can't abandon it right now."),
("system.character.info.name_sex", "Name {name}, {sex}"),
("system.character.info.name_unknown", "Name unknown"),
("system.character.info.health", "Health {health} of {max}"),
("system.character.info.weapon", "Weapon {weapon}"),
("system.character.info.clothing_equipped", "Clothing equipped: {items}"),
("system.character.info.no_clothing", "No clothing equipped."),
("system.character.info.missing", "Missing: {slots}"),
("system.character.info.favor", "Favor {favor}"),
("system.character.info.speed", "Speed {status}"),
("system.character.info.pet", "Pet {pet}, health {health} of {max_health}, loyalty {loyalty} of {max_loyalty}"),
("system.character.info.pet_knocked_out", "Knocked out for {hours} {hour_label}."),
("system.character.info.pet_none", "No pet."),
("system.character.word.hour", "hour"),
("system.character.word.hours", "hours"),
("system.pet.default_name", "pet"),
("system.pet.returned", "A {pet} returns to you."),
("system.pet.knocked_out", "Your {pet} has been knocked out."),
("system.pet.knocked_out_with_remaining", "Your {pet} has been knocked out. {hours} {hour_label} remaining."),
("system.pet.leaves", "{pet} leaves."),
("system.pet.leaving", "Your {pet} is leaving."),
("system.pet.on_the_way", "Your pet is on its way."),
("system.pet.hungry_unresponsive", "A {pet} is hungry and unresponsive."),
("system.pet.joins_you", "A {pet} joins you."),
("system.pet.offer.prompt", "A friendly looking {pet} begs for food. Accept?"),
("system.pet.offer.declined", "Declined."),
("system.pet.retrieve.cant_carry_chew_on",
"You can't carry a {item}, so you give it to a {pet} to chew on."),
("system.pet.retrieve.retrieved_item", "Your {pet} retrieved {item}."),
("system.pet.retrieve.random_find", "Your {pet} retrieved {count} {item}."),
("system.pet.recovered_from_injuries", "Your {pet} has recovered from its injuries."),
("system.pet.getting_hungry", "A {pet} is getting hungry."),
("system.fylgja.already_used_today", "You have already used your Fylgja today."),
("system.fylgja.menu.prompt", "Fylgja menu."),
("system.fylgja.need_open_ground_to_charge", "You need open ground in front of you to charge."),
("system.fylgja.option", "{name} Fylgja"),
("system.fylgja.connection_with_target", "You have a {stage} connection with the {target}."),
("system.fylgja.unlocked", "You have unlocked the {name} Fylgja!"),
("system.fylgja.already_unlocked", "You have already unlocked the {name} Fylgja."),
("system.fylgja.name.unicorn", "Unicorn"),
("system.fylgja.target.unicorn", "unicorn"),
("system.fylgja.stage.tenuous", "tenuous"),
("system.fylgja.stage.faint", "faint"),
("system.fylgja.stage.stirring", "stirring"),
("system.fylgja.stage.budding", "budding"),
("system.fylgja.stage.kindled", "kindled"),
("system.fylgja.stage.bound", "bound"),
("system.fylgja.stage.sworn", "sworn"),
("system.fylgja.stage.ascendant", "ascendant"),
("system.fylgja.stage.ultimate", "ultimate"),
("system.quest.name.bat_invasion", "Bat Invasion"),
("system.quest.name.catch_boomerang", "Catch the Boomerang"),
("system.quest.name.enchanted_melody", "Enchanted Melody"),
("system.quest.name.escape_from_hel", "Escape from Hel"),
("system.quest.name.skeletal_bard", "Skeletal Bard"),
("system.quest.name.unknown", "Unknown Quest"),
("system.quest.description.bat_invasion",
"Bat Invasion. Giant killer bats are attacking. Press space to throw when the bat is centered."),
("system.quest.description.catch_boomerang",
"Catch the Boomerang. Throw and catch the boomerang as it returns for up to 4 points."),
("system.quest.description.enchanted_melody",
"Enchanted Melody. Repeat the pattern using E R D F or U I J K. Lowest to highest pitch."),
("system.quest.description.escape_from_hel",
"Escape from Hel. Press space to jump over open graves. The pace quickens."),
("system.quest.description.skeletal_bard",
"Skeletal Bard. A skeleton named Billy Bones is practicing to become a bard. Count the notes."),
("system.quest.description.unknown", "Unknown quest."),
("system.quest.new_available", "A new quest is available: {quest}."),
("system.quest.none_available", "No quests available."),
("system.quest.favor_phrase.displeased", "The gods are displeased with your performance."),
("system.quest.favor_phrase.pleased", "The gods are pleased with your performance."),
("system.quest.favor_phrase.very_pleased", "The gods are very pleased with your performance."),
("system.quest.favor_phrase.extremely_pleased", "The gods are extremely pleased with your performance."),
("system.quest.favor_phrase.ultimately_pleased", "The gods are ultimately pleased with your performance."),
("system.quest.rewards.title", "Quest Rewards"),
("system.quest.rewards.complete_heading", "Quest Complete!"),
("system.quest.rewards.heading", "Rewards:"),
("system.quest.rewards.favor_line", "Favor: +{favor}"),
("system.quest.rewards.item_line", "{item}: +{amount}"),
("system.quest.rewards.inventory_full_line", "Inventory full, could not receive {item}."),
("system.quest.rewards.no_items_awarded", "No items awarded."),
("system.quest.rewards.score_line", "Score: {score}"),
("system.quest.menu.prompt", "Quest menu."),
("system.quest.menu.count", "{index} of {total}"),
("system.quest.minigame.starting", "Starting."),
("system.quest.bat_invasion.complete_score", "Bat invasion complete. Score {score}."),
("system.quest.boomerang.press_space_to_throw", "Press Space to throw."),
("system.quest.boomerang.skill.almost_dropped", "almost dropped"),
("system.quest.boomerang.skill.managed_to_catch", "managed to catch"),
("system.quest.boomerang.skill.caught", "caught"),
("system.quest.boomerang.skill.expertly_caught", "expertly caught"),
("system.quest.boomerang.caught_result", "You {skill} the boomerang. {points} points.{suffix}"),
("system.quest.boomerang.missed", "You missed the boomerang.{suffix}"),
("system.quest.boomerang.hit_you", "The boomerang hit you.{suffix}"),
("system.quest.boomerang.summary", "You caught {count} boomerangs for a total of {score} points."),
("system.quest.enchanted_melody.practice_prompt", "Practice mode. Press Enter to begin, Escape to cancel."),
("system.quest.enchanted_melody.starting_prompt", "Starting. Repeat the pattern."),
("system.quest.enchanted_melody.score", "You matched {rounds} notes. Score {score}."),
("system.quest.skeletal_bard.select_notes", "Select number of notes. {selection}."),
("system.quest.skeletal_bard.round_result",
"You entered {guess} notes and the actual number was {actual}. {points} points. Press Enter to continue."),
("system.quest.skeletal_bard.complete_score", "Skeletal Bard complete. Your score for all five tunes is {score}."),
("system.quest.escape_from_hel.fell_in_score", "You fell in. Score {score}."),
("system.adventure.none_in_base", "No adventures available in the base."),
("system.adventure.already_attempted_today", "You have already attempted an adventure today."),
("system.adventure.option.unicorn_hunt", "Unicorn Hunt (Mountain Boss)"),
("system.adventure.option.bandit_hideout", "Bandit's Hideout"),
("system.adventure.none_in_area", "No adventures found in this area."),
("system.adventure.menu.prompt", "Adventure menu."),
("system.adventure.victory", "Victory!"),
("system.adventure.rewards.title", "=== Victory Rewards ==="),
("system.adventure.unicorn.flee", "You fled from the unicorn."),
("system.adventure.unicorn.position_report",
"X {x}, {terrain}, facing {direction}"),
("system.adventure.unicorn.player_trampled", "The unicorn trampled you!"),
("system.adventure.unicorn.victory_title", "Unicorn Victory"),
("system.adventure.unicorn.reward.favor_awarded",
"The gods are pleased with your victory! {favor} favor awarded."),
("system.adventure.unicorn.reward.heal_scrolls", "Heal Scrolls: +{count}."),
("system.adventure.unicorn.reward.learned_rune_swiftness", "Learned Rune of Swiftness!"),
("system.adventure.unicorn.reward.engrave_unlocked",
"You can now engrave equipment with this rune at the crafting menu."),
("system.adventure.unicorn.reward.mastered_rune_swiftness",
"You have already mastered the Rune of Swiftness."),
("system.adventure.unicorn.horses.no_stable_or_storage",
"Stable or storage not built. No horses were captured."),
("system.adventure.unicorn.horses.stable_full", "Stable is full. No horses were captured."),
("system.adventure.unicorn.horses.joined_stable", "A horse joins your stable."),
("system.adventure.unicorn.horses.none_captured", "No horses were captured."),
("system.adventure.bandit_hideout.flee", "You fled from the bandit hideout."),
("system.adventure.bandit_hideout.position_report",
"X {x}, {terrain}. Distance to base {distance}. Facing {direction}. Base health {health} of {max}."),
("system.adventure.bandit_hideout.player_defeated", "You were defeated in the bandit hideout."),
("system.character.report.position", "{direction}, x {x}, y {y}, terrain {terrain}"),
("system.character.report.terrain_mountains", "{terrain}. Mountains"),
("system.character.report.player", "{health} of {max} health"),
("system.character.report.pet",
"{pet}: {health} of {max} health, loyalty {loyalty} of {max_loyalty}"),
("system.item.label.items", "items"),
("system.item.label.item", "item"),
("system.item.label.unknown", "Unknown"),
("system.equipment.menu.prompt", "Equipment menu. {option}"),
("system.equipment.menu.nothing_to_equip", "Nothing to equip."),
("system.equipment.menu.equipped_suffix", " (equipped)"),
("system.equipment.set_to_slot", "{name} set to slot {slot}."),
("system.equipment.equipped", "{name} equipped."),
("system.equipment.unequipped", "{name} unequipped."),
("system.equipment.name.none", "None"),
("system.equipment.name.unknown", "Unknown"),
("system.equipment.name.spear", "Spear"),
@@ -546,6 +843,31 @@ def write_catalog(entries: Dict[str, Dict[str, object]], output_path: Path) -> N
("system.environment.tree.fell_with_loot",
"Tree fell! Got {sticks} {sticks_label}, {vines} {vines_label}, and {logs} {logs_label}."),
("system.environment.tree.inventory_full", "Inventory full."),
("system.environment.fall.damage_report",
"Fell {height} feet! Took {damage} damage. {health} health remaining."),
("system.environment.snare.collected_with_catch", "Collected {catch_type} and snare."),
("system.environment.snare.collected_empty", "Collected snare."),
("system.environment.tree.cut_down", "This tree has been cut down."),
("system.environment.tree.empty", "This tree is empty."),
("system.environment.area.nothing_left", "This area has nothing left."),
("system.environment.tree.climb_started", "Started climbing tree. Height is {height} feet."),
("system.environment.tree.climb_reached_top", "Reached the top at {height} feet."),
("system.environment.tree.climb_reached_ground", "Safely reached the ground."),
("system.environment.tree.climb_down", "Climbing down."),
("system.environment.movement.need_rope", "You'll need a rope to climb there."),
("system.environment.movement.press_up_climb", "Press up to climb up."),
("system.environment.movement.press_down_climb", "Press down to climb down."),
("system.environment.movement.need_canoe", "You need a canoe to cross deep water."),
("system.environment.rope_climb.direction.up", "up"),
("system.environment.rope_climb.direction.down", "down"),
("system.environment.rope_climb.progress", "Climbing {direction}. {distance} feet."),
("system.environment.rope_climb.reached_elevation", "Reached elevation {elevation}."),
("system.snare.escape_at", "A {catch_type} escaped from your snare at x {position} y 0!"),
("system.snare.caught_at", "{catch_type} caught in snare at x {position} y 0!"),
("system.snare.stepped_on_with_escape", "You stepped on your snare! The {catch_type} escaped."),
("system.snare.stepped_on_broke", "You stepped on your snare and broke it!"),
("system.fire.low_fuel_at", "Fire at x {position} y {y} is getting low!"),
("system.fire.went_out_at", "Fire at x {position} y {y} has gone out."),
("system.crafting.menu.prompt", "Crafting menu. {option}"),
("system.crafting.category.weapons", "Weapons"),
("system.crafting.category.tools", "Tools"),
@@ -554,10 +876,19 @@ def write_catalog(entries: Dict[str, Dict[str, object]], output_path: Path) -> N
("system.crafting.category.buildings", "Buildings"),
("system.crafting.category.barricade", "Barricade"),
("system.crafting.category.runes", "Runes"),
("system.crafting.in_progress", "Crafting..."),
("system.crafting.weapons.prompt", "Weapons. {option}"),
("system.crafting.weapons.option.spear", "Spear (1 Stick, 1 Vine, 1 Stone) [Requires Knife]"),
("system.crafting.weapons.option.sling", "Sling (1 Skin, 2 Vines)"),
("system.crafting.weapons.option.bow", "Bow (1 Stick, 1 Bowstring)"),
("system.crafting.weapons.crafted.spear", "Crafted a Spear."),
("system.crafting.weapons.crafted.sling", "Crafted a Sling."),
("system.crafting.weapons.crafted.bow", "Crafted a Bow."),
("system.crafting.weapons.crafted.stone_axe", "Crafted a Stone Axe."),
("system.crafting.weapons.crafted_max.spears", "Crafted {count} Spears."),
("system.crafting.weapons.crafted_max.slings", "Crafted {count} Slings."),
("system.crafting.weapons.crafted_max.bows", "Crafted {count} Bows."),
("system.crafting.weapons.crafted_max.stone_axes", "Crafted {count} Stone Axes."),
("system.crafting.tools.prompt", "Tools. {option}"),
("system.crafting.tools.option.stone_knife", "Stone Knife (2 Stones)"),
("system.crafting.tools.option.snare", "Snare (1 Stick, 2 Vines)"),
@@ -568,12 +899,44 @@ def write_catalog(entries: Dict[str, Dict[str, object]], output_path: Path) -> N
("system.crafting.tools.option.canoe", "Canoe (4 Logs, 11 Sticks, 11 Vines, 6 Skins, 2 Rope, 6 Reeds)"),
("system.crafting.tools.option.reed_basket", "Reed Basket (3 Reeds)"),
("system.crafting.tools.option.clay_pot", "Clay Pot (3 Clay)"),
("system.crafting.tools.crafted.stone_knife", "Crafted a Stone Knife."),
("system.crafting.tools.crafted.snare", "Crafted a Snare."),
("system.crafting.tools.crafted.fishing_pole", "Crafted a Fishing Pole."),
("system.crafting.tools.crafted.rope", "Crafted rope."),
("system.crafting.tools.crafted.quiver", "Crafted a Quiver."),
("system.crafting.tools.crafted.canoe", "Crafted a Canoe."),
("system.crafting.tools.crafted.reed_basket", "Crafted a reed basket."),
("system.crafting.tools.crafted.clay_pot", "Crafted a clay pot."),
("system.crafting.tools.crafted_max.stone_knives", "Crafted {count} Stone Knives."),
("system.crafting.tools.crafted_max.snares", "Crafted {count} Snares."),
("system.crafting.tools.crafted_max.fishing_poles", "Crafted {count} Fishing Poles."),
("system.crafting.tools.crafted_max.ropes", "Crafted {count} Rope."),
("system.crafting.tools.crafted_max.quivers", "Crafted {count} Quivers."),
("system.crafting.tools.crafted_max.canoes", "Crafted {count} Canoes."),
("system.crafting.tools.crafted_max.reed_baskets", "Crafted {count} Reed Baskets."),
("system.crafting.tools.crafted_max.clay_pots", "Crafted {count} Clay Pots."),
("system.crafting.materials.prompt", "Materials. {option}"),
("system.crafting.materials.option.butcher_game", "Butcher Game [Requires Game, Knife, Fire nearby]"),
("system.crafting.materials.option.smoke_fish", "Smoke Fish (1 Fish, 1 Stick) [Requires Fire nearby]"),
("system.crafting.materials.option.arrows", "Arrows (2 Sticks, 4 Feathers, 2 Stones) [Requires Quiver]"),
("system.crafting.materials.option.bowstring", "Bowstring (3 Sinew) [Requires Fire nearby]"),
("system.crafting.materials.option.incense", "Incense (6 Sticks, 2 Vines, 1 Reed) [Requires Altar]"),
("system.crafting.materials.not_enough_quiver_capacity_for_arrows", "Not enough quiver capacity for arrows."),
("system.crafting.materials.crafted.arrows", "Crafted {count} arrows."),
("system.crafting.materials.crafted.bowstring", "Crafted a bowstring."),
("system.crafting.materials.crafted_max.bowstrings", "Crafted {count} Bowstrings."),
("system.crafting.materials.crafted.incense", "Crafted incense."),
("system.crafting.materials.crafted_max.incense", "Crafted {count} Incense."),
("system.crafting.materials.smoke_fish.crafted", "Smoked a fish into {yield} smoked fish."),
("system.crafting.materials.smoke_fish.crafted_max",
"Smoked {count} fish into {yield} smoked fish."),
("system.crafting.materials.butcher.goose", "Butchered goose. Got 1 meat, feathers, and down."),
("system.crafting.materials.butcher.turkey", "Butchered turkey. Got 1 meat and feathers."),
("system.crafting.materials.butcher.boar", "Butchered boar. Got meat, 3 skins, and 2 sinew."),
("system.crafting.materials.butcher.default", "Butchered {game}. Got 1 meat and 1 skin."),
("system.crafting.materials.butcher.no_space_outputs", "No space for outputs."),
("system.crafting.materials.butcher.max_result",
"Butchered {count} game. Got {meat} meat, {skins} skins, {feathers} feathers, {down} down, {sinew} sinew."),
("system.crafting.clothing.prompt", "Clothing. {option}"),
("system.crafting.clothing.option.skin_hat", "Skin Hat (1 Skin, 1 Vine)"),
("system.crafting.clothing.option.skin_gloves", "Skin Gloves (1 Skin, 1 Vine)"),
@@ -582,6 +945,20 @@ def write_catalog(entries: Dict[str, Dict[str, object]], output_path: Path) -> N
("system.crafting.clothing.option.moccasins", "Moccasins (2 Skins, 1 Vine)"),
("system.crafting.clothing.option.skin_pouch", "Skin Pouch (2 Skins, 1 Vine)"),
("system.crafting.clothing.option.backpack", "Backpack (11 Skins, 5 Vines, 4 Skin Pouches)"),
("system.crafting.clothing.crafted.skin_hat", "Crafted a Skin Hat."),
("system.crafting.clothing.crafted.skin_gloves", "Crafted Skin Gloves."),
("system.crafting.clothing.crafted.skin_pants", "Crafted Skin Pants."),
("system.crafting.clothing.crafted.skin_tunic", "Crafted a Skin Tunic."),
("system.crafting.clothing.crafted.moccasins", "Crafted moccasins."),
("system.crafting.clothing.crafted.skin_pouch", "Crafted a Skin Pouch."),
("system.crafting.clothing.crafted.backpack", "Crafted a Backpack."),
("system.crafting.clothing.crafted_max.skin_hats", "Crafted {count} Skin Hats."),
("system.crafting.clothing.crafted_max.skin_gloves", "Crafted {count} Skin Gloves."),
("system.crafting.clothing.crafted_max.skin_pants", "Crafted {count} Skin Pants."),
("system.crafting.clothing.crafted_max.skin_tunics", "Crafted {count} Skin Tunics."),
("system.crafting.clothing.crafted_max.moccasins", "Crafted {count} Moccasins."),
("system.crafting.clothing.crafted_max.skin_pouches", "Crafted {count} Skin Pouches."),
("system.crafting.clothing.crafted_max.backpacks", "Crafted {count} Backpacks."),
("system.crafting.buildings.prompt", "Buildings. {option}"),
("system.crafting.buildings.option.firepit", "Firepit (9 Stones)"),
("system.crafting.buildings.option.fire", "Fire (2 Sticks, 1 Log) [Requires Firepit]"),
@@ -594,6 +971,42 @@ def write_catalog(entries: Dict[str, Dict[str, object]], output_path: Path) -> N
("system.crafting.buildings.option.stable",
"Stable (10 Logs, 15 Stones, 10 Vines) [Base Only, Requires Storage Upgrade]"),
("system.crafting.buildings.option.altar", "Altar (9 Stones, 3 Sticks) [Base Only]"),
("system.crafting.buildings.none_available", "No buildings available."),
("system.crafting.buildings.firepit.already_in_base", "There is already a firepit in the base."),
("system.crafting.buildings.firepit.already_here", "There is already a firepit here."),
("system.crafting.buildings.firepit.built", "Firepit built here."),
("system.crafting.buildings.fire.requires_firepit_nearby", "You need a firepit within 2 tiles to build a fire."),
("system.crafting.buildings.fire.already_in_base", "There is already a fire in the base."),
("system.crafting.buildings.fire.built", "Fire built at firepit."),
("system.crafting.buildings.herb_garden.base_only", "Herb garden can only be built in the base area."),
("system.crafting.buildings.herb_garden.already_in_base", "There is already an herb garden in the base."),
("system.crafting.buildings.herb_garden.built", "Herb garden built. The base now heals faster."),
("system.crafting.buildings.storage.base_only", "Storage must be built in the base."),
("system.crafting.buildings.storage.fully_upgraded", "Storage is fully upgraded."),
("system.crafting.buildings.storage.upgraded", "Storage upgraded. Capacity is now {capacity} per item."),
("system.crafting.buildings.pasture.base_only", "Pasture must be built in the base."),
("system.crafting.buildings.pasture.requires_storage_upgrade", "Storage must be upgraded before a pasture."),
("system.crafting.buildings.pasture.already_built", "Pasture already built."),
("system.crafting.buildings.pasture.built", "Pasture built."),
("system.crafting.buildings.stable.base_only", "Stable must be built in the base."),
("system.crafting.buildings.stable.requires_storage_upgrade", "Storage must be upgraded before a stable."),
("system.crafting.buildings.stable.already_built", "Stable already built."),
("system.crafting.buildings.stable.built", "Stable built."),
("system.crafting.buildings.altar.base_only", "Altar must be built in the base."),
("system.crafting.buildings.altar.already_built", "Altar already built."),
("system.crafting.buildings.altar.built", "Altar built."),
("system.crafting.runes.base_only", "Rune engraving can only be done in the base area."),
("system.crafting.runes.option", "{rune} (1 Clay, 1 Favor) [Requires Knife]"),
("system.crafting.runes.none_unlocked", "No runes unlocked yet."),
("system.crafting.runes.prompt", "Runes. {option}"),
("system.crafting.runes.equipment_option", "{name} ({count} available)"),
("system.crafting.runes.no_equipment_available", "No equipment available to engrave."),
("system.crafting.runes.select_equipment_prompt",
"Select equipment to engrave with {rune}. {option}"),
("system.crafting.runes.no_item_available", "No {item} available."),
("system.crafting.runes.runed_name", "Runed {equipment} of {rune}"),
("system.crafting.runes.engraved", "Engraved {item}."),
("system.crafting.runes.engraved_max", "Engraved {count} {item} with {rune}."),
("system.crafting.barricade.prompt", "Barricade. {option}"),
("system.crafting.barricade.option.reinforce_sticks",
"Reinforce with sticks ({cost} sticks, +{health} health)"),
@@ -601,11 +1014,85 @@ def write_catalog(entries: Dict[str, Dict[str, object]], output_path: Path) -> N
("system.crafting.barricade.option.reinforce_log", "Reinforce with log ({cost} log, +{health} health)"),
("system.crafting.barricade.option.reinforce_stones",
"Reinforce with stones ({cost} stones, +{health} health)"),
("system.crafting.barricade.full_health", "Barricade is already at full health."),
("system.crafting.barricade.no_materials", "No materials to reinforce the barricade."),
("system.crafting.barricade.reinforced.sticks",
"Reinforced barricade with sticks. +{gained} health. Now {health} of {max}."),
("system.crafting.barricade.reinforced.vines",
"Reinforced barricade with vines. +{gained} health. Now {health} of {max}."),
("system.crafting.barricade.reinforced.log",
"Reinforced barricade with log. +{gained} health. Now {health} of {max}."),
("system.crafting.barricade.reinforced.stones",
"Reinforced barricade with stones. +{gained} health. Now {health} of {max}."),
("system.crafting.barricade.reinforced_max.sticks",
"Reinforced barricade {count} times with sticks. Health now {health}."),
("system.crafting.barricade.reinforced_max.vines",
"Reinforced barricade {count} times with vines. Health now {health}."),
("system.crafting.barricade.reinforced_max.log",
"Reinforced barricade {count} times with log. Health now {health}."),
("system.crafting.barricade.reinforced_max.stones",
"Reinforced barricade {count} times with stones. Health now {health}."),
("system.crafting.barricade.not_enough.sticks", "Not enough sticks."),
("system.crafting.barricade.not_enough.vines", "Not enough vines."),
("system.crafting.barricade.not_enough.logs", "Not enough logs."),
("system.crafting.barricade.not_enough.stones", "Not enough stones."),
("system.crafting.missing", "Missing: {requirements}"),
("system.crafting.requirement.stone_knife", "Stone Knife"),
("system.crafting.requirement.game", "Game"),
("system.crafting.requirement.favor", "favor"),
("system.crafting.requirement.resources", "resources"),
("system.story.voice.format", "{speaker}: {line}"),
("system.story.god.fallback", "A god"),
("system.story.god.odin", "Odin"),
("system.story.god.thor", "Thor"),
("system.story.god.freyja", "Freyja"),
("system.story.god.loki", "Loki"),
("system.story.god.tyr", "Tyr"),
("system.story.god.baldur", "Baldur"),
("system.story.god.frigg", "Frigg"),
("system.story.god.heimdall", "Heimdall"),
("system.story.god.hel", "Hel"),
("system.story.god.fenrir", "Fenrir"),
("system.story.god.freyr", "Freyr"),
("system.story.line01", "The world has fallen."),
("system.story.line02", "Once-great cities lie in ruin."),
("system.story.line03", "In most places, not two stones remain as mankind set them."),
("system.story.line04", "The gods, long thought sleeping, achieved the impossible."),
("system.story.line05", "Ragnarok was averted."),
("system.story.line06", "Great Fenrir was freed and did not strike down his captors."),
("system.story.line07", "Surtr did not lay waste to our world with his flaming greatsword."),
("system.story.line08", "For a fleeting age, the gods wrestled fate into silence."),
("system.story.line09", "But the end of the world was delayed, never denied."),
("system.story.line10", "One force lay beyond even divine command: mankind."),
("system.story.line11", "Hatred swelled."),
("system.story.line12", "Greed answered it."),
("system.story.line13", "Mercy withered."),
("system.story.line14", "Differences became crimes."),
("system.story.line15", "Folk no longer argued; they tore at one another like beasts."),
("system.story.line16", "Neighbors became enemies for trifles: a color, a song, a single word."),
("system.story.line17", "War followed."),
("system.story.line18", "Cities burned, roads broke, and monsters wearing human faces roamed the streets."),
("system.story.line19", "Then ruin deepened into terror."),
("system.story.line20", "The dead, enraged by wanton slaughter, rose from their graves."),
("system.story.line21", "Corpses woke and hunted the living."),
("system.story.line22", "Night-stalkers fed on blood."),
("system.story.line23", "Even ash and dust remembered form and rose again."),
("system.story.line24", "Soon all that remained was rubble and bone."),
("system.story.line25", "Your last memory is flight from a vast horde of nightmare creatures."),
("system.story.line26", "When you wake, you are somewhere strange."),
("system.story.line27",
"A crude wooden shelter stands against the wind, open to the elements, braced with sticks and logs."),
("system.story.line28", "As your senses return, faint voices stir in the dark."),
("system.story.line29", "After the death of this world, another shall rise."),
("system.story.line30", "You have been judged worthy to try and survive."),
("system.story.line31", "This world belongs to the dead."),
("system.story.line32", "In time, they will slay even us."),
("system.story.line33", "Prove yourself, warrior, and you may walk into the next world."),
("system.story.line34", "May your death, when it comes, be honorable."),
("system.story.line35", "We will aid you while we still have strength, but time is against us."),
("system.story.line36",
"Beyond your shelter lies grassland, and farther off, broken stone that may once have been a city."),
("system.story.line37", "In the total devastation, even memory has lost its shape."),
]
lines: List[str] = []
+7 -1
View File
@@ -34,7 +34,13 @@ def parse_ini(path: Path) -> Dict[str, str]:
if not key:
continue
full_key = key if not section or "." in key else f"{section}.{key}"
if not section:
full_key = key
elif section == "messages":
full_key = key if "." in key else f"{section}.{key}"
else:
section_prefix = f"{section}."
full_key = key if key.startswith(section_prefix) else f"{section_prefix}{key}"
result[full_key] = unescape_ini_value(value)
return result