mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-02-25 12:41:01 +00:00
Merge remote-tracking branch 'scrawl/master'
This commit is contained in:
commit
456b41f05b
@ -68,14 +68,14 @@ namespace MWClass
|
|||||||
MWWorld::LiveCellRef<ESM::Creature> *ref = ptr.get<ESM::Creature>();
|
MWWorld::LiveCellRef<ESM::Creature> *ref = ptr.get<ESM::Creature>();
|
||||||
|
|
||||||
// creature stats
|
// creature stats
|
||||||
data->mCreatureStats.getAttribute(0).set (ref->mBase->mData.mStrength);
|
data->mCreatureStats.setAttribute(ESM::Attribute::Strength, ref->mBase->mData.mStrength);
|
||||||
data->mCreatureStats.getAttribute(1).set (ref->mBase->mData.mIntelligence);
|
data->mCreatureStats.setAttribute(ESM::Attribute::Intelligence, ref->mBase->mData.mIntelligence);
|
||||||
data->mCreatureStats.getAttribute(2).set (ref->mBase->mData.mWillpower);
|
data->mCreatureStats.setAttribute(ESM::Attribute::Willpower, ref->mBase->mData.mWillpower);
|
||||||
data->mCreatureStats.getAttribute(3).set (ref->mBase->mData.mAgility);
|
data->mCreatureStats.setAttribute(ESM::Attribute::Agility, ref->mBase->mData.mAgility);
|
||||||
data->mCreatureStats.getAttribute(4).set (ref->mBase->mData.mSpeed);
|
data->mCreatureStats.setAttribute(ESM::Attribute::Speed, ref->mBase->mData.mSpeed);
|
||||||
data->mCreatureStats.getAttribute(5).set (ref->mBase->mData.mEndurance);
|
data->mCreatureStats.setAttribute(ESM::Attribute::Endurance, ref->mBase->mData.mEndurance);
|
||||||
data->mCreatureStats.getAttribute(6).set (ref->mBase->mData.mPersonality);
|
data->mCreatureStats.setAttribute(ESM::Attribute::Personality, ref->mBase->mData.mPersonality);
|
||||||
data->mCreatureStats.getAttribute(7).set (ref->mBase->mData.mLuck);
|
data->mCreatureStats.setAttribute(ESM::Attribute::Luck, ref->mBase->mData.mLuck);
|
||||||
data->mCreatureStats.setHealth (ref->mBase->mData.mHealth);
|
data->mCreatureStats.setHealth (ref->mBase->mData.mHealth);
|
||||||
data->mCreatureStats.setMagicka (ref->mBase->mData.mMana);
|
data->mCreatureStats.setMagicka (ref->mBase->mData.mMana);
|
||||||
data->mCreatureStats.setFatigue (ref->mBase->mData.mFatigue);
|
data->mCreatureStats.setFatigue (ref->mBase->mData.mFatigue);
|
||||||
|
@ -66,7 +66,7 @@ namespace
|
|||||||
for (int i=0; i<ESM::Attribute::Length; ++i)
|
for (int i=0; i<ESM::Attribute::Length; ++i)
|
||||||
{
|
{
|
||||||
const ESM::Race::MaleFemale& attribute = race->mData.mAttributeValues[i];
|
const ESM::Race::MaleFemale& attribute = race->mData.mAttributeValues[i];
|
||||||
creatureStats.getAttribute(i).setBase (male ? attribute.mMale : attribute.mFemale);
|
creatureStats.setAttribute(i, male ? attribute.mMale : attribute.mFemale);
|
||||||
}
|
}
|
||||||
|
|
||||||
// class bonus
|
// class bonus
|
||||||
@ -78,7 +78,7 @@ namespace
|
|||||||
int attribute = class_->mData.mAttribute[i];
|
int attribute = class_->mData.mAttribute[i];
|
||||||
if (attribute>=0 && attribute<8)
|
if (attribute>=0 && attribute<8)
|
||||||
{
|
{
|
||||||
creatureStats.getAttribute(attribute).setBase (
|
creatureStats.setAttribute(attribute,
|
||||||
creatureStats.getAttribute(attribute).getBase() + 10);
|
creatureStats.getAttribute(attribute).getBase() + 10);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -109,7 +109,7 @@ namespace
|
|||||||
}
|
}
|
||||||
modifierSum += add;
|
modifierSum += add;
|
||||||
}
|
}
|
||||||
creatureStats.getAttribute(attribute).setBase ( std::min(creatureStats.getAttribute(attribute).getBase()
|
creatureStats.setAttribute(attribute, std::min(creatureStats.getAttribute(attribute).getBase()
|
||||||
+ static_cast<int>((level-1) * modifierSum+0.5), 100) );
|
+ static_cast<int>((level-1) * modifierSum+0.5), 100) );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -274,14 +274,15 @@ namespace MWClass
|
|||||||
for (unsigned int i=0; i< ESM::Skill::Length; ++i)
|
for (unsigned int i=0; i< ESM::Skill::Length; ++i)
|
||||||
data->mNpcStats.getSkill (i).setBase (ref->mBase->mNpdt52.mSkills[i]);
|
data->mNpcStats.getSkill (i).setBase (ref->mBase->mNpdt52.mSkills[i]);
|
||||||
|
|
||||||
data->mNpcStats.getAttribute(0).set (ref->mBase->mNpdt52.mStrength);
|
data->mNpcStats.setAttribute(ESM::Attribute::Strength, ref->mBase->mNpdt52.mStrength);
|
||||||
data->mNpcStats.getAttribute(1).set (ref->mBase->mNpdt52.mIntelligence);
|
data->mNpcStats.setAttribute(ESM::Attribute::Intelligence, ref->mBase->mNpdt52.mIntelligence);
|
||||||
data->mNpcStats.getAttribute(2).set (ref->mBase->mNpdt52.mWillpower);
|
data->mNpcStats.setAttribute(ESM::Attribute::Willpower, ref->mBase->mNpdt52.mWillpower);
|
||||||
data->mNpcStats.getAttribute(3).set (ref->mBase->mNpdt52.mAgility);
|
data->mNpcStats.setAttribute(ESM::Attribute::Agility, ref->mBase->mNpdt52.mAgility);
|
||||||
data->mNpcStats.getAttribute(4).set (ref->mBase->mNpdt52.mSpeed);
|
data->mNpcStats.setAttribute(ESM::Attribute::Speed, ref->mBase->mNpdt52.mSpeed);
|
||||||
data->mNpcStats.getAttribute(5).set (ref->mBase->mNpdt52.mEndurance);
|
data->mNpcStats.setAttribute(ESM::Attribute::Endurance, ref->mBase->mNpdt52.mEndurance);
|
||||||
data->mNpcStats.getAttribute(6).set (ref->mBase->mNpdt52.mPersonality);
|
data->mNpcStats.setAttribute(ESM::Attribute::Personality, ref->mBase->mNpdt52.mPersonality);
|
||||||
data->mNpcStats.getAttribute(7).set (ref->mBase->mNpdt52.mLuck);
|
data->mNpcStats.setAttribute(ESM::Attribute::Luck, ref->mBase->mNpdt52.mLuck);
|
||||||
|
|
||||||
data->mNpcStats.setHealth (ref->mBase->mNpdt52.mHealth);
|
data->mNpcStats.setHealth (ref->mBase->mNpdt52.mHealth);
|
||||||
data->mNpcStats.setMagicka (ref->mBase->mNpdt52.mMana);
|
data->mNpcStats.setMagicka (ref->mBase->mNpdt52.mMana);
|
||||||
data->mNpcStats.setFatigue (ref->mBase->mNpdt52.mFatigue);
|
data->mNpcStats.setFatigue (ref->mBase->mNpdt52.mFatigue);
|
||||||
|
@ -166,11 +166,12 @@ namespace MWGui
|
|||||||
// increase attributes
|
// increase attributes
|
||||||
for (int i=0; i<3; ++i)
|
for (int i=0; i<3; ++i)
|
||||||
{
|
{
|
||||||
MWMechanics::Stat<int>& attribute = creatureStats.getAttribute(mSpentAttributes[i]);
|
MWMechanics::Stat<int> attribute = creatureStats.getAttribute(mSpentAttributes[i]);
|
||||||
attribute.setBase (attribute.getBase () + pcStats.getLevelupAttributeMultiplier (mSpentAttributes[i]));
|
attribute.setBase (attribute.getBase () + pcStats.getLevelupAttributeMultiplier (mSpentAttributes[i]));
|
||||||
|
|
||||||
if (attribute.getBase() >= 100)
|
if (attribute.getBase() >= 100)
|
||||||
attribute.setBase(100);
|
attribute.setBase(100);
|
||||||
|
creatureStats.setAttribute(mSpentAttributes[i], attribute);
|
||||||
}
|
}
|
||||||
|
|
||||||
creatureStats.levelUp();
|
creatureStats.levelUp();
|
||||||
|
@ -92,6 +92,7 @@ namespace MWGui
|
|||||||
{
|
{
|
||||||
getWidget(mOkButton, "OkButton");
|
getWidget(mOkButton, "OkButton");
|
||||||
getWidget(mBestAttackButton, "BestAttackButton");
|
getWidget(mBestAttackButton, "BestAttackButton");
|
||||||
|
getWidget(mGrabCursorButton, "GrabCursorButton");
|
||||||
getWidget(mSubtitlesButton, "SubtitlesButton");
|
getWidget(mSubtitlesButton, "SubtitlesButton");
|
||||||
getWidget(mCrosshairButton, "CrosshairButton");
|
getWidget(mCrosshairButton, "CrosshairButton");
|
||||||
getWidget(mResolutionList, "ResolutionList");
|
getWidget(mResolutionList, "ResolutionList");
|
||||||
@ -133,6 +134,7 @@ namespace MWGui
|
|||||||
mSubtitlesButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onButtonToggled);
|
mSubtitlesButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onButtonToggled);
|
||||||
mCrosshairButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onButtonToggled);
|
mCrosshairButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onButtonToggled);
|
||||||
mBestAttackButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onButtonToggled);
|
mBestAttackButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onButtonToggled);
|
||||||
|
mGrabCursorButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onButtonToggled);
|
||||||
mInvertYButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onButtonToggled);
|
mInvertYButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onButtonToggled);
|
||||||
mOkButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onOkButtonClicked);
|
mOkButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onOkButtonClicked);
|
||||||
mShadersButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onShadersToggled);
|
mShadersButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onShadersToggled);
|
||||||
@ -201,6 +203,7 @@ namespace MWGui
|
|||||||
mSubtitlesButton->setCaptionWithReplacing(Settings::Manager::getBool("subtitles", "GUI") ? "#{sOn}" : "#{sOff}");
|
mSubtitlesButton->setCaptionWithReplacing(Settings::Manager::getBool("subtitles", "GUI") ? "#{sOn}" : "#{sOff}");
|
||||||
mCrosshairButton->setCaptionWithReplacing(Settings::Manager::getBool("crosshair", "HUD") ? "#{sOn}" : "#{sOff}");
|
mCrosshairButton->setCaptionWithReplacing(Settings::Manager::getBool("crosshair", "HUD") ? "#{sOn}" : "#{sOff}");
|
||||||
mBestAttackButton->setCaptionWithReplacing(Settings::Manager::getBool("best attack", "Game") ? "#{sOn}" : "#{sOff}");
|
mBestAttackButton->setCaptionWithReplacing(Settings::Manager::getBool("best attack", "Game") ? "#{sOn}" : "#{sOff}");
|
||||||
|
mGrabCursorButton->setCaptionWithReplacing(Settings::Manager::getBool("grab cursor", "Input") ? "#{sOn}" : "#{sOff}");
|
||||||
|
|
||||||
float fovVal = (Settings::Manager::getFloat("field of view", "General")-sFovMin)/(sFovMax-sFovMin);
|
float fovVal = (Settings::Manager::getFloat("field of view", "General")-sFovMin)/(sFovMax-sFovMin);
|
||||||
mFOVSlider->setScrollPosition(fovVal * (mFOVSlider->getScrollRange()-1));
|
mFOVSlider->setScrollPosition(fovVal * (mFOVSlider->getScrollRange()-1));
|
||||||
@ -393,7 +396,8 @@ namespace MWGui
|
|||||||
Settings::Manager::setBool("subtitles", "GUI", newState);
|
Settings::Manager::setBool("subtitles", "GUI", newState);
|
||||||
else if (_sender == mBestAttackButton)
|
else if (_sender == mBestAttackButton)
|
||||||
Settings::Manager::setBool("best attack", "Game", newState);
|
Settings::Manager::setBool("best attack", "Game", newState);
|
||||||
|
else if (_sender == mGrabCursorButton)
|
||||||
|
Settings::Manager::setBool("grab cursor", "Input", newState);
|
||||||
apply();
|
apply();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,7 @@ namespace MWGui
|
|||||||
MyGUI::Button* mSubtitlesButton;
|
MyGUI::Button* mSubtitlesButton;
|
||||||
MyGUI::Button* mCrosshairButton;
|
MyGUI::Button* mCrosshairButton;
|
||||||
MyGUI::Button* mBestAttackButton;
|
MyGUI::Button* mBestAttackButton;
|
||||||
|
MyGUI::Button* mGrabCursorButton;
|
||||||
|
|
||||||
// graphics
|
// graphics
|
||||||
MyGUI::ListBox* mResolutionList;
|
MyGUI::ListBox* mResolutionList;
|
||||||
|
@ -103,6 +103,7 @@ namespace MWInput
|
|||||||
, mCameraSensitivity (Settings::Manager::getFloat("camera sensitivity", "Input"))
|
, mCameraSensitivity (Settings::Manager::getFloat("camera sensitivity", "Input"))
|
||||||
, mUISensitivity (Settings::Manager::getFloat("ui sensitivity", "Input"))
|
, mUISensitivity (Settings::Manager::getFloat("ui sensitivity", "Input"))
|
||||||
, mCameraYMultiplier (Settings::Manager::getFloat("camera y multiplier", "Input"))
|
, mCameraYMultiplier (Settings::Manager::getFloat("camera y multiplier", "Input"))
|
||||||
|
, mGrabCursor (Settings::Manager::getBool("grab cursor", "Input"))
|
||||||
, mPreviewPOVDelay(0.f)
|
, mPreviewPOVDelay(0.f)
|
||||||
, mTimeIdle(0.f)
|
, mTimeIdle(0.f)
|
||||||
, mOverencumberedMessageDelay(0.f)
|
, mOverencumberedMessageDelay(0.f)
|
||||||
@ -287,7 +288,7 @@ namespace MWInput
|
|||||||
mInputManager->setMouseRelative(is_relative);
|
mInputManager->setMouseRelative(is_relative);
|
||||||
|
|
||||||
//we let the mouse escape in the main menu
|
//we let the mouse escape in the main menu
|
||||||
mInputManager->setGrabPointer(grab);
|
mInputManager->setGrabPointer(grab && (mGrabCursor || is_relative));
|
||||||
|
|
||||||
//we switched to non-relative mode, move our cursor to where the in-game
|
//we switched to non-relative mode, move our cursor to where the in-game
|
||||||
//cursor is
|
//cursor is
|
||||||
@ -430,6 +431,9 @@ namespace MWInput
|
|||||||
if (it->first == "Input" && it->second == "ui sensitivity")
|
if (it->first == "Input" && it->second == "ui sensitivity")
|
||||||
mUISensitivity = Settings::Manager::getFloat("ui sensitivity", "Input");
|
mUISensitivity = Settings::Manager::getFloat("ui sensitivity", "Input");
|
||||||
|
|
||||||
|
if (it->first == "Input" && it->second == "grab cursor")
|
||||||
|
mGrabCursor = Settings::Manager::getBool("grab cursor", "Input");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,6 +138,8 @@ namespace MWInput
|
|||||||
|
|
||||||
bool mDragDrop;
|
bool mDragDrop;
|
||||||
|
|
||||||
|
bool mGrabCursor;
|
||||||
|
|
||||||
bool mInvertY;
|
bool mInvertY;
|
||||||
|
|
||||||
float mCameraSensitivity;
|
float mCameraSensitivity;
|
||||||
|
@ -54,6 +54,7 @@ namespace MWMechanics
|
|||||||
{
|
{
|
||||||
// magic effects
|
// magic effects
|
||||||
adjustMagicEffects (ptr);
|
adjustMagicEffects (ptr);
|
||||||
|
if (ptr.getClass().getCreatureStats(ptr).needToRecalcDynamicStats())
|
||||||
calculateDynamicStats (ptr);
|
calculateDynamicStats (ptr);
|
||||||
calculateCreatureStatModifiers (ptr, duration);
|
calculateCreatureStatModifiers (ptr, duration);
|
||||||
|
|
||||||
|
@ -802,6 +802,9 @@ void CharacterController::update(float duration)
|
|||||||
if(sneak || inwater || flying)
|
if(sneak || inwater || flying)
|
||||||
vec.z = 0.0f;
|
vec.z = 0.0f;
|
||||||
|
|
||||||
|
if (inwater || flying)
|
||||||
|
cls.getCreatureStats(mPtr).land();
|
||||||
|
|
||||||
if(!onground && !flying && !inwater)
|
if(!onground && !flying && !inwater)
|
||||||
{
|
{
|
||||||
// In the air (either getting up —ascending part of jump— or falling).
|
// In the air (either getting up —ascending part of jump— or falling).
|
||||||
@ -925,7 +928,7 @@ void CharacterController::update(float duration)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (onground || inwater || flying)
|
if (onground)
|
||||||
cls.getCreatureStats(mPtr).land();
|
cls.getCreatureStats(mPtr).land();
|
||||||
|
|
||||||
if(movestate != CharState_None)
|
if(movestate != CharState_None)
|
||||||
|
@ -15,7 +15,7 @@ namespace MWMechanics
|
|||||||
mAttacked (false), mHostile (false),
|
mAttacked (false), mHostile (false),
|
||||||
mAttackingOrSpell(false), mAttackType(AT_Chop),
|
mAttackingOrSpell(false), mAttackType(AT_Chop),
|
||||||
mIsWerewolf(false),
|
mIsWerewolf(false),
|
||||||
mFallHeight(0)
|
mFallHeight(0), mRecalcDynamicStats(false)
|
||||||
{
|
{
|
||||||
for (int i=0; i<4; ++i)
|
for (int i=0; i<4; ++i)
|
||||||
mAiSettings[i] = 0;
|
mAiSettings[i] = 0;
|
||||||
@ -128,14 +128,6 @@ namespace MWMechanics
|
|||||||
return mAiSettings[index];
|
return mAiSettings[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
Stat<int> &CreatureStats::getAttribute(int index)
|
|
||||||
{
|
|
||||||
if (index < 0 || index > 7) {
|
|
||||||
throw std::runtime_error("attribute index is out of range");
|
|
||||||
}
|
|
||||||
return (!mIsWerewolf ? mAttributes[index] : mWerewolfAttributes[index]);
|
|
||||||
}
|
|
||||||
|
|
||||||
const DynamicStat<float> &CreatureStats::getDynamic(int index) const
|
const DynamicStat<float> &CreatureStats::getDynamic(int index) const
|
||||||
{
|
{
|
||||||
if (index < 0 || index > 2) {
|
if (index < 0 || index > 2) {
|
||||||
@ -164,11 +156,29 @@ namespace MWMechanics
|
|||||||
return mMagicEffects;
|
return mMagicEffects;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CreatureStats::setAttribute(int index, int base)
|
||||||
|
{
|
||||||
|
MWMechanics::Stat<int> current = getAttribute(index);
|
||||||
|
current.setBase(base);
|
||||||
|
setAttribute(index, current);
|
||||||
|
}
|
||||||
|
|
||||||
void CreatureStats::setAttribute(int index, const Stat<int> &value)
|
void CreatureStats::setAttribute(int index, const Stat<int> &value)
|
||||||
{
|
{
|
||||||
if (index < 0 || index > 7) {
|
if (index < 0 || index > 7) {
|
||||||
throw std::runtime_error("attribute index is out of range");
|
throw std::runtime_error("attribute index is out of range");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const Stat<int>& currentValue = !mIsWerewolf ? mAttributes[index] : mWerewolfAttributes[index];
|
||||||
|
|
||||||
|
if (value.getModified() != currentValue.getModified())
|
||||||
|
{
|
||||||
|
if (index != ESM::Attribute::Luck
|
||||||
|
&& index != ESM::Attribute::Personality
|
||||||
|
&& index != ESM::Attribute::Speed)
|
||||||
|
mRecalcDynamicStats = true;
|
||||||
|
}
|
||||||
|
|
||||||
if(!mIsWerewolf)
|
if(!mIsWerewolf)
|
||||||
mAttributes[index] = value;
|
mAttributes[index] = value;
|
||||||
else
|
else
|
||||||
@ -218,6 +228,10 @@ namespace MWMechanics
|
|||||||
|
|
||||||
void CreatureStats::setMagicEffects(const MagicEffects &effects)
|
void CreatureStats::setMagicEffects(const MagicEffects &effects)
|
||||||
{
|
{
|
||||||
|
if (effects.get(MWMechanics::EffectKey(ESM::MagicEffect::FortifyMaximumMagicka)).mMagnitude
|
||||||
|
!= mMagicEffects.get(MWMechanics::EffectKey(ESM::MagicEffect::FortifyMaximumMagicka)).mMagnitude)
|
||||||
|
mRecalcDynamicStats = true;
|
||||||
|
|
||||||
mMagicEffects = effects;
|
mMagicEffects = effects;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -369,4 +383,14 @@ namespace MWMechanics
|
|||||||
mFallHeight = 0;
|
mFallHeight = 0;
|
||||||
return height;
|
return height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CreatureStats::needToRecalcDynamicStats()
|
||||||
|
{
|
||||||
|
if (mRecalcDynamicStats)
|
||||||
|
{
|
||||||
|
mRecalcDynamicStats = false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -42,6 +42,9 @@ namespace MWMechanics
|
|||||||
|
|
||||||
std::string mLastHitObject; // The last object to hit this actor
|
std::string mLastHitObject; // The last object to hit this actor
|
||||||
|
|
||||||
|
// Do we need to recalculate stats derived from attributes or other factors?
|
||||||
|
bool mRecalcDynamicStats;
|
||||||
|
|
||||||
std::map<std::string, MWWorld::TimeStamp> mUsedPowers;
|
std::map<std::string, MWWorld::TimeStamp> mUsedPowers;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -51,6 +54,8 @@ namespace MWMechanics
|
|||||||
public:
|
public:
|
||||||
CreatureStats();
|
CreatureStats();
|
||||||
|
|
||||||
|
bool needToRecalcDynamicStats();
|
||||||
|
|
||||||
void addToFallHeight(float height);
|
void addToFallHeight(float height);
|
||||||
|
|
||||||
/// Reset the fall height
|
/// Reset the fall height
|
||||||
@ -83,8 +88,6 @@ namespace MWMechanics
|
|||||||
int getAiSetting (int index) const;
|
int getAiSetting (int index) const;
|
||||||
///< 0: hello, 1 fight, 2 flee, 3 alarm
|
///< 0: hello, 1 fight, 2 flee, 3 alarm
|
||||||
|
|
||||||
Stat<int> & getAttribute(int index);
|
|
||||||
|
|
||||||
Spells & getSpells();
|
Spells & getSpells();
|
||||||
|
|
||||||
ActiveSpells & getActiveSpells();
|
ActiveSpells & getActiveSpells();
|
||||||
@ -92,6 +95,8 @@ namespace MWMechanics
|
|||||||
MagicEffects & getMagicEffects();
|
MagicEffects & getMagicEffects();
|
||||||
|
|
||||||
void setAttribute(int index, const Stat<int> &value);
|
void setAttribute(int index, const Stat<int> &value);
|
||||||
|
// Shortcut to set only the base
|
||||||
|
void setAttribute(int index, int base);
|
||||||
|
|
||||||
void setHealth(const DynamicStat<float> &value);
|
void setHealth(const DynamicStat<float> &value);
|
||||||
|
|
||||||
|
@ -31,15 +31,14 @@ namespace MWMechanics
|
|||||||
for (int i=0; i<27; ++i)
|
for (int i=0; i<27; ++i)
|
||||||
npcStats.getSkill (i).setBase (player->mNpdt52.mSkills[i]);
|
npcStats.getSkill (i).setBase (player->mNpdt52.mSkills[i]);
|
||||||
|
|
||||||
creatureStats.getAttribute(0).setBase (player->mNpdt52.mStrength);
|
creatureStats.setAttribute(ESM::Attribute::Strength, player->mNpdt52.mStrength);
|
||||||
creatureStats.getAttribute(1).setBase (player->mNpdt52.mIntelligence);
|
creatureStats.setAttribute(ESM::Attribute::Intelligence, player->mNpdt52.mIntelligence);
|
||||||
creatureStats.getAttribute(2).setBase (player->mNpdt52.mWillpower);
|
creatureStats.setAttribute(ESM::Attribute::Willpower, player->mNpdt52.mWillpower);
|
||||||
creatureStats.getAttribute(3).setBase (player->mNpdt52.mAgility);
|
creatureStats.setAttribute(ESM::Attribute::Agility, player->mNpdt52.mAgility);
|
||||||
creatureStats.getAttribute(4).setBase (player->mNpdt52.mSpeed);
|
creatureStats.setAttribute(ESM::Attribute::Speed, player->mNpdt52.mSpeed);
|
||||||
creatureStats.getAttribute(5).setBase (player->mNpdt52.mEndurance);
|
creatureStats.setAttribute(ESM::Attribute::Endurance, player->mNpdt52.mEndurance);
|
||||||
creatureStats.getAttribute(6).setBase (player->mNpdt52.mPersonality);
|
creatureStats.setAttribute(ESM::Attribute::Personality, player->mNpdt52.mPersonality);
|
||||||
creatureStats.getAttribute(7).setBase (player->mNpdt52.mLuck);
|
creatureStats.setAttribute(ESM::Attribute::Luck, player->mNpdt52.mLuck);
|
||||||
|
|
||||||
const MWWorld::ESMStore &esmStore =
|
const MWWorld::ESMStore &esmStore =
|
||||||
MWBase::Environment::get().getWorld()->getStore();
|
MWBase::Environment::get().getWorld()->getStore();
|
||||||
|
|
||||||
@ -55,7 +54,7 @@ namespace MWMechanics
|
|||||||
{
|
{
|
||||||
const ESM::Race::MaleFemale& attribute = race->mData.mAttributeValues[i];
|
const ESM::Race::MaleFemale& attribute = race->mData.mAttributeValues[i];
|
||||||
|
|
||||||
creatureStats.getAttribute(i).setBase (male ? attribute.mMale : attribute.mFemale);
|
creatureStats.setAttribute(i, male ? attribute.mMale : attribute.mFemale);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i=0; i<27; ++i)
|
for (int i=0; i<27; ++i)
|
||||||
@ -106,7 +105,7 @@ namespace MWMechanics
|
|||||||
int attribute = class_->mData.mAttribute[i];
|
int attribute = class_->mData.mAttribute[i];
|
||||||
if (attribute>=0 && attribute<8)
|
if (attribute>=0 && attribute<8)
|
||||||
{
|
{
|
||||||
creatureStats.getAttribute(attribute).setBase (
|
creatureStats.setAttribute(attribute,
|
||||||
creatureStats.getAttribute(attribute).getBase() + 10);
|
creatureStats.getAttribute(attribute).getBase() + 10);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -124,10 +124,9 @@ namespace MWScript
|
|||||||
Interpreter::Type_Integer value = runtime[0].mInteger;
|
Interpreter::Type_Integer value = runtime[0].mInteger;
|
||||||
runtime.pop();
|
runtime.pop();
|
||||||
|
|
||||||
MWWorld::Class::get(ptr)
|
MWMechanics::Stat<int> attribute = ptr.getClass().getCreatureStats(ptr).getAttribute(mIndex);
|
||||||
.getCreatureStats(ptr)
|
attribute.setModified (value, 0);
|
||||||
.getAttribute(mIndex)
|
ptr.getClass().getCreatureStats(ptr).setAttribute(mIndex, attribute);
|
||||||
.setModified (value, 0);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -147,16 +146,16 @@ namespace MWScript
|
|||||||
Interpreter::Type_Integer value = runtime[0].mInteger;
|
Interpreter::Type_Integer value = runtime[0].mInteger;
|
||||||
runtime.pop();
|
runtime.pop();
|
||||||
|
|
||||||
value +=
|
MWMechanics::Stat<int> attribute = MWWorld::Class::get(ptr)
|
||||||
MWWorld::Class::get(ptr)
|
|
||||||
.getCreatureStats(ptr)
|
.getCreatureStats(ptr)
|
||||||
.getAttribute(mIndex)
|
.getAttribute(mIndex);
|
||||||
.getModified();
|
|
||||||
|
|
||||||
MWWorld::Class::get(ptr)
|
value +=
|
||||||
.getCreatureStats(ptr)
|
attribute.getModified();
|
||||||
.getAttribute(mIndex)
|
|
||||||
|
attribute
|
||||||
.setModified (value, 0, 100);
|
.setModified (value, 0, 100);
|
||||||
|
ptr.getClass().getCreatureStats(ptr).setAttribute(mIndex, attribute);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1000,9 +1000,12 @@ class NIFObjectLoader
|
|||||||
{
|
{
|
||||||
const Nif::NiTextKeyExtraData *tk = static_cast<const Nif::NiTextKeyExtraData*>(e.getPtr());
|
const Nif::NiTextKeyExtraData *tk = static_cast<const Nif::NiTextKeyExtraData*>(e.getPtr());
|
||||||
|
|
||||||
|
if (scene->mSkelBase)
|
||||||
|
{
|
||||||
int trgtid = NIFSkeletonLoader::lookupOgreBoneHandle(name, node->recIndex);
|
int trgtid = NIFSkeletonLoader::lookupOgreBoneHandle(name, node->recIndex);
|
||||||
extractTextKeys(tk, scene->mTextKeys[trgtid]);
|
extractTextKeys(tk, scene->mTextKeys[trgtid]);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else if(e->recType == Nif::RC_NiStringExtraData)
|
else if(e->recType == Nif::RC_NiStringExtraData)
|
||||||
{
|
{
|
||||||
const Nif::NiStringExtraData *sd = static_cast<const Nif::NiStringExtraData*>(e.getPtr());
|
const Nif::NiStringExtraData *sd = static_cast<const Nif::NiStringExtraData*>(e.getPtr());
|
||||||
|
@ -78,7 +78,6 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
shVertexInput(float2, uv0)
|
shVertexInput(float2, uv0)
|
||||||
shVertexInput(float2, uv1) // lodDelta, lodThreshold
|
|
||||||
|
|
||||||
#if LIGHTING
|
#if LIGHTING
|
||||||
shNormalInput(float4)
|
shNormalInput(float4)
|
||||||
|
@ -65,6 +65,12 @@
|
|||||||
</Widget>
|
</Widget>
|
||||||
</Widget>
|
</Widget>
|
||||||
|
|
||||||
|
<Widget type="HBox" skin="" position="4 260 260 24">
|
||||||
|
<Widget type="AutoSizedButton" skin="MW_Button" align="Left Top" name="GrabCursorButton"/>
|
||||||
|
<Widget type="AutoSizedTextBox" skin="SandText" align="Left Top">
|
||||||
|
<Property key="Caption" value="Grab cursor"/>
|
||||||
|
</Widget>
|
||||||
|
</Widget>
|
||||||
</Widget>
|
</Widget>
|
||||||
<Widget type="TabItem" skin="" position="4 28 360 312">
|
<Widget type="TabItem" skin="" position="4 28 360 312">
|
||||||
<Property key="Caption" value=" #{sAudio} "/>
|
<Property key="Caption" value=" #{sAudio} "/>
|
||||||
|
@ -156,6 +156,8 @@ voice volume = 1.0
|
|||||||
|
|
||||||
[Input]
|
[Input]
|
||||||
|
|
||||||
|
grab cursor = true
|
||||||
|
|
||||||
invert y axis = false
|
invert y axis = false
|
||||||
|
|
||||||
camera sensitivity = 1.0
|
camera sensitivity = 1.0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user