[Scummvm-cvs-logs] CVS: scummvm/scumm intern.h,2.344,2.345 script_v90he.cpp,2.136,2.137 sprite_he.cpp,1.12,1.13

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


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

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


Index: intern.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/intern.h,v
retrieving revision 2.344
retrieving revision 2.345
diff -u -d -r2.344 -r2.345
--- intern.h	21 Feb 2005 01:08:48 -0000	2.344
+++ intern.h	21 Feb 2005 02:02:29 -0000	2.345
@@ -919,6 +919,16 @@
 	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 spriteInfoSet_rotAngle(int spriteNum, int value);
+	void spriteInfoSet_flag22(int spriteNum, int value);
+	void spriteInfoSet_flag7(int spriteNum, int value);
+	void spriteInfoSet_flagRotated(int spriteNum, int value);
+	void spriteInfoSet_flag8(int spriteNum, int value);
+	void spriteInfoSet_flagZoomed(int spriteNum, int value);
+	void spriteInfoSet_flag20(int spriteNum, int value);
+	void spriteInfoSet_flags23_26(int spriteNum, int value);
+	void spriteInfoSet_flag31(int spriteNum, int value);
+	void spriteInfoSet_field_78_64(int spriteNum, int value);
 
 	void spritesAllocTables(int numSprites, int numGroups, int numImgSprites);
 	void spritesResetTables(bool refreshScreen);

Index: script_v90he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v90he.cpp,v
retrieving revision 2.136
retrieving revision 2.137
diff -u -d -r2.136 -r2.137
--- script_v90he.cpp	21 Feb 2005 01:08:48 -0000	2.136
+++ script_v90he.cpp	21 Feb 2005 02:02:32 -0000	2.137
@@ -928,16 +928,39 @@
 
 void ScummEngine_v90he::o90_setSpriteInfo() {
 	int args[16];
-	int spriteId;
+	int spriteId, tmp[2];
+	static int storedFields[2];
 	byte subOp = fetchScriptByte();
 	subOp -= 34;
 
 	switch (subOp) {
 	case 0:
-		pop();
+		args[0] = pop();
+		if (_curSpriteId > _curMaxSpriteId)
+			break;
+		spriteId = _curSpriteId;
+		if (!spriteId)
+			spriteId++;
+
+		for (; spriteId <= _curMaxSpriteId; spriteId++) {
+			spriteInfoGet_field_2C_30(spriteId, tmp[0], tmp[1]);
+			storedFields[0] = tmp[0];
+			spriteInfoSet_field_2C_30(spriteId, args[0], tmp[1]);
+		}
 		break;
 	case 1:
-		pop();
+		args[0] = pop();
+		if (_curSpriteId > _curMaxSpriteId)
+			break;
+		spriteId = _curSpriteId;
+		if (!spriteId)
+			spriteId++;
+
+		for (; spriteId <= _curMaxSpriteId; spriteId++) {
+			spriteInfoGet_field_2C_30(spriteId, tmp[0], tmp[1]);
+			storedFields[1] = tmp[1];
+			spriteInfoSet_field_2C_30(spriteId, tmp[0], args[0]);
+		}
 		break;
 	case 3:
 		args[0] = pop();
@@ -951,8 +974,34 @@
 			spriteInfoSet_groupNum(spriteId, args[0]);
 		break;
 	case 8:
-		pop();
-		pop();
+		args[1] = pop();
+		args[0] = pop();
+		if (_curSpriteId > _curMaxSpriteId)
+			break;
+		spriteId = _curSpriteId;
+		if (!spriteId)
+			spriteId++;
+
+		for (; spriteId <= _curMaxSpriteId; spriteId++)
+			switch(args[1]) {
+			case 0:
+				spriteInfoSet_flag7(spriteId, args[0]);
+				break;
+			case 1:
+				spriteInfoSet_flagRotated(spriteId, args[0]);
+				break;
+			case 2:
+				spriteInfoSet_flag8(spriteId, args[0]);
+				break;
+			case 3:
+				spriteInfoSet_flagZoomed(spriteId, args[0]);
+				break;
+			case 4:
+				spriteInfoSet_flag20(spriteId, args[0]);
+				break;
+			default:
+				break;
+			}
 		break;
 	case 9:
 		args[0] = pop();
@@ -989,7 +1038,15 @@
 			spriteInfoSet_resState(spriteId, args[0]);
 		break;
 	case 19:
-		pop();
+		args[0] = pop();
+		if (_curSpriteId > _curMaxSpriteId)
+			break;
+		spriteId = _curSpriteId;
+		if (!spriteId)
+			spriteId++;
+
+		for (; spriteId <= _curMaxSpriteId; spriteId++)
+			spriteInfoSet_rotAngle(spriteId, args[0]);
 		break;
 	case 23:
 		if (_gameId == GID_FREDDI4 || _heversion >= 99) {
@@ -1038,7 +1095,15 @@
 			spriteInfoSet_tx_ty(spriteId, args[0], args[1]);
 		break;
 	case 34:
-		pop();
+		args[0] = pop();
+		if (_curSpriteId > _curMaxSpriteId)
+			break;
+		spriteId = _curSpriteId;
+		if (!spriteId)
+			spriteId++;
+
+		for (; spriteId <= _curMaxSpriteId; spriteId++)
+			spriteInfoSet_flag31(spriteId, args[0]);
 		break;
 	case 43:
 		args[1] = pop();
@@ -1053,7 +1118,15 @@
 			spriteInfoSet_field_2C_30(spriteId, args[0], args[1]);
 		break;
 	case 48:
-		pop();
+		args[0] = pop();
+		if (_curSpriteId > _curMaxSpriteId)
+			break;
+		spriteId = _curSpriteId;
+		if (!spriteId)
+			spriteId++;
+
+		for (; spriteId <= _curMaxSpriteId; spriteId++)
+			spriteInfoSet_flag22(spriteId, args[0]);
 		break;
 	case 52: // HE 98+
 		args[0] = pop();
@@ -1078,7 +1151,15 @@
 			spriteInfoSet_zoom(spriteId, args[0]);
 		break;
 	case 63: // HE 98+
-		pop();
+		args[0] = pop();
+		if (_curSpriteId > _curMaxSpriteId)
+			break;
+		spriteId = _curSpriteId;
+		if (!spriteId)
+			spriteId++;
+
+		for (; spriteId <= _curMaxSpriteId; spriteId++)
+			spriteInfoSet_field_78_64(spriteId, args[0]);
 		break;
 	case 64:
 		args[0] = pop();
@@ -1092,7 +1173,15 @@
 			spriteInfoSet_field_54(spriteId, args[0]);
 		break;
 	case 90:
-		pop();
+		args[0] = pop();
+		if (_curSpriteId > _curMaxSpriteId)
+			break;
+		spriteId = _curSpriteId;
+		if (!spriteId)
+			spriteId++;
+
+		for (; spriteId <= _curMaxSpriteId; spriteId++)
+			spriteInfoSet_flags23_26(spriteId, args[0]);
 		break;
 	case 91:
 		getStackList(args, ARRAYSIZE(args));
@@ -1113,6 +1202,7 @@
 			spriteInfoSet_field_80(spriteId, args[0]);
 		break;
 	case 124:
+		spritesResetTables(true);
 		break;
 	case 164:
 		args[1] = pop();

Index: sprite_he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/sprite_he.cpp,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- sprite_he.cpp	21 Feb 2005 01:08:48 -0000	1.12
+++ sprite_he.cpp	21 Feb 2005 02:02:32 -0000	1.13
@@ -343,6 +343,111 @@
 	}
 }
 
+void ScummEngine_v90he::spriteInfoSet_rotAngle(int spriteNum, int value) {
+	checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
+
+	_spriteTable[spriteNum].flags |= kSFRotated;
+
+	if (_spriteTable[spriteNum].rot_angle != value) {
+		_spriteTable[spriteNum].rot_angle = value;
+
+		if (_spriteTable[spriteNum].res_id)
+			_spriteTable[spriteNum].flags |= kSF01 | kSF02;
+	}
+}
+
+void ScummEngine_v90he::spriteInfoSet_flag22(int spriteNum, int value) {
+	checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
+
+	if (value)
+		_spriteTable[spriteNum].flags |= kSF22;
+	else
+		_spriteTable[spriteNum].flags &= ~(kSF01 | kSF22);
+}
+
+void ScummEngine_v90he::spriteInfoSet_flag7(int spriteNum, int value) {
+	checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
+
+	if (value)
+		_spriteTable[spriteNum].flags |= kSF07;
+	else
+		_spriteTable[spriteNum].flags &= ~(kSF01 | kSF07);
+
+	if (_spriteTable[spriteNum].res_id)
+		_spriteTable[spriteNum].flags |= kSF01 | kSF02;
+}
+
+void ScummEngine_v90he::spriteInfoSet_flagRotated(int spriteNum, int value) {
+	checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
+
+	if (value)
+		_spriteTable[spriteNum].flags |= kSFRotated;
+	else
+		_spriteTable[spriteNum].flags &= ~(kSF01 | kSFRotated);
+
+	if (_spriteTable[spriteNum].res_id)
+		_spriteTable[spriteNum].flags |= kSF01 | kSF02;
+}
+
+void ScummEngine_v90he::spriteInfoSet_flag8(int spriteNum, int value) {
+	checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
+
+	if (value)
+		_spriteTable[spriteNum].flags |= kSF08;
+	else
+		_spriteTable[spriteNum].flags &= ~(kSF01 | kSF08);
+}
+
+void ScummEngine_v90he::spriteInfoSet_flagZoomed(int spriteNum, int value) {
+	checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
+
+	if (value)
+		_spriteTable[spriteNum].flags |= kSFZoomed;
+	else
+		_spriteTable[spriteNum].flags &= ~(kSF01 | kSFZoomed);
+
+	if (_spriteTable[spriteNum].res_id)
+		_spriteTable[spriteNum].flags |= kSF01 | kSF02;
+}
+
+void ScummEngine_v90he::spriteInfoSet_flag20(int spriteNum, int value) {
+	checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
+
+	if (value)
+		_spriteTable[spriteNum].flags |= kSF20;
+	else
+		_spriteTable[spriteNum].flags &= ~(kSF01 | kSF20);
+
+	if (_spriteTable[spriteNum].res_id)
+		_spriteTable[spriteNum].flags |= kSF01 | kSF02;
+}
+
+void ScummEngine_v90he::spriteInfoSet_flags23_26(int spriteNum, int value) {
+	checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
+
+	if (value)
+		_spriteTable[spriteNum].flags |= kSF23 | kSF26;
+	else
+		_spriteTable[spriteNum].flags &= ~(kSF01 | kSF23 | kSF26);
+}
+
+void ScummEngine_v90he::spriteInfoSet_flag31(int spriteNum, int value) {
+	checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
+
+	// Note that condition is inverted
+	if (!value)
+		_spriteTable[spriteNum].flags |= kSF31;
+	else
+		_spriteTable[spriteNum].flags &= ~(kSF01 | kSF31);
+}
+
+void ScummEngine_v90he::spriteInfoSet_field_78_64(int spriteNum, int value) {
+	checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
+
+	_spriteTable[spriteNum].field_78 = value;
+	_spriteTable[spriteNum].field_64 = value;
+}
+
 void ScummEngine_v90he::spriteInfoSet_case183(int spriteNum) {
 	checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
 





More information about the Scummvm-git-logs mailing list