[Scummvm-cvs-logs] CVS: scummvm/saga sprite.cpp,1.76,1.77
Torbjörn Andersson
eriktorbjorn at users.sourceforge.net
Fri Jan 13 11:08:03 CET 2006
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/saga actor.cpp,1.208,1.209
- Next message: [Scummvm-cvs-logs] CVS: scummvm/saga actor.cpp,1.209,1.210 game.cpp,1.123,1.124 input.cpp,1.56,1.57 interface.cpp,1.164,1.165 interface.h,1.81,1.82 saga.cpp,1.151,1.152 scene.cpp,1.160,1.161 script.cpp,1.86,1.87 script.h,1.113,1.114 sfuncs.cpp,1.181,1.182
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/scummvm/scummvm/saga
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14294
Modified Files:
sprite.cpp
Log Message:
Hopefully fixed IHNM sprite clipping. (IHNM sprites are upside down
compared to ITE sprites, so to simplify things they are now flipped after
they are decoded.)
Index: sprite.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/sprite.cpp,v
retrieving revision 1.76
retrieving revision 1.77
diff -u -d -r1.76 -r1.77
--- sprite.cpp 18 Oct 2005 01:30:19 -0000 1.76
+++ sprite.cpp 13 Jan 2006 19:07:49 -0000 1.77
@@ -145,7 +145,22 @@
if (spriteInfo->decodedBuffer == NULL) {
memoryError("Sprite::loadList");
}
- memcpy(spriteInfo->decodedBuffer, _decodeBuf, outputLength);
+
+ // IHNM sprites are upside-down, for reasons which i can only
+ // assume are perverse. To simplify things, flip them now. Not
+ // at drawing time.
+
+ if (_vm->getGameType() == GType_IHNM) {
+ byte *src = _decodeBuf + spriteInfo->width * (spriteInfo->height - 1);
+ byte *dst = spriteInfo->decodedBuffer;
+
+ for (int j = 0; j < spriteInfo->height; j++) {
+ memcpy(dst, src, spriteInfo->width);
+ src -= spriteInfo->width;
+ dst += spriteInfo->width;
+ }
+ } else
+ memcpy(spriteInfo->decodedBuffer, _decodeBuf, outputLength);
}
free(spriteListData);
@@ -204,13 +219,6 @@
srcRowPointer += width * io;
}
- int traverseSign = 1;
-
- if (_vm->getGameType() == GType_IHNM) {
- traverseSign = -1;
- bufRowPointer += clipHeight * ds->pitch;
- }
-
for (i = io; i < clipHeight; i++) {
for (j = jo; j < clipWidth; j++) {
assert((byte *)ds->pixels <= (byte *)(bufRowPointer + j + spritePointer.x));
@@ -223,7 +231,7 @@
*(bufRowPointer + j + spritePointer.x) = *(srcRowPointer + j);
}
}
- bufRowPointer += ds->pitch * traverseSign;
+ bufRowPointer += ds->pitch;
srcRowPointer += width;
}
}
@@ -252,7 +260,6 @@
int yAlign, sph;
Point spritePointer;
-
getScaledSpriteBuffer(spriteList, spriteNumber, scale, width, height, xAlign, yAlign, spriteBuffer);
spw = (screenRect.width() - width) / 2;
sph = (screenRect.height() - height) / 2;
@@ -277,7 +284,6 @@
int yAlign;
Point spritePointer;
-
getScaledSpriteBuffer(spriteList, spriteNumber, scale, width, height, xAlign, yAlign, spriteBuffer);
spritePointer.x = screenCoord.x + xAlign;
@@ -318,7 +324,6 @@
byte *maskRowPointer;
int maskZ;
-
if (!_vm->_scene->isBGMaskPresent()) {
draw(ds, clipRect, spriteList, spriteNumber, screenCoord, scale);
return;
@@ -343,16 +348,9 @@
}
// Finally, draw the occluded sprite
- sourceRowPointer = spriteBuffer + clipData.drawSource.x + (clipData.drawSource.y * width);
- int traverseSign;
- if (_vm->getGameType() == GType_IHNM) {
- traverseSign = -1;
- destRowPointer = (byte *)ds->pixels + clipData.drawDest.x + ((clipData.drawDest.y + clipData.drawHeight) * ds->pitch);
- } else {
- traverseSign = 1;
- destRowPointer = (byte *)ds->pixels + clipData.drawDest.x + (clipData.drawDest.y * ds->pitch);
- }
+ sourceRowPointer = spriteBuffer + clipData.drawSource.x + (clipData.drawSource.y * width);
+ destRowPointer = (byte *)ds->pixels + clipData.drawDest.x + (clipData.drawDest.y * ds->pitch);
maskRowPointer = maskBuffer + clipData.drawDest.x + (clipData.drawDest.y * maskWidth);
for (y = 0; y < clipData.drawHeight; y++) {
@@ -370,7 +368,7 @@
destPointer++;
maskPointer++;
}
- destRowPointer += ds->pitch * traverseSign;
+ destRowPointer += ds->pitch;
maskRowPointer += maskWidth;
sourceRowPointer += width;
}
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/saga actor.cpp,1.208,1.209
- Next message: [Scummvm-cvs-logs] CVS: scummvm/saga actor.cpp,1.209,1.210 game.cpp,1.123,1.124 input.cpp,1.56,1.57 interface.cpp,1.164,1.165 interface.h,1.81,1.82 saga.cpp,1.151,1.152 scene.cpp,1.160,1.161 script.cpp,1.86,1.87 script.h,1.113,1.114 sfuncs.cpp,1.181,1.182
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Scummvm-git-logs
mailing list