diff --git a/apps/openmw/mwclass/npc.cpp b/apps/openmw/mwclass/npc.cpp index d7516cb1b..4b0cddbf8 100644 --- a/apps/openmw/mwclass/npc.cpp +++ b/apps/openmw/mwclass/npc.cpp @@ -41,7 +41,6 @@ namespace struct CustomData : public MWWorld::CustomData { MWMechanics::NpcStats mNpcStats; - MWMechanics::CreatureStats mCreatureStats; MWMechanics::Movement mMovement; MWWorld::InventoryStore mInventoryStore; @@ -188,45 +187,45 @@ namespace MWClass for (int i=0; i<27; ++i) data->mNpcStats.getSkill (i).setBase (ref->mBase->mNpdt52.mSkills[i]); - data->mCreatureStats.getAttribute(0).set (ref->mBase->mNpdt52.mStrength); - data->mCreatureStats.getAttribute(1).set (ref->mBase->mNpdt52.mIntelligence); - data->mCreatureStats.getAttribute(2).set (ref->mBase->mNpdt52.mWillpower); - data->mCreatureStats.getAttribute(3).set (ref->mBase->mNpdt52.mAgility); - data->mCreatureStats.getAttribute(4).set (ref->mBase->mNpdt52.mSpeed); - data->mCreatureStats.getAttribute(5).set (ref->mBase->mNpdt52.mEndurance); - data->mCreatureStats.getAttribute(6).set (ref->mBase->mNpdt52.mPersonality); - data->mCreatureStats.getAttribute(7).set (ref->mBase->mNpdt52.mLuck); - data->mCreatureStats.setHealth (ref->mBase->mNpdt52.mHealth); - data->mCreatureStats.setMagicka (ref->mBase->mNpdt52.mMana); - data->mCreatureStats.setFatigue (ref->mBase->mNpdt52.mFatigue); - - data->mCreatureStats.setLevel(ref->mBase->mNpdt52.mLevel); + data->mNpcStats.getAttribute(0).set (ref->mBase->mNpdt52.mStrength); + data->mNpcStats.getAttribute(1).set (ref->mBase->mNpdt52.mIntelligence); + data->mNpcStats.getAttribute(2).set (ref->mBase->mNpdt52.mWillpower); + data->mNpcStats.getAttribute(3).set (ref->mBase->mNpdt52.mAgility); + data->mNpcStats.getAttribute(4).set (ref->mBase->mNpdt52.mSpeed); + data->mNpcStats.getAttribute(5).set (ref->mBase->mNpdt52.mEndurance); + data->mNpcStats.getAttribute(6).set (ref->mBase->mNpdt52.mPersonality); + data->mNpcStats.getAttribute(7).set (ref->mBase->mNpdt52.mLuck); + data->mNpcStats.setHealth (ref->mBase->mNpdt52.mHealth); + data->mNpcStats.setMagicka (ref->mBase->mNpdt52.mMana); + data->mNpcStats.setFatigue (ref->mBase->mNpdt52.mFatigue); + + data->mNpcStats.setLevel(ref->mBase->mNpdt52.mLevel); data->mNpcStats.setBaseDisposition(ref->mBase->mNpdt52.mDisposition); data->mNpcStats.setReputation(ref->mBase->mNpdt52.mReputation); } else { for (int i=0; i<3; ++i) - data->mCreatureStats.setDynamic (i, 10); + data->mNpcStats.setDynamic (i, 10); - data->mCreatureStats.setLevel(ref->mBase->mNpdt12.mLevel); + data->mNpcStats.setLevel(ref->mBase->mNpdt12.mLevel); data->mNpcStats.setBaseDisposition(ref->mBase->mNpdt12.mDisposition); data->mNpcStats.setReputation(ref->mBase->mNpdt12.mReputation); - autoCalculateAttributes(ref->mBase, data->mCreatureStats); + autoCalculateAttributes(ref->mBase, data->mNpcStats); } - data->mCreatureStats.getAiSequence().fill(ref->mBase->mAiPackage); + data->mNpcStats.getAiSequence().fill(ref->mBase->mAiPackage); - data->mCreatureStats.setAiSetting (0, ref->mBase->mAiData.mHello); - data->mCreatureStats.setAiSetting (1, ref->mBase->mAiData.mFight); - data->mCreatureStats.setAiSetting (2, ref->mBase->mAiData.mFlee); - data->mCreatureStats.setAiSetting (3, ref->mBase->mAiData.mAlarm); + data->mNpcStats.setAiSetting (0, ref->mBase->mAiData.mHello); + data->mNpcStats.setAiSetting (1, ref->mBase->mAiData.mFight); + data->mNpcStats.setAiSetting (2, ref->mBase->mAiData.mFlee); + data->mNpcStats.setAiSetting (3, ref->mBase->mAiData.mAlarm); // spells for (std::vector::const_iterator iter (ref->mBase->mSpells.mList.begin()); iter!=ref->mBase->mSpells.mList.end(); ++iter) - data->mCreatureStats.getSpells().add (*iter); + data->mNpcStats.getSpells().add (*iter); // inventory data->mInventoryStore.fill(ref->mBase->mInventory, getId(ptr), @@ -307,7 +306,7 @@ namespace MWClass { ensureCustomData (ptr); - return dynamic_cast (*ptr.getRefData().getCustomData()).mCreatureStats; + return dynamic_cast (*ptr.getRefData().getCustomData()).mNpcStats; } MWMechanics::NpcStats& Npc::getNpcStats (const MWWorld::Ptr& ptr) const @@ -679,11 +678,11 @@ namespace MWClass { const MWBase::World *world = MWBase::Environment::get().getWorld(); const CustomData *npcdata = static_cast(ptr.getRefData().getCustomData()); - const MWMechanics::MagicEffects &mageffects = npcdata->mCreatureStats.getMagicEffects(); + const MWMechanics::MagicEffects &mageffects = npcdata->mNpcStats.getMagicEffects(); const float normalizedEncumbrance = Npc::getEncumbrance(ptr) / Npc::getCapacity(ptr); - float walkSpeed = fMinWalkSpeed->getFloat() + 0.01f*npcdata->mCreatureStats.getAttribute(ESM::Attribute::Speed).getModified()* + float walkSpeed = fMinWalkSpeed->getFloat() + 0.01f*npcdata->mNpcStats.getAttribute(ESM::Attribute::Speed).getModified()* (fMaxWalkSpeed->getFloat() - fMinWalkSpeed->getFloat()); walkSpeed *= 1.0f - fEncumberedMoveEffect->getFloat()*normalizedEncumbrance; walkSpeed = std::max(0.0f, walkSpeed); @@ -700,7 +699,7 @@ namespace MWClass moveSpeed = 0.0f; else if(mageffects.get(MWMechanics::EffectKey(10/*levitate*/)).mMagnitude > 0) { - float flySpeed = 0.01f*(npcdata->mCreatureStats.getAttribute(ESM::Attribute::Speed).getModified() + + float flySpeed = 0.01f*(npcdata->mNpcStats.getAttribute(ESM::Attribute::Speed).getModified() + mageffects.get(MWMechanics::EffectKey(10/*levitate*/)).mMagnitude); flySpeed = fMinFlySpeed->getFloat() + flySpeed*(fMaxFlySpeed->getFloat() - fMinFlySpeed->getFloat()); flySpeed *= 1.0f - fEncumberedMoveEffect->getFloat() * normalizedEncumbrance; @@ -730,7 +729,7 @@ namespace MWClass float Npc::getJump(const MWWorld::Ptr &ptr) const { const CustomData *npcdata = static_cast(ptr.getRefData().getCustomData()); - const MWMechanics::MagicEffects &mageffects = npcdata->mCreatureStats.getMagicEffects(); + const MWMechanics::MagicEffects &mageffects = npcdata->mNpcStats.getMagicEffects(); const float encumbranceTerm = fJumpEncumbranceBase->getFloat() + fJumpEncumbranceMultiplier->getFloat() * (1.0f - Npc::getEncumbrance(ptr)/Npc::getCapacity(ptr)); @@ -751,7 +750,7 @@ namespace MWClass if(Npc::getStance(ptr, Run, false)) x *= fJumpRunMultiplier->getFloat(); - x *= npcdata->mCreatureStats.getFatigueTerm(); + x *= npcdata->mNpcStats.getFatigueTerm(); x -= -627.2f;/*gravity constant*/ x /= 3.0f; diff --git a/apps/openmw/mwmechanics/npcstats.hpp b/apps/openmw/mwmechanics/npcstats.hpp index 44ad575e4..768981179 100644 --- a/apps/openmw/mwmechanics/npcstats.hpp +++ b/apps/openmw/mwmechanics/npcstats.hpp @@ -9,6 +9,8 @@ #include "stat.hpp" #include "drawstate.hpp" +#include "creaturestats.hpp" + namespace ESM { struct Class; @@ -18,12 +20,10 @@ namespace MWMechanics { /// \brief Additional stats for NPCs /// - /// For non-NPC-specific stats, see the CreatureStats struct. - /// /// \note For technical reasons the spell list and the currently selected spell is also handled by /// CreatureStats, even though they are actually NPC stats. - class NpcStats + class NpcStats : public CreatureStats { public: diff --git a/apps/openmw/mwscript/statsextensions.cpp b/apps/openmw/mwscript/statsextensions.cpp index 063344c46..e4bab47bd 100644 --- a/apps/openmw/mwscript/statsextensions.cpp +++ b/apps/openmw/mwscript/statsextensions.cpp @@ -35,7 +35,7 @@ namespace { MWWorld::Ptr actor = MWBase::Environment::get().getDialogueManager()->getActor(); - MWMechanics::NpcStats stats = MWWorld::Class::get (actor).getNpcStats (actor); + const MWMechanics::NpcStats &stats = MWWorld::Class::get (actor).getNpcStats (actor); if (stats.getFactionRanks().empty()) throw std::runtime_error (