aboutsummaryrefslogtreecommitdiff
path: root/base/gameDetector.h
diff options
context:
space:
mode:
authorMax Horn2003-09-17 22:41:01 +0000
committerMax Horn2003-09-17 22:41:01 +0000
commitc1a678afeb5100a99030bb51782e5de98d771997 (patch)
treebae1b38145179bae284a14c983c9541db7644f8c /base/gameDetector.h
parent0b16afb067a7b3f09a97507675eaa4872a59df38 (diff)
downloadscummvm-rg350-c1a678afeb5100a99030bb51782e5de98d771997.tar.gz
scummvm-rg350-c1a678afeb5100a99030bb51782e5de98d771997.tar.bz2
scummvm-rg350-c1a678afeb5100a99030bb51782e5de98d771997.zip
new module 'base'; moved gameDetector.*, main.cpp and base/plugins.* there (this removes the need for an ugly hack in the build system, and is also conceptionally cleaner)
svn-id: r10282
Diffstat (limited to 'base/gameDetector.h')
-rw-r--r--base/gameDetector.h207
1 files changed, 207 insertions, 0 deletions
diff --git a/base/gameDetector.h b/base/gameDetector.h
new file mode 100644
index 0000000000..32eaf96630
--- /dev/null
+++ b/base/gameDetector.h
@@ -0,0 +1,207 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2003 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * $Header$
+ *
+ */
+
+#ifndef GAMEDETECTOR_H
+#define GAMEDETECTOR_H
+
+#include "common/str.h"
+
+class Engine;
+class GameDetector;
+class MidiDriver;
+class OSystem;
+class SoundMixer;
+class Plugin;
+
+/** Default sound/music volumes.
+ * @todo move this to a better place.
+ */
+enum {
+ kDefaultMasterVolume = 192,
+ kDefaultSFXVolume = 192,
+ kDefaultMusicVolume = 192
+};
+
+/** Global (shared) game feature flags. */
+enum {
+ GF_DEFAULT_TO_1X_SCALER = 1 << 31
+};
+
+/* Languages
+ * note: values 0->8 are are _needed_ for scripts in comi please don't
+ * remove/change fixed numbers from this enum
+ */
+enum {
+ EN_USA = 0,
+ DE_DEU = 1,
+ FR_FRA = 2,
+ IT_ITA = 3,
+ PT_BRA = 4,
+ ES_ESP = 5,
+ JA_JPN = 6,
+ ZH_TWN = 7,
+ KO_KOR = 8,
+ SE_SWE = 9,
+ EN_GRB = 10,
+ HB_HEB = 20
+};
+
+enum MidiDriverType {
+ MDT_NONE = 0,
+ MDT_PCSPK = 1, // MD_PCSPK and MD_PCJR
+ MDT_ADLIB = 2, // MD_ADLIB
+ MDT_NATIVE = 4, // Everything else
+ MDT_PREFER_NATIVE = 8
+};
+
+struct TargetSettings {
+ const char *targetName;
+ const char *description;
+ byte id, version;
+ int midi; // MidiDriverType values
+ uint32 features;
+ const char *detectname;
+};
+
+struct MusicDriver {
+ const char *name;
+ const char *description;
+ int id;
+};
+
+struct GraphicsMode {
+ const char *name;
+ const char *description;
+ int id;
+};
+
+struct Language {
+ const char *name;
+ const char *description;
+ int id;
+};
+
+typedef Engine *(*EngineFactory)(GameDetector *detector, OSystem *syst);
+
+// Factory functions => no need to include the specific classes
+// in this header. This serves two purposes:
+// 1) Clean seperation from the game modules (scumm, simon) and the generic code
+// 2) Faster (compiler doesn't have to parse lengthy header files)
+#ifndef DISABLE_SCUMM
+extern const TargetSettings *Engine_SCUMM_targetList();
+extern Engine *Engine_SCUMM_create(GameDetector *detector, OSystem *syst);
+#endif
+
+#ifndef DISABLE_SIMON
+extern Engine *Engine_SIMON_create(GameDetector *detector, OSystem *syst);
+extern const TargetSettings *Engine_SIMON_targetList();
+#endif
+
+#ifndef DISABLE_SKY
+extern const TargetSettings *Engine_SKY_targetList();
+extern Engine *Engine_SKY_create(GameDetector *detector, OSystem *syst);
+#endif
+
+#ifndef DISABLE_SWORD2
+extern const TargetSettings *Engine_SWORD2_targetList();
+extern Engine *Engine_SWORD2_create(GameDetector *detector, OSystem *syst);
+#endif
+
+
+class GameDetector {
+ typedef ScummVM::String String;
+
+public:
+ static const MusicDriver *getMusicDrivers();
+ static bool isMusicDriverAvailable(int drv);
+
+public:
+ GameDetector();
+
+ void parseCommandLine(int argc, char **argv);
+ int detectMain();
+ void setGame(const String &name);
+ const String& getGameName(void);
+
+ String _gameFileName;
+ TargetSettings _game;
+ const Plugin *_plugin;
+
+ bool _fullScreen;
+ bool _aspectRatio;
+
+ int _master_volume;
+ int _music_volume;
+ int _sfx_volume;
+ bool _amiga;
+ int _platform;
+ int _language;
+
+ bool _demo_mode;
+ bool _floppyIntro;
+
+ uint16 _talkSpeed;
+ uint16 _debugMode;
+ uint16 _debugLevel;
+ bool _dumpScripts;
+ bool _noSubtitles;
+ uint16 _bootParam;
+
+ char *_gameDataPath;
+ int _gameTempo;
+ int _midi_driver;
+
+ int _gfx_mode;
+ bool _default_gfx_mode;
+
+ bool _multi_midi;
+ bool _native_mt32;
+
+ int _cdrom;
+ int _save_slot;
+
+ bool _saveconfig;
+ bool _confirmExit;
+
+public:
+ OSystem *createSystem();
+ Engine *createEngine(OSystem *system);
+
+ SoundMixer *createMixer();
+ MidiDriver *createMidi();
+ int getMidiDriverType();
+
+ int parseGraphicsMode(const char *s);
+ void updateconfig();
+
+ const TargetSettings *findTarget(const char *targetName, const Plugin **plugin = NULL) const;
+
+protected:
+ String _gameText;
+
+ bool detectGame(void);
+ bool parseMusicDriver(const char *s);
+ int parseLanguage(const char *s);
+ void list_games();
+};
+
+#endif