void con_printf(int priority, char *fmt, ...) { va_list arglist; char buffer[CON_LINE_LENGTH]; memset(buffer,'\0',CON_LINE_LENGTH); if (priority <= ((int)GameArg.DbgVerbose)) { char *p1, *p2; va_start (arglist, fmt); vsprintf (buffer, fmt, arglist); va_end (arglist); /* Produce a sanitised version and send it to the console */ p1 = p2 = buffer; do switch (*p1) { case CC_COLOR: case CC_LSPACING: p1++; case CC_UNDERLINE: p1++; break; default: *p2++ = *p1++; } while (*p1); *p2 = 0; /* add given string to con_buffer */ con_add_buffer_line(priority, buffer); /* Print output to stdout */ printf(buffer); /* Print output to gamelog.txt */ if (gamelog_fp) { struct tm *lt; time_t t; t=time(NULL); lt=localtime(&t); PHYSFSX_printf(gamelog_fp,"%02i:%02i:%02i ",lt->tm_hour,lt->tm_min,lt->tm_sec); #ifdef _WIN32 // stupid hack to force DOS-style newlines if (buffer[strlen(buffer)-1] == '\n' && strlen(buffer) <= CON_LINE_LENGTH) { buffer[strlen(buffer)-1]='\r'; buffer[strlen(buffer)]='\n'; } #endif PHYSFSX_printf(gamelog_fp,"%s",buffer); } } }
void mem_print_all() { PHYSFS_file * ef; int i, size = 0; ef = PHYSFSX_openWriteBuffered( "DESCENT.MEM" ); for (i=0; i<LargestIndex; i++ ) if (Present[i]==1 ) { size += MallocSize[i]; PHYSFSX_printf( ef, "%12d bytes in %s declared in %s, line %d\n", MallocSize[i], Varname[i], Filename[i], LineNum[i] ); } PHYSFSX_printf( ef, "%d bytes (%d Kbytes) allocated.\n", size, size/1024 ); PHYSFS_close(ef); }
// ----------------------------------------------------------------------------- static int med_save_situation(char * filename) { auto SaveFile = PHYSFSX_openWriteBuffered(filename); if (!SaveFile) { char ErrorMessage[200]; snprintf(ErrorMessage, sizeof(ErrorMessage), "ERROR: Unable to open %s\n", filename); ui_messagebox( -2, -2, 1, ErrorMessage, "Ok" ); return 1; } // Write mine name. struct splitpath_t path; d_splitpath(filename, &path); PHYSFSX_printf(SaveFile, "%.*s.min\n", DXX_ptrdiff_cast_int(path.base_end - path.base_start), path.base_start); // Write player position. PHYSFSX_printf(SaveFile, "%x %x %x\n",static_cast<unsigned>(ConsoleObject->pos.x),static_cast<unsigned>(ConsoleObject->pos.y),static_cast<unsigned>(ConsoleObject->pos.z)); // Write player orientation. PHYSFSX_printf(SaveFile, "%8x %8x %8x\n",static_cast<unsigned>(ConsoleObject->orient.rvec.x),static_cast<unsigned>(ConsoleObject->orient.rvec.y),static_cast<unsigned>(ConsoleObject->orient.rvec.z)); PHYSFSX_printf(SaveFile, "%8x %8x %8x\n",static_cast<unsigned>(ConsoleObject->orient.uvec.x),static_cast<unsigned>(ConsoleObject->orient.uvec.y),static_cast<unsigned>(ConsoleObject->orient.uvec.z)); PHYSFSX_printf(SaveFile, "%8x %8x %8x\n",static_cast<unsigned>(ConsoleObject->orient.fvec.x),static_cast<unsigned>(ConsoleObject->orient.fvec.y),static_cast<unsigned>(ConsoleObject->orient.fvec.z)); PHYSFSX_printf(SaveFile, "%i\n", ConsoleObject->segnum); return 1; }
// ----------------------------------------------------------------------------- int med_save_situation(char * filename) { PHYSFS_file * SaveFile; char mine_name[MAX_NAME_LENGTH]; SaveFile = PHYSFSX_openWriteBuffered( filename ); if (!SaveFile) { char ErrorMessage[200]; sprintf( ErrorMessage, "ERROR: Unable to open %s\n", filename ); ui_messagebox( -2, -2, 1, ErrorMessage, "Ok" ); return 1; } // Write mine name. // strcpy(mine_name, filename); d_splitpath(filename, NULL, NULL, mine_name, NULL); set_extension(mine_name, "min"); PHYSFSX_printf(SaveFile, "%s\n", mine_name); // Write player position. PHYSFSX_printf(SaveFile, "%x %x %x\n",(unsigned int) ConsoleObject->pos.x,(unsigned int) ConsoleObject->pos.y,(unsigned int) ConsoleObject->pos.z); // Write player orientation. PHYSFSX_printf(SaveFile, "%8x %8x %8x\n",(unsigned int) ConsoleObject->orient.rvec.x,(unsigned int) ConsoleObject->orient.rvec.y,(unsigned int) ConsoleObject->orient.rvec.z); PHYSFSX_printf(SaveFile, "%8x %8x %8x\n",(unsigned int) ConsoleObject->orient.uvec.x,(unsigned int) ConsoleObject->orient.uvec.y,(unsigned int) ConsoleObject->orient.uvec.z); PHYSFSX_printf(SaveFile, "%8x %8x %8x\n",(unsigned int) ConsoleObject->orient.fvec.x,(unsigned int) ConsoleObject->orient.fvec.y,(unsigned int) ConsoleObject->orient.fvec.z); PHYSFSX_printf(SaveFile, "%i\n", ConsoleObject->segnum); PHYSFS_close( SaveFile); return 1; }
dump_door_debugging_info() { object *obj; vms_vector new_pos; fvi_query fq; fvi_info hit_info; int fate; PHYSFS_file *dfile; int wall_num; obj = &Objects[Players[Player_num].objnum]; vm_vec_scale_add(&new_pos,&obj->pos,&obj->orient.fvec,i2f(100)); fq.p0 = &obj->pos; fq.startseg = obj->segnum; fq.p1 = &new_pos; fq.rad = 0; fq.thisobjnum = Players[Player_num].objnum; fq.ignore_obj_list = NULL; fq.flags = 0; fate = find_vector_intersection(&fq,&hit_info); dfile = PHYSFSX_openWriteBuffered("door.out"); PHYSFSX_printf(dfile,"FVI hit_type = %d\n",fate); PHYSFSX_printf(dfile," hit_seg = %d\n",hit_info.hit_seg); PHYSFSX_printf(dfile," hit_side = %d\n",hit_info.hit_side); PHYSFSX_printf(dfile," hit_side_seg = %d\n",hit_info.hit_side_seg); PHYSFSX_printf(dfile,"\n"); if (fate == HIT_WALL) { wall_num = Segments[hit_info.hit_seg].sides[hit_info.hit_side].wall_num; PHYSFSX_printf(dfile,"wall_num = %d\n",wall_num); if (wall_num != -1) { wall *wall = &Walls[wall_num]; active_door *d; int i; PHYSFSX_printf(dfile," segnum = %d\n",wall->segnum); PHYSFSX_printf(dfile," sidenum = %d\n",wall->sidenum); PHYSFSX_printf(dfile," hps = %x\n",wall->hps); PHYSFSX_printf(dfile," linked_wall = %d\n",wall->linked_wall); PHYSFSX_printf(dfile," type = %d\n",wall->type); PHYSFSX_printf(dfile," flags = %x\n",wall->flags); PHYSFSX_printf(dfile," state = %d\n",wall->state); PHYSFSX_printf(dfile," trigger = %d\n",wall->trigger); PHYSFSX_printf(dfile," clip_num = %d\n",wall->clip_num); PHYSFSX_printf(dfile," keys = %x\n",wall->keys); PHYSFSX_printf(dfile," controlling_trigger = %d\n",wall->controlling_trigger); PHYSFSX_printf(dfile," cloak_value = %d\n",wall->cloak_value); PHYSFSX_printf(dfile,"\n"); for (i=0;i<Num_open_doors;i++) { //find door d = &ActiveDoors[i]; if (d->front_wallnum[0]==wall-Walls || d->back_wallnum[0]==wall-Walls || (d->n_parts==2 && (d->front_wallnum[1]==wall-Walls || d->back_wallnum[1]==wall-Walls))) break; } if (i>=Num_open_doors) PHYSFSX_printf(dfile,"No active door.\n"); else { PHYSFSX_printf(dfile,"Active door %d:\n",i); PHYSFSX_printf(dfile," n_parts = %d\n",d->n_parts); PHYSFSX_printf(dfile," front_wallnum = %d,%d\n",d->front_wallnum[0],d->front_wallnum[1]); PHYSFSX_printf(dfile," back_wallnum = %d,%d\n",d->back_wallnum[0],d->back_wallnum[1]); PHYSFSX_printf(dfile," time = %x\n",d->time); } } } PHYSFSX_printf(dfile,"\n"); PHYSFSX_printf(dfile,"\n"); PHYSFS_close(dfile); }
void piggy_dump_all() { int i, xlat_offset; PHYSFS_file * fp; #ifndef RELEASE PHYSFS_file * fp1; PHYSFS_file * fp2; #endif char * filename; int data_offset; int org_offset; DiskBitmapHeader bmh; DiskSoundHeader sndh; int header_offset; char subst_name[32]; #ifdef NO_DUMP_SOUNDS Num_sound_files = 0; Num_sound_files_new = 0; #endif // { // bitmap_index bi; // bi.index = 614; // PIGGY_PAGE_IN( bi ); // count_colors( bi.index, &GameBitmaps[bi.index] ); // key_getch(); // } // { // bitmap_index bi; // bi.index = 478; // PIGGY_PAGE_IN( bi ); // Int3(); // count_colors( bi.index, &GameBitmaps[bi.index] ); // key_getch(); // } // { // bitmap_index bi; // bi.index = 1398; // PIGGY_PAGE_IN( bi ); // count_colors( bi.index, &GameBitmaps[bi.index] ); // key_getch(); // } // { // bitmap_index bi; // bi.index = 642; // PIGGY_PAGE_IN( bi ); // count_colors( bi.index, &GameBitmaps[bi.index] ); // key_getch(); // } // { // bitmap_index bi; // bi.index = 529; // PIGGY_PAGE_IN( bi ); // count_colors( bi.index, &GameBitmaps[bi.index] ); // key_getch(); // } // exit(0); // if ((Num_bitmap_files_new == 0) && (Num_sound_files_new == 0) ) return; for (i=0; i < Num_bitmap_files; i++ ) { bitmap_index bi; bi.index = i; PIGGY_PAGE_IN( bi ); } piggy_close_file(); filename = SHAREPATH "descent.pig"; fp = PHYSFSX_openWriteBuffered( filename ); Assert( fp!=NULL ); #ifndef RELEASE fp1 = PHYSFSX_openWriteBuffered( "piggy.lst" ); fp2 = PHYSFSX_openWriteBuffered( "piggy.all" ); #endif i = 0; PHYSFS_write( fp, &i, sizeof(int), 1 ); bm_write_all(fp); xlat_offset = PHYSFS_tell(fp); PHYSFS_write( fp, GameBitmapXlat, sizeof(ushort)*MAX_BITMAP_FILES, 1 ); i = PHYSFS_tell(fp); PHYSFSX_fseek( fp, 0, SEEK_SET ); PHYSFS_write( fp, &i, sizeof(int), 1 ); PHYSFSX_fseek( fp, i, SEEK_SET ); Num_bitmap_files--; PHYSFS_write( fp, &Num_bitmap_files, sizeof(int), 1 ); Num_bitmap_files++; PHYSFS_write( fp, &Num_sound_files, sizeof(int), 1 ); header_offset = PHYSFS_tell(fp); header_offset += ((Num_bitmap_files-1)*sizeof(DiskBitmapHeader)) + (Num_sound_files*sizeof(DiskSoundHeader)); data_offset = header_offset; for (i=1; i < Num_bitmap_files; i++ ) { int *size; grs_bitmap *bmp; { char * p, *p1; p = strchr(AllBitmaps[i].name,'#'); if (p) { int n; p1 = p; p1++; n = atoi(p1); *p = 0; #ifndef RELEASE if (n==0) { PHYSFSX_printf( fp2, "%s.abm\n", AllBitmaps[i].name ); } #endif memcpy( bmh.name, AllBitmaps[i].name, 8 ); Assert( n <= 63 ); bmh.dflags = DBM_FLAG_ABM + n; *p = '#'; }else { #ifndef RELEASE PHYSFSX_printf( fp2, "%s.bbm\n", AllBitmaps[i].name ); #endif memcpy( bmh.name, AllBitmaps[i].name, 8 ); bmh.dflags = 0; } } bmp = &GameBitmaps[i]; Assert( !(bmp->bm_flags&BM_FLAG_PAGED_OUT) ); #ifndef RELEASE PHYSFSX_printf( fp1, "BMP: %s, size %d bytes", AllBitmaps[i].name, bmp->bm_rowsize * bmp->bm_h ); #endif org_offset = PHYSFS_tell(fp); bmh.offset = data_offset - header_offset; PHYSFSX_fseek( fp, data_offset, SEEK_SET ); if ( bmp->bm_flags & BM_FLAG_RLE ) { size = (int *)bmp->bm_data; PHYSFS_write( fp, bmp->bm_data, sizeof(ubyte), *size ); data_offset += *size; //bmh.data_length = *size; #ifndef RELEASE PHYSFSX_printf( fp1, ", and is already compressed to %d bytes.\n", *size ); #endif } else { PHYSFS_write( fp, bmp->bm_data, sizeof(ubyte), bmp->bm_rowsize * bmp->bm_h ); data_offset += bmp->bm_rowsize * bmp->bm_h; //bmh.data_length = bmp->bm_rowsize * bmp->bm_h; #ifndef RELEASE PHYSFSX_printf( fp1, ".\n" ); #endif } PHYSFSX_fseek( fp, org_offset, SEEK_SET ); if ( GameBitmaps[i].bm_w > 255 ) { Assert( GameBitmaps[i].bm_w < 512 ); bmh.width = GameBitmaps[i].bm_w - 256; bmh.dflags |= DBM_FLAG_LARGE; } else { bmh.width = GameBitmaps[i].bm_w; } Assert( GameBitmaps[i].bm_h < 256 ); bmh.height = GameBitmaps[i].bm_h; bmh.flags = GameBitmaps[i].bm_flags; if (piggy_is_substitutable_bitmap( AllBitmaps[i].name, subst_name )) { bitmap_index other_bitmap; other_bitmap = piggy_find_bitmap( subst_name ); GameBitmapXlat[i] = other_bitmap.index; bmh.flags |= BM_FLAG_PAGED_OUT; } else { #ifdef BUILD_PSX_DATA count_colors( i, &GameBitmaps[i] ); #endif bmh.flags &= ~BM_FLAG_PAGED_OUT; } bmh.avg_color=GameBitmaps[i].avg_color; PHYSFS_write( fp, &bmh, sizeof(DiskBitmapHeader), 1 ); // Mark as a bitmap } for (i=0; i < Num_sound_files; i++ ) { digi_sound *snd; snd = &GameSounds[i]; strcpy( sndh.name, AllSounds[i].name ); #ifdef ALLEGRO sndh.length = GameSounds[i].len; #else sndh.length = GameSounds[i].length; #endif sndh.offset = data_offset - header_offset; org_offset = PHYSFS_tell(fp); PHYSFSX_fseek( fp, data_offset, SEEK_SET ); sndh.data_length = sndh.length; PHYSFS_write( fp, snd->data, sizeof(ubyte), sndh.length ); data_offset += sndh.length; PHYSFSX_fseek( fp, org_offset, SEEK_SET ); PHYSFS_write( fp, &sndh, sizeof(DiskSoundHeader), 1 ); // Mark as a bitmap #ifndef RELEASE PHYSFSX_printf( fp1, "SND: %s, size %d bytes\n", AllSounds[i].name, sndh.length ); PHYSFSX_printf( fp2, "%s.raw\n", AllSounds[i].name ); #endif } PHYSFSX_fseek( fp, xlat_offset, SEEK_SET ); PHYSFS_write( fp, GameBitmapXlat, sizeof(ushort)*MAX_BITMAP_FILES, 1 ); PHYSFS_close(fp); #ifndef RELEASE PHYSFSX_printf( fp1, " Dumped %d assorted bitmaps.\n", Num_bitmap_files ); PHYSFSX_printf( fp1, " Dumped %d assorted sounds.\n", Num_sound_files ); PHYSFS_close(fp1); PHYSFS_close(fp2); #endif #ifdef BUILD_PSX_DATA fp = PHYSFSX_openWriteBuffered( "psx/descent.dat" ); PHYSFS_write( fp, &i, sizeof(int), 1 ); bm_write_all(fp); PHYSFS_write( fp, GameBitmapXlat, sizeof(ushort)*MAX_BITMAP_FILES, 1 ); PHYSFS_close(fp); #endif // Never allow the game to run after building pig. exit(0); }
int write_player_d1x(char *filename) { PHYSFS_file *fout; int rc=0; char tempfile[PATH_MAX]; strcpy(tempfile,filename); tempfile[strlen(tempfile)-4]=0; strcat(tempfile,".pl$"); fout=PHYSFSX_openWriteBuffered(tempfile); if (!fout && GameArg.SysUsePlayersDir) { PHYSFS_mkdir("Players/"); //try making directory fout=PHYSFSX_openWriteBuffered(tempfile); } if(fout) { PHYSFSX_printf(fout,"[D1X Options]\n"); PHYSFSX_printf(fout,"[weapon reorder]\n"); PHYSFSX_printf(fout,"primary=0x%x,0x%x,0x%x,0x%x,0x%x,0x%x\n",PlayerCfg.PrimaryOrder[0], PlayerCfg.PrimaryOrder[1], PlayerCfg.PrimaryOrder[2],PlayerCfg.PrimaryOrder[3], PlayerCfg.PrimaryOrder[4], PlayerCfg.PrimaryOrder[5]); PHYSFSX_printf(fout,"secondary=0x%x,0x%x,0x%x,0x%x,0x%x,0x%x\n",PlayerCfg.SecondaryOrder[0], PlayerCfg.SecondaryOrder[1], PlayerCfg.SecondaryOrder[2],PlayerCfg.SecondaryOrder[3], PlayerCfg.SecondaryOrder[4], PlayerCfg.SecondaryOrder[5]); PHYSFSX_printf(fout,"[end]\n"); PHYSFSX_printf(fout,"[joystick]\n"); PHYSFSX_printf(fout,"sensitivity0=%d\n",PlayerCfg.JoystickSens[0]); PHYSFSX_printf(fout,"sensitivity1=%d\n",PlayerCfg.JoystickSens[1]); PHYSFSX_printf(fout,"sensitivity2=%d\n",PlayerCfg.JoystickSens[2]); PHYSFSX_printf(fout,"sensitivity3=%d\n",PlayerCfg.JoystickSens[3]); PHYSFSX_printf(fout,"sensitivity4=%d\n",PlayerCfg.JoystickSens[4]); PHYSFSX_printf(fout,"sensitivity5=%d\n",PlayerCfg.JoystickSens[5]); PHYSFSX_printf(fout,"deadzone0=%d\n",PlayerCfg.JoystickDead[0]); PHYSFSX_printf(fout,"deadzone1=%d\n",PlayerCfg.JoystickDead[1]); PHYSFSX_printf(fout,"deadzone2=%d\n",PlayerCfg.JoystickDead[2]); PHYSFSX_printf(fout,"deadzone3=%d\n",PlayerCfg.JoystickDead[3]); PHYSFSX_printf(fout,"deadzone4=%d\n",PlayerCfg.JoystickDead[4]); PHYSFSX_printf(fout,"deadzone5=%d\n",PlayerCfg.JoystickDead[5]); PHYSFSX_printf(fout,"[end]\n"); PHYSFSX_printf(fout,"[mouse]\n"); PHYSFSX_printf(fout,"flightsim=%d\n",PlayerCfg.MouseFlightSim); PHYSFSX_printf(fout,"sensitivity0=%d\n",PlayerCfg.MouseSens[0]); PHYSFSX_printf(fout,"sensitivity1=%d\n",PlayerCfg.MouseSens[1]); PHYSFSX_printf(fout,"sensitivity2=%d\n",PlayerCfg.MouseSens[2]); PHYSFSX_printf(fout,"sensitivity3=%d\n",PlayerCfg.MouseSens[3]); PHYSFSX_printf(fout,"sensitivity4=%d\n",PlayerCfg.MouseSens[4]); PHYSFSX_printf(fout,"sensitivity5=%d\n",PlayerCfg.MouseSens[5]); PHYSFSX_printf(fout,"fsdead=%d\n",PlayerCfg.MouseFSDead); PHYSFSX_printf(fout,"fsindi=%d\n",PlayerCfg.MouseFSIndicator); PHYSFSX_printf(fout,"[end]\n"); PHYSFSX_printf(fout,"[weapon keys v2]\n"); PHYSFSX_printf(fout,"1=0x%x,0x%x,0x%x\n",PlayerCfg.KeySettingsD1X[0],PlayerCfg.KeySettingsD1X[1],PlayerCfg.KeySettingsD1X[2]); PHYSFSX_printf(fout,"2=0x%x,0x%x,0x%x\n",PlayerCfg.KeySettingsD1X[3],PlayerCfg.KeySettingsD1X[4],PlayerCfg.KeySettingsD1X[5]); PHYSFSX_printf(fout,"3=0x%x,0x%x,0x%x\n",PlayerCfg.KeySettingsD1X[6],PlayerCfg.KeySettingsD1X[7],PlayerCfg.KeySettingsD1X[8]); PHYSFSX_printf(fout,"4=0x%x,0x%x,0x%x\n",PlayerCfg.KeySettingsD1X[9],PlayerCfg.KeySettingsD1X[10],PlayerCfg.KeySettingsD1X[11]); PHYSFSX_printf(fout,"5=0x%x,0x%x,0x%x\n",PlayerCfg.KeySettingsD1X[12],PlayerCfg.KeySettingsD1X[13],PlayerCfg.KeySettingsD1X[14]); PHYSFSX_printf(fout,"6=0x%x,0x%x,0x%x\n",PlayerCfg.KeySettingsD1X[15],PlayerCfg.KeySettingsD1X[16],PlayerCfg.KeySettingsD1X[17]); PHYSFSX_printf(fout,"7=0x%x,0x%x,0x%x\n",PlayerCfg.KeySettingsD1X[18],PlayerCfg.KeySettingsD1X[19],PlayerCfg.KeySettingsD1X[20]); PHYSFSX_printf(fout,"8=0x%x,0x%x,0x%x\n",PlayerCfg.KeySettingsD1X[21],PlayerCfg.KeySettingsD1X[22],PlayerCfg.KeySettingsD1X[23]); PHYSFSX_printf(fout,"9=0x%x,0x%x,0x%x\n",PlayerCfg.KeySettingsD1X[24],PlayerCfg.KeySettingsD1X[25],PlayerCfg.KeySettingsD1X[26]); PHYSFSX_printf(fout,"0=0x%x,0x%x,0x%x\n",PlayerCfg.KeySettingsD1X[27],PlayerCfg.KeySettingsD1X[28],PlayerCfg.KeySettingsD1X[29]); PHYSFSX_printf(fout,"[end]\n"); PHYSFSX_printf(fout,"[cockpit]\n"); PHYSFSX_printf(fout,"mode=%i\n",PlayerCfg.CockpitMode[0]); PHYSFSX_printf(fout,"hud=%i\n",PlayerCfg.HudMode); PHYSFSX_printf(fout,"rettype=%i\n",PlayerCfg.ReticleType); PHYSFSX_printf(fout,"retrgba=%i,%i,%i,%i\n",PlayerCfg.ReticleRGBA[0],PlayerCfg.ReticleRGBA[1],PlayerCfg.ReticleRGBA[2],PlayerCfg.ReticleRGBA[3]); PHYSFSX_printf(fout,"retsize=%i\n",PlayerCfg.ReticleSize); PHYSFSX_printf(fout,"[end]\n"); PHYSFSX_printf(fout,"[toggles]\n"); PHYSFSX_printf(fout,"persistentdebris=%i\n",PlayerCfg.PersistentDebris); PHYSFSX_printf(fout,"prshot=%i\n",PlayerCfg.PRShot); PHYSFSX_printf(fout,"noredundancy=%i\n",PlayerCfg.NoRedundancy); PHYSFSX_printf(fout,"multimessages=%i\n",PlayerCfg.MultiMessages); PHYSFSX_printf(fout,"bombgauge=%i\n",PlayerCfg.BombGauge); PHYSFSX_printf(fout,"automapfreeflight=%i\n",PlayerCfg.AutomapFreeFlight); PHYSFSX_printf(fout,"nofireautoselect=%i\n",PlayerCfg.NoFireAutoselect); PHYSFSX_printf(fout,"[end]\n"); PHYSFSX_printf(fout,"[graphics]\n"); PHYSFSX_printf(fout,"alphaeffects=%i\n",PlayerCfg.AlphaEffects); PHYSFSX_printf(fout,"dynlightcolor=%i\n",PlayerCfg.DynLightColor); PHYSFSX_printf(fout,"[end]\n"); PHYSFSX_printf(fout,"[plx version]\n"); PHYSFSX_printf(fout,"plx version=%s\n",VERSION); PHYSFSX_printf(fout,"[end]\n"); PHYSFSX_printf(fout,"[end]\n"); PHYSFS_close(fout); if(rc==0) { PHYSFS_delete(filename); rc = PHYSFSX_rename(tempfile,filename); } return rc; } else return errno; }
void plyr_save_stats() { int kills = PlayerCfg.NetlifeKills,deaths = PlayerCfg.NetlifeKilled, neg, i; char filename[PATH_MAX]; unsigned char buf[16],buf2[16],a; PHYSFS_file *f; memset(filename, '\0', PATH_MAX); snprintf(filename, PATH_MAX, GameArg.SysUsePlayersDir?"Players/%s.eff":"%s.eff", Players[Player_num].callsign); f = PHYSFSX_openWriteBuffered(filename); if(!f) return; //broken! PHYSFSX_printf(f,"kills:%i\n",kills); PHYSFSX_printf(f,"deaths:%i\n",deaths); PHYSFSX_printf(f,"key:01 "); if (kills<0) { neg=1; kills*=-1; } else neg=0; for (i=0;kills;i++) { a=(kills & 0xFF) ^ effcode1[i+neg]; buf[i*2]=(a&0xF)+33; buf[i*2+1]=(a>>4)+33; a=(kills & 0xFF) ^ effcode2[i+neg]; buf2[i*2]=(a&0xF)+33; buf2[i*2+1]=(a>>4)+33; kills>>=8; } buf[i*2]=0; buf2[i*2]=0; if (neg) i+='a'; else i+='A'; PHYSFSX_printf(f,"%c%s %c%s ",i,buf,i,buf2); if (deaths<0) { neg=1; deaths*=-1; }else neg=0; for (i=0;deaths;i++) { a=(deaths & 0xFF) ^ effcode3[i+neg]; buf[i*2]=(a&0xF)+33; buf[i*2+1]=(a>>4)+33; a=(deaths & 0xFF) ^ effcode4[i+neg]; buf2[i*2]=(a&0xF)+33; buf2[i*2+1]=(a>>4)+33; deaths>>=8; } buf[i*2]=0; buf2[i*2]=0; if (neg) i+='a'; else i+='A'; PHYSFSX_printf(f,"%c%s %c%s\n",i,buf,i,buf2); PHYSFS_close(f); }
// write values from netgame_info to ngp file void write_netgame_profile(netgame_info *ng) { char filename[PATH_MAX]; PHYSFS_file *file; memset(filename, '\0', PATH_MAX); snprintf(filename, PATH_MAX, GameArg.SysUsePlayersDir? "Players/%.8s.ngp" : "%.8s.ngp", Players[Player_num].callsign); file = PHYSFSX_openWriteBuffered(filename); if (!file) return; PHYSFSX_printf(file, "game_name=%s\n", ng->game_name); PHYSFSX_printf(file, "gamemode=%i\n", ng->gamemode); PHYSFSX_printf(file, "RefusePlayers=%i\n", ng->RefusePlayers); PHYSFSX_printf(file, "difficulty=%i\n", ng->difficulty); PHYSFSX_printf(file, "game_flags=%i\n", ng->game_flags); PHYSFSX_printf(file, "AllowedItems=%i\n", ng->AllowedItems); PHYSFSX_printf(file, "ShowEnemyNames=%i\n", ng->ShowEnemyNames); PHYSFSX_printf(file, "BrightPlayers=%i\n", ng->BrightPlayers); PHYSFSX_printf(file, "InvulAppear=%i\n", ng->InvulAppear); PHYSFSX_printf(file, "KillGoal=%i\n", ng->KillGoal); PHYSFSX_printf(file, "PlayTimeAllowed=%i\n", ng->PlayTimeAllowed); PHYSFSX_printf(file, "control_invul_time=%i\n", ng->control_invul_time); PHYSFSX_printf(file, "PacketsPerSec=%i\n", ng->PacketsPerSec); PHYSFSX_printf(file, "NoFriendlyFire=%i\n", ng->NoFriendlyFire); #ifdef USE_TRACKER PHYSFSX_printf(file, "Tracker=%i\n", ng->Tracker); #else PHYSFSX_printf(file, "Tracker=0\n"); #endif PHYSFSX_printf(file, "ngp version=%s\n",VERSION); PHYSFS_close(file); }
int WriteConfigFile() { PHYSFS_file *infile; GameCfg.GammaLevel = gr_palette_get_gamma(); infile = PHYSFSX_openWriteBuffered("descent.cfg"); if (infile == NULL) { return 1; } PHYSFSX_printf(infile, "%s=%d\n", DigiVolumeStr, GameCfg.DigiVolume); PHYSFSX_printf(infile, "%s=%d\n", MusicVolumeStr, GameCfg.MusicVolume); PHYSFSX_printf(infile, "%s=%d\n", ReverseStereoStr, GameCfg.ReverseStereo); PHYSFSX_printf(infile, "%s=%d\n", OrigTrackOrderStr, GameCfg.OrigTrackOrder); PHYSFSX_printf(infile, "%s=%d\n", MusicTypeStr, GameCfg.MusicType); PHYSFSX_printf(infile, "%s=%d\n", CMLevelMusicPlayOrderStr, GameCfg.CMLevelMusicPlayOrder); PHYSFSX_printf(infile, "%s=%d\n", CMLevelMusicTrack0Str, GameCfg.CMLevelMusicTrack[0]); PHYSFSX_printf(infile, "%s=%d\n", CMLevelMusicTrack1Str, GameCfg.CMLevelMusicTrack[1]); PHYSFSX_printf(infile, "%s=%s\n", CMLevelMusicPathStr, GameCfg.CMLevelMusicPath); PHYSFSX_printf(infile, "%s=%s\n", CMMiscMusic0Str, GameCfg.CMMiscMusic[SONG_TITLE]); PHYSFSX_printf(infile, "%s=%s\n", CMMiscMusic1Str, GameCfg.CMMiscMusic[SONG_BRIEFING]); PHYSFSX_printf(infile, "%s=%s\n", CMMiscMusic2Str, GameCfg.CMMiscMusic[SONG_ENDLEVEL]); PHYSFSX_printf(infile, "%s=%s\n", CMMiscMusic3Str, GameCfg.CMMiscMusic[SONG_ENDGAME]); PHYSFSX_printf(infile, "%s=%s\n", CMMiscMusic4Str, GameCfg.CMMiscMusic[SONG_CREDITS]); PHYSFSX_printf(infile, "%s=%d\n", GammaLevelStr, GameCfg.GammaLevel); PHYSFSX_printf(infile, "%s=%s\n", LastPlayerStr, Players[Player_num].callsign); PHYSFSX_printf(infile, "%s=%s\n", LastMissionStr, GameCfg.LastMission); PHYSFSX_printf(infile, "%s=%i\n", ResolutionXStr, SM_W(Game_screen_mode)); PHYSFSX_printf(infile, "%s=%i\n", ResolutionYStr, SM_H(Game_screen_mode)); PHYSFSX_printf(infile, "%s=%i\n", AspectXStr, GameCfg.AspectX); PHYSFSX_printf(infile, "%s=%i\n", AspectYStr, GameCfg.AspectY); PHYSFSX_printf(infile, "%s=%i\n", WindowModeStr, GameCfg.WindowMode); PHYSFSX_printf(infile, "%s=%i\n", TexFiltStr, GameCfg.TexFilt); PHYSFSX_printf(infile, "%s=%i\n", VSyncStr, GameCfg.VSync); PHYSFSX_printf(infile, "%s=%i\n", MultisampleStr, GameCfg.Multisample); PHYSFSX_printf(infile, "%s=%i\n", FPSIndicatorStr, GameCfg.FPSIndicator); PHYSFSX_printf(infile, "%s=%i\n", GrabinputStr, GameCfg.Grabinput); PHYSFS_close(infile); return 0; }
// ----------------------------------------------------------------------------- // Save game int save_game_data(PHYSFS_file *SaveFile) { short game_top_fileinfo_version = Gamesave_current_version >= 5 ? 31 : GAME_VERSION; int player_offset=0, object_offset=0, walls_offset=0, doors_offset=0, triggers_offset=0, control_offset=0, matcen_offset=0; //, links_offset; int offset_offset=0, end_offset=0; int i; //===================== SAVE FILE INFO ======================== PHYSFS_writeSLE16(SaveFile, 0x6705); // signature PHYSFS_writeSLE16(SaveFile, game_top_fileinfo_version); PHYSFS_writeSLE32(SaveFile, sizeof(game_fileinfo)); PHYSFS_write(SaveFile, Current_level_name, 15, 1); PHYSFS_writeSLE32(SaveFile, Current_level_num); offset_offset = PHYSFS_tell(SaveFile); // write the offsets later PHYSFS_writeSLE32(SaveFile, -1); PHYSFS_writeSLE32(SaveFile, sizeof(player)); #define WRITE_HEADER_ENTRY(t, n) do { PHYSFS_writeSLE32(SaveFile, -1); PHYSFS_writeSLE32(SaveFile, n); PHYSFS_writeSLE32(SaveFile, sizeof(t)); } while(0) WRITE_HEADER_ENTRY(object, Highest_object_index + 1); WRITE_HEADER_ENTRY(wall, Num_walls); WRITE_HEADER_ENTRY(active_door, Num_open_doors); WRITE_HEADER_ENTRY(trigger, Num_triggers); WRITE_HEADER_ENTRY(0, 0); // links (removed by Parallax) WRITE_HEADER_ENTRY(control_center_triggers, 1); WRITE_HEADER_ENTRY(matcen_info, Num_robot_centers); // Write the mine name PHYSFSX_printf(SaveFile, "%s\n", Current_level_name); PHYSFS_writeSLE16(SaveFile, N_polygon_models); PHYSFS_write(SaveFile, Pof_names, sizeof(*Pof_names), N_polygon_models); //==================== SAVE PLAYER INFO =========================== player_offset = PHYSFS_tell(SaveFile); PHYSFS_write(SaveFile, &Players[Player_num], sizeof(player), 1); // not endian friendly, but not used either //==================== SAVE OBJECT INFO =========================== object_offset = PHYSFS_tell(SaveFile); //fwrite( &Objects, sizeof(object), game_fileinfo.object_howmany, SaveFile ); for (i = 0; i <= Highest_object_index; i++) write_object(&Objects[i], SaveFile); //==================== SAVE WALL INFO ============================= walls_offset = PHYSFS_tell(SaveFile); for (i = 0; i < Num_walls; i++) wall_write(&Walls[i], game_top_fileinfo_version, SaveFile); //==================== SAVE DOOR INFO ============================= #if 0 // FIXME: okay to leave this out? doors_offset = PHYSFS_tell(SaveFile); for (i = 0; i < Num_open_doors; i++) door_write(&ActiveDoors[i], game_top_fileinfo_version, SaveFile); #endif //==================== SAVE TRIGGER INFO ============================= triggers_offset = PHYSFS_tell(SaveFile); for (i = 0; i < Num_triggers; i++) trigger_write(&Triggers[i], game_top_fileinfo_version, SaveFile); //================ SAVE CONTROL CENTER TRIGGER INFO =============== control_offset = PHYSFS_tell(SaveFile); control_center_triggers_write(&ControlCenterTriggers, SaveFile); //================ SAVE MATERIALIZATION CENTER TRIGGER INFO =============== matcen_offset = PHYSFS_tell(SaveFile); for (i = 0; i < Num_robot_centers; i++) matcen_info_write(&RobotCenters[i], game_top_fileinfo_version, SaveFile); //============= REWRITE FILE INFO, TO SAVE OFFSETS =============== end_offset = PHYSFS_tell(SaveFile); // Update the offset fields #define WRITE_OFFSET(o, n) do { PHYSFS_seek(SaveFile, offset_offset); PHYSFS_writeSLE32(SaveFile, o ## _offset); offset_offset += sizeof(int)*n; } while (0) WRITE_OFFSET(player, 2); WRITE_OFFSET(object, 3); WRITE_OFFSET(walls, 3); WRITE_OFFSET(doors, 3); WRITE_OFFSET(triggers, 6); WRITE_OFFSET(control, 3); WRITE_OFFSET(matcen, 3); // Go back to end of data PHYSFS_seek(SaveFile, end_offset); return 0; }
int dump_walls_info() { int w; PHYSFS_file *fp; fp = PHYSFSX_openWriteBuffered("WALL.OUT"); PHYSFSX_printf(fp, "Num_walls %d\n", Num_walls); for (w=0; w<Num_walls; w++) { PHYSFSX_printf(fp, "WALL #%d\n", w); PHYSFSX_printf(fp, " seg: %d\n", Walls[w].segnum); PHYSFSX_printf(fp, " sidenum: %d\n", Walls[w].sidenum); switch (Walls[w].type) { case WALL_NORMAL: PHYSFSX_printf(fp, " type: NORMAL\n"); break; case WALL_BLASTABLE: PHYSFSX_printf(fp, " type: BLASTABLE\n"); break; case WALL_DOOR: PHYSFSX_printf(fp, " type: DOOR\n"); break; case WALL_ILLUSION: PHYSFSX_printf(fp, " type: ILLUSION\n"); break; case WALL_OPEN: PHYSFSX_printf(fp, " type: OPEN\n"); break; case WALL_CLOSED: PHYSFSX_printf(fp, " type: CLOSED\n"); break; default: PHYSFSX_printf(fp, " type: ILLEGAL!!!!! <-----------------\n"); break; } PHYSFSX_printf(fp, " flags:\n"); if (Walls[w].flags & WALL_BLASTED) PHYSFSX_printf(fp, " BLASTED\n"); if (Walls[w].flags & WALL_DOOR_OPENED) PHYSFSX_printf(fp, " DOOR_OPENED <----------------- BAD!!!\n"); if (Walls[w].flags & WALL_DOOR_OPENING) PHYSFSX_printf(fp, " DOOR_OPENING <---------------- BAD!!!\n"); if (Walls[w].flags & WALL_DOOR_LOCKED) PHYSFSX_printf(fp, " DOOR_LOCKED\n"); if (Walls[w].flags & WALL_DOOR_AUTO) PHYSFSX_printf(fp, " DOOR_AUTO\n"); if (Walls[w].flags & WALL_ILLUSION_OFF) PHYSFSX_printf(fp, " ILLUSION_OFF <---------------- OUTDATED\n"); //if (Walls[w].flags & WALL_FUELCEN) // PHYSFSX_printf(fp, " FUELCEN <--------------------- OUTDATED\n"); PHYSFSX_printf(fp, " trigger: %d\n", Walls[w].trigger); PHYSFSX_printf(fp, " clip_num: %d\n", Walls[w].clip_num); switch (Walls[w].keys) { case KEY_NONE: PHYSFSX_printf(fp, " key: NONE\n"); break; case KEY_BLUE: PHYSFSX_printf(fp, " key: BLUE\n"); break; case KEY_RED: PHYSFSX_printf(fp, " key: RED\n"); break; case KEY_GOLD: PHYSFSX_printf(fp, " key: NONE\n"); break; default: PHYSFSX_printf(fp, " key: ILLEGAL!!!!!! <-----------------\n"); break; } PHYSFSX_printf(fp, " linked_wall %d\n", Walls[w].linked_wall); } PHYSFS_close(fp); return 1; }