aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Gilbert2010-07-05 09:53:10 +0000
committerPaul Gilbert2010-07-05 09:53:10 +0000
commit660ffc194d217bdeb61479e5b101e7642319ecb5 (patch)
tree022940dd431dedd9953392f694dfdebe5cc7dde5
parent830c7611dc76ea94a0869b4943b541035ee28d1c (diff)
downloadscummvm-rg350-660ffc194d217bdeb61479e5b101e7642319ecb5.tar.gz
scummvm-rg350-660ffc194d217bdeb61479e5b101e7642319ecb5.tar.bz2
scummvm-rg350-660ffc194d217bdeb61479e5b101e7642319ecb5.zip
Bugfixes for new player code - Rex is now correctly positioned when the player manager takes over from the wakeup animation sequence
svn-id: r50669
-rw-r--r--engines/m4/mads_player.cpp13
-rw-r--r--engines/m4/mads_player.h2
-rw-r--r--engines/m4/mads_scene.cpp1
-rw-r--r--engines/m4/mads_views.cpp2
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);