void ui_init() { grs_font * org_font; if (Initialized) return; Initialized = 1; org_font = grd_curcanv->cv_font; ui_small_font = gr_init_font( "pc6x8.fnt" ); grd_curcanv->cv_font =org_font; CBLACK = gr_find_closest_color( 1, 1, 1 ); CGREY = gr_find_closest_color( 45, 45, 45 ); CWHITE = gr_find_closest_color( 50, 50, 50 ); CBRIGHT = gr_find_closest_color( 58, 58, 58 ); CRED = gr_find_closest_color( 63, 0, 0 ); //key_init(); gr_set_fontcolor( CBLACK, CWHITE ); ui_pad_init(); atexit(ui_close ); }
int ui_init() { if (Initialized) return 1; const grs_font *org_font = grd_curcanv->cv_font; ui_small_font = gr_init_font(*grd_curcanv, "pc6x8.fnt"); if (!ui_small_font) { Warning("Could not find pc6x8.fnt"); return 0; } grd_curcanv->cv_font =org_font; CBLACK = gr_find_closest_color( 1, 1, 1 ); CGREY = gr_find_closest_color( 45, 45, 45 ); CWHITE = gr_find_closest_color( 50, 50, 50 ); CBRIGHT = gr_find_closest_color( 58, 58, 58 ); CRED = gr_find_closest_color( 63, 0, 0 ); //key_init(); gr_set_fontcolor(*grd_curcanv, CBLACK, CWHITE); ui_pad_init(); atexit(ui_close ); Initialized = 1; return 1; }
void kmatrix_draw_names(int *sorted) { int j, x, color; if(Netgame.FairColors) selected_player_rgb = player_rgb_all_blue; else if(Netgame.BlackAndWhitePyros) selected_player_rgb = player_rgb_alt; else selected_player_rgb = player_rgb; for (j=0; j<N_players; j++) { if (Game_mode & GM_TEAM) color = get_team(sorted[j]); else color = sorted[j]; x = FSPACX (70 + CENTERING_OFFSET(N_players) + j*25); if (Players[sorted[j]].connected==CONNECT_DISCONNECTED) gr_set_fontcolor(gr_find_closest_color(31,31,31),-1); else gr_set_fontcolor(BM_XRGB(selected_player_rgb[color].r,selected_player_rgb[color].g,selected_player_rgb[color].b),-1 ); gr_printf( x, FSPACY(40), "%c", Players[sorted[j]].callsign[0] ); } x = FSPACX(72 + CENTERING_OFFSET(N_players) + N_players*25); gr_set_fontcolor( BM_XRGB(31,31,31),-1 ); gr_string( x, FSPACY(40), "K/E"); }
void kmatrix_redraw_coop() { int i, color; int sorted[MAX_PLAYERS]; multi_sort_kill_list(); grd_curcanv->cv_font = MEDIUM3_FONT; gr_string( 0x8000, FSPACY(10), "COOPERATIVE SUMMARY"); grd_curcanv->cv_font = GAME_FONT; multi_get_kill_list(sorted); kmatrix_draw_coop_names(sorted); for (i=0; i<N_players; i++ ) { color = sorted[i]; if (Players[sorted[i]].connected==CONNECT_DISCONNECTED) gr_set_fontcolor(gr_find_closest_color(31,31,31),-1); else gr_set_fontcolor(BM_XRGB(player_rgb[color].r,player_rgb[color].g,player_rgb[color].b),-1 ); kmatrix_draw_coop_item( i, sorted ); } gr_palette_load(gr_palette); }
void kmatrix_status_msg (fix time, int reactor) { grd_curcanv->cv_font = GAME_FONT; gr_set_fontcolor(gr_find_closest_color(255,255,255),-1); if (reactor) gr_printf(0x8000, SHEIGHT-LINE_SPACING, "Waiting for players to finish level. Reactor time: T-%d", time); else gr_printf(0x8000, SHEIGHT-LINE_SPACING, "Level finished. Wait (%d) to proceed or ESC to Quit.", time); }
void kmatrix_redraw(kmatrix_screen *km) { int i, color; int sorted[MAX_PLAYERS]; gr_set_current_canvas(NULL); show_fullscr(&km->background); if(Netgame.FairColors) selected_player_rgb = player_rgb_all_blue; else if(Netgame.BlackAndWhitePyros) selected_player_rgb = player_rgb_alt; else selected_player_rgb = player_rgb; if (Game_mode & GM_MULTI_COOP) { kmatrix_redraw_coop(); } else { multi_sort_kill_list(); grd_curcanv->cv_font = MEDIUM3_FONT; if (Game_mode & GM_CAPTURE) gr_string( 0x8000, FSPACY(10), "CAPTURE THE FLAG SUMMARY"); else if (Game_mode & GM_HOARD) gr_string( 0x8000, FSPACY(10), "HOARD SUMMARY"); else gr_string( 0x8000, FSPACY(10), TXT_KILL_MATRIX_TITLE); grd_curcanv->cv_font = GAME_FONT; multi_get_kill_list(sorted); kmatrix_draw_names(sorted); for (i=0; i<N_players; i++ ) { if (Game_mode & GM_TEAM) color = get_team(sorted[i]); else color = sorted[i]; if (Players[sorted[i]].connected==CONNECT_DISCONNECTED) gr_set_fontcolor(gr_find_closest_color(31,31,31),-1); else gr_set_fontcolor(BM_XRGB(selected_player_rgb[color].r,selected_player_rgb[color].g,selected_player_rgb[color].b),-1 ); kmatrix_draw_item( i, sorted ); } } gr_palette_load(gr_palette); }
unsigned char ogl_ugpixel( grs_bitmap * bitmap, int x, int y ) { GLint gl_draw_buffer; ubyte buf[4]; #ifndef OGLES glGetIntegerv(GL_DRAW_BUFFER, &gl_draw_buffer); glReadBuffer(gl_draw_buffer); #endif glReadPixels(bitmap->bm_x + x, SHEIGHT - bitmap->bm_y - y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, buf); return gr_find_closest_color(buf[0]/4, buf[1]/4, buf[2]/4); }
void gr_make_cthru_table(ubyte * table, ubyte r, ubyte g, ubyte b ) { int i; ubyte r1, g1, b1; for (i=0; i<256; i++ ) { r1 = gr_palette[i*3+0] + r; if ( r1 > 63 ) r1 = 63; g1 = gr_palette[i*3+1] + g; if ( g1 > 63 ) g1 = 63; b1 = gr_palette[i*3+2] + b; if ( b1 > 63 ) b1 = 63; table[i] = gr_find_closest_color( r1, g1, b1 ); } }
void kmatrix_phallic () { int sw, sh, aw; char message[80]; if (PhallicMan==-1) strcpy (message,"There was no record set for this level."); else sprintf (message,"%s had the best record at %d points.",Players[PhallicMan].callsign,PhallicLimit); grd_curcanv->cv_font = GAME_FONT; gr_set_fontcolor(gr_find_closest_color(63,63,63),-1); gr_get_string_size(message, &sw, &sh, &aw); gr_string( CENTERSCREEN-(sw/2), FSPACY(55+72+3), message); }
void gr_make_blend_table(ubyte *blend_table, ubyte r, ubyte g, ubyte b) { int i, j; float alpha; ubyte r1, g1, b1; for (j = 0; j < GR_FADE_LEVELS; j++) { alpha = 1.0 - (float)j / ((float)GR_FADE_LEVELS - 1); for (i = 0; i < 255; i++) { r1 = (ubyte)((1.0 - alpha) * (float)gr_palette[i * 3 + 0] + (alpha * (float)r)); g1 = (ubyte)((1.0 - alpha) * (float)gr_palette[i * 3 + 1] + (alpha * (float)g)); b1 = (ubyte)((1.0 - alpha) * (float)gr_palette[i * 3 + 2] + (alpha * (float)b)); blend_table[i + j * 256] = gr_find_closest_color(r1, g1, b1); } blend_table[i + j * 256] = 255; // leave white alone } }
void remap_fonts_and_menus(int do_fadetable_hack) { nm_remap_background(); gr_remap_color_fonts(); if (do_fadetable_hack) { int i; float g = 1.0; double intensity; ubyte gamma[64]; intensity = (double)(14)/(double)(32); for (i=0;i<64;i++) gamma[i] = (int)((pow(intensity, 1.0/g)*i) + 0.5); for (i=0;i<256;i++) { int c; c = gr_find_closest_color(gamma[gr_palette[i*3]],gamma[gr_palette[i*3+1]],gamma[gr_palette[i*3+2]]); gr_fade_table[14*256+i] = c; } } memcpy(last_palette_for_color_fonts,gr_palette,sizeof(last_palette_for_color_fonts)); }
static color_t get_console_color_by_priority(int priority) { int r, g, b; switch (priority) { case CON_CRITICAL: r = 28 * 2, g = 0 * 2, b = 0 * 2; break; case CON_URGENT: r = 54 * 2, g = 54 * 2, b = 0 * 2; break; case CON_DEBUG: case CON_VERBOSE: r = 14 * 2, g = 14 * 2, b = 14 * 2; break; case CON_HUD: r = 0 * 2, g = 28 * 2, b = 0 * 2; break; default: r = 255 * 2, g = 255 * 2, b = 255 * 2; break; } return gr_find_closest_color(r, g, b); }
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<MAX_SOUND_FILES; i++ ) { #ifdef ALLEGRO GameSounds[i].len = 0; #else GameSounds[i].length = 0; #endif GameSounds[i].data = NULL; SoundOffset[i] = 0; //added on 11/13/99 by Victor Rachels to ready for changing freq GameSounds[i].bits = 0; GameSounds[i].freq = 0; //end this section addition - VR } for (i=0; i<MAX_BITMAP_FILES; i++ ) { GameBitmapXlat[i] = i; GameBitmaps[i].bm_flags = BM_FLAG_PAGED_OUT; } if ( !bogus_bitmap_initialized ) { int i; ubyte c; bogus_bitmap_initialized = 1; c = gr_find_closest_color( 0, 0, 63 ); for (i=0; i<4096; i++ ) bogus_data[i] = c; c = gr_find_closest_color( 63, 0, 0 ); // Make a big red X ! for (i=0; i<64; i++ ) { bogus_data[i*64+i] = c; bogus_data[i*64+(63-i)] = c; } gr_init_bitmap (&bogus_bitmap, 0, 0, 0, 64, 64, 64, bogus_data); piggy_register_bitmap( &bogus_bitmap, "bogus", 1 ); #ifdef ALLEGRO bogus_sound.len = 64*64; #else bogus_sound.length = 64*64; #endif bogus_sound.data = bogus_data; //added on 11/13/99 by Victor Rachels to ready for changing freq bogus_sound.freq = 11025; bogus_sound.bits = 8; //end this section addition - VR GameBitmapOffset[0] = 0; } Piggy_fp = PHYSFSX_openReadBuffered(DEFAULT_PIGFILE_REGISTERED); if (Piggy_fp==NULL) { if (!PHYSFSX_exists("BITMAPS.TBL",1) && !PHYSFSX_exists("BITMAPS.BIN",1)) Error("Cannot find " DEFAULT_PIGFILE_REGISTERED " or BITMAPS.TBL"); return 1; // need to run gamedata_read_tbl } pigsize = PHYSFS_fileLength(Piggy_fp); switch (pigsize) { case D1_SHARE_BIG_PIGSIZE: case D1_SHARE_10_PIGSIZE: case D1_SHARE_PIGSIZE: PCSharePig = 1; Pigdata_start = 0; break; case D1_10_BIG_PIGSIZE: case D1_10_PIGSIZE: Pigdata_start = 0; break; default: Warning("Unknown size for " DEFAULT_PIGFILE_REGISTERED); Int3(); // fall through case D1_MAC_PIGSIZE: case D1_MAC_SHARE_PIGSIZE: MacPig = 1; case D1_PIGSIZE: case D1_OEM_PIGSIZE: Pigdata_start = PHYSFSX_readInt(Piggy_fp ); break; } HiresGFXAvailable = MacPig; // for now at least if (PCSharePig) retval = PIGGY_PC_SHAREWARE; // run gamedata_read_tbl in shareware mode else if (GameArg.EdiNoBm || (!PHYSFSX_exists("BITMAPS.TBL",1) && !PHYSFSX_exists("BITMAPS.BIN",1))) { properties_read_cmp( Piggy_fp ); // Note connection to above if!!! for (i = 0; i < MAX_BITMAP_FILES; i++) { GameBitmapXlat[i] = PHYSFSX_readShort(Piggy_fp); if (PHYSFS_eof(Piggy_fp)) break; } retval = 0; // don't run gamedata_read_tbl } else retval = 1; // run gamedata_read_tbl PHYSFSX_fseek( Piggy_fp, Pigdata_start, SEEK_SET ); size = PHYSFS_fileLength(Piggy_fp) - Pigdata_start; N_bitmaps = PHYSFSX_readInt(Piggy_fp); size -= sizeof(int); N_sounds = PHYSFSX_readInt(Piggy_fp); size -= sizeof(int); header_size = (N_bitmaps*sizeof(DiskBitmapHeader)) + (N_sounds*sizeof(DiskSoundHeader)); for (i=0; i<N_bitmaps; i++ ) { DiskBitmapHeader_read(&bmh, Piggy_fp); GameBitmapFlags[i+1] = 0; if ( bmh.flags & BM_FLAG_TRANSPARENT ) GameBitmapFlags[i+1] |= BM_FLAG_TRANSPARENT; if ( bmh.flags & BM_FLAG_SUPER_TRANSPARENT ) GameBitmapFlags[i+1] |= BM_FLAG_SUPER_TRANSPARENT; if ( bmh.flags & BM_FLAG_NO_LIGHTING ) GameBitmapFlags[i+1] |= BM_FLAG_NO_LIGHTING; if ( bmh.flags & BM_FLAG_RLE ) GameBitmapFlags[i+1] |= BM_FLAG_RLE; GameBitmapOffset[i+1] = bmh.offset + header_size + (sizeof(int)*2) + Pigdata_start; Assert( (i+1) == Num_bitmap_files ); //size -= sizeof(DiskBitmapHeader); memcpy( temp_name_read, bmh.name, 8 ); temp_name_read[8] = 0; if ( bmh.dflags & DBM_FLAG_ABM ) sprintf( temp_name, "%s#%d", temp_name_read, bmh.dflags & 63 ); else strcpy( temp_name, temp_name_read ); memset( &temp_bitmap, 0, sizeof(grs_bitmap) ); gr_init_bitmap( &temp_bitmap, 0, 0, 0, (bmh.dflags & DBM_FLAG_LARGE) ? bmh.width + 256 : bmh.width, bmh.height, (bmh.dflags & DBM_FLAG_LARGE) ? bmh.width + 256 : bmh.width, Piggy_bitmap_cache_data); temp_bitmap.bm_flags |= BM_FLAG_PAGED_OUT; temp_bitmap.avg_color = bmh.avg_color; if (MacPig) { // HACK HACK HACK!!!!! if (!strnicmp(bmh.name, "cockpit", 7) || !strnicmp(bmh.name, "status", 6) || !strnicmp(bmh.name, "rearview", 8)) { temp_bitmap.bm_w = temp_bitmap.bm_rowsize = 640; if (GameBitmapFlags[i+1] & BM_FLAG_RLE) GameBitmapFlags[i+1] |= BM_FLAG_RLE_BIG; } if (!strnicmp(bmh.name, "cockpit", 7) || !strnicmp(bmh.name, "rearview", 8)) temp_bitmap.bm_h = 480; } piggy_register_bitmap( &temp_bitmap, temp_name, 1 ); } for (i=0; !MacPig && i<N_sounds; i++ ) { DiskSoundHeader_read(&sndh, Piggy_fp); //size -= sizeof(DiskSoundHeader); #ifdef ALLEGRO temp_sound.len = sndh.length; #else temp_sound.length = sndh.length; #endif //added on 11/13/99 by Victor Rachels to ready for changing freq temp_sound.bits = 8; temp_sound.freq = 11025; //end this section addition - VR temp_sound.data = (ubyte *)(sndh.offset + header_size + (sizeof(int)*2)+Pigdata_start); SoundOffset[Num_sound_files] = sndh.offset + header_size + (sizeof(int)*2)+Pigdata_start; if (PCSharePig) SoundCompressed[Num_sound_files] = sndh.data_length; memcpy( temp_name_read, sndh.name, 8 ); temp_name_read[8] = 0; piggy_register_sound( &temp_sound, temp_name_read, 1 ); sbytes += sndh.length; } if (!MacPig) { SoundBits = d_malloc( sbytes + 16 ); if ( SoundBits == NULL ) Error( "Not enough memory to load DESCENT.PIG sounds\n"); } #if 1 //def EDITOR Piggy_bitmap_cache_size = size - header_size - sbytes + 16; Assert( Piggy_bitmap_cache_size > 0 ); #else Piggy_bitmap_cache_size = PIGGY_BUFFER_SIZE; if (GameArg.SysLowMem) Piggy_bitmap_cache_size = PIGGY_SMALL_BUFFER_SIZE; #endif BitmapBits = d_malloc( 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; }
int piggy_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, length, x, y; char * filename; int read_sounds = 1; int Pigdata_start; hashtable_init( &AllBitmapsNames, MAX_BITMAP_FILES ); hashtable_init( &AllDigiSndNames, MAX_SOUND_FILES ); if ( FindArg( "-nosound" ) || (digi_driver_board<1) ) { read_sounds = 0; mprintf(( 0, "Not loading sound data!!!!!\n" )); } for (i=0; i<MAX_SOUND_FILES; i++ ) { GameSounds[i].length = 0; GameSounds[i].data = NULL; SoundOffset[i] = 0; } for (i=0; i<MAX_BITMAP_FILES; i++ ) { GameBitmapXlat[i] = i; GameBitmaps[i].bm_flags = BM_FLAG_PAGED_OUT; } if ( !bogus_bitmap_initialized ) { int i; ubyte c; bogus_bitmap_initialized = 1; memset( &bogus_bitmap, 0, sizeof(grs_bitmap) ); bogus_bitmap.bm_w = bogus_bitmap.bm_h = bogus_bitmap.bm_rowsize = 64; bogus_bitmap.bm_data = bogus_data; c = gr_find_closest_color( 0, 0, 63 ); for (i=0; i<4096; i++ ) bogus_data[i] = c; c = gr_find_closest_color( 63, 0, 0 ); // Make a big red X ! for (i=0; i<64; i++ ) { bogus_data[i*64+i] = c; bogus_data[i*64+(63-i)] = c; } piggy_register_bitmap( &bogus_bitmap, "bogus", 1 ); bogus_sound.length = 64*64; bogus_sound.data = bogus_data; GameBitmapOffset[0] = 0; } filename = "DESCENT.PIG"; if ( FindArg( "-bigpig" )) BigPig = 1; if ( FindArg( "-lowmem" )) piggy_low_memory = 1; if ( FindArg( "-nolowmem" )) piggy_low_memory = 0; if (piggy_low_memory) digi_lomem = 1; if ( (i=FindArg( "-piggy" )) ) { filename = Args[i+1]; mprintf( (0, "Using alternate pigfile, '%s'\n", filename )); } Piggy_fp = cfopen( filename, "rb" ); if (Piggy_fp==NULL) return 0; cfread( &Pigdata_start, sizeof(int), 1, Piggy_fp ); #ifdef EDITOR if ( FindArg("-nobm") ) #endif { bm_read_all( Piggy_fp ); // Note connection to above if!!! cfread( GameBitmapXlat, sizeof(ushort)*MAX_BITMAP_FILES, 1, Piggy_fp ); } cfseek( Piggy_fp, Pigdata_start, SEEK_SET ); size = cfilelength(Piggy_fp) - Pigdata_start; length = size; mprintf( (0, "\nReading data (%d KB) ", size/1024 )); cfread( &N_bitmaps, sizeof(int), 1, Piggy_fp ); size -= sizeof(int); cfread( &N_sounds, sizeof(int), 1, Piggy_fp ); size -= sizeof(int); header_size = (N_bitmaps*sizeof(DiskBitmapHeader)) + (N_sounds*sizeof(DiskSoundHeader)); x = 60; y = 189 * f2fl(Scale_y); gr_set_curfont( Gamefonts[GFONT_SMALL] ); gr_set_fontcolor(gr_find_closest_color_current( 20, 20, 20 ),-1 ); gr_scale_printf( 0x8000, y-10*f2fl(Scale_y), Scale_factor, Scale_factor, "%s...", TXT_LOADING_DATA ); #ifdef OGLES showRenderBuffer(); #endif for (i=0; i<N_bitmaps; i++ ) { cfread( &bmh, sizeof(DiskBitmapHeader), 1, Piggy_fp ); //size -= sizeof(DiskBitmapHeader); memcpy( temp_name_read, bmh.name, 8 ); temp_name_read[8] = 0; if ( bmh.dflags & DBM_FLAG_ABM ) sprintf( temp_name, "%s#%d", temp_name_read, bmh.dflags & 63 ); else strcpy( temp_name, temp_name_read ); memset( &temp_bitmap, 0, sizeof(grs_bitmap) ); if ( bmh.dflags & DBM_FLAG_LARGE ) temp_bitmap.bm_w = temp_bitmap.bm_rowsize = bmh.width+256; else temp_bitmap.bm_w = temp_bitmap.bm_rowsize = bmh.width; temp_bitmap.bm_h = bmh.height; temp_bitmap.bm_flags = BM_FLAG_PAGED_OUT; temp_bitmap.avg_color = bmh.avg_color; temp_bitmap.bm_data = Piggy_bitmap_cache_data; #ifdef OGLES temp_bitmap.bm_ogles_tex_id = 0; #endif GameBitmapFlags[i+1] = 0; if ( bmh.flags & BM_FLAG_TRANSPARENT ) GameBitmapFlags[i+1] |= BM_FLAG_TRANSPARENT; if ( bmh.flags & BM_FLAG_SUPER_TRANSPARENT ) GameBitmapFlags[i+1] |= BM_FLAG_SUPER_TRANSPARENT; if ( bmh.flags & BM_FLAG_NO_LIGHTING ) GameBitmapFlags[i+1] |= BM_FLAG_NO_LIGHTING; if ( bmh.flags & BM_FLAG_RLE ) GameBitmapFlags[i+1] |= BM_FLAG_RLE; GameBitmapOffset[i+1] = bmh.offset + header_size + (sizeof(int)*2) + Pigdata_start; Assert( (i+1) == Num_bitmap_files ); piggy_register_bitmap( &temp_bitmap, temp_name, 1 ); } for (i=0; i<N_sounds; i++ ) { cfread( &sndh, sizeof(DiskSoundHeader), 1, Piggy_fp ); //size -= sizeof(DiskSoundHeader); temp_sound.length = sndh.length; temp_sound.data = (ubyte *)(sndh.offset + header_size + (sizeof(int)*2)+Pigdata_start); SoundOffset[Num_sound_files] = sndh.offset + header_size + (sizeof(int)*2)+Pigdata_start; memcpy( temp_name_read, sndh.name, 8 ); temp_name_read[8] = 0; piggy_register_sound( &temp_sound, temp_name_read, 1 ); sbytes += sndh.length; //mprintf(( 0, "%d bytes of sound\n", sbytes )); } SoundBits = malloc( sbytes + 16 ); if ( SoundBits == NULL ) Error( "Not enough memory to load DESCENT.PIG sounds\n" ); #ifdef EDITOR Piggy_bitmap_cache_size = size - header_size - sbytes + 16; Assert( Piggy_bitmap_cache_size > 0 ); #else Piggy_bitmap_cache_size = PIGGY_BUFFER_SIZE; #endif BitmapBits = malloc( 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; mprintf(( 0, "\nBitmaps: %d KB Sounds: %d KB\n", Piggy_bitmap_cache_size/1024, sbytes/1024 )); atexit(piggy_close_file); // mprintf( (0, "<<<<Paging in all piggy bitmaps...>>>>>" )); // for (i=0; i < Num_bitmap_files; i++ ) { // bitmap_index bi; // bi.index = i; // PIGGY_PAGE_IN( bi ); // } // mprintf( (0, "\n (USed %d / %d KB)\n", Piggy_bitmap_cache_next/1024, (size - header_size - sbytes + 16)/1024 )); // key_getch(); return 0; }
int state_save_all_sub(char *filename, char *desc, int between_levels) { int i,j; PHYSFS_file *fp; grs_canvas * cnv; ubyte *pal; Assert(between_levels == 0); //between levels save ripped out /* if ( Game_mode & GM_MULTI ) { { start_time(); return 0; } }*/ #if defined(MACINTOSH) && !defined(NDEBUG) if ( strncmp(filename, PLAYER_DIR, 9) ) Int3(); #endif fp = PHYSFSX_openWriteBuffered(filename); if ( !fp ) { if ( !(Game_mode & GM_MULTI) ) nm_messagebox(NULL, 1, TXT_OK, "Error writing savegame.\nPossibly out of disk\nspace."); start_time(); return 0; } //Save id PHYSFS_write(fp, dgss_id, sizeof(char) * 4, 1); //Save version i = STATE_VERSION; PHYSFS_write(fp, &i, sizeof(int), 1); //Save description PHYSFS_write(fp, desc, sizeof(char) * DESC_LENGTH, 1); // Save the current screen shot... cnv = gr_create_canvas( THUMBNAIL_W, THUMBNAIL_H ); if ( cnv ) { #ifdef OGL ubyte *buf; int k; GLint gl_draw_buffer; #endif grs_canvas * cnv_save; cnv_save = grd_curcanv; gr_set_current_canvas( cnv ); render_frame(0, 0); #if defined(OGL) buf = d_malloc(THUMBNAIL_W * THUMBNAIL_H * 3); glGetIntegerv(GL_DRAW_BUFFER, &gl_draw_buffer); glReadBuffer(gl_draw_buffer); glReadPixels(0, SHEIGHT - THUMBNAIL_H, THUMBNAIL_W, THUMBNAIL_H, GL_RGB, GL_UNSIGNED_BYTE, buf); k = THUMBNAIL_H; for (i = 0; i < THUMBNAIL_W * THUMBNAIL_H; i++) { if (!(j = i % THUMBNAIL_W)) k--; cnv->cv_bitmap.bm_data[THUMBNAIL_W * k + j] = gr_find_closest_color(buf[3*i]/4, buf[3*i+1]/4, buf[3*i+2]/4); } d_free(buf); #endif pal = gr_palette; PHYSFS_write(fp, cnv->cv_bitmap.bm_data, THUMBNAIL_W * THUMBNAIL_H, 1); gr_set_current_canvas(cnv_save); gr_free_canvas( cnv ); PHYSFS_write(fp, pal, 3, 256); } else { ubyte color = 0; for ( i=0; i<THUMBNAIL_W*THUMBNAIL_H; i++ ) PHYSFS_write(fp, &color, sizeof(ubyte), 1); } // Save the Between levels flag... PHYSFS_write(fp, &between_levels, sizeof(int), 1); // Save the mission info... mprintf ((0, "HEY! Mission name is %s\n", Current_mission_filename)); PHYSFS_write(fp, Current_mission_filename, 9 * sizeof(char), 1); //Save level info PHYSFS_write(fp, &Current_level_num, sizeof(int), 1); PHYSFS_write(fp, &Next_level_num, sizeof(int), 1); //Save GameTime PHYSFS_write(fp, &GameTime, sizeof(fix), 1); // If coop save, save all #ifdef NETWORK if (Game_mode & GM_MULTI_COOP) { PHYSFS_write(fp, &state_game_id,sizeof(int), 1); PHYSFS_write(fp, &Netgame,sizeof(netgame_info), 1); PHYSFS_write(fp, &NetPlayers,sizeof(AllNetPlayers_info), 1); PHYSFS_write(fp, &N_players,sizeof(int), 1); PHYSFS_write(fp, &Player_num,sizeof(int), 1); for (i=0;i<N_players;i++) PHYSFS_write(fp, &Players[i], sizeof(player), 1); #ifdef RISKY_PROPOSITION PHYSFS_write(fp, &robot_controlled[0], 4 * MAX_ROBOTS_CONTROLLED, 1); PHYSFS_write(fp, &robot_agitation[0], 4 * MAX_ROBOTS_CONTROLLED, 1); PHYSFS_write(fp, &robot_controlled_time[0], 4 * MAX_ROBOTS_CONTROLLED, 1); PHYSFS_write(fp, &robot_last_send_time[0], 4 * MAX_ROBOTS_CONTROLLED, 1); PHYSFS_write(fp, &robot_last_message_time[0], 4 * MAX_ROBOTS_CONTROLLED, 1); PHYSFS_write(fp, &robot_send_pending[0], 4 * MAX_ROBOTS_CONTROLLED, 1); PHYSFS_write(fp, &robot_fired[0], 4 * MAX_ROBOTS_CONTROLLED, 1); for (i=0;i<MAX_ROBOTS_CONTROLLED;i++) PHYSFS_write(fp, robot_fire_buf[i][0], 18 + 3, 1); #endif } #endif //Save player info PHYSFS_write(fp, &Players[Player_num], sizeof(player), 1); // Save the current weapon info PHYSFS_write(fp, &Primary_weapon, sizeof(sbyte), 1); PHYSFS_write(fp, &Secondary_weapon, sizeof(sbyte), 1); // Save the difficulty level PHYSFS_write(fp, &Difficulty_level, sizeof(int), 1); // Save cheats enabled PHYSFS_write(fp, &Cheats_enabled.intval, sizeof(int), 1); if ( !between_levels ) { //Finish all morph objects for (i=0; i<=Highest_object_index; i++ ) { if ( (Objects[i].type != OBJ_NONE) && (Objects[i].render_type==RT_MORPH)) { morph_data *md; md = find_morph_data(&Objects[i]); if (md) { md->obj->control_type = md->morph_save_control_type; md->obj->movement_type = md->morph_save_movement_type; md->obj->render_type = RT_POLYOBJ; md->obj->mtype.phys_info = md->morph_save_phys_info; md->obj = NULL; } else { //maybe loaded half-morphed from disk Objects[i].flags |= OF_SHOULD_BE_DEAD; Objects[i].render_type = RT_POLYOBJ; Objects[i].control_type = CT_NONE; Objects[i].movement_type = MT_NONE; } } } //Save object info i = Highest_object_index+1; PHYSFS_write(fp, &i, sizeof(int), 1); PHYSFS_write(fp, Objects, sizeof(object), i); //Save wall info i = Num_walls; PHYSFS_write(fp, &i, sizeof(int), 1); PHYSFS_write(fp, Walls, sizeof(wall), i); //Save exploding wall info i = MAX_EXPLODING_WALLS; PHYSFS_write(fp, &i, sizeof(int), 1); PHYSFS_write(fp, expl_wall_list, sizeof(*expl_wall_list), i); //Save door info i = Num_open_doors; PHYSFS_write(fp, &i, sizeof(int), 1); PHYSFS_write(fp, ActiveDoors, sizeof(active_door), i); //Save cloaking wall info i = Num_cloaking_walls; PHYSFS_write(fp, &i, sizeof(int), 1); PHYSFS_write(fp, CloakingWalls, sizeof(cloaking_wall), i); //Save trigger info PHYSFS_write(fp, &Num_triggers, sizeof(int), 1); PHYSFS_write(fp, Triggers, sizeof(trigger), Num_triggers); //Save tmap info for (i = 0; i <= Highest_segment_index; i++) { for (j = 0; j < 6; j++) { PHYSFS_write(fp, &Segments[i].sides[j].wall_num, sizeof(short), 1); PHYSFS_write(fp, &Segments[i].sides[j].tmap_num, sizeof(short), 1); PHYSFS_write(fp, &Segments[i].sides[j].tmap_num2, sizeof(short), 1); } } // Save the fuelcen info PHYSFS_write(fp, &Control_center_destroyed, sizeof(int), 1); PHYSFS_write(fp, &Countdown_timer, sizeof(int), 1); PHYSFS_write(fp, &Num_robot_centers, sizeof(int), 1); PHYSFS_write(fp, RobotCenters, sizeof(matcen_info), Num_robot_centers); PHYSFS_write(fp, &ControlCenterTriggers, sizeof(control_center_triggers), 1); PHYSFS_write(fp, &Num_fuelcenters, sizeof(int), 1); PHYSFS_write(fp, Station, sizeof(FuelCenter), Num_fuelcenters); // Save the control cen info PHYSFS_write(fp, &Control_center_been_hit, sizeof(int), 1); PHYSFS_write(fp, &Control_center_player_been_seen, sizeof(int), 1); PHYSFS_write(fp, &Control_center_next_fire_time, sizeof(int), 1); PHYSFS_write(fp, &Control_center_present, sizeof(int), 1); PHYSFS_write(fp, &Dead_controlcen_object_num, sizeof(int), 1); // Save the AI state ai_save_state( fp ); // Save the automap visited info PHYSFS_write(fp, Automap_visited, sizeof(ubyte), MAX_SEGMENTS); } PHYSFS_write(fp, &state_game_id, sizeof(uint), 1); PHYSFS_write(fp, &Laser_rapid_fire, sizeof(int), 1); PHYSFS_write(fp, &Lunacy, sizeof(int), 1); // Yes, writing this twice. Removed the Ugly robot system, but didn't want to change savegame format. PHYSFS_write(fp, &Lunacy, sizeof(int), 1); // Save automap marker info PHYSFS_write(fp, MarkerObject, sizeof(MarkerObject) ,1); PHYSFS_write(fp, MarkerOwner, sizeof(MarkerOwner), 1); PHYSFS_write(fp, MarkerMessage, sizeof(MarkerMessage), 1); PHYSFS_write(fp, &Afterburner_charge, sizeof(fix), 1); //save last was super information PHYSFS_write(fp, &Primary_last_was_super, sizeof(Primary_last_was_super), 1); PHYSFS_write(fp, &Secondary_last_was_super, sizeof(Secondary_last_was_super), 1); // Save flash effect stuff PHYSFS_write(fp, &Flash_effect, sizeof(int), 1); PHYSFS_write(fp, &Time_flash_last_played, sizeof(int), 1); PHYSFS_write(fp, &PaletteRedAdd, sizeof(int), 1); PHYSFS_write(fp, &PaletteGreenAdd, sizeof(int), 1); PHYSFS_write(fp, &PaletteBlueAdd, sizeof(int), 1); PHYSFS_write(fp, Light_subtracted, sizeof(Light_subtracted[0]), MAX_SEGMENTS); PHYSFS_write(fp, &First_secret_visit, sizeof(First_secret_visit), 1); if (PHYSFS_write(fp, &Omega_charge, sizeof(Omega_charge), 1) < 1) { if ( !(Game_mode & GM_MULTI) ) { nm_messagebox(NULL, 1, TXT_OK, "Error writing savegame.\nPossibly out of disk\nspace."); PHYSFS_close(fp); PHYSFS_delete(filename); } } else { PHYSFS_close(fp); #ifdef MACINTOSH // set the type and creator of the saved game file { FInfo finfo; OSErr err; Str255 pfilename; strcpy(pfilename, filename); c2pstr(pfilename); err = HGetFInfo(0, 0, pfilename, &finfo); finfo.fdType = 'SVGM'; finfo.fdCreator = 'DCT2'; err = HSetFInfo(0, 0, pfilename, &finfo); } #endif } start_time(); return 1; }
//setup the editors windows, canvases, gadgets, etc. void init_editor_screen() { // grs_bitmap * bmp; if (editor_screen_open) return; grd_curscreen->sc_canvas.cv_font = editor_font; //create canvas for game on the editor screen initializing = 1; gr_set_current_canvas(Canv_editor); Canv_editor->cv_font = editor_font; gr_init_sub_canvas(Canv_editor_game,Canv_editor,GAMEVIEW_X,GAMEVIEW_Y,GAMEVIEW_W,GAMEVIEW_H); //Editor renders into full (320x200) game screen init_info = 1; //do other editor screen setup // Since the palette might have changed, find some good colors... CBLACK = gr_find_closest_color( 1, 1, 1 ); CGREY = gr_find_closest_color( 28, 28, 28 ); CWHITE = gr_find_closest_color( 38, 38, 38 ); CBRIGHT = gr_find_closest_color( 60, 60, 60 ); CRED = gr_find_closest_color( 63, 0, 0 ); gr_set_curfont(editor_font); gr_set_fontcolor( CBLACK, CWHITE ); EditorWindow = ui_create_dialog( 0 , 0, ED_SCREEN_W, ED_SCREEN_H, DF_FILLED, editor_handler, NULL ); LargeViewBox = ui_add_gadget_userbox( EditorWindow,LVIEW_X,LVIEW_Y,LVIEW_W,LVIEW_H); #if ORTHO_VIEWS TopViewBox = ui_add_gadget_userbox( EditorWindow,TVIEW_X,TVIEW_Y,TVIEW_W,TVIEW_H); FrontViewBox = ui_add_gadget_userbox( EditorWindow,FVIEW_X,FVIEW_Y,FVIEW_W,FVIEW_H); RightViewBox = ui_add_gadget_userbox( EditorWindow,RVIEW_X,RVIEW_Y,RVIEW_W,RVIEW_H); #endif ui_gadget_calc_keys(EditorWindow); //make tab work for all windows GameViewBox = ui_add_gadget_userbox( EditorWindow, GAMEVIEW_X, GAMEVIEW_Y, GAMEVIEW_W, GAMEVIEW_H ); // GroupViewBox = ui_add_gadget_userbox( EditorWindow,GVIEW_X,GVIEW_Y,GVIEW_W,GVIEW_H); // GameViewBox->when_tab = GameViewBox->when_btab = (UI_GADGET *) LargeViewBox; // LargeViewBox->when_tab = LargeViewBox->when_btab = (UI_GADGET *) GameViewBox; // ui_gadget_calc_keys(EditorWindow); //make tab work for all windows ViewIcon = ui_add_gadget_icon( EditorWindow, "Lock\nview", 455,25+530, 40, 22, KEY_V+KEY_CTRLED, ToggleLockViewToCursegp ); AllIcon = ui_add_gadget_icon( EditorWindow, "Draw\nall", 500,25+530, 40, 22, -1, ToggleDrawAllSegments ); AxesIcon = ui_add_gadget_icon( EditorWindow, "Coord\naxes",545,25+530, 40, 22, KEY_D+KEY_CTRLED, ToggleCoordAxes ); //-NOLIGHTICON- LightIcon = ui_add_gadget_icon( EditorWindow, "Light\ning", 590,25+530, 40, 22, KEY_L+KEY_SHIFTED,ToggleLighting ); ChaseIcon = ui_add_gadget_icon( EditorWindow, "Chase\nmode",635,25+530, 40, 22, -1, ToggleChaseMode ); OutlineIcon = ui_add_gadget_icon( EditorWindow, "Out\nline", 680,25+530, 40, 22, KEY_O+KEY_CTRLED, ToggleOutlineMode ); LockIcon = ui_add_gadget_icon( EditorWindow, "Lock\nstep", 725,25+530, 40, 22, KEY_L+KEY_CTRLED, ToggleLockstep ); meddraw_init_views(LargeViewBox->canvas); //ui_add_gadget_button( EditorWindow, 460, 510, 50, 25, "Quit", ExitEditor ); //ui_add_gadget_button( EditorWindow, 520, 510, 50, 25, "Lisp", CallLisp ); //ui_add_gadget_button( EditorWindow, 580, 510, 50, 25, "Mine", MineMenu ); //ui_add_gadget_button( EditorWindow, 640, 510, 50, 25, "Help", DoHelp ); //ui_add_gadget_button( EditorWindow, 460, 540, 50, 25, "Macro", MacroMenu ); //ui_add_gadget_button( EditorWindow, 520, 540, 50, 25, "About", ShowAbout ); //ui_add_gadget_button( EditorWindow, 640, 540, 50, 25, "Shell", DosShell ); ui_pad_activate( EditorWindow, PAD_X, PAD_Y ); Pad_info = info_window_create(); ui_add_gadget_button( EditorWindow, PAD_X+6, PAD_Y+(30*5)+22, PAD_WIDTH, 20, "<<", med_keypad_goto_prev ); ui_add_gadget_button( EditorWindow, PAD_X+PAD_WIDTH1+6, PAD_Y+(30*5)+22, PAD_WIDTH, 20, ">>", med_keypad_goto_next ); { int i; i = 0; ui_add_gadget_button( EditorWindow, PAD_X+16+(i+2)*PAD_WIDTH1, PAD_Y+(30*5)+22, PAD_WIDTH, 20, "SR", med_keypad_goto_0 ); i++; ui_add_gadget_button( EditorWindow, PAD_X+16+(i+2)*PAD_WIDTH1, PAD_Y+(30*5)+22, PAD_WIDTH, 20, "SS", med_keypad_goto_1 ); i++; ui_add_gadget_button( EditorWindow, PAD_X+16+(i+2)*PAD_WIDTH1, PAD_Y+(30*5)+22, PAD_WIDTH, 20, "CF", med_keypad_goto_2 ); i++; ui_add_gadget_button( EditorWindow, PAD_X+16+(i+2)*PAD_WIDTH1, PAD_Y+(30*5)+22, PAD_WIDTH, 20, "TM", med_keypad_goto_3 ); i++; ui_add_gadget_button( EditorWindow, PAD_X+16+(i+2)*PAD_WIDTH1, PAD_Y+(30*5)+22, PAD_WIDTH, 20, "OP", med_keypad_goto_4 ); i++; ui_add_gadget_button( EditorWindow, PAD_X+16+(i+2)*PAD_WIDTH1, PAD_Y+(30*5)+22, PAD_WIDTH, 20, "OR", med_keypad_goto_5 ); i++; ui_add_gadget_button( EditorWindow, PAD_X+16+(i+2)*PAD_WIDTH1, PAD_Y+(30*5)+22, PAD_WIDTH, 20, "GE", med_keypad_goto_6 ); i++; ui_add_gadget_button( EditorWindow, PAD_X+16+(i+2)*PAD_WIDTH1, PAD_Y+(30*5)+22, PAD_WIDTH, 20, "LI", med_keypad_goto_7 ); i++; ui_add_gadget_button( EditorWindow, PAD_X+16+(i+2)*PAD_WIDTH1, PAD_Y+(30*5)+22, PAD_WIDTH, 20, "TT", med_keypad_goto_8 ); } gr_set_curfont(editor_font); menubar_show(); // INIT TEXTURE STUFF texpage_init( EditorWindow ); objpage_init( EditorWindow ); EditorWindow->keyboard_focus_gadget = (UI_GADGET *)LargeViewBox; // BigCanvas[0]->cv_font = grd_curscreen->sc_canvas.cv_font; // BigCanvas[1]->cv_font = grd_curscreen->sc_canvas.cv_font; // BigCanvasFirstTime = 1; Update_flags = UF_ALL; initializing = 0; editor_screen_open = 1; }
int piggy_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, length; char * filename; int read_sounds = 1; int Pigdata_start; hashtable_init( &AllBitmapsNames, MAX_BITMAP_FILES ); // hashtable_init( &AllDigiSndNames, MAX_SOUND_FILES ); if (GameBitmaps == NULL) { GameBitmaps = (grs_bitmap *)mymalloc(sizeof(grs_bitmap) * MAX_BITMAP_FILES); if (GameBitmaps == NULL) Error("Cannot allocate space for game bitmaps in piggy.c"); } if (AllBitmaps == NULL) { AllBitmaps = (BitmapFile *)mymalloc(sizeof(BitmapFile) * MAX_BITMAP_FILES); if (AllBitmaps == NULL) Error("Cannot allocate space for bitmap filenames in piggy.c"); } #if 0 if (AllSounds == NULL) { AllSounds = (SoundFile *)mymalloc(sizeof(SoundFile) * MAX_SOUND_FILES); if (AllSounds == NULL) Error("Cannot allocate space for sound filenames in piggy.c"); } if ( FindArg( "-nosound" ) || (digi_driver_board<1) ) { read_sounds = 0; mprintf(( 0, "Not loading sound data!!!!!\n" )); } for (i=0; i<MAX_SOUND_FILES; i++ ) { GameSounds[i].length = 0; GameSounds[i].data = NULL; SoundOffset[i] = 0; } #endif for (i=0; i<MAX_BITMAP_FILES; i++ ) GameBitmapXlat[i] = i; if ( !bogus_bitmap_initialized ) { int i; ubyte c; bogus_bitmap_initialized = 1; memset( &bogus_bitmap, 0, sizeof(grs_bitmap) ); bogus_bitmap.bm_w = bogus_bitmap.bm_h = bogus_bitmap.bm_rowsize = 64; bogus_bitmap.bm_data = bogus_data; c = gr_find_closest_color( 0, 0, 63 ); for (i=0; i<4096; i++ ) bogus_data[i] = c; c = gr_find_closest_color( 63, 0, 0 ); // Make a big red X ! for (i=0; i<64; i++ ) { bogus_data[i*64+i] = c; bogus_data[i*64+(63-i)] = c; } piggy_register_bitmap( &bogus_bitmap, "bogus", 1 ); bogus_sound.length = 64*64; bogus_sound.data = bogus_data; GameBitmapOffset[0] = 0; } filename = ":Data:DESCENT.PIG"; if ( FindArg( "-bigpig" )) BigPig = 1; if ( FindArg( "-lowmem" )) piggy_low_memory = 1; if ( FindArg( "-nolowmem" )) piggy_low_memory = 0; if (use_alt_textures) piggy_low_memory = 1; //MWA if (piggy_low_memory) //MWA digi_lomem = 1; if ( (i=FindArg( "-piggy" )) ) { filename = Args[i+1]; mprintf( (0, "Using alternate pigfile, '%s'\n", filename )); } Piggy_fp = cfopen( filename, "rb" ); if (Piggy_fp==NULL) return 0; Pigdata_start = read_int_swap(Piggy_fp); #ifdef EDITOR if ( FindArg("-nobm") ) #endif { bm_read_all( Piggy_fp ); // Note connection to above if!!! for (i = 0; i < MAX_BITMAP_FILES; i++) GameBitmapXlat[i] = read_short_swap(Piggy_fp); digi_load_sounds(); } cfseek( Piggy_fp, Pigdata_start, SEEK_SET ); size = cfilelength(Piggy_fp) - Pigdata_start; length = size; mprintf( (0, "\nReading data (%d KB) ", size/1024 )); N_bitmaps = read_int_swap(Piggy_fp); size -= sizeof(int); N_sounds = read_int_swap(Piggy_fp); size -= sizeof(int); // header_size = (N_bitmaps*sizeof(DiskBitmapHeader)) + (N_sounds*sizeof(DiskSoundHeader)); header_size = ((N_bitmaps*17) + (N_sounds*20)); gr_set_curfont( Gamefonts[GFONT_SMALL] ); gr_set_fontcolor(gr_find_closest_color_current( 20, 20, 20 ),-1 ); gr_printf( 0x8000, grd_curcanv->cv_bitmap.bm_h - 25, "%s...", TXT_LOADING_DATA ); bitblt_to_screen(); // put a couple of event loop calls here. This should take care of TM driver!!! process_one_event(); process_one_event(); process_one_event(); process_one_event(); for (i=0; i<N_bitmaps; i++ ) { cfread(bmh.name, 8, 1, Piggy_fp); bmh.dflags = read_byte(Piggy_fp); bmh.width = read_byte(Piggy_fp); bmh.height = read_byte(Piggy_fp); bmh.flags = read_byte(Piggy_fp); bmh.avg_color = read_byte(Piggy_fp); bmh.offset = read_int_swap(Piggy_fp); //size -= sizeof(DiskBitmapHeader); memcpy( temp_name_read, bmh.name, 8 ); temp_name_read[8] = 0; if ( bmh.dflags & DBM_FLAG_ABM ) sprintf( temp_name, "%s#%d", temp_name_read, bmh.dflags & 63 ); else strcpy( temp_name, temp_name_read ); memset( &temp_bitmap, 0, sizeof(grs_bitmap) ); if ( bmh.dflags & DBM_FLAG_LARGE ) temp_bitmap.bm_w = temp_bitmap.bm_rowsize = bmh.width+256; else temp_bitmap.bm_w = temp_bitmap.bm_rowsize = bmh.width; temp_bitmap.bm_h = bmh.height; temp_bitmap.bm_flags = BM_FLAG_PAGED_OUT; temp_bitmap.avg_color = bmh.avg_color; temp_bitmap.bm_data = Piggy_bitmap_cache_data; // HACK HACK HACK!!!!! if (!strnicmp(bmh.name, "cockpit", 7) || !strnicmp(bmh.name, "status", 6) || !strnicmp(bmh.name, "rearview", 8)) { temp_bitmap.bm_w = temp_bitmap.bm_rowsize = 640; } if (!strnicmp(bmh.name, "cockpit", 7) || !strnicmp(bmh.name, "rearview", 8)) temp_bitmap.bm_h = 480; GameBitmapFlags[i+1] = 0; if ( bmh.flags & BM_FLAG_TRANSPARENT ) GameBitmapFlags[i+1] |= BM_FLAG_TRANSPARENT; if ( bmh.flags & BM_FLAG_SUPER_TRANSPARENT ) GameBitmapFlags[i+1] |= BM_FLAG_SUPER_TRANSPARENT; if ( bmh.flags & BM_FLAG_NO_LIGHTING ) GameBitmapFlags[i+1] |= BM_FLAG_NO_LIGHTING; if ( bmh.flags & BM_FLAG_RLE ) GameBitmapFlags[i+1] |= BM_FLAG_RLE; GameBitmapOffset[i+1] = bmh.offset + header_size + (sizeof(int)*2) + Pigdata_start; Assert( (i+1) == Num_bitmap_files ); piggy_register_bitmap( &temp_bitmap, temp_name, 1 ); } #if 0 for (i=0; i<N_sounds; i++ ) { cfread(sndh.name, 8, 1, Piggy_fp); sndh.length = read_int_swap(Piggy_fp); sndh.data_length = read_int_swap(Piggy_fp); sndh.offset = read_int_swap(Piggy_fp); //size -= sizeof(DiskSoundHeader); temp_sound.length = sndh.length; temp_sound.data = (ubyte *)(sndh.offset + header_size + (sizeof(int)*2)+Pigdata_start); SoundOffset[Num_sound_files] = sndh.offset + header_size + (sizeof(int)*2)+Pigdata_start; memcpy( temp_name_read, sndh.name, 8 ); temp_name_read[8] = 0; piggy_register_sound( &temp_sound, temp_name_read, 1 ); sbytes += sndh.length; //mprintf(( 0, "%d bytes of sound\n", sbytes )); } SoundBits = mymalloc( sbytes + 16 ); if ( SoundBits == NULL ) Error( "Not enough memory to load DESCENT.PIG sounds\n" ); #endif #ifdef EDITOR Piggy_bitmap_cache_size = size - header_size - sbytes + 16; Assert( Piggy_bitmap_cache_size > 0 ); #else if (!piggy_low_memory) Piggy_bitmap_cache_size = PIGGY_BUFFER_SIZE; else Piggy_bitmap_cache_size = LOW_PIGGY_BUFFER_SIZE; #endif BitmapBits = mymalloc( 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; mprintf(( 0, "\nBitmaps: %d KB Sounds: %d KB\n", Piggy_bitmap_cache_size/1024, sbytes/1024 )); atexit(piggy_close_file); // mprintf( (0, "<<<<Paging in all piggy bitmaps...>>>>>" )); // for (i=0; i < Num_bitmap_files; i++ ) { // bitmap_index bi; // bi.index = i; // PIGGY_PAGE_IN( bi ); // } // mprintf( (0, "\n (USed %d / %d KB)\n", Piggy_bitmap_cache_next/1024, (size - header_size - sbytes + 16)/1024 )); // key_getch(); return 0; }