Commit Graph

60 Commits

Author SHA1 Message Date
1e92232013 feat: ajout du Mod. de situation (-8 à +8) dans toutes les fenêtres de jet
- Select situationMod (-8 → +8 par pas de 1) visible sur tous les jets (y compris résistance)
- Intégré dans la prévisualisation de formule (update dynamique)
- Pris en compte dans totalModifier au même titre que les autres mods
- Respecte la règle 'Puiser' (malus ignoré si puiser activé)
- Affiché dans la carte de tchat si non nul (symbole ◈)
- i18n : CELESTOPOL.Roll.situationMod

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-31 00:44:56 +02:00
c7ec648696 fix: déplace le bloc XP en bas de l'onglet Biographie
Ordre : Biographie → Notes → XP

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-31 00:40:23 +02:00
11e7adba16 fix: amélioration du contraste texte dans la section XP
- Labels des compteurs : --cel-orange-light → --cel-border (#7a5c20 brun foncé)
- Valeur XP actuelle : --cel-orange → --cel-green (#1b3828 vert foncé)
- Valeur XP dépensée : rgba dorée → --cel-border
- Accordéon référence : --cel-orange-light → --cel-border, hover → --cel-green

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-31 00:39:00 +02:00
9dbd614c5a feat: gestion de l'expérience (XP)
- Schéma xp dans CelestopolCharacter : actuel (éditable), log[] ({montant, raison, date}), depense (calculé dans prepareDerivedData)
- Bouton 'Dépenser XP' → DialogV2 (montant + raison) : décrémente actuel, logge l'entrée
- Suppression d'entrée de log avec remboursement des points (mode édition)
- Section XP en haut de l'onglet Biographie : compteurs, tableau du log, référentiel des coûts
- i18n : section CELESTOPOL.XP.* complète
- CSS : .xp-section avec compteurs, tableau de log et accordéon de référence

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-31 00:33:59 +02:00
79a68ee9ab feat: jets d'attaque depuis les armes (combat en opposition)
- Bouton ⚔ Attaquer sur chaque arme (onglet Équipement, mode Jeu)
- rollAttack(itemId) dans character.mjs : jet Échauffourée vs Corps PNJ
- Dialog combat : input numérique 'Corps du PNJ' à la place du sélect difficulté
- computeResult() : margin===0 → résultat 'tie' (égalité) en combat
- Mêlée échec → blessure joueur auto-cochée (comme résistance)
- Distance échec → simple raté, pas de blessure joueur
- Chat message : infos arme, bandeau égalité, desc succès/échec combat
- CSS : bandeau 'tie' (brun doré), zone arme dans dialog
- i18n : CELESTOPOL.Combat.* (attack, corpsPnj, tie, successHit, etc.)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-30 00:29:29 +02:00
149d55dfa0 fix: améliorer lisibilité bandeau succès (jaune doré + text-shadow)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 23:52:22 +02:00
89d47ba6ec feat: tests de résistance (2d8+TR, auto-blessure sur échec)
- rollResistance(statId) dans character.mjs : formule 2d8 + bonus TR + malus blessures
- Dialog sans Modificateur/Aspect/Lune/Destin/Fortune/Puiser en mode résistance
- Auto-cochage de la prochaine case de blessure sur échec
- Chat message : notification blessure cochée (woundTaken)
- Stat-res cliquable (rollable) en mode jeu dans l'onglet compétences
- base-actor-sheet : routing clic stat-res → rollResistance
- CSS : .resistance-wound-notice
- i18n : resistanceTest, resistanceClickToRoll, woundTaken

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 23:35:38 +02:00
df2ed14f34 Résistance: dérivation automatique depuis les seuils de spécialisation
- Ajout resThreshold par domaine dans SKILLS (config/system.mjs)
  ame: artifice=5, attraction=2, coercition=3, faveur=6
  corps: echauffouree=6, effacement=3, mobilite=2, prouesse=5
  coeur: appreciation=6, arts=2, inspiration=3, traque=5
  esprit: instruction=2, mtechnologique=6, raisonnement=5, traitement=3
- prepareDerivedData() calcule stats.{stat}.res = +2 par seuil atteint
- Template: résistance non-éditable (span uniquement, valeur dérivée)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 22:55:27 +02:00
56620f31de Blessures: malus déjà auto-appliqué — fix i18n manquants + nettoyage
- Ajout clés i18n CELESTOPOL.Wound.* (anodin, dérisoire, négligeable…)
  → corrige l'affichage brut des clés dans la fenêtre de jet
- Suppression du setting 'autoWounds' (mort-né, le malus est toujours appliqué)
- Le malus de blessures est inclus automatiquement dans tous les jets
  via getWoundMalus() → prepareDerivedData() → blessures.lvl

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 22:42:21 +02:00
51206acac3 Modificateur: select difficulté nommée (Évident→Malaisé→Très difficile…)
- Remplace le select -4..+4 par les niveaux Évident/Malaisé/Difficile/etc.
- 'Évident' = réussite automatique (valeur 'auto', pas de dé, force succès)
- Aspect garde son select numérique -4..+4
- Chat message affiche 'Réussite automatique' si autoSuccess
- Ajout CONTEXT_MODIFIER_CHOICES dans config + clés i18n Modifier.*

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 22:19:34 +02:00
149bc4eb8b Fix: activer Destin dès qu'il y a des points (lvl > 0 au lieu de >= 8)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 22:04:16 +02:00
941548fcad fix: dériver lvl des jauges (blessures/destin/spleen) depuis les cases cochées
Les niveaux sont maintenant calculés automatiquement dans prepareDerivedData()
plutôt que stockés indépendamment — décocher une case met correctement lvl à jour.
Suppression des inputs manuels lvl dans le template (inutiles car dérivés).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 21:51:06 +02:00
3cd35b4a72 fix: migration obsolète — utilise _source.items pour détecter items non-initialisés
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 21:41:46 +02:00
0b53b19cf8 fix: migration auto des items de types obsolètes au démarrage
- Hook 'ready' (GM uniquement) supprime les items dont le type n'est
  plus enregistré (ex: 'attribute' de l'ancienne version)
- Évite l'erreur 'type X is not a valid type for Item Document class'

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 21:31:31 +02:00
37335d3e9f fix: Puiser dans ses ressources — JS dans render callback DialogV2
- Déplace la logique JS (update, show/hide puiser-row) du <script> inline
  vers le callback render: de DialogV2.wait() — les scripts inline ne
  s'exécutent pas via innerHTML dans Foundry v13
- Supprime hasMalus du dialogContext (plus nécessaire)
- Le bloc Puiser s'affiche dynamiquement dès que modifier ou aspect < 0

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 21:28:11 +02:00
63eb7f703a feat: implémente 'Puiser dans ses ressources'
Règle : le joueur peut ignorer tous les malus actifs contre une case de Spleen.

- roll.mjs : checkbox puiserRessources ; ignore woundMalus, modifier négatif
  et aspectMod négatif ; incrémente system.spleen.lvl +1 après le jet
- roll-dialog.hbs : bloc rouge foncé visible si woundMalus < 0 ; preview mis à jour
- chat-message.hbs : bandeau '💪 Ressources puisées' si utilisé
- roll.less : .form-puiser-row, .used-info.used-puiser
- lang/fr.json : Roll.puiser/puiserDesc/usedPuiser

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 20:38:55 +02:00
c1c85762c5 feat: décrémente Fortune de 1 après un jet utilisant la Fortune
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 20:12:08 +02:00
3cb31dfdef feat: ajoute la règle Fortune dans les jets
Règle : si Fortune > 0, le joueur peut cocher 'Fortune' pour lancer
1d8 + 8 au lieu de 2d8 (contraint les probabilités vers le haut).

- character.mjs : passe fortuneValue dans roll.prompt()
- roll.mjs : checkbox Fortune, formule 1d8 + 8 + totalModifier si cochée
- roll-dialog.hbs : bloc Fortune (visible si fortuneValue > 0), preview mis à jour
- chat-message.hbs : affiche '+8' dans la zone dés, ligne formule avec badge Fortune
- roll.less : styles .form-fortune-row, .fl-mod.fortune, .fortune-fixed-badge
- lang/fr.json : Roll.fortune/fortuneBonus/fortuneFixed/usedFortune

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 20:08:06 +02:00
79f961c4fa fix: affiche tous les composants dans la ligne formule du chat
Le total Foundry incluait skillValue + woundMalus mais la décomposition
ne les montrait pas, ce qui rendait le total incompréhensible.

- _getChatCardData : passe skillValue dans le contexte
- chat-message.hbs : affiche skillValue (titre tooltip) et woundMalus
  séparément dans la ligne 'diceSum + skillValue ± woundMalus ± modifier ± aspectMod = total'
- lang : ajoute Roll.skillValue

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 19:19:50 +02:00
8b0a1630a1 feat: remplace les inputs modificateur/aspect par des selects -4 à +4
- roll.mjs : passe modifierChoices dans le contexte du dialogue
- roll-dialog.hbs : <select> pour modifier et aspectModifier (-4..+4)
- roll.less : select inclus dans la règle width:100% du form-two-col

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 19:15:50 +02:00
d5488516c4 feat: ajoute le champ 'valeur' sur l'item Aspect
- DataModel : champ NumberField 'valeur' (entier, min 0, défaut 0)
- Fiche item aspect.hbs : champ valeur dans le header
- Fiche personnage : affiche item.system.valeur dans la liste des aspects
- CSS : .item-value dans cel-item-row (vert, gras) ; .item-header-valeur dans items.less
- i18n : CELESTOPOL.Aspect.valeur

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 19:10:42 +02:00
a5f0224b65 fix: améliore lisibilité des badges arme/armure dans l'onglet Équipement
Remplace le texte orange sur fond beige par un badge vert sombre/fond léger,
plus lisible. Malus en rouge sombre sur fond rouge clair.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 18:58:54 +02:00
ca665e7563 fix: supprime la duplication dans character-biography.hbs
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 18:55:36 +02:00
43f2f34b2b feat: ajoute l'onglet Équipement dans la fiche PJ
- Nouvel onglet 'Équipement' avec 3 sections : Armes, Armures, Équipements
- Template character-equipement.hbs avec affichage type/dégâts (armes),
  protection/malus (armures), et liste simple (équipements)
- Actions createWeapon et createArmure dans la fiche personnage
- Suppression de la section équipements de l'onglet Biographie
- Clés i18n : Tab.equipement, Item.noWeapons/noArmures/noEquipments
- CSS : styles .tab.equipement avec .equip-section et .item-tag badges

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 17:50:28 +02:00
2e5162969c Identity-row : taille +15% et mode édition unifié avec mode lecture
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 17:43:12 +02:00
5c8fb524df Fix : accolade manquante dans global.less (.header-fields)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 17:37:41 +02:00
0e0d8920b7 Personnage : ajout métier, origine, âge et faction dans le header
DataModel : metier (StringField), faction (StringField) ajoutés au top-level
Template : identity-row sous le concept avec les 4 champs
CSS : .identity-row avec label orange + valeur crème italique

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 17:35:11 +02:00
8f6f3823c6 Aspect : simplifié à un seul champ description
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 17:28:52 +02:00
7b2662bdd5 Items : layout exactement identique à la fiche Anomalie
- Classes .anomaly-body/.anomaly-section/.anomaly-section-title/.anomaly-editor-wrap
  promues au niveau partagé (.fvtt-celestopol.item)
- Templates equipment/weapon/armure/aspect utilisent ces classes exactes
- Suppression des anciens mixins item-body-mixin etc.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 17:25:40 +02:00
1f7ce03498 Items : layout homogène basé sur le modèle Anomalie
- Mixins LESS partagés (item-body, item-section, item-section-title, item-editor-wrap)
- anomaly-body/section utilisent désormais ces mixins
- Templates equipment/weapon/armure redessinés avec .item-body + .item-section
- Fond crème, titre orange-left-border, wrap blanc ProseMirror sur tous les items

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 17:22:01 +02:00
50f6c22a08 Items arme/armure/équipement : padding autour du contenu
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 17:19:16 +02:00
fb1fc1ef0d Équipement : simplifié à un seul champ description
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 17:16:21 +02:00
8b9c22ff4d Items : labels de type localisés + nom par défaut à la création
- TYPES.Item.weapon = 'Arme', TYPES.Item.armure = 'Armure' dans fr.json
- Hook preCreateItem : nom par défaut = label du type pour tous les items

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 17:14:45 +02:00
1d62f09375 system.json : suppression du paramètre de cache-busting dans le chemin CSS
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 17:09:51 +02:00
eceac4c122 Arme : ajout du champ Type (Mêlée / Distance)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 17:05:28 +02:00
5a8b151451 Nouveaux items Arme et Armure (DataModel + feuille + CSS)
Items:
- CelestopolWeapon : degats (0/1/2/X), portee (contact/courte/longue), description
- CelestopolArmure : protection (1-2), malus (0-2), description

Config:
- WEAPON_DAMAGE_TYPES et WEAPON_RANGE_TYPES ajoutés dans system.mjs
- Enregistrement des DataModels, sheets et templates dans fvtt-celestopol.mjs
- system.json : types weapon et armure avec htmlFields

UI:
- weapon.hbs : badge de dégâts avec hint, sélecteurs portée/dégâts
- armure.hbs : blocs protection + malus art-déco
- items.less : styles .weapon et .armure

i18n: clés Weapon.*, Armure.*, Sheet.weapon, Sheet.armure

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 17:03:23 +02:00
be323e6f68 Domaines/Factions : calcul automatique de la valeur depuis les cases cochées
prepareDerivedData() calcule désormais :
- skill.value = count(level1..level8 cochés) pour chaque domaine
- faction.value = count(level1..level9 cochés) pour chaque faction
- initiative recalculée après (dépend de mobilite.value et inspiration.value)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 16:57:49 +02:00
569edd833d Header personnage : suppression Anomalie, attributs sur ligne initiative
- Suppression du bloc 'Anomalie' (type + valeur) du header
- Attributs (Entregent/Fortune/Rêve/Vision) fusionnés sur la même ligne
  que l'initiative via .header-stat commun
- CSS : remplacement .perso-attributs/.perso-attr par .header-stat unifié

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 16:55:15 +02:00
70e297b48c Fix initiative : formule correcte selon les règles
- PJ : 4 + Mobilité (Corps) + Inspiration (Cœur)
- PNJ : Domaine Corps (inchangé, déjà correct)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 16:53:26 +02:00
6bad05809e Fix deprecation : loadTemplates → foundry.applications.handlebars.loadTemplates (v13)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 16:51:49 +02:00
2e06b70761 Fix deprecation : ItemSheet → foundry.appv1.sheets.ItemSheet (v13)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 16:50:29 +02:00
ae183bb1ff Fix deprecation : ActorSheet → foundry.appv1.sheets.ActorSheet (v13)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 16:49:42 +02:00
ad118ae60c Suppression item Attribut : redondant avec le DataModel personnage
- DataModel CelestopolAttribute supprimé (items.mjs)
- CelestopolAttributeSheet supprimée (item-sheets.mjs)
- Imports/registrations retirés (fvtt-celestopol.mjs)
- Section 'Attributs' supprimée de character-competences.hbs
- Action createAttribute + contexte attributes retirés (character-sheet.mjs)
- Template attribute.hbs supprimé
- Clés i18n attribute/attributes/newAttribute supprimées (fr.json)
- Type 'attribute' retiré des htmlFields (system.json)
- htmlFields anomaly corrigés : technique/narratif/exemples

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 16:49:16 +02:00
a881625515 Fix anomalie (onglet Domaine) : fond vert foncé, texte crème lisible
.anomaly-content avait background quasi-transparent (crème) avec
var(--cel-orange-light) illisible. Passage au fond var(--cel-green-dark)
et texte crème pour les labels/chips, cohérent avec le reste du bloc.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 16:44:40 +02:00
d0cf06648e Fix anomalie : barre domaines fond vert foncé + texte crème lisible
La barre .anomaly-skills-bar avait un fond semi-transparent sur fond crème
ce qui rendait le texte orange illisible. Passage à fond vert foncé
(cohérent avec le header) + texte crème pour les chips.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 16:41:37 +02:00
d2af32aba7 Fix éditeurs HTML : {{editor}} → {{formInput}} (API Foundry v13)
Tous les champs HTMLField utilisaient le vieux helper {{editor}} (v10/v11)
incompatible avec AppV2. Remplacement par {{formInput systemFields.xxx
enriched=enrichedXxx value=... name=... toggled=true}} dans :
- templates/anomaly.hbs (technique, narratif, exemples)
- templates/aspect.hbs (description, technique, narratif)
- templates/attribute.hbs (description, technique, narratif)
- templates/equipment.hbs (description)
- templates/character-biography.hbs (description, notes)
- templates/npc-blessures.hbs (description)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 16:40:08 +02:00
54151f8f6f Fix crash init : MOON_DICE_PHASES supprimé → nouveau setting rollMoonDieByDefault
SYSTEM.MOON_DICE_PHASES a été supprimé lors du refactoring 2d8.
Remplacement du setting 'defaultMoonPhase' (String + choices) par
'rollMoonDieByDefault' (Boolean) cohérent avec la nouvelle mécanique.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 16:36:59 +02:00
e0ccf6de9c Anomalie : refonte fiche — 3 champs Technique/Narratif/Exemples
- DataModel : suppression 'description', ajout 'exemples' (HTMLField)
- Template anomaly.hbs : suppression onglets, 3 sections éditables
  directement (sans bouton masqué), scroll interne
- Styles : fond crème + titres de section Art Déco + éditeurs blancs
  avec texte sombre lisible (fix couleur jaune illisible)
- item-sheets.mjs : contexte enrichedExemples + hauteur fenêtre 560px
- lang/fr.json : clé CELESTOPOL.Item.exemples

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 16:35:37 +02:00
39f390f361 Roll dialog: ajout background zone formulaire
Ajout fond crème + bordure sur .roll-form-rows pour délimiter
visuellement la zone de saisie du formulaire de jet.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 16:27:46 +02:00
54eacf6afc Fix formule de dés : 2d8 de base (règles Célestopol)
Correction majeure de la mécanique de jet selon les règles :

- Formule : 2d8 + Spécialisation + modificateurs (blessures/aspect/manual)
  (vs. ancienne formule erronée : Nd6 pool variable)
- Dé de la Lune : 1d8 narratif optionnel (résultat 1-8 → Triomphe /
  Brio / Contrecoup / Catastrophe) — pas un bonus numérique
- Destin : disponible uniquement jauge pleine (lvl=8), donne 3d8,
  vide la jauge entière après usage
- system.mjs : MOON_DIE_FACES (tableau 1-8) + MOON_RESULT_TYPES
- roll.mjs : logique complète réécrite (2d8, lune séparée, destin reset)
- character/npc.mjs : prefs.rollMoonDie + destGaugeFull
- roll-dialog.hbs : sans grille lune, checkbox dé lune, destin conditionnel
- chat-message.hbs : résultat dé lune narratif (phase + type + desc),
  dés .d8, suppression moonSymbol/moonBonus header
- roll.less : .form-moon-row, .moon-die-result avec couleurs Triomphe/
  Brio/Contrecoup/Catastrophe
- lang/fr.json : Moon.triomphe/brio/contrecoup/catastrophe + Full descs,
  Roll.rollMoonDie/destGaugeFull/destGaugeEmpty/baseDice

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-29 16:19:04 +02:00