aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--base/engine.cpp4
-rw-r--r--base/engine.h4
-rw-r--r--base/gameDetector.cpp2
-rw-r--r--base/gameDetector.h3
-rw-r--r--queen/queen.cpp6
-rw-r--r--queen/queen.h4
-rw-r--r--scumm/scummvm.cpp8
-rw-r--r--simon/simon.cpp4
-rw-r--r--simon/simon.h2
-rw-r--r--sky/sky.cpp12
-rw-r--r--sky/sky.h4
-rw-r--r--sword2/sword2.cpp5
-rw-r--r--sword2/sword2.h7
13 files changed, 36 insertions, 29 deletions
diff --git a/base/engine.cpp b/base/engine.cpp
index 50bccb4746..4e8bb4a749 100644
--- a/base/engine.cpp
+++ b/base/engine.cpp
@@ -32,10 +32,10 @@
/* FIXME - BIG HACK for MidiEmu */
Engine *g_engine = 0;
-Engine::Engine(GameDetector *detector, OSystem *syst)
+Engine::Engine(OSystem *syst)
: _system(syst), _gameDataPath(ConfMan.get("path")) {
g_engine = this;
- _mixer = detector->createMixer();
+ _mixer = GameDetector::createMixer();
_timer = g_timer;
diff --git a/base/engine.h b/base/engine.h
index 9d77668c40..a37cd08198 100644
--- a/base/engine.h
+++ b/base/engine.h
@@ -30,9 +30,7 @@ extern const char *gScummVMBuildDate; // e.g. "2003-06-24"
extern const char *gScummVMFullVersion; // e.g. "ScummVM 0.4.1 (2003-06-24)"
class SoundMixer;
-class GameDetector;
class Timer;
-struct GameSettings;
class Engine {
public:
@@ -44,7 +42,7 @@ protected:
const Common::String _gameDataPath;
public:
- Engine(GameDetector *detector, OSystem *syst);
+ Engine(OSystem *syst);
virtual ~Engine();
// Invoke the main engine loop using this method
diff --git a/base/gameDetector.cpp b/base/gameDetector.cpp
index 6dd67aa8bf..ef12840b24 100644
--- a/base/gameDetector.cpp
+++ b/base/gameDetector.cpp
@@ -500,9 +500,11 @@ bool GameDetector::detectGame() {
_game = findGame(realGame, &_plugin);
if (_game.gameName) {
+ _gameName = _game.gameName;
printf("Trying to start game '%s'\n", _game.description);
return true;
} else {
+ _gameName.clear();
printf("Failed game detection\n");
return false;
}
diff --git a/base/gameDetector.h b/base/gameDetector.h
index 1bad32078d..d57cdb5b06 100644
--- a/base/gameDetector.h
+++ b/base/gameDetector.h
@@ -64,7 +64,8 @@ public:
bool detectMain();
String _targetName;
- GameSettings _game;
+ String _gameName;
+ GameSettings _game; // TODO: Eventually get rid of _game or at least make it protected
const Plugin *_plugin;
bool _dumpScripts;
diff --git a/queen/queen.cpp b/queen/queen.cpp
index 08e2bfb43c..5e6cbd9a14 100644
--- a/queen/queen.cpp
+++ b/queen/queen.cpp
@@ -88,7 +88,7 @@ REGISTER_PLUGIN("Flight of the Amazon Queen", Engine_QUEEN_gameList, Engine_QUEE
namespace Queen {
QueenEngine::QueenEngine(GameDetector *detector, OSystem *syst)
- : Engine(detector, syst) {
+ : Engine(syst) {
if (!_mixer->bindToSystem(syst))
warning("Sound initialisation failed.");
@@ -97,7 +97,7 @@ QueenEngine::QueenEngine(GameDetector *detector, OSystem *syst)
_debugMode = ConfMan.hasKey("debuglevel");
_debugLevel = ConfMan.getInt("debuglevel");
- _detector = detector;
+ _detectname = detector->_game.detectname;
_fastMode = 0;
@@ -218,7 +218,7 @@ void QueenEngine::go() {
}
void QueenEngine::initialise(void) {
- _resource = new Resource(_gameDataPath, _detector->_game.detectname, _system->get_savefile_manager(), getSavePath());
+ _resource = new Resource(_gameDataPath, _detectname, _system->get_savefile_manager(), getSavePath());
_input = new Input(_resource->getLanguage(), _system);
_display = new Display(_system, _input);
_graphics = new Graphics(_display, _input, _resource);
diff --git a/queen/queen.h b/queen/queen.h
index 6596654320..8151b87920 100644
--- a/queen/queen.h
+++ b/queen/queen.h
@@ -30,6 +30,8 @@
#include "queen/resource.h"
#include "queen/logic.h"
+class GameDetector;
+
namespace Queen {
class Graphics;
@@ -57,7 +59,7 @@ protected:
Display *_display;
Sound *_sound;
- GameDetector *_detector; // necessary for music
+ const char *_detectname; // necessary for music
public:
QueenEngine(GameDetector *detector, OSystem *syst);
diff --git a/scumm/scummvm.cpp b/scumm/scummvm.cpp
index d339129793..691072affc 100644
--- a/scumm/scummvm.cpp
+++ b/scumm/scummvm.cpp
@@ -285,7 +285,7 @@ static const ScummGameSettings scumm_settings[] = {
};
ScummEngine::ScummEngine(GameDetector *detector, OSystem *syst, const ScummGameSettings &gs)
- : Engine(detector, syst),
+ : Engine(syst),
_gameId(gs.id),
_version(gs.version),
_features(gs.features),
@@ -688,7 +688,7 @@ ScummEngine::ScummEngine(GameDetector *detector, OSystem *syst, const ScummGameS
} else if (((_midiDriver == MD_PCJR) || (_midiDriver == MD_PCSPK)) && ((_version > 2) && (_version < 5))) {
_musicEngine = new Player_V2(this, _midiDriver != MD_PCSPK);
} else if (_version > 2) {
- MidiDriver *driver = detector->createMidi(_midiDriver);
+ MidiDriver *driver = GameDetector::createMidi(_midiDriver);
if (driver && _native_mt32)
driver->property (MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
_musicEngine = _imuse = IMuse::create(syst, _mixer, driver);
@@ -2795,12 +2795,12 @@ Engine *Engine_SCUMM_create(GameDetector *detector, OSystem *syst) {
const ScummGameSettings *g = scumm_settings;
while (g->gameName) {
- if (!scumm_stricmp(detector->_game.gameName, g->gameName))
+ if (!scumm_stricmp(detector->_gameName.c_str(), g->gameName))
break;
g++;
}
if (!g->gameName)
- error("Invalid game '%s'\n", detector->_game.gameName);
+ error("Invalid game '%s'\n", detector->_gameName.c_str());
ScummGameSettings game = *g;
diff --git a/simon/simon.cpp b/simon/simon.cpp
index b85af55979..55c9c0209c 100644
--- a/simon/simon.cpp
+++ b/simon/simon.cpp
@@ -234,7 +234,7 @@ static const GameSpecificSettings simon2dos_settings = {
SimonEngine::SimonEngine(GameDetector *detector, OSystem *syst)
- : Engine(detector, syst), midi (syst) {
+ : Engine(syst), midi (syst) {
_vc_ptr = 0;
_game_offsets_ptr = 0;
@@ -507,7 +507,7 @@ SimonEngine::SimonEngine(GameDetector *detector, OSystem *syst)
set_volume(ConfMan.getInt("sfx_volume"));
// Setup midi driver
- MidiDriver *driver = detector->createMidi(GameDetector::detectMusicDriver(detector->_game.midi));
+ MidiDriver *driver = GameDetector::createMidi(GameDetector::detectMusicDriver(detector->_game.midi));
if (!driver)
driver = MidiDriver_ADLIB_create(_mixer);
else if (ConfMan.getBool("native_mt32"))
diff --git a/simon/simon.h b/simon/simon.h
index bd386eaba1..7f49dc8e84 100644
--- a/simon/simon.h
+++ b/simon/simon.h
@@ -29,6 +29,8 @@
#include "sound/mixer.h"
#include "simon/sound.h"
+class GameDetector;
+
namespace Simon {
/* Various other settings */
diff --git a/sky/sky.cpp b/sky/sky.cpp
index 781e91b39e..71c055ae53 100644
--- a/sky/sky.cpp
+++ b/sky/sky.cpp
@@ -113,7 +113,7 @@ void **SkyEngine::_itemList[300];
SystemVars SkyEngine::_systemVars = {0, 0, 0, 0, 4316, 0, 0, false, false };
SkyEngine::SkyEngine(GameDetector *detector, OSystem *syst)
- : Engine(detector, syst) {
+ : Engine(syst) {
if (!_mixer->bindToSystem(syst))
warning("Sound initialisation failed.");
@@ -122,7 +122,7 @@ SkyEngine::SkyEngine(GameDetector *detector, OSystem *syst)
_debugMode = ConfMan.hasKey("debuglevel");
_debugLevel = ConfMan.getInt("debuglevel");
- _detector = detector;
+ _midi = detector->_game.midi;
_floppyIntro = ConfMan.getBool("floppy_intro");
@@ -256,16 +256,16 @@ void SkyEngine::initialise(void) {
_systemVars.gameVersion = _skyDisk->determineGameVersion();
- int midiDriver = GameDetector::detectMusicDriver(_detector->_game.midi);
+ int midiDriver = GameDetector::detectMusicDriver(_midi);
if (midiDriver == MD_ADLIB) {
_systemVars.systemFlags |= SF_SBLASTER;
_skyMusic = new SkyAdlibMusic(_mixer, _skyDisk, _system);
} else {
_systemVars.systemFlags |= SF_ROLAND;
if (ConfMan.getBool("native_mt32"))
- _skyMusic = new SkyMT32Music(_detector->createMidi(midiDriver), _skyDisk, _system);
+ _skyMusic = new SkyMT32Music(GameDetector::createMidi(midiDriver), _skyDisk, _system);
else
- _skyMusic = new SkyGmMusic(_detector->createMidi(midiDriver), _skyDisk, _system);
+ _skyMusic = new SkyGmMusic(GameDetector::createMidi(midiDriver), _skyDisk, _system);
}
if (isCDVersion()) {
@@ -289,7 +289,7 @@ void SkyEngine::initialise(void) {
_skyLogic = new SkyLogic(_skyScreen, _skyDisk, _skyText, _skyMusic, _skyMouse, _skySound);
_skyMouse->useLogicInstance(_skyLogic);
- _timer = Engine::_timer; // initialize timer *after* _skyScreen has been initialized.
+ // initialize timer *after* _skyScreen has been initialized.
_timer->installTimerProc(&timerHandler, 1000000 / 50, this); //call 50 times per second
_skyControl = new SkyControl(_skyScreen, _skyDisk, _skyMouse, _skyText, _skyMusic, _skyLogic, _skySound, _system, getSavePath());
diff --git a/sky/sky.h b/sky/sky.h
index 97ae272303..2d2660b288 100644
--- a/sky/sky.h
+++ b/sky/sky.h
@@ -25,6 +25,8 @@
#include "stdafx.h"
#include "base/engine.h"
+class GameDetector;
+
struct SystemVars {
uint32 systemFlags;
uint32 gameVersion;
@@ -75,7 +77,7 @@ protected:
SkyMusicBase *_skyMusic;
SkyIntro *_skyIntro;
- GameDetector *_detector; // necessary for music
+ int _midi; // necessary for music
public:
SkyEngine(GameDetector *detector, OSystem *syst);
diff --git a/sword2/sword2.cpp b/sword2/sword2.cpp
index a5d1a56e5e..a63ceb3169 100644
--- a/sword2/sword2.cpp
+++ b/sword2/sword2.cpp
@@ -54,7 +54,7 @@ static const GameSettings sword2_settings[] = {
/* Broken Sword 2 */
{"sword2", "Broken Sword II", MDT_ADLIB | MDT_NATIVE, GF_DEFAULT_TO_1X_SCALER, "players.clu" },
{"sword2alt", "Broken Sword II (alt)", MDT_ADLIB | MDT_NATIVE, GF_DEFAULT_TO_1X_SCALER, "r2ctlns.ocx" },
- {"sword2demo", "Broken Sword II (Demo)", MDT_ADLIB | MDT_NATIVE, GF_DEFAULT_TO_1X_SCALER | GF_DEMO, "players.clu" },
+ {"sword2demo", "Broken Sword II (Demo)", MDT_ADLIB | MDT_NATIVE, GF_DEFAULT_TO_1X_SCALER | Sword2::GF_DEMO, "players.clu" },
{NULL, NULL, MDT_NONE, 0, NULL}
};
@@ -102,9 +102,8 @@ Sound *g_sound = NULL;
Display *g_display = NULL;
Sword2Engine::Sword2Engine(GameDetector *detector, OSystem *syst)
- : Engine(detector, syst) {
+ : Engine(syst) {
- _detector = detector;
g_sword2 = this;
_debugger = NULL;
_features = detector->_game.features;
diff --git a/sword2/sword2.h b/sword2/sword2.h
index b8d2094cd9..624c69c289 100644
--- a/sword2/sword2.h
+++ b/sword2/sword2.h
@@ -37,12 +37,14 @@
#include "sword2/driver/d_sound.h"
#include "sword2/driver/d_draw.h"
+class GameDetector;
+
+namespace Sword2 {
+
enum {
GF_DEMO = 1 << 0
};
-namespace Sword2 {
-
// Bodge for PCF76 version so that their demo CD can be labelled "PCF76"
// rather than "RBSII1"
@@ -141,7 +143,6 @@ public:
void go(void);
void parseEvents(void);
int32 InitialiseGame(void);
- GameDetector *_detector;
uint32 _features;
char *_targetName; // target name for saves