Merge branch 'master' into Lyberta/StandaloneOverkillWeapons
authorLyberta <lyberta@lyberta.net>
Mon, 13 Mar 2017 11:49:01 +0000 (14:49 +0300)
committerLyberta <lyberta@lyberta.net>
Mon, 13 Mar 2017 11:49:01 +0000 (14:49 +0300)
42 files changed:
bal-wep-overkill.cfg
bal-wep-xdf.cfg
balance-xdf.cfg
defaultOverkill.cfg [new file with mode: 0644]
defaultXDF.cfg
defaultXPM.cfg
defaultXonotic.cfg
gfx/menu/luma/icon_mod_quake.tga [new file with mode: 0644]
gfx/menu/luminos/icon_mod_quake.tga [new file with mode: 0644]
gfx/menu/wickedx/icon_mod_quake.tga [new file with mode: 0644]
gfx/menu/xaw/icon_mod_quake.tga [new file with mode: 0644]
mutators.cfg
physicsOverkill.cfg [new file with mode: 0644]
qcsrc/client/view.qc
qcsrc/common/_mod.qh
qcsrc/common/monsters/_mod.inc
qcsrc/common/monsters/spawner.qc [deleted file]
qcsrc/common/monsters/sv_spawner.qc [new file with mode: 0644]
qcsrc/common/mutators/mutator/buffs/all.inc
qcsrc/common/mutators/mutator/buffs/sv_buffs.qc
qcsrc/common/mutators/mutator/dodging/sv_dodging.qc
qcsrc/common/mutators/mutator/itemstime/itemstime.qc
qcsrc/common/mutators/mutator/walljump/_mod.inc
qcsrc/common/mutators/mutator/walljump/_mod.qh
qcsrc/common/mutators/mutator/walljump/walljump.qc
qcsrc/common/sounds/all.inc
qcsrc/common/stats.qh
qcsrc/common/vehicles/vehicle/raptor.qc
qcsrc/lib/matrix/_mod.inc
qcsrc/lib/matrix/_mod.qh
qcsrc/menu/xonotic/dialog_settings_effects.qc
qcsrc/menu/xonotic/slider_particles.qc
qcsrc/server/bot/default/havocbot/havocbot.qc
qcsrc/server/bot/default/navigation.qc
qcsrc/server/bot/default/waypoints.qc
qcsrc/server/compat/quake3.qc
qcsrc/server/compat/wop.qc
qcsrc/server/defs.qh
qcsrc/server/g_damage.qc
qcsrc/server/g_world.qc
qcsrc/server/race.qc
sound/misc/kill.ogg [new file with mode: 0644]

index 430cbf56f700261488063620763b749c13f2d6dc..a7b30e4d24b3c5f077834b4a70341445704c5cce 100644 (file)
@@ -1,8 +1,8 @@
 // {{{ #1: Blaster
 set g_balance_blaster_primary_animtime 0.2
-set g_balance_blaster_primary_damage 25
+set g_balance_blaster_primary_damage 20
 set g_balance_blaster_primary_delay 0
-set g_balance_blaster_primary_edgedamage 12.5
+set g_balance_blaster_primary_edgedamage 10
 set g_balance_blaster_primary_force 300
 set g_balance_blaster_primary_force_zscale 1.25
 set g_balance_blaster_primary_lifetime 5
@@ -43,8 +43,6 @@ set g_balance_shotgun_primary_spread 0.07
 set g_balance_shotgun_reload_ammo 50
 set g_balance_shotgun_reload_time 2
 set g_balance_shotgun_secondary 1
-set g_balance_shotgun_secondary_alt_animtime 0.2
-set g_balance_shotgun_secondary_alt_refire 1.2
 set g_balance_shotgun_secondary_animtime 1.15
 set g_balance_shotgun_secondary_damage 70
 set g_balance_shotgun_secondary_force 200
@@ -58,6 +56,8 @@ set g_balance_shotgun_secondary_melee_swing_up 30
 set g_balance_shotgun_secondary_melee_time 0.15
 set g_balance_shotgun_secondary_melee_traces 10
 set g_balance_shotgun_secondary_refire 1.25
+set g_balance_shotgun_secondary_alt_animtime 0.2
+set g_balance_shotgun_secondary_alt_refire 1.2
 set g_balance_shotgun_switchdelay_drop 0.2
 set g_balance_shotgun_switchdelay_raise 0.2
 set g_balance_shotgun_weaponreplace ""
@@ -193,7 +193,7 @@ set g_balance_electro_primary_force 200
 set g_balance_electro_primary_lifetime 5
 set g_balance_electro_primary_midaircombo_explode 1
 set g_balance_electro_primary_midaircombo_interval 0.1
-set g_balance_electro_primary_midaircombo_radius 150
+set g_balance_electro_primary_midaircombo_radius 0
 set g_balance_electro_primary_radius 100
 set g_balance_electro_primary_refire 0.6
 set g_balance_electro_primary_speed 2500
@@ -218,9 +218,9 @@ set g_balance_electro_secondary_refire2 1.6
 set g_balance_electro_secondary_speed 1000
 set g_balance_electro_secondary_speed_up 200
 set g_balance_electro_secondary_speed_z 0
-set g_balance_electro_secondary_spread 0.04
+set g_balance_electro_secondary_spread 0
 set g_balance_electro_secondary_stick 0
-set g_balance_electro_secondary_touchexplode 0
+set g_balance_electro_secondary_touchexplode 1
 set g_balance_electro_switchdelay_drop 0.2
 set g_balance_electro_switchdelay_raise 0.2
 set g_balance_electro_weaponreplace ""
@@ -233,8 +233,8 @@ set g_balance_crylink_primary_ammo 3
 set g_balance_crylink_primary_animtime 0.3
 set g_balance_crylink_primary_bouncedamagefactor 0.5
 set g_balance_crylink_primary_bounces 1
-set g_balance_crylink_primary_damage 12
-set g_balance_crylink_primary_edgedamage 6
+set g_balance_crylink_primary_damage 10
+set g_balance_crylink_primary_edgedamage 5
 set g_balance_crylink_primary_force -50
 set g_balance_crylink_primary_joindelay 0.1
 set g_balance_crylink_primary_joinexplode 1
@@ -243,7 +243,7 @@ set g_balance_crylink_primary_joinexplode_edgedamage 0
 set g_balance_crylink_primary_joinexplode_force 0
 set g_balance_crylink_primary_joinexplode_radius 0
 set g_balance_crylink_primary_joinspread 0.2
-set g_balance_crylink_primary_linkexplode 1
+set g_balance_crylink_primary_linkexplode 0
 set g_balance_crylink_primary_middle_fadetime 5
 set g_balance_crylink_primary_middle_lifetime 5
 set g_balance_crylink_primary_other_fadetime 5
@@ -260,9 +260,9 @@ set g_balance_crylink_secondary_ammo 2
 set g_balance_crylink_secondary_animtime 0.2
 set g_balance_crylink_secondary_bouncedamagefactor 0.5
 set g_balance_crylink_secondary_bounces 0
-set g_balance_crylink_secondary_damage 10
-set g_balance_crylink_secondary_edgedamage 5
-set g_balance_crylink_secondary_force -250
+set g_balance_crylink_secondary_damage 8
+set g_balance_crylink_secondary_edgedamage 4
+set g_balance_crylink_secondary_force -200
 set g_balance_crylink_secondary_joindelay 0
 set g_balance_crylink_secondary_joinexplode 0
 set g_balance_crylink_secondary_joinexplode_damage 0
@@ -343,7 +343,7 @@ set g_balance_hagar_primary_lifetime 5
 set g_balance_hagar_primary_radius 65
 set g_balance_hagar_primary_refire 0.16667
 set g_balance_hagar_primary_speed 2200
-set g_balance_hagar_primary_spread 0.03
+set g_balance_hagar_primary_spread 0
 set g_balance_hagar_reload_ammo 0
 set g_balance_hagar_reload_time 2
 set g_balance_hagar_secondary 1
@@ -368,7 +368,7 @@ set g_balance_hagar_secondary_load_spread_bias 0.5
 set g_balance_hagar_secondary_radius 80
 set g_balance_hagar_secondary_refire 0.5
 set g_balance_hagar_secondary_speed 2000
-set g_balance_hagar_secondary_spread 0.05
+set g_balance_hagar_secondary_spread 0
 set g_balance_hagar_switchdelay_drop 0.2
 set g_balance_hagar_switchdelay_raise 0.2
 set g_balance_hagar_weaponreplace ""
@@ -399,9 +399,9 @@ set g_balance_devastator_remote_damage 70
 set g_balance_devastator_remote_edgedamage 35
 set g_balance_devastator_remote_force 300
 set g_balance_devastator_remote_jump_damage 70
-set g_balance_devastator_remote_jump_force 0
+set g_balance_devastator_remote_jump_force 450
 set g_balance_devastator_remote_jump_radius 0
-set g_balance_devastator_remote_jump_velocity_z_add 400
+set g_balance_devastator_remote_jump_velocity_z_add 0
 set g_balance_devastator_remote_jump_velocity_z_max 1500
 set g_balance_devastator_remote_jump_velocity_z_min 400
 set g_balance_devastator_remote_radius 110
@@ -435,6 +435,7 @@ set g_balance_porto_weaponthrowable 1
 // {{{ #12: Vaporizer
 set g_balance_vaporizer_primary_ammo 10
 set g_balance_vaporizer_primary_animtime 0.3
+set g_balance_vaporizer_primary_damage 150
 set g_balance_vaporizer_primary_refire 1
 set g_balance_vaporizer_reload_ammo 0
 set g_balance_vaporizer_reload_time 0
@@ -455,7 +456,7 @@ set g_balance_vaporizer_switchdelay_raise 0.2
 set g_balance_vaporizer_weaponreplace ""
 set g_balance_vaporizer_weaponstart 0
 set g_balance_vaporizer_weaponstartoverride -1
-set g_balance_vaporizer_weaponthrowable 0
+set g_balance_vaporizer_weaponthrowable 1
 // }}}
 // {{{ #13: Grappling Hook
 set g_balance_hook_primary_ammo 5
@@ -676,23 +677,23 @@ set g_balance_seeker_weaponthrowable 1
 // }}}
 // {{{ #19: Shockwave (MUTATOR WEAPON)
 set g_balance_shockwave_blast_animtime 0.3
-set g_balance_shockwave_blast_damage 20
+set g_balance_shockwave_blast_damage 40
 set g_balance_shockwave_blast_distance 1000
 set g_balance_shockwave_blast_edgedamage 0
-set g_balance_shockwave_blast_force 200
+set g_balance_shockwave_blast_force 15
 set g_balance_shockwave_blast_force_forwardbias 50
-set g_balance_shockwave_blast_force_zscale 2
+set g_balance_shockwave_blast_force_zscale 1
 set g_balance_shockwave_blast_jump_damage 20
 set g_balance_shockwave_blast_jump_edgedamage 0
-set g_balance_shockwave_blast_jump_force 300
-set g_balance_shockwave_blast_jump_force_velocitybias 0
-set g_balance_shockwave_blast_jump_force_zscale 1.25
+set g_balance_shockwave_blast_jump_force 100
+set g_balance_shockwave_blast_jump_force_velocitybias 1
+set g_balance_shockwave_blast_jump_force_zscale 1
 set g_balance_shockwave_blast_jump_multiplier_accuracy 0.5
 set g_balance_shockwave_blast_jump_multiplier_distance 0.5
 set g_balance_shockwave_blast_jump_multiplier_min 0
 set g_balance_shockwave_blast_jump_radius 150
-set g_balance_shockwave_blast_multiplier_accuracy 0.5
-set g_balance_shockwave_blast_multiplier_distance 0.5
+set g_balance_shockwave_blast_multiplier_accuracy 0.45
+set g_balance_shockwave_blast_multiplier_distance 0.2
 set g_balance_shockwave_blast_multiplier_min 0
 set g_balance_shockwave_blast_refire 0.75
 set g_balance_shockwave_blast_splash_damage 15
@@ -726,26 +727,31 @@ set g_balance_shockwave_weaponstartoverride -1
 set g_balance_shockwave_weaponthrowable 0
 // }}}
 // {{{ #20: Arc
-set g_balance_arc_beam_ammo 4
-set g_balance_arc_beam_animtime 0.2
+set g_balance_arc_beam_ammo 6
+set g_balance_arc_beam_animtime 0.1
 set g_balance_arc_beam_botaimlifetime 0
 set g_balance_arc_beam_botaimspeed 0
-set g_balance_arc_beam_damage 115
+set g_balance_arc_beam_damage 100
 set g_balance_arc_beam_degreespersegment 1
 set g_balance_arc_beam_distancepersegment 0
 set g_balance_arc_beam_falloff_halflifedist 0
 set g_balance_arc_beam_falloff_maxdist 0
 set g_balance_arc_beam_falloff_mindist 0
-set g_balance_arc_beam_force 900
-set g_balance_arc_beam_healing_amax 100
+set g_balance_arc_beam_force 600
+set g_balance_arc_beam_healing_amax 0
 set g_balance_arc_beam_healing_aps 50
 set g_balance_arc_beam_healing_hmax 150
 set g_balance_arc_beam_healing_hps 50
-set g_balance_arc_beam_heat 1
+set g_balance_arc_cooldown 2.5
+set g_balance_arc_cooldown_release 0
+set g_balance_arc_overheat_max 5
+set g_balance_arc_overheat_min 3
+set g_balance_arc_beam_heat 0
+set g_balance_arc_burst_heat 5
 set g_balance_arc_beam_maxangle 10
 set g_balance_arc_beam_nonplayerdamage 80
 set g_balance_arc_beam_range 1000
-set g_balance_arc_beam_refire 0.5
+set g_balance_arc_beam_refire 0.25
 set g_balance_arc_beam_returnspeed 8
 set g_balance_arc_beam_tightness 0.5
 set g_balance_arc_bolt 0
@@ -753,24 +759,19 @@ set g_balance_arc_bolt_ammo 1
 set g_balance_arc_bolt_damage 25
 set g_balance_arc_bolt_damageforcescale 0
 set g_balance_arc_bolt_edgedamage 12.5
-set g_balance_arc_bolt_force 100
+set g_balance_arc_bolt_force 120
 set g_balance_arc_bolt_health 15
 set g_balance_arc_bolt_lifetime 5
 set g_balance_arc_bolt_radius 65
 set g_balance_arc_bolt_refire 0.16667
-set g_balance_arc_bolt_speed 2200
-set g_balance_arc_bolt_spread 0.03
+set g_balance_arc_bolt_speed 2300
+set g_balance_arc_bolt_spread 0
 set g_balance_arc_burst_ammo 15
 set g_balance_arc_burst_damage 250
 set g_balance_arc_burst_healing_aps 100
 set g_balance_arc_burst_healing_hps 100
-set g_balance_arc_burst_heat 4
-set g_balance_arc_cooldown 2.5
-set g_balance_arc_cooldown_release 1
-set g_balance_arc_overheat_max 5
-set g_balance_arc_overheat_min 3
-set g_balance_arc_switchdelay_drop 0.3
-set g_balance_arc_switchdelay_raise 0.3
+set g_balance_arc_switchdelay_drop 0.2
+set g_balance_arc_switchdelay_raise 0.2
 set g_balance_arc_weaponreplace ""
 set g_balance_arc_weaponstart 0
 set g_balance_arc_weaponstartoverride -1
@@ -808,7 +809,7 @@ set g_balance_rpc_radius 300
 set g_balance_rpc_refire 1
 set g_balance_rpc_reload_ammo 10
 set g_balance_rpc_reload_time 1
-set g_balance_rpc_speed 1250
+set g_balance_rpc_speed 2500
 set g_balance_rpc_speedaccel 5000
 set g_balance_rpc_switchdelay_drop 0.2
 set g_balance_rpc_switchdelay_raise 0.2
index 95ac919b6a9e5d3c5d74e4a92771d47d1c9a5768..a7b90c7d6f73c1d901680635563a6b6e3fa530fb 100644 (file)
@@ -1,10 +1,10 @@
 // {{{ #1: Blaster
-set g_balance_blaster_primary_animtime 0.3
-set g_balance_blaster_primary_damage 25
+set g_balance_blaster_primary_animtime 0.2
+set g_balance_blaster_primary_damage 20
 set g_balance_blaster_primary_delay 0
-set g_balance_blaster_primary_edgedamage 12.5
-set g_balance_blaster_primary_force 250
-set g_balance_blaster_primary_force_zscale 1.5
+set g_balance_blaster_primary_edgedamage 10
+set g_balance_blaster_primary_force 300
+set g_balance_blaster_primary_force_zscale 1.25
 set g_balance_blaster_primary_lifetime 5
 set g_balance_blaster_primary_radius 60
 set g_balance_blaster_primary_refire 0.7
@@ -12,7 +12,7 @@ set g_balance_blaster_primary_shotangle 0
 set g_balance_blaster_primary_speed 6000
 set g_balance_blaster_primary_spread 0
 set g_balance_blaster_secondary 0
-set g_balance_blaster_secondary_animtime 0.3
+set g_balance_blaster_secondary_animtime 0.2
 set g_balance_blaster_secondary_damage 25
 set g_balance_blaster_secondary_delay 0
 set g_balance_blaster_secondary_edgedamage 12.5
@@ -34,7 +34,7 @@ set g_balance_blaster_weaponthrowable 0
 // {{{ #2: Shotgun
 set g_balance_shotgun_primary_ammo 1
 set g_balance_shotgun_primary_animtime 0.2
-set g_balance_shotgun_primary_bullets 14
+set g_balance_shotgun_primary_bullets 12
 set g_balance_shotgun_primary_damage 4
 set g_balance_shotgun_primary_force 15
 set g_balance_shotgun_primary_refire 0.75
@@ -44,7 +44,7 @@ set g_balance_shotgun_reload_ammo 0
 set g_balance_shotgun_reload_time 2
 set g_balance_shotgun_secondary 1
 set g_balance_shotgun_secondary_animtime 1.15
-set g_balance_shotgun_secondary_damage 80
+set g_balance_shotgun_secondary_damage 70
 set g_balance_shotgun_secondary_force 200
 set g_balance_shotgun_secondary_melee_delay 0.25
 set g_balance_shotgun_secondary_melee_multihit 1
@@ -61,7 +61,7 @@ set g_balance_shotgun_secondary_alt_refire 1.2
 set g_balance_shotgun_switchdelay_drop 0
 set g_balance_shotgun_switchdelay_raise 0
 set g_balance_shotgun_weaponreplace ""
-set g_balance_shotgun_weaponstart 0
+set g_balance_shotgun_weaponstart 1
 set g_balance_shotgun_weaponstartoverride -1
 set g_balance_shotgun_weaponthrowable 1
 // }}}
@@ -75,8 +75,8 @@ set g_balance_machinegun_burst_speed 0
 set g_balance_machinegun_first 1
 set g_balance_machinegun_first_ammo 1
 set g_balance_machinegun_first_damage 14
-set g_balance_machinegun_first_force 5
-set g_balance_machinegun_first_refire 0.4
+set g_balance_machinegun_first_force 3
+set g_balance_machinegun_first_refire 0.125
 set g_balance_machinegun_first_spread 0.03
 set g_balance_machinegun_mode 1
 set g_balance_machinegun_reload_ammo 0
@@ -86,14 +86,14 @@ set g_balance_machinegun_spread_add 0
 set g_balance_machinegun_spread_max 0
 set g_balance_machinegun_spread_min 0
 set g_balance_machinegun_sustained_ammo 1
-set g_balance_machinegun_sustained_damage 12
-set g_balance_machinegun_sustained_force 5
+set g_balance_machinegun_sustained_damage 10
+set g_balance_machinegun_sustained_force 3
 set g_balance_machinegun_sustained_refire 0.1
 set g_balance_machinegun_sustained_spread 0
 set g_balance_machinegun_switchdelay_drop 0
 set g_balance_machinegun_switchdelay_raise 0
 set g_balance_machinegun_weaponreplace ""
-set g_balance_machinegun_weaponstart 1
+set g_balance_machinegun_weaponstart 0
 set g_balance_machinegun_weaponstartoverride -1
 set g_balance_machinegun_weaponthrowable 1
 // }}}
@@ -102,11 +102,11 @@ set g_balance_mortar_bouncefactor 0.5
 set g_balance_mortar_bouncestop 0.075
 set g_balance_mortar_primary_ammo 2
 set g_balance_mortar_primary_animtime 0.3
-set g_balance_mortar_primary_damage 50
+set g_balance_mortar_primary_damage 55
 set g_balance_mortar_primary_damageforcescale 0
 set g_balance_mortar_primary_edgedamage 25
 set g_balance_mortar_primary_force 250
-set g_balance_mortar_primary_health 0
+set g_balance_mortar_primary_health 15
 set g_balance_mortar_primary_lifetime 5
 set g_balance_mortar_primary_lifetime_stick 0
 set g_balance_mortar_primary_radius 100
@@ -125,7 +125,7 @@ set g_balance_mortar_secondary_damage 55
 set g_balance_mortar_secondary_damageforcescale 0
 set g_balance_mortar_secondary_edgedamage 30
 set g_balance_mortar_secondary_force 300
-set g_balance_mortar_secondary_health 0
+set g_balance_mortar_secondary_health 30
 set g_balance_mortar_secondary_lifetime 8
 set g_balance_mortar_secondary_lifetime_bounce 0.5
 set g_balance_mortar_secondary_lifetime_stick 0
@@ -178,17 +178,17 @@ set g_balance_minelayer_weaponthrowable 1
 // {{{ #6: Electro
 set g_balance_electro_combo_comboradius 275
 set g_balance_electro_combo_comboradius_thruwall 200
-set g_balance_electro_combo_damage 40
-set g_balance_electro_combo_edgedamage 20
+set g_balance_electro_combo_damage 50
+set g_balance_electro_combo_edgedamage 25
 set g_balance_electro_combo_force 120
 set g_balance_electro_combo_radius 175
 set g_balance_electro_combo_safeammocheck 1
 set g_balance_electro_combo_speed 2000
 set g_balance_electro_primary_ammo 4
-set g_balance_electro_primary_animtime 0.1
+set g_balance_electro_primary_animtime 0.3
 set g_balance_electro_primary_comboradius 150
-set g_balance_electro_primary_damage 55
-set g_balance_electro_primary_edgedamage 27.5
+set g_balance_electro_primary_damage 40
+set g_balance_electro_primary_edgedamage 20
 set g_balance_electro_primary_force 200
 set g_balance_electro_primary_lifetime 5
 set g_balance_electro_primary_midaircombo_explode 1
@@ -205,10 +205,10 @@ set g_balance_electro_secondary_animtime 0.2
 set g_balance_electro_secondary_bouncefactor 0.4
 set g_balance_electro_secondary_bouncestop 0.05
 set g_balance_electro_secondary_count 3
-set g_balance_electro_secondary_damage 40
+set g_balance_electro_secondary_damage 30
 set g_balance_electro_secondary_damagedbycontents 1
 set g_balance_electro_secondary_damageforcescale 4
-set g_balance_electro_secondary_edgedamage 20
+set g_balance_electro_secondary_edgedamage 15
 set g_balance_electro_secondary_force 200
 set g_balance_electro_secondary_health 5
 set g_balance_electro_secondary_lifetime 3
@@ -218,12 +218,12 @@ set g_balance_electro_secondary_refire2 1.5
 set g_balance_electro_secondary_speed 900
 set g_balance_electro_secondary_speed_up 200
 set g_balance_electro_secondary_speed_z 0
-set g_balance_electro_secondary_spread 0.05
+set g_balance_electro_secondary_spread 0
 set g_balance_electro_secondary_stick 0
 set g_balance_electro_secondary_touchexplode 0
 set g_balance_electro_switchdelay_drop 0
 set g_balance_electro_switchdelay_raise 0
-set g_balance_electro_weaponreplace ""
+set g_balance_electro_weaponreplace "arc"
 set g_balance_electro_weaponstart 0
 set g_balance_electro_weaponstartoverride -1
 set g_balance_electro_weaponthrowable 1
@@ -233,9 +233,9 @@ set g_balance_crylink_primary_ammo 3
 set g_balance_crylink_primary_animtime 0.3
 set g_balance_crylink_primary_bouncedamagefactor 0.5
 set g_balance_crylink_primary_bounces 1
-set g_balance_crylink_primary_damage 12
-set g_balance_crylink_primary_edgedamage 6
-set g_balance_crylink_primary_force -60
+set g_balance_crylink_primary_damage 10
+set g_balance_crylink_primary_edgedamage 5
+set g_balance_crylink_primary_force -50
 set g_balance_crylink_primary_joindelay 0.1
 set g_balance_crylink_primary_joinexplode 1
 set g_balance_crylink_primary_joinexplode_damage 0
@@ -258,11 +258,11 @@ set g_balance_crylink_reload_time 2
 set g_balance_crylink_secondary 1
 set g_balance_crylink_secondary_ammo 2
 set g_balance_crylink_secondary_animtime 0.2
-set g_balance_crylink_secondary_bouncedamagefactor 0.5
+set g_balance_crylink_secondary_bouncedamagefactor 0
 set g_balance_crylink_secondary_bounces 0
-set g_balance_crylink_secondary_damage 10
-set g_balance_crylink_secondary_edgedamage 5
-set g_balance_crylink_secondary_force -150
+set g_balance_crylink_secondary_damage 8
+set g_balance_crylink_secondary_edgedamage 4
+set g_balance_crylink_secondary_force 480
 set g_balance_crylink_secondary_joindelay 0
 set g_balance_crylink_secondary_joinexplode 0
 set g_balance_crylink_secondary_joinexplode_damage 0
@@ -275,11 +275,11 @@ set g_balance_crylink_secondary_middle_fadetime 5
 set g_balance_crylink_secondary_middle_lifetime 5
 set g_balance_crylink_secondary_other_fadetime 5
 set g_balance_crylink_secondary_other_lifetime 5
-set g_balance_crylink_secondary_radius 100
-set g_balance_crylink_secondary_refire 0.7
-set g_balance_crylink_secondary_shots 5
-set g_balance_crylink_secondary_speed 3000
-set g_balance_crylink_secondary_spread 0.01
+set g_balance_crylink_secondary_radius 120
+set g_balance_crylink_secondary_refire 0.1
+set g_balance_crylink_secondary_shots 1
+set g_balance_crylink_secondary_speed 2000
+set g_balance_crylink_secondary_spread 0
 set g_balance_crylink_secondary_spreadtype 1
 set g_balance_crylink_switchdelay_drop 0
 set g_balance_crylink_switchdelay_raise 0
@@ -289,13 +289,13 @@ set g_balance_crylink_weaponstartoverride -1
 set g_balance_crylink_weaponthrowable 1
 // }}}
 // {{{ #8: Vortex
-set g_balance_vortex_charge 1
+set g_balance_vortex_charge 0
 set g_balance_vortex_charge_animlimit 0.5
 set g_balance_vortex_charge_limit 1
 set g_balance_vortex_charge_maxspeed 800
 set g_balance_vortex_charge_mindmg 40
 set g_balance_vortex_charge_minspeed 400
-set g_balance_vortex_charge_rate 0.4
+set g_balance_vortex_charge_rate 0.6
 set g_balance_vortex_charge_rot_pause 0
 set g_balance_vortex_charge_rot_rate 0
 set g_balance_vortex_charge_shot_multiplier 0
@@ -303,7 +303,7 @@ set g_balance_vortex_charge_start 0.5
 set g_balance_vortex_charge_velocity_rate 0
 set g_balance_vortex_primary_ammo 6
 set g_balance_vortex_primary_animtime 0.4
-set g_balance_vortex_primary_damage 90
+set g_balance_vortex_primary_damage 80
 set g_balance_vortex_primary_damagefalloff_forcehalflife 0
 set g_balance_vortex_primary_damagefalloff_halflife 0
 set g_balance_vortex_primary_damagefalloff_maxdist 0
@@ -343,14 +343,14 @@ set g_balance_hagar_primary_lifetime 5
 set g_balance_hagar_primary_radius 25
 set g_balance_hagar_primary_refire 0.11
 set g_balance_hagar_primary_speed 2000
-set g_balance_hagar_primary_spread 0.03
+set g_balance_hagar_primary_spread 0
 set g_balance_hagar_reload_ammo 0
 set g_balance_hagar_reload_time 2
 set g_balance_hagar_secondary 0
 set g_balance_hagar_secondary_ammo 1
-set g_balance_hagar_secondary_damage 40
+set g_balance_hagar_secondary_damage 35
 set g_balance_hagar_secondary_damageforcescale 0
-set g_balance_hagar_secondary_edgedamage 20
+set g_balance_hagar_secondary_edgedamage 17.5
 set g_balance_hagar_secondary_force 75
 set g_balance_hagar_secondary_health 15
 set g_balance_hagar_secondary_lifetime_min 10
@@ -368,7 +368,7 @@ set g_balance_hagar_secondary_load_spread_bias 0.5
 set g_balance_hagar_secondary_radius 80
 set g_balance_hagar_secondary_refire 0.5
 set g_balance_hagar_secondary_speed 2000
-set g_balance_hagar_secondary_spread 0.05
+set g_balance_hagar_secondary_spread 0
 set g_balance_hagar_switchdelay_drop 0
 set g_balance_hagar_switchdelay_raise 0
 set g_balance_hagar_weaponreplace ""
@@ -381,7 +381,7 @@ set g_balance_devastator_ammo 4
 set g_balance_devastator_animtime 0.7
 set g_balance_devastator_damage 80
 set g_balance_devastator_damageforcescale 0
-set g_balance_devastator_detonatedelay 0.02
+set g_balance_devastator_detonatedelay 999
 set g_balance_devastator_edgedamage 40
 set g_balance_devastator_force 350
 set g_balance_devastator_guidedelay 0.2
@@ -389,7 +389,7 @@ set g_balance_devastator_guidegoal 512
 set g_balance_devastator_guiderate 0
 set g_balance_devastator_guideratedelay 999
 set g_balance_devastator_guidestop 1
-set g_balance_devastator_health 0
+set g_balance_devastator_health 30
 set g_balance_devastator_lifetime 100
 set g_balance_devastator_radius 110
 set g_balance_devastator_refire 0.9
@@ -399,9 +399,9 @@ set g_balance_devastator_remote_damage 70
 set g_balance_devastator_remote_edgedamage 35
 set g_balance_devastator_remote_force 350
 set g_balance_devastator_remote_jump_damage 70
-set g_balance_devastator_remote_jump_force 0
+set g_balance_devastator_remote_jump_force 450
 set g_balance_devastator_remote_jump_radius 0
-set g_balance_devastator_remote_jump_velocity_z_add 400
+set g_balance_devastator_remote_jump_velocity_z_add 0
 set g_balance_devastator_remote_jump_velocity_z_max 1500
 set g_balance_devastator_remote_jump_velocity_z_min 400
 set g_balance_devastator_remote_radius 110
@@ -419,7 +419,7 @@ set g_balance_devastator_weaponthrowable 1
 set g_balance_porto_primary_animtime 0.3
 set g_balance_porto_primary_lifetime 5
 set g_balance_porto_primary_refire 1.5
-set g_balance_porto_primary_speed 5000
+set g_balance_porto_primary_speed 1000
 set g_balance_porto_secondary 1
 set g_balance_porto_secondary_animtime 0.3
 set g_balance_porto_secondary_lifetime 5
@@ -435,7 +435,7 @@ set g_balance_porto_weaponthrowable 1
 // {{{ #12: Vaporizer
 set g_balance_vaporizer_primary_ammo 10
 set g_balance_vaporizer_primary_animtime 0.3
-set g_balance_vaporizer_primary_damage -1
+set g_balance_vaporizer_primary_damage 150
 set g_balance_vaporizer_primary_refire 1
 set g_balance_vaporizer_reload_ammo 0
 set g_balance_vaporizer_reload_time 0
@@ -456,7 +456,7 @@ set g_balance_vaporizer_switchdelay_raise 0
 set g_balance_vaporizer_weaponreplace ""
 set g_balance_vaporizer_weaponstart 0
 set g_balance_vaporizer_weaponstartoverride -1
-set g_balance_vaporizer_weaponthrowable 0
+set g_balance_vaporizer_weaponthrowable 1
 // }}}
 // {{{ #13: Grappling Hook
 set g_balance_hook_primary_ammo 5
@@ -677,23 +677,23 @@ set g_balance_seeker_weaponthrowable 1
 // }}}
 // {{{ #19: Shockwave (MUTATOR WEAPON)
 set g_balance_shockwave_blast_animtime 0.3
-set g_balance_shockwave_blast_damage 20
+set g_balance_shockwave_blast_damage 40
 set g_balance_shockwave_blast_distance 1000
 set g_balance_shockwave_blast_edgedamage 0
-set g_balance_shockwave_blast_force 200
+set g_balance_shockwave_blast_force 15
 set g_balance_shockwave_blast_force_forwardbias 50
-set g_balance_shockwave_blast_force_zscale 2
+set g_balance_shockwave_blast_force_zscale 1
 set g_balance_shockwave_blast_jump_damage 20
 set g_balance_shockwave_blast_jump_edgedamage 0
-set g_balance_shockwave_blast_jump_force 300
-set g_balance_shockwave_blast_jump_force_velocitybias 0
-set g_balance_shockwave_blast_jump_force_zscale 1.25
+set g_balance_shockwave_blast_jump_force 100
+set g_balance_shockwave_blast_jump_force_velocitybias 1
+set g_balance_shockwave_blast_jump_force_zscale 1
 set g_balance_shockwave_blast_jump_multiplier_accuracy 0.5
 set g_balance_shockwave_blast_jump_multiplier_distance 0.5
 set g_balance_shockwave_blast_jump_multiplier_min 0
 set g_balance_shockwave_blast_jump_radius 150
-set g_balance_shockwave_blast_multiplier_accuracy 0.5
-set g_balance_shockwave_blast_multiplier_distance 0.5
+set g_balance_shockwave_blast_multiplier_accuracy 0.45
+set g_balance_shockwave_blast_multiplier_distance 0.2
 set g_balance_shockwave_blast_multiplier_min 0
 set g_balance_shockwave_blast_refire 0.75
 set g_balance_shockwave_blast_splash_damage 15
@@ -727,51 +727,51 @@ set g_balance_shockwave_weaponstartoverride -1
 set g_balance_shockwave_weaponthrowable 0
 // }}}
 // {{{ #20: Arc
-set g_balance_arc_beam_ammo 4
-set g_balance_arc_beam_animtime 0.2
+set g_balance_arc_beam_ammo 6
+set g_balance_arc_beam_animtime 0.1
 set g_balance_arc_beam_botaimlifetime 0
 set g_balance_arc_beam_botaimspeed 0
-set g_balance_arc_beam_damage 115
+set g_balance_arc_beam_damage 100
 set g_balance_arc_beam_degreespersegment 1
 set g_balance_arc_beam_distancepersegment 0
 set g_balance_arc_beam_falloff_halflifedist 0
 set g_balance_arc_beam_falloff_maxdist 0
 set g_balance_arc_beam_falloff_mindist 0
-set g_balance_arc_beam_force 900
-set g_balance_arc_beam_healing_amax 100
+set g_balance_arc_beam_force 600
+set g_balance_arc_beam_healing_amax 0
 set g_balance_arc_beam_healing_aps 50
 set g_balance_arc_beam_healing_hmax 150
 set g_balance_arc_beam_healing_hps 50
 set g_balance_arc_cooldown 2.5
-set g_balance_arc_cooldown_release 1
+set g_balance_arc_cooldown_release 0
 set g_balance_arc_overheat_max 5
 set g_balance_arc_overheat_min 3
-set g_balance_arc_beam_heat 1
+set g_balance_arc_beam_heat 0
 set g_balance_arc_burst_heat 5
 set g_balance_arc_beam_maxangle 10
 set g_balance_arc_beam_nonplayerdamage 80
 set g_balance_arc_beam_range 1000
-set g_balance_arc_beam_refire 0.5
+set g_balance_arc_beam_refire 0.25
 set g_balance_arc_beam_returnspeed 8
 set g_balance_arc_beam_tightness 0.5
-set g_balance_arc_bolt 0
+set g_balance_arc_bolt 1
 set g_balance_arc_bolt_ammo 1
 set g_balance_arc_bolt_damage 25
 set g_balance_arc_bolt_damageforcescale 0
 set g_balance_arc_bolt_edgedamage 12.5
-set g_balance_arc_bolt_force 100
+set g_balance_arc_bolt_force 120
 set g_balance_arc_bolt_health 15
 set g_balance_arc_bolt_lifetime 5
 set g_balance_arc_bolt_radius 65
 set g_balance_arc_bolt_refire 0.16667
-set g_balance_arc_bolt_speed 2200
-set g_balance_arc_bolt_spread 0.03
+set g_balance_arc_bolt_speed 2300
+set g_balance_arc_bolt_spread 0
 set g_balance_arc_burst_ammo 15
 set g_balance_arc_burst_damage 250
 set g_balance_arc_burst_healing_aps 100
 set g_balance_arc_burst_healing_hps 100
-set g_balance_arc_switchdelay_drop 0.3
-set g_balance_arc_switchdelay_raise 0.3
+set g_balance_arc_switchdelay_drop 0
+set g_balance_arc_switchdelay_raise 0
 set g_balance_arc_weaponreplace ""
 set g_balance_arc_weaponstart 0
 set g_balance_arc_weaponstartoverride -1
index 79344fda96b597a1ac1b034e3a2755c08bc598d0..5eda67ba945a7f66f4d178a8f80622828c792280 100644 (file)
@@ -97,7 +97,7 @@ set g_pickup_respawntime_ammo 0.1
 set g_pickup_respawntimejitter_short 0
 set g_pickup_respawntimejitter_medium 0
 set g_pickup_respawntimejitter_long 0
-set g_pickup_respawntimejitter_powerup 30
+set g_pickup_respawntimejitter_powerup 0
 set g_pickup_respawntimejitter_weapon 0
 set g_pickup_respawntimejitter_superweapon 10
 set g_pickup_respawntimejitter_ammo 0
@@ -108,8 +108,8 @@ set g_balance_health_regen 0.08
 set g_balance_health_regenlinear 0.5
 set g_balance_pause_health_regen 5
 set g_balance_pause_health_regen_spawn 0
-set g_balance_health_rot 0.04
-set g_balance_health_rotlinear 0.75
+set g_balance_health_rot 0.02
+set g_balance_health_rotlinear 1
 set g_balance_pause_health_rot 1
 set g_balance_pause_health_rot_spawn 5
 set g_balance_health_regenstable 100
@@ -117,14 +117,14 @@ set g_balance_health_rotstable 100
 set g_balance_health_limit 999
 set g_balance_armor_regen 0
 set g_balance_armor_regenlinear 0
-set g_balance_armor_rot 0.04
-set g_balance_armor_rotlinear 0.75
+set g_balance_armor_rot 0.02
+set g_balance_armor_rotlinear 1
 set g_balance_pause_armor_rot 1
 set g_balance_pause_armor_rot_spawn 5
 set g_balance_armor_regenstable 100
 set g_balance_armor_rotstable 100
 set g_balance_armor_limit 999
-set g_balance_armor_blockpercent 0.6
+set g_balance_armor_blockpercent 0.7
 set g_balance_fuel_regen 0.1 "fuel regeneration (only applies if the player owns IT_FUEL_REGEN)"
 set g_balance_fuel_regenlinear 0
 set g_balance_pause_fuel_regen 2 // other than this, fuel uses the health regen counter
@@ -146,9 +146,9 @@ set g_weaponforcefactor 1 "weapon force multiplier"
 set g_weaponspreadfactor 1 "weapon spread multiplier"
 set g_balance_firetransfer_time 0.9
 set g_balance_firetransfer_damage 0.8
-set g_throughfloor_damage 0.4
-set g_throughfloor_force 0.7
-set g_projectiles_damage 2
+set g_throughfloor_damage 0.75
+set g_throughfloor_force 0.75
+set g_projectiles_damage -2
 // possible values:
 // -2: absolutely no damage to projectiles (no exceptions)
 // -1: no damage other than the exceptions (electro combo, hagar join explode, ML mines)
@@ -156,7 +156,7 @@ set g_projectiles_damage 2
 // 1: only self damage or damage from contents or exceptions
 // 2: allow all damage to projectiles normally
 set g_projectiles_keep_owner 0
-set g_projectiles_newton_style 2
+set g_projectiles_newton_style 0
 // possible values:
 // 0: absolute velocity projectiles (like Quake)
 // 1: relative velocity projectiles, "Newtonian" (like Tribes 2)
@@ -190,11 +190,11 @@ set g_maxpushtime 8.0 "timeout for kill credit when your damage knocks someone i
 // }}}
 
 // {{{ powerups
-set g_balance_powerup_invincible_takedamage 0.25 // only 1/4th damage is taken
-set g_balance_powerup_invincible_time 999
+set g_balance_powerup_invincible_takedamage 0.33 // only 1/3rd damage is taken
+set g_balance_powerup_invincible_time 30
 set g_balance_powerup_strength_damage 3
 set g_balance_powerup_strength_force 3
-set g_balance_powerup_strength_time 999
+set g_balance_powerup_strength_time 30
 set g_balance_powerup_strength_selfdamage 1.5
 set g_balance_powerup_strength_selfforce 1.5
 set g_balance_superweapons_time 30
@@ -218,8 +218,8 @@ set g_balance_grapplehook_force_rubber_overstretch 1000
 set g_balance_grapplehook_length_min 50
 set g_balance_grapplehook_stretch 50
 set g_balance_grapplehook_airfriction 0.2
-set g_balance_grapplehook_health 130
-set g_balance_grapplehook_damagedbycontents 0
+set g_balance_grapplehook_health 50
+set g_balance_grapplehook_damagedbycontents 1
 set g_balance_grapplehook_refire 0.2
 set g_balance_grapplehook_nade_time 0.7
 set g_balance_grapplehook_crouchslide 0
diff --git a/defaultOverkill.cfg b/defaultOverkill.cfg
new file mode 100644 (file)
index 0000000..29fb2bf
--- /dev/null
@@ -0,0 +1,15 @@
+// ================
+//  Overkill Mode
+// ================
+
+exec defaultXonotic.cfg
+exec balance-overkill.cfg
+exec physicsOverkill.cfg
+
+// general gameplay
+set g_overkill 1
+set g_nades 1
+set g_dodging 1
+set sv_dodging_wall_dodging 1
+set g_spawn_near_teammate 1
+set g_spawn_near_teammate_ignore_spawnpoint 1
index e4ba26af8d209426c5ee02db544314d4f4065bc5..7ff3da7f3ca2fe1089102548de19233fc99b0cf7 100644 (file)
@@ -11,7 +11,6 @@ set g_jump_grunt 1 // make enemies even easier to hear when they're jumping arou
 set g_shootfromcenter 1 // hit where you point at with the crosshair (almost so, no shooteye because it's really ugly)
 set g_balance_kill_antispam 0
 set g_forced_respawn 1
-set g_jump_grunt 1
 // g_playerclip_collisions 0 // do not check playerclips
 set g_powerups 0  // set to -1 or patch xonotic
 set g_spawnpoints_auto_move_out_of_solid 1
index 99d503541572919f9741d1e5715a77408548c39b..e06df7d828abece621023637618574cde11053c1 100644 (file)
@@ -23,3 +23,4 @@ set sv_ready_restart_after_countdown 1
 set g_monsters 0
 set g_turrets 0
 set g_vehicles 0
+set sv_showspectators 0
index 47f42fd29b7d2efd0a63c0361e6137a0e3112968..0c916558e4f12db13729a3b75233c4f30b2b122c 100644 (file)
@@ -1495,8 +1495,8 @@ set cl_fullbright_items 0 "enable fullbright items (if server allows, controled
 set cl_weapon_stay_color "2 0.5 0.5" "Color of picked up weapons when g_weapon_stay > 0"
 set cl_weapon_stay_alpha 0.75 "Alpha of picked up weapons when g_weapon_stay > 0"
 
-set sv_showspectators 0 "Show who's spectating who in the player info panel. Shouldn't be used on competitive servers, also disable when watching a suspected cheater"
-seta cl_showspectators 1
+set sv_showspectators 1 "Show who's spectating who in the player info panel when client has cl_showspectators on. Shouldn't be used on competitive servers, also disable when watching a suspected cheater"
+seta cl_showspectators 0 "Show who's spectating you if server has sv_showspectators enabled"
 
 // Facility for config.cfg use ONLY.
 // Interpreted in post-config.cfg.
diff --git a/gfx/menu/luma/icon_mod_quake.tga b/gfx/menu/luma/icon_mod_quake.tga
new file mode 100644 (file)
index 0000000..e9eb0df
Binary files /dev/null and b/gfx/menu/luma/icon_mod_quake.tga differ
diff --git a/gfx/menu/luminos/icon_mod_quake.tga b/gfx/menu/luminos/icon_mod_quake.tga
new file mode 100644 (file)
index 0000000..6358503
Binary files /dev/null and b/gfx/menu/luminos/icon_mod_quake.tga differ
diff --git a/gfx/menu/wickedx/icon_mod_quake.tga b/gfx/menu/wickedx/icon_mod_quake.tga
new file mode 100644 (file)
index 0000000..6358503
Binary files /dev/null and b/gfx/menu/wickedx/icon_mod_quake.tga differ
diff --git a/gfx/menu/xaw/icon_mod_quake.tga b/gfx/menu/xaw/icon_mod_quake.tga
new file mode 100644 (file)
index 0000000..6358503
Binary files /dev/null and b/gfx/menu/xaw/icon_mod_quake.tga differ
index c272b5bd612f78e4e99c37d5f054f26f89902dc7..f61930852d0f9d75f6b66c241deb801a41032e9b 100644 (file)
@@ -12,7 +12,7 @@ seta cl_dodging_timeout 0.2 "determines how long apart (in seconds) two taps on
 
 set sv_dodging_air_dodging 0
 set sv_dodging_wall_dodging 0 "allow dodging off walls"
-set sv_dodging_delay 0.7 "determines how long a player has to wait to be able to dodge again after dodging"
+set sv_dodging_delay 0.5 "determines how long a player has to wait to be able to dodge again after dodging"
 set sv_dodging_up_speed 200 "the jump velocity of the dodge"
 set sv_dodging_horiz_speed 400 "the horizontal velocity of the dodge"
 set sv_dodging_horiz_speed_frozen 200 "the horizontal velocity of the dodge while frozen"
@@ -22,6 +22,7 @@ set sv_dodging_wall_distance_threshold 10 "the maximum distance from a wall that
 set sv_dodging_sound 1 "if 1 dodging makes a sound. if 0 dodging is silent"
 set sv_dodging_frozen 0 "allow dodging while frozen"
 set sv_dodging_frozen_doubletap 0
+set sv_dodging_maxspeed 450 "maximum speed a player can be moving at before they dodge again"
 
 
 // ===========
diff --git a/physicsOverkill.cfg b/physicsOverkill.cfg
new file mode 100644 (file)
index 0000000..c40b755
--- /dev/null
@@ -0,0 +1,52 @@
+g_mod_physics Overkill
+
+sv_gravity 800
+sv_maxspeed 400
+sv_maxairspeed 360
+
+sv_stopspeed 100
+sv_accelerate 15
+sv_airaccelerate 2
+sv_friction 8
+edgefriction 1
+sv_stepheight 31
+// Q1: 16+2
+// Nex: 32+2
+// Xon 0.7: 24+2
+// Samual: 31 (just below 32, keeping things smooth without allowing 32qu steps)
+
+// jump duration == 2*sv_jumpvelocity / sv_gravity
+// in this case: 0.65 (thus either 19 or 20 frames)
+// jump height == sv_jumpvelocity^2 / (2*sv_gravity)
+// in this case: 42.25
+// player: 24+45 qu
+// total: 111.25qu
+// this is smaller than 112 qu, so a 112 qu high corridor (7 of 8 grid units in
+// the 16 grid, and the 8th unit used for wall/floor) just lets a player jump!
+sv_jumpvelocity 260
+sv_wateraccelerate -1
+sv_waterfriction -1
+sv_airaccel_sideways_friction 0
+sv_airaccel_qw -0.8
+sv_airaccel_qw_stretchfactor 2
+
+sv_airstopaccelerate 3
+sv_airstrafeaccelerate 24
+sv_maxairstrafespeed 100
+sv_airstrafeaccel_qw -0.95
+sv_aircontrol 125
+sv_aircontrol_penalty 180
+sv_aircontrol_power 2
+sv_aircontrol_backwards 0
+sv_airspeedlimit_nonqw 900
+sv_warsowbunny_turnaccel 0
+sv_warsowbunny_accel 0.1593
+sv_warsowbunny_topspeed 925
+sv_warsowbunny_backtosideratio 0.8
+sv_friction_on_land 0
+sv_friction_slick 0.5
+sv_doublejump 0
+sv_jumpspeedcap_min ""
+sv_jumpspeedcap_max ""
+sv_jumpspeedcap_max_disable_on_ramps 1
+g_teleport_maxspeed 0
index 24c844398b9021802dc59f38987edd00d1d1f9a5..7b01b5c67b014fab6c2f98e50bd957a01612c85b 100644 (file)
@@ -877,6 +877,14 @@ void HitSound()
                sound(NULL, CH_INFO, SND_TYPEHIT, VOL_BASE, ATTN_NONE);
                typehit_time_prev = typehit_time;
        }
+
+       static float kill_time_prev = 0;
+       float kill_time = STAT(KILL_TIME);
+       if (COMPARE_INCREASING(kill_time, kill_time_prev) > autocvar_cl_hitsound_antispam_time)
+       {
+               sound(NULL, CH_INFO, SND_KILL, VOL_BASE, ATTN_NONE);
+               kill_time_prev = kill_time;
+       }
 }
 
 vector crosshair_getcolor(entity this, float health_stat)
index e32b270e08a6c6294ec201897c36a7df2ea2e18d..3e16f9cbe8e4c024b45dc8e3f252f6e7b42fff5e 100644 (file)
@@ -11,3 +11,4 @@
 #include <common/t_items.qh>
 #include <common/util.qh>
 #include <common/viewloc.qh>
+#include <common/wepent.qh>
index e7f1e9734d4269ce360bb65ebe2271b5c4a0ae08..4b6918c79bad4b0a1f292a1d98779aaf92c0e877 100644 (file)
@@ -2,10 +2,10 @@
 #include <common/monsters/all.qc>
 #ifdef SVQC
     #include <common/monsters/sv_monsters.qc>
+       #include <common/monsters/sv_spawner.qc>
 #endif
 #ifdef SVQC
     #include <common/monsters/sv_spawn.qc>
-       #include <common/monsters/spawner.qc>
 #endif
 
 #include <common/monsters/monster/_mod.inc>
diff --git a/qcsrc/common/monsters/spawner.qc b/qcsrc/common/monsters/spawner.qc
deleted file mode 100644 (file)
index 0b34d13..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "sv_spawn.qh"
-
-void spawner_use(entity this, entity actor, entity trigger)
-{
-       int moncount = 0;
-       IL_EACH(g_monsters, it.realowner == this,
-       {
-               ++moncount;
-       });
-
-       if(moncount >= this.count)
-               return;
-
-       entity e = spawn();
-       e.noalign = this.noalign;
-       e.angles = this.angles;
-       e.monster_skill = this.monster_skill;
-       e = spawnmonster(e, this.spawnmob, 0, this, this, this.origin, false, true, this.monster_moveflags);
-}
-
-spawnfunc(monster_spawner)
-{
-       if(!autocvar_g_monsters || !this.spawnmob || this.spawnmob == "") { delete(this); return; }
-
-       this.use = spawner_use;
-}
diff --git a/qcsrc/common/monsters/sv_spawner.qc b/qcsrc/common/monsters/sv_spawner.qc
new file mode 100644 (file)
index 0000000..0b34d13
--- /dev/null
@@ -0,0 +1,26 @@
+#include "sv_spawn.qh"
+
+void spawner_use(entity this, entity actor, entity trigger)
+{
+       int moncount = 0;
+       IL_EACH(g_monsters, it.realowner == this,
+       {
+               ++moncount;
+       });
+
+       if(moncount >= this.count)
+               return;
+
+       entity e = spawn();
+       e.noalign = this.noalign;
+       e.angles = this.angles;
+       e.monster_skill = this.monster_skill;
+       e = spawnmonster(e, this.spawnmob, 0, this, this, this.origin, false, true, this.monster_moveflags);
+}
+
+spawnfunc(monster_spawner)
+{
+       if(!autocvar_g_monsters || !this.spawnmob || this.spawnmob == "") { delete(this); return; }
+
+       this.use = spawner_use;
+}
index 943c75594eb7d7f5987a64e9e71ea6ad1b7eda38..877d5c4eac2630e6a55caf1d4a541d7726a7d60a 100644 (file)
@@ -4,8 +4,9 @@ string Buff_UndeprecateName(string buffname)
     {
         case "ammoregen": return "ammo";
         case "haste": case "scout": return "speed";
-        case "doubler": return "medic";
+        case "guard": case "revival": case "regen": return "medic";
         case "invis": return "invisible";
+        case "jumper": return "jump";
         default: return buffname;
     }
 }
@@ -45,8 +46,9 @@ REGISTER_BUFF(MEDIC) {
     this.m_color = '1 0.12 0';
 }
 BUFF_SPAWNFUNCS(medic, BUFF_MEDIC)
-BUFF_SPAWNFUNC_Q3TA_COMPAT(doubler, BUFF_MEDIC)
-BUFF_SPAWNFUNC_Q3TA_COMPAT(medic, BUFF_MEDIC)
+BUFF_SPAWNFUNC_Q3TA_COMPAT(guard, BUFF_MEDIC)
+BUFF_SPAWNFUNC_Q3TA_COMPAT(regen, BUFF_MEDIC)
+BUFF_SPAWNFUNC_Q3TA_COMPAT(revival, BUFF_MEDIC)
 
 REGISTER_BUFF(BASH) {
     this.m_prettyName = _("Bash");
@@ -87,6 +89,7 @@ REGISTER_BUFF(JUMP) {
     this.m_color = '0.24 0.78 1';
 }
 BUFF_SPAWNFUNCS(jump, BUFF_JUMP)
+BUFF_SPAWNFUNC_Q3TA_COMPAT(jumper, BUFF_JUMP)
 
 REGISTER_BUFF(INVISIBLE) {
     this.m_prettyName = _("Invisible");
@@ -136,3 +139,4 @@ REGISTER_BUFF(FLIGHT) {
     this.m_color = '0.23 0.44 1';
 }
 BUFF_SPAWNFUNCS(flight, BUFF_FLIGHT)
+BUFF_SPAWNFUNC_Q3TA_COMPAT(flight, BUFF_FLIGHT)
index 7048e541f4d3397a104afba7b3ea0342d669883b..f6fedde848da86d91c7105052c0da1d44cafe630 100644 (file)
@@ -220,7 +220,7 @@ void buff_NewType(entity ent)
        FOREACH(Buffs, buff_Available(it),
        {
                // if it's already been chosen, give it a lower priority
-               RandomSelection_AddEnt(it, 1, max(0.2, 1 / it.buff_seencount));
+               RandomSelection_AddEnt(it, max(0.2, 1 / it.buff_seencount), 1);
        });
        entity newbuff = RandomSelection_chosen_ent;
        newbuff.buff_seencount += 1; // lower chances of seeing this buff again soon
index fb1502dbc2102d3ec5c24c91f8f4ca705e673281..9dda6aeb31149ddb5f80b2f7030490f31822619c 100644 (file)
@@ -1,5 +1,21 @@
 #include "sv_dodging.qh"
 
+#define PHYS_DODGING                                           g_dodging
+#define PHYS_DODGING_DELAY                                     autocvar_sv_dodging_delay
+#define PHYS_DODGING_DISTANCE_THRESHOLD        autocvar_sv_dodging_wall_distance_threshold
+#define PHYS_DODGING_FROZEN_NODOUBLETAP                autocvar_sv_dodging_frozen_doubletap
+#define PHYS_DODGING_HEIGHT_THRESHOLD          autocvar_sv_dodging_height_threshold
+#define PHYS_DODGING_HORIZ_SPEED                       autocvar_sv_dodging_horiz_speed
+#define PHYS_DODGING_HORIZ_SPEED_FROZEN        autocvar_sv_dodging_horiz_speed_frozen
+#define PHYS_DODGING_RAMP_TIME                                 autocvar_sv_dodging_ramp_time
+#define PHYS_DODGING_UP_SPEED                          autocvar_sv_dodging_up_speed
+#define PHYS_DODGING_WALL                                      autocvar_sv_dodging_wall_dodging
+#define PHYS_DODGING_AIR                                       autocvar_sv_dodging_air_dodging
+#define PHYS_DODGING_MAXSPEED                          autocvar_sv_dodging_maxspeed
+#define PHYS_DODGING_PRESSED_KEYS(s)           (s).pressedkeys
+
+// we ran out of stats slots! TODO: re-enable this when prediction is available for dodging
+#if 0
 #define PHYS_DODGING                                           STAT(DODGING, this)
 #define PHYS_DODGING_DELAY                                     STAT(DODGING_DELAY, this)
 #define PHYS_DODGING_DISTANCE_THRESHOLD        STAT(DODGING_DISTANCE_THRESHOLD, this)
@@ -11,7 +27,8 @@
 #define PHYS_DODGING_UP_SPEED                          STAT(DODGING_UP_SPEED, this)
 #define PHYS_DODGING_WALL                                      STAT(DODGING_WALL, this)
 #define PHYS_DODGING_AIR                                       STAT(DODGING_AIR, this)
-#define PHYS_DODGING_PRESSED_KEYS(s)           (s).pressedkeys
+#define PHYS_DODGING_MAXSPEED                          STAT(DODGING_MAXSPEED, this)
+#endif
 
 #ifdef CSQC
        #define PHYS_DODGING_FRAMETIME                          (1 / (frametime <= 0 ? 60 : frametime))
@@ -123,10 +140,18 @@ bool PM_dodging_checkpressedkeys(entity this)
 
        makevectors(this.angles);
 
+       bool wall_dodge = false;
+
        if(!PHYS_DODGING_AIR)
-       if (check_close_to_ground(this, PHYS_DODGING_HEIGHT_THRESHOLD) != 1
-               && check_close_to_wall(this, PHYS_DODGING_DISTANCE_THRESHOLD) != 1)
-               return true;
+       if(!check_close_to_ground(this, PHYS_DODGING_HEIGHT_THRESHOLD))
+       {
+               wall_dodge = check_close_to_wall(this, PHYS_DODGING_DISTANCE_THRESHOLD);
+               if(!wall_dodge) // we're not on the ground, and wall dodging isn't allowed, end it!
+                       return true;
+       }
+
+       if(!wall_dodge && PHYS_DODGING_MAXSPEED && vdist(this.velocity, >, PHYS_DODGING_MAXSPEED))
+               return false;
 
        float tap_direction_x = 0;
        float tap_direction_y = 0;
index 3db867a5b9418655c8a96b3be6e7119bd26227bf..3ffeb93711d55fdea88d8af452fa4d991b0add21 100644 (file)
@@ -262,6 +262,24 @@ void DrawItemsTimeItem(vector myPos, vector mySize, float ar, string item_icon,
     drawpic_aspect_skin(picpos, item_icon, '1 1 0' * mySize_y, '1 1 1', panel_fg_alpha * picalpha, DRAWFLAG_NORMAL);
 }
 
+float Item_ItemsTime_GetTime(int item)
+{
+    if(autocvar__hud_configure)
+    {
+        switch(item)
+        {
+            case ITEM_ArmorMega.m_id: return time + 0;
+            case ITEM_HealthMega.m_id: return time + 8;
+            case ITEM_Strength.m_id: return time + 0;
+            case ITEM_Shield.m_id: return time + 4;
+        }
+
+        return -1; // don't show others
+    }
+    else
+        return ItemsTime_time[item];
+}
+
 void HUD_ItemsTime()
 {
     if (!autocvar__hud_configure)
@@ -271,35 +289,28 @@ void HUD_ItemsTime()
         ||     (autocvar_hud_panel_itemstime == 2 && (spectatee_status != 0 || warmup_stage || STAT(ITEMSTIME) == 2))
             )) { return; }
     }
-    else
-    {
-        ItemsTime_time[ITEM_ArmorMega.m_id] = time + 0;
-        ItemsTime_time[ITEM_HealthMega.m_id] = time + 8;
-        ItemsTime_time[ITEM_Strength.m_id] = time + 0;
-        ItemsTime_time[ITEM_Shield.m_id] = time + 4;
-    }
 
     int count = 0;
     if (autocvar_hud_panel_itemstime_hidespawned == 1)
     {
         FOREACH(Items, Item_ItemsTime_Allow(it), LAMBDA(
-            count += (ItemsTime_time[it.m_id] > time || -ItemsTime_time[it.m_id] > time);
+            count += (Item_ItemsTime_GetTime(it.m_id) > time || -Item_ItemsTime_GetTime(it.m_id) > time);
         ));
-        count += (ItemsTime_time[Items_MAX] > time || -ItemsTime_time[Items_MAX] > time);
+        count += (Item_ItemsTime_GetTime(Items_MAX) > time || -Item_ItemsTime_GetTime(Items_MAX) > time);
     }
     else if (autocvar_hud_panel_itemstime_hidespawned == 2)
     {
         FOREACH(Items, Item_ItemsTime_Allow(it), LAMBDA(
-            count += (ItemsTime_time[it.m_id] > time);
+            count += (Item_ItemsTime_GetTime(it.m_id) > time);
         ));
-        count += (ItemsTime_time[Items_MAX] > time);
+        count += (Item_ItemsTime_GetTime(Items_MAX) > time);
     }
     else
     {
         FOREACH(Items, Item_ItemsTime_Allow(it), LAMBDA(
-            count += (ItemsTime_time[it.m_id] != -1);
+            count += (Item_ItemsTime_GetTime(it.m_id) != -1);
         ));
-        count += (ItemsTime_time[Items_MAX] != -1);
+        count += (Item_ItemsTime_GetTime(Items_MAX) != -1);
     }
     if (count == 0)
         return;
@@ -374,12 +385,12 @@ void HUD_ItemsTime()
     bool item_available;
     int id = 0;
     string icon = "";
-    FOREACH(Items, Item_ItemsTime_Allow(it) && ItemsTime_time[it.m_id] != -1, LAMBDA(
+    FOREACH(Items, Item_ItemsTime_Allow(it) && Item_ItemsTime_GetTime(it.m_id) != -1, LAMBDA(
        id = it.m_id;
        icon = it.m_icon;
 
 LABEL(iteration)
-        float item_time = ItemsTime_time[id];
+        float item_time = Item_ItemsTime_GetTime(id);
         if (item_time < -1)
         {
             item_available = true;
@@ -388,9 +399,9 @@ LABEL(iteration)
         else
             item_available = (item_time <= time);
 
-        if (ItemsTime_time[id] >= 0)
+        if (Item_ItemsTime_GetTime(id) >= 0)
         {
-            if (time <= ItemsTime_time[id])
+            if (time <= Item_ItemsTime_GetTime(id))
                 ItemsTime_availableTime[id] = 0;
             else if (ItemsTime_availableTime[id] == 0)
                 ItemsTime_availableTime[id] = time;
@@ -402,11 +413,11 @@ LABEL(iteration)
         f = (f > 1) ? 0 : bound(0, f, 1);
 
         if (autocvar_hud_panel_itemstime_hidespawned == 1)
-            if (!(ItemsTime_time[id] > time || -ItemsTime_time[id] > time))
+            if (!(Item_ItemsTime_GetTime(id) > time || -Item_ItemsTime_GetTime(id) > time))
                 continue;
 
         if (autocvar_hud_panel_itemstime_hidespawned == 2)
-            if (!(ItemsTime_time[id] > time))
+            if (!(Item_ItemsTime_GetTime(id) > time))
                 continue;
 
         DrawItemsTimeItem(pos + eX * column * (itemstime_size.x + offset.x) + eY * row * (itemstime_size.y + offset.y), itemstime_size, ar, icon, item_time, item_available, f);
@@ -420,7 +431,7 @@ LABEL(iteration)
                break;
     ));
     // add another fake iteration for superweapons time
-    if(id < Items_MAX && ItemsTime_time[Items_MAX] != -1)
+    if(id < Items_MAX && Item_ItemsTime_GetTime(Items_MAX) != -1)
     {
                id = Items_MAX;
                icon = "superweapons";
index 4f879c851e099dc90055947d384e36a4509e28a4..a9e33b9e110648d9bed339e6ff131a0df7c4b78e 100644 (file)
@@ -1,4 +1,2 @@
 // generated file; do not modify
-#ifdef GAMEQC
-    #include <common/mutators/mutator/walljump/walljump.qc>
-#endif
+#include <common/mutators/mutator/walljump/walljump.qc>
index 59ab51518ee1e393d9ee414010d7c017c29d9a03..18e4c63f4886a88bb69b5398ede6461f5f3c98f8 100644 (file)
@@ -1,4 +1,2 @@
 // generated file; do not modify
-#ifdef GAMEQC
-       #include <common/mutators/mutator/walljump/walljump.qh>
-#endif
+#include <common/mutators/mutator/walljump/walljump.qh>
index 96b81a561544d92f1dedf42bef2cc4a2cd25516e..95a52185b849fd5c4a475b642c78d0148905a63c 100644 (file)
@@ -1,5 +1,6 @@
 #include "walljump.qh"
 
+#ifdef GAMEQC
 #ifdef CSQC
 REGISTER_MUTATOR(walljump, true);
 #elif defined(SVQC)
@@ -68,3 +69,5 @@ MUTATOR_HOOKFUNCTION(walljump, PlayerJump)
                }
        }
 }
+
+#endif
index 4394e174067ab93c12236e3f7b00fa574ffb65c6..7462239f7701d88886e59387b5dec24d3721996b 100644 (file)
@@ -266,6 +266,7 @@ Sound SND_GIB_SPLAT_RANDOM() {
 
 SOUND(HIT, "misc/hit");
 SOUND(TYPEHIT, "misc/typehit");
+SOUND(KILL, "misc/kill");
 
 SOUND(SPAWN, "misc/spawn");
 
index f14c9e7170abb6d0beceb12403a6c4e762174d2b..44efee885ee2912487a68d1708e8cc3ddc623d88 100644 (file)
@@ -118,6 +118,7 @@ REGISTER_STAT(CAPTURE_PROGRESS, float)
 REGISTER_STAT(ENTRAP_ORB, float)
 REGISTER_STAT(ENTRAP_ORB_ALPHA, float)
 REGISTER_STAT(ITEMSTIME, int, autocvar_sv_itemstime)
+REGISTER_STAT(KILL_TIME, float)
 
 #ifdef SVQC
 bool autocvar_g_ctf_leaderboard;
@@ -214,22 +215,26 @@ float autocvar_sv_dodging_ramp_time;
 float autocvar_sv_dodging_up_speed;
 bool autocvar_sv_dodging_wall_dodging;
 bool autocvar_sv_dodging_air_dodging;
+float autocvar_sv_dodging_maxspeed = 450;
 #endif
 
+#if 0
 REGISTER_STAT(DODGING, int, g_dodging)
 REGISTER_STAT(DODGING_DELAY, float, autocvar_sv_dodging_delay)
 REGISTER_STAT(DODGING_DISTANCE_THRESHOLD, float, autocvar_sv_dodging_wall_distance_threshold)
-REGISTER_STAT(DODGING_FROZEN, int, autocvar_sv_dodging_frozen)
 REGISTER_STAT(DODGING_FROZEN_NO_DOUBLETAP, int, autocvar_sv_dodging_frozen_doubletap)
 REGISTER_STAT(DODGING_HEIGHT_THRESHOLD, float, autocvar_sv_dodging_height_threshold)
 REGISTER_STAT(DODGING_HORIZ_SPEED, float, autocvar_sv_dodging_horiz_speed)
 REGISTER_STAT(DODGING_HORIZ_SPEED_FROZEN, float, autocvar_sv_dodging_horiz_speed_frozen)
 REGISTER_STAT(DODGING_RAMP_TIME, float, autocvar_sv_dodging_ramp_time)
-/** cvar loopback */
-REGISTER_STAT(DODGING_TIMEOUT, float)
 REGISTER_STAT(DODGING_UP_SPEED, float, autocvar_sv_dodging_up_speed)
 REGISTER_STAT(DODGING_WALL, bool, autocvar_sv_dodging_wall_dodging)
 REGISTER_STAT(DODGING_AIR, bool, autocvar_sv_dodging_air_dodging)
+REGISTER_STAT(DODGING_MAXSPEED, float, autocvar_sv_dodging_maxspeed)
+#endif
+/** cvar loopback */
+REGISTER_STAT(DODGING_FROZEN, int, autocvar_sv_dodging_frozen)
+REGISTER_STAT(DODGING_TIMEOUT, float)
 
 REGISTER_STAT(JETPACK_ACCEL_SIDE, float, autocvar_g_jetpack_acceleration_side)
 REGISTER_STAT(JETPACK_ACCEL_UP, float, autocvar_g_jetpack_acceleration_up)
index b05dd9812e4443e6332e5d81d9364b9f3b6246f9..78fdba5117148f9196ddbec467809503c8f23bfe 100644 (file)
@@ -777,6 +777,9 @@ METHOD(Raptor, vr_crosshair, void(Raptor thisveh, entity player))
             dropmark = spawn();
             dropmark.owner = player;
             dropmark.gravity = 1;
+            dropmark.dphitcontentsmask = DPCONTENTS_SOLID;
+            dropmark.solid = SOLID_CORPSE;
+                       set_movetype(dropmark, MOVETYPE_BOUNCE);
         }
 
         float reload2 = STAT(VEHICLESTAT_RELOAD2) * 0.01;
index d68dc7d968ee14850297dc46b5ef744c76761a73..4854f092a0aba4d21b65675082913140dfb38d39 100644 (file)
@@ -1,5 +1,3 @@
 // generated file; do not modify
-#if XONOTIC
-       #include <lib/matrix/command.qc>
-#endif
+#include <lib/matrix/command.qc>
 #include <lib/matrix/matrix.qc>
index c351afe8f7c91f41123a4d68effd731f7f79659a..965812297204137ccb73c865636c0784ca5002f3 100644 (file)
@@ -1,5 +1,3 @@
 // generated file; do not modify
-#if XONOTIC
-       #include <lib/matrix/command.qh>
-#endif
+#include <lib/matrix/command.qh>
 #include <lib/matrix/matrix.qh>
index 0f5c5a4af225bf2dd34cf7c9f31b7975d9076159..6f5ba8f57913e8ae5ba336c7f6a554001684890f 100644 (file)
@@ -1,7 +1,6 @@
 #include "dialog_settings_effects.qh"
 
 #include "slider_picmip.qh"
-#include "slider_particles.qh"
 #include "slider_sbfadetime.qh"
 #include "weaponslist.qh"
 #include "keybinder.qh"
@@ -246,13 +245,14 @@ void XonoticEffectsSettingsTab_fill(entity me)
                me.TDempty(me, 0.2);
                me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Quality:")));
                        setDependent(e, "cl_particles", 1, 1);
-               me.TD(me, 1, 2, e = makeXonoticParticlesSlider());
+               me.TD(me, 1, 2, e = makeXonoticSlider_T(0, 3.0, 0.25, "cl_particles_quality",
+                       _("Multiplier for amount of particles. Less means less particles, which in turn gives for better performance (default: 1.0)")));
                        setDependent(e, "cl_particles", 1, 1);
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Distance:")));
                        setDependent(e, "cl_particles", 1, 1);
-               me.TD(me, 1, 2, e = makeXonoticSlider_T(200, 500, 20, "r_drawparticles_drawdistance",
+               me.TD(me, 1, 2, e = makeXonoticSlider_T(200, 3000, 200, "r_drawparticles_drawdistance",
                        _("Particles further away than this will not be drawn (default: 1000)")));
                        setDependent(e, "cl_particles", 1, 1);
 
index e5982715e468d9423f6621aa781b5f73199e058c..3a89b00a7b21a5cf102a93d951c2e685e8b4e120 100644 (file)
@@ -11,13 +11,13 @@ void XonoticParticlesSlider_configureXonoticParticlesSlider(entity me)
 {
        me.configureXonoticTextSlider(me, "cl_particles_quality",
                _("Multiplier for amount of particles. Less means less particles, which in turn gives for better performance (default: 1)"));
-       if(cvar("developer")) { me.addValue(me, ZCTX(_("PART^OMG")),      "0.4 250 0"); }
-       me.addValue(me,                         ZCTX(_("PART^Low")),      "0.4 500 0");
-       me.addValue(me,                         ZCTX(_("PART^Medium")),   "0.8 750 0");
+       if(cvar("developer")) { me.addValue(me, ZCTX(_("PART^OMG")),      "0.25 250 0"); }
+       me.addValue(me,                         ZCTX(_("PART^Low")),      "0.5 500 0");
+       me.addValue(me,                         ZCTX(_("PART^Medium")),   "0.75 750 0");
        me.addValue(me,                         ZCTX(_("PART^Normal")),   "1.0 1000 1");
-       me.addValue(me,                         ZCTX(_("PART^High")),     "1.0 1500 1");
-       me.addValue(me,                         ZCTX(_("PART^Ultra")),    "1.0 2000 2");
-       if(cvar("developer")) { me.addValue(me, ZCTX(_("PART^Ultimate")), "1.0 3000 2"); }
+       me.addValue(me,                         ZCTX(_("PART^High")),     "1.5 1500 1");
+       me.addValue(me,                         ZCTX(_("PART^Ultra")),    "2.0 2000 2");
+       if(cvar("developer")) { me.addValue(me, ZCTX(_("PART^Ultimate")), "3.0 3000 2"); }
        me.configureXonoticTextSliderValues(me);
 }
 void XonoticParticlesSlider_loadCvars(entity me)
index 4c3c3f02cd74cfcf1c1f7ce609cfab534e9e2efc..038aea0f647ca6764c17f796e8994e169d4a8fc2 100644 (file)
@@ -608,7 +608,7 @@ void havocbot_movetogoal(entity this)
 
                        return;
                }
-               else if(this.health>WEP_CVAR(devastator, damage)*0.5)
+               else if(this.health > WEP_CVAR(devastator, damage) * 0.5 * ((this.strength_finished < time) ? autocvar_g_balance_powerup_strength_selfdamage : 1))
                {
                        if(this.velocity.z < 0)
                        {
@@ -736,6 +736,7 @@ void havocbot_movetogoal(entity this)
                evadeobstacle = '0 0 0';
                evadelava = '0 0 0';
 
+               this.aistatus &= ~AI_STATUS_DANGER_AHEAD;
                makevectors(this.v_angle.y * '0 1 0');
                if (this.waterlevel)
                {
@@ -812,7 +813,6 @@ void havocbot_movetogoal(entity this)
 
                        // Check for water/slime/lava and dangerous edges
                        // (only when the bot is on the ground or jumping intentionally)
-                       this.aistatus &= ~AI_STATUS_DANGER_AHEAD;
 
                        vector dst_ahead = this.origin + this.view_ofs + offset;
                        vector dst_down = dst_ahead - '0 0 3000';
index e026e1c76deab3929c21653c4b1a70293a84ecfc..488da59d47ace5d5ac92190b1d25e29c928912d8 100644 (file)
@@ -48,7 +48,6 @@ bool tracewalk(entity e, vector start, vector m1, vector m2, vector end, float m
        float dist;
        float totaldist;
        float stepdist;
-       float yaw;
        float ignorehazards;
        float swimming;
 
@@ -92,7 +91,6 @@ bool tracewalk(entity e, vector start, vector m1, vector m2, vector end, float m
        }
 
        // Movement loop
-       yaw = vectoyaw(move);
        move = end - org;
        for (;;)
        {
@@ -182,8 +180,14 @@ bool tracewalk(entity e, vector start, vector m1, vector m2, vector end, float m
                                                if(autocvar_bot_debug_tracewalk)
                                                        debugnodestatus(trace_endpos, DEBUG_NODE_WARNING);
 
-                                               // check for doors
+                                               FOREACH_ENTITY_CLASS("func_ladder", true,
+                                                       { it.solid = SOLID_BSP; });
+
                                                traceline( org, move, movemode, e);
+
+                                               FOREACH_ENTITY_CLASS("func_ladder", true,
+                                                       { it.solid = SOLID_TRIGGER; });
+
                                                if ( trace_ent.classname == "door_rotating" || trace_ent.classname == "door")
                                                {
                                                        vector nextmove;
@@ -195,6 +199,23 @@ bool tracewalk(entity e, vector start, vector m1, vector m2, vector end, float m
                                                                move = nextmove;
                                                        }
                                                }
+                                               else if (trace_ent.classname == "func_ladder")
+                                               {
+                                                       vector ladder_bottom = trace_endpos - dir * m2.x;
+                                                       vector ladder_top = ladder_bottom;
+                                                       ladder_top.z = trace_ent.absmax.z + (-m1.z + 1);
+                                                       tracebox(ladder_bottom, m1, m2, ladder_top, movemode, e);
+                                                       if (trace_fraction < 1 || trace_startsolid)
+                                                       {
+                                                               if(autocvar_bot_debug_tracewalk)
+                                                                       debugnodestatus(trace_endpos, DEBUG_NODE_FAIL);
+
+                                                               return false; // failed
+                                                       }
+                                                       org = ladder_top + dir * m2.x;
+                                                       move = org + dir * stepdist;
+                                                       continue;
+                                               }
                                                else
                                                {
                                                        if(autocvar_bot_debug_tracewalk)
index e88967e8baf4a436ce1c978dbf0a5eb82765d58f..d93b76c22ade2f38c95a2c3b4d09586580e72b22 100644 (file)
@@ -354,6 +354,7 @@ void waypoint_schedulerelinkall()
        {
                waypoint_schedulerelink(it);
        });
+       waypoint_load_links_hardwired();
 }
 
 // Load waypoint links from file
@@ -774,6 +775,17 @@ entity waypoint_spawnpersonal(entity this, vector position)
        return w;
 }
 
+void waypoint_showlink(entity wp1, entity wp2, int display_type)
+{
+       if (!(wp1 && wp2))
+               return;
+
+       if (wp1.wphardwired && wp2.wphardwired)
+               te_beam(NULL, wp1.origin, wp2.origin);
+       else if (display_type == 1)
+               te_lightning2(NULL, wp1.origin, wp2.origin);
+}
+
 void botframe_showwaypointlinks()
 {
        if (time < botframe_waypointeditorlightningtime)
@@ -781,48 +793,53 @@ void botframe_showwaypointlinks()
        botframe_waypointeditorlightningtime = time + 0.5;
        FOREACH_CLIENT(IS_PLAYER(it) && !it.isbot,
        {
-               if(IS_ONGROUND(it) || it.waterlevel > WATERLEVEL_NONE)
+               int display_type = 0;
+               entity head = navigation_findnearestwaypoint(it, false);
+               if (IS_ONGROUND(it) || it.waterlevel > WATERLEVEL_NONE)
+                       display_type = 1; // default
+               else if(head && (head.wphardwired))
+                       display_type = 2; // only hardwired
+
+               if (display_type)
                {
                        //navigation_testtracewalk = true;
-                       entity head = navigation_findnearestwaypoint(it, false);
-               //      print("currently selected WP is ", etos(head), "\n");
+                       //print("currently selected WP is ", etos(head), "\n");
                        //navigation_testtracewalk = false;
                        if (head)
                        {
-                               entity w;
-                               w = head     ;if (w) te_lightning2(NULL, w.origin, it.origin);
-                               w = head.wp00;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp01;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp02;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp03;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp04;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp05;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp06;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp07;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp08;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp09;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp10;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp11;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp12;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp13;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp14;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp15;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp16;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp17;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp18;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp19;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp20;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp21;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp22;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp23;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp24;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp25;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp26;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp27;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp28;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp29;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp30;if (w) te_lightning2(NULL, w.origin, head.origin);
-                               w = head.wp31;if (w) te_lightning2(NULL, w.origin, head.origin);
+                               te_lightning2(NULL, head.origin, it.origin);
+                               waypoint_showlink(head.wp00, head, display_type);
+                               waypoint_showlink(head.wp01, head, display_type);
+                               waypoint_showlink(head.wp02, head, display_type);
+                               waypoint_showlink(head.wp03, head, display_type);
+                               waypoint_showlink(head.wp04, head, display_type);
+                               waypoint_showlink(head.wp05, head, display_type);
+                               waypoint_showlink(head.wp06, head, display_type);
+                               waypoint_showlink(head.wp07, head, display_type);
+                               waypoint_showlink(head.wp08, head, display_type);
+                               waypoint_showlink(head.wp09, head, display_type);
+                               waypoint_showlink(head.wp10, head, display_type);
+                               waypoint_showlink(head.wp11, head, display_type);
+                               waypoint_showlink(head.wp12, head, display_type);
+                               waypoint_showlink(head.wp13, head, display_type);
+                               waypoint_showlink(head.wp14, head, display_type);
+                               waypoint_showlink(head.wp15, head, display_type);
+                               waypoint_showlink(head.wp16, head, display_type);
+                               waypoint_showlink(head.wp17, head, display_type);
+                               waypoint_showlink(head.wp18, head, display_type);
+                               waypoint_showlink(head.wp19, head, display_type);
+                               waypoint_showlink(head.wp20, head, display_type);
+                               waypoint_showlink(head.wp21, head, display_type);
+                               waypoint_showlink(head.wp22, head, display_type);
+                               waypoint_showlink(head.wp23, head, display_type);
+                               waypoint_showlink(head.wp24, head, display_type);
+                               waypoint_showlink(head.wp25, head, display_type);
+                               waypoint_showlink(head.wp26, head, display_type);
+                               waypoint_showlink(head.wp27, head, display_type);
+                               waypoint_showlink(head.wp28, head, display_type);
+                               waypoint_showlink(head.wp29, head, display_type);
+                               waypoint_showlink(head.wp30, head, display_type);
+                               waypoint_showlink(head.wp31, head, display_type);
                        }
                }
        });
index 02bd04d5d6082d5f1824a1cdabd71a1324e85455..6ed0e4052350e7c96798b91d3fc9590b89872508 100644 (file)
@@ -7,6 +7,7 @@ spawnfunc(weapon_electro);
 spawnfunc(weapon_hagar);
 spawnfunc(weapon_machinegun);
 spawnfunc(weapon_vortex);
+spawnfunc(weapon_minelayer);
 
 spawnfunc(target_items);
 
@@ -15,7 +16,7 @@ spawnfunc(item_cells);
 spawnfunc(item_rockets);
 spawnfunc(item_shells);
 
-spawnfunc(item_jetpack);
+spawnfunc(item_strength);
 
 spawnfunc(item_armor_big);
 spawnfunc(item_armor_mega);
@@ -39,6 +40,10 @@ spawnfunc(ammo_bullets)        { spawnfunc_item_bullets(this);        }
 // GL -> Mortar
 spawnfunc(ammo_grenades)       { spawnfunc_item_rockets(this);        }
 
+// Mines -> Rockets
+spawnfunc(weapon_prox_launcher) { spawnfunc_weapon_minelayer(this);   }
+spawnfunc(ammo_mines)           { spawnfunc_item_rockets(this);       }
+
 // LG -> Lightning
 spawnfunc(weapon_lightning)    { spawnfunc_weapon_electro(this);      }
 spawnfunc(ammo_lightning)      { spawnfunc_item_cells(this);          }
@@ -48,7 +53,7 @@ spawnfunc(weapon_plasmagun)    { spawnfunc_weapon_hagar(this);        }
 spawnfunc(ammo_cells)          { spawnfunc_item_rockets(this);        }
 
 // Rail -> Vortex
-spawnfunc(weapon_railgun)      { spawnfunc_weapon_vortex(this);          }
+spawnfunc(weapon_railgun)      { spawnfunc_weapon_vortex(this);       }
 spawnfunc(ammo_slugs)          { spawnfunc_item_cells(this);          }
 
 // BFG -> Crylink
@@ -59,13 +64,16 @@ spawnfunc(ammo_bfg)            { spawnfunc_item_cells(this);          }
 spawnfunc(ammo_rockets)        { spawnfunc_item_rockets(this);        }
 
 // Armor
-spawnfunc(item_armor_body)     { spawnfunc_item_armor_mega(this);    }
+spawnfunc(item_armor_body)     { spawnfunc_item_armor_mega(this);     }
 spawnfunc(item_armor_combat)   { spawnfunc_item_armor_big(this);      }
 spawnfunc(item_armor_shard)    { spawnfunc_item_armor_small(this);    }
 spawnfunc(item_enviro)         { spawnfunc_item_invincible(this);     }
 
 // medkit -> armor (we have no holdables)
-spawnfunc(holdable_medkit)        { spawnfunc_item_armor_mega(this);    }
+spawnfunc(holdable_medkit)        { spawnfunc_item_armor_mega(this);     }
+
+// doubler -> strength
+spawnfunc(item_doubler)        { spawnfunc_item_strength(this); }
 
 .float wait;
 .float delay;
@@ -152,7 +160,7 @@ spawnfunc(target_give)
        InitializeEntity(this, target_give_init, INITPRIO_FINDTARGET);
 }
 
-//spawnfunc(item_flight)       /* handled by jetpack */
+//spawnfunc(item_flight)       /* handled by buffs mutator */
 //spawnfunc(item_haste)        /* handled by buffs mutator */
 //spawnfunc(item_health)       /* handled in t_quake.qc */
 //spawnfunc(item_health_large) /* handled in t_items.qc */
@@ -163,11 +171,6 @@ spawnfunc(target_give)
 
 // CTF spawnfuncs handled in mutators/gamemode_ctf.qc now
 
-spawnfunc(item_flight)
-{
-       spawnfunc_item_jetpack(this);
-}
-
 .float notteam;
 .float notsingle;
 .float notfree;
index 6d53e18efb12b982b615ed9d8c57fc3d22e39c65..f6b2f2621de31c1298fe5ab07604052bca63ccd7 100644 (file)
@@ -29,12 +29,14 @@ spawnfunc(item_haste);
 spawnfunc(item_health_medium);
 spawnfunc(item_health_mega);
 spawnfunc(item_invis);
-spawnfunc(item_medic);
 
 //***********************
 //WORD OF PADMAN ENTITIES - So people can play wop maps with the xonotic weapons
 //***********************
 
+//spawnfunc(item_revival)     /* handled by buffs mutator */
+//spawnfunc(item_jumper)      /* handled by buffs mutator */
+
 spawnfunc(weapon_punchy)       { spawnfunc_weapon_arc(this);                   }
 spawnfunc(weapon_nipper)       { spawnfunc_weapon_machinegun(this);    }
 spawnfunc(weapon_pumper)       { spawnfunc_weapon_shotgun(this);               }
@@ -56,7 +58,7 @@ spawnfunc(ammo_imperius)      { spawnfunc_item_cells(this);                   }
 spawnfunc(item_padpower)       { spawnfunc_item_quad(this);                    }
 spawnfunc(item_climber)                { spawnfunc_item_invincible(this);              }
 spawnfunc(item_speedy)         { spawnfunc_item_haste(this);                   }
-spawnfunc(item_jump)           { spawnfunc_item_jetpack(this);                 }
 spawnfunc(item_visionless)     { spawnfunc_item_invis(this);                   }
-spawnfunc(item_revival)                { spawnfunc_item_medic(this);                   }
 spawnfunc(item_armor_padshield)        { spawnfunc_item_armor_mega(this);      }
+
+spawnfunc(holdable_floater)            { spawnfunc_item_jetpack(this);         }
index 3f1867758d0adf86bcdb2cf9dc7af04c3207df01..ccb361ea6908d573a09c173dac06098d0341cefa 100644 (file)
@@ -94,7 +94,7 @@ const float MAX_DAMAGEEXTRARADIUS = 16;
 .float         dmgtime;
 
 .float         killcount;
-.float damage_dealt, typehitsound;
+.float damage_dealt, typehitsound, killsound;
 
 .float watersound_finished;
 .float iscreature;
@@ -317,6 +317,7 @@ string matchid;
 
 .float hit_time = _STAT(HIT_TIME);
 .float typehit_time = _STAT(TYPEHIT_TIME);
+.float kill_time = _STAT(KILL_TIME);
 
 .float damage_dealt_total = _STAT(DAMAGE_DEALT_TOTAL);
 
index 11c339b4d647a07a5df4884dba8e16761bb4dcee..7f5ffaf79bd64688327c5e24b1e5cd79dc539642 100644 (file)
@@ -375,6 +375,8 @@ void Obituary(entity attacker, entity inflictor, entity targ, int deathtype)
                        attacker.taunt_soundtime = time + 1;
                        attacker.killcount = attacker.killcount + 1;
 
+                       attacker.killsound += 1;
+
                        #define SPREE_ITEM(counta,countb,center,normal,gentle) \
                                case counta: \
                                { \
@@ -631,16 +633,6 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, int d
     damage_attacker = attacker;
        attacker_save = attacker;
 
-       if(IS_PLAYER(targ))
-       {
-               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
-           {
-               .entity weaponentity = weaponentities[slot];
-               if(targ.(weaponentity).hook && targ.(weaponentity).hook.aiment == attacker)
-                       RemoveHook(targ.(weaponentity).hook);
-           }
-       }
-
        // special rule: gravity bomb does not hit team mates (other than for disconnecting the hook)
        if(DEATH_ISWEAPON(deathtype, WEP_HOOK) || DEATH_ISWEAPON(deathtype, WEP_TUBA))
        {
@@ -743,6 +735,16 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, int d
                mirrordamage = M_ARGV(5, float);
                force = M_ARGV(6, vector);
 
+               if(IS_PLAYER(targ) && damage > 0 && attacker)
+               {
+                       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+                   {
+                       .entity weaponentity = weaponentities[slot];
+                       if(targ.(weaponentity).hook && targ.(weaponentity).hook.aiment == attacker)
+                               RemoveHook(targ.(weaponentity).hook);
+                   }
+               }
+
                if(STAT(FROZEN, targ))
                if(deathtype != DEATH_HURTTRIGGER.m_id && deathtype != DEATH_TEAMCHANGE.m_id && deathtype != DEATH_AUTOTEAMCHANGE.m_id)
                {
index 0b3783488cb7dbdc50a7d295e0a7cf2eb75fe8a9..71c731a308e830ac59d3d3b323b177edc4444e8e 100644 (file)
@@ -253,17 +253,22 @@ void cvar_changes_init()
 
                // mapinfo
                BADCVAR("fraglimit");
+               BADCVAR("g_arena");
                BADCVAR("g_assault");
                BADCVAR("g_ca");
                BADCVAR("g_ca_teams");
+               BADCVAR("g_conquest");
                BADCVAR("g_ctf");
                BADCVAR("g_cts");
+               BADCVAR("g_dotc");
                BADCVAR("g_dm");
                BADCVAR("g_domination");
                BADCVAR("g_domination_default_teams");
                BADCVAR("g_freezetag");
                BADCVAR("g_freezetag_teams");
                BADCVAR("g_invasion_teams");
+               BADCVAR("g_jailbreak");
+               BADCVAR("g_jailbreak_teams");
                BADCVAR("g_keepaway");
                BADCVAR("g_keyhunt");
                BADCVAR("g_keyhunt_teams");
@@ -274,8 +279,10 @@ void cvar_changes_init()
                BADCVAR("g_race_laps_limit");
                BADCVAR("g_race_qualifying_timelimit");
                BADCVAR("g_race_qualifying_timelimit_override");
+               BADCVAR("g_snafu");
                BADCVAR("g_tdm");
                BADCVAR("g_tdm_teams");
+               BADCVAR("g_vip");
                BADCVAR("leadlimit");
                BADCVAR("nextmap");
                BADCVAR("teamplay");
@@ -310,6 +317,8 @@ void cvar_changes_init()
                BADCVAR("gameversion");
                BADCVAR("g_allow_oldvortexbeam");
                BADCVAR("g_balance_kill_delay");
+               BADCVAR("g_buffs_pickup_anyway");
+               BADCVAR("g_buffs_randomize");
                BADCVAR("g_campcheck_distance");
                BADCVAR("g_ca_point_leadlimit");
                BADCVAR("g_ca_point_limit");
@@ -322,11 +331,14 @@ void cvar_changes_init()
                BADCVAR("g_freezetag_point_limit");
                BADCVAR("g_hats");
                BADCVAR("g_invasion_point_limit");
+               BADCVAR("g_jump_grunt");
                BADCVAR("g_keyhunt_point_leadlimit");
+               BADCVAR("g_maplist_selectrandom");
                BADCVAR("g_nexball_goalleadlimit");
                BADCVAR("g_new_toys_use_pickupsound");
                BADCVAR("g_physics_predictall");
                BADCVAR("g_piggyback");
+               BADCVAR("g_playerclip_collisions");
                BADCVAR("g_tdm_point_leadlimit");
                BADCVAR("g_tdm_point_limit");
                BADCVAR("leadlimit_and_fraglimit");
@@ -339,6 +351,7 @@ void cvar_changes_init()
                BADCVAR("sv_precacheplayermodels");
                BADCVAR("sv_stepheight");
                BADCVAR("sv_timeout");
+               BADCVAR("sv_weapons_modeloverride");
                BADPREFIX("crypto_");
                BADPREFIX("gameversion_");
                BADPREFIX("g_chat_");
@@ -2073,6 +2086,8 @@ void EndFrame()
                entity e = IS_SPEC(it) ? it.enemy : it;
                if (e.typehitsound) {
                        it.typehit_time = time;
+               } else if (e.killsound) {
+                       it.kill_time = time;
                } else if (e.damage_dealt) {
                        it.hit_time = time;
                        it.damage_dealt_total += ceil(e.damage_dealt);
@@ -2087,6 +2102,7 @@ void EndFrame()
        FOREACH_CLIENT(true, {
                it.typehitsound = false;
                it.damage_dealt = 0;
+               it.killsound = false;
                antilag_record(it, CS(it), altime);
        });
        IL_EACH(g_monsters, true,
index 3701c801522024cf67311eec42c98ec0aef0508b..2bd9f9668bc443bd021a7499656be2040c55e606 100644 (file)
@@ -15,6 +15,9 @@
 #include "../lib/warpzone/common.qh"
 #include "../common/mutators/mutator/waypoints/waypointsprites.qh"
 
+IntrusiveList g_race_targets;
+STATIC_INIT(g_race_targets) { g_race_targets = IL_NEW(); }
+
 void race_InitSpectator()
 {
        if(g_race_qualifying)
@@ -725,9 +728,13 @@ void checkpoint_use(entity this, entity actor, entity trigger)
 
 bool race_waypointsprite_visible_for_player(entity this, entity player, entity view)
 {
-       if(view.race_checkpoint == -1 || this.owner.race_checkpoint == -2)
+       entity own = this.owner;
+       if(this.realowner)
+               own = this.realowner; // target support
+
+       if(view.race_checkpoint == -1 || own.race_checkpoint == -2)
                return true;
-       else if(view.race_checkpoint == this.owner.race_checkpoint)
+       else if(view.race_checkpoint == own.race_checkpoint)
                return true;
        else
                return false;
@@ -811,19 +818,37 @@ void trigger_race_checkpoint_verify(entity this)
 
        g_race_qualifying = qual;
 
+       IL_EACH(g_race_targets, true,
+       {
+               entity cpt = it;
+               FOREACH_ENTITY_STRING(target, cpt.targetname,
+               {
+                       vector org = (it.absmin + it.absmax) * 0.5;
+                       if(cpt.race_checkpoint == 0)
+                               WaypointSprite_SpawnFixed(WP_RaceStart, org, it, sprite, RADARICON_NONE);
+                       else
+                               WaypointSprite_SpawnFixed(WP_RaceCheckpoint, org, it, sprite, RADARICON_NONE);
+
+                       it.sprite.realowner = cpt;
+                       it.sprite.waypointsprite_visible_for_player = race_waypointsprite_visible_for_player;
+               });
+       });
+
        if (race_timed_checkpoint) {
                if (defrag_ents) {
-                       for (entity cp = NULL; (cp = find(cp, classname, "target_startTimer"));) {
-                               WaypointSprite_UpdateSprites(cp.sprite, WP_RaceStart, WP_Null, WP_Null);
-            }
-                       for (entity cp = NULL; (cp = find(cp, classname, "target_stopTimer"));) {
-                               WaypointSprite_UpdateSprites(cp.sprite, WP_RaceFinish, WP_Null, WP_Null);
-            }
-                       for (entity cp = NULL; (cp = find(cp, classname, "target_checkpoint"));) {
-                               if (cp.race_checkpoint == -2) { // something's wrong with the defrag cp file or it has not been written yet, set defragcpexists to -1 so that it will be rewritten when someone finishes
-                                       defragcpexists = -1;
-                }
-                       }
+                       IL_EACH(g_race_targets, true,
+                       {
+                               entity cpt = it;
+                               if(it.classname == "target_startTimer" || it.classname == "target_stopTimer") {
+                                       FOREACH_ENTITY_STRING(target, cpt.targetname, {
+                                               WaypointSprite_UpdateSprites(it.sprite, ((cpt.classname == "target_startTimer") ? WP_RaceStart : WP_RaceFinish), WP_Null, WP_Null);
+                                       });
+                               }
+                               if(it.classname == "target_checkpoint") {
+                                       if(it.race_checkpoint == -2)
+                                               defragcpexists = -1; // something's wrong with the defrag cp file or it has not been written yet, set defragcpexists to -1 so that it will be rewritten when someone finishes
+                               }
+                       });
                        if (defragcpexists != -1) {
                                float largest_cp_id = 0;
                                for (entity cp = NULL; (cp = find(cp, classname, "target_checkpoint"));) {
@@ -1002,12 +1027,7 @@ spawnfunc(target_checkpoint) // defrag entity
 
        race_timed_checkpoint = 1;
 
-       if(this.race_checkpoint == 0)
-               WaypointSprite_SpawnFixed(WP_RaceStart, org, this, sprite, RADARICON_NONE);
-       else
-               WaypointSprite_SpawnFixed(WP_RaceCheckpoint, org, this, sprite, RADARICON_NONE);
-
-       this.sprite.waypointsprite_visible_for_player = race_waypointsprite_visible_for_player;
+       IL_PUSH(g_race_targets, this);
 
        InitializeEntity(this, trigger_race_checkpoint_verify, INITPRIO_FINDTARGET);
 }
diff --git a/sound/misc/kill.ogg b/sound/misc/kill.ogg
new file mode 100644 (file)
index 0000000..c1d3b8c
Binary files /dev/null and b/sound/misc/kill.ogg differ