seta hud_panel_weapons_complainbubble_color_unavailable "" "color of the complainbubble when showing weapon unavailable message"
seta hud_panel_weapons_ammo_color "" "color of status bar"
seta hud_panel_weapons_ammo_alpha "" "alpha of status bar"
+seta hud_panel_weapons_timeout "" "panel disappears if you don't switch weapon for this amount of seconds"
+seta hud_panel_weapons_timeout_effect "" "disappearance effect: 0) no effect; 1) panel moves out of screen; 2) panel fades out"
seta hud_panel_ammo "" "enable/disable this panel"
seta hud_panel_ammo_pos "" "position of this panel"
set g_pickup_respawntime_medium 20
set g_pickup_respawntime_long 30
set g_pickup_respawntime_powerup 120
-set g_pickup_respawntime_weapon 5
+set g_pickup_respawntime_weapon 10
set g_pickup_respawntime_ammo 25
set g_pickup_respawntimejitter_short 0
set g_pickup_respawntimejitter_medium 0
// }}}
// {{{ mortar
set g_balance_grenadelauncher_primary_type 0
-set g_balance_grenadelauncher_primary_damage 50
+set g_balance_grenadelauncher_primary_damage 44
set g_balance_grenadelauncher_primary_edgedamage 32
set g_balance_grenadelauncher_primary_force 300
set g_balance_grenadelauncher_primary_radius 115
set g_balance_grenadelauncher_primary_remote_minbouncecnt 0
set g_balance_grenadelauncher_secondary_type 1
-set g_balance_grenadelauncher_secondary_damage 70
+set g_balance_grenadelauncher_secondary_damage 62
set g_balance_grenadelauncher_secondary_edgedamage 32
set g_balance_grenadelauncher_secondary_force 300
set g_balance_grenadelauncher_secondary_radius 150
set g_balance_grenadelauncher_bouncestop 0.12
// }}}
// {{{ minelayer
-set g_balance_minelayer_damage 35
+set g_balance_minelayer_damage 42
set g_balance_minelayer_edgedamage 30
set g_balance_minelayer_force 250
set g_balance_minelayer_radius 175
set g_balance_crylink_secondary_line_fadetime 2
// }}}
// {{{ nex
-set g_balance_nex_primary_damage 100
+set g_balance_nex_primary_damage 90
set g_balance_nex_primary_force 500
set g_balance_nex_primary_refire 1
set g_balance_nex_primary_animtime 0.4
set g_balance_hagar_secondary_ammo 1
// }}}
// {{{ rocketlauncher
-set g_balance_rocketlauncher_damage 90
-set g_balance_rocketlauncher_edgedamage 30
+set g_balance_rocketlauncher_damage 82
+set g_balance_rocketlauncher_edgedamage 32
set g_balance_rocketlauncher_force 350
-set g_balance_rocketlauncher_radius 125
+set g_balance_rocketlauncher_radius 130
set g_balance_rocketlauncher_speed 1400
set g_balance_rocketlauncher_speedaccel 1400
set g_balance_rocketlauncher_speedstart 800
set g_balance_rocketlauncher_health 0
set g_balance_rocketlauncher_damageforcescale 0
set g_balance_rocketlauncher_detonatedelay 0.05 // positive: timer till detonation is allowed, negative: "security device" that prevents ANY remote detonation if it could hurt its owner, zero: detonatable at any time
-set g_balance_rocketlauncher_guiderate 40 // max degrees per second
+set g_balance_rocketlauncher_guiderate 42 // max degrees per second
set g_balance_rocketlauncher_guideratedelay 0.01 // immediate
set g_balance_rocketlauncher_guidegoal 512 // goal distance for (non-laser) guiding (higher = less control, lower = erratic)
set g_balance_rocketlauncher_guidedelay 0.15 // delay before guiding kicks in
set g_balance_campingrifle_auto_reload_on_switch 0
set g_balance_campingrifle_bursttime 0
set g_balance_campingrifle_primary_tracer 1
-set g_balance_campingrifle_primary_damage 70
-set g_balance_campingrifle_primary_headshotaddeddamage 110
+set g_balance_campingrifle_primary_damage 60
+set g_balance_campingrifle_primary_headshotaddeddamage 100
set g_balance_campingrifle_primary_spread 0
set g_balance_campingrifle_primary_force 2
set g_balance_campingrifle_primary_speed 40000
set g_balance_campingrifle_primary_bullethail 0 // empty magazine on shot
set g_balance_campingrifle_secondary 1
set g_balance_campingrifle_secondary_tracer 0
-set g_balance_campingrifle_secondary_damage 50
-set g_balance_campingrifle_secondary_headshotaddeddamage 75
+set g_balance_campingrifle_secondary_damage 42
+set g_balance_campingrifle_secondary_headshotaddeddamage 70
set g_balance_campingrifle_secondary_spread 0
set g_balance_campingrifle_secondary_force 2
set g_balance_campingrifle_secondary_speed 20000
+// Xonotic ProMode
exec defaultXonotic.cfg
-exec physicsXPM.cfg
-set g_start_weapon_laser 0
-set g_balance_weaponswitchdelay 0
+//==============
+// pure changes
+//==============
-set g_shootfromcenter 1
+// players
+sv_fbskin_green // visible playermodel forced on everyone
-set g_forced_respawn 1
+//================
+// impure changes
+//================
-set g_mirrordamage 0
-set g_friendlyfire 1
+// players
+g_jump_grunt 1 // make enemies even easier to hear when they're jumping around
-set timelimit_overtimes 1
+// physics
+exec physicsXPM.cfg // XPM physics. Similar to vanilla Xonotic physics, with a different way to accelerate: through strafejumping
-set sv_fragmessage_information_stats 0
+// balance
+set g_balance_weaponswitchdelay 0 // no switch animation, this is standard in "pro modes" ;)
+set g_shootfromcenter 1 // hit where you point at with the crosshair (almost so, no shooteye because it's really ugly)
-// force a visible playermodel!
-set sv_defaultcharacter 1
-set sv_defaultplayermodel "models/player/nyx.iqm"
-set sv_defaultplayercolors 60
-set g_fullbrightplayers 1
+// match rules
+set timelimit_overtimes 1 // overtimes on, draw matches are less interesting! :)
+set g_forced_respawn 1 // no delaying/cheating a match by not spawning
+set g_mirrordamage 0 // hurting teammates does not hurt you...
+set g_friendlyfire 1 // ...it hurts them.
+
+// info
+set sv_fragmessage_information_stats 0 // don't reveal how much health/armor the attacker had
mod_q3bsp_lightmapmergepower 4
// player defaults
-_cl_color 102
+_cl_color 112
_cl_name Player
-_cl_playermodel models/player/umbra.iqm
+_cl_playermodel models/player/erebus.iqm
_cl_playerskin 0
seta crosshair 16
seta crosshair_color "0.6 0.8 1"
set ekg 0 "Throw huge amounts of gibs"
cl_movement 1
+cl_movement_track_canjump 0
cl_stairsmoothspeed 200
-cl_forwardspeed $sv_maxspeed
-cl_backspeed $sv_maxspeed
-cl_sidespeed $sv_maxspeed
-cl_upspeed $sv_maxspeed
-cl_movement_accelerate $sv_accelerate
-cl_movement_airaccel_qw $sv_airaccel_qw
-cl_movement_airaccel_sideways_friction $sv_airaccel_sideways_friction
-cl_movement_airaccelerate $sv_airaccelerate
-cl_movement_edgefriction $edgefriction
-cl_movement_friction $sv_friction
-cl_movement_jumpvelocity $sv_jumpvelocity
-cl_movement_maxairspeed $sv_maxairspeed
-cl_movement_maxspeed $sv_maxspeed
-cl_movement_stepheight $sv_stepheight
-cl_movement_stopspeed $sv_stopspeed
-cl_movement_track_canjump 0 // till DP bug gets fixed
-cl_movement_wallfriction $sv_wallfriction
-cl_movement_wateraccelerate $sv_wateraccelerate
-cl_movement_waterfriction $sv_waterfriction
seta cl_autoswitch 1 "automatically switch to newly picked up weapons if they are better than what you are carrying"
alias autoswitch "set cl_autoswitch $1 ; cmd autoswitch $1"
// to force disable delay or waves, set them to 0.125
set g_ctf_respawn_delay 0
set g_ctf_respawn_waves 0
+set g_ctf_weapon_stay 0
set g_dm_respawn_delay 0
set g_dm_respawn_waves 0
+set g_dm_weapon_stay 0
set g_dom_respawn_delay 0
set g_dom_respawn_waves 0
+set g_dom_weapon_stay 0
set g_lms_respawn_delay 0
set g_lms_respawn_waves 0
+set g_lms_weapon_stay 0
set g_rune_respawn_delay 0
set g_rune_respawn_waves 0
+set g_rune_weapon_stay 0
set g_tdm_respawn_delay 0
set g_tdm_respawn_waves 0
+set g_tdm_weapon_stay 0
set g_kh_respawn_delay 0
set g_kh_respawn_waves 0
+set g_kh_weapon_stay 0
set g_arena_respawn_delay 0
set g_arena_respawn_waves 0
+set g_arena_weapon_stay 0
set g_ca_respawn_delay 0
set g_ca_respawn_waves 0
+set g_ca_weapon_stay 0
set g_ca_damage2score_multiplier 0.01
set g_ca_round_timelimit 180
set g_nexball_respawn_delay 0
set g_nexball_respawn_waves 0
+set g_nexball_weapon_stay 0
set g_as_respawn_delay 0
set g_as_respawn_waves 0
+set g_as_weapon_stay 0
set g_ons_respawn_delay 0
set g_ons_respawn_waves 0
+set g_ons_weapon_stay 0
set g_rc_respawn_waves 0
set g_rc_respawn_delay 0
+set g_rc_weapon_stay 0
set g_cts_respawn_waves 0
-set g_cts_respawn_delay 0.25
+set g_cts_respawn_delay 0
set g_cts_selfdamage 1 "0 = disable all selfdamage and falldamage in cts"
set g_cts_finish_kill_delay 10 "prevent cheating by running back to the start line, and starting out with more speed than otherwise possible"
+set g_cts_weapon_stay 1
set g_freezetag_respawn_waves 0
-set g_freezetag_respawn_delay 0.25
+set g_freezetag_respawn_delay 0
+set g_freezetag_weapon_stay 0
set g_ka_respawn_delay 0
set g_ka_respawn_waves 0
+set g_ka_weapon_stay 0
// overtime
seta timelimit_overtime 2 "duration in minutes of one added overtime, added to the timelimit"
r_picmipworld 1
gl_picmip_world 0
gl_picmip_sprites 0
-gl_picmip_other 2 // so, picmip -2 is best possible quality
+gl_picmip_other 1 // so, picmip -1 is best possible quality
r_mipsprites 1
r_mipskins 1
r_shadow_realtime_world_lightmaps 1
seta hud_panel_weapons_ammo_full_cells 80 "show 100% of the status bar at this ammo count"
seta hud_panel_weapons_ammo_full_rockets 80 "show 100% of the status bar at this ammo count"
seta hud_panel_weapons_ammo_full_fuel 100 "show 100% of the status bar at this ammo count"
-seta hud_panel_weapons_timeout "3" "panel disappears if you don't switch weapon for this amount of seconds"
-seta hud_panel_weapons_timeout_effect "1" "disappearance effect: 0) no effect; 1) panel moves out of screen; 2) panel fades out"
seta hud_panel_ammo_maxammo "40" "when you have this much ammo, the ammo status bar is full"
alias ons_map "cl_cmd radar" // legacy alias
alias radar "cl_cmd radar"
-alias scoreboard_columns_set "cl_cmd scoreboard_columns_set $*"
+alias scoreboard_columns_set "" // aliased later
alias scoreboard_columns_help "cl_cmd scoreboard_columns_help $*"
alias _gl_flashblend_update_00 "gl_flashblend 1"
alias menu_showteamselect "menu_cmd directmenu TeamSelect"
alias menu_showhudexit "menu_cmd directmenu HUDExit"
alias menu_showhudoptions "menu_cmd directpanelhudmenu $*"
-alias menu_sync "menu_cmd sync"
bind f5 menu_showteamselect
set g_bugrigs 0
scr_loadingscreen_barcolor "0 0.5 1"
scr_loadingscreen_barheight 20
scr_loadingscreen_count 1
+scr_conforcewhiledisconnected 0
// DP cannot properly detect this, so rather turn off the detection
r_texture_dds_load_dxt1_noalpha 1
// create this cvar in case the engine did not
set snd_soundradius 1200
+// loading screen
+scr_loadingscreen_scale 1
+scr_loadingscreen_scale_base 1
+scr_loadingscreen_scale_limit 1
+
// other config files
exec balanceXonotic.cfg
exec ctfscoring-ai.cfg
exec effects-normal.cfg
exec physicsX0.cfg
exec turrets.cfg
+exec font-nimbussansl.cfg
// hud cvar descriptions
exec _hud_descriptions.cfg
// exec the default skin config
// please add any new cvars into the hud_save script in qcsrc/client/hud.qc for consistency
exec hud_luminos.cfg
+
+// enable menu syncing
+alias menu_sync "menu_cmd sync"
+alias scoreboard_columns_set "cl_cmd scoreboard_columns_set $*"
cl_decals_time 10
cl_particles_quality 1
gl_flashblend 0
-gl_picmip -2
+gl_picmip -1
gl_texture_anisotropy 16
mod_q3bsp_nolightmaps 0
r_bloom 1
cl_decals_time 10
cl_particles_quality 1
gl_flashblend 0
-gl_picmip -2
+gl_picmip -1
gl_texture_anisotropy 16
mod_q3bsp_nolightmaps 0
r_bloom 1
seta hud_panel_weapons_ammo_color "0 1 0"
seta hud_panel_weapons_ammo_alpha "1"
seta hud_panel_weapons_aspect "2"
+seta hud_panel_weapons_timeout "3"
+seta hud_panel_weapons_timeout_effect "1"
seta hud_panel_ammo 1
seta hud_panel_ammo_pos "0.190000 0.920000"
seta hud_panel_chat_bg_border ""
seta hud_panel_chat_bg_padding ""
-seta hud_panel_engineinfo 1
+seta hud_panel_engineinfo 0
seta hud_panel_engineinfo_pos "0.910000 0.970000"
seta hud_panel_engineinfo_size "0.090000 0.030000"
seta hud_panel_engineinfo_bg "0"
seta hud_panel_weapons_ammo_color "0 1 0"
seta hud_panel_weapons_ammo_alpha "1"
seta hud_panel_weapons_aspect "2"
+seta hud_panel_weapons_timeout "0"
+seta hud_panel_weapons_timeout_effect "0"
seta hud_panel_ammo 1
seta hud_panel_ammo_pos "0.650000 0.890000"
seta hud_panel_weapons_ammo_color "0 1 0"
seta hud_panel_weapons_ammo_alpha "1"
seta hud_panel_weapons_aspect "2"
+seta hud_panel_weapons_timeout "0"
+seta hud_panel_weapons_timeout_effect "0"
seta hud_panel_ammo 1
seta hud_panel_ammo_pos "0.450000 0.630000"
seta hud_panel_ammo_iconalign "0"
seta hud_panel_ammo_progressbar "1"
seta hud_panel_ammo_progressbar_name "progressbar_ammo"
+seta hud_panel_ammo_progressbar_xoffset "0.32"
seta hud_panel_ammo_text "1"
seta hud_panel_powerups 1
seta hud_panel_weapons_ammo_color "0 1 0"
seta hud_panel_weapons_ammo_alpha "1"
seta hud_panel_weapons_aspect "2"
+seta hud_panel_weapons_timeout "0"
+seta hud_panel_weapons_timeout_effect "0"
seta hud_panel_ammo 1
seta hud_panel_ammo_pos "0.160000 0.910000"
seta hud_panel_chat_bg_border ""
seta hud_panel_chat_bg_padding ""
-seta hud_panel_engineinfo 1
+seta hud_panel_engineinfo 0
seta hud_panel_engineinfo_pos "0.887500 0.870000"
seta hud_panel_engineinfo_size "0.112500 0.030000"
seta hud_panel_engineinfo_bg "0"
184 21 25.000000 0 // jump
205 15 15.000000 0 // painone
220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
240 21 15.000000 1 // taunt
261 21 35.000000 1 // run
282 21 35.000000 1 // runbackwards
184 21 25.000000 0 // jump
205 15 15.000000 0 // painone
220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
240 21 15.000000 1 // taunt
261 21 35.000000 1 // run
282 21 35.000000 1 // runbackwards
184 21 25.000000 0 // jump
205 15 15.000000 0 // painone
220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
240 21 15.000000 1 // taunt
261 21 35.000000 1 // run
282 21 35.000000 1 // runbackwards
184 21 25.000000 0 // jump
205 15 15.000000 0 // painone
220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
240 21 15.000000 1 // taunt
261 21 35.000000 1 // run
282 21 35.000000 1 // runbackwards
184 21 25.000000 0 // jump
205 15 15.000000 0 // painone
220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
240 21 15.000000 1 // taunt
261 21 35.000000 1 // run
282 21 35.000000 1 // runbackwards
184 21 25.000000 0 // jump
205 15 15.000000 0 // painone
220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
240 21 15.000000 1 // taunt
261 21 35.000000 1 // run
282 21 35.000000 1 // runbackwards
184 21 25.000000 0 // jump
205 15 15.000000 0 // painone
220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
240 21 15.000000 1 // taunt
261 21 35.000000 1 // run
282 21 35.000000 1 // runbackwards
184 21 25.000000 0 // jump
205 15 15.000000 0 // painone
220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
240 21 15.000000 1 // taunt
261 21 35.000000 1 // run
282 21 35.000000 1 // runbackwards
184 21 25.000000 0 // jump
205 15 15.000000 0 // painone
220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
240 21 15.000000 1 // taunt
261 21 35.000000 1 // run
282 21 35.000000 1 // runbackwards
184 21 25.000000 0 // jump
205 15 15.000000 0 // painone
220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
240 21 15.000000 1 // taunt
261 21 35.000000 1 // run
282 21 35.000000 1 // runbackwards
184 21 25.000000 0 // jump
205 15 15.000000 0 // painone
220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
240 21 15.000000 1 // taunt
261 21 35.000000 1 // run
282 21 35.000000 1 // runbackwards
184 21 25.000000 0 // jump
205 15 15.000000 0 // painone
220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
240 21 15.000000 1 // taunt
261 21 35.000000 1 // run
282 21 35.000000 1 // runbackwards
184 21 25.000000 0 // jump
205 15 15.000000 0 // painone
220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
240 21 15.000000 1 // taunt
261 21 35.000000 1 // run
282 21 35.000000 1 // runbackwards
184 21 25.000000 0 // jump
205 15 15.000000 0 // painone
220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
240 21 15.000000 1 // taunt
261 21 35.000000 1 // run
282 21 35.000000 1 // runbackwards
184 21 25.000000 0 // jump
205 15 15.000000 0 // painone
220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
240 21 15.000000 1 // taunt
261 21 35.000000 1 // run
282 21 35.000000 1 // runbackwards
184 21 25.000000 0 // jump
205 15 15.000000 0 // painone
220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
240 21 15.000000 1 // taunt
261 21 35.000000 1 // run
282 21 35.000000 1 // runbackwards
156 16 15.000000 0 // jump
172 15 15.000000 0 // painone
187 17 15.000000 0 // paintwo
-204 5 15.000000 1 // shoot
+204 5 15.000000 0 // shoot
209 21 15.000000 1 // taunt
230 21 40.000000 1 // run
251 21 40.000000 1 // runbackwards
184 21 25.000000 0 // jump
205 15 15.000000 0 // painone
220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
240 21 15.000000 1 // taunt
261 21 35.000000 1 // run
282 21 35.000000 1 // runbackwards
184 21 25.000000 0 // jump
205 15 15.000000 0 // painone
220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
240 21 15.000000 1 // taunt
261 21 35.000000 1 // run
282 21 35.000000 1 // runbackwards
184 21 25.000000 0 // jump
205 15 15.000000 0 // painone
220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
240 21 15.000000 1 // taunt
261 21 35.000000 1 // run
282 21 35.000000 1 // runbackwards
184 21 25.000000 0 // jump
205 15 15.000000 0 // painone
220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
240 21 15.000000 1 // taunt
261 21 35.000000 1 // run
282 21 35.000000 1 // runbackwards
184 21 25.000000 0 // jump
205 15 15.000000 0 // painone
220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
240 21 15.000000 1 // taunt
261 21 35.000000 1 // run
282 21 35.000000 1 // runbackwards
184 21 25.000000 0 // jump
205 15 15.000000 0 // painone
220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
240 21 15.000000 1 // taunt
261 21 35.000000 1 // run
282 21 35.000000 1 // runbackwards
156 16 15.000000 0 // jump
172 15 15.000000 0 // painone
187 17 15.000000 0 // paintwo
-204 5 15.000000 1 // shoot
+204 5 15.000000 0 // shoot
209 21 15.000000 1 // taunt
230 21 40.000000 1 // run
251 21 40.000000 1 // runbackwards
sv_jumpspeedcap_min ""
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 320
sv_jumpspeedcap_min 0 // need predicting? (it should already be in CSQC prediction code)
sv_jumpspeedcap_max 0.35
sv_jumpspeedcap_max_disable_on_ramps 1
+g_teleport_maxspeed 0
sv_jumpspeedcap_min ""
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
sv_jumpspeedcap_min 0 // need predicting? (it should already be in CSQC prediction code)
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 1
+g_teleport_maxspeed 0
sv_jumpspeedcap_min ""
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 1
+g_teleport_maxspeed 0
sv_jumpspeedcap_min ""
sv_jumpspeedcap_max 0.38
sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
sv_jumpspeedcap_min ""
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
sv_jumpspeedcap_min ""
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
sv_jumpspeedcap_min ""
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
sv_jumpspeedcap_min ""
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
sv_jumpspeedcap_min ""
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
sv_jumpspeedcap_min ""
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
sv_jumpspeedcap_min ""
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
sv_jumpspeedcap_min ""
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
sv_jumpspeedcap_min ""
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
sv_jumpspeedcap_min ""
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 1
+g_teleport_maxspeed 0
sv_jumpspeedcap_min ""
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
sv_jumpspeedcap_min ""
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
sv_jumpspeedcap_min ""
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
sv_jumpspeedcap_min ""
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 320
sv_jumpspeedcap_min ""
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
sv_jumpspeedcap_min ""
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
sv_jumpspeedcap_min ""
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
sv_jumpspeedcap_min ""
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
sv_jumpspeedcap_min ""
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
sv_jumpspeedcap_min ""
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
sv_jumpspeedcap_min ""
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 1
+g_teleport_maxspeed 0
sv_jumpspeedcap_min 0
sv_jumpspeedcap_max 0.5
sv_jumpspeedcap_max_disable_on_ramps 1
+g_teleport_maxspeed 320
sv_jumpspeedcap_min ""
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 1
+g_teleport_maxspeed 0
HUD_Write_PanelCvar_q("_ammo_color");
HUD_Write_PanelCvar_q("_ammo_alpha");
HUD_Write_PanelCvar_q("_aspect");
+ HUD_Write_PanelCvar_q("_timeout");
+ HUD_Write_PanelCvar_q("_timeout_effect");
break;
case HUD_PANEL_AMMO:
HUD_Write_PanelCvar_q("_onlycurrent");
HUD_Write_PanelCvar_q("_iconalign");
HUD_Write_PanelCvar_q("_progressbar");
HUD_Write_PanelCvar_q("_progressbar_name");
+ HUD_Write_PanelCvar_q("_progressbar_xoffset");
HUD_Write_PanelCvar_q("_text");
break;
case HUD_PANEL_POWERUPS:
return 1;
else if (intermission == 1)
return 1;
- else if (getstati(STAT_HEALTH) <= 0 && autocvar_cl_deathscoreboard)
+ else if (getstati(STAT_HEALTH) <= 0 && autocvar_cl_deathscoreboard && gametype != GAME_CTS)
return 1;
+ else if (spectatee_status == -1)
+ return 1;
else if (scoreboard_showscores_force)
return 1;
return 0;
fn = get_model_datafilename(m, sk, "txt");
fh = fopen(fn, FILE_READ);
if(fh < 0)
- return 0;
+ {
+ sk = 0;
+ fn = get_model_datafilename(m, sk, "txt");
+ fh = fopen(fn, FILE_READ);
+ if(fh < 0)
+ return 0;
+ }
get_model_parameters_modelname = m;
get_model_parameters_modelskin = sk;
float autocvar_sv_dodging_up_speed;
float autocvar_sv_dodging_wall_distance_threshold;
float autocvar_sv_dodging_wall_dodging;
+float autocvar_sv_doublejump;
float autocvar_sv_eventlog;
float autocvar_sv_eventlog_console;
float autocvar_sv_eventlog_files;
self.frags = FRAGS_SPECTATOR;
}
-float RestrictSkin(float s)
-{
- if(!teams_matter)
- return s;
- if(s == 6)
- return 6;
- return mod(s, 3);
-}
-
void FixPlayermodel()
{
local string defaultmodel;
}
oldskin = self.skinindex;
- self.skinindex = RestrictSkin(stof(self.playerskin));
+ self.skinindex = stof(self.playerskin);
}
if(chmdl || oldskin != self.skinindex)
void ClientKill_Now()
{
+ remove(self.killindicator);
+ self.killindicator = world;
+
if(self.killindicator_teamchange)
ClientKill_Now_TeamChange();
// in any case:
Damage(self, self, self, 100000, DEATH_KILL, self.origin, '0 0 0');
- if(self.killindicator)
- {
- dprint("Cleaned up after a leaked kill indicator.\n");
- remove(self.killindicator);
- self.killindicator = world;
- }
+ // now I am sure the player IS dead
}
void KillIndicator_Think()
{
ClientKill_Now(); // no oldself needed
return;
}
+ else if(g_cts && self.health == 1) // health == 1 means that it's silent
+ {
+ self.nextthink = time + 1;
+ self.cnt -= 1;
+ }
else
{
if(self.cnt <= 10)
entity e;
killtime = autocvar_g_balance_kill_delay;
- if(g_race_qualifying)
+ if(g_race_qualifying || g_cts)
killtime = 0;
+ if(g_cts && self.killindicator && self.killindicator.health == 1) // self.killindicator.health == 1 means that the kill indicator was spawned by CTS_ClientKill
+ {
+ remove(self.killindicator);
+ self.killindicator = world;
+
+ ClientKill_Now(); // allow instant kill in this case
+ return;
+ }
+
self.killindicator_teamchange = targetteam;
- if(!self.killindicator)
+ if(!self.killindicator)
{
if(self.modelindex && self.deadflag == DEAD_NO)
{
self.killindicator.nextthink = time + (self.lip) * 0.05;
self.killindicator.cnt = ceil(killtime);
self.killindicator.count = bound(0, ceil(killtime), 10);
- sprint(self, strcat("^1You'll be dead in ", ftos(self.killindicator.cnt), " seconds\n"));
+ //sprint(self, strcat("^1You'll be dead in ", ftos(self.killindicator.cnt), " seconds\n"));
for(e = world; (e = find(e, classname, "body")) != world; )
{
ClientKill_TeamChange(0);
}
-void CTS_ClientKill_Think (void)
+void CTS_ClientKill (entity e) // silent version of ClientKill, used when player finishes a CTS run. Useful to prevent cheating by running back to the start line and starting out with more speed
{
- self = self.owner; // set self to the player to be killed
- sprint(self, "^1You were killed in order to prevent cheating!");
- ClientKill_Now();
-}
-
-void CTS_ClientKill (float t) // silent version of ClientKill
-{
- entity e;
- e = spawn();
- e.owner = self;
- e.think = CTS_ClientKill_Think;
- e.nextthink = t;
+ e.killindicator = spawn();
+ e.killindicator.owner = e;
+ e.killindicator.think = KillIndicator_Think;
+ e.killindicator.nextthink = time + (e.lip) * 0.05;
+ e.killindicator.cnt = ceil(autocvar_g_cts_finish_kill_delay);
+ e.killindicator.health = 1; // this is used to indicate that it should be silent
+ e.lip = 0;
}
void DoTeamChange(float destteam)
if(frametime)
player_anim();
button_pressed = (self.BUTTON_ATCK || self.BUTTON_JUMP || self.BUTTON_ATCK2 || self.BUTTON_HOOK || self.BUTTON_USE);
- force_respawn = (g_lms || (g_ca) || autocvar_g_forced_respawn);
+ force_respawn = (g_lms || g_ca || g_cts || autocvar_g_forced_respawn);
if (self.deadflag == DEAD_DYING)
{
if(force_respawn)
float doublejump;
doublejump = FALSE;
- if (sv_doublejump)
+ if (autocvar_sv_doublejump)
{
tracebox(self.origin + '0 0 0.01', self.mins, self.maxs, self.origin - '0 0 0.01', MOVE_NORMAL, self);
if (trace_fraction < 1 && trace_plane_normal_z > 0.7)
float player_getspecies()
{
float s;
- get_model_parameters(self.playermodel, self.skinindex);
+ get_model_parameters(self.model, self.skinindex);
s = get_model_parameters_species;
get_model_parameters(string_null, 0);
if(s < 0)
waves = 0;
sdelay = cvar(strcat("g_", GetGametype(), "_respawn_delay"));
if(!sdelay)
- sdelay = autocvar_g_respawn_delay;
+ {
+ if(g_cts)
+ sdelay = 0; // no respawn delay in CTS
+ else
+ sdelay = autocvar_g_respawn_delay;
+ }
waves = cvar(strcat("g_", GetGametype(), "_respawn_waves"));
if(!waves)
waves = autocvar_g_respawn_waves;
#undef _VOICEMSG
}
-void LoadPlayerSounds(string f, float first)
+float LoadPlayerSounds(string f, float first)
{
float fh;
string s;
if(fh < 0)
{
dprint("Player sound file not found: ", f, "\n");
- return;
+ return 0;
}
while((s = fgets(fh)))
{
self.field = strzone(strcat(argv(1), " ", argv(2)));
}
fclose(fh);
+ return 1;
}
.float modelindex_for_playersound;
self.skinindex_for_playersound = self.skinindex;
ClearPlayerSounds();
LoadPlayerSounds("sound/player/default.sounds", 1);
- LoadPlayerSounds(get_model_datafilename(self.playermodel, self.skinindex, "sounds"), 0);
+ if(!LoadPlayerSounds(get_model_datafilename(self.model, self.skinindex, "sounds"), 0))
+ LoadPlayerSounds(get_model_datafilename(self.model, 0, "sounds"), 0);
}
void FakeGlobalSound(string sample, float chan, float voicetype)
return;
if (g_ca)
return;
+ if (g_cts)
+ return;
if(!autocvar_g_weapon_throwable)
return;
if(autocvar_g_weapon_stay == 1)
v_forward = fo;
v_right = ri;
v_up = up;
- self.weaponentity.weaponentity.glowmod = '0 0 0'; // reset glowmod, weapon think function only *might* set it
+ self.weaponentity_glowmod = '0 0 0'; // reset glowmod, weapon think function only *might* set it
weapon_action(self.weapon, WR_THINK);
- self.exteriorweaponentity.glowmod = self.weaponentity.weaponentity.glowmod; // exterior weaponmodel has the same glowmod
}
if (time + self.weapon_frametime * 0.5 >= self.weapon_nextthink)
{
else
self.alpha = 1;
+ self.glowmod = self.owner.weaponentity_glowmod;
self.colormap = self.owner.colormap;
if (self.weaponentity)
{
self.weaponentity.effects = self.effects;
self.weaponentity.alpha = self.alpha;
self.weaponentity.colormap = self.colormap;
+ self.weaponentity.glowmod = self.glowmod;
}
self.angles = '0 0 0';
self.angles = ang;
}
+ self.glowmod = self.owner.weaponentity_glowmod;
self.colormap = self.owner.colormap;
};
.entity weaponentity;
.entity exteriorweaponentity;
+.vector weaponentity_glowmod;
.float switchweapon;
.float autoswitch;
float weapon_action(float wpn, float wrequest);
float sv_maxidle_spectatorsareidle;
float sv_pogostick;
-float sv_doublejump;
float tracebox_hits_trigger_hurt(vector start, vector mi, vector ma, vector end);
float next_pingtime;
{
if (deathtype == DEATH_TEAMCHANGE || deathtype == DEATH_AUTOTEAMCHANGE)
msg = ColoredTeamName(targ.team); // TODO: check if needed?
- Send_CSQC_Centerprint(targ, msg, "", deathtype, MSG_SUICIDE);
+ if(!g_cts) // no "killed your own dumb self" message in CTS
+ Send_CSQC_Centerprint(targ, msg, "", deathtype, MSG_SUICIDE);
if(deathtype != DEATH_TEAMCHANGE && deathtype != DEATH_QUIET)
{
k = bufstr_get(h, i);
#define BADPREFIX(p) if(substring(k, 0, strlen(p)) == p) continue
+#define BADPRESUFFIX(p,s) if(substring(k, 0, strlen(p)) == p && substring(k, -strlen(s), -1) == s) continue
#define BADCVAR(p) if(k == p) continue
// internal
BADPREFIX("csqc_");
BADCVAR("g_nexball_goallimit");
BADCVAR("g_runematch_point_limit");
BADCVAR("g_start_delay");
+ BADCVAR("g_weapon_stay"); BADPRESUFFIX("g_", "_weapon_stay");
BADCVAR("hostname");
BADCVAR("log_file");
BADCVAR("maxplayers");
t = (weaponinfo.spawnflags & WEP_FLAG_NORMAL);
else if(t < -1)
t = 0;
- else if (g_race || g_cts)
- t = (i == WEP_LASER);
+ else if (g_cts)
+ t = (i == WEP_SHOTGUN);
else if (g_nexball)
t = 0; // weapon is set a few lines later
else
float sv_pitch_max;
float sv_pitch_fixyaw;
+string GetGametype(); // g_world.qc
void readlevelcvars(void)
{
// first load all the mutators
sv_gentle = cvar("sv_gentle");
sv_foginterval = cvar("sv_foginterval");
g_cloaked = cvar("g_cloaked");
+ if(g_cts)
+ g_cloaked = 1; // always enable cloak in CTS
g_jump_grunt = cvar("g_jump_grunt");
g_footsteps = cvar("g_footsteps");
g_grappling_hook = cvar("g_grappling_hook");
g_pinata = cvar("g_pinata");
- g_weapon_stay = cvar("g_weapon_stay");
+ g_weapon_stay = cvar(strcat("g_", GetGametype(), "_weapon_stay"));
+ if(!g_weapon_stay)
+ g_weapon_stay = cvar("g_weapon_stay");
if (!g_weapon_stay && (cvar("deathmatch") == 2))
g_weapon_stay = 1;
precache_model(m);
if(sv_loddistance1)
{
- precache_model(strcat(substring(m, 0, -5), "_lod1", substring(m, -4, -1)));
- precache_model(strcat(substring(m, 0, -5), "_lod2", substring(m, -4, -1)));
+ f = strcat(substring(m, 0, -5), "_lod1", substring(m, -4, -1));
+ if(fexists(f))
+ precache_model(f);
+ f = strcat(substring(m, 0, -5), "_lod2", substring(m, -4, -1));
+ if(fexists(f))
+ precache_model(f);
}
globhandle = search_begin(strcat(m, "_*.sounds"), TRUE, FALSE);
objerror_builtin(s);
}
+.float remove_except_protected_forbidden;
+void remove_except_protected(entity e)
+{
+ if(e.remove_except_protected_forbidden)
+ error("not allowed to remove this at this point");
+ remove_builtin(e);
+}
+
void remove_unsafely(entity e)
{
remove_builtin(e);
entity startoflist;
startoflist = initialize_entity_first;
initialize_entity_first = world;
+ remove = remove_except_protected;
+ for (self = startoflist; self; self = self.initialize_entity_next)
+ {
+ self.remove_except_protected_forbidden = 1;
+ }
for (self = startoflist; self; )
{
entity e;
self.initialize_entity_order = 0;
self.initialize_entity = func_null;
self.initialize_entity_next = world;
+ self.remove_except_protected_forbidden = 0;
if (self.classname == "initialize_entity")
{
entity e_old;
self = e_old;
}
//dprint("Delayed initialization: ", self.classname, "\n");
- func();
+ if(func != func_null)
+ func();
+ else
+ {
+ eprint(self);
+ backtrace(strcat("Null function in: ", self.classname, "\n"));
+ }
self = e;
}
+ remove = remove_unsafely;
}
.float uncustomizeentityforclient_set;
zcurveparticles(effectno, start, end, end_dz, vlen(vel));
}
-string GetGametype(); // g_world.qc
void write_recordmarker(entity pl, float tstart, float dt)
{
GameLogEcho(strcat(":recordset:", ftos(pl.playerid), ":", ftos(dt)));
race_setTime(GetMapname(), t, e.crypto_idfp, e.netname, e);
if(g_cts && autocvar_g_cts_finish_kill_delay)
{
- CTS_ClientKill(autocvar_g_cts_finish_kill_delay);
+ CTS_ClientKill(e);
}
}
if(t < recordtime || recordtime == 0)
for(trigger = world; (trigger = find(trigger, classname, "trigger_multiple")); )
for(targ = world; (targ = find(targ, targetname, trigger.target)); )
if (targ.classname == "target_checkpoint" || targ.classname == "target_startTimer" || targ.classname == "target_stopTimer") {
- targ.wait = -2;
+ trigger.wait = 0;
+ trigger.delay = 0;
+ targ.wait = 0;
targ.delay = 0;
- setsize(targ, trigger.mins, trigger.maxs);
- setorigin(targ, trigger.origin);
+ // These just make the game crash on some maps with oddly shaped triggers.
+ // (on the other hand they used to fix the case when two players ran through a checkpoint at once,
+ // and often one of them just passed through without being registered. Hope it's fixed in a better way now.
+ // (happened on item triggers too)
+ //
+ //targ.wait = -2;
+ //targ.delay = 0;
+
+ //setsize(targ, trigger.mins, trigger.maxs);
+ //setorigin(targ, trigger.origin);
//remove(trigger);
}
}
for(targ = world; (targ = find(targ, targetname, trigger.target)); )
if (targ.classname == "target_init" || targ.classname == "target_give" || targ.classname == "target_items")
{
- targ.wait = -2;
+ trigger.wait = 0;
+ trigger.delay = 0;
+ targ.wait = 0;
targ.delay = 0;
- setsize(targ, trigger.mins, trigger.maxs);
- setorigin(targ, trigger.origin);
+ //setsize(targ, trigger.mins, trigger.maxs);
+ //setorigin(targ, trigger.origin);
//remove(trigger);
}
}
void spawnfunc_target_init()
{
self.spawnflags = 0; // remove all weapons except the ones listed below
- self.netname = "laser uzi"; // keep these weapons through the remove trigger
+ self.netname = "shotgun"; // keep these weapons through the remove trigger
spawnfunc_target_items();
InitializeEntity(self, target_init_verify, INITPRIO_FINDTARGET);
}
self.armorvalue = 100;
else if (targ.classname == "item_health_mega")
self.health = 200;
- remove(targ);
+ //remove(targ); // removing ents in init functions causes havoc, workaround:
+ targ.think = SUB_Remove;
+ targ.nextthink = time;
}
self.spawnflags = 2;
spawnfunc_target_items();
modifications = strcat(modifications, ", No start weapons");
if(autocvar_sv_gravity < 800)
modifications = strcat(modifications, ", Low gravity");
- if(g_cloaked)
+ if(g_cloaked && !g_cts)
modifications = strcat(modifications, ", Cloaked");
if(g_grappling_hook)
modifications = strcat(modifications, ", Hook");
modifications = strcat(modifications, ", Midair");
if(g_pinata)
modifications = strcat(modifications, ", Pinata");
- if(g_weapon_stay)
+ if(g_weapon_stay && !g_cts)
modifications = strcat(modifications, ", Weapons stay");
if(g_bloodloss > 0)
modifications = strcat(modifications, ", Bloodloss");
if(autocvar_g_balance_nex_charge)
{
- self.weaponentity.weaponentity.glowmod_x = autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_red_half * bound(0, self.weaponentity.weaponentity.glowmod_y + self.nex_charge / autocvar_g_balance_nex_charge_limit, 1);
- self.weaponentity.weaponentity.glowmod_y = autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_green_half * bound(0, self.weaponentity.weaponentity.glowmod_y + self.nex_charge / autocvar_g_balance_nex_charge_limit, 1);
- self.weaponentity.weaponentity.glowmod_z = autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_blue_half * bound(0, self.weaponentity.weaponentity.glowmod_z + self.nex_charge / autocvar_g_balance_nex_charge_limit, 1);
+ self.weaponentity_glowmod_x = autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_red_half * min(1, self.nex_charge / autocvar_g_balance_nex_charge_limit);
+ self.weaponentity_glowmod_y = autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_green_half * min(1, self.nex_charge / autocvar_g_balance_nex_charge_limit);
+ self.weaponentity_glowmod_z = autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_blue_half * min(1, self.nex_charge / autocvar_g_balance_nex_charge_limit);
if(self.nex_charge > autocvar_g_balance_nex_charge_limit)
{
- self.weaponentity.weaponentity.glowmod_x = self.weaponentity.weaponentity.glowmod_x + autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_red_full * (self.nex_charge - autocvar_g_balance_nex_charge_limit) / (1 - autocvar_g_balance_nex_charge_limit);
- self.weaponentity.weaponentity.glowmod_y = self.weaponentity.weaponentity.glowmod_y + autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_green_full * (self.nex_charge - autocvar_g_balance_nex_charge_limit) / (1 - autocvar_g_balance_nex_charge_limit);
- self.weaponentity.weaponentity.glowmod_z = self.weaponentity.weaponentity.glowmod_z + autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_blue_full * (self.nex_charge - autocvar_g_balance_nex_charge_limit) / (1 - autocvar_g_balance_nex_charge_limit);
+ self.weaponentity_glowmod_x = self.weaponentity_glowmod_x + autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_red_full * (self.nex_charge - autocvar_g_balance_nex_charge_limit) / (1 - autocvar_g_balance_nex_charge_limit);
+ self.weaponentity_glowmod_y = self.weaponentity_glowmod_y + autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_green_full * (self.nex_charge - autocvar_g_balance_nex_charge_limit) / (1 - autocvar_g_balance_nex_charge_limit);
+ self.weaponentity_glowmod_z = self.weaponentity_glowmod_z + autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_blue_full * (self.nex_charge - autocvar_g_balance_nex_charge_limit) / (1 - autocvar_g_balance_nex_charge_limit);
}
}
exec data/campaign.cfg
exec config_update.cfg
exec autoexec.cfg
-exec font-nimbussansl.cfg
stuffcmds
//startdemos demos/demo1 demos/demo2 demos/demo3
//startdemos
// OMG! Its the Evil Wheel! :O
exec unit_ewheel.cfg
-//
-exec unit_repulsor.cfg
+// It is so repulsive, it doesn't even exist!
+// exec unit_repulsor.cfg
set g_turrets_reloadcvars 0 // reload when this cfg has been exec'd
alias g_turrets_reload "set g_turrets_reloadcvars 1"