Browse Source

Extract Hellfire table text for translation

pull/8112/head
Anders Jenbo 7 months ago
parent
commit
2d710174b2
  1. 1
      Source/towners.cpp
  2. 2
      Source/track.cpp
  3. 222
      Source/translation_dummy.cpp
  4. 2
      assets/txtdata/items/itemdat.tsv
  5. 123
      tools/extract_translation_data.py

1
Source/towners.cpp

@ -11,6 +11,7 @@
#include "inv.h"
#include "minitext.h"
#include "stores.h"
#include "textdat.h"
#include "utils/is_of.hpp"
#include "utils/language.h"
#include "utils/str_case.hpp"

2
Source/track.cpp

@ -24,7 +24,7 @@ void RepeatWalk(Player &player)
if (!InDungeonBounds(cursPosition))
return;
if (player._pmode != PM_STAND && !(player.isWalking() && player.AnimInfo.getFrameToUseForRendering() > 6))
if (player._pmode != PM_STAND && (!player.isWalking() || player.AnimInfo.getFrameToUseForRendering() <= 6))
return;
const Point target = player.GetTargetPosition();

222
Source/translation_dummy.cpp

@ -6,6 +6,8 @@
*/
#include "utils/language.h"
namespace {
const char *MT_NZOMBIE_NAME = P_("monster", "Zombie");
const char *MT_BZOMBIE_NAME = P_("monster", "Ghoul");
const char *MT_GZOMBIE_NAME = P_("monster", "Rotting Carcass");
@ -18,18 +20,11 @@ const char *MT_WSKELAX_NAME = P_("monster", "Skeleton");
const char *MT_TSKELAX_NAME = P_("monster", "Corpse Axe");
const char *MT_RSKELAX_NAME = P_("monster", "Burning Dead");
const char *MT_XSKELAX_NAME = P_("monster", "Horror");
const char *MT_RFALLSD_NAME = P_("monster", "Fallen One");
const char *MT_DFALLSD_NAME = P_("monster", "Carver");
const char *MT_YFALLSD_NAME = P_("monster", "Devil Kin");
const char *MT_BFALLSD_NAME = P_("monster", "Dark One");
const char *MT_NSCAV_NAME = P_("monster", "Scavenger");
const char *MT_BSCAV_NAME = P_("monster", "Plague Eater");
const char *MT_WSCAV_NAME = P_("monster", "Shadow Beast");
const char *MT_YSCAV_NAME = P_("monster", "Bone Gasher");
const char *MT_WSKELBW_NAME = P_("monster", "Skeleton");
const char *MT_TSKELBW_NAME = P_("monster", "Corpse Bow");
const char *MT_RSKELBW_NAME = P_("monster", "Burning Dead");
const char *MT_XSKELBW_NAME = P_("monster", "Horror");
const char *MT_WSKELSD_NAME = P_("monster", "Skeleton Captain");
const char *MT_TSKELSD_NAME = P_("monster", "Corpse Captain");
const char *MT_RSKELSD_NAME = P_("monster", "Burning Dead Captain");
@ -48,10 +43,6 @@ const char *MT_FIEND_NAME = P_("monster", "Fiend");
const char *MT_BLINK_NAME = P_("monster", "Blink");
const char *MT_GLOOM_NAME = P_("monster", "Gloom");
const char *MT_FAMILIAR_NAME = P_("monster", "Familiar");
const char *MT_NGOATBW_NAME = P_("monster", "Flesh Clan");
const char *MT_BGOATBW_NAME = P_("monster", "Stone Clan");
const char *MT_RGOATBW_NAME = P_("monster", "Fire Clan");
const char *MT_GGOATBW_NAME = P_("monster", "Night Clan");
const char *MT_NACID_NAME = P_("monster", "Acid Beast");
const char *MT_RACID_NAME = P_("monster", "Poison Spitter");
const char *MT_BACID_NAME = P_("monster", "Pit Beast");
@ -118,34 +109,7 @@ const char *MT_ADVOCATE_NAME = P_("monster", "Advocate");
const char *MT_GOLEM_NAME = P_("monster", "Golem");
const char *MT_DIABLO_NAME = P_("monster", "The Dark Lord");
const char *MT_DARKMAGE_NAME = P_("monster", "The Arch-Litch Malignus");
const char *MT_HELLBOAR_NAME = P_("monster", "Hellboar");
const char *MT_STINGER_NAME = P_("monster", "Stinger");
const char *MT_PSYCHORB_NAME = P_("monster", "Psychorb");
const char *MT_ARACHNON_NAME = P_("monster", "Arachnon");
const char *MT_FELLTWIN_NAME = P_("monster", "Felltwin");
const char *MT_HORKSPWN_NAME = P_("monster", "Hork Spawn");
const char *MT_VENMTAIL_NAME = P_("monster", "Venomtail");
const char *MT_NECRMORB_NAME = P_("monster", "Necromorb");
const char *MT_SPIDLORD_NAME = P_("monster", "Spider Lord");
const char *MT_LASHWORM_NAME = P_("monster", "Lashworm");
const char *MT_TORCHANT_NAME = P_("monster", "Torchant");
const char *MT_HORKDMN_NAME = P_("monster", "Hork Demon");
const char *MT_DEFILER_NAME = P_("monster", "Hell Bug");
const char *MT_GRAVEDIG_NAME = P_("monster", "Gravedigger");
const char *MT_TOMBRAT_NAME = P_("monster", "Tomb Rat");
const char *MT_FIREBAT_NAME = P_("monster", "Firebat");
const char *MT_SKLWING_NAME = P_("monster", "Skullwing");
const char *MT_LICH_NAME = P_("monster", "Lich");
const char *MT_CRYPTDMN_NAME = P_("monster", "Crypt Demon");
const char *MT_HELLBAT_NAME = P_("monster", "Hellbat");
const char *MT_BONEDEMN_NAME = P_("monster", "Bone Demon");
const char *MT_ARCHLICH_NAME = P_("monster", "Arch Lich");
const char *MT_BICLOPS_NAME = P_("monster", "Biclops");
const char *MT_FLESTHNG_NAME = P_("monster", "Flesh Thing");
const char *MT_REAPER_NAME = P_("monster", "Reaper");
const char *MT_NAKRUL_NAME = P_("monster", "Na-Krul");
const char *GHARBAD_THE_WEAK_NAME = P_("monster", "Gharbad the Weak");
const char *SKELETON_KING_NAME = P_("monster", "Skeleton King");
const char *ZHAR_THE_MAD_NAME = P_("monster", "Zhar the Mad");
const char *SNOTSPILL_NAME = P_("monster", "Snotspill");
const char *ARCH_BISHOP_LAZARUS_NAME = P_("monster", "Arch-Bishop Lazarus");
@ -153,7 +117,6 @@ const char *RED_VEX_NAME = P_("monster", "Red Vex");
const char *BLACK_JADE_NAME = P_("monster", "Black Jade");
const char *LACHDANAN_NAME = P_("monster", "Lachdanan");
const char *WARLORD_OF_BLOOD_NAME = P_("monster", "Warlord of Blood");
const char *THE_BUTCHER_NAME = P_("monster", "The Butcher");
const char *HORK_DEMON_NAME = P_("monster", "Hork Demon");
const char *THE_DEFILER_NAME = P_("monster", "The Defiler");
const char *NA_KRUL_NAME = P_("monster", "Na-Krul");
@ -267,7 +230,7 @@ const char *IDI_FUNGALTM_NAME = N_("Fungal Tome");
const char *IDI_SPECELIX_NAME = N_("Spectral Elixir");
const char *IDI_BLDSTONE_NAME = N_("Blood Stone");
const char *IDI_MAPOFDOOM_NAME = N_("Cathedral Map");
const char *IDI_EAR_NAME = N_("Heart");
const char *IDI_EAR_NAME = N_("Ear");
const char *IDI_HEAL_NAME = N_("Potion of Healing");
const char *IDI_MANA_NAME = N_("Potion of Mana");
const char *IDI_IDENTIFY_NAME = N_("Scroll of Identify");
@ -293,70 +256,39 @@ const char *IDI_FULLNOTE_NAME = N_("Reconstructed Note");
const char *IDI_BROWNSUIT_NAME = N_("Brown Suit");
const char *IDI_GREYSUIT_NAME = N_("Grey Suit");
const char *ITEM_48_NAME = N_("Cap");
const char *ITEM_48_SHORT_NAME = N_("Cap");
const char *ITEM_49_NAME = N_("Skull Cap");
const char *ITEM_49_SHORT_NAME = N_("Cap");
const char *ITEM_50_NAME = N_("Helm");
const char *ITEM_50_SHORT_NAME = N_("Helm");
const char *ITEM_51_NAME = N_("Full Helm");
const char *ITEM_51_SHORT_NAME = N_("Helm");
const char *ITEM_52_NAME = N_("Crown");
const char *ITEM_52_SHORT_NAME = N_("Crown");
const char *ITEM_53_NAME = N_("Great Helm");
const char *ITEM_53_SHORT_NAME = N_("Helm");
const char *ITEM_54_NAME = N_("Cape");
const char *ITEM_54_SHORT_NAME = N_("Cape");
const char *ITEM_55_NAME = N_("Rags");
const char *ITEM_55_SHORT_NAME = N_("Rags");
const char *ITEM_56_NAME = N_("Cloak");
const char *ITEM_56_SHORT_NAME = N_("Cloak");
const char *ITEM_57_NAME = N_("Robe");
const char *ITEM_57_SHORT_NAME = N_("Robe");
const char *ITEM_58_NAME = N_("Quilted Armor");
const char *ITEM_58_SHORT_NAME = N_("Armor");
const char *ITEM_59_NAME = N_("Leather Armor");
const char *ITEM_59_SHORT_NAME = N_("Armor");
const char *ITEM_60_NAME = N_("Hard Leather Armor");
const char *ITEM_60_SHORT_NAME = N_("Armor");
const char *ITEM_61_NAME = N_("Studded Leather Armor");
const char *ITEM_61_SHORT_NAME = N_("Armor");
const char *ITEM_62_NAME = N_("Ring Mail");
const char *ITEM_62_SHORT_NAME = N_("Mail");
const char *ITEM_63_NAME = N_("Chain Mail");
const char *ITEM_63_SHORT_NAME = N_("Mail");
const char *ITEM_64_NAME = N_("Scale Mail");
const char *ITEM_64_SHORT_NAME = N_("Mail");
const char *ITEM_65_NAME = N_("Breast Plate");
const char *ITEM_65_SHORT_NAME = N_("Plate");
const char *ITEM_66_NAME = N_("Splint Mail");
const char *ITEM_66_SHORT_NAME = N_("Mail");
const char *ITEM_67_NAME = N_("Plate Mail");
const char *ITEM_67_SHORT_NAME = N_("Plate");
const char *ITEM_68_NAME = N_("Field Plate");
const char *ITEM_68_SHORT_NAME = N_("Plate");
const char *ITEM_69_NAME = N_("Gothic Plate");
const char *ITEM_69_SHORT_NAME = N_("Plate");
const char *ITEM_70_NAME = N_("Full Plate Mail");
const char *ITEM_70_SHORT_NAME = N_("Plate");
const char *ITEM_71_NAME = N_("Buckler");
const char *ITEM_71_SHORT_NAME = N_("Shield");
const char *ITEM_72_NAME = N_("Small Shield");
const char *ITEM_72_SHORT_NAME = N_("Shield");
const char *ITEM_73_NAME = N_("Large Shield");
const char *ITEM_73_SHORT_NAME = N_("Shield");
const char *ITEM_74_NAME = N_("Kite Shield");
const char *ITEM_74_SHORT_NAME = N_("Shield");
const char *ITEM_75_NAME = N_("Tower Shield");
const char *ITEM_75_SHORT_NAME = N_("Shield");
const char *ITEM_76_NAME = N_("Gothic Shield");
const char *ITEM_76_SHORT_NAME = N_("Shield");
const char *ITEM_77_NAME = N_("Potion of Healing");
const char *ITEM_78_NAME = N_("Potion of Full Healing");
const char *ITEM_79_NAME = N_("Potion of Mana");
const char *ITEM_80_NAME = N_("Potion of Full Mana");
const char *ITEM_81_NAME = N_("Potion of Rejuvenation");
const char *ITEM_82_NAME = N_("Potion of Full Rejuvenation");
const char *ITEM_83_NAME = N_("Blacksmith Oil");
const char *ITEM_84_NAME = N_("Oil of Accuracy");
const char *ITEM_85_NAME = N_("Oil of Sharpness");
const char *ITEM_86_NAME = N_("Oil");
@ -367,11 +299,8 @@ const char *ITEM_90_NAME = N_("Elixir of Vitality");
const char *ITEM_91_NAME = N_("Scroll of Healing");
const char *ITEM_92_NAME = N_("Scroll of Search");
const char *ITEM_93_NAME = N_("Scroll of Lightning");
const char *ITEM_94_NAME = N_("Scroll of Identify");
const char *ITEM_95_NAME = N_("Scroll of Resurrect");
const char *ITEM_96_NAME = N_("Scroll of Fire Wall");
const char *ITEM_97_NAME = N_("Scroll of Inferno");
const char *ITEM_98_NAME = N_("Scroll of Town Portal");
const char *ITEM_99_NAME = N_("Scroll of Flash");
const char *ITEM_100_NAME = N_("Scroll of Infravision");
const char *ITEM_101_NAME = N_("Scroll of Phasing");
@ -385,114 +314,54 @@ const char *ITEM_109_NAME = N_("Scroll of Nova");
const char *ITEM_110_NAME = N_("Scroll of Golem");
const char *ITEM_112_NAME = N_("Scroll of Teleport");
const char *ITEM_113_NAME = N_("Scroll of Apocalypse");
const char *ITEM_118_NAME = N_("Dagger");
const char *ITEM_118_SHORT_NAME = N_("Dagger");
const char *ITEM_119_NAME = N_("Short Sword");
const char *ITEM_119_SHORT_NAME = N_("Sword");
const char *ITEM_120_NAME = N_("Falchion");
const char *ITEM_120_SHORT_NAME = N_("Sword");
const char *ITEM_121_NAME = N_("Scimitar");
const char *ITEM_121_SHORT_NAME = N_("Sword");
const char *ITEM_122_NAME = N_("Claymore");
const char *ITEM_122_SHORT_NAME = N_("Sword");
const char *ITEM_123_NAME = N_("Blade");
const char *ITEM_123_SHORT_NAME = N_("Blade");
const char *ITEM_124_NAME = N_("Sabre");
const char *ITEM_124_SHORT_NAME = N_("Sabre");
const char *ITEM_125_NAME = N_("Long Sword");
const char *ITEM_125_SHORT_NAME = N_("Sword");
const char *ITEM_126_NAME = N_("Broad Sword");
const char *ITEM_126_SHORT_NAME = N_("Sword");
const char *ITEM_127_NAME = N_("Bastard Sword");
const char *ITEM_127_SHORT_NAME = N_("Sword");
const char *ITEM_128_NAME = N_("Two-Handed Sword");
const char *ITEM_128_SHORT_NAME = N_("Sword");
const char *ITEM_129_NAME = N_("Great Sword");
const char *ITEM_129_SHORT_NAME = N_("Sword");
const char *ITEM_130_NAME = N_("Small Axe");
const char *ITEM_130_SHORT_NAME = N_("Axe");
const char *ITEM_131_NAME = N_("Axe");
const char *ITEM_131_SHORT_NAME = N_("Axe");
const char *ITEM_132_NAME = N_("Large Axe");
const char *ITEM_132_SHORT_NAME = N_("Axe");
const char *ITEM_133_NAME = N_("Broad Axe");
const char *ITEM_133_SHORT_NAME = N_("Axe");
const char *ITEM_134_NAME = N_("Battle Axe");
const char *ITEM_134_SHORT_NAME = N_("Axe");
const char *ITEM_135_NAME = N_("Great Axe");
const char *ITEM_135_SHORT_NAME = N_("Axe");
const char *ITEM_136_NAME = N_("Mace");
const char *ITEM_136_SHORT_NAME = N_("Mace");
const char *ITEM_137_NAME = N_("Morning Star");
const char *ITEM_137_SHORT_NAME = N_("Mace");
const char *ITEM_138_NAME = N_("War Hammer");
const char *ITEM_138_SHORT_NAME = N_("Hammer");
const char *ITEM_139_NAME = N_("Spiked Club");
const char *ITEM_139_SHORT_NAME = N_("Club");
const char *ITEM_140_NAME = N_("Club");
const char *ITEM_140_SHORT_NAME = N_("Club");
const char *ITEM_141_NAME = N_("Flail");
const char *ITEM_141_SHORT_NAME = N_("Flail");
const char *ITEM_142_NAME = N_("Maul");
const char *ITEM_142_SHORT_NAME = N_("Maul");
const char *ITEM_143_NAME = N_("Short Bow");
const char *ITEM_143_SHORT_NAME = N_("Bow");
const char *ITEM_144_NAME = N_("Hunter's Bow");
const char *ITEM_144_SHORT_NAME = N_("Bow");
const char *ITEM_145_NAME = N_("Long Bow");
const char *ITEM_145_SHORT_NAME = N_("Bow");
const char *ITEM_146_NAME = N_("Composite Bow");
const char *ITEM_146_SHORT_NAME = N_("Bow");
const char *IDI_SHORT_BATTLE_BOW_NAME = N_("Short Battle Bow");
const char *IDI_SHORT_BATTLE_BOW_SHORT_NAME = N_("Bow");
const char *ITEM_148_NAME = N_("Long Battle Bow");
const char *ITEM_148_SHORT_NAME = N_("Bow");
const char *ITEM_149_NAME = N_("Short War Bow");
const char *ITEM_149_SHORT_NAME = N_("Bow");
const char *ITEM_150_NAME = N_("Long War Bow");
const char *ITEM_150_SHORT_NAME = N_("Bow");
const char *ITEM_151_NAME = N_("Short Staff");
const char *ITEM_151_SHORT_NAME = N_("Staff");
const char *ITEM_152_NAME = N_("Long Staff");
const char *ITEM_152_SHORT_NAME = N_("Staff");
const char *ITEM_153_NAME = N_("Composite Staff");
const char *ITEM_153_SHORT_NAME = N_("Staff");
const char *ITEM_154_NAME = N_("Quarter Staff");
const char *ITEM_154_SHORT_NAME = N_("Staff");
const char *ITEM_155_NAME = N_("War Staff");
const char *ITEM_155_SHORT_NAME = N_("Staff");
const char *ITEM_156_NAME = N_("Ring");
const char *ITEM_156_SHORT_NAME = N_("Ring");
const char *ITEM_157_NAME = N_("Ring");
const char *ITEM_157_SHORT_NAME = N_("Ring");
const char *ITEM_158_NAME = N_("Ring");
const char *ITEM_158_SHORT_NAME = N_("Ring");
const char *ITEM_159_NAME = N_("Amulet");
const char *ITEM_159_SHORT_NAME = N_("Amulet");
const char *ITEM_160_NAME = N_("Amulet");
const char *ITEM_160_SHORT_NAME = N_("Amulet");
const char *ITEM_161_NAME = N_("Rune of Fire");
const char *ITEM_161_SHORT_NAME = N_("Rune");
const char *ITEM_162_NAME = N_("Rune of Lightning");
const char *ITEM_162_SHORT_NAME = N_("Rune");
const char *ITEM_163_NAME = N_("Greater Rune of Fire");
const char *ITEM_163_SHORT_NAME = N_("Rune");
const char *ITEM_164_NAME = N_("Greater Rune of Lightning");
const char *ITEM_164_SHORT_NAME = N_("Rune");
const char *ITEM_165_NAME = N_("Rune of Stone");
const char *ITEM_165_SHORT_NAME = N_("Rune");
const char *IDI_SORCERER_NAME = N_("Short Staff of Charged Bolt");
const char *ITEM_166_NAME = N_("Short Staff of Charged Bolt");
const char *IDI_ARENAPOT_NAME = N_("Arena Potion");
const char *UNIQUE_ITEM_0_NAME = N_("The Butcher's Cleaver");
const char *UNIQUE_ITEM_1_NAME = N_("The Undead Crown");
const char *UNIQUE_ITEM_2_NAME = N_("Empyrean Band");
const char *UNIQUE_ITEM_3_NAME = N_("Optic Amulet");
const char *UNIQUE_ITEM_4_NAME = N_("Ring of Truth");
const char *UNIQUE_ITEM_5_NAME = N_("Harlequin Crest");
const char *UNIQUE_ITEM_6_NAME = N_("Veil of Steel");
const char *UNIQUE_ITEM_7_NAME = N_("Arkaine's Valor");
const char *UNIQUE_ITEM_8_NAME = N_("Griswold's Edge");
const char *UNIQUE_ITEM_9_NAME = N_("Bovine Plate");
const char *UNIQUE_ITEM_9_NAME = N_("Lightforge");
const char *UNIQUE_ITEM_10_NAME = N_("The Rift Bow");
const char *UNIQUE_ITEM_11_NAME = N_("The Needler");
const char *UNIQUE_ITEM_12_NAME = N_("The Celestial Bow");
@ -573,33 +442,12 @@ const char *UNIQUE_ITEM_86_NAME = N_("Ring of Regha");
const char *UNIQUE_ITEM_87_NAME = N_("The Bleeder");
const char *UNIQUE_ITEM_88_NAME = N_("Constricting Ring");
const char *UNIQUE_ITEM_89_NAME = N_("Ring of Engagement");
const char *UNIQUE_ITEM_90_NAME = N_("Giant's Knuckle");
const char *UNIQUE_ITEM_91_NAME = N_("Mercurial Ring");
const char *UNIQUE_ITEM_92_NAME = N_("Xorine's Ring");
const char *UNIQUE_ITEM_93_NAME = N_("Karik's Ring");
const char *UNIQUE_ITEM_94_NAME = N_("Ring of Magma");
const char *UNIQUE_ITEM_95_NAME = N_("Ring of the Mystics");
const char *UNIQUE_ITEM_96_NAME = N_("Ring of Thunder");
const char *UNIQUE_ITEM_97_NAME = N_("Amulet of Warding");
const char *UNIQUE_ITEM_98_NAME = N_("Gnat Sting");
const char *UNIQUE_ITEM_99_NAME = N_("Flambeau");
const char *UNIQUE_ITEM_100_NAME = N_("Armor of Gloom");
const char *UNIQUE_ITEM_101_NAME = N_("Blitzen");
const char *UNIQUE_ITEM_102_NAME = N_("Thunderclap");
const char *UNIQUE_ITEM_103_NAME = N_("Shirotachi");
const char *UNIQUE_ITEM_104_NAME = N_("Eater of Souls");
const char *UNIQUE_ITEM_105_NAME = N_("Diamondedge");
const char *UNIQUE_ITEM_106_NAME = N_("Bone Chain Armor");
const char *UNIQUE_ITEM_107_NAME = N_("Demon Plate Armor");
const char *UNIQUE_ITEM_108_NAME = N_("Acolyte's Amulet");
const char *UNIQUE_ITEM_109_NAME = N_("Gladiator's Ring");
const char *ITEM_PREFIX_0_NAME = N_("Tin");
const char *ITEM_PREFIX_1_NAME = N_("Brass");
const char *ITEM_PREFIX_2_NAME = N_("Bronze");
const char *ITEM_PREFIX_3_NAME = N_("Iron");
const char *ITEM_PREFIX_4_NAME = N_("Steel");
const char *ITEM_PREFIX_5_NAME = N_("Silver");
const char *ITEM_PREFIX_6_NAME = N_("Gold");
const char *ITEM_PREFIX_7_NAME = N_("Platinum");
const char *ITEM_PREFIX_8_NAME = N_("Mithril");
const char *ITEM_PREFIX_9_NAME = N_("Meteoric");
@ -630,7 +478,6 @@ const char *ITEM_PREFIX_33_NAME = N_("Champion's");
const char *ITEM_PREFIX_34_NAME = N_("King's");
const char *ITEM_PREFIX_35_NAME = N_("Vulnerable");
const char *ITEM_PREFIX_36_NAME = N_("Rusted");
const char *ITEM_PREFIX_37_NAME = N_("Fine");
const char *ITEM_PREFIX_38_NAME = N_("Strong");
const char *ITEM_PREFIX_39_NAME = N_("Grand");
const char *ITEM_PREFIX_40_NAME = N_("Valiant");
@ -642,7 +489,6 @@ const char *ITEM_PREFIX_45_NAME = N_("Holy");
const char *ITEM_PREFIX_46_NAME = N_("Godly");
const char *ITEM_PREFIX_47_NAME = N_("Red");
const char *ITEM_PREFIX_48_NAME = N_("Crimson");
const char *ITEM_PREFIX_49_NAME = N_("Crimson");
const char *ITEM_PREFIX_50_NAME = N_("Garnet");
const char *ITEM_PREFIX_51_NAME = N_("Ruby");
const char *ITEM_PREFIX_52_NAME = N_("Blue");
@ -676,9 +522,6 @@ const char *ITEM_PREFIX_79_NAME = N_("Plentiful");
const char *ITEM_PREFIX_80_NAME = N_("Bountiful");
const char *ITEM_PREFIX_81_NAME = N_("Flaming");
const char *ITEM_PREFIX_82_NAME = N_("Lightning");
const char *ITEM_PREFIX_83_NAME = N_("Jester's");
const char *ITEM_PREFIX_84_NAME = N_("Crystalline");
const char *ITEM_PREFIX_85_NAME = N_("Doppelganger's");
const char *ITEM_SUFFIX_0_NAME = N_("quality");
const char *ITEM_SUFFIX_1_NAME = N_("maiming");
const char *ITEM_SUFFIX_2_NAME = N_("slaying");
@ -774,9 +617,6 @@ const char *ITEM_SUFFIX_91_NAME = N_("balance");
const char *ITEM_SUFFIX_92_NAME = N_("stability");
const char *ITEM_SUFFIX_93_NAME = N_("harmony");
const char *ITEM_SUFFIX_94_NAME = N_("blocking");
const char *ITEM_SUFFIX_95_NAME = N_("devastation");
const char *ITEM_SUFFIX_96_NAME = N_("decay");
const char *ITEM_SUFFIX_97_NAME = N_("peril");
const char *SPELL_FIREBOLT_NAME = P_("spell", "Firebolt");
const char *SPELL_HEALING_NAME = P_("spell", "Healing");
const char *SPELL_LIGHTNING_NAME = P_("spell", "Lightning");
@ -813,6 +653,56 @@ const char *SPELL_TELEKINESIS_NAME = P_("spell", "Telekinesis");
const char *SPELL_HEAL_OTHER_NAME = P_("spell", "Heal Other");
const char *SPELL_BLOOD_STAR_NAME = P_("spell", "Blood Star");
const char *SPELL_BONE_SPIRIT_NAME = P_("spell", "Bone Spirit");
const char *MT_HELLBOAR_NAME = P_("monster", "Hellboar");
const char *MT_STINGER_NAME = P_("monster", "Stinger");
const char *MT_PSYCHORB_NAME = P_("monster", "Psychorb");
const char *MT_ARACHNON_NAME = P_("monster", "Arachnon");
const char *MT_FELLTWIN_NAME = P_("monster", "Felltwin");
const char *MT_HORKSPWN_NAME = P_("monster", "Hork Spawn");
const char *MT_VENMTAIL_NAME = P_("monster", "Venomtail");
const char *MT_NECRMORB_NAME = P_("monster", "Necromorb");
const char *MT_SPIDLORD_NAME = P_("monster", "Spider Lord");
const char *MT_LASHWORM_NAME = P_("monster", "Lashworm");
const char *MT_TORCHANT_NAME = P_("monster", "Torchant");
const char *MT_DEFILER_NAME = P_("monster", "Hell Bug");
const char *MT_GRAVEDIG_NAME = P_("monster", "Gravedigger");
const char *MT_TOMBRAT_NAME = P_("monster", "Tomb Rat");
const char *MT_FIREBAT_NAME = P_("monster", "Firebat");
const char *MT_SKLWING_NAME = P_("monster", "Skullwing");
const char *MT_LICH_NAME = P_("monster", "Lich");
const char *MT_CRYPTDMN_NAME = P_("monster", "Crypt Demon");
const char *MT_HELLBAT_NAME = P_("monster", "Hellbat");
const char *MT_BONEDEMN_NAME = P_("monster", "Bone Demon");
const char *MT_ARCHLICH_NAME = P_("monster", "Arch Lich");
const char *MT_BICLOPS_NAME = P_("monster", "Biclops");
const char *MT_FLESTHNG_NAME = P_("monster", "Flesh Thing");
const char *MT_REAPER_NAME = P_("monster", "Reaper");
const char *UNIQUE_ITEM_90_NAME = N_("Giant's Knuckle");
const char *UNIQUE_ITEM_91_NAME = N_("Mercurial Ring");
const char *UNIQUE_ITEM_92_NAME = N_("Xorine's Ring");
const char *UNIQUE_ITEM_93_NAME = N_("Karik's Ring");
const char *UNIQUE_ITEM_94_NAME = N_("Ring of Magma");
const char *UNIQUE_ITEM_95_NAME = N_("Ring of the Mystics");
const char *UNIQUE_ITEM_96_NAME = N_("Ring of Thunder");
const char *UNIQUE_ITEM_97_NAME = N_("Amulet of Warding");
const char *UNIQUE_ITEM_98_NAME = N_("Gnat Sting");
const char *UNIQUE_ITEM_99_NAME = N_("Flambeau");
const char *UNIQUE_ITEM_100_NAME = N_("Armor of Gloom");
const char *UNIQUE_ITEM_101_NAME = N_("Blitzen");
const char *UNIQUE_ITEM_102_NAME = N_("Thunderclap");
const char *UNIQUE_ITEM_103_NAME = N_("Shirotachi");
const char *UNIQUE_ITEM_104_NAME = N_("Eater of Souls");
const char *UNIQUE_ITEM_105_NAME = N_("Diamondedge");
const char *UNIQUE_ITEM_106_NAME = N_("Bone Chain Armor");
const char *UNIQUE_ITEM_107_NAME = N_("Demon Plate Armor");
const char *UNIQUE_ITEM_108_NAME = N_("Acolyte's Amulet");
const char *UNIQUE_ITEM_109_NAME = N_("Gladiator's Ring");
const char *ITEM_PREFIX_83_NAME = N_("Jester's");
const char *ITEM_PREFIX_84_NAME = N_("Crystalline");
const char *ITEM_PREFIX_85_NAME = N_("Doppelganger's");
const char *ITEM_SUFFIX_95_NAME = N_("devastation");
const char *ITEM_SUFFIX_96_NAME = N_("decay");
const char *ITEM_SUFFIX_97_NAME = N_("peril");
const char *SPELL_MANA_NAME = P_("spell", "Mana");
const char *SPELL_THE_MAGI_NAME = P_("spell", "the Magi");
const char *SPELL_THE_JESTER_NAME = P_("spell", "the Jester");
@ -828,3 +718,5 @@ const char *SPELL_RUNE_OF_LIGHT_NAME = P_("spell", "Rune of Light");
const char *SPELL_RUNE_OF_NOVA_NAME = P_("spell", "Rune of Nova");
const char *SPELL_RUNE_OF_IMMOLATION_NAME = P_("spell", "Rune of Immolation");
const char *SPELL_RUNE_OF_STONE_NAME = P_("spell", "Rune of Stone");
} // namespace

2
assets/txtdata/items/itemdat.tsv

@ -165,5 +165,5 @@ IDI_SHORT_BATTLE_BOW 2 Weapon Two-handed SHORT_BATTLE_BOW Bow NONE Short Battle
1 Misc Unequippable GREATER_RUNE_OF_FIRE Misc NONE Greater Rune of Fire Rune 7 0 0 0 0 0 0 42 0 GR_RUNEF Null true 400
1 Misc Unequippable GREATER_RUNE_OF_LIGHTNING Misc NONE Greater Rune of Lightning Rune 7 0 0 0 0 0 0 42 0 GR_RUNEL Null true 500
1 Misc Unequippable RUNE_OF_STONE Misc NONE Rune of Stone Rune 7 0 0 0 0 0 0 25 0 RUNES Null true 300
IDI_SORCERER 0 Weapon Two-handed SHORT_STAFF Staff NONE Short Staff of Charged Bolt 1 25 2 4 0 0 0 25 0 STAFF ChargedBolt false 470
0 Weapon Two-handed SHORT_STAFF Staff NONE Short Staff of Charged Bolt 1 25 2 4 0 0 0 25 0 STAFF ChargedBolt false 470
IDI_ARENAPOT 0 Misc Unequippable ARENA_POTION Misc NONE Arena Potion 7 0 0 0 0 0 0 0 0 ARENAPOT Null true 0

1 id dropRate class equipType cursorGraphic itemType uniqueBaseItem name shortName minMonsterLevel durability minDamage maxDamage minArmor maxArmor minStrength minMagic minDexterity specialEffects miscId spell usable value
165 1 Misc Unequippable GREATER_RUNE_OF_FIRE Misc NONE Greater Rune of Fire Rune 7 0 0 0 0 0 0 42 0 GR_RUNEF Null true 400
166 1 Misc Unequippable GREATER_RUNE_OF_LIGHTNING Misc NONE Greater Rune of Lightning Rune 7 0 0 0 0 0 0 42 0 GR_RUNEL Null true 500
167 1 Misc Unequippable RUNE_OF_STONE Misc NONE Rune of Stone Rune 7 0 0 0 0 0 0 25 0 RUNES Null true 300
168 IDI_SORCERER 0 Weapon Two-handed SHORT_STAFF Staff NONE Short Staff of Charged Bolt 1 25 2 4 0 0 0 25 0 STAFF ChargedBolt false 470
169 IDI_ARENAPOT 0 Misc Unequippable ARENA_POTION Misc NONE Arena Potion 7 0 0 0 0 0 0 0 0 ARENAPOT Null true 0

123
tools/extract_translation_data.py

@ -4,68 +4,101 @@ import pathlib
root = pathlib.Path(__file__).resolve().parent.parent
translation_dummy_path = root.joinpath("Source/translation_dummy.cpp")
monstdat_path = root.joinpath("assets/txtdata/monsters/monstdat.tsv")
unique_monstdat_path = root.joinpath("assets/txtdata/monsters/unique_monstdat.tsv")
itemdat_path = root.joinpath("assets/txtdata/items/itemdat.tsv")
unique_itemdat_path = root.joinpath("assets/txtdata/items/unique_itemdat.tsv")
item_prefixes_path = root.joinpath("assets/txtdata/items/item_prefixes.tsv")
item_suffixes_path = root.joinpath("assets/txtdata/items/item_suffixes.tsv")
spelldat_path = root.joinpath("assets/txtdata/spells/spelldat.tsv")
with open(translation_dummy_path, 'w') as temp_source:
temp_source.write(f'/**\n')
temp_source.write(f' * @file translation_dummy.cpp\n')
temp_source.write(f' *\n')
temp_source.write(f' * Do not edit this file manually, it is automatically generated\n')
temp_source.write(f' * and updated by the extract_translation_data.py script.\n')
temp_source.write(f' */\n')
temp_source.write(f'#include "utils/language.h"\n')
temp_source.write(f'\n')
with open(monstdat_path, 'r') as tsv:
base_paths = {
"monstdat": root.joinpath("assets/txtdata/monsters/monstdat.tsv"),
"unique_monstdat": root.joinpath("assets/txtdata/monsters/unique_monstdat.tsv"),
"itemdat": root.joinpath("assets/txtdata/items/itemdat.tsv"),
"unique_itemdat": root.joinpath("assets/txtdata/items/unique_itemdat.tsv"),
"item_prefixes": root.joinpath("assets/txtdata/items/item_prefixes.tsv"),
"item_suffixes": root.joinpath("assets/txtdata/items/item_suffixes.tsv"),
"spelldat": root.joinpath("assets/txtdata/spells/spelldat.tsv"),
}
hf_paths = {
"monstdat": root.joinpath("mods/Hellfire/txtdata/monsters/monstdat.tsv"),
"unique_itemdat": root.joinpath("mods/Hellfire/txtdata/items/unique_itemdat.tsv"),
"item_prefixes": root.joinpath("mods/Hellfire/txtdata/items/item_prefixes.tsv"),
"item_suffixes": root.joinpath("mods/Hellfire/txtdata/items/item_suffixes.tsv"),
"spelldat": root.joinpath("mods/Hellfire/txtdata/spells/spelldat.tsv"),
}
seen_pairs = set()
def write_entry(temp_source, var_name, context, string_value, use_p):
if not string_value:
return
key = (context, string_value)
if key in seen_pairs:
return
seen_pairs.add(key)
if use_p:
temp_source.write(f'const char *{var_name} = P_("{context}", "{string_value}");\n')
else:
temp_source.write(f'const char *{var_name} = N_("{string_value}");\n')
def process_files(paths, temp_source):
# Monsters
with open(paths["monstdat"], 'r') as tsv:
reader = csv.DictReader(tsv, delimiter='\t')
for row in reader:
name = row['name']
var_name = row['_monster_id'] + "_NAME"
temp_source.write(f'const char *{var_name} = P_("monster", "{name}");\n')
with open(unique_monstdat_path, 'r') as tsv:
write_entry(temp_source, var_name, "monster", row['name'], True)
if "unique_monstdat" in paths:
with open(paths["unique_monstdat"], 'r') as tsv:
reader = csv.DictReader(tsv, delimiter='\t')
for row in reader:
name = row['name']
var_name = name.upper().replace(' ', '_').replace('-', '_') + "_NAME"
temp_source.write(f'const char *{var_name} = P_("monster", "{name}");\n')
with open(itemdat_path, 'r') as tsv:
var_name = row['name'].upper().replace(' ', '_').replace('-', '_') + "_NAME"
write_entry(temp_source, var_name, "monster", row['name'], True)
# Items
if "itemdat" in paths:
with open(paths["itemdat"], 'r') as tsv:
reader = csv.DictReader(tsv, delimiter='\t')
for i, row in enumerate(reader):
id = row['id']
name = row['name']
if name == 'Scroll of None' or name == 'Non Item' or name == 'Book of ':
if name in ('Scroll of None', 'Non Item', 'Book of '):
continue
shortName = row['shortName']
var_name = id if id else f'ITEM_{i}'
temp_source.write(f'const char *{var_name}_NAME = N_("{name}");\n')
var_name = row['id'] if row['id'] else f'ITEM_{i}'
write_entry(temp_source, f'{var_name}_NAME', "default", name, False)
if shortName:
temp_source.write(f'const char *{var_name}_SHORT_NAME = N_("{shortName}");\n')
with open(unique_itemdat_path, 'r') as tsv:
write_entry(temp_source, f'{var_name}_SHORT_NAME', "default", shortName, False)
with open(paths["unique_itemdat"], 'r') as tsv:
reader = csv.DictReader(tsv, delimiter='\t')
for i, row in enumerate(reader):
name = row['name']
var_name = f'UNIQUE_ITEM_{i}'
temp_source.write(f'const char *{var_name}_NAME = N_("{name}");\n')
with open(item_prefixes_path, 'r') as tsv:
write_entry(temp_source, f'UNIQUE_ITEM_{i}_NAME', "default", row['name'], False)
with open(paths["item_prefixes"], 'r') as tsv:
reader = csv.DictReader(tsv, delimiter='\t')
for i, row in enumerate(reader):
name = row['name']
var_name = f'ITEM_PREFIX_{i}'
temp_source.write(f'const char *{var_name}_NAME = N_("{name}");\n')
with open(item_suffixes_path, 'r') as tsv:
write_entry(temp_source, f'ITEM_PREFIX_{i}_NAME', "default", row['name'], False)
with open(paths["item_suffixes"], 'r') as tsv:
reader = csv.DictReader(tsv, delimiter='\t')
for i, row in enumerate(reader):
name = row['name']
var_name = f'ITEM_SUFFIX_{i}'
temp_source.write(f'const char *{var_name}_NAME = N_("{name}");\n')
with open(spelldat_path, 'r') as tsv:
write_entry(temp_source, f'ITEM_SUFFIX_{i}_NAME', "default", row['name'], False)
# Spells
with open(paths["spelldat"], 'r') as tsv:
reader = csv.DictReader(tsv, delimiter='\t')
for i, row in enumerate(reader):
name = row['name']
var_name = 'SPELL_' + name.upper().replace(' ', '_').replace('-', '_')
temp_source.write(f'const char *{var_name}_NAME = P_("spell", "{name}");\n')
var_name = 'SPELL_' + row['name'].upper().replace(' ', '_').replace('-', '_')
write_entry(temp_source, f'{var_name}_NAME', "spell", row['name'], True)
with open(translation_dummy_path, 'w') as temp_source:
temp_source.write(f'/**\n')
temp_source.write(f' * @file translation_dummy.cpp\n')
temp_source.write(f' *\n')
temp_source.write(f' * Do not edit this file manually, it is automatically generated\n')
temp_source.write(f' * and updated by the extract_translation_data.py script.\n')
temp_source.write(f' */\n')
temp_source.write(f'#include "utils/language.h"\n\n')
temp_source.write(f'namespace {{\n\n')
process_files(base_paths, temp_source)
process_files(hf_paths, temp_source)
temp_source.write(f'\n}} // namespace\n')

Loading…
Cancel
Save