aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra
diff options
context:
space:
mode:
authorJohannes Schickel2008-04-28 19:16:45 +0000
committerJohannes Schickel2008-04-28 19:16:45 +0000
commitd02503761c4fdcad702e11b50e404eaf7a26b122 (patch)
treec2abc5f1fa08bc0bb01a9ffa6ae8b3c92abc95ad /engines/kyra
parent018b82b51e682d8e5145d6945fd92b0f63bf19d2 (diff)
downloadscummvm-rg350-d02503761c4fdcad702e11b50e404eaf7a26b122.tar.gz
scummvm-rg350-d02503761c4fdcad702e11b50e404eaf7a26b122.tar.bz2
scummvm-rg350-d02503761c4fdcad702e11b50e404eaf7a26b122.zip
Implemented opcodes:
- 82: o3_getShapeFlag1 - 122: o3_setConversationState - 125: o3_getConversationState svn-id: r31761
Diffstat (limited to 'engines/kyra')
-rw-r--r--engines/kyra/kyra_v3.h3
-rw-r--r--engines/kyra/script_v3.cpp70
2 files changed, 70 insertions, 3 deletions
diff --git a/engines/kyra/kyra_v3.h b/engines/kyra/kyra_v3.h
index 47ec6e79e1..518c34415d 100644
--- a/engines/kyra/kyra_v3.h
+++ b/engines/kyra/kyra_v3.h
@@ -753,6 +753,7 @@ private:
int o3_enableInventory(ScriptState *script);
int o3_enterNewScene(ScriptState *script);
int o3_switchScene(ScriptState *script);
+ int o3_getShapeFlag1(ScriptState *script);
int o3_setMalcolmPos(ScriptState *script);
int o3_stopMusic(ScriptState *script);
int o3_playMusicTrack(ScriptState *script);
@@ -774,6 +775,8 @@ private:
int o3_setDlgIndex(ScriptState *script);
int o3_getDlgIndex(ScriptState *script);
int o3_defineScene(ScriptState *script);
+ int o3_setConversationState(ScriptState *script);
+ int o3_getConversationState(ScriptState *script);
int o3_changeChapter(ScriptState *script);
int o3_countItemInstances(ScriptState *script);
int o3_dialogStartScript(ScriptState *script);
diff --git a/engines/kyra/script_v3.cpp b/engines/kyra/script_v3.cpp
index 574c105481..93564c18e2 100644
--- a/engines/kyra/script_v3.cpp
+++ b/engines/kyra/script_v3.cpp
@@ -861,6 +861,11 @@ int KyraEngine_v3::o3_switchScene(ScriptState *script) {
return 0;
}
+int KyraEngine_v3::o3_getShapeFlag1(ScriptState *script) {
+ debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_getShapeFlag1(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
+ return _screen->getShapeFlag1(stackPos(0), stackPos(1));
+}
+
int KyraEngine_v3::o3_setMalcolmPos(ScriptState *script) {
debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_setMalcolmPos(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
_mainCharX = stackPos(0);
@@ -1148,6 +1153,65 @@ int KyraEngine_v3::o3_defineScene(ScriptState *script) {
return 0;
}
+int KyraEngine_v3::o3_setConversationState(ScriptState *script) {
+ debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_setConversationState(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2));
+ int id = stackPos(0);
+ const int dlgIndex = stackPos(1);
+ const int value = stackPos(2);
+
+ switch (_currentChapter-2) {
+ case 0:
+ id -= 34;
+ break;
+
+ case 1:
+ id -= 54;
+ break;
+
+ case 2:
+ id -= 55;
+ break;
+
+ case 3:
+ id -= 70;
+ break;
+
+ default:
+ break;
+ }
+
+ return (_conversationState[id][dlgIndex] = value);
+}
+
+int KyraEngine_v3::o3_getConversationState(ScriptState *script) {
+ debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_getConversationState(%p) (%d)", (const void *)script, stackPos(0));
+ int id = stackPos(0);
+ const int dlgIndex = _mainCharacter.dlgIndex;
+
+ switch (_currentChapter-2) {
+ case 0:
+ id -= 34;
+ break;
+
+ case 1:
+ id -= 54;
+ break;
+
+ case 2:
+ id -= 55;
+ break;
+
+ case 3:
+ id -= 70;
+ break;
+
+ default:
+ break;
+ }
+
+ return _conversationState[id][dlgIndex];
+}
+
int KyraEngine_v3::o3_changeChapter(ScriptState *script) {
debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_changeChapter(%p) (%d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3));
changeChapter(stackPos(0), stackPos(1), stackPos(2), stackPos(3));
@@ -1460,7 +1524,7 @@ void KyraEngine_v3::setupOpcodeTable() {
// 0x50
Opcode(o3_enterNewScene);
Opcode(o3_switchScene);
- OpcodeUnImpl();
+ Opcode(o3_getShapeFlag1);
Opcode(o3_dummy);
// 0x54
Opcode(o3_dummy);
@@ -1510,11 +1574,11 @@ void KyraEngine_v3::setupOpcodeTable() {
// 0x78
Opcode(o3_getDlgIndex);
Opcode(o3_defineScene);
- OpcodeUnImpl();
+ Opcode(o3_setConversationState);
OpcodeUnImpl();
// 0x7c
OpcodeUnImpl();
- OpcodeUnImpl();
+ Opcode(o3_getConversationState);
Opcode(o3_dummy);
Opcode(o3_dummy);
// 0x80