diff --git a/assets/actions/armes-disparates.svg b/assets/actions/armes-disparates.svg new file mode 100644 index 00000000..38a4c94e --- /dev/null +++ b/assets/actions/armes-disparates.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/css/foundryvtt-reve-de-dragon.css b/css/foundryvtt-reve-de-dragon.css index ff117aac..a7739aef 100644 --- a/css/foundryvtt-reve-de-dragon.css +++ b/css/foundryvtt-reve-de-dragon.css @@ -855,7 +855,7 @@ select, max-width: 1.4rem; max-height: 1.4rem; 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 { 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) { 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 { max-width: 15rem; background: var(--background-tooltip); diff --git a/less/foundryvtt-reve-de-dragon.less b/less/foundryvtt-reve-de-dragon.less index fd96d073..9059f90a 100644 --- a/less/foundryvtt-reve-de-dragon.less +++ b/less/foundryvtt-reve-de-dragon.less @@ -118,7 +118,7 @@ max-width: 1.4rem; max-height: 1.4rem; 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 { @@ -1955,6 +1955,13 @@ div:nth-child(odd) { background: var(--background-tooltip-alt); } + div img { + display: inline; + margin: 0; + max-width: 1rem; + max-height: 1rem; + filter: invert(0.8); + } } } diff --git a/module/constants.js b/module/constants.js index 20eb0b4b..4dc65e74 100644 --- a/module/constants.js +++ b/module/constants.js @@ -53,9 +53,15 @@ export const RDD_CONFIG = { { value: "Rarissime", label: "Rarissime" } ], particuliere: { - 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'}, - rapidite: { key: 'rapidite', descr: 'en rapidité', img: 'systems/foundryvtt-reve-de-dragon/assets/ui/part-rapidite.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' }, + 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', } } diff --git a/module/rdd-bonus.js b/module/rdd-bonus.js index ff755333..2df7f67e 100644 --- a/module/rdd-bonus.js +++ b/module/rdd-bonus.js @@ -59,7 +59,7 @@ export class RdDBonus { static dmgRollV2(rollData, attaque) { const actor = rollData.active.actor const arme = attaque.arme - const dmgArme = RdDBonus.dmgArme(arme, attaque.dommagesArme) + const dmgArme = RdDBonus.dmgArme(arme, attaque.dommages) const dmg = { total: 0, dmgArme: dmgArme, @@ -70,7 +70,7 @@ export class RdDBonus { dmgSurprise: rollData.opponent?.surprise?.dmg ?? 0, mortalite: RdDBonus.mortalite(attaque.dmg?.mortalite, arme?.system.mortalite, rollData.opponent?.actor?.isEntite()), 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 } 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) { - 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) return dmgBase + Math.min(dmgBase, arme.system.magique ? arme.system.ecaille_efficacite : 0); } diff --git a/module/roll/roll-dialog-adapter.mjs b/module/roll/roll-dialog-adapter.mjs index 6f5a7c9a..809b3258 100644 --- a/module/roll/roll-dialog-adapter.mjs +++ b/module/roll/roll-dialog-adapter.mjs @@ -96,7 +96,7 @@ export class RollDialogAdapter { rolled.niveauNecessaire = RdDResolutionTable.findNiveauNecessaire(rollData.selectedCarac.value, rolled.roll) 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) { @@ -165,8 +165,6 @@ export class RollDialogAdapter { comp: attackerRoll.competence, main: RdDItemArme.getMainAttaque(attackerRoll.competence), equipe: attackerRoll.arme.system.equipe, - // carac: { key: caracCode, value: caracValue }, - // dommagesArme: dommagesArme, diff: attackerRoll.diffLibre, particuliere: attackerRoll.particuliere, tactique: RdDBonus.find(attackerRoll.tactique), diff --git a/module/roll/roll-part-sign.mjs b/module/roll/roll-part-sign.mjs index 8dd24c11..12ec40ba 100644 --- a/module/roll/roll-part-sign.mjs +++ b/module/roll/roll-part-sign.mjs @@ -1,6 +1,7 @@ +import { RDD_CONFIG } from "../constants.js" import { Misc } from "../misc.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 { ROLLDIALOG_SECTION, RollPart } from "./roll-part.mjs" @@ -40,28 +41,29 @@ export class RollPartSign extends RollPart { 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).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 if (current.surprise == 'demi') { current.diviseur *= 2 } 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)) { current.diviseur *= 2 - current.reasons.push('Armes disparates') + current.reasons.push({ img: RDD_CONFIG.icons.armesDisparates, label: 'Armes disparates' }) } if (this.isAttaqueFinesse(rollData)) { 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')) { current.diviseur = Math.min(current.diviseur, 4); } - current.reason = current.reasons.join(', ') + current.reason = current.reasons.map(it => it.label).join(', ') } isAttaqueFinesse(rollData) { @@ -76,8 +78,16 @@ export class RollPartSign extends RollPart { const current = this.getCurrent(rollData) if (current.surprise == 'demi') { return [ - { label: 'Significative requise ' + Misc.getFractionOneN(current.diviseur) }, - ...current.reasons.map(it => { return { label: ' ' + it } }) + { + label: 'Significative requise ' + Misc.getFractionOneN(current.diviseur) + }, + ...current.reasons.map(it => { + return { + label: it.img + ? ` ${it.label}` + : ` ${it.label}` + } + }) ] } return [] diff --git a/module/roll/roll-part.mjs b/module/roll/roll-part.mjs index 386cc709..d54b560f 100644 --- a/module/roll/roll-part.mjs +++ b/module/roll/roll-part.mjs @@ -30,7 +30,8 @@ export class RollPart { rollData.selected[this.code] = {} } } - + /** l'acteur actif du jet */ + getActor(rollData) { return rollData.active.actor } /** le conteneur de données du RollPart */ getRefs(rollData) { return rollData.refs[this.code] diff --git a/module/settings/status-effects.js b/module/settings/status-effects.js index 219ed4c2..0f8e8a9d 100644 --- a/module/settings/status-effects.js +++ b/module/settings/status-effects.js @@ -1,4 +1,4 @@ -import { SYSTEM_RDD } from "../constants.js"; +import { RDD_CONFIG, SYSTEM_RDD } from "../constants.js"; import { Misc } from "../misc.js"; import { RdDBonus } from "../rdd-bonus.js"; @@ -17,11 +17,13 @@ export const STATUSES = { StatusForceWeak: 'force insuffisante', } -const forceWeakStatusEffect = { rdd: true, id: STATUSES.StatusForceWeak, name: 'EFFECT.StatusForceWeak', img: 'systems/foundryvtt-reve-de-dragon/assets/actions/weak.svg' }; -const demiReveStatusEffect = { rdd: true, id: STATUSES.StatusDemiReve, name: 'EFFECT.StatusDemiReve', img: 'systems/foundryvtt-reve-de-dragon/assets/actions/sort.svg' }; +export const forceWeakStatusEffect = { rdd: true, id: STATUSES.StatusForceWeak, name: 'EFFECT.StatusForceWeak', img: RDD_CONFIG.icons.forceWeak }; +export const demiReveStatusEffect = { + rdd: true, id: STATUSES.StatusDemiReve, name: 'EFFECT.StatusDemiReve', img: RDD_CONFIG.icons.demiReve +}; 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.StatusGrappled, tint: '#ff9900', name: 'EFFECT.StatusGrappled', 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: RDD_CONFIG.icons.empoignade }, { 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 },