XEEN: Don't allow saving in the war zone

This commit is contained in:
Paul Gilbert 2018-04-03 22:00:18 -04:00
parent e5c4adb3c0
commit 4fefa88282
6 changed files with 23 additions and 12 deletions

View File

@ -1922,6 +1922,8 @@ const char *const MUSIC_FILES2[6][7] = {
};
const char *const DIFFICULTY_TEXT = "\v000\t000\x3""cSelect Game Preference";
const char *const SAVE_OFF_LIMITS = "\x3""c\v002\t000The Gods of Game Restoration deem this area off limits!\n"
"Sorry, no saving in this maze.";
void writeConstants(CCArchive &cc) {
Common::MemFile file;
@ -2261,6 +2263,7 @@ void writeConstants(CCArchive &cc) {
file.syncStrings(MUSIC_FILES1, 5);
file.syncStrings2D((const char *const *)MUSIC_FILES2, 6, 7);
file.syncString(DIFFICULTY_TEXT);
file.syncString(SAVE_OFF_LIMITS);
cc.add("CONSTANTS", file);
}

View File

@ -172,8 +172,7 @@ int ControlPanel::execute() {
if (g_vm->canLoadGameStateCurrently())
saves.loadGame();
} else if (result == 4) {
if (g_vm->canSaveGameStateCurrently())
saves.saveGame();
saves.saveGame();
}
return result;

View File

@ -398,6 +398,7 @@ void Resources::loadData() {
file.syncStrings(MUSIC_FILES1, 5);
file.syncStrings2D(&MUSIC_FILES2[0][0], 6, 7);
file.syncString(DIFFICULTY_TEXT);
file.syncString(SAVE_OFF_LIMITS);
}
} // End of namespace Xeen

View File

@ -453,6 +453,7 @@ public:
const char *MUSIC_FILES1[5];
const char *MUSIC_FILES2[6][7];
const char *DIFFICULTY_TEXT;
const char *SAVE_OFF_LIMITS;
public:
/**
* Constructor

View File

@ -258,18 +258,25 @@ bool SavesManager::loadGame() {
}
bool SavesManager::saveGame() {
if (!g_vm->canSaveGameStateCurrently())
Map &map = *g_vm->_map;
Windows &windows = *g_vm->_windows;
if (map.mazeData()._mazeFlags & RESTRICTION_SAVE) {
ErrorScroll::show(g_vm, Res.SAVE_OFF_LIMITS, WT_NONFREEZED_WAIT);
return false;
} else if (!g_vm->canSaveGameStateCurrently()) {
return false;
} else {
GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"), true);
int slotNum = dialog->runModalWithCurrentTarget();
Common::String saveName = dialog->getResultString();
delete dialog;
GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"), true);
int slotNum = dialog->runModalWithCurrentTarget();
Common::String saveName = dialog->getResultString();
delete dialog;
if (slotNum != -1)
saveGameState(slotNum, saveName);
if (slotNum != -1)
saveGameState(slotNum, saveName);
return slotNum != -1;
return slotNum != -1;
}
}
} // End of namespace Xeen

View File

@ -193,7 +193,7 @@ bool XeenEngine::canLoadGameStateCurrently() {
}
bool XeenEngine::canSaveGameStateCurrently() {
return _mode != MODE_COMBAT && _mode != MODE_STARTUP;
return _mode != MODE_COMBAT && _mode != MODE_STARTUP && (_map->mazeData()._mazeFlags & RESTRICTION_SAVE) == 0;
}
void XeenEngine::playGame() {