[Scummvm-cvs-logs] CVS: scummvm/scumm intern.h,2.339,2.340 script_v90he.cpp,2.129,2.130 sprite_he.cpp,1.7,1.8 sprite_he.h,1.4,1.5

Eugene Sandulenko sev at users.sourceforge.net
Sun Feb 20 16:03:41 CET 2005


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

Modified Files:
	intern.h script_v90he.cpp sprite_he.cpp sprite_he.h 
Log Message:
o WIP for o90_spriteInfoSet.
o kSFx -> kSF0x
o kSGFx -> kSGF0x


Index: intern.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/intern.h,v
retrieving revision 2.339
retrieving revision 2.340
diff -u -d -r2.339 -r2.340
--- intern.h	20 Feb 2005 23:55:10 -0000	2.339
+++ intern.h	21 Feb 2005 00:02:44 -0000	2.340
@@ -852,6 +852,9 @@
 	const OpcodeEntryV90he *_opcodesV90he;
 	WizParameters _wizParams;
 
+	int _curMaxSpriteId;
+	int _curSpriteId;
+
 public:
 	ScummEngine_v90he(GameDetector *detector, OSystem *syst, const ScummGameSettings &gs, uint8 md5sum[16]) : ScummEngine_v80he(detector, syst, gs, md5sum) {}
 
@@ -893,6 +896,11 @@
 	int spriteInfoGet_field_80(int spriteNun);
 	void getSpriteImageDim(int spriteNum, int32 &w, int32 &h);
 
+	void spriteInfoSet_field_14(int spriteNum, int value);
+	void spriteInfoSet_field_7C(int spriteNum, int value);
+	void spriteInfoSet_field_80(int spriteNum, int value);
+	void spriteInfoSet_case183(int spriteNum);
+
 	void spritesAllocTables(int numSprites, int numGroups, int numImgSprites);
 	void spritesResetTables(bool refreshScreen);
 	void spriteGroupCheck(int sprGrpId);

Index: script_v90he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v90he.cpp,v
retrieving revision 2.129
retrieving revision 2.130
diff -u -d -r2.129 -r2.130
--- script_v90he.cpp	20 Feb 2005 23:55:11 -0000	2.129
+++ script_v90he.cpp	21 Feb 2005 00:02:44 -0000	2.130
@@ -903,6 +903,7 @@
 
 void ScummEngine_v90he::o90_setSpriteInfo() {
 	int args[16];
+	int spriteId;
 	byte subOp = fetchScriptByte();
 	subOp -= 34;
 
@@ -934,12 +935,27 @@
 		pop();
 		break;
 	case 23:
-		pop();
-		if (_gameId == GID_FREDDI4 || _heversion >= 99)
-			pop();
+		if (_gameId == GID_FREDDI4 || _heversion >= 99) {
+			_curMaxSpriteId = pop();
+			_curSpriteId = pop();
+			
+			if (_curSpriteId > _curMaxSpriteId)
+				SWAP(_curSpriteId, _curMaxSpriteId);
+		} else {
+			_curSpriteId = pop();
+			_curMaxSpriteId = _curSpriteId; // to make all functions happy
+		}
 		break;
 	case 28: // HE99+
-		pop();
+		args[0] = pop();
+		if (_curSpriteId > _curMaxSpriteId)
+			break;
+		spriteId = _curSpriteId;
+		if (!spriteId)
+			spriteId++;
+
+		for (; spriteId <= _curMaxSpriteId; spriteId++)
+			spriteInfoSet_field_7C(spriteId, args[0]);
 		break;
 	case 29:
 		pop();
@@ -959,7 +975,15 @@
 		pop();
 		break;
 	case 52: // HE 98+
-		pop();
+		args[0] = pop();
+		if (_curSpriteId > _curMaxSpriteId)
+			break;
+		spriteId = _curSpriteId;
+		if (!spriteId)
+			spriteId++;
+
+		for (; spriteId <= _curMaxSpriteId; spriteId++)
+			spriteInfoSet_field_14(spriteId, args[0]);
 		break;
 	case 58: // HE 99+
 		pop();
@@ -981,7 +1005,15 @@
 		pop();
 		break;
 	case 106: // HE 99+
-		pop();
+		args[0] = pop();
+		if (_curSpriteId > _curMaxSpriteId)
+			break;
+		spriteId = _curSpriteId;
+		if (!spriteId)
+			spriteId++;
+
+		for (; spriteId <= _curMaxSpriteId; spriteId++)
+			spriteInfoSet_field_80(spriteId, args[0]);
 		break;
 	case 124:
 		break;
@@ -990,6 +1022,15 @@
 		pop();
 		break;
 	case 183:
+		args[0] = pop();
+		if (_curSpriteId > _curMaxSpriteId)
+			break;
+		spriteId = _curSpriteId;
+		if (!spriteId)
+			spriteId++;
+
+		for (; spriteId <= _curMaxSpriteId; spriteId++)
+			spriteInfoSet_case183(spriteId);
 		break;
 	default:
 		error("o90_setSpriteInfo: Unknown case %d", subOp);

Index: sprite_he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/sprite_he.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- sprite_he.cpp	20 Feb 2005 23:55:11 -0000	1.7
+++ sprite_he.cpp	21 Feb 2005 00:02:44 -0000	1.8
@@ -161,6 +161,39 @@
 	getWizImageDim(_spriteTable[spriteNum].res_id, _spriteTable[spriteNum].res_state, w, h);
 }
 
+//
+// spriteInfoSet functions
+//
+void ScummEngine_v90he::spriteInfoSet_field_14(int spriteNum, int value) {
+	checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
+
+	if (_spriteTable[spriteNum].field_14 != value) {
+		_spriteTable[spriteNum].field_14 = value;
+		_spriteTable[spriteNum].flags |= kSF01 | kSF02;
+	}
+}
+
+void ScummEngine_v90he::spriteInfoSet_field_7C(int spriteNum, int value) {
+	checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
+
+	if (_spriteTable[spriteNum].field_7C != value) {
+		_spriteTable[spriteNum].field_7C = value;
+		_spriteTable[spriteNum].flags |= kSF01 | kSF02;
+	}
+}
+
+void ScummEngine_v90he::spriteInfoSet_field_80(int spriteNum, int value) {
+	checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
+
+	_spriteTable[spriteNum].field_80 = value;
+}
+
+void ScummEngine_v90he::spriteInfoSet_case183(int spriteNum) {
+	checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
+
+	// TODO
+}
+
 void ScummEngine_v90he::spritesAllocTables(int numSprites, int numGroups, int numImgLists) {
 	_varNumSpriteGroups = numGroups;
 	_numSpritesToProcess = 0;
@@ -189,7 +222,7 @@
 			for (i = 0; i < _numSpritesToProcess; ++i) {
 				SpriteInfo *spi = _activeSpritesTable[i];
 				if (spi->group_num == curGrp) {
-					spi->flags |= kSF1 | kSF2;
+					spi->flags |= kSF01 | kSF02;
 				}
 			}
 		}
@@ -199,18 +232,18 @@
 			for (i = 0; i < _numSpritesToProcess; ++i) {
 				SpriteInfo *spi = _activeSpritesTable[i];
 				if (spi->group_num == curGrp) {
-					spi->flags |= kSF1 | kSF2;
+					spi->flags |= kSF01 | kSF02;
 				}
 			}
 		}
-		spg->flags &= ~kSGF1;
-		spriteMarkIfInGroup(curGrp, kSF1 | kSF2);
+		spg->flags &= ~kSGF01;
+		spriteMarkIfInGroup(curGrp, kSF01 | kSF02);
 		if (spg->field_20 != 0) {
 			spriteGroupCheck(curGrp);
 			for (i = 0; i < _numSpritesToProcess; ++i) {
 				SpriteInfo *spi = _activeSpritesTable[i];
 				if (spi->group_num == curGrp) {
-					spi->flags |= kSF1 | kSF2;
+					spi->flags |= kSF01 | kSF02;
 				}
 			}
 		}

Index: sprite_he.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/sprite_he.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- sprite_he.h	20 Feb 2005 22:16:31 -0000	1.4
+++ sprite_he.h	21 Feb 2005 00:02:44 -0000	1.5
@@ -26,15 +26,15 @@
 namespace Scumm {
 
 enum SpriteFlags {
-	kSF1       = (1 << 0),
-	kSF2       = (1 << 1),
-	kSF3       = (1 << 2),
-	kSF4       = (1 << 3),
+	kSF01      = (1 << 0),
+	kSF02      = (1 << 1),
+	kSF03      = (1 << 2),
+	kSF04      = (1 << 3),
 	kSFZoomed  = (1 << 4),
 	kSFRotated = (1 << 5),
-	kSF7       = (1 << 6),
-	kSF8       = (1 << 7),
-	kSF9       = (1 << 8),
+	kSF07      = (1 << 6),
+	kSF08      = (1 << 7),
+	kSF09      = (1 << 8),
 	kSF10      = (1 << 9),
 	kSF11      = (1 << 10),
 	kSF12      = (1 << 11),
@@ -61,8 +61,8 @@
 };
 
 enum SpriteGroupFlags {
-	kSGF1  = 1 << 0,
-	kSFG2  = 1 << 1
+	kSGF01  = 1 << 0,
+	kSGF02  = 1 << 1
 };
 
 struct SpriteInfo {





More information about the Scummvm-git-logs mailing list