]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge remote branch 'origin/fruitiex/fruitbalance' into divVerent/fruitbalance
authorRudolf Polzer <divverent@alientrap.org>
Wed, 21 Jul 2010 18:31:12 +0000 (20:31 +0200)
committerRudolf Polzer <divverent@alientrap.org>
Wed, 21 Jul 2010 18:31:12 +0000 (20:31 +0200)
57 files changed:
balance.cfg
balance25.cfg
balanceFruit.cfg
balanceSamual.cfg
balanceXPM.cfg
models/weapons/h_shotgun.iqm
models/weapons/h_shotgun.iqm.framegroups
particles/gauntletbeam.tga [new file with mode: 0644]
particles/lgbeam.tga
physics10.cfg
physics11.cfg
physics151.cfg
physics151b.cfg
physics16rc1.cfg
physics20.cfg
physics25.cfg
physics26.cfg
physicsCPMA.cfg
physicsHavoc.cfg
physicsLeeStricklin.cfg
physicsLzd.cfg
physicsNoQWBunny-XPM.cfg [new file with mode: 0644]
physicsNoQWBunny.cfg
physicsNoQWBunny_easy.cfg
physicsQ.cfg
physicsQ2.cfg
physicsQ2a.cfg
physicsQ3.cfg
physicsQBF.cfg
physicsQBFplus.cfg
physicsSamual.cfg
physicsWarsow.cfg
physicsWarsowClassicBunny.cfg
physicsWarsowDev.cfg
physicsXPM.cfg
physicsXPMLight.cfg [new file with mode: 0644]
qcsrc/client/Defs.qc
qcsrc/client/Main.qc
qcsrc/client/View.qc
qcsrc/client/hook.qc
qcsrc/common/constants.qh
qcsrc/server/cl_client.qc
qcsrc/server/cl_physics.qc
qcsrc/server/g_world.qc
qcsrc/server/progs.src
qcsrc/server/sv_main.qc
qcsrc/server/w_campingrifle.qc
qcsrc/server/w_electro.qc
qcsrc/server/w_grenadelauncher.qc
qcsrc/server/w_laser.qc
qcsrc/server/w_laser.qh [new file with mode: 0644]
qcsrc/server/w_shotgun.qc
sound/weapons/gauntlet_fire.ogg
sound/weapons/gauntletbeam_fly.ogg [new file with mode: 0644]
sound/weapons/lgbeam_fire.ogg [new file with mode: 0644]
sound/weapons/lgbeam_fly.ogg
sound/weapons/shotgun_melee.ogg [new file with mode: 0644]

index 941f2329bd7e6a8b6908ccc9f83b1a84aaae6d15..123c242495f1350d8eb95f45bde3196bb523f4ef 100644 (file)
@@ -217,7 +217,7 @@ set g_balance_laser_primary_animtime 0.3
 set g_balance_laser_primary_lifetime 30
 set g_balance_laser_primary_shotangle 0
 set g_balance_laser_primary_delay 0.03
-set g_balance_laser_gauntlet 0
+set g_balance_laser_primary_gauntlet 0
 set g_balance_laser_secondary 0 // when 1, a secondary laser mode exists
 set g_balance_laser_secondary_damage 35
 set g_balance_laser_secondary_edgedamage 10
@@ -230,6 +230,7 @@ set g_balance_laser_secondary_animtime 0.3
 set g_balance_laser_secondary_lifetime 30
 set g_balance_laser_secondary_shotangle 0
 set g_balance_laser_secondary_delay 0
+set g_balance_laser_secondary_gauntlet 0
 // }}}
 // {{{ shotgun
 set g_balance_shotgun_primary_bullets 6
@@ -242,6 +243,11 @@ set g_balance_shotgun_primary_ammo 1
 set g_balance_shotgun_primary_speed 12000
 set g_balance_shotgun_primary_bulletconstant 75 // 3.8qu
 set g_balance_shotgun_secondary 1
+set g_balance_shotgun_secondary_melee 0 // ew, bad! Still uses the melee anim!
+set g_balance_shotgun_secondary_melee_delay 0.35 // match the anim
+set g_balance_shotgun_secondary_melee_range 60
+set g_balance_shotgun_secondary_melee_swing 50
+set g_balance_shotgun_secondary_melee_time 0.4
 set g_balance_shotgun_secondary_bullets 6
 set g_balance_shotgun_secondary_damage 9
 set g_balance_shotgun_secondary_force 60
@@ -527,6 +533,7 @@ set g_balance_campingrifle_primary_ammo 10
 set g_balance_campingrifle_primary_bulletconstant 130 // 56.3qu
 set g_balance_campingrifle_primary_burstcost 0.35 // require same cooldown as secondary, note it's smaller than primary refire time
 set g_balance_campingrifle_primary_bullethail 0
+set g_balance_campingrifle_secondary 1
 set g_balance_campingrifle_secondary_damage 15
 set g_balance_campingrifle_secondary_headshotaddeddamage 25
 set g_balance_campingrifle_secondary_spread 0.02
index 82f958e3af52b5082a46f7263d76b5ea5eb706a2..46b3dafab3b43d6f9a6114d07dfafffa51ec0d2a 100644 (file)
@@ -217,7 +217,7 @@ set g_balance_laser_primary_animtime 0.3
 set g_balance_laser_primary_lifetime 30
 set g_balance_laser_primary_shotangle 0
 set g_balance_laser_primary_delay 0
-set g_balance_laser_gauntlet 0
+set g_balance_laser_primary_gauntlet 0
 set g_balance_laser_secondary 0 // when 1, a secondary laser mode exists
 set g_balance_laser_secondary_damage 35
 set g_balance_laser_secondary_edgedamage 10
@@ -230,6 +230,7 @@ set g_balance_laser_secondary_animtime 0.3
 set g_balance_laser_secondary_lifetime 30
 set g_balance_laser_secondary_shotangle 0
 set g_balance_laser_secondary_delay 0
+set g_balance_laser_secondary_gauntlet 0
 // }}}
 // {{{ shotgun
 set g_balance_shotgun_primary_bullets 6
@@ -242,6 +243,11 @@ set g_balance_shotgun_primary_ammo 1
 set g_balance_shotgun_primary_speed 12000
 set g_balance_shotgun_primary_bulletconstant 75 // 3.8qu
 set g_balance_shotgun_secondary 1
+set g_balance_shotgun_secondary_melee 0 // ew, bad! Still uses the melee anim!
+set g_balance_shotgun_secondary_melee_delay 0.35 // match the anim
+set g_balance_shotgun_secondary_melee_range 60
+set g_balance_shotgun_secondary_melee_swing 50
+set g_balance_shotgun_secondary_melee_time 0.4
 set g_balance_shotgun_secondary_bullets 6
 set g_balance_shotgun_secondary_damage 9
 set g_balance_shotgun_secondary_force 60
@@ -527,6 +533,7 @@ set g_balance_campingrifle_primary_ammo 10
 set g_balance_campingrifle_primary_bulletconstant 130 // 56.3qu
 set g_balance_campingrifle_primary_burstcost 0
 set g_balance_campingrifle_primary_bullethail 0 // empty magazine on shot
+set g_balance_campingrifle_secondary 1
 set g_balance_campingrifle_secondary_damage 35
 set g_balance_campingrifle_secondary_headshotaddeddamage 15 // 50 damage only on head
 set g_balance_campingrifle_secondary_spread 0.008
index 9615f337b270d36f036cf7889d25d5f84dcf7658..a2bfdfb4669f3d4455b7e50f698f635f2c9660f0 100644 (file)
@@ -33,7 +33,7 @@ set g_warmup_start_ammo_fuel 0 "starting values when being in warmup-stage"
 set g_lms_start_health 250
 set g_lms_start_armor 100
 set g_lms_start_ammo_shells 30
-set g_lms_start_ammo_nails 300
+set g_lms_start_ammo_nails 250
 set g_lms_start_ammo_rockets 100
 set g_lms_start_ammo_cells 200
 set g_lms_start_ammo_fuel 0
@@ -58,7 +58,7 @@ set g_pickup_shells 10
 set g_pickup_shells_max 30
 set g_pickup_nails 120
 set g_pickup_nails_max 300
-set g_pickup_rockets 15
+set g_pickup_rockets 25
 set g_pickup_rockets_max 150
 set g_pickup_cells 25
 set g_pickup_cells_max 200
@@ -206,30 +206,31 @@ set g_balance_grapplehook_health 130
 
 // {{{ weapon properties
 // {{{ laser
-set g_balance_laser_primary_damage 20
-set g_balance_laser_primary_edgedamage 10
-set g_balance_laser_primary_force 200
+set g_balance_laser_primary_damage 30 // dps 50, hope that's not too high
+set g_balance_laser_primary_edgedamage 30
+set g_balance_laser_primary_force 235
 set g_balance_laser_primary_radius 70
-set g_balance_laser_primary_speed 9000
+set g_balance_laser_primary_speed 4500
 set g_balance_laser_primary_spread 0
-set g_balance_laser_primary_refire 0.8
-set g_balance_laser_primary_animtime 0.4
-set g_balance_laser_primary_lifetime 30
+set g_balance_laser_primary_refire 0.6
+set g_balance_laser_primary_animtime 0.6
+set g_balance_laser_primary_lifetime 5
 set g_balance_laser_primary_shotangle 0
 set g_balance_laser_primary_delay 0
-set g_balance_laser_gauntlet 0
-set g_balance_laser_secondary 0 // when 1, a secondary laser mode exists
-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_primary_gauntlet 0
+set g_balance_laser_secondary 1 // when 1, a secondary laser mode exists
+set g_balance_laser_secondary_damage 110 // dps
+set g_balance_laser_secondary_edgedamage 0
+set g_balance_laser_secondary_force 500
+set g_balance_laser_secondary_radius 45
+set g_balance_laser_secondary_speed 0
 set g_balance_laser_secondary_spread 0
-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_laser_secondary_refire 0.066
+set g_balance_laser_secondary_animtime 0.066
+set g_balance_laser_secondary_lifetime 0
 set g_balance_laser_secondary_shotangle 0
 set g_balance_laser_secondary_delay 0
+set g_balance_laser_secondary_gauntlet 1
 // }}}
 // {{{ shotgun
 set g_balance_shotgun_primary_bullets 16
@@ -241,14 +242,19 @@ set g_balance_shotgun_primary_animtime 0.4
 set g_balance_shotgun_primary_ammo 1
 set g_balance_shotgun_primary_speed 12000
 set g_balance_shotgun_primary_bulletconstant 75 // 3.8qu
-set g_balance_shotgun_secondary 0
+set g_balance_shotgun_secondary 1
+set g_balance_shotgun_secondary_melee 1
+set g_balance_shotgun_secondary_melee_delay 0.35 // match the anim
+set g_balance_shotgun_secondary_melee_range 60
+set g_balance_shotgun_secondary_melee_swing 50
+set g_balance_shotgun_secondary_melee_time 0.1
 set g_balance_shotgun_secondary_bullets 6 // one more per shot than 15/3 (primary bullets/amount of shots = 3)
-set g_balance_shotgun_secondary_damage 7
-set g_balance_shotgun_secondary_force 20
-set g_balance_shotgun_secondary_spread 0.20
-set g_balance_shotgun_secondary_refire 1.35
-set g_balance_shotgun_secondary_animtime 0.33
-set g_balance_shotgun_secondary_ammo 1
+set g_balance_shotgun_secondary_damage 115
+set g_balance_shotgun_secondary_force 150
+set g_balance_shotgun_secondary_spread 0
+set g_balance_shotgun_secondary_refire 1.1
+set g_balance_shotgun_secondary_animtime 1
+set g_balance_shotgun_secondary_ammo 0
 set g_balance_shotgun_secondary_speed 12000
 set g_balance_shotgun_secondary_bulletconstant 75 // 3.8qu
 // }}}
@@ -274,9 +280,9 @@ set g_balance_grenadelauncher_primary_damage 100
 set g_balance_grenadelauncher_primary_edgedamage 30
 set g_balance_grenadelauncher_primary_force 300
 set g_balance_grenadelauncher_primary_radius 200
-set g_balance_grenadelauncher_primary_speed 1000
+set g_balance_grenadelauncher_primary_speed 800
 set g_balance_grenadelauncher_primary_speed_up 0
-set g_balance_grenadelauncher_primary_speed_z 200
+set g_balance_grenadelauncher_primary_speed_z 350
 set g_balance_grenadelauncher_primary_spread 0
 set g_balance_grenadelauncher_primary_lifetime 5
 set g_balance_grenadelauncher_primary_lifetime2 0.8
@@ -288,11 +294,11 @@ set g_balance_grenadelauncher_secondary_damage 100
 set g_balance_grenadelauncher_secondary_edgedamage 30
 set g_balance_grenadelauncher_secondary_force 300
 set g_balance_grenadelauncher_secondary_radius 200
-set g_balance_grenadelauncher_secondary_speed 600
+set g_balance_grenadelauncher_secondary_speed 800
 set g_balance_grenadelauncher_secondary_speed_up 0
-set g_balance_grenadelauncher_secondary_speed_z 200
+set g_balance_grenadelauncher_secondary_speed_z 350
 set g_balance_grenadelauncher_secondary_spread 0
-set g_balance_grenadelauncher_secondary_lifetime 1.5
+set g_balance_grenadelauncher_secondary_lifetime 2
 set g_balance_grenadelauncher_secondary_refire 0.8
 set g_balance_grenadelauncher_secondary_animtime 0.2
 set g_balance_grenadelauncher_secondary_ammo 2
@@ -305,10 +311,10 @@ set g_balance_grenadelauncher_secondary_bouncestop 0.075
 set g_balance_electro_lightning 1
 set g_balance_electro_primary_damage 100
 set g_balance_electro_primary_edgedamage 0
-set g_balance_electro_primary_force 800
+set g_balance_electro_primary_force 600
 set g_balance_electro_primary_force_up 125
 set g_balance_electro_primary_radius 850
-set g_balance_electro_primary_comboradius 45
+set g_balance_electro_primary_comboradius 75
 set g_balance_electro_primary_speed 0
 set g_balance_electro_primary_spread 0
 set g_balance_electro_primary_lifetime 0
@@ -316,29 +322,29 @@ set g_balance_electro_primary_refire 0.03333333
 set g_balance_electro_primary_animtime 0.03333333
 set g_balance_electro_primary_ammo 6
 set g_balance_electro_primary_range 800
-set g_balance_electro_secondary_damage 50
+set g_balance_electro_secondary_damage 40
 set g_balance_electro_secondary_spread 0
 set g_balance_electro_secondary_edgedamage 0
 set g_balance_electro_secondary_force 100
 set g_balance_electro_secondary_radius 100
-set g_balance_electro_secondary_speed 800
+set g_balance_electro_secondary_speed 500
 set g_balance_electro_secondary_speed_up 0
-set g_balance_electro_secondary_speed_z 200
+set g_balance_electro_secondary_speed_z 300
 set g_balance_electro_secondary_spread 0.08
-set g_balance_electro_secondary_lifetime 3
-set g_balance_electro_secondary_refire 0.6
+set g_balance_electro_secondary_lifetime 3.5
+set g_balance_electro_secondary_refire 0.5
 set g_balance_electro_secondary_refire2 0
-set g_balance_electro_secondary_animtime 0.6
+set g_balance_electro_secondary_animtime 0.5
 set g_balance_electro_secondary_ammo 2
-set g_balance_electro_secondary_health 5
+set g_balance_electro_secondary_health 10
 set g_balance_electro_secondary_damageforcescale 4
-set g_balance_electro_secondary_count 3
-set g_balance_electro_combo_damage 50
+set g_balance_electro_secondary_count 1
+set g_balance_electro_combo_damage 40
 set g_balance_electro_combo_edgedamage 0
-set g_balance_electro_combo_force 150
+set g_balance_electro_combo_force 80
 set g_balance_electro_combo_radius 250
 set g_balance_electro_combo_comboradius 0
-set g_balance_electro_combo_speed 2000
+set g_balance_electro_combo_speed 400
 // }}}
 // {{{ crylink
 set g_balance_crylink_primary_damage 12
@@ -403,7 +409,7 @@ set g_balance_hagar_primary_force 70
 set g_balance_hagar_primary_radius 70
 set g_balance_hagar_primary_spread 0.1
 set g_balance_hagar_primary_speed 1800
-set g_balance_hagar_primary_lifetime 30
+set g_balance_hagar_primary_lifetime 5
 set g_balance_hagar_primary_refire 0.12
 set g_balance_hagar_primary_ammo 1
 set g_balance_hagar_secondary 1
@@ -413,7 +419,7 @@ set g_balance_hagar_secondary_force 70
 set g_balance_hagar_secondary_radius 50
 set g_balance_hagar_secondary_spread 0.15
 set g_balance_hagar_secondary_speed 1800
-set g_balance_hagar_secondary_lifetime_min 30
+set g_balance_hagar_secondary_lifetime_min 5
 set g_balance_hagar_secondary_lifetime_rand 0
 set g_balance_hagar_secondary_refire 0.12
 set g_balance_hagar_secondary_ammo 1
@@ -426,7 +432,7 @@ set g_balance_rocketlauncher_radius 100
 set g_balance_rocketlauncher_speed 1000
 set g_balance_rocketlauncher_speedaccel 0
 set g_balance_rocketlauncher_speedstart 1000
-set g_balance_rocketlauncher_lifetime 30
+set g_balance_rocketlauncher_lifetime 5
 set g_balance_rocketlauncher_refire 1
 set g_balance_rocketlauncher_animtime 0.2
 set g_balance_rocketlauncher_ammo 3
@@ -452,7 +458,7 @@ set g_balance_rocketlauncher_remote_force 350
 set g_balance_porto_primary_refire 1.5
 set g_balance_porto_primary_animtime 0.3
 set g_balance_porto_primary_speed 2000
-set g_balance_porto_primary_lifetime 30
+set g_balance_porto_primary_lifetime 5
 set g_balance_portal_health 200 // these get recharged whenever the portal is used
 set g_balance_portal_lifetime 15 // these get recharged whenever the portal is used
 // }}}
@@ -468,7 +474,7 @@ set g_balance_hook_secondary_edgedamage 5 // not much
 set g_balance_hook_secondary_radius 500 // LOTS
 set g_balance_hook_secondary_force -2000 // LOTS
 set g_balance_hook_secondary_ammo 50 // a whole pack
-set g_balance_hook_secondary_lifetime 30 // infinite
+set g_balance_hook_secondary_lifetime 5 // infinite
 set g_balance_hook_secondary_speed 0 // not much throwing
 set g_balance_hook_secondary_gravity 5 // fast falling
 set g_balance_hook_secondary_refire 3 // don't drop too many bombs...
@@ -510,25 +516,26 @@ set g_balance_hlac_secondary_ammo 10
 set g_balance_hlac_secondary_shots 6
 // }}}
 // {{{ campingrifle
-set g_balance_campingrifle_magazinecapacity 8
+set g_balance_campingrifle_magazinecapacity 0
 set g_balance_campingrifle_reloadtime 2 // matches reload anim
 set g_balance_campingrifle_auto_reload_after_changing_weapons 0
 set g_balance_campingrifle_bursttime 0
 set g_balance_campingrifle_tracer 1
-set g_balance_campingrifle_primary_damage 60
-set g_balance_campingrifle_primary_headshotaddeddamage 100
+set g_balance_campingrifle_primary_damage 50
+set g_balance_campingrifle_primary_headshotaddeddamage 35
 set g_balance_campingrifle_primary_spread 0
 set g_balance_campingrifle_primary_force 2
 set g_balance_campingrifle_primary_speed 35000
 set g_balance_campingrifle_primary_lifetime 5
 set g_balance_campingrifle_primary_refire 0.8
-set g_balance_campingrifle_primary_animtime 0.3
+set g_balance_campingrifle_primary_animtime 0.8
 set g_balance_campingrifle_primary_ammo 10
 set g_balance_campingrifle_primary_bulletconstant 130 // 56.3qu
 set g_balance_campingrifle_primary_burstcost 0
 set g_balance_campingrifle_primary_bullethail 0 // empty magazine on shot
-set g_balance_campingrifle_secondary_damage 35
-set g_balance_campingrifle_secondary_headshotaddeddamage 15 // 50 damage only on head
+set g_balance_campingrifle_secondary 0
+set g_balance_campingrifle_secondary_damage 15
+set g_balance_campingrifle_secondary_headshotaddeddamage 25 // 50 damage only on head
 set g_balance_campingrifle_secondary_spread 0.008
 set g_balance_campingrifle_secondary_force 1
 set g_balance_campingrifle_secondary_speed 20000
index 715ae6f6771094300f8457a82fceacfc0938fd03..6cdcb8a164488ba9d7306b5d4042593313b465c4 100644 (file)
@@ -217,7 +217,7 @@ set g_balance_laser_primary_animtime 0.3
 set g_balance_laser_primary_lifetime 30
 set g_balance_laser_primary_shotangle 0
 set g_balance_laser_primary_delay 0.03
-set g_balance_laser_gauntlet 0
+set g_balance_laser_primary_gauntlet 0
 set g_balance_laser_secondary 0 // when 1, a secondary laser mode exists
 set g_balance_laser_secondary_damage 25
 set g_balance_laser_secondary_edgedamage 10
@@ -230,6 +230,7 @@ set g_balance_laser_secondary_animtime 0.3
 set g_balance_laser_secondary_lifetime 30
 set g_balance_laser_secondary_shotangle -90
 set g_balance_laser_secondary_delay 0
+set g_balance_laser_secondary_gauntlet 0
 // }}}
 // {{{ shotgun
 set g_balance_shotgun_primary_bullets 6
@@ -242,6 +243,11 @@ set g_balance_shotgun_primary_ammo 1
 set g_balance_shotgun_primary_speed 8000
 set g_balance_shotgun_primary_bulletconstant 75 // 3.8qu
 set g_balance_shotgun_secondary 1
+set g_balance_shotgun_secondary_melee 0 // ew, bad! Still uses the melee anim!
+set g_balance_shotgun_secondary_melee_delay 0.35 // match the anim
+set g_balance_shotgun_secondary_melee_range 60
+set g_balance_shotgun_secondary_melee_swing 50
+set g_balance_shotgun_secondary_melee_time 0.4
 set g_balance_shotgun_secondary_bullets 6
 set g_balance_shotgun_secondary_damage 8
 set g_balance_shotgun_secondary_force 15
@@ -527,6 +533,7 @@ set g_balance_campingrifle_primary_ammo 10
 set g_balance_campingrifle_primary_bulletconstant 130 // 56.3qu
 set g_balance_campingrifle_primary_burstcost 0.35 // require same cooldown as secondary, note it's smaller than primary refire time
 set g_balance_campingrifle_primary_bullethail 0
+set g_balance_campingrifle_secondary 1
 set g_balance_campingrifle_secondary_damage 15
 set g_balance_campingrifle_secondary_headshotaddeddamage 25
 set g_balance_campingrifle_secondary_spread 0.02
index 2eb8abb395f36af776c83af3354ef0f94064dbda..acca20694527ee9289d0cb4c33bdb37d2b51ef83 100644 (file)
@@ -217,7 +217,7 @@ set g_balance_laser_primary_animtime 0.066
 set g_balance_laser_primary_lifetime 0
 set g_balance_laser_primary_shotangle 0
 set g_balance_laser_primary_delay 0
-set g_balance_laser_gauntlet 1
+set g_balance_laser_primary_gauntlet 1
 set g_balance_laser_secondary 0 // when 1, a secondary laser mode exists
 set g_balance_laser_secondary_damage 35
 set g_balance_laser_secondary_edgedamage 10
@@ -230,6 +230,7 @@ set g_balance_laser_secondary_animtime 0
 set g_balance_laser_secondary_lifetime 30
 set g_balance_laser_secondary_shotangle 0
 set g_balance_laser_secondary_delay 0
+set g_balance_laser_secondary_gauntlet 0
 // }}}
 // {{{ shotgun
 set g_balance_shotgun_primary_bullets 16
@@ -242,6 +243,11 @@ set g_balance_shotgun_primary_ammo 1
 set g_balance_shotgun_primary_speed 12000
 set g_balance_shotgun_primary_bulletconstant 75 // 3.8qu
 set g_balance_shotgun_secondary 0
+set g_balance_shotgun_secondary_melee 0 // ew, bad! Still uses the melee anim!
+set g_balance_shotgun_secondary_melee_delay 0.35 // match the anim
+set g_balance_shotgun_secondary_melee_range 60
+set g_balance_shotgun_secondary_melee_swing 50
+set g_balance_shotgun_secondary_melee_time 0.4
 set g_balance_shotgun_secondary_bullets 6 // one more per shot than 15/3 (primary bullets/amount of shots = 3)
 set g_balance_shotgun_secondary_damage 7
 set g_balance_shotgun_secondary_force 20
@@ -527,6 +533,7 @@ set g_balance_campingrifle_primary_ammo 10
 set g_balance_campingrifle_primary_bulletconstant 130 // 56.3qu
 set g_balance_campingrifle_primary_burstcost 0
 set g_balance_campingrifle_primary_bullethail 0 // empty magazine on shot
+set g_balance_campingrifle_secondary 1
 set g_balance_campingrifle_secondary_damage 35
 set g_balance_campingrifle_secondary_headshotaddeddamage 15 // 50 damage only on head
 set g_balance_campingrifle_secondary_spread 0.008
index 1fb76f81d1459fe1ce5eb5c09e5b30e60fb06a53..89b121b90d9fbd9a0e6500c57d1378bba31ffd40 100644 (file)
Binary files a/models/weapons/h_shotgun.iqm and b/models/weapons/h_shotgun.iqm differ
index 0a59625b6a6aa297525c008a66ba879537a5ac08..1c95207bde9f3573e3ba990ca1fe95651c68bfc3 100644 (file)
@@ -1,4 +1,6 @@
 1 8 20 0 // fire
-9 5 20 0 // fire2
-15 200 20 1 // idle
-215 40 20 0 // reload
+9 23 20 0 // fire2
+32 200 20 1 // idle
+232 40 20 0 // reload
+// compile opts used in the iqm exporter (apparently needed to prevent insane ram usage):
+// fire:1:8, fire2:1:23, idle:1:200, reload:1:40
diff --git a/particles/gauntletbeam.tga b/particles/gauntletbeam.tga
new file mode 100644 (file)
index 0000000..20a6ee5
Binary files /dev/null and b/particles/gauntletbeam.tga differ
index cb9a696265d2b85207a33e27a5e6e5d8d20877c3..331f2a8ed0e962b03ca300dc73ff609fb93abd2e 100644 (file)
Binary files a/particles/lgbeam.tga and b/particles/lgbeam.tga differ
index 4631d5ea7b5f6d129267ab4858387545ea97fd76..6e112b9f67f3ccdcc7e26a0c7477a4fe85d16120 100644 (file)
@@ -18,6 +18,7 @@ sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_airstrafeaccel_qw 0
 sv_aircontrol 0
+sv_aircontrol_penalty 0
 sv_aircontrol_power 2
 sv_airspeedlimit_nonqw 0
 sv_warsowbunny_turnaccel 0
index 8c8219af5fa0fd30a05e4f178a865a6e1a68690c..d4e1f54ababe70d5aadcbc7cdac254b344881e94 100644 (file)
@@ -18,6 +18,7 @@ sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_airstrafeaccel_qw 0
 sv_aircontrol 0
+sv_aircontrol_penalty 0
 sv_aircontrol_power 2
 sv_airspeedlimit_nonqw 0
 sv_warsowbunny_turnaccel 0
index 9707f6f7ce6002d736d5c00b75256921d162f1eb..6cb19f1bde23333f0f2363419496b0dc72b3ce5c 100644 (file)
@@ -18,6 +18,7 @@ sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_airstrafeaccel_qw 0
 sv_aircontrol 0
+sv_aircontrol_penalty 0
 sv_aircontrol_power 2
 sv_airspeedlimit_nonqw 0
 sv_warsowbunny_turnaccel 0
index 475875b1a2f316341c8c975580d58188292addc1..4796765cd3db3c906d7c0b436120d755d2f7c9b9 100644 (file)
@@ -18,6 +18,7 @@ sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_airstrafeaccel_qw 0
 sv_aircontrol 0
+sv_aircontrol_penalty 0
 sv_aircontrol_power 2
 sv_airspeedlimit_nonqw 0
 sv_warsowbunny_turnaccel 0
index 68a8f198ef6e48d074efa4aa153b53f110b7b9de..c4d60c7f333b0a84d84315158ed8f82c77ff308e 100644 (file)
@@ -18,6 +18,7 @@ sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_airstrafeaccel_qw 0
 sv_aircontrol 0
+sv_aircontrol_penalty 0
 sv_aircontrol_power 2
 sv_airspeedlimit_nonqw 0
 sv_warsowbunny_turnaccel 0
index b2e056ee5a9e092fd0dc011683ccdae0ac5e6449..d317514c00f0232528c7c97a3078c976bdbc3f07 100644 (file)
@@ -18,6 +18,7 @@ sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_airstrafeaccel_qw 0
 sv_aircontrol 0
+sv_aircontrol_penalty 0
 sv_aircontrol_power 2
 sv_airspeedlimit_nonqw 0
 sv_warsowbunny_turnaccel 0
index 85e4841cd127b739ddfcfc2e757e020787557e53..af5f3863278bdab434c3217c22fbc00062607ef6 100644 (file)
@@ -18,6 +18,7 @@ sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_airstrafeaccel_qw 0
 sv_aircontrol 0
+sv_aircontrol_penalty 0
 sv_aircontrol_power 2
 sv_airspeedlimit_nonqw 0
 sv_warsowbunny_turnaccel 0
index 0e4de396e70cdcb29b59e143a6e70ca021ec9edf..8fa5abc006df61b586cd358c6b4f55cab50feeca 100644 (file)
@@ -18,6 +18,7 @@ sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_airstrafeaccel_qw 0
 sv_aircontrol 0
+sv_aircontrol_penalty 0
 sv_aircontrol_power 2
 sv_airspeedlimit_nonqw 0
 sv_warsowbunny_turnaccel 0
index d572e6d97f5606864aa6e57f4edb976c10596ef5..5660a33421e5d6d3f65b4651789af40e2dc33334 100644 (file)
@@ -18,6 +18,7 @@ sv_airstrafeaccelerate 70
 sv_maxairstrafespeed 30
 sv_airstrafeaccel_qw 0
 sv_aircontrol 150
+sv_aircontrol_penalty 0
 sv_aircontrol_power 2
 sv_airspeedlimit_nonqw 0
 sv_warsowbunny_turnaccel 0
index eb63775623b486ae5e77ed5a0cd8c64e6fd5face..f328f8967b67db1c46b4af61d66c5dd87951e2da 100644 (file)
@@ -18,6 +18,7 @@ sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_airstrafeaccel_qw 0
 sv_aircontrol 0
+sv_aircontrol_penalty 0
 sv_aircontrol_power 2
 sv_airspeedlimit_nonqw 0
 sv_warsowbunny_turnaccel 0
index 4a959db3e94685a9b405861c8ef01f7d421d411e..b162e5f80096f1d8ea2d970afc348f5aa80976dc 100644 (file)
@@ -19,6 +19,7 @@ sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_airstrafeaccel_qw 0
 sv_aircontrol 0
+sv_aircontrol_penalty 0
 sv_aircontrol_power 2
 sv_airspeedlimit_nonqw 0
 sv_warsowbunny_turnaccel 0
index 2b437d3443a0dd62dfcad4602064d7de51c07dd2..064499002a2981fd266240bbb63bc2467eafc4dd 100644 (file)
@@ -19,6 +19,7 @@ sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_airstrafeaccel_qw 0
 sv_aircontrol 0
+sv_aircontrol_penalty 0
 sv_aircontrol_power 2
 sv_airspeedlimit_nonqw 0
 sv_warsowbunny_turnaccel 0
diff --git a/physicsNoQWBunny-XPM.cfg b/physicsNoQWBunny-XPM.cfg
new file mode 100644 (file)
index 0000000..1beaeda
--- /dev/null
@@ -0,0 +1,36 @@
+// 2.0-2.4.2 physics minus QW-bunnyhopping-bug, faster onground accel, CPMA air control
+sv_gravity 800
+sv_maxspeed 320
+
+sv_maxairspeed 320
+
+sv_stopspeed 100
+sv_accelerate 15
+sv_airaccelerate 2
+sv_friction 8
+edgefriction 1
+sv_stepheight 34
+
+sv_jumpvelocity 300
+sv_wateraccelerate 4
+sv_waterfriction 1
+sv_airaccel_sideways_friction 0
+sv_airaccel_qw -0.937
+
+sv_airstopaccelerate 3
+sv_airstrafeaccelerate 24
+sv_maxairstrafespeed 100
+sv_airstrafeaccel_qw -0.979
+sv_aircontrol 125
+sv_aircontrol_penalty 100
+sv_aircontrol_power 2.5
+sv_airspeedlimit_nonqw 0
+sv_warsowbunny_turnaccel 0
+sv_warsowbunny_accel 0.1593
+sv_warsowbunny_topspeed 925
+sv_warsowbunny_backtosideratio 0.8
+sv_friction_on_land 0
+sv_doublejump 0
+sv_jumpspeedcap_min ""
+sv_jumpspeedcap_max ""
+sv_jumpspeedcap_max_disable_on_ramps 1
index d70bc1bde1fa2a981a5ac98d55f45aa559ea9a18..5a8732b680859d69cbe170bd741fdec529fb97fd 100644 (file)
@@ -18,6 +18,7 @@ sv_airstrafeaccelerate 24
 sv_maxairstrafespeed 100
 sv_airstrafeaccel_qw -0.9825
 sv_aircontrol 125
+sv_aircontrol_penalty 0
 sv_aircontrol_power 2.5
 sv_airspeedlimit_nonqw 0
 sv_warsowbunny_turnaccel 0
index ff8cd3bcce84b2433f119419c605bc1fa7b6201e..721f819b3d39fc2593c36422885f2a80c6b638de 100644 (file)
@@ -18,6 +18,7 @@ sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_airstrafeaccel_qw 0
 sv_aircontrol 125
+sv_aircontrol_penalty 0
 sv_aircontrol_power 2.5
 sv_airspeedlimit_nonqw 0
 sv_warsowbunny_turnaccel 0
index ea8e1acf7bdd167e971f3a30dde9ca6fdeafb571..6fb02afe7880a41e02bb26f8242030acb6c9f5ef 100644 (file)
@@ -19,6 +19,7 @@ sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_airstrafeaccel_qw 0
 sv_aircontrol 0
+sv_aircontrol_penalty 0
 sv_aircontrol_power 2
 sv_airspeedlimit_nonqw 0
 sv_warsowbunny_turnaccel 0
index 1d08ae8c7400b13cac0c0b1ca23207e8d10ce3b3..927fef3c44edd49d4ddf7eced660035966311204 100644 (file)
@@ -18,6 +18,7 @@ sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_airstrafeaccel_qw 0
 sv_aircontrol 0
+sv_aircontrol_penalty 0
 sv_aircontrol_power 2
 sv_airspeedlimit_nonqw 0
 sv_warsowbunny_turnaccel 0
index 7409ae4be2c327173ea97be61ab07de43d7863cd..7828cc608b2303368ab4bb3bfb32f2fc879a1ed8 100644 (file)
@@ -19,6 +19,7 @@ sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_airstrafeaccel_qw 0
 sv_aircontrol 0
+sv_aircontrol_penalty 0
 sv_aircontrol_power 2
 sv_airspeedlimit_nonqw 0
 sv_warsowbunny_turnaccel 0
index 1951becf20abd05d24685a6e51b813dabe592b23..37973aef68f90d59a53e9ec7aaa1793cb6bfb939 100644 (file)
@@ -18,6 +18,7 @@ sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_airstrafeaccel_qw 0
 sv_aircontrol 0
+sv_aircontrol_penalty 0
 sv_aircontrol_power 2
 sv_airspeedlimit_nonqw 0
 sv_warsowbunny_turnaccel 0
index 4bbb9be2d4f91eab389b0653e9fcf12e83743edd..2f325586e363f133153ffcce967a796807d6c5e5 100644 (file)
@@ -18,6 +18,7 @@ sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_airstrafeaccel_qw 0
 sv_aircontrol 0
+sv_aircontrol_penalty 0
 sv_aircontrol_power 2
 sv_airspeedlimit_nonqw 0
 sv_warsowbunny_turnaccel 0
index 6c17ad683b7905284ec5ff9d65e94c41e8c36453..03be62dd43d66b6c586750aef68e42a1fd7140bb 100644 (file)
@@ -18,6 +18,7 @@ sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_airstrafeaccel_qw 0
 sv_aircontrol 0
+sv_aircontrol_penalty 0
 sv_aircontrol_power 2
 sv_airspeedlimit_nonqw 0
 sv_warsowbunny_turnaccel 0
index e03363a088ba30a3d59e1c9d8eccbefa1f5595d0..7492b415c56220840633b2aa256913b391931e2f 100644 (file)
@@ -18,6 +18,7 @@ sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_airstrafeaccel_qw 0
 sv_aircontrol 0
+sv_aircontrol_penalty 0
 sv_aircontrol_power 2
 sv_airspeedlimit_nonqw 0
 sv_warsowbunny_turnaccel 0
index b1b0655cbc863b9a7394076401300b61cf3579fe..811084dd5f316c3e8e32120cf8f3a8279d5a1be6 100644 (file)
@@ -18,6 +18,7 @@ sv_airstrafeaccelerate 70
 sv_maxairstrafespeed 30
 sv_airstrafeaccel_qw 0
 sv_aircontrol 0
+sv_aircontrol_penalty 0
 sv_aircontrol_power 2
 sv_airspeedlimit_nonqw 0
 sv_warsowbunny_turnaccel 9 // activates warsow movement mode
index 06e7c1a575c61ffba43a5382974affbc32128ef6..467c4212a02626942b5557f0d86c5a740f1b9d5f 100644 (file)
@@ -18,6 +18,7 @@ sv_airstrafeaccelerate 70
 sv_maxairstrafespeed 30
 sv_airstrafeaccel_qw 0
 sv_aircontrol 150
+sv_aircontrol_penalty 0
 sv_aircontrol_power 2
 sv_airspeedlimit_nonqw 0
 sv_warsowbunny_turnaccel 0
index cb07a488180082f927575f3c39ee515f9aaf648b..8a62f3e053c355a24d1f14c519f0e0d6a009e849 100644 (file)
@@ -18,6 +18,7 @@ sv_airstrafeaccelerate 70
 sv_maxairstrafespeed 30
 sv_airstrafeaccel_qw 0
 sv_aircontrol 0
+sv_aircontrol_penalty 0
 sv_aircontrol_power 2
 sv_airspeedlimit_nonqw 0
 sv_warsowbunny_turnaccel 6 // activates warsow movement mode
index 2a60b65178257fbea2efabc866eb59866fb6d780..74a20a46840871ead0789d623d930b7e4d5fd740 100644 (file)
@@ -22,6 +22,7 @@ sv_airstrafeaccelerate 70
 sv_maxairstrafespeed 30
 sv_airstrafeaccel_qw 1
 sv_aircontrol 150
+sv_aircontrol_penalty 0
 sv_aircontrol_power 2
 sv_airspeedlimit_nonqw 0
 sv_warsowbunny_turnaccel 0
@@ -31,5 +32,5 @@ sv_warsowbunny_backtosideratio 0.8
 sv_friction_on_land 0
 sv_doublejump 1
 sv_jumpspeedcap_min 0
-sv_jumpspeedcap_max 1
+sv_jumpspeedcap_max 0.5
 sv_jumpspeedcap_max_disable_on_ramps 1
diff --git a/physicsXPMLight.cfg b/physicsXPMLight.cfg
new file mode 100644 (file)
index 0000000..db9c617
--- /dev/null
@@ -0,0 +1,36 @@
+// Nexrun tweaked to suit CPM
+sv_gravity 800
+sv_maxspeed 320
+// CPMA: 320
+sv_maxairspeed 320
+// CPMA: 320
+sv_stopspeed 100
+sv_accelerate 15
+sv_airaccelerate 1
+sv_friction 8
+edgefriction 1
+sv_stepheight 34
+// CPMA: 18
+sv_jumpvelocity 270
+sv_wateraccelerate 4
+sv_waterfriction 1
+sv_airaccel_sideways_friction 0
+sv_airaccel_qw -0.9146875
+// CPMA: 1
+sv_airstopaccelerate 6.5625 // matches strafe-stopping speed
+sv_airstrafeaccelerate 14
+sv_maxairstrafespeed 150
+sv_airstrafeaccel_qw -0.987
+sv_aircontrol 100
+sv_aircontrol_penalty 100
+sv_aircontrol_power 2.5
+sv_airspeedlimit_nonqw 0
+sv_warsowbunny_turnaccel 0
+sv_warsowbunny_accel 0.1593
+sv_warsowbunny_topspeed 925
+sv_warsowbunny_backtosideratio 0.8
+sv_friction_on_land 0
+sv_doublejump 0
+sv_jumpspeedcap_min ""
+sv_jumpspeedcap_max ""
+sv_jumpspeedcap_max_disable_on_ramps 1
index 2aaf9cb0c65b4d7331b6bd484d85663fdc32a4d5..1b019d5be89d63aa3caa0b0831fc5005a2b77d8a 100644 (file)
@@ -234,6 +234,7 @@ float tempdb;
 float ClientProgsDB;
 vector hook_shotorigin[4];
 vector electro_shotorigin[4];
+vector gauntlet_shotorigin[4];
 
 #ifdef BLURTEST
 float blurtest_time0, blurtest_time1, blurtest_radius, blurtest_power;
@@ -257,3 +258,4 @@ float w_deathtype, w_issilent, w_random;
 string w_deathtypestring;
 vector w_org, w_backoff;
 
+float campingrifle_scope;
index 9fb86a6e23bb0eda1a12e2c9bdb5f33ae24f2705..ed851b9c1ff3a08ed5662005a40c7f543375b5c2 100644 (file)
@@ -1031,6 +1031,10 @@ void Ent_Init()
        electro_shotorigin[1] = decompressShotOrigin(ReadInt24_t());
        electro_shotorigin[2] = decompressShotOrigin(ReadInt24_t());
        electro_shotorigin[3] = decompressShotOrigin(ReadInt24_t());
+       gauntlet_shotorigin[0] = decompressShotOrigin(ReadInt24_t());
+       gauntlet_shotorigin[1] = decompressShotOrigin(ReadInt24_t());
+       gauntlet_shotorigin[2] = decompressShotOrigin(ReadInt24_t());
+       gauntlet_shotorigin[3] = decompressShotOrigin(ReadInt24_t());
 
        if(forcefog)
                strunzone(forcefog);
@@ -1270,6 +1274,10 @@ void Net_WeaponComplain() {
        complain_weapon_time = time;
 }
 
+void Net_CampingrifleScope() {
+       campingrifle_scope = TRUE;
+}
+
 // CSQC_Parse_TempEntity : Handles all temporary entity network data in the CSQC layer.
 // You must ALWAYS first acquire the temporary ID, which is sent as a byte.
 // Return value should be 1 if CSQC handled the temporary entity, otherwise return 0 to have the engine process the event.
@@ -1344,6 +1352,10 @@ float CSQC_Parse_TempEntity()
                        Net_WeaponComplain();
                        bHandled = true;
                        break;
+               case TE_CSQC_CAMPINGRIFLE_SCOPE:
+                       Net_CampingrifleScope();
+                       bHandled = true;
+                       break;
                default:
                        // No special logic for this temporary entity; return 0 so the engine can handle it
                        bHandled = false;
index 8c642415ddebede591b7cbe57ae4e86c19cb2364..05c038e1ce13ea1dde44bb0a508d044a5df2ca88 100644 (file)
@@ -137,7 +137,7 @@ vector GetCurrentFov(float fov)
                        zoomspeed = 3.5;
 
        zoomdir = button_zoom;
-       if(getstati(STAT_ACTIVEWEAPON) == WEP_NEX) // do NOT use switchweapon here
+       if(getstati(STAT_ACTIVEWEAPON) == WEP_NEX || getstati(STAT_ACTIVEWEAPON) == WEP_CAMPINGRIFLE && campingrifle_scope) // do NOT use switchweapon here
                zoomdir += button_attack2;
        if(spectatee_status > 0 || isdemo())
        {
@@ -567,7 +567,7 @@ void CSQC_UpdateView(float w, float h)
                reticle_type = 0; // prevent reticle from showing during the respawn zoom effect or for spectators
        else if(button_zoom)
                reticle_type = 1; // normal zoom
-       else if(activeweapon == WEP_NEX && button_attack2)
+       else if(activeweapon == WEP_NEX && button_attack2 || activeweapon == WEP_CAMPINGRIFLE && button_attack2)
                reticle_type = 2; // nex zoom
 
        if(cvar("cl_reticle_stretch"))
index 8644847b3f92efc78a38f75e5a7801359e153423..9f690d5bc884dc3692b1ebb172cdd6089e74775f 100644 (file)
@@ -6,6 +6,12 @@
 .float LGBeamKillTime;
 .float LGBeamSound;
 .float LGBeamSilent;
+.vector GauntletBeamStart;
+.vector GauntletBeamEnd;
+.float GauntletBeamKillTime;
+.float GauntletBeamSound;
+.float GauntletBeamSilent;
+
 
 void Draw_CylindricLine(vector from, vector to, float thickness, string texture, float aspect, float shift, vector rgb, float alpha, float drawflag)
 {
@@ -138,6 +144,38 @@ void Draw_GrapplingHook()
                setorigin(self, a);
        }
 
+       if(time < self.GauntletBeamKillTime)
+       {
+               s = cvar("cl_gunalign");
+               if(s != 1 && s != 2 && s != 4)
+                       s = 3; // default value
+               --s;
+               vs = gauntlet_shotorigin[s];
+
+               if(self.sv_entnum == player_localentnum - 1)
+               {
+                       b = view_origin + view_forward * MAX_SHOT_DISTANCE;
+                       WarpZone_TraceLine(view_origin, b, MOVE_NORMAL, world);
+                       a = view_origin + view_forward * vs_x + view_right * -vs_y + view_up * vs_z;
+               }
+               else
+               {
+                       a = self.GauntletBeamStart;
+                       b = self.GauntletBeamEnd;
+               }
+
+               tex = "particles/gauntletbeam";
+               rgb = '1 1 1';
+
+               Draw_GrapplingHook_trace_callback_tex = tex;
+               Draw_GrapplingHook_trace_callback_rnd = random();
+               WarpZone_TraceBox_ThroughZone(a, '0 0 0', '0 0 0', b, MOVE_NORMAL, world, world, Draw_GrapplingHook_trace_callback);
+               Draw_GrapplingHook_trace_callback_tex = string_null;
+
+               // helps the sound
+               setorigin(self, a);
+       }
+
        if(time < self.LGBeamKillTime && !self.LGBeamSilent)
        {
                if(!self.LGBeamSound)
@@ -154,6 +192,23 @@ void Draw_GrapplingHook()
                        self.LGBeamSound = 0;
                }
        }
+
+       if(time < self.GauntletBeamKillTime && !self.GauntletBeamSilent)
+       {
+               if(!self.GauntletBeamSound)
+               {
+                       sound (self, CHAN_PROJECTILE, "weapons/gauntletbeam_fly.wav", VOL_BASE, ATTN_NORM);
+                       self.GauntletBeamSound = 1;
+               }
+       }
+       else
+       {
+               if(self.GauntletBeamSound)
+               {
+                       sound (self, CHAN_PROJECTILE, "misc/null.wav", VOL_BASE, ATTN_NORM);
+                       self.GauntletBeamSound = 0;
+               }
+       }
 }
 
 void Net_GrapplingHook()
@@ -201,10 +256,18 @@ void Net_GrapplingHook()
                        p.LGBeamSilent = 1;
                        p.draw = Draw_GrapplingHook;
                        break;
+               case 3: // gauntlet beam
+                       p.GauntletBeamKillTime = time + 0.1;
+                       p.GauntletBeamStart = start;
+                       p.GauntletBeamEnd = end;
+                       p.GauntletBeamSilent = 0;
+                       p.draw = Draw_GrapplingHook;
+                       break;
        }
 }
 
 void Hook_Precache()
 {
        precache_sound("weapons/lgbeam_fly.wav");
+       precache_sound("weapons/gauntletbeam_fly.wav");
 }
index 5e96ce38a47b51f1342b31eb226fe6fc55e00e0b..8a74e964a6b776134b75096cbe12d775a38434d7 100644 (file)
@@ -60,6 +60,7 @@ const float TE_CSQC_TARGET_MUSIC = 111;
 const float TE_CSQC_NOTIFY = 112;
 const float TE_CSQC_WEAPONCOMPLAIN = 113;
 const float TE_CSQC_BEAM = 114;
+const float TE_CSQC_CAMPINGRIFLE_SCOPE = 115;
 
 const float RACE_NET_CHECKPOINT_HIT_QUALIFYING = 0; // byte checkpoint, short time, short recordtime, string recordholder
 const float RACE_NET_CHECKPOINT_CLEAR = 1;
index 8b95a3a4ab524ecc0b8b307105f43dbf9529b0f8..fda3e902fa31649e8746faeaee0892a201755590 100644 (file)
@@ -1071,6 +1071,10 @@ float ClientInit_SendEntity(entity to, float sf)
        WriteInt24_t(MSG_ENTITY, compressShotOrigin(electro_shotorigin[1]));
        WriteInt24_t(MSG_ENTITY, compressShotOrigin(electro_shotorigin[2]));
        WriteInt24_t(MSG_ENTITY, compressShotOrigin(electro_shotorigin[3]));
+       WriteInt24_t(MSG_ENTITY, compressShotOrigin(gauntlet_shotorigin[0]));
+       WriteInt24_t(MSG_ENTITY, compressShotOrigin(gauntlet_shotorigin[1]));
+       WriteInt24_t(MSG_ENTITY, compressShotOrigin(gauntlet_shotorigin[2]));
+       WriteInt24_t(MSG_ENTITY, compressShotOrigin(gauntlet_shotorigin[3]));
        if(sv_foginterval && world.fog != "")
                WriteString(MSG_ENTITY, world.fog);
        else
@@ -2781,7 +2785,7 @@ void PlayerPreThink (void)
        }
 
        if(!zoomstate_set)
-               SetZoomState(self.BUTTON_ZOOM || (self.BUTTON_ATCK2 && self.weapon == WEP_NEX));
+               SetZoomState(self.BUTTON_ZOOM || (self.BUTTON_ATCK2 && self.weapon == WEP_NEX) || (self.BUTTON_ATCK2 && self.weapon == WEP_CAMPINGRIFLE && cvar("g_balance_campingrifle_secondary") == 0));
 
        float oldspectatee_status;
        oldspectatee_status = self.spectatee_status;
index ac6789586793c86387026ffdfbb787d44850cebd..70e702505cd2d5d9c482d968552b8f377619e4b9 100644 (file)
@@ -16,6 +16,7 @@ float sv_maxairstrafespeed;
 float sv_airstrafeaccel_qw;
 float sv_aircontrol;
 float sv_aircontrol_power;
+float sv_aircontrol_penalty;
 float sv_warsowbunny_airforwardaccel;
 float sv_warsowbunny_accel;
 float sv_warsowbunny_topspeed;
@@ -470,7 +471,9 @@ void CPM_PM_Aircontrol(vector wishdir, float wishspeed)
 
        if(dot > 0) // we can't change direction while slowing down
        {
-               k *= fabs(sv_aircontrol)*pow(dot, sv_aircontrol_power)*frametime;
+               k *= pow(dot, sv_aircontrol_power)*frametime;
+               xyspeed = max(0, xyspeed - sv_aircontrol_penalty * sqrt(max(0, 1 - dot*dot)) * k/32);
+               k *= sv_aircontrol;
                self.velocity = normalize(self.velocity * xyspeed + wishdir * k);
        }
 
@@ -1202,8 +1205,13 @@ void SV_PlayerPhysics()
 
                        // CPM
                        if(sv_airstopaccelerate)
-                               if(self.velocity * wishdir < 0)
-                                       airaccel = sv_airstopaccelerate*maxspd_mod;
+                       {
+                               vector curdir;
+                               curdir = self.velocity;
+                               curdir_z = 0;
+                               curdir = normalize(curdir);
+                               airaccel = airaccel + (sv_airstopaccelerate*maxspd_mod - airaccel) * max(0, -(curdir * wishdir));
+                       }
                        // note that for straight forward jumping:
                        // step = accel * frametime * wishspeed0;
                        // accel  = bound(0, wishspeed - vel_xy_current, step) * accelqw + step * (1 - accelqw);
index 020c24bb3df3bb4b4bcecde9e573771eb937be52..07898df16817501ada15cc655255c3cec5cf9f0e 100644 (file)
@@ -513,6 +513,7 @@ void spawnfunc_worldspawn (void)
        readlevelcvars();
        GrappleHookInit();
        ElectroInit();
+       LaserInit();
 
        player_count = 0;
        bot_waypoints_for_items = cvar("g_waypoints_for_items");
index 929b0df2091175973835016c8ddc531f965ad631..adf4b4a1d89545418734228dddc0b16345100f0a 100644 (file)
@@ -44,6 +44,7 @@ portals.qh
 
 g_hook.qh
 w_electro.qh
+w_laser.qh
 
 scores.qh
 
index a79f9a473b0638911a9918f2ec78513eab9a0cca..44a47c95dc5ed653c2cf40afb68bf7c788570b5d 100644 (file)
@@ -191,6 +191,7 @@ void StartFrame (void)
        sv_maxairstrafespeed = cvar("sv_maxairstrafespeed");
        sv_airstrafeaccel_qw = cvar("sv_airstrafeaccel_qw");
        sv_aircontrol = cvar("sv_aircontrol");
+       sv_aircontrol_penalty = cvar("sv_aircontrol_penalty");
        sv_aircontrol_power = cvar("sv_aircontrol_power");
        sv_warsowbunny_airforwardaccel = cvar("sv_warsowbunny_airforwardaccel");
        sv_warsowbunny_accel = cvar("sv_warsowbunny_accel");
index 8fc8d839da6ca97b686bc86079c7c52cccbdf2f7..96dc36fc21bacfee4d07ca1865fedfdad9f4fcd1 100644 (file)
@@ -173,6 +173,7 @@ void W_CampingRifle_BulletHail(float mode, void(void) AttackFunc, float fr, floa
 }
 
 .float bot_secondary_campingriflemooth;
+.float sent_campingrifle_scope;
 float w_campingrifle(float req)
 {
        float full;
@@ -219,17 +220,33 @@ float w_campingrifle(float req)
                                self.campingrifle_accumulator += cvar("g_balance_campingrifle_primary_burstcost");
                        }
                        if (self.BUTTON_ATCK2)
-                       if (weapon_prepareattack_check(1, cvar("g_balance_campingrifle_secondary_refire")))
-                       if (time >= self.campingrifle_accumulator + cvar("g_balance_campingrifle_secondary_burstcost"))
-                       {
-                               weapon_prepareattack_do(1, cvar("g_balance_campingrifle_secondary_refire"));
-                               W_CampingRifle_BulletHail(cvar("g_balance_campingrifle_secondary_bullethail"), W_CampingRifle_Attack2, WFRAME_FIRE2, cvar("g_balance_campingrifle_secondary_animtime"), cvar("g_balance_campingrifle_primary_refire"));
-                               self.campingrifle_accumulator += cvar("g_balance_campingrifle_secondary_burstcost");
+                       {       
+                               if (cvar("g_balance_campingrifle_secondary"))
+                               {
+                                       if (weapon_prepareattack_check(1, cvar("g_balance_campingrifle_secondary_refire")))
+                                       if (time >= self.campingrifle_accumulator + cvar("g_balance_campingrifle_secondary_burstcost"))
+                                       {
+                                               weapon_prepareattack_do(1, cvar("g_balance_campingrifle_secondary_refire"));
+                                               W_CampingRifle_BulletHail(cvar("g_balance_campingrifle_secondary_bullethail"), W_CampingRifle_Attack2, WFRAME_FIRE2, cvar("g_balance_campingrifle_secondary_animtime"), cvar("g_balance_campingrifle_primary_refire"));
+                                               self.campingrifle_accumulator += cvar("g_balance_campingrifle_secondary_burstcost");
+                                       }
+                               }
+                               else
+                               {
+                                       if(clienttype(self) == CLIENTTYPE_REAL)
+                                       if(!self.sent_campingrifle_scope)
+                                       {
+                                               msg_entity = self;
+                                               WriteByte(MSG_ONE, SVC_TEMPENTITY);
+                                               WriteByte(MSG_ONE, TE_CSQC_CAMPINGRIFLE_SCOPE);
+                                               self.sent_campingrifle_scope = 1;
+                                       }       
+                               }
                        }
                }
        }
        else if (req == WR_PRECACHE)
-       {               
+       {
                precache_model ("models/weapons/g_campingrifle.md3");
                precache_model ("models/weapons/v_campingrifle.md3");
                precache_model ("models/weapons/h_campingrifle.iqm");
index c2e57d20255922a9b53e260fff4f7b428afebf65..3a54cf3861945c882b30ba5e3afcb77cb817e8d8 100644 (file)
@@ -184,10 +184,11 @@ void W_Electro_Attack2()
        CSQCProjectile(proj, TRUE, PROJECTILE_ELECTRO, FALSE); // no culling, it has sound
 }
 
-.entity lgbeam, exteriorlgbeam;
-.float nextdamagethink;
+.entity lgbeam;
+.float prevlgfire;
 void lgbeam_think()
 {
+       self.owner.prevlgfire = time;
        if (self.owner.weaponentity.state != WS_INUSE || (self.owner.ammo_cells <= 0 && !(self.owner.items & IT_UNLIMITED_WEAPON_AMMO)) || self != self.owner.lgbeam || self.owner.deadflag != DEAD_NO || !self.owner.BUTTON_ATCK)
        {
                remove(self);
@@ -200,7 +201,7 @@ void lgbeam_think()
        vector angle;
        angle = v_forward;
 
-       traceline_antilag(self.owner, self.owner.origin + self.owner.view_ofs, self.owner.origin + self.owner.view_ofs + angle * cvar("g_balance_electro_primary_range"), FALSE, self.owner, ANTILAG_LATENCY(self.owner));
+       WarpZone_traceline_antilag(self.owner, self.owner.origin + self.owner.view_ofs, self.owner.origin + self.owner.view_ofs + angle * cvar("g_balance_electro_primary_range"), FALSE, self.owner, ANTILAG_LATENCY(self.owner));
 
        if not(self.owner.items & IT_UNLIMITED_WEAPON_AMMO)
                self.owner.ammo_cells = max(0, self.owner.ammo_cells - cvar("g_balance_electro_primary_ammo") * frametime);
@@ -241,6 +242,12 @@ void lgbeam_think()
 // experimental lightning gun
 void W_Electro_Attack3 (void)
 {
+       // only play fire sound if 0.5 sec has passed since player let go the fire button
+       if(time - self.prevlgfire > 0.5)
+       {
+               sound (self, CHAN_WEAPON, "weapons/lgbeam_fire.wav", VOL_BASE, ATTN_NORM);
+       }
+
        entity beam, oldself;
 
        self.lgbeam = beam = spawn();
@@ -359,7 +366,9 @@ float w_electro(float req)
                precache_sound ("weapons/electro_impact.wav");
                precache_sound ("weapons/electro_impact_combo.wav");
                if(cvar("g_balance_electro_lightning"))
-                       precache_sound ("weapons/crylink_fire2.wav");
+               {
+                       precache_sound ("weapons/lgbeam_fire.wav");
+               }
        }
        else if (req == WR_SETUP)
                weapon_setup(WEP_ELECTRO);
index 551acf35995a9311c9a15b1266176a5b1bf5e11c..f6851af212d5d8afb909da7489291b09aa6a7f1d 100644 (file)
@@ -13,6 +13,10 @@ void W_Grenade_Explode (void)
 
        self.event_damage = SUB_Null;
        self.takedamage = DAMAGE_NO;
+
+       if(self.movetype == MOVETYPE_NONE)
+               self.velocity = self.oldvelocity;
+
        RadiusDamage (self, self.owner, cvar("g_balance_grenadelauncher_primary_damage"), cvar("g_balance_grenadelauncher_primary_edgedamage"), cvar("g_balance_grenadelauncher_primary_radius"), world, cvar("g_balance_grenadelauncher_primary_force"), self.projectiledeathtype, other);
 
        remove (self);
@@ -52,6 +56,7 @@ void W_Grenade_Touch1 (void)
                spamsound (self, CHAN_PROJECTILE, "weapons/grenade_stick.wav", VOL_BASE, ATTN_NORM);
 
                // let it stick whereever it is
+               self.oldvelocity = self.velocity;
                self.velocity = '0 0 0';
                self.movetype = MOVETYPE_NONE; // also disables gravity
                self.gravity = 0; // nope, it does NOT! maybe a bug in CSQC code? TODO
index 00e0fff7473e2444483c7faa9bd91033a17f7336..8633297a12d2c31bbbfe16d77b3b5d79a571322d 100644 (file)
@@ -101,18 +101,105 @@ void W_Laser_Attack (float issecondary)
        }
 }
 
-void W_Laser_Attack2 (void) // gauntlet
+.entity gauntletbeam;
+.float prevgauntletfire;
+void gauntletbeam_think()
 {
-       W_SetupShot (self, TRUE, 0, "weapons/gauntlet_fire.wav", cvar("g_balance_laser_primary_damage"));
+       float damage, myforce, myradius;
+       if(self.cnt)
+       {
+               damage = cvar("g_balance_laser_secondary_damage");
+               myforce = cvar("g_balance_laser_secondary_force");
+               myradius = cvar("g_balance_laser_secondary_radius");
+       }
+       else
+       {
+               damage = cvar("g_balance_laser_primary_damage");
+               myforce = cvar("g_balance_laser_primary_force");
+               myradius = cvar("g_balance_laser_primary_radius");
+       }
+
+       self.owner.prevgauntletfire = time;
+       if (self.owner.weaponentity.state != WS_INUSE || self != self.owner.gauntletbeam || self.owner.deadflag != DEAD_NO || (!self.owner.BUTTON_ATCK2 && self.cnt) || (!self.owner.BUTTON_ATCK && !self.cnt))
+       {
+               remove(self);
+               return;
+       }
+
+       self.nextthink = time;
+
+       makevectors(self.owner.v_angle);
+       vector angle;
+       angle = v_forward;
+
+       WarpZone_traceline_antilag(self.owner, self.owner.origin + self.owner.view_ofs, self.owner.origin + self.owner.view_ofs + angle * myradius, FALSE, self.owner, ANTILAG_LATENCY(self.owner));
+
+       // apply the damage
+       if(trace_fraction < 1)
+       {
+               vector force;
+               force = angle * myforce;
+               Damage (trace_ent, self.owner, self.owner, damage * frametime, WEP_ELECTRO, trace_endpos, force * frametime);
+       }
 
-       WarpZone_traceline_antilag(self, w_shotorg, w_shotorg + w_shotdir * (cvar("g_balance_laser_primary_radius") + vlen(eX * self.velocity_x + eY * self.velocity_y)/5), FALSE, self, ANTILAG_LATENCY(self));
+       // draw effect
+       vector vecs, org;
+       if(self.owner.weaponentity.movedir_x > 0)
+       {
+               vecs = self.owner.weaponentity.movedir;
+               vecs_y = -vecs_y;
+       }
+       else
+               vecs = '0 0 0';
+       org = self.owner.origin + self.owner.view_ofs + v_forward * vecs_x + v_right * vecs_y + v_up * vecs_z;
+       
+       // TODO turn into a csqc entity
+       WriteByte(MSG_BROADCAST, SVC_TEMPENTITY);
+       WriteByte(MSG_BROADCAST, TE_CSQC_BEAM);
+       WriteByte(MSG_BROADCAST, num_for_edict(self.owner));
+       WriteByte(MSG_BROADCAST, 3);
+       WriteCoord(MSG_BROADCAST, trace_endpos_x);
+       WriteCoord(MSG_BROADCAST, trace_endpos_y);
+       WriteCoord(MSG_BROADCAST, trace_endpos_z);
+       WriteCoord(MSG_BROADCAST, org_x);
+       WriteCoord(MSG_BROADCAST, org_y);
+       WriteCoord(MSG_BROADCAST, org_z);
+}
 
-       pointparticles(particleeffectnum("laser_gauntletmuzzleflash"), w_shotorg, w_shotdir * 1000, 1);
-       pointparticles(particleeffectnum("laser_gauntlet"), w_shotorg + w_shotdir * (cvar("g_balance_laser_primary_radius") + vlen(eX * self.velocity_x + eY * self.velocity_y)/5), w_shotdir * 1000, 1);
-       pointparticles(particleeffectnum("laser_gauntlet"), w_shotorg + w_shotdir * (cvar("g_balance_laser_primary_radius") + vlen(eX * self.velocity_x + eY * self.velocity_y)/5) * 0.5, w_shotdir * 1000, 1);
+// experimental gauntlet
+void W_Laser_Attack2 (float issecondary)
+{
+       // only play fire sound if 0.5 sec has passed since player let go the fire button
+       if(time - self.prevgauntletfire > 0.5)
+       {
+               sound (self, CHAN_WEAPON, "weapons/gauntlet_fire.wav", VOL_BASE, ATTN_NORM);
+       }
+
+       entity beam, oldself;
+
+       self.gauntletbeam = beam = spawn();
+       beam.solid = SOLID_NOT;
+       beam.think = gauntletbeam_think;
+       beam.owner = self;
+       beam.movetype = MOVETYPE_NONE;
+       beam.shot_spread = 0;
+       beam.bot_dodge = TRUE;
+       beam.bot_dodgerating = cvar("g_balance_laser_primary_damage");
+       beam.cnt = issecondary;
 
-       if (trace_fraction < 1)
-               Damage(trace_ent, self, self, cvar("g_balance_laser_primary_damage"), WEP_LASER | HITTYPE_SECONDARY, trace_endpos, cvar("g_balance_laser_primary_force") * w_shotdir);
+       oldself = self;
+       self = beam;
+       self.think();
+       self = oldself;
+}
+
+void LaserInit()
+{
+       weapon_action(WEP_LASER, WR_PRECACHE);
+       gauntlet_shotorigin[0] = shotorg_adjust_values(CL_Weapon_GetShotOrg(WEP_LASER), FALSE, FALSE, 1);
+       gauntlet_shotorigin[1] = shotorg_adjust_values(CL_Weapon_GetShotOrg(WEP_LASER), FALSE, FALSE, 2);
+       gauntlet_shotorigin[2] = shotorg_adjust_values(CL_Weapon_GetShotOrg(WEP_LASER), FALSE, FALSE, 3);
+       gauntlet_shotorigin[3] = shotorg_adjust_values(CL_Weapon_GetShotOrg(WEP_LASER), FALSE, FALSE, 4);
 }
 
 void spawnfunc_weapon_laser (void)
@@ -143,8 +230,8 @@ float w_laser(float req)
                if (self.BUTTON_ATCK)
                if (weapon_prepareattack(0, cvar("g_balance_laser_primary_refire")))
                {
-                       if(cvar("g_balance_laser_gauntlet"))
-                               W_Laser_Attack2();
+                       if(cvar("g_balance_laser_primary_gauntlet"))
+                               W_Laser_Attack2(0);
                        else
                                W_Laser_Attack(0);
                        weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_laser_primary_animtime"), w_ready);
@@ -155,7 +242,10 @@ float w_laser(float req)
                        {
                                if (weapon_prepareattack(0, cvar("g_balance_laser_secondary_refire")))
                                {
-                                       W_Laser_Attack(1);
+                                       if(cvar("g_balance_laser_secondary_gauntlet"))
+                                               W_Laser_Attack2(1);
+                                       else
+                                               W_Laser_Attack(1);
                                        weapon_thinkf(WFRAME_FIRE2, cvar("g_balance_laser_secondary_animtime"), w_ready);
                                }
                        }
diff --git a/qcsrc/server/w_laser.qh b/qcsrc/server/w_laser.qh
new file mode 100644 (file)
index 0000000..0f2c137
--- /dev/null
@@ -0,0 +1,2 @@
+void LaserInit();
+vector gauntlet_shotorigin[4];
index c347648dff324c5300e837630fa197b1be17992d..9d1d8fba5907662a52ef02f1a649d0daf8336014 100644 (file)
@@ -89,6 +89,49 @@ void W_Shotgun_Attack2 (void)
        W_AttachToShotorg(flash, '5 0 0');
 }
 
+void shotgun_meleethink (void)
+{
+       // store time when we started swinging down inside self.cnt
+       if(!self.cnt)
+               self.cnt = time;
+
+       makevectors(self.owner.v_angle);
+       vector angle;
+       angle = v_forward;
+
+       // perform trace
+       float f;
+       f = (self.cnt + cvar("g_balance_shotgun_secondary_melee_time") - time) / cvar("g_balance_shotgun_secondary_melee_time") * 2 - 1;
+       vector targpos;
+       targpos = self.owner.origin + self.owner.view_ofs + angle * cvar("g_balance_shotgun_secondary_melee_range") + v_right * f * cvar("g_balance_shotgun_secondary_melee_swing") + v_up * f * cvar("g_balance_shotgun_secondary_melee_swing");
+       WarpZone_traceline_antilag(self.owner, self.owner.origin + self.owner.view_ofs, targpos, FALSE, self.owner, ANTILAG_LATENCY(self.owner));
+
+       // apply the damage, also remove self
+       if(trace_fraction < 1 && trace_ent.takedamage == DAMAGE_AIM && trace_ent.classname == "player")
+       {
+               vector force;
+               force = angle * cvar("g_balance_shotgun_secondary_force");
+               Damage (trace_ent, self.owner, self.owner, cvar("g_balance_shotgun_secondary_damage") * ((f + 1) / 2), WEP_SHOTGUN, self.owner.origin + self.owner.view_ofs, force);
+               remove(self);
+       }
+       else if(time >= self.cnt + cvar("g_balance_shotgun_secondary_melee_time")) // missed, remove ent
+               remove(self);
+       else // continue swinging the weapon in hope of hitting someone :)
+               self.nextthink = time;
+}
+
+void W_Shotgun_Attack3 (void)
+{
+       sound (self, CHAN_PROJECTILE, "weapons/shotgun_melee.wav", VOL_BASE, ATTN_NORM);
+       weapon_thinkf(WFRAME_FIRE2, cvar("g_balance_shotgun_secondary_animtime"), w_ready);
+
+       entity meleetemp;
+       meleetemp = spawn();
+       meleetemp.owner = self;
+       meleetemp.think = shotgun_meleethink;
+       meleetemp.nextthink = time + cvar("g_balance_shotgun_secondary_melee_delay");
+}
+
 // weapon frames
 void shotgun_fire2_03()
 {
@@ -121,8 +164,16 @@ float w_shotgun(float req)
                if (self.BUTTON_ATCK2 && cvar("g_balance_shotgun_secondary"))
                if (weapon_prepareattack(1, cvar("g_balance_shotgun_secondary_refire")))
                {
-                       W_Shotgun_Attack2();
-                       weapon_thinkf(WFRAME_FIRE2, cvar("g_balance_shotgun_secondary_animtime"), shotgun_fire2_02);
+                       if(cvar("g_balance_shotgun_secondary_melee"))
+                       {
+                               // force playback of the anim by switching to another anim (that we never play) here...
+                               weapon_thinkf(WFRAME_FIRE1, 0, W_Shotgun_Attack3);
+                       }
+                       else
+                       {
+                               W_Shotgun_Attack2();
+                               weapon_thinkf(WFRAME_FIRE2, cvar("g_balance_shotgun_secondary_animtime"), shotgun_fire2_02);
+                       }
                }
        }
        else if (req == WR_PRECACHE)
@@ -133,13 +184,18 @@ float w_shotgun(float req)
                precache_model ("models/weapons/h_shotgun.iqm");
                precache_sound ("misc/itempickup.wav");
                precache_sound ("weapons/shotgun_fire.wav");
+               precache_sound ("weapons/shotgun_melee.wav");
        }
        else if (req == WR_SETUP)
                weapon_setup(WEP_SHOTGUN);
        else if (req == WR_CHECKAMMO1)
                return self.ammo_shells >= cvar("g_balance_shotgun_primary_ammo");
        else if (req == WR_CHECKAMMO2)
+       {
+               if(cvar("g_balance_shotgun_secondary_melee"))
+                       return TRUE;
                return self.ammo_shells >= cvar("g_balance_shotgun_secondary_ammo") * 3;
+       }
        return TRUE;
 };
 #endif
index 01906932c7d4810b559c758fbb9a349345320967..03802f65d10547e699bf900878269346e311d095 100644 (file)
Binary files a/sound/weapons/gauntlet_fire.ogg and b/sound/weapons/gauntlet_fire.ogg differ
diff --git a/sound/weapons/gauntletbeam_fly.ogg b/sound/weapons/gauntletbeam_fly.ogg
new file mode 100644 (file)
index 0000000..874d246
Binary files /dev/null and b/sound/weapons/gauntletbeam_fly.ogg differ
diff --git a/sound/weapons/lgbeam_fire.ogg b/sound/weapons/lgbeam_fire.ogg
new file mode 100644 (file)
index 0000000..d3cd355
Binary files /dev/null and b/sound/weapons/lgbeam_fire.ogg differ
index 183ec30ad6fbb67c85591f0751781eacacd26b85..3531310018138154319e2552078ecdf81b806476 100644 (file)
Binary files a/sound/weapons/lgbeam_fly.ogg and b/sound/weapons/lgbeam_fly.ogg differ
diff --git a/sound/weapons/shotgun_melee.ogg b/sound/weapons/shotgun_melee.ogg
new file mode 100644 (file)
index 0000000..0562b55
Binary files /dev/null and b/sound/weapons/shotgun_melee.ogg differ