diff options
author | Paul Gilbert | 2010-05-16 01:32:46 +0000 |
---|---|---|
committer | Paul Gilbert | 2010-05-16 01:32:46 +0000 |
commit | 43e61ec60f804b2540d1188801ba44cf37727782 (patch) | |
tree | 0f75a9ac6ebacefebb127c5367075ace412ce711 | |
parent | 5e4868fb008712d6504f0c1dab51b3566998b55f (diff) | |
download | scummvm-rg350-43e61ec60f804b2540d1188801ba44cf37727782.tar.gz scummvm-rg350-43e61ec60f804b2540d1188801ba44cf37727782.tar.bz2 scummvm-rg350-43e61ec60f804b2540d1188801ba44cf37727782.zip |
Bugfixes for animation depth logic
svn-id: r49045
-rw-r--r-- | engines/m4/mads_logic.cpp | 18 | ||||
-rw-r--r-- | engines/m4/mads_views.cpp | 13 | ||||
-rw-r--r-- | engines/m4/mads_views.h | 9 | ||||
-rw-r--r-- | engines/m4/rails.cpp | 6 | ||||
-rw-r--r-- | engines/m4/rails.h | 1 |
5 files changed, 30 insertions, 17 deletions
diff --git a/engines/m4/mads_logic.cpp b/engines/m4/mads_logic.cpp index 9d6c4e169b..7c70b780f1 100644 --- a/engines/m4/mads_logic.cpp +++ b/engines/m4/mads_logic.cpp @@ -79,29 +79,29 @@ uint16 MadsSceneLogic::loadSpriteSet(uint16 suffixNum, uint16 sepChar) { uint16 MadsSceneLogic::startSpriteSequence(uint16 srcSpriteIdx, int v0, int numTicks, int fld24, int timeoutTicks, int extraTicks) { M4Sprite *spriteFrame = _madsVm->scene()->_spriteSlots.getSprite(srcSpriteIdx).getFrame(1); - uint8 pixel = *_madsVm->scene()->getWalkSurface()->getBasePtr(spriteFrame->x + (spriteFrame->width() / 2), - spriteFrame->y + (spriteFrame->height() / 2)); + uint8 depth = _madsVm->_rails->getDepth(Common::Point(spriteFrame->x + (spriteFrame->width() / 2), + spriteFrame->y + (spriteFrame->height() / 2))); return _madsVm->scene()->_sequenceList.add(srcSpriteIdx, v0, 1, fld24, timeoutTicks, extraTicks, numTicks, 0, 0, - -1, 100, (int)pixel - 1, 1, ANIMTYPE_SINGLE_DIRECTION, 0, 0); + -1, 100, depth - 1, 1, ANIMTYPE_SINGLE_DIRECTION, 0, 0); } uint16 MadsSceneLogic::startCycledSpriteSequence(uint16 srcSpriteIdx, int v0, int numTicks, int fld24, int timeoutTicks, int extraTicks) { M4Sprite *spriteFrame = _madsVm->scene()->_spriteSlots.getSprite(srcSpriteIdx).getFrame(1); - uint8 pixel = *_madsVm->scene()->getWalkSurface()->getBasePtr(spriteFrame->x + (spriteFrame->width() / 2), - spriteFrame->y + (spriteFrame->height() / 2)); + uint8 depth = _madsVm->_rails->getDepth(Common::Point(spriteFrame->x + (spriteFrame->width() / 2), + spriteFrame->y + (spriteFrame->height() / 2))); return _madsVm->scene()->_sequenceList.add(srcSpriteIdx, v0, 1, fld24, timeoutTicks, extraTicks, numTicks, 0, 0, - -1, 100, (int)pixel - 1, 1, ANIMTYPE_CYCLED, 0, 0); + -1, 100, depth - 1, 1, ANIMTYPE_CYCLED, 0, 0); } uint16 MadsSceneLogic::startSpriteSequence3(uint16 srcSpriteIdx, int v0, int numTicks, int fld24, int timeoutTicks, int extraTicks) { M4Sprite *spriteFrame = _madsVm->scene()->_spriteSlots.getSprite(srcSpriteIdx).getFrame(1); - uint8 pixel = *_madsVm->scene()->getWalkSurface()->getBasePtr(spriteFrame->x + (spriteFrame->width() / 2), - spriteFrame->y + (spriteFrame->height() / 2)); + uint8 depth = _madsVm->_rails->getDepth(Common::Point(spriteFrame->x + (spriteFrame->width() / 2), + spriteFrame->y + (spriteFrame->height() / 2))); return _madsVm->scene()->_sequenceList.add(srcSpriteIdx, v0, 1, fld24, timeoutTicks, extraTicks, numTicks, 0, 0, - -1, 100, (int)pixel - 1, -1, ANIMTYPE_SINGLE_DIRECTION, 0, 0); + -1, 100, depth - 1, -1, ANIMTYPE_SINGLE_DIRECTION, 0, 0); } void MadsSceneLogic::activateHotspot(int idx, bool active) { diff --git a/engines/m4/mads_views.cpp b/engines/m4/mads_views.cpp index a99976338b..04e8afd21a 100644 --- a/engines/m4/mads_views.cpp +++ b/engines/m4/mads_views.cpp @@ -258,7 +258,7 @@ void MadsKernelMessageList::clear() { _talkFont = _vm->_font->getFont(FONT_CONVERSATION_MADS); } -int MadsKernelMessageList::add(const Common::Point &pt, uint fontColour, uint8 flags, uint8 v2, uint32 timeout, char *msg) { +int MadsKernelMessageList::add(const Common::Point &pt, uint fontColour, uint8 flags, uint8 v2, uint32 timeout, const char *msg) { // Find a free slot uint idx = 0; while ((idx < _entries.size()) && ((_entries[idx].flags & KMSG_ACTIVE) != 0)) @@ -291,6 +291,11 @@ int MadsKernelMessageList::add(const Common::Point &pt, uint fontColour, uint8 f return idx; } +int MadsKernelMessageList::addQuote(int quoteId, int v2, uint32 timeout) { + const char *quoteStr = _madsVm->globals()->getQuote(quoteId); + return add(Common::Point(0, 0), 0x1110, KMSG_2 | KMSG_20, v2, timeout, quoteStr); +} + void MadsKernelMessageList::unk1(int msgIndex, int v1, int v2) { if (msgIndex < 0) return; @@ -322,8 +327,8 @@ void MadsKernelMessageList::remove(int msgIndex) { if (rec.flags & KMSG_ACTIVE) { if (rec.flags & KMSG_8) { - *(rec.msg + rec.msgOffset) = rec.asciiChar; - *(rec.msg + rec.msgOffset + 1) = rec.asciiChar2; + //*(rec.msg + rec.msgOffset) = rec.asciiChar; + //*(rec.msg + rec.msgOffset + 1) = rec.asciiChar2; } if (rec.textDisplayIndex >= 0) @@ -497,7 +502,7 @@ bool MadsSequenceList::addSubEntry(int index, SequenceSubEntryMode mode, int fra } int MadsSequenceList::add(int spriteListIndex, int v0, int frameIndex, char field_24, int timeoutTicks, int extraTicks, int numTicks, - int height, int width, char field_12, char scale, char depth, int frameInc, SpriteAnimType animType, int numSprites, + int height, int width, char field_12, char scale, uint8 depth, int frameInc, SpriteAnimType animType, int numSprites, int frameStart) { // Find a free slot diff --git a/engines/m4/mads_views.h b/engines/m4/mads_views.h index 37c797b931..224acdfb51 100644 --- a/engines/m4/mads_views.h +++ b/engines/m4/mads_views.h @@ -131,7 +131,7 @@ public: #define TIMED_TEXT_SIZE 10 #define TEXT_4A_SIZE 30 -enum KernelMessageFlags {KMSG_1 = 1, KMSG_2 = 2, KMSG_4 = 4, KMSG_8 = 8, KMSG_40 = 0x40, KMSG_ACTIVE = 0x80}; +enum KernelMessageFlags {KMSG_1 = 1, KMSG_2 = 2, KMSG_4 = 4, KMSG_8 = 8, KMSG_20 = 0x20, KMSG_40 = 0x40, KMSG_ACTIVE = 0x80}; class MadsKernelMessageListEntry { public: @@ -151,7 +151,7 @@ public: bool field_1C; AbortTimerMode abortMode; uint16 actionNouns[3]; - char *msg; + const char *msg; }; class MadsKernelMessageList { @@ -163,7 +163,8 @@ public: MadsKernelMessageList(MadsView &owner); void clear(); - int add(const Common::Point &pt, uint fontColour, uint8 flags, uint8 v2, uint32 timeout, char *msg); + int add(const Common::Point &pt, uint fontColour, uint8 flags, uint8 v2, uint32 timeout, const char *msg); + int addQuote(int quoteId, int v2, uint32 timeout); void unk1(int msgIndex, int v1, int v2); void setSeqIndex(int msgIndex, int seqIndex); void remove(int msgIndex); @@ -295,7 +296,7 @@ public: void clear(); bool addSubEntry(int index, SequenceSubEntryMode mode, int frameIndex, int abortVal); int add(int spriteListIndex, int v0, int v1, char field_24, int timeoutTicks, int extraTicks, int numTicks, - int height, int width, char field_12, char scale, char depth, int frameInc, SpriteAnimType animType, + int height, int width, char field_12, char scale, uint8 depth, int frameInc, SpriteAnimType animType, int numSprites, int frameStart); void remove(int timerIndex); void setSpriteSlot(int timerIndex, MadsSpriteSlot &spriteSlot); diff --git a/engines/m4/rails.cpp b/engines/m4/rails.cpp index 56faf204f0..fbad6995eb 100644 --- a/engines/m4/rails.cpp +++ b/engines/m4/rails.cpp @@ -95,6 +95,12 @@ bool Rails::isLineWalkable(int x0, int y0, int x1, int y1) { return isWalkableData.result; } +uint8 Rails::getDepth(const Common::Point &pt) { + // TODO: Check based on sceneResources + const byte *b = _walkCodes->getBasePtr(pt.x, pt.y); + return *b & 0xf; +} + // helper function uint8 getEndCode(int32 x, int32 y, Common::Rect rect) { uint8 endCode = 0; diff --git a/engines/m4/rails.h b/engines/m4/rails.h index d7320eef4d..a7add5a8eb 100644 --- a/engines/m4/rails.h +++ b/engines/m4/rails.h @@ -72,6 +72,7 @@ public: void setCodeSurface(M4Surface *surface) { _walkCodes = surface; } void clearRails(); int32 addRailNode(int32 x, int32 y, bool restoreEdges); + uint8 getDepth(const Common::Point &pt); private: Common::Array<RailNode *> _nodes; |