| 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; |
| } | | } |