Skip to content

Commit

Permalink
SLUDGE: Add first classes in scummvm to detect .slg game file
Browse files Browse the repository at this point in the history
  • Loading branch information
yinsimei authored and sev- committed Jul 13, 2017
1 parent b9358b9 commit 94439e2
Show file tree
Hide file tree
Showing 7 changed files with 336 additions and 0 deletions.
3 changes: 3 additions & 0 deletions engines/sludge/configure.engine
Original file line number Diff line number Diff line change
@@ -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
34 changes: 34 additions & 0 deletions engines/sludge/console.cpp
Original file line number Diff line number Diff line change
@@ -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
44 changes: 44 additions & 0 deletions engines/sludge/console.h
Original file line number Diff line number Diff line change
@@ -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 */
98 changes: 98 additions & 0 deletions engines/sludge/detection.cpp
Original file line number Diff line number Diff line change
@@ -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
17 changes: 17 additions & 0 deletions engines/sludge/module.mk
Original file line number Diff line number Diff line change
@@ -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
74 changes: 74 additions & 0 deletions engines/sludge/sludge.cpp
Original file line number Diff line number Diff line change
@@ -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

66 changes: 66 additions & 0 deletions engines/sludge/sludge.h
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 94439e2

Please sign in to comment.