diff --git a/apps/openmw/mwworld/worldimp.cpp b/apps/openmw/mwworld/worldimp.cpp index 4deed671e..881f01285 100644 --- a/apps/openmw/mwworld/worldimp.cpp +++ b/apps/openmw/mwworld/worldimp.cpp @@ -350,36 +350,59 @@ namespace MWWorld void World::ensureNeededRecords() { - if (!mStore.get().search("sCompanionShare")) + std::map gmst; + // Companion (tribunal) + gmst["sCompanionShare"] = ESM::Variant("Companion Share"); + gmst["sCompanionWarningMessage"] = ESM::Variant("Warning message"); + gmst["sCompanionWarningButtonOne"] = ESM::Variant("Button 1"); + gmst["sCompanionWarningButtonTwo"] = ESM::Variant("Button 2"); + gmst["sCompanionShare"] = ESM::Variant("Companion Share"); + gmst["sProfitValue"] = ESM::Variant("Profit Value"); + gmst["sTeleportDisabled"] = ESM::Variant("Teleport disabled"); + gmst["sLevitateDisabled"] = ESM::Variant("Levitate disabled"); + + // Missing in unpatched MW 1.0 + gmst["sDifficulty"] = ESM::Variant("Difficulty"); + gmst["fDifficultyMult"] = ESM::Variant(5.f); + gmst["sAuto_Run"] = ESM::Variant("Auto Run"); + gmst["sServiceRefusal"] = ESM::Variant("Service Refusal"); + gmst["sNeedOneSkill"] = ESM::Variant("Need one skill"); + gmst["sNeedTwoSkills"] = ESM::Variant("Need two skills"); + gmst["sEasy"] = ESM::Variant("Easy"); + gmst["sHard"] = ESM::Variant("Hard"); + gmst["sDeleteNote"] = ESM::Variant("Delete Note"); + gmst["sEditNote"] = ESM::Variant("Edit Note"); + + // Werewolf (BM) + gmst["fWereWolfRunMult"] = ESM::Variant(1.f); + gmst["fWereWolfSilverWeaponDamageMult"] = ESM::Variant(1.f); + + + std::map globals; + // vanilla Morrowind does not define dayspassed. + globals["dayspassed"] = ESM::Variant(1); // but the addons start counting at 1 :( + globals["WerewolfClawMult"] = ESM::Variant(1.f); + + for (std::map::iterator it = gmst.begin(); it != gmst.end(); ++it) { - ESM::GameSetting sCompanionShare; - sCompanionShare.mId = "sCompanionShare"; - ESM::Variant value; - value.setType(ESM::VT_String); - value.setString("Companion Share"); - sCompanionShare.mValue = value; - mStore.insertStatic(sCompanionShare); + if (!mStore.get().search(it->first)) + { + ESM::GameSetting setting; + setting.mId = it->first; + setting.mValue = it->second; + mStore.insertStatic(setting); + } } - if (!mStore.get().search("dayspassed")) + + for (std::map::iterator it = globals.begin(); it != globals.end(); ++it) { - // vanilla Morrowind does not define dayspassed. - ESM::Global dayspassed; - dayspassed.mId = "dayspassed"; - ESM::Variant value; - value.setType(ESM::VT_Long); - value.setInteger(1); // but the addons start counting at 1 :( - dayspassed.mValue = value; - mStore.insertStatic(dayspassed); - } - if (!mStore.get().search("fWereWolfRunMult")) - { - ESM::GameSetting fWereWolfRunMult; - fWereWolfRunMult.mId = "fWereWolfRunMult"; - ESM::Variant value; - value.setType(ESM::VT_Float); - value.setFloat(1.f); - fWereWolfRunMult.mValue = value; - mStore.insertStatic(fWereWolfRunMult); + if (!mStore.get().search(it->first)) + { + ESM::Global setting; + setting.mId = it->first; + setting.mValue = it->second; + mStore.insertStatic(setting); + } } } diff --git a/components/esm/variant.cpp b/components/esm/variant.cpp index 217ec4407..4127a9d62 100644 --- a/components/esm/variant.cpp +++ b/components/esm/variant.cpp @@ -17,6 +17,30 @@ namespace ESM::Variant::Variant() : mType (VT_None), mData (0) {} +ESM::Variant::Variant(const std::string &value) +{ + mData = 0; + mType = VT_None; + setType(VT_String); + setString(value); +} + +ESM::Variant::Variant(int value) +{ + mData = 0; + mType = VT_None; + setType(VT_Long); + setInteger(value); +} + +ESM::Variant::Variant(float value) +{ + mData = 0; + mType = VT_None; + setType(VT_Float); + setFloat(value); +} + ESM::Variant::~Variant() { delete mData; diff --git a/components/esm/variant.hpp b/components/esm/variant.hpp index 8ba9bb34f..d6c1a5489 100644 --- a/components/esm/variant.hpp +++ b/components/esm/variant.hpp @@ -38,6 +38,10 @@ namespace ESM Variant(); + Variant (const std::string& value); + Variant (int value); + Variant (float value); + ~Variant(); Variant& operator= (const Variant& variant); @@ -83,4 +87,4 @@ namespace ESM bool operator!= (const Variant& left, const Variant& right); } -#endif \ No newline at end of file +#endif