[Scummvm-cvs-logs] SF.net SVN: scummvm: [23012] scummvm/trunk/engines/gob

drmccoy at users.sourceforge.net drmccoy at users.sourceforge.net
Sat Jun 10 16:38:08 CEST 2006


Revision: 23012
Author:   drmccoy
Date:     2006-06-10 07:37:48 -0700 (Sat, 10 Jun 2006)
ViewCVS:  http://svn.sourceforge.net/scummvm/?rev=23012&view=rev

Log Message:
-----------
More stub-filling + small clean-up

Modified Paths:
--------------
    scummvm/trunk/engines/gob/draw.cpp
    scummvm/trunk/engines/gob/draw.h
    scummvm/trunk/engines/gob/draw_v1.cpp
    scummvm/trunk/engines/gob/draw_v2.cpp
    scummvm/trunk/engines/gob/goblin.cpp
    scummvm/trunk/engines/gob/inter_v2.cpp
    scummvm/trunk/engines/gob/map.h
    scummvm/trunk/engines/gob/map_v2.cpp
    scummvm/trunk/engines/gob/mult.cpp
    scummvm/trunk/engines/gob/mult.h
    scummvm/trunk/engines/gob/mult_v1.cpp
    scummvm/trunk/engines/gob/mult_v2.cpp
    scummvm/trunk/engines/gob/scenery.cpp
Modified: scummvm/trunk/engines/gob/draw.cpp
===================================================================
--- scummvm/trunk/engines/gob/draw.cpp	2006-06-10 13:20:29 UTC (rev 23011)
+++ scummvm/trunk/engines/gob/draw.cpp	2006-06-10 14:37:48 UTC (rev 23012)
@@ -478,56 +478,6 @@
 	}
 }
 
-void Draw::initBigSprite(int16 index, int16 width, int16 height, int16 flags) {
-	int i;
-	int16 partsheight;
-	int16 remainheight;
-	int8 fragment;
-
-	if (flags != 0)
-		flags = 2;
-
-	// .-- sub_CBD0 ---
-
-	for (i = 0; i < 3; i++)
-		_bigSpritesParts[index][i] = 0;
-	_spritesHeights[index] = height;
-
-	if (_vm->_video->getRectSize(width, height, flags, _vm->_global->_videoMode) > 65000) {
-		_spritesHeights[index] = height & 0xFFFE;
-		while (_vm->_video->getRectSize(width, _spritesHeights[index], flags,
-					_vm->_global->_videoMode) > 65000) {
-			_spritesHeights[index] -= 2;
-		}
-
-		partsheight = _spritesHeights[index];
-		_spritesArray[index] =
-			_vm->_video->initSurfDesc(_vm->_global->_videoMode, width, partsheight, flags);
-		fragment = 0;
-		while (partsheight < height) {
-			remainheight = height - partsheight;
-			if (_spritesHeights[index] >= remainheight) {
-				_bigSpritesParts[index][fragment] =
-					_vm->_video->initSurfDesc(_vm->_global->_videoMode, width,
-							remainheight, flags);
-				partsheight = height;
-			} else {
-				_bigSpritesParts[index][fragment] =
-					_vm->_video->initSurfDesc(_vm->_global->_videoMode, width,
-							_spritesHeights[index], flags);
-				partsheight += _spritesHeights[index];
-			}
-			_vm->_video->clearSurf(_bigSpritesParts[index][fragment]);
-			fragment++;
-		}
-	} else
-		_spritesArray[index] =
-			_vm->_video->initSurfDesc(_vm->_global->_videoMode, width, height, flags);
-
-	_vm->_video->clearSurf(_spritesArray[index]);
-	// '------
-}
-
 void Draw::fillRect(int16 index, int16 left, int16 top, int16 right,
 		int16 bottom, int16 color) {
 	int i;

Modified: scummvm/trunk/engines/gob/draw.h
===================================================================
--- scummvm/trunk/engines/gob/draw.h	2006-06-10 13:20:29 UTC (rev 23011)
+++ scummvm/trunk/engines/gob/draw.h	2006-06-10 14:37:48 UTC (rev 23012)
@@ -119,7 +119,6 @@
 
 	void freeSprite(int16 index);
 	void adjustCoords(char adjust, int16 *coord1, int16 *coord2);
-	void initBigSprite(int16 index, int16 width, int16 height, int16 flags);
 	void fillRect(int16 index, int16 left, int16 top, int16 right,
 		int16 bottom, int16 color);
 	void drawSprite(int16 source, int16 dest, int16 left,
@@ -133,6 +132,7 @@
 	void printTextCentered(int16 arg_0, int16 left, int16 top, int16 right,
 			int16 bottom, char *str, int16 fontIndex, int16 color);
 
+	virtual void initBigSprite(int16 index, int16 width, int16 height, int16 flags) = 0;
 	virtual void printText(void) = 0;
 	virtual void spriteOperation(int16 operation) = 0;
 
@@ -145,6 +145,7 @@
 
 class Draw_v1 : public Draw {
 public:
+	virtual void initBigSprite(int16 index, int16 width, int16 height, int16 flags);
 	virtual void printText(void);
 	virtual void spriteOperation(int16 operation);
 
@@ -154,6 +155,7 @@
 
 class Draw_v2 : public Draw_v1 {
 public:
+	virtual void initBigSprite(int16 index, int16 width, int16 height, int16 flags);
 	virtual void printText(void);
 	virtual void spriteOperation(int16 operation);
 

Modified: scummvm/trunk/engines/gob/draw_v1.cpp
===================================================================
--- scummvm/trunk/engines/gob/draw_v1.cpp	2006-06-10 13:20:29 UTC (rev 23011)
+++ scummvm/trunk/engines/gob/draw_v1.cpp	2006-06-10 14:37:48 UTC (rev 23012)
@@ -38,6 +38,11 @@
 Draw_v1::Draw_v1(GobEngine *vm) : Draw(vm) {
 }
 
+void Draw_v1::initBigSprite(int16 index, int16 width, int16 height, int16 flags) {
+	_vm->_draw->_spritesArray[index] =
+			_vm->_video->initSurfDesc(_vm->_global->_videoMode, width, height, flags);
+}
+
 void Draw_v1::printText(void) {
 	int16 savedFlags;
 	int16 ldestSpriteX;

Modified: scummvm/trunk/engines/gob/draw_v2.cpp
===================================================================
--- scummvm/trunk/engines/gob/draw_v2.cpp	2006-06-10 13:20:29 UTC (rev 23011)
+++ scummvm/trunk/engines/gob/draw_v2.cpp	2006-06-10 14:37:48 UTC (rev 23012)
@@ -38,6 +38,56 @@
 Draw_v2::Draw_v2(GobEngine *vm) : Draw_v1(vm) {
 }
 
+void Draw_v2::initBigSprite(int16 index, int16 width, int16 height, int16 flags) {
+	int i;
+	int16 partsheight;
+	int16 remainheight;
+	int8 fragment;
+
+	if (flags != 0)
+		flags = 2;
+
+	// .-- sub_CBD0 ---
+
+	for (i = 0; i < 3; i++)
+		_bigSpritesParts[index][i] = 0;
+	_spritesHeights[index] = height;
+
+	if (_vm->_video->getRectSize(width, height, flags, _vm->_global->_videoMode) > 65000) {
+		_spritesHeights[index] = height & 0xFFFE;
+		while (_vm->_video->getRectSize(width, _spritesHeights[index], flags,
+					_vm->_global->_videoMode) > 65000) {
+			_spritesHeights[index] -= 2;
+		}
+
+		partsheight = _spritesHeights[index];
+		_spritesArray[index] =
+			_vm->_video->initSurfDesc(_vm->_global->_videoMode, width, partsheight, flags);
+		fragment = 0;
+		while (partsheight < height) {
+			remainheight = height - partsheight;
+			if (_spritesHeights[index] >= remainheight) {
+				_bigSpritesParts[index][fragment] =
+					_vm->_video->initSurfDesc(_vm->_global->_videoMode, width,
+							remainheight, flags);
+				partsheight = height;
+			} else {
+				_bigSpritesParts[index][fragment] =
+					_vm->_video->initSurfDesc(_vm->_global->_videoMode, width,
+							_spritesHeights[index], flags);
+				partsheight += _spritesHeights[index];
+			}
+			_vm->_video->clearSurf(_bigSpritesParts[index][fragment]);
+			fragment++;
+		}
+	} else
+		_spritesArray[index] =
+			_vm->_video->initSurfDesc(_vm->_global->_videoMode, width, height, flags);
+
+	_vm->_video->clearSurf(_spritesArray[index]);
+	// '------
+}
+
 void Draw_v2::printText(void) {
 	int i;
 	char *dataPtr;

Modified: scummvm/trunk/engines/gob/goblin.cpp
===================================================================
--- scummvm/trunk/engines/gob/goblin.cpp	2006-06-10 13:20:29 UTC (rev 23011)
+++ scummvm/trunk/engines/gob/goblin.cpp	2006-06-10 14:37:48 UTC (rev 23012)
@@ -1816,7 +1816,7 @@
 	si = anim0->state;
 	di = anim1->state;
 
-	if (anim0->someFlag == 0) {
+	if (anim0->isBusy == 0) {
 		if ((_word_2F9BC == 0) && (anim0->isStatic == 0)) {
 			if ((VAR(_dword_2F9B6) == 0) && (si == 28)) {
 				si = _vm->_util->getRandom(3) + 24;
@@ -1828,7 +1828,7 @@
 		if ((si == 8) || (si == 9) || (si == 29))
 			anim0->curLookDir = 6;
 	}
-	if (anim1->someFlag == 0) {
+	if (anim1->isBusy == 0) {
 		if ((_word_2F9BA == 0) && (anim1->isStatic == 0)) {
 			if ((VAR(_dword_2F9B2) == 0) && (di == 28)) {
 				di = _vm->_util->getRandom(3) + 24;
@@ -1841,10 +1841,10 @@
 			anim1->curLookDir = 6;
 	}
 
-	if ((anim0->someFlag == 1) && (anim0->isStatic == 0) &&
+	if ((anim0->isBusy == 1) && (anim0->isStatic == 0) &&
 			((anim0->state == 28) || (anim0->state == 29)))
 		anim0->curLookDir = 0;
-	if ((anim1->someFlag == 1) && (anim1->isStatic == 0) &&
+	if ((anim1->isBusy == 1) && (anim1->isStatic == 0) &&
 			((anim1->state == 28) || (anim1->state == 29)))
 		anim1->curLookDir = 0;
 
@@ -1853,7 +1853,7 @@
 			anim0->curLookDir = 4;
 		else if (anim0->layer == 45)
 			anim0->curLookDir = 0;
-		if (anim0->someFlag == 0)
+		if (anim0->isBusy == 0)
 			anim0->curLookDir = 6;
 	}
 	if (VAR(19) != ((uint32) -1)) {
@@ -1861,7 +1861,7 @@
 			anim1->curLookDir = 4;
 		else if (anim1->layer == 49)
 			anim1->curLookDir = 0;
-		if (anim1->someFlag == 0)
+		if (anim1->isBusy == 0)
 			anim1->curLookDir = 6;
 	}
 

Modified: scummvm/trunk/engines/gob/inter_v2.cpp
===================================================================
--- scummvm/trunk/engines/gob/inter_v2.cpp	2006-06-10 13:20:29 UTC (rev 23011)
+++ scummvm/trunk/engines/gob/inter_v2.cpp	2006-06-10 14:37:48 UTC (rev 23012)
@@ -892,6 +892,7 @@
 					*dataPtr ^= 0x80;
 				_vm->_game->_soundTypes[slot] = 4;
 				_vm->_game->_soundSamples[slot] = soundDesc;
+				_vm->_game->_soundFromExt[slot] = 1;
 			} else { // loc_99BC
 				extData = _vm->_game->loadExtData(id, 0, 0);
 				if (extData == 0)
@@ -902,6 +903,7 @@
 				else
 					// TODO: This is very ugly
 					_vm->_game->_soundSamples[slot] = (Snd::SoundDesc *) extData;
+				_vm->_game->_soundFromExt[slot] = 1;
 			}
 		} else { // loc_9A13
 			extData = _vm->_game->loadTotResource(id);
@@ -984,7 +986,7 @@
 	obj->gobDestY = destY;
 	objAnim->field_13 = destX;
 	objAnim->field_14 = destY;
-	if (objAnim->someFlag != 0) {
+	if (objAnim->isBusy != 0) {
 		if ((destX == -1) && (destY == -1)) {
 			mouseX = _vm->_global->_inter_mouseX;
 			mouseY = _vm->_global->_inter_mouseY;
@@ -1101,6 +1103,7 @@
 	int16 objIndex; // si
 	int16 i;
 	int16 animation;
+	int16 layer;
 	char *lmultData;
 	Mult::Mult_Object *obj;
 	Mult::Mult_AnimData *objAnim;
@@ -1135,15 +1138,17 @@
 			obj->gobDestY = val;
 			obj->goblinY = val;
 			*obj->pPosX *= _vm->_map->_tilesWidth;
+			layer = objAnim->layer;
+			animation = obj->goblinStates[layer][0].animation;
 			objAnim->field_15 = objAnim->unknown;
 			objAnim->nextState = -1;
 			objAnim->field_F = -1;
 			objAnim->pathExistence = 0;
-			objAnim->state = objAnim->layer;
+			objAnim->isBusy = 0;
+			objAnim->state = layer;
 			objAnim->layer = obj->goblinStates[objAnim->state][0].layer;
-			objAnim->animation = obj->goblinStates[objAnim->state][0].animation;
-			animation = objAnim->animation;
-			_vm->_scenery->updateAnim(objAnim->state, 0, 0, 0, *obj->pPosX, *obj->pPosY, 0);
+			objAnim->animation = animation;
+			_vm->_scenery->updateAnim(layer, 0, animation, 0, *obj->pPosX, *obj->pPosY, 0);
 			if (!_vm->_map->_bigTiles) {
 				*obj->pPosY = (obj->goblinY + 1) * _vm->_map->_tilesHeight
 					- (_vm->_scenery->_animBottom - _vm->_scenery->_animTop);
@@ -1159,16 +1164,18 @@
 			obj = &_vm->_mult->_objects[objIndex];
 			objAnim = obj->pAnimData;
 
+			layer = objAnim->layer;
+			animation = obj->goblinStates[layer][0].animation;
 			objAnim->nextState = -1;
 			objAnim->field_F = -1;
-			objAnim->state = objAnim->layer;
+			objAnim->state = layer;
 			objAnim->layer = obj->goblinStates[objAnim->state][0].layer;
-			objAnim->animation = obj->goblinStates[objAnim->state][0].animation;
+			objAnim->animation = animation;
 			if ((*obj->pPosX == 1000) && (*obj->pPosY == 1000)) {
 				*obj->pPosX = _vm->_scenery->_animations[objAnim->animation].layers[objAnim->state]->posX;
 				*obj->pPosY = _vm->_scenery->_animations[objAnim->animation].layers[objAnim->state]->posY;
 			}
-			_vm->_scenery->updateAnim(objAnim->state, 0, objAnim->animation, 0, *obj->pPosX, *obj->pPosY, 0);
+			_vm->_scenery->updateAnim(layer, 0, animation, 0, *obj->pPosX, *obj->pPosY, 0);
 		}
 	}
 }
@@ -1599,8 +1606,8 @@
 	if (_vm->_mult->_objects == 0) {
 		_vm->_mult->_renderData2 = new Mult::Mult_Object*[_vm->_mult->_objCount];
 		memset(_vm->_mult->_renderData2, 0, _vm->_mult->_objCount * sizeof(Mult::Mult_Object*));
-		_vm->_mult->_renderData = new int16[_vm->_mult->_objCount * 9];
-		memset(_vm->_mult->_renderData, 0, _vm->_mult->_objCount * 9 * sizeof(int16));
+/*		_vm->_mult->_renderData = new int16[_vm->_mult->_objCount * 9];
+		memset(_vm->_mult->_renderData, 0, _vm->_mult->_objCount * 9 * sizeof(int16));*/
 		if (_vm->_inter->_terminate)
 			return;
 		_vm->_mult->_orderArray = new int8[_vm->_mult->_objCount];
@@ -1630,7 +1637,7 @@
 	if (_vm->_anim->_animSurf != 0 &&
 	    (oldAnimWidth != _vm->_anim->_areaWidth
 		|| oldAnimHeight != _vm->_anim->_areaHeight)) {
-		if (_vm->_anim->_animSurf->flag & 0x80)
+		if (_vm->_anim->_animSurf->vidMode & 0x80)
 			_vm->_draw->freeSprite(0x16);
 		else
 			delete _vm->_anim->_animSurf;

Modified: scummvm/trunk/engines/gob/map.h
===================================================================
--- scummvm/trunk/engines/gob/map.h	2006-06-10 13:20:29 UTC (rev 23011)
+++ scummvm/trunk/engines/gob/map.h	2006-06-10 14:37:48 UTC (rev 23012)
@@ -152,7 +152,7 @@
 	}
 
 	Map_v2(GobEngine *vm);
-	virtual ~Map_v2() {};
+	virtual ~Map_v2();
 };
 
 }				// End of namespace Gob

Modified: scummvm/trunk/engines/gob/map_v2.cpp
===================================================================
--- scummvm/trunk/engines/gob/map_v2.cpp	2006-06-10 13:20:29 UTC (rev 23011)
+++ scummvm/trunk/engines/gob/map_v2.cpp	2006-06-10 14:37:48 UTC (rev 23012)
@@ -40,6 +40,10 @@
 Map_v2::Map_v2(GobEngine *vm) : Map_v1(vm) {
 }
 
+Map_v2::~Map_v2() {
+	_passMap = 0;
+}
+
 void Map_v2::loadMapObjects(char *avjFile) {
 	int i;
 	int j;

Modified: scummvm/trunk/engines/gob/mult.cpp
===================================================================
--- scummvm/trunk/engines/gob/mult.cpp	2006-06-10 13:20:29 UTC (rev 23011)
+++ scummvm/trunk/engines/gob/mult.cpp	2006-06-10 14:37:48 UTC (rev 23012)
@@ -139,20 +139,6 @@
 	WRITE_VAR_OFFSET(_vm->_parse->parseVarIndex(), _vm->_scenery->_toRedrawBottom);
 }
 
-void Mult::freeMult(void) {
-	if (_vm->_anim->_animSurf != 0)
-		_vm->_video->freeSurfDesc(_vm->_anim->_animSurf);
-
-	delete[] _objects;
-	delete[] _renderData;
-	delete[] _orderArray;
-
-	_objects = 0;
-	_renderData = 0;
-	_orderArray = 0;
-	_vm->_anim->_animSurf = 0;
-}
-
 void Mult::freeAll(void) {
 	int16 i;
 

Modified: scummvm/trunk/engines/gob/mult.h
===================================================================
--- scummvm/trunk/engines/gob/mult.h	2006-06-10 13:20:29 UTC (rev 23011)
+++ scummvm/trunk/engines/gob/mult.h	2006-06-10 14:37:48 UTC (rev 23012)
@@ -46,20 +46,20 @@
 		int8 newAnimation;
 		byte intersected;
 		int8 newCycle;
-		int8 somethingAnimation; // New in GOB2
-		int8 somethingLayer;     // New in GOB2
-		int8 somethingFrame;     // New in GOB2
-		int8 someFlag;           // New in GOB2
 		int8 state;              // New in GOB2
 		int8 nextState;          // New in GOB2
 		int8 field_F;            // New in GOB2
 		int8 curLookDir;         // New in GOB2
+		int8 isBusy;             // New in GOB2
 		int8 pathExistence;      // New in GOB2
 		int8 field_13;           // New in GOB2
 		int8 field_14;           // New in GOB2
 		int8 field_15;           // New in GOB2
 		int8 field_16;           // New in GOB2
 		int8 field_17;           // New in GOB2
+		int8 somethingAnimation; // New in GOB2
+		int8 somethingLayer;     // New in GOB2
+		int8 somethingFrame;     // New in GOB2
 	} GCC_PACK;
 
 	struct Mult_GobState {
@@ -144,6 +144,18 @@
 		int16 resId;
 		int16 soundIndex;
 	} GCC_PACK;
+
+	struct Mult_SomeKey {
+		int16 frame;
+		int16 field_2;
+		int16 field_4;
+		int16 field_6;
+		int16 field_8;
+		int16 field_A;
+		int16 field_C;
+		int16 field_E;
+	} GCC_PACK;
+
 #pragma END_PACK_STRUCTS
 
 	// Globals
@@ -219,7 +231,6 @@
 	void zeroMultData(void);
 	void checkFreeMult(void);
 	void interGetObjAnimSize(void);
-	void freeMult(void);
 	void freeAll(void);
 	void initAll(void);
 
@@ -231,6 +242,7 @@
 	virtual void animate(void) = 0;
 	virtual void playSound(Snd::SoundDesc * soundDesc, int16 repCount,
 				  int16 freq, int16 channel) = 0;
+	virtual void freeMult(void) = 0;
 	virtual void freeMultKeys(void) = 0;
 
 	Mult(GobEngine *vm);
@@ -262,6 +274,7 @@
 	virtual void animate(void);
 	virtual void playSound(Snd::SoundDesc * soundDesc, int16 repCount,
 				  int16 freq, int16 channel);
+	virtual void freeMult(void);
 	virtual void freeMultKeys(void);
 
 protected:
@@ -318,9 +331,9 @@
 		int16 field_15F[4][4];
 		int16 field_17F[4][4];
 
-		int16 somepointer05size[4];
-		char *somepointer05[4]; // Seems to be similar to staticKeys/animKeys
-		int16 somepointer05indices[4];
+		int16 someKeysCount[4];
+		Mult_SomeKey *someKeys[4];
+		int16 someKeysIndices[4];
 		char *somepointer09; // ?
 		char *somepointer10; // ?
 		char *execPtr;
@@ -344,6 +357,7 @@
 	virtual void animate(void);
 	virtual void playSound(Snd::SoundDesc * soundDesc, int16 repCount,
 				  int16 freq, int16 channel);
+	virtual void freeMult(void);
 	virtual void freeMultKeys(void);
 
 protected:

Modified: scummvm/trunk/engines/gob/mult_v1.cpp
===================================================================
--- scummvm/trunk/engines/gob/mult_v1.cpp	2006-06-10 13:20:29 UTC (rev 23011)
+++ scummvm/trunk/engines/gob/mult_v1.cpp	2006-06-10 14:37:48 UTC (rev 23012)
@@ -912,6 +912,20 @@
 	}
 }
 
+void Mult_v1::freeMult(void) {
+	if (_vm->_anim->_animSurf != 0)
+		_vm->_video->freeSurfDesc(_vm->_anim->_animSurf);
+
+	delete[] _objects;
+	delete[] _renderData;
+	delete[] _orderArray;
+
+	_objects = 0;
+	_renderData = 0;
+	_orderArray = 0;
+	_vm->_anim->_animSurf = 0;
+}
+
 void Mult_v1::playSound(Snd::SoundDesc * soundDesc, int16 repCount, int16 freq,
 	    int16 channel) {
 	_vm->_snd->playSample(soundDesc, repCount, freq);

Modified: scummvm/trunk/engines/gob/mult_v2.cpp
===================================================================
--- scummvm/trunk/engines/gob/mult_v2.cpp	2006-06-10 13:20:29 UTC (rev 23011)
+++ scummvm/trunk/engines/gob/mult_v2.cpp	2006-06-10 14:37:48 UTC (rev 23012)
@@ -42,6 +42,7 @@
 Mult_v2::Mult_v2(GobEngine *vm) : Mult_v1(vm) {
 	int i;
 
+	_renderData2 = 0;
 	_multData2 = 0;
 	for (i = 0; i < 8; i++) _multDatas[i] = 0;
 }
@@ -147,9 +148,9 @@
 	}
 
 	for (i = 0; i < 4; i++) {
-		_multData2->somepointer05size[i] = 0;
-		_multData2->somepointer05[i] = 0;
-		_multData2->somepointer05indices[i] = -1;
+		_multData2->someKeysCount[i] = 0;
+		_multData2->someKeys[i] = 0;
+		_multData2->someKeysIndices[i] = -1;
 
 		for (j = 0; j < 4; j++) {
 			_multData2->field_15F[i][j] = 0;
@@ -284,11 +285,18 @@
 				_vm->_global->_inter_execPtr += size * 14;
 				_dataPtr += 2;
 				for (i = 0; i < 4; i++) {
-					_multData2->somepointer05size[i] = (int16)READ_LE_UINT16(_dataPtr);
+					_multData2->someKeysCount[i] = (int16)READ_LE_UINT16(_dataPtr);
 					_dataPtr += 2;
-					_multData2->somepointer05[i] = new char[_multData2->somepointer05size[i] * 16];
-					for (j = 0; j < _multData2->somepointer05size[i]; j++) {
-						memcpy(_multData2->somepointer05[i]+j*16, _dataPtr, 16);
+					_multData2->someKeys[i] = new Mult_SomeKey[_multData2->someKeysCount[i]];
+					for (j = 0; j < _multData2->someKeysCount[i]; j++) {
+						_multData2->someKeys[i][j].frame = (int16)READ_LE_UINT16(_dataPtr);
+						_multData2->someKeys[i][j].field_2 = (int16)READ_LE_UINT16(_dataPtr + 2);
+						_multData2->someKeys[i][j].field_4 = (int16)READ_LE_UINT16(_dataPtr + 4);
+						_multData2->someKeys[i][j].field_6 = (int16)READ_LE_UINT16(_dataPtr + 6);
+						_multData2->someKeys[i][j].field_8 = (int16)READ_LE_UINT16(_dataPtr + 8);
+						_multData2->someKeys[i][j].field_A = (int16)READ_LE_UINT16(_dataPtr + 10);
+						_multData2->someKeys[i][j].field_C = (int16)READ_LE_UINT16(_dataPtr + 12);
+						_multData2->someKeys[i][j].field_E = (int16)READ_LE_UINT16(_dataPtr + 14);
 						_dataPtr += 16;
 					}
 				}
@@ -311,9 +319,9 @@
 	uint16 flags;
 	int16 expr;
 	int16 textFrame;
+	int16 index; // di
 	int i;
 	int j;
-	int16 di;
 
 	flags = multindex;
 	multindex = (multindex >> 12) & 0xF;
@@ -333,13 +341,13 @@
 	}
 
 	if (flags & 0x200)
-		di = 3;
+		index = 3;
 	else if (flags & 0x100)
-		di = 2;
+		index = 2;
 	else if (flags & 0x80)
-		di = 1;
+		index = 1;
 	else
-		di = 0;
+		index = 0;
 
 	if (flags & 0x400) {
 		flags = 0x400;
@@ -349,64 +357,78 @@
 		flags &= 0x7F;
 	}
 
-	_multData2->field_124[di][0] = flags;
+	_multData2->field_124[index][0] = flags;
 	for (i = 1; i < 4; i++) {
-		_multData2->field_124[di][i] = _vm->_parse->parseValExpr();
+		_multData2->field_124[index][i] = _vm->_parse->parseValExpr();
 	}
 	expr = _vm->_parse->parseValExpr();
-	_multData2->animKeysIndices1[di] = expr;
-	_multData2->animKeysIndices2[di] = expr;
+	_multData2->animKeysIndices1[index] = expr;
+	_multData2->animKeysIndices2[index] = expr;
 	
-	WRITE_VAR(18 + di, expr);
-	if (expr == -1) { // loc_5D0E
+	WRITE_VAR(18 + index, expr);
+	if (expr == -1) {
 		if (_objects)
 			for (i = 0; i < 4; i++)
-				if ((_multData2->field_124[di][i] != -1) && (_multData2->field_124[di][i] != 1024))
-					_objects[_multData2->field_124[di][i]].pAnimData->animType =
-						_objects[_multData2->field_124[di][i]].pAnimData->field_17;
-	} else { // loc_5DDC
+				if ((_multData2->field_124[index][i] != -1) && (_multData2->field_124[index][i] != 1024))
+					_objects[_multData2->field_124[index][i]].pAnimData->animType =
+						_objects[_multData2->field_124[index][i]].pAnimData->field_17;
+	} else {
 		if (_multData2->field_156 == 1) {
-			_multData2->field_157[di] = 32000;
+			_multData2->field_157[index] = 32000;
 			for (i = 0; i < _multData2->textKeysCount; i++) {
 				textFrame = _multData2->textKeys[i].frame;
-				if ((textFrame > _multData2->animKeysIndices2[di]) &&
-						(textFrame < _multData2->field_157[di])) {
-					_multData2->field_157[di] = textFrame;
+				if ((textFrame > _multData2->animKeysIndices2[index]) &&
+						(textFrame < _multData2->field_157[index])) {
+					_multData2->field_157[index] = textFrame;
 				}
 			}
 		} else {
-			_multData2->field_157[di] = 0;
+			_multData2->field_157[index] = 0;
 			for (i = 0; i < _multData2->textKeysCount; i++) {
 				textFrame = _multData2->textKeys[i].frame;
-				if ((textFrame < _multData2->animKeysIndices2[di]) &&
-						(textFrame > _multData2->field_157[di])) {
-					_multData2->field_157[di] = textFrame;
+				if ((textFrame < _multData2->animKeysIndices2[index]) &&
+						(textFrame > _multData2->field_157[index])) {
+					_multData2->field_157[index] = textFrame;
 				}
 			}
 		}
 		if (_objects) {
 			for (i = 0; i < 4; i++) {
-				if ((_multData2->field_124[di][i] != -1) && (_multData2->field_124[di][i] != 1024))
-					_objects[_multData2->field_124[di][i]].pAnimData->field_17 =
-						_objects[_multData2->field_124[di][i]].pAnimData->animType;
+				if ((_multData2->field_124[index][i] != -1) && (_multData2->field_124[index][i] != 1024))
+					_objects[_multData2->field_124[index][i]].pAnimData->field_17 =
+						_objects[_multData2->field_124[index][i]].pAnimData->animType;
 			}
 		}
-		// loc_5FCF
-		for (i = 0; i < 4; i++ /* var_C += 2, var_E += 4*/) {
-			_multData2->field_15F[di][i] = 0;
+
+		for (i = 0; i < 4; i++) {
+			_multData2->field_15F[index][i] = 0;
 			for (j = 0; j < _multData2->animKeysCount[i]; j++) {
-				if (_multData2->animKeys[i][j].frame >= _multData2->animKeysIndices2[di])
-					_multData2->field_15F[di][i] = j;
+				if (_multData2->animKeys[i][j].frame >= _multData2->animKeysIndices2[index])
+					_multData2->field_15F[index][i] = j;
 			}
 		}
+
 		if (_multData2->field_156 == -1) { // loc_60CF
-			warning("Mult_v2::multSub(), somepointer05 and somepointer05indices");
+			warning("Mult_v2::multSub(), someKeys and someKeysIndices");
 		}
-		// loc_6187
-		warning("Mult_v2::multSub(), somepointer05");
+
+		for (i = 0; i < 4; i++) {
+			_multData2->field_17F[index][i] = 0;
+			for (j = 0; j < _multData2->someKeysCount[i]; j++) {
+				if (_multData2->field_156 == 1) {
+					if (_multData2->someKeys[i][j].frame >= _multData2->animKeysIndices2[index]) {
+						_multData2->field_17F[index][i] = j;
+						break;
+					}
+				} else {
+					if (_multData2->someKeys[i][j].frame >= _multData2->field_157[index]) {
+						_multData2->field_17F[index][i] = j;
+						break;
+					}
+				}
+			}
+		}
 	}
-
-	warning("GOB2 Stub! Mult_v2::multSub()");
 }
 
 void Mult_v2::playMult(int16 startFrame, int16 endFrame, char checkEscape,
@@ -445,8 +467,8 @@
 				delete[] _objects;
 			if (_orderArray)
 				delete[] _orderArray;
-			if (_renderData)
-				delete[] _renderData;
+/*			if (_renderData)
+				delete[] _renderData;*/
 			if (_renderData2)
 				delete[] _renderData2;
 
@@ -455,8 +477,8 @@
 
 			_orderArray = new int8[_objCount];
 			memset(_orderArray, 0, _objCount * sizeof(int8));
-			_renderData = new int16[9 * _objCount];
-			memset(_renderData, 0, _objCount * 9 * sizeof(int16));
+/*			_renderData = new int16[9 * _objCount];
+			memset(_renderData, 0, _objCount * 9 * sizeof(int16));*/
 			_renderData2 = new Mult_Object*[_objCount];
 			memset(_renderData2, 0, _objCount * sizeof(Mult_Object*));
 
@@ -464,6 +486,7 @@
 			_animArrayY = new int32[_objCount];
 
 			_animArrayData = new Mult_AnimData[_objCount];
+			memset(_animArrayData, 0, _objCount * sizeof(Mult_AnimData));
 
 			for (_counter = 0; _counter < _objCount; _counter++) {
 				multObj = &_objects[_counter];
@@ -784,9 +807,12 @@
 				off = palKey->subst[(_multData2->palAnimIndices[_index] + 1) % 16][_index] - 1;
 				off2 = palKey->subst[_multData2->palAnimIndices[_index]][_index] - 1;
 
-				_vm->_global->_pPaletteDesc->vgaPal[off2].red = _vm->_global->_pPaletteDesc->vgaPal[off].red;
-				_vm->_global->_pPaletteDesc->vgaPal[off2].green = _vm->_global->_pPaletteDesc->vgaPal[off].green;
-				_vm->_global->_pPaletteDesc->vgaPal[off2].blue = _vm->_global->_pPaletteDesc->vgaPal[off].blue;
+				_vm->_global->_pPaletteDesc->vgaPal[off2].red =
+					_vm->_global->_pPaletteDesc->vgaPal[off].red;
+				_vm->_global->_pPaletteDesc->vgaPal[off2].green =
+					_vm->_global->_pPaletteDesc->vgaPal[off].green;
+				_vm->_global->_pPaletteDesc->vgaPal[off2].blue =
+					_vm->_global->_pPaletteDesc->vgaPal[off].blue;
 			}
 
 			_multData2->palAnimIndices[_index] = (_multData2->palAnimIndices[_index] + 1) % 16;
@@ -897,7 +923,7 @@
 void Mult_v2::sub_62DD(int16 index) {
 	Mult_Object *animObj;
 	Mult_AnimKey *animKey;
-//	void *somep05, *somep05l;
+	Mult_SomeKey *someKey1, *someKey2;
 	int16 frame;
 	int16 layer;
 	int16 layers;
@@ -952,41 +978,41 @@
 			}
 		}
 		if (_multData2->field_124[index][i] != -1) {
-			warning("GOB2 Stub! Messing about with _multData2->somepointer05");
-			for (j = _multData2->field_17F[index][i]; j < _multData2->somepointer05size[i]; j++) {
-/*
-				somep05 = &_multData2->somepointer05[i][j];
-				somep05l = &_multData2->somepointer05[i][j-1];
-				if (somep05->field_0 > frame)
+//			warning("GOB2 Stub! Messing about with _multData2->someKeys, %d, %d", _multData2->field_17F[index][i], _multData2->someKeysCount[i]);
+			for (j = _multData2->field_17F[index][i]; j < _multData2->someKeysCount[i]; j++) {
+
+				someKey1 = &_multData2->someKeys[i][j];
+				someKey2 = &_multData2->someKeys[i][j-1];
+				if (someKey1->frame > frame)
 					break;
-				else if (somep05->field_0 == frame) {
-					if (somep05->field_2 == -1)
-						_multData2->somepointer05indices[i] = -1;
+				else if (someKey1->frame == frame) {
+					if (someKey1->field_2 == -1)
+						_multData2->someKeysIndices[i] = -1;
 					else {
-						_multData2->somepointer05indices[0] = -1;
-						_multData2->somepointer05indices[1] = -1;
-						_multData2->somepointer05indices[2] = -1;
-						_multData2->somepointer05indices[3] = -1;
-						if ((_multData2->field_156 == 1) || (somep05l->field_2 == 1))
-							_multData2->somepointer05indices[i] = j;
+						_multData2->someKeysIndices[0] = -1;
+						_multData2->someKeysIndices[1] = -1;
+						_multData2->someKeysIndices[2] = -1;
+						_multData2->someKeysIndices[3] = -1;
+						if ((_multData2->field_156 == 1) || (someKey2->field_2 == 1))
+							_multData2->someKeysIndices[i] = j;
 						else if (_multData2->field_157[index] == frame)
-							_multData2->somepointer05indices[i] = -1;
+							_multData2->someKeysIndices[i] = -1;
 						else
-							_multData2->somepointer05indices[i] = j - 1;
+							_multData2->someKeysIndices[i] = j - 1;
 					}
 				}
-*/
+
 			}
 		}
-		if (_multData2->somepointer05indices[i] != -1) {
+		if (_multData2->someKeysIndices[i] != -1) {
 /*
-			int arg3 = frame - _multData2->somepointer05[i][_multData2->somepointer05indices[i]].field_0;
+			int arg3 = frame - _multData2->someKeys[i][_multData2->someKeysIndices[i]].field_0;
 			int arg2 =  _multData2->field_156;
 			if ((arg2 != 1) && (--arg3 > 0))
 			arg3 = 0;
-			int arg1 = _multData2->somepointer05[i][_multData2->somepointer05indices[i]];
+			int arg1 = _multData2->someKeys[i][_multData2->someKeysIndices[i]];
 			// somepointer09 is 14 bytes wide (surely a struct)
-			int arg0 = _multData2->somepointer09[-_multData2->somepointer05[i][_multData2->somepointer05indices[i]].field_2 - 2];
+			int arg0 = _multData2->somepointer09[-_multData2->someKeys[i][_multData2->someKeysIndices[i]].field_2 - 2];
 */
 			warning("GOB2 Stub! sub_1CBF8(arg0, arg1, arg2, arg3);");
 		}
@@ -997,10 +1023,10 @@
 	if (_multData2->field_156 == 1) { // loc_6809
 		frame++;
 		if (_multData2->field_157[index] == (frame-1)) {
-			_multData2->somepointer05indices[0] = -1;
-			_multData2->somepointer05indices[1] = -1;
-			_multData2->somepointer05indices[2] = -1;
-			_multData2->somepointer05indices[3] = -1;
+			_multData2->someKeysIndices[0] = -1;
+			_multData2->someKeysIndices[1] = -1;
+			_multData2->someKeysIndices[2] = -1;
+			_multData2->someKeysIndices[3] = -1;
 			frame = -1;
 			for (i = 0; i < 4; i++) {
 				if ((_multData2->field_124[index][i] == -1) || (_multData2->field_124[index][i] == 1024))
@@ -1012,10 +1038,10 @@
 	} else { // loc_68F3
 		frame--;
 		if (_multData2->field_157[index] == (frame+1)) {
-			_multData2->somepointer05indices[0] = -1;
-			_multData2->somepointer05indices[1] = -1;
-			_multData2->somepointer05indices[2] = -1;
-			_multData2->somepointer05indices[3] = -1;
+			_multData2->someKeysIndices[0] = -1;
+			_multData2->someKeysIndices[1] = -1;
+			_multData2->someKeysIndices[2] = -1;
+			_multData2->someKeysIndices[3] = -1;
 			frame = -1;
 			for (i = 0; i < 4; i++) {
 				if ((_multData2->field_124[index][i] == -1) || (_multData2->field_124[index][i] == 1024))
@@ -1186,7 +1212,7 @@
 				if ((animObj1->pAnimData->order == animObj2->pAnimData->order) &&
 						((animObj1->somethingBottom > animObj2->somethingBottom) ||
 						((animObj1->somethingBottom == animObj2->somethingBottom) &&
-						 (animObj1->pAnimData->someFlag == 1))))
+						 (animObj1->pAnimData->isBusy == 1))))
 						SWAP(orderArray[i], orderArray[j]);
 			}
 		}
@@ -1365,6 +1391,20 @@
 	}
 }
 
+void Mult_v2::freeMult(void) {
+	if (_vm->_anim->_animSurf != 0)
+		delete _vm->_anim->_animSurf;
+
+	delete[] _objects;
+	delete[] _renderData2;
+	delete[] _orderArray;
+
+	_objects = 0;
+	_renderData2 = 0;
+	_orderArray = 0;
+	_vm->_anim->_animSurf = 0;
+}
+
 void Mult_v2::freeMultKeys(void) {
 	int i;
 	char animCount;
@@ -1390,8 +1430,8 @@
 
 	for (i = 0; i < 4; i++) { // loc_73BA
 		delete[] _multData2->animKeys[i];
-		if (_multData2->somepointer05[i] != 0)
-			delete[] _multData2->somepointer05[i];
+		if (_multData2->someKeys[i] != 0)
+			delete[] _multData2->someKeys[i];
 	}
 
 	delete[] _multData2->palFadeKeys;

Modified: scummvm/trunk/engines/gob/scenery.cpp
===================================================================
--- scummvm/trunk/engines/gob/scenery.cpp	2006-06-10 13:20:29 UTC (rev 23011)
+++ scummvm/trunk/engines/gob/scenery.cpp	2006-06-10 14:37:48 UTC (rev 23012)
@@ -473,8 +473,7 @@
 			_animPictToSprite[7 * sceneryIndex + i] = sprIndex;
 			_spriteRefs[sprIndex] = 1;
 			_spriteResId[sprIndex] = sprResId;
-			_vm->_draw->_spritesArray[sprIndex] =
-			    _vm->_video->initSurfDesc(_vm->_global->_videoMode, width, height, 2);
+			_vm->_draw->initBigSprite(sprIndex, width, height, 2);
 
 			_vm->_video->clearSurf(_vm->_draw->_spritesArray[sprIndex]);
 			_vm->_draw->_destSurface = sprIndex;


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