aboutsummaryrefslogtreecommitdiff
path: root/engines/made/script.cpp
diff options
context:
space:
mode:
authorBenjamin Haisch2008-10-04 21:40:14 +0000
committerBenjamin Haisch2008-10-04 21:40:14 +0000
commit99f8add65cb61d1e8da23f734da249687d24919e (patch)
tree53c0038c50476884891b861e1100bb17c6b206fc /engines/made/script.cpp
parentb41cd58cee80ae682d6806fc448ca6772fd8ef61 (diff)
downloadscummvm-rg350-99f8add65cb61d1e8da23f734da249687d24919e.tar.gz
scummvm-rg350-99f8add65cb61d1e8da23f734da249687d24919e.tar.bz2
scummvm-rg350-99f8add65cb61d1e8da23f734da249687d24919e.zip
- Declared all stack functions as inline
- Sleep some ms after 500 opcodes to reduce CPU load - Fixed odd bug in LGoP2 where text disappeared quickly without waiting for user input by returning 0x38 in sfShowPage svn-id: r34746
Diffstat (limited to 'engines/made/script.cpp')
-rw-r--r--engines/made/script.cpp36
1 files changed, 24 insertions, 12 deletions
diff --git a/engines/made/script.cpp b/engines/made/script.cpp
index 6f4ff7ace3..62c0cf338b 100644
--- a/engines/made/script.cpp
+++ b/engines/made/script.cpp
@@ -30,6 +30,7 @@
#include "made/script.h"
#include "made/database.h"
#include "made/scriptfuncs.h"
+#include "made/screen.h"
namespace Made {
@@ -44,47 +45,47 @@ ScriptStack::ScriptStack() {
ScriptStack::~ScriptStack() {
}
-int16 ScriptStack::top() {
+inline int16 ScriptStack::top() {
return _stack[_stackPos];
}
-int16 ScriptStack::pop() {
+inline int16 ScriptStack::pop() {
if (_stackPos == kScriptStackSize)
error("ScriptStack::pop() Stack underflow");
return _stack[_stackPos++];
}
-void ScriptStack::push(int16 value) {
+inline void ScriptStack::push(int16 value) {
if (_stackPos == 0)
error("ScriptStack::push() Stack overflow");
_stack[--_stackPos] = value;
}
-void ScriptStack::setTop(int16 value) {
+inline void ScriptStack::setTop(int16 value) {
_stack[_stackPos] = value;
}
-int16 ScriptStack::peek(int16 index) {
+inline int16 ScriptStack::peek(int16 index) {
return _stack[index];
}
-void ScriptStack::poke(int16 index, int16 value) {
+inline void ScriptStack::poke(int16 index, int16 value) {
_stack[index] = value;
}
-void ScriptStack::alloc(int16 count) {
+inline void ScriptStack::alloc(int16 count) {
_stackPos -= count;
}
-void ScriptStack::free(int16 count) {
+inline void ScriptStack::free(int16 count) {
_stackPos += count;
}
-void ScriptStack::setStackPos(int16 stackPtr) {
+inline void ScriptStack::setStackPos(int16 stackPtr) {
_stackPos = stackPtr;
}
-int16 *ScriptStack::getStackPtr() {
+inline int16 *ScriptStack::getStackPtr() {
return &_stack[_stackPos];
}
@@ -187,6 +188,9 @@ ScriptInterpreter::~ScriptInterpreter() {
}
void ScriptInterpreter::runScript(int16 scriptObjectIndex) {
+
+ uint32 opcodeSleepCounter = 0;
+
_vm->_quit = false;
_runningScriptObjectIndex = scriptObjectIndex;
@@ -194,19 +198,27 @@ void ScriptInterpreter::runScript(int16 scriptObjectIndex) {
_codeBase = _vm->_dat->getObject(_runningScriptObjectIndex)->getData();
_codeIp = _codeBase;
-
+
while (!_vm->_quit) {
_vm->handleEvents();
byte opcode = readByte();
+
if (opcode >= 1 && opcode <= _commandsMax) {
debug(4, "[%04X:%04X] %s", _runningScriptObjectIndex, (uint) (_codeIp - _codeBase), _commands[opcode - 1].desc);
(this->*_commands[opcode - 1].proc)();
} else {
warning("ScriptInterpreter::runScript(%d) Unknown opcode %02X", _runningScriptObjectIndex, opcode);
}
-
+
+ /* We sleep a little after 500 opcodes to reduce the CPU load.
+ */
+ if (++opcodeSleepCounter > 500) {
+ _vm->_screen->updateScreenAndWait(5);
+ opcodeSleepCounter = 0;
+ }
+
}
}