diff options
author | Paweł Kołodziejski | 2003-04-21 15:25:29 +0000 |
---|---|---|
committer | Paweł Kołodziejski | 2003-04-21 15:25:29 +0000 |
commit | d836216a71bdd00e15f2f5788d1b8a9502c3f8fb (patch) | |
tree | ccfe54395092b1eb868c92d4aff512b307a9a0de | |
parent | be607289bb376b1c4fa3cb20150a5f02a3453d33 (diff) | |
download | scummvm-rg350-d836216a71bdd00e15f2f5788d1b8a9502c3f8fb.tar.gz scummvm-rg350-d836216a71bdd00e15f2f5788d1b8a9502c3f8fb.tar.bz2 scummvm-rg350-d836216a71bdd00e15f2f5788d1b8a9502c3f8fb.zip |
added o2_ifClassOfIs opcode
svn-id: r7065
-rw-r--r-- | scumm/intern.h | 1 | ||||
-rw-r--r-- | scumm/script_v2.cpp | 25 |
2 files changed, 21 insertions, 5 deletions
diff --git a/scumm/intern.h b/scumm/intern.h index bdf9733a98..13903e0362 100644 --- a/scumm/intern.h +++ b/scumm/intern.h @@ -240,6 +240,7 @@ protected: void o2_resourceRoutines(); void o2_verbOps(); void o2_doSentence(); + void o2_ifClassOfIs(); void o2_isEqual(); void o2_isGreater(); diff --git a/scumm/script_v2.cpp b/scumm/script_v2.cpp index 8b2ac7474e..c4300d8c62 100644 --- a/scumm/script_v2.cpp +++ b/scumm/script_v2.cpp @@ -51,7 +51,7 @@ void Scumm_v2::setupOpcodes() { OPCODE(o2_resourceRoutines), OPCODE(o5_walkActorToActor), OPCODE(o5_putActorAtObject), - OPCODE(o5_getObjectState), + OPCODE(o2_ifNotState08), /* 10 */ OPCODE(o5_getObjectOwner), OPCODE(o5_animateActor), @@ -69,7 +69,7 @@ void Scumm_v2::setupOpcodes() { OPCODE(o2_setBitVar), /* 1C */ OPCODE(o5_startSound), - OPCODE(o5_ifClassOfIs), + OPCODE(o2_ifClassOfIs), OPCODE(o5_walkActorTo), OPCODE(o2_ifState02), /* 20 */ @@ -149,7 +149,7 @@ void Scumm_v2::setupOpcodes() { OPCODE(o2_setBitVar), /* 5C */ OPCODE(o5_oldRoomEffect), - OPCODE(o5_ifClassOfIs), + OPCODE(o2_ifClassOfIs), OPCODE(o5_walkActorTo), OPCODE(o2_ifNotState02), /* 60 */ @@ -229,7 +229,7 @@ void Scumm_v2::setupOpcodes() { OPCODE(o2_setBitVar), /* 9C */ OPCODE(o5_startSound), - OPCODE(o5_ifClassOfIs), + OPCODE(o2_ifClassOfIs), OPCODE(o5_walkActorTo), OPCODE(o2_ifState02), /* A0 */ @@ -309,7 +309,7 @@ void Scumm_v2::setupOpcodes() { OPCODE(o5_divide), /* DC */ OPCODE(o5_oldRoomEffect), - OPCODE(o5_ifClassOfIs), + OPCODE(o2_ifClassOfIs), OPCODE(o5_walkActorTo), OPCODE(o2_ifNotState02), /* E0 */ @@ -867,3 +867,18 @@ void Scumm_v2::o2_printEgo() { //_scriptPointer = _messagePtr; } +void Scumm_v2::o2_ifClassOfIs() { + int act = getVarOrDirectWord(0x80); + int clsop = getVarOrDirectByte(0x40); + + if (getObjectIndex(act) != 0xFF) { + o5_jumpRelative(); + return; + } + + ObjectData *od = &_objs[getObjectIndex(act)]; + byte cls = *(getResourceAddress(rtRoom, _currentRoom) + od->OBCDoffset + 10); + if ((cls & clsop) != clsop) { + o5_jumpRelative(); + } +} |