From 9ebeda5c0ed9060b5b92ae494d4efe3d3211150a Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Mon, 9 Jun 2025 18:08:13 -0700 Subject: [PATCH] Add `Max LOD` and `Max Allowed Extras` configs (#273) * Add new config options * Fix defaults * Use global for `m_maxAllowedExtras` * Revert --- ISLE/isleapp.cpp | 19 ++++++++++++++----- ISLE/isleapp.h | 2 ++ .../src/common/legoanimationmanager.cpp | 2 +- LEGO1/realtime/realtimeview.h | 6 ++++-- 4 files changed, 21 insertions(+), 8 deletions(-) diff --git a/ISLE/isleapp.cpp b/ISLE/isleapp.cpp index eda0eb0b..7377e94e 100644 --- a/ISLE/isleapp.cpp +++ b/ISLE/isleapp.cpp @@ -126,6 +126,8 @@ IsleApp::IsleApp() LegoOmni::CreateInstance(); m_iniPath = NULL; + m_maxLod = RealtimeView::GetUserMaxLOD(); + m_maxAllowedExtras = m_islandQuality <= 1 ? 10 : 20; } // FUNCTION: ISLE 0x4011a0 @@ -574,7 +576,8 @@ MxResult IsleApp::SetupWindow() LegoWorldPresenter::configureLegoWorldPresenter(m_islandQuality); LegoBuildingManager::configureLegoBuildingManager(m_islandQuality); LegoROI::configureLegoROI(iVar10); - LegoAnimationManager::configureLegoAnimationManager(m_islandQuality); + LegoAnimationManager::configureLegoAnimationManager(m_maxAllowedExtras); + RealtimeView::SetUserMaxLOD(m_maxLod); if (LegoOmni::GetInstance()) { if (LegoOmni::GetInstance()->GetInputManager()) { LegoOmni::GetInstance()->GetInputManager()->SetUseJoystick(m_useJoystick); @@ -662,8 +665,12 @@ bool IsleApp::LoadConfig() iniparser_set(dict, "isle:Back Buffers in Video RAM", "-1"); - iniparser_set(dict, "isle:Island Quality", "1"); - iniparser_set(dict, "isle:Island Texture", "1"); + char buf[32]; + iniparser_set(dict, "isle:Island Quality", SDL_itoa(m_islandQuality, buf, 10)); + iniparser_set(dict, "isle:Island Texture", SDL_itoa(m_islandTexture, buf, 10)); + SDL_snprintf(buf, sizeof(buf), "%f", m_maxLod); + iniparser_set(dict, "isle:Max LOD", buf); + iniparser_set(dict, "isle:Max Allowed Extras", SDL_itoa(m_maxAllowedExtras, buf, 10)); iniparser_dump_ini(dict, iniFP); SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "New config written at '%s'", iniConfig); @@ -708,8 +715,10 @@ bool IsleApp::LoadConfig() } } - m_islandQuality = iniparser_getint(dict, "isle:Island Quality", 1); - m_islandTexture = iniparser_getint(dict, "isle:Island Texture", 1); + m_islandQuality = iniparser_getint(dict, "isle:Island Quality", m_islandQuality); + m_islandTexture = iniparser_getint(dict, "isle:Island Texture", m_islandTexture); + m_maxLod = iniparser_getdouble(dict, "isle:Max LOD", m_maxLod); + m_maxAllowedExtras = iniparser_getint(dict, "isle:Max Allowed Extras", m_maxAllowedExtras); const char* deviceId = iniparser_getstring(dict, "isle:3D Device ID", NULL); if (deviceId != NULL) { diff --git a/ISLE/isleapp.h b/ISLE/isleapp.h index c896c0af..e35d56a6 100644 --- a/ISLE/isleapp.h +++ b/ISLE/isleapp.h @@ -85,6 +85,8 @@ class IsleApp { char* m_mediaPath; char* m_iniPath; + MxFloat m_maxLod; + MxU32 m_maxAllowedExtras; }; extern IsleApp* g_isle; diff --git a/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp b/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp index ca2d0791..665c6459 100644 --- a/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp +++ b/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp @@ -503,7 +503,7 @@ void LegoAnimationManager::Init() m_unk0x1a = FALSE; m_tranInfoList = NULL; m_tranInfoList2 = NULL; - m_maxAllowedExtras = g_legoAnimationManagerConfig <= 1 ? 10 : 20; + m_maxAllowedExtras = g_legoAnimationManagerConfig; MxS32 i; for (i = 0; i < (MxS32) sizeOfArray(m_unk0x28); i++) { diff --git a/LEGO1/realtime/realtimeview.h b/LEGO1/realtime/realtimeview.h index c4bdbed8..eef7edb1 100644 --- a/LEGO1/realtime/realtimeview.h +++ b/LEGO1/realtime/realtimeview.h @@ -1,6 +1,8 @@ #ifndef REALTIMEVIEW_H #define REALTIMEVIEW_H +#include "lego1_export.h" + extern float g_userMaxLodPower; class RealtimeView { @@ -9,10 +11,10 @@ class RealtimeView { ~RealtimeView(); static float GetPartsThreshold(); - static float GetUserMaxLOD(); + LEGO1_EXPORT static float GetUserMaxLOD(); static void SetPartsThreshold(float); static void UpdateMaxLOD(); - static void SetUserMaxLOD(float); + LEGO1_EXPORT static void SetUserMaxLOD(float); static float GetUserMaxLodPower() { return g_userMaxLodPower; } };