Common::Error GrimEngine::run() { // Try to see if we have the EMI Mac installer present // Currently, this requires the data fork to be standalone if (getGameType() == GType_MONKEY4) { if (SearchMan.hasFile("Monkey Island 4 Installer")) { StuffItArchive *archive = new StuffItArchive(); if (archive->open("Monkey Island 4 Installer")) SearchMan.add("Monkey Island 4 Installer", archive, 0, true); else delete archive; } if (SearchMan.hasFile("EFMI Installer")) { StuffItArchive *archive = new StuffItArchive(); if (archive->open("EFMI Installer")) SearchMan.add("EFMI Installer", archive, 0, true); else delete archive; } } ConfMan.registerDefault("check_gamedata", true); if (ConfMan.getBool("check_gamedata")) { MD5CheckDialog d; if (!d.runModal()) { Common::String confirmString = Common::String::format(_( "ResidualVM found some problems with your game data files.\n" "Running ResidualVM nevertheless may cause game bugs or even crashes.\n" "Do you still want to run %s?"), GType_MONKEY4 == getGameType() ? _("Escape From Monkey Island") : _("Grim Fandango") ); GUI::MessageDialog msg(confirmString, _("Yes"), _("No")); if (!msg.runModal()) { return Common::kUserCanceled; } } ConfMan.setBool("check_gamedata", false); ConfMan.flushToDisk(); } g_resourceloader = new ResourceLoader(); bool demo = getGameFlags() & ADGF_DEMO; if (getGameType() == GType_GRIM) g_movie = CreateSmushPlayer(demo); else if (getGameType() == GType_MONKEY4) { if (_gamePlatform == Common::kPlatformPS2) g_movie = CreateMpegPlayer(); else g_movie = CreateBinkPlayer(demo); } if (getGameType() == GType_GRIM) { g_imuse = new Imuse(20, demo); g_emiSound = nullptr; } else if (getGameType() == GType_MONKEY4) { g_emiSound = new EMISound(20); g_imuse = nullptr; } g_sound = new SoundPlayer(); bool fullscreen = ConfMan.getBool("fullscreen"); g_driver = createRenderer(640, 480, fullscreen); if (getGameType() == GType_MONKEY4 && SearchMan.hasFile("AMWI.m4b")) { // Play EMI Mac Aspyr logo playAspyrLogo(); } Bitmap *splash_bm = nullptr; if (!(_gameFlags & ADGF_DEMO) && getGameType() == GType_GRIM) splash_bm = Bitmap::create("splash.bm"); else if ((_gameFlags & ADGF_DEMO) && getGameType() == GType_MONKEY4) splash_bm = Bitmap::create("splash.til"); else if (getGamePlatform() == Common::kPlatformPS2 && getGameType() == GType_MONKEY4) splash_bm = Bitmap::create("load.tga"); g_driver->clearScreen(); if (splash_bm != nullptr) splash_bm->draw(); // This flipBuffer() may make the OpenGL renderer show garbage instead of the splash, // while the TinyGL renderer needs it. if (_softRenderer) g_driver->flipBuffer(); LuaBase *lua = createLua(); lua->registerOpcodes(); lua->registerLua(); // One version of the demo doesn't set the demo flag in scripts. if (getGameType() == GType_GRIM && _gameFlags & ADGF_DEMO) { lua->forceDemo(); } //Initialize Localizer first. In system-script are already localizeable Strings g_localizer = new Localizer(); lua->loadSystemScript(); lua->boot(); _savegameLoadRequest = false; _savegameSaveRequest = false; // Load game from specified slot, if any if (ConfMan.hasKey("save_slot")) { loadGameState(ConfMan.getInt("save_slot")); } g_grim->setMode(NormalMode); delete splash_bm; g_grim->mainLoop(); return Common::kNoError; }
Common::Error GrimEngine::run() { // Try to see if we have the EMI Mac installer present // Currently, this requires the data fork to be standalone if (getGameType() == GType_MONKEY4 && SearchMan.hasFile("Monkey Island 4 Installer")) { StuffItArchive *archive = new StuffItArchive(); if (archive->open("Monkey Island 4 Installer")) SearchMan.add("Monkey Island 4 Installer", archive, 0, true); else delete archive; } g_resourceloader = new ResourceLoader(); bool demo = getGameFlags() & ADGF_DEMO; if (getGameType() == GType_GRIM) g_movie = CreateSmushPlayer(demo); else if (getGameType() == GType_MONKEY4) { if (_gamePlatform == Common::kPlatformPS2) g_movie = CreateMpegPlayer(); else g_movie = CreateBinkPlayer(demo); } g_imuse = new Imuse(20, demo); g_sound = new SoundPlayer(); bool fullscreen = g_registry->getBool("fullscreen"); createRenderer(); g_driver->setupScreen(640, 480, fullscreen); if (getGameType() == GType_MONKEY4 && SearchMan.hasFile("AMWI.m4b")) { // TODO: Play EMI Mac Aspyr logo warning("TODO: Play Aspyr logo"); } Bitmap *splash_bm = NULL; if (!(_gameFlags & ADGF_DEMO) && getGameType() == GType_GRIM) splash_bm = Bitmap::create("splash.bm"); else if ((_gameFlags & ADGF_DEMO) && getGameType() == GType_MONKEY4) splash_bm = Bitmap::create("splash.til"); else if (getGamePlatform() == Common::kPlatformPS2 && getGameType() == GType_MONKEY4) splash_bm = Bitmap::create("load.tga"); g_driver->clearScreen(); if (splash_bm != NULL) splash_bm->draw(); // This flipBuffer() may make the OpenGL renderer show garbage instead of the splash, // while the TinyGL renderer needs it. if (_softRenderer) g_driver->flipBuffer(); LuaBase *lua = NULL; if (getGameType() == GType_GRIM) { lua = new Lua_V1(); } else { lua = new Lua_V2(); } lua->registerOpcodes(); lua->registerLua(); lua->loadSystemScript(); g_localizer = new Localizer(); lua->boot(); _savegameLoadRequest = false; _savegameSaveRequest = false; // Load game from specified slot, if any if (ConfMan.hasKey("save_slot")) { loadGameState(ConfMan.getInt("save_slot")); } g_grim->setMode(NormalMode); if (splash_bm) delete splash_bm; g_grim->mainLoop(); return Common::kNoError; }