Use YAML files to translate MyGUI's localization tags

LTO-timing^2
Andrei Kortunov 2 years ago
parent dfea7a6d01
commit ccbb5e03fb

@ -178,6 +178,7 @@
Feature #6700: Support windowed fullscreen
Feature #6706: Save the size of the Options window
Feature #6721: [OpenMW-CS] Add option to open records in new window
Feature #6867: Add a way to localize hardcoded strings in GUI
Task #6078: First person should not clear depth buffer
Task #6161: Refactor Sky to use shaders and be GLES/GL3 friendly
Task #6162: Refactor GUI to use shaders and to be GLES and GL3+ friendly

@ -852,6 +852,7 @@ void OMW::Engine::prepareEngine()
mEnvironment.setWorld(*mWorld);
mWindowManager->setStore(mWorld->getStore());
mLuaManager->initL10n();
mWindowManager->initUI();
//Load translation data

@ -31,6 +31,7 @@ namespace MWBase
public:
virtual ~LuaManager() = default;
virtual std::string translate(const std::string& contextName, const std::string& key) = 0;
virtual void newGameStarted() = 0;
virtual void gameLoaded() = 0;
virtual void registerObject(const MWWorld::Ptr& ptr) = 0;

@ -92,12 +92,14 @@ namespace MWGui
// - Shader editor
MyGUI::TabItem* itemLV = mTabControl->addItem("Log Viewer");
itemLV->setCaptionWithReplacing("#{DebugMenu:LogViewer}");
mLogView = itemLV->createWidgetReal<MyGUI::EditBox>
("LogEdit", MyGUI::FloatCoord(0,0,1,1), MyGUI::Align::Stretch);
mLogView->setEditReadOnly(true);
#ifndef BT_NO_PROFILE
MyGUI::TabItem* item = mTabControl->addItem("Physics Profiler");
item->setCaptionWithReplacing("#{DebugMenu:PhysicsProfiler}");
mBulletProfilerEdit = item->createWidgetReal<MyGUI::EditBox>
("LogEdit", MyGUI::FloatCoord(0,0,1,1), MyGUI::Align::Stretch);
#else

@ -316,7 +316,7 @@ namespace MWGui
std::ostringstream ss;
const std::string NA = "NA";
const std::string NA = "#{Interface:NotAvailableShort}";
const std::string endl = "\n";
std::string author = technique->getAuthor().empty() ? NA : std::string(technique->getAuthor());
@ -340,14 +340,14 @@ namespace MWGui
case fx::Technique::Status::Uncompiled:
{
if (technique->getDynamic())
ss << "#{fontcolourhtml=header}Locked: #{fontcolourhtml=normal} Cannot be toggled or moved, controlled by external Lua script" << endl << endl;
ss << "#{fontcolourhtml=header}Author: #{fontcolourhtml=normal} " << author << endl << endl
<< "#{fontcolourhtml=header}Version: #{fontcolourhtml=normal} " << version << endl << endl
<< "#{fontcolourhtml=header}Description: #{fontcolourhtml=normal} " << description << endl << endl
<< "#{fontcolourhtml=header}Interiors: #{fontcolourhtml=normal} " << flag_interior
<< "#{fontcolourhtml=header} Exteriors: #{fontcolourhtml=normal} " << flag_exterior
<< "#{fontcolourhtml=header} Underwater: #{fontcolourhtml=normal} " << flag_underwater
<< "#{fontcolourhtml=header} Abovewater: #{fontcolourhtml=normal} " << flag_abovewater;
ss << "#{fontcolourhtml=header}#{PostProcessing:ShaderLocked}: #{fontcolourhtml=normal} #{PostProcessing:ShaderLockedDescription}" << endl << endl;
ss << "#{fontcolourhtml=header}#{PostProcessing:Author}: #{fontcolourhtml=normal} " << author << endl << endl
<< "#{fontcolourhtml=header}#{PostProcessing:Version}: #{fontcolourhtml=normal} " << version << endl << endl
<< "#{fontcolourhtml=header}#{PostProcessing:Description}: #{fontcolourhtml=normal} " << description << endl << endl
<< "#{fontcolourhtml=header}#{PostProcessing:InInteriors}: #{fontcolourhtml=normal} " << flag_interior
<< "#{fontcolourhtml=header} #{PostProcessing:InExteriors}: #{fontcolourhtml=normal} " << flag_exterior
<< "#{fontcolourhtml=header} #{PostProcessing:Underwater}: #{fontcolourhtml=normal} " << flag_underwater
<< "#{fontcolourhtml=header} #{PostProcessing:Abovewater}: #{fontcolourhtml=normal} " << flag_abovewater;
break;
}
case fx::Technique::Status::Parse_Error:
@ -365,7 +365,7 @@ namespace MWGui
if (technique->getUniformMap().size() > 0)
{
MyGUI::Button* resetButton = mConfigArea->createWidget<MyGUI::Button>("MW_Button", {0,0,0,24}, MyGUI::Align::Default);
resetButton->setCaption("Reset all to default");
resetButton->setCaptionWithReplacing("#{PostProcessing:ResetShader}");
resetButton->setTextAlign(MyGUI::Align::Center);
resetButton->eventMouseWheel += MyGUI::newDelegate(this, &PostProcessorHud::notifyMouseWheel);
resetButton->eventMouseButtonClick += MyGUI::newDelegate(this, &PostProcessorHud::notifyResetButtonClicked);

@ -207,7 +207,7 @@ namespace MWGui
mCharacterSelection->setIndexSelected(selectedIndex);
if (selectedIndex == MyGUI::ITEM_NONE)
mCharacterSelection->setCaption("Select Character ...");
mCharacterSelection->setCaptionWithReplacing("#{SavegameMenu:SelectCharacter}");
fillSaveList();
@ -423,7 +423,7 @@ namespace MWGui
if (Settings::Manager::getBool("timeplayed","Saves"))
{
text << "\n" << "Time played: " << formatTimeplayed(mCurrentSlot->mProfile.mTimePlayed);
text << "\n" << "#{SavegameMenu:TimePlayed}: " << formatTimeplayed(mCurrentSlot->mProfile.mTimePlayed);
}
mInfoText->setCaptionWithReplacing(text.str());

@ -11,6 +11,7 @@
#include <MyGUI_ScrollView.h>
#include <MyGUI_Gui.h>
#include <MyGUI_TabControl.h>
#include <MyGUI_LanguageManager.h>
#include <SDL_video.h>
@ -37,12 +38,32 @@ namespace
{
std::string textureMipmappingToStr(const std::string& val)
{
if (val == "linear") return "Trilinear";
if (val == "nearest") return "Bilinear";
if (val != "none")
Log(Debug::Warning) << "Warning: Invalid texture mipmap option: "<< val;
if (val == "linear") return "#{SettingsMenu:TextureFilteringTrilinear}";
if (val == "nearest") return "#{SettingsMenu:TextureFilteringBilinear}";
if (val == "none") return "#{SettingsMenu:TextureFilteringDisabled}";
return "Other";
Log(Debug::Warning) << "Warning: Invalid texture mipmap option: "<< val;
return "#{SettingsMenu:TextureFilteringOther}";
}
std::string lightingMethodToStr(SceneUtil::LightingMethod method)
{
std::string result;
switch (method)
{
case SceneUtil::LightingMethod::FFP:
result = "#{SettingsMenu:LightingMethodLegacy}";
break;
case SceneUtil::LightingMethod::PerObjectUniform:
result = "#{SettingsMenu:LightingMethodShadersCompatibility}";
break;
case SceneUtil::LightingMethod::SingleUBO:
default:
result = "#{SettingsMenu:LightingMethodShaders}";
break;
}
return MyGUI::LanguageManager::getInstance().replaceTags(result);
}
void parseResolution (int &x, int &y, const std::string& str)
@ -306,7 +327,7 @@ namespace MWGui
highlightCurrentResolution();
std::string tmip = Settings::Manager::getString("texture mipmap", "General");
mTextureFilteringButton->setCaption(textureMipmappingToStr(tmip));
mTextureFilteringButton->setCaptionWithReplacing(textureMipmappingToStr(tmip));
int waterTextureSize = Settings::Manager::getInt("rtt size", "Water");
if (waterTextureSize >= 512)
@ -426,10 +447,10 @@ namespace MWGui
if (pos == MyGUI::ITEM_NONE)
return;
std::string message = "This change requires a restart to take effect.";
MWBase::Environment::get().getWindowManager()->interactiveMessageBox(message, {"#{sOK}"}, true);
MWBase::Environment::get().getWindowManager()->interactiveMessageBox("#{SettingsMenu:ChangeRequiresRestart}", {"#{sOK}"}, true);
Settings::Manager::setString("lighting method", "Shaders", _sender->getItemNameAt(pos));
const auto settingsNames = _sender->getUserData<std::vector<std::string>>();
Settings::Manager::setString("lighting method", "Shaders", settingsNames->at(pos));
apply();
}
@ -454,8 +475,7 @@ namespace MWGui
void SettingsWindow::onLightsResetButtonClicked(MyGUI::Widget* _sender)
{
std::vector<std::string> buttons = {"#{sYes}", "#{sNo}"};
std::string message = "Resets to default values, would you like to continue? Changes to lighting method will require a restart.";
MWBase::Environment::get().getWindowManager()->interactiveMessageBox(message, buttons, true);
MWBase::Environment::get().getWindowManager()->interactiveMessageBox("#{SettingsMenu:LightingResetToDefaults}", buttons, true);
int selectedButton = MWBase::Environment::get().getWindowManager()->readPressedButton();
if (selectedButton == 1 || selectedButton == -1)
return;
@ -471,7 +491,9 @@ namespace MWGui
for (const auto& setting : settings)
Settings::Manager::setString(setting, "Shaders", Settings::Manager::mDefaultSettings[{"Shaders", setting}]);
mLightingMethodButton->setIndexSelected(mLightingMethodButton->findItemIndexWith(Settings::Manager::mDefaultSettings[{"Shaders", "lighting method"}]));
auto lightingMethod = SceneUtil::LightManager::getLightingMethodFromString(Settings::Manager::mDefaultSettings[{"Shaders", "lighting method"}]);
auto lightIndex = mLightingMethodButton->findItemIndexWith(lightingMethodToStr(lightingMethod));
mLightingMethodButton->setIndexSelected(lightIndex);
updateMaxLightsComboBox(mMaxLights);
apply();
@ -636,7 +658,7 @@ namespace MWGui
void SettingsWindow::updateLightSettings()
{
auto lightingMethod = MWBase::Environment::get().getResourceSystem()->getSceneManager()->getLightingMethod();
std::string lightingMethodStr = SceneUtil::LightManager::getLightingMethodString(lightingMethod);
std::string lightingMethodStr = lightingMethodToStr(lightingMethod);
mLightingMethodButton->removeAllItems();
@ -646,14 +668,17 @@ namespace MWGui
SceneUtil::LightingMethod::SingleUBO,
};
std::vector<std::string> userData;
for (const auto& method : methods)
{
if (!MWBase::Environment::get().getResourceSystem()->getSceneManager()->isSupportedLightingMethod(method))
continue;
mLightingMethodButton->addItem(SceneUtil::LightManager::getLightingMethodString(method));
mLightingMethodButton->addItem(lightingMethodToStr(method));
userData.emplace_back(SceneUtil::LightManager::getLightingMethodString(method));
}
mLightingMethodButton->setUserData(userData);
mLightingMethodButton->setIndexSelected(mLightingMethodButton->findItemIndexWith(lightingMethodStr));
}

@ -55,6 +55,7 @@
#include <components/lua_ui/util.hpp>
#include "../mwbase/inputmanager.hpp"
#include "../mwbase/luamanager.hpp"
#include "../mwbase/statemanager.hpp"
#include "../mwbase/soundmanager.hpp"
#include "../mwbase/world.hpp"
@ -1065,12 +1066,27 @@ namespace MWGui
}
else
{
std::vector<std::string> split;
Misc::StringUtils::split(tag, split, ":");
// TODO: LocalizationManager should not be a part of lua
const auto& luaManager = MWBase::Environment::get().getLuaManager();
// If a key has a "Context:KeyName" format, use YAML to translate data
if (split.size() == 2 && luaManager != nullptr)
{
_result = luaManager->translate(split[0], split[1]);
return;
}
// If not, treat is as GMST name from legacy localization
if (!mStore)
{
Log(Debug::Error) << "Error: WindowManager::onRetrieveTag: no Store set up yet, can not replace '" << tag << "'";
_result = tag;
return;
}
const ESM::GameSetting *setting = mStore->get<ESM::GameSetting>().find(tag);
const ESM::GameSetting *setting = mStore->get<ESM::GameSetting>().search(tag);
if (setting && setting->mValue.getType()==ESM::VT_String)
_result = setting->mValue.getString();

@ -426,13 +426,13 @@ namespace MWInput
switch (action)
{
case A_Screenshot:
return "Screenshot";
return "#{SettingsMenu:Screenshot}";
case A_ZoomIn:
return "Zoom In";
return "#{SettingsMenu:CameraZoomIn}";
case A_ZoomOut:
return "Zoom Out";
return "#{SettingsMenu:CameraZoomOut}";
case A_ToggleHUD:
return "Toggle HUD";
return "#{SettingsMenu:ToggleHUD}";
case A_Use:
return "#{sUse}";
case A_Activate:
@ -504,7 +504,7 @@ namespace MWInput
case A_QuickLoad:
return "#{sQuickLoadCmd}";
case A_TogglePostProcessorHUD:
return "Toggle Post Processor HUD";
return "#{SettingsMenu:TogglePostProcessorHUD}";
default:
return std::string(); // not configurable
}

@ -55,6 +55,14 @@ namespace MWLua
mGlobalScripts.setAutoStartConf(mConfiguration.getGlobalConf());
}
void LuaManager::initL10n()
{
mL10n.init();
std::vector<std::string> preferredLocales;
Misc::StringUtils::split(Settings::Manager::getString("preferred locales", "General"), preferredLocales, ", ");
mL10n.setPreferredLocales(preferredLocales);
}
void LuaManager::init()
{
Context context;
@ -71,11 +79,6 @@ namespace MWLua
localContext.mIsGlobal = false;
localContext.mSerializer = mLocalSerializer.get();
mL10n.init();
std::vector<std::string> preferredLocales;
Misc::StringUtils::split(Settings::Manager::getString("preferred locales", "General"), preferredLocales, ", ");
mL10n.setPreferredLocales(preferredLocales);
initObjectBindingsForGlobalScripts(context);
initCellBindingsForGlobalScripts(context);
initObjectBindingsForLocalScripts(localContext);
@ -103,6 +106,11 @@ namespace MWLua
mInitialized = true;
}
std::string LuaManager::translate(const std::string& contextName, const std::string& key)
{
return mL10n.translate(contextName, key);
}
void LuaManager::loadPermanentStorage(const std::string& userConfigPath)
{
auto globalPath = std::filesystem::path(userConfigPath) / "global_storage.bin";

@ -29,6 +29,9 @@ namespace MWLua
public:
LuaManager(const VFS::Manager* vfs, const std::string& libsDir);
// Called by engine.cpp before UI setup.
void initL10n();
// Called by engine.cpp when the environment is fully initialized.
void init();
@ -39,6 +42,8 @@ namespace MWLua
// thread (in parallel with osg Cull). Can not use scene graph.
void update();
std::string translate(const std::string& contextName, const std::string& key) override;
// Called by engine.cpp from the main thread. Can use scene graph.
void synchronizedUpdate();

@ -218,7 +218,7 @@ namespace DetourNavigator
{
if (mSettings.get().mWaitUntilMinDistanceToPlayer == 0)
return;
listener.setLabel("Building navigation mesh");
listener.setLabel("#{Navigation:BuildingNavigationMesh}");
const std::size_t initialJobsLeft = getTotalJobs();
std::size_t maxProgress = initialJobsLeft + mThreads.size();
listener.setProgressRange(maxProgress);

@ -18,6 +18,12 @@ namespace LuaUtil
ctx[sol::meta_function::call] = &Context::translate;
}
std::string L10nManager::translate(const std::string& contextName, const std::string& key)
{
Context& ctx = getContext(contextName).as<Context>();
return ctx.translate(key, sol::nil);
}
void L10nManager::setPreferredLocales(const std::vector<std::string>& langs)
{
mPreferredLocales.clear();

@ -19,6 +19,7 @@ namespace LuaUtil
const std::vector<icu::Locale>& getPreferredLocales() const { return mPreferredLocales; }
sol::object getContext(const std::string& contextName, const std::string& fallbackLocale = "en");
std::string translate(const std::string& contextName, const std::string& key);
private:
struct Context

@ -1,9 +1,28 @@
#include "box.hpp"
#include <MyGUI_EditText.h>
#include <MyGUI_LanguageManager.h>
namespace Gui
{
// TODO: Since 3.4.2 MyGUI is supposed to automatically translate tags
// If the 3.4.2 become a required minimum version, the ComboBox class may be removed.
void ComboBox::setPropertyOverride(const std::string& _key, const std::string& _value)
{
#if MYGUI_VERSION >= MYGUI_DEFINE_VERSION(3,4,2)
MyGUI::ComboBox::setPropertyOverride (_key, _value);
#else
if (_key == "AddItem")
{
const std::string value = MyGUI::LanguageManager::getInstance().replaceTags(_value);
MyGUI::ComboBox::setPropertyOverride (_key, value);
}
else
{
MyGUI::ComboBox::setPropertyOverride (_key, _value);
}
#endif
}
void AutoSizedWidget::notifySizeChange (MyGUI::Widget* w)
{

@ -5,11 +5,20 @@
#include <MyGUI_TextBox.h>
#include <MyGUI_EditBox.h>
#include <MyGUI_Button.h>
#include <MyGUI_ComboBox.h>
#include "fontwrapper.hpp"
namespace Gui
{
class ComboBox : public FontWrapper<MyGUI::ComboBox>
{
MYGUI_RTTI_DERIVED( ComboBox )
protected:
void setPropertyOverride(const std::string& _key, const std::string& _value) override;
};
class Button : public FontWrapper<MyGUI::Button>
{
MYGUI_RTTI_DERIVED( Button )

@ -28,6 +28,7 @@ namespace Gui
MyGUI::FactoryManager::getInstance().registerFactory<Gui::NumericEditBox>("Widget");
MyGUI::FactoryManager::getInstance().registerFactory<Gui::SharedStateButton>("Widget");
MyGUI::FactoryManager::getInstance().registerFactory<Gui::WindowCaption>("Widget");
MyGUI::FactoryManager::getInstance().registerFactory<Gui::ComboBox>("Widget");
}
}

@ -12,10 +12,20 @@ set(BUILTIN_DATA_FILES
l10n/Calendar/en.yaml
l10n/Calendar/ru.yaml
l10n/DebugMenu/en.yaml
l10n/DebugMenu/ru.yaml
l10n/Interface/en.yaml
l10n/Interface/ru.yaml
l10n/Navigation/en.yaml
l10n/Navigation/ru.yaml
l10n/OMWCamera/en.yaml
l10n/OMWCamera/ru.yaml
l10n/PostProcessing/en.yaml
l10n/PostProcessing/ru.yaml
l10n/SavegameMenu/en.yaml
l10n/SavegameMenu/ru.yaml
l10n/SettingsMenu/en.yaml
l10n/SettingsMenu/ru.yaml
openmw_aux/util.lua
openmw_aux/time.lua

@ -0,0 +1,3 @@
DebugWindow: "Debug"
LogViewer: "Log Viewer"
PhysicsProfiler: "Physics Profiler"

@ -0,0 +1,3 @@
DebugWindow: "Меню отладки"
LogViewer: "Журнал логов"
PhysicsProfiler: "Профилировщик физики"

@ -1,3 +1,4 @@
Yes: "Yes"
No: "No"
Reset: "Reset"
NotAvailableShort: "N/A"
Reset: "Reset"
Yes: "Yes"

@ -1,3 +1,4 @@
Yes: "Да"
No: "Нет"
NotAvailableShort: "Н/Д"
Reset: "Обнулить"
Yes: "Да"

@ -0,0 +1 @@
BuildingNavigationMesh: "Building navigation mesh"

@ -0,0 +1 @@
BuildingNavigationMesh: "Построение навигационной сетки"

@ -0,0 +1,20 @@
Abovewater: "Abovewater"
Author: "Author"
Configuration: "Configuration"
Description: "Description"
InExteriors: "Exteriors"
InInteriors: "Interiors"
KeyboardControls: |
Keyboard controls:
Shift+Right-Arrow > Activate shader
Shift+Left-Arrow > Deactive shader
Shift+Up-Arrow > Move shader up
Shift+Down-Arrow > Move shader down
PostProcessHUD: "Postprocess HUD"
ResetShader: "Reset shader to default state"
ShaderLocked: "Locked"
ShaderLockedDescription: "Cannot be toggled or moved, controlled by external Lua script"
ShaderResetUniform: "r"
Underwater: "Underwater"
Version: "Version"

@ -0,0 +1,20 @@
Abovewater: "Над водой"
Author: "Автор"
Configuration: "Настройки"
Description: "Описание"
InExteriors: "Вне помещений"
InInteriors: "В помещениях"
KeyboardControls: |
Управление с помощью клавиатуры:
Shift+Right-Arrow > Включить шейдер
Shift+Left-Arrow > Выключить шейдер
Shift+Up-Arrow > Передвинуть шейдер выше
Shift+Down-Arrow > Передвинуть шейдер ниже
PostProcessHUD: "Настройки постобработки"
ResetShader: "Обнулить настройки этого шейдера"
ShaderLocked: "Заблокирован"
ShaderLockedDescription: "Не может быть выключен или перемещен, управляется внешним Lua-скриптом"
ShaderResetUniform: "x"
Underwater: "Под водой"
Version: "Версия"

@ -0,0 +1,2 @@
SelectCharacter: "Select Character..."
TimePlayed: "Time played"

@ -0,0 +1,2 @@
SelectCharacter: "Выберите персонажа..."
TimePlayed: "Время в игре"

@ -0,0 +1,59 @@
ActorsProcessingRange: "Actors Processing Range"
Anisotropy: "Anisotropy"
CameraSensitivity: "Camera Sensitivity"
CameraZoomIn: "Zoom Camera In"
CameraZoomOut: "Zoom Camera Out"
ChangeRequiresRestart: "This change requires a restart to take effect."
Controller: "Controller"
FieldOfView: "Field of View"
FrameRateHint: "Hint: press F3 to show\nthe current frame rate."
InvertXAxis: "Invert X Axis"
LightingMethod: "Lighting Method"
LightingMethodLegacy: "Legacy"
LightingMethodShaders: "Shaders"
LightingMethodShadersCompatibility: "Shaders (compatibility)"
LightingResetToDefaults: "Resets to default values, would you like to continue? Changes to lighting method will require a restart."
Lights: "Lights"
LightsBoundingSphereMultiplier: "Bounding Sphere Multiplier"
LightsBoundingSphereMultiplierTooltip: "Default: 1.65\nMultipler for bounding sphere of lights.\nHigher numbers allows for smooth falloff but require an increase in number of max lights.\n\nDoes not effect the illumination or strength of lights."
LightsFadeStartMultiplier: "Fade Start Multiplier"
LightsFadeStartMultiplierTooltip: "Default: 0.85\nFraction of maximum distance at which lights will start to fade.\n\nSet this to a low value for slower transitions or a high value for quicker transitions."
LightsMaximumDistance: "Maximum Light Distance"
LightsMaximumDistanceTooltip: "Default: 8192\nMaximum distance at which lights will appear (measured in units).\n\nSet this to 0 to use an unlimited distance."
LightsMinimumInteriorBrightness: "Minimum Interior Brightness"
LightsMinimumInteriorBrightnessTooltip: "Default: 0.08\nMinimum ambient interior brightness.\n\nIncrease this if you feel interiors are too dark."
MaxLights: "Max Lights"
MaxLightsTooltip: "Default: 8\nMaximum number of lights per object.\n\nA low number near default will cause light popping similar to what you would see with legacy lighting."
MouseAndKeyboard: "Mouse/Keyboard"
PostProcessing: "Post Processing"
PostProcessingTooltip: "Tweaked via Post Processor HUD, see input bindings."
RainRippleDetail: "Rain ripple detail"
RainRippleDetailDense: "Dense"
RainRippleDetailSimple: "Simple"
RainRippleDetailSparse: "Sparse"
ReflectionShaderDetail: "Reflection shader detail"
ReflectionShaderDetailActors: "Actors"
ReflectionShaderDetailGroundcover: "Groundcover"
ReflectionShaderDetailObjects: "Objects"
ReflectionShaderDetailSky: "Sky"
ReflectionShaderDetailTerrain: "Terrain"
ReflectionShaderDetailWorld: "World"
Refraction: "Refraction"
Screenshot: "Screenshot"
Scripts: "Scripts"
TextureFiltering: "Texture Filtering"
TextureFilteringBilinear: "Bilinear"
TextureFilteringDisabled: "None"
TextureFilteringOther: "Other"
TextureFilteringTrilinear: "Trilinear"
ToggleHUD: "Toggle HUD"
TogglePostProcessorHUD: "Toggle Post Processor HUD"
VSync: "VSync"
Water: "Water"
WaterShader: "Water shader"
WaterShaderTextureQuality: "Texture quality"
WindowBorder: "Window Border"
WindowMode: "Window Mode"
WindowModeFullscreen: "Fullscreen"
WindowModeWindowed: "Windowed"
WindowModeWindowedFullscreen: "Windowed Fullscreen"

@ -0,0 +1,59 @@
ActorsProcessingRange: "Дальность обработки персонажей"
Anisotropy: "Анизотропная фильтрация"
CameraSensitivity: "Чувствительность камеры"
CameraZoomIn: "Приблизить камеру"
CameraZoomOut: "Отдалить камеру"
ChangeRequiresRestart: "Чтобы это изменение вступило в силу, нужно перезапустить приложение."
Controller: "Геймпад"
FieldOfView: "Поле зрения"
FrameRateHint: "Подсказка: нажмите F3, чтобы показать\nтекущую частоту смены кадров."
InvertXAxis: "Инвертировать ось X"
LightingMethod: "Способ освещения"
LightingMethodLegacy: "Устаревший"
LightingMethodShaders: "Шейдеры"
LightingMethodShadersCompatibility: "Шейдеры (режим совместимости)"
LightingResetToDefaults: "Обнулить настройки освещения? Смена метода освещения вступит в силу только после перезапуска приложения."
Lights: "Освещение"
LightsBoundingSphereMultiplier: "Множитель размера ограничивающей сферы"
LightsBoundingSphereMultiplierTooltip: "Значение по умолчанию: 1.65\nМножитель размера ограничивающей сферы источников света.\nВысокие значения делают затухание света плавнее, но требуют более высокого максимального количества источников света.\n\nНастройка не влияет на уровень освещения или мощность источников света."
LightsFadeStartMultiplier: "Множитель начала затухания"
LightsFadeStartMultiplierTooltip: "Значение по умолчанию: 0.85\nДоля расстояния (относительно дальности отображения источников света), на которой свет начинает затухать.\n\nНизкие значения ведут к плавному затуханию, высокие - к резкому."
LightsMaximumDistance: "Дальность отображения источников света"
LightsMaximumDistanceTooltip: "Значение по умолчанию: 8192\nМаксимальное расстояние, на котором будут отображаться источники света (во внутриигровых единицах измерения).\n\nЕсли 0, то расстояние не ограничено."
LightsMinimumInteriorBrightness: "Минимальный уровень освещения в помещениях"
LightsMinimumInteriorBrightnessTooltip: "Значение по умолчанию: 0.08\nМинимальный уровень фонового освещения в помещениях.\n\nУвеличьте значение, если помещения в игре кажутся слишком темными."
MaxLights: "Макс. кол-во источников света"
MaxLightsTooltip: "Значение по умолчанию: 8\nМаксимальное количество источников света для каждого объекта.\n\nНизкие числа (близкие к значению по умолчанию) приводят к резким перепадам освещения, как при устаревшем методе освещения."
MouseAndKeyboard: "Мышь/Клавиатура"
PostProcessing: "Постобработка"
PostProcessingTooltip: "Настраивается через меню настроек постобработки, см. привязки клавиш."
RainRippleDetail: "Капли дождя на воде"
RainRippleDetailDense: "Плотные"
RainRippleDetailSimple: "Упрощенные"
RainRippleDetailSparse: "Редкие"
ReflectionShaderDetail: "Детализация отражений"
ReflectionShaderDetailActors: "Персонажи"
ReflectionShaderDetailGroundcover: "Трава"
ReflectionShaderDetailObjects: "Предметы"
ReflectionShaderDetailSky: "Небо"
ReflectionShaderDetailTerrain: "Ландшафт"
ReflectionShaderDetailWorld: "Мир"
Refraction: "Рефракция"
Screenshot: "Снимок экрана"
Scripts: "Скрипты"
TextureFiltering: "Фильтрация текстур"
TextureFilteringBilinear: "Билинейная"
TextureFilteringDisabled: "Отключена"
TextureFilteringOther: "Другая"
TextureFilteringTrilinear: "Трилинейная"
ToggleHUD: "Переключить HUD"
TogglePostProcessorHUD: "Меню настроек постобработки"
VSync: "Вертикальная синхронизация"
Water: "Вода"
WaterShader: "Шейдер воды"
WaterShaderTextureQuality: "Качество текстуры воды"
WindowBorder: "Рамка окна"
WindowMode: "Режим окна"
WindowModeFullscreen: "Полный экран"
WindowModeWindowed: "Оконный"
WindowModeWindowedFullscreen: "Оконный без полей"

@ -22,7 +22,7 @@
<Property key="Caption" value="#{sBack}"/>
</Widget>
<Widget type="AutoSizedButton" skin="MW_Button" name="OKButton">
<Property key="Caption" value="OK"/>
<Property key="Caption" value="#{sOk}"/>
</Widget>
</Widget>

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Layout">
<Widget type="Window" skin="MW_Window" position="0 0 400 400" layer="Debug" name="_Main" align="Stretch">
<Property key="Caption" value="Debug"/>
<Property key="Caption" value="#{DebugMenu:DebugWindow}"/>
<Property key="Visible" value="false"/>
<Widget type="Widget" skin="DialogBG" position_real="0 0 1 1" name="Background" align="Stretch">

@ -2,7 +2,7 @@
<MyGUI type="Layout">
<Widget type="Window" skin="MW_Window" position="0 0 500 500" layer="Debug" name="_Main" align="Stretch">
<Property key="Visible" value="false"/>
<Property key="Caption" value="Postprocess HUD"/>
<Property key="Caption" value="#{PostProcessing:PostProcessHUD}"/>
<Property key="MinSize" value="600 600"/>
<Widget type="TabControl" skin="TabControl_NoBorder" position="8 8 468 450" align="Stretch" name="TabControl">
@ -12,17 +12,11 @@
<Property key="Caption" value="[?]"/>
<UserString key="ToolTipType" value="Layout"/>
<UserString key="ToolTipLayout" value="TextToolTip"/>
<UserString key="Caption_Text" value="Keyboard controls:\n\n
Shift+Right-Arrow > Activate shader\n
Shift+Left-Arrow > Deactive shader\n
Shift+Up-Arrow > Move shader up\n
Shift+Down-Arrow > Move shader down\n
Hold Shift > Fine tune sliders\n
"/>
<UserString key="Caption_Text" value="#{PostProcessing:KeyboardControls}"/>
</Widget>
<Widget type="TabItem" skin="" position_real="0 0 1 1" name="TabConfiguration">
<Property key="Caption" value="Configuration"/>
<Property key="Caption" value="#{PostProcessing:Configuration}"/>
<Widget type="VBox" position_real="0 0.02 1 0.98" align="Stretch" name="Layout">
<Property key="Padding" value="0"/>

@ -16,7 +16,7 @@
<Widget type="Button" skin="MW_ArrowLeft" position="0 0 12 12" align="VCenter Left" name="ButtonDecrease"/>
<Widget type="Widget" name="Dragger">
<Widget type="TextBox" skin="HeaderText" align="Stretch" name="Value">
<Property key="Caption" value="NA"/>
<Property key="Caption" value="#{Interface:NotAvailableShort}"/>
<Property key="NeedMouse" value="false"/>
<Property key="TextAlign" value="Center"/>
</Widget>
@ -45,7 +45,7 @@
<UserString key="HStretch" value="true"/>
<UserString key="VStretch" value="true"/>
<Property key="TextAlign" value="Center"/>
<Property key="Caption" value="On"/>
<Property key="Caption" value="#{sOn}"/>
</Widget>
</Widget>
</Widget>
@ -59,7 +59,7 @@
<Widget type="AutoSizedButton" skin="MW_Button" position="0 0 22 22" name="Reset">
<UserString key="HStretch" value="false"/>
<UserString key="VStretch" value="false"/>
<Property key="Caption" value="r"/>
<Property key="Caption" value="#{PostProcessing:ShaderResetUniform}"/>
</Widget>
<Widget type="Widget" skin="BlackBG" position="0 0 225 22" name="Client">
<UserString key="HStretch" value="false"/>

@ -17,7 +17,7 @@
<Property key="Spacing" value="8"/>
<Widget type="ComboBox" skin="MW_ComboBox" position="0 0 200 24" name="SelectCharacter">
<Property key="Caption" value="Select Character"/>
<Property key="Caption" value="#{SavegameMenu:SelectCharacter}"/>
<UserString key="HStretch" value="true"/>
</Widget>

@ -73,9 +73,9 @@
<Property key="TextAlign" value="Right"/>
</Widget>
</Widget>
<Widget type="Widget" position="4 184 352 54" align="Left Top HStretch">
<Widget type="TextBox" skin="NormalText" position="0 0 352 16" align="Left Top" name="ActorProcessingText">
<Property key="Caption" value="Actors Processing Range"/>
<Widget type="Widget" position="4 184 400 54" align="Left Top HStretch">
<Widget type="TextBox" skin="NormalText" position="0 0 400 16" align="Left Top" name="ActorProcessingText">
<Property key="Caption" value="#{SettingsMenu:ActorsProcessingRange}"/>
</Widget>
<Widget type="ScrollBar" skin="MW_HScroll" position="0 20 352 14" align="Left Top HStretch">
<Property key="Range" value="3584"/>
@ -87,7 +87,7 @@
<UserString key="SettingMin" value="3584"/>
<UserString key="SettingMax" value="7168"/>
<UserString key="SettingLabelWidget" value="ActorProcessingText"/>
<UserString key="SettingLabelCaption" value="Actors Processing Range (%s)"/>
<UserString key="SettingLabelCaption" value="#{SettingsMenu:ActorsProcessingRange} (%s)"/>
</Widget>
<Widget type="TextBox" skin="SandText" position="0 38 352 16" align="Left Top">
<Property key="Caption" value="#{sLow}"/>
@ -204,10 +204,10 @@
<Property key="Padding" value="0"/>
<Property key="Spacing" value="4"/>
<Widget type="AutoSizedButton" skin="MW_Button" name="KeyboardButton">
<Property key="Caption" value="Mouse/Keyboard"/>
<Property key="Caption" value="#{SettingsMenu:MouseAndKeyboard}"/>
</Widget>
<Widget type="AutoSizedButton" skin="MW_Button" name="ControllerButton">
<Property key="Caption" value="Controller"/>
<Property key="Caption" value="#{SettingsMenu:Controller}"/>
</Widget>
</Widget>
@ -219,14 +219,14 @@
<Widget type="AutoSizedButton" skin="MW_Button" position="4 194 137 24" align="Left Bottom" name="ResetControlsButton">
<Property key="Caption" value="#{sControlsMenu1}"/>
</Widget>
<Widget type="HBox" position="4 224 380 24" align="Left Bottom">
<Widget type="HBox" position="4 224 600 24" align="Left Bottom">
<Widget type="AutoSizedButton" skin="MW_Button">
<UserString key="SettingCategory" value="Input"/>
<UserString key="SettingName" value="invert x axis"/>
<UserString key="SettingType" value="CheckButton"/>
</Widget>
<Widget type="AutoSizedTextBox" skin="SandText">
<Property key="Caption" value="Invert X Axis "/>
<Property key="Caption" value="#{SettingsMenu:InvertXAxis} "/>
</Widget>
<Widget type="AutoSizedButton" skin="MW_Button">
<UserString key="SettingCategory" value="Input"/>
@ -238,7 +238,7 @@
</Widget>
</Widget>
<Widget type="TextBox" skin="NormalText" position="4 254 352 18" align="Left Bottom">
<Property key="Caption" value="Camera Sensitivity"/>
<Property key="Caption" value="#{SettingsMenu:CameraSensitivity}"/>
</Widget>
<Widget type="ScrollBar" skin="MW_HScroll" position="4 278 352 18" align="HStretch Bottom">
<Property key="Range" value="10000"/>
@ -274,26 +274,26 @@
<Widget type="TabControl" skin="TabControlInner" position="4 4 352 390" align="Stretch">
<Property key="ButtonAutoWidth" value="true"/>
<Widget type="TabItem">
<Property key="Caption" value=" Video "/>
<Property key="Caption" value=" #{sVideo} "/>
<Widget type="ListBox" skin="MW_List" position="0 4 170 215" align="Left Top" name="ResolutionList"/>
<Widget type="TextBox" skin="NormalText" position="182 4 170 18" align="Left Top">
<Property key="Caption" value="Window Mode:"/>
<Property key="Caption" value="#{SettingsMenu:WindowMode}"/>
</Widget>
<Widget type="HBox" position="182 28 300 24">
<Widget type="HBox" position="182 28 400 24">
<Widget type="ComboBox" skin="MW_ComboBox" position="0 0 200 24" align="Left Top" name="WindowModeList">
<Property key="AddItem" value="Fullscreen"/>
<Property key="AddItem" value="Windowed Fullscreen"/>
<Property key="AddItem" value="Windowed"/>
<Property key="AddItem" value="#{SettingsMenu:WindowModeFullscreen}"/>
<Property key="AddItem" value="#{SettingsMenu:WindowModeWindowedFullscreen}"/>
<Property key="AddItem" value="#{SettingsMenu:WindowModeWindowed}"/>
</Widget>
</Widget>
<Widget type="HBox" position="182 64 300 24">
<Widget type="HBox" position="182 64 400 24">
<Widget type="AutoSizedButton" skin="MW_Button" position="0 0 24 24" align="Left Top" name="VSyncButton">
<UserString key="SettingCategory" value="Video"/>
<UserString key="SettingName" value="vsync"/>
<UserString key="SettingType" value="CheckButton"/>
</Widget>
<Widget type="AutoSizedTextBox" skin="SandText" position="28 4 48 16" align="Left Top">
<Property key="Caption" value="VSync"/>
<Property key="Caption" value="#{SettingsMenu:VSync}"/>
</Widget>
</Widget>
<Widget type="HBox" position="182 94 300 24">
@ -303,7 +303,7 @@
<UserString key="SettingType" value="CheckButton"/>
</Widget>
<Widget type="AutoSizedTextBox" skin="SandText" position="28 4 48 16" align="Left Top">
<Property key="Caption" value="Window border"/>
<Property key="Caption" value="#{SettingsMenu:WindowBorder}"/>
</Widget>
</Widget>
<Widget type="HBox" position="182 124 300 24">
@ -313,15 +313,15 @@
<UserString key="SettingType" value="CheckButton"/>
</Widget>
<Widget type="AutoSizedTextBox" skin="SandText" position="28 4 48 16" align="Left Top">
<Property key="Caption" value="Post Processing"/>
<Property key="Caption" value="#{SettingsMenu:PostProcessing}"/>
<UserString key="ToolTipType" value="Layout"/>
<UserString key="ToolTipLayout" value="TextToolTip"/>
<UserString key="Caption_Text" value="Press F2 to show the config HUD"/>
<UserString key="Caption_Text" value="#{SettingsMenu:PostProcessingTooltip}"/>
</Widget>
</Widget>
<Widget type="AutoSizedTextBox" skin="SandText" position="182 154 300 32" align="Left Top">
<Property key="Caption" value="Hint: press F3 to show the current frame rate."/>
<Property key="Caption" value="#{SettingsMenu:FrameRateHint}"/>
</Widget>
<Widget type="TextBox" skin="NormalText" position="0 228 352 18" align="Left Top" name="FovText">
@ -336,7 +336,7 @@
<UserString key="SettingMin" value="30"/>
<UserString key="SettingMax" value="110"/>
<UserString key="SettingLabelWidget" value="FovText"/>
<UserString key="SettingLabelCaption" value="Field of View (%s)"/>
<UserString key="SettingLabelCaption" value="#{SettingsMenu:FieldOfView} (%s)"/>
</Widget>
<Widget type="TextBox" skin="SandText" position="0 276 352 18" align="Left Top">
<Property key="Caption" value="#{sLow}"/>
@ -369,20 +369,20 @@
</Widget>
</Widget>
<Widget type="TabItem">
<Property key="Caption" value=" Detail "/>
<Property key="Caption" value=" #{sDetail_Level} "/>
<Widget type="AutoSizedTextBox" skin="NormalText" align="Left Top">
<Property key="Caption" value="Texture Filtering"/>
<Property key="Caption" value="#{SettingsMenu:TextureFiltering}"/>
<UserString key="VStretch" value="false"/>
<UserString key="HStretch" value="false"/>
</Widget>
<Widget type="ComboBox" align="Left Top" skin="MW_ComboBox" position="0 28 200 24" name="TextureFilteringButton">
<Property key="AddItem" value="Bilinear"/>
<Property key="AddItem" value="Trilinear"/>
<Property key="AddItem" value="#{SettingsMenu:TextureFilteringBilinear}"/>
<Property key="AddItem" value="#{SettingsMenu:TextureFilteringTrilinear}"/>
</Widget>
<Widget type="AutoSizedTextBox" skin="NormalText" position="0 58 200 18" name="AnisotropyLabel">
<Property key="Caption" value="Anisotropy"/>
<Property key="Caption" value="#{SettingsMenu:Anisotropy}"/>
</Widget>
<Widget type="ScrollBar" skin="MW_HScroll" position="0 80 352 18" align="HStretch Top">
<Property key="Range" value="17"/>
@ -391,7 +391,7 @@
<UserString key="SettingCategory" value="General"/>
<UserString key="SettingName" value="anisotropy"/>
<UserString key="SettingLabelWidget" value="AnisotropyLabel"/>
<UserString key="SettingLabelCaption" value="Anisotropy (%s)"/>
<UserString key="SettingLabelCaption" value="#{SettingsMenu:Anisotropy} (%s)"/>
</Widget>
<Widget type="AutoSizedTextBox" skin="NormalText" position="0 104 0 18" align="Left Top" name="RenderDistanceLabel">
@ -432,7 +432,7 @@
</Widget>
<Widget type="TabItem">
<Property key="Caption" value=" Water "/>
<Property key="Caption" value=" #{SettingsMenu:Water} "/>
<Widget type="VBox" position_real="0 0 1 1" align="Stretch">
@ -446,7 +446,7 @@
<UserString key="SettingType" value="CheckButton"/>
</Widget>
<Widget type="AutoSizedTextBox" skin="SandText">
<Property key="Caption" value="Water shader"/>
<Property key="Caption" value="#{SettingsMenu:WaterShader}"/>
</Widget>
</Widget>
@ -460,14 +460,14 @@
<UserString key="SettingType" value="CheckButton"/>
</Widget>
<Widget type="AutoSizedTextBox" skin="SandText">
<Property key="Caption" value="Refraction"/>
<Property key="Caption" value="#{SettingsMenu:Refraction}"/>
</Widget>
</Widget>
<Widget type="Widget" position="0 0 0 18" align="Top Left HStretch">
<UserString key="HStretch" value="true"/>
<Widget type="AutoSizedTextBox" skin="NormalText">
<Property key="Caption" value="Texture quality"/>
<Property key="Caption" value="#{SettingsMenu:WaterShaderTextureQuality}"/>
</Widget>
<Widget type="Spacer" />
</Widget>
@ -476,9 +476,9 @@
<UserString key="HStretch" value="true"/>
<UserString key="VStretch" value="false"/>
<Widget type="ComboBox" skin="MW_ComboBox" position="0 0 200 24" align="Left Top" name="WaterTextureSize">
<Property key="AddItem" value="Low"/>
<Property key="AddItem" value="Medium"/>
<Property key="AddItem" value="High"/>
<Property key="AddItem" value="#{sLow}"/>
<Property key="AddItem" value="#{sMedium}"/>
<Property key="AddItem" value="#{sHigh}"/>
</Widget>
<Widget type="Spacer" />
</Widget>
@ -486,7 +486,7 @@
<Widget type="Widget" position="0 0 0 18" align="Top Left HStretch">
<UserString key="HStretch" value="true"/>
<Widget type="AutoSizedTextBox" skin="NormalText">
<Property key="Caption" value="Reflection shader detail"/>
<Property key="Caption" value="#{SettingsMenu:ReflectionShaderDetail}"/>
</Widget>
<Widget type="Spacer" />
</Widget>
@ -495,12 +495,12 @@
<UserString key="VStretch" value="false"/>
<Widget type="ComboBox" skin="MW_ComboBox" position="0 0 200 24" align="Left Top" name="WaterReflectionDetail">
<Property key="AddItem" value="Sky"/>
<Property key="AddItem" value="Terrain"/>
<Property key="AddItem" value="World"/>
<Property key="AddItem" value="Objects"/>
<Property key="AddItem" value="Actors"/>
<Property key="AddItem" value="Groundcover"/>
<Property key="AddItem" value="#{SettingsMenu:ReflectionShaderDetailSky}"/>
<Property key="AddItem" value="#{SettingsMenu:ReflectionShaderDetailTerrain}"/>
<Property key="AddItem" value="#{SettingsMenu:ReflectionShaderDetailWorld}"/>
<Property key="AddItem" value="#{SettingsMenu:ReflectionShaderDetailObjects}"/>
<Property key="AddItem" value="#{SettingsMenu:ReflectionShaderDetailActors}"/>
<Property key="AddItem" value="#{SettingsMenu:ReflectionShaderDetailGroundcover}"/>
</Widget>
<Widget type="Spacer" />
</Widget>
@ -508,7 +508,7 @@
<Widget type="Widget" position="0 0 0 18" align="Top Left HStretch">
<UserString key="HStretch" value="true"/>
<Widget type="AutoSizedTextBox" skin="NormalText">
<Property key="Caption" value="Rain ripple detail"/>
<Property key="Caption" value="#{SettingsMenu:RainRippleDetail}"/>
</Widget>
<Widget type="Spacer" />
</Widget>
@ -518,9 +518,9 @@
<UserString key="VStretch" value="false"/>
<Widget type="ComboBox" skin="MW_ComboBox" position="0 0 200 24" align="Left Top" name="WaterRainRippleDetail">
<Property key="AddItem" value="Simple"/>
<Property key="AddItem" value="Sparse"/>
<Property key="AddItem" value="Dense"/>
<Property key="AddItem" value="#{SettingsMenu:RainRippleDetailSimple}"/>
<Property key="AddItem" value="#{SettingsMenu:RainRippleDetailSparse}"/>
<Property key="AddItem" value="#{SettingsMenu:RainRippleDetailDense}"/>
</Widget>
<Widget type="Spacer" />
</Widget>
@ -529,21 +529,21 @@
</Widget>
<Widget type="TabItem">
<Property key="Caption" value=" Lights "/>
<Property key="Caption" value=" #{SettingsMenu:Lights} "/>
<!-- Lighting Method -->
<Widget type="TextBox" skin="NormalText" position="0 4 200 18" align="Left Top">
<Property key="Caption" value="Lighting Method"/>
<Widget type="TextBox" skin="NormalText" position="0 4 250 18" align="Left Top">
<Property key="Caption" value="#{SettingsMenu:LightingMethod}"/>
</Widget>
<Widget type="ComboBox" skin="MW_ComboBox" position="0 28 200 24" align="Left Top" name="LightingMethodButton">
<Widget type="ComboBox" skin="MW_ComboBox" position="0 28 250 24" align="Left Top" name="LightingMethodButton">
<Property key="AddItem" value="legacy"/>
<Property key="AddItem" value="shaders compatibility"/>
<Property key="AddItem" value="shaders"/>
</Widget>
<!-- Max Lights -->
<Widget type="TextBox" skin="NormalText" position="208 4 160 18" align="Left Top" name="MaxLightsText">
<Widget type="TextBox" skin="NormalText" position="258 4 350 18" align="Left Top" name="MaxLightsText">
<UserString key="ToolTipType" value="Layout"/>
<UserString key="ToolTipLayout" value="TextToolTip"/>
<UserString key="Caption_Text" value="Default: 8\nMaximum number of lights per object.\n\nA low number near default will cause light popping similar to what you would see with legacy lighting."/>
<UserString key="Caption_Text" value="#{SettingsMenu:MaxLightsTooltip}"/>
</Widget>
<Widget type="ScrollBar" position="0 0 0 0">
<UserString key="SettingType" value="Slider"/>
@ -551,9 +551,9 @@
<UserString key="SettingName" value="max lights"/>
<UserString key="SettingValueType" value="Integer"/>
<UserString key="SettingLabelWidget" value="MaxLightsText"/>
<UserString key="SettingLabelCaption" value="Max Lights: (%s)"/>
<UserString key="SettingLabelCaption" value="#{SettingsMenu:MaxLights} (%s)"/>
</Widget>
<Widget type="ComboBox" skin="MW_ComboBox" position="208 28 200 24" align="Left Top" name="MaxLights">
<Widget type="ComboBox" skin="MW_ComboBox" position="258 28 250 24" align="Left Top" name="MaxLights">
<Property key="AddItem" value="8"/>
<Property key="AddItem" value="16"/>
<Property key="AddItem" value="24"/>
@ -561,10 +561,10 @@
</Widget>
<Widget type="ImageBox" skin="MW_HLine" position="0 54 360 18" align="Top HStretch"/>
<!-- Light Fade Start -->
<Widget type="TextBox" skin="NormalText" position="0 78 352 18" align="Left Top" name="MaxLightDistanceText">
<Widget type="TextBox" skin="NormalText" position="0 78 500 18" align="Left Top" name="MaxLightDistanceText">
<UserString key="ToolTipType" value="Layout"/>
<UserString key="ToolTipLayout" value="TextToolTip"/>
<UserString key="Caption_Text" value="Default: 8192 (units)\nMaximum distance at which lights will appear.\n\nSet this to 0.0 to disable it."/>
<UserString key="Caption_Text" value="#{SettingsMenu:LightsMaximumDistanceTooltip}"/>
</Widget>
<Widget type="ScrollBar" skin="MW_HScroll" position="0 104 352 18" align="HStretch Top">
<Property key="Range" value="8192"/>
@ -576,13 +576,13 @@
<UserString key="SettingName" value="maximum light distance"/>
<UserString key="SettingValueType" value="Integer"/>
<UserString key="SettingLabelWidget" value="MaxLightDistanceText"/>
<UserString key="SettingLabelCaption" value="Maximum Light Distance (%s)"/>
<UserString key="SettingLabelCaption" value="#{SettingsMenu:LightsMaximumDistance} (%s)"/>
</Widget>
<!-- Light Fade Multiplier -->
<Widget type="TextBox" skin="NormalText" position="0 128 352 18" align="Left Top" name="LightFadeMultiplierText">
<Widget type="TextBox" skin="NormalText" position="0 128 500 18" align="Left Top" name="LightFadeMultiplierText">
<UserString key="ToolTipType" value="Layout"/>
<UserString key="ToolTipLayout" value="TextToolTip"/>
<UserString key="Caption_Text" value="Default: 0.85\nFraction of maximum distance at which lights will start to fade.\n\nSet this to a low value for slower transitions or a high value for quicker transitions."/>
<UserString key="Caption_Text" value="#{SettingsMenu:LightsFadeStartMultiplierTooltip}"/>
</Widget>
<Widget type="ScrollBar" skin="MW_HScroll" position="0 152 352 18" align="HStretch Top">
<Property key="Range" value="10000"/>
@ -594,13 +594,13 @@
<UserString key="SettingMin" value="0.0"/>
<UserString key="SettingMax" value="1.0"/>
<UserString key="SettingLabelWidget" value="LightFadeMultiplierText"/>
<UserString key="SettingLabelCaption" value="Fade Start Multiplier (%s)"/>
<UserString key="SettingLabelCaption" value="#{SettingsMenu:LightsFadeStartMultiplier} (%s)"/>
</Widget>
<!-- Bounding Sphere Multiplier -->
<Widget type="TextBox" skin="NormalText" position="0 176 352 18" align="Left Top" name="BoundingSphereMultText">
<Widget type="TextBox" skin="NormalText" position="0 176 500 18" align="Left Top" name="BoundingSphereMultText">
<UserString key="ToolTipType" value="Layout"/>
<UserString key="ToolTipLayout" value="TextToolTip"/>
<UserString key="Caption_Text" value="Default: 1.65\nMultipler for bounding sphere of lights.\nHigher numbers allows for smooth falloff but require an increase in number of max lights.\n\nDoes not effect the illumination or strength of lights."/>
<UserString key="Caption_Text" value="#{SettingsMenu:LightsBoundingSphereMultiplierTooltip}"/>
</Widget>
<Widget type="ScrollBar" skin="MW_HScroll" position="0 200 352 18" align="HStretch Top">
<Property key="Range" value="500000"/>
@ -612,13 +612,13 @@
<UserString key="SettingName" value="light bounds multiplier"/>
<UserString key="SettingValueType" value="Float"/>
<UserString key="SettingLabelWidget" value="BoundingSphereMultText"/>
<UserString key="SettingLabelCaption" value="Bounding Sphere Multiplier (%s)"/>
<UserString key="SettingLabelCaption" value="#{SettingsMenu:LightsBoundingSphereMultiplier} (%s)"/>
</Widget>
<!-- Minimum Ambient Brightness -->
<Widget type="TextBox" skin="NormalText" position="0 224 352 18" align="Left Top" name="MinimumBrightnessText">
<Widget type="TextBox" skin="NormalText" position="0 224 500 18" align="Left Top" name="MinimumBrightnessText">
<UserString key="ToolTipType" value="Layout"/>
<UserString key="ToolTipLayout" value="TextToolTip"/>
<UserString key="Caption_Text" value="Default: 0.08\nMinimum ambient interior brightness.\n\nIncrease this if you feel interiors are too dark."/>
<UserString key="Caption_Text" value="#{SettingsMenu:LightsMinimumInteriorBrightnessTooltip}"/>
</Widget>
<Widget type="ScrollBar" skin="MW_HScroll" position="0 248 352 18" align="HStretch Top">
<Property key="Range" value="10000"/>
@ -628,16 +628,16 @@
<UserString key="SettingName" value="minimum interior brightness"/>
<UserString key="SettingValueType" value="Float"/>
<UserString key="SettingLabelWidget" value="MinimumBrightnessText"/>
<UserString key="SettingLabelCaption" value="Minimum Interior Brightness (%s)"/>
<UserString key="SettingLabelCaption" value="#{SettingsMenu:LightsMinimumInteriorBrightness} (%s)"/>
</Widget>
<Widget type="AutoSizedButton" skin="MW_Button" position="0 290 0 0" align="Top Left" name="LightsResetButton">
<Property key="Caption" value="Reset To Defaults"/>
<Property key="Caption" value="#{sControlsMenu1}"/>
</Widget>
</Widget>
</Widget>
</Widget>
<Widget type="TabItem">
<Property key="Caption" value=" Scripts "/>
<Property key="Caption" value=" #{SettingsMenu:Scripts} "/>
<Widget type="HBox" position_real="0 0 1 0.99" align="Stretch">
<Property key="Padding" value="0"/>

@ -12,7 +12,7 @@
<!-- Dialog buttons -->
<Widget type="AutoSizedButton" skin="MW_Button" position="264 60 42 23" name="OKButton">
<Property key="ExpandDirection" value="Left"/>
<Property key="Caption" value="OK"/>
<Property key="Caption" value="#{sOk}"/>
</Widget>
</Widget>
</MyGUI>

Loading…
Cancel
Save