Merge branch 'master' of chsbuffer/PD-Loader into master

This commit is contained in:
nastys
2021-08-10 00:03:54 +00:00
committed by Gogs
12 changed files with 4389 additions and 863 deletions
+1 -39
View File
@@ -7,44 +7,6 @@ build:
project: source-code/PD-Loader.sln
verbosity: minimal
after_build:
- cmd: >-
md %TMP%\full\
md %TMP%\full\patches\
md %TMP%\full\plugins\
md "%TMP%\full\plugins\Novidia Shaders"
md %TMP%\full\ram\
md %TMP%\full\ram\databank_template\
copy %APPVEYOR_BUILD_FOLDER%\source-code\x64\%CONFIGURATION%\dnsapi.dll %TMP%\full\
copy %APPVEYOR_BUILD_FOLDER%\source-code\x64\%CONFIGURATION%\*.dva %TMP%\full\plugins\
copy "%APPVEYOR_BUILD_FOLDER%\source-code\data\README - PD Loader.url" %TMP%\full\
copy %APPVEYOR_BUILD_FOLDER%\source-code\data\verify_base_game.sfv %TMP%\full\
copy %APPVEYOR_BUILD_FOLDER%\source-code\data\verify_mount_data.sfv %TMP%\full\
copy %APPVEYOR_BUILD_FOLDER%\source-code\data\plugins\*.* %TMP%\full\plugins\
copy "%APPVEYOR_BUILD_FOLDER%\source-code\data\plugins\Novidia Shaders\*.*" "%TMP%\full\plugins\Novidia Shaders\"
copy %APPVEYOR_BUILD_FOLDER%\source-code\data\ram\databank_template\*.dat %TMP%\full\ram\databank_template\
copy %APPVEYOR_BUILD_FOLDER%\source-code\data\patches\custom_freeplay_text_example.p %TMP%\full\patches\
cd %TMP%\full\
7z a %APPVEYOR_BUILD_FOLDER%\PD-Loader-%CONFIGURATION%-AppVeyor.zip *
- ps: .\package.ps1 -Clean:$false
artifacts:
- path: PD-Loader-*.zip
+35
View File
@@ -0,0 +1,35 @@
param (
[Parameter()]
[ValidateSet('Debug', 'Release')]
[string]
$Configuration = 'Release',
[Parameter()]
[Switch]
$Clean = $true
)
# Set-PSDebug -Trace 1
Push-Location $PWD
$RepoDir = $PSScriptRoot
$SolutionDir = "$RepoDir\source-code"
$OutputDir = "$SolutionDir\x64\$Configuration"
$PackageDir = "$env:TMP\full"
$PackageName = "$RepoDir\PD-Loader-$Configuration-AppVeyor.zip"
if ($Clean) {
rm $PackageDir -Recurse
rm $PackageName
}
md $PackageDir -Force
copy $SolutionDir\data\* $PackageDir\ -Recurse
copy $RepoDir\dnsapi.dll $PackageDir\
copy $OutputDir\*.dva $PackageDir\plugins\
copy $OutputDir\zh-Hans $PackageDir\plugins\ -Recurse
cd $PackageDir
7z a $PackageName *
Pop-Location
@@ -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,9 +124,14 @@
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="SkinnedMessageBox.resx" />
<EmbeddedResource Include="Resources.restext" />
<EmbeddedResource Include="Resources.zh-Hans.restext" />
<EmbeddedResource Include="ui.resx">
<DependentUpon>ui.h</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ui.zh-Hans.resx">
<DependentUpon>ui.h</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<Image Include="FeelsThinkMan.gif" />
@@ -0,0 +1,260 @@
###############################################
# 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.
LAUNCHER_LANGUAGE_NAME=Launcher Language:
LAUNCHER_LANGUAGE_HINT=Sets the Language of 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.
@@ -0,0 +1,278 @@
###############################################
# framework
# display
DISPLAY_NAME=显示模式:
DISPLAY_HINT=设置窗口显示模式
Windowed=窗口化
Fast=无边框窗口
Exclusive=独占全屏
#Safe=
RESOLUTION_NAME=游戏分辨率:
RESOLUTION_HINT=设置游戏的显示分辨率
REFRESHRATE_NAME=刷新率:
REFRESHRATE_HINT=设置显示的刷新率.
R.ENABLE_NAME=启用
R.ENABLE_HINT=启用或禁用自定义内部渲染分辨率.
R.RESOLUTION_NAME=分辨率:
R.RESOLUTION_HINT=设置内部渲染分辨率(除 1280x720 外)
# graphics
MODEL_NAME=NVIDIA GPU 架构:
MODEL_HINT=请选择你的 NVIDIA GPU 架构以便于应用必要的设定\n\n请注意:自动检测 GPU 架构功能无法在 GNU/Linux 上工作\n\n架构类型:\n开普勒:GTX10 系\n麦克斯韦:GTX900 系\n图灵:RTX20/GTX16 系\n安培:RTX30 系
Automatic=自动
TAA_NAME=TAA
TAA_HINT=时间抗锯齿
MLAA_NAME=MLAA
MLAA_HINT=形态抗锯齿
MAG_NAME=图像滤镜:
MAG_HINT=图像滤镜\n\n双线性插值:默认滤镜\n最近邻插值:最锐利,但是容易产生色块\nSharpen:锐化滤镜\nCone:平滑滤镜
Bilinear=双线性插值
Nearest-neighbour=最近邻插值
DOF_NAME=景深
DOF_HINT=模糊背景,停用后可以在低配机器上获得更好性能
REFLECTIONS_NAME=反射
REFLECTIONS_HINT=启用或者停用游戏内中的反射效果.
REFLECT_RES_WIDTH_NAME=反射分辨率:
REFLECT_RES_WIDTH_HINT=设置反射缓冲区的分辨率(除 512x256 外)
REFRACT_RES_WIDTH_NAME=折射分辨率:
REFRACT_RES_WIDTH_HINT=设置折射缓冲区的分辨率(除 512x256 外)
SHADOWS_NAME=阴影
SHADOWS_HINT=启用或者停用游戏内的阴影效果
PUNCHTHROUGH_NAME=透明网格舞厅
PUNCHTHROUGH_HINT=显示透明网格物体
GLARE_NAME=光晕
GLARE_HINT=启用或者停用游戏内的光晕效果
SHADER_NAME=高清着色器
SHADER_HINT=启用或者停用高清着色器
NPR1_NAME=Toon (F9):
NPR1_HINT=启用 NPR1 着色器\n\n按 F9 以进行切换
2D_NAME=停用 3D 渲染
2D_HINT=停用游戏内所有的 3D 渲染\n\n警告:在 “游戏数据保护” 未启用前,停用 3D 渲染将会导致所有扩展数据被删除
# options
Default=默认
Force on=强制开启
Force off=强制关闭
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=停用视频
NO_MOVIES_HINT=停用包含视频文件的 PV (如 Catch The Wave 背景,砂之行星等)(如果在游戏加载包含视频文件的 PV 时卡死,请启用此选项)
CURSOR_NAME=显示光标
CURSOR_HINT=在游戏内显示或者隐藏鼠标指针
STEREO_NAME=声道设定
STEREO_HINT=当禁用 DivaSound 时,强制将 4 声道转为 2 声道
QUICK_START_NAME=快速启动:
QUICK_START_HINT=跳过一个或者更多菜单 (如刷卡菜单)
Disabled=禁用
Guest=访客模式
Guest + Normal=访客模式+正常模式
NO_SCROLLING_SFX_NAME=停用滑动音效
NO_SCROLLING_SFX_HINT=停用在选歌界面的滑动音效
ENHANCED_STAGE_MANAGER_NAME=游玩次数:
ENHANCED_STAGE_MANAGER_HINT=设置一次投币 (游戏) 最多可以游玩的次数 (0 = 默认)
ENHANCED_STAGE_MANAGER_ENCORE_NAME=启用 EncoreStage
ENHANCED_STAGE_MANAGER_ENCORE_HINT=启用 Encore Stage\n(在 EncoreStage 下所有难度的歌曲最低达成率均为 80%)
FORCE_MOUTH_NAME=嘴部动作设定:
FORCE_MOUTH_HINT=调整模型的嘴部动作样式
FORCE_EXPRESSIONS_NAME=表情设定:
FORCE_EXPRESSIONS_HINT=调整模型的表情样式
FORCE_LOOK_NAME=外观设定:
FORCE_LOOK_HINT=调整外观样式
NO_HAND_SCALING_NAME=停用手部缩放
NO_HAND_SCALING_HINT=停用手部缩放
DEFAULT_HAND_SIZE_NAME=默认手部大小:
DEFAULT_HAND_SIZE_HINT=默认值:-1\nPDA:12200
SING_MISSED_NAME=停用停止歌唱
SING_MISSED_HINT=停用当 Note 判定为 Miss 时,歌姬暂停歌唱的功能
HIDE_VOLUME_NAME=隐藏音量设定
HIDE_VOLUME_HINT=隐藏游戏内音量控制和案件音效控制按钮
NO_PV_UI_NAME=隐藏 PV UI
NO_PV_UI_HINT=隐藏欣赏模式下的摄像按钮
HIDE_PV_WATERMARK_NAME=隐藏 PV 水印
HIDE_PV_WATERMARK_HINT=隐藏 PV 水印
STATUS_ICONS_NAME=状态栏图标设定:
STATUS_ICONS_HINT=设定网络功能以及读卡器的状态图标
Hidden=隐藏
Error=错误
OK=正常
Partial OK=部分正常
NO_LYRICS_NAME=隐藏歌词
NO_LYRICS_HINT=隐藏歌词
NO_ERROR_NAME=隐藏错误横幅
NO_ERROR_HINT=隐藏在待机模式下显示的错误横幅
HIDE_FREEPLAY_NAME=隐藏 "FREE PLAY"/"CREDIT (S)"
HIDE_FREEPLAY_HINT=隐藏游戏右上角的 "FREE PLAY"/"CREDIT (S)" 文字
PDLOADERTEXT_NAME=替换 "FREE PLAY" 文字
PDLOADERTEXT_HINT=替换游戏右上角的 "FREE PLAY" 为 "PD Loader"
NO_TIMER_NAME=停用计时器
NO_TIMER_HINT=停用选歌界面的计时器
NO_TIMER_SPRITE_NAME=隐藏计时器图标
NO_TIMER_SPRITE_HINT=隐藏选歌界面的计时器图标
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=解锁 PSEUDO 模块 (未完成)
UNLOCK_PSEUDO_HINT=允许您使用所有模型游玩游戏\n(未完成,推荐的默认模型为 Miku)
CARD_NAME=解锁刷卡菜单 (未完成)
CARD_HINT=启用刷卡菜单\n(未完成,且此功能不会绕过刷卡提示)
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=免费游玩
FREEPLAY_HINT=替换游戏右上角的 "CREDIT (S)" 文字为 "FREE PLAY" 且在此模式下无需投币
FPS.LIMIT.LIGHTMODE_NAME=启用轻量 FPS 限制器
FPS.LIMIT.LIGHTMODE_HINT=限制 FPS 限制器的 CPU 使用量\n此功能可能会造成轻微的性能损失
FPS.LIMIT_NAME=FPS 限制器:
FPS.LIMIT_HINT=允许您设定 FPS 上限,将其设置为 -1 可解锁帧率限制
FRM.MOTION.RATE_NAME=FRM 运动速率:
FRM.MOTION.RATE_HINT=设置设置帧速率管理器的运动速率(fps)\n更大的数字理论上会更加流畅,但可能会极大的增加 CPU 占用且更容易发生错误
AUTOPAUSE_NAME=自动暂停
AUTOPAUSE_HINT=在窗口为未激活状态时自动暂停游戏
RUMBLE_NAME=启用 XInput 震动
RUMBLE_HINT=启用在滑条滑动时的 XInput 震动功能
XINPUT_PREFERRED_NAME=XInput 控制器设定:
XINPUT_PREFERRED_HINT=设置 XInput 控制器偏好\n如果此控制器暂时无法使用,将使用下一个已连接的 XInput 控制器
HARDWARE_SLIDER_NAME=启用硬件手台
HARDWARE_SLIDER_HINT=如果你准备使用硬件手台,请将其启用\n(请将硬件手台的连接端口设置为 COM11)
OPENGL_PATCH_A_NAME=OpenGL Patch A
OPENGL_PATCH_A_HINT=忽略一些与 OpenGL 相关的错误;除非您知道自己在做什么,否则不要同时启用两个 Patch
OPENGL_PATCH_B_NAME=OpenGL Patch B
OPENGL_PATCH_B_HINT=忽略一些与 OpenGL 相关的错误;除非您知道自己在做什么,否则不要同时启用两个 Patch
PREVENT_DATA_DELETION_NAME=游戏数据保护
PREVENT_DATA_DELETION_HINT=避免游戏自动删除数据
COMMAND_LINE_NAME=启动设定:
COMMAND_LINE_HINT=允许在使用启动器时为游戏设置命令行参数\n如果启动器被停用则会跳过此步骤
USE_DIVAHOOK_BAT_NAME=使用 divahook.bat
USE_DIVAHOOK_BAT_HINT=启动 divahook.bat 而非 diva.exe
DARK_LAUNCHER_NAME=暗黑模式
DARK_LAUNCHER_HINT=启用启动器自带的暗黑主题
LAUNCHER_LANGUAGE_NAME=启动器语言
LAUNCHER_LANGUAGE_HINT=设置启动器语言。
NO_GPU_DIALOG_NAME=停用 GPU 警告信息
NO_GPU_DIALOG_HINT=停用对于不支持的 GPU 的警告信息
# player data
PLAYER_NAME_NAME=玩家昵称:
PLAYER_NAME_HINT=设置游戏中显示的玩家昵称
LEVEL_NAME_NAME=玩家签名:
LEVEL_NAME_HINT=设置游戏中显示玩家签名
LEVEL_PLATE_ID_NAME=签名栏背景:
LEVEL_PLATE_ID_HINT=设置签名栏背景图片
LEVEL_PLATE_EFFECT_NAME=签名栏效果:
LEVEL_PLATE_EFFECT_HINT=设置签名栏所显示的效果
SKIN_EQUIP _NAME=打歌界面:
SKIN_EQUIP _HINT=设置打歌界面皮肤
BTN_SE_EQUIP_NAME=按键音效:
BTN_SE_EQUIP_HINT=设置按键音效.\n-1 = 默认音效
SLIDE_SE_EQUIP_NAME=连续拖拽音效:
SLIDE_SE_EQUIP_HINT=设置滑条连续拖拽音效\n-1 = 默认音效
CHAINSLIDE_SE_EQUIP_NAME=拖拽音效:
CHAINSLIDE_SE_EQUIP_HINT=设置滑条拖拽音效.\n-1 = 默认音效
SLIDERTOUCH_SE_EQUIP_NAME=拖拽条操作音效:
SLIDERTOUCH_SE_EQUIP_HINT=设置不带音符触摸滑块的音效.\n-1 = 默认音效
ACT_TOGGLE_NAME=按键声
ACT_TOGGLE_HINT=启用 按键 / 滑条的声音.
BORDER_GREAT_NAME=评分刻度线 (Great)
BORDER_GREAT_HINT=在进度条上显示一条线来提示您是否到达 Great 评分.
BORDER_EXCELLENT_NAME=评分刻度线 (Excellent)
BORDER_EXCELLENT_HINT=在进度条上显示一条线来提示您是否到达 Excellent 评分.
BORDER_RIVAL_NAME=评分刻度线 (对手)
BORDER_RIVAL_HINT=在进度条上显示一条线来提示您是否超过了您的对手.
USE_CARD_NAME=启用刷卡功能
USE_CARD_HINT=启用 IC 卡检测功能以解锁模型选择功能
MODULE_CARD_WORKAROUND_NAME=解锁模型选择功能
MODULE_CARD_WORKAROUND_HINT=在未使用 IC 卡的情况下解锁模型选择功能,且尝试提高菜单流畅度\n(Beta 功能)
USE_PV_MODULE_EQUIP_NAME=解锁特定模型选择功能
USE_PV_MODULE_EQUIP_HINT=允许选择特定歌曲的模型
USE_PV_SKIN_EQUIP_NAME=解锁特定游戏界面选择功能
USE_PV_SKIN_EQUIP_HINT=允许歌曲使用特定的游戏界面\n且将此数值储存在 skin.ini
USE_PV_SFX_EQUIP_NAME=解锁特定音效选择功能
USE_PV_SFX_EQUIP_HINT=允许歌曲使用特定打击音效.\n且将此数值储存在 sfx.ini
GAMEMODE_OPTIONS_NAME=解锁游戏玩法修改器
GAMEMODE_OPTIONS_HINT=解锁游戏玩法修改器 (hi-speed,hidden,sudden).
# components
INPUT_EMULATOR_NAME=Input Emulator
INPUT_EMULATOR_HINT=通过 Input Emulator 将键盘 / 鼠标模拟为游戏控制器输入
TOUCH_SLIDER_EMULATOR_NAME=Slider Emulator
TOUCH_SLIDER_EMULATOR_HINT=通过 Slider Emulator 将键盘 / 鼠标模拟为滑条输入
TOUCH_PANEL_EMULATOR_NAME=Touch Panel Emulator
TOUCH_PANEL_EMULATOR_HINT=通过 Touch Panel Emulator 将鼠标点击模拟为游戏内触摸操作
PLAYER_DATA_MANAGER_NAME=Player Data Manager
PLAYER_DATA_MANAGER_HINT=通过 Player Data Manager 将玩家自定义的玩家资料加载到游戏默认的玩家资料中\n如果在游戏内需要解锁模型选择功能或游戏玩法修改 器,请启用此模块
FRAME_RATE_MANAGER_NAME=Frame Rate Manager
FRAME_RATE_MANAGER_HINT=通过 Frame Rate Manager 将不同的帧速率的动画修正到正确的速度\n如果游戏 FPS 未锁定在 60 帧,请启用此模块
FAST_LOADER_NAME=Fast Loader
FAST_LOADER_HINT=通过 Fast Loader 跳过或加速不必要的加载步骤
FAST_LOADER_SPEED_NAME=Fast Loader Speed
FAST_LOADER_SPEED_HINT=设置 Fast Loader 的加速程度\n请注意:联机游玩时请将该值设置为 4 及以下,否则将会无法连接服务器\n默认值:39
CAMERA_CONTROLLER_NAME=Camera Controller
CAMERA_CONTROLLER_HINT=通过 Camera Controller,您可以控制游戏内的摄像机方向位置等参数 (通过按 F3 键切换启动状态)\n使用方法\nWASD 移动摄像机,SPACE/CTRL 控制摄像机向上 / 向下,Q/R 控制摄像机旋转角度,R/F 控制摄像机缩放\n通过按 SHIFT(加速)/ALT(减速) 控制摄像机移动速度
SCALE_COMPONENT_NAME=Scale Component
SCALE_COMPONENT_HINT=通过 Scale Component 缩放图形输出帧缓冲区以填充屏幕 / 窗口
DEBUG_COMPONENT_NAME=Debug Component
DEBUG_COMPONENT_HINT=通过 Debug Component,您可以更改游戏状态 (通过按 F4-F8 键),使用开发人员 GUI 和测试,并加速 2D 动画 / 菜单 (按住 SHIFT+TAB 键).
TARGET_INSPECTOR_NAME=Target Inspector
TARGET_INSPECTOR_HINT=通过 Target Inspector 启用 Hold 系统切替
SCORE_SAVER_NAME=Score Saver
SCORE_SAVER_HINT=通过 Score Saver 将游戏内的最佳纪录保存在游戏 plugins 目录下的 scores.ini 中
PAUSE_NAME=启用暂停菜单
PAUSE_HINT=启用游戏内的暂停菜单
###############################################
# ui
# dialog
CONFIRM_SAVE_SETTINGS=是否保存设置?
CONFIRM_DISCORD_OR_GUIDE=您是否想阅读用户指南,以排除故障?
HOWTO_CLEAN_INSTALL=如何清洁安装
HOWTO_CLEAN_INSTALL_HINT=删除:\n- dnsapi.dll 或 dinput8.dll\n- patches/\n- plugins/\n\n恢复:\n- glut32.dll\n\n然后从官方仓库下载安装 PD Loader。
#gpu
GPU_INFO_NAME=显卡信息:
GPU_AMD_NOVIDIA_NAME=信息:AMD GPU 为非官方支持
GPU_AMD_NOVIDIA_HINT=在没有插件的情况下并不支持 AMD GPU\nPD Loader AMDPack 应该已经正确安装,但是还请持续留意游戏中可能出现的错误
GPU_AMD_NAME=警告:需要插件以支持 AMD GPU
GPU_AMD_HINT=在没有插件的情况下并不支持 AMD GPU\nPD Loader AMDPack 可以使 3D 渲染工作 请下载它并且根据内置的帮助文件进行安装\n\n如果您的笔记本电脑带有 NVIDIA GPU 并且您希望使用它,您可能需要在 Windows 设置或者 NVIDIA 显卡控制面版中设置 diva.exe 使用 NVIDIA 显卡运行
GPU_UNSUPPORTED_NAME=警告:不受支持的显卡
GPU_UNSUPPORTED_HINT=您所使用的显卡不受支持。我们仅建议您使用 NVIDIA GPU。(尽管 AMD 显卡可以配合插件使用)\n请使用 GTX600 系列或更高版本的 NVIDIA GPU\n\n如果您的笔记本电脑带有 NVIDIA GPU 并且您希望使用它,则可能需要在 Windows 设置或 NVIDIA 控制面板中设置 diva.exe 使用 NVIDIA 显卡运行。\n\n其他 GPU 用户在使用了插件或 MOD 后能正常运行游戏,但是 3D 图形可能不会工作
GPU_GA_NAME=信息:检测到安培系列显卡!错误未知\n(点击以获取更多信息)
GPU_GA_HINT=安培系列显卡暂时还没有被测试 在上一代图灵系列显卡中(GTX 16 系/RTX 20 系),部分重要的角色着色器在渲染中可能会出现水波纹或者是噪点问题\n请确保 ShaderPatch 插件已经被启用并且将其他问题反馈给开发团队
GPU_TU_NAME=信息:检测到图灵系列显卡!渲染可能会出现噪点\n(点击以获取更多信息)
GPU_TU_HINT=在图灵系列显卡中(GTX16 系/RTX20 系),部分重要的角色着色器在渲染中可能会出现水波纹或者是噪点问题\n请确保 ShaderPatch 插件已经被启用
GPU_GM_NEWER_NAME=信息:某些场景可能会出现噪点\n(点击以获取更多信息)
GPU_GM_NEWER_HINT=在麦克斯韦系列(GTX900 系),更新的显卡上,某些次要的场景着色器会出现噪点问题\n请确保 ShaderPatch 插件已经被启用
GPU_GK_NAME=信息:无错误
GPU_GK_HINT=你的 GPU 应该可以正常游玩这个游戏
GPU_GF_DRIVER_OLD_NAME=信息:驱动版本太旧
GPU_GF_DRIVER_OLD_HINT=你的 GPU 应该可以运行游戏,但是看起来你的 OpenGL 版本太旧了\n更新驱动程序应该会解决此问题。
GPU_GF_NAME=信息:无已知错误
GPU_GF_HINT=你的 GPU 应该可以正常运行此游戏,但是他比此游戏所适配的 GPU (GTX 650 Ti) 要旧\n游戏中可能会存在一些图形方面的问题\n请向开发团队反应这些问题以便于定位和修复
GPU_TOO_NEW_NAME=信息:GPU 可能太新了\n(点击以获取更多信息)
GPU_TOO_NEW_HINT=你的 GPU 看来太新了。目前只支持图灵架构 (GTX16 系 / RTX20 系)。\n好消息是:游戏应该可以运行,但是 ShaderPatch 可能还不支持它\n你可能会在部分角色或场景上看到水波纹或者是噪点\n请将这些问题反馈给开发团队以帮助我们更新 ShaderPatch 插件
GPU_OLD_NAME=信息:GPU 过旧!3D 渲染可能会出现错误\n(点击以获取更多信息)
GPU_OLD_HINT=您的 GPU 非常旧,它不支持游戏使用的渲染技术\n您可能可以运行游戏 但是图形可能会出现严重错误\n请升级到 GTX600 系列以后的 GPU。
GPU_UNKNOWN_NAME=信息:无法检测 GPU 架构。\n(点击以获取更多信息)
GPU_UNKNOWN_HINT=看起来您有一个 NVIDIA GPU,但在尝试确定 GPU 的架构时出错。\n这可能是由一个 bug 引起的,但它也可能表明潜在的问题。\n请确保您有 GTX600 系列或更高版本的 GPU。(GTX 400 系列或更高版本也支持)
SHOW_GPU_DIALOG_HINT=你可以在选项中停用这个警告信息
@@ -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);
+104 -100
View File
@@ -65,6 +65,9 @@ LPCWSTR KEYCONFIG_SECTION = L"keyconfig";
int nSkipLauncher = GetPrivateProfileIntW(LAUNCHER_SECTION, L"skip", FALSE, CONFIG_FILE);
int nNoGPUDialog = GetPrivateProfileIntW(LAUNCHER_SECTION, L"no_gpu_dialog", FALSE, CONFIG_FILE);
int nLanguage = GetPrivateProfileIntW(LAUNCHER_SECTION, L"launcher_language", FALSE, CONFIG_FILE);
std::vector<LPCWSTR> languages = std::vector<LPCWSTR>({ L"Automatic", L"en", L"zh-Hans" });
void SetBackCol(Control^ elem, System::Drawing::Color color, System::Windows::Forms::FlatStyle cbxStyle)
{
@@ -159,18 +162,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 +181,166 @@ 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 DropdownOption(L"launcher_language",LAUNCHER_SECTION,CONFIG_FILE, L"LAUNCHER_LANGUAGE_NAME",L"LAUNCHER_LANGUAGE_HINT", 0, languages),
//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;
}
};
+172 -313
View File
@@ -21,6 +21,8 @@ namespace Launcher {
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace System::Threading;
using namespace System::Globalization;
using namespace msclr::interop;
HWND hWnd;
@@ -34,13 +36,12 @@ namespace Launcher {
public:
ui(void)
{
SetLanguage();
InitializeComponent();
hWnd = (HWND)Control::Handle.ToPointer();
this->ClientSize = Drawing::Size(444, 323);
TabPadding^ tabpad = gcnew TabPadding(tabControl);
// if components.ini has no section name, add one
if (!IsLineInFile("[components]", COMPONENTS_FILE))
{
@@ -59,7 +60,19 @@ namespace Launcher {
PrependFile("[keyconfig]\n", KEYCONFIG_FILE);
}
// trick Optimus into switching to the NVIDIA GPU
if (cuInit != NULL) cuInit(0);
int argc = 1;
char* argv[1] = { (char*)"" };
glutInit(&argc, argv);
addOptions();
updateStyle();
}
void addOptions() {
this->panel_ScreenRes->SuspendLayout();
// populate options (patches) from array in framework
@@ -202,21 +215,11 @@ namespace Launcher {
this->panel_Custom->PerformLayout();
// trick Optimus into switching to the NVIDIA GPU
if (cuInit != NULL) cuInit(0);
int argc = 1;
char* argv[1] = { (char*)"" };
updateLagCompMsec();
updateStyle();
scanModpacks();
glutInit(&argc, argv);
int window = glutCreateWindow("glut"); // a context must be created to use glGetString
glutHideWindow();
@@ -236,9 +239,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 +256,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 +341,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 +373,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()
@@ -468,6 +474,26 @@ namespace Launcher {
tabPage_Modpacks->Enabled = false;
}
void updateLanguage() {
int language = GetPrivateProfileIntW(LAUNCHER_SECTION, L"launcher_language", FALSE, CONFIG_FILE);
if (nLanguage == language)
return;
nLanguage = language;
SetLanguage();
this->Controls->Clear();
this->InitializeComponent();
this->addOptions();
}
void SetLanguage() {
if (nLanguage == 0) {
Thread::CurrentThread->CurrentUICulture = gcnew CultureInfo(GetUserDefaultLCID());
} else if (nLanguage <= languages.size() - 1) {
Thread::CurrentThread->CurrentUICulture = CultureInfo::CreateSpecificCulture(gcnew String(languages[nLanguage]));
}
}
private:
@@ -639,52 +665,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 +707,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 +722,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 +873,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 +974,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 +1117,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 +1328,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 +1347,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");
@@ -1503,9 +1363,8 @@ private: System::Void button_github_Click(System::Object^ sender, System::EventA
}
private: System::Void button_Apply_Click(System::Object^ sender, System::EventArgs^ e) {
SaveSettings();
updateLanguage();
updateStyle();
//ShowWindow(hWnd, SW_HIDE);
//ShowWindow(hWnd, SW_SHOW);
}
private: System::Void Ui_KeyDown(System::Object^ sender, System::Windows::Forms::KeyEventArgs^ e) {
if (e->KeyCode == Keys::Escape) this->Close();
@@ -1555,7 +1414,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
File diff suppressed because it is too large Load Diff