MADS: Fix for loading animation data

This commit is contained in:
Paul Gilbert 2014-03-08 08:59:10 -05:00
parent 8d3857c053
commit 0f214e4c9d
2 changed files with 12 additions and 5 deletions

View File

@ -207,10 +207,11 @@ void Animation::load(MSurface &depthSurface, InterfaceSurface &interfaceSurface,
for (int i = 0; i < _header._spriteSetsCount; ++i)
_spriteListIndexes.push_back(-1);
int streamIndex = 1;
_messages.clear();
if (_header._messagesCount > 0) {
// Chunk 2: Following is a list of any messages for the animation
Common::SeekableReadStream *msgStream = madsPack.getItemStream(1);
Common::SeekableReadStream *msgStream = madsPack.getItemStream(streamIndex++);
for (int i = 0; i < _header._messagesCount; ++i) {
AnimMessage rec;
@ -224,7 +225,7 @@ void Animation::load(MSurface &depthSurface, InterfaceSurface &interfaceSurface,
_frameEntries.clear();
if (_header._frameEntriesCount > 0) {
// Chunk 3: animation frame info
Common::SeekableReadStream *frameStream = madsPack.getItemStream(2);
Common::SeekableReadStream *frameStream = madsPack.getItemStream(streamIndex++);
for (int i = 0; i < _header._frameEntriesCount; i++) {
AnimFrameEntry rec;
@ -238,7 +239,7 @@ void Animation::load(MSurface &depthSurface, InterfaceSurface &interfaceSurface,
_miscEntries.clear();
if (_header._miscEntriesCount > 0) {
// Chunk 4: Misc Data
Common::SeekableReadStream *miscStream = madsPack.getItemStream(3);
Common::SeekableReadStream *miscStream = madsPack.getItemStream(streamIndex++);
for (int i = 0; i < _header._miscEntriesCount; ++i) {
AnimMiscEntry rec;

View File

@ -54,9 +54,15 @@ public:
~MadsPack();
int getCount() const { return _count; }
MadsPackEntry &getItem(int index) const { return _items[index]; }
MadsPackEntry &operator[](int index) const { return _items[index]; }
MadsPackEntry &getItem(int index) const {
assert(index < _count);
return _items[index]; }
MadsPackEntry &operator[](int index) const {
assert(index < _count);
return _items[index];
}
Common::MemoryReadStream *getItemStream(int index) {
assert(index < _count);
return new Common::MemoryReadStream(_items[index].data, _items[index].size,
DisposeAfterUse::NO);
}