/* * Copyright (C) Volition, Inc. 1999. All rights reserved. * * All source code herein is the property of Volition, Inc. You may not sell * or otherwise commercially exploit the source or things you created based on the * source. * */ #include "camera/camera.h" //VIEWER_ZOOM_DEFAULT #include "cmdline/cmdline.h" #include "globalincs/linklist.h" #include "globalincs/systemvars.h" #include "network/multi.h" #include "hud/hudconfig.h" #include "parse/scripting.h" #include "parse/sexp.h" #include "globalincs/version.h" #include "globalincs/pstypes.h" #ifdef _WIN32 #include #elif defined(APPLE_APP) #include #endif #ifdef SCP_UNIX #include "osapi/osapi.h" #endif #include #include #include // variables class cmdline_parm { public: cmdline_parm *next, *prev; char *name; // name of parameter, must start with '-' char char *help; // help text for this parameter bool stacks; // whether this arg stacks with each use or is replaced by newest use (should only be used for strings!!) char *args; // string value for parameter arguements (NULL if no arguements) int name_found; // true if parameter on command line, otherwise false cmdline_parm(char *name, char *help, bool stacks = false); ~cmdline_parm(); int found(); int get_int(); float get_float(); char *str(); }; static cmdline_parm Parm_list(NULL, NULL); static int Parm_list_inited = 0; extern int Show_framerate; // from freespace.cpp enum { // DO NOT CHANGE ANYTHING ABOUT THESE FIRST TWO OR WILL MESS UP THE LAUNCHER EASY_DEFAULT = 1 << 1, EASY_ALL_ON = 1 << 2, EASY_MEM_ON = 1 << 3, EASY_MEM_OFF = 1 << 4, // Add new flags here // Combos EASY_MEM_ALL_ON = EASY_ALL_ON | EASY_MEM_ON, EASY_DEFAULT_MEM = EASY_DEFAULT | EASY_MEM_OFF }; #define BUILD_CAP_OPENAL (1<<0) #define BUILD_CAP_NO_D3D (1<<1) typedef struct { // DO NOT CHANGE THE SIZE OF THIS STRING! char name[32]; } EasyFlag; EasyFlag easy_flags[] = { { "Custom" }, { "Default FS2 (All features off)" }, { "All features on" }, { "High memory usage features on" }, { "High memory usage features off" } }; // DO NOT CHANGE **ANYTHING** ABOUT THIS STRUCTURE AND ITS CONTENT typedef struct { char name[20]; // The actual flag char desc[40]; // The text that will appear in the launcher (unless its blank, other name is shown) bool fso_only; // true if this is a fs2_open only feature int on_flags; // Easy flag which will turn this feature on int off_flags; // Easy flag which will turn this feature off char type[16]; // Launcher uses this to put flags under different headings char web_url[256]; // Link to documentation of feature (please use wiki or somewhere constant) } Flag; // Please group them by type, ie graphics, gameplay etc, maximum 20 different types Flag exe_params[] = { { "-spec", "Enable specular", true, EASY_ALL_ON, EASY_DEFAULT, "Graphics", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-spec", }, { "-glow", "Enable glowmaps", true, EASY_MEM_ALL_ON, EASY_DEFAULT_MEM, "Graphics", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-glow", }, { "-env", "Enable environment maps", true, EASY_MEM_ALL_ON, EASY_DEFAULT_MEM, "Graphics", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-env", }, { "-mipmap", "Enable mipmapping", true, EASY_MEM_ALL_ON, EASY_DEFAULT_MEM, "Graphics", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-mipmap", }, { "-nomotiondebris", "Disable motion debris", true, EASY_ALL_ON, EASY_DEFAULT, "Graphics", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-nomotiondebris",}, { "-noscalevid", "Disable scale-to-window for movies", true, 0, EASY_DEFAULT, "Graphics", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-noscalevid", }, { "-missile_lighting", "Apply Lighting to Missiles" , true, EASY_ALL_ON, EASY_DEFAULT, "Graphics", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-missile_lighting", }, { "-normal", "Enable normal maps", true, EASY_MEM_ALL_ON, EASY_DEFAULT_MEM, "Graphics", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-normal" }, { "-3dshockwave", "Enable 3D shockwaves", true, EASY_ALL_ON, EASY_DEFAULT, "Graphics", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-3dshockwave" }, { "-img2dds", "Compress non-compressed images", true, 0, EASY_DEFAULT, "Game Speed", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-img2dds", }, { "-no_vsync", "Disable vertical sync", true, 0, EASY_DEFAULT, "Game Speed", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-no_vsync", }, { "-cache_bitmaps", "Cache bitmaps between missions", true, 0, EASY_DEFAULT_MEM, "Game Speed", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-cache_bitmaps", }, { "-dualscanlines", "Another pair of scanning lines", true, 0, EASY_DEFAULT, "HUD", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-dualscanlines", }, { "-targetinfo", "Enable info next to target", true, 0, EASY_DEFAULT, "HUD", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-targetinfo", }, { "-orbradar", "Enables 3d radar", true, 0, EASY_DEFAULT, "HUD", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-orbradar", }, { "-rearm_timer", "Enable Rearm/Repair Completion Timer", true, 0, EASY_DEFAULT, "HUD", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-rearm_timer", }, { "-ballistic_gauge", "Enable the analog ballistic ammo gauge", true, 0, EASY_DEFAULT, "HUD", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-ballistic_gauge", }, { "-ship_choice_3d", "Use models for ship selection", true, 0, EASY_DEFAULT, "Gameplay", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-ship_choice_3d", }, { "-weapon_choice_3d", "Use models for weapon selection", true, 0, EASY_DEFAULT, "Gameplay", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-weapon_choice_3d", }, { "-3dwarp", "Enable 3d warp", true, 0, EASY_DEFAULT, "Gameplay", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-3dwarp", }, { "-warp_flash", "Enable flash upon warp", true, 0, EASY_DEFAULT, "Gameplay", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-warp_flash", }, { "-no_ap_interrupt", "Disable interrupting autopilot", true, 0, EASY_DEFAULT, "Gameplay", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-no_ap_interrupt", }, { "-tbp", "Toggle features for The Babylon Project", true, 0, EASY_DEFAULT, "Gameplay", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-tbp", }, // TBP warp effects -Et1 { "-wcsaga", "Toggle features for Wing Commander Saga", true, 0, EASY_DEFAULT, "Gameplay", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-wcsaga", }, { "-snd_preload", "Preload mission game sounds", true, EASY_MEM_ALL_ON, EASY_DEFAULT_MEM, "Audio", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-snd_preload", }, { "-nosound", "Disable sound and music", false, 0, EASY_DEFAULT, "Audio", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-nosound", }, { "-nomusic", "Disable music", false, 0, EASY_DEFAULT, "Audio", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-nomusic", }, { "-standalone", "Run as Stand Alone Server", false, 0, EASY_DEFAULT, "Multiplayer", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-standalone", }, { "-startgame", "Skip mainhall and start hosting", false, 0, EASY_DEFAULT, "Multiplayer", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-startgame", }, { "-closed", "Start hosted server as closed", false, 0, EASY_DEFAULT, "Multiplayer", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-closed", }, { "-restricted", "Host confirms join requests", false, 0, EASY_DEFAULT, "Multiplayer", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-restricted", }, { "-multilog", "", false, 0, EASY_DEFAULT, "Multiplayer", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-multilog", }, { "-clientdamage", "", false, 0, EASY_DEFAULT, "Multiplayer", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-clientdamage", }, { "-mpnoreturn", "Disables flight deck option", true, 0, EASY_DEFAULT, "Multiplayer", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-mpnoreturn", }, { "-oldfire", "", false, 0, EASY_DEFAULT, "Troubleshoot", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-oldfire", }, { "-nohtl", "Software mode (very slow)", true, 0, EASY_DEFAULT, "Troubleshoot", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-nohtl", }, { "-no_set_gamma", "Disable setting of gamma", true, 0, EASY_DEFAULT, "Troubleshoot", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-no_set_gamma", }, { "-nomovies", "Disable video playback", true, 0, EASY_DEFAULT, "Troubleshoot", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-nomovies", }, { "-noparseerrors", "Disable parsing errors", true, 0, EASY_DEFAULT, "Troubleshoot", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-noparseerrors", }, { "-safeloading", "", true, 0, EASY_DEFAULT, "Troubleshoot", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-safeloading", }, { "-query_speech", "Does this build have speech?", true, 0, EASY_DEFAULT, "Troubleshoot", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-query_speech", }, { "-d3d_bad_tsys", "Enable inefficient textures", true, 0, EASY_DEFAULT, "Troubleshoot", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-d3d_bad_tsys", }, { "-novbo", "Disable OpenGL VBO", true, 0, EASY_DEFAULT, "Troubleshoot", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-novbo", }, { "-noibx", "Don't use cached index buffers (IBX)", true, 0, EASY_DEFAULT, "Troubleshoot", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-noibx", }, { "-loadallweps", "Load all weapons, even those not used", true, 0, EASY_DEFAULT, "Troubleshoot", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-loadallweps", }, { "-disable_fbo", "Disable OpenGL RenderTargets", true, 0, EASY_DEFAULT, "Troubleshoot", "", }, { "-no_glsl", "Disable GLSL (shader) support", true, 0, EASY_DEFAULT, "Troubleshoot", "", }, { "-ati_swap", "Fix Color issues on some ATI cards", true, 0, EASY_DEFAULT, "Troubleshoot", "http://scp.indiegames.us/mantis/view.php?id=1669", }, { "-ingame_join", "Allows ingame joining", true, 0, EASY_DEFAULT, "Experimental", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-ingame_join", }, { "-voicer", "Voice recognition", true, 0, EASY_DEFAULT, "Experimental", "", }, { "-fps", "Show frames per second on HUD", false, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-fps", }, { "-pos", "Show position of camera", false, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-pos", }, { "-window", "Run in window", true, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-window", }, { "-res", "Run at specified resolution", true, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-res", }, { "-timerbar", "", true, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-timerbar", }, { "-stats", "Show statistics", true, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-stats", }, { "-coords", "Show coordinates", false, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-coords", }, { "-show_mem_usage", "Show memory usage", true, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-show_mem_usage", }, { "-pofspew", "", false, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-pofspew", }, { "-tablecrcs", "", true, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-tablecrcs", }, { "-missioncrcs", "", true, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-missioncrcs", }, { "-dis_collisions", "Disable collisions", true, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-dis_collisions", }, { "-dis_weapons", "Disable weapon rendering", true, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-dis_weapons", }, { "-output_sexps", "Outputs SEXPs to sexps.html", true, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-output_sexps", }, { "-output_scripting", "Outputs scripting to scripting.html", true, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-output_scripting", }, { "-save_render_target", "Save render targets to file", true, 0, EASY_DEFAULT, "Dev Tool", "", }, { "-debug_window", "Display debug window", true, 0, EASY_DEFAULT, "Dev Tool", "", }, { "-verify_vps", "Spew VP crcs to vp_crcs.txt", true, 0, EASY_DEFAULT, "Dev Tool", "", }, #ifdef SCP_UNIX { "-nograb", "Don't grab mouse/keyboard in a window", true, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-nograb", }, #endif }; // here are the command line parameters that we will be using for FreeSpace // RETAIL options ---------------------------------------------- cmdline_parm connect_arg("-connect", NULL); // Cmdline_connect_addr cmdline_parm gamename_arg("-gamename", NULL); // Cmdline_game_name cmdline_parm gamepassword_arg("-password", NULL); // Cmdline_game_password cmdline_parm allowabove_arg("-allowabove", NULL); // Cmdline_rank_above cmdline_parm allowbelow_arg("-allowbelow", NULL); // Cmdline_rank_below cmdline_parm standalone_arg("-standalone", NULL); cmdline_parm nosound_arg("-nosound", NULL); // Cmdline_freespace_no_sound cmdline_parm nomusic_arg("-nomusic", NULL); // Cmdline_freespace_no_music cmdline_parm startgame_arg("-startgame", NULL); // Cmdline_start_netgame cmdline_parm gameclosed_arg("-closed", NULL); // Cmdline_closed_game cmdline_parm gamerestricted_arg("-restricted", NULL); // Cmdline_restricted_game cmdline_parm port_arg("-port", NULL); cmdline_parm multilog_arg("-multilog", NULL); // Cmdline_multi_log cmdline_parm server_firing_arg("-oldfire", NULL); // Cmdline_server_firing cmdline_parm client_dodamage("-clientdamage", NULL); // Cmdline_client_dodamage cmdline_parm pof_spew("-pofspew", NULL); // Cmdline_spew_pof_info cmdline_parm mouse_coords("-coords", NULL); // Cmdline_mouse_coords cmdline_parm timeout("-timeout", NULL); // Cmdline_timeout cmdline_parm bit32_arg("-32bit", NULL); // (only here for retail compatibility reasons, doesn't actually do anything) char *Cmdline_connect_addr = NULL; char *Cmdline_game_name = NULL; char *Cmdline_game_password = NULL; char *Cmdline_rank_above = NULL; char *Cmdline_rank_below = NULL; int Cmdline_cd_check = 1; int Cmdline_client_dodamage = 0; int Cmdline_closed_game = 0; int Cmdline_freespace_no_music = 0; int Cmdline_freespace_no_sound = 0; int Cmdline_gimme_all_medals = 0; int Cmdline_mouse_coords = 0; int Cmdline_multi_log = 0; int Cmdline_multi_stream_chat_to_file = 0; int Cmdline_network_port = -1; int Cmdline_restricted_game = 0; int Cmdline_server_firing = 0; int Cmdline_spew_pof_info = 0; int Cmdline_start_netgame = 0; int Cmdline_timeout = -1; int Cmdline_use_last_pilot = 0; // FSO options ------------------------------------------------- // Graphics related cmdline_parm spec_exp_arg("-spec_exp", NULL); // comand line FOV -Bobboau cmdline_parm clip_dist_arg("-clipdist", NULL); // Cmdline_clip_dist cmdline_parm fov_arg("-fov", NULL); // Cmdline_fov -- comand line FOV -Bobboau cmdline_parm ogl_spec_arg("-ogl_spec", NULL); // Cmdline_ogl_spec cmdline_parm spec_static_arg("-spec_static", NULL); cmdline_parm spec_point_arg("-spec_point", NULL); cmdline_parm spec_tube_arg("-spec_tube", NULL); cmdline_parm ambient_factor_arg("-ambient_factor", NULL); // Cmdline_ambient_factor cmdline_parm cell_arg("-cell", NULL); // Cmdline_cell cmdline_parm decals("-decals", NULL); // Cmdline_decals cmdline_parm env("-env", NULL); // Cmdline_env cmdline_parm mipmap_arg("-mipmap", NULL); // Cmdline_mipmap cmdline_parm missile_lighting_arg("-missile_lighting", NULL); // Cmdline_missile_lighting cmdline_parm glow_arg("-glow", NULL); // Cmdline_glow -- use Bobs glow code cmdline_parm nomotiondebris_arg("-nomotiondebris", NULL); // Cmdline_nomotiondebris -- Removes those ugly floating rocks -C cmdline_parm noscalevid_arg("-noscalevid", NULL); // Cmdline_noscalevid -- disable video scaling that fits to window cmdline_parm spec_arg("-spec", NULL); // Cmdline_spec -- use specular highlighting -Sticks cmdline_parm noemissive_arg("-no_emissive_light", NULL); // Cmdline_no_emissive -- don't use emissive light in OGL cmdline_parm normal_arg("-normal", NULL); // Cmdline_normal -- enable normal mapping cmdline_parm height_arg("-height", NULL); // Cmdline_height -- enable support for parallax mapping cmdline_parm enable_3d_shockwave_arg("-3dshockwave", NULL); float Cmdline_clip_dist = Default_min_draw_distance; float Cmdline_fov = 0.75f; float Cmdline_ogl_spec = 80.0f; int Cmdline_ambient_factor = 128; int Cmdline_cell = 0; int Cmdline_decals = 0; int Cmdline_env = 0; int Cmdline_mipmap = 0; int Cmdline_missile_lighting = 0; int Cmdline_glow = 0; int Cmdline_nomotiondebris = 0; int Cmdline_noscalevid = 0; int Cmdline_spec = 0; int Cmdline_no_emissive = 0; int Cmdline_normal = 0; int Cmdline_height = 0; int Cmdline_enable_3d_shockwave = 0; // Game Speed related cmdline_parm cache_bitmaps_arg("-cache_bitmaps", NULL); // Cmdline_cache_bitmaps cmdline_parm img2dds_arg("-img2dds", NULL); // Cmdline_img2dds cmdline_parm no_fpscap("-no_fps_capping", NULL); // Cmdline_NoFPSCap cmdline_parm no_vsync_arg("-no_vsync", NULL); // Cmdline_no_vsync int Cmdline_cache_bitmaps = 0; // caching of bitmaps between missions (faster loads, can hit swap on reload with <512 Meg RAM though) - taylor int Cmdline_img2dds = 0; int Cmdline_NoFPSCap = 0; // Disable FPS capping - kazan int Cmdline_no_vsync = 0; // HUD related cmdline_parm ballistic_gauge("-ballistic_gauge", NULL); // Cmdline_ballistic_gauge cmdline_parm dualscanlines_arg("-dualscanlines", NULL); // Cmdline_dualscanlines -- Change to phreaks options including new targetting code cmdline_parm orb_radar("-orbradar", NULL); // Cmdline_orb_radar cmdline_parm rearm_timer_arg("-rearm_timer", NULL); // Cmdline_rearm_timer cmdline_parm targetinfo_arg("-targetinfo", NULL); // Cmdline_targetinfo -- Adds ship name/class to right of target box -C int Cmdline_ballistic_gauge = 0; // WMCoolmon's gauge thingy int Cmdline_dualscanlines = 0; int Cmdline_orb_radar = 0; int Cmdline_rearm_timer = 0; int Cmdline_targetinfo = 0; // Gameplay related cmdline_parm use_3dwarp("-3dwarp", NULL); // Cmdline_3dwarp cmdline_parm ship_choice_3d_arg("-ship_choice_3d", NULL); // Cmdline_ship_choice_3d cmdline_parm weapon_choice_3d_arg("-weapon_choice_3d", NULL); // Cmdline_weapon_choice_3d cmdline_parm use_warp_flash("-warp_flash", NULL); // Cmdline_warp_flash cmdline_parm allow_autpilot_interrupt("-no_ap_interrupt", NULL); // Cmdline_warp_flash int Cmdline_3dwarp = 0; int Cmdline_ship_choice_3d = 0; int Cmdline_weapon_choice_3d = 0; int Cmdline_warp_flash = 0; int Cmdline_autopilot_interruptable = 1; // Audio related cmdline_parm query_speech_arg("-query_speech", NULL); // Cmdline_query_speech cmdline_parm snd_preload_arg("-snd_preload", NULL); // Cmdline_snd_preload cmdline_parm voice_recognition_arg("-voicer", NULL); // Cmdline_voice_recognition int Cmdline_query_speech = 0; int Cmdline_snd_preload = 0; // preload game sounds during mission load int Cmdline_voice_recognition = 0; // MOD related cmdline_parm mod_arg("-mod", NULL, true); // Cmdline_mod -- DTP modsupport cmdline_parm tbp("-tbp", NULL); // Cmdline_tbp -- TBP warp effects -Et1 cmdline_parm wcsaga("-wcsaga", NULL); // Cmdline_wcsaga char *Cmdline_mod = NULL; //DTP for mod arguement int Cmdline_tbp = 0; int Cmdline_wcsaga = 0; // Multiplayer/Network related cmdline_parm almission_arg("-almission", NULL); // Cmdline_almission -- DTP for autoload Multi mission cmdline_parm ingamejoin_arg("-ingame_join", NULL); // Cmdline_ingamejoin cmdline_parm mpnoreturn_arg("-mpnoreturn", NULL); // Cmdline_mpnoreturn -- Removes 'Return to Flight Deck' in respawn dialog -C cmdline_parm missioncrcspew_arg("-missioncrcs", NULL); // Cmdline_spew_mission_crcs cmdline_parm tablecrcspew_arg("-tablecrcs", NULL); // Cmdline_spew_table_crcs cmdline_parm objupd_arg("-cap_object_update", NULL); char *Cmdline_almission = NULL; //DTP for autoload multi mission. int Cmdline_ingamejoin = 0; int Cmdline_mpnoreturn = 0; char *Cmdline_spew_mission_crcs = NULL; char *Cmdline_spew_table_crcs = NULL; int Cmdline_objupd = 3; // client object updates on LAN by default // Troubleshooting cmdline_parm d3d_lesstmem_arg("-d3d_bad_tsys", NULL); // Cmdline_d3d_lesstmem cmdline_parm loadallweapons_arg("-loadallweps", NULL); // Cmdline_load_all_weapons cmdline_parm htl_arg("-nohtl", NULL); // Cmdline_nohtl -- don't use HT&L cmdline_parm noibx_arg("-noibx", NULL); // Cmdline_noibx cmdline_parm nomovies_arg("-nomovies", NULL); // Cmdline_nomovies -- Allows video streaming cmdline_parm no_set_gamma_arg("-no_set_gamma", NULL); // Cmdline_no_set_gamma cmdline_parm no_vbo_arg("-novbo", NULL); // Cmdline_novbo cmdline_parm safeloading_arg("-safeloading", NULL); // Cmdline_safeloading -- Uses old loading method -C cmdline_parm no_fbo_arg("-disable_fbo", NULL); // Cmdline_no_fbo cmdline_parm noglsl_arg("-no_glsl", NULL); // Cmdline_noglsl -- disable GLSL support in OpenGL cmdline_parm atiswap_arg("-ati_swap", NULL); // Cmdline_atiswap - Fix ATI color swap issue for screenshots. int Cmdline_d3d_lesstmem = 0; int Cmdline_load_all_weapons = 0; int Cmdline_nohtl = 0; int Cmdline_noibx = 0; int Cmdline_nomovies = 0; int Cmdline_no_set_gamma = 0; int Cmdline_novbo = 0; // turn off OGL VBO support, troubleshooting int Cmdline_safeloading = 0; int Cmdline_no_fbo = 0; int Cmdline_noglsl = 0; int Cmdline_ati_color_swap = 0; // Developer/Testing related cmdline_parm start_mission_arg("-start_mission", NULL); // Cmdline_start_mission cmdline_parm dis_collisions("-dis_collisions", NULL); // Cmdline_dis_collisions cmdline_parm dis_weapons("-dis_weapons", NULL); // Cmdline_dis_weapons cmdline_parm noparseerrors_arg("-noparseerrors", NULL); // Cmdline_noparseerrors -- turns off parsing errors -C cmdline_parm nowarn_arg("-no_warn", NULL); // Cmdline_nowarn cmdline_parm fps_arg("-fps", NULL); // Cmdline_show_fps cmdline_parm show_mem_usage_arg("-show_mem_usage", NULL); // Cmdline_show_mem_usage cmdline_parm pos_arg("-pos", NULL); // Cmdline_show_pos cmdline_parm stats_arg("-stats", NULL); // Cmdline_show_stats cmdline_parm timerbar_arg("-timerbar", NULL); // Cmdline_timerbar cmdline_parm save_render_targets_arg("-save_render_target", NULL); // Cmdline_save_render_targets cmdline_parm debug_window_arg("-debug_window", NULL); // Cmdline_debug_window cmdline_parm window_arg("-window", NULL); // Cmdline_window cmdline_parm res_arg("-res", NULL); // Cmdline_lores cmdline_parm verify_vps_arg("-verify_vps", NULL); // Cmdline_verify_vps -- spew VP crcs to vp_crcs.txt #ifdef SCP_UNIX cmdline_parm no_grab("-nograb", NULL); // Cmdline_no_grab #endif char *Cmdline_start_mission = NULL; int Cmdline_dis_collisions = 0; int Cmdline_dis_weapons = 0; int Cmdline_noparseerrors = 0; int Cmdline_nowarn = 0; // turn warnings off in FRED int Cmdline_show_mem_usage = 0; int Cmdline_show_pos = 0; int Cmdline_show_stats = 0; int Cmdline_timerbar = 0; int Cmdline_save_render_targets = 0; int Cmdline_debug_window = 0; int Cmdline_window = 0; char *Cmdline_res = 0; int Cmdline_verify_vps = 0; #ifdef SCP_UNIX int Cmdline_no_grab = 0; #endif // Other cmdline_parm get_flags_arg("-get_flags", NULL); cmdline_parm output_sexp_arg("-output_sexps", NULL); //WMC - outputs all SEXPs to sexps.html cmdline_parm output_scripting_arg("-output_scripting", NULL); //WMC #ifndef NDEBUG // NOTE: this assumes that os_init() has already been called but isn't a fatal error if it hasn't void cmdline_debug_print_cmdline() { cmdline_parm *parmp; int found = 0; mprintf(("Passed cmdline options:")); for (parmp = GET_FIRST(&Parm_list); parmp !=END_OF_LIST(&Parm_list); parmp = GET_NEXT(parmp) ) { if ( parmp->name_found ) { if ( parmp->args != NULL ) { mprintf(("\n %s %s", parmp->name, parmp->args)); } else { mprintf(("\n %s", parmp->name)); } found++; } } if ( !found ) mprintf(("\n ")); mprintf(("\n")); } #endif // Return true if this character is an extra char (white space and quotes) int is_extra_space(char ch) { return ((ch == ' ') || (ch == '\t') || (ch == 0x0a) || (ch == '\'') || (ch == '\"')); } // eliminates all leading and trailing extra chars from a string. Returns pointer passed in. char *drop_extra_chars(char *str) { int s, e; s = 0; while (str[s] && is_extra_space(str[s])) s++; e = strlen(str) - 1; // we already account for NULL later on, so the -1 is here to make // sure we do our math without taking it into consideration if (e < 0) e = 0; while (e > s) { if (!is_extra_space(str[e])){ break; } e--; } if (e >= s && e !=0 ){ memmove(str, str + s, e - s + 1); } str[e - s + 1] = 0; return str; } // internal function - copy the value for a parameter agruement into the cmdline_parm arg field void parm_stuff_args(cmdline_parm *parm, char *cmdline) { char buffer[1024]; memset(buffer, 0, 1024); char *dest = buffer; char *saved_args = NULL; cmdline += strlen(parm->name); while ((*cmdline != '\0') && strncmp(cmdline, " -", 2)) { *dest++ = *cmdline++; } drop_extra_chars(buffer); // mwa 9/14/98 -- made it so that newer command line arguments found will overwrite the old arguments // taylor 7/25/06 -- made it so that you can stack newer arguments if that option should support stacking if ( parm->args != NULL ) { if (parm->stacks) { saved_args = parm->args; } else { delete[] parm->args; } parm->args = NULL; } int size = strlen(buffer) + 1; if (saved_args != NULL) size += (strlen(saved_args) + 1); // an ',' is used as a separator when combining, so be sure to account for it if (size > 0) { parm->args = new char[size]; memset(parm->args, 0, size); if (saved_args != NULL) { // saved args go first, then new arg strcpy(parm->args, saved_args); // add a separator too, so that we can tell the args apart strcat(parm->args, ","); // now the new arg strcat(parm->args, buffer); } else { strcpy(parm->args, buffer); } } if (saved_args != NULL) delete[] saved_args; } // internal function - parse the command line, extracting parameter arguements if they exist // cmdline - command line string passed to the application void os_parse_parms(char *cmdline) { // locate command line parameters cmdline_parm *parmp; char *cmdline_offset = NULL; size_t get_new_offset = 0; for (parmp = GET_FIRST(&Parm_list); parmp != END_OF_LIST(&Parm_list); parmp = GET_NEXT(parmp)) { // continue processing every option on the line to make sure that we account for every listing of each option do { // while going through the cmdline make sure to grab only the option that we are // looking for, but if one similar then keep searching for the exact match while (true) { cmdline_offset = strstr(cmdline + get_new_offset, parmp->name); if ( !cmdline_offset ) break; // the new offset should be our currently location + the length of the current option get_new_offset = (strlen(cmdline) - strlen(cmdline_offset) + strlen(parmp->name)); if ( (*(cmdline_offset + strlen(parmp->name))) && !is_extra_space(*(cmdline_offset + strlen(parmp->name))) ) { // we found a similar, but not exact, match for this option, continue checking for the correct one } else { // we found what we were looking for so break out and process it break; } } if (cmdline_offset) { parmp->name_found = 1; parm_stuff_args(parmp, cmdline_offset); } } while (cmdline_offset); // reset the offset for the next param that we will look for get_new_offset = 0; cmdline_offset = NULL; } } // validate the command line parameters. Display an error if an unrecognized parameter is located. void os_validate_parms(char *cmdline) { cmdline_parm *parmp; char seps[] = " ,\t\n"; char *token; int parm_found; token = strtok(cmdline, seps); while(token != NULL) { if (token[0] == '-') { parm_found = 0; for (parmp = GET_FIRST(&Parm_list); parmp !=END_OF_LIST(&Parm_list); parmp = GET_NEXT(parmp) ) { if (!stricmp(parmp->name, token)) { parm_found = 1; break; } } if (parm_found == 0) { #ifdef _WIN32 // Changed this to MessageBox, this is a user error not a developer char buffer[128]; sprintf(buffer,"Unrecogzined command line parameter %s, continue?",token); if( MessageBox(NULL, buffer, "Warning", MB_OKCANCEL | MB_ICONQUESTION) == IDCANCEL) exit(0); #elif defined(APPLE_APP) CFStringRef message; char buffer[128]; CFOptionFlags result; snprintf(buffer, 128, "Unrecognized command line parameter, \"%s\", continue?", token); message = CFStringCreateWithCString(NULL, buffer, kCFStringEncodingASCII); if ( CFUserNotificationDisplayAlert(0, kCFUserNotificationPlainAlertLevel, NULL, NULL, NULL, CFSTR("Unknown Command"), message, NULL, CFSTR("Quit"), NULL, &result) ) exit(0); if (result != kCFUserNotificationDefaultResponse) exit(0); #else // if we got a -help, --help, -h, or -? then show the help text, otherwise show unknown option if ( !stricmp(token, "-help") || !stricmp(token, "--help") || !stricmp(token, "-h") || !stricmp(token, "-?") ) { printf("FS2 Open: The Source Code Project, version %i.%i.%i\n", FS_VERSION_MAJOR, FS_VERSION_MINOR, FS_VERSION_BUILD); printf("Website: http://scp.indiegames.us\n"); printf("Mantis (bug reporting): http://scp.indiegames.us/mantis/\n\n"); printf("Usage: fs2_open [options]\n"); // not the prettiest thing but the job gets done static const int STR_SIZE = 25; // max len of exe_params.name + 5 spaces int p=0, sp=0; while (exe_params[p].name[0] == '-') { sp = strlen(exe_params[p].name); printf(" [ %s ]%*s- %s\n", exe_params[p].name, (STR_SIZE - sp - 1), NOX(" "), exe_params[p].desc); p++; } printf("\n"); exit(0); } else { printf("Unrecognized command line parameter \"%s\". Ignoring...\n", token); } #endif } } token = strtok(NULL, seps); } } // Call once to initialize the command line system // // cmdline - command line string passed to the application void os_init_cmdline(char *cmdline) { FILE *fp; // read the cmdline.cfg file from the data folder, and pass the command line arguments to // the the parse_parms and validate_parms line. Read these first so anything actually on // the command line will take precedence #ifdef _WIN32 fp = fopen("data\\cmdline_fso.cfg", "rt"); #elif defined(APPLE_APP) extern char full_path[1024]; char *c = NULL, data_path[1024]; c = strstr(full_path, ".app"); if ( c != NULL ) { while (c && (*c != '/')) c--; *c = '\0'; } snprintf(data_path, 1024, "%s/data/cmdline_fso.cfg", full_path); fp = fopen(data_path, "rt"); #else fp = fopen("data/cmdline_fso.cfg", "rt"); #endif // if the file exists, get a single line, and deal with it if ( fp ) { char buf[1024], *p; fgets(buf, 1024, fp); // replace the newline character with a NULL if ( (p = strrchr(buf, '\n')) != NULL ) { *p = '\0'; } #ifdef SCP_UNIX // append a space for the os_parse_parms() check strcat(buf, " "); #endif os_parse_parms(buf); os_validate_parms(buf); fclose(fp); } #ifdef SCP_UNIX // parse user specific cmdline config file (will supersede options in global file) char cmdname[MAX_PATH]; snprintf(cmdname, MAX_PATH, "%s/%s/data/cmdline_fso.cfg", detect_home(), Osreg_user_dir); fp = fopen(cmdname, "rt"); if ( !fp ) { // try for non "_fso", for older code versions snprintf(cmdname, MAX_PATH, "%s/%s/data/cmdline.cfg", detect_home(), Osreg_user_dir); fp = fopen(cmdname, "rt"); } // if the file exists, get a single line, and deal with it if ( fp ) { char buf[1024], *p; fgets(buf, 1024, fp); // replace the newline character with a NULL if ( (p = strrchr(buf, '\n')) != NULL ) { *p = '\0'; } // append a space for the os_parse_parms() check strcat(buf, " "); os_parse_parms(buf); os_validate_parms(buf); fclose(fp); } #endif os_parse_parms(cmdline); os_validate_parms(cmdline); } // arg constructor // name_ - name of the parameter, must start with '-' character // help_ - help text for this parameter cmdline_parm::cmdline_parm(char *name_, char *help_, bool stacks_) { name = name_; help = help_; stacks = stacks_; args = NULL; name_found = 0; if (Parm_list_inited == 0) { list_init(&Parm_list); Parm_list_inited = 1; } if (name != NULL) { list_append(&Parm_list, this); } } // destructor - frees any allocated memory cmdline_parm::~cmdline_parm() { #ifndef FRED if (args) { delete [] args; args = NULL; } #endif } // returns - true if the parameter exists on the command line, otherwise false int cmdline_parm::found() { return name_found; } // returns - the interger representation for the parameter arguement int cmdline_parm::get_int() { Assert(args); int offset = 0; if (stacks) { // first off, DON'T STACK NON-STRINGS!! Int3(); // secondly, we still need to get it right for the users sake... char *moron = strstr(args, ","); if ( moron && ((strlen(moron) + 1) < strlen(args)) ) { // we get the last arg, since it's the newest one offset = strlen(args) - strlen(moron) + 1; } } return atoi(args+offset); } // returns - the float representation for the parameter arguement float cmdline_parm::get_float() { Assert(args!=NULL); int offset = 0; if (stacks) { // first off, DON'T STACK NON-STRINGS!! Int3(); // secondly, we still need to get it right for the users sake char *moron = strstr(args, ","); if ( moron && ((strlen(moron) + 1) < strlen(args)) ) { // we get the last arg, since it's the newest one offset = strlen(args) - strlen(moron) + 1; } } return (float)atof(args+offset); } // returns - the string value for the parameter arguement char *cmdline_parm::str() { Assert(args); return args; } // external entry point into this modules bool SetCmdlineParams() // Sets externed variables used for communication cmdline information { //getcwd(FreeSpace_Directory, 256); // set the directory to our fs2 root if (no_fpscap.found()) { Cmdline_NoFPSCap = 1; } if(loadallweapons_arg.found()) { Cmdline_load_all_weapons = 1; } if(voice_recognition_arg.found()) { Cmdline_voice_recognition = 1; } if (nowarn_arg.found()) { Cmdline_nowarn = 1; } /* karajorma - let's just use -nohtl instead if (fred2_htl_arg.found()) { Cmdline_FRED2_htl = 1; }*/ if (timerbar_arg.found()) { Cmdline_timerbar = 1; } if ( missioncrcspew_arg.found() ) { Cmdline_spew_mission_crcs = missioncrcspew_arg.str(); // strip off blank space at end if it's there if ( Cmdline_spew_mission_crcs[strlen(Cmdline_spew_mission_crcs)-1] == ' ' ) { Cmdline_spew_mission_crcs[strlen(Cmdline_spew_mission_crcs)-1] = '\0'; } } if ( tablecrcspew_arg.found() ) { Cmdline_spew_table_crcs = tablecrcspew_arg.str(); // strip off blank space at end if it's there if ( Cmdline_spew_table_crcs[strlen(Cmdline_spew_table_crcs)-1] == ' ' ) { Cmdline_spew_table_crcs[strlen(Cmdline_spew_table_crcs)-1] = '\0'; } } // is this a standalone server?? if (standalone_arg.found()) { Is_standalone = 1; } // object update control if(objupd_arg.found()){ Cmdline_objupd = objupd_arg.get_int(); if (Cmdline_objupd < 0) { Cmdline_objupd = 0; } if (Cmdline_objupd > 3) { Cmdline_objupd = 3; } } if(mpnoreturn_arg.found()) { Cmdline_mpnoreturn = 1; } // run with no sound if ( nosound_arg.found() ) { Cmdline_freespace_no_sound = 1; // and since music is automatically unusable... Cmdline_freespace_no_music = 1; } // run with no music if ( nomusic_arg.found() ) { Cmdline_freespace_no_music = 1; } // should we start a network game if ( startgame_arg.found() ) { Cmdline_use_last_pilot = 1; Cmdline_start_netgame = 1; } // closed network game if ( gameclosed_arg.found() ) { Cmdline_closed_game = 1; } // restircted network game if ( gamerestricted_arg.found() ) { Cmdline_restricted_game = 1; } // get the name of the network game if ( gamename_arg.found() ) { Cmdline_game_name = gamename_arg.str(); // be sure that this string fits in our limits if ( strlen(Cmdline_game_name) > MAX_GAMENAME_LEN ) { Cmdline_game_name[MAX_GAMENAME_LEN-1] = '\0'; } } // get the password for a pssword game if ( gamepassword_arg.found() ) { Cmdline_game_password = gamepassword_arg.str(); // be sure that this string fits in our limits if ( strlen(Cmdline_game_name) > MAX_PASSWD_LEN ) { Cmdline_game_name[MAX_PASSWD_LEN-1] = '\0'; } } // set the rank above/below arguments if ( allowabove_arg.found() ) { Cmdline_rank_above = allowabove_arg.str(); } if ( allowbelow_arg.found() ) { Cmdline_rank_below = allowbelow_arg.str(); } // get the port number for games if ( port_arg.found() ) { Cmdline_network_port = port_arg.get_int(); } // the connect argument specifies to join a game at this particular address if ( connect_arg.found() ) { Cmdline_use_last_pilot = 1; Cmdline_connect_addr = connect_arg.str(); } // see if the multilog flag was set if ( multilog_arg.found() ){ Cmdline_multi_log = 1; } // maybe use old-school server-side firing if (server_firing_arg.found() ){ Cmdline_server_firing = 1; } // maybe use old-school client damage if(client_dodamage.found()){ Cmdline_client_dodamage = 1; } // spew pof info if(pof_spew.found()){ Cmdline_spew_pof_info = 1; } // mouse coords if(mouse_coords.found()){ Cmdline_mouse_coords = 1; } // net timeout if(timeout.found()){ Cmdline_timeout = timeout.get_int(); } // d3d windowed if(window_arg.found()){ Cmdline_window = 1; } if(res_arg.found()){ Cmdline_res = res_arg.str(); } if(almission_arg.found()){//DTP for autoload mission // developer oritentated Cmdline_almission = almission_arg.str(); Cmdline_use_last_pilot = 1; Cmdline_start_netgame = 1; } if(dualscanlines_arg.found() ) { Cmdline_dualscanlines = 1; } if(targetinfo_arg.found()) { Cmdline_targetinfo = 1; } if(nomovies_arg.found() ) { Cmdline_nomovies = 1; } if ( noscalevid_arg.found() ) { Cmdline_noscalevid = 1; } if(noparseerrors_arg.found()) { Cmdline_noparseerrors = 1; } if(mod_arg.found() ) { Cmdline_mod = mod_arg.str(); // be sure that this string fits in our limits /* This has to be disabled because the max size is going to be mods*MAX_FILENAME_LEN if ( strlen(Cmdline_mod) > MAX_FILENAME_LEN ) { Cmdline_mod[MAX_FILENAME_LEN-1] = '\0'; }*/ // strip off blank space it it's there if ( Cmdline_mod[strlen(Cmdline_mod)-1] == ' ' ) { Cmdline_mod[strlen(Cmdline_mod)-1] = '\0'; } // Ok - mod stacking support int len = strlen(Cmdline_mod); char *modlist = new char[len+2]; memset(modlist, 0, len+2); strcpy(modlist, Cmdline_mod); //modlist[len]= '\0'; // double null termination at the end // null terminate each individual for (int i = 0; i < len; i++) { if (modlist[i] == ',') modlist[i] = '\0'; } //copy over - we don't have to delete[] Cmdline_mod because it's a pointer to an automatic global char* Cmdline_mod = modlist; } if (fps_arg.found()) { Show_framerate = 1; } if(pos_arg.found()) { Cmdline_show_pos = 1; } if ( safeloading_arg.found() ) { Cmdline_safeloading = 1; } if ( nomotiondebris_arg.found() ) { Cmdline_nomotiondebris = 1; } if( mipmap_arg.found() ) { Cmdline_mipmap = 1; } if( stats_arg.found() ) { Cmdline_show_stats = 1; } if ( fov_arg.found() ) { VIEWER_ZOOM_DEFAULT = Cmdline_fov = fov_arg.get_float(); } if( clip_dist_arg.found() ) { Min_draw_distance = Cmdline_clip_dist = clip_dist_arg.get_float(); } if (orb_radar.found()) { Cmdline_orb_radar = 1; } // TBP warp effects -Et1 // Chief1983 - Add 3d shockwave, ship choice 3d and weapon choice 3d if TBP is checked if( tbp.found() ) { Cmdline_tbp = 1; Cmdline_enable_3d_shockwave = 1; Cmdline_ship_choice_3d = 1; Cmdline_weapon_choice_3d = 1; } if ( use_3dwarp.found() ) { Cmdline_3dwarp = 1; } if ( use_warp_flash.found() ) { Cmdline_warp_flash = 1; } if ( allow_autpilot_interrupt.found() ) { Cmdline_autopilot_interruptable = 0; } // specular comand lines if ( spec_exp_arg.found() ) { specular_exponent_value = spec_exp_arg.get_float(); } if ( spec_point_arg.found() ) { static_point_factor = spec_point_arg.get_float(); } if ( spec_static_arg.found() ) { static_light_factor = spec_static_arg.get_float(); } if ( spec_tube_arg.found() ) { static_tube_factor = spec_tube_arg.get_float(); } if ( cell_arg.found() ) { Cmdline_cell = 1; } if ( spec_arg.found() ) { Cmdline_spec = 1; } if ( htl_arg.found() ) { Cmdline_nohtl = 1; } if( no_set_gamma_arg.found() ) { Cmdline_no_set_gamma = 1; } if(no_vsync_arg.found() ) { Cmdline_no_vsync = 1; } #ifdef SCP_UNIX // no key/mouse grab if(no_grab.found()){ Cmdline_no_grab = 1; } #endif if ( normal_arg.found() ) { Cmdline_normal = 1; // height maps are only used if normal maps are if ( height_arg.found() ) { Cmdline_height = 1; } } if ( noglsl_arg.found() ) { Cmdline_noglsl = 1; } if ( img2dds_arg.found() ) Cmdline_img2dds = 1; if ( glow_arg.found() ) Cmdline_glow = 1; if ( query_speech_arg.found() ) Cmdline_query_speech = 1; if ( ship_choice_3d_arg.found() ) Cmdline_ship_choice_3d = 1; if ( weapon_choice_3d_arg.found() ) Cmdline_weapon_choice_3d = 1; if ( show_mem_usage_arg.found() ) Cmdline_show_mem_usage = 1; if (ingamejoin_arg.found() ) Cmdline_ingamejoin = 1; if ( start_mission_arg.found() ) { Cmdline_start_mission = start_mission_arg.str(); } if ( ambient_factor_arg.found() ) Cmdline_ambient_factor = ambient_factor_arg.get_int(); if ( get_flags_arg.found() ) { FILE *fp = fopen("flags.lch","w"); if (fp == NULL) { MessageBox(NULL,"Error creating flag list for launcher", "Error", MB_OK); return false; } int easy_flag_size = sizeof(EasyFlag); int flag_size = sizeof(Flag); int num_easy_flags = sizeof(easy_flags) / easy_flag_size; int num_flags = sizeof(exe_params) / flag_size; // Launcher will check its using structures of the same size fwrite(&easy_flag_size, sizeof(int), 1, fp); fwrite(&flag_size, sizeof(int), 1, fp); fwrite(&num_easy_flags, sizeof(int), 1, fp); fwrite(&easy_flags, sizeof(easy_flags), 1, fp); fwrite(&num_flags, sizeof(int), 1, fp); fwrite(&exe_params, sizeof(exe_params), 1, fp); { // cheap and bastardly cap check for builds // (needs to be compatible with older Launchers, which means having // this implies an OpenAL build for old Launchers) ubyte build_caps = 0; #ifndef USE_DIRECT3D build_caps |= BUILD_CAP_NO_D3D; #endif #ifdef USE_OPENAL build_caps |= BUILD_CAP_OPENAL; #endif fwrite(&build_caps, 1, 1, fp); } fflush(fp); fclose(fp); return false; } if ( output_scripting_arg.found() ) Output_scripting_meta = true; if (output_sexp_arg.found() ) { output_sexps("sexps.html"); } Cmdline_d3d_lesstmem = !d3d_lesstmem_arg.found(); if ( no_vbo_arg.found() ) { Cmdline_novbo = 1; } if ( snd_preload_arg.found() ) { Cmdline_snd_preload = 1; } if ( env.found() ) { Cmdline_env = 1; } if ( decals.found() ) { #ifdef WIN32 MessageBox(NULL, "Decals have been disabled in builds after May 4, 2006. Please remove the \"-decals\" command line from the launcher to prevent this message from appearing the the future.", "", MB_OK | MB_ICONINFORMATION); #endif } if ( ballistic_gauge.found() ) { Cmdline_ballistic_gauge = 1; } if (wcsaga.found()) { Cmdline_wcsaga = 1; } if ( cache_bitmaps_arg.found() ) { Cmdline_cache_bitmaps = 1; } if(dis_collisions.found()) Cmdline_dis_collisions = 1; if(dis_weapons.found()) Cmdline_dis_weapons = 1; if ( noibx_arg.found() ) { Cmdline_noibx = 1; } if ( no_fbo_arg.found() ) { Cmdline_no_fbo = 1; } if ( noemissive_arg.found() ) { Cmdline_no_emissive = 1; } if ( ogl_spec_arg.found() ) { Cmdline_ogl_spec = ogl_spec_arg.get_float(); if ( Cmdline_ogl_spec < 0.0f ) Cmdline_ogl_spec = 0.0f; if ( Cmdline_ogl_spec > 128.0f ) Cmdline_ogl_spec = 128.0f; } if ( rearm_timer_arg.found() ) Cmdline_rearm_timer = 1; if ( missile_lighting_arg.found() ) Cmdline_missile_lighting = 1; if ( save_render_targets_arg.found() ) Cmdline_save_render_targets = 1; if ( debug_window_arg.found() ) Cmdline_debug_window = 1; if ( verify_vps_arg.found() ) Cmdline_verify_vps = 1; if ( atiswap_arg.found() ) { Cmdline_ati_color_swap = 1; } if ( enable_3d_shockwave_arg.found() ) { Cmdline_enable_3d_shockwave = 1; } return true; } int fred2_parse_cmdline(int argc, char *argv[]) { if (argc > 1) { // kind of silly -- combine arg list into single string for parsing, // but it fits with the win32-centric existing code. char *cmdline = NULL; unsigned int arglen = 0; int i; for (i = 1; i < argc; i++) arglen += strlen(argv[i]); if (argc > 2) arglen += argc + 2; // leave room for the separators cmdline = new char [arglen+1]; i = 1; memset(cmdline, 0, arglen+1); // clear it out strcpy(cmdline, argv[i]); for (i=2; i < argc; i++) { strcat(cmdline, " "); strcat(cmdline, argv[i]); } os_init_cmdline(cmdline); delete [] cmdline; } else { // no cmdline args os_init_cmdline(""); } return SetCmdlineParams(); } int parse_cmdline(char *cmdline) { // mprintf(("I got to parse_cmdline()!!\n")); os_init_cmdline(cmdline); // --------------- Kazan ------------- // If you're looking for the list of if (someparam.found()) { cmdline_someparam = something; } look above at this function // I did this because of fred2_parse_cmdline() return SetCmdlineParams(); }