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 }); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -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