mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-13 21:31:53 +00:00
HOPKINS: Work on hooking save/loading into the ScummVM framework
This commit is contained in:
parent
40748dabc7
commit
b005f9dad0
@ -33,6 +33,8 @@
|
||||
|
||||
#include "hopkins/hopkins.h"
|
||||
|
||||
#define MAX_SAVES 99
|
||||
|
||||
namespace Hopkins {
|
||||
|
||||
struct HopkinsGameDescription {
|
||||
@ -113,29 +115,65 @@ SaveStateList HopkinsMetaEngine::listSaves(const char *target) const {
|
||||
Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
|
||||
Common::StringArray filenames;
|
||||
Common::String saveDesc;
|
||||
Common::String pattern = "hopkins.0??";
|
||||
Common::String pattern = Common::String::format("%s.0??", target);
|
||||
|
||||
filenames = saveFileMan->listSavefiles(pattern);
|
||||
sort(filenames.begin(), filenames.end()); // Sort (hopefully ensuring we are sorted numerically..)
|
||||
sort(filenames.begin(), filenames.end()); // Sort to get the files in numerical order
|
||||
|
||||
Hopkins::hopkinsSavegameHeader header;
|
||||
|
||||
SaveStateList saveList;
|
||||
// TODO
|
||||
for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end(); ++file) {
|
||||
const char *ext = strrchr(file->c_str(), '.');
|
||||
int slot = ext ? atoi(ext + 1) : -1;
|
||||
|
||||
if (slot >= 0 && slot < MAX_SAVES) {
|
||||
Common::InSaveFile *in = g_system->getSavefileManager()->openForLoading(*file);
|
||||
|
||||
if (in) {
|
||||
if (Hopkins::SaveLoadManager::readSavegameHeader(in, header)) {
|
||||
saveList.push_back(SaveStateDescriptor(slot, header.saveName));
|
||||
|
||||
header.thumbnail->free();
|
||||
delete header.thumbnail;
|
||||
}
|
||||
|
||||
delete in;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return saveList;
|
||||
}
|
||||
|
||||
int HopkinsMetaEngine::getMaximumSaveSlot() const {
|
||||
return 99;
|
||||
return MAX_SAVES;
|
||||
}
|
||||
|
||||
void HopkinsMetaEngine::removeSaveState(const char *target, int slot) const {
|
||||
Common::String filename = "todo";
|
||||
|
||||
Common::String filename = Common::String::format("%s.%03d", target, slot);
|
||||
g_system->getSavefileManager()->removeSavefile(filename);
|
||||
}
|
||||
|
||||
SaveStateDescriptor HopkinsMetaEngine::querySaveMetaInfos(const char *target, int slot) const {
|
||||
// TODO
|
||||
Common::String filename = Common::String::format("%s.%03d", target, slot);
|
||||
Common::InSaveFile *f = g_system->getSavefileManager()->openForLoading(filename);
|
||||
|
||||
if (f) {
|
||||
Hopkins::hopkinsSavegameHeader header;
|
||||
Hopkins::SaveLoadManager::readSavegameHeader(f, header);
|
||||
delete f;
|
||||
|
||||
// Create the return descriptor
|
||||
SaveStateDescriptor desc(slot, header.saveName);
|
||||
desc.setThumbnail(header.thumbnail);
|
||||
desc.setSaveDate(header.saveYear, header.saveMonth, header.saveDay);
|
||||
desc.setSaveTime(header.saveHour, header.saveMinutes);
|
||||
desc.setPlayTime(header.totalFrames * GAME_FRAME_TIME);
|
||||
|
||||
return desc;
|
||||
}
|
||||
|
||||
return SaveStateDescriptor();
|
||||
}
|
||||
|
||||
|
@ -205,11 +205,11 @@ void EventsManager::checkForNextFrameCounter() {
|
||||
while ((milli - _priorCounterTime) >= 10) {
|
||||
_priorCounterTime += 10;
|
||||
lItCounter += 3;
|
||||
++_gameCounter;
|
||||
}
|
||||
|
||||
// Check for next game frame
|
||||
if ((milli - _priorFrameTime) >= GAME_FRAME_TIME) {
|
||||
++_gameCounter;
|
||||
_priorFrameTime = milli;
|
||||
g_system->updateScreen();
|
||||
|
||||
|
@ -59,6 +59,38 @@ HopkinsEngine::HopkinsEngine(OSystem *syst, const HopkinsGameDescription *gameDe
|
||||
HopkinsEngine::~HopkinsEngine() {
|
||||
}
|
||||
|
||||
Common::String HopkinsEngine::generateSaveName(int slot) {
|
||||
return Common::String::format("%s.%03d", _targetName.c_str(), slot);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if it is currently okay to restore a game
|
||||
*/
|
||||
bool HopkinsEngine::canLoadGameStateCurrently() {
|
||||
return !_globals.SORTIE && !_globals.PLAN_FLAG;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if it is currently okay to save the game
|
||||
*/
|
||||
bool HopkinsEngine::canSaveGameStateCurrently() {
|
||||
return !_globals.SORTIE && !_globals.PLAN_FLAG;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load the savegame at the specified slot index
|
||||
*/
|
||||
Common::Error HopkinsEngine::loadGameState(int slot) {
|
||||
return _saveLoadManager.restore(slot);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the game to the given slot index, and with the given name
|
||||
*/
|
||||
Common::Error HopkinsEngine::saveGameState(int slot, const Common::String &desc) {
|
||||
return _saveLoadManager.save(slot, desc);
|
||||
}
|
||||
|
||||
Common::Error HopkinsEngine::run() {
|
||||
_saveLoadManager.initSaves();
|
||||
|
||||
@ -959,8 +991,4 @@ void HopkinsEngine::PUBQUIT() {
|
||||
_graphicsManager.FADE_OUTW();
|
||||
}
|
||||
|
||||
Common::String HopkinsEngine::generateSaveName(int slot) {
|
||||
return Common::String::format("%s.%03d", _targetName.c_str(), slot);
|
||||
}
|
||||
|
||||
} // End of namespace Hopkins
|
||||
|
@ -126,6 +126,10 @@ public:
|
||||
|
||||
int getRandomNumber(int maxNumber);
|
||||
Common::String generateSaveName(int slotNumber);
|
||||
virtual bool canLoadGameStateCurrently();
|
||||
virtual bool canSaveGameStateCurrently();
|
||||
virtual Common::Error loadGameState(int slot);
|
||||
virtual Common::Error saveGameState(int slot, const Common::String &desc);
|
||||
|
||||
/**
|
||||
* Run the introduction sequence
|
||||
|
Loading…
Reference in New Issue
Block a user