From 4ef3937d359137b7fee59992954fbd86d1fce01a Mon Sep 17 00:00:00 2001 From: Kp Date: Sun, 3 Mar 2013 01:03:33 +0000 Subject: [PATCH] Move */main/piggy.c -> similar/main/piggy.c --- SConstruct | 3 +- d1x-rebirth/main/piggy.c | 778 -------------------------- {d2x-rebirth => similar}/main/piggy.c | 434 +++++++++++++- 3 files changed, 429 insertions(+), 786 deletions(-) delete mode 100644 d1x-rebirth/main/piggy.c rename {d2x-rebirth => similar}/main/piggy.c (79%) diff --git a/SConstruct b/SConstruct index 9c2c83543..0cfa43001 100644 --- a/SConstruct +++ b/SConstruct @@ -853,6 +853,7 @@ class DXXProgram(DXXCommon): 'main/object.cpp', 'main/paging.cpp', 'main/physics.cpp', +'main/piggy.c', 'main/player.cpp', 'main/playsave.cpp', 'main/polyobj.cpp', @@ -1105,7 +1106,6 @@ class D1XProgram(DXXProgram): 'main/fuelcen.c', 'main/gamemine.c', 'main/gameseq.c', -'main/piggy.c', 'main/snddecom.cpp', #'tracker/client/tracker_client.c' ] @@ -1167,7 +1167,6 @@ class D2XProgram(DXXProgram): 'main/gamepal.cpp', 'main/gameseq.c', 'main/movie.cpp', -'main/piggy.c', 'main/segment.cpp', 'misc/physfsrwops.c', ] diff --git a/d1x-rebirth/main/piggy.c b/d1x-rebirth/main/piggy.c deleted file mode 100644 index bee99f78d..000000000 --- a/d1x-rebirth/main/piggy.c +++ /dev/null @@ -1,778 +0,0 @@ -/* -THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX -SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO -END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A -ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS -IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS -SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE -FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE -CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS -AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE. -COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. -*/ -/* - * - * Functions for managing the pig files. - * - */ - - -#include -#include -#include -#include - -#include "pstypes.h" -#include "inferno.h" -#include "gr.h" -#include "u_mem.h" -#include "dxxerror.h" -#include "sounds.h" -#include "bm.h" -#include "hash.h" -#include "args.h" -#include "palette.h" -#include "gamefont.h" -#include "rle.h" -#include "screens.h" -#include "snddecom.h" -#include "console.h" -#include "piggy.h" -#include "texmerge.h" -#include "paging.h" -#include "game.h" -#include "text.h" -#include "newmenu.h" -#include "custom.h" - -#define DEFAULT_PIGFILE_REGISTERED "descent.pig" - - -#ifdef EDITOR -static int piggy_is_substitutable_bitmap( char * name, char * subst_name ); -#endif - -ubyte *BitmapBits = NULL; -ubyte *SoundBits = NULL; - -typedef struct SoundFile { - char name[15]; -} SoundFile; - -hashtable AllBitmapsNames; -hashtable AllDigiSndNames; - -int Num_bitmap_files = 0; -int Num_sound_files = 0; - -digi_sound GameSounds[MAX_SOUND_FILES]; -int SoundOffset[MAX_SOUND_FILES]; -grs_bitmap GameBitmaps[MAX_BITMAP_FILES]; - -int Num_bitmap_files_new = 0; -int Num_sound_files_new = 0; -static BitmapFile AllBitmaps[ MAX_BITMAP_FILES ]; -static SoundFile AllSounds[ MAX_SOUND_FILES ]; - -#define DBM_FLAG_LARGE 128 // Flags added onto the flags struct in b -#define DBM_FLAG_ABM 64 - -int Piggy_bitmap_cache_size = 0; -int Piggy_bitmap_cache_next = 0; -ubyte * Piggy_bitmap_cache_data = NULL; -/*static*/ int GameBitmapOffset[MAX_BITMAP_FILES]; -/*static*/ ubyte GameBitmapFlags[MAX_BITMAP_FILES]; -ushort GameBitmapXlat[MAX_BITMAP_FILES]; - -#define PIGGY_BUFFER_SIZE (2048*1024) -#define PIGGY_SMALL_BUFFER_SIZE (1400*1024) // size of buffer when GameArg.SysLowMem is set - -int piggy_page_flushed = 0; - -PHYSFS_file * Piggy_fp = NULL; - -ubyte bogus_data[64*64]; -ubyte bogus_bitmap_initialized=0; -digi_sound bogus_sound; -grs_bitmap bogus_bitmap; -int MacPig = 0; // using the Macintosh pigfile? -int PCSharePig = 0; // using PC Shareware pigfile? -static int SoundCompressed[ MAX_SOUND_FILES ]; - -typedef struct DiskBitmapHeader { - char name[8]; - ubyte dflags; - ubyte width; - ubyte height; - ubyte flags; - ubyte avg_color; - int offset; -} __pack__ DiskBitmapHeader; - -typedef struct DiskSoundHeader { - char name[8]; - int length; - int data_length; - int offset; -} __pack__ DiskSoundHeader; - -/* - * reads a DiskBitmapHeader structure from a PHYSFS_file - */ -static void DiskBitmapHeader_read(DiskBitmapHeader *dbh, PHYSFS_file *fp) -{ - PHYSFS_read(fp, dbh->name, 8, 1); - dbh->dflags = PHYSFSX_readByte(fp); - dbh->width = PHYSFSX_readByte(fp); - dbh->height = PHYSFSX_readByte(fp); - dbh->flags = PHYSFSX_readByte(fp); - dbh->avg_color = PHYSFSX_readByte(fp); - dbh->offset = PHYSFSX_readInt(fp); -} - -/* - * reads a DiskSoundHeader structure from a PHYSFS_file - */ -static void DiskSoundHeader_read(DiskSoundHeader *dsh, PHYSFS_file *fp) -{ - PHYSFS_read(fp, dsh->name, 8, 1); - dsh->length = PHYSFSX_readInt(fp); - dsh->data_length = PHYSFSX_readInt(fp); - dsh->offset = PHYSFSX_readInt(fp); -} - -void swap_0_255(grs_bitmap *bmp) -{ - int i; - - for (i = 0; i < bmp->bm_h * bmp->bm_w; i++) { - if(bmp->bm_data[i] == 0) - bmp->bm_data[i] = 255; - else if (bmp->bm_data[i] == 255) - bmp->bm_data[i] = 0; - } -} - -bitmap_index piggy_register_bitmap( grs_bitmap * bmp, const char * name, int in_file ) -{ - bitmap_index temp; - Assert( Num_bitmap_files < MAX_BITMAP_FILES ); - - temp.index = Num_bitmap_files; - - - if (!in_file) { - if ( !GameArg.DbgBigPig ) gr_bitmap_rle_compress( bmp ); - Num_bitmap_files_new++; - } - - strncpy( AllBitmaps[Num_bitmap_files].name, name, 12 ); - hashtable_insert( &AllBitmapsNames, AllBitmaps[Num_bitmap_files].name, Num_bitmap_files ); - GameBitmaps[Num_bitmap_files] = *bmp; - if ( !in_file ) { - GameBitmapOffset[Num_bitmap_files] = 0; - GameBitmapFlags[Num_bitmap_files] = bmp->bm_flags; - } - Num_bitmap_files++; - - return temp; -} - -int piggy_register_sound( digi_sound * snd, const char * name, int in_file ) -{ - int i; - - Assert( Num_sound_files < MAX_SOUND_FILES ); - - strncpy( AllSounds[Num_sound_files].name, name, 12 ); - hashtable_insert( &AllDigiSndNames, AllSounds[Num_sound_files].name, Num_sound_files ); - GameSounds[Num_sound_files] = *snd; - -//added/moved on 11/13/99 by Victor Rachels to ready for changing freq -//#ifdef ALLEGRO - GameSounds[Num_sound_files].bits = snd->bits; - GameSounds[Num_sound_files].freq = snd->freq; - -#ifdef ALLEGRO -//end this section move - VR - GameSounds[Num_sound_files].priority = 128; - GameSounds[Num_sound_files].loop_start = 0; - GameSounds[Num_sound_files].loop_end = GameSounds[Num_sound_files].len; - GameSounds[Num_sound_files].param = -1; -#endif - if ( !in_file ) { - SoundOffset[Num_sound_files] = 0; - } - else if (SoundOffset[Num_sound_files] == 0) - SoundOffset[Num_sound_files] = -1; // make sure this sound's data is not individually freed - - i = Num_sound_files; - - if (!in_file) - Num_sound_files_new++; - - Num_sound_files++; - return i; -} - -bitmap_index piggy_find_bitmap( char * name ) -{ - bitmap_index bmp; - int i; - - bmp.index = 0; - - i = hashtable_search( &AllBitmapsNames, name ); - Assert( i != 0 ); - if ( i < 0 ) - return bmp; - - bmp.index = i; - return bmp; -} - -int piggy_find_sound( char * name ) -{ - int i; - - i = hashtable_search( &AllDigiSndNames, name ); - - if ( i < 0 ) - return 255; - - return i; -} - -static void piggy_close_file() -{ - if ( Piggy_fp ) { - PHYSFS_close( Piggy_fp ); - Piggy_fp = NULL; - } -} - -int properties_init() -{ - int sbytes = 0; - char temp_name_read[16]; - char temp_name[16]; - grs_bitmap temp_bitmap; - digi_sound temp_sound; - DiskBitmapHeader bmh; - DiskSoundHeader sndh; - int header_size, N_bitmaps, N_sounds; - int i,size; - int Pigdata_start; - int pigsize; - int retval; - - hashtable_init( &AllBitmapsNames, MAX_BITMAP_FILES ); - hashtable_init( &AllDigiSndNames, MAX_SOUND_FILES ); - - - for (i=0; i 0 ); -#else - Piggy_bitmap_cache_size = PIGGY_BUFFER_SIZE; - if (GameArg.SysLowMem) - Piggy_bitmap_cache_size = PIGGY_SMALL_BUFFER_SIZE; -#endif - MALLOC(BitmapBits, ubyte, Piggy_bitmap_cache_size ); - if ( BitmapBits == NULL ) - Error( "Not enough memory to load DESCENT.PIG bitmaps\n" ); - Piggy_bitmap_cache_data = BitmapBits; - Piggy_bitmap_cache_next = 0; - - return retval; -} - -static int piggy_is_needed(int soundnum) -{ - int i; - - if ( !GameArg.SysLowMem ) return 1; - - for (i=0; i 0 ) - { - if ( piggy_is_needed(i) ) - { - PHYSFSX_fseek( Piggy_fp, SoundOffset[i], SEEK_SET ); - - // Read in the sound data!!! - snd->data = ptr; -#ifdef ALLEGRO - ptr += snd->len; - sbytes += snd->len; -#else - ptr += snd->length; - sbytes += snd->length; -#endif - //Arne's decompress for shareware on all soundcards - Tim@Rikers.org - if (pc_shareware) - { - if (lastsize < SoundCompressed[i]) { - if (lastbuf) d_free(lastbuf); - MALLOC(lastbuf, ubyte, SoundCompressed[i]); - } - PHYSFS_read( Piggy_fp, lastbuf, SoundCompressed[i], 1 ); - sound_decompress( lastbuf, SoundCompressed[i], snd->data ); - } - else -#ifdef ALLEGRO - PHYSFS_read( Piggy_fp, snd->data, snd->len, 1 ); -#else - PHYSFS_read( Piggy_fp, snd->data, snd->length, 1 ); -#endif - } - } - } - if (lastbuf) - d_free(lastbuf); -} - -void piggy_bitmap_page_in( bitmap_index bitmap ) -{ - grs_bitmap * bmp; - int i,org_i; - - org_i = 0; - - i = bitmap.index; - Assert( i >= 0 ); - Assert( i < MAX_BITMAP_FILES ); - Assert( i < Num_bitmap_files ); - Assert( Piggy_bitmap_cache_size > 0 ); - - if ( i < 1 ) return; - if ( i >= MAX_BITMAP_FILES ) return; - if ( i >= Num_bitmap_files ) return; - - if ( GameBitmapOffset[i] == 0 ) return; // A read-from-disk bitmap!!! - - if ( GameArg.SysLowMem ) { - org_i = i; - i = GameBitmapXlat[i]; // Xlat for low-memory settings! - } - bmp = &GameBitmaps[i]; - - if ( bmp->bm_flags & BM_FLAG_PAGED_OUT ) { - stop_time(); - - ReDoIt: - PHYSFSX_fseek( Piggy_fp, GameBitmapOffset[i], SEEK_SET ); - gr_set_bitmap_flags (bmp, GameBitmapFlags[i]); - gr_set_bitmap_data (bmp, &Piggy_bitmap_cache_data [Piggy_bitmap_cache_next]); - - if ( bmp->bm_flags & BM_FLAG_RLE ) { - int zsize = PHYSFSX_readInt(Piggy_fp); - - // GET JOHN NOW IF YOU GET THIS ASSERT!!! - Assert( Piggy_bitmap_cache_next+zsize < Piggy_bitmap_cache_size ); - if ( Piggy_bitmap_cache_next+zsize >= Piggy_bitmap_cache_size ) { - piggy_bitmap_page_out_all(); - goto ReDoIt; - } - memcpy( &Piggy_bitmap_cache_data[Piggy_bitmap_cache_next], &zsize, sizeof(int) ); - Piggy_bitmap_cache_next += sizeof(int); - PHYSFS_read( Piggy_fp, &Piggy_bitmap_cache_data[Piggy_bitmap_cache_next], 1, zsize-4 ); - if (MacPig) - { - rle_swap_0_255(bmp); - memcpy(&zsize, bmp->bm_data, 4); - } - Piggy_bitmap_cache_next += zsize-4; - } else { - // GET JOHN NOW IF YOU GET THIS ASSERT!!! - Assert( Piggy_bitmap_cache_next+(bmp->bm_h*bmp->bm_w) < Piggy_bitmap_cache_size ); - if ( Piggy_bitmap_cache_next+(bmp->bm_h*bmp->bm_w) >= Piggy_bitmap_cache_size ) { - piggy_bitmap_page_out_all(); - goto ReDoIt; - } - PHYSFS_read( Piggy_fp, &Piggy_bitmap_cache_data[Piggy_bitmap_cache_next], 1, bmp->bm_h*bmp->bm_w ); - if (MacPig) - swap_0_255(bmp); - Piggy_bitmap_cache_next+=bmp->bm_h*bmp->bm_w; - } - - compute_average_rgb(bmp, bmp->avg_color_rgb); - - start_time(); - } - - if ( GameArg.SysLowMem ) { - if ( org_i != i ) - GameBitmaps[org_i] = GameBitmaps[i]; - } -} - -void piggy_bitmap_page_out_all() -{ - int i; - - Piggy_bitmap_cache_next = 0; - - piggy_page_flushed++; - - texmerge_flush(); - rle_cache_flush(); - - for (i=0; i 0 ) { // Don't page out bitmaps read from disk!!! - GameBitmaps[i].bm_flags = BM_FLAG_PAGED_OUT; - gr_set_bitmap_data (&GameBitmaps[i], Piggy_bitmap_cache_data); - } - } -} - -void piggy_load_level_data() -{ - piggy_bitmap_page_out_all(); - paging_touch_all(); -} - -void piggy_close() -{ - int i; - - custom_close(); - piggy_close_file(); - -//added ifndef on 10/04/98 by Matt Mueller to fix crash on exit bug -- killed 2000/02/06 since they don't seem to cause crash anymore. heh. -//#ifndef __LINUX__ - if (BitmapBits) - d_free(BitmapBits); - - if ( SoundBits ) - d_free( SoundBits ); - - for (i = 0; i < Num_sound_files; i++) - if (SoundOffset[i] == 0) - d_free(GameSounds[i].data); -//#endif -//end addition -MM - - hashtable_free( &AllBitmapsNames ); - hashtable_free( &AllDigiSndNames ); -} - -#ifdef EDITOR -static int piggy_does_bitmap_exist_slow(const char * name ) -{ - int i; - - for (i=0; iindex = PHYSFSX_readShort(fp); -} - -/* - * reads n bitmap_index structs from a PHYSFS_file - */ -int bitmap_index_read_n(bitmap_index *bi, int n, PHYSFS_file *fp) -{ - int i; - - for (i = 0; i < n; i++) - bi[i].index = PHYSFSX_readShort(fp); - return i; -} diff --git a/d2x-rebirth/main/piggy.c b/similar/main/piggy.c similarity index 79% rename from d2x-rebirth/main/piggy.c rename to similar/main/piggy.c index 2bdf24804..960a237f7 100644 --- a/d2x-rebirth/main/piggy.c +++ b/similar/main/piggy.c @@ -52,6 +52,12 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #include "makesig.h" #include "console.h" +#if defined(DXX_BUILD_DESCENT_I) +#include "custom.h" +#include "snddecom.h" +#define DEFAULT_PIGFILE_REGISTERED "descent.pig" + +#elif defined(DXX_BUILD_DESCENT_II) #define DEFAULT_PIGFILE_REGISTERED "groupa.pig" #define DEFAULT_PIGFILE_SHAREWARE "d2demo.pig" #define DEFAULT_HAMFILE_REGISTERED "descent2.ham" @@ -73,6 +79,7 @@ int Num_aliases=0; int Must_write_hamfile = 0; int Piggy_hamfile_version = 0; +#endif ubyte *BitmapBits = NULL; ubyte *SoundBits = NULL; @@ -93,6 +100,10 @@ grs_bitmap GameBitmaps[MAX_BITMAP_FILES]; int Num_bitmap_files_new = 0; int Num_sound_files_new = 0; +#if defined(DXX_BUILD_DESCENT_I) +#define DBM_FLAG_LARGE 128 // Flags added onto the flags struct in b +static +#endif BitmapFile AllBitmaps[ MAX_BITMAP_FILES ]; static SoundFile AllSounds[ MAX_SOUND_FILES ]; @@ -101,13 +112,23 @@ static SoundFile AllSounds[ MAX_SOUND_FILES ]; int Piggy_bitmap_cache_size = 0; int Piggy_bitmap_cache_next = 0; ubyte * Piggy_bitmap_cache_data = NULL; -static int GameBitmapOffset[MAX_BITMAP_FILES]; -static ubyte GameBitmapFlags[MAX_BITMAP_FILES]; +#if defined(DXX_BUILD_DESCENT_II) +static +#endif +int GameBitmapOffset[MAX_BITMAP_FILES]; +#if defined(DXX_BUILD_DESCENT_II) +static +#endif +ubyte GameBitmapFlags[MAX_BITMAP_FILES]; ushort GameBitmapXlat[MAX_BITMAP_FILES]; +#if defined(DXX_BUILD_DESCENT_I) +#define PIGGY_BUFFER_SIZE (2048*1024) +#elif defined(DXX_BUILD_DESCENT_II) #define PIGFILE_ID MAKE_SIG('G','I','P','P') //PPIG #define PIGFILE_VERSION 2 #define PIGGY_BUFFER_SIZE (2400*1024) +#endif #define PIGGY_SMALL_BUFFER_SIZE (1400*1024) // size of buffer when GameArg.SysLowMem is set int piggy_page_flushed = 0; @@ -118,6 +139,12 @@ ubyte bogus_data[64*64]; ubyte bogus_bitmap_initialized=0; digi_sound bogus_sound; +#if defined(DXX_BUILD_DESCENT_I) +grs_bitmap bogus_bitmap; +int MacPig = 0; // using the Macintosh pigfile? +int PCSharePig = 0; // using PC Shareware pigfile? +static int SoundCompressed[ MAX_SOUND_FILES ]; +#elif defined(DXX_BUILD_DESCENT_II) char Current_pigfile[FILENAME_LEN] = ""; int Pigfile_initialized=0; @@ -129,20 +156,27 @@ ubyte *Bitmap_replacement_data = NULL; #define BM_FLAGS_TO_COPY (BM_FLAG_TRANSPARENT | BM_FLAG_SUPER_TRANSPARENT \ | BM_FLAG_NO_LIGHTING | BM_FLAG_RLE | BM_FLAG_RLE_BIG) +#endif typedef struct DiskBitmapHeader { char name[8]; ubyte dflags; // bits 0-5 anim frame num, bit 6 abm flag ubyte width; // low 8 bits here, 4 more bits in wh_extra ubyte height; // low 8 bits here, 4 more bits in wh_extra +#if defined(DXX_BUILD_DESCENT_II) ubyte wh_extra; // bits 0-3 width, bits 4-7 height +#endif ubyte flags; ubyte avg_color; int offset; } __pack__ DiskBitmapHeader; +#if defined(DXX_BUILD_DESCENT_I) +typedef char padding_check[sizeof(DiskBitmapHeader) == 0x11 ? 1 : -1]; +#elif defined(DXX_BUILD_DESCENT_II) typedef char padding_check[sizeof(DiskBitmapHeader) == 0x12 ? 1 : -1]; #define DISKBITMAPHEADER_D1_SIZE 17 // no wh_extra +#endif typedef struct DiskSoundHeader { char name[8]; @@ -151,6 +185,7 @@ typedef struct DiskSoundHeader { int offset; } __pack__ DiskSoundHeader; +#if defined(DXX_BUILD_DESCENT_II) static void free_bitmap_replacements(); static void free_d1_tmap_nums(); #ifdef EDITOR @@ -159,6 +194,7 @@ static void piggy_write_pigfile(const char *filename); static void write_int(int i,PHYSFS_file *file); #endif static int piggy_is_needed(int soundnum); +#endif /* * reads a DiskBitmapHeader structure from a PHYSFS_file @@ -169,7 +205,9 @@ static void DiskBitmapHeader_read(DiskBitmapHeader *dbh, PHYSFS_file *fp) dbh->dflags = PHYSFSX_readByte(fp); dbh->width = PHYSFSX_readByte(fp); dbh->height = PHYSFSX_readByte(fp); +#if defined(DXX_BUILD_DESCENT_II) dbh->wh_extra = PHYSFSX_readByte(fp); +#endif dbh->flags = PHYSFSX_readByte(fp); dbh->avg_color = PHYSFSX_readByte(fp); dbh->offset = PHYSFSX_readInt(fp); @@ -186,6 +224,7 @@ static void DiskSoundHeader_read(DiskSoundHeader *dsh, PHYSFS_file *fp) dsh->offset = PHYSFSX_readInt(fp); } +#if defined(DXX_BUILD_DESCENT_II) /* * reads a descent 1 DiskBitmapHeader structure from a PHYSFS_file */ @@ -200,6 +239,7 @@ static void DiskBitmapHeader_d1_read(DiskBitmapHeader *dbh, PHYSFS_file *fp) dbh->avg_color = PHYSFSX_readByte(fp); dbh->offset = PHYSFSX_readInt(fp); } +#endif void swap_0_255(grs_bitmap *bmp) { @@ -213,6 +253,7 @@ void swap_0_255(grs_bitmap *bmp) } } +#if defined(DXX_BUILD_DESCENT_II) char* piggy_game_bitmap_name(grs_bitmap *bmp) { if (bmp >= GameBitmaps && bmp < &GameBitmaps[MAX_BITMAP_FILES]) @@ -223,6 +264,7 @@ char* piggy_game_bitmap_name(grs_bitmap *bmp) } return NULL; } +#endif bitmap_index piggy_register_bitmap( grs_bitmap * bmp, const char * name, int in_file ) { @@ -232,19 +274,25 @@ bitmap_index piggy_register_bitmap( grs_bitmap * bmp, const char * name, int in_ temp.index = Num_bitmap_files; if (!in_file) { +#if defined(DXX_BUILD_DESCENT_II) #ifdef EDITOR if ( GameArg.EdiMacData ) swap_0_255( bmp ); +#endif #endif if ( !GameArg.DbgBigPig ) gr_bitmap_rle_compress( bmp ); Num_bitmap_files_new++; } +#if defined(DXX_BUILD_DESCENT_II) else if (SoundOffset[Num_sound_files] == 0) SoundOffset[Num_sound_files] = -1; // make sure this sound's data is not individually freed +#endif strncpy( AllBitmaps[Num_bitmap_files].name, name, 12 ); hashtable_insert( &AllBitmapsNames, AllBitmaps[Num_bitmap_files].name, Num_bitmap_files ); - //GameBitmaps[Num_bitmap_files] = *bmp; +#if defined(DXX_BUILD_DESCENT_I) + GameBitmaps[Num_bitmap_files] = *bmp; +#endif if ( !in_file ) { GameBitmapOffset[Num_bitmap_files] = 0; GameBitmapFlags[Num_bitmap_files] = bmp->bm_flags; @@ -263,9 +311,27 @@ int piggy_register_sound( digi_sound * snd, const char * name, int in_file ) strncpy( AllSounds[Num_sound_files].name, name, 12 ); hashtable_insert( &AllDigiSndNames, AllSounds[Num_sound_files].name, Num_sound_files ); GameSounds[Num_sound_files] = *snd; +#if defined(DXX_BUILD_DESCENT_I) +//added/moved on 11/13/99 by Victor Rachels to ready for changing freq +//#ifdef ALLEGRO + GameSounds[Num_sound_files].bits = snd->bits; + GameSounds[Num_sound_files].freq = snd->freq; + +#ifdef ALLEGRO +//end this section move - VR + GameSounds[Num_sound_files].priority = 128; + GameSounds[Num_sound_files].loop_start = 0; + GameSounds[Num_sound_files].loop_end = GameSounds[Num_sound_files].len; + GameSounds[Num_sound_files].param = -1; +#endif +#endif if ( !in_file ) { SoundOffset[Num_sound_files] = 0; } +#if defined(DXX_BUILD_DESCENT_I) + else if (SoundOffset[Num_sound_files] == 0) + SoundOffset[Num_sound_files] = -1; // make sure this sound's data is not individually freed +#endif i = Num_sound_files; @@ -283,6 +349,7 @@ bitmap_index piggy_find_bitmap( char * name ) bmp.index = 0; +#if defined(DXX_BUILD_DESCENT_II) size_t namelen; char *t; if ((t=strchr(name,'#'))!=NULL) @@ -303,6 +370,7 @@ bitmap_index piggy_find_bitmap( char * name ) name=alias_list[i].file_name; break; } +#endif i = hashtable_search( &AllBitmapsNames, name ); Assert( i != 0 ); @@ -330,10 +398,230 @@ static void piggy_close_file() if ( Piggy_fp ) { PHYSFS_close( Piggy_fp ); Piggy_fp = NULL; +#if defined(DXX_BUILD_DESCENT_II) Current_pigfile[0] = 0; +#endif } } +#if defined(DXX_BUILD_DESCENT_I) +int properties_init() +{ + int sbytes = 0; + char temp_name_read[16]; + char temp_name[16]; + grs_bitmap temp_bitmap; + digi_sound temp_sound; + DiskBitmapHeader bmh; + DiskSoundHeader sndh; + int header_size, N_bitmaps, N_sounds; + int i,size; + int Pigdata_start; + int pigsize; + int retval; + + hashtable_init( &AllBitmapsNames, MAX_BITMAP_FILES ); + hashtable_init( &AllDigiSndNames, MAX_SOUND_FILES ); + + + for (i=0; i 0 ); +#else + Piggy_bitmap_cache_size = PIGGY_BUFFER_SIZE; + if (GameArg.SysLowMem) + Piggy_bitmap_cache_size = PIGGY_SMALL_BUFFER_SIZE; +#endif + MALLOC(BitmapBits, ubyte, Piggy_bitmap_cache_size ); + if ( BitmapBits == NULL ) + Error( "Not enough memory to load DESCENT.PIG bitmaps\n" ); + Piggy_bitmap_cache_data = BitmapBits; + Piggy_bitmap_cache_next = 0; + + return retval; +} +#elif defined(DXX_BUILD_DESCENT_II) //initialize a pigfile, reading headers //returns the size of all the bitmap data void piggy_init_pigfile(const char *filename) @@ -868,8 +1156,9 @@ int properties_init(void) SoundOffset[i] = 0; } - for (i=0; i 0 ) + { + if ( piggy_is_needed(i) ) + { + PHYSFSX_fseek( Piggy_fp, SoundOffset[i], SEEK_SET ); + + // Read in the sound data!!! + snd->data = ptr; +#ifdef ALLEGRO + ptr += snd->len; + sbytes += snd->len; +#else + ptr += snd->length; + sbytes += snd->length; +#endif + //Arne's decompress for shareware on all soundcards - Tim@Rikers.org + if (pc_shareware) + { + if (lastsize < SoundCompressed[i]) { + if (lastbuf) d_free(lastbuf); + MALLOC(lastbuf, ubyte, SoundCompressed[i]); + } + PHYSFS_read( Piggy_fp, lastbuf, SoundCompressed[i], 1 ); + sound_decompress( lastbuf, SoundCompressed[i], snd->data ); + } + else +#ifdef ALLEGRO + PHYSFS_read( Piggy_fp, snd->data, snd->len, 1 ); +#else + PHYSFS_read( Piggy_fp, snd->data, snd->length, 1 ); +#endif + } + } + } + if (lastbuf) + d_free(lastbuf); +} +#elif defined(DXX_BUILD_DESCENT_II) void piggy_read_sounds(void) { PHYSFS_file * fp = NULL; @@ -952,6 +1326,7 @@ void piggy_read_sounds(void) PHYSFS_close(fp); } +#endif void piggy_bitmap_page_in( bitmap_index bitmap ) { @@ -986,9 +1361,30 @@ void piggy_bitmap_page_in( bitmap_index bitmap ) PHYSFSX_fseek( Piggy_fp, GameBitmapOffset[i], SEEK_SET ); gr_set_bitmap_flags (bmp, GameBitmapFlags[i]); +#if defined(DXX_BUILD_DESCENT_I) + gr_set_bitmap_data (bmp, &Piggy_bitmap_cache_data [Piggy_bitmap_cache_next]); +#endif if ( bmp->bm_flags & BM_FLAG_RLE ) { int zsize = PHYSFSX_readInt(Piggy_fp); +#if defined(DXX_BUILD_DESCENT_I) + + // GET JOHN NOW IF YOU GET THIS ASSERT!!! + Assert( Piggy_bitmap_cache_next+zsize < Piggy_bitmap_cache_size ); + if ( Piggy_bitmap_cache_next+zsize >= Piggy_bitmap_cache_size ) { + piggy_bitmap_page_out_all(); + goto ReDoIt; + } + memcpy( &Piggy_bitmap_cache_data[Piggy_bitmap_cache_next], &zsize, sizeof(int) ); + Piggy_bitmap_cache_next += sizeof(int); + PHYSFS_read( Piggy_fp, &Piggy_bitmap_cache_data[Piggy_bitmap_cache_next], 1, zsize-4 ); + if (MacPig) + { + rle_swap_0_255(bmp); + memcpy(&zsize, bmp->bm_data, 4); + } + Piggy_bitmap_cache_next += zsize-4; +#elif defined(DXX_BUILD_DESCENT_II) int pigsize = PHYSFS_fileLength(Piggy_fp); // GET JOHN NOW IF YOU GET THIS ASSERT!!! @@ -1026,9 +1422,9 @@ void piggy_bitmap_page_in( bitmap_index bitmap ) piggy_bitmap_page_out_all(); goto ReDoIt; } +#endif } else { - int pigsize = PHYSFS_fileLength(Piggy_fp); // GET JOHN NOW IF YOU GET THIS ASSERT!!! Assert( Piggy_bitmap_cache_next+(bmp->bm_h*bmp->bm_w) < Piggy_bitmap_cache_size ); if ( Piggy_bitmap_cache_next+(bmp->bm_h*bmp->bm_w) >= Piggy_bitmap_cache_size ) { @@ -1036,6 +1432,12 @@ void piggy_bitmap_page_in( bitmap_index bitmap ) goto ReDoIt; } PHYSFS_read( Piggy_fp, &Piggy_bitmap_cache_data[Piggy_bitmap_cache_next], 1, bmp->bm_h*bmp->bm_w ); +#if defined(DXX_BUILD_DESCENT_I) + Piggy_bitmap_cache_next+=bmp->bm_h*bmp->bm_w; + if (MacPig) + swap_0_255(bmp); +#elif defined(DXX_BUILD_DESCENT_II) + int pigsize = PHYSFS_fileLength(Piggy_fp); gr_set_bitmap_data(bmp, &Piggy_bitmap_cache_data[Piggy_bitmap_cache_next]); Piggy_bitmap_cache_next+=bmp->bm_h*bmp->bm_w; @@ -1054,6 +1456,7 @@ void piggy_bitmap_page_in( bitmap_index bitmap ) swap_0_255( bmp ); break; } +#endif #endif } @@ -1098,7 +1501,11 @@ void piggy_bitmap_page_out_all() for (i=0; i 0 ) { // Don't page out bitmaps read from disk!!! GameBitmaps[i].bm_flags = BM_FLAG_PAGED_OUT; +#if defined(DXX_BUILD_DESCENT_I) + gr_set_bitmap_data (&GameBitmaps[i], Piggy_bitmap_cache_data); +#elif defined(DXX_BUILD_DESCENT_II) gr_set_bitmap_data(&GameBitmaps[i], NULL); +#endif } } @@ -1110,6 +1517,7 @@ void piggy_load_level_data() paging_touch_all(); } +#if defined(DXX_BUILD_DESCENT_II) #ifdef EDITOR static void piggy_write_pigfile(const char *filename) @@ -1233,11 +1641,15 @@ static void write_int(int i, PHYSFS_file *file) } #endif +#endif void piggy_close() { int i; +#if defined(DXX_BUILD_DESCENT_I) + custom_close(); +#endif piggy_close_file(); if (BitmapBits) @@ -1253,10 +1665,13 @@ void piggy_close() hashtable_free( &AllBitmapsNames ); hashtable_free( &AllDigiSndNames ); +#if defined(DXX_BUILD_DESCENT_II) free_bitmap_replacements(); free_d1_tmap_nums(); +#endif } +#if defined(DXX_BUILD_DESCENT_II) #ifdef EDITOR static int piggy_does_bitmap_exist_slow(const char * name ) { @@ -1281,6 +1696,12 @@ static const char gauge_bitmap_names[][9] = { "targ05", "targ06", "gauge18", +#if defined(DXX_BUILD_DESCENT_I) + "targ01pc", + "targ02pc", + "targ03pc", + "gaug18pc" +#elif defined(DXX_BUILD_DESCENT_II) "gauge01b", "gauge02b", "gauge06b", @@ -1294,6 +1715,7 @@ static const char gauge_bitmap_names[][9] = { "gauss1", "helix1", "phoenix1" +#endif }; static int piggy_is_gauge_bitmap(const char * base_name ) @@ -1334,7 +1756,6 @@ static int piggy_is_substitutable_bitmap( char * name, char * subst_name ) #endif - /* * Functions for loading replacement textures * 1) From .pog files @@ -1850,6 +2271,7 @@ bitmap_index read_extra_bitmap_d1_pig(const char *name) return bitmap_num; } +#endif /* * reads a bitmap_index structure from a PHYSFS_file