[Scummvm-cvs-logs] SF.net SVN: scummvm: [28181] scummvm/trunk/engines/gob
drmccoy at users.sourceforge.net
drmccoy at users.sourceforge.net
Tue Jul 24 08:11:38 CEST 2007
Revision: 28181
http://scummvm.svn.sourceforge.net/scummvm/?rev=28181&view=rev
Author: drmccoy
Date: 2007-07-23 23:11:38 -0700 (Mon, 23 Jul 2007)
Log Message:
-----------
Fixing bug #1749688 ("GOB3: Objects Disappear")
Modified Paths:
--------------
scummvm/trunk/engines/gob/inter.h
scummvm/trunk/engines/gob/inter_v2.cpp
scummvm/trunk/engines/gob/inter_v3.cpp
scummvm/trunk/engines/gob/mult.h
scummvm/trunk/engines/gob/mult_v1.cpp
scummvm/trunk/engines/gob/mult_v2.cpp
Modified: scummvm/trunk/engines/gob/inter.h
===================================================================
--- scummvm/trunk/engines/gob/inter.h 2007-07-24 01:23:23 UTC (rev 28180)
+++ scummvm/trunk/engines/gob/inter.h 2007-07-24 06:11:38 UTC (rev 28181)
@@ -342,6 +342,7 @@
virtual void checkSwitchTable(byte **ppExec);
void o2_playMult();
+ void o2_freeMultKeys();
void o2_setRenderFlags();
void o2_multSub();
void o2_initMult();
Modified: scummvm/trunk/engines/gob/inter_v2.cpp
===================================================================
--- scummvm/trunk/engines/gob/inter_v2.cpp 2007-07-24 01:23:23 UTC (rev 28180)
+++ scummvm/trunk/engines/gob/inter_v2.cpp 2007-07-24 06:11:38 UTC (rev 28181)
@@ -134,7 +134,7 @@
/* 00 */
OPCODE(o1_loadMult),
OPCODE(o2_playMult),
- OPCODE(o1_freeMultKeys),
+ OPCODE(o2_freeMultKeys),
{NULL, ""},
/* 04 */
{NULL, ""},
@@ -826,6 +826,17 @@
_vm->_mult->playMult(VAR(57), -1, checkEscape & 0x1, 0);
}
+void Inter_v2::o2_freeMultKeys() {
+ uint16 index = load16();
+
+ if (!_vm->_mult->hasMultData(index))
+ return;
+
+ _vm->_mult->setMultData(index);
+ _vm->_mult->freeMultKeys();
+ _vm->_mult->zeroMultData(index);
+}
+
void Inter_v2::o2_setRenderFlags() {
int16 expr;
Modified: scummvm/trunk/engines/gob/inter_v3.cpp
===================================================================
--- scummvm/trunk/engines/gob/inter_v3.cpp 2007-07-24 01:23:23 UTC (rev 28180)
+++ scummvm/trunk/engines/gob/inter_v3.cpp 2007-07-24 06:11:38 UTC (rev 28181)
@@ -122,7 +122,7 @@
/* 00 */
OPCODE(o1_loadMult),
OPCODE(o2_playMult),
- OPCODE(o1_freeMultKeys),
+ OPCODE(o2_freeMultKeys),
{NULL, ""},
/* 04 */
{NULL, ""},
Modified: scummvm/trunk/engines/gob/mult.h
===================================================================
--- scummvm/trunk/engines/gob/mult.h 2007-07-24 01:23:23 UTC (rev 28180)
+++ scummvm/trunk/engines/gob/mult.h 2007-07-24 06:11:38 UTC (rev 28181)
@@ -112,7 +112,7 @@
} PACKED_STRUCT;
struct Mult_AnimKey {
- int16 frame;
+ uint16 frame;
int16 layer;
int16 posX;
int16 posY;
@@ -246,8 +246,10 @@
virtual void loadMult(int16 resId) = 0;
virtual void freeMultKeys() = 0;
- virtual void setMultData(uint16 multindex) = 0;
- virtual void multSub(uint16 multindex) = 0;
+ virtual bool hasMultData(uint16 multIndex) = 0;
+ virtual void setMultData(uint16 multIndex) = 0;
+ virtual void zeroMultData(uint16 multIndex) = 0;
+ virtual void multSub(uint16 multIndex) = 0;
virtual void animate() = 0;
Mult(GobEngine *vm);
@@ -299,8 +301,10 @@
virtual void loadMult(int16 resId);
virtual void freeMultKeys();
- virtual void setMultData(uint16 multindex);
- virtual void multSub(uint16 multindex);
+ virtual bool hasMultData(uint16 multIndex);
+ virtual void setMultData(uint16 multIndex);
+ virtual void zeroMultData(uint16 multIndex);
+ virtual void multSub(uint16 multIndex);
virtual void animate();
protected:
@@ -317,8 +321,10 @@
virtual void loadMult(int16 resId);
virtual void freeMultKeys();
- virtual void setMultData(uint16 multindex);
- virtual void multSub(uint16 multindex);
+ virtual bool hasMultData(uint16 multIndex);
+ virtual void setMultData(uint16 multIndex);
+ virtual void zeroMultData(uint16 multIndex);
+ virtual void multSub(uint16 multIndex);
virtual void animate();
protected:
Modified: scummvm/trunk/engines/gob/mult_v1.cpp
===================================================================
--- scummvm/trunk/engines/gob/mult_v1.cpp 2007-07-24 01:23:23 UTC (rev 28180)
+++ scummvm/trunk/engines/gob/mult_v1.cpp 2007-07-24 06:11:38 UTC (rev 28181)
@@ -237,14 +237,22 @@
_multData = 0;
}
-void Mult_v1::setMultData(uint16 multindex) {
+bool Mult_v1::hasMultData(uint16 multIndex) {
error("Switching mults not supported for Gob1");
}
-void Mult_v1::multSub(uint16 multindex) {
+void Mult_v1::setMultData(uint16 multIndex) {
error("Switching mults not supported for Gob1");
}
+void Mult_v1::zeroMultData(uint16 multIndex) {
+ error("Switching mults not supported for Gob1");
+}
+
+void Mult_v1::multSub(uint16 multIndex) {
+ error("Switching mults not supported for Gob1");
+}
+
void Mult_v1::playMultInit() {
_doPalSubst = false;
_palFadingRed = 0;
Modified: scummvm/trunk/engines/gob/mult_v2.cpp
===================================================================
--- scummvm/trunk/engines/gob/mult_v2.cpp 2007-07-24 01:23:23 UTC (rev 28180)
+++ scummvm/trunk/engines/gob/mult_v2.cpp 2007-07-24 06:11:38 UTC (rev 28181)
@@ -346,28 +346,42 @@
_multData = 0;
}
-void Mult_v2::setMultData(uint16 multindex) {
- if (multindex > 7)
+bool Mult_v2::hasMultData(uint16 multIndex) {
+ if (multIndex > 7)
error("Multindex out of range");
- debugC(4, kDebugGameFlow, "Switching to mult %d", multindex);
- _multData = _multDatas[multindex];
+ return _multDatas[multIndex] != 0;
}
-void Mult_v2::multSub(uint16 multindex) {
+void Mult_v2::setMultData(uint16 multIndex) {
+ if (multIndex > 7)
+ error("Multindex out of range");
+
+ debugC(4, kDebugGameFlow, "Switching to mult %d", multIndex);
+ _multData = _multDatas[multIndex];
+}
+
+void Mult_v2::zeroMultData(uint16 multIndex) {
+ if (multIndex > 7)
+ error("Multindex out of range");
+
+ _multDatas[multIndex] = 0;
+}
+
+void Mult_v2::multSub(uint16 multIndex) {
uint16 flags;
int16 expr;
int16 index;
int16 startFrame, stopFrame, firstFrame;
- flags = multindex;
- multindex = (multindex >> 12) & 0xF;
+ flags = multIndex;
+ multIndex = (multIndex >> 12) & 0xF;
- if (multindex > 7)
+ if (multIndex > 7)
error("Multindex out of range");
- debugC(4, kDebugGameFlow, "Sub mult %d", multindex);
- _multData = _multDatas[multindex];
+ debugC(4, kDebugGameFlow, "Sub mult %d", multIndex);
+ _multData = _multDatas[multIndex];
if (!_multData) {
_vm->_parse->parseValExpr();
@@ -1074,13 +1088,19 @@
return;
for (int i = 0; i < 4; i++) {
+ int obj = _multData->animObjs[index][i];
+
if (_multData->animObjs[index][i] != -1) {
int keyIndex = _multData->animKeysIndices[index][i];
int count = _multData->animKeysCount[i];
for (int j = keyIndex; j < count; j++) {
+
+ if ((obj == -1) || (obj == 1024))
+ continue;
+
Mult_AnimKey &key = _multData->animKeys[i][j];
- Mult_Object &animObj = _objects[_multData->animObjs[index][i]];
+ Mult_Object &animObj = _objects[obj];
Mult_AnimData &animData = *(animObj.pAnimData);
if (key.frame > frame)
@@ -1122,7 +1142,7 @@
}
}
- if (_multData->animObjs[index][i] != -1) {
+ if (obj != -1) {
int keyIndex = _multData->imdKeysIndices[index][i];
int count = _multData->imdKeysCount[i];
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list