From b7b51f24d63696436157086ed79356704889d084 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Thu, 3 Jan 2013 11:20:25 +0100 Subject: [PATCH 01/38] added new Role for table headers (Role_Display) --- apps/opencs/model/world/columnbase.cpp | 4 ++-- apps/opencs/model/world/columnbase.hpp | 18 ++++++++++++++---- apps/opencs/model/world/columns.hpp | 9 +++++---- apps/opencs/model/world/idtable.cpp | 3 +++ 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/apps/opencs/model/world/columnbase.cpp b/apps/opencs/model/world/columnbase.cpp index 7adc7e6c3..134c582c4 100644 --- a/apps/opencs/model/world/columnbase.cpp +++ b/apps/opencs/model/world/columnbase.cpp @@ -1,8 +1,8 @@ #include "columnbase.hpp" -CSMWorld::ColumnBase::ColumnBase (const std::string& title, int flags) -: mTitle (title), mFlags (flags) +CSMWorld::ColumnBase::ColumnBase (const std::string& title, Display displayType, int flags) +: mTitle (title), mDisplayType (displayType), mFlags (flags) {} CSMWorld::ColumnBase::~ColumnBase() {} diff --git a/apps/opencs/model/world/columnbase.hpp b/apps/opencs/model/world/columnbase.hpp index dc077eff6..38b73ee3f 100644 --- a/apps/opencs/model/world/columnbase.hpp +++ b/apps/opencs/model/world/columnbase.hpp @@ -14,7 +14,8 @@ namespace CSMWorld { enum Roles { - Role_Flags = Qt::UserRole + Role_Flags = Qt::UserRole, + Role_Display = Qt::UserRole+1 }; enum Flags @@ -23,10 +24,18 @@ namespace CSMWorld Flag_Dialogue = 2 // column should be displayed in dialogue view }; + enum Display + { + Display_String, + Display_Integer, + Display_Float + }; + std::string mTitle; int mFlags; + Display mDisplayType; - ColumnBase (const std::string& title, int flag); + ColumnBase (const std::string& title, Display displayType, int flag); virtual ~ColumnBase(); @@ -34,6 +43,7 @@ namespace CSMWorld virtual bool isUserEditable() const; ///< Can this column be edited directly by the user? + }; template @@ -42,8 +52,8 @@ namespace CSMWorld std::string mTitle; int mFlags; - Column (const std::string& title, int flags = Flag_Table | Flag_Dialogue) - : ColumnBase (title, flags) {} + Column (const std::string& title, Display displayType, int flags = Flag_Table | Flag_Dialogue) + : ColumnBase (title, displayType, flags) {} virtual QVariant get (const Record& record) const = 0; diff --git a/apps/opencs/model/world/columns.hpp b/apps/opencs/model/world/columns.hpp index 5abf4ea8b..1e2de9265 100644 --- a/apps/opencs/model/world/columns.hpp +++ b/apps/opencs/model/world/columns.hpp @@ -8,7 +8,7 @@ namespace CSMWorld template struct FloatValueColumn : public Column { - FloatValueColumn() : Column ("Value") {} + FloatValueColumn() : Column ("Value", ColumnBase::Display_Float) {} virtual QVariant get (const Record& record) const { @@ -31,7 +31,7 @@ namespace CSMWorld template struct StringIdColumn : public Column { - StringIdColumn() : Column ("ID") {} + StringIdColumn() : Column ("ID", ColumnBase::Display_String) {} virtual QVariant get (const Record& record) const { @@ -47,7 +47,7 @@ namespace CSMWorld template struct RecordStateColumn : public Column { - RecordStateColumn() : Column ("*") {} + RecordStateColumn() : Column ("*", ColumnBase::Display_Integer) {} virtual QVariant get (const Record& record) const { @@ -78,7 +78,8 @@ namespace CSMWorld { int mType; - FixedRecordTypeColumn (int type) : Column ("Type", 0), mType (type) {} + FixedRecordTypeColumn (int type) + : Column ("Type", ColumnBase::Display_Integer, 0), mType (type) {} virtual QVariant get (const Record& record) const { diff --git a/apps/opencs/model/world/idtable.cpp b/apps/opencs/model/world/idtable.cpp index 2815e318c..afed6b6ed 100644 --- a/apps/opencs/model/world/idtable.cpp +++ b/apps/opencs/model/world/idtable.cpp @@ -51,6 +51,9 @@ QVariant CSMWorld::IdTable::headerData (int section, Qt::Orientation orientation if (role==ColumnBase::Role_Flags) return mIdCollection->getColumn (section).mFlags; + if (role==ColumnBase::Role_Display) + return mIdCollection->getColumn (section).mDisplayType; + return QVariant(); } From d4a9236ae5ef0596dcbf53eaba64948abaa7692e Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Tue, 8 Jan 2013 14:59:40 +0100 Subject: [PATCH 02/38] hocking up dialogue sub view to a widget mapper --- apps/opencs/view/world/dialoguesubview.cpp | 52 ++++++++++++++++++++++ apps/opencs/view/world/dialoguesubview.hpp | 3 ++ 2 files changed, 55 insertions(+) diff --git a/apps/opencs/view/world/dialoguesubview.cpp b/apps/opencs/view/world/dialoguesubview.cpp index 354223757..6138fd3f5 100644 --- a/apps/opencs/view/world/dialoguesubview.cpp +++ b/apps/opencs/view/world/dialoguesubview.cpp @@ -4,6 +4,10 @@ #include #include #include +#include +#include +#include +#include #include "../../model/world/columnbase.hpp" @@ -23,6 +27,9 @@ CSVWorld::DialogueSubView::DialogueSubView (const CSMWorld::UniversalId& id, CSM int columns = model->columnCount(); + mWidgetMapper = new QDataWidgetMapper (this); + mWidgetMapper->setModel (model); + for (int i=0; iheaderData (i, Qt::Horizontal, CSMWorld::ColumnBase::Role_Flags).toInt(); @@ -30,8 +37,53 @@ CSVWorld::DialogueSubView::DialogueSubView (const CSMWorld::UniversalId& id, CSM if (flags & CSMWorld::ColumnBase::Flag_Dialogue) { layout->addWidget (new QLabel (model->headerData (i, Qt::Horizontal).toString()), i, 0); + + CSMWorld::ColumnBase::Display display = static_cast + (model->headerData (i, Qt::Horizontal, CSMWorld::ColumnBase::Role_Display).toInt()); + + QWidget *widget = 0; + + if (model->flags (model->index (0, i)) & Qt::ItemIsEditable) + { + switch (display) + { + case CSMWorld::ColumnBase::Display_String: + + layout->addWidget (widget = new QLineEdit, i, 1); + break; + + case CSMWorld::ColumnBase::Display_Integer: + + /// \todo configure widget properly (range) + layout->addWidget (widget = new QSpinBox, i, 1); + break; + + case CSMWorld::ColumnBase::Display_Float: + + /// \todo configure widget properly (range, format?) + layout->addWidget (widget = new QDoubleSpinBox, i, 1); + break; + } + } + else + { + switch (display) + { + case CSMWorld::ColumnBase::Display_String: + case CSMWorld::ColumnBase::Display_Integer: + case CSMWorld::ColumnBase::Display_Float: + + layout->addWidget (widget = new QLabel, i, 1); + break; + } + } + + if (widget) + mWidgetMapper->addMapping (widget, i); } } + + mWidgetMapper->toFirst(); /// \todo use the correct row instead } void CSVWorld::DialogueSubView::setEditLock (bool locked) diff --git a/apps/opencs/view/world/dialoguesubview.hpp b/apps/opencs/view/world/dialoguesubview.hpp index c57dab108..64715f5b7 100644 --- a/apps/opencs/view/world/dialoguesubview.hpp +++ b/apps/opencs/view/world/dialoguesubview.hpp @@ -3,6 +3,8 @@ #include "../doc/subview.hpp" +class QDataWidgetMapper; + namespace CSMDoc { class Document; @@ -12,6 +14,7 @@ namespace CSVWorld { class DialogueSubView : public CSVDoc::SubView { + QDataWidgetMapper *mWidgetMapper; public: From d4ca954d47c0e19ee767efd2f263183ddd0b2839 Mon Sep 17 00:00:00 2001 From: Tom Mason Date: Sat, 12 Jan 2013 18:31:57 +0000 Subject: [PATCH 03/38] scripts on items in containers added to script list on cell change --- apps/openmw/mwworld/localscripts.cpp | 33 ++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/apps/openmw/mwworld/localscripts.cpp b/apps/openmw/mwworld/localscripts.cpp index a821ad486..9c9131008 100644 --- a/apps/openmw/mwworld/localscripts.cpp +++ b/apps/openmw/mwworld/localscripts.cpp @@ -3,6 +3,10 @@ #include "esmstore.hpp" #include "cellstore.hpp" +#include "class.hpp" +#include "containerstore.hpp" + + namespace { template @@ -19,6 +23,32 @@ namespace } } } + + // Adds scripts for items in containers (containers/npcs/creatures) + template + void listCellScriptsCont (MWWorld::LocalScripts& localScripts, + MWWorld::CellRefList& cellRefList, MWWorld::Ptr::CellStore *cell) + { + for (typename MWWorld::CellRefList::List::iterator iter ( + cellRefList.mList.begin()); + iter!=cellRefList.mList.end(); ++iter) + { + + MWWorld::Ptr containerPtr (&*iter, cell); + + MWWorld::ContainerStore& container = MWWorld::Class::get(containerPtr).getContainerStore(containerPtr); + for(MWWorld::ContainerStoreIterator it3 = container.begin(); it3 != container.end(); ++it3) + { + std::string script = MWWorld::Class::get(*it3).getScript(*it3); + if(script != "") + { + MWWorld::Ptr item = *it3; + item.mCell = cell; + localScripts.add (script, item); + } + } + } + } } MWWorld::LocalScripts::LocalScripts (const MWWorld::ESMStore& store) : mStore (store) {} @@ -78,13 +108,16 @@ void MWWorld::LocalScripts::addCell (Ptr::CellStore *cell) listCellScripts (*this, cell->mBooks, cell); listCellScripts (*this, cell->mClothes, cell); listCellScripts (*this, cell->mContainers, cell); + listCellScriptsCont (*this, cell->mContainers, cell); listCellScripts (*this, cell->mCreatures, cell); + listCellScriptsCont (*this, cell->mCreatures, cell); listCellScripts (*this, cell->mDoors, cell); listCellScripts (*this, cell->mIngreds, cell); listCellScripts (*this, cell->mLights, cell); listCellScripts (*this, cell->mLockpicks, cell); listCellScripts (*this, cell->mMiscItems, cell); listCellScripts (*this, cell->mNpcs, cell); + listCellScriptsCont (*this, cell->mNpcs, cell); listCellScripts (*this, cell->mProbes, cell); listCellScripts (*this, cell->mRepairs, cell); listCellScripts (*this, cell->mWeapons, cell); From c138e00aa250b1cca9cd8484b085df6830218685 Mon Sep 17 00:00:00 2001 From: Tom Mason Date: Sun, 13 Jan 2013 17:05:12 +0000 Subject: [PATCH 04/38] objects scripts are now stopped when they are removed from a container --- apps/openmw/mwbase/world.hpp | 4 ++++ apps/openmw/mwworld/localscripts.cpp | 14 ++++++++++++++ apps/openmw/mwworld/localscripts.hpp | 3 +++ apps/openmw/mwworld/refdata.cpp | 6 ++++++ apps/openmw/mwworld/worldimp.cpp | 5 +++++ apps/openmw/mwworld/worldimp.hpp | 3 +++ 6 files changed, 35 insertions(+) diff --git a/apps/openmw/mwbase/world.hpp b/apps/openmw/mwbase/world.hpp index a576912c0..2ce7ce2c7 100644 --- a/apps/openmw/mwbase/world.hpp +++ b/apps/openmw/mwbase/world.hpp @@ -45,6 +45,7 @@ namespace MWWorld class Ptr; class TimeStamp; class ESMStore; + class RefData; } namespace MWBase @@ -138,6 +139,9 @@ namespace MWBase virtual std::string getCurrentCellName() const = 0; + virtual void removeRefScript (MWWorld::RefData *ref) = 0; + //< Remove the script attached to ref from mLocalScripts + virtual MWWorld::Ptr getPtr (const std::string& name, bool activeOnly) = 0; ///< Return a pointer to a liveCellRef with the given name. /// \param activeOnly do non search inactive cells. diff --git a/apps/openmw/mwworld/localscripts.cpp b/apps/openmw/mwworld/localscripts.cpp index 9c9131008..2fa0d4086 100644 --- a/apps/openmw/mwworld/localscripts.cpp +++ b/apps/openmw/mwworld/localscripts.cpp @@ -146,6 +146,20 @@ void MWWorld::LocalScripts::clearCell (Ptr::CellStore *cell) } } +void MWWorld::LocalScripts::remove (RefData *ref) +{ + for (std::list >::iterator iter = mScripts.begin(); + iter!=mScripts.end(); ++iter) + if (&(iter->second.getRefData()) == ref) + { + if (iter==mIter) + ++mIter; + + mScripts.erase (iter); + break; + } +} + void MWWorld::LocalScripts::remove (const Ptr& ptr) { for (std::list >::iterator iter = mScripts.begin(); diff --git a/apps/openmw/mwworld/localscripts.hpp b/apps/openmw/mwworld/localscripts.hpp index 028dcdeda..840243fff 100644 --- a/apps/openmw/mwworld/localscripts.hpp +++ b/apps/openmw/mwworld/localscripts.hpp @@ -10,6 +10,7 @@ namespace MWWorld { struct ESMStore; class CellStore; + class RefData; /// \brief List of active local scripts class LocalScripts @@ -47,6 +48,8 @@ namespace MWWorld void clearCell (CellStore *cell); ///< Remove all scripts belonging to \a cell. + + void remove (RefData *ref); void remove (const Ptr& ptr); ///< Remove script for given reference (ignored if reference does not have a scirpt listed). diff --git a/apps/openmw/mwworld/refdata.cpp b/apps/openmw/mwworld/refdata.cpp index 5630bfd5c..4be287810 100644 --- a/apps/openmw/mwworld/refdata.cpp +++ b/apps/openmw/mwworld/refdata.cpp @@ -6,6 +6,9 @@ #include "customdata.hpp" #include "cellstore.hpp" +#include "../mwbase/environment.hpp" +#include "../mwbase/world.hpp" + namespace MWWorld { void RefData::copy (const RefData& refData) @@ -107,6 +110,9 @@ namespace MWWorld void RefData::setCount (int count) { + if(count == 0) + MWBase::Environment::get().getWorld()->removeRefScript(this); + mCount = count; } diff --git a/apps/openmw/mwworld/worldimp.cpp b/apps/openmw/mwworld/worldimp.cpp index f49b4bf9b..716cd6e96 100644 --- a/apps/openmw/mwworld/worldimp.cpp +++ b/apps/openmw/mwworld/worldimp.cpp @@ -341,6 +341,11 @@ namespace MWWorld return name; } + void World::removeRefScript (MWWorld::RefData *ref) + { + mLocalScripts.remove (ref); + } + Ptr World::getPtr (const std::string& name, bool activeOnly) { // the player is always in an active cell. diff --git a/apps/openmw/mwworld/worldimp.hpp b/apps/openmw/mwworld/worldimp.hpp index 7e89c1d87..905e6fd96 100644 --- a/apps/openmw/mwworld/worldimp.hpp +++ b/apps/openmw/mwworld/worldimp.hpp @@ -172,6 +172,9 @@ namespace MWWorld virtual std::vector getGlobals () const; virtual std::string getCurrentCellName () const; + + virtual void removeRefScript (MWWorld::RefData *ref); + //< Remove the script attached to ref from mLocalScripts virtual Ptr getPtr (const std::string& name, bool activeOnly); ///< Return a pointer to a liveCellRef with the given name. From 6fc64e8a4e9d374040f29343029ec197f5323cdd Mon Sep 17 00:00:00 2001 From: Tom Mason Date: Sun, 13 Jan 2013 19:49:56 +0000 Subject: [PATCH 05/38] scripts run for items added to containers, and scripted items in player inv handled correctly --- apps/openmw/mwworld/containerstore.cpp | 28 +++++++++++++++++++++++++- apps/openmw/mwworld/containerstore.hpp | 1 + apps/openmw/mwworld/localscripts.cpp | 2 +- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwworld/containerstore.cpp b/apps/openmw/mwworld/containerstore.cpp index db4537daf..6884aa6c8 100644 --- a/apps/openmw/mwworld/containerstore.cpp +++ b/apps/openmw/mwworld/containerstore.cpp @@ -15,6 +15,8 @@ #include "manualref.hpp" #include "refdata.hpp" #include "class.hpp" +#include "localscripts.hpp" +#include "player.hpp" namespace { @@ -71,6 +73,30 @@ bool MWWorld::ContainerStore::stacks(const Ptr& ptr1, const Ptr& ptr2) } MWWorld::ContainerStoreIterator MWWorld::ContainerStore::add (const Ptr& ptr) +{ + MWWorld::ContainerStoreIterator it = realAdd(ptr); + MWWorld::Ptr item = *it; + + std::string script = MWWorld::Class::get(item).getScript(item); + if(script != "") + { + CellStore *cell; + + Ptr player = MWBase::Environment::get().getWorld ()->getPlayer().getPlayer(); + // Items in players inventory have cell set to 0, so their scripts will never be removed + if(&(MWWorld::Class::get (player).getContainerStore (player)) == this) + cell = 0; + else + cell = player.getCell(); + + item.mCell = cell; + MWBase::Environment::get().getWorld()->getLocalScripts().add(script, item); + } + + return it; +} + +MWWorld::ContainerStoreIterator MWWorld::ContainerStore::realAdd (const Ptr& ptr) { int type = getType(ptr); @@ -162,7 +188,7 @@ void MWWorld::ContainerStore::fill (const ESM::InventoryList& items, const MWWor } ref.getPtr().getRefData().setCount (std::abs(iter->mCount)); /// \todo implement item restocking (indicated by negative count) - add (ref.getPtr()); + realAdd (ref.getPtr()); } flagAsModified(); diff --git a/apps/openmw/mwworld/containerstore.hpp b/apps/openmw/mwworld/containerstore.hpp index 1297fc53c..e274ee130 100644 --- a/apps/openmw/mwworld/containerstore.hpp +++ b/apps/openmw/mwworld/containerstore.hpp @@ -52,6 +52,7 @@ namespace MWWorld int mStateId; mutable float mCachedWeight; mutable bool mWeightUpToDate; + ContainerStoreIterator realAdd (const Ptr& ptr); public: diff --git a/apps/openmw/mwworld/localscripts.cpp b/apps/openmw/mwworld/localscripts.cpp index 2fa0d4086..5ec5ca9b5 100644 --- a/apps/openmw/mwworld/localscripts.cpp +++ b/apps/openmw/mwworld/localscripts.cpp @@ -134,7 +134,7 @@ void MWWorld::LocalScripts::clearCell (Ptr::CellStore *cell) while (iter!=mScripts.end()) { - if (iter->second.getCell()==cell) + if (iter->second.mCell==cell) { if (iter==mIter) ++mIter; From aa514a53d998462695256aa121e77df0a03cc67e Mon Sep 17 00:00:00 2001 From: lazydev Date: Tue, 15 Jan 2013 02:22:14 +0400 Subject: [PATCH 06/38] Console font change to provide possibility to show cyrillic symbols --- Bitstream Vera License.txt | 123 ------------------------------ Dejavu_lgc_font_license.txt | 99 ++++++++++++++++++++++++ credits.txt | 4 +- files/mygui/CMakeLists.txt | 2 +- files/mygui/DejaVuLGCSansMono.ttf | Bin 0 -> 285304 bytes files/mygui/VeraMono.ttf | Bin 49224 -> 0 bytes files/mygui/openmw_font.xml | 2 +- 7 files changed, 103 insertions(+), 127 deletions(-) delete mode 100644 Bitstream Vera License.txt create mode 100644 Dejavu_lgc_font_license.txt create mode 100644 files/mygui/DejaVuLGCSansMono.ttf delete mode 100644 files/mygui/VeraMono.ttf diff --git a/Bitstream Vera License.txt b/Bitstream Vera License.txt deleted file mode 100644 index 2b37cc1df..000000000 --- a/Bitstream Vera License.txt +++ /dev/null @@ -1,123 +0,0 @@ -Bitstream Vera Fonts Copyright - -The fonts have a generous copyright, allowing derivative works (as -long as "Bitstream" or "Vera" are not in the names), and full -redistribution (so long as they are not *sold* by themselves). They -can be be bundled, redistributed and sold with any software. - -The fonts are distributed under the following copyright: - -Copyright -========= - -Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream -Vera is a trademark of Bitstream, Inc. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of the fonts accompanying this license ("Fonts") and associated -documentation files (the "Font Software"), to reproduce and distribute -the Font Software, including without limitation the rights to use, -copy, merge, publish, distribute, and/or sell copies of the Font -Software, and to permit persons to whom the Font Software is furnished -to do so, subject to the following conditions: - -The above copyright and trademark notices and this permission notice -shall be included in all copies of one or more of the Font Software -typefaces. - -The Font Software may be modified, altered, or added to, and in -particular the designs of glyphs or characters in the Fonts may be -modified and additional glyphs or characters may be added to the -Fonts, only if the fonts are renamed to names not containing either -the words "Bitstream" or the word "Vera". - -This License becomes null and void to the extent applicable to Fonts -or Font Software that has been modified and is distributed under the -"Bitstream Vera" names. - -The Font Software may be sold as part of a larger software package but -no copy of one or more of the Font Software typefaces may be sold by -itself. - -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL -BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, -OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT -SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. - -Except as contained in this notice, the names of Gnome, the Gnome -Foundation, and Bitstream Inc., shall not be used in advertising or -otherwise to promote the sale, use or other dealings in this Font -Software without prior written authorization from the Gnome Foundation -or Bitstream Inc., respectively. For further information, contact: -fonts at gnome dot org. - -Copyright FAQ -============= - - 1. I don't understand the resale restriction... What gives? - - Bitstream is giving away these fonts, but wishes to ensure its - competitors can't just drop the fonts as is into a font sale system - and sell them as is. It seems fair that if Bitstream can't make money - from the Bitstream Vera fonts, their competitors should not be able to - do so either. You can sell the fonts as part of any software package, - however. - - 2. I want to package these fonts separately for distribution and - sale as part of a larger software package or system. Can I do so? - - Yes. A RPM or Debian package is a "larger software package" to begin - with, and you aren't selling them independently by themselves. - See 1. above. - - 3. Are derivative works allowed? - Yes! - - 4. Can I change or add to the font(s)? - Yes, but you must change the name(s) of the font(s). - - 5. Under what terms are derivative works allowed? - - You must change the name(s) of the fonts. This is to ensure the - quality of the fonts, both to protect Bitstream and Gnome. We want to - ensure that if an application has opened a font specifically of these - names, it gets what it expects (though of course, using fontconfig, - substitutions could still could have occurred during font - opening). You must include the Bitstream copyright. Additional - copyrights can be added, as per copyright law. Happy Font Hacking! - - 6. If I have improvements for Bitstream Vera, is it possible they might get - adopted in future versions? - - Yes. The contract between the Gnome Foundation and Bitstream has - provisions for working with Bitstream to ensure quality additions to - the Bitstream Vera font family. Please contact us if you have such - additions. Note, that in general, we will want such additions for the - entire family, not just a single font, and that you'll have to keep - both Gnome and Jim Lyles, Vera's designer, happy! To make sense to add - glyphs to the font, they must be stylistically in keeping with Vera's - design. Vera cannot become a "ransom note" font. Jim Lyles will be - providing a document describing the design elements used in Vera, as a - guide and aid for people interested in contributing to Vera. - - 7. I want to sell a software package that uses these fonts: Can I do so? - - Sure. Bundle the fonts with your software and sell your software - with the fonts. That is the intent of the copyright. - - 8. If applications have built the names "Bitstream Vera" into them, - can I override this somehow to use fonts of my choosing? - - This depends on exact details of the software. Most open source - systems and software (e.g., Gnome, KDE, etc.) are now converting to - use fontconfig (see www.fontconfig.org) to handle font configuration, - selection and substitution; it has provisions for overriding font - names and subsituting alternatives. An example is provided by the - supplied local.conf file, which chooses the family Bitstream Vera for - "sans", "serif" and "monospace". Other software (e.g., the XFree86 - core server) has other mechanisms for font substitution. diff --git a/Dejavu_lgc_font_license.txt b/Dejavu_lgc_font_license.txt new file mode 100644 index 000000000..254e2cc42 --- /dev/null +++ b/Dejavu_lgc_font_license.txt @@ -0,0 +1,99 @@ +Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. +Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below) + +Bitstream Vera Fonts Copyright +------------------------------ + +Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is +a trademark of Bitstream, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of the fonts accompanying this license ("Fonts") and associated +documentation files (the "Font Software"), to reproduce and distribute the +Font Software, including without limitation the rights to use, copy, merge, +publish, distribute, and/or sell copies of the Font Software, and to permit +persons to whom the Font Software is furnished to do so, subject to the +following conditions: + +The above copyright and trademark notices and this permission notice shall +be included in all copies of one or more of the Font Software typefaces. + +The Font Software may be modified, altered, or added to, and in particular +the designs of glyphs or characters in the Fonts may be modified and +additional glyphs or characters may be added to the Fonts, only if the fonts +are renamed to names not containing either the words "Bitstream" or the word +"Vera". + +This License becomes null and void to the extent applicable to Fonts or Font +Software that has been modified and is distributed under the "Bitstream +Vera" names. + +The Font Software may be sold as part of a larger software package but no +copy of one or more of the Font Software typefaces may be sold by itself. + +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, +TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME +FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING +ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE +FONT SOFTWARE. + +Except as contained in this notice, the names of Gnome, the Gnome +Foundation, and Bitstream Inc., shall not be used in advertising or +otherwise to promote the sale, use or other dealings in this Font Software +without prior written authorization from the Gnome Foundation or Bitstream +Inc., respectively. For further information, contact: fonts at gnome dot +org. + +Arev Fonts Copyright +------------------------------ + +Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the fonts accompanying this license ("Fonts") and +associated documentation files (the "Font Software"), to reproduce +and distribute the modifications to the Bitstream Vera Font Software, +including without limitation the rights to use, copy, merge, publish, +distribute, and/or sell copies of the Font Software, and to permit +persons to whom the Font Software is furnished to do so, subject to +the following conditions: + +The above copyright and trademark notices and this permission notice +shall be included in all copies of one or more of the Font Software +typefaces. + +The Font Software may be modified, altered, or added to, and in +particular the designs of glyphs or characters in the Fonts may be +modified and additional glyphs or characters may be added to the +Fonts, only if the fonts are renamed to names not containing either +the words "Tavmjong Bah" or the word "Arev". + +This License becomes null and void to the extent applicable to Fonts +or Font Software that has been modified and is distributed under the +"Tavmjong Bah Arev" names. + +The Font Software may be sold as part of a larger software package but +no copy of one or more of the Font Software typefaces may be sold by +itself. + +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL +TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + +Except as contained in this notice, the name of Tavmjong Bah shall not +be used in advertising or otherwise to promote the sale, use or other +dealings in this Font Software without prior written authorization +from Tavmjong Bah. For further information, contact: tavmjong @ free +. fr. + +$Id: LICENSE 2133 2007-11-28 02:46:28Z lechimp $ diff --git a/credits.txt b/credits.txt index e1905c88b..878cbf915 100644 --- a/credits.txt +++ b/credits.txt @@ -118,5 +118,5 @@ for the open-source EB Garamond fontface. Thanks to Dongle, for his Daedric fontface, see Daedric Font License.txt for his license terms. -Thanks to Bitstream Inc. -for their Bitstream Vera fontface, see Bitstream Vera License.txt for their license terms. +Thanks to DejaVu team, +for their DejaVuLGCSansMono fontface, see Dejavu_lgc_font_license.txt for their license terms. diff --git a/files/mygui/CMakeLists.txt b/files/mygui/CMakeLists.txt index 871be93d1..e7e5b695e 100644 --- a/files/mygui/CMakeLists.txt +++ b/files/mygui/CMakeLists.txt @@ -80,7 +80,7 @@ set(MYGUI_FILES openmw_travel_window.layout openmw_persuasion_dialog.layout smallbars.png - VeraMono.ttf + DejaVuLGCSansMono.ttf markers.png ) diff --git a/files/mygui/DejaVuLGCSansMono.ttf b/files/mygui/DejaVuLGCSansMono.ttf new file mode 100644 index 0000000000000000000000000000000000000000..80c45b73e9d1d8990a842ca3688579a403556bce GIT binary patch literal 285304 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%0AN*c~gCA(Zc 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 z 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

uYxJ5{X7bTeTCsDbrNs8` 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 XH2;!U?0EYBKmT3y|9Drv@uGhLW8jS} literal 0 HcmV?d00001 diff --git a/files/mygui/VeraMono.ttf b/files/mygui/VeraMono.ttf deleted file mode 100644 index 139f0b4311ad2e0369a347b3be6c46e6c2b730d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49224 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 diff --git a/files/mygui/openmw_font.xml b/files/mygui/openmw_font.xml index cb5dd648f..0383c9942 100644 --- a/files/mygui/openmw_font.xml +++ b/files/mygui/openmw_font.xml @@ -35,7 +35,7 @@ - + From f1f9173f2430167024fe93909809987a98cda7e7 Mon Sep 17 00:00:00 2001 From: Emanuel Guevel Date: Tue, 15 Jan 2013 00:53:32 +0100 Subject: [PATCH 07/38] Prevent closing dialogue window when an answer is expected --- apps/openmw/mwdialogue/dialoguemanagerimp.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/openmw/mwdialogue/dialoguemanagerimp.cpp b/apps/openmw/mwdialogue/dialoguemanagerimp.cpp index f9d8c3459..8692573b4 100644 --- a/apps/openmw/mwdialogue/dialoguemanagerimp.cpp +++ b/apps/openmw/mwdialogue/dialoguemanagerimp.cpp @@ -381,6 +381,10 @@ namespace MWDialogue void DialogueManager::goodbyeSelected() { + // Do not close the dialogue window if the player has to answer a question + if (mIsInChoice) + return; + MWBase::Environment::get().getWindowManager()->removeGuiMode(MWGui::GM_Dialogue); // Apply disposition change to NPC's base disposition From 82287445af3d8667fe68e94e1e709becff02d947 Mon Sep 17 00:00:00 2001 From: Emanuel Guevel Date: Tue, 15 Jan 2013 00:59:48 +0100 Subject: [PATCH 08/38] DialogueWindow: do not execute onFrame() when not visible --- apps/openmw/mwgui/dialogue.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwgui/dialogue.cpp b/apps/openmw/mwgui/dialogue.cpp index f62bf2a05..c7918ceb7 100644 --- a/apps/openmw/mwgui/dialogue.cpp +++ b/apps/openmw/mwgui/dialogue.cpp @@ -490,7 +490,7 @@ void DialogueWindow::onReferenceUnavailable() void DialogueWindow::onFrame() { - if(mEnabled && mPtr.getTypeName() == typeid(ESM::NPC).name()) + if(mMainWidget->getVisible() && mEnabled && mPtr.getTypeName() == typeid(ESM::NPC).name()) { int disp = std::max(0, std::min(100, MWBase::Environment::get().getMechanicsManager()->getDerivedDisposition(mPtr) From 30534404621cdce5ee9c04e027345af2a4a310ae Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Tue, 15 Jan 2013 12:40:44 +0100 Subject: [PATCH 09/38] Issue #539: fixed AiWander --- apps/openmw/mwscript/aiextensions.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwscript/aiextensions.cpp b/apps/openmw/mwscript/aiextensions.cpp index 35243533c..8402a5b4c 100644 --- a/apps/openmw/mwscript/aiextensions.cpp +++ b/apps/openmw/mwscript/aiextensions.cpp @@ -181,10 +181,14 @@ namespace MWScript runtime.pop(); std::vector idleList; - for (unsigned int i=0; i Date: Tue, 15 Jan 2013 11:10:41 -0800 Subject: [PATCH 10/38] Use typedefs for some maps and some cleanup --- apps/openmw/mwrender/actors.cpp | 124 ++++++++++++++++++-------------- apps/openmw/mwrender/actors.hpp | 18 +++-- 2 files changed, 80 insertions(+), 62 deletions(-) diff --git a/apps/openmw/mwrender/actors.cpp b/apps/openmw/mwrender/actors.cpp index 05bb030d7..92f5cbe28 100644 --- a/apps/openmw/mwrender/actors.cpp +++ b/apps/openmw/mwrender/actors.cpp @@ -6,41 +6,42 @@ #include "renderconst.hpp" -using namespace Ogre; -using namespace MWRender; -using namespace NifOgre; +namespace MWRender +{ Actors::~Actors(){ - std::map::iterator it = mAllActors.begin(); - for (; it != mAllActors.end(); ++it) { + PtrAnimationMap::iterator it = mAllActors.begin(); + for(;it != mAllActors.end();++it) + { delete it->second; it->second = NULL; } } -void Actors::setMwRoot(Ogre::SceneNode* root){ - mMwRoot = root; -} -void Actors::insertNPC(const MWWorld::Ptr& ptr, MWWorld::InventoryStore& inv){ +void Actors::setMwRoot(Ogre::SceneNode* root) +{ mMwRoot = root; } +void Actors::insertNPC(const MWWorld::Ptr &ptr, MWWorld::InventoryStore &inv) +{ insertBegin(ptr, true, true); NpcAnimation* anim = new MWRender::NpcAnimation(ptr, ptr.getRefData ().getBaseNode (), inv, RV_Actors); mAllActors[ptr] = anim; } -void Actors::insertBegin (const MWWorld::Ptr& ptr, bool enabled, bool static_){ + +void Actors::insertBegin (const MWWorld::Ptr& ptr, bool enabled, bool static_) +{ Ogre::SceneNode* cellnode; - if(mCellSceneNodes.find(ptr.getCell()) == mCellSceneNodes.end()) + CellSceneNodeMap::const_iterator celliter = mCellSceneNodes.find(ptr.getCell()); + if(celliter != mCellSceneNodes.end()) + cellnode = celliter->second; + else { //Create the scenenode and put it in the map cellnode = mMwRoot->createChildSceneNode(); mCellSceneNodes[ptr.getCell()] = cellnode; } - else - { - cellnode = mCellSceneNodes[ptr.getCell()]; - } Ogre::SceneNode* insert = cellnode->createChildSceneNode(); const float *f = ptr.getRefData().getPosition().pos; @@ -51,13 +52,13 @@ void Actors::insertBegin (const MWWorld::Ptr& ptr, bool enabled, bool static_){ f = ptr.getCellRef().mPos.rot; // Rotate around X axis - Quaternion xr(Radian(-f[0]), Vector3::UNIT_X); + Ogre::Quaternion xr(Ogre::Radian(-f[0]), Ogre::Vector3::UNIT_X); // Rotate around Y axis - Quaternion yr(Radian(-f[1]), Vector3::UNIT_Y); + Ogre::Quaternion yr(Ogre::Radian(-f[1]), Ogre::Vector3::UNIT_Y); // Rotate around Z axis - Quaternion zr(Radian(-f[2]), Vector3::UNIT_Z); + Ogre::Quaternion zr(Ogre::Radian(-f[2]), Ogre::Vector3::UNIT_Z); // Rotates first around z, then y, then x insert->setOrientation(xr*yr*zr); @@ -71,30 +72,30 @@ void Actors::insertCreature (const MWWorld::Ptr& ptr){ insertBegin(ptr, true, true); CreatureAnimation* anim = new MWRender::CreatureAnimation(ptr); - //mAllActors.insert(std::pair(ptr,anim)); + delete mAllActors[ptr]; mAllActors[ptr] = anim; - //mAllActors.push_back(&anim);*/ } bool Actors::deleteObject (const MWWorld::Ptr& ptr) { - delete mAllActors[ptr]; - mAllActors.erase(ptr); - if (Ogre::SceneNode *base = ptr.getRefData().getBaseNode()) - { + delete mAllActors[ptr]; + mAllActors.erase(ptr); + if(Ogre::SceneNode *base=ptr.getRefData().getBaseNode()) + { Ogre::SceneNode *parent = base->getParentSceneNode(); - - for (std::map::const_iterator iter ( - mCellSceneNodes.begin()); iter!=mCellSceneNodes.end(); ++iter) - if (iter->second==parent) + CellSceneNodeMap::const_iterator iter(mCellSceneNodes.begin()); + for(;iter != mCellSceneNodes.end();++iter) + { + if(iter->second == parent) { base->removeAndDestroyAllChildren(); mRend.getScene()->destroySceneNode (base); ptr.getRefData().setBaseNode (0); return true; } + } return false; } @@ -102,57 +103,70 @@ bool Actors::deleteObject (const MWWorld::Ptr& ptr) return true; } -void Actors::removeCell(MWWorld::Ptr::CellStore* store){ - if(mCellSceneNodes.find(store) != mCellSceneNodes.end()) - { - Ogre::SceneNode* base = mCellSceneNodes[store]; - base->removeAndDestroyAllChildren(); - mCellSceneNodes.erase(store); - mRend.getScene()->destroySceneNode(base); - base = 0; - } - for(std::map::iterator iter = mAllActors.begin(); iter != mAllActors.end(); ) +void Actors::removeCell(MWWorld::Ptr::CellStore* store) +{ + for(PtrAnimationMap::iterator iter = mAllActors.begin();iter != mAllActors.end();) { - if(iter->first.getCell() == store){ + if(iter->first.getCell() == store) + { delete iter->second; mAllActors.erase(iter++); } else ++iter; } + CellSceneNodeMap::iterator celliter = mCellSceneNodes.find(store); + if(celliter != mCellSceneNodes.end()) + { + Ogre::SceneNode *base = celliter->second; + base->removeAndDestroyAllChildren(); + mRend.getScene()->destroySceneNode(base); + mCellSceneNodes.erase(celliter); + } } -void Actors::playAnimationGroup (const MWWorld::Ptr& ptr, const std::string& groupName, int mode, int number){ - if(mAllActors.find(ptr) != mAllActors.end()) - mAllActors[ptr]->playGroup(groupName, mode, number); +void Actors::playAnimationGroup (const MWWorld::Ptr& ptr, const std::string& groupName, int mode, int number) +{ + PtrAnimationMap::const_iterator iter = mAllActors.find(ptr); + if(iter != mAllActors.end()) + iter->second->playGroup(groupName, mode, number); } -void Actors::skipAnimation (const MWWorld::Ptr& ptr){ - if(mAllActors.find(ptr) != mAllActors.end()) - mAllActors[ptr]->skipAnim(); +void Actors::skipAnimation (const MWWorld::Ptr& ptr) +{ + PtrAnimationMap::const_iterator iter = mAllActors.find(ptr); + if(iter != mAllActors.end()) + iter->second->skipAnim(); } -void Actors::update (float duration){ - for(std::map::iterator iter = mAllActors.begin(); iter != mAllActors.end(); iter++) +void Actors::update (float duration) +{ + for(PtrAnimationMap::const_iterator iter = mAllActors.begin();iter != mAllActors.end();iter++) iter->second->runAnimation(duration); } -void -Actors::updateObjectCell(const MWWorld::Ptr &ptr) +void Actors::updateObjectCell(const MWWorld::Ptr &ptr) { Ogre::SceneNode *node; MWWorld::CellStore *newCell = ptr.getCell(); - if(mCellSceneNodes.find(newCell) == mCellSceneNodes.end()) { + CellSceneNodeMap::const_iterator celliter = mCellSceneNodes.find(newCell); + if(celliter != mCellSceneNodes.end()) + node = celliter->second; + else + { node = mMwRoot->createChildSceneNode(); mCellSceneNodes[newCell] = node; - } else { - node = mCellSceneNodes[newCell]; } node->addChild(ptr.getRefData().getBaseNode()); - if (mAllActors.find(ptr) != mAllActors.end()) { + + PtrAnimationMap::iterator iter = mAllActors.find(ptr); + if(iter != mAllActors.end()) + { /// \note Update key (Ptr's are compared only with refdata so mCell /// on key is outdated), maybe redundant - Animation *anim = mAllActors[ptr]; - mAllActors.erase(ptr); + Animation *anim = iter->second; + mAllActors.erase(iter); mAllActors[ptr] = anim; } } + +} diff --git a/apps/openmw/mwrender/actors.hpp b/apps/openmw/mwrender/actors.hpp index 073c5d51f..efb6247e4 100644 --- a/apps/openmw/mwrender/actors.hpp +++ b/apps/openmw/mwrender/actors.hpp @@ -10,18 +10,22 @@ namespace MWWorld class CellStore; } -namespace MWRender{ - class Actors{ +namespace MWRender +{ + class Actors + { + typedef std::map CellSceneNodeMap; + typedef std::map PtrAnimationMap; + OEngine::Render::OgreRenderer &mRend; - std::map mCellSceneNodes; Ogre::SceneNode* mMwRoot; - std::map mAllActors; - + CellSceneNodeMap mCellSceneNodes; + PtrAnimationMap mAllActors; - - public: + public: Actors(OEngine::Render::OgreRenderer& _rend): mRend(_rend) {} ~Actors(); + void setMwRoot(Ogre::SceneNode* root); void insertBegin (const MWWorld::Ptr& ptr, bool enabled, bool static_); void insertCreature (const MWWorld::Ptr& ptr); From 8a073c113e277c65fc92598b451de6d336c95244 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Tue, 15 Jan 2013 12:07:15 -0800 Subject: [PATCH 11/38] Use const references where appropriate --- apps/openmw/mwbase/soundmanager.hpp | 14 +++++++------- apps/openmw/mwsound/soundmanagerimp.cpp | 16 ++++++++-------- apps/openmw/mwsound/soundmanagerimp.hpp | 18 ++++++++---------- 3 files changed, 23 insertions(+), 25 deletions(-) diff --git a/apps/openmw/mwbase/soundmanager.hpp b/apps/openmw/mwbase/soundmanager.hpp index 0c706ab49..5d396fac0 100644 --- a/apps/openmw/mwbase/soundmanager.hpp +++ b/apps/openmw/mwbase/soundmanager.hpp @@ -84,7 +84,7 @@ namespace MWBase ///< Start playing music from the selected folder /// \param name of the folder that contains the playlist - virtual void say(MWWorld::Ptr reference, const std::string& filename) = 0; + virtual void say(const MWWorld::Ptr &reference, const std::string& filename) = 0; ///< Make an actor say some text. /// \param filename name of a sound file in "Sound/" in the data directory. @@ -92,10 +92,10 @@ namespace MWBase ///< Say some text, without an actor ref /// \param filename name of a sound file in "Sound/" in the data directory. - virtual bool sayDone(MWWorld::Ptr reference=MWWorld::Ptr()) const = 0; + virtual bool sayDone(const MWWorld::Ptr &reference=MWWorld::Ptr()) const = 0; ///< Is actor not speaking? - virtual void stopSay(MWWorld::Ptr reference=MWWorld::Ptr()) = 0; + virtual void stopSay(const MWWorld::Ptr &reference=MWWorld::Ptr()) = 0; ///< Stop an actor speaking virtual SoundPtr playTrack(const MWSound::DecoderPtr& decoder, PlayType type) = 0; @@ -105,14 +105,14 @@ namespace MWBase PlayMode mode=Play_Normal) = 0; ///< Play a sound, independently of 3D-position - virtual SoundPtr playSound3D(MWWorld::Ptr reference, const std::string& soundId, + virtual SoundPtr playSound3D(const MWWorld::Ptr &reference, const std::string& soundId, float volume, float pitch, PlayMode mode=Play_Normal) = 0; ///< Play a sound from an object - virtual void stopSound3D(MWWorld::Ptr reference, const std::string& soundId) = 0; + virtual void stopSound3D(const MWWorld::Ptr &reference, const std::string& soundId) = 0; ///< Stop the given object from playing the given sound, - virtual void stopSound3D(MWWorld::Ptr reference) = 0; + virtual void stopSound3D(const MWWorld::Ptr &reference) = 0; ///< Stop the given object from playing all sounds. virtual void stopSound(const MWWorld::CellStore *cell) = 0; @@ -121,7 +121,7 @@ namespace MWBase virtual void stopSound(const std::string& soundId) = 0; ///< Stop a non-3d looping sound - virtual bool getSoundPlaying(MWWorld::Ptr reference, const std::string& soundId) const = 0; + virtual bool getSoundPlaying(const MWWorld::Ptr &reference, const std::string& soundId) const = 0; ///< Is the given sound currently playing on the given object? virtual void pauseSounds(int types=Play_TypeMask) = 0; diff --git a/apps/openmw/mwsound/soundmanagerimp.cpp b/apps/openmw/mwsound/soundmanagerimp.cpp index 8a69fc96b..c50290680 100644 --- a/apps/openmw/mwsound/soundmanagerimp.cpp +++ b/apps/openmw/mwsound/soundmanagerimp.cpp @@ -160,7 +160,7 @@ namespace MWSound return volume; } - bool SoundManager::isPlaying(MWWorld::Ptr ptr, const std::string &id) const + bool SoundManager::isPlaying(const MWWorld::Ptr &ptr, const std::string &id) const { SoundMap::const_iterator snditer = mActiveSounds.begin(); while(snditer != mActiveSounds.end()) @@ -229,7 +229,7 @@ namespace MWSound startRandomTitle(); } - void SoundManager::say(MWWorld::Ptr ptr, const std::string& filename) + void SoundManager::say(const MWWorld::Ptr &ptr, const std::string& filename) { if(!mOutput->isInitialized()) return; @@ -269,12 +269,12 @@ namespace MWSound } } - bool SoundManager::sayDone(MWWorld::Ptr ptr) const + bool SoundManager::sayDone(const MWWorld::Ptr &ptr) const { return !isPlaying(ptr, "_say_sound"); } - void SoundManager::stopSay(MWWorld::Ptr ptr) + void SoundManager::stopSay(const MWWorld::Ptr &ptr) { SoundMap::iterator snditer = mActiveSounds.begin(); while(snditer != mActiveSounds.end()) @@ -328,7 +328,7 @@ namespace MWSound return sound; } - MWBase::SoundPtr SoundManager::playSound3D(MWWorld::Ptr ptr, const std::string& soundId, + MWBase::SoundPtr SoundManager::playSound3D(const MWWorld::Ptr &ptr, const std::string& soundId, float volume, float pitch, PlayMode mode) { MWBase::SoundPtr sound; @@ -356,7 +356,7 @@ namespace MWSound return sound; } - void SoundManager::stopSound3D(MWWorld::Ptr ptr, const std::string& soundId) + void SoundManager::stopSound3D(const MWWorld::Ptr &ptr, const std::string& soundId) { SoundMap::iterator snditer = mActiveSounds.begin(); while(snditer != mActiveSounds.end()) @@ -371,7 +371,7 @@ namespace MWSound } } - void SoundManager::stopSound3D(MWWorld::Ptr ptr) + void SoundManager::stopSound3D(const MWWorld::Ptr &ptr) { SoundMap::iterator snditer = mActiveSounds.begin(); while(snditer != mActiveSounds.end()) @@ -418,7 +418,7 @@ namespace MWSound } } - bool SoundManager::getSoundPlaying(MWWorld::Ptr ptr, const std::string& soundId) const + bool SoundManager::getSoundPlaying(const MWWorld::Ptr &ptr, const std::string& soundId) const { return isPlaying(ptr, soundId); } diff --git a/apps/openmw/mwsound/soundmanagerimp.hpp b/apps/openmw/mwsound/soundmanagerimp.hpp index b475449d9..2af26d3db 100644 --- a/apps/openmw/mwsound/soundmanagerimp.hpp +++ b/apps/openmw/mwsound/soundmanagerimp.hpp @@ -14,8 +14,6 @@ #include "../mwbase/soundmanager.hpp" -#include "../mwworld/ptr.hpp" - namespace MWSound { class Sound_Output; @@ -57,7 +55,7 @@ namespace MWSound std::string lookup(const std::string &soundId, float &volume, float &min, float &max); void streamMusicFull(const std::string& filename); - bool isPlaying(MWWorld::Ptr ptr, const std::string &id) const; + bool isPlaying(const MWWorld::Ptr &ptr, const std::string &id) const; void updateSounds(float duration); void updateRegionSound(float duration); @@ -93,7 +91,7 @@ namespace MWSound ///< Start playing music from the selected folder /// \param name of the folder that contains the playlist - virtual void say(MWWorld::Ptr reference, const std::string& filename); + virtual void say(const MWWorld::Ptr &reference, const std::string& filename); ///< Make an actor say some text. /// \param filename name of a sound file in "Sound/" in the data directory. @@ -101,10 +99,10 @@ namespace MWSound ///< Say some text, without an actor ref /// \param filename name of a sound file in "Sound/" in the data directory. - virtual bool sayDone(MWWorld::Ptr reference=MWWorld::Ptr()) const; + virtual bool sayDone(const MWWorld::Ptr &reference=MWWorld::Ptr()) const; ///< Is actor not speaking? - virtual void stopSay(MWWorld::Ptr reference=MWWorld::Ptr()); + virtual void stopSay(const MWWorld::Ptr &reference=MWWorld::Ptr()); ///< Stop an actor speaking virtual MWBase::SoundPtr playTrack(const DecoderPtr& decoder, PlayType type); @@ -113,14 +111,14 @@ namespace MWSound virtual MWBase::SoundPtr playSound(const std::string& soundId, float volume, float pitch, PlayMode mode=Play_Normal); ///< Play a sound, independently of 3D-position - virtual MWBase::SoundPtr playSound3D(MWWorld::Ptr reference, const std::string& soundId, + virtual MWBase::SoundPtr playSound3D(const MWWorld::Ptr &reference, const std::string& soundId, float volume, float pitch, PlayMode mode=Play_Normal); ///< Play a sound from an object - virtual void stopSound3D(MWWorld::Ptr reference, const std::string& soundId); + virtual void stopSound3D(const MWWorld::Ptr &reference, const std::string& soundId); ///< Stop the given object from playing the given sound, - virtual void stopSound3D(MWWorld::Ptr reference); + virtual void stopSound3D(const MWWorld::Ptr &reference); ///< Stop the given object from playing all sounds. virtual void stopSound(const MWWorld::CellStore *cell); @@ -129,7 +127,7 @@ namespace MWSound virtual void stopSound(const std::string& soundId); ///< Stop a non-3d looping sound - virtual bool getSoundPlaying(MWWorld::Ptr reference, const std::string& soundId) const; + virtual bool getSoundPlaying(const MWWorld::Ptr &reference, const std::string& soundId) const; ///< Is the given sound currently playing on the given object? virtual void pauseSounds(int types=Play_TypeMask); From 9e00c6694fac95cf66e360ee3905abd5e59c1814 Mon Sep 17 00:00:00 2001 From: Emanuel Guevel Date: Tue, 15 Jan 2013 21:40:44 +0100 Subject: [PATCH 12/38] Allow only ID filtered topics for dialogue with creatures --- apps/openmw/mwdialogue/filter.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwdialogue/filter.cpp b/apps/openmw/mwdialogue/filter.cpp index 7c590c8ef..99be5554a 100644 --- a/apps/openmw/mwdialogue/filter.cpp +++ b/apps/openmw/mwdialogue/filter.cpp @@ -19,12 +19,19 @@ bool MWDialogue::Filter::testActor (const ESM::DialInfo& info) const { + bool isCreature = (mActor.getTypeName() != typeid (ESM::NPC).name()); + // actor id if (!info.mActor.empty()) + { if ( Misc::StringUtils::lowerCase (info.mActor)!=MWWorld::Class::get (mActor).getId (mActor)) return false; - - bool isCreature = (mActor.getTypeName() != typeid (ESM::NPC).name()); + } + else if (isCreature) + { + // Creatures must not have topics aside of those specific to their id + return false; + } // NPC race if (!info.mRace.empty()) From e5f040a06f1ec85beb05a547cae8fce1fa4b3815 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Tue, 15 Jan 2013 14:10:52 -0800 Subject: [PATCH 13/38] Improve filename pattern matching --- components/bsa/bsa_archive.cpp | 293 +++++++++++---------------------- 1 file changed, 97 insertions(+), 196 deletions(-) diff --git a/components/bsa/bsa_archive.cpp b/components/bsa/bsa_archive.cpp index 9913fb8aa..5274564a6 100644 --- a/components/bsa/bsa_archive.cpp +++ b/components/bsa/bsa_archive.cpp @@ -31,150 +31,30 @@ #include "../files/constrainedfiledatastream.hpp" -namespace -{ - using namespace Ogre; -using namespace Bsa; - -struct PathPatternMatcher -{ - PathPatternMatcher (char const * pattern) : pattern (pattern) - { - } - - bool operator () (char const * input) - { - char const * p = pattern; - char const * i = input; - while (*p && *i) - { - if (*p == '*') - { - ++p; - - while (*i && *i != *p && *i != '/' && *i != '\\') - ++i; - } - else - if (*p == '?') - { - if (*i == '/' || *i == '\\') - break; - - ++i, ++p; - } - if (*p == '/' || *p == '\\') - { - if (*i != '/' && *i != '\\') - break; - - ++i, ++p; - } - else - { - if (*i != *p) - break; - - ++i, ++p; - } - } - - return *p == 0 && *i == 0; - } - -private: - char const * pattern; -}; +static bool fsstrict = false; -struct FileNameGatherer +static char strict_normalize_char(char ch) { - StringVectorPtr ptr; - - FileNameGatherer (StringVectorPtr ptr) : ptr (ptr) - { - } - - void operator () (std::string const & filename) const - { - ptr->push_back (filename); - } -}; + return ch == '\\' ? '/' : ch; +} -struct FileInfoGatherer +static char nonstrict_normalize_char(char ch) { - Archive const * archive; - FileInfoListPtr ptr; - - FileInfoGatherer (Archive const * archive, FileInfoListPtr ptr) : - archive (archive), ptr (ptr) - { - } - - void operator () (std::string filename) const - { - FileInfo fi; - - std::size_t pt = filename.rfind ('/'); - if (pt == std::string::npos) - pt = 0; - - fi.archive = const_cast (archive); - fi.path = filename.substr (0, pt); - fi.filename = filename.substr (pt); - fi.compressedSize = fi.uncompressedSize = 0; - - ptr->push_back(fi); - } -}; + return ch == '\\' ? '/' : std::tolower(ch); +} -template -void matchFiles (bool recursive, std::string const & pattern, file_iterator begin, file_iterator end, filename_extractor filenameExtractor, match_handler matchHandler) +template +static std::string normalize_path(T1 begin, T2 end) { - if (recursive && pattern == "*") - { - for (file_iterator i = begin; i != end; ++i) - matchHandler (filenameExtractor (*i)); - } - else - { - PathPatternMatcher matcher (pattern.c_str ()); - - if (recursive) - { - for (file_iterator i = begin; i != end; ++i) - { - char const * filename = filenameExtractor (*i); - char const * matchable_part = filename; - - for (char const * j = matchable_part; *j; ++j) - { - if (*j == '/' || *j == '\\') - matchable_part = j + 1; - } - - if (matcher (matchable_part)) - matchHandler (filename); - } - } - else - { - for (file_iterator i = begin; i != end; ++i) - { - char const * filename = filenameExtractor (*i); - - if (matcher (filename)) - matchHandler (filename); - } - } - } + std::string normalized; + normalized.reserve(std::distance(begin, end)); + char (*normalize_char)(char) = fsstrict ? &strict_normalize_char : &nonstrict_normalize_char; + std::transform(begin, end, std::back_inserter(normalized), normalize_char); + return normalized; } - - -static bool fsstrict = false; - /// An OGRE Archive wrapping a BSAFile archive class DirArchive: public Ogre::Archive { @@ -182,37 +62,12 @@ class DirArchive: public Ogre::Archive index mIndex; - static char strict_normalize_char(char ch) - { - return ch == '\\' ? '/' : ch; - } - - static char nonstrict_normalize_char(char ch) - { - return ch == '\\' ? '/' : std::tolower (ch); - } - - static std::string normalize_path (std::string::const_iterator begin, std::string::const_iterator end) - { - std::string normalized; - normalized.reserve (end-begin); - char (*normalize_char) (char) = fsstrict ? &strict_normalize_char : &nonstrict_normalize_char; - std::transform (begin, end, std::back_inserter (normalized), normalize_char); - return normalized; - } - index::const_iterator lookup_filename (std::string const & filename) const { std::string normalized = normalize_path (filename.begin (), filename.end ()); - return mIndex.find (normalized); } - static char const * extractFilename (index::value_type const & entry) - { - return entry.first.c_str (); - } - public: DirArchive(const String& name) @@ -273,15 +128,20 @@ public: StringVectorPtr find(const String& pattern, bool recursive = true, bool dirs = false) { - std::string normalizedPattern = normalize_path (pattern.begin (), pattern.end ()); + std::string normalizedPattern = normalize_path(pattern.begin(), pattern.end()); StringVectorPtr ptr = StringVectorPtr(new StringVector()); - matchFiles (recursive, normalizedPattern, mIndex.begin (), mIndex.end (), extractFilename, FileNameGatherer (ptr)); + for(index::const_iterator iter = mIndex.begin();iter != mIndex.end();iter++) + { + if(Ogre::StringUtil::match(iter->first, normalizedPattern) || + (recursive && Ogre::StringUtil::match(iter->first, "*/"+normalizedPattern))) + ptr->push_back(iter->first); + } return ptr; } bool exists(const String& filename) { - return lookup_filename (filename) != mIndex.end (); + return lookup_filename(filename) != mIndex.end (); } time_t getModifiedTime(const String&) { return 0; } @@ -289,21 +149,44 @@ public: FileInfoListPtr findFileInfo(const String& pattern, bool recursive = true, bool dirs = false) const { + std::string normalizedPattern = normalize_path(pattern.begin(), pattern.end()); FileInfoListPtr ptr = FileInfoListPtr(new FileInfoList()); - FileInfoGatherer gatherer (this, ptr); - std::string normalizedPattern = normalize_path (pattern.begin (), pattern.end ()); + index::const_iterator i = mIndex.find(normalizedPattern); + if(i != mIndex.end()) + { + std::string::size_type pt = i->first.rfind('/'); + if(pt == std::string::npos) + pt = 0; - index::const_iterator i = mIndex.find (normalizedPattern); + FileInfo fi; + fi.archive = const_cast(this); + fi.path = i->first.substr(0, pt); + fi.filename = i->first.substr((i->first[pt]=='/') ? pt+1 : pt); + fi.compressedSize = fi.uncompressedSize = 0; - if (i != mIndex.end ()) - { - gatherer (i->first); + ptr->push_back(fi); } else { + for(index::const_iterator iter = mIndex.begin();iter != mIndex.end();iter++) + { + if(Ogre::StringUtil::match(iter->first, normalizedPattern) || + (recursive && Ogre::StringUtil::match(iter->first, "*/"+normalizedPattern))) + { + std::string::size_type pt = iter->first.rfind('/'); + if(pt == std::string::npos) + pt = 0; + + FileInfo fi; + fi.archive = const_cast(this); + fi.path = iter->first.substr(0, pt); + fi.filename = iter->first.substr((iter->first[pt]=='/') ? pt+1 : pt); + fi.compressedSize = fi.uncompressedSize = 0; - matchFiles (recursive, normalizedPattern, mIndex.begin (), mIndex.end (), extractFilename, gatherer); + ptr->push_back(fi); + } + } } return ptr; @@ -312,9 +195,9 @@ public: class BSAArchive : public Archive { - BSAFile arc; + Bsa::BSAFile arc; - static char const * extractFilename (BSAFile::FileStruct const & entry) + static const char *extractFilename(const Bsa::BSAFile::FileStruct &entry) { return entry.name; } @@ -330,13 +213,13 @@ public: void load() {} void unload() {} - DataStreamPtr open(const String& filename, bool recursive = true) const + DataStreamPtr open(const String& filename, bool readonly = true) const { // Get a non-const reference to arc. This is a hack and it's all // OGRE's fault. You should NOT expect an open() command not to // have any side effects on the archive, and hence this function // should not have been declared const in the first place. - BSAFile *narc = const_cast(&arc); + Bsa::BSAFile *narc = const_cast(&arc); // Open the file return narc->getFile(filename.c_str()); @@ -360,32 +243,51 @@ public: return findFileInfo ("*", recursive, dirs); } - // After load() is called, find("*") is called once. It doesn't seem - // to matter that we return an empty list, exists() gets called on - // the correct files anyway. - StringVectorPtr find(const String& pattern, bool recursive = true, - bool dirs = false) - { + StringVectorPtr find(const String& pattern, bool recursive = true, + bool dirs = false) + { + std::string normalizedPattern = normalize_path(pattern.begin(), pattern.end()); + const Bsa::BSAFile::FileList &filelist = arc.getList(); StringVectorPtr ptr = StringVectorPtr(new StringVector()); - matchFiles (recursive, pattern, arc.getList ().begin (), arc.getList ().end (), extractFilename, FileNameGatherer (ptr)); + for(Bsa::BSAFile::FileList::const_iterator iter = filelist.begin();iter != filelist.end();iter++) + { + std::string ent = normalize_path(iter->name, iter->name+std::strlen(iter->name)); + if(Ogre::StringUtil::match(ent, normalizedPattern) || + (recursive && Ogre::StringUtil::match(ent, "*/"+normalizedPattern))) + ptr->push_back(iter->name); + } return ptr; - } + } + + FileInfoListPtr findFileInfo(const String& pattern, bool recursive = true, + bool dirs = false) const + { + std::string normalizedPattern = normalize_path(pattern.begin(), pattern.end()); + FileInfoListPtr ptr = FileInfoListPtr(new FileInfoList()); + const Bsa::BSAFile::FileList &filelist = arc.getList(); - /* Gets called once for each of the ogre formats, *.program, - *.material etc. We ignore all these. + for(Bsa::BSAFile::FileList::const_iterator iter = filelist.begin();iter != filelist.end();iter++) + { + std::string ent = normalize_path(iter->name, iter->name+std::strlen(iter->name)); + if(Ogre::StringUtil::match(ent, normalizedPattern) || + (recursive && Ogre::StringUtil::match(ent, "*/"+normalizedPattern))) + { + std::string::size_type pt = ent.rfind('/'); + if(pt == std::string::npos) + pt = 0; - However, it's also called by MyGUI to find individual textures, - and we can't ignore these since many of the GUI textures are - located in BSAs. So instead we channel it through exists() and - set up a single-element result list if the file is found. - */ - FileInfoListPtr findFileInfo(const String& pattern, bool recursive = true, - bool dirs = false) const - { - FileInfoListPtr ptr = FileInfoListPtr(new FileInfoList()); - matchFiles (recursive, pattern, arc.getList ().begin (), arc.getList ().end (), extractFilename, FileInfoGatherer (this, ptr)); - return ptr; - } + FileInfo fi; + fi.archive = const_cast(this); + fi.path = std::string(iter->name, pt); + fi.filename = std::string(iter->name + ((ent[pt]=='/') ? pt+1 : pt)); + fi.compressedSize = fi.uncompressedSize = iter->fileSize; + + ptr->push_back(fi); + } + } + + return ptr; + } }; // An archive factory for BSA archives @@ -445,7 +347,6 @@ static void insertDirFactory() } } -} namespace Bsa { From 3220330ce0e0bcaf7899ed1492563330f79f0e91 Mon Sep 17 00:00:00 2001 From: Thoronador Date: Wed, 16 Jan 2013 04:19:16 +0100 Subject: [PATCH 14/38] fix spelling in comment --- apps/openmw/mwscript/userextensions.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwscript/userextensions.hpp b/apps/openmw/mwscript/userextensions.hpp index 3642eb5f4..4bc3b46ec 100644 --- a/apps/openmw/mwscript/userextensions.hpp +++ b/apps/openmw/mwscript/userextensions.hpp @@ -13,7 +13,7 @@ namespace Interpreter namespace MWScript { - /// \brief Temporaty script functionality limited to the console + /// \brief Temporary script functionality limited to the console namespace User { void registerExtensions (Compiler::Extensions& extensions); From 4c0e0fc279e833b5092caf3f7198dc6b50b20c7c Mon Sep 17 00:00:00 2001 From: pvdk Date: Thu, 17 Jan 2013 01:30:15 +0100 Subject: [PATCH 15/38] Modified license filename of the DejaVu font, more similar to the other one now --- Dejavu_lgc_font_license.txt => DejaVu Font License.txt | 0 credits.txt | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename Dejavu_lgc_font_license.txt => DejaVu Font License.txt (100%) diff --git a/Dejavu_lgc_font_license.txt b/DejaVu Font License.txt similarity index 100% rename from Dejavu_lgc_font_license.txt rename to DejaVu Font License.txt diff --git a/credits.txt b/credits.txt index 878cbf915..5d486c74e 100644 --- a/credits.txt +++ b/credits.txt @@ -119,4 +119,4 @@ Thanks to Dongle, for his Daedric fontface, see Daedric Font License.txt for his license terms. Thanks to DejaVu team, -for their DejaVuLGCSansMono fontface, see Dejavu_lgc_font_license.txt for their license terms. +for their DejaVuLGCSansMono fontface, see DejaVu Font License.txt for their license terms. From 4feaa66897e55ff9ffc2a011bceed5fee1156799 Mon Sep 17 00:00:00 2001 From: Emanuel Guevel Date: Thu, 17 Jan 2013 01:58:44 +0100 Subject: [PATCH 16/38] Do not open the dialogue window if no greeting is found --- apps/openmw/mwdialogue/dialoguemanagerimp.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/apps/openmw/mwdialogue/dialoguemanagerimp.cpp b/apps/openmw/mwdialogue/dialoguemanagerimp.cpp index f9d8c3459..535145a00 100644 --- a/apps/openmw/mwdialogue/dialoguemanagerimp.cpp +++ b/apps/openmw/mwdialogue/dialoguemanagerimp.cpp @@ -122,15 +122,9 @@ namespace MWDialogue MWMechanics::CreatureStats& creatureStats = MWWorld::Class::get (actor).getCreatureStats (actor); mTalkedTo = creatureStats.hasTalkedToPlayer(); - creatureStats.talkedToPlayer(); mActorKnownTopics.clear(); - //initialise the GUI - MWBase::Environment::get().getWindowManager()->pushGuiMode(MWGui::GM_Dialogue); - MWGui::DialogueWindow* win = MWBase::Environment::get().getWindowManager()->getDialogueWindow(); - win->startDialogue(actor, MWWorld::Class::get (actor).getName (actor)); - //setup the list of topics known by the actor. Topics who are also on the knownTopics list will be added to the GUI updateTopics(); @@ -146,6 +140,13 @@ namespace MWDialogue { if (const ESM::DialInfo *info = filter.search (*it)) { + //initialise the GUI + MWBase::Environment::get().getWindowManager()->pushGuiMode(MWGui::GM_Dialogue); + MWGui::DialogueWindow* win = MWBase::Environment::get().getWindowManager()->getDialogueWindow(); + win->startDialogue(actor, MWWorld::Class::get (actor).getName (actor)); + + creatureStats.talkedToPlayer(); + if (!info->mSound.empty()) { // TODO play sound From 2d96f528646e0799837ad29463b97c548f1d3df9 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Sat, 19 Jan 2013 14:29:14 +0100 Subject: [PATCH 17/38] select correct record when opening a dialogue sub view --- apps/opencs/view/world/dialoguesubview.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/opencs/view/world/dialoguesubview.cpp b/apps/opencs/view/world/dialoguesubview.cpp index 6138fd3f5..2bf6577b1 100644 --- a/apps/opencs/view/world/dialoguesubview.cpp +++ b/apps/opencs/view/world/dialoguesubview.cpp @@ -10,6 +10,7 @@ #include #include "../../model/world/columnbase.hpp" +#include "../../model/world/idtable.hpp" CSVWorld::DialogueSubView::DialogueSubView (const CSMWorld::UniversalId& id, CSMDoc::Document& document, bool createAndDelete) @@ -83,7 +84,8 @@ CSVWorld::DialogueSubView::DialogueSubView (const CSMWorld::UniversalId& id, CSM } } - mWidgetMapper->toFirst(); /// \todo use the correct row instead + mWidgetMapper->setCurrentModelIndex ( + dynamic_cast (*model).getModelIndex (id.getId(), 0)); } void CSVWorld::DialogueSubView::setEditLock (bool locked) From d6b956cdcf45715329d080deb0783c74244821dd Mon Sep 17 00:00:00 2001 From: Nathan Jeffords Date: Tue, 15 Jan 2013 08:27:58 -0800 Subject: [PATCH 18/38] fixed swapped day & month fields when created a stamped journal entry --- apps/openmw/mwdialogue/journalentry.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwdialogue/journalentry.cpp b/apps/openmw/mwdialogue/journalentry.cpp index e6141884c..5ffde5499 100644 --- a/apps/openmw/mwdialogue/journalentry.cpp +++ b/apps/openmw/mwdialogue/journalentry.cpp @@ -61,8 +61,8 @@ namespace MWDialogue StampedJournalEntry StampedJournalEntry::makeFromQuest (const std::string& topic, int index) { int day = MWBase::Environment::get().getWorld()->getGlobalVariable ("dayspassed").mLong; - int month = MWBase::Environment::get().getWorld()->getGlobalVariable ("day").mLong; - int dayOfMonth = MWBase::Environment::get().getWorld()->getGlobalVariable ("month").mLong; + int month = MWBase::Environment::get().getWorld()->getGlobalVariable ("month").mLong; + int dayOfMonth = MWBase::Environment::get().getWorld()->getGlobalVariable ("day").mLong; return StampedJournalEntry (topic, idFromIndex (topic, index), day, month, dayOfMonth); } From 528c3da6dae85a8c4c1903b16b3322742ca02292 Mon Sep 17 00:00:00 2001 From: Nathan Jeffords Date: Sat, 19 Jan 2013 16:20:22 -0800 Subject: [PATCH 19/38] record heard topics in journal --- apps/openmw/mwdialogue/dialoguemanagerimp.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/openmw/mwdialogue/dialoguemanagerimp.cpp b/apps/openmw/mwdialogue/dialoguemanagerimp.cpp index b83f495ad..a3bb640e6 100644 --- a/apps/openmw/mwdialogue/dialoguemanagerimp.cpp +++ b/apps/openmw/mwdialogue/dialoguemanagerimp.cpp @@ -20,6 +20,7 @@ #include "../mwbase/environment.hpp" #include "../mwbase/world.hpp" +#include "../mwbase/journal.hpp" #include "../mwbase/scriptmanager.hpp" #include "../mwbase/windowmanager.hpp" #include "../mwbase/mechanicsmanager.hpp" @@ -269,6 +270,7 @@ namespace MWDialogue MWScript::InterpreterContext interpreterContext(&mActor.getRefData().getLocals(),mActor); win->addText (Interpreter::fixDefinesDialog(info->mResponse, interpreterContext)); + MWBase::Environment::get().getJournal()->addTopic (topic, info->mId); executeScript (info->mResultScript); @@ -420,6 +422,7 @@ namespace MWDialogue MWScript::InterpreterContext interpreterContext(&mActor.getRefData().getLocals(),mActor); MWBase::Environment::get().getWindowManager()->getDialogueWindow()->addText (Interpreter::fixDefinesDialog(text, interpreterContext)); + MWBase::Environment::get().getJournal()->addTopic (mLastTopic, info->mId); executeScript (info->mResultScript); mLastTopic = mLastTopic; mLastDialogue = *info; From 4c7ae3d1ff296b4c7cc96fcd2c533de3ace00443 Mon Sep 17 00:00:00 2001 From: Nathan Jeffords Date: Sat, 19 Jan 2013 16:21:15 -0800 Subject: [PATCH 20/38] prevent duplicate journal entries from being recorded --- apps/openmw/mwdialogue/journalimp.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/apps/openmw/mwdialogue/journalimp.cpp b/apps/openmw/mwdialogue/journalimp.cpp index 2b2c60381..c623ddc85 100644 --- a/apps/openmw/mwdialogue/journalimp.cpp +++ b/apps/openmw/mwdialogue/journalimp.cpp @@ -31,6 +31,12 @@ namespace MWDialogue void Journal::addEntry (const std::string& id, int index) { + // bail out of we already have heard this... + auto infoId = JournalEntry::idFromIndex (id, index); + for (auto i = mJournal.begin (); i != mJournal.end (); ++i) + if (i->mTopic == id && i->mInfoId == infoId) + return; + StampedJournalEntry entry = StampedJournalEntry::makeFromQuest (id, index); mJournal.push_back (entry); From f55da179337a2591438f8ccad5cd9231203dce77 Mon Sep 17 00:00:00 2001 From: Nathan Jeffords Date: Sat, 19 Jan 2013 16:21:41 -0800 Subject: [PATCH 21/38] made some journal accessor methods constant --- apps/openmw/mwdialogue/topic.cpp | 6 +++--- apps/openmw/mwdialogue/topic.hpp | 8 +++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/apps/openmw/mwdialogue/topic.cpp b/apps/openmw/mwdialogue/topic.cpp index b6e7c07ae..3253b20d6 100644 --- a/apps/openmw/mwdialogue/topic.cpp +++ b/apps/openmw/mwdialogue/topic.cpp @@ -27,17 +27,17 @@ namespace MWDialogue mEntries.push_back (entry.mInfoId); } - Topic::TEntryIter Topic::begin() + Topic::TEntryIter Topic::begin() const { return mEntries.begin(); } - Topic::TEntryIter Topic::end() + Topic::TEntryIter Topic::end() const { return mEntries.end(); } - JournalEntry Topic::getEntry (const std::string& infoId) + JournalEntry Topic::getEntry (const std::string& infoId) const { return JournalEntry (mTopic, infoId); } diff --git a/apps/openmw/mwdialogue/topic.hpp b/apps/openmw/mwdialogue/topic.hpp index 566f60ab0..c3f0baabc 100644 --- a/apps/openmw/mwdialogue/topic.hpp +++ b/apps/openmw/mwdialogue/topic.hpp @@ -34,13 +34,15 @@ namespace MWDialogue /// /// \note Redundant entries are ignored. - TEntryIter begin(); + std::string const & getName () const { return mTopic; } + + TEntryIter begin() const; ///< Iterator pointing to the begin of the journal for this topic. - TEntryIter end(); + TEntryIter end() const; ///< Iterator pointing past the end of the journal for this topic. - JournalEntry getEntry (const std::string& infoId); + JournalEntry getEntry (const std::string& infoId) const; }; } From 3c6ddd7fa783068477a5d0e91605b2037803558e Mon Sep 17 00:00:00 2001 From: Tom Mason Date: Sun, 20 Jan 2013 14:10:04 +0000 Subject: [PATCH 22/38] fixed isInCell method --- apps/openmw/mwworld/containerstore.cpp | 1 + apps/openmw/mwworld/ptr.hpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwworld/containerstore.cpp b/apps/openmw/mwworld/containerstore.cpp index 6884aa6c8..7a4120d0a 100644 --- a/apps/openmw/mwworld/containerstore.cpp +++ b/apps/openmw/mwworld/containerstore.cpp @@ -90,6 +90,7 @@ MWWorld::ContainerStoreIterator MWWorld::ContainerStore::add (const Ptr& ptr) cell = player.getCell(); item.mCell = cell; + item.mContainerStore = 0; MWBase::Environment::get().getWorld()->getLocalScripts().add(script, item); } diff --git a/apps/openmw/mwworld/ptr.hpp b/apps/openmw/mwworld/ptr.hpp index 594ddef2d..d97ebcc6e 100644 --- a/apps/openmw/mwworld/ptr.hpp +++ b/apps/openmw/mwworld/ptr.hpp @@ -74,7 +74,7 @@ namespace MWWorld bool isInCell() const { - return (mCell != 0); + return (mContainerStore == 0); } void setContainerStore (ContainerStore *store); From 665a530e10c912e5159929f7e4fcb5300d9559a4 Mon Sep 17 00:00:00 2001 From: Tom Mason Date: Sun, 20 Jan 2013 14:14:34 +0000 Subject: [PATCH 23/38] renamed realAdd to addImp --- apps/openmw/mwworld/containerstore.cpp | 6 +++--- apps/openmw/mwworld/containerstore.hpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwworld/containerstore.cpp b/apps/openmw/mwworld/containerstore.cpp index 7a4120d0a..bca4073b5 100644 --- a/apps/openmw/mwworld/containerstore.cpp +++ b/apps/openmw/mwworld/containerstore.cpp @@ -74,7 +74,7 @@ bool MWWorld::ContainerStore::stacks(const Ptr& ptr1, const Ptr& ptr2) MWWorld::ContainerStoreIterator MWWorld::ContainerStore::add (const Ptr& ptr) { - MWWorld::ContainerStoreIterator it = realAdd(ptr); + MWWorld::ContainerStoreIterator it = addImp(ptr); MWWorld::Ptr item = *it; std::string script = MWWorld::Class::get(item).getScript(item); @@ -97,7 +97,7 @@ MWWorld::ContainerStoreIterator MWWorld::ContainerStore::add (const Ptr& ptr) return it; } -MWWorld::ContainerStoreIterator MWWorld::ContainerStore::realAdd (const Ptr& ptr) +MWWorld::ContainerStoreIterator MWWorld::ContainerStore::addImp (const Ptr& ptr) { int type = getType(ptr); @@ -189,7 +189,7 @@ void MWWorld::ContainerStore::fill (const ESM::InventoryList& items, const MWWor } ref.getPtr().getRefData().setCount (std::abs(iter->mCount)); /// \todo implement item restocking (indicated by negative count) - realAdd (ref.getPtr()); + addImp (ref.getPtr()); } flagAsModified(); diff --git a/apps/openmw/mwworld/containerstore.hpp b/apps/openmw/mwworld/containerstore.hpp index e274ee130..e4f75d547 100644 --- a/apps/openmw/mwworld/containerstore.hpp +++ b/apps/openmw/mwworld/containerstore.hpp @@ -52,7 +52,7 @@ namespace MWWorld int mStateId; mutable float mCachedWeight; mutable bool mWeightUpToDate; - ContainerStoreIterator realAdd (const Ptr& ptr); + ContainerStoreIterator addImp (const Ptr& ptr); public: From abe25c5f662def09b98ac7afe076258e439294a0 Mon Sep 17 00:00:00 2001 From: Tom Mason Date: Sun, 20 Jan 2013 14:24:55 +0000 Subject: [PATCH 24/38] removed use of c++11 auto --- apps/openmw/mwdialogue/journalimp.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwdialogue/journalimp.cpp b/apps/openmw/mwdialogue/journalimp.cpp index c623ddc85..5e2bc6bc0 100644 --- a/apps/openmw/mwdialogue/journalimp.cpp +++ b/apps/openmw/mwdialogue/journalimp.cpp @@ -32,8 +32,8 @@ namespace MWDialogue void Journal::addEntry (const std::string& id, int index) { // bail out of we already have heard this... - auto infoId = JournalEntry::idFromIndex (id, index); - for (auto i = mJournal.begin (); i != mJournal.end (); ++i) + std::string infoId = JournalEntry::idFromIndex (id, index); + for (TEntryIter i = mJournal.begin (); i != mJournal.end (); ++i) if (i->mTopic == id && i->mInfoId == infoId) return; From bbac63bff7cd2f16f00c2c9cde102f1dbdbb7c02 Mon Sep 17 00:00:00 2001 From: Tom Mason Date: Sun, 20 Jan 2013 14:25:44 +0000 Subject: [PATCH 25/38] Ignore vim swap files --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 9734ac35c..776e2b659 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,5 @@ makefile data *.kdev4 CMakeLists.txt.user +*.swp +*.swo From 28c580d2805ee7a88a6a00b2fae573eac3f8807f Mon Sep 17 00:00:00 2001 From: Tom Mason Date: Sun, 20 Jan 2013 15:43:52 +0000 Subject: [PATCH 26/38] disabling and enabling containers causes scripts on contents to be disabled and enabled accordingly --- apps/openmw/mwworld/worldimp.cpp | 35 ++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/apps/openmw/mwworld/worldimp.cpp b/apps/openmw/mwworld/worldimp.cpp index 716cd6e96..bd48875e7 100644 --- a/apps/openmw/mwworld/worldimp.cpp +++ b/apps/openmw/mwworld/worldimp.cpp @@ -406,6 +406,24 @@ namespace MWWorld if (!reference.getRefData().isEnabled()) { reference.getRefData().enable(); + + /* run scripts on container contents */ + if( reference.getTypeName()==typeid (ESM::Container).name() || + reference.getTypeName()==typeid (ESM::NPC).name() || + reference.getTypeName()==typeid (ESM::Creature).name()) + { + MWWorld::ContainerStore& container = MWWorld::Class::get(reference).getContainerStore(reference); + for(MWWorld::ContainerStoreIterator it = container.begin(); it != container.end(); ++it) + { + std::string script = MWWorld::Class::get(*it).getScript(*it); + if(script != "") + { + MWWorld::Ptr item = *it; + item.mCell = reference.getCell(); + mLocalScripts.add (script, item); + } + } + } if(mWorldScene->getActiveCells().find (reference.getCell()) != mWorldScene->getActiveCells().end() && reference.getRefData().getCount()) mWorldScene->addObjectToScene (reference); @@ -417,6 +435,23 @@ namespace MWWorld if (reference.getRefData().isEnabled()) { reference.getRefData().disable(); + + /* remove scripts on container contents */ + if( reference.getTypeName()==typeid (ESM::Container).name() || + reference.getTypeName()==typeid (ESM::NPC).name() || + reference.getTypeName()==typeid (ESM::Creature).name()) + { + MWWorld::ContainerStore& container = MWWorld::Class::get(reference).getContainerStore(reference); + for(MWWorld::ContainerStoreIterator it = container.begin(); it != container.end(); ++it) + { + std::string script = MWWorld::Class::get(*it).getScript(*it); + if(script != "") + { + MWWorld::Ptr item = *it; + mLocalScripts.remove (item); + } + } + } if(mWorldScene->getActiveCells().find (reference.getCell())!=mWorldScene->getActiveCells().end() && reference.getRefData().getCount()) mWorldScene->removeObjectFromScene (reference); From 23dada0ee4e4d35ff14983a6ff515b30d228b7cb Mon Sep 17 00:00:00 2001 From: Tom Mason Date: Sun, 20 Jan 2013 16:38:56 +0000 Subject: [PATCH 27/38] moved script handling on enable / disable into their own functions --- apps/openmw/mwworld/worldimp.cpp | 74 ++++++++++++++++++-------------- apps/openmw/mwworld/worldimp.hpp | 3 ++ 2 files changed, 45 insertions(+), 32 deletions(-) diff --git a/apps/openmw/mwworld/worldimp.cpp b/apps/openmw/mwworld/worldimp.cpp index bd48875e7..ee18e5d95 100644 --- a/apps/openmw/mwworld/worldimp.cpp +++ b/apps/openmw/mwworld/worldimp.cpp @@ -401,32 +401,55 @@ namespace MWWorld return MWWorld::Ptr(); } + void World::addContainerScripts(const Ptr& reference, Ptr::CellStore * cell) + { + if( reference.getTypeName()==typeid (ESM::Container).name() || + reference.getTypeName()==typeid (ESM::NPC).name() || + reference.getTypeName()==typeid (ESM::Creature).name()) + { + MWWorld::ContainerStore& container = MWWorld::Class::get(reference).getContainerStore(reference); + for(MWWorld::ContainerStoreIterator it = container.begin(); it != container.end(); ++it) + { + std::string script = MWWorld::Class::get(*it).getScript(*it); + if(script != "") + { + MWWorld::Ptr item = *it; + item.mCell = cell; + mLocalScripts.add (script, item); + } + } + } + } + void World::enable (const Ptr& reference) { if (!reference.getRefData().isEnabled()) { reference.getRefData().enable(); - /* run scripts on container contents */ - if( reference.getTypeName()==typeid (ESM::Container).name() || - reference.getTypeName()==typeid (ESM::NPC).name() || - reference.getTypeName()==typeid (ESM::Creature).name()) + addContainerScripts(reference, reference.getCell()); + + if(mWorldScene->getActiveCells().find (reference.getCell()) != mWorldScene->getActiveCells().end() && reference.getRefData().getCount()) + mWorldScene->addObjectToScene (reference); + } + } + + void World::removeContainerScripts(const Ptr& reference) + { + if( reference.getTypeName()==typeid (ESM::Container).name() || + reference.getTypeName()==typeid (ESM::NPC).name() || + reference.getTypeName()==typeid (ESM::Creature).name()) + { + MWWorld::ContainerStore& container = MWWorld::Class::get(reference).getContainerStore(reference); + for(MWWorld::ContainerStoreIterator it = container.begin(); it != container.end(); ++it) { - MWWorld::ContainerStore& container = MWWorld::Class::get(reference).getContainerStore(reference); - for(MWWorld::ContainerStoreIterator it = container.begin(); it != container.end(); ++it) + std::string script = MWWorld::Class::get(*it).getScript(*it); + if(script != "") { - std::string script = MWWorld::Class::get(*it).getScript(*it); - if(script != "") - { - MWWorld::Ptr item = *it; - item.mCell = reference.getCell(); - mLocalScripts.add (script, item); - } + MWWorld::Ptr item = *it; + mLocalScripts.remove (item); } } - - if(mWorldScene->getActiveCells().find (reference.getCell()) != mWorldScene->getActiveCells().end() && reference.getRefData().getCount()) - mWorldScene->addObjectToScene (reference); } } @@ -436,22 +459,9 @@ namespace MWWorld { reference.getRefData().disable(); - /* remove scripts on container contents */ - if( reference.getTypeName()==typeid (ESM::Container).name() || - reference.getTypeName()==typeid (ESM::NPC).name() || - reference.getTypeName()==typeid (ESM::Creature).name()) - { - MWWorld::ContainerStore& container = MWWorld::Class::get(reference).getContainerStore(reference); - for(MWWorld::ContainerStoreIterator it = container.begin(); it != container.end(); ++it) - { - std::string script = MWWorld::Class::get(*it).getScript(*it); - if(script != "") - { - MWWorld::Ptr item = *it; - mLocalScripts.remove (item); - } - } - } + removeContainerScripts(reference); + if(MWWorld::Class::get(reference).getScript(reference) != "") + mLocalScripts.remove(reference); if(mWorldScene->getActiveCells().find (reference.getCell())!=mWorldScene->getActiveCells().end() && reference.getRefData().getCount()) mWorldScene->removeObjectFromScene (reference); diff --git a/apps/openmw/mwworld/worldimp.hpp b/apps/openmw/mwworld/worldimp.hpp index 905e6fd96..fa5b41038 100644 --- a/apps/openmw/mwworld/worldimp.hpp +++ b/apps/openmw/mwworld/worldimp.hpp @@ -105,6 +105,9 @@ namespace MWWorld float getNpcActivationDistance (); float getObjectActivationDistance (); + void removeContainerScripts(const Ptr& reference); + void addContainerScripts(const Ptr& reference, Ptr::CellStore* cell); + public: World (OEngine::Render::OgreRenderer& renderer, From 951eb1b236b600ad6c35888649c79bbe8b59e5e8 Mon Sep 17 00:00:00 2001 From: Emanuel Guevel Date: Wed, 16 Jan 2013 20:10:20 +0100 Subject: [PATCH 28/38] Dialogue: return a response from "Info Refusal" when disposition is not satisfied --- apps/openmw/mwdialogue/filter.cpp | 42 +++++++++++++++++++++++++------ apps/openmw/mwdialogue/filter.hpp | 30 +++++++++++----------- 2 files changed, 50 insertions(+), 22 deletions(-) diff --git a/apps/openmw/mwdialogue/filter.cpp b/apps/openmw/mwdialogue/filter.cpp index 99be5554a..d515c3ac4 100644 --- a/apps/openmw/mwdialogue/filter.cpp +++ b/apps/openmw/mwdialogue/filter.cpp @@ -121,6 +121,13 @@ bool MWDialogue::Filter::testSelectStructs (const ESM::DialInfo& info) const return true; } +bool MWDialogue::Filter::testDisposition (const ESM::DialInfo& info) const +{ + int actorDisposition = MWBase::Environment::get().getMechanicsManager()->getDerivedDisposition(mActor); + + return actorDisposition >= info.mData.mDisposition; +} + bool MWDialogue::Filter::testSelectStruct (const SelectWrapper& select) const { if (select.isNpcOnly() && mActor.getTypeName()!=typeid (ESM::NPC).name()) @@ -547,17 +554,38 @@ MWDialogue::Filter::Filter (const MWWorld::Ptr& actor, int choice, bool talkedTo : mActor (actor), mChoice (choice), mTalkedToPlayer (talkedToPlayer) {} -bool MWDialogue::Filter::operator() (const ESM::DialInfo& info) const -{ - return testActor (info) && testPlayer (info) && testSelectStructs (info); -} - const ESM::DialInfo *MWDialogue::Filter::search (const ESM::Dialogue& dialogue) const { + bool infoRefusal = false; + + // Iterate over topic responses to find a matching one for (std::vector::const_iterator iter = dialogue.mInfo.begin(); iter!=dialogue.mInfo.end(); ++iter) - if ((*this) (*iter)) - return &*iter; + { + if (testActor (*iter) && testPlayer (*iter) && testSelectStructs (*iter)) + { + if (testDisposition (*iter)) + return &*iter; + else + infoRefusal = true; + } + } + + if (infoRefusal) + { + // No response is valid because of low NPC disposition, + // search a response in the topic "Info Refusal" + + const MWWorld::Store &dialogues = + MWBase::Environment::get().getWorld()->getStore().get(); + + const ESM::Dialogue& infoRefusalDialogue = *dialogues.find ("Info Refusal"); + + for (std::vector::const_iterator iter = infoRefusalDialogue.mInfo.begin(); + iter!=infoRefusalDialogue.mInfo.end(); ++iter) + if (testActor (*iter) && testPlayer (*iter) && testSelectStructs (*iter) && testDisposition(*iter)) + return &*iter; + } return 0; } diff --git a/apps/openmw/mwdialogue/filter.hpp b/apps/openmw/mwdialogue/filter.hpp index 7c8f1116f..aa8934bfc 100644 --- a/apps/openmw/mwdialogue/filter.hpp +++ b/apps/openmw/mwdialogue/filter.hpp @@ -18,39 +18,39 @@ namespace MWDialogue MWWorld::Ptr mActor; int mChoice; bool mTalkedToPlayer; - + bool testActor (const ESM::DialInfo& info) const; ///< Is this the right actor for this \a info? - + bool testPlayer (const ESM::DialInfo& info) const; ///< Do the player and the cell the player is currently in match \a info? - + bool testSelectStructs (const ESM::DialInfo& info) const; ///< Are all select structs matching? - + + bool testDisposition (const ESM::DialInfo& info) const; + ///< Is the actor disposition toward the player high enough? + bool testSelectStruct (const SelectWrapper& select) const; - + bool testSelectStructNumeric (const SelectWrapper& select) const; - + int getSelectStructInteger (const SelectWrapper& select) const; - + bool getSelectStructBoolean (const SelectWrapper& select) const; - + int getFactionRank (const MWWorld::Ptr& actor, const std::string& factionId) const; - + bool hasFactionRankSkillRequirements (const MWWorld::Ptr& actor, const std::string& factionId, int rank) const; bool hasFactionRankReputationRequirements (const MWWorld::Ptr& actor, const std::string& factionId, int rank) const; - + public: - - Filter (const MWWorld::Ptr& actor, int choice, bool talkedToPlayer); - bool operator() (const ESM::DialInfo& info) const; - ///< \return does the dialogue match? - + Filter (const MWWorld::Ptr& actor, int choice, bool talkedToPlayer); + const ESM::DialInfo *search (const ESM::Dialogue& dialogue) const; }; } From 05796d85a4e4d659ba4a0d61f5e7fa6be3dfacb3 Mon Sep 17 00:00:00 2001 From: Emanuel Guevel Date: Sat, 19 Jan 2013 02:43:55 +0100 Subject: [PATCH 29/38] NPC: take stats from NPDT12 into account Some available stats (level, reputation and disposition) were not used for NPC with auto-calculated stats. --- apps/openmw/mwclass/npc.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwclass/npc.cpp b/apps/openmw/mwclass/npc.cpp index 586f9638d..cfbc64b87 100644 --- a/apps/openmw/mwclass/npc.cpp +++ b/apps/openmw/mwclass/npc.cpp @@ -100,14 +100,15 @@ namespace MWClass } else { - /// \todo do something with mNpdt12 maybe:p for (int i=0; i<8; ++i) data->mCreatureStats.getAttribute (i).set (10); for (int i=0; i<3; ++i) data->mCreatureStats.setDynamic (i, 10); - data->mCreatureStats.setLevel (1); + data->mCreatureStats.setLevel(ref->mBase->mNpdt12.mLevel); + data->mNpcStats.setBaseDisposition(ref->mBase->mNpdt12.mDisposition); + data->mNpcStats.setReputation(ref->mBase->mNpdt12.mReputation); } data->mCreatureStats.setAiSetting (0, ref->mBase->mAiData.mHello); From 43e85ea0c65301c28f83b053ca65847460815e72 Mon Sep 17 00:00:00 2001 From: Emanuel Guevel Date: Sun, 20 Jan 2013 01:54:35 +0100 Subject: [PATCH 30/38] Disallow redirection to info refusal for greetings --- apps/openmw/mwdialogue/dialoguemanagerimp.cpp | 9 +++++---- apps/openmw/mwdialogue/filter.cpp | 15 +++++++++++++-- apps/openmw/mwdialogue/filter.hpp | 7 ++++++- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/apps/openmw/mwdialogue/dialoguemanagerimp.cpp b/apps/openmw/mwdialogue/dialoguemanagerimp.cpp index a3bb640e6..a8e6a98c9 100644 --- a/apps/openmw/mwdialogue/dialoguemanagerimp.cpp +++ b/apps/openmw/mwdialogue/dialoguemanagerimp.cpp @@ -139,7 +139,8 @@ namespace MWDialogue { if(it->mType == ESM::Dialogue::Greeting) { - if (const ESM::DialInfo *info = filter.search (*it)) + // Search a response (we do not accept a fallback to "Info refusal" here) + if (const ESM::DialInfo *info = filter.search (*it, false)) { //initialise the GUI MWBase::Environment::get().getWindowManager()->pushGuiMode(MWGui::GM_Dialogue); @@ -248,7 +249,7 @@ namespace MWDialogue const ESM::Dialogue& dialogue = *dialogues.find (topic); - if (const ESM::DialInfo *info = filter.search (dialogue)) + if (const ESM::DialInfo *info = filter.search (dialogue, true)) { parseText (info->mResponse); @@ -295,7 +296,7 @@ namespace MWDialogue { if (iter->mType == ESM::Dialogue::Topic) { - if (filter.search (*iter)) + if (filter.responseAvailable (*iter)) { std::string lower = Misc::StringUtils::lowerCase(iter->mId); mActorKnownTopics.push_back (lower); @@ -412,7 +413,7 @@ namespace MWDialogue { Filter filter (mActor, mChoice, mTalkedTo); - if (const ESM::DialInfo *info = filter.search (mDialogueMap[mLastTopic])) + if (const ESM::DialInfo *info = filter.search (mDialogueMap[mLastTopic], true)) { mChoiceMap.clear(); mChoice = -1; diff --git a/apps/openmw/mwdialogue/filter.cpp b/apps/openmw/mwdialogue/filter.cpp index d515c3ac4..5d56e94b0 100644 --- a/apps/openmw/mwdialogue/filter.cpp +++ b/apps/openmw/mwdialogue/filter.cpp @@ -554,7 +554,7 @@ MWDialogue::Filter::Filter (const MWWorld::Ptr& actor, int choice, bool talkedTo : mActor (actor), mChoice (choice), mTalkedToPlayer (talkedToPlayer) {} -const ESM::DialInfo *MWDialogue::Filter::search (const ESM::Dialogue& dialogue) const +const ESM::DialInfo *MWDialogue::Filter::search (const ESM::Dialogue& dialogue, const bool fallbackToInfoRefusal) const { bool infoRefusal = false; @@ -571,7 +571,7 @@ const ESM::DialInfo *MWDialogue::Filter::search (const ESM::Dialogue& dialogue) } } - if (infoRefusal) + if (infoRefusal && fallbackToInfoRefusal) { // No response is valid because of low NPC disposition, // search a response in the topic "Info Refusal" @@ -590,3 +590,14 @@ const ESM::DialInfo *MWDialogue::Filter::search (const ESM::Dialogue& dialogue) return 0; } +bool MWDialogue::Filter::responseAvailable (const ESM::Dialogue& dialogue) const +{ + for (std::vector::const_iterator iter = dialogue.mInfo.begin(); + iter!=dialogue.mInfo.end(); ++iter) + { + if (testActor (*iter) && testPlayer (*iter) && testSelectStructs (*iter)) + return true; + } + + return false; +} diff --git a/apps/openmw/mwdialogue/filter.hpp b/apps/openmw/mwdialogue/filter.hpp index aa8934bfc..707c0154b 100644 --- a/apps/openmw/mwdialogue/filter.hpp +++ b/apps/openmw/mwdialogue/filter.hpp @@ -51,7 +51,12 @@ namespace MWDialogue Filter (const MWWorld::Ptr& actor, int choice, bool talkedToPlayer); - const ESM::DialInfo *search (const ESM::Dialogue& dialogue) const; + const ESM::DialInfo *search (const ESM::Dialogue& dialogue, const bool fallbackToInfoRefusal) const; + ///< Get a matching response for the requested dialogue. + /// Redirect to "Info Refusal" topic if a response fulfills all conditions but disposition. + + bool responseAvailable (const ESM::Dialogue& dialogue) const; + ///< Does a matching response exist? (disposition is ignored for this check) }; } From 736e4716131238669105001cadd10f0308cc1a98 Mon Sep 17 00:00:00 2001 From: Emanuel Guevel Date: Sun, 20 Jan 2013 15:57:34 +0100 Subject: [PATCH 31/38] Print a fallback text when no topic response is found --- apps/openmw/mwdialogue/dialoguemanagerimp.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwdialogue/dialoguemanagerimp.cpp b/apps/openmw/mwdialogue/dialoguemanagerimp.cpp index a8e6a98c9..f548c46f7 100644 --- a/apps/openmw/mwdialogue/dialoguemanagerimp.cpp +++ b/apps/openmw/mwdialogue/dialoguemanagerimp.cpp @@ -249,12 +249,12 @@ namespace MWDialogue const ESM::Dialogue& dialogue = *dialogues.find (topic); + MWGui::DialogueWindow* win = MWBase::Environment::get().getWindowManager()->getDialogueWindow(); + if (const ESM::DialInfo *info = filter.search (dialogue, true)) { parseText (info->mResponse); - MWGui::DialogueWindow* win = MWBase::Environment::get().getWindowManager()->getDialogueWindow(); - if (dialogue.mType==ESM::Dialogue::Persuasion) { std::string modifiedTopic = "s" + topic; @@ -278,6 +278,13 @@ namespace MWDialogue mLastTopic = topic; mLastDialogue = *info; } + else + { + // no response found, print a fallback text + win->addTitle (topic); + win->addText ("…"); + + } } void DialogueManager::updateTopics() From af9e126487704ccf69090e7f4851e2ea8828d2f1 Mon Sep 17 00:00:00 2001 From: Emanuel Guevel Date: Sat, 19 Jan 2013 22:53:41 +0100 Subject: [PATCH 32/38] =?UTF-8?q?Add=20unicode=20number=20for=20ellipsis?= =?UTF-8?q?=20(=E2=80=A6)=20to=20code=20range?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- files/mygui/openmw_font.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/files/mygui/openmw_font.xml b/files/mygui/openmw_font.xml index 0383c9942..b1446fae1 100644 --- a/files/mygui/openmw_font.xml +++ b/files/mygui/openmw_font.xml @@ -11,6 +11,7 @@ + From 31c71c029d9bfb662b1661c0422d6e325682ff1f Mon Sep 17 00:00:00 2001 From: Tom Mason Date: Sun, 20 Jan 2013 17:01:30 +0000 Subject: [PATCH 33/38] objects with scripts attached, that are inside containers will behave correctly when the container is moved --- apps/openmw/mwworld/worldimp.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/apps/openmw/mwworld/worldimp.cpp b/apps/openmw/mwworld/worldimp.cpp index ee18e5d95..46c58ecab 100644 --- a/apps/openmw/mwworld/worldimp.cpp +++ b/apps/openmw/mwworld/worldimp.cpp @@ -685,6 +685,7 @@ namespace MWWorld { mWorldScene->removeObjectFromScene (ptr); mLocalScripts.remove (ptr); + removeContainerScripts (ptr); } } } @@ -698,6 +699,8 @@ namespace MWWorld CellStore *currCell = ptr.getCell(); bool isPlayer = ptr == mPlayer->getPlayer(); bool haveToMove = mWorldScene->isCellActive(*currCell) || isPlayer; + + removeContainerScripts(ptr); if (*currCell != newCell) { @@ -725,6 +728,8 @@ namespace MWWorld MWWorld::Ptr copy = MWWorld::Class::get(ptr).copyToCell(ptr, newCell); + addContainerScripts(copy, &newCell); + mRendering->moveObjectToCell(copy, vec, currCell); if (MWWorld::Class::get(ptr).isActor()) @@ -1333,6 +1338,7 @@ namespace MWWorld if (!script.empty()) { mLocalScripts.add(script, dropped); } + addContainerScripts(dropped, &cell); } } From f5f3c2e62d167943cc4542e9400067c246137291 Mon Sep 17 00:00:00 2001 From: Tom Mason Date: Mon, 21 Jan 2013 20:06:08 +0000 Subject: [PATCH 34/38] enabling / disabling should not affect scripts --- apps/openmw/mwworld/worldimp.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/apps/openmw/mwworld/worldimp.cpp b/apps/openmw/mwworld/worldimp.cpp index 46c58ecab..24d139b37 100644 --- a/apps/openmw/mwworld/worldimp.cpp +++ b/apps/openmw/mwworld/worldimp.cpp @@ -427,8 +427,6 @@ namespace MWWorld { reference.getRefData().enable(); - addContainerScripts(reference, reference.getCell()); - if(mWorldScene->getActiveCells().find (reference.getCell()) != mWorldScene->getActiveCells().end() && reference.getRefData().getCount()) mWorldScene->addObjectToScene (reference); } @@ -459,10 +457,6 @@ namespace MWWorld { reference.getRefData().disable(); - removeContainerScripts(reference); - if(MWWorld::Class::get(reference).getScript(reference) != "") - mLocalScripts.remove(reference); - if(mWorldScene->getActiveCells().find (reference.getCell())!=mWorldScene->getActiveCells().end() && reference.getRefData().getCount()) mWorldScene->removeObjectFromScene (reference); } From 90d05858efe026d1b08252303f9c6b3534eeaa06 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Tue, 22 Jan 2013 11:50:08 +0100 Subject: [PATCH 35/38] disabling dialogue sub-views for now --- apps/opencs/view/world/tablesubview.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/opencs/view/world/tablesubview.cpp b/apps/opencs/view/world/tablesubview.cpp index bb4bb76c6..f4deceb49 100644 --- a/apps/opencs/view/world/tablesubview.cpp +++ b/apps/opencs/view/world/tablesubview.cpp @@ -21,5 +21,6 @@ void CSVWorld::TableSubView::setEditLock (bool locked) void CSVWorld::TableSubView::rowActivated (const QModelIndex& index) { - focusId (mTable->getUniversalId (index.row())); + /// \todo re-enable, after dialogue sub views have been fixed up +// focusId (mTable->getUniversalId (index.row())); } \ No newline at end of file From cac68c9e87fe50eb8b28644ecfcead4c3ca3f548 Mon Sep 17 00:00:00 2001 From: scrawl Date: Wed, 23 Jan 2013 11:48:47 +0100 Subject: [PATCH 36/38] Removed an outdated section from CMakeLists --- CMakeLists.txt | 29 ----------------------------- 1 file changed, 29 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 208d348fb..2313d2d95 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,35 +67,6 @@ endif() # We probably support older versions than this. cmake_minimum_required(VERSION 2.6) -# -# Pre-built binaries being used? -# -IF(EXISTS "${CMAKE_SOURCE_DIR}/prebuilt/vc100-mt-gd/ogre_1_7_1") - set(PREBUILT_DIR "${CMAKE_SOURCE_DIR}/prebuilt/vc100-mt-gd") - message (STATUS "OpenMW pre-built binaries found at ${PREBUILT_DIR}.") - - SET(ENV{OGRE_HOME} "${PREBUILT_DIR}/ogre_1_7_1") - - SET(ENV{BOOST_ROOT} "${PREBUILT_DIR}/boost_1_42_0") - set(Boost_USE_STATIC_LIBS ON) - set(Boost_USE_MULTITHREADED ON) - set(ENV{BOOST_INCLUDEDIR} "${BOOST_ROOT}/include") - set(ENV{BOOST_LIBRARYDIR} "${BOOST_ROOT}/lib") - - set(ENV{FREETYPE_DIR} "${PREBUILT_DIR}/freetype-2.3.5-1") - - set(USE_MPG123 OFF) - set(USE_AUDIERE ON) - set(AUDIERE_INCLUDE_DIR "${PREBUILT_DIR}/audiere-1.9.4/include") - set(AUDIERE_LIBRARY "${PREBUILT_DIR}/audiere-1.9.4/lib/audiere.lib") - - set(ENV{OPENALDIR} "${PREBUILT_DIR}/OpenAL 1.1 SDK") - - set(BULLET_ROOT "${PREBUILT_DIR}/bullet") -ELSE() - message (STATUS "OpenMW pre-built binaries not found. Using standard locations.") -ENDIF() - # source directory: libs set(LIBDIR ${CMAKE_SOURCE_DIR}/libs) From ed9a9904b431bb27ed9725e7c83023cf5fd11bab Mon Sep 17 00:00:00 2001 From: Emanuel Guevel Date: Thu, 24 Jan 2013 19:39:31 +0100 Subject: [PATCH 37/38] Dialogue filter: search script variables case-insensitively --- apps/openmw/mwdialogue/filter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwdialogue/filter.cpp b/apps/openmw/mwdialogue/filter.cpp index 5d56e94b0..c1542515a 100644 --- a/apps/openmw/mwdialogue/filter.cpp +++ b/apps/openmw/mwdialogue/filter.cpp @@ -169,7 +169,7 @@ bool MWDialogue::Filter::testSelectStructNumeric (const SelectWrapper& select) c int i = 0; for (; i (script->mVarNames.size()); ++i) - if (script->mVarNames[i]==name) + if (Misc::StringUtils::lowerCase(script->mVarNames[i]) == name) break; if (i>=static_cast (script->mVarNames.size())) From 19dff822f4f963fdab88d5f8f80c9b026edd6f91 Mon Sep 17 00:00:00 2001 From: Emanuel Guevel Date: Thu, 24 Jan 2013 19:43:21 +0100 Subject: [PATCH 38/38] Dialogue: do not filter on disposition for creatures --- apps/openmw/mwdialogue/filter.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/openmw/mwdialogue/filter.cpp b/apps/openmw/mwdialogue/filter.cpp index c1542515a..09bb0ddc4 100644 --- a/apps/openmw/mwdialogue/filter.cpp +++ b/apps/openmw/mwdialogue/filter.cpp @@ -123,6 +123,11 @@ bool MWDialogue::Filter::testSelectStructs (const ESM::DialInfo& info) const bool MWDialogue::Filter::testDisposition (const ESM::DialInfo& info) const { + bool isCreature = (mActor.getTypeName() != typeid (ESM::NPC).name()); + + if (isCreature) + return true; + int actorDisposition = MWBase::Environment::get().getMechanicsManager()->getDerivedDisposition(mActor); return actorDisposition >= info.mData.mDisposition;