diff --git a/CONFIG/MainDlg.cpp b/CONFIG/MainDlg.cpp
index a789a542..4df74f16 100644
--- a/CONFIG/MainDlg.cpp
+++ b/CONFIG/MainDlg.cpp
@@ -58,6 +58,7 @@ CMainDialog::CMainDialog(QWidget* pParent) : QDialog(pParent)
connect(m_ui->musicCheckBox, &QCheckBox::toggled, this, &CMainDialog::OnCheckboxMusic);
connect(m_ui->sound3DCheckBox, &QCheckBox::toggled, this, &CMainDialog::OnCheckbox3DSound);
connect(m_ui->fullscreenCheckBox, &QCheckBox::toggled, this, &CMainDialog::OnCheckboxFullscreen);
+ connect(m_ui->exclusiveFullscreenCheckbox, &QCheckBox::toggled, this, &CMainDialog::OnCheckboxExclusiveFullscreen);
connect(m_ui->rumbleCheckBox, &QCheckBox::toggled, this, &CMainDialog::OnCheckboxRumble);
connect(m_ui->textureCheckBox, &QCheckBox::toggled, this, &CMainDialog::OnCheckboxTexture);
connect(m_ui->touchComboBox, &QComboBox::currentIndexChanged, this, &CMainDialog::TouchControlsChanged);
@@ -259,6 +260,8 @@ void CMainDialog::UpdateInterface()
}
m_ui->musicCheckBox->setChecked(currentConfigApp->m_music);
m_ui->fullscreenCheckBox->setChecked(currentConfigApp->m_full_screen);
+ m_ui->exclusiveFullscreenCheckbox->setEnabled(currentConfigApp->m_full_screen);
+ m_ui->exclusiveFullscreenCheckbox->setChecked(currentConfigApp->m_exclusive_full_screen);
m_ui->rumbleCheckBox->setChecked(currentConfigApp->m_haptic);
m_ui->touchComboBox->setCurrentIndex(currentConfigApp->m_touch_scheme);
m_ui->transitionTypeComboBox->setCurrentIndex(currentConfigApp->m_transition_type);
@@ -344,6 +347,14 @@ void CMainDialog::OnCheckboxMusic(bool checked)
void CMainDialog::OnCheckboxFullscreen(bool checked)
{
currentConfigApp->m_full_screen = checked;
+ m_ui->exclusiveFullscreenCheckbox->setEnabled(checked);
+ m_modified = true;
+ UpdateInterface();
+}
+
+void CMainDialog::OnCheckboxExclusiveFullscreen(bool checked)
+{
+ currentConfigApp->m_exclusive_full_screen = checked;
m_modified = true;
UpdateInterface();
}
diff --git a/CONFIG/MainDlg.h b/CONFIG/MainDlg.h
index 75f154bb..ece4dbfd 100644
--- a/CONFIG/MainDlg.h
+++ b/CONFIG/MainDlg.h
@@ -42,6 +42,7 @@ private slots:
void OnRadiobuttonTextureHighQuality(bool checked);
void OnCheckboxMusic(bool checked);
void OnCheckboxFullscreen(bool checked);
+ void OnCheckboxExclusiveFullscreen(bool checked);
void OnCheckboxRumble(bool checked);
void OnCheckboxTexture(bool checked);
void TouchControlsChanged(int index);
diff --git a/CONFIG/config.cpp b/CONFIG/config.cpp
index 52634d76..6877900c 100644
--- a/CONFIG/config.cpp
+++ b/CONFIG/config.cpp
@@ -74,6 +74,7 @@ bool CConfigApp::InitInstance()
m_driver = NULL;
m_device = NULL;
m_full_screen = TRUE;
+ m_exclusive_full_screen = FALSE;
m_transition_type = 3; // 3: Mosaic
m_wide_view_angle = TRUE;
m_use_joystick = TRUE;
@@ -165,6 +166,7 @@ bool CConfigApp::ReadRegisterSettings()
m_display_bit_depth = iniparser_getint(dict, "isle:Display Bit Depth", -1);
m_flip_surfaces = iniparser_getboolean(dict, "isle:Flip Surfaces", m_flip_surfaces);
m_full_screen = iniparser_getboolean(dict, "isle:Full Screen", m_full_screen);
+ m_exclusive_full_screen = iniparser_getboolean(dict, "isle:Exclusive Full Screen", m_exclusive_full_screen);
m_transition_type = iniparser_getint(dict, "isle:Transition Type", m_transition_type);
m_touch_scheme = iniparser_getint(dict, "isle:Touch Scheme", m_touch_scheme);
m_3d_video_ram = iniparser_getboolean(dict, "isle:Back Buffers in Video RAM", m_3d_video_ram);
@@ -337,6 +339,7 @@ void CConfigApp::WriteRegisterSettings() const
SetIniInt(dict, "isle:Display Bit Depth", m_display_bit_depth);
SetIniBool(dict, "isle:Flip Surfaces", m_flip_surfaces);
SetIniBool(dict, "isle:Full Screen", m_full_screen);
+ SetIniBool(dict, "isle:Exclusive Full Screen", m_exclusive_full_screen);
SetIniBool(dict, "isle:Wide View Angle", m_wide_view_angle);
SetIniInt(dict, "isle:Transition Type", m_transition_type);
diff --git a/CONFIG/config.h b/CONFIG/config.h
index a63e8fa4..ad3321ac 100644
--- a/CONFIG/config.h
+++ b/CONFIG/config.h
@@ -69,6 +69,7 @@ class CConfigApp {
int m_display_bit_depth;
bool m_flip_surfaces;
bool m_full_screen;
+ bool m_exclusive_full_screen;
int m_transition_type;
bool m_3d_video_ram;
bool m_wide_view_angle;
diff --git a/CONFIG/res/maindialog.ui b/CONFIG/res/maindialog.ui
index 1e42b729..f7480614 100644
--- a/CONFIG/res/maindialog.ui
+++ b/CONFIG/res/maindialog.ui
@@ -605,6 +605,9 @@ The game will gradually increase the number of actors until this maximum is reac
-
+
+ <html><head/><body><p>Maximum framerate. Values above 100fps are untested.</p></body></html>
+
fps
@@ -620,14 +623,31 @@ The game will gradually increase the number of actors until this maximum is reac
-
-
-
- Toggle fullscreen display mode.
-
-
- Fullscreen
-
-
+
+
-
+
+
+ Toggle fullscreen display mode.
+
+
+ Fullscreen
+
+
+
+ -
+
+
+ false
+
+
+ Grants the app full control of the display for better performance and lower input lag. May cause slower alt-tabbing.
+
+
+ Exclusive Fullscreen
+
+
+
+
@@ -640,6 +660,9 @@ The game will gradually increase the number of actors until this maximum is reac
-
+
+ <html><head/><body><p>The aspect ratio you intend to use.<br/>Select <span style=" font-weight:700;">Custom</span> to define your own width and height.<br/>Has no effect on the game itself.</p></body></html>
+
0
@@ -675,6 +698,9 @@ The game will gradually increase the number of actors until this maximum is reac
0
+
+ <html><head/><body><p>Horizontal resolution. </p><p>Locked to aspect ratio, unless <span style=" font-weight:700;">Custom</span> is select as the aspect ratio.</p></body></html>
+
Qt::AlignmentFlag::AlignCenter
@@ -719,6 +745,9 @@ The game will gradually increase the number of actors until this maximum is reac
0
+
+ <html><head/><body><p>Vertical resolution. </p><p>If an aspect ratio other than <span style=" font-weight:700;">Custom</span> is selected, this directly affects the horizontal resolution.</p></body></html>
+
Qt::AlignmentFlag::AlignCenter
@@ -827,6 +856,9 @@ The game will gradually increase the number of actors until this maximum is reac
-
+
+ Settings for Texture Loader extension.
+
Texture Loader Extension
diff --git a/ISLE/isleapp.cpp b/ISLE/isleapp.cpp
index 9455e91d..bda3ec98 100644
--- a/ISLE/isleapp.cpp
+++ b/ISLE/isleapp.cpp
@@ -179,6 +179,7 @@ IsleApp::IsleApp()
m_xRes = 640;
m_yRes = 480;
m_frameRate = 100.0f;
+ m_exclusiveFullScreen = FALSE;
}
// FUNCTION: ISLE 0x4011a0
@@ -841,7 +842,7 @@ MxResult IsleApp::SetupWindow()
window = SDL_CreateWindowWithProperties(props);
- if (m_fullScreen) {
+ if (m_exclusiveFullScreen && m_fullScreen) {
SDL_DisplayMode closestMode;
SDL_DisplayID displayID = SDL_GetDisplayForWindow(window);
bool findModeSuccess =
@@ -1007,6 +1008,7 @@ bool IsleApp::LoadConfig()
iniparser_set(dict, "isle:Flip Surfaces", m_flipSurfaces ? "true" : "false");
iniparser_set(dict, "isle:Full Screen", m_fullScreen ? "true" : "false");
+ iniparser_set(dict, "isle:Exclusive Full Screen", m_exclusiveFullScreen ? "true" : "false");
iniparser_set(dict, "isle:Wide View Angle", m_wideViewAngle ? "true" : "false");
iniparser_set(dict, "isle:3DSound", m_use3dSound ? "true" : "false");
@@ -1072,6 +1074,7 @@ bool IsleApp::LoadConfig()
m_flipSurfaces = iniparser_getboolean(dict, "isle:Flip Surfaces", m_flipSurfaces);
m_fullScreen = iniparser_getboolean(dict, "isle:Full Screen", m_fullScreen);
+ m_exclusiveFullScreen = iniparser_getboolean(dict, "isle:Exclusive Full Screen", m_exclusiveFullScreen);
m_wideViewAngle = iniparser_getboolean(dict, "isle:Wide View Angle", m_wideViewAngle);
m_use3dSound = iniparser_getboolean(dict, "isle:3DSound", m_use3dSound);
m_useMusic = iniparser_getboolean(dict, "isle:Music", m_useMusic);
diff --git a/ISLE/isleapp.h b/ISLE/isleapp.h
index 380ad719..946f0611 100644
--- a/ISLE/isleapp.h
+++ b/ISLE/isleapp.h
@@ -72,7 +72,7 @@ class IsleApp {
char* m_cdPath; // 0x04
char* m_deviceId; // 0x08
char* m_savePath; // 0x0c
- MxS32 m_fullScreen; // 0x10
+ MxBool m_fullScreen; // 0x10
MxS32 m_flipSurfaces; // 0x14
MxS32 m_backBuffersInVram; // 0x18
MxS32 m_using8bit; // 0x1c
@@ -111,6 +111,7 @@ class IsleApp {
MxS32 m_xRes;
MxS32 m_yRes;
MxFloat m_frameRate;
+ MxBool m_exclusiveFullScreen;
};
extern IsleApp* g_isle;