@@ -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