From d9bfa7efc41535a6325ba1ff36aa92d06b2394e4 Mon Sep 17 00:00:00 2001 From: sladecraven Date: Tue, 24 Aug 2021 21:43:47 +0200 Subject: [PATCH] Auto-translat careers/skills.comp --- addon-register.js | 35 +- fr.json | 4 +- module.json | 2 +- modules/config-patch.js | 431 +++++------------- modules/discarded.txt | 366 +++++++++++++++ tables/{career.json => career.UNUSED} | 0 ...r_archives.json => career_archives.UNUSED} | 0 ...{career_gnome.json => career_gnome.UNUSED} | 0 8 files changed, 490 insertions(+), 348 deletions(-) create mode 100644 modules/discarded.txt rename tables/{career.json => career.UNUSED} (100%) rename tables/{career_archives.json => career_archives.UNUSED} (100%) rename tables/{career_gnome.json => career_gnome.UNUSED} (100%) diff --git a/addon-register.js b/addon-register.js index 2d442bc..3a9ae2a 100644 --- a/addon-register.js +++ b/addon-register.js @@ -110,7 +110,7 @@ const __create_translation_tables = async (compmod) => { * */ const __auto_patch_translation_journal_compendium = async (compmod) => { if (game.user.isGM) { - /*let compData = game.packs.get( "WH4-fr-translation.tables-des-traductions" ); + let compData = game.packs.get( "WH4-fr-translation.tables-des-traductions" ); compData.locked = false; let translEntries = await compData.getContent(); for (let entryData of translEntries ) { @@ -118,7 +118,7 @@ const __auto_patch_translation_journal_compendium = async (compmod) => { mydata.content = mydata.content.replace(/wfrp4e-content/g, compmod ); entryData.update( mydata ); } - compData.locked = true;*/ + compData.locked = true; } } @@ -164,29 +164,6 @@ const __check_fix_wrong_modules = ( chatFlag, patchFinished ) => { patch_core_tables( __dotr_tables ); patch_trade_gazeteer() } - - if ( name == "wfrp4e-rnhd" && module.active && game.wfrp4e.tables.career) { - game.wfrp4e.tables.career.name = "Carrières aléatoires"; - - /*FilePicker.browse("data", "modules/WH4-fr-translation/tables/").then(resp => { - for (var file of resp.files) { - if ( file.match("career_gnome.json") ) { - fetch(file).then(r=>r.json()).then(records => { - let mycareer = records; - game.wfrp4e.tables.career.columns = mycareer.columns; - for (let k=0; kLe module RHND a été detecté et automatiquement patché.", whisper: ChatMessage.getWhisperRecipients("GM") } ); - } if ( name == 'ogre-kingdom-wfrp4e' && module.active) { WH4FRPatchConfig.perform_ogrekingdom_patch(); @@ -202,8 +179,9 @@ const __check_fix_wrong_modules = ( chatFlag, patchFinished ) => { } }); - if (game.user.isGM && patchFinished) + if (game.user.isGM && patchFinished) { ChatMessage.create( { title: "Patch fini !", content: "Les modules WFRP4E ont été patchés avec succès. Vous pouvez y aller et que Shallya vous garde !", whisper: ChatMessage.getWhisperRecipients("GM") } ); + } } /************************************************************************************/ @@ -287,6 +265,7 @@ const __add_actors_translation = ( ) => { } } + /************************************************************************************/ /* Hook for specific command */ Hooks.on("chatMessage", (html, content, msg) => { @@ -308,7 +287,8 @@ Hooks.once('ready', () => { setTimeout( __check_fix_wrong_modules, 10000, true, false); setTimeout( __check_fix_wrong_modules, 20000, false, true); setTimeout( __add_actors_translation, 21000, false, true); - + + /* let compmod = "wfrp4e"; // Check various settings in the installation game.modules.forEach((module, name) => { @@ -321,6 +301,5 @@ Hooks.once('ready', () => { Auto-create translation journal tables __create_translation_tables(compmod); */ - //__create_translation_tables(compmod); } ); diff --git a/fr.json b/fr.json index 4470939..2bf6410 100644 --- a/fr.json +++ b/fr.json @@ -440,7 +440,9 @@ "ErrorSpeciesTalents": "Impossible d'ajouer le Talents pour les races", "Roll Characteristic": "Test de Caractéristique", "Infinite": "Infini", - + "any one": "Au choix", + "Sing": "Chant", + "ENTITY.Actor": "Acteur", "BROWSER.ItemCategories" : "Catégorie d'items", diff --git a/module.json b/module.json index 60389d6..b661449 100644 --- a/module.json +++ b/module.json @@ -2,7 +2,7 @@ "name": "WH4-fr-translation", "title": "WFRP4e - Core Module en français.", "description": "Traduction Française pour Warhammer v4.", - "version": "4.1.2", + "version": "4.1.3", "minimumCoreVersion" : "0.8.0", "compatibleCoreVersion": "0.8.8", "author": "LeRatierBretonnien", diff --git a/modules/config-patch.js b/modules/config-patch.js index 0eef097..a70d171 100644 --- a/modules/config-patch.js +++ b/modules/config-patch.js @@ -1,6 +1,112 @@ export class WH4FRPatchConfig { + /************************************************************************************/ + static translateSkillList( skillList) { + let newList = []; + for( let compName of skillList) { + let special = ""; + let newName = compName; + if ( compName.includes("(") && compName.includes(")") ) { // Then process specific skills name with (xxxx) inside + var re = /(.*) +\((.*)\)/i; + var res = re.exec( compName ); + compName = res[1].trim(); // Get the root skill name + special = " (" + game.i18n.localize( res[2].trim() ) + ")"; // And the special keyword + } + var compNameFR = game.babele.translate( 'wfrp4e-core.skills', { name: compName }, true ); + //console.log(">>>>> Skill ?", compName, special, compNameFR); + if (compNameFR.name != compName) { // Translation OK + newName = compNameFR.name + special; + } + newList.push(newName); + } + return newList; + } + + /************************************************************************************/ + static translateTalentList( talentList) { + let newList = []; + for( let talentLine of talentList) { + let special = ""; + let newName = talentLine; + if ( isNaN(talentLine) ) { + let subList = talentLine.split(','); + let newSubList = []; + for (let talentName of subList ) { + talentName = talentName.trim(); + let newName2 = talentName; + if ( talentName.includes("(") && talentName.includes(")") ) { // Then process specific skills name with (xxxx) inside + var re = /(.*) +\((.*)\)/i; + var res = re.exec( talentName ); + talentName = res[1].trim(); // Get the root skill name + special = " (" + game.i18n.localize( res[2].trim() ) + ")"; // And the special keyword + } + var talentNameFR = game.babele.translate( 'wfrp4e-core.talents', { name: talentName }, true ); + //console.log(">>>>> Talent ?", talentName, special, talentNameFR); + if (talentNameFR.name != talentName) { // Translation OK + newName2 = talentNameFR.name + special; + } + newSubList.push(newName2); + } + newName = newSubList.join(', '); + } + newList.push(newName); + } + return newList; + } + + /************************************************************************************/ + static patch_subspecies( ) { + for ( let speciesName in game.wfrp4e.config.subspecies) { + let subspeciesList = game.wfrp4e.config.subspecies[speciesName]; + for ( let subspeciesName in subspeciesList) { + let subspecies = subspeciesList[subspeciesName]; + //console.log("Subpecies translate....", subspecies); + if ( subspecies.skills) { + subspecies.skills = this.translateSkillList(subspecies.skills); + } + if ( subspecies.talents) { + subspecies.talents = this.translateTalentList(subspecies.talents); + } + } + } + } + + /************************************************************************************/ + static patch_species_skills( ) { + for (let speciesName in game.wfrp4e.config.speciesSkills) { + let speciesComp = game.wfrp4e.config.speciesSkills[speciesName]; + game.wfrp4e.config.speciesSkills[speciesName] = this.translateSkillList( speciesComp ) + } + } + + /************************************************************************************/ + static patch_species_talents( ) { + for (let speciesName in game.wfrp4e.config.speciesTalents) { + let speciesTalents = game.wfrp4e.config.speciesTalents[speciesName]; + game.wfrp4e.config.speciesTalents[speciesName] = this.translateTalentList( speciesTalents); + } + } + + /************************************************************************************/ + static patch_career() { + for( let row of game.wfrp4e.tables.career.rows) { + for ( let key in row) { + if (key != "range") { + if ( row[key].name == 'Slayer' ) { + row[key].name = "Tueur Nains"; + } else if ( row[key].name == 'Duelist' ) { + row[key].name = "Duelliste"; + //console.log(">>>>> Career ?", key, row[key].name, career_fr.name ); + } else { + var career_fr = game.babele.translate( 'wfrp4e-core.careers', {name: row[key].name}, true ); + row[key].name = career_fr.name; + } + } + } + } + } + /************************************************************************************/ static perform_patch() { @@ -21,301 +127,18 @@ export class WH4FRPatchConfig { "doigts de fée": "dex", "guerrier né": "ws" } - game.wfrp4e.config.speciesSkills["human"] = [ - "Soins aux animaux", - "Charme", - "Calme", - "Evaluation", - "Ragot", - "Marchandage", - "Langue (Bretonnien)", - "Langue (Wastelander)", - "Commandement", - "Savoir (Reikland)", - "Corps à corps (Base)", - "Projectiles (Arc)" - ]; - game.wfrp4e.config.speciesSkills["dwarf"] = [ - "Résistance à l'alcool", - "Calme", - "Résistance", - "Divertissement (Raconter)", - "Evaluation", - "Intimidation", - "Langue (Khazalid)", - "Savoir (Nains)", - "Savoir (Geologie)", - "Savoir (Metallurgie)", - "Corps à corps (Base)", - "Métier (Au choix)" - ]; - game.wfrp4e.config.speciesSkills["halfling"] = [ - "Charme", - "Résistance à l'alcool", - "Esquive", - "Pari", - "Marchandage", - "Intuition", - "Langue (Mootland)", - "Savoir (Reikland)", - "Perception", - "Escamotage", - "Discrétion (Au choix)", - "Métier (Cuisinier)" - ]; - game.wfrp4e.config.speciesSkills["helf"] = [ - "Calme", - "Divertissement (Chant)", - "Evaluation", - "Langue (Eltharin)", - "Commandement", - "Corps à corps (Base)", - "Orientation", - "Perception", - "Musicien (Au choix)", - "Projectiles (Arc)", - "Voile", - "Natation" - ]; - - game.wfrp4e.config.speciesSkills["welf"] = [ - "Athlétisme", - "Escalade", - "Résistance", - "Divertissement (Chant)", - "Intimidation", - "Langue (Eltharin)", - "Corps à corps (Base)", - "Survie en extérieur", - "Perception", - "Projectiles (Arc)", - "Discrétion (Rural)", - "Pistage" - ]; - game.wfrp4e.config.speciesTalents["human"] = [ - "Destinée", - "Affable, Perspicace", - 3 - ] - game.wfrp4e.config.speciesTalents["dwarf"] = [ - "Résistance à la Magie", - "Vision Nocturne", - "Lire/Ecrire, Impitoyable", - "Déterminé, Obstiné", - "Costaud", - 0 - ] - game.wfrp4e.config.speciesTalents["halfling"] = [ - "Sens Aiguisé (Gout)", - "Vision Nocturne", - "Résistant (Chaos)", - "Petit", - 2 - ]; - game.wfrp4e.config.speciesTalents["helf"] = [ - "Sens Aiguisé (Vue)", - "Imperturbable, Perspicace", - "Vision Nocturne", - "Seconde Vue, Sixième Sens", - "Lire/Ecrire", - 0 - ] - game.wfrp4e.config.speciesTalents["welf"] = [ - "Sens Aiguisé (Vue)", - "Dur à cuire, Seconde Vue", - "Vision Nocturne", - "Nomade", - "Lire/Ecrire, Très Résistant", - 0 - ] + + game.wfrp4e.config.species["human"] = "Humain"; game.wfrp4e.config.species["dwarf"] = "Nain"; game.wfrp4e.config.species["halfling"] = "Halfling"; game.wfrp4e.config.species["helf"] = "Haut Elfe"; game.wfrp4e.config.species["welf"] = "Elfe Sylvain"; - game.wfrp4e.config.subspecies["human"]["reiklander"] = { - name: "Reiklander", - skills: [ - "Soins aux animaux", - "Charme", - "Calme", - "Evaluation", - "Ragot", - "Marchandage", - "Langue (Bretonnien)", - "Langue (Wastelander)", - "Commandement", - "Savoir (Reikland)", - "Corps à corps (Base)", - "Projectiles (Arc)" - ], - talents: [ - "Destinée", - "Affable, Perspicace", - 3 - ] - } - - if (game.wfrp4e.config.subspecies["welf"]["harioth"]) { // Archives Empire - game.wfrp4e.config.subspecies["welf"]["harioth"] = { - name: "Harioth", - talents: [ - "Sens Aiguisé (Vue)", - "Dur à cuire, Seconde Vue", - "Vision Nocturne", - "Lire/Ecrire, Très Résistant", - "Nomade", - "Youngblood", - 0 - ] - } - game.wfrp4e.config.subspecies["halfling"]["ashfield"] = { - name: "Ashfield", - skills: [ - "Charme", - "Résistance à l'alcool", - "Marchandage", - "Savoir (Reikland)", - "Escamotage", - "Discrétion (Au choix)", - "Métier (Cuisinier)", - "Calme", - "Intuition", - "Langue (Mootish)", - "Projectiles (Au choix)" - ], - talents: [ - "Sens Aiguisé (Goût)", - "Vision Nocturne", - "Résistant (Chaos)", - "Petit", - "Sens Aiguisé (Vue), Etiquette (Soldats)", - 1 - ] - } - game.wfrp4e.config.subspecies.halfling["brambledown"] = { - name: "Brambledown", - skills: [ - "Charme", - "Résistance à l'alcool", - "Marchandage", - "Savoir (Reikland)", - "Escamotage", - "Discrétion (Au choix)", - "Métier (Cuisinier)", - "Langue (Mootish) ", - "Orientation", - "Survie en extérieur ", - "Natation" - ], - talents: [ - "Sens Aiguisé (Goût)", - "Vision Nocturne", - "Résistant (Chaos)", - "Petit", - "Sociable, Voyageur aguerri", - 1 - ] - } - game.wfrp4e.config.subspecies.halfling["brandysnap"] = { - name: "Brandysnap", - skills: [ - "Charme", - "Résistance à l'alcool", - "Marchandage", - "Savoir (Reikland)", - "Escamotage", - "Discrétion (Au choix)", - "Métier (Cuisinier)", - "Soins aux animaux", - "Pari", - "Langue (Mootish)", - "Métier (Herboriste)" - ], - talents: [ - "Sens Aiguisé (Goût)", - "Vision Nocturne", - "Résistant (Chaos)", - "Petit", - "Maître Artisan (Fermier), Costaud", - 1 - ] - } - game.wfrp4e.config.subspecies.halfling["hayfoot"] = { - name: "Hayfoot", - skills: [ - "Charme", - "Résistance à l'alcool", - "Marchandage", - "Savoir (Reikland)", - "Escamotage", - "Discrétion (Au choix)", - "Métier (Cuisinier)", - "Gamble", - "Pari", - "Evaluation", - "Langue (Mootish)" - ], - talents: [ - "Sens Aiguisé (Goût)", - "Vision Nocturne", - "Résistant (Chaos)", - "Petit", - "Négociateur, Etiquette (Guildes)", - 1 - ] - } - game.wfrp4e.config.subspecies.halfling["hollyfoot"] = { - name: "Hollyfoot", - skills: [ - "Charme", - "Résistance à l'alcool", - "Marchandage", - "Savoir (Reikland)", - "Escamotage", - "Discrétion (Au choix)", - "Métier (Cuisinier)", - "Subornation", - "Marchandage", - "Ragot", - "Langue (Mootish)" - ], - talents: [ - "Sens Aiguisé (Goût)", - "Vision Nocturne", - "Résistant (Chaos)", - "Petit", - "Maître Artisan (Au choix), Doigts de fée", - 1 - ] - } - game.wfrp4e.config.subspecies.halfling["hayfoot—hollyfoot"] = { - name: "Hayfoot—Hollyfoot", - skills: [ - "Charme", - "Résistance à l'alcool", - "Marchandage", - "Savoir (Reikland)", - "Escamotage", - "Discrétion (Au choix)", - "Métier (Cuisinier)", - "Subornation", - "Marchandage", - "Ragot", - "Langue (Mootish)" - ], - talents: [ - "Sens Aiguisé (Goût)", - "Vision Nocturne", - "Résistant (Chaos)", - "Petit", - "Ergoteur, Numismate", - 1 - ] - } - - } + this.patch_species_skills(); + this.patch_species_talents(); + this.patch_subspecies(); + this.patch_career(); game.wfrp4e.config.conditionScripts = { "ablaze": async function (actor) { @@ -1852,32 +1675,4 @@ export class WH4FRPatchConfig { ] } - - /************************************************************************************/ - static perform_rnhd_patch() { - game.wfrp4e.config.species['gnome'] = 'Gnome'; - game.wfrp4e.config.speciesSkills["gnome"] = [ - "Focalisation (Ulgu)", - "Charme", - "Résistance à l'alcool", - "Esquive", - "Divertissement (Au choix)", - "Ragot", - "Marchandage", - "Langue (Ghassally)", - "Langue (Magick)", - "Langue (Wastelander)", - "Survie en extérieur", - "Discrétion (Au choix)" - ]; - game.wfrp4e.config.speciesTalents["gnome"] = [ - "Insignifiant, Imprégné avec Uglu", - "Chanceux, Imitation", - "Vision Nocturne", - "Pêcheur, Lire/Ecrire", - "Seconde Vue, Sixième Sens", - "Petit", - 0 - ]; - } -} +} \ No newline at end of file diff --git a/modules/discarded.txt b/modules/discarded.txt new file mode 100644 index 0000000..a6a5266 --- /dev/null +++ b/modules/discarded.txt @@ -0,0 +1,366 @@ + /* + game.wfrp4e.config.speciesSkills["human"] = [ + "Soins aux animaux", + "Charme", + "Calme", + "Evaluation", + "Ragot", + "Marchandage", + "Langue (Bretonnien)", + "Langue (Wastelander)", + "Commandement", + "Savoir (Reikland)", + "Corps à corps (Base)", + "Projectiles (Arc)" + ]; + game.wfrp4e.config.speciesSkills["dwarf"] = [ + "Résistance à l'alcool", + "Calme", + "Résistance", + "Divertissement (Raconter)", + "Evaluation", + "Intimidation", + "Langue (Khazalid)", + "Savoir (Nains)", + "Savoir (Geologie)", + "Savoir (Metallurgie)", + "Corps à corps (Base)", + "Métier (Au choix)" + ]; + game.wfrp4e.config.speciesSkills["halfling"] = [ + "Charme", + "Résistance à l'alcool", + "Esquive", + "Pari", + "Marchandage", + "Intuition", + "Langue (Mootland)", + "Savoir (Reikland)", + "Perception", + "Escamotage", + "Discrétion (Au choix)", + "Métier (Cuisinier)" + ]; + game.wfrp4e.config.speciesSkills["helf"] = [ + "Calme", + "Divertissement (Chant)", + "Evaluation", + "Langue (Eltharin)", + "Commandement", + "Corps à corps (Base)", + "Orientation", + "Perception", + "Musicien (Au choix)", + "Projectiles (Arc)", + "Voile", + "Natation" + ]; + + game.wfrp4e.config.speciesSkills["welf"] = [ + "Athlétisme", + "Escalade", + "Résistance", + "Divertissement (Chant)", + "Intimidation", + "Langue (Eltharin)", + "Corps à corps (Base)", + "Survie en extérieur", + "Perception", + "Projectiles (Arc)", + "Discrétion (Rural)", + "Pistage" + ];*/ + game.wfrp4e.config.speciesTalents["human"] = [ + "Destinée", + "Affable, Perspicace", + 3 + ] + game.wfrp4e.config.speciesTalents["dwarf"] = [ + "Résistance à la Magie", + "Vision Nocturne", + "Lire/Ecrire, Impitoyable", + "Déterminé, Obstiné", + "Costaud", + 0 + ] + game.wfrp4e.config.speciesTalents["halfling"] = [ + "Sens Aiguisé (Gout)", + "Vision Nocturne", + "Résistant (Chaos)", + "Petit", + 2 + ]; + game.wfrp4e.config.speciesTalents["helf"] = [ + "Sens Aiguisé (Vue)", + "Imperturbable, Perspicace", + "Vision Nocturne", + "Seconde Vue, Sixième Sens", + "Lire/Ecrire", + 0 + ] + game.wfrp4e.config.speciesTalents["welf"] = [ + "Sens Aiguisé (Vue)", + "Dur à cuire, Seconde Vue", + "Vision Nocturne", + "Nomade", + "Lire/Ecrire, Très Résistant", + 0 + ] + + /************************************************************************************/ + static perform_rnhd_patch() { + game.wfrp4e.config.species['gnome'] = 'Gnome'; + game.wfrp4e.config.speciesSkills["gnome"] = [ + "Focalisation (Ulgu)", + "Charme", + "Résistance à l'alcool", + "Esquive", + "Divertissement (Au choix)", + "Ragot", + "Marchandage", + "Langue (Ghassally)", + "Langue (Magick)", + "Langue (Wastelander)", + "Survie en extérieur", + "Discrétion (Au choix)" + ]; + game.wfrp4e.config.speciesTalents["gnome"] = [ + "Insignifiant, Imprégné avec Uglu", + "Chanceux, Imitation", + "Vision Nocturne", + "Pêcheur, Lire/Ecrire", + "Seconde Vue, Sixième Sens", + "Petit", + 0 + ]; + } +} + +game.wfrp4e.config.subspecies["human"]["reiklander"] = { + name: "Reiklander", + skills: [ + "Soins aux animaux", + "Charme", + "Calme", + "Evaluation", + "Ragot", + "Marchandage", + "Langue (Bretonnien)", + "Langue (Wastelander)", + "Commandement", + "Savoir (Reikland)", + "Corps à corps (Base)", + "Projectiles (Arc)" + ], + talents: [ + "Destinée", + "Affable, Perspicace", + 3 + ] +} + +if (game.wfrp4e.config.subspecies["welf"]["harioth"]) { // Archives Empire + game.wfrp4e.config.subspecies["welf"]["harioth"] = { + name: "Harioth", + talents: [ + "Sens Aiguisé (Vue)", + "Dur à cuire, Seconde Vue", + "Vision Nocturne", + "Lire/Ecrire, Très Résistant", + "Nomade", + "Youngblood", + 0 + ] + } + game.wfrp4e.config.subspecies["halfling"]["ashfield"] = { + name: "Ashfield", + skills: [ + "Charme", + "Résistance à l'alcool", + "Marchandage", + "Savoir (Reikland)", + "Escamotage", + "Discrétion (Au choix)", + "Métier (Cuisinier)", + "Calme", + "Intuition", + "Langue (Mootish)", + "Projectiles (Au choix)" + ], + talents: [ + "Sens Aiguisé (Goût)", + "Vision Nocturne", + "Résistant (Chaos)", + "Petit", + "Sens Aiguisé (Vue), Etiquette (Soldats)", + 1 + ] + } + game.wfrp4e.config.subspecies.halfling["brambledown"] = { + name: "Brambledown", + skills: [ + "Charme", + "Résistance à l'alcool", + "Marchandage", + "Savoir (Reikland)", + "Escamotage", + "Discrétion (Au choix)", + "Métier (Cuisinier)", + "Langue (Mootish) ", + "Orientation", + "Survie en extérieur ", + "Natation" + ], + talents: [ + "Sens Aiguisé (Goût)", + "Vision Nocturne", + "Résistant (Chaos)", + "Petit", + "Sociable, Voyageur aguerri", + 1 + ] + } + game.wfrp4e.config.subspecies.halfling["brandysnap"] = { + name: "Brandysnap", + skills: [ + "Charme", + "Résistance à l'alcool", + "Marchandage", + "Savoir (Reikland)", + "Escamotage", + "Discrétion (Au choix)", + "Métier (Cuisinier)", + "Soins aux animaux", + "Pari", + "Langue (Mootish)", + "Métier (Herboriste)" + ], + talents: [ + "Sens Aiguisé (Goût)", + "Vision Nocturne", + "Résistant (Chaos)", + "Petit", + "Maître Artisan (Fermier), Costaud", + 1 + ] + } + game.wfrp4e.config.subspecies.halfling["hayfoot"] = { + name: "Hayfoot", + skills: [ + "Charme", + "Résistance à l'alcool", + "Marchandage", + "Savoir (Reikland)", + "Escamotage", + "Discrétion (Au choix)", + "Métier (Cuisinier)", + "Gamble", + "Pari", + "Evaluation", + "Langue (Mootish)" + ], + talents: [ + "Sens Aiguisé (Goût)", + "Vision Nocturne", + "Résistant (Chaos)", + "Petit", + "Négociateur, Etiquette (Guildes)", + 1 + ] + } + game.wfrp4e.config.subspecies.halfling["hollyfoot"] = { + name: "Hollyfoot", + skills: [ + "Charme", + "Résistance à l'alcool", + "Marchandage", + "Savoir (Reikland)", + "Escamotage", + "Discrétion (Au choix)", + "Métier (Cuisinier)", + "Subornation", + "Marchandage", + "Ragot", + "Langue (Mootish)" + ], + talents: [ + "Sens Aiguisé (Goût)", + "Vision Nocturne", + "Résistant (Chaos)", + "Petit", + "Maître Artisan (Au choix), Doigts de fée", + 1 + ] + } + game.wfrp4e.config.subspecies.halfling["hayfoot—hollyfoot"] = { + name: "Hayfoot—Hollyfoot", + skills: [ + "Charme", + "Résistance à l'alcool", + "Marchandage", + "Savoir (Reikland)", + "Escamotage", + "Discrétion (Au choix)", + "Métier (Cuisinier)", + "Subornation", + "Marchandage", + "Ragot", + "Langue (Mootish)" + ], + talents: [ + "Sens Aiguisé (Goût)", + "Vision Nocturne", + "Résistant (Chaos)", + "Petit", + "Ergoteur, Numismate", + 1 + ] + } + game.wfrp4e.config.subspecies.halfling["lostpockets"] = { + name: "Lostpockets", + skills: [ + "Charme", + "Résistance à l'alcool", + "Marchandage", + "Savoir (Reikland)", + "Escamotage", + "Discrétion (Au choix)", + "Métier (Cuisinier)", + "Résistance", + "Pari", + "Ragot", + "Intuition" + ], + talents: [ + "Sens Aiguisé (Goût)", + "Vision Nocturne", + "Résistant (Chaos)", + "Petit", + "Dur à cuire, Brouet", + 1 + ] + } + game.wfrp4e.config.subspecies.halfling["lowhaven"] = { + name: "Lowhaven", + skills: [ + "Charme", + "Résistance à l'alcool", + "Marchandage", + "Savoir (Reikland)", + "Escamotage", + "Discrétion (Au choix)", + "Métier (Cuisinier)", + "Subornation", + "Marchandage", + "Intimidation", + "Langue (Mootish)" + ], + talents: [ + "Sens Aiguisé (Goût)", + "Vision Nocturne", + "Résistant (Chaos)", + "Petit", + "Criminel, Etiquette (Criminels ou Guildes)", + 1 + ] + } diff --git a/tables/career.json b/tables/career.UNUSED similarity index 100% rename from tables/career.json rename to tables/career.UNUSED diff --git a/tables/career_archives.json b/tables/career_archives.UNUSED similarity index 100% rename from tables/career_archives.json rename to tables/career_archives.UNUSED diff --git a/tables/career_gnome.json b/tables/career_gnome.UNUSED similarity index 100% rename from tables/career_gnome.json rename to tables/career_gnome.UNUSED