diff --git a/components/character/editor/AbilityEditor.vue b/components/character/editor/AbilityEditor.vue deleted file mode 100644 index d76352f..0000000 --- a/components/character/editor/AbilityEditor.vue +++ /dev/null @@ -1,38 +0,0 @@ - - - \ No newline at end of file diff --git a/components/character/editor/AspectSelector.vue b/components/character/editor/AspectSelector.vue deleted file mode 100644 index e4139d4..0000000 --- a/components/character/editor/AspectSelector.vue +++ /dev/null @@ -1,38 +0,0 @@ - - - \ No newline at end of file diff --git a/components/character/editor/LevelEditor.vue b/components/character/editor/LevelEditor.vue deleted file mode 100644 index 50cdbdb..0000000 --- a/components/character/editor/LevelEditor.vue +++ /dev/null @@ -1,56 +0,0 @@ - - - \ No newline at end of file diff --git a/components/character/editor/PeopleSelector.vue b/components/character/editor/PeopleSelector.vue deleted file mode 100644 index c19c345..0000000 --- a/components/character/editor/PeopleSelector.vue +++ /dev/null @@ -1,30 +0,0 @@ - - - \ No newline at end of file diff --git a/components/character/editor/TrainingEditor.vue b/components/character/editor/TrainingEditor.vue deleted file mode 100644 index d478e37..0000000 --- a/components/character/editor/TrainingEditor.vue +++ /dev/null @@ -1,69 +0,0 @@ - - - \ No newline at end of file diff --git a/composables/useShortcuts.ts b/composables/useShortcuts.ts index 65b1ab5..c78fbb0 100644 --- a/composables/useShortcuts.ts +++ b/composables/useShortcuts.ts @@ -181,7 +181,7 @@ export const _useShortcuts = () => { return false }) - onMounted(() => { + tryOnMounted(() => { metaSymbol.value = macOS.value ? '⌘' : 'Ctrl' }) diff --git a/db.sqlite b/db.sqlite index a792716..841e83e 100644 Binary files a/db.sqlite and b/db.sqlite differ diff --git a/db.sqlite-shm b/db.sqlite-shm index fe9ac28..b43e6cc 100644 Binary files a/db.sqlite-shm and b/db.sqlite-shm differ diff --git a/db.sqlite-wal b/db.sqlite-wal index e69de29..de5d526 100644 Binary files a/db.sqlite-wal and b/db.sqlite-wal differ diff --git a/layouts/default.vue b/layouts/default.vue index 08fb970..d1ebf65 100644 --- a/layouts/default.vue +++ b/layouts/default.vue @@ -18,15 +18,16 @@ - Personnages + Personnages - - Tous les personnages + + Personnages publics + Nouveau personnage -
- +
+
@@ -90,26 +91,26 @@ const path = computed(() => route.value.params.path ? decodeURIComponent(unifySl await Content.init(); const tree = new TreeDOM((item, depth) => { - return dom('div', { class: 'group flex items-center ps-2 outline-none relative cursor-pointer', style: { 'padding-left': `${depth / 2 - 0.5}em` } }, [dom('div', { class: ['flex flex-1 items-center hover:border-accent-blue hover:text-accent-purple max-w-full cursor-pointer font-medium'], attributes: { 'data-private': item.private } }, [ - icon('radix-icons:chevron-right', { class: 'h-4 w-4 transition-transform absolute group-data-[state=open]:rotate-90', style: { 'left': `${depth / 2 - 1.5}em` } }), + return dom('div', { class: 'group flex items-center ps-2 outline-none relative cursor-pointer', style: { 'padding-inline-start': `${depth / 1.5}em` } }, [dom('div', { class: ['flex flex-1 items-center hover:border-accent-blue hover:text-accent-purple max-w-full cursor-pointer font-medium'], attributes: { 'data-private': item.private } }, [ + icon('radix-icons:chevron-right', { class: 'h-4 w-4 transition-transform absolute group-data-[state=open]:rotate-90', style: { 'left': `${depth / 1.5 - 1}em` } }), dom('div', { class: 'pl-1.5 py-1.5 flex-1 truncate', text: item.title, attributes: { title: item.title } }), item.private ? popper(dom('span', { class: 'flex' }, [icon('radix-icons:lock-closed', { class: 'mx-1' })]), { delay: 150, offset: 8, placement: 'right', arrow: true, content: [text('Privé')], class: 'TooltipContent border border-light-30 dark:border-dark-30 px-2 py-1 bg-light-10 dark:bg-dark-10 text-light-70 dark:text-dark-70 z-50' }) : undefined, ])]); }, (item, depth) => { - return dom('div', { class: 'group flex items-center ps-2 outline-none relative cursor-pointer', style: { 'padding-left': `${depth / 2 - 0.5}em` } }, [link({ class: ['flex flex-1 items-center hover:border-accent-blue hover:text-accent-purple max-w-full'], attributes: { 'data-private': item.private }, active: 'text-accent-blue' }, item.path ? { name: 'explore-path', params: { path: item.path } } : undefined, [ + return dom('div', { class: 'group flex items-center ps-2 outline-none relative cursor-pointer', style: { 'padding-inline-start': `${depth / 1.5}em` } }, [link({ class: ['flex flex-1 items-center hover:border-accent-blue hover:text-accent-purple max-w-full'], attributes: { 'data-private': item.private }, active: 'text-accent-blue' }, item.path ? { name: 'explore-path', params: { path: item.path } } : undefined, [ icon(iconByType[item.type], { class: 'w-5 h-5', width: 20, height: 20 }), dom('div', { class: 'pl-1.5 py-1.5 flex-1 truncate', text: item.title, attributes: { title: item.title } }), item.private ? popper(dom('span', { class: 'flex' }, [icon('radix-icons:lock-closed', { class: 'mx-1' })]), { delay: 150, offset: 8, placement: 'right', arrow: true, content: [text('Privé')], class: 'TooltipContent border border-light-30 dark:border-dark-30 px-2 py-1 bg-light-10 dark:bg-dark-10 text-light-70 dark:text-dark-70 z-50' }) : undefined, ])]); }, (item) => item.navigable); -(path.value?.split('/').map((e, i, a) => a.slice(0, i).join('/')) ?? []).forEach(e => tree.toggle(e, true)); +(path.value?.split('/').map((e, i, a) => a.slice(0, i).join('/')) ?? []).forEach(e => tree.toggle(tree.tree.search('path', e)[0], true)); const treeParent = useTemplateRef('treeParent'); const unmount = useRouter().afterEach((to, from, failure) => { if(failure) return; - to.name === 'explore-path' && (unifySlug(to.params.path).split('/').map((e, i, a) => a.slice(0, i).join('/')) ?? []).forEach(e => tree.toggle(e, true)); + to.name === 'explore-path' && (unifySlug(to.params.path ?? '').split('/').map((e, i, a) => a.slice(0, i).join('/')) ?? []).forEach(e => tree.toggle(tree.tree.search('path', e)[0], true)); }); watch(route, () => { diff --git a/pages/character/[id]/edit.client.vue b/pages/character/[id]/edit.client.vue index 823978d..3198651 100644 --- a/pages/character/[id]/edit.client.vue +++ b/pages/character/[id]/edit.client.vue @@ -16,7 +16,7 @@ onMounted(() => { useShortcuts({ "Meta_S": () => builder.save(false), - }) + }); } }); }) diff --git a/pages/character/index.client.vue b/pages/character/index.client.vue index 28e5aba..1631297 100644 --- a/pages/character/index.client.vue +++ b/pages/character/index.client.vue @@ -1,5 +1,7 @@ \ No newline at end of file diff --git a/shared/character-config.json b/shared/character-config.json index 49cd285..bbf4320 100644 --- a/shared/character-config.json +++ b/shared/character-config.json @@ -185,1084 +185,86 @@ "description": "Les humains, originaire d'un tout autre monde, ont subit un cataclysme qui les a projeté dans les terres d'Erina. En tant que civilisation dépourvue de magie, ils sont plus specialisés, gagnant moins de statistiques mais pouvant plus tôt ou plus fréquemment obtenir certains bonus.", "options": { "1": [ - { - "description": "+35 points de statistiques.\n+14 PV max.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 35 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 14 - } - ] - } + "lzzn957vhac2rnaf97b1h2gyflf7oy9u" ], "2": [ - { - "description": "+1 point de statistique.\n+3 PV max.\n+2 mana max.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 3 - }, - { - "category": "value", - "operation": "add", - "property": "mana", - "value": 2 - } - ] - }, - { - "description": "+1 point de compétence.\n+6 PV max.\n+3 mana max.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "ability", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 6 - }, - { - "category": "value", - "operation": "add", - "property": "mana", - "value": 3 - } - ] - } + "lxucqrfvg76vkmbz3h9e9q6d9ju0zjl0", + "5gadn1dxe6n1j3xjvlcf7mowxftsw7kn" ], "3": [ - { - "description": "+2 points de statistiques.\n+1 point de compétence.\n+3 PV max.\n+1 mana max.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 2 - }, - { - "category": "value", - "operation": "add", - "property": "ability", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 3 - }, - { - "category": "value", - "operation": "add", - "property": "mana", - "value": 1 - } - ] - } + "4w03h8xzjluombr5jgncinh5nek4at5u" ], "4": [ - { - "description": "+1 point de statistique.\n+2 points de compétences.\n+4 PV max.\n+2 mana max.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "ability", - "value": 2 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 4 - }, - { - "category": "value", - "operation": "add", - "property": "mana", - "value": 2 - } - ] - } + "4lxwrhbvxavu520i04dt58ovx31myj1l" ], "5": [ - { - "description": "+1 point de statistique.\n+2 points de compétences.\n+4 PV max.\n+2 mana max.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "ability", - "value": 2 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 4 - }, - { - "category": "value", - "operation": "add", - "property": "mana", - "value": 2 - } - ] - }, - { - "description": "+1 point de statistique.\n+1 transformation par jour.\n+8 PV max.\n+4 mana max.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "transformation", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 8 - }, - { - "category": "value", - "operation": "add", - "property": "mana", - "value": 4 - } - ] - }, - { - "description": "+2 points de statistiques.\n+7 PV max.\n+2 mana max.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 2 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 7 - }, - { - "category": "value", - "operation": "add", - "property": "mana", - "value": 2 - } - ] - } + "gvsijzlj3wznhvk0uikpznbzdqv34qrs", + "s15lx58vega0q02jx0563nzcunygeo5c", + "y24gprm397s7dx578cv4uhliedg73hkw" ], "6": [ - { - "description": "+1 point de statistique.\n+3 PV max.\n+3 mana max.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 3 - }, - { - "category": "value", - "operation": "add", - "property": "mana", - "value": 3 - } - ] - }, - { - "description": "+1 point de statistique.\n+3 points de compétences.\n+1 sort maitrisé.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "ability", - "value": 3 - }, - { - "category": "value", - "operation": "add", - "property": "spellslots", - "value": 1 - } - ] - } + "pffkc0ms5mhcmztrxv2ifhq6ydiv902o", + "42bz5a6hqi80fmi3roudx7za3fjnlna3" ], "7": [ - { - "description": "+2 points de statistiques.\n+3 PV max.\n+5 mana max.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 2 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 3 - }, - { - "category": "value", - "operation": "add", - "property": "mana", - "value": 5 - } - ] - }, - { - "description": "+2 points de statistiques.\n+5 PV max.\n+2 mana max.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 2 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 5 - }, - { - "category": "value", - "operation": "add", - "property": "mana", - "value": 2 - } - ] - } + "vkftntfuscpzy7avxyv4gkbw57mwuozi", + "fr6iflohcwavqv8g4br5o172lo1w0o1y" ], "8": [ - { - "description": "+3 points de statistiques.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 3 - } - ] - }, - { - "description": "+1 point de statistique.\n+6 PV max.\n+6 mana max.\n+1 sort maitrisé.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "spellslots", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 6 - }, - { - "category": "value", - "operation": "add", - "property": "mana", - "value": 6 - } - ] - } + "ty5pd7kp5qgf1y0sqm9xm88djtpqdeso", + "xw8e1mmqdtvuuqtd6g6spf4ql60l1l9h" ], "9": [ - { - "description": "+1 point de statistique.\n+3 PV max.\n+5 mana max.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 3 - }, - { - "category": "value", - "operation": "add", - "property": "mana", - "value": 5 - } - ] - }, - { - "description": "+1 point de statistique.\n+2 points de compétences.\n+2 PV max.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "ability", - "value": 2 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 2 - } - ] - } + "q0ddn6z4s5v9092p0w321qm62hgfz6bi", + "gk3kuvenl1ne0d7cmgpqhffuictwg1mw" ], "10": [ - { - "description": "+2 points de statistiques.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 2 - } - ] - }, - { - "description": "+1 point de statistique.\n+1 transformation par jour.\n+2 points de compétences.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "transformation", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "ability", - "value": 2 - } - ] - }, - { - "description": "+1 au modifieur de votre choix.\n+1 point de compétence.", - "effect": [ - { - "category": "choice", - "id": "af9da6ba23129e4ed7adc181b71ea5f8", - "options": [ - { - "text": "Force", - "category": "value", - "operation": "add", - "value": 1, - "property": "modifier/strength" - }, - { - "text": "Dextérité", - "category": "value", - "operation": "add", - "value": 1, - "property": "modifier/dexterity" - }, - { - "text": "Constitution", - "category": "value", - "operation": "add", - "value": 1, - "property": "modifier/constitution" - }, - { - "text": "Intelligence", - "category": "value", - "operation": "add", - "value": 1, - "property": "modifier/intelligence" - }, - { - "text": "Curiosité", - "category": "value", - "operation": "add", - "value": 1, - "property": "modifier/curiosity" - }, - { - "text": "Charisme", - "category": "value", - "operation": "add", - "value": 1, - "property": "modifier/charisma" - }, - { - "text": "Psyché", - "category": "value", - "operation": "add", - "value": 1, - "property": "modifier/psyche" - } - ] - }, - { - "category": "value", - "operation": "add", - "property": "ability", - "value": 1 - } - ] - } + "2ftgh4e79xkzp05kt0xnn2o2ifo1plev", + "0b2t1ubfukhybi18is67s7zzmah27ona", + "0j9fujnkcevbx0fax8y7d5ge60c74pkk" ], "11": [ - { - "description": "+1 point de statistique.\n+7 PV max.\n+1 mana max.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 7 - }, - { - "category": "value", - "operation": "add", - "property": "mana", - "value": 1 - } - ] - }, - { - "description": "+1 point de statistique.\n+2 PV max.\n+5 mana max.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 2 - }, - { - "category": "value", - "operation": "add", - "property": "mana", - "value": 5 - } - ] - }, - { - "description": "+1 point de statistique.\n+2 points de compétences.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "ability", - "value": 2 - } - ] - } + "17g09264zrgnkjql1kyk4wuv498ywjy1", + "9eowun33q57t0ihdibl41348etflhuz6", + "0wszsrkcn2xez98cai8bnl757jl2oq2d" ], "12": [ - { - "description": "+2 points de statistiques.\n+1 sort maitrisé.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 2 - }, - { - "category": "value", - "operation": "add", - "property": "spellslots", - "value": 1 - } - ] - }, - { - "description": "+2 points de statistiques.\n+8 PV max.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 2 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 8 - } - ] - }, - { - "description": "+2 points de statistiques.\n+7 mana max.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 2 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 7 - } - ] - } + "yut7s8ko49uv5cgp8p257w6ww517xtc7", + "fweoy5ut4e21ddz57g4uydjxj4yp28sm", + "kdq78so50ehc6a6dbygi50woieir0td7" ], "13": [ - { - "description": "+1 point de statistique.\n+1 point de compétence.\n+2 PV max.\n+2 mana max.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "ability", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 2 - }, - { - "category": "value", - "operation": "add", - "property": "mana", - "value": 2 - } - ] - }, - { - "description": "+1 point de statistique.\n+1 transformation par jour.\n+4 PV max.\n+4 mana max.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "transformation", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 4 - }, - { - "category": "value", - "operation": "add", - "property": "mana", - "value": 4 - } - ] - } + "2wmdst5nzump32tqzjla1nhah6b4xlun", + "ku75g8by5922259p92wifgk4yo4vnpeo" ], "14": [ - { - "description": "+3 points de statistiques.\n+3 PV max.\n+5 mana max.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 3 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 3 - }, - { - "category": "value", - "operation": "add", - "property": "mana", - "value": 5 - } - ] - }, - { - "description": "+3 points de statistiques.\n+6 PV max.\n+1 mana max.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 3 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 6 - }, - { - "category": "value", - "operation": "add", - "property": "mana", - "value": 1 - } - ] - } + "j7vnwxmliu2rpf9gsgnib39kzcqkfgo7", + "gyqhh4lf3xy7qz983lh0le6byj013qak" ], "15": [ - { - "description": "+1 point de statistique.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 1 - } - ] - }, - { - "description": "+1 point de compétence.\n+5 PV max.\n+5 mana max.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "ability", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 5 - }, - { - "category": "value", - "operation": "add", - "property": "mana", - "value": 5 - } - ] - } + "ei7wm640sqixqz1ce0suyqpr6hvtpul5", + "0u0ja87wxvl5cyhw0gkxks7u8l6zew8l" ], "16": [ - { - "description": "+1 point de statistique.\n+3 PV max.\n+5 mana max.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 3 - }, - { - "category": "value", - "operation": "add", - "property": "mana", - "value": 5 - } - ] - }, - { - "description": "+1 point de statistique.\n+5 PV max.\n+2 mana max.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 5 - }, - { - "category": "value", - "operation": "add", - "property": "mana", - "value": 2 - } - ] - } + "do46po1ewfxvzt1p8v3fsypn68qqs1os", + "4uhj49zt0l594tb3jbo955okel6nl1q5" ], "17": [ - { - "description": "+2 points de statistiques.\n+1 point de compétence.\n+1 sort maitrisé.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 2 - }, - { - "category": "value", - "operation": "add", - "property": "ability", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "spellslots", - "value": 1 - } - ] - }, - { - "description": "+1 point de statistique.\n+1 transformation par jour.\n+2 points de compétences.\n+1 sort maitrisé.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "transformation", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "ability", - "value": 2 - }, - { - "category": "value", - "operation": "add", - "property": "spellslots", - "value": 1 - } - ] - }, - { - "description": "+1 point de statistique.\n+1 point de compétence.\n+7 PV max.\n+5 mana max.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "ability", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 7 - }, - { - "category": "value", - "operation": "add", - "property": "mana", - "value": 5 - } - ] - } + "uxmiwilhomg6m9k38w7e3svcrswyn7l7", + "cev8sz6kj05cbsi9zh4s9kutswl9jtga", + "dbgfwilt3eoer4j43jr50hdzznjb5hdy" ], "18": [ - { - "description": "+1 point de statistique.\n+6 PV max.\n+1 mana max.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 6 - }, - { - "category": "value", - "operation": "add", - "property": "mana", - "value": 1 - } - ] - }, - { - "description": "+1 point de statistique.\n+2 PV max.\n+5 mana max.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 2 - }, - { - "category": "value", - "operation": "add", - "property": "mana", - "value": 5 - } - ] - } + "vnl1syzkdqjfn3dy8xm0ewtw77ueocuk", + "oimwzwl9xp4c0p4uc3dreietarqtkofd" ], "19": [ - { - "description": "+2 points de statistiques.\n+2 points de compétences.\n+6 PV max.\n+3 mana max.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 2 - }, - { - "category": "value", - "operation": "add", - "property": "ability", - "value": 2 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 6 - }, - { - "category": "value", - "operation": "add", - "property": "mana", - "value": 3 - } - ] - }, - { - "description": "+2 points de statistiques.\n+2 PV max.\n+5 mana max.\n+1 sort maitrisé.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 2 - }, - { - "category": "value", - "operation": "add", - "property": "spellslots", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "health", - "value": 2 - }, - { - "category": "value", - "operation": "add", - "property": "mana", - "value": 5 - } - ] - } + "16fxrd8aqzpw76bphaz7r17kfnaa76pi", + "rjw4vvivyo6fncuxoxbcaa4tsnizv3fv" ], "20": [ - { - "description": "+2 points de statistiques.", - "effect": [ - { - "category": "value", - "operation": "add", - "property": "training", - "value": 2 - } - ] - }, - { - "description": "+1 au modifieur de votre choix.\n+1 point de compétence.", - "effect": [ - { - "category": "choice", - "id": "e0c5f6f0c61026b887678873ed5cb386", - "options": [ - { - "text": "Force", - "category": "value", - "operation": "add", - "value": 1, - "property": "modifier/strength" - }, - { - "text": "Dextérité", - "category": "value", - "operation": "add", - "value": 1, - "property": "modifier/dexterity" - }, - { - "text": "Constitution", - "category": "value", - "operation": "add", - "value": 1, - "property": "modifier/constitution" - }, - { - "text": "Intelligence", - "category": "value", - "operation": "add", - "value": 1, - "property": "modifier/intelligence" - }, - { - "text": "Curiosité", - "category": "value", - "operation": "add", - "value": 1, - "property": "modifier/curiosity" - }, - { - "text": "Charisme", - "category": "value", - "operation": "add", - "value": 1, - "property": "modifier/charisma" - }, - { - "text": "Psyché", - "category": "value", - "operation": "add", - "value": 1, - "property": "modifier/psyche" - } - ] - }, - { - "category": "value", - "operation": "add", - "property": "ability", - "value": 1 - } - ] - } + "5zghm6wfve9t32rz7kd8zianc0be600v", + "9q8mf0u06oxxwqltyv58kbavs7qtoouw" ] } } @@ -1270,3282 +272,508 @@ "training": { "strength": { "0": [ - { - "description": [ - { - "text": "Pas d'équipement.", - "disposable": false, - "replaced": true - }, - { - "text": "Ne peut pas se déplacer par soi même.", - "disposable": false, - "replaced": true - }, - { - "text": "Def max à 3.", - "disposable": false, - "replaced": true - } - ], - "features": [ - { - "category": "value", - "operation": "set", - "property": "defense/hardcap", - "value": 3 - } - ] - } + "zne1gy546fiflmaz2fw3o33pskonfplr" ], "1": [ - { - "description": [ - { - "text": "Vitesse de course de 0 cases.", - "disposable": true - }, - { - "text": "Def max à 6.", - "disposable": false, - "replaced": true - }, - { - "text": "Pas d'équipement.", - "disposable": false, - "replaced": true - } - ], - "features": [ - { - "category": "value", - "operation": "set", - "property": "defense/hardcap", - "value": 6 - }, - { - "category": "value", - "operation": "set", - "property": "speed", - "value": false - } - ] - } + "wu8jb0v7djq789h1snaaoekjwrh4dxgv" ], "2": [ - { - "description": [ - { - "text": "Vitesse de course de 0 cases.", - "disposable": true - }, - { - "text": "Vous commencez à maitriser des armes (cf. [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les catégories d'arme|Les catégories d'arme]]).", - "disposable": true - }, - { - "text": "Impossible de parer.", - "disposable": false, - "replaced": true - } - ], - "features": [ - { - "category": "value", - "operation": "set", - "property": "defense/hardcap", - "value": 9999 - }, - { - "category": "value", - "operation": "set", - "property": "speed", - "value": 0 - }, - { - "category": "value", - "operation": "add", - "property": "mastery/strength", - "value": 1 - } - ] - } + "aty2uyi890ixb03krm0wy2xus4a4wcqh" ], "3": [ - { - "description": [ - { - "text": "Vitesse de course de 3 cases.", - "disposable": true - }, - { - "text": "Vous commencez à maitriser des armures (cf. [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les catégories d'armure|Les catégories d'armure]]). ", - "disposable": true - }, - { - "text": "Vous pouvez parer activement (+1).", - "disposable": true - } - ], - "features": [ - { - "category": "value", - "operation": "set", - "property": "speed", - "value": 3 - }, - { - "category": "value", - "operation": "add", - "property": "mastery/armor", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "defense/activeparry", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "modifier/strength", - "value": 1 - } - ] - } + "eqjxih0uc93c8b0uxsrapj17dg0vhnsy" ], "4": [ - { - "description": [ - { - "text": "Vitesse de course de 6 cases.", - "disposable": true - }, - { - "text": "Vous maitrisez des armes d'une catégorie supérieure.", - "disposable": true - }, - { - "text": "Vous apprenez à parer passivement les coups (+1).", - "disposable": true - } - ], - "features": [ - { - "category": "value", - "operation": "set", - "property": "speed", - "value": 6 - }, - { - "category": "value", - "operation": "add", - "property": "mastery/strength", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "defense/activeparry", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "defense/passiveparry", - "value": 1 - } - ] - } + "kti6o07ibn6x4z5nrai2icnyyie9sho7" ], "5": [ - { - "description": [ - { - "text": "Vous maitrisez des armes d'une [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les catégories d'arme|catégorie]] supérieure (direction force).", - "disposable": true - } - ], - "features": [ - { - "category": "value", - "operation": "add", - "property": "mastery/strength", - "value": 1 - } - ] - }, - { - "description": [ - { - "text": "Lorsque vous [[1. Règles/3. Le combat/2. Actions en combat#Intercepter|interceptez]] un adversaire, vous pouvez faire une attaque plutôt que de le contraindre.", - "disposable": false - } - ], - "features": [ - { - "category": "misc", - "text": "Lorsque vous [[1. Règles/3. Le combat/2. Actions en combat#Intercepter|interceptez]] un adversaire, vous pouvez faire une attaque plutôt que de le contraindre." - } - ] - }, - { - "description": [ - { - "text": "Vous maitrisez l'utilisation des [[1. Règles/99. Annexes/4. Équipement#Les boucliers|boucliers]].", - "disposable": true - } - ], - "features": [ - { - "category": "value", - "operation": "add", - "property": "mastery/shield", - "value": 1 - } - ] - } + "68ob40xb2s36xc9bhg1irqefsos5iajg", + "4w0b7yvsuppurb3byt8frczntad84hy6", + "016yrfhn7ngljqy4j9lzc6qe5gojk056" ], "6": [ - { - "description": [ - { - "text": "Vous maitrisez des armes d'une [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les catégories d'arme|catégorie]] supérieure (direction force).", - "disposable": true - } - ], - "features": [ - { - "category": "value", - "operation": "add", - "property": "mastery/strength", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "modifier/strength", - "value": 1 - } - ] - }, - { - "description": [ - { - "text": "En infligeant des dégâts critique, vous pouvez choisir d'ignorer l'armure adverse.", - "disposable": false - } - ], - "features": [ - { - "category": "misc", - "text": "En infligeant des dégâts critique, vous pouvez choisir d'ignorer l'armure adverse." - }, - { - "category": "value", - "operation": "add", - "property": "modifier/strength", - "value": 1 - } - ] - }, - { - "description": [ - { - "text": "Vous pouvez porter une armure de [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les catégories d'armure|catégorie]] supérieure.", - "disposable": true - } - ], - "features": [ - { - "category": "value", - "operation": "add", - "property": "mastery/armor", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "modifier/strength", - "value": 1 - } - ] - } + "i7yjxme5zrvfm1hmtsisgzzt0h2ckac2", + "21fgl5np82r6d7rrolai90nj9edb1hv4", + "32uiwp9qv4rqquvu3kxig53y36onev04" ], "7": [ - { - "description": [ - { - "text": "Utiliser la [[1. Règles/2. L'entrainement/1. Entrainement#La force|force]] pour frapper avec une arme augmente les dégâts infligés de 2.", - "disposable": false - } - ], - "features": [ - { - "category": "misc", - "text": "Utiliser la [[1. Règles/2. L'entrainement/1. Entrainement#La force|force]] pour frapper avec une arme augmente les dégâts infligés de 2." - } - ] - }, - { - "description": [ - { - "text": "Vous maitrisez des armes d'une [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les catégories d'arme|catégorie]] supérieure (direction force).", - "disposable": true - } - ], - "features": [ - { - "category": "value", - "operation": "add", - "property": "mastery/strength", - "value": 1 - } - ] - }, - { - "description": [ - { - "text": "Vous pouvez porter une armure de [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les catégories d'armure|catégorie]] supérieure.", - "disposable": true - } - ], - "features": [ - { - "category": "value", - "operation": "add", - "property": "mastery/armor", - "value": 1 - } - ] - } + "oajhcz8hku38aa13lz7fmzbxexim5xo2", + "mzm4c61pb47lmqlexv2zz43vvb2df2i8", + "t64l3mi6pjypcr47754xbqen0mi3uqx3" ], "8": [ - { - "description": [ - { - "text": "Frapper avec une [[1. Règles/99. Annexes/4. Équipement#Les armes|arme standard]], [[1. Règles/99. Annexes/4. Équipement#Les armes lourdes|lourdes]] ou [[1. Règles/99. Annexes/4. Équipement#Les armes à deux mains|à deux mains]] augmente les dégâts infligés de 2, mais réduit le [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les niveaux de dé de dégâts|dé de dégâts]] au niveau inférieur.", - "disposable": false - } - ], - "features": [ - { - "category": "value", - "operation": "add", - "property": "mastery/armor", - "value": 1 - } - ] - }, - { - "description": [ - { - "text": "Vous pouvez utiliser 3 points d'action pour faire 2 attaques.", - "disposable": false, - "category": "action" - } - ], - "features": [ - { - "category": "value", - "operation": "add", - "property": "mastery/armor", - "value": 1 - } - ] - }, - { - "description": [ - { - "text": "En vous [[1. Règles/3. Le combat/2. Actions en combat#S'interposer|interposant]], vous gagnez un bonus de +2 pour contraindre.", - "disposable": false - } - ], - "features": [ - { - "category": "misc", - "text": "En vous [[1. Règles/3. Le combat/2. Actions en combat#S'interposer|interposant]], vous gagnez un bonus de +2 pour contraindre." - } - ] - } + "97ru4qzil52x4ulj2aq23i4b1fzrh1kl", + "d6az7m830gjyzvo6lr8faah72ex4ofy2", + "frlk7oir6gp8jp7wqmrdl51c4w9tm6to" ], "9": [ - { - "description": [ - { - "text": "Au prix d'un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue temporaire|fatigue temporaire]], durant votre tour, les dégâts que vous infligerez avec une [[1. Règles/99. Annexes/4. Équipement#Les armes|arme standard]], [[1. Règles/99. Annexes/4. Équipement#Les armes lourdes|lourdes]] ou [[1. Règles/99. Annexes/4. Équipement#Les armes à deux mains|à deux mains]] vous permet de lancer un second dé de dégâts de votre arme. *Ce dé peut être doublé en cas de dégâts critique.*", - "disposable": false - } - ], - "features": [ - { - "category": "misc", - "text": "Au prix d'un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue temporaire|fatigue temporaire]], durant votre tour, les dégâts que vous infligerez avec une [[1. Règles/99. Annexes/4. Équipement#Les armes|arme standard]], [[1. Règles/99. Annexes/4. Équipement#Les armes lourdes|lourdes]] ou [[1. Règles/99. Annexes/4. Équipement#Les armes à deux mains|à deux mains]] vous permet de lancer un second dé de dégâts de votre arme. *Ce dé peut être doublé en cas de dégâts critique.*" - }, - { - "category": "value", - "operation": "add", - "property": "modifier/strength", - "value": 1 - } - ] - }, - { - "description": [ - { - "text": "Après avoir pris un adversaire en tenaille, si un allié parvient à le toucher, vous obtenez également un [[1. Règles/1. Introduction/2. Glossaire#Avantage et désavantage|avantage]] sur votre **première** attaque contre cet adversaire.", - "disposable": false - } - ], - "features": [ - { - "category": "misc", - "text": "Après avoir pris un adversaire en tenaille, si un allié parvient à le toucher, vous obtenez également un [[1. Règles/1. Introduction/2. Glossaire#Avantage et désavantage|avantage]] sur votre **première** attaque contre cet adversaire." - }, - { - "category": "value", - "operation": "add", - "property": "modifier/strength", - "value": 1 - } - ] - }, - { - "description": [ - { - "text": "Si vous ne maitrisez pas les [[1. Règles/99. Annexes/4. Équipement#Les boucliers|boucliers]], vous pouvez maintenant les utiliser. Sinon, votre bonus de parade active et passive augmentent de 1 point.", - "disposable": true - } - ], - "features": [ - { - "category": "value", - "operation": "add", - "property": "mastery/shield", - "value": 1 - }, - { - "category": "value", - "operation": "add", - "property": "modifier/strength", - "value": 1 - } - ] - } + "6c74okwask7eyepj2cr0cwb6o303ledu", + "ax8jlfjcw263oouzi3a8859srktxeyiq", + "tncqh3j9pdf60j4zrzd79mq4hu22ppb3" ], "10": [ - { - "description": [ - { - "text": "Au prix d'un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue persistante|fatigue persistante]], durant tout votre tour, vous obtenez un bonus de +4 pour frapper avec une [[1. Règles/99. Annexes/4. Équipement#Les armes|arme standard]], [[1. Règles/99. Annexes/4. Équipement#Les armes lourdes|lourdes]] ou [[1. Règles/99. Annexes/4. Équipement#Les armes à deux mains|à deux mains]].", - "disposable": false - } - ], - "features": [ - { - "category": "misc", - "text": "Au prix d'un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue persistante|fatigue persistante]], durant tout votre tour, vous obtenez un bonus de +4 pour frapper avec une [[1. Règles/99. Annexes/4. Équipement#Les armes|arme standard]], [[1. Règles/99. Annexes/4. Équipement#Les armes lourdes|lourdes]] ou [[1. Règles/99. Annexes/4. Équipement#Les armes à deux mains|à deux mains]]." - } - ] - }, - { - "description": [ - { - "text": "Lorsque vous frappez en utilisant la [[1. Règles/2. L'entrainement/1. Entrainement#La force|force]], faire un 11 sur le lancer de d12 est considéré comme un coup critique. Cependant, vous subissez un malus de 1 point pour frapper.", - "disposable": false - } - ], - "features": [ - { - "category": "misc", - "text": "Lorsque vous frappez en utilisant la [[1. Règles/2. L'entrainement/1. Entrainement#La force|force]], faire un 11 sur le lancer de d12 est considéré comme un coup critique. Cependant, vous subissez un malus de 1 point pour frapper." - } - ] - }, - { - "description": [ - { - "text": "Parer une attaque au corps à corps permet à **un seul** allié de saisir l'opportunité pour l'attaquer (au corps à corps).", - "disposable": false - } - ], - "features": [ - { - "category": "misc", - "text": "Parer une attaque au corps à corps permet à **un seul** allié de saisir l'opportunité pour l'attaquer (au corps à corps)." - } - ] - } + "djocax8ggqyixn0i5f8p8xtes9u300wg", + "9ajn811xiv0msq0sw0g26skk2cnyi7jm", + "zm9g0yufycmr41uedzyoyqvjsvnrjgay" ], "11": [ - { - "description": [ - { - "text": "En frappant avec une [[1. Règles/99. Annexes/4. Équipement#Les armes|arme standard]], [[1. Règles/99. Annexes/4. Équipement#Les armes lourdes|lourde]] ou [[1. Règles/99. Annexes/4. Équipement#Les armes à deux mains|à deux mains]], vous pouvez choisir de subir un malus de -4 pour infliger 8 points de dégâts supplémentaires. *A annoncer avant le lancer de dé.*", - "disposable": false - } - ], - "features": [ - { - "category": "misc", - "text": "En frappant avec une [[1. Règles/99. Annexes/4. Équipement#Les armes|arme standard]], [[1. Règles/99. Annexes/4. Équipement#Les armes lourdes|lourde]] ou [[1. Règles/99. Annexes/4. Équipement#Les armes à deux mains|à deux mains]], vous pouvez choisir de subir un malus de -4 pour infliger 8 points de dégâts supplémentaires. *A annoncer avant le lancer de dé.*" - } - ] - }, - { - "description": [ - { - "text": "Lorsque ce n'est pas votre tour, vous pouvez [[1. Règles/3. Le combat/2. Actions en combat#Saisir une opportunité|saisir l'opportunité]] pour frapper un adversaire lorsqu'il se déplace pour esquiver.", - "disposable": false - } - ], - "features": [ - { - "category": "misc", - "text": "Lorsque ce n'est pas votre tour, vous pouvez [[1. Règles/3. Le combat/2. Actions en combat#Saisir une opportunité|saisir l'opportunité]] pour frapper un adversaire lorsqu'il se déplace pour esquiver." - } - ] - }, - { - "description": [ - { - "text": "En prenant en tenaille un adversaire, vous offrez l'[[1. Règles/1. Introduction/2. Glossaire#Avantage et désavantage|avantage]] aux attaques à distance et aux [[1. Règles/4. La magie/1. Magie#Les sorts de précision|sorts de précision]].", - "disposable": false - } - ], - "features": [ - { - "category": "misc", - "text": "En prenant en tenaille un adversaire, vous offrez l'[[1. Règles/1. Introduction/2. Glossaire#Avantage et désavantage|avantage]] aux attaques à distance et aux [[1. Règles/4. La magie/1. Magie#Les sorts de précision|sorts de précision]]." - } - ] - } + "px4xmy4dig8a55tq5z0pj5ant5mhy7m6", + "7vaciljo5qhmy47uix067v0cujcff7wg", + "vu7oj9y9i3gmlezms3tb86qni8i2cciy" ], "12": [ - { - "description": [ - { - "text": "Vous êtes capable de tenir une [[1. Règles/99. Annexes/4. Équipement#Les armes à deux mains|arme à deux mains]] dans une seule main. Vous ne pouvez cependant pas tenir d'arme dans votre autre main, *même en ayant progressé dans l'[[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les armes multiples|arbre des armes multiples]]*.", - "disposable": true - } - ], - "features": [ - { - "category": "misc", - "text": "Vous êtes capable de tenir une [[1. Règles/99. Annexes/4. Équipement#Les armes à deux mains|arme à deux mains]] dans une seule main. Vous ne pouvez cependant pas tenir d'arme dans votre autre main, *même en ayant progressé dans l'[[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les armes multiples|arbre des armes multiples]]*." - }, - { - "category": "value", - "operation": "add", - "property": "modifier/strength", - "value": 1 - } - ] - }, - { - "description": [ - { - "text": "Au prix d'un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue temporaire|fatigue temporaire]], durant tout un tour, faire une attaque ne demande que 1 point d'action.", - "disposable": false - } - ], - "features": [ - { - "category": "misc", - "text": "Au prix d'un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue temporaire|fatigue temporaire]], durant tout un tour, faire une attaque ne demande que 1 point d'action." - }, - { - "category": "value", - "operation": "add", - "property": "modifier/strength", - "value": 1 - } - ] - }, - { - "description": [ - { - "text": "Vous pouvez frapper, puis vous [[1. Règles/3. Le combat/2. Actions en combat#S'interposer|interposer]] en 3 points d'action.", - "disposable": false - } - ], - "features": [ - { - "category": "action", - "text": "Vous pouvez frapper, puis vous [[1. Règles/3. Le combat/2. Actions en combat#S'interposer|interposer]] en 3 points d'action.", - "cost": 3 - }, - { - "category": "value", - "operation": "add", - "property": "modifier/strength", - "value": 1 - } - ] - } + "6i94xxto9o3857fpknawp1wpomxtjvdm", + "8qhafpspdmayfqn3ycxbdy9i8nvlxecr", + "dgfl0p2j5mzshhsbnzyvyqlyzamxm1e0" ], "13": [ - { - "description": [ - { - "text": "En tenant une [[1. Règles/99. Annexes/4. Équipement#Les armes|arme standard]], [[1. Règles/99. Annexes/4. Équipement#Les armes lourdes|lourdes]] ou [[1. Règles/99. Annexes/4. Équipement#Les armes à deux mains|à deux mains]], vous gagnez un bonus de +3 pour résister aux désarmement. De plus, lorsque l'on rate à vous contraindre au corps à corps, vous pouvez gratuitement contre attaquer avec votre poing *même si vous tenez une arme*.", - "disposable": false - } - ], - "features": [] - }, - { - "description": [ - { - "text": "En infligeant des [[1. Règles/3. Le combat/1. Combat#Réussite critique|dégâts critique]], vous pouvez choisir de doubler les dégâts fixes.", - "disposable": false - } - ], - "features": [] - }, - { - "description": [ - { - "text": "Vous êtes capable de tenir un [[1. Règles/99. Annexes/4. Équipement#Les boucliers à deux mains|bouclier à deux mains]] dans une seule main. Vous pouvez **au mieux** tenir une [[1. Règles/99. Annexes/4. Équipement#Les armes légères|arme légère]] ou [[1. Règles/99. Annexes/4. Équipement#Les armes de jet|de jet]] dans l'autre main.", - "disposable": false - } - ], - "features": [] - } + "sg5yvnizk2zzzmz5odx47blav10mumd9", + "k80789wndamhl4y6g1w068chgshij5di", + "nugvq8dlnfha9ve53xiirf39muiquu19" ], "14": [ - { - "description": [ - { - "text": "", - "disposable": false - } - ], - "features": [] - }, - { - "description": [ - { - "text": "Vous pouvez, jusqu'au début de votre prochain tour, réduire votre défense à 5. Cependant, si vous êtes frappé par une attaque au corps à corps, vous pouvez immédiatement contre attaquer **gratuitement** avec un [[1. Règles/1. Introduction/2. Glossaire#Avantage et désavantage absolu|avantage absolu]].", - "disposable": false - } - ], - "features": [] - }, - { - "description": [ - { - "text": "Lorsqu'un adversaire à portée de corps à corps attaque une autre cible que vous, vous pouvez utiliser une réaction pour l'attaquer *une seule fois*.", - "disposable": false, - "category": "reaction" - } - ], - "features": [ - { - "category": "value", - "operation": "add", - "property": "modifier/strength", - "value": 1 - } - ] - } + "a1t2w13fztdej3jan7v74uc2wjz3tik6", + "p06pl1mnwoslgfx1lepmmeh4ish6lu0v", + "31w7euyudl8le3n0qqz3sc4cukwtvo9i" ], "15": [ - { - "description": [ - { - "text": "", - "disposable": false - } - ], - "features": [ - { - "category": "value", - "operation": "add", - "property": "modifier/strength", - "value": 1 - } - ] - }, - { - "description": [ - { - "text": "Votre érudition du combat est légendaire. Vous êtes capable en [[1. Règles/3. Le combat/2. Actions en combat#Communiquer|communiquant]] d'offrir un bonus de +3 à un allié que vous voyez attaquer.", - "disposable": false - } - ], - "features": [ - { - "category": "value", - "operation": "add", - "property": "modifier/strength", - "value": 1 - } - ] - }, - { - "description": [ - { - "text": "Lorsque vous parez passivement, vous réduisez les dégâts d'un montant égal à votre bonus de parade passive.", - "disposable": false - } - ], - "features": [ - { - "category": "value", - "operation": "add", - "property": "modifier/strength", - "value": 1 - } - ] - } + "io9ol13tmlyki5eh6qens726tx7kec9u", + "y9xt37yz2ni2qyznx0wd0jqea4drvxsb", + "jbzfpw2vov1wjo9l0wwjmatzgzokmwz0" ] }, "dexterity": { "0": [ - { - "description": [ - { - "text": "Impossible de tenir des objets.", - "disposable": false, - "replaced": true - }, - { - "text": "Def max à 3.", - "disposable": false, - "replaced": true - } - ], - "features": [] - } + "fr8hr26cbc8u62iwp4h9kq31iz5ld35v" ], "1": [ - { - "description": [ - { - "text": "Def max à 3 + bonus defensif.", - "disposable": false, - "replaced": true - }, - { - "text": "-3 à toute utilisation d'objet ou d'arme.", - "disposable": false, - "replaced": true - }, - { - "text": "Temps d'interaction x2 avec les objets.", - "disposable": false, - "replaced": true - } - ], - "features": [] - } + "2sf7ddlhzqon9di68ij0gmj2l4sc17ea" ], "2": [ - { - "description": [ - { - "text": "-1 à toute utilisation d'objet ou d'arme.", - "disposable": false, - "replaced": true - }, - { - "text": "Temps d'interaction x2 avec les objets.", - "disposable": false, - "replaced": true - } - ], - "features": [] - } + "pn7vje60pqye0b5yp0fy4whcsh99wd5r" ], "3": [ - { - "description": [ - { - "text": "Vous pouvez esquiver activement.", - "disposable": true - }, - { - "text": "Votre bonus d'esquive passive reste à 0.", - "disposable": false, - "replaced": true - } - ], - "defense": [ - "activedodge" - ], - "features": [] - } + "niz5jt6boo4k3qewdc3yt9l9lp8fsxne" ], "4": [ - { - "description": [ - { - "text": "Votre bonus d'esquive active augmente de 1 point.", - "disposable": true - }, - { - "text": "Votre bonus d'esquive passive augmente de 1 point.", - "disposable": true - }, - { - "text": "Vous progressez dans l'arbre des [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les armes multiples|armes multiples]].", - "disposable": true - } - ], - "defense": [ - "passivedodge", - "activedodge" - ], - "features": [] - } + "1ml6w69eie1jcmxj8jmvo4n9gryka602" ], "5": [ - { - "description": [ - { - "text": "Vous pouvez utiliser la dextérité pour frapper avec une [[1. Règles/99. Annexes/4. Équipement#Les armes naturelles|arme naturelle]]. Une arme naturelle est considéré comme une [[1. Règles/99. Annexes/4. Équipement#Les armes|arme]] et bénéficie des mêmes bonus.", - "disposable": false - } - ], - "features": [] - }, - { - "description": [ - { - "text": "Vous maitrisez des armes d'une [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les catégories d'arme|catégorie]] supérieure (direction dextérité).", - "disposable": true - } - ], - "mastery": "dexterity", - "features": [] - }, - { - "description": [ - { - "text": "Vous progressez dans l'arbre des [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les armes multiples|armes multiples]].", - "disposable": true - } - ], - "features": [] - } + "j6omfwpmorl65gltaeco1tv8khkrylys", + "sr1vwkxq0z25pvdikwy81fotcm3c0pd2", + "g44tcievcov9d4v3u8dmytbyqv9zf6tq" ], "6": [ - { - "description": [ - { - "text": "Vous gagnez un bonus de +1 à l'initiative.", - "disposable": true - }, - { - "text": "Vous n'avez aucun malus pour contraindre lorsque vous n'êtes pas à main nus.", - "disposable": false - } - ], - "initiative": 1, - "features": [] - }, - { - "description": [ - { - "text": "Vous maitrisez des armes d'une [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les catégories d'arme|catégorie]] supérieure (direction dextérité).", - "disposable": true - } - ], - "mastery": "dexterity", - "features": [] - }, - { - "description": [ - { - "text": "Vous avez un bonus de +1 aux jets de résistance des [[1. Magie#Les sorts de précision|sorts de précision]] en tant que défenseur.", - "disposable": true - } - ], - "resistance": [ - [ - "precision", - "defense" - ] - ], - "features": [] - } + "cb3j2er92coaxs5eru36qusut88hklk2", + "7k20w6sfvntfusu8zqrw1e60tonk3ti3", + "9vg98s0syzepmhd6m85p09o7w19v1ccz" ], "7": [ - { - "description": [ - { - "text": "Votre bonus d'esquive actif augmente de 1 point.", - "disposable": true - }, - { - "text": "Votre bonus d'esquive passive augmente de 1 point.", - "disposable": true - } - ], - "defense": [ - "passivedodge", - "activedodge" - ], - "features": [] - }, - { - "description": [ - { - "text": "Vous êtes capable d'utiliser la distance longue d'une [[1. Règles/99. Annexes/4. Équipement#Les armes à projectiles|arme à projectiles]] ou d'une [[1. Règles/99. Annexes/4. Équipement#Les armes de jet|arme de jet]] sans malus.", - "disposable": false - }, - { - "text": "", - "disposable": false - } - ], - "features": [] - }, - { - "description": [ - { - "text": "Frapper un ennemi au corps à corps dans le dos applique les même bonus que la [[1. Règles/3. Le combat/2. Actions en combat#Prendre en tenaille|prise en tenaille]]. Si l'ennemi a déjà été pris en tenaille ce tour ci, vous pouvez ignorer l'[[1. Règles/99. Annexes/4. Équipement#Les armures lourdes|armure lourde]].", - "disposable": false - } - ], - "features": [] - } + "zyhji19tls87giznj05lonilp39rn940", + "k703rofxwuoht2kmlpc4lea486hj61as", + "yzw94smc30wb2yrwm127abq38ctnkazh" ], "8": [ - { - "description": [ - { - "text": "Vous pouvez utiliser 1 point d'action pour vous concentrer et viser, vous permettant de gagner un bonus de +2 pour votre prochaine attaque avec une [[1. Règles/99. Annexes/4. Équipement#Les armes à projectiles|arme à projectiles]], une [[1. Règles/99. Annexes/4. Équipement#Les armes de jet|arme de jet]] ou avec un [[1. Règles/4. La magie/1. Magie#Les sorts de précision|sort de précision]].", - "disposable": false - } - ], - "features": [] - }, - { - "description": [ - { - "text": "Utiliser une [[1. Règles/99. Annexes/4. Équipement#Les armes à projectiles|arme à projectiles]] ou un [[1. Règles/4. La magie/1. Magie#Les sorts de précision|sort de précision]] au corps à corps ne provoque plus de [[1. Règles/1. Introduction/2. Glossaire#Avantage et désavantage|désavantage]].", - "disposable": false - } - ], - "features": [] - }, - { - "description": [ - { - "text": "En frappant un adversaire en étant [[1. Règles/99. Annexes/6. Visibilité et lumière#Caché|caché]], vous pouvez subir un malus de -5 et déclencher un [[1. Règles/3. Le combat/1. Combat#Réussite critique|dégât critique]] si vous touchez.", - "disposable": false - } - ], - "features": [] - } + "kcmvjjj8m02yoknc7zoximghirrh32tv", + "yyw64l2ci9h9ftvfvlumi6bq1zyaxpg5", + "u33frpxycixgesm8a8d6dqbzv81sjvbj" ], "9": [ - { - "description": [ - { - "text": "", - "disposable": false - } - ], - "features": [] - }, - { - "description": [ - { - "text": "Vous avez un bonus de +1 aux jets de résistance des [[1. Magie#Les sorts de précision|sorts de précision]] en tant qu'attaquant.", - "disposable": true - } - ], - "resistance": [ - [ - "precision", - "attack" - ] - ], - "features": [] - }, - { - "description": [ - { - "text": "Vous progressez dans l'arbre des [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les armes multiples|armes multiples]].", - "disposable": true - } - ], - "features": [] - } + "8rkt2q6w99qywnobuzidipbvo5axkp39", + "goboiu6ajetnqxij2ek83ejl13aayzu1", + "co9h9z8r6w7x4t9ev040hznmz3eqybqp" ], "10": [ - { - "description": [ - { - "text": "Votre bonus d'esquive active augmente de 1 point.", - "disposable": true - }, - { - "text": "Vous gagnez un bonus de +1 à l'initiative.", - "disposable": true - } - ], - "defense": [ - "activedodge" - ], - "initiative": 1, - "features": [] - }, - { - "description": [ - { - "text": "En attaquant avec une [[1. Règles/99. Annexes/4. Équipement#Les armes à projectiles|arme à projectiles]], vous pouvez choisir de subir un malus de -4 pour infliger 8 points de dégâts supplémentaires. *A annoncer avant le lancer de dé.*", - "disposable": false - } - ], - "features": [] - }, - { - "description": [ - { - "text": "Vous avez un bonus de +1 aux jets de résistance de [[1. Règles/99. Annexes/2. Liste des effets#Saignement|saignement]] en tant qu'attaquant.", - "disposable": true - } - ], - "resistance": [ - [ - "bleed", - "attack" - ] - ], - "features": [] - } + "3g6nqtkln2wcjdvc2j8juieio48dfu78", + "6jhfmtdie25c2jay66kniv4t0w5wkm0s", + "rwnivpd2o9g6t6f7tec8tbyfx5zonha8" ], "11": [ - { - "description": [ - { - "text": "Votre bonus d'esquive passive augmente de 1 point.", - "disposable": true - }, - { - "text": "Vous avez un bonus de +1 aux jets de résistance des [[1. Règles/4. La magie/1. Magie#Les sorts de précision|sorts de précision]] en tant que défenseur.", - "disposable": true - } - ], - "defense": [ - "passivedodge" - ], - "resistance": [ - [ - "precision", - "defense" - ] - ], - "features": [] - }, - { - "description": [ - { - "text": "À moyenne distance avec une [[1. Règles/99. Annexes/4. Équipement#Les armes à projectiles|arme à projectiles]], ", - "disposable": false - }, - { - "text": "vous pouvez tirer 2 projectiles en une attaque. Applique les règles de l'.", - "disposable": false - } - ], - "features": [] - }, - { - "description": [ - { - "text": "Votre malus d'attaque avec des armes multiples est réduit de 1.", - "disposable": false - } - ], - "features": [] - } + "jsrqok8pks4qxzs8q1euqugjmrkvupmv", + "qrjui665fuu5dg5ookbfpmzq6naamjuv", + "8w887kwr999zgeu6ilyuexcnyqo0x55z" ], "12": [ - { - "description": [ - { - "text": "Vous êtes capable d'esquiver passivement même lorsque vous êtes [[1. Règles/99. Annexes/2. Liste des effets#Agrippé|agrippé]]. Vous êtes capable d'esquiver activement sans vous déplacer.", - "disposable": false - } - ], - "features": [] - }, - { - "description": [ - { - "text": "Vous avez un bonus de +1 aux jets de résistance des [[1. Magie#Les sorts de précision|sorts de précision]] en tant qu'attaquant.", - "disposable": true - } - ], - "resistance": [ - [ - "precision", - "attack" - ] - ], - "features": [] - }, - { - "description": [ - { - "text": "", - "disposable": false - } - ], - "features": [] - } + "5inrt9sdz1vv6g2pmmkoy0xs0qc7innt", + "5bv9vzt6vfl6uzrpmoyvl8edbqaijjji", + "d0fubyi5kqh2pluz0udb6zpa0y5g9dnp" ], "13": [ - { - "description": [ - { - "text": "Lorsque vous subissez une attaque suite à une [[1. Règles/3. Le combat/2. Actions en combat#Prendre en tenaille|prise en tenaille]], vous pouvez avec une réaction imposer un malus de -2 à l'attaque. Si l'attaquant vous rate, il frappe alors son camarade *même s'il n'as pas normalement la portée*.", - "disposable": false, - "category": "reaction" - } - ], - "features": [] - }, - { - "description": [ - { - "text": "", - "disposable": false - } - ], - "features": [] - }, - { - "description": [ - { - "text": "Lorsque vous parvenez à parer activement avec une [[1. Règles/99. Annexes/4. Équipement#Les armes légères|arme légère]], vous pouvez gratuitement attaquer **une seule fois** avec cette même arme.", - "disposable": false - } - ], - "features": [] - } + "5f7y0cpd2bs6715q36zn6gk7onmwbukv", + "6swn6fufogkmw4t3mhk60004n5i9ihn1", + "fa35dal96kb5b1ksjp75w10iqtpch7dg" ], "14": [ - { - "description": [ - { - "text": "Votre bonus d'esquive active augmente de 1 point.", - "disposable": true - } - ], - "defense": [ - "activedodge" - ], - "features": [] - }, - { - "description": [ - { - "text": "", - "disposable": false - } - ], - "features": [] - }, - { - "description": [ - { - "text": "Vous progressez dans l'arbre des [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les armes multiples|armes multiples]].", - "disposable": true - } - ], - "features": [] - } + "0rtrsvohk1rpisxc8kz537ttosoi3xlj", + "0w62ha1h1ryhfowqv94zutp5eg2gdm0c", + "zb0fq9mrn08p189zfdo16vm2m945f4yc" ], "15": [ - { - "description": [ - { - "text": "Vous ne pouvez plus esquiver activement. Tant que vous portez au mieux une [[1. Règles/99. Annexes/4. Équipement#Les armures légères|armure légère]], votre esquive passive est égale à votre esquive active.", - "disposable": false - } - ], - "features": [] - }, - { - "description": [ - { - "text": "Vous savez viser les points les plus faibles d'une cible. En 3 points d'action, vous pouvez tirez **un** projectile avec une [[1. Règles/99. Annexes/4. Équipement#Les armes à projectiles|arme à projectiles]] et déclenchez automatiquement un [[1. Règles/3. Le combat/1. Combat#Réussite critique|dégât critique]] en touchant. Faire une [[1. Règles/1. Introduction/2. Glossaire#Réussite critique|réussite critique]] n'offre plus de bonus.", - "disposable": false, - "category": "action" - } - ], - "features": [] - }, - { - "description": [ - { - "text": "Au prix d'un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue temporaire|fatigue temporaire]], votre malus d'attaque avec des armes multiples est réduit de 1 jusqu'à la fin de votre tour.", - "disposable": false - } - ], - "features": [] - } + "xdu766mmvq7bses3lfnaydfdakkmxpty", + "k3ruht1zd277qjuujh4kkv91pqajnjcx", + "0knrfe02d0qsf4lowcwmdolqdumfmu19" ] }, "constitution": { "0": [ - { - "health": -5, - "description": [ - { - "text": "Vous subissez en permanence les effets des maladies [[2. Compendium/Work in progress/Maladies#Pourriture mortelle|Pourriture mortelle]], [[2. Compendium/Work in progress/Maladies#Anémie|Anémie]] et [[2. Compendium/Work in progress/Maladies#Immunodéficience|Immunodéficience]]. ", - "disposable": false, - "replaced": true - }, - { - "text": "-5 PV max.", - "disposable": false, - "replaced": true - } - ], - "features": [] - } + "54v90bmnaaocg0ssjsaawej4i0756qb3" ], "1": [ - { - "health": 5, - "description": [ - { - "text": "Vous subissez en permanence les effets des maladies [[2. Compendium/Work in progress/Maladies#Pourriture mortelle|Pourriture mortelle]], [[2. Compendium/Work in progress/Maladies#Anémie|Anémie]] et [[2. Compendium/Work in progress/Maladies#Immunodéficience|Immunodéficience]].", - "disposable": false, - "replaced": true - } - ], - "features": [] - } + "rii7i524py6sprzeqaetp95au26yhsgj" ], "2": [ - { - "health": 3, - "description": [ - { - "text": "Vous subissez en permanence les effets des maladies [[2. Compendium/Work in progress/Maladies#Pourriture mortelle|Pourriture mortelle]] et [[2. Compendium/Work in progress/Maladies#Immunodéficience|Immunodéficience]].", - "disposable": false, - "replaced": true - }, - { - "text": "+3 PV max.", - "disposable": true - } - ], - "features": [] - } + "m518dybrez85ut96mpdx70awr7v9fdw7" ], "3": [ - { - "health": 2, - "description": [ - { - "text": "Vous subissez en permanence les effets des maladies [[2. Compendium/Work in progress/Maladies#Pourriture mortelle|Pourriture mortelle]].", - "disposable": false, - "replaced": true - }, - { - "text": "+2 PV max.", - "disposable": true - } - ], - "features": [] - } + "nnydpmhq0ugcmi1kr8wccu5nszi9bnv4" ], "4": [ - { - "health": 6, - "description": [ - { - "text": "+6 PV max.", - "disposable": true - } - ], - "features": [] - } + "uaw75cv62c1byl06chxbhwtsefuhttt1" ], "5": [ - { - "health": 2, - "description": [ - { - "text": "Vous avez un bonus de +1 aux jets de résistance de [[1. Règles/99. Annexes/2. Liste des effets#Le saignement|saignement]] en tant que défenseur.", - "disposable": true - }, - { - "text": "+2 PV max.", - "disposable": true - } - ], - "resistance": [ - [ - "bleed", - "defense" - ] - ] - }, - { - "health": 7, - "description": [ - { - "text": "+7 PV max.", - "disposable": true - } - ] - }, - { - "description": [ - { - "text": "Vous avez un bonus de +1 aux jets de résistance d'[[1. Règles/99. Annexes/2. Liste des effets#L'empoisonnement|empoissonnement]] en tant que défenseur.", - "disposable": true - }, - { - "text": "Vous réduisez les [[1. Règles/3. Le combat/3. Résistance aux chocs#Le jet échelonné|jets échelonnés]] de [[1. Règles/99. Annexes/2. Liste des effets#Malade|maladie]] d'un niveau.", - "disposable": false - } - ], - "resistance": [ - [ - "poison", - "defense" - ] - ] - } + "uln5ac72wlfcvzlk7m7rpv0gs84pwqky", + "7lpfmn3yxdupuzok5fhyfs9q545lbdmw", + "x2ckkl354nu5dd355lx1xy2i0a81vdjo" ], "6": [ - { - "description": [ - { - "text": "Vous êtes capable de supporter un point de [[1. Règles/99. Annexes/3. Fatigue et repos|fatigue]] supplémentaire avant de subir les [[1. Règles/99. Annexes/3. Fatigue et repos#Les effets de la fatigue|effets de la fatigue]].", - "disposable": false - } - ] - }, - { - "health": 2, - "description": [ - { - "text": "Vous avez un bonus de +1 aux jets de résistance d'[[1. Règles/99. Annexes/2. Liste des effets#L'étourdissement|étourdissement]] en tant que défenseur.", - "disposable": true - }, - { - "text": "+2 PV max.", - "disposable": true - } - ], - "resistance": [ - [ - "stun", - "defense" - ] - ] - }, - { - "description": [ - { - "text": "Vous récupérez 2 points de vie supplémentaire par [[1. Règles/99. Annexes/3. Fatigue et repos#Gain par heure de repos|heure de repos]].", - "disposable": false - } - ] - } + "bt4vxm9f1l0ocflnz6canv5yb2kdav7l", + "4vckc1dkta12u7o5d0w2pqm7yq5mq94d", + "tpngghjjrdt44ucffcsts06yyrtrsb2d" ], "7": [ - { - "description": [ - { - "text": "Une fois entre chaque [[1. Règles/1. Introduction/2. Glossaire#Repos court|repos court]], vous êtes capable de convertir un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue persistante|fatigue persistante]] en point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue temporaire|fatigue temporaire]].", - "disposable": false - } - ] - }, - { - "health": 7, - "description": [ - { - "text": "+7 PV max.", - "disposable": true - } - ] - }, - { - "health": 2, - "description": [ - { - "text": "Choisissez un modifieur. Vous avez un bonus de +1 aux jet de résistance demandant ce modifieur en tant que défenseur.", - "disposable": false - }, - { - "text": "+2 PV max.", - "disposable": true - } - ] - } + "dtd7n3rt08bk7b9cv68oigujauy3b4e8", + "8r7s70m0od5orl3i7szy1cz3difv8hc1", + "lyi4ldhyemz56h6amaltkp0n3irrf00x" ], "8": [ - { - "health": 4, - "description": [ - { - "text": "En courant, vous pouvez subir un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue temporaire|fatigue temporaire]] pour faire un test d'athlétisme (8). Pour chaque point au dessus de la difficulté, vous gagnez une case de déplacement.", - "disposable": false - }, - { - "text": "+4 PV max.", - "disposable": true - } - ] - }, - { - "description": [ - { - "text": "Lorsqu'une attaque inflige plus de dégâts que votre armure, vous pouvez choisir de réduire à nouveau les dégâts d'un montant égal à votre armure au prix d'un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue persistante|fatigue persistante]].", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Vous pouvez sciemment subir 2 points de [[1. Règles/99. Annexes/3. Fatigue et repos#La fatigue|fatigue]] par tour. ", - "disposable": false - } - ] - } + "7lk01k1uf9jj1wovbh2r0b53q0wwjdpq", + "jm0ka9niguf4jazpwwnsihn84esg5wyp", + "r0g9ks6mghz93g4gfi23yjaqo1ou3nv4" ], "9": [ - { - "description": [ - { - "text": "Lorsque vous subissez des dégâts, vous pouvez utiliser votre réaction et subir un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue persistante|fatigue persistante]] pour gagner immédiatement 1 point d'action.", - "disposable": false, - "category": "reaction" - } - ] - }, - { - "health": 7, - "description": [ - { - "text": "+7 PV max.", - "disposable": true - } - ] - }, - { - "description": [ - { - "text": "", - "disposable": false - } - ] - } + "vnuiezyjr32xdntqoicus5o0uynv0s6p", + "qyc75gx1cpwzl8dyymioy6xy6gkgtx4r", + "u3qy3jur73eag5ytvnf3hd3d8bym1ggf" ], "10": [ - { - "description": [ - { - "text": "", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "", - "disposable": false - } - ] - }, - { - "health": 4, - "description": [ - { - "text": "Choisissez un modifieur. Vous avez un bonus de +1 aux jet de résistance demandant ce modifieur en tant que défenseur.", - "disposable": false - }, - { - "text": "+4 PV max.", - "disposable": true - } - ] - } + "t74vj73qh0qo483cdg9rwldu4ncithbm", + "e2bxgwume14ru1f58b8q8ihqz5wd6cnx", + "rtrvkfz12xac62ziqi586iinzywmafdo" ], "11": [ - { - "description": [ - { - "text": "Chaque [[1. Règles/99. Annexes/3. Fatigue et repos#Gain par heure de repos|heure de repos]] vous fait perdre 1 point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue persistante|fatigue persistante]] supplémentaire.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Lorsque vous tombez à 0 PV ou moins, plutôt que de devenir [[1. Règles/99. Annexes/2. Liste des effets#Agonisant|agonisant]], vous pouvez choisir de subir la maladie [[2. Compendium/Work in progress/Maladies#Pourriture mortelle|Pourriture mortelle]] pour repasser à 1/4 de vos PV max.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Chaque fois que vous ratez un jet de résistance, vous gagnez un bonus de +2 aux jets de résistance jusqu'à la fin de votre prochain tour.", - "disposable": false - } - ] - } + "i5jy9aw0catauy5297h115t51fvhja6j", + "jdz7x5c3gbzd42woois4d354odhsi4iu", + "a1ck9ztckhow2ecp6vxl86imcty8g5y9" ], "12": [ - { - "description": [ - { - "text": "", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Lorsque vous êtes [[1. Règles/99. Annexes/2. Liste des effets#Agonisant|agonisant]], vous ne perdez que 6 PV par tour et avez une difficulté de stabilisation réduite de 2.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "En tombant à [[1. Règles/99. Annexes/2. Liste des effets#Agonisant|l'agonie]], vous pouvez ne pas tombez inconscient. Dans ce cas, vous ne pouvez prendre d'action que pour vous déplacer à la moitié de votre vitesse de course, marcher ou vous stabiliser, et n'avez pas de réaction jusqu'à ce que vous retiriez l'état [[1. Règles/99. Annexes/2. Liste des effets#Agonisant|d'agonie]].", - "disposable": false - } - ] - } + "pf8l89mx9icuhg7vdhzrbl8i5g80d887", + "2uuyl1xo9366d991pkkjl6x3daup3te2", + "k24h1fr0nb6tidc1tcqnv12suw835ur2" ], "13": [ - { - "description": [ - { - "text": "", - "disposable": false - } - ] - }, - { - "health": 5, - "description": [ - { - "text": "Lorsque vous êtes [[1. Règles/99. Annexes/2. Liste des effets#Agonisant|agonisant]], vous pouvez survivre jusqu'à -75 PV au lieu de -50 PV.", - "disposable": false - }, - { - "text": "+5 PV max.", - "disposable": true - } - ] - }, - { - "description": [ - { - "text": "En ratant un jet de résistance d'[[1. Règles/99. Annexes/2. Liste des effets|effet physique]] ou de [[1. Règles/4. La magie/1. Magie#Les sorts de précision|sorts de précision]], vous pouvez subir un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue temporaire|fatigue temporaire]] pour relancer le jet.", - "disposable": false - } - ] - } + "8q5seula39wv76n1t8gxq6gekmiq2uo5", + "c3z36ab1zcwp3bl4vekvwlwpbr9oeb7q", + "g5phzahr4ss3fbacb22ktz1qby3ou7n9" ], "14": [ - { - "description": [ - { - "text": "Vous êtes capable de supporter un point de [[1. Règles/99. Annexes/3. Fatigue et repos|fatigue]] supplémentaire avant de subir les [[1. Règles/99. Annexes/3. Fatigue et repos#Les effets de la fatigue|effets de la fatigue]].", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Lorsque vous êtes [[1. Règles/99. Annexes/2. Liste des effets#Agonisant|agonisant]], vous pouvez survivre jusqu'à vos PV max dans le négatif, même s'ils sont supérieur à 75 PV max.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "", - "disposable": false - } - ] - } + "1objky145p39qou72jvecrcz4x2fzhxk", + "h35hocuwlevn02crp6netyvwenig080o", + "6n1if5nrca6e30ilyzfxza3wvah7w997" ], "15": [ - { - "description": [ - { - "text": "Vous ne subissez aucun [[1. Règles/1. Introduction/2. Glossaire#Avantage et désavantage|désavantage]] en conséquence de votre [[1. Règles/99. Annexes/3. Fatigue et repos#Les effets de la fatigue|fatigue]].", - "disposable": false - } - ] - }, - { - "health": 20, - "description": [ - { - "text": "+20 PV max.", - "disposable": true - } - ] - }, - { - "description": [ - { - "text": "Chaque fois que vous **lancez** un jet de résistance, vous gagnez un bonus de +2 à la défense jusqu'à la fin de votre prochain tour. *Ne se cumule pas avec l'effet sur les échecs de résistance.*", - "disposable": false - } - ] - } + "iaxxkkvwssafx8xr0qtpadby15x5oy5b", + "72029iq2pv0ibf80b5qrhcw5k378d75m", + "2rz9tiej7318s198ed97d0mkma3kzh0k" ] }, "intelligence": { "0": [ - { - "description": [ - { - "text": "2 points d'action par tour.", - "disposable": true - }, - { - "text": "1 réaction par tour.", - "disposable": true - } - ] - } + "8hmzfizhahmmtk9h0g3trc4en7agds1o" ], "1": [ - { - "description": [ - { - "text": "2 points d'action par tour.", - "disposable": true - }, - { - "text": "2 réactions par tour.", - "disposable": true - } - ] - } + "o51naz411sg8u2b74dxp2t37gflpjp4l" ], "2": [ - { - "description": [ - { - "text": "3 points d'action par tour.", - "disposable": true - } - ] - } + "l1r9e41cub99ul0grtrt8w6pqyb80rot" ], "3": [ - { - "description": [ - { - "text": "Vous êtes capable de lancer des [[1. Règles/4. La magie/1. Magie#Les sorts de précision|sorts de précision]].", - "disposable": true - }, - { - "text": "Vous êtes capable de maitriser un nombre de sort égal à votre modifieur d'intelligence.", - "disposable": false - } - ], - "spellrank": "precision", - "spellslot": "intelligence" - } + "1zabhhw29276sgbsostxd8efncqwltej" ], "4": [ - { - "mana": 7, - "description": [ - { - "text": "Vous êtes capable de lancer des [[1. Règles/4. La magie/1. Magie#Les sorts de savoir|sorts de savoir]].", - "disposable": true - }, - { - "text": "+7 mana max.", - "disposable": true - } - ], - "spellrank": "knowledge" - } + "61gz8bl733m52dhcdrkkkue33yc6jg1x" ], "5": [ - { - "mana": 3, - "description": [ - { - "text": "Vous êtes capable de lancer des sorts plus rapidement. Vous progressez dans l'[[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#L'arbre de magie|arbre de magie]] (direction rapidité).", - "disposable": true - }, - { - "text": "+3 mana max.", - "disposable": true - } - ] - }, - { - "mana": 10, - "description": [ - { - "text": "+10 mana max.", - "disposable": true - } - ] - }, - { - "mana": 3, - "description": [ - { - "text": "Votre connaissance de l'anatomie humanoïde vous permet de provoquer des blessures plus importantes.", - "disposable": false - }, - { - "text": "Vous avez un bonus de +1 aux jets de résistance de [[1. Règles/99. Annexes/2. Liste des effets#Saignement|saignement]] en tant qu'attaquant.", - "disposable": true - }, - { - "text": "+3 mana max.", - "disposable": true - } - ], - "resistance": [ - [ - "bleed", - "attack" - ] - ] - } + "3g93pwep346ikr56ohoicfrike5wmrfa", + "4yf5da8vuwr7zsgm0nddxg0i9v7scsir", + "1aakipzyterr7w138big7pegw2fijolt" ], "6": [ - { - "description": [ - { - "text": "Vous apprenez le sort unique [[1. Règles/4. La magie/2. Liste des sorts#^a8f46f|Contresort]].", - "disposable": false - } - ] - }, - { - "mana": 2, - "description": [ - { - "text": "Vous dédiez vos études à une classe élémentaire. Vous progressez dans l'[[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#L'arbre de magie|arbre de magie]] (direction éléments).", - "disposable": true - }, - { - "text": "+2 mana max.", - "disposable": true - } - ] - }, - { - "description": [ - { - "text": "Vous apprenez à manier de grosses quantités de mana sans danger. Vous progressez dans l'[[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#L'arbre de magie|arbre de magie]] (direction puissance).", - "disposable": true - } - ] - } + "5crh6l55lrch646cm04ra02nqil5quyb", + "tgjlf2ty2g4uul8uqjdo2t8er8ls8i9u", + "g5boqlllkwxlkz4lfjue6hiungbjqtsh" ], "7": [ - { - "description": [ - { - "text": "Vous pouvez lancer des [[1. Règles/4. La magie/1. Magie#Les sorts de précision|sorts de précision]] d'un rang supérieur.", - "disposable": true - } - ], - "spellrank": "precision" - }, - { - "description": [ - { - "text": "Vous pouvez lancer des [[1. Règles/4. La magie/1. Magie#Les sorts de savoir|sorts de savoir]] d'un rang supérieur.", - "disposable": true - } - ], - "spellrank": "knowledge" - }, - { - "description": [ - { - "text": "Vous gagnez un bonus de +2 à l'initiative.", - "disposable": true - } - ], - "initiative": 2 - } + "umiqonkcgx9mr1pvn39uuidael5udqx4", + "4oykj2egy0d7f8i6q3psvjzwh5yj49vu", + "0euzkb0u74m7z8ydgrqeobvsmvqlr4yc" ], "8": [ - { - "mana": 4, - "description": [ - { - "text": "Vous progressez dans l'[[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#L'arbre de magie|arbre de magie]] (direction rapidité).", - "disposable": true - }, - { - "text": "+4 mana max.", - "disposable": true - } - ] - }, - { - "mana": 10, - "description": [ - { - "text": "+10 mana max. ", - "disposable": false - } - ] - }, - { - "mana": 4, - "description": [ - { - "text": "Vous progressez dans l'[[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#L'arbre de magie|arbre de magie]] (direction puissance).", - "disposable": true - }, - { - "text": "+4 mana max.", - "disposable": true - } - ] - } + "lmwy5kydxq0jgajwg50xj2di2ax2j443", + "3qoz951beg1m1fqykrz5wpyoguxnl9hb", + "67y966ks9q54oy5oc2yoqmb487rdcmcp" ], "9": [ - { - "mana": 2, - "description": [ - { - "text": "Votre esprit est tellement vif que vous pouvez voir un [[1. Règles/4. La magie/1. Magie#Les sorts instinctif|sort instinctif]] être lancé. Vous pouvez maintenant les contrer et gagnez un bonus de +2 à la défense contre ces sorts.", - "disposable": false - }, - { - "text": "+2 mana max.", - "disposable": true - } - ] - }, - { - "mana": 4, - "description": [ - { - "text": "Vous progressez dans l'[[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#L'arbre de magie|arbre de magie]] (direction éléments).", - "disposable": true - }, - { - "text": "+4 mana max.", - "disposable": true - } - ] - }, - { - "mana": 2, - "description": [ - { - "text": "Lorsque vous lancez des sorts avec des effets de zone, vous pouvez choisir un nombre de cases que vous pouvez voir égal à votre mod. d'intelligence + 1 dans lesquels vos sorts de zone n'ont aucun effet. ", - "disposable": false - }, - { - "text": "+2 mana max.", - "disposable": true - } - ] - } + "zl6uas44i7fdstahc6x32mor6zjpf7g8", + "893wsq850rtvutxdmmnoz4lwktq6nip9", + "nskhct0qnj3mo60olz4oc8jekwfxvh6v" ], "10": [ - { - "description": [ - { - "text": "Vous pouvez lancer des [[1. Règles/4. La magie/1. Magie#Les sorts de précision|sorts de précision]] d'un rang supérieur.", - "disposable": true - } - ], - "spellrank": "precision" - }, - { - "description": [ - { - "text": "Choisissez une classe élémentaire. Lorsque vous voyez un sort de cet élément être lancé à 12 cases de vous, vous pouvez utiliser une réaction pour dépenser le mana à la place du lanceur avec une réaction. *Vous appliquez le coût en mana du lanceur d'origine.*", - "disposable": false, - "category": "reaction" - } - ] - }, - { - "description": [ - { - "text": "Vous avez un bonus de +1 aux jets de résistance des [[1. Magie#Les sorts de savoir|sorts de savoir]] en tant qu'attaquant.", - "disposable": true - } - ], - "resistance": [ - [ - "knowledge", - "attack" - ] - ] - } + "8sr8hrpfa49m62ut1h62scpq6rie27cr", + "dxlevxrlacugpj4jvdjs5bxecraoxbnp", + "6clvt3y93j5gmkrs4d4y00ekeujisu7w" ], "11": [ - { - "description": [ - { - "text": "Vous progressez dans l'[[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#L'arbre de magie|arbre de magie]] (direction rapidité)", - "disposable": true - } - ] - }, - { - "description": [ - { - "text": "Vous pouvez lancer des [[1. Règles/4. La magie/1. Magie#Les sorts de savoir|sorts de savoir]] d'un rang supérieur.", - "disposable": true - } - ], - "spellrank": "knowledge" - }, - { - "description": [ - { - "text": "Vous apprenez le sort unique [[1. Règles/4. La magie/2. Liste des sorts#^068b55|Soin]].", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Vous apprenez le sort unique [[1. Règles/4. La magie/2. Liste des sorts#^484fc3|Dévastation]].", - "disposable": false - } - ], - "features": [ - { - "category": "asset", - "operation": "add", - "kind": "spells", - "asset": "special-1" - } - ] - } + "gob4uk4k00pto9boi0wug77bn5wbfwbf", + "zq37gvjso4mve297h5n0odrodkg0n1k3", + "3ugv3ym7bswjhz0drbx6v3932q7w3qsy", + "r3xnn24ft3a3yolmy4hoaipx4c4v7pws" ], "12": [ - { - "description": [ - { - "text": "Vous êtes capable de préparer un sort avec la durée normale d'incantation et de le retenir pour vous en servir plus tard. Vous êtes [[1. Règles/4. La magie/1. Magie#La concentration|concentrer]] dessus jusqu'à ce que vous le relâchiez pour 1 point d'action.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Vous progressez dans l'[[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#L'arbre de magie|arbre de magie]] (direction éléments).", - "disposable": true - } - ] - }, - { - "description": [ - { - "text": "Vous progressez dans l'[[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#L'arbre de magie|arbre de magie]] (direction puissance).", - "disposable": true - } - ] - } + "i1ycfb6ikyymm1us03sj3ev9u8x9aabw", + "gpwjqe4ii2nt3vnq6xvfdrp0kh4p3gzo", + "f03ohqrwz8befed2i9kv5axnkdsj5cgk" ], "13": [ - { - "description": [ - { - "text": "", - "disposable": false - } - ] - }, - { - "mana": 12, - "description": [ - { - "text": "+12 mana max.", - "disposable": true - } - ] - }, - { - "description": [ - { - "text": "Vous apprenez le sort unique [[1. Règles/4. La magie/2. Liste des sorts#^73b8bd|Focalisation destructrice]].", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Vous apprenez le sort unique [[1. Règles/4. La magie/2. Liste des sorts#^73b8bd|Soin]].", - "disposable": false - } - ] - } + "43u5ynypcg3alqdi4cw92znfxhy3soch", + "u9m5wfovglawmz4pl12k72tari83av95", + "zco76grizmzn4xdr8opyah8lnmfma84r", + "iaaoqrn6kgvovzfpk4ygyd8yjwrxkml3" ], "14": [ - { - "description": [ - { - "text": "", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Vous pouvez dépenser jusqu'à 8 PV lorsque vous lancez un sort pour réduire son coût en mana d'un nombre égal. Le sort lancé doit obligatoirement infliger des dégâts. *Peut réduire le coût à 0 mana même lorsque le coût est non réductible.*", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Lorsque vous voyez un sort être lancé, vous pouvez dépenser jusqu'à 5 mana et une réaction pour imposer un malus de égal au mana dépensé.", - "disposable": false, - "category": "reaction" - } - ] - } + "syj4q2o1qfh5vezi2d8bzgs9fn9ok273", + "whxtzr8gdprkngc66bius4x1hf6o0qb8", + "gd17tzcfwpam0jhi576acxm6t3ugdnxx" ], "15": [ - { - "description": [ - { - "text": "", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Au prix d'un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue persistante|fatigue persistante]], lorsque quelqu'un dépense du mana à 8 cases de vous, vous doublez le coût. La cible subit un malus de 1 point par mana manquant.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Vous êtes capable de maintenir 2 [[1. Règles/4. La magie/1. Magie#La concentration|concentrations]] en même temps. *Si vous devez faire un jet de concentration, vous l'appliquez uniquement sur le plus ancien, puis sur le nouveau si vous brisez la concentration.*", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Vous êtes capable de maintenir 2 [[1. Règles/4. La magie/1. Magie#La concentration|concentrations]] en même temps. *Si vous devez faire un jet de concentration, vous l'appliquez uniquement sur le plus ancien, puis sur le nouveau si vous brisez la concentration.*", - "disposable": false - } - ] - } + "4c7nntg1xxugicltn9ntnudw5jqfvpax", + "i67f49e434qzwi53yno3q4v5mzmps3kz", + "ev7lclauthnkgjujkml0dmd3gq6bgb81", + "xyw7lf5qtjxw8m60hym15f1xoj96wfic" ] }, "curiosity": { "0": [ - { - "description": [ - { - "text": "+6 points de compétence.", - "disposable": true - }, - { - "text": "Vous ne pouvez pas utiliser d'objet consommable.", - "disposable": false, - "replaced": true - } - ], - "ability": 6 - } + "7we1ieu1xi2tdmxfkjkkbl3mlryaye3b" ], "1": [ - { - "description": [ - { - "text": "+3 points de compétence.", - "disposable": true - }, - { - "text": "Vous pouvez utiliser des objets consommables.", - "disposable": false, - "replaced": true - } - ], - "ability": 3 - } + "wqtq8zuov2iwesbvh3efkz1oetano1xi" ], "2": [ - { - "description": [ - { - "text": "+5 points de compétence.", - "disposable": true - } - ], - "ability": 5 - } + "dswxuh6sfm91lav5ozur88j86at0fhiz" ], "3": [ - { - "description": [ - { - "text": "+3 points de compétence.", - "disposable": true - } - ], - "ability": 3 - } + "sm59gtktgarkbqxsldnoj7neubi7qjae" ], "4": [ - { - "description": [ - { - "text": "+4 points de compétence.", - "disposable": true - } - ], - "ability": 4 - }, - { - "description": [ - { - "text": "+1 spécialisation.", - "disposable": true - } - ], - "spec": 1 - } + "eexi34sl9jtf85w2eurd380teykzta7a", + "7r4v6b8ozmleqo8cj1zarvdo3nh0daii" ], "5": [ - { - "description": [ - { - "text": "À chaque montée de niveau, vous pouvez déplacer jusqu'à 3 points de compétence.", - "disposable": false - }, - { - "text": "+1 point de compétence.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Les objets que vous lancez sont considérés comme des [[1. Règles/99. Annexes/4. Équipement#Les armes de jet|armes de jet]] et bénéficient des mêmes bonus.", - "disposable": false - }, - { - "text": "+1 point de compétence.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "+3 points de compétence.", - "disposable": true - } - ], - "ability": 3 - } + "lfokcp1or5abxc7moet5rm9hg5rymb22", + "v3pgxmls3lj076xjescim7tg0x9qrq6g", + "4xwi82bhwl5umhcrheow1zoyisp808yx" ], "6": [ - { - "description": [ - { - "text": "Le maximum de toutes les compétences est de 6 points, sauf s'il est déjà supérieur.", - "disposable": true - }, - { - "text": "+2 points de compétence.", - "disposable": true - } - ], - "ability": 2 - }, - { - "description": [ - { - "text": "En combat, vous pouvez lancer 2 [[1. Règles/99. Annexes/4. Équipement#Les armes de jet|armes de jet]] en 3 points d'action.", - "disposable": false, - "category": "action" - }, - { - "text": "Vous êtes capable de fabriquer des objets magiques d'une rareté accrue.", - "disposable": false - }, - { - "text": "+1 point de compétence.", - "disposable": true - } - ], - "ability": 1 - }, - { - "description": [ - { - "text": "Le maximum de toutes les compétences augmente de 1 point.", - "disposable": true - }, - { - "text": "+2 points de compétence.", - "disposable": true - } - ], - "ability": 2 - } + "yn70y3tmxdo1w0zvm7at1i7uretcgkvk", + "nqvexvg3ui6w2hqknwrw4pvf5axvu4go", + "xvrtc9lw3up643zazgdlvjea3txm00rw" ], "7": [ - { - "description": [ - { - "text": "Lorsque vous utilisez un objet consommable, vous pouvez lancer un d12. Si vous faites 12, l'objet ne se consomme pas. Cela fonctionne également sur les objets à charges.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Choisissez une statistique. Toutes les compétences qui en dépendent gagnent un point. *N'augmente pas le maximum.*", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "+1 spécialisation.", - "disposable": true - } - ], - "spec": 1 - } + "fpqb30f4zp2tw25hj786dicph4w9l65a", + "ite8lplfq0gpg5t8a279cvl0s50hbgwq", + "3q9roisgfwj99ta3q3w7m0jn972uc2gb" ], "8": [ - { - "description": [ - { - "text": "Lorsque vous lancez une [[1. Règles/99. Annexes/4. Équipement#Les armes de jet|armes de jet]] qui n'est pas consommable, vous pouvez la garder intacte et la récupérer en fin de combat.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "+3 points de compétence.", - "disposable": true - } - ], - "ability": 3 - }, - { - "description": [ - { - "text": "Vous pouvez maitriser un nombre de [[1. Magie|sorts]] et d'[[7. Œuvres|œuvres]] supplémentaires égal à votre modifieur de curiosité.", - "disposable": true - } - ], - "spellslot": "curiosity", - "arts": "curiosity" - } + "3uot4f57ooxjn598pata4yl3hh84c3pb", + "qzlz51i2i5i7g2zlo99syh91535krp5c", + "c0gm3g1g8mihca8oiitxaosng00uhndf" ], "9": [ - { - "description": [ - { - "text": "Vous êtes capable de fabriquer des prototypes.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Durant un [[1. Règles/2. L'entrainement/2. Compétences#Jet de groupe|jet de compétence de groupe]], vous pouvez ne pas lancer de dé et offrir un bonus égal à votre mod. de curiosité à tous vos camarades.", - "disposable": false - } - ] - } + "v6x5qbvdhmkjhldh8izq1z0szu8lcpmn", + "zhpkcd70n4pzh8fph2qffbm5qqvt7pck" ], "10": [ - { - "description": [ - { - "text": "Vous apprenez grâce à l'observation des autres. Durant un [[1. Règles/2. L'entrainement/2. Compétences#Jet de groupe|jet de compétence de groupe]], vous gagnez un bonus de +1 pour chaque allié qui a fait mieux que vous.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Vous gagnez un bonus de +2 à votre jet de progression de fabrication.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "+1 spécialisation.", - "disposable": true - } - ], - "spec": 1 - } + "o8ji7ylmvxy8g25ull9vl85c9ifc3cuu", + "96p24i49n4bspl8ww3igdpq4t8pzamj4", + "7r20jmlxgogm4c0t35j9jh4u9v7nga7n" ], "11": [ - { - "description": [ - { - "text": "Vous êtes capable de fabriquer des objets magiques d'une rareté accrue.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "+4 points de compétence.", - "disposable": true - } - ], - "ability": 4 - } + "ny3gecv3e8netavbeeb2idxu7ohzacww", + "9zef3r2laeo9v6dlbhonuun75jy3p6ax" ], "12": [ - { - "description": [ - { - "text": "Vous pouvez relancer un dé de compétence un nombre de fois égal à votre modifieur de [[1. Règles/2. L'entrainement/1. Entrainement#La curiosité|curiosité]] entre chaque [[1. Règles/1. Introduction/2. Glossaire#Long repos|long repos]].", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Vous pouvez lancer une [[1. Règles/99. Annexes/4. Équipement#Les armes de jet|armes de jet]] en une action libre. Vous ne pouvez pas lancer d'[[1. Règles/99. Annexes/4. Équipement#Les armes de jet|armes de jet]] avec une action dans le même tour.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Choisissez une statistique. Une fois entre chaque [[1. Règles/1. Introduction/2. Glossaire#Long repos|long repos]], vous pouvez considérer que vous avez fait 12 sur un jet de compétence dépendant de cette statistique.", - "disposable": false - } - ] - } + "m9q7hj44otuopzicr99g2il730sa39ze", + "xeadbpjwr980idrfvq1s5psdg7h27wrg", + "r3zfcrszhiowrv963cxdiu6p7jsqh1tn" ], "13": [ - { - "description": [ - { - "text": "Lorsque vous faites une [[1. Règles/1. Introduction/2. Glossaire#Réussite critique|réussite critique]] sur un jet de compétence, vous gagnez un bonus de +4 à cette compétence utilisable une fois jusqu'à votre prochain repos. *Non cumulable.*", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Vous êtes capable de fabriquer des objets #unique. Si vous n'avez pas déjà l'objet sur vous, vous devez faire un jet d'histoire à chaque progression. Votre progression en fabrication ne peut pas dépasser votre score sur le jet d'histoire.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "+5 points de compétence.", - "disposable": true - } - ], - "ability": 5 - } + "k0jr8bey9exuec37qgi5nab4mbc9yaa8", + "4sefwbdulllkdiuc1wfc36svwbk3xggt", + "od1bpzr0d8nockvmjewk9ya9bxz6179p" ], "14": [ - { - "description": [ - { - "text": "Choisissez une compétence. Si vous faites 6 ou moins à votre jet, vous considérez que votre jet est un 6. *Ne fonctionne pas sur les jets de fabrications et les jets d'œuvres*", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Lorsque vous fabriquez des [[1. Règles/99. Annexes/4. Équipement#Les armes|armes]], leur dé de dégâts augmente de [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#L'evolution des dés|1 niveau]].", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Une fois entre chaque [[1. Règles/1. Introduction/2. Glossaire#Long repos|long repos]], vous pouvez considérer que vous avez fait 12 sur un jet de compétence.", - "disposable": false - } - ] - } + "x0rv4bbeey2r1rdc6a5881nndyxc5kwh", + "7ii1ig85j7a1gacorzkn6oyjdt3w6jzh", + "xkvc55hklw4zk4ds5l2edwln3o98qlnd" ], "15": [ - { - "description": [ - { - "text": "Vous augmentez le modifieur de votre choix de 1.", - "disposable": true - } - ], - "modifier": 1 - }, - { - "description": [ - { - "text": "Vous êtes capable de fabriquer des objets magiques d'une rareté accrue.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Une fois entre chaque [[1. Règles/1. Introduction/2. Glossaire#Repos court|repos court]], vous pouvez considérer que vous avez fait un 10 lorsque vous devez lancer un d12.", - "disposable": false - } - ] - } + "gmgp03fhr0pkjof5dopvvinr9qguuszh", + "xxfnbzg7viioo9ohumtggazjmd7zpcpd", + "8v1duhxatene2utj8llwcj5eie4not77" ] }, "charisma": { "0": [ - { - "description": [ - { - "text": "Vous ne vous exprimez qu'auprès de personnes en qui vous avez une confiance absolue. Lorsqu'impliqué dans un dialogue, vous refusez de vous exprimer même en présence de vos amis.", - "disposable": false, - "replaced": true - }, - { - "text": "Durant un combat, l'angoisse vous fait subir un malus de 2 à tout vos jets (hors dégâts et soin).", - "disposable": false, - "replaced": true - } - ] - } + "9mewrpbw1y26bmkz6a95ywmjyuz9nt9b" ], "1": [ - { - "description": [ - { - "text": "Vous ne parlez pas aux inconnus et lors de dialogues, vous ne parlez qu'à vos amis.", - "disposable": false, - "replaced": true - }, - { - "text": "Durant un combat, l'angoisse vous fait subir un malus de 1 à tous vos jets (hors dégâts et soins).", - "disposable": false, - "replaced": true - } - ] - } + "jx0ogmuhiauym6qrdvwoga9emjn0kbeh" ], "2": [ - { - "description": [ - { - "text": "Anxiété sociale. Vous ne parlez pas aux inconnus et lors de dialogues, vous ne parlez qu'à vos amis.", - "disposable": false, - "replaced": true - }, - { - "text": "Lorsqu'un allié [[1. Règles/3. Le combat/2. Actions en combat#Communiquer|communique]] en combat, votre stress vous fait subir un malus de 1 à tous vos jets (hors dégâts et soins).", - "disposable": false, - "replaced": true - } - ] - } + "eli8sozjq6ysoom5qwptnzcftshpm5wk" ], "3": [ - { - "description": [ - { - "text": "Lorsqu'un allié [[1. Règles/3. Le combat/2. Actions en combat#Communiquer|communique]] en combat, votre stress vous fait subir un malus de 1 à tous vos jets (hors dégâts et soins).", - "disposable": false, - "replaced": true - } - ] - } + "jyerevoithxhijuido4250mafj4tvvqm" ], "4": [ - { - "description": [ - { - "text": "Vous pouvez [[1. Règles/3. Le combat/2. Actions en combat#Communiquer|communiquer]] en combat et ne subissez plus de malus lorsque les autres communiquent.", - "disposable": true, - "replaced": true - } - ] - } + "rzyqhgpuwyhc9issvaj8j7su48um7ss9" ], "5": [ - { - "description": [ - { - "text": "Vous gagnez un bonus de +1 à vos compétences dépendant du charisme lorsque vous les utilisez sur des personnes de votre rang social. Fonctionne sur les œuvres impliquant ces personnes.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Vous offrez un bonus de +1 à l'initiative à tout votre groupe.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Vous êtes capable d'interpréter des [[1. Règles/99. Annexes/7. Œuvres|œuvres]] d'un rang supérieur.", - "disposable": false - } - ] - } + "33z43vfru99itce4nah6w2p5ge70et4k", + "lw9u7uwpeqyk5uu5o91glq64a9ish2qu", + "4g3dioadasdb13fgtiwiohsn0lrul04t" ], "6": [ - { - "description": [ - { - "text": "Vous gagnez un bonus de +1 à vos compétences dépendant du charisme lorsque vous les utilisez sur des personnes que vous fréquentez régulièrement. Fonctionne sur les œuvres impliquant ces personnes.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "", - "disposable": false - } - ] - } + "gv6u8t4cqw18f9ys1bu9avb6ufwgz06o", + "qhqp8me2qp6h0ozjxnw8cwlzg7i5jhqs", + "nguo5mc5q78kc0dv7ui9vlfe4pe9jmtw" ], "7": [ - { - "description": [ - { - "text": "Vous avez un bonus de +1 aux jets de résistance de [[1. Règles/99. Annexes/2. Liste des effets#Influencé|influence]] et de [[1. Règles/99. Annexes/2. Liste des effets#Charmé|charme]] en tant qu'attaquant.", - "disposable": true - } - ], - "resistance": [ - [ - "influence", - "attack" - ], - [ - "charm", - "attack" - ] - ] - }, - { - "description": [ - { - "text": "En 2 points d'action, vous pouvez diriger vos alliées pour faciliter leurs déplacement. Les alliées que vous pouvez voir peuvent durant leur tour se déplacer de la moitié de leur vitesse de course gratuitement. Vous ne pouvez pas utiliser d'action libre pour [[1. Règles/3. Le combat/2. Actions en combat#Communiquer|communiquer]] durant ce tour.", - "disposable": false, - "category": "action" - } - ] - }, - { - "description": [ - { - "text": "Vous pouvez retenir un nombre d'œuvre supplémentaire égal à votre mod. de charisme.", - "disposable": true - } - ], - "arts": "charisma" - } + "cyz5y5wyjvvh768mg8jtgti0tfp6uflz", + "q31j8f370w8xqoiv9j6k7cak5x6ec4by", + "gk5ivnshum3p90hhdg4ajtjlycz82giz" ], "8": [ - { - "description": [ - { - "text": "", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Vous êtes capable de vous battre durant une performance. Vous pouvez frapper avec une arme de corps à corps utilisant la [[1. Règles/2. L'entrainement/1. Entrainement#La dextérité|dextérité]] tout en maintenant votre performance avec 3 points d'action.", - "disposable": false, - "category": "action" - } - ] - } + "pehcgqhwcimc5wozpazuxxonzdtwzvq4", + "6ls3fq5ng8wvp5jv7gt5c2lvnhec65oi", + "e82w2mhawunimiumddiybn2mp9i3wjp5" ], "9": [ - { - "description": [ - { - "text": "Vous êtes capable d'[[1. Règles/99. Annexes/2. Liste des effets#Influencé|influencer]] des personnes. Après 10 minutes de discussion, votre cible doit faire un jet de résistance (d12/7 + mod. de [[1. Règles/2. L'entrainement/1. Entrainement#Le charisme|charisme]]) à l'[[1. Règles/99. Annexes/2. Liste des effets#Influencé|influence]]. ", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Vous gagnez une nouvelle réaction, utilisable uniquement pour saisir une opportunité.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Vous êtes capable d'interpréter des [[1. Règles/99. Annexes/7. Œuvres|œuvres]] d'un rang supérieur.", - "disposable": false - } - ] - } + "rolt2161s0exz5809wshusfb3cksvy6q", + "6x9hu23ld0najypcth2i48oj5g74pfew", + "jw0dgm5uonxvid08j4eou67hezpdbkae" ], "10": [ - { - "description": [ - { - "text": "Après avoir [[1. Règles/3. Le combat/2. Actions en combat#Analyser une situation|analysé]] ([[1. Règles/2. L'entrainement/2. Compétences#Compréhension|compréhension]] 10) 2 fois un adversaire, vous pouvez saisir l'opportunité lorsqu'il vous attaque pour le supplier de vous épargner. Vous faites alors un [[1. Règles/1. Introduction/2. Glossaire#Jet opposé|jet opposé]] de [[1. Règles/2. L'entrainement/2. Compétences#Persuasion|persuasion]] contre [[1. Règles/2. L'entrainement/2. Compétences#Compréhension|compréhension]]. Il change alors de cible s'il a une autre cible à portée.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Après avoir [[1. Règles/3. Le combat/2. Actions en combat#Analyser une situation|analysé]] ([[1. Règles/2. L'entrainement/2. Compétences#Compréhension|compréhension]] 10) 2 fois un adversaire, vous pouvez saisir l'opportunité au début de son tour pour le provoquer et l'inciter à vous attaquer. Si vous êtes à sa portée, il se mettra à vous attaquer.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Vous êtes capable d'entremêler des [[1. Règles/99. Annexes/7. Œuvres|œuvres]] de rang 1 affectant les adversaires et les alliées.", - "disposable": false - } - ] - } + "jjz3firpbdhnbadhm4r0zcmqdj7alfo5", + "clfj53bjvonr4n9ml8g18yjl5tglak98", + "ye7jnp5jmdf8kncz0crfh420bx56zyha" ], "11": [ - { - "description": [ - { - "text": "Vous avez un bonus de +1 aux jets de résistance de [[1. Règles/99. Annexes/2. Liste des effets#Influencé|influence]] et de [[1. Règles/99. Annexes/2. Liste des effets#Charmé|charme]] en tant qu'attaquant.", - "disposable": true - } - ], - "resistance": [ - [ - "influence", - "attack" - ], - [ - "charm", - "attack" - ] - ] - }, - { - "description": [ - { - "text": "Vous pouvez [[1. Règles/3. Le combat/2. Actions en combat#Communiquer|communiquer]] gratuitement une fois par tour.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Tant que vous maintenez votre [[1. Règles/99. Annexes/7. Œuvres|œuvre]], vous gagnez un bonus de +2 pour maintenir votre concentration sur un sort.", - "disposable": false - } - ] - } + "dqqu234gog0jukjzcwyt3ycl5s0bleki", + "ajzfy4j655ud44m8qr05rqnjunfr6cdx", + "ei7018fdlpxrlbm1fjoz7fvjptxrexay" ], "12": [ - { - "description": [ - { - "text": "Lorsque vous infligez des dégâts avec une attaque au corps à corps, vous pouvez saisir l'opportunité pour faire un jet d'[[1. Règles/2. L'entrainement/2. Compétences#Intimidation|intimidation]]. Si le résultat est supérieur à la vie actuelle de la cible, elle est [[1. Règles/99. Annexes/2. Liste des effets#Apeuré|apeurée]] pendant un tour.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Vous êtes immunisés aux influences **non magiques** et vous avez un bonus de +3 aux jets de résistance de [[1. Règles/99. Annexes/2. Liste des effets#Charmé|charme]] **non magiques** en tant que défenseur.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Vous êtes capable d'improviser n'importe quelle [[1. Règles/99. Annexes/7. Œuvres|œuvre]] de rang 1, sans avoir à l'apprendre.", - "disposable": false - } - ] - } + "2703rnov414mizauv4wdfi9jft4dv7nz", + "c4q28moagwaafnba2dvixt82ze5wj82z", + "3gi1vraony242viwqhygrp9how2a3gxv" ], "13": [ - { - "description": [ - { - "text": "Vous êtes capable de [[1. Règles/99. Annexes/2. Liste des effets#Charmé|charmer]] des personnes sous [[1. Règles/99. Annexes/2. Liste des effets#Influencé|influence]]. Après 10 minutes de discussion, votre cible doit faire un jet de résistance (d8/5 + mod. de [[1. Règles/2. L'entrainement/1. Entrainement#Le charisme|charisme]]) au [[1. Règles/99. Annexes/2. Liste des effets#Charmé|charme]]. En cas de réussite, la cible perds l'influence. #balancing", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Vous êtes capable d'interpréter des [[1. Règles/99. Annexes/7. Œuvres|œuvres]] d'un rang supérieur.", - "disposable": false - } - ] - } + "n0t4j9aamcjirp09w973gttoj6v1qd21", + "ephakrv6zmv5hnssn4fvcemx9w5tktwc", + "sc7p6a54prehtgtecbqhsbkgy20c1tgu" ], "14": [ - { - "description": [ - { - "text": "", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "", - "disposable": false - } - ] - } + "x41gj307qchlvalccvtwyslcm9j3sot6", + "i0jk2fhv15uogfwe8lpugxkzch2vkvcu", + "h52xwpf7fafi2rtx0ntv6fwjueuwp37w" ], "15": [ - { - "description": [ - { - "text": "", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Vous sacrifiez 1 point d'action et 1 réaction par tour pour offrir à tout les alliées visible un bonus de +1 à tout les jets. Lorsque vous arrêtez de donner le bonus, vous subissez un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue persistante|fatigue persistante]].", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Vous êtes capable de choisir les cibles que vous souhaitez lorsque vous jouez des œuvres impactant plusieurs personnes.", - "disposable": false - } - ] - } + "flitpsmt97yve3fygycbmfn08kri7kio", + "e0pta3so9d8zqv7ptwar7sgdo3yf1fpe", + "9hes51dqn1hxdp9m0w3vq80i2gj0ho1w" ] }, "psyche": { "0": [ - { - "description": [ - { - "text": "Transformation impossible. Alignement chaotique obligatoire. Une [[1. Règles/99. Annexes/8. Divers#Possession aléatoire|possession aléatoire]] peut survenir.", - "disposable": false, - "replaced": true - }, - { - "text": "Vous avez un malus -1 aux jets de résistance de [[1. Règles/99. Annexes/2. Liste des effets#Influencé|influence]], [[1. Règles/99. Annexes/2. Liste des effets#Charmé|charme]] et de [[1. Règles/99. Annexes/2. Liste des effets#Possédé|possession]] en tant que défenseur.", - "disposable": false, - "replaced": true - } - ] - } + "bk4ozh4lfq3gilhuafj7dq53042ye8tg" ], "1": [ - { - "description": [ - { - "text": "Transformation impossible. Alignement chaotique obligatoire. Une [[1. Règles/99. Annexes/8. Divers#Possession aléatoire|possession aléatoire]] peut survenir.", - "disposable": false, - "replaced": true - } - ] - } + "rxct0tarxhjomgmagqfs5vilxmrvwwcq" ], "2": [ - { - "description": [ - { - "text": "Alignement chaotique obligatoire.", - "disposable": false, - "replaced": true - }, - { - "text": "Vous pouvez vous transformer une fois par jour durant 30min.", - "disposable": false - }, - { - "text": "Vous avez un [[1. Règles/1. Introduction/2. Glossaire#Avantage et désavantage|désavantage]] pour vous transformer. ", - "disposable": false, - "replaced": true - } - ] - } + "jfzfqi16ch3lctzupknh4lty65r8n92o" ], "3": [ - { - "description": [ - { - "text": "Vous n'avez plus de [[1. Règles/1. Introduction/2. Glossaire#Avantage et désavantage|désavantage]] pour vous transformer. ", - "disposable": false, - "replaced": true - }, - { - "text": "Plus de contrainte d'alignement.", - "disposable": false, - "replaced": true - } - ] - } + "r8oabbqsn7lldyw02np9h8vvfqlgzu2a" ], "4": [ - { - "description": [ - { - "text": "Chaque transformation peut durer 15 minutes de plus, et vous pouvez vous transformer une fois de plus par jour. ", - "disposable": false - }, - { - "text": "Vous pouvez lancer des [[1. Règles/4. La magie/1. Magie#Les sorts instinctif|sorts instinctifs]].", - "disposable": true - } - ], - "spellrank": "instinct" - } + "wdga3j54uw3avr9j34gs5pn3864lm2kt" ], "5": [ - { - "mana": 10, - "description": [ - { - "text": "+10 mana max.", - "disposable": true - } - ] - }, - { - "mana": 2, - "description": [ - { - "text": "Vous avez un bonus de +1 aux jets de résistance de [[1. Règles/99. Annexes/2. Liste des effets#Charmé|charme]] et de [[1. Règles/99. Annexes/2. Liste des effets#Possédé|possession]] en tant que défenseur.", - "disposable": true - }, - { - "text": "+2 mana max.", - "disposable": true - } - ], - "resistance": [ - [ - "charm", - "defense" - ], - [ - "possesion", - "defense" - ] - ] - }, - { - "description": [ - { - "text": "Vous pouvez dépenser jusqu'à 3 points de mana lorsque vous tentez de vous transformer pour gagner un bonus de 2 par mana dépensé.", - "disposable": false - } - ] - } + "ceabuy629didgsp0qfikjj4lbil49so2", + "p76dlhd086sxqjme0oetquti8776uhxv", + "ucragqvswcqo4s3c88desrcvdcbvvou2" ], "6": [ - { - "description": [ - { - "text": "Votre connexion innée avec la magie vous a bénie d'un don pour cet art. Choisissez une branche de l'[[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#L'arbre de magie|arbre de magie]]. Vous gagnez le premier niveau de cette branche.", - "disposable": true - } - ] - }, - { - "mana": 3, - "description": [ - { - "text": "Vous récupérez 2 points de mana supplémentaire par [[1. Règles/99. Annexes/3. Fatigue et repos#Gain par heure de repos|heure de repos]].", - "disposable": false - }, - { - "text": "+3 mana max.", - "disposable": true - } - ] - }, - { - "description": [ - { - "text": "Lorsqu'un dégât subit passe votre armure, vous pouvez subir un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue temporaire|fatigue temporaire]] et dépenser jusqu'à 10 points de mana pour réduire les dégâts d'un montant équivalent.", - "disposable": false - } - ] - } + "66w0krutsvcyiezhc87kmeinlr59iyzt", + "qf7rvhxdpkg4c1xen0b516owcd8tcj9l", + "s5kidncgfzw85ffubl718lx2f68suhqf" ], "7": [ - { - "description": [ - { - "text": "Vous pouvez maitriser un nombre de sort supplémentaires égal à votre modifieur de psyché.", - "disposable": false, - "spellslot": "psyche" - } - ] - }, - { - "description": [ - { - "text": "Vous apprenez à lancer des [[1. Règles/4. La magie/1. Magie#Les sorts instinctif|sorts instinctifs]] d'un rang supérieur.", - "disposable": true - } - ], - "spellrank": "instinct" - }, - { - "description": [ - { - "text": "Chaque transformation peut durer 15 minutes de plus. De plus, vous avez +1 pour vous transformer.", - "disposable": false - } - ] - } + "l9t3uupzdgzbomsg8adgot8t5wg2pk3b", + "qd4f2yssnkd9o9i9ngkxphj71p8ywchr", + "s589rc6qzndhmcel1qgyzr04ksgolrn4" ], "8": [ - { - "description": [ - { - "text": "Vous avez un bonus de +1 aux jets de résistance de [[1. Règles/99. Annexes/2. Liste des effets#Apeuré|peur]] et de [[1. Règles/99. Annexes/2. Liste des effets#Charmé|charme]] en tant qu'attaquant.", - "disposable": true - } - ], - "resistance": [ - [ - "charm", - "attack" - ], - [ - "fear", - "attack" - ] - ] - }, - { - "description": [ - { - "text": "Les sorts que vous lancez demandent une difficulté augmentée d'un nombre égal au rang du sort pour être [[1. Règles/4. La magie/2. Liste des sorts#^a8f46f|contrer]]. Les sorts spéciaux comptent comme des sorts de rang 3.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Selon l'alignement de votre Aspect, vous avez un bonus de +1 aux jets de résistance suivant en tant qu'attaquant et défenseur.\nLoyal: [[1. Règles/99. Annexes/2. Liste des effets#Charmé|Charme]] / Neutre: [[1. Règles/99. Annexes/2. Liste des effets#Influencé|Influence]] / Chaotique: [[1. Règles/99. Annexes/2. Liste des effets#Apeuré|Peur]].", - "disposable": false - } - ] - } + "2vsgel7owdmpcft5kqewgdys0y73ud2l", + "9i3c4u5b0a04whwsiyd8fw3v0zqyaakx", + "8h686z5othgskh3sbajict0prpfndpxp" ], "9": [ - { - "description": [ - { - "text": "Vous gagnez un niveau dans une branche de l'[[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#L'arbre de magie|arbre de magie]] dans laquelle vous avez déjà au moins un niveau.", - "disposable": true - } - ] - }, - { - "mana": 12, - "description": [ - { - "text": "+12 mana max.", - "disposable": true - } - ] - }, - { - "description": [ - { - "text": "Vous pouvez bénéficier des sens supplémentaires de votre Aspect sans avoir à vous transformer. ", - "disposable": false - }, - { - "text": "De plus, vous avez +1 pour vous transformer.", - "disposable": false - } - ] - } + "754kal3xwed5l87wct4bv6r56y0hgoto", + "tnifrozwq0shyuv6phv7anznbimwe6bz", + "qf3eru17f8u3hysq56k246mlq7p2rbc9" ], "10": [ - { - "description": [ - { - "text": "Vous pouvez maitriser un nombre de sort supplémentaires égal à votre modifieur d'intelligence.", - "disposable": false, - "spellslot": "intelligence" - } - ] - }, - { - "description": [ - { - "text": "Lorsque vous subissez des dégâts en étant transformé, vous pouvez dépenser jusqu'à 5 points de mana et réduire les dégâts d'un montant équivalent.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Vous pouvez vous transformer autant de fois que vous le souhaitez. Le temps total que vous pouvez passer en Aspect est égal à votre nombre de transformation multiplié par la durée d'une transformation.", - "disposable": false - } - ] - } + "8t97bkvu9596xx0yrt6okyiaph6miay2", + "l7yfi8i4gmprarsfy8ue6bj2u88gz0xm", + "0qddds1tbe8kp8eiv96j835tm91de3no" ], "11": [ - { - "description": [ - { - "text": "", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Vous apprenez à lancer des [[1. Règles/4. La magie/1. Magie#Les sorts instinctif|sorts instinctifs]] d'un rang supérieur.", - "disposable": true - } - ], - "spellrank": "instinct" - }, - { - "description": [ - { - "text": "", - "disposable": false - } - ] - } + "vqwqxz180253lb77afaam2xgpfloyqb7", + "dqca85rzzjc7zjyv4y2mjxpmzvjlhs2z", + "gpcahjw17dvycsy5jhdidm1ztnvm6a27" ], "12": [ - { - "description": [ - { - "text": "Vous gagnez un niveau dans une branche de l'[[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#L'arbre de magie|arbre de magie]] dans laquelle vous avez déjà au moins un niveau.", - "disposable": true - } - ] - }, - { - "mana": 6, - "description": [ - { - "text": "Lorsque vous êtes transformé, vous gagnez un bonus de +2 pour lancer des sorts de [[1. Règles/4. La magie/2. Liste des sorts#Rang 1|Rang 1]].", - "disposable": false - }, - { - "text": "+6 mana max.", - "disposable": true - } - ] - }, - { - "description": [ - { - "text": "Lorsque vous êtes transformé, vous avez [[1. Règles/1. Introduction/2. Glossaire#Avantage et désavantage|avantage]] contre les jets de résistances demandant le mod. d'[[1. Règles/2. L'entrainement/1. Entrainement#L'intelligence|intelligence]] et de [[1. Règles/2. L'entrainement/1. Entrainement#La psyché|psyché]].", - "disposable": false - } - ] - } + "7aiupz7hpiqjiavp2t5iph77lwmyj61y", + "pes3dkprscoymd4sednqbqk0wjs87p0v", + "sw45zzv7bf6v35h064f6zhcj1e7xbbr5" ], "13": [ - { - "description": [ - { - "text": "", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "En ratant un jet de résistance d'[[1. Règles/99. Annexes/2. Liste des effets|effet mental]], de [[1. Règles/4. La magie/1. Magie#Les sorts de savoir|sorts de savoir]] ou de [[1. Règles/4. La magie/1. Magie#Les sorts instinctif|sorts instinctif]], vous pouvez subir un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue temporaire|fatigue temporaire]] pour relancer le jet.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Vous pouvez vous transformer autant de fois que vous le souhaitez sans limite de temps.", - "disposable": false - } - ] - } + "koz2ij3tuwj50uvnikm2h3q2xizqm6ck", + "1xblotgy4lq20qwy5ct69yqchk3lc91e", + "qvi4hbdzx52icrxt1e7ieq5om7ma3e38" ], "14": [ - { - "description": [ - { - "text": "Vous apprenez le sort unique [[1. Règles/4. La magie/2. Liste des sorts#^5b38b6|Domination mentale]].", - "disposable": false - } - ] - }, - { - "mana": 16, - "description": [ - { - "text": "+16 mana max.", - "disposable": true - } - ] - }, - { - "description": [ - { - "text": "Si votre Aspect à une vitesse de nage, vol ou escalade, vous pouvez l'utiliser sans faire de jet de transformation. Vous pouvez également attaquer avec les [[1. Règles/99. Annexes/4. Équipement#Les armes naturelles|armes naturelles]] de votre Aspect sans vous transformer.", - "disposable": false - } - ] - } + "xgfzfhzqwosb3wbbaf4oejgy1t1z16p6", + "dv43g9uxad6b17odesr1ciahoupo6anz", + "sq43lzc8bdftrbbfwaq5l6nx1h5jx0eh" ], "15": [ - { - "description": [ - { - "text": "Vous pouvez vous transformer sans faire de jet avec 1 point d'action.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Lorsque vous êtes transformé, vous gagnez un bonus de +2 en lançant des sorts de [[1. Règles/4. La magie/2. Liste des sorts#Rang 2|Rang 2]], des sorts spéciaux et des sorts uniques.", - "disposable": false - } - ] - }, - { - "description": [ - { - "text": "Vous êtes capable d'utiliser les particularités magiques de votre Aspect sans vous transformer.", - "disposable": false - } - ] - } + "c4nptbfb5uoyz98ovsqjxwlssgui9h9p", + "jro3s412h8cmqznvlzkshdibqljh6fdl", + "rb6fk4ry8x7y8e95bll9g8jwv5noaqxj" ] } }, @@ -5308,57 +1536,3844 @@ "name": "Digride", "description": "", "stat": "dexterity", - "alignment": { "loyalty": "loyal", "kindness": "evil" }, + "alignment": { + "loyalty": "loyal", + "kindness": "evil" + }, "magic": true, "difficulty": 10, - "physic": { "min": 12, "max": 22 }, - "mental": { "min": 8, "max": 15 }, - "personality": { "min": 12, "max": 20 }, - "options": [ - - ] + "physic": { + "min": 12, + "max": 22 + }, + "mental": { + "min": 8, + "max": 15 + }, + "personality": { + "min": 12, + "max": 20 + }, + "options": [] }, { "name": "Akkatom", "description": "", "stat": "strength", - "alignment": { "loyalty": "loyal", "kindness": "good" }, + "alignment": { + "loyalty": "loyal", + "kindness": "good" + }, "magic": true, "difficulty": 9, - "physic": { "min": 18, "max": 25 }, - "mental": { "min": 8, "max": 12 }, - "personality": { "min": 8, "max": 12 }, - "options": [ - - ] + "physic": { + "min": 18, + "max": 25 + }, + "mental": { + "min": 8, + "max": 12 + }, + "personality": { + "min": 8, + "max": 12 + }, + "options": [] }, { "name": "Nolcalir", "description": "", "stat": "intelligence", - "alignment": { "loyalty": "loyal", "kindness": "neutral" }, + "alignment": { + "loyalty": "loyal", + "kindness": "neutral" + }, "magic": true, "difficulty": 9, - "physic": { "min": 8, "max": 20 }, - "mental": { "min": 8, "max": 20 }, - "personality": { "min": 5, "max": 18 }, - "options": [ - - ] + "physic": { + "min": 8, + "max": 20 + }, + "mental": { + "min": 8, + "max": 20 + }, + "personality": { + "min": 5, + "max": 18 + }, + "options": [] }, { "name": "Brukaur", "description": "", "stat": "constitution", - "alignment": { "loyalty": "chaotic", "kindness": "neutral" }, + "alignment": { + "loyalty": "chaotic", + "kindness": "neutral" + }, "magic": false, "difficulty": 9, - "physic": { "min": 18, "max": 25 }, - "mental": { "min": 3, "max": 13 }, - "personality": { "min": 8, "max": 15 }, - "options": [ - - ] + "physic": { + "min": 18, + "max": 25 + }, + "mental": { + "min": 3, + "max": 13 + }, + "personality": { + "min": 8, + "max": 15 + }, + "options": [] } - ] + ], + "features": { + "zne1gy546fiflmaz2fw3o33pskonfplr": { + "description": "Pas d'équipement.\nNe peut pas se déplacer par soi même.\nDef max à 3.", + "effect": [ + { + "category": "value", + "operation": "set", + "property": "defense/hardcap", + "value": 3, + "id": "ngahpen54o7yoeerh104h2l25s468yfl" + }, + { + "category": "value", + "operation": "set", + "property": "capacity", + "value": 0, + "id": "vz03omlouqlhbsfzrb23ltuqv8jlkg4t" + }, + { + "category": "value", + "operation": "set", + "property": "speed", + "value": false, + "id": "m11xefaq7a3bk4ca9zv430ui47w8g1qt" + } + ], + "id": "zne1gy546fiflmaz2fw3o33pskonfplr" + }, + "wu8jb0v7djq789h1snaaoekjwrh4dxgv": { + "description": "Vitesse de course de 0 cases.\nDef max à 6.\nPas d'équipement.", + "effect": [ + { + "category": "value", + "operation": "set", + "property": "defense/hardcap", + "value": 6, + "id": "vsarwbpuzkd7gi1ao7ha8neb4ruu56s0" + }, + { + "category": "value", + "operation": "set", + "property": "capacity", + "value": 0, + "id": "7eijwrgowe7yergjsoqtpikdycryn05l" + }, + { + "category": "value", + "operation": "set", + "property": "speed", + "value": 0, + "id": "azavbae68v2h1mvosd75xp94fhsfm6n7" + } + ], + "id": "wu8jb0v7djq789h1snaaoekjwrh4dxgv" + }, + "aty2uyi890ixb03krm0wy2xus4a4wcqh": { + "description": "Vitesse de course de 0 cases.\nVous commencez à maitriser des armes (cf. [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les catégories d'arme|Les catégories d'arme]]).\nImpossible de parer.", + "id": "aty2uyi890ixb03krm0wy2xus4a4wcqh", + "effect": [ + { + "category": "value", + "operation": "set", + "property": "defense/hardcap", + "value": 9999, + "id": "r2hiiif5dj0ux0ibsdewjnerpduyhuye" + }, + { + "category": "value", + "operation": "set", + "property": "speed", + "value": 0, + "id": "91zixgegcr9xddj1i6df0ufn743ydpk3" + }, + { + "category": "value", + "operation": "add", + "property": "mastery/strength", + "value": 1, + "id": "snln0zbxesavzv0v2s03e9q2p3z4kshf" + } + ] + }, + "eqjxih0uc93c8b0uxsrapj17dg0vhnsy": { + "description": "Vitesse de course de 3 cases.\nVous commencez à maitriser des armures (cf. [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les catégories d'armure|Les catégories d'armure]]). \nVous pouvez parer activement (+1).", + "id": "eqjxih0uc93c8b0uxsrapj17dg0vhnsy", + "effect": [ + { + "category": "value", + "operation": "set", + "property": "speed", + "value": 3, + "id": "ujmhxz3i6k1th80ut70zvk9vz1f1j6y8" + }, + { + "category": "value", + "operation": "add", + "property": "mastery/armor", + "value": 1, + "id": "uzj2kqp0kk3pihhceonbbmjtyytmm3ue" + }, + { + "category": "value", + "operation": "add", + "property": "defense/activeparry", + "value": 1, + "id": "kmempy5bbh2hfhf4iwgfuz1v6vnflpgo" + }, + { + "category": "value", + "operation": "add", + "property": "modifier/strength", + "value": 1, + "id": "0bvn6bd715g40kkxjm4oamazec3aolbl" + } + ] + }, + "kti6o07ibn6x4z5nrai2icnyyie9sho7": { + "description": "Vitesse de course de 6 cases.\nVous maitrisez des armes d'une catégorie supérieure.\nVous apprenez à parer passivement les coups (+1).", + "id": "kti6o07ibn6x4z5nrai2icnyyie9sho7", + "effect": [ + { + "category": "value", + "operation": "set", + "property": "speed", + "value": 6, + "id": "mqalxu5rzxqs4bfa2r14fz5ck9lfhe3w" + }, + { + "category": "value", + "operation": "add", + "property": "mastery/strength", + "value": 1, + "id": "027ca123gra3xukdpdggici2xp43mmu4" + }, + { + "category": "value", + "operation": "add", + "property": "defense/activeparry", + "value": 1, + "id": "mvwg55303vwbuw864xk6t5yranckbefx" + }, + { + "category": "value", + "operation": "add", + "property": "defense/passiveparry", + "value": 1, + "id": "rm7929xf7unfagu10rnewjydm6p0zm84" + } + ] + }, + "68ob40xb2s36xc9bhg1irqefsos5iajg": { + "description": "Vous maitrisez des armes d'une [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les catégories d'arme|catégorie]] supérieure (direction force).", + "id": "68ob40xb2s36xc9bhg1irqefsos5iajg", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "mastery/strength", + "value": 1, + "id": "raxhfre3w4p1cz2de6rtblxptabxh909" + } + ] + }, + "4w0b7yvsuppurb3byt8frczntad84hy6": { + "description": "Lorsque vous [[1. Règles/3. Le combat/2. Actions en combat#Intercepter|interceptez]] un adversaire, vous pouvez faire une attaque plutôt que de le contraindre.", + "id": "4w0b7yvsuppurb3byt8frczntad84hy6", + "effect": [ + { + "category": "list", + "action": "add", + "id": "utcpqqjmuu8nf1yw1gynlxj2dtgmsfnl", + "list": "passive", + "item": "Lorsque vous [[1. Règles/3. Le combat/2. Actions en combat#Intercepter|interceptez]] un adversaire, vous pouvez faire une attaque plutôt que de le contraindre." + } + ] + }, + "016yrfhn7ngljqy4j9lzc6qe5gojk056": { + "description": "Vous maitrisez l'utilisation des [[1. Règles/99. Annexes/4. Équipement#Les boucliers|boucliers]].", + "id": "016yrfhn7ngljqy4j9lzc6qe5gojk056", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "mastery/shield", + "value": 1, + "id": "zeut9xj5v549omoe3t7f5ap9hiiz3svy" + } + ] + }, + "i7yjxme5zrvfm1hmtsisgzzt0h2ckac2": { + "description": "Vous maitrisez des armes d'une [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les catégories d'arme|catégorie]] supérieure (direction force).", + "id": "i7yjxme5zrvfm1hmtsisgzzt0h2ckac2", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "mastery/strength", + "value": 1, + "id": "gc27qhhatp5wmgurz9s6e94lxj3pnvx2" + }, + { + "category": "value", + "operation": "add", + "property": "modifier/strength", + "value": 1, + "id": "9rfn9hou0p5o47f8snfr50dz1eaqeem7" + } + ] + }, + "21fgl5np82r6d7rrolai90nj9edb1hv4": { + "description": "En infligeant des dégâts critique, vous pouvez choisir d'ignorer l'armure adverse.", + "id": "21fgl5np82r6d7rrolai90nj9edb1hv4", + "effect": [ + { + "category": "list", + "action": "add", + "id": "xqlkr3fsfwh62ymlbtav2h8uc6qhrc3a", + "list": "passive", + "item": "En infligeant des dégâts critique, vous pouvez choisir d'ignorer l'armure adverse." + }, + { + "category": "value", + "operation": "add", + "property": "modifier/strength", + "value": 1, + "id": "3zfrnqg3uiavy8mzcrjwk3lmxhklyl3c" + } + ] + }, + "32uiwp9qv4rqquvu3kxig53y36onev04": { + "description": "Vous pouvez porter une armure de [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les catégories d'armure|catégorie]] supérieure.", + "id": "32uiwp9qv4rqquvu3kxig53y36onev04", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "mastery/armor", + "value": 1, + "id": "fre4zhtcybi3mrxedcl2b5evjuu5t3ub" + }, + { + "category": "value", + "operation": "add", + "property": "modifier/strength", + "value": 1, + "id": "owfaba38emk29j7z4yb7ncrmgt8mpjjg" + } + ] + }, + "oajhcz8hku38aa13lz7fmzbxexim5xo2": { + "description": "Utiliser la [[1. Règles/2. L'entrainement/1. Entrainement#La force|force]] pour frapper avec une arme augmente les dégâts infligés de 2.", + "id": "oajhcz8hku38aa13lz7fmzbxexim5xo2", + "effect": [ + { + "category": "list", + "action": "add", + "id": "4h6qzu7wm35bu1z1kgawaer0dfzmt4h2", + "list": "passive", + "item": "Utiliser la [[1. Règles/2. L'entrainement/1. Entrainement#La force|force]] pour frapper avec une arme augmente les dégâts infligés de 2." + } + ] + }, + "mzm4c61pb47lmqlexv2zz43vvb2df2i8": { + "description": "Vous maitrisez des armes d'une [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les catégories d'arme|catégorie]] supérieure (direction force).", + "id": "mzm4c61pb47lmqlexv2zz43vvb2df2i8", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "mastery/strength", + "value": 1, + "id": "8lxel13pyzq3xxf31ml0c4ezdn1et2yz" + } + ] + }, + "t64l3mi6pjypcr47754xbqen0mi3uqx3": { + "description": "Vous pouvez porter une armure de [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les catégories d'armure|catégorie]] supérieure.", + "id": "t64l3mi6pjypcr47754xbqen0mi3uqx3", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "mastery/armor", + "value": 1, + "id": "8fxw3nchuh3ednuyk2uzyqaej7cfyc5a" + } + ] + }, + "97ru4qzil52x4ulj2aq23i4b1fzrh1kl": { + "description": "Frapper avec une [[1. Règles/99. Annexes/4. Équipement#Les armes|arme standard]], [[1. Règles/99. Annexes/4. Équipement#Les armes lourdes|lourdes]] ou [[1. Règles/99. Annexes/4. Équipement#Les armes à deux mains|à deux mains]] augmente les dégâts infligés de 2, mais réduit le [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les niveaux de dé de dégâts|dé de dégâts]] au niveau inférieur.", + "id": "97ru4qzil52x4ulj2aq23i4b1fzrh1kl", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "mastery/armor", + "value": 1, + "id": "woec4mgjuualj2w33k37g6w4sp31thf3" + } + ] + }, + "d6az7m830gjyzvo6lr8faah72ex4ofy2": { + "description": "Vous pouvez utiliser 3 points d'action pour faire 2 attaques.", + "id": "d6az7m830gjyzvo6lr8faah72ex4ofy2", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "mastery/armor", + "value": 1, + "id": "5mzeaksnx6i9zf10zjf67h57stfkvwhr" + } + ] + }, + "frlk7oir6gp8jp7wqmrdl51c4w9tm6to": { + "description": "En vous [[1. Règles/3. Le combat/2. Actions en combat#S'interposer|interposant]], vous gagnez un bonus de +2 pour contraindre.", + "id": "frlk7oir6gp8jp7wqmrdl51c4w9tm6to", + "effect": [ + { + "category": "list", + "action": "add", + "id": "07awrx1h1y04kopl0scc7qg8i1iar3qx", + "list": "passive", + "item": "En vous [[1. Règles/3. Le combat/2. Actions en combat#S'interposer|interposant]], vous gagnez un bonus de +2 pour contraindre." + } + ] + }, + "6c74okwask7eyepj2cr0cwb6o303ledu": { + "description": "Au prix d'un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue temporaire|fatigue temporaire]], durant votre tour, les dégâts que vous infligerez avec une [[1. Règles/99. Annexes/4. Équipement#Les armes|arme standard]], [[1. Règles/99. Annexes/4. Équipement#Les armes lourdes|lourdes]] ou [[1. Règles/99. Annexes/4. Équipement#Les armes à deux mains|à deux mains]] vous permet de lancer un second dé de dégâts de votre arme. *Ce dé peut être doublé en cas de dégâts critique.*", + "id": "6c74okwask7eyepj2cr0cwb6o303ledu", + "effect": [ + { + "category": "list", + "action": "add", + "id": "n7vjtf4yjir4ud1xuopqvg4n5muipuky", + "list": "passive", + "item": "Au prix d'un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue temporaire|fatigue temporaire]], durant votre tour, les dégâts que vous infligerez avec une [[1. Règles/99. Annexes/4. Équipement#Les armes|arme standard]], [[1. Règles/99. Annexes/4. Équipement#Les armes lourdes|lourdes]] ou [[1. Règles/99. Annexes/4. Équipement#Les armes à deux mains|à deux mains]] vous permet de lancer un second dé de dégâts de votre arme. *Ce dé peut être doublé en cas de dégâts critique.*" + }, + { + "category": "value", + "operation": "add", + "property": "modifier/strength", + "value": 1, + "id": "bymzrqbltds69fd7kkl7na43nzv8uj50" + } + ] + }, + "ax8jlfjcw263oouzi3a8859srktxeyiq": { + "description": "Après avoir pris un adversaire en tenaille, si un allié parvient à le toucher, vous obtenez également un [[1. Règles/1. Introduction/2. Glossaire#Avantage et désavantage|avantage]] sur votre **première** attaque contre cet adversaire.", + "id": "ax8jlfjcw263oouzi3a8859srktxeyiq", + "effect": [ + { + "category": "list", + "action": "add", + "id": "7jjvsvjv74ckm2tzz8pusho8iwp5nvyo", + "list": "passive", + "item": "Après avoir pris un adversaire en tenaille, si un allié parvient à le toucher, vous obtenez également un [[1. Règles/1. Introduction/2. Glossaire#Avantage et désavantage|avantage]] sur votre **première** attaque contre cet adversaire." + }, + { + "category": "value", + "operation": "add", + "property": "modifier/strength", + "value": 1, + "id": "lyqh3h6olpmca55uy5ot0oliuww07u1g" + } + ] + }, + "tncqh3j9pdf60j4zrzd79mq4hu22ppb3": { + "description": "Si vous ne maitrisez pas les [[1. Règles/99. Annexes/4. Équipement#Les boucliers|boucliers]], vous pouvez maintenant les utiliser. Sinon, votre bonus de parade active et passive augmentent de 1 point.", + "id": "tncqh3j9pdf60j4zrzd79mq4hu22ppb3", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "mastery/shield", + "value": 1, + "id": "m96zwz98tvc09d7lmzu3zl9wthem5j4o" + }, + { + "category": "value", + "operation": "add", + "property": "modifier/strength", + "value": 1, + "id": "hhveuxnj0725pzd0b6sfolcfk7r88a3s" + } + ] + }, + "djocax8ggqyixn0i5f8p8xtes9u300wg": { + "description": "Au prix d'un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue persistante|fatigue persistante]], durant tout votre tour, vous obtenez un bonus de +4 pour frapper avec une [[1. Règles/99. Annexes/4. Équipement#Les armes|arme standard]], [[1. Règles/99. Annexes/4. Équipement#Les armes lourdes|lourdes]] ou [[1. Règles/99. Annexes/4. Équipement#Les armes à deux mains|à deux mains]].", + "id": "djocax8ggqyixn0i5f8p8xtes9u300wg", + "effect": [ + { + "category": "list", + "action": "add", + "id": "kj3keb1m7kb7yy86ngkdyc5dg4sjx9d1", + "list": "passive", + "item": "Au prix d'un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue persistante|fatigue persistante]], durant tout votre tour, vous obtenez un bonus de +4 pour frapper avec une [[1. Règles/99. Annexes/4. Équipement#Les armes|arme standard]], [[1. Règles/99. Annexes/4. Équipement#Les armes lourdes|lourdes]] ou [[1. Règles/99. Annexes/4. Équipement#Les armes à deux mains|à deux mains]]." + } + ] + }, + "9ajn811xiv0msq0sw0g26skk2cnyi7jm": { + "description": "Lorsque vous frappez en utilisant la [[1. Règles/2. L'entrainement/1. Entrainement#La force|force]], faire un 11 sur le lancer de d12 est considéré comme un coup critique. Cependant, vous subissez un malus de 1 point pour frapper.", + "id": "9ajn811xiv0msq0sw0g26skk2cnyi7jm", + "effect": [ + { + "category": "list", + "action": "add", + "id": "ntapx7a26csrkig0tz7i3wto45qrjfae", + "list": "passive", + "item": "Lorsque vous frappez en utilisant la [[1. Règles/2. L'entrainement/1. Entrainement#La force|force]], faire un 11 sur le lancer de d12 est considéré comme un coup critique. Cependant, vous subissez un malus de 1 point pour frapper." + } + ] + }, + "zm9g0yufycmr41uedzyoyqvjsvnrjgay": { + "description": "Parer une attaque au corps à corps permet à **un seul** allié de saisir l'opportunité pour l'attaquer (au corps à corps).", + "id": "zm9g0yufycmr41uedzyoyqvjsvnrjgay", + "effect": [ + { + "category": "list", + "action": "add", + "id": "f8zr52xv6rv09xppaduiwdb0ekqcttcj", + "list": "passive", + "item": "Parer une attaque au corps à corps permet à **un seul** allié de saisir l'opportunité pour l'attaquer (au corps à corps)." + } + ] + }, + "px4xmy4dig8a55tq5z0pj5ant5mhy7m6": { + "description": "En frappant avec une [[1. Règles/99. Annexes/4. Équipement#Les armes|arme standard]], [[1. Règles/99. Annexes/4. Équipement#Les armes lourdes|lourde]] ou [[1. Règles/99. Annexes/4. Équipement#Les armes à deux mains|à deux mains]], vous pouvez choisir de subir un malus de -4 pour infliger 8 points de dégâts supplémentaires. *A annoncer avant le lancer de dé.*", + "id": "px4xmy4dig8a55tq5z0pj5ant5mhy7m6", + "effect": [ + { + "category": "list", + "action": "add", + "id": "f61m9nsd3ie3jokcp56sd4nt1kf7cuac", + "list": "passive", + "item": "En frappant avec une [[1. Règles/99. Annexes/4. Équipement#Les armes|arme standard]], [[1. Règles/99. Annexes/4. Équipement#Les armes lourdes|lourde]] ou [[1. Règles/99. Annexes/4. Équipement#Les armes à deux mains|à deux mains]], vous pouvez choisir de subir un malus de -4 pour infliger 8 points de dégâts supplémentaires. *A annoncer avant le lancer de dé.*" + } + ] + }, + "7vaciljo5qhmy47uix067v0cujcff7wg": { + "description": "Lorsque ce n'est pas votre tour, vous pouvez [[1. Règles/3. Le combat/2. Actions en combat#Saisir une opportunité|saisir l'opportunité]] pour frapper un adversaire lorsqu'il se déplace pour esquiver.", + "id": "7vaciljo5qhmy47uix067v0cujcff7wg", + "effect": [ + { + "category": "list", + "action": "add", + "id": "f3ye8y09t38ephuywmxwmkqcekq9goeg", + "list": "passive", + "item": "Lorsque ce n'est pas votre tour, vous pouvez [[1. Règles/3. Le combat/2. Actions en combat#Saisir une opportunité|saisir l'opportunité]] pour frapper un adversaire lorsqu'il se déplace pour esquiver." + } + ] + }, + "vu7oj9y9i3gmlezms3tb86qni8i2cciy": { + "description": "En prenant en tenaille un adversaire, vous offrez l'[[1. Règles/1. Introduction/2. Glossaire#Avantage et désavantage|avantage]] aux attaques à distance et aux [[1. Règles/4. La magie/1. Magie#Les sorts de précision|sorts de précision]].", + "id": "vu7oj9y9i3gmlezms3tb86qni8i2cciy", + "effect": [ + { + "category": "list", + "action": "add", + "id": "j5uy04nqv34kc3e9727v0iln1vs513z6", + "list": "passive", + "item": "En prenant en tenaille un adversaire, vous offrez l'[[1. Règles/1. Introduction/2. Glossaire#Avantage et désavantage|avantage]] aux attaques à distance et aux [[1. Règles/4. La magie/1. Magie#Les sorts de précision|sorts de précision]]." + } + ] + }, + "6i94xxto9o3857fpknawp1wpomxtjvdm": { + "description": "Vous êtes capable de tenir une [[1. Règles/99. Annexes/4. Équipement#Les armes à deux mains|arme à deux mains]] dans une seule main. Vous ne pouvez cependant pas tenir d'arme dans votre autre main, *même en ayant progressé dans l'[[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les armes multiples|arbre des armes multiples]]*.", + "id": "6i94xxto9o3857fpknawp1wpomxtjvdm", + "effect": [ + { + "category": "list", + "action": "add", + "id": "lepj7ywl93gj84aqoz3ak5i036dcw5z6", + "list": "passive", + "item": "Vous êtes capable de tenir une [[1. Règles/99. Annexes/4. Équipement#Les armes à deux mains|arme à deux mains]] dans une seule main. Vous ne pouvez cependant pas tenir d'arme dans votre autre main, *même en ayant progressé dans l'[[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les armes multiples|arbre des armes multiples]]*." + }, + { + "category": "value", + "operation": "add", + "property": "modifier/strength", + "value": 1, + "id": "csvjmhzosvd44rlrk331vqsvs1fbnzva" + } + ] + }, + "8qhafpspdmayfqn3ycxbdy9i8nvlxecr": { + "description": "Au prix d'un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue temporaire|fatigue temporaire]], durant tout un tour, faire une attaque ne demande que 1 point d'action.", + "id": "8qhafpspdmayfqn3ycxbdy9i8nvlxecr", + "effect": [ + { + "category": "list", + "action": "add", + "id": "auo9umht5yulkfz9xq9s61vfjl4ualpm", + "list": "passive", + "item": "Au prix d'un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue temporaire|fatigue temporaire]], durant tout un tour, faire une attaque ne demande que 1 point d'action." + }, + { + "category": "value", + "operation": "add", + "property": "modifier/strength", + "value": 1, + "id": "k61gbtsjmg0mvmel2io2mbcpc79guw9o" + } + ] + }, + "dgfl0p2j5mzshhsbnzyvyqlyzamxm1e0": { + "description": "Vous pouvez frapper, puis vous [[1. Règles/3. Le combat/2. Actions en combat#S'interposer|interposer]] en 3 points d'action.", + "id": "dgfl0p2j5mzshhsbnzyvyqlyzamxm1e0", + "effect": [ + { + "category": "list", + "action": "add", + "extra": 3, + "id": "4qtmwqe5nqscpn7ntned3rjfoesef1qm", + "list": "action", + "item": "Vous pouvez frapper, puis vous [[1. Règles/3. Le combat/2. Actions en combat#S'interposer|interposer]] en 3 points d'action." + }, + { + "category": "value", + "operation": "add", + "property": "modifier/strength", + "value": 1, + "id": "ih81e7vj978ec30bjvi52y7hh0ol0wcs" + } + ] + }, + "sg5yvnizk2zzzmz5odx47blav10mumd9": { + "description": "En tenant une [[1. Règles/99. Annexes/4. Équipement#Les armes|arme standard]], [[1. Règles/99. Annexes/4. Équipement#Les armes lourdes|lourdes]] ou [[1. Règles/99. Annexes/4. Équipement#Les armes à deux mains|à deux mains]], vous gagnez un bonus de +3 pour résister aux désarmement. De plus, lorsque l'on rate à vous contraindre au corps à corps, vous pouvez gratuitement contre attaquer avec votre poing *même si vous tenez une arme*.", + "id": "sg5yvnizk2zzzmz5odx47blav10mumd9", + "effect": [] + }, + "k80789wndamhl4y6g1w068chgshij5di": { + "description": "En infligeant des [[1. Règles/3. Le combat/1. Combat#Réussite critique|dégâts critique]], vous pouvez choisir de doubler les dégâts fixes.", + "id": "k80789wndamhl4y6g1w068chgshij5di", + "effect": [] + }, + "nugvq8dlnfha9ve53xiirf39muiquu19": { + "description": "Vous êtes capable de tenir un [[1. Règles/99. Annexes/4. Équipement#Les boucliers à deux mains|bouclier à deux mains]] dans une seule main. Vous pouvez **au mieux** tenir une [[1. Règles/99. Annexes/4. Équipement#Les armes légères|arme légère]] ou [[1. Règles/99. Annexes/4. Équipement#Les armes de jet|de jet]] dans l'autre main.", + "id": "nugvq8dlnfha9ve53xiirf39muiquu19", + "effect": [] + }, + "a1t2w13fztdej3jan7v74uc2wjz3tik6": { + "description": "", + "id": "a1t2w13fztdej3jan7v74uc2wjz3tik6", + "effect": [] + }, + "p06pl1mnwoslgfx1lepmmeh4ish6lu0v": { + "description": "Vous pouvez, jusqu'au début de votre prochain tour, réduire votre défense à 5. Cependant, si vous êtes frappé par une attaque au corps à corps, vous pouvez immédiatement contre attaquer **gratuitement** avec un [[1. Règles/1. Introduction/2. Glossaire#Avantage et désavantage absolu|avantage absolu]].", + "id": "p06pl1mnwoslgfx1lepmmeh4ish6lu0v", + "effect": [] + }, + "31w7euyudl8le3n0qqz3sc4cukwtvo9i": { + "description": "Lorsqu'un adversaire à portée de corps à corps attaque une autre cible que vous, vous pouvez utiliser une réaction pour l'attaquer *une seule fois*.", + "id": "31w7euyudl8le3n0qqz3sc4cukwtvo9i", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "modifier/strength", + "value": 1, + "id": "zwi7j90mq3sco0j4a38xevly565elb4d" + } + ] + }, + "io9ol13tmlyki5eh6qens726tx7kec9u": { + "description": "", + "id": "io9ol13tmlyki5eh6qens726tx7kec9u", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "modifier/strength", + "value": 1, + "id": "t93qznb8yi4ox4slumf1sslpvowhcrag" + } + ] + }, + "y9xt37yz2ni2qyznx0wd0jqea4drvxsb": { + "description": "Votre érudition du combat est légendaire. Vous êtes capable en [[1. Règles/3. Le combat/2. Actions en combat#Communiquer|communiquant]] d'offrir un bonus de +3 à un allié que vous voyez attaquer.", + "id": "y9xt37yz2ni2qyznx0wd0jqea4drvxsb", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "modifier/strength", + "value": 1, + "id": "5l4d61rhb7rdocg85lp0c88hyjy2ifle" + } + ] + }, + "jbzfpw2vov1wjo9l0wwjmatzgzokmwz0": { + "description": "Lorsque vous parez passivement, vous réduisez les dégâts d'un montant égal à votre bonus de parade passive.", + "id": "jbzfpw2vov1wjo9l0wwjmatzgzokmwz0", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "modifier/strength", + "value": 1, + "id": "pmdfg0fbiut629evesgqfijgfunmz3t8" + } + ] + }, + "fr8hr26cbc8u62iwp4h9kq31iz5ld35v": { + "description": "Impossible de tenir des objets.\nDef max à 3.", + "id": "fr8hr26cbc8u62iwp4h9kq31iz5ld35v", + "effect": [] + }, + "2sf7ddlhzqon9di68ij0gmj2l4sc17ea": { + "description": "Def max à 3 + bonus defensif.\n-3 à toute utilisation d'objet ou d'arme.\nTemps d'interaction x2 avec les objets.", + "id": "2sf7ddlhzqon9di68ij0gmj2l4sc17ea", + "effect": [] + }, + "pn7vje60pqye0b5yp0fy4whcsh99wd5r": { + "description": "-1 à toute utilisation d'objet ou d'arme.\nTemps d'interaction x2 avec les objets.", + "id": "pn7vje60pqye0b5yp0fy4whcsh99wd5r", + "effect": [] + }, + "niz5jt6boo4k3qewdc3yt9l9lp8fsxne": { + "description": "Vous pouvez esquiver activement.\nVotre bonus d'esquive passive reste à 0.", + "id": "niz5jt6boo4k3qewdc3yt9l9lp8fsxne", + "effect": [ + { + "id": "m0kxjl606vtemv5k01sudhf28rroqceh", + "category": "value", + "operation": "add", + "property": "defense/activedodge", + "value": 1 + } + ] + }, + "1ml6w69eie1jcmxj8jmvo4n9gryka602": { + "description": "Votre bonus d'esquive active augmente de 1 point.\nVotre bonus d'esquive passive augmente de 1 point.\nVous progressez dans l'arbre des [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les armes multiples|armes multiples]].", + "id": "1ml6w69eie1jcmxj8jmvo4n9gryka602", + "effect": [ + { + "id": "ujpsqavjtnt6cacg82cadhv72qyadj5y", + "category": "value", + "operation": "add", + "property": "defense/passivedodge", + "value": 1 + }, + { + "id": "dfm2z38d52ewnhmf84li5xhn6py2zzny", + "category": "value", + "operation": "add", + "property": "defense/activedodge", + "value": 1 + } + ] + }, + "j6omfwpmorl65gltaeco1tv8khkrylys": { + "description": "Vous pouvez utiliser la dextérité pour frapper avec une [[1. Règles/99. Annexes/4. Équipement#Les armes naturelles|arme naturelle]]. Une arme naturelle est considéré comme une [[1. Règles/99. Annexes/4. Équipement#Les armes|arme]] et bénéficie des mêmes bonus.", + "id": "j6omfwpmorl65gltaeco1tv8khkrylys", + "effect": [] + }, + "sr1vwkxq0z25pvdikwy81fotcm3c0pd2": { + "description": "Vous maitrisez des armes d'une [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les catégories d'arme|catégorie]] supérieure (direction dextérité).", + "id": "sr1vwkxq0z25pvdikwy81fotcm3c0pd2", + "effect": [ + { + "id": "0kh3qw99m67otzv141knnmir7ly8yhir", + "category": "value", + "operation": "add", + "property": "mastery/dexterity", + "value": 1 + } + ] + }, + "g44tcievcov9d4v3u8dmytbyqv9zf6tq": { + "description": "Vous progressez dans l'arbre des [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les armes multiples|armes multiples]].", + "id": "g44tcievcov9d4v3u8dmytbyqv9zf6tq", + "effect": [] + }, + "cb3j2er92coaxs5eru36qusut88hklk2": { + "description": "Vous gagnez un bonus de +1 à l'initiative.\nVous n'avez aucun malus pour contraindre lorsque vous n'êtes pas à main nus.", + "id": "cb3j2er92coaxs5eru36qusut88hklk2", + "effect": [ + { + "id": "slwasagq9d1pdmhze2ii61fvvfxqcixh", + "category": "value", + "operation": "add", + "property": "initiative", + "value": 1 + } + ] + }, + "7k20w6sfvntfusu8zqrw1e60tonk3ti3": { + "description": "Vous maitrisez des armes d'une [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les catégories d'arme|catégorie]] supérieure (direction dextérité).", + "id": "7k20w6sfvntfusu8zqrw1e60tonk3ti3", + "effect": [ + { + "id": "220tbkubb41rsk7vfw71pc49ke1uf3bg", + "category": "value", + "operation": "add", + "property": "mastery/dexterity", + "value": 1 + } + ] + }, + "9vg98s0syzepmhd6m85p09o7w19v1ccz": { + "description": "Vous avez un bonus de +1 aux jets de résistance des [[1. Magie#Les sorts de précision|sorts de précision]] en tant que défenseur.", + "id": "9vg98s0syzepmhd6m85p09o7w19v1ccz", + "effect": [ + { + "id": "bfsje239851fjyjdk2n41n1xt6lo3118", + "category": "value", + "operation": "add", + "property": "resistance/0", + "value": [ + "precision", + "defense" + ] + } + ] + }, + "zyhji19tls87giznj05lonilp39rn940": { + "description": "Votre bonus d'esquive actif augmente de 1 point.\nVotre bonus d'esquive passive augmente de 1 point.", + "id": "zyhji19tls87giznj05lonilp39rn940", + "effect": [ + { + "id": "ukspxj2avxakvm3zhcs48try82r331qv", + "category": "value", + "operation": "add", + "property": "defense/passivedodge", + "value": 1 + }, + { + "id": "iq7zngrigsuukeak9l9l6ea7d4iav7u7", + "category": "value", + "operation": "add", + "property": "defense/activedodge", + "value": 1 + } + ] + }, + "k703rofxwuoht2kmlpc4lea486hj61as": { + "description": "Vous êtes capable d'utiliser la distance longue d'une [[1. Règles/99. Annexes/4. Équipement#Les armes à projectiles|arme à projectiles]] ou d'une [[1. Règles/99. Annexes/4. Équipement#Les armes de jet|arme de jet]] sans malus.\n", + "id": "k703rofxwuoht2kmlpc4lea486hj61as", + "effect": [] + }, + "yzw94smc30wb2yrwm127abq38ctnkazh": { + "description": "Frapper un ennemi au corps à corps dans le dos applique les même bonus que la [[1. Règles/3. Le combat/2. Actions en combat#Prendre en tenaille|prise en tenaille]]. Si l'ennemi a déjà été pris en tenaille ce tour ci, vous pouvez ignorer l'[[1. Règles/99. Annexes/4. Équipement#Les armures lourdes|armure lourde]].", + "id": "yzw94smc30wb2yrwm127abq38ctnkazh", + "effect": [] + }, + "kcmvjjj8m02yoknc7zoximghirrh32tv": { + "description": "Vous pouvez utiliser 1 point d'action pour vous concentrer et viser, vous permettant de gagner un bonus de +2 pour votre prochaine attaque avec une [[1. Règles/99. Annexes/4. Équipement#Les armes à projectiles|arme à projectiles]], une [[1. Règles/99. Annexes/4. Équipement#Les armes de jet|arme de jet]] ou avec un [[1. Règles/4. La magie/1. Magie#Les sorts de précision|sort de précision]].", + "id": "kcmvjjj8m02yoknc7zoximghirrh32tv", + "effect": [] + }, + "yyw64l2ci9h9ftvfvlumi6bq1zyaxpg5": { + "description": "Utiliser une [[1. Règles/99. Annexes/4. Équipement#Les armes à projectiles|arme à projectiles]] ou un [[1. Règles/4. La magie/1. Magie#Les sorts de précision|sort de précision]] au corps à corps ne provoque plus de [[1. Règles/1. Introduction/2. Glossaire#Avantage et désavantage|désavantage]].", + "id": "yyw64l2ci9h9ftvfvlumi6bq1zyaxpg5", + "effect": [] + }, + "u33frpxycixgesm8a8d6dqbzv81sjvbj": { + "description": "En frappant un adversaire en étant [[1. Règles/99. Annexes/6. Visibilité et lumière#Caché|caché]], vous pouvez subir un malus de -5 et déclencher un [[1. Règles/3. Le combat/1. Combat#Réussite critique|dégât critique]] si vous touchez.", + "id": "u33frpxycixgesm8a8d6dqbzv81sjvbj", + "effect": [] + }, + "8rkt2q6w99qywnobuzidipbvo5axkp39": { + "description": "", + "id": "8rkt2q6w99qywnobuzidipbvo5axkp39", + "effect": [] + }, + "goboiu6ajetnqxij2ek83ejl13aayzu1": { + "description": "Vous avez un bonus de +1 aux jets de résistance des [[1. Magie#Les sorts de précision|sorts de précision]] en tant qu'attaquant.", + "id": "goboiu6ajetnqxij2ek83ejl13aayzu1", + "effect": [ + { + "id": "e2g6nqcfzwozbqcfhvq52doiqy0klvcq", + "category": "value", + "operation": "add", + "property": "resistance/0", + "value": [ + "precision", + "attack" + ] + } + ] + }, + "co9h9z8r6w7x4t9ev040hznmz3eqybqp": { + "description": "Vous progressez dans l'arbre des [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les armes multiples|armes multiples]].", + "id": "co9h9z8r6w7x4t9ev040hznmz3eqybqp", + "effect": [] + }, + "3g6nqtkln2wcjdvc2j8juieio48dfu78": { + "description": "Votre bonus d'esquive active augmente de 1 point.\nVous gagnez un bonus de +1 à l'initiative.", + "id": "3g6nqtkln2wcjdvc2j8juieio48dfu78", + "effect": [ + { + "id": "kuh045hjebmrsec1m6fpjv1tll5nl3jg", + "category": "value", + "operation": "add", + "property": "initiative", + "value": 1 + }, + { + "id": "tqln0pobeaxepgn4boljz1z3vn4eo54r", + "category": "value", + "operation": "add", + "property": "defense/activedodge", + "value": 1 + } + ] + }, + "6jhfmtdie25c2jay66kniv4t0w5wkm0s": { + "description": "En attaquant avec une [[1. Règles/99. Annexes/4. Équipement#Les armes à projectiles|arme à projectiles]], vous pouvez choisir de subir un malus de -4 pour infliger 8 points de dégâts supplémentaires. *A annoncer avant le lancer de dé.*", + "id": "6jhfmtdie25c2jay66kniv4t0w5wkm0s", + "effect": [] + }, + "rwnivpd2o9g6t6f7tec8tbyfx5zonha8": { + "description": "Vous avez un bonus de +1 aux jets de résistance de [[1. Règles/99. Annexes/2. Liste des effets#Saignement|saignement]] en tant qu'attaquant.", + "id": "rwnivpd2o9g6t6f7tec8tbyfx5zonha8", + "effect": [ + { + "id": "9sbg1ev34tvzkxv0gw72u1g3qkryj3mc", + "category": "value", + "operation": "add", + "property": "resistance/0", + "value": [ + "bleed", + "attack" + ] + } + ] + }, + "jsrqok8pks4qxzs8q1euqugjmrkvupmv": { + "description": "Votre bonus d'esquive passive augmente de 1 point.\nVous avez un bonus de +1 aux jets de résistance des [[1. Règles/4. La magie/1. Magie#Les sorts de précision|sorts de précision]] en tant que défenseur.", + "id": "jsrqok8pks4qxzs8q1euqugjmrkvupmv", + "effect": [ + { + "id": "zcvqbsuhnzfzmi0m1wsi9s68secsk1bl", + "category": "value", + "operation": "add", + "property": "defense/passivedodge", + "value": 1 + }, + { + "id": "60bfqrnxp9ybjk4vvrqieegppdf900qj", + "category": "value", + "operation": "add", + "property": "resistance/0", + "value": [ + "precision", + "defense" + ] + } + ] + }, + "qrjui665fuu5dg5ookbfpmzq6naamjuv": { + "description": "À moyenne distance avec une [[1. Règles/99. Annexes/4. Équipement#Les armes à projectiles|arme à projectiles]], \nvous pouvez tirer 2 projectiles en une attaque. Applique les règles de l'.", + "id": "qrjui665fuu5dg5ookbfpmzq6naamjuv", + "effect": [] + }, + "8w887kwr999zgeu6ilyuexcnyqo0x55z": { + "description": "Votre malus d'attaque avec des armes multiples est réduit de 1.", + "id": "8w887kwr999zgeu6ilyuexcnyqo0x55z", + "effect": [] + }, + "5inrt9sdz1vv6g2pmmkoy0xs0qc7innt": { + "description": "Vous êtes capable d'esquiver passivement même lorsque vous êtes [[1. Règles/99. Annexes/2. Liste des effets#Agrippé|agrippé]]. Vous êtes capable d'esquiver activement sans vous déplacer.", + "id": "5inrt9sdz1vv6g2pmmkoy0xs0qc7innt", + "effect": [] + }, + "5bv9vzt6vfl6uzrpmoyvl8edbqaijjji": { + "description": "Vous avez un bonus de +1 aux jets de résistance des [[1. Magie#Les sorts de précision|sorts de précision]] en tant qu'attaquant.", + "id": "5bv9vzt6vfl6uzrpmoyvl8edbqaijjji", + "effect": [ + { + "id": "0wl6hmxg6cwgs5123h4gwy9qdle8dvni", + "category": "value", + "operation": "add", + "property": "resistance/0", + "value": [ + "precision", + "attack" + ] + } + ] + }, + "d0fubyi5kqh2pluz0udb6zpa0y5g9dnp": { + "description": "", + "id": "d0fubyi5kqh2pluz0udb6zpa0y5g9dnp", + "effect": [] + }, + "5f7y0cpd2bs6715q36zn6gk7onmwbukv": { + "description": "Lorsque vous subissez une attaque suite à une [[1. Règles/3. Le combat/2. Actions en combat#Prendre en tenaille|prise en tenaille]], vous pouvez avec une réaction imposer un malus de -2 à l'attaque. Si l'attaquant vous rate, il frappe alors son camarade *même s'il n'as pas normalement la portée*.", + "id": "5f7y0cpd2bs6715q36zn6gk7onmwbukv", + "effect": [] + }, + "6swn6fufogkmw4t3mhk60004n5i9ihn1": { + "description": "", + "id": "6swn6fufogkmw4t3mhk60004n5i9ihn1", + "effect": [] + }, + "fa35dal96kb5b1ksjp75w10iqtpch7dg": { + "description": "Lorsque vous parvenez à parer activement avec une [[1. Règles/99. Annexes/4. Équipement#Les armes légères|arme légère]], vous pouvez gratuitement attaquer **une seule fois** avec cette même arme.", + "id": "fa35dal96kb5b1ksjp75w10iqtpch7dg", + "effect": [] + }, + "0rtrsvohk1rpisxc8kz537ttosoi3xlj": { + "description": "Votre bonus d'esquive active augmente de 1 point.", + "id": "0rtrsvohk1rpisxc8kz537ttosoi3xlj", + "effect": [ + { + "id": "snrccuvaik5dakv8iu1ejxydc70samwq", + "category": "value", + "operation": "add", + "property": "defense/activedodge", + "value": 1 + } + ] + }, + "0w62ha1h1ryhfowqv94zutp5eg2gdm0c": { + "description": "", + "id": "0w62ha1h1ryhfowqv94zutp5eg2gdm0c", + "effect": [] + }, + "zb0fq9mrn08p189zfdo16vm2m945f4yc": { + "description": "Vous progressez dans l'arbre des [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#Les armes multiples|armes multiples]].", + "id": "zb0fq9mrn08p189zfdo16vm2m945f4yc", + "effect": [] + }, + "xdu766mmvq7bses3lfnaydfdakkmxpty": { + "description": "Vous ne pouvez plus esquiver activement. Tant que vous portez au mieux une [[1. Règles/99. Annexes/4. Équipement#Les armures légères|armure légère]], votre esquive passive est égale à votre esquive active.", + "id": "xdu766mmvq7bses3lfnaydfdakkmxpty", + "effect": [] + }, + "k3ruht1zd277qjuujh4kkv91pqajnjcx": { + "description": "Vous savez viser les points les plus faibles d'une cible. En 3 points d'action, vous pouvez tirez **un** projectile avec une [[1. Règles/99. Annexes/4. Équipement#Les armes à projectiles|arme à projectiles]] et déclenchez automatiquement un [[1. Règles/3. Le combat/1. Combat#Réussite critique|dégât critique]] en touchant. Faire une [[1. Règles/1. Introduction/2. Glossaire#Réussite critique|réussite critique]] n'offre plus de bonus.", + "id": "k3ruht1zd277qjuujh4kkv91pqajnjcx", + "effect": [] + }, + "0knrfe02d0qsf4lowcwmdolqdumfmu19": { + "description": "Au prix d'un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue temporaire|fatigue temporaire]], votre malus d'attaque avec des armes multiples est réduit de 1 jusqu'à la fin de votre tour.", + "id": "0knrfe02d0qsf4lowcwmdolqdumfmu19", + "effect": [] + }, + "54v90bmnaaocg0ssjsaawej4i0756qb3": { + "description": "Vous subissez en permanence les effets des maladies [[2. Compendium/Work in progress/Maladies#Pourriture mortelle|Pourriture mortelle]], [[2. Compendium/Work in progress/Maladies#Anémie|Anémie]] et [[2. Compendium/Work in progress/Maladies#Immunodéficience|Immunodéficience]]. \n-5 PV max.", + "id": "54v90bmnaaocg0ssjsaawej4i0756qb3", + "effect": [ + { + "id": "3370p77ucbstncj71osk1l0ttn920bx4", + "category": "value", + "operation": "add", + "property": "health", + "value": -5 + } + ] + }, + "rii7i524py6sprzeqaetp95au26yhsgj": { + "description": "Vous subissez en permanence les effets des maladies [[2. Compendium/Work in progress/Maladies#Pourriture mortelle|Pourriture mortelle]], [[2. Compendium/Work in progress/Maladies#Anémie|Anémie]] et [[2. Compendium/Work in progress/Maladies#Immunodéficience|Immunodéficience]].", + "id": "rii7i524py6sprzeqaetp95au26yhsgj", + "effect": [ + { + "id": "1x6ja9trv4iy3z9x7nmcpqkevj6h131g", + "category": "value", + "operation": "add", + "property": "health", + "value": 5 + } + ] + }, + "m518dybrez85ut96mpdx70awr7v9fdw7": { + "description": "Vous subissez en permanence les effets des maladies [[2. Compendium/Work in progress/Maladies#Pourriture mortelle|Pourriture mortelle]] et [[2. Compendium/Work in progress/Maladies#Immunodéficience|Immunodéficience]].\n+3 PV max.", + "id": "m518dybrez85ut96mpdx70awr7v9fdw7", + "effect": [ + { + "id": "44e8nkf6ko77mj0fiteolpdha8jfo9er", + "category": "value", + "operation": "add", + "property": "health", + "value": 3 + } + ] + }, + "nnydpmhq0ugcmi1kr8wccu5nszi9bnv4": { + "description": "Vous subissez en permanence les effets des maladies [[2. Compendium/Work in progress/Maladies#Pourriture mortelle|Pourriture mortelle]].\n+2 PV max.", + "id": "nnydpmhq0ugcmi1kr8wccu5nszi9bnv4", + "effect": [ + { + "id": "d97h0nax79b2odp3vljnxi4jypfj1gip", + "category": "value", + "operation": "add", + "property": "health", + "value": 2 + } + ] + }, + "uaw75cv62c1byl06chxbhwtsefuhttt1": { + "description": "+6 PV max.", + "id": "uaw75cv62c1byl06chxbhwtsefuhttt1", + "effect": [ + { + "id": "t6i1btdkfn439hstweibedvz7esxelyl", + "category": "value", + "operation": "add", + "property": "health", + "value": 6 + } + ] + }, + "uln5ac72wlfcvzlk7m7rpv0gs84pwqky": { + "description": "Vous avez un bonus de +1 aux jets de résistance de [[1. Règles/99. Annexes/2. Liste des effets#Le saignement|saignement]] en tant que défenseur.\n+2 PV max.", + "id": "uln5ac72wlfcvzlk7m7rpv0gs84pwqky", + "effect": [ + { + "id": "hbmm0wkaguz6h8hm9ukserrvq9ko9a11", + "category": "value", + "operation": "add", + "property": "health", + "value": 2 + }, + { + "id": "g92q7xlzv3mywrhkqwkuw6evpx7s14nl", + "category": "value", + "operation": "add", + "property": "resistance/0", + "value": [ + "bleed", + "defense" + ] + } + ] + }, + "7lpfmn3yxdupuzok5fhyfs9q545lbdmw": { + "description": "+7 PV max.", + "id": "7lpfmn3yxdupuzok5fhyfs9q545lbdmw", + "effect": [ + { + "id": "o6cbr0jx3wbiehgnolxcr0muyyur6tw0", + "category": "value", + "operation": "add", + "property": "health", + "value": 7 + } + ] + }, + "x2ckkl354nu5dd355lx1xy2i0a81vdjo": { + "description": "Vous avez un bonus de +1 aux jets de résistance d'[[1. Règles/99. Annexes/2. Liste des effets#L'empoisonnement|empoissonnement]] en tant que défenseur.\nVous réduisez les [[1. Règles/3. Le combat/3. Résistance aux chocs#Le jet échelonné|jets échelonnés]] de [[1. Règles/99. Annexes/2. Liste des effets#Malade|maladie]] d'un niveau.", + "id": "x2ckkl354nu5dd355lx1xy2i0a81vdjo", + "effect": [ + { + "id": "s4abjq48tmqni0prz43vgtgxmhn4uk3k", + "category": "value", + "operation": "add", + "property": "resistance/0", + "value": [ + "poison", + "defense" + ] + } + ] + }, + "bt4vxm9f1l0ocflnz6canv5yb2kdav7l": { + "description": "Vous êtes capable de supporter un point de [[1. Règles/99. Annexes/3. Fatigue et repos|fatigue]] supplémentaire avant de subir les [[1. Règles/99. Annexes/3. Fatigue et repos#Les effets de la fatigue|effets de la fatigue]].", + "id": "bt4vxm9f1l0ocflnz6canv5yb2kdav7l", + "effect": [] + }, + "4vckc1dkta12u7o5d0w2pqm7yq5mq94d": { + "description": "Vous avez un bonus de +1 aux jets de résistance d'[[1. Règles/99. Annexes/2. Liste des effets#L'étourdissement|étourdissement]] en tant que défenseur.\n+2 PV max.", + "id": "4vckc1dkta12u7o5d0w2pqm7yq5mq94d", + "effect": [ + { + "id": "xl8qta5kslusxesif09aard051qwrzsm", + "category": "value", + "operation": "add", + "property": "health", + "value": 2 + }, + { + "id": "nw0e0rk0h1g1t6hx8apj98ylkse0egjg", + "category": "value", + "operation": "add", + "property": "resistance/0", + "value": [ + "stun", + "defense" + ] + } + ] + }, + "tpngghjjrdt44ucffcsts06yyrtrsb2d": { + "description": "Vous récupérez 2 points de vie supplémentaire par [[1. Règles/99. Annexes/3. Fatigue et repos#Gain par heure de repos|heure de repos]].", + "id": "tpngghjjrdt44ucffcsts06yyrtrsb2d", + "effect": [] + }, + "dtd7n3rt08bk7b9cv68oigujauy3b4e8": { + "description": "Une fois entre chaque [[1. Règles/1. Introduction/2. Glossaire#Repos court|repos court]], vous êtes capable de convertir un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue persistante|fatigue persistante]] en point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue temporaire|fatigue temporaire]].", + "id": "dtd7n3rt08bk7b9cv68oigujauy3b4e8", + "effect": [] + }, + "8r7s70m0od5orl3i7szy1cz3difv8hc1": { + "description": "+7 PV max.", + "id": "8r7s70m0od5orl3i7szy1cz3difv8hc1", + "effect": [ + { + "id": "ary3m9bdqx00294esjysegpii5nlrxhf", + "category": "value", + "operation": "add", + "property": "health", + "value": 7 + } + ] + }, + "lyi4ldhyemz56h6amaltkp0n3irrf00x": { + "description": "Choisissez un modifieur. Vous avez un bonus de +1 aux jet de résistance demandant ce modifieur en tant que défenseur.\n+2 PV max.", + "id": "lyi4ldhyemz56h6amaltkp0n3irrf00x", + "effect": [ + { + "id": "cpg9qoshbw0q1qff1zxq6u8qidehnwcs", + "category": "value", + "operation": "add", + "property": "health", + "value": 2 + } + ] + }, + "7lk01k1uf9jj1wovbh2r0b53q0wwjdpq": { + "description": "En courant, vous pouvez subir un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue temporaire|fatigue temporaire]] pour faire un test d'athlétisme (8). Pour chaque point au dessus de la difficulté, vous gagnez une case de déplacement.\n+4 PV max.", + "id": "7lk01k1uf9jj1wovbh2r0b53q0wwjdpq", + "effect": [ + { + "id": "nqcq1u9s57ah17c1omywz8wf5el5l9v3", + "category": "value", + "operation": "add", + "property": "health", + "value": 4 + } + ] + }, + "jm0ka9niguf4jazpwwnsihn84esg5wyp": { + "description": "Lorsqu'une attaque inflige plus de dégâts que votre armure, vous pouvez choisir de réduire à nouveau les dégâts d'un montant égal à votre armure au prix d'un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue persistante|fatigue persistante]].", + "id": "jm0ka9niguf4jazpwwnsihn84esg5wyp", + "effect": [] + }, + "r0g9ks6mghz93g4gfi23yjaqo1ou3nv4": { + "description": "Vous pouvez sciemment subir 2 points de [[1. Règles/99. Annexes/3. Fatigue et repos#La fatigue|fatigue]] par tour. ", + "id": "r0g9ks6mghz93g4gfi23yjaqo1ou3nv4", + "effect": [] + }, + "vnuiezyjr32xdntqoicus5o0uynv0s6p": { + "description": "Lorsque vous subissez des dégâts, vous pouvez utiliser votre réaction et subir un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue persistante|fatigue persistante]] pour gagner immédiatement 1 point d'action.", + "id": "vnuiezyjr32xdntqoicus5o0uynv0s6p", + "effect": [] + }, + "qyc75gx1cpwzl8dyymioy6xy6gkgtx4r": { + "description": "+7 PV max.", + "id": "qyc75gx1cpwzl8dyymioy6xy6gkgtx4r", + "effect": [ + { + "id": "ldi8kpmxnu6z14m4ds3uz45ddgy70qvz", + "category": "value", + "operation": "add", + "property": "health", + "value": 7 + } + ] + }, + "u3qy3jur73eag5ytvnf3hd3d8bym1ggf": { + "description": "", + "id": "u3qy3jur73eag5ytvnf3hd3d8bym1ggf", + "effect": [] + }, + "t74vj73qh0qo483cdg9rwldu4ncithbm": { + "description": "", + "id": "t74vj73qh0qo483cdg9rwldu4ncithbm", + "effect": [] + }, + "e2bxgwume14ru1f58b8q8ihqz5wd6cnx": { + "description": "", + "id": "e2bxgwume14ru1f58b8q8ihqz5wd6cnx", + "effect": [] + }, + "rtrvkfz12xac62ziqi586iinzywmafdo": { + "description": "Choisissez un modifieur. Vous avez un bonus de +1 aux jet de résistance demandant ce modifieur en tant que défenseur.\n+4 PV max.", + "id": "rtrvkfz12xac62ziqi586iinzywmafdo", + "effect": [ + { + "id": "93qpdl6tapzlozz35i4qohkfxxyl2s5i", + "category": "value", + "operation": "add", + "property": "health", + "value": 4 + } + ] + }, + "i5jy9aw0catauy5297h115t51fvhja6j": { + "description": "Chaque [[1. Règles/99. Annexes/3. Fatigue et repos#Gain par heure de repos|heure de repos]] vous fait perdre 1 point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue persistante|fatigue persistante]] supplémentaire.", + "id": "i5jy9aw0catauy5297h115t51fvhja6j", + "effect": [] + }, + "jdz7x5c3gbzd42woois4d354odhsi4iu": { + "description": "Lorsque vous tombez à 0 PV ou moins, plutôt que de devenir [[1. Règles/99. Annexes/2. Liste des effets#Agonisant|agonisant]], vous pouvez choisir de subir la maladie [[2. Compendium/Work in progress/Maladies#Pourriture mortelle|Pourriture mortelle]] pour repasser à 1/4 de vos PV max.", + "id": "jdz7x5c3gbzd42woois4d354odhsi4iu", + "effect": [] + }, + "a1ck9ztckhow2ecp6vxl86imcty8g5y9": { + "description": "Chaque fois que vous ratez un jet de résistance, vous gagnez un bonus de +2 aux jets de résistance jusqu'à la fin de votre prochain tour.", + "id": "a1ck9ztckhow2ecp6vxl86imcty8g5y9", + "effect": [] + }, + "pf8l89mx9icuhg7vdhzrbl8i5g80d887": { + "description": "", + "id": "pf8l89mx9icuhg7vdhzrbl8i5g80d887", + "effect": [] + }, + "2uuyl1xo9366d991pkkjl6x3daup3te2": { + "description": "Lorsque vous êtes [[1. Règles/99. Annexes/2. Liste des effets#Agonisant|agonisant]], vous ne perdez que 6 PV par tour et avez une difficulté de stabilisation réduite de 2.", + "id": "2uuyl1xo9366d991pkkjl6x3daup3te2", + "effect": [] + }, + "k24h1fr0nb6tidc1tcqnv12suw835ur2": { + "description": "En tombant à [[1. Règles/99. Annexes/2. Liste des effets#Agonisant|l'agonie]], vous pouvez ne pas tombez inconscient. Dans ce cas, vous ne pouvez prendre d'action que pour vous déplacer à la moitié de votre vitesse de course, marcher ou vous stabiliser, et n'avez pas de réaction jusqu'à ce que vous retiriez l'état [[1. Règles/99. Annexes/2. Liste des effets#Agonisant|d'agonie]].", + "id": "k24h1fr0nb6tidc1tcqnv12suw835ur2", + "effect": [] + }, + "8q5seula39wv76n1t8gxq6gekmiq2uo5": { + "description": "", + "id": "8q5seula39wv76n1t8gxq6gekmiq2uo5", + "effect": [] + }, + "c3z36ab1zcwp3bl4vekvwlwpbr9oeb7q": { + "description": "Lorsque vous êtes [[1. Règles/99. Annexes/2. Liste des effets#Agonisant|agonisant]], vous pouvez survivre jusqu'à -75 PV au lieu de -50 PV.\n+5 PV max.", + "id": "c3z36ab1zcwp3bl4vekvwlwpbr9oeb7q", + "effect": [ + { + "id": "m8ildd8vjhntv8kgkj2klhsjxdve2noi", + "category": "value", + "operation": "add", + "property": "health", + "value": 5 + } + ] + }, + "g5phzahr4ss3fbacb22ktz1qby3ou7n9": { + "description": "En ratant un jet de résistance d'[[1. Règles/99. Annexes/2. Liste des effets|effet physique]] ou de [[1. Règles/4. La magie/1. Magie#Les sorts de précision|sorts de précision]], vous pouvez subir un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue temporaire|fatigue temporaire]] pour relancer le jet.", + "id": "g5phzahr4ss3fbacb22ktz1qby3ou7n9", + "effect": [] + }, + "1objky145p39qou72jvecrcz4x2fzhxk": { + "description": "Vous êtes capable de supporter un point de [[1. Règles/99. Annexes/3. Fatigue et repos|fatigue]] supplémentaire avant de subir les [[1. Règles/99. Annexes/3. Fatigue et repos#Les effets de la fatigue|effets de la fatigue]].", + "id": "1objky145p39qou72jvecrcz4x2fzhxk", + "effect": [] + }, + "h35hocuwlevn02crp6netyvwenig080o": { + "description": "Lorsque vous êtes [[1. Règles/99. Annexes/2. Liste des effets#Agonisant|agonisant]], vous pouvez survivre jusqu'à vos PV max dans le négatif, même s'ils sont supérieur à 75 PV max.", + "id": "h35hocuwlevn02crp6netyvwenig080o", + "effect": [] + }, + "6n1if5nrca6e30ilyzfxza3wvah7w997": { + "description": "", + "id": "6n1if5nrca6e30ilyzfxza3wvah7w997", + "effect": [] + }, + "iaxxkkvwssafx8xr0qtpadby15x5oy5b": { + "description": "Vous ne subissez aucun [[1. Règles/1. Introduction/2. Glossaire#Avantage et désavantage|désavantage]] en conséquence de votre [[1. Règles/99. Annexes/3. Fatigue et repos#Les effets de la fatigue|fatigue]].", + "id": "iaxxkkvwssafx8xr0qtpadby15x5oy5b", + "effect": [] + }, + "72029iq2pv0ibf80b5qrhcw5k378d75m": { + "description": "+20 PV max.", + "id": "72029iq2pv0ibf80b5qrhcw5k378d75m", + "effect": [ + { + "id": "7elqxndvl2pkzg5994akrav6f0ru8qv0", + "category": "value", + "operation": "add", + "property": "health", + "value": 20 + } + ] + }, + "2rz9tiej7318s198ed97d0mkma3kzh0k": { + "description": "Chaque fois que vous **lancez** un jet de résistance, vous gagnez un bonus de +2 à la défense jusqu'à la fin de votre prochain tour. *Ne se cumule pas avec l'effet sur les échecs de résistance.*", + "id": "2rz9tiej7318s198ed97d0mkma3kzh0k", + "effect": [] + }, + "8hmzfizhahmmtk9h0g3trc4en7agds1o": { + "description": "2 points d'action par tour.\n1 réaction par tour.", + "id": "8hmzfizhahmmtk9h0g3trc4en7agds1o", + "effect": [] + }, + "o51naz411sg8u2b74dxp2t37gflpjp4l": { + "description": "2 points d'action par tour.\n2 réactions par tour.", + "id": "o51naz411sg8u2b74dxp2t37gflpjp4l", + "effect": [] + }, + "l1r9e41cub99ul0grtrt8w6pqyb80rot": { + "description": "3 points d'action par tour.", + "id": "l1r9e41cub99ul0grtrt8w6pqyb80rot", + "effect": [] + }, + "1zabhhw29276sgbsostxd8efncqwltej": { + "description": "Vous êtes capable de lancer des [[1. Règles/4. La magie/1. Magie#Les sorts de précision|sorts de précision]].\nVous êtes capable de maitriser un nombre de sort égal à votre modifieur d'intelligence.", + "id": "1zabhhw29276sgbsostxd8efncqwltej", + "effect": [ + { + "id": "hf7yg38tq21oitv3fv1irbxp5r260cao", + "category": "value", + "operation": "add", + "property": "spellranks/precision", + "value": 1 + }, + { + "id": "fmix1e32i7m14zq8kr3f1juja1woegii", + "category": "value", + "operation": "add", + "property": "spellslot", + "value": "modifier/intelligence" + } + ] + }, + "61gz8bl733m52dhcdrkkkue33yc6jg1x": { + "description": "Vous êtes capable de lancer des [[1. Règles/4. La magie/1. Magie#Les sorts de savoir|sorts de savoir]].\n+7 mana max.", + "id": "61gz8bl733m52dhcdrkkkue33yc6jg1x", + "effect": [ + { + "id": "5nccaajvx6krk4huw9ww4lml0r09he3q", + "category": "value", + "operation": "add", + "property": "mana", + "value": 7 + }, + { + "id": "daf5f466ub8dmcrcsllil45p2pmpz94q", + "category": "value", + "operation": "add", + "property": "spellranks/knowledge", + "value": 1 + } + ] + }, + "3g93pwep346ikr56ohoicfrike5wmrfa": { + "description": "Vous êtes capable de lancer des sorts plus rapidement. Vous progressez dans l'[[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#L'arbre de magie|arbre de magie]] (direction rapidité).\n+3 mana max.", + "id": "3g93pwep346ikr56ohoicfrike5wmrfa", + "effect": [ + { + "id": "958ybk1v1e8psl3up7oknhj2bx9u038e", + "category": "value", + "operation": "add", + "property": "mana", + "value": 3 + } + ] + }, + "4yf5da8vuwr7zsgm0nddxg0i9v7scsir": { + "description": "+10 mana max.", + "id": "4yf5da8vuwr7zsgm0nddxg0i9v7scsir", + "effect": [ + { + "id": "ux9jowbvuu2nxlfi4gkp9qv1mnibqxyy", + "category": "value", + "operation": "add", + "property": "mana", + "value": 10 + } + ] + }, + "1aakipzyterr7w138big7pegw2fijolt": { + "description": "Votre connaissance de l'anatomie humanoïde vous permet de provoquer des blessures plus importantes.\nVous avez un bonus de +1 aux jets de résistance de [[1. Règles/99. Annexes/2. Liste des effets#Saignement|saignement]] en tant qu'attaquant.\n+3 mana max.", + "id": "1aakipzyterr7w138big7pegw2fijolt", + "effect": [ + { + "id": "xylq7t6nc33kzsnrclxiiyphq20eyx50", + "category": "value", + "operation": "add", + "property": "mana", + "value": 3 + }, + { + "id": "ntqagbb32qz40h50zq55e5v3z96i3lo5", + "category": "value", + "operation": "add", + "property": "resistance/0", + "value": [ + "bleed", + "attack" + ] + } + ] + }, + "5crh6l55lrch646cm04ra02nqil5quyb": { + "description": "Vous apprenez le sort unique [[1. Règles/4. La magie/2. Liste des sorts#^a8f46f|Contresort]].", + "id": "5crh6l55lrch646cm04ra02nqil5quyb", + "effect": [] + }, + "tgjlf2ty2g4uul8uqjdo2t8er8ls8i9u": { + "description": "Vous dédiez vos études à une classe élémentaire. Vous progressez dans l'[[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#L'arbre de magie|arbre de magie]] (direction éléments).\n+2 mana max.", + "id": "tgjlf2ty2g4uul8uqjdo2t8er8ls8i9u", + "effect": [ + { + "id": "evtk9x5qo2ze60h3ujmuiow4auvlc9ct", + "category": "value", + "operation": "add", + "property": "mana", + "value": 2 + } + ] + }, + "g5boqlllkwxlkz4lfjue6hiungbjqtsh": { + "description": "Vous apprenez à manier de grosses quantités de mana sans danger. Vous progressez dans l'[[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#L'arbre de magie|arbre de magie]] (direction puissance).", + "id": "g5boqlllkwxlkz4lfjue6hiungbjqtsh", + "effect": [] + }, + "umiqonkcgx9mr1pvn39uuidael5udqx4": { + "description": "Vous pouvez lancer des [[1. Règles/4. La magie/1. Magie#Les sorts de précision|sorts de précision]] d'un rang supérieur.", + "id": "umiqonkcgx9mr1pvn39uuidael5udqx4", + "effect": [ + { + "id": "b5ram59twexfx9jdosn7yjc3k6k3y32c", + "category": "value", + "operation": "add", + "property": "spellranks/precision", + "value": 1 + } + ] + }, + "4oykj2egy0d7f8i6q3psvjzwh5yj49vu": { + "description": "Vous pouvez lancer des [[1. Règles/4. La magie/1. Magie#Les sorts de savoir|sorts de savoir]] d'un rang supérieur.", + "id": "4oykj2egy0d7f8i6q3psvjzwh5yj49vu", + "effect": [ + { + "id": "8uq7tuuc6w2zi5jt5kmbf5c2oy3bpoj0", + "category": "value", + "operation": "add", + "property": "spellranks/knowledge", + "value": 1 + } + ] + }, + "0euzkb0u74m7z8ydgrqeobvsmvqlr4yc": { + "description": "Vous gagnez un bonus de +2 à l'initiative.", + "id": "0euzkb0u74m7z8ydgrqeobvsmvqlr4yc", + "effect": [ + { + "id": "71f942qbuuuo8peacc19w74au6ptvezq", + "category": "value", + "operation": "add", + "property": "initiative", + "value": 2 + } + ] + }, + "lmwy5kydxq0jgajwg50xj2di2ax2j443": { + "description": "Vous progressez dans l'[[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#L'arbre de magie|arbre de magie]] (direction rapidité).\n+4 mana max.", + "id": "lmwy5kydxq0jgajwg50xj2di2ax2j443", + "effect": [ + { + "id": "jp43jqblqxlfie6b68cqem27hpm6aifk", + "category": "value", + "operation": "add", + "property": "mana", + "value": 4 + } + ] + }, + "3qoz951beg1m1fqykrz5wpyoguxnl9hb": { + "description": "+10 mana max. ", + "id": "3qoz951beg1m1fqykrz5wpyoguxnl9hb", + "effect": [ + { + "id": "bcjauqdrentwq60aouon1jifxf2tkl5m", + "category": "value", + "operation": "add", + "property": "mana", + "value": 10 + } + ] + }, + "67y966ks9q54oy5oc2yoqmb487rdcmcp": { + "description": "Vous progressez dans l'[[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#L'arbre de magie|arbre de magie]] (direction puissance).\n+4 mana max.", + "id": "67y966ks9q54oy5oc2yoqmb487rdcmcp", + "effect": [ + { + "id": "dymqaxno7tubonxonztyouihcwe44n09", + "category": "value", + "operation": "add", + "property": "mana", + "value": 4 + } + ] + }, + "zl6uas44i7fdstahc6x32mor6zjpf7g8": { + "description": "Votre esprit est tellement vif que vous pouvez voir un [[1. Règles/4. La magie/1. Magie#Les sorts instinctif|sort instinctif]] être lancé. Vous pouvez maintenant les contrer et gagnez un bonus de +2 à la défense contre ces sorts.\n+2 mana max.", + "id": "zl6uas44i7fdstahc6x32mor6zjpf7g8", + "effect": [ + { + "id": "bh7yhybx36jnkibi65wjowk942pg3u3c", + "category": "value", + "operation": "add", + "property": "mana", + "value": 2 + } + ] + }, + "893wsq850rtvutxdmmnoz4lwktq6nip9": { + "description": "Vous progressez dans l'[[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#L'arbre de magie|arbre de magie]] (direction éléments).\n+4 mana max.", + "id": "893wsq850rtvutxdmmnoz4lwktq6nip9", + "effect": [ + { + "id": "t894mccy7dou2o40d3owickdoysgr2wq", + "category": "value", + "operation": "add", + "property": "mana", + "value": 4 + } + ] + }, + "nskhct0qnj3mo60olz4oc8jekwfxvh6v": { + "description": "Lorsque vous lancez des sorts avec des effets de zone, vous pouvez choisir un nombre de cases que vous pouvez voir égal à votre mod. d'intelligence + 1 dans lesquels vos sorts de zone n'ont aucun effet. \n+2 mana max.", + "id": "nskhct0qnj3mo60olz4oc8jekwfxvh6v", + "effect": [ + { + "id": "nrj4gob50o2ap1tg02r7u5x32mm5ntd3", + "category": "value", + "operation": "add", + "property": "mana", + "value": 2 + } + ] + }, + "8sr8hrpfa49m62ut1h62scpq6rie27cr": { + "description": "Vous pouvez lancer des [[1. Règles/4. La magie/1. Magie#Les sorts de précision|sorts de précision]] d'un rang supérieur.", + "id": "8sr8hrpfa49m62ut1h62scpq6rie27cr", + "effect": [ + { + "id": "43tt4t80elkndgef0p8xxozc9h6ew7gn", + "category": "value", + "operation": "add", + "property": "spellranks/precision", + "value": 1 + } + ] + }, + "dxlevxrlacugpj4jvdjs5bxecraoxbnp": { + "description": "Choisissez une classe élémentaire. Lorsque vous voyez un sort de cet élément être lancé à 12 cases de vous, vous pouvez utiliser une réaction pour dépenser le mana à la place du lanceur avec une réaction. *Vous appliquez le coût en mana du lanceur d'origine.*", + "id": "dxlevxrlacugpj4jvdjs5bxecraoxbnp", + "effect": [] + }, + "6clvt3y93j5gmkrs4d4y00ekeujisu7w": { + "description": "Vous avez un bonus de +1 aux jets de résistance des [[1. Magie#Les sorts de savoir|sorts de savoir]] en tant qu'attaquant.", + "id": "6clvt3y93j5gmkrs4d4y00ekeujisu7w", + "effect": [ + { + "id": "zyk0pg1d36xhqq96y4io79a8nxpmsubi", + "category": "value", + "operation": "add", + "property": "resistance/0", + "value": [ + "knowledge", + "attack" + ] + } + ] + }, + "gob4uk4k00pto9boi0wug77bn5wbfwbf": { + "description": "Vous progressez dans l'[[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#L'arbre de magie|arbre de magie]] (direction rapidité)", + "id": "gob4uk4k00pto9boi0wug77bn5wbfwbf", + "effect": [] + }, + "zq37gvjso4mve297h5n0odrodkg0n1k3": { + "description": "Vous pouvez lancer des [[1. Règles/4. La magie/1. Magie#Les sorts de savoir|sorts de savoir]] d'un rang supérieur.", + "id": "zq37gvjso4mve297h5n0odrodkg0n1k3", + "effect": [ + { + "id": "ykqsj4tilhq2o6llaudtnzjnkgkrodwf", + "category": "value", + "operation": "add", + "property": "spellranks/knowledge", + "value": 1 + } + ] + }, + "3ugv3ym7bswjhz0drbx6v3932q7w3qsy": { + "description": "Vous apprenez le sort unique [[1. Règles/4. La magie/2. Liste des sorts#^068b55|Soin]].", + "id": "3ugv3ym7bswjhz0drbx6v3932q7w3qsy", + "effect": [] + }, + "r3xnn24ft3a3yolmy4hoaipx4c4v7pws": { + "description": "Vous apprenez le sort unique [[1. Règles/4. La magie/2. Liste des sorts#^484fc3|Dévastation]].", + "id": "r3xnn24ft3a3yolmy4hoaipx4c4v7pws", + "effect": [ + { + "category": "asset", + "operation": "add", + "kind": "spells", + "asset": "special-1", + "id": "sgxo16qouwbbbw4nmexru9vak0o5ommq" + } + ] + }, + "i1ycfb6ikyymm1us03sj3ev9u8x9aabw": { + "description": "Vous êtes capable de préparer un sort avec la durée normale d'incantation et de le retenir pour vous en servir plus tard. Vous êtes [[1. Règles/4. La magie/1. Magie#La concentration|concentrer]] dessus jusqu'à ce que vous le relâchiez pour 1 point d'action.", + "id": "i1ycfb6ikyymm1us03sj3ev9u8x9aabw", + "effect": [] + }, + "gpwjqe4ii2nt3vnq6xvfdrp0kh4p3gzo": { + "description": "Vous progressez dans l'[[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#L'arbre de magie|arbre de magie]] (direction éléments).", + "id": "gpwjqe4ii2nt3vnq6xvfdrp0kh4p3gzo", + "effect": [] + }, + "f03ohqrwz8befed2i9kv5axnkdsj5cgk": { + "description": "Vous progressez dans l'[[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#L'arbre de magie|arbre de magie]] (direction puissance).", + "id": "f03ohqrwz8befed2i9kv5axnkdsj5cgk", + "effect": [] + }, + "43u5ynypcg3alqdi4cw92znfxhy3soch": { + "description": "", + "id": "43u5ynypcg3alqdi4cw92znfxhy3soch", + "effect": [] + }, + "u9m5wfovglawmz4pl12k72tari83av95": { + "description": "+12 mana max.", + "id": "u9m5wfovglawmz4pl12k72tari83av95", + "effect": [ + { + "id": "a7x5h0b5uigmyq4m7r9z09y431c92lq1", + "category": "value", + "operation": "add", + "property": "mana", + "value": 12 + } + ] + }, + "zco76grizmzn4xdr8opyah8lnmfma84r": { + "description": "Vous apprenez le sort unique [[1. Règles/4. La magie/2. Liste des sorts#^73b8bd|Focalisation destructrice]].", + "id": "zco76grizmzn4xdr8opyah8lnmfma84r", + "effect": [] + }, + "iaaoqrn6kgvovzfpk4ygyd8yjwrxkml3": { + "description": "Vous apprenez le sort unique [[1. Règles/4. La magie/2. Liste des sorts#^73b8bd|Soin]].", + "id": "iaaoqrn6kgvovzfpk4ygyd8yjwrxkml3", + "effect": [] + }, + "syj4q2o1qfh5vezi2d8bzgs9fn9ok273": { + "description": "", + "id": "syj4q2o1qfh5vezi2d8bzgs9fn9ok273", + "effect": [] + }, + "whxtzr8gdprkngc66bius4x1hf6o0qb8": { + "description": "Vous pouvez dépenser jusqu'à 8 PV lorsque vous lancez un sort pour réduire son coût en mana d'un nombre égal. Le sort lancé doit obligatoirement infliger des dégâts. *Peut réduire le coût à 0 mana même lorsque le coût est non réductible.*", + "id": "whxtzr8gdprkngc66bius4x1hf6o0qb8", + "effect": [] + }, + "gd17tzcfwpam0jhi576acxm6t3ugdnxx": { + "description": "Lorsque vous voyez un sort être lancé, vous pouvez dépenser jusqu'à 5 mana et une réaction pour imposer un malus de égal au mana dépensé.", + "id": "gd17tzcfwpam0jhi576acxm6t3ugdnxx", + "effect": [] + }, + "4c7nntg1xxugicltn9ntnudw5jqfvpax": { + "description": "", + "id": "4c7nntg1xxugicltn9ntnudw5jqfvpax", + "effect": [] + }, + "i67f49e434qzwi53yno3q4v5mzmps3kz": { + "description": "Au prix d'un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue persistante|fatigue persistante]], lorsque quelqu'un dépense du mana à 8 cases de vous, vous doublez le coût. La cible subit un malus de 1 point par mana manquant.", + "id": "i67f49e434qzwi53yno3q4v5mzmps3kz", + "effect": [] + }, + "ev7lclauthnkgjujkml0dmd3gq6bgb81": { + "description": "Vous êtes capable de maintenir 2 [[1. Règles/4. La magie/1. Magie#La concentration|concentrations]] en même temps. *Si vous devez faire un jet de concentration, vous l'appliquez uniquement sur le plus ancien, puis sur le nouveau si vous brisez la concentration.*", + "id": "ev7lclauthnkgjujkml0dmd3gq6bgb81", + "effect": [] + }, + "xyw7lf5qtjxw8m60hym15f1xoj96wfic": { + "description": "Vous êtes capable de maintenir 2 [[1. Règles/4. La magie/1. Magie#La concentration|concentrations]] en même temps. *Si vous devez faire un jet de concentration, vous l'appliquez uniquement sur le plus ancien, puis sur le nouveau si vous brisez la concentration.*", + "id": "xyw7lf5qtjxw8m60hym15f1xoj96wfic", + "effect": [] + }, + "7we1ieu1xi2tdmxfkjkkbl3mlryaye3b": { + "description": "+6 points de compétence.\nVous ne pouvez pas utiliser d'objet consommable.", + "id": "7we1ieu1xi2tdmxfkjkkbl3mlryaye3b", + "effect": [ + { + "id": "rxdg25qnmshe8jlb1ilsskuvp84oieqd", + "category": "value", + "operation": "add", + "property": "ability", + "value": 6 + } + ] + }, + "wqtq8zuov2iwesbvh3efkz1oetano1xi": { + "description": "+3 points de compétence.\nVous pouvez utiliser des objets consommables.", + "id": "wqtq8zuov2iwesbvh3efkz1oetano1xi", + "effect": [ + { + "id": "r2y7qbp2z3gqpw6j6gd67fuxu2x7lgoq", + "category": "value", + "operation": "add", + "property": "ability", + "value": 3 + } + ] + }, + "dswxuh6sfm91lav5ozur88j86at0fhiz": { + "description": "+5 points de compétence.", + "id": "dswxuh6sfm91lav5ozur88j86at0fhiz", + "effect": [ + { + "id": "gqsv49iayumvkfhgvmim2zlkbl40qafx", + "category": "value", + "operation": "add", + "property": "ability", + "value": 5 + } + ] + }, + "sm59gtktgarkbqxsldnoj7neubi7qjae": { + "description": "+3 points de compétence.", + "id": "sm59gtktgarkbqxsldnoj7neubi7qjae", + "effect": [ + { + "id": "kvti7anxqug9wm5q2gj5f5kpox93liwq", + "category": "value", + "operation": "add", + "property": "ability", + "value": 3 + } + ] + }, + "eexi34sl9jtf85w2eurd380teykzta7a": { + "description": "+4 points de compétence.", + "id": "eexi34sl9jtf85w2eurd380teykzta7a", + "effect": [ + { + "id": "v9ydoczhhszsnad7gc88x9pblv16v8l4", + "category": "value", + "operation": "add", + "property": "ability", + "value": 4 + } + ] + }, + "7r4v6b8ozmleqo8cj1zarvdo3nh0daii": { + "description": "+1 spécialisation.", + "id": "7r4v6b8ozmleqo8cj1zarvdo3nh0daii", + "effect": [ + { + "id": "nnexjseux3jvevpgr7em7cl4r3vcvt4i", + "category": "value", + "operation": "add", + "property": "spec", + "value": 1 + } + ] + }, + "lfokcp1or5abxc7moet5rm9hg5rymb22": { + "description": "À chaque montée de niveau, vous pouvez déplacer jusqu'à 3 points de compétence.\n+1 point de compétence.", + "id": "lfokcp1or5abxc7moet5rm9hg5rymb22", + "effect": [] + }, + "v3pgxmls3lj076xjescim7tg0x9qrq6g": { + "description": "Les objets que vous lancez sont considérés comme des [[1. Règles/99. Annexes/4. Équipement#Les armes de jet|armes de jet]] et bénéficient des mêmes bonus.\n+1 point de compétence.", + "id": "v3pgxmls3lj076xjescim7tg0x9qrq6g", + "effect": [] + }, + "4xwi82bhwl5umhcrheow1zoyisp808yx": { + "description": "+3 points de compétence.", + "id": "4xwi82bhwl5umhcrheow1zoyisp808yx", + "effect": [ + { + "id": "h15m44h1ha1mdwx82y16jzgtiv2y9as6", + "category": "value", + "operation": "add", + "property": "ability", + "value": 3 + } + ] + }, + "yn70y3tmxdo1w0zvm7at1i7uretcgkvk": { + "description": "Le maximum de toutes les compétences est de 6 points, sauf s'il est déjà supérieur.\n+2 points de compétence.", + "id": "yn70y3tmxdo1w0zvm7at1i7uretcgkvk", + "effect": [ + { + "id": "3wm2h8jpmobngya06rqyv1t60l2c1woy", + "category": "value", + "operation": "add", + "property": "ability", + "value": 2 + } + ] + }, + "nqvexvg3ui6w2hqknwrw4pvf5axvu4go": { + "description": "En combat, vous pouvez lancer 2 [[1. Règles/99. Annexes/4. Équipement#Les armes de jet|armes de jet]] en 3 points d'action.\nVous êtes capable de fabriquer des objets magiques d'une rareté accrue.\n+1 point de compétence.", + "id": "nqvexvg3ui6w2hqknwrw4pvf5axvu4go", + "effect": [ + { + "id": "fwiv8n4vmn7uzv7i6iksls749e8voa6k", + "category": "value", + "operation": "add", + "property": "ability", + "value": 1 + } + ] + }, + "xvrtc9lw3up643zazgdlvjea3txm00rw": { + "description": "Le maximum de toutes les compétences augmente de 1 point.\n+2 points de compétence.", + "id": "xvrtc9lw3up643zazgdlvjea3txm00rw", + "effect": [ + { + "id": "vd4pfd5w99tsqvhh0g7cizuvwlnlcla3", + "category": "value", + "operation": "add", + "property": "ability", + "value": 2 + } + ] + }, + "fpqb30f4zp2tw25hj786dicph4w9l65a": { + "description": "Lorsque vous utilisez un objet consommable, vous pouvez lancer un d12. Si vous faites 12, l'objet ne se consomme pas. Cela fonctionne également sur les objets à charges.", + "id": "fpqb30f4zp2tw25hj786dicph4w9l65a", + "effect": [] + }, + "ite8lplfq0gpg5t8a279cvl0s50hbgwq": { + "description": "Choisissez une statistique. Toutes les compétences qui en dépendent gagnent un point. *N'augmente pas le maximum.*", + "id": "ite8lplfq0gpg5t8a279cvl0s50hbgwq", + "effect": [] + }, + "3q9roisgfwj99ta3q3w7m0jn972uc2gb": { + "description": "+1 spécialisation.", + "id": "3q9roisgfwj99ta3q3w7m0jn972uc2gb", + "effect": [ + { + "id": "n3bfzboy07p5bhikohpg68c761d3j2jh", + "category": "value", + "operation": "add", + "property": "spec", + "value": 1 + } + ] + }, + "3uot4f57ooxjn598pata4yl3hh84c3pb": { + "description": "Lorsque vous lancez une [[1. Règles/99. Annexes/4. Équipement#Les armes de jet|armes de jet]] qui n'est pas consommable, vous pouvez la garder intacte et la récupérer en fin de combat.", + "id": "3uot4f57ooxjn598pata4yl3hh84c3pb", + "effect": [] + }, + "qzlz51i2i5i7g2zlo99syh91535krp5c": { + "description": "+3 points de compétence.", + "id": "qzlz51i2i5i7g2zlo99syh91535krp5c", + "effect": [ + { + "id": "cbfuicfvwuv2fyq0db4l9fh8eqvn4d2b", + "category": "value", + "operation": "add", + "property": "ability", + "value": 3 + } + ] + }, + "c0gm3g1g8mihca8oiitxaosng00uhndf": { + "description": "Vous pouvez maitriser un nombre de [[1. Magie|sorts]] et d'[[7. Œuvres|œuvres]] supplémentaires égal à votre modifieur de curiosité.", + "id": "c0gm3g1g8mihca8oiitxaosng00uhndf", + "effect": [ + { + "id": "i93v80aemjandqnde3ktud7r5at6pxos", + "category": "value", + "operation": "add", + "property": "spellslot", + "value": "modifier/curiosity" + }, + { + "id": "bhgh3udvh1ul6vrmlgau7rhe6krv34rs", + "category": "value", + "operation": "add", + "property": "arts", + "value": "modifier/curiosity" + } + ] + }, + "v6x5qbvdhmkjhldh8izq1z0szu8lcpmn": { + "description": "Vous êtes capable de fabriquer des prototypes.", + "id": "v6x5qbvdhmkjhldh8izq1z0szu8lcpmn", + "effect": [] + }, + "zhpkcd70n4pzh8fph2qffbm5qqvt7pck": { + "description": "Durant un [[1. Règles/2. L'entrainement/2. Compétences#Jet de groupe|jet de compétence de groupe]], vous pouvez ne pas lancer de dé et offrir un bonus égal à votre mod. de curiosité à tous vos camarades.", + "id": "zhpkcd70n4pzh8fph2qffbm5qqvt7pck", + "effect": [] + }, + "o8ji7ylmvxy8g25ull9vl85c9ifc3cuu": { + "description": "Vous apprenez grâce à l'observation des autres. Durant un [[1. Règles/2. L'entrainement/2. Compétences#Jet de groupe|jet de compétence de groupe]], vous gagnez un bonus de +1 pour chaque allié qui a fait mieux que vous.", + "id": "o8ji7ylmvxy8g25ull9vl85c9ifc3cuu", + "effect": [] + }, + "96p24i49n4bspl8ww3igdpq4t8pzamj4": { + "description": "Vous gagnez un bonus de +2 à votre jet de progression de fabrication.", + "id": "96p24i49n4bspl8ww3igdpq4t8pzamj4", + "effect": [] + }, + "7r20jmlxgogm4c0t35j9jh4u9v7nga7n": { + "description": "+1 spécialisation.", + "id": "7r20jmlxgogm4c0t35j9jh4u9v7nga7n", + "effect": [ + { + "id": "xtl7vk2jwpoc552kviub3s259dwws8i3", + "category": "value", + "operation": "add", + "property": "spec", + "value": 1 + } + ] + }, + "ny3gecv3e8netavbeeb2idxu7ohzacww": { + "description": "Vous êtes capable de fabriquer des objets magiques d'une rareté accrue.", + "id": "ny3gecv3e8netavbeeb2idxu7ohzacww", + "effect": [] + }, + "9zef3r2laeo9v6dlbhonuun75jy3p6ax": { + "description": "+4 points de compétence.", + "id": "9zef3r2laeo9v6dlbhonuun75jy3p6ax", + "effect": [ + { + "id": "dgrdud7e0nrj8w84f0saog3qsf6mex5q", + "category": "value", + "operation": "add", + "property": "ability", + "value": 4 + } + ] + }, + "m9q7hj44otuopzicr99g2il730sa39ze": { + "description": "Vous pouvez relancer un dé de compétence un nombre de fois égal à votre modifieur de [[1. Règles/2. L'entrainement/1. Entrainement#La curiosité|curiosité]] entre chaque [[1. Règles/1. Introduction/2. Glossaire#Long repos|long repos]].", + "id": "m9q7hj44otuopzicr99g2il730sa39ze", + "effect": [] + }, + "xeadbpjwr980idrfvq1s5psdg7h27wrg": { + "description": "Vous pouvez lancer une [[1. Règles/99. Annexes/4. Équipement#Les armes de jet|armes de jet]] en une action libre. Vous ne pouvez pas lancer d'[[1. Règles/99. Annexes/4. Équipement#Les armes de jet|armes de jet]] avec une action dans le même tour.", + "id": "xeadbpjwr980idrfvq1s5psdg7h27wrg", + "effect": [] + }, + "r3zfcrszhiowrv963cxdiu6p7jsqh1tn": { + "description": "Choisissez une statistique. Une fois entre chaque [[1. Règles/1. Introduction/2. Glossaire#Long repos|long repos]], vous pouvez considérer que vous avez fait 12 sur un jet de compétence dépendant de cette statistique.", + "id": "r3zfcrszhiowrv963cxdiu6p7jsqh1tn", + "effect": [] + }, + "k0jr8bey9exuec37qgi5nab4mbc9yaa8": { + "description": "Lorsque vous faites une [[1. Règles/1. Introduction/2. Glossaire#Réussite critique|réussite critique]] sur un jet de compétence, vous gagnez un bonus de +4 à cette compétence utilisable une fois jusqu'à votre prochain repos. *Non cumulable.*", + "id": "k0jr8bey9exuec37qgi5nab4mbc9yaa8", + "effect": [] + }, + "4sefwbdulllkdiuc1wfc36svwbk3xggt": { + "description": "Vous êtes capable de fabriquer des objets #unique. Si vous n'avez pas déjà l'objet sur vous, vous devez faire un jet d'histoire à chaque progression. Votre progression en fabrication ne peut pas dépasser votre score sur le jet d'histoire.", + "id": "4sefwbdulllkdiuc1wfc36svwbk3xggt", + "effect": [] + }, + "od1bpzr0d8nockvmjewk9ya9bxz6179p": { + "description": "+5 points de compétence.", + "id": "od1bpzr0d8nockvmjewk9ya9bxz6179p", + "effect": [ + { + "id": "jgahs82lkyz9fq3fqjpz26otp1lhphd5", + "category": "value", + "operation": "add", + "property": "ability", + "value": 5 + } + ] + }, + "x0rv4bbeey2r1rdc6a5881nndyxc5kwh": { + "description": "Choisissez une compétence. Si vous faites 6 ou moins à votre jet, vous considérez que votre jet est un 6. *Ne fonctionne pas sur les jets de fabrications et les jets d'œuvres*", + "id": "x0rv4bbeey2r1rdc6a5881nndyxc5kwh", + "effect": [] + }, + "7ii1ig85j7a1gacorzkn6oyjdt3w6jzh": { + "description": "Lorsque vous fabriquez des [[1. Règles/99. Annexes/4. Équipement#Les armes|armes]], leur dé de dégâts augmente de [[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#L'evolution des dés|1 niveau]].", + "id": "7ii1ig85j7a1gacorzkn6oyjdt3w6jzh", + "effect": [] + }, + "xkvc55hklw4zk4ds5l2edwln3o98qlnd": { + "description": "Une fois entre chaque [[1. Règles/1. Introduction/2. Glossaire#Long repos|long repos]], vous pouvez considérer que vous avez fait 12 sur un jet de compétence.", + "id": "xkvc55hklw4zk4ds5l2edwln3o98qlnd", + "effect": [] + }, + "gmgp03fhr0pkjof5dopvvinr9qguuszh": { + "description": "Vous augmentez le modifieur de votre choix de 1.", + "id": "gmgp03fhr0pkjof5dopvvinr9qguuszh", + "effect": [ + { + "id": "s1xi277l834xh8x8ukmi2g14tl06pb3p", + "category": "value", + "operation": "add", + "property": "modifier", + "value": 1 + } + ] + }, + "xxfnbzg7viioo9ohumtggazjmd7zpcpd": { + "description": "Vous êtes capable de fabriquer des objets magiques d'une rareté accrue.", + "id": "xxfnbzg7viioo9ohumtggazjmd7zpcpd", + "effect": [] + }, + "8v1duhxatene2utj8llwcj5eie4not77": { + "description": "Une fois entre chaque [[1. Règles/1. Introduction/2. Glossaire#Repos court|repos court]], vous pouvez considérer que vous avez fait un 10 lorsque vous devez lancer un d12.", + "id": "8v1duhxatene2utj8llwcj5eie4not77", + "effect": [] + }, + "9mewrpbw1y26bmkz6a95ywmjyuz9nt9b": { + "description": "Vous ne vous exprimez qu'auprès de personnes en qui vous avez une confiance absolue. Lorsqu'impliqué dans un dialogue, vous refusez de vous exprimer même en présence de vos amis.\nDurant un combat, l'angoisse vous fait subir un malus de 2 à tout vos jets (hors dégâts et soin).", + "id": "9mewrpbw1y26bmkz6a95ywmjyuz9nt9b", + "effect": [] + }, + "jx0ogmuhiauym6qrdvwoga9emjn0kbeh": { + "description": "Vous ne parlez pas aux inconnus et lors de dialogues, vous ne parlez qu'à vos amis.\nDurant un combat, l'angoisse vous fait subir un malus de 1 à tous vos jets (hors dégâts et soins).", + "id": "jx0ogmuhiauym6qrdvwoga9emjn0kbeh", + "effect": [] + }, + "eli8sozjq6ysoom5qwptnzcftshpm5wk": { + "description": "Anxiété sociale. Vous ne parlez pas aux inconnus et lors de dialogues, vous ne parlez qu'à vos amis.\nLorsqu'un allié [[1. Règles/3. Le combat/2. Actions en combat#Communiquer|communique]] en combat, votre stress vous fait subir un malus de 1 à tous vos jets (hors dégâts et soins).", + "id": "eli8sozjq6ysoom5qwptnzcftshpm5wk", + "effect": [] + }, + "jyerevoithxhijuido4250mafj4tvvqm": { + "description": "Lorsqu'un allié [[1. Règles/3. Le combat/2. Actions en combat#Communiquer|communique]] en combat, votre stress vous fait subir un malus de 1 à tous vos jets (hors dégâts et soins).", + "id": "jyerevoithxhijuido4250mafj4tvvqm", + "effect": [] + }, + "rzyqhgpuwyhc9issvaj8j7su48um7ss9": { + "description": "Vous pouvez [[1. Règles/3. Le combat/2. Actions en combat#Communiquer|communiquer]] en combat et ne subissez plus de malus lorsque les autres communiquent.", + "id": "rzyqhgpuwyhc9issvaj8j7su48um7ss9", + "effect": [] + }, + "33z43vfru99itce4nah6w2p5ge70et4k": { + "description": "Vous gagnez un bonus de +1 à vos compétences dépendant du charisme lorsque vous les utilisez sur des personnes de votre rang social. Fonctionne sur les œuvres impliquant ces personnes.", + "id": "33z43vfru99itce4nah6w2p5ge70et4k", + "effect": [] + }, + "lw9u7uwpeqyk5uu5o91glq64a9ish2qu": { + "description": "Vous offrez un bonus de +1 à l'initiative à tout votre groupe.", + "id": "lw9u7uwpeqyk5uu5o91glq64a9ish2qu", + "effect": [] + }, + "4g3dioadasdb13fgtiwiohsn0lrul04t": { + "description": "Vous êtes capable d'interpréter des [[1. Règles/99. Annexes/7. Œuvres|œuvres]] d'un rang supérieur.", + "id": "4g3dioadasdb13fgtiwiohsn0lrul04t", + "effect": [] + }, + "gv6u8t4cqw18f9ys1bu9avb6ufwgz06o": { + "description": "Vous gagnez un bonus de +1 à vos compétences dépendant du charisme lorsque vous les utilisez sur des personnes que vous fréquentez régulièrement. Fonctionne sur les œuvres impliquant ces personnes.", + "id": "gv6u8t4cqw18f9ys1bu9avb6ufwgz06o", + "effect": [] + }, + "qhqp8me2qp6h0ozjxnw8cwlzg7i5jhqs": { + "description": "", + "id": "qhqp8me2qp6h0ozjxnw8cwlzg7i5jhqs", + "effect": [] + }, + "nguo5mc5q78kc0dv7ui9vlfe4pe9jmtw": { + "description": "", + "id": "nguo5mc5q78kc0dv7ui9vlfe4pe9jmtw", + "effect": [] + }, + "cyz5y5wyjvvh768mg8jtgti0tfp6uflz": { + "description": "Vous avez un bonus de +1 aux jets de résistance de [[1. Règles/99. Annexes/2. Liste des effets#Influencé|influence]] et de [[1. Règles/99. Annexes/2. Liste des effets#Charmé|charme]] en tant qu'attaquant.", + "id": "cyz5y5wyjvvh768mg8jtgti0tfp6uflz", + "effect": [ + { + "id": "prbgukxhg9bhhhqe075l2m4oyo2k5tbd", + "category": "value", + "operation": "add", + "property": "resistance/0", + "value": [ + "influence", + "attack" + ] + }, + { + "id": "o3t2y790j3ixupruye4aejgp77oz0t4e", + "category": "value", + "operation": "add", + "property": "resistance/1", + "value": [ + "charm", + "attack" + ] + } + ] + }, + "q31j8f370w8xqoiv9j6k7cak5x6ec4by": { + "description": "En 2 points d'action, vous pouvez diriger vos alliées pour faciliter leurs déplacement. Les alliées que vous pouvez voir peuvent durant leur tour se déplacer de la moitié de leur vitesse de course gratuitement. Vous ne pouvez pas utiliser d'action libre pour [[1. Règles/3. Le combat/2. Actions en combat#Communiquer|communiquer]] durant ce tour.", + "id": "q31j8f370w8xqoiv9j6k7cak5x6ec4by", + "effect": [] + }, + "gk5ivnshum3p90hhdg4ajtjlycz82giz": { + "description": "Vous pouvez retenir un nombre d'œuvre supplémentaire égal à votre mod. de charisme.", + "id": "gk5ivnshum3p90hhdg4ajtjlycz82giz", + "effect": [ + { + "id": "ves48pvqq29l8jt8s7mxxxbfso7jxnan", + "category": "value", + "operation": "add", + "property": "arts", + "value": "modifier/charisma" + } + ] + }, + "pehcgqhwcimc5wozpazuxxonzdtwzvq4": { + "description": "", + "id": "pehcgqhwcimc5wozpazuxxonzdtwzvq4", + "effect": [] + }, + "6ls3fq5ng8wvp5jv7gt5c2lvnhec65oi": { + "description": "", + "id": "6ls3fq5ng8wvp5jv7gt5c2lvnhec65oi", + "effect": [] + }, + "e82w2mhawunimiumddiybn2mp9i3wjp5": { + "description": "Vous êtes capable de vous battre durant une performance. Vous pouvez frapper avec une arme de corps à corps utilisant la [[1. Règles/2. L'entrainement/1. Entrainement#La dextérité|dextérité]] tout en maintenant votre performance avec 3 points d'action.", + "id": "e82w2mhawunimiumddiybn2mp9i3wjp5", + "effect": [] + }, + "rolt2161s0exz5809wshusfb3cksvy6q": { + "description": "Vous êtes capable d'[[1. Règles/99. Annexes/2. Liste des effets#Influencé|influencer]] des personnes. Après 10 minutes de discussion, votre cible doit faire un jet de résistance (d12/7 + mod. de [[1. Règles/2. L'entrainement/1. Entrainement#Le charisme|charisme]]) à l'[[1. Règles/99. Annexes/2. Liste des effets#Influencé|influence]]. ", + "id": "rolt2161s0exz5809wshusfb3cksvy6q", + "effect": [] + }, + "6x9hu23ld0najypcth2i48oj5g74pfew": { + "description": "Vous gagnez une nouvelle réaction, utilisable uniquement pour saisir une opportunité.", + "id": "6x9hu23ld0najypcth2i48oj5g74pfew", + "effect": [] + }, + "jw0dgm5uonxvid08j4eou67hezpdbkae": { + "description": "Vous êtes capable d'interpréter des [[1. Règles/99. Annexes/7. Œuvres|œuvres]] d'un rang supérieur.", + "id": "jw0dgm5uonxvid08j4eou67hezpdbkae", + "effect": [] + }, + "jjz3firpbdhnbadhm4r0zcmqdj7alfo5": { + "description": "Après avoir [[1. Règles/3. Le combat/2. Actions en combat#Analyser une situation|analysé]] ([[1. Règles/2. L'entrainement/2. Compétences#Compréhension|compréhension]] 10) 2 fois un adversaire, vous pouvez saisir l'opportunité lorsqu'il vous attaque pour le supplier de vous épargner. Vous faites alors un [[1. Règles/1. Introduction/2. Glossaire#Jet opposé|jet opposé]] de [[1. Règles/2. L'entrainement/2. Compétences#Persuasion|persuasion]] contre [[1. Règles/2. L'entrainement/2. Compétences#Compréhension|compréhension]]. Il change alors de cible s'il a une autre cible à portée.", + "id": "jjz3firpbdhnbadhm4r0zcmqdj7alfo5", + "effect": [] + }, + "clfj53bjvonr4n9ml8g18yjl5tglak98": { + "description": "Après avoir [[1. Règles/3. Le combat/2. Actions en combat#Analyser une situation|analysé]] ([[1. Règles/2. L'entrainement/2. Compétences#Compréhension|compréhension]] 10) 2 fois un adversaire, vous pouvez saisir l'opportunité au début de son tour pour le provoquer et l'inciter à vous attaquer. Si vous êtes à sa portée, il se mettra à vous attaquer.", + "id": "clfj53bjvonr4n9ml8g18yjl5tglak98", + "effect": [] + }, + "ye7jnp5jmdf8kncz0crfh420bx56zyha": { + "description": "Vous êtes capable d'entremêler des [[1. Règles/99. Annexes/7. Œuvres|œuvres]] de rang 1 affectant les adversaires et les alliées.", + "id": "ye7jnp5jmdf8kncz0crfh420bx56zyha", + "effect": [] + }, + "dqqu234gog0jukjzcwyt3ycl5s0bleki": { + "description": "Vous avez un bonus de +1 aux jets de résistance de [[1. Règles/99. Annexes/2. Liste des effets#Influencé|influence]] et de [[1. Règles/99. Annexes/2. Liste des effets#Charmé|charme]] en tant qu'attaquant.", + "id": "dqqu234gog0jukjzcwyt3ycl5s0bleki", + "effect": [ + { + "id": "fu79c401m3xd69jc7l0lhok5hdfo6g51", + "category": "value", + "operation": "add", + "property": "resistance/0", + "value": [ + "influence", + "attack" + ] + }, + { + "id": "h4c9q61vca1h4punwwpud9lfdbi6nvy2", + "category": "value", + "operation": "add", + "property": "resistance/1", + "value": [ + "charm", + "attack" + ] + } + ] + }, + "ajzfy4j655ud44m8qr05rqnjunfr6cdx": { + "description": "Vous pouvez [[1. Règles/3. Le combat/2. Actions en combat#Communiquer|communiquer]] gratuitement une fois par tour.", + "id": "ajzfy4j655ud44m8qr05rqnjunfr6cdx", + "effect": [] + }, + "ei7018fdlpxrlbm1fjoz7fvjptxrexay": { + "description": "Tant que vous maintenez votre [[1. Règles/99. Annexes/7. Œuvres|œuvre]], vous gagnez un bonus de +2 pour maintenir votre concentration sur un sort.", + "id": "ei7018fdlpxrlbm1fjoz7fvjptxrexay", + "effect": [] + }, + "2703rnov414mizauv4wdfi9jft4dv7nz": { + "description": "Lorsque vous infligez des dégâts avec une attaque au corps à corps, vous pouvez saisir l'opportunité pour faire un jet d'[[1. Règles/2. L'entrainement/2. Compétences#Intimidation|intimidation]]. Si le résultat est supérieur à la vie actuelle de la cible, elle est [[1. Règles/99. Annexes/2. Liste des effets#Apeuré|apeurée]] pendant un tour.", + "id": "2703rnov414mizauv4wdfi9jft4dv7nz", + "effect": [] + }, + "c4q28moagwaafnba2dvixt82ze5wj82z": { + "description": "Vous êtes immunisés aux influences **non magiques** et vous avez un bonus de +3 aux jets de résistance de [[1. Règles/99. Annexes/2. Liste des effets#Charmé|charme]] **non magiques** en tant que défenseur.", + "id": "c4q28moagwaafnba2dvixt82ze5wj82z", + "effect": [] + }, + "3gi1vraony242viwqhygrp9how2a3gxv": { + "description": "Vous êtes capable d'improviser n'importe quelle [[1. Règles/99. Annexes/7. Œuvres|œuvre]] de rang 1, sans avoir à l'apprendre.", + "id": "3gi1vraony242viwqhygrp9how2a3gxv", + "effect": [] + }, + "n0t4j9aamcjirp09w973gttoj6v1qd21": { + "description": "Vous êtes capable de [[1. Règles/99. Annexes/2. Liste des effets#Charmé|charmer]] des personnes sous [[1. Règles/99. Annexes/2. Liste des effets#Influencé|influence]]. Après 10 minutes de discussion, votre cible doit faire un jet de résistance (d8/5 + mod. de [[1. Règles/2. L'entrainement/1. Entrainement#Le charisme|charisme]]) au [[1. Règles/99. Annexes/2. Liste des effets#Charmé|charme]]. En cas de réussite, la cible perds l'influence. #balancing", + "id": "n0t4j9aamcjirp09w973gttoj6v1qd21", + "effect": [] + }, + "ephakrv6zmv5hnssn4fvcemx9w5tktwc": { + "description": "", + "id": "ephakrv6zmv5hnssn4fvcemx9w5tktwc", + "effect": [] + }, + "sc7p6a54prehtgtecbqhsbkgy20c1tgu": { + "description": "Vous êtes capable d'interpréter des [[1. Règles/99. Annexes/7. Œuvres|œuvres]] d'un rang supérieur.", + "id": "sc7p6a54prehtgtecbqhsbkgy20c1tgu", + "effect": [] + }, + "x41gj307qchlvalccvtwyslcm9j3sot6": { + "description": "", + "id": "x41gj307qchlvalccvtwyslcm9j3sot6", + "effect": [] + }, + "i0jk2fhv15uogfwe8lpugxkzch2vkvcu": { + "description": "", + "id": "i0jk2fhv15uogfwe8lpugxkzch2vkvcu", + "effect": [] + }, + "h52xwpf7fafi2rtx0ntv6fwjueuwp37w": { + "description": "", + "id": "h52xwpf7fafi2rtx0ntv6fwjueuwp37w", + "effect": [] + }, + "flitpsmt97yve3fygycbmfn08kri7kio": { + "description": "", + "id": "flitpsmt97yve3fygycbmfn08kri7kio", + "effect": [] + }, + "e0pta3so9d8zqv7ptwar7sgdo3yf1fpe": { + "description": "Vous sacrifiez 1 point d'action et 1 réaction par tour pour offrir à tout les alliées visible un bonus de +1 à tout les jets. Lorsque vous arrêtez de donner le bonus, vous subissez un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue persistante|fatigue persistante]].", + "id": "e0pta3so9d8zqv7ptwar7sgdo3yf1fpe", + "effect": [] + }, + "9hes51dqn1hxdp9m0w3vq80i2gj0ho1w": { + "description": "Vous êtes capable de choisir les cibles que vous souhaitez lorsque vous jouez des œuvres impactant plusieurs personnes.", + "id": "9hes51dqn1hxdp9m0w3vq80i2gj0ho1w", + "effect": [] + }, + "bk4ozh4lfq3gilhuafj7dq53042ye8tg": { + "description": "Transformation impossible. Alignement chaotique obligatoire. Une [[1. Règles/99. Annexes/8. Divers#Possession aléatoire|possession aléatoire]] peut survenir.\nVous avez un malus -1 aux jets de résistance de [[1. Règles/99. Annexes/2. Liste des effets#Influencé|influence]], [[1. Règles/99. Annexes/2. Liste des effets#Charmé|charme]] et de [[1. Règles/99. Annexes/2. Liste des effets#Possédé|possession]] en tant que défenseur.", + "id": "bk4ozh4lfq3gilhuafj7dq53042ye8tg", + "effect": [] + }, + "rxct0tarxhjomgmagqfs5vilxmrvwwcq": { + "description": "Transformation impossible. Alignement chaotique obligatoire. Une [[1. Règles/99. Annexes/8. Divers#Possession aléatoire|possession aléatoire]] peut survenir.", + "id": "rxct0tarxhjomgmagqfs5vilxmrvwwcq", + "effect": [] + }, + "jfzfqi16ch3lctzupknh4lty65r8n92o": { + "description": "Alignement chaotique obligatoire.\nVous pouvez vous transformer une fois par jour durant 30min.\nVous avez un [[1. Règles/1. Introduction/2. Glossaire#Avantage et désavantage|désavantage]] pour vous transformer. ", + "id": "jfzfqi16ch3lctzupknh4lty65r8n92o", + "effect": [] + }, + "r8oabbqsn7lldyw02np9h8vvfqlgzu2a": { + "description": "Vous n'avez plus de [[1. Règles/1. Introduction/2. Glossaire#Avantage et désavantage|désavantage]] pour vous transformer. \nPlus de contrainte d'alignement.", + "id": "r8oabbqsn7lldyw02np9h8vvfqlgzu2a", + "effect": [] + }, + "wdga3j54uw3avr9j34gs5pn3864lm2kt": { + "description": "Chaque transformation peut durer 15 minutes de plus, et vous pouvez vous transformer une fois de plus par jour. \nVous pouvez lancer des [[1. Règles/4. La magie/1. Magie#Les sorts instinctif|sorts instinctifs]].", + "id": "wdga3j54uw3avr9j34gs5pn3864lm2kt", + "effect": [ + { + "id": "rqnruw4xk68rrvgy91f70s2vr0me892c", + "category": "value", + "operation": "add", + "property": "spellranks/instinct", + "value": 1 + } + ] + }, + "ceabuy629didgsp0qfikjj4lbil49so2": { + "description": "+10 mana max.", + "id": "ceabuy629didgsp0qfikjj4lbil49so2", + "effect": [ + { + "id": "urhsg8n990s4ajsst1qo568aots3689i", + "category": "value", + "operation": "add", + "property": "mana", + "value": 10 + } + ] + }, + "p76dlhd086sxqjme0oetquti8776uhxv": { + "description": "Vous avez un bonus de +1 aux jets de résistance de [[1. Règles/99. Annexes/2. Liste des effets#Charmé|charme]] et de [[1. Règles/99. Annexes/2. Liste des effets#Possédé|possession]] en tant que défenseur.\n+2 mana max.", + "id": "p76dlhd086sxqjme0oetquti8776uhxv", + "effect": [ + { + "id": "3rovy0waq74gm9b5posrwp2hh3kb5ybv", + "category": "value", + "operation": "add", + "property": "mana", + "value": 2 + }, + { + "id": "8j6zxpaldi3kj63mnysgz774rpft4ojb", + "category": "value", + "operation": "add", + "property": "resistance/0", + "value": [ + "charm", + "defense" + ] + }, + { + "id": "drmwpx3zuv3yaq4grst36d1703f39yjg", + "category": "value", + "operation": "add", + "property": "resistance/1", + "value": [ + "possesion", + "defense" + ] + } + ] + }, + "ucragqvswcqo4s3c88desrcvdcbvvou2": { + "description": "Vous pouvez dépenser jusqu'à 3 points de mana lorsque vous tentez de vous transformer pour gagner un bonus de 2 par mana dépensé.", + "id": "ucragqvswcqo4s3c88desrcvdcbvvou2", + "effect": [] + }, + "66w0krutsvcyiezhc87kmeinlr59iyzt": { + "description": "Votre connexion innée avec la magie vous a bénie d'un don pour cet art. Choisissez une branche de l'[[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#L'arbre de magie|arbre de magie]]. Vous gagnez le premier niveau de cette branche.", + "id": "66w0krutsvcyiezhc87kmeinlr59iyzt", + "effect": [] + }, + "qf7rvhxdpkg4c1xen0b516owcd8tcj9l": { + "description": "Vous récupérez 2 points de mana supplémentaire par [[1. Règles/99. Annexes/3. Fatigue et repos#Gain par heure de repos|heure de repos]].\n+3 mana max.", + "id": "qf7rvhxdpkg4c1xen0b516owcd8tcj9l", + "effect": [ + { + "id": "1hqcl9h9nn3lfumiicfu4n8a898r6w1o", + "category": "value", + "operation": "add", + "property": "mana", + "value": 3 + } + ] + }, + "s5kidncgfzw85ffubl718lx2f68suhqf": { + "description": "Lorsqu'un dégât subit passe votre armure, vous pouvez subir un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue temporaire|fatigue temporaire]] et dépenser jusqu'à 10 points de mana pour réduire les dégâts d'un montant équivalent.", + "id": "s5kidncgfzw85ffubl718lx2f68suhqf", + "effect": [] + }, + "l9t3uupzdgzbomsg8adgot8t5wg2pk3b": { + "description": "Vous pouvez maitriser un nombre de sort supplémentaires égal à votre modifieur de psyché.", + "id": "l9t3uupzdgzbomsg8adgot8t5wg2pk3b", + "effect": [] + }, + "qd4f2yssnkd9o9i9ngkxphj71p8ywchr": { + "description": "Vous apprenez à lancer des [[1. Règles/4. La magie/1. Magie#Les sorts instinctif|sorts instinctifs]] d'un rang supérieur.", + "id": "qd4f2yssnkd9o9i9ngkxphj71p8ywchr", + "effect": [ + { + "id": "58r2vkeccxq61uaybz24m9xmy1jqoqjh", + "category": "value", + "operation": "add", + "property": "spellranks/instinct", + "value": 1 + } + ] + }, + "s589rc6qzndhmcel1qgyzr04ksgolrn4": { + "description": "Chaque transformation peut durer 15 minutes de plus. De plus, vous avez +1 pour vous transformer.", + "id": "s589rc6qzndhmcel1qgyzr04ksgolrn4", + "effect": [] + }, + "2vsgel7owdmpcft5kqewgdys0y73ud2l": { + "description": "Vous avez un bonus de +1 aux jets de résistance de [[1. Règles/99. Annexes/2. Liste des effets#Apeuré|peur]] et de [[1. Règles/99. Annexes/2. Liste des effets#Charmé|charme]] en tant qu'attaquant.", + "id": "2vsgel7owdmpcft5kqewgdys0y73ud2l", + "effect": [ + { + "id": "w0s2yptvhb5yp2sruj31gic55tvxxjep", + "category": "value", + "operation": "add", + "property": "resistance/0", + "value": [ + "charm", + "attack" + ] + }, + { + "id": "56vjolshlqifv9qw5f6mfgbyrflalwz3", + "category": "value", + "operation": "add", + "property": "resistance/1", + "value": [ + "fear", + "attack" + ] + } + ] + }, + "9i3c4u5b0a04whwsiyd8fw3v0zqyaakx": { + "description": "Les sorts que vous lancez demandent une difficulté augmentée d'un nombre égal au rang du sort pour être [[1. Règles/4. La magie/2. Liste des sorts#^a8f46f|contrer]]. Les sorts spéciaux comptent comme des sorts de rang 3.", + "id": "9i3c4u5b0a04whwsiyd8fw3v0zqyaakx", + "effect": [] + }, + "8h686z5othgskh3sbajict0prpfndpxp": { + "description": "Selon l'alignement de votre Aspect, vous avez un bonus de +1 aux jets de résistance suivant en tant qu'attaquant et défenseur.\nLoyal: [[1. Règles/99. Annexes/2. Liste des effets#Charmé|Charme]] / Neutre: [[1. Règles/99. Annexes/2. Liste des effets#Influencé|Influence]] / Chaotique: [[1. Règles/99. Annexes/2. Liste des effets#Apeuré|Peur]].", + "id": "8h686z5othgskh3sbajict0prpfndpxp", + "effect": [] + }, + "754kal3xwed5l87wct4bv6r56y0hgoto": { + "description": "Vous gagnez un niveau dans une branche de l'[[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#L'arbre de magie|arbre de magie]] dans laquelle vous avez déjà au moins un niveau.", + "id": "754kal3xwed5l87wct4bv6r56y0hgoto", + "effect": [] + }, + "tnifrozwq0shyuv6phv7anznbimwe6bz": { + "description": "+12 mana max.", + "id": "tnifrozwq0shyuv6phv7anznbimwe6bz", + "effect": [ + { + "id": "6yagxk9jpi4sjzit0rjhroet92l4ttvw", + "category": "value", + "operation": "add", + "property": "mana", + "value": 12 + } + ] + }, + "qf3eru17f8u3hysq56k246mlq7p2rbc9": { + "description": "Vous pouvez bénéficier des sens supplémentaires de votre Aspect sans avoir à vous transformer. \nDe plus, vous avez +1 pour vous transformer.", + "id": "qf3eru17f8u3hysq56k246mlq7p2rbc9", + "effect": [] + }, + "8t97bkvu9596xx0yrt6okyiaph6miay2": { + "description": "Vous pouvez maitriser un nombre de sort supplémentaires égal à votre modifieur d'intelligence.", + "id": "8t97bkvu9596xx0yrt6okyiaph6miay2", + "effect": [] + }, + "l7yfi8i4gmprarsfy8ue6bj2u88gz0xm": { + "description": "Lorsque vous subissez des dégâts en étant transformé, vous pouvez dépenser jusqu'à 5 points de mana et réduire les dégâts d'un montant équivalent.", + "id": "l7yfi8i4gmprarsfy8ue6bj2u88gz0xm", + "effect": [] + }, + "0qddds1tbe8kp8eiv96j835tm91de3no": { + "description": "Vous pouvez vous transformer autant de fois que vous le souhaitez. Le temps total que vous pouvez passer en Aspect est égal à votre nombre de transformation multiplié par la durée d'une transformation.", + "id": "0qddds1tbe8kp8eiv96j835tm91de3no", + "effect": [] + }, + "vqwqxz180253lb77afaam2xgpfloyqb7": { + "description": "", + "id": "vqwqxz180253lb77afaam2xgpfloyqb7", + "effect": [] + }, + "dqca85rzzjc7zjyv4y2mjxpmzvjlhs2z": { + "description": "Vous apprenez à lancer des [[1. Règles/4. La magie/1. Magie#Les sorts instinctif|sorts instinctifs]] d'un rang supérieur.", + "id": "dqca85rzzjc7zjyv4y2mjxpmzvjlhs2z", + "effect": [ + { + "id": "uy7vpksjadqoz8wlkk2gyw3g994l6qlh", + "category": "value", + "operation": "add", + "property": "spellranks/instinct", + "value": 1 + } + ] + }, + "gpcahjw17dvycsy5jhdidm1ztnvm6a27": { + "description": "", + "id": "gpcahjw17dvycsy5jhdidm1ztnvm6a27", + "effect": [] + }, + "7aiupz7hpiqjiavp2t5iph77lwmyj61y": { + "description": "Vous gagnez un niveau dans une branche de l'[[1. Règles/99. Annexes/1. Les évolutions de valeur.canvas#L'arbre de magie|arbre de magie]] dans laquelle vous avez déjà au moins un niveau.", + "id": "7aiupz7hpiqjiavp2t5iph77lwmyj61y", + "effect": [] + }, + "pes3dkprscoymd4sednqbqk0wjs87p0v": { + "description": "Lorsque vous êtes transformé, vous gagnez un bonus de +2 pour lancer des sorts de [[1. Règles/4. La magie/2. Liste des sorts#Rang 1|Rang 1]].\n+6 mana max.", + "id": "pes3dkprscoymd4sednqbqk0wjs87p0v", + "effect": [ + { + "id": "d73cpipv6g0oottebfgv227qfsj8d5jk", + "category": "value", + "operation": "add", + "property": "mana", + "value": 6 + } + ] + }, + "sw45zzv7bf6v35h064f6zhcj1e7xbbr5": { + "description": "Lorsque vous êtes transformé, vous avez [[1. Règles/1. Introduction/2. Glossaire#Avantage et désavantage|avantage]] contre les jets de résistances demandant le mod. d'[[1. Règles/2. L'entrainement/1. Entrainement#L'intelligence|intelligence]] et de [[1. Règles/2. L'entrainement/1. Entrainement#La psyché|psyché]].", + "id": "sw45zzv7bf6v35h064f6zhcj1e7xbbr5", + "effect": [] + }, + "koz2ij3tuwj50uvnikm2h3q2xizqm6ck": { + "description": "", + "id": "koz2ij3tuwj50uvnikm2h3q2xizqm6ck", + "effect": [] + }, + "1xblotgy4lq20qwy5ct69yqchk3lc91e": { + "description": "En ratant un jet de résistance d'[[1. Règles/99. Annexes/2. Liste des effets|effet mental]], de [[1. Règles/4. La magie/1. Magie#Les sorts de savoir|sorts de savoir]] ou de [[1. Règles/4. La magie/1. Magie#Les sorts instinctif|sorts instinctif]], vous pouvez subir un point de [[1. Règles/99. Annexes/3. Fatigue et repos#Fatigue temporaire|fatigue temporaire]] pour relancer le jet.", + "id": "1xblotgy4lq20qwy5ct69yqchk3lc91e", + "effect": [] + }, + "qvi4hbdzx52icrxt1e7ieq5om7ma3e38": { + "description": "Vous pouvez vous transformer autant de fois que vous le souhaitez sans limite de temps.", + "id": "qvi4hbdzx52icrxt1e7ieq5om7ma3e38", + "effect": [] + }, + "xgfzfhzqwosb3wbbaf4oejgy1t1z16p6": { + "description": "Vous apprenez le sort unique [[1. Règles/4. La magie/2. Liste des sorts#^5b38b6|Domination mentale]].", + "id": "xgfzfhzqwosb3wbbaf4oejgy1t1z16p6", + "effect": [] + }, + "dv43g9uxad6b17odesr1ciahoupo6anz": { + "description": "+16 mana max.", + "id": "dv43g9uxad6b17odesr1ciahoupo6anz", + "effect": [ + { + "id": "stw5uhlw84xzpobfzuqifkipm5sg3wji", + "category": "value", + "operation": "add", + "property": "mana", + "value": 16 + } + ] + }, + "sq43lzc8bdftrbbfwaq5l6nx1h5jx0eh": { + "description": "Si votre Aspect à une vitesse de nage, vol ou escalade, vous pouvez l'utiliser sans faire de jet de transformation. Vous pouvez également attaquer avec les [[1. Règles/99. Annexes/4. Équipement#Les armes naturelles|armes naturelles]] de votre Aspect sans vous transformer.", + "id": "sq43lzc8bdftrbbfwaq5l6nx1h5jx0eh", + "effect": [] + }, + "c4nptbfb5uoyz98ovsqjxwlssgui9h9p": { + "description": "Vous pouvez vous transformer sans faire de jet avec 1 point d'action.", + "id": "c4nptbfb5uoyz98ovsqjxwlssgui9h9p", + "effect": [] + }, + "jro3s412h8cmqznvlzkshdibqljh6fdl": { + "description": "Lorsque vous êtes transformé, vous gagnez un bonus de +2 en lançant des sorts de [[1. Règles/4. La magie/2. Liste des sorts#Rang 2|Rang 2]], des sorts spéciaux et des sorts uniques.", + "id": "jro3s412h8cmqznvlzkshdibqljh6fdl", + "effect": [] + }, + "rb6fk4ry8x7y8e95bll9g8jwv5noaqxj": { + "description": "Vous êtes capable d'utiliser les particularités magiques de votre Aspect sans vous transformer.", + "id": "rb6fk4ry8x7y8e95bll9g8jwv5noaqxj", + "effect": [] + }, + "lzzn957vhac2rnaf97b1h2gyflf7oy9u": { + "description": "+35 points de statistiques.\n+14 PV max.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 35, + "id": "lo2oov0aesn4i8c3plehisedrp9zjeqv" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 14, + "id": "gvown5vuuhudrkjdxtrqsuvkave4sc3g" + } + ], + "id": "lzzn957vhac2rnaf97b1h2gyflf7oy9u" + }, + "lxucqrfvg76vkmbz3h9e9q6d9ju0zjl0": { + "description": "+1 point de statistique.\n+3 PV max.\n+2 mana max.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 1, + "id": "e2o6bk8vkvggvobzxqxubg4v3stik2bu" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 3, + "id": "1vlg5gp5mpyjggl23xq7k1lpotq5hg5i" + }, + { + "category": "value", + "operation": "add", + "property": "mana", + "value": 2, + "id": "3mldjvb14nh94u5o6tktcnqvuahft1it" + } + ], + "id": "lxucqrfvg76vkmbz3h9e9q6d9ju0zjl0" + }, + "5gadn1dxe6n1j3xjvlcf7mowxftsw7kn": { + "description": "+1 point de compétence.\n+6 PV max.\n+3 mana max.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "ability", + "value": 1, + "id": "8prhhl5rj1524l32t36ozqy14nx15xni" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 6, + "id": "7pkk214fccc4ew8fze1jm2soo9kb939i" + }, + { + "category": "value", + "operation": "add", + "property": "mana", + "value": 3, + "id": "ea73j8itl2nun8o9memts6c1s6f0cjl5" + } + ], + "id": "5gadn1dxe6n1j3xjvlcf7mowxftsw7kn" + }, + "4w03h8xzjluombr5jgncinh5nek4at5u": { + "description": "+2 points de statistiques.\n+1 point de compétence.\n+3 PV max.\n+1 mana max.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 2, + "id": "ce2t8nnwawlvfbll92crytcqst4tc7tm" + }, + { + "category": "value", + "operation": "add", + "property": "ability", + "value": 1, + "id": "76kb7edzik3vhffxcv0de8v3gpns8cs0" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 3, + "id": "pyun5getph6bhg7f6hat2s3j6ry45mad" + }, + { + "category": "value", + "operation": "add", + "property": "mana", + "value": 1, + "id": "k6me9tr2k654swjgr14bubdiiuhfywhe" + } + ], + "id": "4w03h8xzjluombr5jgncinh5nek4at5u" + }, + "4lxwrhbvxavu520i04dt58ovx31myj1l": { + "description": "+1 point de statistique.\n+2 points de compétences.\n+4 PV max.\n+2 mana max.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 1, + "id": "tqmc4aqv7050p2gaorjrv0gv46jdr01h" + }, + { + "category": "value", + "operation": "add", + "property": "ability", + "value": 2, + "id": "yefhhwx336kg4s9qlmnbwatkfgl3tdmh" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 4, + "id": "59mx344uxhz7wpus1j7p96m9hjwhujad" + }, + { + "category": "value", + "operation": "add", + "property": "mana", + "value": 2, + "id": "z1p4ef6oxwizdbdf26b169af1dxiaseo" + } + ], + "id": "4lxwrhbvxavu520i04dt58ovx31myj1l" + }, + "gvsijzlj3wznhvk0uikpznbzdqv34qrs": { + "description": "+1 point de statistique.\n+2 points de compétences.\n+4 PV max.\n+2 mana max.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 1, + "id": "g1l4f3h9bygttvtnnlkn4jlhd1w6ydf2" + }, + { + "category": "value", + "operation": "add", + "property": "ability", + "value": 2, + "id": "khrcqins8mif91qfuqu5zr70bl0lqmye" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 4, + "id": "ko7h15le4skdstgq4otcwpesru6lkwdu" + }, + { + "category": "value", + "operation": "add", + "property": "mana", + "value": 2, + "id": "0pnmaxn7sdwr1wd2kl3076t2704gsho1" + } + ], + "id": "gvsijzlj3wznhvk0uikpznbzdqv34qrs" + }, + "s15lx58vega0q02jx0563nzcunygeo5c": { + "description": "+1 point de statistique.\n+1 transformation par jour.\n+8 PV max.\n+4 mana max.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 1, + "id": "g53ex6oe1nemym6gdh8w1sqqgz1qj06m" + }, + { + "category": "value", + "operation": "add", + "property": "transformation", + "value": 1, + "id": "geiveyiws1xmyz9k0hl0o8unfac9y56d" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 8, + "id": "oy23u2jr3rfyeghjkmreon6va0hzkwcb" + }, + { + "category": "value", + "operation": "add", + "property": "mana", + "value": 4, + "id": "4lwgtnrpr7f4w96kwh695lwa7ux6h2ax" + } + ], + "id": "s15lx58vega0q02jx0563nzcunygeo5c" + }, + "y24gprm397s7dx578cv4uhliedg73hkw": { + "description": "+2 points de statistiques.\n+7 PV max.\n+2 mana max.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 2, + "id": "r5cj3aqiwvhbfh2fqy5icrai7j207qkj" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 7, + "id": "21gjxau0ualfsip7b09hrbx7pw9ldupm" + }, + { + "category": "value", + "operation": "add", + "property": "mana", + "value": 2, + "id": "oc4yplzf9pxf00tgzp0jz5490uhoblvt" + } + ], + "id": "y24gprm397s7dx578cv4uhliedg73hkw" + }, + "pffkc0ms5mhcmztrxv2ifhq6ydiv902o": { + "description": "+1 point de statistique.\n+3 PV max.\n+3 mana max.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 1, + "id": "eevmunyzdws33tmfcub569ri5i3x8n3k" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 3, + "id": "salmhd6apb5xz9ztqwypdazt9ug36huw" + }, + { + "category": "value", + "operation": "add", + "property": "mana", + "value": 3, + "id": "ow2mkjcg4xvvp64k5jiis2q6tkxuzeqg" + } + ], + "id": "pffkc0ms5mhcmztrxv2ifhq6ydiv902o" + }, + "42bz5a6hqi80fmi3roudx7za3fjnlna3": { + "description": "+1 point de statistique.\n+3 points de compétences.\n+1 sort maitrisé.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 1, + "id": "i4klw6ohowskhvv3awxmzbve06vzcmkb" + }, + { + "category": "value", + "operation": "add", + "property": "ability", + "value": 3, + "id": "5zxqrsfmq1zbf50xbc0b4jr53o0aql5x" + }, + { + "category": "value", + "operation": "add", + "property": "spellslots", + "value": 1, + "id": "jdma6yr5mu0834c4dmt79acc39yc04pg" + } + ], + "id": "42bz5a6hqi80fmi3roudx7za3fjnlna3" + }, + "vkftntfuscpzy7avxyv4gkbw57mwuozi": { + "description": "+2 points de statistiques.\n+3 PV max.\n+5 mana max.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 2, + "id": "zgac9h0c5r9s9271b8is3l1yntmt8znf" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 3, + "id": "sehss7hnsojq981459d69n9q3wxo443v" + }, + { + "category": "value", + "operation": "add", + "property": "mana", + "value": 5, + "id": "ecvksdciwthblrbjid1pj0b4pbj7cxsp" + } + ], + "id": "vkftntfuscpzy7avxyv4gkbw57mwuozi" + }, + "fr6iflohcwavqv8g4br5o172lo1w0o1y": { + "description": "+2 points de statistiques.\n+5 PV max.\n+2 mana max.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 2, + "id": "qkh8js3qcva37feehl2vgu461trd9std" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 5, + "id": "tpl6norwafh85p989b65wdcn63h5ypj5" + }, + { + "category": "value", + "operation": "add", + "property": "mana", + "value": 2, + "id": "31yx8tq4klog5tuyjgf9bik5udxowy0e" + } + ], + "id": "fr6iflohcwavqv8g4br5o172lo1w0o1y" + }, + "ty5pd7kp5qgf1y0sqm9xm88djtpqdeso": { + "description": "+3 points de statistiques.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 3, + "id": "23yxovem2h2rua231xuh1audf02p4500" + } + ], + "id": "ty5pd7kp5qgf1y0sqm9xm88djtpqdeso" + }, + "xw8e1mmqdtvuuqtd6g6spf4ql60l1l9h": { + "description": "+1 point de statistique.\n+6 PV max.\n+6 mana max.\n+1 sort maitrisé.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 1, + "id": "y0axnjch2u34k6ut35fs0rkkeubh9o6e" + }, + { + "category": "value", + "operation": "add", + "property": "spellslots", + "value": 1, + "id": "ikcm66zz9s7hm1dgggj51smgwvr81dna" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 6, + "id": "itd57490tuqsr56csj6qmqbsvpzsbmz4" + }, + { + "category": "value", + "operation": "add", + "property": "mana", + "value": 6, + "id": "6k090kxoies0rt1qtu2wemy5rsovtsuk" + } + ], + "id": "xw8e1mmqdtvuuqtd6g6spf4ql60l1l9h" + }, + "q0ddn6z4s5v9092p0w321qm62hgfz6bi": { + "description": "+1 point de statistique.\n+3 PV max.\n+5 mana max.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 1, + "id": "0xtom3xkercc4zl0jurtsqgvl3veqa2a" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 3, + "id": "oicdootkm86jf4ald0zkjdj20qfb8kgr" + }, + { + "category": "value", + "operation": "add", + "property": "mana", + "value": 5, + "id": "fzmp2obis95i4ncifuzjiqxo55ycgumk" + } + ], + "id": "q0ddn6z4s5v9092p0w321qm62hgfz6bi" + }, + "gk3kuvenl1ne0d7cmgpqhffuictwg1mw": { + "description": "+1 point de statistique.\n+2 points de compétences.\n+2 PV max.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 1, + "id": "jwotd6u2wbmvm0m4ws0if63lmz8xstz9" + }, + { + "category": "value", + "operation": "add", + "property": "ability", + "value": 2, + "id": "dfsrnsqetgrpc5r2022tpw1ivpever1o" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 2, + "id": "xaw6ojkf7iep32sh6d2dnyoeglj8t47d" + } + ], + "id": "gk3kuvenl1ne0d7cmgpqhffuictwg1mw" + }, + "2ftgh4e79xkzp05kt0xnn2o2ifo1plev": { + "description": "+2 points de statistiques.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 2, + "id": "2wbp5a910tbepbuwozoj6272zuao5736" + } + ], + "id": "2ftgh4e79xkzp05kt0xnn2o2ifo1plev" + }, + "0b2t1ubfukhybi18is67s7zzmah27ona": { + "description": "+1 point de statistique.\n+1 transformation par jour.\n+2 points de compétences.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 1, + "id": "0t3aldyi2rensjkjrlmibyaw0p9801bo" + }, + { + "category": "value", + "operation": "add", + "property": "transformation", + "value": 1, + "id": "qp2mfarh3xi5a5ykqj9ug18tuo9gb953" + }, + { + "category": "value", + "operation": "add", + "property": "ability", + "value": 2, + "id": "zwt4agub4xo5bdrxla89600u3koj4rpl" + } + ], + "id": "0b2t1ubfukhybi18is67s7zzmah27ona" + }, + "0j9fujnkcevbx0fax8y7d5ge60c74pkk": { + "description": "+1 au modifieur de votre choix.\n+1 point de compétence.", + "effect": [ + { + "category": "choice", + "id": "p3omttdrld3bj1mota2pi2fvt6kqe07n", + "options": [ + { + "text": "Force", + "category": "value", + "operation": "add", + "value": 1, + "property": "modifier/strength" + }, + { + "text": "Dextérité", + "category": "value", + "operation": "add", + "value": 1, + "property": "modifier/dexterity" + }, + { + "text": "Constitution", + "category": "value", + "operation": "add", + "value": 1, + "property": "modifier/constitution" + }, + { + "text": "Intelligence", + "category": "value", + "operation": "add", + "value": 1, + "property": "modifier/intelligence" + }, + { + "text": "Curiosité", + "category": "value", + "operation": "add", + "value": 1, + "property": "modifier/curiosity" + }, + { + "text": "Charisme", + "category": "value", + "operation": "add", + "value": 1, + "property": "modifier/charisma" + }, + { + "text": "Psyché", + "category": "value", + "operation": "add", + "value": 1, + "property": "modifier/psyche" + } + ] + }, + { + "category": "value", + "operation": "add", + "property": "ability", + "value": 1, + "id": "n7mjk4ln0a0dtwrwl1hwuyjkfau6lanw" + } + ], + "id": "0j9fujnkcevbx0fax8y7d5ge60c74pkk" + }, + "17g09264zrgnkjql1kyk4wuv498ywjy1": { + "description": "+1 point de statistique.\n+7 PV max.\n+1 mana max.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 1, + "id": "74a9xvyyitoxa7izgy6wtkux2zu7q4wy" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 7, + "id": "lvhb3bib11tjsvzz4xxgao9j4z4lsr26" + }, + { + "category": "value", + "operation": "add", + "property": "mana", + "value": 1, + "id": "havhayxesoa26snjg4envqzjlr1ta1h9" + } + ], + "id": "17g09264zrgnkjql1kyk4wuv498ywjy1" + }, + "9eowun33q57t0ihdibl41348etflhuz6": { + "description": "+1 point de statistique.\n+2 PV max.\n+5 mana max.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 1, + "id": "co391xm7hvx4svlsdgejc1uee98eo5x9" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 2, + "id": "kzy5agc5i7kvjvacujttn9zo5o6ptfks" + }, + { + "category": "value", + "operation": "add", + "property": "mana", + "value": 5, + "id": "pp14urths2ke26gybenfw7cak0u29o5a" + } + ], + "id": "9eowun33q57t0ihdibl41348etflhuz6" + }, + "0wszsrkcn2xez98cai8bnl757jl2oq2d": { + "description": "+1 point de statistique.\n+2 points de compétences.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 1, + "id": "p7g96tdoy7mzfkc5jx4513aa68iwrhjx" + }, + { + "category": "value", + "operation": "add", + "property": "ability", + "value": 2, + "id": "httcgwpr48mlmgo4qiouynr6yoq1983z" + } + ], + "id": "0wszsrkcn2xez98cai8bnl757jl2oq2d" + }, + "yut7s8ko49uv5cgp8p257w6ww517xtc7": { + "description": "+2 points de statistiques.\n+1 sort maitrisé.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 2, + "id": "sa6jiyba0lf9ykm7nga3c0ztcpsvje22" + }, + { + "category": "value", + "operation": "add", + "property": "spellslots", + "value": 1, + "id": "bhiobe1ulds8lq5d115dzdvg3eki97ja" + } + ], + "id": "yut7s8ko49uv5cgp8p257w6ww517xtc7" + }, + "fweoy5ut4e21ddz57g4uydjxj4yp28sm": { + "description": "+2 points de statistiques.\n+8 PV max.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 2, + "id": "rhxp4i6b6z7258v9x45lx0c1yo8jhc22" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 8, + "id": "emgu85byjhbuwz8fnhugi8g7gilz548e" + } + ], + "id": "fweoy5ut4e21ddz57g4uydjxj4yp28sm" + }, + "kdq78so50ehc6a6dbygi50woieir0td7": { + "description": "+2 points de statistiques.\n+7 mana max.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 2, + "id": "t2ij8iyp44ux9lfj3oo0kb384fu2lms4" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 7, + "id": "769njy3xt4yj71g3u2imwxtrwpfk6py7" + } + ], + "id": "kdq78so50ehc6a6dbygi50woieir0td7" + }, + "2wmdst5nzump32tqzjla1nhah6b4xlun": { + "description": "+1 point de statistique.\n+1 point de compétence.\n+2 PV max.\n+2 mana max.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 1, + "id": "m7eketn3uu7wngfxnmk3cpp1m8jifklh" + }, + { + "category": "value", + "operation": "add", + "property": "ability", + "value": 1, + "id": "t62hm8cecpzu7dek1y0pk4vqn9ad2pj6" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 2, + "id": "n4gz7nofb48ubwbqeq87npnpzi45g0et" + }, + { + "category": "value", + "operation": "add", + "property": "mana", + "value": 2, + "id": "mfzkm62swlu336ofakmz144fe67kycbc" + } + ], + "id": "2wmdst5nzump32tqzjla1nhah6b4xlun" + }, + "ku75g8by5922259p92wifgk4yo4vnpeo": { + "description": "+1 point de statistique.\n+1 transformation par jour.\n+4 PV max.\n+4 mana max.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 1, + "id": "dcq0ozypvw1aqgsnb950oz71nou6jgod" + }, + { + "category": "value", + "operation": "add", + "property": "transformation", + "value": 1, + "id": "9of8eia9fzpvcgqddwwp1rntpimzjja7" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 4, + "id": "a9aa126ke7yzq1mo004ihpve23tf9xaj" + }, + { + "category": "value", + "operation": "add", + "property": "mana", + "value": 4, + "id": "lp12lo8409lk0jxduhlp8x89wcpxzlg2" + } + ], + "id": "ku75g8by5922259p92wifgk4yo4vnpeo" + }, + "j7vnwxmliu2rpf9gsgnib39kzcqkfgo7": { + "description": "+3 points de statistiques.\n+3 PV max.\n+5 mana max.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 3, + "id": "dzudl7ntrvl3xlgwj91snrimargrzra8" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 3, + "id": "s6jui0z0bmcbm6o8dkdpv18hp78lo7fs" + }, + { + "category": "value", + "operation": "add", + "property": "mana", + "value": 5, + "id": "8tusw2m3lr3d0asu1wbhhukzrqsxhcyi" + } + ], + "id": "j7vnwxmliu2rpf9gsgnib39kzcqkfgo7" + }, + "gyqhh4lf3xy7qz983lh0le6byj013qak": { + "description": "+3 points de statistiques.\n+6 PV max.\n+1 mana max.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 3, + "id": "plhp5bia6g8816grbug0tex0y4cyz90w" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 6, + "id": "izc6d1tkemwrh2j2mfjsgygftl972uly" + }, + { + "category": "value", + "operation": "add", + "property": "mana", + "value": 1, + "id": "6tyszscbwd6cua4lv0blz5nv1nwtp098" + } + ], + "id": "gyqhh4lf3xy7qz983lh0le6byj013qak" + }, + "ei7wm640sqixqz1ce0suyqpr6hvtpul5": { + "description": "+1 point de statistique.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 1, + "id": "zu73rm9gtmtbxvpsni9epzhgt87cjz9w" + } + ], + "id": "ei7wm640sqixqz1ce0suyqpr6hvtpul5" + }, + "0u0ja87wxvl5cyhw0gkxks7u8l6zew8l": { + "description": "+1 point de compétence.\n+5 PV max.\n+5 mana max.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "ability", + "value": 1, + "id": "6dvxx4rr6cwhbao2ajubvjaczoujpjm3" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 5, + "id": "en1ovogsknqbvr7iwbybgo4wvu3ick44" + }, + { + "category": "value", + "operation": "add", + "property": "mana", + "value": 5, + "id": "18w9bfp98cnnx9ozzgz2gzb6jkxr80az" + } + ], + "id": "0u0ja87wxvl5cyhw0gkxks7u8l6zew8l" + }, + "do46po1ewfxvzt1p8v3fsypn68qqs1os": { + "description": "+1 point de statistique.\n+3 PV max.\n+5 mana max.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 1, + "id": "k0wi9na5mfzc2bj23288jgllkbtv57ly" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 3, + "id": "cyfm5a9yh2v53bpo4aultq14thy5bp80" + }, + { + "category": "value", + "operation": "add", + "property": "mana", + "value": 5, + "id": "e41vu7f0428tk28yzjn0ako25p43efr6" + } + ], + "id": "do46po1ewfxvzt1p8v3fsypn68qqs1os" + }, + "4uhj49zt0l594tb3jbo955okel6nl1q5": { + "description": "+1 point de statistique.\n+5 PV max.\n+2 mana max.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 1, + "id": "sqjafyyzzs3zx1j6ucivqd1p17uopm1l" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 5, + "id": "saiu06u3fd2o2a8bawicysa99mzubkzi" + }, + { + "category": "value", + "operation": "add", + "property": "mana", + "value": 2, + "id": "6clpeh3etkdbpys35wjakczhd6ek9dns" + } + ], + "id": "4uhj49zt0l594tb3jbo955okel6nl1q5" + }, + "uxmiwilhomg6m9k38w7e3svcrswyn7l7": { + "description": "+2 points de statistiques.\n+1 point de compétence.\n+1 sort maitrisé.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 2, + "id": "i2vanusgfbkh8fv6bqnj0r226l6x7ufr" + }, + { + "category": "value", + "operation": "add", + "property": "ability", + "value": 1, + "id": "u08fl1yyvppjagewaqepgmbuy5saohdr" + }, + { + "category": "value", + "operation": "add", + "property": "spellslots", + "value": 1, + "id": "oqrqb1bd04btk38s4lqkziwyah0xohj3" + } + ], + "id": "uxmiwilhomg6m9k38w7e3svcrswyn7l7" + }, + "cev8sz6kj05cbsi9zh4s9kutswl9jtga": { + "description": "+1 point de statistique.\n+1 transformation par jour.\n+2 points de compétences.\n+1 sort maitrisé.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 1, + "id": "pee07vgs8p4t9wh8atzcxb3uvj1ouxbp" + }, + { + "category": "value", + "operation": "add", + "property": "transformation", + "value": 1, + "id": "qpmx5swr98mohctupoasoyfxen07tmo0" + }, + { + "category": "value", + "operation": "add", + "property": "ability", + "value": 2, + "id": "mwfgjgmeidriz2rphzu582luxohuomy2" + }, + { + "category": "value", + "operation": "add", + "property": "spellslots", + "value": 1, + "id": "cmr0n9fa7a6hg6crporc2o1abtud4ocg" + } + ], + "id": "cev8sz6kj05cbsi9zh4s9kutswl9jtga" + }, + "dbgfwilt3eoer4j43jr50hdzznjb5hdy": { + "description": "+1 point de statistique.\n+1 point de compétence.\n+7 PV max.\n+5 mana max.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 1, + "id": "7k7148wzgse1pf047dt05mst4d6jwgam" + }, + { + "category": "value", + "operation": "add", + "property": "ability", + "value": 1, + "id": "b2622quwgf9pbce9u9ayj49y7u7j6f80" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 7, + "id": "y4nlnqbzfh0o3p67l6xhqqu40svruthb" + }, + { + "category": "value", + "operation": "add", + "property": "mana", + "value": 5, + "id": "s8u31p5e7t9wi5nyo8ff775l9q1u9hrr" + } + ], + "id": "dbgfwilt3eoer4j43jr50hdzznjb5hdy" + }, + "vnl1syzkdqjfn3dy8xm0ewtw77ueocuk": { + "description": "+1 point de statistique.\n+6 PV max.\n+1 mana max.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 1, + "id": "ncznfxgif20jk2z6ndnrvyo4e6uuj3pq" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 6, + "id": "9d542o79rditxz0bx9wtp444xlqq8i7a" + }, + { + "category": "value", + "operation": "add", + "property": "mana", + "value": 1, + "id": "xgxte5wer2rryvytu7hq6xt89wnqmk76" + } + ], + "id": "vnl1syzkdqjfn3dy8xm0ewtw77ueocuk" + }, + "oimwzwl9xp4c0p4uc3dreietarqtkofd": { + "description": "+1 point de statistique.\n+2 PV max.\n+5 mana max.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 1, + "id": "jb5gb1qx7wh8h83355gmerm574irw9k2" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 2, + "id": "4krhja8hhhy3lpf0whh9wq6kbo7utm28" + }, + { + "category": "value", + "operation": "add", + "property": "mana", + "value": 5, + "id": "371sv2xcvtvel305mfzfgl9ku0ezn6t3" + } + ], + "id": "oimwzwl9xp4c0p4uc3dreietarqtkofd" + }, + "16fxrd8aqzpw76bphaz7r17kfnaa76pi": { + "description": "+2 points de statistiques.\n+2 points de compétences.\n+6 PV max.\n+3 mana max.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 2, + "id": "8agydzqu7rijz5i4jilwvbeybvr87s9q" + }, + { + "category": "value", + "operation": "add", + "property": "ability", + "value": 2, + "id": "48sw4tw4qfps8en93c5vfx50l4lz23ol" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 6, + "id": "dfgs4vjtvc0oexkdz5u8zbnr0p4mhwik" + }, + { + "category": "value", + "operation": "add", + "property": "mana", + "value": 3, + "id": "pc3q7cmhdb5ylvtjrc7gdymxdm42slaq" + } + ], + "id": "16fxrd8aqzpw76bphaz7r17kfnaa76pi" + }, + "rjw4vvivyo6fncuxoxbcaa4tsnizv3fv": { + "description": "+2 points de statistiques.\n+2 PV max.\n+5 mana max.\n+1 sort maitrisé.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 2, + "id": "1cct8tu3dxa1z60ld2rxdu0mzvtovlmo" + }, + { + "category": "value", + "operation": "add", + "property": "spellslots", + "value": 1, + "id": "iejoclzwpdpdrt4czak4cqtdhnntm6bc" + }, + { + "category": "value", + "operation": "add", + "property": "health", + "value": 2, + "id": "fkq8bh3c784uu64igmqsrca50t5cg3kp" + }, + { + "category": "value", + "operation": "add", + "property": "mana", + "value": 5, + "id": "d5w78y64hm4tmhh5xdlcmz4umiw2xlt4" + } + ], + "id": "rjw4vvivyo6fncuxoxbcaa4tsnizv3fv" + }, + "5zghm6wfve9t32rz7kd8zianc0be600v": { + "description": "+2 points de statistiques.", + "effect": [ + { + "category": "value", + "operation": "add", + "property": "training", + "value": 2, + "id": "rpgc1w5skwlr86hmbbxc04ggfl16iw2w" + } + ], + "id": "5zghm6wfve9t32rz7kd8zianc0be600v" + }, + "9q8mf0u06oxxwqltyv58kbavs7qtoouw": { + "description": "+1 au modifieur de votre choix.\n+1 point de compétence.", + "effect": [ + { + "category": "choice", + "id": "1y4l2r3axnkhaz7o9vqahlbvmeze37wk", + "options": [ + { + "text": "Force", + "category": "value", + "operation": "add", + "value": 1, + "property": "modifier/strength" + }, + { + "text": "Dextérité", + "category": "value", + "operation": "add", + "value": 1, + "property": "modifier/dexterity" + }, + { + "text": "Constitution", + "category": "value", + "operation": "add", + "value": 1, + "property": "modifier/constitution" + }, + { + "text": "Intelligence", + "category": "value", + "operation": "add", + "value": 1, + "property": "modifier/intelligence" + }, + { + "text": "Curiosité", + "category": "value", + "operation": "add", + "value": 1, + "property": "modifier/curiosity" + }, + { + "text": "Charisme", + "category": "value", + "operation": "add", + "value": 1, + "property": "modifier/charisma" + }, + { + "text": "Psyché", + "category": "value", + "operation": "add", + "value": 1, + "property": "modifier/psyche" + } + ] + }, + { + "category": "value", + "operation": "add", + "property": "ability", + "value": 1, + "id": "dhp7grbbl93v190alyxp61g181a0bgo6" + } + ], + "id": "9q8mf0u06oxxwqltyv58kbavs7qtoouw" + } + } } \ No newline at end of file diff --git a/shared/character.util.ts b/shared/character.util.ts index 311cad9..292dcfc 100644 --- a/shared/character.util.ts +++ b/shared/character.util.ts @@ -1,7 +1,7 @@ import type { Ability, Alignment, Character, CharacterConfig, CompiledCharacter, DoubleIndex, Feature, FeatureItem, Level, MainStat, SpellElement, SpellType, TrainingLevel } from "~/types/character"; import { z } from "zod/v4"; import characterConfig from './character-config.json'; -import { button, fakeA, loading } from "./proses"; +import { button, fakeA, input, loading } from "./proses"; import { div, dom, icon, text } from "./dom.util"; import { popper } from "./floating.util"; import { clamp } from "./general.util"; @@ -83,7 +83,6 @@ const defaultCompiledCharacter: (character: Character) => CompiledCharacter = (c precision: 0, arts: 0, }, - spells: character.spells ?? [], speed: false, defense: { hardcap: Infinity, @@ -105,8 +104,16 @@ const defaultCompiledCharacter: (character: Character) => CompiledCharacter = (c magicinstinct: 0, }, bonus: {}, - resistance: {},//Object.fromEntries(MAIN_STATS.map(e => [e as MainStat, [0, 0]])) as Record, + resistance: {}, initiative: 0, + capacity: 0, + lists: { + action: [], + freeaction: [], + reaction: [], + passive: [], + spells: character.spells, + }, aspect: "", notes: character.notes ?? "", }); @@ -120,6 +127,15 @@ export const mainStatTexts: Record = { "charisma": "Charisme", "psyche": "Psyché", }; +export const mainStatShortTexts: Record = { + "strength": "FOR", + "dexterity": "DEX", + "constitution": "CON", + "intelligence": "INT", + "curiosity": "CUR", + "charisma": "CHA", + "psyche": "PSY", +}; export const elementTexts: Record = { fire: { class: 'text-light-red dark:text-dark-red border-light-red dark:border-dark-red bg-light-red dark:bg-dark-red', text: 'Feu' }, @@ -176,7 +192,7 @@ const stepTexts: Record = { 4: 'Déterminez l\'Aspect qui vous corresponds et benéficiez de puissants bonus.' }; -type Property = { value: number | string, operation: "set" | "add" }; +type Property = { value: number | string | false, id: string, operation: "set" | "add" }; type PropertySum = { list: Array, value: number, _dirty: boolean }; export class CharacterBuilder { @@ -213,15 +229,10 @@ export class CharacterBuilder this._result = defaultCompiledCharacter(this._character); - Object.entries(character.leveling).forEach(e => { - const feature = people.options[parseInt(e[0]) as Level][e[1]]!; - feature.effect.map(e => this.apply(e)); - }); + Object.entries(character.leveling).forEach(e => this.add(people.options[parseInt(e[0]) as Level][e[1]]!)); MAIN_STATS.forEach(stat => { - Object.entries(character.training[stat]).forEach(option => { - config.training[stat][parseInt(option[0]) as TrainingLevel][option[1]]!.features?.forEach(this.apply.bind(this)); - }) + Object.entries(character.training[stat]).forEach(option => this.add(config.training[stat][parseInt(option[0]) as TrainingLevel][option[1]])) }); } load.remove(); @@ -372,7 +383,7 @@ export class CharacterBuilder { if(typeof buffer.list[i]!.value === 'string') { - if(this._buffer[buffer.list[i]!.value]!._dirty) + if(this._buffer[buffer.list[i]!.value as string]!._dirty) { //Put it back in queue since its dependencies haven't been resolved yet queue.push(property); @@ -381,9 +392,9 @@ export class CharacterBuilder else { if(buffer.list[i]?.operation === 'add') - sum += this._buffer[buffer.list[i]!.value]!.value; + sum += this._buffer[buffer.list[i]!.value as string]!.value; else if(buffer.list[i]?.operation === 'set') - sum = this._buffer[buffer.list[i]!.value]!.value; + sum = this._buffer[buffer.list[i]!.value as string]!.value; } } else @@ -478,31 +489,57 @@ export class CharacterBuilder { if(this._character.training[stat].hasOwnProperty(i)) { - config.training[stat][i as TrainingLevel][this._character.training[stat][i as TrainingLevel]!]?.features?.forEach(this.undo.bind(this)); + this.remove(config.training[stat][i as TrainingLevel][this._character.training[stat][i as TrainingLevel]!]); delete this._character.training[stat][i as TrainingLevel]; } } } else { - config.training[stat][level][this._character.training[stat][level]!]?.features?.forEach(this.undo.bind(this)); + this.remove(config.training[stat][level][this._character.training[stat][level]!]); this._character.training[stat][level] = choice; - config.training[stat][level][choice]?.features?.forEach(this.apply.bind(this)); + this.add(config.training[stat][level][choice]); } } else { this._character.training[stat][level] = choice; - config.training[stat][level][choice]?.features?.forEach(this.apply.bind(this)); + this.add(config.training[stat][level][choice]); } } - private add(feature?: Feature) + private add(feature?: string) { - feature?.effect.forEach(this.apply.bind(this)); + if(!feature) + return; + + config.features[feature]?.effect.forEach(this.apply.bind(this)); } - private remove(feature?: Feature) + private remove(feature?: string) { - feature?.effect.forEach(this.undo.bind(this)); + if(!feature) + return; + + config.features[feature]?.effect.forEach(this.undo.bind(this)); + } + private choose(id: string, choices: number[]) + { + const current = this._character.choices[id]; + const [ feature, effect ] = id.split('-'); + const option = config.features[feature!]!.effect.find(e => e.id === effect); + + if(option?.category === 'choice') + { + if(current !== undefined) + { + current.forEach(e => this.undo(option.options[e])); + } + if(choices.length > 0) + { + choices.forEach(e => this.apply(option.options[e])); + } + + this._character.choices[id] = choices; + } } private apply(feature?: FeatureItem) { @@ -511,30 +548,26 @@ export class CharacterBuilder switch(feature.category) { - case "feature": - this._result.features[feature.kind] ??= []; - - this._result.features[feature.kind]!.push(feature.text); - - return; case "list": - if(feature.action === 'add' && !this._result[feature.list].includes(feature.item)) - this._result[feature.list].push(feature.item); + if(feature.action === 'add' && !this._result.lists[feature.list]!.includes(feature.item)) + this._result.lists[feature.list]!.push(feature.item); else - this._result[feature.list] = this._result[feature.list].filter((e: string) => e !== feature.item); + this._result.lists[feature.list] = this._result.lists[feature.list]!.filter((e: string) => e !== feature.item); return; case "value": this._buffer[feature.property] ??= { list: [], value: 0, _dirty: true }; - this._buffer[feature.property]!.list.push({ operation: feature.operation, value: feature.value }); + this._buffer[feature.property]!.list.push({ operation: feature.operation, id: feature.id, value: feature.value }); this._buffer[feature.property]!._dirty = true; return; case "choice": - const choice = this._character.choices[feature.id]!; - choice.forEach(e => this.apply(feature.options[e]!)); + const choice = this._character.choices[feature.id]; + + if(choice) + choice.forEach(e => this.apply(feature.options[e]!)); return; default: @@ -548,29 +581,26 @@ export class CharacterBuilder switch(feature.category) { - case "feature": - this._result.features[feature.kind] = this._result.features[feature.kind]!.filter(e => e !== feature.text); - - return; case "list": - if(feature.action === 'remove' && !this._result[feature.list].includes(feature.item)) - this._result[feature.list].push(feature.item); + if(feature.action === 'remove' && !this._result.lists[feature.list]!.includes(feature.item)) + this._result.lists[feature.list]!.push(feature.item); else - this._result[feature.list] = this._result[feature.list].filter(e => e !== feature.item); + this._result.lists[feature.list] = this._result.lists[feature.list]!.filter(e => e !== feature.item); return; case "value": this._buffer[feature.property] ??= { list: [], value: 0, _dirty: true }; - this._buffer[feature.property]!.list.splice(this._buffer[feature.property]!.list.findIndex(e => e.operation === feature.operation && e.value === feature.value), 1); + this._buffer[feature.property]!.list.splice(this._buffer[feature.property]!.list.findIndex(e => e.id === feature.id), 1); this._buffer[feature.property]!._dirty = true; return; case "choice": - const choice = this._character.choices[feature.id]!; - choice.forEach(e => this.undo(feature.options[e]!)); - delete this._character.choices[feature.id]; + const choice = this._character.choices[feature.id]; + + if(choice) + choice.forEach(e => this.undo(feature.options[e]!)); return; default: @@ -599,14 +629,12 @@ class PeoplePicker implements BuilderTab { this._builder = builder; - this._nameInput = dom("input", { class: `mx-4 caret-light-50 dark:caret-dark-50 text-light-100 dark:text-dark-100 placeholder:text-light-50 dark:placeholder:text-dark-50 - bg-light-20 dark:bg-dark-20 appearance-none outline-none px-3 py-1 focus:shadow-raw transition-[box-shadow] focus:shadow-light-40 dark:focus:shadow-dark-40 - border border-light-35 dark:border-dark-35 hover:border-light-50 dark:hover:border-dark-50 data-[disabled]:bg-light-20 dark:data-[disabled]:bg-dark-20 data-[disabled]:border-light-20 dark:data-[disabled]:border-dark-20`, listeners: { - input: (e: Event) => { - this._builder.character.name = this._nameInput.value ?? ''; + this._nameInput = input('text', { + input: (value) => { + this._builder.character.name = value ?? ''; document.title = `d[any] - Edition de ${this._builder.character.name || 'nouveau personnage'}`; } - }}); + }); this._visibilityInput = dom("div", { class: `group mx-3 w-12 h-6 select-none transition-all border border-light-35 dark:border-dark-35 bg-light-20 dark:bg-dark-20 outline-none data-[state=checked]:bg-light-35 dark:data-[state=checked]:bg-dark-35 hover:border-light-50 dark:hover:border-dark-50 focus:shadow-raw focus:shadow-light-40 dark:focus:shadow-dark-40 data-[disabled]:bg-light-20 dark:data-[disabled]:bg-dark-20 data-[disabled]:border-light-20 dark:data-[disabled]:border-dark-20 relative py-[2px]`, attributes: { "data-state": "unckecked" }, listeners: { @@ -709,7 +737,7 @@ class LevelPicker implements BuilderTab div("flex flex-row gap-4 justify-center", level[1].map((option, j) => dom("div", { class: ["flex border border-light-50 dark:border-dark-50 px-4 py-2 w-[400px] relative", { 'hover:border-light-70 dark:hover:border-dark-70 cursor-pointer': (level[0] as any as Level) <= this._builder.character.level, '!border-accent-blue bg-accent-blue bg-opacity-20': this._builder.character.leveling[level[0] as any as Level] === j }], listeners: { click: e => { this._builder.toggleLevelOption(parseInt(level[0]) as Level, j); this.update(); - }}}, [ dom('span', { class: "text-wrap whitespace-pre", text: option.description }), option.effect.some(e => e.category === 'choice') ? div('absolute -bottom-px -right-px border border-light-50 dark:border-dark-50 bg-light-10 dark:bg-dark-10 hover:border-light-70 dark:hover:border-dark-70 flex p-1 justify-center items-center', [ icon('radix-icons:gear') ]) : undefined ]))) + }}}, [ dom('span', { class: "text-wrap whitespace-pre", text: config.features[option]!.description }), config.features[option]!.effect.some(e => e.category === 'choice') ? div('absolute -bottom-px -right-px border border-light-50 dark:border-dark-50 bg-light-10 dark:bg-dark-10 hover:border-light-70 dark:hover:border-dark-70 flex p-1 justify-center items-center', [ icon('radix-icons:gear') ]) : undefined ]))) ]); this._content = [ div("flex flex-1 gap-12 px-2 py-4 justify-center items-center", [ @@ -788,7 +816,7 @@ class TrainingPicker implements BuilderTab div("flex flex-row gap-4 justify-center", level[1].map((option, j) => dom("div", { class: ["border border-light-40 dark:border-dark-40 cursor-pointer px-2 py-1 w-[400px] hover:border-light-50 dark:hover:border-dark-50"], listeners: { click: e => { this._builder.toggleTrainingOption(stat, parseInt(level[0]) as TrainingLevel, j); this.update(); - }}}, [ markdownUtil(option.description.map(e => e.text).join('\n'), undefined, { tags: { a: fakeA } }) ]))) + }}}, [ markdownUtil(config.features[option]!.description, undefined, { tags: { a: fakeA } }) ]))) ]) } this._builder = builder; diff --git a/shared/content.util.ts b/shared/content.util.ts index 28b7abd..335e3ff 100644 --- a/shared/content.util.ts +++ b/shared/content.util.ts @@ -704,7 +704,7 @@ export class Editor { e.preventDefault(); - const close = contextmenu(e.clientX, e.clientY, [ + const { close } = contextmenu(e.clientX, e.clientY, [ dom('div', { class: 'hover:bg-light-35 dark:hover:bg-dark-35 px-2 gap-2 flex py-1 items-center cursor-pointer text-light-100 dark:text-dark-100', listeners: { click: (e) => { this.add("markdown", item); close() }} }, [icon('radix-icons:plus'), text('Ajouter')]), dom('div', { class: 'hover:bg-light-35 dark:hover:bg-dark-35 px-2 gap-2 flex py-1 items-center cursor-pointer text-light-100 dark:text-dark-100', listeners: { click: (e) => { this.rename(item); close() }} }, [icon('radix-icons:input'), text('Renommer')]), dom('div', { class: 'hover:bg-light-35 dark:hover:bg-dark-35 px-2 gap-2 flex py-1 items-center cursor-pointer text-light-red dark:text-dark-red', listeners: { click: (e) => { close(); confirm(`Confirmer la suppression de ${item.title}${item.children ? ' et de ses enfants' : ''} ?`).then(e => { if(e) this.remove(item)}) }} }, [icon('radix-icons:trash'), text('Supprimer')]), diff --git a/shared/dom.util.ts b/shared/dom.util.ts index feb4962..7749848 100644 --- a/shared/dom.util.ts +++ b/shared/dom.util.ts @@ -11,7 +11,7 @@ type Listener = | ((ev: HTMLElementEventMap export interface NodeProperties { - attributes?: Record; + attributes?: Record; text?: string; class?: Class; style?: Record | string; @@ -30,7 +30,7 @@ export function dom(tag: K, properties?: if(properties?.attributes) for(const [k, v] of Object.entries(properties.attributes)) - if(typeof v === 'string') element.setAttribute(k, v); + if(typeof v === 'string' || typeof v === 'number') element.setAttribute(k, v.toString(10)); else if(typeof v === 'boolean') element.toggleAttribute(k, v); if(properties?.text) @@ -113,20 +113,24 @@ export interface IconProperties style?: Record | string; class?: Class; } -const iconCache: Map = new Map(); +const iconCache: Map = new Map(); export function icon(name: string, properties?: IconProperties): HTMLElement { - const key = { ...properties, name }; + let el; - if(iconCache.has(key)) - return iconCache.get(key)!.cloneNode() as HTMLElement; + if(iconCache.has(name)) + el = iconCache.get(name)!.cloneNode() as HTMLElement; + else + { + el = document.createElement('iconify-icon'); - const el = document.createElement('iconify-icon'); + if(!iconExists(name)) + loadIcon(name); + + el.setAttribute('icon', name); - if(!iconExists(name)) - loadIcon(name); - - el.setAttribute('icon', name); + iconCache.set(name, el.cloneNode() as HTMLElement); + } properties?.mode && el.setAttribute('mode', properties?.mode.toString()); properties?.inline && el.toggleAttribute('inline', properties?.inline); @@ -150,7 +154,6 @@ export function icon(name: string, properties?: IconProperties): HTMLElement for(const [k, v] of Object.entries(properties.style)) if(v !== undefined) el.attributeStyleMap.set(k, v); } - iconCache.set(key, el.cloneNode() as HTMLElement); return el; } diff --git a/shared/editor.util.ts b/shared/editor.util.ts index 7ad3481..8d4df59 100644 --- a/shared/editor.util.ts +++ b/shared/editor.util.ts @@ -9,13 +9,12 @@ import { markdown, markdownLanguage } from '@codemirror/lang-markdown'; import { IterMode, Tree } from '@lezer/common'; import { tags } from '@lezer/highlight'; import { dom } from './dom.util'; + const External = Annotation.define(); const Hidden = Decoration.mark({ class: 'hidden' }); const Bullet = Decoration.mark({ class: '*:hidden before:absolute before:top-2 before:left-0 before:inline-block before:w-2 before:h-2 before:rounded before:bg-light-40 dark:before:bg-dark-40 relative ps-4' }); const Blockquote = Decoration.line({ class: '*:hidden before:block !ps-4 relative before:absolute before:top-0 before:bottom-0 before:left-0 before:w-1 before:bg-none before:bg-light-30 dark:before:bg-dark-30' }); -const TagTag = tags.special(tags.content); - const intersects = (a: { from: number; to: number; @@ -36,7 +35,6 @@ const highlight = HighlightStyle.define([ { tag: tags.strong, fontWeight: "bold" }, { tag: tags.strikethrough, textDecoration: "line-through" }, { tag: tags.keyword, color: "#708" }, - { tag: TagTag, class: 'cursor-default bg-accent-blue bg-opacity-10 hover:bg-opacity-20 text-accent-blue text-sm px-1 ms-1 pb-0.5 rounded-full rounded-se-none border border-accent-blue border-opacity-30' } ]); class Decorator @@ -111,29 +109,7 @@ export class MarkdownEditor this.view = new EditorView({ extensions: [ markdown({ - base: markdownLanguage, - extensions: { - defineNodes: [ - { name: "Tag", style: TagTag }, - { name: "TagMark", style: tags.processingInstruction } - ], - parseInline: [{ - name: "Tag", - parse(cx, next, pos) { - if (next != 35 || cx.char(pos + 1) == 35) return -1; - let elts = [cx.elt("TagMark", pos, pos + 1)]; - for (let i = pos + 1; i < cx.end; i++) { - let next = cx.char(i); - if (next == 35) - return cx.addElement(cx.elt("Tag", pos, i + 1, elts.concat(cx.elt("TagMark", i, i + 1)))); - if (next == 92) - elts.push(cx.elt("Escape", i, i++ + 2)); - if (next == 32 || next == 9 || next == 10 || next == 13) break; - } - return -1 - } - }], - } + base: markdownLanguage }), history(), search(), diff --git a/shared/feature.util.ts b/shared/feature.util.ts new file mode 100644 index 0000000..8713c23 --- /dev/null +++ b/shared/feature.util.ts @@ -0,0 +1,318 @@ +import type { Ability, CharacterConfig, Feature, FeatureEffect, FeatureItem, MainStat, TrainingOption } from "~/types/character"; +import { div, dom, icon, text, type NodeChildren } from "./dom.util"; +import { MarkdownEditor } from "./editor.util"; +import { button, combobox, fakeA, input, numberpicker, select } from "./proses"; +import { popper, tooltip } from "./floating.util"; +import { mainStatShortTexts, mainStatTexts } from "./character.util"; +import config from "#shared/character-config.json"; +import { getID, ID_SIZE } from "./general.util"; +import renderMarkdown from "./markdown.util"; + +export class FeatureEditor +{ + private _container: HTMLDivElement; + + private _success?: Function; + private _failure?: Function; + private _feature?: Feature; + + private _idInput: HTMLInputElement; + private _table: HTMLDivElement; + + constructor() + { + this._idInput = dom("input", { attributes: { 'disabled': true }, class: `mx-4 text-light-70 dark:text-dark-70 appearance-none outline-none px-3 py-1 focus:shadow-raw transition-[box-shadow] border bg-light-25 dark:bg-dark-25 border-light-30 dark:border-dark-30` }); + this._table = div('grid grid-cols-2 gap-4 px-2'); + this._container = dom('div', { attributes: { 'data-state': 'inactive' }, class: 'border-light-35 dark:border-dark-35 bg-light-10 dark:bg-dark-10 border-l absolute top-0 bottom-0 right-0 w-[10%] data-[state=active]:w-1/2 flex flex-col gap-2 text-light-100 dark:text-dark-100 p-8 transition-[width] transition-delay-[150ms]' }, [ + div('flex flex-row justify-between items-center', [ + tooltip(button(icon('radix-icons:check', { width: 20, height: 20 }), () => { + this._success!(this._feature); + MarkdownEditor.singleton.onChange = undefined; + }, 'p-1'), 'Valider', 'left'), + dom('label', { class: 'flex justify-center items-center my-2' }, [ + dom('span', { class: 'pb-1 md:p-0', text: "ID" }), + this._idInput + ]), + tooltip(button(icon('radix-icons:cross-1', { width: 20, height: 20 }), () => { + this._failure!(this._feature); + MarkdownEditor.singleton.onChange = undefined; + }, 'p-1'), 'Annuler', 'left'), + ]), + dom('span', { class: 'flex flex-col justify-start items-start my-2 gap-4' }, [ + div('flex w-full items-center justify-between', [ + dom('span', { class: 'pb-1 md:p-0', text: "Description" }), + tooltip(button(icon('radix-icons:clipboard', { width: 20, height: 20 }), () => { + MarkdownEditor.singleton.content = this._feature?.effect.map(e => textFromEffect(e)).join('\n') ?? this._feature?.description ?? MarkdownEditor.singleton.content; + }, 'p-1'), 'Description automatique', 'left'), + ]), + div('p-1 border border-light-40 dark:border-dark-40 w-full bg-light-25 dark:bg-dark-25 min-h-48 max-h-[32rem]', [ MarkdownEditor.singleton.dom ]), + ]), + div('flex flex-col gap-2 w-full', [ + div('flex flex-row justify-between', [ + dom('h3', { class: 'text-lg font-bold', text: 'Effets' }), + tooltip(button(icon('radix-icons:plus', { width: 20, height: 20 }), () => { + this._table.appendChild(this._edit({ id: getID(ID_SIZE) })); + }, 'p-1'), 'Ajouter', 'left'), + ]), + this._table, + ]) + ]); + } + edit(feature: Feature): Promise + { + return new Promise((success, failure) => { + this._success = success; + this._failure = failure; + + this._feature = JSON.parse(JSON.stringify(feature)) as Feature; + + this._table.replaceChildren(...this._feature.effect.map(this._renderEffect.bind(this))); + this._idInput.value = this._feature.id; + MarkdownEditor.singleton.onChange = (e) => this._feature!.description = e; + MarkdownEditor.singleton.content = this._feature.description; + }); + } + private _renderEffect(effect: FeatureItem): HTMLDivElement + { + const content = div('border border-light-30 dark:border-dark-30 col-span-1', [ div('flex justify-between items-stretch', [ + div('px-4 flex items-center h-full', [ renderMarkdown(textFromEffect(effect), undefined, { tags: { a: fakeA } }) ]), + div('flex', [ tooltip(button(icon('radix-icons:pencil-1'), () => { + this._table.replaceChild(this._edit(effect), content); + }, 'p-2 -m-px border border-light-35 dark:border-dark-35 hover:border-light-50 dark:hover:border-dark-50'), "Modifier", "bottom"), tooltip(button(icon('radix-icons:trash'), () => { + this._feature!.effect = this._feature!.effect.filter(e => e.id !== effect.id); + content.remove(); + }, 'p-2 -m-px border border-light-35 dark:border-dark-35 hover:border-light-50 dark:hover:border-dark-50'), "Supprimer", "bottom") ]) + ]) ]); + return content; + } + private _edit(effect: FeatureItem): HTMLDivElement + { + const match = (effect: FeatureItem): Partial | undefined => { + switch(effect.category) + { + case 'value': + return choices.find(e => e.value.category === 'value' && e.value.property === effect.property)?.value; + /* case 'choice': + return choices.find(e => e.value.category === 'choice' && e.value. === effect.property); */ + case 'list': + return choices.find(e => e.value.category === 'list' && e.value.list === effect.list)?.value; + } + }; + const approve = () => { + const idx = this._feature!.effect.findIndex(e => e.id === buffer.id); + + if(idx === -1) + this._feature!.effect.push(buffer); + else + this._feature!.effect[idx] = buffer; + + this._table.replaceChild(this._renderEffect(buffer), content); + }, reject = () => { + const idx = this._feature!.effect.findIndex(e => e.id === buffer.id); + + if(idx === -1) + content.remove(); + else + this._table.replaceChild(this._renderEffect(effect), content); + } + let buffer = JSON.parse(JSON.stringify(effect)) as FeatureItem; + + const redraw = () => { + let top: NodeChildren = [], bottom: NodeChildren = []; + switch(buffer.category) + { + case 'value': + const summaryText = text(textFromEffect(buffer)); + top = [ + select([ { text: '+', value: 'add' }, ['speed', 'capacity'].includes(buffer.property) ? { text: '=', value: 'set' } : undefined ], { defaultValue: buffer.operation, change: (value) => { (buffer as Extract).operation = value as 'add' | 'set'; summaryText.textContent = textFromEffect(buffer); }, class: { container: 'bg-light-25 dark:bg-dark-25 !-m-px h-[36px]' } }), + typeof buffer.value === 'number' ? numberpicker({ defaultValue: buffer.value, input: (value) => { (buffer as Extract).value = value; summaryText.textContent = textFromEffect(buffer); }, class: 'bg-light-25 dark:bg-dark-25 !-m-px h-[36px]' }) : select<`modifier/${MainStat}` | false>([...Object.entries(mainStatShortTexts).map(e => ({ text: 'Mod. de ' + e[1], value: `modifier/${e[0]}` as `modifier/${MainStat}` })), buffer.operation === 'add' ? undefined : { text: 'Interdit', value: false }], { class: { container: 'w-[160px] bg-light-25 dark:bg-dark-25 !-m-px h-[36px]' }, defaultValue: buffer.value, change: (value) => { (buffer as Extract).value = value; summaryText.textContent = textFromEffect(buffer); } }), + button(icon('radix-icons:update'), () => { + (buffer as Extract).value = (typeof (buffer as Extract).value === 'number' ? '' as any as false : 0); + const element = redraw(); + this._table.replaceChild(element, content); + content = element; + summaryText.textContent = textFromEffect(buffer); + }, 'px-2 -m-px border border-light-35 dark:border-dark-35 hover:border-light-50 dark:hover:border-dark-50'), + ]; + bottom = [summaryText]; + break; + case 'list': + if(buffer.action === 'add') + { + if(buffer.list === 'spells') + { + bottom = [ combobox(config.spells.map(e => ({ text: e.name, value: e.id })), { defaultValue: buffer.item, change: (value) => (buffer as Extract).item = value, class: { container: 'bg-light-25 dark:bg-dark-25 !-m-px h-[36px]' } }) ]; + } + else + { + const editor = new MarkdownEditor(); + editor.content = buffer.item; + editor.onChange = (item) => (buffer as Extract).item = item; + + bottom = [ div('px-4 py-1', [ editor.dom ]) ]; + } + } + top = [ select([ { text: 'Ajouter', value: 'add' }, { text: 'Supprimer', value: 'remove' } ], { defaultValue: buffer.action, change: (value) => (buffer as Extract).action = value as 'add' | 'remove', class: { container: 'bg-light-25 dark:bg-dark-25 !-m-px h-[36px] w-32' } }) ]; + break; + default: break; + } + return div('border border-light-30 dark:border-dark-30 col-span-1 row-span-2', [ div('flex justify-between items-stretch', [ + div('flex flex-row', [ + combobox(choices, { defaultValue: match(buffer), class: { container: 'bg-light-25 dark:bg-dark-25 w-[250px] -m-px h-[36px]' }, change: (e) => { + buffer = { id: buffer.id, ...e } as FeatureItem; + const element = redraw(); + this._table.replaceChild(element, content); + content = element; + } }), + ...top, + ]), + div('flex', [ tooltip(button(icon('radix-icons:check'), approve, 'p-2 -m-px border border-light-35 dark:border-dark-35 hover:border-light-50 dark:hover:border-dark-50'), "Valider", "bottom"), tooltip(button(icon('radix-icons:cross-1'), reject, 'p-2 -m-px border border-light-35 dark:border-dark-35 hover:border-light-50 dark:hover:border-dark-50'), "Annuler", "bottom") ]) + ]), div('flex border-t border-light-35 dark:border-dark-35 max-h-[300px] min-h-[36px] overflow-auto', bottom) ]); + } + + let content = redraw(); + return content; + } + get container() + { + return this._container; + } +} + +const choices: Array<{ text: string, value: Partial }> = [ + { text: 'PV max', value: { category: 'value', property: 'health', operation: 'add', value: 0 }, }, + { text: 'Mana max', value: { category: 'value', property: 'mana', operation: 'add', value: 0 }, }, + { text: 'Nombre de sorts maitrisés', value: { category: 'value', property: 'spellslots', operation: 'add', value: 0 }, }, + { text: 'Nombre d\'œuvres maitrisés', value: { category: 'value', property: 'artslots', operation: 'add', value: 0 }, }, + { text: 'Vitesse de course', value: { category: 'value', property: 'speed', operation: 'add', value: 0 }, }, + { text: 'Poids max', value: { category: 'value', property: 'capacity', operation: 'add', value: 0 }, }, + { text: 'Initiative', value: { category: 'value', property: 'initiative', operation: 'add', value: 0 }, }, + { text: 'Points d\'entrainement', value: { category: 'value', property: 'training', operation: 'add', value: 0 }, }, + { text: 'Points de compétence', value: { category: 'value', property: 'ability', operation: 'add', value: 0 }, }, + { text: 'Sort bonus', value: { category: 'list', list: 'spells', action: 'add' }, }, + { text: 'Action', value: { category: 'list', list: 'action', action: 'add' }, }, + { text: 'Réaction', value: { category: 'list', list: 'reaction', action: 'add' }, }, + { text: 'Action libre', value: { category: 'list', list: 'freeaction', action: 'add' }, }, + { text: 'Passif', value: { category: 'list', list: 'passive', action: 'add' }, }, + { text: 'Choix', value: { category: 'choice', options: [] }, }, +]; +function textFromEffect(effect: FeatureItem) +{ + if(effect.category === 'value') + { + switch(effect.property) + { + case 'health': + return effect.operation === 'add' ? textFromValue(effect.value, { prefix: { positive: '+', text: '+Mod. de ' }, suffix: { truely: ' PV max.' } }) : textFromValue(effect.value, { prefix: { truely: 'PV max égal à ' }, suffix: { truely: '.' }, falsely: 'Opération interdite (PV = interdit).' }); + case 'mana': + return effect.operation === 'add' ? textFromValue(effect.value, { prefix: { positive: '+', text: '+Mod. de ' }, suffix: { truely: ' mana max.' } }) : textFromValue(effect.value, { prefix: { truely: 'Mana max égal à ' }, suffix: { truely: '.' }, falsely: 'Opération interdite (Mana = interdit).' }); + case 'spellslots': + return effect.operation === 'add' ? textFromValue(effect.value, { prefix: { positive: '+', text: '+Mod. de ' }, suffix: { truely: ' sort(s) maitrisé(s).' } }) : textFromValue(effect.value, { prefix: { truely: 'Sorts maitrisés fixé à ' }, suffix: { truely: '.' }, falsely: 'Opération interdite (Sorts = interdit).' }); + case 'artslots': + return effect.operation === 'add' ? textFromValue(effect.value, { prefix: { positive: '+', text: '+Mod. de ' }, suffix: { truely: ' œuvre(s) maitrisé(s).' } }) : textFromValue(effect.value, { prefix: { truely: 'Œuvres maitrisés fixé à ' }, suffix: { truely: '.' }, falsely: 'Opération interdite (Œuvres = interdit).' }); + case 'speed': + return effect.operation === 'add' ? textFromValue(effect.value, { prefix: { positive: '+', text: '+Mod. de ' }, suffix: { truely: ' case(s) de course.' }, falsely: '+0 cases de course' }) : textFromValue(effect.value, { prefix: { truely: 'Vitesse de course de ' }, suffix: { truely: ' case(s).' }, falsely: 'Déplacement impossible.' }); + case 'capacity': + return effect.operation === 'add' ? textFromValue(effect.value, { prefix: { positive: '+', text: '+Mod. de ' }, suffix: { truely: ' unité(s) d\'quipement.' } }) : textFromValue(effect.value, { prefix: { truely: 'Capacité d\'equipement fixé à ' }, suffix: { truely: ' unité(s).' }, falsely: 'Impossible de posséder du materiel.' }); + case 'initiative': + return effect.operation === 'add' ? textFromValue(effect.value, { prefix: { positive: '+', text: '+Mod. de ' }, suffix: { truely: ' à l\'itiniative.' } }) : textFromValue(effect.value, { prefix: { truely: 'Initiative fixé à ' }, suffix: { truely: '.' }, falsely: 'Opération interdite (Initiative = interdit).' }); + case 'training': + return effect.operation === 'add' ? textFromValue(effect.value, { prefix: { positive: '+', text: '+Mod. de ' }, suffix: { truely: ' point(s) d\'entrainement.' } }) : `Opération interdite (Entrainement fixe).`; + case 'ability': + return effect.operation === 'add' ? textFromValue(effect.value, { prefix: { positive: '+', text: '+Mod. de ' }, suffix: { truely: ' point(s) de compétence.' } }) : `Opération interdite (Compétences fixe).`; + default: break; + } + + const splited = effect.property.split('/'); + switch(splited[0]) + { + case 'spellranks': + return ''; + case 'defense': + switch(splited[1]) + { + case 'hardcap': + return effect.operation === 'add' ? textFromValue(effect.value, { prefix: { truely: 'Défense max ', positive: '+', text: '+Mod. de ' }, suffix: { truely: '.' } }) : textFromValue(effect.value, { prefix: { truely: 'Défense max fixé à ' }, suffix: { truely: '.' }, falsely: 'Opération interdite (Hardcap = interdit).' }); + case 'static': + return effect.operation === 'add' ? textFromValue(effect.value, { prefix: { truely: 'Base de défense ', positive: '+', text: '+Mod. de ' }, suffix: { truely: '.' } }) : textFromValue(effect.value, { prefix: { truely: 'Base de défense fixé à ' }, suffix: { truely: '.' }, falsely: 'Opération interdite (Static = interdit).' }); + case 'activeparry': + return effect.operation === 'add' ? textFromValue(effect.value, { prefix: { truely: 'Parade active ', positive: '+', text: '+Mod. de ' }, suffix: { truely: '.' } }) : textFromValue(effect.value, { prefix: { truely: 'Parade active fixée à ' }, suffix: { truely: '.' }, falsely: 'Opération interdite (Active parry = interdit).' }); + case 'activedodge': + return effect.operation === 'add' ? textFromValue(effect.value, { prefix: { truely: 'Esquive active ', positive: '+', text: '+Mod. de ' }, suffix: { truely: '.' } }) : textFromValue(effect.value, { prefix: { truely: 'Esquive active fixée à ' }, suffix: { truely: '.' }, falsely: 'Opération interdite (Active dodge = interdit).' }); + case 'passiveparry': + return effect.operation === 'add' ? textFromValue(effect.value, { prefix: { truely: 'Parade passive ', positive: '+', text: '+Mod. de ' }, suffix: { truely: '.' } }) : textFromValue(effect.value, { prefix: { truely: 'Parade passive fixée à ' }, suffix: { truely: '.' }, falsely: 'Opération interdite (Passive parry = interdit).' }); + case 'passivedodge': + return effect.operation === 'add' ? textFromValue(effect.value, { prefix: { truely: 'Esquive passive ', positive: '+', text: '+Mod. de ' }, suffix: { truely: '.' } }) : textFromValue(effect.value, { prefix: { truely: 'Esquive passive fixée à ' }, suffix: { truely: '.' }, falsely: 'Opération interdite (Passive dodge = interdit).' }); + default: return 'Défense inconnue.'; + } + case 'mastery': + switch(splited[1]) + { + case 'strength': + return effect.operation === 'add' ? textFromValue(effect.value, { prefix: { truely: 'Maitrise des armes (for.) ', positive: '+', text: '+Mod. de ' }, suffix: { truely: '.' } }) : textFromValue(effect.value, { prefix: { truely: 'Maitrise des armes (for.) fixée à ' }, suffix: { truely: '.' }, falsely: 'Opération interdite (Maitrise for = interdit).' }); + case 'dexterity': + return effect.operation === 'add' ? textFromValue(effect.value, { prefix: { truely: 'Maitrise des armes (dex.) ', positive: '+', text: '+Mod. de ' }, suffix: { truely: '.' } }) : textFromValue(effect.value, { prefix: { truely: 'Maitrise des armes (dex.) fixée à ' }, suffix: { truely: '.' }, falsely: 'Opération interdite (Maitrise dex = interdit).' }); + case 'shield': + return effect.operation === 'add' ? textFromValue(effect.value, { prefix: { truely: 'Maitrise des boucliers ', positive: '+', text: '+Mod. de ' }, suffix: { truely: '.' } }) : textFromValue(effect.value, { prefix: { truely: 'Maitrise des boucliers fixée à ' }, suffix: { truely: '.' }, falsely: 'Opération interdite (Maitrise boucliers = interdit).' }); + case 'armor': + return effect.operation === 'add' ? textFromValue(effect.value, { prefix: { truely: 'Maitrise des armure ', positive: '+', text: '+Mod. de ' }, suffix: { truely: '.' } }) : textFromValue(effect.value, { prefix: { truely: 'Maitrise des armure fixée à ' }, suffix: { truely: '.' }, falsely: 'Opération interdite (Maitrise armure = interdit).' }); + case 'multiattack': + return effect.operation === 'add' ? textFromValue(effect.value, { prefix: { truely: 'Attaque multiple ', positive: '+', text: '+Mod. de ' }, suffix: { truely: '.' } }) : textFromValue(effect.value, { prefix: { truely: 'Attaque multiple fixée à ' }, suffix: { truely: '.' }, falsely: 'Opération interdite (Attaque multiple = interdit).' }); + case 'magicpower': + return effect.operation === 'add' ? textFromValue(effect.value, { prefix: { truely: 'Arbre de magie (Puissance) ', positive: '+', text: '+Mod. de ' }, suffix: { truely: '.' } }) : textFromValue(effect.value, { prefix: { truely: 'Arbre de magie (Puissance) fixée à ' }, suffix: { truely: '.' }, falsely: 'Opération interdite (Maitrise puissance = interdit).' }); + case 'magicspeed': + return effect.operation === 'add' ? textFromValue(effect.value, { prefix: { truely: 'Arbre de magie (Rapidité) ', positive: '+', text: '+Mod. de ' }, suffix: { truely: '.' } }) : textFromValue(effect.value, { prefix: { truely: 'Arbre de magie (Rapidité) fixée à ' }, suffix: { truely: '.' }, falsely: 'Opération interdite (Maitrise rapidité = interdit).' }); + case 'magicelement': + return effect.operation === 'add' ? textFromValue(effect.value, { prefix: { truely: 'Arbre de magie (Elements) ', positive: '+', text: '+Mod. de ' }, suffix: { truely: '.' } }) : textFromValue(effect.value, { prefix: { truely: 'Arbre de magie (Elements) fixée à ' }, suffix: { truely: '.' }, falsely: 'Opération interdite (Maitrise elements = interdit).' }); + case 'magicinstinct': + return effect.operation === 'add' ? textFromValue(effect.value, { prefix: { truely: 'Arbre de magie (Instinct) ', positive: '+', text: '+Mod. de ' }, suffix: { truely: '.' } }) : textFromValue(effect.value, { prefix: { truely: 'Arbre de magie (Instinct) fixée à ' }, suffix: { truely: '.' }, falsely: 'Opération interdite (Maitrise instinct = interdit).' }); + default: return 'Maitrise inconnue.'; + } + /* case 'resistance': + return splited[1] ? config.resistances[splited[1] as string].name : 'résistance inconnue'; */ + case 'abilities': + return effect.operation === 'add' ? textFromValue(effect.value, { prefix: { truely: `${config.abilities[splited[1] as Ability].name} `, positive: '+', text: '+Mod. de ' }, suffix: { truely: '.' } }) : textFromValue(effect.value, { prefix: { truely: `${config.abilities[splited[1] as Ability].name} fixé à ` }, suffix: { truely: '.' }, falsely: `Echec automatique de ${`${config.abilities[splited[1] as Ability].name}.`}` }); + case 'modifier': + return effect.operation === 'add' ? textFromValue(effect.value, { prefix: { positive: '+' }, suffix: { truely: ` au mod. de ${mainStatTexts[splited[1] as MainStat]}.` } }) : textFromValue(effect.value, { prefix: { truely: `Mod. de ${mainStatTexts[splited[1] as MainStat]} fixé à ` }, suffix: { truely: '.' }, falsely: `Opération interdite (Mod. de ${mainStatShortTexts[splited[1] as MainStat]} = interdit).` }); + default: break; + } + + return `Inconnu ("${effect.property}")`; + } + else if(effect.category === 'list') + { + switch(effect.list) + { + case 'action': + case 'reaction': + case 'freeaction': + case 'passive': + return effect.action === 'add' ? effect.item : 'Suppression d\'effet.'; + case 'spells': + return effect.action === 'add' ? `Maitrise du sort "${config.spells.find(e => e.id === effect.item) ?? 'Sort inconnu'}".` : `Perte de maitrise du sort "${config.spells.find(e => e.id === effect.item) ?? 'Sort inconnu'}".`; + } + } + else if(effect.category === 'choice') + { + return `Choix (WIP)`; + } + else + { + return `Inconnu`; + } +} +function textFromValue(value: `modifier/${MainStat}` | number | false, settings?: { + prefix?: { text?: string, positive?: string, negative?: string, truely?: string }, + suffix?: { text?: string, positive?: string, negative?: string, truely?: string }, + falsely?: string +}) +{ + if(typeof value === 'string') + return `${settings?.prefix?.truely?.replaceAll('(s)', 's') ?? ''}${settings?.prefix?.text?.replaceAll('(s)', 's') ?? ''}${mainStatShortTexts[value.split('/')[1] as MainStat] ?? 'inconnu'}${settings?.suffix?.text?.replaceAll('(s)', 's') ?? ''}${settings?.suffix?.truely?.replaceAll('(s)', 's') ?? ''}`; + else if(value === false) + return settings?.falsely ?? '0'; + else if(value >= 0) + return `${settings?.prefix?.truely?.replaceAll('(s)', value > 1 ? 's' : '') ?? ''}${settings?.prefix?.positive?.replaceAll('(s)', value > 1 ? 's' : '') ?? ''}${value.toString(10)}${settings?.suffix?.positive?.replaceAll('(s)', value > 1 ? 's' : '') ?? ''}${settings?.suffix?.truely?.replaceAll('(s)', value > 1 ? 's' : '') ?? ''}`; + else + return `${settings?.prefix?.truely?.replaceAll('(s)', value < -1 ? 's' : '') ?? ''}${settings?.prefix?.negative?.replaceAll('(s)', value < -1 ? 's' : '') ?? ''}${value.toString(10)}${settings?.suffix?.negative?.replaceAll('(s)', value < -1 ? 's' : '') ?? ''}${settings?.suffix?.truely?.replaceAll('(s)', value < -1 ? 's' : '') ?? ''}`; +} diff --git a/shared/floating.util.ts b/shared/floating.util.ts index c009ea6..8531c74 100644 --- a/shared/floating.util.ts +++ b/shared/floating.util.ts @@ -8,12 +8,13 @@ export interface ContextProperties offset?: number; arrow?: boolean; class?: Class; + style?: Record | string; + viewport?: HTMLElement; } export interface PopperProperties extends ContextProperties { content?: NodeChildren; delay?: number; - viewport?: HTMLElement; onShow?: (element: HTMLDivElement) => boolean | void; onHide?: (element: HTMLDivElement) => boolean | void; @@ -36,7 +37,7 @@ export function popper(container: HTMLElement, properties?: PopperProperties): H { let shown = false, timeout: Timer; const arrow = svg('svg', { class: 'absolute fill-light-35 dark:fill-dark-35', attributes: { width: "10", height: "7", viewBox: "0 0 30 10" } }, [svg('polygon', { attributes: { points: "0,0 30,0 15,10" } })]); - const content = dom('div', { class: ['fixed hidden', properties?.class], attributes: { 'data-state': 'closed' } }, [...(properties?.content ?? []), arrow]); + const content = dom('div', { class: ['fixed hidden', properties?.class], style: properties?.style, attributes: { 'data-state': 'closed' } }, [...(properties?.content ?? []), arrow]); const rect = properties?.viewport?.getBoundingClientRect() ?? 'viewport'; function update() @@ -151,7 +152,7 @@ export function popper(container: HTMLElement, properties?: PopperProperties): H return container; } -export function contextmenu(x: number, y: number, content: NodeChildren, properties?: ContextProperties): () => void +export function contextmenu(x: number, y: number, content: NodeChildren, properties?: ContextProperties & { blur?: () => void }) { const virtual = { getBoundingClientRect() { @@ -167,9 +168,10 @@ export function contextmenu(x: number, y: number, content: NodeChildren, propert }; }, }; + const rect = properties?.viewport?.getBoundingClientRect() ?? 'viewport'; const arrow = svg('svg', { class: 'absolute fill-light-35 dark:fill-dark-35', attributes: { width: "10", height: "7", viewBox: "0 0 30 10" } }, [svg('polygon', { attributes: { points: "0,0 30,0 15,10" } })]); - const container = dom('div', { class: ['fixed bg-light-20 dark:bg-dark-20 border border-light-35 dark:border-dark-35 z-50', properties?.class] }, content); + const container = dom('div', { class: ['fixed bg-light-20 dark:bg-dark-20 border border-light-35 dark:border-dark-35 z-50', properties?.class], style: properties?.style }, content); function update() { @@ -178,9 +180,10 @@ export function contextmenu(x: number, y: number, content: NodeChildren, propert strategy: 'fixed', middleware: [ properties?.offset ? FloatingUI.offset(properties?.offset) : undefined, - FloatingUI.flip(), - properties?.offset ? FloatingUI.shift({ padding: properties?.offset }) : undefined, + FloatingUI.shift({ rootBoundary: rect }), + properties?.offset ? FloatingUI.shift({ padding: properties?.offset, rootBoundary: rect }) : undefined, properties?.offset && properties?.arrow ? FloatingUI.arrow({ element: arrow, padding: 8 }) : undefined, + FloatingUI.hide({ rootBoundary: rect }), ] }).then(({ x, y, placement, middlewareData }) => { Object.assign(container.style, { @@ -242,16 +245,27 @@ export function contextmenu(x: number, y: number, content: NodeChildren, propert container.remove(); stop(); + properties?.blur && properties.blur(); } - return close; + return { close, container, content }; +} +export function tooltip(container: HTMLElement, txt: string, placement: FloatingUI.Placement, delay?: number): HTMLElement +{ + return popper(container, { + arrow: true, + offset: 8, + delay: delay, + content: [ text(txt) ], + placement: placement, + class: "fixed hidden TooltipContent border border-light-30 dark:border-dark-30 px-2 py-1 bg-light-10 dark:bg-dark-10 text-light-70 dark:text-dark-70 z-50" + }); } -export function modal(content: NodeChildren, properties?: ModalProperties) +export function fullblocker(content: NodeChildren, properties?: ModalProperties) { const _modalBlocker = dom('div', { class: [' absolute top-0 left-0 bottom-0 right-0 z-0', { 'bg-light-0 dark:bg-dark-0 opacity-70': properties?.priority ?? false }], listeners: { click: properties?.closeWhenOutside ? (() => _modal.remove()) : undefined } }); - const _closer = properties?.priority ? undefined : dom('span', { class: 'absolute top-4 right-4', text: '×', listeners: { click: () => _modal.remove() } }); - const _modal = dom('div', { class: 'fixed flex justify-center items-center top-0 left-0 bottom-0 right-0 inset-0 z-40' }, [ _modalBlocker, dom('div', { class: 'max-h-[85vh] max-w-[450px] bg-light-10 dark:bg-dark-10 border border-light-30 dark:border-dark-30 p-6 text-light-100 dark:text-dark-100 z-10 relative' }, content)]) + const _modal = dom('div', { class: 'fixed flex justify-center items-center top-0 left-0 bottom-0 right-0 inset-0 z-40' }, [ _modalBlocker, ...content]); teleport.appendChild(_modal); @@ -259,6 +273,10 @@ export function modal(content: NodeChildren, properties?: ModalProperties) close: () => _modal.remove(), } } +export function modal(content: NodeChildren, properties?: ModalProperties) +{ + return fullblocker([ dom('div', { class: 'max-h-[85vh] max-w-[450px] bg-light-10 dark:bg-dark-10 border border-light-30 dark:border-dark-30 p-6 text-light-100 dark:text-dark-100 z-10 relative' }, content) ], properties); +} export function confirm(title: string): Promise { diff --git a/shared/general.util.ts b/shared/general.util.ts index 332c729..a801c47 100644 --- a/shared/general.util.ts +++ b/shared/general.util.ts @@ -7,7 +7,7 @@ export function unifySlug(slug: string | string[]): string export function getID(length: number) { for (var id = [], i = 0; i < length; i++) - id.push((16 * Math.random() | 0).toString(16)); + id.push((36 * Math.random() | 0).toString(36)); return id.join(""); } export function group< diff --git a/shared/proses.ts b/shared/proses.ts index 87644fb..2a46074 100644 --- a/shared/proses.ts +++ b/shared/proses.ts @@ -1,11 +1,11 @@ -import { dom, icon, type NodeChildren, type Node, type NodeProperties, type Class, mergeClasses } from "#shared/dom.util"; +import { dom, icon, type NodeChildren, type Node, type NodeProperties, type Class, mergeClasses, text, div } from "#shared/dom.util"; import { parseURL } from 'ufo'; import render from "#shared/markdown.util"; -import { popper } from "#shared/floating.util"; +import { contextmenu, popper } from "#shared/floating.util"; import { Canvas } from "#shared/canvas.util"; import { Content, iconByType, type LocalContent } from "#shared/content.util"; import type { RouteLocationAsRelativeTyped, RouteMapGeneric } from "vue-router"; -import { unifySlug } from "#shared/general.util"; +import { clamp, unifySlug } from "#shared/general.util"; export type CustomProse = (properties: any, children: NodeChildren) => Node; export type Prose = { class: string } | { custom: CustomProse }; @@ -230,4 +230,194 @@ export function button(content: Node, onClick?: () => void, cls?: Class) return dom('button', { class: [`text-light-100 dark:text-dark-100 font-semibold hover:bg-light-30 dark:hover:bg-dark-30 inline-flex items-center justify-center bg-light-25 dark:bg-dark-25 leading-none outline-none border border-light-25 dark:border-dark-25 hover:border-light-30 dark:hover:border-dark-30 active:border-light-40 dark:active:border-dark-40 focus:shadow-raw transition-[box-shadow] focus:shadow-light-40 dark:focus:shadow-dark-40 disabled:bg-light-10 dark:disabled:bg-dark-10 disabled:border-none disabled:text-light-50 dark:disabled:text-dark-50`, cls], listeners: { click: onClick } }, [ content ]); +} +export function select>(options: Array | Array<{ text: string, value: T } | undefined>, settings?: { defaultValue?: T, change?: (value: T) => void, class?: { container?: Class, popup?: Class, option?: Class }, disabled?: boolean }): HTMLElement +{ + const textFromValue = (value?: T): string => { + if(!value) + return ''; + const found = options.find(e => (e as { value: string } | undefined)?.value === value || e === value); + if(!found) + return ''; + return (found as { text: string } | undefined)?.text ?? found as string; + }; + let close: Function | undefined; + + let disabled = settings?.disabled ?? false; + const textValue = text(textFromValue(settings?.defaultValue)); + const optionElements = options.map(e => { + if(e === undefined) + return; + + return dom('div', { listeners: { click: () => { + let text, value; + if(typeof e === 'string') + { + text = value = e; + } + else + { + text = e.text; + value = e.value; + } + + textValue.textContent = text; + settings?.change && settings?.change(value); + close && close(); + } }, class: ['hover:bg-light-30 dark:hover:bg-dark-30 text-light-70 dark:text-dark-70 hover:text-light-100 dark:hover:text-dark-100 py-1 px-2 cursor-pointer', settings?.class?.option] }, [ text((e as { text: string } | undefined)?.text ?? e as string) ]); + }); + const select = dom('div', { listeners: { click: () => { + if(disabled) + return; + + const box = select.getBoundingClientRect(); + close = contextmenu(box.x, box.y + box.height, optionElements.filter(e => !!e).length > 0 ? optionElements : [ div('text-light-60 dark:text-dark-60 italic text-center px-2 py-1', [ text('Aucune option') ]) ], { placement: "bottom-start", class: ['flex flex-col max-h-[320px] overflow-auto', settings?.class?.popup], style: { "min-width": `${box.width}px` } }).close; + } }, class: ['mx-4 inline-flex items-center justify-between px-3 text-sm font-semibold leading-none h-8 gap-1 bg-light-20 dark:bg-dark-20 border border-light-35 dark:border-dark-35 focus:shadow-raw transition-[box-shadow] focus:shadow-light-40 dark:focus:shadow-dark-40 hover:border-light-50 dark:hover:border-dark-50 data-[disabled]:border-light-25 dark: data-[disabled]:border-dark-25 data-[disabled]:bg-light-20 dark: data-[disabled]:bg-dark-20', settings?.class?.container] }, [ dom('span', {}, [ textValue ]), icon('radix-icons:caret-down') ]); + + Object.defineProperty(select, 'disabled', { + get: () => disabled, + set: (v) => { + disabled = !!v; + select.toggleAttribute('data-disabled', disabled); + }, + }) + return select; +} +export function combobox>(options: Array | Array<{ text: string, value: T } | undefined>, settings?: { defaultValue?: T, change?: (value: T) => void, class?: { container?: Class, popup?: Class, option?: Class }, disabled?: boolean }): HTMLElement +{ + const textFromValue = (value?: T): string => { + if(!value) + return ''; + const found = options.find(e => (e as { value: string } | undefined)?.value === value || e === value); + if(!found) + return ''; + return (found as { text: string } | undefined)?.text ?? found as string; + }; + let context: { container: HTMLElement, content: NodeChildren, close: () => void }; + let selected = true; + + const show = () => { + if(disabled || (context && context.container.parentElement)) + return; + + const box = container.getBoundingClientRect(); + context = contextmenu(box.x, box.y + box.height, optionElements.filter(e => !!e).length > 0 ? optionElements.map(e => e?.dom) : [ div('text-light-60 dark:text-dark-60 italic text-center px-2 py-1', [ text('Aucune option') ]) ], { placement: "bottom-start", class: ['flex flex-col max-h-[320px] overflow-auto', settings?.class?.popup], style: { "min-width": `${box.width}px` }, blur: () => { if(!selected) container.classList.add('!border-light-red', 'dark:!border-dark-red') } }); + if(!selected) container.classList.remove('!border-light-red', 'dark:!border-dark-red'); + }; + const hide = () => { + if(!context || !context.container.parentElement) + return; + + context.close(); + if(!selected) container.classList.add('!border-light-red', 'dark:!border-dark-red'); + }; + + let disabled = settings?.disabled ?? false; + const optionElements = options.map((e, i) => { + if(e === undefined) + return; + + return { item: e, dom: dom('div', { listeners: { click: () => { + let text, value; + if(typeof e === 'string') + { + text = value = e; + } + else + { + text = e.text; + value = e.value; + } + + select.value = text; + settings?.change && settings?.change(value); + selected = true; + hide(); + } }, class: ['hover:bg-light-30 dark:hover:bg-dark-30 text-light-70 dark:text-dark-70 hover:text-light-100 dark:hover:text-dark-100 py-1 px-2 cursor-pointer', settings?.class?.option] }, [ text((e as { text: string } | undefined)?.text ?? e as string) ]) }; + }); + const select = dom('input', { listeners: { focus: show, input: () => { + context && context?.container.replaceChildren(...optionElements.filter(e => { + if(e === undefined) + return false; + if(typeof e.item === 'string') + return (e.item as string).toLowerCase().includes(select.value.toLowerCase()); + return e.item.text.toLowerCase().includes(select.value.toLowerCase()); + }).map(e => e!.dom)); + selected = false; + if(!context || !context.container.parentElement) container.classList.add('!border-light-red', 'dark:!border-dark-red') + } }, attributes: { type: 'text', }, class: 'flex-1 outline-none px-3 leading-none appearance-none py-1 bg-light-25 dark:bg-dark-25 disabled:bg-light-20 dark:disabled:bg-dark-20' }); + select.value = textFromValue(settings?.defaultValue); + + const container = dom('label', { class: ['inline-flex outline-none px-3 items-center justify-between text-sm font-semibold leading-none gap-1 bg-light-25 dark:bg-dark-25 border border-light-35 dark:border-dark-35 focus:shadow-raw transition-[box-shadow] focus:shadow-light-40 dark:focus:shadow-dark-40 hover:border-light-50 dark:hover:border-dark-50 data-[disabled]:border-light-25 dark:data-[disabled]:border-dark-25 data-[disabled]:bg-light-20 dark: data-[disabled]:bg-dark-20', settings?.class?.container] }, [ select, icon('radix-icons:caret-down') ]); + + Object.defineProperty(container, 'disabled', { + get: () => disabled, + set: (v) => { + disabled = !!v; + container.toggleAttribute('data-disabled', disabled); + select.toggleAttribute('disabled', disabled); + }, + }) + return container; +} +export function input(type: 'text' | 'number' | 'email' | 'password' | 'tel', settings?: { defaultValue?: string, change?: (value: string) => void, input?: (value: string) => void, focus?: () => void, blur?: () => void, class?: Class, disabled?: boolean }): HTMLInputElement +{ + const input = dom("input", { attributes: { disabled: settings?.disabled }, class: [`mx-4 caret-light-50 dark:caret-dark-50 text-light-100 dark:text-dark-100 placeholder:text-light-50 dark:placeholder:text-dark-50 + bg-light-20 dark:bg-dark-20 appearance-none outline-none px-3 py-1 focus:shadow-raw transition-[box-shadow] focus:shadow-light-40 dark:focus:shadow-dark-40 + border border-light-35 dark:border-dark-35 hover:border-light-50 dark:hover:border-dark-50 data-[disabled]:bg-light-20 dark:data-[disabled]:bg-dark-20 data-[disabled]:border-light-20 dark:data-[disabled]:border-dark-20`, settings?.class], listeners: { + input: () => settings?.input && settings.input(input.value), + change: () => settings?.change && settings.change(input.value), + focus: () => settings?.focus, + blur: () => settings?.blur, + }}) + if(settings?.defaultValue !== undefined) input.value = settings.defaultValue; + + return input; +} +export function numberpicker(settings?: { defaultValue?: number, change?: (value: number) => void, input?: (value: number) => void, focus?: () => void, blur?: () => void, class?: Class, min?: number, max?: number, disabled?: boolean }): HTMLInputElement +{ + let storedValue = settings?.defaultValue ?? 0; + const validateAndChange = (value: number) => { + if(isNaN(value)) + field.value = ''; + else + { + value = clamp(value, settings?.min ?? -Infinity, settings?.max ?? Infinity); + field.value = value.toString(10); + if(storedValue !== value) + { + storedValue = value; + return true; + } + } + return false; + } + const field = dom("input", { attributes: { disabled: settings?.disabled }, class: [`w-14 mx-4 caret-light-50 dark:caret-dark-50 text-light-100 dark:text-dark-100 placeholder:text-light-50 dark:placeholder:text-dark-50 bg-light-20 dark:bg-dark-20 appearance-none outline-none px-3 py-1 focus:shadow-raw transition-[box-shadow] focus:shadow-light-40 dark:focus:shadow-dark-40 border border-light-35 dark:border-dark-35 hover:border-light-50 dark:hover:border-dark-50 data-[disabled]:bg-light-20 dark:data-[disabled]:bg-dark-20 data-[disabled]:border-light-20 dark:data-[disabled]:border-dark-20`, settings?.class], listeners: { + input: () => validateAndChange(parseInt(field.value.trim().toLowerCase().normalize().replace(/[a-z,.]/g, ""), 10)) && settings?.input && settings.input(storedValue), + keydown: (e: KeyboardEvent) => { + switch(e.key) + { + case "ArrowUp": + validateAndChange(storedValue + (e.shiftKey ? 10 : 1)) && settings?.input && settings.input(storedValue); + break; + case "ArrowDown": + validateAndChange(storedValue - (e.shiftKey ? 10 : 1)) && settings?.input && settings.input(storedValue); + break; + case "PageUp": + settings?.max && validateAndChange(settings.max) && settings?.input && settings.input(storedValue); + break; + case "PageDown": + settings?.min && validateAndChange(settings.min) && settings?.input && settings.input(storedValue); + break; + default: + return; + } + }, + change: () => validateAndChange(parseInt(field.value.trim().toLowerCase().normalize().replace(/[a-z,.]/g, ""), 10)) && settings?.change && settings.change(storedValue), + focus: () => settings?.focus && settings.focus(), + blur: () => settings?.blur && settings.blur(), + }}); + if(settings?.defaultValue) field.value = storedValue.toString(10); + + return field; } \ No newline at end of file diff --git a/types/character.d.ts b/types/character.d.ts index f9f9b5a..01969d5 100644 --- a/types/character.d.ts +++ b/types/character.d.ts @@ -40,10 +40,11 @@ export type CharacterValues = { }; export type CharacterConfig = { peoples: RaceConfig[], - training: Record>; + training: Record>; abilities: Record; spells: SpellConfig[]; aspects: AspectConfig[]; + features: Record; }; export type SpellConfig = { id: string; @@ -64,7 +65,7 @@ export type AbilityConfig = { export type RaceConfig = { name: string; description: string; - options: Record; + options: Record; }; export type AspectConfig = { name: string; @@ -80,23 +81,22 @@ export type AspectConfig = { }; export type FeatureEffect = { + id: string; category: "value"; operation: "add" | "set"; property: string; - value: number | `modifier/${MainStat}`; -} | { - category: "feature"; - kind: "action" | "reaction" | "freeaction" | "passive"; - text: string; + value: number | `modifier/${MainStat}` | false; } | { + id: string; category: "list"; - list: "spells"; + list: "spells" | "action" | "reaction" | "freeaction" | "passive"; action: "add" | "remove"; item: string; + extra?: any; }; export type FeatureItem = FeatureEffect | { - category: "choice"; id: string; + category: "choice"; settings?: { //If undefined, amount is 1 by default amount: number; exclusive: boolean; //Disallow to pick the same option twice @@ -104,55 +104,26 @@ export type FeatureItem = FeatureEffect | { options: Array; } export type Feature = { - name?: string; + id: string; description: string; effect: FeatureItem[]; }; -export type TrainingOption = { - description: Array<{ - text: string; - disposable?: boolean; - replaced?: boolean; - category?: Category; - }>; - - //Automatically calculated by compiler - mana?: number; - health?: number; - speed?: false | number; - initiative?: number; - mastery?: keyof CompiledCharacter["mastery"]; - spellrank?: SpellType; - defense?: Array; - resistance?: Record; - bonus?: Record; - spell?: string; - - //Used during character creation, not used by compiler - modifier?: number; - ability?: number; - spec?: number; - spellslot?: number | MainStat; - arts?: number | MainStat; - - features?: FeatureItem[]; //TODO -}; export type CompiledCharacter = { id: number; owner?: number; username?: string; name: string; - health: number; - mana: number; + health: number; //Max + mana: number; //Max race: number; - spellslots: number; - artslots: number; + spellslots: number; //Max + artslots: number; //Max spellranks: Record; - aspect: string; + aspect: string; //ID speed: number | false; + capacity: number | false; initiative: number; - spells: string[]; values: CharacterValues, @@ -183,7 +154,7 @@ export type CompiledCharacter = { modifier: Record; abilities: Partial>; level: number; - features: { [K in Extract["kind"]]?: string[] }; + lists: { [K in Extract["list"]]?: string[] }; notes: string; }; \ No newline at end of file