Outils pour utilisateurs

Outils du site


brouillon7

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
brouillon7 [2026/04/19 23:07] nanakibrouillon7 [2026/05/04 21:25] (Version actuelle) nanaki
Ligne 1: Ligne 1:
-===== Liste des Sorts et techniques =====+Voici un simulateur en version beta, n'hésitez pas à faire vos remarques sur le discord ou le forum.
  
-Un complément d'information sur certains sorts a été ajouté après le tableau de sorts. 
  
 <html> <html>
 <head> <head>
 <meta charset="UTF-8"> <meta charset="UTF-8">
-<title>Compétences — Techniques & Sorts</title> +<title>Simulateur RPG</title>
-<style> +
-body { font-family: Arial, sans-serif; margin: 10px; } +
-h3 { text-align: center; } +
-.table-container { width: 100%; overflow-x: auto; margin-top: 10px; } +
-table { width: 100%; border-collapse: collapse; min-width: 1200px; } +
-th, td { padding: 8px; border: 1px solid #ccc; text-align: left; } +
-th { background: #f2f2f2; } +
-tbody tr:nth-child(odd) { background: #fafafa; } +
-tbody tr:nth-child(even) { background: #ffffff; }+
  
-/* Couleurs par race */ +<style> 
-td.race-Communs { color: #555; } +body { 
-td.race-Nain { color: red; } +  font-family: Arial; 
-td.race-Géant colorsaddlebrown; } +  background:#0b1a13; 
-td.race-Olympien colordarkorange; } +  color:#7dd3fc; 
-td.race-HS { color: darkgreen; } +  padding:10px; 
-td.race-Elfe { color: green; }+
 +h1,h2 { color:gold;} 
 +.box border:1px solid gold; padding:10px; margin-bottom:10px; } 
 +select { margin:3px; max-width:150px;
 +input margin:3px; width:60px; } 
 +.statLine { display:flex; justify-content:space-between; max-width:260px;
 +.result background:#000; color:#00ffcc; padding:10px; white-space:pre-wrap; } 
 +.small font-size:12px; color:#aaa; }
 </style> </style>
 </head> </head>
 +
 <body> <body>
  
-<!-- ================= TABLEAU 1 : sorts ================= --> +<h1>🎲 Simulateur</h1>
-<h3>Gestion des compétences — sorts</h3> +
-<label for="raceSelect1">Choisir une race :</label> +
-<select id="raceSelect1"> +
-  <option value="Toutes">Toutes</option> +
-  <option value="Communs">Communs</option> +
-  <option value="Nain">Nain</option> +
-  <option value="Géant">Géant</option> +
-  <option value="Olympien">Olympien</option> +
-  <option value="HS">HS</option> +
-  <option value="Elfe">Elfe</option> +
-</select>+
  
-<div class="table-container"> +<div class="box"> 
-<table id="competencesTable1"> +Race : 
-<thead+<select id="race"></select
-<tr> +<h3>Stats de base</h3
-<th>Race</th><th>Nom de la compétence</th><th>Type</th><th>Catégorie</th+<pre id="baseStats"></pre
-<th>Coût (PM)</th><th>Bonus / Malus</th><th>Cible</th><th>Portée</th+</div>
-<th>Description</th><th>Cumulable</th><th>Prix</th><th>Niveau</th> +
-</tr> +
-</thead> +
-  <tbody>+
  
-<tbody>+<div class="box"> 
 +<h3>Améliorations</h3> 
 +<div id="stats"></div> 
 +<div id="cost"></div> 
 +</div>
  
-<!-- ================= NIVEAU 1 ================= -->+<div class="box"> 
 +<h3>Équipement (3 max + 1 anneau)</h3> 
 +Tête <select id="head"></select> <span id="headStats"></span><br> 
 +Cou <select id="neck"></select> <span id="neckStats"></span><br> 
 +Dos <select id="cape"></select> <span id="capeStats"></span><br> 
 +Main droite <select id="rightHand"></select> <span id="rightStats"></span><br> 
 +Main gauche <select id="leftHand"></select> <span id="leftStats"></span><br> 
 +Corps <select id="body"></select> <span id="bodyStats"></span><br> 
 +Anneau <select id="ring"></select> <span id="ringStats"></span><br> 
 +Pieds <select id="feet"></select> <span id="feetStats"></span> 
 +<div id="limitWarn" style="color:red;"></div> 
 +</div>
  
-<tr class="Communs"> +<div class="box"> 
-<td class="race-Communs">Communs</td><td>Arcane ajustée</td><td>Sort</td><td>Offensif</td+<h3>Passifs</h3
-<td>6 MP</td><td>Avantage au toucher</td><td>Autre</td><td>min 2</td> +<div id="skills"></div
-<td>Donne l’avantage au toucher</td><td>/</td><td>50 pos</td><td>1</td+</div>
-</tr>+
  
-<tr class="Communs"> +<div class="box"> 
-<td class="race-Communs">Communs</td><td>Arcanes précises</td><td>Sort</td><td>Offensif</td+<h3>Sorts actifs</h3
-<td>6 MP</td><td>+4 au toucher</td><td>Autre</td><td>min 2</td+<div id="spells"></div
-<td>Bonus de +4 pour toucher</td><td>/</td><td>50 pos</td><td>1</td+<div id="spellBonus" class="small"></div
-</tr>+</div>
  
-<tr class="Communs"> 
-<td class="race-Communs">Communs</td><td>Arcanes violentes</td><td>Sort</td><td>Offensif</td> 
-<td>6 MP</td><td>-6 au toucher, +5 dégâts</td><td>Autre</td><td>min 2</td> 
-<td>Malus de -6 pour toucher, bonus +5 dégâts</td><td>/</td><td>50 pos</td><td>1</td> 
-</tr> 
  
-<tr class="Communs"> 
-<td class="race-Communs">Communs</td><td>Aveuglement</td><td>Sort</td><td>Malédiction</td> 
-<td>4 MP</td><td>-1 P</td><td>Autre</td><td>min 2</td> 
-<td>Aveuglement (x1)</td><td>non cumulable</td><td>50 pos</td><td>1</td> 
-</tr> 
  
-<tr class="Communs"+<!-- ================= POUSSEE ================= --
-<td class="race-Communs">Communs</td><td>Coup précis</td><td>Sort</td><td>Bénédiction</td+<div class="box"> 
-<td>4 MP</td><td>Dextérité (x2)</td><td>Autre / Soi-même</td><td>max 1</td> +<h3>Simulateur de poussée</h3>
-<td>Dextérité (x2)</td><td>non cumulable</td><td>50 pos</td><td>1</td> +
-</tr>+
  
-<tr class="Communs"> +Force assaillant <input id="pushF" type="number" value="10"> 
-<td class="race-Communs">Communs</td><td>Épuisement arcanique</td><td>Sort</td><td>Malédiction</td> +Renforcement <select id="pushBuff"><option value="0">0</option><option value="6">+6</option></select><br>
-<td>4 MP</td><td>Essoufflement (X/3)</td><td>Autre</td><td>min 2</td> +
-<td>Réduction d’endurance</td><td>/</td><td>50 pos</td><td>1</td> +
-</tr>+
  
-<tr class="Communs"> +Endurance <input id="pushE" type="number" value="5"> 
-<td class="race-Communs">Communs</td><td>Maladresse</td><td>Sort</td><td>Malédiction</td> +Agilité <input id="pushAgi" type="number" value="5"><br>
-<td>4 MP</td><td>Maladresse (x2)</td><td>Autre</td><td>min 2</td> +
-<td>Réduit la précision</td><td>non cumulable</td><td>50 pos</td><td>1</td> +
-</tr>+
  
-<tr class="Communs"+PV actuels <input id="pushPVtype="number" value="50"><br>
-<td class="race-Communs">Communs</td><td>Peau de granit</td><td>Sort</td><td>Bénédiction</td> +
-<td>4 MP</td><td>Protection (x2)</td><td>Autre / Soi-même</td><td>max 1</td> +
-<td>Renforce la défense</td><td>non cumulable</td><td>50 pos</td><td>1</td> +
-</tr>+
  
-<tr class="Communs"> +Instabilité <select id="pushDebuff"><option value="0">0</option><option value="-6">-6</option></select> 
-<td class="race-Communs">Communs</td><td>Restauration mineure</td><td>Sort</td><td>Bénédiction</td> +Stabilité <select id="pushStab"><option value="0">0</option><option value="6">+6</option><option value="12">+12</option><option value="18">+18</option></select>
-<td>MP</td><td>-5 malus</td><td>Autre Soi-même</td><td>max 1</td> +
-<td>Réduit les malus</td><td>/</td><td>50 pos</td><td>1</td> +
-</tr>+
  
-<tr class="Communs"+<pre id="pushResult" class="result"></pre
-<td class="race-Communs">Communs</td><td>Vulnérabilité</td><td>Sort</td><td>Malédiction</td> +</div>
-<td>6 MP</td><td>Vulnérabilité (x2)</td><td>Autre</td><td>min 2</td> +
-<td>Augmente les dégâts subis</td><td>non cumulable</td><td>50 pos</td><td>1</td+
-</tr>+
  
-<!-- ================= NIVEAU 2 ================= -->+<button onclick="resetAll()">Reset</button>
  
-<tr class="Communs"+<pre id="result" class="result"></pre>
-<td class="race-Communs">Communs</td><td>Agressivité</td><td>Sort</td><td>Bénédiction</td> +
-<td>6 MP</td><td>Agressivité (x1)</td><td>Autre / Soi-même</td><td>max 1</td> +
-<td>Augmente l’agressivité</td><td>non cumulable</td><td>100 pos</td><td>2</td> +
-</tr>+
  
-<tr class="HS"> +<script>
-<td class="race-HS">HS</td><td>Aiguillon</td><td>Sort</td><td>Offensif</td> +
-<td>4 PM</td><td>+3</td><td>Autre</td><td>min 2</td> +
-<td>Projette un aiguillon sur l’adversaire.</td><td>/</td><td>100 po</td><td>2</td> +
-</tr>+
  
-<tr class="Elfe"> +// ===== RACES ====
-<td class="race-Elfe">Elfe</td><td>Aiguillon</td><td>Sort</td><td>Offensif</td> +const races 
-<td>PM</td><td>+3</td><td>Autre</td><td>min 2</td> +Elfe:{a:2,cc:9,ct:10,f:9,e:4,agi:9,p:5,mvt:5,pv:55,pm:30,r:4,rm:6,fm:8,m:6}, 
-<td>Projette un aiguillon sur l’adversaire.</td><td>/</td><td>100 po</td><td>2</td> +Nain:{a:2,cc:11,ct:8,f:11,e:6,agi:6,p:4,mvt:4,pv:50,pm:15,r:5,rm:4,fm:10,m:3}, 
-</tr>+Géant:{a:2,cc:9,ct:10,f:12,e:4,agi:7,p:4,mvt:5,pv:65,pm:20,r:5,rm:5,fm:6,m:5}, 
 +Olympien:{a:2,cc:10,ct:9,f:10,e:5,agi:8,p:4,mvt:5,pv:60,pm:30,r:5,rm:6,fm:7,m:5}, 
 +HS:{a:2,cc:8,ct:9,f:7,e:3,agi:11,p:5,mvt:6,pv:45,pm:40,r:3,rm:7,fm:9,m:5} 
 +};
  
-<tr class="Géant"> +// ===== COST ====
-<td class="race-Géant">Géant</td><td>Aiguillon</td><td>Sort</td><td>Offensif</td> +const costTable { 
-<td>PM</td><td>+3</td><td>Autre</td><td>min 2</td> +a:[800,200,100], 
-<td>Projette un aiguillon sur l’adversaire.</td><td>/</td><td>100 po</td><td>2</td> +cc:[100,50,30], ct:[110,50,30], 
-</tr>+f:[120,55,30], e:[120,55,30], 
 +agi:[95,45,25], 
 +m:[110,55,35], 
 +fm:[100,50,30], 
 +p:[110,85,78], 
 +pv:[4,2,1], 
 +pm:[5,3,1], 
 +mvt:[100,50,30], 
 +r:[40,30,15], 
 +rm:[50,40,20] 
 +};
  
 +// ===== PASSIFS =====
 +const skills = [
 +{name:"Fulgurance",desc:"+1 toucher au cac + 1 esquive tous les 5 mouvements"},
 +{name:"Couverture",desc:"85% CC / 15% AGI"},
 +{name:"Réflexes fulgurants",desc:"85% AGI / 15% CC"},
 +{name:"Berserker",desc:"+1 toucher au cac tous les 10 pv perdus"},
 +{name:"Griffes",desc:"+3 dégâts au poings"},
 +{name:"Anguille",desc:"Avantage esquive"}
 +];
  
 +// ===== SORTS =====
 +const spells = [
 +{name:"Peau de granit",dex:0,prot:2},
 +{name:"Coup précis",dex:2,prot:0},
  
-<tr class="Communs"> +{name:"Maladresse",dex:-2,prot:0}, 
-<td class="race-Communs">Communs</td><td>Armure</td><td>Sort</td><td>Bénédiction</td> +{name:"Vulnérabilité",dex:0,prot:-2},
-<td>8 MP</td><td>Armure (x1)</td><td>Autre / Soi-même</td><td>max 1</td> +
-<td>Renforce la défense</td><td>non cumulable</td><td>100 pos</td><td>2</td> +
-</tr>+
  
-<tr class="Géant"+{name:"Puissance de la nature",dex:2,prot:2},
-<td class="race-Géant">Géant</td><td>Boule de Magma</td><td>Sort</td><td>Offensif</td> +
-<td>7 PM</td><td>+3 + effet Feu</td><td>Autre</td><td>min 2</td> +
-<td>Lance une boule de lave en fusion sur l'adversairequi prend feu.</td><td>effet non cumulable</td><td>100 po</td><td>2</td> +
-</tr>+
  
-<tr class="Communs"> +{name:"Aide",dex:4,prot:0}, 
-<td class="race-Communs">Communs</td><td>Colère de la nature</td><td>Sort</td><td>Malédiction</td> +{name:"Malchance",dex:-4,prot:0},
-<td>8 MP</td><td>Maladresse (x2)Vulnérabilité (x2)</td><td>Autre</td><td>min 2</td> +
-<td>Affaiblissement combiné</td><td>cumulable</td><td>100 pos</td><td>2</td> +
-</tr>+
  
-<tr class="Communs"> +{name:"Fatigue",dex:0,prot:-4}, 
-<td class="race-Communs">Communs</td><td>Drain</td><td>Sort</td><td>Offensif</td> +{name:"Réflexes accrus",dex:0,prot:4},
-<td>6 MP</td><td>Vol de PV</td><td>Autre</td><td>min 2</td> +
-<td>Récupère une partie des dégâts</td><td>/</td><td>100 pos</td><td>2</td> +
-</tr>+
  
-<tr class="Communs"+{name:"Bénédiction",dex:4,prot:4},
-<td class="race-Communs">Communs</td><td>Faiblesse</td><td>Sort</td><td>Malédiction</td> +
-<td>6 MP</td><td>Faiblesse (x1)</td><td>Autre</td><td>min 2</td> +
-<td>Réduit les capacités</td><td>non cumulable</td><td>100 pos</td><td>2</td> +
-</tr>+
  
-<tr class="Elfe"+{name:"Puissance du lutin capricieux",dex:-4,prot:-4},
-<td class="race-Elfe">Elfe</td><td>Flèche Aquatique</td><td>Sort</td><td>Offensif</td> +
-<td>5 PM</td><td>+3 + effet Eau</td><td>Autre</td><td>min 2</td> +
-<td>Projette une flèche composée d'eau sur l'adversaire.</td><td>effet non cumulable</td><td>100 po</td><td>2</td> +
-</tr>+
  
 +{name:"Exténuation",dex:0,prot:-8},
 +{name:"Sauvegarde",dex:0,prot:8},
 +{name:"Guigne",dex:-8,prot:0},
 +{name:"Virtuose",dex:8,prot:0}
 +];
  
-<tr class="HS"> 
-<td class="race-HS">HS</td><td>Flux Vital</td><td>Sort</td><td>Bénédiction</td> 
-<td>6 PM</td><td></td><td>Soi-même</td><td>0</td> 
-<td>Puise dans la régénération magique pour se soigner.</td><td>/</td><td>100 po</td><td>2</td> 
-</tr> 
  
-<tr class="Communs"> 
-<td class="race-Communs">Communs</td><td>Fragilité</td><td>Sort</td><td>Malédiction</td> 
-<td>10 MP</td><td>Fragilité (x1)</td><td>Autre</td><td>min 2</td> 
-<td>Augmente les dégâts subis</td><td>non cumulable</td><td>100 pos</td><td>2</td> 
-</tr> 
  
-<tr class="Olympien"> +const equipments [
-<td class="race-Olympien">Olympien</td><td>Imposition des Mains</td><td>Sort</td><td>Bénédiction</td> +
-<td>7 PM</td><td>+3</td><td>Autre</td><td>max 1</td> +
-<td>Toucher magique pour soigner un blessé.</td><td>/</td><td>100 po</td><td>2</td> +
-</tr>+
  
-<tr class="Elfe"> +/* ================= COMMUNS ================= */
-<td class="race-Elfe">Elfe</td><td>Lien de Vie</td><td>Sort</td><td>Bénédiction</td> +
-<td>6 PM</td><td></td><td>Autre</td><td>max 1</td> +
-<td>Soigne via régénération magique.</td><td>/</td><td>100 po</td><td>2</td> +
-</tr>+
  
-<tr class="Communs"> +{name:"Arc",race:"all",slot:"weapon2h",stats:{cc:-1,ct:1}}, 
-<td class="race-Communs">Communs</td><td>Instabilité</td><td>Sort</td><td>Malédiction</td> +{name:"Armure matelassée",race:"all",slot:"body",stats:{e:1,agi:-2}}, 
-<td>6 MP</td><td>Instabilité (x6)</td><td>Autre</td><td>min 2</td> +{name:"Bâton de marche",race:"all",slot:"weapon",stats:{mvt:1}}, 
-<td>Effet instable</td><td>cumulable</td><td>100 pos</td><td>2</td> +{name:"Bottes de marche",race:"all",slot:"feet",stats:{mvt:1}}, 
-</tr>+{name:"Bouclier Parma",race:"all",slot:"offhand",stats:{e:1,agi:-2}}, 
 +{name:"Fustibale",race:"all",slot:"weapon",stats:{cc:-2,ct:1}}, 
 +{name:"Gladius",race:"all",slot:"weapon",stats:{cc:1}}, 
 +{name:"Sceptre",race:"all",slot:"weapon",stats:{fm:1}}, 
 +{name:"Lance",race:"all",slot:"weapon",stats:{ct:1,cc:-1}}, 
 +{name:"Targe",race:"all",slot:"offhand",stats:{cc:1,agi:-1}}, 
 +{name:"Visière",race:"all",slot:"head",stats:{p:1,cc:-1,fm:-1}}, 
 +{name:"Cape de chasse",race:"all",slot:"cape",stats:{ct:1}}, 
 +{name:"Collier tressé",race:"all",slot:"neck",stats:{pv:5,pm:5}}, 
 +{name:"Couronne d'Adonis",race:"all",slot:"head",stats:{rm:1}}, 
 +{name:"Ceinture",race:"all",slot:"body",stats:{r:1}}, 
 +{name:"Arc long",race:"all",slot:"weapon2h",stats:{ct:2,f:-1,cc:-2}}, 
 +{name:"Targe renforcée",race:"all",slot:"offhand",stats:{cc:1,pv:10}},
  
-<tr class="Olympien"> +/* ===== NOUVEAUX COMMUNS ===== */
-<td class="race-Olympien">Olympien</td><td>Lame Volante</td><td>Sort</td><td>Offensif</td> +
-<td>4 PM</td><td>+3</td><td>Autre</td><td>min 2</td> +
-<td>Projette une lame magique sur l'adversaire.</td><td>/</td><td>100 po</td><td>2</td> +
-</tr>+
  
-<tr class="Olympien"> +{name:"Torche",race:"all",slot:"weapon",stats:{cc:-2,f:-2}}, 
-<td class="race-Olympien">Olympien</td><td>Mage sacrée</td><td>Passif</td><td>Passif</td> +{name:"Hache de jet",race:"all",slot:"weapon",stats:{ct:1}}, 
-<td>/</td><td>/</td><td>/</td><td>/</td> +{name:"Pierre Noire",race:"all",slot:"weapon",stats:{f:1,cc:-1}}, 
-<td>Bonus de +pour toucher avec des sorts de soutien pour chaque effet sur lui</td><td>/</td><td>100</td><td>2</td> +{name:"Main-gauche offensive",race:"all",slot:"offhand",stats:{cc:2,f:-1}},
-</tr>+
  
-<tr class="Communs"> +/* ================= ELFES ================= */
-<td class="race-Communs">Communs</td><td>Migraine</td><td>Sort</td><td>Malédiction</td> +
-<td>4 MP</td><td>Dégâts mentaux</td><td>Autre</td><td>min 2</td> +
-<td>Inflige des dégâts mentaux</td><td>/</td><td>100 pos</td><td>2</td> +
-</tr> +
-<tr class="Nain"> +
-<td class="race-Nain">Nain</td><td>Pic de Pierre</td><td>Sort</td><td>Offensif</td> +
-<td>4 PM</td><td>+3</td><td>Autre</td><td>min 2</td> +
-<td>Projette un pic de pierre sur l’adversaire.</td><td>/</td><td>100 po</td><td>2</td> +
-</tr>+
  
 +{name:"Bâton du Pèlerin",race:"all",slot:"weapon",stats:{mvt:1,fm:1}},
 +{name:"Bottes Tâlroval",race:"all",slot:"feet",stats:{mvt:2}},
 +{name:"Cuirasse",race:"all",slot:"body",stats:{e:1,r:2}},
 +{name:"Lance de garde Sylvestre",race:"all",slot:"weapon",stats:{cc:1,f:1}},
 +{name:"Sceptre de mage",race:"all",slot:"weapon2h",stats:{m:1,fm:1}},
 +{name:"Arc Ensorcelé",race:"all",slot:"weapon2h",stats:{ct:1,rm:2,cc:-1}},
 +{name:"Armure de garde Sylvestre",race:"all",slot:"body",stats:{e:2,mvt:-1},magicBlock:true},
 +{name:"Toge de feuillage",race:"all",slot:"body",stats:{fm:1,agi:1,pv:5}},
 +{name:"Marque Forestière",race:"all",slot:"neck",stats:{pm:10,r:1}},
 +{name:"Capuche du chasseur",race:"all",slot:"head",stats:{ct:1,r:1}},
  
-<tr class="Communs"> +// spécifique elfe 
-<td class="race-Communs">Communs</td><td>Puissance de la nature</td><td>Sort</td><td>Bénédiction</td> +{name:"Arc Elfique",race:"Elfe",slot:"weapon2h",stats:{ct:2,cc:-1}},
-<td>8 MP</td><td>Dextérité + Protection</td><td>Autre / Soi-même</td><td>/</td> +
-<td>Boost multiple</td><td>cumulable</td><td>100 pos</td><td>2</td> +
-</tr>+
  
-<tr class="Communs"> +/* ================= NAINS ================= */
-<td class="race-Communs">Communs</td><td>Régénération</td><td>Sort</td><td>Bénédiction</td> +
-<td>4 MP</td><td>Soin (R/2)</td><td>Autre / Soi-même</td><td>/</td> +
-<td>Soins basés sur R</td><td>/</td><td>100 pos</td><td>2</td> +
-</tr>+
  
 +{name:"Cotte de mailles",race:"all",slot:"body",stats:{e:2,agi:-4}},
 +{name:"Labrys",race:"all",slot:"weapon",stats:{cc:1,f:1}},
 +{name:"Marteau de guerre",race:"all",slot:"weapon2h",stats:{f:2,cc:-1}},
 +{name:"Targe renforcée naine",race:"all",slot:"offhand",stats:{cc:1,pv:10}},
 +{name:"Armure runique",race:"all",slot:"body",stats:{e:1,pm:8}},
 +{name:"Cape dorée",race:"all",slot:"cape",stats:{m:1,fm:1},magicBlock:true},
 +{name:"Solerets",race:"all",slot:"feet",stats:{mvt:1,pm:5,pv:5}},
 +{name:"Casque grossissant",race:"all",slot:"head",stats:{ct:2,p:-1}},
  
-<tr class="Géant"> +// spécifiques nains 
-<td class="race-Géant">Géant</td><td>Régénération</td><td>Sort</td><td>Bénédiction</td> +{name:"Bâton d'archimage",race:"Nain",slot:"weapon2h",stats:{m:2,fm:-1}}, 
-<td>6 PM</td><td></td><td>Autre</td><td>max 1</td> +{name:"Hache runique",race:"Nain",slot:"weapon",stats:{cc:1,f:2}},
-<td>Régénère la santé d'une cible au corps à corps. La cible est soignée à la hauteur de la R du lanceur. inflige poison au lanceur.</td><td>/</td><td>100 po</td><td>2</td> +
-</tr>+
  
-<tr class="Communs"> +/* ================= GÉANTS ================= */
-<td class="race-Communs">Communs</td><td>Renforcement</td><td>Sort</td><td>Bénédiction</td> +
-<td>6 MP</td><td>Renforcement (x6)</td><td>Autre / Soi-même</td><td>/</td> +
-<td>Boost global</td><td>cumulable</td><td>100 pos</td><td>2</td> +
-</tr>+
  
-<tr class="Communs"> +{name:"Bouclier Clipeus",race:"all",slot:"offhand",stats:{e:1,pv:10}}, 
-<td class="race-Communs">Communs</td><td>Restauration</td><td>Sort</td><td>Bénédiction</td> +{name:"Masse d'arme",race:"all",slot:"weapon",stats:{cc:1,f:1}}, 
-<td>6 MP</td><td>Restauration (R/2)</td><td>Autre / Soi-même</td><td>/</td> +{name:"Hallebarde de pierre",race:"all",slot:"weapon",stats:{cc:2,f:-1}}, 
-<td>Restaure selon R</td><td>/</td><td>100 pos</td><td>2</td> +{name:"Bâton de shaman",race:"Géant",slot:"weapon2h",stats:{fm:2,pv:-5}}, 
-</tr>+{name:"Javelot lourd",race:"all",slot:"weapon",stats:{f:2,ct:-1,cc:-1}}, 
 +{name:"Broigne",race:"all",slot:"body",stats:{e:2,f:-1}}, 
 +{name:"Fétiche de shaman",race:"all",slot:"offhand",stats:{r:2,pm:5}}, 
 +{name:"Bottes incandescentes",race:"all",slot:"feet",stats:{mvt:1,r:1,pv:5}}, 
 +{name:"Médaillon hanté",race:"all",slot:"neck",stats:{cc:1,ct:1}},
  
-<tr class="Communs"> +// spécifique géant 
-<td class="race-Communs">Communs</td><td>Siphon</td><td>Sort</td><td>Offensif</td> +{name:"Peau de granit manifiée",race:"Géant",slot:"body",stats:{m:1,rm:2,agi:-2}},
-<td>0 MP5 PV, 2 Mvt</td><td>Vol de PM</td><td>Autre</td><td>min 2</td> +
-<td>Convertit dégâts en PM</td><td>/</td><td>100 pos</td><td>2</td> +
-</tr>+
  
-<tr class="Communs"> +/* ================= HS ================= */
-<td class="race-Communs">Communs</td><td>Stabilisation</td><td>Sort</td><td>Bénédiction</td> +
-<td>2 MP, 1 Mvt</td><td>Stabilité +6</td><td>Autre / Soi-même</td><td>/</td> +
-<td>Stabilise</td><td>/</td><td>100 pos</td><td>2</td> +
-</tr>+
  
-<!-- ================= NIVEAU ================= -->+{name:"Bâton de sage",race:"all",slot:"weapon2h",stats:{m:1,agi:1}}, 
 +{name:"Orbe de mana",race:"all",slot:"weapon2h",stats:{m:1,rm:1}}, 
 +{name:"Cape de mage",race:"all",slot:"cape",stats:{fm:1,rm:1}}, 
 +{name:"Armure de fourrure",race:"all",slot:"body",stats:{e:2,rm:-3}}, 
 +{name:"Ceste",race:"all",slot:"weapon",stats:{f:1,cc:1}}, 
 +{name:"Collier d'apaisement",race:"all",slot:"neck",stats:{pv:10,pm:5}}, 
 +{name:"Bottes de voleur",race:"all",slot:"feet",stats:{mvt:1,agi:1}}, 
 +{name:"Sarbacane",race:"all",slot:"weapon",stats:{ct:1,f:10,cc:-1}}, 
 +{name:"Bouclier en lianes",race:"all",slot:"offhand",stats:{cc:1,agi:1}},
  
-<tr class="Communs"> +// spécifiques HS 
-<td class="race-Communs">Communs</td><td>Aide</td><td>Sort</td><td>Bénédiction</td> +{name:"Manteau de feuillage",race:"HS",slot:"body",stats:{e:1,agi:2}}, 
-<td>8 MP</td><td>Dextérité (x4)</td><td>Autre / Soi-même</td><td>/</td> +{name:"Bottes griffues",race:"HS",slot:"feet",stats:{cc:1,f:1,pv:5}},
-<td>Boost fort</td><td>non cumulable</td><td>200 pos</td><td>3</td> +
-</tr>+
  
-<tr class="Communs"> +/* ================= OLYMPIENS ================= */
-<td class="race-Communs">Communs</td><td>Fatigue</td><td>Sort</td><td>Malédiction</td> +
-<td>12 MP</td><td>Vulnérabilité (x4)</td><td>Autre</td><td>min 2</td> +
-<td>Affaiblissement fort</td><td>non cumulable</td><td>200 pos</td><td>3</td> +
-</tr>+
  
-<tr class="Communs"> +{name:"Armure hoplitique",race:"all",slot:"body",stats:{e:1,m:1}}, 
-<td class="race-Communs">Communs</td><td>Malchance</td><td>Sort</td><td>Malédiction</td> +{name:"Bouclier Ancile",race:"all",slot:"offhand",stats:{e:1}}, 
-<td>MP</td><td>Maladresse (x4)</td><td>Autre</td><td>min 2</td> +{name:"Diadème",race:"all",slot:"head",stats:{r:1,rm:2}}, 
-<td>Réduit précision</td><td>non cumulable</td><td>200 pos</td><td>3</td> +{name:"Pilum",race:"all",slot:"weapon",stats:{ct:1,f:1,cc:-1}}, 
-</tr>+{name:"Spatha",race:"all",slot:"weapon",stats:{cc:1,f:1}}, 
 +{name:"Sceptre de puissance",race:"all",slot:"weapon",stats:{m:1,pm:8}}, 
 +{name:"Lame Sainte",race:"all",slot:"weapon",stats:{cc:1,m:1}}, 
 +{name:"Tiare d'Oracle",race:"all",slot:"head",stats:{fm:1,p:1}}, 
 +{name:"Cnémides",race:"all",slot:"feet",stats:{mvt:1,rm:1,r:1}},
  
-<tr class="Communs"> +// spécifique olympien 
-<td class="race-Communs">Communs</td><td>Récupération</td><td>Sort</td><td>Bénédiction</td> +{name:"Lorica",race:"Olympien",slot:"body",stats:{e:2,agi:-2}},
-<td>4 MP</td><td>Soin (R/2)</td><td>Autre</td><td>max 1</td> +
-<td>Soigne</td><td>non cumulable</td><td>200 pos</td><td>3</td> +
-</tr>+
  
-<tr class="Communs"> +/* ================= ANNEAUX ================= */
-<td class="race-Communs">Communs</td><td>Réflexes accrus</td><td>Sort</td><td>Bénédiction</td> +
-<td>8 MP</td><td>Protection (x4)</td><td>Autre / Soi-même</td><td>max 1</td> +
-<td>Boost défense</td><td>non cumulable</td><td>200 pos</td><td>3</td> +
-</tr>+
  
-<tr class="Communs"> +{name:"Anneau Caprice",race:"all",slot:"ring",stats:{fm:1}}, 
-<td class="race-Communs">Communs</td><td>Régénération accélérée</td><td>Sort</td><td>Bénédiction</td> +{name:"Anneau Férocité",race:"all",slot:"ring",stats:{f:1}}, 
-<td>10 MP</td><td>Soin (R)</td><td>Autre / Soi-même</td><td>max 1</td> +{name:"Anneau Horizon",race:"all",slot:"ring",stats:{p:1}}, 
-<td>Soins puissants</td><td>non cumulable</td><td>200 pos</td><td>3</td> +{name:"Anneau Prétention",race:"all",slot:"ring",stats:{ct:1}}, 
-</tr>+{name:"Anneau Souplesse",race:"all",slot:"ring",stats:{agi:1}}, 
 +{name:"Anneau Tenacité",race:"all",slot:"ring",stats:{e:1}}, 
 +{name:"Anneau Puissance",race:"all",slot:"ring",stats:{m:1}}, 
 +{name:"Anneau Finesse",race:"all",slot:"ring",stats:{cc:1}}
  
-<tr class="Communs"> +];
-<td class="race-Communs">Communs</td><td>Restauration majeure</td><td>Sort</td><td>Bénédiction</td> +
-<td>12 MP</td><td>Restauration (R)</td><td>Autre / Soi-même</td><td>/</td> +
-<td>Restaure complètement</td><td>/</td><td>200 pos</td><td>3</td> +
-</tr>+
  
-<!-- ================= NIVEAU 4 ================= --> 
  
-<tr class="HS"> +// ===== INIT ====
-<td class="race-HS">HS</td><td>Arme Vivante *</td><td>Sort</td><td>Offensif</td> +const raceSelect document.getElementById("race"); 
-<td>12 PM</td><td>+M</td><td>Autre</td><td>max 1</td> +const statsDiv = document.getElementById("stats"); 
-<td>Ajoute des dégâts magiques à une attaque avec une arme composée de bois (pétrifié ou non). La caractéristique de touche pour ce sort est la CC.</td><td>/</td><td>300 po</td><td>4</td> +const baseDiv = document.getElementById("baseStats");
-</tr>+
  
-<tr class="Communs"> +for(let r in races){ 
-<td class="race-Communs">Communs</td><td>Bénédiction</td><td>Sort</td><td>Bénédiction</td> +raceSelect.innerHTML += `<option>${r}</option>`; 
-<td>15 MP</td><td>Protection + Dextérité (x4)</td><td>Autre / Soi-même</td><td>max 1</td> +}
-<td>Boost complet</td><td>non cumulable</td><td>300 pos</td><td>4</td+
-</tr>+
  
-<tr class="Communs"> +// stats UI 
-<td class="race-Communs">Communs</td><td>Cuirasse</td><td>Sort</td><td>Bénédiction</td+for(let s in costTable){ 
-<td>15 MP</td><td>Armure (x2)</td><td>Autre / Soi-même</td><td>max 1</td+statsDiv.innerHTML +` 
-<td>Défense élevée</td><td>non cumulable</td><td>300 pos</td><td>4</td+<div class="statLine"> 
-</tr>+<span>${s}</span
 +<input type="number" id="${s}" value="0" min="0"
 +</div>`; 
 +}
  
-<tr class="Communs"> +// passifs 
-<td class="race-Communs">Communs</td><td>Férocité</td><td>Sort</td><td>Bénédiction</td+skills.forEach(s=>{ 
-<td>12 MP</td><td>Agressivité (x2)</td><td>Autre / Soi-même</td><td>max 1</td+document.getElementById("skills").innerHTML += ` 
-<td>Offensive renforcée</td><td>non cumulable</td><td>300 pos</td><td>4</td+<label
-</tr>+<input type="checkbox" class="skill" data-name="${s.name}"> 
 +<b>${s.name}</b><br
 +<span class="small">${s.desc}</span
 +</label><br>`; 
 +});
  
-<tr class="Communs"> 
-<td class="race-Communs">Communs</td><td>Friabilité</td><td>Sort</td><td>Malédiction</td> 
-<td>20 MP</td><td>Fragilité (x2)</td><td>Autre</td><td>min 2</td> 
-<td>Extrêmement fragile</td><td>non cumulable</td><td>300 pos</td><td>4</td> 
-</tr> 
  
-<tr class="Elfe"+// affichage sorts 
-<td class="race-Elfe">Elfe</td><td>Glaciation</td><td>Sort</td><td>Offensif</td> +spells.forEach(s=>{ 
-<td>8 PM</td><td>+6</td><td>Autre</td><td>max 2</td> +document.getElementById("spells").innerHTML += ` 
-<td>Vous devenez froids comme l'hiver et propagez cette froideure à un ennemi proche.</td><td>/</td><td>300 po</td><td>4</td+<label
-</tr> +<input type="checkbox" class="spell" data-dex="${s.dex}" data-prot="${s.prot}"> 
-<tr class="Olympien"+<b>${s.name}</b>  
-<td class="race-Olympien">Olympien</td><td>Lame Bénie *</td><td>Sort</td><td>Offensif</td+<span class="small">(Dex ${s.dex>=0?"+":""}${s.dex} | Prot ${s.prot>=0?"+":""}${s.prot})</span> 
-<td>12 PM</td><td>+M</td><td>Autre</td><td>max 1</td> +</label><br>`; 
-<td>Ajoute des dégâts magiques lors d'une attaque de mêléeLa caractéristique de touche pour ce sort est la CCL'attaquant fait en dégâts F+M et la cible encaisse avec E+M.</td><td>/</td><td>300 po</td><td>4</td+});
-</tr>+
  
-<tr class="Géant"> +// base stats 
-<td class="race-Géant">Géant</td><td>Météore *</td><td>Sort</td><td>Offensif</td> +function displayBase(){ 
-<td>12 PM</td><td>+M + effet Feu</td><td>Autre</td><td>min 2</td> +baseDiv.textContent = JSON.stringify(races[raceSelect.value],null,2); 
-<td>Ajoute des dégâts magiques et de feu à une attaque au jet de pierreLa caractéristique de touche pour ce sort est la CTUne pierre doit être équipée pour lancer le sortL'attaquant fait en dégâts F+M et la cible encaisse avec E+M.</td><td>effet non cumulable</td><td>300 po</td><td>4</td> +
-</tr>+raceSelect.addEventListener("change", displayBase); 
 +displayBase();
  
 +// ===== COST =====
 +function calcCost(b,m1,m2,n){
 +let total=0,last=b;
 +for(let i=1;i<=n;i++){
 +if(i===1) last=b;
 +else if(i<=3) last+=m1;
 +else last+=m2;
 +total+=last;
 +}
 +return total;
 +}
  
 +function updateCost(){
 +let total=0;
 +for(let s in costTable){
 +let v=+document.getElementById(s).value||0;
 +let [b,m1,m2]=costTable[s];
 +total+=calcCost(b,m1,m2,v);
 +}
 +document.getElementById("cost").innerHTML="💰 PI : "+total;
 +}
  
-<tr class="Nain"> +// ===== SLOTS ====
-<td class="race-Nain">Nain</td><td>Poings de Pierre</td><td>Sort</td><td>Offensif</td> +const slots { 
-<td>8 PM</td><td>+8</td><td>Autre</td><td>max 1</td> +head:head,neck:neck,cape:cape,rightHand:rightHand, 
-<td>Vos poings deviennent durs comme de la roche millénaireque vous abattez sur vos ennemis.</td><td>/</td><td>300 po</td><td>4</td> +leftHand:leftHand,body:body,ring:ring,feet:feet 
-</tr>+};
  
-<tr class="Communs"> +function resetSlots(){ 
-<td class="race-Communs">Communs</td><td>Puissance du lutin capricieux</td><td>Sort</td><td>Malédiction</td> +Object.values(slots).forEach(s=>s.innerHTML="<option value=''>--</option>"); 
-<td>20 MP</td><td>Maladresse + Vulnérabilité (x4)</td><td>Autre</td><td>min 2</td> +}
-<td>Double malédiction</td><td>non cumulable</td><td>300 pos</td><td>4</td> +
-</tr>+
  
-<tr class="Communs"> +function fillEquip(){ 
-<td class="race-Communs">Communs</td><td>Récupération supérieure</td><td>Sort</td><td>Bénédiction</td> +let r=raceSelect.value;
-<td>10 MP</td><td>Soin (R)</td><td>Autre / Soi-même</td><td>max 1</td> +
-<td>Soins complets</td><td>non cumulable</td><td>300 pos</td><td>4</td> +
-</tr>+
  
 +equipments.forEach((e,i)=>{
 +if(e.race!=="all"&&e.race!==r) return;
  
-<tr class="Géant"+if(e.slot==="weapon"||e.slot==="weapon2h") rightHand.innerHTML+=`<option value="${i}">${e.name}</option>`; 
-<td class="race-Géant">Géant</td><td>Souffle des cimes</td><td>Sort</td><td>Offensif</td+if(e.slot==="offhand") leftHand.innerHTML+=`<option value="${i}">${e.name}</option>`; 
-<td>8 PM</td><td>+6</td><td>Autre</td><td>max 2</td+if(e.slot==="body") body.innerHTML+=`<option value="${i}">${e.name}</option>`; 
-<td>Imprégné de la puissance de l'orage, vous rugissez un flot de foudre sur votre adversaire.</td><td>/</td><td>300 po</td><td>4</td+if(e.slot==="head") head.innerHTML+=`<option value="${i}">${e.name}</option>`; 
-</tr>+if(e.slot==="neck") neck.innerHTML+=`<option value="${i}">${e.name}</option>`; 
 +if(e.slot==="cape") cape.innerHTML+=`<option value="${i}">${e.name}</option>`; 
 +if(e.slot==="feet") feet.innerHTML+=`<option value="${i}">${e.name}</option>`; 
 +if(e.slot==="ring") ring.innerHTML+=`<option value="${i}">${e.name}</option>`; 
 +}); 
 +}
  
 +raceSelect.addEventListener("change",()=>{
 +resetSlots();
 +fillEquip();
 +autoCalculate();
 +});
  
 +resetSlots();
 +fillEquip();
  
-<tr class="Olympien"> +// ===== BONUS ===== 
-<td class="race-Olympien">Olympien</td><td>Soumission divine</td><td>Sort</td><td>Offensif</td> +function displayStats(select,id){ 
-<td>8 PM</td><td>+6</td><td>Autre</td><td>max 2</td> +let v=select.value; 
-<td>Vous vous approchez de votre cible et déferlez un torrent d'énergie divine dans sa direction.</td><td>/</td><td>300 po</td><td>4</td> +let el=document.getElementById(id); 
-</tr>+if(v===""){el.innerHTML="";return;} 
 +let e=equipments[v]; 
 +let txt=""
 +for(let s in e.stats){ 
 +let val=e.stats[s]; 
 +txt+=val>0?`+${val} ${s} `:`${val} ${s} `; 
 +
 +el.innerHTML=txt; 
 +}
  
 +const slotToStatId = {
 +head:"headStats",
 +neck:"neckStats",
 +cape:"capeStats",
 +rightHand:"rightStats",
 +leftHand:"leftStats",
 +body:"bodyStats",
 +ring:"ringStats",
 +feet:"feetStats"
 +};
  
-<tr class="HS"+Object.entries(slots).forEach(([k,s])=>{ 
-<td class="race-HS">HS</td><td>Taillade illusoire</td><td>Sort</td><td>Offensif</td> +s.addEventListener("change",()=>{ 
-<td>10 PM</td><td>+6</td><td>Autre</td><td>max 3</td> +displayStats(s, slotToStatId[k]); 
-<td>Des crocs et des griffes spectraux assaillent votre adversaire de toute part.</td><td>/</td><td>300 po</td><td>4</td> +checkLimit(); 
-</tr>+autoCalculate(); 
 +}); 
 +});
  
 +// ===== LIMIT =====
 +function checkLimit(){
 +let count=0;
 +Object.entries(slots).forEach(([k,s])=>{
 +if(k!=="ring"&&s.value!=="") count++;
 +});
  
-<tr class="Elfe"> +if(count>=3){ 
-<td class="race-Elfe">Elfe</td><td>Trait Béni *</td><td>Sort</td><td>Offensif</td> +limitWarn.innerText="Limite atteinte"
-<td>12 PM</td><td>+M</td><td>Autre</td><td>min 2</td> +Object.entries(slots).forEach(([k,s])=>{ 
-<td>Ajoute des dégâts magiques lors d'une attaque au tirLa caractéristique de touche pour ce sort est la CTL'attaquant fait en dégâts F+M et la cible encaisse avec E+M.</td><td>/</td><td>300 po</td><td>4</td+if(k!=="ring"&&s.value==="") s.disabled=true; 
-</tr>+}); 
 +}else{ 
 +limitWarn.innerText=""; 
 +Object.values(slots).forEach(s=>s.disabled=false); 
 +
 +}
  
-<!-- ================= NIVEAU 5 ================= -->+// ===== CALCUL =====
  
-<tr class="Communs"> +function calculate(){
-<td class="race-Communs">Communs</td><td>Exténuation</td><td>Sort</td><td>Malédiction</td> +
-<td>25 MP</td><td>Vulnérabilité (x8)</td><td>Autre</td><td>min 2</td> +
-<td>Vulnérabilité (x8)</td><td>/</td><td>300 pos</td><td>5</td> +
-</tr>+
  
-<tr class="Communs"+let activeSpells [...document.querySelectorAll(".spell:checked")];
-<td class="race-Communs">Communs</td><td>Guigne</td><td>Sort</td><td>Malédiction</td> +
-<td>20 MP</td><td>Maladresse (x8)</td><td>Autre</td><td>min 2</td> +
-<td>Maladresse (x8)</td><td>/</td><td>300 pos</td><td>5</td> +
-</tr>+
  
-<tr class="Communs"> +let bestDex 0; 
-<td class="race-Communs">Communs</td><td>Sauvegarde</td><td>Sort</td><td>Bénédiction</td> +let bestProt 0;
-<td>20 MP</td><td>Protection (x8)</td><td>Autre / Soi-même</td><td>max 1</td> +
-<td>Protection (x8)</td><td>/</td><td>300 pos</td><td>5</td> +
-</tr>+
  
-<tr class="Communs"+activeSpells.forEach(s=>{ 
-<td class="race-Communs">Communs</td><td>Virtuose</td><td>Sort</td><td>Bénédiction</td> +let d +s.dataset.dex; 
-<td>20 MP</td><td>Dextérité (x8)</td><td>Autre / Soi-même</td><td>max 1</td> +let p = +s.dataset.prot;
-<td>Dextérité (x8)</td><td>/</td><td>300 pos</td><td>5</td> +
-</tr>+
  
 +if(Math.abs(d) > Math.abs(bestDex)) bestDex = d;
 +if(Math.abs(p) > Math.abs(bestProt)) bestProt = p;
 +});
  
 +let char={...races[raceSelect.value]};
  
 +// stats investies
 +for(let s in costTable){
 +let v=+document.getElementById(s).value||0;
 +char[s]=(char[s]||0)+v;
 +}
  
-</tbody> +// equip 
-</table> +Object.values(slots).forEach(sel=>{ 
-</div> +if(sel.value===""return
- +let e=equipments[sel.value]; 
-<script> +for(let s in e.stats){ 
-// Script pour le premier tableau +char[s]=(char[s]||0)+e.stats[s]
-const select1 = document.getElementById("raceSelect1")+}
-const rows1 = document.querySelectorAll("#competencesTable1 tbody tr"); +
- +
-select1.addEventListener("change", () => { +
-  const chosenRace = select1.value+
-  rows1.forEach(row => { +
-    const isCommun row.classList.contains("Communs"); +
-    const isRace row.classList.contains(chosenRace); +
-    row.style.display = (chosenRace === "Toutes" || isCommun || isRace? "" : "none"+
-  });+
 }); });
-</script> 
  
-<hr>+// ===== DÉS ===== 
 +let ccDice = char.cc * 2; 
 +let ctDice = char.ct * 2; 
 +let fmDice = char.fm * 2;
  
-<!-- ================= TABLEAU 2 : Sorts ================= --> +// ===== VALEURS FINALES ===== 
-<h3>Gestion des compétences — Techniques Corps à corps</h3> +let finalCC ccDice + bestDex; 
-<label for="raceSelect2">Choisir une race :</label> +let finalCT ctDice + bestDex; 
-<select id="raceSelect2"> +let finalFM fmDice + bestDex;
-  <option value="Toutes">Toutes</option> +
-  <option value="Communs">Communs</option> +
-  <option value="Nain">Nain</option> +
-  <option value="Géant">Géant</option> +
-  <option value="Olympien">Olympien</option> +
-  <option value="HS">HS</option> +
-  <option value="Elfe">Elfe</option> +
-</select>+
  
-<div class="table-container"> +// ===== CT DISTANCE ===== 
-<table id="competencesTable2"> +function getCTDistance(baseCT, distance){ 
-<thead> +if(distance <= 2) return baseCT; 
-<tr> +return baseCT - (distance - 2) * 3; 
-<th>Race</th><th>Nom</th><th>Type</th><th>Catégorie</th> +}
-<th>Coût</th><th>Bonus / Malus</th><th>Cible</th><th>Portée</th> +
-<th>Description</th><th>Cumulable</th><th>Prix</th><th>Niveau</th> +
-</tr> +
-</thead> +
-<tbody>+
  
 +let ct1 = getCTDistance(finalCT,1);
 +let ct2 = getCTDistance(finalCT,2);
 +let ct3 = getCTDistance(finalCT,3);
 +let ct4 = getCTDistance(finalCT,4);
  
-<!-- ===== NIVEAU 1 ===== --> 
  
-<tr class="Communs"> 
-<td class="race-Communs">Communs</td><td>Attaque précise</td><td>Technique</td><td>Contact</td><td>2 PM</td><td>+4 toucher, -3 dégâts</td><td>Autre</td><td>max 1</td><td>Bonus de +4 pour toucher, -3 dégâts.</td><td>/</td><td>50 pos</td><td>1</td> 
-</tr> 
  
-<tr class="Communs"> +// ===== ESQUIVE ====
-<td class="race-Communs">Communs</td><td>Attaque violente</td><td>Technique</td><td>Contact</td><td>4 PM</td><td>-6 toucher, +3 dégâts</td><td>Autre</td><td>max 1</td><td>Malus de -6 pour toucher, +3 dégâts.</td><td>/</td><td>50 pos</td><td>1</td> +let checked [...document.querySelectorAll(".skill:checked")].map(e=>e.dataset.name);
-</tr>+
  
-<tr class="Communs"> +// CAC jet CC direct 
-<td class="race-Communs">Communs</td><td>Coup ajusté</td><td>Technique</td><td>Contact</td><td>2 MP</td><td>/</td><td>Autre</td><td>max 1</td><td>L'attaque se fait avec l'avantage</td><td>/</td><td>50 pos</td><td>1</td> +let esquiveCAC finalCC;
-</tr>+
  
-<tr class="Communs"> +// ===== ESQUIVE TIR =====
-<td class="race-Communs">Communs</td><td>Coup d'épaule</td><td>Technique</td><td>Contact</td><td>5 Mvt, 0A</td><td>-3</td><td>Autre</td><td>max 1</td><td>Attaque de contact à -4 pour toucher et -3 F</td><td>/</td><td>50 pos</td><td>1</td> +
-</tr>+
  
-<tr class="Communs"> +// calcul des 2 formules en dés 
-<td class="race-Communs">Communs</td><td>Epuisement</td><td>Technique</td><td>Contact</td><td>/</td><td><span style="color: red;">Essouflement(X/2)</span></td><td>Autre</td><td>max 1</td><td>Ne fait pas de dégâtsJet de CC purEssouflement(X/2où X est la différence des jets de dés.</td><td>effet immédiat, gain immédiat des malus, pas de statut, cumul possible</td><td>50 pos</td><td>1</td> +let esquiveA Math.floor(char.cc * 0.75 + char.agi * 0.25)
-</tr>+let esquiveB = Math.floor(char.cc * 0.25 + char.agi * 0.75);
  
-<!-- ===== NIVEAU 2 ===== -->+// choix du meilleur 
 +let esquiveStat Math.max(esquiveA, esquiveB);
  
-<tr class="Nain"> +// ===== PASSIFS =====
-<td class="race-Nain">Nain</td><td>Barbier</td><td>Technique</td><td>Contact</td><td>8 PM</td><td></td><td>Autre</td><td>max 1</td><td>Soigne une cible au corps à corps ( la statistique utilisée pour le soin est l'agilité du lanceur)</td><td>/</td><td>100 po</td><td>2</td> +
-</tr>+
  
-<tr class="Géant"> +// remplace complètement le calcul si passif spécifique 
-<td class="race-Géant">Géant</td><td>Berserker*</td><td>Passif</td><td>Passif</td><td>/</td><td>/</td><td>/</td><td>/</td><td>Gagne +1 pour toucher au CàC tous les 10 pv perdus</td><td>/</td><td>100 pos</td><td>2</td> +if(checked.includes("Réflexes fulgurants")){ 
-</tr>+    esquiveStat Math.floor(char.agi 0.85 char.cc * 0.15); 
 +}
  
-<tr class="Communs"> +if(checked.includes("Couverture")){ 
-<td class="race-Communs">Communs</td><td>Bousculade</td><td>Technique</td><td>Contact</td><td>1 Mvt</td><td>0</td><td>Autre</td><td>max 1</td><td>Touche auto, pas de dégâtsSi Pousse(F) est réussi, la cible est repoussée sur la case opposée au lanceur et gagne Stabilité(+4)</td><td>/</td><td>100</td><td>2</td> +    esquiveStat Math.floor(char.cc * 0.85 char.agi * 0.15); 
-</tr>+}
  
-<tr class="Communs"> +// conversion en jet 
-<td class="race-Communs">Communs</td><td>Croc-en-jambe</td><td>Technique</td><td>Contact</td><td>6 PM</td><td>Ralentissement(x2D2)</td><td>Autre</td><td>max 1</td><td>Ralentissement(x2D2)</td><td>non cumulable</td><td>100 pos</td><td>2</td> +let esquive esquiveStat * 2;
-</tr>+
  
-<tr class="HS"> +// bonus 
-<td class="race-HS">HS</td><td>Griffes*</td><td>Passif</td><td>Passif</td><td>/</td><td>/</td><td>/</td><td>/</td><td>Bonus de +3Dmg aux poings</td><td>/</td><td>1OO pos</td><td>2</td> +if(checked.includes("Fulgurance")) 
-</tr>+    esquive +1;
  
-<tr class="Elfe"> +// bonus protection 
-<td class="race-Elfe">Elfe</td><td>Fulgurance*</td><td>Passif</td><td>Passif</td><td>/</td><td>/</td><td>/</td><td>/</td><td>Gagne +1 pour toucher au CàC et +1 Esquive tous les 5Mvt max</td><td>/</td><td>1OO pos</td><td>2</td> +esquive += bestProt;
-</tr>+
  
-<tr class="Communs"> 
-<td class="race-Communs">Communs</td><td>Manchette</td><td>Technique</td><td>Contact</td><td>2 PM</td><td>Maladresse(xX/2)</td><td>Autre</td><td>max 1</td><td>Ne fait pas de dégâts. Jet de CC pur. Si l'attaque touche, la cible aura Maladresse(xX/2) où X est la différence des jets de dés</td><td>non cumulable</td><td>100 pos</td><td>2</td> 
-</tr> 
  
-<!-- ===== NIVEAU 3 ===== -->+// ===== ESQUIVE MAGIQUE ===== 
 +let esquiveFM = Math.floor(finalFM + bestProt);
  
-<tr class="Nain"><td class="race-Nain">Nain</td><td>Assomoir</td><td>Technique</td><td>Contact</td><td>7 PM</td><td>+4</td><td>Autre</td><td>max 1</td><td>Ignore le casque (chance de critique). Jet basé sur CC.</td>/<td></td><td>200 po</td><td>3</td></tr> 
  
-<tr class="Communs"> +// ===== MAGIE ====
-<td class="race-Communs">Communs</td><td>Arme infusée</td><td>Technique</td><td>Contact</td><td>8 PM</td><td>M/3</td><td>Autre</td><td>max 1</td><td>Bonus de +M/3 dégâts.</td><td>/</td><td>200 pos</td><td>3</td> +let jetFM finalFM;
-</tr>+
  
-<tr class="Communs"> +let sorts = ""; 
-<td class="race-Communs">Communs</td><td>Attaque drainante</td><td>Technique</td><td>Contact</td><td>4 MP</td><td>/</td><td>Autre</td><td>max 1</td><td>Rend autant de PV que les dégâts infligés / 3</td><td>/</td><td>200 pos</td><td>3</td> +for(let lvl=1; lvl<=5; lvl++){ 
-</tr>+let seuil = 6 + 6 * lvl; 
 +let reussite = jetFM >= seuil ? "✅" : "❌";
  
-<tr class="Communs"> +sorts +`Niveau ${lvl} → Seuil ${seuil} | Jet ${jetFM} ${reussite}\n`; 
-<td class="race-Communs">Communs</td><td>Attaque siphonnante</td><td>Technique</td><td>Contact</td><td>2 PV</td><td>/</td><td>Autre</td><td>max 1</td><td>Rend autant de PM que les dégâts infligés / 3</td><td>/</td><td>200 pos</td><td>3</td> +}
-</tr>+
  
-<tr class="Nain"> +// ===== AFFICHAGE ===== 
-<td class="race-Nain">Nain</td><td>Clé de bras</td><td>Technique</td><td>Contact</td><td>7 PM</td><td></td><td>Soi-même</td><td>0</td><td>Pare la prochaine attaque de mếlée et immobilise l'adversaire (uniquement à Mains nues).</td><td>/</td><td>200 po</td><td>3</td> +document.getElementById("spellBonus").innerText = 
-</tr>+"Bonus actifs → Dex: "+bestDex+" | Protection: "+bestProt;
  
-<tr class="Olympien"> +result.textContent 
-<td class="race-Olympien">Olympien</td><td>Désarmement</td><td>Technique</td><td>Contact</td><td>7 PM</td><td>+4</td><td>Autre</td><td>max 1</td><td>Désarme l'adversaire % de chance que l'adversaire lâche son arme au sol).</td><td>/</td><td>200 po</td><td>3</td> +"===== STATS =====\n"+ 
-</tr>+JSON.stringify(char,null,2)+
  
-<tr class="Communs"> +"\n\n⚔ CC : jet moyen "+ccDice+"  ("+finalCC+")"+ 
-<td class="race-Communs">Communs</td><td>Frappe à la tempe</td><td>Technique</td><td>Contact</td><td>4 MP</td><td>/</td><td>Autre</td><td>max 1</td><td>Dommage Mentaux (6)</td><td>/</td><td>200 pos</td><td>3</td> +"\n🎯 CT : jet moyen "+ctDice+"  ("+finalCT+")"+ 
-</tr>+"\n✨ FM : jet moyen "+fmDice+"  ("+finalFM+")"+
  
-<tr class="Elfe"> +"\n\n🛡 Esquive CAC : "+esquiveCAC+ 
-<td class="race-Elfe">Elfe</td><td>Frappe vicieuse</td><td>Technique</td><td>Contact</td><td>7 PM</td><td>+2</td><td>Autre</td><td>max 1</td><td>Ignore la pièce d'armure de tronc de l'adversaire.</td><td>/</td><td>200 po</td><td>3</td> +"\n🏹 Esquive tir : "+esquive+ 
-</tr>+"\n✨ Esquive FM : "+esquiveFM+ 
 +"\n🏹 Esquive tir : "+esquive+" ("+esquiveStat+" dés)"
  
-<tr class="HS"> +"\n\n🎯 CT distances :"+ 
-<td class="race-HS">HS</td><td>Griffes</td><td>Technique</td><td>Contact</td><td>6 PM</td><td>+poison poison magique</td><td>Autre</td><td>max 1</td><td>Inflige poison poison magique.</td><td>/</td><td>200 po</td><td>3</td> +"\n1 case : "+ct1+ 
-</tr>+"\n2 cases : "+ct2
 +"\n3 cases : "+ct3+ 
 +"\n4 cases : "+ct4+
  
-<tr class="Géant"> +"\n\n===== MAGIE =====\n"+ 
-<td class="race-Géant">Géant</td><td>Leurre</td><td>Technique</td><td>Contact</td><td>8 PM</td><td></td><td>Soi-même</td><td>0</td><td>Leurre la prochaine attaque magique de l'adversaire.</td><td>/</td><td>200 po</td><td>3</td> +"Jet FM : "+jetFM+"\n\n"
-</tr>+sorts; 
 +}
  
-<tr class="Olympien"> 
-<td class="race-Olympien">Olympien</td><td>Parade</td><td>Technique</td><td>Contact</td><td>7 PM</td><td></td><td>Soi-même</td><td>0</td><td>Pare la prochaine attaque de mêlée de l'adversaire (nécessite une arme de mêlée).</td><td>/</td><td>200 po</td><td>3</td> 
-</tr> 
  
-<tr class="Géant"> +// ===== AUTO ===== 
-<td class="race-Géant">Géant</td><td>Uppercut</td><td>Technique</td><td>Contact</td><td>8 PM</td><td>+3 dégâts (coup critique automatique)</td><td>Autre</td><td>max 1</td><td>Inflige un coup critique automatique à une cible au contact : +3 dégâts sur la cible.</td><td>/</td><td>200 po</td><td>3</td> +function autoCalculate(){ 
-</tr>+updateCost(); 
 +calculate(); 
 +}
  
-<tr class="Elfe"> +// events stats 
-<td class="race-Elfe">Elfe</td><td>Pas de côté</td><td>Technique</td><td>Contact</td><td>7 PM + 1 Mvt</td><td></td><td>Soi-même</td><td>0</td><td>Esquive la prochaine attaque physique en se déplaçant aléatoirement d'une case.</td><td>/</td><td>200 po</td><td>3</td> +document.querySelectorAll("#stats input").forEach(i=>{ 
-</tr>+i.addEventListener("input", autoCalculate); 
 +});
  
-<!-- ===== NIVEAU 4 ===== --> +document.querySelectorAll(".spell").forEach(s=>{ 
- +s.addEventListener("change", autoCalculate);
-<tr class="Communs"> +
-<td class="race-Communs">Communs</td><td>Attaque Sautée</td><td>Technique</td><td>Contact</td><td>12 PM</td><td>+M</td><td>Autre</td><td>min 2</td><td>Avec une arme de mêlée, déplace immédiatement le personnage au contact de la cible et lui inflige des dégâts magiques. Pour ce sort, la carac de touche est la CC. L'attaquant fait en dégâts F+M et la cible encaisse avec E+M.</td><td>/</td><td>300 po</td><td>4</td> +
-</tr> +
- +
-<tr class="Communs"> +
-<td class="race-Communs">Communs</td><td>Duelliste</td><td>Passif</td><td>Passif</td><td>/</td><td>/</td><td>/</td><td>/</td><td>Le personnage a l'avantage quand il effectue une attaque/technique basée sur la CC</td><td>/</td><td>300 pos</td><td>4</td> +
-</tr> +
- +
-<tr class="Communs"> +
-<td class="race-Communs">Communs</td><td>Maître bretteur</td><td>Passif</td><td>Passif</td><td>/</td><td>/</td><td>/</td><td>/</td><td>Les Malus infligés par les attaques de mêlée du personnage sont augmentés de 1</td><td></td><td>300 pos</td><td>4</td> +
-</tr> +
- +
-  </tbody> +
-</table> +
-</div> +
- +
-<script> +
-// Script pour le second tableau +
-const select2 = document.getElementById("raceSelect2"); +
-const rows2 = document.querySelectorAll("#competencesTable2 tbody tr"); +
- +
-select2.addEventListener("change", (=> { +
-  const chosenRace = select2.value; +
-  rows2.forEach(row => { +
-    const isCommun = row.classList.contains("Communs"); +
-    const isRace = row.classList.contains(chosenRace); +
-    row.style.display = (chosenRace === "Toutes" || isCommun || isRace) ? "" : "none"; +
-  });+
 }); });
-</script> 
  
  
-<hr> +// passifs 
- +document.querySelectorAll(".skill").forEach(s=>{ 
-<!-- ================= TABLEAU 3 : Techniques Distance ================= --> +s.addEventListener("change", autoCalculate);
-<h3>Gestion des compétences — Techniques Distance</h3> +
-<label for="raceSelect3">Choisir une race :</label> +
-<select id="raceSelect3"> +
-  <option value="Toutes">Toutes</option> +
-  <option value="Communs">Communs</option> +
-  <option value="Nain">Nain</option> +
-  <option value="Géant">Géant</option> +
-  <option value="Olympien">Olympien</option> +
-  <option value="HS">HS</option> +
-  <option value="Elfe">Elfe</option> +
-</select> +
- +
-<div class="table-container"> +
-<table id="competencesTable3"> +
-<thead> +
-<tr> +
-<th>Race</th><th>Nom</th><th>Type</th><th>Catégorie</th> +
-<th>Coût</th><th>Bonus / Malus</th><th>Cible</th><th>Portée</th> +
-<th>Description</th><th>Cumulable</th><th>Prix</th><th>Niveau</th> +
-</tr> +
-</thead> +
-<tbody> +
- +
-<!-- ================= NIVEAU 1 ================= --> +
- +
-<tr class="Communs"> +
-<td class="race-Communs">Communs</td><td>Arme improvisée</td><td>Technique</td><td>Jet</td> +
-<td>2 MP</td><td>-2</td><td>Autre</td><td>min 2</td> +
-<td>Effectue une attaque à distance, même sans arme équipée. -4 pour toucher, -2 Dmg</td> +
-<td>/</td><td>50 pos</td><td>1</td> +
-</tr> +
- +
-<tr class="Communs"> +
-<td class="race-Communs">Communs</td><td>Bout portant</td><td>Technique</td><td>Jet</td> +
-<td>2 MP</td><td>/</td><td>Autre</td><td>max 1</td> +
-<td>Avec une arme de jet, fait un tir en étant au contact avec -8 pour toucher</td> +
-<td>/</td><td>50 pos</td><td>1</td> +
-</tr> +
- +
-<tr class="Communs"> +
-<td class="race-Communs">Communs</td><td>Tir ajusté</td><td>Technique</td><td>Distance</td> +
-<td>2 MP</td><td>/</td><td>Autre</td><td>min 2</td> +
-<td>Le tir se fait avec avantage</td> +
-<td>/</td><td>50 pos</td><td>1</td> +
-</tr> +
- +
-<tr class="Communs"> +
-<td class="race-Communs">Communs</td><td>Tir épuisant</td><td>Technique</td><td>Tir munitions</td> +
-<td>/</td><td>Essoufflement (X/3)</td><td>Autre</td><td>min 2</td> +
-<td>Ne fait pas de dégâts. Jet de CT pur. Essouflement(X/3) où X est la différence des jets de dés</td> +
-<td>Effet immédiat. Cumul possible.</td><td>50 pos</td><td>1</td> +
-</tr> +
- +
-<tr class="Communs"> +
-<td class="race-Communs">Communs</td><td>Tir précis</td><td>Technique</td><td>Distance</td> +
-<td>2 MP</td><td>+4 au toucher, -3 dégâts</td><td>Autre</td><td>min 2</td> +
-<td>Bonus +4 au toucher, Malus de 3 aux dégâts</td> +
-<td>/</td><td>50 pos</td><td>1</td> +
-</tr> +
- +
-<tr class="Communs"> +
-<td class="race-Communs">Communs</td><td>Tir violent</td><td>Technique</td><td>Distance</td> +
-<td>2 MP</td><td>-6 au toucher, +2 dégâts</td><td>Autre</td><td>min 2</td> +
-<td>Malus de -6 pour toucher, bonus +2 dégâts</td> +
-<td>/</td><td>50 pos</td><td>1</td> +
-</tr> +
- +
-<!-- ================= NIVEAU 2 ================= --> +
- +
-<tr class="Communs"> +
-<td class="race-Communs">Communs</td><td>Jet de sable</td><td>Technique</td><td>Distance</td> +
-<td>4 MP, 1 Mvt</td><td>0</td><td>Autre</td><td>max 1</td> +
-<td>Ne fait pas de dégâts. Aveuglement (x2)</td> +
-<td>/</td><td>100 pos</td><td>2</td> +
-</tr> +
- +
-<tr class="Communs"> +
-<td class="race-Communs">Communs</td><td>Tir à la cheville</td><td>Technique</td><td>Tir munitions</td> +
-<td>6 MP</td><td>Ralentissement(x1D2)</td><td>Autre</td><td>min 2</td> +
-<td>Avec une arme à munitions, si la cible est touchée Ralentissement(x1D2)</td> +
-<td>Non cumulable</td><td>100 pos</td><td>2</td> +
-</tr> +
- +
-<tr class="Communs"> +
-<td class="race-Communs">Communs</td><td>Tir handicapant</td><td>Technique</td><td>Distance</td> +
-<td>4 MP</td><td>Vulnérabilité (xX)</td><td>Autre</td><td>min 2</td> +
-<td>Ne fait pas de dégâts. Jet de CT pur. Vulnérabilité (xX) où X est la différence entre le jet d'attaque et de défense /3</td> +
-<td>Non cumulable</td><td>100 pos</td><td>2</td> +
-</tr> +
- +
-<!-- ================= NIVEAU 3 ================= --> +
- +
-<tr class="Communs"> +
-<td class="race-Communs">Communs</td><td>Jet infusé</td><td>Technique</td><td>Jet</td> +
-<td>10 MP</td><td>M/3</td><td>Autre</td><td>min 2</td> +
-<td>Avec une arme de jet, +M/3 dmg</td> +
-<td>/</td><td>200 pos</td><td>3</td> +
-</tr> +
- +
-<!-- ================= NIVEAU 4 ================= --> +
- +
-<tr class="Communs"> +
-<td class="race-Communs">Communs</td><td>Escarmoucheur</td><td>Passif</td><td>/</td> +
-<td>/</td><td>/</td><td>/</td><td>/</td> +
-<td>Les Malus infligés par les Tirs du personnage sont augmentés de 1</td> +
-<td>/</td><td>300 pos</td><td>4</td> +
-</tr> +
- +
-<tr class="Communs"> +
-<td class="race-Communs">Communs</td><td>Lanceur</td><td>Passif</td><td>/</td> +
-<td>/</td><td>/</td><td>/</td><td>/</td> +
-<td>Le personnage a l'avantage quand il effectue une attaque/technique avec une arme de jet</td> +
-<td>/</td><td>300 pos</td><td>4</td> +
-</tr> +
- +
-<tr class="Communs"> +
-<td class="race-Communs">Communs</td><td>Tireur d'élite</td><td>Passif</td><td>/</td> +
-<td>/</td><td>/</td><td>/</td><td>/</td> +
-<td>Le personnage a l'avantage quand il effectue une attaque/technique avec une arme de tir à munitions</td> +
-<td>/</td><td>300 pos</td><td>4</td> +
-</tr> +
- +
-  </tbody> +
-</table> +
-</div> +
- +
-<script> +
-// Script pour le troisieme tableau +
-const select3 = document.getElementById("raceSelect3"); +
-const rows3 = document.querySelectorAll("#competencesTable3 tbody tr"); +
- +
-select3.addEventListener("change", (=> { +
-  const chosenRace = select3.value; +
-  rows3.forEach(row => { +
-    const isCommun = row.classList.contains("Communs"); +
-    const isRace = row.classList.contains(chosenRace); +
-    row.style.display = (chosenRace === "Toutes" || isCommun || isRace) ? "" : "none"; +
-  });+
 }); });
-</script> 
  
 +// ===== SORTS ACTIFS =====
  
-<hr> 
  
-<!-- ================= TABLEAU 4 : Furtivité ================= --> +// ===== RESET ===== 
-<h3>Gestion des compétences — Techniques Furtivité</h3> +function resetAll(){
-<label for="raceSelect4">Choisir une race :</label> +
-<select id="raceSelect4"> +
-  <option value="Toutes">Toutes</option> +
-  <option value="Communs">Communs</option> +
-  <option value="Nain">Nain</option> +
-  <option value="Géant">Géant</option> +
-  <option value="Olympien">Olympien</option> +
-  <option value="HS">HS</option> +
-  <option value="Elfe">Elfe</option> +
-</select>+
  
-<div class="table-container"> +document.querySelectorAll("#stats input").forEach(i=>i.value=0); 
-<table id="competencesTable4"> +document.querySelectorAll(".spell").forEach(s=>s.checked=false);
-<thead> +
-<tr> +
-<th>Race</th><th>Nom</th><th>Type</th><th>Catégorie</th> +
-<th>Coût</th><th>Bonus / Malus</th><th>Cible</th><th>Portée</th> +
-<th>Description</th><th>Cumulable</th><th>Prix</th><th>Niveau</th> +
-</tr> +
-</thead> +
-<tbody>+
  
- +Object.values(slots).forEach(s=>{ 
- +s.value=""; 
- +s.disabled=false;
- <!-- ================= COMMUNS ================= --> +
- +
- <tr class="Communs"> +
- <td class="race-Communs">Communs</td><td>Exploration</td><td>Technique</td><td>Personnel</td> +
- <td>Toutes les A restantes </td><td>+X P</td><td>Soi-même</td><td>/</td> +
- <td>Le personnage gagne Acuité visuelle (x) où x est le nombre d'actions dépensées jusqu'au prochain tour</td><td>/</td><td>50 pos</td><td>1</td> +
- </tr> +
- +
-<tr class="Communs"> +
-<td class="race-Communs">Communs</td><td>Pas léger</td><td>Technique</td><td>Personnel</td> +
-<td>X MP, Y Mvt, 1A</td><td>/</td><td>Soi-même</td><td>/</td> +
-<td>Les déplacements ne laissent pas de trace de pas jusqu'au prochain tourX= 2*(Imposture+1). Y = 1*(Imposture+1) (voir sous le tableau)</td> +
-<td>/</td><td>50 pos</td><td>1</td> +
-</tr> +
- <tr class="Communs"> +
- <td class="race-Communs">Communs</td><td>Discrétion</td><td>Technique</td><td>Personnel</td> +
- <td>X MP, Y Mvt </td><td></td><td>Soi-même</td><td>/</td> +
- <td>Le personnage n'apparaîtra pas sur la carte générale jusqu'à son prochain tour. X= 2*(Imposture+1). Y = 1/2*(Imposture+1) (voir sous le tableau)</td><td>/</td><td>200 pos</td><td>3</td> +
- </tr> +
- +
- +
- +
- <tr class="Communs"> +
- <td class="race-Communs">Communs</td><td>Camouflage (Olympien)</td><td>Technique</td><td>Personnel</td> +
- <td>X MP, Y Mvt</td><td>/</td><td>Soi-même</td><td>/</td> +
- <td>Apparaît sur la carte générale avec la Race choisie (Olympien) jusqu'à son prochain tour. X= 2*(Imposture+1). Y = 1/2*(Imposture+1) (voir sous le tableau)</td><td>/</td><td>300 pos</td><td>4</td> +
- </tr> +
- <tr class="Communs"> +
- <td class="race-Communs">Communs</td><td>Camouflage (Elfe)</td><td>Technique</td><td>Personnel</td> +
- <td>X MP, Y Mvt</td><td>/</td><td>Soi-même</td><td>/</td> +
- <td>Apparaît sur la carte générale avec la Race choisie (Elfe) jusqu'à son prochain tour. X= 2*(Imposture+1). Y = 1/2*(Imposture+1) (voir sous le tableau)</td><td>/</td><td>300 pos</td><td>4</td> +
- </tr> +
- <tr class="Communs"> +
- <td class="race-Communs">Communs</td><td>Camouflage (HS)</td><td>Technique</td><td>Personnel</td> +
- <td>X MP, Y Mvt</td><td>/</td><td>Soi-même</td><td>/</td> +
- <td>Apparaît sur la carte générale avec la Race choisie (HS) jusqu'à son prochain tour. X= 2*(Imposture+1). Y = 1/2*(Imposture+1) (voir sous le tableau)</td><td>/</td><td>300 pos</td><td>4</td> +
- </tr> +
- <tr class="Communs"> +
- <td class="race-Communs">Communs</td><td>Camouflage (Géant)</td><td>Technique</td><td>Personnel</td> +
- <td>X MP, Y Mvt</td><td>/</td><td>Soi-même</td><td>/</td> +
- <td>Apparaît sur la carte générale avec la Race choisie (Géant) jusqu'à son prochain tour. X= 2*(Imposture+1). Y = 1/2*(Imposture+1) (voir sous le tableau)</td><td>/</td><td>300 pos</td><td>4</td> +
- </tr> +
- <tr class="Communs"> +
- <td class="race-Communs">Communs</td><td>Camouflage (Nain)</td><td>Technique</td><td>Personnel</td> +
- <td>X MP, Y Mvt</td><td>/</td><td>Soi-même</td><td>/</td> +
- <td>Apparaît sur la carte générale avec la Race choisie (Nain) jusqu'à son prochain tour. X= 2*(Imposture+1). Y = 1/2*(Imposture+1) (voir sous le tableau)</td><td>/</td><td>300 pos</td><td>4</td> +
- </tr> +
- +
- +
-  </tbody> +
-</table> +
-</div> +
- +
-<script> +
-// Script pour le quatrieme tableau +
-const select4 = document.getElementById("raceSelect4"); +
-const rows4 = document.querySelectorAll("#competencesTable4 tbody tr"); +
- +
-select4.addEventListener("change", () => { +
-  const chosenRace = select4.value+
-  rows4.forEach(row => { +
-    const isCommun = row.classList.contains("Communs")+
-    const isRace = row.classList.contains(chosenRace); +
-    row.style.display (chosenRace === "Toutes" || isCommun || isRace) ? "" : "none"; +
-  });+
 }); });
-</script> 
  
 +document.querySelectorAll(".skill").forEach(s=>s.checked=false);
  
-<hr>+resetSlots(); 
 +fillEquip(); 
 +displayBase(); 
 +checkLimit(); 
 +autoCalculate(); 
 +}
  
-<!-- ================= TABLEAU 5 : Survie ================= --> +// init 
-<h3>Gestion des compétences — Techniques de Survie</h3> +autoCalculate();
-<label for="raceSelect5">Choisir une race :</label> +
-<select id="raceSelect5"> +
-  <option value="Toutes">Toutes</option> +
-  <option value="Communs">Communs</option> +
-  <option value="Nain">Nain</option> +
-  <option value="Géant">Géant</option> +
-  <option value="Olympien">Olympien</option> +
-  <option value="HS">HS</option> +
-  <option value="Elfe">Elfe</option> +
-</select>+
  
-<div class="table-container"> 
-<table id="competencesTable5"> 
-<thead> 
-<tr> 
-<th>Race</th><th>Nom</th><th>Type</th><th>Catégorie</th> 
-<th>Coût</th><th>Bonus / Malus</th><th>Cible</th><th>Portée</th> 
-<th>Description</th><th>Cumulable</th><th>Prix</th><th>Niveau</th> 
-</tr> 
-</thead> 
-<tbody> 
  
  
 +// ===== POUSSEE =====
 +function calculatePush(){
  
 +let F=+pushF.value;
 +let buff=+pushBuff.value;
  
- <!-- ================= COMMUNS ================= -->+let E=+pushE.value; 
 +let agi=+pushAgi.value; 
 +let pv=+pushPV.value;
  
- <tr class="Communs"> +let instability=+pushDebuff.value; 
-<td class="race-Communs">Communs</td><td>Encaisser</td><td>Technique</td><td>Personnel</td> +let stability=+pushStab.value;
-<td>6 MP</td><td>/</td><td>Soi-même</td><td>/</td> +
-<td>Donne Encaisse au personnage jusqu'à son prochain tour</td> +
-<td>/</td><td>100 pos</td><td>2</td> +
-</tr>+
  
-<tr class="Communs"> +let attaque=F+buff; 
-<td class="race-Communs">Communs</td><td>Anguille</td><td>Passif</td><td>Passif</td> +let defense=Math.max(E+4,agi)+(pv/10)+instability+stability;
-<td>/</td><td>/</td><td>/</td><td>/</td> +
-<td>Le personnage a l'avantage quand il esquive (CC/CT)</td> +
-<td>/</td><td>300 pos</td><td>4</td> +
-</tr>+
  
-<tr class="Communs"> +pushResult.textContent= 
-<td class="race-Communs">Communs</td><td>Couverture</td><td>Passif</td><td>Passif</td> +"Attaque: "+attaque+ 
-<td>/</td><td>/</td><td>/</td><td>/</td+"\nDéfense: "+defense.toFixed(1)+ 
-<td>Le personnage esquive les Tirs à 85% CC et 15% Agi si il est équipé d'un Bouclier</td> +"\n"+(attaque>=defense?"✅ PUSH":"❌ FAIL"); 
-<td>/</td><td>300 pos</td><td>4</td> +}
-</tr>+
  
-<tr class="Communs"> +// ===== EVENTS ===== 
-<td class="race-Communs">Communs</td><td>Inépuisable</td><td>Passif</td><td>Passif</td> +document.querySelectorAll("input").forEach(i=>i.addEventListener("input",()=>{ 
-<td>/</td><td>/</td><td>/</td><td>/</td> +updateCost(); calculate(); calculatePush(); 
-<td>Les Malus appliqués par des actions adverses sont réduits de 1</td> +}));
-<td>/</td><td>300 pos</td><td>4</td> +
-</tr>+
  
-<tr class="Communs"> +document.querySelectorAll("select").forEach(i=>i.addEventListener("change",()=>{ 
-<td class="race-Communs">Communs</td><td>Réflexes fulgurants</td><td>Passif</td><td>Passif</td> +updateCost(); calculate(); calculatePush(); 
-<td>/</td><td>/</td><td>/</td><td>/</td> +}));
-<td>L'esquive des Tirs se fait à 85% Agi et 15% CC au lieu de la formule habituelle</td> +
-<td>/</td><td>300 pos</td><td>4</td> +
-</tr>+
  
-<tr class="Communs"> +// ===== INIT ===== 
-<td class="race-Communs">Communs</td><td>Volonté de fer</td><td>Passif</td><td>Passif</td> +updateCost(); 
-<td>/</td><td>/</td><td>/</td><td>/</td> +calculate(); 
-<td>Le personnage a l'avantage quand il résiste à un sort (FM)</td> +calculatePush();
-<td>/</td><td>300 pos</td><td>4</td> +
-</tr>+
  
-  </tbody> 
-</table> 
-</div> 
- 
- 
-<script> 
-// Script pour le cinquième tableau 
-const select5 = document.getElementById("raceSelect5"); 
-const rows5 = document.querySelectorAll("#competencesTable5 tbody tr"); 
- 
-select5.addEventListener("change", () => { 
-  const chosenRace = select5.value; 
-  rows3.forEach(row => { 
-    const isCommun = row.classList.contains("Communs"); 
-    const isRace = row.classList.contains(chosenRace); 
-    row.style.display = (chosenRace === "Toutes" || isCommun || isRace) ? "" : "none"; 
-  }); 
-}); 
 </script> </script>
- 
- 
 </body> </body>
 </html> </html>
brouillon7.1776632878.txt.gz · Dernière modification : 2026/04/19 23:07 de nanaki