MADS: Add enum for sprite asset loading flags
This commit is contained in:
parent
01e61a2837
commit
7ab00631dd
5 changed files with 30 additions and 10 deletions
|
@ -76,7 +76,7 @@ void SpriteAsset::load(Common::SeekableReadStream *stream, int flags) {
|
|||
spriteStream->skip(32);
|
||||
_frameCount = spriteStream->readUint16LE();
|
||||
|
||||
if ((flags & SPRITE_SET_CHAR_INFO) == 0)
|
||||
if ((flags & ASSET_CHAR_INFO) == 0)
|
||||
_charInfo = nullptr;
|
||||
else
|
||||
_charInfo = new SpriteSetCharInfo(spriteStream);
|
||||
|
@ -98,7 +98,7 @@ void SpriteAsset::load(Common::SeekableReadStream *stream, int flags) {
|
|||
delete palStream;
|
||||
|
||||
// Process the palette data
|
||||
if (flags & 9) {
|
||||
if (flags & (ASSET_TRANSLATE | ASSET_SPINNING_OBJECT)) {
|
||||
_usageIndex = 0;
|
||||
|
||||
if (flags & 8) {
|
||||
|
|
|
@ -29,7 +29,10 @@
|
|||
|
||||
namespace MADS {
|
||||
|
||||
#define SPRITE_SET_CHAR_INFO 4
|
||||
enum AssetFlags {
|
||||
ASSET_TRANSLATE = 1, ASSET_HEADER_ONLY = 2, ASSET_CHAR_INFO = 4,
|
||||
ASSET_SPINNING_OBJECT = 8
|
||||
};
|
||||
|
||||
class MADSEngine;
|
||||
class MSprite;
|
||||
|
|
|
@ -36,8 +36,6 @@ enum {
|
|||
kMarker = 2
|
||||
};
|
||||
|
||||
#define TRANSPARENT_COLOR_INDEX 0xFF
|
||||
|
||||
class DepthEntry {
|
||||
public:
|
||||
int depth;
|
||||
|
@ -61,7 +59,7 @@ MSprite::MSprite()
|
|||
MSprite::MSprite(Common::SeekableReadStream *source, const Common::Array<RGB6> &palette,
|
||||
const Common::Rect &bounds)
|
||||
: MSurface(bounds.width(), bounds.height()),
|
||||
_offset(Common::Point(bounds.left, bounds.top)) {
|
||||
_offset(Common::Point(bounds.left, bounds.top)), _transparencyIndex(0xFF) {
|
||||
// Load the sprite data
|
||||
loadSprite(source, palette);
|
||||
}
|
||||
|
@ -123,16 +121,34 @@ void MSprite::loadSprite(Common::SeekableReadStream *source,
|
|||
}
|
||||
}
|
||||
|
||||
// Do a final iteration over the sprite to convert it's pixels to
|
||||
// the final positions in the main palette
|
||||
// Do a first post-sprite generation loop to find a pixel that the sprite
|
||||
// will not use to designate as the transparency
|
||||
bool colorUsed[PALETTE_COUNT];
|
||||
Common::fill(&colorUsed[0], &colorUsed[PALETTE_COUNT], false);
|
||||
for (outp = getData(); spriteSize > 0; --spriteSize, ++outp) {
|
||||
if (*outp != transIndex)
|
||||
colorUsed[palette[*outp]._palIndex] = true;
|
||||
}
|
||||
|
||||
_transparencyIndex = PALETTE_COUNT - 1;
|
||||
while (_transparencyIndex >= 0 && colorUsed[_transparencyIndex])
|
||||
--_transparencyIndex;
|
||||
assert(_transparencyIndex >= 0);
|
||||
|
||||
// Do a final iteration over the sprite to convert it's pixels to
|
||||
// the final positions in the main palette
|
||||
spriteSize = this->w * this->h;
|
||||
for (outp = getData(); spriteSize > 0; --spriteSize, ++outp) {
|
||||
if (*outp != transIndex) {
|
||||
*outp = palette[*outp]._palIndex;
|
||||
} else {
|
||||
*outp = _transparencyIndex;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
byte MSprite::getTransparencyIndex() const {
|
||||
return TRANSPARENT_COLOR_INDEX;
|
||||
return _transparencyIndex;
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------------*/
|
||||
|
|
|
@ -117,6 +117,7 @@ public:
|
|||
virtual ~MSprite();
|
||||
|
||||
Common::Point _offset;
|
||||
int _transparencyIndex;
|
||||
|
||||
byte getTransparencyIndex() const;
|
||||
};
|
||||
|
|
|
@ -845,7 +845,7 @@ void UserInterface::loadInventoryAnim(int objectId) {
|
|||
|
||||
if (_vm->_invObjectsAnimated) {
|
||||
Common::String resName = Common::String::format("*OB%.3dI", objectId);
|
||||
SpriteAsset *asset = new SpriteAsset(_vm, resName, 8);
|
||||
SpriteAsset *asset = new SpriteAsset(_vm, resName, ASSET_SPINNING_OBJECT);
|
||||
_invSpritesIndex = scene._sprites.add(asset, 1);
|
||||
if (_invSpritesIndex >= 0) {
|
||||
_invFrameNumber = 1;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue