2 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
3 SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
4 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
5 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
6 IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
7 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
8 FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
9 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
10 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
11 COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
16 * contains routine(s) to read in the configuration file which contains
17 * game configuration stuff like detail level, sound card, etc
31 #define WIN32_LEAN_AND_MEAN
48 cvar_t Config_digi_type = { "DigiDeviceID8", "0", CVAR_ARCHIVE };
49 cvar_t digi_driver_board_16 = { "DigiDeviceID16", "0", CVAR_ARCHIVE };
50 //cvar_t digi_driver_port = { "DigiPort", "0", CVAR_ARCHIVE };
51 //cvar_t digi_driver_irq = { "DigiIrq", "0", CVAR_ARCHIVE };
52 cvar_t Config_digi_dma = { "DigiDma8", "0", CVAR_ARCHIVE };
53 cvar_t digi_driver_dma_16 = { "DigiDma16", "0", CVAR_ARCHIVE };
54 cvar_t Config_midi_type = { "MidiDeviceID", "0", CVAR_ARCHIVE };
55 //cvar_t digi_midi_port = { "MidiPort", "0", CVAR_ARCHIVE };
57 cvar_t Config_digi_volume = { "DigiVolume", "8", CVAR_ARCHIVE };
58 cvar_t Config_midi_volume = { "MidiVolume", "8", CVAR_ARCHIVE };
59 cvar_t Config_redbook_volume = { "RedbookVolume", "8", CVAR_ARCHIVE };
60 cvar_t Config_detail_level = { "DetailLevel", "4", CVAR_ARCHIVE };
61 cvar_t Config_gamma_level = { "GammaLevel", "0", CVAR_ARCHIVE };
62 cvar_t Config_control_joystick = { "in_joystick", "0", CVAR_ARCHIVE };
63 cvar_t Config_control_mouse = { "in_mouse", "0", CVAR_ARCHIVE };
64 cvar_t Config_channels_reversed = { "StereoReverse", "0", CVAR_ARCHIVE };
65 cvar_t Config_joystick_sensitivity[] = {
66 { "joy_forwardsensitivity", "1.0", CVAR_ARCHIVE },
67 { "joy_pitchsensitivity", "1.0", CVAR_ARCHIVE },
68 { "joy_sidesensitivity", "1.0", CVAR_ARCHIVE },
69 { "joy_yawsensitivity", "1.0", CVAR_ARCHIVE },
70 { "joy_upsensitivity", "1.0", CVAR_ARCHIVE },
71 { "joy_banksensitivity", "1.0", CVAR_ARCHIVE },
73 cvar_t Config_joystick_deadzone[] = {
74 { "joy_forwardthreshold", "0.16", CVAR_ARCHIVE },
75 { "joy_pitchthreshold", "0.08", CVAR_ARCHIVE },
76 { "joy_sidethreshold", "0.08", CVAR_ARCHIVE },
77 { "joy_yawthreshold", "0.08", CVAR_ARCHIVE },
78 { "joy_upthreshold", "0.08", CVAR_ARCHIVE },
79 { "joy_bankthreshold", "0.08", CVAR_ARCHIVE },
81 cvar_t Config_mouse_sensitivity[] = {
82 { "m_forward", "1.0", CVAR_ARCHIVE },
83 { "m_pitch", "1.0", CVAR_ARCHIVE },
84 { "m_side", "1.0", CVAR_ARCHIVE },
85 { "m_yaw", "1.0", CVAR_ARCHIVE },
86 { "m_up", "1.0", CVAR_ARCHIVE },
87 { "m_bank", "1.0", CVAR_ARCHIVE },
89 cvar_t Config_joystick_min = { "JoystickMin", "0,0,0,0", CVAR_ARCHIVE };
90 cvar_t Config_joystick_max = { "JoystickMax", "0,0,0,0", CVAR_ARCHIVE };
91 cvar_t Config_joystick_cen = { "JoystickCen", "0,0,0,0", CVAR_ARCHIVE };
92 cvar_t config_last_player = { "LastPlayer", "", CVAR_ARCHIVE };
93 cvar_t config_last_mission = { "LastMission", "", CVAR_ARCHIVE };
94 cvar_t Config_vr_type = { "VR_type", "0", CVAR_ARCHIVE };
95 cvar_t Config_vr_resolution = { "VR_resolution", "0", CVAR_ARCHIVE };
96 cvar_t Config_vr_tracking = { "VR_tracking", "0", CVAR_ARCHIVE };
97 cvar_t Config_primary_order = { "PrimaryOrder", "", CVAR_ARCHIVE };
98 cvar_t Config_secondary_order = { "SecondaryOrder", "", CVAR_ARCHIVE };
99 cvar_t Config_lifetime_kills = { "LifetimeKills", "0", CVAR_ARCHIVE };
100 cvar_t Config_lifetime_killed = { "LifetimeKilled", "0", CVAR_ARCHIVE };
101 cvar_t Config_lifetime_checksum = { "LifetimeChecksum", "0", CVAR_ARCHIVE };
102 cvar_t Config_resolution_x = { "ResolutionX", "640", CVAR_ARCHIVE };
103 cvar_t Config_resolution_y = { "ResolutionY", "480", CVAR_ARCHIVE };
106 #define _CRYSTAL_LAKE_8_ST 0xe201
107 #define _CRYSTAL_LAKE_16_ST 0xe202
108 #define _AWE32_8_ST 0xe208
109 #define _AWE32_16_ST 0xe209
112 extern sbyte Object_complexity, Object_detail, Wall_detail, Wall_render_depth, Debris_amount, SoundChannels;
114 void set_custom_detail_vars(void);
120 void CrystalLakeWriteMCP( ushort mc_addr, ubyte mc_data )
123 outp( CL_MC0, 0xE2 ); // Write password
124 outp( mc_addr, mc_data ); // Write data
128 ubyte CrystalLakeReadMCP( ushort mc_addr )
132 outp( CL_MC0, 0xE2 ); // Write password
133 value = inp( mc_addr ); // Read data
138 void CrystalLakeSetSB()
141 tmp = CrystalLakeReadMCP( CL_MC1 );
143 CrystalLakeWriteMCP( CL_MC1, tmp );
146 void CrystalLakeSetWSS()
149 tmp = CrystalLakeReadMCP( CL_MC1 );
151 CrystalLakeWriteMCP( CL_MC1, tmp );
154 //MovieHires might be changed by -nohighres, so save a "real" copy of it
156 int save_redbook_enabled;
159 void CheckMovieAttributes()
162 DWORD len, type, val;
165 lres = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Parallax\\Descent II\\1.1\\INSTALL",
167 if (lres == ERROR_SUCCESS) {
169 lres = RegQueryValueEx(hKey, "HIRES", NULL, &type, &val, &len);
170 if (lres == ERROR_SUCCESS) {
171 cvar_setint( &MovieHires, val );
172 logentry("HIRES=%d\n", val);
180 static int config_initialized;
182 static void config_init(void)
186 /* make sure our cvars are registered */
187 cvar_registervariable(&Config_digi_volume);
188 cvar_registervariable(&Config_midi_volume);
189 cvar_registervariable(&Redbook_enabled);
190 cvar_registervariable(&Config_redbook_volume);
191 cvar_registervariable(&Config_channels_reversed);
192 cvar_registervariable(&Config_gamma_level);
193 cvar_registervariable(&Config_detail_level);
194 cvar_registervariable(&Config_control_joystick);
195 cvar_registervariable(&Config_control_mouse);
196 for (i = 0; i < 6; i++)
197 cvar_registervariable(&Config_joystick_sensitivity[i]);
198 for (i = 0; i < 6; i++)
199 cvar_registervariable(&Config_joystick_deadzone[i]);
200 for (i = 0; i < 6; i++)
201 cvar_registervariable(&Config_mouse_sensitivity[i]);
202 cvar_registervariable(&Config_joystick_min);
203 cvar_registervariable(&Config_joystick_cen);
204 cvar_registervariable(&Config_joystick_max);
205 cvar_registervariable(&config_last_player);
206 cvar_registervariable(&config_last_mission);
207 cvar_registervariable(&Config_vr_type);
208 cvar_registervariable(&Config_vr_resolution);
209 cvar_registervariable(&Config_vr_tracking);
210 cvar_registervariable(&MovieHires);
211 cvar_registervariable(&real_guidebot_name);
212 cvar_registervariable(&Config_primary_order);
213 cvar_registervariable(&Config_secondary_order);
214 cvar_registervariable(&Cockpit_3d_view[0]);
215 cvar_registervariable(&Cockpit_3d_view[1]);
216 cvar_registervariable(&Config_lifetime_kills);
217 cvar_registervariable(&Config_lifetime_killed);
218 cvar_registervariable(&Config_lifetime_checksum);
220 cvar_registervariable(&Network_message_macro[0]);
221 cvar_registervariable(&Network_message_macro[1]);
222 cvar_registervariable(&Network_message_macro[2]);
223 cvar_registervariable(&Network_message_macro[3]);
225 cvar_registervariable(&Game_window_w);
226 cvar_registervariable(&Game_window_h);
227 cvar_registervariable(&Player_default_difficulty);
228 cvar_registervariable(&Auto_leveling_on);
229 cvar_registervariable(&Reticle_on);
230 cvar_registervariable(&Cockpit_mode);
231 cvar_registervariable(&Config_resolution_x);
232 cvar_registervariable(&Config_resolution_y);
233 cvar_registervariable(&Missile_view_enabled);
234 cvar_registervariable(&Headlight_active_default);
235 cvar_registervariable(&Guided_in_big_window);
236 cvar_registervariable(&Automap_always_hires);
237 cvar_registervariable(&automap_use_game_res);
238 cvar_registervariable(&menu_use_game_res);
240 config_initialized = 1;
245 static int get_lifetime_checksum (int a,int b)
249 // confusing enough to beat amateur disassemblers? Lets hope so
259 void LoadConfigDefaults(void)
261 cmd_append("bind UP +lookdown; bind PAD8 +lookdown");
262 cmd_append("bind DOWN +lookup; bind PAD2 +lookup");
263 cmd_append("bind LEFT +left; bind PAD4 +left");
264 cmd_append("bind RIGHT +right; bind PAD6 +right");
266 cmd_append("bind LALT +strafe");
267 cmd_append("bind PAD1 +moveleft");
268 cmd_append("bind PAD3 +moveright");
269 cmd_append("bind PAD- +moveup");
270 cmd_append("bind PAD+ +movedown");
272 cmd_append("bind Q +bankleft; bind PAD7 +bankleft");
273 cmd_append("bind E +bankright; bind PAD9 +bankright");
275 cmd_append("bind , +cycle");
276 cmd_append("bind . +cycle2");
278 cmd_append("bind LCTRL +attack; bind RCTRL +attack");
279 cmd_append("bind SPC +attack2");
280 cmd_append("bind F +flare");
281 cmd_append("bind B +bomb");
283 cmd_append("bind R +rearview");
284 cmd_append("bind TAB +automap");
286 cmd_append("bind A +forward");
287 cmd_append("bind Z +back");
288 cmd_append("bind S +afterburner");
290 cmd_append("bind H +headlight");
291 cmd_append("bind T +nrgshield");
293 cmd_append("bind J1B1 +attack");
294 cmd_append("bind J1B2 +attack2");
296 cmd_append("bind MB1 +attack");
297 cmd_append("bind MB2 +attack2");
299 cmd_append("bind ` toggleconsole");
301 cmd_append("bind 1 weapon 1");
302 cmd_append("bind 2 weapon 2");
303 cmd_append("bind 3 weapon 3");
304 cmd_append("bind 4 weapon 4");
305 cmd_append("bind 5 weapon 5");
306 cmd_append("bind 6 weapon 6");
307 cmd_append("bind 7 weapon 7");
308 cmd_append("bind 8 weapon 8");
309 cmd_append("bind 9 weapon 9");
310 cmd_append("bind 0 weapon 0");
312 cmd_append("bind - sizedown");
313 cmd_append("bind \"=\" sizeup");
320 int joy_axis_center[7];
324 if (!config_initialized)
327 cvar_set_cvar( &config_last_player, "" );
329 joy_axis_min[0] = joy_axis_min[1] = joy_axis_min[2] = joy_axis_min[3] = 0;
330 joy_axis_max[0] = joy_axis_max[1] = joy_axis_max[2] = joy_axis_max[3] = 0;
331 joy_axis_center[0] = joy_axis_center[1] = joy_axis_center[2] = joy_axis_center[3] = 0;
333 joy_set_cal_vals(joy_axis_min, joy_axis_center, joy_axis_max);
336 cvar_setint(&digi_driver_board, 0);
337 cvar_setint(&digi_driver_port, 0);
338 cvar_setint(&digi_driver_irq, 0);
339 cvar_setint(&digi_driver_dma, 0);
340 cvar_setint(&digi_midi_type, 0);
341 cvar_setint(&digi_midi_port, 0);
344 cvar_setint( &Config_digi_volume, 8 );
345 cvar_setint( &Config_midi_volume, 8 );
346 cvar_setint( &Config_redbook_volume, 8 );
347 cvar_setint( &Config_control_joystick, 0 );
348 cvar_setint( &Config_control_mouse, 0 );
349 cvar_setint( &Config_channels_reversed, 0);
351 //set these here in case no cfg file
352 SaveMovieHires = MovieHires.intval;
353 save_redbook_enabled = Redbook_enabled.intval;
355 InitWeaponOrdering(); // setup default weapon priorities
356 cvar_set_cvarf(&Config_primary_order, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",
357 PrimaryOrder[0], PrimaryOrder[1], PrimaryOrder[2], PrimaryOrder[3],
358 PrimaryOrder[4], PrimaryOrder[5], PrimaryOrder[6], PrimaryOrder[7],
359 PrimaryOrder[8], PrimaryOrder[9], PrimaryOrder[10]);
360 cvar_set_cvarf(&Config_secondary_order, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",
361 SecondaryOrder[0], SecondaryOrder[1], SecondaryOrder[2], SecondaryOrder[3],
362 SecondaryOrder[4], SecondaryOrder[5], SecondaryOrder[6], SecondaryOrder[7],
363 SecondaryOrder[8], SecondaryOrder[9], SecondaryOrder[10]);
365 cvar_setint( &Cockpit_3d_view[0], CV_NONE );
366 cvar_setint( &Cockpit_3d_view[1], CV_NONE );
368 cvar_setint( &Config_lifetime_kills, 0 );
369 cvar_setint( &Config_lifetime_killed, 0 );
370 cvar_setint( &Config_lifetime_checksum, 0 );
372 // Default taunt macros
374 cvar_set_cvar(&Network_message_macro[0], "Why can't we all just get along?");
375 cvar_set_cvar(&Network_message_macro[1], "Hey, I got a present for ya");
376 cvar_set_cvar(&Network_message_macro[2], "I got a hankerin' for a spankerin'");
377 cvar_set_cvar(&Network_message_macro[3], "This one's headed for Uranus");
380 cvar_setint(&Player_default_difficulty, 1);
381 cvar_setint(&Auto_leveling_on, 1);
383 if (cfexist("descent.cfg"))
384 cmd_append("exec descent.cfg");
386 LoadConfigDefaults();
390 /* TODO: allow cvars to define a callback that will carry out these initialization things on change. */
392 gr_palette_set_gamma( Config_gamma_level.intval );
394 Detail_level = (int)strtol(Config_detail_level.string, NULL, 10);
395 if (Detail_level == NUM_DETAIL_LEVELS - 1) {
396 int count,dummy,oc,od,wd,wrd,da,sc;
398 count = sscanf (Config_detail_level.string, "%d,%d,%d,%d,%d,%d,%d\n",&dummy,&oc,&od,&wd,&wrd,&da,&sc);
401 Object_complexity = oc;
404 Wall_render_depth = wrd;
407 set_custom_detail_vars();
411 sscanf( Config_joystick_min.string, "%d,%d,%d,%d", &joy_axis_min[0], &joy_axis_min[1], &joy_axis_min[2], &joy_axis_min[3] );
412 sscanf( Config_joystick_max.string, "%d,%d,%d,%d", &joy_axis_max[0], &joy_axis_max[1], &joy_axis_max[2], &joy_axis_max[3] );
413 sscanf( Config_joystick_cen.string, "%d,%d,%d,%d", &joy_axis_center[0], &joy_axis_center[1], &joy_axis_center[2], &joy_axis_center[3] );
415 joy_set_cal_vals(joy_axis_min, joy_axis_center, joy_axis_max);
417 i = FindArg( "-volume" );
420 i = atoi( Args[i+1] );
422 if ( i > 100 ) i = 100;
423 cvar_setint( &Config_digi_volume, (i * 8) / 100 );
424 cvar_setint( &Config_midi_volume, (i * 8) / 100 );
425 cvar_setint( &Config_redbook_volume, (i * 8) / 100 );
428 if ( Config_digi_volume.intval > 8 ) cvar_setint( &Config_digi_volume, 8 );
429 if ( Config_midi_volume.intval > 8 ) cvar_setint( &Config_midi_volume, 8 );
430 if ( Config_redbook_volume.intval > 8 ) cvar_setint( &Config_redbook_volume, 8 );
432 digi_set_volume( (Config_digi_volume.intval * 32768) / 8, (Config_midi_volume.intval * 128) / 8 );
436 strncpy(guidebot_name, real_guidebot_name.string, GUIDEBOT_NAME_LEN);
437 guidebot_name[GUIDEBOT_NAME_LEN] = 0;
439 sscanf(Config_primary_order.string, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",
440 (int *)&PrimaryOrder[0], (int *)&PrimaryOrder[1], (int *)&PrimaryOrder[2], (int *)&PrimaryOrder[3],
441 (int *)&PrimaryOrder[4], (int *)&PrimaryOrder[5], (int *)&PrimaryOrder[6], (int *)&PrimaryOrder[7],
442 (int *)&PrimaryOrder[8], (int *)&PrimaryOrder[9], (int *)&PrimaryOrder[10]);
443 sscanf(Config_secondary_order.string, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",
444 (int *)&SecondaryOrder[0], (int *)&SecondaryOrder[1], (int *)&SecondaryOrder[2], (int *)&SecondaryOrder[3],
445 (int *)&SecondaryOrder[4], (int *)&SecondaryOrder[5], (int *)&SecondaryOrder[6], (int *)&SecondaryOrder[7],
446 (int *)&SecondaryOrder[8], (int *)&SecondaryOrder[9], (int *)&SecondaryOrder[10]);
449 Netlife_kills = Config_lifetime_kills.intval;
450 Netlife_killed = Config_lifetime_killed.intval;
452 con_printf(CON_DEBUG, "Reading: lifetime checksum is %d\n", Config_lifetime_checksum.intval);
453 if (Config_lifetime_checksum.intval != get_lifetime_checksum(Netlife_kills, Netlife_killed)) {
454 Netlife_kills = Netlife_killed = 0;
455 Warning("Shame on me\nTrying to cheat eh?");
459 Default_display_mode = SM(Config_resolution_x.intval, Config_resolution_y.intval);
462 printf( "DigiDeviceID: 0x%x\n", digi_driver_board );
463 printf( "DigiPort: 0x%x\n", digi_driver_port.intval );
464 printf( "DigiIrq: 0x%x\n", digi_driver_irq.intval );
465 printf( "DigiDma: 0x%x\n", digi_driver_dma.intval );
466 printf( "MidiDeviceID: 0x%x\n", digi_midi_type.intval );
467 printf( "MidiPort: 0x%x\n", digi_midi_port.intval );
470 cvar_setint( &Config_midi_type, digi_midi_type );
471 cvar_setint( &Config_digi_type, digi_driver_board );
472 cvar_setint( &Config_digi_dma, digi_driver_dma );
476 if (digi_driver_board_16.intval > 0 && !FindArg("-no16bit") && digi_driver_board_16.intval != _GUS_16_ST) {
477 digi_driver_board = digi_driver_board_16.intval;
478 digi_driver_dma = digi_driver_dma_16.intval;
482 //Hack to make some cards look like others, such as
483 //the Crytal Lake look like Microsoft Sound System
484 if ( digi_driver_board == _CRYSTAL_LAKE_8_ST ) {
486 tmp = CrystalLakeReadMCP( CL_MC1 );
488 atexit( CrystalLakeSetSB ); // Restore to SB when done.
490 digi_driver_board = _MICROSOFT_8_ST;
491 } else if ( digi_driver_board == _CRYSTAL_LAKE_16_ST ) {
493 tmp = CrystalLakeReadMCP( CL_MC1 );
495 atexit( CrystalLakeSetSB ); // Restore to SB when done.
497 digi_driver_board = _MICROSOFT_16_ST;
498 } else if ( digi_driver_board == _AWE32_8_ST ) {
499 digi_driver_board = _SB16_8_ST;
500 } else if ( digi_driver_board == _AWE32_16_ST ) {
501 digi_driver_board = _SB16_16_ST;
503 digi_driver_board = digi_driver_board;
506 if (cfexist("descentw.cfg")) {
507 cmd_append("exec descentw.cfg");
510 sscanf( Config_joystick_min.string, "%d,%d,%d,%d,%d,%d,%d", &joy_axis_min[0], &joy_axis_min[1], &joy_axis_min[2], &joy_axis_min[3], &joy_axis_min[4], &joy_axis_min[5], &joy_axis_min[6] );
511 sscanf( Config_joystick_max.string, "%d,%d,%d,%d,%d,%d,%d", &joy_axis_max[0], &joy_axis_max[1], &joy_axis_max[2], &joy_axis_max[3], &joy_axis_max[4], &joy_axis_max[5], &joy_axis_max[6] );
512 sscanf( Config_joystick_cen.string, "%d,%d,%d,%d,%d,%d,%d", &joy_axis_center[0], &joy_axis_center[1], &joy_axis_center[2], &joy_axis_center[3], &joy_axis_center[4], &joy_axis_center[5], &joy_axis_center[6] );
519 int WriteConfigFile()
521 PHYSFS_file *outfile;
523 int joy_axis_center[7];
526 joy_get_cal_vals(joy_axis_min, joy_axis_center, joy_axis_max);
528 if (FindArg("-noredbook"))
529 cvar_setint( &Redbook_enabled, save_redbook_enabled );
531 cvar_setint( &Config_gamma_level, gr_palette_get_gamma() );
533 if (Detail_level == NUM_DETAIL_LEVELS-1)
534 cvar_set_cvarf( &Config_detail_level, "%d,%d,%d,%d,%d,%d,%d", Detail_level,
535 Object_complexity,Object_detail,Wall_detail,Wall_render_depth,Debris_amount,SoundChannels );
537 cvar_setint( &Config_detail_level, Detail_level );
539 cvar_set_cvarf( &Config_joystick_min, "%d,%d,%d,%d", joy_axis_min[0], joy_axis_min[1], joy_axis_min[2], joy_axis_min[3] );
540 cvar_set_cvarf( &Config_joystick_cen, "%d,%d,%d,%d", joy_axis_center[0], joy_axis_center[1], joy_axis_center[2], joy_axis_center[3] );
541 cvar_set_cvarf( &Config_joystick_max, "%d,%d,%d,%d", joy_axis_max[0], joy_axis_max[1], joy_axis_max[2], joy_axis_max[3] );
543 cvar_set_cvar( &config_last_player, Players[Player_num].callsign );
545 cvar_setint( &MovieHires, SaveMovieHires );
547 cvar_set_cvarf(&Config_primary_order, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",
548 PrimaryOrder[0], PrimaryOrder[1], PrimaryOrder[2], PrimaryOrder[3],
549 PrimaryOrder[4], PrimaryOrder[5], PrimaryOrder[6], PrimaryOrder[7],
550 PrimaryOrder[8], PrimaryOrder[9], PrimaryOrder[10]);
551 cvar_set_cvarf(&Config_secondary_order, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",
552 SecondaryOrder[0], SecondaryOrder[1], SecondaryOrder[2], SecondaryOrder[3],
553 SecondaryOrder[4], SecondaryOrder[5], SecondaryOrder[6], SecondaryOrder[7],
554 SecondaryOrder[8], SecondaryOrder[9], SecondaryOrder[10]);
557 cvar_setint(&Config_lifetime_kills, Netlife_kills);
558 cvar_setint(&Config_lifetime_killed, Netlife_killed);
559 cvar_setint(&Config_lifetime_checksum, get_lifetime_checksum(Netlife_kills, Netlife_killed));
560 con_printf(CON_DEBUG, "Writing: Lifetime checksum is %d\n", Config_lifetime_checksum.intval);
563 cvar_setint(&Cockpit_mode, (Cockpit_mode_save != -1)?Cockpit_mode_save:Cockpit_mode.intval); //if have saved mode, write it instead of letterbox/rear view
565 cvar_setint(&Config_resolution_x, SM_W(Current_display_mode));
566 cvar_setint(&Config_resolution_y, SM_H(Current_display_mode));
568 outfile = PHYSFSX_openWriteBuffered("descent.cfg");
572 key_write_bindings(outfile);
573 PHYSFS_close(outfile);
575 if (FindArg("-nohires") || FindArg("-nohighres") || FindArg("-lowresmovies"))
576 cvar_setint( &MovieHires, 0 );
579 CheckMovieAttributes();