From 22d990697871d2aeb82799159ee13b4455573e87 Mon Sep 17 00:00:00 2001 From: Max Yari Date: Thu, 20 Jun 2024 16:58:24 +0200 Subject: [PATCH 01/10] An ability to specify attack type in controls.use value --- apps/openmw/mwmechanics/actors.cpp | 18 +++++++++++++++++- apps/openmw/mwmechanics/character.cpp | 12 +++++++++++- apps/openmw/mwmechanics/character.hpp | 2 ++ apps/openmw/mwmechanics/creaturestats.cpp | 1 + apps/openmw/mwmechanics/creaturestats.hpp | 4 ++++ 5 files changed, 35 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwmechanics/actors.cpp b/apps/openmw/mwmechanics/actors.cpp index 525044d55c..1a6f224c0a 100644 --- a/apps/openmw/mwmechanics/actors.cpp +++ b/apps/openmw/mwmechanics/actors.cpp @@ -239,6 +239,18 @@ namespace MWMechanics namespace { + std::string_view attackTypeName(int attackTypeNum) + { + if (attackTypeNum == 1) + return "chop"; + else if (attackTypeNum == 2) + return "slash"; + else if (attackTypeNum == 3) + return "thrust"; + else + return ""; + } + float getTimeToDestination(const AiPackage& package, const osg::Vec3f& position, float speed, float duration, const osg::Vec3f& halfExtents) { @@ -363,7 +375,11 @@ namespace MWMechanics mov.mSpeedFactor = osg::Vec2(controls.mMovement, controls.mSideMovement).length(); stats.setMovementFlag(MWMechanics::CreatureStats::Flag_Run, controls.mRun); stats.setMovementFlag(MWMechanics::CreatureStats::Flag_Sneak, controls.mSneak); - stats.setAttackingOrSpell((controls.mUse & 1) == 1); + + int attackTypeNum = controls.mUse & 3; + stats.setAttackingOrSpell(attackTypeNum != 0); + stats.setAttackType(attackTypeName(attackTypeNum)); + controls.mChanged = false; } // For the player we don't need to copy these values to Lua because mwinput doesn't change them. diff --git a/apps/openmw/mwmechanics/character.cpp b/apps/openmw/mwmechanics/character.cpp index 287e5d035c..1a396c9ce9 100644 --- a/apps/openmw/mwmechanics/character.cpp +++ b/apps/openmw/mwmechanics/character.cpp @@ -1674,7 +1674,12 @@ namespace MWMechanics } } else if (aiInactive) - mAttackType = getRandomAttackType(); + { + mAttackType = getDesiredAttackType(); + if (mAttackType == "") + mAttackType = getRandomAttackType(); + } + // else if (mPtr != getPlayer()) use mAttackType set by AiCombat startKey = mAttackType + ' ' + startKey; stopKey = mAttackType + " max attack"; @@ -3002,6 +3007,11 @@ namespace MWMechanics return mPtr.getClass().getCreatureStats(mPtr).getAttackingOrSpell(); } + std::string_view CharacterController::getDesiredAttackType() const + { + return mPtr.getClass().getCreatureStats(mPtr).getAttackType(); + } + void CharacterController::setActive(int active) const { mAnimation->setActive(active); diff --git a/apps/openmw/mwmechanics/character.hpp b/apps/openmw/mwmechanics/character.hpp index 8ead23f659..f043419a81 100644 --- a/apps/openmw/mwmechanics/character.hpp +++ b/apps/openmw/mwmechanics/character.hpp @@ -247,6 +247,8 @@ namespace MWMechanics bool getAttackingOrSpell() const; void setAttackingOrSpell(bool attackingOrSpell) const; + std::string_view getDesiredAttackType() const; + void prepareHit(); public: diff --git a/apps/openmw/mwmechanics/creaturestats.cpp b/apps/openmw/mwmechanics/creaturestats.cpp index 98bfa59c89..e3fed90d58 100644 --- a/apps/openmw/mwmechanics/creaturestats.cpp +++ b/apps/openmw/mwmechanics/creaturestats.cpp @@ -45,6 +45,7 @@ namespace MWMechanics , mSideMovementAngle(0) , mLevel(0) , mAttackingOrSpell(false) + , mAttackType("") { for (const ESM::Attribute& attribute : MWBase::Environment::get().getESMStore()->get()) { diff --git a/apps/openmw/mwmechanics/creaturestats.hpp b/apps/openmw/mwmechanics/creaturestats.hpp index 7989357634..3f7c57094c 100644 --- a/apps/openmw/mwmechanics/creaturestats.hpp +++ b/apps/openmw/mwmechanics/creaturestats.hpp @@ -97,6 +97,7 @@ namespace MWMechanics protected: int mLevel; bool mAttackingOrSpell; + std::string mAttackType; public: CreatureStats(); @@ -130,6 +131,7 @@ namespace MWMechanics const MagicEffects& getMagicEffects() const; bool getAttackingOrSpell() const { return mAttackingOrSpell; } + std::string_view getAttackType() const { return mAttackType; } int getLevel() const; @@ -156,6 +158,8 @@ namespace MWMechanics void setAttackingOrSpell(bool attackingOrSpell) { mAttackingOrSpell = attackingOrSpell; } + void setAttackType(std::string_view attackType) { mAttackType = attackType; } + void setLevel(int level); void setAiSetting(AiSetting index, Stat value); From 70c822d0363f429c02ff86b8019c081ecb393500 Mon Sep 17 00:00:00 2001 From: Max Yari Date: Thu, 20 Jun 2024 21:22:06 +0200 Subject: [PATCH 02/10] Updated lua docs description --- files/lua_api/openmw/self.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/lua_api/openmw/self.lua b/files/lua_api/openmw/self.lua index 6123c36ae6..60b5f563a5 100644 --- a/files/lua_api/openmw/self.lua +++ b/files/lua_api/openmw/self.lua @@ -37,7 +37,7 @@ -- @field [parent=#ActorControls] #boolean run true - run, false - walk -- @field [parent=#ActorControls] #boolean sneak If true - sneak -- @field [parent=#ActorControls] #boolean jump If true - initiate a jump --- @field [parent=#ActorControls] #number use if 1 - activates the readied weapon/spell. For weapons, keeping at 1 will charge the attack until set to 0. +-- @field [parent=#ActorControls] #number use Possible values: 0 - 3. If above 0 - activates the readied weapon/spell. For weapons, keeping at a non-zero value will charge the attack until set to 0. For melee weapons on AI-disabled actors - values 1 - 3 determine an attack type: 1 - chop, 2 - slash, 3 - thrust. --- -- Enables or disables standard AI (enabled by default). From 7d659ae64cb9fb8e7993c4a00058a351f0e95f24 Mon Sep 17 00:00:00 2001 From: Max Yari Date: Fri, 21 Jun 2024 00:26:48 +0200 Subject: [PATCH 03/10] Added lua enum for attacktypes --- apps/openmw/mwlua/localscripts.cpp | 2 ++ apps/openmw/mwmechanics/creaturestats.cpp | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwlua/localscripts.cpp b/apps/openmw/mwlua/localscripts.cpp index 3b0d44a984..e9c3ea3662 100644 --- a/apps/openmw/mwlua/localscripts.cpp +++ b/apps/openmw/mwlua/localscripts.cpp @@ -63,6 +63,8 @@ namespace MWLua selfAPI["controls"] = sol::readonly_property([](SelfObject& self) { return &self.mControls; }); selfAPI["isActive"] = [](SelfObject& self) { return &self.mIsActive; }; selfAPI["enableAI"] = [](SelfObject& self, bool v) { self.mControls.mDisableAI = !v; }; + selfAPI["attackType"] = LuaUtil::makeStrictReadOnly(context.mLua->tableFromPairs( + { { "NoAttack", 0 }, { "Chop", 1 }, { "Slash", 2 }, { "Thrust", 3 } })); using AiPackage = MWMechanics::AiPackage; sol::usertype aiPackage = context.mLua->sol().new_usertype("AiPackage"); diff --git a/apps/openmw/mwmechanics/creaturestats.cpp b/apps/openmw/mwmechanics/creaturestats.cpp index e3fed90d58..98bfa59c89 100644 --- a/apps/openmw/mwmechanics/creaturestats.cpp +++ b/apps/openmw/mwmechanics/creaturestats.cpp @@ -45,7 +45,6 @@ namespace MWMechanics , mSideMovementAngle(0) , mLevel(0) , mAttackingOrSpell(false) - , mAttackType("") { for (const ESM::Attribute& attribute : MWBase::Environment::get().getESMStore()->get()) { From 2ef0568dda0e87b2419460c1351264a76d3ff970 Mon Sep 17 00:00:00 2001 From: Max Yari Date: Fri, 21 Jun 2024 16:53:11 +0200 Subject: [PATCH 04/10] Changed lua enum name, tweaked docs --- apps/openmw/mwlua/localscripts.cpp | 4 ++-- files/lua_api/openmw/self.lua | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwlua/localscripts.cpp b/apps/openmw/mwlua/localscripts.cpp index e9c3ea3662..d2ef661bc7 100644 --- a/apps/openmw/mwlua/localscripts.cpp +++ b/apps/openmw/mwlua/localscripts.cpp @@ -63,8 +63,8 @@ namespace MWLua selfAPI["controls"] = sol::readonly_property([](SelfObject& self) { return &self.mControls; }); selfAPI["isActive"] = [](SelfObject& self) { return &self.mIsActive; }; selfAPI["enableAI"] = [](SelfObject& self, bool v) { self.mControls.mDisableAI = !v; }; - selfAPI["attackType"] = LuaUtil::makeStrictReadOnly(context.mLua->tableFromPairs( - { { "NoAttack", 0 }, { "Chop", 1 }, { "Slash", 2 }, { "Thrust", 3 } })); + selfAPI["AttackTYPE"] = LuaUtil::makeStrictReadOnly(context.mLua->tableFromPairs( + { { "NoAttack", 0 }, { "Attack", 1 }, { "Chop", 1 }, { "Slash", 2 }, { "Thrust", 3 } })); using AiPackage = MWMechanics::AiPackage; sol::usertype aiPackage = context.mLua->sol().new_usertype("AiPackage"); diff --git a/files/lua_api/openmw/self.lua b/files/lua_api/openmw/self.lua index 60b5f563a5..9f13f6a8bf 100644 --- a/files/lua_api/openmw/self.lua +++ b/files/lua_api/openmw/self.lua @@ -37,7 +37,14 @@ -- @field [parent=#ActorControls] #boolean run true - run, false - walk -- @field [parent=#ActorControls] #boolean sneak If true - sneak -- @field [parent=#ActorControls] #boolean jump If true - initiate a jump --- @field [parent=#ActorControls] #number use Possible values: 0 - 3. If above 0 - activates the readied weapon/spell. For weapons, keeping at a non-zero value will charge the attack until set to 0. For melee weapons on AI-disabled actors - values 1 - 3 determine an attack type: 1 - chop, 2 - slash, 3 - thrust. +-- @field [parent=#ActorControls] #number Accepts an @{#AttackTYPE} value. Activates the readied weapon/spell according to a provided value. For weapons, keeping this value modified will charge the attack until set to @{#AttackTYPE.NoAttack}. + +-- @type AttackTYPE +-- @field #number NoAttack +-- @field #number Attack +-- @field #number Chop +-- @field #number Swing +-- @field #number Thrust --- -- Enables or disables standard AI (enabled by default). From b01b76b81ea6e6c87887bbdc70ce513bf430a9c3 Mon Sep 17 00:00:00 2001 From: Max Yari Date: Fri, 21 Jun 2024 23:18:13 +0200 Subject: [PATCH 05/10] Introduced attacktype enum, fixed lua docs --- apps/openmw/mwlua/localscripts.cpp | 9 +++++++-- apps/openmw/mwmechanics/actors.cpp | 17 ++++++++++------- apps/openmw/mwmechanics/attacktype.hpp | 16 ++++++++++++++++ files/lua_api/openmw/self.lua | 5 +++-- 4 files changed, 36 insertions(+), 11 deletions(-) create mode 100644 apps/openmw/mwmechanics/attacktype.hpp diff --git a/apps/openmw/mwlua/localscripts.cpp b/apps/openmw/mwlua/localscripts.cpp index d2ef661bc7..966444b173 100644 --- a/apps/openmw/mwlua/localscripts.cpp +++ b/apps/openmw/mwlua/localscripts.cpp @@ -1,6 +1,7 @@ #include "localscripts.hpp" #include +#include #include #include "../mwbase/environment.hpp" @@ -13,6 +14,7 @@ #include "../mwmechanics/aisequence.hpp" #include "../mwmechanics/aitravel.hpp" #include "../mwmechanics/aiwander.hpp" +#include "../mwmechanics/attacktype.hpp" #include "../mwmechanics/creaturestats.hpp" #include "../mwworld/class.hpp" #include "../mwworld/ptr.hpp" @@ -63,8 +65,11 @@ namespace MWLua selfAPI["controls"] = sol::readonly_property([](SelfObject& self) { return &self.mControls; }); selfAPI["isActive"] = [](SelfObject& self) { return &self.mIsActive; }; selfAPI["enableAI"] = [](SelfObject& self, bool v) { self.mControls.mDisableAI = !v; }; - selfAPI["AttackTYPE"] = LuaUtil::makeStrictReadOnly(context.mLua->tableFromPairs( - { { "NoAttack", 0 }, { "Attack", 1 }, { "Chop", 1 }, { "Slash", 2 }, { "Thrust", 3 } })); + selfAPI["AttackTYPE"] + = LuaUtil::makeStrictReadOnly(context.mLua->tableFromPairs( + { { "NoAttack", MWMechanics::AttackType::NoAttack }, { "Any", MWMechanics::AttackType::Any }, + { "Chop", MWMechanics::AttackType::Chop }, { "Slash", MWMechanics::AttackType::Slash }, + { "Thrust", MWMechanics::AttackType::Thrust } })); using AiPackage = MWMechanics::AiPackage; sol::usertype aiPackage = context.mLua->sol().new_usertype("AiPackage"); diff --git a/apps/openmw/mwmechanics/actors.cpp b/apps/openmw/mwmechanics/actors.cpp index 1a6f224c0a..300e2316ba 100644 --- a/apps/openmw/mwmechanics/actors.cpp +++ b/apps/openmw/mwmechanics/actors.cpp @@ -47,6 +47,7 @@ #include "aifollow.hpp" #include "aipursue.hpp" #include "aiwander.hpp" +#include "attacktype.hpp" #include "character.hpp" #include "creaturestats.hpp" #include "movement.hpp" @@ -239,13 +240,13 @@ namespace MWMechanics namespace { - std::string_view attackTypeName(int attackTypeNum) + std::string_view attackTypeName(AttackType attackType) { - if (attackTypeNum == 1) + if (attackType == AttackType::Chop) return "chop"; - else if (attackTypeNum == 2) + else if (attackType == AttackType::Slash) return "slash"; - else if (attackTypeNum == 3) + else if (attackType == AttackType::Thrust) return "thrust"; else return ""; @@ -376,9 +377,11 @@ namespace MWMechanics stats.setMovementFlag(MWMechanics::CreatureStats::Flag_Run, controls.mRun); stats.setMovementFlag(MWMechanics::CreatureStats::Flag_Sneak, controls.mSneak); - int attackTypeNum = controls.mUse & 3; - stats.setAttackingOrSpell(attackTypeNum != 0); - stats.setAttackType(attackTypeName(attackTypeNum)); + // Same as mUse % max AttackType int value + AttackType attackType = static_cast(controls.mUse % static_cast(AttackType::Thrust)); + + stats.setAttackingOrSpell(attackType != AttackType::NoAttack); + stats.setAttackType(attackTypeName(attackType)); controls.mChanged = false; } diff --git a/apps/openmw/mwmechanics/attacktype.hpp b/apps/openmw/mwmechanics/attacktype.hpp new file mode 100644 index 0000000000..3824f5bbe7 --- /dev/null +++ b/apps/openmw/mwmechanics/attacktype.hpp @@ -0,0 +1,16 @@ +#ifndef OPENMW_MWMECHANICS_ATTACKTYPE_H +#define OPENMW_MWMECHANICS_ATTACKTYPE_H + +namespace MWMechanics +{ + enum class AttackType + { + NoAttack, + Any, + Chop, + Slash, + Thrust + }; +} + +#endif diff --git a/files/lua_api/openmw/self.lua b/files/lua_api/openmw/self.lua index 9f13f6a8bf..acb83a3cf4 100644 --- a/files/lua_api/openmw/self.lua +++ b/files/lua_api/openmw/self.lua @@ -37,11 +37,12 @@ -- @field [parent=#ActorControls] #boolean run true - run, false - walk -- @field [parent=#ActorControls] #boolean sneak If true - sneak -- @field [parent=#ActorControls] #boolean jump If true - initiate a jump --- @field [parent=#ActorControls] #number Accepts an @{#AttackTYPE} value. Activates the readied weapon/spell according to a provided value. For weapons, keeping this value modified will charge the attack until set to @{#AttackTYPE.NoAttack}. +-- @field [parent=#ActorControls] #number use Accepts an @{#AttackTYPE} value. Activates the readied weapon/spell according to a provided value. For weapons, keeping this value modified will charge the attack until set to @{#AttackTYPE.NoAttack}. If an @{#AttackTYPE} not appropriate for a currently equipped weapon provided - an appropriate @{#AttackTYPE} will be used instead. +--- -- @type AttackTYPE -- @field #number NoAttack --- @field #number Attack +-- @field #number Any -- @field #number Chop -- @field #number Swing -- @field #number Thrust From 88e4ec198d1b51e6d2efd17143cc76cf1fd7294f Mon Sep 17 00:00:00 2001 From: Max Yari Date: Sat, 22 Jun 2024 00:15:19 +0200 Subject: [PATCH 06/10] Changed value type in the docs --- files/lua_api/openmw/self.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/lua_api/openmw/self.lua b/files/lua_api/openmw/self.lua index acb83a3cf4..e57e83b952 100644 --- a/files/lua_api/openmw/self.lua +++ b/files/lua_api/openmw/self.lua @@ -37,7 +37,7 @@ -- @field [parent=#ActorControls] #boolean run true - run, false - walk -- @field [parent=#ActorControls] #boolean sneak If true - sneak -- @field [parent=#ActorControls] #boolean jump If true - initiate a jump --- @field [parent=#ActorControls] #number use Accepts an @{#AttackTYPE} value. Activates the readied weapon/spell according to a provided value. For weapons, keeping this value modified will charge the attack until set to @{#AttackTYPE.NoAttack}. If an @{#AttackTYPE} not appropriate for a currently equipped weapon provided - an appropriate @{#AttackTYPE} will be used instead. +-- @field [parent=#ActorControls] #AttackTYPE use Activates the readied weapon/spell according to a provided value. For weapons, keeping this value modified will charge the attack until set to @{#AttackTYPE.NoAttack}. If an @{#AttackTYPE} not appropriate for a currently equipped weapon provided - an appropriate @{#AttackTYPE} will be used instead. --- -- @type AttackTYPE From 13918e3b7042a66a8babf2f2f60f39633e72c988 Mon Sep 17 00:00:00 2001 From: Max Yari Date: Mon, 24 Jun 2024 01:15:43 +0200 Subject: [PATCH 07/10] AttackType -> ATTACK_TYPE --- apps/openmw/mwlua/localscripts.cpp | 2 +- files/lua_api/openmw/self.lua | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwlua/localscripts.cpp b/apps/openmw/mwlua/localscripts.cpp index 966444b173..4e7b171ff0 100644 --- a/apps/openmw/mwlua/localscripts.cpp +++ b/apps/openmw/mwlua/localscripts.cpp @@ -65,7 +65,7 @@ namespace MWLua selfAPI["controls"] = sol::readonly_property([](SelfObject& self) { return &self.mControls; }); selfAPI["isActive"] = [](SelfObject& self) { return &self.mIsActive; }; selfAPI["enableAI"] = [](SelfObject& self, bool v) { self.mControls.mDisableAI = !v; }; - selfAPI["AttackTYPE"] + selfAPI["ATTACK_TYPE"] = LuaUtil::makeStrictReadOnly(context.mLua->tableFromPairs( { { "NoAttack", MWMechanics::AttackType::NoAttack }, { "Any", MWMechanics::AttackType::Any }, { "Chop", MWMechanics::AttackType::Chop }, { "Slash", MWMechanics::AttackType::Slash }, diff --git a/files/lua_api/openmw/self.lua b/files/lua_api/openmw/self.lua index e57e83b952..1af7fe99a3 100644 --- a/files/lua_api/openmw/self.lua +++ b/files/lua_api/openmw/self.lua @@ -37,10 +37,10 @@ -- @field [parent=#ActorControls] #boolean run true - run, false - walk -- @field [parent=#ActorControls] #boolean sneak If true - sneak -- @field [parent=#ActorControls] #boolean jump If true - initiate a jump --- @field [parent=#ActorControls] #AttackTYPE use Activates the readied weapon/spell according to a provided value. For weapons, keeping this value modified will charge the attack until set to @{#AttackTYPE.NoAttack}. If an @{#AttackTYPE} not appropriate for a currently equipped weapon provided - an appropriate @{#AttackTYPE} will be used instead. +-- @field [parent=#ActorControls] #ATTACK_TYPE use Activates the readied weapon/spell according to a provided value. For weapons, keeping this value modified will charge the attack until set to @{#ATTACK_TYPE.NoAttack}. If an @{#ATTACK_TYPE} not appropriate for a currently equipped weapon provided - an appropriate @{#ATTACK_TYPE} will be used instead. --- --- @type AttackTYPE +-- @type ATTACK_TYPE -- @field #number NoAttack -- @field #number Any -- @field #number Chop From 3eadb841426b5c38e71b9667bd8dae7681b37040 Mon Sep 17 00:00:00 2001 From: Max Yari Date: Wed, 26 Jun 2024 01:25:25 +0200 Subject: [PATCH 08/10] Fixed wrong mUse wrapping --- apps/openmw/mwmechanics/actors.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwmechanics/actors.cpp b/apps/openmw/mwmechanics/actors.cpp index 300e2316ba..e10de7122f 100644 --- a/apps/openmw/mwmechanics/actors.cpp +++ b/apps/openmw/mwmechanics/actors.cpp @@ -378,7 +378,8 @@ namespace MWMechanics stats.setMovementFlag(MWMechanics::CreatureStats::Flag_Sneak, controls.mSneak); // Same as mUse % max AttackType int value - AttackType attackType = static_cast(controls.mUse % static_cast(AttackType::Thrust)); + AttackType attackType + = static_cast(controls.mUse % (static_cast(AttackType::Thrust) + 1)); stats.setAttackingOrSpell(attackType != AttackType::NoAttack); stats.setAttackType(attackTypeName(attackType)); From 1497dae4fa8d040bdebd7a0fbc090677e4aae738 Mon Sep 17 00:00:00 2001 From: Max Yari Date: Fri, 28 Jun 2024 10:00:04 +0200 Subject: [PATCH 09/10] Better mUse out-of-range handling --- apps/openmw/mwmechanics/actors.cpp | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/apps/openmw/mwmechanics/actors.cpp b/apps/openmw/mwmechanics/actors.cpp index e10de7122f..191ad86733 100644 --- a/apps/openmw/mwmechanics/actors.cpp +++ b/apps/openmw/mwmechanics/actors.cpp @@ -242,14 +242,19 @@ namespace MWMechanics { std::string_view attackTypeName(AttackType attackType) { - if (attackType == AttackType::Chop) - return "chop"; - else if (attackType == AttackType::Slash) - return "slash"; - else if (attackType == AttackType::Thrust) - return "thrust"; - else - return ""; + switch (attackType) + { + case AttackType::NoAttack: + case AttackType::Any: + return {}; + case AttackType::Chop: + return "chop"; + case AttackType::Slash: + return "slash"; + case AttackType::Thrust: + return "thrust"; + } + throw std::logic_error("Invalid attack type value: " + std::to_string(static_cast(attackType))); } float getTimeToDestination(const AiPackage& package, const osg::Vec3f& position, float speed, float duration, @@ -377,10 +382,7 @@ namespace MWMechanics stats.setMovementFlag(MWMechanics::CreatureStats::Flag_Run, controls.mRun); stats.setMovementFlag(MWMechanics::CreatureStats::Flag_Sneak, controls.mSneak); - // Same as mUse % max AttackType int value - AttackType attackType - = static_cast(controls.mUse % (static_cast(AttackType::Thrust) + 1)); - + AttackType attackType = static_cast(controls.mUse); stats.setAttackingOrSpell(attackType != AttackType::NoAttack); stats.setAttackType(attackTypeName(attackType)); From 723c64a79b9abdc29f0450b3de1111456123444f Mon Sep 17 00:00:00 2001 From: Max Yari Date: Mon, 1 Jul 2024 19:58:33 +0200 Subject: [PATCH 10/10] Lua API version increment --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c4102a7040..c50d8a7c62 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,7 +82,7 @@ message(STATUS "Configuring OpenMW...") set(OPENMW_VERSION_MAJOR 0) set(OPENMW_VERSION_MINOR 49) set(OPENMW_VERSION_RELEASE 0) -set(OPENMW_LUA_API_REVISION 62) +set(OPENMW_LUA_API_REVISION 63) set(OPENMW_POSTPROCESSING_API_REVISION 1) set(OPENMW_VERSION_COMMITHASH "")