Outils pour utilisateurs

Outils du site


brouillon3

Différences

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

Lien vers cette vue comparative

Prochaine révision
Révision précédente
brouillon3 [2026/04/18 22:01] – créée nanakibrouillon3 [2026/04/21 17:22] (Version actuelle) nanaki
Ligne 1: Ligne 1:
-===== Liste des Sorts ===== 
- 
-Un complément d'information sur certains sorts a été ajouté après le tableau de sorts. 
- 
 <html> <html>
-<head> +
-<meta charset="UTF-8"> +
-<title>Compétences — Techniques & Sorts</title>+
 <style> <style>
 body { font-family: Arial, sans-serif; margin: 10px; } 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 */ +.controls { display:flex; gap:10px; margin-bottom:10px; flex-wrap:wrap; } 
-td.race-Communs color: #555; } + 
-td.race-Nain colorred; } +#pointsBox { font-weight:bold; margin-bottom:10px;
-td.race-Géant colorsaddlebrown; } + 
-td.race-Olympien colordarkorange; } +table { width:100%; border-collapse:collapse;
-td.race-HS colordarkgreen; } +th, td { border:1px solid #ccc; padding:6px; text-align:left; } 
-td.race-Elfe colorgreen; }+th background:#f2f2f2; cursor:pointer; } 
 +tr:nth-child(even)background:#fafafa; } 
 + 
 +.offensif background:#ffe5e5; } 
 +.defensif background:#e5f0ff; } 
 +.utilitaire { background:#e5ffe5;
 + 
 +.lvl { padding:2px 6px; border-radius:4px; } 
 +.lvl-1 background:#ddd; } 
 +.lvl-background:#cce5ff; }
 </style> </style>
-</head> 
-<body> 
  
-<!-- ================= TABLEAU 1 : sorts ================= --> +<div id="pointsBox"> 
-<h3>Gestion des compétences — sorts</h3> +Points utilisés : <span id="points">0</span/ 15 
-<label for="raceSelect1">Choisir une race :</label> +</div
-<select id="raceSelect1"> + 
-  <option value="Toutes">Toutes</option+<div class="controls"> 
-  <option value="Communs">Communs</option+<select id="raceFilter"> 
-  <option value="Nain">Nain</option> +<option value="Toutes">Toutes</option> 
-  <option value="Géant">Géant</option+<option value="Communs">Communs</option>
-  <option value="Olympien">Olympien</option+
-  <option value="HS">HS</option> +
-  <option value="Elfe">Elfe</option>+
 </select> </select>
  
-<div class="table-container"> +<select id="typeFilter"> 
-<table id="competencesTable1">+<option value="Tous">Tous</option> 
 +<option value="CAC">CAC</option> 
 +<option value="Distance">Distance</option> 
 +<option value="Sort">Sort</option> 
 +</select> 
 + 
 +<input type="text" id="search" placeholder="Rechercher..."> 
 +</div> 
 + 
 +<table id="table">
 <thead> <thead>
 <tr> <tr>
-<th>Race</th><th>Nom de la compétence</th><th>Type</th><th>Catégorie</th> +<th onclick="sortTable(0)">Choix</th> 
-<th>Coût (PM)</th><th>Bonus / Malus</th><th>Cible</th><th>Portée</th> +<th onclick="sortTable(1)">Race</th> 
-<th>Description</th><th>Cumulable</th><th>Prix</th>+<th onclick="sortTable(2)">Nom</th> 
 +<th onclick="sortTable(3)">Type</th> 
 +<th>Effet</th> 
 +<th onclick="sortTable(5)">Niveau</th>
 </tr> </tr>
 </thead> </thead>
-  <tbody> 
  
-<!-- ================= COMMUNS ================= -->+<tbody>
  
-<tr class="Communs"+<tr class="Communs offensifdata-type="CAC" data-level="1"> 
-<td class="race-Communs">Communs</td><td>Arcanes précises</td><td>Sort</td><td>Offensif</td> +<td><input type="checkbox" class="skill"></td> 
-<td>6 MP</td><td>+4 au toucher</td><td>Autre</td><td>min 2</td> +<td>Communs</td> 
-<td>Bonus de +4 pour toucher</td><td>/</td><td>50 pos</td>+<td>Attaque précise</td> 
 +<td>CAC</td> 
 +<td>+4 toucher, -3 dégâts</td> 
 +<td><span class="lvl lvl-1">1</span></td>
 </tr> </tr>
  
-<tr class="Communs"+<tr class="Communs offensifdata-type="Distance" data-level="1"> 
-<td class="race-Communs">Communs</td><td>Arcanes violentes</td><td>Sort</td><td>Offensif</td> +<td><input type="checkbox" class="skill"></td> 
-<td>6 MP</td><td>-6 au toucher, +5 dégâts</td><td>Autre</td><td>min 2</td> +<td>Communs</td> 
-<td>Malus de -6 pour toucher, bonus +5 dégâts</td><td>/</td><td>50 pos</td>+<td>Arme improvisée</td> 
 +<td>Distance</td> 
 +<td>-toucher, -2 dégâts</td> 
 +<td><span class="lvl lvl-1">1</span></td>
 </tr> </tr>
  
-<tr class="Communs"+<tr class="Communs utilitairedata-type="Sort" data-level="1"> 
-<td class="race-Communs">Communs</td><td>Aveuglement</td><td>Sort</td><td>Malédiction</td> +<td><input type="checkbox" class="skill"></td> 
-<td>4 MP</td><td>-1 P</td><td>Autre</td><td>min 2</td> +<td>Communs</td> 
-<td>Aveuglement (x1)</td><td>non cumulable</td><td>50 pos</td>+<td>Arcane ajustée</td> 
 +<td>Sort</td> 
 +<td>Avantage au toucher</td> 
 +<td><span class="lvl lvl-1">1</span></td>
 </tr> </tr>
  
-<tr class="Communs"> +</tbody
-<td class="race-Communs">Communs</td><td>Coup précis</td><td>Sort</td><td>Bénédiction</td> +</table>
-<td>4 MP</td><td>Dextérité (x2)</td><td>Autre / Soi-même</td><td>max 1</td> +
-<td>Dextérité (x2)</td><td>non cumulable</td><td>50 pos</td+
-</tr>+
  
-<tr class="Communs"+<script
-<td class="race-Communs">Communs</td><td>Épuisement arcanique</td><td>Sort</td><td>Malédiction</td> +const maxPoints 15;
-<td>4 MP</td><td>Essoufflement (X/3)</td><td>Autre</td><td>min 2</td> +
-<td>Jet de FM pur. Essoufflement (X/3)</td><td>Effet immédiat. Cumul possible.</td><td>50 pos</td> +
-</tr>+
  
-<tr class="Communs"> +const raceFilter document.getElementById("raceFilter"); 
-<td class="race-Communs">Communs</td><td>Maladresse</td><td>Sort</td><td>Malédiction</td> +const typeFilter document.getElementById("typeFilter"); 
-<td>4 MP</td><td>Maladresse (x2)</td><td>Autre</td><td>min 2</td> +const search = document.getElementById("search"); 
-<td>Maladresse (x2)</td><td>non cumulable</td><td>50 pos</td> +const rows = document.querySelectorAll("#table tbody tr"); 
-</tr>+const checkboxes = document.querySelectorAll(".skill"); 
 +const pointsDisplay = document.getElementById("points");
  
-<tr class="Communs"> +function updatePoints(e){ 
-<td class="race-Communs">Communs</td><td>Peau de granit</td><td>Sort</td><td>Bénédiction</td> +  let total = 0;
-<td>4 MP</td><td>Protection (x2)</td><td>Autre / Soi-même</td><td>max 1</td> +
-<td>Protection (x2)</td><td>non cumulable</td><td>50 pos</td> +
-</tr>+
  
-<tr class="Communs"+  checkboxes.forEach(cb => { 
-<td class="race-Communs">Communs</td><td>Restauration mineure</td><td>Sort</td><td>Bénédiction</td> +    if(cb.checked) total++; 
-<td>6 MP</td><td>-5 malus</td><td>Autre / Soi-même</td><td>max 1</td> +  });
-<td>Enlève 5 points de Malus</td><td>Effet immédiat, cumul possible</td><td>50 pos</td> +
-</tr>+
  
-<tr class="Communs"+  if(total maxPoints){ 
-<td class="race-Communs">Communs</td><td>Vulnérabilité</td><td>Sort</td><td>Malédiction</td> +    e.target.checked false; 
-<td>6 MP</td><td>Vulnérabilité (x2)</td><td>Autre</td><td>min 2</td> +    return; 
-<td>Vulnérabilité (x2)</td><td>non cumulable</td><td>50 pos</td> +  }
-</tr>+
  
-<tr class="Communs"> +  pointsDisplay.textContent total;
-<td class="race-Communs">Communs</td><td>Enchevêtrement</td><td>Sort</td><td>Offensif</td> +
-<td>6 MP</td><td>+1 dégât, Ralentissement (1D2)</td><td>Autre</td><td>min 2</td> +
-<td>Ralentissement (1D2)</td><td>non cumulable</td><td>100 pos</td> +
-</tr>+
  
-<!-- ================= RACES ================= -->+  if(total >maxPoints){ 
 +    checkboxes.forEach(cb => { 
 +      if(!cb.checked) cb.disabled true; 
 +    }); 
 +  } else { 
 +    checkboxes.forEach(cb => cb.disabled false); 
 +  } 
 +}
  
 +checkboxes.forEach(cb => {
 +  cb.addEventListener("change", updatePoints);
 +});
  
-<tr class="HS"> +function filter(){ 
-<td class="race-HS">HS</td><td>Dard</td><td>Sort</td><td>Offensif</td> +  const term search.value.toLowerCase();
-<td>3 PM</td><td>+1</td><td>Autre</td><td>min 2</td> +
-<td>Projette un dard sur l'adversaire.</td><td>/</td><td>100 po</td> +
-</tr>+
  
-<tr class="HS"> +  rows.forEach(row=>
-<td class="race-HS">HS</td><td>Aiguillon</td><td>Sort</td><td>Offensif</td> +    const raceOk = raceFilter.value==="Toutes|| row.classList.contains(raceFilter.value); 
-<td>4 PM</td><td>+3</td><td>Autre</td><td>min 2</td> +    const typeOk = typeFilter.value==="Tous|| row.dataset.type===typeFilter.value; 
-<td>Projette un aiguillon sur l’adversaire.</td><td>/</td><td>100 po</td> +    const textOk = row.innerText.toLowerCase().includes(term);
-</tr>+
  
-<tr class="HS"+    row.style.display (raceOk && typeOk && textOk) ? "" "none"; 
-<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> +
-</tr>+
  
 +raceFilter.onchange = filter;
 +typeFilter.onchange = filter;
 +search.oninput = filter;
  
-<tr class="HS"> +function sortTable(col){ 
-<td class="race-HS">HS</td><td>Arme Vivante *</td><td>Sort</td><td>Offensif</td> +  const tbody document.querySelector("#table tbody"); 
-<td>12 PM</td><td>+M</td><td>Autre</td><td>max 1</td> +  const rowsArr = Array.from(tbody.rows);
-<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> +
-</tr>+
  
-<tr class="HS"+  rowsArr.sort((a,b)=>a.cells[col].innerText.localeCompare( 
-<td class="race-HS">HS</td><td>Taillade illusoire</td><td>Sort</td><td>Offensif</td> +    b.cells[col].innerText, 
-<td>10 PM</td><td>+6</td><td>Autre</td><td>max 3</td> +    undefined, 
-<td>Des crocs et des griffes spectraux assaillent votre adversaire de toute part.</td><td>/</td><td>300 po</td> +    {numeric:true} 
-</tr>+  ));
  
-<tr class="Elfe"+  rowsArr.forEach(r=>tbody.appendChild(r)); 
-<td class="race-Elfe">Elfe</td><td>Aiguillon</td><td>Sort</td><td>Offensif</td> +} 
-<td>4 PM</td><td>+3</td><td>Autre</td><td>min 2</td> +</script>
-<td>Projette un aiguillon sur l’adversaire.</td><td>/</td><td>100 po</td> +
-</tr>+
  
-<tr class="Elfe"> +</html>
-<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> +
-</tr>+
  
-<tr class="Elfe"> 
-<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> 
-</tr> 
  
-<tr class="Elfe"> 
-<td class="race-Elfe">Elfe</td><td>Trait Béni *</td><td>Sort</td><td>Offensif</td> 
-<td>12 PM</td><td>+M</td><td>Autre</td><td>min 2</td> 
-<td>Ajoute des dégâts magiques lors d'une attaque au tir. La caractéristique de touche pour ce sort est la CT. L'attaquant fait en dégâts F+M et la cible encaisse avec E+M.</td><td>/</td><td>300 po</td> 
-</tr> 
  
-<tr class="Elfe"> 
-<td class="race-Elfe">Elfe</td><td>Glaciation</td><td>Sort</td><td>Offensif</td> 
-<td>8 PM</td><td>+6</td><td>Autre</td><td>max 2</td> 
-<td>Vous devenez froids comme l'hiver et propagez cette froideur à un ennemi proche.</td><td>/</td><td>300 po</td> 
-</tr> 
  
-<tr class="Géant"> +<html>
-<td class="race-Géant">Géant</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> +
-</tr>+
  
-<tr class="Géant"+<style
-<td class="race-Géant">Géant</td><td>Boule de Magma</td><td>Sort</td><td>Offensif</td> +table { width:100%; border-collapse:collapse; } 
-<td>7 PM</td><td>+3 + effet Feu</td><td>Autre</td><td>min 2</td> +th, td { border:1px solid #ccc; padding:6px; }
-<td>Lance une boule de lave en fusion sur l'adversairequi prend feu.</td><td>effet non cumulable</td><td>100 po</td> +
-</tr>+
  
-<tr class="Géant"> +tr[data-effect="offensif"] { background:#ffe5e5; } 
-<td class="race-Géant">Géant</td><td>Régénération</td><td>Sort</td><td>Bénédiction</td> +tr[data-effect="defensif"] { background:#e5f0ff; } 
-<td>6 PM</td><td></td><td>Autre</td><td>max 1</td> +tr[data-effect="malediction"] { background:#eadcff; }
-<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> +
-</tr>+
  
-<tr class="Géant"> +th { background:#f2f2f2; } 
-<td class="race-Géant">Géant</td><td>Météore *</td><td>Sort</td><td>Offensif</td> +</style>
-<td>12 PM</td><td>+M + effet Feu</td><td>Autre</td><td>min 2</td> +
-<td>Ajoute des dégâts magiques et de feu à une attaque au jet de pierre. La caractéristique de touche pour ce sort est la CT. Une pierre doit être équipée pour lancer le sort. L'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> +
-</tr>+
  
-<tr class="Géant"> +<table>
-<td class="race-Géant">Géant</td><td>Souffle des cimes</td><td>Sort</td><td>Offensif</td> +
-<td>8 PM</td><td>+6</td><td>Autre</td><td>max 2</td> +
-<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> +
-</tr>+
  
- +<thead> 
-<tr class="Nain"+<tr> 
-<td class="race-Nain">Nain</td><td>Pic de Pierre</td><td>Sort</td><td>Offensif</td+<th>Race</th
-<td>4 PM</td><td>+3</td><td>Autre</td><td>min 2</td+<th>Nom</th
-<td>Projette un pic de pierre sur l’adversaire.</td><td>/</td><td>100 po</td+<th>Type</th
-</tr> +<th>Coût</th
- +<th>Effet</th
-<tr class="Nain"> +<th>Niveau</th>
-<td class="race-Nain">Nain</td><td>Poings de Pierre</td><td>Sort</td><td>Offensif</td+
-<td>8 PM</td><td>+8</td><td>Autre</td><td>max 1</td+
-<td>Vos poings deviennent durs comme de la roche millénaire, que vous abattez sur vos ennemis.</td><td>/</td><td>300 po</td>+
 </tr> </tr>
 +</thead>
  
 +<tbody>
  
-<tr class="Olympien"+<!-- 🔥 OFFENSIF --> 
-<td class="race-Olympien">Olympien</td><td>Lame Volante</td><td>Sort</td><td>Offensif</td> +<tr class="Communsdata-type="Sort" data-effect="offensif"> 
-<td>PM</td><td>+3</td><td>Autre</td><td>min 2</td> +<td>Communs</td> 
-<td>Projette une lame magique sur l'adversaire.</td><td>/</td><td>100 po</td>+<td>Boule de feu</td> 
 +<td>Sort</td> 
 +<td>PM</td> 
 +<td>Dégâts de feu brûlure</td> 
 +<td>1</td>
 </tr> </tr>
  
-<tr class="Olympien"+<!-- 🛡 DÉFENSIF --> 
-<td class="race-Olympien">Olympien</td><td>Imposition des Mains</td><td>Sort</td><td>Bénédiction</td> +<tr class="Communsdata-type="Sort" data-effect="defensif"> 
-<td>PM</td><td>+3</td><td>Autre</td><td>max 1</td> +<td>Communs</td> 
-<td>Toucher magique pour soigner un blessé.</td><td>/</td><td>100 po</td>+<td>Entraide</td> 
 +<td>Sort</td> 
 +<td>PM</td> 
 +<td>Soigne un allié et lui donne un bonus défensif</td> 
 +<td>1</td>
 </tr> </tr>
  
-<tr class="Olympien"+<!-- ☠️ MALÉDICTION --> 
-<td class="race-Olympien">Olympien</td><td>Lame Bénie *</td><td>Sort</td><td>Offensif</td> +<tr class="Communsdata-type="Sort" data-effect="malediction"> 
-<td>12 PM</td><td>+M</td><td>Autre</td><td>max 1</td> +<td>Communs</td> 
-<td>Ajoute des dégâts magiques lors d'une attaque de mêlée. La caractéristique de touche pour ce sort 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>Maudit</td> 
 +<td>Sort</td> 
 +<td>PM</td> 
 +<td>Réduit les capacités de la cible</td> 
 +<td>1</td>
 </tr> </tr>
  
-<tr class="Olympien"> +</tbody>
-<td class="race-Olympien">Olympien</td><td>Soumission divine</td><td>Sort</td><td>Offensif</td> +
-<td>8 PM</td><td>+6</td><td>Autre</td><td>max 2</td> +
-<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> +
-</tr>+
  
-</tbody> 
 </table> </table>
-</div> 
  
-<script> +</html>
-// Script pour le premier tableau +
-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> 
  
-<!-- ================= TABLEAU 2 : Sorts ================= --> +<html>
-<h3>Gestion des compétences — Techniques Corps à corps</h3> +
-<label for="raceSelect2">Choisir une race :</label> +
-<select id="raceSelect2"> +
-  <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"+<style
-<table id="competencesTable2"> +body { font-family: Arial, sans-serif; margin: 10px; }
-<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> +
-</tr> +
-</thead> +
-<tbody>+
  
-    <!-- ===== COMMUNS ===== --> +.controls { display:flex; gap:10px; margin-bottom:10px; flex-wrap:wrap}
-      <tr class="Communs"><td class="race-Communs">Communs</td><td>Epuisement</td><td>Technique</td><td>Contact</td><td>/</td><td><span style="colorred;">Essouflement(X/2)</span></td><td>Autre</td><td>max 1</td><td>Ne fait pas de dégâts. Jet de CC pur. Essouflement(X/2) où 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></tr> +
-      <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></tr> +
-      <tr class="Communs"><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></tr> +
-      <tr class="Communs"><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></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></tr> +
-      <tr class="Communs"><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></tr>+
  
-    <!-- ===== NAINS ===== --> +#pointsBox { font-weight:bold; margin-bottom:10px; }
-          <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></tr> +
-      <tr class="Nain"><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></tr> +
-      <tr class="Nain"><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></tr> +
-      <tr class="Nain"><td class="race-Nain">Nain</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></tr>+
  
-    <!-- ===== GÉANTS ===== --> +table { width:100%; border-collapse:collapse;
-    <tr class="Géant"> +th, td { border:1px solid #ccc; padding:6px; text-align:left; } 
-      <td class="race-Géant">Géant</td><td>Uppercut</td><td>Technique</td><td>Contact</td> +th { background:#f2f2f2; cursor:pointer; } 
-      <td>8 PM</td><td>+3 dégâts (coup critique automatique)</td><td>Autre</td><td>max 1</td> +tr:nth-child(even){ background:#fafafa; }
-      <td>Inflige un coup critique automatique à une cible au contact +3 dégâts sur la cible.</td><td>/</td><td>200 po</td> +
-    </tr>+
  
-    <tr class="Géant"> +.offensif { background:#ffe5e5; } 
-      <td class="race-Géant">Géant</td><td>Leurre</td><td>Technique</td><td>Contact</td> +.defensif { background:#e5f0ff; } 
-      <td>8 PM</td><td></td><td>Soi-même</td><td>0</td> +.utilitaire { background:#e5ffe5; } 
-      <td>Leurre la prochaine attaque magique de l'adversaire.</td><td>/</td><td>200 po</td> +.malediction { background:#eadcff; }
-    </tr>+
  
-    <!-- ===== OLYMPIENS ===== --> +.lvl { padding:2px 6px; border-radius:4px; } 
-    <tr class="Olympien"> +.lvl-1 { background:#ddd; } 
-      <td class="race-Olympien">Olympien</td><td>Désarmement</td><td>Technique</td><td>Contact</td> +.lvl-2 { background:#cce5ff; }
-      <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> +
-    </tr>+
  
-    <tr class="Olympien"> +</style>
-      <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> +
-    </tr>+
  
-    <!-- ===== HS ===== --> +<div id="pointsBox"> 
-    <tr class="HS"> +Points utilisés : <span id="points">0</span> / 15 
-      <td class="race-HS">HS</td><td>Griffes</td><td>Technique</td><td>Contact</td> +</div>
-      <td>6 PM</td><td>+3 + poison + poison magique</td><td>Autre</td><td>max 1</td> +
-      <td>Inflige poison + poison magique.</td><td>/</td><td>200 po</td> +
-    </tr>+
  
-    <!-- ===== ELFES ===== --> +<div class="controls">
-    <tr class="Elfe"+
-      <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> +
-    </tr>+
  
-    <tr class="Elfe"> +<select id="raceFilter"> 
-      <td class="race-Elfe">Elfe</td><td>Pas de côté</td><td>Technique</td><td>Contact</td+<option value="Toutes">Toutes</option
-      <td>7 PM + 1 Mvt</td><td></td><td>Soi-même</td><td>0</td> +<option value="Communs">Communs</option
-      <td>Esquive la prochaine attaque physique en se déplaçant aléatoirement d'une case.</td><td>/</td><td>200 po</td+</select>
-    </tr>+
  
-  </tbody+<select id="typeFilter"> 
-</table+<option value="Tous">Tous types</option
-</div>+<option value="CAC">CAC</option> 
 +<option value="Distance">Distance</option> 
 +<option value="Sort">Sort</option
 +</select>
  
-<script+<select id="effectFilter"
-// Script pour le second tableau +<option value="Tous">Tous effets</option> 
-const select2 document.getElementById("raceSelect2"); +<option value="offensif">Offensif</option> 
-const rows2 document.querySelectorAll("#competencesTable2 tbody tr");+<option value="defensif">Soutien / Défensif</option> 
 +<option value="malediction">Malédiction</option> 
 +</select>
  
-select2.addEventListener("change", () => { +<input type="textid="searchplaceholder="Rechercher...">
-  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>+
  
 +</div>
  
-<hr> +<table id="table">
- +
-<!-- ================= TABLEAU 3 : Techniques Distance ================= --> +
-<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> <thead>
 <tr> <tr>
-<th>Race</th><th>Nom</th><th>Type</th><th>Catégorie</th> +<th>Choix</th> 
-<th>Coût</th><th>Bonus / Malus</th><th>Cible</th><th>Portée</th> +<th>Race</th> 
-<th>Description</th><th>Cumulable</th><th>Prix</th>+<th>Nom</th> 
 +<th>Type</th> 
 +<th>Effet</th> 
 +<th>Niveau</th>
 </tr> </tr>
 </thead> </thead>
 +
 <tbody> <tbody>
  
-<!-- ================= COMMUNS ================= -->+<!-- SORTS AJOUTES -->
  
-<tr class="Communs"+<tr class="Communs offensifdata-type="Sort" data-level="1" data-effect="offensif"> 
-<td class="race-Communs">Communs</td><td>Tir épuisant</td><td>Technique</td><td>Tir munitions</td> +<td><input type="checkbox" class="skill"></td> 
-<td>/</td><td>Essoufflement (X/3)</td><td>Autre</td><td>min 2</td> +<td>Communs</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>Boule de feu</td> 
 +<td>Sort</td> 
 +<td>Dégâts de feu + brûlure</td> 
 +<td><span class="lvl lvl-1">1</span></td>
 </tr> </tr>
  
- +<tr class="Communs defensifdata-type="Sort" data-level="1" data-effect="defensif"> 
-<tr class="Communs"+<td><input type="checkbox" class="skill"></td> 
-<td class="race-Communs">Communs</td><td>Tir précis </td><td>Technique</td><td>Distance</td> +<td>Communs</td> 
-<td>2 MP</td><td>+4 au toucher, -3 dégâts</td><td>Autre</td><td>min 2</td> +<td>Entraide</td> 
-<td>Bonus +4 au toucher, Malus de 3 aux dégâts </td><td>/</td><td>50 pos</td>+<td>Sort</td> 
 +<td>Soigne et protège un allié</td> 
 +<td><span class="lvl lvl-1">1</span></td>
 </tr> </tr>
  
-<tr class="Communs"+<tr class="Communs maledictiondata-type="Sort" data-level="1" data-effect="malediction"> 
-<td class="race-Communs">Communs</td><td>Tir violent</td><td>Technique</td><td>Distance</td> +<td><input type="checkbox" class="skill"></td> 
-<td>2 MP</td><td>-6 au toucher, +2 dégâts</td><td>Autre</td><td>min 2</td> +<td>Communs</td> 
-<td>Malus de -6 pour toucher, bonus +2 dégâts</td><td>/</td><td>50 pos</td>+<td>Maudit</td> 
 +<td>Sort</td> 
 +<td>Affaiblit la cible</td> 
 +<td><span class="lvl lvl-1">1</span></td>
 </tr> </tr>
  
-<tr class="Communs"> +</tbody>
-<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> +
-</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> +
-</tr> +
- +
-<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> +
-</tr> +
- +
- +
-  </tbody>+
 </table> </table>
-</div> 
  
 <script> <script>
-// Script pour le troisieme tableau +const maxPoints 15;
-const select3 document.getElementById("raceSelect3"); +
-const rows3 = document.querySelectorAll("#competencesTable3 tbody tr");+
  
-select3.addEventListener("change", (=> { +const raceFilter = document.getElementById("raceFilter"); 
-  const chosenRace select3.value+const typeFilter document.getElementById("typeFilter")
-  rows3.forEach(row => { +const effectFilter = document.getElementById("effectFilter"); 
-    const isCommun row.classList.contains("Communs"); +const search document.getElementById("search"); 
-    const isRace row.classList.contains(chosenRace); +const rows document.querySelectorAll("#table tbody tr"); 
-    row.style.display = (chosenRace === "Toutes|| isCommun || isRace? "" : "none"+const checkboxes = document.querySelectorAll(".skill"); 
-  }); +const pointsDisplay = document.getElementById("points");
-}); +
-</script>+
  
 +function updatePoints(e){
 +  let total = 0;
  
-<hr>+  checkboxes.forEach(cb =
 +    if(cb.checked) total++; 
 +  });
  
-<!-- ================= TABLEAU 4 : Furtivité ================= --+  if(total maxPoints){ 
-<h3>Gestion des compétences — Techniques Furtivité</h3> +    e.target.checked false; 
-<label for="raceSelect4">Choisir une race :</label> +    return; 
-<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"> +  pointsDisplay.textContent total;
-<table id="competencesTable4"> +
-<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> +
-</tr> +
-</thead> +
-<tbody>+
  
 +  if(total >= maxPoints){
 +    checkboxes.forEach(cb => {
 +      if(!cb.checked) cb.disabled = true;
 +    });
 +  } else {
 +    checkboxes.forEach(cb => cb.disabled = false);
 +  }
 +}
  
 +checkboxes.forEach(cb => cb.addEventListener("change", updatePoints));
  
 +function filter(){
 +  const term = search.value.toLowerCase();
  
- <!-- ================= COMMUNS ================= -->+  rows.forEach(row=>{
  
- <tr class="Communs"> +    const raceOk = raceFilter.value==="Toutes|| row.classList.contains(raceFilter.value); 
- <td class="race-Communs">Communs</td><td>Exploration</td><td>Technique</td><td>Personnel</td> +    const typeOk = typeFilter.value==="Tous|| row.dataset.type===typeFilter.value; 
- <td>Toutes les A restantes </td><td>+X P</td><td>Soi-même</td><td>/</td> +    const effectOk = effectFilter.value==="Tous" || row.dataset.effect===effectFilter.value; 
- <td>Le personnage gagne Acuité visuelle (xoù x est le nombre d'actions dépensées jusqu'au prochain tour</td><td>/</td><td>50 pos</td> +    const textOk = row.innerText.toLowerCase().includes(term);
- </tr>+
  
 +    row.style.display = (raceOk && typeOk && effectOk && textOk) ? "" : "none";
 +  });
 +}
  
- <tr class="Communs"> +raceFilter.onchange filter; 
- <td class="race-Communs">Communs</td><td>Discrétion</td><td>Technique</td><td>Personnel</td> +typeFilter.onchange filter; 
- <td>X MP, Y Mvt </td><td></td><td>Soi-même</td><td>/</td> +effectFilter.onchange filter; 
- <td>Le personnage n'apparaîtra pas sur la carte générale jusqu'à son prochain tourX2*(Furtivité+1)1/2*(Furtivité+1) (voir sous le tableau)</td><td>/</td><td>200 pos</td> +search.oninput filter;
- </tr>+
  
- <tr class="Communs"> +function sortTable(col){ 
- <td class="race-Communs">Communs</td><td>Camouflage (Olympien)</td><td>Technique</td><td>Personnel</td> +  const tbody document.querySelector("#table tbody"); 
- <td>X MP, Y Mvt</td><td>/</td><td>Soi-même</td><td>/</td> +  const rowsArr Array.from(tbody.rows);
- <td>Apparaît sur la carte générale avec la Race choisie (Olympien) jusqu'à son prochain tour. X2*(Furtivité+1)Y = 1/2*(Furtivité+1) (voir sous le tableau)</td><td>/</td><td>300 pos</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. X2*(Furtivité+1)Y = 1/2*(Furtivité+1) (voir sous le tableau)</td><td>/</td><td>300 pos</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 tourX= 2*(Furtivité+1). Y = 1/2*(Furtivité+1) (voir sous le tableau)</td><td>/</td><td>300 pos</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*(Furtivité+1). Y = 1/2*(Furtivité+1) (voir sous le tableau)</td><td>/</td><td>300 pos</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*(Furtivité+1). Y = 1/2*(Furtivité+1) (voir sous le tableau)</td><td>/</td><td>300 pos</td> +
- </tr>+
  
-  </tbody> +  rowsArr.sort((a,b)=>a.cells[col].innerText.localeCompare(b.cells[col].innerText,undefined,{numeric:true}));
-</table> +
-</div>+
  
- +  rowsArr.forEach(r=>tbody.appendChild(r)); 
-  </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; +
-  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> 
 </html> </html>
- 
- 
- 
- 
-**Fonctionnement de la carte sur Olympia** :  
->1) Tous les joueurs sur Olympia apparaissent en points noirs sur la carte du monde. 
-> 
->2) Dans un rayon de 15 cases autour de sa position, un joueur voit la couleur de la race des  autres personnages. 
-> 
->3) Si le personnage se déplace, la couleur se met à jour en fonction de la nouvelle position. 
- 
-  
-**Fonctionnement des compétences de discrétion **: 
->1) Lorsque le personnage utilise la compétence "discrétion", il n'apparait plus sur la carte du monde __**jusqu'à sa prochaine activation**__. L'icone Furtivité apparait avec un décompte.  
-> 
->Lors de son prochain tour, pour être de nouveau invisible sur la carte du monde, le joueur devra relancer la compétence "discrétion" (au plus tôt pour apparaitre le moins longtemps possible sur la carte du monde). 
-> 
->2) Pour éviter que ce soit trop simple de rester furtif, le coût augmente à mesure du nombre d'utilisations successives le compétence.  
-> 
->3) Utiliser une compétence de discrétion (Discrétion pour le moment) ajoute une charge de l'Effet "Furtivité" pour 48h qui se stack et dont la durée se réinitialise à chaque utilisation de Discrétion. Chaque charge de "Furtivité" augmente les coûts des compétences de discrétion.  
-> 
->4) Pour réinitialiser le coût des compétences de discrétion, il faut perdre l'effet Furtivité (donc ne pas utiliser de compétence de discrétion pendant 48h) 
-> 
->5)Avec la compétence Discrétion, __**on est invisible uniquement sur la carte globale et non sur les mini map (ville et sous plans)**__. 
- 
- 
  
brouillon3.1776542512.txt.gz · Dernière modification : 2026/04/18 22:01 de nanaki