aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/scumm/script_v4.cpp29
-rw-r--r--engines/scumm/script_v5.cpp40
-rw-r--r--engines/scumm/scumm_v4.h2
-rw-r--r--engines/scumm/scumm_v5.h2
4 files changed, 39 insertions, 34 deletions
diff --git a/engines/scumm/script_v4.cpp b/engines/scumm/script_v4.cpp
index 5691f6707c..08df1e4653 100644
--- a/engines/scumm/script_v4.cpp
+++ b/engines/scumm/script_v4.cpp
@@ -45,6 +45,35 @@ void ScummEngine_v4::setupOpcodes() {
OPCODE(0x5c, o4_oldRoomEffect);
OPCODE(0xdc, o4_oldRoomEffect);
+
+ OPCODE(0x0f, o4_ifState);
+ OPCODE(0x2f, o4_ifNotState);
+ OPCODE(0x4f, o4_ifState);
+ OPCODE(0x6f, o4_ifNotState);
+ OPCODE(0x8f, o4_ifState);
+ OPCODE(0xaf, o4_ifNotState);
+ OPCODE(0xcf, o4_ifState);
+ OPCODE(0xef, o4_ifNotState);
+}
+
+void ScummEngine_v4::o4_ifState() {
+ int a = getVarOrDirectWord(PARAM_1);
+ int b = getVarOrDirectByte(PARAM_2);
+
+ if (getState(a) != b)
+ o5_jumpRelative();
+ else
+ ignoreScriptWord();
+}
+
+void ScummEngine_v4::o4_ifNotState() {
+ int a = getVarOrDirectWord(PARAM_1);
+ int b = getVarOrDirectByte(PARAM_2);
+
+ if (getState(a) == b)
+ o5_jumpRelative();
+ else
+ ignoreScriptWord();
}
void ScummEngine_v4::o4_pickupObject() {
diff --git a/engines/scumm/script_v5.cpp b/engines/scumm/script_v5.cpp
index 97c79a367a..b8930463d3 100644
--- a/engines/scumm/script_v5.cpp
+++ b/engines/scumm/script_v5.cpp
@@ -98,7 +98,7 @@ void ScummEngine_v5::setupOpcodes() {
OPCODE(0x2c, o5_cursorCommand);
OPCODE(0x2d, o5_putActorInRoom);
OPCODE(0x2e, o5_delay);
- OPCODE(0x2f, o5_ifNotState);
+// OPCODE(0x2f, o5_ifNotState);
/* 30 */
OPCODE(0x30, o5_matrixOps);
OPCODE(0x31, o5_getInventoryCount);
@@ -138,7 +138,7 @@ void ScummEngine_v5::setupOpcodes() {
OPCODE(0x4c, o5_soundKludge);
OPCODE(0x4d, o5_walkActorToActor);
OPCODE(0x4e, o5_putActorAtObject);
- OPCODE(0x4f, o5_ifState);
+// OPCODE(0x4f, o5_ifState);
/* 50 */
// OPCODE(0x50, o5_pickupObjectOld);
OPCODE(0x51, o5_animateActor);
@@ -178,7 +178,7 @@ void ScummEngine_v5::setupOpcodes() {
OPCODE(0x6c, o5_getActorWidth);
OPCODE(0x6d, o5_putActorInRoom);
OPCODE(0x6e, o5_stopObjectScript);
- OPCODE(0x6f, o5_ifNotState);
+// OPCODE(0x6f, o5_ifNotState);
/* 70 */
OPCODE(0x70, o5_lights);
OPCODE(0x71, o5_getActorCostume);
@@ -258,7 +258,7 @@ void ScummEngine_v5::setupOpcodes() {
OPCODE(0xac, o5_expression);
OPCODE(0xad, o5_putActorInRoom);
OPCODE(0xae, o5_wait);
- OPCODE(0xaf, o5_ifNotState);
+// OPCODE(0xaf, o5_ifNotState);
/* B0 */
OPCODE(0xb0, o5_matrixOps);
OPCODE(0xb1, o5_getInventoryCount);
@@ -298,7 +298,7 @@ void ScummEngine_v5::setupOpcodes() {
OPCODE(0xcc, o5_pseudoRoom);
OPCODE(0xcd, o5_walkActorToActor);
OPCODE(0xce, o5_putActorAtObject);
- OPCODE(0xcf, o5_ifState);
+// OPCODE(0xcf, o5_ifState);
/* D0 */
// OPCODE(0xd0, o5_pickupObjectOld);
OPCODE(0xd1, o5_animateActor);
@@ -338,7 +338,7 @@ void ScummEngine_v5::setupOpcodes() {
OPCODE(0xec, o5_getActorWidth);
OPCODE(0xed, o5_putActorInRoom);
OPCODE(0xee, o5_stopObjectScript);
- OPCODE(0xef, o5_ifNotState);
+// OPCODE(0xef, o5_ifNotState);
/* F0 */
OPCODE(0xf0, o5_lights);
OPCODE(0xf1, o5_getActorCostume);
@@ -1407,32 +1407,8 @@ void ScummEngine_v5::o5_getObjectOwner() {
}
void ScummEngine_v5::o5_getObjectState() {
- if (_game.features & GF_SMALL_HEADER) {
- o5_ifState();
- } else {
- getResultPos();
- setResult(getState(getVarOrDirectWord(PARAM_1)));
- }
-}
-
-void ScummEngine_v5::o5_ifState() {
- int a = getVarOrDirectWord(PARAM_1);
- int b = getVarOrDirectByte(PARAM_2);
-
- if (getState(a) != b)
- o5_jumpRelative();
- else
- ignoreScriptWord();
-}
-
-void ScummEngine_v5::o5_ifNotState() {
- int a = getVarOrDirectWord(PARAM_1);
- int b = getVarOrDirectByte(PARAM_2);
-
- if (getState(a) == b)
- o5_jumpRelative();
- else
- ignoreScriptWord();
+ getResultPos();
+ setResult(getState(getVarOrDirectWord(PARAM_1)));
}
void ScummEngine_v5::o5_getRandomNr() {
diff --git a/engines/scumm/scumm_v4.h b/engines/scumm/scumm_v4.h
index 6942b73682..6e0326ed17 100644
--- a/engines/scumm/scumm_v4.h
+++ b/engines/scumm/scumm_v4.h
@@ -52,6 +52,8 @@ protected:
virtual void resetRoomObject(ObjectData *od, const byte *room, const byte *searchptr = NULL);
/* Version 4 script opcodes */
+ void o4_ifState();
+ void o4_ifNotState();
void o4_oldRoomEffect();
void o4_pickupObject();
};
diff --git a/engines/scumm/scumm_v5.h b/engines/scumm/scumm_v5.h
index c84b6ca74a..4ff51868ff 100644
--- a/engines/scumm/scumm_v5.h
+++ b/engines/scumm/scumm_v5.h
@@ -136,8 +136,6 @@ protected:
void o5_getStringWidth();
void o5_getVerbEntrypoint();
void o5_ifClassOfIs();
- void o5_ifNotState();
- void o5_ifState();
void o5_increment();
void o5_isActorInBox();
void o5_isEqual();