diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/m4/mads_player.cpp | 13 | ||||
-rw-r--r-- | engines/m4/mads_player.h | 2 | ||||
-rw-r--r-- | engines/m4/mads_scene.cpp | 1 | ||||
-rw-r--r-- | engines/m4/mads_views.cpp | 2 |
4 files changed, 10 insertions, 8 deletions
diff --git a/engines/m4/mads_player.cpp b/engines/m4/mads_player.cpp index 2ba009459e..57cb9eefd3 100644 --- a/engines/m4/mads_player.cpp +++ b/engines/m4/mads_player.cpp @@ -49,7 +49,7 @@ MadsPlayer::MadsPlayer() { _currentScale = 0; strcpy(_spritesPrefix, ""); for (int idx = 0; idx < 8; ++idx) - _spriteSetIndexes[idx] = 0; + _spriteSetsPresent[idx] = false; _frameNum = 0; _frameOffset = 0; _unk1 = 0; @@ -76,7 +76,7 @@ bool MadsPlayer::loadSprites(const char *prefix) { if (prefixLen == 0) { // No player sprites at at all for (int idx = 0; idx < 8; ++idx) - _spriteSetIndexes[idx] = 0; + _spriteSetsPresent[idx] = false; } else { strcpy(setName, "*"); strcat(setName, _spritesPrefix); @@ -86,13 +86,13 @@ bool MadsPlayer::loadSprites(const char *prefix) { for (int idx = 0; idx < 8; ++idx) { *digitP = suffixList[idx]; - _spriteSetIndexes[idx] = -1; + _spriteSetsPresent[idx] = true; int setIndex = _madsVm->scene()->_spriteSlots.addSprites(setName, true, SPRITE_SET_CHAR_INFO); if (setIndex < 0) { if (idx < 7) break; - _spriteSetIndexes[idx] = 0; + _spriteSetsPresent[idx] = false; } else { ++_spriteSetCount; } @@ -212,8 +212,9 @@ void MadsPlayer::setupFrame() { resetActionList(); _frameOffset = 0; _spriteListIdx2 = _directionListIndexes[_direction]; - if (_spriteSetIndexes[_spriteListIdx2] == 0) { - _spriteListIdx2 = 4; + if (!_spriteSetsPresent[_spriteListIdx2]) { + // Direction isn't present, so use alternate direction, with entries flipped + _spriteListIdx2 -= 4; _frameOffset = 0x8000; } diff --git a/engines/m4/mads_player.h b/engines/m4/mads_player.h index 0a746575f1..7285796309 100644 --- a/engines/m4/mads_player.h +++ b/engines/m4/mads_player.h @@ -42,7 +42,7 @@ private: public: char _spritesPrefix[16]; int _spriteSetCount; - int _spriteSetIndexes[8]; + bool _spriteSetsPresent[8]; Common::Point _playerPos; Common::Point _destPos; int16 _direction, _direction2; diff --git a/engines/m4/mads_scene.cpp b/engines/m4/mads_scene.cpp index d22ca02475..66883dd13c 100644 --- a/engines/m4/mads_scene.cpp +++ b/engines/m4/mads_scene.cpp @@ -166,6 +166,7 @@ void MadsScene::loadScene(int sceneNumber) { // Miscellaneous player setup _madsVm->_player._destPos = _madsVm->_player._destPos; _madsVm->_player._direction2 = _madsVm->_player._direction; + _madsVm->_player.setupFrame(); _madsVm->_player.idle(); // Purge resources diff --git a/engines/m4/mads_views.cpp b/engines/m4/mads_views.cpp index d6d71c8eee..580f54b1c0 100644 --- a/engines/m4/mads_views.cpp +++ b/engines/m4/mads_views.cpp @@ -95,7 +95,7 @@ int MadsSpriteSlots::addSprites(const char *resName, bool suppressErrors, int fl // Get the sprite set Common::SeekableReadStream *data = _vm->res()->get(resName); - SpriteAsset *spriteSet = new SpriteAsset(_vm, data, data->size(), resName, flags); + SpriteAsset *spriteSet = new SpriteAsset(_vm, data, data->size(), resName, false, flags); spriteSet->translate(_madsVm->_palette); assert(spriteSet != NULL); |