[Scummvm-cvs-logs] CVS: scummvm/scumm/smush insane.cpp,1.19,1.20 insane.h,1.12,1.13

Eugene Sandulenko sev at users.sourceforge.net
Sat Dec 20 14:04:00 CET 2003


Update of /cvsroot/scummvm/scummvm/scumm/smush
In directory sc8-pr-cvs1:/tmp/cvs-serv26688

Modified Files:
	insane.cpp insane.h 
Log Message:
Added last chunk of code. Now here are just the bugs to kill.


Index: insane.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/smush/insane.cpp,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- insane.cpp	18 Dec 2003 23:58:50 -0000	1.19
+++ insane.cpp	20 Dec 2003 22:03:07 -0000	1.20
@@ -193,6 +193,8 @@
 	_val211d = 0;
 	_val212_ = 0;
 	_val213d = 0;
+	_val214d = -1;
+	_val215d = 0;
 	_smlayer_room = 0;
 	_smlayer_room2 = 0;
 	_isBenCut = 0;
@@ -7649,12 +7651,168 @@
 }
 
 void Insane::proc62(void) {
+	if (readArray(_numberArray, 58) == 0)
+		_enemy[EN_TORQUE].field_10 = 1;
+
+	if (_enemy[EN_TORQUE].field_8 == 0) {
+		_currEnemy = EN_TORQUE;
+		_val215d++;
+		_val216d[_val215d] = EN_TORQUE;
+		_val214d = _currEnemy;
+		return;
+	}
+
+	proc63();
+
+	// FIXME: someone, please, untaint this mess
+
+	int32 en, edi, ebp, edx, esi, eax, ebx, ecx;
+
+	for (en = 0; _enemy[en].field_10 == 0; en++);
+	en -= 4;
+
+	ebp = 0;
+	edi = 0;
+
+	_loop1:
+	edi++;
+	if (edi > 14)
+		goto loc5;
+
+	edx = rand() / 11;
+
+	esi = edx;
+
+	if (edx == 9)
+		esi = 6;
+	else if (edx > 9)
+		esi = 7;
+
+	eax = esi;
+	ebx = 1;
+
+	if (_enemy[eax].field_10 != ebp)
+		goto _loop1;
+
+	if (ebp < _val215d) {
+		edx = _val215d;
+		eax = ebp;
+		if (ebx)
+			goto loc1;
+	}
+
+	goto loc4;
+
+	loc1:
+	if (esi == _val216d[eax + 1])
+		ebx = ebp;
+
+	eax++;
+
+	if (eax < edx) {
+		if (ebx)
+			goto loc1;
+	}
+
+	loc4:
+	if (ebx == 0)
+		goto loc15;
+
+	edx = _val215d;
+	edx++;
+	_val216d[edx] = esi;
+	_val215d = edx;
+	if (edx < en)
+		goto loc15;
+	goto loc14;
+
+	loc5:
+	ecx = ebp;
+
+	loc6:
+	ebx = 1;
+	esi = ecx;
+	if (ebp < _val215d)
+		goto loc9;
+	goto loc11;
+
+	loc7:
+	if (esi == _val216d[eax + 1])
+		ebx = ebp;
+
+	eax++;
+
+	if (eax < edx)
+		goto loc10;
+
+	goto loc11;
+
+	loc9:
+	edx = _val215d;
+	eax = ebp;
+	
+	loc10:
+	if (ebx != 0)
+		goto loc7;
+
+	loc11:
+	ecx++;
+	if (ecx >= 9)
+		goto loc12;
+
+	if (ebx == 0)
+		goto loc6;
+
+	loc12:
+	if (ebx != 0)
+		goto loc13;
+
+	_val215d = ebp;
+	edi = ebp;
+	goto _loop1;
+
+	loc13:
+	edx = _val215d;
+	edx++;
+	_val216d[edx] = esi;
+	_val215d = edx;
+	
+	if (edx < en)
+		goto loc15;
+
+	loc14:
+	proc64(ebp);
+
+	loc15:
+	if (ebx == 0)
+		goto _loop1;
+
+	_currEnemy = esi;
+	_val214d = _currEnemy;
+}
+
+void Insane::proc63(void) {
+	int i;
+
+	if (_val215d > 0) {
+		for (i = 0; i < _val215d; i++)
+			if (_enemy[i].field_10 == 1)
+				proc64(i);
+	}
+}
+
+void Insane::proc64(int32 enemy1) {
+	int en = _val215d;
+
+	for (en = _val215d; enemy1 < en; en++)
+		_val216d[en] = _val216d[en + 1];
+
+	_val215d = en - 1;
 }
 
 void Insane::iactScene3(byte *renderBitmap, int32 codecparam, int32 setupsan12,
 					  int32 setupsan13, Chunk &b, int32 size, int32 flags) {
 	_player->checkBlock(b, TYPE_IACT, 8);
-	debug(0, "SmushPlayer::iactScene3()");
 
 	int command, par1, par2, par3, tmp;
 	command = b.getWord();
@@ -7845,8 +8003,54 @@
 void Insane::iactScene17(byte *renderBitmap, int32 codecparam, int32 setupsan12,
 					  int32 setupsan13, Chunk &b, int32 size, int32 flags) {
 	_player->checkBlock(b, TYPE_IACT, 8);
-	debug(0, "SmushPlayer::iactScene17()");
-	// FIXME: implement
+	int16 par1, par2, par3, par4;
+
+	par1 = b.getWord(); // dx
+	par2 = b.getWord(); // cx
+	par3 = b.getWord(); // di
+	par4 = b.getWord();
+
+	switch (par1) {
+	case 2:
+	case 3:
+	case 4:
+		if (par3 == 1) {
+			setBit(b.getWord());
+			_val32d = -1;
+		}
+		break;
+	case 6:
+		switch (par2) {
+		case 38:
+			smlayer_drawSomething(renderBitmap, codecparam, 28, 48, 1, 
+								  _smush_iconsNut, 6, 0, 0);
+			_val119_ = true;
+			_iactSceneId = par4;
+			if (_counter1 <= 4) {
+				if (_counter1 == 4)
+					smlayer_startSound1(94);
+
+				smlayer_showStatusMsg(-1, renderBitmap, codecparam, 24, 167, 1,
+									  2, 0, "%s", handleTrsTag(_trsFilePtr, 5000));
+			}
+			_val124_ = true;
+			break;
+		case 11:
+			smlayer_drawSomething(renderBitmap, codecparam, 28, 48, 1, 
+								  _smush_iconsNut, 6, 0, 0);
+			if (_counter1 <= 4) {
+				if (_counter1 == 4)
+					smlayer_startSound1(94);
+
+				smlayer_showStatusMsg(-1, renderBitmap, codecparam, 24, 167, 1,
+									  2, 0, "%s", handleTrsTag(_trsFilePtr, 5001));
+			}
+			_val124_ = true;
+			_val123_ = true;
+			break;
+		}
+		break;
+	}
 }
 
 void Insane::iactScene21(byte *renderBitmap, int32 codecparam, int32 setupsan12,

Index: insane.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/smush/insane.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- insane.h	18 Dec 2003 23:00:10 -0000	1.12
+++ insane.h	20 Dec 2003 22:03:07 -0000	1.13
@@ -192,7 +192,9 @@
 	int32 _val211d;
 	int32 _val212_;
 	int32 _val213d;
-
+	int32 _val214d;
+	int32 _val215d;
+	int32 _val216d[12];
 
 	struct enemy {
 		int32 handler;
@@ -474,6 +476,8 @@
 	void setBit(int n);
 	void clearBit(int n);
 	void proc62(void);
+	void proc63(void);
+	void proc64(int32);
 };
 } // End of namespace Insane
 





More information about the Scummvm-git-logs mailing list