[Scummvm-cvs-logs] CVS: scummvm/scumm sprite_he.cpp,1.25,1.26

kirben kirben at users.sourceforge.net
Tue Feb 22 19:23:19 CET 2005


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

Modified Files:
	sprite_he.cpp 
Log Message:

Add some setSpriteGroupInfo code.


Index: sprite_he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/sprite_he.cpp,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -d -r1.25 -r1.26
--- sprite_he.cpp	23 Feb 2005 03:18:49 -0000	1.25
+++ sprite_he.cpp	23 Feb 2005 03:22:05 -0000	1.26
@@ -595,19 +595,50 @@
 // spriteGroupSet functions
 //
 void ScummEngine_v90he::spriteGroupSet_case0_0(int spriteGroupId, int value1, int value2) {
-	// TODO
+	checkRange(_varNumSpriteGroups, 1, spriteGroupId, "Invalid sprite group %d");
+
+	for (int i = 1; i < _varNumSprites; i++) {
+		if (_spriteTable[i].group_num == spriteGroupId) {
+			_spriteTable[i].tx += value1;
+			_spriteTable[i].ty += value2;
+
+			if (value1 || value2)
+				_spriteTable[i].flags |= kSF01 | kSFNeedRedraw;
+		}
+	}
 }
 
 void ScummEngine_v90he::spriteGroupSet_case0_1(int spriteGroupId, int value) {
-	// TODO
+	checkRange(_varNumSpriteGroups, 1, spriteGroupId, "Invalid sprite group %d");
+
+	for (int i = 1; i < _varNumSprites; i++) {
+		if (_spriteTable[i].group_num == spriteGroupId)
+			_spriteTable[i].field_18 = value;
+	}
 }
 
 void ScummEngine_v90he::spriteGroupSet_case0_2(int spriteGroupId, int value) {
-	// TODO
+	checkRange(_varNumSpriteGroups, 1, spriteGroupId, "Invalid sprite group %d");
+
+	for (int i = 1; i < _varNumSprites; i++) {
+		if (_spriteTable[i].group_num == spriteGroupId) {
+			_spriteTable[i].group_num = value;
+			_spriteTable[i].flags |= kSF01 | kSFNeedRedraw;
+		}
+	}
 }
 
 void ScummEngine_v90he::spriteGroupSet_case0_3(int spriteGroupId, int value) {
-	// TODO
+	checkRange(_varNumSpriteGroups, 1, spriteGroupId, "Invalid sprite group %d");
+
+	for (int i = 1; i < _varNumSprites; i++) {
+		if (_spriteTable[i].group_num == spriteGroupId) {
+			if (value)
+				_spriteTable[i].flags |= kSF23 | kSFBlitDirectly;
+			else
+				_spriteTable[i].flags &= ~(kSF01 | kSF23 | kSFBlitDirectly);
+		}
+	}
 }
 
 void ScummEngine_v90he::spriteGroupSet_case0_4(int spriteGroupId) {
@@ -615,15 +646,39 @@
 }
 
 void ScummEngine_v90he::spriteGroupSet_case0_5(int spriteGroupId, int value) {
-	// TODO
+	checkRange(_varNumSpriteGroups, 1, spriteGroupId, "Invalid sprite group %d");
+
+	for (int i = 1; i < _varNumSprites; i++) {
+		if (_spriteTable[i].group_num == spriteGroupId) {
+			_spriteTable[i].field_78 = value;
+			_spriteTable[i].field_64 = value;
+		}
+	}
 }
 
 void ScummEngine_v90he::spriteGroupSet_case0_6(int spriteGroupId, int value) {
-	// TODO
+	checkRange(_varNumSpriteGroups, 1, spriteGroupId, "Invalid sprite group %d");
+
+	for (int i = 1; i < _varNumSprites; i++) {
+		if (_spriteTable[i].group_num == spriteGroupId) {
+			if (value)
+				_spriteTable[i].flags |= kSF22;
+			else
+				_spriteTable[i].flags &= ~(kSF01 | kSF22);
+		}
+	}
 }
 
 void ScummEngine_v90he::spriteGroupSet_case0_7(int spriteGroupId, int value) {
-	// TODO
+	checkRange(_varNumSpriteGroups, 1, spriteGroupId, "Invalid sprite group %d");
+
+	for (int i = 1; i < _varNumSprites; i++) {
+		if (_spriteTable[i].group_num == spriteGroupId) {
+			_spriteTable[i].field_54 = value;
+			if (_spriteTable[i].res_id)
+				_spriteTable[i].flags |= kSF01 | kSFNeedRedraw;
+		}
+	}
 }
 
 void ScummEngine_v90he::spriteGroupSet_case5_0(int spriteGroupId, int value) {
@@ -643,27 +698,96 @@
 }
 
 void ScummEngine_v90he::spriteGroupSet_field_10(int spriteGroupId, int value) {
-	// TODO
+	checkRange(_varNumSpriteGroups, 1, spriteGroupId, "Invalid sprite group %d");
+
+	if (_spriteGroups[spriteGroupId].field_10 == value)
+		return;
+
+	_spriteGroups[spriteGroupId].field_10 = value;
+
+	for (int i = 0; i < _numSpritesToProcess; ++i) {
+		SpriteInfo *spi = _activeSpritesTable[i];
+		if (spi->group_num == spriteGroupId) {
+			spi->flags |= kSF01 | kSFNeedRedraw;
+		}
+	}
 }
 
 void ScummEngine_v90he::spriteGroupSet_tx_ty(int spriteGroupId, int value1, int value2) {
-	// TODO
+	checkRange(_varNumSpriteGroups, 1, spriteGroupId, "Invalid sprite group %d");
+
+	_spriteGroups[spriteGroupId].tx += value1;
+	_spriteGroups[spriteGroupId].ty += value2;
+
+	for (int i = 0; i < _numSpritesToProcess; ++i) {
+		SpriteInfo *spi = _activeSpritesTable[i];
+		if (spi->group_num == spriteGroupId) {
+			spi->flags |= kSF01 | kSFNeedRedraw;
+		}
+	}
 }
 
 void ScummEngine_v90he::spriteGroupSet_case26(int spriteGroupId, int value) {
-	// TODO
+	checkRange(_varNumSpriteGroups, 1, spriteGroupId, "Invalid sprite group %d");
+
+	if (_spriteGroups[spriteGroupId].field_20 == value)
+		return;
+
+	_spriteGroups[spriteGroupId].field_20 = value;
+
+	for (int i = 0; i < _numSpritesToProcess; ++i) {
+		SpriteInfo *spi = _activeSpritesTable[i];
+		if (spi->group_num == spriteGroupId) {
+			spi->flags |= kSF01 | kSFNeedRedraw;
+		}
+	}
 }
 
 void ScummEngine_v90he::spriteGroupSet_case28(int spriteGroupId, int value1, int value2) {
-	// TODO
+	checkRange(_varNumSpriteGroups, 1, spriteGroupId, "Invalid sprite group %d");
+
+	if (_spriteGroups[spriteGroupId].tx == value1 && _spriteGroups[spriteGroupId].ty == value2)
+		return;
+
+	_spriteGroups[spriteGroupId].tx = value1;
+	_spriteGroups[spriteGroupId].ty = value2;
+
+	for (int i = 0; i < _numSpritesToProcess; ++i) {
+		SpriteInfo *spi = _activeSpritesTable[i];
+		if (spi->group_num == spriteGroupId) {
+			spi->flags |= kSF01 | kSFNeedRedraw;
+		}
+	}
 }
 
 void ScummEngine_v90he::spriteGroupSet_fields_0_4_8_C(int spriteGroupId, int value1, int value2, int value3, int value4) {
-	// TODO
+	checkRange(_varNumSpriteGroups, 1, spriteGroupId, "Invalid sprite group %d");
+
+	_spriteGroups[spriteGroupId].flags |= kSGF01;
+	_spriteGroups[spriteGroupId].field_0 = value1;
+	_spriteGroups[spriteGroupId].field_4 = value2;
+	_spriteGroups[spriteGroupId].field_8 = value3;
+	_spriteGroups[spriteGroupId].field_C = value4;
+
+	for (int i = 0; i < _numSpritesToProcess; ++i) {
+		SpriteInfo *spi = _activeSpritesTable[i];
+		if (spi->group_num == spriteGroupId) {
+			spi->flags |= kSF01 | kSFNeedRedraw;
+		}
+	}
 }
 
 void ScummEngine_v90he::spriteGroupSet_case56(int spriteGroupId) {
-	// TODO
+	checkRange(_varNumSpriteGroups, 1, spriteGroupId, "Invalid sprite group %d");
+
+	_spriteGroups[spriteGroupId].flags &= ~(kSGF02);
+
+	for (int i = 0; i < _numSpritesToProcess; ++i) {
+		SpriteInfo *spi = _activeSpritesTable[i];
+		if (spi->group_num == spriteGroupId) {
+			spi->flags |= kSF01 | kSFNeedRedraw;
+		}
+	}
 }
 
 void ScummEngine_v90he::spriteGroupSet_case180(int spriteGroupId) {





More information about the Scummvm-git-logs mailing list