From adaa31d76c3e4c5c391d04a383ea03cc971f7322 Mon Sep 17 00:00:00 2001 From: Stefan Zermatten Date: Tue, 13 Sep 2022 17:34:30 +0200 Subject: [PATCH] damage tags to ignore multipliers --- .../applyPropertyByType/applyDamage.js | 13 ++++++---- .../computeImplicitVariable.js | 26 +++++++++---------- .../ui/properties/forms/DamageForm.vue | 2 +- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/app/imports/api/engine/actions/applyPropertyByType/applyDamage.js b/app/imports/api/engine/actions/applyPropertyByType/applyDamage.js index 6900fa56..c35546de 100644 --- a/app/imports/api/engine/actions/applyPropertyByType/applyDamage.js +++ b/app/imports/api/engine/actions/applyPropertyByType/applyDamage.js @@ -1,4 +1,4 @@ -import { some, intersection, difference, remove } from 'lodash'; +import { some, intersection, difference, remove, includes } from 'lodash'; import applyProperty from '../applyProperty.js'; import {insertCreatureLog} from '/imports/api/creature/log/CreatureLogs.js'; import resolve, { Context, toString } from '/imports/parser/resolve.js'; @@ -147,21 +147,21 @@ function applyDamageMultipliers({target, damage, damageProp, logValue}){ if ( multiplier.immunity && - some(multiplier.immunities, multiplierAppliesTo(damageProp)) + some(multiplier.immunities, multiplierAppliesTo(damageProp, 'immunity')) ){ logValue.push(`Immune to ${damageTypeText}`); return 0; } else { if ( multiplier.resistance && - some(multiplier.resistances, multiplierAppliesTo(damageProp)) + some(multiplier.resistances, multiplierAppliesTo(damageProp, 'resistance')) ){ logValue.push(`Resistant to ${damageTypeText}`); damage = Math.floor(damage / 2); } if ( multiplier.vulnerability && - some(multiplier.vulnerabilities, multiplierAppliesTo(damageProp)) + some(multiplier.vulnerabilities, multiplierAppliesTo(damageProp, 'vulnerability')) ){ logValue.push(`Vulnerable to ${damageTypeText}`); damage = Math.floor(damage * 2); @@ -170,8 +170,11 @@ function applyDamageMultipliers({target, damage, damageProp, logValue}){ return damage; } -function multiplierAppliesTo(damageProp){ +function multiplierAppliesTo(damageProp, multiplierType){ return multiplier => { + // Apply the default 'ignore x' tags + if (includes(damageProp.tags, `ignore ${multiplierType}`)) return false; + const hasRequiredTags = difference( multiplier.includeTags, damageProp.tags ).length === 0; diff --git a/app/imports/api/engine/computation/computeComputation/computeByType/computeVariable/computeImplicitVariable.js b/app/imports/api/engine/computation/computeComputation/computeByType/computeVariable/computeImplicitVariable.js index 61e081f8..13dcc7f2 100644 --- a/app/imports/api/engine/computation/computeComputation/computeByType/computeVariable/computeImplicitVariable.js +++ b/app/imports/api/engine/computation/computeComputation/computeByType/computeVariable/computeImplicitVariable.js @@ -7,19 +7,19 @@ import getAggregatorResult from './getAggregatorResult.js'; export default function computeImplicitVariable(node){ const prop = {}; - // Combine damage multipliers - if (node.data.immunity){ - prop.immunity = node.data.immunity; - prop.immunities = node.data.immunities; - } - if (node.data.resistance){ - prop.resistance = node.data.resistance; - prop.resistances = node.data.resistances; - } - if (node.data.vulnerability){ - prop.vulnerability = node.data.vulnerability; - prop.vulnerabilities = node.data.vulnerabilities; - } + // Combine damage multipliers + if (node.data.immunity){ + prop.immunity = node.data.immunity; + prop.immunities = node.data.immunities; + } + if (node.data.resistance){ + prop.resistance = node.data.resistance; + prop.resistances = node.data.resistances; + } + if (node.data.vulnerability){ + prop.vulnerability = node.data.vulnerability; + prop.vulnerabilities = node.data.vulnerabilities; + } const result = getAggregatorResult(node); if (result !== undefined){ diff --git a/app/imports/ui/properties/forms/DamageForm.vue b/app/imports/ui/properties/forms/DamageForm.vue index fc8be6ee..98d92e3d 100644 --- a/app/imports/ui/properties/forms/DamageForm.vue +++ b/app/imports/ui/properties/forms/DamageForm.vue @@ -48,7 +48,7 @@ chips deletable-chips hint="" - :items="['magical', 'silvered']" + :items="['magical', 'silvered', 'ignore resistance', 'ignore vulnerability', 'ignore immunity']" :value="model.tags" :error-messages="errors.tags" @change="change('tags', ...arguments)"