aboutsummaryrefslogtreecommitdiff
path: root/engines/agi/sprite.cpp
diff options
context:
space:
mode:
authorKari Salminen2007-06-20 23:56:08 +0000
committerKari Salminen2007-06-20 23:56:08 +0000
commitc8bbb6140f05b14515f132481dbbe5af09bdd4aa (patch)
tree41909c39325cde453a697bbc996f9c7fe46904ff /engines/agi/sprite.cpp
parent0ebf986a1ff35b4a13ab37485421f9634c032700 (diff)
downloadscummvm-rg350-c8bbb6140f05b14515f132481dbbe5af09bdd4aa.tar.gz
scummvm-rg350-c8bbb6140f05b14515f132481dbbe5af09bdd4aa.tar.bz2
scummvm-rg350-c8bbb6140f05b14515f132481dbbe5af09bdd4aa.zip
Add AGI256-2 support (On top of already present AGI256 support).
AGI256-2 means handling 256 color views/sprites (AGI256 means handling 256 color picture resources). The code can now handle both 16 color and 256 color views/sprites in the same game. FIXME: Background in AGI256-2 demo may be incorrect. svn-id: r27572
Diffstat (limited to 'engines/agi/sprite.cpp')
-rw-r--r--engines/agi/sprite.cpp12
1 files changed, 6 insertions, 6 deletions
diff --git a/engines/agi/sprite.cpp b/engines/agi/sprite.cpp
index 7938d05052..3d69968075 100644
--- a/engines/agi/sprite.cpp
+++ b/engines/agi/sprite.cpp
@@ -136,7 +136,7 @@ void SpritesMgr::blitPixel(uint8 *p, uint8 *end, uint8 col, int spr, int width,
}
-int SpritesMgr::blitCel(int x, int y, int spr, ViewCel *c) {
+int SpritesMgr::blitCel(int x, int y, int spr, ViewCel *c, bool agi256_2) {
uint8 *p0, *p, *q = NULL, *end;
int i, j, t, m, col;
int hidden = true;
@@ -162,8 +162,8 @@ int SpritesMgr::blitCel(int x, int y, int spr, ViewCel *c) {
for (i = 0; i < c->height; i++) {
p = p0;
while (*q) {
- col = (*q & 0xf0) >> 4;
- for (j = *q & 0x0f; j; j--, p += 1 - 2 * m) {
+ col = agi256_2 ? *q : (*q & 0xf0) >> 4; // Uses whole byte for color info with AGI256-2
+ for (j = agi256_2 ? 1 : *q & 0x0f; j; j--, p += 1 - 2 * m) { // No RLE with AGI256-2
if (col != t) {
blitPixel(p, end, col, spr, _WIDTH, &hidden);
}
@@ -455,7 +455,7 @@ void SpritesMgr::blitSprites(SpriteList& l) {
Sprite *s = *iter;
objsSaveArea(s);
debugC(8, kDebugLevelSprites, "s->v->entry = %d (prio %d)", s->v->entry, s->v->priority);
- hidden = blitCel(s->xPos, s->yPos, s->v->priority, s->v->celData);
+ hidden = blitCel(s->xPos, s->yPos, s->v->priority, s->v->celData, s->v->viewData->agi256_2);
if (s->v->entry == 0) { /* if ego, update f1 */
_vm->setflag(fEgoInvisible, hidden);
}
@@ -613,7 +613,7 @@ void SpritesMgr::addToPic(int view, int loop, int cel, int x, int y, int pri, in
eraseBoth();
debugC(4, kDebugLevelSprites, "blit_cel (%d, %d, %d, c)", x, y, pri);
- blitCel(x1, y1, pri, c);
+ blitCel(x1, y1, pri, c, _vm->_game.views[view].agi256_2);
/* If margin is 0, 1, 2, or 3, the base of the cel is
* surrounded with a rectangle of the corresponding priority.
@@ -691,7 +691,7 @@ void SpritesMgr::showObj(int n) {
s.buffer = (uint8 *)malloc(s.xSize * s.ySize);
objsSaveArea(&s);
- blitCel(x1, y1, s.xSize, c);
+ blitCel(x1, y1, s.xSize, c, _vm->_game.views[n].agi256_2);
commitBlock(x1, y1, x2, y2);
_vm->messageBox(_vm->_game.views[n].descr);
objsRestoreArea(&s);