mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-14 13:50:13 +00:00
GLK: ADVSYS: Engine skeleton
This commit is contained in:
parent
ed34a41810
commit
d5bb06ed17
41
engines/glk/advsys/advsys.cpp
Normal file
41
engines/glk/advsys/advsys.cpp
Normal file
@ -0,0 +1,41 @@
|
||||
/* ScummVM - Graphic Adventure Engine
|
||||
*
|
||||
* ScummVM is the legal property of its developers, whose names
|
||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
||||
* file distributed with this source distribution.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "glk/advsys/advsys.h"
|
||||
|
||||
namespace Glk {
|
||||
namespace AdvSys {
|
||||
|
||||
void AdvSys::runGame() {
|
||||
// TODO
|
||||
}
|
||||
|
||||
Common::Error AdvSys::loadGameData(strid_t save) {
|
||||
return Common::kNoError;
|
||||
}
|
||||
|
||||
Common::Error AdvSys::saveGameData(strid_t save, const Common::String& desc) {
|
||||
return Common::kNoError;
|
||||
}
|
||||
|
||||
} // End of namespace AdvSys
|
||||
} // End of namespace Glk
|
68
engines/glk/advsys/advsys.h
Normal file
68
engines/glk/advsys/advsys.h
Normal file
@ -0,0 +1,68 @@
|
||||
/* ScummVM - Graphic Adventure Engine
|
||||
*
|
||||
* ScummVM is the legal property of its developers, whose names
|
||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
||||
* file distributed with this source distribution.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GLK_ADVSYS_ADVSYS
|
||||
#define GLK_ADVSYS_ADVSYS
|
||||
|
||||
#include "common/scummsys.h"
|
||||
#include "glk/glk_api.h"
|
||||
|
||||
namespace Glk {
|
||||
namespace AdvSys {
|
||||
|
||||
/**
|
||||
* AdvSys game interpreter
|
||||
*/
|
||||
class AdvSys : public GlkAPI {
|
||||
private:
|
||||
|
||||
public:
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
AdvSys(OSystem *syst, const GlkGameDescription &gameDesc) : GlkAPI(syst, gameDesc) {}
|
||||
|
||||
/**
|
||||
* Run the game
|
||||
*/
|
||||
virtual void runGame() override;
|
||||
|
||||
/**
|
||||
* Returns the running interpreter type
|
||||
*/
|
||||
virtual InterpreterType getInterpreterType() const override { return INTERPRETER_ADVSYS; }
|
||||
|
||||
/**
|
||||
* Load a savegame from the passed stream
|
||||
*/
|
||||
virtual Common::Error loadGameData(strid_t save) override;
|
||||
|
||||
/**
|
||||
* Save the game to the passed stream
|
||||
*/
|
||||
virtual Common::Error saveGameData(strid_t save, const Common::String &desc) override;
|
||||
};
|
||||
|
||||
} // End of namespace AdvSys
|
||||
} // End of namespace Glk
|
||||
|
||||
#endif
|
34
engines/glk/advsys/definitions.h
Normal file
34
engines/glk/advsys/definitions.h
Normal file
@ -0,0 +1,34 @@
|
||||
/* ScummVM - Graphic Adventure Engine
|
||||
*
|
||||
* ScummVM is the legal property of its developers, whose names
|
||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
||||
* file distributed with this source distribution.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GLK_ADVSYS_DEFINITIONS
|
||||
#define GLK_ADVSYS_DEFINITIONS
|
||||
|
||||
namespace Glk {
|
||||
namespace AdvSys {
|
||||
|
||||
|
||||
|
||||
} // End of namespace AdvSys
|
||||
} // End of namespace Glk
|
||||
|
||||
#endif
|
95
engines/glk/advsys/detection.cpp
Normal file
95
engines/glk/advsys/detection.cpp
Normal file
@ -0,0 +1,95 @@
|
||||
/* ScummVM - Graphic Adventure Engine
|
||||
*
|
||||
* ScummVM is the legal property of its developers, whose names
|
||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
||||
* file distributed with this source distribution.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "glk/advsys/detection.h"
|
||||
#include "glk/advsys/detection_tables.h"
|
||||
#include "common/file.h"
|
||||
#include "common/md5.h"
|
||||
#include "engines/game.h"
|
||||
|
||||
namespace Glk {
|
||||
namespace AdvSys {
|
||||
|
||||
void AdvSysMetaEngine::getSupportedGames(PlainGameList &games) {
|
||||
for (const PlainGameDescriptor *pd = ADVSYS_GAME_LIST; pd->gameId; ++pd)
|
||||
games.push_back(*pd);
|
||||
}
|
||||
|
||||
GameDescriptor AdvSysMetaEngine::findGame(const char *gameId) {
|
||||
for (const PlainGameDescriptor *pd = ADVSYS_GAME_LIST; pd->gameId; ++pd) {
|
||||
if (!strcmp(gameId, pd->gameId))
|
||||
return *pd;
|
||||
}
|
||||
|
||||
return GameDescriptor::empty();
|
||||
}
|
||||
|
||||
bool AdvSysMetaEngine::detectGames(const Common::FSList &fslist, DetectedGames &gameList) {
|
||||
const char *const EXTENSIONS[] = { ".dat", nullptr };
|
||||
|
||||
// Loop through the files of the folder
|
||||
for (Common::FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) {
|
||||
// Check for a recognised filename
|
||||
if (file->isDirectory())
|
||||
continue;
|
||||
|
||||
Common::String filename = file->getName();
|
||||
bool hasExt = false;
|
||||
for (const char *const *ext = &EXTENSIONS[0]; *ext && !hasExt; ++ext)
|
||||
hasExt = filename.hasSuffixIgnoreCase(*ext);
|
||||
if (!hasExt)
|
||||
continue;
|
||||
|
||||
Common::File gameFile;
|
||||
if (!gameFile.open(*file))
|
||||
continue;
|
||||
Common::String md5 = Common::computeStreamMD5AsString(gameFile, 5000);
|
||||
int32 filesize = gameFile.size();
|
||||
|
||||
// Scan through the AdvSys game list for a match
|
||||
const AdvSysGame *p = ADVSYS_GAMES;
|
||||
while (p->_md5 && p->_filesize != filesize && md5 != p->_md5)
|
||||
++p;
|
||||
|
||||
if (p->_filesize) {
|
||||
// Found a match
|
||||
PlainGameDescriptor gameDesc = findGame(p->_gameId);
|
||||
DetectedGame gd(p->_gameId, gameDesc.description, Common::EN_ANY, Common::kPlatformUnknown);
|
||||
gd.addExtraEntry("filename", file->getName());
|
||||
|
||||
gameList.push_back(gd);
|
||||
}
|
||||
}
|
||||
|
||||
return !gameList.empty();
|
||||
}
|
||||
|
||||
void AdvSysMetaEngine::detectClashes(Common::StringMap &map) {
|
||||
for (const PlainGameDescriptor *pd = ADVSYS_GAME_LIST; pd->gameId; ++pd) {
|
||||
if (map.contains(pd->gameId))
|
||||
error("Duplicate game Id found - %s", pd->gameId);
|
||||
map[pd->gameId] = "";
|
||||
}
|
||||
}
|
||||
|
||||
} // End of namespace AdvSys
|
||||
} // End of namespace Glk
|
60
engines/glk/advsys/detection.h
Normal file
60
engines/glk/advsys/detection.h
Normal file
@ -0,0 +1,60 @@
|
||||
/* ScummVM - Graphic Adventure Engine
|
||||
*
|
||||
* ScummVM is the legal property of its developers, whose names
|
||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
||||
* file distributed with this source distribution.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GLK_ADVSYS_DETECTION
|
||||
#define GLK_ADVSYS_DETECTION
|
||||
|
||||
#include "common/fs.h"
|
||||
#include "common/hash-str.h"
|
||||
#include "engines/game.h"
|
||||
#include "glk/detection.h"
|
||||
|
||||
namespace Glk {
|
||||
namespace AdvSys {
|
||||
|
||||
class AdvSysMetaEngine {
|
||||
public:
|
||||
/**
|
||||
* Get a list of supported games
|
||||
*/
|
||||
static void getSupportedGames(PlainGameList &games);
|
||||
|
||||
/**
|
||||
* Returns a game description for the given game Id, if it's supported
|
||||
*/
|
||||
static GameDescriptor findGame(const char *gameId);
|
||||
|
||||
/**
|
||||
* Detect supported games
|
||||
*/
|
||||
static bool detectGames(const Common::FSList &fslist, DetectedGames &gameList);
|
||||
|
||||
/**
|
||||
* Check for game Id clashes with other sub-engines
|
||||
*/
|
||||
static void detectClashes(Common::StringMap &map);
|
||||
};
|
||||
|
||||
} // End of namespace AdvSys
|
||||
} // End of namespace Glk
|
||||
|
||||
#endif
|
49
engines/glk/advsys/detection_tables.h
Normal file
49
engines/glk/advsys/detection_tables.h
Normal file
@ -0,0 +1,49 @@
|
||||
/* ScummVM - Graphic Adventure Engine
|
||||
*
|
||||
* ScummVM is the legal property of its developers, whose names
|
||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
||||
* file distributed with this source distribution.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "engines/game.h"
|
||||
#include "common/gui_options.h"
|
||||
#include "common/language.h"
|
||||
|
||||
namespace Glk {
|
||||
namespace AdvSys {
|
||||
|
||||
/**
|
||||
* Game descriptor for Scott Adams games
|
||||
*/
|
||||
struct AdvSysGame {
|
||||
const char *_md5;
|
||||
const char *_gameId;
|
||||
int32 _filesize;
|
||||
};
|
||||
|
||||
const PlainGameDescriptor ADVSYS_GAME_LIST[] = {
|
||||
{ nullptr, nullptr }
|
||||
};
|
||||
|
||||
const AdvSysGame ADVSYS_GAMES[] = {
|
||||
|
||||
{ nullptr, nullptr, 0 }
|
||||
};
|
||||
|
||||
} // End of namespace AdvSys
|
||||
} // End of namespace Glk
|
@ -22,6 +22,8 @@
|
||||
|
||||
#include "glk/glk.h"
|
||||
#include "glk/detection.h"
|
||||
#include "glk/advsys/detection.h"
|
||||
#include "glk/advsys/advsys.h"
|
||||
#include "glk/alan2/detection.h"
|
||||
#include "glk/alan2/alan2.h"
|
||||
#include "glk/frotz/detection.h"
|
||||
@ -116,6 +118,7 @@ Common::Error GlkMetaEngine::createInstance(OSystem *syst, Engine **engine) cons
|
||||
else if ((*engine = create<Glk::Hugo::HugoMetaEngine, Glk::Hugo::Hugo>(syst, gameDesc)) != nullptr) {}
|
||||
else if ((*engine = create<Glk::Scott::ScottMetaEngine, Glk::Scott::Scott>(syst, gameDesc)) != nullptr) {}
|
||||
#ifndef RELEASE_BUILD
|
||||
else if ((*engine = create<Glk::AdvSys::AdvSysMetaEngine, Glk::AdvSys::AdvSys>(syst, gameDesc)) != nullptr) {}
|
||||
else if ((*engine = create<Glk::Alan2::Alan2MetaEngine, Glk::Alan2::Alan2>(syst, gameDesc)) != nullptr) {}
|
||||
else if ((*engine = create<Glk::Magnetic::MagneticMetaEngine, Glk::Magnetic::Magnetic>(syst, gameDesc)) != nullptr) {}
|
||||
else if ((td = Glk::TADS::TADSMetaEngine::findGame(gameDesc._gameId.c_str()))._description) {
|
||||
@ -161,6 +164,7 @@ PlainGameList GlkMetaEngine::getSupportedGames() const {
|
||||
Glk::Hugo::HugoMetaEngine::getSupportedGames(list);
|
||||
Glk::Scott::ScottMetaEngine::getSupportedGames(list);
|
||||
#ifndef RELEASE_BUILD
|
||||
Glk::AdvSys::AdvSysMetaEngine::getSupportedGames(list);
|
||||
Glk::Alan2::Alan2MetaEngine::getSupportedGames(list);
|
||||
Glk::Magnetic::MagneticMetaEngine::getSupportedGames(list);
|
||||
Glk::TADS::TADSMetaEngine::getSupportedGames(list);
|
||||
@ -183,6 +187,9 @@ PlainGameDescriptor GlkMetaEngine::findGame(const char *gameId) const {
|
||||
if (gd._description) return gd;
|
||||
|
||||
#ifndef RELEASE_BUILD
|
||||
gd = Glk::AdvSys::AdvSysMetaEngine::findGame(gameId);
|
||||
if (gd._description) return gd;
|
||||
|
||||
gd = Glk::Alan2::Alan2MetaEngine::findGame(gameId);
|
||||
if (gd._description) return gd;
|
||||
|
||||
@ -206,6 +213,7 @@ DetectedGames GlkMetaEngine::detectGames(const Common::FSList &fslist) const {
|
||||
Glk::Scott::ScottMetaEngine::detectGames(fslist, detectedGames);
|
||||
|
||||
#ifndef RELEASE_BUILD
|
||||
Glk::AdvSys::AdvSysMetaEngine::detectGames(fslist, detectedGames);
|
||||
Glk::Alan2::Alan2MetaEngine::detectGames(fslist, detectedGames);
|
||||
Glk::Magnetic::MagneticMetaEngine::detectGames(fslist, detectedGames);
|
||||
Glk::TADS::TADSMetaEngine::detectGames(fslist, detectedGames);
|
||||
@ -222,6 +230,7 @@ void GlkMetaEngine::detectClashes() const {
|
||||
Glk::Scott::ScottMetaEngine::detectClashes(map);
|
||||
|
||||
#ifndef RELEASE_BUILD
|
||||
Glk::AdvSys::AdvSysMetaEngine::detectClashes(map);
|
||||
Glk::Alan2::Alan2MetaEngine::detectClashes(map);
|
||||
Glk::Magnetic::MagneticMetaEngine::detectClashes(map);
|
||||
Glk::TADS::TADSMetaEngine::detectClashes(map);
|
||||
|
@ -25,6 +25,8 @@ MODULE_OBJS := \
|
||||
window_pair.o \
|
||||
window_text_buffer.o \
|
||||
window_text_grid.o \
|
||||
advsys/advsys.o \
|
||||
advsys/detection.o \
|
||||
alan2/alan2.o \
|
||||
alan2/decode.o \
|
||||
alan2/detection.o \
|
||||
|
Loading…
Reference in New Issue
Block a user