aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWalter van Niftrik2016-02-28 21:44:23 +0100
committerWalter van Niftrik2016-03-09 10:03:13 +0100
commit727469d4a7ad9ba516538009efdac3834a6daccd (patch)
tree6ce995e693abf3d8569089125cc1b3324cbaaeca
parent301b2fdc219ecc92cc81cc94d8e2904fc21cec6e (diff)
downloadscummvm-rg350-727469d4a7ad9ba516538009efdac3834a6daccd.tar.gz
scummvm-rg350-727469d4a7ad9ba516538009efdac3834a6daccd.tar.bz2
scummvm-rg350-727469d4a7ad9ba516538009efdac3834a6daccd.zip
ADL: Add restarting
-rw-r--r--engines/adl/adl.cpp11
-rw-r--r--engines/adl/adl.h3
-rw-r--r--engines/adl/hires1.cpp23
-rw-r--r--engines/adl/hires1.h1
4 files changed, 34 insertions, 4 deletions
diff --git a/engines/adl/adl.cpp b/engines/adl/adl.cpp
index e395c8266f..24a18d62ac 100644
--- a/engines/adl/adl.cpp
+++ b/engines/adl/adl.cpp
@@ -43,7 +43,8 @@ AdlEngine::AdlEngine(OSystem *syst, const AdlGameDescription *gd) :
Engine(syst),
_gameDescription(gd),
_display(nullptr),
- _parser(nullptr) {
+ _parser(nullptr),
+ _isRestarting(false) {
}
AdlEngine::~AdlEngine() {
@@ -271,7 +272,8 @@ void AdlEngine::doActions(const Command &command, byte noun, byte offset) {
_display->printString(_strings[IDI_STR_PLAY_AGAIN]);
Common::String input = _display->inputString();
if (input.size() == 0 || input[0] != APPLECHAR('N')) {
- warning("Restart game not implemented");
+ _isRestarting = true;
+ restartGame();
return;
}
// Fall-through
@@ -392,8 +394,11 @@ bool AdlEngine::doOneCommand(const Commands &commands, byte verb, byte noun) {
void AdlEngine::doAllCommands(const Commands &commands, byte verb, byte noun) {
Commands::const_iterator cmd;
- for (cmd = commands.begin(); cmd != commands.end(); ++cmd)
+ for (cmd = commands.begin(); cmd != commands.end(); ++cmd) {
checkCommand(*cmd, verb, noun);
+ if (_isRestarting)
+ return;
+ }
}
void AdlEngine::clearScreen() {
diff --git a/engines/adl/adl.h b/engines/adl/adl.h
index d39e0e3638..8b0aa45937 100644
--- a/engines/adl/adl.h
+++ b/engines/adl/adl.h
@@ -175,6 +175,8 @@ public:
protected:
virtual void runGame() = 0;
+ virtual void initState() = 0;
+ virtual void restartGame() = 0;
virtual uint getEngineMessage(EngineMessage msg) = 0;
Common::String readString(Common::ReadStream &stream, byte until = 0);
void printStrings(Common::SeekableReadStream &stream, int count = 1);
@@ -194,6 +196,7 @@ protected:
Display *_display;
Parser *_parser;
+ bool _isRestarting;
Common::Array<Common::String> _strings;
Common::Array<Common::String> _messages;
diff --git a/engines/adl/hires1.cpp b/engines/adl/hires1.cpp
index 1316bf2d70..4cf7b4599d 100644
--- a/engines/adl/hires1.cpp
+++ b/engines/adl/hires1.cpp
@@ -56,6 +56,7 @@ enum {
IDI_HR1_STR_DONT_HAVE_IT,
IDI_HR1_STR_DONT_UNDERSTAND,
IDI_HR1_STR_GETTING_DARK,
+ IDI_HR1_STR_PRESS_RETURN,
IDI_HR1_STR_TOTAL
};
@@ -69,7 +70,8 @@ static const StringOffset stringOffsets[] = {
{ IDI_HR1_STR_CANT_GO_THERE, 0x6c0a },
{ IDI_HR1_STR_DONT_HAVE_IT, 0x6c31 },
{ IDI_HR1_STR_DONT_UNDERSTAND, 0x6c51 },
- { IDI_HR1_STR_GETTING_DARK, 0x6c7c }
+ { IDI_HR1_STR_GETTING_DARK, 0x6c7c },
+ { IDI_HR1_STR_PRESS_RETURN, 0x5f68 }
};
#define IDI_HR1_OFS_PD_TEXT_0 0x5d
@@ -268,6 +270,13 @@ void HiRes1Engine::initState() {
}
}
+void HiRes1Engine::restartGame() {
+ initState();
+ _display->printString(_strings[IDI_HR1_STR_PRESS_RETURN]);
+ _display->inputString(); // Missing in the original
+ _display->printASCIIString("\r\r\r\r\r");
+}
+
void HiRes1Engine::runGame() {
runIntro();
_display->printASCIIString("\r");
@@ -348,7 +357,12 @@ void HiRes1Engine::runGame() {
f.seek(0xf00);
_parser->loadNouns(f);
+ _display->printASCIIString("\r\r\r\r\r");
+
while (1) {
+ if (_isRestarting)
+ _isRestarting = false;
+
uint verb = 0, noun = 0;
clearScreen();
showRoom();
@@ -356,8 +370,15 @@ void HiRes1Engine::runGame() {
if (!doOneCommand(_roomCommands, verb, noun))
printMessage(37);
+
+ if (_isRestarting)
+ continue;
+
doAllCommands(_globalCommands, verb, noun);
+ if (_isRestarting)
+ continue;
+
_state.moves++;
if (shouldQuit())
diff --git a/engines/adl/hires1.h b/engines/adl/hires1.h
index 5cc9f3ac98..a378dc9423 100644
--- a/engines/adl/hires1.h
+++ b/engines/adl/hires1.h
@@ -49,6 +49,7 @@ private:
MH_ITEM_OFFSETS = 21
};
+ void restartGame();
void printMessage(uint idx, bool wait = true);
uint getEngineMessage(EngineMessage msg);