[Scummvm-cvs-logs] CVS: scummvm/scumm intern.h,2.434,2.435 script_v100he.cpp,2.119,2.120 script_v90he.cpp,2.222,2.223 sprite_he.cpp,1.124,1.125 sprite_he.h,1.34,1.35

kirben kirben at users.sourceforge.net
Mon Apr 11 00:40:42 CEST 2005


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

Modified Files:
	intern.h script_v100he.cpp script_v90he.cpp sprite_he.cpp 
	sprite_he.h 
Log Message:

Add a few extra sprite correction and functions, based off HE100.


Index: intern.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/intern.h,v
retrieving revision 2.434
retrieving revision 2.435
diff -u -d -r2.434 -r2.435
--- intern.h	10 Apr 2005 01:25:33 -0000	2.434
+++ intern.h	11 Apr 2005 07:40:13 -0000	2.435
@@ -985,7 +985,7 @@
 	int spriteInfoGet_delayAmount(int spriteId);
 	int spriteInfoGet_field_7C(int spriteId);
 	int spriteInfoGet_field_80(int spriteId);
-	int spriteInfoGet_field_88(int spriteId, int type);
+	int spriteInfoGet_field_8C_90(int spriteId, int type);
 	void getSpriteImageDim(int spriteId, int32 &w, int32 &h);
 	void spriteInfoGet_tx_ty(int spriteId, int32 &tx, int32 &ty);
 	void spriteInfoGet_dx_dy(int spriteId, int32 &dx, int32 &dy);
@@ -1022,10 +1022,10 @@
 	void spriteInfoSet_flagMarkDirty(int spriteId, int value);
 	void spriteInfoSet_flagHasImage(int spriteId, int value);
 	void spriteInfoSet_delay(int spriteId, int value);
-	void spriteInfoSet_setClassFlags(int spriteId, int value);
 	void spriteInfoSet_setClassFlag(int spriteId, int classId, int toggle);
 	void spriteInfoSet_resetClassFlags(int spriteId);
-	void spriteInfoSet_field_88(int spriteId, int type, int value);
+	void spriteInfoSet_field_84(int spriteId, int value);
+	void spriteInfoSet_field_8C_90(int spriteId, int type, int value);
 
 	void redrawSpriteGroup(int spriteGroupId);
 	void spriteGroupSet_case0_0(int spriteGroupId, int value1, int value2);

Index: script_v100he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v100he.cpp,v
retrieving revision 2.119
retrieving revision 2.120
diff -u -d -r2.119 -r2.120
--- script_v100he.cpp	10 Apr 2005 12:58:57 -0000	2.119
+++ script_v100he.cpp	11 Apr 2005 07:40:14 -0000	2.120
@@ -1726,7 +1726,6 @@
 	int args[16];
 	int spriteId, n;
 	int32 tmp[2];
-	static int storedFields[2];
 	byte string[80];
 
 	byte subOp = fetchScriptByte();
@@ -1889,9 +1888,16 @@
 			spriteInfoSet_resetSprite(spriteId);
 		break;
 	case 54:
-		// TODO
-		pop();
-		pop();
+		args[1] = pop();
+		args[0] = pop();
+		if (_curSpriteId > _curMaxSpriteId)
+			break;
+		spriteId = _curSpriteId;
+		if (!spriteId)
+			spriteId++;
+
+		for (; spriteId <= _curMaxSpriteId; spriteId++)
+			spriteInfoSet_field_8C_90(spriteId, args[0], args[1]);
 		break;
 	case 57:
 		args[0] = pop();
@@ -2003,7 +2009,6 @@
 
 		for (; spriteId <= _curMaxSpriteId; spriteId++) {
 			spriteInfoGet_dx_dy(spriteId, tmp[0], tmp[1]);
-			storedFields[0] = tmp[0];
 			spriteInfoSet_dx_dy(spriteId, args[0], tmp[1]);
 		}
 		break;
@@ -2017,7 +2022,6 @@
 
 		for (; spriteId <= _curMaxSpriteId; spriteId++) {
 			spriteInfoGet_dx_dy(spriteId, tmp[0], tmp[1]);
-			storedFields[1] = tmp[1];
 			spriteInfoSet_dx_dy(spriteId, tmp[0], args[0]);
 		}
 		break;
@@ -2053,7 +2057,7 @@
 			spriteId++;
 
 		for (; spriteId <= _curMaxSpriteId; spriteId++)
-			spriteInfoSet_setClassFlags(spriteId, args[0]);
+			spriteInfoSet_field_84(spriteId, args[0]);
 		break;
 	case 89:
 		if (_curSpriteId > _curMaxSpriteId)
@@ -2063,7 +2067,7 @@
 			spriteId++;
 
 		for (; spriteId <= _curMaxSpriteId; spriteId++)
-			spriteInfoSet_resetClassFlags(spriteId);
+			spriteInfoSet_field_84(spriteId, 0);
 		break;
 	default:
 		error("o100_setSpriteInfo: Unknown case %d", subOp);
@@ -2288,7 +2292,7 @@
 			push(0);
 		break;
 	case 54:
-		// TODO
+		// TODO: U32 related
 		pop();
 		pop();
 		push(0);
@@ -2613,10 +2617,12 @@
 			push(0);
 		break;
 	case 54:
-		// TODO
-		pop();
-		pop();
-		push(0);
+		flags = pop();
+		spriteId = pop();
+		if (spriteId)
+			push(spriteInfoGet_field_8C_90(spriteId, flags));
+		else
+			push(0);
 		break;
 	case 57:
 		spriteId = pop();

Index: script_v90he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v90he.cpp,v
retrieving revision 2.222
retrieving revision 2.223
diff -u -d -r2.222 -r2.223
--- script_v90he.cpp	10 Apr 2005 12:59:15 -0000	2.222
+++ script_v90he.cpp	11 Apr 2005 07:40:14 -0000	2.223
@@ -969,7 +969,7 @@
 		flags = pop();
 		spriteId = pop();
 		if (spriteId)
-			push(spriteInfoGet_field_88(spriteId, flags));
+			push(spriteInfoGet_field_8C_90(spriteId, flags));
 		else
 			push(0);
 		break;
@@ -1284,7 +1284,7 @@
 			spriteId++;
 
 		for (; spriteId <= _curMaxSpriteId; spriteId++)
-			spriteInfoSet_field_88(spriteId, args[0], args[1]);
+			spriteInfoSet_field_8C_90(spriteId, args[0], args[1]);
 		break;
 	case 106: // HE 99+
 		args[0] = pop();

Index: sprite_he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/sprite_he.cpp,v
retrieving revision 1.124
retrieving revision 1.125
diff -u -d -r1.124 -r1.125
--- sprite_he.cpp	10 Apr 2005 12:59:16 -0000	1.124
+++ sprite_he.cpp	11 Apr 2005 07:40:14 -0000	1.125
@@ -372,13 +372,21 @@
 	return _spriteTable[spriteId].field_80;
 }
 
-int ScummEngine_v90he::spriteInfoGet_field_88(int spriteId, int type) {
+int ScummEngine_v90he::spriteInfoGet_field_8C_90(int spriteId, int type) {
 	checkRange(_varNumSprites, 1, spriteId, "Invalid sprite %d");
 
-	if (type == 0x7B)
-		return _spriteTable[spriteId].field_88;
-	else
-		return 0;
+	// XXX U32 related check
+
+	switch(type) {
+	case 0x7B:
+		return _spriteTable[spriteId].field_8C;
+	case 0x7D:
+		return _spriteTable[spriteId].field_90;
+	case 0x7E:
+		return _spriteTable[spriteId].delayCount;
+	default:
+		error("spriteInfoGet_field_8C_90: Invalid type %d", type);
+	}
 }
 
 void ScummEngine_v90he::getSpriteImageDim(int spriteId, int32 &w, int32 &h) {
@@ -709,12 +717,6 @@
 	_spriteTable[spriteId].delayCount = value;
 }
 
-void ScummEngine_v90he::spriteInfoSet_setClassFlags(int spriteId, int value) {
-	checkRange(_varNumSprites, 1, spriteId, "Invalid sprite %d");
-	
-	_spriteTable[spriteId].classFlags = value;
-}
-
 void ScummEngine_v90he::spriteInfoSet_setClassFlag(int spriteId, int classId, int toggle) {
 	checkRange(_varNumSprites, 1, spriteId, "Invalid sprite %d");
 	checkRange(32, 1, classId, "class %d out of range in statement");
@@ -732,12 +734,35 @@
 	_spriteTable[spriteId].classFlags = 0;
 }
 
-void ScummEngine_v90he::spriteInfoSet_field_88(int spriteId, int type, int value) {
+void ScummEngine_v90he::spriteInfoSet_field_84(int spriteId, int value) {
 	checkRange(_varNumSprites, 1, spriteId, "Invalid sprite %d");
 
-	if (type == 0x7B) {
-		_spriteTable[spriteId].field_88 = value;
+	_spriteTable[spriteId].field_84 = value;
+}
+
+void ScummEngine_v90he::spriteInfoSet_field_8C_90(int spriteId, int type, int value) {
+	checkRange(_varNumSprites, 1, spriteId, "Invalid sprite %d");
+	int delay;
+
+	// XXX U32 related check
+
+	switch(type) {
+	case 0x7B:
+		_spriteTable[spriteId].field_8C = value;
 		_spriteTable[spriteId].flags |= kSFChanged | kSFNeedRedraw;
+		break;
+	case 0x7D:
+		_spriteTable[spriteId].field_90 = value;
+		_spriteTable[spriteId].flags |= kSFChanged | kSFNeedRedraw;
+		break;
+	case 0x7E:
+		delay = MAX(0, value);
+		delay = MIN(value, _spriteTable[spriteId].delayAmount);
+
+		_spriteTable[spriteId].delayCount = value;
+		break;
+	default:
+		error("spriteInfoSet_field_8C_90: Invalid value %d", type);
 	}
 }
 
@@ -767,7 +792,9 @@
 	_spriteTable[spriteId].field_7C = 0;
 	_spriteTable[spriteId].field_80 = 0;
 	_spriteTable[spriteId].zorderPriority = 0;
-	_spriteTable[spriteId].field_88 = 0;
+	_spriteTable[spriteId].field_84 = 0;
+	_spriteTable[spriteId].field_8C = 0;
+	_spriteTable[spriteId].field_90 = 0;
 }
 
 void ScummEngine_v90he::spriteAddImageToList(int spriteId, int imageNum, int *spriteIdptr) {
@@ -1394,8 +1421,8 @@
 		MKLINE(SpriteInfo, delayAmount, sleInt32, VER(48)),
 		MKLINE(SpriteInfo, field_7C, sleInt32, VER(48)),
 		MKLINE(SpriteInfo, field_80, sleInt32, VER(48)),
+		MKLINE(SpriteInfo, field_84, sleInt32, VER(48)),
 		MKLINE(SpriteInfo, classFlags, sleInt32, VER(48)),
-		MKLINE(SpriteInfo, field_88, sleInt32, VER(48)),
 		MKLINE(SpriteInfo, field_8C, sleInt32, VER(48)),
 		MKLINE(SpriteInfo, field_90, sleInt32, VER(48)),
 		MKLINE(SpriteInfo, field_94, sleInt32, VER(48)),

Index: sprite_he.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/sprite_he.h,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -d -r1.34 -r1.35
--- sprite_he.h	8 Apr 2005 23:32:30 -0000	1.34
+++ sprite_he.h	11 Apr 2005 07:40:14 -0000	1.35
@@ -77,8 +77,8 @@
 	int32 delayAmount;
 	int32 field_7C;
 	int32 field_80;
+	int32 field_84;
 	int32 classFlags;
-	int32 field_88;
 	int32 field_8C;
 	int32 field_90;
 	int32 field_94;





More information about the Scummvm-git-logs mailing list