Skip to content

Commit

Permalink
PEGASUS: Add my very WIP Pegasus Prime engine
Browse files Browse the repository at this point in the history
  • Loading branch information
Matthew Hoops committed Feb 21, 2011
1 parent 0ec91de commit 950676b
Show file tree
Hide file tree
Showing 14 changed files with 1,762 additions and 0 deletions.
3 changes: 3 additions & 0 deletions base/plugins.cpp
Expand Up @@ -139,6 +139,9 @@ class StaticPluginProvider : public PluginProvider {
#if PLUGIN_ENABLED_STATIC(PARALLACTION)
LINK_PLUGIN(PARALLACTION)
#endif
#if PLUGIN_ENABLED_STATIC(PEGASUS)
LINK_PLUGIN(PEGASUS)
#endif
#if PLUGIN_ENABLED_STATIC(QUEEN)
LINK_PLUGIN(QUEEN)
#endif
Expand Down
1 change: 1 addition & 0 deletions configure
Expand Up @@ -97,6 +97,7 @@ add_engine m4 "M4/MADS" no
add_engine made "MADE" yes
add_engine mohawk "Mohawk" no
add_engine parallaction "Parallaction" yes
add_engine pegasus "The Journeyman Project: Pegasus Prime" no
add_engine queen "Flight of the Amazon Queen" yes
add_engine saga "SAGA" yes "ihnm saga2"
add_engine ihnm "IHNM" yes
Expand Down
5 changes: 5 additions & 0 deletions engines/engines.mk
Expand Up @@ -104,6 +104,11 @@ DEFINES += -DENABLE_PARALLACTION=$(ENABLE_PARALLACTION)
MODULES += engines/parallaction
endif

ifdef ENABLE_PEGASUS
DEFINES += -DENABLE_PEGASUS=$(ENABLE_PEGASUS)
MODULES += engines/pegasus
endif

ifdef ENABLE_QUEEN
DEFINES += -DENABLE_QUEEN=$(ENABLE_QUEEN)
MODULES += engines/queen
Expand Down
143 changes: 143 additions & 0 deletions engines/pegasus/detection.cpp
@@ -0,0 +1,143 @@
/* 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.
*
* $URL$
* $Id$
*
*/

#include "base/plugins.h"

#include "engines/advancedDetector.h"
#include "common/config-manager.h"
#include "common/file.h"

#include "pegasus/pegasus.h"

namespace Pegasus {

struct PegasusGameDescription {
ADGameDescription desc;
};

bool PegasusEngine::hasFeature(EngineFeature f) const {
return
(f == kSupportsRTL);
}

bool PegasusEngine::isDemo() const {
return (_gameDescription->desc.flags & ADGF_DEMO) != 0;
}

} // End of namespace Pegasus

static const PlainGameDescriptor pegasusGames[] = {
{"pegasus", "The Journeyman Project: Pegasus Prime"},
{0, 0}
};


namespace Pegasus {

static const PegasusGameDescription gameDescriptions[] = {
{
{
"pegasus",
"",
AD_ENTRY1s("JMP PP Resources", "d13a602d2498010d720a6534f097f88b", 2009943),
Common::EN_ANY,
Common::kPlatformMacintosh,
ADGF_MACRESFORK,
Common::GUIO_NONE
},
},

{
{
"pegasus",
"",
AD_ENTRY1s("JMP PP Resources", "d13a602d2498010d720a6534f097f88b", 360129),
Common::EN_ANY,
Common::kPlatformMacintosh,
ADGF_MACRESFORK|ADGF_DEMO,
Common::GUIO_NONE
},
},

{ AD_TABLE_END_MARKER }
};

} // End of namespace Pegasus

static const ADParams detectionParams = {
// Pointer to ADGameDescription or its superset structure
(const byte *)Pegasus::gameDescriptions,
// Size of that superset structure
sizeof(Pegasus::PegasusGameDescription),
// Number of bytes to compute MD5 sum for
5000,
// List of all engine targets
pegasusGames,
// Structure for autoupgrading obsolete targets
0,
// Name of single gameid (optional)
"pegasus",
// List of files for file-based fallback detection (optional)
0,
// Flags
0,
// Additional GUI options (for every game)
Common::GUIO_NONE,
// Maximum directory depth
1,
// List of directory globs
0
};

class PegasusMetaEngine : public AdvancedMetaEngine {
public:
PegasusMetaEngine() : AdvancedMetaEngine(detectionParams) {}

virtual const char *getName() const {
return "Pegasus Prime Engine";
}

virtual const char *getOriginalCopyright() const {
return "The Journeyman Project: Pegasus Prime (C) Presto Studios";
}

virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const;
};

bool PegasusMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const {
const Pegasus::PegasusGameDescription *gd = (const Pegasus::PegasusGameDescription *)desc;

if (gd)
*engine = new Pegasus::PegasusEngine(syst, gd);

return (gd != 0);
}

#if PLUGIN_ENABLED_DYNAMIC(PEGASUS)
REGISTER_PLUGIN_DYNAMIC(PEGASUS, PLUGIN_TYPE_ENGINE, PegasusMetaEngine);
#else
REGISTER_PLUGIN_STATIC(PEGASUS, PLUGIN_TYPE_ENGINE, PegasusMetaEngine);
#endif

0 comments on commit 950676b

Please sign in to comment.