From 3a52d03d214c7c1bd937463c5357aab5c8850c21 Mon Sep 17 00:00:00 2001 From: zicodxx <> Date: Sun, 13 Apr 2008 00:28:36 +0000 Subject: [PATCH] Added structure for values saved in PLR/PLX files; Added most common command-line options to options menu --- CHANGELOG.txt | 4 + arch/ogl/gr.c | 3 +- arch/ogl/ogl.c | 3 +- arch/sdl/joy.c | 6 +- d2x.ini | 8 -- include/args.h | 5 - main/automap.c | 5 +- main/collide.h | 4 +- main/config.c | 3 - main/config.h | 5 - main/endlevel.c | 4 +- main/escort.c | 15 +-- main/escort.h | 13 +- main/game.c | 28 ++-- main/game.h | 4 - main/gamecntl.c | 40 +++--- main/gamerend.c | 63 +++++---- main/gameseq.c | 14 +- main/gauges.c | 113 ++++++++-------- main/gauges.h | 1 - main/hud.c | 6 +- main/inferno.c | 9 -- main/kconfig.c | 127 ++++++++---------- main/kconfig.h | 6 +- main/menu.c | 214 ++++++++++++++++-------------- main/menu.h | 3 - main/multi.c | 11 +- main/multi.h | 2 - main/network.c | 10 +- main/newdemo.c | 29 ++-- main/newmenu.c | 5 +- main/object.c | 5 +- main/playsave.c | 343 ++++++++++++++++++++++++++---------------------- main/playsave.h | 50 ++++++- main/powerup.c | 6 +- main/powerup.h | 2 - main/weapon.c | 42 +++--- misc/args.c | 10 -- 38 files changed, 609 insertions(+), 612 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 51198c165..80bc98d3f 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,5 +1,9 @@ D2X-Rebirth Changelog +20080413 +-------- +include/args.h, main/newmenu.c, main/collide.h, main/network.c, main/multi.c, main/multi.h, main/inferno.c, main/menu.c, main/menu.h, main/playsave.c, main/playsave.h, main/object.c, main/hud.c, main/weapon.c, main/newdemo.c, main/config.c, main/config.h, main/gamerend.c, main/gameseq.c, main/escort.c, main/escort.h, main/endlevel.c, main/powerup.c, main/powerup.h, main/automap.c, main/game.c, main/gauges.c, main/game.h, main/kconfig.c, main/gauges.h, main/kconfig.h, main/gamecntl.c, misc/args.c, d2x.ini, arch/ogl/ogl.c, arch/ogl/gr.c, arch/sdl/joy.c: Added structure for values saved in PLR/PLX files; Added most common command-line options to options menu + 20080408 -------- d2x-rebirth.xcodeproj, include/cfile.h, main/inferno.c, main/newmenu.c, misc/error.c, ui/gadget.c, ui/window.c: show a messagebox if there's an error and graphics are initialised, update Xcode project diff --git a/arch/ogl/gr.c b/arch/ogl/gr.c index ba12dc7d1..690d7c96c 100644 --- a/arch/ogl/gr.c +++ b/arch/ogl/gr.c @@ -48,6 +48,7 @@ #include "render.h" #include "console.h" #include "config.h" +#include "playsave.h" #if defined(__APPLE__) && defined(__MACH__) #include @@ -546,7 +547,7 @@ void save_screen_shot(int automap_flag) if (!automap_flag) hud_message(MSGC_GAME_FEEDBACK,message); - if (!automap_flag && GameArg.OglPrShot && Function_mode == FMODE_GAME) + if (!automap_flag && PlayerCfg.OglPRShot && Function_mode == FMODE_GAME) { render_frame(0,0); gr_set_curfont(MEDIUM2_FONT); diff --git a/arch/ogl/ogl.c b/arch/ogl/ogl.c index 31ddff000..451792c8c 100644 --- a/arch/ogl/ogl.c +++ b/arch/ogl/ogl.c @@ -51,6 +51,7 @@ #include "byteswap.h" #include "endlevel.h" #include "gauges.h" +#include "playsave.h" //change to 1 for lots of spew. #if 0 @@ -776,7 +777,7 @@ bool g3_draw_bitmap(vms_vector *pos,fix width,fix height,grs_bitmap *bm, int ori glBegin(GL_QUADS); // Define alpha by looking for object TYPE or ID. We do this here so we have it seperated from the rest of the code. - if (GameArg.OglAlphaEffects && // if -gl_transparency draw following bitmaps + if (PlayerCfg.OglAlphaEffects && // if -gl_transparency draw following bitmaps (obj->type==OBJ_FIREBALL || // all types of explosions and energy-effects (obj->type==OBJ_WEAPON && (obj->id != PROXIMITY_ID && obj->id != SUPERPROX_ID)) || // weapon fire except bombs obj->id==POW_EXTRA_LIFE || // extra life diff --git a/arch/sdl/joy.c b/arch/sdl/joy.c index b63975874..878dd1c2e 100644 --- a/arch/sdl/joy.c +++ b/arch/sdl/joy.c @@ -20,13 +20,13 @@ #include "event.h" #include "text.h" #include "u_mem.h" +#include "playsave.h" extern char *joybutton_text[]; //from kconfig.c extern char *joyaxis_text[]; //from kconfig.c char joy_present = 0; int num_joysticks = 0; -int joy_deadzone = 0; int joy_num_axes = 0; struct joybutton { @@ -379,7 +379,7 @@ int joy_get_scaled_reading( int raw, int axis_num ) #if 1 int x, d; - d = (joy_deadzone) * 6; + d = (PlayerCfg.JoystickDeadzone) * 6; if (((raw/256) > (-1*d)) && ((raw/256) < d)) x = 0; else @@ -409,7 +409,7 @@ int joy_get_scaled_reading( int raw, int axis_num ) if ( x > 127 ) x = 127; - d = (joy_deadzone) * 6; + d = (PlayerCfg.JoystickDeadzone) * 6; if ((x > (-1*d)) && (x < d)) x = 0; diff --git a/d2x.ini b/d2x.ini index 3edf29663..adf2042bc 100644 --- a/d2x.ini +++ b/d2x.ini @@ -29,19 +29,11 @@ Graphics: -;-hud Set hud mode. 0=normal 1-3=new -;-persistentdebris Enable persistent debris. Works in singleplayer only ;-lowresfont Force to use LowRes fonts ;-lowresgraphics Force to use LowRes graphics ;-lowresmovies Play low resolution movies if available (for slow machines) ;-subtitles Turn on movie subtitles - - OpenGL: - -;-gl_transparency Enable transparency effects -;-gl_reticle Use OGL reticle 0=never 1=above 320x* 2=always ;-gl_fixedfont Do not scale fonts to current resolution -;-gl_prshot Take clean screenshots - no HUD and DXX-Rebirth writing Multiplayer: diff --git a/include/args.h b/include/args.h index c81ded2e9..80833a262 100644 --- a/include/args.h +++ b/include/args.h @@ -65,17 +65,12 @@ typedef struct Arg int SndSdlMixer; char *SndExternalMusic; char *SndJukebox; - int GfxGaugeHudMode;// MOVE - int GfxPersistentDebris;// MOVE int GfxHiresGFXAvailable; int GfxHiresFNTAvailable; int GfxMovieHires; int GfxMovieSubtitles; #ifdef OGL - int OglAlphaEffects;// MOVE - int OglReticle;// MOVE int OglFixedFont; - int OglPrShot;// MOVE #endif int MplGameProfile; int MplNoRankings; diff --git a/main/automap.c b/main/automap.c index 6a3afbc4e..4c666b997 100644 --- a/main/automap.c +++ b/main/automap.c @@ -69,6 +69,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #include "switch.h" #include "automap.h" #include "cntrlcen.h" +#include "playsave.h" #define EF_USED 1 // This edge is used #define EF_DEFINING 2 // A structure defining edge that should always draw. @@ -269,8 +270,6 @@ void DropMarker (int player_marker_num) } -extern char guidebot_name[]; - void DropBuddyMarker(object *objp) { int marker_num; @@ -280,7 +279,7 @@ void DropBuddyMarker(object *objp) if (marker_num > NUM_MARKERS-1) marker_num = NUM_MARKERS-1; - sprintf(MarkerMessage[marker_num], "RIP: %s",guidebot_name); + sprintf(MarkerMessage[marker_num], "RIP: %s",PlayerCfg.GuidebotName); MarkerPoint[marker_num] = objp->pos; diff --git a/main/collide.h b/main/collide.h index 612ffd1e8..e7868e3e9 100644 --- a/main/collide.h +++ b/main/collide.h @@ -22,6 +22,8 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #ifndef _COLLIDE_H #define _COLLIDE_H +#include "playsave.h" + void collide_init(); void collide_two_objects(object * A, object * B, vms_vector *collision_point); void collide_object_with_wall(object * A, fix hitspeed, short hitseg, short hitwall, vms_vector * hitpt); @@ -32,7 +34,7 @@ extern int apply_damage_to_robot(object *robot, fix damage, int killer_objnum); extern int Immaterial; -#define PERSISTENT_DEBRIS (GameArg.GfxPersistentDebris && !(Game_mode & GM_MULTI)) // no persistent debris in multi +#define PERSISTENT_DEBRIS (PlayerCfg.PersistentDebris && !(Game_mode & GM_MULTI)) // no persistent debris in multi extern void collide_player_and_weapon(object * player, object * weapon, vms_vector *collision_point); extern void collide_player_and_materialization_center(object *objp); diff --git a/main/config.c b/main/config.c index d45e63a80..914859214 100644 --- a/main/config.c +++ b/main/config.c @@ -48,7 +48,6 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. struct Cfg GameCfg; -ubyte Config_control_type = 0; ubyte Config_joystick_sensitivity = 8; static char *DigiVolumeStr = "DigiVolume"; @@ -85,8 +84,6 @@ int ReadConfigFile() GameCfg.WindowMode = 0; GameCfg.TexFilt = 0; - Config_control_type = 0; - infile = PHYSFSX_openReadBuffered("descent.cfg"); if (infile == NULL) { diff --git a/main/config.h b/main/config.h index 8526d7362..7d422cede 100644 --- a/main/config.h +++ b/main/config.h @@ -46,11 +46,6 @@ extern struct Cfg GameCfg; extern int ReadConfigFile(void); extern int WriteConfigFile(void); -extern ubyte Config_control_type; -extern ubyte Config_joystick_sensitivity; -extern ubyte Config_mouse_sensitivity; -extern int joy_deadzone; - //values for Config_control_type #define CONTROL_NONE 0 #define CONTROL_JOYSTICK 1 diff --git a/main/endlevel.c b/main/endlevel.c index a8b0a7e05..8446bec57 100644 --- a/main/endlevel.c +++ b/main/endlevel.c @@ -44,7 +44,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #include "fvi.h" #include "u_mem.h" #include "sounds.h" - +#include "playsave.h" #include "inferno.h" #include "endlevel.h" #include "object.h" @@ -407,7 +407,7 @@ void start_rendered_endlevel_sequence() } - cockpit_mode_save = Cockpit_mode; + cockpit_mode_save = PlayerCfg.CockpitMode; #ifdef NETWORK if (Game_mode & GM_MULTI) { diff --git a/main/escort.c b/main/escort.c index 587fa48ac..d6083b3e6 100644 --- a/main/escort.c +++ b/main/escort.c @@ -110,9 +110,6 @@ int Last_buddy_key; fix Last_buddy_message_time; -char guidebot_name[GUIDEBOT_NAME_LEN+1] = "GUIDE-BOT"; -char real_guidebot_name[GUIDEBOT_NAME_LEN+1] = "GUIDE-BOT"; - void init_buddy_for_level(void) { int i; @@ -380,14 +377,14 @@ void change_guidebot_name() char text[GUIDEBOT_NAME_LEN+1]=""; int item; - strcpy(text,guidebot_name); + strcpy(text,PlayerCfg.GuidebotName); m.type=NM_TYPE_INPUT; m.text_len = GUIDEBOT_NAME_LEN; m.text = text; item = newmenu_do( NULL, "Enter Guide-bot name:", 1, &m, NULL ); if (item != -1) { - strcpy(guidebot_name,text); - strcpy(real_guidebot_name,text); + strcpy(PlayerCfg.GuidebotName,text); + strcpy(PlayerCfg.GuidebotNameReal,text); write_player_file(); } } @@ -413,7 +410,7 @@ void buddy_message(char * format, ... ) gb_str[0] = CC_COLOR; gb_str[1] = BM_XRGB(28, 0, 0); - strcpy(&gb_str[2], guidebot_name); + strcpy(&gb_str[2], PlayerCfg.GuidebotName); t = strlen(gb_str); gb_str[t] = ':'; gb_str[t+1] = CC_COLOR; @@ -478,7 +475,7 @@ void set_escort_special_goal(int special_key) for (i=0; i<=Highest_object_index; i++) if ((Objects[i].type == OBJ_ROBOT) && Robot_info[Objects[i].id].companion) { - HUD_init_message("%s has not been released.",guidebot_name); + HUD_init_message("%s has not been released.",PlayerCfg.GuidebotName); break; } if (i == Highest_object_index+1) @@ -1683,7 +1680,7 @@ void do_escort_menu(void) ok_for_buddy_to_talk(); // Needed here or we might not know buddy can talk when he can. if (!Buddy_allowed_to_talk) { - HUD_init_message("%s has not been released",guidebot_name); + HUD_init_message("%s has not been released",PlayerCfg.GuidebotName); return; } diff --git a/main/escort.h b/main/escort.h index be5bce395..3d982bc60 100644 --- a/main/escort.h +++ b/main/escort.h @@ -1,5 +1,3 @@ -/* $Id: escort.h,v 1.1.1.1 2006/03/17 19:55:00 zicodxx Exp $ */ - /* * * Header for escort.c @@ -8,19 +6,10 @@ #ifndef _ESCORT_H #define _ESCORT_H - -extern int Buddy_dude_cheat; - - #define GUIDEBOT_NAME_LEN 9 -extern char guidebot_name[]; -extern char real_guidebot_name[]; - +extern int Buddy_dude_cheat; extern void change_guidebot_name(void); - - extern void do_escort_menu(void); extern void detect_escort_goal_accomplished(int index); extern void set_escort_special_goal(int key); - #endif // _ESCORT_H diff --git a/main/game.c b/main/game.c index c0588ca61..b170d2799 100644 --- a/main/game.c +++ b/main/game.c @@ -160,7 +160,6 @@ grs_canvas VR_editor_canvas; // The canvas that the editor writes to. int Debug_pause=0; //John's debugging pause system -int Cockpit_mode=CM_FULL_COCKPIT; //set game.h for values static int old_cockpit_mode=-1; int force_cockpit_redraw=0; @@ -278,12 +277,12 @@ void init_cockpit() VR_screen_flags = VRF_ALLOW_COCKPIT; } - if ((!(VR_screen_flags & VRF_ALLOW_COCKPIT) && (Cockpit_mode==CM_FULL_COCKPIT || Cockpit_mode==CM_STATUS_BAR || Cockpit_mode==CM_REAR_VIEW)) || ( VR_render_mode != VR_NONE ) || ( Screen_mode == SCREEN_EDITOR )) - Cockpit_mode = CM_FULL_SCREEN; + if ((!(VR_screen_flags & VRF_ALLOW_COCKPIT) && (PlayerCfg.CockpitMode==CM_FULL_COCKPIT || PlayerCfg.CockpitMode==CM_STATUS_BAR || PlayerCfg.CockpitMode==CM_REAR_VIEW)) || ( VR_render_mode != VR_NONE ) || ( Screen_mode == SCREEN_EDITOR )) + PlayerCfg.CockpitMode = CM_FULL_SCREEN; gr_set_current_canvas(NULL); - switch( Cockpit_mode ) { + switch( PlayerCfg.CockpitMode ) { case CM_FULL_COCKPIT: game_init_render_sub_buffers(0, 0, grd_curscreen->sc_w,(grd_curscreen->sc_h*2)/3); break; @@ -310,7 +309,7 @@ void init_cockpit() } if (Newdemo_state==ND_STATE_RECORDING) { - newdemo_record_cockpit_change(Cockpit_mode); + newdemo_record_cockpit_change(PlayerCfg.CockpitMode); } gr_set_current_canvas(NULL); @@ -319,8 +318,8 @@ void init_cockpit() //selects a given cockpit (or lack of one). See types in game.h void select_cockpit(int mode) { - if (mode != Cockpit_mode) { //new mode - Cockpit_mode=mode; + if (mode != PlayerCfg.CockpitMode) { //new mode + PlayerCfg.CockpitMode=mode; init_cockpit(); } } @@ -1172,7 +1171,7 @@ void check_rear_view() if (Rear_view) { Rear_view = 0; - if (Cockpit_mode==CM_REAR_VIEW) { + if (PlayerCfg.CockpitMode==CM_REAR_VIEW) { select_cockpit(old_cockpit_mode); } if (Newdemo_state == ND_STATE_RECORDING) @@ -1189,8 +1188,8 @@ void check_rear_view() leave_mode = 0; // means wait for another key entry_time = timer_get_fixed_seconds(); } - if (Cockpit_mode == CM_FULL_COCKPIT) { - old_cockpit_mode = Cockpit_mode; + if (PlayerCfg.CockpitMode == CM_FULL_COCKPIT) { + old_cockpit_mode = PlayerCfg.CockpitMode; select_cockpit(CM_REAR_VIEW); } if (Newdemo_state == ND_STATE_RECORDING) @@ -1205,11 +1204,11 @@ void check_rear_view() } else { - //@@if (leave_mode==1 && Cockpit_mode==CM_REAR_VIEW) { + //@@if (leave_mode==1 && PlayerCfg.CockpitMode==CM_REAR_VIEW) { if (leave_mode==1 && Rear_view) { Rear_view = 0; - if (Cockpit_mode==CM_REAR_VIEW) { + if (PlayerCfg.CockpitMode==CM_REAR_VIEW) { select_cockpit(old_cockpit_mode); } if (Newdemo_state == ND_STATE_RECORDING) @@ -1227,7 +1226,7 @@ void reset_rear_view(void) Rear_view = 0; - if (!(Cockpit_mode == CM_FULL_COCKPIT || Cockpit_mode == CM_STATUS_BAR || Cockpit_mode == CM_FULL_SCREEN)) { + if (!(PlayerCfg.CockpitMode == CM_FULL_COCKPIT || PlayerCfg.CockpitMode == CM_STATUS_BAR || PlayerCfg.CockpitMode == CM_FULL_SCREEN)) { if (!(old_cockpit_mode == CM_FULL_COCKPIT || old_cockpit_mode == CM_STATUS_BAR || old_cockpit_mode == CM_FULL_SCREEN)) old_cockpit_mode = CM_FULL_COCKPIT; select_cockpit(old_cockpit_mode); @@ -1511,11 +1510,8 @@ extern int Do_appearance_effect; object *Missile_viewer=NULL; -int Missile_view_enabled = 1; - int Marker_viewer_num[2]={-1,-1}; int Coop_view_player[2]={-1,-1}; -int Cockpit_3d_view[2]={CV_NONE,CV_NONE}; //returns ptr to escort robot, or NULL object *find_escort() diff --git a/main/game.h b/main/game.h index 7ab51f97e..2369c462f 100644 --- a/main/game.h +++ b/main/game.h @@ -38,8 +38,6 @@ extern fix Next_missile_fire_time; // Time at which player can next fire his se extern fix Laser_delay_time; // Delay between laser fires. extern int Cheats_enabled; -extern int Missile_view_enabled; - extern object *Missile_viewer; #define CV_NONE 0 @@ -48,7 +46,6 @@ extern object *Missile_viewer; #define CV_COOP 3 #define CV_MARKER 4 -extern int Cockpit_3d_view[2]; // left & right extern int Coop_view_player[2]; // left & right extern int Marker_viewer_num[2]; // left & right @@ -156,7 +153,6 @@ extern void save_screen_shot(int automap_flag); #define CM_FULL_SCREEN 3 // full screen, no cockpit (w/ reticle) #define CM_LETTERBOX 4 // half-height window (for cutscenes) -extern int Cockpit_mode; // what sort of cockpit or window is up? extern int Game_window_w, // width and height of player's game window Game_window_h; diff --git a/main/gamecntl.c b/main/gamecntl.c index 48df6850f..fdc26fb53 100644 --- a/main/gamecntl.c +++ b/main/gamecntl.c @@ -131,7 +131,6 @@ int redbook_volume = 255; // External Variables --------------------------------------------------------- extern int Speedtest_on; // Speedtest global adapted from game.c -extern int Guided_in_big_window; extern char WaitForRefuseAnswer,RefuseThisPlayer,RefuseTeam; extern ubyte Newdemo_flying_guided; @@ -147,8 +146,6 @@ extern int Speedtest_count; extern int Global_missile_firing_count; extern int Automap_flag; extern int Config_menu_flag; -extern int EscortHotKeys; - extern int Game_aborted; extern int *Toggle_var; @@ -549,7 +546,7 @@ void do_show_netgame_help() if (!GameArg.MplNoRankings) { if (i==Player_num) - sprintf (mtext[num],"%s%s (%d/%d)",RankStrings[NetPlayers.players[i].rank],Players[i].callsign,Netlife_kills,Netlife_killed); + sprintf (mtext[num],"%s%s (%d/%d)",RankStrings[NetPlayers.players[i].rank],Players[i].callsign,PlayerCfg.NetlifeKills,PlayerCfg.NetlifeKilled); else sprintf (mtext[num],"%s%s %d/%d",RankStrings[NetPlayers.players[i].rank],Players[i].callsign,kill_matrix[Player_num][i], kill_matrix[i][Player_num]); @@ -562,7 +559,7 @@ void do_show_netgame_help() sprintf (mtext[num]," "); num++; - eff=(int)((float)((float)Netlife_kills/((float)Netlife_killed+(float)Netlife_kills))*100.0); + eff=(int)((float)((float)PlayerCfg.NetlifeKills/((float)PlayerCfg.NetlifeKilled+(float)PlayerCfg.NetlifeKills))*100.0); if (eff<0) eff=0; @@ -801,13 +798,13 @@ int select_next_window_function(int w) { Assert(w==0 || w==1); - switch (Cockpit_3d_view[w]) { + switch (PlayerCfg.Cockpit3DView[w]) { case CV_NONE: - Cockpit_3d_view[w] = CV_REAR; + PlayerCfg.Cockpit3DView[w] = CV_REAR; break; case CV_REAR: if (find_escort()) { - Cockpit_3d_view[w] = CV_ESCORT; + PlayerCfg.Cockpit3DView[w] = CV_ESCORT; break; } //if no ecort, fall through @@ -818,11 +815,11 @@ int select_next_window_function(int w) case CV_COOP: Marker_viewer_num[w] = -1; if ((Game_mode & GM_MULTI_COOP) || (Game_mode & GM_TEAM)) { - Cockpit_3d_view[w] = CV_COOP; + PlayerCfg.Cockpit3DView[w] = CV_COOP; while (1) { Coop_view_player[w]++; if (Coop_view_player[w] == N_players) { - Cockpit_3d_view[w] = CV_MARKER; + PlayerCfg.Cockpit3DView[w] = CV_MARKER; goto case_marker; } if (Coop_view_player[w]==Player_num) @@ -839,17 +836,17 @@ int select_next_window_function(int w) case CV_MARKER: case_marker:; if ((Game_mode & GM_MULTI) && !(Game_mode & GM_MULTI_COOP) && Netgame.Allow_marker_view) { //anarchy only - Cockpit_3d_view[w] = CV_MARKER; + PlayerCfg.Cockpit3DView[w] = CV_MARKER; if (Marker_viewer_num[w] == -1) Marker_viewer_num[w] = Player_num * 2; else if (Marker_viewer_num[w] == Player_num * 2) Marker_viewer_num[w]++; else - Cockpit_3d_view[w] = CV_NONE; + PlayerCfg.Cockpit3DView[w] = CV_NONE; } else #endif - Cockpit_3d_view[w] = CV_NONE; + PlayerCfg.Cockpit3DView[w] = CV_NONE; break; } write_player_file(); @@ -1023,7 +1020,7 @@ int HandleSystemKey(int key) MAC(case KEY_COMMAND+KEY_3:) case KEY_F3: - if (!(Guided_missile[Player_num] && Guided_missile[Player_num]->type==OBJ_WEAPON && Guided_missile[Player_num]->id==GUIDEDMISS_ID && Guided_missile[Player_num]->signature==Guided_missile_sig[Player_num] && Guided_in_big_window)) + if (!(Guided_missile[Player_num] && Guided_missile[Player_num]->type==OBJ_WEAPON && Guided_missile[Player_num]->id==GUIDEDMISS_ID && Guided_missile[Player_num]->signature==Guided_missile_sig[Player_num] && PlayerCfg.GuidedInBigWindow)) { toggle_cockpit(); screen_changed=1; } @@ -1402,7 +1399,7 @@ void HandleGameKey(int key) case KEY_8 + KEY_SHIFTED: case KEY_9 + KEY_SHIFTED: case KEY_0 + KEY_SHIFTED: - if (EscortHotKeys) + if (PlayerCfg.EscortHotKeys) { if (!(Game_mode & GM_MULTI)) set_escort_special_goal(key); @@ -1412,7 +1409,8 @@ void HandleGameKey(int key) } case KEY_ALTED+KEY_F7: - GameArg.GfxGaugeHudMode=(GameArg.GfxGaugeHudMode+1)%GAUGE_HUD_NUMMODES; + PlayerCfg.HudMode=(PlayerCfg.HudMode+1)%GAUGE_HUD_NUMMODES; + write_player_file(); break; #ifdef NETWORK @@ -1609,7 +1607,7 @@ void HandleTestKey(int key) #ifdef NETWORK case KEY_DEBUGGED+KEY_ALTED+KEY_D: - Netlife_kills=4000; Netlife_killed=5; + PlayerCfg.NetlifeKills=4000; PlayerCfg.NetlifeKilled=5; multi_add_lifetime_kills(); break; #endif @@ -1996,12 +1994,12 @@ void FinalCheats(int key) do_cheat_penalty(); Buddy_dude_cheat = !Buddy_dude_cheat; if (Buddy_dude_cheat) { - HUD_init_message ("%s gets angry!",guidebot_name); - strcpy(guidebot_name,"Wingnut"); + HUD_init_message ("%s gets angry!",PlayerCfg.GuidebotName); + strcpy(PlayerCfg.GuidebotName,"Wingnut"); } else { - strcpy(guidebot_name,real_guidebot_name); - HUD_init_message ("%s calms down",guidebot_name); + strcpy(PlayerCfg.GuidebotName,PlayerCfg.GuidebotNameReal); + HUD_init_message ("%s calms down",PlayerCfg.GuidebotName); } } diff --git a/main/gamerend.c b/main/gamerend.c index ce7e1162b..6ae6b5f5b 100644 --- a/main/gamerend.c +++ b/main/gamerend.c @@ -147,12 +147,12 @@ void show_framerate() if (frame_time_total) { int y=GHEIGHT; - if (Cockpit_mode==CM_FULL_SCREEN) { + if (PlayerCfg.CockpitMode==CM_FULL_SCREEN) { if (Game_mode & GM_MULTI) y -= LINE_SPACING * 10; else y -= LINE_SPACING * 5; - } else if (Cockpit_mode == CM_STATUS_BAR) { + } else if (PlayerCfg.CockpitMode == CM_STATUS_BAR) { if (Game_mode & GM_MULTI) y -= LINE_SPACING * 6; else @@ -279,7 +279,7 @@ void show_netplayerinfo() gr_set_fontcolor(255,-1); // additional information about game - hoard, ranking - eff=(int)((float)((float)Netlife_kills/((float)Netlife_killed+(float)Netlife_kills))*100.0); + eff=(int)((float)((float)PlayerCfg.NetlifeKills/((float)PlayerCfg.NetlifeKilled+(float)PlayerCfg.NetlifeKills))*100.0); if (eff<0) eff=0; @@ -292,7 +292,7 @@ void show_netplayerinfo() } else if (!GameArg.MplNoRankings) { - gr_printf(0x8000,y,"Your lifetime efficiency of %d%% (%d/%d)",eff,Netlife_kills,Netlife_killed); + gr_printf(0x8000,y,"Your lifetime efficiency of %d%% (%d/%d)",eff,PlayerCfg.NetlifeKills,PlayerCfg.NetlifeKilled); y+=LINE_SPACING; if (eff<60) gr_printf(0x8000,y,"is %s your ranking.",eff_strings[eff/10]); @@ -419,28 +419,28 @@ void game_draw_hud_stuff() y = GHEIGHT-(LINE_SPACING*2); - if (Cockpit_mode == CM_FULL_COCKPIT) + if (PlayerCfg.CockpitMode == CM_FULL_COCKPIT) y = grd_curcanv->cv_bitmap.bm_h / 1.2 ; - if (Cockpit_mode != CM_REAR_VIEW) + if (PlayerCfg.CockpitMode != CM_REAR_VIEW) gr_printf(0x8000, y, message ); } render_countdown_gauge(); // this should be made part of hud code some day - if ( Player_num > -1 && Viewer->type==OBJ_PLAYER && Viewer->id==Player_num && Cockpit_mode != CM_REAR_VIEW) { + if ( Player_num > -1 && Viewer->type==OBJ_PLAYER && Viewer->id==Player_num && PlayerCfg.CockpitMode != CM_REAR_VIEW) { int x = FSPACX(1); int y = grd_curcanv->cv_bitmap.bm_h; gr_set_curfont( GAME_FONT ); gr_set_fontcolor( BM_XRGB(0, 31, 0), -1 ); if (Cruise_speed > 0) { - if (Cockpit_mode==CM_FULL_SCREEN) { + if (PlayerCfg.CockpitMode==CM_FULL_SCREEN) { if (Game_mode & GM_MULTI) y -= LINE_SPACING * 10; else y -= LINE_SPACING * 5; - } else if (Cockpit_mode == CM_STATUS_BAR) { + } else if (PlayerCfg.CockpitMode == CM_STATUS_BAR) { if (Game_mode & GM_MULTI) y -= LINE_SPACING * 6; else @@ -456,7 +456,7 @@ void game_draw_hud_stuff() } } - if (GameArg.SysFPSIndicator && Cockpit_mode != CM_REAR_VIEW) + if (GameArg.SysFPSIndicator && PlayerCfg.CockpitMode != CM_REAR_VIEW) show_framerate(); draw_hud(); @@ -545,7 +545,6 @@ void game_expand_bitmap( grs_bitmap * bmp, uint flags ) } extern int SW_drawn[2], SW_x[2], SW_y[2], SW_w[2], SW_h[2]; -extern int Guided_in_big_window; ubyte RenderingType=0; ubyte DemoDoingRight=0,DemoDoingLeft=0; extern ubyte DemoDoRight,DemoDoLeft; @@ -555,8 +554,6 @@ char DemoWBUType[]={0,WBU_GUIDED,WBU_MISSILE,WBU_REAR,WBU_ESCORT,WBU_MARKER,0}; char DemoRearCheck[]={0,0,0,1,0,0,0}; char *DemoExtraMessage[]={"PLAYER","GUIDED","MISSILE","REAR","GUIDE-BOT","MARKER","SHIP"}; -extern char guidebot_name[]; - void show_extra_views() { int did_missile_view=0; @@ -598,7 +595,7 @@ void show_extra_views() if (Guided_missile[Player_num] && Guided_missile[Player_num]->type==OBJ_WEAPON && Guided_missile[Player_num]->id==GUIDEDMISS_ID && Guided_missile[Player_num]->signature==Guided_missile_sig[Player_num]) { - if (Guided_in_big_window) + if (PlayerCfg.GuidedInBigWindow) { RenderingType=6+(1<<4); do_cockpit_window_view(1,Viewer,0,WBU_MISSILE,"SHIP"); @@ -614,7 +611,7 @@ void show_extra_views() else { if (Guided_missile[Player_num]) { //used to be active - if (!Guided_in_big_window) + if (!PlayerCfg.GuidedInBigWindow) do_cockpit_window_view(1,NULL,0,WBU_STATIC,NULL); Guided_missile[Player_num] = NULL; } @@ -624,7 +621,7 @@ void show_extra_views() static int mv_sig=-1; if (mv_sig == -1) mv_sig = Missile_viewer->signature; - if (Missile_view_enabled && Missile_viewer->type!=OBJ_NONE && Missile_viewer->signature == mv_sig) { + if (PlayerCfg.MissileViewEnabled && Missile_viewer->type!=OBJ_NONE && Missile_viewer->signature == mv_sig) { RenderingType=2+(1<<4); do_cockpit_window_view(1,Missile_viewer,0,WBU_MISSILE,"MISSILE"); did_missile_view=1; @@ -644,7 +641,7 @@ void show_extra_views() continue; //if showing missile view in right window, can't show anything else //show special views if selected - switch (Cockpit_3d_view[w]) { + switch (PlayerCfg.Cockpit3DView[w]) { case CV_NONE: RenderingType=255; do_cockpit_window_view(w,NULL,0,WBU_WEAPON,NULL); @@ -664,11 +661,11 @@ void show_extra_views() buddy = find_escort(); if (buddy == NULL) { do_cockpit_window_view(w,NULL,0,WBU_WEAPON,NULL); - Cockpit_3d_view[w] = CV_NONE; + PlayerCfg.Cockpit3DView[w] = CV_NONE; } else { RenderingType=4+(w<<4); - do_cockpit_window_view(w,buddy,0,WBU_ESCORT,guidebot_name); + do_cockpit_window_view(w,buddy,0,WBU_ESCORT,PlayerCfg.GuidebotName); } break; } @@ -682,7 +679,7 @@ void show_extra_views() do_cockpit_window_view(w,&Objects[Players[Coop_view_player[w]].objnum],0,WBU_COOP,Players[Coop_view_player[w]].callsign); else { do_cockpit_window_view(w,NULL,0,WBU_WEAPON,NULL); - Cockpit_3d_view[w] = CV_NONE; + PlayerCfg.Cockpit3DView[w] = CV_NONE; } break; } @@ -691,7 +688,7 @@ void show_extra_views() char label[10]; RenderingType=5+(w<<4); if (Marker_viewer_num[w] == -1 || MarkerObject[Marker_viewer_num[w]] == -1) { - Cockpit_3d_view[w] = CV_NONE; + PlayerCfg.Cockpit3DView[w] = CV_NONE; break; } sprintf(label,"Marker %d",Marker_viewer_num[w]+1); @@ -718,14 +715,14 @@ void game_render_frame_mono(int flip) gr_set_current_canvas(&Screen_3d_window); - if (Guided_missile[Player_num] && Guided_missile[Player_num]->type==OBJ_WEAPON && Guided_missile[Player_num]->id==GUIDEDMISS_ID && Guided_missile[Player_num]->signature==Guided_missile_sig[Player_num] && Guided_in_big_window) { + if (Guided_missile[Player_num] && Guided_missile[Player_num]->type==OBJ_WEAPON && Guided_missile[Player_num]->id==GUIDEDMISS_ID && Guided_missile[Player_num]->signature==Guided_missile_sig[Player_num] && PlayerCfg.GuidedInBigWindow) { object *viewer_save = Viewer; - if (Cockpit_mode==CM_FULL_COCKPIT) + if (PlayerCfg.CockpitMode==CM_FULL_COCKPIT) { BigWindowSwitch=1; force_cockpit_redraw=1; - Cockpit_mode=CM_STATUS_BAR; + PlayerCfg.CockpitMode=CM_STATUS_BAR; return; } @@ -753,7 +750,7 @@ void game_render_frame_mono(int flip) if (BigWindowSwitch) { force_cockpit_redraw=1; - Cockpit_mode=CM_FULL_COCKPIT; + PlayerCfg.CockpitMode=CM_FULL_COCKPIT; BigWindowSwitch=0; return; } @@ -767,7 +764,7 @@ void game_render_frame_mono(int flip) show_extra_views(); //missile view, buddy bot, etc. - if (Cockpit_mode==CM_FULL_COCKPIT || Cockpit_mode==CM_STATUS_BAR) + if (PlayerCfg.CockpitMode==CM_FULL_COCKPIT || PlayerCfg.CockpitMode==CM_STATUS_BAR) render_gauges(); gr_set_current_canvas(&Screen_3d_window); @@ -794,7 +791,7 @@ void toggle_cockpit() if (Rear_view) return; - switch (Cockpit_mode) + switch (PlayerCfg.CockpitMode) { case CM_FULL_COCKPIT: new_mode = CM_STATUS_BAR; @@ -822,13 +819,13 @@ void update_cockpits(int force_redraw) grs_bitmap *bm; - PIGGY_PAGE_IN(cockpit_bitmap[Cockpit_mode+(HIRESMODE?(Num_cockpits/2):0)]); - bm=&GameBitmaps[cockpit_bitmap[Cockpit_mode+(HIRESMODE?(Num_cockpits/2):0)].index]; + PIGGY_PAGE_IN(cockpit_bitmap[PlayerCfg.CockpitMode+(HIRESMODE?(Num_cockpits/2):0)]); + bm=&GameBitmaps[cockpit_bitmap[PlayerCfg.CockpitMode+(HIRESMODE?(Num_cockpits/2):0)].index]; //Redraw the on-screen cockpit bitmaps if (VR_render_mode != VR_NONE ) return; - switch( Cockpit_mode ) { + switch( PlayerCfg.CockpitMode ) { case CM_FULL_COCKPIT: gr_set_current_canvas(NULL); bm->bm_flags |= BM_FLAG_COCKPIT_TRANSPARENT; @@ -868,12 +865,12 @@ void update_cockpits(int force_redraw) gr_set_current_canvas(NULL); - if (Cockpit_mode != last_drawn_cockpit || force_redraw ) - last_drawn_cockpit = Cockpit_mode; + if (PlayerCfg.CockpitMode != last_drawn_cockpit || force_redraw ) + last_drawn_cockpit = PlayerCfg.CockpitMode; else return; - if (Cockpit_mode==CM_FULL_COCKPIT || Cockpit_mode==CM_STATUS_BAR) + if (PlayerCfg.CockpitMode==CM_FULL_COCKPIT || PlayerCfg.CockpitMode==CM_STATUS_BAR) init_gauges(); } diff --git a/main/gameseq.c b/main/gameseq.c index 7737b6a40..56b4f2a0d 100644 --- a/main/gameseq.c +++ b/main/gameseq.c @@ -527,8 +527,6 @@ void DoGameOver() } -extern void do_save_game_menu(); - //update various information about the player void update_player_stats() { @@ -690,12 +688,14 @@ int RegisterPlayer() //--------------------------------------------------------------------- // Set default config options in case there is no config file // kc_keyboard, kc_joystick, kc_mouse are statically defined. - Config_joystick_sensitivity = 8; - Config_mouse_sensitivity = 8; - Config_control_type =CONTROL_NONE; + PlayerCfg.JoystickSensitivity = 8; + PlayerCfg.MouseSensitivity = 8; + PlayerCfg.ControlType =CONTROL_NONE; for (i=0; icv_bitmap.bm_w,y-(LINE_SPACING*4)); hud_show_weapons_mode(0,0,2,grd_curcanv->cv_bitmap.bm_w,y-(LINE_SPACING*3)); hud_show_weapons_mode(1,0,1,grd_curcanv->cv_bitmap.bm_w,y-(LINE_SPACING*2)); hud_show_weapons_mode(1,0,2,grd_curcanv->cv_bitmap.bm_w,y-LINE_SPACING); } - else if (GameArg.GfxGaugeHudMode==2 || GameArg.GfxGaugeHudMode==3){ + else if (PlayerCfg.HudMode==2 || PlayerCfg.HudMode==3){ int x1,x2; int w, aw; gr_get_string_size("V1000", &w, &x1, &aw ); gr_get_string_size("0 ", &x2, &x1, &aw); - if (GameArg.GfxGaugeHudMode==2){ + if (PlayerCfg.HudMode==2){ y=grd_curcanv->cv_bitmap.bm_h-(grd_curcanv->cv_bitmap.bm_h/2.75); x1=grd_curcanv->cv_bitmap.bm_w/2.1-(w)-FSPACX(25); x2=grd_curcanv->cv_bitmap.bm_w/1.9+x2+FSPACX(20); @@ -1432,7 +1431,7 @@ void hud_show_cloak_invuln(void) void hud_show_shield(void) { // gr_set_current_canvas(&VR_render_sub_buffer[0]); //render off-screen - if (GameArg.GfxGaugeHudMode<2) { + if (PlayerCfg.HudMode<2) { gr_set_curfont( GAME_FONT ); gr_set_fontcolor(BM_XRGB(0,31,0),-1 ); @@ -1467,7 +1466,7 @@ void hud_show_lives() if ((HUD_nmessages > 0) && (strlen(HUD_messages[hud_first]) > 38)) return; - if (Cockpit_mode == CM_FULL_COCKPIT) + if (PlayerCfg.CockpitMode == CM_FULL_COCKPIT) x = HUD_SCALE_X(7); else x = FSPACX(2); @@ -1918,7 +1917,7 @@ void draw_weapon_info_sub(int info_index,gauge_box *box,int pic_x,int pic_y,char hud_bitblt(HUD_SCALE_X(pic_x), HUD_SCALE_Y(pic_y), bm); - if (GameArg.GfxGaugeHudMode == 0) + if (PlayerCfg.HudMode == 0) { gr_set_fontcolor(BM_XRGB(0,20,0),-1 ); @@ -1959,7 +1958,7 @@ void draw_weapon_info(int weapon_type,int weapon_num,int laser_level) if (info_index == LASER_ID && laser_level > MAX_LASER_LEVEL) info_index = SUPER_LASER_ID; - if (Cockpit_mode == CM_STATUS_BAR) + if (PlayerCfg.CockpitMode == CM_STATUS_BAR) draw_weapon_info_sub(info_index, &gauge_boxes[SB_PRIMARY_BOX], SB_PRIMARY_W_PIC_X,SB_PRIMARY_W_PIC_Y, @@ -1976,7 +1975,7 @@ void draw_weapon_info(int weapon_type,int weapon_num,int laser_level) else { info_index = Secondary_weapon_to_weapon_info[weapon_num]; - if (Cockpit_mode == CM_STATUS_BAR) + if (PlayerCfg.CockpitMode == CM_STATUS_BAR) draw_weapon_info_sub(info_index, &gauge_boxes[SB_SECONDARY_BOX], SB_SECONDARY_W_PIC_X,SB_SECONDARY_W_PIC_Y, @@ -1989,22 +1988,22 @@ void draw_weapon_info(int weapon_type,int weapon_num,int laser_level) SECONDARY_WEAPON_NAMES_SHORT(weapon_num), SECONDARY_W_TEXT_X,SECONDARY_W_TEXT_Y); } - if (GameArg.GfxGaugeHudMode!=0) + if (PlayerCfg.HudMode!=0) { if (weapon_box_user[0] == WBU_WEAPON) { - hud_show_weapons_mode(0,1,1,(Cockpit_mode==CM_STATUS_BAR?SB_PRIMARY_AMMO_X:PRIMARY_AMMO_X),(Cockpit_mode==CM_STATUS_BAR?SB_SECONDARY_AMMO_Y:SECONDARY_AMMO_Y)); - hud_show_weapons_mode(0,1,2,(Cockpit_mode==CM_STATUS_BAR?SB_PRIMARY_AMMO_X:PRIMARY_AMMO_X)+FSPACX(12),(Cockpit_mode==CM_STATUS_BAR?SB_SECONDARY_AMMO_Y:SECONDARY_AMMO_Y)); + hud_show_weapons_mode(0,1,1,(PlayerCfg.CockpitMode==CM_STATUS_BAR?SB_PRIMARY_AMMO_X:PRIMARY_AMMO_X),(PlayerCfg.CockpitMode==CM_STATUS_BAR?SB_SECONDARY_AMMO_Y:SECONDARY_AMMO_Y)); + hud_show_weapons_mode(0,1,2,(PlayerCfg.CockpitMode==CM_STATUS_BAR?SB_PRIMARY_AMMO_X:PRIMARY_AMMO_X)+FSPACX(12),(PlayerCfg.CockpitMode==CM_STATUS_BAR?SB_SECONDARY_AMMO_Y:SECONDARY_AMMO_Y)); } if (weapon_box_user[1] == WBU_WEAPON) { - hud_show_weapons_mode(1,1,1,(Cockpit_mode==CM_STATUS_BAR?SB_SECONDARY_AMMO_X:SECONDARY_AMMO_X),(Cockpit_mode==CM_STATUS_BAR?SB_SECONDARY_AMMO_Y:SECONDARY_AMMO_Y)); - hud_show_weapons_mode(1,1,2,(Cockpit_mode==CM_STATUS_BAR?SB_SECONDARY_AMMO_X:SECONDARY_AMMO_X)+FSPACX(12),(Cockpit_mode==CM_STATUS_BAR?SB_SECONDARY_AMMO_Y:SECONDARY_AMMO_Y)); + hud_show_weapons_mode(1,1,1,(PlayerCfg.CockpitMode==CM_STATUS_BAR?SB_SECONDARY_AMMO_X:SECONDARY_AMMO_X),(PlayerCfg.CockpitMode==CM_STATUS_BAR?SB_SECONDARY_AMMO_Y:SECONDARY_AMMO_Y)); + hud_show_weapons_mode(1,1,2,(PlayerCfg.CockpitMode==CM_STATUS_BAR?SB_SECONDARY_AMMO_X:SECONDARY_AMMO_X)+FSPACX(12),(PlayerCfg.CockpitMode==CM_STATUS_BAR?SB_SECONDARY_AMMO_Y:SECONDARY_AMMO_Y)); } } } void draw_ammo_info(int x,int y,int ammo_count,int primary) { - if (!GameArg.GfxGaugeHudMode) + if (!PlayerCfg.HudMode) { gr_setcolor(BM_XRGB(0,0,0)); gr_set_fontcolor(BM_XRGB(20,0,0),-1 ); @@ -2014,7 +2013,7 @@ void draw_ammo_info(int x,int y,int ammo_count,int primary) void draw_secondary_ammo_info(int ammo_count) { - if (Cockpit_mode == CM_STATUS_BAR) + if (PlayerCfg.CockpitMode == CM_STATUS_BAR) draw_ammo_info(SB_SECONDARY_AMMO_X,SB_SECONDARY_AMMO_Y,ammo_count,0); else draw_ammo_info(SECONDARY_AMMO_X,SECONDARY_AMMO_Y,ammo_count,0); @@ -2030,7 +2029,7 @@ void draw_weapon_box(int weapon_type,int weapon_num) laser_level_changed = (weapon_type==0 && weapon_num==LASER_INDEX && (Players[Player_num].laser_level != old_laser_level)); - if ((weapon_num != old_weapon[weapon_type] || laser_level_changed) && weapon_box_states[weapon_type] == WS_SET && (old_weapon[weapon_type] != -1) && !GameArg.GfxGaugeHudMode) + if ((weapon_num != old_weapon[weapon_type] || laser_level_changed) && weapon_box_states[weapon_type] == WS_SET && (old_weapon[weapon_type] != -1) && !PlayerCfg.HudMode) { weapon_box_states[weapon_type] = WS_FADING_OUT; weapon_box_fade_values[weapon_type]=i2f(GR_FADE_LEVELS-1); @@ -2073,7 +2072,7 @@ void draw_weapon_box(int weapon_type,int weapon_num) if (weapon_box_states[weapon_type] != WS_SET) { //fade gauge int fade_value = f2i(weapon_box_fade_values[weapon_type]); - int boxofs = (Cockpit_mode==CM_STATUS_BAR)?SB_PRIMARY_BOX:COCKPIT_PRIMARY_BOX; + int boxofs = (PlayerCfg.CockpitMode==CM_STATUS_BAR)?SB_PRIMARY_BOX:COCKPIT_PRIMARY_BOX; Gr_scanline_darkening_level = fade_value; gr_rect(HUD_SCALE_X(gauge_boxes[boxofs+weapon_type].left),HUD_SCALE_Y(gauge_boxes[boxofs+weapon_type].top),HUD_SCALE_X(gauge_boxes[boxofs+weapon_type].right),HUD_SCALE_Y(gauge_boxes[boxofs+weapon_type].bot)); @@ -2091,7 +2090,7 @@ void draw_static(int win) vclip *vc = &Vclip[VCLIP_MONITOR_STATIC]; grs_bitmap *bmp; int framenum; - int boxofs = (Cockpit_mode==CM_STATUS_BAR)?SB_PRIMARY_BOX:COCKPIT_PRIMARY_BOX; + int boxofs = (PlayerCfg.CockpitMode==CM_STATUS_BAR)?SB_PRIMARY_BOX:COCKPIT_PRIMARY_BOX; #ifndef OGL int x,y; #endif @@ -2272,7 +2271,7 @@ void draw_invulnerable_ship() GameTime & 0x8000) { - if (Cockpit_mode == CM_STATUS_BAR) { + if (PlayerCfg.CockpitMode == CM_STATUS_BAR) { PAGE_IN_GAUGE( GAUGE_INVULNERABLE+invulnerable_frame ); hud_bitblt( HUD_SCALE_X(SB_SHIELD_GAUGE_X), HUD_SCALE_Y(SB_SHIELD_GAUGE_Y), &GameBitmaps[GET_GAUGE_INDEX(GAUGE_INVULNERABLE+invulnerable_frame) ]); } else { @@ -2287,7 +2286,7 @@ void draw_invulnerable_ship() if (++invulnerable_frame == N_INVULNERABLE_FRAMES) invulnerable_frame=0; } - } else if (Cockpit_mode == CM_STATUS_BAR) + } else if (PlayerCfg.CockpitMode == CM_STATUS_BAR) sb_draw_shield_bar(f2ir(Players[Player_num].shields)); else draw_shield_bar(f2ir(Players[Player_num].shields)); @@ -2356,7 +2355,7 @@ void show_reticle() Assert(secondary_bm_num <= 4); Assert(cross_bm_num <= 1); #ifdef OGL // scale reticle in OGL ... - if (GameArg.OglReticle==2 || (GameArg.OglReticle && grd_curcanv->cv_bitmap.bm_w > 320)) + if (PlayerCfg.OglReticle) { ogl_draw_reticle(cross_bm_num,primary_bm_num,secondary_bm_num); } @@ -2411,7 +2410,7 @@ void hud_show_kill_list() save_y = y = grd_curcanv->cv_bitmap.bm_h - n_left*(LINE_SPACING); - if (Cockpit_mode == CM_FULL_COCKPIT) { + if (PlayerCfg.CockpitMode == CM_FULL_COCKPIT) { save_y = y -= FSPACX(6); if (Game_mode & GM_MULTI_COOP) x1 = FSPACX(33); @@ -2425,7 +2424,7 @@ void hud_show_kill_list() int sw,sh,aw; if (i>=n_left) { - if (Cockpit_mode == CM_FULL_COCKPIT) + if (PlayerCfg.CockpitMode == CM_FULL_COCKPIT) x0 = grd_curcanv->cv_bitmap.bm_w - FSPACX(53); else x0 = grd_curcanv->cv_bitmap.bm_w - FSPACX(60); @@ -2640,21 +2639,21 @@ void show_HUD_names() void draw_hud() { // Show score so long as not in rearview - if ( !Rear_view && Cockpit_mode!=CM_REAR_VIEW && Cockpit_mode!=CM_STATUS_BAR && !Saving_movie_frames) { + if ( !Rear_view && PlayerCfg.CockpitMode!=CM_REAR_VIEW && PlayerCfg.CockpitMode!=CM_STATUS_BAR && !Saving_movie_frames) { hud_show_score(); if (score_time) hud_show_score_added(); } - if ( !Rear_view && Cockpit_mode!=CM_REAR_VIEW && !Saving_movie_frames) + if ( !Rear_view && PlayerCfg.CockpitMode!=CM_REAR_VIEW && !Saving_movie_frames) hud_show_timer_count(); // Show other stuff if not in rearview or letterbox. - if (!Rear_view && Cockpit_mode!=CM_REAR_VIEW) { // && Cockpit_mode!=CM_LETTERBOX) { - if (Cockpit_mode==CM_STATUS_BAR || Cockpit_mode==CM_FULL_SCREEN) + if (!Rear_view && PlayerCfg.CockpitMode!=CM_REAR_VIEW) { // && PlayerCfg.CockpitMode!=CM_LETTERBOX) { + if (PlayerCfg.CockpitMode==CM_STATUS_BAR || PlayerCfg.CockpitMode==CM_FULL_SCREEN) hud_show_homing_warning(); - if (Cockpit_mode==CM_FULL_SCREEN) { + if (PlayerCfg.CockpitMode==CM_FULL_SCREEN) { hud_show_energy(); hud_show_shield(); hud_show_afterburner(); @@ -2675,23 +2674,23 @@ void draw_hud() show_time(); #endif #endif - if (Reticle_on && Cockpit_mode != CM_LETTERBOX && (!Use_player_head_angles)) + if (PlayerCfg.ReticleOn && PlayerCfg.CockpitMode != CM_LETTERBOX && (!Use_player_head_angles)) show_reticle(); #ifdef NETWORK show_HUD_names(); - if (Cockpit_mode != CM_LETTERBOX && Cockpit_mode != CM_REAR_VIEW) + if (PlayerCfg.CockpitMode != CM_LETTERBOX && PlayerCfg.CockpitMode != CM_REAR_VIEW) hud_show_flag(); - if (Cockpit_mode != CM_LETTERBOX && Cockpit_mode != CM_REAR_VIEW) + if (PlayerCfg.CockpitMode != CM_LETTERBOX && PlayerCfg.CockpitMode != CM_REAR_VIEW) hud_show_orbs(); #endif if (!Saving_movie_frames) HUD_render_message_frame(); - if (Cockpit_mode!=CM_STATUS_BAR && !Saving_movie_frames) + if (PlayerCfg.CockpitMode!=CM_STATUS_BAR && !Saving_movie_frames) hud_show_lives(); #ifdef NETWORK @@ -2700,7 +2699,7 @@ void draw_hud() #endif } - if (Rear_view && Cockpit_mode!=CM_REAR_VIEW) { + if (Rear_view && PlayerCfg.CockpitMode!=CM_REAR_VIEW) { HUD_render_message_frame(); gr_set_curfont( GAME_FONT ); gr_set_fontcolor(BM_XRGB(0,31,0),-1 ); @@ -2718,7 +2717,7 @@ void render_gauges() int shields = f2ir(Players[Player_num].shields); int cloak = ((Players[Player_num].flags&PLAYER_FLAGS_CLOAKED) != 0); - Assert(Cockpit_mode==CM_FULL_COCKPIT || Cockpit_mode==CM_STATUS_BAR); + Assert(PlayerCfg.CockpitMode==CM_FULL_COCKPIT || PlayerCfg.CockpitMode==CM_STATUS_BAR); // check to see if our display mode has changed since last render time -- // if so, then we need to make new gauge canvases. @@ -2744,9 +2743,9 @@ void render_gauges() draw_weapon_boxes(); - if (Cockpit_mode == CM_FULL_COCKPIT) { + if (PlayerCfg.CockpitMode == CM_FULL_COCKPIT) { #ifdef OGL - hud_bitblt (0, 0, &GameBitmaps[cockpit_bitmap[Cockpit_mode+(HIRESMODE?(Num_cockpits/2):0)].index]); + hud_bitblt (0, 0, &GameBitmaps[cockpit_bitmap[PlayerCfg.CockpitMode+(HIRESMODE?(Num_cockpits/2):0)].index]); #endif if (Newdemo_state == ND_STATE_RECORDING && (energy != old_energy)) { @@ -2788,7 +2787,7 @@ void render_gauges() show_homing_warning(); - } else if (Cockpit_mode == CM_STATUS_BAR) { + } else if (PlayerCfg.CockpitMode == CM_STATUS_BAR) { if (Newdemo_state == ND_STATE_RECORDING && (energy != old_energy)) { @@ -2796,7 +2795,7 @@ void render_gauges() old_energy = energy; } sb_draw_energy_bar(energy); - if (!GameArg.GfxGaugeHudMode && weapon_box_user[1] == WBU_WEAPON) + if (!PlayerCfg.HudMode && weapon_box_user[1] == WBU_WEAPON) show_bomb_count(HUD_SCALE_X(SB_BOMB_COUNT_X), HUD_SCALE_Y(SB_BOMB_COUNT_Y), gr_find_closest_color(0, 0, 0), 0, 0); if (Newdemo_state == ND_STATE_RECORDING && (Afterburner_charge != old_afterburner)) @@ -2920,7 +2919,7 @@ void do_cockpit_window_view(int win,object *viewer,int rear_view_flag,int user,c Viewer = viewer; Rear_view = rear_view_flag; - if (Cockpit_mode == CM_FULL_SCREEN) + if (PlayerCfg.CockpitMode == CM_FULL_SCREEN) { w = grd_curscreen->sc_w/6; @@ -2937,9 +2936,9 @@ void do_cockpit_window_view(int win,object *viewer,int rear_view_flag,int user,c gr_init_sub_canvas(&window_canv,&grd_curscreen->sc_canvas,window_x,window_y,w,h); } else { - if (Cockpit_mode == CM_FULL_COCKPIT) + if (PlayerCfg.CockpitMode == CM_FULL_COCKPIT) boxnum = (COCKPIT_PRIMARY_BOX)+win; - else if (Cockpit_mode == CM_STATUS_BAR) + else if (PlayerCfg.CockpitMode == CM_STATUS_BAR) boxnum = (SB_PRIMARY_BOX)+win; else goto abort; @@ -2969,7 +2968,7 @@ void do_cockpit_window_view(int win,object *viewer,int rear_view_flag,int user,c if (user == WBU_GUIDED) draw_guided_crosshair(); - if (Cockpit_mode == CM_FULL_SCREEN) { + if (PlayerCfg.CockpitMode == CM_FULL_SCREEN) { int small_window_bottom,big_window_bottom,extra_part_h; { diff --git a/main/gauges.h b/main/gauges.h index e7dbb620a..201a5d409 100644 --- a/main/gauges.h +++ b/main/gauges.h @@ -35,7 +35,6 @@ extern bitmap_index Gauges[MAX_GAUGE_BMS]; // Array of all gauge bitmaps. extern bitmap_index Gauges_hires[MAX_GAUGE_BMS]; // hires gauges // Flags for gauges/hud stuff -extern ubyte Reticle_on; extern void init_gauge_canvases(); extern void close_gauge_canvases(); diff --git a/main/hud.c b/main/hud.c index b7dd3415d..9455d3df2 100644 --- a/main/hud.c +++ b/main/hud.c @@ -48,6 +48,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #include "text.h" #include "laser.h" #include "args.h" +#include "playsave.h" int hud_first = 0; int hud_last = 0; @@ -67,7 +68,7 @@ int MSG_Noredundancy = 0; // ---------------------------------------------------------------------------- void clear_background_messages(void) { - if (((Cockpit_mode == CM_STATUS_BAR) || (Cockpit_mode == CM_FULL_SCREEN)) && (Last_msg_ycrd != -1) && (Screen_3d_window.cv_bitmap.bm_y >= 6)) { + if (((PlayerCfg.CockpitMode == CM_STATUS_BAR) || (PlayerCfg.CockpitMode == CM_FULL_SCREEN)) && (Last_msg_ycrd != -1) && (Screen_3d_window.cv_bitmap.bm_y >= 6)) { grs_canvas *canv_save = grd_curcanv; gr_set_current_canvas(NULL); @@ -93,7 +94,6 @@ void HUD_clear_messages() } -extern int Guided_in_big_window; extern int max_window_h, max_window_w; // ---------------------------------------------------------------------------- @@ -132,7 +132,7 @@ void HUD_render_message_frame() y = FSPACY(1); if (Guided_missile[Player_num] && Guided_missile[Player_num]->type==OBJ_WEAPON && Guided_missile[Player_num]->id==GUIDEDMISS_ID && - Guided_missile[Player_num]->signature==Guided_missile_sig[Player_num] && Guided_in_big_window) + Guided_missile[Player_num]->signature==Guided_missile_sig[Player_num] && PlayerCfg.GuidedInBigWindow) y+=LINE_SPACING; for (i=0; i %s\n", "Set hud mode. 0=normal 1-3=new"); - printf( " -persistentdebris %s\n", "Enable persistent debris. Works in singleplayer only"); printf( " -lowresfont %s\n", "Force to use LowRes fonts"); printf( " -lowresgraphics %s\n", "Force to use LowRes graphics"); printf( " -lowresmovies %s\n", "Play low resolution movies if available (for slow machines)"); printf( " -subtitles %s\n", "Turn on movie subtitles"); - #ifdef OGL - printf( "\n OpenGL:\n\n"); - printf( " -gl_mipmap %s\n", "Set gl texture filters to \"standard\" options for mipmapping"); - printf( " -gl_trilinear %s\n", "Set gl texture filters to trilinear mipmapping"); - printf( " -gl_transparency %s\n", "Enable transparency effects"); - printf( " -gl_reticle %s\n", "Use OGL reticle 0=never 1=above 320x* 2=always"); printf( " -gl_fixedfont %s\n", "Do not scale fonts to current resolution"); - printf( " -gl_prshot %s\n", "Take clean screenshots - no HUD and DXX-Rebirth writing"); #endif // OGL #ifdef NETWORK diff --git a/main/kconfig.c b/main/kconfig.c index bd43b7fbc..800ef49a6 100644 --- a/main/kconfig.c +++ b/main/kconfig.c @@ -57,6 +57,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #include "ai.h" #include "cntrlcen.h" #include "collide.h" +#include "playsave.h" #ifdef OGL #include "ogl_init.h" @@ -98,8 +99,6 @@ extern void nm_draw_background1(char * filename); control_info Controls; -ubyte Config_mouse_sensitivity = 8; - fix Cruise_speed=0; extern int Automap_flag; @@ -110,8 +109,8 @@ extern int Automap_flag; #define BT_JOY_AXIS 4 #define BT_INVERT 5 -#define CONTROL_USING_JOYSTICK (Config_control_type == CONTROL_JOYSTICK || Config_control_type == CONTROL_JOYMOUSE) -#define CONTROL_USING_MOUSE (Config_control_type == CONTROL_MOUSE || Config_control_type == CONTROL_JOYMOUSE) +#define CONTROL_USING_JOYSTICK (PlayerCfg.ControlType == CONTROL_JOYSTICK || PlayerCfg.ControlType == CONTROL_JOYMOUSE) +#define CONTROL_USING_MOUSE (PlayerCfg.ControlType == CONTROL_MOUSE || PlayerCfg.ControlType == CONTROL_JOYMOUSE) char *btype_text[] = { "BT_KEY", "BT_MOUSE_BUTTON", "BT_MOUSE_AXIS", "BT_JOY_BUTTON", "BT_JOY_AXIS", "BT_INVERT" }; @@ -132,15 +131,12 @@ typedef struct kc_item { int Num_items=28; kc_item *All_items; -ubyte kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS]; -ubyte kconfig_d2x_settings[MAX_D2X_CONTROLS]; - //----------- WARNING!!!!!!! ------------------------------------------- // THESE NEXT FOUR BLOCKS OF DATA ARE GENERATED BY PRESSING DEL+F12 WHEN // IN THE KEYBOARD CONFIG SCREEN. BASICALLY, THAT PROCEDURE MODIFIES THE // U,D,L,R FIELDS OF THE ARRAYS AND DUMPS THE NEW ARRAYS INTO KCONFIG.COD //------------------------------------------------------------------------- -ubyte default_kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS] = { +ubyte DefaultKeySettings[CONTROL_MAX_TYPES][MAX_CONTROLS] = { {0xc8,0x48,0xd0,0x50,0xcb,0x4b,0xcd,0x4d,0x38,0xff,0xff,0x4f,0xff,0x51,0xff,0x4a,0xff,0x4e,0xff,0xff,0x10,0x47,0x12,0x49,0x1d,0x9d,0x39,0xff,0x21,0xff,0x1e,0xff,0x2c,0xff,0x30,0xff,0x13,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf,0xff,0x1f,0xff,0x33,0xff,0x34,0xff,0x23,0xff,0x14,0xff,0xff,0xff,0x0,0x0}, {0x0,0x1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1,0x0,0x0,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0x0,0x0}, {0x5,0xc,0xff,0xff,0xff,0xff,0x7,0xf,0x13,0xb,0xff,0x6,0x8,0x1,0x0,0x0,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0}, @@ -328,7 +324,7 @@ kc_item kc_d2x[NUM_D2X_CONTROLS] = { }; #endif -ubyte default_kconfig_d2x_settings[MAX_D2X_CONTROLS] = { +ubyte DefaultKeySettingsD2X[MAX_D2X_CONTROLS] = { 0x2 ,0xff,0x3 ,0xff,0x4 ,0xff,0x5 ,0xff,0x6 ,0xff,0x7 ,0xff,0x8 ,0xff,0x9 , 0xff,0xa ,0xff,0xb ,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff }; @@ -730,39 +726,24 @@ void kconfig_sub(kc_item * items,int nitems, char * title) case KEY_CTRLED+KEY_R: if ( items==kc_keyboard ) { for (i=0; i FrameTime/2 ) Controls.pitch_time = FrameTime/2; if (Controls.heading_time > FrameTime ) Controls.heading_time = FrameTime; if (Controls.pitch_time < -FrameTime/2 ) Controls.pitch_time = -FrameTime/2; @@ -2104,32 +2085,32 @@ void kc_set_controls() int i; for (i=0; i -1 ) { if (s != Difficulty_level) { - Player_default_difficulty = s; + PlayerCfg.DefaultDifficulty = s; write_player_file(); } Difficulty_level = s; @@ -457,7 +449,7 @@ try_again: } } - Difficulty_level = Player_default_difficulty; + Difficulty_level = PlayerCfg.DefaultDifficulty; if (!do_difficulty_menu()) return; @@ -583,19 +575,19 @@ void change_res() void input_menuset(int nitems, newmenu_item * items, int *last_key, int citem ) { int i; - int oc_type = Config_control_type; + int oc_type = PlayerCfg.ControlType; nitems = nitems; last_key = last_key; citem = citem; for (i=0; i<4; i++ ) - if (items[i].value) Config_control_type = i; + if (items[i].value) PlayerCfg.ControlType = i; - if (Config_control_type == 2) Config_control_type = CONTROL_MOUSE; - if (Config_control_type == 3) Config_control_type = CONTROL_JOYMOUSE; + if (PlayerCfg.ControlType == 2) PlayerCfg.ControlType = CONTROL_MOUSE; + if (PlayerCfg.ControlType == 3) PlayerCfg.ControlType = CONTROL_JOYMOUSE; - if (oc_type != Config_control_type) { + if (oc_type != PlayerCfg.ControlType) { kc_set_controls(); } } @@ -616,33 +608,33 @@ void input_config() m[7].type = NM_TYPE_MENU; m[7].text = "CUSTOMIZE WEAPON KEYS"; m[8].type = NM_TYPE_TEXT; m[8].text = ""; m[9].type = NM_TYPE_TEXT; m[9].text = "Joystick"; - m[10].type = NM_TYPE_SLIDER; m[10].text="Sensitivity"; m[10].value=Config_joystick_sensitivity; m[10].min_value = 0; m[10].max_value = 16; - m[11].type = NM_TYPE_SLIDER; m[11].text="Joystick Deadzone"; m[11].value=joy_deadzone; m[11].min_value=0; m[11].max_value = 16; + m[10].type = NM_TYPE_SLIDER; m[10].text="Sensitivity"; m[10].value=PlayerCfg.JoystickSensitivity; m[10].min_value = 0; m[10].max_value = 16; + m[11].type = NM_TYPE_SLIDER; m[11].text="Joystick Deadzone"; m[11].value=PlayerCfg.JoystickDeadzone; m[11].min_value=0; m[11].max_value = 16; m[12].type = NM_TYPE_TEXT; m[12].text = "Mouse"; - m[13].type = NM_TYPE_SLIDER; m[13].text="Sensitivity"; m[13].value=Config_mouse_sensitivity; m[13].min_value = 0; m[13].max_value = 16; + m[13].type = NM_TYPE_SLIDER; m[13].text="Sensitivity"; m[13].value=PlayerCfg.MouseSensitivity; m[13].min_value = 0; m[13].max_value = 16; do { - i = Config_control_type; + i = PlayerCfg.ControlType; if (i == CONTROL_MOUSE) i = 2; if (i==CONTROL_JOYMOUSE) i = 3; m[i].value = 1; i1 = newmenu_do1(NULL, TXT_CONTROLS, nitems, m, input_menuset, i1); - Config_joystick_sensitivity = m[10].value; - joy_deadzone = m[11].value; - Config_mouse_sensitivity = m[13].value; + PlayerCfg.JoystickSensitivity = m[10].value; + PlayerCfg.JoystickDeadzone = m[11].value; + PlayerCfg.MouseSensitivity = m[13].value; for (j = 0; j <= 3; j++) if (m[j].value) - Config_control_type = j; - i = Config_control_type; - if (Config_control_type == 2) - Config_control_type = CONTROL_MOUSE; - if (Config_control_type == 3) - Config_control_type = CONTROL_JOYMOUSE; + PlayerCfg.ControlType = j; + i = PlayerCfg.ControlType; + if (PlayerCfg.ControlType == 2) + PlayerCfg.ControlType = CONTROL_MOUSE; + if (PlayerCfg.ControlType == 3) + PlayerCfg.ControlType = CONTROL_JOYMOUSE; switch (i1) { case 5: @@ -660,50 +652,6 @@ void input_config() } -void do_options_menu() -{ - newmenu_item m[10]; - int i = 0; - - do { - m[ 0].type = NM_TYPE_MENU; m[ 0].text="Sound effects & music..."; - m[ 1].type = NM_TYPE_TEXT; m[ 1].text=""; -#if defined(MACINTOSH) && defined(APPLE_DEMO) - m[ 2].type = NM_TYPE_TEXT; m[ 2].text=""; -#else - m[ 2].type = NM_TYPE_MENU; m[ 2].text=TXT_CONTROLS_; -#endif - m[ 3].type = NM_TYPE_TEXT; m[ 3].text=""; - - m[ 4].type = NM_TYPE_SLIDER; - m[ 4].text = TXT_BRIGHTNESS; - m[ 4].value = gr_palette_get_gamma(); - m[ 4].min_value = 0; - m[ 4].max_value = 16; - - m[ 5].type = NM_TYPE_MENU; m[ 5].text="Screen resolution..."; - - m[ 6].type = NM_TYPE_TEXT; m[ 6].text=""; - m[ 7].type = NM_TYPE_MENU; m[ 7].text="Primary autoselect ordering..."; - m[ 8].type = NM_TYPE_MENU; m[ 8].text="Secondary autoselect ordering..."; - m[ 9].type = NM_TYPE_MENU; m[ 9].text="Toggles..."; - - i = newmenu_do1( NULL, TXT_OPTIONS, sizeof(m)/sizeof(*m), m, options_menuset, i ); - - switch(i) { - case 0: do_sound_menu(); break; - case 2: input_config(); break; - case 5: change_res(); break; - case 7: ReorderPrimary(); break; - case 8: ReorderSecondary(); break; - case 9: do_toggles_menu(); break; - } - - } while( i>-1 ); - - write_player_file(); -} - void set_redbook_volume(int volume); void sound_menuset(int nitems, newmenu_item * items, int *last_key, int citem ) @@ -738,14 +686,14 @@ void sound_menuset(int nitems, newmenu_item * items, int *last_key, int citem ) void do_sound_menu() { - newmenu_item m[4]; + newmenu_item m[4]; int i = 0; do { m[ 0].type = NM_TYPE_SLIDER; m[ 0].text=TXT_FX_VOLUME; m[0].value=GameCfg.DigiVolume;m[0].min_value=0; m[0].max_value=8; m[ 1].type = NM_TYPE_SLIDER; m[ 1].text=(GameArg.SndEnableRedbook?"CD music volume":"MIDI music volume"); m[1].value=(GameArg.SndEnableRedbook?GameCfg.RedbookVolume:GameCfg.MidiVolume);m[1].min_value=0; m[1].max_value=8; m[ 2].type = NM_TYPE_TEXT; m[ 2].text=""; - m[ 3].type = NM_TYPE_CHECK; m[ 3].text=TXT_REVERSE_STEREO; m[3].value=GameCfg.ReverseStereo; + m[ 3].type = NM_TYPE_CHECK; m[ 3].text=TXT_REVERSE_STEREO; m[3].value=GameCfg.ReverseStereo; i = newmenu_do1( NULL, "Sound Effects & Music", sizeof(m)/sizeof(*m), m, sound_menuset, i ); @@ -754,41 +702,59 @@ void do_sound_menu() } while( i>-1 ); } +void do_graphics_menu() +{ + newmenu_item m[8]; + int i = 0, j = 0; + + do { + m[0].type = NM_TYPE_TEXT; m[0].text="Texture Filtering:"; + m[1].type = NM_TYPE_TEXT; m[1].text=" (Requires Game Restart)"; + m[2].type = NM_TYPE_RADIO; m[2].text = "None (Classical)"; m[2].value = 0; m[2].group = 0; + m[3].type = NM_TYPE_RADIO; m[3].text = "Bilinear"; m[3].value = 0; m[3].group = 0; + m[4].type = NM_TYPE_RADIO; m[4].text = "Trilinear"; m[4].value = 0; m[4].group = 0; + m[5].type = NM_TYPE_TEXT; m[5].text=""; + m[6].type = NM_TYPE_CHECK; m[6].text="Transparency Effects"; m[6].value = PlayerCfg.OglAlphaEffects; + m[7].type = NM_TYPE_CHECK; m[7].text="Vectorial Reticle"; m[7].value = PlayerCfg.OglReticle; + + m[GameCfg.TexFilt+2].value=1; + + i = newmenu_do1( NULL, "Graphics Options", sizeof(m)/sizeof(*m), m, NULL, i ); + + for (j = 0; j <= 2; j++) + if (m[j+2].value) + GameCfg.TexFilt = j; + PlayerCfg.OglAlphaEffects = m[6].value; + PlayerCfg.OglReticle = m[7].value; + + } while( i>-1 ); +} + #define ADD_CHECK(n,txt,v) do { m[n].type=NM_TYPE_CHECK; m[n].text=txt; m[n].value=v;} while (0) -void do_toggles_menu() +void do_misc_menu() { -#define N_TOGGLE_ITEMS 6 - newmenu_item m[N_TOGGLE_ITEMS]; + newmenu_item m[7]; int i = 0; do { - #if defined(MACINTOSH) && defined(USE_ISP) - if (ISpEnabled()) - { - m[0].type = NM_TYPE_TEXT; m[0].text = ""; - } - else - { - ADD_CHECK(0, "Ship auto-leveling", Auto_leveling_on); - } - #else - ADD_CHECK(0, "Ship auto-leveling", Auto_leveling_on); - #endif - ADD_CHECK(1, "Show reticle", Reticle_on); - ADD_CHECK(2, "Missile view", Missile_view_enabled); - ADD_CHECK(3, "Headlight on when picked up", Headlight_active_default ); - ADD_CHECK(4, "Show guided missile in main display", Guided_in_big_window ); - ADD_CHECK(5, "Escort robot hot keys",EscortHotKeys); + ADD_CHECK(0, "Ship auto-leveling", PlayerCfg.AutoLeveling); + ADD_CHECK(1, "Show reticle", PlayerCfg.ReticleOn); + ADD_CHECK(2, "Missile view", PlayerCfg.MissileViewEnabled); + ADD_CHECK(3, "Headlight on when picked up", PlayerCfg.HeadlightActiveDefault ); + ADD_CHECK(4, "Show guided missile in main display", PlayerCfg.GuidedInBigWindow ); + ADD_CHECK(5, "Escort robot hot keys",PlayerCfg.EscortHotKeys); + ADD_CHECK(6, "Persistent Debris",PlayerCfg.PersistentDebris); - i = newmenu_do1( NULL, "Toggles", N_TOGGLE_ITEMS, m, NULL, i ); + i = newmenu_do1( NULL, "Gameplay Options", sizeof(m)/sizeof(*m), m, NULL, i ); - Auto_leveling_on = m[0].value; - Reticle_on = m[1].value; - Missile_view_enabled = m[2].value; - Headlight_active_default = m[3].value; - Guided_in_big_window = m[4].value; - EscortHotKeys = m[5].value; + PlayerCfg.AutoLeveling = m[0].value; + PlayerCfg.ReticleOn = m[1].value; + PlayerCfg.MissileViewEnabled = m[2].value; + PlayerCfg.HeadlightActiveDefault= m[3].value; + PlayerCfg.GuidedInBigWindow = m[4].value; + PlayerCfg.EscortHotKeys = m[5].value; + PlayerCfg.PersistentDebris = m[6].value; } while( i>-1 ); @@ -865,3 +831,49 @@ void do_ip_manual_join_menu() } while( choice > -1 ); } #endif // NETWORK + +void do_options_menu() +{ + newmenu_item m[11]; + int i = 0; + + do { + m[ 0].type = NM_TYPE_MENU; m[ 0].text="Sound effects & music..."; + m[ 1].type = NM_TYPE_TEXT; m[ 1].text=""; + m[ 2].type = NM_TYPE_MENU; m[ 2].text=TXT_CONTROLS_; + m[ 3].type = NM_TYPE_TEXT; m[ 3].text=""; + + m[ 4].type = NM_TYPE_SLIDER; + m[ 4].text = TXT_BRIGHTNESS; + m[ 4].value = gr_palette_get_gamma(); + m[ 4].min_value = 0; + m[ 4].max_value = 16; + + m[ 5].type = NM_TYPE_MENU; m[ 5].text="Screen resolution..."; +#ifdef OGL + m[ 6].type = NM_TYPE_MENU; m[ 6].text="Graphics Options..."; +#else + m[ 6].type = NM_TYPE_TEXT; m[ 6].text=""; +#endif + + m[ 7].type = NM_TYPE_TEXT; m[ 7].text=""; + m[ 8].type = NM_TYPE_MENU; m[ 8].text="Primary autoselect ordering..."; + m[ 9].type = NM_TYPE_MENU; m[ 9].text="Secondary autoselect ordering..."; + m[10].type = NM_TYPE_MENU; m[10].text="Gameplay Options..."; + + i = newmenu_do1( NULL, TXT_OPTIONS, sizeof(m)/sizeof(*m), m, options_menuset, i ); + + switch(i) { + case 0: do_sound_menu(); break; + case 2: input_config(); break; + case 5: change_res(); break; + case 6: do_graphics_menu(); break; + case 8: ReorderPrimary(); break; + case 9: ReorderSecondary(); break; + case 10: do_misc_menu(); break; + } + + } while( i>-1 ); + + write_player_file(); +} diff --git a/main/menu.h b/main/menu.h index e39182412..8642fb5bc 100644 --- a/main/menu.h +++ b/main/menu.h @@ -35,9 +35,6 @@ extern void d2x_options_menu(); #define STARS_BACKGROUND ((HIRESMODE && cfexist("starsb.pcx"))?"starsb.pcx":cfexist("stars.pcx")?"stars.pcx":"starsb.pcx") extern char *menu_difficulty_text[]; -extern int Player_default_difficulty; -extern int Auto_leveling_on; -extern int Missile_view_enabled; extern int Escort_view_enabled; extern int Cockpit_rear_view; diff --git a/main/multi.c b/main/multi.c index 4bf5848a2..778e145f1 100644 --- a/main/multi.c +++ b/main/multi.c @@ -139,7 +139,6 @@ int Network_laser_flags; // Special flags for the shot int Network_laser_level; // What level short Network_laser_track; // Who is it tracking? char Network_message[MAX_MESSAGE_LEN]; -char Network_message_macro[4][MAX_MESSAGE_LEN]; int Network_message_reciever=-1; int sorted_kills[MAX_NUM_NET_PLAYERS]; short kill_matrix[MAX_NUM_NET_PLAYERS][MAX_NUM_NET_PLAYERS]; @@ -1072,13 +1071,13 @@ multi_send_macro(int key) Int3(); } - if (!Network_message_macro[key][0]) + if (!PlayerCfg.NetworkMessageMacro[key][0]) { HUD_init_message(TXT_NO_MACRO); return; } - strcpy(Network_message, Network_message_macro[key]); + strcpy(Network_message, PlayerCfg.NetworkMessageMacro[key]); Network_message_reciever = 100; HUD_init_message("%s '%s'", TXT_SENDING, Network_message); @@ -1259,7 +1258,7 @@ void multi_define_macro_end() { Assert( multi_defining_message > 0 ); - strcpy( Network_message_macro[multi_defining_message-1], Network_message ); + strcpy( PlayerCfg.NetworkMessageMacro[multi_defining_message-1], Network_message ); write_player_file(); multi_message_index = 0; @@ -4437,7 +4436,7 @@ void multi_add_lifetime_kills () oldrank=GetMyNetRanking(); - Netlife_kills++; + PlayerCfg.NetlifeKills++; if (oldrank!=GetMyNetRanking()) { @@ -4464,7 +4463,7 @@ void multi_add_lifetime_killed () oldrank=GetMyNetRanking(); - Netlife_killed++; + PlayerCfg.NetlifeKilled++; if (oldrank!=GetMyNetRanking()) { diff --git a/main/multi.h b/main/multi.h index 7202c5050..2ebd82c1c 100644 --- a/main/multi.h +++ b/main/multi.h @@ -191,7 +191,6 @@ extern int Network_laser_gun; extern int Network_laser_fired; extern int Network_laser_level; extern int Network_laser_flags; -extern int Netlife_kills,Netlife_killed; extern int message_length[MULTI_MAX_TYPE+1]; extern char multibuf[MAX_MULTI_MESSAGE_LEN+4]; @@ -215,7 +214,6 @@ extern fix Show_kill_list_timer; // Used to send network messages extern char Network_message[MAX_MESSAGE_LEN]; -extern char Network_message_macro[4][MAX_MESSAGE_LEN]; extern int Network_message_reciever; // Which player 'owns' each local object for network purposes diff --git a/main/network.c b/main/network.c index 52e7c2c8a..794bc6fa3 100644 --- a/main/network.c +++ b/main/network.c @@ -178,8 +178,6 @@ int num_active_games = 0; int PacketsPerSec=10; int MaxXDataSize=NET_XDATA_SIZE; -int Netlife_kills=0, Netlife_killed=0; - int Network_debug=0; int Network_active=0; @@ -2444,7 +2442,7 @@ int network_get_game_params() Netgame.KillGoal=0; Netgame.PlayTimeAllowed=0; Netgame.Allow_marker_view=1; - Netgame.difficulty=Player_default_difficulty; + Netgame.difficulty=PlayerCfg.DefaultDifficulty; Netgame.max_numplayers=MaxNumNetPlayers; sprintf( Netgame.game_name, "%s%s", Players[Player_num].callsign, TXT_S_GAME ); @@ -5077,12 +5075,12 @@ int GetMyNetRanking () int rank; int eff; - if (Netlife_kills+Netlife_killed==0) + if (PlayerCfg.NetlifeKills+PlayerCfg.NetlifeKilled==0) return (1); - rank=(int) (((float)Netlife_kills/3000.0)*8.0); + rank=(int) (((float)PlayerCfg.NetlifeKills/3000.0)*8.0); - eff=(int)((float)((float)Netlife_kills/((float)Netlife_killed+(float)Netlife_kills))*100.0); + eff=(int)((float)((float)PlayerCfg.NetlifeKills/((float)PlayerCfg.NetlifeKilled+(float)PlayerCfg.NetlifeKills))*100.0); if (rank>8) rank=8; diff --git a/main/newdemo.c b/main/newdemo.c index ef67c4276..b706123b0 100644 --- a/main/newdemo.c +++ b/main/newdemo.c @@ -104,6 +104,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #include "editor/editor.h" #endif #include "console.h" +#include "playsave.h" #ifdef MACINTOSH #pragma global_optimizer off // pretty much sucks...need to look into this @@ -1892,8 +1893,8 @@ int newdemo_read_frame_information() case ND_EVENT_START_GUIDED: Newdemo_flying_guided=1; if ((Newdemo_vcr_state == ND_STATE_PLAYBACK) || (Newdemo_vcr_state == ND_STATE_FASTFORWARD) || (Newdemo_vcr_state == ND_STATE_ONEFRAMEFORWARD)) { - saved_guided_cockpit = Cockpit_mode; - if (Cockpit_mode == CM_FULL_COCKPIT && 1) + saved_guided_cockpit = PlayerCfg.CockpitMode; + if (PlayerCfg.CockpitMode == CM_FULL_COCKPIT && 1) select_cockpit(CM_STATUS_BAR); } else if ((Newdemo_vcr_state == ND_STATE_REWINDING) || (Newdemo_vcr_state == ND_STATE_ONEFRAMEBACKWARD)) { Newdemo_flying_guided=0; @@ -1904,8 +1905,8 @@ int newdemo_read_frame_information() Newdemo_flying_guided=0; if ((Newdemo_vcr_state == ND_STATE_REWINDING) || (Newdemo_vcr_state == ND_STATE_ONEFRAMEBACKWARD)) { Newdemo_flying_guided=1; - saved_guided_cockpit = Cockpit_mode; - if (Cockpit_mode == CM_FULL_COCKPIT && 1) + saved_guided_cockpit = PlayerCfg.CockpitMode; + if (PlayerCfg.CockpitMode == CM_FULL_COCKPIT && 1) select_cockpit(CM_STATUS_BAR); } else if ((Newdemo_vcr_state == ND_STATE_PLAYBACK) || (Newdemo_vcr_state == ND_STATE_FASTFORWARD) || (Newdemo_vcr_state == ND_STATE_ONEFRAMEFORWARD)) { select_cockpit(saved_guided_cockpit); @@ -2064,7 +2065,7 @@ int newdemo_read_frame_information() case ND_EVENT_LETTERBOX: if ((Newdemo_vcr_state == ND_STATE_PLAYBACK) || (Newdemo_vcr_state == ND_STATE_FASTFORWARD) || (Newdemo_vcr_state == ND_STATE_ONEFRAMEFORWARD)) { - saved_letter_cockpit = Cockpit_mode; + saved_letter_cockpit = PlayerCfg.CockpitMode; select_cockpit(CM_LETTERBOX); } else if ((Newdemo_vcr_state == ND_STATE_REWINDING) || (Newdemo_vcr_state == ND_STATE_ONEFRAMEBACKWARD)) select_cockpit(saved_letter_cockpit); @@ -2077,8 +2078,8 @@ int newdemo_read_frame_information() } case ND_EVENT_REARVIEW: if ((Newdemo_vcr_state == ND_STATE_PLAYBACK) || (Newdemo_vcr_state == ND_STATE_FASTFORWARD) || (Newdemo_vcr_state == ND_STATE_ONEFRAMEFORWARD)) { - saved_rearview_cockpit = Cockpit_mode; - if (Cockpit_mode == CM_FULL_COCKPIT) + saved_rearview_cockpit = PlayerCfg.CockpitMode; + if (PlayerCfg.CockpitMode == CM_FULL_COCKPIT) select_cockpit(CM_REAR_VIEW); Rear_view=1; } else if ((Newdemo_vcr_state == ND_STATE_REWINDING) || (Newdemo_vcr_state == ND_STATE_ONEFRAMEBACKWARD)) { @@ -2091,7 +2092,7 @@ int newdemo_read_frame_information() case ND_EVENT_RESTORE_COCKPIT: if ((Newdemo_vcr_state == ND_STATE_REWINDING) || (Newdemo_vcr_state == ND_STATE_ONEFRAMEBACKWARD)) { - saved_letter_cockpit = Cockpit_mode; + saved_letter_cockpit = PlayerCfg.CockpitMode; select_cockpit(CM_LETTERBOX); } else if ((Newdemo_vcr_state == ND_STATE_PLAYBACK) || (Newdemo_vcr_state == ND_STATE_FASTFORWARD) || (Newdemo_vcr_state == ND_STATE_ONEFRAMEFORWARD)) select_cockpit(saved_letter_cockpit); @@ -2100,8 +2101,8 @@ int newdemo_read_frame_information() case ND_EVENT_RESTORE_REARVIEW: if ((Newdemo_vcr_state == ND_STATE_REWINDING) || (Newdemo_vcr_state == ND_STATE_ONEFRAMEBACKWARD)) { - saved_rearview_cockpit = Cockpit_mode; - if (Cockpit_mode == CM_FULL_COCKPIT) + saved_rearview_cockpit = PlayerCfg.CockpitMode; + if (PlayerCfg.CockpitMode == CM_FULL_COCKPIT) select_cockpit(CM_REAR_VIEW); Rear_view=1; } else if ((Newdemo_vcr_state == ND_STATE_PLAYBACK) || (Newdemo_vcr_state == ND_STATE_FASTFORWARD) || (Newdemo_vcr_state == ND_STATE_ONEFRAMEFORWARD)) { @@ -3269,7 +3270,7 @@ void newdemo_start_playback(char * filename) Newdemo_state = ND_STATE_PLAYBACK; Newdemo_vcr_state = ND_STATE_PLAYBACK; - Newdemo_old_cockpit = Cockpit_mode; + Newdemo_old_cockpit = PlayerCfg.CockpitMode; Newdemo_size = PHYSFS_fileLength(infile); nd_bad_read = 0; Newdemo_at_eof = 0; @@ -3277,8 +3278,8 @@ void newdemo_start_playback(char * filename) Newdemo_players_cloaked = 0; playback_style = NORMAL_PLAYBACK; Function_mode = FMODE_GAME; - Cockpit_3d_view[0] = CV_NONE; //turn off 3d views on cockpit - Cockpit_3d_view[1] = CV_NONE; //turn off 3d views on cockpit + PlayerCfg.Cockpit3DView[0] = CV_NONE; //turn off 3d views on cockpit + PlayerCfg.Cockpit3DView[1] = CV_NONE; //turn off 3d views on cockpit HUD_clear_messages(); newdemo_playback_one_frame(); // this one loads new level newdemo_playback_one_frame(); // get all of the objects to renderb game @@ -3293,7 +3294,7 @@ void newdemo_stop_playback() change_playernum_to(0); //this is reality #endif strncpy(Players[Player_num].callsign, nd_save_callsign, CALLSIGN_LEN); - Cockpit_mode = Newdemo_old_cockpit; + PlayerCfg.CockpitMode = Newdemo_old_cockpit; Rear_view=0; Game_mode = GM_GAME_OVER; Function_mode = FMODE_MENU; diff --git a/main/newmenu.c b/main/newmenu.c index af38b83e7..816abb4b8 100644 --- a/main/newmenu.c +++ b/main/newmenu.c @@ -71,6 +71,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #include "strutil.h" #include "vers_id.h" #include "timer.h" +#include "playsave.h" #ifdef OGL #include "ogl_init.h" @@ -542,7 +543,7 @@ int check_button_press() { int i; - switch (Config_control_type) { + switch (PlayerCfg.ControlType) { case CONTROL_JOYSTICK: case CONTROL_FLIGHTSTICK_PRO: case CONTROL_THRUSTMASTER_FCS: @@ -567,7 +568,7 @@ int check_button_press() break; default: - Error("Bad control type (Config_control_type):%i",Config_control_type); + Error("Bad control type (PlayerCfg.ControlType):%i",PlayerCfg.ControlType); } return 0; diff --git a/main/object.c b/main/object.c index f7cea87e4..c900a9bae 100644 --- a/main/object.c +++ b/main/object.c @@ -74,6 +74,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #include "piggy.h" #include "switch.h" #include "gameseq.h" +#include "playsave.h" #ifdef EDITOR #include "editor/editor.h" @@ -1682,7 +1683,7 @@ void start_player_death_sequence(object *player) Dead_player_camera = Viewer; } - cockpit_mode_save = Cockpit_mode; + cockpit_mode_save = PlayerCfg.CockpitMode; select_cockpit(CM_LETTERBOX); if (Newdemo_state == ND_STATE_RECORDING) newdemo_record_letterbox(); @@ -2025,7 +2026,7 @@ void object_move_all() obj_delete_all_that_should_be_dead(); - if (Auto_leveling_on) + if (PlayerCfg.AutoLeveling) ConsoleObject->mtype.phys_info.flags |= PF_LEVELLING; else ConsoleObject->mtype.phys_info.flags &= ~PF_LEVELLING; diff --git a/main/playsave.c b/main/playsave.c index 71182947e..8913f51b3 100644 --- a/main/playsave.c +++ b/main/playsave.c @@ -35,20 +35,16 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #else #include #endif - #include "error.h" - #include "strutil.h" #include "game.h" #include "gameseq.h" #include "player.h" #include "playsave.h" #include "joy.h" -#include "kconfig.h" #include "digi.h" #include "newmenu.h" #include "palette.h" -#include "multi.h" #include "menu.h" #include "config.h" #include "text.h" @@ -58,34 +54,12 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #include "powerup.h" #include "makesig.h" #include "byteswap.h" -#include "escort.h" #include "u_mem.h" #include "strio.h" #include "physfsx.h" #include "vers_id.h" #include "newdemo.h" -#define SAVE_FILE_ID MAKE_SIG('D','P','L','R') - -#if defined(_WIN32_WCE) -# define errno -1 -# define ENOENT -1 -# define strerror(x) "Unknown Error" -#endif - -int get_lifetime_checksum (int a,int b); - -typedef struct hli { - char shortname[9]; - ubyte level_num; -} hli; - -short n_highest_levels; - -hli highest_levels[MAX_MISSIONS]; - -#define PLAYER_FILE_VERSION 25 //increment this every time the player file changes - //version 5 -> 6: added new highest level information //version 6 -> 7: stripped out the old saved_game array. //version 7 -> 8: added reticle flag, & window size @@ -107,50 +81,62 @@ hli highest_levels[MAX_MISSIONS]; //version 23 -> 24: add name of joystick for windows version. //version 24 -> 25: add d2x keys array -#define COMPATIBLE_PLAYER_FILE_VERSION 17 +#define SAVE_FILE_ID MAKE_SIG('D','P','L','R') +#define PLAYER_FILE_VERSION 25 //increment this every time the player file changes +#define COMPATIBLE_PLAYER_FILE_VERSION 17 -int Default_leveling_on=1; -extern ubyte SecondaryOrder[],PrimaryOrder[]; +struct player_config PlayerCfg; +int get_lifetime_checksum (int a,int b); extern void InitWeaponOrdering(); int new_player_config() { - int i,j,control_choice; + int i,j; int mct=CONTROL_MAX_TYPES; mct--; - InitWeaponOrdering (); //setup default weapon priorities - - control_choice = Config_control_type; // Assume keyboard + PlayerCfg.ControlType=CONTROL_NONE; // Assume keyboard + InitWeaponOrdering (); //setup default weapon prioritiess for (i=0;i= 19) PHYSFS_seek(file,PHYSFS_tell(file)+sizeof(sbyte)); //skip Automap_always_hires - Auto_leveling_on = Default_leveling_on; - //read new highest level info - n_highest_levels = cfile_read_short(file); + PlayerCfg.NHighestLevels = cfile_read_short(file); if (swap) - n_highest_levels = SWAPSHORT(n_highest_levels); - Assert(n_highest_levels <= MAX_MISSIONS); + PlayerCfg.NHighestLevels = SWAPSHORT(PlayerCfg.NHighestLevels); + Assert(PlayerCfg.NHighestLevels <= MAX_MISSIONS); - if (PHYSFS_read(file, highest_levels, sizeof(hli), n_highest_levels) != n_highest_levels) + if (PHYSFS_read(file, PlayerCfg.HighestLevels, sizeof(hli), PlayerCfg.NHighestLevels) != PlayerCfg.NHighestLevels) goto read_player_file_failed; //read taunt macros @@ -365,7 +412,7 @@ int read_player_file() len = MAX_MESSAGE_LEN; for (i = 0; i < 4; i++) - if (PHYSFS_read(file, Network_message_macro[i], len, 1) != 1) + if (PHYSFS_read(file, PlayerCfg.NetworkMessageMacro[i], len, 1) != 1) goto read_player_file_failed; #else char dummy[4][MAX_MESSAGE_LEN]; @@ -378,31 +425,31 @@ int read_player_file() { int n_control_types = (player_file_version<20)?7:CONTROL_MAX_TYPES; - if (PHYSFS_read(file, kconfig_settings, MAX_CONTROLS*n_control_types, 1) != 1) + if (PHYSFS_read(file, PlayerCfg.KeySettings, MAX_CONTROLS*n_control_types, 1) != 1) goto read_player_file_failed; else if (PHYSFS_read(file, (ubyte *)&control_type_dos, sizeof(ubyte), 1) != 1) goto read_player_file_failed; else if (player_file_version >= 21 && PHYSFS_read(file, (ubyte *)&control_type_win, sizeof(ubyte), 1) != 1) goto read_player_file_failed; - else if (PHYSFS_read(file, &Config_joystick_sensitivity, sizeof(ubyte), 1) !=1 ) + else if (PHYSFS_read(file, &PlayerCfg.JoystickSensitivity, sizeof(ubyte), 1) !=1 ) goto read_player_file_failed; - Config_control_type = control_type_dos; + PlayerCfg.ControlType = control_type_dos; for (i=0;i<11;i++) { - PrimaryOrder[i] = cfile_read_byte(file); - SecondaryOrder[i] = cfile_read_byte(file); + PlayerCfg.PrimaryOrder[i] = cfile_read_byte(file); + PlayerCfg.SecondaryOrder[i] = cfile_read_byte(file); } if (player_file_version>=16) { - PHYSFS_readSLE32(file, &Cockpit_3d_view[0]); - PHYSFS_readSLE32(file, &Cockpit_3d_view[1]); + PHYSFS_readSLE32(file, &PlayerCfg.Cockpit3DView[0]); + PHYSFS_readSLE32(file, &PlayerCfg.Cockpit3DView[1]); if (swap) { - Cockpit_3d_view[0] = SWAPINT(Cockpit_3d_view[0]); - Cockpit_3d_view[1] = SWAPINT(Cockpit_3d_view[1]); + PlayerCfg.Cockpit3DView[0] = SWAPINT(PlayerCfg.Cockpit3DView[0]); + PlayerCfg.Cockpit3DView[1] = SWAPINT(PlayerCfg.Cockpit3DView[1]); } } @@ -413,11 +460,11 @@ int read_player_file() if (player_file_version>=22) { #ifdef NETWORK - PHYSFS_readSLE32(file, &Netlife_kills); - PHYSFS_readSLE32(file, &Netlife_killed); + PHYSFS_readSLE32(file, &PlayerCfg.NetlifeKills); + PHYSFS_readSLE32(file, &PlayerCfg.NetlifeKilled); if (swap) { - Netlife_kills = SWAPINT(Netlife_kills); - Netlife_killed = SWAPINT(Netlife_killed); + PlayerCfg.NetlifeKills = SWAPINT(PlayerCfg.NetlifeKills); + PlayerCfg.NetlifeKilled = SWAPINT(PlayerCfg.NetlifeKilled); } #else { @@ -430,7 +477,7 @@ int read_player_file() #ifdef NETWORK else { - Netlife_kills=0; Netlife_killed=0; + PlayerCfg.NetlifeKills=0; PlayerCfg.NetlifeKilled=0; } #endif @@ -440,9 +487,9 @@ int read_player_file() if (swap) i = SWAPINT(i); #ifdef NETWORK - if (i!=get_lifetime_checksum (Netlife_kills,Netlife_killed)) + if (i!=get_lifetime_checksum (PlayerCfg.NetlifeKills,PlayerCfg.NetlifeKilled)) { - Netlife_kills=0; Netlife_killed=0; + PlayerCfg.NetlifeKills=0; PlayerCfg.NetlifeKilled=0; nm_messagebox(NULL, 1, "Shame on me", "Trying to cheat eh?"); rewrite_it=1; } @@ -451,11 +498,11 @@ int read_player_file() //read guidebot name if (player_file_version >= 18) - PHYSFSX_readString(file, guidebot_name); + PHYSFSX_readString(file, PlayerCfg.GuidebotName); else - strcpy(guidebot_name,"GUIDE-BOT"); + strcpy(PlayerCfg.GuidebotName,"GUIDE-BOT"); - strcpy(real_guidebot_name,guidebot_name); + strcpy(PlayerCfg.GuidebotNameReal,PlayerCfg.GuidebotName); { char buf[128]; @@ -465,10 +512,10 @@ int read_player_file() } if (player_file_version >= 25) - PHYSFS_read(file, kconfig_d2x_settings, MAX_D2X_CONTROLS, 1); + PHYSFS_read(file, PlayerCfg.KeySettingsD2X, MAX_D2X_CONTROLS, 1); else for(i=0; i < MAX_D2X_CONTROLS; i++) - kconfig_d2x_settings[i] = default_kconfig_d2x_settings[i]; + PlayerCfg.KeySettingsD2X[i] = DefaultKeySettingsD2X[i]; if (!PHYSFS_close(file)) goto read_player_file_failed; @@ -497,19 +544,19 @@ int find_hli_entry() { int i; - for (i=0;i highest_levels[i].level_num) - highest_levels[i].level_num = levelnum; + if (levelnum > PlayerCfg.HighestLevels[i].LevelNum) + PlayerCfg.HighestLevels[i].LevelNum = levelnum; write_player_file(); } @@ -540,12 +587,12 @@ int get_highest_level(void) read_player_file(); #ifndef SATURN if (strlen(Current_mission_filename)==0 ) { - for (i=0;i i ) i = highest_saturn_level; return i; @@ -577,23 +624,23 @@ int write_player_file() PHYSFS_seek(file,PHYSFS_tell(file)+2*(sizeof(PHYSFS_uint16))); // skip Game_window_w, Game_window_h - PHYSFSX_writeU8(file, Player_default_difficulty); - PHYSFSX_writeU8(file, Auto_leveling_on); - PHYSFSX_writeU8(file, Reticle_on); - PHYSFSX_writeU8(file, (Cockpit_mode==1?0:Cockpit_mode)); + PHYSFSX_writeU8(file, PlayerCfg.DefaultDifficulty); + PHYSFSX_writeU8(file, PlayerCfg.AutoLeveling); + PHYSFSX_writeU8(file, PlayerCfg.ReticleOn); + PHYSFSX_writeU8(file, (PlayerCfg.CockpitMode==1?0:PlayerCfg.CockpitMode)); PHYSFS_seek(file,PHYSFS_tell(file)+sizeof(PHYSFS_uint8)); // skip Default_display_mode - PHYSFSX_writeU8(file, Missile_view_enabled); - PHYSFSX_writeU8(file, Headlight_active_default); - PHYSFSX_writeU8(file, Guided_in_big_window); + PHYSFSX_writeU8(file, PlayerCfg.MissileViewEnabled); + PHYSFSX_writeU8(file, PlayerCfg.HeadlightActiveDefault); + PHYSFSX_writeU8(file, PlayerCfg.GuidedInBigWindow); PHYSFS_seek(file,PHYSFS_tell(file)+sizeof(PHYSFS_uint8)); // skip Automap_always_hires //write higest level info - PHYSFS_writeULE16(file, n_highest_levels); - if ((PHYSFS_write(file, highest_levels, sizeof(hli), n_highest_levels) != n_highest_levels)) + PHYSFS_writeULE16(file, PlayerCfg.NHighestLevels); + if ((PHYSFS_write(file, PlayerCfg.HighestLevels, sizeof(hli), PlayerCfg.NHighestLevels) != PlayerCfg.NHighestLevels)) goto write_player_file_failed; #ifdef NETWORK - if ((PHYSFS_write(file, Network_message_macro, MAX_MESSAGE_LEN, 4) != 4)) + if ((PHYSFS_write(file, PlayerCfg.NetworkMessageMacro, MAX_MESSAGE_LEN, 4) != 4)) goto write_player_file_failed; #else { @@ -607,30 +654,30 @@ int write_player_file() //write kconfig info { - control_type_dos = Config_control_type; + control_type_dos = PlayerCfg.ControlType; - if (PHYSFS_write(file, kconfig_settings, MAX_CONTROLS*CONTROL_MAX_TYPES, 1) != 1) + if (PHYSFS_write(file, PlayerCfg.KeySettings, MAX_CONTROLS*CONTROL_MAX_TYPES, 1) != 1) goto write_player_file_failed; else if (PHYSFS_write(file, &control_type_dos, sizeof(ubyte), 1) != 1) goto write_player_file_failed; else if (PHYSFS_write(file, &control_type_win, sizeof(ubyte), 1) != 1) goto write_player_file_failed; - else if (PHYSFS_write(file, &Config_joystick_sensitivity, sizeof(ubyte), 1) != 1) + else if (PHYSFS_write(file, &PlayerCfg.JoystickSensitivity, sizeof(ubyte), 1) != 1) goto write_player_file_failed; for (i = 0; i < 11; i++) { - PHYSFS_write(file, &PrimaryOrder[i], sizeof(ubyte), 1); - PHYSFS_write(file, &SecondaryOrder[i], sizeof(ubyte), 1); + PHYSFS_write(file, &PlayerCfg.PrimaryOrder[i], sizeof(ubyte), 1); + PHYSFS_write(file, &PlayerCfg.SecondaryOrder[i], sizeof(ubyte), 1); } - PHYSFS_writeULE32(file, Cockpit_3d_view[0]); - PHYSFS_writeULE32(file, Cockpit_3d_view[1]); + PHYSFS_writeULE32(file, PlayerCfg.Cockpit3DView[0]); + PHYSFS_writeULE32(file, PlayerCfg.Cockpit3DView[1]); #ifdef NETWORK - PHYSFS_writeULE32(file, Netlife_kills); - PHYSFS_writeULE32(file, Netlife_killed); - i=get_lifetime_checksum (Netlife_kills,Netlife_killed); + PHYSFS_writeULE32(file, PlayerCfg.NetlifeKills); + PHYSFS_writeULE32(file, PlayerCfg.NetlifeKilled); + i=get_lifetime_checksum (PlayerCfg.NetlifeKills,PlayerCfg.NetlifeKilled); #else PHYSFS_writeULE32(file, 0); PHYSFS_writeULE32(file, 0); @@ -640,7 +687,7 @@ int write_player_file() } //write guidebot name - PHYSFSX_writeString(file, real_guidebot_name); + PHYSFSX_writeString(file, PlayerCfg.GuidebotNameReal); { char buf[128]; @@ -648,7 +695,7 @@ int write_player_file() PHYSFSX_writeString(file, buf); // Write out current joystick for player. } - PHYSFS_write(file, kconfig_d2x_settings, MAX_D2X_CONTROLS, 1); + PHYSFS_write(file, PlayerCfg.KeySettingsD2X, MAX_D2X_CONTROLS, 1); if (!PHYSFS_close(file)) goto write_player_file_failed; @@ -666,18 +713,6 @@ int write_player_file() return -1; } -//update the player's highest level. returns errno (0 == no error) -int update_player_file() -{ - int ret; - - if ((ret=read_player_file()) != EZERO) - if (ret != ENOENT) //if file doesn't exist, that's ok - return ret; - - return write_player_file(); -} - int get_lifetime_checksum (int a,int b) { int num; diff --git a/main/playsave.h b/main/playsave.h index 26a00e04a..a9c2d9a26 100644 --- a/main/playsave.h +++ b/main/playsave.h @@ -21,18 +21,62 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #ifndef _PLAYSAVE_H #define _PLAYSAVE_H +#include "kconfig.h" +#include "mission.h" +#include "weapon.h" +#include "multi.h" +#include "escort.h" + #define N_SAVE_SLOTS 10 #define GAME_NAME_LEN 25 // +1 for terminating zero = 26 +typedef struct hli { + char Shortname[9]; + ubyte LevelNum; +} hli; + +// FIXME!!! NOW THINK AGAIN IF ALL NEW PARTS ARE SOMEHOW ACCESSIBLE FROM MENUS!!! +typedef struct player_config +{ + ubyte ControlType; + ubyte PrimaryOrder[MAX_PRIMARY_WEAPONS+1]; + ubyte SecondaryOrder[MAX_SECONDARY_WEAPONS+1]; + ubyte KeySettings[CONTROL_MAX_TYPES][MAX_CONTROLS]; + ubyte KeySettingsD2X[MAX_D2X_CONTROLS]; + int DefaultDifficulty; + int AutoLeveling; + short NHighestLevels; + hli HighestLevels[MAX_MISSIONS]; + ubyte MouseSensitivity; + ubyte JoystickSensitivity; + int JoystickDeadzone; + int CockpitMode; + int Cockpit3DView[2]; + char NetworkMessageMacro[4][MAX_MESSAGE_LEN]; + int NetlifeKills; + int NetlifeKilled; + ubyte ReticleOn; + int MissileViewEnabled; + int HeadlightActiveDefault; + int GuidedInBigWindow; + char GuidebotName[GUIDEBOT_NAME_LEN+1]; + char GuidebotNameReal[GUIDEBOT_NAME_LEN+1]; + int HudMode; + int EscortHotKeys; + int PersistentDebris; + int OglAlphaEffects; + int OglReticle; + int OglPRShot; +} __attribute__ ((packed)) player_config; + +extern struct player_config PlayerCfg; + #ifndef EZERO #define EZERO 0 #endif extern int Default_leveling_on; -// update the player's highest level. returns errno (0 == no error) -int update_player_file(); - // Used to save kconfig values to disk. int write_player_file(); diff --git a/main/powerup.c b/main/powerup.c index a2cb07cf7..bff7d0ae2 100644 --- a/main/powerup.c +++ b/main/powerup.c @@ -55,6 +55,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #include "gr.h" // for powerup outline drawing #include "editor/editor.h" #endif +#include "playsave.h" int N_powerup_types = 0; powerup_type_info Powerup_info[MAX_POWERUP_TYPES]; @@ -229,7 +230,6 @@ extern char GetKeyValue(char); extern void check_to_use_primary(int); extern void multi_send_got_flag (char); -int Headlight_active_default=1; //is headlight on when picked up? extern int PlayerMessage; // returns true if powerup consumed @@ -598,9 +598,9 @@ int do_powerup(object *obj) multi_send_play_sound(Powerup_info[obj->id].hit_sound, F1_0); #endif digi_play_sample( Powerup_info[obj->id].hit_sound, F1_0 ); - sprintf(msg,"HEADLIGHT BOOST! (Headlight is %s)",Headlight_active_default?"ON":"OFF"); + sprintf(msg,"HEADLIGHT BOOST! (Headlight is %s)",PlayerCfg.HeadlightActiveDefault?"ON":"OFF"); powerup_basic(15, 0, 15, 0, msg ); - if (Headlight_active_default) + if (PlayerCfg.HeadlightActiveDefault) Players[Player_num].flags |= PLAYER_FLAGS_HEADLIGHT_ON; used=1; #ifdef NETWORK diff --git a/main/powerup.h b/main/powerup.h index 31d911506..6ce4d1b76 100644 --- a/main/powerup.h +++ b/main/powerup.h @@ -94,8 +94,6 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #define POWERUP_NAME_LENGTH 16 // Length of a robot or powerup name. extern char Powerup_names[MAX_POWERUP_TYPES][POWERUP_NAME_LENGTH]; -extern int Headlight_active_default; // is headlight on when picked up? - typedef struct powerup_type_info { int vclip_num; int hit_sound; diff --git a/main/weapon.c b/main/weapon.c index cbb2963ab..546c8901f 100644 --- a/main/weapon.c +++ b/main/weapon.c @@ -40,6 +40,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #include "newmenu.h" #include "ai.h" #include "args.h" +#include "playsave.h" int POrderList (int num); int SOrderList (int num); @@ -70,9 +71,6 @@ sbyte Primary_weapon, Secondary_weapon; // autoselect ordering -ubyte PrimaryOrder[]={9,8,7,6,5,4,3,2,1,0,255}; -ubyte SecondaryOrder[]={9,8,4,3,1,5,0,255,7,6,2}; - ubyte DefaultPrimaryOrder[]={9,8,7,6,5,4,3,2,1,0,255}; ubyte DefaultSecondaryOrder[]={9,8,4,3,1,5,0,255,7,6,2}; @@ -224,9 +222,9 @@ void InitWeaponOrdering () int i; for (i=0;i GAUGE_HUD_NUMMODES-1) - GameArg.GfxGaugeHudMode = 0; - - GameArg.GfxPersistentDebris = FindArg("-persistentdebris"); GameArg.GfxHiresGFXAvailable = !FindArg("-lowresgraphics"); GameArg.GfxHiresFNTAvailable = !FindArg("-lowresfont"); GameArg.GfxMovieHires = !FindArg( "-lowresmovies" ); @@ -186,10 +179,7 @@ void ReadCmdArgs(void) #ifdef OGL // OpenGL Options - GameArg.OglAlphaEffects = FindArg("-gl_transparency"); GameArg.OglFixedFont = FindArg("-gl_fixedfont"); - GameArg.OglReticle = get_int_arg("-gl_reticle", 0); - GameArg.OglPrShot = FindArg("-gl_prshot"); #endif // Multiplayer Options