aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/made/pmvplayer.cpp4
-rw-r--r--engines/made/script.cpp14
2 files changed, 12 insertions, 6 deletions
diff --git a/engines/made/pmvplayer.cpp b/engines/made/pmvplayer.cpp
index 06dc4e5aed..b3f9915b92 100644
--- a/engines/made/pmvplayer.cpp
+++ b/engines/made/pmvplayer.cpp
@@ -188,8 +188,8 @@ void PmvPlayer::handleEvents() {
_abort = true;
break;
case Common::EVENT_QUIT:
- // TODO: Exit more gracefully
- g_system->quit();
+ _vm->_quit = true;
+ _abort = true;
break;
default:
break;
diff --git a/engines/made/script.cpp b/engines/made/script.cpp
index ba0b61d29b..6e896d94be 100644
--- a/engines/made/script.cpp
+++ b/engines/made/script.cpp
@@ -192,7 +192,7 @@ ScriptInterpreter::~ScriptInterpreter() {
void ScriptInterpreter::runScript(int16 scriptObjectIndex) {
- _terminated = false;
+ _vm->_quit = false;
_runningScriptObjectIndex = scriptObjectIndex;
_localStackPos = _stack.getStackPos();
@@ -200,7 +200,7 @@ void ScriptInterpreter::runScript(int16 scriptObjectIndex) {
_codeBase = _vm->_dat->getObject(_runningScriptObjectIndex)->getData();
_codeIp = _codeBase;
- while (!_terminated) {
+ while (!_vm->_quit) {
byte opcode = readByte();
if (opcode >= 1 && opcode <= _commandsMax) {
debug(4, "[%04X:%04X] opcode = %s", _runningScriptObjectIndex, (uint) (_codeIp - _codeBase), _commands[opcode - 1].desc);
@@ -418,11 +418,17 @@ void ScriptInterpreter::cmd_vsize() {
}
void ScriptInterpreter::cmd_exit() {
- warning("Unimplemented command: cmd_exit");
+ _vm->_quit = true;
}
void ScriptInterpreter::cmd_return() {
- // TODO: Check if returning from main function
+
+ // Check if returning from main function
+ if (_localStackPos == kScriptStackSize) {
+ _vm->_quit = true;
+ return;
+ }
+
int16 funcResult = _stack.top();
_stack.setStackPos(_localStackPos);
_localStackPos = kScriptStackLimit - _stack.pop();