ajout de descriptions et mécaniques

This commit is contained in:
2026-03-08 15:31:28 +04:00
parent 5bc965379b
commit c66863d07f
48 changed files with 1328 additions and 320 deletions

View File

@@ -1,5 +1,34 @@
---
title: "Barbare"
description: "Un combattant de première ligne qui puise dans une réserve de fureur intérieure appelée Rage pour surpasser ses limites physiques."
encre: "martial"
description: "Guerrier sauvage entrant dans une rage dévastatrice, il puise sa force dans son instinct primaire."
de_vie: "d12"
stats_prioritaires:
- "Force"
- "Constitution"
evolution:
"1":
- "Rage"
- "Défense sans armure"
"2":
- "Rage"
- "Défense sans armure"
- "Sens du danger"
- "Témérité"
"3":
- "Rage"
- "Défense sans armure"
- "Sens du danger"
- "Témérité"
- "Primal Path"
---
Le Barbare se définit par sa capacité à absorber des dégâts considérables tout en infligeant des frappes puissantes au corps à corps. Contrairement au Guerrier qui mise sur la technique, le Barbare mise sur l'instinct et la résilience.
### Capacités fondamentales
* **Rage :** En combat, le Barbare peut entrer dans un état de fureur. Il obtient alors un bonus aux dégâts de corps à corps, une résistance aux dégâts physiques (contandants, perforants, tranchants) et un avantage sur les tests de Force.
* **Défense sans armure :** Lorsqu'il ne porte aucune armure, sa robustesse naturelle lui permet d'ajouter son modificateur de Constitution à sa Classe d'Armure.
* **Sens du danger :** (Niveau 2) Une intuition fulgurante qui lui permet d'esquiver les effets de zone comme les pièges ou les sorts.
Les Barbares sont souvent issus de cultures vivant en marge de la civilisation, privilégiant la survie et la force brute.

View File

@@ -1,5 +1,35 @@
---
title: "Barde"
encre: "arcane" # L'encre de pouvoir (Bleu)
description: "Maître de la magie par le son et les mots, il inspire ses compagnons et manipule l'esprit de ses ennemis."
description: "Un maître de la chanson, de la parole et de la magie, capable d'inspirer ses alliés et de manipuler l'esprit de ses ennemis."
encre: "arcane"
de_vie: "d8"
stats_prioritaires:
- "Charisme"
- "Dextérité"
evolution:
"1":
- "Inspiration bardique"
- "Lancement de sorts"
"2":
- "Inspiration bardique"
- "Lancement de sorts"
- "Touche-à-tout"
- "Chant de repos"
"3":
- "Inspiration bardique"
- "Lancement de sorts"
- "Touche-à-tout"
- "Chant de repos"
- "Collège bardique"
- "Expertise"
---
Le Barde utilise les vibrations de l'univers pour manifester sa volonté. Que ce soit par la musique, la poésie ou l'éloquence, il est le cœur du groupe, renforçant le moral de ses compagnons tout en affaiblissant ses adversaires par des railleries magiques.
### Capacités fondamentales
* **Inspiration bardique :** Vous pouvez inspirer les autres par vos mots ou votre musique. Pour ce faire, vous utilisez une action bonus lors de votre tour pour choisir une créature autre que vous-même dans un rayon de 18 mètres.
* **Touche-à-tout :** (Niveau 2) Vous pouvez ajouter la moitié de votre bonus de maîtrise à tout test de caractéristique que vous faites et qui n'inclut pas déjà ce bonus.
* **Chant de repos :** (Niveau 2) Vous pouvez utiliser une musique ou une narration apaisante pour aider vos alliés blessés à récupérer leurs forces durant un court repos.
Les Bardes croient que l'univers a été créé par la parole et que les échos de ces mots créateurs résonnent encore dans chaque objet et chaque être.

View File

@@ -1,5 +1,34 @@
---
title: "Clerc"
description: "Canal de la puissance divine, le Clerc utilise sa foi pour soigner ses alliés, protéger les faibles et foudroyer les impies."
encre: "divin"
description: "Canal de la puissance divine, il soigne ses alliés et foudroie les impies par sa foi."
de_vie: "d8"
stats_prioritaires:
- "Sagesse"
- "Force ou Constitution"
evolution:
"1":
- "Lancement de sorts"
- "Domaine divin"
"2":
- "Lancement de sorts"
- "Domaine divin"
- "Canalisation d'énergie"
- "Renvoi des morts-vivants"
"3":
- "Lancement de sorts"
- "Domaine divin"
- "Canalisation d'énergie"
- "Renvoi des morts-vivants"
- "Sorts de niveau 2"
---
Le Clerc est l'intermédiaire entre le monde mortel et les divinités. Sa magie n'est pas étudiée, elle est accordée par sa dévotion.
### Capacités fondamentales
* **Domaine Divin :** Chaque clerc choisit un domaine (Vie, Guerre, Lumière, Tempête, etc.) qui définit ses sorts bonus et ses capacités spéciales dès le premier niveau.
* **Canalisation d'Énergie :** (Niveau 2) Capacité à manifester directement la puissance de sa divinité. L'effet dépend du domaine choisi (ex: Guérir les blessés ou foudroyer un ennemi).
* **Renvoi des morts-vivants :** (Niveau 2) Par une simple prière et la présentation de son symbole sacré, le clerc peut forcer les morts-vivants à fuir sa présence.
Les Clercs ne sont pas seulement des soignants ; ils sont les remparts de leur foi, souvent vêtus d'armures lourdes pour porter la parole divine au cœur de la mêlée.

View File

@@ -1,5 +1,33 @@
---
title: "Druide"
description: "Gardien de la nature, le druide puise sa puissance dans l'énergie du monde sauvage pour soigner, protéger ou punir."
encre: "primal"
description: "Gardien de la nature, il commande aux éléments et peut adopter la forme de bêtes féroces."
de_vie: "d8"
stats_prioritaires:
- "Sagesse"
evolution:
"1":
- "Lancement de sorts"
- "Druidique (Langage)"
"2":
- "Lancement de sorts"
- "Druidique (Langage)"
- "Forme sauvage"
- "Cercle druidique"
"3":
- "Lancement de sorts"
- "Druidique (Langage)"
- "Forme sauvage"
- "Cercle druidique"
- "Sorts de niveau 2"
---
Le druide est le prolongement de la volonté de la nature. Ils s'organisent souvent en Cercles pour partager leurs traditions et veiller sur les cycles du monde.
### Capacités fondamentales
* **Druidique :** Vous connaissez le druidique, le langage secret des druides. Vous pouvez le parler et laisser des messages cachés.
* **Forme sauvage :** (Niveau 2) Par une action, vous pouvez utiliser votre magie pour prendre la forme d'une bête que vous avez déjà vue par le passé.
* **Cercle druidique :** (Niveau 2) Votre choix de cercle (Terre, Lune, Bergers, etc.) détermine l'orientation de votre magie, qu'elle soit plus axée sur le combat, le soin ou les invocations.
Les druides voient au-delà des cités de pierre, percevant le flux de la vie là où d'autres ne voient que des bois ou des déserts.

View File

@@ -1,5 +1,35 @@
---
title: "Ensorceleur"
description: "Un lanceur de sorts dont la magie provient d'une source innée, qu'il s'agisse d'un héritage lignager, d'une exposition à des forces planaires ou d'un incident cosmique."
encre: "arcane"
description: "Possédant une magie innée coulant dans ses veines, il déchaîne une puissance brute sans besoin d'étude."
de_vie: "d6"
stats_prioritaires:
- "Charisme"
- "Constitution"
evolution:
"1":
- "Lancement de sorts"
- "Origine magique"
"2":
- "Lancement de sorts"
- "Origine magique"
- "Fontaine de magie"
- "Points de sorcellerie"
"3":
- "Lancement de sorts"
- "Origine magique"
- "Fontaine de magie"
- "Points de sorcellerie"
- "Métamagie"
---
Contrairement au Magicien qui étudie les livres ou au Clerc qui prie les dieux, l'Ensorceleur *est* la magie. Son corps sert de réceptacle et de canal à une puissance brute qu'il doit apprendre à dompter.
### Capacités fondamentales
* **Points de Sorcellerie :** (Niveau 2) Vous disposez d'une réserve d'énergie interne pour créer des emplacements de sorts supplémentaires ou alimenter votre Métamagie.
* **Métamagie :** (Niveau 3) La capacité unique de modifier vos sorts au moment où vous les lancez. Vous pouvez en augmenter la portée, la durée, ou lancer un sort de manière accélérée (action bonus).
* **Origine Magique :** Votre puissance provient d'une source spécifique (Magie sauvage, Lignée draconique, Tempête, etc.) qui définit vos capacités de protection et vos bonus de dégâts.
### Le rôle de l'Ensorceleur
En raison de sa dépendance au **Charisme**, l'Ensorceleur est souvent le visage du groupe. En combat, sa Métamagie en fait le lanceur de sorts le plus flexible, capable de s'adapter à des situations désespérées en tordant les règles habituelles de l'arcane.

View File

@@ -1,5 +1,33 @@
---
title: "Guerrier"
description: "Maître des armes et du combat rapproché, le Guerrier est une force polyvalente et inarrêtable sur le champ de bataille."
encre: "martial"
description: "Maître des armes et du combat rapproché. Le Guerrier est une force inarrêtable sur le champ de bataille."
de_vie: "d10"
stats_prioritaires:
- "Force ou Dextérité"
- "Constitution"
evolution:
"1":
- "Style de combat"
- "Second souffle"
"2":
- "Style de combat"
- "Second souffle"
- "Sursaut (Action Surge)"
"3":
- "Style de combat"
- "Second souffle"
- "Sursaut (Action Surge)"
- "Archétype martial"
---
Le Guerrier est la classe la plus polyvalente en termes d'équipement. Il peut aussi bien être un chevalier en armure lourde qu'un archer d'élite ou un duelliste agile.
### Capacités fondamentales
* **Style de Combat :** Spécialisation dans une discipline précise dès le premier niveau (Archerie, Duel, Armes à deux mains, Protection).
* **Second Souffle :** Une fois par repos court, vous pouvez utiliser une action bonus pour récupérer des points de vie (1d10 + niveau de guerrier).
* **Sursaut :** (Niveau 2) Vous pouvez repousser vos limites pour effectuer une action supplémentaire durant votre tour.
* **Archétype Martial :** (Niveau 3) Le moment où vous choisissez votre spécialisation profonde (Champion, Maître de guerre, Chevalier occulte, etc.).
Le Guerrier ne compte pas sur la magie ou la rage, mais sur un entraînement rigoureux et une maîtrise parfaite de son acier.

View File

@@ -1,5 +1,33 @@
---
title: "Mage"
description: "Manipulateur des arcanes, le Mage plie la réalité à sa volonté par l'étude rigoureuse de formules et de sortilèges complexes."
encre: "arcane"
description: "Manipulateur des arcanes, le Mage plie la réalité à sa volonté avec de puissants sortilèges."
de_vie: "d6"
stats_prioritaires:
- "Intelligence"
evolution:
"1":
- "Lancement de sorts"
- "Grimoire"
- "Restauration arcane"
"2":
- "Lancement de sorts"
- "Grimoire"
- "Tradition arcanique"
- "Capacité de savant"
"3":
- "Lancement de sorts"
- "Grimoire"
- "Tradition arcanique"
- "Sorts de niveau 2"
---
Le Mage est le maître incontesté de la connaissance magique. Son pouvoir réside dans son grimoire, qu'il remplit au fil de ses découvertes.
### Capacités fondamentales
* **Grimoire :** Contrairement aux autres lanceurs de sorts, le Mage peut apprendre une infinité de sorts en les transcrivant dans son livre de sortilèges à partir de parchemins ou d'autres grimoires.
* **Restauration arcane :** Une fois par jour, après un court repos, vous pouvez récupérer une partie de votre puissance magique sous forme d'emplacements de sorts.
* **Tradition Arcanique :** (Niveau 2) Vous choisissez une école de magie spécialisée (Évocation, Illusion, Nécromancie, etc.). Cela réduit de moitié le coût et le temps nécessaires pour copier des sorts de cette école dans votre grimoire.
Le Mage ne tire pas sa force de son sang ou d'un dieu, mais d'une compréhension mathématique et philosophique des flux d'énergie qui composent le multivers.

View File

@@ -1,5 +1,32 @@
---
title: "Moine"
encre: "hybride"
description: "Maître des arts martiaux, il canalise son énergie intérieure (Ki) pour accomplir des prouesses physiques surhumaines."
encre: "hybride"
de_vie: "d8"
stats_prioritaires:
- "Dextérité"
- "Sagesse"
evolution:
"1":
- "Défense sans armure"
- "Arts martiaux"
"2":
- "Ki"
- "Mouvement sans armure"
- "Arts martiaux"
"3":
- "Ki"
- "Mouvement sans armure"
- "Tradition monastique"
- "Déviation de projectiles"
---
Le moine utilise son corps comme une arme. En canalisant son souffle, il parvient à une vitesse et une précision qui dépassent l'entendement des guerriers classiques. C'est une voie de discipline où l'esprit et le muscle ne font qu'un.
### Capacités fondamentales
* **Arts Martiaux :** Vous maîtrisez l'utilisation des attaques à mains nues et des armes de moine, vous permettant d'attaquer avec agilité plutôt qu'avec force brute.
* **Ki :** (Niveau 2) Vous puisez dans une réserve d'énergie mystique pour effectuer des actions spéciales comme le Déluge de coups, la Défense patiente ou le Pas de la tempête.
* **Tradition Monastique :** (Niveau 3) Votre engagement envers une école spécifique (Paume ouverte, Ombre, Quatre Éléments, etc.) définit vos capacités spirituelles et martiales avancées.
Le Moine ne cherche pas la richesse ou la gloire, mais la perfection de soi à travers la méditation et l'entraînement physique rigoureux.

View File

@@ -1,5 +1,33 @@
---
title: "Paladin"
description: "Chevalier lié par un serment sacré, il allie la force des armes à la protection divine pour éradiquer le mal."
encre: "divin"
description: "Chevalier lié par un serment sacré, il allie la force des armes à la protection divine."
de_vie: "d10"
stats_prioritaires:
- "Force"
- "Charisme"
evolution:
"1":
- "Sens divin"
- "Imposition des mains"
"2":
- "Style de combat"
- "Lancement de sorts"
- "Châtiment divin"
- "Imposition des mains"
"3":
- "Châtiment divin"
- "Santé divine"
- "Serment sacré"
- "Imposition des mains"
---
Le Paladin tire sa puissance de la force de son serment. S'il trahit ses convictions, son pouvoir peut se flétrir ou se corrompre.
### Capacités fondamentales
* **Imposition des mains :** Une réserve d'énergie curative permettant de soigner les blessures ou de guérir les maladies par simple contact. C'est le pilier de votre survie et de celle de vos alliés.
* **Châtiment Divin :** (Niveau 2) Capacité à convertir l'énergie magique en dégâts radiants purs lors d'une attaque au corps à corps réussie. C'est votre arme la plus redoutable contre les impies.
* **Serment Sacré :** (Niveau 3) Le moment où vous jurez fidélité à une cause spécifique (Dévotion, Vengeance, Anciens, etc.). Ce choix définit la nature de vos pouvoirs et les principes que vous devez suivre.
Le Paladin est le rempart inébranlable du groupe, alliant une armure lourde à une volonté de fer.

View File

@@ -1,5 +1,31 @@
---
title: "Rôdeur"
description: "Traqueur d'élite des terres sauvages, il survit là où les autres périssent grâce à son lien avec la faune et sa connaissance du terrain."
encre: "primal"
description: "Traqueur d'élite des terres sauvages, il survit là où les autres périssent grâce à son lien avec la faune."
de_vie: "d10"
stats_prioritaires:
- "Dextérité"
- "Sagesse"
evolution:
"1":
- "Ennemi juré"
- "Explorateur né"
"2":
- "Style de combat"
- "Lancement de sorts"
- "Explorateur né"
"3":
- "Vigilance primitive"
- "Archétype de rôdeur"
- "Lancement de sorts"
---
Le Rôdeur est le pont entre la civilisation et la nature sauvage. Il excelle dans le pistage et la survie en milieu hostile.
### Capacités fondamentales
* **Explorateur né :** Maîtrise parfaite d'un type de terrain (Forêt, Arctique, Désert) vous permettant de ne jamais vous égarer et de trouver des ressources facilement pour votre groupe.
* **Lancement de sorts :** (Niveau 2) Magie inspirée de la nature, proche de celle du Druide, mais orientée vers la traque, le camouflage et le combat à distance ou agile.
* **Archétype de Rôdeur :** (Niveau 3) Le moment où vous choisissez votre spécialisation (Chasseur, Maître des bêtes, Traqueur des ombres, etc.), définissant votre style de chasse unique.
Le Rôdeur n'est pas seulement un archer ; c'est un expert de la survie capable d'anticiper les dangers bien avant qu'ils ne surgissent du sous-bois.

View File

@@ -1,5 +1,32 @@
---
title: "Sorcier"
description: "Ayant conclu un pacte avec une entité occulte, le Sorcier manie des pouvoirs sombres et mystérieux en échange de services ou d'une part de son âme."
encre: "arcane"
description: "Ayant conclu un pacte avec une entité occulte, il manie des pouvoirs sombres et mystérieux."
de_vie: "d8"
stats_prioritaires:
- "Charisme"
evolution:
"1":
- "Patron d'outre-monde"
- "Magie de pacte"
- "Décharge occulte"
"2":
- "Patron d'outre-monde"
- "Magie de pacte"
- "Invocations occultes"
"3":
- "Patron d'outre-monde"
- "Magie de pacte"
- "Invocations occultes"
- "Don de pacte"
---
Le Sorcier ne possède pas beaucoup d'emplacements de sorts, mais ceux-ci se régénèrent beaucoup plus vite (après un court repos) et sont toujours lancés à leur puissance maximale.
### Capacités fondamentales
* **Patron d'outre-monde :** Votre source de pouvoir est une entité spécifique (Fielon, Grand Ancien, Archifée). Ce choix définit vos sorts bonus et vos capacités de protection dès le premier niveau.
* **Invocations occultes :** (Niveau 2) Des fragments de savoir interdit qui modifient vos capacités. Vous pouvez améliorer votre *Décharge occulte*, voir dans les ténèbres magiques ou lire toutes les écritures.
* **Don de pacte :** (Niveau 3) Votre patron vous accorde une faveur spéciale : le Pacte de la Chaîne (familier), le Pacte de la Lame (arme magique) ou le Pacte du Tome (grimoire de rituels).
Le Sorcier n'étudie pas la magie, il la négocie. Chaque sort lancé est le rappel du contrat qui le lie à une puissance bien plus vaste que lui.

View File

@@ -1,5 +1,32 @@
---
title: "Voleur"
description: "Expert en infiltration, en précision et en ruse, le Voleur frappe dans l'ombre et déjoue les obstacles les plus complexes."
encre: "martial"
description: "Expert en infiltration et en précision, il frappe dans l'ombre et déjoue les pièges les plus mortels."
de_vie: "d8"
stats_prioritaires:
- "Dextérité"
evolution:
"1":
- "Attaque sournoise"
- "Jargon des voleurs"
- "Expertise"
"2":
- "Attaque sournoise"
- "Jargon des voleurs"
- "Action rusée"
"3":
- "Attaque sournoise"
- "Action rusée"
- "Archétype de voleur"
- "Visée constante"
---
Le Voleur mise sur l'opportunisme. Il ne cherche pas le combat frontal, mais attend le moment où l'adversaire est vulnérable.
### Capacités fondamentales
* **Attaque Sournoise :** Vous savez comment exploiter la distraction d'un ennemi. Une fois par tour, vous infligez des dégâts supplémentaires à une créature que vous touchez avec une attaque si vous avez l'avantage au jet d'attaque.
* **Action Rusée :** (Niveau 2) Votre vivacité d'esprit et votre agilité vous permettent de vous déplacer et d'agir rapidement. Vous pouvez utiliser une action bonus à chacun de vos tours en combat pour Foncer, se Désengager ou se Cacher.
* **Archétype de Voleur :** (Niveau 3) Vous choisissez une spécialisation qui reflète votre carrière criminelle ou d'aventurier (Voleur, Assassin, Escroc arcanique, etc.), débloquant des capacités uniques de précision ou de ruse.
Le Voleur n'est pas seulement un tire-laine ; c'est un maître du timing capable de renverser l'issue d'un combat par un seul coup bien placé.

View File

@@ -1,7 +1,6 @@
import { defineCollection, z } from "astro:content";
import { glob } from "astro/loaders";
// Petit helper pour éviter la répétition du loader
const obsidianLoader = (path: string) =>
glob({
pattern: "**/[^_]*.{md,mdx}",
@@ -13,11 +12,9 @@ const journal = defineCollection({
schema: z
.object({
title: z.string(),
// On rend la date plus flexible car Obsidian peut parfois envoyer des strings
publishDate: z.coerce.date(),
tags: z.array(z.string()).default([]),
author: z.string().default("Artisan"),
// Ajouts pour la gestion des ères
isEra: z.boolean().default(false),
era: z.string().optional(),
})
@@ -30,9 +27,12 @@ const classes = defineCollection({
.object({
title: z.string(),
description: z.string(),
encre: z
.enum(["martial", "arcane", "divin", "primal", "hybride"])
.default("martial"),
encre: z.enum(["martial", "arcane", "divin", "primal", "hybride"]),
de_vie: z.string(),
stats_prioritaires: z.array(z.string()),
// Nouveau format pour gérer l'évolution
evolution: z.record(z.string(), z.array(z.string())).optional(),
couleur_theme: z.string().optional(),
})
.passthrough(),
});
@@ -46,6 +46,11 @@ const especes = defineCollection({
spectre: z
.enum(["solaire", "elementaire", "terrestre", "sylvestre", "ombre"])
.default("terrestre"),
// Ajouts pour enrichir l'espèce
bonus_stats: z.record(z.number()).optional(), // ex: { dexterite: 2, constitution: 1 }
traits_raciaux: z.array(z.string()).default([]),
vitesse: z.string().default("9m"),
langues: z.array(z.string()).default(["Commun"]),
})
.passthrough(),
});
@@ -56,18 +61,33 @@ const personnages = defineCollection({
.object({
nom: z.string(),
titre: z.string().optional(),
espece: z.string(),
espece: z.string(), // Référence au titre de la collection especes
niveau_global: z.number().default(1),
maitrise: z.number().default(2),
inspiration: z.boolean().default(false),
classes_detail: z.array(
z.object({
nom: z.string(),
nom: z.string(), // Référence au titre de la collection classes
niveau: z.number(),
}),
),
// Ajout des stats et listes
stats: z.record(z.number()).optional(),
equipement: z.array(z.string()).default([]),
traits: z.array(z.string()).default([]),
// Stats précises pour le rendu des modificateurs (+3, +1, etc.)
stats: z.object({
force: z.number().default(10),
dexterite: z.number().default(10),
constitution: z.number().default(10),
intelligence: z.number().default(10),
sagesse: z.number().default(10),
charisme: z.number().default(10),
}),
sauvegardes: z.array(z.string()).default([]),
// Organisation par blocs visuels (comme sur l'image)
traits_espece: z.array(z.string()).default([]),
capacites_classe: z.array(z.string()).default([]),
armes: z.array(z.string()).default([]),
sorts: z.array(z.string()).default([]),
outils: z.array(z.string()).default([]),
description_physique: z.string().optional(),
})
.passthrough(),
});

View File

@@ -1,5 +1,10 @@
---
title: "Aarakocra"
spectre: "elementaire" # Le spectre de nature (Cyan/Argent)
description: "Peuple oiseau originaire du Plan Élémentaire de l'Air, ils survolent le monde avec une vigilance et une liberté inégalées."
description: "Peuple aviaire originaire du Plan Élémentaire de l'Air, les Aarakocras sont les sentinelles des cieux."
spectre: "elementaire"
bonus_stats: { dexterite: 2, sagesse: 1 }
traits_raciaux: ["Vol", "Serres naturelles"]
vitesse: "7.5m (Vol 15m)"
langues: ["Commun", "Aérien"]
---
Vivant souvent sur les plus hauts sommets, ils perçoivent le monde avec une perspective de prédateur aérien. Ils sont reconnus pour leur vigilance constante contre les menaces planaires.

View File

@@ -1,5 +1,10 @@
---
title: "Aasimar"
description: "Porteurs d'une étincelle divine dans leurs veines, les Aasimar sont les descendants d'êtres célestes."
spectre: "solaire"
description: "Humanoïdes touchés par une étincelle céleste, ils portent en eux la lumière des plans supérieurs pour combattre les ténèbres."
bonus_stats: { charisme: 2, sagesse: 1 }
traits_raciaux: ["Résistance nécrotique et radieuse", "Mains guérisseuses"]
vitesse: "9m"
langues: ["Commun", "Céleste"]
---
Souvent guidés par une entité angélique, les Aasimar sont destinés à de grandes épopées. Leur présence seule peut parfois suffire à rassurer les plus désespérés.

View File

@@ -1,5 +1,24 @@
---
title: "Artionis"
spectre: "sylvestre"
description: "Puissants humanoïdes à l'allure d'ours, protecteurs de la forêt dont la force tranquille cache une fureur redoutable en combat."
description: "Puissants ours anthropomorphes des régions polaires, les Artionis sont des survivants nés dans le froid le plus extrême."
spectre: "terrestre"
bonus_stats:
force: 2
constitution: 1
traits_raciaux:
- "Endurance polaire"
- "Griffes puissantes"
- "Odorat développé"
vitesse: "9m (Nage 9m)"
langues:
- "Commun"
- "Artionis"
---
Les Artionis habitent les confins gelés du monde. Leur société est souvent organisée autour de cercles spirituels ou druidiques qui veillent sur l'équilibre des forces primordiales du Grand Nord.
### Traits Biologiques
* **Endurance polaire :** Une couche de graisse et une fourrure épaisse les protègent totalement contre les effets du froid extrême.
* **Odorat développé :** Ils possèdent un avantage sur les tests de Perception basés sur l'odorat, leur permettant de pister des proies à des kilomètres.
Ils sont d'un naturel solitaire et taciturne. Pour un Artionis, une action vaut mieux qu'un long discours, et la loyauté envers un "frère de portée" est absolue.

View File

@@ -1,5 +1,26 @@
---
title: "Demi-Elfe"
description: "Marchant entre deux mondes, les demi-elfes combinent l'ambition humaine et la grâce éthérée de leurs ancêtres sylvestres."
spectre: "sylvestre"
description: "Voyageurs entre deux mondes, alliant le charme humain à l'élégance elfique."
bonus_stats:
charisme: 2
dexterite: 1
constitution: 1
traits_raciaux:
- "Vision dans le noir"
- "Ascendance féerique"
- "Polyvalence (2 maîtrises au choix)"
vitesse: "9m"
langues:
- "Commun"
- "Elfe"
- "Une langue au choix"
---
Les demi-elfes ne possèdent pas de terre propre. Ils sont les diplomates et les voyageurs ultimes, capables de s'adapter à n'importe quelle culture tout en restant, au fond d'eux, d'éternels observateurs.
### Traits Biologiques
* **Ascendance féerique :** Comme les elfes, ils ont un avantage sur les jets de sauvegarde contre les enchantements et ne peuvent pas être endormis par magie.
* **Polyvalence :** Leur double héritage leur confère une curiosité et une facilité d'apprentissage qui se traduit par une maîtrise accrue de compétences variées.
Souvent perçus comme trop éphémères par les elfes et trop distants par les humains, ils excellent dans les rôles de médiateurs ou d'aventuriers solitaires.

View File

@@ -1,5 +1,10 @@
---
title: "Demi-Orc"
description: "Nés de deux mondes, les demi-orcs possèdent une force brute et une volonté de survie qui surpasse celle de leurs ancêtres."
spectre: "terrestre"
description: "Guerriers à la force prodigieuse, portés par une résilience et une fureur légendaire."
bonus_stats: { force: 2, constitution: 1 }
traits_raciaux: ["Acharnement", "Attaques sauvages", "Menaçant"]
vitesse: "9m"
langues: ["Commun", "Orc"]
---
Leur capacité à ignorer des blessures qui terrasseraient n'importe qui d'autre fait d'eux des guerriers de première ligne exceptionnels.

View File

@@ -1,5 +1,10 @@
---
title: "Drakéide"
title: "Drakeide"
description: "Fiers guerriers portant l'héritage des dragons, capables de souffler l'élément qui coule dans leurs veines."
spectre: "elementaire"
description: "Fiers héritiers des dragons, capables de souffler le feu ou la glace sur leurs ennemis."
bonus_stats: { force: 2, charisme: 1 }
traits_raciaux: ["Arme de souffle", "Résistance élémentaire"]
vitesse: "9m"
langues: ["Commun", "Draconique"]
---
Les Drakeides accordent plus d'importance au clan et au mérite personnel qu'à toute autre chose. Chaque individu est le représentant de l'honneur de sa lignée.

View File

@@ -1,5 +1,10 @@
---
title: "Drow"
description: "Aussi appelés Elfes Noirs, ils règnent sur les profondeurs de l'Ombreterre avec une discipline de fer et une magie sombre."
spectre: "ombre"
description: "Elfe des profondeurs à la peau sombre et à la chevelure d'argent, maître de la magie des ombres et de l'intrigue dans les cités souterraines."
bonus_stats: { dexterite: 2, charisme: 1 }
traits_raciaux: ["Vision dans le noir supérieure", "Sensibilité au soleil", "Magie Drow"]
vitesse: "9m"
langues: ["Commun", "Elfe", "Bas-commun"]
---
Adaptés à l'obscurité totale, les Drows ont développé une culture complexe basée sur le pouvoir et la maîtrise de l'ombre. Leur magie se manifeste souvent sous forme de ténèbres ou de feux follets violacés.

View File

@@ -1,5 +1,10 @@
---
title: "Elfe"
description: "Peuple gracieux doté d'une longévité exceptionnelle, les elfes vivent en harmonie avec les forces magiques de la nature."
spectre: "sylvestre"
description: "Gracieux et anciens, les elfes ont une affinité naturelle avec la magie et la nature. Ils vivent bien plus longtemps que les autres espèces."
bonus_stats: { dexterite: 2 }
traits_raciaux: ["Vision dans le noir", "Sens aiguisés", "Ascendance féerique (Transe)"]
vitesse: "9m"
langues: ["Commun", "Elfe"]
---
Les elfes ne dorment pas au sens humain ; ils entrent dans une transe méditative profonde. Leur lien avec le monde sauvage est tel qu'ils perçoivent des nuances de la réalité invisibles aux autres.

View File

@@ -1,5 +1,10 @@
---
title: "Fée"
description: "Petites créatures espiègles issues de la Féerie, elles incarnent le chaos et la magie du monde naturel."
spectre: "sylvestre"
description: "Petites créatures ailées imprégnées de la magie sauvage de la Féerie, apportant malice et enchantement partout où elles passent."
bonus_stats: { dexterite: 1, charisme: 2 }
traits_raciaux: ["Vol féerique", "Passage entre les plans"]
vitesse: "3m (Vol 9m)"
langues: ["Commun", "Sylvestre"]
---
Les fées perçoivent le monde comme un immense jeu. Leur logique est souvent déroutante pour les peuples sédentaires, car elles sont liées à des lois naturelles plus anciennes que les civilisations.

View File

@@ -1,5 +1,27 @@
---
title: "Genasi"
description: "Héritiers des plans élémentaires, les Genasi portent en eux la puissance brute de l'air, de la terre, du feu ou de l'eau."
spectre: "elementaire"
description: "Êtres imprégnés de l'énergie brute d'un des quatre éléments, leur nature changeante reflète la puissance de la terre, du feu, de l'air ou de l'eau."
bonus_stats:
constitution: 2
charisme: 1
traits_raciaux:
- "Appel de l'élément"
- "Résistance élémentaire"
- "Vision dans le noir"
vitesse: "9m"
langues:
- "Commun"
- "Primordial"
---
Les Genasi sont le résultat de l'union entre le monde matériel et les plans élémentaires. Ils ne naissent pas d'une culture unique mais apparaissent souvent là où les énergies planaires sont instables.
### Nature Élémentaire
Chaque Genasi est lié à un élément qui définit son apparence et ses dons :
* **Air :** Souvent capricieux, ils peuvent retenir leur souffle indéfiniment.
* **Terre :** Calmes et solides, ils ignorent souvent les terrains difficiles.
* **Feu :** Passionnés et vifs, ils manipulent les flammes par instinct.
* **Eau :** Fluides et adaptables, ils sont d'excellents nageurs.
Ils sont souvent perçus comme des étrangers ou des prodiges, ce qui les pousse fréquemment vers une vie d'aventure pour trouver leur propre voie.

View File

@@ -1,5 +1,10 @@
---
title: "Gnome"
spectre: "ombre"
description: "Inventeurs excentriques et curieux, maniant souvent une magie subtile ou mécanique."
description: "Petits humanoïdes débordant d'énergie, les gnomes sont des inventeurs, des illusionnistes et des curieux impitoyables."
spectre: "elementaire"
bonus_stats: { intelligence: 2, constitution: 1 }
traits_raciaux: ["Ruse gnomique", "Vision dans le noir", "Bricolage"]
vitesse: "7.5m"
langues: ["Commun", "Gnome"]
---
Leur esprit ne se repose jamais. Qu'ils étudient les arcanes ou qu'ils fabriquent des automates mécaniques, les gnomes cherchent toujours à comprendre le "comment" des choses.

View File

@@ -1,5 +1,24 @@
---
title: "Gobelin"
description: "Petits humanoïdes rusés et opportunistes, les gobelins survivent grâce à leur nombre et leur capacité à fuir au bon moment."
spectre: "ombre"
description: "Ingénieux et rusés, ces petits humanoïdes survivent par leur nombre et leur capacité à transformer n'importe quel déchet en outil de guerre."
bonus_stats:
dexterite: 2
constitution: 1
traits_raciaux:
- "Vision dans le noir"
- "Fuite agile"
- "Fureur des petits (Dégâts bonus)"
vitesse: "9m"
langues:
- "Commun"
- "Gobelin"
---
Les gobelins sont souvent sous-estimés à cause de leur taille. Pourtant, leur capacité à transformer n'importe quel déchet en arme et leur instinct de survie en font des adversaires (ou des alliés) redoutables.
### Traits Biologiques
* **Fuite agile :** Un gobelin peut se désengager ou se cacher en utilisant une action bonus à chaque tour, ce qui le rend extrêmement difficile à attraper en combat.
* **Fureur des petits :** Lorsqu'ils combattent une créature plus grande qu'eux, ils savent frapper là où ça fait mal pour infliger des blessures disproportionnées.
Ils vivent généralement dans des structures sociales chaotiques où la ruse prime sur la force brute.

View File

@@ -1,5 +1,10 @@
---
title: "Gobelours"
description: "Massifs et étonnamment silencieux, les gobelours sont les prédateurs ultimes parmi les peuples gobelinoïdes."
spectre: "ombre"
description: "Prédateur massif et furtif de la famille des gobelinoïdes, il utilise sa force brute et sa surprise pour écraser ses proies."
bonus_stats: { force: 2, dexterite: 1 }
traits_raciaux: ["Longs bras", "Carrure puissante", "Attaque surprise"]
vitesse: "9m"
langues: ["Commun", "Gobelin"]
---
Malgré leur taille imposante, les gobelours se déplacent avec une discrétion surnaturelle. Ils préfèrent tendre des embuscades plutôt que d'engager un combat frontal prolongé.

View File

@@ -1,5 +1,18 @@
---
title: "Grung"
spectre: "sylvestre"
description: "Petites grenouilles humanoïdes des jungles profondes, ces guerriers territoriaux utilisent leur peau toxique comme une arme mortelle."
spectre: "sylvestre"
bonus_stats:
dexterite: 2
constitution: 1
traits_raciaux:
- "Peau toxique"
- "Saut de grenouille"
- "Amphibie"
- "Vigilance Arboricole"
vitesse: "7.5m (escalade 7.5m)"
langues:
- "Grung"
---
D'où je viens, là où mon peuple de batraciens anthropomorphes existe, l'ordre établi n'est pas le vôtre. Les Grungs sont des créatures territoriales dont la survie dépend de leur lien avec leur environnement, qu'il soit forestier ou, dans le cas de G'Mas, constitué de mers de sable.

View File

@@ -1,5 +1,10 @@
---
title: "Halfelin"
spectre: "ombre"
description: "Petits par la taille mais grands par le courage, ils possèdent une chance insolente."
description: "Connus pour leur chance insolente et leur amour du confort, les halfelins sont bien plus résilients qu'ils ne le paraissent."
spectre: "terrestre"
bonus_stats: { dexterite: 2, charisme: 1 }
traits_raciaux: ["Chanceux", "Brave", "Agilité d'halfelin"]
vitesse: "7.5m"
langues: ["Commun", "Halfelin"]
---
Un halfelin peut se faufiler entre les jambes d'un géant sans sourciller. Leur capacité à rester optimistes même dans les pires situations est leur plus grande force.

View File

@@ -1,5 +1,24 @@
---
title: "Harengon"
description: "Peuple de lapins humanoïdes originaires de la Féerie, les harengons incarnent l'énergie bondissante et la chance du voyageur."
spectre: "sylvestre"
description: "Peuple lièvre originaire de la Féerie, ils bondissent hors du danger avec une agilité et une intuition prodigieuses."
bonus_stats:
dexterite: 2
charisme: 1
traits_raciaux:
- "Sens de lièvre (Initiative boostée)"
- "Bond de lapin"
- "Pied de lapin (Bonus aux sauvegardes)"
vitesse: "9m"
langues:
- "Commun"
- "Sylvestre"
---
Les harengons sont des créatures pleines de vie qui ont migré depuis les plans féeriques vers le monde matériel. Ils sont connus pour leur vivacité d'esprit et leur capacité à anticiper le danger.
### Traits Biologiques
* **Bond de lapin :** Ils peuvent sauter sur une distance de plusieurs mètres sans provoquer d'attaques d'opportunité, une manœuvre parfaite pour se repositionner en combat.
* **Sens de lièvre :** Leur ouïe fine et leurs réflexes leur permettent d'ajouter leur bonus de maîtrise à leurs tests d'initiative.
Curieux et souvent nomades, ils parcourent le monde avec une légèreté qui contraste souvent avec le sérieux des autres peuples.

View File

@@ -1,5 +1,10 @@
---
title: "Hobgobelin"
spectre: "ombre"
description: "Fin stratège à la stature imposante, il vit pour la gloire du combat et la discipline de fer des légions militaires."
description: "Tacticiens nés et soldats disciplinés, les hobgobelins valorisent la gloire martiale et l'ordre par-dessus tout."
spectre: "terrestre"
bonus_stats: { constitution: 2, intelligence: 1 }
traits_raciaux: ["Entraînement martial", "Élan de génie"]
vitesse: "9m"
langues: ["Commun", "Gobelin"]
---
Contrairement à leurs cousins plus chaotiques, les hobgobelins vivent selon un code d'honneur strict. Leur société est une machine de guerre où chaque individu a un rôle précis.

View File

@@ -1,5 +1,10 @@
---
title: "Humain"
description: "Le peuple le plus adaptable et ambitieux, capable de maîtriser n'importe quel art ou science en une seule vie."
spectre: "terrestre"
description: "Adaptables et ambitieux, les humains sont la plus jeune et la plus nombreuse des espèces, capables de s'illustrer dans toutes les voies."
bonus_stats: { force: 1, dexterite: 1, constitution: 1, intelligence: 1, sagesse: 1, charisme: 1 }
traits_raciaux: ["Polyvalence"]
vitesse: "9m"
langues: ["Commun", "Une langue au choix"]
---
La brièveté de leur vie les pousse à accomplir de grandes choses rapidement, ce qui les amène souvent à diriger des empires ou des guildes influentes.

View File

@@ -1,5 +1,10 @@
---
title: "Kobold"
description: "Petits humanoïdes reptiliens se revendiquant descendants des dragons, experts en pièges et en vie souterraine."
spectre: "ombre"
description: "Petit humanoïde reptilien revendiquant une parenté avec les dragons, il survit grâce à son ingéniosité et ses pièges mortels."
bonus_stats: { dexterite: 2 }
traits_raciaux: ["Tactique de meute", "Sensibilité au soleil"]
vitesse: "9m"
langues: ["Commun", "Draconique"]
---
Individuellement faibles, les kobolds sont redoutables en groupe. Leur ingéniosité pour la création de pièges mécaniques est crainte par tous les aventuriers s'aventurant dans leurs mines.

View File

@@ -1,5 +1,25 @@
---
title: "Nain"
description: "Maîtres artisans et guerriers robustes, les nains sont sculptés par la pierre et les traditions des montagnes."
spectre: "terrestre"
description: "Maîtres de la forge et de la pierre, réputés pour leur robustesse et leur loyauté indéfectible."
bonus_stats:
constitution: 2
force: 1
traits_raciaux:
- "Vision dans le noir"
- "Résilience naine (Poison)"
- "Entraînement au combat nain"
- "Connaissance des pierres"
vitesse: "7.5m"
langues:
- "Commun"
- "Nain"
---
Les nains sont un peuple fier, dont l'histoire est gravée dans les racines du monde. Connus pour leur endurance légendaire, ils sont capables de travailler des jours durant dans la chaleur des forges ou de tenir une ligne de front sans faiblir.
### Traits Biologiques
* **Résilience naine :** Une résistance naturelle aux toxines, leur offrant un avantage sur les jets de sauvegarde contre le poison.
* **Connaissance des pierres :** Un don inné pour l'histoire et la structure des ouvrages en maçonnerie, leur permettant de déceler les mécanismes cachés ou les origines d'une taille de pierre.
La culture naine repose sur trois piliers : le clan, la forge et la mémoire des ancêtres. Un nain exilé ou sans clan est une tragédie rare qui marque souvent le début d'une quête de rédemption.

View File

@@ -1,5 +1,10 @@
---
title: "Shifter"
description: "Descendants lointains de lycanthropes, les Shifters peuvent altérer partiellement leur forme pour adopter des traits animaux."
spectre: "sylvestre"
description: "Humains liés aux bêtes sauvages, capables de manifester partiellement des traits bestiaux pour décupler leurs capacités de survie"
bonus_stats: { dexterite: 2, sagesse: 1 }
traits_raciaux: ["Transformation (Shifting)", "Instincts sauvages"]
vitesse: "9m"
langues: ["Commun", "Sylvestre"]
---
Un Shifter ne se transforme pas totalement en loup ou en ours, mais il "déclenche" une part sauvage en lui qui améliore ses capacités physiques, ses sens ou sa résistance pendant un court moment.

View File

@@ -1,5 +1,24 @@
---
title: "Tabaxi"
description: "Humanoïdes félins curieux et agiles, les Tabaxis parcourent le monde à la recherche de secrets, de récits et d'artefacts."
spectre: "sylvestre"
description: "Peuple félin agile et d'une curiosité sans limites, ils parcourent le monde à la recherche d'histoires et d'artefacts perdus."
bonus_stats:
dexterite: 2
charisme: 1
traits_raciaux:
- "Agilité féline"
- "Griffes de chat"
- "Sens aiguisés"
vitesse: "9m (Escalade 6m)"
langues:
- "Commun"
- "Tabaxi"
---
Les Tabaxis sont des nomades par nature. Ils ne sont pas attirés par la richesse matérielle mais par la singularité des objets et des histoires. Pour un Tabaxi, un secret bien gardé a plus de valeur qu'un sac d'or.
### Traits Biologiques
* **Agilité féline :** En combat, ils peuvent doubler leur vitesse de déplacement pendant un court instant, reflétant leurs réflexes foudroyants.
* **Griffes :** Leurs griffes rétractables ne sont pas seulement des outils d'escalade mais aussi des armes naturelles redoutables au corps à corps.
Ils observent souvent le monde avec une curiosité détachée, ce qui peut les faire passer pour distants ou boudeurs lorsqu'on les interrompt dans leurs observations.

View File

@@ -1,5 +1,10 @@
---
title: "Tieffelin"
description: "Marqués par une lignée infernale, les tieffelins portent des cornes et une queue, vestiges d'un ancien pacte de sang."
spectre: "ombre"
description: "Marqués par une lignée infernale, ils naviguent dans les ombres avec une aura de mystère."
bonus_stats: { charisme: 2, intelligence: 1 }
traits_raciaux: ["Résistance infernale (Feu)", "Héritage infernal (Magie)"]
vitesse: "9m"
langues: ["Commun", "Infernal"]
---
Souvent victimes de préjugés, les tieffelins développent une grande indépendance d'esprit. Leur magie innée leur permet souvent de manipuler les flammes ou les esprits.

View File

@@ -1,5 +1,10 @@
---
title: "Wolfen"
description: "Imposants humanoïdes canins, les Wolfens sont des prédateurs sociables dotés d'un sens de l'honneur et de la meute inébranlable."
spectre: "terrestre"
description: "Géants lupins à la stature noble et disciplinée, ils allient l'instinct de meute à une rigueur militaire impériale."
bonus_stats: { force: 2, sagesse: 1 }
traits_raciaux: ["Odorat supérieur", "Morsure", "Instinct de meute"]
vitesse: "10.5m"
langues: ["Commun", "Wolfen"]
---
Les Wolfens voient le monde à travers le prisme de la hiérarchie et de la loyauté. Ils sont d'excellents pisteurs capables de courir sur de longues distances sans se fatiguer.

View File

@@ -1,28 +1,36 @@
---
nom: "Bulle"
titre: "Mains d'Or"
espece: "fee"
titre: "Aux Mains d'Or"
espece: "Fee"
niveau_global: 2
maitrise: 2
inspiration: true
classes_detail:
- nom: "clerc"
- nom: "Clerc"
niveau: 1
stats:
force: 8
dexterite: 14
constitution: 12
intelligence: 10
sagesse: 16
charisme: 14
sauvegardes: ["sagesse", "charisme"]
traits_espece: ["Vol féerique", "Passage entre les plans", "Don de lumière"]
capacites_classe: ["Domaine de la Vie", "Incanter des sorts", "Intervention divine"]
armes: ["Bâton de bois flotté"]
outils: ["Nœud de lierre éternel", "Goutte de lune en fiole", "Poudre luminescente"]
sorts: ["Mot de guérison", "Lueur d'espoir", "Lumière"]
description_physique: "Une petite fée lumineuse aux ailes irisées, portant une sacoche d'herboriste et dégageant une douce aura de sérénité."
---
Je suis Bulle aux Mains dOr est une jeune fée membre de lélite guérisseuse de la Colonie
Lumiflorale. Née avec un don naturel pour la magie de lumière et la guérison, elle possède
une sensibilité particulière aux plantes et à la vie, capable de créer des remèdes rares
grâce à son talent dherboristerie.
Je suis **Bulle aux Mains dOr**, une jeune fée membre de lélite guérisseuse de la Colonie Lumiflorale. Née avec un don naturel pour la magie de lumière et la guérison, je possède une sensibilité particulière aux plantes et à la vie, capable de créer des remèdes rares grâce à mon talent dherboristerie.
Choisie par le Cercle Solaire pour devenir une sage et enseignante, elle doit dabord
accomplir un rite essentiel : voyager dans le monde matériel afin den découvrir les
maladies, les émotions complexes et les souffrances réelles que les fées ne connaissent
pas. Ce périple forgera sa sagesse et son expérience, nécessaires pour transmettre un jour
son savoir.
Choisie par le Cercle Solaire pour devenir une sage et enseignante, je dois dabord accomplir un rite essentiel : voyager dans le monde matériel afin den découvrir les maladies, les émotions complexes et les souffrances réelles que les fées ne connaissent pas. Ce périple forgera ma sagesse et mon expérience, nécessaires pour transmettre un jour mon savoir.
Bienveillante, curieuse et parfois un peu naïve, Bulle explore ce nouveau monde avec
lobjectif dapporter de la lumière là où règnent lombre et la douleur, et de rapporter à sa
colonie une compréhension plus profonde de la vie au-delà du Feywild.
Avant de quitter sa colonie, les fées lui ont confiées :
- une poudre luminescente qui amplifie ses sorts de lumière
- un nœud de lierre éternel symbole de lien avec sa terre natale
- une goutte de lune scellée dans une fiole, destinée à la guider dans les moments de doute.
Bienveillante, curieuse et parfois un peu naïve, j'explore ce nouveau monde avec lobjectif dapporter de la lumière là où règnent lombre et la douleur.
Avant de quitter ma colonie, les fées m'ont confié :
* **Une poudre luminescente** qui amplifie mes sorts de lumière.
* **Un nœud de lierre éternel**, symbole de lien avec ma terre natale.
* **Une goutte de lune** scellée dans une fiole, destinée à me guider dans les moments de doute.

View File

@@ -5,7 +5,7 @@ espece: "Grung"
niveau_global: 2
maitrise: 2
inspiration: true
classes_detail:
classes_detail:
- nom: "Moine"
niveau: 1
stats:
@@ -19,7 +19,7 @@ sauvegardes: ["dexterite", "sagesse"]
traits_espece: ["Peau toxique", "Saut de grenouille", "Amphibie", "Vigilance Arboricole"]
capacites_classe: ["Méditation", "Arts Martiaux", "Marchand de sable"]
armes: ["Souffle-Quart"]
outils: ["Matériel d'alchimiste", "Tenue de rechange", "Sac à dos", "Sac de couchage", "Gamelle", "Boîte à Amadou", "10 torches", "10 jours de rations", "Outre", "15m de cordes" ]
outils: ["Matériel d'alchimiste", "Sablier", "Sac à dos", "10 jours de rations", "Outre"]
sorts: ["Sommeil"]
description_physique: "Un Grung à la peau tannée par le sable, portant un sablier en bandoulière et des vêtements de voyage usés mais fonctionnels."
---

View File

@@ -1,21 +1,46 @@
---
nom: "Gurdill"
titre: "Cul Brillant"
espece: "nain"
espece: "Nain"
niveau_global: 2
classes_detail:
- nom: "barbare"
maitrise: 2
inspiration: true
classes_detail:
- nom: "Barbare"
niveau: 1
stats:
force: 16
dexterite: 12
constitution: 16
intelligence: 10
sagesse: 12
charisme: 8
sauvegardes: ["force", "constitution"]
traits_espece: ["Vision dans le noir", "Résilience naine", "Entraînement au combat nain", "Outils de forgeron"]
capacites_classe: ["Rage", "Défense sans armure", "Témérité"]
armes: ["Hache à deux mains", "Marteau de forge mythique"]
outils: ["Outils de forgeron", "Caleçon en mithril"]
sorts: []
description_physique: "Un nain à l'allure flamboyante, portant une hache imposante et un caleçon en mithril qui brille d'un éclat singulier."
---
Je suis Gurdill Cul Brillant, un ancien membre déchu de la famille royale des nains, réputée pour sa richesse et son savoir-faire en matière de forge et de gemmologie. Mon surnom, "cul brillant", fait seulement référence à mon allure flamboyante grâce à mon caleçon en mithtril.
Je suis **Gurdill Cul Brillant**, un ancien membre déchu de la famille royale des nains, réputée pour sa richesse et son savoir-faire en matière de forge et de gemmologie. Mon surnom, "cul brillant", fait seulement référence à mon allure flamboyante grâce à mon caleçon en mithril.
Dans notre royaume, la hiérarchie est stricte. Passionné par les découvertes en dehors des mines et les histoires des autres royaumes, je me heurtais souvent aux attentes traditionnelles de ma famille. Un jour, lors d'une expédition à la recherche de gemmes rares, j'enfreignis les règles en m'éloignant trop de mon groupe. Je découvris une antique forge elfique, une merveille oubliée. Dans ma curiosité, je tentai de prendre un artefact magique, mais cela provoqua un effondrement qui dévasta la cavité.
## Histoire et Origines
Cette négligence me valut d'être condamné à l'exil par mon propre père, le roi. Trahi par les miens, je quittai le royaume, mais non sans emporter un trésor inestimable : un mythique marteau de forge elfique, censé me conférer de grands pouvoirs. Et bien sûr ma hache !
Dans notre royaume, la hiérarchie est stricte. Passionné par les découvertes en dehors des mines et les histoires des autres royaumes, je me heurtais souvent aux attentes traditionnelles de ma famille.
Exilé, j'errai à travers les montagnes et les forêts, mais ma vie ne fut pas celle d'un fugitif désespéré. Je m'installai dans un petit village au pied des montagnes, où je me liai d'amitié avec des artisans locaux. Ensemble, nous redécouvrîmes des techniques de forge anciennes.
Un jour, lors d'une expédition à la recherche de gemmes rares, j'enfreignis les règles en m'éloignant trop de mon groupe. Je découvris une antique forge elfique, une merveille oubliée. Dans ma curiosité, je tentai de prendre un artefact magique, mais cela provoqua un effondrement qui dévasta la cavité.
Au fil du temps, je construisis une nouvelle vie, mêlant tradition naine et techniques de forge originales. Bien que mon cœur restât attaché à mon royaume natal, je trouvai une nouvelle famille parmi ces artisans, apprenant à apprécier la simplicité et la beauté du quotidien.
## Capacités de Gurdill
Mais ma soif d'aventure refit un jour surface...
* **Rage :** En combat, je peux entrer dans une fureur primitive qui me rend plus résistant et plus fort.
* **Défense sans armure :** Mon caleçon en mithril n'est pas qu'une coquetterie, il symbolise ma robustesse naturelle (ma Constitution s'ajoute à ma CA).
* **Résilience naine :** J'ai l'avantage sur les jets de sauvegarde contre le poison.
> "L'or brille pour les yeux, mais le mithril brille pour la survie... et pour le style, bien sûr."
---
### Équipement de voyage
J'emporte toujours avec moi mon matériel de forgeron, espérant un jour restaurer l'honneur de ma lignée en créant une pièce digne des anciens rois.

View File

@@ -1,10 +1,29 @@
---
nom: "Jiin"
espece: "genasi"
titre: "Gardien des Mémoires Oubliées"
espece: "Genasi"
niveau_global: 2
classes_detail:
- nom: "barde"
maitrise: 2
inspiration: true
classes_detail:
- nom: "Barde"
niveau: 1
stats:
force: 10
dexterite: 14
constitution: 14
intelligence: 12
sagesse: 10
charisme: 16
sauvegardes: ["dexterite", "charisme"]
traits_espece: ["Appel de l'élément", "Résistance élémentaire"]
capacites_classe: ["Inspiration bardique", "Représentation", "Sortilèges"]
armes: ["Rapière", "Dague"]
outils: ["Luth", "Jeu de cartes"]
sorts: ["Moquerie vicieuse", "Lumières dansantes", "Mot de guérison"]
description_physique: "Un Genasi aux reflets changeants, portant toujours un instrument à portée de main et scrutant l'horizon à la recherche d'un héritage perdu."
---
Je suis en quête de trouver l'épée de mes ancêtres (une sorte d'épée double lames) afin de prouver que ma famille a eu une importance dans les différents conflits qu'il y a eu. En attendant, dès qu'il y a un groupe d'aventuriers qui me semblent sympathique, je me lie avec eux et en avant. Je suis hyper sociable mais assez susceptible quand on me dit que je ne sers à rien sauf à faire le pitre.
Je suis en quête de trouver l'épée de mes ancêtres (une sorte d'épée double lames) afin de prouver que ma famille a eu une importance dans les différents conflits qu'il y a eu. En attendant, dès qu'il y a un groupe d'aventuriers qui me semblent sympathique, je me lie avec eux et en avant.
Je suis hyper sociable mais assez susceptible quand on me dit que je ne sers à rien sauf à faire le pitre. Ma musique n'est pas qu'un divertissement, c'est le souffle de mon histoire et le lien avec mes ancêtres élémentaires.

View File

@@ -1,34 +1,37 @@
---
nom: "Nyrae"
titre: "Souffle Nocturne"
espece: "tabaxi"
espece: "Tabaxi"
niveau_global: 2
classes_detail:
- nom: "druide"
maitrise: 2
inspiration: true
classes_detail:
- nom: "Druide"
niveau: 1
stats:
force: 8
dexterite: 16
constitution: 12
intelligence: 13
sagesse: 16
charisme: 10
sauvegardes: ["intelligence", "sagesse"]
traits_espece: ["Agilité féline", "Griffes de chat", "Sens aiguisés"]
capacites_classe: ["Druidique", "Lancement de sorts", "Cercle d'Aluna"]
armes: ["Cimeterre", "Bâton de bois"]
outils: ["Matériel d'herboristerie", "Broche Violette (symbole de clan)"]
sorts: ["Produire de la flamme", "Gourdin magique", "Soins"]
description_physique: "Une Tabaxi au pelage sombre comme la nuit, portant une broche violette et dégageant une odeur d'humus et de plantes médicinales."
---
Je suis Nyraë du Cercle dAluna, - "Souffle Nocturne"- c'est ainsi que les soeurs m'ont nommée.
Une sororité de druidesses humaines.
Je suis Nyraë du Cercle dAluna, - "Souffle Nocturne"- c'est ainsi que les soeurs m'ont nommée. Une sororité de druidesses humaines.
Retrouvée bébé à la lisière de la forêt, la confrérie dAluna ma recueillie, nommée, et élevée. Elles
mont transmis leur savoir, leurs chants, et lhistoire de la forêt.
Retrouvée bébé à la lisière de la forêt, la confrérie dAluna ma recueillie, nommée, et élevée. Elles mont transmis leur savoir, leurs chants, et lhistoire de la forêt. Mon apprentissage fut aussi rigoureux que celui des autres : jai appris à connaître la nature, à préparer des potions, des onguents, et des poisons.
Mon apprentissage fut aussi rigoureux que celui des autres : jai appris à connaître la nature, à
préparer des potions, des onguents, et des poisons.
Parfois, nous quittons la forêt pour prodiguer des soins aux villages voisins, mais nous ny restons
jamais longtemps.
Parfois, nous quittons la forêt pour prodiguer des soins aux villages voisins, mais nous ny restons jamais longtemps.
Ma plus grande peur ? Le feu.
Avec leur bénédiction, et forte dune solide expérience druidique, jai quitté la forêt, seule —
portant ma broche Violette, symbole de mon rang et de mon clan — pour partir à la rencontre du
peuple dont je suis née, mais que je ne connais pas.
Avec leur bénédiction, et forte dune solide expérience druidique, jai quitté la forêt, seule — portant ma broche Violette, symbole de mon rang et de mon clan — pour partir à la rencontre du peuple dont je suis née, mais que je ne connais pas. Je ne possède quune direction, lointaine, au-delà de mon bois dadoption.
Je ne possède quune direction, lointaine, au-delà de mon bois dadoption.
Je suis dun naturel silencieux : jobserve avant dagir. Curieuse, loyale, un brin boudeuse si lon
me taquine trop.
Je ne sais pas vraiment mamuser… enfin, je nai jamais vraiment appris.
Je suis dun naturel silencieux : jobserve avant dagir. Curieuse, loyale, un brin boudeuse si lon me taquine trop. Je ne sais pas vraiment mamuser… enfin, je nai jamais vraiment appris.

View File

@@ -1,22 +1,35 @@
---
nom: "Orson"
titre: "Pattes Givrées"
espece: "artionis"
espece: "Artionis"
niveau_global: 12
classes_detail:
- nom: "druide"
maitrise: 4
inspiration: false
classes_detail:
- nom: "Druide"
niveau: 4
- nom: "ensorceleur"
- nom: "Ensorceleur"
niveau: 8
stats:
force: 16
dexterite: 10
constitution: 15
intelligence: 10
sagesse: 14
charisme: 16
sauvegardes: ["constitution", "charisme", "sagesse"]
traits_espece: ["Endurance polaire", "Griffes puissantes", "Odorat développé"]
capacites_classe: ["Forme sauvage", "Métamagie", "Magie des glaces", "Cercle de la Terre (Arctique)"]
armes: ["Bâton de givre", "Griffes"]
outils: ["Matériel de navigation", "Symbole mystérieux (Oeil hexagonal)"]
sorts: ["Tempête de grêle", "Bouclier de givre", "Pas brumeux", "Croissance d'épines"]
description_physique: "Un imposant ours polaire anthropomorphe à l'œil manquant. Une large cicatrice sans fourrure sur son torse révèle une marque gravée au fer rouge : un œil au centre d'un hexagone."
---
"Mon nom ? Orson, mais vous le savez déjà. Ah, vous voulez en savoir plus sur moi ? Je n'en vois pas trop l'intérêt. On a été engagés pour une mission, on s'en occupe et je reprends la route. Oui, je sais, on me le dit souvent : je suis aussi froid que ma magie ou ma patrie. Se faire confiance ? Pour la première fois, ses interlocuteurs voient un sourire se dessiner sur le visage de l'artionis polaire : un sourire fade, sans émotion... froid Vous m'avez pris pour un halfelin ? Bon, très bien. Après tout, si je ne parle jamais de mon histoire, je ne trouverai jamais de piste, je suppose.
"Mon nom ? Orson, mais vous le savez déjà. Ah, vous voulez en savoir plus sur moi ? Je n'en vois pas trop l'intérêt. On a été engagés pour une mission, on s'en occupe et je reprends la route."
Je suis donc né dans les terres gelées du nord au sein d'un cercle druidique dont ma mère fait partie. Pourquoi des druides si loin de toutes civilisations ? Je vois que vous avez autant de connaissances sur notre ordre que sur les terres du nord. Nous ne sommes pas là que pour essayer de garder un équilibre entre vos villes poisseuses et notre mère à tous. Nous veillons aussi pour éviter qu'un mal plus grand encore ne prenne racine dans les régions sauvages sans qu'on ne s'en aperçoive. Des créatures d'un autre plan, par exemple.
J'ai donc grandi au sein de ce cercle avec ma mère et Orphea, ma soeur de portée - excusez-moi, vous dites plutôt "ma soeur jumelle" - et les quelques autres druides. Je n'ai presque aucun souvenir de mon père : il ne faisait pas parti du cercle et n'est pas resté longtemps auprès de ma mère. Ce n'est apparemment pas dans les coutumes artionis de "fonder une famille".
.
Il y a quelques années, alors qu'Orphea et moi revenions auprès des nôtres après une excursion, nous avons remarqué un groupe d'humains installant un campement. Nous les avons observés de loin un instant mais j'ai fait une erreur, révélant notre position. Je ne sais toujours pas ce qu'ils voulaient, il n'y a eu aucune discussion. A la place, l'accueil fut assez explosif, au sens propre du terme : ces visiteurs maîtrisaient apparemment la magie. Nous nous sommes défendus comme nous le pouvions tous les deux mais je me suis retrouvé rapidement hors de combat. Mes derniers souvenirs étant ceux de ma soeur qui se battait toujours.
Ensuite ? Je me suis réveillé auprès des miens. Nous étions assez proches pour qu'ils puissent nous retrouver. Enfin, nous... je veux dire ME retrouver. En effet, aucune trace de ma soeur. Moi, j'étais aux portes de la mort et il s'en est fallu de peu pour que je ne les franchisse pas. J'ai eu la chance de n'y laisser qu'un oeil. A la place, j'y ai gagné ces pouvoirs magiques que je contrôle encore mal : en effet, il semblerait qu'ils se soient manifestés au moment où j'ai réalisé que mon erreur nous avait coûté Orphea. Ça non plus, je n'en ai pas le souvenir.
Je suis né dans les terres gelées du nord au sein d'un cercle druidique dont ma mère fait partie. Nous veillons pour éviter qu'un mal plus grand encore ne prenne racine dans les régions sauvages : des créatures d'un autre plan, par exemple. J'ai grandi avec Orphea, ma sœur de portée.
Depuis, je voyage à la recherche de ces mages. J'ai appris à travailler sur un bateau pour pouvoir couvrir mes frais, vu que tout ici se monnaye. Ou alors, j'offre mes compétences de druide et d'ensorceleur des glaces aux plus offrants, contre de quoi vivre ou des informations concernant la seule piste que j'ai jusque là : le symbole que portaient ces humains sur leur vêtements ou sur leur peau directement. Ce symbole là."
Le grand ours polaire ouvrit alors sa tunique, révélant son torse dont la partie droite était dépourvue de fourrure. A la place, une marque gravée au fer rouge représentant un oeil ouvert au centre d'un hexagone, celui-ci entouré d'étoiles.
Il y a quelques années, lors d'une excursion, nous avons été attaqués par des mages humains. L'accueil fut explosif. Je me suis réveillé auprès des miens, mais sans aucune trace de ma sœur. J'étais aux portes de la mort ; j'ai eu la chance de n'y laisser qu'un œil. À la place, j'y ai gagné ces pouvoirs magiques d'ensorceleur que je contrôle encore mal, manifestés au moment où j'ai réalisé que mon erreur nous avait coûté Orphea.
Depuis, je voyage à la recherche de ces mages. J'offre mes compétences de druide et d'ensorceleur des glaces aux plus offrants, contre de quoi vivre ou des informations concernant la seule piste que j'ai : ce symbole gravé sur ma peau, représentant un œil ouvert au centre d'un hexagone entouré d'étoiles.

View File

@@ -45,6 +45,22 @@ const { title } = Astro.props;
@import url("https://fonts.googleapis.com/css2?family=Cinzel:wght@700&display=swap");
:root {
/* Encres (Classes) */
--color-martial: rgba(230, 57, 70, 1);
--color-arcane: rgba(147, 72, 255, 1);
--color-divin: rgba(200, 155, 60, 1);
--color-primal: rgba(42, 157, 143, 1);
--color-hybride: rgba(100, 100, 100, 1);
/* Spectres (Espèces) */
--color-solaire: rgba(200, 155, 60, 0.4);
--color-elementaire: rgba(0, 171, 255, 0.4);
--color-terrestre: rgba(139, 69, 19, 0.4);
--color-sylvestre: rgba(0, 128, 0, 0.4);
--color-ombre: rgba(75, 0, 130, 0.4);
/* Défaut */
--color-default: #c89b3c;
/* Palette de base */
--color-parchment: #fdf6e8;
--color-ink: #403a25;
@@ -112,7 +128,6 @@ const { title } = Astro.props;
main a[href]:hover {
background-color: var(--color-gold);
color: white !important;
border-bottom-style: solid;
}
/* --- TABLEAUX (GFM) --- */

View File

@@ -14,16 +14,96 @@ const { entry } = Astro.props;
if (!entry) return Astro.redirect("/404");
const { Content } = await render(entry);
// Récupération de l'évolution (si elle existe, sinon on crée un défaut avec le niveau 1)
const evolution = entry.data.evolution || {
"1": entry.data.capacites_niveau_1 || [],
};
const niveaux = Object.keys(evolution).sort((a, b) => Number(a) - Number(b));
const maxLevel = niveaux[niveaux.length - 1];
const themeColor =
entry.data.couleur_theme || `var(--color-${entry.data.encre})`;
---
<GameLayout title={entry.data.title}>
<article class="class-detail">
<header class="post-header">
<a href="/creation" class="back-nav">← Retour à la création</a>
<div class="class-badges">
<span
class="badge encre"
style={`border-color: ${themeColor}; color: ${themeColor}`}
>
Encre {entry.data.encre}
</span>
<span class="badge dice">
Dé de vie : {entry.data.de_vie}
</span>
</div>
<h1>{entry.data.title}</h1>
<p>{entry.data.description}</p>
<p class="description">{entry.data.description}</p>
</header>
<div class="class-specs">
{
entry.data.stats_prioritaires &&
entry.data.stats_prioritaires.length > 0 && (
<section class="spec-block">
<h3>Stats Prioritaires</h3>
<div class="tags-row">
{entry.data.stats_prioritaires.map((stat) => (
<span class="tag">{stat}</span>
))}
</div>
</section>
)
}
<section class="spec-block">
<div class="level-header">
<h3>
Capacités : Niveau <span id="current-level-display"
>1</span>
</h3>
{
niveaux.length > 1 && (
<input
type="range"
id="level-slider"
min="1"
max={maxLevel}
value="1"
class="level-slider"
/>
)
}
</div>
<div class="evolution-container">
{
niveaux.map((lvl) => (
<div
class="tags-row level-content"
data-level={lvl}
style={
lvl === "1"
? "display: flex;"
: "display: none;"
}
>
{evolution[lvl].map((cap) => (
<span class="tag alt">{cap}</span>
))}
</div>
))
}
</div>
</section>
</div>
<hr class="separator" />
<div class="prose-content">
@@ -32,6 +112,36 @@ const { Content } = await render(entry);
</article>
</GameLayout>
<script>
function initLevelSlider() {
const slider = document.getElementById(
"level-slider",
) as HTMLInputElement;
const display = document.getElementById("current-level-display");
const contents = document.querySelectorAll(".level-content");
if (!slider || !display) return;
slider.addEventListener("input", (e) => {
const val = (e.target as HTMLInputElement).value;
display.textContent = val;
contents.forEach((content) => {
const htmlContent = content as HTMLElement;
if (htmlContent.dataset.level === val) {
htmlContent.style.display = "flex";
} else {
htmlContent.style.display = "none";
}
});
});
}
// Initialisation au chargement et lors des transitions Astro
initLevelSlider();
document.addEventListener("astro:after-swap", initLevelSlider);
</script>
<style>
.class-detail {
background: white;
@@ -57,13 +167,133 @@ const { Content } = await render(entry);
margin-bottom: 2rem;
}
.class-badges {
display: flex;
justify-content: center;
gap: 10px;
margin-bottom: 1rem;
}
.badge {
font-family: "Cinzel", serif;
font-size: 0.7rem;
text-transform: uppercase;
padding: 2px 10px;
border: 1px solid #dcd0b9;
border-radius: 12px;
color: #7a7362;
}
h1 {
margin: 0.5rem 0;
font-family: "Cinzel", serif;
font-size: 2.2rem;
font-size: 2.5rem;
color: #3a352a;
}
.description {
font-style: italic;
color: #7a7362;
max-width: 600px;
margin: 0 auto;
}
.class-specs {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 2rem;
margin-top: 2rem;
text-align: left;
}
.level-header {
display: flex;
flex-direction: column;
gap: 0.5rem;
margin-bottom: 1.5rem;
border-bottom: 1px solid #f0eada;
}
h3 {
font-family: "Cinzel", serif;
font-size: 0.9rem;
color: #b8860b;
margin: 0;
}
/* --- NOUVEAU STYLE DU SLIDER (FLÈCHE CSS) --- */
.level-slider {
-webkit-appearance: none; /* Cache le style par défaut (Chrome/Safari) */
appearance: none;
width: 100%;
height: 6px; /* Épaisseur de la barre */
background: #eee5d8; /* Couleur du fond de la barre */
border-radius: 3px;
outline: none;
margin: 15px 0;
cursor: pointer;
position: relative;
}
/* Le "Thumb" (la partie qu'on fait glisser) pour Webkit (Chrome, Edge, Safari, Opera) */
.level-slider::-webkit-slider-thumb {
-webkit-appearance: none; /* Cache la sphère par défaut */
appearance: none;
width: 0;
height: 0;
/* Dessine une flèche droite en pur CSS (triangle) */
border-top: 10px solid transparent;
border-bottom: 10px solid transparent;
border-left: 15px solid #b8860b; /* Couleur de la flèche (doré dark) */
position: relative;
top: 0px; /* Aligne la flèche sur la barre */
transition: transform 0.2s ease;
}
/* Le "Thumb" pour Firefox */
.level-slider::-moz-range-thumb {
width: 0;
height: 0;
border-top: 10px solid transparent;
border-bottom: 10px solid transparent;
border-left: 15px solid #b8860b;
border-right: none;
background: transparent; /* Firefox nécessite un fond transparent */
cursor: pointer;
transition: transform 0.2s ease;
}
/* Effet au survol / focus sur le thumb */
.level-slider::-webkit-slider-thumb:hover,
.level-slider::-webkit-slider-thumb:active {
transform: scale(1.2) translateX(2px); /* Grossit et avance un peu */
}
.level-slider::-moz-range-thumb:hover,
.level-slider::-moz-range-thumb:active {
transform: scale(1.2) translateX(2px);
}
/* ------------------------------------------- */
.tags-row {
display: flex;
flex-wrap: wrap;
gap: 6px;
}
.tag {
font-size: 0.8rem;
padding: 4px 10px;
background: #fcfaf7;
border: 1px solid #eee5d8;
border-radius: 4px;
}
.tag.alt {
border-left: 3px solid #b8860b;
}
.separator {
border: 0;
height: 1px;
@@ -78,5 +308,17 @@ const { Content } = await render(entry);
.prose-content {
font-size: 1.1rem;
line-height: 1.7;
}
@media (max-width: 640px) {
.class-specs {
grid-template-columns: 1fr;
}
.class-detail {
padding: 1.5rem;
border: none;
background: transparent;
}
}
</style>

View File

@@ -1,34 +1,19 @@
---
import { getCollection } from "astro:content";
import GameLayout from "../layouts/GameLayout.astro";
import Header from "../components/Header.astro"; // Import du header
import Header from "../components/Header.astro";
const classes = await getCollection("classes");
const especes = await getCollection("especes");
const personnages = await getCollection("personnages");
const SPECTRUM = {
// Encres (Classes) - Opacité 1.0
martial: "rgba(230, 57, 70, 1)",
arcane: "rgba(147, 72, 255, 1)",
divin: "rgba(200, 155, 60, 1)",
primal: "rgba(42, 157, 143, 1)",
hybride: "rgba(100, 100, 100, 1)",
// Spectres (Espèces) - Opacité 0.4 (pour une meilleure visibilité)
solaire: "rgba(200, 155, 60, 0.4)",
elementaire: "rgba(0, 171, 255, 0.4)",
terrestre: "rgba(139, 69, 19, 0.4)",
sylvestre: "rgba(0, 128, 0, 0.4)",
ombre: "rgba(75, 0, 130, 0.4)",
};
// 1. Groupement par CLASSE (Bordure BAS = Espèce)
const classData = personnages.reduce((acc, p) => {
const pEspeceData = especes.find(
(e) => e.id.toLowerCase() === p.data.espece?.toLowerCase(),
);
const spectreKey = pEspeceData?.data.spectre?.toLowerCase();
// On récupère juste la clé du spectre (ex: 'solaire', 'ombre')
const spectreKey = pEspeceData?.data.spectre?.toLowerCase() || "default";
p.data.classes_detail.forEach((c) => {
if (!c.nom) return;
@@ -36,10 +21,10 @@ const classData = personnages.reduce((acc, p) => {
if (!acc[key]) acc[key] = [];
acc[key].push({
id: p.id, // ID nécessaire pour le lien
id: p.id,
nom: p.data.nom,
niveau_classe: c.niveau,
colorSpectre: SPECTRUM[spectreKey] || "rgba(200, 200, 200, 0.5)",
spectreVar: `var(--color-${spectreKey})`,
});
});
return acc;
@@ -51,22 +36,21 @@ const especeData = personnages.reduce((acc, p) => {
const key = p.data.espece.toLowerCase();
if (!acc[key]) acc[key] = [];
// On récupère les couleurs de TOUTES les classes du personnage
const classColors = (p.data.classes_detail || []).map((c) => {
// On récupère les clés d'encre pour construire le dégradé en CSS
const classInks = (p.data.classes_detail || []).map((c) => {
const pClassData = classes.find(
(cl) =>
cl.id.toLowerCase() === c.nom?.toLowerCase() ||
cl.data.title?.toLowerCase() === c.nom?.toLowerCase(),
);
const encreKey = pClassData?.data.encre?.toLowerCase();
return SPECTRUM[encreKey] || "#ffffff";
return pClassData?.data.encre?.toLowerCase() || "default";
});
acc[key].push({
id: p.id,
nom: p.data.nom,
niveau: p.data.niveau_global || 1,
colors: classColors, // Tableau de couleurs (1 ou plusieurs)
inks: classInks,
});
return acc;
}, {});
@@ -82,95 +66,13 @@ const especeData = personnages.reduce((acc, p) => {
<p class="dnd-intro">
La classe définit vos compétences et votre rôle.
</p>
<div
class="dnd-intro"
style="
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
"
>
<span
style="
color: rgba(147, 72, 255, 1);
background-color: white;
margin: 5px;
padding: 5px 10px;
border-radius: 5px;
box-shadow:
0 10px 25px -5px
color-mix(in srgb, rgba(147, 72, 255, 1), transparent 80%),
0 8px 10px -6px
color-mix(in srgb, rgba(147, 72, 255, 1), transparent 85%);
}
"
>Arcane</span
>
<span
style="
color: rgba(230, 57, 70, 1);
background-color: white;
margin: 5px;
padding: 5px 10px;
border-radius: 5px;
box-shadow:
0 10px 25px -5px
color-mix(in srgb, rgba(230, 57, 70, 1), transparent 80%),
0 8px 10px -6px
color-mix(in srgb, rgba(230, 57, 70, 1), transparent 85%);
}
"
>Martial</span
>
<span
style="
color: rgba(100, 100, 100, 1);
background-color: white;
margin: 5px;
padding: 5px 10px;
border-radius: 5px;
box-shadow:
0 10px 25px -5px
color-mix(in srgb, rgba(100, 100, 100, 1), transparent 80%),
0 8px 10px -6px
color-mix(in srgb, rgba(100, 100, 100, 1), transparent 85%);
}
"
>Neutre</span
>
<span
style="
color: rgba(200, 155, 60, 1);
background-color: white;
margin: 5px;
padding: 5px 10px;
border-radius: 5px;
box-shadow:
0 10px 25px -5px
color-mix(in srgb, rgba(200, 155, 60, 1), transparent 80%),
0 8px 10px -6px
color-mix(in srgb, rgba(200, 155, 60, 1), transparent 85%);
}
"
>Sacré</span
>
<span
style="
color: rgba(42, 157, 143, 1);
background-color: white;
margin: 5px;
padding: 5px 10px;
border-radius: 5px;
box-shadow:
0 10px 25px -5px
color-mix(in srgb, rgba(42, 157, 143, 1), transparent 80%),
0 8px 10px -6px
color-mix(in srgb, rgba(42, 157, 143, 1), transparent 85%);
}
"
>Primal</span
>
<div class="dnd-intro-badges">
<span class="ink-badge ink-arcane">Arcane</span>
<span class="ink-badge ink-martial">Martial</span>
<span class="ink-badge ink-hybride">Neutre</span>
<span class="ink-badge ink-divin">Sacré</span>
<span class="ink-badge ink-primal">Primal</span>
</div>
<div class="class-grid">
@@ -178,13 +80,14 @@ const especeData = personnages.reduce((acc, p) => {
classes.map((charClass) => {
const charactersInClass =
classData[charClass.id.toLowerCase()] || [];
const colorEncre =
SPECTRUM[charClass.data.encre] || "#c89b3c";
const encreKey =
charClass.data.encre?.toLowerCase() ||
"default";
return (
<div
class="class-card"
style={`--accent-color: ${colorEncre}`}
style={`--accent-color: var(--color-${encreKey})`}
>
<h3 class="dynamic-title">
{charClass.data.title}
@@ -194,7 +97,7 @@ const especeData = personnages.reduce((acc, p) => {
<a
href={`/personnages/${p.id}`}
class="notification-bubble bubble-species-border"
style={`--p-color: ${p.colorSpectre}`}
style={`--p-color: ${p.spectreVar}`}
>
<span class="p-name">
{p.nom}
@@ -225,60 +128,13 @@ const especeData = personnages.reduce((acc, p) => {
<p class="dnd-intro">
L'espèce influence votre apparence et votre histoire
</p>
<div
class="dnd-intro"
style="
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
"
>
<span
style="
background-color: rgba(200, 155, 60, 0.4);
margin: 5px;
padding: 5px;
border-radius: 5px;
"
>Solaire</span
>
<span
style="
background-color: rgba(0, 171, 255, 0.4);
margin: 5px;
padding: 5px;
border-radius: 5px;
"
>Elementaire</span
>
<span
style="
background-color: rgba(139, 69, 19, 0.4);
margin: 5px;
padding: 5px 10px;
border-radius: 5px;
"
>Terrestre</span
>
<span
style="
background-color: rgba(0, 128, 0, 0.4);
margin: 5px;
padding: 5px 10px;
border-radius: 5px;
"
>Sylvestre</span
>
<span
style="
background-color: rgba(75, 0, 130, 0.4);
margin: 5px;
padding: 5px 10px;
border-radius: 5px;
"
>Ombre</span
>
<div class="dnd-intro-badges">
<span class="spec-badge spec-solaire">Solaire</span>
<span class="spec-badge spec-elementaire">Elementaire</span>
<span class="spec-badge spec-terrestre">Terrestre</span>
<span class="spec-badge spec-sylvestre">Sylvestre</span>
<span class="spec-badge spec-ombre">Ombre</span>
</div>
<div class="class-grid">
@@ -286,23 +142,24 @@ const especeData = personnages.reduce((acc, p) => {
especes.map((espece) => {
const charactersInEspece =
especeData[espece.id.toLowerCase()] || [];
const colorBg =
SPECTRUM[espece.data.spectre] ||
"rgba(255,255,255,1)";
const spectreKey =
espece.data.spectre?.toLowerCase() || "default";
return (
<div
class="class-card species-card"
style={`--bg-color: ${colorBg}`}
style={`--bg-color: var(--color-${spectreKey})`}
>
<h3>{espece.data.title}</h3>
<div class="bubble-container">
{charactersInEspece.map((p) => {
// Construction du dégradé : si une seule couleur, on la double pour le gradient
const gradient =
p.colors.length > 1
? `linear-gradient(to right, ${p.colors[0]}, ${p.colors[1]})`
: p.colors[0];
// Création du dégradé basé sur les variables CSS des encres
const c1 = `var(--color-${p.inks[0]})`;
const c2 =
p.inks.length > 1
? `var(--color-${p.inks[1]})`
: c1;
const gradient = `linear-gradient(to right, ${c1}, ${c2})`;
return (
<a
@@ -337,6 +194,7 @@ const especeData = personnages.reduce((acc, p) => {
</div>
<style>
/* [Tes styles existants restent identiques sauf les ajouts ci-dessous] */
.creation-container {
max-width: 1000px;
margin: 0 auto;
@@ -368,6 +226,69 @@ const especeData = personnages.reduce((acc, p) => {
opacity: 0.8;
margin-bottom: 2rem;
}
.dnd-intro-badges {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
margin-bottom: 2rem;
gap: 10px;
}
/* Badges d'Encre avec ombres colorées basées sur les variables du Layout */
.ink-badge {
background-color: white;
padding: 5px 10px;
border-radius: 5px;
font-family: "Cinzel", serif;
font-size: 0.8rem;
}
.ink-arcane {
color: var(--color-arcane);
box-shadow: 0 4px 15px -5px var(--color-arcane);
}
.ink-martial {
color: var(--color-martial);
box-shadow: 0 4px 15px -5px var(--color-martial);
}
.ink-hybride {
color: var(--color-hybride);
box-shadow: 0 4px 15px -5px var(--color-hybride);
}
.ink-divin {
color: var(--color-divin);
box-shadow: 0 4px 15px -5px var(--color-divin);
}
.ink-primal {
color: var(--color-primal);
box-shadow: 0 4px 15px -5px var(--color-primal);
}
/* Badges de Spectre */
.spec-badge {
padding: 5px 10px;
border-radius: 5px;
font-family: "Cinzel", serif;
font-size: 0.8rem;
color: #1a1a1a;
}
.spec-solaire {
background-color: var(--color-solaire);
}
.spec-elementaire {
background-color: var(--color-elementaire);
}
.spec-terrestre {
background-color: var(--color-terrestre);
}
.spec-sylvestre {
background-color: var(--color-sylvestre);
}
.spec-ombre {
background-color: var(--color-ombre);
}
.class-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
@@ -382,11 +303,8 @@ const especeData = personnages.reduce((acc, p) => {
flex-direction: column;
justify-content: space-between;
transition: all 0.3s ease;
box-shadow:
0 10px 25px -5px
color-mix(in srgb, var(--accent-color), transparent 80%),
0 8px 10px -6px
color-mix(in srgb, var(--accent-color), transparent 85%);
box-shadow: 0 10px 25px -5px
color-mix(in srgb, var(--accent-color), transparent 80%);
}
.dynamic-title {
color: var(--accent-color) !important;
@@ -396,6 +314,7 @@ const especeData = personnages.reduce((acc, p) => {
.species-card {
background-color: var(--bg-color) !important;
}
.notification-bubble {
background: #1a1a1a !important;
color: white !important;
@@ -407,33 +326,34 @@ const especeData = personnages.reduce((acc, p) => {
align-items: center;
gap: 5px;
border: 1px solid rgba(255, 255, 255, 0.1);
text-decoration: none; /* Important pour les liens */
text-decoration: none;
transition: transform 0.2s ease;
}
.notification-bubble:hover {
transform: translateY(-2px);
filter: brightness(1.2);
}
.bubble-species-border {
background-color: var(--p-color) !important;
border-bottom: 3px solid var(--p-color) !important;
box-shadow: inset 0 -2px 0 0 var(--p-color);
border-bottom: 3px solid rgba(0, 0, 0, 0.2) !important;
}
.bubble-class-border {
position: relative;
border-top: none !important;
overflow: hidden;
}
.bubble-class-border::before {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
height: 4px; /* L'épaisseur de ta bordure haute */
height: 4px;
background: var(--p-gradient);
}
.p-lvl {
font-size: 0.6rem;
opacity: 0.7;
@@ -448,6 +368,7 @@ const especeData = personnages.reduce((acc, p) => {
margin-bottom: 1.5rem;
min-height: 30px;
}
.select-button {
font-family: "Cinzel", serif;
text-decoration: none;
@@ -456,7 +377,7 @@ const especeData = personnages.reduce((acc, p) => {
background: color-mix(
in srgb,
var(--accent-color),
transparent 50%
transparent 85%
);
transition: all 0.3s;
}
@@ -464,14 +385,17 @@ const especeData = personnages.reduce((acc, p) => {
background: var(--accent-color);
color: white;
}
.species-button {
border-color: #1a1a1a;
color: #1a1a1a;
background: transparent;
}
.species-button:hover {
background: #1a1a1a;
color: white;
}
.class-card p {
font-family: "Cinzel", serif;
font-size: 0.85rem;

View File

@@ -14,16 +14,86 @@ const { entry } = Astro.props;
if (!entry) return Astro.redirect("/404");
const { Content } = await render(entry);
/**
* RÉCUPÉRATION DU MAPPING SPECTRE
* Utilise les variables définies dans GameLayout.astro
* (ex: --color-terrestre, --color-solaire, etc.)
*/
const themeColor = `var(--color-${entry.data.spectre})`;
---
<GameLayout title={entry.data.title}>
<article class="espece-detail">
<header class="post-header">
<a href="/creation" class="back-nav">← Retour à la création</a>
<div class="espece-badges">
<span
class="badge spectre"
style={`border-color: ${themeColor}; color: ${themeColor}`}
>
Spectre {entry.data.spectre}
</span>
<span class="badge speed">
Vitesse : {entry.data.vitesse}
</span>
</div>
<h1>{entry.data.title}</h1>
<p>{entry.data.description}</p>
<p class="description">{entry.data.description}</p>
</header>
<div class="espece-specs">
{
entry.data.bonus_stats &&
Object.keys(entry.data.bonus_stats).length > 0 && (
<section class="spec-block">
<h3>Bonus de Caractéristiques</h3>
<div class="stats-bonus-grid">
{Object.entries(entry.data.bonus_stats).map(
([stat, bonus]) => (
<div class="stat-bonus-tag">
<span class="stat-name">
{stat}
</span>
<span class="stat-value">
+{bonus}
</span>
</div>
),
)}
</div>
</section>
)
}
{
entry.data.traits_raciaux &&
entry.data.traits_raciaux.length > 0 && (
<section class="spec-block">
<h3>Traits Raciaux</h3>
<div class="tags-row">
{entry.data.traits_raciaux.map((trait) => (
<span class="tag">{trait}</span>
))}
</div>
</section>
)
}
</div>
{
entry.data.langues && entry.data.langues.length > 0 && (
<section class="languages-section">
<h3>Langues connues</h3>
<p class="languages-list">
{entry.data.langues.join(", ")}
</p>
</section>
)
}
<hr class="separator" />
<div class="prose-content">
@@ -57,13 +127,101 @@ const { Content } = await render(entry);
margin-bottom: 2rem;
}
.espece-badges {
display: flex;
justify-content: center;
gap: 10px;
margin-bottom: 1rem;
}
.badge {
font-family: "Cinzel", serif;
font-size: 0.7rem;
text-transform: uppercase;
padding: 2px 10px;
border: 1px solid #dcd0b9;
border-radius: 12px;
color: #7a7362;
}
h1 {
margin: 0.5rem 0;
font-family: "Cinzel", serif;
font-size: 2.2rem;
font-size: 2.5rem;
color: #3a352a;
}
.description {
font-style: italic;
color: #7a7362;
max-width: 600px;
margin: 0 auto;
}
.espece-specs {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 2rem;
margin-top: 2rem;
text-align: left;
}
h3 {
font-family: "Cinzel", serif;
font-size: 0.9rem;
color: #b8860b;
border-bottom: 1px solid #f0eada;
margin-bottom: 0.8rem;
}
.stats-bonus-grid {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.stat-bonus-tag {
background: #fffdf5;
border: 1px solid #b8860b;
padding: 4px 10px;
border-radius: 4px;
display: flex;
gap: 8px;
font-size: 0.85rem;
}
.stat-name {
text-transform: capitalize;
font-weight: 500;
}
.stat-value {
font-weight: bold;
color: #b8860b;
}
.tags-row {
display: flex;
flex-wrap: wrap;
gap: 6px;
}
.tag {
font-size: 0.8rem;
padding: 4px 10px;
background: #fcfaf7;
border: 1px solid #eee5d8;
border-radius: 4px;
}
.languages-section {
margin-top: 1.5rem;
}
.languages-list {
font-size: 0.9rem;
color: #4a453c;
}
.separator {
border: 0;
height: 1px;
@@ -78,5 +236,17 @@ const { Content } = await render(entry);
.prose-content {
font-size: 1.1rem;
line-height: 1.7;
}
@media (max-width: 640px) {
.espece-specs {
grid-template-columns: 1fr;
}
.espece-detail {
padding: 1.5rem;
border: none;
background: transparent;
}
}
</style>

View File

@@ -20,7 +20,7 @@ const sortedPosts = chroniclesOnly.sort((a, b) => {
// Si les dates sont identiques, on trie par titre (001, 002, etc.)
if (dateDiff === 0) {
return b.data.title.localeCompare(a.data.title);
return a.data.title.localeCompare(b.data.title);
}
return dateDiff;