2010-01-03 23:58:59 +02:00
|
|
|
/* 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 "base/plugins.h"
|
|
|
|
|
|
|
|
#include "engines/advancedDetector.h"
|
|
|
|
#include "common/system.h"
|
|
|
|
#include "common/savefile.h"
|
|
|
|
|
|
|
|
#include "wage/wage.h"
|
|
|
|
|
2010-01-07 23:52:31 +02:00
|
|
|
namespace Wage {
|
|
|
|
|
|
|
|
const char *WageEngine::getGameFile() const {
|
|
|
|
return _gameDescription->filesDescriptions[0].fileName;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2011-06-11 05:41:07 +01:00
|
|
|
static const PlainGameDescriptor wageGames[] = {
|
2010-01-07 23:52:31 +02:00
|
|
|
{"afm", "Another Fine Mess"},
|
2015-12-19 12:30:47 +01:00
|
|
|
{"amot", "A Mess O' Trouble"},
|
2015-12-18 10:05:11 +01:00
|
|
|
{"cantitoe", "Camp Cantitoe"},
|
2016-02-03 23:18:06 +01:00
|
|
|
{"scepters", "Enchanted Scepters"},
|
2016-01-30 23:18:21 +01:00
|
|
|
{"wage", "WAGE"},
|
2010-01-03 23:58:59 +02:00
|
|
|
{0, 0}
|
|
|
|
};
|
|
|
|
|
|
|
|
namespace Wage {
|
|
|
|
|
2016-01-30 23:39:13 +01:00
|
|
|
#define ADGF_DEFAULT (ADGF_DROPLANGUAGE|ADGF_DROPPLATFORM)
|
|
|
|
#define ADGF_GENERIC (ADGF_DROPLANGUAGE|ADGF_DROPPLATFORM|ADGF_USEEXTRAASTITLE)
|
|
|
|
|
2010-01-03 23:58:59 +02:00
|
|
|
static const ADGameDescription gameDescriptions[] = {
|
|
|
|
{
|
2010-01-07 23:52:31 +02:00
|
|
|
"afm",
|
|
|
|
"v1.8",
|
2010-01-03 23:58:59 +02:00
|
|
|
AD_ENTRY1s("Another Fine Mess 1.8", "8e5aa915f3253efb2aab52435647b25e", 1456000),
|
|
|
|
Common::EN_ANY,
|
2015-12-15 11:12:44 +01:00
|
|
|
Common::kPlatformMacintosh,
|
2016-01-30 23:39:13 +01:00
|
|
|
ADGF_DEFAULT,
|
2015-12-18 10:05:11 +01:00
|
|
|
GUIO0()
|
|
|
|
},
|
2015-12-19 12:30:47 +01:00
|
|
|
{
|
|
|
|
"amot",
|
|
|
|
"v1.8",
|
|
|
|
AD_ENTRY1s("A Mess O' Trouble 1.8", "b3ef53afed282671b704e45df829350c", 1895552),
|
|
|
|
Common::EN_ANY,
|
|
|
|
Common::kPlatformMacintosh,
|
2016-01-30 23:39:13 +01:00
|
|
|
ADGF_DEFAULT,
|
2015-12-19 12:30:47 +01:00
|
|
|
GUIO0()
|
|
|
|
},
|
2015-12-18 10:05:11 +01:00
|
|
|
{
|
|
|
|
"cantitoe",
|
|
|
|
"",
|
|
|
|
AD_ENTRY1s("Camp Cantitoe", "098aa5c11c58e1ef274a30a9e01b4755", 621440),
|
|
|
|
Common::EN_ANY,
|
|
|
|
Common::kPlatformMacintosh,
|
2016-01-30 23:39:13 +01:00
|
|
|
ADGF_DEFAULT,
|
2016-01-06 00:41:02 +01:00
|
|
|
GUIO0()
|
|
|
|
},
|
2016-01-30 23:36:54 +01:00
|
|
|
{
|
|
|
|
"wage",
|
|
|
|
"Deep Angst",
|
|
|
|
AD_ENTRY1s("Deep Angst", "635f62bbc569e72b03cab9107927d03d", 335232),
|
|
|
|
Common::EN_ANY,
|
|
|
|
Common::kPlatformMacintosh,
|
2016-01-30 23:39:13 +01:00
|
|
|
ADGF_GENERIC,
|
2016-01-30 23:36:54 +01:00
|
|
|
GUIO0()
|
|
|
|
},
|
2016-01-06 00:41:02 +01:00
|
|
|
{
|
2016-01-30 23:18:21 +01:00
|
|
|
"wage",
|
|
|
|
"Escape from School!",
|
2016-01-06 00:41:02 +01:00
|
|
|
AD_ENTRY1s("Escape from School!", "a854be48d4af20126d18a9cad93a969b", 51840),
|
|
|
|
Common::EN_ANY,
|
|
|
|
Common::kPlatformMacintosh,
|
2016-01-30 23:39:13 +01:00
|
|
|
ADGF_GENERIC,
|
2016-01-06 00:53:55 +01:00
|
|
|
GUIO0()
|
|
|
|
},
|
|
|
|
{
|
2016-01-30 23:18:21 +01:00
|
|
|
"wage",
|
|
|
|
"Queen Quest",
|
2016-01-06 00:53:55 +01:00
|
|
|
AD_ENTRY1s("Queen Quest", "730605d312efedb5e3ff108522fcac18", 59776),
|
|
|
|
Common::EN_ANY,
|
|
|
|
Common::kPlatformMacintosh,
|
2016-01-30 23:39:13 +01:00
|
|
|
ADGF_GENERIC,
|
2016-01-18 21:02:36 +01:00
|
|
|
GUIO0()
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"scepters",
|
|
|
|
"",
|
|
|
|
AD_ENTRY1s("Scepters", "b80bff315897776dda7689cdf829fab4", 360832),
|
|
|
|
Common::EN_ANY,
|
|
|
|
Common::kPlatformMacintosh,
|
2016-01-30 23:39:13 +01:00
|
|
|
ADGF_DEFAULT,
|
2012-10-19 17:40:22 +02:00
|
|
|
GUIO0()
|
2010-01-03 23:58:59 +02:00
|
|
|
},
|
2016-01-30 23:30:44 +01:00
|
|
|
{
|
|
|
|
"wage",
|
|
|
|
"ZikTuria",
|
|
|
|
AD_ENTRY1s("ZikTuria", "e793155bed1a70fa2074a3fcd696b751", 54784),
|
|
|
|
Common::EN_ANY,
|
|
|
|
Common::kPlatformMacintosh,
|
2016-01-30 23:39:13 +01:00
|
|
|
ADGF_GENERIC,
|
2016-01-30 23:30:44 +01:00
|
|
|
GUIO0()
|
|
|
|
},
|
2016-01-30 23:24:03 +01:00
|
|
|
{
|
|
|
|
"wage",
|
|
|
|
"Zoony",
|
|
|
|
AD_ENTRY1s("Zoony", "e6cc8a914a4215dafbcce6315dd12cf5", 160256),
|
|
|
|
Common::EN_ANY,
|
|
|
|
Common::kPlatformMacintosh,
|
2016-01-30 23:39:13 +01:00
|
|
|
ADGF_GENERIC,
|
2016-01-30 23:24:03 +01:00
|
|
|
GUIO0()
|
|
|
|
},
|
2010-01-03 23:58:59 +02:00
|
|
|
|
|
|
|
AD_TABLE_END_MARKER
|
|
|
|
};
|
|
|
|
|
|
|
|
} // End of namespace Wage
|
|
|
|
|
|
|
|
class WageMetaEngine : public AdvancedMetaEngine {
|
|
|
|
public:
|
2011-06-11 05:41:07 +01:00
|
|
|
WageMetaEngine() : AdvancedMetaEngine(Wage::gameDescriptions, sizeof(ADGameDescription), wageGames) {
|
2011-06-15 19:28:33 +01:00
|
|
|
_singleid = "wage";
|
2012-10-19 17:40:22 +02:00
|
|
|
_guioptions = GUIO2(GUIO_NOSPEECH, GUIO_NOMIDI);
|
2011-06-11 05:41:07 +01:00
|
|
|
}
|
2010-01-03 23:58:59 +02:00
|
|
|
|
|
|
|
virtual const char *getName() const {
|
|
|
|
return "World Adventure Game Engine";
|
|
|
|
}
|
|
|
|
|
|
|
|
virtual const char *getOriginalCopyright() const {
|
|
|
|
return "World Builder (C) Silicon Beach Software";
|
|
|
|
}
|
|
|
|
|
|
|
|
virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const;
|
|
|
|
virtual bool hasFeature(MetaEngineFeature f) const;
|
|
|
|
virtual SaveStateList listSaves(const char *target) const;
|
|
|
|
virtual int getMaximumSaveSlot() const;
|
|
|
|
virtual void removeSaveState(const char *target, int slot) const;
|
|
|
|
};
|
|
|
|
|
|
|
|
bool WageMetaEngine::hasFeature(MetaEngineFeature f) const {
|
|
|
|
return
|
|
|
|
(f == kSupportsListSaves) ||
|
|
|
|
(f == kSupportsLoadingDuringStartup) ||
|
|
|
|
(f == kSupportsDeleteSave);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool Wage::WageEngine::hasFeature(EngineFeature f) const {
|
|
|
|
return
|
|
|
|
(f == kSupportsRTL) ||
|
|
|
|
(f == kSupportsLoadingDuringRuntime) ||
|
|
|
|
(f == kSupportsSavingDuringRuntime);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool WageMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const {
|
|
|
|
if (desc) {
|
|
|
|
*engine = new Wage::WageEngine(syst, desc);
|
|
|
|
}
|
|
|
|
return desc != 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
SaveStateList WageMetaEngine::listSaves(const char *target) const {
|
2011-05-30 04:10:52 +01:00
|
|
|
const uint32 WAGEflag = MKTAG('W','A','G','E');
|
2010-01-03 23:58:59 +02:00
|
|
|
Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
|
2011-05-30 04:14:46 +01:00
|
|
|
Common::StringArray filenames;
|
2010-01-03 23:58:59 +02:00
|
|
|
char saveDesc[31];
|
|
|
|
Common::String pattern = target;
|
|
|
|
pattern += ".???";
|
|
|
|
|
|
|
|
filenames = saveFileMan->listSavefiles(pattern);
|
|
|
|
sort(filenames.begin(), filenames.end()); // Sort (hopefully ensuring we are sorted numerically..)
|
|
|
|
|
|
|
|
SaveStateList saveList;
|
2011-05-30 04:14:46 +01:00
|
|
|
for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end(); ++file) {
|
2010-01-03 23:58:59 +02:00
|
|
|
// Obtain the last 3 digits of the filename, since they correspond to the save slot
|
|
|
|
int slotNum = atoi(file->c_str() + file->size() - 3);
|
|
|
|
|
|
|
|
if (slotNum >= 0 && slotNum <= 999) {
|
|
|
|
Common::InSaveFile *in = saveFileMan->openForLoading(*file);
|
|
|
|
if (in) {
|
|
|
|
uint32 type = in->readUint32BE();
|
|
|
|
if (type == WAGEflag)
|
|
|
|
in->read(saveDesc, 31);
|
|
|
|
saveList.push_back(SaveStateDescriptor(slotNum, saveDesc));
|
|
|
|
delete in;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return saveList;
|
|
|
|
}
|
|
|
|
|
|
|
|
int WageMetaEngine::getMaximumSaveSlot() const { return 999; }
|
|
|
|
|
|
|
|
void WageMetaEngine::removeSaveState(const char *target, int slot) const {
|
2016-02-14 14:50:31 +01:00
|
|
|
g_system->getSavefileManager()->removeSavefile(Common::String::format("%s.%03d", target, slot));
|
2010-01-03 23:58:59 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
#if PLUGIN_ENABLED_DYNAMIC(WAGE)
|
|
|
|
REGISTER_PLUGIN_DYNAMIC(WAGE, PLUGIN_TYPE_ENGINE, WageMetaEngine);
|
|
|
|
#else
|
|
|
|
REGISTER_PLUGIN_STATIC(WAGE, PLUGIN_TYPE_ENGINE, WageMetaEngine);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
namespace Wage {
|
|
|
|
|
|
|
|
bool WageEngine::canLoadGameStateCurrently() {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool WageEngine::canSaveGameStateCurrently() {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
} // End of namespace Wage
|