diff options
author | Paweł Kołodziejski | 2003-04-27 11:38:38 +0000 |
---|---|---|
committer | Paweł Kołodziejski | 2003-04-27 11:38:38 +0000 |
commit | d9c87511686880f2dcba29b53a7944ddc0e8ea64 (patch) | |
tree | 3373627ab7150ff8365173fa1ad86ac0533f9d39 /scumm/script_v2.cpp | |
parent | 07bd555101ae3333339e0bbc20f72dd451d20e05 (diff) | |
download | scummvm-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.cpp | 52 |
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()"); } |