AgiEngine::~AgiEngine() { _timer->removeTimerProc(agiTimerFunctionLow); // If the engine hasn't been initialized yet via AgiEngine::initialize(), don't attempt to free any resources, // as they haven't been allocated. Fixes bug #1742432 - AGI: Engine crashes if no game is detected if (_game.state == STATE_INIT) { delete _rnd; // delete _rnd, as it is allocated in the constructor, not in initialize() return; } agiDeinit(); delete _loader; _sound->deinitSound(); delete _sound; _gfx->deinitVideo(); delete _sprites; delete _picture; free(_game.sbufOrig); _gfx->deinitMachine(); delete _gfx; delete _rnd; delete _console; free(_predictiveDictLine); free(_predictiveDictText); }
AgiEngine::~AgiEngine() { agiDeinit(); delete _loader; if (_gfx) { _gfx->deinitVideo(); } delete _inventory; delete _systemUI; delete _menu; delete _text; delete _sprites; delete _picture; delete _gfx; delete _font; delete _words; delete _console; }
AgiEngine::~AgiEngine() { // If the engine hasn't been initialized yet via // AgiEngine::initialize(), don't attempt to free any resources, as // they haven't been allocated. Fixes bug #1742432 - AGI: Engine // crashes if no game is detected if (_game.state == STATE_INIT) { return; } agiDeinit(); delete _loader; _gfx->deinitVideo(); delete _sprites; delete _picture; free(_game.sbufOrig); _gfx->deinitMachine(); delete _gfx; delete _console; }
int AgiEngine::runGame() { int ec = errOK; // Execute the game do { debugC(2, kDebugLevelMain, "game loop"); debugC(2, kDebugLevelMain, "game version = 0x%x", getVersion()); if (agiInit() != errOK) break; if (_restartGame) { setflag(fRestartGame, true); _game.lastController = 0; setvar(vTimeDelay, 2); // "normal" speed _restartGame = false; } // Set computer type (v20 i.e. vComputer) and sound type switch (getPlatform()) { case Common::kPlatformAtariST: setvar(vComputer, kAgiComputerAtariST); setvar(vSoundgen, kAgiSoundPC); break; case Common::kPlatformAmiga: if (getFeatures() & GF_OLDAMIGAV20) setvar(vComputer, kAgiComputerAmigaOld); else setvar(vComputer, kAgiComputerAmiga); setvar(vSoundgen, kAgiSoundTandy); break; case Common::kPlatformApple2GS: setvar(vComputer, kAgiComputerApple2GS); if (getFeatures() & GF_2GSOLDSOUND) setvar(vSoundgen, kAgiSound2GSOld); else setvar(vSoundgen, kAgiSoundTandy); break; case Common::kPlatformPC: default: setvar(vComputer, kAgiComputerPC); setvar(vSoundgen, kAgiSoundPC); break; } // Set monitor type (v26 i.e. vMonitor) switch (_renderMode) { case Common::kRenderCGA: setvar(vMonitor, kAgiMonitorCga); break; case Common::kRenderHercG: case Common::kRenderHercA: setvar(vMonitor, kAgiMonitorHercules); break; // Don't know if Amiga AGI games use a different value than kAgiMonitorEga // for vMonitor so I just use kAgiMonitorEga for them (As was done before too). case Common::kRenderAmiga: case Common::kRenderDefault: case Common::kRenderEGA: default: setvar(vMonitor, kAgiMonitorEga); break; } setvar(vFreePages, 180); // Set amount of free memory to realistic value setvar(vMaxInputChars, 38); _game.inputMode = INPUT_NONE; _game.inputEnabled = false; _game.hasPrompt = 0; _game.state = STATE_RUNNING; ec = playGame(); _game.state = STATE_LOADED; agiDeinit(); } while (_restartGame); delete _menu; _menu = NULL; releaseImageStack(); return ec; }
int AgiEngine::runGame() { int ec = errOK; // Execute the game do { debugC(2, kDebugLevelMain, "game loop"); debugC(2, kDebugLevelMain, "game version = 0x%x", getVersion()); if (agiInit() != errOK) break; if (_restartGame) { setFlag(VM_FLAG_RESTART_GAME, true); // do not set VM_VAR_TIME_DELAY, original AGI did not do it // Reset in-game timer inGameTimerReset(); _restartGame = false; } // Set computer type (v20 i.e. vComputer) and sound type switch (getPlatform()) { case Common::kPlatformAtariST: setVar(VM_VAR_COMPUTER, kAgiComputerAtariST); setVar(VM_VAR_SOUNDGENERATOR, kAgiSoundPC); break; case Common::kPlatformAmiga: if (getFeatures() & GF_OLDAMIGAV20) setVar(VM_VAR_COMPUTER, kAgiComputerAmigaOld); else setVar(VM_VAR_COMPUTER, kAgiComputerAmiga); setVar(VM_VAR_SOUNDGENERATOR, kAgiSoundTandy); break; case Common::kPlatformApple2GS: setVar(VM_VAR_COMPUTER, kAgiComputerApple2GS); if (getFeatures() & GF_2GSOLDSOUND) setVar(VM_VAR_SOUNDGENERATOR, kAgiSound2GSOld); else setVar(VM_VAR_SOUNDGENERATOR, kAgiSoundTandy); break; case Common::kPlatformDOS: default: setVar(VM_VAR_COMPUTER, kAgiComputerPC); setVar(VM_VAR_SOUNDGENERATOR, kAgiSoundPC); break; } // Set monitor type (v26 i.e. vMonitor) switch (_renderMode) { case Common::kRenderCGA: setVar(VM_VAR_MONITOR, kAgiMonitorCga); break; case Common::kRenderHercA: case Common::kRenderHercG: setVar(VM_VAR_MONITOR, kAgiMonitorHercules); break; // Don't know if Amiga AGI games use a different value than kAgiMonitorEga // for vMonitor so I just use kAgiMonitorEga for them (As was done before too). case Common::kRenderAmiga: case Common::kRenderApple2GS: case Common::kRenderAtariST: case Common::kRenderEGA: case Common::kRenderVGA: default: setVar(VM_VAR_MONITOR, kAgiMonitorEga); break; } setVar(VM_VAR_FREE_PAGES, 180); // Set amount of free memory to realistic value setVar(VM_VAR_MAX_INPUT_CHARACTERS, 38); _text->promptDisable(); ec = playGame(); agiDeinit(); } while (_restartGame); delete _menu; _menu = NULL; releaseImageStack(); return ec; }