mirror of
https://github.com/isledecomp/isle-portable.git
synced 2026-01-11 10:31:16 +00:00
parent
dcd4262f76
commit
48fd42ea36
@ -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)
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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
48
ISLE/islefiles.cpp
Normal 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",
|
||||
};
|
||||
@ -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; }
|
||||
|
||||
Loading…
Reference in New Issue
Block a user