some BOMP support,
some fixes svn-id: r3506
This commit is contained in:
parent
38e2a886ce
commit
1c0a7cd2e7
11 changed files with 141 additions and 32 deletions
91
gfx.cpp
91
gfx.cpp
|
@ -1998,4 +1998,95 @@ int Scumm::remapPaletteColor(byte r, byte g, byte b, uint threshold) {
|
|||
|
||||
void Scumm::setupShadowPalette(int slot,int rfact,int gfact,int bfact,int from,int to) {
|
||||
|
||||
}
|
||||
|
||||
void Scumm::drawBomp(BompDrawData *bd) {
|
||||
byte *dest = bd->out + bd->y * bd->outwidth, *src;
|
||||
int h = bd->srcheight;
|
||||
bool inside;
|
||||
|
||||
if (h==0 || bd->srcwidth==0)
|
||||
return;
|
||||
|
||||
inside = (bd->x>=0) && (bd->y>=0) &&
|
||||
(bd->x <= bd->outwidth - bd->srcwidth) &&
|
||||
(bd->y <= bd->outheight - bd->srcheight);
|
||||
assert(_objs[2].obj_nr == 36);
|
||||
|
||||
if (1 || bd->scale_x==255 && bd->scale_y==255) {
|
||||
/* Routine used when no scaling is needed */
|
||||
if (inside) {
|
||||
dest += bd->x;
|
||||
src = bd->dataptr;
|
||||
do {
|
||||
byte code,color;
|
||||
uint len = bd->srcwidth, num, i;
|
||||
byte *d = dest;
|
||||
src += 2;
|
||||
do {
|
||||
code = *src++;
|
||||
num = (code>>1)+1;
|
||||
if (num>len) num=len;
|
||||
len -= num;
|
||||
if (code&1) {
|
||||
color = *src++;
|
||||
if (color!=255) {
|
||||
do *d++ = color; while (--num);
|
||||
} else {
|
||||
d += num;
|
||||
}
|
||||
} else {
|
||||
for(i=0;i<num; i++)
|
||||
if ( (color=src[i]) != 255)
|
||||
d[i] = color;
|
||||
d += num;
|
||||
src += num;
|
||||
}
|
||||
} while (len);
|
||||
dest += bd->outwidth;
|
||||
} while (--h);
|
||||
} else {
|
||||
uint y = bd->y;
|
||||
src = bd->dataptr;
|
||||
|
||||
do {
|
||||
byte color,code;
|
||||
uint len, num;
|
||||
uint x;
|
||||
if ((uint)y >= (uint)bd->outheight) {
|
||||
src += READ_LE_UINT16(src) + 2;
|
||||
continue;
|
||||
}
|
||||
len = bd->srcwidth;
|
||||
x = bd->x;
|
||||
|
||||
src += 2;
|
||||
do {
|
||||
byte code = *src++;
|
||||
num = (code>>1)+1;
|
||||
if (num>len) num=len;
|
||||
len -= num;
|
||||
if (code&1) {
|
||||
if ((color = *src++)!=255) {
|
||||
do {
|
||||
if ((uint)x < (uint)bd->outwidth)
|
||||
dest[x] = color;
|
||||
} while (++x,--num);
|
||||
} else {
|
||||
x += num;
|
||||
}
|
||||
} else {
|
||||
do {
|
||||
if ((color=*src++) != 255 && (uint)x < (uint)bd->outwidth)
|
||||
dest[x] = color;
|
||||
} while (++x,--num);
|
||||
}
|
||||
} while (len);
|
||||
} while (dest += bd->outwidth,y++,--h);
|
||||
}
|
||||
} else {
|
||||
/* scaling of bomp images not supported yet */
|
||||
}
|
||||
CHECK_HEAP
|
||||
assert(_objs[2].obj_nr == 36);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue