mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-23 18:24:59 +00:00
cyx's WIP for sprites. Implemented spritesBlitToScreen
svn-id: r16852
This commit is contained in:
parent
6409a3c4e4
commit
6dd4854ba4
@ -935,9 +935,9 @@ protected:
|
|||||||
|
|
||||||
void spritesAllocTables(int numSprites, int numGroups, int numImgSprites);
|
void spritesAllocTables(int numSprites, int numGroups, int numImgSprites);
|
||||||
void spritesResetTables(bool refreshScreen);
|
void spritesResetTables(bool refreshScreen);
|
||||||
void spriteGroupCheck(int sprGrpId);
|
void spriteGroupCheck(int spriteGroupId);
|
||||||
void spriteMarkIfInGroup(int sprGrpId, uint32 flags);
|
void spriteMarkIfInGroup(int spriteGroupId, uint32 flags);
|
||||||
|
void spritesBlitToScreen();
|
||||||
void spriteInfoSet_addImageToList(int spriteId, int imageNum, int *spriteIdptr);
|
void spriteInfoSet_addImageToList(int spriteId, int imageNum, int *spriteIdptr);
|
||||||
|
|
||||||
/* HE version 90 script opcodes */
|
/* HE version 90 script opcodes */
|
||||||
|
@ -543,12 +543,63 @@ void ScummEngine_v90he::spritesResetTables(bool refreshScreen) {
|
|||||||
_numSpritesToProcess = 0;
|
_numSpritesToProcess = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScummEngine_v90he::spriteGroupCheck(int sprGrpId) {
|
void ScummEngine_v90he::spriteGroupCheck(int spriteGroupId) {
|
||||||
// XXX
|
checkRange(_varNumSpriteGroups, 1, spriteGroupId, "Invalid sprite group %d");
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScummEngine_v90he::spriteMarkIfInGroup(int sprGrpId, uint32 flags) {
|
void ScummEngine_v90he::spriteMarkIfInGroup(int spriteGroupId, uint32 flags) {
|
||||||
// XXX
|
checkRange(_varNumSpriteGroups, 1, spriteGroupId, "Invalid sprite group %d");
|
||||||
|
for (int i = 0; i < _numSpritesToProcess; ++i) {
|
||||||
|
SpriteInfo *spi = _activeSpritesTable[i];
|
||||||
|
if (spi->group_num == spriteGroupId) {
|
||||||
|
spi->flags |= flags;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScummEngine_v90he::spritesBlitToScreen() {
|
||||||
|
int xmin, xmax, ymin, ymax;
|
||||||
|
xmin = ymin = 1234;
|
||||||
|
xmax = ymax = -1234;
|
||||||
|
bool firstLoop = true;
|
||||||
|
bool refreshScreen = false;
|
||||||
|
for (int i = 0; i < _numSpritesToProcess; ++i) {
|
||||||
|
SpriteInfo *spi = _activeSpritesTable[i];
|
||||||
|
if (!(spi->flags & kSF31) && (spi->flags & kSF01)) {
|
||||||
|
spi->flags &= ~kSF01;
|
||||||
|
if (spi->bbox_xmin <= spi->bbox_xmax && spi->bbox_ymin <= spi->bbox_ymax) {
|
||||||
|
if (spi->flags & kSF26) {
|
||||||
|
gdi.copyVirtScreenBuffers(Common::Rect(spi->bbox_xmin, spi->bbox_ymin, spi->bbox_ymin, spi->bbox_ymax)); // XXX 0, 0x40000000);
|
||||||
|
}
|
||||||
|
} else if (firstLoop) {
|
||||||
|
xmin = spi->bbox_xmin;
|
||||||
|
ymin = spi->bbox_ymin;
|
||||||
|
xmax = spi->bbox_xmax;
|
||||||
|
ymax = spi->bbox_ymax;
|
||||||
|
firstLoop = false;
|
||||||
|
} else {
|
||||||
|
if (xmin < spi->bbox_xmin) {
|
||||||
|
xmin = spi->bbox_xmin;
|
||||||
|
}
|
||||||
|
if (ymin < spi->bbox_ymin) {
|
||||||
|
ymin = spi->bbox_ymin;
|
||||||
|
}
|
||||||
|
if (xmax > spi->bbox_xmax) {
|
||||||
|
xmax = spi->bbox_xmax;
|
||||||
|
}
|
||||||
|
if (ymax > spi->bbox_ymax) {
|
||||||
|
ymax = spi->bbox_ymax;
|
||||||
|
}
|
||||||
|
refreshScreen = true;
|
||||||
|
}
|
||||||
|
if (!(spi->flags & (kSF02 | kSF30)) && (spi->res_id != 0)) {
|
||||||
|
spi->flags |= kSF02;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (refreshScreen) {
|
||||||
|
gdi.copyVirtScreenBuffers(Common::Rect(xmin, ymin, xmax, ymax)); // , 0, 0x40000000);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} // End of namespace Scumm
|
} // End of namespace Scumm
|
||||||
|
@ -27,7 +27,7 @@ namespace Scumm {
|
|||||||
|
|
||||||
enum SpriteFlags {
|
enum SpriteFlags {
|
||||||
kSF01 = (1 << 0),
|
kSF01 = (1 << 0),
|
||||||
kSF02 = (1 << 1),
|
kSF02 = (1 << 1), // kSFNeedRedraw
|
||||||
kSF03 = (1 << 2),
|
kSF03 = (1 << 2),
|
||||||
kSF04 = (1 << 3),
|
kSF04 = (1 << 3),
|
||||||
kSFZoomed = (1 << 4),
|
kSFZoomed = (1 << 4),
|
||||||
@ -51,7 +51,7 @@ enum SpriteFlags {
|
|||||||
kSF23 = (1 << 22),
|
kSF23 = (1 << 22),
|
||||||
kSF24 = (1 << 23),
|
kSF24 = (1 << 23),
|
||||||
kSF25 = (1 << 24),
|
kSF25 = (1 << 24),
|
||||||
kSF26 = (1 << 25),
|
kSF26 = (1 << 25), // kSFBlitDirectly
|
||||||
kSF27 = (1 << 26),
|
kSF27 = (1 << 26),
|
||||||
kSF28 = (1 << 27),
|
kSF28 = (1 << 27),
|
||||||
kSF29 = (1 << 28),
|
kSF29 = (1 << 28),
|
||||||
|
Loading…
Reference in New Issue
Block a user