diff options
-rw-r--r-- | common/engine.h | 10 | ||||
-rw-r--r-- | common/gameDetector.cpp | 80 | ||||
-rw-r--r-- | common/gameDetector.h | 13 | ||||
-rw-r--r-- | common/module.mk | 1 | ||||
-rw-r--r-- | common/plugins.cpp | 46 | ||||
-rw-r--r-- | common/plugins.h | 73 | ||||
-rw-r--r-- | gui/launcher.cpp | 78 | ||||
-rw-r--r-- | scumm/scummvm.cpp | 6 | ||||
-rw-r--r-- | simon/simon.cpp | 4 | ||||
-rw-r--r-- | sky/sky.cpp | 4 | ||||
-rw-r--r-- | sword2/logic.cpp | 2 | ||||
-rw-r--r-- | sword2/sword2.cpp | 4 |
12 files changed, 226 insertions, 95 deletions
diff --git a/common/engine.h b/common/engine.h index bed622bcf2..2ad6c3f638 100644 --- a/common/engine.h +++ b/common/engine.h @@ -49,7 +49,7 @@ enum GameId { class SoundMixer; class GameDetector; class Timer; -struct VersionSettings; +struct TargetSettings; /* FIXME - BIG HACK for MidiEmu */ extern OSystem *g_system; @@ -101,22 +101,22 @@ void checkHeap(); // 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 VersionSettings *Engine_SCUMM_targetList(); +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 VersionSettings *Engine_SIMON_targetList(); +extern const TargetSettings *Engine_SIMON_targetList(); #endif #ifndef DISABLE_SKY -extern const VersionSettings *Engine_SKY_targetList(); +extern const TargetSettings *Engine_SKY_targetList(); extern Engine *Engine_SKY_create(GameDetector *detector, OSystem *syst); #endif #ifndef DISABLE_SWORD2 -extern const VersionSettings *Engine_SWORD2_targetList(); +extern const TargetSettings *Engine_SWORD2_targetList(); extern Engine *Engine_SWORD2_create(GameDetector *detector, OSystem *syst); #endif diff --git a/common/gameDetector.cpp b/common/gameDetector.cpp index e1880c9bfc..6192600788 100644 --- a/common/gameDetector.cpp +++ b/common/gameDetector.cpp @@ -100,7 +100,7 @@ static const char USAGE_STRING[] = ; #endif // This contains a pointer to a list of all supported games. -const VersionSettings *version_settings = NULL; +const TargetSettings *version_settings = NULL; static const struct GraphicsMode gfx_modes[] = { {"normal", "Normal (no scaling)", GFX_NORMAL}, @@ -159,9 +159,9 @@ static const struct MusicDriver music_drivers[] = { {0, 0, 0} }; -static int countVersions(const VersionSettings *v) { +static int countVersions(const TargetSettings *v) { int count; - for (count = 0; v->filename; v++, count++) + for (count = 0; v->targetName; v++, count++) ; return count; } @@ -220,49 +220,49 @@ GameDetector::GameDetector() { // Gather & combine the target lists from the modules #ifndef DISABLE_SCUMM - const VersionSettings *scummVersions = Engine_SCUMM_targetList(); + const TargetSettings *scummVersions = Engine_SCUMM_targetList(); int scummCount = countVersions(scummVersions); totalCount += scummCount; #endif #ifndef DISABLE_SIMON - const VersionSettings *simonVersions = Engine_SIMON_targetList(); + const TargetSettings *simonVersions = Engine_SIMON_targetList(); int simonCount = countVersions(simonVersions); totalCount += simonCount; #endif #ifndef DISABLE_SKY - const VersionSettings *skyVersions = Engine_SKY_targetList(); + const TargetSettings *skyVersions = Engine_SKY_targetList(); int skyCount = countVersions(skyVersions); totalCount += skyCount; #endif #ifndef DISABLE_SWORD2 - const VersionSettings *sword2Versions = Engine_SWORD2_targetList(); + const TargetSettings *sword2Versions = Engine_SWORD2_targetList(); int sword2Count = countVersions(sword2Versions); totalCount += sword2Count; #endif - VersionSettings *v = (VersionSettings *)calloc(totalCount + 1, sizeof(VersionSettings)); + TargetSettings *v = (TargetSettings *)calloc(totalCount + 1, sizeof(TargetSettings)); version_settings = v; #ifndef DISABLE_SCUMM - memcpy(v, scummVersions, scummCount * sizeof(VersionSettings)); + memcpy(v, scummVersions, scummCount * sizeof(TargetSettings)); v += scummCount; #endif #ifndef DISABLE_SIMON - memcpy(v, simonVersions, simonCount * sizeof(VersionSettings)); + memcpy(v, simonVersions, simonCount * sizeof(TargetSettings)); v += simonCount; #endif #ifndef DISABLE_SKY - memcpy(v, skyVersions, skyCount * sizeof(VersionSettings)); + memcpy(v, skyVersions, skyCount * sizeof(TargetSettings)); v += skyCount; #endif #ifndef DISABLE_SWORD2 - memcpy(v, sword2Versions, sword2Count * sizeof(VersionSettings)); + memcpy(v, sword2Versions, sword2Count * sizeof(TargetSettings)); v += sword2Count; #endif @@ -273,7 +273,7 @@ GameDetector::GameDetector() { GameDetector::~GameDetector() { // This is a previously allocated chunck (line 224) // so we need to free it to prevent memory leak - VersionSettings *v = (VersionSettings *)version_settings; + TargetSettings *v = (TargetSettings *)version_settings; free(v); } #endif @@ -349,20 +349,33 @@ void GameDetector::updateconfig() { } void GameDetector::list_games() { - const VersionSettings *v = version_settings; + const TargetSettings *v = version_settings; const char *config; printf("Game Full Title Config\n" "---------------- ------------------------------------------------------ -------\n"); - while (v->filename && v->gamename) { - config = (g_config->has_domain(v->filename)) ? "Yes" : ""; - printf("%-17s%-56s%s\n", v->filename, v->gamename, config); + while (v->targetName && v->description) { + config = (g_config->has_domain(v->targetName)) ? "Yes" : ""; + printf("%-17s%-56s%s\n", v->targetName, v->description, config); v++; } } +const TargetSettings *GameDetector::findTarget(const char *targetName) const { + // Find the TargetSettings for this target + const TargetSettings *target = version_settings; + assert(targetName); + while (target->targetName) { + if (!scumm_stricmp(target->targetName, targetName)) { + return target; + } + target++; + } + return 0; +} + void GameDetector::parseCommandLine(int argc, char **argv) { int i; char *s; @@ -678,7 +691,7 @@ bool GameDetector::parseMusicDriver(const char *s) { } bool GameDetector::detectGame() { - const VersionSettings *gnl = version_settings; + const TargetSettings *target; const char *realGame, *basename; _game.id = 0; _gameText.clear(); @@ -687,23 +700,22 @@ bool GameDetector::detectGame() { if (!realGame) realGame = _gameFileName.c_str(); printf("Looking for %s\n", realGame); - - do { - if (!scumm_stricmp(realGame, gnl->filename)) { - _game = *gnl; - if ((basename = g_config->get("basename"))) { - // FIXME: What is this good for? - _game.filename = basename; - } - _gameText = gnl->gamename; - printf("Trying to start game '%s'\n",gnl->gamename); - return true; + + target = findTarget(realGame); + + if (target) { + _game = *target; + if ((basename = g_config->get("basename"))) { + // FIXME: What is this good for? + _game.targetName = basename; } - } while ((++gnl)->filename); - - printf("Failed game detection\n"); - - return false; + _gameText = _game.description; + printf("Trying to start game '%s'\n", _game.description); + return true; + } else { + printf("Failed game detection\n"); + return false; + } } const ScummVM::String& GameDetector::getGameName() { diff --git a/common/gameDetector.h b/common/gameDetector.h index 347539d74d..dd8d770d43 100644 --- a/common/gameDetector.h +++ b/common/gameDetector.h @@ -69,9 +69,9 @@ enum MidiDriverType { MDT_PREFER_NATIVE = 8 }; -struct VersionSettings { - const char *filename; - const char *gamename; +struct TargetSettings { + const char *targetName; + const char *description; byte id, version; int midi; // MidiDriverType values uint32 features; @@ -96,9 +96,6 @@ struct Language { int id; }; -extern const VersionSettings *version_settings; - - class GameDetector { typedef ScummVM::String String; @@ -142,7 +139,7 @@ public: int _midi_driver; String _gameFileName; - VersionSettings _game; + TargetSettings _game; int _gfx_mode; bool _default_gfx_mode; @@ -163,6 +160,8 @@ public: int parseGraphicsMode(const char *s); void updateconfig(); + + const TargetSettings *findTarget(const char *targetName) const; protected: String _gameText; diff --git a/common/module.mk b/common/module.mk index e0e898335f..411ee17926 100644 --- a/common/module.mk +++ b/common/module.mk @@ -5,6 +5,7 @@ MODULE_OBJS = \ common/file.o \ common/gameDetector.o \ common/main.o \ + common/plugins.o \ common/scaler.o \ common/str.o \ common/timer.o \ diff --git a/common/plugins.cpp b/common/plugins.cpp new file mode 100644 index 0000000000..cdfae734be --- /dev/null +++ b/common/plugins.cpp @@ -0,0 +1,46 @@ +/* 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$ + * + */ + +#include "common/plugins.h" +#include "common/engine.h" + + +PluginManager::PluginManager() { +} + +PluginManager::~PluginManager() { + // Explicitly unload all loaded plugins + unloadPlugins(); +} + +void PluginManager::loadPlugins() { + // TODO +} + +void PluginManager::unloadPlugins() { + int i; + for (i = 0; i < _plugins.size(); i++) { + _plugins[i]->unloadPlugin(); + delete _plugins[i]; + } + _plugins.clear(); +} diff --git a/common/plugins.h b/common/plugins.h new file mode 100644 index 0000000000..141f433202 --- /dev/null +++ b/common/plugins.h @@ -0,0 +1,73 @@ +/* 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 COMMON_PLUGINS_H +#define COMMON_PLUGINS_H + +#include "common/list.h" + +class Engine; +class GameDetector; +class OSystem; +struct TargetSettings; + +/** + * Abstract base class for the plugin system. + * Subclasses for this can be used to wrap both static and dynamic + * plugins. + */ +class Plugin { +public: + virtual void loadPlugin() {} + virtual void unloadPlugin() {} + + virtual const char *getName() const = 0; + virtual int getVersion() const = 0; + + virtual const TargetSettings *getTargets() const = 0; + virtual Engine *createInstance(GameDetector *detector, OSystem *syst) const = 0; +}; + +/** + * Instances of this class manage all plugins, including loading them, + * making wrapper objects of class Plugin available, and unloading them. + * + * @todo Add support for dynamic plugins (this may need additional API, e.g. for a plugin path) + */ +class PluginManager { +protected: + typedef ScummVM::List<Plugin *> PluginList; + + PluginList _plugins; + +public: + PluginManager(); + ~PluginManager(); + + void loadPlugins(); + void unloadPlugins(); + + const PluginList &getPlugins() { return _plugins; } +}; + + +#endif diff --git a/gui/launcher.cpp b/gui/launcher.cpp index 2246ae7ed9..0ecde0da95 100644 --- a/gui/launcher.cpp +++ b/gui/launcher.cpp @@ -42,7 +42,7 @@ enum { kQuitCmd = 'QUIT' }; -typedef ScummVM::List<const VersionSettings *> GameList; +typedef ScummVM::List<const TargetSettings *> GameList; /* * A dialog that allows the user to edit a config game entry. @@ -72,7 +72,7 @@ class EditGameDialog : public Dialog { typedef ScummVM::String String; typedef ScummVM::StringList StringList; public: - EditGameDialog(NewGui *gui, Config &config, const String &domain); + EditGameDialog(NewGui *gui, const String &domain, const TargetSettings *target); virtual void handleCommand(CommandSender *sender, uint32 cmd, uint32 data); @@ -85,26 +85,18 @@ protected: CheckboxWidget *_amigaCheckbox; }; -EditGameDialog::EditGameDialog(NewGui *gui, Config &config, const String &domain) - : Dialog(gui, 8, 50, 320 - 2 * 8, 200 - 2 * 40), _config(config), _domain(domain) { +EditGameDialog::EditGameDialog(NewGui *gui, const String &domain, const TargetSettings *target) + : Dialog(gui, 8, 50, 320 - 2 * 8, 200 - 2 * 40), _config(*g_config), _domain(domain) { + // Determine the description string - String gameid(_config.get("gameid", _domain)); String description(_config.get("description", _domain)); - const VersionSettings *v = version_settings; - - if (gameid.isEmpty()) - gameid = _domain; - - // Find the VersionSettings for this gameid - while (v->filename) { - if (!scumm_stricmp(v->filename, gameid.c_str())) { - break; - } - v++; - } if (description.isEmpty()) { - description = v->gamename; + description = target->description; } + + // Determine whether this is a SCUMM game + bool isScumm = (GID_SCUMM_FIRST <= target->id && target->id <= GID_SCUMM_LAST); + // Label & edit widget for the game ID new StaticTextWidget(this, 10, 10, 40, kLineHeight, "ID: ", kTextAlignRight); @@ -126,7 +118,7 @@ EditGameDialog::EditGameDialog(NewGui *gui, Config &config, const String &domain _fullscreenCheckbox->setState(_config.getBool("fullscreen", false, _domain)); // Display 'Amiga' checkbox, but only for Scumm games. - if (GID_SCUMM_FIRST <= v->id && v->id <= GID_SCUMM_LAST) { + if (isScumm) { _amigaCheckbox = new CheckboxWidget(this, 15, 82, 200, 16, "Amiga Version", 0, 'A'); _amigaCheckbox->setState(_config.getBool("amiga", false, _domain)); } else { @@ -221,9 +213,14 @@ void LauncherDialog::close() { Dialog::close(); } +// FIXME: EVIL HACK! remove use of version_settings by introducing +// proper APIs for accessing/searching them +extern const TargetSettings *version_settings; + + void LauncherDialog::updateListing() { int i; - const VersionSettings *v = version_settings; + const TargetSettings *v = version_settings; ScummVM::StringList l; // Retrieve a list of all games defined in the config file @@ -237,9 +234,9 @@ void LauncherDialog::updateListing() { name = domains[i]; if (description.isEmpty()) { v = version_settings; - while (v->filename) { - if (!scumm_stricmp(v->filename, name.c_str())) { - description = v->gamename; + while (v->targetName) { + if (!scumm_stricmp(v->targetName, name.c_str())) { + description = v->description; break; } v++; @@ -276,8 +273,8 @@ GameList findGame(FilesystemNode *dir) { // Iterate over all known games and for each check if it might be // the game in the presented directory. - const VersionSettings *v = version_settings; - while (v->filename && v->gamename) { + const TargetSettings *v = version_settings; + while (v->targetName && v->description) { // Determine the 'detectname' for this game, that is, the name of a // file that *must* be presented if the directory contains the data @@ -288,9 +285,9 @@ GameList findGame(FilesystemNode *dir) { strcat(detectName2, "."); detectName3[0] = '\0'; } else { - strcpy(detectName, v->filename); - strcpy(detectName2, v->filename); - strcpy(detectName3, v->filename); + strcpy(detectName, v->targetName); + strcpy(detectName2, v->targetName); + strcpy(detectName3, v->targetName); strcat(detectName, ".000"); if (v->version >= 7) { strcat(detectName2, ".la0"); @@ -301,11 +298,11 @@ GameList findGame(FilesystemNode *dir) { // Iterate over all files in the given directory for (i = 0; i < size; i++) { - const char *filename = (*files)[i].displayName().c_str(); + const char *targetName = (*files)[i].displayName().c_str(); - if ((0 == scumm_stricmp(detectName, filename)) || - (0 == scumm_stricmp(detectName2, filename)) || - (0 == scumm_stricmp(detectName3, filename))) { + if ((0 == scumm_stricmp(detectName, targetName)) || + (0 == scumm_stricmp(detectName2, targetName)) || + (0 == scumm_stricmp(detectName3, targetName))) { // Match found, add to list of candidates, then abort inner loop. list.push_back(v); break; @@ -341,7 +338,7 @@ void LauncherDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 dat // ...so let's determine a list of candidates, games that // could be contained in the specified directory. GameList candidates = findGame(dir); - const VersionSettings *v = 0; + const TargetSettings *v = 0; if (candidates.isEmpty()) { // No game was found in the specified directory @@ -355,7 +352,7 @@ void LauncherDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 dat StringList list; int i; for (i = 0; i < candidates.size(); i++) - list.push_back(candidates[i]->gamename); + list.push_back(candidates[i]->description); ChooserDialog dialog(_gui, "Pick the game:", list); i = dialog.runModal(); @@ -367,7 +364,7 @@ void LauncherDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 dat // The auto detector or the user made a choice. // Pick a domain name which does not yet exist (after all, we // are *adding* a game to the config, not replacing). - String domain(v->filename); + String domain(v->targetName); if (g_config->has_domain(domain)) { char suffix = 'a'; domain += suffix; @@ -376,13 +373,13 @@ void LauncherDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 dat suffix++; domain += suffix; } - g_config->set("gameid", v->filename, domain); - g_config->set("description", v->gamename, domain); + g_config->set("gameid", v->targetName, domain); + g_config->set("description", v->description, domain); } g_config->set("path", dir->path(), domain); // Display edit dialog for the new entry - EditGameDialog editDialog(_gui, *g_config, domain); + EditGameDialog editDialog(_gui, domain, v); if (editDialog.runModal()) { // User pressed OK, so make changes permanent @@ -419,7 +416,10 @@ void LauncherDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 dat // This is useful because e.g. MonkeyVGA needs Adlib music to have decent // music support etc. assert(item >= 0); - EditGameDialog editDialog(_gui, *g_config, _domains[item]); + const char *gameId = g_config->get("gameid", _domains[item]); + if (!gameId) + gameId = _domains[item].c_str(); + EditGameDialog editDialog(_gui, _domains[item], _detector.findTarget(gameId)); if (editDialog.runModal()) { // User pressed OK, so make changes permanent diff --git a/scumm/scummvm.cpp b/scumm/scummvm.cpp index cfa6caf7a9..d3f6b35026 100644 --- a/scumm/scummvm.cpp +++ b/scumm/scummvm.cpp @@ -66,7 +66,7 @@ extern NewGui *g_gui; extern uint16 _debugLevel; extern uint16 _demo_mode; -static const VersionSettings scumm_settings[] = { +static const TargetSettings scumm_settings[] = { /* Scumm Version 1 */ /* Scumm Version 2 */ @@ -228,7 +228,7 @@ static const VersionSettings scumm_settings[] = { {NULL, NULL, 0, 0, MDT_NONE, 0, NULL} }; -const VersionSettings *Engine_SCUMM_targetList() { +const TargetSettings *Engine_SCUMM_targetList() { return scumm_settings; } @@ -613,7 +613,7 @@ Scumm::Scumm (GameDetector *detector, OSystem *syst) _debugLevel = detector->_debugLevel; _dumpScripts = detector->_dumpScripts; _bootParam = detector->_bootParam; - _exe_name = strdup(detector->_game.filename); + _exe_name = strdup(detector->_game.targetName); _game_name = strdup(detector->_gameFileName.c_str()); _gameId = detector->_game.id; _version = detector->_game.version; diff --git a/simon/simon.cpp b/simon/simon.cpp index e66b5cf62d..68fe1ce9ea 100644 --- a/simon/simon.cpp +++ b/simon/simon.cpp @@ -39,7 +39,7 @@ extern bool draw_keyboard; #endif -static const VersionSettings simon_settings[] = { +static const TargetSettings simon_settings[] = { // Simon the Sorcerer 1 & 2 (not SCUMM games) {"simon1dos", "Simon the Sorcerer 1 (DOS)", GID_SIMON_FIRST, 99, MDT_ADLIB | MDT_NATIVE, GAME_SIMON1DOS, "GAMEPC"}, {"simon1amiga", "Simon the Sorcerer 1 (Amiga)", GID_SIMON_FIRST, 99, MDT_NONE, GAME_SIMON1AMIGA, "gameamiga"}, @@ -55,7 +55,7 @@ static const VersionSettings simon_settings[] = { {NULL, NULL, 0, 0, MDT_NONE, 0, NULL} }; -const VersionSettings *Engine_SIMON_targetList() { +const TargetSettings *Engine_SIMON_targetList() { return simon_settings; } diff --git a/sky/sky.cpp b/sky/sky.cpp index 310803c0f0..e8fcd62780 100644 --- a/sky/sky.cpp +++ b/sky/sky.cpp @@ -59,13 +59,13 @@ extern bool draw_keyboard; #undef WITH_DEBUG_CHEATS -static const VersionSettings sky_settings[] = { +static const TargetSettings sky_settings[] = { /* Beneath a Steel Sky */ {"sky", "Beneath a Steel Sky", GID_SKY_FIRST, 99, MDT_ADLIB | MDT_NATIVE | MDT_PREFER_NATIVE, 0, "sky.dsk" }, {NULL, NULL, 0, 0, MDT_NONE, 0, NULL} }; -const VersionSettings *Engine_SKY_targetList() { +const TargetSettings *Engine_SKY_targetList() { return sky_settings; } diff --git a/sword2/logic.cpp b/sword2/logic.cpp index 533d8c3e9b..61a6ba8367 100644 --- a/sword2/logic.cpp +++ b/sword2/logic.cpp @@ -95,7 +95,7 @@ int logic::Process_session(void) //Tony6June96 (first run 21Oct96) if (head->fileType!=GAME_OBJECT) Con_fatal_error("Logic_engine %d not an object", ID); - cur_object_hub = (_object_hub *) (head+1); + cur_object_hub = (_object_hub *) (head+1); // Zdebug(" %d id(%d) pc(%d)", cur_object_hub->logic_level, cur_object_hub->script_id[cur_object_hub->logic_level], cur_object_hub->script_pc[cur_object_hub->logic_level]); diff --git a/sword2/sword2.cpp b/sword2/sword2.cpp index d7cfcde395..5889613a1a 100644 --- a/sword2/sword2.cpp +++ b/sword2/sword2.cpp @@ -78,7 +78,7 @@ uint8 stepOneCycle=0; // for use while game paused //------------------------------------------------------------------------------------ -static const VersionSettings sword2_settings[] = { +static const TargetSettings sword2_settings[] = { /* Broken Sword 2 */ {"sword2", "Broken Sword II", GID_SWORD2, 99, MDT_ADLIB | MDT_NATIVE, GF_DEFAULT_TO_1X_SCALER, "players.clu" }, {"sword2demo", "Broken Sword II (Demo)", GID_SWORD2_DEMO, 99, MDT_ADLIB | MDT_NATIVE, GF_DEFAULT_TO_1X_SCALER, "players.clu" }, @@ -87,7 +87,7 @@ static const VersionSettings sword2_settings[] = { Sword2State *g_sword2 = NULL; -const VersionSettings *Engine_SWORD2_targetList() { +const TargetSettings *Engine_SWORD2_targetList() { return sword2_settings; } |