]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge remote branch 'origin/terencehill/newpanelhud' into fruitiex/panelhud
authorFruitieX <fruitiex@gmail.com>
Fri, 12 Nov 2010 06:30:41 +0000 (08:30 +0200)
committerFruitieX <fruitiex@gmail.com>
Fri, 12 Nov 2010 06:30:41 +0000 (08:30 +0200)
55 files changed:
balance25.cfg
balanceLeeStricklin.cfg
balanceNexSVN.cfg
balanceSamual.cfg
balanceTest.cfg
balanceXonotic.cfg
balancetZork.cfg
defaultXonotic.cfg
effectinfo.txt
gfx/crosshair_ring_inner.tga [new file with mode: 0644]
gfx/menu/xaw/colorpicker_selected.tga [new file with mode: 0644]
physicsLeeStricklin.cfg
physicsLeeStricklinOld.cfg [new file with mode: 0644]
qcsrc/client/Defs.qc
qcsrc/client/Main.qc
qcsrc/client/View.qc
qcsrc/client/hud.qc
qcsrc/common/constants.qh
qcsrc/menu/xonotic/colorpicker.c
qcsrc/menu/xonotic/colorpicker_string.c
qcsrc/menu/xonotic/dialog_hudpanel_ammo.c
qcsrc/menu/xonotic/dialog_hudpanel_chat.c
qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c
qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c
qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c
qcsrc/menu/xonotic/dialog_hudpanel_modicons.c
qcsrc/menu/xonotic/dialog_hudpanel_notification.c
qcsrc/menu/xonotic/dialog_hudpanel_powerups.c
qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c
qcsrc/menu/xonotic/dialog_hudpanel_racetimer.c
qcsrc/menu/xonotic/dialog_hudpanel_radar.c
qcsrc/menu/xonotic/dialog_hudpanel_score.c
qcsrc/menu/xonotic/dialog_hudpanel_timer.c
qcsrc/menu/xonotic/dialog_hudpanel_vote.c
qcsrc/menu/xonotic/dialog_hudpanel_weapons.c
qcsrc/menu/xonotic/dialog_hudsetup_exit.c
qcsrc/server/cl_client.qc
qcsrc/server/defs.qh
qcsrc/server/g_damage.qc
qcsrc/server/g_world.qc
qcsrc/server/miscfunctions.qc
qcsrc/server/mutators/mutator_rocketflying.qc
qcsrc/server/w_crylink.qc
qcsrc/server/w_grenadelauncher.qc
qcsrc/server/w_minelayer.qc
qcsrc/server/w_minstanex.qc
qcsrc/server/w_nex.qc
qcsrc/server/w_rocketlauncher.qc
scripts/nexball.shader [new file with mode: 0644]
sound/weapons/crylink_linkjoin.ogg [new file with mode: 0644]
textures/nexball/ball.tga [new file with mode: 0644]
textures/nexball/ball_gloss.tga [new file with mode: 0644]
textures/nexball/ball_norm.tga [new file with mode: 0644]
textures/nexball/ball_reflect.tga [new file with mode: 0644]
update-cvarcount.sh

index 1df67732efaff258f9ea300ca2b4d9e8fd0ba3a2..49a450f80722a7aec4b6e4be956c805fefe0d656 100644 (file)
@@ -224,6 +224,8 @@ set g_balance_laser_primary_lifetime 30
 set g_balance_laser_primary_shotangle 0
 set g_balance_laser_primary_delay 0.05
 set g_balance_laser_primary_gauntlet 0
+set g_balance_laser_primary_force_zscale 1
+set g_balance_laser_primary_force_velocitybias 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
@@ -237,6 +239,8 @@ 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
+set g_balance_laser_secondary_force_zscale 1
+set g_balance_laser_secondary_force_velocitybias 0
 // }}}
 // {{{ shotgun
 set g_balance_shotgun_primary_bullets 6
@@ -290,8 +294,6 @@ set g_balance_grenadelauncher_primary_animtime 0.3
 set g_balance_grenadelauncher_primary_ammo 2
 set g_balance_grenadelauncher_primary_health 25
 set g_balance_grenadelauncher_primary_damageforcescale 4
-set g_balance_grenadelauncher_primary_bouncefactor 0.5
-set g_balance_grenadelauncher_primary_bouncestop 0.075
 set g_balance_grenadelauncher_primary_remote_minbouncecnt 0
 
 set g_balance_grenadelauncher_secondary_type 1
@@ -310,9 +312,10 @@ set g_balance_grenadelauncher_secondary_animtime 0.3
 set g_balance_grenadelauncher_secondary_ammo 2
 set g_balance_grenadelauncher_secondary_health 10
 set g_balance_grenadelauncher_secondary_damageforcescale 4
-set g_balance_grenadelauncher_secondary_bouncefactor 0.5
-set g_balance_grenadelauncher_secondary_bouncestop 0.075
 set g_balance_grenadelauncher_secondary_remote_detonateprimary 0
+
+set g_balance_grenadelauncher_bouncefactor 0.5
+set g_balance_grenadelauncher_bouncestop 0.075
 // }}}
 // {{{ minelayer // TODO
 set g_balance_minelayer_damage 35
@@ -390,11 +393,10 @@ set g_balance_crylink_primary_refire 0.4
 set g_balance_crylink_primary_animtime 0.3
 set g_balance_crylink_primary_ammo 2
 set g_balance_crylink_primary_bouncedamagefactor 0.5
+set g_balance_crylink_primary_joinspeed 0
 
 set g_balance_crylink_primary_middle_lifetime 5 // range: 35000 full, fades to 70000
 set g_balance_crylink_primary_middle_fadetime 5
-set g_balance_crylink_primary_star_lifetime 0.1 // range: 700 full, fades to 2450
-set g_balance_crylink_primary_star_fadetime 0.25
 set g_balance_crylink_primary_other_lifetime 0.1 // range: 700 full, fades to 2450
 set g_balance_crylink_primary_other_fadetime 0.25
 
@@ -411,6 +413,7 @@ set g_balance_crylink_secondary_refire 0.5
 set g_balance_crylink_secondary_animtime 0.3
 set g_balance_crylink_secondary_ammo 2
 set g_balance_crylink_secondary_bouncedamagefactor 0.5
+set g_balance_crylink_secondary_joinspeed 0
 
 set g_balance_crylink_secondary_middle_lifetime 5 // range: 35000 full, fades to 70000
 set g_balance_crylink_secondary_middle_fadetime 5
@@ -446,6 +449,7 @@ set g_balance_nex_charge_mindmg 40
 set g_balance_nex_charge_start 0
 set g_balance_nex_charge_rate 0.1
 set g_balance_nex_charge_limit 0.5
+set g_balance_nex_charge_rot_rate 0
 set g_balance_nex_charge_shot_multiplier 0.5
 set g_balance_nex_charge_velocity_rate 0.2
 set g_balance_nex_charge_minspeed 400
index b1c267342275ccf9f8fa8841d6c6d0183be0b915..9735e07a57d245c4b7fbb8d524a1700ea77acb09 100644 (file)
@@ -225,7 +225,7 @@ set g_balance_grapplehook_health 130
 // {{{ laser
 set g_balance_laser_primary_damage 25
 set g_balance_laser_primary_edgedamage 10
-set g_balance_laser_primary_force 258
+set g_balance_laser_primary_force 182 // Original value was insanely low :P
 set g_balance_laser_primary_radius 70
 set g_balance_laser_primary_speed 12000
 set g_balance_laser_primary_spread 0
@@ -235,19 +235,23 @@ 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_primary_gauntlet 0
+set g_balance_laser_primary_force_zscale 2 // 300 upforce
+set g_balance_laser_primary_force_velocitybias 0.3
 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
-set g_balance_laser_secondary_force 375
-set g_balance_laser_secondary_radius 70
-set g_balance_laser_secondary_speed 12000
+set g_balance_laser_secondary_damage 200 // dps
+set g_balance_laser_secondary_edgedamage 0
+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
-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_shotangle -90
+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 0
+set g_balance_laser_secondary_gauntlet 1
+set g_balance_laser_secondary_force_zscale 1.25
+set g_balance_laser_secondary_force_velocitybias 0
 // }}}
 // {{{ shotgun
 set g_balance_shotgun_primary_bullets 5
@@ -301,8 +305,6 @@ set g_balance_grenadelauncher_primary_animtime 0.3
 set g_balance_grenadelauncher_primary_ammo 2
 set g_balance_grenadelauncher_primary_health 72
 set g_balance_grenadelauncher_primary_damageforcescale 0
-set g_balance_grenadelauncher_primary_bouncefactor 0.7
-set g_balance_grenadelauncher_primary_bouncestop 0.12
 set g_balance_grenadelauncher_primary_remote_minbouncecnt 0
 
 set g_balance_grenadelauncher_secondary_type 1
@@ -321,9 +323,10 @@ set g_balance_grenadelauncher_secondary_animtime 0.3
 set g_balance_grenadelauncher_secondary_ammo 2
 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
 set g_balance_grenadelauncher_secondary_remote_detonateprimary 0
+
+set g_balance_grenadelauncher_bouncefactor 0.7
+set g_balance_grenadelauncher_bouncestop 0.12
 // }}}
 // {{{ minelayer // TODO
 set g_balance_minelayer_damage 35
@@ -401,11 +404,10 @@ set g_balance_crylink_primary_refire 0.4
 set g_balance_crylink_primary_animtime 0.30008
 set g_balance_crylink_primary_ammo 3
 set g_balance_crylink_primary_bouncedamagefactor 0.2
+set g_balance_crylink_primary_joinspeed 0
 
 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 2 // range: 800 full, fades to 1300
-set g_balance_crylink_primary_star_fadetime 0.25
 set g_balance_crylink_primary_other_lifetime 2 // range: 800 full, fades to 1300
 set g_balance_crylink_primary_other_fadetime 0.25
 
@@ -422,6 +424,7 @@ set g_balance_crylink_secondary_refire 0.5
 set g_balance_crylink_secondary_animtime 0.3
 set g_balance_crylink_secondary_ammo 3
 set g_balance_crylink_secondary_bouncedamagefactor 0.5
+set g_balance_crylink_secondary_joinspeed 0
 
 set g_balance_crylink_secondary_middle_lifetime 5 // range: 10000 full, fades to 10000
 set g_balance_crylink_secondary_middle_fadetime 5
@@ -457,6 +460,7 @@ set g_balance_nex_charge_mindmg 40
 set g_balance_nex_charge_start 0
 set g_balance_nex_charge_rate 0.1
 set g_balance_nex_charge_limit 0.5
+set g_balance_nex_charge_rot_rate 0
 set g_balance_nex_charge_shot_multiplier 0.5
 set g_balance_nex_charge_velocity_rate 0.2
 set g_balance_nex_charge_minspeed 400
index bb704d3ca9064277bedd981c25cdde73b5d4d8d0..4649a6eaaf4a001965a2115fafedf4feca1c6f99 100644 (file)
@@ -224,6 +224,8 @@ 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_primary_gauntlet 0
+set g_balance_laser_primary_force_zscale 1
+set g_balance_laser_primary_force_velocitybias 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
@@ -237,6 +239,8 @@ 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
+set g_balance_laser_secondary_force_zscale 1
+set g_balance_laser_secondary_force_velocitybias 0
 // }}
 // {{{ shotgun
 set g_balance_shotgun_primary_bullets 6
@@ -290,8 +294,6 @@ set g_balance_grenadelauncher_primary_animtime 0.3
 set g_balance_grenadelauncher_primary_ammo 2
 set g_balance_grenadelauncher_primary_health 25
 set g_balance_grenadelauncher_primary_damageforcescale 4
-set g_balance_grenadelauncher_primary_bouncefactor 0.5
-set g_balance_grenadelauncher_primary_bouncestop 0.075
 set g_balance_grenadelauncher_primary_remote_minbouncecnt 0
 set g_balance_grenadelauncher_secondary_type 1
 set g_balance_grenadelauncher_secondary_damage 70
@@ -309,9 +311,10 @@ set g_balance_grenadelauncher_secondary_animtime 0.3
 set g_balance_grenadelauncher_secondary_ammo 2
 set g_balance_grenadelauncher_secondary_health 10
 set g_balance_grenadelauncher_secondary_damageforcescale 4
-set g_balance_grenadelauncher_secondary_bouncefactor 0.5
-set g_balance_grenadelauncher_secondary_bouncestop 0.075
 set g_balance_grenadelauncher_secondary_remote_detonateprimary 0
+
+set g_balance_grenadelauncher_bouncefactor 0.5
+set g_balance_grenadelauncher_bouncestop 0.075
 // }}}
 // {{{ minelayer // TODO
 set g_balance_minelayer_damage 35
@@ -389,11 +392,10 @@ set g_balance_crylink_primary_refire 0.4
 set g_balance_crylink_primary_animtime 0.3
 set g_balance_crylink_primary_ammo 2
 set g_balance_crylink_primary_bouncedamagefactor 0.5
+set g_balance_crylink_primary_joinspeed 0
 
 set g_balance_crylink_primary_middle_lifetime 5 // range: 35000 full, fades to 70000
 set g_balance_crylink_primary_middle_fadetime 5
-set g_balance_crylink_primary_star_lifetime 0.1 // range: 700 full, fades to 2450
-set g_balance_crylink_primary_star_fadetime 0.25
 set g_balance_crylink_primary_other_lifetime 0.1 // range: 700 full, fades to 2450
 set g_balance_crylink_primary_other_fadetime 0.25
 
@@ -410,6 +412,7 @@ set g_balance_crylink_secondary_refire 0.5
 set g_balance_crylink_secondary_animtime 0.3
 set g_balance_crylink_secondary_ammo 2
 set g_balance_crylink_secondary_bouncedamagefactor 0.5
+set g_balance_crylink_secondary_joinspeed 0
 
 set g_balance_crylink_secondary_middle_lifetime 5 // range: 35000 full, fades to 70000
 set g_balance_crylink_secondary_middle_fadetime 5
@@ -445,6 +448,7 @@ set g_balance_nex_charge_mindmg 40
 set g_balance_nex_charge_start 0
 set g_balance_nex_charge_rate 0.1
 set g_balance_nex_charge_limit 0.5
+set g_balance_nex_charge_rot_rate 0
 set g_balance_nex_charge_shot_multiplier 0.5
 set g_balance_nex_charge_velocity_rate 0.2
 set g_balance_nex_charge_minspeed 400
index 4b4a91c624cd70aaedffaf1ae7c7fb44784f8e0f..fc16e2ee34361a08b909bbe170150a4ee81d0202 100644 (file)
@@ -224,6 +224,8 @@ 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_primary_gauntlet 0
+set g_balance_laser_primary_force_zscale 1
+set g_balance_laser_primary_force_velocitybias 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
@@ -237,6 +239,8 @@ 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
+set g_balance_laser_secondary_force_zscale 1
+set g_balance_laser_secondary_force_velocitybias 0
 // }}}
 // {{{ shotgun
 set g_balance_shotgun_primary_bullets 6
@@ -290,8 +294,6 @@ set g_balance_grenadelauncher_primary_animtime 0.3
 set g_balance_grenadelauncher_primary_ammo 2
 set g_balance_grenadelauncher_primary_health 25
 set g_balance_grenadelauncher_primary_damageforcescale 4
-set g_balance_grenadelauncher_primary_bouncefactor 0.5
-set g_balance_grenadelauncher_primary_bouncestop 0.075
 set g_balance_grenadelauncher_primary_remote_minbouncecnt 0
 
 set g_balance_grenadelauncher_secondary_type 1
@@ -310,9 +312,10 @@ set g_balance_grenadelauncher_secondary_animtime 0.3
 set g_balance_grenadelauncher_secondary_ammo 2
 set g_balance_grenadelauncher_secondary_health 70
 set g_balance_grenadelauncher_secondary_damageforcescale 4
-set g_balance_grenadelauncher_secondary_bouncefactor 0.5
-set g_balance_grenadelauncher_secondary_bouncestop 0.075
 set g_balance_grenadelauncher_secondary_remote_detonateprimary 1
+
+set g_balance_grenadelauncher_bouncefactor 0.5
+set g_balance_grenadelauncher_bouncestop 0.075
 // }}}
 // {{{ minelayer // TODO
 set g_balance_minelayer_damage 35
@@ -390,11 +393,10 @@ set g_balance_crylink_primary_refire 0.4
 set g_balance_crylink_primary_animtime 0.3
 set g_balance_crylink_primary_ammo 2
 set g_balance_crylink_primary_bouncedamagefactor 0.5
+set g_balance_crylink_primary_joinspeed 0
 
 set g_balance_crylink_primary_middle_lifetime 5 // range: 35000 full, fades to 70000
 set g_balance_crylink_primary_middle_fadetime 5
-set g_balance_crylink_primary_star_lifetime 0.1 // range: 700 full, fades to 2450
-set g_balance_crylink_primary_star_fadetime 0.25
 set g_balance_crylink_primary_other_lifetime 0.1 // range: 700 full, fades to 2450
 set g_balance_crylink_primary_other_fadetime 0.25
 
@@ -411,6 +413,7 @@ set g_balance_crylink_secondary_refire 0.1
 set g_balance_crylink_secondary_animtime 0.1
 set g_balance_crylink_secondary_ammo 2
 set g_balance_crylink_secondary_bouncedamagefactor 0.5
+set g_balance_crylink_secondary_joinspeed 0
 
 set g_balance_crylink_secondary_middle_lifetime 5 // range: 35000 full, fades to 70000
 set g_balance_crylink_secondary_middle_fadetime 5
@@ -446,6 +449,7 @@ set g_balance_nex_charge_mindmg 40
 set g_balance_nex_charge_start 0
 set g_balance_nex_charge_rate 0.1
 set g_balance_nex_charge_limit 0.5
+set g_balance_nex_charge_rot_rate 0
 set g_balance_nex_charge_shot_multiplier 0.5
 set g_balance_nex_charge_velocity_rate 0.2
 set g_balance_nex_charge_minspeed 400
index 7defd001f794853cd137d0b40e8184d751276465..4bfe87bbd82c55c9d832819919209c5377082729 100644 (file)
@@ -176,8 +176,8 @@ set g_projectiles_spread_style 7
 // 7: forward + circle with (1-r)(2-r) falloff
 set g_balance_falldamage_deadminspeed 150
 set g_balance_falldamage_minspeed 800
-set g_balance_falldamage_factor 0.20
-set g_balance_falldamage_maxdamage 15
+set g_balance_falldamage_factor 0.02 // maxspeed = minspeed + maxdamage / factor = 4550
+set g_balance_falldamage_maxdamage 75
 // }}}
 
 // {{{ powerups
@@ -214,7 +214,7 @@ set g_balance_grapplehook_health 130
 // {{{ laser
 set g_balance_laser_primary_damage 20 // dps 33, hope that's not too high
 set g_balance_laser_primary_edgedamage 20
-set g_balance_laser_primary_force 270
+set g_balance_laser_primary_force 200 // this looks insanely low, but actually isn't with zscale and velocitybias
 set g_balance_laser_primary_radius 60
 set g_balance_laser_primary_speed 4000
 set g_balance_laser_primary_spread 0
@@ -222,8 +222,10 @@ 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.03
+set g_balance_laser_primary_delay 0
 set g_balance_laser_primary_gauntlet 0
+set g_balance_laser_primary_force_zscale 1.35 // 270 upforce
+set g_balance_laser_primary_force_velocitybias 0.25
 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
@@ -237,6 +239,8 @@ 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
+set g_balance_laser_secondary_force_zscale 1
+set g_balance_laser_secondary_force_velocitybias 0.25
 // }}}
 // {{{ shotgun
 set g_balance_shotgun_primary_bullets 10
@@ -290,8 +294,6 @@ set g_balance_grenadelauncher_primary_animtime 0.3
 set g_balance_grenadelauncher_primary_ammo 2
 set g_balance_grenadelauncher_primary_health 25
 set g_balance_grenadelauncher_primary_damageforcescale 4
-set g_balance_grenadelauncher_primary_bouncefactor 0.5
-set g_balance_grenadelauncher_primary_bouncestop 0.075
 set g_balance_grenadelauncher_primary_remote_minbouncecnt 0
 
 set g_balance_grenadelauncher_secondary_type 1
@@ -310,9 +312,10 @@ set g_balance_grenadelauncher_secondary_animtime 0.3
 set g_balance_grenadelauncher_secondary_ammo 2
 set g_balance_grenadelauncher_secondary_health 10
 set g_balance_grenadelauncher_secondary_damageforcescale 4
-set g_balance_grenadelauncher_secondary_bouncefactor 0.5
-set g_balance_grenadelauncher_secondary_bouncestop 0.075
 set g_balance_grenadelauncher_secondary_remote_detonateprimary 0
+
+set g_balance_grenadelauncher_bouncefactor 0.5
+set g_balance_grenadelauncher_bouncestop 0.075
 // }}}
 // {{{ minelayer // TODO
 set g_balance_minelayer_damage 35
@@ -390,11 +393,10 @@ set g_balance_crylink_primary_refire 1
 set g_balance_crylink_primary_animtime 0.4
 set g_balance_crylink_primary_ammo 2
 set g_balance_crylink_primary_bouncedamagefactor 0.2
+set g_balance_crylink_primary_joinspeed 150
 
 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 2 // range: 800 full, fades to 1300
-set g_balance_crylink_primary_star_fadetime 0.25
 set g_balance_crylink_primary_other_lifetime 2 // range: 800 full, fades to 1300
 set g_balance_crylink_primary_other_fadetime 0.25
 
@@ -411,6 +413,7 @@ set g_balance_crylink_secondary_refire 0.15
 set g_balance_crylink_secondary_animtime 0.15
 set g_balance_crylink_secondary_ammo 1
 set g_balance_crylink_secondary_bouncedamagefactor 0.5
+set g_balance_crylink_secondary_joinspeed 150
 
 set g_balance_crylink_secondary_middle_lifetime 5 // range: 10000 full, fades to 10000
 set g_balance_crylink_secondary_middle_fadetime 5
@@ -446,6 +449,7 @@ set g_balance_nex_charge_mindmg 10
 set g_balance_nex_charge_start 0
 set g_balance_nex_charge_rate 0.35
 set g_balance_nex_charge_limit 0.5
+set g_balance_nex_charge_rot_rate 0
 set g_balance_nex_charge_shot_multiplier 0
 set g_balance_nex_charge_velocity_rate 0
 set g_balance_nex_charge_minspeed 400
index d50669f3a00875831821987dd17098175c51560f..55d0fe69f99309bd75145fd536d16fcecbed4fb3 100644 (file)
@@ -31,8 +31,8 @@ set g_warmup_start_ammo_nails 150 "starting values when being in warmup-stage"
 set g_warmup_start_ammo_rockets 50 "starting values when being in warmup-stage"
 set g_warmup_start_ammo_cells 50 "starting values when being in warmup-stage"
 set g_warmup_start_ammo_fuel 0 "starting values when being in warmup-stage"
-set g_lms_start_health 200
-set g_lms_start_armor 100
+set g_lms_start_health 250
+set g_lms_start_armor 250
 set g_lms_start_ammo_shells 30
 set g_lms_start_ammo_nails 250
 set g_lms_start_ammo_rockets 100
@@ -66,34 +66,34 @@ set g_pickup_rockets_weapon 15
 set g_pickup_rockets_max 150
 set g_pickup_cells 30
 set g_pickup_cells_weapon 20
-set g_pickup_cells_max 200
+set g_pickup_cells_max 150
 set g_pickup_fuel 25
 set g_pickup_fuel_weapon 15
 set g_pickup_fuel_jetpack 50
 set g_pickup_fuel_max 100
 set g_pickup_armorsmall 5
-set g_pickup_armorsmall_max 200
+set g_pickup_armorsmall_max 250
 set g_pickup_armorsmall_anyway 1
 set g_pickup_armormedium 25
-set g_pickup_armormedium_max 200
+set g_pickup_armormedium_max 250
 set g_pickup_armormedium_anyway 1
 set g_pickup_armorbig 50
-set g_pickup_armorbig_max 200
+set g_pickup_armorbig_max 250
 set g_pickup_armorbig_anyway 1
 set g_pickup_armorlarge 100
-set g_pickup_armorlarge_max 200
+set g_pickup_armorlarge_max 250
 set g_pickup_armorlarge_anyway 1
 set g_pickup_healthsmall 5
-set g_pickup_healthsmall_max 200
+set g_pickup_healthsmall_max 250
 set g_pickup_healthsmall_anyway 1
 set g_pickup_healthmedium 25
-set g_pickup_healthmedium_max 100
+set g_pickup_healthmedium_max 150
 set g_pickup_healthmedium_anyway 0
 set g_pickup_healthlarge 50
-set g_pickup_healthlarge_max 100
+set g_pickup_healthlarge_max 150
 set g_pickup_healthlarge_anyway 0
 set g_pickup_healthmega 100
-set g_pickup_healthmega_max 200
+set g_pickup_healthmega_max 250
 set g_pickup_healthmega_anyway 1
 set g_pickup_respawntime_short 15
 set g_pickup_respawntime_medium 20
@@ -155,7 +155,7 @@ set g_balance_firetransfer_time 0.9
 set g_balance_firetransfer_damage 0.8
 set g_throughfloor_damage 0.5
 set g_throughfloor_force 0.7
-set g_projectiles_newton_style 0
+set g_projectiles_newton_style 2
 // possible values:
 // 0: absolute velocity projectiles (like Quake)
 // 1: relative velocity projectiles, "Newtonian" (like Tribes 2)
@@ -164,7 +164,7 @@ set g_projectiles_newton_style 0
 // 4: just add the player velocity length to the absolute velocity (tZork's sniper rockets)
 set g_projectiles_newton_style_2_minfactor 0.7
 set g_projectiles_newton_style_2_maxfactor 5
-set g_projectiles_spread_style 4
+set g_projectiles_spread_style 7
 // possible values:
 // 0: forward + solid sphere (like Quake) - varies velocity
 // 1: forward + flattened solid sphere
@@ -214,7 +214,7 @@ set g_balance_grapplehook_health 130
 // {{{ laser
 set g_balance_laser_primary_damage 20 // dps 33, hope that's not too high
 set g_balance_laser_primary_edgedamage 20
-set g_balance_laser_primary_force 235
+set g_balance_laser_primary_force 150 // this looks insanely low, but actually isn't with zscale and velocitybias
 set g_balance_laser_primary_radius 60
 set g_balance_laser_primary_speed 4000
 set g_balance_laser_primary_spread 0
@@ -224,6 +224,8 @@ 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_primary_gauntlet 0
+set g_balance_laser_primary_force_zscale 2 // 300 upforce
+set g_balance_laser_primary_force_velocitybias 0.3
 set g_balance_laser_secondary 0 // when 1, a secondary laser mode exists
 set g_balance_laser_secondary_damage 200 // dps
 set g_balance_laser_secondary_edgedamage 0
@@ -237,6 +239,8 @@ 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
+set g_balance_laser_secondary_force_zscale 1.25
+set g_balance_laser_secondary_force_velocitybias 0
 // }}}
 // {{{ shotgun
 set g_balance_shotgun_primary_bullets 20
@@ -290,8 +294,6 @@ set g_balance_grenadelauncher_primary_animtime 0.4
 set g_balance_grenadelauncher_primary_ammo 2
 set g_balance_grenadelauncher_primary_health 80
 set g_balance_grenadelauncher_primary_damageforcescale 0
-set g_balance_grenadelauncher_primary_bouncefactor 0.5
-set g_balance_grenadelauncher_primary_bouncestop 0.12
 set g_balance_grenadelauncher_primary_remote_minbouncecnt 0
 
 set g_balance_grenadelauncher_secondary_type 1
@@ -310,9 +312,10 @@ set g_balance_grenadelauncher_secondary_animtime 0.4
 set g_balance_grenadelauncher_secondary_ammo 2
 set g_balance_grenadelauncher_secondary_health 40
 set g_balance_grenadelauncher_secondary_damageforcescale 0
-set g_balance_grenadelauncher_secondary_bouncefactor 0.5
-set g_balance_grenadelauncher_secondary_bouncestop 0.12
 set g_balance_grenadelauncher_secondary_remote_detonateprimary 0
+
+set g_balance_grenadelauncher_bouncefactor 0.5
+set g_balance_grenadelauncher_bouncestop 0.12
 // }}}
 // {{{ minelayer // TODO
 set g_balance_minelayer_damage 35
@@ -390,11 +393,10 @@ set g_balance_crylink_primary_refire 0.8
 set g_balance_crylink_primary_animtime 0.4
 set g_balance_crylink_primary_ammo 2
 set g_balance_crylink_primary_bouncedamagefactor 0.2
+set g_balance_crylink_primary_joinspeed 150
 
 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 2 // range: 800 full, fades to 1300
-set g_balance_crylink_primary_star_fadetime 0.25
 set g_balance_crylink_primary_other_lifetime 2 // range: 800 full, fades to 1300
 set g_balance_crylink_primary_other_fadetime 0.25
 
@@ -411,6 +413,7 @@ set g_balance_crylink_secondary_refire 0.15
 set g_balance_crylink_secondary_animtime 0.15
 set g_balance_crylink_secondary_ammo 1
 set g_balance_crylink_secondary_bouncedamagefactor 0.5
+set g_balance_crylink_secondary_joinspeed 0
 
 set g_balance_crylink_secondary_middle_lifetime 5 // range: 10000 full, fades to 10000
 set g_balance_crylink_secondary_middle_fadetime 5
@@ -443,9 +446,10 @@ set g_balance_nex_secondary_damagefalloff_forcehalflife 0
 
 set g_balance_nex_charge 1
 set g_balance_nex_charge_mindmg 40
-set g_balance_nex_charge_start 0.2
+set g_balance_nex_charge_start 0.5
 set g_balance_nex_charge_rate 0.05
 set g_balance_nex_charge_limit 0.5
+set g_balance_nex_charge_rot_rate 0.01
 set g_balance_nex_charge_shot_multiplier 0.675
 set g_balance_nex_charge_velocity_rate 0.15
 set g_balance_nex_charge_minspeed 400
@@ -460,7 +464,7 @@ set g_balance_minstanex_ammo 10
 set g_balance_hagar_primary_damage 12
 set g_balance_hagar_primary_edgedamage 6
 set g_balance_hagar_primary_force 70
-set g_balance_hagar_primary_radius 100
+set g_balance_hagar_primary_radius 125
 set g_balance_hagar_primary_spread 0.1
 set g_balance_hagar_primary_speed 1800
 set g_balance_hagar_primary_lifetime 5
@@ -470,7 +474,7 @@ set g_balance_hagar_secondary 1
 set g_balance_hagar_secondary_damage 12
 set g_balance_hagar_secondary_edgedamage 6
 set g_balance_hagar_secondary_force 70
-set g_balance_hagar_secondary_radius 100
+set g_balance_hagar_secondary_radius 135
 set g_balance_hagar_secondary_spread 0.15
 set g_balance_hagar_secondary_speed 1800
 set g_balance_hagar_secondary_lifetime_min 5
@@ -479,7 +483,7 @@ set g_balance_hagar_secondary_refire 0.12
 set g_balance_hagar_secondary_ammo 1
 // }}}
 // {{{ rocketlauncher // TODO
-set g_balance_rocketlauncher_damage 100
+set g_balance_rocketlauncher_damage 90
 set g_balance_rocketlauncher_edgedamage 33
 set g_balance_rocketlauncher_force 350
 set g_balance_rocketlauncher_radius 125
@@ -537,20 +541,20 @@ set g_balance_hook_secondary_power 3 // effect behaves like a square function
 set g_balance_hook_secondary_duration 1.5 // effect runs for three seconds
 // }}}
 // {{{ hlac
-set g_balance_hlac_primary_spread_min 0
-set g_balance_hlac_primary_spread_max 0
-set g_balance_hlac_primary_spread_add 0
-set g_balance_hlac_primary_spread_crouchmod 0
+set g_balance_hlac_primary_spread_min 0.01
+set g_balance_hlac_primary_spread_max 0.075
+set g_balance_hlac_primary_spread_add 0.001
+set g_balance_hlac_primary_spread_crouchmod 0.25
 
 set g_balance_hlac_primary_damage 15
-set g_balance_hlac_primary_edgedamage 0
+set g_balance_hlac_primary_edgedamage 5
 set g_balance_hlac_primary_force 70
 set g_balance_hlac_primary_radius 30
 set g_balance_hlac_primary_speed 2500
 set g_balance_hlac_primary_lifetime 5
 
 set g_balance_hlac_primary_refire 0.1
-set g_balance_hlac_primary_animtime 0.4
+set g_balance_hlac_primary_animtime 0.3
 set g_balance_hlac_primary_ammo 1
 
 set g_balance_hlac_secondary 1
@@ -558,15 +562,15 @@ set g_balance_hlac_secondary_spread 0.15
 set g_balance_hlac_secondary_spread_crouchmod 0.5
 
 set g_balance_hlac_secondary_damage 20
-set g_balance_hlac_secondary_edgedamage 0
-set g_balance_hlac_secondary_force 40
+set g_balance_hlac_secondary_edgedamage 5
+set g_balance_hlac_secondary_force 100
 set g_balance_hlac_secondary_radius 35
 set g_balance_hlac_secondary_speed 2500
 set g_balance_hlac_secondary_lifetime 5
 
-set g_balance_hlac_secondary_refire 1
-set g_balance_hlac_secondary_animtime 0.7
-set g_balance_hlac_secondary_ammo 10
+set g_balance_hlac_secondary_refire 0.8
+set g_balance_hlac_secondary_animtime 0.6
+set g_balance_hlac_secondary_ammo 4
 set g_balance_hlac_secondary_shots 6
 // }}}
 // {{{ campingrifle
@@ -576,7 +580,7 @@ set g_balance_campingrifle_auto_reload_after_changing_weapons 0
 set g_balance_campingrifle_bursttime 0
 set g_balance_campingrifle_primary_tracer 1
 set g_balance_campingrifle_primary_damage 75
-set g_balance_campingrifle_primary_headshotaddeddamage 75
+set g_balance_campingrifle_primary_headshotaddeddamage 125
 set g_balance_campingrifle_primary_spread 0
 set g_balance_campingrifle_primary_force 2
 set g_balance_campingrifle_primary_speed 40000
@@ -590,7 +594,7 @@ set g_balance_campingrifle_primary_bullethail 0 // empty magazine on shot
 set g_balance_campingrifle_secondary 1
 set g_balance_campingrifle_secondary_tracer 0
 set g_balance_campingrifle_secondary_damage 50
-set g_balance_campingrifle_secondary_headshotaddeddamage 50 // 50 damage only on head
+set g_balance_campingrifle_secondary_headshotaddeddamage 75
 set g_balance_campingrifle_secondary_spread 0
 set g_balance_campingrifle_secondary_force 2
 set g_balance_campingrifle_secondary_speed 20000
index 7ab11edf78a184a3eb860e52ddea580a174842bd..7bf8285d9009b53728e8a848451c4a7d58e36975 100644 (file)
@@ -224,6 +224,8 @@ 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_primary_gauntlet 0
+set g_balance_laser_primary_force_zscale 1
+set g_balance_laser_primary_force_velocitybias 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
@@ -237,6 +239,8 @@ 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
+set g_balance_laser_secondary_force_zscale 1
+set g_balance_laser_secondary_force_velocitybias 0
 // }}}
 // {{{ shotgun
 set g_balance_shotgun_primary_bullets 10
@@ -290,8 +294,6 @@ set g_balance_grenadelauncher_primary_animtime 0.3
 set g_balance_grenadelauncher_primary_ammo 2
 set g_balance_grenadelauncher_primary_health 25
 set g_balance_grenadelauncher_primary_damageforcescale 4
-set g_balance_grenadelauncher_primary_bouncefactor 0.5
-set g_balance_grenadelauncher_primary_bouncestop 0.075
 set g_balance_grenadelauncher_primary_remote_minbouncecnt 0
 
 set g_balance_grenadelauncher_secondary_type 1
@@ -310,9 +312,10 @@ set g_balance_grenadelauncher_secondary_animtime 0.3
 set g_balance_grenadelauncher_secondary_ammo 2
 set g_balance_grenadelauncher_secondary_health 10
 set g_balance_grenadelauncher_secondary_damageforcescale 4
-set g_balance_grenadelauncher_secondary_bouncefactor 0.5
-set g_balance_grenadelauncher_secondary_bouncestop 0.075
 set g_balance_grenadelauncher_secondary_remote_detonateprimary 0
+
+set g_balance_grenadelauncher_bouncefactor 0.5
+set g_balance_grenadelauncher_bouncestop 0.075
 // }}}
 // {{{ minelayer // TODO
 set g_balance_minelayer_damage 35
@@ -391,11 +394,10 @@ set g_balance_crylink_primary_refire 1
 set g_balance_crylink_primary_animtime 0.4
 set g_balance_crylink_primary_ammo 2
 set g_balance_crylink_primary_bouncedamagefactor 0.2
+set g_balance_crylink_primary_joinspeed 0
 
 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 2 // range: 800 full, fades to 1300
-set g_balance_crylink_primary_star_fadetime 0.25
 set g_balance_crylink_primary_other_lifetime 2 // range: 800 full, fades to 1300
 set g_balance_crylink_primary_other_fadetime 0.25
 
@@ -412,6 +414,7 @@ set g_balance_crylink_secondary_refire 0.15
 set g_balance_crylink_secondary_animtime 0.15
 set g_balance_crylink_secondary_ammo 1
 set g_balance_crylink_secondary_bouncedamagefactor 0.5
+set g_balance_crylink_secondary_joinspeed 0
 
 set g_balance_crylink_secondary_middle_lifetime 5 // range: 10000 full, fades to 10000
 set g_balance_crylink_secondary_middle_fadetime 5
@@ -447,6 +450,7 @@ set g_balance_nex_charge_mindmg 10
 set g_balance_nex_charge_start 0
 set g_balance_nex_charge_rate 0.35
 set g_balance_nex_charge_limit 0.5
+set g_balance_nex_charge_rot_rate 0
 set g_balance_nex_charge_shot_multiplier 0
 set g_balance_nex_charge_velocity_rate 0
 set g_balance_nex_charge_minspeed 400
index 88acfa705a203c1f7409408e3c92de333e35eee5..7d0c2e61a348ed603a7406c488913d940131cc09 100644 (file)
@@ -217,7 +217,15 @@ seta crosshair_fireball_alpha 1    "crosshair alpha value to display when wielding
 seta crosshair_fireball_size 1 "crosshair size when wielding the fireball"
 seta crosshair_ring_size 2     "bullet counter ring size for Rifle, velocity ring for Nex"
 seta crosshair_campingrifle_bulletcounter_alpha 0.15
+
 seta crosshair_nexvelocity_alpha 0.15
+seta crosshair_nexvelocity_currentcharge_scale 30
+seta crosshair_nexvelocity_currentcharge_alpha 0.15
+seta crosshair_nexvelocity_currentcharge_color_red 0.8
+seta crosshair_nexvelocity_currentcharge_color_green 0
+seta crosshair_nexvelocity_currentcharge_color_blue 0
+seta crosshair_nexvelocity_currentcharge_movingavg_rate 0.05
+
 seta cl_reticle_stretch 0 "whether to stretch reticles so they fit the screen (brakes image proportions)"
 seta cl_reticle_item_nex 1 "draw aiming recticle for the nex weapon's zoom, 0 disables and values between 0 and 1 change alpha"
 seta cl_reticle_item_normal 1 "draw recticle when zooming with the zoom button, 0 disables and values between 0 and 1 change alpha"
@@ -361,11 +369,11 @@ set sv_fragmessage_information_typefrag 1 "Enable typefrag display information,
 
 // use default physics
 set sv_friction_on_land 0
-exec physicsNoQWBunny-xpmbased.cfg
 
-set sv_player_viewoffset "0 0 42" "view offset of the player model"
+set sv_player_viewoffset "0 0 35" "view offset of the player model"
 set sv_player_mins "-16 -16 -24" "playermodel mins"
 set sv_player_maxs "16 16 45" "playermodel maxs"
+set sv_player_headsize "24 24 12" "playermodel headshot bbox size (centered at top of player bbox, preview with r_showbboxes)" // actually SHOULD be 19.2 19.2 10 according to docs
 set sv_player_crouch_viewoffset "0 0 20" "view offset of the player model when crouched"
 set sv_player_crouch_mins "-16 -16 -24" "mins of a crouched playermodel"
 set sv_player_crouch_maxs "16 16 25" "maxs of a crouched playermodel"
@@ -690,8 +698,6 @@ set g_ctf_flag_pickup_effects 1
 set g_ctf_flag_capture_effects 1
 set g_ctf_captimerecord_always 0 "if enabled, assisted CTF records (with other players on the server) are recorded too"
 
-exec ctfscoring-ai.cfg
-
 // runematch
 set g_runematch                                                0 "Runematch: pick up and hold the runes, special items that give you points, a special power (rune) and a disadvantage (curse)"
 set g_runematch_pointrate                              5
@@ -863,11 +869,6 @@ set g_nexball_trail_color     254  "1-256 for different colors (Quake palette, 2
 
 set g_nexball_radar_showallplayers 1  "1: show every player and the ball on the radar  0: only show teammates and the ball on the radar"
 
-// server game balance settings
-// powerup balance settings
-// weapon balance settings follow
-exec balanceXonotic.cfg
-
 set g_bloodloss 0   "amount of health below which blood loss occurs"
 
 set g_footsteps 1      "serverside footstep sounds"
@@ -915,7 +916,6 @@ r_glsl_offsetmapping_reliefmapping 0
 r_glsl_offsetmapping_scale 0.02
 // execute effects-normal.cfg to make sure that all effect settings are reset
 alias menu_sync "" // will be re-aliased later
-exec effects-normal.cfg
 
 // misc
 fs_empty_files_in_pack_mark_deletions 1 // makes patches able to delete files
@@ -1372,12 +1372,6 @@ seta hud_configure_grid_alpha 0.15 "alpha for visible grid when in configure mod
 
 seta sbar_info_pos 0 "Y-axis distance from lower right corner for engine info prints"
 
-// hud cvar descriptions
-exec _hud_descriptions.cfg
-// exec the default skin config
-// please add any new cvars into the hud_save script in qcsrc/client/hud.qc for consistency
-exec hud_luminos.cfg
-
 // user preference cvars (i.e. shouldn't be adjusted by a skin config) 
 seta hud_panel_weapons_label 1 "1 = show number of weapon, 2 = show bound key of weapon"
 seta hud_panel_weapons_complainbubble_time 1 "time that a new entry stays until it fades out"
@@ -1617,8 +1611,6 @@ set sv_clones 0   "number of clones a player may make (reset by the \"kill\" comma
 
 set cl_handicap 1      "the higher, the more damage you will receive (client setting)"
 
-exec turrets.cfg
-
 // must be at the bottom of this file:
 // alias for switching the teamselect menu
 alias menu_showteamselect "menu_cmd directmenu TeamSelect"
@@ -2011,8 +2003,25 @@ seta cl_allow_uid2name -1 "-1 = ask if the player wants to disable/enable this f
 // polygonoffset for submodel SUCKS SUCKS SUCKS (only a hack for quake1, we don't need that)
 r_polygonoffset_submodel_offset 0
 r_polygonoffset_submodel_factor 0
-// workaround for "decals flicker all the time" - note that this polygonoffset still is not perfect, also, why do decals need higher polygonoffset when in a warpzone
-// this workaround causes decals to sometimes be visible through walls! (not seen it happen yet though other than on zfightometer)
-// once the issue is found, please revert back to the default of -14
-r_polygonoffset_decals_offset -100
+// decals: need a higher polygonoffset than default to not compete with _decal surfaces too much
+r_polygonoffset_decals_offset -28
 r_polygonoffset_decals_factor 0
+// this is mainly for _decal entities (their shaders should use "polygonoffset" shader parameter) - this is "good enough" as it seems, but smaller than the decals one so these don't zfight decals
+mod_q3shader_default_polygonoffset -14
+mod_q3shader_default_polygonfactor 0
+
+// allow fullbright
+set sv_allow_fullbright 0 "when set, clients may use r_fullbright on this server without getting a night vision effect overlay"
+
+// other config files
+exec balanceXonotic.cfg
+exec ctfscoring-ai.cfg
+exec effects-normal.cfg
+exec physicsNoQWBunny-xpmbased.cfg
+exec turrets.cfg
+
+// hud cvar descriptions
+exec _hud_descriptions.cfg
+// exec the default skin config
+// please add any new cvars into the hud_save script in qcsrc/client/hud.qc for consistency
+exec hud_luminos.cfg
index 3ad766d85ff714ded5623b3f1ef287583faa6dbb..9529ebecc84f6ab943ba4fe2712014a46ae85b02 100644 (file)
@@ -5060,3 +5060,56 @@ velocitymultiplier 2.5
 airfriction 8
 gravity 1.3
 stretchfactor 0.1
+
+
+
+// crylink linkjoin effect
+// decal
+// used in qcsrc/client/damage.qc:                                     pointparticles(particleeffectnum("crylink_linkjoin"), org2, '0 0 0', 1)
+effect crylink_linkjoin
+countabsolute 1
+type decal
+tex 47 47
+size 8 8
+alpha 256 256 0
+originjitter 12 12 12
+//lightradius 60
+//lightradiusfade 300
+//lightcolor 3.2 0.4 4
+// purple flare effect
+effect crylink_linkjoin
+countabsolute 1
+type static
+tex 39 39
+color 0x504060 0x504060
+size 8 8
+alpha 256 256 512
+// purple sparks
+effect crylink_linkjoin
+count 10
+type spark
+tex 41 41
+color 0xA040C0 0xA040C0
+bounce 2
+size 1 2
+alpha 256 256 1024
+velocityjitter 256 256 256
+// purple splash
+effect crylink_linkjoin
+count 1.5
+type static
+color 0xE070FF 0xE070FF
+size 8 8
+alpha 256 256 512
+velocityjitter 8 8 8
+// purple splash
+effect crylink_linkjoin
+count 1.5
+type static
+color 0xE070FF 0xE070FF
+size 8 8
+alpha 256 256 1024
+velocityjitter 32 32 32
+
+
+
diff --git a/gfx/crosshair_ring_inner.tga b/gfx/crosshair_ring_inner.tga
new file mode 100644 (file)
index 0000000..3bf51b5
Binary files /dev/null and b/gfx/crosshair_ring_inner.tga differ
diff --git a/gfx/menu/xaw/colorpicker_selected.tga b/gfx/menu/xaw/colorpicker_selected.tga
new file mode 100644 (file)
index 0000000..605e932
Binary files /dev/null and b/gfx/menu/xaw/colorpicker_selected.tga differ
index 5d9a1280b6ae7d4bb21adef218a4edcc5aada830..dc82a81f54702c34e8273b6003e42fd25f09b1bb 100644 (file)
@@ -1,29 +1,34 @@
-// These have been modified from Nexuiz 2.4.2's physicsQBR.cfg file and a bunch of other crap div0 threw on here :P
-// DO NOT SCREW WITH friction on land, edge friction, step height, or sv_airaccel_qw
-sv_gravity 819
-sv_maxspeed 420
-sv_maxairspeed 283
+// "NoQWBunny" physics based on XPM
+sv_gravity 800
+sv_maxspeed 320
+sv_maxairspeed 424
 
 sv_stopspeed 100
 sv_accelerate 13
-sv_airaccelerate 6
-sv_friction 9.6 // higher values make you slide less
-edgefriction 1 // div0 says no! lol
+sv_airaccelerate 2
+sv_friction 8
+edgefriction 1
 sv_stepheight 26
-sv_jumpvelocity 304
+// Q1: 16+2
+// Nex: 32+2
+// we try: 24+2
+
+// actually, what we want is 266.6666 for 180bpm
+// but 260 takes same amount of frames and is nicer to mappers
+sv_jumpvelocity 260
 sv_wateraccelerate -1
 sv_waterfriction -1
-sv_airaccel_sideways_friction 0 // pain in the ass to tweak without screwing up the strafing
-sv_airaccel_qw -0.93 //given a negative value to combat potential cheats, was told by divVerent not to mess with it
+sv_airaccel_sideways_friction 0
+sv_airaccel_qw -0.8
 
-sv_airstopaccelerate 0
-sv_airstrafeaccelerate 0
-sv_maxairstrafespeed 0
-sv_airstrafeaccel_qw 0
-sv_aircontrol 0
-sv_aircontrol_penalty 0
+sv_airstopaccelerate 3
+sv_airstrafeaccelerate 24
+sv_maxairstrafespeed 100
+sv_airstrafeaccel_qw -0.95
+sv_aircontrol 125
+sv_aircontrol_penalty 150
 sv_aircontrol_power 2
-sv_airspeedlimit_nonqw 0
+sv_airspeedlimit_nonqw 800
 sv_warsowbunny_turnaccel 0
 sv_warsowbunny_accel 0.1593
 sv_warsowbunny_topspeed 925
@@ -31,5 +36,5 @@ sv_warsowbunny_backtosideratio 0.8
 sv_friction_on_land 0
 sv_doublejump 0
 sv_jumpspeedcap_min ""
-sv_jumpspeedcap_max 0.38
-sv_jumpspeedcap_max_disable_on_ramps 0
+sv_jumpspeedcap_max ""
+sv_jumpspeedcap_max_disable_on_ramps 1
diff --git a/physicsLeeStricklinOld.cfg b/physicsLeeStricklinOld.cfg
new file mode 100644 (file)
index 0000000..5d9a128
--- /dev/null
@@ -0,0 +1,35 @@
+// These have been modified from Nexuiz 2.4.2's physicsQBR.cfg file and a bunch of other crap div0 threw on here :P
+// DO NOT SCREW WITH friction on land, edge friction, step height, or sv_airaccel_qw
+sv_gravity 819
+sv_maxspeed 420
+sv_maxairspeed 283
+
+sv_stopspeed 100
+sv_accelerate 13
+sv_airaccelerate 6
+sv_friction 9.6 // higher values make you slide less
+edgefriction 1 // div0 says no! lol
+sv_stepheight 26
+sv_jumpvelocity 304
+sv_wateraccelerate -1
+sv_waterfriction -1
+sv_airaccel_sideways_friction 0 // pain in the ass to tweak without screwing up the strafing
+sv_airaccel_qw -0.93 //given a negative value to combat potential cheats, was told by divVerent not to mess with it
+
+sv_airstopaccelerate 0
+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
+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 0.38
+sv_jumpspeedcap_max_disable_on_ramps 0
index 0d822e1642777a5c6e586394b8f4e99cfa61d26e..8e47e6fa5bd880bc815444ae80c154985793ca6a 100644 (file)
@@ -267,3 +267,7 @@ float bgmtime;
 
 string weaponorder_byimpulse;
 string weaponorder_bypriority;
+
+float nex_charge_movingavg;
+
+float serverflags;
index 4846a9fef572aab667fafb724778051d7c69f78c..d358a59a536db28ea46dd630f8c4e7b941264fe4 100644 (file)
@@ -1093,6 +1093,8 @@ void Ent_Init()
        nex_scope = !ReadByte();
        campingrifle_scope = !ReadByte();
 
+       serverflags = ReadByte();
+
        if(!postinit)
                PostInit();
 }
index b41c45e43b646adfa1bc65396ed5545d6da7daeb..15f151e18792d438f445e0ad4dc10e07a998dd15 100644 (file)
@@ -566,7 +566,8 @@ void CSQC_UpdateView(float w, float h)
        // next R_RenderScene call
        drawstring('0 0 0', "", '1 1 0', '1 1 1', 0, 0);
 
-       if(cvar("r_fakelight") >= 2 || cvar("r_fullbright"))
+       if(cvar("r_fakelight") >= 2 || cvar("r_fullbright") >= 1)
+       if not(serverflags & SERVERFLAG_ALLOW_FULLBRIGHT)
        {
                // apply night vision effect
                vector rgb, tc_00, tc_01, tc_10, tc_11;
@@ -858,6 +859,9 @@ void CSQC_UpdateView(float w, float h)
                        float nex_charge;
                        nex_charge = getstatf(STAT_NEX_CHARGE);
 
+                       if(nex_charge_movingavg == 0) // this should only happen if we have just loaded up the game
+                               nex_charge_movingavg = nex_charge;
+
                        // ring around crosshair representing bullets left in camping rifle clip
                        if (activeweapon == WEP_CAMPINGRIFLE && cr_maxbullets)
                        {
@@ -869,6 +873,15 @@ void CSQC_UpdateView(float w, float h)
                        }
                        else if (activeweapon == WEP_NEX && nex_charge) // ring around crosshair representing velocity-dependent damage for the nex
                        {
+                               vector rgb;
+                               // indicate how much we're charging right now with an inner circle
+                               a = cvar("crosshair_nexvelocity_currentcharge_alpha");
+                               nex_charge_movingavg = (1 - cvar("crosshair_nexvelocity_currentcharge_movingavg_rate")) * nex_charge_movingavg + cvar("crosshair_nexvelocity_currentcharge_movingavg_rate") * nex_charge;
+
+                               rgb = eX * cvar("crosshair_nexvelocity_currentcharge_color_red") + eY * cvar("crosshair_nexvelocity_currentcharge_color_green") + eZ * cvar("crosshair_nexvelocity_currentcharge_color_blue");
+                               DrawCircleClippedPic(wcross_origin, wcross_size_x * ring_scale, "gfx/crosshair_ring_inner.tga", bound(0, cvar("crosshair_nexvelocity_currentcharge_scale") * (nex_charge - nex_charge_movingavg), 1), rgb, wcross_alpha * a, DRAWFLAG_ADDITIVE);
+
+                               // draw the charge
                                a = cvar("crosshair_nexvelocity_alpha");
                                DrawCircleClippedPic(wcross_origin, wcross_size_x * ring_scale, "gfx/crosshair_ring.tga", nex_charge, wcross_color, wcross_alpha * a, DRAWFLAG_ADDITIVE);
                        }
index 2ca312c54129dbf016c5655599603f5c022e0861..22fd92493c557e98c9583fae0c18c4b1c03ae44f 100644 (file)
@@ -2688,7 +2688,11 @@ void HUD_KillNotify(string s1, string s2, string s3, float type, float msg) // s
        } else if(msg == MSG_KILL) {
                w = DEATH_WEAPONOF(type);
                if(WEP_VALID(w)) {
-                       HUD_KillNotify_Push(s1, s2, 1, type);
+                       if((w == WEP_CAMPINGRIFLE || w == WEP_MINSTANEX) && type & HITTYPE_HEADSHOT) // all headshot weapons go here
+                               HUD_KillNotify_Push(s1, s2, 1, DEATH_HEADSHOT);
+                       else
+                               HUD_KillNotify_Push(s1, s2, 1, type);
+
                        if (alsoprint)
                                print("^1", sprintf(Weapon_KillMessage(type), strcat(s2, "^1"), strcat(s1, "^1")), "\n"); // default order: victim, killer
                }
@@ -3328,6 +3332,10 @@ void HUD_Notify (void)
                        {
                                s = "notify_void";
                        }
+                       else if(killnotify_deathtype[j] == DEATH_HEADSHOT)
+                       {
+                               s = "notify_headshot";
+                       }
                        else if(killnotify_deathtype[j] == RACE_SERVER_RECORD)
                        {
                                s = "race_newrecordserver";
@@ -3961,11 +3969,17 @@ void HUD_VoteWindow(void)
        }
 
        // draw the progress bars
-       drawsetcliparea(pos_x, pos_y, mySize_x * 0.5 * (vote_yescount/vote_needed), mySize_y);
-       drawpic_skin(pos + eY * (5/8) * mySize_y, "voteprogress_prog", eX * mySize_x + eY * (3/8) * mySize_y, '1 1 1', a, DRAWFLAG_NORMAL);
+       if(vote_yescount && vote_needed)
+       {
+               drawsetcliparea(pos_x, pos_y, mySize_x * 0.5 * (vote_yescount/vote_needed), mySize_y);
+               drawpic_skin(pos + eY * (5/8) * mySize_y, "voteprogress_prog", eX * mySize_x + eY * (3/8) * mySize_y, '1 1 1', a, DRAWFLAG_NORMAL);
+       }
 
-       drawsetcliparea(pos_x + mySize_x - mySize_x * 0.5 * (vote_nocount/vote_needed), pos_y, mySize_x * 0.5, mySize_y);
-       drawpic_skin(pos + eY * (5/8) * mySize_y, "voteprogress_prog", eX * mySize_x + eY * (3/8) * mySize_y, '1 1 1', a, DRAWFLAG_NORMAL);
+       if(vote_nocount && vote_needed)
+       {
+               drawsetcliparea(pos_x + mySize_x - mySize_x * 0.5 * (vote_nocount/vote_needed), pos_y, mySize_x * 0.5, mySize_y);
+               drawpic_skin(pos + eY * (5/8) * mySize_y, "voteprogress_prog", eX * mySize_x + eY * (3/8) * mySize_y, '1 1 1', a, DRAWFLAG_NORMAL);
+       }
 
        drawresetcliparea();
 
index 29029f6e457562aa1a6427d7ff131b5a8d229a98..4acf797b7dddfc7974315f23c4f5e506d2a7e500 100644 (file)
@@ -508,6 +508,7 @@ float DEATH_CHEAT = 10016;
 float DEATH_FIRE = 10017;
 float DEATH_TURRET = 10020;
 float DEATH_QUIET = 10021;
+float DEATH_HEADSHOT = 10022;
 
 float DEATH_SBMINIGUN = 10030;
 float DEATH_SBROCKET  = 10031;
@@ -645,3 +646,5 @@ string HUD_PANELNAME_ENGINEINFO             = "engineinfo";
 string HUD_PANELNAME_INFOMESSAGES      = "infomessages";
 
 float HUD_MENU_ENABLE          = 0;
+
+#define SERVERFLAG_ALLOW_FULLBRIGHT 1
index b888358c3748fe6919a39da1a3f038f90702bc84..66f292a0369588ae675b237fc0580d1d8cf34a04 100644 (file)
@@ -51,6 +51,25 @@ vector hslimage_color(vector v, vector margin)
         return hsl_to_rgb(v_x * 6 * eX + eY + v_y / 0.875 * eZ);
 }
 
+vector color_hslimage(vector v, vector margin)
+{
+       vector pos;
+       v = rgb_to_hsl(v);
+       if (v_y)
+       {
+               pos_x = v_x / 6;
+               pos_y = v_z * 0.875;
+       }
+       else // grey scale
+       {
+               pos_x = v_z;
+               pos_y = 0.875 + 0.07;
+       }
+       pos_x = margin_x + pos_x * (1 - 2 * margin_x);
+       pos_y = margin_y + pos_y * (1 - 2 * margin_y);
+       return pos;
+}
+
 float XonoticColorpicker_mouseDrag(entity me, vector coords)
 {
        float i;
index 3633553044c314c4fbc7c846ad6ea7e0e53079ec..f57c768a5fcb3d80ce4da5bc16d65845fcb5164a 100644 (file)
@@ -1,6 +1,6 @@
 #ifdef INTERFACE
 CLASS(XonoticColorpickerString) EXTENDS(Image)
-       METHOD(XonoticColorpickerString, configureXonoticColorpickerString, void(entity, string))
+       METHOD(XonoticColorpickerString, configureXonoticColorpickerString, void(entity, string, string))
        METHOD(XonoticColorpickerString, mousePress, float(entity, vector))
        METHOD(XonoticColorpickerString, mouseRelease, float(entity, vector))
        METHOD(XonoticColorpickerString, mouseDrag, float(entity, vector))
@@ -12,23 +12,26 @@ CLASS(XonoticColorpickerString) EXTENDS(Image)
        METHOD(XonoticColorpickerString, draw, void(entity))
        ATTRIB(XonoticColorpickerString, disabledAlpha, float, 0.3)
 ENDCLASS(XonoticColorpickerString)
-entity makeXonoticColorpickerString(string theCvar);
+entity makeXonoticColorpickerString(string theCvar, string theDefaultCvar);
 #endif
 
 #ifdef IMPLEMENTATION
-entity makeXonoticColorpickerString(string theCvar)
+entity makeXonoticColorpickerString(string theCvar, string theDefaultCvar)
 {
        entity me;
        me = spawnXonoticColorpickerString();
-       me.configureXonoticColorpickerString(me, theCvar);
+       me.configureXonoticColorpickerString(me, theCvar, theDefaultCvar);
        return me;
 }
 
-void XonoticColorpickerString_configureXonoticColorpickerString(entity me, string theCvar)
+void XonoticColorpickerString_configureXonoticColorpickerString(entity me, string theCvar, string theDefaultCvar)
 {
        me.cvarName = theCvar;
        me.configureImage(me, me.image);
-       me.prevcoords = '1 1 0';
+       if(cvar_string(theCvar) != "")
+               me.prevcoords = color_hslimage(stov(cvar_string(theCvar)), me.imagemargin);
+       else // use default
+               me.prevcoords = color_hslimage(stov(cvar_string(theDefaultCvar)), me.imagemargin);
 }
 
 float XonoticColorpickerString_mousePress(entity me, vector coords)
@@ -48,7 +51,6 @@ float XonoticColorpickerString_mouseDrag(entity me, vector coords)
        if(coords_x <= 1 - margin_x)
        if(coords_y <= 1 - margin_y)
        {
-               cvar_set(me.cvarName, sprintf("%v", hslimage_color(coords, margin)));
                me.prevcoords = coords;
        }
 
@@ -74,10 +76,11 @@ void XonoticColorpickerString_draw(entity me)
        sz = draw_PictureSize(strcat(me.src, "_selected"));
        sz = globalToBoxSize(sz, draw_scale);
 
-       if(me.disabled)
-               me.prevcoords = '1 1 0';
-       else
+       if(!me.disabled)
+       {
+               cvar_set(me.cvarName, sprintf("%v", hslimage_color(me.prevcoords, me.imagemargin)));
                draw_Picture(me.imgOrigin + me.prevcoords - 0.5 * sz, strcat(me.src, "_selected"), sz, '1 1 1', 1);
+       }
        draw_alpha = save;
 }
 #endif
index 1e0d4bf92d6a9d9b64d9d3816d5bc4c4a71b6da3..256dbe7df028ec0a93852b1dc0ae06123680a2df 100644 (file)
@@ -29,7 +29,7 @@ void XonoticHUDAmmoDialog_fill(entity me)
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:"));
-               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color"))));
+               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color"));
                        setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), "");
        me.TR(me);
                me.TDempty(me, 0.2);
index 74fabe0518ac16fd7720e7f358001733555952b2..c9a4eae6e80734de20449611918a871a5734aad6 100644 (file)
@@ -29,7 +29,7 @@ void XonoticHUDChatDialog_fill(entity me)
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:"));
-               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color"))));
+               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color"));
                        setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), "");
        me.TR(me);
                me.TDempty(me, 0.2);
index 8d359e9cf686e765750b03e5af9a437aaecc4443..03ef106c7decd260147dbae0a48d8c0f9ffc296a 100644 (file)
@@ -29,7 +29,7 @@ void XonoticHUDEngineInfoDialog_fill(entity me)
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:"));
-               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color"))));
+               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color"));
                        setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), "");
        me.TR(me);
                me.TDempty(me, 0.2);
index b276045b63183c6ba9412599affe4cbc970cf6ef..3e8a43aeb38520a386ca1ef25960587e6aae83b4 100644 (file)
@@ -29,7 +29,7 @@ void XonoticHUDHealthArmorDialog_fill(entity me)
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:"));
-               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color"))));
+               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color"));
                        setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), "");
        me.TR(me);
                me.TDempty(me, 0.2);
index 56d4bf463649496243cf14c28cbfbb06150efffc..d8534a20e9974d34030cb4dce2da064fcb987d6e 100644 (file)
@@ -29,7 +29,7 @@ void XonoticHUDInfoMessagesDialog_fill(entity me)
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:"));
-               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color"))));
+               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color"));
                        setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), "");
        me.TR(me);
                me.TDempty(me, 0.2);
index ebd5f240bedf0603edcaa2689c23200cf935cf03..d60a72473f4999bf5bc96e2d105a5c2a00834130 100644 (file)
@@ -29,7 +29,7 @@ void XonoticHUDModIconsDialog_fill(entity me)
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:"));
-               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color"))));
+               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color"));
                        setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), "");
        me.TR(me);
                me.TDempty(me, 0.2);
index c811cb62832530fd9d5ee71dab5bb0d06767b5bb..3eeaff284db99458439ea17e9cc052016e835919 100644 (file)
@@ -29,7 +29,7 @@ void XonoticHUDNotificationDialog_fill(entity me)
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:"));
-               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color"))));
+               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color"));
                        setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), "");
        me.TR(me);
                me.TDempty(me, 0.2);
index 14f4a19268707a3100a0154bd34bb6b1ee3ae01e..5d4e14c08b62fc64876d7f22ae303c836a36d659 100644 (file)
@@ -29,7 +29,7 @@ void XonoticHUDPowerupsDialog_fill(entity me)
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:"));
-               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color"))));
+               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color"));
                        setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), "");
        me.TR(me);
                me.TDempty(me, 0.2);
index 7d32914ddae7b437774f767c0882c7dc59e66179..30f6bfc1f2da723a813477fa3b70e4c106ab9432 100644 (file)
@@ -33,7 +33,7 @@ void XonoticHUDPressedKeysDialog_fill(entity me)
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:"));
-               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color"))));
+               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color"));
                        setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), "");
        me.TR(me);
                me.TDempty(me, 0.2);
index febbd544975720e6d295b365176c09e1d2c2fb68..35fdc55f3c8b5d9a8ae355dde2faa245fe11975d 100644 (file)
@@ -29,7 +29,7 @@ void XonoticHUDRaceTimerDialog_fill(entity me)
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:"));
-               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color"))));
+               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color"));
                        setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), "");
        me.TR(me);
                me.TDempty(me, 0.2);
index 90de04795a9ee59a4f46ae36cc805cfcdaa64843..d1202846e26c140f0140c5f3ac67b7898b1e0c8a 100644 (file)
@@ -33,7 +33,7 @@ void XonoticHUDRadarDialog_fill(entity me)
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:"));
-               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color"))));
+               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color"));
                        setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), "");
        me.TR(me);
                me.TDempty(me, 0.2);
index 8c8561ea79b07aafd9867dbd0017e7ce4b3e226e..fc51921e23777a3b2980123ca42ba99e2f446cd1 100644 (file)
@@ -29,7 +29,7 @@ void XonoticHUDScoreDialog_fill(entity me)
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:"));
-               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color"))));
+               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color"));
                        setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), "");
        me.TR(me);
                me.TDempty(me, 0.2);
index 748d2911ec71de5f631d062c4f6dc10f85ad1dca..96dc4aa6959f8fa8c18c4423cfc0c49afb913483 100644 (file)
@@ -29,7 +29,7 @@ void XonoticHUDTimerDialog_fill(entity me)
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:"));
-               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color"))));
+               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color"));
                        setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), "");
        me.TR(me);
                me.TDempty(me, 0.2);
index 6c935d9e7f105d3131b3e8e344d9c0b9e51ec970..b5f5b6e27b965713d2cb0099a3457fd28fccd5a8 100644 (file)
@@ -29,7 +29,7 @@ void XonoticHUDVoteDialog_fill(entity me)
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:"));
-               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color"))));
+               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color"));
                        setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), "");
        me.TR(me);
                me.TDempty(me, 0.2);
index 538723bce1c945462614af9926f080266df22007..ad3d080415e6547af2452536ff50b8f8c4149321 100644 (file)
@@ -29,11 +29,11 @@ void XonoticHUDWeaponsDialog_fill(entity me)
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:"));
-               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color"))));
+               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color"));
                        setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), "");
        me.TR(me);
                me.TDempty(me, 0.2);
-               me.TD(me, 1, 1.2, e = makeXonoticCheckBoxString("", "1 1 1", strzone(strcat("hud_panel_", panelname, "_bg_color")), "Use default"));
+               me.TD(me, 1, 1.2, e = makeXonoticCheckBoxString("", cvar_string("hud_panel_bg_color"), strzone(strcat("hud_panel_", panelname, "_bg_color")), "Use default"));
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Border size:"));
@@ -103,7 +103,7 @@ void XonoticHUDWeaponsDialog_fill(entity me)
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Ammo bar color:"));
-               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString("hud_panel_weapons_ammo_color"));
+               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString("hud_panel_weapons_ammo_color", "hud_panel_weapons_ammo_color"));
                        setDependent(e, "hud_panel_weapons_ammo", 1, 1);
                me.TR(me);
        me.TR(me);
index 3f8bcebd778877e07fedf9e9653930225876b69e..751b3cf95c73004f35b08ea92bb3ecc97e1150ec 100644 (file)
@@ -28,7 +28,7 @@ void XonoticHUDExitDialog_fill(entity me)
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:"));
-               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString("hud_panel_bg_color"));
+               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString("hud_panel_bg_color", "hud_panel_bg_color"));
        me.TR(me);
        me.TR(me);
                me.TDempty(me, 0.2);
@@ -75,7 +75,7 @@ void XonoticHUDExitDialog_fill(entity me)
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:"));
-               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString("hud_dock_color"));
+               me.TD(me, 2, 2.4, e = makeXonoticColorpickerString("hud_dock_color", "hud_dock_color"));
        me.TR(me);
        me.TR(me);      
                me.TDempty(me, 0.2);
index 66a838a31cfa0e2ebdfb8aee4ccad1a6e197bc68..1438d317c76947d9fd04cec4477a49f1d5b15e15 100644 (file)
@@ -1091,10 +1091,11 @@ float ClientInit_SendEntity(entity to, float sf)
                WriteString(MSG_ENTITY, "");
        WriteByte(MSG_ENTITY, self.count * 255.0); // g_balance_armor_blockpercent
        WriteByte(MSG_ENTITY, self.cnt * 255.0); // g_balance_weaponswitchdelay
-       WriteCoord(MSG_ENTITY, self.bouncefactor); // g_balance_grenadelauncher_secondary_bouncefactor
-       WriteCoord(MSG_ENTITY, self.bouncestop); // g_balance_grenadelauncher_secondary_bouncestop
+       WriteCoord(MSG_ENTITY, self.bouncefactor); // g_balance_grenadelauncher_bouncefactor
+       WriteCoord(MSG_ENTITY, self.bouncestop); // g_balance_grenadelauncher_bouncestop
        WriteByte(MSG_ENTITY, cvar("g_balance_nex_secondary")); // client has to know if it should zoom or not
        WriteByte(MSG_ENTITY, cvar("g_balance_campingrifle_secondary")); // client has to know if it should zoom or not
+       WriteByte(MSG_ENTITY, serverflags); // client has to know if it should zoom or not
        return TRUE;
 }
 
@@ -1111,14 +1112,14 @@ void ClientInit_CheckUpdate()
                self.cnt = cvar("g_balance_weaponswitchdelay");
                self.SendFlags |= 1;
        }
-       if(self.bouncefactor != cvar("g_balance_grenadelauncher_secondary_bouncefactor"))
+       if(self.bouncefactor != cvar("g_balance_grenadelauncher_bouncefactor"))
        {
-               self.bouncefactor = cvar("g_balance_grenadelauncher_secondary_bouncefactor");
+               self.bouncefactor = cvar("g_balance_grenadelauncher_bouncefactor");
                self.SendFlags |= 1;
        }
-       if(self.bouncestop != cvar("g_balance_grenadelauncher_secondary_bouncestop"))
+       if(self.bouncestop != cvar("g_balance_grenadelauncher_bouncestop"))
        {
-               self.bouncestop = cvar("g_balance_grenadelauncher_secondary_bouncestop");
+               self.bouncestop = cvar("g_balance_grenadelauncher_bouncestop");
                self.SendFlags |= 1;
        }
 }
@@ -2808,6 +2809,11 @@ void PlayerPreThink (void)
                }
 
                player_regen();
+
+               // rot nex charge to the charge limit
+               if(cvar("g_balance_nex_charge_rot_rate") && self.nex_charge > cvar("g_balance_nex_charge_limit"))
+                       self.nex_charge = bound(cvar("g_balance_nex_charge_limit"), self.nex_charge - cvar("g_balance_nex_charge_rot_rate") * frametime / W_TICSPERFRAME, 1);
+
                if(frametime)
                        player_anim();
 
index 45394eb7925db2bf34fd5e10818131e5646af2dc..74797441c38a10965614bc19763352330d3bbd9b 100644 (file)
@@ -660,3 +660,5 @@ string deathmessage;
 .float nex_charge;
 
 float allowed_to_spawn; // boolean variable used by the clan arena code to determine if a player can spawn (after the round has ended)
+
+float serverflags;
index 6f8c9490ef907175c088a5c51315dcaef1ce8f38..809df9ecbd892b5d6037f4cb5b07670818a3ba27 100644 (file)
@@ -88,11 +88,11 @@ float IsFlying(entity a)
 
 vector GetHeadshotMins(entity targ)
 {
-       return '0.6 0 0' * targ.mins_x + '0 0.6 0' * targ.mins_y + '0 0 1' * (1.3 * targ.view_ofs_z - 0.3 * targ.maxs_z);
+       return '-0.5 0 0' * PL_HEAD_x + '0 -0.5 0' * PL_HEAD_y + '0 0 1' * (targ.maxs_z - PL_HEAD_z);
 }
 vector GetHeadshotMaxs(entity targ)
 {
-       return '0.6 0 0' * targ.maxs_x + '0 0.6 0' * targ.maxs_y + '0 0 1' * targ.maxs_z;
+       return '0.5 0 0' * PL_HEAD_x + '0 0.5 0' * PL_HEAD_y + '0 0 1' * targ.maxs_z;
 }
 
 void UpdateFrags(entity player, float f)
@@ -993,6 +993,39 @@ float RadiusDamage (entity inflictor, entity attacker, float coredamage, float e
                                                finaldmg = finaldmg * a;
                                                a = bound(0, tfloorforce + (1-tfloorforce) * hitratio, 1);
                                                force = force * a;
+
+                                               // laser force adjustments :P
+                                               if(DEATH_WEAPONOF(deathtype) == WEP_LASER)
+                                               {
+                                                       vector vel;
+
+                                                       float force_zscale;
+                                                       float force_velocitybiasramp;
+                                                       float force_velocitybias;
+
+                                                       force_velocitybiasramp = cvar("sv_maxspeed");
+                                                       if(deathtype & HITTYPE_SECONDARY)
+                                                       {
+                                                               force_zscale = cvar("g_balance_laser_secondary_force_zscale");
+                                                               force_velocitybias = cvar("g_balance_laser_secondary_force_velocitybias");
+                                                       }
+                                                       else
+                                                       {
+                                                               force_zscale = cvar("g_balance_laser_primary_force_zscale");
+                                                               force_velocitybias = cvar("g_balance_laser_primary_force_velocitybias");
+                                                       }
+
+                                                       vel = targ.velocity;
+                                                       vel_z = 0;
+                                                       vel = normalize(vel) * bound(0, vlen(vel) / force_velocitybiasramp, 1) * force_velocitybias;
+                                                       force =
+                                                               vlen(force)
+                                                               *
+                                                               normalize(normalize(force) + vel);
+
+                                                       force_z *= force_zscale;
+                                               }
+
                                                //if (targ == attacker)
                                                //{
                                                //      print("hits ", ftos(hits), " / ", ftos(total));
index b351d77615732eb249be7c7c775c3bdbb017ceba..c5abb52f592ed30d817fa21574035e64b9f7a207 100644 (file)
@@ -403,6 +403,7 @@ void cvar_changes_init()
                BADCVAR("g_maplist_votable_abstain");
                BADCVAR("g_maplist_votable_nodetail");
                BADCVAR("g_maplist_votable_suggestions");
+               BADCVAR("g_minstagib");
                BADCVAR("g_nexball_goallimit");
                BADCVAR("g_runematch_point_limit");
                BADCVAR("g_start_delay");
@@ -449,6 +450,12 @@ void cvar_changes_init()
                        }
                }
                ++cvar_purechanges_count;
+               // WARNING: this variable is used for the server list
+               // NEVER dare to skip this code!
+               // Hacks to intentionally appearing as "pure server" even though you DO have
+               // modified settings may be punished by removal from the server list.
+               // You can do to the variables cvar_changes and cvar_purechanges all you want,
+               // though.
        }
        buf_del(h);
        if(cvar_changes == "")
index 5485cc10db74de18e27fe6442dc63fb7fdfecae2..738c32eba804ad81a6efec24192feb5509daab57 100644 (file)
@@ -181,6 +181,7 @@ void GameLogClose()
 vector PL_VIEW_OFS;
 vector PL_MIN;
 vector PL_MAX;
+vector PL_HEAD;
 vector PL_CROUCH_VIEW_OFS;
 vector PL_CROUCH_MIN;
 vector PL_CROUCH_MAX;
@@ -191,6 +192,7 @@ void relocate_spawnpoint()
     PL_VIEW_OFS                             = stov(cvar_string("sv_player_viewoffset"));
     PL_MIN                                  = stov(cvar_string("sv_player_mins"));
     PL_MAX                                  = stov(cvar_string("sv_player_maxs"));
+    PL_HEAD                                 = stov(cvar_string("sv_player_headsize"));
     PL_CROUCH_VIEW_OFS                      = stov(cvar_string("sv_player_crouch_viewoffset"));
     PL_CROUCH_MIN                           = stov(cvar_string("sv_player_crouch_mins"));
     PL_CROUCH_MAX                           = stov(cvar_string("sv_player_crouch_maxs"));
@@ -1182,9 +1184,13 @@ void readlevelcvars(void)
                MUTATOR_ADD(mutator_nix);
        if(cvar("g_dodging"))
                MUTATOR_ADD(mutator_dodging);
-       if(cvar("g_rocket_flying") || (cvar("g_balance_rocketlauncher_detonatedelay") == 0 && stof(cvar_defstring("g_balance_rocketlauncher_detonatedelay")) != 0))
+       if(cvar("g_rocket_flying"))
                MUTATOR_ADD(mutator_rocketflying);
 
+       serverflags = 0;
+       if(cvar("sv_allow_fullbright"))
+               serverflags |= SERVERFLAG_ALLOW_FULLBRIGHT;
+
     g_bugrigs = cvar("g_bugrigs");
     g_bugrigs_planar_movement = cvar("g_bugrigs_planar_movement");
     g_bugrigs_planar_movement_car_jumping = cvar("g_bugrigs_planar_movement_car_jumping");
index d1957b01f76aaa5fd074d8544fa252b198b37a2b..03a5bde619683445ac5929017ca51ade53936b71 100644 (file)
@@ -1,6 +1,6 @@
 MUTATOR_HOOKFUNCTION(rocketflying_EditProjectile)
 {
-       if(other.classname == "rocket")
+       if(other.classname == "rocket" || other.classname == "mine")
        {
                // kill detonate delay of rockets
                other.spawnshieldtime = time;
index 44e3967b546d9840970229196257bd256d0af6d4..566563487b768b7e82fe761df97b9b3f3cbf3b68 100644 (file)
@@ -3,39 +3,163 @@ REGISTER_WEAPON(CRYLINK, w_crylink, IT_CELLS, 6, WEP_FLAG_NORMAL | WEP_TYPE_SPLA
 #else
 #ifdef SVQC
 .float gravity;
+.float crylink_waitrelease;
+.entity crylink_lastgroup;
 
 .entity queuenext;
 .entity queueprev;
 
+void W_Crylink_Dequeue_Raw(entity own, entity prev, entity me, entity next)
+{
+       if(me == own.crylink_lastgroup)
+               own.crylink_lastgroup = ((me == next) ? world : next);
+       prev.queuenext = next;
+       next.queueprev = prev;
+}
+
+void W_Crylink_Dequeue(entity e)
+{
+       W_Crylink_Dequeue_Raw(e.realowner, e.queueprev, e, e.queuenext);
+}
+
 // force projectile to explode
 void W_Crylink_LinkExplode (entity e, entity e2)
 {
        float a;
        a = bound(0, 1 - (time - e.fade_time) * e.fade_rate, 1);
 
+       if(e == e.realowner.crylink_lastgroup)
+               e.realowner.crylink_lastgroup = world;
+
        RadiusDamage (e, e.realowner, cvar("g_balance_crylink_primary_damage") * a, cvar("g_balance_crylink_primary_edgedamage") * a, cvar("g_balance_crylink_primary_radius"), world, cvar("g_balance_crylink_primary_force") * a, e.projectiledeathtype, other);
 
        if(e.queuenext != e2)
                W_Crylink_LinkExplode(e.queuenext, e2);
+
        remove (e);
 }
 
+// adjust towards center
+// returns the origin where they will meet... and the time till the meeting is
+// stored in w_crylink_linkjoin_time.
+// could possibly network this origin and time, and display a special particle
+// effect when projectiles meet there :P
+float w_crylink_linkjoin_time;
+vector W_Crylink_LinkJoin(entity e, float joinspeed)
+{
+       vector avg_origin, avg_velocity;
+       vector targ_origin;
+       float avg_dist, n;
+       entity p;
+
+       w_crylink_linkjoin_time = 0;
+
+       avg_origin = e.origin;
+       avg_velocity = e.velocity;
+       n = 1;
+       for(p = e; (p = p.queuenext) != e; )
+       {
+               avg_origin += p.origin;
+               avg_velocity += p.velocity;
+               ++n;
+       }
+       avg_origin *= (1.0 / n);
+       avg_velocity *= (1.0 / n);
+
+       if(n < 2)
+               return avg_origin; // nothing to do
+
+       // yes, mathematically we can do this in ONE step, but beware of 32bit floats...
+       avg_dist = pow(vlen(e.origin - avg_origin), 2);
+       for(p = e; (p = p.queuenext) != e; )
+               avg_dist += pow(vlen(e.origin - avg_origin), 2);
+       avg_dist *= (1.0 / n);
+       avg_dist = sqrt(avg_dist);
+
+       if(avg_dist == 0)
+               return avg_origin; // no change needed
+
+       if(joinspeed == 0)
+       {
+               e.velocity = avg_velocity;
+               UpdateCSQCProjectile(e);
+               for(p = e; (p = p.queuenext) != e; )
+               {
+                       p.velocity = avg_velocity;
+                       UpdateCSQCProjectile(p);
+               }
+       }
+       else
+       {
+               w_crylink_linkjoin_time = avg_dist / joinspeed;
+               targ_origin = avg_origin + w_crylink_linkjoin_time * avg_velocity;
+
+               e.velocity = (targ_origin - e.origin) * (joinspeed / avg_dist);
+               UpdateCSQCProjectile(e);
+               for(p = e; (p = p.queuenext) != e; )
+               {
+                       p.velocity = (targ_origin - p.origin) * (joinspeed / avg_dist);
+                       UpdateCSQCProjectile(p);
+               }
+
+               // analysis:
+               //   joinspeed -> +infinity:
+               //      w_crylink_linkjoin_time -> +0
+               //      targ_origin -> avg_origin
+               //      p->velocity -> HUEG towards center
+               //   joinspeed -> 0:
+               //      w_crylink_linkjoin_time -> +/- infinity
+               //      targ_origin -> avg_velocity * +/- infinity
+               //      p->velocity -> avg_velocity
+               //   joinspeed -> -infinity:
+               //      w_crylink_linkjoin_time -> -0
+               //      targ_origin -> avg_origin
+               //      p->velocity -> HUEG away from center
+       }
+
+       return targ_origin;
+}
+
+void W_Crylink_LinkJoinEffect_Think()
+{
+       // is there at least 2 projectiles very close?
+       entity e, p;
+       float n;
+       e = self.owner.crylink_lastgroup;
+       n = 0;
+       if(e)
+       {
+               if(vlen(e.origin - self.origin) < vlen(e.velocity) * frametime)
+                       ++n;
+               for(p = e; (p = p.queuenext) != e; )
+               {
+                       if(vlen(p.origin - self.origin) < vlen(p.velocity) * frametime)
+                               ++n;
+               }
+               if(n >= 2)
+               {
+                       // they seem to touch...
+                       // TODO make a specific particle effect for this
+                       pointparticles(particleeffectnum("crylink_linkjoin"), self.origin, '0 0 0', 1);
+               }
+       }
+       remove(self);
+}
+
 // NO bounce protection, as bounces are limited!
 void W_Crylink_Touch (void)
 {
        float finalhit;
        float f;
        //PROJECTILE_TOUCH;
-       local entity savenext, saveprev;
+       local entity savenext, saveprev, saveown;
+       saveown = self.realowner;
        savenext = self.queuenext;
        saveprev = self.queueprev;
        if(WarpZone_Projectile_Touch())
        {
                if(wasfreed(self))
-               {
-                       savenext.queueprev = saveprev;
-                       saveprev.queuenext = savenext;
-               }
+                       W_Crylink_Dequeue_Raw(saveown, saveprev, self, savenext);
                return;
        }
 
@@ -49,12 +173,19 @@ void W_Crylink_Touch (void)
                f = cvar("g_balance_crylink_primary_bouncedamagefactor");
        if(a)
                f *= a;
-       if (RadiusDamage (self, self.realowner, cvar("g_balance_crylink_primary_damage") * f, cvar("g_balance_crylink_primary_edgedamage") * f, cvar("g_balance_crylink_primary_radius"), world, cvar("g_balance_crylink_primary_force") * f, self.projectiledeathtype, other) || finalhit)
+       if (RadiusDamage (self, self.realowner, cvar("g_balance_crylink_primary_damage") * f, cvar("g_balance_crylink_primary_edgedamage") * f, cvar("g_balance_crylink_primary_radius"), world, cvar("g_balance_crylink_primary_force") * f, self.projectiledeathtype, other))
        {
                W_Crylink_LinkExplode(self.queuenext, self);
                remove (self);
                return;
        }
+       else if(finalhit)
+       {
+               // just unlink
+               W_Crylink_Dequeue(self);
+               remove(self);
+               return;
+       }
        self.cnt = self.cnt - 1;
        self.angles = vectoangles(self.velocity);
        self.owner = world;
@@ -69,16 +200,14 @@ void W_Crylink_Touch2 (void)
        float finalhit;
        float f;
        //PROJECTILE_TOUCH;
-       local entity savenext, saveprev;
+       local entity savenext, saveprev, saveown;
        savenext = self.queuenext;
        saveprev = self.queueprev;
+       saveown = self.realowner;
        if(WarpZone_Projectile_Touch())
        {
                if(wasfreed(self))
-               {
-                       savenext.queueprev = saveprev;
-                       saveprev.queuenext = savenext;
-               }
+                       W_Crylink_Dequeue_Raw(saveown, saveprev, self, savenext);
                return;
        }
 
@@ -92,12 +221,19 @@ void W_Crylink_Touch2 (void)
                f = cvar("g_balance_crylink_secondary_bouncedamagefactor");
        if(a)
                f *= a;
-       if (RadiusDamage (self, self.realowner, cvar("g_balance_crylink_secondary_damage") * f, cvar("g_balance_crylink_secondary_edgedamage") * f, cvar("g_balance_crylink_secondary_radius"), world, cvar("g_balance_crylink_secondary_force") * f, self.projectiledeathtype, other) || finalhit)
+       if (RadiusDamage (self, self.realowner, cvar("g_balance_crylink_secondary_damage") * f, cvar("g_balance_crylink_secondary_edgedamage") * f, cvar("g_balance_crylink_secondary_radius"), world, cvar("g_balance_crylink_secondary_force") * f, self.projectiledeathtype, other))
        {
                W_Crylink_LinkExplode(self.queuenext, self);
                remove (self);
                return;
        }
+       else if(finalhit)
+       {
+               // just unlink
+               W_Crylink_Dequeue(self);
+               remove(self);
+               return;
+       }
        self.cnt = self.cnt - 1;
        self.angles = vectoangles(self.velocity);
        self.owner = world;
@@ -109,8 +245,7 @@ void W_Crylink_Touch2 (void)
 
 void W_Crylink_Fadethink (void)
 {
-       self.queuenext.queueprev = self.queueprev;
-       self.queueprev.queuenext = self.queuenext;
+       W_Crylink_Dequeue(self);
        remove(self);
 }
 
@@ -131,6 +266,7 @@ void W_Crylink_Attack (void)
 
        shots = cvar("g_balance_crylink_primary_shots");
        pointparticles(particleeffectnum("crylink_muzzleflash"), w_shotorg, w_shotdir * 1000, shots);
+       proj = world;
        while (counter < shots)
        {
                proj = spawn ();
@@ -183,12 +319,6 @@ void W_Crylink_Attack (void)
                        self.fade_rate = 1 / cvar("g_balance_crylink_primary_middle_fadetime");
                        proj.nextthink = time + cvar("g_balance_crylink_primary_middle_lifetime") + cvar("g_balance_crylink_primary_middle_fadetime");
                }
-               else if(counter <= 3)
-               {
-                       proj.fade_time = time + cvar("g_balance_crylink_primary_star_lifetime");
-                       self.fade_rate = 1 / cvar("g_balance_crylink_primary_star_fadetime");
-                       proj.nextthink = time + cvar("g_balance_crylink_primary_star_lifetime") + cvar("g_balance_crylink_primary_star_fadetime");
-               }
                else
                {
                        proj.fade_time = time + cvar("g_balance_crylink_primary_other_lifetime");
@@ -210,6 +340,7 @@ void W_Crylink_Attack (void)
 
                counter = counter + 1;
        }
+       self.crylink_lastgroup = proj;
 }
 
 void W_Crylink_Attack2 (void)
@@ -224,6 +355,7 @@ void W_Crylink_Attack2 (void)
 
        shots = cvar("g_balance_crylink_secondary_shots");
        pointparticles(particleeffectnum("crylink_muzzleflash"), w_shotorg, w_shotdir * 1000, shots);
+       proj = world;
        while (counter < shots)
        {
                proj = spawn ();
@@ -285,6 +417,7 @@ void W_Crylink_Attack2 (void)
 
                counter = counter + 1;
        }
+       self.crylink_lastgroup = proj;
 }
 
 void spawnfunc_weapon_crylink (void)
@@ -304,16 +437,60 @@ float w_crylink(float req)
        else if (req == WR_THINK)
        {
                if (self.BUTTON_ATCK)
-               if (weapon_prepareattack(0, cvar("g_balance_crylink_primary_refire")))
                {
-                       W_Crylink_Attack();
-                       weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_crylink_primary_animtime"), w_ready);
+                       if (!self.crylink_waitrelease)
+                       if (weapon_prepareattack(0, cvar("g_balance_crylink_primary_refire")))
+                       {
+                               W_Crylink_Attack();
+                               weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_crylink_primary_animtime"), w_ready);
+                               if(cvar("g_balance_crylink_primary_joinspeed") != 0)
+                                       self.crylink_waitrelease = 1;
+                       }
                }
-               if (self.BUTTON_ATCK2 && cvar("g_balance_crylink_secondary"))
-               if (weapon_prepareattack(1, cvar("g_balance_crylink_secondary_refire")))
+               else if(self.BUTTON_ATCK2 && cvar("g_balance_crylink_secondary"))
                {
-                       W_Crylink_Attack2();
-                       weapon_thinkf(WFRAME_FIRE2, cvar("g_balance_crylink_secondary_animtime"), w_ready);
+                       if (!self.crylink_waitrelease)
+                       if (weapon_prepareattack(1, cvar("g_balance_crylink_secondary_refire")))
+                       {
+                               W_Crylink_Attack2();
+                               weapon_thinkf(WFRAME_FIRE2, cvar("g_balance_crylink_secondary_animtime"), w_ready);
+                               if(cvar("g_balance_crylink_secondary_joinspeed") != 0)
+                                       self.crylink_waitrelease = 2;
+                       }
+               }
+               else
+               {
+                       if (self.crylink_waitrelease)
+                       {
+                               // fired and released now!
+                               if(self.crylink_lastgroup)
+                               {
+                                       vector pos;
+                                       if(self.crylink_waitrelease == 1)
+                                       {
+                                               pos = W_Crylink_LinkJoin(self.crylink_lastgroup, cvar("g_balance_crylink_primary_joinspeed"));
+                                       }
+                                       else
+                                       {
+                                               pos = W_Crylink_LinkJoin(self.crylink_lastgroup, cvar("g_balance_crylink_secondary_joinspeed"));
+                                       }
+
+                                       entity linkjoineffect;
+                                       linkjoineffect = spawn();
+                                       linkjoineffect.classname = "linkjoineffect";
+                                       linkjoineffect.think = W_Crylink_LinkJoinEffect_Think;
+                                       linkjoineffect.nextthink = time + w_crylink_linkjoin_time;
+                                       linkjoineffect.owner = self;
+                                       setorigin(linkjoineffect, pos);
+                               }
+                               self.crylink_waitrelease = 0;
+                               if(!w_crylink(WR_CHECKAMMO1) && !w_crylink(WR_CHECKAMMO2))
+                               {
+                                       // ran out of ammo!
+                                       self.cnt = WEP_CRYLINK;
+                                       self.switchweapon = w_getbestweapon(self);
+                               }
+                       }
                }
        }
        else if (req == WR_PRECACHE)
@@ -323,13 +500,24 @@ float w_crylink(float req)
                precache_model ("models/weapons/h_crylink.iqm");
                precache_sound ("weapons/crylink_fire.wav");
                precache_sound ("weapons/crylink_fire2.wav");
+               precache_sound ("weapons/crylink_linkjoin.wav");
        }
        else if (req == WR_SETUP)
                weapon_setup(WEP_CRYLINK);
        else if (req == WR_CHECKAMMO1)
+       {
+               // don't "run out of ammo" and switch weapons while waiting for release
+               if(self.crylink_lastgroup && self.crylink_waitrelease)
+                       return TRUE;
                return self.ammo_cells >= cvar("g_balance_crylink_primary_ammo");
+       }
        else if (req == WR_CHECKAMMO2)
+       {
+               // don't "run out of ammo" and switch weapons while waiting for release
+               if(self.crylink_lastgroup && self.crylink_waitrelease)
+                       return TRUE;
                return self.ammo_cells >= cvar("g_balance_crylink_secondary_ammo");
+       }
        return TRUE;
 };
 #endif
index e92b2b26062bdae5bddfbe1b7ddb1b18785608b8..75d3d7e7bb8925c55d36ce8f114e26e25cda6dba 100644 (file)
@@ -174,8 +174,8 @@ void W_Grenade_Attack (void)
        gren.bot_dodge = TRUE;
        gren.bot_dodgerating = cvar("g_balance_grenadelauncher_primary_damage");
        gren.movetype = MOVETYPE_BOUNCE;
-       gren.bouncefactor = cvar("g_balance_grenadelauncher_primary_bouncefactor");
-       gren.bouncestop = cvar("g_balance_grenadelauncher_primary_bouncestop");
+       gren.bouncefactor = cvar("g_balance_grenadelauncher_bouncefactor");
+       gren.bouncestop = cvar("g_balance_grenadelauncher_bouncestop");
        PROJECTILE_MAKETRIGGER(gren);
        gren.projectiledeathtype = WEP_GRENADE_LAUNCHER;
        setorigin(gren, w_shotorg);
@@ -221,8 +221,8 @@ void W_Grenade_Attack2 (void)
        gren.bot_dodge = TRUE;
        gren.bot_dodgerating = cvar("g_balance_grenadelauncher_secondary_damage");
        gren.movetype = MOVETYPE_BOUNCE;
-       gren.bouncefactor = cvar("g_balance_grenadelauncher_secondary_bouncefactor");
-       gren.bouncestop = cvar("g_balance_grenadelauncher_secondary_bouncestop");
+       gren.bouncefactor = cvar("g_balance_grenadelauncher_bouncefactor");
+       gren.bouncestop = cvar("g_balance_grenadelauncher_bouncestop");
        PROJECTILE_MAKETRIGGER(gren);
        gren.projectiledeathtype = WEP_GRENADE_LAUNCHER | HITTYPE_SECONDARY;
        setorigin(gren, w_shotorg);
index dc4f48152e4ebb6d6dc07df6a0af8d49695cb77c..aeefbcd0b7dac1a6162726367a65fe2a52b4bf48 100644 (file)
@@ -99,7 +99,7 @@ void W_Mine_RemoteExplode ()
        if(self.owner.deadflag == DEAD_NO)
                if((self.spawnshieldtime >= 0)
                        ? (time >= self.spawnshieldtime) // timer
-                       : (vlen(NearestPointOnBox(self.owner, self.origin) - self.origin) > cvar("g_balance_minelayer_radius")) // safety device
+                       : (vlen(NearestPointOnBox(self.owner, self.origin) - self.origin) > cvar("g_balance_minelayer_remote_radius")) // safety device
                )
                {
                        W_Mine_DoRemoteExplode();
@@ -171,9 +171,6 @@ void W_Mine_Think (void)
        if (self.owner.deadflag == DEAD_NO)
        if (self.minelayer_detonate)
                W_Mine_RemoteExplode();
-
-       if(self.csqcprojectile_clientanimate == 0)
-               UpdateCSQCProjectile(self);
 }
 
 void W_Mine_Touch (void)
@@ -252,7 +249,7 @@ void W_Mine_Attack (void)
        mine.cnt = time + cvar("g_balance_minelayer_lifetime");
        mine.flags = FL_PROJECTILE;
 
-       CSQCProjectile(mine, FALSE, PROJECTILE_MINE, TRUE);
+       CSQCProjectile(mine, TRUE, PROJECTILE_MINE, TRUE);
 
        // muzzle flash for 1st person view
        flash = spawn ();
index 352aa2b25c6edfee928e7b3541eb51f9b9a58ad5..d337bbd33fe80a4cb699bbe3de35a6af623fd9e1 100644 (file)
@@ -28,7 +28,6 @@ void W_MinstaNex_Attack (void)
                if(headshot)
                {
                        AnnounceTo(self, "headshot");
-                       print("h\n");
                }
                if(damage_goodhits && self.minstanex_lasthit)
                {
index 29b8be7ef0e6efd823fb934de4afd5eac1f959fe..493fd005bea62bfd546c6b66949c7b0bd5a3ed94 100644 (file)
@@ -47,6 +47,7 @@ void W_Nex_Attack (float issecondary)
        {
                charge = cvar("g_balance_nex_charge_mindmg") / mydmg + (1 - cvar("g_balance_nex_charge_mindmg") / mydmg) * self.nex_charge;
                self.nex_charge *= cvar("g_balance_nex_charge_shot_multiplier"); // do this AFTER setting mydmg/myforce
+                                                                                // O RLY? -- divVerent
        }
        else
                charge = 1;
@@ -86,6 +87,7 @@ float w_nex(float req)
        {
                if(cvar("g_balance_nex_charge") && self.nex_charge < cvar("g_balance_nex_charge_limit"))
                        self.nex_charge = min(1, self.nex_charge + cvar("g_balance_nex_charge_rate") * frametime / W_TICSPERFRAME);
+
                if (self.BUTTON_ATCK)
                {
                        if (weapon_prepareattack(0, cvar("g_balance_nex_primary_refire")))
index c109fc796b68afeb88d1b62d683083bd33062c29..a57da6a67d049cff12aa3b9121d76dbb1c335f10 100644 (file)
@@ -125,7 +125,7 @@ void W_Rocket_RemoteExplode()
        {
                if((self.spawnshieldtime >= 0)
                        ? (time >= self.spawnshieldtime) // timer
-                       : (vlen(NearestPointOnBox(self.owner, self.origin) - self.origin) > cvar("g_balance_rocketlauncher_radius")) // safety device
+                       : (vlen(NearestPointOnBox(self.owner, self.origin) - self.origin) > cvar("g_balance_rocketlauncher_remote_radius")) // safety device
                )
                {
                        W_Rocket_DoRemoteExplode();
diff --git a/scripts/nexball.shader b/scripts/nexball.shader
new file mode 100644 (file)
index 0000000..6bf4793
--- /dev/null
@@ -0,0 +1,8 @@
+nexball/ball
+{
+       dpreflectcube cubemaps/default/sky
+       {
+               map textures/nexball/ball.tga
+               rgbgen lightingDiffuse
+       }
+}
diff --git a/sound/weapons/crylink_linkjoin.ogg b/sound/weapons/crylink_linkjoin.ogg
new file mode 100644 (file)
index 0000000..26c7af5
Binary files /dev/null and b/sound/weapons/crylink_linkjoin.ogg differ
diff --git a/textures/nexball/ball.tga b/textures/nexball/ball.tga
new file mode 100644 (file)
index 0000000..6f96add
Binary files /dev/null and b/textures/nexball/ball.tga differ
diff --git a/textures/nexball/ball_gloss.tga b/textures/nexball/ball_gloss.tga
new file mode 100644 (file)
index 0000000..c4afcfc
Binary files /dev/null and b/textures/nexball/ball_gloss.tga differ
diff --git a/textures/nexball/ball_norm.tga b/textures/nexball/ball_norm.tga
new file mode 100644 (file)
index 0000000..e626855
Binary files /dev/null and b/textures/nexball/ball_norm.tga differ
diff --git a/textures/nexball/ball_reflect.tga b/textures/nexball/ball_reflect.tga
new file mode 100644 (file)
index 0000000..9c39e18
Binary files /dev/null and b/textures/nexball/ball_reflect.tga differ
index b82840ae0873fcf9fc38d3a7c71330199338df2e..0bd63e9fb2ad9d57e61582ddf0d691cff8a5f831 100755 (executable)
@@ -6,12 +6,12 @@ for b in balance*.cfg; do
        if [ "$countw" != "$countb" ]; then
                echo "Mismatch between balanceXonotic.cfg and $b. Aborting."
                echo "Differences are:"
-               A=`mktemp`
-               B=`mktemp`
-               awk '/^seta? g_/ { print $2; }' balanceXonotic.cfg       | sort -u | tr -d '\r' > "$A"
-               awk '/^seta? g_/ { print $2; }' "$b"                     | sort -u | tr -d '\r' > "$B"
                echo "< missing in $b"
                echo "> must get removed from $b"
+               A=`mktemp || echo a.tmp`
+               B=`mktemp || echo b.tmp`
+               awk '/^seta? g_/ { print $2; }' balanceXonotic.cfg       | sort -u | tr -d '\r' > "$A"
+               awk '/^seta? g_/ { print $2; }' "$b"                     | sort -u | tr -d '\r' > "$B"
                diff "$A" "$B" | grep '^[<>]' | sort
                rm -f "$A" "$B"
                exit 1