Skip to content

Commit 724aaea

Browse files
committed
Merge branch 'decibelscanbenegativetoo' into 'master'
Invert CastPenalty Closes #9083 See merge request OpenMW/openmw!5300
2 parents aaaddd8 + 09f1633 commit 724aaea

1 file changed

Lines changed: 28 additions & 16 deletions

File tree

apps/openmw/mwscript/statsextensions.cpp

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1267,9 +1267,9 @@ namespace MWScript
12671267
ESM::RefId mNegativeEffect;
12681268

12691269
public:
1270-
OpGetMagicEffect(int positiveEffect, int negativeEffect)
1271-
: mPositiveEffect(ESM::MagicEffect::indexToRefId(positiveEffect))
1272-
, mNegativeEffect(ESM::MagicEffect::indexToRefId(negativeEffect))
1270+
OpGetMagicEffect(ESM::RefId positiveEffect, ESM::RefId negativeEffect)
1271+
: mPositiveEffect(positiveEffect)
1272+
, mNegativeEffect(negativeEffect)
12731273
{
12741274
}
12751275

@@ -1284,7 +1284,9 @@ namespace MWScript
12841284
}
12851285

12861286
const MWMechanics::MagicEffects& effects = ptr.getClass().getCreatureStats(ptr).getMagicEffects();
1287-
float currentValue = effects.getOrDefault(mPositiveEffect).getMagnitude();
1287+
float currentValue = 0.f;
1288+
if (!mPositiveEffect.empty())
1289+
currentValue += effects.getOrDefault(mPositiveEffect).getMagnitude();
12881290
if (!mNegativeEffect.empty())
12891291
currentValue -= effects.getOrDefault(mNegativeEffect).getMagnitude();
12901292

@@ -1308,9 +1310,9 @@ namespace MWScript
13081310
ESM::RefId mNegativeEffect;
13091311

13101312
public:
1311-
OpSetMagicEffect(int positiveEffect, int negativeEffect)
1312-
: mPositiveEffect(ESM::MagicEffect::indexToRefId(positiveEffect))
1313-
, mNegativeEffect(ESM::MagicEffect::indexToRefId(negativeEffect))
1313+
OpSetMagicEffect(ESM::RefId positiveEffect, ESM::RefId negativeEffect)
1314+
: mPositiveEffect(positiveEffect)
1315+
, mNegativeEffect(negativeEffect)
13141316
{
13151317
}
13161318

@@ -1325,7 +1327,9 @@ namespace MWScript
13251327
return;
13261328

13271329
MWMechanics::MagicEffects& effects = ptr.getClass().getCreatureStats(ptr).getMagicEffects();
1328-
float currentValue = effects.getOrDefault(mPositiveEffect).getMagnitude();
1330+
float currentValue = 0.f;
1331+
if (!mPositiveEffect.empty())
1332+
currentValue += effects.getOrDefault(mPositiveEffect).getMagnitude();
13291333
if (!mNegativeEffect.empty())
13301334
currentValue -= effects.getOrDefault(mNegativeEffect).getMagnitude();
13311335

@@ -1337,7 +1341,12 @@ namespace MWScript
13371341
if (mPositiveEffect == ESM::MagicEffect::ResistFrost)
13381342
currentValue += effects.getOrDefault(ESM::MagicEffect::FrostShield).getMagnitude();
13391343

1340-
effects.modifyBase(mPositiveEffect, (arg - static_cast<int>(currentValue)));
1344+
arg -= static_cast<int>(currentValue);
1345+
1346+
if (!mPositiveEffect.empty())
1347+
effects.modifyBase(mPositiveEffect, arg);
1348+
else
1349+
effects.modifyBase(mNegativeEffect, -arg);
13411350
}
13421351
};
13431352

@@ -1348,9 +1357,9 @@ namespace MWScript
13481357
ESM::RefId mNegativeEffect;
13491358

13501359
public:
1351-
OpModMagicEffect(int positiveEffect, int negativeEffect)
1352-
: mPositiveEffect(ESM::MagicEffect::indexToRefId(positiveEffect))
1353-
, mNegativeEffect(ESM::MagicEffect::indexToRefId(negativeEffect))
1360+
OpModMagicEffect(ESM::RefId positiveEffect, ESM::RefId negativeEffect)
1361+
: mPositiveEffect(positiveEffect)
1362+
, mNegativeEffect(negativeEffect)
13541363
{
13551364
}
13561365

@@ -1365,7 +1374,10 @@ namespace MWScript
13651374
return;
13661375

13671376
MWMechanics::CreatureStats& stats = ptr.getClass().getCreatureStats(ptr);
1368-
stats.getMagicEffects().modifyBase(mPositiveEffect, arg);
1377+
if (!mPositiveEffect.empty())
1378+
stats.getMagicEffects().modifyBase(mPositiveEffect, arg);
1379+
else
1380+
stats.getMagicEffects().modifyBase(mNegativeEffect, -arg);
13691381
}
13701382
};
13711383

@@ -1587,7 +1599,7 @@ namespace MWScript
15871599
{ ESM::MagicEffect::Jump, ESM::RefId() },
15881600
{ ESM::MagicEffect::Levitate, ESM::RefId() },
15891601
{ ESM::MagicEffect::Shield, ESM::RefId() },
1590-
{ ESM::MagicEffect::Sound, ESM::RefId() },
1602+
{ ESM::RefId(), ESM::MagicEffect::Sound },
15911603
{ ESM::MagicEffect::Silence, ESM::RefId() },
15921604
{ ESM::MagicEffect::Blind, ESM::RefId() },
15931605
{ ESM::MagicEffect::Paralyze, ESM::RefId() },
@@ -1598,8 +1610,8 @@ namespace MWScript
15981610

15991611
for (int i = 0; i < 24; ++i)
16001612
{
1601-
int positive = ESM::MagicEffect::refIdToIndex(sMagicEffects[i].mPositiveEffect);
1602-
int negative = ESM::MagicEffect::refIdToIndex(sMagicEffects[i].mNegativeEffect);
1613+
const ESM::RefId& positive = sMagicEffects[i].mPositiveEffect;
1614+
const ESM::RefId& negative = sMagicEffects[i].mNegativeEffect;
16031615

16041616
interpreter.installSegment5<OpGetMagicEffect<ImplicitRef>>(
16051617
Compiler::Stats::opcodeGetMagicEffect + i, positive, negative);

0 commit comments

Comments
 (0)