From 94439e2ce311734bfe7bb5700a6584b7550ea8f9 Mon Sep 17 00:00:00 2001 From: yinsimei Date: Tue, 21 Mar 2017 21:07:58 +0100 Subject: SLUDGE: Add first classes in scummvm to detect .slg game file --- engines/sludge/configure.engine | 3 ++ engines/sludge/console.cpp | 34 ++++++++++++++ engines/sludge/console.h | 44 ++++++++++++++++++ engines/sludge/detection.cpp | 98 +++++++++++++++++++++++++++++++++++++++++ engines/sludge/module.mk | 17 +++++++ engines/sludge/sludge.cpp | 74 +++++++++++++++++++++++++++++++ engines/sludge/sludge.h | 66 +++++++++++++++++++++++++++ 7 files changed, 336 insertions(+) create mode 100644 engines/sludge/configure.engine create mode 100644 engines/sludge/console.cpp create mode 100644 engines/sludge/console.h create mode 100644 engines/sludge/detection.cpp create mode 100644 engines/sludge/module.mk create mode 100644 engines/sludge/sludge.cpp create mode 100644 engines/sludge/sludge.h (limited to 'engines') diff --git a/engines/sludge/configure.engine b/engines/sludge/configure.engine new file mode 100644 index 0000000000..24ae50dcf7 --- /dev/null +++ b/engines/sludge/configure.engine @@ -0,0 +1,3 @@ +# This file is included from the main "configure" script +# add_engine [name] [desc] [build-by-default] [subengines] [base games] [deps] +add_engine sludge "Sludge" yes \ No newline at end of file diff --git a/engines/sludge/console.cpp b/engines/sludge/console.cpp new file mode 100644 index 0000000000..95d70b9c6d --- /dev/null +++ b/engines/sludge/console.cpp @@ -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. + * + */ + +#include "sludge/console.h" + +namespace Sludge { + +SludgeConsole::SludgeConsole(SludgeEngine *vm) : GUI::Debugger() { + _vm = vm; +} + +SludgeConsole::~SludgeConsole() { +} + +} // End of namespace Sludge diff --git a/engines/sludge/console.h b/engines/sludge/console.h new file mode 100644 index 0000000000..5f9640972a --- /dev/null +++ b/engines/sludge/console.h @@ -0,0 +1,44 @@ +/* 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 SLUDGE_CONSOLE_H +#define SLUDGE_CONSOLE_H + +#include "gui/debugger.h" + +namespace Sludge { + +class SludgeEngine; + +// Example console class +class SludgeConsole : public GUI::Debugger { +public: + SludgeConsole(SludgeEngine *vm); + virtual ~SludgeConsole(void); + +private: + SludgeEngine *_vm; +}; + +} // End of namespace Sludge + +#endif /* SLUDGE_CONSOLE_H */ diff --git a/engines/sludge/detection.cpp b/engines/sludge/detection.cpp new file mode 100644 index 0000000000..8297165f73 --- /dev/null +++ b/engines/sludge/detection.cpp @@ -0,0 +1,98 @@ +/* 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 "common/debug.h" + +#include "engines/advancedDetector.h" + +#include "sludge/sludge.h" + +namespace Sludge { + +struct SludgeGameDescription { + ADGameDescription desc; + + int gameType; +}; + +int SludgeEngine::getGameType() const { return _gameDescription->gameType; } +const char *SludgeEngine::getGameId() const { return _gameDescription->desc.gameId;} +uint32 SludgeEngine::getFeatures() const { return _gameDescription->desc.flags; } +Common::Language SludgeEngine::getLanguage() const { return _gameDescription->desc.language; } + +} // End of namespace Sludge + +static const PlainGameDescriptor sludgeGames[] = { + { "sludge", "Sludge Game" }, + { "welcome", "Welcome Example" }, + { 0, 0 } +}; + +namespace Sludge { +static const SludgeGameDescription gameDescriptions[] = { + { + { + "welcome", + "", + AD_ENTRY1("Welcome.slg", "50445503761cf6684fe3270d0860a4c3"), + Common::EN_ANY, + Common::kPlatformUnknown, + ADGF_NO_FLAGS, + GUIO0() + }, + 0 + }, + + { AD_TABLE_END_MARKER, 0 } +}; + +} // End of namespace Sludge + +class SludgeMetaEngine : public AdvancedMetaEngine { +public: + SludgeMetaEngine() : AdvancedMetaEngine(Sludge::gameDescriptions, sizeof(Sludge::SludgeGameDescription), sludgeGames) { + _singleId = "sludge"; + _maxScanDepth = 1; + } + + virtual const char *getName() const { + return "Sludge Engine"; + } + + virtual const char *getOriginalCopyright() const { + return "Copyright (C) 2000-2014 Hungry Software and contributors"; + } + + + virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const { + const Sludge::SludgeGameDescription *gd = (const Sludge::SludgeGameDescription *)desc; + if (gd) { + *engine = new Sludge::SludgeEngine(syst, gd); + } + return gd != 0; + } +}; + +#if PLUGIN_ENABLED_DYNAMIC(SLUDGE) + REGISTER_PLUGIN_DYNAMIC(SLUDGE, PLUGIN_TYPE_ENGINE, SludgeMetaEngine); +#else + REGISTER_PLUGIN_STATIC(SLUDGE, PLUGIN_TYPE_ENGINE, SludgeMetaEngine); +#endif diff --git a/engines/sludge/module.mk b/engines/sludge/module.mk new file mode 100644 index 0000000000..45929cf861 --- /dev/null +++ b/engines/sludge/module.mk @@ -0,0 +1,17 @@ +MODULE := engines/sludge + +MODULE_OBJS := \ + detection.o \ + sludge.o \ + console.o + +MODULE_DIRS += \ + engines/sludge + +# This module can be built as a plugin +ifeq ($(ENABLE_SLUDGE), DYNAMIC_PLUGIN) +PLUGIN := 1 +endif + +# Include common rules +include $(srcdir)/rules.mk \ No newline at end of file diff --git a/engines/sludge/sludge.cpp b/engines/sludge/sludge.cpp new file mode 100644 index 0000000000..9a910b20dc --- /dev/null +++ b/engines/sludge/sludge.cpp @@ -0,0 +1,74 @@ +/* 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 "common/scummsys.h" + +#include "common/config-manager.h" +#include "common/debug.h" +#include "common/debug-channels.h" +#include "common/error.h" + +#include "engines/util.h" + +#include "sludge/sludge.h" + +namespace Sludge { + +SludgeEngine::SludgeEngine(OSystem *syst, const SludgeGameDescription *gameDesc) + : Engine(syst), _gameDescription(gameDesc), _console(nullptr) { + + // register your random source + _rnd = new Common::RandomSource("sludge"); + + // Add debug channels + DebugMan.addDebugChannel(kSludgeDebugScript, "Script", "Script debug level"); + + // check init + debug("SludgeEngine::SludgeEngine"); +} + +SludgeEngine::~SludgeEngine() { + + // Dispose resources + delete _rnd; + + // Remove debug levels + DebugMan.clearAllDebugChannels(); + + // Dispose console + delete _console; +} + +Common::Error SludgeEngine::run() { + // init graphics + initGraphics(640, 480, false); + + // create console + _console = new SludgeConsole(this); + + // debug log + debug("SludgeEngine::init"); + + return Common::kNoError; +} + +} // End of namespace Sludge + diff --git a/engines/sludge/sludge.h b/engines/sludge/sludge.h new file mode 100644 index 0000000000..5fe7c9a1e5 --- /dev/null +++ b/engines/sludge/sludge.h @@ -0,0 +1,66 @@ +/* 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 SLUDGE_H +#define SLUDGE_H + +#include "common/random.h" +#include "engines/engine.h" +#include "gui/debugger.h" + +#include "sludge/console.h" + +namespace Sludge { + +class SludgeConsole; + +struct SludgeGameDescription; + +// debug channels +enum { + kSludgeDebugScript = 1 << 0 +}; + +class SludgeEngine : public Engine { +protected: + // Engine APIs + virtual Common::Error run(); + +public: + SludgeEngine(OSystem *syst, const SludgeGameDescription *gameDesc); + virtual ~SludgeEngine(); + + int getGameType() const; + const char *getGameId() const; + uint32 getFeatures() const; + Common::Language getLanguage() const; + + const SludgeGameDescription *_gameDescription; + +private: + SludgeConsole *_console; + Common::RandomSource *_rnd; +}; + +} // End of namespace Sludge + +#endif -- cgit v1.2.3