refacto: harmonisation du système avec les règles Hamalron JDR

Corrections majeures :
- HamalronTirageTarot extends Roll (évaluation des jets fonctionnelle)
- Correction du nom de classe Langue (HamalronFaction -> HamalronLangue)
- Création du template tab-navigation.hbs manquant
- Type acteur 'character' -> 'personnage' dans _preCreate

Types d'items corrigés (anglais -> français) :
- weapon -> arme, armor -> armure, equipment -> equipement
- Suppression des types inexistants (deal, malefica, ritual, perk)

Modèles :
- cost -> cout (armure, equipement)
- Tarot : default -> initial
- Sortilege : LOCALIZATION_PREFIXES corrigé
- Constantes CHOICE_ADVANTAGES_DISADVANTAGES et ATTACK_MODIFIERS ajoutées
- ATTACK_MODIFIERS supprimé (plus utilisé)

Templates alignés sur les modèles réels :
- enemy-trait : suppression champs manquants (trauma, stats, domain...)
- personnage-equipement : champs alignés sur arme/armure/equipement
- personnage-sortileges : suppression domain/level/rituals
- enemy-main : suppression stats et flavorText
- base-actor : suppression mortality, toChat limité aux tarots

Jets de compétence :
- Égalité = réussite (>= au lieu de >, conforme aux règles p.155)
- Comparaison robuste des cartes de succès (via String())

Le Mat :
- Les autres joueurs peuvent renouveler leur main (règle p.151)

findTarotItem : recherche dans game.items puis compendiums
await manquants ajoutés sur saveDeckState()
AGENTS.md créé
This commit is contained in:
2026-07-10 18:52:20 +02:00
parent 4bc381f2e6
commit 68b3079da8
25 changed files with 257 additions and 570 deletions
-1
View File
@@ -19,7 +19,6 @@ export default class HamalronArme extends foundry.abstract.TypeDataModel {
prepareDerivedData() {
super.prepareDerivedData();
let actor = this.parent?.actor;
}
}
+1 -1
View File
@@ -9,7 +9,7 @@ export default class HamalronArmure extends foundry.abstract.TypeDataModel {
schema.description = new fields.HTMLField({ required: true, textSearch: true })
schema.protection = new fields.NumberField({ required: true, initial: 0, min: 0, integer: true })
schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 })
schema.cout = new fields.NumberField({ required: true, initial: 0, min: 0 })
return schema
}
+1 -1
View File
@@ -9,7 +9,7 @@ export default class HamalronEquipement extends foundry.abstract.TypeDataModel {
schema.description = new fields.HTMLField({ required: true, textSearch: true })
schema.quantity = new fields.NumberField({ required: true, initial: 1, min: 0, integer: true })
schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 })
schema.cout = new fields.NumberField({ required: true, initial: 0, min: 0 })
return schema
}
+2 -2
View File
@@ -1,6 +1,6 @@
import { SYSTEM } from "../config/system.mjs";
export default class HamalronFaction extends foundry.abstract.TypeDataModel {
export default class HamalronLangue extends foundry.abstract.TypeDataModel {
static defineSchema() {
const fields = foundry.data.fields;
const schema = {};
@@ -12,5 +12,5 @@ export default class HamalronFaction extends foundry.abstract.TypeDataModel {
}
/** @override */
static LOCALIZATION_PREFIXES = ["HAMALRON.Faction"];
static LOCALIZATION_PREFIXES = ["HAMALRON.Langue"];
}
+1 -5
View File
@@ -66,17 +66,13 @@ export default class HamalronPersonnage extends foundry.abstract.TypeDataModel {
* @returns {Promise<null>} - A promise that resolves to null if the roll is cancelled.
*/
async roll(rollType, rollItem) {
let opponentTarget
const hasTarget = opponentTarget !== undefined
let roll = await HamalronTirageTarot.prompt({
rollType,
rollItem,
actorId: this.parent.id,
actorName: this.parent.name,
actorImage: this.parent.img,
hasTarget,
target: opponentTarget
hasTarget: false,
})
if (!roll) return null
+1 -6
View File
@@ -24,18 +24,13 @@ export default class HamalronPNJ extends foundry.abstract.TypeDataModel {
static LOCALIZATION_PREFIXES = ["HAMALRON.PNJ"]
async roll(rollType, rollItem) {
let opponentTarget
const hasTarget = opponentTarget !== undefined
let roll = await HamalronTirageTarot.prompt({
rollType,
rollItem,
actorId: this.parent.id,
actorName: this.parent.name,
actorImage: this.parent.img,
traits: this.parent.items.filter(i => i.type === "trait"),
hasTarget,
target: opponentTarget
hasTarget: false,
})
if (!roll) return null
+1 -1
View File
@@ -13,6 +13,6 @@ export default class HamalronSortilege extends foundry.abstract.TypeDataModel {
}
/** @override */
static LOCALIZATION_PREFIXES = ["HAMALRON.Ritual"]
static LOCALIZATION_PREFIXES = ["HAMALRON.Sortilege"]
}
+1 -1
View File
@@ -15,7 +15,7 @@ export default class HamalronTarot extends foundry.abstract.TypeDataModel {
schema.image = new fields.FilePathField({
required: false,
categories: ["IMAGE"],
default: "icons/svg/treasure.svg",
initial: "icons/svg/treasure.svg",
})
return schema;