forked from public/foundryvtt-reve-de-dragon
Gestion des significatives
This commit is contained in:
@@ -1,12 +1,14 @@
|
|||||||
# 13.0
|
# 13.0
|
||||||
## 13.0.14 - Le familier d'Illysis
|
## 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:
|
- Amélioration des entités:
|
||||||
- l'attaquant ne sait plus que c'est une entité de cauchemar (surprise!)
|
- 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
|
- 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)
|
- les blurettes suivent les règles des entités de cauchemar (p322)
|
||||||
- Nouvelle fenêtre de jets de dés
|
- Nouvelle fenêtre de jets de dés
|
||||||
- Attaque/défense des créatures
|
- 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
|
## 13.0.13 - L'épanouissement d'Illysis
|
||||||
|
|
||||||
|
|||||||
@@ -272,8 +272,8 @@ export class RdDBaseActorReve extends RdDBaseActor {
|
|||||||
return this.getEffectByStatus(STATUSES.StatusDemiReve) != undefined
|
return this.getEffectByStatus(STATUSES.StatusDemiReve) != undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
getSurprise(isCombat = undefined) {
|
getSurprise(isCombat = undefined, forceRequise = undefined) {
|
||||||
return StatusEffects.getSurprise(this.getEffects(), isCombat)
|
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 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 = [
|
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: "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: "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: "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) },
|
reussiteNormale,
|
||||||
{ 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) },
|
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: "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) }
|
{ 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;
|
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 });
|
foundry.utils.mergeObject(chances, reussites.find(x => x.code == 'part'), { overwrite: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -165,7 +168,7 @@ export class RdDResolutionTable {
|
|||||||
static significativeRequise(chances) {
|
static significativeRequise(chances) {
|
||||||
chances.roll = Math.min(chances.part + 1, chances.sign)
|
chances.roll = Math.min(chances.part + 1, chances.sign)
|
||||||
foundry.utils.mergeObject(chances, reussites.find(x => x.code == 'sign'), { overwrite: true });
|
foundry.utils.mergeObject(chances, reussites.find(x => x.code == 'sign'), { overwrite: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static succesRequis(chances) {
|
static succesRequis(chances) {
|
||||||
@@ -197,6 +200,7 @@ export class RdDResolutionTable {
|
|||||||
if (chances.norm < roll * diviseur) {
|
if (chances.norm < roll * diviseur) {
|
||||||
return reussiteInsuffisante
|
return reussiteInsuffisante
|
||||||
}
|
}
|
||||||
|
return reussiteSignificative
|
||||||
}
|
}
|
||||||
return reussite
|
return reussite
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ export class RollBasicParts {
|
|||||||
static loadSurprise(who, forceRequise) {
|
static loadSurprise(who, forceRequise) {
|
||||||
if (who?.actor) {
|
if (who?.actor) {
|
||||||
foundry.utils.mergeObject(who,
|
foundry.utils.mergeObject(who,
|
||||||
StatusEffects.getActorEffetSurprise(who.actor, forceRequise),
|
StatusEffects.getActorEffetSurprise(who.actor),
|
||||||
{ overwrite: true, inPlace: true })
|
{ 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_COMP } from "./roll-part-comp.mjs"
|
||||||
import { PART_DIFF } from "./roll-part-diff.mjs"
|
import { PART_DIFF } from "./roll-part-diff.mjs"
|
||||||
import { RollPartSelect } from "./roll-part-select.mjs"
|
import { RollPartSelect } from "./roll-part-select.mjs"
|
||||||
|
import { PART_SIGN } from "./roll-part-sign.mjs"
|
||||||
import { ROLLDIALOG_SECTION } from "./roll-part.mjs"
|
import { ROLLDIALOG_SECTION } from "./roll-part.mjs"
|
||||||
|
|
||||||
export const PART_ATTAQUE = 'attaque'
|
export const PART_ATTAQUE = 'attaque'
|
||||||
@@ -111,7 +112,9 @@ export class RollPartAttaque extends RollPartSelect {
|
|||||||
part.setDiff(rollData, { type: DIFF.ATTAQUE, value: current.initialDiff })
|
part.setDiff(rollData, { type: DIFF.ATTAQUE, value: current.initialDiff })
|
||||||
current.initialDiff = undefined
|
current.initialDiff = undefined
|
||||||
}
|
}
|
||||||
|
break
|
||||||
}
|
}
|
||||||
|
case PART_SIGN: return part.setArme(rollData, false, current.forceRequise)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return undefined
|
return undefined
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ export class RollPartDefense extends RollPartSelect {
|
|||||||
case PART_CARAC: return part.filterCaracs(rollData, [current.carac])
|
case PART_CARAC: return part.filterCaracs(rollData, [current.carac])
|
||||||
case PART_COMP: return part.filterComps(rollData, [current.comp?.name])
|
case PART_COMP: return part.filterComps(rollData, [current.comp?.name])
|
||||||
case PART_DIFF: return part.setDiff(rollData, this.getDiffDefense(rollData))
|
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
|
return undefined
|
||||||
|
|||||||
@@ -40,8 +40,8 @@ export class RollPartSign extends RollPart {
|
|||||||
const isCombat = this.isCombat(rollData)
|
const isCombat = this.isCombat(rollData)
|
||||||
const current = this.getCurrent(rollData)
|
const current = this.getCurrent(rollData)
|
||||||
current.armeDisparate = isCombat && current.armeDisparate
|
current.armeDisparate = isCombat && current.armeDisparate
|
||||||
current.surprise = actor.getSurprise(isCombat) // TODO: could be from rollData.active.surprise??
|
current.surprise = actor.getSurprise(isCombat, current.forceRequise ?? 0)
|
||||||
current.reasons = actor.getEffects(it => StatusEffects.niveauSurprise(it) > 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) } })
|
.map(it => { return { img: it.img, label: game.i18n.localize(it.name) } })
|
||||||
current.diviseur = 1
|
current.diviseur = 1
|
||||||
if (current.surprise == 'demi') {
|
if (current.surprise == 'demi') {
|
||||||
@@ -102,7 +102,9 @@ export class RollPartSign extends RollPart {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
setArmeDisparate(rollData, armeDisparate) {
|
setArme(rollData, armeDisparate, forceRequise) {
|
||||||
this.getCurrent(rollData).armeDisparate = armeDisparate
|
const current = this.getCurrent(rollData)
|
||||||
|
current.armeDisparate = armeDisparate
|
||||||
|
current.forceRequise = forceRequise
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -84,8 +84,8 @@ export class StatusEffects extends FormApplication {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
static getActorEffetSurprise(actor, forceRequise) {
|
static getActorEffetSurprise(actor) {
|
||||||
const effets = actor?.getEffects(StatusEffects.isSurprise, forceRequise) ?? []
|
const effets = actor?.getEffects(StatusEffects.isSurprise) ?? []
|
||||||
return {
|
return {
|
||||||
effets: effets,
|
effets: effets,
|
||||||
surprise: effets.length > 0
|
surprise: effets.length > 0
|
||||||
|
|||||||
Reference in New Issue
Block a user