diff options
author | Eugene Sandulenko | 2006-02-22 22:40:53 +0000 |
---|---|---|
committer | Eugene Sandulenko | 2006-02-22 22:40:53 +0000 |
commit | 71c170bb136ab94d70eb10d55cfd897dc89c9682 (patch) | |
tree | d555cf8177ba4f6fe3fbc0b0fd1d5d45df58874e /engines/cine/cine.cpp | |
parent | a467247e6ed972e0a13bf26af07811dda55bd69a (diff) | |
download | scummvm-rg350-71c170bb136ab94d70eb10d55cfd897dc89c9682.tar.gz scummvm-rg350-71c170bb136ab94d70eb10d55cfd897dc89c9682.tar.bz2 scummvm-rg350-71c170bb136ab94d70eb10d55cfd897dc89c9682.zip |
Initial version of Cinematique engine evo 1.
svn-id: r20813
Diffstat (limited to 'engines/cine/cine.cpp')
-rw-r--r-- | engines/cine/cine.cpp | 256 |
1 files changed, 256 insertions, 0 deletions
diff --git a/engines/cine/cine.cpp b/engines/cine/cine.cpp new file mode 100644 index 0000000000..c941690dd2 --- /dev/null +++ b/engines/cine/cine.cpp @@ -0,0 +1,256 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2006 The ScummVM project + * + * cinE Engine is (C) 2004-2005 by CinE Team + * + * 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 "common/file.h" +#include "common/savefile.h" +#include "common/config-manager.h" + +#include "base/gameDetector.h" +#include "base/plugins.h" + +#include "backends/fs/fs.h" + +#include "sound/mididrv.h" +#include "sound/mixer.h" + +#include "cine/cine.h" +#include "cine/sound_driver.h" + +Audio::Mixer * cine_g_mixer; +AdlibMusic *g_cine_adlib; + +static void initialize(); + +char *savePath; + +struct CINEGameSettings { + const char *name; + const char *description; + byte id; + uint32 features; + const char *detectname; + GameSettings toGameSettings() const { + GameSettings dummy = { name, description }; + return dummy; + } +}; + +static const CINEGameSettings cine_settings[] = { + {"fw", "Future Wars", Cine::GID_FW, MDT_ADLIB, "AUTO00.PRC"}, + {"os", "Operation Stealth", Cine::GID_OS, MDT_ADLIB, "PROCS00"}, + {NULL, NULL, 0, 0, NULL} +}; + +// Keep list of different supported games +static const GameSettings cine_list[] = { + {"fw", "Future Wars"}, + {"os", "Operation Stealth"}, + {0, 0} +}; + +GameList Engine_CINE_gameIDList() { + GameList games; + const GameSettings *g = cine_list; + + while (g->gameid) { + games.push_back(*g); + g++; + } + + return games; +} + +GameSettings Engine_CINE_findGameID(const char *gameid) { + const GameSettings *g = cine_list; + while (g->gameid) { + if (0 == strcmp(gameid, g->gameid)) + break; + g++; + } + return *g; +} + +DetectedGameList Engine_CINE_detectGames(const FSList &fslist) { + DetectedGameList detectedGames; + const CINEGameSettings *g; + + for (g = cine_settings; g->name; ++g) { + // Iterate over all files in the given directory + for (FSList::const_iterator file = fslist.begin(); + file != fslist.end(); ++file) { + const char *gameName = file->displayName().c_str(); + + if (0 == scumm_stricmp(g->detectname, gameName)) { + // Match found, add to list of candidates, then abort inner loop. + detectedGames.push_back(g->toGameSettings()); + break; + } + } + } + return detectedGames; +} + +Engine *Engine_CINE_create(GameDetector *detector, OSystem *syst) { + return new Cine::CineEngine(detector, syst); +} + +REGISTER_PLUGIN(CINE, "CINE Engine") + +namespace Cine { + +CineEngine::CineEngine(GameDetector *detector, OSystem *syst) : Engine(syst) { + + // Setup mixer + if (!_mixer->isReady()) { + warning("Sound initialization failed."); + } + + cine_g_mixer = _mixer; + _mixer->setVolumeForSoundType(Audio::Mixer::kSFXSoundType, + ConfMan.getInt("sfx_volume")); + _mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, + ConfMan.getInt("music_volume")); + + _dataPath = getGameDataPath(); + _savePath = _saveFileMan->getSavePath(); + + Common::File::addDefaultDirectory(_gameDataPath); + + const CINEGameSettings *g; + + for (g = cine_settings; g->name; ++g) + if (!scumm_stricmp(g->name, detector->_targetName.c_str())) + _gameId = g->id; + + gameType = _gameId; +} + +CineEngine::~CineEngine() { +} + +void CineEngine::errorString(const char *buf1, char *buf2) { + strcpy(buf2, buf1); +} + +int CineEngine::init(GameDetector &detector) { + // Initialize backend + _system->beginGFXTransaction(); + initCommonGFX(detector, false); + _system->initSize(320, 200); + _system->endGFXTransaction(); + + g_cine_adlib = new AdlibMusic(_mixer); + + initialize(); + + return 0; +} + +int CineEngine::go() { + _system->showMouse(true); + + mainLoop(1); + + if (gameType == Cine::GID_FW) + snd_clearBasesonEntries(); + + delete g_cine_adlib; + + return 0; +} + + } + +int gameType; + +static void initialize() { + u16 i; + + init_video(); + + textDataPtr = (u8 *) malloc(8000); + + partBuffer = (partBufferStruct *) malloc(255 * sizeof(animDataStruct)); + + loadTextData("texte.dat", textDataPtr); + snd_loadBasesonEntries("BASESON.SND"); + + for (i = 0; i < NUM_MAX_OBJECT; i++) { + objectTable[i].part = 0; + objectTable[i].name[0] = 0; + } + + for (i = 0; i < NUM_MAX_OBJECTDATA; i++) { + globalVars[i] = 0; + } + + globalVars[255] = 1; + + for (i = 0; i < NUM_MAX_SCRIPT; i++) { + scriptTable[i].ptr = NULL; + scriptTable[i].var4 = 0; + } + + for (i = 0; i < NUM_MAX_MESSAGE; i++) { + messageTable[i].ptr = NULL; + messageTable[i].len = 0; + } + + for (i = 0; i < NUM_MAX_REL; i++) { + relTable[i].ptr0 = NULL; + relTable[i].var4 = 0; + relTable[i].var6 = 0; + relTable[i].var8 = 0; + } + + for (i = 0; i < NUM_MAX_PARTDATA; i++) { + animDataTable[i].ptr1 = NULL; + animDataTable[i].ptr2 = NULL; + } + + overlayHead.next = NULL; + overlayHead.previous = NULL; + + var8 = 0; + var9 = NULL; + + objScriptList.next = NULL; + globalScriptsHead.next = NULL; + + objScriptList.scriptPtr = NULL; + globalScriptsHead.scriptPtr = NULL; + + var2 = 0; + var3 = 0; + var4 = 0; + var5 = 0; + + freePrcLinkedList(); + + loadPrc(BOOT_PRC_NAME); + strcpy(currentPrcName, BOOT_PRC_NAME); + + processPendingUpdates(0); +} |