66 lines
1.9 KiB
JavaScript
66 lines
1.9 KiB
JavaScript
export const MAP_PHASE = {
|
|
possession: { label: "possession", rang: 10 },
|
|
draconic: { label: "draconic", rang: 9 },
|
|
tir: { label: "tir", rang: 8 },
|
|
lancer: { label: "lancer", rang: 7 },
|
|
arme: { label: "mêlée", rang: 5 },
|
|
pugilat: { label: "pugilat", rang: 4 },
|
|
naturelle: { label: "créature", rang: 4 },
|
|
empoignade: { label: "empoignade", rang: 3 },
|
|
autre: { label: "autre action", rang: 2 },
|
|
demi: { label: "demi-surprise", rang: 0 },
|
|
totale: { label: "surprise totale", rang: -1 },
|
|
}
|
|
export const PHASE = Object.values(MAP_PHASE)
|
|
|
|
export class RdDInitiative {
|
|
|
|
static getRollInitiative(caracValue, niveau, bonus = 0) {
|
|
const base = RdDInitiative.ajustementInitiative(caracValue, niveau, bonus)
|
|
return "1d6" + (base >= 0 ? "+" : "") + base
|
|
}
|
|
|
|
static ajustementInitiative(caracValue, niveau, bonus) {
|
|
return niveau + Math.floor(caracValue / 2) + bonus
|
|
}
|
|
|
|
static formule(phase, carac, niveau, bonusMalus) {
|
|
const ajustement = RdDInitiative.ajustementInitiative(carac, niveau, bonusMalus)
|
|
return { phase, ajustement }
|
|
}
|
|
|
|
static phaseArme(categorie, arme) {
|
|
switch (categorie) {
|
|
case "tir":
|
|
case "lancer":
|
|
return MAP_PHASE[categorie]
|
|
default:
|
|
switch (arme.system.cac) {
|
|
case "empoignade":
|
|
case "pugilat":
|
|
case "naturelle":
|
|
return MAP_PHASE[arme.system.cac]
|
|
default:
|
|
return MAP_PHASE['arme']
|
|
}
|
|
}
|
|
}
|
|
|
|
static phase(keyOrRang) {
|
|
return MAP_PHASE[keyOrRang] ?? PHASE.find(it => it.rang == keyOrRang) ?? MAP_PHASE.autre
|
|
}
|
|
|
|
static async roll(formule) {
|
|
const sign = formule.ajustement >= 0 ? "+" : ""
|
|
const roll = new Roll(`1d6 + ${sign} + ${formule.ajustement}`)
|
|
await roll.evaluate()
|
|
const value = Math.max(roll.total, 0)
|
|
return {
|
|
roll: roll,
|
|
value: value,
|
|
init: formule.phase.rang + value / 100,
|
|
label: formule.phase.label
|
|
}
|
|
}
|
|
}
|