aboutsummaryrefslogtreecommitdiff
path: root/scumm/script_v2.cpp
diff options
context:
space:
mode:
authorPaweł Kołodziejski2003-04-27 11:38:38 +0000
committerPaweł Kołodziejski2003-04-27 11:38:38 +0000
commitd9c87511686880f2dcba29b53a7944ddc0e8ea64 (patch)
tree3373627ab7150ff8365173fa1ad86ac0533f9d39 /scumm/script_v2.cpp
parent07bd555101ae3333339e0bbc20f72dd451d20e05 (diff)
downloadscummvm-rg350-d9c87511686880f2dcba29b53a7944ddc0e8ea64.tar.gz
scummvm-rg350-d9c87511686880f2dcba29b53a7944ddc0e8ea64.tar.bz2
scummvm-rg350-d9c87511686880f2dcba29b53a7944ddc0e8ea64.zip
some fixes to v2 opcodes
svn-id: r7153
Diffstat (limited to 'scumm/script_v2.cpp')
-rw-r--r--scumm/script_v2.cpp52
1 files changed, 25 insertions, 27 deletions
diff --git a/scumm/script_v2.cpp b/scumm/script_v2.cpp
index ef2934ce97..7d24610b41 100644
--- a/scumm/script_v2.cpp
+++ b/scumm/script_v2.cpp
@@ -40,7 +40,7 @@ void Scumm_v2::setupOpcodes() {
/* 04 */
OPCODE(o2_isGreaterEqual),
OPCODE(o2_drawObject),
- OPCODE(o2_getActorElevation),
+ OPCODE(o5_getActorElevation),
OPCODE(o2_setState08),
/* 08 */
OPCODE(o2_isNotEqual),
@@ -109,7 +109,7 @@ void Scumm_v2::setupOpcodes() {
OPCODE(o2_waitForActor),
/* 3C */
OPCODE(o5_stopSound),
- OPCODE(o2_getActorElevation),
+ OPCODE(o2_setActorElevation),
OPCODE(o2_walkActorTo),
OPCODE(o2_ifNotState01),
/* 40 */
@@ -189,7 +189,7 @@ void Scumm_v2::setupOpcodes() {
OPCODE(o2_getActorWalkBox),
/* 7C */
OPCODE(o5_isSoundRunning),
- OPCODE(o2_getActorElevation),
+ OPCODE(o2_setActorElevation),
OPCODE(o2_walkActorTo),
OPCODE(o2_ifNotState01),
/* 80 */
@@ -200,7 +200,7 @@ void Scumm_v2::setupOpcodes() {
/* 84 */
OPCODE(o2_isGreaterEqual),
OPCODE(o2_drawObject),
- OPCODE(o2_getActorElevation),
+ OPCODE(o5_getActorElevation),
OPCODE(o2_setState08),
/* 88 */
OPCODE(o2_isNotEqual),
@@ -269,7 +269,7 @@ void Scumm_v2::setupOpcodes() {
OPCODE(o2_waitForActor),
/* BC */
OPCODE(o5_stopSound),
- OPCODE(o2_getActorElevation),
+ OPCODE(o2_setActorElevation),
OPCODE(o2_walkActorTo),
OPCODE(o2_ifNotState01),
/* C0 */
@@ -349,7 +349,7 @@ void Scumm_v2::setupOpcodes() {
OPCODE(o2_getActorWalkBox),
/* FC */
OPCODE(o5_isSoundRunning),
- OPCODE(o2_getActorElevation),
+ OPCODE(o2_setActorElevation),
OPCODE(o2_walkActorTo),
OPCODE(o2_ifState01)
};
@@ -853,7 +853,9 @@ void Scumm_v2::o2_ifClassOfIs() {
byte cls = *(getResourceAddress(rtRoom, _currentRoom) + od->OBCDoffset + 10);
if ((cls & clsop) != clsop) {
o5_jumpRelative();
+ return;
}
+ ignoreScriptWord();
}
void Scumm_v2::o2_walkActorTo() {
@@ -887,21 +889,6 @@ void Scumm_v2::o2_panCameraTo() {
panCameraTo(getVarOrDirectByte(0x80), 0);
}
-void Scumm_v2::o2_getActorElevation() {
- int act;
- Actor *a;
- getResultPos();
- act = getVarOrDirectByte(0x80);
-
- a = derefActorSafe(act, "o2_getActorElevation");
- if (!a) {
- warning("Invalid actor %d in o2_getActorElevation", act);
- return;
- }
-
- _vars[_resultVarNumber] = a->elevation;
-}
-
void Scumm_v2::o2_walkActorToObject() {
int obj;
Actor *a;
@@ -930,6 +917,17 @@ void Scumm_v2::o2_putActorAtObject() {
a->putActor(x, y, a->room);
}
+void Scumm_v2::o2_setActorElevation() {
+ int act = getVarOrDirectByte(0x80);
+ int elevation = getVarOrDirectByte(0x40);
+
+ Actor *a = derefActorSafe(act, "o2_setActorElevation");
+ if (!a)
+ return;
+
+ a->elevation = elevation;
+}
+
void Scumm_v2::o2_animateActor() {
int act = getVarOrDirectByte(0x80);
int anim = getVarOrDirectByte(0x40);
@@ -1063,11 +1061,11 @@ void Scumm_v2::o2_findObject() {
}
void Scumm_v2::o2_cutscene() {
- // TODO
+ warning("TODO o2_cutscene()");
}
void Scumm_v2::o2_endCutscene() {
- // TODO
+ warning("TODO o2_endCutscene()");
}
void Scumm_v2::o2_chainScript() {
@@ -1141,7 +1139,7 @@ void Scumm_v2::o2_setObjectName() {
void Scumm_v2::o2_cursorCommand() {
getVarOrDirectWord(0x80);
- // TODO
+ warning("TODO: o2_cursorCommand()");
}
void Scumm_v2::o2_getClosestObjActor() {
@@ -1153,7 +1151,7 @@ void Scumm_v2::o2_getClosestObjActor() {
getResultPos();
act = getVarOrDirectWord(0x80);
- obj = _vars[VAR_V5_OBJECT_HI];
+ obj = _vars[VAR_ACTOR_RANGE_MAX];
do {
dist = getObjActToObjActDist(act, obj);
@@ -1161,7 +1159,7 @@ void Scumm_v2::o2_getClosestObjActor() {
closest_dist = dist;
closest_obj = obj;
}
- } while (--obj >= _vars[VAR_V5_OBJECT_LO]);
+ } while (--obj >= _vars[VAR_ACTOR_RANGE_MIN]);
_vars[_resultVarNumber] = closest_dist;
}
@@ -1177,5 +1175,5 @@ void Scumm_v2::o2_getActorWalkBox() {
}
void Scumm_v2::o2_drawSentence() {
- error("TODO o2_drawSentence()");
+ warning("TODO o2_drawSentence()");
}