]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge remote branch 'refs/remotes/origin/tzork/vehicles1'
authorRudolf Polzer <divverent@alientrap.org>
Thu, 29 Jul 2010 17:19:37 +0000 (19:19 +0200)
committerRudolf Polzer <divverent@alientrap.org>
Thu, 29 Jul 2010 17:19:37 +0000 (19:19 +0200)
37 files changed:
balance25.cfg
balanceNexSVN.cfg
balanceSamual.cfg
balanceXPM.cfg
balanceXonotic.cfg
defaultXonotic.cfg
effectinfo.txt
gfx/conback.tga
gfx/conback2.tga [new file with mode: 0644]
gfx/conback3.tga [new file with mode: 0644]
gfx/hud/luminos/ammo_bullets.tga
gfx/hud/luminos/ammo_cells.tga
gfx/hud/luminos/ammo_fuel.tga
gfx/hud/luminos/ammo_rockets.tga
gfx/hud/luminos/ammo_shells.tga
gfx/hud/luminos/armor.tga
gfx/hud/luminos/health.tga
gfx/hud/luminos/nexball_carrying.tga [new file with mode: 0644]
gfx/hud/luminos/notify_telefrag.tga [new file with mode: 0644]
models/items/jetpack.blend [deleted file]
qcsrc/client/Defs.qc
qcsrc/client/Main.qc
qcsrc/client/View.qc
qcsrc/client/hook.qc
qcsrc/client/hud.qh
qcsrc/client/mapvoting.qc
qcsrc/client/waypointsprites.qc
qcsrc/common/constants.qh
qcsrc/common/util.qc
qcsrc/menu/item/borderimage.c
qcsrc/menu/item/dialog.c
qcsrc/menu/xonotic/playermodel.c
qcsrc/server/w_electro.qc
qcsrc/server/w_laser.qc
qcsrc/server/w_nex.qc
qcsrc/server/w_shotgun.qc
qcsrc/server/w_uzi.qc

index c3a3a6205ed2001480d4ca7ad6448160cb9b8e72..0250978c3b56b38e8e261be84dcfbfea2884e627 100644 (file)
@@ -383,15 +383,26 @@ set g_balance_crylink_secondary_line_lifetime 2 // range: 35000 full, fades to 7
 set g_balance_crylink_secondary_line_fadetime 2
 // }}}
 // {{{ nex
-set g_balance_nex_damage 100
-set g_balance_nex_force 600
-set g_balance_nex_refire 1.5
-set g_balance_nex_animtime 0.3
-set g_balance_nex_ammo 5
-set g_balance_nex_damagefalloff_mindist 0
-set g_balance_nex_damagefalloff_maxdist 0
-set g_balance_nex_damagefalloff_halflife 0
-set g_balance_nex_damagefalloff_forcehalflife 0
+set g_balance_nex_primary_damage 100
+set g_balance_nex_primary_force 600
+set g_balance_nex_primary_refire 1.5
+set g_balance_nex_primary_animtime 0.3
+set g_balance_nex_primary_ammo 5
+set g_balance_nex_primary_damagefalloff_mindist 0
+set g_balance_nex_primary_damagefalloff_maxdist 0
+set g_balance_nex_primary_damagefalloff_halflife 0
+set g_balance_nex_primary_damagefalloff_forcehalflife 0
+
+set g_balance_nex_secondary 0
+set g_balance_nex_secondary_damage 100
+set g_balance_nex_secondary_force 600
+set g_balance_nex_secondary_refire 1.5
+set g_balance_nex_secondary_animtime 0.3
+set g_balance_nex_secondary_ammo 5
+set g_balance_nex_secondary_damagefalloff_mindist 0
+set g_balance_nex_secondary_damagefalloff_maxdist 0
+set g_balance_nex_secondary_damagefalloff_halflife 0
+set g_balance_nex_secondary_damagefalloff_forcehalflife 0
 // }}}
 // {{{ minstanex
 set g_balance_minstanex_refire 1
index d1596a1d7354450e0a42f9bc7df00a55011878d2..0f8a8dc35c4dcdaa02d949335b42bb237fe2bd19 100644 (file)
@@ -383,15 +383,26 @@ set g_balance_crylink_secondary_line_lifetime 2 // range: 35000 full, fades to 7
 set g_balance_crylink_secondary_line_fadetime 2
 // }}}
 // {{{ nex
-set g_balance_nex_damage 90
-set g_balance_nex_force 200
-set g_balance_nex_refire 1.5
-set g_balance_nex_animtime 0.3
-set g_balance_nex_ammo 5
-set g_balance_nex_damagefalloff_mindist 1000
-set g_balance_nex_damagefalloff_maxdist 3000
-set g_balance_nex_damagefalloff_halflife 1500
-set g_balance_nex_damagefalloff_forcehalflife 1500
+set g_balance_nex_primary_damage 90
+set g_balance_nex_primary_force 200
+set g_balance_nex_primary_refire 1.5
+set g_balance_nex_primary_animtime 0.3
+set g_balance_nex_primary_ammo 5
+set g_balance_nex_primary_damagefalloff_mindist 1000
+set g_balance_nex_primary_damagefalloff_maxdist 3000
+set g_balance_nex_primary_damagefalloff_halflife 1500
+set g_balance_nex_primary_damagefalloff_forcehalflife 1500
+
+set g_balance_nex_secondary 0
+set g_balance_nex_secondary_damage 90
+set g_balance_nex_secondary_force 200
+set g_balance_nex_secondary_refire 1.5
+set g_balance_nex_secondary_animtime 0.3
+set g_balance_nex_secondary_ammo 5
+set g_balance_nex_secondary_damagefalloff_mindist 1000
+set g_balance_nex_secondary_damagefalloff_maxdist 3000
+set g_balance_nex_secondary_damagefalloff_halflife 1500
+set g_balance_nex_secondary_damagefalloff_forcehalflife 1500
 // }}}
 // {{{ minstanex
 set g_balance_minstanex_refire 1
index 292bb210568be03dd1f3fa5c161e2a1ea5d8bd88..e70157872ed1a52ab980be125b4184ca42a812f8 100644 (file)
@@ -383,15 +383,26 @@ set g_balance_crylink_secondary_line_lifetime 2 // range: 35000 full, fades to 7
 set g_balance_crylink_secondary_line_fadetime 2
 // }}}
 // {{{ nex
-set g_balance_nex_damage 90
-set g_balance_nex_force 300
-set g_balance_nex_refire 1.5
-set g_balance_nex_animtime 0.3
-set g_balance_nex_ammo 5
-set g_balance_nex_damagefalloff_mindist 1000
-set g_balance_nex_damagefalloff_maxdist 3000
-set g_balance_nex_damagefalloff_halflife 1500
-set g_balance_nex_damagefalloff_forcehalflife 1500
+set g_balance_nex_primary_damage 90
+set g_balance_nex_primary_force 300
+set g_balance_nex_primary_refire 1.5
+set g_balance_nex_primary_animtime 0.3
+set g_balance_nex_primary_ammo 5
+set g_balance_nex_primary_damagefalloff_mindist 1000
+set g_balance_nex_primary_damagefalloff_maxdist 3000
+set g_balance_nex_primary_damagefalloff_halflife 1500
+set g_balance_nex_primary_damagefalloff_forcehalflife 1500
+
+set g_balance_nex_secondary 0
+set g_balance_nex_secondary_damage 90
+set g_balance_nex_secondary_force 300
+set g_balance_nex_secondary_refire 1.5
+set g_balance_nex_secondary_animtime 0.3
+set g_balance_nex_secondary_ammo 5
+set g_balance_nex_secondary_damagefalloff_mindist 1000
+set g_balance_nex_secondary_damagefalloff_maxdist 3000
+set g_balance_nex_secondary_damagefalloff_halflife 1500
+set g_balance_nex_secondary_damagefalloff_forcehalflife 1500
 // }}}
 // {{{ minstanex
 set g_balance_minstanex_refire 1
index 91072e83529a35ff4945e697ce3fc6b7e7373653..55b6a5486d530450ab58d93bae38eb9a4a6e1685 100644 (file)
@@ -383,15 +383,26 @@ set g_balance_crylink_secondary_line_lifetime 2 // range: 4000 full, fades to 80
 set g_balance_crylink_secondary_line_fadetime 2
 // }}}
 // {{{ nex
-set g_balance_nex_damage 100
-set g_balance_nex_force 200
-set g_balance_nex_refire 1.25
-set g_balance_nex_animtime 1
-set g_balance_nex_ammo 5
-set g_balance_nex_damagefalloff_mindist 1000
-set g_balance_nex_damagefalloff_maxdist 3000
-set g_balance_nex_damagefalloff_halflife 2000
-set g_balance_nex_damagefalloff_forcehalflife 2000
+set g_balance_nex_primary_damage 100
+set g_balance_nex_primary_force 200
+set g_balance_nex_primary_refire 1.25
+set g_balance_nex_primary_animtime 1
+set g_balance_nex_primary_ammo 5
+set g_balance_nex_primary_damagefalloff_mindist 1000
+set g_balance_nex_primary_damagefalloff_maxdist 3000
+set g_balance_nex_primary_damagefalloff_halflife 2000
+set g_balance_nex_primary_damagefalloff_forcehalflife 2000
+
+set g_balance_nex_secondary 0
+set g_balance_nex_secondary_damage 100
+set g_balance_nex_secondary_force 200
+set g_balance_nex_secondary_refire 1.25
+set g_balance_nex_secondary_animtime 1
+set g_balance_nex_secondary_ammo 5
+set g_balance_nex_secondary_damagefalloff_mindist 1000
+set g_balance_nex_secondary_damagefalloff_maxdist 3000
+set g_balance_nex_secondary_damagefalloff_halflife 2000
+set g_balance_nex_secondary_damagefalloff_forcehalflife 2000
 // }}}
 // {{{ minstanex
 set g_balance_minstanex_refire 1.25
index 91072e83529a35ff4945e697ce3fc6b7e7373653..dd4f1b9fa0f39b3599311bae7597bceb21ad6408 100644 (file)
@@ -18,7 +18,7 @@ set g_start_weapon_fireball 0 "0 = never provide the weapon, 1 = always provide
 set g_start_weapon_seeker 0 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
 set g_balance_health_start 125
 set g_balance_armor_start 0
-set g_start_ammo_shells 14
+set g_start_ammo_shells 20
 set g_start_ammo_nails 0
 set g_start_ammo_rockets 0
 set g_start_ammo_cells 0
@@ -54,8 +54,8 @@ set g_balance_nix_ammoincr_fuel 2
 // {{{ pickup items
 set g_pickup_ammo_anyway 1
 set g_pickup_weapons_anyway 1
-set g_pickup_shells 10
-set g_pickup_shells_max 30
+set g_pickup_shells 20
+set g_pickup_shells_max 45
 set g_pickup_nails 120
 set g_pickup_nails_max 300
 set g_pickup_rockets 25
@@ -104,9 +104,9 @@ set g_pickup_respawntimejitter_ammo 0
 // }}}
 
 // {{{ regen/rot
-set g_balance_health_regen 0
+set g_balance_health_regen 0.05
 set g_balance_health_regenlinear 0
-set g_balance_pause_health_regen 0
+set g_balance_pause_health_regen 5
 set g_balance_pause_health_regen_spawn 0
 set g_balance_health_rot 0
 set g_balance_health_rotlinear 1
@@ -219,9 +219,9 @@ set g_balance_laser_primary_shotangle 0
 set g_balance_laser_primary_delay 0
 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_damage 200 // dps
 set g_balance_laser_secondary_edgedamage 0
-set g_balance_laser_secondary_force 1000
+set g_balance_laser_secondary_force 1300
 set g_balance_laser_secondary_radius 60
 set g_balance_laser_secondary_speed 0
 set g_balance_laser_secondary_spread 0
@@ -233,7 +233,7 @@ set g_balance_laser_secondary_delay 0
 set g_balance_laser_secondary_gauntlet 1
 // }}}
 // {{{ shotgun
-set g_balance_shotgun_primary_bullets 16
+set g_balance_shotgun_primary_bullets 20
 set g_balance_shotgun_primary_damage 4
 set g_balance_shotgun_primary_force 20
 set g_balance_shotgun_primary_spread 0.16
@@ -271,11 +271,11 @@ set g_balance_uzi_bulletconstant 115 // 13.1qu
 set g_balance_grenadelauncher_primary2secondary 0
 set g_balance_grenadelauncher_primary_sticky 0
 set g_balance_grenadelauncher_primary_damage 60
-set g_balance_grenadelauncher_primary_edgedamage 35
+set g_balance_grenadelauncher_primary_edgedamage 25
 set g_balance_grenadelauncher_primary_force 300
 set g_balance_grenadelauncher_primary_radius 100
-set g_balance_grenadelauncher_primary_speed 2000
-set g_balance_grenadelauncher_primary_speed_up 200
+set g_balance_grenadelauncher_primary_speed 1400
+set g_balance_grenadelauncher_primary_speed_up 225
 set g_balance_grenadelauncher_primary_speed_z 0
 set g_balance_grenadelauncher_primary_spread 0
 set g_balance_grenadelauncher_primary_lifetime 5
@@ -285,12 +285,12 @@ set g_balance_grenadelauncher_primary_animtime 0.2
 set g_balance_grenadelauncher_primary_ammo 2
 set g_balance_grenadelauncher_primary_health 72
 set g_balance_grenadelauncher_secondary_sticky 1
-set g_balance_grenadelauncher_secondary_damage 100
-set g_balance_grenadelauncher_secondary_edgedamage 30
+set g_balance_grenadelauncher_secondary_damage 90
+set g_balance_grenadelauncher_secondary_edgedamage 32
 set g_balance_grenadelauncher_secondary_force 300
 set g_balance_grenadelauncher_secondary_radius 150
-set g_balance_grenadelauncher_secondary_speed 1000
-set g_balance_grenadelauncher_secondary_speed_up 200
+set g_balance_grenadelauncher_secondary_speed 1400
+set g_balance_grenadelauncher_secondary_speed_up 225
 set g_balance_grenadelauncher_secondary_speed_z 0
 set g_balance_grenadelauncher_secondary_spread 0
 set g_balance_grenadelauncher_secondary_lifetime 5
@@ -298,16 +298,16 @@ set g_balance_grenadelauncher_secondary_lifetime2 1
 set g_balance_grenadelauncher_secondary_refire 0.8
 set g_balance_grenadelauncher_secondary_animtime 0.2
 set g_balance_grenadelauncher_secondary_ammo 2
-set g_balance_grenadelauncher_secondary_health 72
+set g_balance_grenadelauncher_secondary_health 40
 set g_balance_grenadelauncher_secondary_damageforcescale 0
 set g_balance_grenadelauncher_secondary_bouncefactor 0.7
 set g_balance_grenadelauncher_secondary_bouncestop 0.12
 // }}}
 // {{{ electro // TODO
 set g_balance_electro_lightning 1
-set g_balance_electro_primary_damage 100
+set g_balance_electro_primary_damage 90
 set g_balance_electro_primary_edgedamage 0
-set g_balance_electro_primary_force 600
+set g_balance_electro_primary_force 550
 set g_balance_electro_primary_force_up 125
 set g_balance_electro_primary_radius 850
 set g_balance_electro_primary_comboradius 75
@@ -316,25 +316,25 @@ set g_balance_electro_primary_spread 0
 set g_balance_electro_primary_lifetime 0
 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_ammo 10
 set g_balance_electro_primary_range 800
-set g_balance_electro_secondary_damage 40
+set g_balance_electro_secondary_damage 25
 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 500
+set g_balance_electro_secondary_speed 700
 set g_balance_electro_secondary_speed_up 200
 set g_balance_electro_secondary_speed_z 0
 set g_balance_electro_secondary_spread 0.08
 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.5
+set g_balance_electro_secondary_refire 0.2
+set g_balance_electro_secondary_refire2 1
+set g_balance_electro_secondary_animtime 0.2
 set g_balance_electro_secondary_ammo 2
 set g_balance_electro_secondary_health 10
 set g_balance_electro_secondary_damageforcescale 4
-set g_balance_electro_secondary_count 1
+set g_balance_electro_secondary_count 3
 set g_balance_electro_combo_damage 40
 set g_balance_electro_combo_edgedamage 0
 set g_balance_electro_combo_force 80
@@ -345,12 +345,12 @@ set g_balance_electro_combo_speed 400
 // {{{ crylink
 set g_balance_crylink_primary_damage 10
 set g_balance_crylink_primary_edgedamage 8
-set g_balance_crylink_primary_force 25
+set g_balance_crylink_primary_force -150
 set g_balance_crylink_primary_radius 100
 set g_balance_crylink_primary_speed 1100
 set g_balance_crylink_primary_spread 0.1
 set g_balance_crylink_primary_shots 7
-set g_balance_crylink_primary_bounces 1
+set g_balance_crylink_primary_bounces 2
 set g_balance_crylink_primary_refire 0.8
 set g_balance_crylink_primary_animtime 0.4
 set g_balance_crylink_primary_ammo 2
@@ -358,15 +358,15 @@ set g_balance_crylink_primary_bouncedamagefactor 0.2
 
 set g_balance_crylink_primary_middle_lifetime 5 // range: 10000 full, fades to 20000
 set g_balance_crylink_primary_middle_fadetime 5
-set g_balance_crylink_primary_star_lifetime 0.8 // range: 800 full, fades to 1300
+set g_balance_crylink_primary_star_lifetime 2 // range: 800 full, fades to 1300
 set g_balance_crylink_primary_star_fadetime 0.25
-set g_balance_crylink_primary_other_lifetime 0.8 // range: 800 full, fades to 1300
+set g_balance_crylink_primary_other_lifetime 2 // range: 800 full, fades to 1300
 set g_balance_crylink_primary_other_fadetime 0.25
 
 set g_balance_crylink_secondary 1
 set g_balance_crylink_secondary_damage 4
 set g_balance_crylink_secondary_edgedamage 0
-set g_balance_crylink_secondary_force 16
+set g_balance_crylink_secondary_force -40
 set g_balance_crylink_secondary_radius 15
 set g_balance_crylink_secondary_speed 1600
 set g_balance_crylink_secondary_spread 0.03
@@ -383,15 +383,26 @@ set g_balance_crylink_secondary_line_lifetime 2 // range: 4000 full, fades to 80
 set g_balance_crylink_secondary_line_fadetime 2
 // }}}
 // {{{ nex
-set g_balance_nex_damage 100
-set g_balance_nex_force 200
-set g_balance_nex_refire 1.25
-set g_balance_nex_animtime 1
-set g_balance_nex_ammo 5
-set g_balance_nex_damagefalloff_mindist 1000
-set g_balance_nex_damagefalloff_maxdist 3000
-set g_balance_nex_damagefalloff_halflife 2000
-set g_balance_nex_damagefalloff_forcehalflife 2000
+set g_balance_nex_primary_damage 80
+set g_balance_nex_primary_force 200
+set g_balance_nex_primary_refire 1.25
+set g_balance_nex_primary_animtime 0.75
+set g_balance_nex_primary_ammo 5
+set g_balance_nex_primary_damagefalloff_mindist 1000
+set g_balance_nex_primary_damagefalloff_maxdist 3000
+set g_balance_nex_primary_damagefalloff_halflife 4000
+set g_balance_nex_primary_damagefalloff_forcehalflife 4000
+
+set g_balance_nex_secondary 1
+set g_balance_nex_secondary_damage 80
+set g_balance_nex_secondary_force -200
+set g_balance_nex_secondary_refire 1.25
+set g_balance_nex_secondary_animtime 0.75
+set g_balance_nex_secondary_ammo 5
+set g_balance_nex_secondary_damagefalloff_mindist 1000
+set g_balance_nex_secondary_damagefalloff_maxdist 3000
+set g_balance_nex_secondary_damagefalloff_halflife 4000
+set g_balance_nex_secondary_damagefalloff_forcehalflife 4000
 // }}}
 // {{{ minstanex
 set g_balance_minstanex_refire 1.25
@@ -512,12 +523,12 @@ set g_balance_hlac_secondary_ammo 10
 set g_balance_hlac_secondary_shots 6
 // }}}
 // {{{ campingrifle
-set g_balance_campingrifle_magazinecapacity 0
+set g_balance_campingrifle_magazinecapacity 4 // make it pretty much useless in close combat
 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 50
+set g_balance_campingrifle_primary_damage 60
 set g_balance_campingrifle_primary_headshotaddeddamage 35
 set g_balance_campingrifle_primary_spread 0
 set g_balance_campingrifle_primary_force 2
@@ -529,9 +540,9 @@ 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 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 1
+set g_balance_campingrifle_secondary_damage 25
+set g_balance_campingrifle_secondary_headshotaddeddamage 15 // 40 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
@@ -609,8 +620,8 @@ set g_balance_seeker_flac_spread 0.4
 set g_balance_seeker_missile_accel 1.05
 set g_balance_seeker_missile_ammo 2
 set g_balance_seeker_missile_animtime 0.3
-set g_balance_seeker_missile_count 3
-set g_balance_seeker_missile_damage 33
+set g_balance_seeker_missile_count 8
+set g_balance_seeker_missile_damage 15
 set g_balance_seeker_missile_damageforcescale 4
 set g_balance_seeker_missile_decel 0.9
 set g_balance_seeker_missile_delay 0.25
index 260493ac780c16f55fc0b956c2cc87e47cbe002e..037505dd0a0a7ef79a202a061bc8591cf557a4ff 100644 (file)
@@ -1898,3 +1898,16 @@ set sv_q3acompat_machineshotgunswap 0 "shorthand for swapping uzi and shotgun (f
 set g_movement_highspeed 1 "movement speed modification factor (only changes movement when above maxspeed)"
 
 set g_maxspeed 0 "player speed limit, faster players are killed (0 for unlimited speed)"
+
+scr_conalpha 1
+scr_conalpha2factor 0.3
+scr_conalpha3factor 1
+scr_conalphafactor 0.8
+scr_conbrightness 0.35
+scr_conforcewhiledisconnected 1
+scr_conscroll2_x 0.11
+scr_conscroll2_y 0.2
+scr_conscroll3_x 0
+scr_conscroll3_y 0
+scr_conscroll_x -0.1
+scr_conscroll_y -0.3
index dddf34c8883ee105c6117a7550224eb86af4ad7f..4116ae438241bf98c1d92ae2002bd69999262615 100644 (file)
@@ -4988,7 +4988,45 @@ lightcolor 3.125 4.375 10
 effect electro_lightning
 count 300
 type spark
-color 0x283880 0x283880 // 0x202020 0x404040
+color 0x501860 0x501860 // 0x202020 0x404040
+tex 65 65
+size 6 6
+alpha 100 206 1724
+originjitter 1.5 1.5 1.5
+velocityjitter 6 6 6
+sizeincrease 10
+velocitymultiplier 2000
+effect electro_lightning
+count 30
+type spark
+tex 8 15
+color 0xDDFDFF 0xFDFDFF
+size 2 5
+alpha 110 170 1500
+originjitter 1 1 1
+velocityjitter 150 150 150
+velocitymultiplier 0.5
+airfriction 2
+stretchfactor 1.5
+effect electro_lightning
+count 50
+type spark
+tex 41 41
+color 0xFDFDFF 0xF9FDFF
+size 2 3
+alpha 110 170 1500
+originjitter 1 1 1
+velocityjitter 350 350 350
+velocitymultiplier 2.5
+airfriction 8
+gravity 1.3
+stretchfactor 0.1
+
+// used in qcsrc/server/w_gauntlet.qc: pointparticles(particleeffectnum("electro_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
+effect gauntlet_lightning
+count 300
+type spark
+color 0x280000 0x280000 // 0x202020 0x404040
 tex 65 65
 size 3 3
 alpha 256 256 1024
@@ -4996,25 +5034,25 @@ originjitter 1.5 1.5 1.5
 velocityjitter 6 6 6
 sizeincrease 15
 velocitymultiplier 2000
-effect electro_lightning
+effect gauntlet_lightning
 count 30
 type spark
 tex 8 15
-color 0xD9FDFF 0xD9FDFF
-size 3 7
-alpha 110 228 2024
+color 0xDD0000 0xFD0000
+size 2 5
+alpha 110 228 1024
 originjitter 1 1 1
 velocityjitter 150 150 150
 velocitymultiplier 0.5
 airfriction 2
 stretchfactor 1.5
-effect electro_lightning
+effect gauntlet_lightning
 count 50
 type spark
 tex 41 41
-color 0xD9FDFF 0xD9FDFF
-size 3 4
-alpha 110 228 1500
+color 0xFD0000 0xF90000
+size 2 3
+alpha 110 228 600
 originjitter 1 1 1
 velocityjitter 350 350 350
 velocitymultiplier 2.5
index d8d927739b3fd02726912cae0b86cbb43eb0c9f1..39beb59eaf87602a7c7174bba3557289cfc99b78 100644 (file)
Binary files a/gfx/conback.tga and b/gfx/conback.tga differ
diff --git a/gfx/conback2.tga b/gfx/conback2.tga
new file mode 100644 (file)
index 0000000..39c5dff
Binary files /dev/null and b/gfx/conback2.tga differ
diff --git a/gfx/conback3.tga b/gfx/conback3.tga
new file mode 100644 (file)
index 0000000..b662dba
Binary files /dev/null and b/gfx/conback3.tga differ
index 8f3739d4821b01512a2a769f08c4212cc61fc3ce..c06e9949189639ca79afd384a388e8cf9e8550c7 100644 (file)
Binary files a/gfx/hud/luminos/ammo_bullets.tga and b/gfx/hud/luminos/ammo_bullets.tga differ
index 4850763419258e81c8edb738f4f6178ef19e8868..eda3e46f268892be5d6019c40e5aa23e007a69af 100644 (file)
Binary files a/gfx/hud/luminos/ammo_cells.tga and b/gfx/hud/luminos/ammo_cells.tga differ
index 4a3a2d5563a733f4fd0895a5eda3636d8f33fc16..3f3a8918f07171a8018a7a1074127ae7e363d408 100644 (file)
Binary files a/gfx/hud/luminos/ammo_fuel.tga and b/gfx/hud/luminos/ammo_fuel.tga differ
index 9b34ea79389418aa3d65dc2a089bb3301a18a1ba..a7bf03e4162ac16055a1cd317d2cc678c093e86b 100644 (file)
Binary files a/gfx/hud/luminos/ammo_rockets.tga and b/gfx/hud/luminos/ammo_rockets.tga differ
index f62c715625b7a3ca69e2c082fdf03c0f138503c8..5fe646987136016599a177e583825ebb4ab4b18f 100644 (file)
Binary files a/gfx/hud/luminos/ammo_shells.tga and b/gfx/hud/luminos/ammo_shells.tga differ
index f9e47011aa7c1a5631bcadd1a2778e0aaeffe705..b52445d539903983f71711189d4cacfe33f9723c 100644 (file)
Binary files a/gfx/hud/luminos/armor.tga and b/gfx/hud/luminos/armor.tga differ
index 26e40865c992fd6acf42e027b4480b896b057485..d19db5095f66be5874d02c3800473a54a695f23a 100644 (file)
Binary files a/gfx/hud/luminos/health.tga and b/gfx/hud/luminos/health.tga differ
diff --git a/gfx/hud/luminos/nexball_carrying.tga b/gfx/hud/luminos/nexball_carrying.tga
new file mode 100644 (file)
index 0000000..2f993e0
Binary files /dev/null and b/gfx/hud/luminos/nexball_carrying.tga differ
diff --git a/gfx/hud/luminos/notify_telefrag.tga b/gfx/hud/luminos/notify_telefrag.tga
new file mode 100644 (file)
index 0000000..279910f
Binary files /dev/null and b/gfx/hud/luminos/notify_telefrag.tga differ
diff --git a/models/items/jetpack.blend b/models/items/jetpack.blend
deleted file mode 100644 (file)
index 5a08915..0000000
Binary files a/models/items/jetpack.blend and /dev/null differ
index 1b019d5be89d63aa3caa0b0831fc5005a2b77d8a..fbed63fc40b671ffb09f0d43d11eb5a9eecf5bad 100644 (file)
@@ -259,3 +259,4 @@ string w_deathtypestring;
 vector w_org, w_backoff;
 
 float campingrifle_scope;
+float nex_scope;
index dc1f5bb518d757046dbc355d00182c290f0766fa..78b45fae37864270e14a40aa830643c6cf105a27 100644 (file)
@@ -1281,6 +1281,10 @@ void Net_CampingrifleScope() {
        campingrifle_scope = TRUE;
 }
 
+void Net_NexScope() {
+       nex_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.
@@ -1355,6 +1359,10 @@ float CSQC_Parse_TempEntity()
                        Net_CampingrifleScope();
                        bHandled = true;
                        break;
+               case TE_CSQC_NEX_SCOPE:
+                       Net_NexScope();
+                       bHandled = true;
+                       break;
                default:
                        // No special logic for this temporary entity; return 0 so the engine can handle it
                        bHandled = false;
index bbd337d0fdeef4313bacfbee5595ece88c76c403..05f1fe97e247209bb4be8d83d07966b825c66d1a 100644 (file)
@@ -137,7 +137,7 @@ vector GetCurrentFov(float fov)
                        zoomspeed = 3.5;
 
        zoomdir = button_zoom;
-       if(getstati(STAT_ACTIVEWEAPON) == WEP_NEX || (getstati(STAT_ACTIVEWEAPON) == WEP_CAMPINGRIFLE && campingrifle_scope)) // do NOT use switchweapon here
+       if((getstati(STAT_ACTIVEWEAPON) == WEP_NEX && nex_scope) || (getstati(STAT_ACTIVEWEAPON) == WEP_CAMPINGRIFLE && campingrifle_scope)) // do NOT use switchweapon here
                zoomdir += button_attack2;
        if(spectatee_status > 0 || isdemo())
        {
index e53cd0026fd6b3b46e21ac5f4737ee18d793ef22..2fe9a86dd9b0762f03724133d669bfa22e67e835 100644 (file)
@@ -185,6 +185,7 @@ void Draw_GrapplingHook()
                        pointparticles(particleeffectnum("electro_lightning"), trace_endpos, normalize(atrans - trace_endpos), frametime);
                        break;
                case ENT_CLIENT_GAUNTLET:
+                       pointparticles(particleeffectnum("gauntlet_lightning"), b, normalize(a - b), frametime);
                        break;
        }
 }
index 89f5edbdcc3228d8d128d4a1b69f87dbf80181fc..bdc533edbd7e818a56c7b473cf7c63980a124e1c 100644 (file)
@@ -33,7 +33,6 @@ float last_weapon;
 float weapontime;
 
 float teamnagger;
-float hud_fg_alpha;
 float hud_accuracy_hud;
 float hud_border_thickness;
 float hud_accuracy_border_thickness;
index c352cacaea05af16daa4feb922bcc4b8d81bc472..7c3bcecc50d22be197f696b15a60b05036dd466f 100644 (file)
@@ -249,7 +249,7 @@ void MapVote_Draw()
                MapVote_DrawAbstain(pos, isize, xmax - xmin, tmp, i);
        }
 
-       drawpic(mv_mousepos, strcat("gfx/menu/", cvar_string("menu_skin"), "/cursor.tga"), '32 32 0', '1 1 1', hud_fg_alpha, DRAWFLAG_NORMAL);
+       drawpic(mv_mousepos, strcat("gfx/menu/", cvar_string("menu_skin"), "/cursor.tga"), '32 32 0', '1 1 1', autocvar_hud_panel_fg_alpha, DRAWFLAG_NORMAL);
 }
 
 void Cmd_MapVote_MapDownload(float argc)
index db0fdb83fd81a3dd46293211d9eca60df94157ad..d7b9ee9d01960829aa3992dcebec4eb6bb7e84c8 100644 (file)
@@ -166,7 +166,7 @@ void Draw_WaypointSprite()
        dist = vlen(self.origin - view_origin);
        
        float a;
-       a = self.alpha * hud_fg_alpha;
+       a = self.alpha * autocvar_hud_panel_fg_alpha;
 
        if(self.maxdistance > waypointsprite_normdistance)
                a *= pow(bound(0, (self.maxdistance - dist) / (self.maxdistance - waypointsprite_normdistance), 1), waypointsprite_distancealphaexponent);
index 7a5cf3447b1a29d502953812c276d533bb8fbb78..53f37bcdd2c48d5bb9b12a0157d926687a41f3d3 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_CAMPINGRIFLE_SCOPE = 115;
+const float TE_CSQC_NEX_SCOPE = 116;
 
 const float RACE_NET_CHECKPOINT_HIT_QUALIFYING = 0; // byte checkpoint, short time, short recordtime, string recordholder
 const float RACE_NET_CHECKPOINT_CLEAR = 1;
index 9875529d3fe68c92084d6595e306dfe65f91ae06..72af701119045b374be237246f0d9289dd32989d 100644 (file)
@@ -226,43 +226,8 @@ float median(float a, float b, float c)
 // works for up to 10 decimals!
 string ftos_decimals(float number, float decimals)
 {
-       string result;
-       string tmp;
-       float len;
-
-       // if negative, cut off the sign first
-       if(number < 0)
-               return strcat("-", ftos_decimals(-number, decimals));
-       // it now is always positive!
-
-       // 3.516 -> 352
-       number = floor(number * pow(10, decimals) + 0.5);
-
-       // 352 -> "352"
-       result = ftos(number);
-       len = strlen(result);
-       // does it have a decimal point (should not happen)? If there is one, it is always at len-7)
-               // if ftos had messed it up, which should never happen: "34278.000000"
-       if(len >= 7)
-               if(substring(result, len - 7, 1) == ".")
-               {
-                       dprint("ftos(integer) has comma? Can't be. Affected result: ", result, "\n");
-                       result = substring(result, 0, len - 7);
-                       len -= 7;
-               }
-               // "34278"
-       if(decimals == 0)
-               return result; // don't insert a point for zero decimals
-       // is it too short? If yes, insert leading zeroes
-       if(len <= decimals)
-       {
-               result = strcat(substring("0000000000", 0, decimals - len + 1), result);
-               len = decimals + 1;
-       }
-       // and now... INSERT THE POINT!
-       tmp = substring(result, len - decimals, decimals);
-       result = strcat(substring(result, 0, len - decimals), ".", tmp);
-       return result;
+       // we have sprintf...
+       return sprintf("%.*f", decimals, number);
 }
 
 float time;
index 0229b53a55b9d6e18a72ba6e97bdd313d92d5193..236b2352221259a98b0e5604b4e3e2b06180b5c9 100644 (file)
@@ -13,7 +13,6 @@ CLASS(BorderImage) EXTENDS(Label)
        ATTRIB(BorderImage, isNexposeeTitleBar, float, 0)
        ATTRIB(BorderImage, zoomedOutTitleBarPosition, float, 0)
        ATTRIB(BorderImage, zoomedOutTitleBar, float, 0)
-       ATTRIB(BorderImage, borderLines, float, 1)
 ENDCLASS(BorderImage)
 #endif
 
@@ -36,7 +35,8 @@ void BorderImage_resizeNotify(entity me, vector relOrigin, vector relSize, vecto
                me.realFontSize_Nexposeed = me.realFontSize;
        }
        SUPER(BorderImage).resizeNotify(me, relOrigin, relSize, absOrigin, absSize);
-       me.borderVec = me.borderHeight / absSize_y * (eY + eX * (absSize_y / absSize_x));
+       me.borderVec_x = me.borderHeight / absSize_x;
+       me.borderVec_y = me.borderHeight / absSize_y;
        me.realOrigin_y = 0.5 * (me.borderVec_y - me.realFontSize_y);
        if(me.closeButton)
        {
@@ -60,7 +60,7 @@ void BorderImage_draw(entity me)
        //print(vtos(me.borderVec), "\n");
 
        if(me.src)
-               draw_BorderPicture('0 0 0', me.src, '1 1 0', me.color, 1, me.borderLines * me.borderVec);
+               draw_BorderPicture('0 0 0', me.src, '1 1 0', me.color, 1, me.borderVec);
        if(me.fontSize > 0)
        {
                vector ro, rf, df;
index 8202fbbb67e4c358989d96c20bae9eb2dd002cec..3d537bfb92f3bc74f735a00a3031100d335e6118 100644 (file)
@@ -59,6 +59,7 @@ CLASS(Dialog) EXTENDS(InputContainer)
        ATTRIB(Dialog, zoomedOutTitleBar, float, 0)
 
        ATTRIB(Dialog, backgroundImage, string, string_null)
+       ATTRIB(Dialog, borderLines, float, 1)
        ATTRIB(Dialog, closeButtonImage, string, string_null)
 
        ATTRIB(Dialog, frame, entity, NULL)
@@ -128,7 +129,7 @@ void Dialog_configureDialog(entity me)
        float absWidth, absHeight;
 
        me.frame = spawnBorderImage();
-       me.frame.configureBorderImage(me.frame, me.title, me.titleFontSize, me.color, me.backgroundImage, me.titleHeight);
+       me.frame.configureBorderImage(me.frame, me.title, me.titleFontSize, me.color, me.backgroundImage, me.borderLines * me.titleHeight);
        me.frame.zoomedOutTitleBarPosition = me.zoomedOutTitleBarPosition;
        me.frame.zoomedOutTitleBar = me.zoomedOutTitleBar;
        me.frame.alpha = me.alpha;
@@ -138,9 +139,9 @@ void Dialog_configureDialog(entity me)
                me.titleHeight = 0; // no title bar
 
        absWidth = me.intendedWidth * conwidth;
-       absHeight = me.titleHeight + me.marginTop + me.rows * me.rowHeight + (me.rows - 1) * me.rowSpacing + me.marginBottom;
+       absHeight = me.borderLines * me.titleHeight + me.marginTop + me.rows * me.rowHeight + (me.rows - 1) * me.rowSpacing + me.marginBottom;
        me.itemOrigin  = eX * (me.marginLeft / absWidth)
-                      + eY * ((me.titleHeight + me.marginTop) / absHeight);
+                      + eY * ((me.borderLines * me.titleHeight + me.marginTop) / absHeight);
        me.itemSize    = eX * ((1 - (me.marginLeft + me.marginRight + me.columnSpacing * (me.columns - 1)) / absWidth) / me.columns)
                       + eY * (me.rowHeight / absHeight);
        me.itemSpacing = me.itemSize
index 585a5f7fc1cf342c1dd919eb81959eb750a0b119..f4f7526f04bd610070fc8a4b738baeb773e6ca0d 100644 (file)
@@ -47,10 +47,13 @@ void XonoticPlayerModelSelector_configureXonoticPlayerModelSelector(entity me)
        float sortbuf, glob, i;
        string fn;
 
+       glob = search_begin(get_model_datafilename(string_null, -1, "txt"), TRUE, TRUE);
+       if (glob < 0)
+               return;
+
        me.configureXonoticImage(me, string_null, -1);
 
        sortbuf = buf_create();
-       glob = search_begin(get_model_datafilename(string_null, -1, "txt"), TRUE, TRUE);
        for(i = 0; i < search_getsize(glob); ++i)
        {
                // select model #i!
@@ -85,7 +88,8 @@ void XonoticPlayerModelSelector_configureXonoticPlayerModelSelector(entity me)
        }
        buf_del(sortbuf);
        get_model_parameters(string_null, 0);
-       me.loadCvars(me);
+       me.loadCvars(me); // this will select the initial model, depending on the current cvars
+       me.go(me, 0); // this will set the vars for the selected model
 }
 void XonoticPlayerModelSelector_destroy(entity me)
 {
@@ -95,21 +99,21 @@ void XonoticPlayerModelSelector_destroy(entity me)
 
 void XonoticPlayerModelSelector_loadCvars(entity me)
 {
+       string skin, model;
        float i;
-       if(me.currentModel)
-               strunzone(me.currentModel);
-       me.currentSkin = cvar("_cl_playerskin");
-       me.currentModel = strzone(cvar_string("_cl_playermodel"));
+
+       skin = cvar_string("_cl_playerskin");
+       model = cvar_string("_cl_playermodel");
+
        for(i = 0; i < me.numModels; ++i)
        {
-               if(bufstr_get(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_MODEL) == me.currentModel)
-               if(bufstr_get(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_SKIN) == ftos(me.currentSkin))
+               if(bufstr_get(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_MODEL) == model)
+               if(bufstr_get(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_SKIN) == skin)
                        break;
        }
        if(i >= me.numModels) // fail
                i = 0;
        me.idxModels = i;
-       me.go(me, 0); // this will set the other vars for currentSkin and currentModel
 }
 
 void XonoticPlayerModelSelector_go(entity me, float d)
@@ -139,12 +143,16 @@ void XonoticPlayerModelSelector_go(entity me, float d)
 
 void PlayerModelSelector_Next_Click(entity btn, entity me)
 {
+       if (me.numModels <= 0)
+               return;
        me.go(me, +1);
        me.saveCvars(me);
 }
 
 void PlayerModelSelector_Prev_Click(entity btn, entity me)
 {
+       if (me.numModels <= 0)
+               return;
        me.go(me, -1);
        me.saveCvars(me);
 }
@@ -161,8 +169,13 @@ void XonoticPlayerModelSelector_draw(entity me)
        float i, n;
        vector o;
 
-       SUPER(XonoticPlayerModelSelector).draw(me);
+       if (me.numModels <= 0)
+       {
+               draw_CenterText('0.5 0.5 0', "<no model found>", me.realFontSize, '1 1 1', 0.6, FALSE);
+               return;
+       }
 
+       SUPER(XonoticPlayerModelSelector).draw(me);
        // draw text on the image, handle \n in the description
        draw_CenterText('0.5 0 0', me.currentModelTitle, me.realFontSize * (me.titleFontSize / me.fontSize), SKINCOLOR_MODELTITLE, SKINALPHA_MODELTITLE, FALSE);
 
index 25011c541759031b3981c1a5d123adf9b9bac7ce..a98c5a9153a0214842e84a67edc3bbb1bdf8529c 100644 (file)
@@ -244,6 +244,7 @@ void lgbeam_think()
                vector force;
                force = w_shotdir * cvar("g_balance_electro_primary_force") + '0 0 1' * cvar("g_balance_electro_primary_force_up");
                Damage (trace_ent, self.owner, self.owner, cvar("g_balance_electro_primary_damage") * dt, WEP_ELECTRO, trace_endpos, force * dt);
+               Damage_RecordDamage(self.owner, WEP_ELECTRO, cvar("g_balance_electro_primary_damage") * dt);
        }
        W_Plasma_TriggerCombo(trace_endpos, cvar("g_balance_electro_primary_comboradius"), self.owner);
 
index 280e42cf33f0abb11b3f788b9fe04f9ba709ee58..18715a9b4ba51ff79c7f995cd665d5a0bb1e88b5 100644 (file)
@@ -145,6 +145,7 @@ void gauntletbeam_think()
                vector force;
                force = w_shotdir * myforce;
                Damage (trace_ent, self.owner, self.owner, damage * dt, WEP_LASER | HITTYPE_SECONDARY, trace_endpos, force * dt);
+               Damage_RecordDamage(self.owner, WEP_LASER | HITTYPE_SECONDARY, damage * dt);
        }
 
        // draw effect
index aee2a80a28e1aad32baa97fb357db263ae8cdb26..3a85e113adc6a9ccbe7bd33469122e155664078f 100644 (file)
@@ -16,15 +16,37 @@ void SendCSQCNexBeamParticle() {
        WriteCoord(MSG_BROADCAST, v_z);
 }
 
-void W_Nex_Attack (void)
+void W_Nex_Attack (float issecondary)
 {
+       float mydmg, myforce, mymindist, mymaxdist, myhalflife, myforcehalflife, myammo;
+       if(issecondary)
+       {
+               mydmg = cvar("g_balance_nex_secondary_damage");
+               myforce = cvar("g_balance_nex_secondary_force");
+               mymindist = cvar("g_balance_nex_secondary_damagefalloff_mindist");
+               mymaxdist = cvar("g_balance_nex_secondary_damagefalloff_maxdist");
+               myhalflife = cvar("g_balance_nex_secondary_damagefalloff_halflife");
+               myforcehalflife = cvar("g_balance_nex_secondary_damagefalloff_forcehalflife");
+               myammo = cvar("g_balance_nex_secondary_ammo");
+       }
+       else
+       {
+               mydmg = cvar("g_balance_nex_primary_damage");
+               myforce = cvar("g_balance_nex_primary_force");
+               mymindist = cvar("g_balance_nex_primary_damagefalloff_mindist");
+               mymaxdist = cvar("g_balance_nex_primary_damagefalloff_maxdist");
+               myhalflife = cvar("g_balance_nex_primary_damagefalloff_halflife");
+               myforcehalflife = cvar("g_balance_nex_primary_damagefalloff_forcehalflife");
+               myammo = cvar("g_balance_nex_primary_ammo");
+       }
+
        float flying;
        flying = IsFlying(self); // do this BEFORE to make the trace values from FireRailgunBullet last
 
-       W_SetupShot (self, TRUE, 5, "weapons/nexfire.wav", cvar("g_balance_nex_damage"));
+       W_SetupShot (self, TRUE, 5, "weapons/nexfire.wav", mydmg);
 
        yoda = 0;
-       FireRailgunBullet (w_shotorg, w_shotorg + w_shotdir * MAX_SHOT_DISTANCE, cvar("g_balance_nex_damage"), cvar("g_balance_nex_force"), cvar("g_balance_nex_damagefalloff_mindist"), cvar("g_balance_nex_damagefalloff_maxdist"), cvar("g_balance_nex_damagefalloff_halflife"), cvar("g_balance_nex_damagefalloff_forcehalflife"), WEP_NEX);
+       FireRailgunBullet (w_shotorg, w_shotorg + w_shotdir * MAX_SHOT_DISTANCE, mydmg, myforce, mymindist, mymaxdist, myhalflife, myforcehalflife, WEP_NEX);
 
        if(yoda && flying)
                AnnounceTo(self, "yoda");
@@ -34,26 +56,52 @@ void W_Nex_Attack (void)
        
        // flash and burn the wall
        if (trace_ent.solid == SOLID_BSP && !(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT))
-               Damage_DamageInfo(trace_endpos, cvar("g_balance_nex_damage"), 0, 0, cvar("g_balance_nex_force") * w_shotdir, WEP_NEX, self);
+               Damage_DamageInfo(trace_endpos, mydmg, 0, 0, myforce * w_shotdir, WEP_NEX, self);
 
        if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
-               self.ammo_cells = self.ammo_cells - cvar("g_balance_nex_ammo");
+               self.ammo_cells = self.ammo_cells - myammo;
 }
 
 void spawnfunc_weapon_nex (void); // defined in t_items.qc
 
+.float sent_nex_scope;
 float w_nex(float req)
 {
        if (req == WR_AIM)
+       {
                self.BUTTON_ATCK = bot_aim(1000000, 0, 1, FALSE);
+               self.BUTTON_ATCK2 = bot_aim(1000000, 0, 1, FALSE);
+       }
        else if (req == WR_THINK)
        {
                if (self.BUTTON_ATCK)
                {
-                       if (weapon_prepareattack(0, cvar("g_balance_nex_refire")))
+                       if (weapon_prepareattack(0, cvar("g_balance_nex_primary_refire")))
+                       {
+                               W_Nex_Attack(0);
+                               weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_nex_primary_animtime"), w_ready);
+                       }
+               }
+               if (self.BUTTON_ATCK2)
+               {
+                       if(cvar("g_balance_nex_secondary"))
+                       {
+                               if (weapon_prepareattack(0, cvar("g_balance_nex_secondary_refire")))
+                               {
+                                       W_Nex_Attack(1);
+                                       weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_nex_secondary_animtime"), w_ready);
+                               }
+                       }
+                       else
                        {
-                               W_Nex_Attack();
-                               weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_nex_animtime"), w_ready);
+                               if(clienttype(self) == CLIENTTYPE_REAL)
+                               if(!self.sent_nex_scope)
+                               {
+                                       msg_entity = self;
+                                       WriteByte(MSG_ONE, SVC_TEMPENTITY);
+                                       WriteByte(MSG_ONE, TE_CSQC_NEX_SCOPE);
+                                       self.sent_nex_scope = 1;
+                               }       
                        }
                }
        }
@@ -71,9 +119,9 @@ float w_nex(float req)
        else if (req == WR_SETUP)
                weapon_setup(WEP_NEX);
        else if (req == WR_CHECKAMMO1)
-               return self.ammo_cells >= cvar("g_balance_nex_ammo");
+               return self.ammo_cells >= cvar("g_balance_nex_primary_ammo");
        else if (req == WR_CHECKAMMO2)
-               return FALSE;
+               return self.ammo_cells >= cvar("g_balance_nex_secondary_ammo");
        return TRUE;
 };
 #endif
index 1f714d1c7c682859a7516e6cc681fb43370e935c..b186230ecf5b5f36b7b506717edf3f1d31a4840a 100644 (file)
@@ -61,6 +61,7 @@ void shotgun_meleethink (void)
        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
@@ -69,6 +70,7 @@ void shotgun_meleethink (void)
                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 | HITTYPE_SECONDARY , self.owner.origin + self.owner.view_ofs, force);
+               Damage_RecordDamage(self.owner, WEP_SHOTGUN | HITTYPE_SECONDARY, cvar("g_balance_shotgun_secondary_damage") * ((f + 1) / 2));
                remove(self);
        }
        else if(time >= self.cnt + cvar("g_balance_shotgun_secondary_melee_time")) // missed, remove ent
@@ -87,6 +89,7 @@ void W_Shotgun_Attack2 (void)
        meleetemp.owner = self;
        meleetemp.think = shotgun_meleethink;
        meleetemp.nextthink = time + cvar("g_balance_shotgun_secondary_melee_delay");
+       W_SetupShot_Range(self, TRUE, 0, "", cvar("g_balance_shotgun_secondary_damage"), cvar("g_balance_shotgun_secondary_melee_range"));
 }
 
 void spawnfunc_weapon_shotgun(); // defined in t_items.qc
index b11e490f4e40aba839ee3bded58a12460ed2e4ae..d9197412b98287e9805d0736220ee97bbfc4cfb4 100644 (file)
@@ -4,17 +4,20 @@ REGISTER_WEAPON(UZI, w_uzi, IT_NAILS, 3, WEP_FLAG_NORMAL | WEP_TYPE_HITSCAN, BOT
 #ifdef SVQC
 // leilei's fancy muzzleflash stuff
 void W_Uzi_Flash_Go() {
-       if (self.frame > 10){
-               SUB_Remove();
+       if (self.alpha >= 0)
+       {
+               setmodel(self, "");
                return;
        }
        self.frame = self.frame + 2;
-       self.alpha = self.alpha - 0.2;
+       self.scale = self.scale * 0.5;
+       self.alpha = self.alpha - 0.25;
        self.think = W_Uzi_Flash_Go;
-       self.nextthink = time + 0.02;
+       self.nextthink = time + 0.05;
 };
 
 .float uzi_bulletcounter;
+.entity muzzleflash;
 void W_Uzi_Attack (float deathtype)
 {
        local entity flash;
@@ -44,16 +47,20 @@ void W_Uzi_Attack (float deathtype)
 
        pointparticles(particleeffectnum("uzi_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
 
+       if ((self.muzzleflash == world) || wasfreed(self.muzzleflash))
+               self.muzzleflash = spawn();
+       
        // muzzle flash for 1st person view
-       flash = spawn();
-       setmodel(flash, "models/uziflash.md3"); // precision set below
+       setmodel(self.muzzleflash, "models/uziflash.md3"); // precision set below
        //SUB_SetFade(flash, time + 0.06, 0);
-       flash.think = W_Uzi_Flash_Go;
-       flash.nextthink = time + 0.02;
-       flash.frame = 2;
-       flash.alpha = 1;
-       flash.effects = EF_ADDITIVE | EF_FULLBRIGHT | EF_LOWPRECISION;
-       W_AttachToShotorg(flash, '5 0 0');
+       self.muzzleflash.scale = 0.75;
+       self.muzzleflash.think = W_Uzi_Flash_Go;
+       self.muzzleflash.nextthink = time + 0.02;
+       self.muzzleflash.frame = 2;
+       self.muzzleflash.alpha = 0.75;
+       self.muzzleflash.angles_z = random() * 180;
+       self.muzzleflash.effects = EF_ADDITIVE | EF_FULLBRIGHT | EF_LOWPRECISION;
+       W_AttachToShotorg(self.muzzleflash, '5 0 0');
 
        // casing code
        if (cvar("g_casings") >= 2)