diff options
author | Johannes Schickel | 2010-10-13 03:57:44 +0000 |
---|---|---|
committer | Johannes Schickel | 2010-10-13 03:57:44 +0000 |
commit | 75e8452b6e6a2bf4fb2f588aa00b428a60d873b5 (patch) | |
tree | f29541d55309487a94bd1d38e8b53bb3dde9aec6 /engines/scumm/script_v3.cpp | |
parent | 48ee83b88957dab86bc763e9ef21a70179fa8679 (diff) | |
parent | e9f50882ea5b6beeefa994040be9d3bab6a1f107 (diff) | |
download | scummvm-rg350-75e8452b6e6a2bf4fb2f588aa00b428a60d873b5.tar.gz scummvm-rg350-75e8452b6e6a2bf4fb2f588aa00b428a60d873b5.tar.bz2 scummvm-rg350-75e8452b6e6a2bf4fb2f588aa00b428a60d873b5.zip |
OPENGL: Merged from trunk, from rev 52105 to 53396.
This includes an rather hacky attempt to merge all the recent gp2x backend
changes into the branch. I suppose the gp2x backend and probably all new
backends, i.e. gph, dingux etc., might not compile anymore.
Since I have no way of testing those it would be nice if porters could look
into getting those up to speed in this branch.
svn-id: r53399
Diffstat (limited to 'engines/scumm/script_v3.cpp')
-rw-r--r-- | engines/scumm/script_v3.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/engines/scumm/script_v3.cpp b/engines/scumm/script_v3.cpp index 7d2efdb9a8..176eefdeef 100644 --- a/engines/scumm/script_v3.cpp +++ b/engines/scumm/script_v3.cpp @@ -24,6 +24,7 @@ */ #include "scumm/scumm_v3.h" +#include "scumm/actor.h" namespace Scumm { @@ -36,6 +37,11 @@ void ScummEngine_v3::setupOpcodes() { OPCODE(0x30, o3_setBoxFlags); OPCODE(0xb0, o3_setBoxFlags); } + + OPCODE(0x3b, o3_waitForActor); + OPCODE(0xbb, o3_waitForActor); + + OPCODE(0x4c, o3_waitForSentence); } void ScummEngine_v3::o3_setBoxFlags() { @@ -46,4 +52,38 @@ void ScummEngine_v3::o3_setBoxFlags() { setBoxFlags(a, b); } +void ScummEngine_v3::o3_waitForActor() { + // This opcode was a NOP in LOOM. Also, we cannot directly use + // o2_waitForActor because there the _scriptPointer is different (it + // assumes that getVar reads only a single byte, which is correct + // for v2 but not for v3). Of course we could copy the code here to + // o2_waitForActor and then merge the two, but right now I am + // keeping this as it is. + if (_game.id == GID_INDY3) { + const byte *oldaddr = _scriptPointer - 1; + Actor *a = derefActor(getVarOrDirectByte(PARAM_1), "o3_waitForActor"); + if (a->_moving) { + _scriptPointer = oldaddr; + o5_breakHere(); + } + } +} + +void ScummEngine_v3::o3_waitForSentence() { + // FIXME/TODO: Can we merge this with o2_waitForSentence? I think + // the code here is actually incorrect, and the code in + // o2_waitForSentence correct, but somebody should check the + // disassembly for Indy and Loom. + if (_sentenceNum) { + if (_sentence[_sentenceNum - 1].freezeCount && !isScriptInUse(VAR(VAR_SENTENCE_SCRIPT))) + return; + } else if (!isScriptInUse(VAR(VAR_SENTENCE_SCRIPT))) + return; + + _scriptPointer--; + o5_breakHere(); +} + + + } // End of namespace Scumm |