diff options
-rw-r--r-- | engines/scumm/boxes.cpp | 9 | ||||
-rw-r--r-- | engines/scumm/costume.cpp | 12 |
2 files changed, 12 insertions, 9 deletions
diff --git a/engines/scumm/boxes.cpp b/engines/scumm/boxes.cpp index 65b6ebd75c..e3c4d7fe10 100644 --- a/engines/scumm/boxes.cpp +++ b/engines/scumm/boxes.cpp @@ -42,7 +42,7 @@ struct Box { /* Internal walkbox file format */ byte x2; byte y1; byte y2; - byte flags; + byte mask; } GCC_PACK c64; struct { @@ -111,8 +111,7 @@ byte ScummEngine::getMaskFromBox(int box) { if (_game.version == 8) return (byte) FROM_LE_32(ptr->v8.mask); else if (_game.id == GID_MANIAC && _game.platform == Common::kPlatformC64) - // No mask? - return 0; + return ptr->c64.mask; else if (_game.version <= 2) return ptr->v2.mask; else @@ -132,8 +131,6 @@ void ScummEngine::setBoxFlags(int box, int val) { return; if (_game.version == 8) ptr->v8.flags = TO_LE_32(val); - else if (_game.id == GID_MANIAC && _game.platform == Common::kPlatformC64) - ptr->c64.flags = val; else if (_game.version <= 2) ptr->v2.flags = val; else @@ -148,7 +145,7 @@ byte ScummEngine::getBoxFlags(int box) { if (_game.version == 8) return (byte) FROM_LE_32(ptr->v8.flags); else if (_game.id == GID_MANIAC && _game.platform == Common::kPlatformC64) - return ptr->c64.flags; + return 0; else if (_game.version <= 2) return ptr->v2.flags; else diff --git a/engines/scumm/costume.cpp b/engines/scumm/costume.cpp index af08f333a8..3b893bde15 100644 --- a/engines/scumm/costume.cpp +++ b/engines/scumm/costume.cpp @@ -981,11 +981,15 @@ static const byte actorColorsMMC64[25] = { 0, 7, 2, 6, 9, 1, 3, 7, 7, 1, 1, 9, 1, 4, 5, 5, 4, 1, 0, 5, 4, 2, 2, 7, 7 }; +#define MASK_AT(xoff) \ + (mask && (mask[((destX + xoff) / 8)] & revBitMask((destX + xoff) & 7))) #define LINE(c,p) \ pcolor = (color >> c) & 3; \ if (pcolor) { \ - dst[p] = palette[pcolor]; \ - dst[p + 1] = palette[pcolor]; \ + if (!MASK_AT(p)) \ + dst[p] = palette[pcolor]; \ + if (!MASK_AT(p + 1)) \ + dst[p + 1] = palette[pcolor]; \ } byte C64CostumeRenderer::drawLimb(const Actor *a, int limb) { @@ -1074,7 +1078,8 @@ byte C64CostumeRenderer::drawLimb(const Actor *a, int limb) { int destY = y + ypos; int destX = realX * 8 + xpos; if (destY >= 0 && destY < _out.h && destX >= 0 && destX < _out.w) { - byte *dst = &(((byte*)_out.pixels)[destY * _out.pitch + destX]); + byte *dst = (byte *)_out.pixels + destY * _out.pitch + destX; + byte *mask = _vm->getMaskBuffer(0, destY, _zbuf); if (flipped) { LINE(0, 0); LINE(2, 2); LINE(4, 4); LINE(6, 6); } else { @@ -1094,6 +1099,7 @@ byte C64CostumeRenderer::drawLimb(const Actor *a, int limb) { } #undef LINE +#undef MASK_AT void C64CostumeRenderer::setCostume(int costume, int shadow) { _loaded.loadCostume(costume); |