forked from teamnwah/openmw-tes3coop
Merge pull request #394 from TES3MP/0.6.3 while resolving conflicts
Conflicts: apps/openmw-mp/Script/Functions/Settings.cpp apps/openmw-mp/Script/Functions/Settings.hpp
This commit is contained in:
commit
7ec08e125b
96 changed files with 813 additions and 451 deletions
|
@ -41,6 +41,7 @@ Programmers
|
||||||
Cory F. Cohen (cfcohen)
|
Cory F. Cohen (cfcohen)
|
||||||
Cris Mihalache (Mirceam)
|
Cris Mihalache (Mirceam)
|
||||||
crussell187
|
crussell187
|
||||||
|
DanielVukelich
|
||||||
darkf
|
darkf
|
||||||
devnexen
|
devnexen
|
||||||
Dieho
|
Dieho
|
||||||
|
|
|
@ -303,25 +303,25 @@ if [ -z $SKIP_DOWNLOAD ]; then
|
||||||
# Boost
|
# Boost
|
||||||
if [ -z $APPVEYOR ]; then
|
if [ -z $APPVEYOR ]; then
|
||||||
download "Boost 1.61.0" \
|
download "Boost 1.61.0" \
|
||||||
"http://sourceforge.net/projects/boost/files/boost-binaries/1.61.0/boost_1_61_0-msvc-${MSVC_VER}.0-${BITS}.exe" \
|
"https://sourceforge.net/projects/boost/files/boost-binaries/1.61.0/boost_1_61_0-msvc-${MSVC_VER}.0-${BITS}.exe" \
|
||||||
"boost-1.61.0-msvc${MSVC_YEAR}-win${BITS}.exe"
|
"boost-1.61.0-msvc${MSVC_YEAR}-win${BITS}.exe"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Bullet
|
# Bullet
|
||||||
download "Bullet 2.86" \
|
download "Bullet 2.86" \
|
||||||
"http://www.lysator.liu.se/~ace/OpenMW/deps/Bullet-2.86-msvc${MSVC_YEAR}-win${BITS}.7z" \
|
"https://www.lysator.liu.se/~ace/OpenMW/deps/Bullet-2.86-msvc${MSVC_YEAR}-win${BITS}.7z" \
|
||||||
"Bullet-2.86-msvc${MSVC_YEAR}-win${BITS}.7z"
|
"Bullet-2.86-msvc${MSVC_YEAR}-win${BITS}.7z"
|
||||||
|
|
||||||
# FFmpeg
|
# FFmpeg
|
||||||
download "FFmpeg 3.2.4" \
|
download "FFmpeg 3.2.4" \
|
||||||
"http://ffmpeg.zeranoe.com/builds/win${BITS}/shared/ffmpeg-3.2.4-win${BITS}-shared.zip" \
|
"https://ffmpeg.zeranoe.com/builds/win${BITS}/shared/ffmpeg-3.2.4-win${BITS}-shared.zip" \
|
||||||
"ffmpeg-3.2.4-win${BITS}.zip" \
|
"ffmpeg-3.2.4-win${BITS}.zip" \
|
||||||
"http://ffmpeg.zeranoe.com/builds/win${BITS}/dev/ffmpeg-3.2.4-win${BITS}-dev.zip" \
|
"https://ffmpeg.zeranoe.com/builds/win${BITS}/dev/ffmpeg-3.2.4-win${BITS}-dev.zip" \
|
||||||
"ffmpeg-3.2.4-dev-win${BITS}.zip"
|
"ffmpeg-3.2.4-dev-win${BITS}.zip"
|
||||||
|
|
||||||
# MyGUI
|
# MyGUI
|
||||||
download "MyGUI 3.2.2" \
|
download "MyGUI 3.2.2" \
|
||||||
"http://www.lysator.liu.se/~ace/OpenMW/deps/MyGUI-3.2.2-msvc${MSVC_YEAR}-win${BITS}.7z" \
|
"https://www.lysator.liu.se/~ace/OpenMW/deps/MyGUI-3.2.2-msvc${MSVC_YEAR}-win${BITS}.7z" \
|
||||||
"MyGUI-3.2.2-msvc${MSVC_YEAR}-win${BITS}.7z"
|
"MyGUI-3.2.2-msvc${MSVC_YEAR}-win${BITS}.7z"
|
||||||
|
|
||||||
# OpenAL
|
# OpenAL
|
||||||
|
@ -331,7 +331,7 @@ if [ -z $SKIP_DOWNLOAD ]; then
|
||||||
|
|
||||||
# OSG
|
# OSG
|
||||||
download "OpenSceneGraph 3.4.1-scrawl" \
|
download "OpenSceneGraph 3.4.1-scrawl" \
|
||||||
"http://www.lysator.liu.se/~ace/OpenMW/deps/OSG-3.4.1-scrawl-msvc${MSVC_YEAR}-win${BITS}.7z" \
|
"https://www.lysator.liu.se/~ace/OpenMW/deps/OSG-3.4.1-scrawl-msvc${MSVC_YEAR}-win${BITS}.7z" \
|
||||||
"OSG-3.4.1-scrawl-msvc${MSVC_YEAR}-win${BITS}.7z"
|
"OSG-3.4.1-scrawl-msvc${MSVC_YEAR}-win${BITS}.7z"
|
||||||
|
|
||||||
# Qt
|
# Qt
|
||||||
|
@ -343,9 +343,9 @@ if [ -z $SKIP_DOWNLOAD ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
download "Qt 5.7.2" \
|
download "Qt 5.7.2" \
|
||||||
"http://download.qt.io/official_releases/qt/5.7/5.7.0/qt-opensource-windows-x86-msvc${MSVC_YEAR}${QT_SUFFIX}-5.7.0.exe" \
|
"https://download.qt.io/official_releases/qt/5.7/5.7.0/qt-opensource-windows-x86-msvc${MSVC_YEAR}${QT_SUFFIX}-5.7.0.exe" \
|
||||||
"qt-5.7.0-msvc${MSVC_YEAR}-win${BITS}.exe" \
|
"qt-5.7.0-msvc${MSVC_YEAR}-win${BITS}.exe" \
|
||||||
"http://www.lysator.liu.se/~ace/OpenMW/deps/qt-5-install.qs" \
|
"https://www.lysator.liu.se/~ace/OpenMW/deps/qt-5-install.qs" \
|
||||||
"qt-5-install.qs"
|
"qt-5-install.qs"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
@ -557,8 +557,8 @@ if(WIN32)
|
||||||
SET(CPACK_PACKAGE_DESCRIPTION_FILE "${OpenMW_SOURCE_DIR}/README.md")
|
SET(CPACK_PACKAGE_DESCRIPTION_FILE "${OpenMW_SOURCE_DIR}/README.md")
|
||||||
SET(CPACK_NSIS_EXECUTABLES_DIRECTORY ".")
|
SET(CPACK_NSIS_EXECUTABLES_DIRECTORY ".")
|
||||||
SET(CPACK_NSIS_DISPLAY_NAME "OpenMW ${OPENMW_VERSION}")
|
SET(CPACK_NSIS_DISPLAY_NAME "OpenMW ${OPENMW_VERSION}")
|
||||||
SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\www.openmw.org")
|
SET(CPACK_NSIS_HELP_LINK "https:\\\\\\\\www.openmw.org")
|
||||||
SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\www.openmw.org")
|
SET(CPACK_NSIS_URL_INFO_ABOUT "https:\\\\\\\\www.openmw.org")
|
||||||
SET(CPACK_NSIS_INSTALLED_ICON_NAME "openmw-launcher.exe")
|
SET(CPACK_NSIS_INSTALLED_ICON_NAME "openmw-launcher.exe")
|
||||||
SET(CPACK_NSIS_MUI_FINISHPAGE_RUN "openmw-launcher.exe")
|
SET(CPACK_NSIS_MUI_FINISHPAGE_RUN "openmw-launcher.exe")
|
||||||
SET(CPACK_NSIS_MUI_ICON "${OpenMW_SOURCE_DIR}/files/tes3mp/tes3mp.ico")
|
SET(CPACK_NSIS_MUI_ICON "${OpenMW_SOURCE_DIR}/files/tes3mp/tes3mp.ico")
|
||||||
|
|
|
@ -3,7 +3,7 @@ How to contribute to OpenMW
|
||||||
|
|
||||||
Not sure what to do with all your free time? Pick out a task from here:
|
Not sure what to do with all your free time? Pick out a task from here:
|
||||||
|
|
||||||
http://bugs.openmw.org/
|
https://bugs.openmw.org/
|
||||||
|
|
||||||
Currently, we are focused on completing the MW game experience and general polishing. Features out of this scope may be approved in some cases, but you should probably start a discussion first.
|
Currently, we are focused on completing the MW game experience and general polishing. Features out of this scope may be approved in some cases, but you should probably start a discussion first.
|
||||||
|
|
||||||
|
|
8
LICENSE
8
LICENSE
|
@ -1,7 +1,7 @@
|
||||||
GNU GENERAL PUBLIC LICENSE
|
GNU GENERAL PUBLIC LICENSE
|
||||||
Version 3, 29 June 2007
|
Version 3, 29 June 2007
|
||||||
|
|
||||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
of this license document, but changing it is not allowed.
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
@ -645,7 +645,7 @@ the "copyright" line and a pointer to where the full notice is found.
|
||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
@ -664,11 +664,11 @@ might be different; for a GUI interface, you would use an "about box".
|
||||||
You should also get your employer (if you work as a programmer) or school,
|
You should also get your employer (if you work as a programmer) or school,
|
||||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||||
For more information on this, and how to apply and follow the GNU GPL, see
|
For more information on this, and how to apply and follow the GNU GPL, see
|
||||||
<http://www.gnu.org/licenses/>.
|
<https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
The GNU General Public License does not permit incorporating your program
|
The GNU General Public License does not permit incorporating your program
|
||||||
into proprietary programs. If your program is a subroutine library, you
|
into proprietary programs. If your program is a subroutine library, you
|
||||||
may consider it more useful to permit linking proprietary applications with
|
may consider it more useful to permit linking proprietary applications with
|
||||||
the library. If this is what you want to do, use the GNU Lesser General
|
the library. If this is what you want to do, use the GNU Lesser General
|
||||||
Public License instead of this License. But first, please read
|
Public License instead of this License. But first, please read
|
||||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
<https://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||||
|
|
|
@ -36,7 +36,7 @@ Getting Started
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
* [Quickstart guide](https://github.com/TES3MP/openmw-tes3mp/wiki/Quickstart-guide)
|
* [Quickstart guide](https://github.com/TES3MP/openmw-tes3mp/wiki/Quickstart-guide)
|
||||||
* [Steam group](https://steamcommunity.com/groups/mwmulti) and its [detailed FAQ](http://steamcommunity.com/groups/mwmulti/discussions/1/353916184342480541/)
|
* [Steam group](https://steamcommunity.com/groups/mwmulti) and its [detailed FAQ](https://steamcommunity.com/groups/mwmulti/discussions/1/353916184342480541/)
|
||||||
* [TES3MP section on OpenMW forums](https://forum.openmw.org/viewforum.php?f=44)
|
* [TES3MP section on OpenMW forums](https://forum.openmw.org/viewforum.php?f=44)
|
||||||
* [Subreddit](https://www.reddit.com/r/tes3mp)
|
* [Subreddit](https://www.reddit.com/r/tes3mp)
|
||||||
* [Known issues and bug reports](https://github.com/TES3MP/openmw-tes3mp/issues)
|
* [Known issues and bug reports](https://github.com/TES3MP/openmw-tes3mp/issues)
|
||||||
|
|
|
@ -20,7 +20,7 @@ bool Launcher::AdvancedPage::loadSettings()
|
||||||
loadSettingBool(followersAttackOnSightCheckBox, "followers attack on sight", "Game");
|
loadSettingBool(followersAttackOnSightCheckBox, "followers attack on sight", "Game");
|
||||||
loadSettingBool(preventMerchantEquippingCheckBox, "prevent merchant equipping", "Game");
|
loadSettingBool(preventMerchantEquippingCheckBox, "prevent merchant equipping", "Game");
|
||||||
loadSettingBool(showEffectDurationCheckBox, "show effect duration", "Game");
|
loadSettingBool(showEffectDurationCheckBox, "show effect duration", "Game");
|
||||||
loadSettingBool(showMeleeInfoCheckBox, "show enchant chance", "Game");
|
loadSettingBool(showEnchantChanceCheckBox, "show enchant chance", "Game");
|
||||||
loadSettingBool(showMeleeInfoCheckBox, "show melee info", "Game");
|
loadSettingBool(showMeleeInfoCheckBox, "show melee info", "Game");
|
||||||
loadSettingBool(showProjectileDamageCheckBox, "show projectile damage", "Game");
|
loadSettingBool(showProjectileDamageCheckBox, "show projectile damage", "Game");
|
||||||
|
|
||||||
|
@ -35,9 +35,11 @@ bool Launcher::AdvancedPage::loadSettings()
|
||||||
loadSettingBool(grabCursorCheckBox, "grab cursor", "Input");
|
loadSettingBool(grabCursorCheckBox, "grab cursor", "Input");
|
||||||
loadSettingBool(toggleSneakCheckBox, "toggle sneak", "Input");
|
loadSettingBool(toggleSneakCheckBox, "toggle sneak", "Input");
|
||||||
|
|
||||||
// Other Settings
|
// Saves Settings
|
||||||
loadSettingBool(timePlayedCheckbox, "timeplayed", "Saves");
|
loadSettingBool(timePlayedCheckbox, "timeplayed", "Saves");
|
||||||
|
maximumQuicksavesComboBox->setValue(mEngineSettings.getInt("max quicksaves", "Saves"));
|
||||||
|
|
||||||
|
// Other Settings
|
||||||
QString screenshotFormatString = QString::fromStdString(mEngineSettings.getString("screenshot format", "General")).toUpper();
|
QString screenshotFormatString = QString::fromStdString(mEngineSettings.getString("screenshot format", "General")).toUpper();
|
||||||
if (screenshotFormatComboBox->findText(screenshotFormatString) == -1)
|
if (screenshotFormatComboBox->findText(screenshotFormatString) == -1)
|
||||||
screenshotFormatComboBox->addItem(screenshotFormatString);
|
screenshotFormatComboBox->addItem(screenshotFormatString);
|
||||||
|
@ -56,7 +58,7 @@ void Launcher::AdvancedPage::saveSettings()
|
||||||
saveSettingBool(followersAttackOnSightCheckBox, "followers attack on sight", "Game");
|
saveSettingBool(followersAttackOnSightCheckBox, "followers attack on sight", "Game");
|
||||||
saveSettingBool(preventMerchantEquippingCheckBox, "prevent merchant equipping", "Game");
|
saveSettingBool(preventMerchantEquippingCheckBox, "prevent merchant equipping", "Game");
|
||||||
saveSettingBool(showEffectDurationCheckBox, "show effect duration", "Game");
|
saveSettingBool(showEffectDurationCheckBox, "show effect duration", "Game");
|
||||||
saveSettingBool(showMeleeInfoCheckBox, "show enchant chance", "Game");
|
saveSettingBool(showEnchantChanceCheckBox, "show enchant chance", "Game");
|
||||||
saveSettingBool(showMeleeInfoCheckBox, "show melee info", "Game");
|
saveSettingBool(showMeleeInfoCheckBox, "show melee info", "Game");
|
||||||
saveSettingBool(showProjectileDamageCheckBox, "show projectile damage", "Game");
|
saveSettingBool(showProjectileDamageCheckBox, "show projectile damage", "Game");
|
||||||
|
|
||||||
|
@ -69,9 +71,14 @@ void Launcher::AdvancedPage::saveSettings()
|
||||||
saveSettingBool(grabCursorCheckBox, "grab cursor", "Input");
|
saveSettingBool(grabCursorCheckBox, "grab cursor", "Input");
|
||||||
saveSettingBool(toggleSneakCheckBox, "toggle sneak", "Input");
|
saveSettingBool(toggleSneakCheckBox, "toggle sneak", "Input");
|
||||||
|
|
||||||
// Other Settings
|
// Saves Settings
|
||||||
saveSettingBool(timePlayedCheckbox, "timeplayed", "Saves");
|
saveSettingBool(timePlayedCheckbox, "timeplayed", "Saves");
|
||||||
|
int maximumQuicksaves = maximumQuicksavesComboBox->value();
|
||||||
|
if (maximumQuicksaves != mEngineSettings.getInt("max quicksaves", "Saves")) {
|
||||||
|
mEngineSettings.setInt("max quicksaves", "Saves", maximumQuicksaves);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Other Settings
|
||||||
std::string screenshotFormatString = screenshotFormatComboBox->currentText().toLower().toStdString();
|
std::string screenshotFormatString = screenshotFormatComboBox->currentText().toLower().toStdString();
|
||||||
if (screenshotFormatString != mEngineSettings.getString("screenshot format", "General"))
|
if (screenshotFormatString != mEngineSettings.getString("screenshot format", "General"))
|
||||||
mEngineSettings.setString("screenshot format", "General", screenshotFormatString);
|
mEngineSettings.setString("screenshot format", "General", screenshotFormatString);
|
||||||
|
|
|
@ -14,6 +14,7 @@ void GameSettings::Init(LuaState &lua)
|
||||||
{
|
{
|
||||||
lua.getState()->new_usertype<GameSettings>("Settings",
|
lua.getState()->new_usertype<GameSettings>("Settings",
|
||||||
"setDifficulty", &GameSettings::setDifficulty,
|
"setDifficulty", &GameSettings::setDifficulty,
|
||||||
|
"setPhysicsFramerate", &GameSettings::setPhysicsFramerate,
|
||||||
"setConsoleAllowed", &GameSettings::setConsoleAllowed,
|
"setConsoleAllowed", &GameSettings::setConsoleAllowed,
|
||||||
"setBedRestAllowed", &GameSettings::setBedRestAllowed,
|
"setBedRestAllowed", &GameSettings::setBedRestAllowed,
|
||||||
"setWildernessRestAllowed", &GameSettings::setWildernessRestAllowed,
|
"setWildernessRestAllowed", &GameSettings::setWildernessRestAllowed,
|
||||||
|
@ -38,6 +39,12 @@ void GameSettings::setDifficulty(int difficulty)
|
||||||
setChanged();
|
setChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GameSettings::setPhysicsFramerate(double physicsFramerate)
|
||||||
|
{
|
||||||
|
player->physicsFramerate = physicsFramerate;
|
||||||
|
setChanged();
|
||||||
|
}
|
||||||
|
|
||||||
void GameSettings::setBedRestAllowed(bool state)
|
void GameSettings::setBedRestAllowed(bool state)
|
||||||
{
|
{
|
||||||
player->bedRestAllowed = state;
|
player->bedRestAllowed = state;
|
||||||
|
|
|
@ -22,6 +22,8 @@ public:
|
||||||
|
|
||||||
void setDifficulty(int difficulty);
|
void setDifficulty(int difficulty);
|
||||||
|
|
||||||
|
void setPhysicsFramerate(double physicsFramerate);
|
||||||
|
|
||||||
void setBedRestAllowed(bool state);
|
void setBedRestAllowed(bool state);
|
||||||
|
|
||||||
void setWildernessRestAllowed(bool state);
|
void setWildernessRestAllowed(bool state);
|
||||||
|
|
|
@ -89,7 +89,7 @@ add_openmw_dir (mwmechanics
|
||||||
)
|
)
|
||||||
|
|
||||||
add_openmw_dir (mwstate
|
add_openmw_dir (mwstate
|
||||||
statemanagerimp charactermanager character
|
statemanagerimp charactermanager character quicksavemanager
|
||||||
)
|
)
|
||||||
|
|
||||||
add_openmw_dir (mwbase
|
add_openmw_dir (mwbase
|
||||||
|
@ -258,4 +258,3 @@ endif (MSVC)
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
INSTALL(TARGETS tes3mp RUNTIME DESTINATION ".")
|
INSTALL(TARGETS tes3mp RUNTIME DESTINATION ".")
|
||||||
endif (WIN32)
|
endif (WIN32)
|
||||||
|
|
||||||
|
|
|
@ -318,6 +318,16 @@ namespace MWBase
|
||||||
End of tes3mp addition
|
End of tes3mp addition
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Start of tes3mp addition
|
||||||
|
|
||||||
|
Make it possible to set the physics framerate from elsewhere
|
||||||
|
*/
|
||||||
|
virtual void World::setPhysicsFramerate(float physFramerate) = 0;
|
||||||
|
/*
|
||||||
|
End of tes3mp addition
|
||||||
|
*/
|
||||||
|
|
||||||
virtual bool castRay (float x1, float y1, float z1, float x2, float y2, float z2) = 0;
|
virtual bool castRay (float x1, float y1, float z1, float x2, float y2, float z2) = 0;
|
||||||
///< cast a Ray and return true if there is an object in the ray path.
|
///< cast a Ray and return true if there is an object in the ray path.
|
||||||
|
|
||||||
|
|
|
@ -83,8 +83,9 @@ namespace MWClass
|
||||||
|
|
||||||
if (ptr.getCellRef().getSoul() != "")
|
if (ptr.getCellRef().getSoul() != "")
|
||||||
{
|
{
|
||||||
const ESM::Creature *creature = MWBase::Environment::get().getWorld()->getStore().get<ESM::Creature>().find(ref->mRef.getSoul());
|
const ESM::Creature *creature = MWBase::Environment::get().getWorld()->getStore().get<ESM::Creature>().search(ref->mRef.getSoul());
|
||||||
value *= creature->mData.mSoul;
|
if (creature)
|
||||||
|
value *= creature->mData.mSoul;
|
||||||
}
|
}
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
|
@ -148,8 +149,9 @@ namespace MWClass
|
||||||
|
|
||||||
if (ref->mRef.getSoul() != "")
|
if (ref->mRef.getSoul() != "")
|
||||||
{
|
{
|
||||||
const ESM::Creature *creature = store.get<ESM::Creature>().find(ref->mRef.getSoul());
|
const ESM::Creature *creature = store.get<ESM::Creature>().search(ref->mRef.getSoul());
|
||||||
info.caption += " (" + creature->mName + ")";
|
if (creature)
|
||||||
|
info.caption += " (" + creature->mName + ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string text;
|
std::string text;
|
||||||
|
@ -210,7 +212,7 @@ namespace MWClass
|
||||||
|
|
||||||
std::shared_ptr<MWWorld::Action> Miscellaneous::use (const MWWorld::Ptr& ptr) const
|
std::shared_ptr<MWWorld::Action> Miscellaneous::use (const MWWorld::Ptr& ptr) const
|
||||||
{
|
{
|
||||||
if (ptr.getCellRef().getSoul().empty())
|
if (ptr.getCellRef().getSoul().empty() || !MWBase::Environment::get().getWorld()->getStore().get<ESM::Creature>().search(ptr.getCellRef().getSoul()))
|
||||||
return std::shared_ptr<MWWorld::Action>(new MWWorld::NullAction());
|
return std::shared_ptr<MWWorld::Action>(new MWWorld::NullAction());
|
||||||
else
|
else
|
||||||
return std::shared_ptr<MWWorld::Action>(new MWWorld::ActionSoulgem(ptr));
|
return std::shared_ptr<MWWorld::Action>(new MWWorld::ActionSoulgem(ptr));
|
||||||
|
|
|
@ -421,7 +421,7 @@ namespace MWClass
|
||||||
// store
|
// store
|
||||||
ptr.getRefData().setCustomData (data.release());
|
ptr.getRefData().setCustomData (data.release());
|
||||||
|
|
||||||
getInventoryStore(ptr).autoEquip(ptr);
|
getInventoryStore(ptr).autoEquip(ptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -101,8 +101,10 @@ namespace MWDialogue
|
||||||
if (i->mTopic == id && i->mInfoId == infoId)
|
if (i->mTopic == id && i->mInfoId == infoId)
|
||||||
{
|
{
|
||||||
if (getJournalIndex(id) < index)
|
if (getJournalIndex(id) < index)
|
||||||
|
{
|
||||||
setJournalIndex(id, index);
|
setJournalIndex(id, index);
|
||||||
MWBase::Environment::get().getWindowManager()->messageBox ("#{sJournalEntry}");
|
MWBase::Environment::get().getWindowManager()->messageBox ("#{sJournalEntry}");
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#include "companionwindow.hpp"
|
#include "companionwindow.hpp"
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
#include <MyGUI_InputManager.h>
|
#include <MyGUI_InputManager.h>
|
||||||
|
|
||||||
#include "../mwbase/environment.hpp"
|
#include "../mwbase/environment.hpp"
|
||||||
|
@ -129,7 +131,7 @@ void CompanionWindow::updateEncumbranceBar()
|
||||||
return;
|
return;
|
||||||
float capacity = mPtr.getClass().getCapacity(mPtr);
|
float capacity = mPtr.getClass().getCapacity(mPtr);
|
||||||
float encumbrance = mPtr.getClass().getEncumbrance(mPtr);
|
float encumbrance = mPtr.getClass().getEncumbrance(mPtr);
|
||||||
mEncumbranceBar->setValue(static_cast<int>(encumbrance), static_cast<int>(capacity));
|
mEncumbranceBar->setValue(std::ceil(encumbrance), static_cast<int>(capacity));
|
||||||
|
|
||||||
if (mModel && mModel->hasProfit(mPtr))
|
if (mModel && mModel->hasProfit(mPtr))
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "inventorywindow.hpp"
|
#include "inventorywindow.hpp"
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
||||||
#include <MyGUI_Window.h>
|
#include <MyGUI_Window.h>
|
||||||
|
@ -612,7 +613,7 @@ namespace MWGui
|
||||||
float capacity = player.getClass().getCapacity(player);
|
float capacity = player.getClass().getCapacity(player);
|
||||||
float encumbrance = player.getClass().getEncumbrance(player);
|
float encumbrance = player.getClass().getEncumbrance(player);
|
||||||
mTradeModel->adjustEncumbrance(encumbrance);
|
mTradeModel->adjustEncumbrance(encumbrance);
|
||||||
mEncumbranceBar->setValue(static_cast<int>(encumbrance), static_cast<int>(capacity));
|
mEncumbranceBar->setValue(std::ceil(encumbrance), static_cast<int>(capacity));
|
||||||
}
|
}
|
||||||
|
|
||||||
void InventoryWindow::onFrame(float dt)
|
void InventoryWindow::onFrame(float dt)
|
||||||
|
|
|
@ -16,8 +16,13 @@ namespace
|
||||||
{
|
{
|
||||||
if (count == 1)
|
if (count == 1)
|
||||||
return "";
|
return "";
|
||||||
if (count > 9999)
|
|
||||||
return MyGUI::utility::toString(int(count/1000.f)) + "k";
|
if (count > 999999999)
|
||||||
|
return MyGUI::utility::toString(count/1000000000) + "b";
|
||||||
|
else if (count > 999999)
|
||||||
|
return MyGUI::utility::toString(count/1000000) + "m";
|
||||||
|
else if (count > 9999)
|
||||||
|
return MyGUI::utility::toString(count/1000) + "k";
|
||||||
else
|
else
|
||||||
return MyGUI::utility::toString(count);
|
return MyGUI::utility::toString(count);
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,6 +112,16 @@ namespace MWGui
|
||||||
|
|
||||||
MWWorld::Ptr player = MWMechanics::getPlayer();
|
MWWorld::Ptr player = MWMechanics::getPlayer();
|
||||||
|
|
||||||
|
/*
|
||||||
|
Start of tes3mp addition
|
||||||
|
|
||||||
|
Declare pointer to LocalPlayer for use in other additions
|
||||||
|
*/
|
||||||
|
mwmp::LocalPlayer* localPlayer = mwmp::Main::get().getLocalPlayer();
|
||||||
|
/*
|
||||||
|
End of tes3mp addition
|
||||||
|
*/
|
||||||
|
|
||||||
for (int i=0; i<mDays*24; ++i)
|
for (int i=0; i<mDays*24; ++i)
|
||||||
MWBase::Environment::get().getMechanicsManager()->rest(true);
|
MWBase::Environment::get().getMechanicsManager()->rest(true);
|
||||||
MWBase::Environment::get().getWorld()->advanceTime(mDays * 24);
|
MWBase::Environment::get().getWorld()->advanceTime(mDays * 24);
|
||||||
|
@ -129,7 +139,7 @@ namespace MWGui
|
||||||
|
|
||||||
Disable increases for Security and Sneak when using ignoreJailSkillIncreases
|
Disable increases for Security and Sneak when using ignoreJailSkillIncreases
|
||||||
*/
|
*/
|
||||||
if (mwmp::Main::get().getLocalPlayer()->ignoreJailSkillIncreases)
|
if (localPlayer->ignoreJailSkillIncreases)
|
||||||
value.setBase(std::max(0, value.getBase()-1));
|
value.setBase(std::max(0, value.getBase()-1));
|
||||||
else if (skill == ESM::Skill::Security || skill == ESM::Skill::Sneak)
|
else if (skill == ESM::Skill::Security || skill == ESM::Skill::Sneak)
|
||||||
/*
|
/*
|
||||||
|
@ -153,7 +163,7 @@ namespace MWGui
|
||||||
|
|
||||||
If we've received a packet overriding the default jail end text, use the new text
|
If we've received a packet overriding the default jail end text, use the new text
|
||||||
*/
|
*/
|
||||||
if (!mwmp::Main::get().getLocalPlayer()->jailEndText.empty())
|
if (!localPlayer->jailEndText.empty())
|
||||||
message = mwmp::Main::get().getLocalPlayer()->jailEndText;
|
message = mwmp::Main::get().getLocalPlayer()->jailEndText;
|
||||||
/*
|
/*
|
||||||
End of tes3mp addition
|
End of tes3mp addition
|
||||||
|
@ -176,7 +186,7 @@ namespace MWGui
|
||||||
|
|
||||||
Account for usage of ignoreJailSkillIncreases
|
Account for usage of ignoreJailSkillIncreases
|
||||||
*/
|
*/
|
||||||
if (!mwmp::Main::get().getLocalPlayer()->ignoreJailSkillIncreases &&
|
if (!localPlayer->ignoreJailSkillIncreases &&
|
||||||
(*it == ESM::Skill::Sneak || *it == ESM::Skill::Security))
|
(*it == ESM::Skill::Sneak || *it == ESM::Skill::Security))
|
||||||
/*
|
/*
|
||||||
End of tes3mp change (minor)
|
End of tes3mp change (minor)
|
||||||
|
@ -195,10 +205,10 @@ namespace MWGui
|
||||||
|
|
||||||
Reset all PlayerJail-related overrides
|
Reset all PlayerJail-related overrides
|
||||||
*/
|
*/
|
||||||
mwmp::Main::get().getLocalPlayer()->ignoreJailTeleportation = false;
|
localPlayer->ignoreJailTeleportation = false;
|
||||||
mwmp::Main::get().getLocalPlayer()->ignoreJailSkillIncreases = false;
|
localPlayer->ignoreJailSkillIncreases = false;
|
||||||
mwmp::Main::get().getLocalPlayer()->jailProgressText = "";
|
localPlayer->jailProgressText = "";
|
||||||
mwmp::Main::get().getLocalPlayer()->jailEndText = "";
|
localPlayer->jailEndText = "";
|
||||||
/*
|
/*
|
||||||
End of tes3mp addition
|
End of tes3mp addition
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -39,6 +39,7 @@ void getKeyFocusWidgets(MyGUI::Widget* parent, std::vector<MyGUI::Widget*>& resu
|
||||||
KeyboardNavigation::KeyboardNavigation()
|
KeyboardNavigation::KeyboardNavigation()
|
||||||
: mCurrentFocus(nullptr)
|
: mCurrentFocus(nullptr)
|
||||||
, mModalWindow(nullptr)
|
, mModalWindow(nullptr)
|
||||||
|
, mEnabled(true)
|
||||||
{
|
{
|
||||||
MyGUI::WidgetManager::getInstance().registerUnlinker(this);
|
MyGUI::WidgetManager::getInstance().registerUnlinker(this);
|
||||||
}
|
}
|
||||||
|
@ -101,6 +102,9 @@ bool isRootParent(MyGUI::Widget* widget, MyGUI::Widget* root)
|
||||||
|
|
||||||
void KeyboardNavigation::onFrame()
|
void KeyboardNavigation::onFrame()
|
||||||
{
|
{
|
||||||
|
if (!mEnabled)
|
||||||
|
return;
|
||||||
|
|
||||||
MyGUI::Widget* focus = MyGUI::InputManager::getInstance().getKeyFocusWidget();
|
MyGUI::Widget* focus = MyGUI::InputManager::getInstance().getKeyFocusWidget();
|
||||||
|
|
||||||
if (focus == mCurrentFocus)
|
if (focus == mCurrentFocus)
|
||||||
|
@ -150,6 +154,11 @@ void KeyboardNavigation::setModalWindow(MyGUI::Widget *window)
|
||||||
mModalWindow = window;
|
mModalWindow = window;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void KeyboardNavigation::setEnabled(bool enabled)
|
||||||
|
{
|
||||||
|
mEnabled = enabled;
|
||||||
|
}
|
||||||
|
|
||||||
enum Direction
|
enum Direction
|
||||||
{
|
{
|
||||||
D_Left,
|
D_Left,
|
||||||
|
@ -162,6 +171,9 @@ enum Direction
|
||||||
|
|
||||||
bool KeyboardNavigation::injectKeyPress(MyGUI::KeyCode key, unsigned int text)
|
bool KeyboardNavigation::injectKeyPress(MyGUI::KeyCode key, unsigned int text)
|
||||||
{
|
{
|
||||||
|
if (!mEnabled)
|
||||||
|
return false;
|
||||||
|
|
||||||
switch (key.getValue())
|
switch (key.getValue())
|
||||||
{
|
{
|
||||||
case MyGUI::KeyCode::ArrowLeft:
|
case MyGUI::KeyCode::ArrowLeft:
|
||||||
|
|
|
@ -28,6 +28,8 @@ namespace MWGui
|
||||||
|
|
||||||
void setModalWindow(MyGUI::Widget* window);
|
void setModalWindow(MyGUI::Widget* window);
|
||||||
|
|
||||||
|
void setEnabled(bool enabled);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool switchFocus(int direction, bool wrap);
|
bool switchFocus(int direction, bool wrap);
|
||||||
|
|
||||||
|
@ -40,6 +42,8 @@ namespace MWGui
|
||||||
|
|
||||||
MyGUI::Widget* mCurrentFocus;
|
MyGUI::Widget* mCurrentFocus;
|
||||||
MyGUI::Widget* mModalWindow;
|
MyGUI::Widget* mModalWindow;
|
||||||
|
|
||||||
|
bool mEnabled;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -163,7 +163,6 @@ namespace MWGui
|
||||||
if (mViewer->getIncrementalCompileOperation())
|
if (mViewer->getIncrementalCompileOperation())
|
||||||
{
|
{
|
||||||
mViewer->getIncrementalCompileOperation()->setMaximumNumOfObjectsToCompilePerFrame(100);
|
mViewer->getIncrementalCompileOperation()->setMaximumNumOfObjectsToCompilePerFrame(100);
|
||||||
mViewer->getIncrementalCompileOperation()->setTargetFrameRate(getTargetFrameRate());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Assign dummy bounding sphere callback to avoid the bounding sphere of the entire scene being recomputed after each frame of loading
|
// Assign dummy bounding sphere callback to avoid the bounding sphere of the entire scene being recomputed after each frame of loading
|
||||||
|
|
|
@ -120,6 +120,21 @@ namespace MWGui
|
||||||
}
|
}
|
||||||
if (type == sliderType)
|
if (type == sliderType)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
Start of tes3mp addition
|
||||||
|
|
||||||
|
Hide difficulty widget because it has no use in multiplayer, with
|
||||||
|
the difficulty being set by the server instead
|
||||||
|
*/
|
||||||
|
if (getSettingName(current) == "difficulty")
|
||||||
|
{
|
||||||
|
widget->setEnabled(false);
|
||||||
|
widget->setVisible(false);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
End of tes3mp addition
|
||||||
|
*/
|
||||||
|
|
||||||
MyGUI::ScrollBar* scroll = current->castType<MyGUI::ScrollBar>();
|
MyGUI::ScrollBar* scroll = current->castType<MyGUI::ScrollBar>();
|
||||||
std::string valueStr;
|
std::string valueStr;
|
||||||
if (getSettingValueType(current) == "Float")
|
if (getSettingValueType(current) == "Float")
|
||||||
|
|
|
@ -208,7 +208,7 @@ namespace MWGui
|
||||||
if ((mFilter & Filter_OnlyEnchanted) && !(item.mFlags & ItemStack::Flag_Enchanted))
|
if ((mFilter & Filter_OnlyEnchanted) && !(item.mFlags & ItemStack::Flag_Enchanted))
|
||||||
return false;
|
return false;
|
||||||
if ((mFilter & Filter_OnlyChargedSoulstones) && (base.getTypeName() != typeid(ESM::Miscellaneous).name()
|
if ((mFilter & Filter_OnlyChargedSoulstones) && (base.getTypeName() != typeid(ESM::Miscellaneous).name()
|
||||||
|| base.getCellRef().getSoul() == ""))
|
|| base.getCellRef().getSoul() == "" || !MWBase::Environment::get().getWorld()->getStore().get<ESM::Creature>().search(base.getCellRef().getSoul())))
|
||||||
return false;
|
return false;
|
||||||
if ((mFilter & Filter_OnlyRepairTools) && (base.getTypeName() != typeid(ESM::Repair).name()))
|
if ((mFilter & Filter_OnlyRepairTools) && (base.getTypeName() != typeid(ESM::Repair).name()))
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -249,7 +249,10 @@ namespace MWGui
|
||||||
MyGUI::FactoryManager::getInstance().registerFactory<ResourceImageSetPointerFix>("Resource", "ResourceImageSetPointer");
|
MyGUI::FactoryManager::getInstance().registerFactory<ResourceImageSetPointerFix>("Resource", "ResourceImageSetPointer");
|
||||||
MyGUI::ResourceManager::getInstance().load("core.xml");
|
MyGUI::ResourceManager::getInstance().load("core.xml");
|
||||||
|
|
||||||
|
bool keyboardNav = Settings::Manager::getBool("keyboard navigation", "GUI");
|
||||||
mKeyboardNavigation.reset(new KeyboardNavigation());
|
mKeyboardNavigation.reset(new KeyboardNavigation());
|
||||||
|
mKeyboardNavigation->setEnabled(keyboardNav);
|
||||||
|
Gui::ImageButton::setDefaultNeedKeyFocus(keyboardNav);
|
||||||
|
|
||||||
mLoadingScreen = new LoadingScreen(mResourceSystem->getVFS(), mViewer);
|
mLoadingScreen = new LoadingScreen(mResourceSystem->getVFS(), mViewer);
|
||||||
mWindows.push_back(mLoadingScreen);
|
mWindows.push_back(mLoadingScreen);
|
||||||
|
|
|
@ -64,10 +64,13 @@ bool AiPursue::execute (const MWWorld::Ptr& actor, CharacterController& characte
|
||||||
|
|
||||||
Because multiplayer does not pause the game, prevent infinite arrest loops by ignoring
|
Because multiplayer does not pause the game, prevent infinite arrest loops by ignoring
|
||||||
players already engaged in dialogue
|
players already engaged in dialogue
|
||||||
|
|
||||||
|
Additionally, do not arrest players who are currently jailed
|
||||||
*/
|
*/
|
||||||
if (target == MWBase::Environment::get().getWorld()->getPlayerPtr())
|
if (target == MWBase::Environment::get().getWorld()->getPlayerPtr())
|
||||||
{
|
{
|
||||||
if (MWBase::Environment::get().getWindowManager()->containsMode(MWGui::GM_Dialogue))
|
if (MWBase::Environment::get().getWindowManager()->containsMode(MWGui::GM_Dialogue) ||
|
||||||
|
MWBase::Environment::get().getWindowManager()->containsMode(MWGui::GM_Jail))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* version 3 along with this program. If not, see
|
* version 3 along with this program. If not, see
|
||||||
* http://www.gnu.org/licenses/ .
|
* https://www.gnu.org/licenses/ .
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "character.hpp"
|
#include "character.hpp"
|
||||||
|
|
|
@ -242,8 +242,11 @@ namespace MWMechanics
|
||||||
return 0;
|
return 0;
|
||||||
if(mSoulGemPtr.getCellRef().getSoul()=="")
|
if(mSoulGemPtr.getCellRef().getSoul()=="")
|
||||||
return 0;
|
return 0;
|
||||||
const ESM::Creature* soul = store.get<ESM::Creature>().find(mSoulGemPtr.getCellRef().getSoul());
|
const ESM::Creature* soul = store.get<ESM::Creature>().search(mSoulGemPtr.getCellRef().getSoul());
|
||||||
return soul->mData.mSoul;
|
if(soul)
|
||||||
|
return soul->mData.mSoul;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Enchanting::getMaxEnchantValue() const
|
int Enchanting::getMaxEnchantValue() const
|
||||||
|
|
|
@ -1144,8 +1144,11 @@ namespace MWMechanics
|
||||||
Misc::StringUtils::lowerCaseInPlace(owner.first);
|
Misc::StringUtils::lowerCaseInPlace(owner.first);
|
||||||
|
|
||||||
if (!Misc::StringUtils::ciEqual(item.getCellRef().getRefId(), MWWorld::ContainerStore::sGoldId))
|
if (!Misc::StringUtils::ciEqual(item.getCellRef().getRefId(), MWWorld::ContainerStore::sGoldId))
|
||||||
mStolenItems[Misc::StringUtils::lowerCase(item.getCellRef().getRefId())][owner] += count;
|
{
|
||||||
|
const MWWorld::Ptr victimRef = MWBase::Environment::get().getWorld()->searchPtr(ownerCellRef->getOwner(), true);
|
||||||
|
if (victimRef.isEmpty() || !victimRef.getClass().getCreatureStats(victimRef).isDead())
|
||||||
|
mStolenItems[Misc::StringUtils::lowerCase(item.getCellRef().getRefId())][owner] += count;
|
||||||
|
}
|
||||||
if (alarm)
|
if (alarm)
|
||||||
commitCrime(ptr, victim, OT_Theft, item.getClass().getValue(item) * count);
|
commitCrime(ptr, victim, OT_Theft, item.getClass().getValue(item) * count);
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
// See http://theory.stanford.edu/~amitp/GameProgramming/Heuristics.html
|
// See https://theory.stanford.edu/~amitp/GameProgramming/Heuristics.html
|
||||||
//
|
//
|
||||||
// One of the smallest cost in Seyda Neen is between points 77 & 78:
|
// One of the smallest cost in Seyda Neen is between points 77 & 78:
|
||||||
// pt x y
|
// pt x y
|
||||||
|
|
|
@ -49,6 +49,7 @@ LocalPlayer::LocalPlayer()
|
||||||
charGenState.isFinished = false;
|
charGenState.isFinished = false;
|
||||||
|
|
||||||
difficulty = 0;
|
difficulty = 0;
|
||||||
|
physicsFramerate = 60.0;
|
||||||
consoleAllowed = false;
|
consoleAllowed = false;
|
||||||
bedRestAllowed = true;
|
bedRestAllowed = true;
|
||||||
wildernessRestAllowed = true;
|
wildernessRestAllowed = true;
|
||||||
|
@ -69,9 +70,9 @@ LocalPlayer::LocalPlayer()
|
||||||
scale = 1;
|
scale = 1;
|
||||||
isWerewolf = false;
|
isWerewolf = false;
|
||||||
|
|
||||||
diedSinceArrestAttempt = false;
|
|
||||||
isReceivingQuickKeys = false;
|
isReceivingQuickKeys = false;
|
||||||
isPlayingAnimation = false;
|
isPlayingAnimation = false;
|
||||||
|
diedSinceArrestAttempt = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
LocalPlayer::~LocalPlayer()
|
LocalPlayer::~LocalPlayer()
|
||||||
|
@ -808,9 +809,11 @@ void LocalPlayer::resurrect()
|
||||||
// Record that the player has died since the last attempt was made to arrest them,
|
// Record that the player has died since the last attempt was made to arrest them,
|
||||||
// used to make guards lenient enough to attempt an arrest again
|
// used to make guards lenient enough to attempt an arrest again
|
||||||
diedSinceArrestAttempt = true;
|
diedSinceArrestAttempt = true;
|
||||||
|
|
||||||
LOG_APPEND(Log::LOG_INFO, "- diedSinceArrestAttempt is now true");
|
LOG_APPEND(Log::LOG_INFO, "- diedSinceArrestAttempt is now true");
|
||||||
|
|
||||||
|
// Record that we are no longer a known werewolf, to avoid being attacked infinitely
|
||||||
|
MWBase::Environment::get().getWorld()->setGlobalInt("pcknownwerewolf", 0);
|
||||||
|
|
||||||
// Ensure we unequip any items with constant effects that can put us into an infinite
|
// Ensure we unequip any items with constant effects that can put us into an infinite
|
||||||
// death loop
|
// death loop
|
||||||
MechanicsHelper::unequipItemsByEffect(ptrPlayer, ESM::Enchantment::ConstantEffect, ESM::MagicEffect::DrainHealth);
|
MechanicsHelper::unequipItemsByEffect(ptrPlayer, ESM::Enchantment::ConstantEffect, ESM::MagicEffect::DrainHealth);
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#define OPENMW_PROCESSORGAMESETTINGS_HPP
|
#define OPENMW_PROCESSORGAMESETTINGS_HPP
|
||||||
|
|
||||||
#include "apps/openmw/mwbase/environment.hpp"
|
#include "apps/openmw/mwbase/environment.hpp"
|
||||||
|
#include "apps/openmw/mwworld/worldimp.hpp"
|
||||||
#include "apps/openmw/mwgui/windowmanagerimp.hpp"
|
#include "apps/openmw/mwgui/windowmanagerimp.hpp"
|
||||||
|
|
||||||
#include "../PlayerProcessor.hpp"
|
#include "../PlayerProcessor.hpp"
|
||||||
|
@ -28,6 +29,8 @@ namespace mwmp
|
||||||
(!player->bedRestAllowed || !player->wildernessRestAllowed || !player->waitAllowed))
|
(!player->bedRestAllowed || !player->wildernessRestAllowed || !player->waitAllowed))
|
||||||
MWBase::Environment::get().getWindowManager()->popGuiMode();
|
MWBase::Environment::get().getWindowManager()->popGuiMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MWBase::Environment::get().getWorld()->setPhysicsFramerate(player->physicsFramerate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -794,6 +794,28 @@ namespace MWPhysics
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Start of tes3mp addition
|
||||||
|
|
||||||
|
Make it possible to set the physics framerate from elsewhere
|
||||||
|
*/
|
||||||
|
void PhysicsSystem::setPhysicsFramerate(float physFramerate)
|
||||||
|
{
|
||||||
|
if (physFramerate > 0 && physFramerate < 100)
|
||||||
|
{
|
||||||
|
mPhysicsDt = 1.f / physFramerate;
|
||||||
|
std::cerr << "Warning: physics framerate was overridden (a new value is " << physFramerate << ")." << std::endl;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::cerr << "Warning: attempted to override physics framerate with new value of " << physFramerate <<
|
||||||
|
", but it was outside accepted values." << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
End of tes3mp addition
|
||||||
|
*/
|
||||||
|
|
||||||
class DeepestNotMeContactTestResultCallback : public btCollisionWorld::ContactResultCallback
|
class DeepestNotMeContactTestResultCallback : public btCollisionWorld::ContactResultCallback
|
||||||
{
|
{
|
||||||
const btCollisionObject* mMe;
|
const btCollisionObject* mMe;
|
||||||
|
|
|
@ -170,6 +170,16 @@ namespace MWPhysics
|
||||||
|
|
||||||
bool isOnSolidGround (const MWWorld::Ptr& actor) const;
|
bool isOnSolidGround (const MWWorld::Ptr& actor) const;
|
||||||
|
|
||||||
|
/*
|
||||||
|
Start of tes3mp addition
|
||||||
|
|
||||||
|
Make it possible to set the physics framerate from elsewhere
|
||||||
|
*/
|
||||||
|
void setPhysicsFramerate(float physFramerate);
|
||||||
|
/*
|
||||||
|
End of tes3mp addition
|
||||||
|
*/
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void updateWater();
|
void updateWater();
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include <osg/Texture2D>
|
#include <osg/Texture2D>
|
||||||
#include <osg/ComputeBoundsVisitor>
|
#include <osg/ComputeBoundsVisitor>
|
||||||
#include <osg/LightSource>
|
#include <osg/LightSource>
|
||||||
|
#include <osg/PolygonMode>
|
||||||
|
|
||||||
#include <osgDB/ReadFile>
|
#include <osgDB/ReadFile>
|
||||||
|
|
||||||
|
@ -174,6 +175,7 @@ osg::ref_ptr<osg::Camera> LocalMap::createOrthographicCamera(float x, float y, f
|
||||||
camera->setNodeMask(Mask_RenderToTexture);
|
camera->setNodeMask(Mask_RenderToTexture);
|
||||||
|
|
||||||
osg::ref_ptr<osg::StateSet> stateset = new osg::StateSet;
|
osg::ref_ptr<osg::StateSet> stateset = new osg::StateSet;
|
||||||
|
stateset->setAttribute(new osg::PolygonMode(osg::PolygonMode::FRONT_AND_BACK, osg::PolygonMode::FILL), osg::StateAttribute::OVERRIDE);
|
||||||
|
|
||||||
// assign large value to effectively turn off fog
|
// assign large value to effectively turn off fog
|
||||||
// shaders don't respect glDisable(GL_FOG)
|
// shaders don't respect glDisable(GL_FOG)
|
||||||
|
|
|
@ -205,7 +205,10 @@ namespace MWRender
|
||||||
mObjects.reset(new Objects(mResourceSystem, sceneRoot, mUnrefQueue.get()));
|
mObjects.reset(new Objects(mResourceSystem, sceneRoot, mUnrefQueue.get()));
|
||||||
|
|
||||||
if (getenv("OPENMW_DONT_PRECOMPILE") == NULL)
|
if (getenv("OPENMW_DONT_PRECOMPILE") == NULL)
|
||||||
|
{
|
||||||
mViewer->setIncrementalCompileOperation(new osgUtil::IncrementalCompileOperation);
|
mViewer->setIncrementalCompileOperation(new osgUtil::IncrementalCompileOperation);
|
||||||
|
mViewer->getIncrementalCompileOperation()->setTargetFrameRate(Settings::Manager::getFloat("target framerate", "Cells"));
|
||||||
|
}
|
||||||
|
|
||||||
mResourceSystem->getSceneManager()->setIncrementalCompileOperation(mViewer->getIncrementalCompileOperation());
|
mResourceSystem->getSceneManager()->setIncrementalCompileOperation(mViewer->getIncrementalCompileOperation());
|
||||||
|
|
||||||
|
@ -223,6 +226,7 @@ namespace MWRender
|
||||||
else
|
else
|
||||||
mTerrain.reset(new Terrain::TerrainGrid(sceneRoot, mRootNode, mResourceSystem, mTerrainStorage, Mask_Terrain, Mask_PreCompile));
|
mTerrain.reset(new Terrain::TerrainGrid(sceneRoot, mRootNode, mResourceSystem, mTerrainStorage, Mask_Terrain, Mask_PreCompile));
|
||||||
mTerrain->setDefaultViewer(mViewer->getCamera());
|
mTerrain->setDefaultViewer(mViewer->getCamera());
|
||||||
|
mTerrain->setTargetFrameRate(Settings::Manager::getFloat("target framerate", "Cells"));
|
||||||
|
|
||||||
mCamera.reset(new Camera(mViewer->getCamera()));
|
mCamera.reset(new Camera(mViewer->getCamera()));
|
||||||
|
|
||||||
|
|
|
@ -508,7 +508,13 @@ namespace MWScript
|
||||||
store.get<ESM::Creature>().find(creature); // This line throws an exception if it can't find the creature
|
store.get<ESM::Creature>().find(creature); // This line throws an exception if it can't find the creature
|
||||||
|
|
||||||
MWWorld::Ptr item = *ptr.getClass().getContainerStore(ptr).add(gem, 1, ptr);
|
MWWorld::Ptr item = *ptr.getClass().getContainerStore(ptr).add(gem, 1, ptr);
|
||||||
|
|
||||||
|
// Set the soul on just one of the gems, not the whole stack
|
||||||
|
item.getContainerStore()->unstack(item, ptr);
|
||||||
item.getCellRef().setSoul(creature);
|
item.getCellRef().setSoul(creature);
|
||||||
|
|
||||||
|
// Restack the gem with other gems with the same soul
|
||||||
|
item.getContainerStore()->restack(item);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
* License along with this library; if not, write to the
|
* License along with this library; if not, write to the
|
||||||
* Free Software Foundation, Inc.,
|
* Free Software Foundation, Inc.,
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
* Or go to http://www.gnu.org/copyleft/lgpl.html
|
* Or go to https://www.gnu.org/copyleft/lgpl.html
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef AL_ALEXT_H
|
#ifndef AL_ALEXT_H
|
||||||
|
|
|
@ -21,7 +21,7 @@ extern "C"
|
||||||
|
|
||||||
// From version 54.56 binkaudio encoding format changed from S16 to FLTP. See:
|
// From version 54.56 binkaudio encoding format changed from S16 to FLTP. See:
|
||||||
// https://gitorious.org/ffmpeg/ffmpeg/commit/7bfd1766d1c18f07b0a2dd042418a874d49ea60d
|
// https://gitorious.org/ffmpeg/ffmpeg/commit/7bfd1766d1c18f07b0a2dd042418a874d49ea60d
|
||||||
// http://ffmpeg.zeranoe.com/forum/viewtopic.php?f=15&t=872
|
// https://ffmpeg.zeranoe.com/forum/viewtopic.php?f=15&t=872
|
||||||
#include <libswresample/swresample.h>
|
#include <libswresample/swresample.h>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
38
apps/openmw/mwstate/quicksavemanager.cpp
Normal file
38
apps/openmw/mwstate/quicksavemanager.cpp
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
#include "quicksavemanager.hpp"
|
||||||
|
|
||||||
|
MWState::QuickSaveManager::QuickSaveManager(std::string &saveName, unsigned int maxSaves)
|
||||||
|
{
|
||||||
|
this->mSaveName = saveName;
|
||||||
|
this->mMaxSaves = maxSaves;
|
||||||
|
this->mOldestSlotVisited = NULL;
|
||||||
|
this->mSlotsVisited = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MWState::QuickSaveManager::visitSave(const Slot *saveSlot)
|
||||||
|
{
|
||||||
|
if(mSaveName == saveSlot->mProfile.mDescription)
|
||||||
|
{
|
||||||
|
++mSlotsVisited;
|
||||||
|
if(isOldestSave(saveSlot))
|
||||||
|
mOldestSlotVisited = saveSlot;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MWState::QuickSaveManager::isOldestSave(const Slot *compare)
|
||||||
|
{
|
||||||
|
if(mOldestSlotVisited == NULL)
|
||||||
|
return true;
|
||||||
|
return (compare->mTimeStamp <= mOldestSlotVisited->mTimeStamp);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MWState::QuickSaveManager::shouldCreateNewSlot()
|
||||||
|
{
|
||||||
|
return (mSlotsVisited < mMaxSaves);
|
||||||
|
}
|
||||||
|
|
||||||
|
const MWState::Slot *MWState::QuickSaveManager::getNextQuickSaveSlot()
|
||||||
|
{
|
||||||
|
if(shouldCreateNewSlot())
|
||||||
|
return NULL;
|
||||||
|
return mOldestSlotVisited;
|
||||||
|
}
|
35
apps/openmw/mwstate/quicksavemanager.hpp
Normal file
35
apps/openmw/mwstate/quicksavemanager.hpp
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
#ifndef GAME_STATE_QUICKSAVEMANAGER_H
|
||||||
|
#define GAME_STATE_QUICKSAVEMANAGER_H
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include "character.hpp"
|
||||||
|
#include "../mwbase/statemanager.hpp"
|
||||||
|
|
||||||
|
namespace MWState{
|
||||||
|
class QuickSaveManager{
|
||||||
|
std::string mSaveName;
|
||||||
|
unsigned int mMaxSaves;
|
||||||
|
unsigned int mSlotsVisited;
|
||||||
|
const Slot *mOldestSlotVisited;
|
||||||
|
private:
|
||||||
|
bool shouldCreateNewSlot();
|
||||||
|
bool isOldestSave(const Slot *compare);
|
||||||
|
public:
|
||||||
|
QuickSaveManager(std::string &saveName, unsigned int maxSaves);
|
||||||
|
///< A utility class to manage multiple quicksave slots
|
||||||
|
///
|
||||||
|
/// \param saveName The name of the save ("QuickSave", "AutoSave", etc)
|
||||||
|
/// \param maxSaves The maximum number of save slots to create before recycling old ones
|
||||||
|
|
||||||
|
void visitSave(const Slot *saveSlot);
|
||||||
|
///< Visits the given \a slot \a
|
||||||
|
|
||||||
|
const Slot *getNextQuickSaveSlot();
|
||||||
|
///< Get the slot that the next quicksave should use.
|
||||||
|
///
|
||||||
|
///\return Either the oldest quicksave slot visited, or NULL if a new slot can be made
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -37,6 +37,8 @@
|
||||||
|
|
||||||
#include "../mwscript/globalscripts.hpp"
|
#include "../mwscript/globalscripts.hpp"
|
||||||
|
|
||||||
|
#include "quicksavemanager.hpp"
|
||||||
|
|
||||||
void MWState::StateManager::cleanup (bool force)
|
void MWState::StateManager::cleanup (bool force)
|
||||||
{
|
{
|
||||||
if (mState!=State_NoGame || force)
|
if (mState!=State_NoGame || force)
|
||||||
|
@ -324,20 +326,25 @@ void MWState::StateManager::quickSave (std::string name)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const Slot* slot = NULL;
|
int maxSaves = Settings::Manager::getInt("max quicksaves", "Saves");
|
||||||
Character* currentCharacter = getCurrentCharacter(); //Get current character
|
if(maxSaves < 1)
|
||||||
|
maxSaves = 1;
|
||||||
|
|
||||||
|
Character* currentCharacter = getCurrentCharacter(); //Get current character
|
||||||
|
QuickSaveManager saveFinder = QuickSaveManager(name, maxSaves);
|
||||||
|
|
||||||
//Find quicksave slot
|
|
||||||
if (currentCharacter)
|
if (currentCharacter)
|
||||||
{
|
{
|
||||||
for (Character::SlotIterator it = currentCharacter->begin(); it != currentCharacter->end(); ++it)
|
for (Character::SlotIterator it = currentCharacter->begin(); it != currentCharacter->end(); ++it)
|
||||||
{
|
{
|
||||||
if (it->mProfile.mDescription == name)
|
//Visiting slots allows the quicksave finder to find the oldest quicksave
|
||||||
slot = &*it;
|
saveFinder.visitSave(&*it);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
saveGame(name, slot);
|
//Once all the saves have been visited, the save finder can tell us which
|
||||||
|
//one to replace (or create)
|
||||||
|
saveGame(name, saveFinder.getNextQuickSaveSlot());
|
||||||
}
|
}
|
||||||
|
|
||||||
void MWState::StateManager::loadGame(const std::string& filepath)
|
void MWState::StateManager::loadGame(const std::string& filepath)
|
||||||
|
|
|
@ -48,6 +48,12 @@ void MWWorld::LiveCellRefBase::loadImp (const ESM::ObjectState& state)
|
||||||
}
|
}
|
||||||
|
|
||||||
mClass->readAdditionalState (ptr, state);
|
mClass->readAdditionalState (ptr, state);
|
||||||
|
|
||||||
|
if (!mRef.getSoul().empty() && !MWBase::Environment::get().getWorld()->getStore().get<ESM::Creature>().search(mRef.getSoul()))
|
||||||
|
{
|
||||||
|
std::cerr << "Soul '" << mRef.getSoul() << "' not found, removing the soul from soul gem" << std::endl;
|
||||||
|
mRef.setSoul(std::string());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MWWorld::LiveCellRefBase::saveImp (ESM::ObjectState& state) const
|
void MWWorld::LiveCellRefBase::saveImp (ESM::ObjectState& state) const
|
||||||
|
|
|
@ -592,7 +592,7 @@ namespace MWWorld
|
||||||
const ESM::Cell *ptr = search(id);
|
const ESM::Cell *ptr = search(id);
|
||||||
if (ptr == 0) {
|
if (ptr == 0) {
|
||||||
std::ostringstream msg;
|
std::ostringstream msg;
|
||||||
msg << "Interior cell '" << id << "' not found";
|
msg << "Cell '" << id << "' not found";
|
||||||
throw std::runtime_error(msg.str());
|
throw std::runtime_error(msg.str());
|
||||||
}
|
}
|
||||||
return ptr;
|
return ptr;
|
||||||
|
@ -607,6 +607,11 @@ namespace MWWorld
|
||||||
}
|
}
|
||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
|
void Store<ESM::Cell>::clearDynamic()
|
||||||
|
{
|
||||||
|
setUp();
|
||||||
|
}
|
||||||
|
|
||||||
void Store<ESM::Cell>::setUp()
|
void Store<ESM::Cell>::setUp()
|
||||||
{
|
{
|
||||||
typedef DynamicExt::iterator ExtIterator;
|
typedef DynamicExt::iterator ExtIterator;
|
||||||
|
|
|
@ -293,6 +293,7 @@ namespace MWWorld
|
||||||
const ESM::Cell *find(const std::string &id) const;
|
const ESM::Cell *find(const std::string &id) const;
|
||||||
const ESM::Cell *find(int x, int y) const;
|
const ESM::Cell *find(int x, int y) const;
|
||||||
|
|
||||||
|
virtual void clearDynamic();
|
||||||
void setUp();
|
void setUp();
|
||||||
|
|
||||||
RecordId load(ESM::ESMReader &esm);
|
RecordId load(ESM::ESMReader &esm);
|
||||||
|
|
|
@ -330,7 +330,6 @@ namespace MWWorld
|
||||||
mWorldScene->clear();
|
mWorldScene->clear();
|
||||||
|
|
||||||
mStore.clearDynamic();
|
mStore.clearDynamic();
|
||||||
mStore.setUp();
|
|
||||||
|
|
||||||
if (mPlayer)
|
if (mPlayer)
|
||||||
{
|
{
|
||||||
|
@ -1525,6 +1524,19 @@ namespace MWWorld
|
||||||
End of tes3mp addition
|
End of tes3mp addition
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Start of tes3mp addition
|
||||||
|
|
||||||
|
Make it possible to set the physics framerate from elsewhere
|
||||||
|
*/
|
||||||
|
void World::setPhysicsFramerate(float physFramerate)
|
||||||
|
{
|
||||||
|
mPhysics->setPhysicsFramerate(physFramerate);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
End of tes3mp addition
|
||||||
|
*/
|
||||||
|
|
||||||
void World::doPhysics(float duration)
|
void World::doPhysics(float duration)
|
||||||
{
|
{
|
||||||
mPhysics->stepSimulation(duration);
|
mPhysics->stepSimulation(duration);
|
||||||
|
|
|
@ -417,6 +417,16 @@ namespace MWWorld
|
||||||
End of tes3mp addition
|
End of tes3mp addition
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Start of tes3mp addition
|
||||||
|
|
||||||
|
Make it possible to set the physics framerate from elsewhere
|
||||||
|
*/
|
||||||
|
void World::setPhysicsFramerate(float physFramerate);
|
||||||
|
/*
|
||||||
|
End of tes3mp addition
|
||||||
|
*/
|
||||||
|
|
||||||
bool castRay (float x1, float y1, float z1, float x2, float y2, float z2) override;
|
bool castRay (float x1, float y1, float z1, float x2, float y2, float z2) override;
|
||||||
///< cast a Ray and return true if there is an object in the ray path.
|
///< cast a Ray and return true if there is an object in the ray path.
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
# This file is part of the CMake build system for OGRE
|
# This file is part of the CMake build system for OGRE
|
||||||
# (Object-oriented Graphics Rendering Engine)
|
# (Object-oriented Graphics Rendering Engine)
|
||||||
# For the latest info, see http://www.ogre3d.org/
|
# For the latest info, see https://www.ogre3d.org/
|
||||||
#
|
#
|
||||||
# The contents of this file are placed in the public domain. Feel
|
# The contents of this file are placed in the public domain. Feel
|
||||||
# free to make use of it in any way you like.
|
# free to make use of it in any way you like.
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
# LIBUNSHIELD_FOUND, if false, do not try to link to LibUnshield
|
# LIBUNSHIELD_FOUND, if false, do not try to link to LibUnshield
|
||||||
# LIBUNSHIELD_INCLUDE_DIRS, where to find the headers
|
# LIBUNSHIELD_INCLUDE_DIRS, where to find the headers
|
||||||
#
|
#
|
||||||
# Created by Tom Mason (wheybags) for OpenMW (http://openmw.org), based on FindMPG123.cmake
|
# Created by Tom Mason (wheybags) for OpenMW (https://openmw.org), based on FindMPG123.cmake
|
||||||
#
|
#
|
||||||
# Ripped off from other sources. In fact, this file is so generic (I
|
# Ripped off from other sources. In fact, this file is so generic (I
|
||||||
# just did a search and replace on another file) that I wonder why the
|
# just did a search and replace on another file) that I wonder why the
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
# This file is part of the CMake build system for OGRE
|
# This file is part of the CMake build system for OGRE
|
||||||
# (Object-oriented Graphics Rendering Engine)
|
# (Object-oriented Graphics Rendering Engine)
|
||||||
# For the latest info, see http://www.ogre3d.org/
|
# For the latest info, see https://www.ogre3d.org/
|
||||||
#
|
#
|
||||||
# The contents of this file are placed in the public domain. Feel
|
# The contents of this file are placed in the public domain. Feel
|
||||||
# free to make use of it in any way you like.
|
# free to make use of it in any way you like.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
OpenMW - The completely unofficial reimplementation of Morrowind
|
OpenMW - The completely unofficial reimplementation of Morrowind
|
||||||
Copyright (C) 2008-2010 Nicolay Korslund
|
Copyright (C) 2008-2010 Nicolay Korslund
|
||||||
Email: < korslund@gmail.com >
|
Email: < korslund@gmail.com >
|
||||||
WWW: http://openmw.sourceforge.net/
|
WWW: https://openmw.org/
|
||||||
|
|
||||||
This file (bsa_file.cpp) is part of the OpenMW package.
|
This file (bsa_file.cpp) is part of the OpenMW package.
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
version 3 along with this program. If not, see
|
version 3 along with this program. If not, see
|
||||||
http://www.gnu.org/licenses/ .
|
https://www.gnu.org/licenses/ .
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
OpenMW - The completely unofficial reimplementation of Morrowind
|
OpenMW - The completely unofficial reimplementation of Morrowind
|
||||||
Copyright (C) 2008-2010 Nicolay Korslund
|
Copyright (C) 2008-2010 Nicolay Korslund
|
||||||
Email: < korslund@gmail.com >
|
Email: < korslund@gmail.com >
|
||||||
WWW: http://openmw.sourceforge.net/
|
WWW: https://openmw.org/
|
||||||
|
|
||||||
This file (bsa_file.h) is part of the OpenMW package.
|
This file (bsa_file.h) is part of the OpenMW package.
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
version 3 along with this program. If not, see
|
version 3 along with this program. If not, see
|
||||||
http://www.gnu.org/licenses/ .
|
https://www.gnu.org/licenses/ .
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
OpenMW - The completely unofficial reimplementation of Morrowind
|
OpenMW - The completely unofficial reimplementation of Morrowind
|
||||||
Copyright (C) 2008-2010 Nicolay Korslund
|
Copyright (C) 2008-2010 Nicolay Korslund
|
||||||
Email: < korslund@gmail.com >
|
Email: < korslund@gmail.com >
|
||||||
WWW: http://openmw.sourceforge.net/
|
WWW: https://openmw.org/
|
||||||
|
|
||||||
This file (controlled.h) is part of the OpenMW package.
|
This file (controlled.h) is part of the OpenMW package.
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
version 3 along with this program. If not, see
|
version 3 along with this program. If not, see
|
||||||
http://www.gnu.org/licenses/ .
|
https://www.gnu.org/licenses/ .
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
OpenMW - The completely unofficial reimplementation of Morrowind
|
OpenMW - The completely unofficial reimplementation of Morrowind
|
||||||
Copyright (C) 2008-2010 Nicolay Korslund
|
Copyright (C) 2008-2010 Nicolay Korslund
|
||||||
Email: < korslund@gmail.com >
|
Email: < korslund@gmail.com >
|
||||||
WWW: http://openmw.sourceforge.net/
|
WWW: https://openmw.org/
|
||||||
|
|
||||||
This file (controller.h) is part of the OpenMW package.
|
This file (controller.h) is part of the OpenMW package.
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
version 3 along with this program. If not, see
|
version 3 along with this program. If not, see
|
||||||
http://www.gnu.org/licenses/ .
|
https://www.gnu.org/licenses/ .
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
OpenMW - The completely unofficial reimplementation of Morrowind
|
OpenMW - The completely unofficial reimplementation of Morrowind
|
||||||
Copyright (C) 2008-2010 Nicolay Korslund
|
Copyright (C) 2008-2010 Nicolay Korslund
|
||||||
Email: < korslund@gmail.com >
|
Email: < korslund@gmail.com >
|
||||||
WWW: http://openmw.sourceforge.net/
|
WWW: https://openmw.org/
|
||||||
|
|
||||||
This file (data.h) is part of the OpenMW package.
|
This file (data.h) is part of the OpenMW package.
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
version 3 along with this program. If not, see
|
version 3 along with this program. If not, see
|
||||||
http://www.gnu.org/licenses/ .
|
https://www.gnu.org/licenses/ .
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
OpenMW - The completely unofficial reimplementation of Morrowind
|
OpenMW - The completely unofficial reimplementation of Morrowind
|
||||||
Copyright (C) 2008-2010 Nicolay Korslund
|
Copyright (C) 2008-2010 Nicolay Korslund
|
||||||
Email: < korslund@gmail.com >
|
Email: < korslund@gmail.com >
|
||||||
WWW: http://openmw.sourceforge.net/
|
WWW: https://openmw.org/
|
||||||
|
|
||||||
This file (effect.h) is part of the OpenMW package.
|
This file (effect.h) is part of the OpenMW package.
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
version 3 along with this program. If not, see
|
version 3 along with this program. If not, see
|
||||||
http://www.gnu.org/licenses/ .
|
https://www.gnu.org/licenses/ .
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
OpenMW - The completely unofficial reimplementation of Morrowind
|
OpenMW - The completely unofficial reimplementation of Morrowind
|
||||||
Copyright (C) 2008-2010 Nicolay Korslund
|
Copyright (C) 2008-2010 Nicolay Korslund
|
||||||
Email: < korslund@gmail.com >
|
Email: < korslund@gmail.com >
|
||||||
WWW: http://openmw.sourceforge.net/
|
WWW: https://openmw.org/
|
||||||
|
|
||||||
This file (extra.h) is part of the OpenMW package.
|
This file (extra.h) is part of the OpenMW package.
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
version 3 along with this program. If not, see
|
version 3 along with this program. If not, see
|
||||||
http://www.gnu.org/licenses/ .
|
https://www.gnu.org/licenses/ .
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
OpenMW - The completely unofficial reimplementation of Morrowind
|
OpenMW - The completely unofficial reimplementation of Morrowind
|
||||||
Copyright (C) 2008-2010 Nicolay Korslund
|
Copyright (C) 2008-2010 Nicolay Korslund
|
||||||
Email: < korslund@gmail.com >
|
Email: < korslund@gmail.com >
|
||||||
WWW: http://openmw.sourceforge.net/
|
WWW: https://openmw.org/
|
||||||
|
|
||||||
This file (nif_types.h) is part of the OpenMW package.
|
This file (nif_types.h) is part of the OpenMW package.
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
version 3 along with this program. If not, see
|
version 3 along with this program. If not, see
|
||||||
http://www.gnu.org/licenses/ .
|
https://www.gnu.org/licenses/ .
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
OpenMW - The completely unofficial reimplementation of Morrowind
|
OpenMW - The completely unofficial reimplementation of Morrowind
|
||||||
Copyright (C) 2008-2010 Nicolay Korslund
|
Copyright (C) 2008-2010 Nicolay Korslund
|
||||||
Email: < korslund@gmail.com >
|
Email: < korslund@gmail.com >
|
||||||
WWW: http://openmw.sourceforge.net/
|
WWW: https://openmw.org/
|
||||||
|
|
||||||
This file (property.h) is part of the OpenMW package.
|
This file (property.h) is part of the OpenMW package.
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
version 3 along with this program. If not, see
|
version 3 along with this program. If not, see
|
||||||
http://www.gnu.org/licenses/ .
|
https://www.gnu.org/licenses/ .
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
OpenMW - The completely unofficial reimplementation of Morrowind
|
OpenMW - The completely unofficial reimplementation of Morrowind
|
||||||
Copyright (C) 2008-2010 Nicolay Korslund
|
Copyright (C) 2008-2010 Nicolay Korslund
|
||||||
Email: < korslund@gmail.com >
|
Email: < korslund@gmail.com >
|
||||||
WWW: http://openmw.sourceforge.net/
|
WWW: https://openmw.org/
|
||||||
|
|
||||||
This file (record.h) is part of the OpenMW package.
|
This file (record.h) is part of the OpenMW package.
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
version 3 along with this program. If not, see
|
version 3 along with this program. If not, see
|
||||||
http://www.gnu.org/licenses/ .
|
https://www.gnu.org/licenses/ .
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -245,11 +245,6 @@ void BulletNifLoader::handleNiTriShape(const Nif::NiTriShape *shape, int flags,
|
||||||
{
|
{
|
||||||
assert(shape != NULL);
|
assert(shape != NULL);
|
||||||
|
|
||||||
// Interpret flags
|
|
||||||
bool hidden = (flags&Nif::NiNode::Flag_Hidden) != 0;
|
|
||||||
bool collide = (flags&Nif::NiNode::Flag_MeshCollision) != 0;
|
|
||||||
bool bbcollide = (flags&Nif::NiNode::Flag_BBoxCollision) != 0;
|
|
||||||
|
|
||||||
// If the object was marked "NCO" earlier, it shouldn't collide with
|
// If the object was marked "NCO" earlier, it shouldn't collide with
|
||||||
// anything. So don't do anything.
|
// anything. So don't do anything.
|
||||||
if ((flags & 0x800))
|
if ((flags & 0x800))
|
||||||
|
@ -257,11 +252,6 @@ void BulletNifLoader::handleNiTriShape(const Nif::NiTriShape *shape, int flags,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!collide && !bbcollide && hidden)
|
|
||||||
// This mesh apparently isn't being used for anything, so don't
|
|
||||||
// bother setting it up.
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!shape->skin.empty())
|
if (!shape->skin.empty())
|
||||||
isAnimated = false;
|
isAnimated = false;
|
||||||
|
|
||||||
|
|
|
@ -303,6 +303,7 @@ namespace mwmp
|
||||||
} weather;
|
} weather;
|
||||||
|
|
||||||
int difficulty;
|
int difficulty;
|
||||||
|
float physicsFramerate;
|
||||||
bool consoleAllowed;
|
bool consoleAllowed;
|
||||||
bool bedRestAllowed;
|
bool bedRestAllowed;
|
||||||
bool wildernessRestAllowed;
|
bool wildernessRestAllowed;
|
||||||
|
|
|
@ -14,6 +14,7 @@ void PacketGameSettings::Packet(RakNet::BitStream *bs, bool send)
|
||||||
PlayerPacket::Packet(bs, send);
|
PlayerPacket::Packet(bs, send);
|
||||||
|
|
||||||
RW(player->difficulty, send);
|
RW(player->difficulty, send);
|
||||||
|
RW(player->physicsFramerate, send);
|
||||||
RW(player->consoleAllowed, send);
|
RW(player->consoleAllowed, send);
|
||||||
RW(player->bedRestAllowed, send);
|
RW(player->bedRestAllowed, send);
|
||||||
RW(player->wildernessRestAllowed, send);
|
RW(player->wildernessRestAllowed, send);
|
||||||
|
|
|
@ -292,7 +292,7 @@ public:
|
||||||
ostream << "# to its default, simply remove it from this file. For available" << std::endl;
|
ostream << "# to its default, simply remove it from this file. For available" << std::endl;
|
||||||
ostream << "# settings, see the file 'settings-default.cfg' or the documentation at:" << std::endl;
|
ostream << "# settings, see the file 'settings-default.cfg' or the documentation at:" << std::endl;
|
||||||
ostream << "#" << std::endl;
|
ostream << "#" << std::endl;
|
||||||
ostream << "# http://openmw.readthedocs.io/en/master/reference/modding/settings/index.html" << std::endl;
|
ostream << "# https://openmw.readthedocs.io/en/master/reference/modding/settings/index.html" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
// We still have one more thing to do before we're completely done writing the file.
|
// We still have one more thing to do before we're completely done writing the file.
|
||||||
|
|
|
@ -6,11 +6,14 @@
|
||||||
#include <osg/Texture2D>
|
#include <osg/Texture2D>
|
||||||
#include <osg/RenderInfo>
|
#include <osg/RenderInfo>
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
namespace Terrain
|
namespace Terrain
|
||||||
{
|
{
|
||||||
|
|
||||||
CompositeMapRenderer::CompositeMapRenderer()
|
CompositeMapRenderer::CompositeMapRenderer()
|
||||||
: mTimeAvailable(0.0005)
|
: mTargetFrameRate(120)
|
||||||
|
, mMinimumTimeAvailable(0.0025)
|
||||||
{
|
{
|
||||||
setSupportsDisplayList(false);
|
setSupportsDisplayList(false);
|
||||||
setCullingActive(false);
|
setCullingActive(false);
|
||||||
|
@ -22,6 +25,14 @@ CompositeMapRenderer::CompositeMapRenderer()
|
||||||
|
|
||||||
void CompositeMapRenderer::drawImplementation(osg::RenderInfo &renderInfo) const
|
void CompositeMapRenderer::drawImplementation(osg::RenderInfo &renderInfo) const
|
||||||
{
|
{
|
||||||
|
double dt = mTimer.time_s();
|
||||||
|
dt = std::min(dt, 0.2);
|
||||||
|
mTimer.setStartTick();
|
||||||
|
double targetFrameTime = 1.0/static_cast<double>(mTargetFrameRate);
|
||||||
|
double conservativeTimeRatio(0.75);
|
||||||
|
double availableTime = std::max((targetFrameTime - dt)*conservativeTimeRatio,
|
||||||
|
mMinimumTimeAvailable);
|
||||||
|
|
||||||
mCompiled.clear();
|
mCompiled.clear();
|
||||||
|
|
||||||
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(mMutex);
|
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(mMutex);
|
||||||
|
@ -39,7 +50,7 @@ void CompositeMapRenderer::drawImplementation(osg::RenderInfo &renderInfo) const
|
||||||
mImmediateCompileSet.erase(mImmediateCompileSet.begin());
|
mImmediateCompileSet.erase(mImmediateCompileSet.begin());
|
||||||
}
|
}
|
||||||
|
|
||||||
double timeLeft = mTimeAvailable;
|
double timeLeft = availableTime;
|
||||||
|
|
||||||
while (!mCompileSet.empty() && timeLeft > 0)
|
while (!mCompileSet.empty() && timeLeft > 0)
|
||||||
{
|
{
|
||||||
|
@ -53,6 +64,7 @@ void CompositeMapRenderer::drawImplementation(osg::RenderInfo &renderInfo) const
|
||||||
mCompileSet.erase(mCompileSet.begin());
|
mCompileSet.erase(mCompileSet.begin());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
mTimer.setStartTick();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CompositeMapRenderer::compile(CompositeMap &compositeMap, osg::RenderInfo &renderInfo, double* timeLeft) const
|
void CompositeMapRenderer::compile(CompositeMap &compositeMap, osg::RenderInfo &renderInfo, double* timeLeft) const
|
||||||
|
@ -126,9 +138,14 @@ void CompositeMapRenderer::compile(CompositeMap &compositeMap, osg::RenderInfo &
|
||||||
ext->glBindFramebuffer(GL_FRAMEBUFFER_EXT, fboId);
|
ext->glBindFramebuffer(GL_FRAMEBUFFER_EXT, fboId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CompositeMapRenderer::setTimeAvailableForCompile(double time)
|
void CompositeMapRenderer::setMinimumTimeAvailableForCompile(double time)
|
||||||
{
|
{
|
||||||
mTimeAvailable = time;
|
mMinimumTimeAvailable = time;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CompositeMapRenderer::setTargetFrameRate(float framerate)
|
||||||
|
{
|
||||||
|
mTargetFrameRate = framerate;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CompositeMapRenderer::addCompositeMap(CompositeMap* compositeMap, bool immediate)
|
void CompositeMapRenderer::addCompositeMap(CompositeMap* compositeMap, bool immediate)
|
||||||
|
|
|
@ -40,7 +40,10 @@ namespace Terrain
|
||||||
void compile(CompositeMap& compositeMap, osg::RenderInfo& renderInfo, double* timeLeft) const;
|
void compile(CompositeMap& compositeMap, osg::RenderInfo& renderInfo, double* timeLeft) const;
|
||||||
|
|
||||||
/// Set the available time in seconds for compiling (non-immediate) composite maps each frame
|
/// Set the available time in seconds for compiling (non-immediate) composite maps each frame
|
||||||
void setTimeAvailableForCompile(double time);
|
void setMinimumTimeAvailableForCompile(double time);
|
||||||
|
|
||||||
|
/// If current frame rate is higher than this, the extra time will be set aside to do more compiling
|
||||||
|
void setTargetFrameRate(float framerate);
|
||||||
|
|
||||||
/// Add a composite map to be rendered
|
/// Add a composite map to be rendered
|
||||||
void addCompositeMap(CompositeMap* map, bool immediate=false);
|
void addCompositeMap(CompositeMap* map, bool immediate=false);
|
||||||
|
@ -51,7 +54,9 @@ namespace Terrain
|
||||||
unsigned int getCompileSetSize() const;
|
unsigned int getCompileSetSize() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
double mTimeAvailable;
|
float mTargetFrameRate;
|
||||||
|
double mMinimumTimeAvailable;
|
||||||
|
mutable osg::Timer mTimer;
|
||||||
|
|
||||||
typedef std::set<osg::ref_ptr<CompositeMap> > CompileSet;
|
typedef std::set<osg::ref_ptr<CompositeMap> > CompileSet;
|
||||||
|
|
||||||
|
|
|
@ -65,6 +65,11 @@ World::~World()
|
||||||
delete mStorage;
|
delete mStorage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void World::setTargetFrameRate(float rate)
|
||||||
|
{
|
||||||
|
mCompositeMapRenderer->setTargetFrameRate(rate);
|
||||||
|
}
|
||||||
|
|
||||||
float World::getHeightAt(const osg::Vec3f &worldPos)
|
float World::getHeightAt(const osg::Vec3f &worldPos)
|
||||||
{
|
{
|
||||||
return mStorage->getHeightAt(worldPos);
|
return mStorage->getHeightAt(worldPos);
|
||||||
|
|
|
@ -57,6 +57,9 @@ namespace Terrain
|
||||||
World(osg::Group* parent, osg::Group* compileRoot, Resource::ResourceSystem* resourceSystem, Storage* storage, int nodeMask, int preCompileMask);
|
World(osg::Group* parent, osg::Group* compileRoot, Resource::ResourceSystem* resourceSystem, Storage* storage, int nodeMask, int preCompileMask);
|
||||||
virtual ~World();
|
virtual ~World();
|
||||||
|
|
||||||
|
/// See CompositeMapRenderer::setTargetFrameRate
|
||||||
|
void setTargetFrameRate(float rate);
|
||||||
|
|
||||||
/// Apply the scene manager's texture filtering settings to all cached textures.
|
/// Apply the scene manager's texture filtering settings to all cached textures.
|
||||||
/// @note Thread safe.
|
/// @note Thread safe.
|
||||||
void updateTextureFiltering();
|
void updateTextureFiltering();
|
||||||
|
|
|
@ -5,13 +5,20 @@
|
||||||
namespace Gui
|
namespace Gui
|
||||||
{
|
{
|
||||||
|
|
||||||
|
bool ImageButton::sDefaultNeedKeyFocus = true;
|
||||||
|
|
||||||
ImageButton::ImageButton()
|
ImageButton::ImageButton()
|
||||||
: Base()
|
: Base()
|
||||||
, mMouseFocus(false)
|
, mMouseFocus(false)
|
||||||
, mMousePress(false)
|
, mMousePress(false)
|
||||||
, mKeyFocus(false)
|
, mKeyFocus(false)
|
||||||
{
|
{
|
||||||
setNeedKeyFocus(true);
|
setNeedKeyFocus(sDefaultNeedKeyFocus);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ImageButton::setDefaultNeedKeyFocus(bool enabled)
|
||||||
|
{
|
||||||
|
sDefaultNeedKeyFocus = enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImageButton::setPropertyOverride(const std::string &_key, const std::string &_value)
|
void ImageButton::setPropertyOverride(const std::string &_key, const std::string &_value)
|
||||||
|
|
|
@ -18,12 +18,16 @@ namespace Gui
|
||||||
|
|
||||||
ImageButton();
|
ImageButton();
|
||||||
|
|
||||||
|
static void setDefaultNeedKeyFocus(bool enabled);
|
||||||
|
|
||||||
/// Set mImageNormal, mImageHighlighted and mImagePushed based on file convention (image_idle.ext, image_over.ext and image_pressed.ext)
|
/// Set mImageNormal, mImageHighlighted and mImagePushed based on file convention (image_idle.ext, image_over.ext and image_pressed.ext)
|
||||||
void setImage(const std::string& image);
|
void setImage(const std::string& image);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void updateImage();
|
void updateImage();
|
||||||
|
|
||||||
|
static bool sDefaultNeedKeyFocus;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void setPropertyOverride(const std::string& _key, const std::string& _value);
|
virtual void setPropertyOverride(const std::string& _key, const std::string& _value);
|
||||||
virtual void onMouseLostFocus(MyGUI::Widget* _new);
|
virtual void onMouseLostFocus(MyGUI::Widget* _new);
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
# This tag specifies the encoding used for all characters in the config file
|
# This tag specifies the encoding used for all characters in the config file
|
||||||
# that follow. The default is UTF-8 which is also the encoding used for all text
|
# that follow. The default is UTF-8 which is also the encoding used for all text
|
||||||
# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
|
# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
|
||||||
# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
|
# built into libc) for the transcoding. See https://www.gnu.org/software/libiconv
|
||||||
# for the list of possible encodings.
|
# for the list of possible encodings.
|
||||||
# The default value is: UTF-8.
|
# The default value is: UTF-8.
|
||||||
|
|
||||||
|
@ -295,7 +295,7 @@ EXTENSION_MAPPING =
|
||||||
|
|
||||||
# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
|
# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
|
||||||
# according to the Markdown format, which allows for more readable
|
# according to the Markdown format, which allows for more readable
|
||||||
# documentation. See http://daringfireball.net/projects/markdown/ for details.
|
# documentation. See https://daringfireball.net/projects/markdown/ for details.
|
||||||
# The output of markdown processing is further processed by doxygen, so you can
|
# The output of markdown processing is further processed by doxygen, so you can
|
||||||
# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
|
# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
|
||||||
# case of backward compatibilities issues.
|
# case of backward compatibilities issues.
|
||||||
|
@ -328,7 +328,7 @@ BUILTIN_STL_SUPPORT = YES
|
||||||
CPP_CLI_SUPPORT = NO
|
CPP_CLI_SUPPORT = NO
|
||||||
|
|
||||||
# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
|
# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
|
||||||
# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
|
# https://riverbankcomputing.com/software/sip/intro) sources only. Doxygen
|
||||||
# will parse them like normal C++ but will assume all classes use public instead
|
# will parse them like normal C++ but will assume all classes use public instead
|
||||||
# of private inheritance when no explicit protection keyword is present.
|
# of private inheritance when no explicit protection keyword is present.
|
||||||
# The default value is: NO.
|
# The default value is: NO.
|
||||||
|
@ -687,7 +687,7 @@ LAYOUT_FILE =
|
||||||
# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
|
# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
|
||||||
# the reference definitions. This must be a list of .bib files. The .bib
|
# the reference definitions. This must be a list of .bib files. The .bib
|
||||||
# extension is automatically appended if omitted. This requires the bibtex tool
|
# extension is automatically appended if omitted. This requires the bibtex tool
|
||||||
# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
|
# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.
|
||||||
# For LaTeX the style of the bibliography can be controlled using
|
# For LaTeX the style of the bibliography can be controlled using
|
||||||
# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
|
# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
|
||||||
# search path. Do not use file names with spaces, bibtex cannot handle them. See
|
# search path. Do not use file names with spaces, bibtex cannot handle them. See
|
||||||
|
@ -772,7 +772,7 @@ INPUT = @OpenMW_SOURCE_DIR@/apps \
|
||||||
# This tag can be used to specify the character encoding of the source files
|
# This tag can be used to specify the character encoding of the source files
|
||||||
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
|
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
|
||||||
# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
|
# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
|
||||||
# documentation (see: http://www.gnu.org/software/libiconv) for the list of
|
# documentation (see: https://www.gnu.org/software/libiconv) for the list of
|
||||||
# possible encodings.
|
# possible encodings.
|
||||||
# The default value is: UTF-8.
|
# The default value is: UTF-8.
|
||||||
|
|
||||||
|
@ -993,7 +993,7 @@ SOURCE_TOOLTIPS = YES
|
||||||
# If the USE_HTAGS tag is set to YES then the references to source code will
|
# If the USE_HTAGS tag is set to YES then the references to source code will
|
||||||
# point to the HTML generated by the htags(1) tool instead of doxygen built-in
|
# point to the HTML generated by the htags(1) tool instead of doxygen built-in
|
||||||
# source browser. The htags tool is part of GNU's global source tagging system
|
# source browser. The htags tool is part of GNU's global source tagging system
|
||||||
# (see http://www.gnu.org/software/global/global.html). You will need version
|
# (see https://www.gnu.org/software/global/global.html). You will need version
|
||||||
# 4.8.6 or higher.
|
# 4.8.6 or higher.
|
||||||
#
|
#
|
||||||
# To use it do the following:
|
# To use it do the following:
|
||||||
|
@ -1136,7 +1136,7 @@ HTML_EXTRA_FILES =
|
||||||
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
|
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
|
||||||
# will adjust the colors in the stylesheet and background images according to
|
# will adjust the colors in the stylesheet and background images according to
|
||||||
# this color. Hue is specified as an angle on a colorwheel, see
|
# this color. Hue is specified as an angle on a colorwheel, see
|
||||||
# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
|
# https://en.wikipedia.org/wiki/Hue for more information. For instance the value
|
||||||
# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
|
# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
|
||||||
# purple, and 360 is red again.
|
# purple, and 360 is red again.
|
||||||
# Minimum value: 0, maximum value: 359, default value: 220.
|
# Minimum value: 0, maximum value: 359, default value: 220.
|
||||||
|
@ -1194,7 +1194,7 @@ HTML_INDEX_NUM_ENTRIES = 100
|
||||||
|
|
||||||
# If the GENERATE_DOCSET tag is set to YES, additional index files will be
|
# If the GENERATE_DOCSET tag is set to YES, additional index files will be
|
||||||
# generated that can be used as input for Apple's Xcode 3 integrated development
|
# generated that can be used as input for Apple's Xcode 3 integrated development
|
||||||
# environment (see: http://developer.apple.com/tools/xcode/), introduced with
|
# environment (see: https://developer.apple.com/xcode/), introduced with
|
||||||
# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
|
# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
|
||||||
# Makefile in the HTML output directory. Running make will produce the docset in
|
# Makefile in the HTML output directory. Running make will produce the docset in
|
||||||
# that directory and running make install will install the docset in
|
# that directory and running make install will install the docset in
|
||||||
|
@ -1239,7 +1239,7 @@ DOCSET_PUBLISHER_NAME = OpenMW
|
||||||
# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
|
# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
|
||||||
# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
|
# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
|
||||||
# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
|
# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
|
||||||
# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
|
# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on
|
||||||
# Windows.
|
# Windows.
|
||||||
#
|
#
|
||||||
# The HTML Help Workshop contains a compiler that can convert all HTML output
|
# The HTML Help Workshop contains a compiler that can convert all HTML output
|
||||||
|
@ -1315,7 +1315,7 @@ QCH_FILE =
|
||||||
|
|
||||||
# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
|
# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
|
||||||
# Project output. For more information please see Qt Help Project / Namespace
|
# Project output. For more information please see Qt Help Project / Namespace
|
||||||
# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
|
# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).
|
||||||
# The default value is: org.doxygen.Project.
|
# The default value is: org.doxygen.Project.
|
||||||
# This tag requires that the tag GENERATE_QHP is set to YES.
|
# This tag requires that the tag GENERATE_QHP is set to YES.
|
||||||
|
|
||||||
|
@ -1323,8 +1323,7 @@ QHP_NAMESPACE = org.openmw
|
||||||
|
|
||||||
# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
|
# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
|
||||||
# Help Project output. For more information please see Qt Help Project / Virtual
|
# Help Project output. For more information please see Qt Help Project / Virtual
|
||||||
# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
|
# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders).
|
||||||
# folders).
|
|
||||||
# The default value is: doc.
|
# The default value is: doc.
|
||||||
# This tag requires that the tag GENERATE_QHP is set to YES.
|
# This tag requires that the tag GENERATE_QHP is set to YES.
|
||||||
|
|
||||||
|
@ -1332,23 +1331,21 @@ QHP_VIRTUAL_FOLDER = doc
|
||||||
|
|
||||||
# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
|
# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
|
||||||
# filter to add. For more information please see Qt Help Project / Custom
|
# filter to add. For more information please see Qt Help Project / Custom
|
||||||
# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
|
# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).
|
||||||
# filters).
|
|
||||||
# This tag requires that the tag GENERATE_QHP is set to YES.
|
# This tag requires that the tag GENERATE_QHP is set to YES.
|
||||||
|
|
||||||
QHP_CUST_FILTER_NAME =
|
QHP_CUST_FILTER_NAME =
|
||||||
|
|
||||||
# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
|
# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
|
||||||
# custom filter to add. For more information please see Qt Help Project / Custom
|
# custom filter to add. For more information please see Qt Help Project / Custom
|
||||||
# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
|
# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).
|
||||||
# filters).
|
|
||||||
# This tag requires that the tag GENERATE_QHP is set to YES.
|
# This tag requires that the tag GENERATE_QHP is set to YES.
|
||||||
|
|
||||||
QHP_CUST_FILTER_ATTRS =
|
QHP_CUST_FILTER_ATTRS =
|
||||||
|
|
||||||
# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
|
# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
|
||||||
# project's filter section matches. Qt Help Project / Filter Attributes (see:
|
# project's filter section matches. Qt Help Project / Filter Attributes (see:
|
||||||
# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
|
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes).
|
||||||
# This tag requires that the tag GENERATE_QHP is set to YES.
|
# This tag requires that the tag GENERATE_QHP is set to YES.
|
||||||
|
|
||||||
QHP_SECT_FILTER_ATTRS =
|
QHP_SECT_FILTER_ATTRS =
|
||||||
|
@ -1453,7 +1450,7 @@ FORMULA_FONTSIZE = 10
|
||||||
FORMULA_TRANSPARENT = YES
|
FORMULA_TRANSPARENT = YES
|
||||||
|
|
||||||
# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
|
# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
|
||||||
# http://www.mathjax.org) which uses client side Javascript for the rendering
|
# https://www.mathjax.org) which uses client side Javascript for the rendering
|
||||||
# instead of using prerendered bitmaps. Use this if you do not have LaTeX
|
# instead of using prerendered bitmaps. Use this if you do not have LaTeX
|
||||||
# installed or if you want to formulas look prettier in the HTML output. When
|
# installed or if you want to formulas look prettier in the HTML output. When
|
||||||
# enabled you may also need to install MathJax separately and configure the path
|
# enabled you may also need to install MathJax separately and configure the path
|
||||||
|
@ -1465,7 +1462,7 @@ USE_MATHJAX = YES
|
||||||
|
|
||||||
# When MathJax is enabled you can set the default output format to be used for
|
# When MathJax is enabled you can set the default output format to be used for
|
||||||
# the MathJax output. See the MathJax site (see:
|
# the MathJax output. See the MathJax site (see:
|
||||||
# http://docs.mathjax.org/en/latest/output.html) for more details.
|
# https://docs.mathjax.org/en/latest/output.html) for more details.
|
||||||
# Possible values are: HTML-CSS (which is slower, but has the best
|
# Possible values are: HTML-CSS (which is slower, but has the best
|
||||||
# compatibility), NativeMML (i.e. MathML) and SVG.
|
# compatibility), NativeMML (i.e. MathML) and SVG.
|
||||||
# The default value is: HTML-CSS.
|
# The default value is: HTML-CSS.
|
||||||
|
@ -1480,11 +1477,11 @@ MATHJAX_FORMAT = HTML-CSS
|
||||||
# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
|
# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
|
||||||
# Content Delivery Network so you can quickly see the result without installing
|
# Content Delivery Network so you can quickly see the result without installing
|
||||||
# MathJax. However, it is strongly recommended to install a local copy of
|
# MathJax. However, it is strongly recommended to install a local copy of
|
||||||
# MathJax from http://www.mathjax.org before deployment.
|
# MathJax from https://www.mathjax.org before deployment.
|
||||||
# The default value is: http://cdn.mathjax.org/mathjax/latest.
|
# The default value is: https://cdn.mathjax.org/mathjax/latest.
|
||||||
# This tag requires that the tag USE_MATHJAX is set to YES.
|
# This tag requires that the tag USE_MATHJAX is set to YES.
|
||||||
|
|
||||||
MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
|
MATHJAX_RELPATH = https://cdn.mathjax.org/mathjax/latest
|
||||||
|
|
||||||
# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
|
# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
|
||||||
# extension names that should be enabled during MathJax rendering. For example
|
# extension names that should be enabled during MathJax rendering. For example
|
||||||
|
@ -1495,7 +1492,7 @@ MATHJAX_EXTENSIONS =
|
||||||
|
|
||||||
# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
|
# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
|
||||||
# of code that will be used on startup of the MathJax code. See the MathJax site
|
# of code that will be used on startup of the MathJax code. See the MathJax site
|
||||||
# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
|
# (see: https://docs.mathjax.org/en/latest/output.html) for more details. For an
|
||||||
# example see the documentation.
|
# example see the documentation.
|
||||||
# This tag requires that the tag USE_MATHJAX is set to YES.
|
# This tag requires that the tag USE_MATHJAX is set to YES.
|
||||||
|
|
||||||
|
@ -1542,7 +1539,7 @@ SERVER_BASED_SEARCH = NO
|
||||||
#
|
#
|
||||||
# Doxygen ships with an example indexer ( doxyindexer) and search engine
|
# Doxygen ships with an example indexer ( doxyindexer) and search engine
|
||||||
# (doxysearch.cgi) which are based on the open source search engine library
|
# (doxysearch.cgi) which are based on the open source search engine library
|
||||||
# Xapian (see: http://xapian.org/).
|
# Xapian (see: https://xapian.org/).
|
||||||
#
|
#
|
||||||
# See the section "External Indexing and Searching" for details.
|
# See the section "External Indexing and Searching" for details.
|
||||||
# The default value is: NO.
|
# The default value is: NO.
|
||||||
|
@ -1555,7 +1552,7 @@ EXTERNAL_SEARCH = NO
|
||||||
#
|
#
|
||||||
# Doxygen ships with an example indexer ( doxyindexer) and search engine
|
# Doxygen ships with an example indexer ( doxyindexer) and search engine
|
||||||
# (doxysearch.cgi) which are based on the open source search engine library
|
# (doxysearch.cgi) which are based on the open source search engine library
|
||||||
# Xapian (see: http://xapian.org/). See the section "External Indexing and
|
# Xapian (see: https://xapian.org/). See the section "External Indexing and
|
||||||
# Searching" for details.
|
# Searching" for details.
|
||||||
# This tag requires that the tag SEARCHENGINE is set to YES.
|
# This tag requires that the tag SEARCHENGINE is set to YES.
|
||||||
|
|
||||||
|
@ -1726,7 +1723,7 @@ LATEX_SOURCE_CODE = NO
|
||||||
|
|
||||||
# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
|
# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
|
||||||
# bibliography, e.g. plainnat, or ieeetr. See
|
# bibliography, e.g. plainnat, or ieeetr. See
|
||||||
# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
|
# https://en.wikipedia.org/wiki/BibTeX and \cite for more info.
|
||||||
# The default value is: plain.
|
# The default value is: plain.
|
||||||
# This tag requires that the tag GENERATE_LATEX is set to YES.
|
# This tag requires that the tag GENERATE_LATEX is set to YES.
|
||||||
|
|
||||||
|
@ -1882,7 +1879,7 @@ DOCBOOK_OUTPUT = docbook
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
|
|
||||||
# If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen
|
# If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen
|
||||||
# Definitions (see http://autogen.sf.net) file that captures the structure of
|
# Definitions (see http://autogen.sourceforge.net) file that captures the structure of
|
||||||
# the code including all documentation. Note that this feature is still
|
# the code including all documentation. Note that this feature is still
|
||||||
# experimental and incomplete at the moment.
|
# experimental and incomplete at the moment.
|
||||||
# The default value is: NO.
|
# The default value is: NO.
|
||||||
|
@ -2093,7 +2090,7 @@ HIDE_UNDOC_RELATIONS = NO
|
||||||
|
|
||||||
# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
|
# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
|
||||||
# available from the path. This tool is part of Graphviz (see:
|
# available from the path. This tool is part of Graphviz (see:
|
||||||
# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
|
# https://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
|
||||||
# Bell Labs. The other options in this section have no effect if this option is
|
# Bell Labs. The other options in this section have no effect if this option is
|
||||||
# set to NO
|
# set to NO
|
||||||
# The default value is: YES.
|
# The default value is: YES.
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
# that follow. The default is UTF-8 which is also the encoding used for all
|
# that follow. The default is UTF-8 which is also the encoding used for all
|
||||||
# text before the first occurrence of this tag. Doxygen uses libiconv (or the
|
# text before the first occurrence of this tag. Doxygen uses libiconv (or the
|
||||||
# iconv built into libc) for the transcoding. See
|
# iconv built into libc) for the transcoding. See
|
||||||
# http://www.gnu.org/software/libiconv for the list of possible encodings.
|
# https://www.gnu.org/software/libiconv for the list of possible encodings.
|
||||||
|
|
||||||
DOXYFILE_ENCODING = UTF-8
|
DOXYFILE_ENCODING = UTF-8
|
||||||
|
|
||||||
|
@ -581,7 +581,7 @@ INPUT = @OpenMW_SOURCE_DIR@/apps \
|
||||||
# This tag can be used to specify the character encoding of the source files
|
# This tag can be used to specify the character encoding of the source files
|
||||||
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
|
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
|
||||||
# also the default input encoding. Doxygen uses libiconv (or the iconv built
|
# also the default input encoding. Doxygen uses libiconv (or the iconv built
|
||||||
# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
|
# into libc) for the transcoding. See https://www.gnu.org/software/libiconv for
|
||||||
# the list of possible encodings.
|
# the list of possible encodings.
|
||||||
|
|
||||||
INPUT_ENCODING = UTF-8
|
INPUT_ENCODING = UTF-8
|
||||||
|
@ -753,7 +753,7 @@ REFERENCES_LINK_SOURCE = YES
|
||||||
# If the USE_HTAGS tag is set to YES then the references to source code
|
# If the USE_HTAGS tag is set to YES then the references to source code
|
||||||
# will point to the HTML generated by the htags(1) tool instead of doxygen
|
# will point to the HTML generated by the htags(1) tool instead of doxygen
|
||||||
# built-in source browser. The htags tool is part of GNU's global source
|
# built-in source browser. The htags tool is part of GNU's global source
|
||||||
# tagging system (see http://www.gnu.org/software/global/global.html). You
|
# tagging system (see https://www.gnu.org/software/global/global.html). You
|
||||||
# will need version 4.8.6 or higher.
|
# will need version 4.8.6 or higher.
|
||||||
|
|
||||||
USE_HTAGS = NO
|
USE_HTAGS = NO
|
||||||
|
@ -928,30 +928,30 @@ QCH_FILE =
|
||||||
|
|
||||||
# The QHP_NAMESPACE tag specifies the namespace to use when generating
|
# The QHP_NAMESPACE tag specifies the namespace to use when generating
|
||||||
# Qt Help Project output. For more information please see
|
# Qt Help Project output. For more information please see
|
||||||
# http://doc.trolltech.com/qthelpproject.html#namespace
|
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace
|
||||||
|
|
||||||
QHP_NAMESPACE =
|
QHP_NAMESPACE =
|
||||||
|
|
||||||
# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
|
# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
|
||||||
# Qt Help Project output. For more information please see
|
# Qt Help Project output. For more information please see
|
||||||
# http://doc.trolltech.com/qthelpproject.html#virtual-folders
|
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders
|
||||||
|
|
||||||
QHP_VIRTUAL_FOLDER = doc
|
QHP_VIRTUAL_FOLDER = doc
|
||||||
|
|
||||||
# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add.
|
# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add.
|
||||||
# For more information please see
|
# For more information please see
|
||||||
# http://doc.trolltech.com/qthelpproject.html#custom-filters
|
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters
|
||||||
|
|
||||||
QHP_CUST_FILTER_NAME =
|
QHP_CUST_FILTER_NAME =
|
||||||
|
|
||||||
# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see
|
# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see
|
||||||
# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">Qt Help Project / Custom Filters</a>.
|
# <a href="https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters">Qt Help Project / Custom Filters</a>.
|
||||||
|
|
||||||
QHP_CUST_FILTER_ATTRS =
|
QHP_CUST_FILTER_ATTRS =
|
||||||
|
|
||||||
# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's
|
# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's
|
||||||
# filter section matches.
|
# filter section matches.
|
||||||
# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">Qt Help Project / Filter Attributes</a>.
|
# <a href="https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes">Qt Help Project / Filter Attributes</a>.
|
||||||
|
|
||||||
QHP_SECT_FILTER_ATTRS =
|
QHP_SECT_FILTER_ATTRS =
|
||||||
|
|
||||||
|
|
|
@ -60,16 +60,32 @@ copyright = u'2017, OpenMW Team'
|
||||||
# The short X.Y version.
|
# The short X.Y version.
|
||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
|
|
||||||
|
release = version = "UNRELEASED"
|
||||||
|
|
||||||
|
|
||||||
|
def get_openmw_version(haystack):
|
||||||
|
needle = 'OPENMW_VERSION_MAJOR'
|
||||||
|
line_counter = 0
|
||||||
|
for hay in haystack:
|
||||||
|
if needle in str(hay):
|
||||||
|
break
|
||||||
|
line_counter += 1
|
||||||
|
|
||||||
|
version = '.'.join([haystack[line_counter][1][1].contents,
|
||||||
|
haystack[line_counter+1][1][1].contents,
|
||||||
|
haystack[line_counter+2][1][1].contents])
|
||||||
|
return version
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from parse_cmake import parsing
|
from parse_cmake import parsing
|
||||||
cmake_raw = open(project_root+'/CMakeLists.txt', 'r').read()
|
cmake_raw = open(project_root+'/CMakeLists.txt', 'r').read()
|
||||||
cmake_data = parsing.parse(cmake_raw)
|
cmake_data = parsing.parse(cmake_raw)
|
||||||
release = version = '.'.join([cmake_data[24][1][1].contents,
|
release = version = get_openmw_version(cmake_data)
|
||||||
cmake_data[25][1][1].contents,
|
|
||||||
cmake_data[26][1][1].contents])
|
except Exception as ex:
|
||||||
except ImportError:
|
print("WARNING: Version will be set to '{0}' because: '{1}'.".format(release, str(ex)))
|
||||||
release = "UNRELEASED"
|
import traceback; traceback.print_exc()
|
||||||
print("WARNING: Unable to import parse_cmake, version will be set to: {0}.".format(release))
|
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
# for a list of supported languages.
|
# for a list of supported languages.
|
||||||
|
|
|
@ -145,7 +145,7 @@ and a place where OpenMW CS looks for already existing files.
|
||||||
Resource files
|
Resource files
|
||||||
==============
|
==============
|
||||||
|
|
||||||
.. TODO This paragraph sounds weird
|
.. TODO This paragraph sounds weird
|
||||||
|
|
||||||
Unless we are talking about a fully text based game, like Zork or Rogue, one
|
Unless we are talking about a fully text based game, like Zork or Rogue, one
|
||||||
would expect that a video game is using some media files: 3D models with
|
would expect that a video game is using some media files: 3D models with
|
||||||
|
@ -219,6 +219,6 @@ files for textures.
|
||||||
|
|
||||||
.. Hyperlink targets for the entire document
|
.. Hyperlink targets for the entire document
|
||||||
|
|
||||||
.. _FFmpeg: http://ffmpeg.org
|
.. _FFmpeg: https://ffmpeg.org
|
||||||
.. _Vorbis: http://www.vorbis.com
|
.. _Vorbis: http://www.vorbis.com
|
||||||
.. _Theora: http://www.theora.org
|
.. _Theora: https://www.theora.org
|
||||||
|
|
|
@ -3,7 +3,7 @@ A Tour through OpenMW CS: making a magic ring
|
||||||
|
|
||||||
In this first chapter we will create a mod that adds a new ring with a simple
|
In this first chapter we will create a mod that adds a new ring with a simple
|
||||||
enchantment to the game. The ring will give its wearer a permanent Night Vision
|
enchantment to the game. The ring will give its wearer a permanent Night Vision
|
||||||
effect while being worn. You do not need previous Morrowind modding experience,
|
effect while being worn. You do not need previous Morrowind modding experience,
|
||||||
but you should be familiar with the game itself. There will be no
|
but you should be familiar with the game itself. There will be no
|
||||||
scripting necessary, we can achieve everything using just what the base game
|
scripting necessary, we can achieve everything using just what the base game
|
||||||
offers out of the box. Before continuing make sure that OpenMW is properly
|
offers out of the box. Before continuing make sure that OpenMW is properly
|
||||||
|
@ -133,7 +133,7 @@ the filter directly into the filter field rather than the name of an existing
|
||||||
filter. To signify that we are using an instant filter the have to use `!` as
|
filter. To signify that we are using an instant filter the have to use `!` as
|
||||||
the first character. Type the following into the field:
|
the first character. Type the following into the field:
|
||||||
|
|
||||||
.. code::
|
.. code::
|
||||||
|
|
||||||
!string("id", ".*ring.*")
|
!string("id", ".*ring.*")
|
||||||
|
|
||||||
|
@ -217,20 +217,20 @@ actually modify the contents of the game.
|
||||||
Adding to an NPC
|
Adding to an NPC
|
||||||
================
|
================
|
||||||
|
|
||||||
The simplest way is probably to add it to the inventory of a shopkeeper.
|
The simplest way is probably to add it to the inventory of a shopkeeper.
|
||||||
An obvious candidate is Arrille in Seyda Neen - he's quick to find in a new game
|
An obvious candidate is Arrille in Seyda Neen - he's quick to find in a new game
|
||||||
and he's easy to find in the CS as his name comes early alphabetically.
|
and he's easy to find in the CS as his name comes early alphabetically.
|
||||||
|
|
||||||
.. figure:: _static/images/chapter-1/Ring_to_Arrille.png
|
.. figure:: _static/images/chapter-1/Ring_to_Arrille.png
|
||||||
:alt: Putting the ring into Arrille's inventory
|
:alt: Putting the ring into Arrille's inventory
|
||||||
|
|
||||||
Open the CS and open the *Objects* table (*World* → *Objects*).
|
Open the CS and open the *Objects* table (*World* → *Objects*).
|
||||||
Scroll down to Arrille, or use a filter like !string("ID","arrille").
|
Scroll down to Arrille, or use a filter like !string("ID","arrille").
|
||||||
|
|
||||||
Open another pane to edit him - either right click and select edit or use the
|
Open another pane to edit him - either right click and select edit or use the
|
||||||
shortcut (default is shift double-click). Scroll down to the inventory section
|
shortcut (default is shift double-click). Scroll down to the inventory section
|
||||||
and right click to add a new row. Type in the id of the ring (or find it in the
|
and right click to add a new row. Type in the id of the ring (or find it in the
|
||||||
object pane, and drag and drop). Set the number of rings for him to stock - with
|
object pane, and drag and drop). Set the number of rings for him to stock - with
|
||||||
a negative number indicating that he will restock again to maintain that level.
|
a negative number indicating that he will restock again to maintain that level.
|
||||||
|
|
||||||
However, it's an attractive item, so he will probably wear it rather than sell it.
|
However, it's an attractive item, so he will probably wear it rather than sell it.
|
||||||
|
@ -241,7 +241,7 @@ Fargoth to give it to the player in exchange for his healing ring.
|
||||||
|
|
||||||
.. figure:: _static/images/chapter-1/Ring_to_Fargoth_1.png
|
.. figure:: _static/images/chapter-1/Ring_to_Fargoth_1.png
|
||||||
:alt: Editing Fargoth to give ring to player
|
:alt: Editing Fargoth to give ring to player
|
||||||
|
|
||||||
Open the *Topicinfo* Table (*Characters* → *Topic Infos*). Use a filter !string(Topic,ring)
|
Open the *Topicinfo* Table (*Characters* → *Topic Infos*). Use a filter !string(Topic,ring)
|
||||||
and select the row with a response starting with "You found it!". Edit the record,
|
and select the row with a response starting with "You found it!". Edit the record,
|
||||||
firstly by adding a bit more to the response, then by adding a line to the script
|
firstly by adding a bit more to the response, then by adding a line to the script
|
||||||
|
@ -297,7 +297,7 @@ Placing in plain sight
|
||||||
=====================
|
=====================
|
||||||
|
|
||||||
Let's hide the Ring of Night vision in the cabin of the [Ancient Shipwreck]
|
Let's hide the Ring of Night vision in the cabin of the [Ancient Shipwreck]
|
||||||
(http://en.uesp.net/wiki/Morrowind:Ancient_Shipwreck), a derelict vessel
|
(https://en.uesp.net/wiki/Morrowind:Ancient_Shipwreck), a derelict vessel
|
||||||
southeast of Dagon Fel. Open the list of Cells (*World* → *Cells*) and find
|
southeast of Dagon Fel. Open the list of Cells (*World* → *Cells*) and find
|
||||||
"Ancient Shipwreck, Cabin".
|
"Ancient Shipwreck, Cabin".
|
||||||
|
|
||||||
|
@ -333,8 +333,8 @@ This is probably a suitable place to start talking about how navigation differs
|
||||||
in vanilla Morrowind.
|
in vanilla Morrowind.
|
||||||
|
|
||||||
There is advice in Scripting for Dummies, the definitive manual for Morrowind Scripting:
|
There is advice in Scripting for Dummies, the definitive manual for Morrowind Scripting:
|
||||||
"If you give your scripts a common tag, that will make it easier to jump between the
|
"If you give your scripts a common tag, that will make it easier to jump between the
|
||||||
different scripts of your project, e.g. start every script name with AA_Scriptname
|
different scripts of your project, e.g. start every script name with AA_Scriptname
|
||||||
this will put them right at the beginning of the list and keep them neatly together."
|
this will put them right at the beginning of the list and keep them neatly together."
|
||||||
|
|
||||||
This is valid for the rather poorer navigation facilities there, but it's not sensible for
|
This is valid for the rather poorer navigation facilities there, but it's not sensible for
|
||||||
|
@ -359,12 +359,12 @@ the base game.
|
||||||
|
|
||||||
"Modified" status will cover items from the base game which have been modified in this addon.
|
"Modified" status will cover items from the base game which have been modified in this addon.
|
||||||
|
|
||||||
Click on the top of the column to toggle between ascending and descending order - thus between "Added"
|
Click on the top of the column to toggle between ascending and descending order - thus between "Added"
|
||||||
and "Modified" at the top. Or put your desired modified status into a filter then sort alpabetically
|
and "Modified" at the top. Or put your desired modified status into a filter then sort alpabetically
|
||||||
on a different column.
|
on a different column.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Checking your new addon
|
Checking your new addon
|
||||||
=======================
|
=======================
|
||||||
|
|
||||||
|
@ -372,4 +372,4 @@ Launch OpenMW and in the launcher under *Data Files* check your addon, if it's n
|
||||||
already checked. Load a game and make your way to Seyda Neen - or start a new game.
|
already checked. Load a game and make your way to Seyda Neen - or start a new game.
|
||||||
|
|
||||||
Check whether Arrille has one (or more) for sale, and whether Fargoth give you one
|
Check whether Arrille has one (or more) for sale, and whether Fargoth give you one
|
||||||
when you return his healing ring.
|
when you return his healing ring.
|
||||||
|
|
|
@ -20,7 +20,7 @@ General introduction to normal map conversion
|
||||||
:Authors: Joakim (Lysol) Berg
|
:Authors: Joakim (Lysol) Berg
|
||||||
:Updated: 2016-11-11
|
:Updated: 2016-11-11
|
||||||
|
|
||||||
This page has general information and tutorials on how normal mapping works in OpenMW and how you can make mods using the old fake normal mapping technique (such as `Netch Bump mapped`_ and `Hlaalu Bump mapped`_, and maybe the most (in)famous one to give shiny rocks in OpenMW, the mod `On the Rocks`_!, featured in MGSO and Morrowind Rebirth) work in OpenMW.
|
This page has general information and tutorials on how normal mapping works in OpenMW and how you can make mods using the old fake normal mapping technique (such as `Netch Bump mapped`_ and `Hlaalu Bump mapped`_, and maybe the most (in)famous one to give shiny rocks in OpenMW, the mod `On the Rocks`_!, featured in MGSO and Morrowind Rebirth) work in OpenMW.
|
||||||
|
|
||||||
*Note:* The conversion made in the `Converting Apel's Various Things - Sacks`_-part of this tutorial require the use of the application NifSkope. There are binaries available for Windows, but not for Mac or Linux. Reports say that NifSkope versions 1.X will compile on Linux as long as you have Qt packages installed, while the later 2.X versions will not compile.
|
*Note:* The conversion made in the `Converting Apel's Various Things - Sacks`_-part of this tutorial require the use of the application NifSkope. There are binaries available for Windows, but not for Mac or Linux. Reports say that NifSkope versions 1.X will compile on Linux as long as you have Qt packages installed, while the later 2.X versions will not compile.
|
||||||
|
|
||||||
|
@ -179,24 +179,24 @@ The sacks included in Apel's `Various Things - Sacks`_ come in two versions –
|
||||||
#. Remove all these tags by selecting them one at a time and press right click>Block>Remove Branch. (Ctrl-Del)
|
#. Remove all these tags by selecting them one at a time and press right click>Block>Remove Branch. (Ctrl-Del)
|
||||||
#. Repeat this on all the affected models.
|
#. Repeat this on all the affected models.
|
||||||
#. If you launch OpenMW now, you'll `no longer have shiny models`_. But one thing is missing. Can you see it? It's actually hard to spot on still pictures, but we have no normal maps here.
|
#. If you launch OpenMW now, you'll `no longer have shiny models`_. But one thing is missing. Can you see it? It's actually hard to spot on still pictures, but we have no normal maps here.
|
||||||
#. Now, go back to the root of where you installed the mod. Now go to ``./Textures/`` and you'll find the texture files in question.
|
#. Now, go back to the root of where you installed the mod. Now go to ``./Textures/`` and you'll find the texture files in question.
|
||||||
#. OpenMW detects normal maps if they have the same name as the base diffuse texture, but with a *_n.dds* suffix. In this mod, the normal maps has a suffix of *_nm.dds*. Change all the files that ends with *_nm.dds* to instead end with *_n.dds*.
|
#. OpenMW detects normal maps if they have the same name as the base diffuse texture, but with a *_n.dds* suffix. In this mod, the normal maps has a suffix of *_nm.dds*. Change all the files that ends with *_nm.dds* to instead end with *_n.dds*.
|
||||||
#. Finally, `we are done`_!
|
#. Finally, `we are done`_!
|
||||||
|
|
||||||
Since these models have one or two textures applied to them, the fix was not that time-consuming. It gets worse when you have to fix a model that uses loads of textures. The principle is the same, it just requires more manual work which is annoying and takes time.
|
Since these models have one or two textures applied to them, the fix was not that time-consuming. It gets worse when you have to fix a model that uses loads of textures. The principle is the same, it just requires more manual work which is annoying and takes time.
|
||||||
|
|
||||||
.. _`Netch Bump mapped`: http://www.nexusmods.com/morrowind/mods/42851/?
|
.. _`Netch Bump mapped`: https://www.nexusmods.com/morrowind/mods/42851/?
|
||||||
.. _`Hlaalu Bump mapped`: http://www.nexusmods.com/morrowind/mods/42396/?
|
.. _`Hlaalu Bump mapped`: https://www.nexusmods.com/morrowind/mods/42396/?
|
||||||
.. _`On the Rocks`: http://mw.modhistory.com/download-44-14107
|
.. _`On the Rocks`: http://mw.modhistory.com/download-44-14107
|
||||||
.. _`texture modding`: https://wiki.openmw.org/index.php?title=TextureModding
|
.. _`texture modding`: https://wiki.openmw.org/index.php?title=TextureModding
|
||||||
.. _`MGE XE`: http://www.nexusmods.com/morrowind/mods/26348/?
|
.. _`MGE XE`: https://www.nexusmods.com/morrowind/mods/26348/?
|
||||||
.. _PeterBitt: http://www.nexusmods.com/morrowind/users/4381248/?
|
.. _PeterBitt: https://www.nexusmods.com/morrowind/users/4381248/?
|
||||||
.. _`PBR Scamp Replacer`: http://www.nexusmods.com/morrowind/mods/44314/?
|
.. _`PBR Scamp Replacer`: https://www.nexusmods.com/morrowind/mods/44314/?
|
||||||
.. _settings.cfg: https://wiki.openmw.org/index.php?title=Settings
|
.. _settings.cfg: https://wiki.openmw.org/index.php?title=Settings
|
||||||
.. _`Multiple data folders`: https://wiki.openmw.org/index.php?title=Mod_installation
|
.. _`Multiple data folders`: https://wiki.openmw.org/index.php?title=Mod_installation
|
||||||
.. _`Various Things - Sacks`: http://www.nexusmods.com/morrowind/mods/42558/?
|
.. _`Various Things - Sacks`: https://www.nexusmods.com/morrowind/mods/42558/?
|
||||||
.. _Lead: http://imgur.com/bwpcYlc
|
.. _Lead: https://imgur.com/bwpcYlc
|
||||||
.. _NifSkope: http://niftools.sourceforge.net/wiki/NifSkope
|
.. _NifSkope: http://niftools.sourceforge.net/wiki/NifSkope
|
||||||
.. _Blocks: http://imgur.com/VmQC0WG
|
.. _Blocks: https://imgur.com/VmQC0WG
|
||||||
.. _`no longer have shiny models`: http://imgur.com/vu1k7n1
|
.. _`no longer have shiny models`: https://imgur.com/vu1k7n1
|
||||||
.. _`we are done`: http://imgur.com/yyZxlTw
|
.. _`we are done`: https://imgur.com/yyZxlTw
|
||||||
|
|
|
@ -15,7 +15,7 @@ Unlike vanilla Morrowind, OpenMW directly supports TrueType (``.ttf``) fonts. Th
|
||||||
|
|
||||||
- To replace the primary "Magic Cards" font:
|
- To replace the primary "Magic Cards" font:
|
||||||
|
|
||||||
#. Download `Pelagiad <http://isaskar.github.io/Pelagiad/>`_ by Isak Larborn (aka Isaskar).
|
#. Download `Pelagiad <https://isaskar.github.io/Pelagiad/>`_ by Isak Larborn (aka Isaskar).
|
||||||
#. Install the ``openmw_font.xml`` file into ``resources/mygui/openmw_font.xml`` in your OpenMW installation.
|
#. Install the ``openmw_font.xml`` file into ``resources/mygui/openmw_font.xml`` in your OpenMW installation.
|
||||||
#. Copy ``Pelagiad.ttf`` into ``resources/mygui/`` as well.
|
#. Copy ``Pelagiad.ttf`` into ``resources/mygui/`` as well.
|
||||||
#. If desired, you can now delete the original ``Magic_Cards.*`` files from your Data Files/Fonts directory.
|
#. If desired, you can now delete the original ``Magic_Cards.*`` files from your Data Files/Fonts directory.
|
||||||
|
@ -74,4 +74,4 @@ Unlike vanilla Morrowind, OpenMW directly supports TrueType (``.ttf``) fonts. Th
|
||||||
Bitmap fonts
|
Bitmap fonts
|
||||||
------------
|
------------
|
||||||
|
|
||||||
Morrowind ``.fnt`` files are essentially a bitmap font, but using them is discouraged because of no Unicode support. MyGUI has its own format for bitmap fonts. An example can be seen by using the --export-fonts command line option (see above), which converts Morrowind ``.fnt`` to a MyGUI bitmap font. This is the recommended format to use if you wish to edit Morrowind's bitmap font or create a new bitmap font.
|
Morrowind ``.fnt`` files are essentially a bitmap font, but using them is discouraged because of no Unicode support. MyGUI has its own format for bitmap fonts. An example can be seen by using the --export-fonts command line option (see above), which converts Morrowind ``.fnt`` to a MyGUI bitmap font. This is the recommended format to use if you wish to edit Morrowind's bitmap font or create a new bitmap font.
|
||||||
|
|
|
@ -9,11 +9,7 @@ scaling factor
|
||||||
:Default: 1.0
|
:Default: 1.0
|
||||||
|
|
||||||
This setting scales the GUI interface windows.
|
This setting scales the GUI interface windows.
|
||||||
The value must be greater than 0.0. A value of 1.0 results in the normal scale.
|
A value of 1.0 results in the normal scale. Larger values are useful to increase the scale of the GUI for high resolution displays.
|
||||||
Values much larger than 2.0 may result in user interface components being inaccessible.
|
|
||||||
Until a gamepad interface is created,
|
|
||||||
increasing this setting is helpful for simulating the larger interface used in console games.
|
|
||||||
|
|
||||||
This setting can only be configured by editing the settings configuration file.
|
This setting can only be configured by editing the settings configuration file.
|
||||||
|
|
||||||
menu transparency
|
menu transparency
|
||||||
|
@ -24,7 +20,6 @@ menu transparency
|
||||||
:Default: 0.84
|
:Default: 0.84
|
||||||
|
|
||||||
This setting controls the transparency of the GUI windows.
|
This setting controls the transparency of the GUI windows.
|
||||||
The value should be between 0.0 (transparent) and 1.0 (opaque).
|
|
||||||
This setting can be adjusted in game with the Menu Transparency slider in the Prefs panel of the Options menu.
|
This setting can be adjusted in game with the Menu Transparency slider in the Prefs panel of the Options menu.
|
||||||
|
|
||||||
tooltip delay
|
tooltip delay
|
||||||
|
@ -36,7 +31,6 @@ tooltip delay
|
||||||
|
|
||||||
This value determines the number of seconds between when you begin hovering over an item and when its tooltip appears.
|
This value determines the number of seconds between when you begin hovering over an item and when its tooltip appears.
|
||||||
This setting only affects the tooltip delay for objects under the crosshair in GUI mode windows.
|
This setting only affects the tooltip delay for objects under the crosshair in GUI mode windows.
|
||||||
There does not appear to be a setting to control the tool tip delay in outside of GUI mode.
|
|
||||||
|
|
||||||
The tooltip displays context sensitive information on the selected GUI element,
|
The tooltip displays context sensitive information on the selected GUI element,
|
||||||
such as weight, value, damage, armor rating, magical effects, and detailed description.
|
such as weight, value, damage, armor rating, magical effects, and detailed description.
|
||||||
|
@ -82,7 +76,7 @@ This setting enables or disables the "red flash" overlay that provides a visual
|
||||||
|
|
||||||
If this setting is disabled, the player will "bleed" like NPCs do.
|
If this setting is disabled, the player will "bleed" like NPCs do.
|
||||||
|
|
||||||
The default value is true. This setting can only be configured by editing the settings configuration file.
|
This setting can only be configured by editing the settings configuration file.
|
||||||
|
|
||||||
werewolf overlay
|
werewolf overlay
|
||||||
----------------
|
----------------
|
||||||
|
@ -91,16 +85,16 @@ werewolf overlay
|
||||||
:Range: True/False
|
:Range: True/False
|
||||||
:Default: True
|
:Default: True
|
||||||
|
|
||||||
Enable or disable the werewolf overlay.
|
Enable or disable the werewolf visual effect in first-person mode.
|
||||||
|
|
||||||
The default value is true. This setting can only be configured by editing the settings configuration file.
|
This setting can only be configured by editing the settings configuration file.
|
||||||
|
|
||||||
color background owned
|
color background owned
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
:Type: RGBA floating point
|
:Type: RGBA floating point
|
||||||
:Range: 0.0 to 1.0
|
:Range: 0.0 to 1.0
|
||||||
:Default: 0.15 0.0 0.0 1.0
|
:Default: 0.15 0.0 0.0 1.0 (dark red)
|
||||||
|
|
||||||
The following two settings determine the background color of the tool tip and the crosshair
|
The following two settings determine the background color of the tool tip and the crosshair
|
||||||
when hovering over an item owned by an NPC.
|
when hovering over an item owned by an NPC.
|
||||||
|
@ -108,7 +102,6 @@ The color definitions are composed of four floating point values between 0.0 and
|
||||||
representing the red, green, blue and alpha channels. The alpha value is currently ignored.
|
representing the red, green, blue and alpha channels. The alpha value is currently ignored.
|
||||||
The crosshair color will have no effect if the crosshair setting in the HUD section is disabled.
|
The crosshair color will have no effect if the crosshair setting in the HUD section is disabled.
|
||||||
|
|
||||||
The default value is "0.15 0.0 0.0 1.0", which is a dark red color.
|
|
||||||
This setting can only be configured by editing the settings configuration file.
|
This setting can only be configured by editing the settings configuration file.
|
||||||
This setting has no effect if the show owned setting in the Game Settings Section is false.
|
This setting has no effect if the show owned setting in the Game Settings Section is false.
|
||||||
|
|
||||||
|
@ -117,13 +110,12 @@ color crosshair owned
|
||||||
|
|
||||||
:Type: RGBA floating point
|
:Type: RGBA floating point
|
||||||
:Range: 0.0 to 1.0
|
:Range: 0.0 to 1.0
|
||||||
:Default: 1.0 0.15 0.15 1.0
|
:Default: 1.0 0.15 0.15 1.0 (bright red)
|
||||||
|
|
||||||
This setting sets the color of the crosshair when hovering over an item owned by an NPC.
|
This setting sets the color of the crosshair when hovering over an item owned by an NPC.
|
||||||
The value is composed of four floating point values representing the red, green, blue and alpha channels.
|
The value is composed of four floating point values representing the red, green, blue and alpha channels.
|
||||||
The alpha value is currently ignored.
|
The alpha value is currently ignored.
|
||||||
|
|
||||||
The default value is "1.0 0.15 0.15 1.0" which is a bright red color.
|
|
||||||
This setting can only be configured by editing the settings configuration file.
|
This setting can only be configured by editing the settings configuration file.
|
||||||
This setting has no effect if the crosshair setting in the HUD Settings Section is false.
|
This setting has no effect if the crosshair setting in the HUD Settings Section is false.
|
||||||
This setting has no effect if the show owned setting in the Game Settings Section is false.
|
This setting has no effect if the show owned setting in the Game Settings Section is false.
|
||||||
|
|
|
@ -8,9 +8,10 @@ crosshair
|
||||||
:Range: True/False
|
:Range: True/False
|
||||||
:Default: True
|
:Default: True
|
||||||
|
|
||||||
This setting determines whether the crosshair or reticle is displayed.
|
This setting determines whether the crosshair or reticle is displayed. Enabling the crosshair provides more immediate feedback about which object is currently the focus of actions.
|
||||||
Some players perceive that disabling the crosshair provides a more immersive experience.
|
Some players perceive that disabling the crosshair provides a more immersive experience.
|
||||||
Another common use is to disable the crosshair for screen shots.
|
Another common use is to disable the crosshair for screen shots.
|
||||||
Enabling the crosshair provides more immediate feedback about which object is currently the focus of actions.
|
|
||||||
|
As an alternative to this setting, the complete GUI, including the crosshair, may be toggled at runtime with the F11 key.
|
||||||
|
|
||||||
This setting can be toggled with the Crosshair button in the Prefs panel of the Options menu.
|
This setting can be toggled with the Crosshair button in the Prefs panel of the Options menu.
|
||||||
|
|
|
@ -13,8 +13,7 @@ Values greater than approximately 18.0 will occasionally clip objects in the wor
|
||||||
Values greater than approximately 8.0 will clip the character's hands in first person view
|
Values greater than approximately 8.0 will clip the character's hands in first person view
|
||||||
and/or the back of their head in third person view.
|
and/or the back of their head in third person view.
|
||||||
|
|
||||||
The default value is 1.0. This setting can only be configured by editing the settings configuration file.
|
This setting can only be configured by editing the settings configuration file.
|
||||||
The value must be greater than 0.0, but it's unclear if the engine enforces this limitation.
|
|
||||||
|
|
||||||
small feature culling
|
small feature culling
|
||||||
---------------------
|
---------------------
|
||||||
|
@ -28,7 +27,7 @@ It generally improves performance to enable this feature,
|
||||||
and by definition the culled objects will be very small on screen.
|
and by definition the culled objects will be very small on screen.
|
||||||
The size in pixels for an object to be considered 'small' is controlled by a separate setting.
|
The size in pixels for an object to be considered 'small' is controlled by a separate setting.
|
||||||
|
|
||||||
The default value is true. This setting can only be configured by editing the settings configuration file.
|
This setting can only be configured by editing the settings configuration file.
|
||||||
|
|
||||||
small feature culling pixel size
|
small feature culling pixel size
|
||||||
--------------------------------
|
--------------------------------
|
||||||
|
@ -88,7 +87,6 @@ Enabling the distant terrain setting is an alternative to increasing exterior ce
|
||||||
Note that the distant land setting does not include rendering of distant static objects,
|
Note that the distant land setting does not include rendering of distant static objects,
|
||||||
so the resulting visual effect is not the same.
|
so the resulting visual effect is not the same.
|
||||||
|
|
||||||
The default value is 6666.0.
|
|
||||||
This setting can be adjusted in game from the ridiculously low value of 2000.0 to a maximum of 6666.0
|
This setting can be adjusted in game from the ridiculously low value of 2000.0 to a maximum of 6666.0
|
||||||
using the View Distance slider in the Detail tab of the Video panel of the Options menu.
|
using the View Distance slider in the Detail tab of the Video panel of the Options menu.
|
||||||
|
|
||||||
|
@ -105,8 +103,7 @@ while large values cause distortion at the edges of the screen.
|
||||||
The "field of view" setting interacts with aspect ratio of your video resolution in that more square aspect ratios
|
The "field of view" setting interacts with aspect ratio of your video resolution in that more square aspect ratios
|
||||||
(e.g. 4:3) need a wider field of view to more resemble the same field of view on a widescreen (e.g. 16:9) monitor.
|
(e.g. 4:3) need a wider field of view to more resemble the same field of view on a widescreen (e.g. 16:9) monitor.
|
||||||
|
|
||||||
The default value is 55.0. This setting can be changed in game using the Field of View slider
|
This setting can be changed in game using the Field of View slider from the Video tab of the Video panel of the Options menu.
|
||||||
from the Video tab of the Video panel of the Options menu.
|
|
||||||
|
|
||||||
first person field of view
|
first person field of view
|
||||||
--------------------------
|
--------------------------
|
||||||
|
@ -120,4 +117,4 @@ It is not recommended to change this value from its default value
|
||||||
because the Bethesda provided Morrowind assets do not adapt well to large values,
|
because the Bethesda provided Morrowind assets do not adapt well to large values,
|
||||||
while small values can result in the hands not being visible.
|
while small values can result in the hands not being visible.
|
||||||
|
|
||||||
The default value is 55.0. This setting can only be configured by editing the settings configuration file.
|
This setting can only be configured by editing the settings configuration file.
|
||||||
|
|
|
@ -9,8 +9,9 @@ exterior cell load distance
|
||||||
:Default: 1
|
:Default: 1
|
||||||
|
|
||||||
This setting determines the number of exterior cells adjacent to the character that will be loaded for rendering.
|
This setting determines the number of exterior cells adjacent to the character that will be loaded for rendering.
|
||||||
Values greater than 1 may significantly affect loading times when exiting interior spaces
|
|
||||||
or loading additional exterior cells. Caution is advised when increasing this setting.
|
.. Warning::
|
||||||
|
Values greater than 1 will significantly affect the frame rate and loading times. This setting is mainly intended for making screenshots of scenic vistas and not for real-time gameplay. Loading more cells can break certain scripts or quests in the game that expect cells to not be loaded until the player is there. These limitations will be addressed in a future version with a separate technique for rendering distant cells.
|
||||||
|
|
||||||
This setting interacts with viewing distance and field of view settings.
|
This setting interacts with viewing distance and field of view settings.
|
||||||
|
|
||||||
|
@ -178,6 +179,14 @@ cache expiry delay
|
||||||
The amount of time (in seconds) that a preloaded texture or object will stay in cache
|
The amount of time (in seconds) that a preloaded texture or object will stay in cache
|
||||||
after it is no longer referenced or required, for example, when all cells containing this texture have been unloaded.
|
after it is no longer referenced or required, for example, when all cells containing this texture have been unloaded.
|
||||||
|
|
||||||
|
target framerate
|
||||||
|
----------------
|
||||||
|
:Type: floating point
|
||||||
|
:Range: >0
|
||||||
|
:Default: 60
|
||||||
|
|
||||||
|
Affects the time to be set aside each frame for graphics preloading operations. The game will distribute the preloading over several frames so as to not go under the specified framerate. For best results, set this value to the monitor's refresh rate. If you still experience stutters on turning around, you can try a lower value, although the framerate during loading will suffer a bit in that case.
|
||||||
|
|
||||||
pointers cache size
|
pointers cache size
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
|
@ -185,4 +194,4 @@ pointers cache size
|
||||||
:Range: >0
|
:Range: >0
|
||||||
:Default: 40
|
:Default: 40
|
||||||
|
|
||||||
The count of object pointers, that will be saved for a faster search by object ID.
|
The count of object pointers that will be saved for a faster search by object ID. This is a temporary setting that can be used to mitigate scripting performance issues with certain game files. If your profiler (press F3 twice) displays a large overhead for the Scripting section, try increasing this setting.
|
||||||
|
|
|
@ -16,7 +16,7 @@ If the setting is 2, the crosshair is the color of the color crosshair owned set
|
||||||
If the setting is 3, both the tool tip background and the crosshair are colored.
|
If the setting is 3, both the tool tip background and the crosshair are colored.
|
||||||
The crosshair is not visible if crosshair is false.
|
The crosshair is not visible if crosshair is false.
|
||||||
|
|
||||||
The default value is 0 (no clues). This setting can only be configured by editing the settings configuration file.
|
This setting can only be configured by editing the settings configuration file.
|
||||||
|
|
||||||
show projectile damage
|
show projectile damage
|
||||||
----------------------
|
----------------------
|
||||||
|
@ -25,9 +25,9 @@ show projectile damage
|
||||||
:Range: True/False
|
:Range: True/False
|
||||||
:Default: False
|
:Default: False
|
||||||
|
|
||||||
If this setting is true, damage bonus of arrows and bolts will be showed on item tooltip.
|
If this setting is true, the damage bonus of arrows and bolts will show on their tooltip.
|
||||||
|
|
||||||
The default value is false. This setting can only be configured by editing the settings configuration file.
|
This setting can only be configured by editing the settings configuration file.
|
||||||
|
|
||||||
show melee info
|
show melee info
|
||||||
---------------
|
---------------
|
||||||
|
@ -36,9 +36,9 @@ show melee info
|
||||||
:Range: True/False
|
:Range: True/False
|
||||||
:Default: False
|
:Default: False
|
||||||
|
|
||||||
If this setting is true, melee weapons reach and speed will be showed on item tooltip.
|
If this setting is true, the reach and speed of melee weapons will show on their tooltip.
|
||||||
|
|
||||||
The default value is false. This setting can only be configured by editing the settings configuration file.
|
This setting can only be configured by editing the settings configuration file.
|
||||||
|
|
||||||
show enchant chance
|
show enchant chance
|
||||||
-------------------
|
-------------------
|
||||||
|
@ -49,7 +49,7 @@ show enchant chance
|
||||||
|
|
||||||
Whether or not the chance of success will be displayed in the enchanting menu.
|
Whether or not the chance of success will be displayed in the enchanting menu.
|
||||||
|
|
||||||
The default value is false. This setting can only be configured by editing the settings configuration file.
|
This setting can only be configured by editing the settings configuration file.
|
||||||
|
|
||||||
best attack
|
best attack
|
||||||
-----------
|
-----------
|
||||||
|
@ -62,7 +62,6 @@ If this setting is true, the player character will always use the most powerful
|
||||||
(chop, slash or thrust). If this setting is false,
|
(chop, slash or thrust). If this setting is false,
|
||||||
the type of attack is determined by the direction that the character is moving at the time the attack begins.
|
the type of attack is determined by the direction that the character is moving at the time the attack begins.
|
||||||
|
|
||||||
The default value is false.
|
|
||||||
This setting can be toggled with the Always Use Best Attack button in the Prefs panel of the Options menu.
|
This setting can be toggled with the Always Use Best Attack button in the Prefs panel of the Options menu.
|
||||||
|
|
||||||
can loot during death animation
|
can loot during death animation
|
||||||
|
@ -79,7 +78,7 @@ This is how original Morrowind behaves.
|
||||||
If this setting is false, player has to wait until end of death animation in all cases.
|
If this setting is false, player has to wait until end of death animation in all cases.
|
||||||
This case is more safe, but makes using of summoned creatures exploit (looting summoned Dremoras and Golden Saints for expensive weapons) a lot harder.
|
This case is more safe, but makes using of summoned creatures exploit (looting summoned Dremoras and Golden Saints for expensive weapons) a lot harder.
|
||||||
|
|
||||||
The default value is true. This setting can only be configured by editing the settings configuration file.
|
This setting can only be configured by editing the settings configuration file.
|
||||||
|
|
||||||
difficulty
|
difficulty
|
||||||
----------
|
----------
|
||||||
|
@ -107,7 +106,7 @@ show effect duration
|
||||||
Show the remaining duration of magic effects and lights if this setting is true.
|
Show the remaining duration of magic effects and lights if this setting is true.
|
||||||
The remaining duration is displayed in the tooltip by hovering over the magical effect.
|
The remaining duration is displayed in the tooltip by hovering over the magical effect.
|
||||||
|
|
||||||
The default value is false. This setting can only be configured by editing the settings configuration file.
|
This setting can only be configured by editing the settings configuration file.
|
||||||
|
|
||||||
prevent merchant equipping
|
prevent merchant equipping
|
||||||
--------------------------
|
--------------------------
|
||||||
|
@ -118,6 +117,8 @@ prevent merchant equipping
|
||||||
|
|
||||||
Prevents merchants from equipping items that are sold to them.
|
Prevents merchants from equipping items that are sold to them.
|
||||||
|
|
||||||
|
This setting can only be configured by editing the settings configuration file.
|
||||||
|
|
||||||
followers attack on sight
|
followers attack on sight
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
|
@ -127,3 +128,6 @@ followers attack on sight
|
||||||
|
|
||||||
Makes player followers and escorters start combat with enemies who have started combat with them or the player.
|
Makes player followers and escorters start combat with enemies who have started combat with them or the player.
|
||||||
Otherwise they wait for the enemies or the player to do an attack first.
|
Otherwise they wait for the enemies or the player to do an attack first.
|
||||||
|
Please note this setting has not been extensively tested and could have side effects with certain quests.
|
||||||
|
|
||||||
|
This setting can only be configured by editing the settings configuration file.
|
||||||
|
|
|
@ -75,7 +75,7 @@ camera sensitivity
|
||||||
|
|
||||||
This setting controls the overall camera/mouse sensitivity when not in GUI mode.
|
This setting controls the overall camera/mouse sensitivity when not in GUI mode.
|
||||||
The default sensitivity is 1.0, with smaller values requiring more mouse movement,
|
The default sensitivity is 1.0, with smaller values requiring more mouse movement,
|
||||||
and larger values requiring less. This setting is multiplicative in magnitude.
|
and larger values requiring less.
|
||||||
This setting does not affect mouse speed in GUI mode,
|
This setting does not affect mouse speed in GUI mode,
|
||||||
which is instead controlled by your operating system mouse speed setting.
|
which is instead controlled by your operating system mouse speed setting.
|
||||||
|
|
||||||
|
|
|
@ -8,9 +8,7 @@ global
|
||||||
:Range: True/False
|
:Range: True/False
|
||||||
:Default: False
|
:Default: False
|
||||||
|
|
||||||
If this setting is true, a world map on a map window will be displayed, otherwise a local map will be displayed.
|
If this value is true, the map window will display the world map, otherwise the local map. The setting updates automatically when pressing the local/world map switch button on the map window.
|
||||||
|
|
||||||
This setting can be toggled with the local/world map switch button on the map window.
|
|
||||||
|
|
||||||
global map cell size
|
global map cell size
|
||||||
--------------------
|
--------------------
|
||||||
|
@ -112,5 +110,4 @@ local map cell distance
|
||||||
:Range: >= 1
|
:Range: >= 1
|
||||||
:Default: 1
|
:Default: 1
|
||||||
|
|
||||||
Similar to "[Cells] exterior cell load distance", controls how many cells are rendered on the local map.
|
Similar to "exterior cell load distance" in the Cells section, controls how many cells are rendered on the local map. Values higher than the default may result in longer loading times. Please note that only loaded cells can be rendered, so this setting must be lower or equal to "exterior cell load distance" to work properly.
|
||||||
Values higher than the default may result in longer loading times.
|
|
||||||
|
|
|
@ -5,13 +5,10 @@ character
|
||||||
---------
|
---------
|
||||||
|
|
||||||
:Type: string
|
:Type: string
|
||||||
:Range:
|
:Range:
|
||||||
:Default: ""
|
:Default: ""
|
||||||
|
|
||||||
This setting contains the default character name for loading saved games.
|
This contains the default character for the Load Game menu and is automatically updated when a different character is selected.
|
||||||
|
|
||||||
The default value is the empty string, which results in no character being selected by default.
|
|
||||||
This setting is automatically updated from the Load menu when a different character is selected.
|
|
||||||
|
|
||||||
autosave
|
autosave
|
||||||
--------
|
--------
|
||||||
|
@ -32,6 +29,17 @@ timeplayed
|
||||||
:Default: False
|
:Default: False
|
||||||
|
|
||||||
This setting determines whether the amount of the time the player has spent playing will be displayed
|
This setting determines whether the amount of the time the player has spent playing will be displayed
|
||||||
for each saved game in the Load menu.
|
for each saved game in the Load menu. Currently, the counter includes time spent in menus, including the pause menu, but does not include time spent with the game window minimized.
|
||||||
|
|
||||||
|
This setting can only be configured by editing the settings configuration file.
|
||||||
|
|
||||||
|
max quicksaves
|
||||||
|
----------
|
||||||
|
|
||||||
|
:Type: integer
|
||||||
|
:Range: >0
|
||||||
|
:Default: 1
|
||||||
|
|
||||||
|
This setting determines how many quicksave and autosave slots you can have at a time. If greater than 1, quicksaves will be sequentially created each time you quicksave. Once the maximum number of quicksaves has been reached, the oldest quicksave will be recycled the next time you perform a quicksave.
|
||||||
|
|
||||||
This setting can only be configured by editing the settings configuration file.
|
This setting can only be configured by editing the settings configuration file.
|
||||||
|
|
|
@ -12,6 +12,8 @@ Force rendering with shaders. By default, only bump-mapped objects will use shad
|
||||||
Enabling this option may cause slightly different visuals if the "clamp lighting" option is set to false.
|
Enabling this option may cause slightly different visuals if the "clamp lighting" option is set to false.
|
||||||
Otherwise, there should not be a visual difference.
|
Otherwise, there should not be a visual difference.
|
||||||
|
|
||||||
|
Please note enabling shaders has a significant performance impact on most systems.
|
||||||
|
|
||||||
force per pixel lighting
|
force per pixel lighting
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
|
@ -21,7 +23,7 @@ force per pixel lighting
|
||||||
|
|
||||||
Force the use of per pixel lighting. By default, only bump mapped objects use per-pixel lighting.
|
Force the use of per pixel lighting. By default, only bump mapped objects use per-pixel lighting.
|
||||||
Has no effect if the 'force shaders' option is false.
|
Has no effect if the 'force shaders' option is false.
|
||||||
Enabling per-pixel lighting can result in visual differences to the original MW engine.
|
Enabling per-pixel lighting results in visual differences to the original MW engine.
|
||||||
It is not recommended to enable this option when using vanilla Morrowind files,
|
It is not recommended to enable this option when using vanilla Morrowind files,
|
||||||
because certain lights in Morrowind rely on vertex lighting to look as intended.
|
because certain lights in Morrowind rely on vertex lighting to look as intended.
|
||||||
|
|
||||||
|
@ -34,9 +36,10 @@ clamp lighting
|
||||||
|
|
||||||
Restrict the amount of lighting that an object can receive to a maximum of (1,1,1).
|
Restrict the amount of lighting that an object can receive to a maximum of (1,1,1).
|
||||||
Only affects objects that render with shaders (see 'force shaders' option).
|
Only affects objects that render with shaders (see 'force shaders' option).
|
||||||
Always affects terrain. Setting this option to 'true' results in fixed-function compatible lighting,
|
Always affects terrain.
|
||||||
but the lighting may appear 'dull' and there might be color shifts.
|
|
||||||
Setting this option to 'false' results in more realistic lighting.
|
Leaving this option at its default makes the lighting compatible with Morrowind's fixed-function method,
|
||||||
|
but the lighting may appear dull and there might be color shifts. Setting this option to 'false' results in more dynamic lighting.
|
||||||
|
|
||||||
auto use object normal maps
|
auto use object normal maps
|
||||||
---------------------------
|
---------------------------
|
||||||
|
@ -119,4 +122,4 @@ terrain specular map pattern
|
||||||
:Range:
|
:Range:
|
||||||
:Default: _diffusespec
|
:Default: _diffusespec
|
||||||
|
|
||||||
The filename pattern to probe for when detecting terrain specular maps (see 'auto use terrain specular maps')
|
The filename pattern to probe for when detecting terrain specular maps (see 'auto use terrain specular maps')
|
||||||
|
|
|
@ -13,67 +13,62 @@ which should usually be sufficient, but if you need to explicitly specify a devi
|
||||||
|
|
||||||
The names of detected devices can be found in the openmw.log file in your configuration directory.
|
The names of detected devices can be found in the openmw.log file in your configuration directory.
|
||||||
|
|
||||||
The default value is the empty string. This setting can only be configured by editing the settings configuration file.
|
This setting can only be configured by editing the settings configuration file.
|
||||||
|
|
||||||
master volume
|
master volume
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
:Type: floating point
|
:Type: floating point
|
||||||
:Range: 0.0 to 1.0
|
:Range: 0.0 (silent) to 1.0 (maximum volume)
|
||||||
:Default: 1.0
|
:Default: 1.0
|
||||||
|
|
||||||
This setting controls the overall volume.
|
This setting controls the overall volume.
|
||||||
The master volume is multiplied with all other volume settings to determine the final volume.
|
The master volume is multiplied with specific volume settings to determine the final volume.
|
||||||
|
|
||||||
The default value is 1.0. Valid values range from 0.0 (silent) to 1.0 (maximum volume).
|
|
||||||
This setting can be changed in game using the Master slider from the Audio panel of the Options menu.
|
This setting can be changed in game using the Master slider from the Audio panel of the Options menu.
|
||||||
|
|
||||||
footsteps volume
|
footsteps volume
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
:Type: floating point
|
:Type: floating point
|
||||||
:Range: 0.0 to 1.0
|
:Range: 0.0 (silent) to 1.0 (maximum volume)
|
||||||
:Default: 0.2
|
:Default: 0.2
|
||||||
|
|
||||||
This setting controls the volume of footsteps from the character and other actors.
|
This setting controls the volume of footsteps from the character and other actors.
|
||||||
|
|
||||||
Valid values range from 0.0 (silent) to 1.0 (maximum volume).
|
|
||||||
This setting can be changed in game using the Footsteps slider from the Audio panel of the Options menu.
|
This setting can be changed in game using the Footsteps slider from the Audio panel of the Options menu.
|
||||||
|
|
||||||
music volume
|
music volume
|
||||||
------------
|
------------
|
||||||
|
|
||||||
:Type: floating point
|
:Type: floating point
|
||||||
:Range: 0.0 to 1.0
|
:Range: 0.0 (silent) to 1.0 (maximum volume)
|
||||||
:Default: 0.5
|
:Default: 0.5
|
||||||
|
|
||||||
This setting controls the volume for music tracks.
|
This setting controls the volume for music tracks.
|
||||||
|
|
||||||
The default value is 0.5. Valid values range from 0.0 (silent) to 1.0 (maximum volume).
|
|
||||||
This setting can be changed in game using the Music slider from the Audio panel of the Options menu.
|
This setting can be changed in game using the Music slider from the Audio panel of the Options menu.
|
||||||
|
|
||||||
sfx volume
|
sfx volume
|
||||||
----------
|
----------
|
||||||
|
|
||||||
:Type: floating point
|
:Type: floating point
|
||||||
:Range: 0.0 to 1.0
|
:Range: 0.0 (silent) to 1.0 (maximum volume)
|
||||||
:Default: 1.0
|
:Default: 1.0
|
||||||
|
|
||||||
This setting controls the volume for special sound effects such as combat noises.
|
This setting controls the volume for special sound effects such as combat noises.
|
||||||
|
|
||||||
Valid values range from 0.0 (silent) to 1.0 (maximum volume).
|
|
||||||
This setting can be changed in game using the Effects slider from the Audio panel of the Options menu.
|
This setting can be changed in game using the Effects slider from the Audio panel of the Options menu.
|
||||||
|
|
||||||
voice volume
|
voice volume
|
||||||
------------
|
------------
|
||||||
|
|
||||||
:Type: floating point
|
:Type: floating point
|
||||||
:Range: 0.0 to 1.0
|
:Range: 0.0 (silent) to 1.0 (maximum volume)
|
||||||
:Default: 0.8
|
:Default: 0.8
|
||||||
|
|
||||||
This setting controls the volume for spoken dialog from NPCs.
|
This setting controls the volume for spoken dialog from NPCs.
|
||||||
|
|
||||||
Valid values range from 0.0 (silent) to 1.0 (maximum volume).
|
|
||||||
This setting can be changed in game using the Voice slider from the Audio panel of the Options menu.
|
This setting can be changed in game using the Voice slider from the Audio panel of the Options menu.
|
||||||
|
|
||||||
buffer cache min
|
buffer cache min
|
||||||
|
@ -129,5 +124,5 @@ This setting specifies which HRTF profile to use when HRTF is enabled. Blank mea
|
||||||
This setting has no effect if HRTF is not enabled based on the hrtf enable setting.
|
This setting has no effect if HRTF is not enabled based on the hrtf enable setting.
|
||||||
Allowed values for this field are enumerated in openmw.log file is an HRTF enabled ausio system is installed.
|
Allowed values for this field are enumerated in openmw.log file is an HRTF enabled ausio system is installed.
|
||||||
|
|
||||||
The default value is the empty string, which uses the default profile.
|
The default value is empty, which uses the default profile.
|
||||||
This setting can only be configured by editing the settings configuration file.
|
This setting can only be configured by editing the settings configuration file.
|
||||||
|
|
|
@ -8,9 +8,11 @@ distant terrain
|
||||||
:Range: True/False
|
:Range: True/False
|
||||||
:Default: False
|
:Default: False
|
||||||
|
|
||||||
Controls whether the engine will use paging and LOD algorithms to render the terrain of the entire world at all times.
|
Controls whether the engine will use paging and LOD algorithms to load the terrain of the entire world at all times.
|
||||||
Otherwise, only the terrain of the loaded cells is displayed.
|
Otherwise, only the terrain of the surrounding cells is loaded.
|
||||||
This setting is best used together with the 'viewing distance' setting in the camera section.
|
|
||||||
|
.. note::
|
||||||
|
When enabling distant terrain, make sure the 'viewing distance' in the camera section is set to a larger value so that you can actually see the additional terrain.
|
||||||
|
|
||||||
To avoid frame drops as the player moves around, nearby terrain pages are always preloaded in the background,
|
To avoid frame drops as the player moves around, nearby terrain pages are always preloaded in the background,
|
||||||
regardless of the preloading settings in the 'Cells' section,
|
regardless of the preloading settings in the 'Cells' section,
|
||||||
|
|
|
@ -10,7 +10,7 @@ resolution x
|
||||||
|
|
||||||
This setting determines the horizontal resolution of the OpenMW game window.
|
This setting determines the horizontal resolution of the OpenMW game window.
|
||||||
Larger values produce more detailed images within the constraints of your graphics hardware,
|
Larger values produce more detailed images within the constraints of your graphics hardware,
|
||||||
but also significantly reduce the frame rate.
|
but may reduce the frame rate.
|
||||||
|
|
||||||
The window resolution can be selected from a menu of common screen sizes
|
The window resolution can be selected from a menu of common screen sizes
|
||||||
in the Video tab of the Video Panel of the Options menu, or in the Graphics tab of the OpenMW Launcher.
|
in the Video tab of the Video Panel of the Options menu, or in the Graphics tab of the OpenMW Launcher.
|
||||||
|
@ -25,7 +25,7 @@ resolution y
|
||||||
|
|
||||||
This setting determines the vertical resolution of the OpenMW game window.
|
This setting determines the vertical resolution of the OpenMW game window.
|
||||||
Larger values produce more detailed images within the constraints of your graphics hardware,
|
Larger values produce more detailed images within the constraints of your graphics hardware,
|
||||||
but also significantly reduce the frame rate.
|
but may reduce the frame rate.
|
||||||
|
|
||||||
The window resolution can be selected from a menu of common screen sizes
|
The window resolution can be selected from a menu of common screen sizes
|
||||||
in the Video tab of the Video Panel of the Options menu, or in the Graphics tab of the OpenMW Launcher.
|
in the Video tab of the Video Panel of the Options menu, or in the Graphics tab of the OpenMW Launcher.
|
||||||
|
@ -128,9 +128,9 @@ vsync
|
||||||
This setting determines whether frame draws are synchronized with the vertical refresh rate of your monitor.
|
This setting determines whether frame draws are synchronized with the vertical refresh rate of your monitor.
|
||||||
Enabling this setting can reduce screen tearing,
|
Enabling this setting can reduce screen tearing,
|
||||||
a visual defect caused by updating the image buffer in the middle of a screen draw.
|
a visual defect caused by updating the image buffer in the middle of a screen draw.
|
||||||
Enabling this option typically implies limiting the framerate to 60 frames per second,
|
Enabling this option typically implies limiting the framerate to the refresh rate of your monitor,
|
||||||
but may also introduce additional delays caused by having to wait until the appropriate time
|
but may also introduce additional delays caused by having to wait until the appropriate time
|
||||||
(the vertical blanking interval) to draw a frame.
|
(the vertical blanking interval) to draw a frame, and a loss in mouse responsiveness known as 'input lag'.
|
||||||
|
|
||||||
This setting can be adjusted in game using the VSync button in the Video tab of the Video panel in the Options menu.
|
This setting can be adjusted in game using the VSync button in the Video tab of the Video panel in the Options menu.
|
||||||
It can also be changed by toggling the Vertical Sync check box in the Graphics tab of the OpenMW Launcher.
|
It can also be changed by toggling the Vertical Sync check box in the Graphics tab of the OpenMW Launcher.
|
||||||
|
@ -170,8 +170,7 @@ contrast
|
||||||
|
|
||||||
This setting controls the contrast correction for all video in the game.
|
This setting controls the contrast correction for all video in the game.
|
||||||
|
|
||||||
This setting can only be configured by editing the settings configuration file.
|
This setting can only be configured by editing the settings configuration file. It has been reported to not work on some Linux systems.
|
||||||
This setting does not currently work under Linux.
|
|
||||||
|
|
||||||
gamma
|
gamma
|
||||||
-----
|
-----
|
||||||
|
@ -184,4 +183,4 @@ This setting controls the gamma correction for all video in the game.
|
||||||
Gamma is an exponent that makes colors brighter if greater than 1.0 and darker if less than 1.0.
|
Gamma is an exponent that makes colors brighter if greater than 1.0 and darker if less than 1.0.
|
||||||
|
|
||||||
This setting can be changed in the Detail tab of the Video panel of the Options menu.
|
This setting can be changed in the Detail tab of the Video panel of the Options menu.
|
||||||
This setting does not currently work under Linux, and the in-game setting in the Options menu has been disabled.
|
It has been reported to not work on some Linux systems, and therefore the in-game setting in the Options menu has been disabled on Linux systems.
|
||||||
|
|
|
@ -25,7 +25,7 @@ Hand editing the configuration file might result in some fine tuning for alignme
|
||||||
but the settings will be overwritten if a window is moved.
|
but the settings will be overwritten if a window is moved.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
To scale the windows, making the widgets proportionally larger, see the scaling factor setting instead.
|
To scale the windows, making the widgets proportionally larger, see the scaling factor setting in the GUI section instead.
|
||||||
|
|
||||||
:Type: boolean
|
:Type: boolean
|
||||||
:Range: True/False
|
:Range: True/False
|
||||||
|
@ -40,18 +40,15 @@ For example, to pin only the map window, the actual settings will be::
|
||||||
|
|
||||||
The pinnable window can be pinned/unpinned by clicking on a button in the right upper corner of the window.
|
The pinnable window can be pinned/unpinned by clicking on a button in the right upper corner of the window.
|
||||||
|
|
||||||
.. note::
|
|
||||||
A world/local map switch button on the map window will be shown only in GUI mode.
|
|
||||||
|
|
||||||
stats
|
stats
|
||||||
-----
|
-----
|
||||||
|
|
||||||
:Default:
|
:Default:
|
||||||
x = 0.0
|
x = 0.015
|
||||||
|
|
||||||
y = 0.0
|
y = 0.015
|
||||||
|
|
||||||
h = 0.375
|
h = 0.45
|
||||||
|
|
||||||
w = 0.4275
|
w = 0.4275
|
||||||
|
|
||||||
|
@ -64,13 +61,13 @@ spells
|
||||||
------
|
------
|
||||||
|
|
||||||
:Default:
|
:Default:
|
||||||
x = 0.625
|
x = 0.63
|
||||||
|
|
||||||
y = 0.5725
|
y = 0.39
|
||||||
|
|
||||||
h = 0.375
|
h = 0.36
|
||||||
|
|
||||||
w = 0.4275
|
w = 0.51
|
||||||
|
|
||||||
pin = false
|
pin = false
|
||||||
|
|
||||||
|
@ -81,13 +78,13 @@ map
|
||||||
---
|
---
|
||||||
|
|
||||||
:Default:
|
:Default:
|
||||||
x = 0.625
|
x = 0.63
|
||||||
|
|
||||||
y = 0.0
|
y = 0.015
|
||||||
|
|
||||||
h = 0.375
|
h = 0.36
|
||||||
|
|
||||||
w = 0.5725
|
w = 0.37
|
||||||
|
|
||||||
pin = false
|
pin = false
|
||||||
|
|
||||||
|
@ -98,13 +95,13 @@ inventory
|
||||||
---------
|
---------
|
||||||
|
|
||||||
:Default:
|
:Default:
|
||||||
x = 0.0
|
x = 0.015
|
||||||
|
|
||||||
y = 0.4275
|
y = 0.54
|
||||||
|
|
||||||
h = 0.6225
|
h = 0.45
|
||||||
|
|
||||||
w = 0.5725
|
w = 0.38
|
||||||
|
|
||||||
pin = false
|
pin = false
|
||||||
|
|
||||||
|
@ -115,14 +112,13 @@ inventory container
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
:Default:
|
:Default:
|
||||||
x = 0.0
|
x = 0.015
|
||||||
|
|
||||||
y = 0.4275
|
y = 0.54
|
||||||
|
|
||||||
h = 0.6225
|
h = 0.45
|
||||||
|
|
||||||
w = 0.5725
|
|
||||||
|
|
||||||
|
w = 0.38
|
||||||
|
|
||||||
The player's inventory window while searching a container, showing the contents of the character's inventory.
|
The player's inventory window while searching a container, showing the contents of the character's inventory.
|
||||||
Activated by clicking on a container. The same window is used for searching dead bodies, and pickpocketing people.
|
Activated by clicking on a container. The same window is used for searching dead bodies, and pickpocketing people.
|
||||||
|
@ -131,13 +127,13 @@ inventory barter
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
:Default:
|
:Default:
|
||||||
x = 0.0
|
x = 0.015
|
||||||
|
|
||||||
y = 0.4275
|
y = 0.54
|
||||||
|
|
||||||
h = 0.6225
|
h = 0.45
|
||||||
|
|
||||||
w = 0.5725
|
w = 0.38
|
||||||
|
|
||||||
The player's inventory window while bartering. It displays goods owned by the character while bartering.
|
The player's inventory window while bartering. It displays goods owned by the character while bartering.
|
||||||
Activated by clicking on the Barter choice in the dialog window for an NPC.
|
Activated by clicking on the Barter choice in the dialog window for an NPC.
|
||||||
|
@ -146,13 +142,13 @@ inventory companion
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
:Default:
|
:Default:
|
||||||
x = 0.0
|
x = 0.015
|
||||||
|
|
||||||
y = 0.4275
|
y = 0.54
|
||||||
|
|
||||||
h = 0.6225
|
h = 0.45
|
||||||
|
|
||||||
w = 0.5725
|
w = 0.38
|
||||||
|
|
||||||
The player's inventory window while interacting with a companion.
|
The player's inventory window while interacting with a companion.
|
||||||
The companion windows were added in the Tribunal expansion, but are available everywhere in the OpenMW engine.
|
The companion windows were added in the Tribunal expansion, but are available everywhere in the OpenMW engine.
|
||||||
|
@ -161,13 +157,13 @@ container
|
||||||
---------
|
---------
|
||||||
|
|
||||||
:Default:
|
:Default:
|
||||||
x = 0.25
|
x = 0.49
|
||||||
|
|
||||||
y = 0.0
|
y = 0.54
|
||||||
|
|
||||||
h = 0.75
|
h = 0.39
|
||||||
|
|
||||||
w = 0.375
|
w = 0.38
|
||||||
|
|
||||||
The container window, showing the contents of the container. Activated by clicking on a container.
|
The container window, showing the contents of the container. Activated by clicking on a container.
|
||||||
The same window is used for searching dead bodies, and pickpocketing people.
|
The same window is used for searching dead bodies, and pickpocketing people.
|
||||||
|
@ -176,13 +172,13 @@ barter
|
||||||
------
|
------
|
||||||
|
|
||||||
:Default:
|
:Default:
|
||||||
x = 0.25
|
x = 0.6
|
||||||
|
|
||||||
y = 0.0
|
y = 0.27
|
||||||
|
|
||||||
h = 0.75
|
h = 0.38
|
||||||
|
|
||||||
w = 0.375
|
w = 0.63
|
||||||
|
|
||||||
The NPC bartering window, displaying goods owned by the shopkeeper while bartering.
|
The NPC bartering window, displaying goods owned by the shopkeeper while bartering.
|
||||||
Activated by clicking on the Barter choice in the dialog window for an NPC.
|
Activated by clicking on the Barter choice in the dialog window for an NPC.
|
||||||
|
@ -191,13 +187,13 @@ companion
|
||||||
---------
|
---------
|
||||||
|
|
||||||
:Default:
|
:Default:
|
||||||
x = 0.25
|
x = 0.6
|
||||||
|
|
||||||
y = 0.0
|
y = 0.27
|
||||||
|
|
||||||
h = 0.75
|
h = 0.38
|
||||||
|
|
||||||
w = 0.375
|
w = 0.63
|
||||||
|
|
||||||
The NPC's inventory window while interacting with a companion.
|
The NPC's inventory window while interacting with a companion.
|
||||||
The companion windows were added in the Tribunal expansion, but are available everywhere in the OpenMW engine.
|
The companion windows were added in the Tribunal expansion, but are available everywhere in the OpenMW engine.
|
||||||
|
@ -206,13 +202,13 @@ dialogue
|
||||||
--------
|
--------
|
||||||
|
|
||||||
:Default:
|
:Default:
|
||||||
x = 0.095
|
x = 0.15
|
||||||
|
|
||||||
y = 0.095
|
y = 0.5
|
||||||
|
|
||||||
h = 0.810
|
h = 0.7
|
||||||
|
|
||||||
w = 0.810
|
w = 0.45
|
||||||
|
|
||||||
The dialog window, for talking with NPCs.
|
The dialog window, for talking with NPCs.
|
||||||
Activated by clicking on a NPC.
|
Activated by clicking on a NPC.
|
||||||
|
@ -237,9 +233,9 @@ console
|
||||||
-------
|
-------
|
||||||
|
|
||||||
:Default:
|
:Default:
|
||||||
x = 0.0
|
x = 0.015
|
||||||
|
|
||||||
y = 0.0
|
y = 0.015
|
||||||
|
|
||||||
h = 1.0
|
h = 1.0
|
||||||
|
|
||||||
|
|
153
extern/oics/tinyxmlparser.cpp
vendored
153
extern/oics/tinyxmlparser.cpp
vendored
|
@ -2,23 +2,23 @@
|
||||||
www.sourceforge.net/projects/tinyxml
|
www.sourceforge.net/projects/tinyxml
|
||||||
Original code (2.0 and earlier )copyright (c) 2000-2002 Lee Thomason (www.grinninglizard.com)
|
Original code (2.0 and earlier )copyright (c) 2000-2002 Lee Thomason (www.grinninglizard.com)
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
This software is provided 'as-is', without any express or implied
|
||||||
warranty. In no event will the authors be held liable for any
|
warranty. In no event will the authors be held liable for any
|
||||||
damages arising from the use of this software.
|
damages arising from the use of this software.
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any
|
Permission is granted to anyone to use this software for any
|
||||||
purpose, including commercial applications, and to alter it and
|
purpose, including commercial applications, and to alter it and
|
||||||
redistribute it freely, subject to the following restrictions:
|
redistribute it freely, subject to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must
|
1. The origin of this software must not be misrepresented; you must
|
||||||
not claim that you wrote the original software. If you use this
|
not claim that you wrote the original software. If you use this
|
||||||
software in a product, an acknowledgment in the product documentation
|
software in a product, an acknowledgment in the product documentation
|
||||||
would be appreciated but is not required.
|
would be appreciated but is not required.
|
||||||
|
|
||||||
2. Altered source versions must be plainly marked as such, and
|
2. Altered source versions must be plainly marked as such, and
|
||||||
must not be misrepresented as being the original software.
|
must not be misrepresented as being the original software.
|
||||||
|
|
||||||
3. This notice may not be removed or altered from any source
|
3. This notice may not be removed or altered from any source
|
||||||
distribution.
|
distribution.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -39,8 +39,8 @@ distribution.
|
||||||
|
|
||||||
// Note tha "PutString" hardcodes the same list. This
|
// Note tha "PutString" hardcodes the same list. This
|
||||||
// is less flexible than it appears. Changing the entries
|
// is less flexible than it appears. Changing the entries
|
||||||
// or order will break putstring.
|
// or order will break putstring.
|
||||||
TiXmlBase::Entity TiXmlBase::entity[ NUM_ENTITY ] =
|
TiXmlBase::Entity TiXmlBase::entity[ NUM_ENTITY ] =
|
||||||
{
|
{
|
||||||
{ "&", 5, '&' },
|
{ "&", 5, '&' },
|
||||||
{ "<", 4, '<' },
|
{ "<", 4, '<' },
|
||||||
|
@ -50,20 +50,20 @@ TiXmlBase::Entity TiXmlBase::entity[ NUM_ENTITY ] =
|
||||||
};
|
};
|
||||||
|
|
||||||
// Bunch of unicode info at:
|
// Bunch of unicode info at:
|
||||||
// http://www.unicode.org/faq/utf_bom.html
|
// https://www.unicode.org/faq/utf_bom.html
|
||||||
// Including the basic of this table, which determines the #bytes in the
|
// Including the basic of this table, which determines the #bytes in the
|
||||||
// sequence from the lead byte. 1 placed for invalid sequences --
|
// sequence from the lead byte. 1 placed for invalid sequences --
|
||||||
// although the result will be junk, pass it through as much as possible.
|
// although the result will be junk, pass it through as much as possible.
|
||||||
// Beware of the non-characters in UTF-8:
|
// Beware of the non-characters in UTF-8:
|
||||||
// ef bb bf (Microsoft "lead bytes")
|
// ef bb bf (Microsoft "lead bytes")
|
||||||
// ef bf be
|
// ef bf be
|
||||||
// ef bf bf
|
// ef bf bf
|
||||||
|
|
||||||
const unsigned char TIXML_UTF_LEAD_0 = 0xefU;
|
const unsigned char TIXML_UTF_LEAD_0 = 0xefU;
|
||||||
const unsigned char TIXML_UTF_LEAD_1 = 0xbbU;
|
const unsigned char TIXML_UTF_LEAD_1 = 0xbbU;
|
||||||
const unsigned char TIXML_UTF_LEAD_2 = 0xbfU;
|
const unsigned char TIXML_UTF_LEAD_2 = 0xbfU;
|
||||||
|
|
||||||
const int TiXmlBase::utf8ByteTable[256] =
|
const int TiXmlBase::utf8ByteTable[256] =
|
||||||
{
|
{
|
||||||
// 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
// 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x00
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x00
|
||||||
|
@ -75,9 +75,9 @@ const int TiXmlBase::utf8ByteTable[256] =
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x60
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x60
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x70 End of ASCII range
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x70 End of ASCII range
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x80 0x80 to 0xc1 invalid
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x80 0x80 to 0xc1 invalid
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x90
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x90
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xa0
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xa0
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xb0
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xb0
|
||||||
1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xc0 0xc2 to 0xdf 2 byte
|
1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xc0 0xc2 to 0xdf 2 byte
|
||||||
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xd0
|
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xd0
|
||||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 0xe0 0xe0 to 0xef 3 byte
|
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 0xe0 0xe0 to 0xef 3 byte
|
||||||
|
@ -91,7 +91,7 @@ void TiXmlBase::ConvertUTF32ToUTF8( unsigned long input, char* output, int* leng
|
||||||
const unsigned long BYTE_MARK = 0x80;
|
const unsigned long BYTE_MARK = 0x80;
|
||||||
const unsigned long FIRST_BYTE_MARK[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC };
|
const unsigned long FIRST_BYTE_MARK[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC };
|
||||||
|
|
||||||
if (input < 0x80)
|
if (input < 0x80)
|
||||||
*length = 1;
|
*length = 1;
|
||||||
else if ( input < 0x800 )
|
else if ( input < 0x800 )
|
||||||
*length = 2;
|
*length = 2;
|
||||||
|
@ -105,22 +105,22 @@ void TiXmlBase::ConvertUTF32ToUTF8( unsigned long input, char* output, int* leng
|
||||||
output += *length;
|
output += *length;
|
||||||
|
|
||||||
// Scary scary fall throughs.
|
// Scary scary fall throughs.
|
||||||
switch (*length)
|
switch (*length)
|
||||||
{
|
{
|
||||||
case 4:
|
case 4:
|
||||||
--output;
|
--output;
|
||||||
*output = (char)((input | BYTE_MARK) & BYTE_MASK);
|
*output = (char)((input | BYTE_MARK) & BYTE_MASK);
|
||||||
input >>= 6;
|
input >>= 6;
|
||||||
case 3:
|
case 3:
|
||||||
--output;
|
--output;
|
||||||
*output = (char)((input | BYTE_MARK) & BYTE_MASK);
|
*output = (char)((input | BYTE_MARK) & BYTE_MASK);
|
||||||
input >>= 6;
|
input >>= 6;
|
||||||
case 2:
|
case 2:
|
||||||
--output;
|
--output;
|
||||||
*output = (char)((input | BYTE_MARK) & BYTE_MASK);
|
*output = (char)((input | BYTE_MARK) & BYTE_MASK);
|
||||||
input >>= 6;
|
input >>= 6;
|
||||||
case 1:
|
case 1:
|
||||||
--output;
|
--output;
|
||||||
*output = (char)(input | FIRST_BYTE_MARK[*length]);
|
*output = (char)(input | FIRST_BYTE_MARK[*length]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -130,7 +130,7 @@ void TiXmlBase::ConvertUTF32ToUTF8( unsigned long input, char* output, int* leng
|
||||||
{
|
{
|
||||||
// This will only work for low-ascii, everything else is assumed to be a valid
|
// This will only work for low-ascii, everything else is assumed to be a valid
|
||||||
// letter. I'm not sure this is the best approach, but it is quite tricky trying
|
// letter. I'm not sure this is the best approach, but it is quite tricky trying
|
||||||
// to figure out alhabetical vs. not across encoding. So take a very
|
// to figure out alhabetical vs. not across encoding. So take a very
|
||||||
// conservative approach.
|
// conservative approach.
|
||||||
|
|
||||||
// if ( encoding == TIXML_ENCODING_UTF8 )
|
// if ( encoding == TIXML_ENCODING_UTF8 )
|
||||||
|
@ -151,7 +151,7 @@ void TiXmlBase::ConvertUTF32ToUTF8( unsigned long input, char* output, int* leng
|
||||||
{
|
{
|
||||||
// This will only work for low-ascii, everything else is assumed to be a valid
|
// This will only work for low-ascii, everything else is assumed to be a valid
|
||||||
// letter. I'm not sure this is the best approach, but it is quite tricky trying
|
// letter. I'm not sure this is the best approach, but it is quite tricky trying
|
||||||
// to figure out alhabetical vs. not across encoding. So take a very
|
// to figure out alhabetical vs. not across encoding. So take a very
|
||||||
// conservative approach.
|
// conservative approach.
|
||||||
|
|
||||||
// if ( encoding == TIXML_ENCODING_UTF8 )
|
// if ( encoding == TIXML_ENCODING_UTF8 )
|
||||||
|
@ -224,7 +224,7 @@ void TiXmlParsingData::Stamp( const char* now, TiXmlEncoding encoding )
|
||||||
case '\r':
|
case '\r':
|
||||||
// bump down to the next line
|
// bump down to the next line
|
||||||
++row;
|
++row;
|
||||||
col = 0;
|
col = 0;
|
||||||
// Eat the character
|
// Eat the character
|
||||||
++p;
|
++p;
|
||||||
|
|
||||||
|
@ -266,11 +266,11 @@ void TiXmlParsingData::Stamp( const char* now, TiXmlEncoding encoding )
|
||||||
// In these cases, don't advance the column. These are
|
// In these cases, don't advance the column. These are
|
||||||
// 0-width spaces.
|
// 0-width spaces.
|
||||||
if ( *(pU+1)==TIXML_UTF_LEAD_1 && *(pU+2)==TIXML_UTF_LEAD_2 )
|
if ( *(pU+1)==TIXML_UTF_LEAD_1 && *(pU+2)==TIXML_UTF_LEAD_2 )
|
||||||
p += 3;
|
p += 3;
|
||||||
else if ( *(pU+1)==0xbfU && *(pU+2)==0xbeU )
|
else if ( *(pU+1)==0xbfU && *(pU+2)==0xbeU )
|
||||||
p += 3;
|
p += 3;
|
||||||
else if ( *(pU+1)==0xbfU && *(pU+2)==0xbfU )
|
else if ( *(pU+1)==0xbfU && *(pU+2)==0xbfU )
|
||||||
p += 3;
|
p += 3;
|
||||||
else
|
else
|
||||||
{ p +=3; ++col; } // A normal character.
|
{ p +=3; ++col; } // A normal character.
|
||||||
}
|
}
|
||||||
|
@ -322,10 +322,10 @@ const char* TiXmlBase::SkipWhiteSpace( const char* p, TiXmlEncoding encoding )
|
||||||
while ( *p )
|
while ( *p )
|
||||||
{
|
{
|
||||||
const unsigned char* pU = (const unsigned char*)p;
|
const unsigned char* pU = (const unsigned char*)p;
|
||||||
|
|
||||||
// Skip the stupid Microsoft UTF-8 Byte order marks
|
// Skip the stupid Microsoft UTF-8 Byte order marks
|
||||||
if ( *(pU+0)==TIXML_UTF_LEAD_0
|
if ( *(pU+0)==TIXML_UTF_LEAD_0
|
||||||
&& *(pU+1)==TIXML_UTF_LEAD_1
|
&& *(pU+1)==TIXML_UTF_LEAD_1
|
||||||
&& *(pU+2)==TIXML_UTF_LEAD_2 )
|
&& *(pU+2)==TIXML_UTF_LEAD_2 )
|
||||||
{
|
{
|
||||||
p += 3;
|
p += 3;
|
||||||
|
@ -413,12 +413,12 @@ const char* TiXmlBase::ReadName( const char* p, TIXML_STRING * name, TiXmlEncodi
|
||||||
// After that, they can be letters, underscores, numbers,
|
// After that, they can be letters, underscores, numbers,
|
||||||
// hyphens, or colons. (Colons are valid ony for namespaces,
|
// hyphens, or colons. (Colons are valid ony for namespaces,
|
||||||
// but tinyxml can't tell namespaces from names.)
|
// but tinyxml can't tell namespaces from names.)
|
||||||
if ( p && *p
|
if ( p && *p
|
||||||
&& ( IsAlpha( (unsigned char) *p, encoding ) || *p == '_' ) )
|
&& ( IsAlpha( (unsigned char) *p, encoding ) || *p == '_' ) )
|
||||||
{
|
{
|
||||||
const char* start = p;
|
const char* start = p;
|
||||||
while( p && *p
|
while( p && *p
|
||||||
&& ( IsAlphaNum( (unsigned char ) *p, encoding )
|
&& ( IsAlphaNum( (unsigned char ) *p, encoding )
|
||||||
|| *p == '_'
|
|| *p == '_'
|
||||||
|| *p == '-'
|
|| *p == '-'
|
||||||
|| *p == '.'
|
|| *p == '.'
|
||||||
|
@ -469,7 +469,7 @@ const char* TiXmlBase::GetEntity( const char* p, char* value, int* length, TiXml
|
||||||
ucs += mult * (*q - 'a' + 10);
|
ucs += mult * (*q - 'a' + 10);
|
||||||
else if ( *q >= 'A' && *q <= 'F' )
|
else if ( *q >= 'A' && *q <= 'F' )
|
||||||
ucs += mult * (*q - 'A' + 10 );
|
ucs += mult * (*q - 'A' + 10 );
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
mult *= 16;
|
mult *= 16;
|
||||||
--q;
|
--q;
|
||||||
|
@ -492,7 +492,7 @@ const char* TiXmlBase::GetEntity( const char* p, char* value, int* length, TiXml
|
||||||
{
|
{
|
||||||
if ( *q >= '0' && *q <= '9' )
|
if ( *q >= '0' && *q <= '9' )
|
||||||
ucs += mult * (*q - '0');
|
ucs += mult * (*q - '0');
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
mult *= 10;
|
mult *= 10;
|
||||||
--q;
|
--q;
|
||||||
|
@ -571,10 +571,10 @@ bool TiXmlBase::StringEqual( const char* p,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* TiXmlBase::ReadText( const char* p,
|
const char* TiXmlBase::ReadText( const char* p,
|
||||||
TIXML_STRING * text,
|
TIXML_STRING * text,
|
||||||
bool trimWhiteSpace,
|
bool trimWhiteSpace,
|
||||||
const char* endTag,
|
const char* endTag,
|
||||||
bool caseInsensitive,
|
bool caseInsensitive,
|
||||||
TiXmlEncoding encoding )
|
TiXmlEncoding encoding )
|
||||||
{
|
{
|
||||||
|
@ -631,7 +631,7 @@ const char* TiXmlBase::ReadText( const char* p,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( p )
|
if ( p )
|
||||||
p += strlen( endTag );
|
p += strlen( endTag );
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
@ -647,7 +647,7 @@ void TiXmlDocument::StreamIn( std::istream * in, TIXML_STRING * tag )
|
||||||
// This "pre-streaming" will never read the closing ">" so the
|
// This "pre-streaming" will never read the closing ">" so the
|
||||||
// sub-tag can orient itself.
|
// sub-tag can orient itself.
|
||||||
|
|
||||||
if ( !StreamTo( in, '<', tag ) )
|
if ( !StreamTo( in, '<', tag ) )
|
||||||
{
|
{
|
||||||
SetError( TIXML_ERROR_PARSING_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN );
|
SetError( TIXML_ERROR_PARSING_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN );
|
||||||
return;
|
return;
|
||||||
|
@ -669,7 +669,7 @@ void TiXmlDocument::StreamIn( std::istream * in, TIXML_STRING * tag )
|
||||||
|
|
||||||
if ( in->good() )
|
if ( in->good() )
|
||||||
{
|
{
|
||||||
// We now have something we presume to be a node of
|
// We now have something we presume to be a node of
|
||||||
// some sort. Identify it, and call the node to
|
// some sort. Identify it, and call the node to
|
||||||
// continue streaming.
|
// continue streaming.
|
||||||
TiXmlNode* node = Identify( tag->c_str() + tagIndex, TIXML_DEFAULT_ENCODING );
|
TiXmlNode* node = Identify( tag->c_str() + tagIndex, TIXML_DEFAULT_ENCODING );
|
||||||
|
@ -778,7 +778,7 @@ const char* TiXmlDocument::Parse( const char* p, TiXmlParsingData* prevData, TiX
|
||||||
encoding = TIXML_ENCODING_UTF8;
|
encoding = TIXML_ENCODING_UTF8;
|
||||||
else if ( StringEqual( enc, "UTF8", true, TIXML_ENCODING_UNKNOWN ) )
|
else if ( StringEqual( enc, "UTF8", true, TIXML_ENCODING_UNKNOWN ) )
|
||||||
encoding = TIXML_ENCODING_UTF8; // incorrect, but be nice
|
encoding = TIXML_ENCODING_UTF8; // incorrect, but be nice
|
||||||
else
|
else
|
||||||
encoding = TIXML_ENCODING_LEGACY;
|
encoding = TIXML_ENCODING_LEGACY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -796,7 +796,7 @@ const char* TiXmlDocument::Parse( const char* p, TiXmlParsingData* prevData, TiX
|
||||||
}
|
}
|
||||||
|
|
||||||
void TiXmlDocument::SetError( int err, const char* pError, TiXmlParsingData* data, TiXmlEncoding encoding )
|
void TiXmlDocument::SetError( int err, const char* pError, TiXmlParsingData* data, TiXmlEncoding encoding )
|
||||||
{
|
{
|
||||||
// The first error in a chain is more accurate - don't set again!
|
// The first error in a chain is more accurate - don't set again!
|
||||||
if ( error )
|
if ( error )
|
||||||
return;
|
return;
|
||||||
|
@ -833,7 +833,7 @@ TiXmlNode* TiXmlNode::Identify( const char* p, TiXmlEncoding encoding )
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// What is this thing?
|
// What is this thing?
|
||||||
// - Elements start with a letter or underscore, but xml is reserved.
|
// - Elements start with a letter or underscore, but xml is reserved.
|
||||||
// - Comments: <!--
|
// - Comments: <!--
|
||||||
// - Decleration: <?xml
|
// - Decleration: <?xml
|
||||||
|
@ -921,7 +921,7 @@ void TiXmlElement::StreamIn (std::istream * in, TIXML_STRING * tag)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
(*tag) += (char) c ;
|
(*tag) += (char) c ;
|
||||||
|
|
||||||
if ( c == '>' )
|
if ( c == '>' )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -931,7 +931,7 @@ void TiXmlElement::StreamIn (std::istream * in, TIXML_STRING * tag)
|
||||||
// Okay...if we are a "/>" tag, then we're done. We've read a complete tag.
|
// Okay...if we are a "/>" tag, then we're done. We've read a complete tag.
|
||||||
// If not, identify and stream.
|
// If not, identify and stream.
|
||||||
|
|
||||||
if ( tag->at( tag->length() - 1 ) == '>'
|
if ( tag->at( tag->length() - 1 ) == '>'
|
||||||
&& tag->at( tag->length() - 2 ) == '/' )
|
&& tag->at( tag->length() - 2 ) == '/' )
|
||||||
{
|
{
|
||||||
// All good!
|
// All good!
|
||||||
|
@ -949,7 +949,7 @@ void TiXmlElement::StreamIn (std::istream * in, TIXML_STRING * tag)
|
||||||
StreamWhiteSpace( in, tag );
|
StreamWhiteSpace( in, tag );
|
||||||
|
|
||||||
// Do we have text?
|
// Do we have text?
|
||||||
if ( in->good() && in->peek() != '<' )
|
if ( in->good() && in->peek() != '<' )
|
||||||
{
|
{
|
||||||
// Yep, text.
|
// Yep, text.
|
||||||
TiXmlText text( "" );
|
TiXmlText text( "" );
|
||||||
|
@ -982,7 +982,7 @@ void TiXmlElement::StreamIn (std::istream * in, TIXML_STRING * tag)
|
||||||
document->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN );
|
document->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( c == '>' )
|
if ( c == '>' )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1102,7 +1102,7 @@ const char* TiXmlElement::Parse( const char* p, TiXmlParsingData* data, TiXmlEnc
|
||||||
// Empty tag.
|
// Empty tag.
|
||||||
if ( *p != '>' )
|
if ( *p != '>' )
|
||||||
{
|
{
|
||||||
if ( document ) document->SetError( TIXML_ERROR_PARSING_EMPTY, p, data, encoding );
|
if ( document ) document->SetError( TIXML_ERROR_PARSING_EMPTY, p, data, encoding );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return (p+1);
|
return (p+1);
|
||||||
|
@ -1210,8 +1210,8 @@ const char* TiXmlElement::ReadValue( const char* p, TiXmlParsingData* data, TiXm
|
||||||
LinkEndChild( textNode );
|
LinkEndChild( textNode );
|
||||||
else
|
else
|
||||||
delete textNode;
|
delete textNode;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// We hit a '<'
|
// We hit a '<'
|
||||||
// Have we hit a new element or an end tag? This could also be
|
// Have we hit a new element or an end tag? This could also be
|
||||||
|
@ -1227,7 +1227,7 @@ const char* TiXmlElement::ReadValue( const char* p, TiXmlParsingData* data, TiXm
|
||||||
{
|
{
|
||||||
p = node->Parse( p, data, encoding );
|
p = node->Parse( p, data, encoding );
|
||||||
LinkEndChild( node );
|
LinkEndChild( node );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1241,7 +1241,7 @@ const char* TiXmlElement::ReadValue( const char* p, TiXmlParsingData* data, TiXm
|
||||||
if ( !p )
|
if ( !p )
|
||||||
{
|
{
|
||||||
if ( document ) document->SetError( TIXML_ERROR_READING_ELEMENT_VALUE, 0, 0, encoding );
|
if ( document ) document->SetError( TIXML_ERROR_READING_ELEMENT_VALUE, 0, 0, encoding );
|
||||||
}
|
}
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1251,7 +1251,7 @@ void TiXmlUnknown::StreamIn( std::istream * in, TIXML_STRING * tag )
|
||||||
{
|
{
|
||||||
while ( in->good() )
|
while ( in->good() )
|
||||||
{
|
{
|
||||||
int c = in->get();
|
int c = in->get();
|
||||||
if ( c <= 0 )
|
if ( c <= 0 )
|
||||||
{
|
{
|
||||||
TiXmlDocument* document = GetDocument();
|
TiXmlDocument* document = GetDocument();
|
||||||
|
@ -1264,7 +1264,7 @@ void TiXmlUnknown::StreamIn( std::istream * in, TIXML_STRING * tag )
|
||||||
if ( c == '>' )
|
if ( c == '>' )
|
||||||
{
|
{
|
||||||
// All is well.
|
// All is well.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1309,7 +1309,7 @@ void TiXmlComment::StreamIn( std::istream * in, TIXML_STRING * tag )
|
||||||
{
|
{
|
||||||
while ( in->good() )
|
while ( in->good() )
|
||||||
{
|
{
|
||||||
int c = in->get();
|
int c = in->get();
|
||||||
if ( c <= 0 )
|
if ( c <= 0 )
|
||||||
{
|
{
|
||||||
TiXmlDocument* document = GetDocument();
|
TiXmlDocument* document = GetDocument();
|
||||||
|
@ -1320,12 +1320,12 @@ void TiXmlComment::StreamIn( std::istream * in, TIXML_STRING * tag )
|
||||||
|
|
||||||
(*tag) += (char) c;
|
(*tag) += (char) c;
|
||||||
|
|
||||||
if ( c == '>'
|
if ( c == '>'
|
||||||
&& tag->at( tag->length() - 2 ) == '-'
|
&& tag->at( tag->length() - 2 ) == '-'
|
||||||
&& tag->at( tag->length() - 3 ) == '-' )
|
&& tag->at( tag->length() - 3 ) == '-' )
|
||||||
{
|
{
|
||||||
// All is well.
|
// All is well.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1360,11 +1360,11 @@ const char* TiXmlComment::Parse( const char* p, TiXmlParsingData* data, TiXmlEnc
|
||||||
//
|
//
|
||||||
// from the XML spec:
|
// from the XML spec:
|
||||||
/*
|
/*
|
||||||
[Definition: Comments may appear anywhere in a document outside other markup; in addition,
|
[Definition: Comments may appear anywhere in a document outside other markup; in addition,
|
||||||
they may appear within the document type declaration at places allowed by the grammar.
|
they may appear within the document type declaration at places allowed by the grammar.
|
||||||
They are not part of the document's character data; an XML processor MAY, but need not,
|
They are not part of the document's character data; an XML processor MAY, but need not,
|
||||||
make it possible for an application to retrieve the text of comments. For compatibility,
|
make it possible for an application to retrieve the text of comments. For compatibility,
|
||||||
the string "--" (double-hyphen) MUST NOT occur within comments.] Parameter entity
|
the string "--" (double-hyphen) MUST NOT occur within comments.] Parameter entity
|
||||||
references MUST NOT be recognized within comments.
|
references MUST NOT be recognized within comments.
|
||||||
|
|
||||||
An example of a comment:
|
An example of a comment:
|
||||||
|
@ -1379,7 +1379,7 @@ const char* TiXmlComment::Parse( const char* p, TiXmlParsingData* data, TiXmlEnc
|
||||||
value.append( p, 1 );
|
value.append( p, 1 );
|
||||||
++p;
|
++p;
|
||||||
}
|
}
|
||||||
if ( p )
|
if ( p )
|
||||||
p += strlen( endTag );
|
p += strlen( endTag );
|
||||||
|
|
||||||
return p;
|
return p;
|
||||||
|
@ -1422,7 +1422,7 @@ const char* TiXmlAttribute::Parse( const char* p, TiXmlParsingData* data, TiXmlE
|
||||||
if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, p, data, encoding );
|
if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, p, data, encoding );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* end;
|
const char* end;
|
||||||
const char SINGLE_QUOTE = '\'';
|
const char SINGLE_QUOTE = '\'';
|
||||||
const char DOUBLE_QUOTE = '\"';
|
const char DOUBLE_QUOTE = '\"';
|
||||||
|
@ -1451,7 +1451,7 @@ const char* TiXmlAttribute::Parse( const char* p, TiXmlParsingData* data, TiXmlE
|
||||||
{
|
{
|
||||||
if ( *p == SINGLE_QUOTE || *p == DOUBLE_QUOTE ) {
|
if ( *p == SINGLE_QUOTE || *p == DOUBLE_QUOTE ) {
|
||||||
// [ 1451649 ] Attribute values with trailing quotes not handled correctly
|
// [ 1451649 ] Attribute values with trailing quotes not handled correctly
|
||||||
// We did not have an opening quote but seem to have a
|
// We did not have an opening quote but seem to have a
|
||||||
// closing one. Give up and throw an error.
|
// closing one. Give up and throw an error.
|
||||||
if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, p, data, encoding );
|
if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, p, data, encoding );
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1468,8 +1468,8 @@ void TiXmlText::StreamIn( std::istream * in, TIXML_STRING * tag )
|
||||||
{
|
{
|
||||||
while ( in->good() )
|
while ( in->good() )
|
||||||
{
|
{
|
||||||
int c = in->peek();
|
int c = in->peek();
|
||||||
if ( !cdata && (c == '<' ) )
|
if ( !cdata && (c == '<' ) )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1490,7 +1490,7 @@ void TiXmlText::StreamIn( std::istream * in, TIXML_STRING * tag )
|
||||||
// terminator of cdata.
|
// terminator of cdata.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -1529,7 +1529,7 @@ const char* TiXmlText::Parse( const char* p, TiXmlParsingData* data, TiXmlEncodi
|
||||||
++p;
|
++p;
|
||||||
}
|
}
|
||||||
|
|
||||||
TIXML_STRING dummy;
|
TIXML_STRING dummy;
|
||||||
p = ReadText( p, &dummy, false, endTag, false, encoding );
|
p = ReadText( p, &dummy, false, endTag, false, encoding );
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
@ -1603,19 +1603,19 @@ const char* TiXmlDeclaration::Parse( const char* p, TiXmlParsingData* data, TiXm
|
||||||
if ( StringEqual( p, "version", true, _encoding ) )
|
if ( StringEqual( p, "version", true, _encoding ) )
|
||||||
{
|
{
|
||||||
TiXmlAttribute attrib;
|
TiXmlAttribute attrib;
|
||||||
p = attrib.Parse( p, data, _encoding );
|
p = attrib.Parse( p, data, _encoding );
|
||||||
version = attrib.Value();
|
version = attrib.Value();
|
||||||
}
|
}
|
||||||
else if ( StringEqual( p, "encoding", true, _encoding ) )
|
else if ( StringEqual( p, "encoding", true, _encoding ) )
|
||||||
{
|
{
|
||||||
TiXmlAttribute attrib;
|
TiXmlAttribute attrib;
|
||||||
p = attrib.Parse( p, data, _encoding );
|
p = attrib.Parse( p, data, _encoding );
|
||||||
encoding = attrib.Value();
|
encoding = attrib.Value();
|
||||||
}
|
}
|
||||||
else if ( StringEqual( p, "standalone", true, _encoding ) )
|
else if ( StringEqual( p, "standalone", true, _encoding ) )
|
||||||
{
|
{
|
||||||
TiXmlAttribute attrib;
|
TiXmlAttribute attrib;
|
||||||
p = attrib.Parse( p, data, _encoding );
|
p = attrib.Parse( p, data, _encoding );
|
||||||
standalone = attrib.Value();
|
standalone = attrib.Value();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1635,4 +1635,3 @@ bool TiXmlText::Blank() const
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "https://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
<key>CFBundleIconFile</key>
|
<key>CFBundleIconFile</key>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "https://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
<key>CFBundleDevelopmentRegion</key>
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
|
|
@ -23,15 +23,15 @@ Copyright 2017 Bret Curtis <psi29a@gmail.com>
|
||||||
|
|
||||||
<screenshots>
|
<screenshots>
|
||||||
<screenshot type="default">
|
<screenshot type="default">
|
||||||
<image>http://wiki.openmw.org/images/b/b2/Openmw_0.11.1_launcher_1.png</image>
|
<image>https://wiki.openmw.org/images/b/b2/Openmw_0.11.1_launcher_1.png</image>
|
||||||
<caption>The OpenMW launcher</caption>
|
<caption>The OpenMW launcher</caption>
|
||||||
</screenshot>
|
</screenshot>
|
||||||
<screenshot>
|
<screenshot>
|
||||||
<image>http://wiki.openmw.org/images/f/f1/Screenshot_mournhold_plaza_0.35.png</image>
|
<image>https://wiki.openmw.org/images/f/f1/Screenshot_mournhold_plaza_0.35.png</image>
|
||||||
<caption>The Mournhold's plaza on OpenMW</caption>
|
<caption>The Mournhold's plaza on OpenMW</caption>
|
||||||
</screenshot>
|
</screenshot>
|
||||||
<screenshot>
|
<screenshot>
|
||||||
<image>http://wiki.openmw.org/images/5/5b/Screenshot_Vivec_seen_from_Ebonheart_0.35.png</image>
|
<image>https://wiki.openmw.org/images/5/5b/Screenshot_Vivec_seen_from_Ebonheart_0.35.png</image>
|
||||||
<caption>Vivec seen from Ebonheart on OpenMW</caption>
|
<caption>Vivec seen from Ebonheart on OpenMW</caption>
|
||||||
</screenshot>
|
</screenshot>
|
||||||
</screenshots>
|
</screenshots>
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
# significance of each setting, interaction with other settings, hard
|
# significance of each setting, interaction with other settings, hard
|
||||||
# limits on value ranges and more information in general, please read
|
# limits on value ranges and more information in general, please read
|
||||||
# the detailed documentation at:
|
# the detailed documentation at:
|
||||||
#
|
#
|
||||||
# http://openmw.readthedocs.io/en/master/reference/modding/settings/index.html
|
# https://openmw.readthedocs.io/en/master/reference/modding/settings/index.html
|
||||||
#
|
#
|
||||||
|
|
||||||
[Camera]
|
[Camera]
|
||||||
|
@ -79,6 +79,9 @@ prediction time = 1
|
||||||
# How long to keep models/textures/collision shapes in cache after they're no longer referenced/required (in seconds)
|
# How long to keep models/textures/collision shapes in cache after they're no longer referenced/required (in seconds)
|
||||||
cache expiry delay = 5
|
cache expiry delay = 5
|
||||||
|
|
||||||
|
# Affects the time to be set aside each frame for graphics preloading operations
|
||||||
|
target framerate = 60
|
||||||
|
|
||||||
# The count of pointers, that will be saved for a faster search by object ID.
|
# The count of pointers, that will be saved for a faster search by object ID.
|
||||||
pointers cache size = 40
|
pointers cache size = 40
|
||||||
|
|
||||||
|
@ -144,6 +147,9 @@ werewolf overlay = true
|
||||||
color background owned = 0.15 0.0 0.0 1.0
|
color background owned = 0.15 0.0 0.0 1.0
|
||||||
color crosshair owned = 1.0 0.15 0.15 1.0
|
color crosshair owned = 1.0 0.15 0.15 1.0
|
||||||
|
|
||||||
|
# Controls whether Arrow keys, Movement keys, Tab/Shift-Tab and Spacebar/Enter/Activate may be used to navigate GUI buttons.
|
||||||
|
keyboard navigation = true
|
||||||
|
|
||||||
[HUD]
|
[HUD]
|
||||||
|
|
||||||
# Displays the crosshair or reticle when not in GUI mode.
|
# Displays the crosshair or reticle when not in GUI mode.
|
||||||
|
@ -288,6 +294,10 @@ autosave = true
|
||||||
# Display the time played on each save file in the load menu.
|
# Display the time played on each save file in the load menu.
|
||||||
timeplayed = false
|
timeplayed = false
|
||||||
|
|
||||||
|
# The maximum number of quick (or auto) save slots to have.
|
||||||
|
# If all slots are used, the oldest save is reused
|
||||||
|
max quicksaves = 1
|
||||||
|
|
||||||
[Sound]
|
[Sound]
|
||||||
|
|
||||||
# Name of audio device file. Blank means use the default device.
|
# Name of audio device file. Blank means use the default device.
|
||||||
|
@ -376,7 +386,7 @@ reflect actors = false
|
||||||
# Overrides the value in '[Camera] small feature culling pixel size' specifically for water reflection/refraction textures.
|
# Overrides the value in '[Camera] small feature culling pixel size' specifically for water reflection/refraction textures.
|
||||||
small feature culling pixel size = 20.0
|
small feature culling pixel size = 20.0
|
||||||
|
|
||||||
# By what factor water downscales objects. Only works with water shader and refractions on.
|
# By what factor water downscales objects. Only works with water shader and refractions on.
|
||||||
refraction scale = 1.0
|
refraction scale = 1.0
|
||||||
|
|
||||||
[Windows]
|
[Windows]
|
||||||
|
@ -385,34 +395,34 @@ refraction scale = 1.0
|
||||||
# screen size. (0.0 to 1.0). X & Y, Width & Height.
|
# screen size. (0.0 to 1.0). X & Y, Width & Height.
|
||||||
|
|
||||||
# Stats window displaying level, race, class, skills and stats.
|
# Stats window displaying level, race, class, skills and stats.
|
||||||
stats x = 0.0
|
stats x = 0.015
|
||||||
stats y = 0.0
|
stats y = 0.015
|
||||||
stats w = 0.375
|
stats w = 0.4275
|
||||||
stats h = 0.4275
|
stats h = 0.45
|
||||||
# Stats window pin status
|
# Stats window pin status
|
||||||
stats pin = false
|
stats pin = false
|
||||||
|
|
||||||
# Spells window displaying powers, spells, and magical items.
|
# Spells window displaying powers, spells, and magical items.
|
||||||
spells x = 0.625
|
spells x = 0.63
|
||||||
spells y = 0.5725
|
spells y = 0.39
|
||||||
spells w = 0.375
|
spells w = 0.36
|
||||||
spells h = 0.4275
|
spells h = 0.51
|
||||||
# Spells window pin status
|
# Spells window pin status
|
||||||
spells pin = false
|
spells pin = false
|
||||||
|
|
||||||
# Local and world map window.
|
# Local and world map window.
|
||||||
map x = 0.625
|
map x = 0.63
|
||||||
map y = 0.0
|
map y = 0.015
|
||||||
map w = 0.375
|
map w = 0.36
|
||||||
map h = 0.5725
|
map h = 0.37
|
||||||
# Map window pin status
|
# Map window pin status
|
||||||
map pin = false
|
map pin = false
|
||||||
|
|
||||||
# Dialog window for talking with NPCs.
|
# Dialog window for talking with NPCs.
|
||||||
dialogue x = 0.095
|
dialogue x = 0.15
|
||||||
dialogue y = 0.095
|
dialogue y = 0.5
|
||||||
dialogue w = 0.810
|
dialogue w = 0.7
|
||||||
dialogue h = 0.810
|
dialogue h = 0.45
|
||||||
|
|
||||||
# Alchemy window for crafting potions.
|
# Alchemy window for crafting potions.
|
||||||
alchemy x = 0.25
|
alchemy x = 0.25
|
||||||
|
@ -421,51 +431,51 @@ alchemy w = 0.5
|
||||||
alchemy h = 0.5
|
alchemy h = 0.5
|
||||||
|
|
||||||
# Console command window for debugging commands.
|
# Console command window for debugging commands.
|
||||||
console x = 0.0
|
console x = 0.015
|
||||||
console y = 0.0
|
console y = 0.015
|
||||||
console w = 1.0
|
console w = 1.0
|
||||||
console h = 0.5
|
console h = 0.5
|
||||||
|
|
||||||
# Player inventory window when explicitly opened.
|
# Player inventory window when explicitly opened.
|
||||||
inventory x = 0.0
|
inventory x = 0.015
|
||||||
inventory y = 0.4275
|
inventory y = 0.54
|
||||||
inventory w = 0.6225
|
inventory w = 0.45
|
||||||
inventory h = 0.5725
|
inventory h = 0.38
|
||||||
# Inventory window pin status
|
# Inventory window pin status
|
||||||
inventory pin = false
|
inventory pin = false
|
||||||
|
|
||||||
# Player inventory window when searching a container.
|
# Player inventory window when searching a container.
|
||||||
inventory container x = 0.0
|
inventory container x = 0.015
|
||||||
inventory container y = 0.4275
|
inventory container y = 0.54
|
||||||
inventory container w = 0.6225
|
inventory container w = 0.45
|
||||||
inventory container h = 0.5725
|
inventory container h = 0.38
|
||||||
|
|
||||||
# Player inventory window when bartering with a shopkeeper.
|
# Player inventory window when bartering with a shopkeeper.
|
||||||
inventory barter x = 0.0
|
inventory barter x = 0.015
|
||||||
inventory barter y = 0.4275
|
inventory barter y = 0.54
|
||||||
inventory barter w = 0.6225
|
inventory barter w = 0.45
|
||||||
inventory barter h = 0.5725
|
inventory barter h = 0.38
|
||||||
|
|
||||||
# Player inventory window when trading with a companion.
|
# Player inventory window when trading with a companion.
|
||||||
inventory companion x = 0.0
|
inventory companion x = 0.015
|
||||||
inventory companion y = 0.4275
|
inventory companion y = 0.54
|
||||||
inventory companion w = 0.6225
|
inventory companion w = 0.45
|
||||||
inventory companion h = 0.5725
|
inventory companion h = 0.38
|
||||||
|
|
||||||
# Container inventory when searching a container.
|
# Container inventory when searching a container.
|
||||||
container x = 0.25
|
container x = 0.49
|
||||||
container y = 0.0
|
container y = 0.54
|
||||||
container w = 0.75
|
container w = 0.39
|
||||||
container h = 0.375
|
container h = 0.38
|
||||||
|
|
||||||
# NPC inventory window when bartering with a shopkeeper.
|
# NPC inventory window when bartering with a shopkeeper.
|
||||||
barter x = 0.25
|
barter x = 0.6
|
||||||
barter y = 0.0
|
barter y = 0.27
|
||||||
barter w = 0.75
|
barter w = 0.38
|
||||||
barter h = 0.375
|
barter h = 0.63
|
||||||
|
|
||||||
# NPC inventory window when trading with a companion.
|
# NPC inventory window when trading with a companion.
|
||||||
companion x = 0.25
|
companion x = 0.6
|
||||||
companion y = 0.0
|
companion y = 0.27
|
||||||
companion w = 0.75
|
companion w = 0.38
|
||||||
companion h = 0.375
|
companion h = 0.63
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
#define REFRACTION @refraction_enabled
|
#define REFRACTION @refraction_enabled
|
||||||
|
|
||||||
// Inspired by Blender GLSL Water by martinsh ( http://devlog-martinsh.blogspot.de/2012/07/waterundewater-shader-wip.html )
|
// Inspired by Blender GLSL Water by martinsh ( https://devlog-martinsh.blogspot.de/2012/07/waterundewater-shader-wip.html )
|
||||||
|
|
||||||
// tweakables -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
// tweakables -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||||
|
|
||||||
|
@ -67,16 +67,16 @@ vec4 circle(vec2 coords, vec2 i_part, float phase)
|
||||||
float d = length(toCenter);
|
float d = length(toCenter);
|
||||||
|
|
||||||
float r = RAIN_RIPPLE_RADIUS * phase;
|
float r = RAIN_RIPPLE_RADIUS * phase;
|
||||||
|
|
||||||
if (d > r)
|
if (d > r)
|
||||||
return vec4(0.0,0.0,1.0,0.0);
|
return vec4(0.0,0.0,1.0,0.0);
|
||||||
|
|
||||||
float sinValue = (sin(d / r * 1.2) + 0.7) / 2.0;
|
float sinValue = (sin(d / r * 1.2) + 0.7) / 2.0;
|
||||||
|
|
||||||
float height = (1.0 - abs(phase)) * pow(sinValue,3.0);
|
float height = (1.0 - abs(phase)) * pow(sinValue,3.0);
|
||||||
|
|
||||||
vec3 normal = normalize(mix(vec3(0.0,0.0,1.0),vec3(normalize(toCenter),0.0),height));
|
vec3 normal = normalize(mix(vec3(0.0,0.0,1.0),vec3(normalize(toCenter),0.0),height));
|
||||||
|
|
||||||
return vec4(normal,height);
|
return vec4(normal,height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,7 +93,7 @@ vec4 rainCombined(vec2 uv, float time) // returns ripple normal in xyz and r
|
||||||
rain(uv,time) +
|
rain(uv,time) +
|
||||||
rain(uv + vec2(10.5,5.7),time) +
|
rain(uv + vec2(10.5,5.7),time) +
|
||||||
rain(uv * 0.75 + vec2(3.7,18.9),time) +
|
rain(uv * 0.75 + vec2(3.7,18.9),time) +
|
||||||
rain(uv * 0.9 + vec2(5.7,30.1),time) +
|
rain(uv * 0.9 + vec2(5.7,30.1),time) +
|
||||||
rain(uv * 0.8 + vec2(1.2,3.0),time);
|
rain(uv * 0.8 + vec2(1.2,3.0),time);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -120,7 +120,7 @@ float fresnel_dielectric(vec3 Incoming, vec3 Normal, float eta)
|
||||||
vec2 normalCoords(vec2 uv, float scale, float speed, float time, float timer1, float timer2, vec3 previousNormal)
|
vec2 normalCoords(vec2 uv, float scale, float speed, float time, float timer1, float timer2, vec3 previousNormal)
|
||||||
{
|
{
|
||||||
return uv * (WAVE_SCALE * scale) + WIND_DIR * time * (WIND_SPEED * speed) -(previousNormal.xy/previousNormal.zz) * WAVE_CHOPPYNESS + vec2(time * timer1,time * timer2);
|
return uv * (WAVE_SCALE * scale) + WIND_DIR * time * (WIND_SPEED * speed) -(previousNormal.xy/previousNormal.zz) * WAVE_CHOPPYNESS + vec2(time * timer1,time * timer2);
|
||||||
}
|
}
|
||||||
|
|
||||||
varying vec3 screenCoordsPassthrough;
|
varying vec3 screenCoordsPassthrough;
|
||||||
varying vec4 position;
|
varying vec4 position;
|
||||||
|
@ -133,7 +133,7 @@ uniform sampler2D reflectionMap;
|
||||||
uniform sampler2D refractionMap;
|
uniform sampler2D refractionMap;
|
||||||
uniform sampler2D refractionDepthMap;
|
uniform sampler2D refractionDepthMap;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uniform float osg_SimulationTime;
|
uniform float osg_SimulationTime;
|
||||||
|
|
||||||
uniform float near;
|
uniform float near;
|
||||||
|
@ -167,7 +167,7 @@ void main(void)
|
||||||
|
|
||||||
#define waterTimer osg_SimulationTime
|
#define waterTimer osg_SimulationTime
|
||||||
|
|
||||||
vec3 normal0 = 2.0 * texture2D(normalMap,normalCoords(UV, 0.05, 0.04, waterTimer, -0.015, -0.005, vec3(0.0,0.0,0.0))).rgb - 1.0;
|
vec3 normal0 = 2.0 * texture2D(normalMap,normalCoords(UV, 0.05, 0.04, waterTimer, -0.015, -0.005, vec3(0.0,0.0,0.0))).rgb - 1.0;
|
||||||
vec3 normal1 = 2.0 * texture2D(normalMap,normalCoords(UV, 0.1, 0.08, waterTimer, 0.02, 0.015, normal0)).rgb - 1.0;
|
vec3 normal1 = 2.0 * texture2D(normalMap,normalCoords(UV, 0.1, 0.08, waterTimer, 0.02, 0.015, normal0)).rgb - 1.0;
|
||||||
vec3 normal2 = 2.0 * texture2D(normalMap,normalCoords(UV, 0.25, 0.07, waterTimer, -0.04, -0.03, normal1)).rgb - 1.0;
|
vec3 normal2 = 2.0 * texture2D(normalMap,normalCoords(UV, 0.25, 0.07, waterTimer, -0.04, -0.03, normal1)).rgb - 1.0;
|
||||||
vec3 normal3 = 2.0 * texture2D(normalMap,normalCoords(UV, 0.5, 0.09, waterTimer, 0.03, 0.04, normal2)).rgb - 1.0;
|
vec3 normal3 = 2.0 * texture2D(normalMap,normalCoords(UV, 0.5, 0.09, waterTimer, 0.03, 0.04, normal2)).rgb - 1.0;
|
||||||
|
@ -180,7 +180,7 @@ void main(void)
|
||||||
rainRipple = rainCombined(position.xy / 1000.0,waterTimer) * clamp(rainIntensity,0.0,1.0);
|
rainRipple = rainCombined(position.xy / 1000.0,waterTimer) * clamp(rainIntensity,0.0,1.0);
|
||||||
else
|
else
|
||||||
rainRipple = vec4(0.0,0.0,0.0,0.0);
|
rainRipple = vec4(0.0,0.0,0.0,0.0);
|
||||||
|
|
||||||
vec3 rippleAdd = rainRipple.xyz * rainRipple.w * 10.0;
|
vec3 rippleAdd = rainRipple.xyz * rainRipple.w * 10.0;
|
||||||
|
|
||||||
vec3 normal = (normal0 * BIG_WAVES_X + normal1 * BIG_WAVES_Y +
|
vec3 normal = (normal0 * BIG_WAVES_X + normal1 * BIG_WAVES_Y +
|
||||||
|
@ -231,7 +231,7 @@ void main(void)
|
||||||
float depthSample = linearizeDepth(texture2D(refractionDepthMap,screenCoords).x) * normalization;
|
float depthSample = linearizeDepth(texture2D(refractionDepthMap,screenCoords).x) * normalization;
|
||||||
float depthSampleDistorted = linearizeDepth(texture2D(refractionDepthMap,screenCoords-(normal.xy*REFR_BUMP)).x) * normalization;
|
float depthSampleDistorted = linearizeDepth(texture2D(refractionDepthMap,screenCoords-(normal.xy*REFR_BUMP)).x) * normalization;
|
||||||
float surfaceDepth = linearizeDepth(gl_FragCoord.z) * normalization;
|
float surfaceDepth = linearizeDepth(gl_FragCoord.z) * normalization;
|
||||||
float realWaterDepth = depthSample - surfaceDepth; // undistorted water depth in view direction, independent of frustum
|
float realWaterDepth = depthSample - surfaceDepth; // undistorted water depth in view direction, independent of frustum
|
||||||
float shore = clamp(realWaterDepth / BUMP_SUPPRESS_DEPTH,0,1);
|
float shore = clamp(realWaterDepth / BUMP_SUPPRESS_DEPTH,0,1);
|
||||||
#else
|
#else
|
||||||
float shore = 1.0;
|
float shore = 1.0;
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>434</width>
|
<width>671</width>
|
||||||
<height>373</height>
|
<height>373</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
@ -27,9 +27,9 @@
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>-187</y>
|
||||||
<width>393</width>
|
<width>630</width>
|
||||||
<height>437</height>
|
<height>510</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="scrollAreaVerticalLayout">
|
<layout class="QVBoxLayout" name="scrollAreaVerticalLayout">
|
||||||
|
@ -139,6 +139,9 @@
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QComboBox" name="showOwnedComboBox">
|
<widget class="QComboBox" name="showOwnedComboBox">
|
||||||
|
<property name="currentIndex">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Off</string>
|
<string>Off</string>
|
||||||
|
@ -207,11 +210,11 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="otherGroup">
|
<widget class="QGroupBox" name="savesGroup">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>Other</string>
|
<string>Saves</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="otherGroupVerticalLayout">
|
<layout class="QVBoxLayout" name="savesGroupVerticalLayout">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QCheckBox" name="timePlayedCheckbox">
|
<widget class="QCheckBox" name="timePlayedCheckbox">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
|
@ -222,12 +225,59 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item alignment="Qt::AlignLeft">
|
||||||
|
<widget class="QWidget" name="maximumQuicksavesGroup" native="true">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string><html><head/><body><p>This setting determines how many quicksave and autosave slots you can have at a time. If greater than 1, quicksaves will be sequentially created each time you quicksave. Once the maximum number of quicksaves has been reached, the oldest quicksave will be recycled the next time you perform a quicksave.</p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<layout class="QHBoxLayout" name="maximumQuicksavesLayout">
|
||||||
|
<property name="spacing">
|
||||||
|
<number>-1</number>
|
||||||
|
</property>
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="maximumQuicksavesLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Maximum Quicksaves</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QSpinBox" name="maximumQuicksavesComboBox">
|
||||||
|
<property name="minimum">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="otherGroup">
|
||||||
|
<property name="title">
|
||||||
|
<string>Other</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="otherGroupVerticalLayout">
|
||||||
<item alignment="Qt::AlignLeft">
|
<item alignment="Qt::AlignLeft">
|
||||||
<widget class="QWidget" name="screenshotFormatGroup" native="true">
|
<widget class="QWidget" name="screenshotFormatGroup" native="true">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string><html><head/><body><p>Specify the format for screen shots taken by pressing the screen shot key (bound to F12 by default). This setting should be the file extension commonly associated with the desired format. The formats supported will be determined at compilation, but “jpg”, “png”, and “tga” should be allowed.</p></body></html></string>
|
<string><html><head/><body><p>Specify the format for screen shots taken by pressing the screen shot key (bound to F12 by default). This setting should be the file extension commonly associated with the desired format. The formats supported will be determined at compilation, but “jpg”, “png”, and “tga” should be allowed.</p></body></html></string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
<layout class="QHBoxLayout" name="screenshotFormatLayout">
|
||||||
<property name="spacing">
|
<property name="spacing">
|
||||||
<number>-1</number>
|
<number>-1</number>
|
||||||
</property>
|
</property>
|
||||||
|
|
Loading…
Reference in a new issue