diff options
Diffstat (limited to 'lure/lure.cpp')
-rw-r--r-- | lure/lure.cpp | 306 |
1 files changed, 0 insertions, 306 deletions
diff --git a/lure/lure.cpp b/lure/lure.cpp deleted file mode 100644 index 3adc27eea9..0000000000 --- a/lure/lure.cpp +++ /dev/null @@ -1,306 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "common/stdafx.h" - -#include "backends/fs/fs.h" - -#include "base/gameDetector.h" -#include "base/plugins.h" - -#include "common/config-manager.h" -#include "common/file.h" -#include "common/system.h" -#include "common/md5.h" - -#include "sound/mixer.h" -#include "sound/mididrv.h" -#include "sound/audiostream.h" - -#include "lure/luredefs.h" -#include "lure/surface.h" -#include "lure/lure.h" -#include "lure/intro.h" -#include "lure/game.h" -#include "lure/system.h" - -using namespace Lure; - -enum { - // We only compute MD5 of the first megabyte of our data files. - kMD5FileSizeLimit = 1024 * 1024 -}; - -struct LureGameSettings { - const char *name; - const char *description; - byte id; - uint32 features; - const char *md5sum; - const char *checkFile; - GameSettings toGameSettings() const { - GameSettings dummy = { name, description, features }; - return dummy; - } -}; - -// -static const LureGameSettings lure_games[] = { - { "lure", "Lure of the Temptress (Floppy, English)", GI_LURE, GF_ENGLISH | GF_FLOPPY, - "e45ea5d279a268c7d3c6524c2f63a2d2", "disk1.vga" }, - { 0, 0, 0, 0, 0, 0 } -}; - -// Keep list of different supported games - -struct LureGameList { - const char *name; - const char *description; - uint32 features; - GameSettings toGameSettings() const { - GameSettings dummy = { name, description, features }; - return dummy; - } -}; - -static const LureGameList lure_list[] = { - { "lure", "Lure of the Temptress", 0 }, - { 0, 0, 0 } -}; - -GameList Engine_LURE_gameList() { - GameList games; - const LureGameList *g = lure_list; - - while (g->name) { - games.push_back(g->toGameSettings()); - g++; - } - return games; -} - -DetectedGameList Engine_LURE_detectGames(const FSList &fslist) { - DetectedGameList detectedGames; - const LureGameSettings *g; - FSList::const_iterator file; - - // Iterate over all files in the given directory - bool isFound = false; - for (file = fslist.begin(); file != fslist.end(); file++) { - if (file->isDirectory()) - continue; - - for (g = lure_games; g->name; g++) { - if (scumm_stricmp(file->displayName().c_str(), g->checkFile) == 0) - isFound = true; - } - if (isFound) - break; - } - - if (file == fslist.end()) - return detectedGames; - - uint8 md5sum[16]; - char md5str[32 + 1]; - - if (Common::md5_file(file->path().c_str(), md5sum, NULL, kMD5FileSizeLimit)) { - for (int i = 0; i < 16; i++) { - sprintf(md5str + i * 2, "%02x", (int)md5sum[i]); - } - for (g = lure_games; g->name; g++) { - if (strcmp(g->md5sum, (char *)md5str) == 0) { - detectedGames.push_back(g->toGameSettings()); - } - } - if (detectedGames.isEmpty()) { - debug("Unknown MD5 (%s)! Please report the details (language, platform, etc.) of this game to the ScummVM team\n", md5str); - - const LureGameList *g1 = lure_list; - while (g1->name) { - detectedGames.push_back(g1->toGameSettings()); - g1++; - } - } - } - return detectedGames; -} - -Engine *Engine_LURE_create(GameDetector *detector, OSystem *system) { - return new LureEngine(detector, system); -} - -REGISTER_PLUGIN(LURE, "Lure of the Temptress Engine") - -namespace Lure { - -LureEngine::LureEngine(GameDetector *detector, OSystem *system): Engine(system) { - // Setup mixer -/* - if (!_mixer->isReady()) { - warning("Sound initialization failed."); - } - - _mixer->setVolumeForSoundType(Audio::Mixer::kSFXSoundType, ConfMan.getInt("sfx_volume")); - _mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, ConfMan.getInt("music_volume")); - _mixer->setVolumeForSoundType(Audio::Mixer::kSpeechSoundType, ConfMan.getInt("speech_volume")); -*/ - _features = 0; - _game = 0; -} - -void LureEngine::detectGame() { - // Make sure all the needed files are present - - if (!Common::File::exists(SUPPORT_FILENAME)) - error("Missing %s - this is a custom file containing resources from the\n" - "Lure of the Temptress executable. See the documentation for creating it.", - SUPPORT_FILENAME); - - for (uint8 fileNum = 1; fileNum <= 4; ++fileNum) - { - char sFilename[10]; - sprintf(sFilename, "disk%d.vga", fileNum); - - if (!Common::File::exists(sFilename)) - error("Missing disk%d.vga", fileNum); - } - - // Check the version of the lure.dat file - Common::File f; - if (!f.open(SUPPORT_FILENAME)) { - error("Error opening %s for validation", SUPPORT_FILENAME); - } else { - f.seek(0xbf * 8); - VersionStructure version; - f.read(&version, sizeof(VersionStructure)); - f.close(); - - if (READ_LE_UINT16(&version.id) != 0xffff) - error("Error validating %s - file is invalid or out of date", SUPPORT_FILENAME); - else if ((version.vMajor != LURE_DAT_MAJOR) || (version.vMinor != LURE_DAT_MINOR)) - error("Incorrect version of %s file - expected %d.%d but got %d.%d", - SUPPORT_FILENAME, LURE_DAT_MAJOR, LURE_DAT_MINOR, - version.vMajor, version.vMinor); - } - - // Do an md5 check - - uint8 md5sum[16]; - char md5str[32 + 1]; - const LureGameSettings *g; - bool found = false; - - *md5str = 0; - - for (g = lure_games; g->name; g++) { - if (!Common::File::exists(g->checkFile)) - continue; - - if (Common::md5_file(g->checkFile, md5sum, ConfMan.get("path").c_str(), kMD5FileSizeLimit)) { - for (int j = 0; j < 16; j++) { - sprintf(md5str + j * 2, "%02x", (int)md5sum[j]); - } - } else - continue; - - if (strcmp(g->md5sum, (char *)md5str) == 0) { - _features = g->features; - _game = g->id; - - if (g->description) - g_system->setWindowCaption(g->description); - - found = true; - break; - } - } - - if (!found) { - debug("Unknown MD5 (%s)! Please report the details (language, platform, etc.) of this game to the ScummVM team", md5str); - _features = GF_LNGUNK || GF_FLOPPY; - _game = GI_LURE; - } -} - -int LureEngine::init(GameDetector &detector) { - _system->beginGFXTransaction(); - initCommonGFX(detector); - _system->initSize(FULL_SCREEN_WIDTH, FULL_SCREEN_HEIGHT); - _system->endGFXTransaction(); - - detectGame(); - - _sys = new System(_system); - _disk = new Disk(_gameDataPath); - _resources = new Resources(); - _strings = new StringData(); - _screen = new Screen(*_system); - _mouse = new Mouse(*_system); - _events = new Events(*_system, *_mouse); - _menu = new Menu(*_system); - Surface::initialise(); - _room = new Room(); - - return 0; -} - -LureEngine::~LureEngine() { - Surface::deinitialise(); - delete _room; - delete _menu; - delete _events; - delete _mouse; - delete _screen; - delete _strings; - delete _resources; - delete _disk; - delete _sys; -} - -int LureEngine::go() { - // Show the introduction - Introduction *intro = new Introduction(*_screen, *_system); - intro->show(); - delete intro; - - // Play the game - if (!_events->quitFlag) { - // Play the game - Game *gameInstance = new Game(); - gameInstance->execute(); - delete gameInstance; - } - - //quitGame(); - return 0; -} - -void LureEngine::errorString(const char *buf1, char *buf2) { - strcpy(buf2, buf1); -} - -void LureEngine::quitGame() { - _system->quit(); -} - -} // End of namespace Lure |