aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra
diff options
context:
space:
mode:
authorJohannes Schickel2008-04-26 19:00:22 +0000
committerJohannes Schickel2008-04-26 19:00:22 +0000
commit2ae81f0096086f726373582a4c0292a99c939ddb (patch)
treedede1043b322b6977b541a5914274d8b6bda7c36 /engines/kyra
parent3bde19a137134379513ddc0e209c818dff6b1914 (diff)
downloadscummvm-rg350-2ae81f0096086f726373582a4c0292a99c939ddb.tar.gz
scummvm-rg350-2ae81f0096086f726373582a4c0292a99c939ddb.tar.bz2
scummvm-rg350-2ae81f0096086f726373582a4c0292a99c939ddb.zip
Implemented opcodes:
- 76: o3_removeItemInstances - 94: o3_showSceneStringsMessage svn-id: r31733
Diffstat (limited to 'engines/kyra')
-rw-r--r--engines/kyra/kyra_v3.h2
-rw-r--r--engines/kyra/script_v3.cpp38
2 files changed, 38 insertions, 2 deletions
diff --git a/engines/kyra/kyra_v3.h b/engines/kyra/kyra_v3.h
index fd20585d85..70b6ba87d9 100644
--- a/engines/kyra/kyra_v3.h
+++ b/engines/kyra/kyra_v3.h
@@ -716,6 +716,7 @@ private:
int o3_updateConversations(ScriptState *script);
int o3_setSceneDim(ScriptState *script);
int o3_update(ScriptState *script);
+ int o3_removeItemInstances(ScriptState *script);
int o3_enterNewScene(ScriptState *script);
int o3_setMalcolmPos(ScriptState *script);
int o3_stopMusic(ScriptState *script);
@@ -723,6 +724,7 @@ private:
int o3_playSoundEffect(ScriptState *script);
int o3_getScore(ScriptState *script);
int o3_blockOutRegion(ScriptState *script);
+ int o3_showSceneStringsMessage(ScriptState *script);
int o3_getRand(ScriptState *script);
int o3_waitForConfirmationClick(ScriptState *script);
int o3_defineRoomEntrance(ScriptState *script);
diff --git a/engines/kyra/script_v3.cpp b/engines/kyra/script_v3.cpp
index 74a8187278..c4bba4c81d 100644
--- a/engines/kyra/script_v3.cpp
+++ b/engines/kyra/script_v3.cpp
@@ -689,6 +689,34 @@ int KyraEngine_v3::o3_update(ScriptState *script) {
return 0;
}
+int KyraEngine_v3::o3_removeItemInstances(ScriptState *script) {
+ debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_removeItemInstances(%p) (%d)", (const void *)script, stackPos(0));
+ const int16 item = stackPos(0);
+
+ int deleted = 0;
+
+ for (int i = 0; i < 10; ++i) {
+ if (_mainCharacter.inventory[i] == item) {
+ _mainCharacter.inventory[i] = 0xFFFF;
+ ++deleted;
+ }
+ }
+
+ if (_itemInHand == item) {
+ removeHandItem();
+ ++deleted;
+ }
+
+ for (int i = 0; i < 50; ++i) {
+ if (_itemList[i].id == item) {
+ _itemList[i].id = 0xFFFF;
+ ++deleted;
+ }
+ }
+
+ return deleted;
+}
+
int KyraEngine_v3::o3_enterNewScene(ScriptState *script) {
debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_enterNewScene(%p) (%d, %d, %d, %d, %d)", (const void *)script, stackPos(0),
stackPos(1), stackPos(2), stackPos(3), stackPos(4));
@@ -759,6 +787,12 @@ int KyraEngine_v3::o3_blockOutRegion(ScriptState *script) {
return 0;
}
+int KyraEngine_v3::o3_showSceneStringsMessage(ScriptState *script) {
+ debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_showSceneStringsMessage(%p) (%d)", (const void *)script, stackPos(0));
+ showMessage((const char*)getTableEntry(_sceneStrings, stackPos(0)), 0xFF, 0xF0);
+ return 0;
+}
+
int KyraEngine_v3::o3_getRand(ScriptState *script) {
debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_getRand(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
assert(stackPos(0) < stackPos(1));
@@ -1281,7 +1315,7 @@ void KyraEngine_v3::setupOpcodeTable() {
OpcodeUnImpl();
Opcode(o3_update);
// 0x4c
- OpcodeUnImpl();
+ Opcode(o3_removeItemInstances);
OpcodeUnImpl();
OpcodeUnImpl();
OpcodeUnImpl();
@@ -1303,7 +1337,7 @@ void KyraEngine_v3::setupOpcodeTable() {
// 0x5c
Opcode(o3_blockOutRegion);
Opcode(o3_dummy);
- OpcodeUnImpl();
+ Opcode(o3_showSceneStringsMessage);
OpcodeUnImpl();
// 0x60
Opcode(o3_getRand);