diff options
author | Travis Howell | 2005-02-23 03:22:05 +0000 |
---|---|---|
committer | Travis Howell | 2005-02-23 03:22:05 +0000 |
commit | a33edcf009ca58a1b743e9965f729619f3786128 (patch) | |
tree | 32bb69d1204e652a5184c1eac4cc8012cec5585c /scumm | |
parent | dcd7d247174ceb5885e547671690de8afb57f157 (diff) | |
download | scummvm-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.cpp | 150 |
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) { |