Compare commits

...

5 Commits

1291 changed files with 10204 additions and 541 deletions

View File

@ -325,6 +325,7 @@ const __add_actors_translation = () => {
metadata.collection != "wfrp4e-altdorf.actors" &&
metadata.collection != "wfrp4e-rnhd.actors" &&
metadata.collection != "wfrp4e-dotr.actors" &&
metadata.collection != "wfrp4e-eis.actors" &&
metadata.collection != "wfrp4e-pbtt.actors" &&
metadata.collection != "wfrp4e-middenheim.actors" &&
metadata.documentName === 'Actor') {

View File

@ -1,4 +1,5 @@
/************************************************************************************/
import loadScripts from "./loadScripts.js";
import statParserFR from "./modules/import-stat-2.js";
/************************************************************************************/
@ -21,6 +22,82 @@ const vo_conditions = {
"defeated": "Defeated"
}
const __SELECT_BONUS_PREFIX_D = {
"initiative": 1,
"intelligence": 1,
"endurance": 1,
"agilite": 1,
"agilité": 1
}
/************************************************************************************/
export class WFRP4FrTranslation {
static parseSpellContent(spell) {
if (spell.system.range?.value) {
spell.system.range.value = this.processSpellContent(spell.system.range.value)
}
if (spell.system.damage?.value) {
spell.system.damage.value = this.processSpellContent(spell.system.damage.value)
}
if (spell.system.duration?.value) {
spell.system.duration.value = this.processSpellContent(spell.system.duration?.value)
}
if ( spell.system.range?.value) {
spell.system.range.value = this.processSpellContent(spell.system.range?.value)
}
if (spell.system.target?.value ) {
spell.system.target.value = this.processSpellContent(spell.system.target?.value)
}
}
static processSpellContent(value) {
//console.log("Spell duration/range/damage/target :", value);
if (value == "") return ""; // Hop !
if (value == "Touch") return "Contact"; // Hop !
if (value == "You") return "Vous"; // Hop !
if (value == "Instant") return "Instantané"; // Hop !
let translw = value;
let re = /(.*)\s+[Bb]onus\s*(\w*)/i;
let res = re.exec(value);
//console.log("RES1:", res);
let unit = "";
if (res) { // Test "<charac> Bonus <unit>" pattern
if (res[1]) { // We have char name, then convert it
translw = game.i18n.localize(res[1].trim());
let bonusPrefix = (translw.toLowerCase() in __SELECT_BONUS_PREFIX_D) ? "Bonus d'" : "Bonus de ";
translw = bonusPrefix + translw
}
unit = res[2];
} else {
re = /(\d+) (\w+)/i;
res = re.exec(value);
if (res) { // Test : "<number> <unit>" pattern
translw = res[1];
unit = res[2];
} else { // Test
re = /(\w+) (\w+)/i;
res = re.exec(value);
if (res) { // Test : "<charac> <unit>" pattern
translw = game.i18n.localize(res[1].trim());
unit = res[2];
}
}
}
if (unit == "hour") unit = "heure";
if (unit == "hours") unit = "heures";
if (unit == "days") unit = "jours";
if (unit == "yard") unit = "mètre";
if (unit == "yards") unit = "mètres";
if (unit == "Bonus") { // Another weird management
console.log("Translating bonus", unit);
translw = "Bonus de " + translw;
} else {
translw += " " + unit;
}
return translw;
}
}
/************************************************************************************/
Hooks.once('init', () => {
@ -37,8 +114,11 @@ Hooks.once('init', () => {
}
game.wfrp4e.apps.StatBlockParser.parseStatBlock = async function (statString, type = "npc") {
console.log("PARSER FR DONE");
return statParserFR(statString, type);
}
loadScripts();
/*---------------------------------------------------------------------*/
/* DEPRECATED : game.wfrp4e.entities.ItemWfrp4e.prototype.computeSpellDamage = function (formula, isMagicMissile) {
@ -259,7 +339,7 @@ Hooks.once('init', () => {
console.log("Search talent name:", compData.metadata.id, s1, translw);
if (translw && translw != s1) {
transl = translw + " (" + subword + ")";
}
}
}
}
talents_list[i] = transl;
@ -350,6 +430,7 @@ Hooks.once('init', () => {
let trait_fr = game.babele.translate(compData.metadata.id, { name: name_en }, true)
if (trait_fr?.system) {
//DEBUG : console.log(">>>>> Prayer ?", name_en, special, trait_fr.name );
WFRP4FrTranslation.parseSpellContent(trait_en)
trait_fr.name = trait_fr.name || name_en
trait_en.name = trait_fr.name + special;
if (trait_fr.system?.description?.value) {
@ -362,9 +443,10 @@ Hooks.once('init', () => {
let validCompendiums = game.wfrp4e.tags.getPacksWithTag("spell")
for (let compData of validCompendiums) {
let trait_fr = game.babele.translate(compData.metadata.id, { name: name_en }, true)
if (trait_fr?.system) {
if (trait_fr?.system) {
//DEBUG : console.log(">>>>> Spell ?", name_en, special, trait_fr);
WFRP4FrTranslation.parseSpellContent(trait_en)
trait_fr.name = trait_fr.name || name_en
//DEBUG : console.log(">>>>> Spell ?", name_en, special, trait_fr.name );
trait_en.name = trait_fr.name + special;
if (trait_fr.system?.description?.value) {
trait_en.system.description.value = trait_fr.system.description.value;
@ -536,50 +618,9 @@ Hooks.once('init', () => {
},
// Auto-translate duration
"spells_duration_range_target_damage": (value) => {
//console.log("Spell duration/range/damage/target :", value);
if (value == "") return ""; // Hop !
if (value == "Touch") return "Contact"; // Hop !
if (value == "You") return "Vous"; // Hop !
if (value == "Instant") return "Instantané"; // Hop !
let translw = value;
let re = /(.*) Bonus (\w*)/i;
let res = re.exec(value);
//console.log("RES1:", res);
let unit = "";
if (res) { // Test "<charac> Bonus <unit>" pattern
if (res[1]) { // We have char name, then convert it
translw = "Bonus de " + game.i18n.localize(res[1].trim());
}
unit = res[2];
} else {
re = /(\d+) (\w+)/i;
res = re.exec(value);
if (res) { // Test : "<number> <unit>" pattern
translw = res[1];
unit = res[2];
} else { // Test
re = /(\w+) (\w+)/i;
res = re.exec(value);
if (res) { // Test : "<charac> <unit>" pattern
translw = game.i18n.localize(res[1].trim());
unit = res[2];
}
}
}
if (unit == "hour") unit = "heure";
if (unit == "hours") unit = "heures";
if (unit == "days") unit = "jours";
if (unit == "yard") unit = "mètre";
if (unit == "yards") unit = "mètres";
if (unit == "Bonus") { // Another weird management
translw = "Bonus de " + translw;
} else {
translw += " " + unit;
}
//console.log("Spell duration/range/damage/target :", value, translw);
return translw;
return WFRP4FrTranslation.processSpellContent(value);
}
});
});
}
});
@ -588,10 +629,10 @@ Hooks.once('init', () => {
/*---------------------------------------------------------------------*/
Hooks.once('ready', () => {
import("https://www.uberwald.me/fvtt_appcount/count-class-ready.js").then(moduleCounter=>{
import("https://www.uberwald.me/fvtt_appcount/count-class-ready.js").then(moduleCounter => {
console.log("ClassCounter loaded", moduleCounter)
moduleCounter.ClassCounter.registerUsageCount("wh4-fr-translation")
}).catch(err=>
}).catch(err =>
console.log("No stats available, giving up.")
)

View File

@ -2,8 +2,9 @@ Fini :
F Cheminade -> Items UA1 -> DONE
Faytoto -> acteurs UA1
Dwim -> RNHD actors
Highcrown -> Acteurs Ennemi Ombre -> DONE
En cours :
Highcrown -> Acteurs Ennemi Ombre (27/03/24 :en cours)
KeylaKhaine -> Acteurs Mort sur le Reik (27/03/24 :en cours)
Kyllian -> Acteurs Middenheim (15/05/24, en cours)

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,9 @@
{
"label": "Acteurs (Ennemi dans l'Ombre)",
"folders": {
"Adventure": "Aventure",
"Companion": "Compagnon"
},
"mapping": {
"description": "system.details.biography.value",
"gmnotes": "system.details.gmnotes.value",
@ -11,10 +15,6 @@
"path": "system.characteristics",
"converter": "npc_characteristics"
}
},
"folder": {
"Adventure": "Aventure",
"Companion": "Compagnon"
},
"entries": {
"'Crusher' Braugen": {
@ -46,8 +46,8 @@
"description": ""
},
"Amoeba": {
"name": "Amoeba",
"description": "<section id=\"secret-073j4Dwjkc1ajOCf\" class=\"secret\"><p>Amoebae are formless masses of jelly-like slime. Commonly called jellies or blobs, Amoebae are normally found in the sewers, swamplands, and riverlands of the Old World, feeding on anything organic they encounter, be it flora or fauna. They are drawn to body heat and disturbances in the water when hunting, and can send out tentacle-like pseudopods to drag opponents into their bodies for digestion. </p><p>They are completely mindless, simply following their instincts wherever that leads them.</p><p>Organic material is digested once absorbed into an Amoebas body. Tough to digest material, such as bone and cartilage, can float inside their bodies for days, and sometimes weeks, betraying any recent victims. Amoebae cannot digest metals or minerals, which pass through their bodies unaffected.</p><p>It is recommended to use the supplied Characteristics for any Amoeba encountered in the sewers to ensure its not a particularly dangerous opponent. If you feel the party could do with facing a greater threat, use some of the Optional Traits or the @UUID[Compendium.wfrp4e-core.journals.3ZynTGhFpgwv6l1n.JournalEntryPage.UyUu4g8GQRp16paM#generic-creature-traits]{Generic Creature Traits}.</p></section>"
"name": "Amibe",
"description": "<section id=\"secret-073j4Dwjkc1ajOCf\" class=\"secret\"><p>Les Amibes sont des masses informes et gélatineuses. Communément appelées \"gelées\" ou \"blob\", on les trouve habituellement dans les égouts, les marécages et les rivages du Vieux Monde, se nourrissant de tout ce qui est organique qu'il s'agisse de flore ou de faune. Ils sont attirés par la chaleur corporelle et les perturbations de l'eau lorsqu'ils chassent, et peuvent envoyer des pseudopodes en forme de tentacules pour attirer leurs adversaires dans leur corps. </p><p> Elles sont complètement décérébrés et se contentent de suivre aveuglément leur instinct.</p><p> La matière organique est digérée une fois dans le corps des amibes. Les matériaux plus difficiles à digérer, comme les os et les cartilages, peuvent flotter dans leur corps pendant des jours et parfois des semaines, révélent l'existence d'une victime récente. Les amibes ne peuvent pas digérer les métaux et les minéraux, qui passent à travers leur corps sans être affectés. Il est conseillé d'utiliser les Caractéristiques fournies pour toute Amibe rencontrée dans les égouts, afin d'être sûr qu'il ne s'agit pas d'un adversaire trop puissant. Si vous avez l'impression que le groupe pourrait affronter un adversaire plus dangereux, utilisez certains des Traits Facultatifs ou les @UUID[Compendium.wfrp4e-core.journals.3ZynTGhFpgwv6l1n.JournalEntryPage.UyUu4g8GQRp16paM#generic-creature-traits]{Traits Standards de Créatures}.</p></section>"
},
"Anida Pflaster": {
"name": "Anida Pflaster",
@ -61,12 +61,12 @@
"name": "Annalisa Kessler",
"description": ""
},
"Arwin (Guard)": {
"name": "Arwin (Guard)",
"description": "<section id=\"secret-4UorWorAR19Lv3BK\" class=\"secret\"><p>@UUID[JournalEntry.IjGUv51IPhj79Wxt.JournalEntryPage.E8nLFVw3Mmc024dc]{The Boatman Inn}</p><p><span class=\"fontstyle0\">The two nobles are accompanied by four bodyguards. Hulking brutes, each is over 6ft tall and heavily muscled. They rarely speak, content to lurk near their masters, ever-ready to intervene should anyone dare to talk to or even lay hands upon the pampered jewels of the Reiklands nobility. If pressed to talk, their growling accents are typical of the lowest of low-lifes from @UUID[Compendium.wfrp4e-altdorf.journals.85UN6bKPTfGEBtBb]{Altdorf s East End}.</span> </p></section>"
"Arwin (Garde)": {
"name": "Arwin (Garde)",
"description": "<section id=\"secret-4UorWorAR19Lv3BK\" class=\"secret\"><p>@UUID[JournalEntry.IjGUv51IPhj79Wxt.JournalEntryPage.E8nLFVw3Mmc024dc]{L'auberge du Batelier}</p><p><span class=\"fontstyle0\">Les deux nobles sont accompagnés par quatre gardes du corps. Ce sont des brutes musculeuses de plus d'1m80. Ils parlent peu, et se content de se tenir à l'affüt près de leurs maîtres, prêts à intervenir si quelqu'un ose parler ou poser la main sur ces joyaux dorlotés par la noblesse du Reikland. S'ils sont contraints à parler, leur accent est typique des pires bas-fonds des  @UUID[Compendium.wfrp4e-altdorf.journals.85UN6bKPTfGEBtBb]{Quartiers est d'Altdorf}.</span> </p></section>"
},
"Baldwin (Road Warden)": {
"name": "Baldwin (Road Warden)",
"name": "Baldwin (Patrouilleur Routier)",
"description": ""
},
"Benbow": {
@ -75,47 +75,47 @@
},
"Bengt": {
"name": "Bengt",
"description": "<section id=\"secret-wWIZOUYhy0aF14MZ\" class=\"secret\"><p><span class=\"fontstyle0\">@UUID[Actor.rYlDGJx20M72PydJ]{Bengt}, @UUID[Actor.r5NgPWpDHpjRkGQM]{Gurt}, and @UUID[Actor.BLrqbYcSiVvWnmws]{Willie}, the three thugs hired by Adolphus, do occasional work on the @UUID[JournalEntry.tT80gcSmeK5oO5C2.JournalEntryPage.l2kZtajL8d3RlPqO]{Weissbruck} wharves as labourers. They are not particularly bright or loyal, and each has a rough lowerclass Reiklander accent. If captured by the Characters, they can be persuaded to reveal @UUID[Actor.echM0Sjy5xpt5KAQ]{Adolphuss} plan with an </span><span class=\"fontstyle2\"><strong>Easy (+40) Intimidate</strong> </span><span class=\"fontstyle0\">or </span><strong>Bribery </strong><span class=\"fontstyle0\">Test. If one of them is hurt during a fight, have Adolphus make a </span><strong>Challenging (+0) Leadership </strong><span class=\"fontstyle0\">Test. If failed, all three thugs t</span>ake a @Condition[Broken] Condition. </p></section>"
"description": "<section id=\"secret-wWIZOUYhy0aF14MZ\" class=\"secret\"><p><span class=\"fontstyle0\">@UUID[Actor.rYlDGJx20M72PydJ]{Bengt}, @UUID[Actor.r5NgPWpDHpjRkGQM]{Gurt}, et @UUID[Actor.BLrqbYcSiVvWnmws]{Willie}, les trois voyous engagés par Adolphus, travaillant parfois sur les quais de @UUID[JournalEntry.tT80gcSmeK5oO5C2.JournalEntryPage.l2kZtajL8d3RlPqO]{Weissbruck} comme débardeurs. Ils ne sont pas particulièrement brillants, ni loyaux, et chacun d'eux parle avec un fort accent de la classe populaire du Reikland. S'ils sont pris par les Personnages, ils peuvent être convaincus de révéler les plans d'@UUID[Actor.echM0Sjy5xpt5KAQ]{Adolphus} en réussisant un Test d' </span><span class=\"fontstyle2\"><strong> Intimidation</strong> </span><span class=\"fontstyle0\"> ou de  </span><strong>Subornation Facile (+40) </strong><span class=\"fontstyle0\">. Si l'un d'entre eux est blessé au cours d'un combat, Adolphus devra effectuer un Test de  </span><strong>Commandement Intermédiaire (+0) </strong><span class=\"fontstyle0\">. En cas d'échec, chaque malfrat acquiert un État</span>@Condition[Brisé]. </p></section>"
},
"Bertoldo": {
"name": "Bertoldo",
"description": ""
},
"Big Anders": {
"name": "Big Anders",
"Grand Anders": {
"name": "Grand Anders",
"description": ""
},
"Black Arrow": {
"name": "Black Arrow",
"name": "Flèche Noire",
"description": ""
},
"Blackie": {
"name": "Blackie",
"description": "<section id=\"secret-4qJv2fsUCpSC9eQX\" class=\"secret\"><p><span class=\"fontstyle0\">Blackie, @UUID[Actor.ND2uvL1HRLr0ggfw]{Gustavs} pet crow, sits on a beam above the bar and can often be heard mimicking Gustav. The voice is spot on, but where Gustav is unstoppable, Blackie is incomprehensible: <em>Well, welcome, leaving so soon, how nice to see you, would you like a road to travel or have you just arrived? Oh! Of course, you have! Have a chicken to drink!</em> Blackie can continue like this for a long time, and is almost as unrelenting as Gustav.</span></p></section>"
"Noireaud": {
"name": "Noireaud",
"description": "<section id=\"secret-4qJv2fsUCpSC9eQX\" class=\"secret\"><p><span class=\"fontstyle0\">Noireaud, le corbeau apprivoisé de @UUID[Actor.ND2uvL1HRLr0ggfw]{Gustavs}, reste perché sur une poutre au-dessus du comptoir, d'où on peut l'entendre imiter Gustav. La voix est fidèle, mais si Gustave est inarrêtable, Noireaud est juste incompréhensible :<em>Eh bien, bienvenue, vous partez déjà, quel plaisir de vous voir, voulez-vous une route à parcourir ou est-ce que vous venez d'arriver ? Oh, bien sûr que vous venez d'arriver ! Vous boirez bien un p'tit poulet !</em> Il peut continuer ainsi pendant presqu'aussi longtemps que Gustav</span></p></section>"
},
"Blue Horror of Tzeentch": {
"name": "Blue Horror of Tzeentch",
"description": "<section id=\"secret-4VMaGRX8Rsye3MSp\" class=\"secret\"><p>Horrors of Tzeentch are the gibbering, mutable scions of the Changer of Ways. Many-limbed monstrosities, their form seems to writhe and change as arms, legs, and tentacles burst forth, snaking through the air, seeking prey to drag into their gaping maws. Creatures of pure magic, the air around them crackles and warps with unholy arcane energies.</p><p>@UUID[Actor.iDy8SDTwJSlCzZMl]{Pink Horrors} revel in change and in magic. When summoned, they giggle and gambol their way through the world, frolicking and capering with glee. Their cheerfully antic disposition means they are often known as Squealers or Whirling Destroyers. As creatures of raw Chaos, they are drawn to one another, amplifying one anothers power, and conjuring fearsome bolts of magical flame to wreak havoc on those foolish enough to draw close.</p><p>Should a @UUID[Actor.iDy8SDTwJSlCzZMl]{Pink Horror} receive a blow sufficient enough to destroy its material manifestation, it explosively splits into two Blue Horrors, rather than being banished to the Realms of Chaos. In stark contrast to their giggling pink precursor, Blue Horrors appear sullen and malicious, their faces distorted into grimaces and sneers. Instead of laughter, their eldritch throats spew grumbling, muttered curses.</p><p>If a group of nine, or a multiple of nine, creatures have the trait, then all the creatures pool their resources  together and instead cast the Spell. Nine, of course, is Tzeentchs sacred number.</p></section>"
"Horreur bleue de Tzeentch": {
"name": "Horreur bleue de Tzeentch",
"description": "<section id=\"secret-4VMaGRX8Rsye3MSp\" class=\"secret\"><p>Les horreurs de Tzeentch sont les rejetons mutants et baragouinant du Changeur de Voies. Monstruosités aux membres multiples, leur forme semble se tordre et se modifier selon les bras, les jambes et les tentacules qui surgissent, serpentant dans l'air à la recherche de proies à emporter dans leurs gueules béantes. Créatures de pure magie, l'air qui les entoure crépite et se déforme avec des énergies arcaniques impies.</p><p>@UUID[Actor.iDy8SDTwJSlCzZMl]{Les horreurs roses} se délectent du changement et de la magie. Lorsqu'elles sont invoquées, elles rient et gambadent à travers le monde, folâtrant et effectuant des cabrioles enthousiastes. Leur caractère joyeusement anticonformiste leur a souvent valu le surnom de \"Couineurs\" ou de \"Destructeur tourbillonants\". Créature du Chaos brut, elles sont attirées les unes par les autres, amplifiant leur pouvoir mutuel, et conjurant de redoutables éclairs de flammes magiques pour détruire ceux qui sont assez fous pour s'en approcher.</p><p>Si une @UUID[Actor.iDy8SDTwJSlCzZMl]{horreur rose} reçoit un coup suffisant pour détruire sa manifestation matérielle , elle se divise de manière explosive en deux horreurs bleues, au lieu d'être bannie dans les Royaumes du Chaos. Contrairement à leur homologues roses et rieuses, les horreurs bleues sont maussades et malveillantes, leurs visages sdéformées par des grimaces et des rictus. Au lieu de rire, leurs gorges surnaturelles grommellent ou marmonnent des malédictions.</p><p>Si un groupe de neuf créatures, ou un multiple de neuf, possède le Trait Feu de Tzeentch, alors toutes les créatures mettent leurs ressources   en commun et lancent le sort Tempête de feu de Tzeench.</p><p> Neuf, bien sûr, est le nombre sacré de Tzeentch.</p></section>"
},
"Boar (Vorbergland Hog)": {
"name": "Boar (Vorbergland Hog)",
"description": "<section id=\"secret-N2SbOaEihv8MMnCk\" class=\"secret\"><p>The following Characteristics describe common farm animals of the Reikland. If you feel an animal is not enough of a challenge, or are presenting the same encounter for a second time, use the  listed Optional Traits, or the @UUID[Compendium.wfrp4e-core.journals.3ZynTGhFpgwv6l1n.JournalEntryPage.UyUu4g8GQRp16paM#generic-creature-traits]{Generic Creature Traits}.</p></section>"
"Cochon (Porc du Vorbergland)": {
"name": "Cochon (Porc du Vorbergland)",
"description": "<section id=\"secret-N2SbOaEihv8MMnCk\" class=\"secret\"><p>Les caractéristiques suivantes sont celles d'animaux domestiques courants dans le Reikland. Si vous pensez qu'un animal ne représente pas un défi suffisant, ou qu'il s'agit de la deuxième fois que la rencontre survient, piochez dans  la liste des Traits Facultatifs ou dans celle des the @UUID[Compendium.wfrp4e-core.journals.3ZynTGhFpgwv6l1n.JournalEntryPage.UyUu4g8GQRp16paM#generic-creature-traits]{Traits Standards de Créature}.</p></section>"
},
"Bodyguards Aplenty": {
"name": "Bodyguards Aplenty",
"Gardes du corps à gogo": {
"name": "Gardes du corps à gogo",
"description": ""
},
"Bögenhafen Watch Recruits": {
"name": "Bögenhafen Watch Recruits",
"description": "<section id=\"secret-wuwkQDehqXeAAALI\" class=\"secret\"><p>Although this is the first Chapter where the Characters definitely face the Watch, its possible a confrontation with Bögenhafens finest will happen earlier. Patrols in the town usually consist of a @UUID[Actor.opX8C6mLOuvFvV0B]{sergeant} leading three @UUID[Actor.nCzNGuS22drsDAIe]{watchmen} and a @UUID[Actor.4RZRWe2dSK8hA9OZ]{recruit}. By comparison, at the @UUID[JournalEntry.ro7SIltM899Ogrk8.JournalEntryPage.HlvtyG6davRZ3Xlk]{Schaffenfest}, a patrol is usually a watchman leading three  fresh recruits drafted in to help during the fair.</p></section>"
"Recrues du guet": {
"name": "Recrues du guet",
"description": "<section id=\"secret-wuwkQDehqXeAAALI\" class=\"secret\"><p>Bien qu'il s'agisse du premier chapitre où les Personnages sont confrontés au Guet, il est possible qu'ils aient rencontré la fine fleur de Bögenhafen plus tôt. Les patrouilles en ville se composent en général d'un @UUID[Actor.opX8C6mLOuvFvV0B]{sergent}, accompagné de trois @UUID[Actor.nCzNGuS22drsDAIe]{gardes} et d'une @UUID[Actor.4RZRWe2dSK8hA9OZ]{recrue}. En comparaison, pendant la @UUID[JournalEntry.ro7SIltM899Ogrk8.JournalEntryPage.HlvtyG6davRZ3Xlk]{Schaffenfest}, les patrouilles sont en général composées d'un garde accompagné de trois  recrues fraichement engagées pour prêter main forte sur le champs de foire.</p></section>"
},
"Bögenhafen Watch Sergeant": {
"name": "Bögenhafen Watch Sergeant",
"description": "<section id=\"secret-wuwkQDehqXeAAALI\" class=\"secret\"><p>Although this is the first Chapter where the Characters definitely face the Watch, its possible a confrontation with Bögenhafens finest will happen earlier. Patrols in the town usually consist of a @UUID[Actor.opX8C6mLOuvFvV0B]{sergeant} leading three @UUID[Actor.nCzNGuS22drsDAIe]{watchmen} and a @UUID[Actor.4RZRWe2dSK8hA9OZ]{recruit}. By comparison, at the @UUID[JournalEntry.ro7SIltM899Ogrk8.JournalEntryPage.HlvtyG6davRZ3Xlk]{Schaffenfest}, a patrol is usually a watchman leading three  fresh recruits drafted in to help during the fair.</p></section>"
"Sergents du guet": {
"name": "Sergents du guet",
"description": "<section id=\"secret-wuwkQDehqXeAAALI\" class=\"secret\"><p>Bien qu'il s'agisse du premier chapitre où les Personnages sont confrontés au Guet, il est possible qu'ils aient rencontré la fine fleur de Bögenhafen plus tôt. Les patrouilles en ville se composent en général d'un @UUID[Actor.opX8C6mLOuvFvV0B]{sergent}, accompagné de trois @UUID[Actor.nCzNGuS22drsDAIe]{gardes} et d'une @UUID[Actor.4RZRWe2dSK8hA9OZ]{recrue}. En comparaison, pendant la @UUID[JournalEntry.ro7SIltM899Ogrk8.JournalEntryPage.HlvtyG6davRZ3Xlk]{Schaffenfest}, les patrouilles sont en général composées d'un garde accompagné de trois  recrues fraichement engagées pour prêter main forte sur le champs de foire.</p></section>"
},
"Bögenhafen Watchman": {
"name": "Bögenhafen Watchman",
"description": "<section id=\"secret-wuwkQDehqXeAAALI\" class=\"secret\"><p>Although this is the first Chapter where the Characters definitely face the Watch, its possible a confrontation with Bögenhafens finest will happen earlier. Patrols in the town usually consist of a @UUID[Actor.opX8C6mLOuvFvV0B]{sergeant} leading three @UUID[Actor.nCzNGuS22drsDAIe]{watchmen} and a @UUID[Actor.4RZRWe2dSK8hA9OZ]{recruit}. By comparison, at the @UUID[JournalEntry.ro7SIltM899Ogrk8.JournalEntryPage.HlvtyG6davRZ3Xlk]{Schaffenfest}, a patrol is usually a watchman leading three  fresh recruits drafted in to help during the fair.</p></section>"
"Soldats du guet": {
"name": "Soldats du guet",
"description": "<section id=\"secret-wuwkQDehqXeAAALI\" class=\"secret\"><p>Bien qu'il s'agisse du premier chapitre où les Personnages sont confrontés au Guet, il est possible qu'ils aient rencontré la fine fleur de Bögenhafen plus tôt. Les patrouilles en ville se composent en général d'un @UUID[Actor.opX8C6mLOuvFvV0B]{sergent}, accompagné de trois @UUID[Actor.nCzNGuS22drsDAIe]{gardes} et d'une @UUID[Actor.4RZRWe2dSK8hA9OZ]{recrue}. En comparaison, pendant la @UUID[JournalEntry.ro7SIltM899Ogrk8.JournalEntryPage.HlvtyG6davRZ3Xlk]{Schaffenfest}, les patrouilles sont en général composées d'un garde accompagné de trois  recrues fraichement engagées pour prêter main forte sur le champs de foire.</p></section>"
},
"Brokur Zindrisson": {
"name": "Brokur Zindrisson",
@ -125,50 +125,50 @@
"name": "Bruno",
"description": ""
},
"Carnivorous Snapper": {
"name": "Carnivorous Snapper",
"description": "<p>@UUID[JournalEntry.fLREtWAYHixfuvg3.JournalEntryPage.32bDNS8jRG1id9bO]{4. The Dungeons}</p><p>The Carnivorous Snapper is a bipedal reptile, about 10 feet long from nose to tail and standing about 5-ft high, although in combat it can rear to a height of 7 ft. Most of its weight is distributed around its hind legs, and it has a heavy tail that it uses for balance while running. Its forelimbs are small and almost useless. Its body is mottled, ranging from dark green to dark brown on the back and with a paler, buff-coloured belly.</p><p>The outlaws captured this creature in the forest a few weeks ago, and have been keeping it as a kind of pet, feeding it scraps of game, and using it to scare prisoners.</p>"
"Happeur carnivore": {
"name": "Happeur carnivore",
"description": "<p>@UUID[JournalEntry.fLREtWAYHixfuvg3.JournalEntryPage.32bDNS8jRG1id9bO]{4. The Dungeons}</p><p>Le happeur carnivore est un reptile bipède d'environ 3 mètres de long du nez à la queue et d'environ 1,5 mètre de haut, bien qu'en combat il puisse se cabrer jusqu'à 2 mètres. La plus grande partie de son poids est répartie autour de ses pattes arrières et il utilise sa lourde queue pour s'équilibrer lorsqu'il court. Ses membres antérieurs sont petits et presque inutiles. Son corps est tâcheté, allant du vert foncé au brun sombre sur le dos et avec un ventre plus pâle, de couleur chamois.</p><p>Les hors-la-loi ont capturé cette créature il y a quelques semaines et l'ont gardée comme une sorte d'animal de compagnie, la nourissant de restes de gibier et l'utilisant pour effrayer les prisonniers.</p>"
},
"Cart": {
"name": "Cart"
"Charrette": {
"name": "Charrette"
},
"Chair": {
"name": "Chair"
"Chaise": {
"name": "Chaise"
},
"Chaos Fury": {
"name": "Chaos Fury",
"description": "<section id=\"secret-vnWhhwp0BnliHHFS\" class=\"secret\"><p>In many ways Chaos Furies are considered the least of Daemons. They serve no particular Chaos god, and are atavistic manifestations of Chaos in its undivided form, primal and without distinctive personality. Their relative weakness, as well as the fact that no Chaos power would seek recompense should they be mistreated, means that they are often summoned by novice Daemonologists seeking a pliable and useful servant.</p>\n <p>For all their lack of power Furies are still stronger than most mortal humans, and capable of speeding flight on their leathern wings. In appearance they are mutable, as all servants of Chaos, but they tend to manifest along a rough outline not wholly unlike a winged Beastman.&nbsp; Furies are often further characterised by long canine snouts, short sharp horns, burning-yellow eyes, and a hide patched in dark fur and red reptilian scales.</p>\n <p>Furies are weak-willed and cowardly by nature. A Daemonologist may easily bind one in order to deliver simple messages or prey upon isolated targets. However, tasked with anything too onerous, complex, or dangerous, they tend to grow resentful and uncooperative.</p></section>"
"Furies du Chaos": {
"name": "Furies du Chaos",
"description": "<section id=\"secret-vnWhhwp0BnliHHFS\" class=\"secret\"><p>À bien des égards, les Furies du Chaos sont considérées comme des démons sans importance. Elles ne servent aucun dieu en particulier, et ne sont que des manifestations ataviques du Chaos dans sa forme indivisible, primitive et sans personnalité distincte. Leur faiblesse relative ainsi que le fait qu'aucune puissance du Chaos ne chercheraient à se venger si elles étaient maltraitées, font qu'elles sont souvent invoquées par des démonologues novices à la recherche d'un serviteur malléable et utile.</p>\n <p>Malgré leur manque de puissance, les furies restent toujours plus fortes que la plupart des humains mortels, et capable de voler rapidement grâce à leurs ailes de cuir. Leur apparence est changeante, comme celle de tous les serviteurs du Chaos, mais elles ont généralement une silhouette grossière qui n'est pas sans évoquer celle d'un homme-bête ailé. Les furies sont souvent caractérisées par un long museau canin, des cornes courtes et pointues, des yeux jaunes brûlants et une peau parsemée de fourrure sombre et d'écailles reptiliennes rouges.</p>\n <p>Les furies sont faibles et lâches par nature. Un démonologue peut facilement en lier une afin de délivrer de simples messages ou de s'attaquer à des cibles isolées. Cependant, si on leur confie des tâches trop pénibles, complexes ou dangereuses, elles peuvent devenir rancunières et refuser de coopérer.</p></section>"
},
"Charlotte-Samantha Maiers": {
"name": "Charlotte-Samantha Maiers",
"description": ""
},
"Coach": {
"name": "Coach"
"Dilligence": {
"name": "Dilligence"
},
"Cow (Stimmigen Dairy Cattle)": {
"name": "Cow (Stimmigen Dairy Cattle)",
"description": "<section id=\"secret-VFQRiToR0eMQRlkz\" class=\"secret\"><p>The following Characteristics describe common farm animals of the Reikland. If you feel an animal is not enough of a challenge, or are presenting the same encounter for a second time, use the listed Optional Traits, or the @UUID[Compendium.wfrp4e-core.journals.3ZynTGhFpgwv6l1n.JournalEntryPage.UyUu4g8GQRp16paM#generic-creature-traits]{Generic Creature Traits}.</p></section>"
"Vache (laitière de Stimmigen)": {
"name": "Vache (laitière de Stimmigen)",
"description": "<section id=\"secret-N2SbOaEihv8MMnCk\" class=\"secret\"><p>Les caractéristiques suivantes sont celles d'animaux domestiques courants dans le Reikland. Si vous pensez qu'un animal ne représente pas un défi suffisant, ou qu'il s'agit de la deuxième fois que la rencontre survient, piochez dans  la liste des Traits Facultatifs ou dans celle des the @UUID[Compendium.wfrp4e-core.journals.3ZynTGhFpgwv6l1n.JournalEntryPage.UyUu4g8GQRp16paM#generic-creature-traits]{Traits Standards de Créature}.</p></section>"
},
"Delberz Trötte": {
"name": "Delberz Trötte",
"description": ""
},
"Dockland Drinkers": {
"name": "Dockland Drinkers",
"description": "<section id=\"secret-OoCKULRj6KQcHYrR\" class=\"secret\"><p>@UUID[JournalEntry.IjGUv51IPhj79Wxt.JournalEntryPage.E8nLFVw3Mmc024dc]{The Boatman Inn}</p><p>The Characters are not the only people in the inn. Dockworkers are a famously tough bunch, but they arent foolish. </p><p>So long as the toffs are not too annoying, and confine their attentions to strangers, the regulars avoid trouble and may even enjoy a laugh at the expense of some out-of-town idiot who catches a well-deserved soaking or worse. </p><p>Sooner or later, though — which is to say, whenever you feel the adventurers might need some help or, more likely, that they are about to react with lethal violence rather than healthy brawling — a few of the regulars might step in. They will fight to subdue, intending to throw the toffs, their bodyguards, the Characters, and any other strangers out of the inn so they can get back to their drinking in peace. </p><p>However, if anyone draws a weapon, they will respond with daggers, broken bottles, and whatever else comes to hand.</p><p>The regulars are an assortment of Boatmen, Riverwomen, and Stevedores, mostly Altdorfers, but with some from all the corners of the Empire, so accents are as varied as you wish.</p></section>"
"Buveurs des quais": {
"name": "Buveurs des quais",
"description": "<section id=\"secret-OoCKULRj6KQcHYrR\" class=\"secret\"><p>@UUID[JournalEntry.IjGUv51IPhj79Wxt.JournalEntryPage.E8nLFVw3Mmc024dc]{L'auberge du Batelier}</p><p>Les Personnages ne sont pas les seuls personnes dans l'auberge. Les dockers sont connus pour être des durs, mais ils ne sont pas stupides. </p><p>Tant que les jeunes nobles ne sont pas trop pénibles, et ne s'en prennent qu'à des étrangers, les habitués évitent les ennuis et peuvent même se joindre aux rires s'ils se font aux dépends d'un imbécile de passage qui a bien mérité ce qui lui arrive, que ce soit d'être trempé ou pire. </p><p>Mais tôt ou tard (c'est-à-dire quand vous sentez que les aventuriers auront besoin d'aide ou, plus vraisemblablement, qu'ils sont sur le point d'abandonner la lutte avec les poings pour s'emparer de leurs armes), certains habitués pourraient intervenir. Ils se battront avant tout pour maîtriser leurs adversaires, dans le but de mettre à la porte les dandys, leurs gardes du corps, les Personnages, et toute personne étrangère à l'auberge, de façon à pouvoir recommencer à boire en paix. </p><p>Cependant, si quelqu'un dégaine une arme, ils s'empareront de leurs dagues, de bouteilles brisées, et de tout ce qui pourrait leur tomber sous la main.</p><p>Les habitués forment un assortiment de Bateliers, de Femmes du fleuve et de Débardeurs qui sont d'Altdorf pour la plupart, mais qui peuvent provenir de tout l'Empire, et dont les accents peuvent donc être aussi variés que vous le souhaitez.</p></section>"
},
"Dog": {
"name": "Dog",
"description": "<section id=\"secret-CVnRstTnrrNdDJ5s\" class=\"secret\"><p>@UUID[JournalEntry.GHueUtHKzlhvsd8L.JournalEntryPage.8GLdbAcRWwY522rP]{Mounts and Vehicles}</p><p>Halflings, and many Humans in remote communities, breed large dogs to pull two-wheeled carts and carriages. A few Halflings have tried riding dogs but that rarely turns out well for the dog. Halflings may be short, but they are rarely light.</p></section>"
"Chien": {
"name": "Chien",
"description": "<section id=\"secret-CVnRstTnrrNdDJ5s\" class=\"secret\"><p>@UUID[JournalEntry.GHueUtHKzlhvsd8L.JournalEntryPage.8GLdbAcRWwY522rP]{Montures et véhicules}</p><p>Les halflings, et beaucoup d'humains vivant dans des communautés reculées, élèvent de grands chiens pour tirer les charrettes et les chariots à deux roues. Quelques halfkings ont essayé de monter des chiens mais ce n'est pas très bon pour l'animal. Les halflings ont beau être petits, ils sont rarement légers.</p></section>"
},
"Donkey": {
"name": "Donkey",
"description": "<section id=\"secret-jyxbqCS6RUVdR93m\" class=\"secret\"><p>@UUID[JournalEntry.GHueUtHKzlhvsd8L.JournalEntryPage.8GLdbAcRWwY522rP]{Mounts and Vehicles}</p><p>Ponies are a small breed of horse no more than 15 hands (about five feet) high at the shoulder; donkeys are tough, resilient, and notoriously stubborn cousins of horses; mules are sterile crossbreeds of horses and donkeys. If anything, mules are even more awkward than their donkey relatives, but make up for it by being seemingly tireless. </p><p>All three animals are used as mounts by the rural lower classes. They can be hitched to small, two-wheeled carts, or loaded with goods and led by a person on foot. It is not uncommon to hitch teams of up to twenty mules to a medium or large wagon. </p><p>Donkeys and mules often have the Stubborn trait, which increases their WP score by +20 and requires an <strong>Opposed Ride or Drive/Willpower</strong> Test whenever the rider or driver needs to bring the creature under control. If the test is a failure, the animal stops dead and refuses to go further. It can be induced to go forward by a successful <strong>Ride </strong>Test opposed by the creatures Willpower, or an opposed <strong>Charm Animal</strong> Test if someone is leading it by the bridle. In either case, it does not go faster than half Walking speed.</p></section>"
"Poney, âne ou mule": {
"name": "Poney, âne ou mule",
"description": "<section id=\"secret-jyxbqCS6RUVdR93m\" class=\"secret\"><p>@UUID[JournalEntry.GHueUtHKzlhvsd8L.JournalEntryPage.8GLdbAcRWwY522rP]{Montures et véhicules}</p><p>Les poneys sont de petits chevaux ne mesurant pas plus d'1m50 au garrot ; les ânes sont des cousins des chevaux, robustes, résistants et notoirement têtus ; les mules sont des croisement stériles de chevaux et d'ânes, encore plus maladroites que leurs cousins les ânes, mais elles compensent en étant apparement infatigables. </p><p>Ces trois animaux sont utilisés comme montures par les classes rurales inférieures. Ils peuvent être attelés à de petites charrettes à deux roues, ou chargées de marchandises et dirigées par une personne à pied. Il n'est pas rare d'atteler jusqu'à vingt mules à un chariot de taille moyenne ou grande. </p><p>Les ânes et les mules possèdent souvent le Trait Entêté, qui augmente leur score de FM de +20 et nécessite un Test opposé de <strong>Chevaucher ou de conduite d'attelage/Forme Mentale</strong> chaque fois que le cavalier ou le conducteur doit maîtriser l'animal. Si le test est un échec, l'animal s'arrête net et refuse d'aller plus loin. Il peut être incité à avancer par un test de <strong>Chevaucher</strong> réussi auquel s'oppose la Force Mentale de la créature, ou un Test opposé d'<strong>Emprise sur les animaux</strong> si quelqu'un le dirige par la bride. Dans les deux cas, il ne peut pas aller plus vite que la moitié de la vitesse de marche.</p></section>"
},
"Draught Horse": {
"name": "Draught Horse",
"description": "<section id=\"secret-zAdKu0TanxPHwn5N\" class=\"secret\"><p>@UUID[JournalEntry.GHueUtHKzlhvsd8L.JournalEntryPage.8GLdbAcRWwY522rP]{Mounts and Vehicles}</p><p>These medium-sized horses are popular with farmers who can afford them and value their versatility. They pull ploughs or carts — a pair can handle all but the heaviest wagons — and make reasonably docile mounts for trips into town on market days.</p></section>"
"Cheval de trait": {
"name": "Cheval de trait",
"description": "<section id=\"secret-zAdKu0TanxPHwn5N\" class=\"secret\"><p>@UUID[JournalEntry.GHueUtHKzlhvsd8L.JournalEntryPage.8GLdbAcRWwY522rP]{Montures et véhicules}</p><p>Ces chevaux de taille moyenne sont appréciés des fermiers qui peuvent se les offrir et profiter de leur polyvalence. Ils tirent des charrues ou des charrettes, une paire de ces animaux peut tirer tous les chariots, sauf les plus lourds, et ils constituent des montures assez dociles pour les déplacements en ville les jours de marché.</p></section>"
},
"Eberhart von Durbheim": {
"name": "Eberhart von Durbheim",
@ -182,25 +182,25 @@
"name": "Emmaretta",
"description": ""
},
"Erik (Mutant Brigand)": {
"name": "Erik (Mutant Brigand)",
"description": "<section id=\"secret-O4LQDiXj4yRMbG9N\" class=\"secret\"><p>@UUID[JournalEntry.2JX9k58tn9lJfkqS.JournalEntryPage.CfHPEuCzlIow7PAV]{The Mayhem Mystery Tour}</p><p><span class=\"fontstyle0\">Knuds Mutant brigands are a disturbing bunch, all the more horrifying as the vestigial remains of their humanity are plain to see. This one </span>has the legs of a goat, and speaks with a surprisingly refined Reiklander accent.</p><p>*2 Wounds Remaining</p></section>"
"Erik (Bandit mutant)": {
"name": "Erik (Bandit mutant)",
"description": "<section id=\"secret-O4LQDiXj4yRMbG9N\" class=\"secret\"><p>@UUID[JournalEntry.2JX9k58tn9lJfkqS.JournalEntryPage.CfHPEuCzlIow7PAV]{Visite sur les lieux du massacre}</p><p><span class=\"fontstyle0\">Tout le groupe est dérangeant, mais ces mutants sont d'autant plus horribles qu'ils sont encore partiellement humains. Ce mutant </span> a vu ses jambes remplacées par les pattes d'une chèvre, et parle avec un accent reiklander étonnement raffiné.</p><p>*2 points de Blessure restant</p></section>"
},
"Ernst Heidlemann": {
"name": "Ernst Heidlemann",
"description": ""
},
"Fang": {
"name": "Fang",
"description": "<section id=\"secret-SAqm1Ilc0gNFx02b\" class=\"secret\"><p>@UUID[JournalEntry.abUCs0O1oBGNonyi.JournalEntryPage.67GdZ4epIhCwPcOT]{The Steinhäger Offices}</p><p><span class=\"fontstyle0\">@UUID[Actor.FF4U0ls9YObaK0q5]{Schutz} is accompanied by Fang, a large black dog with sharp teeth. However, for all Fang is a Telland Pit Bull, one of the fiercer breeds of @UUID[Compendium.wfrp4e-core.actors.R1iWvfV9EvgIc8bJ]{Dog}, she is much less intimidating than she looks. Ruled by her stomach, she befriends any  Character who offers her food or who passes an </span><span class=\"fontstyle2\"><strong>Average (+20) Charm Animal </strong></span><span class=\"fontstyle0\">Test. She is a good girl.</span></p></section>"
"Longcroc": {
"name": "Longcroc",
"description": "<section id=\"secret-SAqm1Ilc0gNFx02b\" class=\"secret\"><p>@UUID[JournalEntry.abUCs0O1oBGNonyi.JournalEntryPage.67GdZ4epIhCwPcOT]{La maison Steinhäger}</p><p><span class=\"fontstyle0\">@UUID[Actor.FF4U0ls9YObaK0q5]{Schutz} est accompagné de Longcroc, une grande chienne noire aux crocs aiguisés. Cependant, même s'il s'agit d'un pitbull tellandais, l'une des races de @UUID[Compendium.wfrp4e-core.actors.R1iWvfV9EvgIc8bJ]{chien} les plus féroces, elle est beaucoup moins intimidante qu'il n'y paraît. Ventre sur pattes, elle se liera d'amitié avec toute  personne qui lui donnera à manger ou qui réussira un Test d'</span><span class=\"fontstyle2\"><strong>Emprise sur les animaux Accessible (+20)</strong></span><span class=\"fontstyle0\">. C'est une bonne fille.</span></p></section>"
},
"Fhluger'dagh": {
"name": "Fhluger'dagh",
"description": ""
},
"Frank (Guard)": {
"name": "Frank (Guard)",
"description": "<section id=\"secret-4UorWorAR19Lv3BK\" class=\"secret\"><p>@UUID[JournalEntry.IjGUv51IPhj79Wxt.JournalEntryPage.E8nLFVw3Mmc024dc]{The Boatman Inn}</p><p><span class=\"fontstyle0\">The two nobles are accompanied by four bodyguards. Hulking brutes, each is over 6ft tall and heavily muscled. They rarely speak, content to lurk near their masters, ever-ready to intervene should anyone dare to talk to or even lay hands upon the pampered jewels of the Reiklands nobility. If pressed to talk, their growling accents are typical of the lowest of low-lifes from @UUID[Compendium.wfrp4e-altdorf.journals.85UN6bKPTfGEBtBb]{Altdorf s East End}.</span> </p></section>"
"Franka (Garde)": {
"name": "Franka (Garde)",
"description": "<section id=\"secret-4UorWorAR19Lv3BK\" class=\"secret\"><p>@UUID[JournalEntry.IjGUv51IPhj79Wxt.JournalEntryPage.E8nLFVw3Mmc024dc]{L'auberge du Batelier}</p><p><span class=\"fontstyle0\">Les deux nobles sont accompagnés par quatre gardes du corps. Ce sont des brutes musculeuses de plus d'1m80. Ils parlent peu, et se content de se tenir à l'affüt près de leurs maîtres, prêts à intervenir si quelqu'un ose parler ou poser la main sur ces joyaux dorlotés par la noblesse du Reikland. S'ils sont contraints à parler, leur accent est typique des pires bas-fonds des  @UUID[Compendium.wfrp4e-altdorf.journals.85UN6bKPTfGEBtBb]{Quartiers est d'Altdorf}.</span> </p></section>"
},
"Franz Baumann": {
"name": "Franz Baumann",
@ -216,7 +216,7 @@
},
"Georg Handelsson": {
"name": "Georg Handelsson",
"description": "<section id=\"secret-dY0rrKJaMzplgKkL\" class=\"secret\"><p>@UUID[JournalEntry.aI05RCFli7s2SPP2.JournalEntryPage.uWlg0JgRwaUQNInI#warehouse-17]{Warehouse 17}</p><p>Big Georg is in his 50s, 65” tall, and has a snow-white beard. He lives alone with his two dogs, and for the last three years has barely said more than, <em>Oi</em>! when an idiot pokes a nose into his warehouse when they shouldnt.</p></section>"
"description": "<section id=\"secret-dY0rrKJaMzplgKkL\" class=\"secret\"><p>@UUID[JournalEntry.aI05RCFli7s2SPP2.JournalEntryPage.uWlg0JgRwaUQNInI#warehouse-17]{L'Entrepôt 17}</p><p>Le Grand Georges a la cinquantaine, mesure environ 1,85m, et porte une barbe blanche comme la neige. Il vit seul avec ses deux chiens, et au cours de ces trois dernières années, il n'a pas prononcé grand-chose que <em>Eh</em>! quand un idiot est venu fourrer son nez dans son entrepôt alors qu'il n'aurait pas dû.</p></section>"
},
"Georg von Ostbrun": {
"name": "Georg von Ostbrun",
@ -226,29 +226,29 @@
"name": "Gerhard Schutz",
"description": ""
},
"Goat (Booted Rottgeist)": {
"name": "Goat (Booted Rottgeist)",
"description": "<section id=\"secret-eLMtofCBtmn4QLnS\" class=\"secret\"><p>The following Characteristics describe common farm animals of the Reikland. If you feel an animal is not enough of a challenge, or are presenting the same encounter for a second time, use the  listed Optional Traits, or the @UUID[Compendium.wfrp4e-core.journals.3ZynTGhFpgwv6l1n.JournalEntryPage.UyUu4g8GQRp16paM#generic-creature-traits]{Generic Creature Traits}.</p></section>"
"Chèvre (Rottgeist bottée)": {
"name": "Chèvre (Rottgeist bottée)",
"description": "<section id=\"secret-N2SbOaEihv8MMnCk\" class=\"secret\"><p>Les caractéristiques suivantes sont celles d'animaux domestiques courants dans le Reikland. Si vous pensez qu'un animal ne représente pas un défi suffisant, ou qu'il s'agit de la deuxième fois que la rencontre survient, piochez dans  la liste des Traits Facultatifs ou dans celle des the @UUID[Compendium.wfrp4e-core.journals.3ZynTGhFpgwv6l1n.JournalEntryPage.UyUu4g8GQRp16paM#generic-creature-traits]{Traits Standards de Créature}.</p></section>"
},
"Gorrof (Guard)": {
"name": "Gorrof (Guard)",
"description": "<section id=\"secret-4UorWorAR19Lv3BK\" class=\"secret\"><p>@UUID[JournalEntry.IjGUv51IPhj79Wxt.JournalEntryPage.E8nLFVw3Mmc024dc]{The Boatman Inn}</p><p><span class=\"fontstyle0\">The two nobles are accompanied by four bodyguards. Hulking brutes, each is over 6ft tall and heavily muscled. They rarely speak, content to lurk near their masters, ever-ready to intervene should anyone dare to talk to or even lay hands upon the pampered jewels of the Reiklands nobility. If pressed to talk, their growling accents are typical of the lowest of low-lifes from @UUID[Compendium.wfrp4e-altdorf.journals.85UN6bKPTfGEBtBb]{Altdorf s East End}.</span> </p></section>"
"Gorrof (Garde)": {
"name": "Gorrof (Garde)",
"description": "<section id=\"secret-4UorWorAR19Lv3BK\" class=\"secret\"><p>@UUID[JournalEntry.IjGUv51IPhj79Wxt.JournalEntryPage.E8nLFVw3Mmc024dc]{L'auberge du Batelier}</p><p><span class=\"fontstyle0\">Les deux nobles sont accompagnés par quatre gardes du corps. Ce sont des brutes musculeuses de plus d'1m80. Ils parlent peu, et se content de se tenir à l'affüt près de leurs maîtres, prêts à intervenir si quelqu'un ose parler ou poser la main sur ces joyaux dorlotés par la noblesse du Reikland. S'ils sont contraints à parler, leur accent est typique des pires bas-fonds des  @UUID[Compendium.wfrp4e-altdorf.journals.85UN6bKPTfGEBtBb]{Quartiers est d'Altdorf}.</span> </p></section>"
},
"Gottri Gurnisson": {
"name": "Gottri Gurnisson",
"description": ""
},
"Great Cat": {
"name": "Great Cat",
"description": "<section id=\"secret-CbO9d4DQo4Z8wD7G\" class=\"secret\"><p>Great Cats live in forest and mountain areas away from Humans. They are slender, rangy creatures, about the size of a large Hunting Dog, standing about 2 ft at the shoulder and measuring almost 6 ft from nose to tail. Their fur is mottled with black and brown stripes, providing them with near-perfect camouflage in a shadowed forest. They feed on Deer, Giant Rats, and small game of various kinds.</p></section>"
"Grand félin": {
"name": "Grand félin",
"description": "<section id=\"secret-CbO9d4DQo4Z8wD7G\" class=\"secret\"><p>Les grands félins vivent dans les forêts et les montagnes loin des humains. Ce sont des créatures sveltes et robustes, de la taille d'un grand chien de chasse, mesurant environ 60cm de haut et près de 1m80 du nez à la queue. Leur fourrure est rayée de noir et de brun, ce qui leur permet de se camoufler presque parfaitement dans une forêt ombragée. Ils se nourrissent de cerfs, de rats géants et de petits gibiers de toutes sortes.</p></section>"
},
"Grunni": {
"name": "Grunni",
"description": ""
},
"Guardian Daemon": {
"name": "Guardian Daemon",
"description": "<section id=\"secret-pjkLOFyDC7I8L6W7\" class=\"secret\"><p>A gift of Tzeentch, the Guardian Daemon is one of the Lord of Changes Heralds, an expendable slave to darkness that exists only to further the Great Plan of the Chaos God of Change. It shimmers and crackles with magic, its many-limbed form shifting and warping from one moment to the next. This recently summoned Daemon has orders to keep anyone from entering the @UUID[JournalEntry.qxnXlkXKtBuIHNfu.JournalEntryPage.0ZrNDqAfjPTAPgN1#hidden-temple]{Hidden Temple} except for senior members of the Ordo Septenarius. Although it has been in the material plane for a very short while, it has already decided that it enjoys the simple pleasures of breathing, feeling, and eating. Because of this, it will do whatever it can to avoid death whilst fulfilling the duties it has been commanded to perform.</p><p>If it talks, the Guardian Daemons voice comes in giggling fragments as a hundred mouths open across its body to offer sweet temptations. The largest mouth in its head is only used for snarling and eating, and has whip-like tongues that lash out at any who draw too close.</p></section>"
"Gardien Démon": {
"name": "Gardien Démon",
"description": "<section id=\"secret-pjkLOFyDC7I8L6W7\" class=\"secret\"><p>Cadeau de Tzeentch, le démon gardien est l'un des hérauts du Seigneur du Changement, un esclave des ténèbres sacrifiable qui n'existe que pour servir le grand plan du dieu du Chaos. Il crépite et brille de magie, sa silhouette à plusieurs bras changeant et se déformant à chaque instant. Ce démon tout récemment invoqué a pour ordre d'empêcher quiconque d'entrer dans le @UUID[JournalEntry.qxnXlkXKtBuIHNfu.JournalEntryPage.0ZrNDqAfjPTAPgN1#hidden-temple]{temple secret}, à l'exception des membres du cercle intérieur de l'<em>Ordo Septenarius</em>. Bien qu'il se trouve dans le monde matériel depuis très peu de temps, il a déjà décidé qu'il appréciait les plaisirs simples de respirer, de sentir et de manger. C'est pourquoi il fera tout ce qu'il peut pour éviter de mourir, tout en accomplissant les tâches qui lui ont été demandées.</p><p>Lorsqu'il parle, il s'exprime par l'intermédiaire de centaines de bouches qui s'ouvrent partout sur son corps pour offrir les plus exquises tentations. La plus grande des bouches, sur son visage, n'est utilisée que pour grogner et manger, et recèle des langues en forme de fouet qui s'abattent sur tous ceux qui s'approchent trop près.</p></section>"
},
"Gunnar": {
"name": "Gunnar",
@ -256,33 +256,33 @@
},
"Gurt": {
"name": "Gurt",
"description": "<section id=\"secret-wWIZOUYhy0aF14MZ\" class=\"secret\"><p><span class=\"fontstyle0\">@UUID[Actor.rYlDGJx20M72PydJ]{Bengt}, @UUID[Actor.r5NgPWpDHpjRkGQM]{Gurt}, and @UUID[Actor.BLrqbYcSiVvWnmws]{Willie}, the three thugs hired by Adolphus, do occasional work on the @UUID[JournalEntry.tT80gcSmeK5oO5C2.JournalEntryPage.l2kZtajL8d3RlPqO]{Weissbruck} wharves as labourers. They are not particularly bright or loyal, and each has a rough lowerclass Reiklander accent. If captured by the Characters, they can be persuaded to reveal @UUID[Actor.echM0Sjy5xpt5KAQ]{Adolphuss} plan with an </span><span class=\"fontstyle2\"><strong>Easy (+40) Intimidate</strong> </span><span class=\"fontstyle0\">or </span><strong>Bribery </strong><span class=\"fontstyle0\">Test. If one of them is hurt during a fight, have Adolphus make a </span><strong>Challenging (+0) Leadership </strong><span class=\"fontstyle0\">Test. If failed, all three thugs t</span>ake a @Condition[Broken] Condition. </p></section>"
"description": "<section id=\"secret-wWIZOUYhy0aF14MZ\" class=\"secret\"><p><span class=\"fontstyle0\">@UUID[Actor.rYlDGJx20M72PydJ]{Bengt}, @UUID[Actor.r5NgPWpDHpjRkGQM]{Gurt}, et @UUID[Actor.BLrqbYcSiVvWnmws]{Willie}, les trois voyous engagés par Adolphus, travaillant parfois sur les quais de @UUID[JournalEntry.tT80gcSmeK5oO5C2.JournalEntryPage.l2kZtajL8d3RlPqO]{Weissbruck} comme débardeurs. Ils ne sont pas particulièrement brillants, ni loyaux, et chacun d'eux parle avec un fort accent de la classe populaire du Reikland. S'ils sont pris par les Personnages, ils peuvent être convaincus de révéler les plans d'@UUID[Actor.echM0Sjy5xpt5KAQ]{Adolphus} en réussisant un Test d' </span><span class=\"fontstyle2\"><strong> Intimidation</strong> </span><span class=\"fontstyle0\"> ou de  </span><strong>Subornation Facile (+40) </strong><span class=\"fontstyle0\">. Si l'un d'entre eux est blessé au cours d'un combat, Adolphus devra effectuer un Test de  </span><strong>Commandement Intermédiaire (+0) </strong><span class=\"fontstyle0\">. En cas d'échec, chaque malfrat acquiert un État</span>@Condition[Brisé]. </p></section>"
},
"Gustav Fondleburger": {
"name": "Gustav Fondleburger",
"description": ""
},
"Handcart": {
"name": "Handcart"
"Charrete à bras": {
"name": "Charrette à bras"
},
"Hans Pfliefer": {
"name": "Hans Pfliefer",
"description": ""
},
"Harbull Furfoot": {
"name": "Harbull Furfoot",
"description": "<h3>Personality and Appearance</h3><p><em>Nothing ventured, nothing gained. </em></p><p>Like many Halflings, Harbull has a child-like cheerfulness and insatiable curiosity, especially by Human standards. How does that work? is his favourite question, rather than the more typical, Whats for dinner? However, his sunny disposition changes when confronted by Human prejudices about Halflings — in particular, in relation to food and cooking. Hes of medium height, and medium stoutness for a Halfling (so still very broad), with light-brown curly hair and dark-brown eyes.</p><h3>Background</h3><p>Born in Barliton on the border of Mootland to a chef and a herbalist, there was always uncertainty around Harbulls future career. Whilst he begrudgingly admits that he loves his food, he much prefers others to cook. This oft-repeated distinction sat poorly with his parents, so Harbull eventually left home to seek his own way in life. Wherever Harbull travelled, he found ready employment, though his odd jobs always turned, inevitably, to cooking. Frustrated, he travelled on, and eventually met his current companions at The Travellers Rest coaching inn. Harbull quickly hit things off with Werner, and the group decided to try their luck travelling together, following a handbill calling for adventurers. (@UUID[JournalEntry.fCNnElQzxwEOeJWJ.JournalEntryPage.6h30hMoewtibNM1R]{Handout 1: Wanted! Bold Adventurers!} from <strong>Enemy in Shadows</strong>.)</p><h3>Secrets</h3><ul><li><p>Harbull resents cooking because it was the only work his mother could find, despite being a skilled artist. He assumes that most Halfling cooks have given up on some dream or other. Gain the Psychology Trait.</p></li><li><p>Harbull has trouble telling Humans apart, regardless of how different they look from each other.</p></li><li><p>Harbull left home (and changed his Clan name of Stoutheart to Furfoot) because he accidentally maimed his father during a fight over his future career. If other Halflings discovered this, Harbull would be shunned.</p></li><li><p>Harbull sees Malmir as a kindred spirit, both being travellers in foreign lands. Harbull follows him around constantly, chirpily offering advice at every turn, certain in the knowledge that Malmir both appreciates this input and benefits from it tremendously.</p></li></ul><p>Begin with an additional [[/r 1d10]] brass pennies per secret chosen.</p>"
"Harbull Piedvelu": {
"name": "Harbull Piedvelu",
"description": "<h3>Apparence et personnalité</h3><p><em>Qui ne risque rien n'a rien. </em></p><p>Comme beaucoup de halflings, Harbull fait montre d'une gaieté enfantine et d'une curiosité insatiable, surtout selon les normes humaine Comment ça marche ? est sa question préférée, plutôt que le typique Qu'est-ce qu'on mange ?</p><p>Cependant, son tempérament enjoué change lorsqu'il est confronté aux préjugés humains sur les halflings, en particulier en ce qui concerne la nourriture et la cuisine. Il est de taille et de corpulence moyenne pour un halfling (donc assez rondouillard), avec des cheveux bruns et des yeux marrons foncé.</p><h3>Historique</h3><p>Né à Barliton, à la frontière du Mootland, d'un chef cuisinier et d'une herboriste, l'avenir professionnel de Harbull a toujours été incertain. Bien qu'il admette à contrecoeur qu'il aime manger, il préfère que les autres cuisinent. Cette distinction maintes fois répétée ne plaît guère à ses parents, si bien que Harbull finit par quitter la maison pour chercher sa propre voie dans la vie.</p><p> Partout où il se rend, il trouve un emploi, mais ses petits boulots tournent toujours, inévitablement, autour de la cuisine. Frustré, il a continué à voyager, et a fini par rencontrer ses compagnons actuels à l'auberge relais Le repos du Voyageur.</p><p> Harbull s'entendit rapidement avec Werner, et le groupe décida de tenter sa chance en voyageant ensemble, en suivant un avis de recherche (@UUID[JournalEntry.fCNnElQzxwEOeJWJ.JournalEntryPage.6h30hMoewtibNM1R]{Aide de jeu 1 : Recherchés ! Aventuriers Audacieux !} de <strong>L'Ennemi dans l'Ombre</strong>.)</p><h3>Secrets</h3><ul><li><p>Harbull n'aime pas cuisiner car c'est le seul travail que sa mère a pu trouver, malgré son talent d'artiste. Il suppose que la plupart des cuisiniers halflings ont abandonné leurs rêves. Gagnez le Trait psychologique Préjugé (Cuisinier halfling).</p></li><li><p>Harbull a du mal à distinguer les humains, même s'ils ont l'air très différens les uns des autres.</p></li><li><p>Harbull a quitté sa maison (et a changé son nom de clan de Cœursolide en Piedvelu) parcequ' il a accidentellement mutilé son père au cours d'une dispute sur sa future carrière. Si d'autres halflings le découvraient, Harbull serait rejeté.</p></li><li><p>Harbull considère Malmir comme une âme sœur, tous deux des voyageurs en terre étrangère. Harbull le suit constamment, lui offrant des conseils à tout bout de champ, persuadé que Malmir apprécie cette contribution et en tire un énorme bénéfice.</p></li></ul><p>Commencez avec [[/r 1d10]] sous de cuivre supplémentaires par secret choisi.</p>"
},
"Heavy Draught Horse": {
"name": "Heavy Draught Horse",
"description": "<section id=\"secret-6TGpHtiUV60MNa8U\" class=\"secret\"><p>@UUID[JournalEntry.GHueUtHKzlhvsd8L.JournalEntryPage.8GLdbAcRWwY522rP]{Mounts and Vehicles}</p><p>These are the largest horses in the Empire, and probably the largest in the Old World. Large draught horses can weigh more than a ton and pull almost anything. They can be ridden, but few are trained to accept a rider. Although most nobles would deny it, draught horses are the original breeding stock used to produce heavy warhorses.</p></section>"
"Cheval de trait lourd": {
"name": "Cheval de trait lourd",
"description": "<section id=\"secret-6TGpHtiUV60MNa8U\" class=\"secret\"><p>@UUID[JournalEntry.GHueUtHKzlhvsd8L.JournalEntryPage.8GLdbAcRWwY522rP]{Montures et véhicules}</p><p>Ce sont les plus grands chevaux de l'Empire, et probablement du Vieux Monde. Les grands chevaux de trait peuvent peser plus d'une tonne et tirer presque n'importe quoi. Ils peuvent être montés, mais peu sont entrainés à accepter un cavalier.</p><p>Bien que la plupart des nobles le nient, les chevaux de trait sont les principaux reproducteurs utilisés pour engendrer des chevaux de guerre lourds.</p></section>"
},
"Heavy Wagon": {
"name": "Heavy Wagon"
"Charriot lourd": {
"name": "Charriot lourd"
},
"Heavy Warhorse": {
"Cheval de guerre lourd": {
"name": "Heavy Warhorse",
"description": "<section id=\"secret-xIp5ElOCFEAf5F2N\" class=\"secret\"><p>@UUID[JournalEntry.GHueUtHKzlhvsd8L.JournalEntryPage.8GLdbAcRWwY522rP]{Mounts and Vehicles}</p><p>The largest warhorses, sometimes called destriers, are ridden by armoured knights and other heavy cavalry. These are rarely used for travelling, because it makes no sense to use such an expensive and battle-hardened animal for trivial tasks. While not as fast as their smaller counterparts, they are well trained and their charge is almost unstoppable.</p></section>"
"description": "<section id=\"secret-xIp5ElOCFEAf5F2N\" class=\"secret\"><p>@UUID[JournalEntry.GHueUtHKzlhvsd8L.JournalEntryPage.8GLdbAcRWwY522rP]{Montures et véhicules}</p><p>Les plus grands chevaux de guerre, parfois appelés destriers, sont montés par les chevaliers en armure et autres cavaliers lourds. Ils sont rarement utilisés pour les voyages, car il est insensé d'utiliser un animal aussi coûteux et aguerri pour des tâches insignifiantes. Bien qu'ils ne soient pas aussi rapides que leurs homologues de plus petite taille, ils sont bien entraînés et leur charge est presque impossible à arrêter.</p></section>"
},
"Heinrich Marken": {
"name": "Heinrich Marken",
@ -324,9 +324,9 @@
"name": "Janna Elleiner",
"description": ""
},
"Johann 'Rowlocks' Dassbüt": {
"name": "Johann 'Rowlocks' Dassbüt",
"description": "<h3>Personality and Appearance</h3><p><em>Whatever comes downstream, you deals with it. Then you dont worry no more. Lessn youre daft.</em></p><p>Although very sociable, Johann prefers his own company. He says little unless absolutely sure of his facts, and prefers to reach his own conclusions. Johann often takes some time to mull over a new concept, but once hes thought about things for a while he generally arrives at the right idea. He is of medium build, around 5 10” tall, but obviously healthy and strong as befits someone with a hard, physical job. He has mid-brown hair and a moustache which gives him a slightly sad air, and light-blue eyes that sometimes go a little distant when he is thinking.</p><h3>Background</h3><p>Johann has been travelling up and down the River Reik and its many tributaries for as long as he can remember. His family was killed by bandits when he was young, so he has grown used to relying on his own skills. A boatmans lot has suited Johanns temperament, with its outdoor life, a chance to watch the world float by, and no one to rely on beyond himself. Given the opportunities for money-making are somewhat limited, and since Johann has never owned anything larger than a two-man rowing boat, he was forced to hire out his services to other barge owners. Most of his work consists of ferrying passengers and small cargoes up and down the Reik. Suffering from a mid-decade crisis, he has started to re-examine his life, and has decided that hes had enough of making money for other people. To that end, hes sold his rowing boat to his old employer, and fallen in with a group of vagabonds headed for Altdorf.</p><h3>Secrets</h3><ul><li><p>Johann accidently killed his old employer and burned the boat to cover his tracks. Hes now on the run, wanted for murder in Delberz, Middenland.</p></li><li><p>Johann is deeply superstitious about witches. Hes got his eye on Wanda and Malmir. Gain the Psychology Trait.</p></li><li><p>Johann admires Harbulls self-confidence. He watches him closely to learn his ways. Gain the Psychology Trait.</p></li><li><p>Johann remembers Kristen from a few years back when she left his ferry without paying. She doesnt seem to remember him. Hes planning to get revenge on her, claiming back at least 2 shillings for the trouble she landed him in with his old boss, Travis Binckel.</p></li></ul><p>Begin with an additional [[/r 1d10]] brass pennies per secret chosen.</p>"
"Johann 'Dam'de nage' Dassbüt": {
"name": "Johann 'Dam'de nage' Dassbüt",
"description": "<h3>Apparence et personnalité</h3><p><em>Quoi qu'il arrive en aval, tu fais avec. Alors tu t'inquiète plus. Sinon t'es un idiot. </em></p><p>Bien que très sociable, Johann préfère demeurer seul. Il parle peu à moins d'être absolument sûr de ce qu'il avance, et préfère tirer ses propres conclusions. Il prend souvent du temps pour penser à un nouveau concept, mais un fois qu'il y a réfléchi, il arrive généralement à la bonne décision.</p><p>Johann est de corpulence moyenne, mesure environ 1m80, manifestement en bonne santé et costaud, comme il se doit pour quelqu'un qui exerce un métier aussi physique. Ses cheveux sont marron clair et sa moustache lui donne l'air un peu triste. L'expression de ses yeux bleu clair semble parfois un peu lointaine lorsqu'il réfléchit.</p><h3>Historique</h3><p>Depuis toujours, Johann parcourt le Reik et ses nombreux affluents, aussi loin qu'il s'en souvienne. Sa famille a été tuée par des bandits lorsqu'il était jeune, et il s'est alors habitué à ne compter que sur ses propres compétences. Le métier de batelier convient au tempérament de Johann, avec sa vie en plein air, la chance de regarder le monde défiler sur l'eau, et personne d'autre sur qui compter.</p><p> Ses possibilités de gagner de l'argent sont limitées, et comme Johann n'a jamais rien possédé de plus grand qu'un bateau pour deux rameurs, il a été contraint de louer ses services à d'autres propriétaires de barges. La plupart du temps, son travail consiste à transporter des passagers et de petites cargaisons en amont ou en aval sur le Reik. Souffrant d'une crise existentielle, il s'est mis à réexaminer sa vie et a décidé qu'il en avait assez de gagner de l'argent pour autrui. Il a donc vendu son bateau à rames à son ancien employeur et a rejoint le groupe de vagabonds se dirigeant vers Altdorf.</p><h3>Secrets</h3><ul><li><p>Johann a accidentellement tué son ancien employeur et a brûlé le bateau pour couvrir ses traces. Il est maintenant en fuite, recherché pour meurtre à Delberz, Middenland.</p></li><li><p>Johann est profondément supersticieux en ce qui concerne les sorcières. Il tient Wanda et Malmir à l'œil. Obtient le Trait psychologique Camaraderie (Harbull)</p></li><li><p>Johann se souvient de Kirsten : il y a quelques années, elle a quitté son bateau sans payer. Elle ne semble pas se souvenir de lui mais il a l'intention de se venger d'elle, et de réclamer au moins 2 pistoles pour les ennuis qu'elle lui a causés avec son ancien patron, Travis Binekel.</p></li></ul><p>Commencez avec [[/r 1d10]] sous de cuivre supplémentaires par secret choisi.</p>"
},
"Johann (Mutant Brigand)": {
"name": "Johann (Mutant Brigand)",

View File

@ -1316,7 +1316,7 @@
"WFRP4E.EncumbrancePenalties.MaxEnc" : "Vous ne pouvez plus vous déplacer.",
"WFRP4E.Conditions.Ablaze" : "<p>Vous avez pris feu ! Cet État ne peut sappliquer que si vous êtes inflammable par exemple : porter des vêtements susceptibles de prendre feu , mais certains effets, magiques ou divins, peuvent également vous enflammer même si vous nêtes normalement pas combustible !</p><p>À la fin de chaque round, vous subissez <a class = 'chat-roll'><em class='fas fa-dice'></em> 1d10</a> Points de Blessure, résultat modifié par votre Bonus d'Endurance et les PA de la Localisation la moins protégée, pour un minimum de 1 Blessure. Pour chaque État <em>En flammes</em> supplémentaire que vous subissez, ajoutez +1 aux Dégâts subis ; ainsi, si vous avez 3 États <em>En flammes</em>, vous subissez 1d10+2 Points de Blessure.Un unique État <em>En flamme</em> peut être retiré avec un Test d'Athlétisme, et chaque DR obtenu permet de retirer un État <em>En flamme</em> supplémentaire, la difficulté du Test étant ajustée en fonction des circonstances : il est plus facile de se défaire des flammes en se roulant dans le sable qu'au milieu d'une cuisine pleine d'huile.</p>",
"WFRP4E.Conditions.Bleeding" : "<p>Vous saignez abondamment. Perdez 1 Blessure à la fin de chaque round, en ignorant les modificateurs. De plus, vous subissez une pénalité de -10 lorsqu'il s'agit de faire un Test pour résister à une @Compendium[wfrp4e-core.items.kKccDTGzWzSXCBOb], une @Compendium[wfrp4e-core.items.kKccDTGzWzSXCBOb.1hQuVFZt9QnnbWzg] ou @Compendium[wfrp4e-core.items.kKccDTGzWzSXCBOb.M8XyRs9DN12XsFTQ]. Si vous atteignez 0 Blessure, vous ne perdez plus de Points de Blessure supplémentaires et tombez immédiatement inconscient (gagnez l'État <em>@Condition[Inconscient]</em>). A la fin du round, vous avez 10% de risque de mourir par État <em>Hémorragique</em> que vous possédez ; donc, si vous souffrez de 3 États <em>Hémorragiques</em>, vous mourrez de la perte de sang sur un résultat de 1 à 30. Si vous faites un double sur ce jet, vos blessures coagulent un peu et vous perdez 1 État <em>Hémorragique</em>. Vous ne pouvez pas reprendre vos esprits tant que tous les États <em>Hémorragiques</em> ne sont pas retirés (voir Traumatisme à la page 172).</p><p>On peut retirer un État <em>Hémorragique</em> avec : un Test de @Compendium[wfrp4e-core.items.HXZaV1CJhmTvcAz4] réussi, où chaque DR retire un État <em>Hémorragique</em> supplémentaire ; ou avec n'importe quel Sort ou Prière qui guérit les Points de Blessure, avec un État retiré par Point de Blessure guéri.</p><p>Une fois tous les États Hémorragiques retirés, gagnez un État <em>@Condition[Extenué]{Exténué}</em>.",
"WFRP4E.Conditions.Bleeding" : "<p>Vous saignez abondamment. Perdez 1 Blessure à la fin de chaque round, en ignorant les modificateurs. De plus, vous subissez une pénalité de -10 lorsqu'il s'agit de faire un Test pour résister à une @Compendium[wfrp4e-core.items.kKccDTGzWzSXCBOb], une @Compendium[wfrp4e-core.items.1hQuVFZt9QnnbWzg] ou @Compendium[wfrp4e-core.items.M8XyRs9DN12XsFTQ]. Si vous atteignez 0 Blessure, vous ne perdez plus de Points de Blessure supplémentaires et tombez immédiatement inconscient (gagnez l'État <em>@Condition[Inconscient]</em>). A la fin du round, vous avez 10% de risque de mourir par État <em>Hémorragique</em> que vous possédez ; donc, si vous souffrez de 3 États <em>Hémorragiques</em>, vous mourrez de la perte de sang sur un résultat de 1 à 30. Si vous faites un double sur ce jet, vos blessures coagulent un peu et vous perdez 1 État <em>Hémorragique</em>. Vous ne pouvez pas reprendre vos esprits tant que tous les États <em>Hémorragiques</em> ne sont pas retirés (voir Traumatisme à la page 172).</p><p>On peut retirer un État <em>Hémorragique</em> avec : un Test de @Compendium[wfrp4e-core.items.HXZaV1CJhmTvcAz4] réussi, où chaque DR retire un État <em>Hémorragique</em> supplémentaire ; ou avec n'importe quel Sort ou Prière qui guérit les Points de Blessure, avec un État retiré par Point de Blessure guéri.</p><p>Une fois tous les États Hémorragiques retirés, gagnez un État <em>@Condition[Extenué]{Exténué}</em>.",
"WFRP4E.Conditions.Blinded" : "<p>Vous n'êtes plus capables de voir clairement, que ce soit à cause d'un éclair lumineux ou d'un liquide que vous avez reçu dans les yeux.</p><p>Vous subissez une pénalité de -10 à tous les Tests qui impliquent la vue, et un adversaire qui vous attaque en combat rapproché gagne un bonus de +10 pour vous toucher.</p><p>Un État <em>Aveuglé</em> est retiré à la fin de chaque Round, a partir du prochain round.</p>",
"WFRP4E.Conditions.Broken" : "<p>Vous êtes terrifié, vaincu, paniqué ou encore convaincu que vous allez mourir. Pendant votre tour, votre Mouvement et votre Action doivent être utilisés pour vous éloigner le plus vite possible jusqu'à ce que vous vous retrouviez à l'abri, hors de vue de l'ennemi ; vous pourrez alors utiliser une Action sur une Compétence qui vous permettra de vous cacher plus efficacement. Vous subissez également une pénalité de -10 à tous les Tests autres que ceux impliquant la course ou la dissimulation.</p><p>Vous ne pouvez effectuer aucun Test pour récupérer de cet État si vous êtes <em>Engagé</em> avec un ennemi (voir page 159). Si vous n'êtes pas <em>Engagé</em>, à la fin de chaque Round, vous pouvez tenter un Test de Calme pour vous débarasser d'un État Brisé, où chaque DR retire un État Brisé supplémentaire, et dont la Difficulté est dictée par les circonstance dans lesquelles vous vous trouvez ; il est plus facile de vous reprendre pour recouvrer vos esprits si vous vous cachez derrière un tonneau au fond d'une impasse située loin du danger (Accessible +20) plutôt que lorsque vous vous trouvez à trois enjambées d'un démon salivant qui réclame votre sang (Très difficile -30).</p><p>Si vous passez un round entier à être caché hors de vue de tout ennemi, vous retirez 1 État Brisé.</p><p>Une fois que vous n'avez plus d'État Brisé, vous gagnez 1 État <em>@Condition[Extenué]{Exténué}</em>.</p>",
"WFRP4E.Conditions.Deafened" : "<p>Que ce soit à cause d'un bruit tonitruant ou d'un coup porté à la tête, vous ne parvenez plus à entendre correctement. Vous subissez une pénalité de -10 à tous les Tests impliquant l'audition, et tout adversaire qui vous attaque en combat rapproché par le flanc ou par derrière gagne un bonus supplémentaire de +10 pour vous toucher (ce bonus n'est pas augmenté avec de multiples États <em>Assourdi</em>). Un État <em>Assourdi</em> est retiré à la fin de chaque Round après le premier, souvent remplacé par un acouphène.</p>",
@ -1684,7 +1684,7 @@
"NAME.TraitWeapon": "Arme",
"NAME.TraitRanged": "A Distance",
"NAME.TraitArmour": "Armure",
"NAME.MeleeBrawling": "Corps à coprs (Bagarre)",
"NAME.MeleeBrawling": "Corps à corps (Bagarre)",
"NAME.AcuteSense":"Sens aiguisé",
"NAME.AnimalCare":"Soins des animaux",
"NAME.AnimalTraining":"Dressage",

6
loadScripts.js Normal file

File diff suppressed because one or more lines are too long

View File

@ -8,11 +8,12 @@
}
],
"url": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr",
"version": "7.1.2",
"version": "7.1.4",
"esmodules": [
"babele-register.js",
"addon-register.js",
"modules/import-stat-2.js"
"modules/import-stat-2.js",
"./loadScripts.js"
],
"styles": [
"patch-styles.css"
@ -116,7 +117,7 @@
}
],
"manifest": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr/raw/v10/module.json",
"download": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr/archive/foundryvtt-wh4-lang-fr-7.1.2.zip",
"download": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr/archive/foundryvtt-wh4-lang-fr-7.1.4.zip",
"id": "wh4-fr-translation",
"compatibility": {
"minimum": "11",

View File

@ -193,9 +193,6 @@ export default class ActorWfrp4e_fr extends Actor {
data.token.width = tokenSize;
}
// Auto calculation flags - if the user hasn't disabled various autocalculated values, calculate them
if (data.flags.autoCalcRun) {
// This is specifically for the Stride trait

View File

@ -445,7 +445,7 @@ export default async function statParserFR(statString, type = "npc") {
moneys[mondeyDef.key] += (moneyParsed && moneyParsed[1]) ? Number(moneyParsed[1]) : 0
}
}
} else if (def.name.includes('spell')) {
} else if (def.name.toLowerCase().includes('spell')) {
console.log("Found spells section!!!!", name, def, def.lore || "NO LORE")
// Lore management, firs pass
if (def.lore) {

17
package.json Normal file
View File

@ -0,0 +1,17 @@
{
"name": "foundryvtt-wh4-lang-fr-fr",
"version": "1.0.0",
"description": "WH4 Translation",
"main": "babele-register.js",
"type": "module",
"scripts": {
"build": "node scriptPacker.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr.git"
},
"author": "LeRatierBretonnien",
"license": "ISC"
}

View File

@ -1 +1 @@
MANIFEST-000625
MANIFEST-000697

View File

@ -1,7 +1,7 @@
2024/04/28-17:43:24.890969 7f32456006c0 Recovering log #623
2024/04/28-17:43:24.930778 7f32456006c0 Delete type=3 #621
2024/04/28-17:43:24.930913 7f32456006c0 Delete type=0 #623
2024/04/28-18:45:41.961020 7f3240a006c0 Level-0 table #628: started
2024/04/28-18:45:41.961044 7f3240a006c0 Level-0 table #628: 0 bytes OK
2024/04/28-18:45:41.967438 7f3240a006c0 Delete type=0 #626
2024/04/28-18:45:41.967620 7f3240a006c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal!suuYN87Al1ZZWtQQ' @ 0 : 0; will stop at (end)
2024/05/17-09:18:35.938297 7fe534c006c0 Recovering log #695
2024/05/17-09:18:35.991443 7fe534c006c0 Delete type=3 #693
2024/05/17-09:18:35.991560 7fe534c006c0 Delete type=0 #695
2024/05/17-09:19:36.697860 7fe52e2006c0 Level-0 table #700: started
2024/05/17-09:19:36.697941 7fe52e2006c0 Level-0 table #700: 0 bytes OK
2024/05/17-09:19:36.704693 7fe52e2006c0 Delete type=0 #698
2024/05/17-09:19:36.718677 7fe52e2006c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal!suuYN87Al1ZZWtQQ' @ 0 : 0; will stop at (end)

View File

@ -1,7 +1,7 @@
2024/04/28-17:27:04.787936 7f32442006c0 Recovering log #619
2024/04/28-17:27:04.844939 7f32442006c0 Delete type=3 #617
2024/04/28-17:27:04.845039 7f32442006c0 Delete type=0 #619
2024/04/28-17:41:38.907606 7f3240a006c0 Level-0 table #624: started
2024/04/28-17:41:38.907651 7f3240a006c0 Level-0 table #624: 0 bytes OK
2024/04/28-17:41:38.942854 7f3240a006c0 Delete type=0 #622
2024/04/28-17:41:38.983731 7f3240a006c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal!suuYN87Al1ZZWtQQ' @ 0 : 0; will stop at (end)
2024/05/17-08:21:24.883877 7fe5360006c0 Recovering log #691
2024/05/17-08:21:24.937952 7fe5360006c0 Delete type=3 #689
2024/05/17-08:21:24.938049 7fe5360006c0 Delete type=0 #691
2024/05/17-09:04:58.970123 7fe52e2006c0 Level-0 table #696: started
2024/05/17-09:04:58.970194 7fe52e2006c0 Level-0 table #696: 0 bytes OK
2024/05/17-09:04:58.976736 7fe52e2006c0 Delete type=0 #694
2024/05/17-09:04:58.984265 7fe52e2006c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal!suuYN87Al1ZZWtQQ' @ 0 : 0; will stop at (end)

View File

@ -1 +1 @@
MANIFEST-000627
MANIFEST-000699

View File

@ -1,7 +1,7 @@
2024/04/28-17:43:24.934713 7f32442006c0 Recovering log #625
2024/04/28-17:43:24.944295 7f32442006c0 Delete type=3 #623
2024/04/28-17:43:24.944400 7f32442006c0 Delete type=0 #625
2024/04/28-18:45:41.954565 7f3240a006c0 Level-0 table #630: started
2024/04/28-18:45:41.954613 7f3240a006c0 Level-0 table #630: 0 bytes OK
2024/04/28-18:45:41.960892 7f3240a006c0 Delete type=0 #628
2024/04/28-18:45:41.967606 7f3240a006c0 Manual compaction at level-0 from '!folders!3uquYH73ttCdoH0I' @ 72057594037927935 : 1 .. '!items!ylFhk7mGZOnAJTUT' @ 0 : 0; will stop at (end)
2024/05/17-09:18:35.994766 7fe5360006c0 Recovering log #697
2024/05/17-09:18:36.058245 7fe5360006c0 Delete type=3 #695
2024/05/17-09:18:36.058349 7fe5360006c0 Delete type=0 #697
2024/05/17-09:19:36.690166 7fe52e2006c0 Level-0 table #702: started
2024/05/17-09:19:36.690204 7fe52e2006c0 Level-0 table #702: 0 bytes OK
2024/05/17-09:19:36.697272 7fe52e2006c0 Delete type=0 #700
2024/05/17-09:19:36.697681 7fe52e2006c0 Manual compaction at level-0 from '!folders!3uquYH73ttCdoH0I' @ 72057594037927935 : 1 .. '!items!ylFhk7mGZOnAJTUT' @ 0 : 0; will stop at (end)

View File

@ -1,7 +1,7 @@
2024/04/28-17:27:04.848437 7f32438006c0 Recovering log #621
2024/04/28-17:27:04.906251 7f32438006c0 Delete type=3 #619
2024/04/28-17:27:04.906388 7f32438006c0 Delete type=0 #621
2024/04/28-17:41:38.834505 7f3240a006c0 Level-0 table #626: started
2024/04/28-17:41:38.834559 7f3240a006c0 Level-0 table #626: 0 bytes OK
2024/04/28-17:41:38.877839 7f3240a006c0 Delete type=0 #624
2024/04/28-17:41:38.878296 7f3240a006c0 Manual compaction at level-0 from '!folders!3uquYH73ttCdoH0I' @ 72057594037927935 : 1 .. '!items!ylFhk7mGZOnAJTUT' @ 0 : 0; will stop at (end)
2024/05/17-08:21:24.940735 7fe536a006c0 Recovering log #693
2024/05/17-08:21:25.000891 7fe536a006c0 Delete type=3 #691
2024/05/17-08:21:25.001036 7fe536a006c0 Delete type=0 #693
2024/05/17-09:04:58.954314 7fe52e2006c0 Level-0 table #698: started
2024/05/17-09:04:58.954354 7fe52e2006c0 Level-0 table #698: 0 bytes OK
2024/05/17-09:04:58.961425 7fe52e2006c0 Delete type=0 #696
2024/05/17-09:04:58.970001 7fe52e2006c0 Manual compaction at level-0 from '!folders!3uquYH73ttCdoH0I' @ 72057594037927935 : 1 .. '!items!ylFhk7mGZOnAJTUT' @ 0 : 0; will stop at (end)

View File

@ -1 +1 @@
MANIFEST-000625
MANIFEST-000697

View File

@ -1,7 +1,7 @@
2024/04/28-17:43:24.962480 7f32442006c0 Recovering log #623
2024/04/28-17:43:24.972290 7f32442006c0 Delete type=3 #621
2024/04/28-17:43:24.972475 7f32442006c0 Delete type=0 #623
2024/04/28-18:45:41.967713 7f3240a006c0 Level-0 table #628: started
2024/04/28-18:45:41.967740 7f3240a006c0 Level-0 table #628: 0 bytes OK
2024/04/28-18:45:41.973863 7f3240a006c0 Delete type=0 #626
2024/04/28-18:45:41.980359 7f3240a006c0 Manual compaction at level-0 from '!journal!cZtNgayIw2QFhC9u' @ 72057594037927935 : 1 .. '!journal!cZtNgayIw2QFhC9u' @ 0 : 0; will stop at (end)
2024/05/17-09:18:36.119253 7fe5360006c0 Recovering log #695
2024/05/17-09:18:36.181358 7fe5360006c0 Delete type=3 #693
2024/05/17-09:18:36.181531 7fe5360006c0 Delete type=0 #695
2024/05/17-09:19:36.704879 7fe52e2006c0 Level-0 table #700: started
2024/05/17-09:19:36.704925 7fe52e2006c0 Level-0 table #700: 0 bytes OK
2024/05/17-09:19:36.711528 7fe52e2006c0 Delete type=0 #698
2024/05/17-09:19:36.718713 7fe52e2006c0 Manual compaction at level-0 from '!journal!cZtNgayIw2QFhC9u' @ 72057594037927935 : 1 .. '!journal!cZtNgayIw2QFhC9u' @ 0 : 0; will stop at (end)

View File

@ -1,7 +1,7 @@
2024/04/28-17:27:04.966413 7f32438006c0 Recovering log #619
2024/04/28-17:27:05.022921 7f32438006c0 Delete type=3 #617
2024/04/28-17:27:05.023047 7f32438006c0 Delete type=0 #619
2024/04/28-17:41:38.943076 7f3240a006c0 Level-0 table #624: started
2024/04/28-17:41:38.943121 7f3240a006c0 Level-0 table #624: 0 bytes OK
2024/04/28-17:41:38.983374 7f3240a006c0 Delete type=0 #622
2024/04/28-17:41:38.983760 7f3240a006c0 Manual compaction at level-0 from '!journal!cZtNgayIw2QFhC9u' @ 72057594037927935 : 1 .. '!journal!cZtNgayIw2QFhC9u' @ 0 : 0; will stop at (end)
2024/05/17-08:21:25.076083 7fe536a006c0 Recovering log #691
2024/05/17-08:21:25.129785 7fe536a006c0 Delete type=3 #689
2024/05/17-08:21:25.129920 7fe536a006c0 Delete type=0 #691
2024/05/17-09:04:58.977091 7fe52e2006c0 Level-0 table #696: started
2024/05/17-09:04:58.977182 7fe52e2006c0 Level-0 table #696: 0 bytes OK
2024/05/17-09:04:58.984079 7fe52e2006c0 Delete type=0 #694
2024/05/17-09:04:58.984296 7fe52e2006c0 Manual compaction at level-0 from '!journal!cZtNgayIw2QFhC9u' @ 72057594037927935 : 1 .. '!journal!cZtNgayIw2QFhC9u' @ 0 : 0; will stop at (end)

View File

@ -1 +1 @@
MANIFEST-000625
MANIFEST-000697

View File

@ -1,7 +1,7 @@
2024/04/28-17:43:24.873345 7f32442006c0 Recovering log #623
2024/04/28-17:43:24.885936 7f32442006c0 Delete type=3 #621
2024/04/28-17:43:24.886102 7f32442006c0 Delete type=0 #623
2024/04/28-18:45:41.941413 7f3240a006c0 Level-0 table #628: started
2024/04/28-18:45:41.941464 7f3240a006c0 Level-0 table #628: 0 bytes OK
2024/04/28-18:45:41.947742 7f3240a006c0 Delete type=0 #626
2024/04/28-18:45:41.967576 7f3240a006c0 Manual compaction at level-0 from '!journal!50u8VAjdmovyr0hx' @ 72057594037927935 : 1 .. '!journal!yzw9I0r3hCK7PJnz' @ 0 : 0; will stop at (end)
2024/05/17-09:18:35.865103 7fe5360006c0 Recovering log #695
2024/05/17-09:18:35.934830 7fe5360006c0 Delete type=3 #693
2024/05/17-09:18:35.934985 7fe5360006c0 Delete type=0 #695
2024/05/17-09:19:36.676671 7fe52e2006c0 Level-0 table #700: started
2024/05/17-09:19:36.676749 7fe52e2006c0 Level-0 table #700: 0 bytes OK
2024/05/17-09:19:36.683586 7fe52e2006c0 Delete type=0 #698
2024/05/17-09:19:36.697623 7fe52e2006c0 Manual compaction at level-0 from '!journal!50u8VAjdmovyr0hx' @ 72057594037927935 : 1 .. '!journal!yzw9I0r3hCK7PJnz' @ 0 : 0; will stop at (end)

View File

@ -1,7 +1,7 @@
2024/04/28-17:27:04.728571 7f32438006c0 Recovering log #619
2024/04/28-17:27:04.784152 7f32438006c0 Delete type=3 #617
2024/04/28-17:27:04.784314 7f32438006c0 Delete type=0 #619
2024/04/28-17:41:38.794271 7f3240a006c0 Level-0 table #624: started
2024/04/28-17:41:38.794332 7f3240a006c0 Level-0 table #624: 0 bytes OK
2024/04/28-17:41:38.834256 7f3240a006c0 Delete type=0 #622
2024/04/28-17:41:38.878263 7f3240a006c0 Manual compaction at level-0 from '!journal!50u8VAjdmovyr0hx' @ 72057594037927935 : 1 .. '!journal!yzw9I0r3hCK7PJnz' @ 0 : 0; will stop at (end)
2024/05/17-08:21:24.818854 7fe536a006c0 Recovering log #691
2024/05/17-08:21:24.880933 7fe536a006c0 Delete type=3 #689
2024/05/17-08:21:24.881044 7fe536a006c0 Delete type=0 #691
2024/05/17-09:04:58.940179 7fe52e2006c0 Level-0 table #696: started
2024/05/17-09:04:58.940238 7fe52e2006c0 Level-0 table #696: 0 bytes OK
2024/05/17-09:04:58.947190 7fe52e2006c0 Delete type=0 #694
2024/05/17-09:04:58.969926 7fe52e2006c0 Manual compaction at level-0 from '!journal!50u8VAjdmovyr0hx' @ 72057594037927935 : 1 .. '!journal!yzw9I0r3hCK7PJnz' @ 0 : 0; will stop at (end)

View File

@ -1 +1 @@
MANIFEST-000625
MANIFEST-000697

View File

@ -1,7 +1,7 @@
2024/04/28-17:43:24.857922 7f32456006c0 Recovering log #623
2024/04/28-17:43:24.869590 7f32456006c0 Delete type=3 #621
2024/04/28-17:43:24.869738 7f32456006c0 Delete type=0 #623
2024/04/28-18:45:41.947867 7f3240a006c0 Level-0 table #628: started
2024/04/28-18:45:41.947892 7f3240a006c0 Level-0 table #628: 0 bytes OK
2024/04/28-18:45:41.954377 7f3240a006c0 Delete type=0 #626
2024/04/28-18:45:41.967589 7f3240a006c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end)
2024/05/17-09:18:35.800961 7fe534c006c0 Recovering log #695
2024/05/17-09:18:35.861612 7fe534c006c0 Delete type=3 #693
2024/05/17-09:18:35.861767 7fe534c006c0 Delete type=0 #695
2024/05/17-09:19:36.683771 7fe52e2006c0 Level-0 table #700: started
2024/05/17-09:19:36.683809 7fe52e2006c0 Level-0 table #700: 0 bytes OK
2024/05/17-09:19:36.690012 7fe52e2006c0 Delete type=0 #698
2024/05/17-09:19:36.697655 7fe52e2006c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end)

View File

@ -1,7 +1,7 @@
2024/04/28-17:27:04.668259 7f32442006c0 Recovering log #619
2024/04/28-17:27:04.724359 7f32442006c0 Delete type=3 #617
2024/04/28-17:27:04.724507 7f32442006c0 Delete type=0 #619
2024/04/28-17:41:38.759729 7f3240a006c0 Level-0 table #624: started
2024/04/28-17:41:38.759823 7f3240a006c0 Level-0 table #624: 0 bytes OK
2024/04/28-17:41:38.794010 7f3240a006c0 Delete type=0 #622
2024/04/28-17:41:38.878229 7f3240a006c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end)
2024/05/17-08:21:24.759453 7fe5360006c0 Recovering log #691
2024/05/17-08:21:24.814916 7fe5360006c0 Delete type=3 #689
2024/05/17-08:21:24.815076 7fe5360006c0 Delete type=0 #691
2024/05/17-09:04:58.947462 7fe52e2006c0 Level-0 table #696: started
2024/05/17-09:04:58.947511 7fe52e2006c0 Level-0 table #696: 0 bytes OK
2024/05/17-09:04:58.954096 7fe52e2006c0 Delete type=0 #694
2024/05/17-09:04:58.969969 7fe52e2006c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end)

View File

@ -1 +1 @@
MANIFEST-000268
MANIFEST-000340

View File

@ -1,8 +1,8 @@
2024/04/28-17:43:24.948599 7f32456006c0 Recovering log #266
2024/04/28-17:43:24.959242 7f32456006c0 Delete type=3 #264
2024/04/28-17:43:24.959338 7f32456006c0 Delete type=0 #266
2024/04/28-18:45:41.973975 7f3240a006c0 Level-0 table #271: started
2024/04/28-18:45:41.973999 7f3240a006c0 Level-0 table #271: 0 bytes OK
2024/04/28-18:45:41.980227 7f3240a006c0 Delete type=0 #269
2024/04/28-18:45:41.980373 7f3240a006c0 Manual compaction at level-0 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal!yfZxl4I7XAuUF6r3' @ 0 : 0; will stop at (end)
2024/04/28-18:45:41.980394 7f3240a006c0 Manual compaction at level-1 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal!yfZxl4I7XAuUF6r3' @ 0 : 0; will stop at (end)
2024/05/17-09:18:36.061831 7fe534c006c0 Recovering log #338
2024/05/17-09:18:36.115673 7fe534c006c0 Delete type=3 #336
2024/05/17-09:18:36.115838 7fe534c006c0 Delete type=0 #338
2024/05/17-09:19:36.711754 7fe52e2006c0 Level-0 table #343: started
2024/05/17-09:19:36.711813 7fe52e2006c0 Level-0 table #343: 0 bytes OK
2024/05/17-09:19:36.718459 7fe52e2006c0 Delete type=0 #341
2024/05/17-09:19:36.718736 7fe52e2006c0 Manual compaction at level-0 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal!yfZxl4I7XAuUF6r3' @ 0 : 0; will stop at (end)
2024/05/17-09:19:36.718776 7fe52e2006c0 Manual compaction at level-1 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal!yfZxl4I7XAuUF6r3' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2024/04/28-17:27:04.910216 7f32442006c0 Recovering log #262
2024/04/28-17:27:04.962545 7f32442006c0 Delete type=3 #260
2024/04/28-17:27:04.962678 7f32442006c0 Delete type=0 #262
2024/04/28-17:41:38.878615 7f3240a006c0 Level-0 table #267: started
2024/04/28-17:41:38.878700 7f3240a006c0 Level-0 table #267: 0 bytes OK
2024/04/28-17:41:38.907412 7f3240a006c0 Delete type=0 #265
2024/04/28-17:41:38.983649 7f3240a006c0 Manual compaction at level-0 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal!yfZxl4I7XAuUF6r3' @ 0 : 0; will stop at (end)
2024/04/28-17:41:38.983784 7f3240a006c0 Manual compaction at level-1 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal!yfZxl4I7XAuUF6r3' @ 0 : 0; will stop at (end)
2024/05/17-08:21:25.004562 7fe5360006c0 Recovering log #334
2024/05/17-08:21:25.072829 7fe5360006c0 Delete type=3 #332
2024/05/17-08:21:25.072953 7fe5360006c0 Delete type=0 #334
2024/05/17-09:04:58.961703 7fe52e2006c0 Level-0 table #339: started
2024/05/17-09:04:58.961771 7fe52e2006c0 Level-0 table #339: 0 bytes OK
2024/05/17-09:04:58.969548 7fe52e2006c0 Delete type=0 #337
2024/05/17-09:04:58.970030 7fe52e2006c0 Manual compaction at level-0 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal!yfZxl4I7XAuUF6r3' @ 0 : 0; will stop at (end)
2024/05/17-09:04:58.970097 7fe52e2006c0 Manual compaction at level-1 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal!yfZxl4I7XAuUF6r3' @ 0 : 0; will stop at (end)

Binary file not shown.

21
scriptPacker.js Normal file
View File

@ -0,0 +1,21 @@
import fs from "fs";
let path = "./scripts/"
let scripts = fs.readdirSync(path);
let count = 0;
let scriptObj = {};
for(let file of scripts)
{
let script = fs.readFileSync(path + file, {encoding:"utf8"});
scriptObj[file.split(".")[0]] = script;
count++;
}
let scriptLoader = `export default function()
{
mergeObject(game.wfrp4e.config.effectScripts, ${JSON.stringify(scriptObj)});
}`
fs.writeFileSync("./loadScripts.js", scriptLoader)
console.log(`Packed ${count} scripts`);

View File

@ -0,0 +1,2 @@
let item = await fromUuid("Compendium.wfrp4e-core.items.weczkAMPlTjX7lqU")
this.actor.createEmbeddedDocuments("Item", [item])

View File

@ -0,0 +1 @@
return args.item?.system?.isRanged && args.data.targets[0]?.actor?.sizeNum < 3

View File

@ -0,0 +1,25 @@
// The imbiber immediately
// takes 3 Poisoned Conditions that cannot be resisted at first,
await this.actor.addCondition("poisoned", 3)
// recovers a number of Wounds equal to their Toughness Bonus,
await this.actor.modifyWounds(this.actor.system.characteristics.t.bonus)
// and acquires the Regenerate Creature Trait.
const hasRegenerate = this.actor.has("Régénération")
if (hasRegenerate === undefined) {
fromUuid("Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR").then(trait => {
let traitItem = trait.toObject()
this.actor.createEmbeddedDocuments("Item", [traitItem], {fromEffect: this.effect.id})
})
}
this.script.scriptMessage(`<p><strong>${this.actor.prototypeToken.name}</strong> :
<ul>
<li>Reçoit 3 états Empoisonnés, sans Test de Résistance possible</li>
<li>Récupère ${this.actor.system.characteristics.t.bonus} Blessures</li>
<li>Acuiert le Trait de Creature Régénération.</li>
</ul>
C'est à Ranaldde choisir si la régénératin peut guérir de l'empoisonnement.</p>
<p>Lorsque tout les états Empoisonnés sont terminés, le Trait Régénération est perdu également.</p>`,
{ whisper: ChatMessage.getWhisperRecipients("GM"), blind: true })

View File

@ -0,0 +1 @@
this.actor.addCondition("blinded", 3)

View File

@ -0,0 +1,4 @@
let item = await fromUuid("Compendium.wfrp4e-core.items.8piWcBKFlQ2J1E3A")
let data = item.toObject();
data.system.location.key= this.item.system.location.key
this.actor.createEmbeddedDocuments("Item", [data])

View File

@ -0,0 +1,5 @@
if (!args.flags.quietenedApplied)
{
args.fields.modifier += 10;
args.flags.quietenedApplied = true
}

View File

@ -0,0 +1 @@
return !args.options.terror && !args.extendedTest?.flags.wfrp4e?.fear

View File

@ -0,0 +1 @@
return !args.skill?.name.includes(game.i18n.localize("NAME.Row")) && !args.skill?.name.includes(game.i18n.localize("NAME.Sail"));

View File

@ -0,0 +1,22 @@
let spells = await game.wfrp4e.utility.findAll("spell", "Chargement des sorts")
let text = (await game.wfrp4e.tables.rollTable("random-caster", {hideDSN: true})).result
lore = Array.from(text.matchAll(/{(.+?)}/gm))[0][1]
if (text == "GM's Choice")
{
return this.script.scriptNotification(text)
}
if (spellsWithLore.length > 0)
{
let spellsWithLore = spells.filter(i => game.wfrp4e.config.magicLores[i.system.lore.value] == lore)
let selectedSpell = spellsWithLore[Math.floor(CONFIG.Dice.randomUniform() * spellsWithLore.length)]
this.script.scriptNotification(selectedSpell.name);
this.actor.createEmbeddedDocuments("Item", [selectedSpell])
}
else
{
ui.notifications.notify(`Impossible de trouver le sort ${lore}. Essayez à nouveau`)
}

View File

@ -0,0 +1,6 @@
let item = await fromUuid("Compendium.wfrp4e-core.items.4CMKeDTDrRQZbPIJ")
let fixation = (await game.wfrp4e.tables.rollTable("fixations"))
let data = item.toObject();
data.system.specification.value = fixation.result;
this.item.updateSource({name : this.item.name += ` (${fixation.result})`});
this.actor.createEmbeddedDocuments("Item", [data], {fromEffect : this.effect.id})

View File

@ -0,0 +1 @@
return !["t", "wp"].includes(args.characteristic)

View File

@ -0,0 +1,18 @@
let table = game.wfrp4e.tables.findTable("mutatephys");
if (!table)
{
return ui.notifications.error("La table des Mutations n'a pas été trouvée. Assurez vous que la table avec la clé `mutatephys` est bien importée dans le monde.")
}
let result = (await table.roll()).results[0];
let uuid = `Compendium.${result.documentCollection}.${result.documentId}`
let item = await fromUuid(uuid);
if (item)
{
this.script.scriptNotification(`${item.name} added`)
this.actor.createEmbeddedDocuments("Item", [item])
}
else
{
ui.notifications.error("L'item ne peut être trouvé: " + uuid)
}

View File

@ -0,0 +1,21 @@
let location = this.item.system.location.key;
if (location)
{
let dropped = this.item.system.weaponsAtLocation;
if (dropped.length)
{
this.script.scriptNotification(`Lache ${dropped.map(i => i.name).join(", ")}!`)
for(let weapon of dropped)
{
await weapon.system.toggleEquip();
}
}
}
let roll = await new Roll("max(1, 1d10 - @system.characteristics.t.bonus)", this.actor).roll()
roll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Durée)`}));
this.effect.updateSource({"duration.rounds" : roll.total})

View File

@ -0,0 +1,9 @@
if (args.skill?.name != game.i18n.localize("NAME.Gossip"))
{
return true;
}
else
{
args.data.canReverse = true; // Kind of a kludge here, the talent Tests has a specific condition, but the description simply says "any gossip test can be reversed" so check it here instead of submission
}

View File

@ -0,0 +1,6 @@
if (args.applyAP && args.modifiers.ap.metal)
{
args.modifiers.ap.ignored += args.modifiers.ap.metal
args.modifiers.ap.details.push("<strong>" + this.effect.name + "</strong>: Ignore le métal (" + args.modifiers.ap.metal + ")");
args.modifiers.ap.metal = 0
}

View File

@ -0,0 +1,3 @@
let item = await fromUuid("Compendium.wfrp4e-core.items.GbDyBCu8ZjDp6dkj")
let data = item.toObject();
this.actor.createEmbeddedDocuments("Item", [data], {fromEffect : this.effect.id})

View File

@ -0,0 +1,10 @@
let item1 = await fromUuid("Compendium.wfrp4e-core.items.3S4OYOZLauXctmev")
let item2 = await fromUuid("Compendium.wfrp4e-core.items.7mCcI3q7hgWcmbBU")
let data1 = item1.toObject();
data1.system.location.key = this.item.system.location.key
let data2 = item2.toObject();
data2.system.location.key = this.item.system.location.key
this.actor.createEmbeddedDocuments("Item", [data1, data2], {fromEffect: this.effect.id})

View File

@ -0,0 +1 @@
args.fields.modifier -= 20;

View File

@ -0,0 +1,7 @@
this.actor.setupSkill(game.i18n.localize("NAME.Cool"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => {
await test.roll()
if (test.failed)
{
this.actor.addCondition("stunned")
}
})

View File

@ -0,0 +1,7 @@
if (!args.flags.strikeToStun)
{
args.flags.strikeToStun = true
args.fields.modifier += 20;
args.fields.hitLocation = "head";
}
args.fields.successBonus++;

View File

@ -0,0 +1 @@
return args.options.terror || args.extendedTest?.flags.wfrp4e?.fear

View File

@ -0,0 +1,6 @@
let type = this.item.getFlag("wfrp4e", "breath");
if (["feu", "electricité", "poison"].includes(type))
{
args.applyAP = false;
}

View File

@ -0,0 +1 @@
args.fields.modifier -= 20

View File

@ -0,0 +1,31 @@
if (!this.item.name.includes("(") || this.item.system.tests.value.includes("Terrain"))
{
let tests = this.item.system.tests.value
let name = this.item.name
// If name already specifies, make sure tests value reflects that
if (name.includes("("))
{
let terrain = name.split("(")[1].split(")")[0]
tests = tests.replace("Terrain", terrain)
}
else // If no sense specified, provide dialog choice
{
let choice = await ItemDialog.create(ItemDialog.objectToArray({
coastal : "Côtes",
deserts : "Déserts",
marshes : "Marches",
rocky : "Rocailles",
tundra : "Tundra",
woodlands : "Forêts"
}, this.item.img), 1, "Choisir le Terrain");
if (choice[0])
{
name = `${name.split("(")[0].trim()} (${choice[0].name})`
tests = tests.replace("Terrain", "Terrain " + choice[0].name )
}
}
this.effect.updateSource({name})
this.item.updateSource({name, "system.tests.value" : tests})
}

View File

@ -0,0 +1 @@
return !args.skill?.name.includes(game.i18n.localize("NAME.Language"));

View File

@ -0,0 +1,40 @@
let characteristics = {
"ws" : 5,
"bs" : 5,
"s" : 5,
"t" : 0,
"i" : 5,
"ag" : 5,
"dex" : 5,
"int" : 0,
"wp" : 5,
"fel" : 5
}
let items = []
let updateObj = this.actor.toObject();
let talents = (await Promise.all([game.wfrp4e.tables.rollTable("talents"), game.wfrp4e.tables.rollTable("talents"), game.wfrp4e.tables.rollTable("talents")])).map(i => i.text)
for (let ch in characteristics)
{
updateObj.system.characteristics[ch].modifier += characteristics[ch];
}
for (let talent of talents)
{
let talentItem = await game.wfrp4e.utility.findTalent(talent)
if (talentItem)
{
items.push(talentItem.toObject());
}
else
{
ui.notifications.warn(`Could not find ${talent}`, {permanent : true})
}
}
await this.actor.update(updateObj)
this.actor.createEmbeddedDocuments("Item", items);

View File

@ -0,0 +1 @@
return args.characteristic != "t"

View File

@ -0,0 +1 @@
args.actor.details.move.run += 4

View File

@ -0,0 +1,2 @@
await this.actor.addCondition("ablaze", 2)
await this.script.scriptMessage(await this.actor.applyBasicDamage(this.effect.sourceTest.result.damage, {suppressMsg: true}))

View File

@ -0,0 +1 @@
return args.characteristic != "wp"

View File

@ -0,0 +1,6 @@
let test = await this.actor.setupCharacteristic("wp", {skipTargets: true, appendTitle : ` ${this.effect.name}`})
await test.roll()
if (test.succeeded)
{
this.effect.delete();
}

View File

@ -0,0 +1 @@
args.options.cardsharp = true;

View File

@ -0,0 +1,5 @@
if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)
{
args.actor.addCondition("bleeding", 2);
}

View File

@ -0,0 +1 @@
return ["ws", "bs", "s", "ag", "t", "dex"].includes(args.characteristic)

View File

@ -0,0 +1,7 @@
let test = await args.actor.setupCharacteristic("wp", {skipTargets: true, appendTitle : " - " + this.effect.name, context : {failure: "Gain d'un état Assomé"}})
await test.roll();
if (test.failed)
{
args.actor.addCondition("stunned")
}

View File

@ -0,0 +1 @@
this.actor.status.addArmour(1, {source: this.effect, magical : true})

View File

@ -0,0 +1 @@
this.script.scriptNotification(`Ne peut saisir ${this.effect.name}!`);

View File

@ -0,0 +1,3 @@
let healed = parseInt(this.effect.sourceTest.result.SL)
this.actor.modifyWounds(healed)
this.script.scriptMessage(`Soins de ${healed} Blessures`)

View File

@ -0,0 +1,19 @@
let test = await this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {skipTargets: true, appendTitle : " - " + this.effect.name})
await test.roll();
if (!test.succeeded)
{
let item = await fromUuid("Compendium.wfrp4e-core.items.ZhMADOqoo0y8Q9bx")
let data = item.toObject();
if (this.item.system.location.key == "rLeg")
{
data.system.location.value = "Pied droit"
data.system.location.key = "rToe";
}
else if (this.item.system.location.key == "lLeg")
{
data.system.location.value = "Pied gauche"
data.system.location.key = "lToe";
}
this.actor.createEmbeddedDocuments("Item", [data])
}
this.effect.delete();

View File

@ -0,0 +1 @@
args.options.ballockKnife = true;

View File

@ -0,0 +1,7 @@
this.actor.setupSkill(game.i18n.localize("NAME.Cool"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => {
await test.roll();
if (test.failed)
{
this.actor.addCondition("stunned", 3)
}
})

View File

@ -0,0 +1,2 @@
if (args.effect.conditionId == "bleeding")
args.data.damage -= 1

View File

@ -0,0 +1 @@
return !args.skill?.name?.includes(game.i18n.localize("NAME.Sail"))

View File

@ -0,0 +1,10 @@
let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.locations), 1, "Choisir une localisation");
let location = choice[0].id;
let itemTargeted = this.actor.items.get(this.effect.getFlag("wfrp4e", "itemTargets")[0])
if (itemTargeted)
{
itemTargeted.update({[`system.APdamage.${location}`] : itemTargeted.system.APdamage[location] + 1})
}

View File

@ -0,0 +1 @@
return args.options.reload

View File

@ -0,0 +1 @@
return args.type != "channelling" && !args.skill?.name.includes(game.i18n.localize("NAME.Channelling"))

View File

@ -0,0 +1,5 @@
if (args.item.range && args.item.range.bands)
{
args.item.range.bands[game.i18n.localize("Long Range")].modifier = 0
args.item.range.bands[game.i18n.localize("Extreme")].modifier /= 2
}

View File

@ -0,0 +1,4 @@
let item = await fromUuid("Compendium.wfrp4e-core.items.eWPN3CV2Eddwz8aM")
let data = item.toObject();
data.system.location.value = "Dos"
this.actor.createEmbeddedDocuments("Item", [data], {fromEffect: this.effect.id})

View File

@ -0,0 +1 @@
game.wfrp4e.utility.postCorruptionTest(this.item.system.specification.value, {speaker : {alias: this.actor.prototypeToken.name}})

View File

@ -0,0 +1 @@
return args.skill?.name == game.i18n.localize("NAME.Bribery") || args.skill?.name.includes(game.i18n.localize("NAME.Stealth"));

View File

@ -0,0 +1 @@
return args.item?.system.attackType

View File

@ -0,0 +1 @@
return !["fel"].includes(args.characteristic)

View File

@ -0,0 +1 @@
return args.item?.name != game.i18n.localize("NAME.Navigation")

View File

@ -0,0 +1 @@
args.fields.slBonus += this.actor.system.characteristics.wp.bonus

View File

@ -0,0 +1,9 @@
if (!["rLeg", "lLeg"].includes(this.effect.getFlag("wfrp4e", "location")))
return true;
if (args.options.dodge)
{
args.abort = true;
this.script.scriptNotification("Impossible d'Esquiver!")
}
return ["t", "int", "wp", "fel"].includes(args.characteristic)

View File

@ -0,0 +1,9 @@
if (args.totalWoundLoss > 0)
{
let test = await args.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})
await test.roll();
if (test.failed && parseInt(args.opposedTest.attackerTest.result.SL) > 0)
{
args.actor.addCondition("stunned", parseInt(args.opposedTest.attackerTest.result.SL))
}
}

View File

@ -0,0 +1,18 @@
let skill = `Métier (${this.item.parenthesesText})`
let currentCareer = this.actor.system.currentCareer;
let existingSkill = this.actor.itemTypes.skill.find(i => i.name == skill);
if (!currentCareer) return
let inCurrentCareer = currentCareer.system.skills.includes(skill);
if (existingSkill && inCurrentCareer)
{
existingSkill.system.advances.costModifier = -5;
}
else
{
currentCareer.system.skills.push(skill);
}

Some files were not shown because too many files have changed in this diff Show More