aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schickel2008-03-28 00:13:43 +0000
committerJohannes Schickel2008-03-28 00:13:43 +0000
commit98f9a47619681943d9dc797f6982abca3a1f4c44 (patch)
treeb148ec5f5399d1d431909673b88ac13946ea46cb
parent221e6bb84f67e8fd808d922a0ff347956b78e166 (diff)
downloadscummvm-rg350-98f9a47619681943d9dc797f6982abca3a1f4c44.tar.gz
scummvm-rg350-98f9a47619681943d9dc797f6982abca3a1f4c44.tar.bz2
scummvm-rg350-98f9a47619681943d9dc797f6982abca3a1f4c44.zip
Implemented opcodes:
- 38: o2_countItemsInScene - 57: o2_setTimerDelay - 84: o2_getSceneExitToFacing - 137: o2_removeItemFromScene svn-id: r31279
-rw-r--r--engines/kyra/kyra_v2.h4
-rw-r--r--engines/kyra/script_v2.cpp51
2 files changed, 51 insertions, 4 deletions
diff --git a/engines/kyra/kyra_v2.h b/engines/kyra/kyra_v2.h
index 5d57c4ca66..226d0ed330 100644
--- a/engines/kyra/kyra_v2.h
+++ b/engines/kyra/kyra_v2.h
@@ -984,6 +984,7 @@ protected:
int o2_defineItem(ScriptState *script);
int o2_removeItemFromInventory(ScriptState *script);
int o2_countItemInInventory(ScriptState *script);
+ int o2_countItemsInScene(ScriptState *script);
int o2_queryGameFlag(ScriptState *script);
int o2_resetGameFlag(ScriptState *script);
int o2_setGameFlag(ScriptState *script);
@@ -1000,6 +1001,7 @@ protected:
//int o2_playSoundEffect(ScriptState *script);
int o2_delaySecs(ScriptState *script);
int o2_delay(ScriptState *script);
+ int o2_setTimerDelay(ScriptState *script);
int o2_setScaleTableItem(ScriptState *script);
int o2_setDrawLayerTableItem(ScriptState *script);
int o2_setCharPalEntry(ScriptState *script);
@@ -1022,6 +1024,7 @@ protected:
int o2_switchScene(ScriptState *script);
int o2_getShapeFlag1(ScriptState *script);
int o2_setPathfinderFlag(ScriptState *script);
+ int o2_getSceneExitToFacing(ScriptState *script);
int o2_setLayerFlag(ScriptState *script);
int o2_setZanthiaPos(ScriptState *script);
int o2_loadMusicTrack(ScriptState *script);
@@ -1066,6 +1069,7 @@ protected:
int o2_getColorCodeValue(ScriptState *script);
int o2_setColorCodeValue(ScriptState *script);
int o2_countItemInstances(ScriptState *script);
+ int o2_removeItemFromScene(ScriptState *script);
int o2_initObject(ScriptState *script);
int o2_npcChat(ScriptState *script);
int o2_deinitObject(ScriptState *script);
diff --git a/engines/kyra/script_v2.cpp b/engines/kyra/script_v2.cpp
index ac0a7e955f..4eb8f51535 100644
--- a/engines/kyra/script_v2.cpp
+++ b/engines/kyra/script_v2.cpp
@@ -502,6 +502,16 @@ int KyraEngine_v2::o2_countItemInInventory(ScriptState *script) {
return count;
}
+int KyraEngine_v2::o2_countItemsInScene(ScriptState *script) {
+ debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v2::o2_countItemsInScene(%p) (%d)", (const void *)script, stackPos(0));
+ int count = 0;
+ for (int i = 0; i < 30; ++i) {
+ if (_itemList[i].sceneId == stackPos(0) && _itemList[i].id != 0xFFFF)
+ ++count;
+ }
+ return count;
+}
+
int KyraEngine_v2::o2_queryGameFlag(ScriptState *script) {
debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v2::o2_queryGameFlag(%p) (%d)", (const void *)script, stackPos(0));
return queryGameFlag(stackPos(0));
@@ -625,6 +635,12 @@ int KyraEngine_v2::o2_delay(ScriptState *script) {
return 0;
}
+int KyraEngine_v2::o2_setTimerDelay(ScriptState *script) {
+ debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v2::o2_setTimerDelay(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
+ _timer->setDelay(stackPos(0), stackPos(1));
+ return 0;
+}
+
int KyraEngine_v2::o2_setScaleTableItem(ScriptState *script) {
debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v2::o2_setScaleTableItem(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
setScaleTableItem(stackPos(0), stackPos(1));
@@ -826,6 +842,22 @@ int KyraEngine_v2::o2_setPathfinderFlag(ScriptState *script) {
return 0;
}
+int KyraEngine_v2::o2_getSceneExitToFacing(ScriptState *script) {
+ debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v2::o2_getSceneExitToFacing(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
+ const int scene = stackPos(0);
+ const int facing = stackPos(1);
+
+ if (facing == 0)
+ return (int16)_sceneList[scene].exit1;
+ else if (facing == 2)
+ return (int16)_sceneList[scene].exit2;
+ else if (facing == 4)
+ return (int16)_sceneList[scene].exit3;
+ else if (facing == 6)
+ return (int16)_sceneList[scene].exit4;
+ return -1;
+}
+
int KyraEngine_v2::o2_setLayerFlag(ScriptState *script) {
debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v2::o2_setLayerFlag(%p) (%d)", (const void *)script, stackPos(0));
int layer = stackPos(0);
@@ -1344,6 +1376,17 @@ int KyraEngine_v2::o2_countItemInstances(ScriptState *script) {
return count;
}
+int KyraEngine_v2::o2_removeItemFromScene(ScriptState *script) {
+ debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v2::o2_removeItemFromScene(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
+ const int scene = stackPos(0);
+ const uint16 item = stackPos(1);
+ for (int i = 0; i < 30; ++i) {
+ if (_itemList[i].sceneId == scene && _itemList[i].id == item)
+ _itemList[i].id = 0xFFFF;
+ }
+ return 0;
+}
+
int KyraEngine_v2::o2_initObject(ScriptState *script) {
debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v2::o2_initObject(%p) (%d)", (const void *)script, stackPos(0));
initTalkObject(stackPos(0));
@@ -1781,7 +1824,7 @@ void KyraEngine_v2::setupOpcodeTable() {
// 0x24
Opcode(o2_removeItemFromInventory),
Opcode(o2_countItemInInventory),
- OpcodeUnImpl(),
+ Opcode(o2_countItemsInScene),
Opcode(o2_queryGameFlag),
// 0x28
Opcode(o2_resetGameFlag),
@@ -1805,7 +1848,7 @@ void KyraEngine_v2::setupOpcodeTable() {
Opcode(o2_delay),
// 0x38
Opcode(o2_dummy),
- OpcodeUnImpl(),
+ Opcode(o2_setTimerDelay),
Opcode(o2_setScaleTableItem),
Opcode(o2_setDrawLayerTableItem),
// 0x3c
@@ -1839,7 +1882,7 @@ void KyraEngine_v2::setupOpcodeTable() {
Opcode(o2_getShapeFlag1),
Opcode(o2_setPathfinderFlag),
// 0x54
- OpcodeUnImpl(),
+ Opcode(o2_getSceneExitToFacing),
Opcode(o2_setLayerFlag),
Opcode(o2_setZanthiaPos),
Opcode(o2_loadMusicTrack),
@@ -1905,7 +1948,7 @@ void KyraEngine_v2::setupOpcodeTable() {
Opcode(o2_setColorCodeValue),
// 0x88
Opcode(o2_countItemInstances),
- OpcodeUnImpl(),
+ Opcode(o2_removeItemFromScene),
Opcode(o2_initObject),
Opcode(o2_npcChat),
// 0x8c