aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTravis Howell2005-02-23 09:23:54 +0000
committerTravis Howell2005-02-23 09:23:54 +0000
commit861e418e70b2c5e60d9f15c2681ea168b90eba5f (patch)
tree0398cab5b302a494efadd8b995898e9ec57d240f
parenta890737e0e8b89b506edaba23ec74100fbab5322 (diff)
downloadscummvm-rg350-861e418e70b2c5e60d9f15c2681ea168b90eba5f.tar.gz
scummvm-rg350-861e418e70b2c5e60d9f15c2681ea168b90eba5f.tar.bz2
scummvm-rg350-861e418e70b2c5e60d9f15c2681ea168b90eba5f.zip
freddicove adds extra SpriteInfo field.
Correction, only redraw sprite if value changed. svn-id: r16876
-rw-r--r--scumm/intern.h1
-rw-r--r--scumm/script_v90he.cpp12
-rw-r--r--scumm/sprite_he.cpp11
-rw-r--r--scumm/sprite_he.h1
4 files changed, 22 insertions, 3 deletions
diff --git a/scumm/intern.h b/scumm/intern.h
index fb116b4ab7..c00c6f8638 100644
--- a/scumm/intern.h
+++ b/scumm/intern.h
@@ -938,6 +938,7 @@ protected:
void spriteInfoSet_field_78_64(int spriteId, int value);
void spriteInfoSet_setClassFlags(int spriteId, int value1, int value2);
void spriteInfoSet_resetClassFlags(int spriteId);
+ void spriteInfoSet_field_88(int spriteId, int value1, int value2);
void redrawSpriteGroup(int spriteGroupId);
void spriteGroupSet_case0_0(int spriteGroupId, int value1, int value2);
diff --git a/scumm/script_v90he.cpp b/scumm/script_v90he.cpp
index 109324a6c2..c9350ff4c6 100644
--- a/scumm/script_v90he.cpp
+++ b/scumm/script_v90he.cpp
@@ -1234,8 +1234,16 @@ void ScummEngine_v90he::o90_setSpriteInfo() {
}
break;
case 105: // HE 99+
- pop();
- pop();
+ args[1] = pop();
+ args[0] = pop();
+ if (_curSpriteId > _curMaxSpriteId)
+ break;
+ spriteId = _curSpriteId;
+ if (!spriteId)
+ spriteId++;
+
+ for (; spriteId <= _curMaxSpriteId; spriteId++)
+ spriteInfoSet_field_88(spriteId, args[0], args[1]);
break;
case 106: // HE 99+
args[0] = pop();
diff --git a/scumm/sprite_he.cpp b/scumm/sprite_he.cpp
index 3785ff9faf..fd7039a76d 100644
--- a/scumm/sprite_he.cpp
+++ b/scumm/sprite_he.cpp
@@ -386,7 +386,7 @@ void ScummEngine_v90he::spriteInfoSet_Inc_tx_ty(int spriteId, int value1, int va
_spriteTable[spriteId].tx += value1;
_spriteTable[spriteId].ty += value2;
- if (_spriteTable[spriteId].tx || _spriteTable[spriteId].ty)
+ if (value1 || value2)
_spriteTable[spriteId].flags |= kSF01 | kSFNeedRedraw;
}
@@ -525,6 +525,15 @@ void ScummEngine_v90he::spriteInfoSet_resetClassFlags(int spriteId) {
_spriteTable[spriteId].class_flags = 0;
}
+void ScummEngine_v90he::spriteInfoSet_field_88(int spriteId, int value1, int value2) {
+ checkRange(_varNumSprites, 1, spriteId, "Invalid sprite %d");
+
+ if (value1 == 0x7B) {
+ _spriteTable[spriteId].field_88 = value2;
+ _spriteTable[spriteId].flags |= kSF01 | kSFNeedRedraw;
+ }
+}
+
void ScummEngine_v90he::spriteInfoSet_resetSprite(int spriteId) {
checkRange(_varNumSprites, 1, spriteId, "Invalid sprite %d");
diff --git a/scumm/sprite_he.h b/scumm/sprite_he.h
index 563e061668..d54fa4e387 100644
--- a/scumm/sprite_he.h
+++ b/scumm/sprite_he.h
@@ -100,6 +100,7 @@ struct SpriteInfo {
int field_7C;
int field_80;
int class_flags;
+ int field_88;
};
struct SpriteGroup {