aboutsummaryrefslogtreecommitdiff
path: root/engines/scumm/script_v0.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/scumm/script_v0.cpp')
-rw-r--r--engines/scumm/script_v0.cpp173
1 files changed, 23 insertions, 150 deletions
diff --git a/engines/scumm/script_v0.cpp b/engines/scumm/script_v0.cpp
index 23f1ef7de2..1b8368d636 100644
--- a/engines/scumm/script_v0.cpp
+++ b/engines/scumm/script_v0.cpp
@@ -41,12 +41,12 @@ void ScummEngine_v0::setupOpcodes() {
OPCODE(0x02, o5_startMusic);
OPCODE(0x03, o_doSentence);
/* 04 */
- OPCODE(0x04, o_isGreaterEqual);
+ OPCODE(0x04, o2_isGreaterEqual);
OPCODE(0x05, o_stopCurrentScript);
OPCODE(0x06, o5_getDist);
OPCODE(0x07, o5_getActorRoom);
/* 08 */
- OPCODE(0x08, o_isNotEqual);
+ OPCODE(0x08, o5_isNotEqual);
OPCODE(0x09, o_stopCurrentScript);
OPCODE(0x0a, o_stopCurrentScript);
OPCODE(0x0b, o_setActorBitVar);
@@ -64,9 +64,9 @@ void ScummEngine_v0::setupOpcodes() {
OPCODE(0x14, o_print_c64);
OPCODE(0x15, o5_walkActorToActor);
OPCODE(0x16, o5_getRandomNr);
- OPCODE(0x17, o_clearState08);
+ OPCODE(0x17, o2_clearState08);
/* 18 */
- OPCODE(0x18, o_jumpRelative);
+ OPCODE(0x18, o5_jumpRelative);
OPCODE(0x19, o_stopCurrentScript);
OPCODE(0x1a, o5_move);
OPCODE(0x1b, o_getActorBitVar);
@@ -86,7 +86,7 @@ void ScummEngine_v0::setupOpcodes() {
OPCODE(0x26, o_getClosestObjActor);
OPCODE(0x27, o2_getActorY);
/* 28 */
- OPCODE(0x28, o_equalZero);
+ OPCODE(0x28, o5_equalZero);
OPCODE(0x29, o_setOwnerOf);
OPCODE(0x2a, o2_delay);
OPCODE(0x2b, o_setActorBitVar);
@@ -106,7 +106,7 @@ void ScummEngine_v0::setupOpcodes() {
OPCODE(0x36, o2_walkActorToObject);
OPCODE(0x37, o2_clearState04);
/* 38 */
- OPCODE(0x38, o_isLessEqual);
+ OPCODE(0x38, o2_isLessEqual);
OPCODE(0x39, o_stopCurrentScript);
OPCODE(0x3a, o2_subtract);
OPCODE(0x3b, o_stopCurrentScript);
@@ -121,12 +121,12 @@ void ScummEngine_v0::setupOpcodes() {
OPCODE(0x42, o2_startScript);
OPCODE(0x43, o_doSentence);
/* 44 */
- OPCODE(0x44, o_isLess);
+ OPCODE(0x44, o2_isLess);
OPCODE(0x45, o_stopCurrentScript);
OPCODE(0x46, o5_increment);
OPCODE(0x47, o2_getActorX);
/* 48 */
- OPCODE(0x48, o_isEqual);
+ OPCODE(0x48, o5_isEqual);
OPCODE(0x49, o_stopCurrentScript);
OPCODE(0x4a, o_loadRoom);
OPCODE(0x4b, o_setActorBitVar);
@@ -144,7 +144,7 @@ void ScummEngine_v0::setupOpcodes() {
OPCODE(0x54, o_setObjectName);
OPCODE(0x55, o5_walkActorToActor);
OPCODE(0x56, o_getActorMoving);
- OPCODE(0x57, o_clearState08);
+ OPCODE(0x57, o2_clearState08);
/* 58 */
OPCODE(0x58, o_beginOverride);
OPCODE(0x59, o_stopCurrentScript);
@@ -186,7 +186,7 @@ void ScummEngine_v0::setupOpcodes() {
OPCODE(0x76, o2_walkActorToObject);
OPCODE(0x77, o2_clearState04);
/* 78 */
- OPCODE(0x78, o_isGreater);
+ OPCODE(0x78, o2_isGreater);
OPCODE(0x79, o_stopCurrentScript);
OPCODE(0x7a, o_stopCurrentScript);
OPCODE(0x7b, o_stopCurrentScript);
@@ -201,12 +201,12 @@ void ScummEngine_v0::setupOpcodes() {
OPCODE(0x82, o_stopCurrentScript);
OPCODE(0x83, o_doSentence);
/* 84 */
- OPCODE(0x84, o_isGreaterEqual);
+ OPCODE(0x84, o2_isGreaterEqual);
OPCODE(0x85, o_stopCurrentScript);
OPCODE(0x86, o_nop);
OPCODE(0x87, o5_getActorRoom);
/* 88 */
- OPCODE(0x88, o_isNotEqual);
+ OPCODE(0x88, o5_isNotEqual);
OPCODE(0x89, o_stopCurrentScript);
OPCODE(0x8a, o_stopCurrentScript);
OPCODE(0x8b, o_setActorBitVar);
@@ -224,7 +224,7 @@ void ScummEngine_v0::setupOpcodes() {
OPCODE(0x94, o5_print);
OPCODE(0x95, o2_actorFromPos);
OPCODE(0x96, o_stopCurrentScript);
- OPCODE(0x97, o_setState08);
+ OPCODE(0x97, o2_setState08);
/* 98 */
OPCODE(0x98, o2_restart);
OPCODE(0x99, o_stopCurrentScript);
@@ -246,7 +246,7 @@ void ScummEngine_v0::setupOpcodes() {
OPCODE(0xa6, o_stopCurrentScript);
OPCODE(0xa7, o2_getActorY);
/* A8 */
- OPCODE(0xa8, o_notEqualZero);
+ OPCODE(0xa8, o5_notEqualZero);
OPCODE(0xa9, o_setOwnerOf);
OPCODE(0xaa, o_stopCurrentScript);
OPCODE(0xab, o_setActorBitVar);
@@ -266,7 +266,7 @@ void ScummEngine_v0::setupOpcodes() {
OPCODE(0xb6, o2_walkActorToObject);
OPCODE(0xb7, o2_setState04);
/* B8 */
- OPCODE(0xb8, o_isLessEqual);
+ OPCODE(0xb8, o2_isLessEqual);
OPCODE(0xb9, o_stopCurrentScript);
OPCODE(0xba, o2_subtract);
OPCODE(0xbb, o_stopCurrentScript);
@@ -281,12 +281,12 @@ void ScummEngine_v0::setupOpcodes() {
OPCODE(0xc2, o2_startScript);
OPCODE(0xc3, o_doSentence);
/* C4 */
- OPCODE(0xc4, o_isLess);
+ OPCODE(0xc4, o2_isLess);
OPCODE(0xc5, o_stopCurrentScript);
OPCODE(0xc6, o5_decrement);
OPCODE(0xc7, o2_getActorX);
/* C8 */
- OPCODE(0xc8, o_isEqual);
+ OPCODE(0xc8, o5_isEqual);
OPCODE(0xc9, o_stopCurrentScript);
OPCODE(0xca, o_loadRoom);
OPCODE(0xcb, o_setActorBitVar);
@@ -304,7 +304,7 @@ void ScummEngine_v0::setupOpcodes() {
OPCODE(0xd4, o_setObjectName);
OPCODE(0xd5, o2_actorFromPos);
OPCODE(0xd6, o_getActorMoving);
- OPCODE(0xd7, o_setState08);
+ OPCODE(0xd7, o2_setState08);
/* D8 */
OPCODE(0xd8, o_stopCurrentScript);
OPCODE(0xd9, o_stopCurrentScript);
@@ -346,7 +346,7 @@ void ScummEngine_v0::setupOpcodes() {
OPCODE(0xf6, o2_walkActorToObject);
OPCODE(0xf7, o2_setState04);
/* F8 */
- OPCODE(0xf8, o_isGreater);
+ OPCODE(0xf8, o2_isGreater);
OPCODE(0xf9, o_stopCurrentScript);
OPCODE(0xfa, o_stopCurrentScript);
OPCODE(0xfb, o_stopCurrentScript);
@@ -367,8 +367,8 @@ uint ScummEngine_v0::fetchScriptWord() {
return fetchScriptByte();
}
-int ScummEngine_v0::getObjectFlag() {
- if (_opcode & 0x40)
+int ScummEngine_v0::getActiveObject() {
+ if (_opcode & PARAM_2)
return _activeObject;
return fetchScriptByte();
@@ -410,34 +410,6 @@ void ScummEngine_v0::decodeParseString() {
actorTalk(buffer);
}
-void ScummEngine_v0::setStateCommon(byte type) {
- int obj = getObjectFlag();
- putState(obj, getState(obj) | type);
-}
-
-void ScummEngine_v0::clearStateCommon(byte type) {
- int obj = getObjectFlag();
- putState(obj, getState(obj) & ~type);
-}
-
-void ScummEngine_v0::ifStateCommon(byte type) {
- int obj = getObjectFlag();
-
- if ((getState(obj) & type) != 0)
- ScummEngine::fetchScriptWord();
- else
- o_jumpRelative();
-}
-
-void ScummEngine_v0::ifNotStateCommon(byte type) {
- int obj = getObjectFlag();
-
- if ((getState(obj) & type) == 0)
- ScummEngine::fetchScriptWord();
- else
- o_jumpRelative();
-}
-
void ScummEngine_v0::drawSentence() {
Common::Rect sentenceline;
const byte *temp;
@@ -541,20 +513,6 @@ void ScummEngine_v0::drawSentence() {
drawString(2, (byte*)string);
}
-void ScummEngine_v0::o_setState08() {
- int obj = getObjectFlag();
- putState(obj, getState(obj) | kObjectState_08);
- markObjectRectAsDirty(obj);
- clearDrawObjectQueue();
-}
-
-void ScummEngine_v0::o_clearState08() {
- int obj = getObjectFlag();
- putState(obj, getState(obj) & ~kObjectState_08);
- markObjectRectAsDirty(obj);
- clearDrawObjectQueue();
-}
-
void ScummEngine_v0::o_stopCurrentScript() {
int script;
@@ -850,10 +808,7 @@ void ScummEngine_v0::o_unknown2() {
void ScummEngine_v0::o_ifActiveObject() {
byte obj = fetchScriptByte();
- if (obj == _activeInventory)
- ScummEngine::fetchScriptWord();
- else
- o_jumpRelative();
+ jumpRelative(obj == _activeInventory);
}
void ScummEngine_v0::o_getClosestObjActor() {
@@ -870,7 +825,7 @@ void ScummEngine_v0::o_getClosestObjActor() {
getResultPos();
act = getVarOrDirectByte(PARAM_1);
- obj = (_opcode & 0x40) ? 25 : 7;
+ obj = (_opcode & PARAM_2) ? 25 : 7;
do {
dist = getObjActToObjActDist(act, obj);
@@ -933,88 +888,6 @@ void ScummEngine_v0::o_beginOverride() {
VAR(VAR_OVERRIDE) = 0;
}
-void ScummEngine_v0::o_isEqual() {
- int16 a, b;
- int var;
-
- var = fetchScriptByte();
- a = readVar(var);
- b = getVarOrDirectByte(PARAM_1);
-
- if (b == a)
- ScummEngine::fetchScriptWord();
- else
- o_jumpRelative();
-
-}
-
-void ScummEngine_v0::o_isGreater() {
- int16 a = getVar();
- int16 b = getVarOrDirectByte(PARAM_1);
- if (b > a)
- ScummEngine::fetchScriptWord();
- else
- o_jumpRelative();
-}
-
-void ScummEngine_v0::o_isGreaterEqual() {
- int16 a = getVar();
- int16 b = getVarOrDirectByte(PARAM_1);
- if (b >= a)
- ScummEngine::fetchScriptWord();
- else
- o_jumpRelative();
-}
-
-void ScummEngine_v0::o_isLess() {
- int16 a = getVar();
- int16 b = getVarOrDirectByte(PARAM_1);
- if (b < a)
- ScummEngine::fetchScriptWord();
- else
- o_jumpRelative();
-}
-
-void ScummEngine_v0::o_isLessEqual() {
- int16 a = getVar();
- int16 b = getVarOrDirectByte(PARAM_1);
-
- if (b <= a)
- ScummEngine::fetchScriptWord();
- else
- o_jumpRelative();
-}
-
-void ScummEngine_v0::o_isNotEqual() {
- int16 a = getVar();
- int16 b = getVarOrDirectByte(PARAM_1);
- if (b != a)
- ScummEngine::fetchScriptWord();
- else
- o_jumpRelative();
-}
-
-void ScummEngine_v0::o_notEqualZero() {
- int a = getVar();
- if (a != 0)
- ScummEngine::fetchScriptWord();
- else
- o_jumpRelative();
-}
-
-void ScummEngine_v0::o_equalZero() {
- int a = getVar();
- if (a == 0)
- ScummEngine::fetchScriptWord();
- else
- o_jumpRelative();
-}
-
-void ScummEngine_v0::o_jumpRelative() {
- int16 offset = (int16)ScummEngine::fetchScriptWord();
- _scriptPointer += offset;
-}
-
void ScummEngine_v0::o_setOwnerOf() {
int obj, owner;