diff --git a/apps/openmw/mwmechanics/magiceffects.cpp b/apps/openmw/mwmechanics/magiceffects.cpp index e20d28c35a..1c73bf1b15 100644 --- a/apps/openmw/mwmechanics/magiceffects.cpp +++ b/apps/openmw/mwmechanics/magiceffects.cpp @@ -66,6 +66,20 @@ namespace MWMechanics } } + EffectParam MagicEffects::get (const EffectKey& key) const + { + Collection::const_iterator iter = mCollection.find (key); + + if (iter==mCollection.end()) + { + return EffectParam(); + } + else + { + return iter->second; + } + } + MagicEffects MagicEffects::diff (const MagicEffects& prev, const MagicEffects& now) { MagicEffects result; diff --git a/apps/openmw/mwmechanics/magiceffects.hpp b/apps/openmw/mwmechanics/magiceffects.hpp index 4ed3df00bc..3d36ea813d 100644 --- a/apps/openmw/mwmechanics/magiceffects.hpp +++ b/apps/openmw/mwmechanics/magiceffects.hpp @@ -17,6 +17,8 @@ namespace MWMechanics EffectKey(); + EffectKey (int id, int arg = -1) : mId (id), mArg (arg) {} + EffectKey (const ESM::ENAMstruct& effect); }; @@ -64,6 +66,9 @@ namespace MWMechanics void add (const EffectKey& key, const EffectParam& param); + EffectParam get (const EffectKey& key) const; + ///< This function can safely be used for keys that are not present. + static MagicEffects diff (const MagicEffects& prev, const MagicEffects& now); ///< Return changes from \a prev to \a now. }; diff --git a/apps/openmw/mwmechanics/mechanicsmanager.cpp b/apps/openmw/mwmechanics/mechanicsmanager.cpp index 8d23211fa3..6fc204a591 100644 --- a/apps/openmw/mwmechanics/mechanicsmanager.cpp +++ b/apps/openmw/mwmechanics/mechanicsmanager.cpp @@ -147,9 +147,11 @@ namespace MWMechanics int agility = creatureStats.mAttributes[3].getBase(); int endurance = creatureStats.mAttributes[5].getBase(); + double magickaFactor = creatureStats.mMagicEffects.get (EffectKey (84)).mMagnitude*0.1 + 0.5; + creatureStats.mDynamic[0].setBase (static_cast (0.5 * (strength + endurance))); - // TODO: calculate factor - creatureStats.mDynamic[1].setBase (static_cast (intelligence + 1 * intelligence)); + creatureStats.mDynamic[1].setBase (static_cast (intelligence + + magickaFactor * intelligence)); creatureStats.mDynamic[2].setBase (strength+willpower+agility+endurance); for (int i=0; i<3; ++i)