version 1.1 | | version 1.2 |
---|
| | |
extern hashtable AllBitmapsNames; | | extern hashtable AllBitmapsNames; |
extern hashtable AllDigiSndNames; | | extern hashtable AllDigiSndNames; |
| | |
| | #if 0 // removed memory saving extra bitmap structure hack |
struct bm_info { | | struct bm_info { |
short bm_w,bm_h; | | short bm_w,bm_h; |
ubyte bm_flags; | | ubyte bm_flags; |
ubyte avg_color; | | ubyte avg_color; |
ubyte *bm_data; | | ubyte *bm_data; |
}; | | }; |
| | #endif |
| | |
struct snd_info { | | struct snd_info { |
unsigned int length; | | unsigned int length; |
ubyte *data; | | ubyte *data; |
}; | | }; |
| | |
struct bm_info BitmapOriginal[MAX_BITMAP_FILES]; | | grs_bitmap BitmapOriginal[MAX_BITMAP_FILES]; |
struct snd_info SoundOriginal[MAX_SOUND_FILES]; | | struct snd_info SoundOriginal[MAX_SOUND_FILES]; |
| | |
extern void gr_bm_bitblt(int w, int h, int dx, int dy, int sx, int sy, grs_bitmap * src, grs_bitmap * dest); | | extern void gr_bm_bitblt(int w, int h, int dx, int dy, int sx, int sy, grs_bitmap * src, grs_bitmap * dest); |
| | |
if ((unsigned int)num_bitmaps <= MAX_BITMAP_FILES) { // <v1.4 pig? | | if ((unsigned int)num_bitmaps <= MAX_BITMAP_FILES) { // <v1.4 pig? |
cfseek(f, 8, SEEK_SET); | | cfseek(f, 8, SEEK_SET); |
data_ofs = 8; | | data_ofs = 8; |
} else if ((unsigned int)num_bitmaps < cfilelength(f)) { // >=v1.4 pig? | | } else if (num_bitmaps > 0 && num_bitmaps < cfilelength(f)) { // >=v1.4 pig? |
cfseek(f, num_bitmaps, SEEK_SET); | | cfseek(f, num_bitmaps, SEEK_SET); |
data_ofs = num_bitmaps + 8; | | data_ofs = num_bitmaps + 8; |
num_bitmaps = read_int(f); | | num_bitmaps = read_int(f); |
| | |
goto err; | | goto err; |
bmp = &GameBitmaps[x]; | | bmp = &GameBitmaps[x]; |
if (BitmapOriginal[x].bm_flags & 0x80) // already customized? | | if (BitmapOriginal[x].bm_flags & 0x80) // already customized? |
gr_free_bitmap_data((grs_bitmap *) &bmp); | | gr_free_bitmap_data(bmp); |
// free(bmp->bm_data); | | // free(bmp->bm_data); |
else { | | else { |
| | // save original bitmap info |
| | BitmapOriginal[x] = *bmp; |
| | BitmapOriginal[x].bm_flags |= 0x80; |
if (GameBitmapOffset[x]) { // from pig? | | if (GameBitmapOffset[x]) { // from pig? |
gr_init_bitmap ((grs_bitmap *) &BitmapOriginal[x], bmp->bm_type, 0, 0, bmp->bm_w, bmp->bm_h, bmp->bm_rowsize, (ubyte *)GameBitmapOffset[x]); | | |
BitmapOriginal[x].bm_flags |= BM_FLAG_PAGED_OUT; | | BitmapOriginal[x].bm_flags |= BM_FLAG_PAGED_OUT; |
} | | BitmapOriginal[x].bm_data = (ubyte *)GameBitmapOffset[x]; |
else | | |
{ | | |
gr_init_bitmap ((grs_bitmap *) &BitmapOriginal [x], bmp->bm_type, 0, 0, bmp->bm_w, bmp->bm_h, bmp->bm_rowsize, 0); | | |
gr_bm_bitblt (bmp->bm_w, bmp->bm_h, 0, 0, 0, 0, (grs_bitmap *) &bmp,(grs_bitmap *) &BitmapOriginal [x]); | | |
} | | } |
} | | } |
GameBitmapOffset[x] = 0; // not in pig | | GameBitmapOffset[x] = 0; // not in pig |
gr_init_bitmap ((grs_bitmap *) &bmp, 0, 0, 0, cip->width, cip->height, cip->width, p); | | #ifndef NDEBUG |
| | memset(bmp, 0, sizeof(*bmp)); |
| | #endif |
| | gr_init_bitmap (bmp, 0, 0, 0, cip->width, cip->height, |
| | cip->width, p); |
gr_set_bitmap_flags(bmp, cip->flags & 255); | | gr_set_bitmap_flags(bmp, cip->flags & 255); |
| | |
/* | | |
BitmapOriginal[x].bm_w = bmp->bm_w; | | |
BitmapOriginal[x].bm_h = bmp->bm_h; | | |
BitmapOriginal[x].bm_flags = bmp->bm_flags | 0x80; | | |
BitmapOriginal[x].avg_color = bmp->avg_color; | | |
if (GameBitmapOffset[x]) { // from pig? | | |
BitmapOriginal[x].bm_flags |= BM_FLAG_PAGED_OUT; | | |
BitmapOriginal[x].bm_data = (ubyte *)GameBitmapOffset[x]; | | |
} else | | |
BitmapOriginal[x].bm_data = bmp->bm_data; | | |
| | |
| | |
} | | |
GameBitmapOffset[x] = 0; // not in pig | | |
bmp->bm_w = bmp->bm_rowsize = cip->width; | | |
bmp->bm_h = cip->height; | | |
bmp->bm_flags = cip->flags & 255; | | |
bmp->bm_data = p; | | |
*/ | | |
| | |
bmp->avg_color = cip->flags >> 8; | | bmp->avg_color = cip->flags >> 8; |
| | |
#ifdef BITMAP_SELECTOR | | #ifdef BITMAP_SELECTOR |
if ( bmp->bm_selector ) | | if ( bmp->bm_selector ) |
if (!dpmi_modify_selector_base( bmp->bm_selector, bmp->bm_data )) | | if (!dpmi_modify_selector_base( bmp->bm_selector, bmp->bm_data )) |
| | |
} | | } |
if (cfread(p, 1, j, f) < 1) | | if (cfread(p, 1, j, f) < 1) |
goto err; | | goto err; |
| | #ifdef D1XD3D |
| | // needed to store rle flag |
| | gr_set_bitmap_data(bmp, bmp->bm_data); |
| | #endif |
} else if ((x + 1) < 0) { | | } else if ((x + 1) < 0) { |
cfseek( f, cip->offset, SEEK_SET ); | | cfseek( f, cip->offset, SEEK_SET ); |
snd = &GameSounds[x & 0x7fffffff]; | | snd = &GameSounds[x & 0x7fffffff]; |
| | |
// undo customized items | | // undo customized items |
void custom_remove() { | | void custom_remove() { |
int i; | | int i; |
struct bm_info *bmo = BitmapOriginal; | | grs_bitmap *bmo = BitmapOriginal; |
grs_bitmap *bmp = GameBitmaps; | | grs_bitmap *bmp = GameBitmaps; |
| | |
for (i = 0; i < MAX_BITMAP_FILES; bmo++, bmp++, i++) | | for (i = 0; i < MAX_BITMAP_FILES; bmo++, bmp++, i++) |
if (bmo->bm_flags & 0x80) { | | if (bmo->bm_flags & 0x80) { |
gr_free_bitmap_data((grs_bitmap *) &bmp); | | gr_free_bitmap_data(bmp); |
| | *bmp = *bmo; |
| | |
bmp->bm_w = bmo->bm_w; | | |
bmp->bm_h = bmo->bm_h; | | |
bmp->avg_color = bmo->avg_color; | | |
if (bmo->bm_flags & BM_FLAG_PAGED_OUT) { | | if (bmo->bm_flags & BM_FLAG_PAGED_OUT) { |
GameBitmapOffset[i] = (int)BitmapOriginal[i].bm_data; | | GameBitmapOffset[i] = (int)BitmapOriginal[i].bm_data; |
bmp->bm_flags = BM_FLAG_PAGED_OUT; | | gr_set_bitmap_flags(bmp, BM_FLAG_PAGED_OUT); |
// gr_set_bitmap_data (bmp, Piggy_bitmap_cache_data); | | gr_set_bitmap_data(bmp, Piggy_bitmap_cache_data); |
gr_set_bitmap_data ((grs_bitmap *) bmp, NULL); | | |
} else { | | } else { |
bmp->bm_flags = bmo->bm_flags & 0x7f; | | gr_set_bitmap_flags(bmp, bmo->bm_flags & 0x7f); |
gr_set_bitmap_data (bmp, bmo->bm_data); | | |
| | |
#ifdef BITMAP_SELECTOR | | #ifdef BITMAP_SELECTOR |
if ( bmp->bm_selector ) | | if ( bmp->bm_selector ) |
if (!dpmi_modify_selector_base( bmp->bm_selector, bmp->bm_data )) | | if (!dpmi_modify_selector_base( bmp->bm_selector, bmp->bm_data )) |
Error( "Error modifying selector base in custom.c\n" ); | | Error( "Error modifying selector base in custom.c\n" ); |
#endif | | #endif |
| | #ifdef D1XD3D |
| | gr_set_bitmap_data(bmp, bmp->bm_data); |
| | #endif |
} | | } |
bmo->bm_flags = 0; | | bmo->bm_flags = 0; |
} | | } |