[Launcher] Globalization

This commit is contained in:
ChsBuffer
2021-07-25 04:46:01 +08:00
parent 18ce722fce
commit 704d301b3a
8 changed files with 2455 additions and 809 deletions
@@ -13,6 +13,7 @@
#include "PluginConfigApi.h"
#include "IniReader.h"
#include "i18n.h"
using namespace System;
using namespace System::Windows::Forms;
@@ -358,7 +359,7 @@ public:
{
CheckBox^ cb = gcnew CheckBox();
cb->Text = gcnew String(_friendlyName);
cb->Text = i18n::GetStringFallback(gcnew String(_friendlyName));
cb->Checked = GetIniBool(_iniSectionName, _iniVarName, _defaultVal, _iniFilePath);
cb->Left = left + 2;
cb->Top = top;
@@ -379,7 +380,7 @@ public:
}
cb->Scale(ScaleWidth, ScaleHeight);
tooltip->SetToolTip(cb, gcnew String(_description));
tooltip->SetToolTip(cb, i18n::GetStringFallback(gcnew String(_description)));
if (hasChanged == nullptr)
hasChanged = new bool(false);
@@ -424,7 +425,7 @@ public:
Label^ label = gcnew Label();
NumericUpDown^ numberbox = gcnew NumericUpDown();
label->Text = gcnew String(_friendlyName);
label->Text = i18n::GetStringFallback(gcnew String(_friendlyName));
label->Left = left;
label->Top = top + 3;
label->Width = Col1Width;
@@ -453,8 +454,8 @@ public:
label->Scale(ScaleWidth, ScaleHeight);
numberbox->Scale(ScaleWidth, ScaleHeight);
tooltip->SetToolTip(label, gcnew String(_description));
tooltip->SetToolTip(numberbox, gcnew String(_description));
tooltip->SetToolTip(label, i18n::GetStringFallback(gcnew String(_description)));
tooltip->SetToolTip(numberbox, i18n::GetStringFallback(gcnew String(_description)));
if (hasChanged == nullptr)
hasChanged = new bool(false);
@@ -500,7 +501,7 @@ public:
const wchar_t* stringBuf;
label->Text = gcnew String(_friendlyName);
label->Text = i18n::GetStringFallback(gcnew String(_friendlyName));
label->Left = left;
label->Top = top + 3;
label->Width = Col1Width;
@@ -532,8 +533,8 @@ public:
// textbox->Enabled = false;
//}
tooltip->SetToolTip(label, gcnew String(_description));
tooltip->SetToolTip(textbox, gcnew String(_description));
tooltip->SetToolTip(label, i18n::GetStringFallback(gcnew String(_description)));
tooltip->SetToolTip(textbox, i18n::GetStringFallback(gcnew String(_description)));
if (hasChanged == nullptr)
hasChanged = new bool(false);
@@ -589,7 +590,7 @@ public:
Label^ label = gcnew Label();
ComboBox^ combobox = gcnew ComboBox();
label->Text = gcnew String(_friendlyName);
label->Text = i18n::GetStringFallback(gcnew String(_friendlyName));
label->Left = left;
label->Top = top + 3;
label->Width = Col1Width;
@@ -597,7 +598,8 @@ public:
//label->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
for (LPCWSTR& choice : _valueStrings) {
combobox->Items->Add(msclr::interop::marshal_as<System::String^>(choice));
String^ displayString = i18n::GetStringFallback(msclr::interop::marshal_as<System::String^>(choice));
combobox->Items->Add(displayString);
}
combobox->SelectedIndex = GetIniInt(_iniSectionName, _iniVarName, _defaultVal, _iniFilePath)-_indexOffset;
combobox->Left = left + Col2Left;
@@ -619,8 +621,8 @@ public:
label->Scale(ScaleWidth, ScaleHeight);
combobox->Scale(ScaleWidth, ScaleHeight);
tooltip->SetToolTip(label, gcnew String(_description));
tooltip->SetToolTip(combobox, gcnew String(_description));
tooltip->SetToolTip(label, i18n::GetStringFallback(gcnew String(_description)));
tooltip->SetToolTip(combobox, i18n::GetStringFallback(gcnew String(_description)));
if (hasChanged == nullptr)
hasChanged = new bool(false);
@@ -670,7 +672,7 @@ public:
const wchar_t* stringBuf;
label->Text = gcnew String(_friendlyName);
label->Text = i18n::GetStringFallback(gcnew String(_friendlyName));
label->Left = left;
label->Top = top + 3;
label->Width = Col1Width;
@@ -713,8 +715,8 @@ public:
// combobox->Enabled = false;
//}
tooltip->SetToolTip(label, gcnew String(_description));
tooltip->SetToolTip(combobox, gcnew String(_description));
tooltip->SetToolTip(label, i18n::GetStringFallback(gcnew String(_description)));
tooltip->SetToolTip(combobox, i18n::GetStringFallback(gcnew String(_description)));
if (hasChanged == nullptr)
hasChanged = new bool(false);
@@ -775,7 +777,7 @@ public:
System::String^ tempSysStr;
label->Text = gcnew String(_friendlyName);
label->Text = i18n::GetStringFallback(gcnew String(_friendlyName));
label->Left = left;
label->Top = top + 3;
label->Width = Col1Width;
@@ -812,8 +814,8 @@ public:
label->Scale(ScaleWidth, ScaleHeight);
combobox->Scale(ScaleWidth, ScaleHeight);
tooltip->SetToolTip(label, gcnew String(_description));
tooltip->SetToolTip(combobox, gcnew String(_description));
tooltip->SetToolTip(label, i18n::GetStringFallback(gcnew String(_description)));
tooltip->SetToolTip(combobox, i18n::GetStringFallback(gcnew String(_description)));
ComboboxValidation^ validation = gcnew ComboboxValidation(combobox);
combobox->Leave += gcnew System::EventHandler(validation, &ComboboxValidation::CheckNumberLeave);
@@ -883,7 +885,7 @@ public:
System::String^ tempSysStr;
label->Text = gcnew String(_friendlyName);
label->Text = i18n::GetStringFallback(gcnew String(_friendlyName));
label->Left = left;
label->Top = top + 3;
label->Width = Col1Width;
@@ -945,8 +947,8 @@ public:
label->Scale(ScaleWidth, ScaleHeight);
combobox->Scale(ScaleWidth, ScaleHeight);
tooltip->SetToolTip(label, gcnew String(_description));
tooltip->SetToolTip(combobox, gcnew String(_description));
tooltip->SetToolTip(label, i18n::GetStringFallback(gcnew String(_description)));
tooltip->SetToolTip(combobox, i18n::GetStringFallback(gcnew String(_description)));
if (hasChanged == nullptr)
hasChanged = new bool(false);
@@ -1026,7 +1028,7 @@ public:
}
button->Scale(ScaleWidth, ScaleHeight);
tooltip->SetToolTip(button, gcnew String(_description));
tooltip->SetToolTip(button, i18n::GetStringFallback(gcnew String(_description)));
CustomFuncHandler^ funchandler = gcnew CustomFuncHandler(_func);
button->Click += gcnew System::EventHandler(funchandler, &CustomFuncHandler::RunFunc);
@@ -1089,7 +1091,7 @@ public:
cb->Scale(ScaleWidth, ScaleHeight);
button->Scale(ScaleWidth, ScaleHeight);
tooltip->SetToolTip(cb, gcnew String(_description));
tooltip->SetToolTip(cb, i18n::GetStringFallback(gcnew String(_description)));
if (hasChanged == nullptr)
hasChanged = new bool(false);
@@ -99,6 +99,7 @@
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="dllmain.cpp" />
<ClCompile Include="i18n.h" />
<ClCompile Include="TabPadding.cpp" />
</ItemGroup>
<ItemGroup>
@@ -123,6 +124,7 @@
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="SkinnedMessageBox.resx" />
<EmbeddedResource Include="Resources.restext" />
<EmbeddedResource Include="ui.resx">
<DependentUpon>ui.h</DependentUpon>
</EmbeddedResource>
@@ -0,0 +1,258 @@
###############################################
# framework
# display
DISPLAY_NAME=Display:
DISPLAY_HINT=Sets the window/screen mode.\n\n\nFast: Popup borderless window (can cause issues with screenshots if Windows 10/11 fullscreen optimizations are enabled).\n\nExclusive: Takes control of the screen and allows you to change the resolution and refresh rate. Makes switching between applications harder.\n\nSafe: Simple borderless window. A little bit laggier than Fast, but with less issues.
RESOLUTION_NAME=Resolution:
RESOLUTION_HINT=Sets the display resolution.
REFRESHRATE_NAME=Refresh Rate:
REFRESHRATE_HINT=Sets the display refresh rate.
R.ENABLE_NAME=Enable
R.ENABLE_HINT=Enable or disable custom internal resolution.
R.RESOLUTION_NAME=Resolution:
R.RESOLUTION_HINT=Sets the internal resolution (instead of 1280x720).
# graphics
MODEL_NAME=NVIDIA GPU:
MODEL_HINT=Select your NVIDIA GPU's architecture to apply the necessary workarounds.\n\nNOTE: Automatic detection does not currently work on GNU/Linux.
TAA_NAME=TAA
TAA_HINT=Temporal Anti-Aliasing
MLAA_NAME=MLAA
MLAA_HINT=Morphological Anti-Aliasing
MAG_NAME=Filter:
MAG_HINT=Image filter.\n\nBilinear: default filter\nNearest-neighbour: sharpest, but blocky\nSharpen: sharp filter\nCone: smooth filter
DOF_NAME=Depth of Field
DOF_HINT=Blurs the background. Disable for better performance.
REFLECTIONS_NAME=Reflections
REFLECTIONS_HINT=Enable or disable reflections.
REFLECT_RES_WIDTH_NAME=Reflection Res:
REFLECT_RES_WIDTH_HINT=Sets the reflection buffer resolution (instead of 512x256).
REFRACT_RES_WIDTH_NAME=Refraction Res:
REFRACT_RES_WIDTH_HINT=Sets the refraction buffer resolution (instead of 512x256).
SHADOWS_NAME=Shadows
SHADOWS_HINT=Enable or disable shadows.
PUNCHTHROUGH_NAME=Transparent Meshes
PUNCHTHROUGH_HINT=Show transparent meshes.
GLARE_NAME=Glare
GLARE_HINT=Enable or disable glare.
SHADER_NAME=Shader
SHADER_HINT=Enable or disable high-quality shaders.
NPR1_NAME=Toon (F9):
NPR1_HINT=NPR1 shader\n\nPress F9 to toggle.
2D_NAME=Disable 3D rendering
2D_HINT=Disable all 3D passes.\n\nWARNING: The extended data will be deleted unless Prevent Data Deletion is enabled. Don't enable on Intel GPUs, enable "Disable Extended Data" instead.
# options
BUILTIN_PATCHES_NAME=Enable Built-In Patches
BUILTIN_PATCHES_HINT=Enables the built-in patches, including the options below.
CUSTOM_PATCHES_NAME=Enable Custom Patches
CUSTOM_PATCHES_HINT=Enables all custom patches.
BUILTIN_RENDER_NAME=Enable Built-In Render
BUILTIN_RENDER_HINT=Enables the built-in render patches.
NO_MOVIES_NAME=Disable Movies
NO_MOVIES_HINT=Disable movies (enable this if the game hangs when loading certain PVs).
CURSOR_NAME=Cursor
CURSOR_HINT=Enable or disable the mouse cursor.
STEREO_NAME=Stereo
STEREO_HINT=Use 2 channels instead of 4 (when not using DivaSound).
QUICK_START_NAME=Quick Start:
QUICK_START_HINT=Skip one or more menus.
NO_SCROLLING_SFX_NAME=Disable Scrolling SFX
NO_SCROLLING_SFX_HINT=Disable the scrolling sound effect.
ENHANCED_STAGE_MANAGER_NAME=Number of Stages:
ENHANCED_STAGE_MANAGER_HINT=Set the number of stages (0 = default).
ENHANCED_STAGE_MANAGER_ENCORE_NAME=Encore
ENHANCED_STAGE_MANAGER_ENCORE_HINT=Enable encore stages.
FORCE_MOUTH_NAME=Mouth Type:
FORCE_MOUTH_HINT=Change the mouth animations.
FORCE_EXPRESSIONS_NAME=Expression Type:
FORCE_EXPRESSIONS_HINT=Change the expressions.
FORCE_LOOK_NAME=Look Type:
FORCE_LOOK_HINT=Change the look animations.
NO_HAND_SCALING_NAME=No Hand Scaling
NO_HAND_SCALING_HINT=Disable hand scaling.
DEFAULT_HAND_SIZE_NAME=Default Hand Size:
DEFAULT_HAND_SIZE_HINT=-1: default\n12200: PDA
SING_MISSED_NAME=Sing Missed
SING_MISSED_HINT=Sing missed notes.
HIDE_VOLUME_NAME=Hide Volume Buttons
HIDE_VOLUME_HINT=Hide the volume and SE control buttons.
NO_PV_UI_NAME=Disable PV UI
NO_PV_UI_HINT=Remove the photo controls during PV playback.
HIDE_PV_WATERMARK_NAME=Hide PV Watermark
HIDE_PV_WATERMARK_HINT=Hide the watermark that's usually shown in PV viewing mode.
STATUS_ICONS_NAME=Top-Right Corner Icons:
STATUS_ICONS_HINT=Set the state of card reader and network status icons.
NO_LYRICS_NAME=Disable Lyrics
NO_LYRICS_HINT=Disable showing lyrics.
NO_ERROR_NAME=Disable Error Banner
NO_ERROR_HINT=Disable the error banner on the attract screen.
HIDE_FREEPLAY_NAME=Hide "FREE PLAY"/"CREDIT(S)"
HIDE_FREEPLAY_HINT=Hide the "FREE PLAY"/"CREDIT(S)" text.
PDLOADERTEXT_NAME=PD Loader FREE PLAY
PDLOADERTEXT_HINT=Show "PD Loader" instead of "FREE PLAY".
NO_TIMER_NAME=Freeze Timer
NO_TIMER_HINT=Disable the timer.
NO_TIMER_SPRITE_NAME=Disable Timer Sprite
NO_TIMER_SPRITE_HINT=Disable the timer sprite.
NO_MESSAGE_BAR_NAME=Hide Message Bar
NO_MESSAGE_BAR_HINT=Hide the top message bar.
NO_STAGE_TEXT_NAME=Disable Stage Text
NO_STAGE_TEXT_HINT=Disable Stage 1/2/Final.
UNLOCK_PSEUDO_NAME=Unlock "PSEUDO" Modules (incomplete)
UNLOCK_PSEUDO_HINT=Lets you play any PV with any performer.\n(incomplete, recommended modules will default to Miku)
CARD_NAME=Unlock Card Menu (incomplete)
CARD_HINT=Enables the card menu.\n(incomplete, it doesn't bypass the card prompt)
NO_OPD_NAME=Disable Extended Data
NO_OPD_HINT=AKA Skyth's "No Osage Play Data" patch.\n\nDisables baked physics in edits to save space.\nMay break physics in some edits.
DWGUI_SCALING_NAME=Scale Debug Windows
DWGUI_SCALING_HINT=AKA somewhatlurker's dwgui patch.\n\nMakes debug windows bigger above HD internal resolution.
FREEPLAY_NAME=FREE PLAY
FREEPLAY_HINT=Show "FREE PLAY" instead of "CREDIT(S)" and don't require credits.
FPS.LIMIT.LIGHTMODE_NAME=Use Lightweight Limiter
FPS.LIMIT.LIGHTMODE_HINT=Makes the FPS limiter use less CPU.\nMay have less consistent performance.
FPS.LIMIT_NAME=FPS Limit:
FPS.LIMIT_HINT=Allows you to set a frame rate cap. Set to -1 to unlock the frame rate.
FRM.MOTION.RATE_NAME=FRM Motion Rate:
FRM.MOTION.RATE_HINT=Sets the motion rate (fps) for the Frame Rate Manager component.\nLarger values should be smoother, but more CPU intensive and possibly buggier.
AUTOPAUSE_NAME=Pause Automatically
AUTOPAUSE_HINT=Pause when focus is lost.
RUMBLE_NAME=XInput Rumble
RUMBLE_HINT=Enables rumble during chainslides.
XINPUT_PREFERRED_NAME=XInput Controller Num:
XINPUT_PREFERRED_HINT=Sets the preferred XInput controller.\nIf unavailable, the next connected controller is used.
HARDWARE_SLIDER_NAME=Use Hardware Slider
HARDWARE_SLIDER_HINT=Enable this if using a real arcade slider.\n(set the slider to port COM11)
OPENGL_PATCH_A_NAME=OpenGL Patch A
OPENGL_PATCH_A_HINT=Ignores some OpenGL-related errors. Don't use both patches at the same time unless you're know what you're doing.
OPENGL_PATCH_B_NAME=OpenGL Patch B
OPENGL_PATCH_B_HINT=Ignores some OpenGL-related errors. Don't use both patches at the same time unless you're know what you're doing.
PREVENT_DATA_DELETION_NAME=Prevent Data Deletion
PREVENT_DATA_DELETION_HINT=Prevents the game from deleting files.
COMMAND_LINE_NAME=Command Line:
COMMAND_LINE_HINT=Allows setting command line parameters for the game when using the launcher.\nDisabling the launcher will bypass this.
USE_DIVAHOOK_BAT_NAME=Use divahook.bat
USE_DIVAHOOK_BAT_HINT=Launches divahook.bat intead of diva.exe.
DARK_LAUNCHER_NAME=Dark Launcher
DARK_LAUNCHER_HINT=Sets the dark colour scheme in the launcher.
NO_GPU_DIALOG_NAME=Disable GPU Warning
NO_GPU_DIALOG_HINT=Disables the warning dialog for unsupported GPUs.
# player data
PLAYER_NAME_NAME=Player Name:
PLAYER_NAME_HINT=Player name shown in game.
LEVEL_NAME_NAME=Level Name:
LEVEL_NAME_HINT=Level (plate) name shown in game.
LEVEL_PLATE_ID_NAME=Level Plate:
LEVEL_PLATE_ID_HINT=Sets the level background image (plate).
LEVEL_PLATE_EFFECT_NAME=Level Plate Effect:
LEVEL_PLATE_EFFECT_HINT=Sets the effect on the level background image (plate).
SKIN_EQUIP _NAME=Skin:
SKIN_EQUIP _HINT=Sets the gameplay UI skin.
BTN_SE_EQUIP_NAME=Button Sound:
BTN_SE_EQUIP_HINT=Sets the sound effect for buttons.\n-1 = song default
SLIDE_SE_EQUIP_NAME=Slide Sound:
SLIDE_SE_EQUIP_HINT=Sets the sound effect for slides.\n-1 = song default
CHAINSLIDE_SE_EQUIP_NAME=Chainslide Sound:
CHAINSLIDE_SE_EQUIP_HINT=Sets the sound effect for chain slides.\n-1 = song default
SLIDERTOUCH_SE_EQUIP_NAME=Slider Touch Sound:
SLIDERTOUCH_SE_EQUIP_HINT=Sets the sound effect for touching the slider with no note.\n-1 = song default
ACT_TOGGLE_NAME=Button SE
ACT_TOGGLE_HINT=Enables button/slider sounds.
BORDER_GREAT_NAME=Clear Border (Great)
BORDER_GREAT_HINT=Shows the clear border for a great rating on the progress bar.
BORDER_EXCELLENT_NAME=Clear Border (Excellent)
BORDER_EXCELLENT_HINT=Shows the clear border for an excellent rating on the progress bar.
BORDER_RIVAL_NAME=Clear Border (Rival)
BORDER_RIVAL_HINT=Shows the clear border for beating your rival on the progress bar.
USE_CARD_NAME=Use Card
USE_CARD_HINT=Enables IC card. This allows module selection.
MODULE_CARD_WORKAROUND_NAME=Module Selection Workaround
MODULE_CARD_WORKAROUND_HINT=Allows module selection without card and tries to improve menu performance.\n(BETA)
USE_PV_MODULE_EQUIP_NAME=Song Specific Modules
USE_PV_MODULE_EQUIP_HINT=Allows song-specific module selection.
USE_PV_SKIN_EQUIP_NAME=Song Specific Skins
USE_PV_SKIN_EQUIP_HINT=Allows song-specific skin settings.\nValues stored in skins.ini
USE_PV_SFX_EQUIP_NAME=Song Specific Sound Effects
USE_PV_SFX_EQUIP_HINT=Allows song-specific sound effect settings.\nValues stored in sfx.ini
GAMEMODE_OPTIONS_NAME=Game Modifiers
GAMEMODE_OPTIONS_HINT=Allows use of game mode modifiers (hi-speed, hidden, and sudden).
# components
INPUT_EMULATOR_NAME=Input Emulator
INPUT_EMULATOR_HINT=Emulates input through keyboard and/or mouse.
TOUCH_SLIDER_EMULATOR_NAME=Slider Emulator
TOUCH_SLIDER_EMULATOR_HINT=Emulates slider through keyboard and/or mouse.
TOUCH_PANEL_EMULATOR_NAME=Touch Panel Emulator
TOUCH_PANEL_EMULATOR_HINT=Emulates touch panel through mouse.
PLAYER_DATA_MANAGER_NAME=Player Data Manager
PLAYER_DATA_MANAGER_HINT=Loads user-defined values into the PlayerData struct.\nRequired for modules and game mode modifiers.
FRAME_RATE_MANAGER_NAME=Frame Rate Manager
FRAME_RATE_MANAGER_HINT=Adjusts animations to the correct speed at different frame rates.\nOnly needed when FPS isn't locked at 60.
FAST_LOADER_NAME=Fast Loader
FAST_LOADER_HINT=Skip or speed up unnecessary loading steps.
FAST_LOADER_SPEED_NAME=Fast Loader Speed
FAST_LOADER_SPEED_HINT=Set this to 4 or less when playing online.\nDefault: 39
CAMERA_CONTROLLER_NAME=Camera Controller
CAMERA_CONTROLLER_HINT=Enables freecam (toggled using F3).\nWASD to move, SPACE/CTRL for up/down, Q/R to rotate, R/F for zoom.\nHolding SHIFT/ALT changes control speed.
SCALE_COMPONENT_NAME=Scale Component
SCALE_COMPONENT_HINT=Scales the graphics output framebuffer to fill the screen/window.
DEBUG_COMPONENT_NAME=Debug Component
DEBUG_COMPONENT_HINT=Allows for changing game state (F4-F8 keys), using dev GUI and tests, and speeding up 2d animations/menus (hold SHIFT+TAB).
TARGET_INSPECTOR_NAME=Target Inspector
TARGET_INSPECTOR_HINT=Enables hold transfers.
SCORE_SAVER_NAME=Score Saver
SCORE_SAVER_HINT=Saves high scores to plugins/scores.ini.
PAUSE_NAME=Pause
PAUSE_HINT=Adds a pause menu.
###############################################
# ui
# dialog
CONFIRM_SAVE_SETTINGS=Do you want to save your settings?
CONFIRM_DISCORD_OR_GUIDE=Would you like to read the user guide for troubleshooting?
HOWTO_CLEAN_INSTALL=How to do a clean installation
HOWTO_CLEAN_INSTALL_HINT=Delete:\n- dnsapi.dll or dinput8.dll\n- patches/\n- plugins/\n\nRestore:\n- glut32.dll\n\nThen install PD Loader from the official repository.
# gpu
GPU_INFO_NAME=GPU Info:
GPU_AMD_NOVIDIA_NAME=Issues: AMD GPU support is unofficial.
GPU_AMD_NOVIDIA_HINT=AMD GPUs are not supported without mods.\nThe PD Loader AMDPack seems to be installed, but please keep in mind that it may have issues.
GPU_AMD_NAME=Issues: Mods needed for AMD compatibility!
GPU_AMD_HINT=AMD GPUs are not supported without mods.\nThe PD Loader AMDPack can be used to make 3D rendering work. Please download it and follow the included instructions.\n\nIf you have a laptop with an NVIDIA GPU and wish to use it instead of the detected GPU, you may need to set diva.exe to use it in Windows settings or NVIDIA Control Panel.
GPU_UNSUPPORTED_NAME=Issues: UNSUPPORTED GPU!
GPU_UNSUPPORTED_HINT=Your graphics card is not supported. Only NVIDIA GPUs are recommended. (though AMD ones can be used with mods)\nPlease use a GTX 600 series or later NVIDIA GPU.\n\nIf you have a laptop with an NVIDIA GPU and wish to use it instead of the detected GPU, you may need to set diva.exe to use it in Windows settings or NVIDIA Control Panel.\n\nOwners of other GPUs may be able to run the game using plugins or mods, but 3D graphics will probably not work.
GPU_GA_NAME=Issues: Ampere GPU detected! Unknown issues.\n(Click for more information)
GPU_GA_HINT=Ampere GPUs have not been tested yet. On the previous generation Turing GPUs (GTX 16xx/RTX 20xx), some important character shaders have issues resulting in lines/noise.\nPlease make sure the ShaderPatch plugin is enabled and report any further issues to the developers.
GPU_TU_NAME=Issues: Turing GPU detected! Possible noise.\n(Click for more information)
GPU_TU_HINT=On Turing GPUs (GTX 16xx/RTX 20xx), some important character shaders have issues resulting in lines/noise.\nPlease make sure the ShaderPatch plugin is enabled.
GPU_GM_NEWER_NAME=Issues: May have minor noise on some stages.\n(Click for more information)
GPU_GM_NEWER_HINT=On Maxwell GPUs (~GTX 900) or newer, some minor stage shaders create noise.\nPlease make sure the ShaderPatch plugin is enabled.
GPU_GK_NAME=Issues: None.
GPU_GK_HINT=Your GPU should have no issues running the game.
GPU_GF_DRIVER_OLD_NAME=Issues: Driver too old.
GPU_GF_DRIVER_OLD_HINT=Your GPU should be able to run the game, but it looks like your OpenGL version is too old.\nA driver update should fix this.
GPU_GF_NAME=Issues: No known issues.
GPU_GF_HINT=Your GPU should have no issues running the game, but it is older than the GPU the game was originally designed for (GTX 650 Ti).\nThere may be some issues with graphics.\nPlease report any issues so that they can be analysed and potentially fixed.
GPU_TOO_NEW_NAME=Issues: GPU may be too new.\n(Click for more information)
GPU_TOO_NEW_HINT=It looks like your GPU may be too new. Only up to Turing (GTX 16xx/RTX 20xx) is currently supported.\nGood news: the game should be capable of running, but shader patches (probably needed) may not support it yet.\nYou will likely see lines/noise on important character shaders and some minor stage shaders.\nPlease report any issues so that ShaderPatch can be updated.
GPU_OLD_NAME=Issues: GPU too old! 3D rendering might be broken.\n(Click for more information)
GPU_OLD_HINT=Your GPU is very old and does not support rendering techniques used by the game.\nYou may be able to play, but graphics will likely have major issues.\nPlease upgrade to a GTX 600 series or later GPU.
GPU_UNKNOWN_NAME=Issues: Unable to detect GPU architecture.\n(Click for more information)
GPU_UNKNOWN_HINT=It looks like you have an NVIDIA GPU, but something went wrong while trying to determine your GPU's architecture (type).\nThis may be a caused by a bug, but it probably indicates potential issues.\nPlease make sure you have a GTX 600 series or later GPU. (GTX 400 series or later should also work)
SHOW_GPU_DIALOG_HINT=You can disable this message from the options tab.
@@ -8,6 +8,8 @@ using namespace System::Windows::Forms;
[STAThread]
int showUI() {
AppDomain::CurrentDomain->AppendPrivatePath(Path::GetDirectoryName(Assembly::GetExecutingAssembly()->Location)); // directory of Launcher.dva, "...\plugins"
SetProcessDPIAware();
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
+100 -100
View File
@@ -159,18 +159,18 @@ static std::vector<int> getScreenRatesVec(std::vector<DEVMODEW> &screenModes) {
std::vector<DEVMODEW> screenModes = getScreenModes();
DropdownOption* DisplayModeDropdown = new DropdownOption(L"display", RESOLUTION_SECTION, CONFIG_FILE, L"Display:", L"Sets the window/screen mode.\n\n\nFast: Popup borderless window (can cause issues with screenshots if Windows 10/11 fullscreen optimizations are enabled).\n\nExclusive: Takes control of the screen and allows you to change the resolution and refresh rate. Makes switching between applications harder.\n\nSafe: Simple borderless window. A little bit laggier than Fast, but with less issues.", 1, std::vector<LPCWSTR>({ L"Windowed", L"Fast", L"Exclusive", L"Safe" }));
ResolutionOption* DisplayResolutionOption = new ResolutionOption(L"width", L"height", RESOLUTION_SECTION, CONFIG_FILE, L"Resolution:", L"Sets the display resolution.", resolution(-1, -1), getScreenResolutionsVec(screenModes), true, RESOPT_INCLUDE_MATCH_SCREEN);
DropdownOption* DisplayModeDropdown = new DropdownOption(L"display", RESOLUTION_SECTION, CONFIG_FILE, L"DISPLAY_NAME", L"DISPLAY_HINT", 1, std::vector<LPCWSTR>({ L"Windowed", L"Fast", L"Exclusive", L"Safe" }));
ResolutionOption* DisplayResolutionOption = new ResolutionOption(L"width", L"height", RESOLUTION_SECTION, CONFIG_FILE, L"RESOLUTION_NAME", L"RESOLUTION_HINT", resolution(-1, -1), getScreenResolutionsVec(screenModes), true, RESOPT_INCLUDE_MATCH_SCREEN);
ConfigOptionBase* screenResolutionArray[] = {
DisplayModeDropdown,
DisplayResolutionOption,
//new DropdownNumberOption(L"bitdepth", RESOLUTION_SECTION, CONFIG_FILE, L"Bit Depth:", L"Sets the display bit depth.", 32, getScreenDepthsVec(screenModes), true),
new DropdownNumberOption(L"refreshrate", RESOLUTION_SECTION, CONFIG_FILE, L"Refresh Rate:", L"Sets the display refresh rate.", 60, getScreenRatesVec(screenModes), true),
new DropdownNumberOption(L"refreshrate", RESOLUTION_SECTION, CONFIG_FILE, L"REFRESHRATE_NAME", L"REFRESHRATE_HINT", 60, getScreenRatesVec(screenModes), true),
};
BooleanOption* InternalResolutionCheckbox = new BooleanOption(L"r.enable", RESOLUTION_SECTION, CONFIG_FILE, L"Enable", L"Enable or disable custom internal resolution.", false, false);
ResolutionOption* InternalResolutionOption = new ResolutionOption(L"r.width", L"r.height", RESOLUTION_SECTION, CONFIG_FILE, L"Resolution:", L"Sets the internal resolution (instead of 1280x720).", resolution(1920, 1080), std::vector<resolution>({ resolution(1,1), resolution(320,240), resolution(426,240), resolution(640,480), resolution(854,480), resolution(960,540), resolution(1280,720), resolution(1366,768), resolution(1600,900), resolution(1920,1080), resolution(2560,1440), resolution(3200,1800), resolution(3840,2160), resolution(5120,2880), resolution(7680,4320) }), true, RESOPT_INCLUDE_MATCH_WINDOW);
BooleanOption* InternalResolutionCheckbox = new BooleanOption(L"r.enable", RESOLUTION_SECTION, CONFIG_FILE, L"R.ENABLE_NAME", L"R.ENABLE_HINT", false, false);
ResolutionOption* InternalResolutionOption = new ResolutionOption(L"r.width", L"r.height", RESOLUTION_SECTION, CONFIG_FILE, L"R.RESOLUTION_NAME", L"R.RESOLUTION_HINT", resolution(1920, 1080), std::vector<resolution>({ resolution(1,1), resolution(320,240), resolution(426,240), resolution(640,480), resolution(854,480), resolution(960,540), resolution(1280,720), resolution(1366,768), resolution(1600,900), resolution(1920,1080), resolution(2560,1440), resolution(3200,1800), resolution(3840,2160), resolution(5120,2880), resolution(7680,4320) }), true, RESOPT_INCLUDE_MATCH_WINDOW);
ConfigOptionBase* internalResolutionArray[] = {
InternalResolutionCheckbox,
@@ -178,165 +178,165 @@ ConfigOptionBase* internalResolutionArray[] = {
};
ConfigOptionBase* graphicsArray[] = {
new DropdownOption(L"model", L"GPU", CONFIG_FILE, L"NVIDIA GPU:", L"Select your NVIDIA GPU's architecture to apply the necessary workarounds.\n\nNOTE: Automatic detection does not currently work on GNU/Linux.", -1, std::vector<LPCWSTR>({ L"Automatic", L"Kepler", L"Maxwell", L"Turing", L"Ampere" }), -1),
new BooleanOption(L"TAA", GRAPHICS_SECTION, CONFIG_FILE, L"TAA", L"Temporal Anti-Aliasing", true, false),
new BooleanOption(L"MLAA", GRAPHICS_SECTION, CONFIG_FILE, L"MLAA", L"Morphological Anti-Aliasing", true, false),
new DropdownOption(L"MAG", GRAPHICS_SECTION, CONFIG_FILE, L"Filter:", L"Image filter.\n\nBilinear: default filter\nNearest-neighbour: sharpest, but blocky\nSharpen: sharp filter\nCone: smooth filter", 0, std::vector<LPCWSTR>({ L"Bilinear", L"Nearest-neighbour", L"Sharpen", L"Cone" })),
new BooleanOption(L"DOF", GRAPHICS_SECTION, CONFIG_FILE, L"Depth of Field", L"Blurs the background. Disable for better performance.", true, false),
new BooleanOption(L"reflections", GRAPHICS_SECTION, CONFIG_FILE, L"Reflections", L"Enable or disable reflections.", true, false),
new ResolutionOption(L"reflect_res_width", L"reflect_res_height", GRAPHICS_SECTION, CONFIG_FILE, L"Reflection Res:", L"Sets the reflection buffer resolution (instead of 512x256).", resolution(512, 256), std::vector<resolution>({resolution(256,256), resolution(512,256), resolution(512,512), resolution(1024,1024), resolution(2048,2048), resolution(4096,4096)}), true, (ResolutionOptionOpts)0),
new ResolutionOption(L"refract_res_width", L"refract_res_height", GRAPHICS_SECTION, CONFIG_FILE, L"Refraction Res:", L"Sets the refraction buffer resolution (instead of 512x256).", resolution(512, 256), std::vector<resolution>({resolution(256,256), resolution(512,256), resolution(512,512), resolution(1024,1024), resolution(2048,2048), resolution(4096,4096)}), true, (ResolutionOptionOpts)0),
new BooleanOption(L"shadows", GRAPHICS_SECTION, CONFIG_FILE, L"Shadows", L"Enable or disable shadows.", true, false),
new BooleanOption(L"punchthrough", GRAPHICS_SECTION, CONFIG_FILE, L"Transparent Meshes", L"Show transparent meshes.", true, false),
new BooleanOption(L"glare", GRAPHICS_SECTION, CONFIG_FILE, L"Glare", L"Enable or disable glare.", true, false),
new BooleanOption(L"shader", GRAPHICS_SECTION, CONFIG_FILE, L"Shader", L"Enable or disable high-quality shaders.", true, false),
new DropdownOption(L"NPR1", GRAPHICS_SECTION, CONFIG_FILE, L"Toon (F9):", L"NPR1 shader\n\nPress F9 to toggle.", 0, std::vector<LPCWSTR>({ L"Default", L"Force on", L"Force off" })),
new BooleanOption(L"2D", GRAPHICS_SECTION, CONFIG_FILE, L"Disable 3D rendering", L"Disable all 3D passes.\n\nWARNING: The extended data will be deleted unless Prevent Data Deletion is enabled. Don't enable on Intel GPUs, enable \"Disable Extended Data\" instead.", false, false),
new DropdownOption(L"model", L"GPU", CONFIG_FILE, L"MODEL_NAME", L"MODEL_HINT", -1, std::vector<LPCWSTR>({ L"Automatic", L"Kepler", L"Maxwell", L"Turing", L"Ampere" }), -1),
new BooleanOption(L"TAA", GRAPHICS_SECTION, CONFIG_FILE, L"TAA_NAME", L"TAA_HINT", true, false),
new BooleanOption(L"MLAA", GRAPHICS_SECTION, CONFIG_FILE, L"MLAA_NAME", L"MLAA_HINT", true, false),
new DropdownOption(L"MAG", GRAPHICS_SECTION, CONFIG_FILE, L"MAG_NAME", L"MAG_HINT", 0, std::vector<LPCWSTR>({ L"Bilinear", L"Nearest-neighbour", L"Sharpen", L"Cone" })),
new BooleanOption(L"DOF", GRAPHICS_SECTION, CONFIG_FILE, L"DOF_NAME", L"DOF_HINT", true, false),
new BooleanOption(L"reflections", GRAPHICS_SECTION, CONFIG_FILE, L"REFLECTIONS_NAME", L"REFLECTIONS_HINT", true, false),
new ResolutionOption(L"reflect_res_width", L"reflect_res_height", GRAPHICS_SECTION, CONFIG_FILE, L"REFLECT_RES_WIDTH_NAME", L"REFLECT_RES_WIDTH_HINT", resolution(512, 256), std::vector<resolution>({resolution(256,256), resolution(512,256), resolution(512,512), resolution(1024,1024), resolution(2048,2048), resolution(4096,4096)}), true, (ResolutionOptionOpts)0),
new ResolutionOption(L"refract_res_width", L"refract_res_height", GRAPHICS_SECTION, CONFIG_FILE, L"REFRACT_RES_WIDTH_NAME", L"REFRACT_RES_WIDTH_HINT", resolution(512, 256), std::vector<resolution>({resolution(256,256), resolution(512,256), resolution(512,512), resolution(1024,1024), resolution(2048,2048), resolution(4096,4096)}), true, (ResolutionOptionOpts)0),
new BooleanOption(L"shadows", GRAPHICS_SECTION, CONFIG_FILE, L"SHADOWS_NAME", L"SHADOWS_HINT", true, false),
new BooleanOption(L"punchthrough", GRAPHICS_SECTION, CONFIG_FILE, L"PUNCHTHROUGH_NAME", L"PUNCHTHROUGH_HINT", true, false),
new BooleanOption(L"glare", GRAPHICS_SECTION, CONFIG_FILE, L"GLARE_NAME", L"GLARE_HINT", true, false),
new BooleanOption(L"shader", GRAPHICS_SECTION, CONFIG_FILE, L"SHADER_NAME", L"SHADER_HINT", true, false),
new DropdownOption(L"NPR1", GRAPHICS_SECTION, CONFIG_FILE, L"NPR1_NAME", L"NPR1_HINT", 0, std::vector<LPCWSTR>({ L"Default", L"Force on", L"Force off" })),
new BooleanOption(L"2D", GRAPHICS_SECTION, CONFIG_FILE, L"2D_NAME", L"2D_HINT", false, false),
};
ConfigOptionBase* optionsArray[] = {
new BooleanOption(L"builtin_patches", GLOBAL_SECTION, CONFIG_FILE, L"Enable Built-In Patches", L"Enables the built-in patches, including the options below.", true, false),
new BooleanOption(L"custom_patches", GLOBAL_SECTION, CONFIG_FILE, L"Enable Custom Patches", L"Enables all custom patches.", true, false),
new BooleanOption(L"builtin_render", GLOBAL_SECTION, CONFIG_FILE, L"Enable Built-In Render", L"Enables the built-in render patches.", true, false),
new BooleanOption(L"builtin_patches", GLOBAL_SECTION, CONFIG_FILE, L"BUILTIN_PATCHES_NAME", L"BUILTIN_PATCHES_HINT", true, false),
new BooleanOption(L"custom_patches", GLOBAL_SECTION, CONFIG_FILE, L"CUSTOM_PATCHES_NAME", L"CUSTOM_PATCHES_HINT", true, false),
new BooleanOption(L"builtin_render", GLOBAL_SECTION, CONFIG_FILE, L"BUILTIN_RENDER_NAME", L"BUILTIN_RENDER_HINT", true, false),
new OptionMetaSeparator(),
new OptionMetaSpacer(8),
new BooleanOption(L"no_movies", PATCHES_SECTION, CONFIG_FILE, L"Disable Movies", L"Disable movies (enable this if the game hangs when loading certain PVs).", false, false),
new BooleanOption(L"cursor", PATCHES_SECTION, CONFIG_FILE, L"Cursor", L"Enable or disable the mouse cursor.", true, false),
new BooleanOption(L"stereo", PATCHES_SECTION, CONFIG_FILE, L"Stereo", L"Use 2 channels instead of 4 (when not using DivaSound).", true, false),
new BooleanOption(L"no_movies", PATCHES_SECTION, CONFIG_FILE, L"NO_MOVIES_NAME", L"NO_MOVIES_HINT", false, false),
new BooleanOption(L"cursor", PATCHES_SECTION, CONFIG_FILE, L"CURSOR_NAME", L"CURSOR_HINT", true, false),
new BooleanOption(L"stereo", PATCHES_SECTION, CONFIG_FILE, L"STEREO_NAME", L"STEREO_HINT", true, false),
new OptionMetaSeparator(),
new OptionMetaSpacer(8),
new DropdownOption(L"quick_start", PATCHES_SECTION, CONFIG_FILE, L"Quick Start:", L"Skip one or more menus.", 1, std::vector<LPCWSTR>({ L"Disabled", L"Guest", L"Guest + Normal" })),
new BooleanOption(L"no_scrolling_sfx", PATCHES_SECTION, CONFIG_FILE, L"Disable Scrolling SFX", L"Disable the scrolling sound effect.", false, false),
new DropdownOption(L"quick_start", PATCHES_SECTION, CONFIG_FILE, L"QUICK_START_NAME", L"QUICK_START_HINT", 1, std::vector<LPCWSTR>({ L"Disabled", L"Guest", L"Guest + Normal" })),
new BooleanOption(L"no_scrolling_sfx", PATCHES_SECTION, CONFIG_FILE, L"NO_SCROLLING_SFX_NAME", L"NO_SCROLLING_SFX_HINT", false, false),
new OptionMetaSeparator(),
new OptionMetaSpacer(8),
new NumericOption(L"Enhanced_Stage_Manager", PATCHES_SECTION, CONFIG_FILE, L"Number of Stages:", L"Set the number of stages (0 = default).", 0, 0, INT_MAX),
new BooleanOption(L"Enhanced_Stage_Manager_Encore", PATCHES_SECTION, CONFIG_FILE, L"Encore", L"Enable encore stages.", true, false),
new NumericOption(L"Enhanced_Stage_Manager", PATCHES_SECTION, CONFIG_FILE, L"ENHANCED_STAGE_MANAGER_NAME", L"ENHANCED_STAGE_MANAGER_HINT", 0, 0, INT_MAX),
new BooleanOption(L"Enhanced_Stage_Manager_Encore", PATCHES_SECTION, CONFIG_FILE, L"ENHANCED_STAGE_MANAGER_ENCORE_NAME", L"ENHANCED_STAGE_MANAGER_ENCORE_HINT", true, false),
new OptionMetaSeparator(),
new OptionMetaSpacer(8),
new DropdownOption(L"force_mouth", PATCHES_SECTION, CONFIG_FILE, L"Mouth Type:", L"Change the mouth animations.", 0, std::vector<LPCWSTR>({ L"Default", L"Force PDA", L"Force FT" })),
new DropdownOption(L"force_expressions", PATCHES_SECTION, CONFIG_FILE, L"Expression Type:", L"Change the expressions.", 0, std::vector<LPCWSTR>({ L"Default", L"Force PDA", L"Force FT" })),
new DropdownOption(L"force_look", PATCHES_SECTION, CONFIG_FILE, L"Look Type:", L"Change the look animations.", 0, std::vector<LPCWSTR>({ L"Default", L"Force PDA", L"Force FT" })),
new BooleanOption(L"no_hand_scaling", PATCHES_SECTION, CONFIG_FILE, L"No Hand Scaling", L"Disable hand scaling.", false, false),
new NumericOption(L"default_hand_size", PATCHES_SECTION, CONFIG_FILE, L"Default Hand Size:", L"-1: default\n12200: PDA", -1, -1, INT_MAX),
new BooleanOption(L"sing_missed", PATCHES_SECTION, CONFIG_FILE, L"Sing Missed", L"Sing missed notes.", false, false),
new DropdownOption(L"force_mouth", PATCHES_SECTION, CONFIG_FILE, L"FORCE_MOUTH_NAME", L"FORCE_MOUTH_HINT", 0, std::vector<LPCWSTR>({ L"Default", L"Force PDA", L"Force FT" })),
new DropdownOption(L"force_expressions", PATCHES_SECTION, CONFIG_FILE, L"FORCE_EXPRESSIONS_NAME", L"FORCE_EXPRESSIONS_HINT", 0, std::vector<LPCWSTR>({ L"Default", L"Force PDA", L"Force FT" })),
new DropdownOption(L"force_look", PATCHES_SECTION, CONFIG_FILE, L"FORCE_LOOK_NAME", L"FORCE_LOOK_HINT", 0, std::vector<LPCWSTR>({ L"Default", L"Force PDA", L"Force FT" })),
new BooleanOption(L"no_hand_scaling", PATCHES_SECTION, CONFIG_FILE, L"NO_HAND_SCALING_NAME", L"NO_HAND_SCALING_HINT", false, false),
new NumericOption(L"default_hand_size", PATCHES_SECTION, CONFIG_FILE, L"DEFAULT_HAND_SIZE_NAME", L"DEFAULT_HAND_SIZE_HINT", -1, -1, INT_MAX),
new BooleanOption(L"sing_missed", PATCHES_SECTION, CONFIG_FILE, L"SING_MISSED_NAME", L"SING_MISSED_HINT", false, false),
new OptionMetaSeparator(),
new OptionMetaSpacer(8),
new BooleanOption(L"hide_volume", PATCHES_SECTION, CONFIG_FILE, L"Hide Volume Buttons", L"Hide the volume and SE control buttons.", false, false),
new BooleanOption(L"no_pv_ui", PATCHES_SECTION, CONFIG_FILE, L"Disable PV UI", L"Remove the photo controls during PV playback.", false, false),
new BooleanOption(L"hide_pv_watermark", PATCHES_SECTION, CONFIG_FILE, L"Hide PV Watermark", L"Hide the watermark that's usually shown in PV viewing mode.", false, false),
new DropdownOption(L"status_icons", PATCHES_SECTION, CONFIG_FILE, L"Top-Right Corner Icons:", L"Set the state of card reader and network status icons.", 3, std::vector<LPCWSTR>({ L"Default", L"Hidden", L"Error", L"OK", L"Partial OK" })),
new BooleanOption(L"no_lyrics", PATCHES_SECTION, CONFIG_FILE, L"Disable Lyrics", L"Disable showing lyrics.", false, false),
new BooleanOption(L"no_error", PATCHES_SECTION, CONFIG_FILE, L"Disable Error Banner", L"Disable the error banner on the attract screen.", true, false),
new BooleanOption(L"hide_freeplay", PATCHES_SECTION, CONFIG_FILE, L"Hide \"FREE PLAY\"/\"CREDIT(S)\"", L"Hide the \"FREE PLAY\"/\"CREDIT(S)\" text.", false, false),
new BooleanOption(L"pdloadertext", PATCHES_SECTION, CONFIG_FILE, L"PD Loader FREE PLAY", L"Show \"PD Loader\" instead of \"FREE PLAY\".", true, false),
new BooleanOption(L"no_timer", PATCHES_SECTION, CONFIG_FILE, L"Freeze Timer", L"Disable the timer.", true, false),
new BooleanOption(L"no_timer_sprite", PATCHES_SECTION, CONFIG_FILE, L"Disable Timer Sprite", L"Disable the timer sprite.", true, false),
new BooleanOption(L"no_message_bar", PATCHES_SECTION, CONFIG_FILE, L"Hide Message Bar", L"Hide the top message bar.", false, false),
new BooleanOption(L"no_stage_text", PATCHES_SECTION, CONFIG_FILE, L"Disable Stage Text", L"Disable Stage 1/2/Final.", false, false),
new BooleanOption(L"hide_volume", PATCHES_SECTION, CONFIG_FILE, L"HIDE_VOLUME_NAME", L"HIDE_VOLUME_HINT", false, false),
new BooleanOption(L"no_pv_ui", PATCHES_SECTION, CONFIG_FILE, L"NO_PV_UI_NAME", L"NO_PV_UI_HINT", false, false),
new BooleanOption(L"hide_pv_watermark", PATCHES_SECTION, CONFIG_FILE, L"HIDE_PV_WATERMARK_NAME", L"HIDE_PV_WATERMARK_HINT", false, false),
new DropdownOption(L"status_icons", PATCHES_SECTION, CONFIG_FILE, L"STATUS_ICONS_NAME", L"STATUS_ICONS_HINT", 3, std::vector<LPCWSTR>({ L"Default", L"Hidden", L"Error", L"OK", L"Partial OK" })),
new BooleanOption(L"no_lyrics", PATCHES_SECTION, CONFIG_FILE, L"NO_LYRICS_NAME", L"NO_LYRICS_HINT", false, false),
new BooleanOption(L"no_error", PATCHES_SECTION, CONFIG_FILE, L"NO_ERROR_NAME", L"NO_ERROR_HINT", true, false),
new BooleanOption(L"hide_freeplay", PATCHES_SECTION, CONFIG_FILE, L"HIDE_FREEPLAY_NAME", L"HIDE_FREEPLAY_HINT", false, false),
new BooleanOption(L"pdloadertext", PATCHES_SECTION, CONFIG_FILE, L"PDLOADERTEXT_NAME", L"PDLOADERTEXT_HINT", true, false),
new BooleanOption(L"no_timer", PATCHES_SECTION, CONFIG_FILE, L"NO_TIMER_NAME", L"NO_TIMER_HINT", true, false),
new BooleanOption(L"no_timer_sprite", PATCHES_SECTION, CONFIG_FILE, L"NO_TIMER_SPRITE_NAME", L"NO_TIMER_SPRITE_HINT", true, false),
new BooleanOption(L"no_message_bar", PATCHES_SECTION, CONFIG_FILE, L"NO_MESSAGE_BAR_NAME", L"NO_MESSAGE_BAR_HINT", false, false),
new BooleanOption(L"no_stage_text", PATCHES_SECTION, CONFIG_FILE, L"NO_STAGE_TEXT_NAME", L"NO_STAGE_TEXT_HINT", false, false),
new OptionMetaSeparator(),
new OptionMetaSpacer(8),
new BooleanOption(L"unlock_pseudo", PATCHES_SECTION, CONFIG_FILE, L"Unlock \"PSEUDO\" Modules (incomplete)", L"Lets you play any PV with any performer.\n(incomplete, recommended modules will default to Miku)", false, false),
new BooleanOption(L"card", PATCHES_SECTION, CONFIG_FILE, L"Unlock Card Menu (incomplete)", L"Enables the card menu.\n(incomplete, it doesn't bypass the card prompt)", false, false),
new BooleanOption(L"no_opd", PATCHES_SECTION, CONFIG_FILE, L"Disable Extended Data", L"AKA Skyth's \"No Osage Play Data\" patch.\n\nDisables baked physics in edits to save space.\nMay break physics in some edits.", false, false),
new BooleanOption(L"dwgui_scaling", PATCHES_SECTION, CONFIG_FILE, L"Scale Debug Windows", L"AKA somewhatlurker's dwgui patch.\n\nMakes debug windows bigger above HD internal resolution.", false, false),
new BooleanOption(L"freeplay", PATCHES_SECTION, CONFIG_FILE, L"FREE PLAY", L"Show \"FREE PLAY\" instead of \"CREDIT(S)\" and don't require credits.", true, false),
new BooleanOption(L"unlock_pseudo", PATCHES_SECTION, CONFIG_FILE, L"UNLOCK_PSEUDO_NAME", L"UNLOCK_PSEUDO_HINT", false, false),
new BooleanOption(L"card", PATCHES_SECTION, CONFIG_FILE, L"CARD_NAME", L"CARD_HINT", false, false),
new BooleanOption(L"no_opd", PATCHES_SECTION, CONFIG_FILE, L"NO_OPD_NAME", L"NO_OPD_HINT", false, false),
new BooleanOption(L"dwgui_scaling", PATCHES_SECTION, CONFIG_FILE, L"DWGUI_SCALING_NAME", L"DWGUI_SCALING_HINT", false, false),
new BooleanOption(L"freeplay", PATCHES_SECTION, CONFIG_FILE, L"FREEPLAY_NAME", L"FREEPLAY_HINT", true, false),
new OptionMetaSeparator(),
new OptionMetaSpacer(8),
new BooleanOption(L"FPS.Limit.LightMode", GRAPHICS_SECTION, CONFIG_FILE, L"Use Lightweight Limiter", L"Makes the FPS limiter use less CPU.\nMay have less consistent performance.", true, false),
new NumericOption(L"FPS.Limit", GRAPHICS_SECTION, CONFIG_FILE, L"FPS Limit:", L"Allows you to set a frame rate cap. Set to -1 to unlock the frame rate.", 60, -1, INT_MAX),
new NumericOption(L"frm.motion.rate", GRAPHICS_SECTION, CONFIG_FILE, L"FRM Motion Rate:", L"Sets the motion rate (fps) for the Frame Rate Manager component.\nLarger values should be smoother, but more CPU intensive and possibly buggier.", 300, 1, INT_MAX),
new BooleanOption(L"FPS.Limit.LightMode", GRAPHICS_SECTION, CONFIG_FILE, L"FPS.LIMIT.LIGHTMODE_NAME", L"FPS.LIMIT.LIGHTMODE_HINT", true, false),
new NumericOption(L"FPS.Limit", GRAPHICS_SECTION, CONFIG_FILE, L"FPS.LIMIT_NAME", L"FPS.LIMIT_HINT", 60, -1, INT_MAX),
new NumericOption(L"frm.motion.rate", GRAPHICS_SECTION, CONFIG_FILE, L"FRM.MOTION.RATE_NAME", L"FRM.MOTION.RATE_HINT", 300, 1, INT_MAX),
new OptionMetaSeparator(),
new OptionMetaSpacer(8),
new BooleanOption(L"autopause", KEYCONFIG_SECTION, KEYCONFIG_FILE, L"Pause Automatically", L"Pause when focus is lost.", true, true),
new BooleanOption(L"autopause", KEYCONFIG_SECTION, KEYCONFIG_FILE, L"AUTOPAUSE_NAME", L"AUTOPAUSE_HINT", true, true),
new OptionMetaSeparator(),
new OptionMetaSpacer(8),
new BooleanOption(L"rumble", KEYCONFIG_SECTION, KEYCONFIG_FILE, L"XInput Rumble", L"Enables rumble during chainslides.", true, true),
new NumericOption(L"xinput_preferred", KEYCONFIG_SECTION, KEYCONFIG_FILE, L"XInput Controller Num:", L"Sets the preferred XInput controller.\nIf unavailable, the next connected controller is used.", 0, 0, 3),
new BooleanOption(L"rumble", KEYCONFIG_SECTION, KEYCONFIG_FILE, L"RUMBLE_NAME", L"RUMBLE_HINT", true, true),
new NumericOption(L"xinput_preferred", KEYCONFIG_SECTION, KEYCONFIG_FILE, L"XINPUT_PREFERRED_NAME", L"XINPUT_PREFERRED_HINT", 0, 0, 3),
new OptionMetaSeparator(),
new OptionMetaSpacer(8),
new BooleanOption(L"hardware_slider", PATCHES_SECTION, CONFIG_FILE, L"Use Hardware Slider", L"Enable this if using a real arcade slider.\n(set the slider to port COM11)", false, false),
new BooleanOption(L"hardware_slider", PATCHES_SECTION, CONFIG_FILE, L"HARDWARE_SLIDER_NAME", L"HARDWARE_SLIDER_HINT", false, false),
new OptionMetaSeparator(),
new OptionMetaSpacer(8),
new BooleanOption(L"opengl_patch_a", LAUNCHER_SECTION, CONFIG_FILE, L"OpenGL Patch A", L"Ignores some OpenGL-related errors. Don't use both patches at the same time unless you're know what you're doing.", false, false),
new BooleanOption(L"opengl_patch_b", LAUNCHER_SECTION, CONFIG_FILE, L"OpenGL Patch B", L"Ignores some OpenGL-related errors. Don't use both patches at the same time unless you're know what you're doing.", false, false),
new BooleanOption(L"opengl_patch_a", LAUNCHER_SECTION, CONFIG_FILE, L"OPENGL_PATCH_A_NAME", L"OPENGL_PATCH_A_HINT", false, false),
new BooleanOption(L"opengl_patch_b", LAUNCHER_SECTION, CONFIG_FILE, L"OPENGL_PATCH_B_NAME", L"OPENGL_PATCH_B_HINT", false, false),
new OptionMetaSeparator(),
new OptionMetaSpacer(8),
//new BooleanOption(L"ignore_exe_checksum", PATCHES_SECTION, CONFIG_FILE, L"Ignore exe checksum", L"Use at your own risk.", false, false),
new BooleanOption(L"prevent_data_deletion", PATCHES_SECTION, CONFIG_FILE, L"Prevent Data Deletion", L"Prevents the game from deleting files.", false, false),
new StringOption(L"command_line", LAUNCHER_SECTION, CONFIG_FILE, L"Command Line:", L"Allows setting command line parameters for the game when using the launcher.\nDisabling the launcher will bypass this.", L"", false),
new BooleanOption(L"use_divahook_bat", LAUNCHER_SECTION, CONFIG_FILE, L"Use divahook.bat", L"Launches divahook.bat intead of diva.exe.", false, false),
//new BooleanOption(L"ignore_exe_checksum", PATCHES_SECTION, CONFIG_FILE, L"IGNORE_EXE_CHECKSUM_NAME", L"IGNORE_EXE_CHECKSUM_HINT", false, false),
new BooleanOption(L"prevent_data_deletion", PATCHES_SECTION, CONFIG_FILE, L"PREVENT_DATA_DELETION_NAME", L"PREVENT_DATA_DELETION_HINT", false, false),
new StringOption(L"command_line", LAUNCHER_SECTION, CONFIG_FILE, L"COMMAND_LINE_NAME", L"COMMAND_LINE_HINT", L"", false),
new BooleanOption(L"use_divahook_bat", LAUNCHER_SECTION, CONFIG_FILE, L"USE_DIVAHOOK_BAT_NAME", L"USE_DIVAHOOK_BAT_HINT", false, false),
new OptionMetaSeparator(),
new OptionMetaSpacer(8),
new BooleanOption(L"dark_launcher", LAUNCHER_SECTION, CONFIG_FILE, L"Dark Launcher", L"Sets the dark colour scheme in the launcher.", false, false),
//new BooleanOption(L"acrylic_blur", LAUNCHER_SECTION, CONFIG_FILE, L"Acrylic Blur", L"Enables acrylic blur in the launcher on Windows 10 20H2 or later.", false, false),
new BooleanOption(L"no_gpu_dialog", LAUNCHER_SECTION, CONFIG_FILE, L"Disable GPU Warning", L"Disables the warning dialog for unsupported GPUs.", false, false),
new BooleanOption(L"dark_launcher", LAUNCHER_SECTION, CONFIG_FILE, L"DARK_LAUNCHER_NAME", L"DARK_LAUNCHER_HINT", false, false),
//new BooleanOption(L"acrylic_blur", LAUNCHER_SECTION, CONFIG_FILE, L"ACRYLIC_BLUR_NAME", L"ACRYLIC_BLUR_HINT", false, false),
new BooleanOption(L"no_gpu_dialog", LAUNCHER_SECTION, CONFIG_FILE, L"NO_GPU_DIALOG_NAME", L"NO_GPU_DIALOG_HINT", false, false),
};
ConfigOptionBase* playerdataArray[] = {
new StringOption(L"player_name", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"Player Name:", L"Player name shown in game.", L"NO-NAME", true),
new StringOption(L"level_name", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"Level Name:", L"Level (plate) name shown in game.", L"忘れないでね私の声を", true),
new StringOption(L"player_name", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"PLAYER_NAME_NAME", L"PLAYER_NAME_HINT", L"NO-NAME", true),
new StringOption(L"level_name", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"LEVEL_NAME_NAME", L"LEVEL_NAME_HINT", L"忘れないでね私の声を", true),
new NumericOption(L"level_plate_id", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"Level Plate:", L"Sets the level background image (plate).", 0, 0, INT_MAX),
new NumericOption(L"level_plate_effect", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"Level Plate Effect:", L"Sets the effect on the level background image (plate).", -1, -1, 2),
new NumericOption(L"skin_equip ", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"Skin:", L"Sets the gameplay UI skin.", 0, 0, INT_MAX),
new NumericOption(L"level_plate_id", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"LEVEL_PLATE_ID_NAME", L"LEVEL_PLATE_ID_HINT", 0, 0, INT_MAX),
new NumericOption(L"level_plate_effect", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"LEVEL_PLATE_EFFECT_NAME", L"LEVEL_PLATE_EFFECT_HINT", -1, -1, 2),
new NumericOption(L"skin_equip ", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"SKIN_EQUIP_NAME", L"SKIN_EQUIP_HINT", 0, 0, INT_MAX),
new NumericOption(L"btn_se_equip", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"Button Sound:", L"Sets the sound effect for buttons.\n-1 = song default", -1, -1, INT_MAX),
new NumericOption(L"slide_se_equip", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"Slide Sound:", L"Sets the sound effect for slides.\n-1 = song default", -1, -1, INT_MAX),
new NumericOption(L"chainslide_se_equip", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"Chainslide Sound:", L"Sets the sound effect for chain slides.\n-1 = song default", -1, -1, INT_MAX),
new NumericOption(L"slidertouch_se_equip", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"Slider Touch Sound:", L"Sets the sound effect for touching the slider with no note.\n-1 = song default", -1, -1, INT_MAX),
new BooleanOption(L"act_toggle", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"Button SE", L"Enables button/slider sounds.", true, true),
new NumericOption(L"btn_se_equip", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"BTN_SE_EQUIP_NAME", L"BTN_SE_EQUIP_HINT", -1, -1, INT_MAX),
new NumericOption(L"slide_se_equip", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"SLIDE_SE_EQUIP_NAME", L"SLIDE_SE_EQUIP_HINT", -1, -1, INT_MAX),
new NumericOption(L"chainslide_se_equip", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"CHAINSLIDE_SE_EQUIP_NAME", L"CHAINSLIDE_SE_EQUIP_HINT", -1, -1, INT_MAX),
new NumericOption(L"slidertouch_se_equip", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"SLIDERTOUCH_SE_EQUIP_NAME", L"SLIDERTOUCH_SE_EQUIP_HINT", -1, -1, INT_MAX),
new BooleanOption(L"act_toggle", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"ACT_TOGGLE_NAME", L"ACT_TOGGLE_HINT", true, true),
new BooleanOption(L"border_great", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"Clear Border (Great)", L"Shows the clear border for a great rating on the progress bar.", true, true),
new BooleanOption(L"border_excellent", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"Clear Border (Excellent)", L"Shows the clear border for an excellent rating on the progress bar.", true, true),
new BooleanOption(L"border_rival", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"Clear Border (Rival)", L"Shows the clear border for beating your rival on the progress bar.", false, true),
new BooleanOption(L"border_great", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"BORDER_GREAT_NAME", L"BORDER_GREAT_HINT", true, true),
new BooleanOption(L"border_excellent", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"BORDER_EXCELLENT_NAME", L"BORDER_EXCELLENT_HINT", true, true),
new BooleanOption(L"border_rival", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"BORDER_RIVAL_NAME", L"BORDER_RIVAL_HINT", false, true),
new BooleanOption(L"use_card", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"Use Card", L"Enables IC card. This allows module selection.", false, true),
new BooleanOption(L"module_card_workaround", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"Module Selection Workaround", L"Allows module selection without card and tries to improve menu performance.\n(BETA)", true, true),
new BooleanOption(L"use_pv_module_equip ", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"Song Specific Modules", L"Allows song-specific module selection.", false, true),
new BooleanOption(L"use_pv_skin_equip ", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"Song Specific Skins", L"Allows song-specific skin settings.\nValues stored in skins.ini", false, true),
new BooleanOption(L"use_pv_sfx_equip ", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"Song Specific Sound Effects", L"Allows song-specific sound effect settings.\nValues stored in sfx.ini", false, true),
new BooleanOption(L"use_card", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"USE_CARD_NAME", L"USE_CARD_HINT", false, true),
new BooleanOption(L"module_card_workaround", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"MODULE_CARD_WORKAROUND_NAME", L"MODULE_CARD_WORKAROUND_HINT", true, true),
new BooleanOption(L"use_pv_module_equip ", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"USE_PV_MODULE_EQUIP_NAME", L"USE_PV_MODULE_EQUIP_HINT", false, true),
new BooleanOption(L"use_pv_skin_equip ", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"USE_PV_SKIN_EQUIP_NAME", L"USE_PV_SKIN_EQUIP_HINT", false, true),
new BooleanOption(L"use_pv_sfx_equip ", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"USE_PV_SFX_EQUIP_NAME", L"USE_PV_SFX_EQUIP_HINT", false, true),
new BooleanOption(L"gamemode_options", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"Game Modifiers", L"Allows use of game mode modifiers (hi-speed, hidden, and sudden).", true, true),
new BooleanOption(L"gamemode_options", PLAYERDATA_SECTION, PLAYERDATA_FILE, L"GAMEMODE_OPTIONS_NAME", L"GAMEMODE_OPTIONS_HINT", true, true),
};
ConfigOptionBase* componentsArray[] = {
new BooleanOption(L"input_emulator", COMPONENTS_SECTION, COMPONENTS_FILE, L"Input Emulator", L"Emulates input through keyboard and/or mouse.", false, true),
new BooleanOption(L"touch_slider_emulator", COMPONENTS_SECTION, COMPONENTS_FILE, L"Slider Emulator", L"Emulates slider through keyboard and/or mouse.", false, true),
new BooleanOption(L"touch_panel_emulator", COMPONENTS_SECTION, COMPONENTS_FILE, L"Touch Panel Emulator", L"Emulates touch panel through mouse.", false, true),
new BooleanOption(L"input_emulator", COMPONENTS_SECTION, COMPONENTS_FILE, L"INPUT_EMULATOR_NAME", L"INPUT_EMULATOR_HINT", false, true),
new BooleanOption(L"touch_slider_emulator", COMPONENTS_SECTION, COMPONENTS_FILE, L"TOUCH_SLIDER_EMULATOR_NAME", L"TOUCH_SLIDER_EMULATOR_HINT", false, true),
new BooleanOption(L"touch_panel_emulator", COMPONENTS_SECTION, COMPONENTS_FILE, L"TOUCH_PANEL_EMULATOR_NAME", L"TOUCH_PANEL_EMULATOR_HINT", false, true),
new BooleanOption(L"player_data_manager", COMPONENTS_SECTION, COMPONENTS_FILE, L"Player Data Manager", L"Loads user-defined values into the PlayerData struct.\nRequired for modules and game mode modifiers.", false, true),
new BooleanOption(L"player_data_manager", COMPONENTS_SECTION, COMPONENTS_FILE, L"PLAYER_DATA_MANAGER_NAME", L"PLAYER_DATA_MANAGER_HINT", false, true),
new BooleanOption(L"frame_rate_manager", COMPONENTS_SECTION, COMPONENTS_FILE, L"Frame Rate Manager", L"Adjusts animations to the correct speed at different frame rates.\nOnly needed when FPS isn't locked at 60.", false, true),
new BooleanOption(L"frame_rate_manager", COMPONENTS_SECTION, COMPONENTS_FILE, L"FRAME_RATE_MANAGER_NAME", L"FRAME_RATE_MANAGER_HINT", false, true),
new BooleanOption(L"fast_loader", COMPONENTS_SECTION, COMPONENTS_FILE, L"Fast Loader", L"Skip or speed up unnecessary loading steps.", false, true),
new BooleanOption(L"fast_loader", COMPONENTS_SECTION, COMPONENTS_FILE, L"FAST_LOADER_NAME", L"FAST_LOADER_HINT", false, true),
new NumericOption(L"fast_loader_speed", COMPONENTS_SECTION, COMPONENTS_FILE, L"Fast Loader Speed", L"Set this to 4 or less when playing online.\nDefault: 39", 39, 2, 1024),
new NumericOption(L"fast_loader_speed", COMPONENTS_SECTION, COMPONENTS_FILE, L"FAST_LOADER_SPEED_NAME", L"FAST_LOADER_SPEED_HINT", 39, 2, 1024),
new BooleanOption(L"camera_controller", COMPONENTS_SECTION, COMPONENTS_FILE, L"Camera Controller", L"Enables freecam (toggled using F3).\nWASD to move, SPACE/CTRL for up/down, Q/R to rotate, R/F for zoom.\nHolding SHIFT/ALT changes control speed.", false, true),
new BooleanOption(L"camera_controller", COMPONENTS_SECTION, COMPONENTS_FILE, L"CAMERA_CONTROLLER_NAME", L"CAMERA_CONTROLLER_HINT", false, true),
new BooleanOption(L"scale_component", COMPONENTS_SECTION, COMPONENTS_FILE, L"Scale Component", L"Scales the graphics output framebuffer to fill the screen/window.", false, true),
new BooleanOption(L"scale_component", COMPONENTS_SECTION, COMPONENTS_FILE, L"SCALE_COMPONENT_NAME", L"SCALE_COMPONENT_HINT", false, true),
new BooleanOption(L"debug_component", COMPONENTS_SECTION, COMPONENTS_FILE, L"Debug Component", L"Allows for changing game state (F4-F8 keys), using dev GUI and tests, and speeding up 2d animations/menus (hold SHIFT+TAB).", false, true),
new BooleanOption(L"debug_component", COMPONENTS_SECTION, COMPONENTS_FILE, L"DEBUG_COMPONENT_NAME", L"DEBUG_COMPONENT_HINT", false, true),
new BooleanOption(L"target_inspector", COMPONENTS_SECTION, COMPONENTS_FILE, L"Target Inspector", L"Enables hold transfers.", false, true),
new BooleanOption(L"target_inspector", COMPONENTS_SECTION, COMPONENTS_FILE, L"TARGET_INSPECTOR_NAME", L"TARGET_INSPECTOR_HINT", false, true),
new BooleanOption(L"score_saver", COMPONENTS_SECTION, COMPONENTS_FILE, L"Score Saver", L"Saves high scores to plugins/scores.ini.", false, true),
new BooleanOption(L"score_saver", COMPONENTS_SECTION, COMPONENTS_FILE, L"SCORE_SAVER_NAME", L"SCORE_SAVER_HINT", false, true),
new BooleanOption(L"pause", COMPONENTS_SECTION, COMPONENTS_FILE, L"Pause", L"Adds a pause menu.", false, true),
new BooleanOption(L"pause", COMPONENTS_SECTION, COMPONENTS_FILE, L"PAUSE_NAME", L"PAUSE_HINT", false, true),
};
bool IsLineInFile(LPCSTR searchLine, LPCWSTR fileName)
@@ -0,0 +1,18 @@
#include <iostream>
using namespace System::Resources;
using namespace System::Reflection;
using namespace System;
using namespace System::IO;
ref class i18n
{
public:
static ResourceManager^ ResMgr = gcnew ResourceManager("Launcher.Resources", i18n::typeid->Assembly);
static String^ GetStringFallback(String^ name) {
String^ result = ResMgr->GetString(name);
return result != nullptr ? result : name;
}
};
+135 -298
View File
@@ -236,9 +236,9 @@ namespace Launcher {
{
this->labelGPU->Text = "Wine " + wineVersion + " (remember to disable movies!)\n";
}
else this->labelGPU->Text = "GPU Info:\n";
this->labelGPU->Text += vendor + " " + renderer + "\n";
this->labelGPU->Text += "OpenGL: " + version + "\n";
else this->labelGPU->Text = i18n::GetStringFallback("GPU_INFO_NAME") + "\n";
this->labelGPU->Text += i18n::GetStringFallback(vendor + " " + renderer + "\n");
this->labelGPU->Text += i18n::GetStringFallback("OpenGL: " + version + "\n");
int linkStart = this->labelGPU->Text->Length;
bool showGpuDialog = false;
@@ -253,82 +253,82 @@ namespace Launcher {
if (hasNovidia)
{
this->labelGPU->Text += "Issues: AMD GPU support is unofficial.";
GPUIssueText = "AMD GPUs are not supported without mods.\nThe PD Loader AMDPack seems to be installed, but please keep in mind that it may have issues.";
this->labelGPU->Text += i18n::GetStringFallback("GPU_AMD_NOVIDIA_NAME");
GPUIssueText = i18n::GetStringFallback("GPU_AMD_NOVIDIA_HINT");
this->labelGPU->LinkColor = System::Drawing::Color::Yellow;
}
else
{
this->labelGPU->Text += "Issues: Mods needed for AMD compatibility!";
GPUIssueText = "AMD GPUs are not supported without mods.\nThe PD Loader AMDPack can be used to make 3D rendering work. Please download it and follow the included instructions.\n\nIf you have a laptop with an NVIDIA GPU and wish to use it instead of the detected GPU, you may need to set diva.exe to use it in Windows settings or NVIDIA Control Panel.";
this->labelGPU->Text += i18n::GetStringFallback("GPU_AMD_NAME");
GPUIssueText = i18n::GetStringFallback("GPU_AMD_HINT");
this->labelGPU->LinkColor = System::Drawing::Color::Red;
showGpuDialog = true;
}
}
else if (!vendor->Contains("NVIDIA"))
{
this->labelGPU->Text += "Issues: UNSUPPORTED GPU!";
GPUIssueText = "Your graphics card is not supported. Only NVIDIA GPUs are recommended. (though AMD ones can be used with mods)\nPlease use a GTX 600 series or later NVIDIA GPU.\n\nIf you have a laptop with an NVIDIA GPU and wish to use it instead of the detected GPU, you may need to set diva.exe to use it in Windows settings or NVIDIA Control Panel.\n\nOwners of other GPUs may be able to run the game using plugins or mods, but 3D graphics will probably not work.";
this->labelGPU->Text += i18n::GetStringFallback("GPU_UNSUPPORTED_NAME");
GPUIssueText = i18n::GetStringFallback("GPU_UNSUPPORTED_HINT");
this->labelGPU->LinkColor = System::Drawing::Color::Red;
showGpuDialog = true;
}
else if (gpuModel->StartsWith("GA")) // unconfirmed??
{
this->labelGPU->Text += "Issues: Ampere GPU detected! Unknown issues.\n(Click for more information)";
GPUIssueText = "Ampere GPUs have not been tested yet. On the previous generation Turing GPUs (GTX 16xx/RTX 20xx), some important character shaders have issues resulting in lines/noise.\nPlease make sure the ShaderPatch plugin is enabled and report any further issues to the developers.";
this->labelGPU->Text += i18n::GetStringFallback("GPU_GA_NAME");
GPUIssueText = i18n::GetStringFallback("GPU_GA_HINT");
this->labelGPU->LinkColor = System::Drawing::Color::Yellow;
}
else if (gpuModel->StartsWith("TU"))
{
this->labelGPU->Text += "Issues: Turing GPU detected! Possible noise.\n(Click for more information)";
GPUIssueText = "On Turing GPUs (GTX 16xx/RTX 20xx), some important character shaders have issues resulting in lines/noise.\nPlease make sure the ShaderPatch plugin is enabled.";
this->labelGPU->Text += i18n::GetStringFallback("GPU_TU_NAME");
GPUIssueText = i18n::GetStringFallback("GPU_TU_HINT");
this->labelGPU->LinkColor = System::Drawing::Color::Yellow;
}
else if (gpuModel->StartsWith("GM") || gpuModel->StartsWith("GP") || gpuModel->StartsWith("GV"))
{
this->labelGPU->Text += "Issues: May have minor noise on some stages.\n(Click for more information)";
GPUIssueText = "On Maxwell GPUs (~GTX 900) or newer, some minor stage shaders create noise.\nPlease make sure the ShaderPatch plugin is enabled.";
this->labelGPU->Text += i18n::GetStringFallback("GPU_GM_NEWER_NAME");
GPUIssueText = i18n::GetStringFallback("GPU_GM_NEWER_HINT");
this->labelGPU->LinkColor = System::Drawing::Color::Teal;
}
else if (gpuModel->StartsWith("GK"))
{
this->labelGPU->Text += "Issues: None.";
GPUIssueText = "Your GPU should have no issues running the game.";
this->labelGPU->Text += i18n::GetStringFallback("GPU_GK_NAME");
GPUIssueText = i18n::GetStringFallback("GPU_GK_HINT");
this->labelGPU->LinkColor = System::Drawing::Color::LightBlue;
}
else if (gpuModel->StartsWith("GF"))
{
if (version[0] < '4')
{
this->labelGPU->Text += "Issues: Driver too old.";
GPUIssueText = "Your GPU should be able to run the game, but it looks like your OpenGL version is too old.\nA driver update should fix this.";
this->labelGPU->Text += i18n::GetStringFallback("GPU_GF_DRIVER_OLD_NAME");
GPUIssueText = i18n::GetStringFallback("GPU_GF_DRIVER_OLD_HINT");
this->labelGPU->LinkColor = System::Drawing::Color::Orange;
showGpuDialog = true;
}
else
{
this->labelGPU->Text += "Issues: No known issues.";
GPUIssueText = "Your GPU should have no issues running the game, but it is older than the GPU the game was originally designed for (GTX 650 Ti).\nThere may be some issues with graphics.\nPlease report any issues so that they can be analysed and potentially fixed.";
this->labelGPU->Text += i18n::GetStringFallback("GPU_GF_NAME");
GPUIssueText = i18n::GetStringFallback("GPU_GF_HINT");
this->labelGPU->LinkColor = System::Drawing::Color::Teal;
}
}
else if (version[0] >= '4' && gpuModel->Length > 0 && !gpuModel->StartsWith("Unk") && !gpuModel->StartsWith("Oth"))
{
this->labelGPU->Text += "Issues: GPU may be too new.\n(Click for more information)";
GPUIssueText = "It looks like your GPU may be too new. Only up to Turing (GTX 16xx/RTX 20xx) is currently supported.\nGood news: the game should be capable of running, but shader patches (probably needed) may not support it yet.\nYou will likely see lines/noise on important character shaders and some minor stage shaders.\nPlease report any issues so that ShaderPatch can be updated.";
this->labelGPU->Text += i18n::GetStringFallback("GPU_TOO_NEW_NAME");
GPUIssueText = i18n::GetStringFallback("GPU_TOO_NEW_HINT");
this->labelGPU->LinkColor = System::Drawing::Color::Orange;
}
else if (gpuModel->StartsWith("G") || gpuModel->StartsWith("NV") || gpuModel->StartsWith("NB") || gpuModel->StartsWith("N10") || gpuModel->StartsWith("MCP"))
{
this->labelGPU->Text += "Issues: GPU too old! 3D rendering might be broken.\n(Click for more information)";
GPUIssueText = "Your GPU is very old and does not support rendering techniques used by the game.\nYou may be able to play, but graphics will likely have major issues.\nPlease upgrade to a GTX 600 series or later GPU.";
this->labelGPU->Text += i18n::GetStringFallback("GPU_OLD_NAME");
GPUIssueText = i18n::GetStringFallback("GPU_OLD_HINT");
this->labelGPU->LinkColor = System::Drawing::Color::Orange;
showGpuDialog = true;
}
else //if (gpuModel->Length == 0 || gpuModel->StartsWith("Unk") || gpuModel->StartsWith("Oth"))
{
this->labelGPU->Text += "Issues: Unable to detect GPU architecture.\n(Click for more information)";
GPUIssueText = "It looks like you have an NVIDIA GPU, but something went wrong while trying to determine your GPU's architecture (type).\nThis may be a caused by a bug, but it probably indicates potential issues.\nPlease make sure you have a GTX 600 series or later GPU. (GTX 400 series or later should also work)";
this->labelGPU->Text += i18n::GetStringFallback("GPU_UNKNOWN_NAME");
GPUIssueText = i18n::GetStringFallback("GPU_UNKNOWN_HINT");
this->labelGPU->LinkColor = System::Drawing::Color::Orange;
showGpuDialog = true;
}
@@ -338,7 +338,7 @@ namespace Launcher {
this->labelGPU->LinkArea = System::Windows::Forms::LinkArea(linkStart, linkEnd);
if (showGpuDialog && !nNoGPUDialog)
SkinnedMessageBox::Show(this, GPUIssueText + "\n\nYou can disable this message from the options tab.", "PD Launcher", MessageBoxButtons::OK, MessageBoxIcon::Warning);
SkinnedMessageBox::Show(this, GPUIssueText + "\n\n"+ i18n::GetStringFallback("SHOW_GPU_DIALOG_HINT"), "PD Launcher", MessageBoxButtons::OK, MessageBoxIcon::Warning);
}
protected:
@@ -370,7 +370,10 @@ namespace Launcher {
void updateLagCompMsec()
{
this->groupBox_Lag->Text = "Lag Compensation (" + this->trackBar_LagCompensation->Value + " msec)";
if (this->groupBox_Lag->Tag == nullptr) {
this->groupBox_Lag->Tag = this->groupBox_Lag->Text;
}
this->groupBox_Lag->Text = this->groupBox_Lag->Tag + "(" + this->trackBar_LagCompensation->Value + " msec)";
}
void updateStyle()
@@ -639,52 +642,40 @@ private: System::Windows::Forms::LinkLabel^ linkLabel_Console;
//
// button_Launch
//
resources->ApplyResources(this->button_Launch, L"button_Launch");
this->button_Launch->BackColor = System::Drawing::Color::White;
this->button_Launch->FlatAppearance->BorderColor = System::Drawing::SystemColors::Control;
this->button_Launch->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
this->button_Launch->Location = System::Drawing::Point(172, 409);
this->button_Launch->Name = L"button_Launch";
this->button_Launch->Size = System::Drawing::Size(217, 23);
this->button_Launch->TabIndex = 20;
this->button_Launch->Text = L"Launch";
this->toolTip1->SetToolTip(this->button_Launch, resources->GetString(L"button_Launch.ToolTip"));
this->button_Launch->UseVisualStyleBackColor = false;
this->button_Launch->Click += gcnew System::EventHandler(this, &ui::Button_Launch_Click);
//
// groupBox_ScreenRes
//
resources->ApplyResources(this->groupBox_ScreenRes, L"groupBox_ScreenRes");
this->groupBox_ScreenRes->Controls->Add(this->panel_ScreenRes);
this->groupBox_ScreenRes->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
this->groupBox_ScreenRes->Location = System::Drawing::Point(5, 6);
this->groupBox_ScreenRes->Name = L"groupBox_ScreenRes";
this->groupBox_ScreenRes->Size = System::Drawing::Size(263, 120);
this->groupBox_ScreenRes->TabIndex = 10;
this->groupBox_ScreenRes->TabStop = false;
this->groupBox_ScreenRes->Text = L"Screen Resolution";
this->toolTip1->SetToolTip(this->groupBox_ScreenRes, resources->GetString(L"groupBox_ScreenRes.ToolTip"));
//
// panel_ScreenRes
//
this->panel_ScreenRes->AutoScroll = true;
resources->ApplyResources(this->panel_ScreenRes, L"panel_ScreenRes");
this->panel_ScreenRes->Controls->Add(this->checkBox_nofsopt);
this->panel_ScreenRes->Location = System::Drawing::Point(5, 19);
this->panel_ScreenRes->Name = L"panel_ScreenRes";
this->panel_ScreenRes->Size = System::Drawing::Size(253, 99);
this->panel_ScreenRes->TabIndex = 0;
this->toolTip1->SetToolTip(this->panel_ScreenRes, resources->GetString(L"panel_ScreenRes.ToolTip"));
//
// checkBox_nofsopt
//
this->checkBox_nofsopt->AutoSize = true;
this->checkBox_nofsopt->Location = System::Drawing::Point(14, 77);
this->checkBox_nofsopt->Margin = System::Windows::Forms::Padding(2);
resources->ApplyResources(this->checkBox_nofsopt, L"checkBox_nofsopt");
this->checkBox_nofsopt->Name = L"checkBox_nofsopt";
this->checkBox_nofsopt->Size = System::Drawing::Size(177, 17);
this->checkBox_nofsopt->TabIndex = 0;
this->checkBox_nofsopt->Text = L"Disable Fullscreen Optimizations";
this->toolTip1->SetToolTip(this->checkBox_nofsopt, L"Disables Windows 10/11 fullscreen optimizations, which can cause issues with scre"
L"enshots and/or framerate.");
this->toolTip1->SetToolTip(this->checkBox_nofsopt, resources->GetString(L"checkBox_nofsopt.ToolTip"));
this->checkBox_nofsopt->UseVisualStyleBackColor = true;
//
// tabControl
//
resources->ApplyResources(this->tabControl, L"tabControl");
this->tabControl->Controls->Add(this->tabPage_Resolution);
this->tabControl->Controls->Add(this->tabPage_Patches);
this->tabControl->Controls->Add(this->tabPage_Playerdata);
@@ -693,16 +684,14 @@ private: System::Windows::Forms::LinkLabel^ linkLabel_Console;
this->tabControl->Controls->Add(this->tabPage_Modpacks);
this->tabControl->Controls->Add(this->tabPage_Credits);
this->tabControl->Controls->Add(this->tabPage_Update);
this->tabControl->Location = System::Drawing::Point(0, 0);
this->tabControl->Name = L"tabControl";
this->tabControl->SelectedIndex = 0;
this->tabControl->Size = System::Drawing::Size(560, 404);
this->tabControl->TabIndex = 10;
this->toolTip1->SetToolTip(this->tabControl, resources->GetString(L"tabControl.ToolTip"));
//
// tabPage_Resolution
//
resources->ApplyResources(this->tabPage_Resolution, L"tabPage_Resolution");
this->tabPage_Resolution->BackColor = System::Drawing::Color::White;
this->tabPage_Resolution->BackgroundImageLayout = System::Windows::Forms::ImageLayout::Stretch;
this->tabPage_Resolution->Controls->Add(this->groupBox_Lag);
this->tabPage_Resolution->Controls->Add(this->groupBox_Details);
this->tabPage_Resolution->Controls->Add(this->labelGPU);
@@ -710,192 +699,149 @@ private: System::Windows::Forms::LinkLabel^ linkLabel_Console;
this->tabPage_Resolution->Controls->Add(this->groupBox_ScreenRes);
this->tabPage_Resolution->ForeColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(64)),
static_cast<System::Int32>(static_cast<System::Byte>(64)), static_cast<System::Int32>(static_cast<System::Byte>(64)));
this->tabPage_Resolution->Location = System::Drawing::Point(4, 22);
this->tabPage_Resolution->Name = L"tabPage_Resolution";
this->tabPage_Resolution->Padding = System::Windows::Forms::Padding(3);
this->tabPage_Resolution->Size = System::Drawing::Size(552, 378);
this->tabPage_Resolution->TabIndex = 0;
this->tabPage_Resolution->Text = L"Graphics";
this->toolTip1->SetToolTip(this->tabPage_Resolution, resources->GetString(L"tabPage_Resolution.ToolTip"));
//
// groupBox_Lag
//
resources->ApplyResources(this->groupBox_Lag, L"groupBox_Lag");
this->groupBox_Lag->Controls->Add(this->trackBar_LagCompensation);
this->groupBox_Lag->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
this->groupBox_Lag->Location = System::Drawing::Point(5, 303);
this->groupBox_Lag->Name = L"groupBox_Lag";
this->groupBox_Lag->Size = System::Drawing::Size(263, 69);
this->groupBox_Lag->TabIndex = 21;
this->groupBox_Lag->TabStop = false;
this->groupBox_Lag->Text = L"Lag Compensation";
this->toolTip1->SetToolTip(this->groupBox_Lag, resources->GetString(L"groupBox_Lag.ToolTip"));
//
// trackBar_LagCompensation
//
resources->ApplyResources(this->trackBar_LagCompensation, L"trackBar_LagCompensation");
this->trackBar_LagCompensation->LargeChange = 1;
this->trackBar_LagCompensation->Location = System::Drawing::Point(7, 20);
this->trackBar_LagCompensation->Maximum = 500;
this->trackBar_LagCompensation->Name = L"trackBar_LagCompensation";
this->trackBar_LagCompensation->Size = System::Drawing::Size(250, 45);
this->trackBar_LagCompensation->TabIndex = 0;
this->trackBar_LagCompensation->TickStyle = System::Windows::Forms::TickStyle::None;
this->toolTip1->SetToolTip(this->trackBar_LagCompensation, resources->GetString(L"trackBar_LagCompensation.ToolTip"));
this->trackBar_LagCompensation->ValueChanged += gcnew System::EventHandler(this, &ui::trackBar_LagCompensation_ValueChanged);
//
// groupBox_Details
//
resources->ApplyResources(this->groupBox_Details, L"groupBox_Details");
this->groupBox_Details->Controls->Add(this->panel_Details);
this->groupBox_Details->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
this->groupBox_Details->Location = System::Drawing::Point(274, 6);
this->groupBox_Details->Name = L"groupBox_Details";
this->groupBox_Details->Size = System::Drawing::Size(272, 366);
this->groupBox_Details->TabIndex = 11;
this->groupBox_Details->TabStop = false;
this->groupBox_Details->Text = L"Details";
this->toolTip1->SetToolTip(this->groupBox_Details, resources->GetString(L"groupBox_Details.ToolTip"));
//
// panel_Details
//
this->panel_Details->AutoScroll = true;
this->panel_Details->Location = System::Drawing::Point(5, 19);
resources->ApplyResources(this->panel_Details, L"panel_Details");
this->panel_Details->Name = L"panel_Details";
this->panel_Details->Size = System::Drawing::Size(261, 341);
this->panel_Details->TabIndex = 0;
this->toolTip1->SetToolTip(this->panel_Details, resources->GetString(L"panel_Details.ToolTip"));
//
// labelGPU
//
this->labelGPU->AutoSize = true;
resources->ApplyResources(this->labelGPU, L"labelGPU");
this->labelGPU->BackColor = System::Drawing::Color::Transparent;
this->labelGPU->ForeColor = System::Drawing::Color::Black;
this->labelGPU->Location = System::Drawing::Point(5, 213);
this->labelGPU->Margin = System::Windows::Forms::Padding(2, 0, 2, 0);
this->labelGPU->MinimumSize = System::Drawing::Size(263, 13);
this->labelGPU->Name = L"labelGPU";
this->labelGPU->Size = System::Drawing::Size(263, 13);
this->labelGPU->TabIndex = 21;
this->labelGPU->TextAlign = System::Drawing::ContentAlignment::MiddleLeft;
this->toolTip1->SetToolTip(this->labelGPU, resources->GetString(L"labelGPU.ToolTip"));
//
// groupBox_InternalRes
//
resources->ApplyResources(this->groupBox_InternalRes, L"groupBox_InternalRes");
this->groupBox_InternalRes->Controls->Add(this->panel_IntRes);
this->groupBox_InternalRes->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
this->groupBox_InternalRes->Location = System::Drawing::Point(5, 127);
this->groupBox_InternalRes->Name = L"groupBox_InternalRes";
this->groupBox_InternalRes->Size = System::Drawing::Size(263, 83);
this->groupBox_InternalRes->TabIndex = 20;
this->groupBox_InternalRes->TabStop = false;
this->groupBox_InternalRes->Text = L"Internal Resolution (Quality)";
this->toolTip1->SetToolTip(this->groupBox_InternalRes, resources->GetString(L"groupBox_InternalRes.ToolTip"));
//
// panel_IntRes
//
this->panel_IntRes->AutoScroll = true;
this->panel_IntRes->Location = System::Drawing::Point(5, 19);
resources->ApplyResources(this->panel_IntRes, L"panel_IntRes");
this->panel_IntRes->Name = L"panel_IntRes";
this->panel_IntRes->Size = System::Drawing::Size(253, 59);
this->panel_IntRes->TabIndex = 1;
this->toolTip1->SetToolTip(this->panel_IntRes, resources->GetString(L"panel_IntRes.ToolTip"));
//
// tabPage_Patches
//
resources->ApplyResources(this->tabPage_Patches, L"tabPage_Patches");
this->tabPage_Patches->BackColor = System::Drawing::Color::White;
this->tabPage_Patches->Controls->Add(this->panel_Patches);
this->tabPage_Patches->ForeColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(64)), static_cast<System::Int32>(static_cast<System::Byte>(64)),
static_cast<System::Int32>(static_cast<System::Byte>(64)));
this->tabPage_Patches->Location = System::Drawing::Point(4, 22);
this->tabPage_Patches->Name = L"tabPage_Patches";
this->tabPage_Patches->Size = System::Drawing::Size(552, 378);
this->tabPage_Patches->TabIndex = 1;
this->tabPage_Patches->Text = L"Options";
this->toolTip1->SetToolTip(this->tabPage_Patches, resources->GetString(L"tabPage_Patches.ToolTip"));
//
// panel_Patches
//
this->panel_Patches->AutoScroll = true;
this->panel_Patches->Location = System::Drawing::Point(0, 0);
resources->ApplyResources(this->panel_Patches, L"panel_Patches");
this->panel_Patches->Name = L"panel_Patches";
this->panel_Patches->Size = System::Drawing::Size(552, 378);
this->panel_Patches->TabIndex = 9;
this->toolTip1->SetToolTip(this->panel_Patches, resources->GetString(L"panel_Patches.ToolTip"));
//
// tabPage_Playerdata
//
resources->ApplyResources(this->tabPage_Playerdata, L"tabPage_Playerdata");
this->tabPage_Playerdata->BackColor = System::Drawing::Color::White;
this->tabPage_Playerdata->Controls->Add(this->panel_Playerdata);
this->tabPage_Playerdata->ForeColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(64)),
static_cast<System::Int32>(static_cast<System::Byte>(64)), static_cast<System::Int32>(static_cast<System::Byte>(64)));
this->tabPage_Playerdata->Location = System::Drawing::Point(4, 22);
this->tabPage_Playerdata->Name = L"tabPage_Playerdata";
this->tabPage_Playerdata->Size = System::Drawing::Size(552, 378);
this->tabPage_Playerdata->TabIndex = 3;
this->tabPage_Playerdata->Text = L"Player";
this->toolTip1->SetToolTip(this->tabPage_Playerdata, resources->GetString(L"tabPage_Playerdata.ToolTip"));
//
// panel_Playerdata
//
this->panel_Playerdata->AutoScroll = true;
this->panel_Playerdata->Location = System::Drawing::Point(0, 0);
resources->ApplyResources(this->panel_Playerdata, L"panel_Playerdata");
this->panel_Playerdata->Name = L"panel_Playerdata";
this->panel_Playerdata->Size = System::Drawing::Size(552, 378);
this->panel_Playerdata->TabIndex = 1;
this->toolTip1->SetToolTip(this->panel_Playerdata, resources->GetString(L"panel_Playerdata.ToolTip"));
//
// tabPage_Components
//
resources->ApplyResources(this->tabPage_Components, L"tabPage_Components");
this->tabPage_Components->BackColor = System::Drawing::Color::White;
this->tabPage_Components->Controls->Add(this->linkLabel_Console);
this->tabPage_Components->Controls->Add(this->panel_Components);
this->tabPage_Components->ForeColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(64)),
static_cast<System::Int32>(static_cast<System::Byte>(64)), static_cast<System::Int32>(static_cast<System::Byte>(64)));
this->tabPage_Components->Location = System::Drawing::Point(4, 22);
this->tabPage_Components->Name = L"tabPage_Components";
this->tabPage_Components->Padding = System::Windows::Forms::Padding(3);
this->tabPage_Components->Size = System::Drawing::Size(552, 378);
this->tabPage_Components->TabIndex = 2;
this->tabPage_Components->Text = L"Components";
this->toolTip1->SetToolTip(this->tabPage_Components, resources->GetString(L"tabPage_Components.ToolTip"));
//
// linkLabel_Console
//
this->linkLabel_Console->AutoSize = true;
this->linkLabel_Console->Location = System::Drawing::Point(504, 362);
resources->ApplyResources(this->linkLabel_Console, L"linkLabel_Console");
this->linkLabel_Console->Name = L"linkLabel_Console";
this->linkLabel_Console->Size = System::Drawing::Size(45, 13);
this->linkLabel_Console->TabIndex = 1;
this->linkLabel_Console->TabStop = true;
this->linkLabel_Console->Text = L"Console";
this->linkLabel_Console->TextAlign = System::Drawing::ContentAlignment::BottomRight;
this->toolTip1->SetToolTip(this->linkLabel_Console, resources->GetString(L"linkLabel_Console.ToolTip"));
this->linkLabel_Console->LinkClicked += gcnew System::Windows::Forms::LinkLabelLinkClickedEventHandler(this, &ui::linkLabel_Console_LinkClicked);
//
// panel_Components
//
this->panel_Components->AutoScroll = true;
this->panel_Components->Location = System::Drawing::Point(0, 0);
resources->ApplyResources(this->panel_Components, L"panel_Components");
this->panel_Components->Name = L"panel_Components";
this->panel_Components->Size = System::Drawing::Size(276, 378);
this->panel_Components->TabIndex = 0;
this->toolTip1->SetToolTip(this->panel_Components, resources->GetString(L"panel_Components.ToolTip"));
//
// tabPage_Plugins
//
resources->ApplyResources(this->tabPage_Plugins, L"tabPage_Plugins");
this->tabPage_Plugins->BackColor = System::Drawing::Color::White;
this->tabPage_Plugins->Controls->Add(this->panel_Custom);
this->tabPage_Plugins->Controls->Add(this->panel_Plugins);
this->tabPage_Plugins->ForeColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(64)), static_cast<System::Int32>(static_cast<System::Byte>(64)),
static_cast<System::Int32>(static_cast<System::Byte>(64)));
this->tabPage_Plugins->Location = System::Drawing::Point(4, 22);
this->tabPage_Plugins->Name = L"tabPage_Plugins";
this->tabPage_Plugins->Padding = System::Windows::Forms::Padding(3);
this->tabPage_Plugins->Size = System::Drawing::Size(552, 378);
this->tabPage_Plugins->TabIndex = 3;
this->tabPage_Plugins->Text = L"Plugins and Patches";
this->toolTip1->SetToolTip(this->tabPage_Plugins, resources->GetString(L"tabPage_Plugins.ToolTip"));
//
// panel_Custom
//
this->panel_Custom->AutoScroll = true;
this->panel_Custom->Location = System::Drawing::Point(276, 0);
resources->ApplyResources(this->panel_Custom, L"panel_Custom");
this->panel_Custom->Name = L"panel_Custom";
this->panel_Custom->Size = System::Drawing::Size(276, 378);
this->panel_Custom->TabIndex = 3;
this->toolTip1->SetToolTip(this->panel_Custom, resources->GetString(L"panel_Custom.ToolTip"));
//
// panel_Plugins
//
this->panel_Plugins->AutoScroll = true;
this->panel_Plugins->Location = System::Drawing::Point(0, 0);
resources->ApplyResources(this->panel_Plugins, L"panel_Plugins");
this->panel_Plugins->Name = L"panel_Plugins";
this->panel_Plugins->Size = System::Drawing::Size(276, 378);
this->panel_Plugins->TabIndex = 0;
this->toolTip1->SetToolTip(this->panel_Plugins, resources->GetString(L"panel_Plugins.ToolTip"));
//
// tabPage_Modpacks
//
resources->ApplyResources(this->tabPage_Modpacks, L"tabPage_Modpacks");
this->tabPage_Modpacks->Controls->Add(this->button_ModRename);
this->tabPage_Modpacks->Controls->Add(this->button_ModRescan);
this->tabPage_Modpacks->Controls->Add(this->button_ModFiles);
@@ -904,140 +850,97 @@ private: System::Windows::Forms::LinkLabel^ linkLabel_Console;
this->tabPage_Modpacks->Controls->Add(this->button_ModClone);
this->tabPage_Modpacks->Controls->Add(this->button_ModSetActive);
this->tabPage_Modpacks->Controls->Add(this->listBox_Mods);
this->tabPage_Modpacks->Location = System::Drawing::Point(4, 22);
this->tabPage_Modpacks->Margin = System::Windows::Forms::Padding(2);
this->tabPage_Modpacks->Name = L"tabPage_Modpacks";
this->tabPage_Modpacks->Padding = System::Windows::Forms::Padding(2);
this->tabPage_Modpacks->Size = System::Drawing::Size(552, 378);
this->tabPage_Modpacks->TabIndex = 7;
this->tabPage_Modpacks->Text = L"Modpacks";
this->toolTip1->SetToolTip(this->tabPage_Modpacks, resources->GetString(L"tabPage_Modpacks.ToolTip"));
this->tabPage_Modpacks->UseVisualStyleBackColor = true;
this->tabPage_Modpacks->Enter += gcnew System::EventHandler(this, &ui::tabPage_Modpacks_Enter);
//
// button_ModRename
//
this->button_ModRename->Enabled = false;
this->button_ModRename->Location = System::Drawing::Point(279, 357);
this->button_ModRename->Margin = System::Windows::Forms::Padding(2);
resources->ApplyResources(this->button_ModRename, L"button_ModRename");
this->button_ModRename->Name = L"button_ModRename";
this->button_ModRename->Size = System::Drawing::Size(65, 21);
this->button_ModRename->TabIndex = 8;
this->button_ModRename->Text = L"Rename";
this->toolTip1->SetToolTip(this->button_ModRename, resources->GetString(L"button_ModRename.ToolTip"));
this->button_ModRename->UseVisualStyleBackColor = true;
this->button_ModRename->Click += gcnew System::EventHandler(this, &ui::button_ModRename_Click);
//
// button_ModRescan
//
this->button_ModRescan->Location = System::Drawing::Point(348, 357);
this->button_ModRescan->Margin = System::Windows::Forms::Padding(2);
resources->ApplyResources(this->button_ModRescan, L"button_ModRescan");
this->button_ModRescan->Name = L"button_ModRescan";
this->button_ModRescan->Size = System::Drawing::Size(65, 21);
this->button_ModRescan->TabIndex = 7;
this->button_ModRescan->Text = L"Rescan";
this->toolTip1->SetToolTip(this->button_ModRescan, resources->GetString(L"button_ModRescan.ToolTip"));
this->button_ModRescan->UseVisualStyleBackColor = true;
this->button_ModRescan->Click += gcnew System::EventHandler(this, &ui::button_ModRescan_Click);
//
// button_ModFiles
//
this->button_ModFiles->Enabled = false;
this->button_ModFiles->Location = System::Drawing::Point(73, 357);
this->button_ModFiles->Margin = System::Windows::Forms::Padding(2);
resources->ApplyResources(this->button_ModFiles, L"button_ModFiles");
this->button_ModFiles->Name = L"button_ModFiles";
this->button_ModFiles->Size = System::Drawing::Size(65, 21);
this->button_ModFiles->TabIndex = 6;
this->button_ModFiles->Text = L"Files...";
this->toolTip1->SetToolTip(this->button_ModFiles, resources->GetString(L"button_ModFiles.ToolTip"));
this->button_ModFiles->UseVisualStyleBackColor = true;
this->button_ModFiles->Click += gcnew System::EventHandler(this, &ui::button_ModFiles_Click);
//
// checkBox_ModPatches
//
this->checkBox_ModPatches->AutoSize = true;
resources->ApplyResources(this->checkBox_ModPatches, L"checkBox_ModPatches");
this->checkBox_ModPatches->Checked = true;
this->checkBox_ModPatches->CheckState = System::Windows::Forms::CheckState::Checked;
this->checkBox_ModPatches->Enabled = false;
this->checkBox_ModPatches->Location = System::Drawing::Point(430, 358);
this->checkBox_ModPatches->Margin = System::Windows::Forms::Padding(2);
this->checkBox_ModPatches->Name = L"checkBox_ModPatches";
this->checkBox_ModPatches->Size = System::Drawing::Size(123, 17);
this->checkBox_ModPatches->TabIndex = 5;
this->checkBox_ModPatches->Text = L"Plugins and Patches";
this->toolTip1->SetToolTip(this->checkBox_ModPatches, resources->GetString(L"checkBox_ModPatches.ToolTip"));
this->checkBox_ModPatches->UseVisualStyleBackColor = true;
//
// button_ModDelete
//
this->button_ModDelete->Enabled = false;
this->button_ModDelete->Location = System::Drawing::Point(211, 357);
this->button_ModDelete->Margin = System::Windows::Forms::Padding(2);
resources->ApplyResources(this->button_ModDelete, L"button_ModDelete");
this->button_ModDelete->Name = L"button_ModDelete";
this->button_ModDelete->Size = System::Drawing::Size(65, 21);
this->button_ModDelete->TabIndex = 4;
this->button_ModDelete->Text = L"Delete";
this->toolTip1->SetToolTip(this->button_ModDelete, resources->GetString(L"button_ModDelete.ToolTip"));
this->button_ModDelete->UseVisualStyleBackColor = true;
this->button_ModDelete->Click += gcnew System::EventHandler(this, &ui::button_ModDelete_Click);
//
// button_ModClone
//
this->button_ModClone->Enabled = false;
this->button_ModClone->Location = System::Drawing::Point(142, 357);
this->button_ModClone->Margin = System::Windows::Forms::Padding(2);
resources->ApplyResources(this->button_ModClone, L"button_ModClone");
this->button_ModClone->Name = L"button_ModClone";
this->button_ModClone->Size = System::Drawing::Size(65, 21);
this->button_ModClone->TabIndex = 3;
this->button_ModClone->Text = L"New/Clone";
this->toolTip1->SetToolTip(this->button_ModClone, resources->GetString(L"button_ModClone.ToolTip"));
this->button_ModClone->UseVisualStyleBackColor = true;
this->button_ModClone->Click += gcnew System::EventHandler(this, &ui::button_ModClone_Click);
//
// button_ModSetActive
//
this->button_ModSetActive->Enabled = false;
this->button_ModSetActive->Location = System::Drawing::Point(5, 357);
this->button_ModSetActive->Margin = System::Windows::Forms::Padding(2);
resources->ApplyResources(this->button_ModSetActive, L"button_ModSetActive");
this->button_ModSetActive->Name = L"button_ModSetActive";
this->button_ModSetActive->Size = System::Drawing::Size(65, 21);
this->button_ModSetActive->TabIndex = 2;
this->button_ModSetActive->Text = L"Set Active";
this->toolTip1->SetToolTip(this->button_ModSetActive, resources->GetString(L"button_ModSetActive.ToolTip"));
this->button_ModSetActive->UseVisualStyleBackColor = true;
this->button_ModSetActive->Click += gcnew System::EventHandler(this, &ui::button_ModSetActive_Click);
//
// listBox_Mods
//
resources->ApplyResources(this->listBox_Mods, L"listBox_Mods");
this->listBox_Mods->FormattingEnabled = true;
this->listBox_Mods->Location = System::Drawing::Point(5, 5);
this->listBox_Mods->Margin = System::Windows::Forms::Padding(2);
this->listBox_Mods->Name = L"listBox_Mods";
this->listBox_Mods->Size = System::Drawing::Size(546, 342);
this->listBox_Mods->TabIndex = 0;
this->toolTip1->SetToolTip(this->listBox_Mods, resources->GetString(L"listBox_Mods.ToolTip"));
this->listBox_Mods->SelectedValueChanged += gcnew System::EventHandler(this, &ui::listBox_Mods_SelectedValueChanged);
//
// tabPage_Credits
//
resources->ApplyResources(this->tabPage_Credits, L"tabPage_Credits");
this->tabPage_Credits->Controls->Add(this->creditsTextBox);
this->tabPage_Credits->Location = System::Drawing::Point(4, 22);
this->tabPage_Credits->Margin = System::Windows::Forms::Padding(2);
this->tabPage_Credits->Name = L"tabPage_Credits";
this->tabPage_Credits->Padding = System::Windows::Forms::Padding(2);
this->tabPage_Credits->Size = System::Drawing::Size(552, 378);
this->tabPage_Credits->TabIndex = 5;
this->tabPage_Credits->Text = L"Credits";
this->toolTip1->SetToolTip(this->tabPage_Credits, resources->GetString(L"tabPage_Credits.ToolTip"));
this->tabPage_Credits->UseVisualStyleBackColor = true;
//
// creditsTextBox
//
resources->ApplyResources(this->creditsTextBox, L"creditsTextBox");
this->creditsTextBox->BackColor = System::Drawing::Color::White;
this->creditsTextBox->ForeColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(64)), static_cast<System::Int32>(static_cast<System::Byte>(64)),
static_cast<System::Int32>(static_cast<System::Byte>(64)));
this->creditsTextBox->Location = System::Drawing::Point(0, 0);
this->creditsTextBox->Margin = System::Windows::Forms::Padding(2);
this->creditsTextBox->Multiline = true;
this->creditsTextBox->Name = L"creditsTextBox";
this->creditsTextBox->ReadOnly = true;
this->creditsTextBox->ScrollBars = System::Windows::Forms::ScrollBars::Both;
this->creditsTextBox->Size = System::Drawing::Size(552, 378);
this->creditsTextBox->TabIndex = 0;
this->creditsTextBox->Text = resources->GetString(L"creditsTextBox.Text");
this->toolTip1->SetToolTip(this->creditsTextBox, resources->GetString(L"creditsTextBox.ToolTip"));
//
// tabPage_Update
//
resources->ApplyResources(this->tabPage_Update, L"tabPage_Update");
this->tabPage_Update->Controls->Add(this->linkLabel_Repo);
this->tabPage_Update->Controls->Add(this->linkLabel_Help);
this->tabPage_Update->Controls->Add(this->linkLabel_Official_Discord);
@@ -1048,202 +951,138 @@ private: System::Windows::Forms::LinkLabel^ linkLabel_Console;
this->tabPage_Update->Controls->Add(this->button_Releases_page);
this->tabPage_Update->Controls->Add(this->label_Update_2);
this->tabPage_Update->Controls->Add(this->label_Update_1);
this->tabPage_Update->Location = System::Drawing::Point(4, 22);
this->tabPage_Update->Margin = System::Windows::Forms::Padding(2);
this->tabPage_Update->Name = L"tabPage_Update";
this->tabPage_Update->Padding = System::Windows::Forms::Padding(2);
this->tabPage_Update->Size = System::Drawing::Size(552, 378);
this->tabPage_Update->TabIndex = 6;
this->tabPage_Update->Text = L"UPDATE";
this->toolTip1->SetToolTip(this->tabPage_Update, resources->GetString(L"tabPage_Update.ToolTip"));
this->tabPage_Update->UseVisualStyleBackColor = true;
//
// linkLabel_Repo
//
this->linkLabel_Repo->AutoSize = true;
this->linkLabel_Repo->Location = System::Drawing::Point(169, 297);
this->linkLabel_Repo->Margin = System::Windows::Forms::Padding(2, 0, 2, 0);
resources->ApplyResources(this->linkLabel_Repo, L"linkLabel_Repo");
this->linkLabel_Repo->Name = L"linkLabel_Repo";
this->linkLabel_Repo->Size = System::Drawing::Size(87, 13);
this->linkLabel_Repo->TabIndex = 9;
this->linkLabel_Repo->TabStop = true;
this->linkLabel_Repo->Text = L"Official repository";
this->toolTip1->SetToolTip(this->linkLabel_Repo, resources->GetString(L"linkLabel_Repo.ToolTip"));
this->linkLabel_Repo->LinkClicked += gcnew System::Windows::Forms::LinkLabelLinkClickedEventHandler(this, &ui::linkLabel_Repo_LinkClicked);
//
// linkLabel_Help
//
this->linkLabel_Help->AutoSize = true;
this->linkLabel_Help->Location = System::Drawing::Point(169, 257);
this->linkLabel_Help->Margin = System::Windows::Forms::Padding(2, 0, 2, 0);
resources->ApplyResources(this->linkLabel_Help, L"linkLabel_Help");
this->linkLabel_Help->Name = L"linkLabel_Help";
this->linkLabel_Help->Size = System::Drawing::Size(29, 13);
this->linkLabel_Help->TabIndex = 8;
this->linkLabel_Help->TabStop = true;
this->linkLabel_Help->Text = L"Help";
this->toolTip1->SetToolTip(this->linkLabel_Help, resources->GetString(L"linkLabel_Help.ToolTip"));
this->linkLabel_Help->LinkClicked += gcnew System::Windows::Forms::LinkLabelLinkClickedEventHandler(this, &ui::linkLabel_Help_LinkClicked);
//
// linkLabel_Official_Discord
//
this->linkLabel_Official_Discord->AutoSize = true;
this->linkLabel_Official_Discord->Location = System::Drawing::Point(169, 277);
this->linkLabel_Official_Discord->Margin = System::Windows::Forms::Padding(2, 0, 2, 0);
resources->ApplyResources(this->linkLabel_Official_Discord, L"linkLabel_Official_Discord");
this->linkLabel_Official_Discord->Name = L"linkLabel_Official_Discord";
this->linkLabel_Official_Discord->Size = System::Drawing::Size(78, 13);
this->linkLabel_Official_Discord->TabIndex = 7;
this->linkLabel_Official_Discord->TabStop = true;
this->linkLabel_Official_Discord->Text = L"Official Discord";
this->toolTip1->SetToolTip(this->linkLabel_Official_Discord, resources->GetString(L"linkLabel_Official_Discord.ToolTip"));
this->linkLabel_Official_Discord->LinkClicked += gcnew System::Windows::Forms::LinkLabelLinkClickedEventHandler(this, &ui::linkLabel_Official_Discord_LinkClicked);
//
// linkLabel_Changelog
//
this->linkLabel_Changelog->AutoSize = true;
this->linkLabel_Changelog->Location = System::Drawing::Point(169, 238);
this->linkLabel_Changelog->Margin = System::Windows::Forms::Padding(2, 0, 2, 0);
resources->ApplyResources(this->linkLabel_Changelog, L"linkLabel_Changelog");
this->linkLabel_Changelog->Name = L"linkLabel_Changelog";
this->linkLabel_Changelog->Size = System::Drawing::Size(58, 13);
this->linkLabel_Changelog->TabIndex = 6;
this->linkLabel_Changelog->TabStop = true;
this->linkLabel_Changelog->Text = L"Changelog";
this->toolTip1->SetToolTip(this->linkLabel_Changelog, resources->GetString(L"linkLabel_Changelog.ToolTip"));
this->linkLabel_Changelog->LinkClicked += gcnew System::Windows::Forms::LinkLabelLinkClickedEventHandler(this, &ui::linkLabel_Changelog_LinkClicked);
//
// button_Clean_installation
//
this->button_Clean_installation->Location = System::Drawing::Point(295, 207);
this->button_Clean_installation->Margin = System::Windows::Forms::Padding(2);
resources->ApplyResources(this->button_Clean_installation, L"button_Clean_installation");
this->button_Clean_installation->Name = L"button_Clean_installation";
this->button_Clean_installation->Size = System::Drawing::Size(92, 26);
this->button_Clean_installation->TabIndex = 5;
this->button_Clean_installation->Text = L"Clean installation";
this->toolTip1->SetToolTip(this->button_Clean_installation, resources->GetString(L"button_Clean_installation.ToolTip"));
this->button_Clean_installation->UseVisualStyleBackColor = true;
this->button_Clean_installation->Click += gcnew System::EventHandler(this, &ui::button_Clean_installation_Click);
//
// button_Instructions
//
this->button_Instructions->Location = System::Drawing::Point(295, 177);
this->button_Instructions->Margin = System::Windows::Forms::Padding(2);
resources->ApplyResources(this->button_Instructions, L"button_Instructions");
this->button_Instructions->Name = L"button_Instructions";
this->button_Instructions->Size = System::Drawing::Size(92, 26);
this->button_Instructions->TabIndex = 4;
this->button_Instructions->Text = L"Instructions";
this->toolTip1->SetToolTip(this->button_Instructions, resources->GetString(L"button_Instructions.ToolTip"));
this->button_Instructions->UseVisualStyleBackColor = true;
this->button_Instructions->Click += gcnew System::EventHandler(this, &ui::button_Instructions_Click);
//
// button_Unstable_builds
//
this->button_Unstable_builds->Location = System::Drawing::Point(169, 207);
this->button_Unstable_builds->Margin = System::Windows::Forms::Padding(2);
resources->ApplyResources(this->button_Unstable_builds, L"button_Unstable_builds");
this->button_Unstable_builds->Name = L"button_Unstable_builds";
this->button_Unstable_builds->Size = System::Drawing::Size(92, 26);
this->button_Unstable_builds->TabIndex = 3;
this->button_Unstable_builds->Text = L"Unstable builds";
this->toolTip1->SetToolTip(this->button_Unstable_builds, resources->GetString(L"button_Unstable_builds.ToolTip"));
this->button_Unstable_builds->UseVisualStyleBackColor = true;
this->button_Unstable_builds->Click += gcnew System::EventHandler(this, &ui::button_Unstable_builds_Click);
//
// button_Releases_page
//
this->button_Releases_page->Location = System::Drawing::Point(169, 177);
this->button_Releases_page->Margin = System::Windows::Forms::Padding(2);
resources->ApplyResources(this->button_Releases_page, L"button_Releases_page");
this->button_Releases_page->Name = L"button_Releases_page";
this->button_Releases_page->Size = System::Drawing::Size(92, 26);
this->button_Releases_page->TabIndex = 2;
this->button_Releases_page->Text = L"Releases page";
this->toolTip1->SetToolTip(this->button_Releases_page, resources->GetString(L"button_Releases_page.ToolTip"));
this->button_Releases_page->UseVisualStyleBackColor = true;
this->button_Releases_page->Click += gcnew System::EventHandler(this, &ui::button_Releases_page_Click);
//
// label_Update_2
//
this->label_Update_2->AutoSize = true;
this->label_Update_2->Location = System::Drawing::Point(48, 73);
this->label_Update_2->Margin = System::Windows::Forms::Padding(2, 0, 2, 0);
resources->ApplyResources(this->label_Update_2, L"label_Update_2");
this->label_Update_2->Name = L"label_Update_2";
this->label_Update_2->Size = System::Drawing::Size(467, 26);
this->label_Update_2->TabIndex = 1;
this->label_Update_2->Text = L"It is highly recommended to download updates directly from the official repositor"
L"y.\r\nIf you have downloaded PD Loader from a third-party, it is recommended to do"
L" a clean installation.";
this->label_Update_2->TextAlign = System::Drawing::ContentAlignment::MiddleCenter;
this->toolTip1->SetToolTip(this->label_Update_2, resources->GetString(L"label_Update_2.ToolTip"));
//
// label_Update_1
//
this->label_Update_1->AutoSize = true;
this->label_Update_1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(0)));
this->label_Update_1->Location = System::Drawing::Point(11, 30);
this->label_Update_1->Margin = System::Windows::Forms::Padding(2, 0, 2, 0);
resources->ApplyResources(this->label_Update_1, L"label_Update_1");
this->label_Update_1->Name = L"label_Update_1";
this->label_Update_1->Size = System::Drawing::Size(555, 20);
this->label_Update_1->TabIndex = 0;
this->label_Update_1->Text = L"Update PD Loader regularly to get the latest fixes and new features!";
this->label_Update_1->TextAlign = System::Drawing::ContentAlignment::MiddleCenter;
this->toolTip1->SetToolTip(this->label_Update_1, resources->GetString(L"label_Update_1.ToolTip"));
//
// button_Discord
//
resources->ApplyResources(this->button_Discord, L"button_Discord");
this->button_Discord->BackColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(242)), static_cast<System::Int32>(static_cast<System::Byte>(242)),
static_cast<System::Int32>(static_cast<System::Byte>(242)));
this->button_Discord->Cursor = System::Windows::Forms::Cursors::Hand;
this->button_Discord->FlatAppearance->BorderSize = 0;
this->button_Discord->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
this->button_Discord->Image = (cli::safe_cast<System::Drawing::Image^>(resources->GetObject(L"button_Discord.Image")));
this->button_Discord->Location = System::Drawing::Point(496, 404);
this->button_Discord->Name = L"button_Discord";
this->button_Discord->Size = System::Drawing::Size(32, 32);
this->button_Discord->TabIndex = 31;
this->toolTip1->SetToolTip(this->button_Discord, resources->GetString(L"button_Discord.ToolTip"));
this->button_Discord->UseVisualStyleBackColor = false;
this->button_Discord->Click += gcnew System::EventHandler(this, &ui::button_Discord_Click);
//
// button_github
//
resources->ApplyResources(this->button_github, L"button_github");
this->button_github->BackColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(242)), static_cast<System::Int32>(static_cast<System::Byte>(242)),
static_cast<System::Int32>(static_cast<System::Byte>(242)));
this->button_github->Cursor = System::Windows::Forms::Cursors::Hand;
this->button_github->FlatAppearance->BorderSize = 0;
this->button_github->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
this->button_github->Image = (cli::safe_cast<System::Drawing::Image^>(resources->GetObject(L"button_github.Image")));
this->button_github->Location = System::Drawing::Point(528, 404);
this->button_github->Name = L"button_github";
this->button_github->Size = System::Drawing::Size(32, 32);
this->button_github->TabIndex = 32;
this->toolTip1->SetToolTip(this->button_github, resources->GetString(L"button_github.ToolTip"));
this->button_github->UseVisualStyleBackColor = false;
this->button_github->Click += gcnew System::EventHandler(this, &ui::button_github_Click);
//
// button_Apply
//
resources->ApplyResources(this->button_Apply, L"button_Apply");
this->button_Apply->BackColor = System::Drawing::Color::White;
this->button_Apply->FlatAppearance->BorderColor = System::Drawing::SystemColors::Control;
this->button_Apply->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
this->button_Apply->Location = System::Drawing::Point(4, 409);
this->button_Apply->Name = L"button_Apply";
this->button_Apply->Size = System::Drawing::Size(69, 23);
this->button_Apply->TabIndex = 33;
this->button_Apply->Text = L"Apply";
this->toolTip1->SetToolTip(this->button_Apply, resources->GetString(L"button_Apply.ToolTip"));
this->button_Apply->UseVisualStyleBackColor = false;
this->button_Apply->Click += gcnew System::EventHandler(this, &ui::button_Apply_Click);
//
// button_Wiki
//
resources->ApplyResources(this->button_Wiki, L"button_Wiki");
this->button_Wiki->BackColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(242)), static_cast<System::Int32>(static_cast<System::Byte>(242)),
static_cast<System::Int32>(static_cast<System::Byte>(242)));
this->button_Wiki->BackgroundImage = (cli::safe_cast<System::Drawing::Image^>(resources->GetObject(L"button_Wiki.BackgroundImage")));
this->button_Wiki->BackgroundImageLayout = System::Windows::Forms::ImageLayout::Stretch;
this->button_Wiki->Cursor = System::Windows::Forms::Cursors::Hand;
this->button_Wiki->FlatAppearance->BorderSize = 0;
this->button_Wiki->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
this->button_Wiki->Location = System::Drawing::Point(464, 404);
this->button_Wiki->Name = L"button_Wiki";
this->button_Wiki->Size = System::Drawing::Size(32, 32);
this->button_Wiki->TabIndex = 34;
this->toolTip1->SetToolTip(this->button_Wiki, resources->GetString(L"button_Wiki.ToolTip"));
this->button_Wiki->UseVisualStyleBackColor = false;
this->button_Wiki->Click += gcnew System::EventHandler(this, &ui::button_Wiki_Click);
//
// ui
//
this->AcceptButton = this->button_Launch;
this->AutoScaleDimensions = System::Drawing::SizeF(96, 96);
resources->ApplyResources(this, L"$this");
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Dpi;
this->AutoSize = true;
this->AutoSizeMode = System::Windows::Forms::AutoSizeMode::GrowAndShrink;
this->BackColor = System::Drawing::Color::Magenta;
this->BackgroundImageLayout = System::Windows::Forms::ImageLayout::Stretch;
this->ClientSize = System::Drawing::Size(560, 437);
this->Controls->Add(this->button_Wiki);
this->Controls->Add(this->button_Apply);
this->Controls->Add(this->tabControl);
@@ -1255,12 +1094,10 @@ private: System::Windows::Forms::LinkLabel^ linkLabel_Console;
static_cast<System::Int32>(static_cast<System::Byte>(64)));
this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::Fixed3D;
this->HelpButton = true;
this->Icon = (cli::safe_cast<System::Drawing::Icon^>(resources->GetObject(L"$this.Icon")));
this->KeyPreview = true;
this->MaximizeBox = false;
this->Name = L"ui";
this->StartPosition = System::Windows::Forms::FormStartPosition::CenterScreen;
this->Text = L"PD Loader 3 - Launcher";
this->toolTip1->SetToolTip(this, resources->GetString(L"$this.ToolTip"));
this->TransparencyKey = System::Drawing::Color::Magenta;
this->FormClosing += gcnew System::Windows::Forms::FormClosingEventHandler(this, &ui::Ui_FormClosing);
this->FormClosed += gcnew System::Windows::Forms::FormClosedEventHandler(this, &ui::Ui_FormClosed);
@@ -1468,7 +1305,7 @@ private: System::Void Ui_FormClosing(System::Object^ sender, System::Windows::Fo
if (!AnyConfigChanged())
return;
switch (SkinnedMessageBox::Show(this, "Do you want to save your settings?", "PD Launcher", MessageBoxButtons::YesNoCancel, MessageBoxIcon::Question))
switch (SkinnedMessageBox::Show(this, i18n::GetStringFallback("CONFIRM_SAVE_SETTINGS"), "PD Launcher", MessageBoxButtons::YesNoCancel, MessageBoxIcon::Question))
{
case System::Windows::Forms::DialogResult::Yes:
SaveSettings();
@@ -1487,7 +1324,7 @@ private: System::Void Ui_FormClosed(System::Object^ sender, System::Windows::For
TerminateProcess(GetCurrentProcess(), EXIT_SUCCESS);
}
private: System::Void button_Discord_Click(System::Object^ sender, System::EventArgs^ e) {
switch (SkinnedMessageBox::Show(this, "Would you like to read the user guide for troubleshooting?", "PD Launcher", MessageBoxButtons::YesNoCancel, MessageBoxIcon::Information))
switch (SkinnedMessageBox::Show(this, i18n::GetStringFallback("CONFIRM_DISCORD_OR_GUIDE"), "PD Launcher", MessageBoxButtons::YesNoCancel, MessageBoxIcon::Information))
{
case System::Windows::Forms::DialogResult::Yes:
System::Diagnostics::Process::Start("https://notabug.org/PDModdingCommunity/PD-Loader/wiki");
@@ -1555,7 +1392,7 @@ private: System::Void button_Unstable_builds_Click(System::Object^ sender, Syste
System::Diagnostics::Process::Start("https://ci.appveyor.com/project/nastys/pd-loader/build/artifacts");
}
private: System::Void button_Clean_installation_Click(System::Object^ sender, System::EventArgs^ e) {
SkinnedMessageBox::Show(this, "Delete:\n- dnsapi.dll or dinput8.dll\n- patches/\n- plugins/\n\nRestore:\n- glut32.dll\n\nThen install PD Loader from the official repository.", "How to do a clean installation", MessageBoxButtons::OK, MessageBoxIcon::Information);
SkinnedMessageBox::Show(this, i18n::GetStringFallback("HOWTO_CLEAN_INSTALL_HINT"), i18n::GetStringFallback("HOWTO_CLEAN_INSTALL"), MessageBoxButtons::OK, MessageBoxIcon::Information);
}
private: System::Void linkLabel_Changelog_LinkClicked(System::Object^ sender, System::Windows::Forms::LinkLabelLinkClickedEventArgs^ e) {
System::Diagnostics::Process::Start("https://notabug.org/PDModdingCommunity/PD-Loader/wiki/Changelog");
File diff suppressed because it is too large Load Diff