Merge branch 'master' into replace-si

This commit is contained in:
Christian Semmler 2025-08-14 20:29:28 -07:00 committed by GitHub
commit 7cd257e6be
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 473 additions and 137 deletions

View File

@ -7,12 +7,9 @@
DECOMP_SIZE_ASSERT(CDialog, 0x60)
DECOMP_SIZE_ASSERT(CAboutDialog, 0x60)
// FIXME: disable dialog resizing
// FUNCTION: CONFIG 0x00403c20
CAboutDialog::CAboutDialog() : QDialog()
{
m_ui = new Ui::AboutDialog;
m_ui->setupUi(this);
layout()->setSizeConstraint(QLayout::SetFixedSize);
}

View File

@ -65,6 +65,7 @@ CMainDialog::CMainDialog(QWidget* pParent) : QDialog(pParent)
connect(m_ui->sound3DCheckBox, &QCheckBox::toggled, this, &CMainDialog::OnCheckbox3DSound);
connect(m_ui->rumbleCheckBox, &QCheckBox::toggled, this, &CMainDialog::OnCheckboxRumble);
connect(m_ui->textureCheckBox, &QCheckBox::toggled, this, &CMainDialog::OnCheckboxTexture);
connect(m_ui->customAssetsCheckBox, &QCheckBox::toggled, this, &CMainDialog::OnCheckboxCustomAssets);
connect(m_ui->touchComboBox, &QComboBox::currentIndexChanged, this, &CMainDialog::TouchControlsChanged);
connect(m_ui->transitionTypeComboBox, &QComboBox::currentIndexChanged, this, &CMainDialog::TransitionTypeChanged);
connect(m_ui->exFullResComboBox, &QComboBox::currentIndexChanged, this, &CMainDialog::ExclusiveResolutionChanged);
@ -81,6 +82,11 @@ CMainDialog::CMainDialog(QWidget* pParent) : QDialog(pParent)
connect(m_ui->texturePathOpen, &QPushButton::clicked, this, &CMainDialog::SelectTexturePathDialog);
connect(m_ui->texturePath, &QLineEdit::editingFinished, this, &CMainDialog::TexturePathEdited);
connect(m_ui->addCustomAssetPath, &QPushButton::clicked, this, &CMainDialog::AddCustomAssetPath);
connect(m_ui->removeCustomAssetPath, &QPushButton::clicked, this, &CMainDialog::RemoveCustomAssetPath);
connect(m_ui->customAssetPaths, &QListWidget::currentRowChanged, this, &CMainDialog::SelectedPathChanged);
connect(m_ui->customAssetPaths, &QListWidget::itemActivated, this, &CMainDialog::EditCustomAssetPath);
connect(m_ui->maxLoDSlider, &QSlider::valueChanged, this, &CMainDialog::MaxLoDChanged);
connect(m_ui->maxLoDSlider, &QSlider::sliderMoved, this, &CMainDialog::MaxLoDChanged);
connect(m_ui->maxActorsSlider, &QSlider::valueChanged, this, &CMainDialog::MaxActorsChanged);
@ -96,8 +102,6 @@ CMainDialog::CMainDialog(QWidget* pParent) : QDialog(pParent)
connect(m_ui->yResSpinBox, &QSpinBox::valueChanged, this, &CMainDialog::YResChanged);
connect(m_ui->framerateSpinBox, &QSpinBox::valueChanged, this, &CMainDialog::FramerateChanged);
layout()->setSizeConstraint(QLayout::SetFixedSize);
if (currentConfigApp->m_ram_quality_limit != 0) {
m_modified = true;
const QString ramError = QString("Insufficient RAM!");
@ -308,10 +312,29 @@ void CMainDialog::UpdateInterface()
m_ui->savePath->setText(QString::fromStdString(currentConfigApp->m_save_path));
m_ui->textureCheckBox->setChecked(currentConfigApp->m_texture_load);
m_ui->texturePath->setText(QString::fromStdString(currentConfigApp->m_texture_path));
QString texture_path = QString::fromStdString(currentConfigApp->m_texture_path);
if (texture_path.startsWith(QDir::separator())) {
texture_path.remove(0, 1);
}
m_ui->texturePath->setText(texture_path);
m_ui->texturePath->setEnabled(currentConfigApp->m_texture_load);
m_ui->texturePathOpen->setEnabled(currentConfigApp->m_texture_load);
m_ui->customAssetsCheckBox->setChecked(currentConfigApp->m_custom_assets_enabled);
m_ui->customAssetPathContainer->setEnabled(currentConfigApp->m_custom_assets_enabled);
m_ui->customAssetPaths->setEnabled(currentConfigApp->m_custom_assets_enabled);
m_ui->addCustomAssetPath->setEnabled(currentConfigApp->m_custom_assets_enabled);
m_ui->removeCustomAssetPath->setEnabled(false);
m_ui->customAssetPaths->clear();
assetPaths = QString::fromStdString(currentConfigApp->m_custom_asset_path).split(u',');
for (QString& path : assetPaths) {
if (path.startsWith(QDir::separator())) {
path.remove(0, 1);
}
}
m_ui->customAssetPaths->addItems(assetPaths);
m_ui->aspectRatioComboBox->setCurrentIndex(currentConfigApp->m_aspect_ratio);
m_ui->xResSpinBox->setValue(currentConfigApp->m_x_res);
m_ui->yResSpinBox->setValue(currentConfigApp->m_y_res);
@ -442,6 +465,13 @@ void CMainDialog::OnCheckboxTexture(bool checked)
UpdateInterface();
}
void CMainDialog::OnCheckboxCustomAssets(bool checked)
{
currentConfigApp->m_custom_assets_enabled = checked;
m_modified = true;
UpdateInterface();
}
void CMainDialog::TouchControlsChanged(int index)
{
currentConfigApp->m_touch_scheme = index;
@ -475,14 +505,15 @@ void CMainDialog::SelectDataPathDialog()
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks
);
QDir data_dir = QDir(data_path);
if (data_dir.exists()) {
currentConfigApp->m_cd_path = data_dir.absolutePath().toStdString();
data_dir.cd(QString("DATA"));
data_dir.cd(QString("disk"));
currentConfigApp->m_base_path = data_dir.absolutePath().toStdString();
m_modified = true;
if (!data_path.isEmpty()) {
QDir data_dir = QDir(data_path);
if (data_dir.exists()) {
currentConfigApp->m_cd_path = data_dir.absolutePath().toStdString();
data_dir.cd(QString("DATA"));
data_dir.cd(QString("disk"));
currentConfigApp->m_base_path = data_dir.absolutePath().toStdString();
m_modified = true;
}
}
UpdateInterface();
}
@ -497,11 +528,12 @@ void CMainDialog::SelectSavePathDialog()
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks
);
QDir save_dir = QDir(save_path);
if (save_dir.exists()) {
currentConfigApp->m_save_path = save_dir.absolutePath().toStdString();
m_modified = true;
if (!save_path.isEmpty()) {
QDir save_dir = QDir(save_path);
if (save_dir.exists()) {
currentConfigApp->m_save_path = save_dir.absolutePath().toStdString();
m_modified = true;
}
}
UpdateInterface();
}
@ -517,13 +549,11 @@ void CMainDialog::DataPathEdited()
currentConfigApp->m_base_path = data_dir.absolutePath().toStdString();
m_modified = true;
}
UpdateInterface();
}
void CMainDialog::SavePathEdited()
{
QDir save_dir = QDir(m_ui->savePath->text());
if (save_dir.exists()) {
@ -563,7 +593,12 @@ void CMainDialog::AFChanged(int value)
void CMainDialog::SelectTexturePathDialog()
{
QDir data_path = QDir(QString::fromStdString(currentConfigApp->m_cd_path));
QString texture_path = QString::fromStdString(currentConfigApp->m_texture_path);
if (texture_path.startsWith(QDir::separator())) {
texture_path.remove(0, 1);
}
texture_path = data_path.absoluteFilePath(texture_path);
texture_path = QFileDialog::getExistingDirectory(
this,
tr("Open Directory"),
@ -571,10 +606,10 @@ void CMainDialog::SelectTexturePathDialog()
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks
);
QDir texture_dir = QDir(texture_path);
if (texture_dir.exists()) {
currentConfigApp->m_texture_path = texture_dir.absolutePath().toStdString();
if (!texture_path.isEmpty() && data_path.exists(texture_path)) {
texture_path = data_path.relativeFilePath(texture_path);
texture_path.prepend(QDir::separator());
currentConfigApp->m_texture_path = texture_path.toStdString();
m_modified = true;
}
UpdateInterface();
@ -582,15 +617,83 @@ void CMainDialog::SelectTexturePathDialog()
void CMainDialog::TexturePathEdited()
{
QDir texture_dir = QDir(m_ui->texturePath->text());
QString texture_path = m_ui->texturePath->text();
QDir data_path = QDir(QString::fromStdString(currentConfigApp->m_cd_path));
if (texture_dir.exists()) {
currentConfigApp->m_texture_path = texture_dir.absolutePath().toStdString();
if (texture_path.startsWith(QDir::separator())) {
texture_path.remove(0, 1);
}
if (data_path.exists(data_path.absoluteFilePath(texture_path))) {
texture_path = data_path.relativeFilePath(texture_path);
texture_path.prepend(QDir::separator());
currentConfigApp->m_texture_path = texture_path.toStdString();
m_modified = true;
}
UpdateInterface();
}
void CMainDialog::AddCustomAssetPath()
{
QDir data_path = QDir(QString::fromStdString(currentConfigApp->m_cd_path));
QStringList new_files = QFileDialog::getOpenFileNames(
this,
"Select one or more files to open",
data_path.absolutePath(),
"Interleaf files (*.si)"
);
if (!new_files.isEmpty()) {
for (QString& item : new_files) {
item = data_path.relativeFilePath(item);
}
assetPaths += new_files;
m_modified = true;
}
UpdateAssetPaths();
}
void CMainDialog::RemoveCustomAssetPath()
{
assetPaths.removeAt(m_ui->customAssetPaths->currentRow());
m_modified = true;
UpdateAssetPaths();
}
void CMainDialog::SelectedPathChanged(int currentRow)
{
m_ui->removeCustomAssetPath->setEnabled(currentRow != -1 ? true : false);
}
void CMainDialog::EditCustomAssetPath()
{
QDir data_path = QDir(QString::fromStdString(currentConfigApp->m_cd_path));
QString prev_asset_path = assetPaths[m_ui->customAssetPaths->currentRow()];
QString new_file = QFileDialog::getOpenFileName(
this,
"Open File",
data_path.absoluteFilePath(prev_asset_path),
"Interleaf files (*.si)"
);
if (!new_file.isEmpty()) {
new_file = data_path.relativeFilePath(new_file);
assetPaths[m_ui->customAssetPaths->currentRow()] = new_file;
m_modified = true;
}
UpdateAssetPaths();
}
void CMainDialog::UpdateAssetPaths()
{
assetPaths.removeDuplicates();
for (QString& path : assetPaths) {
if (!path.startsWith(QDir::separator())) {
path.prepend(QDir::separator());
}
}
currentConfigApp->m_custom_asset_path = assetPaths.join(u',').toStdString();
UpdateInterface();
}
void CMainDialog::AspectRatioChanged(int index)
{
currentConfigApp->m_aspect_ratio = index;

View File

@ -29,6 +29,7 @@ class CMainDialog : public QDialog {
private:
bool m_modified = false;
bool m_advanced = false;
QStringList assetPaths = QStringList();
Ui::MainDialog* m_ui = nullptr;
SDL_DisplayMode** displayModes;
@ -48,6 +49,7 @@ private slots:
void OnCheckboxMusic(bool checked);
void OnCheckboxRumble(bool checked);
void OnCheckboxTexture(bool checked);
void OnCheckboxCustomAssets(bool checked);
void TouchControlsChanged(int index);
void TransitionTypeChanged(int index);
void ExclusiveResolutionChanged(int index);
@ -64,6 +66,11 @@ private slots:
void AFChanged(int value);
void SelectTexturePathDialog();
void TexturePathEdited();
void AddCustomAssetPath();
void RemoveCustomAssetPath();
void SelectedPathChanged(int currentRow);
void EditCustomAssetPath();
void UpdateAssetPaths();
void XResChanged(int i);
void YResChanged(int i);
void AspectRatioChanged(int index);

View File

@ -89,7 +89,9 @@ bool CConfigApp::InitInstance()
m_haptic = TRUE;
m_touch_scheme = 2;
m_texture_load = TRUE;
m_texture_path = "/textures/";
m_texture_path = "textures/";
m_custom_assets_enabled = TRUE;
m_custom_asset_path = "assets/widescreen.si";
int totalRamMiB = SDL_GetSystemRAM();
if (totalRamMiB < 12) {
m_ram_quality_limit = 2;
@ -188,6 +190,8 @@ bool CConfigApp::ReadRegisterSettings()
m_anisotropy = iniparser_getint(dict, "isle:Anisotropic", m_anisotropy);
m_texture_load = iniparser_getboolean(dict, "extensions:texture loader", m_texture_load);
m_texture_path = iniparser_getstring(dict, "texture loader:texture path", m_texture_path.c_str());
m_custom_assets_enabled = iniparser_getboolean(dict, "extensions:si loader", m_custom_assets_enabled);
m_custom_asset_path = iniparser_getstring(dict, "si loader:files", m_custom_asset_path.c_str());
m_aspect_ratio = iniparser_getint(dict, "isle:Aspect Ratio", m_aspect_ratio);
m_x_res = iniparser_getint(dict, "isle:Horizontal Resolution", m_x_res);
m_y_res = iniparser_getint(dict, "isle:Vertical Resolution", m_y_res);
@ -365,6 +369,8 @@ void CConfigApp::WriteRegisterSettings() const
iniparser_set(dict, "isle", NULL);
iniparser_set(dict, "extensions", NULL);
iniparser_set(dict, "texture loader", NULL);
iniparser_set(dict, "si loader", NULL);
if (m_device_enumerator->FormatDeviceName(buffer, m_driver, m_device) >= 0) {
iniparser_set(dict, "isle:3D Device ID", buffer);
}
@ -394,6 +400,9 @@ void CConfigApp::WriteRegisterSettings() const
SetIniBool(dict, "extensions:texture loader", m_texture_load);
iniparser_set(dict, "texture loader:texture path", m_texture_path.c_str());
SetIniBool(dict, "extensions:si loader", m_custom_assets_enabled);
iniparser_set(dict, "si loader:files", m_custom_asset_path.c_str());
SetIniBool(dict, "isle:Back Buffers in Video RAM", m_3d_video_ram);
SetIniInt(dict, "isle:Island Quality", m_model_quality);
@ -451,8 +460,8 @@ CConfigApp g_theApp;
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
QCoreApplication::setApplicationName("config");
QCoreApplication::setApplicationVersion("1.0");
QCoreApplication::setApplicationName("Isle-Config");
QCoreApplication::setApplicationVersion("2.0");
QCommandLineParser parser;
parser.setApplicationDescription("Configure LEGO Island");
@ -470,7 +479,7 @@ int main(int argc, char* argv[])
if (parser.isSet(iniOption)) {
g_theApp.SetIniPath(parser.value(iniOption).toStdString());
}
qInfo() << "Ini path =" << QString::fromStdString(g_theApp.GetIniPath());
qInfo() << "INI path =" << QString::fromStdString(g_theApp.GetIniPath());
int result = 1;
if (g_theApp.InitInstance()) {

View File

@ -87,7 +87,9 @@ class CConfigApp {
int m_texture_quality;
bool m_music;
bool m_texture_load;
bool m_custom_assets_enabled;
std::string m_texture_path;
std::string m_custom_asset_path;
std::string m_iniPath;
std::string m_base_path;
std::string m_cd_path;

View File

@ -14,6 +14,9 @@
<string>About Configure LEGO© Island</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,1,0">
<property name="sizeConstraint">
<enum>QLayout::SizeConstraint::SetFixedSize</enum>
</property>
<item>
<widget class="QLabel" name="houseIcon">
<property name="sizePolicy">
@ -36,14 +39,14 @@
<item>
<widget class="QLabel" name="configureLabel">
<property name="text">
<string>Configure LEGO Island Version 1.0</string>
<string>Configure LEGO Island Version 2.0</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="copyrightLabel">
<property name="text">
<string>Copyright © 1997 mindscape</string>
<string>Copyright © 2025</string>
</property>
</widget>
</item>
@ -53,7 +56,7 @@
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="standardButtons">
<set>QDialogButtonBox::Ok</set>
<set>QDialogButtonBox::StandardButton::Ok</set>
</property>
</widget>
</item>

46
CONFIG/res/add.svg Normal file
View File

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 16 16"
version="1.1"
id="svg1"
sodipodi:docname="add.svg"
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:zoom="21.496181"
inkscape:cx="-4.2333101"
inkscape:cy="11.141514"
inkscape:window-width="1920"
inkscape:window-height="1008"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg1" />
<defs
id="defs3051">
<style
type="text/css"
id="current-color-scheme">
.ColorScheme-Text {
color:#232629;
}
</style>
</defs>
<path
style="fill:#27ae60;fill-opacity:1;stroke:none;stroke-width:0.999911"
d="M 7,3 V 8 H 2 v 1 h 5 v 5 H 8 V 9 h 5 V 8 H 8 V 3 Z"
class="ColorScheme-Text"
id="path1"
sodipodi:nodetypes="ccccccccccccc" />
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -1,7 +1,9 @@
<RCC>
<qresource prefix="/">
<file>shark.png</file>
<file>lego1.png</file>
<file>lego2.png</file>
</qresource>
</RCC>
<qresource prefix="/">
<file>add.svg</file>
<file>remove.svg</file>
<file>shark.png</file>
<file>lego1.png</file>
<file>lego2.png</file>
</qresource>
</RCC>

View File

@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>600</width>
<width>640</width>
<height>480</height>
</rect>
</property>
@ -24,6 +24,9 @@
<normaloff>:/lego1.png</normaloff>:/lego1.png</iconset>
</property>
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,0">
<property name="sizeConstraint">
<enum>QLayout::SizeConstraint::SetFixedSize</enum>
</property>
<item>
<widget class="QLabel" name="sharkImageLabel">
<property name="sizePolicy">
@ -72,6 +75,12 @@
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="minimumSize">
<size>
<width>425</width>
<height>0</height>
</size>
</property>
<property name="currentIndex">
<number>0</number>
</property>
@ -80,30 +89,6 @@
<string>Game</string>
</attribute>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="2">
<layout class="QVBoxLayout" name="gameSettingsCheckBoxes">
<item>
<widget class="QCheckBox" name="sound3DCheckBox">
<property name="toolTip">
<string>Enable 3D positional audio effects.</string>
</property>
<property name="text">
<string>3D Sound</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="musicCheckBox">
<property name="toolTip">
<string>Enable in-game background music.</string>
</property>
<property name="text">
<string>Music</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0" colspan="3">
<spacer name="verticalSpacer">
<property name="orientation">
@ -283,6 +268,32 @@ Set this to the CD image root.</string>
</layout>
</widget>
</item>
<item row="1" column="2">
<widget class="QWidget" name="gameSettingsCheckBoxes" native="true">
<layout class="QVBoxLayout" name="layout">
<item>
<widget class="QCheckBox" name="sound3DCheckBox">
<property name="toolTip">
<string>Enable 3D positional audio effects.</string>
</property>
<property name="text">
<string>3D Sound</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="musicCheckBox">
<property name="toolTip">
<string>Enable in-game background music.</string>
</property>
<property name="text">
<string>Music</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="graphicsTab">
@ -766,7 +777,10 @@ The game will gradually increase the number of actors until this maximum is reac
</sizepolicy>
</property>
<property name="text">
<string>x</string>
<string>✕</string>
</property>
<property name="textFormat">
<enum>Qt::TextFormat::PlainText</enum>
</property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignCenter</set>
@ -1012,72 +1026,210 @@ The game will gradually increase the number of actors until this maximum is reac
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_8">
<item>
<widget class="QGroupBox" name="textureLoader">
<property name="toolTip">
<string>Settings for Texture Loader extension.</string>
<widget class="QScrollArea" name="scrollArea">
<property name="widgetResizable">
<bool>true</bool>
</property>
<property name="title">
<string>Texture Loader</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QCheckBox" name="textureCheckBox">
<property name="text">
<string>Enabled</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="texturePath">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Path to texture replacements.</string>
</property>
<property name="placeholderText">
<string>textures/</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="texturePathOpen">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>Open</string>
</property>
</widget>
</item>
</layout>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>449</width>
<height>369</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_10">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QGroupBox" name="textureLoader">
<property name="toolTip">
<string>Settings for Texture Loader extension.</string>
</property>
<property name="title">
<string>Texture Loader</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QCheckBox" name="textureCheckBox">
<property name="text">
<string>Enabled</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="texturePath">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Path to texture replacements. Relative to the Data Path.</string>
</property>
<property name="placeholderText">
<string>textures/</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="texturePathOpen">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>Open</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="customAssets">
<property name="toolTip">
<string>Settings for Custom Assets.</string>
</property>
<property name="title">
<string>Custom Assets</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_12">
<item>
<widget class="QCheckBox" name="customAssetsCheckBox">
<property name="text">
<string>Enabled</string>
</property>
</widget>
</item>
<item>
<widget class="QWidget" name="customAssetPathContainer" native="true">
<property name="enabled">
<bool>false</bool>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="1">
<widget class="QPushButton" name="addCustomAssetPath">
<property name="enabled">
<bool>false</bool>
</property>
<property name="minimumSize">
<size>
<width>28</width>
<height>28</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>28</width>
<height>28</height>
</size>
</property>
<property name="toolTip">
<string>Add path.</string>
</property>
<property name="icon">
<iconset resource="config.qrc">
<normaloff>:/add.svg</normaloff>:/add.svg</iconset>
</property>
</widget>
</item>
<item row="0" column="0" rowspan="3">
<widget class="QListWidget" name="customAssetPaths">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Paths used by the SI Loader extension.
Double-click a path to edit it.</string>
</property>
<property name="sizeAdjustPolicy">
<enum>QAbstractScrollArea::SizeAdjustPolicy::AdjustToContentsOnFirstShow</enum>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="removeCustomAssetPath">
<property name="enabled">
<bool>false</bool>
</property>
<property name="minimumSize">
<size>
<width>28</width>
<height>28</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>28</width>
<height>28</height>
</size>
</property>
<property name="toolTip">
<string>Remove path.</string>
</property>
<property name="icon">
<iconset resource="config.qrc">
<normaloff>:/remove.svg</normaloff>:/remove.svg</iconset>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget>
</item>
<item>
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget>
@ -1176,9 +1328,14 @@ The game will gradually increase the number of actors until this maximum is reac
<tabstop>AFSlider</tabstop>
<tabstop>touchComboBox</tabstop>
<tabstop>rumbleCheckBox</tabstop>
<tabstop>scrollArea</tabstop>
<tabstop>textureCheckBox</tabstop>
<tabstop>texturePath</tabstop>
<tabstop>texturePathOpen</tabstop>
<tabstop>customAssetsCheckBox</tabstop>
<tabstop>customAssetPaths</tabstop>
<tabstop>addCustomAssetPath</tabstop>
<tabstop>removeCustomAssetPath</tabstop>
<tabstop>okButton</tabstop>
<tabstop>launchButton</tabstop>
<tabstop>cancelButton</tabstop>

10
CONFIG/res/remove.svg Normal file
View File

@ -0,0 +1,10 @@
<svg version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
<style
type="text/css"
id="current-color-scheme">
.ColorScheme-NegativeText {
color:#da4453;
}
</style>
<path class="ColorScheme-NegativeText" d="M 2.6992188,2 2,2.6992188 7.3007812,8 2,13.300781 C 2,13.300781 2.7082187,13.995 2.6992188,14 L 8,8.6992188 13.300781,14 C 13.291781,13.995 14,13.300781 14,13.300781 L 8.6992188,8 14,2.6992188 13.300781,2 8,7.3007812 Z" fill="currentColor"/>
</svg>

After

Width:  |  Height:  |  Size: 526 B

View File

@ -1391,12 +1391,12 @@ SDL_AppResult IsleApp::ParseArguments(int argc, char** argv)
consumed = 1;
}
else if (strcmp(argv[i], "--help") == 0) {
DisplayArgumentHelp();
DisplayArgumentHelp(argv[0]);
return SDL_APP_SUCCESS;
}
if (consumed <= 0) {
SDL_Log("Invalid argument(s): %s", argv[i]);
DisplayArgumentHelp();
DisplayArgumentHelp(argv[0]);
return SDL_APP_FAILURE;
}
}
@ -1404,9 +1404,9 @@ SDL_AppResult IsleApp::ParseArguments(int argc, char** argv)
return SDL_APP_CONTINUE;
}
void IsleApp::DisplayArgumentHelp()
void IsleApp::DisplayArgumentHelp(const char* p_execName)
{
SDL_Log("Usage: isle [options]");
SDL_Log("Usage: %s [options]", p_execName);
SDL_Log("Options:");
SDL_Log(" --ini <path> Set custom path to .ini config");
#ifdef ISLE_DEBUG

View File

@ -99,7 +99,7 @@ class IsleApp {
const CursorBitmap* m_cursorCurrentBitmap;
char* m_mediaPath;
MxFloat m_cursorSensitivity;
void DisplayArgumentHelp();
void DisplayArgumentHelp(const char* p_execName);
char* m_iniPath;
MxFloat m_maxLod;

View File

@ -68,10 +68,10 @@ class DebugViewer {
static void InsideBuildingManager()
{
auto buildingManager = Lego()->GetBuildingManager();
ImGui::Text("nextVariant: %d", buildingManager->m_nextVariant);
ImGui::Text("nextVariant: %u", buildingManager->m_nextVariant);
ImGui::Text("m_boundariesDetermined: %d", buildingManager->m_boundariesDetermined);
ImGui::Text("m_hideAfterAnimation: %d", buildingManager->m_hideAfterAnimation);
ImGui::Text("#Animated Entries", buildingManager->m_numEntries);
ImGui::Text("#Animated Entries: %d", buildingManager->m_numEntries);
if (buildingManager->m_numEntries) {
if (ImGui::BeginTable("Animated Entries", 6, ImGuiTableFlags_Borders)) {
ImGui::TableSetupColumn("ROI Name");