1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-01-16 15:29:55 +00:00

Merge upstream

This commit is contained in:
AnyOldName3 2018-02-27 14:29:14 +00:00
commit d1a2955fa1
47 changed files with 790 additions and 269 deletions

View file

@ -6,6 +6,7 @@ set(LAUNCHER
playpage.cpp
textslotmsgbox.cpp
settingspage.cpp
advancedpage.cpp
utils/profilescombobox.cpp
utils/textinputdialog.cpp
@ -21,6 +22,7 @@ set(LAUNCHER_HEADER
playpage.hpp
textslotmsgbox.hpp
settingspage.hpp
advancedpage.hpp
utils/profilescombobox.hpp
utils/textinputdialog.hpp
@ -35,6 +37,7 @@ set(LAUNCHER_HEADER_MOC
playpage.hpp
textslotmsgbox.hpp
settingspage.hpp
advancedpage.hpp
utils/textinputdialog.hpp
utils/profilescombobox.hpp
@ -49,6 +52,7 @@ set(LAUNCHER_UI
${CMAKE_SOURCE_DIR}/files/ui/playpage.ui
${CMAKE_SOURCE_DIR}/files/ui/contentselector.ui
${CMAKE_SOURCE_DIR}/files/ui/settingspage.ui
${CMAKE_SOURCE_DIR}/files/ui/advancedpage.ui
)
source_group(launcher FILES ${LAUNCHER} ${LAUNCHER_HEADER})

View file

@ -0,0 +1,89 @@
#include "advancedpage.hpp"
#include <components/files/configurationmanager.hpp>
Launcher::AdvancedPage::AdvancedPage(Files::ConfigurationManager &cfg, Settings::Manager &engineSettings, QWidget *parent)
: QWidget(parent)
, mCfgMgr(cfg)
, mEngineSettings(engineSettings)
{
setObjectName ("AdvancedPage");
setupUi(this);
loadSettings();
}
bool Launcher::AdvancedPage::loadSettings()
{
// Game Settings
loadSettingBool(canLootDuringDeathAnimationCheckBox, "can loot during death animation", "Game");
loadSettingBool(followersAttackOnSightCheckBox, "followers attack on sight", "Game");
loadSettingBool(preventMerchantEquippingCheckBox, "prevent merchant equipping", "Game");
loadSettingBool(showEffectDurationCheckBox, "show effect duration", "Game");
loadSettingBool(showEnchantChanceCheckBox, "show enchant chance", "Game");
loadSettingBool(showMeleeInfoCheckBox, "show melee info", "Game");
loadSettingBool(showProjectileDamageCheckBox, "show projectile damage", "Game");
// Expected values are (0, 1, 2, 3)
int showOwnedIndex = mEngineSettings.getInt("show owned", "Game");
// Match the index with the option. Will default to 0 if invalid.
if (showOwnedIndex >= 0 && showOwnedIndex <= 3)
showOwnedComboBox->setCurrentIndex(showOwnedIndex);
// Input Settings
loadSettingBool(allowThirdPersonZoomCheckBox, "allow third person zoom", "Input");
loadSettingBool(grabCursorCheckBox, "grab cursor", "Input");
loadSettingBool(toggleSneakCheckBox, "toggle sneak", "Input");
// Other Settings
loadSettingBool(timePlayedCheckbox, "timeplayed", "Saves");
QString screenshotFormatString = QString::fromStdString(mEngineSettings.getString("screenshot format", "General")).toUpper();
if (screenshotFormatComboBox->findText(screenshotFormatString) == -1)
screenshotFormatComboBox->addItem(screenshotFormatString);
screenshotFormatComboBox->setCurrentIndex(screenshotFormatComboBox->findText(screenshotFormatString));
return true;
}
void Launcher::AdvancedPage::saveSettings()
{
// Ensure we only set the new settings if they changed. This is to avoid cluttering the
// user settings file (which by definition should only contain settings the user has touched)
// Game Settings
saveSettingBool(canLootDuringDeathAnimationCheckBox, "can loot during death animation", "Game");
saveSettingBool(followersAttackOnSightCheckBox, "followers attack on sight", "Game");
saveSettingBool(preventMerchantEquippingCheckBox, "prevent merchant equipping", "Game");
saveSettingBool(showEffectDurationCheckBox, "show effect duration", "Game");
saveSettingBool(showEnchantChanceCheckBox, "show enchant chance", "Game");
saveSettingBool(showMeleeInfoCheckBox, "show melee info", "Game");
saveSettingBool(showProjectileDamageCheckBox, "show projectile damage", "Game");
int showOwnedCurrentIndex = showOwnedComboBox->currentIndex();
if (showOwnedCurrentIndex != mEngineSettings.getInt("show owned", "Game"))
mEngineSettings.setInt("show owned", "Game", showOwnedCurrentIndex);
// Input Settings
saveSettingBool(allowThirdPersonZoomCheckBox, "allow third person zoom", "Input");
saveSettingBool(grabCursorCheckBox, "grab cursor", "Input");
saveSettingBool(toggleSneakCheckBox, "toggle sneak", "Input");
// Other Settings
saveSettingBool(timePlayedCheckbox, "timeplayed", "Saves");
std::string screenshotFormatString = screenshotFormatComboBox->currentText().toLower().toStdString();
if (screenshotFormatString != mEngineSettings.getString("screenshot format", "General"))
mEngineSettings.setString("screenshot format", "General", screenshotFormatString);
}
void Launcher::AdvancedPage::loadSettingBool(QCheckBox *checkbox, const std::string &setting, const std::string &group) {
if (mEngineSettings.getBool(setting, group))
checkbox->setCheckState(Qt::Checked);
}
void Launcher::AdvancedPage::saveSettingBool(QCheckBox *checkbox, const std::string &setting, const std::string &group) {
bool cValue = checkbox->checkState();
if (cValue != mEngineSettings.getBool(setting, group))
mEngineSettings.setBool(setting, group, cValue);
}

View file

@ -0,0 +1,32 @@
#ifndef ADVANCEDPAGE_H
#define ADVANCEDPAGE_H
#include <QWidget>
#include "ui_advancedpage.h"
#include <components/settings/settings.hpp>
namespace Files { struct ConfigurationManager; }
namespace Launcher
{
class AdvancedPage : public QWidget, private Ui::AdvancedPage
{
Q_OBJECT
public:
AdvancedPage(Files::ConfigurationManager &cfg, Settings::Manager &engineSettings, QWidget *parent = 0);
bool loadSettings();
void saveSettings();
private:
Files::ConfigurationManager &mCfgMgr;
Settings::Manager &mEngineSettings;
void loadSettingBool(QCheckBox *checkbox, const std::string& setting, const std::string& group);
void saveSettingBool(QCheckBox *checkbox, const std::string& setting, const std::string& group);
};
}
#endif

View file

@ -2,9 +2,7 @@
#include <components/version/version.hpp>
#include <QLabel>
#include <QDate>
#include <QTime>
#include <QMessageBox>
#include <QPushButton>
#include <QFontDatabase>
@ -12,8 +10,6 @@
#include <QFileDialog>
#include <QCloseEvent>
#include <QTextCodec>
#include <QFile>
#include <QDir>
#include <QDebug>
@ -21,6 +17,7 @@
#include "graphicspage.hpp"
#include "datafilespage.hpp"
#include "settingspage.hpp"
#include "advancedpage.hpp"
using namespace Process;
@ -104,6 +101,12 @@ void Launcher::MainDialog::createIcons()
settingsButton->setTextAlignment(Qt::AlignHCenter | Qt::AlignBottom);
settingsButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
QListWidgetItem *advancedButton = new QListWidgetItem(iconWidget);
advancedButton->setIcon(QIcon::fromTheme("emblem-system"));
advancedButton->setText(tr("Advanced"));
advancedButton->setTextAlignment(Qt::AlignHCenter | Qt::AlignBottom);
advancedButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
connect(iconWidget,
SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
this, SLOT(changePage(QListWidgetItem*,QListWidgetItem*)));
@ -116,6 +119,7 @@ void Launcher::MainDialog::createPages()
mDataFilesPage = new DataFilesPage(mCfgMgr, mGameSettings, mLauncherSettings, this);
mGraphicsPage = new GraphicsPage(mCfgMgr, mEngineSettings, this);
mSettingsPage = new SettingsPage(mCfgMgr, mGameSettings, mLauncherSettings, this);
mAdvancedPage = new AdvancedPage(mCfgMgr, mEngineSettings, this);
// Set the combobox of the play page to imitate the combobox on the datafilespage
mPlayPage->setProfilesModel(mDataFilesPage->profilesModel());
@ -126,6 +130,7 @@ void Launcher::MainDialog::createPages()
pagesWidget->addWidget(mDataFilesPage);
pagesWidget->addWidget(mGraphicsPage);
pagesWidget->addWidget(mSettingsPage);
pagesWidget->addWidget(mAdvancedPage);
// Select the first page
iconWidget->setCurrentItem(iconWidget->item(0), QItemSelectionModel::Select);
@ -245,6 +250,9 @@ bool Launcher::MainDialog::reloadSettings()
if (!mGraphicsPage->loadSettings())
return false;
if (!mAdvancedPage->loadSettings())
return false;
return true;
}
@ -483,6 +491,7 @@ bool Launcher::MainDialog::writeSettings()
mDataFilesPage->saveSettings();
mGraphicsPage->saveSettings();
mSettingsPage->saveSettings();
mAdvancedPage->saveSettings();
QString userPath = QString::fromUtf8(mCfgMgr.getUserConfigPath().string().c_str());
QDir dir(userPath);

View file

@ -30,6 +30,7 @@ namespace Launcher
class DataFilesPage;
class UnshieldThread;
class SettingsPage;
class AdvancedPage;
enum FirstRunDialogResult
{
@ -88,6 +89,7 @@ namespace Launcher
GraphicsPage *mGraphicsPage;
DataFilesPage *mDataFilesPage;
SettingsPage *mSettingsPage;
AdvancedPage *mAdvancedPage;
Process::ProcessInvoker *mGameInvoker;
Process::ProcessInvoker *mWizardInvoker;

View file

@ -1,7 +1,9 @@
int stderr = 0; // Hack: fix linker error
#ifdef __ANDROID__
#include "SDL_main.h"
#include <SDL_gamecontroller.h>
#include <SDL_mouse.h>
#include <SDL_events.h>
/*******************************************************************************
Functions called by JNI
@ -15,6 +17,25 @@ extern int argcData;
extern const char **argvData;
void releaseArgv();
int Java_org_libsdl_app_SDLActivity_getMouseX(JNIEnv *env, jclass cls, jobject obj) {
int ret = 0;
SDL_GetMouseState(&ret, NULL);
return ret;
}
int Java_org_libsdl_app_SDLActivity_getMouseY(JNIEnv *env, jclass cls, jobject obj) {
int ret = 0;
SDL_GetMouseState(NULL, &ret);
return ret;
}
int Java_org_libsdl_app_SDLActivity_isMouseShown(JNIEnv *env, jclass cls, jobject obj) {
return SDL_ShowCursor(SDL_QUERY);
}
int Java_org_libsdl_app_SDLActivity_nativeInit(JNIEnv* env, jclass cls,
jobject obj) {
@ -24,6 +45,9 @@ int Java_org_libsdl_app_SDLActivity_nativeInit(JNIEnv* env, jclass cls,
SDL_SetMainReady();
// On Android, we use a virtual controller with guid="Virtual"
SDL_GameControllerAddMapping("5669727475616c000000000000000000,Virtual,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4");
/* Run the application code! */
int status;
@ -36,5 +60,3 @@ int Java_org_libsdl_app_SDLActivity_nativeInit(JNIEnv* env, jclass cls,
return status;
}
#endif /* __ANDROID__ */

View file

@ -83,8 +83,10 @@ namespace MWDialogue
if (i->mTopic == id && i->mInfoId == infoId)
{
if (getJournalIndex(id) < index)
{
setJournalIndex(id, index);
MWBase::Environment::get().getWindowManager()->messageBox ("#{sJournalEntry}");
MWBase::Environment::get().getWindowManager()->messageBox ("#{sJournalEntry}");
}
return;
}

View file

@ -1,5 +1,7 @@
#include "companionwindow.hpp"
#include <cmath>
#include <MyGUI_InputManager.h>
#include "../mwbase/environment.hpp"
@ -129,7 +131,7 @@ void CompanionWindow::updateEncumbranceBar()
return;
float capacity = mPtr.getClass().getCapacity(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))
{

View file

@ -1,5 +1,6 @@
#include "inventorywindow.hpp"
#include <cmath>
#include <stdexcept>
#include <MyGUI_Window.h>
@ -598,7 +599,7 @@ namespace MWGui
float capacity = player.getClass().getCapacity(player);
float encumbrance = player.getClass().getEncumbrance(player);
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)

View file

@ -163,7 +163,6 @@ namespace MWGui
if (mViewer->getIncrementalCompileOperation())
{
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

View file

@ -174,10 +174,25 @@ namespace MWInput
}
}
bool isLeftOrRightButton(int action, ICS::InputControlSystem* ics, int deviceId, bool joystick)
{
int mouseBinding = ics->getMouseButtonBinding(ics->getControl(action), ICS::Control::INCREASE);
if (mouseBinding != ICS_MAX_DEVICE_BUTTONS)
return true;
int buttonBinding = ics->getJoystickButtonBinding(ics->getControl(action), deviceId, ICS::Control::INCREASE);
if (joystick && (buttonBinding == 0 || buttonBinding == 1))
return true;
return false;
}
void InputManager::handleGuiArrowKey(int action)
{
if (SDL_IsTextInputActive())
return;
if (isLeftOrRightButton(action, mInputBinder, mFakeDeviceID, mJoystickLastUsed))
return;
MyGUI::KeyCode key;
switch (action)
{
@ -1115,7 +1130,7 @@ namespace MWInput
{
if (MWBase::Environment::get().getWindowManager()->isGuiMode())
{
if (!SDL_IsTextInputActive())
if (!SDL_IsTextInputActive() && !isLeftOrRightButton(A_Activate, mInputBinder, mFakeDeviceID, mJoystickLastUsed))
MWBase::Environment::get().getWindowManager()->injectKeyPress(MyGUI::KeyCode::Return, 0);
}
else if (mControlSwitch["playercontrols"])

View file

@ -566,9 +566,16 @@ namespace MWMechanics
{
std::string itFaction = playerFactionIt->first;
// Ignore the faction, if a player was expelled from it.
if (playerStats.getExpelled(itFaction))
continue;
int itReaction = MWBase::Environment::get().getDialogueManager()->getFactionReaction(npcFaction, itFaction);
if (playerFactionIt == playerStats.getFactionRanks().begin() || itReaction < reaction)
{
reaction = static_cast<float>(itReaction);
rank = playerFactionIt->second;
}
}
}
else

View file

@ -226,7 +226,10 @@ namespace MWRender
mObjects.reset(new Objects(mResourceSystem, sceneRoot, mUnrefQueue.get()));
if (getenv("OPENMW_DONT_PRECOMPILE") == NULL)
{
mViewer->setIncrementalCompileOperation(new osgUtil::IncrementalCompileOperation);
mViewer->getIncrementalCompileOperation()->setTargetFrameRate(Settings::Manager::getFloat("target framerate", "Cells"));
}
mResourceSystem->getSceneManager()->setIncrementalCompileOperation(mViewer->getIncrementalCompileOperation());
@ -244,6 +247,7 @@ namespace MWRender
else
mTerrain.reset(new Terrain::TerrainGrid(sceneRoot, mRootNode, mResourceSystem, mTerrainStorage, Mask_Terrain, Mask_PreCompile));
mTerrain->setDefaultViewer(mViewer->getCamera());
mTerrain->setTargetFrameRate(Settings::Manager::getFloat("target framerate", "Cells"));
mCamera.reset(new Camera(mViewer->getCamera()));

View file

@ -1205,6 +1205,18 @@ void SkyManager::create()
mCreated = true;
}
class RainCounter : public osgParticle::ConstantRateCounter
{
public:
virtual int numParticlesToCreate(double dt) const
{
// limit dt to avoid large particle emissions if there are jumps in the simulation time
// 0.2 seconds is the same cap as used in Engine's frame loop
dt = std::min(dt, 0.2);
return ConstantRateCounter::numParticlesToCreate(dt);
}
};
class RainShooter : public osgParticle::Shooter
{
public:
@ -1475,7 +1487,7 @@ void SkyManager::createRain()
placer->setZRange(300, 300);
emitter->setPlacer(placer);
osg::ref_ptr<osgParticle::ConstantRateCounter> counter (new osgParticle::ConstantRateCounter);
osg::ref_ptr<RainCounter> counter (new RainCounter);
counter->setNumberOfParticlesPerSecondToCreate(600.0);
emitter->setCounter(counter);

View file

@ -607,6 +607,11 @@ namespace MWWorld
}
return ptr;
}
void Store<ESM::Cell>::clearDynamic()
{
setUp();
}
void Store<ESM::Cell>::setUp()
{
typedef DynamicExt::iterator ExtIterator;

View file

@ -293,6 +293,7 @@ namespace MWWorld
const ESM::Cell *find(const std::string &id) const;
const ESM::Cell *find(int x, int y) const;
virtual void clearDynamic();
void setUp();
RecordId load(ESM::ESMReader &esm);

View file

@ -148,16 +148,16 @@ namespace MWWorld
ToUTF8::Utf8Encoder* encoder, const std::map<std::string,std::string>& fallbackMap,
int activationDistanceOverride, const std::string& startCell, const std::string& startupScript,
const std::string& resourcePath, const std::string& userDataPath)
: mResourceSystem(resourceSystem), mFallback(fallbackMap), mPlayer (0), mLocalScripts (mStore),
: mResourceSystem(resourceSystem), mFallback(fallbackMap), mLocalScripts (mStore),
mSky (true), mCells (mStore, mEsm),
mGodMode(false), mScriptsEnabled(true), mContentFiles (contentFiles), mUserDataPath(userDataPath),
mActivationDistanceOverride (activationDistanceOverride), mStartupScript(startupScript),
mStartCell (startCell), mDistanceToFacedObject(-1), mTeleportEnabled(true),
mLevitationEnabled(true), mGoToJail(false), mDaysInPrison(0), mSpellPreloadTimer(0.f)
{
mPhysics = new MWPhysics::PhysicsSystem(resourceSystem, rootNode);
mRendering = new MWRender::RenderingManager(viewer, rootNode, resourceSystem, workQueue, &mFallback, resourcePath);
mProjectileManager.reset(new ProjectileManager(mRendering->getLightRoot(), resourceSystem, mRendering, mPhysics));
mPhysics.reset(new MWPhysics::PhysicsSystem(resourceSystem, rootNode));
mRendering.reset(new MWRender::RenderingManager(viewer, rootNode, resourceSystem, workQueue, &mFallback, resourcePath));
mProjectileManager.reset(new ProjectileManager(mRendering->getLightRoot(), resourceSystem, mRendering.get(), mPhysics.get()));
mRendering->preloadCommonAssets();
@ -189,9 +189,9 @@ namespace MWWorld
mSwimHeightScale = mStore.get<ESM::GameSetting>().find("fSwimHeightScale")->getFloat();
mWeatherManager = new MWWorld::WeatherManager(*mRendering, mFallback, mStore);
mWeatherManager.reset(new MWWorld::WeatherManager(*mRendering, mFallback, mStore));
mWorldScene = new Scene(*mRendering, mPhysics);
mWorldScene.reset(new Scene(*mRendering.get(), mPhysics.get()));
}
void World::fillGlobalVariables()
@ -224,8 +224,8 @@ namespace MWWorld
// we don't want old weather to persist on a new game
// Note that if reset later, the initial ChangeWeather that the chargen script calls will be lost.
delete mWeatherManager;
mWeatherManager = new MWWorld::WeatherManager(*mRendering, mFallback, mStore);
mWeatherManager.reset();
mWeatherManager.reset(new MWWorld::WeatherManager(*mRendering.get(), mFallback, mStore));
if (!bypass)
{
@ -295,7 +295,6 @@ namespace MWWorld
mWorldScene->clear();
mStore.clearDynamic();
mStore.setUp();
if (mPlayer)
{
@ -492,12 +491,6 @@ namespace MWWorld
{
// Must be cleared before mRendering is destroyed
mProjectileManager->clear();
delete mWeatherManager;
delete mWorldScene;
delete mRendering;
delete mPhysics;
delete mPlayer;
}
const ESM::Cell *World::getExterior (const std::string& cellName) const
@ -2214,7 +2207,7 @@ namespace MWWorld
{
const ESM::NPC *player = mStore.get<ESM::NPC>().find("player");
if (!mPlayer)
mPlayer = new MWWorld::Player(player);
mPlayer.reset(new MWWorld::Player(player));
else
{
// Remove the old CharacterController
@ -3478,17 +3471,17 @@ namespace MWWorld
if (MWMechanics::isSummoningEffect(it->mEffectID))
{
preload(mWorldScene, mStore, "VFX_Summon_Start");
preload(mWorldScene, mStore, MWMechanics::getSummonedCreature(it->mEffectID));
preload(mWorldScene.get(), mStore, "VFX_Summon_Start");
preload(mWorldScene.get(), mStore, MWMechanics::getSummonedCreature(it->mEffectID));
}
preload(mWorldScene, mStore, effect->mCasting);
preload(mWorldScene, mStore, effect->mHit);
preload(mWorldScene.get(), mStore, effect->mCasting);
preload(mWorldScene.get(), mStore, effect->mHit);
if (it->mArea > 0)
preload(mWorldScene, mStore, effect->mArea);
preload(mWorldScene.get(), mStore, effect->mArea);
if (it->mRange == ESM::RT_Target)
preload(mWorldScene, mStore, effect->mBolt);
preload(mWorldScene.get(), mStore, effect->mBolt);
}
}

View file

@ -74,17 +74,11 @@ namespace MWWorld
Resource::ResourceSystem* mResourceSystem;
Fallback::Map mFallback;
MWRender::RenderingManager* mRendering;
MWWorld::WeatherManager* mWeatherManager;
MWWorld::Scene *mWorldScene;
MWWorld::Player *mPlayer;
std::vector<ESM::ESMReader> mEsm;
MWWorld::ESMStore mStore;
LocalScripts mLocalScripts;
MWWorld::Globals mGlobalVariables;
MWPhysics::PhysicsSystem *mPhysics;
bool mSky;
ESM::Variant* mGameHour;
@ -98,6 +92,11 @@ namespace MWWorld
std::string mCurrentWorldSpace;
std::unique_ptr<MWWorld::Player> mPlayer;
std::unique_ptr<MWPhysics::PhysicsSystem> mPhysics;
std::unique_ptr<MWRender::RenderingManager> mRendering;
std::unique_ptr<MWWorld::Scene> mWorldScene;
std::unique_ptr<MWWorld::WeatherManager> mWeatherManager;
std::shared_ptr<ProjectileManager> mProjectileManager;
bool mGodMode;

View file

@ -13,24 +13,37 @@ namespace ESM
#pragma pack(push)
#pragma pack(1)
struct Data
{
/* File format version. This is actually a float, the supported
versions are 1.2 and 1.3. These correspond to:
1.2 = 0x3f99999a and 1.3 = 0x3fa66666
*/
unsigned int version;
int type; // 0=esp, 1=esm, 32=ess (unused)
NAME32 author; // Author's name
NAME256 desc; // File description
int records; // Number of records
};
struct GMDT
{
float mCurrentHealth;
float mMaximumHealth;
float mHour;
unsigned char unknown1[12];
NAME64 mCurrentCell;
unsigned char unknown2[4];
NAME32 mPlayerName;
};
#pragma pack(pop)
/// \brief File header record
struct Header
{
static const int CurrentFormat = 0; // most recent known format
struct Data
{
/* File format version. This is actually a float, the supported
versions are 1.2 and 1.3. These correspond to:
1.2 = 0x3f99999a and 1.3 = 0x3fa66666
*/
unsigned int version;
int type; // 0=esp, 1=esm, 32=ess (unused)
NAME32 author; // Author's name
NAME256 desc; // File description
int records; // Number of records
};
// Defines another files (esm or esp) that this file depends upon.
struct MasterData
{
@ -39,16 +52,6 @@ namespace ESM
int index; // Position of the parent file in the global list of loaded files
};
struct GMDT
{
float mCurrentHealth;
float mMaximumHealth;
float mHour;
unsigned char unknown1[12];
NAME64 mCurrentCell;
unsigned char unknown2[4];
NAME32 mPlayerName;
};
GMDT mGameData; // Used in .ess savegames only
std::vector<unsigned char> mSCRD; // Used in .ess savegames only, unknown
std::vector<unsigned char> mSCRS; // Used in .ess savegames only, screenshot
@ -62,7 +65,6 @@ namespace ESM
void load (ESMReader &esm);
void save (ESMWriter &esm);
};
#pragma pack(pop)
}

View file

@ -245,11 +245,6 @@ void BulletNifLoader::handleNiTriShape(const Nif::NiTriShape *shape, int flags,
{
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
// anything. So don't do anything.
if ((flags & 0x800))
@ -257,11 +252,6 @@ void BulletNifLoader::handleNiTriShape(const Nif::NiTriShape *shape, int flags,
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())
isAnimated = false;

View file

@ -800,6 +800,13 @@ bool Optimizer::RemoveRedundantNodesVisitor::isOperationPermissible(osg::Node& n
isOperationPermissibleForObject(&node);
}
void Optimizer::RemoveRedundantNodesVisitor::apply(osg::LOD& lod)
{
// don't remove any direct children of the LOD because they are used to define each LOD level.
for (unsigned int i=0; i<lod.getNumChildren(); ++i)
traverse(*lod.getChild(i));
}
void Optimizer::RemoveRedundantNodesVisitor::apply(osg::Group& group)
{
if (typeid(group)==typeid(osg::Group) &&
@ -1849,6 +1856,12 @@ bool Optimizer::MergeGroupsVisitor::isOperationPermissible(osg::Group& node)
isOperationPermissibleForObject(&node);
}
void Optimizer::MergeGroupsVisitor::apply(osg::LOD &lod)
{
// don't merge the direct children of the LOD because they are used to define each LOD level.
traverse(lod);
}
void Optimizer::MergeGroupsVisitor::apply(osg::Group &group)
{
if (group.getNumChildren() <= 1)

View file

@ -339,6 +339,7 @@ class Optimizer
virtual void apply(osg::Group& group);
virtual void apply(osg::Transform& transform);
virtual void apply(osg::LOD& lod);
bool isOperationPermissible(osg::Node& node);
@ -358,6 +359,7 @@ class Optimizer
bool isOperationPermissible(osg::Group& node);
virtual void apply(osg::Group& group);
virtual void apply(osg::LOD& lod);
};
class MergeGeometryVisitor : public BaseOptimizerVisitor

View file

@ -203,19 +203,14 @@ namespace SDLUtil
void SDLCursorManager::cursorChanged(const std::string& name)
{
mCurrentCursor = name;
CursorMap::const_iterator curs_iter = mCursorMap.find(name);
if(curs_iter != mCursorMap.end())
{
//we have this cursor
_setGUICursor(name);
}
_setGUICursor(name);
}
void SDLCursorManager::_setGUICursor(const std::string &name)
{
SDL_SetCursor(mCursorMap.find(name)->second);
auto it = mCursorMap.find(name);
if (it != mCursorMap.end())
SDL_SetCursor(it->second);
}
void SDLCursorManager::createCursor(const std::string& name, int rotDegrees, osg::Image* image, Uint8 hotspot_x, Uint8 hotspot_y)

View file

@ -92,9 +92,18 @@ void GraphicsWindowSDL2::init()
SDL_GLContext oldCtx = SDL_GL_GetCurrentContext();
#if defined(OPENGL_ES) || defined(ANDROID)
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 1);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
int major = 1;
int minor = 1;
char *ver = getenv("OPENMW_GLES_VERSION");
if (ver && strcmp(ver, "2") == 0) {
major = 2;
minor = 0;
}
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, major);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, minor);
#endif
mContext = SDL_GL_CreateContext(mWindow);

View file

@ -6,11 +6,14 @@
#include <osg/Texture2D>
#include <osg/RenderInfo>
#include <algorithm>
namespace Terrain
{
CompositeMapRenderer::CompositeMapRenderer()
: mTimeAvailable(0.0005)
: mTargetFrameRate(120)
, mMinimumTimeAvailable(0.0025)
{
setSupportsDisplayList(false);
setCullingActive(false);
@ -22,6 +25,14 @@ CompositeMapRenderer::CompositeMapRenderer()
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();
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(mMutex);
@ -39,7 +50,7 @@ void CompositeMapRenderer::drawImplementation(osg::RenderInfo &renderInfo) const
mImmediateCompileSet.erase(mImmediateCompileSet.begin());
}
double timeLeft = mTimeAvailable;
double timeLeft = availableTime;
while (!mCompileSet.empty() && timeLeft > 0)
{
@ -53,6 +64,7 @@ void CompositeMapRenderer::drawImplementation(osg::RenderInfo &renderInfo) const
mCompileSet.erase(mCompileSet.begin());
}
}
mTimer.setStartTick();
}
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);
}
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)

View file

@ -40,7 +40,10 @@ namespace Terrain
void compile(CompositeMap& compositeMap, osg::RenderInfo& renderInfo, double* timeLeft) const;
/// 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
void addCompositeMap(CompositeMap* map, bool immediate=false);
@ -51,7 +54,9 @@ namespace Terrain
unsigned int getCompileSetSize() const;
private:
double mTimeAvailable;
float mTargetFrameRate;
double mMinimumTimeAvailable;
mutable osg::Timer mTimer;
typedef std::set<osg::ref_ptr<CompositeMap> > CompileSet;

View file

@ -65,6 +65,11 @@ World::~World()
delete mStorage;
}
void World::setTargetFrameRate(float rate)
{
mCompositeMapRenderer->setTargetFrameRate(rate);
}
float World::getHeightAt(const osg::Vec3f &worldPos)
{
return mStorage->getHeightAt(worldPos);

View file

@ -57,6 +57,9 @@ namespace Terrain
World(osg::Group* parent, osg::Group* compileRoot, Resource::ResourceSystem* resourceSystem, Storage* storage, int nodeMask, int preCompileMask);
virtual ~World();
/// See CompositeMapRenderer::setTargetFrameRate
void setTargetFrameRate(float rate);
/// Apply the scene manager's texture filtering settings to all cached textures.
/// @note Thread safe.
void updateTextureFiltering();

View file

@ -9,11 +9,7 @@ scaling factor
:Default: 1.0
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.
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.
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.
This setting can only be configured by editing the settings configuration file.
menu transparency
@ -24,7 +20,6 @@ menu transparency
:Default: 0.84
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.
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 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,
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.
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
----------------
@ -91,16 +85,16 @@ werewolf overlay
:Range: True/False
: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
----------------------
:Type: RGBA floating point
: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
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.
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 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
: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.
The value is composed of four floating point values representing the red, green, blue and alpha channels.
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 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.

View file

@ -8,9 +8,10 @@ crosshair
:Range: True/False
: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.
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.

View file

@ -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
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.
The value must be greater than 0.0, but it's unclear if the engine enforces this limitation.
This setting can only be configured by editing the settings configuration file.
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.
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
--------------------------------
@ -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,
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
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
(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
from the Video tab of the Video panel of the Options menu.
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.
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,
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.

View file

@ -9,8 +9,9 @@ exterior cell load distance
:Default: 1
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.
@ -178,6 +179,14 @@ cache expiry delay
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.
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
------------------
@ -185,4 +194,4 @@ pointers cache size
:Range: >0
: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.

View file

@ -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.
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
----------------------
@ -25,9 +25,9 @@ show projectile damage
:Range: True/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
---------------
@ -36,9 +36,9 @@ show melee info
:Range: True/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
-------------------
@ -49,7 +49,7 @@ show enchant chance
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
-----------
@ -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,
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.
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.
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
----------
@ -107,7 +106,7 @@ show effect duration
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 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
--------------------------
@ -118,6 +117,8 @@ prevent merchant equipping
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
-------------------------
@ -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.
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.

View file

@ -75,7 +75,7 @@ camera sensitivity
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,
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,
which is instead controlled by your operating system mouse speed setting.

View file

@ -8,9 +8,7 @@ global
:Range: True/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.
This setting can be toggled with the local/world map switch button on the map window.
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.
global map cell size
--------------------
@ -112,5 +110,4 @@ local map cell distance
:Range: >= 1
:Default: 1
Similar to "[Cells] exterior cell load distance", controls how many cells are rendered on the local map.
Values higher than the default may result in longer loading times.
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.

View file

@ -8,10 +8,7 @@ character
:Range:
:Default: ""
This setting contains the default character name for loading saved games.
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.
This contains the default character for the Load Game menu and is automatically updated when a different character is selected.
autosave
--------
@ -32,6 +29,6 @@ timeplayed
:Default: False
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.

View 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.
Otherwise, there should not be a visual difference.
Please note enabling shaders has a significant performance impact on most systems.
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.
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,
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).
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,
but the lighting may appear 'dull' and there might be color shifts.
Setting this option to 'false' results in more realistic lighting.
Always affects terrain.
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
---------------------------
@ -119,4 +122,4 @@ terrain specular map pattern
:Range:
: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')

View file

@ -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 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
-------------
:Type: floating point
:Range: 0.0 to 1.0
:Range: 0.0 (silent) to 1.0 (maximum volume)
:Default: 1.0
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.
footsteps volume
----------------
:Type: floating point
:Range: 0.0 to 1.0
:Range: 0.0 (silent) to 1.0 (maximum volume)
:Default: 0.2
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.
music volume
------------
:Type: floating point
:Range: 0.0 to 1.0
:Range: 0.0 (silent) to 1.0 (maximum volume)
:Default: 0.5
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.
sfx volume
----------
:Type: floating point
:Range: 0.0 to 1.0
:Range: 0.0 (silent) to 1.0 (maximum volume)
:Default: 1.0
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.
voice volume
------------
:Type: floating point
:Range: 0.0 to 1.0
:Range: 0.0 (silent) to 1.0 (maximum volume)
:Default: 0.8
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.
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.
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.

View file

@ -8,9 +8,11 @@ distant terrain
:Range: True/False
:Default: False
Controls whether the engine will use paging and LOD algorithms to render the terrain of the entire world at all times.
Otherwise, only the terrain of the loaded cells is displayed.
This setting is best used together with the 'viewing distance' setting in the camera section.
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 surrounding cells is loaded.
.. 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,
regardless of the preloading settings in the 'Cells' section,

View file

@ -10,7 +10,7 @@ resolution x
This setting determines the horizontal resolution of the OpenMW game window.
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
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.
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
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.
Enabling this setting can reduce screen tearing,
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
(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.
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 can only be configured by editing the settings configuration file.
This setting does not currently work under Linux.
This setting can only be configured by editing the settings configuration file. It has been reported to not work on some Linux systems.
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.
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.

View file

@ -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.
.. 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
: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.
.. note::
A world/local map switch button on the map window will be shown only in GUI mode.
stats
-----
:Default:
x = 0.0
x = 0.015
y = 0.0
y = 0.015
h = 0.375
h = 0.45
w = 0.4275
@ -64,13 +61,13 @@ spells
------
: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
@ -81,13 +78,13 @@ map
---
: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
@ -98,13 +95,13 @@ inventory
---------
: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
@ -115,14 +112,13 @@ inventory container
-------------------
:Default:
x = 0.0
x = 0.015
y = 0.4275
y = 0.54
h = 0.6225
w = 0.5725
h = 0.45
w = 0.38
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.
@ -131,13 +127,13 @@ inventory barter
----------------
: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.
Activated by clicking on the Barter choice in the dialog window for an NPC.
@ -146,13 +142,13 @@ inventory companion
-------------------
: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 companion windows were added in the Tribunal expansion, but are available everywhere in the OpenMW engine.
@ -161,13 +157,13 @@ container
---------
: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 same window is used for searching dead bodies, and pickpocketing people.
@ -176,13 +172,13 @@ barter
------
: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.
Activated by clicking on the Barter choice in the dialog window for an NPC.
@ -191,13 +187,13 @@ companion
---------
: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 companion windows were added in the Tribunal expansion, but are available everywhere in the OpenMW engine.
@ -206,13 +202,13 @@ dialogue
--------
: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.
Activated by clicking on a NPC.
@ -237,9 +233,9 @@ console
-------
:Default:
x = 0.0
x = 0.015
y = 0.0
y = 0.015
h = 1.0

View file

@ -315,9 +315,9 @@ int VideoState::queue_picture(AVFrame *pFrame, double pts)
vp->pts = pts;
vp->data.resize((*this->video_st)->codec->width * (*this->video_st)->codec->height * 4);
uint8_t *dst = &vp->data[0];
uint8_t *dst[4] = { &vp->data[0], nullptr, nullptr, nullptr };
sws_scale(this->sws_context, pFrame->data, pFrame->linesize,
0, (*this->video_st)->codec->height, &dst, this->rgbaFrame->linesize);
0, (*this->video_st)->codec->height, dst, this->rgbaFrame->linesize);
// now we inform our display thread that we have a pic ready
this->pictq_windex = (this->pictq_windex+1) % VIDEO_PICTURE_ARRAY_SIZE;

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

View file

@ -9,8 +9,9 @@
</qresource>
<qresource prefix="icons/tango">
<file alias="index.theme">icons/tango/index.theme</file>
<file alias="48x48/video-display.png">icons/tango/48x48/video-display.png</file>
<file alias="48x48/emblem-system.png">icons/tango/48x48/emblem-system.png</file>
<file alias="48x48/preferences-system.png">icons/tango/48x48/preferences-system.png</file>
<file alias="48x48/video-display.png">icons/tango/48x48/video-display.png</file>
<file alias="16x16/document-new.png">icons/tango/16x16/document-new.png</file>
<file alias="16x16/edit-copy.png">icons/tango/16x16/edit-copy.png</file>
<file alias="16x16/edit-delete.png">icons/tango/16x16/edit-delete.png</file>

View file

@ -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)
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.
pointers cache size = 40
@ -385,34 +388,34 @@ refraction scale = 1.0
# screen size. (0.0 to 1.0). X & Y, Width & Height.
# Stats window displaying level, race, class, skills and stats.
stats x = 0.0
stats y = 0.0
stats w = 0.375
stats h = 0.4275
stats x = 0.015
stats y = 0.015
stats w = 0.4275
stats h = 0.45
# Stats window pin status
stats pin = false
# Spells window displaying powers, spells, and magical items.
spells x = 0.625
spells y = 0.5725
spells w = 0.375
spells h = 0.4275
spells x = 0.63
spells y = 0.39
spells w = 0.36
spells h = 0.51
# Spells window pin status
spells pin = false
# Local and world map window.
map x = 0.625
map y = 0.0
map w = 0.375
map h = 0.5725
map x = 0.63
map y = 0.015
map w = 0.36
map h = 0.37
# Map window pin status
map pin = false
# Dialog window for talking with NPCs.
dialogue x = 0.095
dialogue y = 0.095
dialogue w = 0.810
dialogue h = 0.810
dialogue x = 0.15
dialogue y = 0.5
dialogue w = 0.7
dialogue h = 0.45
# Alchemy window for crafting potions.
alchemy x = 0.25
@ -421,54 +424,54 @@ alchemy w = 0.5
alchemy h = 0.5
# Console command window for debugging commands.
console x = 0.0
console y = 0.0
console x = 0.015
console y = 0.015
console w = 1.0
console h = 0.5
# Player inventory window when explicitly opened.
inventory x = 0.0
inventory y = 0.4275
inventory w = 0.6225
inventory h = 0.5725
inventory x = 0.015
inventory y = 0.54
inventory w = 0.45
inventory h = 0.38
# Inventory window pin status
inventory pin = false
# Player inventory window when searching a container.
inventory container x = 0.0
inventory container y = 0.4275
inventory container w = 0.6225
inventory container h = 0.5725
inventory container x = 0.015
inventory container y = 0.54
inventory container w = 0.45
inventory container h = 0.38
# Player inventory window when bartering with a shopkeeper.
inventory barter x = 0.0
inventory barter y = 0.4275
inventory barter w = 0.6225
inventory barter h = 0.5725
inventory barter x = 0.015
inventory barter y = 0.54
inventory barter w = 0.45
inventory barter h = 0.38
# Player inventory window when trading with a companion.
inventory companion x = 0.0
inventory companion y = 0.4275
inventory companion w = 0.6225
inventory companion h = 0.5725
inventory companion x = 0.015
inventory companion y = 0.54
inventory companion w = 0.45
inventory companion h = 0.38
# Container inventory when searching a container.
container x = 0.25
container y = 0.0
container w = 0.75
container h = 0.375
container x = 0.49
container y = 0.54
container w = 0.39
container h = 0.38
# NPC inventory window when bartering with a shopkeeper.
barter x = 0.25
barter y = 0.0
barter w = 0.75
barter h = 0.375
barter x = 0.6
barter y = 0.27
barter w = 0.38
barter h = 0.63
# NPC inventory window when trading with a companion.
companion x = 0.25
companion y = 0.0
companion w = 0.75
companion h = 0.375
companion x = 0.6
companion y = 0.27
companion w = 0.38
companion h = 0.63
[Shadows]
# Enable or disable shadows.
@ -493,4 +496,4 @@ actor shadows = false
player shadows = false
# Allow terrain to cast shadows. Potentially decreases performance.
terrain shadows = false
# Note: Right now, there is no setting allowing toggling of shadows for statics
# Note: Right now, there is no setting allowing toggling of shadows for statics

286
files/ui/advancedpage.ui Normal file
View file

@ -0,0 +1,286 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>AdvancedPage</class>
<widget class="QWidget" name="AdvancedPage">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>434</width>
<height>373</height>
</rect>
</property>
<layout class="QVBoxLayout" name="pageVerticalLayout">
<item>
<widget class="QLabel" name="pageDescriptionLabel">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;This temporary page contains new settings that will be available in-game in a post-1.0 release of OpenMW.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item>
<widget class="QScrollArea" name="scrollArea">
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>393</width>
<height>437</height>
</rect>
</property>
<layout class="QVBoxLayout" name="scrollAreaVerticalLayout">
<item>
<widget class="QGroupBox" name="gameGroup">
<property name="title">
<string>Game</string>
</property>
<layout class="QVBoxLayout" name="gameGroupVerticalLayout">
<item>
<widget class="QCheckBox" name="canLootDuringDeathAnimationCheckBox">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If this setting is true, the player is allowed to loot actors (e.g. summoned creatures) during death animation, if they are not in combat. However disposing corpses during death animation is not recommended - death counter may not be incremented, and this behaviour can break quests. This is how original Morrowind behaves.&lt;/p&gt;&lt;p&gt;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.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Can loot during death animation</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="followersAttackOnSightCheckBox">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;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.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Followers attack on sight</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="preventMerchantEquippingCheckBox">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Prevents merchants from equipping items that are sold to them.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Prevent merchant equipping</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="showEffectDurationCheckBox">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;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. &lt;/p&gt;&lt;p&gt;The default value is false.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Show effect duration</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="showEnchantChanceCheckBox">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Whether or not the chance of success will be displayed in the enchanting menu.&lt;/p&gt;&lt;p&gt;The default value is false.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Show enchant chance</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="showMeleeInfoCheckBox">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If this setting is true, melee weapons reach and speed will be showed on item tooltip.&lt;/p&gt;&lt;p&gt;The default value is false.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Show melee info</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="showProjectileDamageCheckBox">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If this setting is true, damage bonus of arrows and bolts will be showed on item tooltip.&lt;/p&gt;&lt;p&gt;The default value is false.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Show projectile damage</string>
</property>
</widget>
</item>
<item alignment="Qt::AlignLeft">
<widget class="QWidget" name="showOwnedGroup" native="true">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Enable visual clues for items owned by NPCs when the crosshair is on the object.&lt;/p&gt;&lt;p&gt;The default value is Off.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<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 alignment="Qt::AlignRight">
<widget class="QLabel" name="showOwnedLabel">
<property name="text">
<string>Show owned:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="showOwnedComboBox">
<item>
<property name="text">
<string>Off</string>
</property>
</item>
<item>
<property name="text">
<string>Tool Tip Only</string>
</property>
</item>
<item>
<property name="text">
<string>Crosshair Only</string>
</property>
</item>
<item>
<property name="text">
<string>Tool Tip and Crosshair</string>
</property>
</item>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="inputGroup">
<property name="title">
<string>Input</string>
</property>
<layout class="QVBoxLayout" name="inputGroupVerticalLayout">
<item>
<widget class="QCheckBox" name="allowThirdPersonZoomCheckBox">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Allow zooming in and out using the middle mouse wheel in third person view. This feature may not work correctly if the mouse wheel is bound to other actions, and may be triggered accidentally in some cases, so is disabled by default.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Allow third person zoom</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="grabCursorCheckBox">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;OpenMW will capture control of the cursor if this setting is true.&lt;/p&gt;&lt;p&gt;In “look mode”, OpenMW will center the cursor regardless of the value of this setting (since the cursor/crosshair is always centered in the OpenMW window). However, in GUI mode, this setting determines the behavior when the cursor is moved outside the OpenMW window. If true, the cursor movement stops at the edge of the window preventing access to other applications. If false, the cursor is allowed to move freely on the desktop.&lt;/p&gt;&lt;p&gt;This setting does not apply to the screen where escape has been pressed, where the cursor is never captured. Regardless of this setting “Alt-Tab” or some other operating system dependent key sequence can be used to allow the operating system to regain control of the mouse cursor. This setting interacts with the minimize on focus loss setting by affecting what counts as a focus loss. Specifically on a two-screen configuration it may be more convenient to access the second screen with setting disabled.&lt;/p&gt;&lt;p&gt;Note for developers: its desirable to have this setting disabled when running the game in a debugger, to prevent the mouse cursor from becoming unusable when the game pauses on a breakpoint.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Grab cursor</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="toggleSneakCheckBox">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;This setting causes the behavior of the sneak key (bound to Ctrl by default) to toggle sneaking on and off rather than requiring the key to be held down while sneaking. Players that spend significant time sneaking may find the character easier to control with this option enabled. &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Toggle sneak</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="otherGroup">
<property name="title">
<string>Other</string>
</property>
<layout class="QVBoxLayout" name="otherGroupVerticalLayout">
<item>
<widget class="QCheckBox" name="timePlayedCheckbox">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;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.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Add &quot;Time Played&quot; to saves</string>
</property>
</widget>
</item>
<item alignment="Qt::AlignLeft">
<widget class="QWidget" name="screenshotFormatGroup" native="true">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;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.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<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 alignment="Qt::AlignRight">
<widget class="QLabel" name="screenshotFormatLabel">
<property name="text">
<string>Screenshot Format</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="screenshotFormatComboBox">
<item>
<property name="text">
<string>JPG</string>
</property>
</item>
<item>
<property name="text">
<string>PNG</string>
</property>
</item>
<item>
<property name="text">
<string>TGA</string>
</property>
</item>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View file

@ -6,13 +6,13 @@
<rect>
<x>0</x>
<y>0</y>
<width>635</width>
<width>720</width>
<height>565</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>635</width>
<width>720</width>
<height>565</height>
</size>
</property>