Check for files (#352)

* Check for files

* Fix
This commit is contained in:
Christian Semmler 2025-06-20 15:45:21 -07:00 committed by GitHub
parent dcd4262f76
commit 48fd42ea36
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 91 additions and 51 deletions

View File

@ -468,6 +468,7 @@ if (ISLE_BUILD_APP)
add_executable(isle WIN32
ISLE/res/isle.rc
ISLE/isleapp.cpp
ISLE/islefiles.cpp
)
list(APPEND isle_targets isle)
if (WIN32)

View File

@ -11,6 +11,8 @@
static backend_t opfs = nullptr;
static backend_t fetchfs = nullptr;
extern const char* g_files[46];
void Emscripten_SetupConfig(const char* p_iniConfig)
{
if (!p_iniConfig || !*p_iniConfig) {
@ -60,52 +62,9 @@ void Emscripten_SetupFilesystem()
}
};
registerFile("/LEGO/Scripts/CREDITS.SI");
registerFile("/LEGO/Scripts/INTRO.SI");
registerFile("/LEGO/Scripts/NOCD.SI");
registerFile("/LEGO/Scripts/SNDANIM.SI");
registerFile("/LEGO/Scripts/Act2/ACT2MAIN.SI");
registerFile("/LEGO/Scripts/Act3/ACT3.SI");
registerFile("/LEGO/Scripts/Build/COPTER.SI");
registerFile("/LEGO/Scripts/Build/DUNECAR.SI");
registerFile("/LEGO/Scripts/Build/JETSKI.SI");
registerFile("/LEGO/Scripts/Build/RACECAR.SI");
registerFile("/LEGO/Scripts/Garage/GARAGE.SI");
registerFile("/LEGO/Scripts/Hospital/HOSPITAL.SI");
registerFile("/LEGO/Scripts/Infocntr/ELEVBOTT.SI");
registerFile("/LEGO/Scripts/Infocntr/HISTBOOK.SI");
registerFile("/LEGO/Scripts/Infocntr/INFODOOR.SI");
registerFile("/LEGO/Scripts/Infocntr/INFOMAIN.SI");
registerFile("/LEGO/Scripts/Infocntr/INFOSCOR.SI");
registerFile("/LEGO/Scripts/Infocntr/REGBOOK.SI");
registerFile("/LEGO/Scripts/Isle/ISLE.SI");
registerFile("/LEGO/Scripts/Isle/JUKEBOX.SI");
registerFile("/LEGO/Scripts/Isle/JUKEBOXW.SI");
registerFile("/LEGO/Scripts/Police/POLICE.SI");
registerFile("/LEGO/Scripts/Race/CARRACE.SI");
registerFile("/LEGO/Scripts/Race/CARRACER.SI");
registerFile("/LEGO/Scripts/Race/JETRACE.SI");
registerFile("/LEGO/Scripts/Race/JETRACER.SI");
registerFile("/LEGO/data/ACT1INF.DTA");
registerFile("/LEGO/data/ACT2INF.DTA");
registerFile("/LEGO/data/ACT3INF.DTA");
registerFile("/LEGO/data/BLDDINF.DTA");
registerFile("/LEGO/data/BLDHINF.DTA");
registerFile("/LEGO/data/BLDJINF.DTA");
registerFile("/LEGO/data/BLDRINF.DTA");
registerFile("/LEGO/data/GMAININF.DTA");
registerFile("/LEGO/data/HOSPINF.DTA");
registerFile("/LEGO/data/ICUBEINF.DTA");
registerFile("/LEGO/data/IELEVINF.DTA");
registerFile("/LEGO/data/IISLEINF.DTA");
registerFile("/LEGO/data/IMAININF.DTA");
registerFile("/LEGO/data/IREGINF.DTA");
registerFile("/LEGO/data/OBSTINF.DTA");
registerFile("/LEGO/data/PMAININF.DTA");
registerFile("/LEGO/data/RACCINF.DTA");
registerFile("/LEGO/data/RACJINF.DTA");
registerFile("/LEGO/data/WORLD.WDB");
registerFile("/LEGO/data/testinf.dta");
for (const char* file : g_files) {
registerFile(file);
}
if (GameState()->GetSavePath() && *GameState()->GetSavePath()) {
if (!opfs) {

View File

@ -87,6 +87,8 @@ MxS32 g_reqEnableRMDevice = FALSE;
SDL_Window* window;
extern const char* g_files[46];
// FUNCTION: ISLE 0x401000
IsleApp::IsleApp()
{
@ -689,9 +691,9 @@ MxResult IsleApp::SetupWindow()
GameState()->SetSavePath(m_savePath);
#ifdef __EMSCRIPTEN__
Emscripten_SetupFilesystem();
#endif
if (VerifyFilesystem() != SUCCESS) {
return FAILURE;
}
GameState()->SerializePlayersInfo(LegoStorage::c_read);
GameState()->SerializeScoreHistory(LegoStorage::c_read);
@ -1048,6 +1050,35 @@ MxResult IsleApp::ParseArguments(int argc, char** argv)
return SUCCESS;
}
MxResult IsleApp::VerifyFilesystem()
{
#ifdef __EMSCRIPTEN__
Emscripten_SetupFilesystem();
#else
for (const char* file : g_files) {
MxString path(&file[1]);
path.MapPathToFilesystem();
if (!SDL_GetPathInfo(path.GetData(), NULL)) {
char buffer[512];
SDL_snprintf(
buffer,
sizeof(buffer),
"\"LEGO® Island\" failed to start.\nPlease make sure the file %s is located in either diskpath or "
"cdpath.\nSDL error: %s",
file,
SDL_GetError()
);
Any_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "LEGO® Island Error", buffer, NULL);
return FAILURE;
}
}
#endif
return SUCCESS;
}
IDirect3DRMMiniwinDevice* GetD3DRMMiniwinDevice()
{
LegoVideoManager* videoManager = LegoOmni::GetInstance()->GetVideoManager();

View File

@ -55,6 +55,7 @@ class IsleApp {
void SetGameStarted(MxS32 p_gameStarted) { m_gameStarted = p_gameStarted; }
MxResult ParseArguments(int argc, char** argv);
MxResult VerifyFilesystem();
private:
char* m_hdPath; // 0x00

48
ISLE/islefiles.cpp Normal file
View File

@ -0,0 +1,48 @@
const char* g_files[46] = {
"/LEGO/Scripts/CREDITS.SI",
"/LEGO/Scripts/INTRO.SI",
"/LEGO/Scripts/NOCD.SI",
"/LEGO/Scripts/SNDANIM.SI",
"/LEGO/Scripts/Act2/ACT2MAIN.SI",
"/LEGO/Scripts/Act3/ACT3.SI",
"/LEGO/Scripts/Build/COPTER.SI",
"/LEGO/Scripts/Build/DUNECAR.SI",
"/LEGO/Scripts/Build/JETSKI.SI",
"/LEGO/Scripts/Build/RACECAR.SI",
"/LEGO/Scripts/Garage/GARAGE.SI",
"/LEGO/Scripts/Hospital/HOSPITAL.SI",
"/LEGO/Scripts/Infocntr/ELEVBOTT.SI",
"/LEGO/Scripts/Infocntr/HISTBOOK.SI",
"/LEGO/Scripts/Infocntr/INFODOOR.SI",
"/LEGO/Scripts/Infocntr/INFOMAIN.SI",
"/LEGO/Scripts/Infocntr/INFOSCOR.SI",
"/LEGO/Scripts/Infocntr/REGBOOK.SI",
"/LEGO/Scripts/Isle/ISLE.SI",
"/LEGO/Scripts/Isle/JUKEBOX.SI",
"/LEGO/Scripts/Isle/JUKEBOXW.SI",
"/LEGO/Scripts/Police/POLICE.SI",
"/LEGO/Scripts/Race/CARRACE.SI",
"/LEGO/Scripts/Race/CARRACER.SI",
"/LEGO/Scripts/Race/JETRACE.SI",
"/LEGO/Scripts/Race/JETRACER.SI",
"/LEGO/data/ACT1INF.DTA",
"/LEGO/data/ACT2INF.DTA",
"/LEGO/data/ACT3INF.DTA",
"/LEGO/data/BLDDINF.DTA",
"/LEGO/data/BLDHINF.DTA",
"/LEGO/data/BLDJINF.DTA",
"/LEGO/data/BLDRINF.DTA",
"/LEGO/data/GMAININF.DTA",
"/LEGO/data/HOSPINF.DTA",
"/LEGO/data/ICUBEINF.DTA",
"/LEGO/data/IELEVINF.DTA",
"/LEGO/data/IISLEINF.DTA",
"/LEGO/data/IMAININF.DTA",
"/LEGO/data/IREGINF.DTA",
"/LEGO/data/OBSTINF.DTA",
"/LEGO/data/PMAININF.DTA",
"/LEGO/data/RACCINF.DTA",
"/LEGO/data/RACJINF.DTA",
"/LEGO/data/WORLD.WDB",
"/LEGO/data/testinf.dta",
};

View File

@ -11,7 +11,7 @@ class MxString : public MxCore {
public:
MxString();
MxString(const MxString& p_str);
MxString(const char* p_str);
LEGO1_EXPORT MxString(const char* p_str);
MxString(const char* p_str, MxU16 p_maxlen);
LEGO1_EXPORT ~MxString() override;
@ -27,7 +27,7 @@ class MxString : public MxCore {
MxString& operator+=(const char* p_str);
static void CharSwap(char* p_a, char* p_b);
static void MapPathToFilesystem(char* p_path);
LEGO1_EXPORT static void MapPathToFilesystem(char* p_path);
// FUNCTION: BETA10 0x10017c50
char* GetData() const { return m_data; }