From d4e656ceafdbc1526fa1b9294f4afde6304e2c31 Mon Sep 17 00:00:00 2001 From: Allofich Date: Sun, 10 Jul 2016 21:22:48 +0900 Subject: [PATCH 1/4] Play trap activation sound on trapped object, not actor --- apps/openmw/mwclass/container.cpp | 2 +- apps/openmw/mwclass/door.cpp | 2 +- apps/openmw/mwworld/actiontrap.hpp | 5 ++--- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/apps/openmw/mwclass/container.cpp b/apps/openmw/mwclass/container.cpp index 675287af9..da91b5a01 100644 --- a/apps/openmw/mwclass/container.cpp +++ b/apps/openmw/mwclass/container.cpp @@ -173,7 +173,7 @@ namespace MWClass else { // Activate trap - boost::shared_ptr action(new MWWorld::ActionTrap(actor, ptr.getCellRef().getTrap(), ptr)); + boost::shared_ptr action(new MWWorld::ActionTrap(ptr.getCellRef().getTrap(), ptr)); action->setSound(trapActivationSound); return action; } diff --git a/apps/openmw/mwclass/door.cpp b/apps/openmw/mwclass/door.cpp index d8a9efba5..b31a958b5 100644 --- a/apps/openmw/mwclass/door.cpp +++ b/apps/openmw/mwclass/door.cpp @@ -139,7 +139,7 @@ namespace MWClass if(!ptr.getCellRef().getTrap().empty()) { // Trap activation - boost::shared_ptr action(new MWWorld::ActionTrap(actor, ptr.getCellRef().getTrap(), ptr)); + boost::shared_ptr action(new MWWorld::ActionTrap(ptr.getCellRef().getTrap(), ptr)); action->setSound(trapActivationSound); return action; } diff --git a/apps/openmw/mwworld/actiontrap.hpp b/apps/openmw/mwworld/actiontrap.hpp index 4c2f4139f..5ff91613f 100644 --- a/apps/openmw/mwworld/actiontrap.hpp +++ b/apps/openmw/mwworld/actiontrap.hpp @@ -18,10 +18,9 @@ namespace MWWorld public: /// @param spellId - /// @param actor Actor that activated the trap /// @param trapSource - ActionTrap (const Ptr& actor, const std::string& spellId, const Ptr& trapSource) - : Action(false, actor), mSpellId(spellId), mTrapSource(trapSource) {} + ActionTrap (const std::string& spellId, const Ptr& trapSource) + : Action(false, trapSource), mSpellId(spellId), mTrapSource(trapSource) {} }; } From 249918612d55238472fe854f8fe15327b0392c36 Mon Sep 17 00:00:00 2001 From: Allofich Date: Sun, 10 Jul 2016 21:42:03 +0900 Subject: [PATCH 2/4] Play trap disarm sound when key used on trapped object --- apps/openmw/mwclass/container.cpp | 9 ++++++++- apps/openmw/mwclass/door.cpp | 8 +++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwclass/container.cpp b/apps/openmw/mwclass/container.cpp index da91b5a01..2e5b495e4 100644 --- a/apps/openmw/mwclass/container.cpp +++ b/apps/openmw/mwclass/container.cpp @@ -7,6 +7,7 @@ #include "../mwbase/world.hpp" #include "../mwbase/windowmanager.hpp" #include "../mwbase/mechanicsmanager.hpp" +#include "../mwbase/soundmanager.hpp" #include "../mwworld/ptr.hpp" #include "../mwworld/failedaction.hpp" @@ -159,7 +160,13 @@ namespace MWClass MWBase::Environment::get().getWindowManager ()->messageBox (keyName + " #{sKeyUsed}"); unlock(ptr); // using a key disarms the trap - ptr.getCellRef().setTrap(""); + if(!ptr.getCellRef().getTrap().empty()) + { + ptr.getCellRef().setTrap(""); + MWBase::Environment::get().getSoundManager()->playSound3D(ptr, + "Disarm Trap", 1.0f, 1.0f, MWBase::SoundManager::Play_TypeSfx, + MWBase::SoundManager::Play_Normal); + } } diff --git a/apps/openmw/mwclass/door.cpp b/apps/openmw/mwclass/door.cpp index b31a958b5..12130e5df 100644 --- a/apps/openmw/mwclass/door.cpp +++ b/apps/openmw/mwclass/door.cpp @@ -131,7 +131,13 @@ namespace MWClass MWBase::Environment::get().getWindowManager()->messageBox(keyName + " #{sKeyUsed}"); unlock(ptr); //Call the function here. because that makes sense. // using a key disarms the trap - ptr.getCellRef().setTrap(""); + if(!ptr.getCellRef().getTrap().empty()) + { + ptr.getCellRef().setTrap(""); + MWBase::Environment::get().getSoundManager()->playSound3D(ptr, + "Disarm Trap", 1.0f, 1.0f, MWBase::SoundManager::Play_TypeSfx, + MWBase::SoundManager::Play_Normal); + } } if (!needKey || hasKey) From cabe038a976e1b19ab8ac390015c08d8ad614505 Mon Sep 17 00:00:00 2001 From: Allofich Date: Sun, 10 Jul 2016 22:08:42 +0900 Subject: [PATCH 3/4] Make lockpick and probe sounds 3d positional --- apps/openmw/mwmechanics/character.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwmechanics/character.cpp b/apps/openmw/mwmechanics/character.cpp index 24f004588..081f288d5 100644 --- a/apps/openmw/mwmechanics/character.cpp +++ b/apps/openmw/mwmechanics/character.cpp @@ -1305,7 +1305,9 @@ bool CharacterController::updateWeaponState() if(!resultMessage.empty()) MWBase::Environment::get().getWindowManager()->messageBox(resultMessage); if(!resultSound.empty()) - MWBase::Environment::get().getSoundManager()->playSound(resultSound, 1.0f, 1.0f); + MWBase::Environment::get().getSoundManager()->playSound3D(target, + resultSound, 1.0f, 1.0f, MWBase::SoundManager::Play_TypeSfx, + MWBase::SoundManager::Play_Normal); } else if (ammunition) { From 599e6708ec9737b817163cb927af52aea4b9a967 Mon Sep 17 00:00:00 2001 From: Allofich Date: Sun, 10 Jul 2016 22:29:21 +0900 Subject: [PATCH 4/4] Allow using keys to open trapped objects of lock level 0 --- apps/openmw/mwclass/container.cpp | 15 +++++++++------ apps/openmw/mwclass/door.cpp | 15 +++++++++------ 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/apps/openmw/mwclass/container.cpp b/apps/openmw/mwclass/container.cpp index 2e5b495e4..09891652a 100644 --- a/apps/openmw/mwclass/container.cpp +++ b/apps/openmw/mwclass/container.cpp @@ -137,7 +137,8 @@ namespace MWClass MWWorld::Ptr player = MWBase::Environment::get().getWorld ()->getPlayerPtr(); MWWorld::InventoryStore& invStore = player.getClass().getInventoryStore(player); - bool needKey = ptr.getCellRef().getLockLevel() > 0; + bool isLocked = ptr.getCellRef().getLockLevel() > 0; + bool isTrapped = !ptr.getCellRef().getTrap().empty(); bool hasKey = false; std::string keyName; @@ -155,24 +156,26 @@ namespace MWClass } } - if (needKey && hasKey) + if ((isLocked || isTrapped) && hasKey) { MWBase::Environment::get().getWindowManager ()->messageBox (keyName + " #{sKeyUsed}"); - unlock(ptr); + if(isLocked) + unlock(ptr); // using a key disarms the trap - if(!ptr.getCellRef().getTrap().empty()) + if(isTrapped) { ptr.getCellRef().setTrap(""); MWBase::Environment::get().getSoundManager()->playSound3D(ptr, "Disarm Trap", 1.0f, 1.0f, MWBase::SoundManager::Play_TypeSfx, MWBase::SoundManager::Play_Normal); + isTrapped = false; } } - if (!needKey || hasKey) + if (!isLocked || hasKey) { - if(ptr.getCellRef().getTrap().empty()) + if(!isTrapped) { boost::shared_ptr action (new MWWorld::ActionOpen(ptr)); return action; diff --git a/apps/openmw/mwclass/door.cpp b/apps/openmw/mwclass/door.cpp index 12130e5df..a54b64897 100644 --- a/apps/openmw/mwclass/door.cpp +++ b/apps/openmw/mwclass/door.cpp @@ -107,7 +107,8 @@ namespace MWClass MWWorld::ContainerStore &invStore = actor.getClass().getContainerStore(actor); - bool needKey = ptr.getCellRef().getLockLevel() > 0; + bool isLocked = ptr.getCellRef().getLockLevel() > 0; + bool isTrapped = !ptr.getCellRef().getTrap().empty(); bool hasKey = false; std::string keyName; @@ -125,24 +126,26 @@ namespace MWClass } } - if (needKey && hasKey) + if ((isLocked || isTrapped) && hasKey) { if(actor == MWMechanics::getPlayer()) MWBase::Environment::get().getWindowManager()->messageBox(keyName + " #{sKeyUsed}"); - unlock(ptr); //Call the function here. because that makes sense. + if(isLocked) + unlock(ptr); //Call the function here. because that makes sense. // using a key disarms the trap - if(!ptr.getCellRef().getTrap().empty()) + if(isTrapped) { ptr.getCellRef().setTrap(""); MWBase::Environment::get().getSoundManager()->playSound3D(ptr, "Disarm Trap", 1.0f, 1.0f, MWBase::SoundManager::Play_TypeSfx, MWBase::SoundManager::Play_Normal); + isTrapped = false; } } - if (!needKey || hasKey) + if (!isLocked || hasKey) { - if(!ptr.getCellRef().getTrap().empty()) + if(isTrapped) { // Trap activation boost::shared_ptr action(new MWWorld::ActionTrap(ptr.getCellRef().getTrap(), ptr));