diff options
author | Kari Salminen | 2008-06-26 17:29:21 +0000 |
---|---|---|
committer | Kari Salminen | 2008-06-26 17:29:21 +0000 |
commit | 971f27beb27cd853df7f20dbd21dc92e88b3f697 (patch) | |
tree | 17782dab2dfc723e094bf9f35e5c05524a2e0b8b /engines | |
parent | fafda89d0c53a2ac9b0521c1e4549388f14ccea0 (diff) | |
download | scummvm-rg350-971f27beb27cd853df7f20dbd21dc92e88b3f697.tar.gz scummvm-rg350-971f27beb27cd853df7f20dbd21dc92e88b3f697.tar.bz2 scummvm-rg350-971f27beb27cd853df7f20dbd21dc92e88b3f697.zip |
Fixed opcode:
- 0x83: o2_isSeqRunning (Should it be named o2_isSeqNotRunning?)
-- Added previously missing test part
-- Negated the result (It was backwards before!)
svn-id: r32804
Diffstat (limited to 'engines')
-rw-r--r-- | engines/cine/script_os.cpp | 4 | ||||
-rw-r--r-- | engines/cine/various.cpp | 9 | ||||
-rw-r--r-- | engines/cine/various.h | 2 |
3 files changed, 10 insertions, 5 deletions
diff --git a/engines/cine/script_os.cpp b/engines/cine/script_os.cpp index aeb5302c22..78b6c55564 100644 --- a/engines/cine/script_os.cpp +++ b/engines/cine/script_os.cpp @@ -462,11 +462,13 @@ int FWScript::o2_modifySeqListElement() { return 0; } +/*! \todo Check whether this opcode's name is backwards (i.e. should it be o2_isSeqNotRunning?) + */ int FWScript::o2_isSeqRunning() { byte a = getNextByte(); byte b = getNextByte(); - debugC(5, kCineDebugScript, "Line: %d: OP83(%d,%d) -> TODO", _line, a, b); + debugC(5, kCineDebugScript, "Line: %d: o2_isSeqRunning(%d,%d)", _line, a, b); if (isSeqRunning(a, 0, b)) { _compare = 1; diff --git a/engines/cine/various.cpp b/engines/cine/various.cpp index 640ca8a169..20d9edc5de 100644 --- a/engines/cine/various.cpp +++ b/engines/cine/various.cpp @@ -1586,16 +1586,19 @@ void removeSeq(uint16 param1, uint16 param2, uint16 param3) { } } -uint16 isSeqRunning(uint16 param1, uint16 param2, uint16 param3) { +bool isSeqRunning(uint16 param1, uint16 param2, uint16 param3) { Common::List<SeqListElement>::iterator it; for (it = seqList.begin(); it != seqList.end(); ++it) { if (it->objIdx == param1 && it->var4 == param2 && it->varE == param3) { - return 1; + // Just to be on the safe side there's a restriction of the + // addition's result to 16-bit arithmetic here like in the + // original. It's possible that it's not strictly needed. + return ((it->var14 + it->var16) & 0xFFFF) == 0; } } - return 0; + return true; } void addSeqListElement(uint16 objIdx, int16 param1, int16 param2, int16 frame, int16 param4, int16 param5, int16 param6, int16 param7, int16 param8) { diff --git a/engines/cine/various.h b/engines/cine/various.h index c17138e487..d05447fb40 100644 --- a/engines/cine/various.h +++ b/engines/cine/various.h @@ -137,7 +137,7 @@ void addMessage(byte param1, int16 param2, int16 param3, int16 param4, int16 par void removeMessages(); void removeSeq(uint16 param1, uint16 param2, uint16 param3); -uint16 isSeqRunning(uint16 param1, uint16 param2, uint16 param3); +bool isSeqRunning(uint16 param1, uint16 param2, uint16 param3); void addSeqListElement(uint16 objIdx, int16 param1, int16 param2, int16 frame, int16 param4, int16 param5, int16 param6, int16 param7, int16 param8); void modifySeqListElement(uint16 objIdx, int16 var4Test, int16 param1, int16 param2, int16 param3, int16 param4); void processSeqList(void); |