From 393a20a9ec90b6ff8025f7fbcdf9d8c6493f4c14 Mon Sep 17 00:00:00 2001 From: lordhavoc Date: Sat, 14 Apr 2007 00:26:50 +0000 Subject: [PATCH] weapons now have force settings added g_pickup_* cvars to configure how much ammo, health, armor, each pickup item gives (and maximum limits on each) added linear rot/regen settings for health/armor added physicsQ3.cfg and added more cvars to the other physics*.cfg files moved weapon and pickup related settings from default.cfg to weapons.cfg updated the pro mod so that it works and is quite playable moved minstagib laser secondary fire code to w_nex.qc (still minstagib-only, just moved the code to a better place) git-svn-id: svn://svn.icculus.org/nexuiz/trunk@2308 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/default.cfg | 224 ++++---------------- data/physics15.cfg | 10 +- data/physics151.cfg | 10 +- data/physics151b.cfg | 10 +- data/physics16rc1.cfg | 10 +- data/physicsQ.cfg | 10 +- data/physicsQ3.cfg | 12 ++ data/physicsQBF.cfg | 10 +- data/physicsQBFplus.cfg | 10 +- data/physicsQBR.cfg | 10 +- data/qcsrc/server/cl_client.qc | 113 +++++----- data/qcsrc/server/g_damage.qc | 7 +- data/qcsrc/server/g_world.qc | 6 +- data/qcsrc/server/miscfunctions.qc | 41 ++++ data/qcsrc/server/t_items.qc | 173 ++++++++++----- data/qcsrc/server/w_common.qc | 8 +- data/qcsrc/server/w_laser.qc | 52 +++-- data/qcsrc/server/w_nex.qc | 15 +- data/qcsrc/server/w_rocketlauncher.qc | 36 +++- data/qcsrc/server/w_shotgun.qc | 8 +- data/qcsrc/server/w_uzi.qc | 6 +- data/weapons.cfg | 187 ++++++++++++++++ pro/default.cfg | 294 ++++++++------------------ pro/physicsPro.cfg | 12 ++ pro/weaponsPro.cfg | 187 ++++++++++++++++ 25 files changed, 907 insertions(+), 554 deletions(-) create mode 100644 data/physicsQ3.cfg create mode 100644 data/weapons.cfg create mode 100644 pro/physicsPro.cfg create mode 100644 pro/weaponsPro.cfg diff --git a/data/default.cfg b/data/default.cfg index 1c43533ec..b831e4f67 100644 --- a/data/default.cfg +++ b/data/default.cfg @@ -82,9 +82,14 @@ vid_height 600 vid_conwidth 640 vid_conheight 480 v_deathtilt 0 // needed for spectators (who are dead to avoid prediction) -cl_bobcycle 0 -cl_bobup 0 -cl_rollangle 0 + +// these settings determine how much the view is affected by movement/damage +cl_bobcycle 0 // how long the cycle of up/down view movement takes (only works if cl_bob is not 0), default is 0.6 +cl_bob 0.02 // how much view moves up/down when moving (does not move if cl_bobcycle is 0, but still enables cl_bobmodel), default is 0.02 +cl_bobmodel 1 // whether to have gun model move around on screen when moving (only works if cl_bob is not 0), default is 1 +cl_rollangle 0 // amount of view tilt when strafing, default is 2.0 +v_kicktime 0.5 // how long damage kicks of the view last, default is 0.5 seconds +gl_polyblend 1 // whether to use screen tints, default is 1 // nexuiz-linux-*.sh will use this seta vid_x11_display "" @@ -105,28 +110,10 @@ sv_cullentities_trace 1 // restart server if all players hit "ready"-button set sv_ready_restart 0 -cl_forwardspeed 400 -cl_backspeed 400 -cl_sidespeed 400 -cl_upspeed 400 -cl_movement 1 -cl_netinputpacketlosstolerance 0 -cl_movement_accelerate 5.5 -cl_movement_edgefriction 0 -cl_movement_friction 5 -cl_movement_jumpvelocity 300 -cl_movement_maxairspeed 220 -cl_movement_maxspeed 400 -cl_movement_stepheight 34 -cl_stairsmoothspeed 200 -seta cl_autoswitch 1 -edgefriction 0 -set g_balance_jumpheight 300 -sv_accelerate 5.5 -sv_airaccelerate 5.5 -sv_friction 5 +// use default physics +exec physicsQBR.cfg + set sv_spectator_speed_multiplier 1.5 -sv_stepheight 34 seta sv_spectate 1 seta sv_defaultcharacter 0 seta sv_defaultplayermodel models/player/nexus.zym @@ -135,8 +122,22 @@ set sv_autoscreenshot 0 net_messagetimeout 300 net_connecttimeout 30 sv_jumpstep 1 // step up stairs while jumping, makes it easier to reach ledges -// make sure to use default physics -exec physicsQBR.cfg + +cl_movement 1 +seta cl_autoswitch 1 +cl_netinputpacketlosstolerance 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_edgefriction $edgefriction +cl_movement_friction $sv_friction +cl_movement_jumpvelocity $g_balance_jumpheight +cl_movement_maxairspeed $sv_maxairspeed +cl_movement_maxspeed $sv_maxspeed +cl_movement_stepheight $sv_stepheight seta cl_playerdetailreduction 0 // the higher, the less detailed @@ -184,19 +185,6 @@ locs_enable 0 pausable 0 set g_antilag 0 set g_weapon_stay 0 -set g_start_weapon_laser 1 -set g_start_weapon_shotgun 1 -set g_start_weapon_uzi 0 -set g_start_weapon_grenadelauncher 0 -set g_start_weapon_electro 0 -set g_start_weapon_crylink 0 -set g_start_weapon_nex 0 -set g_start_weapon_hagar 0 -set g_start_weapon_rocketlauncher 0 -set g_start_ammo_shells 50 -set g_start_ammo_nails 0 -set g_start_ammo_rockets 0 -set g_start_ammo_cells 0 set g_powerup_superhealth 1 set g_powerup_strength 1 set g_powerup_shield 1 @@ -223,7 +211,7 @@ set g_throughfloor 1 set g_maplist_defaultlist 'dm_aggressor''dm_aneurysm''dm_basement''dm_bleach''dm_bluesky''dm_bloodprison''dm_darkzone''dm_downer''dm_evilspace''dm_farewell''dm_runningman''dm_runningman_1on1remix''dm_silvercity''dm_skyway''dm_slimepit''dm_soylent''dm_starship''dm_stormkeep''dm_toxic''dm_warfare''dom_aggressor''dom_aneurysm''dom_basement''dom_bleach''dom_darkzone''dom_downer''dom_evilspace''dom_runningman''dom_runningman_1on1remix''dom_silvercity''dom_skyway''dom_slimepit''dom_soylent''dom_starship''dom_stormkeep''dom_toxic''lms_aggressor''lms_basement''lms_bleach''lms_bluesky''lms_bloodprison''lms_downer''lms_evilspace''lms_farewell''lms_runningman''lms_runningman_1on1remix''lms_skyway''lms_slimepit''lms_soylent''lms_starship''lms_stormkeep''lms_toxic''lms_warfare''rune_aggressor''rune_aneurysm''rune_basement''rune_bleach''rune_darkzone''rune_downer''rune_evilspace''rune_runningman''rune_runningman_1on1remix''rune_silvercity''rune_skyway''rune_slimepit''rune_soylent''rune_starship''rune_stormkeep''rune_toxic''tdm_aggressor''tdm_aneurysm''tdm_basement''tdm_bleach''tdm_darkzone''tdm_downer''tdm_evilspace''tdm_farewell''tdm_runningman''tdm_runningman_1on1remix''tdm_silvercity''tdm_skyway''tdm_slimepit''tdm_soylent''tdm_starship''tdm_stormkeep''tdm_toxic''tdm_warfare' seta g_maplist $g_maplist_defaultlist seta g_maplist_index 0 // this is used internally for saving position in maplist cycle -seta g_maplist_selectrandom 0 // if 1, a random map will be chosen as next map; DEPRECATED in favor of g_maplist_shuffle +seta g_maplist_selectrandom 0 // if 1, a random map will be chosen as next map - DEPRECATED in favor of g_maplist_shuffle seta g_maplist_shuffle 0 // new randomization method: like selectrandom, but avoid playing the same maps in short succession. This works by taking out the first element and inserting it into g_maplist with a bias to the end of the list. alias g_maplist_shufflenow "set _g_maplist_shufflenow 1" alias g_maplist_add "set _g_maplist_add $1" @@ -398,12 +386,16 @@ set g_arena_powerups 0 // enables powerups (superhealth, strength and shield), // server game balance settings set g_balance_armor_regen 0 set g_balance_armor_rot 0.1 +set g_balance_armor_regenlinear 0 +set g_balance_armor_rotlinear 0 set g_balance_armor_stable 100 set g_balance_armor_limit 999 set g_balance_armor_start 0 set g_balance_armor_blockpercent 0.6 set g_balance_health_regen 0.1 set g_balance_health_rot 0.1 +set g_balance_health_regenlinear 0 +set g_balance_health_rotlinear 0 set g_balance_health_stable 100 set g_balance_health_limit 999 set g_balance_health_start 150 @@ -417,146 +409,7 @@ set g_balance_powerup_strength_force 4 set g_balance_powerup_strength_time 30 // weapon balance settings follow - -set g_balance_laser_damage 35 -set g_balance_laser_edgedamage 10 -set g_balance_laser_force 400 -set g_balance_laser_radius 70 -set g_balance_laser_speed 9000 -set g_balance_laser_refire 0.7 -set g_balance_laser_animtime 0.3 -set g_balance_laser_lifetime 9 - -set g_balance_shotgun_primary_bullets 5 -set g_balance_shotgun_primary_damage 12 -set g_balance_shotgun_primary_spread 0.09 -set g_balance_shotgun_primary_refire 0.5 -set g_balance_shotgun_primary_animtime 0.2 -set g_balance_shotgun_primary_ammo 1 -set g_balance_shotgun_secondary_bullets 5 -set g_balance_shotgun_secondary_damage 12 -set g_balance_shotgun_secondary_spread 0.16 -set g_balance_shotgun_secondary_refire 1.35 -set g_balance_shotgun_secondary_animtime 0.2 -set g_balance_shotgun_secondary_ammo 1 - -set g_balance_uzi_first_damage 30 -set g_balance_uzi_first_spread 0.01 -set g_balance_uzi_first_refire 0.2 -set g_balance_uzi_first_ammo 1 -set g_balance_uzi_sustained_damage 16 -set g_balance_uzi_sustained_spread 0.05 -set g_balance_uzi_sustained_refire 0.1 -set g_balance_uzi_sustained_ammo 1 - -set g_balance_grenadelauncher_primary_damage 65 -set g_balance_grenadelauncher_primary_edgedamage 35 -set g_balance_grenadelauncher_primary_force 400 -set g_balance_grenadelauncher_primary_radius 140 -set g_balance_grenadelauncher_primary_speed 2000 -set g_balance_grenadelauncher_primary_speed_up 200 -set g_balance_grenadelauncher_primary_lifetime 30 -set g_balance_grenadelauncher_primary_refire 0.7 -set g_balance_grenadelauncher_primary_animtime 0.3 -set g_balance_grenadelauncher_primary_ammo 2 -set g_balance_grenadelauncher_secondary_damage 65 -set g_balance_grenadelauncher_secondary_edgedamage 35 -set g_balance_grenadelauncher_secondary_force 400 -set g_balance_grenadelauncher_secondary_radius 140 -set g_balance_grenadelauncher_secondary_speed 1400 -set g_balance_grenadelauncher_secondary_speed_up 200 -set g_balance_grenadelauncher_secondary_lifetime 2.5 -set g_balance_grenadelauncher_secondary_refire 0.6 -set g_balance_grenadelauncher_secondary_animtime 0.3 -set g_balance_grenadelauncher_secondary_ammo 2 - -set g_balance_electro_primary_damage 80 -set g_balance_electro_primary_edgedamage 0 -set g_balance_electro_primary_force 200 -set g_balance_electro_primary_radius 150 -set g_balance_electro_primary_speed 2000 -set g_balance_electro_primary_lifetime 2 -set g_balance_electro_primary_refire 0.9 -set g_balance_electro_primary_animtime 0.05 -set g_balance_electro_primary_ammo 2 -set g_balance_electro_secondary_damage 60 -set g_balance_electro_secondary_edgedamage 0 -set g_balance_electro_secondary_force 200 -set g_balance_electro_secondary_radius 150 -set g_balance_electro_secondary_speed 900 -set g_balance_electro_secondary_speed_up 200 -set g_balance_electro_secondary_lifetime 5 -set g_balance_electro_secondary_refire 0.3 -set g_balance_electro_secondary_animtime 0.05 -set g_balance_electro_secondary_ammo 2 -set g_balance_electro_combo_damage 70 -set g_balance_electro_combo_edgedamage 0 -set g_balance_electro_combo_force 200 -set g_balance_electro_combo_radius 250 - -set g_balance_crylink_primary_damage 15 -set g_balance_crylink_primary_edgedamage 0 -set g_balance_crylink_primary_force 55 -set g_balance_crylink_primary_radius 3 -set g_balance_crylink_primary_speed 7000 -set g_balance_crylink_primary_spread 0.06 -set g_balance_crylink_primary_shots 4 -set g_balance_crylink_primary_lifetime 9 -set g_balance_crylink_primary_refire 0.25 -set g_balance_crylink_primary_animtime 0.15 -set g_balance_crylink_primary_ammo 1 -set g_balance_crylink_secondary_damage 20 -set g_balance_crylink_secondary_edgedamage 0 -set g_balance_crylink_secondary_force 55 -set g_balance_crylink_secondary_radius 3 -set g_balance_crylink_secondary_speed 7000 -set g_balance_crylink_secondary_spread 0.08 -set g_balance_crylink_secondary_shots 7 -set g_balance_crylink_secondary_lifetime 9 -set g_balance_crylink_secondary_refire 0.5 -set g_balance_crylink_secondary_animtime 0.15 -set g_balance_crylink_secondary_ammo 3 - - -set g_balance_nex_damage 140 -set g_balance_nex_refire 1.5 -set g_balance_nex_animtime 0.3 -set g_balance_minstagib_nex_refire 1.5 -set g_balance_minstagib_nex_animtime 0.3 -set g_balance_nex_ammo 5 -set g_balance_nex_respawntime_modifier 1 - -set g_balance_hagar_primary_damage 40 -set g_balance_hagar_primary_edgedamage 15 -set g_balance_hagar_primary_force 100 -set g_balance_hagar_primary_radius 70 -set g_balance_hagar_primary_spread 0.025 -set g_balance_hagar_primary_speed 3000 -set g_balance_hagar_primary_lifetime 10 -set g_balance_hagar_primary_refire 0.15 -set g_balance_hagar_primary_ammo 1 -set g_balance_hagar_secondary_damage 40 -set g_balance_hagar_secondary_edgedamage 15 -set g_balance_hagar_secondary_force 100 -set g_balance_hagar_secondary_radius 70 -set g_balance_hagar_secondary_spread 0.025 -set g_balance_hagar_secondary_speed 1400 -set g_balance_hagar_secondary_lifetime 10 -set g_balance_hagar_secondary_refire 0.15 -set g_balance_hagar_secondary_ammo 1 - -set g_balance_rocketlauncher_damage 130 -set g_balance_rocketlauncher_edgedamage 50 -set g_balance_rocketlauncher_force 600 -set g_balance_rocketlauncher_radius 170 -set g_balance_rocketlauncher_speed 850 -set g_balance_rocketlauncher_lifetime 9 -set g_balance_rocketlauncher_refire 1 -set g_balance_rocketlauncher_animtime 0.3 -set g_balance_rocketlauncher_ammo 3 -set g_balance_rocketlauncher_laserguided_speed 1000 //650 -set g_balance_rocketlauncher_laserguided_turnrate 0.75 //0.5 -set g_balance_rocketlauncher_laserguided_allow_steal 1 +exec weapons.cfg set g_balance_falldamage_deadminspeed 150 set g_balance_falldamage_minspeed 1400 @@ -576,6 +429,7 @@ set g_footsteps 0 // serverside footstep sounds r_shadow_bumpscale_bumpmap 4 r_shadow_bumpscale_basetexture 5 r_shadow_realtime_world_lightmaps 1 +r_ambient 0 cl_decals_fadetime 1 cl_decals_time 2 seta cl_nogibs 0 @@ -704,7 +558,7 @@ set sv_vote_singlecount 0 set sv_vote_timeout 60 // a player can not call a vote again for this many seconds set sv_vote_wait 120 -// a simple majority suffices to accept a vote (meaning: YES votes > NO votes; otherwise: YES votes > half of the players) +// a simple majority suffices to accept a vote (meaning: YES votes > NO votes, otherwise: YES votes > half of the players) set sv_vote_simple_majority 0 alias vhelp "cmd vote help" alias vstatus "cmd vote status" @@ -803,14 +657,14 @@ sbar_alpha_bg 0.4 net_banlist "" seta _alientrap_net_banlist "" -set g_waypoints_for_items 1 // make waypoints out of items; values: 0 = never, 1 = unless the mapper prevents it by worldspawn.spawnflags & 1, 2 = always +set g_waypoints_for_items 1 // make waypoints out of items, values: 0 = never, 1 = unless the mapper prevents it by worldspawn.spawnflags & 1, 2 = always set g_projectiles_newton_style 2 // possible values: // 0: absolute velocity projectiles (like Quake) // 1: relative velocity projectiles, "Newtonian" (like Tribes 2) -// 2: relative velocity projectiles, but aim is precorrected so projectiles hit the crosshair (note: strafe rockets then are SLOWER than ones shot while standing; happens in 1 too when aiming correctly which is hard) -// 3: absolute velocity + player velocity component in shot direction (note: does NOT yield the right relative velocity, but may be good enough; but it is somewhat prone to sniper rockets) +// 2: relative velocity projectiles, but aim is precorrected so projectiles hit the crosshair (note: strafe rockets then are SLOWER than ones shot while standing, happens in 1 too when aiming correctly which is hard) +// 3: absolute velocity + player velocity component in shot direction (note: does NOT yield the right relative velocity, but may be good enough, but it is somewhat prone to sniper rockets) // 4: just add the player velocity length to the absolute velocity (tZork's sniper rockets) set g_maplist_votable 5 @@ -823,7 +677,7 @@ set g_chat_flood_spl 0 // seconds between lines to not count a set g_chat_flood_lmax 0 // maximum number of lines per chat message at once set g_chat_flood_burst 0 // allow bursts of so many chat lines set g_chat_flood_spl_team 0 // \ -set g_chat_flood_lmax_team 0 // } same for say_team +set g_chat_flood_lmax_team 0 // } same for say_team set g_chat_flood_burst_team 0 // / set g_chat_flood_notify_flooder 1 // when 0, the flooder still can see his own message set g_chat_teamcolors 0 // colorize nicknames in team color for chat diff --git a/data/physics15.cfg b/data/physics15.cfg index 774c6ae7b..61f97ecd2 100644 --- a/data/physics15.cfg +++ b/data/physics15.cfg @@ -1,5 +1,11 @@ -set sv_maxspeed 400 -set sv_maxairspeed 50 +sv_maxspeed 400 +sv_maxairspeed 50 +sv_accelerate 5.5 +sv_airaccelerate 5.5 +sv_friction 5 +edgefriction 0 +sv_stepheight 34 +set g_balance_jumpheight 300 set sv_friction_on_land 0.25 set sv_airaccel_sideways_friction 0 set sv_airaccel_qw 0 diff --git a/data/physics151.cfg b/data/physics151.cfg index 7fc6b5069..3e7506837 100644 --- a/data/physics151.cfg +++ b/data/physics151.cfg @@ -1,5 +1,11 @@ -set sv_maxspeed 400 -set sv_maxairspeed 50 +sv_maxspeed 400 +sv_maxairspeed 50 +sv_accelerate 5.5 +sv_airaccelerate 5.5 +sv_friction 5 +edgefriction 0 +sv_stepheight 34 +set g_balance_jumpheight 300 set sv_friction_on_land 0 set sv_airaccel_sideways_friction 0 set sv_airaccel_qw 0 diff --git a/data/physics151b.cfg b/data/physics151b.cfg index b6759aabb..da0d7d227 100644 --- a/data/physics151b.cfg +++ b/data/physics151b.cfg @@ -1,5 +1,11 @@ -set sv_maxspeed 400 -set sv_maxairspeed 25 +sv_maxspeed 400 +sv_maxairspeed 25 +sv_accelerate 5.5 +sv_airaccelerate 5.5 +sv_friction 5 +edgefriction 0 +sv_stepheight 34 +set g_balance_jumpheight 300 set sv_friction_on_land 0 set sv_airaccel_sideways_friction 0 set sv_airaccel_qw 0 diff --git a/data/physics16rc1.cfg b/data/physics16rc1.cfg index e50f98a59..68252c8bf 100644 --- a/data/physics16rc1.cfg +++ b/data/physics16rc1.cfg @@ -1,5 +1,11 @@ -set sv_maxspeed 400 -set sv_maxairspeed 50 +sv_maxspeed 400 +sv_maxairspeed 50 +sv_accelerate 5.5 +sv_airaccelerate 5.5 +sv_friction 5 +edgefriction 0 +sv_stepheight 34 +set g_balance_jumpheight 300 set sv_friction_on_land 0.2 set sv_airaccel_sideways_friction 0 set sv_airaccel_qw 0 diff --git a/data/physicsQ.cfg b/data/physicsQ.cfg index f243fecd1..c032bfd18 100644 --- a/data/physicsQ.cfg +++ b/data/physicsQ.cfg @@ -1,5 +1,11 @@ -set sv_maxspeed 400 -set sv_maxairspeed 250 +sv_maxspeed 400 +sv_maxairspeed 250 +sv_accelerate 5.5 +sv_airaccelerate 5.5 +sv_friction 5 +edgefriction 0 +sv_stepheight 34 +set g_balance_jumpheight 300 set sv_friction_on_land 0 set sv_airaccel_sideways_friction 0 set sv_airaccel_qw 1 diff --git a/data/physicsQ3.cfg b/data/physicsQ3.cfg new file mode 100644 index 000000000..f04dd5022 --- /dev/null +++ b/data/physicsQ3.cfg @@ -0,0 +1,12 @@ +// these values match Quake3 +sv_maxspeed 400 +sv_maxairspeed $sv_maxspeed +sv_accelerate 10 +sv_airaccelerate 1 +sv_friction 6 +edgefriction 0 +sv_stepheight 18 +set g_balance_jumpheight 270 +set sv_friction_on_land 0 +set sv_airaccel_sideways_friction 0 +set sv_airaccel_qw 1 diff --git a/data/physicsQBF.cfg b/data/physicsQBF.cfg index 630a4da64..1294a3937 100644 --- a/data/physicsQBF.cfg +++ b/data/physicsQBF.cfg @@ -1,5 +1,11 @@ -set sv_maxspeed 400 -set sv_maxairspeed 250 +sv_maxspeed 400 +sv_maxairspeed 250 +sv_accelerate 5.5 +sv_airaccelerate 5.5 +sv_friction 5 +edgefriction 0 +sv_stepheight 34 +set g_balance_jumpheight 300 set sv_friction_on_land 0 set sv_airaccel_sideways_friction 0.8 set sv_airaccel_qw 1 diff --git a/data/physicsQBFplus.cfg b/data/physicsQBFplus.cfg index 29746dae2..4b690af75 100644 --- a/data/physicsQBFplus.cfg +++ b/data/physicsQBFplus.cfg @@ -1,5 +1,11 @@ -set sv_maxspeed 400 -set sv_maxairspeed 220 +sv_maxspeed 400 +sv_maxairspeed 220 +sv_accelerate 5.5 +sv_airaccelerate 5.5 +sv_friction 5 +edgefriction 0 +sv_stepheight 34 +set g_balance_jumpheight 300 set sv_friction_on_land 0 set sv_airaccel_sideways_friction 0.5 set sv_airaccel_qw 0.93 diff --git a/data/physicsQBR.cfg b/data/physicsQBR.cfg index 0ee5bd171..3465c4f6d 100644 --- a/data/physicsQBR.cfg +++ b/data/physicsQBR.cfg @@ -1,5 +1,11 @@ -set sv_maxspeed 400 -set sv_maxairspeed 220 +sv_maxspeed 400 +sv_maxairspeed 220 +sv_accelerate 5.5 +sv_airaccelerate 5.5 +sv_friction 5 +edgefriction 0 +sv_stepheight 34 +set g_balance_jumpheight 300 set sv_friction_on_land 0 set sv_airaccel_sideways_friction 0.3 set sv_airaccel_qw 0.93 diff --git a/data/qcsrc/server/cl_client.qc b/data/qcsrc/server/cl_client.qc index cedeffa96..1662cb893 100644 --- a/data/qcsrc/server/cl_client.qc +++ b/data/qcsrc/server/cl_client.qc @@ -689,7 +689,7 @@ string ColoredTeamName(float t); void ClientConnect (void) { local string s; - + self.classname = "player_joining"; self.flags = self.flags | FL_CLIENT; self.version_nagtime = time + 10 + random() * 10; @@ -745,7 +745,7 @@ void ClientConnect (void) stuffcmd(self, strcat("exec maps/", mapname, ".cfg\n")); // TODO: is this being used for anything else than cd tracks? // Remember: SVC_CDTRACK exists. Maybe it should be used. - + FixClientCvars(self); // waypoint sprites @@ -1057,14 +1057,14 @@ void player_powerups (void) self.effects = self.effects | (EF_ADDITIVE | EF_FULLBRIGHT); } -float CalcRegen(float current, float stable, float maxv, float regenfactor) +float CalcRegen(float current, float stable, float regenfactor) { if(current > stable) return current; else if(current > stable - 0.25) // when close enough, "snap" return stable; else - return bound(0, current + (stable - current) * regenfactor * frametime, maxv); + return min(stable, current + (stable - current) * regenfactor * frametime); } void player_regen (void) @@ -1078,75 +1078,80 @@ void player_regen (void) if (cvar("g_minstagib") || (cvar("g_lms") && !cvar("g_lms_regenerate"))) return; - if(cvar("g_runematch")) + max_mod = regen_mod = rot_mod = limit_mod = 1; + + if (self.runes & RUNE_REGEN) { - max_mod = regen_mod = rot_mod = limit_mod = 1; - if (self.runes & RUNE_REGEN) + if (self.runes & CURSE_VENOM) // do we have both rune/curse? { - if (self.runes & CURSE_VENOM) // do we have both rune/curse? - { - regen_mod = cvar("g_balance_rune_regen_combo_regenrate"); - max_mod = cvar("g_balance_rune_regen_combo_hpmod"); - limit_mod = cvar("g_balance_rune_regen_combo_limitmod"); - } - else - { - regen_mod = cvar("g_balance_rune_regen_regenrate"); - max_mod = cvar("g_balance_rune_regen_hpmod"); - limit_mod = cvar("g_balance_rune_regen_limitmod"); - } + regen_mod = cvar("g_balance_rune_regen_combo_regenrate"); + max_mod = cvar("g_balance_rune_regen_combo_hpmod"); + limit_mod = cvar("g_balance_rune_regen_combo_limitmod"); } - else if (self.runes & CURSE_VENOM) + else { - max_mod = cvar("g_balance_curse_venom_hpmod"); - if (self.runes & RUNE_REGEN) // do we have both rune/curse? - rot_mod = cvar("g_balance_rune_regen_combo_rotrate"); - else - rot_mod = cvar("g_balance_curse_venom_rotrate"); - limit_mod = cvar("g_balance_curse_venom_limitmod"); - //if (!self.runes & RUNE_REGEN) - // rot_mod = cvar("g_balance_curse_venom_rotrate"); + regen_mod = cvar("g_balance_rune_regen_regenrate"); + max_mod = cvar("g_balance_rune_regen_hpmod"); + limit_mod = cvar("g_balance_rune_regen_limitmod"); } - maxh = maxh * max_mod; - //maxa = maxa * max_mod; + } + else if (self.runes & CURSE_VENOM) + { + max_mod = cvar("g_balance_curse_venom_hpmod"); + if (self.runes & RUNE_REGEN) // do we have both rune/curse? + rot_mod = cvar("g_balance_rune_regen_combo_rotrate"); + else + rot_mod = cvar("g_balance_curse_venom_rotrate"); + limit_mod = cvar("g_balance_curse_venom_limitmod"); + //if (!self.runes & RUNE_REGEN) + // rot_mod = cvar("g_balance_curse_venom_rotrate"); + } + maxh = maxh * max_mod; + //maxa = maxa * max_mod; + limith = limith * limit_mod; + limita = limita * limit_mod; + if (self.armorvalue > maxa) + { if (time > self.pauserotarmor_finished) { - if (self.armorvalue > maxa) - self.armorvalue = bound(0, self.armorvalue + (maxa - self.armorvalue) * cvar("g_balance_armor_rot") * frametime, 1000); - } - if (time > self.pauserothealth_finished) - { - if (self.health > maxh) - self.health = bound(0, self.health + (maxh - self.health) * rot_mod*cvar("g_balance_health_rot") * frametime, 1000); + self.armorvalue = max(maxa, self.armorvalue + (maxa - self.armorvalue) * cvar("g_balance_armor_rot") * frametime); + self.armorvalue = max(maxa, self.armorvalue - cvar("g_balance_armor_rotlinear") * frametime); } + } + else if (self.armorvalue < maxa) + { if (time > self.pauseregen_finished) { - self.health = CalcRegen(self.health, maxh, 1000, regen_mod * cvar("g_balance_health_regen")); - self.armorvalue = CalcRegen(self.armorvalue, maxa, 1000, cvar("g_balance_armor_regen")); + self.armorvalue = CalcRegen(self.armorvalue, maxa, cvar("g_balance_armor_regen")); + self.armorvalue = min(maxa, self.armorvalue + cvar("g_balance_armor_regenlinear") * frametime); } } - else + if (self.health > maxh) { if (time > self.pauserothealth_finished) - if (self.health > maxh) - self.health = bound(0, self.health + (maxh - self.health) * cvar("g_balance_health_rot") * frametime, 1000); - if (time > self.pauserotarmor_finished) - if (self.armorvalue > maxa) - self.armorvalue = bound(0, self.armorvalue + (maxa - self.armorvalue) * cvar("g_balance_armor_rot") * frametime, 1000); + { + self.health = max(maxh, self.health + (maxh - self.health) * rot_mod*cvar("g_balance_health_rot") * frametime); + self.health = max(maxh, self.health - rot_mod*cvar("g_balance_health_rotlinear") * frametime); + } + } + else if (self.health < maxh) + { if (time > self.pauseregen_finished) { - self.health = CalcRegen(self.health, maxh, 1000, cvar("g_balance_health_regen")); - self.armorvalue = CalcRegen(self.armorvalue, maxa, 1000, cvar("g_balance_armor_regen")); + self.health = CalcRegen(self.health, maxh, regen_mod * cvar("g_balance_health_regen")); + self.health = min(maxh, self.health + regen_mod*cvar("g_balance_health_regenlinear") * frametime); } } if (self.health > limith) self.health = limith; - if(self.health < 1) - self.event_damage(self, self, 1, DEATH_ROT, self.origin, '0 0 0'); if (self.armorvalue > limita) self.armorvalue = limita; + + // if player rotted to death... die! + if(self.health < 1) + self.event_damage(self, self, 1, DEATH_ROT, self.origin, '0 0 0'); } /* @@ -1450,14 +1455,6 @@ void PlayerPreThink (void) W_WeaponFrame(); - if (cvar("g_minstagib")) - if(self.button3) - if (self.jump_interval <= (time + 0.1)) - { - self.jump_interval = time + 1; - W_Laser_Attack(); - } - { float zoomfactor, zoomspeed, zoomdir; zoomfactor = self.cvar_cl_zoomfactor; @@ -1467,7 +1464,7 @@ void PlayerPreThink (void) if(zoomspeed >= 0) // < 0 is instant zoom if(zoomspeed < 0.5 || zoomspeed > 16) zoomspeed = 3.5; - + zoomdir = self.button4; if(self.button3) if(self.weapon == WEP_NEX) diff --git a/data/qcsrc/server/g_damage.qc b/data/qcsrc/server/g_damage.qc index 9d5d340a5..2e0ee59b3 100644 --- a/data/qcsrc/server/g_damage.qc +++ b/data/qcsrc/server/g_damage.qc @@ -567,6 +567,7 @@ void RadiusDamage (entity inflictor, entity attacker, float coredamage, float ed vector m2; vector nearest; vector diff; + vector center; blastorigin = (inflictor.origin + (inflictor.mins + inflictor.maxs) * 0.5); @@ -600,7 +601,11 @@ void RadiusDamage (entity inflictor, entity attacker, float coredamage, float ed finaldmg = coredamage * power + edgedamage * (1 - power); if (finaldmg > 0) { - force = normalize((m1 + m2) * 0.5 - blastorigin) * (finaldmg / coredamage) * forceintensity; + center = (m1 + m2) * 0.5; + // if it's a player, use the view origin as reference + if (targ.classname == "player") + center = targ.origin + targ.view_ofs; + force = normalize(center - blastorigin) * (finaldmg / coredamage) * forceintensity; if (targ == attacker) finaldmg = finaldmg * cvar("g_balance_selfdamagepercent"); // Partial damage if the attacker hits himself // test line of sight to multiple positions on box, diff --git a/data/qcsrc/server/g_world.qc b/data/qcsrc/server/g_world.qc index d3e2d4383..fe568a92c 100644 --- a/data/qcsrc/server/g_world.qc +++ b/data/qcsrc/server/g_world.qc @@ -422,6 +422,8 @@ void worldspawn (void) CampaignPostInit(); fteqcc_testbugs(); + + readlevelcvars(); } void light (void) @@ -630,7 +632,7 @@ float() MaplistMethod_Random = // random map selection float(float exponent) MaplistMethod_Shuffle = // more clever shuffling // the exponent sets a bias on the map selection: -// the higher the exponent, the +// the higher the exponent, the { float i, j, imax, insertpos; @@ -2013,7 +2015,7 @@ void MapVote_Think() { if(alreadychangedlevel) return; - + if(time < mapvote_nextthink) return; //dprint("tick\n"); diff --git a/data/qcsrc/server/miscfunctions.qc b/data/qcsrc/server/miscfunctions.qc index 399b75d27..8d9553f7d 100644 --- a/data/qcsrc/server/miscfunctions.qc +++ b/data/qcsrc/server/miscfunctions.qc @@ -562,3 +562,44 @@ float(vector m1, vector m2, vector m3, vector m4) boxesoverlap = {return m2_x >= // requires the same, but is a stronger condition float(vector smins, vector smaxs, vector bmins, vector bmaxs) boxinsidebox = {return smins_x >= bmins_x && smaxs_x <= bmaxs_x && smins_y >= bmins_y && smaxs_y <= bmaxs_y && smins_z >= bmins_z && smaxs_z <= bmaxs_z;}; + +float g_pickup_shells; +float g_pickup_shells_max; +float g_pickup_nails; +float g_pickup_nails_max; +float g_pickup_rockets; +float g_pickup_rockets_max; +float g_pickup_cells; +float g_pickup_cells_max; +float g_pickup_armorshard; +float g_pickup_armorshard_max; +float g_pickup_armor; +float g_pickup_armor_max; +float g_pickup_healthshard; +float g_pickup_healthshard_max; +float g_pickup_health; +float g_pickup_health_max; +float g_pickup_healthmega; +float g_pickup_healthmega_max; + +void readlevelcvars(void) +{ + g_pickup_shells = cvar("g_pickup_shells"); + g_pickup_shells_max = cvar("g_pickup_shells_max"); + g_pickup_nails = cvar("g_pickup_nails"); + g_pickup_nails_max = cvar("g_pickup_nails_max"); + g_pickup_rockets = cvar("g_pickup_rockets"); + g_pickup_rockets_max = cvar("g_pickup_rockets_max"); + g_pickup_cells = cvar("g_pickup_cells"); + g_pickup_cells_max = cvar("g_pickup_cells_max"); + g_pickup_armorshard = cvar("g_pickup_armorshard"); + g_pickup_armorshard_max = cvar("g_pickup_armorshard_max"); + g_pickup_armor = cvar("g_pickup_armor"); + g_pickup_armor_max = cvar("g_pickup_armor_max"); + g_pickup_healthshard = cvar("g_pickup_healthshard"); + g_pickup_healthshard_max = cvar("g_pickup_healthshard_max"); + g_pickup_health = cvar("g_pickup_health"); + g_pickup_health_max = cvar("g_pickup_health_max"); + g_pickup_healthmega = cvar("g_pickup_healthmega"); + g_pickup_healthmega_max = cvar("g_pickup_healthmega_max"); +} diff --git a/data/qcsrc/server/t_items.qc b/data/qcsrc/server/t_items.qc index eb02ddcb2..494f10641 100644 --- a/data/qcsrc/server/t_items.qc +++ b/data/qcsrc/server/t_items.qc @@ -2,6 +2,8 @@ // self.effects = self.effects - (self.effects & EF_STARDUST); //} +.float max_armorvalue; + void Item_Respawn (void) { self.model = self.mdl; // restore original model @@ -21,6 +23,8 @@ void Item_Touch (void) { local entity oldself; local float _switchweapon; + local float pickedup; + local float it; // remove the item if it's currnetly in a NODROP brush or hits a NOIMPACT surface (such as sky) if (((trace_dpstartcontents | trace_dphitcontents) & DPCONTENTS_NODROP) || (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)) @@ -34,24 +38,19 @@ void Item_Touch (void) return; if (self.solid != SOLID_TRIGGER) return; - if (self.health && other.health >= other.max_health) - return; if (self.owner == other) return; - // Savage: Remove the respawn effect if still present - self.effects = self.effects - (self.effects & EF_STARDUST); - sound (self, CHAN_BODY, self.noise, 1, ATTN_NORM); - - // in case the player has autoswitch enabled do the following: - // if the player is using their best weapon before items are given, they - // probably want to switch to an even better weapon after items are given - _switchweapon = (other.autoswitch && (other.switchweapon == w_getbestweapon(other)) || cvar("g_minstagib")); + // if nothing happens to other, just return without taking the item + pickedup = FALSE; + _switchweapon = FALSE; if (cvar("g_minstagib")) { + _switchweapon = TRUE; if (self.ammo_cells) { + pickedup = TRUE; // play some cool sounds ;) centerprint(other, "\n"); if(other.health <= 5) @@ -72,6 +71,7 @@ void Item_Touch (void) // extralife powerup if (self.max_health) { + pickedup = TRUE; // sound not available // stuffcmd(other, "play2 announce/robotic/extra.ogg\nplay2 announce/robotic/_lives.ogg\n"); other.armorvalue = other.armorvalue + cvar("g_minstagib_extralives"); @@ -81,6 +81,7 @@ void Item_Touch (void) // invis powerup if (self.strength_finished) { + pickedup = TRUE; // sound not available // stuffcmd(other, "play2 announce/robotic/invisible.ogg\n"); other.strength_finished = max(other.strength_finished, time) + cvar("g_balance_powerup_strength_time"); @@ -89,6 +90,7 @@ void Item_Touch (void) // speed powerup if (self.invincible_finished) { + pickedup = TRUE; // sound not available // stuffcmd(other, "play2 announce/robotic/speed.ogg\n"); other.invincible_finished = max(other.invincible_finished, time) + cvar("g_balance_powerup_strength_time"); @@ -104,47 +106,96 @@ void Item_Touch (void) return; } + // in case the player has autoswitch enabled do the following: + // if the player is using their best weapon before items are given, they + // probably want to switch to an even better weapon after items are given + if (other.autoswitch) + if (other.switchweapon == w_getbestweapon(other)) + _switchweapon = TRUE; + if (self.ammo_shells) - other.ammo_shells = min (other.ammo_shells + self.ammo_shells, 999); + if (other.ammo_shells < g_pickup_shells_max) + { + pickedup = TRUE; + other.ammo_shells = min (other.ammo_shells + self.ammo_shells, g_pickup_shells_max); + } if (self.ammo_nails) - other.ammo_nails = min (other.ammo_nails + self.ammo_nails, 999); + if (other.ammo_nails < g_pickup_nails_max) + { + pickedup = TRUE; + other.ammo_nails = min (other.ammo_nails + self.ammo_nails, g_pickup_nails_max); + } if (self.ammo_rockets) - other.ammo_rockets = min (other.ammo_rockets + self.ammo_rockets, 999); + if (other.ammo_rockets < g_pickup_rockets_max) + { + pickedup = TRUE; + other.ammo_rockets = min (other.ammo_rockets + self.ammo_rockets, g_pickup_rockets_max); + } if (self.ammo_cells) - other.ammo_cells = min (other.ammo_cells + self.ammo_cells, 999); + if (other.ammo_cells < g_pickup_cells_max) + { + pickedup = TRUE; + other.ammo_cells = min (other.ammo_cells + self.ammo_cells, g_pickup_cells_max); + } - if (self.items & IT_UZI) W_GiveWeapon (other, IT_UZI, self.netname); - if (self.items & IT_SHOTGUN) W_GiveWeapon (other, IT_SHOTGUN, self.netname); - if (self.items & IT_GRENADE_LAUNCHER) W_GiveWeapon (other, IT_GRENADE_LAUNCHER, self.netname); - if (self.items & IT_ELECTRO) W_GiveWeapon (other, IT_ELECTRO, self.netname); - if (self.items & IT_NEX) W_GiveWeapon (other, IT_NEX, self.netname); - if (self.items & IT_HAGAR) W_GiveWeapon (other, IT_HAGAR, self.netname); - if (self.items & IT_ROCKET_LAUNCHER) W_GiveWeapon (other, IT_ROCKET_LAUNCHER, self.netname); - if (self.items & IT_CRYLINK) W_GiveWeapon (other, IT_CRYLINK, self.netname); + if (self.flags & FL_WEAPON) + if ((it = self.items - (self.items & other.items))) + { + pickedup = TRUE; + if (it & IT_UZI) W_GiveWeapon (other, IT_UZI, self.netname); + if (it & IT_SHOTGUN) W_GiveWeapon (other, IT_SHOTGUN, self.netname); + if (it & IT_GRENADE_LAUNCHER) W_GiveWeapon (other, IT_GRENADE_LAUNCHER, self.netname); + if (it & IT_ELECTRO) W_GiveWeapon (other, IT_ELECTRO, self.netname); + if (it & IT_NEX) W_GiveWeapon (other, IT_NEX, self.netname); + if (it & IT_HAGAR) W_GiveWeapon (other, IT_HAGAR, self.netname); + if (it & IT_ROCKET_LAUNCHER) W_GiveWeapon (other, IT_ROCKET_LAUNCHER, self.netname); + if (it & IT_CRYLINK) W_GiveWeapon (other, IT_CRYLINK, self.netname); + } if (self.strength_finished) + { + pickedup = TRUE; other.strength_finished = max(other.strength_finished, time) + cvar("g_balance_powerup_strength_time"); + } if (self.invincible_finished) + { + pickedup = TRUE; other.invincible_finished = max(other.invincible_finished, time) + cvar("g_balance_powerup_invincible_time"); + } //if (self.speed_finished) + //{ + // pickedup = TRUE; // other.speed_finished = max(other.speed_finished, time) + cvar("g_balance_powerup_speed_time"); + //} //if (self.slowmo_finished) + //{ + // pickedup = TRUE; // other.slowmo_finished = max(other.slowmo_finished, time) + (cvar("g_balance_powerup_slowmo_time") * cvar("g_balance_powerup_slowmo_speed")); + //} - if (self.max_health) + if (self.health) + if (other.health < self.max_health) { - other.health = other.health + self.max_health; + pickedup = TRUE; + other.health = min(other.health + self.health, self.max_health); other.pauserothealth_finished = max(other.pauserothealth_finished, time + cvar("g_balance_pause_health_rot")); } - if (self.health && other.health < other.max_health) - other.health = min(other.health + self.health, other.max_health); if (self.armorvalue) + if (other.armorvalue < self.max_armorvalue) { - other.armorvalue = other.armorvalue + self.armorvalue; + pickedup = TRUE; + other.armorvalue = min(other.armorvalue + self.armorvalue, self.max_armorvalue); other.pauserotarmor_finished = max(other.pauserotarmor_finished, time + cvar("g_balance_pause_armor_rot")); } } + if (!pickedup) + return; + + // Savage: Remove the respawn effect if still present + self.effects = self.effects - (self.effects & EF_STARDUST); + + sound (self, CHAN_BODY, self.noise, 1, ATTN_NORM); sound (other, CHAN_AUTO, self.item_pickupsound, 1, ATTN_NORM); oldself = self; @@ -196,23 +247,25 @@ float(entity player, entity item) commodity_pickupevalfunc = c = 0; // TODO: figure out if the player even has the weapon this ammo is for? // may not affect strategy much though... - // find out how much ammo the player has, in terms of this ammo pickup - // (how many of these ammo pickups it would take to total the player's - // current ammo) + // find out how much more ammo/armor/health the player can hold if (item.ammo_shells) - c = c + player.ammo_shells / item.ammo_shells; + if (player.ammo_shells < g_pickup_shells_max) + c = c + 1 - min(player.ammo_shells / g_pickup_shells_max, 1); if (item.ammo_nails) - c = c + player.ammo_nails / item.ammo_nails; + if (player.ammo_nails < g_pickup_nails_max) + c = c + 1 - min(player.ammo_nails / g_pickup_nails_max, 1); if (item.ammo_rockets) - c = c + player.ammo_rockets / item.ammo_rockets; + if (player.ammo_rockets < g_pickup_rockets_max) + c = c + 1 - min(player.ammo_rockets / g_pickup_rockets_max, 1); if (item.ammo_cells) - c = c + player.ammo_cells / item.ammo_cells; + if (player.ammo_cells < g_pickup_cells_max) + c = c + 1 - min(player.ammo_cells / g_pickup_cells_max, 1); if (item.armorvalue) - c = c + player.armorvalue / item.armorvalue; + if (player.armorvalue < item.max_armorvalue) + c = c + 1 - min(player.armorvalue / item.max_armorvalue, 1); if (item.health) - c = c + player.health / item.health / 10; - // the more ammo the player has, the less desirable this pickup becomes - c = 1 / (1 + c); + if (player.health < item.max_health) + c = c + 1 - min(player.health / item.max_health, 1); if (cvar("deathmatch") == 2) // weapon stay is on, so weapons the player already has are of no interest if (item.flags & FL_WEAPON) @@ -418,31 +471,31 @@ void minstagib_items (float itemid) void weapon_uzi (void) { if(!self.ammo_nails) - self.ammo_nails = 120; + self.ammo_nails = cvar("g_pickup_nails"); StartItem ("models/weapons/g_uzi.md3", "weapons/weaponpickup.ogg", 15, W_Name(WEP_UZI), IT_UZI, FL_WEAPON, weapon_pickupevalfunc, 1000); } void weapon_shotgun (void) { if(!self.ammo_shells) - self.ammo_shells = 15; + self.ammo_shells = cvar("g_pickup_shells"); StartItem ("models/weapons/g_shotgun.md3", "weapons/weaponpickup.ogg", 15, W_Name(WEP_SHOTGUN), IT_SHOTGUN, FL_WEAPON, weapon_pickupevalfunc, 1000); } void weapon_grenadelauncher (void) { if(!self.ammo_rockets) - self.ammo_rockets = 15; + self.ammo_rockets = cvar("g_pickup_rockets"); StartItem ("models/weapons/g_gl.md3", "weapons/weaponpickup.ogg", 15, W_Name(WEP_GRENADE_LAUNCHER), IT_GRENADE_LAUNCHER, FL_WEAPON, weapon_pickupevalfunc, 1000); } void weapon_electro (void) { if(!self.ammo_cells) - self.ammo_cells = 25; + self.ammo_cells = cvar("g_pickup_cells"); StartItem ("models/weapons/g_electro.md3", "weapons/weaponpickup.ogg", 15, W_Name(WEP_ELECTRO), IT_ELECTRO, FL_WEAPON, weapon_pickupevalfunc, 1000); } void weapon_crylink (void) { if(!self.ammo_cells) - self.ammo_cells = 25; + self.ammo_cells = cvar("g_pickup_cells"); StartItem ("models/weapons/g_crylink.md3", "weapons/weaponpickup.ogg", 15, W_Name(WEP_CRYLINK), IT_CRYLINK, FL_WEAPON, weapon_pickupevalfunc, 1000); } @@ -452,7 +505,7 @@ void weapon_nex (void) { } else { float nextime; if(!self.ammo_cells) - self.ammo_cells = 25; + self.ammo_cells = cvar("g_pickup_cells"); nextime = cvar("g_balance_nex_respawntime_modifier"); if(nextime) nextime = 15 * nextime; @@ -464,7 +517,7 @@ void weapon_nex (void) { void weapon_hagar (void) { if(!self.ammo_rockets) - self.ammo_rockets = 15; + self.ammo_rockets = cvar("g_pickup_rockets"); StartItem ("models/weapons/g_hagar.md3", "weapons/weaponpickup.ogg", 15, W_Name(WEP_HAGAR), IT_HAGAR, FL_WEAPON, weapon_pickupevalfunc, 1000); } @@ -473,56 +526,64 @@ void weapon_rocketlauncher (void) { minstagib_items(IT_CELLS); } else { if(!self.ammo_rockets) - self.ammo_rockets = 15; + self.ammo_rockets = g_pickup_rockets; StartItem ("models/weapons/g_rl.md3", "weapons/weaponpickup.ogg", 15, W_Name(WEP_ROCKET_LAUNCHER), IT_ROCKET_LAUNCHER, FL_WEAPON, weapon_pickupevalfunc, 1000); } } void item_rockets (void) { if(!self.ammo_rockets) - self.ammo_rockets = 15; + self.ammo_rockets = g_pickup_rockets; StartItem ("models/items/a_rockets.md3", "misc/itempickup.ogg", 15, "rockets", IT_ROCKETS, 0, commodity_pickupevalfunc, 100); } void item_bullets (void) { if(!self.ammo_nails) - self.ammo_nails = 120; + self.ammo_nails = g_pickup_nails; StartItem ("models/items/a_bullets.mdl", "misc/itempickup.ogg", 15, "bullets", IT_NAILS, 0, commodity_pickupevalfunc, 100); } void item_cells (void) { if(!self.ammo_cells) - self.ammo_cells = 25; + self.ammo_cells = g_pickup_cells; StartItem ("models/items/a_cells.md3", "misc/itempickup.ogg", 15, "cells", IT_CELLS, 0, commodity_pickupevalfunc, 100); } void item_shells (void) { if(!self.ammo_shells) - self.ammo_shells = 15; + self.ammo_shells = g_pickup_shells; StartItem ("models/items/a_shells.md3", "misc/itempickup.ogg", 15, "shells", IT_SHELLS, 0, commodity_pickupevalfunc, 100); } void item_armor1 (void) { if(!self.armorvalue) - self.armorvalue = 5; + self.armorvalue = g_pickup_armorshard; + if(!self.max_armorvalue) + self.max_armorvalue = g_pickup_armorshard_max; StartItem ("models/items/g_a1.md3", "misc/armor1.wav", 15, "Armor Shard", IT_ARMOR_SHARD, 0, commodity_pickupevalfunc, 100); } void item_armor25 (void) { if(!self.armorvalue) - self.armorvalue = 100; + self.armorvalue = g_pickup_armor; + if(!self.max_armorvalue) + self.max_armorvalue = g_pickup_armor_max; StartItem ("models/items/g_a25.md3", "misc/armor25.wav", 30, "Armor", IT_ARMOR, 0, commodity_pickupevalfunc, 2000); } void item_health1 (void) { if(!self.max_health) - self.max_health = 5; + self.max_health = g_pickup_healthshard_max; + if(!self.health) + self.health = g_pickup_healthshard; StartItem ("models/items/g_h1.md3", "misc/minihealth.ogg", 15, "5 Health", IT_5HP, 0, commodity_pickupevalfunc, 100); } void item_health25 (void) { if(!self.max_health) - self.max_health = 25; + self.max_health = g_pickup_health_max; + if(!self.health) + self.health = g_pickup_health; StartItem ("models/items/g_h25.md3", "misc/mediumhealth.ogg", 15, "25 Health", IT_25HP, 0, commodity_pickupevalfunc, 500); } @@ -537,7 +598,9 @@ void item_health100 (void) { minstagib_items(IT_NAILS); } else { if(!self.max_health) - self.max_health = 100; + self.max_health = g_pickup_healthmega_max; + if(!self.health) + self.health = g_pickup_healthmega; StartItem ("models/items/g_h100.md3", "misc/megahealth.ogg", 30, "100 Health", IT_HEALTH, 0, commodity_pickupevalfunc, 2000); } } diff --git a/data/qcsrc/server/w_common.qc b/data/qcsrc/server/w_common.qc index b6d444c23..2d16dfb28 100644 --- a/data/qcsrc/server/w_common.qc +++ b/data/qcsrc/server/w_common.qc @@ -49,14 +49,14 @@ void W_GiveWeapon (entity e, float wep, string name) self = oldself; } -void FireRailgunBullet (vector start, vector end, float bdamage, float deathtype) +void FireRailgunBullet (vector start, vector end, float bdamage, float bforce, float deathtype) { local vector hitloc, force, endpoint, dir; local entity ent; //local entity explosion; dir = normalize(end - start); - force = dir * 800; //(bdamage * 10); + force = dir * bforce; // go a little bit into the wall because we need to hit this wall later end = end + dir; @@ -131,7 +131,7 @@ void FireRailgunBullet (vector start, vector end, float bdamage, float deathtype trace_endpos = endpoint; } -void fireBullet (vector start, vector dir, float spread, float damage, float dtype, float tracer) +void fireBullet (vector start, vector dir, float spread, float damage, float force, float dtype, float tracer) { vector end; local entity e; @@ -170,6 +170,6 @@ void fireBullet (vector start, vector dir, float spread, float damage, float dty //else if (trace_ent.classname == "player" || trace_ent.classname == "corpse" || trace_ent.classname == "gib") //stuffcmd(self, "play2 misc/hit.wav\n"); //sound (self, CHAN_BODY, "misc/hit.wav", 1, ATTN_NORM); - Damage (trace_ent, self, self, damage, dtype, trace_endpos, dir * damage * 5); + Damage (trace_ent, self, self, damage, dtype, trace_endpos, dir * force); } } diff --git a/data/qcsrc/server/w_laser.qc b/data/qcsrc/server/w_laser.qc index 30ffeab4e..b8fc6348c 100644 --- a/data/qcsrc/server/w_laser.qc +++ b/data/qcsrc/server/w_laser.qc @@ -21,13 +21,16 @@ void W_Laser_Touch (void) self.event_damage = SUB_Null; - RadiusDamage (self, self.owner, cvar("g_balance_laser_damage"), cvar("g_balance_laser_edgedamage"), cvar("g_balance_laser_radius"), world, cvar("g_balance_laser_force"), IT_LASER); + if (self.dmg) + RadiusDamage (self, self.owner, cvar("g_balance_laser_secondary_damage"), cvar("g_balance_laser_secondary_edgedamage"), cvar("g_balance_laser_secondary_radius"), world, cvar("g_balance_laser_secondary_force"), IT_LASER); + else + RadiusDamage (self, self.owner, cvar("g_balance_laser_primary_damage"), cvar("g_balance_laser_primary_edgedamage"), cvar("g_balance_laser_primary_radius"), world, cvar("g_balance_laser_primary_force"), IT_LASER); sound (self, CHAN_BODY, "weapons/laserimpact.ogg", 1, ATTN_NORM); remove (self); } -void W_Laser_Attack (void) +void W_Laser_Attack (float issecondary) { local entity missile; @@ -37,8 +40,12 @@ void W_Laser_Attack (void) missile = spawn (); missile.owner = self; missile.classname = "laserbolt"; + missile.dmg = issecondary; missile.bot_dodge = TRUE; - missile.bot_dodgerating = cvar("g_balance_laser_damage"); + if (issecondary) + missile.bot_dodgerating = cvar("g_balance_laser_secondary_damage"); + else + missile.bot_dodgerating = cvar("g_balance_laser_primary_damage"); missile.movetype = MOVETYPE_FLY; missile.solid = SOLID_BBOX; @@ -47,14 +54,20 @@ void W_Laser_Attack (void) setsize (missile, '0 0 0', '0 0 0'); setorigin (missile, w_shotorg); - missile.velocity = w_shotdir * cvar("g_balance_laser_speed"); + if (issecondary) + missile.velocity = w_shotdir * cvar("g_balance_laser_secondary_speed"); + else + missile.velocity = w_shotdir * cvar("g_balance_laser_primary_speed"); W_SetupProjectileVelocity(missile); missile.angles = vectoangles (missile.velocity); //missile.glow_color = 250; // 244, 250 //missile.glow_size = 120; missile.touch = W_Laser_Touch; missile.think = SUB_Remove; - missile.nextthink = time + cvar("g_balance_laser_lifetime"); + if (issecondary) + missile.nextthink = time + cvar("g_balance_laser_secondary_lifetime"); + else + missile.nextthink = time + cvar("g_balance_laser_primary_lifetime"); missile.effects = EF_NOSHADOW | EF_FULLBRIGHT | EF_FULLBRIGHT | EF_LOWPRECISION; missile.flags = FL_PROJECTILE; @@ -62,19 +75,34 @@ void W_Laser_Attack (void) float(float req) w_laser = { + local float r1; + local float r2; if (req == WR_AIM) - self.button0 = bot_aim(cvar("g_balance_laser_speed"), 0, cvar("g_balance_laser_lifetime"), FALSE); + { + r1 = cvar("g_balance_laser_primary_damage"); + r2 = cvar("g_balance_laser_secondary_damage"); + if (random() * (r2 + r1) > r1) + self.button3 = bot_aim(cvar("g_balance_laser_secondary_speed"), 0, cvar("g_balance_laser_secondary_lifetime"), FALSE); + else + self.button0 = bot_aim(cvar("g_balance_laser_primary_speed"), 0, cvar("g_balance_laser_primary_lifetime"), FALSE); + } else if (req == WR_THINK) { + if (self.button3) + if (weapon_prepareattack(0, cvar("g_balance_laser_secondary_refire"))) + { + W_Laser_Attack(TRUE); + weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_laser_secondary_animtime"), w_ready); + } if (self.button0) - if (weapon_prepareattack(0, cvar("g_balance_laser_refire"))) + if (weapon_prepareattack(0, cvar("g_balance_laser_primary_refire"))) { - W_Laser_Attack(); - weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_laser_animtime"), w_ready); + W_Laser_Attack(FALSE); + weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_laser_primary_animtime"), w_ready); } - if (self.button3) - if (client_hasweapon(self, self.cnt, TRUE, FALSE)) - W_SwitchWeapon (self.cnt); + //if (self.button3) + //if (client_hasweapon(self, self.cnt, TRUE, FALSE)) + // W_SwitchWeapon (self.cnt); } else if (req == WR_SETUP) weapon_setup(WEP_LASER, "laser", 0); diff --git a/data/qcsrc/server/w_nex.qc b/data/qcsrc/server/w_nex.qc index ce4bae07f..85101ff40 100644 --- a/data/qcsrc/server/w_nex.qc +++ b/data/qcsrc/server/w_nex.qc @@ -6,9 +6,9 @@ void W_Nex_Attack (void) // assure that nexdamage is high enough in minstagib if (cvar("g_minstagib")) - FireRailgunBullet (w_shotorg, w_shotorg + w_shotdir * MAX_SHOT_DISTANCE, 1000, IT_NEX); + FireRailgunBullet (w_shotorg, w_shotorg + w_shotdir * MAX_SHOT_DISTANCE, 1000, 800, IT_NEX); else - FireRailgunBullet (w_shotorg, w_shotorg + w_shotdir * MAX_SHOT_DISTANCE, cvar("g_balance_nex_damage"), IT_NEX); + FireRailgunBullet (w_shotorg, w_shotorg + w_shotdir * MAX_SHOT_DISTANCE, cvar("g_balance_nex_damage"), cvar("g_balance_nex_force"), IT_NEX); // show as if shot started outside of gun // muzzleflash light @@ -160,6 +160,17 @@ float(float req) w_nex = } } } + else if (self.button3) + { + if (cvar("g_minstagib")) + { + if (self.jump_interval <= time) + { + self.jump_interval = time + 0.9; + W_Laser_Attack(FALSE); + } + } + } } else if (req == WR_SETUP) weapon_setup(WEP_NEX, "nex", IT_CELLS); diff --git a/data/qcsrc/server/w_rocketlauncher.qc b/data/qcsrc/server/w_rocketlauncher.qc index e7b1f3844..237e2af67 100644 --- a/data/qcsrc/server/w_rocketlauncher.qc +++ b/data/qcsrc/server/w_rocketlauncher.qc @@ -89,13 +89,32 @@ void W_Rocket_Think (void) { entity e; vector desireddir, olddir, newdir; - float turnrate; + float turnrate, velspeed; self.nextthink = time; if (time > self.cnt) { W_Rocket_Explode (); return; } + + if(cvar("g_laserguided_missile")) + { + // accelerate + makevectors(self.angles_x * '-1 0 0' + self.angles_y * '0 1 0'); + velspeed = cvar("g_balance_rocketlauncher_laserguided_speed") - (self.velocity * v_forward); + if (velspeed > 0) + self.velocity = self.velocity + v_forward * min(cvar("g_balance_rocketlauncher_laserguided_speedaccel") * frametime, velspeed); + } + else + { + // accelerate + makevectors(self.angles_x * '-1 0 0' + self.angles_y * '0 1 0'); + velspeed = cvar("g_balance_rocketlauncher_speed") - (self.velocity * v_forward); + if (velspeed > 0) + self.velocity = self.velocity + v_forward * min(cvar("g_balance_rocketlauncher_speedaccel") * frametime, velspeed); + } + + // laser guided, or remote detonation if (self.owner.weapon == WEP_ROCKET_LAUNCHER) { if(cvar("g_laserguided_missile")) @@ -132,14 +151,13 @@ void W_Rocket_Think (void) if(self.enemy != world) { //bprint("Targeting ", self.enemy.owner.netname, "'s laser\n"); - if(!self.speed) - self.speed = vlen(self.velocity); + velspeed = vlen(self.velocity); e = self.enemy;//self.owner.weaponentity.lasertarget; turnrate = cvar("g_balance_rocketlauncher_laserguided_turnrate");//0.65; // how fast to turn desireddir = normalize(e.origin - self.origin); // get direction from my position to the laser target - olddir = normalize(self.velocity); // get my current direction + olddir = normalize(self.velocity); // get my current direction newdir = normalize((olddir + desireddir * turnrate) * 0.5); // take the average of the 2 directions; not the best method but simple & easy - self.velocity = newdir * self.speed; // make me fly in the new direction at my flight speed + self.velocity = newdir * velspeed; // make me fly in the new direction at my flight speed self.angles = vectoangles(self.velocity); // turn model in the new flight direction self.owner.attack_finished = time + 0.2; @@ -207,9 +225,9 @@ void W_Rocket_Attack (void) setorigin (missile, w_shotorg); if(cvar("g_laserguided_missile") && self.laser_on) - missile.velocity = w_shotdir * cvar("g_balance_rocketlauncher_laserguided_speed"); + missile.velocity = w_shotdir * cvar("g_balance_rocketlauncher_laserguided_speedstart"); else - missile.velocity = w_shotdir * cvar("g_balance_rocketlauncher_speed"); + missile.velocity = w_shotdir * cvar("g_balance_rocketlauncher_speedstart"); W_SetupProjectileVelocity(missile); missile.angles = vectoangles (missile.velocity); @@ -279,7 +297,7 @@ float(float req) w_rlauncher = desirabledamage = desirabledamage - selfdamage * cvar("g_balance_selfdamagepercent"); if (self.team && teamplay == 2) desirabledamage = desirabledamage - teamdamage; - + missile = find(world, classname, "missile"); while (missile) { @@ -312,7 +330,7 @@ float(float req) w_rlauncher = self.button3 = TRUE; // dprint(ftos(random()/distance*300),">");dprint(ftos(frametime*bound(0,(10-skill)*0.2,1)),"\n"); } - + missile = find(missile, classname, "missile"); } // if we would be doing at X percent of the core damage, detonate it diff --git a/data/qcsrc/server/w_shotgun.qc b/data/qcsrc/server/w_shotgun.qc index ebef27cd5..8d32f9d77 100644 --- a/data/qcsrc/server/w_shotgun.qc +++ b/data/qcsrc/server/w_shotgun.qc @@ -4,15 +4,17 @@ void W_Shotgun_Attack (void) float sc; float bullets; float d; + float f; float spread; bullets = cvar("g_balance_shotgun_primary_bullets"); d = cvar("g_balance_shotgun_primary_damage"); + f = cvar("g_balance_shotgun_primary_force"); spread = cvar("g_balance_shotgun_primary_spread"); W_SetupShot (self, '15 8 -8', TRUE, 5, "weapons/shotgun_fire.ogg"); for (sc = 0;sc < bullets;sc = sc + 1) - fireBullet (w_shotorg, w_shotdir, spread, d, IT_SHOTGUN, sc < 3); + fireBullet (w_shotorg, w_shotdir, spread, d, f, IT_SHOTGUN, sc < 3); if (cvar("g_use_ammunition")) self.ammo_shells = self.ammo_shells - cvar("g_balance_shotgun_primary_ammo"); @@ -29,15 +31,17 @@ void W_Shotgun_Attack2 (void) float sc; float bullets; float d; + float f; float spread; bullets = cvar("g_balance_shotgun_secondary_bullets"); d = cvar("g_balance_shotgun_secondary_damage"); + f = cvar("g_balance_shotgun_secondary_force"); spread = cvar("g_balance_shotgun_secondary_spread"); W_SetupShot (self, '15 8 -8', TRUE, 5, "weapons/shotgun_fire.ogg"); for (sc = 0;sc < bullets;sc = sc + 1) - fireBullet (w_shotorg, w_shotdir, spread, d, IT_SHOTGUN, sc < 3); + fireBullet (w_shotorg, w_shotdir, spread, d, f, IT_SHOTGUN, sc < 3); if (cvar("g_use_ammunition")) self.ammo_shells = self.ammo_shells - cvar("g_balance_shotgun_secondary_ammo"); diff --git a/data/qcsrc/server/w_uzi.qc b/data/qcsrc/server/w_uzi.qc index c3722cf58..09c6651ef 100644 --- a/data/qcsrc/server/w_uzi.qc +++ b/data/qcsrc/server/w_uzi.qc @@ -21,9 +21,9 @@ void W_Uzi_Attack (void) self.attack_finished = time + cvar("g_balance_uzi_first_refire"); if (self.uzi_bulletcounter == 1) - fireBullet (w_shotorg, w_shotdir, cvar("g_balance_uzi_first_spread"), cvar("g_balance_uzi_first_damage"), IT_UZI, TRUE); + fireBullet (w_shotorg, w_shotdir, cvar("g_balance_uzi_first_spread"), cvar("g_balance_uzi_first_damage"), cvar("g_balance_uzi_first_force"), IT_UZI, TRUE); else - fireBullet (w_shotorg, w_shotdir, cvar("g_balance_uzi_sustained_spread"), cvar("g_balance_uzi_sustained_damage"), IT_UZI, (self.uzi_bulletcounter & 3) == 0); + fireBullet (w_shotorg, w_shotdir, cvar("g_balance_uzi_sustained_spread"), cvar("g_balance_uzi_sustained_damage"), cvar("g_balance_uzi_sustained_force"), IT_UZI, (self.uzi_bulletcounter & 3) == 0); // muzzle flash for 1st person view flash = spawn(); @@ -40,7 +40,7 @@ void W_Uzi_Attack (void) setmodel(flash2, "models/uziflash.md3"); setattachment(flash2, self.exteriorweaponentity, ""); SUB_SetFade(flash2, time, 0.2); - + // common properties flash.angles_z = flash2.angles_z = flash.v_angle_z + random() * 180; flash.alpha = flash2.alpha = 0.5; diff --git a/data/weapons.cfg b/data/weapons.cfg new file mode 100644 index 000000000..653f3d64f --- /dev/null +++ b/data/weapons.cfg @@ -0,0 +1,187 @@ +set g_start_weapon_laser 1 +set g_start_weapon_shotgun 1 +set g_start_weapon_uzi 0 +set g_start_weapon_grenadelauncher 0 +set g_start_weapon_electro 0 +set g_start_weapon_crylink 0 +set g_start_weapon_nex 0 +set g_start_weapon_hagar 0 +set g_start_weapon_rocketlauncher 0 +set g_start_ammo_shells 50 +set g_start_ammo_nails 0 +set g_start_ammo_rockets 0 +set g_start_ammo_cells 0 +set g_pickup_shells 15 +set g_pickup_shells_max 999 +set g_pickup_nails 120 +set g_pickup_nails_max 999 +set g_pickup_rockets 15 +set g_pickup_rockets_max 999 +set g_pickup_cells 25 +set g_pickup_cells_max 999 +set g_pickup_armorshard 5 +set g_pickup_armorshard_max 999 +set g_pickup_armor 100 +set g_pickup_armor_max 999 +set g_pickup_healthshard 5 +set g_pickup_healthshard_max 999 +set g_pickup_health 25 +set g_pickup_health_max 999 +set g_pickup_healthmega 100 +set g_pickup_healthmega_max 999 + +set g_balance_laser_primary_damage 35 +set g_balance_laser_primary_edgedamage 10 +set g_balance_laser_primary_force 400 +set g_balance_laser_primary_radius 70 +set g_balance_laser_primary_speed 9000 +set g_balance_laser_primary_refire 0.7 +set g_balance_laser_primary_animtime 0.3 +set g_balance_laser_primary_lifetime 30 +set g_balance_laser_secondary_damage 35 +set g_balance_laser_secondary_edgedamage 10 +set g_balance_laser_secondary_force 400 +set g_balance_laser_secondary_radius 70 +set g_balance_laser_secondary_speed 9000 +set g_balance_laser_secondary_refire 0.7 +set g_balance_laser_secondary_animtime 0.3 +set g_balance_laser_secondary_lifetime 30 + +set g_balance_shotgun_primary_bullets 5 +set g_balance_shotgun_primary_damage 12 +set g_balance_shotgun_primary_force 60 +set g_balance_shotgun_primary_spread 0.09 +set g_balance_shotgun_primary_refire 0.5 +set g_balance_shotgun_primary_animtime 0.2 +set g_balance_shotgun_primary_ammo 1 +set g_balance_shotgun_secondary_bullets 5 +set g_balance_shotgun_secondary_damage 12 +set g_balance_shotgun_secondary_force 60 +set g_balance_shotgun_secondary_spread 0.16 +set g_balance_shotgun_secondary_refire 1.35 +set g_balance_shotgun_secondary_animtime 0.2 +set g_balance_shotgun_secondary_ammo 1 + +set g_balance_uzi_first_damage 30 +set g_balance_uzi_first_force 150 +set g_balance_uzi_first_spread 0.01 +set g_balance_uzi_first_refire 0.2 +set g_balance_uzi_first_ammo 1 +set g_balance_uzi_sustained_damage 16 +set g_balance_uzi_sustained_force 80 +set g_balance_uzi_sustained_spread 0.05 +set g_balance_uzi_sustained_refire 0.1 +set g_balance_uzi_sustained_ammo 1 + +set g_balance_grenadelauncher_primary_damage 65 +set g_balance_grenadelauncher_primary_edgedamage 35 +set g_balance_grenadelauncher_primary_force 400 +set g_balance_grenadelauncher_primary_radius 140 +set g_balance_grenadelauncher_primary_speed 2000 +set g_balance_grenadelauncher_primary_speed_up 200 +set g_balance_grenadelauncher_primary_lifetime 30 +set g_balance_grenadelauncher_primary_refire 0.7 +set g_balance_grenadelauncher_primary_animtime 0.3 +set g_balance_grenadelauncher_primary_ammo 2 +set g_balance_grenadelauncher_secondary_damage 65 +set g_balance_grenadelauncher_secondary_edgedamage 35 +set g_balance_grenadelauncher_secondary_force 400 +set g_balance_grenadelauncher_secondary_radius 140 +set g_balance_grenadelauncher_secondary_speed 1400 +set g_balance_grenadelauncher_secondary_speed_up 200 +set g_balance_grenadelauncher_secondary_lifetime 2.5 +set g_balance_grenadelauncher_secondary_refire 0.6 +set g_balance_grenadelauncher_secondary_animtime 0.3 +set g_balance_grenadelauncher_secondary_ammo 2 + +set g_balance_electro_primary_damage 80 +set g_balance_electro_primary_edgedamage 0 +set g_balance_electro_primary_force 200 +set g_balance_electro_primary_radius 150 +set g_balance_electro_primary_speed 2000 +set g_balance_electro_primary_lifetime 30 +set g_balance_electro_primary_refire 0.6 +set g_balance_electro_primary_animtime 0.05 +set g_balance_electro_primary_ammo 2 +set g_balance_electro_secondary_damage 60 +set g_balance_electro_secondary_edgedamage 0 +set g_balance_electro_secondary_force 200 +set g_balance_electro_secondary_radius 150 +set g_balance_electro_secondary_speed 900 +set g_balance_electro_secondary_speed_up 200 +set g_balance_electro_secondary_lifetime 5 +set g_balance_electro_secondary_refire 0.3 +set g_balance_electro_secondary_animtime 0.05 +set g_balance_electro_secondary_ammo 2 +set g_balance_electro_combo_damage 70 +set g_balance_electro_combo_edgedamage 0 +set g_balance_electro_combo_force 200 +set g_balance_electro_combo_radius 250 + +set g_balance_crylink_primary_damage 15 +set g_balance_crylink_primary_edgedamage 0 +set g_balance_crylink_primary_force 55 +set g_balance_crylink_primary_radius 3 +set g_balance_crylink_primary_speed 7000 +set g_balance_crylink_primary_spread 0.06 +set g_balance_crylink_primary_shots 4 +set g_balance_crylink_primary_lifetime 30 +set g_balance_crylink_primary_refire 0.25 +set g_balance_crylink_primary_animtime 0.15 +set g_balance_crylink_primary_ammo 1 +set g_balance_crylink_secondary_damage 20 +set g_balance_crylink_secondary_edgedamage 0 +set g_balance_crylink_secondary_force 55 +set g_balance_crylink_secondary_radius 3 +set g_balance_crylink_secondary_speed 7000 +set g_balance_crylink_secondary_spread 0.08 +set g_balance_crylink_secondary_shots 7 +set g_balance_crylink_secondary_lifetime 30 +set g_balance_crylink_secondary_refire 0.5 +set g_balance_crylink_secondary_animtime 0.15 +set g_balance_crylink_secondary_ammo 3 + +set g_balance_nex_damage 140 +set g_balance_nex_force 800 +set g_balance_nex_refire 1.5 +set g_balance_nex_animtime 0.3 +set g_balance_minstagib_nex_refire 1.5 +set g_balance_minstagib_nex_animtime 0.3 +set g_balance_nex_ammo 5 +set g_balance_nex_respawntime_modifier 1 + +set g_balance_hagar_primary_damage 40 +set g_balance_hagar_primary_edgedamage 15 +set g_balance_hagar_primary_force 100 +set g_balance_hagar_primary_radius 70 +set g_balance_hagar_primary_spread 0.025 +set g_balance_hagar_primary_speed 3000 +set g_balance_hagar_primary_lifetime 30 +set g_balance_hagar_primary_refire 0.15 +set g_balance_hagar_primary_ammo 1 +set g_balance_hagar_secondary_damage 40 +set g_balance_hagar_secondary_edgedamage 15 +set g_balance_hagar_secondary_force 100 +set g_balance_hagar_secondary_radius 70 +set g_balance_hagar_secondary_spread 0.025 +set g_balance_hagar_secondary_speed 1400 +set g_balance_hagar_secondary_lifetime 30 +set g_balance_hagar_secondary_refire 0.15 +set g_balance_hagar_secondary_ammo 1 + +set g_balance_rocketlauncher_damage 130 +set g_balance_rocketlauncher_edgedamage 50 +set g_balance_rocketlauncher_force 600 +set g_balance_rocketlauncher_radius 170 +set g_balance_rocketlauncher_speed 850 +set g_balance_rocketlauncher_speedaccel 0 +set g_balance_rocketlauncher_speedstart 850 +set g_balance_rocketlauncher_lifetime 30 +set g_balance_rocketlauncher_refire 1 +set g_balance_rocketlauncher_animtime 0.3 +set g_balance_rocketlauncher_ammo 3 +set g_balance_rocketlauncher_laserguided_speed 1000 //650 +set g_balance_rocketlauncher_laserguided_speedaccel 0 +set g_balance_rocketlauncher_laserguided_speedstart 1000 +set g_balance_rocketlauncher_laserguided_turnrate 0.75 //0.5 +set g_balance_rocketlauncher_laserguided_allow_steal 1 diff --git a/pro/default.cfg b/pro/default.cfg index 0917faef2..cf464d770 100644 --- a/pro/default.cfg +++ b/pro/default.cfg @@ -65,19 +65,25 @@ sensitivity 6 seta scmenu_mouse_speed 1 v_gamma 1.125000 viewsize 110 -bgmvolume 1 +bgmvolume 0.2 volume 0.5 // fullscreen 800x600x32bit vid_bitsperpixel 32 vid_fullscreen 1 vid_width 800 vid_height 600 -// 2D resolution 640x480 -vid_conwidth 640 -vid_conheight 480 +// 2D resolution 800x600 +vid_conwidth 800 +vid_conheight 600 v_deathtilt 0 // needed for spectators (who are dead to avoid prediction) -cl_bob 0 -cl_rollangle 0 + +// these settings determine how much the view is affected by movement/damage +cl_bobcycle 0 // how long the cycle of up/down view movement takes (only works if cl_bob is not 0), default is 0.6 +cl_bob 0 // how much view moves up/down when moving (does not move if cl_bobcycle is 0, but still enables cl_bobmodel), default is 0.02 +cl_bobmodel 0 // whether to have gun model move around on screen when moving (only works if cl_bob is not 0), default is 1 +cl_rollangle 0 // amount of view tilt when strafing, default is 2.0 +v_kicktime 0 // how long damage kicks of the view last, default is 0.5 seconds +gl_polyblend 0 // whether to use screen tints, default is 1 // nexuiz-linux-*.sh will use this seta vid_x11_display "" @@ -86,8 +92,10 @@ seta vid_x11_display "" // ":n" use DISPLAY=:n, create it if needed // ":n/layout" use DISPLAY=:n, create it if needed with ServerLayout layout +cl_autodemo_nameformat demos/%Y-%m-%d_%H-%M + // server settings -hostname "Nexuiz Server" +hostname "Nexuiz Pro Server" sv_maxrate 10000 set sv_mapchange_delay 5 set minplayers 0 @@ -96,31 +104,10 @@ sv_cullentities_trace 1 // restart server if all players hit "ready"-button set sv_ready_restart 0 -cl_forwardspeed 400 -cl_backspeed 400 -cl_sidespeed 400 -cl_upspeed 400 -cl_movement 1 -cl_netinputpacketlosstolerance 0 -cl_movement_accelerate 5.5 -cl_movement_edgefriction 0 -cl_movement_friction 5 -cl_movement_jumpvelocity 300 -cl_movement_maxairspeed 220 -cl_movement_maxspeed 400 -cl_movement_stepheight 34 -cl_stairsmoothspeed 200 -seta cl_autoswitch 1 -edgefriction 0 -set g_balance_jumpheight 350 -sv_maxairspeed 220 -sv_accelerate 10 -sv_airaccelerate 0.5 -sv_friction 5 -sv_maxspeed 400 +// use default physics +exec physicsPro.cfg + set sv_spectator_speed_multiplier 1.5 -sv_stepheight 34 -set sv_friction_on_land 0 // factor of the speed which gets lost on landing seta sv_spectate 1 seta sv_defaultcharacter 0 seta sv_defaultplayermodel models/player/nexus.zym @@ -129,8 +116,22 @@ set sv_autoscreenshot 0 net_messagetimeout 300 net_connecttimeout 30 sv_jumpstep 1 // step up stairs while jumping, makes it easier to reach ledges -set sv_airaccel_sideways_friction 0.3 -set sv_airaccel_qw 0.93 + +cl_movement 1 +seta cl_autoswitch 1 +cl_netinputpacketlosstolerance 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_edgefriction $edgefriction +cl_movement_friction $sv_friction +cl_movement_jumpvelocity $g_balance_jumpheight +cl_movement_maxairspeed $sv_maxairspeed +cl_movement_maxspeed $sv_maxspeed +cl_movement_stepheight $sv_stepheight seta cl_playerdetailreduction 0 // the higher, the less detailed @@ -178,19 +179,6 @@ locs_enable 0 pausable 0 set g_antilag 0 set g_weapon_stay 0 -set g_start_weapon_laser 1 -set g_start_weapon_shotgun 1 -set g_start_weapon_uzi 0 -set g_start_weapon_grenadelauncher 0 -set g_start_weapon_electro 0 -set g_start_weapon_crylink 0 -set g_start_weapon_nex 0 -set g_start_weapon_hagar 0 -set g_start_weapon_rocketlauncher 0 -set g_start_ammo_shells 50 -set g_start_ammo_nails 0 -set g_start_ammo_rockets 0 -set g_start_ammo_cells 0 set g_powerup_superhealth 1 set g_powerup_strength 1 set g_powerup_shield 1 @@ -207,21 +195,22 @@ set g_vampire 0 set g_laserguided_missile 0 set g_midair 0 set g_midair_shieldtime 0.3 -set g_spawnshieldtime 0 +set g_spawnshieldtime 0.3 set g_forced_respawn 0 set g_fullbrightplayers 0 set g_fullbrightitems 0 set g_casings 0 -set g_norecoil 0 -set g_throughfloor 1 +set g_norecoil 1 +set g_throughfloor 0 set g_maplist_defaultlist 'dm_aggressor''dm_aneurysm''dm_basement''dm_bleach''dm_bluesky''dm_bloodprison''dm_darkzone''dm_downer''dm_evilspace''dm_farewell''dm_runningman''dm_runningman_1on1remix''dm_silvercity''dm_skyway''dm_slimepit''dm_soylent''dm_starship''dm_stormkeep''dm_toxic''dm_warfare''dom_aggressor''dom_aneurysm''dom_basement''dom_bleach''dom_darkzone''dom_downer''dom_evilspace''dom_runningman''dom_runningman_1on1remix''dom_silvercity''dom_skyway''dom_slimepit''dom_soylent''dom_starship''dom_stormkeep''dom_toxic''lms_aggressor''lms_basement''lms_bleach''lms_bluesky''lms_bloodprison''lms_downer''lms_evilspace''lms_farewell''lms_runningman''lms_runningman_1on1remix''lms_skyway''lms_slimepit''lms_soylent''lms_starship''lms_stormkeep''lms_toxic''lms_warfare''rune_aggressor''rune_aneurysm''rune_basement''rune_bleach''rune_darkzone''rune_downer''rune_evilspace''rune_runningman''rune_runningman_1on1remix''rune_silvercity''rune_skyway''rune_slimepit''rune_soylent''rune_starship''rune_stormkeep''rune_toxic''tdm_aggressor''tdm_aneurysm''tdm_basement''tdm_bleach''tdm_darkzone''tdm_downer''tdm_evilspace''tdm_farewell''tdm_runningman''tdm_runningman_1on1remix''tdm_silvercity''tdm_skyway''tdm_slimepit''tdm_soylent''tdm_starship''tdm_stormkeep''tdm_toxic''tdm_warfare' seta g_maplist $g_maplist_defaultlist seta g_maplist_index 0 // this is used internally for saving position in maplist cycle -seta g_maplist_selectrandom 0 // if 1, a random map will be chosen as next map; DEPRECATED in favor of g_maplist_shuffle +seta g_maplist_selectrandom 0 // if 1, a random map will be chosen as next map - DEPRECATED in favor of g_maplist_shuffle seta g_maplist_shuffle 0 // new randomization method: like selectrandom, but avoid playing the same maps in short succession. This works by taking out the first element and inserting it into g_maplist with a bias to the end of the list. alias g_maplist_shufflenow "set _g_maplist_shufflenow 1" alias g_maplist_add "set _g_maplist_add $1" alias g_maplist_remove "set _g_maplist_remove $1" +alias g_maplist_putfirst "set _g_maplist_putfirst $1" // timeout for kill credit when your damage knocks someone into a death trap set g_maxpushtime 8.0 @@ -246,7 +235,7 @@ seta g_domination_point_limit -1 seta g_runematch_point_limit -1 // respawn delay -set g_respawn_delay 0.5 +set g_respawn_delay 2 set g_respawn_waves 0 // when variables are set to 0, they take over the global setting... // to force disable delay or waves, set them to 0.125 @@ -282,6 +271,7 @@ seta g_friendlyfire 0.0 // for teamplay 4: fiendly fire factor set deathmatch_force_teamplay 0 // always play TDM on dm maps seta g_balance_teams 0 // automatically balance out players entering instead of asking them for their preferred team seta g_balance_teams_force 0 // automatically balance out teams when players move or disconnect +seta g_balance_teams_complain 0 // when 1, complain when team balance is off seta g_balance_teams_prevent_imbalance 0 // prevent players from changing to larger teams seta g_tdm_teams 2 // how many teams are in team deathmatch set g_changeteam_banned 0 // not allowed to change team @@ -389,18 +379,22 @@ set g_arena_powerups 0 // enables powerups (superhealth, strength and shield), // server game balance settings set g_balance_armor_regen 0 -set g_balance_armor_rot 0.1 +set g_balance_armor_rot 0 +set g_balance_armor_regenlinear 0 +set g_balance_armor_rotlinear 1 set g_balance_armor_stable 100 -set g_balance_armor_limit 999 +set g_balance_armor_limit 200 set g_balance_armor_start 0 set g_balance_armor_blockpercent 0.6 -set g_balance_health_regen 0.1 -set g_balance_health_rot 0.1 +set g_balance_health_regen 0 +set g_balance_health_rot 0 +set g_balance_health_regenlinear 10 +set g_balance_health_rotlinear 1 set g_balance_health_stable 100 -set g_balance_health_limit 999 -set g_balance_health_start 150 +set g_balance_health_limit 200 +set g_balance_health_start 125 set g_balance_selfdamagepercent 0.6 -set g_balance_weaponswitchdelay 0.15 +set g_balance_weaponswitchdelay 0 // powerup balance settings set g_balance_powerup_invincible_takedamage 0.2 set g_balance_powerup_invincible_time 30 @@ -409,151 +403,12 @@ set g_balance_powerup_strength_force 4 set g_balance_powerup_strength_time 30 // weapon balance settings follow +exec weaponsPro.cfg -set g_balance_laser_damage 35 -set g_balance_laser_edgedamage 10 -set g_balance_laser_force 400 -set g_balance_laser_radius 70 -set g_balance_laser_speed 9000 -set g_balance_laser_refire 0.7 -set g_balance_laser_animtime 0.3 -set g_balance_laser_lifetime 9 - -set g_balance_shotgun_primary_bullets 5 -set g_balance_shotgun_primary_damage 12 -set g_balance_shotgun_primary_spread 0.07 -set g_balance_shotgun_primary_refire 0.5 -set g_balance_shotgun_primary_animtime 0.2 -set g_balance_shotgun_primary_ammo 1 -set g_balance_shotgun_secondary_bullets 5 -set g_balance_shotgun_secondary_damage 12 -set g_balance_shotgun_secondary_spread 0.07 -set g_balance_shotgun_secondary_refire 1.35 -set g_balance_shotgun_secondary_animtime 0.2 -set g_balance_shotgun_secondary_ammo 1 - -set g_balance_uzi_first_damage 30 -set g_balance_uzi_first_spread 0.01 -set g_balance_uzi_first_refire 0.2 -set g_balance_uzi_first_ammo 1 -set g_balance_uzi_sustained_damage 16 -set g_balance_uzi_sustained_spread 0.05 -set g_balance_uzi_sustained_refire 0.1 -set g_balance_uzi_sustained_ammo 1 - -set g_balance_grenadelauncher_primary_damage 65 -set g_balance_grenadelauncher_primary_edgedamage 35 -set g_balance_grenadelauncher_primary_force 400 -set g_balance_grenadelauncher_primary_radius 140 -set g_balance_grenadelauncher_primary_speed 2000 -set g_balance_grenadelauncher_primary_speed_up 200 -set g_balance_grenadelauncher_primary_lifetime 30 -set g_balance_grenadelauncher_primary_refire 0.7 -set g_balance_grenadelauncher_primary_animtime 0.3 -set g_balance_grenadelauncher_primary_ammo 2 -set g_balance_grenadelauncher_secondary_damage 65 -set g_balance_grenadelauncher_secondary_edgedamage 35 -set g_balance_grenadelauncher_secondary_force 400 -set g_balance_grenadelauncher_secondary_radius 140 -set g_balance_grenadelauncher_secondary_speed 1400 -set g_balance_grenadelauncher_secondary_speed_up 200 -set g_balance_grenadelauncher_secondary_lifetime 2.5 -set g_balance_grenadelauncher_secondary_refire 0.6 -set g_balance_grenadelauncher_secondary_animtime 0.3 -set g_balance_grenadelauncher_secondary_ammo 2 - -set g_balance_electro_primary_damage 80 -set g_balance_electro_primary_edgedamage 0 -set g_balance_electro_primary_force 200 -set g_balance_electro_primary_radius 150 -set g_balance_electro_primary_speed 2000 -set g_balance_electro_primary_lifetime 2 -set g_balance_electro_primary_refire 0.9 -set g_balance_electro_primary_animtime 0.05 -set g_balance_electro_primary_ammo 2 -set g_balance_electro_secondary_damage 60 -set g_balance_electro_secondary_edgedamage 0 -set g_balance_electro_secondary_force 200 -set g_balance_electro_secondary_radius 150 -set g_balance_electro_secondary_speed 900 -set g_balance_electro_secondary_speed_up 200 -set g_balance_electro_secondary_lifetime 5 -set g_balance_electro_secondary_refire 0.3 -set g_balance_electro_secondary_animtime 0.05 -set g_balance_electro_secondary_ammo 2 -set g_balance_electro_combo_damage 70 -set g_balance_electro_combo_edgedamage 0 -set g_balance_electro_combo_force 200 -set g_balance_electro_combo_radius 250 - -set g_balance_crylink_primary_damage 15 -set g_balance_crylink_primary_edgedamage 0 -set g_balance_crylink_primary_force 55 -set g_balance_crylink_primary_radius 3 -set g_balance_crylink_primary_speed 7000 -set g_balance_crylink_primary_spread 0.08 -set g_balance_crylink_primary_shots 4 -set g_balance_crylink_primary_lifetime 9 -set g_balance_crylink_primary_refire 0.25 -set g_balance_crylink_primary_animtime 0.15 -set g_balance_crylink_primary_ammo 1 -set g_balance_crylink_secondary_damage 15 -set g_balance_crylink_secondary_edgedamage 0 -set g_balance_crylink_secondary_force 55 -set g_balance_crylink_secondary_radius 3 -set g_balance_crylink_secondary_speed 7000 -set g_balance_crylink_secondary_spread 0.08 -set g_balance_crylink_secondary_shots 7 -set g_balance_crylink_secondary_lifetime 9 -set g_balance_crylink_secondary_refire 0.5 -set g_balance_crylink_secondary_animtime 0.15 -set g_balance_crylink_secondary_ammo 3 - - -set g_balance_nex_damage 140 -set g_balance_nex_refire 1.5 -set g_balance_nex_animtime 0.3 -set g_balance_minstagib_nex_refire 1.5 -set g_balance_minstagib_nex_animtime 0.3 -set g_balance_nex_ammo 5 -set g_balance_nex_respawntime_modifier 1 - -set g_balance_hagar_primary_damage 40 -set g_balance_hagar_primary_edgedamage 15 -set g_balance_hagar_primary_force 100 -set g_balance_hagar_primary_radius 70 -set g_balance_hagar_primary_spread 0.025 -set g_balance_hagar_primary_speed 3000 -set g_balance_hagar_primary_lifetime 10 -set g_balance_hagar_primary_refire 0.15 -set g_balance_hagar_primary_ammo 1 -set g_balance_hagar_secondary_damage 40 -set g_balance_hagar_secondary_edgedamage 15 -set g_balance_hagar_secondary_force 100 -set g_balance_hagar_secondary_radius 70 -set g_balance_hagar_secondary_spread 0.025 -set g_balance_hagar_secondary_speed 1400 -set g_balance_hagar_secondary_lifetime 10 -set g_balance_hagar_secondary_refire 0.15 -set g_balance_hagar_secondary_ammo 1 - -set g_balance_rocketlauncher_damage 130 -set g_balance_rocketlauncher_edgedamage 50 -set g_balance_rocketlauncher_force 600 -set g_balance_rocketlauncher_radius 170 -set g_balance_rocketlauncher_speed 850 -set g_balance_rocketlauncher_lifetime 9 -set g_balance_rocketlauncher_refire 1 -set g_balance_rocketlauncher_animtime 0.3 -set g_balance_rocketlauncher_ammo 3 -set g_balance_rocketlauncher_laserguided_speed 1000 //650 -set g_balance_rocketlauncher_laserguided_turnrate 0.75 //0.5 -set g_balance_rocketlauncher_laserguided_allow_steal 1 - -set g_balance_falldamage_deadminspeed 150 -set g_balance_falldamage_minspeed 1400 -set g_balance_falldamage_factor 0.15 -set g_balance_falldamage_maxdamage 25 +set g_balance_falldamage_deadminspeed 650 +set g_balance_falldamage_minspeed 650 +set g_balance_falldamage_factor 0.0385 +set g_balance_falldamage_maxdamage 5 set g_balance_pause_armor_rot 5 set g_balance_pause_health_rot 5 @@ -568,6 +423,7 @@ set g_footsteps 0 // serverside footstep sounds r_shadow_bumpscale_bumpmap 4 r_shadow_bumpscale_basetexture 5 r_shadow_realtime_world_lightmaps 1 +r_ambient 20 cl_decals_fadetime 1 cl_decals_time 2 seta cl_nogibs 0 @@ -686,7 +542,7 @@ set sv_vote_commands "restart timelimit fraglimit chmap gotomap g_grappling_hook set sv_vote_call 1 // users can call a vote to become master set sv_vote_master 1 -// when set, users can use "vdo master (password)" to log in as master +// when set, users can use "vdo login (password)" to log in as master set sv_vote_master_password "" // set to 1 to allow to change you vote/mind set sv_vote_change 0 @@ -696,6 +552,8 @@ set sv_vote_singlecount 0 set sv_vote_timeout 60 // a player can not call a vote again for this many seconds set sv_vote_wait 120 +// a simple majority suffices to accept a vote (meaning: YES votes > NO votes, otherwise: YES votes > half of the players) +set sv_vote_simple_majority 0 alias vhelp "cmd vote help" alias vstatus "cmd vote status" alias vcall "cmd vote call $*" @@ -785,9 +643,35 @@ set sv_allow_shownames 1 alias teamstatus "set _scoreboard 1" -con_chatwidth 1.0 +con_chatwidth 0.6 +con_chat 5 +con_chatpos -7 +sbar_alpha_bg 0.4 net_banlist "" seta _alientrap_net_banlist "" -set g_waypoints_for_items 1 // make waypoints out of items; values: 0 = never, 1 = unless the mapper prevents it by worldspawn.spawnflags & 1, 2 = always +set g_waypoints_for_items 1 // make waypoints out of items, values: 0 = never, 1 = unless the mapper prevents it by worldspawn.spawnflags & 1, 2 = always + +set g_projectiles_newton_style 0 +// possible values: +// 0: absolute velocity projectiles (like Quake) +// 1: relative velocity projectiles, "Newtonian" (like Tribes 2) +// 2: relative velocity projectiles, but aim is precorrected so projectiles hit the crosshair (note: strafe rockets then are SLOWER than ones shot while standing, happens in 1 too when aiming correctly which is hard) +// 3: absolute velocity + player velocity component in shot direction (note: does NOT yield the right relative velocity, but may be good enough, but it is somewhat prone to sniper rockets) +// 4: just add the player velocity length to the absolute velocity (tZork's sniper rockets) + +set g_maplist_votable 5 +set g_maplist_votable_keeptwotime 15 +set g_maplist_votable_timeout 30 // note: must be below 50 seconds! +set g_maplist_votable_suggestions 2 +alias suggestmap "cmd suggestmap $1" + +set g_chat_flood_spl 0 // seconds between lines to not count as flooding +set g_chat_flood_lmax 0 // maximum number of lines per chat message at once +set g_chat_flood_burst 0 // allow bursts of so many chat lines +set g_chat_flood_spl_team 0 // \ +set g_chat_flood_lmax_team 0 // } same for say_team +set g_chat_flood_burst_team 0 // / +set g_chat_flood_notify_flooder 1 // when 0, the flooder still can see his own message +set g_chat_teamcolors 0 // colorize nicknames in team color for chat diff --git a/pro/physicsPro.cfg b/pro/physicsPro.cfg new file mode 100644 index 000000000..c50e168a7 --- /dev/null +++ b/pro/physicsPro.cfg @@ -0,0 +1,12 @@ +// these values match Quake3 +sv_maxspeed 320 +sv_maxairspeed $sv_maxspeed +sv_accelerate 10 +sv_airaccelerate 1 +sv_friction 6 +edgefriction 0 +sv_stepheight 34 // this is for Nexuiz maps, Quake3 used 18 +set g_balance_jumpheight 270 +set sv_friction_on_land 0 +set sv_airaccel_sideways_friction 0 +set sv_airaccel_qw 1 diff --git a/pro/weaponsPro.cfg b/pro/weaponsPro.cfg new file mode 100644 index 000000000..7d478f60c --- /dev/null +++ b/pro/weaponsPro.cfg @@ -0,0 +1,187 @@ +set g_start_weapon_laser 1 +set g_start_weapon_shotgun 1 +set g_start_weapon_uzi 0 +set g_start_weapon_grenadelauncher 0 +set g_start_weapon_electro 0 +set g_start_weapon_crylink 0 +set g_start_weapon_nex 0 +set g_start_weapon_hagar 0 +set g_start_weapon_rocketlauncher 0 +set g_start_ammo_shells 40 +set g_start_ammo_nails 0 +set g_start_ammo_rockets 0 +set g_start_ammo_cells 0 +set g_pickup_shells 20 +set g_pickup_shells_max 80 +set g_pickup_nails 100 +set g_pickup_nails_max 400 +set g_pickup_rockets 30 +set g_pickup_rockets_max 120 +set g_pickup_cells 30 +set g_pickup_cells_max 120 +set g_pickup_armorshard 5 +set g_pickup_armorshard_max 200 +set g_pickup_armor 100 +set g_pickup_armor_max 200 +set g_pickup_healthshard 5 +set g_pickup_healthshard_max 200 +set g_pickup_health 25 +set g_pickup_health_max 100 +set g_pickup_healthmega 100 +set g_pickup_healthmega_max 200 + +set g_balance_laser_primary_damage 35 +set g_balance_laser_primary_edgedamage 10 +set g_balance_laser_primary_force 400 +set g_balance_laser_primary_radius 70 +set g_balance_laser_primary_speed 9000 +set g_balance_laser_primary_refire 0.7 +set g_balance_laser_primary_animtime 0.3 +set g_balance_laser_primary_lifetime 30 +set g_balance_laser_secondary_damage 35 +set g_balance_laser_secondary_edgedamage 10 +set g_balance_laser_secondary_force 400 +set g_balance_laser_secondary_radius 70 +set g_balance_laser_secondary_speed 9000 +set g_balance_laser_secondary_refire 0.7 +set g_balance_laser_secondary_animtime 0.3 +set g_balance_laser_secondary_lifetime 30 + +set g_balance_shotgun_primary_bullets 8 +set g_balance_shotgun_primary_damage 9 +set g_balance_shotgun_primary_force 0 +set g_balance_shotgun_primary_spread 0.05 +set g_balance_shotgun_primary_refire 1.0 +set g_balance_shotgun_primary_animtime 0.2 +set g_balance_shotgun_primary_ammo 2 +set g_balance_shotgun_secondary_bullets 4 +set g_balance_shotgun_secondary_damage 11 +set g_balance_shotgun_secondary_force 0 +set g_balance_shotgun_secondary_spread 0.08 +set g_balance_shotgun_secondary_refire 1.5 +set g_balance_shotgun_secondary_animtime 0.2 +set g_balance_shotgun_secondary_ammo 1 + +set g_balance_uzi_first_damage 15 +set g_balance_uzi_first_force 0 +set g_balance_uzi_first_spread 0.02 +set g_balance_uzi_first_refire 0.2 +set g_balance_uzi_first_ammo 1 +set g_balance_uzi_sustained_damage 5 +set g_balance_uzi_sustained_force 0 +set g_balance_uzi_sustained_spread 0.06 +set g_balance_uzi_sustained_refire 0.05 +set g_balance_uzi_sustained_ammo 1 + +set g_balance_grenadelauncher_primary_damage 60 +set g_balance_grenadelauncher_primary_edgedamage 20 +set g_balance_grenadelauncher_primary_force 400 +set g_balance_grenadelauncher_primary_radius 140 +set g_balance_grenadelauncher_primary_speed 2000 +set g_balance_grenadelauncher_primary_speed_up 200 +set g_balance_grenadelauncher_primary_lifetime 30 +set g_balance_grenadelauncher_primary_refire 0.7 +set g_balance_grenadelauncher_primary_animtime 0.3 +set g_balance_grenadelauncher_primary_ammo 2 +set g_balance_grenadelauncher_secondary_damage 60 +set g_balance_grenadelauncher_secondary_edgedamage 20 +set g_balance_grenadelauncher_secondary_force 400 +set g_balance_grenadelauncher_secondary_radius 140 +set g_balance_grenadelauncher_secondary_speed 1400 +set g_balance_grenadelauncher_secondary_speed_up 200 +set g_balance_grenadelauncher_secondary_lifetime 2.5 +set g_balance_grenadelauncher_secondary_refire 0.6 +set g_balance_grenadelauncher_secondary_animtime 0.3 +set g_balance_grenadelauncher_secondary_ammo 2 + +set g_balance_electro_primary_damage 80 +set g_balance_electro_primary_edgedamage 0 +set g_balance_electro_primary_force 200 +set g_balance_electro_primary_radius 150 +set g_balance_electro_primary_speed 2000 +set g_balance_electro_primary_lifetime 30 +set g_balance_electro_primary_refire 0.6 +set g_balance_electro_primary_animtime 0.05 +set g_balance_electro_primary_ammo 4 +set g_balance_electro_secondary_damage 60 +set g_balance_electro_secondary_edgedamage 0 +set g_balance_electro_secondary_force 200 +set g_balance_electro_secondary_radius 150 +set g_balance_electro_secondary_speed 900 +set g_balance_electro_secondary_speed_up 200 +set g_balance_electro_secondary_lifetime 5 +set g_balance_electro_secondary_refire 0.3 +set g_balance_electro_secondary_animtime 0.05 +set g_balance_electro_secondary_ammo 3 +set g_balance_electro_combo_damage 70 +set g_balance_electro_combo_edgedamage 0 +set g_balance_electro_combo_force 200 +set g_balance_electro_combo_radius 250 + +set g_balance_crylink_primary_damage 20 +set g_balance_crylink_primary_edgedamage 0 +set g_balance_crylink_primary_force 0 +set g_balance_crylink_primary_radius 20 +set g_balance_crylink_primary_speed 7000 +set g_balance_crylink_primary_spread 0.02 +set g_balance_crylink_primary_shots 1 +set g_balance_crylink_primary_lifetime 30 +set g_balance_crylink_primary_refire 0.1 +set g_balance_crylink_primary_animtime 0.1 +set g_balance_crylink_primary_ammo 1 +set g_balance_crylink_secondary_damage 20 +set g_balance_crylink_secondary_edgedamage 0 +set g_balance_crylink_secondary_force 100 +set g_balance_crylink_secondary_radius 20 +set g_balance_crylink_secondary_speed 7000 +set g_balance_crylink_secondary_spread 0.08 +set g_balance_crylink_secondary_shots 5 +set g_balance_crylink_secondary_lifetime 30 +set g_balance_crylink_secondary_refire 0.5 +set g_balance_crylink_secondary_animtime 0.15 +set g_balance_crylink_secondary_ammo 5 + +set g_balance_nex_damage 70 +set g_balance_nex_force 0 +set g_balance_nex_refire 0.7 +set g_balance_nex_animtime 0.3 +set g_balance_minstagib_nex_refire 1.5 +set g_balance_minstagib_nex_animtime 0.3 +set g_balance_nex_ammo 5 +set g_balance_nex_respawntime_modifier 1 + +set g_balance_hagar_primary_damage 40 +set g_balance_hagar_primary_edgedamage 15 +set g_balance_hagar_primary_force 100 +set g_balance_hagar_primary_radius 70 +set g_balance_hagar_primary_spread 0.025 +set g_balance_hagar_primary_speed 3000 +set g_balance_hagar_primary_lifetime 30 +set g_balance_hagar_primary_refire 0.2 +set g_balance_hagar_primary_ammo 1 +set g_balance_hagar_secondary_damage 40 +set g_balance_hagar_secondary_edgedamage 15 +set g_balance_hagar_secondary_force 100 +set g_balance_hagar_secondary_radius 70 +set g_balance_hagar_secondary_spread 0.025 +set g_balance_hagar_secondary_speed 1400 +set g_balance_hagar_secondary_lifetime 30 +set g_balance_hagar_secondary_refire 0.2 +set g_balance_hagar_secondary_ammo 1 + +set g_balance_rocketlauncher_damage 100 +set g_balance_rocketlauncher_edgedamage 0 +set g_balance_rocketlauncher_force 600 +set g_balance_rocketlauncher_radius 120 +set g_balance_rocketlauncher_speed 900 +set g_balance_rocketlauncher_speedaccel 0 +set g_balance_rocketlauncher_speedstart 900 +set g_balance_rocketlauncher_lifetime 30 +set g_balance_rocketlauncher_refire 0.8 +set g_balance_rocketlauncher_animtime 0.3 +set g_balance_rocketlauncher_ammo 3 +set g_balance_rocketlauncher_laserguided_speed 1000 //650 +set g_balance_rocketlauncher_laserguided_speedaccel 0 +set g_balance_rocketlauncher_laserguided_speedstart 1000 +set g_balance_rocketlauncher_laserguided_turnrate 0.75 //0.5 +set g_balance_rocketlauncher_laserguided_allow_steal 1 -- 2.39.2