diff --git a/asset-manifest.json b/asset-manifest.json index 15a1da65..f5f810d5 100644 --- a/asset-manifest.json +++ b/asset-manifest.json @@ -1,7 +1,7 @@ { "files": { "main.css": "/static/css/main.e3b61faf.css", - "main.js": "/static/js/main.634f061e.js", + "main.js": "/static/js/main.8b39682a.js", "static/js/453.6d1697a3.chunk.js": "/static/js/453.6d1697a3.chunk.js", "static/media/mwg-forge.gif": "/static/media/mwg-forge.6cc9d70962649b7d09e6.gif", "static/media/spain.svg": "/static/media/spain.fe46f7a778fdc34b4cb31895f52d2247.svg", @@ -33,11 +33,11 @@ "static/media/polen.svg": "/static/media/polen.0882b3e3846c9861e7150d74c94a7ee9.svg", "static/media/france.svg": "/static/media/france.bf26b172fbb19d5193a5a0a28e69c4ba.svg", "main.e3b61faf.css.map": "/static/css/main.e3b61faf.css.map", - "main.634f061e.js.map": "/static/js/main.634f061e.js.map", + "main.8b39682a.js.map": "/static/js/main.8b39682a.js.map", "453.6d1697a3.chunk.js.map": "/static/js/453.6d1697a3.chunk.js.map" }, "entrypoints": [ "static/css/main.e3b61faf.css", - "static/js/main.634f061e.js" + "static/js/main.8b39682a.js" ] } \ No newline at end of file diff --git a/games/the-old-world/daemons-of-chaos.json b/games/the-old-world/daemons-of-chaos.json index 798e3ae1..c35e2f57 100644 --- a/games/the-old-world/daemons-of-chaos.json +++ b/games/the-old-world/daemons-of-chaos.json @@ -3355,7 +3355,13 @@ "options": [], "mounts": [], "items": [], - "lores": ["daemonology", "dark-magic", "elementalism", "illusion"], + "lores": [ + "none", + "daemonology", + "dark-magic", + "elementalism", + "illusion" + ], "specialRules": { "name_en": "Daemonic, Daemons of Tzeentch, Flaming Attacks, Infernal Favour (1 - Exalted Flamer only), Lore of Daemons (Exalted Flamer only), Move Through Cover, Skirmishers", "name_de": "Daemonic, Daemons of Tzeentch, Flaming Attacks, Infernal Favour (1 - Exalted Flamer only), Lore of Daemons (Exalted Flamer only), Move Through Cover, Skirmishers", diff --git a/games/the-old-world/high-elf-realms.json b/games/the-old-world/high-elf-realms.json index 1d004e6d..9d29c270 100644 --- a/games/the-old-world/high-elf-realms.json +++ b/games/the-old-world/high-elf-realms.json @@ -3,7 +3,7 @@ { "name_en": "Prince", "name_it": "Prince", - "name_de": "Prince", + "name_de": "Prinz", "name_fr": "Prince", "name_es": "Príncipe", "id": "prince", @@ -22,7 +22,7 @@ { "name_en": "Hand weapon", "name_it": "Arma Bianca", - "name_de": "Hand weapon", + "name_de": "Handwaffe", "name_es": "Arma de mano", "points": 0, "perModel": true, @@ -32,7 +32,7 @@ { "name_en": "Additional hand weapon", "name_it": "Arma Addizionale", - "name_de": "Additional hand weapon", + "name_de": "Zusätzliche Handwaffe", "name_es": "Arma de mano adicional", "points": 3, "perModel": true, @@ -41,7 +41,7 @@ { "name_en": "Cavalry spear", "name_it": "Lancia Leggera", - "name_de": "Cavalry spear", + "name_de": "Kavalleriespeer", "name_es": "Lanza de caballería", "points": 2, "perModel": true, @@ -50,7 +50,7 @@ { "name_en": "Great weapon", "name_it": "Grande Arma", - "name_de": "Great weapon", + "name_de": "Zweihandwaffe", "name_es": "Arma a dos manos", "points": 4, "perModel": true, @@ -59,7 +59,7 @@ { "name_en": "Halberd", "name_it": "Alabarda", - "name_de": "Halberd", + "name_de": "Hellebarde", "name_es": "Alabarda", "points": 3, "perModel": true, @@ -68,7 +68,7 @@ { "name_en": "Lance", "name_it": "Lancia Pesante", - "name_de": "Lance", + "name_de": "Lanze", "name_es": "Lanza", "points": 4, "perModel": true, @@ -77,61 +77,66 @@ { "name_en": "Sword of Hoeth", "name_it": "Sword of Hoeth", - "name_de": "Sword of Hoeth", + "name_de": "Schwert aus Hoeth", "name_es": "Sword of Hoeth", "name_fr": "Sword of Hoeth", "points": 0, "requiredMagicItem": "Loremaster", "notes": { - "name_en": "Requires Loremaster Elven Honour" + "name_en": "Requires Loremaster Elven Honour", + "name_de": "Benötigt die Elfenehrung Lehrmeister" } }, { "name_en": "Sword of Hoeth", "name_it": "Sword of Hoeth", - "name_de": "Sword of Hoeth", + "name_de": "Schwert aus Hoeth", "name_es": "Sword of Hoeth", "name_fr": "Sword of Hoeth", "points": 0, "requiredMagicItem": "Warden of Saphery", "notes": { - "name_en": "Requires Warden of Saphery Honour" + "name_en": "Requires Warden of Saphery Honour", + "name_de": "Benötigt die Elfenehrung Wächter von Saphery" } }, { "name_en": "Bow of Avelorn", "name_it": "Arco di Avelorn", - "name_de": "Bow of Avelorn", + "name_de": "Bogen von Avelorn", "name_es": "Arco de Avelorn", "name_fr": "Arc d'Avelorn", "points": 0, "requiredMagicItem": "Shadow Stalker", "notes": { - "name_en": "Requires Shadow Stalker Elven Honour" + "name_en": "Requires Shadow Stalker Elven Honour", + "name_de": "Benötigt die Elfenehrung Schattenpirscher" } }, { "name_en": "Ceremonial halberd", "name_it": "Ceremonial halberd", - "name_de": "Ceremonial halberd", + "name_de": "Zeremoniehellebarde", "name_es": "Ceremonial halberd", "name_fr": "Ceremonial halberd", "points": 0, "requiredMagicItem": "Anointed of Asuryan", "notes": { - "name_en": "Requires Anointed of Asuryan Honour" + "name_en": "Requires Anointed of Asuryan Honour", + "name_de": "Benötigt die Elfenehrung Gesalbter des Asuryan" } }, { "name_en": "Chracian great blade", "name_it": "Chracian great blade", - "name_de": "Chracian great blade", + "name_de": "Chracianische Zweihandklinge", "name_es": "Chracian great blade", "name_fr": "Chracian great blade", "points": 0, "requiredMagicItem": "Chracian Hunter", "notes": { - "name_en": "Requires Chracian Hunter Honour" + "name_en": "Requires Chracian Hunter Honour", + "name_de": "Benötigt die Elfenehrung Chracianischer Jäger" } } ], @@ -139,7 +144,7 @@ { "name_en": "Light armour", "name_it": "Armatura Leggera", - "name_de": "Light armour", + "name_de": "Leichte Rüstung", "name_es": "Armadura ligera", "points": 0, "perModel": true, @@ -149,7 +154,7 @@ { "name_en": "Heavy armour", "name_it": "Armatura Pesante", - "name_de": "Heavy armour", + "name_de": "Schwere Rüstung", "name_es": "Armadura pesada", "points": 3, "perModel": true, @@ -158,7 +163,7 @@ { "name_en": "Full plate armour", "name_it": "Armatura Completa", - "name_de": "Full plate armour", + "name_de": "Plattenrüstung", "name_es": "Armadura completa", "points": 6, "perModel": true, @@ -167,13 +172,14 @@ { "name_en": "Full plate armour", "name_it": "Armatura Completa", - "name_de": "Full plate armour", + "name_de": "Plattenrüstung", "name_es": "Armadura completa", "name_fr": "Armure de plate complète", "points": 0, "requiredMagicItem": "Blood of Caledor", "notes": { - "name_en": "Requires Blood of Caledor Elven Honour" + "name_en": "Requires Blood of Caledor Elven Honour", + "name_de": "Benötigt die Elfenehrung Blut von Caledor" } } ], @@ -181,7 +187,7 @@ { "name_en": "Shield", "name_it": "Scudo", - "name_de": "Shield", + "name_de": "Schild", "name_es": "Escudo", "points": 2, "perModel": true, @@ -190,7 +196,7 @@ { "name_en": "Longbow", "name_it": "Arco Lungo", - "name_de": "Longbow", + "name_de": "Langbogen", "name_es": "Arco largo", "points": 4, "perModel": true, @@ -199,7 +205,7 @@ { "name_en": "Bow of Avelorn", "name_it": "Arco di Avelorn", - "name_de": "Bow of Avelorn", + "name_de": "Bogen von Avelorn", "name_es": "Arco de Avelorn", "points": 12, "perModel": true, @@ -210,7 +216,7 @@ { "name_en": "On foot", "name_it": "A Piedi", - "name_de": "On foot", + "name_de": "Zu Fuß", "name_es": "A pie", "points": 0, "active": true, @@ -219,7 +225,7 @@ { "name_en": "Elven Steed", "name_it": "Cavallo Elfico", - "name_de": "Elven Steed", + "name_de": "Elfenross", "name_fr": "Coursier Elfique", "name_es": "Corcel élfico", "points": 14 @@ -227,7 +233,7 @@ { "name_en": "Barded Elven Steed", "name_it": "Cavallo Elfico Bardato", - "name_de": "Barded Elven Steed", + "name_de": "Elfenross mit Rossharnisch", "name_fr": "Coursier Elfique Caparaçonné", "name_es": "Corcel élfico con barda", "points": 18 @@ -235,7 +241,7 @@ { "name_en": "Tiranoc Chariot", "name_it": "Carro di Tiranoc", - "name_de": "Tiranoc Chariot", + "name_de": "Tiranoc-Streitwagen", "name_fr": "Char de Tiranoc", "name_es": "Carro de Tiranoc", "points": 75 @@ -243,7 +249,7 @@ { "name_en": "Lion Chariot of Chrace", "name_it": "Carro dei Leoni di Chrace", - "name_de": "Lion Chariot of Chrace", + "name_de": "Löwenstreitwagen von Chrace", "name_fr": "Char à Lions de Chrace", "name_es": "Carro de leones de Cracia", "points": 125 @@ -251,14 +257,14 @@ { "name_en": "Lothern Skycutter", "name_it": "Lothern Skycutter", - "name_de": "Lothern Skycutter", + "name_de": "Himmelssegler von Lothern", "name_es": "Escolta celeste", "points": 90, "options": [ { "name_en": "Eagle-Eye Bolt Thrower", "name_it": "Eagle-Eye Balista", - "name_de": "Eagle-Eye Bolt Thrower", + "name_de": "Adlerauge-Speerschleuder", "name_fr": "Baliste Œil-d'aigle", "name_es": "Lanzavirotes ojo de águila", "points": 25 @@ -269,7 +275,7 @@ { "name_en": "Great Eagle {mount}", "name_it": "Grandi Aquile", - "name_de": "Great Eagle", + "name_de": "Riesenadler", "name_fr": "Grand Aigle", "name_es": "Gran águila", "points": 60 @@ -277,7 +283,7 @@ { "name_en": "Griffon {high elves}", "name_it": "Grifone {high elves}", - "name_de": "Griffon", + "name_de": "Greif", "name_fr": "Griffon", "name_es": "Grifo", "points": 130 @@ -285,7 +291,7 @@ { "name_en": "Flamespyre Phoenix {mount}", "name_it": "Fenice di Fuoco", - "name_de": "Flamsephyre Phoenix", + "name_de": "Flammensäulen-Phönix", "name_fr": "Phénix Spire-de-feu", "name_es": "Fénix pico llameante", "points": 170 @@ -293,7 +299,7 @@ { "name_en": "Frostheart Phoenix {mount}", "name_it": "Fenice di Ghiaccio", - "name_de": "Frostheart Phoenix", + "name_de": "Frostherz-Phönix", "name_fr": "Phénix Cœur-de-Givre", "name_es": "Fénix corazón gélido", "points": 205 @@ -301,7 +307,7 @@ { "name_en": "Sun Dragon", "name_it": "Drago del Sole", - "name_de": "Sun Dragon", + "name_de": "Sonnendrache", "name_fr": "Dragon Solaire", "name_es": "Dragón solar", "points": 180 @@ -309,7 +315,7 @@ { "name_en": "Moon Dragon", "name_it": "Drago della Luna", - "name_de": "Moon Dragon", + "name_de": "Monddrache", "name_fr": "Dragon Lunaire", "name_es": "Dragón lunar", "points": 235 @@ -317,7 +323,7 @@ { "name_en": "Star Dragon", "name_it": "Drago delle Stelle", - "name_de": "Star Dragon", + "name_de": "Sternendrache", "name_fr": "Dragon Stellaire", "name_es": "Dragón estelar", "points": 290 @@ -343,7 +349,7 @@ { "name_en": "Elven Honours", "name_it": "Onoroficenze Elfiche", - "name_de": "Elven Honours", + "name_de": "Elfenehrungen", "name_es": "Honores élficos", "types": ["elven-honour"], "selected": [], @@ -355,13 +361,14 @@ "name_en": "Ithilmar Weapons, Strike First, Valour of Ages", "name_it": "Ithilmar Weapons, Attacca Per Primo, Valore delle Ere", "name_fr": "Armes en Ithilmar, Frappe En Premier, Valeur des Âges", - "name_es": "Armas de Ithilmar, Siempre ataca primero, Valor de las eras" + "name_es": "Armas de Ithilmar, Siempre ataca primero, Valor de las eras", + "name_de": "Ithilmar-Waffen, Schlägt zuerst zu, Mut der Zeitalter" } }, { "name_en": "Noble", "name_it": "Noble", - "name_de": "Noble", + "name_de": "Edler", "name_fr": "Noble", "name_es": "Noble", "id": "noble", @@ -378,7 +385,7 @@ { "name_en": "Battle Standard Bearer", "name_it": "Stendardo da Battaglia", - "name_de": "Battle Standard Bearer", + "name_de": "Armeestandartenträger", "name_es": "Portaestandarte de batalla", "points": 25, "magic": { @@ -392,7 +399,7 @@ { "name_en": "Hand weapon", "name_it": "Arma Bianca", - "name_de": "Hand weapon", + "name_de": "Handwaffe", "name_es": "Arma de mano", "points": 0, "perModel": true, @@ -402,7 +409,7 @@ { "name_en": "Additional hand weapon", "name_it": "Arma Addizionale", - "name_de": "Additional hand weapon", + "name_de": "Zusätzliche Handwaffe", "name_es": "Arma de mano adicional", "points": 3, "perModel": true, @@ -411,7 +418,7 @@ { "name_en": "Cavalry spear", "name_it": "Lancia Leggera", - "name_de": "Cavalry spear", + "name_de": "Kavalleriespeer", "name_es": "Lanza de caballería", "points": 2, "perModel": true, @@ -420,7 +427,7 @@ { "name_en": "Great weapon", "name_it": "Grande Arma", - "name_de": "Great weapon", + "name_de": "Zweihandwaffe", "name_es": "Arma a dos manos", "points": 4, "perModel": true, @@ -429,7 +436,7 @@ { "name_en": "Halberd", "name_it": "Alabarda", - "name_de": "Halberd", + "name_de": "Hellebarde", "name_es": "Alabarda", "points": 3, "perModel": true, @@ -438,7 +445,7 @@ { "name_en": "Lance", "name_it": "Lancia Pesante", - "name_de": "Lance", + "name_de": "Lanze", "name_es": "Lanza", "points": 4, "perModel": true, @@ -447,7 +454,7 @@ { "name_en": "Sword of Hoeth", "name_it": "Sword of Hoeth", - "name_de": "Sword of Hoeth", + "name_de": "Schwert aus Hoeth", "name_es": "Sword of Hoeth", "name_fr": "Sword of Hoeth", "points": 0, @@ -459,7 +466,7 @@ { "name_en": "Sword of Hoeth", "name_it": "Sword of Hoeth", - "name_de": "Sword of Hoeth", + "name_de": "Schwert aus Hoeth", "name_es": "Sword of Hoeth", "name_fr": "Sword of Hoeth", "points": 0, @@ -471,7 +478,7 @@ { "name_en": "Bow of Avelorn", "name_it": "Arco di Avelorn", - "name_de": "Bow of Avelorn", + "name_de": "Bogen von Avelorn", "name_es": "Arco de Avelorn", "name_fr": "Arc d'Avelorn", "points": 0, @@ -483,7 +490,7 @@ { "name_en": "Ceremonial halberd", "name_it": "Ceremonial halberd", - "name_de": "Ceremonial halberd", + "name_de": "Zeremoniehellebarde", "name_es": "Ceremonial halberd", "name_fr": "Ceremonial halberd", "points": 0, @@ -495,7 +502,7 @@ { "name_en": "Chracian great blade", "name_it": "Chracian great blade", - "name_de": "Chracian great blade", + "name_de": "Chracianische Zweihandklinge", "name_es": "Chracian great blade", "name_fr": "Chracian great blade", "points": 0, @@ -509,7 +516,7 @@ { "name_en": "Light armour", "name_it": "Armatura Leggera", - "name_de": "Light armour", + "name_de": "Leichte Rüstung", "name_es": "Armadura ligera", "points": 0, "perModel": true, @@ -519,7 +526,7 @@ { "name_en": "Heavy armour", "name_it": "Armatura Pesante", - "name_de": "Heavy armour", + "name_de": "Schwere Rüstung", "name_es": "Armadura pesada", "points": 3, "perModel": true, @@ -528,7 +535,7 @@ { "name_en": "Full plate armour", "name_it": "Armatura Completa", - "name_de": "Full plate armour", + "name_de": "Plattenrüstung", "name_es": "Armadura de placas", "points": 6, "perModel": true, @@ -537,7 +544,7 @@ { "name_en": "Full plate armour", "name_it": "Armatura Completa", - "name_de": "Full plate armour", + "name_de": "Plattenrüstung", "name_es": "Armadura completa", "name_fr": "Armure de plate complète", "points": 0, @@ -551,7 +558,7 @@ { "name_en": "Shield", "name_it": "Scudo", - "name_de": "Shield", + "name_de": "Schild", "name_es": "Escudo", "points": 2, "perModel": true, @@ -560,7 +567,7 @@ { "name_en": "Longbow", "name_it": "Arco Lungo", - "name_de": "Longbow", + "name_de": "Langbogen", "name_es": "Arco largo", "points": 4, "perModel": true, @@ -569,7 +576,7 @@ { "name_en": "Bow of Avelorn", "name_it": "Arco di Avelorn", - "name_de": "Bow of Avelorn", + "name_de": "Bogen von Avelorn", "name_es": "Arco de Avelorn", "points": 12, "perModel": true, @@ -580,7 +587,7 @@ { "name_en": "On foot", "name_it": "A Piedi", - "name_de": "On foot", + "name_de": "Zu Fuß", "name_es": "A pie", "points": 0, "active": true, @@ -589,7 +596,7 @@ { "name_en": "Elven Steed", "name_it": "Cavallo Elfico", - "name_de": "Elven Steed", + "name_de": "Elfenross", "name_fr": "Coursier Elfique", "name_es": "Corcel élfico", "points": 14 @@ -597,7 +604,7 @@ { "name_en": "Barded Elven Steed", "name_it": "Cavallo Elfico Bardato", - "name_de": "Barded Elven Steed", + "name_de": "Elfenross mit Rossharnisch", "name_fr": "Coursier Elfique Caparaçonné", "name_es": "Corcel élfico con barda", "points": 18 @@ -605,7 +612,7 @@ { "name_en": "Tiranoc Chariot", "name_it": "Carro di Tiranoc", - "name_de": "Tiranoc Chariot", + "name_de": "Tiranoc-Streitwagen", "name_fr": "Char de Tiranoc", "name_es": "Carro de Tiranoc", "points": 75 @@ -613,7 +620,7 @@ { "name_en": "Lion Chariot of Chrace", "name_it": "Carro dei Leoni di Chrace", - "name_de": "Lion Chariot of Chrace", + "name_de": "Löwenstreitwagen von Chrace", "name_fr": "Char à Lions de Chrace", "name_es": "Carro de leones de Cracia", "points": 125 @@ -621,7 +628,7 @@ { "name_en": "Lothern Skycutter", "name_it": "Lothern Skycutter", - "name_de": "Lothern Skycutter", + "name_de": "Himmelssegler von Lothern", "name_fr": "Cotre Volant de Lothern", "name_es": "Escolta celeste", "points": 90, @@ -629,7 +636,7 @@ { "name_en": "Eagle-Eye Bolt Thrower", "name_it": "Eagle-Eye Balista", - "name_de": "Eagle-Eye Bolt Thrower", + "name_de": "Adlerauge-Speerschleuder", "name_fr": "Baliste Œil-d'aigle", "name_es": "Lanzavirotes ojo de águila", "points": 25 @@ -639,7 +646,7 @@ { "name_en": "Great Eagle {mount}", "name_it": "Grandi Aquile", - "name_de": "Great Eagle", + "name_de": "Riesenadler", "name_fr": "Grand Aigle", "name_es": "Gran águila", "points": 60 @@ -647,7 +654,7 @@ { "name_en": "Griffon {high elves}", "name_it": "Grifone {high elves}", - "name_de": "Griffon", + "name_de": "Greif", "name_fr": "Griffon", "name_es": "Grifo", "points": 130 @@ -655,7 +662,7 @@ { "name_en": "Flamespyre Phoenix {mount}", "name_it": "Fenice di Fuoco", - "name_de": "Flamsephyre Phoenix", + "name_de": "Flammensäulen-Phönix", "name_fr": "Phénix Spire-de-feu", "name_es": "Fénix pico llameante", "points": 170 @@ -663,7 +670,7 @@ { "name_en": "Frostheart Phoenix {mount}", "name_it": "Fenice di Ghiaccio", - "name_de": "Frostheart Phoenix", + "name_de": "Frostherz-Phönix", "name_fr": "Phénix Cœur-de-Givre", "name_es": "Fénix corazón gélido", "points": 205 @@ -671,7 +678,7 @@ { "name_en": "Sun Dragon", "name_it": "Drago del Sole", - "name_de": "Sun Dragon", + "name_de": "Sonnendrache", "name_fr": "Dragon Solaire", "name_es": "Dragón solar", "points": 180 @@ -697,7 +704,7 @@ { "name_en": "Elven Honours", "name_it": "Onoroficenze Elfiche", - "name_de": "Elven Honours", + "name_de": "Elfenehrungen", "name_es": "Honores élficos", "types": ["elven-honour"], "selected": [], @@ -709,13 +716,14 @@ "name_en": "Ithilmar Weapons, Strike First, Valour of Ages", "name_it": "Ithilmar Weapons, Attacca Per Primo, Valore delle Ere", "name_fr": "Armes en Ithilmar, Frappe En Premier, Valeur des Âges", - "name_es": "Armas de Ithilmar, Siempre ataca primero, Valor de las eras" + "name_es": "Armas de Ithilmar, Siempre ataca primero, Valor de las eras", + "name_de": "Ithilmar-Waffen, Schlägt zuerst zu, Mut der Zeitalter" } }, { "name_en": "Archmage", "name_it": "Archmage", - "name_de": "Archmage", + "name_de": "Erzmagier", "name_fr": "Archimage", "name_es": "Archimago", "id": "archmage", @@ -734,7 +742,7 @@ { "name_en": "Hand weapon", "name_it": "Arma Bianca", - "name_de": "Hand weapon", + "name_de": "Handwaffe", "name_es": "Arma de mano", "points": 0, "perModel": true, @@ -744,7 +752,7 @@ { "name_en": "Sword of Hoeth", "name_it": "Sword of Hoeth", - "name_de": "Sword of Hoeth", + "name_de": "Schwert aus Hoeth", "name_es": "Sword of Hoeth", "name_fr": "Sword of Hoeth", "points": 0, @@ -756,7 +764,7 @@ { "name_en": "Sword of Hoeth", "name_it": "Sword of Hoeth", - "name_de": "Sword of Hoeth", + "name_de": "Schwert aus Hoeth", "name_es": "Sword of Hoeth", "name_fr": "Sword of Hoeth", "points": 0, @@ -768,7 +776,7 @@ { "name_en": "Bow of Avelorn", "name_it": "Arco di Avelorn", - "name_de": "Bow of Avelorn", + "name_de": "Bogen von Avelorn", "name_es": "Arco de Avelorn", "name_fr": "Arc d'Avelorn", "points": 0, @@ -780,7 +788,7 @@ { "name_en": "Ceremonial halberd", "name_it": "Ceremonial halberd", - "name_de": "Ceremonial halberd", + "name_de": "Zeremoniehellebarde", "name_es": "Ceremonial halberd", "name_fr": "Ceremonial halberd", "points": 0, @@ -792,7 +800,7 @@ { "name_en": "Chracian great blade", "name_it": "Chracian great blade", - "name_de": "Chracian great blade", + "name_de": "Chracianische Zweihandklinge", "name_es": "Chracian great blade", "name_fr": "Chracian great blade", "points": 0, @@ -806,7 +814,7 @@ { "name_en": "Full plate armour", "name_it": "Armatura Completa", - "name_de": "Full plate armour", + "name_de": "Plattenrüstung", "name_es": "Armadura completa", "name_fr": "Armure de plate complète", "points": 0, @@ -820,7 +828,7 @@ { "name_en": "Level 4 Wizard", "name_it": "Mago di 4° Livello", - "name_de": "Level 4 Wizard", + "name_de": "Stufe 4 Zauberer", "name_es": "Mago de nivel 4", "points": 30, "perModel": true, @@ -831,7 +839,7 @@ { "name_en": "On foot", "name_it": "A Piedi", - "name_de": "On foot", + "name_de": "Zu Fuß", "name_es": "A pie", "points": 0, "active": true, @@ -840,7 +848,7 @@ { "name_en": "Elven Steed", "name_it": "Cavallo Elfico", - "name_de": "Elven Steed", + "name_de": "Elfenross", "name_fr": "Coursier Elfique", "name_es": "Corcel élfico", "points": 14 @@ -848,7 +856,7 @@ { "name_en": "Barded Elven Steed", "name_it": "Cavallo Elfico Bardato", - "name_de": "Barded Elven Steed", + "name_de": "Elfenross mit Rossharnisch", "name_fr": "Coursier Elfique Caparaçonné", "name_es": "Corcel élfico con barda", "points": 18 @@ -856,7 +864,7 @@ { "name_en": "Lion Chariot of Chrace", "name_it": "Carro dei Leoni di Chrace", - "name_de": "Lion Chariot of Chrace", + "name_de": "Löwenstreitwagen von Chrace", "name_fr": "Char à Lions de Chrace", "name_es": "Carro de leones de Cracia", "points": 125 @@ -864,14 +872,14 @@ { "name_en": "Lothern Skycutter", "name_it": "Lothern Skycutter", - "name_de": "Lothern Skycutter", + "name_de": "Himmelssegler von Lothern", "name_es": "Escolta celeste", "points": 90, "options": [ { "name_en": "Eagle-Eye Bolt Thrower", "name_it": "Eagle-Eye Balista", - "name_de": "Eagle-Eye Bolt Thrower", + "name_de": "Adlerauge-Speerschleuder", "name_fr": "Baliste Œil-d'aigle", "name_es": "Lanzavirotes ojo de águila", "points": 25 @@ -882,7 +890,7 @@ { "name_en": "Great Eagle {mount}", "name_it": "Grandi Aquile", - "name_de": "Great Eagle", + "name_de": "Riesenadler", "name_fr": "Grand Aigle", "name_es": "Gran águila", "points": 60 @@ -890,7 +898,7 @@ { "name_en": "Griffon {high elves}", "name_it": "Grifone {high elves}", - "name_de": "Griffon", + "name_de": "Greif", "name_fr": "Griffon", "name_es": "Grifo", "points": 130 @@ -898,7 +906,7 @@ { "name_en": "Flamespyre Phoenix {mount}", "name_it": "Fenice di Fuoco", - "name_de": "Flamsephyre Phoenix", + "name_de": "Flammensäulen-Phönix", "name_fr": "Phénix Spire-de-feu", "name_es": "Fénix pico llameante", "points": 170 @@ -906,7 +914,7 @@ { "name_en": "Frostheart Phoenix {mount}", "name_it": "Fenice di Ghiaccio", - "name_de": "Frostheart Phoenix", + "name_de": "Frostherz-Phönix", "name_fr": "Phénix Cœur-de-Givre", "name_es": "Fénix corazón gélido", "points": 205 @@ -914,7 +922,7 @@ { "name_en": "Sun Dragon", "name_it": "Drago del Sole", - "name_de": "Sun Dragon", + "name_de": "Sonnendrache", "name_fr": "Dragon Solaire", "name_es": "Dragón solar", "points": 180 @@ -922,7 +930,7 @@ { "name_en": "Moon Dragon", "name_it": "Drago della Luna", - "name_de": "Moon Dragon", + "name_de": "Monddrache", "name_fr": "Dragon Lunaire", "name_es": "Dragón lunar", "points": 235 @@ -930,7 +938,7 @@ { "name_en": "Star Dragon", "name_it": "Drago delle Stelle", - "name_de": "Star Dragon", + "name_de": "Sternendrache", "name_fr": "Dragon Stellaire", "name_es": "Dragón estelar", "points": 290 @@ -950,7 +958,7 @@ { "name_en": "Elven Honours", "name_it": "Onoroficenze Elfiche", - "name_de": "Elven Honours", + "name_de": "Elfenehrungen", "name_es": "Honores élficos", "types": ["elven-honour"], "selected": [], @@ -963,13 +971,14 @@ "name_en": "Elven Reflexes, Ithilmar Weapons, Lileath's Blessing, Lore of Saphery, Valour of Ages", "name_it": "Riflessi Elfici, Ithilmar Weapons, Lileath's Blessing, Lore of Saphery, Valore delle Ere", "name_fr": "Réflexes Elfiques, Armes en Ithilmar, Bienfait de Lileath, Domaine de Saphery, Valeur des Âges", - "name_es": "Reflejos élficos, Armas de Ithilmar, Bendición de Lileath, Saber de Saphery, Valor de las eras" + "name_es": "Reflejos élficos, Armas de Ithilmar, Bendición de Lileath, Saber de Saphery, Valor de las eras", + "name_de": "Elfenreflexe, Ithilmar-Waffen, Lileaths Segen, Lehre von Saphery, Mut der Zeitalter" } }, { "name_en": "Mage", "name_it": "Mage", - "name_de": "Mage", + "name_de": "Magier", "name_fr": "Mage", "name_es": "Mago", "id": "mage", @@ -988,7 +997,7 @@ { "name_en": "Hand weapon", "name_it": "Arma Bianca", - "name_de": "Hand weapon", + "name_de": "Handwaffe", "name_es": "Arma de mano", "points": 0, "perModel": true, @@ -998,7 +1007,7 @@ { "name_en": "Sword of Hoeth", "name_it": "Sword of Hoeth", - "name_de": "Sword of Hoeth", + "name_de": "Schwert aus Hoeth", "name_es": "Sword of Hoeth", "name_fr": "Sword of Hoeth", "points": 0, @@ -1010,7 +1019,7 @@ { "name_en": "Sword of Hoeth", "name_it": "Sword of Hoeth", - "name_de": "Sword of Hoeth", + "name_de": "Schwert aus Hoeth", "name_es": "Sword of Hoeth", "name_fr": "Sword of Hoeth", "points": 0, @@ -1022,7 +1031,7 @@ { "name_en": "Bow of Avelorn", "name_it": "Arco di Avelorn", - "name_de": "Bow of Avelorn", + "name_de": "Bogen von Avelorn", "name_es": "Arco de Avelorn", "name_fr": "Arc d'Avelorn", "points": 0, @@ -1034,7 +1043,7 @@ { "name_en": "Ceremonial halberd", "name_it": "Ceremonial halberd", - "name_de": "Ceremonial halberd", + "name_de": "Zeremoniehellebarde", "name_es": "Ceremonial halberd", "name_fr": "Ceremonial halberd", "points": 0, @@ -1046,7 +1055,7 @@ { "name_en": "Chracian great blade", "name_it": "Chracian great blade", - "name_de": "Chracian great blade", + "name_de": "Chracianische Zweihandklinge", "name_es": "Chracian great blade", "name_fr": "Chracian great blade", "points": 0, @@ -1060,7 +1069,7 @@ { "name_en": "Full plate armour", "name_it": "Armatura Completa", - "name_de": "Full plate armour", + "name_de": "Plattenrüstung", "name_es": "Armadura completa", "name_fr": "Armure de plate complète", "points": 0, @@ -1074,7 +1083,7 @@ { "name_en": "Level 2 Wizard", "name_it": "Mago di 2° Livello", - "name_de": "Level 2 Wizard", + "name_de": "Stufe 2 Zauberer", "name_es": "Mago de nivel 2", "points": 30, "perModel": true, @@ -1085,7 +1094,7 @@ { "name_en": "On foot", "name_it": "A Piedi", - "name_de": "On foot", + "name_de": "Zu Fuß", "name_es": "A pie", "points": 0, "active": true, @@ -1094,7 +1103,7 @@ { "name_en": "Elven Steed", "name_it": "Cavallo Elfico", - "name_de": "Elven Steed", + "name_de": "Elfenross", "name_fr": "Coursier Elfique", "name_es": "Corcel élfico", "points": 14 @@ -1102,7 +1111,7 @@ { "name_en": "Barded Elven Steed", "name_it": "Cavallo Elfico Bardato", - "name_de": "Barded Elven Steed", + "name_de": "Elfenross mit Rossharnisch", "name_fr": "Coursier Elfique Caparaçonné", "name_es": "Corcel élfico con barda", "points": 18 @@ -1110,7 +1119,7 @@ { "name_en": "Lion Chariot of Chrace", "name_it": "Carro dei Leoni di Chrace", - "name_de": "Lion Chariot of Chrace", + "name_de": "Löwenstreitwagen von Chrace", "name_fr": "Char à Lions de Chrace", "name_es": "Carro de leones de Cracia", "points": 125 @@ -1118,14 +1127,14 @@ { "name_en": "Lothern Skycutter", "name_it": "Lothern Skycutter", - "name_de": "Lothern Skycutter", + "name_de": "Himmelssegler von Lothern", "name_es": "Escolta celeste", "points": 90, "options": [ { "name_en": "Eagle-Eye Bolt Thrower", "name_it": "Eagle-Eye Balista", - "name_de": "Eagle-Eye Bolt Thrower", + "name_de": "Adlerauge-Speerschleuder", "name_fr": "Baliste Œil-d'aigle", "name_es": "Lanzavirotes ojo de águila", "points": 25 @@ -1136,7 +1145,7 @@ { "name_en": "Great Eagle {mount}", "name_it": "Grandi Aquile", - "name_de": "Great Eagle", + "name_de": "Riesenadler", "name_fr": "Grand Aigle", "name_es": "Gran águila", "points": 60 @@ -1144,7 +1153,7 @@ { "name_en": "Griffon {high elves}", "name_it": "Grifone {high elves}", - "name_de": "Griffon", + "name_de": "Greif", "name_fr": "Griffon", "name_es": "Grifo", "points": 130 @@ -1152,7 +1161,7 @@ { "name_en": "Flamespyre Phoenix {mount}", "name_it": "Fenice di Fuoco", - "name_de": "Flamsephyre Phoenix", + "name_de": "Flammensäulen-Phönix", "name_fr": "Phénix Spire-de-feu", "name_es": "Fénix pico llameante", "points": 170 @@ -1160,7 +1169,7 @@ { "name_en": "Frostheart Phoenix {mount}", "name_it": "Fenice di Ghiaccio", - "name_de": "Frostheart Phoenix", + "name_de": "Frostherz-Phönix", "name_fr": "Phénix Cœur-de-Givre", "name_es": "Fénix corazón gélido", "points": 205 @@ -1168,7 +1177,7 @@ { "name_en": "Sun Dragon", "name_it": "Drago del Sole", - "name_de": "Sun Dragon", + "name_de": "Sonnendrache", "name_fr": "Dragon Solaire", "name_es": "Dragón solar", "points": 180 @@ -1188,7 +1197,7 @@ { "name_en": "Elven Honours", "name_it": "Onoroficenze Elfiche", - "name_de": "Elven Honours", + "name_de": "Elfenehrungen", "name_es": "Honores élficos", "types": ["elven-honour"], "selected": [], @@ -1201,13 +1210,14 @@ "name_en": "Elven Reflexes, Ithilmar Weapons, Lileath's Blessing, Lore of Saphery, Valour of Ages", "name_it": "Riflessi Elfici, Ithilmar Weapons, Lileath's Blessing, Lore of Saphery, Valore delle Ere", "name_fr": "Réflexes Elfiques, Armes en Ithilmar, Bienfait de Lileath, Domaine de Saphery, Valeur des Âges", - "name_es": "Reflejos élficos, Armas de Ithilmar, Bendición de Lileath, Saber de Saphery, Valor de las eras" + "name_es": "Reflejos élficos, Armas de Ithilmar, Bendición de Lileath, Saber de Saphery, Valor de las eras", + "name_de": "Elfenreflexe, Ithilmar-Waffen, Lileaths Segen, Lehre von Saphery, Mut der Zeitalter" } }, { "name_en": "Dragon Mage", "name_it": "Mago Dragone", - "name_de": "Dragon Mage", + "name_de": "Drachenmagier", "name_fr": "Mage Dragon", "name_es": "Mago dragón", "id": "dragon-mage", @@ -1226,7 +1236,7 @@ { "name_en": "Hand weapon", "name_it": "Arma Bianca", - "name_de": "Hand weapon", + "name_de": "Handwaffe", "name_es": "Arma de mano", "points": 0, "perModel": true, @@ -1238,7 +1248,7 @@ { "name_en": "Light armour", "name_it": "Armatura Leggera", - "name_de": "Light armour", + "name_de": "Leichte Rüstung", "name_es": "Armadura ligera", "points": 0, "perModel": true, @@ -1250,7 +1260,7 @@ { "name_en": "Level 2 Wizard", "name_it": "Mago di 2° Livello", - "name_de": "Level 2 Wizard", + "name_de": "Stufe 2 Zauberer", "name_es": "Mago de nivel 2", "points": 30, "perModel": true, @@ -1261,7 +1271,7 @@ { "name_en": "Sun Dragon", "name_it": "Drago del Sole", - "name_de": "Sun Dragon", + "name_de": "Sonnendrache", "name_es": "Dragón solar", "points": 0, "active": true, @@ -1291,13 +1301,14 @@ "name_en": "Blessings of Asuryan, Close Order, Dragon Armour, Elven Reflexes, Fly (10), Impetuous, Ithilmar Weapons, Large Target, Lileath's Blessing, Lore of Saphery, Stomp Attacks (D6), Swiftstride, Terror, Valour of Ages", "name_it": "Blessings of Asuryan, Formazione Serrata, Armatura del Drago, Riflessi Elfici, Volo (10), Impetuosi, Ithilmar Weapons, Bersaglio Grande, Lileath's Blessing, Lore of Saphery, Calpestamento (D6), Passo Rapido, Terrore, Valore delle Ere", "name_fr": "Bienfaits d'Asuryan, Ordre Serré, Armure Dragon, Réflexes Elfiques, Vol (10), Impétueux, Armes en Ithilmar, Grande Cible, Bienfait de Lileath, Domaine de Saphery, Attaques de Piétinement (D6), Rapide, Terreur, Valeur des Âges", - "name_es": "Bendiciones de Asuryan, Orden cerrado, Armadura de dragón, Reflejos élficos, Volar (10), Armas de Ithilmar, Objetivo grande, Bendición de Lileath, Saber de Saphery, Ataques de pisotón (D6), Veloces,Terror, Valor de las eras" + "name_es": "Bendiciones de Asuryan, Orden cerrado, Armadura de dragón, Reflejos élficos, Volar (10), Armas de Ithilmar, Objetivo grande, Bendición de Lileath, Saber de Saphery, Ataques de pisotón (D6), Veloces,Terror, Valor de las eras", + "name_de": "Segnungen des Asuryan, Geschlossene Ränge, Drachenrüstung, Elfenreflexe, Fliegen (10), Ungestüm, Ithilmar-Waffen, Großes Ziel, Lileaths Segen, Lehre von Saphery, Stampfattacken (W6), Schnelle Bewegung, Entsetzen, Mut der Zeitalter" } }, { "name_en": "Handmaiden of the Everqueen", "name_it": "Handmaiden of the Everqueen", - "name_de": "Handmaiden of the Everqueen", + "name_de": "Zofe der Immerkönigin", "name_fr": "Suivante de la Reine Éternelle", "name_es": "Dama de la reina eterna", "id": "handmaiden-of-the-everqueen", @@ -1316,7 +1327,7 @@ { "name_en": "Hand weapon, Handmaiden's spear, Bow of Avelorn", "name_it": "Arma Bianca, Handmaiden's spear, Arco di Avelorn", - "name_de": "Hand weapon, Handmaiden's spear, Bow of Avelorn", + "name_de": "Handwaffe, Zofenspeer, Bogen von Avelorn", "name_es": "Arma de mano, Lanza de dama, Arco de Avelorn", "points": 0, "perModel": true, @@ -1328,7 +1339,7 @@ { "name_en": "Light armour", "name_it": "Armatura Leggera", - "name_de": "Light armour", + "name_de": "Leichte Rüstung", "name_es": "Armadura ligera", "points": 0, "perModel": true, @@ -1338,7 +1349,7 @@ { "name_en": "Heavy armour", "name_it": "Armatura Pesante", - "name_de": "Heavy armour", + "name_de": "Schwere Rüstung", "name_es": "Armadura pesada", "points": 3, "perModel": true, @@ -1349,7 +1360,7 @@ { "name_en": "Horn of Isha", "name_it": "Corno di Isha", - "name_de": "Horn of Isha", + "name_de": "Horn der Isha", "name_es": "Cuerno de Isha", "points": 25, "perModel": true, @@ -1373,7 +1384,8 @@ "name_en": "Arrows of Isha, Evasive, Ignores Cover, Immune to Psychology, Ithilmar Armour, Ithilmar Weapons, Strike First", "name_it": "Freccie di Isha, Evasione, Ignores Cover, Immune alla Psicologia, Ithilmar Armour, Ithilmar Weapons, Attacca Per Primo", "name_es": "Flechas de Isha, Evasivo, Ignora cobertura, Inmune a la psicolgía, Armadura de Ithilmar, Armas de Ithilmar, Siempre ataca primero", - "name_fr": "Flèches d'Isha, Esquiveur, Ignore les Couverts, Immunisé à la Psychologie, Armure en Ithilmar, Armes en Ithilmar, Frappe En Premier" + "name_fr": "Flèches d'Isha, Esquiveur, Ignore les Couverts, Immunisé à la Psychologie, Armure en Ithilmar, Armes en Ithilmar, Frappe En Premier", + "name_de": "Pfeile der Isha, Ausweichen, Deckung ignorieren, Immun gegen Psychologie, Ithilmar-Rüstung, Ithilmar-Waffen, Schlägt zuerst zu" } } ], @@ -1381,7 +1393,7 @@ { "name_en": "Elven Spearmen", "name_it": "Elven Spearmen", - "name_de": "Elven Spearmen", + "name_de": "Elfische Speerträger", "name_fr": "Lanciers Elfiques", "name_es": "Lanceros elfos", "id": "elven-spearmen", @@ -1392,7 +1404,7 @@ { "name_en": "Sentinel (champion)", "name_it": "Sentinel (campione)", - "name_de": "Sentinel (champion)", + "name_de": "Wächter (Champion)", "name_fr": "Sentinelle (champion)", "name_es": "Centinela (campeón)", "points": 5 @@ -1400,7 +1412,7 @@ { "name_en": "Standard bearer", "name_it": "Alfiere", - "name_de": "Standard bearer", + "name_de": "Standartenträger", "name_es": "Portaestandarte", "points": 5, "magic": { @@ -1412,7 +1424,7 @@ { "name_en": "Musician", "name_it": "Musico", - "name_de": "Musician", + "name_de": "Musiker", "name_fr": "Musicien", "name_es": "Músico", "points": 5 @@ -1422,7 +1434,7 @@ { "name_en": "Hand weapons", "name_it": "Armi Bianche", - "name_de": "Hand weapon", + "name_de": "Handwaffen", "name_fr": "Armes de base", "name_es": "Arma de mano", "points": 0, @@ -1431,7 +1443,7 @@ { "name_en": "Thrusting spears", "name_it": "Picche [Combattere su Ranghi Extra]", - "name_de": "Thrusting spears", + "name_de": "Stoßspeere", "name_fr": "Lances d'infanterie", "name_es": "Lanzas largas", "points": 0, @@ -1442,7 +1454,7 @@ { "name_en": "Light armour, Shields", "name_it": "Armatura Leggera, Scudi", - "name_de": "Light armour, Shields", + "name_de": "Leichte Rüstung, Schilde", "name_es": "Armadura ligera, escudos", "points": 0, "active": true, @@ -1453,7 +1465,7 @@ { "name_en": "Shieldwall", "name_it": "Muro di Scudi", - "name_de": "Shieldwall", + "name_de": "Schildwall", "name_fr": "Mur de Boucliers", "name_es": "Muralla de escudos", "points": 10 @@ -1461,7 +1473,7 @@ { "name_en": "Veteran", "name_it": "Veterani", - "name_de": "Veteran", + "name_de": "Veteranen", "name_es": "Veteranos", "points": 1, "perModel": true, @@ -1474,13 +1486,14 @@ "name_en": "Close Order, Elven Reflexes, Martial Prowess, Regimental Unit, Valour of Ages", "name_it": "Formazione Serrata, Riflessi Elfici, Martial Prowess, Unità Madre, Valore delle Ere", "name_fr": "Ordre Serré, Réflexes Elfiques, Prouesses Martiales, Unité Régimentaire, Valeur des Âges", - "name_es": "Orden cerrado, Reflejos élficos, Destreza marcial, Unidad regimental, Valor de las eras" + "name_es": "Orden cerrado, Reflejos élficos, Destreza marcial, Unidad regimental, Valor de las eras", + "name_de": "Geschlossene Ränge, Elfenreflexe, Kriegerisches Können, Hauptregiment, Mut der Zeitalter" } }, { "name_en": "Elven Archers", "name_it": "Elven Archers", - "name_de": "Elven Archers", + "name_de": "Elfische Bogenschützen", "name_fr": "Archers Elfiques", "name_es": "Arqueros elfos", "id": "elven-archers", @@ -1492,7 +1505,7 @@ { "name_en": "Sentinel (champion)", "name_it": "Sentinel (campione)", - "name_de": "Sentinel (champion)", + "name_de": "Wächter (Champion)", "name_fr": "Sentinelle (champion)", "name_es": "Centinela (Campeón)", "points": 5 @@ -1500,7 +1513,7 @@ { "name_en": "Standard bearer", "name_it": "Alfiere", - "name_de": "Standard bearer", + "name_de": "Standartenträger", "name_es": "Portaestandarte", "points": 5, "magic": { @@ -1512,7 +1525,7 @@ { "name_en": "Musician", "name_it": "Musico", - "name_de": "Musician", + "name_de": "Musiker", "name_fr": "Musicien", "name_es": "Músico", "points": 5 @@ -1522,7 +1535,7 @@ { "name_en": "Hand weapons, Longbows", "name_it": "Arco Lungos, Armi Bianche", - "name_de": "Hand weapons, Longbows", + "name_de": "Handwaffen, Langbögen", "name_es": "Arma de mano, Arco largo", "points": 0, "active": true, @@ -1533,7 +1546,7 @@ { "name_en": "Light armour", "name_it": "Armatura Leggera", - "name_de": "Light armour", + "name_de": "Leichte Rüstung", "name_es": "Armadura ligera", "points": 1, "perModel": true, @@ -1544,7 +1557,7 @@ { "name_en": "Veteran", "name_it": "Veterani", - "name_de": "Veteran", + "name_de": "Veteranen", "name_es": "Veteranos", "points": 1, "perModel": true, @@ -1553,7 +1566,7 @@ { "name_en": "Detachment", "name_it": "Distaccamento", - "name_de": "Detachment", + "name_de": "Abteilung", "name_fr": "Détachement", "name_es": "Destacamento", "points": 0 @@ -1571,7 +1584,7 @@ { "name_en": "Lothern Sea Guard", "name_it": "Guardia del Mare di Lothern ", - "name_de": "Lothern Sea Guard", + "name_de": "Seegarde von Lothern", "name_fr": "Garde Maritime de Lothern", "name_es": "Guardia del mar de Lothern", "id": "lothern-sea-guard", @@ -1582,7 +1595,7 @@ { "name_en": "Sea Master (champion)", "name_it": "Sea Master (campione)", - "name_de": "Sea Master (champion)", + "name_de": "Seemeister (Champion)", "name_es": "Maestro del mar (Campeón)", "points": 7, "magic": { @@ -1594,7 +1607,7 @@ { "name_en": "Standard bearer", "name_it": "Alfiere", - "name_de": "Standard bearer", + "name_de": "Standartenträger", "name_es": "Portaestandarte", "points": 5, "magic": { @@ -1606,7 +1619,7 @@ { "name_en": "Musician", "name_it": "Musico", - "name_de": "Musician", + "name_de": "Musiker", "name_fr": "Musicien", "name_es": "Músico", "points": 5 @@ -1616,7 +1629,7 @@ { "name_en": "Hand weapons, Thrusting spears, Warbows", "name_it": "Armi Bianche, Picche, Archi da Guerra", - "name_de": "Hand weapons, Thrusting spears, Warbows", + "name_de": "Handwaffen, Stoßspeere, Kriegsbögen", "name_es": "Armas de mano, Lanzas largas, Arcos de guerra", "points": 0, "active": true, @@ -1627,7 +1640,7 @@ { "name_en": "Light armour", "name_it": "Armatura Leggera", - "name_de": "Light armour", + "name_de": "Leichte Rüstung", "name_es": "Armadura ligera", "points": 0, "active": true, @@ -1638,7 +1651,7 @@ { "name_en": "Shields", "name_it": "Scudi", - "name_de": "Shields", + "name_de": "Schilde", "name_es": "Escudos", "points": 1, "perModel": true, @@ -1647,7 +1660,7 @@ { "name_en": "Veteran", "name_it": "Veterani", - "name_de": "Veteran", + "name_de": "Veteranen", "name_es": "Veteranos", "points": 1, "perModel": true, @@ -1659,13 +1672,14 @@ "name_en": "Close Order, Elven Reflexes, Martial Prowess, Naval Discipline, Valour of Ages", "name_it": "Formazione Serrata, Riflessi Elfici, Martial Prowess, Naval Discipline, Valore delle Ere", "name_fr": "Ordre Serré, Réflexes Elfiques, Prouesses Martiales, Discipline Navale, Valeur des Âges", - "name_es": "Orden cerrado, Reflejos élficos, Destreza marcial, Disciplina naval, Valor de las eras" + "name_es": "Orden cerrado, Reflejos élficos, Destreza marcial, Disciplina naval, Valor de las eras", + "name_de": "Geschlossene Ränge, Elfenreflexe, Kriegerisches Können, Flottendisziplin, Mut der Zeitalter" } }, { "name_en": "Ellyrian Reavers", "name_it": "Ellyrian Reavers", - "name_de": "Ellyrian Reavers", + "name_de": "Ellyrianische Grenzreiter", "name_fr": "Patrouilleurs Ellyriens", "name_es": "Guardianes de Ellyrion", "id": "ellyrian-reavers", @@ -1676,7 +1690,7 @@ { "name_en": "Harbinger (champion)", "name_it": "Harbinger (campione)", - "name_de": "Harbinger (champion)", + "name_de": "Herold (Champion)", "name_es": "Heraldo (campeón)", "points": 8, "magic": { @@ -1688,7 +1702,7 @@ { "name_en": "Standard bearer", "name_it": "Alfiere", - "name_de": "Standard bearer", + "name_de": "Standartenträger", "name_es": "Portaestandarte", "points": 6, "magic": { @@ -1700,7 +1714,7 @@ { "name_en": "Musician", "name_it": "Musico", - "name_de": "Musician", + "name_de": "Musiker", "name_fr": "Musicien", "name_es": "Músico", "points": 6 @@ -1710,7 +1724,7 @@ { "name_en": "Hand weapons, Cavalry spears, Hand weapons (Hooves)", "name_it": "Armi Bianche, Lancia Leggera, Armi Bianche (Hooves)", - "name_de": "Hand weapons, Cavalry spears, Hand weapons (Hooves)", + "name_de": "Handwaffen, Kavalleriespeere, Handwaffen (Hufe)", "name_es": "Armas de mano, Lanzas de caballería, Armas de mano (pezuñas)", "points": 0, "active": true, @@ -1721,7 +1735,7 @@ { "name_en": "Light armour", "name_it": "Armatura Leggera", - "name_de": "Light armour", + "name_de": "Leichte Rüstung", "name_es": "Armadura ligera", "points": 0, "active": true, @@ -1732,7 +1746,7 @@ { "name_en": "Shortbows", "name_it": "Archi Corti", - "name_de": "Shortbows", + "name_de": "Kurzbögen", "name_es": "Arcos cortos", "points": 2, "perModel": true, @@ -1742,7 +1756,7 @@ "name_en": "Replace Cavalry spears with Shortbows", "name_it": "Cambia Lancia LeggeraCon Archi Corti", "name_es": "Cambiar lanzas de caballería por arcos cortos", - "name_de": "Replace Cavalry spears with Shortbows", + "name_de": "Ersetze Kavalleriespeere mit Kurzbögen", "points": 1, "perModel": true, "name_fr": "Remplacer les Lances de cavalerie par des Arcs courts" @@ -1750,7 +1764,7 @@ { "name_en": "Scouts", "name_it": "Esploratori", - "name_de": "Scouts", + "name_de": "Kundschafter", "name_es": "Exploradores", "points": 2, "perModel": true, @@ -1759,7 +1773,7 @@ { "name_en": "Skirmishers", "name_it": "Skirmishers", - "name_de": "Skirmishers", + "name_de": "Plänkler", "name_fr": "Tirailleurs", "name_es": "Escaramuzadores", "points": 1, @@ -1771,13 +1785,14 @@ "name_en": "Elven Reflexes, Fast Cavalry, Open Order, Swiftstride, Valour of Ages", "name_it": "Riflessi Elfici, Cavalleria Veloce, Formazione Aperta, Passo Rapido, Valore delle Ere", "name_fr": "Réflexes Elfiques, Cavalerie Rapide, Ordre Dispersé, Rapide, Valeur des Âges", - "name_es": "Reflejos élficos, Caballería veloz, Orden abierto, Veloces, Valor de las eras" + "name_es": "Reflejos élficos, Caballería veloz, Orden abierto, Veloces, Valor de las eras", + "name_de": "Elfenreflexe, Wendige Kavallerie, Offene Ränge, Schnelle Bewegung, Mut der Zeitalter" } }, { "name_en": "Silver Helms", "name_it": "Elmi D'Argento", - "name_de": "Silver Helms", + "name_de": "Silberhelme", "name_fr": "Heaumes d'Argent", "name_es": "Yelmos plateados", "id": "silver-helms", @@ -1788,7 +1803,7 @@ { "name_en": "High Helm (champion)", "name_it": "High Helm (campione)", - "name_de": "High Helm (champion)", + "name_de": "Adlerhelm (Champion)", "name_es": "Yelmo alto (campeón)", "points": 6, "magic": { @@ -1800,7 +1815,7 @@ { "name_en": "Standard bearer", "name_it": "Alfiere", - "name_de": "Standard bearer", + "name_de": "Standartenträger", "name_es": "Portaestandarte", "points": 6, "magic": { @@ -1812,7 +1827,7 @@ { "name_en": "Musician", "name_it": "Musico", - "name_de": "Musician", + "name_de": "Musiker", "name_fr": "Musicien", "name_es": "Músico", "points": 6 @@ -1822,7 +1837,7 @@ { "name_en": "Hand weapons, Lances, Hand weapons (Hooves)", "name_it": "Armi Bianche, Lancie Pesanti, Armi Bianche (Hooves)", - "name_de": "Hand weapons, Lances, Hand weapons (Hooves)", + "name_de": "Handwaffen, Lanzen, Handwaffen (Hufe)", "name_es": "Armas de mano, Lanzas, Armas de mano (pezuñas)", "points": 0, "active": true, @@ -1833,7 +1848,7 @@ { "name_en": "Heavy armour, Barding", "name_it": "Armatura Pesante, Bardatura", - "name_de": "Heavy armour, Barding", + "name_de": "Schwere Rüstung, Rossharnisch", "name_es": "Armadura pesada, bardas", "points": 0, "active": true, @@ -1844,7 +1859,7 @@ { "name_en": "Shields", "name_it": "Scudi", - "name_de": "Shields", + "name_de": "Schilde", "name_es": "Escudos", "points": 1, "perModel": true, @@ -1856,13 +1871,14 @@ "name_en": "Close Order, Elven Reflexes, First Charge, Ithilmar Barding, Swiftstride, Valour of Ages", "name_it": "Formazione Serrata, Riflessi Elfici, Prima Carica, Ithilmar Bardatura, Passo Rapido, Valore delle Ere", "name_fr": "Ordre Serré, Réflexes Elfiques, Première Charge, Barde en Ithilmar, Rapide, Valeur des Âges", - "name_es": "Orden cerrado, Reflejos élficos, Primera carga, Bardas de Ithilmar, Veloces, Valor de las eras" + "name_es": "Orden cerrado, Reflejos élficos, Primera carga, Bardas de Ithilmar, Veloces, Valor de las eras", + "name_de": "Geschlossene Ränge, Elfenreflexe, Erster Angriff, Ithilmar-Rossharnisch, Schnelle Bewegung, Mut der Zeitalter" } }, { "name_en": "Sisters of Avelorn", "name_it": "Sorelle di Avelorn", - "name_de": "Sisters of Avelorn", + "name_de": "Schwestern von Avelorn", "name_fr": "Sœurs d'Avelorn", "name_es": "Hermanas de Avelorn", "id": "sister-of-avelorn", @@ -1873,14 +1889,14 @@ "name_en": "0-1 Core choice if your General is a Handmaiden of the Everqueen", "name_it": "0-1 Con Everqueen", "name_es": "0-1 con Reina eterna", - "name_de": "0-1 Core choice if your General is a Handmaiden of the Everqueen", + "name_de": "0-1 Kernauswahl wenn dein General eine Zofe der Immerkönigin ist", "name_fr": "0-1 en choix de Base si votre Général est une Suivante de la Reine Éternelle" }, "command": [ { "name_en": "High Sister", "name_it": "High Sister", - "name_de": "High Sister", + "name_de": "Hohe Schwester", "name_es": "Hermana mayor", "points": 7, "magic": { @@ -1894,7 +1910,7 @@ { "name_en": "Bows of Avelorn", "name_it": "Bows of Avelorn", - "name_de": "Bows of Avelorn", + "name_de": "Bögen von Avelorn", "name_es": "Arcos de Avelorn", "points": 0, "active": true, @@ -1905,7 +1921,7 @@ { "name_en": "Light armour", "name_it": "Armatura Leggera", - "name_de": "Light armour", + "name_de": "Leichte Rüstung", "name_es": "Armadura ligera", "points": 0, "active": true, @@ -1916,7 +1932,7 @@ { "name_en": "Stubborn (0-1 unit)", "name_it": "Determinato (0-1 unit)", - "name_de": "Stubborn (0-1 unit)", + "name_de": "Unnachgiebig (0-1 Einheit)", "name_es": "Tozudas (0-1 unidad)", "points": 1, "perModel": true, @@ -1925,7 +1941,7 @@ { "name_en": "Ambushers (0-1 unit)", "name_it": "Agguatatori (0-1 unit)", - "name_de": "Ambushers (0-1 unit)", + "name_de": "Überfall (0-1 Einheit)", "name_es": "Emboscadoras (0-1 unidad)", "points": 1, "perModel": true, @@ -1937,7 +1953,8 @@ "name_en": "Arrows of Isha, Evasive, Ignores Cover, Immune to Psychology, Ithilmar Armour, Ithilmar Weapons, Open Order, Skirmishers, Strike First", "name_it": "Freccie di Isha, Evasione, Ignores Cover, Immune alla Psicologia, Ithilmar Armour, Ithilmar Weapons, Formazione Aperta, Schermagliatori, Attacca Per Primo", "name_fr": "Flèches d'Isha, Esquiveur, Ignore les Couverts, Immunisé à la Psychologie, Armure en Ithilmar, Armes en Ithilmar, Ordre Dispersé, Tirailleurs, Frappe En Premier", - "name_es": "Flechas de Isha, Evasivo, Ignora cobertura, Inmune a la psicolgía, Armadura de Ithilmar, Armas de Ithilmar, Orden abierto, Escaramuzadores, Siempre ataca primero" + "name_es": "Flechas de Isha, Evasivo, Ignora cobertura, Inmune a la psicolgía, Armadura de Ithilmar, Armas de Ithilmar, Orden abierto, Escaramuzadores, Siempre ataca primero", + "name_de": "Pfeile der Isha, Ausweichen, Deckung ignorieren, Immun gegen Psychologie, Ithilmar-Rüstung, Ithilmar-Waffen, Offene Ränge, Plänkler, Schlägt zuerst zu" } } ], @@ -1945,7 +1962,7 @@ { "name_en": "Dragon Princes", "name_it": "Principi Drago", - "name_de": "Dragon Princes", + "name_de": "Drachenprinzen", "name_fr": "Princes Dragons", "name_es": "Príncipes dragón", "id": "dragon-princes", @@ -1956,7 +1973,7 @@ { "name_en": "Drakemaster", "name_it": "Drakemaster", - "name_de": "Drakemaster", + "name_de": "Drachenmeister", "name_es": "Maestro de dragones", "points": 7, "magic": { @@ -1968,7 +1985,7 @@ { "name_en": "Standard bearer", "name_it": "Alfiere", - "name_de": "Standard bearer", + "name_de": "Standartenträger", "name_es": "Portaestandarte", "points": 7, "magic": { @@ -1980,7 +1997,7 @@ { "name_en": "Musician", "name_it": "Musico", - "name_de": "Musician", + "name_de": "Musiker", "name_fr": "Musicien", "name_es": "Músico", "points": 7 @@ -1988,50 +2005,34 @@ ], "equipment": [ { - "name_en": "Lance", - "name_it": "Lancia Pesante", - "name_de": "Lance", - "name_es": "Lanza", + "name_en": "Hand weapons, Lances", + "name_it": "Arma Bianca, Lancia Pesante", + "name_de": "Handwaffen, Lanzen", + "name_es": "Arma de mano, Lanza", "points": 0, "active": true, - "name_fr": "Lance de joute" - }, - { - "name_en": "Hand weapon", - "name_it": "Arma Bianca", - "name_de": "Hand weapon", - "name_fr": "Arme de base", - "name_es": "Arma de mano", - "points": 0 + "name_fr": "Arme de base, Lance de joute" } ], "armor": [ { - "name_en": "Full plate armour, Barding", - "name_it": "Armatura Completa, Bardatura", - "name_de": "Full plate armour, Barding", - "name_es": "Armadura de placas, Bardas", + "name_en": "Full plate armour, Shields, Barding", + "name_it": "Armatura Completa, Scudi, Bardatura", + "name_de": "Plattenrüstung, Schilde, Rossharnisch", + "name_es": "Armadura de placas, Escudos Bardas", "points": 0, "active": true, - "name_fr": "Armure de plate complète, Caparaçon" - } - ], - "options": [ - { - "name_en": "Shield", - "name_it": "Scudo", - "name_de": "Shield", - "name_fr": "Bouclier", - "name_es": "Escudos", - "points": 0 + "name_fr": "Armure de plate complète, Boucliers, Caparaçon" } ], + "options": [], "mounts": [], "specialRules": { "name_en": "Close Order, Counter Charge, Dragon Armour, Drilled, Elven Reflexes, First Charge, Impetuous, Ithilmar Barding, Ithilmar Weapons, Sons of Caledor, Swiftstride, Valour of Ages", "name_it": "Formazione Serrata, Controcarica, Armatura del Drago, Addestrati, Riflessi Elfici, Prima Carica, Impetuosi, Ithilmar Bardatura, Ithilmar Weapons, Sons of Caledor, Passo Rapido, Valore delle Ere", "name_fr": "Ordre Serré, Contre-charge, Armure Dragon, Bien Entraînés, Réflexes Elfiques, Première Charge, Impétueux, Barde en Ithilmar, Armes en Ithilmar, Fils de Caledor, Rapide, Valeur des Âges", - "name_es": "Orden cerrado, Contracarga, Armadura de dragón, Bien entrenados, Reflejos élficos, Primera carga, Ímpetu, Bardas de Ithilmar, Armas de Ithilmar, Hijos de Caledor, Veloces, Valor de las eras" + "name_es": "Orden cerrado, Contracarga, Armadura de dragón, Bien entrenados, Reflejos élficos, Primera carga, Ímpetu, Bardas de Ithilmar, Armas de Ithilmar, Hijos de Caledor, Veloces, Valor de las eras", + "name_de": "Geschlossene Ränge, Gegenangriff, Drachenrüstung, Gut ausgebildet, Elfenreflexe, Erster Angriff, Ungestüm, Ithilmar-Rossharnisch, Ithilmar-Waffen, Söhne Caledors, Schnelle Bewegung, Mut der Zeitalter" }, "notes": { "name_es": "0-1 unidad de Príncipes dragón por cada 1000 puntos", @@ -2042,7 +2043,7 @@ { "name_en": "Swordmasters of Hoeth", "name_it": "Maestri di Spada di Hoeth", - "name_de": "Swordmasters", + "name_de": "Schwertmeister von Hoeth", "name_fr": "Maîtres des Épées de Hoeth", "name_es": "Maestros de la espada de Hoeth", "id": "swordmasters", @@ -2053,7 +2054,7 @@ { "name_en": "Bladelord", "name_it": "Bladelord", - "name_de": "Bladelord", + "name_de": "Klingenherr", "name_es": "Señor de la espada", "points": 6, "magic": { @@ -2065,7 +2066,7 @@ { "name_en": "Standard bearer", "name_it": "Alfiere", - "name_de": "Standard bearer", + "name_de": "Standartenträger", "name_es": "Portaestandarte", "points": 6, "magic": { @@ -2077,7 +2078,7 @@ { "name_en": "Musician", "name_it": "Musico", - "name_de": "Musician", + "name_de": "Musiker", "name_fr": "Musicien", "name_es": "Músico", "points": 6 @@ -2085,9 +2086,9 @@ ], "equipment": [ { - "name_en": "Sword of Hoeth", - "name_it": "Sword of Hoeth", - "name_de": "Sword of Hoeth", + "name_en": "Swords of Hoeth", + "name_it": "Swords of Hoeth", + "name_de": "Schwerter aus Hoeth", "name_es": "Espada de Hoeth", "points": 0, "active": true, @@ -2098,7 +2099,7 @@ { "name_en": "Heavy armour", "name_it": "Armatura Pesante", - "name_de": "Heavy armour", + "name_de": "Schwere Rüstung", "name_es": "Armadura pesada", "points": 0, "active": true, @@ -2109,7 +2110,7 @@ { "name_en": "Drilled", "name_it": "Addestrati", - "name_de": "Drilled", + "name_de": "Gut ausgebildet", "name_es": "Bien entrenados", "points": 1, "perModel": true, @@ -2122,13 +2123,14 @@ "name_en": "Cleaving Blow, Close Order, Deflect Shots, Elven Reflexes, Ithilmar Armour, Magic Resistance (-1), Valour of Ages, Warriors of the White Tower", "name_it": "Coplo di Grazia, Formazione Serrata, Deflect Shots, Riflessi Elfici, Ithilmar Armour, Resistenza alla Magia (-1), Valore delle Ere, Warriors of the White Tower", "name_fr": "Coup de Fendoir, Ordre Serré, Tirs Déviés, Réflexes Elfiques, Armure en Ithilmar, Résistance à la Magie (-1), Valeur des Âges, Guerriers de la Tour Blanche", - "name_es": "Golpe de gracia, Orden cerrado, Desviar disparos, Reflejos élficos, Armadura de Ithilmar, Resistencia a la magia (-1), Valor de las eras, Guerreros de la torre Blanca" + "name_es": "Golpe de gracia, Orden cerrado, Desviar disparos, Reflejos élficos, Armadura de Ithilmar, Resistencia a la magia (-1), Valor de las eras, Guerreros de la torre Blanca", + "name_de": "Spaltender Hieb, Geschlossene Ränge, Geschosse ablenken, Elfenreflexe, Ithilmar-Rüstung, Magieresistenz (-1), Mut der Zeitalter, Krieger des Weißen Turms" } }, { "name_en": "Phoenix Guard", "name_it": "Phoenix Guard", - "name_de": "Phoenix Guard", + "name_de": "Phönixgarde", "name_fr": "Garde Phénix", "name_es": "Guardia del fénix", "id": "phoenix-guard", @@ -2139,7 +2141,7 @@ { "name_en": "Keeper of the Flame", "name_it": "Keeper of the Flame", - "name_de": "Keeper of the Flame", + "name_de": "Hüter der Flamme", "name_es": "Guardián de la llama", "points": 7, "magic": { @@ -2151,7 +2153,7 @@ { "name_en": "Standard bearer", "name_it": "Alfiere", - "name_de": "Standard bearer", + "name_de": "Standartenträger", "name_es": "Portaestandarte", "points": 7, "magic": { @@ -2163,7 +2165,7 @@ { "name_en": "Musician", "name_it": "Musico", - "name_de": "Musician", + "name_de": "Musiker", "name_fr": "Musicien", "name_es": "Músico", "points": 7 @@ -2173,7 +2175,7 @@ { "name_en": "Ceremonial Halberds", "name_it": "Ceremonial Alabarde", - "name_de": "Ceremonial Halberds", + "name_de": "Zeremoniehellebarden", "name_es": "Alabardas ceremoniales", "points": 0, "active": true, @@ -2184,7 +2186,7 @@ { "name_en": "Full plate armour", "name_it": "Armatura Completa", - "name_de": "Full plate armour", + "name_de": "Plattenrüstung", "name_es": "Armadura de placas", "points": 0, "active": true, @@ -2195,7 +2197,7 @@ { "name_en": "Drilled", "name_it": "Addestrati", - "name_de": "Drilled", + "name_de": "Gut ausgebildet", "name_es": "Bien entrenados", "points": 1, "perModel": true, @@ -2208,13 +2210,14 @@ "name_en": "Blessings of Asuryan, Close Order, Elven Reflexes, Fear, Martial Prowess, Veteran, Witness to Destiny", "name_it": "Blessings of Asuryan, Formazione Serrata, Riflessi Elfici, Paura, Martial Prowess, Veterani, Witness to Destiny", "name_fr": "Bienfaits d'Asuryan, Ordre Serré, Réflexes Elfiques, Peur, Prouesses Martiales, Vétérans, Témoins du Destin", - "name_es": "Bendiciones de Asuryan, Orden cerrado, Reflejos élficos, Miedo, Destreza marcial, Veteranos, Testigos del destino" + "name_es": "Bendiciones de Asuryan, Orden cerrado, Reflejos élficos, Miedo, Destreza marcial, Veteranos, Testigos del destino", + "name_de": "Segnungen des Asuryan, Geschlossene Ränge, Elfenflexe, Angst, Kriegerisches Können, Veteranen, Wisen um das Schicksal" } }, { "name_en": "White Lions of Chrace", "name_it": "Leoni Bianchi di Chrace", - "name_de": "White Lions", + "name_de": "Weiße Löwen von Chrace", "name_fr": "Lions Blancs de Chrace", "name_es": "Leones blancos de Cracia", "id": "white-lions", @@ -2225,7 +2228,7 @@ { "name_en": "Guardian", "name_it": "Guardian", - "name_de": "Guardian", + "name_de": "Beschützer der Königs", "name_es": "Guardián", "points": 6, "magic": { @@ -2237,7 +2240,7 @@ { "name_en": "Standard bearer", "name_it": "Alfiere", - "name_de": "Standard bearer", + "name_de": "Standartenträger", "name_es": "Portaestandarte", "points": 6, "magic": { @@ -2249,7 +2252,7 @@ { "name_en": "Musician", "name_it": "Musico", - "name_de": "Musician", + "name_de": "Musiker", "name_fr": "Musicien", "name_es": "Músico", "points": 6 @@ -2259,7 +2262,7 @@ { "name_en": "Chracian Great Blades", "name_it": "Chracian Great Blades", - "name_de": "Chracian Great Blades", + "name_de": "Chraciaische Zweihandklingen", "name_es": "Grandes hachas de Cracia", "points": 0, "active": true, @@ -2270,7 +2273,7 @@ { "name_en": "Heavy armour", "name_it": "Armatura Pesante", - "name_de": "Heavy armour", + "name_de": "Schwere Rüstung", "name_es": "Armadura pesada", "points": 0, "active": true, @@ -2282,7 +2285,7 @@ "name_es": "Cambiar \"Valor de las eras\" por \"Veteranos\"", "name_en": "Replace the Valour of Ages special rule with Veteran", "name_it": "Cambia \"Valour of Ages\" Con \"Veterani\"", - "name_de": "Replace the Valour of Ages special rule with Veteran", + "name_de": "Ersetze die \"Mut der Zeitalter\" Sonderregel mit \"Veteranen\"", "points": 1, "perModel": true, "name_fr": "Remplacer la règle spéciale Valeur des Âges par Vétérans" @@ -2294,13 +2297,14 @@ "name_en": "Chracian Warriors, Elven Reflexes, King's Guard, Lion Cloak, Move Through Cover, Open Order, Stubborn, Valour of Ages", "name_it": "Chracian Warriors, Riflessi Elfici, King's Guard, Lion Cloak, Viaggiatore, Formazione Aperta, Determinato, Valore delle Ere", "name_fr": "Guerriers de Chrace, Réflexes Elfiques, Garde du Roi, Cape de Lion, Mouvement à Couvert, Ordre Dispersé, Obstiné, Valeur des Âges", - "name_es": "Guerreros de Cracia, Reflejos élficos, Guardia del rey, Capa de león, Mover a través de cobertura, Orden abierto, Tozudos, Valor de las eras" + "name_es": "Guerreros de Cracia, Reflejos élficos, Guardia del rey, Capa de león, Mover a través de cobertura, Orden abierto, Tozudos, Valor de las eras", + "name_de": "Chracianische Krieger, Elfenreflexe, Wache des Königs, Löwenpelz, Durch Deckung bewegen, Offene Ränge, Unnachgiebig, Mut der Zeitalter" } }, { "name_en": "Shadow Warriors", "name_it": "Guerrieri Ombra", - "name_de": "Shadow Warriors", + "name_de": "Schattenkrieger", "name_fr": "Guerriers Fantômes", "name_es": "Guerreros sombríos", "id": "shadow-warriors", @@ -2311,7 +2315,7 @@ { "name_en": "Shadow Walker", "name_it": "Shadow Walker", - "name_de": "Shadow Walker", + "name_de": "Shattenmeister", "name_es": "Caminante de las sombras", "points": 6, "magic": { @@ -2323,9 +2327,9 @@ ], "equipment": [ { - "name_en": "Longbow", + "name_en": "Longbows", "name_it": "Arco Lungo", - "name_de": "Longbow", + "name_de": "Langbögen", "name_es": "Arco largo", "points": 0, "active": true, @@ -2336,7 +2340,7 @@ { "name_en": "Light armour", "name_it": "Armatura Leggera", - "name_de": "Light armour", + "name_de": "Leichte Rüstung", "name_es": "Armadura ligera", "points": 0, "active": true, @@ -2347,7 +2351,7 @@ { "name_en": "Ambushers (0-1 unit)", "name_it": "Agguatatori (0-1 unit)", - "name_de": "Ambushers (0-1 unit)", + "name_de": "Überfall (0-1 Einheit)", "name_es": "Emboscadores (0-1 unidad)", "points": 1, "perModel": true, @@ -2356,7 +2360,7 @@ { "name_en": "Chariot Runners (0-1 unit)", "name_it": "Scorta dei Carri (0-1 unit)", - "name_de": "Chariot Runners (0-1 unit)", + "name_de": "Streitwagengarde (0-1 Einheit)", "name_es": "Corredores de carros (0-1 unidad)", "points": 1, "perModel": true, @@ -2365,7 +2369,7 @@ { "name_en": "Feigned Flight (0-1 unit)", "name_it": "Feigned Flight (0-1 unit)", - "name_de": "Feigned Flight", + "name_de": "Vorgetäuschte Flucht", "name_es": "Falsa retirada (0-1 uindad)", "points": 1, "perModel": true, @@ -2377,13 +2381,14 @@ "name_en": "Elven Reflexes, Evasive, Fire & Flee, Ithilmar Weapons, Move Through Cover, Scouts, Skirmishers, Veteran, Warriors of Nagarythe", "name_it": "Riflessi Elfici, Evasione, Tirare e Fuggire, Ithilmar Weapons, Viaggiatore, Esploratori, Schermagliatori, Veterani, Warriors of Nagarythe", "name_fr": "Réflexes Elfiques, Esquiveur, Tir & Fuite, Armes en Ithilmar, Mouvement à Couvert, Éclaireurs, Tirailleurs, Vétérans, Guerriers de Nagarythe", - "name_es": "Reflejos élficos, Evasivos, Disparar y correr, Armas de Ithilmar, Mover a través de cobertura, Exploradores, Escaramuzadores, Veteranos, Guerreros de Nagarythe" + "name_es": "Reflejos élficos, Evasivos, Disparar y correr, Armas de Ithilmar, Mover a través de cobertura, Exploradores, Escaramuzadores, Veteranos, Guerreros de Nagarythe", + "name_de": "Elfenreflexe, Ausweichen, Schießen und Verschwinden, Ithilmar-Waffen, Durch Deckung bewegen, Kundschafter, Plänkler, Veteranen, Krieger aus Nagarythe" } }, { "name_en": "Tiranoc Chariots", "name_it": "Carri di Tiranoc", - "name_de": "Tiranoc Chariots", + "name_de": "Tiranoc-Streitwagen", "name_fr": "Chars de Tiranoc", "name_es": "Carros de Tiranoc", "id": "tiranoc-chariots", @@ -2393,9 +2398,9 @@ "command": [], "equipment": [ { - "name_en": "Cavalry spear, Longbow", + "name_en": "Cavalry spears, Longbows", "name_it": "Lancia Leggera, Arco Lungo", - "name_de": "Cavalry spear, Longbow", + "name_de": "Kavalleriespeere, Langbögen", "name_es": "Lanza de caballería, Arco largo", "points": 0, "active": true, @@ -2409,13 +2414,14 @@ "name_en": "Elven Reflexes, Impact Hits (D6), Open Order, Quick Shot, Swiftstride, Valour of Ages", "name_it": "Riflessi Elfici, Colpi da Impatto (D6), Formazione Aperta, Tiro Rapido, Passo Rapido, Valore delle Ere", "name_fr": "Réflexes Elfiques, Touches d'Impact (D6), Ordre Dispersé, Tir Rapide, Rapide, Valeur des Âges", - "name_es": "Reflejos élficos, Golpes de impacto (D6), Orden abierto, Disparo rápido, Veloces, Valor de las eras" + "name_es": "Reflejos élficos, Golpes de impacto (D6), Orden abierto, Disparo rápido, Veloces, Valor de las eras", + "name_de": "Elfenreflexe, Aufpralltreffer (W6), Offene Ränge, Schnellschuss, Schnelle Bewegung, Mut der Zeitalter" } }, { "name_en": "Lion Chariot of Chrace", "name_it": "Carro dei Leoni di Chrace", - "name_de": "Lion Chariot of Chrace", + "name_de": "Löwenstreitwagen von Chrace", "name_fr": "Char à Lions de Chrace", "name_es": "Carro de leones de Cracia", "id": "lion-chariot-of-chrace", @@ -2423,9 +2429,9 @@ "command": [], "equipment": [ { - "name_en": "Chracian Great Blade", - "name_it": "Chracian Great Blade", - "name_de": "Chracian Great Blade", + "name_en": "Chracian Great Blades", + "name_it": "Chracian Great Blades", + "name_de": "Chracianische Zweihandklingen", "name_es": "Gran hacha de Cracia", "points": 0, "active": true, @@ -2440,18 +2446,20 @@ "name_en": "Close Order, Elven Reflexes, Fear, First Charge, Impact Hits (D6), Lion Cloak, Stubborn, Valour of Ages", "name_it": "Formazione Serrata, Riflessi Elfici, Paura, Prima Carica, Colpi da Impatto (D6), Lion Cloak, Determinato, Valore delle Ere", "name_fr": "Ordre Serré, Réflexes Elfiques, Peur, Première Charge, Touches d'Impact (D6), Cape de Lion, Obstiné, Valeur des Âges", - "name_es": "Orden cerrado, Reflejos élficos, Miedo, Primera carga, Golpes de impacto (D6), Capa de león, Tozudo, Valor de las eras" + "name_es": "Orden cerrado, Reflejos élficos, Miedo, Primera carga, Golpes de impacto (D6), Capa de león, Tozudo, Valor de las eras", + "name_de": "Geschlossene Ränge, Elfenreflexe, Angst, Erster Angriff, Aufpralltreffer (W6), Löwenpelz, Unnachgiebig, Mut der Zeitalter" }, "notes": { "name_es": "Si tu general tiene el honor élfico Cazador de Cracia, Se puede incluir 0-1 Carro de leones de Cracia como unidad especial por cada 1000 puntos", "name_en": "If your General has the Chracian Hunter Elven Honour, 0-1 Lion Chariot of Chrace may be taken as a Special choice per 1000 points", - "name_fr": "Si votre Général a l'Honneur Elfique Chasseur Chracien, 0-1 Char à Lions de Chrace peut être pris comme choix Spécial par tranche de 1000 points" + "name_fr": "Si votre Général a l'Honneur Elfique Chasseur Chracien, 0-1 Char à Lions de Chrace peut être pris comme choix Spécial par tranche de 1000 points", + "name_de": "Wenn dein General die Elfenehrung Chracianischer Jäger hat, kann 0-1 Löwenstreitwagen von Chrace pro 1000 Punkte als Eliteauswahl gewählt werden" } }, { "name_en": "Lothern Skycutter", "name_it": "Lothern Skycutter", - "name_de": "Lothern Skycutter", + "name_de": "Himmelssegler von Lothern", "name_fr": "Cotre Volant de Lothern", "name_es": "Escoltas celestes de Lothern", "id": "lothern-skycutters", @@ -2461,7 +2469,7 @@ { "name_en": "Cavalry spears, Shortbows", "name_it": "Lancia Leggera, Archi Corti", - "name_de": "Cavalry spears, Shortbows", + "name_de": "Kavalleriespeere, Kurzbögen", "name_es": "Lanzas de caballería, Arcos cortos", "points": 0, "active": true, @@ -2473,7 +2481,7 @@ { "name_en": "Eagle-Eye Bolt Thrower", "name_it": "Eagle-Eye Balista", - "name_de": "Eagle-Eye Bolt Thrower", + "name_de": "Adlerauge-Speerschleuder", "name_es": "Lanzavirotes ojo de águila", "points": 25, "perModel": true, @@ -2485,12 +2493,14 @@ "name_en": "Close Order, Fear, Fly (10), Elven Reflexes (Sea Guard Crew only), Impact Hits (D3+1), Swiftstride, Valour of Ages", "name_it": "Formazione Serrata, Paura, Volo (10), Riflessi Elfici (Sea Guard Crew only), Colpi da Impatto (D3+1), Passo Rapido, Valore delle Ere", "name_fr": "Ordre Serré, Peur, Vol (10), Réflexes Elfiques (Équipage Garde Maritime uniquement), Touches d'Impact (D3+1), Rapide, Valeur des Âges", - "name_es": "Orden cerrado, Miedo, Volar (10), Reflejos élficos (solo la tripulación de Guardias del mar), Golpes de impacto (D3+1), Veloz, Valor de las eras" + "name_es": "Orden cerrado, Miedo, Volar (10), Reflejos élficos (solo la tripulación de Guardias del mar), Golpes de impacto (D3+1), Veloz, Valor de las eras", + "name_de": "Geschlossene Ränge, Angst, Fliegen (10), Elfenreflexe (Nur Seegarde Besatzung), Aufpralltreffer (W3+1), Schnelle Bewegung, Mut der Zeitalter" }, "notes": { "name_en": "If your General has the Sea Guard Elven Honour, 0-1 Lothern Skycutter may be taken as a Special choice", "name_fr": "Si votre Général a l'Honneur Elfique Garde Maritime, 0-1 Cotre Volant de Lothern peut être pris comme choix Spécial", - "name_es": "Si tu general tiene el honor élfico Guardia del mar, puedes incluir 0-1 Escolta celeste de Lothern como unidad especial" + "name_es": "Si tu general tiene el honor élfico Guardia del mar, puedes incluir 0-1 Escolta celeste de Lothern como unidad especial", + "name_de": "Wenn dein General die Elfenehrung Seegarde hat, kann 0-1 Himmelssegler von Lothern als Eliteauswahl gewählt werden" } } ], @@ -2498,7 +2508,7 @@ { "name_en": "Sisters of Avelorn", "name_it": "Sorelle di Avelorn", - "name_de": "Sisters of Avelorn", + "name_de": "Schwestern Avelorn", "name_fr": "Sœurs d'Avelorn", "name_es": "Hermanas de Avelorn", "id": "sister-of-avelorn", @@ -2509,7 +2519,7 @@ { "name_en": "High Sister", "name_it": "High Sister", - "name_de": "High Sister", + "name_de": "Hohe Schwester", "name_es": "Hermana superiora", "points": 7, "magic": { @@ -2523,7 +2533,7 @@ { "name_en": "Bows of Avelorn", "name_it": "Bows of Avelorn", - "name_de": "Bows of Avelorn", + "name_de": "Bögen von Avelorn", "name_es": "Arcos de Avelorn", "points": 0, "active": true, @@ -2534,7 +2544,7 @@ { "name_en": "Light armour", "name_it": "Armatura Leggera", - "name_de": "Light armour", + "name_de": "Leichte Rüstung", "name_es": "Armadura ligera", "points": 0, "active": true, @@ -2545,7 +2555,7 @@ { "name_en": "Stubborn (0-1 unit)", "name_it": "Determinato (0-1 unit)", - "name_de": "Stubborn (0-1 unit)", + "name_de": "Unnachgiebig (0-1 Einheit)", "name_es": "Tozudas (0-1 unidad)", "points": 1, "perModel": true, @@ -2554,7 +2564,7 @@ { "name_en": "Ambushers (0-1 unit)", "name_it": "Agguatatori (0-1 unit)", - "name_de": "Ambushers (0-1 unit)", + "name_de": "Überfall (0-1 Einheit)", "name_es": "Emboscadoras (0-1 unidad)", "points": 1, "perModel": true, @@ -2566,13 +2576,14 @@ "name_en": "Arrows of Isha, Evasive, Ignores Cover, Immune to Psychology, Ithilmar Armour, Ithilmar Weapons, Open Order, Skirmishers, Strike First", "name_it": "Freccie di Isha, Evasione, Ignores Cover, Immune alla Psicologia, Ithilmar Armour, Ithilmar Weapons, Formazione Aperta, Schermagliatori, Attacca Per Primo", "name_fr": "Flèches d'Isha, Esquiveur, Ignore les Couverts, Immunisé à la Psychologie, Armure en Ithilmar, Armes en Ithilmar, Ordre Dispersé, Tirailleurs, Frappe En Premier", - "name_es": "Flechas de Isha, Evasivas Ignora cobertura, Inmune a la psicolgía, Armadura de Ithilmar, Armas de Ithilmar, Orden abierto, Escaramuzadoras, Siempre ataca primero" + "name_es": "Flechas de Isha, Evasivas Ignora cobertura, Inmune a la psicolgía, Armadura de Ithilmar, Armas de Ithilmar, Orden abierto, Escaramuzadoras, Siempre ataca primero", + "name_de": "Pfeile der Isha, Ausweichen, Deckung ignorieren, Immun gegen Psychologie, Ithilmar-Rüstung, Ithilmar-Waffen, Offene Ränge, Plänkler, Schlägt zuerst zu" } }, { "name_en": "Lion Chariot of Chrace", "name_it": "Carro dei Leoni di Chrace", - "name_de": "Lion Chariot of Chrace", + "name_de": "Löwenstreitwagen von Chrace", "name_fr": "Char à Lions de Chrace", "name_es": "Carro de leones de Cracia", "id": "lion-chariot-of-chrace", @@ -2580,9 +2591,9 @@ "command": [], "equipment": [ { - "name_en": "Chracian Great Blade", - "name_it": "Chracian Great Blade", - "name_de": "Chracian Great Blade", + "name_en": "Chracian Great Blades", + "name_it": "Chracian Great Blades", + "name_de": "Chracianische Zweihandklingen", "name_fr": "Grande Lame de Chrace", "name_es": "Gran hacha de Cracia", "points": 0, @@ -2597,7 +2608,8 @@ "name_en": "Close Order, Elven Reflexes, Fear, First Charge, Impact Hits (D6), Lion Cloak, Stubborn, Valour of Ages", "name_it": "Formazione Serrata, Riflessi Elfici, Paura, Prima Carica, Colpi da Impatto (D6), Lion Cloak, Determinato, Valore delle Ere", "name_fr": "Ordre Serré, Réflexes Elfiques, Peur, Première Charge, Touches d'Impact (D6), Cape de Lion, Obstiné, Valeur des Âges", - "name_es": "Orden cerrado, Reflejos élficos, Miedo, Primera carga, Golpes de impacto (D6), Capa de león, Tozudo, Valor de las eras" + "name_es": "Orden cerrado, Reflejos élficos, Miedo, Primera carga, Golpes de impacto (D6), Capa de león, Tozudo, Valor de las eras", + "name_de": "Geschlossene Ränge, Elfenreflexe, Angst, Erster Angriff, Aufpralltreffer (W6), Löwenpelz, Unnachgiebig, Mut der Zeitalter" } }, { @@ -2614,7 +2626,7 @@ { "name_en": "Heavy armour", "name_it": "Armatura Pesante", - "name_de": "Heavy armour", + "name_de": "Schwere Rüstung", "name_es": "Armadura pesada", "points": 0, "active": true, @@ -2627,13 +2639,14 @@ "name_en": "Blessings of Asuryan, Close Order, Fear, Flaming Attacks, Fly (10), From the Ashes, Large Target, Stomp Attacks (2), Swiftstride, Wake of Fire", "name_fr": "Bienfaits d'Asuryan, Ordre Serré, Peur, Attaques Enflammées, Vol (10), Renaître des Cendres, Grande Cible, Attaques de Piétinement (2), Rapide, Sillage de Feu", "name_it": "Blessings of Asuryan, Formazione Serrata, Paura, Attacchi a Base di Fuoco, Volo (10), From the Aashes, Bersaglio Grande, Calpestamento (2), Passo Rapido, Wake of Fire", - "name_es": "Bendiciones de Asuryan, Orden cerrado, Miedo, Ataques flamígeros, Volar (10), De las cenizas, Objetivo grande, Ataques de pisotón (2), Veloz, Estela de fuego" + "name_es": "Bendiciones de Asuryan, Orden cerrado, Miedo, Ataques flamígeros, Volar (10), De las cenizas, Objetivo grande, Ataques de pisotón (2), Veloz, Estela de fuego", + "name_de": "Segnungen des Asuryan, Geschlossene Ränge, Angst, Flammenattacken, Fliegen (10), Aus der Asche, Großes Ziel, Stampfattacken (2), Schnelle Bewegung, Flammenschweif" } }, { "name_en": "Frostheart Phoenix", "name_it": "Fenice di Ghiaccio", - "name_de": "Frostheart Phoenix", + "name_de": "Frostherz-Phönix", "name_fr": "Phénix Cœur-de-Givre", "name_es": "Fénix corazón gélido", "id": "frostheart-phoenix-", @@ -2644,7 +2657,7 @@ { "name_en": "Full plate armour", "name_it": "Armatura Completa", - "name_de": "Full plate armour", + "name_de": "Plattenrüstung", "name_es": "Armadura completa", "points": 0, "active": true, @@ -2657,13 +2670,14 @@ "name_en": "Blizzard Aura, Close Order, Fear, Fly (9), Large Target, Stomp Attacks (2), Swiftstride", "name_it": "Blizzard Aura, Formazione Serrata, Paura, Volo (9), Bersaglio Grande, Calpestamento (2), Passo Rapido", "name_fr": "Aura de Blizzard, Ordre Serré, Peur, Vol (9), Grande Cible, Attaques de Piétinement (2), Rapide", - "name_es": "Aura de ventisca, Orden cerrado, Miedo, Volar (9), Objetivo grande, Ataques de pisotón (2), Veloz" + "name_es": "Aura de ventisca, Orden cerrado, Miedo, Volar (9), Objetivo grande, Ataques de pisotón (2), Veloz", + "name_de": "Eissturmaura, Geschlossene Ränge, Angst, Fliegen (9), Großes Ziel, Stampfattacken (2), Schnelle Bewegung" } }, { "name_en": "Great Eagle", "name_it": "Grandi Aquile", - "name_de": "Great Eagle", + "name_de": "Riesenadler", "name_fr": "Grand Aigle", "name_es": "Gran águila", "id": "great-eagle", @@ -2677,13 +2691,14 @@ "name_en": "Close Order, Fear, Fly (10), Stomp Attacks (1), Swiftstride", "name_it": "Formazione Serrata, Paura, Volo (10), Calpestamento (1), Passo Rapido", "name_fr": "Ordre Serré, Peur, Vol (10), Attaques de Piétinement (1), Rapide", - "name_es": "Orden cerrado, Miedo, Volar (10), Ataques de pisotón (1), Veloz" + "name_es": "Orden cerrado, Miedo, Volar (10), Ataques de pisotón (1), Veloz", + "name_de": "Geschlossene Ränge, Angst, Fliegen (10), Stampfattacken (1), Schnelle Bewegung" } }, { "name_en": "Eagle-Claw Bolt Thrower", "name_it": "Eagle-Claw Balista", - "name_de": "Eagle-Claw Bolt Thrower", + "name_de": "Adlerauge-Speerschleuder", "name_fr": "Baliste Serre d'Aigle", "name_es": "Lanzavirotes garra de águila", "id": "eagle-claw-bolt-thrower", @@ -2697,13 +2712,14 @@ "name_en": "Elven Reflexes, Skirmishers, Valour of Ages", "name_it": "Riflessi Elfici, Schermagliatori, Valore delle Ere", "name_fr": "Réflexes Elfiques, Tirailleurs, Valeur des Âges", - "name_es": "Reflejos élficos, Escaramuzadores, Valor de las eras" + "name_es": "Reflejos élficos, Escaramuzadores, Valor de las eras", + "name_de": "Elfenreflexe, Plänkler, Mut der Zeitalter" } }, { "name_en": "Lothern Skycutter", "name_it": "Lothern Skycutter", - "name_de": "Lothern Skycutter", + "name_de": "Himmelssegler von Lothern", "name_fr": "Cotre Volant de Lothern", "name_es": "Escolta celeste de Lothern", "id": "lothern-skycutters", @@ -2713,7 +2729,7 @@ { "name_en": "Cavalry spears, Shortbows", "name_it": "Lancia Leggera, Archi Corti", - "name_de": "Cavalry spears, Shortbows", + "name_de": "Kavalleriespeere, Kurzbögen", "name_es": "Lanzas de caballería, Arcos cortos", "points": 0, "active": true, @@ -2725,7 +2741,7 @@ { "name_en": "Eagle-Eye Bolt Thrower", "name_it": "Eagle-Eye Balista", - "name_de": "Eagle-Eye Bolt Thrower", + "name_de": "Adlerauge-Speerschleuder", "name_es": "Lanzavirotes ojo de águila", "points": 25, "perModel": true, @@ -2737,7 +2753,8 @@ "name_en": "Close Order, Fear, Fly (10), Elven Reflexes (Sea Guard Crew only), Impact Hits (D3+1), Swiftstride, Valour of Ages", "name_it": "Formazione Serrata, Paura, Volo (10), Riflessi Elfici (Sea Guard Crew only), Colpi da Impatto (D3+1), Passo Rapido, Valore delle Ere", "name_fr": "Ordre Serré, Peur, Vol (10), Réflexes Elfiques (Équipage Garde Maritime uniquement), Touches d'Impact (D3+1), Rapide, Valeur des Âges", - "name_es": "Orden cerrado, Miedo, Volar (10), Reflejos élficos (solo la tripulación de Guardias del mar), Golpes de impacto (D3+1), Veloz, Valor de las eras" + "name_es": "Orden cerrado, Miedo, Volar (10), Reflejos élficos (solo la tripulación de Guardias del mar), Golpes de impacto (D3+1), Veloz, Valor de las eras", + "name_de": "Geschlossene Ränge, Angst, Fliegen (10), Elfenreflexe (Nur Seegarde Besatzung), Aufpralltreffer (W3+1), Schnelle Bewegung, Mut der Zeitalter" } } ], diff --git a/games/the-old-world/magic-items.json b/games/the-old-world/magic-items.json index dee7aa92..16092380 100644 --- a/games/the-old-world/magic-items.json +++ b/games/the-old-world/magic-items.json @@ -2982,7 +2982,7 @@ ], "high-elf-realms": [ { - "name_de": "The White Sword", + "name_de": "Das Weiße Schwert", "name_en": "The White Sword", "name_fr": "Épée Blanche", "name_it": "The White Spada", @@ -2990,7 +2990,7 @@ "type": "weapon" }, { - "name_de": "The Blade of Leaping Gold", + "name_de": "Die Schnelle Goldklinge", "name_en": "The Blade of Leaping Gold", "name_fr": "Lame d'Or Bondissant", "name_it": "The Lama of Leaping Oro", @@ -2998,7 +2998,7 @@ "type": "weapon" }, { - "name_de": "Reaver Bow", + "name_de": "Jagdbogen", "name_en": "Reaver Bow", "name_fr": "Arc du Patrouilleur", "name_it": "Reaver Arco", @@ -3006,7 +3006,7 @@ "type": "weapon" }, { - "name_de": "Foe Bane", + "name_de": "Feindfluch", "name_en": "Foe Bane", "name_fr": "Épée du Bannissement", "name_it": "Foe Bane", @@ -3014,7 +3014,7 @@ "type": "weapon" }, { - "name_de": "Armour of Caledor", + "name_de": "Rüstung von Caledor", "name_en": "Armour of Caledor", "name_fr": "Armure de Caledor", "name_it": "Armour of Caledor", @@ -3022,7 +3022,7 @@ "type": "armor" }, { - "name_de": "Dragon Helm", + "name_de": "Drachenhelm", "name_en": "Dragon Helm", "name_fr": "Heaume Dragon", "name_it": "Drago Helm", @@ -3030,7 +3030,7 @@ "type": "armor" }, { - "name_de": "The Loremaster's Cloak", + "name_de": "Umhang des Lehrmeisters", "name_en": "The Loremaster's Cloak", "name_fr": "Cape du Maître du Savoir", "name_it": "The Loremaster's Mantello", @@ -3038,7 +3038,7 @@ "type": "talisman" }, { - "name_de": "Opal Amulet*", + "name_de": "Opalamulett*", "name_en": "Opal Amulet*", "name_fr": "Amulette d'Opale*", "name_it": "Opal Amulet*", @@ -3047,7 +3047,7 @@ "type": "talisman" }, { - "name_de": "Banner of Arcane Protection", + "name_de": "Banner des arkanen Schutzes", "name_en": "Banner of Arcane Protection", "name_fr": "Bannière de Protection Magique", "name_it": "Banner of Arcane Protection", @@ -3055,7 +3055,7 @@ "type": "banner" }, { - "name_de": "Battle Banner", + "name_de": "Schlachtbanner", "name_en": "Battle Banner", "name_fr": "Bannière de Bataille", "name_it": "Battaglia Banner", @@ -3063,7 +3063,7 @@ "type": "banner" }, { - "name_de": "Lion Standard", + "name_de": "Löwenstandarte", "name_en": "Lion Standard", "name_fr": "Étendard du Lion", "name_it": "Lion Standard", @@ -3071,7 +3071,7 @@ "type": "banner" }, { - "name_de": "Banner of Ellyrion", + "name_de": "Banner von Ellyrion", "name_en": "Banner of Ellyrion", "name_fr": "Bannière d'Ellyrion", "name_it": "Banner of Ellyrion", @@ -3079,7 +3079,7 @@ "type": "banner" }, { - "name_de": "Null Stone", + "name_de": "Nullstein", "name_en": "Null Stone", "name_fr": "Pierre de Nuit", "name_it": "Null Stone", @@ -3087,7 +3087,7 @@ "type": "enchanted-item" }, { - "name_de": "The Cloak of Beards", + "name_de": "Der Bartmantel", "name_en": "The Cloak of Beards", "name_fr": "Cape de Barbes", "name_it": "The Mantello of Beards", @@ -3095,7 +3095,7 @@ "type": "enchanted-item" }, { - "name_de": "Seed of Rebirth*", + "name_de": "Samen der Wiedergeburt*", "name_en": "Seed of Rebirth*", "name_fr": "Graine de Renaissance*", "name_it": "Seed of Rebirth*", @@ -3104,7 +3104,7 @@ "type": "enchanted-item" }, { - "name_de": "Sigil of Asuryan*", + "name_de": "Asuryans Sigille*", "name_en": "Sigil of Asuryan*", "name_fr": "Signe d'Asuryan*", "name_it": "Sigil of Asuryan*", @@ -3113,7 +3113,7 @@ "type": "arcane-item" }, { - "name_de": "Annulian Crystal", + "name_de": "Annulianischer Kristall", "name_en": "Annulian Crystal", "name_fr": "Cristal des Annulii", "name_it": "Annulian Cristallo", @@ -3121,7 +3121,7 @@ "type": "arcane-item" }, { - "name_de": "Silvery Wand", + "name_de": "Silberstab", "name_en": "Silvery Wand", "name_fr": "Baguette d'Argent", "name_it": "Silvery Bacchetta", @@ -3131,7 +3131,7 @@ ], "elven-honours": [ { - "name_de": "Loremaster", + "name_de": "Lehrmeister", "name_en": "Loremaster", "name_fr": "Maître du Savoir", "name_it": "Loremaster", @@ -3139,7 +3139,7 @@ "type": "elven-honour" }, { - "name_de": "Shadow Stalker", + "name_de": "Schattenpirscher", "name_en": "Shadow Stalker", "name_fr": "Rôdeur des Ombres", "name_it": "Shadow Stalker", @@ -3147,7 +3147,7 @@ "type": "elven-honour" }, { - "name_de": "Anointed of Asuryan", + "name_de": "Gesalbter Asuryan", "name_en": "Anointed of Asuryan", "name_fr": "Élu d'Asuryan", "name_it": "Anointed of Asuryan", @@ -3155,7 +3155,7 @@ "type": "elven-honour" }, { - "name_de": "Blood of Caledor", + "name_de": "Blut von Caledor", "name_en": "Blood of Caledor", "name_fr": "Sang de Caledor", "name_it": "Blood of Caledor", @@ -3163,7 +3163,7 @@ "type": "elven-honour" }, { - "name_de": "Chracian Hunter", + "name_de": "Chracianischer Jäger", "name_en": "Chracian Hunter", "name_fr": "Chasseur Chracien", "name_it": "Chracian Cacciatore", @@ -3172,7 +3172,7 @@ "name": "chracian-hunter" }, { - "name_de": "Warden of Saphery", + "name_de": "Wächter von Saphery", "name_en": "Warden of Saphery", "name_fr": "Gardien de Saphery", "name_it": "Warden of Saphery", @@ -3180,7 +3180,7 @@ "type": "elven-honour" }, { - "name_de": "Pure of Heart", + "name_de": "Reinherzig", "name_en": "Pure of Heart", "name_fr": "Pur de Coeur", "name_it": "Pure of Cuore", @@ -3188,7 +3188,7 @@ "type": "elven-honour" }, { - "name_de": "Sea Guard", + "name_de": "Seegarde", "name_en": "Sea Guard", "name_fr": "Garde Maritime", "name_it": "Sea Guard", diff --git a/index.html b/index.html index eca7f3d1..19556064 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -Old World Builder - Army builder for Warhammer: The Old World and Warhammer Fantasy Battles
\ No newline at end of file +Old World Builder - Army builder for Warhammer: The Old World and Warhammer Fantasy Battles
\ No newline at end of file diff --git a/service-worker.js b/service-worker.js index f11b63d4..864c29e8 100644 --- a/service-worker.js +++ b/service-worker.js @@ -1,2 +1,2 @@ -(()=>{"use strict";var e={295:()=>{try{self["workbox:core:5.1.4"]&&_()}catch(e){}},229:()=>{try{self["workbox:expiration:5.1.4"]&&_()}catch(e){}},740:()=>{try{self["workbox:precaching:5.1.4"]&&_()}catch(e){}},130:()=>{try{self["workbox:routing:5.1.4"]&&_()}catch(e){}},205:()=>{try{self["workbox:strategies:5.1.4"]&&_()}catch(e){}}},t={};function s(n){var a=t[n];if(void 0!==a)return a.exports;var r=t[n]={exports:{}};return e[n](r,r.exports,s),r.exports}(()=>{s(295);const e=function(e){let t=e;for(var s=arguments.length,n=new Array(s>1?s-1:0),a=1;a0&&(t+=` :: ${JSON.stringify(n)}`),t};class t extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n=new Set;const a={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!==typeof registration?registration.scope:""},r=e=>[a.prefix,e,a.suffix].filter((e=>e&&e.length>0)).join("-"),i=e=>e||r(a.precache),c=e=>e||r(a.runtime);const o=e=>new URL(String(e),location.href).href.replace(new RegExp(`^${location.origin}`),""),h=(e,t)=>e.filter((e=>t in e)),l=async e=>{let{request:t,mode:s,plugins:n=[]}=e;const a=h(n,"cacheKeyWillBeUsed");let r=t;for(const i of a)r=await i.cacheKeyWillBeUsed.call(i,{mode:s,request:r}),"string"===typeof r&&(r=new Request(r));return r},u=async e=>{let{cacheName:t,request:s,event:n,matchOptions:a,plugins:r=[]}=e;const i=await self.caches.open(t),c=await l({plugins:r,request:s,mode:"read"});let o=await i.match(c,a);for(const h of r)if("cachedResponseWillBeUsed"in h){const e=h.cachedResponseWillBeUsed;o=await e.call(h,{cacheName:t,event:n,matchOptions:a,cachedResponse:o,request:c})}return o},d=async e=>{let{cacheName:s,request:a,response:r,event:i,plugins:c=[],matchOptions:d}=e;const p=await l({plugins:c,request:a,mode:"write"});if(!r)throw new t("cache-put-with-no-response",{url:o(p.url)});const f=await(async e=>{let{request:t,response:s,event:n,plugins:a=[]}=e,r=s,i=!1;for(const c of a)if("cacheWillUpdate"in c){i=!0;const e=c.cacheWillUpdate;if(r=await e.call(c,{request:t,response:r,event:n}),!r)break}return i||(r=r&&200===r.status?r:void 0),r||null})({event:i,plugins:c,response:r,request:p});if(!f)return void 0;const g=await self.caches.open(s),m=h(c,"cacheDidUpdate"),w=m.length>0?await u({cacheName:s,matchOptions:d,request:p}):null;try{await g.put(p,f)}catch(y){throw"QuotaExceededError"===y.name&&await async function(){for(const e of n)await e()}(),y}for(const t of m)await t.cacheDidUpdate.call(t,{cacheName:s,event:i,oldResponse:w,newResponse:f,request:p})},p=u;let f;function g(e){e.then((()=>{}))}class m{constructor(e,t){let{onupgradeneeded:s,onversionchange:n}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};this._db=null,this._name=e,this._version=t,this._onupgradeneeded=s,this._onversionchange=n||(()=>this.close())}get db(){return this._db}async open(){if(!this._db)return this._db=await new Promise(((e,t)=>{let s=!1;setTimeout((()=>{s=!0,t(new Error("The open request was blocked and timed out"))}),this.OPEN_TIMEOUT);const n=indexedDB.open(this._name,this._version);n.onerror=()=>t(n.error),n.onupgradeneeded=e=>{s?(n.transaction.abort(),n.result.close()):"function"===typeof this._onupgradeneeded&&this._onupgradeneeded(e)},n.onsuccess=()=>{const t=n.result;s?t.close():(t.onversionchange=this._onversionchange.bind(this),e(t))}})),this}async getKey(e,t){return(await this.getAllKeys(e,t,1))[0]}async getAll(e,t,s){return await this.getAllMatching(e,{query:t,count:s})}async getAllKeys(e,t,s){return(await this.getAllMatching(e,{query:t,count:s,includeKeys:!0})).map((e=>e.key))}async getAllMatching(e){let{index:t,query:s=null,direction:n="next",count:a,includeKeys:r=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return await this.transaction([e],"readonly",((i,c)=>{const o=i.objectStore(e),h=t?o.index(t):o,l=[],u=h.openCursor(s,n);u.onsuccess=()=>{const e=u.result;e?(l.push(r?e:e.value),a&&l.length>=a?c(l):e.continue()):c(l)}}))}async transaction(e,t,s){return await this.open(),await new Promise(((n,a)=>{const r=this._db.transaction(e,t);r.onabort=()=>a(r.error),r.oncomplete=()=>n(),s(r,(e=>n(e)))}))}async _call(e,t,s){for(var n=arguments.length,a=new Array(n>3?n-3:0),r=3;r{const r=s.objectStore(t),i=r[e].apply(r,a);i.onsuccess=()=>n(i.result)}))}close(){this._db&&(this._db.close(),this._db=null)}}m.prototype.OPEN_TIMEOUT=2e3;const w={readonly:["get","count","getKey","getAll","getAllKeys"],readwrite:["add","put","clear","delete"]};for(const[s,G]of Object.entries(w))for(const e of G)e in IDBObjectStore.prototype&&(m.prototype[e]=async function(t){for(var n=arguments.length,a=new Array(n>1?n-1:0),r=1;r{let{request:s,fetchOptions:n,event:a,plugins:r=[]}=e;if("string"===typeof s&&(s=new Request(s)),a instanceof FetchEvent&&a.preloadResponse){const e=await a.preloadResponse;if(e)return e}const i=h(r,"fetchDidFail"),c=i.length>0?s.clone():null;try{for(const e of r)if("requestWillFetch"in e){const t=e.requestWillFetch,n=s.clone();s=await t.call(e,{request:n,event:a})}}catch(l){throw new t("plugin-error-request-will-fetch",{thrownError:l})}const o=s.clone();try{let e;e="navigate"===s.mode?await fetch(s):await fetch(s,n);for(const t of r)"fetchDidSucceed"in t&&(e=await t.fetchDidSucceed.call(t,{event:a,request:o,response:e}));return e}catch(u){0;for(const e of i)await e.fetchDidFail.call(e,{error:u,event:a,originalRequest:c.clone(),request:o.clone()});throw u}};async function _(e,t){const s=e.clone(),n={headers:new Headers(s.headers),status:s.status,statusText:s.statusText},a=t?t(n):n,r=function(){if(void 0===f){const t=new Response("");if("body"in t)try{new Response(t.body),f=!0}catch(e){f=!1}f=!1}return f}()?s.body:await s.blob();return new Response(r,a)}s(229);const v="cache-entries",R=e=>{const t=new URL(e,location.href);return t.hash="",t.href};class x{constructor(e){this._cacheName=e,this._db=new m("workbox-expiration",1,{onupgradeneeded:e=>this._handleUpgrade(e)})}_handleUpgrade(e){const t=e.target.result.createObjectStore(v,{keyPath:"id"});t.createIndex("cacheName","cacheName",{unique:!1}),t.createIndex("timestamp","timestamp",{unique:!1}),(async e=>{await new Promise(((t,s)=>{const n=indexedDB.deleteDatabase(e);n.onerror=()=>{s(n.error)},n.onblocked=()=>{s(new Error("Delete blocked"))},n.onsuccess=()=>{t()}}))})(this._cacheName)}async setTimestamp(e,t){const s={url:e=R(e),timestamp:t,cacheName:this._cacheName,id:this._getId(e)};await this._db.put(v,s)}async getTimestamp(e){return(await this._db.get(v,this._getId(e))).timestamp}async expireEntries(e,t){const s=await this._db.transaction(v,"readwrite",((s,n)=>{const a=s.objectStore(v).index("timestamp").openCursor(null,"prev"),r=[];let i=0;a.onsuccess=()=>{const s=a.result;if(s){const n=s.value;n.cacheName===this._cacheName&&(e&&n.timestamp=t?r.push(s.value):i++),s.continue()}else n(r)}})),n=[];for(const a of s)await this._db.delete(v,a.id),n.push(a.url);return n}_getId(e){return this._cacheName+"|"+R(e)}}class q{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._isRunning=!1,this._rerunRequested=!1,this._maxEntries=t.maxEntries,this._maxAgeSeconds=t.maxAgeSeconds,this._cacheName=e,this._timestampModel=new x(e)}async expireEntries(){if(this._isRunning)return void(this._rerunRequested=!0);this._isRunning=!0;const e=this._maxAgeSeconds?Date.now()-1e3*this._maxAgeSeconds:0,t=await this._timestampModel.expireEntries(e,this._maxEntries),s=await self.caches.open(this._cacheName);for(const n of t)await s.delete(n);this._isRunning=!1,this._rerunRequested&&(this._rerunRequested=!1,g(this.expireEntries()))}async updateTimestamp(e){await this._timestampModel.setTimestamp(e,Date.now())}async isURLExpired(e){if(this._maxAgeSeconds){return await this._timestampModel.getTimestamp(e)U,add(e){U.push(...e)}};function T(e){if(!e)throw new t("add-to-cache-list-unexpected-type",{entry:e});if("string"===typeof e){const t=new URL(e,location.href);return{cacheKey:t.href,url:t.href}}const{revision:s,url:n}=e;if(!n)throw new t("add-to-cache-list-unexpected-type",{entry:e});if(!s){const e=new URL(n,location.href);return{cacheKey:e.href,url:e.href}}const a=new URL(n,location.href),r=new URL(n,location.href);return a.searchParams.set("__WB_REVISION__",s),{cacheKey:a.href,url:r.href}}class E{constructor(e){this._cacheName=i(e),this._urlsToCacheKeys=new Map,this._urlsToCacheModes=new Map,this._cacheKeysToIntegrities=new Map}addToCacheList(e){const s=[];for(const n of e){"string"===typeof n?s.push(n):n&&void 0===n.revision&&s.push(n.url);const{cacheKey:e,url:a}=T(n),r="string"!==typeof n&&n.revision?"reload":"default";if(this._urlsToCacheKeys.has(a)&&this._urlsToCacheKeys.get(a)!==e)throw new t("add-to-cache-list-conflicting-entries",{firstEntry:this._urlsToCacheKeys.get(a),secondEntry:e});if("string"!==typeof n&&n.integrity){if(this._cacheKeysToIntegrities.has(e)&&this._cacheKeysToIntegrities.get(e)!==n.integrity)throw new t("add-to-cache-list-conflicting-integrities",{url:a});this._cacheKeysToIntegrities.set(e,n.integrity)}if(this._urlsToCacheKeys.set(a,e),this._urlsToCacheModes.set(a,r),s.length>0){const e=`Workbox is precaching URLs without revision info: ${s.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(e)}}}async install(){let{event:e,plugins:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const s=[],n=[],a=await self.caches.open(this._cacheName),r=await a.keys(),i=new Set(r.map((e=>e.url)));for(const[o,h]of this._urlsToCacheKeys)i.has(h)?n.push(o):s.push({cacheKey:h,url:o});const c=s.map((s=>{let{cacheKey:n,url:a}=s;const r=this._cacheKeysToIntegrities.get(n),i=this._urlsToCacheModes.get(a);return this._addURLToCache({cacheKey:n,cacheMode:i,event:e,integrity:r,plugins:t,url:a})}));await Promise.all(c);return{updatedURLs:s.map((e=>e.url)),notUpdatedURLs:n}}async activate(){const e=await self.caches.open(this._cacheName),t=await e.keys(),s=new Set(this._urlsToCacheKeys.values()),n=[];for(const a of t)s.has(a.url)||(await e.delete(a),n.push(a.url));return{deletedURLs:n}}async _addURLToCache(e){let{cacheKey:s,url:n,cacheMode:a,event:r,plugins:i,integrity:c}=e;const o=new Request(n,{integrity:c,cache:a,credentials:"same-origin"});let h,l=await y({event:r,plugins:i,request:o});for(const t of i||[])"cacheWillUpdate"in t&&(h=t);if(!(h?await h.cacheWillUpdate({event:r,request:o,response:l}):l.status<400))throw new t("bad-precaching-response",{url:n,status:l.status});l.redirected&&(l=await _(l)),await d({event:r,plugins:i,response:l,request:s===n?o:new Request(s),cacheName:this._cacheName,matchOptions:{ignoreSearch:!0}})}getURLsToCacheKeys(){return this._urlsToCacheKeys}getCachedURLs(){return[...this._urlsToCacheKeys.keys()]}getCacheKeyForURL(e){const t=new URL(e,location.href);return this._urlsToCacheKeys.get(t.href)}async matchPrecache(e){const t=e instanceof Request?e.url:e,s=this.getCacheKeyForURL(t);if(s){return(await self.caches.open(this._cacheName)).match(s)}}createHandler(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return async s=>{let{request:n}=s;try{const e=await this.matchPrecache(n);if(e)return e;throw new t("missing-precache-entry",{cacheName:this._cacheName,url:n instanceof Request?n.url:n})}catch(a){if(e)return fetch(n);throw a}}}createHandlerBoundToURL(e){let s=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!this.getCacheKeyForURL(e))throw new t("non-precached-url",{url:e});const n=this.createHandler(s),a=new Request(e);return()=>n({request:a})}}let L;const N=()=>(L||(L=new E),L);const K=(e,t)=>{const s=N().getURLsToCacheKeys();for(const n of function(e){let{ignoreURLParametersMatching:t,directoryIndex:s,cleanURLs:n,urlManipulation:a}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return function*(){const r=new URL(e,location.href);r.hash="",yield r.href;const i=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];for(const s of[...e.searchParams.keys()])t.some((e=>e.test(s)))&&e.searchParams.delete(s);return e}(r,t);if(yield i.href,s&&i.pathname.endsWith("/")){const e=new URL(i.href);e.pathname+=s,yield e.href}if(n){const e=new URL(i.href);e.pathname+=".html",yield e.href}if(a){const e=a({url:r});for(const t of e)yield t.href}}()}(e,t)){const e=s.get(n);if(e)return e}},C=function(){let{ignoreURLParametersMatching:e=[/^utm_/],directoryIndex:t="index.html",cleanURLs:s=!0,urlManipulation:n}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const a=i();self.addEventListener("fetch",(r=>{const i=K(r.request.url,{cleanURLs:s,directoryIndex:t,ignoreURLParametersMatching:e,urlManipulation:n});if(!i)return void 0;let c=self.caches.open(a).then((e=>e.match(i))).then((e=>e||fetch(i)));r.respondWith(c)}))};let M=!1;const A=e=>{const t=N(),s=b.get();e.waitUntil(t.install({event:e,plugins:s}).catch((e=>{throw e})))},O=e=>{const t=N();e.waitUntil(t.activate())};s(130);const S=e=>e&&"object"===typeof e?e:{handle:e};class k{constructor(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"GET";this.handler=S(t),this.match=e,this.method=s}}class W extends k{constructor(e,t,s){super((t=>{let{url:s}=t;const n=e.exec(s.href);if(n&&(s.origin===location.origin||0===n.index))return n.slice(1)}),t,s)}}class D{constructor(){this._routes=new Map}get routes(){return this._routes}addFetchListener(){self.addEventListener("fetch",(e=>{const{request:t}=e,s=this.handleRequest({request:t,event:e});s&&e.respondWith(s)}))}addCacheListener(){self.addEventListener("message",(e=>{if(e.data&&"CACHE_URLS"===e.data.type){const{payload:t}=e.data;0;const s=Promise.all(t.urlsToCache.map((e=>{"string"===typeof e&&(e=[e]);const t=new Request(...e);return this.handleRequest({request:t})})));e.waitUntil(s),e.ports&&e.ports[0]&&s.then((()=>e.ports[0].postMessage(!0)))}}))}handleRequest(e){let{request:t,event:s}=e;const n=new URL(t.url,location.href);if(!n.protocol.startsWith("http"))return void 0;const{params:a,route:r}=this.findMatchingRoute({url:n,request:t,event:s});let i=r&&r.handler;if(!i&&this._defaultHandler&&(i=this._defaultHandler),!i)return void 0;let c;try{c=i.handle({url:n,request:t,event:s,params:a})}catch(o){c=Promise.reject(o)}return c instanceof Promise&&this._catchHandler&&(c=c.catch((e=>this._catchHandler.handle({url:n,request:t,event:s})))),c}findMatchingRoute(e){let{url:t,request:s,event:n}=e;const a=this._routes.get(s.method)||[];for(const r of a){let e;const a=r.match({url:t,request:s,event:n});if(a)return e=a,(Array.isArray(a)&&0===a.length||a.constructor===Object&&0===Object.keys(a).length||"boolean"===typeof a)&&(e=void 0),{route:r,params:e}}return{}}setDefaultHandler(e){this._defaultHandler=S(e)}setCatchHandler(e){this._catchHandler=S(e)}registerRoute(e){this._routes.has(e.method)||this._routes.set(e.method,[]),this._routes.get(e.method).push(e)}unregisterRoute(e){if(!this._routes.has(e.method))throw new t("unregister-route-but-not-found-with-method",{method:e.method});const s=this._routes.get(e.method).indexOf(e);if(!(s>-1))throw new t("unregister-route-route-not-registered");this._routes.get(e.method).splice(s,1)}}let I;const P=()=>(I||(I=new D,I.addFetchListener(),I.addCacheListener()),I);function H(e,s,n){let a;if("string"===typeof e){const t=new URL(e,location.href);0;a=new k((e=>{let{url:s}=e;return s.href===t.href}),s,n)}else if(e instanceof RegExp)a=new W(e,s,n);else if("function"===typeof e)a=new k(e,s,n);else{if(!(e instanceof k))throw new t("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});a=e}return P().registerRoute(a),a}s(205);const F={cacheWillUpdate:async e=>{let{response:t}=e;return 200===t.status||0===t.status?t:null}};var j;self.addEventListener("activate",(()=>self.clients.claim())),function(e){N().addToCacheList(e),e.length>0&&(self.addEventListener("install",A),self.addEventListener("activate",O))}([{'revision':'e3cb1ea52519b44af70cc1e05494c618','url':'/index.html'},{'revision':null,'url':'/static/css/main.e3b61faf.css'},{'revision':null,'url':'/static/js/453.6d1697a3.chunk.js'},{'revision':null,'url':'/static/js/main.634f061e.js'},{'revision':'8c75c540bc0eb6dbca1fca7f470858be','url':'/static/media/beastmen.6a9fce0fd733488c35e356bda2e042f4.svg'},{'revision':'6a7beed83e9ebe73744bc61a5e32e42f','url':'/static/media/bretonnia.e5c3a1d0cda0c8b9b86cda30f5d33f90.svg'},{'revision':'758b9f0b9e30357dc198bdb835839993','url':'/static/media/chaos-deamons.1f26ab656855514be12c0e7db8c6b32d.svg'},{'revision':'3968332ea71fd0cc7af274c2cceedfb1','url':'/static/media/chaos-dwarfs.ee5f1bd3dabda3d5856f199d52b3b526.svg'},{'revision':'b870604c6b6a68bf384eacd0d64dbad5','url':'/static/media/chaos-warriors.95dbc8c2e20911b0d0f50eec0ecc875b.svg'},{'revision':'91d821e6dc0f4175c3e48aeee3f3894f','url':'/static/media/dark-elves.9d17a9e44a1dc8c532b8e9c195bb9349.svg'},{'revision':'dc96aecec7571d30571e2063706e82dd','url':'/static/media/dwarfs.d1515ee28ee729eab0223051e8213f1e.svg'},{'revision':null,'url':'/static/media/fantasywelt_de.3e01438afdb1af5fda51.jpg'},{'revision':null,'url':'/static/media/fantasywelt_en.77ecbbfee64b462b792e.jpg'},{'revision':null,'url':'/static/media/forg3d.33b515df8b1916969003.jpg'},{'revision':'017cb73ecd5e1c49a7bf92d668412796','url':'/static/media/france.bf26b172fbb19d5193a5a0a28e69c4ba.svg'},{'revision':'7ff3f5d07e94e111d195a22d8bcf7b95','url':'/static/media/germany.d9625f93cc14fcc164d63bed94bec76e.svg'},{'revision':'e2b6e2998eed09ae6c395710c323cd98','url':'/static/media/greenskins.ea460b464152f5a93cc8550adc0a40fe.svg'},{'revision':'369c5d00afcc1c2915ba37d71d3bb7d1','url':'/static/media/high-elves.446a07c8c1502e6229747d52b78b99f5.svg'},{'revision':'48651b91715991f28ac67418cececd1f','url':'/static/media/italy.bb2033dcda58d584b313a60a850a36cb.svg'},{'revision':'e904785e6d98ffbe12bde4e5b53bcd76','url':'/static/media/lizardmen.1864459dda98e2341482261f911f4fbe.svg'},{'revision':null,'url':'/static/media/mwg-forge.6cc9d70962649b7d09e6.gif'},{'revision':'e48089e45b66dd85795dba907706589d','url':'/static/media/ogres.8b76905b48d6dc99e2717dc991ec120c.svg'},{'revision':'dfb064d1a4dc920fb2080ffc66864dd2','url':'/static/media/polen.0882b3e3846c9861e7150d74c94a7ee9.svg'},{'revision':'42e604b6a561cd97723dd53d7f663aa5','url':'/static/media/skaven.76cb48b7ee586866d155fdf90d147f72.svg'},{'revision':'068aa2fcf0a0174468e7b1f7d2916755','url':'/static/media/spain.fe46f7a778fdc34b4cb31895f52d2247.svg'},{'revision':'a5e5b505ebb8dac25094c6f0739333c0','url':'/static/media/symbol-defs.222641c52a06b3ef6cf07b79b7ad390b.svg'},{'revision':'b93e49ea1c0b3ada852f6b78ab17e75e','url':'/static/media/the-empire.d3620178330194a2108c5d16ee252a3f.svg'},{'revision':'564cf97e071b7df6fb11b900d58366bb','url':'/static/media/tomb-kings.9b30c54116cba0104b185153a5a522dd.svg'},{'revision':'addf813f3ea1de2b14db7dfef5de6588','url':'/static/media/usa.699fdb72b59257b15c15b5c08cfe4b3d.svg'},{'revision':'44a0f71a7fe4a7d570444e668b86eab6','url':'/static/media/vampire-counts.fd13d874116de00f9855c6d96285c1d0.svg'},{'revision':'fb0ecbab1934dade3426b665a874de44','url':'/static/media/wood-elves.2b1066f8b82dc538ef1c9848d30911ab.svg'}]),function(e){M||(C(e),M=!0)}(j);const B=new RegExp("/[^/?]+\\.[^/]+$");var $;H((e=>{let{request:t,url:s}=e;return"navigate"===t.mode&&(!s.pathname.startsWith("/_")&&!s.pathname.match(B))}),($="/index.html",N().createHandlerBoundToURL($))),H((e=>{let{url:t}=e;return t.origin===self.location.origin&&t.pathname.endsWith(".png")}),new class{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(this._cacheName=c(e.cacheName),this._plugins=e.plugins||[],e.plugins){const t=e.plugins.some((e=>!!e.cacheWillUpdate));this._plugins=t?e.plugins:[F,...e.plugins]}else this._plugins=[F];this._fetchOptions=e.fetchOptions,this._matchOptions=e.matchOptions}async handle(e){let{event:s,request:n}=e;"string"===typeof n&&(n=new Request(n));const a=this._getFromNetwork({request:n,event:s});let r,i=await p({cacheName:this._cacheName,request:n,event:s,matchOptions:this._matchOptions,plugins:this._plugins});if(i){if(s)try{s.waitUntil(a)}catch(r){0}}else{0;try{i=await a}catch(c){r=c}}if(!i)throw new t("no-response",{url:n.url,error:r});return i}async _getFromNetwork(e){let{request:t,event:s}=e;const n=await y({request:t,event:s,fetchOptions:this._fetchOptions,plugins:this._plugins}),a=d({cacheName:this._cacheName,request:t,response:n.clone(),event:s,plugins:this._plugins});if(s)try{s.waitUntil(a)}catch(r){0}return n}}({cacheName:"images",plugins:[new class{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};var t;this.cachedResponseWillBeUsed=async e=>{let{event:t,request:s,cacheName:n,cachedResponse:a}=e;if(!a)return null;const r=this._isResponseDateFresh(a),i=this._getCacheExpiration(n);g(i.expireEntries());const c=i.updateTimestamp(s.url);if(t)try{t.waitUntil(c)}catch(o){0}return r?a:null},this.cacheDidUpdate=async e=>{let{cacheName:t,request:s}=e;const n=this._getCacheExpiration(t);await n.updateTimestamp(s.url),await n.expireEntries()},this._config=e,this._maxAgeSeconds=e.maxAgeSeconds,this._cacheExpirations=new Map,e.purgeOnQuotaError&&(t=()=>this.deleteCacheAndMetadata(),n.add(t))}_getCacheExpiration(e){if(e===c())throw new t("expire-custom-caches-only");let s=this._cacheExpirations.get(e);return s||(s=new q(e,this._config),this._cacheExpirations.set(e,s)),s}_isResponseDateFresh(e){if(!this._maxAgeSeconds)return!0;const t=this._getDateHeaderTimestamp(e);if(null===t)return!0;return t>=Date.now()-1e3*this._maxAgeSeconds}_getDateHeaderTimestamp(e){if(!e.headers.has("date"))return null;const t=e.headers.get("date"),s=new Date(t).getTime();return isNaN(s)?null:s}async deleteCacheAndMetadata(){for(const[e,t]of this._cacheExpirations)await self.caches.delete(e),await t.delete();this._cacheExpirations=new Map}}({maxEntries:50})]})),self.addEventListener("message",(e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()})),self.addEventListener("activate",(e=>{e.waitUntil(caches.keys().then((e=>Promise.all(e.map((function(e){return caches.delete(e)}))))))}))})()})(); +(()=>{"use strict";var e={295:()=>{try{self["workbox:core:5.1.4"]&&_()}catch(e){}},229:()=>{try{self["workbox:expiration:5.1.4"]&&_()}catch(e){}},740:()=>{try{self["workbox:precaching:5.1.4"]&&_()}catch(e){}},130:()=>{try{self["workbox:routing:5.1.4"]&&_()}catch(e){}},205:()=>{try{self["workbox:strategies:5.1.4"]&&_()}catch(e){}}},t={};function s(n){var a=t[n];if(void 0!==a)return a.exports;var r=t[n]={exports:{}};return e[n](r,r.exports,s),r.exports}(()=>{s(295);const e=function(e){let t=e;for(var s=arguments.length,n=new Array(s>1?s-1:0),a=1;a0&&(t+=` :: ${JSON.stringify(n)}`),t};class t extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n=new Set;const a={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!==typeof registration?registration.scope:""},r=e=>[a.prefix,e,a.suffix].filter((e=>e&&e.length>0)).join("-"),i=e=>e||r(a.precache),c=e=>e||r(a.runtime);const o=e=>new URL(String(e),location.href).href.replace(new RegExp(`^${location.origin}`),""),h=(e,t)=>e.filter((e=>t in e)),l=async e=>{let{request:t,mode:s,plugins:n=[]}=e;const a=h(n,"cacheKeyWillBeUsed");let r=t;for(const i of a)r=await i.cacheKeyWillBeUsed.call(i,{mode:s,request:r}),"string"===typeof r&&(r=new Request(r));return r},u=async e=>{let{cacheName:t,request:s,event:n,matchOptions:a,plugins:r=[]}=e;const i=await self.caches.open(t),c=await l({plugins:r,request:s,mode:"read"});let o=await i.match(c,a);for(const h of r)if("cachedResponseWillBeUsed"in h){const e=h.cachedResponseWillBeUsed;o=await e.call(h,{cacheName:t,event:n,matchOptions:a,cachedResponse:o,request:c})}return o},d=async e=>{let{cacheName:s,request:a,response:r,event:i,plugins:c=[],matchOptions:d}=e;const p=await l({plugins:c,request:a,mode:"write"});if(!r)throw new t("cache-put-with-no-response",{url:o(p.url)});const f=await(async e=>{let{request:t,response:s,event:n,plugins:a=[]}=e,r=s,i=!1;for(const c of a)if("cacheWillUpdate"in c){i=!0;const e=c.cacheWillUpdate;if(r=await e.call(c,{request:t,response:r,event:n}),!r)break}return i||(r=r&&200===r.status?r:void 0),r||null})({event:i,plugins:c,response:r,request:p});if(!f)return void 0;const g=await self.caches.open(s),m=h(c,"cacheDidUpdate"),w=m.length>0?await u({cacheName:s,matchOptions:d,request:p}):null;try{await g.put(p,f)}catch(y){throw"QuotaExceededError"===y.name&&await async function(){for(const e of n)await e()}(),y}for(const t of m)await t.cacheDidUpdate.call(t,{cacheName:s,event:i,oldResponse:w,newResponse:f,request:p})},p=u;let f;function g(e){e.then((()=>{}))}class m{constructor(e,t){let{onupgradeneeded:s,onversionchange:n}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};this._db=null,this._name=e,this._version=t,this._onupgradeneeded=s,this._onversionchange=n||(()=>this.close())}get db(){return this._db}async open(){if(!this._db)return this._db=await new Promise(((e,t)=>{let s=!1;setTimeout((()=>{s=!0,t(new Error("The open request was blocked and timed out"))}),this.OPEN_TIMEOUT);const n=indexedDB.open(this._name,this._version);n.onerror=()=>t(n.error),n.onupgradeneeded=e=>{s?(n.transaction.abort(),n.result.close()):"function"===typeof this._onupgradeneeded&&this._onupgradeneeded(e)},n.onsuccess=()=>{const t=n.result;s?t.close():(t.onversionchange=this._onversionchange.bind(this),e(t))}})),this}async getKey(e,t){return(await this.getAllKeys(e,t,1))[0]}async getAll(e,t,s){return await this.getAllMatching(e,{query:t,count:s})}async getAllKeys(e,t,s){return(await this.getAllMatching(e,{query:t,count:s,includeKeys:!0})).map((e=>e.key))}async getAllMatching(e){let{index:t,query:s=null,direction:n="next",count:a,includeKeys:r=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return await this.transaction([e],"readonly",((i,c)=>{const o=i.objectStore(e),h=t?o.index(t):o,l=[],u=h.openCursor(s,n);u.onsuccess=()=>{const e=u.result;e?(l.push(r?e:e.value),a&&l.length>=a?c(l):e.continue()):c(l)}}))}async transaction(e,t,s){return await this.open(),await new Promise(((n,a)=>{const r=this._db.transaction(e,t);r.onabort=()=>a(r.error),r.oncomplete=()=>n(),s(r,(e=>n(e)))}))}async _call(e,t,s){for(var n=arguments.length,a=new Array(n>3?n-3:0),r=3;r{const r=s.objectStore(t),i=r[e].apply(r,a);i.onsuccess=()=>n(i.result)}))}close(){this._db&&(this._db.close(),this._db=null)}}m.prototype.OPEN_TIMEOUT=2e3;const w={readonly:["get","count","getKey","getAll","getAllKeys"],readwrite:["add","put","clear","delete"]};for(const[s,G]of Object.entries(w))for(const e of G)e in IDBObjectStore.prototype&&(m.prototype[e]=async function(t){for(var n=arguments.length,a=new Array(n>1?n-1:0),r=1;r{let{request:s,fetchOptions:n,event:a,plugins:r=[]}=e;if("string"===typeof s&&(s=new Request(s)),a instanceof FetchEvent&&a.preloadResponse){const e=await a.preloadResponse;if(e)return e}const i=h(r,"fetchDidFail"),c=i.length>0?s.clone():null;try{for(const e of r)if("requestWillFetch"in e){const t=e.requestWillFetch,n=s.clone();s=await t.call(e,{request:n,event:a})}}catch(l){throw new t("plugin-error-request-will-fetch",{thrownError:l})}const o=s.clone();try{let e;e="navigate"===s.mode?await fetch(s):await fetch(s,n);for(const t of r)"fetchDidSucceed"in t&&(e=await t.fetchDidSucceed.call(t,{event:a,request:o,response:e}));return e}catch(u){0;for(const e of i)await e.fetchDidFail.call(e,{error:u,event:a,originalRequest:c.clone(),request:o.clone()});throw u}};async function _(e,t){const s=e.clone(),n={headers:new Headers(s.headers),status:s.status,statusText:s.statusText},a=t?t(n):n,r=function(){if(void 0===f){const t=new Response("");if("body"in t)try{new Response(t.body),f=!0}catch(e){f=!1}f=!1}return f}()?s.body:await s.blob();return new Response(r,a)}s(229);const v="cache-entries",R=e=>{const t=new URL(e,location.href);return t.hash="",t.href};class x{constructor(e){this._cacheName=e,this._db=new m("workbox-expiration",1,{onupgradeneeded:e=>this._handleUpgrade(e)})}_handleUpgrade(e){const t=e.target.result.createObjectStore(v,{keyPath:"id"});t.createIndex("cacheName","cacheName",{unique:!1}),t.createIndex("timestamp","timestamp",{unique:!1}),(async e=>{await new Promise(((t,s)=>{const n=indexedDB.deleteDatabase(e);n.onerror=()=>{s(n.error)},n.onblocked=()=>{s(new Error("Delete blocked"))},n.onsuccess=()=>{t()}}))})(this._cacheName)}async setTimestamp(e,t){const s={url:e=R(e),timestamp:t,cacheName:this._cacheName,id:this._getId(e)};await this._db.put(v,s)}async getTimestamp(e){return(await this._db.get(v,this._getId(e))).timestamp}async expireEntries(e,t){const s=await this._db.transaction(v,"readwrite",((s,n)=>{const a=s.objectStore(v).index("timestamp").openCursor(null,"prev"),r=[];let i=0;a.onsuccess=()=>{const s=a.result;if(s){const n=s.value;n.cacheName===this._cacheName&&(e&&n.timestamp=t?r.push(s.value):i++),s.continue()}else n(r)}})),n=[];for(const a of s)await this._db.delete(v,a.id),n.push(a.url);return n}_getId(e){return this._cacheName+"|"+R(e)}}class q{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._isRunning=!1,this._rerunRequested=!1,this._maxEntries=t.maxEntries,this._maxAgeSeconds=t.maxAgeSeconds,this._cacheName=e,this._timestampModel=new x(e)}async expireEntries(){if(this._isRunning)return void(this._rerunRequested=!0);this._isRunning=!0;const e=this._maxAgeSeconds?Date.now()-1e3*this._maxAgeSeconds:0,t=await this._timestampModel.expireEntries(e,this._maxEntries),s=await self.caches.open(this._cacheName);for(const n of t)await s.delete(n);this._isRunning=!1,this._rerunRequested&&(this._rerunRequested=!1,g(this.expireEntries()))}async updateTimestamp(e){await this._timestampModel.setTimestamp(e,Date.now())}async isURLExpired(e){if(this._maxAgeSeconds){return await this._timestampModel.getTimestamp(e)U,add(e){U.push(...e)}};function T(e){if(!e)throw new t("add-to-cache-list-unexpected-type",{entry:e});if("string"===typeof e){const t=new URL(e,location.href);return{cacheKey:t.href,url:t.href}}const{revision:s,url:n}=e;if(!n)throw new t("add-to-cache-list-unexpected-type",{entry:e});if(!s){const e=new URL(n,location.href);return{cacheKey:e.href,url:e.href}}const a=new URL(n,location.href),r=new URL(n,location.href);return a.searchParams.set("__WB_REVISION__",s),{cacheKey:a.href,url:r.href}}class E{constructor(e){this._cacheName=i(e),this._urlsToCacheKeys=new Map,this._urlsToCacheModes=new Map,this._cacheKeysToIntegrities=new Map}addToCacheList(e){const s=[];for(const n of e){"string"===typeof n?s.push(n):n&&void 0===n.revision&&s.push(n.url);const{cacheKey:e,url:a}=T(n),r="string"!==typeof n&&n.revision?"reload":"default";if(this._urlsToCacheKeys.has(a)&&this._urlsToCacheKeys.get(a)!==e)throw new t("add-to-cache-list-conflicting-entries",{firstEntry:this._urlsToCacheKeys.get(a),secondEntry:e});if("string"!==typeof n&&n.integrity){if(this._cacheKeysToIntegrities.has(e)&&this._cacheKeysToIntegrities.get(e)!==n.integrity)throw new t("add-to-cache-list-conflicting-integrities",{url:a});this._cacheKeysToIntegrities.set(e,n.integrity)}if(this._urlsToCacheKeys.set(a,e),this._urlsToCacheModes.set(a,r),s.length>0){const e=`Workbox is precaching URLs without revision info: ${s.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(e)}}}async install(){let{event:e,plugins:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const s=[],n=[],a=await self.caches.open(this._cacheName),r=await a.keys(),i=new Set(r.map((e=>e.url)));for(const[o,h]of this._urlsToCacheKeys)i.has(h)?n.push(o):s.push({cacheKey:h,url:o});const c=s.map((s=>{let{cacheKey:n,url:a}=s;const r=this._cacheKeysToIntegrities.get(n),i=this._urlsToCacheModes.get(a);return this._addURLToCache({cacheKey:n,cacheMode:i,event:e,integrity:r,plugins:t,url:a})}));await Promise.all(c);return{updatedURLs:s.map((e=>e.url)),notUpdatedURLs:n}}async activate(){const e=await self.caches.open(this._cacheName),t=await e.keys(),s=new Set(this._urlsToCacheKeys.values()),n=[];for(const a of t)s.has(a.url)||(await e.delete(a),n.push(a.url));return{deletedURLs:n}}async _addURLToCache(e){let{cacheKey:s,url:n,cacheMode:a,event:r,plugins:i,integrity:c}=e;const o=new Request(n,{integrity:c,cache:a,credentials:"same-origin"});let h,l=await y({event:r,plugins:i,request:o});for(const t of i||[])"cacheWillUpdate"in t&&(h=t);if(!(h?await h.cacheWillUpdate({event:r,request:o,response:l}):l.status<400))throw new t("bad-precaching-response",{url:n,status:l.status});l.redirected&&(l=await _(l)),await d({event:r,plugins:i,response:l,request:s===n?o:new Request(s),cacheName:this._cacheName,matchOptions:{ignoreSearch:!0}})}getURLsToCacheKeys(){return this._urlsToCacheKeys}getCachedURLs(){return[...this._urlsToCacheKeys.keys()]}getCacheKeyForURL(e){const t=new URL(e,location.href);return this._urlsToCacheKeys.get(t.href)}async matchPrecache(e){const t=e instanceof Request?e.url:e,s=this.getCacheKeyForURL(t);if(s){return(await self.caches.open(this._cacheName)).match(s)}}createHandler(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return async s=>{let{request:n}=s;try{const e=await this.matchPrecache(n);if(e)return e;throw new t("missing-precache-entry",{cacheName:this._cacheName,url:n instanceof Request?n.url:n})}catch(a){if(e)return fetch(n);throw a}}}createHandlerBoundToURL(e){let s=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!this.getCacheKeyForURL(e))throw new t("non-precached-url",{url:e});const n=this.createHandler(s),a=new Request(e);return()=>n({request:a})}}let L;const N=()=>(L||(L=new E),L);const K=(e,t)=>{const s=N().getURLsToCacheKeys();for(const n of function(e){let{ignoreURLParametersMatching:t,directoryIndex:s,cleanURLs:n,urlManipulation:a}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return function*(){const r=new URL(e,location.href);r.hash="",yield r.href;const i=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];for(const s of[...e.searchParams.keys()])t.some((e=>e.test(s)))&&e.searchParams.delete(s);return e}(r,t);if(yield i.href,s&&i.pathname.endsWith("/")){const e=new URL(i.href);e.pathname+=s,yield e.href}if(n){const e=new URL(i.href);e.pathname+=".html",yield e.href}if(a){const e=a({url:r});for(const t of e)yield t.href}}()}(e,t)){const e=s.get(n);if(e)return e}},C=function(){let{ignoreURLParametersMatching:e=[/^utm_/],directoryIndex:t="index.html",cleanURLs:s=!0,urlManipulation:n}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const a=i();self.addEventListener("fetch",(r=>{const i=K(r.request.url,{cleanURLs:s,directoryIndex:t,ignoreURLParametersMatching:e,urlManipulation:n});if(!i)return void 0;let c=self.caches.open(a).then((e=>e.match(i))).then((e=>e||fetch(i)));r.respondWith(c)}))};let M=!1;const A=e=>{const t=N(),s=b.get();e.waitUntil(t.install({event:e,plugins:s}).catch((e=>{throw e})))},O=e=>{const t=N();e.waitUntil(t.activate())};s(130);const S=e=>e&&"object"===typeof e?e:{handle:e};class k{constructor(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"GET";this.handler=S(t),this.match=e,this.method=s}}class W extends k{constructor(e,t,s){super((t=>{let{url:s}=t;const n=e.exec(s.href);if(n&&(s.origin===location.origin||0===n.index))return n.slice(1)}),t,s)}}class D{constructor(){this._routes=new Map}get routes(){return this._routes}addFetchListener(){self.addEventListener("fetch",(e=>{const{request:t}=e,s=this.handleRequest({request:t,event:e});s&&e.respondWith(s)}))}addCacheListener(){self.addEventListener("message",(e=>{if(e.data&&"CACHE_URLS"===e.data.type){const{payload:t}=e.data;0;const s=Promise.all(t.urlsToCache.map((e=>{"string"===typeof e&&(e=[e]);const t=new Request(...e);return this.handleRequest({request:t})})));e.waitUntil(s),e.ports&&e.ports[0]&&s.then((()=>e.ports[0].postMessage(!0)))}}))}handleRequest(e){let{request:t,event:s}=e;const n=new URL(t.url,location.href);if(!n.protocol.startsWith("http"))return void 0;const{params:a,route:r}=this.findMatchingRoute({url:n,request:t,event:s});let i=r&&r.handler;if(!i&&this._defaultHandler&&(i=this._defaultHandler),!i)return void 0;let c;try{c=i.handle({url:n,request:t,event:s,params:a})}catch(o){c=Promise.reject(o)}return c instanceof Promise&&this._catchHandler&&(c=c.catch((e=>this._catchHandler.handle({url:n,request:t,event:s})))),c}findMatchingRoute(e){let{url:t,request:s,event:n}=e;const a=this._routes.get(s.method)||[];for(const r of a){let e;const a=r.match({url:t,request:s,event:n});if(a)return e=a,(Array.isArray(a)&&0===a.length||a.constructor===Object&&0===Object.keys(a).length||"boolean"===typeof a)&&(e=void 0),{route:r,params:e}}return{}}setDefaultHandler(e){this._defaultHandler=S(e)}setCatchHandler(e){this._catchHandler=S(e)}registerRoute(e){this._routes.has(e.method)||this._routes.set(e.method,[]),this._routes.get(e.method).push(e)}unregisterRoute(e){if(!this._routes.has(e.method))throw new t("unregister-route-but-not-found-with-method",{method:e.method});const s=this._routes.get(e.method).indexOf(e);if(!(s>-1))throw new t("unregister-route-route-not-registered");this._routes.get(e.method).splice(s,1)}}let I;const P=()=>(I||(I=new D,I.addFetchListener(),I.addCacheListener()),I);function H(e,s,n){let a;if("string"===typeof e){const t=new URL(e,location.href);0;a=new k((e=>{let{url:s}=e;return s.href===t.href}),s,n)}else if(e instanceof RegExp)a=new W(e,s,n);else if("function"===typeof e)a=new k(e,s,n);else{if(!(e instanceof k))throw new t("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});a=e}return P().registerRoute(a),a}s(205);const F={cacheWillUpdate:async e=>{let{response:t}=e;return 200===t.status||0===t.status?t:null}};var j;self.addEventListener("activate",(()=>self.clients.claim())),function(e){N().addToCacheList(e),e.length>0&&(self.addEventListener("install",A),self.addEventListener("activate",O))}([{'revision':'38d0f2c90ac423433b72ccbef2c86458','url':'/index.html'},{'revision':null,'url':'/static/css/main.e3b61faf.css'},{'revision':null,'url':'/static/js/453.6d1697a3.chunk.js'},{'revision':null,'url':'/static/js/main.8b39682a.js'},{'revision':'8c75c540bc0eb6dbca1fca7f470858be','url':'/static/media/beastmen.6a9fce0fd733488c35e356bda2e042f4.svg'},{'revision':'6a7beed83e9ebe73744bc61a5e32e42f','url':'/static/media/bretonnia.e5c3a1d0cda0c8b9b86cda30f5d33f90.svg'},{'revision':'758b9f0b9e30357dc198bdb835839993','url':'/static/media/chaos-deamons.1f26ab656855514be12c0e7db8c6b32d.svg'},{'revision':'3968332ea71fd0cc7af274c2cceedfb1','url':'/static/media/chaos-dwarfs.ee5f1bd3dabda3d5856f199d52b3b526.svg'},{'revision':'b870604c6b6a68bf384eacd0d64dbad5','url':'/static/media/chaos-warriors.95dbc8c2e20911b0d0f50eec0ecc875b.svg'},{'revision':'91d821e6dc0f4175c3e48aeee3f3894f','url':'/static/media/dark-elves.9d17a9e44a1dc8c532b8e9c195bb9349.svg'},{'revision':'dc96aecec7571d30571e2063706e82dd','url':'/static/media/dwarfs.d1515ee28ee729eab0223051e8213f1e.svg'},{'revision':null,'url':'/static/media/fantasywelt_de.3e01438afdb1af5fda51.jpg'},{'revision':null,'url':'/static/media/fantasywelt_en.77ecbbfee64b462b792e.jpg'},{'revision':null,'url':'/static/media/forg3d.33b515df8b1916969003.jpg'},{'revision':'017cb73ecd5e1c49a7bf92d668412796','url':'/static/media/france.bf26b172fbb19d5193a5a0a28e69c4ba.svg'},{'revision':'7ff3f5d07e94e111d195a22d8bcf7b95','url':'/static/media/germany.d9625f93cc14fcc164d63bed94bec76e.svg'},{'revision':'e2b6e2998eed09ae6c395710c323cd98','url':'/static/media/greenskins.ea460b464152f5a93cc8550adc0a40fe.svg'},{'revision':'369c5d00afcc1c2915ba37d71d3bb7d1','url':'/static/media/high-elves.446a07c8c1502e6229747d52b78b99f5.svg'},{'revision':'48651b91715991f28ac67418cececd1f','url':'/static/media/italy.bb2033dcda58d584b313a60a850a36cb.svg'},{'revision':'e904785e6d98ffbe12bde4e5b53bcd76','url':'/static/media/lizardmen.1864459dda98e2341482261f911f4fbe.svg'},{'revision':null,'url':'/static/media/mwg-forge.6cc9d70962649b7d09e6.gif'},{'revision':'e48089e45b66dd85795dba907706589d','url':'/static/media/ogres.8b76905b48d6dc99e2717dc991ec120c.svg'},{'revision':'dfb064d1a4dc920fb2080ffc66864dd2','url':'/static/media/polen.0882b3e3846c9861e7150d74c94a7ee9.svg'},{'revision':'42e604b6a561cd97723dd53d7f663aa5','url':'/static/media/skaven.76cb48b7ee586866d155fdf90d147f72.svg'},{'revision':'068aa2fcf0a0174468e7b1f7d2916755','url':'/static/media/spain.fe46f7a778fdc34b4cb31895f52d2247.svg'},{'revision':'a5e5b505ebb8dac25094c6f0739333c0','url':'/static/media/symbol-defs.222641c52a06b3ef6cf07b79b7ad390b.svg'},{'revision':'b93e49ea1c0b3ada852f6b78ab17e75e','url':'/static/media/the-empire.d3620178330194a2108c5d16ee252a3f.svg'},{'revision':'564cf97e071b7df6fb11b900d58366bb','url':'/static/media/tomb-kings.9b30c54116cba0104b185153a5a522dd.svg'},{'revision':'addf813f3ea1de2b14db7dfef5de6588','url':'/static/media/usa.699fdb72b59257b15c15b5c08cfe4b3d.svg'},{'revision':'44a0f71a7fe4a7d570444e668b86eab6','url':'/static/media/vampire-counts.fd13d874116de00f9855c6d96285c1d0.svg'},{'revision':'fb0ecbab1934dade3426b665a874de44','url':'/static/media/wood-elves.2b1066f8b82dc538ef1c9848d30911ab.svg'}]),function(e){M||(C(e),M=!0)}(j);const B=new RegExp("/[^/?]+\\.[^/]+$");var $;H((e=>{let{request:t,url:s}=e;return"navigate"===t.mode&&(!s.pathname.startsWith("/_")&&!s.pathname.match(B))}),($="/index.html",N().createHandlerBoundToURL($))),H((e=>{let{url:t}=e;return t.origin===self.location.origin&&t.pathname.endsWith(".png")}),new class{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(this._cacheName=c(e.cacheName),this._plugins=e.plugins||[],e.plugins){const t=e.plugins.some((e=>!!e.cacheWillUpdate));this._plugins=t?e.plugins:[F,...e.plugins]}else this._plugins=[F];this._fetchOptions=e.fetchOptions,this._matchOptions=e.matchOptions}async handle(e){let{event:s,request:n}=e;"string"===typeof n&&(n=new Request(n));const a=this._getFromNetwork({request:n,event:s});let r,i=await p({cacheName:this._cacheName,request:n,event:s,matchOptions:this._matchOptions,plugins:this._plugins});if(i){if(s)try{s.waitUntil(a)}catch(r){0}}else{0;try{i=await a}catch(c){r=c}}if(!i)throw new t("no-response",{url:n.url,error:r});return i}async _getFromNetwork(e){let{request:t,event:s}=e;const n=await y({request:t,event:s,fetchOptions:this._fetchOptions,plugins:this._plugins}),a=d({cacheName:this._cacheName,request:t,response:n.clone(),event:s,plugins:this._plugins});if(s)try{s.waitUntil(a)}catch(r){0}return n}}({cacheName:"images",plugins:[new class{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};var t;this.cachedResponseWillBeUsed=async e=>{let{event:t,request:s,cacheName:n,cachedResponse:a}=e;if(!a)return null;const r=this._isResponseDateFresh(a),i=this._getCacheExpiration(n);g(i.expireEntries());const c=i.updateTimestamp(s.url);if(t)try{t.waitUntil(c)}catch(o){0}return r?a:null},this.cacheDidUpdate=async e=>{let{cacheName:t,request:s}=e;const n=this._getCacheExpiration(t);await n.updateTimestamp(s.url),await n.expireEntries()},this._config=e,this._maxAgeSeconds=e.maxAgeSeconds,this._cacheExpirations=new Map,e.purgeOnQuotaError&&(t=()=>this.deleteCacheAndMetadata(),n.add(t))}_getCacheExpiration(e){if(e===c())throw new t("expire-custom-caches-only");let s=this._cacheExpirations.get(e);return s||(s=new q(e,this._config),this._cacheExpirations.set(e,s)),s}_isResponseDateFresh(e){if(!this._maxAgeSeconds)return!0;const t=this._getDateHeaderTimestamp(e);if(null===t)return!0;return t>=Date.now()-1e3*this._maxAgeSeconds}_getDateHeaderTimestamp(e){if(!e.headers.has("date"))return null;const t=e.headers.get("date"),s=new Date(t).getTime();return isNaN(s)?null:s}async deleteCacheAndMetadata(){for(const[e,t]of this._cacheExpirations)await self.caches.delete(e),await t.delete();this._cacheExpirations=new Map}}({maxEntries:50})]})),self.addEventListener("message",(e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()})),self.addEventListener("activate",(e=>{e.waitUntil(caches.keys().then((e=>Promise.all(e.map((function(e){return caches.delete(e)}))))))}))})()})(); //# sourceMappingURL=service-worker.js.map \ No newline at end of file diff --git a/static/js/main.634f061e.js b/static/js/main.634f061e.js deleted file mode 100644 index 3efbbd34..00000000 --- a/static/js/main.634f061e.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! For license information please see main.634f061e.js.LICENSE.txt */ -(()=>{var e={604:(e,t,r)=>{var n,a;void 0===(a="function"===typeof(n=function(){"use strict";function e(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function t(e,t){for(var r=0;r{"use strict";var n=r(86),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return n.isMemo(e)?i:s[e.$$typeof]||a}s[n.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[n.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,p=Object.getOwnPropertySymbols,d=Object.getOwnPropertyDescriptor,m=Object.getPrototypeOf,g=Object.prototype;e.exports=function e(t,r,n){if("string"!==typeof r){if(g){var a=m(r);a&&a!==g&&e(t,a,n)}var i=u(r);p&&(i=i.concat(p(r)));for(var s=l(t),h=l(r),f=0;f{"use strict";e.exports=function(e,t,r,n,a,o,i,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[r,n,a,o,i,s],u=0;(l=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},123:e=>{"use strict";var t=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,n=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},r=0;r<10;r++)t["_"+String.fromCharCode(r)]=r;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var n={};return"abcdefghijklmnopqrst".split("").forEach((function(e){n[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},n)).join("")}catch(a){return!1}}()?Object.assign:function(e,a){for(var o,i,s=function(e){if(null===e||void 0===e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),l=1;l{var n=r(196);e.exports=m,e.exports.parse=o,e.exports.compile=function(e,t){return s(o(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=d;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var r,n=[],o=0,i=0,s="",u=t&&t.delimiter||"/";null!=(r=a.exec(e));){var p=r[0],d=r[1],m=r.index;if(s+=e.slice(i,m),i=m+p.length,d)s+=d[1];else{var g=e[i],h=r[2],f=r[3],b=r[4],y=r[5],v=r[6],S=r[7];s&&(n.push(s),s="");var w=null!=h&&null!=g&&g!==h,x="+"===v||"*"===v,k="?"===v||"*"===v,_=r[2]||u,T=b||y;n.push({name:f||o++,prefix:h||"",delimiter:_,optional:k,repeat:x,partial:w,asterisk:!!S,pattern:T?c(T):S?".*":"[^"+l(_)+"]+?"})}}return i{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},497:(e,t,r)=>{"use strict";var n=r(218);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,r,a,o,i){if(i!==n){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var r={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return r.PropTypes=r,r}},173:(e,t,r)=>{e.exports=r(497)()},218:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},730:(e,t,r)=>{"use strict";var n=r(43),a=r(123),o=r(853);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=1;r