diff options
Diffstat (limited to 'engines/scumm/scumm.cpp')
| -rw-r--r-- | engines/scumm/scumm.cpp | 88 |
1 files changed, 43 insertions, 45 deletions
diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp index 2f0593dca8..f87adfd9ac 100644 --- a/engines/scumm/scumm.cpp +++ b/engines/scumm/scumm.cpp @@ -109,7 +109,7 @@ ScummEngine::ScummEngine(OSystem *syst, const DetectorResult &dr) _language(dr.language), _debugger(0), _currentScript(0xFF), // Let debug() work on init stage - _pauseDialog(0), _mainMenuDialog(0), _versionDialog(0) { + _pauseDialog(0), _scummMenuDialog(0), _versionDialog(0) { if (_game.platform == Common::kPlatformNES) { _gdi = new GdiNES(this); @@ -143,9 +143,8 @@ ScummEngine::ScummEngine(OSystem *syst, const DetectorResult &dr) _objs = NULL; _sound = NULL; memset(&vm, 0, sizeof(vm)); - _quit = false; _pauseDialog = NULL; - _mainMenuDialog = NULL; + _scummMenuDialog = NULL; _versionDialog = NULL; _fastMode = 0; _actors = NULL; @@ -561,7 +560,7 @@ ScummEngine::~ScummEngine() { delete _2byteFontPtr; delete _charset; delete _pauseDialog; - delete _mainMenuDialog; + delete _scummMenuDialog; delete _versionDialog; delete _fileHandle; @@ -815,7 +814,6 @@ ScummEngine_vCUPhe::ScummEngine_vCUPhe(OSystem *syst, const DetectorResult &dr) _syst = syst; _game = dr.game; _filenamePattern = dr.fp, - _quit = false; _cupPlayer = new CUP_Player(syst, this, _mixer); } @@ -845,14 +843,13 @@ void ScummEngine_vCUPhe::parseEvents() { Common::Event event; while (_eventMan->pollEvent(event)) { +#if 0 switch (event.type) { - case Common::EVENT_QUIT: - _quit = true; - break; default: break; } +#endif } } @@ -916,20 +913,20 @@ int ScummEngine::init() { // Add default file directories. if (((_game.platform == Common::kPlatformAmiga) || (_game.platform == Common::kPlatformAtariST)) && (_game.version <= 4)) { // This is for the Amiga version of Indy3/Loom/Maniac/Zak - File::addDefaultDirectory(_gameDataPath + "ROOMS/"); - File::addDefaultDirectory(_gameDataPath + "rooms/"); + File::addDefaultDirectory(_gameDataDir.getChild("ROOMS")); + File::addDefaultDirectory(_gameDataDir.getChild("rooms")); } if ((_game.platform == Common::kPlatformMacintosh) && (_game.version == 3)) { // This is for the Mac version of Indy3/Loom - File::addDefaultDirectory(_gameDataPath + "Rooms 1/"); - File::addDefaultDirectory(_gameDataPath + "Rooms 2/"); - File::addDefaultDirectory(_gameDataPath + "Rooms 3/"); + File::addDefaultDirectory(_gameDataDir.getChild("Rooms 1")); + File::addDefaultDirectory(_gameDataDir.getChild("Rooms 2")); + File::addDefaultDirectory(_gameDataDir.getChild("Rooms 3")); } #ifdef ENABLE_SCUMM_7_8 #ifdef MACOSX - if (_game.version == 8 && !memcmp(_gameDataPath.c_str(), "/Volumes/MONKEY3_", 17)) { + if (_game.version == 8 && !memcmp(_gameDataDir.getPath().c_str(), "/Volumes/MONKEY3_", 17)) { // Special case for COMI on Mac OS X. The mount points on OS X depend // on the volume name. Hence if playing from CD, we'd get a problem. // So if loading of a resource file fails, we fall back to the (fixed) @@ -946,16 +943,16 @@ int ScummEngine::init() { #endif if (_game.version == 8) { // This is for COMI - File::addDefaultDirectory(_gameDataPath + "RESOURCE/"); - File::addDefaultDirectory(_gameDataPath + "resource/"); + File::addDefaultDirectory(_gameDataDir.getChild("RESOURCE")); + File::addDefaultDirectory(_gameDataDir.getChild("resource")); } if (_game.version == 7) { // This is for Full Throttle & The Dig - File::addDefaultDirectory(_gameDataPath + "VIDEO/"); - File::addDefaultDirectory(_gameDataPath + "video/"); - File::addDefaultDirectory(_gameDataPath + "DATA/"); - File::addDefaultDirectory(_gameDataPath + "data/"); + File::addDefaultDirectory(_gameDataDir.getChild("VIDEO")); + File::addDefaultDirectory(_gameDataDir.getChild("video")); + File::addDefaultDirectory(_gameDataDir.getChild("DATA")); + File::addDefaultDirectory(_gameDataDir.getChild("data")); } #endif @@ -1108,7 +1105,7 @@ int ScummEngine::init() { if (_game.version >= 5 && _game.version <= 7) _sound->setupSound(); - updateSoundSettings(); + syncSoundSettings(); return 0; } @@ -1533,6 +1530,12 @@ void ScummEngine_v99he::resetScumm() { byte *data = defineArray(129, kStringArray, 0, 0, 0, len); memcpy(data, _filenamePattern.pattern, len); } + +void ScummEngine_v100he::resetScumm() { + ScummEngine_v99he::resetScumm(); + + memset(_debugInputBuffer, 0, sizeof(_debugInputBuffer)); +} #endif void ScummEngine::setupMusic(int midi) { @@ -1667,7 +1670,7 @@ void ScummEngine::setupMusic(int midi) { } } -void ScummEngine::updateSoundSettings() { +void ScummEngine::syncSoundSettings() { // Sync the engine with the config manager int soundVolumeMusic = ConfMan.getInt("music_volume"); @@ -1690,17 +1693,17 @@ void ScummEngine::updateSoundSettings() { if (VAR_VOICE_MODE != 0xFF) VAR(VAR_VOICE_MODE) = _voiceMode; - _defaultTalkDelay = getTalkspeed(); + _defaultTalkDelay = getTalkDelay(); if (VAR_CHARINC != 0xFF) VAR(VAR_CHARINC) = _defaultTalkDelay; } -void ScummEngine::setTalkspeed(int talkspeed) { - ConfMan.setInt("talkspeed", (talkspeed * 255 + 9 / 2) / 9); +void ScummEngine::setTalkDelay(int talkdelay) { + ConfMan.setInt("talkspeed", ((9 - talkdelay) * 255 + 9 / 2) / 9); } -int ScummEngine::getTalkspeed() { - return (ConfMan.getInt("talkspeed") * 9 + 255 / 2) / 255; +int ScummEngine::getTalkDelay() { + return 9 - (ConfMan.getInt("talkspeed") * 9 + 255 / 2) / 255; } @@ -1721,7 +1724,7 @@ int ScummEngine::go() { int diff = 0; // Duration of one loop iteration - while (!_quit) { + while (!quit()) { if (_debugger->isAttached()) _debugger->onFrame(); @@ -1754,7 +1757,7 @@ int ScummEngine::go() { diff = _system->getMillis() - diff; - if (_quit) { + if (quit()) { // TODO: Maybe perform an autosave on exit? } } @@ -1772,7 +1775,7 @@ void ScummEngine::waitForTimer(int msec_delay) { start_time = _system->getMillis(); - while (!_quit) { + while (!quit()) { _sound->updateCD(); // Loop CD Audio if needed parseEvents(); _system->updateScreen(); @@ -1895,7 +1898,7 @@ load_game: checkExecVerbs(); checkAndRunSentenceScript(); - if (_quit) + if (quit()) return; // HACK: If a load was requested, immediately perform it. This avoids @@ -2011,7 +2014,6 @@ void ScummEngine::scummLoop_handleSaveLoad() { if (_saveLoadFlag) { bool success; const char *errMsg = 0; - char filename[256]; if (_game.version == 8 && _saveTemporaryState) VAR(VAR_GAME_LOADED) = 0; @@ -2032,13 +2034,13 @@ void ScummEngine::scummLoop_handleSaveLoad() { VAR(VAR_GAME_LOADED) = (_game.version == 8) ? 1 : 203; } - makeSavegameName(filename, _saveLoadSlot, _saveTemporaryState); + Common::String filename = makeSavegameName(_saveLoadSlot, _saveTemporaryState); if (!success) { - displayMessage(0, errMsg, filename); + displayMessage(0, errMsg, filename.c_str()); } else if (_saveLoadFlag == 1 && _saveLoadSlot != 0 && !_saveTemporaryState) { // Display "Save successful" message, except for auto saves char buf[256]; - snprintf(buf, sizeof(buf), "Successfully saved game state in file:\n\n%s", filename); + snprintf(buf, sizeof(buf), "Successfully saved game state in file:\n\n%s", filename.c_str()); GUI::TimedMessageDialog dialog(buf, 1500); runDialog(dialog); @@ -2160,10 +2162,6 @@ void ScummEngine::pauseGame() { pauseDialog(); } -void ScummEngine::shutDown() { - _quit = true; -} - void ScummEngine::restart() { // TODO: Check this function - we should probably be reinitting a lot more stuff, and I suspect // this leaks memory like a sieve @@ -2305,18 +2303,18 @@ void ScummEngine::versionDialog() { runDialog(*_versionDialog); } -void ScummEngine::mainMenuDialog() { - if (!_mainMenuDialog) - _mainMenuDialog = new MainMenuDialog(this); - runDialog(*_mainMenuDialog); - updateSoundSettings(); +void ScummEngine::scummMenuDialog() { + if (!_scummMenuDialog) + _scummMenuDialog = new ScummMenuDialog(this); + runDialog(*_scummMenuDialog); + syncSoundSettings(); } void ScummEngine::confirmExitDialog() { ConfirmDialog d(this, 6); if (runDialog(d)) { - _quit = true; + quitGame(); } } |
