forked from public/foundryvtt-reve-de-dragon
Fix: ajustements surprises
Affichage de l'image de la surprise
This commit is contained in:
@@ -855,7 +855,7 @@ select,
|
|||||||
max-width: 1.4rem;
|
max-width: 1.4rem;
|
||||||
max-height: 1.4rem;
|
max-height: 1.4rem;
|
||||||
border: 1px;
|
border: 1px;
|
||||||
background: center / contain no-repeat url('../../assets/ui/icone_parchement_vierge.webp');
|
background: center / contain no-repeat url('../../icons/templates/icone_parchement_vierge.webp');
|
||||||
}
|
}
|
||||||
.system-foundryvtt-reve-de-dragon .sheet-header .header-compteurs {
|
.system-foundryvtt-reve-de-dragon .sheet-header .header-compteurs {
|
||||||
width: calc(60% - 110px - 1rem);
|
width: calc(60% - 110px - 1rem);
|
||||||
@@ -2708,6 +2708,13 @@ select,
|
|||||||
.system-foundryvtt-reve-de-dragon :is(.tooltip, .tooltip-overflow) .ttt-ajustements div:nth-child(odd) {
|
.system-foundryvtt-reve-de-dragon :is(.tooltip, .tooltip-overflow) .ttt-ajustements div:nth-child(odd) {
|
||||||
background: var(--background-tooltip-alt);
|
background: var(--background-tooltip-alt);
|
||||||
}
|
}
|
||||||
|
.system-foundryvtt-reve-de-dragon :is(.tooltip, .tooltip-overflow) .ttt-ajustements div img {
|
||||||
|
display: inline;
|
||||||
|
margin: 0;
|
||||||
|
max-width: 1rem;
|
||||||
|
max-height: 1rem;
|
||||||
|
filter: invert(0.8);
|
||||||
|
}
|
||||||
.system-foundryvtt-reve-de-dragon aside#tooltip {
|
.system-foundryvtt-reve-de-dragon aside#tooltip {
|
||||||
max-width: 15rem;
|
max-width: 15rem;
|
||||||
background: var(--background-tooltip);
|
background: var(--background-tooltip);
|
||||||
|
|||||||
@@ -118,7 +118,7 @@
|
|||||||
max-width: 1.4rem;
|
max-width: 1.4rem;
|
||||||
max-height: 1.4rem;
|
max-height: 1.4rem;
|
||||||
border: 1px;
|
border: 1px;
|
||||||
background: center / contain no-repeat url('../../assets/ui/icone_parchement_vierge.webp');
|
background: center / contain no-repeat url('../../icons/templates/icone_parchement_vierge.webp');
|
||||||
}
|
}
|
||||||
|
|
||||||
.sheet-header .header-compteurs {
|
.sheet-header .header-compteurs {
|
||||||
@@ -1955,6 +1955,13 @@
|
|||||||
div:nth-child(odd) {
|
div:nth-child(odd) {
|
||||||
background: var(--background-tooltip-alt);
|
background: var(--background-tooltip-alt);
|
||||||
}
|
}
|
||||||
|
div img {
|
||||||
|
display: inline;
|
||||||
|
margin: 0;
|
||||||
|
max-width: 1rem;
|
||||||
|
max-height: 1rem;
|
||||||
|
filter: invert(0.8);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -53,9 +53,15 @@ export const RDD_CONFIG = {
|
|||||||
{ value: "Rarissime", label: "Rarissime" }
|
{ value: "Rarissime", label: "Rarissime" }
|
||||||
],
|
],
|
||||||
particuliere: {
|
particuliere: {
|
||||||
force: { key: 'force', descr: 'en force', img: 'systems/foundryvtt-reve-de-dragon/assets/ui/part-force.svg'},
|
force: { key: 'force', descr: 'en force', img: 'systems/foundryvtt-reve-de-dragon/assets/ui/part-force.svg' },
|
||||||
finesse: { key: 'finesse', descr: 'en finesse', img: 'systems/foundryvtt-reve-de-dragon/assets/ui/part-finesse.svg'},
|
finesse: { key: 'finesse', descr: 'en finesse', img: 'systems/foundryvtt-reve-de-dragon/assets/ui/part-finesse.svg' },
|
||||||
rapidite: { key: 'rapidite', descr: 'en rapidité', img: 'systems/foundryvtt-reve-de-dragon/assets/ui/part-rapidite.svg'},
|
rapidite: { key: 'rapidite', descr: 'en rapidité', img: 'systems/foundryvtt-reve-de-dragon/assets/ui/part-rapidite.svg' },
|
||||||
|
},
|
||||||
|
icons: {
|
||||||
|
armesDisparates: 'systems/foundryvtt-reve-de-dragon/assets/actions/armes-disparates.svg',
|
||||||
|
demiReve: 'systems/foundryvtt-reve-de-dragon/assets/actions/sort.svg',
|
||||||
|
empoignade: 'systems/foundryvtt-reve-de-dragon/icons/empoignade.webp',
|
||||||
|
forceWeak: 'systems/foundryvtt-reve-de-dragon/assets/actions/weak.svg',
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ export class RdDBonus {
|
|||||||
static dmgRollV2(rollData, attaque) {
|
static dmgRollV2(rollData, attaque) {
|
||||||
const actor = rollData.active.actor
|
const actor = rollData.active.actor
|
||||||
const arme = attaque.arme
|
const arme = attaque.arme
|
||||||
const dmgArme = RdDBonus.dmgArme(arme, attaque.dommagesArme)
|
const dmgArme = RdDBonus.dmgArme(arme, attaque.dommages)
|
||||||
const dmg = {
|
const dmg = {
|
||||||
total: 0,
|
total: 0,
|
||||||
dmgArme: dmgArme,
|
dmgArme: dmgArme,
|
||||||
@@ -70,7 +70,7 @@ export class RdDBonus {
|
|||||||
dmgSurprise: rollData.opponent?.surprise?.dmg ?? 0,
|
dmgSurprise: rollData.opponent?.surprise?.dmg ?? 0,
|
||||||
mortalite: RdDBonus.mortalite(attaque.dmg?.mortalite, arme?.system.mortalite, rollData.opponent?.actor?.isEntite()),
|
mortalite: RdDBonus.mortalite(attaque.dmg?.mortalite, arme?.system.mortalite, rollData.opponent?.actor?.isEntite()),
|
||||||
dmgActor: RdDBonus.bonusDmg(actor, attaque.carac.key, dmgArme, attaque.forceRequise),
|
dmgActor: RdDBonus.bonusDmg(actor, attaque.carac.key, dmgArme, attaque.forceRequise),
|
||||||
dmgForceInsuffisante: Math.min(0, actor.getForce() - attaque.forceRequise),
|
dmgForceInsuffisante: Math.min(0, actor.getForce() - (attaque.forceRequise ?? 0)),
|
||||||
dmgDiffLibre: ReglesOptionnelles.isUsing('degat-ajout-malus-libre') ? Math.abs(attaque.diff ?? 0) : 0
|
dmgDiffLibre: ReglesOptionnelles.isUsing('degat-ajout-malus-libre') ? Math.abs(attaque.diff ?? 0) : 0
|
||||||
}
|
}
|
||||||
dmg.total = dmg.dmgSurprise + dmg.dmgTactique + dmg.dmgArme + dmg.dmgActor + dmg.dmgParticuliere + dmg.dmgForceInsuffisante + dmg.dmgDiffLibre
|
dmg.total = dmg.dmgSurprise + dmg.dmgTactique + dmg.dmgArme + dmg.dmgActor + dmg.dmgParticuliere + dmg.dmgForceInsuffisante + dmg.dmgDiffLibre
|
||||||
@@ -105,9 +105,9 @@ export class RdDBonus {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static dmgArme(arme, dommagesMain) {
|
static dmgArme(arme, dommages) {
|
||||||
if (arme) {
|
if (arme) {
|
||||||
let dmgBase = dommagesMain ?? Number(arme.system.dommages ?? 0);
|
let dmgBase = dommages ?? Number(arme.system.dommages ?? 0);
|
||||||
//Le bonus dégats magiques ne peut pas faire dépasser le bonus de l'arme (cf p.278)
|
//Le bonus dégats magiques ne peut pas faire dépasser le bonus de l'arme (cf p.278)
|
||||||
return dmgBase + Math.min(dmgBase, arme.system.magique ? arme.system.ecaille_efficacite : 0);
|
return dmgBase + Math.min(dmgBase, arme.system.magique ? arme.system.ecaille_efficacite : 0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ export class RollDialogAdapter {
|
|||||||
rolled.niveauNecessaire = RdDResolutionTable.findNiveauNecessaire(rollData.selectedCarac.value, rolled.roll)
|
rolled.niveauNecessaire = RdDResolutionTable.findNiveauNecessaire(rollData.selectedCarac.value, rolled.roll)
|
||||||
rolled.ajustementNecessaire = rolled.niveauNecessaire - diff
|
rolled.ajustementNecessaire = rolled.niveauNecessaire - diff
|
||||||
}
|
}
|
||||||
rollData.ajustements = rollData.ajustements.map(aj => { return { label: aj.label, value: aj.value } })
|
rollData.ajustements = rollData.ajustements.map(a => { return { label: a.label, value: a.value } })
|
||||||
}
|
}
|
||||||
|
|
||||||
static adjustDemiSurprise(rollData) {
|
static adjustDemiSurprise(rollData) {
|
||||||
@@ -165,8 +165,6 @@ export class RollDialogAdapter {
|
|||||||
comp: attackerRoll.competence,
|
comp: attackerRoll.competence,
|
||||||
main: RdDItemArme.getMainAttaque(attackerRoll.competence),
|
main: RdDItemArme.getMainAttaque(attackerRoll.competence),
|
||||||
equipe: attackerRoll.arme.system.equipe,
|
equipe: attackerRoll.arme.system.equipe,
|
||||||
// carac: { key: caracCode, value: caracValue },
|
|
||||||
// dommagesArme: dommagesArme,
|
|
||||||
diff: attackerRoll.diffLibre,
|
diff: attackerRoll.diffLibre,
|
||||||
particuliere: attackerRoll.particuliere,
|
particuliere: attackerRoll.particuliere,
|
||||||
tactique: RdDBonus.find(attackerRoll.tactique),
|
tactique: RdDBonus.find(attackerRoll.tactique),
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
|
import { RDD_CONFIG } from "../constants.js"
|
||||||
import { Misc } from "../misc.js"
|
import { Misc } from "../misc.js"
|
||||||
import { ReglesOptionnelles } from "../settings/regles-optionnelles.js"
|
import { ReglesOptionnelles } from "../settings/regles-optionnelles.js"
|
||||||
import { StatusEffects } from "../settings/status-effects.js"
|
import { demiReveStatusEffect, StatusEffects } from "../settings/status-effects.js"
|
||||||
import { ROLL_TYPE_ATTAQUE, ROLL_TYPE_DEFENSE } from "./roll-constants.mjs"
|
import { ROLL_TYPE_ATTAQUE, ROLL_TYPE_DEFENSE } from "./roll-constants.mjs"
|
||||||
import { ROLLDIALOG_SECTION, RollPart } from "./roll-part.mjs"
|
import { ROLLDIALOG_SECTION, RollPart } from "./roll-part.mjs"
|
||||||
|
|
||||||
@@ -40,28 +41,29 @@ export class RollPartSign extends RollPart {
|
|||||||
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) // TODO: could be from rollData.active.surprise??
|
||||||
current.reasons = actor.getEffects(it => StatusEffects.niveauSurprise(it) > 0).map(it => it.name)
|
current.reasons = actor.getEffects(it => StatusEffects.niveauSurprise(it) > 0)
|
||||||
|
.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') {
|
||||||
current.diviseur *= 2
|
current.diviseur *= 2
|
||||||
}
|
}
|
||||||
if (isCombat && actor.isDemiReve()) {
|
if (isCombat && actor.isDemiReve()) {
|
||||||
current.reasons.push('Demi-rêve en combat')
|
current.reasons.push({ img: RDD_CONFIG.icons.demiReve, label: 'Demi-rêve en combat' })
|
||||||
}
|
}
|
||||||
if (this.isParadeArmeDisparate(current)) {
|
if (this.isParadeArmeDisparate(current)) {
|
||||||
current.diviseur *= 2
|
current.diviseur *= 2
|
||||||
current.reasons.push('Armes disparates')
|
current.reasons.push({ img: RDD_CONFIG.icons.armesDisparates, label: 'Armes disparates' })
|
||||||
}
|
}
|
||||||
if (this.isAttaqueFinesse(rollData)) {
|
if (this.isAttaqueFinesse(rollData)) {
|
||||||
current.diviseur *= 2
|
current.diviseur *= 2
|
||||||
current.reasons.push('Particulière en finesse')
|
current.reasons.push({ img: RDD_CONFIG.particuliere.finesse.img, label: 'Particulière en finesse' })
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ReglesOptionnelles.isUsing('tripleSignificative')) {
|
if (!ReglesOptionnelles.isUsing('tripleSignificative')) {
|
||||||
current.diviseur = Math.min(current.diviseur, 4);
|
current.diviseur = Math.min(current.diviseur, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
current.reason = current.reasons.join(', ')
|
current.reason = current.reasons.map(it => it.label).join(', ')
|
||||||
}
|
}
|
||||||
|
|
||||||
isAttaqueFinesse(rollData) {
|
isAttaqueFinesse(rollData) {
|
||||||
@@ -76,8 +78,16 @@ export class RollPartSign extends RollPart {
|
|||||||
const current = this.getCurrent(rollData)
|
const current = this.getCurrent(rollData)
|
||||||
if (current.surprise == 'demi') {
|
if (current.surprise == 'demi') {
|
||||||
return [
|
return [
|
||||||
{ label: 'Significative requise ' + Misc.getFractionOneN(current.diviseur) },
|
{
|
||||||
...current.reasons.map(it => { return { label: '<i class="fa-solid fa-triangle-exclamation"></i> ' + it } })
|
label: 'Significative requise ' + Misc.getFractionOneN(current.diviseur)
|
||||||
|
},
|
||||||
|
...current.reasons.map(it => {
|
||||||
|
return {
|
||||||
|
label: it.img
|
||||||
|
? `<img src="${it.img}"> ${it.label}`
|
||||||
|
: `<i class="fa-solid fa-triangle-exclamation"></i> ${it.label}`
|
||||||
|
}
|
||||||
|
})
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
return []
|
return []
|
||||||
|
|||||||
@@ -30,7 +30,8 @@ export class RollPart {
|
|||||||
rollData.selected[this.code] = {}
|
rollData.selected[this.code] = {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/** l'acteur actif du jet */
|
||||||
|
getActor(rollData) { return rollData.active.actor }
|
||||||
/** le conteneur de données du RollPart */
|
/** le conteneur de données du RollPart */
|
||||||
getRefs(rollData) {
|
getRefs(rollData) {
|
||||||
return rollData.refs[this.code]
|
return rollData.refs[this.code]
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { SYSTEM_RDD } from "../constants.js";
|
import { RDD_CONFIG, SYSTEM_RDD } from "../constants.js";
|
||||||
import { Misc } from "../misc.js";
|
import { Misc } from "../misc.js";
|
||||||
import { RdDBonus } from "../rdd-bonus.js";
|
import { RdDBonus } from "../rdd-bonus.js";
|
||||||
|
|
||||||
@@ -17,11 +17,13 @@ export const STATUSES = {
|
|||||||
StatusForceWeak: 'force insuffisante',
|
StatusForceWeak: 'force insuffisante',
|
||||||
}
|
}
|
||||||
|
|
||||||
const forceWeakStatusEffect = { rdd: true, id: STATUSES.StatusForceWeak, name: 'EFFECT.StatusForceWeak', img: 'systems/foundryvtt-reve-de-dragon/assets/actions/weak.svg' };
|
export const forceWeakStatusEffect = { rdd: true, id: STATUSES.StatusForceWeak, name: 'EFFECT.StatusForceWeak', img: RDD_CONFIG.icons.forceWeak };
|
||||||
const demiReveStatusEffect = { rdd: true, id: STATUSES.StatusDemiReve, name: 'EFFECT.StatusDemiReve', img: 'systems/foundryvtt-reve-de-dragon/assets/actions/sort.svg' };
|
export const demiReveStatusEffect = {
|
||||||
|
rdd: true, id: STATUSES.StatusDemiReve, name: 'EFFECT.StatusDemiReve', img: RDD_CONFIG.icons.demiReve
|
||||||
|
};
|
||||||
const rddStatusEffects = [
|
const rddStatusEffects = [
|
||||||
{ rdd: true, id: STATUSES.StatusGrappling, tint: '#33cc33', name: 'EFFECT.StatusGrappling', img: 'systems/foundryvtt-reve-de-dragon/icons/empoignade.webp' },
|
{ rdd: true, id: STATUSES.StatusGrappling, tint: '#33cc33', name: 'EFFECT.StatusGrappling', img: RDD_CONFIG.icons.empoignade },
|
||||||
{ rdd: true, id: STATUSES.StatusGrappled, tint: '#ff9900', name: 'EFFECT.StatusGrappled', img: 'systems/foundryvtt-reve-de-dragon/icons/empoignade.webp' },
|
{ rdd: true, id: STATUSES.StatusGrappled, tint: '#ff9900', name: 'EFFECT.StatusGrappled', img: RDD_CONFIG.icons.empoignade },
|
||||||
|
|
||||||
{ rdd: true, id: STATUSES.StatusRestrained, name: 'EFFECT.StatusRestrained', img: 'icons/svg/net.svg' },
|
{ rdd: true, id: STATUSES.StatusRestrained, name: 'EFFECT.StatusRestrained', img: 'icons/svg/net.svg' },
|
||||||
{ rdd: true, id: STATUSES.StatusStunned, name: 'EFFECT.StatusStunned', img: 'icons/svg/stoned.svg', "duration.rounds": 1 },
|
{ rdd: true, id: STATUSES.StatusStunned, name: 'EFFECT.StatusStunned', img: 'icons/svg/stoned.svg', "duration.rounds": 1 },
|
||||||
|
|||||||
Reference in New Issue
Block a user