aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjohndoe1232015-11-28 23:29:53 +0100
committerEugene Sandulenko2018-07-20 06:43:33 +0000
commit2b9af91d8fbda6f47d16d3fb0e7e6bb6206b016e (patch)
treef5860bd4dd143d5a7facad23bab95b11fd9ca367
parentfa17f684da1da7fded805746b75c454502ffe683 (diff)
downloadscummvm-rg350-2b9af91d8fbda6f47d16d3fb0e7e6bb6206b016e.tar.gz
scummvm-rg350-2b9af91d8fbda6f47d16d3fb0e7e6bb6206b016e.tar.bz2
scummvm-rg350-2b9af91d8fbda6f47d16d3fb0e7e6bb6206b016e.zip
ILLUSIONS: DUCKMAN: Implement opcode 8
-rw-r--r--engines/illusions/duckman/scriptopcodes_duckman.cpp24
-rw-r--r--engines/illusions/duckman/scriptopcodes_duckman.h1
-rw-r--r--engines/illusions/illusions.cpp2
-rw-r--r--engines/illusions/illusions.h1
-rw-r--r--engines/illusions/thread.cpp6
5 files changed, 30 insertions, 4 deletions
diff --git a/engines/illusions/duckman/scriptopcodes_duckman.cpp b/engines/illusions/duckman/scriptopcodes_duckman.cpp
index 0fa7361574..618a6e4a13 100644
--- a/engines/illusions/duckman/scriptopcodes_duckman.cpp
+++ b/engines/illusions/duckman/scriptopcodes_duckman.cpp
@@ -67,13 +67,16 @@ void ScriptOpcodes_Duckman::initOpcodes() {
OPCODE(5, opJump);
OPCODE(6, opStartScriptThread);
OPCODE(7, opStartTimerThread);
+ OPCODE(8, opRerunThreads);
OPCODE(9, opNotifyThread);
OPCODE(10, opSuspendThread);
+ // 11-15 unused
OPCODE(16, opLoadResource);
OPCODE(17, opUnloadResource);
OPCODE(18, opEnterScene18);
OPCODE(19, opUnloadResourcesBySceneId);
OPCODE(20, opChangeScene);
+ // TODO OPCODE(21, );
OPCODE(22, opStartModalScene);
OPCODE(23, opExitModalScene);
OPCODE(24, opEnterScene24);
@@ -81,6 +84,7 @@ void ScriptOpcodes_Duckman::initOpcodes() {
OPCODE(26, opEnterDebugger);
OPCODE(27, opLeaveDebugger);
OPCODE(28, opDumpCurrentSceneFiles);
+ // 29-31 unused
OPCODE(32, opPanCenterObject);
OPCODE(33, opPanTrackObject);
OPCODE(34, opPanToObject);
@@ -90,6 +94,7 @@ void ScriptOpcodes_Duckman::initOpcodes() {
OPCODE(38, opStartFade);
OPCODE(39, opSetDisplay);
OPCODE(40, opSetCameraBounds);
+ // 41-47 unused
OPCODE(48, opSetProperty);
OPCODE(49, opPlaceActor);
OPCODE(50, opFaceActor);
@@ -104,25 +109,38 @@ void ScriptOpcodes_Duckman::initOpcodes() {
OPCODE(59, opActivateObject);
OPCODE(60, opDeactivateObject);
OPCODE(61, opSetDefaultSequence);
+ // 62-63 unused
OPCODE(64, opStopCursorHoldingObject);
OPCODE(65, opStartCursorHoldingObject);
OPCODE(66, opPlayVideo);
+ // 67-68 unused
OPCODE(69, opRunSpecialCode);
OPCODE(70, opPause);
OPCODE(71, opUnpause);
OPCODE(72, opStartSound);
+ // TODO OPCODE(73, );
+ // 74 unused
OPCODE(75, opStopSound);
OPCODE(76, opStartMidiMusic);
OPCODE(77, opStopMidiMusic);
OPCODE(78, opFadeMidiMusic);
+ // 79 unused
OPCODE(80, opAddMenuChoice);
OPCODE(81, opDisplayMenu);
OPCODE(82, opSwitchMenuChoice);
+ // TODO OPCODE(83, );
OPCODE(84, opResetGame);
+ // TODO OPCODE(85, );
+ // TODO OPCODE(86, );
OPCODE(87, opDeactivateButton);
OPCODE(88, opActivateButton);
+ // 89-95 unused
OPCODE(96, opIncBlockCounter);
OPCODE(97, opClearBlockCounter);
+ // 98-99 unused
+ // TODO OPCODE(100, );
+ // TODO OPCODE(101, );
+ // 102-103 unused
OPCODE(104, opJumpIf);
OPCODE(105, opIsPrevSceneId);
OPCODE(106, opNot);
@@ -130,6 +148,7 @@ void ScriptOpcodes_Duckman::initOpcodes() {
OPCODE(108, opOr);
OPCODE(109, opGetProperty);
OPCODE(110, opCompareBlockCounter);
+ // 111 unused
OPCODE(112, opAddDialogItem);
OPCODE(113, opStartDialog);
OPCODE(114, opJumpToDialogChoice);
@@ -137,6 +156,7 @@ void ScriptOpcodes_Duckman::initOpcodes() {
OPCODE(116, opSetBlockCounter116);
OPCODE(117, opSetBlockCounter117);
OPCODE(118, opSetBlockCounter118);
+ // 119-125 unused
OPCODE(126, opDebug126);
OPCODE(127, opDebug127);
#if 0
@@ -222,6 +242,10 @@ duration = 5;
_vm->startTimerThread(duration, opCall._threadId);
}
+void ScriptOpcodes_Duckman::opRerunThreads(ScriptThread *scriptThread, OpCall &opCall) {
+ _vm->_rerunThreads = true;
+}
+
void ScriptOpcodes_Duckman::opNotifyThread(ScriptThread *scriptThread, OpCall &opCall) {
ARG_SKIP(2);
ARG_UINT32(threadId);
diff --git a/engines/illusions/duckman/scriptopcodes_duckman.h b/engines/illusions/duckman/scriptopcodes_duckman.h
index d50f967a43..6b3b2ec6c4 100644
--- a/engines/illusions/duckman/scriptopcodes_duckman.h
+++ b/engines/illusions/duckman/scriptopcodes_duckman.h
@@ -53,6 +53,7 @@ protected:
void opLoadResource(ScriptThread *scriptThread, OpCall &opCall);
void opUnloadResource(ScriptThread *scriptThread, OpCall &opCall);
void opStartTimerThread(ScriptThread *scriptThread, OpCall &opCall);
+ void opRerunThreads(ScriptThread *scriptThread, OpCall &opCall);
void opEnterScene18(ScriptThread *scriptThread, OpCall &opCall);
void opUnloadResourcesBySceneId(ScriptThread *scriptThread, OpCall &opCall);
void opChangeScene(ScriptThread *scriptThread, OpCall &opCall);
diff --git a/engines/illusions/illusions.cpp b/engines/illusions/illusions.cpp
index 28c678c2b6..dbc07724d5 100644
--- a/engines/illusions/illusions.cpp
+++ b/engines/illusions/illusions.cpp
@@ -63,6 +63,8 @@ IllusionsEngine::IllusionsEngine(OSystem *syst, const IllusionsGameDescription *
Engine(syst), _gameDescription(gd) {
_random = new Common::RandomSource("illusions");
+
+ _rerunThreads = false;
Engine::syncSoundSettings();
diff --git a/engines/illusions/illusions.h b/engines/illusions/illusions.h
index b3e8141a8b..097a2c766b 100644
--- a/engines/illusions/illusions.h
+++ b/engines/illusions/illusions.h
@@ -122,6 +122,7 @@ public:
bool _doScriptThreadInit;
ScriptStack *_stack;
ScriptResource *_scriptResource;
+ bool _rerunThreads;
Fader *_fader;
diff --git a/engines/illusions/thread.cpp b/engines/illusions/thread.cpp
index cea0b9728e..b7ea41b53a 100644
--- a/engines/illusions/thread.cpp
+++ b/engines/illusions/thread.cpp
@@ -157,11 +157,9 @@ void ThreadList::updateThreads() {
++it;
}
}
- /* TODO
- if (script->threadUpdateContinueFlag)
- script->_threadUpdateContinueFlag = false;
+ if (_vm->_rerunThreads)
+ _vm->_rerunThreads = false;
else
- */
break;
}
}