diff options
Diffstat (limited to 'engines/touche')
-rw-r--r-- | engines/touche/detection.cpp | 62 | ||||
-rw-r--r-- | engines/touche/menu.cpp | 10 | ||||
-rw-r--r-- | engines/touche/opcodes.cpp | 4 | ||||
-rw-r--r-- | engines/touche/saveload.cpp | 7 | ||||
-rw-r--r-- | engines/touche/touche.cpp | 52 | ||||
-rw-r--r-- | engines/touche/touche.h | 5 |
6 files changed, 33 insertions, 107 deletions
diff --git a/engines/touche/detection.cpp b/engines/touche/detection.cpp index 89655ac9ab..d2798d7060 100644 --- a/engines/touche/detection.cpp +++ b/engines/touche/detection.cpp @@ -25,7 +25,6 @@ #include "common/config-manager.h" #include "common/advancedDetector.h" -#include "common/savefile.h" #include "base/plugins.h" @@ -136,19 +135,9 @@ public: return "Touche: The Adventures of the 5th Musketeer (C) Clipper Software"; } - virtual bool hasFeature(MetaEngineFeature f) const; virtual bool createInstance(OSystem *syst, Engine **engine, const Common::ADGameDescription *desc) const; - virtual SaveStateList listSaves(const char *target) const; }; -bool ToucheMetaEngine::hasFeature(MetaEngineFeature f) const { - return - (f == kSupportsRTL) || - (f == kSupportsListSaves) || - (f == kSupportsDirectLoad) || - (f == kSupportsDeleteSave); -} - bool ToucheMetaEngine::createInstance(OSystem *syst, Engine **engine, const Common::ADGameDescription *desc) const { const Common::ADGameDescription *gd = desc; if (gd) { @@ -157,57 +146,6 @@ bool ToucheMetaEngine::createInstance(OSystem *syst, Engine **engine, const Comm return gd != 0; } -SaveStateList ToucheMetaEngine::listSaves(const char *target) const { - Common::SaveFileManager *saveFileMan = g_system->getSavefileManager(); - Common::StringList filenames; - char saveDesc[Touche::kGameStateDescriptionLen]; - Common::String pattern = target; - pattern += ".?"; - - filenames = saveFileMan->listSavefiles(pattern.c_str()); - sort(filenames.begin(), filenames.end()); // Sort (hopefully ensuring we are sorted numerically..) - - SaveStateList saveList; - for (Common::StringList::const_iterator file = filenames.begin(); file != filenames.end(); ++file) { - // Obtain the last digit of the filename, since they correspond to the save slot - int slotNum = atoi(file->c_str() + file->size() - 1); - - if (slotNum >= 0 && slotNum <= 9) { - Common::InSaveFile *in = saveFileMan->openForLoading(file->c_str()); - if (in) { - in->readUint16LE(); - in->readUint16LE(); - in->read(saveDesc, Touche::kGameStateDescriptionLen); - saveList.push_back(SaveStateDescriptor(slotNum, Common::String(saveDesc), *file)); - delete in; - } - } - } - - pattern += "?"; - - filenames = saveFileMan->listSavefiles(pattern.c_str()); - sort(filenames.begin(), filenames.end()); // Sort (hopefully ensuring we are sorted numerically..) - - for (Common::StringList::const_iterator file = filenames.begin(); file != filenames.end(); ++file) { - // Obtain the last 2 digits of the filename, since they correspond to the save slot - int slotNum = atoi(file->c_str() + file->size() - 2); - - if (slotNum >= 10 && slotNum <= 99) { - Common::InSaveFile *in = saveFileMan->openForLoading(file->c_str()); - if (in) { - in->readUint16LE(); - in->readUint16LE(); - in->read(saveDesc, Touche::kGameStateDescriptionLen); - saveList.push_back(SaveStateDescriptor(slotNum, Common::String(saveDesc), *file)); - delete in; - } - } - } - - return saveList; -} - #if PLUGIN_ENABLED_DYNAMIC(TOUCHE) REGISTER_PLUGIN_DYNAMIC(TOUCHE, PLUGIN_TYPE_ENGINE, ToucheMetaEngine); #else diff --git a/engines/touche/menu.cpp b/engines/touche/menu.cpp index 82490fca38..6d2d90a572 100644 --- a/engines/touche/menu.cpp +++ b/engines/touche/menu.cpp @@ -297,7 +297,7 @@ void ToucheEngine::handleMenuAction(void *menu, int actionId) { menuData->quit = true; break; case kActionQuitGame: - quitGame(); + _flagsTable[611] = 1; menuData->quit = true; break; case kActionTextOnly: @@ -395,10 +395,10 @@ void ToucheEngine::handleOptions(int forceDisplay) { while (_eventMan->pollEvent(event)) { const Button *button = 0; switch (event.type) { - case Common::EVENT_RTL: case Common::EVENT_QUIT: menuData.quit = true; menuData.exit = true; + _flagsTable[611] = 1; break; case Common::EVENT_LBUTTONDOWN: button = menuData.findButtonUnderCursor(event.mouse.x, event.mouse.y); @@ -433,9 +433,8 @@ void ToucheEngine::handleOptions(int forceDisplay) { _system->delayMillis(10); } _fullRedrawCounter = 2; - if (!menuData.exit && quit()) { - if (displayQuitDialog()) - quitGame(); + if (!menuData.exit && _flagsTable[611] != 0) { + _flagsTable[611] = displayQuitDialog(); } } } @@ -557,7 +556,6 @@ int ToucheEngine::displayQuitDialog() { Common::Event event; while (_eventMan->pollEvent(event)) { switch (event.type) { - case Common::EVENT_RTL: case Common::EVENT_QUIT: quitLoop = true; ret = 1; diff --git a/engines/touche/opcodes.cpp b/engines/touche/opcodes.cpp index b2b16eb29d..4405c614ac 100644 --- a/engines/touche/opcodes.cpp +++ b/engines/touche/opcodes.cpp @@ -408,10 +408,6 @@ void ToucheEngine::op_setFlag() { case 104: _currentKeyCharNum = val; break; - case 611: - if (val != 0) - quitGame(); - break; case 612: _flagsTable[613] = getRandomNumber(val); break; diff --git a/engines/touche/saveload.cpp b/engines/touche/saveload.cpp index fedd40eb76..4fcf6e114d 100644 --- a/engines/touche/saveload.cpp +++ b/engines/touche/saveload.cpp @@ -31,6 +31,11 @@ namespace Touche { +enum { + kCurrentGameStateVersion = 6, + kGameStateDescriptionLen = 32 +}; + static void saveOrLoad(Common::WriteStream &stream, uint16 &i) { stream.writeUint16LE(i); } @@ -287,7 +292,7 @@ void ToucheEngine::loadGameStateData(Common::ReadStream *stream) { if (stream->readUint32LE() != saveLoadEndMarker) { warning("Corrupted gamestate data"); // if that ever happens, exit the game - quitGame(); + _flagsTable[611] = 1; } _flagsTable[614] = roomOffsX; _flagsTable[615] = roomOffsY; diff --git a/engines/touche/touche.cpp b/engines/touche/touche.cpp index d1d7528517..a39517fe32 100644 --- a/engines/touche/touche.cpp +++ b/engines/touche/touche.cpp @@ -95,7 +95,7 @@ int ToucheEngine::init() { _mixer->setVolumeForSoundType(Audio::Mixer::kSFXSoundType, ConfMan.getInt("sfx_volume")); _mixer->setVolumeForSoundType(Audio::Mixer::kSpeechSoundType, ConfMan.getInt("speech_volume")); - _mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, ConfMan.getInt("music_volume")); + _mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, Audio::Mixer::kMaxMixerVolume); return 0; } @@ -111,7 +111,7 @@ int ToucheEngine::go() { res_deallocateTables(); res_closeDataFile(); - return _eventMan->shouldRTL(); + return 0; } void ToucheEngine::restart() { @@ -234,13 +234,6 @@ Common::Point ToucheEngine::getMousePos() const { return _eventMan->getMousePos(); } -void ToucheEngine::syncSoundSettings() { - readConfigurationSettings(); - _mixer->setVolumeForSoundType(Audio::Mixer::kSFXSoundType, ConfMan.getInt("sfx_volume")); - _mixer->setVolumeForSoundType(Audio::Mixer::kSpeechSoundType, ConfMan.getInt("speech_volume")); - _mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, ConfMan.getInt("music_volume")); -} - void ToucheEngine::mainLoop() { restart(); @@ -252,13 +245,10 @@ void ToucheEngine::mainLoop() { _inp_rightMouseButtonPressed = false; if (ConfMan.hasKey("save_slot")) { - int saveSlot = ConfMan.getInt("save_slot"); - if (saveSlot >= 0 && saveSlot <= 99) { - loadGameState(saveSlot); - _newEpisodeNum = 0; - resetSortedKeyCharsTable(); - showCursor(true); - } + loadGameState(ConfMan.getInt("save_slot")); + _newEpisodeNum = 0; + resetSortedKeyCharsTable(); + showCursor(true); } else { _newEpisodeNum = ConfMan.getInt("boot_param"); if (_newEpisodeNum == 0) { @@ -268,7 +258,7 @@ void ToucheEngine::mainLoop() { } uint32 frameTimeStamp = _system->getMillis(); - for (uint32 cycleCounter = 0; !quit(); ++cycleCounter) { + for (uint32 cycleCounter = 0; _flagsTable[611] == 0; ++cycleCounter) { if ((cycleCounter % 3) == 0) { runCycle(); } @@ -297,6 +287,9 @@ void ToucheEngine::processEvents(bool handleKeyEvents) { Common::Event event; while (_eventMan->pollEvent(event)) { switch (event.type) { + case Common::EVENT_QUIT: + _flagsTable[611] = 1; + break; case Common::EVENT_KEYDOWN: if (!handleKeyEvents) { break; @@ -304,8 +297,7 @@ void ToucheEngine::processEvents(bool handleKeyEvents) { _flagsTable[600] = event.kbd.keycode; if (event.kbd.keycode == Common::KEYCODE_ESCAPE) { if (_displayQuitDialog) { - if (displayQuitDialog()) - quitGame(); + _flagsTable[611] = displayQuitDialog(); } } else if (event.kbd.keycode == Common::KEYCODE_F5) { if (_flagsTable[618] == 0 && !_hideInventoryTexts) { @@ -1837,7 +1829,7 @@ int ToucheEngine::handleActionMenuUnderCursor(const int16 *actions, int offs, in _menuRedrawCounter = 2; Common::Rect rect(0, y, kScreenWidth, y + h); i = -1; - while (_inp_rightMouseButtonPressed && !quit()) { + while (_inp_rightMouseButtonPressed && _flagsTable[611] == 0) { Common::Point mousePos = getMousePos(); if (rect.contains(mousePos)) { int c = (mousePos.y - y) / kTextHeight; @@ -2700,10 +2692,10 @@ bool ToucheEngine::sortPointsData(int num1, int num2) { const int md2 = _programWalkTable[num1].point2; _programPointsTable[md2].order = 0; } - bool quitLoop = false; + bool quit = false; int order = 1; - while (!quitLoop) { - quitLoop = true; + while (!quit) { + quit = true; for (uint i = 0; i < _programWalkTable.size(); ++i) { const int md1 = _programWalkTable[i].point1; const int md2 = _programWalkTable[i].point2; @@ -2711,11 +2703,11 @@ bool ToucheEngine::sortPointsData(int num1, int num2) { assert((md2 & 0x4000) == 0); if (_programPointsTable[md1].order == order - 1 && _programPointsTable[md2].order > order) { _programPointsTable[md2].order = order; - quitLoop = false; + quit = false; } if (_programPointsTable[md2].order == order - 1 && _programPointsTable[md1].order > order) { _programPointsTable[md1].order = order; - quitLoop = false; + quit = false; } } } @@ -2947,9 +2939,9 @@ void ToucheEngine::markWalkPoints(int keyChar) { resetPointsData(0); if (pointsDataNum != -1) { _programPointsTable[pointsDataNum].order = 1; - bool quitLoop = false; - while (!quitLoop) { - quitLoop = true; + bool quit = false; + while (!quit) { + quit = true; for (uint i = 0; i < _programWalkTable.size(); ++i) { int16 md1 = _programWalkTable[i].point1; int16 md2 = _programWalkTable[i].point2; @@ -2957,11 +2949,11 @@ void ToucheEngine::markWalkPoints(int keyChar) { assert((md2 & 0x4000) == 0); if (_programPointsTable[md1].order != 0 && _programPointsTable[md2].order == 0) { _programPointsTable[md2].order = 1; - quitLoop = false; + quit = false; } if (_programPointsTable[md2].order != 0 && _programPointsTable[md1].order == 0) { _programPointsTable[md1].order = 1; - quitLoop = false; + quit = false; } } } diff --git a/engines/touche/touche.h b/engines/touche/touche.h index f341769422..41f5c832c5 100644 --- a/engines/touche/touche.h +++ b/engines/touche/touche.h @@ -328,9 +328,7 @@ enum { kCursorHeight = 42, kTextHeight = 16, kMaxProgramDataSize = 61440, - kMaxSaveStates = 100, - kGameStateDescriptionLen = 32, // Need these two values defined here - kCurrentGameStateVersion = 6 // for --list-saves support + kMaxSaveStates = 100 }; enum StringType { @@ -363,7 +361,6 @@ public: virtual int init(); virtual int go(); - virtual void syncSoundSettings(); protected: |