forked from public/foundryvtt-reve-de-dragon
Gestion des significatives
This commit is contained in:
@@ -1,12 +1,14 @@
|
||||
# 13.0
|
||||
## 13.0.14 - Le familier d'Illysis
|
||||
|
||||
- Les réussites particulières en demi-surprise sont de simples réussites
|
||||
- Amélioration des entités:
|
||||
- l'attaquant ne sait plus que c'est une entité de cauchemar (surprise!)
|
||||
- l'encaissement indique une blessure dans le tchat... même si ce n'est que de l'endurance
|
||||
- les blurettes suivent les règles des entités de cauchemar (p322)
|
||||
- Nouvelle fenêtre de jets de dés
|
||||
- Attaque/défense des créatures
|
||||
- les attaques/parades avec une arme trop lourde se font en demi-surprise
|
||||
|
||||
## 13.0.13 - L'épanouissement d'Illysis
|
||||
|
||||
|
@@ -272,8 +272,8 @@ export class RdDBaseActorReve extends RdDBaseActor {
|
||||
return this.getEffectByStatus(STATUSES.StatusDemiReve) != undefined
|
||||
}
|
||||
|
||||
getSurprise(isCombat = undefined) {
|
||||
return StatusEffects.getSurprise(this.getEffects(), isCombat)
|
||||
getSurprise(isCombat = undefined, forceRequise = undefined) {
|
||||
return StatusEffects.getSurprise(this.getEffects(e => true, isCombat, forceRequise), isCombat)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
@@ -16,17 +16,20 @@ const levelDown = [
|
||||
];
|
||||
const levelImpossible = { score: 0, norm: 0, sign: 0, part: 0, epart: 0, etotal: 1 };
|
||||
|
||||
const reussiteNormale = { code: "norm", isPart: false, isSign: false, isSuccess: true, isEchec: false, isEPart: false, isETotal: false, ptTache: 1, ptQualite: 0, quality: "Réussite normale", condition: (target, roll) => (roll > target.sign && roll <= target.norm) };
|
||||
const reussiteSignificative = { code: "sign", isPart: false, isSign: true, isSuccess: true, isEchec: false, isEPart: false, isETotal: false, ptTache: 2, ptQualite: 1, quality: "Réussite significative", condition: (target, roll) => (roll > target.part && roll <= target.sign) };
|
||||
const reussiteInsuffisante = { code: "notSign", isPart: false, isSign: false, isSuccess: false, isEchec: true, isEPart: false, isETotal: false, ptTache: 0, ptQualite: -2, quality: "Réussite insuffisante", condition: (target, roll) => false }
|
||||
|
||||
const reussites = [
|
||||
{ code: "etotal", isPart: false, isSign: false, isSuccess: false, isEchec: true, isEPart: true, isETotal: true, ptTache: -4, ptQualite: -6, quality: "Echec total", condition: (target, roll) => roll >= target.etotal && roll <= 100 },
|
||||
{ code: "epart", isPart: false, isSign: false, isSuccess: false, isEchec: true, isEPart: true, isETotal: false, ptTache: -2, ptQualite: -4, quality: "Echec particulier", condition: (target, roll) => (roll >= target.epart && roll < target.etotal) },
|
||||
{ code: "echec", isPart: false, isSign: false, isSuccess: false, isEchec: true, isEPart: false, isETotal: false, ptTache: 0, ptQualite: -2, quality: "Echec normal", condition: (target, roll) => (roll > target.norm && roll < target.etotal) },
|
||||
{ code: "norm", isPart: false, isSign: false, isSuccess: true, isEchec: false, isEPart: false, isETotal: false, ptTache: 1, ptQualite: 0, quality: "Réussite normale", condition: (target, roll) => (roll > target.sign && roll <= target.norm) },
|
||||
{ code: "sign", isPart: false, isSign: true, isSuccess: true, isEchec: false, isEPart: false, isETotal: false, ptTache: 2, ptQualite: 1, quality: "Réussite significative", condition: (target, roll) => (roll > target.part && roll <= target.sign) },
|
||||
reussiteNormale,
|
||||
reussiteSignificative,
|
||||
{ code: "part", isPart: true, isSign: true, isSuccess: true, isEchec: false, isEPart: false, isETotal: false, ptTache: 3, ptQualite: 2, quality: "Réussite Particulière!", condition: (target, roll) => (roll > 0 && roll <= target.part) },
|
||||
{ code: "error", isPart: false, isSign: false, isSuccess: false, isEchec: true, isEPart: true, isETotal: true, ptTache: 0, ptQualite: 0, quality: "Jet de dés invalide", condition: (target, roll) => (roll <= 0 || roll > 100) }
|
||||
];
|
||||
|
||||
const reussiteInsuffisante = { code: "notSign", isPart: false, isSign: false, isSuccess: false, isEchec: true, isEPart: false, isETotal: false, ptTache: 0, ptQualite: -2, quality: "Réussite insuffisante", condition: (target, roll) => false }
|
||||
/* -------------------------------------------- */
|
||||
const CARAC_MAXIMUM_RESOLUTION = 40;
|
||||
/* -------------------------------------------- */
|
||||
@@ -157,7 +160,7 @@ export class RdDResolutionTable {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static replaceParticuliereDemiSurprise(chances){
|
||||
static replaceParticuliereDemiSurprise(chances) {
|
||||
foundry.utils.mergeObject(chances, reussites.find(x => x.code == 'part'), { overwrite: true });
|
||||
}
|
||||
|
||||
@@ -165,7 +168,7 @@ export class RdDResolutionTable {
|
||||
static significativeRequise(chances) {
|
||||
chances.roll = Math.min(chances.part + 1, chances.sign)
|
||||
foundry.utils.mergeObject(chances, reussites.find(x => x.code == 'sign'), { overwrite: true });
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static succesRequis(chances) {
|
||||
@@ -197,6 +200,7 @@ export class RdDResolutionTable {
|
||||
if (chances.norm < roll * diviseur) {
|
||||
return reussiteInsuffisante
|
||||
}
|
||||
return reussiteSignificative
|
||||
}
|
||||
return reussite
|
||||
}
|
||||
|
@@ -26,7 +26,7 @@ export class RollBasicParts {
|
||||
static loadSurprise(who, forceRequise) {
|
||||
if (who?.actor) {
|
||||
foundry.utils.mergeObject(who,
|
||||
StatusEffects.getActorEffetSurprise(who.actor, forceRequise),
|
||||
StatusEffects.getActorEffetSurprise(who.actor),
|
||||
{ overwrite: true, inPlace: true })
|
||||
}
|
||||
}
|
||||
|
@@ -5,6 +5,7 @@ import { PART_CARAC } from "./roll-part-carac.mjs"
|
||||
import { PART_COMP } from "./roll-part-comp.mjs"
|
||||
import { PART_DIFF } from "./roll-part-diff.mjs"
|
||||
import { RollPartSelect } from "./roll-part-select.mjs"
|
||||
import { PART_SIGN } from "./roll-part-sign.mjs"
|
||||
import { ROLLDIALOG_SECTION } from "./roll-part.mjs"
|
||||
|
||||
export const PART_ATTAQUE = 'attaque'
|
||||
@@ -111,7 +112,9 @@ export class RollPartAttaque extends RollPartSelect {
|
||||
part.setDiff(rollData, { type: DIFF.ATTAQUE, value: current.initialDiff })
|
||||
current.initialDiff = undefined
|
||||
}
|
||||
break
|
||||
}
|
||||
case PART_SIGN: return part.setArme(rollData, false, current.forceRequise)
|
||||
}
|
||||
}
|
||||
return undefined
|
||||
|
@@ -101,7 +101,7 @@ export class RollPartDefense extends RollPartSelect {
|
||||
case PART_CARAC: return part.filterCaracs(rollData, [current.carac])
|
||||
case PART_COMP: return part.filterComps(rollData, [current.comp?.name])
|
||||
case PART_DIFF: return part.setDiff(rollData, this.getDiffDefense(rollData))
|
||||
case PART_SIGN: return part.setArmeDisparate(rollData, this.isArmeDisparate(rollData))
|
||||
case PART_SIGN: return part.setArme(rollData, this.isArmeDisparate(rollData), current.forceRequise)
|
||||
}
|
||||
}
|
||||
return undefined
|
||||
|
@@ -40,8 +40,8 @@ export class RollPartSign extends RollPart {
|
||||
const isCombat = this.isCombat(rollData)
|
||||
const current = this.getCurrent(rollData)
|
||||
current.armeDisparate = isCombat && current.armeDisparate
|
||||
current.surprise = actor.getSurprise(isCombat) // TODO: could be from rollData.active.surprise??
|
||||
current.reasons = actor.getEffects(it => StatusEffects.niveauSurprise(it) > 0)
|
||||
current.surprise = actor.getSurprise(isCombat, current.forceRequise ?? 0)
|
||||
current.reasons = actor.getEffects(it => StatusEffects.niveauSurprise(it, isCombat) > 0, current.forceRequise ?? 0)
|
||||
.map(it => { return { img: it.img, label: game.i18n.localize(it.name) } })
|
||||
current.diviseur = 1
|
||||
if (current.surprise == 'demi') {
|
||||
@@ -102,7 +102,9 @@ export class RollPartSign extends RollPart {
|
||||
})
|
||||
}
|
||||
|
||||
setArmeDisparate(rollData, armeDisparate) {
|
||||
this.getCurrent(rollData).armeDisparate = armeDisparate
|
||||
setArme(rollData, armeDisparate, forceRequise) {
|
||||
const current = this.getCurrent(rollData)
|
||||
current.armeDisparate = armeDisparate
|
||||
current.forceRequise = forceRequise
|
||||
}
|
||||
}
|
@@ -84,8 +84,8 @@ export class StatusEffects extends FormApplication {
|
||||
)
|
||||
}
|
||||
|
||||
static getActorEffetSurprise(actor, forceRequise) {
|
||||
const effets = actor?.getEffects(StatusEffects.isSurprise, forceRequise) ?? []
|
||||
static getActorEffetSurprise(actor) {
|
||||
const effets = actor?.getEffects(StatusEffects.isSurprise) ?? []
|
||||
return {
|
||||
effets: effets,
|
||||
surprise: effets.length > 0
|
||||
|
Reference in New Issue
Block a user