aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStrangerke2012-04-27 22:08:56 +0200
committerEugene Sandulenko2018-03-28 17:36:57 +0200
commitb2ac6e06316405881473c78d4a84a6baa8dbcee7 (patch)
treec1ffb8a67f66ca5a8d0e1ee2b1d7605187f2d95c
parent32ed5e62af5e8689babb0cb4dced12996e757655 (diff)
downloadscummvm-rg350-b2ac6e06316405881473c78d4a84a6baa8dbcee7.tar.gz
scummvm-rg350-b2ac6e06316405881473c78d4a84a6baa8dbcee7.tar.bz2
scummvm-rg350-b2ac6e06316405881473c78d4a84a6baa8dbcee7.zip
LILLIPUT: Replace MemoryReadStream by a custom read/write stream
-rw-r--r--engines/lilliput/lilliput.cpp6
-rw-r--r--engines/lilliput/lilliput.h1
-rw-r--r--engines/lilliput/module.mk3
-rw-r--r--engines/lilliput/script.cpp11
-rw-r--r--engines/lilliput/script.h13
-rw-r--r--engines/lilliput/stream.cpp43
-rw-r--r--engines/lilliput/stream.h42
7 files changed, 104 insertions, 15 deletions
diff --git a/engines/lilliput/lilliput.cpp b/engines/lilliput/lilliput.cpp
index 8d33df3f0a..87864407c8 100644
--- a/engines/lilliput/lilliput.cpp
+++ b/engines/lilliput/lilliput.cpp
@@ -1993,7 +1993,7 @@ void LilliputEngine::handleMenu() {
return;
sub170EE(_word10804);
- _scriptHandler->runMenuScript(Common::MemoryReadStream(_menuScript, _menuScript_size));
+ _scriptHandler->runMenuScript(ScriptStream(_menuScript, _menuScript_size));
_savedMousePosDivided = 0xFFFF;
_byte129A0 = 0xFF;
@@ -2036,7 +2036,7 @@ void LilliputEngine::handleGameScripts() {
assert(tmpVal < _gameScriptIndexSize);
debugC(1, kDebugEngine, "========================== Game Script %d ==========================", tmpVal);
- _scriptHandler->runScript(Common::MemoryReadStream(&_arrayGameScripts[_arrayGameScriptIndex[tmpVal]], _arrayGameScriptIndex[tmpVal + 1] - _arrayGameScriptIndex[tmpVal]));
+ _scriptHandler->runScript(ScriptStream(&_arrayGameScripts[_arrayGameScriptIndex[tmpVal]], _arrayGameScriptIndex[tmpVal + 1] - _arrayGameScriptIndex[tmpVal]));
}
Common::Error LilliputEngine::run() {
@@ -2067,7 +2067,7 @@ Common::Error LilliputEngine::run() {
//TODO: Init sound/music player
- _scriptHandler->runScript(Common::MemoryReadStream(_initScript, _initScript_size));
+ _scriptHandler->runScript(ScriptStream(_initScript, _initScript_size));
_int8installed = true;
diff --git a/engines/lilliput/lilliput.h b/engines/lilliput/lilliput.h
index 14bd9ada7b..ddcbfbe526 100644
--- a/engines/lilliput/lilliput.h
+++ b/engines/lilliput/lilliput.h
@@ -26,6 +26,7 @@
#include "lilliput/console.h"
#include "lilliput/script.h"
#include "lilliput/sound.h"
+#include "lilliput/stream.h"
#include "common/file.h"
#include "engines/engine.h"
diff --git a/engines/lilliput/module.mk b/engines/lilliput/module.mk
index 807f53639c..8a095e8045 100644
--- a/engines/lilliput/module.mk
+++ b/engines/lilliput/module.mk
@@ -5,7 +5,8 @@ MODULE_OBJS = \
detection.o \
lilliput.o \
script.o \
- sound.o
+ sound.o \
+ stream.o
MODULE_DIRS += \
engines/lilliput
diff --git a/engines/lilliput/script.cpp b/engines/lilliput/script.cpp
index 1ca521c52a..fe343b4d44 100644
--- a/engines/lilliput/script.cpp
+++ b/engines/lilliput/script.cpp
@@ -551,7 +551,7 @@ void LilliputScript::handleOpcodeType2(int curWord) {
}
}
-int LilliputScript::handleOpcode(Common::MemoryReadStream *script) {
+int LilliputScript::handleOpcode(ScriptStream *script) {
debugC(2, kDebugScript, "handleOpcode");
_currScript = script;
uint16 curWord = _currScript->readUint16LE();
@@ -584,7 +584,7 @@ int LilliputScript::handleOpcode(Common::MemoryReadStream *script) {
}
}
-void LilliputScript::runScript(Common::MemoryReadStream script) {
+void LilliputScript::runScript(ScriptStream script) {
debugC(1, kDebugScript, "runScript");
_byte16F05_ScriptHandler = 1;
@@ -592,7 +592,7 @@ void LilliputScript::runScript(Common::MemoryReadStream script) {
_vm->update();
}
-void LilliputScript::runMenuScript(Common::MemoryReadStream script) {
+void LilliputScript::runMenuScript(ScriptStream script) {
debugC(1, kDebugScript, "runMenuScript");
warning("========================== Menu Script ==============================");
_byte16F05_ScriptHandler = 0;
@@ -1217,7 +1217,6 @@ byte LilliputScript::OC_sub1779E() {
_currScript->seek(_currScript->pos() + 6);
return 0;
}
-
int var2 = _currScript->readUint16LE();
byte *buf = getMapPtr(tmpVal);
byte var1 = buf[var2];
@@ -1635,9 +1634,9 @@ void LilliputScript::OC_sub17BB7() {
if (_byte16F05_ScriptHandler == 0) {
_vm->_byte1714E = 0;
- runMenuScript(Common::MemoryReadStream(&_vm->_arrayGameScripts[scriptIndex], _vm->_arrayGameScriptIndex[index + 1] - _vm->_arrayGameScriptIndex[index]));
+ runMenuScript(ScriptStream(&_vm->_arrayGameScripts[scriptIndex], _vm->_arrayGameScriptIndex[index + 1] - _vm->_arrayGameScriptIndex[index]));
} else {
- runScript(Common::MemoryReadStream(&_vm->_arrayGameScripts[scriptIndex], _vm->_arrayGameScriptIndex[index + 1] - _vm->_arrayGameScriptIndex[index]));
+ runScript(ScriptStream(&_vm->_arrayGameScripts[scriptIndex], _vm->_arrayGameScriptIndex[index + 1] - _vm->_arrayGameScriptIndex[index]));
}
_currScript = _scriptStack.pop();
diff --git a/engines/lilliput/script.h b/engines/lilliput/script.h
index ce92e81bdf..0b218d628d 100644
--- a/engines/lilliput/script.h
+++ b/engines/lilliput/script.h
@@ -27,9 +27,12 @@
#include "common/stack.h"
#include "common/random.h"
+#include "lilliput/stream.h"
+
namespace Lilliput {
class LilliputEngine;
+
class LilliputScript {
public:
byte displayMap;
@@ -66,13 +69,13 @@ public:
LilliputScript(LilliputEngine *vm);
~LilliputScript();
- void runScript(Common::MemoryReadStream script);
- void runMenuScript(Common::MemoryReadStream script);
+ void runScript(ScriptStream script);
+ void runMenuScript(ScriptStream script);
private:
LilliputEngine *_vm;
- Common::MemoryReadStream *_currScript;
- Common::Stack<Common::MemoryReadStream *> _scriptStack;
+ ScriptStream *_currScript;
+ Common::Stack<ScriptStream *> _scriptStack;
byte _byte16F05_ScriptHandler;
byte _byte12A09;
@@ -88,7 +91,7 @@ private:
int _word1855E;
int _word18776;
- int handleOpcode(Common::MemoryReadStream *script);
+ int handleOpcode(ScriptStream *script);
byte handleOpcodeType1(int curWord);
void handleOpcodeType2(int curWord);
diff --git a/engines/lilliput/stream.cpp b/engines/lilliput/stream.cpp
new file mode 100644
index 0000000000..30c7f145c6
--- /dev/null
+++ b/engines/lilliput/stream.cpp
@@ -0,0 +1,43 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "lilliput/stream.h"
+
+namespace Lilliput {
+
+ScriptStream::ScriptStream(byte *buf, int size) : Common::MemoryReadStream(buf, size) {
+ _orgPtr = buf;
+}
+
+ScriptStream::~ScriptStream() {
+}
+
+void ScriptStream::writeUint16LE(int value, int relativePos) {
+ Common::MemoryWriteStream tmpStream = Common::MemoryWriteStream(_orgPtr, size());
+ int writePos = pos() + relativePos < size();
+
+ assert((writePos >= 0) && (writePos < size()));
+
+ tmpStream.writeSint16LE(value);
+}
+
+} // End of namespace Lilliput
diff --git a/engines/lilliput/stream.h b/engines/lilliput/stream.h
new file mode 100644
index 0000000000..d6b8c36510
--- /dev/null
+++ b/engines/lilliput/stream.h
@@ -0,0 +1,42 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef LILLIPUT_STREAM_H
+#define LILLIPUT_STREAM_H
+
+#include "common/memstream.h"
+
+namespace Lilliput {
+
+class ScriptStream : public Common::MemoryReadStream {
+private:
+ byte *_orgPtr;
+public:
+ ScriptStream(byte *buf, int size);
+ virtual ~ScriptStream();
+
+ void writeUint16LE(int value, int relativePos = 0);
+};
+
+} // End of namespace Lilliput
+
+#endif