[Scummvm-cvs-logs] CVS: scummvm/scumm intern.h,2.342,2.343 script_v90he.cpp,2.134,2.135 sprite_he.cpp,1.10,1.11

Eugene Sandulenko sev at users.sourceforge.net
Sun Feb 20 17:00:21 CET 2005


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30279

Modified Files:
	intern.h script_v90he.cpp sprite_he.cpp 
Log Message:
WIP for o90_spriteInfoSet. Regression fix.


Index: intern.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/intern.h,v
retrieving revision 2.342
retrieving revision 2.343
diff -u -d -r2.342 -r2.343
--- intern.h	21 Feb 2005 00:34:00 -0000	2.342
+++ intern.h	21 Feb 2005 00:59:50 -0000	2.343
@@ -902,12 +902,23 @@
 	void spriteInfoSet_field_7C(int spriteId, int value);
 	void spriteInfoSet_field_80(int spriteId, int value);
 	void spriteInfoSet_case183(int spriteId);
+	void spriteInfoSet_resState(int spriteNum, int value);
+	void spriteInfoSet_tx_ty(int spriteNum, int value1, int value2);
+	void spriteInfoSet_groupNum(int spriteNum, int value);
+	void spriteInfoSet_field_2C_30(int spriteNum, int value1, int value2);
+	void spriteInfoSet_field_54(int spriteNum, int value);
+	void spriteInfoSet_field_44(int spriteNum, int value1, int value2);
+	void spriteInfoSet_field_18(int spriteNum, int value);
+	void spriteInfoSet_Inc_tx_ty(int spriteNum, int value1, int value2);
+	void spriteInfoSet_zoom(int spriteNum, int value);
 
 	void spritesAllocTables(int numSprites, int numGroups, int numImgSprites);
 	void spritesResetTables(bool refreshScreen);
 	void spriteGroupCheck(int sprGrpId);
 	void spriteMarkIfInGroup(int sprGrpId, uint32 flags);
 
+	void spriteInfoSet_addImageToList(int spriteNum, int imageNum, int *spriteIdptr);
+
 	/* HE version 90 script opcodes */
 	void o90_dup();
 	void o90_min();

Index: script_v90he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v90he.cpp,v
retrieving revision 2.134
retrieving revision 2.135
diff -u -d -r2.134 -r2.135
--- script_v90he.cpp	21 Feb 2005 00:38:13 -0000	2.134
+++ script_v90he.cpp	21 Feb 2005 00:59:50 -0000	2.135
@@ -940,21 +940,53 @@
 		pop();
 		break;
 	case 3:
-		pop();
+		args[0] = pop();
+		if (_curSpriteId > _curMaxSpriteId)
+			break;
+		spriteId = _curSpriteId;
+		if (!spriteId)
+			spriteId++;
+
+		for (; spriteId <= _curMaxSpriteId; spriteId++)
+			spriteInfoSet_groupNum(spriteId, args[0]);
 		break;
 	case 8:
 		pop();
 		pop();
 		break;
 	case 9:
-		pop();
+		args[0] = pop();
+		if (_curSpriteId > _curMaxSpriteId)
+			break;
+		spriteId = _curSpriteId;
+		if (!spriteId)
+			spriteId++;
+
+		for (; spriteId <= _curMaxSpriteId; spriteId++)
+			spriteInfoSet_field_18(spriteId, args[0]);
 		break;
 	case 10:
-		pop();
-		pop();
+		args[1] = pop();
+		args[0] = pop();
+		if (_curSpriteId > _curMaxSpriteId)
+			break;
+		spriteId = _curSpriteId;
+		if (!spriteId)
+			spriteId++;
+
+		for (; spriteId <= _curMaxSpriteId; spriteId++)
+			spriteInfoSet_Inc_tx_ty(spriteId, args[0], args[1]);
 		break;
 	case 18:
-		pop();
+		args[0] = pop();
+		if (_curSpriteId > _curMaxSpriteId)
+			break;
+		spriteId = _curSpriteId;
+		if (!spriteId)
+			spriteId++;
+
+		for (; spriteId <= _curMaxSpriteId; spriteId++)
+			spriteInfoSet_resState(spriteId, args[0]);
 		break;
 	case 19:
 		pop();
@@ -983,18 +1015,42 @@
 			spriteInfoSet_field_7C(spriteId, args[0]);
 		break;
 	case 29:
-		pop();
+		args[0] = pop();
+		if (_curSpriteId > _curMaxSpriteId)
+			break;
+		spriteId = _curSpriteId;
+		if (!spriteId)
+			spriteId++;
+
+		for (; spriteId <= _curMaxSpriteId; spriteId++)
+			spriteInfoSet_addImageToList(spriteId, 1, &args[0]);
 		break;
 	case 31:
-		pop();
-		pop();
+		args[1] = pop();
+		args[0] = pop();
+		if (_curSpriteId > _curMaxSpriteId)
+			break;
+		spriteId = _curSpriteId;
+		if (!spriteId)
+			spriteId++;
+
+		for (; spriteId <= _curMaxSpriteId; spriteId++)
+			spriteInfoSet_tx_ty(spriteId, args[0], args[1]);
 		break;
 	case 34:
 		pop();
 		break;
 	case 43:
-		pop();
-		pop();
+		args[1] = pop();
+		args[0] = pop();
+		if (_curSpriteId > _curMaxSpriteId)
+			break;
+		spriteId = _curSpriteId;
+		if (!spriteId)
+			spriteId++;
+
+		for (; spriteId <= _curMaxSpriteId; spriteId++)
+			spriteInfoSet_field_2C_30(spriteId, args[0], args[1]);
 		break;
 	case 48:
 		pop();
@@ -1011,13 +1067,29 @@
 			spriteInfoSet_field_14(spriteId, args[0]);
 		break;
 	case 58: // HE 99+
-		pop();
+		args[0] = pop();
+		if (_curSpriteId > _curMaxSpriteId)
+			break;
+		spriteId = _curSpriteId;
+		if (!spriteId)
+			spriteId++;
+
+		for (; spriteId <= _curMaxSpriteId; spriteId++)
+			spriteInfoSet_zoom(spriteId, args[0]);
 		break;
 	case 63: // HE 98+
 		pop();
 		break;
 	case 64:
-		pop();
+		args[0] = pop();
+		if (_curSpriteId > _curMaxSpriteId)
+			break;
+		spriteId = _curSpriteId;
+		if (!spriteId)
+			spriteId++;
+
+		for (; spriteId <= _curMaxSpriteId; spriteId++)
+			spriteInfoSet_field_54(spriteId, args[0]);
 		break;
 	case 90:
 		pop();
@@ -1043,11 +1115,18 @@
 	case 124:
 		break;
 	case 164:
-		pop();
-		pop();
+		args[1] = pop();
+		args[0] = pop();
+		if (_curSpriteId > _curMaxSpriteId)
+			break;
+		spriteId = _curSpriteId;
+		if (!spriteId)
+			spriteId++;
+
+		for (; spriteId <= _curMaxSpriteId; spriteId++)
+			spriteInfoSet_field_44(spriteId, args[0], args[1]);
 		break;
 	case 183:
-		args[0] = pop();
 		if (_curSpriteId > _curMaxSpriteId)
 			break;
 		spriteId = _curSpriteId;

Index: sprite_he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/sprite_he.cpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- sprite_he.cpp	21 Feb 2005 00:34:00 -0000	1.10
+++ sprite_he.cpp	21 Feb 2005 00:59:50 -0000	1.11
@@ -208,9 +208,97 @@
 	_spriteTable[spriteId].field_80 = value;
 }
 
-void ScummEngine_v90he::spriteInfoSet_case183(int spriteId) {
-	checkRange(_varNumSprites, 1, spriteId, "Invalid sprite %d");
+void ScummEngine_v90he::spriteInfoSet_resState(int spriteNum, int value) {
+	checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
+
+	if (_spriteTable[spriteNum].res_id) {
+		int state;
+
+		state = MAX(value, _spriteTable[spriteNum].res_wiz_states - 1);
+		if (state < 0)
+			state = 0;
+	
+		if (_spriteTable[spriteNum].res_state != state) {
+			_spriteTable[spriteNum].res_state = state;
+			_spriteTable[spriteNum].flags |= kSF01 | kSF02;
+		}
+	}
+}
+
+void ScummEngine_v90he::spriteInfoSet_tx_ty(int spriteNum, int value1, int value2) {
+	checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
+
+	if (_spriteTable[spriteNum].tx != value1 || _spriteTable[spriteNum].ty != value2) {
+		_spriteTable[spriteNum].tx = value1;
+		_spriteTable[spriteNum].ty = value2;
+		_spriteTable[spriteNum].flags |= kSF01 | kSF02;
+	}
+}
+
+void ScummEngine_v90he::spriteInfoSet_groupNum(int spriteNum, int value) {
+	checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
+	checkRange(_varNumSpriteGroups, 1, value, "Invalid sprite group%d");
+
+	_spriteTable[spriteNum].group_num = value;
+}
+
+void ScummEngine_v90he::spriteInfoSet_field_2C_30(int spriteNum, int value1, int value2) {
+	checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
+
+	_spriteTable[spriteNum].field_2C = value1;
+	_spriteTable[spriteNum].field_30 = value2;
+}
+
+void ScummEngine_v90he::spriteInfoSet_field_54(int spriteNum, int value) {
+	checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
+
+	_spriteTable[spriteNum].field_54 = value;
+	if (_spriteTable[spriteNum].res_id)
+		_spriteTable[spriteNum].flags |= kSF01 | kSF02;
+}
+
+void ScummEngine_v90he::spriteInfoSet_field_44(int spriteNum, int value1, int value2) {
+	checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
+
+	_spriteTable[spriteNum].field_44 = value2;
+}
+
+void ScummEngine_v90he::spriteInfoSet_field_18(int spriteNum, int value) {
+	checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
+
+	_spriteTable[spriteNum].field_18 = value;
+}
+
+void ScummEngine_v90he::spriteInfoSet_Inc_tx_ty(int spriteNum, int value1, int value2) {
+	checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
+
+	_spriteTable[spriteNum].tx += value1;
+	_spriteTable[spriteNum].ty += value2;
+
+	if  (_spriteTable[spriteNum].tx || _spriteTable[spriteNum].ty)
+		_spriteTable[spriteNum].flags |= kSF01 | kSF02;
+}
+
+void ScummEngine_v90he::spriteInfoSet_zoom(int spriteNum, int value) {
+	checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
 
+	_spriteTable[spriteNum].flags |= kSFZoomed;
+
+	if (_spriteTable[spriteNum].zoom != value) {
+		_spriteTable[spriteNum].zoom = value;
+
+		if (_spriteTable[spriteNum].res_id)
+			_spriteTable[spriteNum].flags |= kSF01 | kSF02;
+	}
+}
+
+void ScummEngine_v90he::spriteInfoSet_case183(int spriteNum) {
+	checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
+
+	// TODO
+}
+
+void ScummEngine_v90he::spriteInfoSet_addImageToList(int spriteNum, int imageNum, int *spriteIdptr) {
 	// TODO
 }
 





More information about the Scummvm-git-logs mailing list