diff options
author | Alyssa Milburn | 2011-11-05 10:47:24 +0100 |
---|---|---|
committer | Alyssa Milburn | 2011-11-05 10:47:39 +0100 |
commit | c2cb1019a697943f9afd3c5dd6253f5f76be9033 (patch) | |
tree | 97d1cc50fc2fd4f570f31b9528eb08a79f2a0012 | |
parent | 149fc6f1203e17212ee97b77fd168086e701705f (diff) | |
download | scummvm-rg350-c2cb1019a697943f9afd3c5dd6253f5f76be9033.tar.gz scummvm-rg350-c2cb1019a697943f9afd3c5dd6253f5f76be9033.tar.bz2 scummvm-rg350-c2cb1019a697943f9afd3c5dd6253f5f76be9033.zip |
COMPOSER: Parse ambients (V1 sprite buttons).
-rw-r--r-- | engines/composer/composer.cpp | 27 | ||||
-rw-r--r-- | engines/composer/composer.h | 1 | ||||
-rw-r--r-- | engines/composer/resource.h | 1 |
3 files changed, 29 insertions, 0 deletions
diff --git a/engines/composer/composer.cpp b/engines/composer/composer.cpp index 5c66d9f0bf..af08ad6e07 100644 --- a/engines/composer/composer.cpp +++ b/engines/composer/composer.cpp @@ -399,6 +399,13 @@ void ComposerEngine::loadLibrary(uint id) { newLib._buttons.push_back(button); } + Common::Array<uint16> ambientResources = library._archive->getResourceIDList(ID_AMBI); + for (uint i = 0; i < ambientResources.size(); i++) { + Common::SeekableReadStream *stream = library._archive->getResource(ID_AMBI, ambientResources[i]); + Button button(stream); + newLib._buttons.insert(newLib._buttons.begin(), button); + } + // add background sprite, if it exists if (hasResource(ID_BMAP, 1000)) setBackground(1000); @@ -526,6 +533,26 @@ Button::Button(Common::SeekableReadStream *stream, uint16 id, uint gameType) { delete stream; } +// AMBI-style button +Button::Button(Common::SeekableReadStream *stream) { + _id = 0; + _zorder = 0; + _active = true; + _type = kButtonSprites; + _scriptIdRollOn = 0; + _scriptIdRollOff = 0; + + _scriptId = stream->readUint16LE(); + + uint16 count = stream->readUint16LE(); + for (uint j = 0; j < count; j++) { + uint16 spriteId = stream->readUint16LE(); + _spriteIds.push_back(spriteId); + } + + delete stream; +} + bool Button::contains(const Common::Point &pos) const { switch (_type) { case kButtonRect: diff --git a/engines/composer/composer.h b/engines/composer/composer.h index 0d11817b9f..d92add1e71 100644 --- a/engines/composer/composer.h +++ b/engines/composer/composer.h @@ -69,6 +69,7 @@ class Button { public: Button() { } Button(Common::SeekableReadStream *stream, uint16 id, uint gameType); + Button(Common::SeekableReadStream *stream); bool contains(const Common::Point &pos) const; diff --git a/engines/composer/resource.h b/engines/composer/resource.h index e2ce23511f..aeaa5b9c88 100644 --- a/engines/composer/resource.h +++ b/engines/composer/resource.h @@ -35,6 +35,7 @@ struct Animation; #define ID_LBRC MKTAG('L','B','R','C') // Main FourCC +#define ID_AMBI MKTAG('A','M','B','I') // Ambient (v1 sprite button) #define ID_ANIM MKTAG('A','N','I','M') // Animation #define ID_BMAP MKTAG('B','M','A','P') // Bitmap #define ID_BUTN MKTAG('B','U','T','N') // Button |