aboutsummaryrefslogtreecommitdiff
path: root/scumm
diff options
context:
space:
mode:
authorTravis Howell2005-02-23 03:22:05 +0000
committerTravis Howell2005-02-23 03:22:05 +0000
commita33edcf009ca58a1b743e9965f729619f3786128 (patch)
tree32bb69d1204e652a5184c1eac4cc8012cec5585c /scumm
parentdcd7d247174ceb5885e547671690de8afb57f157 (diff)
downloadscummvm-rg350-a33edcf009ca58a1b743e9965f729619f3786128.tar.gz
scummvm-rg350-a33edcf009ca58a1b743e9965f729619f3786128.tar.bz2
scummvm-rg350-a33edcf009ca58a1b743e9965f729619f3786128.zip
Add some setSpriteGroupInfo code.
svn-id: r16871
Diffstat (limited to 'scumm')
-rw-r--r--scumm/sprite_he.cpp150
1 files changed, 137 insertions, 13 deletions
diff --git a/scumm/sprite_he.cpp b/scumm/sprite_he.cpp
index 355fb51a3a..96c6969782 100644
--- a/scumm/sprite_he.cpp
+++ b/scumm/sprite_he.cpp
@@ -595,19 +595,50 @@ void ScummEngine_v90he::spriteInfoSet_addImageToList(int spriteId, int imageNum,
// 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_4(int spriteGroupId) {
}
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_case5_3(int spriteGroupId, int value) {
}
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) {