From b33dbb689a64c0706006f3353fba50ff4af2c96b Mon Sep 17 00:00:00 2001 From: Bradley Bell Date: Sat, 22 Mar 2003 03:14:30 +0000 Subject: [PATCH] move bitmap replacement functions to piggy.c --- ChangeLog | 3 + main/gameseq.c | 212 +--------------------------------------------- main/piggy.c | 222 ++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 224 insertions(+), 213 deletions(-) diff --git a/ChangeLog b/ChangeLog index 78ff2573..bd147cfb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2003-03-21 Martin Schaffner + * main/gameseq.c, main/piggy.c, main/piggy.h: move bitmap + replacement functions to piggy.c + * main/gameseq.c: attempt to support mac d1 descent.pig * main/bm.c: fix mem leak diff --git a/main/gameseq.c b/main/gameseq.c index 8f0f0de9..f09b07ef 100644 --- a/main/gameseq.c +++ b/main/gameseq.c @@ -1,4 +1,4 @@ -/* $Id: gameseq.c,v 1.22 2003-03-22 02:41:42 btb Exp $ */ +/* $Id: gameseq.c,v 1.23 2003-03-22 03:14:30 btb Exp $ */ /* THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO @@ -17,7 +17,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #endif #ifdef RCS -char gameseq_rcsid[] = "$Id: gameseq.c,v 1.22 2003-03-22 02:41:42 btb Exp $"; +char gameseq_rcsid[] = "$Id: gameseq.c,v 1.23 2003-03-22 03:14:30 btb Exp $"; #endif #ifdef WINDOWS @@ -818,214 +818,6 @@ do_menu_again: return 1; } -extern void change_filename_extension( char *dest, char *src, char *new_ext ); -extern char last_palette_loaded_pig[]; - -ubyte *Bitmap_replacement_data=NULL; - -void free_bitmap_replacements() -{ - if (Bitmap_replacement_data) { - d_free(Bitmap_replacement_data); - Bitmap_replacement_data = NULL; - } -} - -void load_bitmap_replacements(char *level_name) -{ - char ifile_name[FILENAME_LEN]; - CFILE *ifile; - int i; - - //first, free up data allocated for old bitmaps - free_bitmap_replacements(); - - change_filename_extension(ifile_name, level_name, ".POG" ); - - ifile = cfopen(ifile_name,"rb"); - - if (ifile) { - int id,version,n_bitmaps; - int bitmap_data_size; - ushort *indices; - - id = cfile_read_int(ifile); - version = cfile_read_int(ifile); - - if (id != MAKE_SIG('G','O','P','D') || version != 1) { - cfclose(ifile); - return; - } - - n_bitmaps = cfile_read_int(ifile); - - MALLOC( indices, ushort, n_bitmaps ); - - for (i = 0; i < n_bitmaps; i++) - indices[i] = cfile_read_short(ifile); - - bitmap_data_size = cfilelength(ifile) - cftell(ifile) - DISKBITMAPHEADER_SIZE * n_bitmaps; - MALLOC( Bitmap_replacement_data, ubyte, bitmap_data_size ); - - for (i=0;i= FIRST_D1_TEXTURE && d1_index <= LAST_D1_STATIC_TEXTURE) { - d2_index = d1_index + FIRST_D2_TEXTURE - FIRST_D1_TEXTURE; - - cfseek(d1_Piggy_fp, bitmap_header_start + (d1_index-1) * DISKBITMAPHEADER_D1_SIZE, SEEK_SET); - DiskBitmapHeader_d1_read(&bmh, d1_Piggy_fp); - - memset( &temp_bitmap, 0, sizeof(grs_bitmap) ); - - temp_bitmap.bm_w = temp_bitmap.bm_rowsize = bmh.width + ((short) (bmh.wh_extra&0x0f)<<8); - temp_bitmap.bm_h = bmh.height + ((short) (bmh.wh_extra&0xf0)<<4); - temp_bitmap.avg_color = bmh.avg_color; - - //GameBitmapFlags[convert_d1_bitmap_num(d1_index)] = 0; - - if ( bmh.flags & BM_FLAG_TRANSPARENT ) - temp_bitmap.bm_flags |= BM_FLAG_TRANSPARENT; - if ( bmh.flags & BM_FLAG_SUPER_TRANSPARENT ) - temp_bitmap.bm_flags |= BM_FLAG_SUPER_TRANSPARENT; - if ( bmh.flags & BM_FLAG_NO_LIGHTING ) - temp_bitmap.bm_flags |= BM_FLAG_NO_LIGHTING; - if ( bmh.flags & BM_FLAG_RLE ) - temp_bitmap.bm_flags |= BM_FLAG_RLE; - if ( bmh.flags & BM_FLAG_RLE_BIG ) - temp_bitmap.bm_flags |= BM_FLAG_RLE_BIG; - - temp_bitmap.bm_data = next_bitmap; - - cfseek(d1_Piggy_fp, bitmap_data_start + bmh.offset, SEEK_SET); - zsize = cfile_read_int(d1_Piggy_fp); - cfseek(d1_Piggy_fp, bitmap_data_start + bmh.offset, SEEK_SET); - cfread(next_bitmap, 1, zsize, d1_Piggy_fp); - - switch(cfilelength(d1_Piggy_fp)) { - case D1_MAC_PIGSIZE: - case D1_MAC_SHARE_PIGSIZE: - rle_swap_0_255(&temp_bitmap); - } - rle_remap(&temp_bitmap, colormap); - - GameBitmaps[d2_index] = temp_bitmap; - - memcpy(&zsize, temp_bitmap.bm_data, 4); - next_bitmap += zsize; - } - } - - cfclose(d1_Piggy_fp); - - last_palette_loaded_pig[0]= 0; //force pig re-load - - texmerge_flush(); //for re-merging with new textures - - atexit(free_bitmap_replacements); -} - void load_robot_replacements(char *level_name); int read_hamfile(); diff --git a/main/piggy.c b/main/piggy.c index ebe58346..7d3bbef3 100644 --- a/main/piggy.c +++ b/main/piggy.c @@ -1,4 +1,4 @@ -/* $Id: piggy.c,v 1.24 2003-03-20 23:14:14 btb Exp $ */ +/* $Id: piggy.c,v 1.25 2003-03-22 03:14:30 btb Exp $ */ /* THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO @@ -386,7 +386,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #endif #ifdef RCS -static char rcsid[] = "$Id: piggy.c,v 1.24 2003-03-20 23:14:14 btb Exp $"; +static char rcsid[] = "$Id: piggy.c,v 1.25 2003-03-22 03:14:30 btb Exp $"; #endif @@ -2148,7 +2148,223 @@ void piggy_bitmap_page_out_all_w() { } -#endif +#endif // WINDOWS + + +/* + * Functions for loading replacement textures + * 1) From .pog files + * 2) From descent.pig (for loading d1 levels) + */ + +extern void change_filename_extension( char *dest, char *src, char *new_ext ); +extern char last_palette_loaded_pig[]; + +ubyte *Bitmap_replacement_data=NULL; + +void free_bitmap_replacements() +{ + if (Bitmap_replacement_data) { + d_free(Bitmap_replacement_data); + Bitmap_replacement_data = NULL; + } +} + +void load_bitmap_replacements(char *level_name) +{ + char ifile_name[FILENAME_LEN]; + CFILE *ifile; + int i; + + //first, free up data allocated for old bitmaps + free_bitmap_replacements(); + + change_filename_extension(ifile_name, level_name, ".POG" ); + + ifile = cfopen(ifile_name,"rb"); + + if (ifile) { + int id,version,n_bitmaps; + int bitmap_data_size; + ushort *indices; + + id = cfile_read_int(ifile); + version = cfile_read_int(ifile); + + if (id != MAKE_SIG('G','O','P','D') || version != 1) { + cfclose(ifile); + return; + } + + n_bitmaps = cfile_read_int(ifile); + + MALLOC( indices, ushort, n_bitmaps ); + + for (i = 0; i < n_bitmaps; i++) + indices[i] = cfile_read_short(ifile); + + bitmap_data_size = cfilelength(ifile) - cftell(ifile) - DISKBITMAPHEADER_SIZE * n_bitmaps; + MALLOC( Bitmap_replacement_data, ubyte, bitmap_data_size ); + + for (i=0;i= FIRST_D1_TEXTURE && d1_index <= LAST_D1_STATIC_TEXTURE) { + d2_index = d1_index + FIRST_D2_TEXTURE - FIRST_D1_TEXTURE; + + cfseek(d1_Piggy_fp, bitmap_header_start + (d1_index-1) * DISKBITMAPHEADER_D1_SIZE, SEEK_SET); + DiskBitmapHeader_d1_read(&bmh, d1_Piggy_fp); + + memset( &temp_bitmap, 0, sizeof(grs_bitmap) ); + + temp_bitmap.bm_w = temp_bitmap.bm_rowsize = bmh.width + ((short) (bmh.wh_extra&0x0f)<<8); + temp_bitmap.bm_h = bmh.height + ((short) (bmh.wh_extra&0xf0)<<4); + temp_bitmap.avg_color = bmh.avg_color; + + //GameBitmapFlags[convert_d1_bitmap_num(d1_index)] = 0; + + if ( bmh.flags & BM_FLAG_TRANSPARENT ) + temp_bitmap.bm_flags |= BM_FLAG_TRANSPARENT; + if ( bmh.flags & BM_FLAG_SUPER_TRANSPARENT ) + temp_bitmap.bm_flags |= BM_FLAG_SUPER_TRANSPARENT; + if ( bmh.flags & BM_FLAG_NO_LIGHTING ) + temp_bitmap.bm_flags |= BM_FLAG_NO_LIGHTING; + if ( bmh.flags & BM_FLAG_RLE ) + temp_bitmap.bm_flags |= BM_FLAG_RLE; + if ( bmh.flags & BM_FLAG_RLE_BIG ) + temp_bitmap.bm_flags |= BM_FLAG_RLE_BIG; + + temp_bitmap.bm_data = next_bitmap; + + cfseek(d1_Piggy_fp, bitmap_data_start + bmh.offset, SEEK_SET); + zsize = cfile_read_int(d1_Piggy_fp); + cfseek(d1_Piggy_fp, bitmap_data_start + bmh.offset, SEEK_SET); + cfread(next_bitmap, 1, zsize, d1_Piggy_fp); + + switch(cfilelength(d1_Piggy_fp)) { + case D1_MAC_PIGSIZE: + case D1_MAC_SHARE_PIGSIZE: + rle_swap_0_255(&temp_bitmap); + } + rle_remap(&temp_bitmap, colormap); + + GameBitmaps[d2_index] = temp_bitmap; + + memcpy(&zsize, temp_bitmap.bm_data, 4); + next_bitmap += zsize; + } + } + + cfclose(d1_Piggy_fp); + + last_palette_loaded_pig[0]= 0; //force pig re-load + + texmerge_flush(); //for re-merging with new textures + + atexit(free_bitmap_replacements); +} + #ifndef FAST_FILE_IO /* -- 2.39.2