]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
(Untested) Merge branch 'master' into Mario/overkill
authorMario <zacjardine@y7mail.com>
Sat, 13 Dec 2014 02:59:44 +0000 (13:59 +1100)
committerMario <zacjardine@y7mail.com>
Sat, 13 Dec 2014 02:59:44 +0000 (13:59 +1100)
Conflicts:
balance25.cfg
balanceFruitieX.cfg
balanceXDF.cfg
balanceXPM.cfg
balanceXonotic.cfg
defaultXonotic.cfg
qcsrc/client/View.qc
qcsrc/client/autocvars.qh
qcsrc/client/waypointsprites.qc
qcsrc/client/weapons/projectile.qc
qcsrc/common/constants.qh
qcsrc/common/notifications.qh
qcsrc/common/weapons/all.qh
qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c
qcsrc/server/cl_weapons.qc
qcsrc/server/miscfunctions.qc
qcsrc/server/mutators/mutator_instagib.qc
qcsrc/server/mutators/mutator_nades.qc
qcsrc/server/mutators/mutator_nades.qh
qcsrc/server/progs.src
qcsrc/server/weapons/weaponsystem.qc

28 files changed:
1  2 
bal-wep-nexuiz25.cfg
bal-wep-overkill.cfg
bal-wep-samual.cfg
bal-wep-xdf.cfg
bal-wep-xonotic.cfg
bal-wep-xpm.cfg
balance-overkill.cfg
mutators.cfg
qcsrc/client/View.qc
qcsrc/client/autocvars.qh
qcsrc/client/weapons/projectile.qc
qcsrc/common/constants.qh
qcsrc/common/notifications.qh
qcsrc/common/stats.qh
qcsrc/common/weapons/all.qh
qcsrc/common/weapons/w_hmg.qc
qcsrc/common/weapons/w_rpc.qc
qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c
qcsrc/server/autocvars.qh
qcsrc/server/defs.qh
qcsrc/server/mutators/mutator_instagib.qc
qcsrc/server/mutators/mutator_overkill.qc
qcsrc/server/mutators/mutator_overkill.qh
qcsrc/server/mutators/mutators.qc
qcsrc/server/mutators/mutators.qh
qcsrc/server/mutators/mutators_include.qc
qcsrc/server/mutators/mutators_include.qh
qcsrc/server/weapons/weaponsystem.qc

index 0000000000000000000000000000000000000000,b2427eccd0b2a49da811f920e8cbc5f94d5dfd66..0e9db816885d0b5e6f4044e74f94937d5ccc6b9f
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,763 +1,804 @@@
+ // {{{ #1: Blaster
+ set g_balance_blaster_primary_animtime 0.3
+ set g_balance_blaster_primary_damage 35
+ set g_balance_blaster_primary_delay 0
+ set g_balance_blaster_primary_edgedamage 10
+ set g_balance_blaster_primary_force 400
+ set g_balance_blaster_primary_force_zscale 1
+ set g_balance_blaster_primary_lifetime 30
+ set g_balance_blaster_primary_radius 70
+ set g_balance_blaster_primary_refire 0.7
+ set g_balance_blaster_primary_shotangle 0
+ set g_balance_blaster_primary_speed 9000
+ 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_damage 35
+ set g_balance_blaster_secondary_delay 0
+ set g_balance_blaster_secondary_edgedamage 10
+ set g_balance_blaster_secondary_force 400
+ set g_balance_blaster_secondary_force_zscale 1
+ set g_balance_blaster_secondary_lifetime 30
+ set g_balance_blaster_secondary_radius 70
+ set g_balance_blaster_secondary_refire 0.7
+ set g_balance_blaster_secondary_shotangle 0
+ set g_balance_blaster_secondary_speed 9000
+ set g_balance_blaster_secondary_spread 0
+ set g_balance_blaster_switchdelay_drop 0.15
+ set g_balance_blaster_switchdelay_raise 0.15
+ set g_balance_blaster_weaponreplace ""
+ set g_balance_blaster_weaponstart 1
+ set g_balance_blaster_weaponstartoverride -1
+ 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 6
+ set g_balance_shotgun_primary_damage 9
+ set g_balance_shotgun_primary_force 60
+ set g_balance_shotgun_primary_refire 0.5
+ set g_balance_shotgun_primary_solidpenetration 3.8
+ set g_balance_shotgun_primary_spread 0.07
+ set g_balance_shotgun_reload_ammo 0
+ set g_balance_shotgun_reload_time 2
+ set g_balance_shotgun_secondary 2
+ set g_balance_shotgun_secondary_animtime 1
+ set g_balance_shotgun_secondary_damage 80
+ set g_balance_shotgun_secondary_force 200
+ set g_balance_shotgun_secondary_melee_delay 0.25
+ set g_balance_shotgun_secondary_melee_multihit 1
+ set g_balance_shotgun_secondary_melee_no_doubleslap 1
+ set g_balance_shotgun_secondary_melee_nonplayerdamage 40
+ set g_balance_shotgun_secondary_melee_range 120
+ set g_balance_shotgun_secondary_melee_swing_side 120
+ 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.15
+ set g_balance_shotgun_switchdelay_raise 0.15
+ set g_balance_shotgun_weaponreplace ""
+ set g_balance_shotgun_weaponstart 1
+ set g_balance_shotgun_weaponstartoverride -1
+ set g_balance_shotgun_weaponthrowable 1
+ // }}}
+ // {{{ #3: Machine Gun
+ set g_balance_machinegun_burst 0
+ set g_balance_machinegun_burst_ammo 3
+ set g_balance_machinegun_burst_animtime 0.75
+ set g_balance_machinegun_burst_refire 0.05
+ set g_balance_machinegun_burst_refire2 0.75
+ 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 30
+ set g_balance_machinegun_first_force 50
+ set g_balance_machinegun_first_refire 0.2
+ set g_balance_machinegun_first_spread 0.015
+ set g_balance_machinegun_mode 0
+ set g_balance_machinegun_reload_ammo 0
+ set g_balance_machinegun_reload_time 2
+ set g_balance_machinegun_solidpenetration 13.1
+ set g_balance_machinegun_spread_add 0.02
+ set g_balance_machinegun_spread_max 0.6
+ set g_balance_machinegun_spread_min 0.02
+ set g_balance_machinegun_sustained_ammo 1
+ set g_balance_machinegun_sustained_damage 15
+ set g_balance_machinegun_sustained_force 27
+ set g_balance_machinegun_sustained_refire 0.1
+ set g_balance_machinegun_sustained_spread 0.05
+ set g_balance_machinegun_switchdelay_drop 0.15
+ set g_balance_machinegun_switchdelay_raise 0.15
+ set g_balance_machinegun_weaponreplace ""
+ set g_balance_machinegun_weaponstart 0
+ set g_balance_machinegun_weaponstartoverride -1
+ set g_balance_machinegun_weaponthrowable 1
+ // }}}
+ // {{{ #4: Mortar
+ 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 70
+ set g_balance_mortar_primary_damageforcescale 4
+ set g_balance_mortar_primary_edgedamage 25
+ set g_balance_mortar_primary_force 400
+ set g_balance_mortar_primary_health 25
+ set g_balance_mortar_primary_lifetime 30
+ set g_balance_mortar_primary_lifetime_stick 1
+ set g_balance_mortar_primary_radius 140
+ set g_balance_mortar_primary_refire 0.8
+ set g_balance_mortar_primary_remote_minbouncecnt 0
+ set g_balance_mortar_primary_speed 2000
+ set g_balance_mortar_primary_speed_up 200
+ set g_balance_mortar_primary_speed_z 0
+ set g_balance_mortar_primary_spread 0
+ set g_balance_mortar_primary_type 0
+ set g_balance_mortar_reload_ammo 0
+ set g_balance_mortar_reload_time 2
+ set g_balance_mortar_secondary_ammo 2
+ set g_balance_mortar_secondary_animtime 0.3
+ set g_balance_mortar_secondary_damage 70
+ set g_balance_mortar_secondary_damageforcescale 4
+ set g_balance_mortar_secondary_edgedamage 38
+ set g_balance_mortar_secondary_force 400
+ set g_balance_mortar_secondary_health 10
+ set g_balance_mortar_secondary_lifetime 2.5
+ set g_balance_mortar_secondary_lifetime_bounce 0
+ set g_balance_mortar_secondary_lifetime_stick 0
+ set g_balance_mortar_secondary_radius 140
+ set g_balance_mortar_secondary_refire 0.7
+ set g_balance_mortar_secondary_remote_detonateprimary 0
+ set g_balance_mortar_secondary_speed 1400
+ set g_balance_mortar_secondary_speed_up 200
+ set g_balance_mortar_secondary_speed_z 0
+ set g_balance_mortar_secondary_spread 0
+ set g_balance_mortar_secondary_type 1
+ set g_balance_mortar_switchdelay_drop 0.15
+ set g_balance_mortar_switchdelay_raise 0.15
+ set g_balance_mortar_weaponreplace ""
+ set g_balance_mortar_weaponstart 0
+ set g_balance_mortar_weaponstartoverride -1
+ set g_balance_mortar_weaponthrowable 1
+ // }}}
+ // {{{ #5: Mine Layer (MUTATOR WEAPON)
+ set g_balance_minelayer_ammo 4
+ set g_balance_minelayer_animtime 0.4
+ set g_balance_minelayer_damage 40
+ set g_balance_minelayer_damageforcescale 0
+ set g_balance_minelayer_detonatedelay -1
+ set g_balance_minelayer_edgedamage 20
+ set g_balance_minelayer_force 250
+ set g_balance_minelayer_health 15
+ set g_balance_minelayer_lifetime 10
+ set g_balance_minelayer_lifetime_countdown 0.5
+ set g_balance_minelayer_limit 3
+ set g_balance_minelayer_protection 0
+ set g_balance_minelayer_proximityradius 150
+ set g_balance_minelayer_radius 175
+ set g_balance_minelayer_refire 1.5
+ set g_balance_minelayer_reload_ammo 0
+ set g_balance_minelayer_reload_time 2
+ set g_balance_minelayer_remote_damage 45
+ set g_balance_minelayer_remote_edgedamage 40
+ set g_balance_minelayer_remote_force 300
+ set g_balance_minelayer_remote_radius 200
+ set g_balance_minelayer_speed 1000
+ set g_balance_minelayer_switchdelay_drop 0.15
+ set g_balance_minelayer_switchdelay_raise 0.15
+ set g_balance_minelayer_time 0.5
+ set g_balance_minelayer_weaponreplace ""
+ set g_balance_minelayer_weaponstart 0
+ set g_balance_minelayer_weaponstartoverride -1
+ set g_balance_minelayer_weaponthrowable 1
+ // }}}
+ // {{{ #6: Electro
+ set g_balance_electro_combo_comboradius 0
+ set g_balance_electro_combo_comboradius_thruwall 0
+ set g_balance_electro_combo_damage 80
+ set g_balance_electro_combo_edgedamage 0
+ set g_balance_electro_combo_force 200
+ set g_balance_electro_combo_radius 250
+ set g_balance_electro_combo_safeammocheck 0
+ set g_balance_electro_combo_speed 2000
+ set g_balance_electro_primary_ammo 2
+ set g_balance_electro_primary_animtime 0.3
+ set g_balance_electro_primary_comboradius 0
+ set g_balance_electro_primary_damage 65
+ set g_balance_electro_primary_edgedamage 0
+ set g_balance_electro_primary_force 200
+ set g_balance_electro_primary_lifetime 30
+ set g_balance_electro_primary_midaircombo_explode 0
+ set g_balance_electro_primary_midaircombo_interval 0
+ set g_balance_electro_primary_midaircombo_radius 0
+ set g_balance_electro_primary_radius 150
+ set g_balance_electro_primary_refire 0.6
+ set g_balance_electro_primary_speed 2000
+ set g_balance_electro_primary_spread 0
+ set g_balance_electro_reload_ammo 0
+ set g_balance_electro_reload_time 2
+ set g_balance_electro_secondary_ammo 2
+ set g_balance_electro_secondary_animtime 0.3
+ set g_balance_electro_secondary_bouncefactor 0.5
+ set g_balance_electro_secondary_bouncestop 0.075
+ set g_balance_electro_secondary_count 1
+ set g_balance_electro_secondary_damage 50
+ set g_balance_electro_secondary_damagedbycontents 0
+ set g_balance_electro_secondary_damageforcescale 4
+ set g_balance_electro_secondary_edgedamage 0
+ set g_balance_electro_secondary_force 200
+ set g_balance_electro_secondary_health 5
+ set g_balance_electro_secondary_lifetime 5
+ set g_balance_electro_secondary_radius 150
+ set g_balance_electro_secondary_refire 0.3
+ set g_balance_electro_secondary_refire2 0
+ 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.04
+ set g_balance_electro_secondary_touchexplode 0
+ set g_balance_electro_switchdelay_drop 0.15
+ set g_balance_electro_switchdelay_raise 0.15
+ set g_balance_electro_weaponreplace ""
+ set g_balance_electro_weaponstart 0
+ set g_balance_electro_weaponstartoverride -1
+ set g_balance_electro_weaponthrowable 1
+ // }}}
+ // {{{ #7: Crylink
+ set g_balance_crylink_primary_ammo 2
+ 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 18
+ set g_balance_crylink_primary_edgedamage 0
+ set g_balance_crylink_primary_force -55
+ set g_balance_crylink_primary_joindelay 0
+ set g_balance_crylink_primary_joinexplode 0
+ set g_balance_crylink_primary_joinexplode_damage 0
+ 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
+ set g_balance_crylink_primary_linkexplode 1
+ set g_balance_crylink_primary_middle_fadetime 5
+ set g_balance_crylink_primary_middle_lifetime 5
+ set g_balance_crylink_primary_other_fadetime 0.25
+ set g_balance_crylink_primary_other_lifetime 0.1
+ set g_balance_crylink_primary_radius 80
+ set g_balance_crylink_primary_refire 0.4
+ set g_balance_crylink_primary_shots 4
+ set g_balance_crylink_primary_speed 7000
+ set g_balance_crylink_primary_spread 0.03
+ set g_balance_crylink_reload_ammo 0
+ 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_bounces 0
+ set g_balance_crylink_secondary_damage 18
+ set g_balance_crylink_secondary_edgedamage 5
+ set g_balance_crylink_secondary_force -55
+ set g_balance_crylink_secondary_joindelay 0
+ set g_balance_crylink_secondary_joinexplode 0
+ set g_balance_crylink_secondary_joinexplode_damage 0
+ set g_balance_crylink_secondary_joinexplode_edgedamage 0
+ set g_balance_crylink_secondary_joinexplode_force 0
+ set g_balance_crylink_secondary_joinexplode_radius 0
+ set g_balance_crylink_secondary_joinspread 0
+ set g_balance_crylink_secondary_linkexplode 1
+ set g_balance_crylink_secondary_middle_fadetime 5
+ set g_balance_crylink_secondary_middle_lifetime 5
+ set g_balance_crylink_secondary_other_fadetime 2
+ set g_balance_crylink_secondary_other_lifetime 2
+ set g_balance_crylink_secondary_radius 100
+ set g_balance_crylink_secondary_refire 0.5
+ set g_balance_crylink_secondary_shots 7
+ set g_balance_crylink_secondary_speed 7000
+ set g_balance_crylink_secondary_spread 0.08
+ set g_balance_crylink_secondary_spreadtype 0
+ set g_balance_crylink_switchdelay_drop 0.15
+ set g_balance_crylink_switchdelay_raise 0.15
+ set g_balance_crylink_weaponreplace ""
+ set g_balance_crylink_weaponstart 0
+ set g_balance_crylink_weaponstartoverride -1
+ set g_balance_crylink_weaponthrowable 1
+ // }}}
+ // {{{ #8: Vortex
+ 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_rot_pause 0
+ set g_balance_vortex_charge_rot_rate 0
+ set g_balance_vortex_charge_shot_multiplier 0
+ set g_balance_vortex_charge_start 0.5
+ set g_balance_vortex_charge_velocity_rate 0
+ set g_balance_vortex_primary_ammo 5
+ set g_balance_vortex_primary_animtime 0.3
+ set g_balance_vortex_primary_damage 100
+ set g_balance_vortex_primary_damagefalloff_forcehalflife 0
+ set g_balance_vortex_primary_damagefalloff_halflife 0
+ set g_balance_vortex_primary_damagefalloff_maxdist 0
+ set g_balance_vortex_primary_damagefalloff_mindist 0
+ set g_balance_vortex_primary_force 600
+ set g_balance_vortex_primary_refire 1.5
+ set g_balance_vortex_reload_ammo 0
+ set g_balance_vortex_reload_time 2
+ set g_balance_vortex_secondary 0
+ set g_balance_vortex_secondary_ammo 2
+ set g_balance_vortex_secondary_animtime 0
+ set g_balance_vortex_secondary_chargepool 0
+ set g_balance_vortex_secondary_chargepool_pause_regen 1
+ set g_balance_vortex_secondary_chargepool_regen 0.15
+ set g_balance_vortex_secondary_damage 0
+ set g_balance_vortex_secondary_damagefalloff_forcehalflife 0
+ set g_balance_vortex_secondary_damagefalloff_halflife 0
+ set g_balance_vortex_secondary_damagefalloff_maxdist 0
+ set g_balance_vortex_secondary_damagefalloff_mindist 0
+ set g_balance_vortex_secondary_force 0
+ set g_balance_vortex_secondary_refire 0
+ set g_balance_vortex_switchdelay_drop 0.15
+ set g_balance_vortex_switchdelay_raise 0.15
+ set g_balance_vortex_weaponreplace ""
+ set g_balance_vortex_weaponstart 0
+ set g_balance_vortex_weaponstartoverride -1
+ set g_balance_vortex_weaponthrowable 1
+ // }}}
+ // {{{ #9: Hagar
+ set g_balance_hagar_primary_ammo 1
+ set g_balance_hagar_primary_damage 37
+ set g_balance_hagar_primary_damageforcescale 0
+ set g_balance_hagar_primary_edgedamage 15
+ set g_balance_hagar_primary_force 100
+ set g_balance_hagar_primary_health 0
+ set g_balance_hagar_primary_lifetime 30
+ set g_balance_hagar_primary_radius 65
+ set g_balance_hagar_primary_refire 0.15
+ set g_balance_hagar_primary_speed 3000
+ set g_balance_hagar_primary_spread 0.010
+ set g_balance_hagar_reload_ammo 0
+ set g_balance_hagar_reload_time 2
+ set g_balance_hagar_secondary 1
+ set g_balance_hagar_secondary_ammo 1
+ set g_balance_hagar_secondary_damage 37
+ set g_balance_hagar_secondary_damageforcescale 0
+ set g_balance_hagar_secondary_edgedamage 15
+ set g_balance_hagar_secondary_force 100
+ set g_balance_hagar_secondary_health 0
+ set g_balance_hagar_secondary_lifetime_min 30
+ set g_balance_hagar_secondary_lifetime_rand 0
+ set g_balance_hagar_secondary_load 0
+ set g_balance_hagar_secondary_load_abort 1
+ set g_balance_hagar_secondary_load_animtime 0.2
+ set g_balance_hagar_secondary_load_hold 4
+ set g_balance_hagar_secondary_load_linkexplode 0
+ set g_balance_hagar_secondary_load_max 4
+ set g_balance_hagar_secondary_load_releasedeath 0
+ set g_balance_hagar_secondary_load_speed 0.5
+ set g_balance_hagar_secondary_load_spread 0.075
+ set g_balance_hagar_secondary_load_spread_bias 0.5
+ set g_balance_hagar_secondary_radius 80
+ set g_balance_hagar_secondary_refire 0.15
+ set g_balance_hagar_secondary_speed 1400
+ set g_balance_hagar_secondary_spread 0.015
+ set g_balance_hagar_switchdelay_drop 0.15
+ set g_balance_hagar_switchdelay_raise 0.15
+ set g_balance_hagar_weaponreplace ""
+ set g_balance_hagar_weaponstart 0
+ set g_balance_hagar_weaponstartoverride -1
+ set g_balance_hagar_weaponthrowable 1
+ // }}}
+ // {{{ #10: Devastator
+ set g_balance_devastator_ammo 3
+ set g_balance_devastator_animtime 0.3
+ set g_balance_devastator_damage 105
+ set g_balance_devastator_damageforcescale 4
+ set g_balance_devastator_detonatedelay 0.2
+ set g_balance_devastator_edgedamage 40
+ set g_balance_devastator_force 600
+ set g_balance_devastator_guidedelay 0.15
+ set g_balance_devastator_guidegoal 512
+ set g_balance_devastator_guiderate 90
+ set g_balance_devastator_guideratedelay 0.01
+ set g_balance_devastator_guidestop 0
+ set g_balance_devastator_health 40
+ set g_balance_devastator_lifetime 30
+ set g_balance_devastator_radius 150
+ set g_balance_devastator_refire 1
+ set g_balance_devastator_reload_ammo 0
+ set g_balance_devastator_reload_time 2
+ set g_balance_devastator_remote_damage 105
+ set g_balance_devastator_remote_edgedamage 40
+ set g_balance_devastator_remote_force 600
+ set g_balance_devastator_remote_jump_damage 70
+ 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_max 1500
+ set g_balance_devastator_remote_jump_velocity_z_min 400
+ set g_balance_devastator_remote_radius 150
+ set g_balance_devastator_speed 850
+ set g_balance_devastator_speedaccel 0
+ set g_balance_devastator_speedstart 850
+ set g_balance_devastator_switchdelay_drop 0.15
+ set g_balance_devastator_switchdelay_raise 0.15
+ set g_balance_devastator_weaponreplace ""
+ set g_balance_devastator_weaponstart 0
+ set g_balance_devastator_weaponstartoverride -1
+ set g_balance_devastator_weaponthrowable 1
+ // }}}
+ // {{{ #11: Port-O-Launch
+ set g_balance_porto_primary_animtime 0.3
+ set g_balance_porto_primary_lifetime 30
+ set g_balance_porto_primary_refire 1.5
+ set g_balance_porto_primary_speed 2000
+ set g_balance_porto_secondary 1
+ set g_balance_porto_secondary_animtime 0.3
+ set g_balance_porto_secondary_lifetime 30
+ set g_balance_porto_secondary_refire 1.5
+ set g_balance_porto_secondary_speed 2000
+ set g_balance_porto_switchdelay_drop 0.15
+ set g_balance_porto_switchdelay_raise 0.15
+ set g_balance_porto_weaponreplace ""
+ set g_balance_porto_weaponstart 0
+ set g_balance_porto_weaponstartoverride -1
+ 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_refire 1
+ set g_balance_vaporizer_reload_ammo 0
+ set g_balance_vaporizer_reload_time 0
+ set g_balance_vaporizer_secondary_ammo 0
+ set g_balance_vaporizer_secondary_animtime 0.2
+ set g_balance_vaporizer_secondary_damage 25
+ set g_balance_vaporizer_secondary_delay 0
+ set g_balance_vaporizer_secondary_edgedamage 12.5
+ set g_balance_vaporizer_secondary_force 400
+ set g_balance_vaporizer_secondary_lifetime 5
+ set g_balance_vaporizer_secondary_radius 70
+ set g_balance_vaporizer_secondary_refire 0.7
+ set g_balance_vaporizer_secondary_shotangle 0
+ set g_balance_vaporizer_secondary_speed 6000
+ set g_balance_vaporizer_secondary_spread 0
+ set g_balance_vaporizer_switchdelay_drop 0.15
+ set g_balance_vaporizer_switchdelay_raise 0.15
+ set g_balance_vaporizer_weaponreplace ""
+ set g_balance_vaporizer_weaponstart 0
+ set g_balance_vaporizer_weaponstartoverride -1
+ set g_balance_vaporizer_weaponthrowable 0
+ // }}}
+ // {{{ #13: Grappling Hook
+ set g_balance_hook_primary_ammo 5
+ set g_balance_hook_primary_animtime 0.3
+ set g_balance_hook_primary_hooked_ammo 5
+ set g_balance_hook_primary_hooked_time_free 2
+ set g_balance_hook_primary_hooked_time_max 0
+ set g_balance_hook_primary_refire 0.2
+ set g_balance_hook_secondary_animtime 0.3
+ set g_balance_hook_secondary_damage 25
+ set g_balance_hook_secondary_damageforcescale 0
+ set g_balance_hook_secondary_duration 1.5
+ set g_balance_hook_secondary_edgedamage 5
+ set g_balance_hook_secondary_force -2000
+ set g_balance_hook_secondary_gravity 5
+ set g_balance_hook_secondary_health 15
+ set g_balance_hook_secondary_lifetime 5
+ set g_balance_hook_secondary_power 3
+ set g_balance_hook_secondary_radius 500
+ set g_balance_hook_secondary_refire 3
+ set g_balance_hook_secondary_speed 0
+ set g_balance_hook_switchdelay_drop 0.15
+ set g_balance_hook_switchdelay_raise 0.15
+ set g_balance_hook_weaponreplace ""
+ set g_balance_hook_weaponstart 0
+ set g_balance_hook_weaponstartoverride -1
+ set g_balance_hook_weaponthrowable 1
+ // }}}
+ // {{{ #14: Heavy Laser Assault Cannon (MUTATOR WEAPON)
+ set g_balance_hlac_primary_ammo 1
+ set g_balance_hlac_primary_animtime 0.4
+ set g_balance_hlac_primary_damage 18
+ set g_balance_hlac_primary_edgedamage 9
+ set g_balance_hlac_primary_force 90
+ set g_balance_hlac_primary_lifetime 5
+ set g_balance_hlac_primary_radius 70
+ set g_balance_hlac_primary_refire 0.15
+ set g_balance_hlac_primary_speed 9000
+ set g_balance_hlac_primary_spread_add 0.0045
+ set g_balance_hlac_primary_spread_crouchmod 0.25
+ set g_balance_hlac_primary_spread_max 0.25
+ set g_balance_hlac_primary_spread_min 0.01
+ set g_balance_hlac_reload_ammo 0
+ set g_balance_hlac_reload_time 2
+ set g_balance_hlac_secondary 1
+ set g_balance_hlac_secondary_ammo 10
+ set g_balance_hlac_secondary_animtime 0.3
+ set g_balance_hlac_secondary_damage 15
+ set g_balance_hlac_secondary_edgedamage 7.5
+ set g_balance_hlac_secondary_force 90
+ set g_balance_hlac_secondary_lifetime 5
+ set g_balance_hlac_secondary_radius 70
+ set g_balance_hlac_secondary_refire 1
+ set g_balance_hlac_secondary_shots 6
+ set g_balance_hlac_secondary_speed 9000
+ set g_balance_hlac_secondary_spread 0.15
+ set g_balance_hlac_secondary_spread_crouchmod 0.5
+ set g_balance_hlac_switchdelay_drop 0.15
+ set g_balance_hlac_switchdelay_raise 0.15
+ set g_balance_hlac_weaponreplace ""
+ set g_balance_hlac_weaponstart 0
+ set g_balance_hlac_weaponstartoverride -1
+ set g_balance_hlac_weaponthrowable 1
+ // }}}
+ // {{{ #15: @!#%'n Tuba
+ set g_balance_tuba_animtime 0.05
+ set g_balance_tuba_attenuation 0.5
+ set g_balance_tuba_damage 5
+ set g_balance_tuba_edgedamage 0
+ set g_balance_tuba_fadetime 0.25
+ set g_balance_tuba_force 40
+ set g_balance_tuba_pitchstep 6
+ set g_balance_tuba_radius 200
+ set g_balance_tuba_refire 0.05
+ set g_balance_tuba_switchdelay_drop 0.15
+ set g_balance_tuba_switchdelay_raise 0.15
+ set g_balance_tuba_volume 1
+ set g_balance_tuba_weaponreplace ""
+ set g_balance_tuba_weaponstart 0
+ set g_balance_tuba_weaponstartoverride -1
+ set g_balance_tuba_weaponthrowable 1
+ // }}}
+ // {{{ #16: Rifle (MUTATOR WEAPON)
+ set g_balance_rifle_bursttime 0
+ set g_balance_rifle_primary_ammo 10
+ set g_balance_rifle_primary_animtime 0.4
+ set g_balance_rifle_primary_bullethail 0
+ set g_balance_rifle_primary_burstcost 0
+ set g_balance_rifle_primary_damage 80
+ set g_balance_rifle_primary_force 100
+ set g_balance_rifle_primary_refire 1.2
+ set g_balance_rifle_primary_shots 1
+ set g_balance_rifle_primary_solidpenetration 62.2
+ set g_balance_rifle_primary_spread 0
+ set g_balance_rifle_primary_tracer 1
+ set g_balance_rifle_reload_ammo 80
+ set g_balance_rifle_reload_time 2
+ set g_balance_rifle_secondary 1
+ set g_balance_rifle_secondary_ammo 10
+ set g_balance_rifle_secondary_animtime 0.3
+ set g_balance_rifle_secondary_bullethail 0
+ set g_balance_rifle_secondary_burstcost 0
+ set g_balance_rifle_secondary_damage 20
+ set g_balance_rifle_secondary_force 50
+ set g_balance_rifle_secondary_refire 0.9
+ set g_balance_rifle_secondary_reload 0
+ set g_balance_rifle_secondary_shots 4
+ set g_balance_rifle_secondary_solidpenetration 15.5
+ set g_balance_rifle_secondary_spread 0.04
+ set g_balance_rifle_secondary_tracer 0
+ set g_balance_rifle_switchdelay_drop 0.15
+ set g_balance_rifle_switchdelay_raise 0.15
+ set g_balance_rifle_weaponreplace ""
+ set g_balance_rifle_weaponstart 0
+ set g_balance_rifle_weaponstartoverride -1
+ set g_balance_rifle_weaponthrowable 1
+ // }}}
+ // {{{ #17: Fireball
+ set g_balance_fireball_primary_animtime 0.4
+ set g_balance_fireball_primary_bfgdamage 100
+ set g_balance_fireball_primary_bfgforce 0
+ set g_balance_fireball_primary_bfgradius 1000
+ set g_balance_fireball_primary_damage 200
+ set g_balance_fireball_primary_damageforcescale 0
+ set g_balance_fireball_primary_edgedamage 50
+ set g_balance_fireball_primary_force 600
+ set g_balance_fireball_primary_health 0
+ set g_balance_fireball_primary_laserburntime 0.5
+ set g_balance_fireball_primary_laserdamage 80
+ set g_balance_fireball_primary_laseredgedamage 20
+ set g_balance_fireball_primary_laserradius 256
+ set g_balance_fireball_primary_lifetime 15
+ set g_balance_fireball_primary_radius 200
+ set g_balance_fireball_primary_refire 2
+ set g_balance_fireball_primary_refire2 0
+ set g_balance_fireball_primary_speed 1200
+ set g_balance_fireball_primary_spread 0
+ set g_balance_fireball_secondary_animtime 0.3
+ set g_balance_fireball_secondary_damage 40
+ set g_balance_fireball_secondary_damageforcescale 4
+ set g_balance_fireball_secondary_damagetime 5
+ set g_balance_fireball_secondary_laserburntime 0.5
+ set g_balance_fireball_secondary_laserdamage 50
+ set g_balance_fireball_secondary_laseredgedamage 20
+ set g_balance_fireball_secondary_laserradius 110
+ set g_balance_fireball_secondary_lifetime 7
+ set g_balance_fireball_secondary_refire 1.5
+ set g_balance_fireball_secondary_speed 900
+ set g_balance_fireball_secondary_speed_up 100
+ set g_balance_fireball_secondary_speed_z 0
+ set g_balance_fireball_secondary_spread 0
+ set g_balance_fireball_switchdelay_drop 0.15
+ set g_balance_fireball_switchdelay_raise 0.15
+ set g_balance_fireball_weaponreplace ""
+ set g_balance_fireball_weaponstart 0
+ set g_balance_fireball_weaponstartoverride -1
+ set g_balance_fireball_weaponthrowable 0
+ // }}}
+ // {{{ #18: T.A.G. Seeker (MUTATOR WEAPON)
+ set g_balance_seeker_flac_ammo 1
+ set g_balance_seeker_flac_animtime 0.1
+ set g_balance_seeker_flac_damage 15
+ set g_balance_seeker_flac_edgedamage 10
+ set g_balance_seeker_flac_force 50
+ set g_balance_seeker_flac_lifetime 0.1
+ set g_balance_seeker_flac_lifetime_rand 0.05
+ set g_balance_seeker_flac_radius 100
+ set g_balance_seeker_flac_refire 0.1
+ set g_balance_seeker_flac_speed 3000
+ set g_balance_seeker_flac_speed_up 1000
+ set g_balance_seeker_flac_speed_z 0
+ set g_balance_seeker_flac_spread 0.4
+ set g_balance_seeker_missile_accel 1400
+ set g_balance_seeker_missile_ammo 2
+ set g_balance_seeker_missile_animtime 0.2
+ set g_balance_seeker_missile_count 3
+ set g_balance_seeker_missile_damage 30
+ set g_balance_seeker_missile_damageforcescale 4
+ set g_balance_seeker_missile_decel 1400
+ set g_balance_seeker_missile_delay 0.25
+ set g_balance_seeker_missile_edgedamage 10
+ set g_balance_seeker_missile_force 150
+ set g_balance_seeker_missile_health 5
+ set g_balance_seeker_missile_lifetime 15
+ set g_balance_seeker_missile_proxy 0
+ set g_balance_seeker_missile_proxy_delay 0.2
+ set g_balance_seeker_missile_proxy_maxrange 45
+ set g_balance_seeker_missile_radius 80
+ set g_balance_seeker_missile_refire 0.5
+ set g_balance_seeker_missile_smart 1
+ set g_balance_seeker_missile_smart_mindist 800
+ set g_balance_seeker_missile_smart_trace_max 2500
+ set g_balance_seeker_missile_smart_trace_min 1000
+ set g_balance_seeker_missile_speed 700
+ set g_balance_seeker_missile_speed_max 1300
+ set g_balance_seeker_missile_speed_up 300
+ set g_balance_seeker_missile_speed_z 0
+ set g_balance_seeker_missile_spread 0
+ set g_balance_seeker_missile_turnrate 0.65
+ set g_balance_seeker_reload_ammo 0
+ set g_balance_seeker_reload_time 2
+ set g_balance_seeker_switchdelay_drop 0.15
+ set g_balance_seeker_switchdelay_raise 0.15
+ set g_balance_seeker_tag_ammo 1
+ set g_balance_seeker_tag_animtime 0.2
+ set g_balance_seeker_tag_damageforcescale 4
+ set g_balance_seeker_tag_health 5
+ set g_balance_seeker_tag_lifetime 15
+ set g_balance_seeker_tag_refire 0.75
+ set g_balance_seeker_tag_speed 5000
+ set g_balance_seeker_tag_spread 0
+ set g_balance_seeker_tag_tracker_lifetime 10
+ set g_balance_seeker_type 0
+ set g_balance_seeker_weaponreplace ""
+ set g_balance_seeker_weaponstart 0
+ set g_balance_seeker_weaponstartoverride -1
+ 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_distance 1000
+ set g_balance_shockwave_blast_edgedamage 0
+ set g_balance_shockwave_blast_force 200
+ set g_balance_shockwave_blast_force_forwardbias 50
+ set g_balance_shockwave_blast_force_zscale 2
+ 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_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_min 0
+ set g_balance_shockwave_blast_refire 0.75
+ set g_balance_shockwave_blast_splash_damage 15
+ set g_balance_shockwave_blast_splash_edgedamage 0
+ set g_balance_shockwave_blast_splash_force 100
+ set g_balance_shockwave_blast_splash_force_forwardbias 50
+ set g_balance_shockwave_blast_splash_multiplier_accuracy 0.5
+ set g_balance_shockwave_blast_splash_multiplier_distance 0.5
+ set g_balance_shockwave_blast_splash_multiplier_min 0
+ set g_balance_shockwave_blast_splash_radius 70
+ set g_balance_shockwave_blast_spread_max 120
+ set g_balance_shockwave_blast_spread_min 25
+ set g_balance_shockwave_melee_animtime 1.3
+ set g_balance_shockwave_melee_damage 80
+ set g_balance_shockwave_melee_delay 0.25
+ set g_balance_shockwave_melee_force 200
+ set g_balance_shockwave_melee_multihit 1
+ set g_balance_shockwave_melee_no_doubleslap 1
+ set g_balance_shockwave_melee_nonplayerdamage 40
+ set g_balance_shockwave_melee_range 120
+ set g_balance_shockwave_melee_refire 1.25
+ set g_balance_shockwave_melee_swing_side 120
+ set g_balance_shockwave_melee_swing_up 30
+ set g_balance_shockwave_melee_time 0.15
+ set g_balance_shockwave_melee_traces 10
+ set g_balance_shockwave_switchdelay_drop 0.15
+ set g_balance_shockwave_switchdelay_raise 0.15
+ set g_balance_shockwave_weaponreplace ""
+ set g_balance_shockwave_weaponstart 1
+ 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_botaimlifetime 0
+ set g_balance_arc_beam_botaimspeed 0
+ set g_balance_arc_beam_damage 115
+ 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_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_overheat_max 5
+ set g_balance_arc_overheat_min 3
+ set g_balance_arc_beam_heat 1
+ set g_balance_arc_burst_heat 3
+ 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_returnspeed 8
+ set g_balance_arc_beam_tightness 0.5
+ set g_balance_arc_burst_ammo 15
+ set g_balance_arc_burst_damage 150
+ 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_weaponreplace ""
+ set g_balance_arc_weaponstart 0
+ set g_balance_arc_weaponstartoverride -1
+ set g_balance_arc_weaponthrowable 1
+ // }}}
++// {{{ #21: Heavy Machine Gun
++set g_balance_hmg_ammo 0
++set g_balance_hmg_damage 0
++set g_balance_hmg_force 0
++set g_balance_hmg_refire 0
++set g_balance_hmg_reload_ammo 120
++set g_balance_hmg_reload_time 1
++set g_balance_hmg_solidpenetration 32
++set g_balance_hmg_spread_add 0.01
++set g_balance_hmg_spread_max 0.05
++set g_balance_hmg_spread_min 0.02
++set g_balance_hmg_switchdelay_drop 0.2
++set g_balance_hmg_switchdelay_raise 0.2
++set g_balance_hmg_weaponreplace ""
++set g_balance_hmg_weaponstart 0
++set g_balance_hmg_weaponstartoverride 0
++set g_balance_hmg_weaponthrowable 0
++// }}}
++// {{{ #22: Rocket Propelled Chainsaw
++set g_balance_rpc_ammo 10
++set g_balance_rpc_animtime 1
++set g_balance_rpc_damage 150
++set g_balance_rpc_damage2 500
++set g_balance_rpc_damageforcescale 2
++set g_balance_rpc_edgedamage 50
++set g_balance_rpc_force 400
++set g_balance_rpc_health 25
++set g_balance_rpc_lifetime 30
++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_speedaccel 5000
++set g_balance_rpc_switchdelay_drop 0.2
++set g_balance_rpc_switchdelay_raise 0.2
++set g_balance_rpc_weaponreplace ""
++set g_balance_rpc_weaponstart 0
++set g_balance_rpc_weaponstartoverride 0
++set g_balance_rpc_weaponthrowable 0
++// }}}
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..ab18a5d894c81e8c18aa7f5d16570bfc9cf76c8e
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,804 @@@
++// {{{ #1: Blaster
++set g_balance_blaster_primary_animtime 0.2
++set g_balance_blaster_primary_damage 25
++set g_balance_blaster_primary_delay 0
++set g_balance_blaster_primary_edgedamage 12.5
++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
++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.2
++set g_balance_blaster_secondary_damage 25
++set g_balance_blaster_secondary_delay 0
++set g_balance_blaster_secondary_edgedamage 12.5
++set g_balance_blaster_secondary_force 300
++set g_balance_blaster_secondary_force_zscale 1.2
++set g_balance_blaster_secondary_lifetime 5
++set g_balance_blaster_secondary_radius 70
++set g_balance_blaster_secondary_refire 0.7
++set g_balance_blaster_secondary_shotangle 0
++set g_balance_blaster_secondary_speed 6000
++set g_balance_blaster_secondary_spread 0
++set g_balance_blaster_switchdelay_drop 0.2
++set g_balance_blaster_switchdelay_raise 0.2
++set g_balance_blaster_weaponreplace ""
++set g_balance_blaster_weaponstart 1
++set g_balance_blaster_weaponstartoverride -1
++set g_balance_blaster_weaponthrowable 0
++// }}}
++// {{{ #2: Shotgun
++set g_balance_shotgun_primary_ammo 6.25
++set g_balance_shotgun_primary_animtime 0.65
++set g_balance_shotgun_primary_bullets 10
++set g_balance_shotgun_primary_damage 17
++set g_balance_shotgun_primary_force 80
++set g_balance_shotgun_primary_refire 0.75
++set g_balance_shotgun_primary_solidpenetration 3.8
++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
++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
++set g_balance_shotgun_secondary_melee_no_doubleslap 1
++set g_balance_shotgun_secondary_melee_nonplayerdamage 40
++set g_balance_shotgun_secondary_melee_range 120
++set g_balance_shotgun_secondary_melee_swing_side 120
++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_switchdelay_drop 0.2
++set g_balance_shotgun_switchdelay_raise 0.2
++set g_balance_shotgun_weaponreplace ""
++set g_balance_shotgun_weaponstart 1
++set g_balance_shotgun_weaponstartoverride -1
++set g_balance_shotgun_weaponthrowable 1
++// }}}
++// {{{ #3: Machine Gun
++set g_balance_machinegun_burst 3
++set g_balance_machinegun_burst_ammo 3
++set g_balance_machinegun_burst_animtime 0.3
++set g_balance_machinegun_burst_refire 0.06
++set g_balance_machinegun_burst_refire2 0.45
++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.125
++set g_balance_machinegun_first_spread 0.03
++set g_balance_machinegun_mode 1
++set g_balance_machinegun_reload_ammo 30
++set g_balance_machinegun_reload_time 1.5
++set g_balance_machinegun_solidpenetration 13.1
++set g_balance_machinegun_spread_add 0.012
++set g_balance_machinegun_spread_max 0.05
++set g_balance_machinegun_spread_min 0.02
++set g_balance_machinegun_sustained_ammo 1
++set g_balance_machinegun_sustained_damage 25
++set g_balance_machinegun_sustained_force 5
++set g_balance_machinegun_sustained_refire 0.1
++set g_balance_machinegun_sustained_spread 0.01
++set g_balance_machinegun_switchdelay_drop 0.2
++set g_balance_machinegun_switchdelay_raise 0.2
++set g_balance_machinegun_weaponreplace ""
++set g_balance_machinegun_weaponstart 0
++set g_balance_machinegun_weaponstartoverride -1
++set g_balance_machinegun_weaponthrowable 1
++// }}}
++// {{{ #4: Mortar
++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 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 15
++set g_balance_mortar_primary_lifetime 5
++set g_balance_mortar_primary_lifetime_stick 0
++set g_balance_mortar_primary_radius 120
++set g_balance_mortar_primary_refire 0.8
++set g_balance_mortar_primary_remote_minbouncecnt 0
++set g_balance_mortar_primary_speed 1900
++set g_balance_mortar_primary_speed_up 225
++set g_balance_mortar_primary_speed_z 0
++set g_balance_mortar_primary_spread 0
++set g_balance_mortar_primary_type 0
++set g_balance_mortar_reload_ammo 0
++set g_balance_mortar_reload_time 2
++set g_balance_mortar_secondary_ammo 2
++set g_balance_mortar_secondary_animtime 0.3
++set g_balance_mortar_secondary_damage 55
++set g_balance_mortar_secondary_damageforcescale 4
++set g_balance_mortar_secondary_edgedamage 30
++set g_balance_mortar_secondary_force 250
++set g_balance_mortar_secondary_health 30
++set g_balance_mortar_secondary_lifetime 5
++set g_balance_mortar_secondary_lifetime_bounce 0.5
++set g_balance_mortar_secondary_lifetime_stick 0
++set g_balance_mortar_secondary_radius 120
++set g_balance_mortar_secondary_refire 0.7
++set g_balance_mortar_secondary_remote_detonateprimary 0
++set g_balance_mortar_secondary_speed 1400
++set g_balance_mortar_secondary_speed_up 150
++set g_balance_mortar_secondary_speed_z 0
++set g_balance_mortar_secondary_spread 0
++set g_balance_mortar_secondary_type 1
++set g_balance_mortar_switchdelay_drop 0.2
++set g_balance_mortar_switchdelay_raise 0.2
++set g_balance_mortar_weaponreplace ""
++set g_balance_mortar_weaponstart 0
++set g_balance_mortar_weaponstartoverride -1
++set g_balance_mortar_weaponthrowable 1
++// }}}
++// {{{ #5: Mine Layer (MUTATOR WEAPON)
++set g_balance_minelayer_ammo 4
++set g_balance_minelayer_animtime 0.4
++set g_balance_minelayer_damage 40
++set g_balance_minelayer_damageforcescale 0
++set g_balance_minelayer_detonatedelay -1
++set g_balance_minelayer_edgedamage 20
++set g_balance_minelayer_force 250
++set g_balance_minelayer_health 15
++set g_balance_minelayer_lifetime 10
++set g_balance_minelayer_lifetime_countdown 0.5
++set g_balance_minelayer_limit 3
++set g_balance_minelayer_protection 0
++set g_balance_minelayer_proximityradius 150
++set g_balance_minelayer_radius 175
++set g_balance_minelayer_refire 1.5
++set g_balance_minelayer_reload_ammo 0
++set g_balance_minelayer_reload_time 2
++set g_balance_minelayer_remote_damage 45
++set g_balance_minelayer_remote_edgedamage 40
++set g_balance_minelayer_remote_force 300
++set g_balance_minelayer_remote_radius 200
++set g_balance_minelayer_speed 1000
++set g_balance_minelayer_switchdelay_drop 0.2
++set g_balance_minelayer_switchdelay_raise 0.2
++set g_balance_minelayer_time 0.5
++set g_balance_minelayer_weaponreplace ""
++set g_balance_minelayer_weaponstart 0
++set g_balance_minelayer_weaponstartoverride -1
++set g_balance_minelayer_weaponthrowable 1
++// }}}
++// {{{ #6: Electro
++set g_balance_electro_combo_comboradius 300
++set g_balance_electro_combo_comboradius_thruwall 200
++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 150
++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.3
++set g_balance_electro_primary_comboradius 300
++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
++set g_balance_electro_primary_midaircombo_interval 0.1
++set g_balance_electro_primary_midaircombo_radius 150
++set g_balance_electro_primary_radius 100
++set g_balance_electro_primary_refire 0.6
++set g_balance_electro_primary_speed 2500
++set g_balance_electro_primary_spread 0
++set g_balance_electro_reload_ammo 0
++set g_balance_electro_reload_time 2
++set g_balance_electro_secondary_ammo 2
++set g_balance_electro_secondary_animtime 0.2
++set g_balance_electro_secondary_bouncefactor 0.3
++set g_balance_electro_secondary_bouncestop 0.05
++set g_balance_electro_secondary_count 3
++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 15
++set g_balance_electro_secondary_force 50
++set g_balance_electro_secondary_health 5
++set g_balance_electro_secondary_lifetime 4
++set g_balance_electro_secondary_radius 150
++set g_balance_electro_secondary_refire 0.2
++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_touchexplode 0
++set g_balance_electro_switchdelay_drop 0.2
++set g_balance_electro_switchdelay_raise 0.2
++set g_balance_electro_weaponreplace ""
++set g_balance_electro_weaponstart 0
++set g_balance_electro_weaponstartoverride -1
++set g_balance_electro_weaponthrowable 1
++// }}}
++// {{{ #7: Crylink
++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 -50
++set g_balance_crylink_primary_joindelay 0.1
++set g_balance_crylink_primary_joinexplode 1
++set g_balance_crylink_primary_joinexplode_damage 0
++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_middle_fadetime 5
++set g_balance_crylink_primary_middle_lifetime 5
++set g_balance_crylink_primary_other_fadetime 5
++set g_balance_crylink_primary_other_lifetime 5
++set g_balance_crylink_primary_radius 80
++set g_balance_crylink_primary_refire 0.7
++set g_balance_crylink_primary_shots 6
++set g_balance_crylink_primary_speed 2000
++set g_balance_crylink_primary_spread 0.08
++set g_balance_crylink_reload_ammo 0
++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_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_joindelay 0
++set g_balance_crylink_secondary_joinexplode 0
++set g_balance_crylink_secondary_joinexplode_damage 0
++set g_balance_crylink_secondary_joinexplode_edgedamage 0
++set g_balance_crylink_secondary_joinexplode_force 0
++set g_balance_crylink_secondary_joinexplode_radius 0
++set g_balance_crylink_secondary_joinspread 0
++set g_balance_crylink_secondary_linkexplode 1
++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_spreadtype 1
++set g_balance_crylink_switchdelay_drop 0.2
++set g_balance_crylink_switchdelay_raise 0.2
++set g_balance_crylink_weaponreplace ""
++set g_balance_crylink_weaponstart 0
++set g_balance_crylink_weaponstartoverride -1
++set g_balance_crylink_weaponthrowable 1
++// }}}
++// {{{ #8: Vortex
++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.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
++set g_balance_vortex_charge_start 0.5
++set g_balance_vortex_charge_velocity_rate 0
++set g_balance_vortex_primary_ammo 10
++set g_balance_vortex_primary_animtime 0.95
++set g_balance_vortex_primary_damage 100
++set g_balance_vortex_primary_damagefalloff_forcehalflife 0
++set g_balance_vortex_primary_damagefalloff_halflife 0
++set g_balance_vortex_primary_damagefalloff_maxdist 0
++set g_balance_vortex_primary_damagefalloff_mindist 0
++set g_balance_vortex_primary_force 500
++set g_balance_vortex_primary_refire 1
++set g_balance_vortex_reload_ammo 50
++set g_balance_vortex_reload_time 2
++set g_balance_vortex_secondary 1
++set g_balance_vortex_secondary_ammo 2
++set g_balance_vortex_secondary_animtime 0
++set g_balance_vortex_secondary_chargepool 0
++set g_balance_vortex_secondary_chargepool_pause_regen 1
++set g_balance_vortex_secondary_chargepool_regen 0.15
++set g_balance_vortex_secondary_damage 0
++set g_balance_vortex_secondary_damagefalloff_forcehalflife 0
++set g_balance_vortex_secondary_damagefalloff_halflife 0
++set g_balance_vortex_secondary_damagefalloff_maxdist 0
++set g_balance_vortex_secondary_damagefalloff_mindist 0
++set g_balance_vortex_secondary_force 0
++set g_balance_vortex_secondary_refire 0
++set g_balance_vortex_switchdelay_drop 0.25
++set g_balance_vortex_switchdelay_raise 0.25
++set g_balance_vortex_weaponreplace ""
++set g_balance_vortex_weaponstart 0
++set g_balance_vortex_weaponstartoverride -1
++set g_balance_vortex_weaponthrowable 1
++// }}}
++// {{{ #9: Hagar
++set g_balance_hagar_primary_ammo 1
++set g_balance_hagar_primary_damage 25
++set g_balance_hagar_primary_damageforcescale 0
++set g_balance_hagar_primary_edgedamage 12.5
++set g_balance_hagar_primary_force 100
++set g_balance_hagar_primary_health 15
++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_reload_ammo 0
++set g_balance_hagar_reload_time 2
++set g_balance_hagar_secondary 1
++set g_balance_hagar_secondary_ammo 1
++set g_balance_hagar_secondary_damage 35
++set g_balance_hagar_secondary_damageforcescale 0
++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
++set g_balance_hagar_secondary_lifetime_rand 0
++set g_balance_hagar_secondary_load 1
++set g_balance_hagar_secondary_load_abort 1
++set g_balance_hagar_secondary_load_animtime 0.2
++set g_balance_hagar_secondary_load_hold 4
++set g_balance_hagar_secondary_load_linkexplode 0
++set g_balance_hagar_secondary_load_max 4
++set g_balance_hagar_secondary_load_releasedeath 0
++set g_balance_hagar_secondary_load_speed 0.5
++set g_balance_hagar_secondary_load_spread 0.075
++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_switchdelay_drop 0.2
++set g_balance_hagar_switchdelay_raise 0.2
++set g_balance_hagar_weaponreplace ""
++set g_balance_hagar_weaponstart 0
++set g_balance_hagar_weaponstartoverride -1
++set g_balance_hagar_weaponthrowable 1
++// }}}
++// {{{ #10: Devastator
++set g_balance_devastator_ammo 4
++set g_balance_devastator_animtime 0.4
++set g_balance_devastator_damage 80
++set g_balance_devastator_damageforcescale 1
++set g_balance_devastator_detonatedelay 0.02
++set g_balance_devastator_edgedamage 40
++set g_balance_devastator_force 400
++set g_balance_devastator_guidedelay 0.2
++set g_balance_devastator_guidegoal 512
++set g_balance_devastator_guiderate 90
++set g_balance_devastator_guideratedelay 0.01
++set g_balance_devastator_guidestop 0
++set g_balance_devastator_health 30
++set g_balance_devastator_lifetime 10
++set g_balance_devastator_radius 110
++set g_balance_devastator_refire 1.1
++set g_balance_devastator_reload_ammo 0
++set g_balance_devastator_reload_time 2
++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_radius 0
++set g_balance_devastator_remote_jump_velocity_z_add 400
++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
++set g_balance_devastator_speed 1300
++set g_balance_devastator_speedaccel 1300
++set g_balance_devastator_speedstart 1000
++set g_balance_devastator_switchdelay_drop 0.2
++set g_balance_devastator_switchdelay_raise 0.2
++set g_balance_devastator_weaponreplace ""
++set g_balance_devastator_weaponstart 0
++set g_balance_devastator_weaponstartoverride -1
++set g_balance_devastator_weaponthrowable 1
++// }}}
++// {{{ #11: Port-O-Launch
++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 1000
++set g_balance_porto_secondary 1
++set g_balance_porto_secondary_animtime 0.3
++set g_balance_porto_secondary_lifetime 5
++set g_balance_porto_secondary_refire 1.5
++set g_balance_porto_secondary_speed 1000
++set g_balance_porto_switchdelay_drop 0.2
++set g_balance_porto_switchdelay_raise 0.2
++set g_balance_porto_weaponreplace ""
++set g_balance_porto_weaponstart 0
++set g_balance_porto_weaponstartoverride -1
++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_refire 1
++set g_balance_vaporizer_reload_ammo 0
++set g_balance_vaporizer_reload_time 0
++set g_balance_vaporizer_secondary_ammo 0
++set g_balance_vaporizer_secondary_animtime 0.2
++set g_balance_vaporizer_secondary_damage 25
++set g_balance_vaporizer_secondary_delay 0
++set g_balance_vaporizer_secondary_edgedamage 12.5
++set g_balance_vaporizer_secondary_force 400
++set g_balance_vaporizer_secondary_lifetime 5
++set g_balance_vaporizer_secondary_radius 70
++set g_balance_vaporizer_secondary_refire 0.7
++set g_balance_vaporizer_secondary_shotangle 0
++set g_balance_vaporizer_secondary_speed 6000
++set g_balance_vaporizer_secondary_spread 0
++set g_balance_vaporizer_switchdelay_drop 0.2
++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
++// }}}
++// {{{ #13: Grappling Hook
++set g_balance_hook_primary_ammo 5
++set g_balance_hook_primary_animtime 0.3
++set g_balance_hook_primary_hooked_ammo 5
++set g_balance_hook_primary_hooked_time_free 2
++set g_balance_hook_primary_hooked_time_max 0
++set g_balance_hook_primary_refire 0.2
++set g_balance_hook_secondary_animtime 0.3
++set g_balance_hook_secondary_damage 25
++set g_balance_hook_secondary_damageforcescale 0
++set g_balance_hook_secondary_duration 1.5
++set g_balance_hook_secondary_edgedamage 5
++set g_balance_hook_secondary_force -2000
++set g_balance_hook_secondary_gravity 5
++set g_balance_hook_secondary_health 15
++set g_balance_hook_secondary_lifetime 5
++set g_balance_hook_secondary_power 3
++set g_balance_hook_secondary_radius 500
++set g_balance_hook_secondary_refire 3
++set g_balance_hook_secondary_speed 0
++set g_balance_hook_switchdelay_drop 0.2
++set g_balance_hook_switchdelay_raise 0.2
++set g_balance_hook_weaponreplace ""
++set g_balance_hook_weaponstart 0
++set g_balance_hook_weaponstartoverride -1
++set g_balance_hook_weaponthrowable 1
++// }}}
++// {{{ #14: Heavy Laser Assault Cannon (MUTATOR WEAPON)
++set g_balance_hlac_primary_ammo 1
++set g_balance_hlac_primary_animtime 0.4
++set g_balance_hlac_primary_damage 18
++set g_balance_hlac_primary_edgedamage 9
++set g_balance_hlac_primary_force 90
++set g_balance_hlac_primary_lifetime 5
++set g_balance_hlac_primary_radius 70
++set g_balance_hlac_primary_refire 0.15
++set g_balance_hlac_primary_speed 9000
++set g_balance_hlac_primary_spread_add 0.0045
++set g_balance_hlac_primary_spread_crouchmod 0.25
++set g_balance_hlac_primary_spread_max 0.25
++set g_balance_hlac_primary_spread_min 0.01
++set g_balance_hlac_reload_ammo 0
++set g_balance_hlac_reload_time 2
++set g_balance_hlac_secondary 1
++set g_balance_hlac_secondary_ammo 10
++set g_balance_hlac_secondary_animtime 0.3
++set g_balance_hlac_secondary_damage 15
++set g_balance_hlac_secondary_edgedamage 7.5
++set g_balance_hlac_secondary_force 90
++set g_balance_hlac_secondary_lifetime 5
++set g_balance_hlac_secondary_radius 70
++set g_balance_hlac_secondary_refire 1
++set g_balance_hlac_secondary_shots 6
++set g_balance_hlac_secondary_speed 9000
++set g_balance_hlac_secondary_spread 0.15
++set g_balance_hlac_secondary_spread_crouchmod 0.5
++set g_balance_hlac_switchdelay_drop 0.2
++set g_balance_hlac_switchdelay_raise 0.2
++set g_balance_hlac_weaponreplace ""
++set g_balance_hlac_weaponstart 0
++set g_balance_hlac_weaponstartoverride -1
++set g_balance_hlac_weaponthrowable 1
++// }}}
++// {{{ #15: @!#%'n Tuba
++set g_balance_tuba_animtime 0.05
++set g_balance_tuba_attenuation 0.5
++set g_balance_tuba_damage 5
++set g_balance_tuba_edgedamage 0
++set g_balance_tuba_fadetime 0.25
++set g_balance_tuba_force 40
++set g_balance_tuba_pitchstep 6
++set g_balance_tuba_radius 200
++set g_balance_tuba_refire 0.05
++set g_balance_tuba_switchdelay_drop 0.2
++set g_balance_tuba_switchdelay_raise 0.2
++set g_balance_tuba_volume 1
++set g_balance_tuba_weaponreplace ""
++set g_balance_tuba_weaponstart 0
++set g_balance_tuba_weaponstartoverride -1
++set g_balance_tuba_weaponthrowable 1
++// }}}
++// {{{ #16: Rifle (MUTATOR WEAPON)
++set g_balance_rifle_bursttime 0
++set g_balance_rifle_primary_ammo 10
++set g_balance_rifle_primary_animtime 0.4
++set g_balance_rifle_primary_bullethail 0
++set g_balance_rifle_primary_burstcost 0
++set g_balance_rifle_primary_damage 80
++set g_balance_rifle_primary_force 100
++set g_balance_rifle_primary_refire 1.2
++set g_balance_rifle_primary_shots 1
++set g_balance_rifle_primary_solidpenetration 62.2
++set g_balance_rifle_primary_spread 0
++set g_balance_rifle_primary_tracer 1
++set g_balance_rifle_reload_ammo 80
++set g_balance_rifle_reload_time 2
++set g_balance_rifle_secondary 1
++set g_balance_rifle_secondary_ammo 10
++set g_balance_rifle_secondary_animtime 0.3
++set g_balance_rifle_secondary_bullethail 0
++set g_balance_rifle_secondary_burstcost 0
++set g_balance_rifle_secondary_damage 20
++set g_balance_rifle_secondary_force 50
++set g_balance_rifle_secondary_refire 0.9
++set g_balance_rifle_secondary_reload 0
++set g_balance_rifle_secondary_shots 4
++set g_balance_rifle_secondary_solidpenetration 15.5
++set g_balance_rifle_secondary_spread 0.04
++set g_balance_rifle_secondary_tracer 0
++set g_balance_rifle_switchdelay_drop 0.2
++set g_balance_rifle_switchdelay_raise 0.2
++set g_balance_rifle_weaponreplace ""
++set g_balance_rifle_weaponstart 0
++set g_balance_rifle_weaponstartoverride -1
++set g_balance_rifle_weaponthrowable 1
++// }}}
++// {{{ #17: Fireball
++set g_balance_fireball_primary_animtime 0.4
++set g_balance_fireball_primary_bfgdamage 100
++set g_balance_fireball_primary_bfgforce 0
++set g_balance_fireball_primary_bfgradius 1000
++set g_balance_fireball_primary_damage 200
++set g_balance_fireball_primary_damageforcescale 0
++set g_balance_fireball_primary_edgedamage 50
++set g_balance_fireball_primary_force 600
++set g_balance_fireball_primary_health 0
++set g_balance_fireball_primary_laserburntime 0.5
++set g_balance_fireball_primary_laserdamage 80
++set g_balance_fireball_primary_laseredgedamage 20
++set g_balance_fireball_primary_laserradius 256
++set g_balance_fireball_primary_lifetime 15
++set g_balance_fireball_primary_radius 200
++set g_balance_fireball_primary_refire 2
++set g_balance_fireball_primary_refire2 0
++set g_balance_fireball_primary_speed 1200
++set g_balance_fireball_primary_spread 0
++set g_balance_fireball_secondary_animtime 0.3
++set g_balance_fireball_secondary_damage 40
++set g_balance_fireball_secondary_damageforcescale 4
++set g_balance_fireball_secondary_damagetime 5
++set g_balance_fireball_secondary_laserburntime 0.5
++set g_balance_fireball_secondary_laserdamage 50
++set g_balance_fireball_secondary_laseredgedamage 20
++set g_balance_fireball_secondary_laserradius 110
++set g_balance_fireball_secondary_lifetime 7
++set g_balance_fireball_secondary_refire 1.5
++set g_balance_fireball_secondary_speed 900
++set g_balance_fireball_secondary_speed_up 100
++set g_balance_fireball_secondary_speed_z 0
++set g_balance_fireball_secondary_spread 0
++set g_balance_fireball_switchdelay_drop 0.2
++set g_balance_fireball_switchdelay_raise 0.2
++set g_balance_fireball_weaponreplace ""
++set g_balance_fireball_weaponstart 0
++set g_balance_fireball_weaponstartoverride -1
++set g_balance_fireball_weaponthrowable 0
++// }}}
++// {{{ #18: T.A.G. Seeker (MUTATOR WEAPON)
++set g_balance_seeker_flac_ammo 1
++set g_balance_seeker_flac_animtime 0.1
++set g_balance_seeker_flac_damage 15
++set g_balance_seeker_flac_edgedamage 10
++set g_balance_seeker_flac_force 50
++set g_balance_seeker_flac_lifetime 0.1
++set g_balance_seeker_flac_lifetime_rand 0.05
++set g_balance_seeker_flac_radius 100
++set g_balance_seeker_flac_refire 0.1
++set g_balance_seeker_flac_speed 3000
++set g_balance_seeker_flac_speed_up 1000
++set g_balance_seeker_flac_speed_z 0
++set g_balance_seeker_flac_spread 0.4
++set g_balance_seeker_missile_accel 1400
++set g_balance_seeker_missile_ammo 2
++set g_balance_seeker_missile_animtime 0.2
++set g_balance_seeker_missile_count 3
++set g_balance_seeker_missile_damage 30
++set g_balance_seeker_missile_damageforcescale 4
++set g_balance_seeker_missile_decel 1400
++set g_balance_seeker_missile_delay 0.25
++set g_balance_seeker_missile_edgedamage 10
++set g_balance_seeker_missile_force 150
++set g_balance_seeker_missile_health 5
++set g_balance_seeker_missile_lifetime 15
++set g_balance_seeker_missile_proxy 0
++set g_balance_seeker_missile_proxy_delay 0.2
++set g_balance_seeker_missile_proxy_maxrange 45
++set g_balance_seeker_missile_radius 80
++set g_balance_seeker_missile_refire 0.5
++set g_balance_seeker_missile_smart 1
++set g_balance_seeker_missile_smart_mindist 800
++set g_balance_seeker_missile_smart_trace_max 2500
++set g_balance_seeker_missile_smart_trace_min 1000
++set g_balance_seeker_missile_speed 700
++set g_balance_seeker_missile_speed_max 1300
++set g_balance_seeker_missile_speed_up 300
++set g_balance_seeker_missile_speed_z 0
++set g_balance_seeker_missile_spread 0
++set g_balance_seeker_missile_turnrate 0.65
++set g_balance_seeker_reload_ammo 0
++set g_balance_seeker_reload_time 2
++set g_balance_seeker_switchdelay_drop 0.2
++set g_balance_seeker_switchdelay_raise 0.2
++set g_balance_seeker_tag_ammo 1
++set g_balance_seeker_tag_animtime 0.2
++set g_balance_seeker_tag_damageforcescale 4
++set g_balance_seeker_tag_health 5
++set g_balance_seeker_tag_lifetime 15
++set g_balance_seeker_tag_refire 0.75
++set g_balance_seeker_tag_speed 5000
++set g_balance_seeker_tag_spread 0
++set g_balance_seeker_tag_tracker_lifetime 10
++set g_balance_seeker_type 0
++set g_balance_seeker_weaponreplace ""
++set g_balance_seeker_weaponstart 0
++set g_balance_seeker_weaponstartoverride -1
++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_distance 1000
++set g_balance_shockwave_blast_edgedamage 0
++set g_balance_shockwave_blast_force 200
++set g_balance_shockwave_blast_force_forwardbias 50
++set g_balance_shockwave_blast_force_zscale 2
++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_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_min 0
++set g_balance_shockwave_blast_refire 0.75
++set g_balance_shockwave_blast_splash_damage 15
++set g_balance_shockwave_blast_splash_edgedamage 0
++set g_balance_shockwave_blast_splash_force 100
++set g_balance_shockwave_blast_splash_force_forwardbias 50
++set g_balance_shockwave_blast_splash_multiplier_accuracy 0.5
++set g_balance_shockwave_blast_splash_multiplier_distance 0.5
++set g_balance_shockwave_blast_splash_multiplier_min 0
++set g_balance_shockwave_blast_splash_radius 70
++set g_balance_shockwave_blast_spread_max 120
++set g_balance_shockwave_blast_spread_min 25
++set g_balance_shockwave_melee_animtime 1.3
++set g_balance_shockwave_melee_damage 80
++set g_balance_shockwave_melee_delay 0.25
++set g_balance_shockwave_melee_force 200
++set g_balance_shockwave_melee_multihit 1
++set g_balance_shockwave_melee_no_doubleslap 1
++set g_balance_shockwave_melee_nonplayerdamage 40
++set g_balance_shockwave_melee_range 120
++set g_balance_shockwave_melee_refire 1.25
++set g_balance_shockwave_melee_swing_side 120
++set g_balance_shockwave_melee_swing_up 30
++set g_balance_shockwave_melee_time 0.15
++set g_balance_shockwave_melee_traces 10
++set g_balance_shockwave_switchdelay_drop 0.2
++set g_balance_shockwave_switchdelay_raise 0.2
++set g_balance_shockwave_weaponreplace ""
++set g_balance_shockwave_weaponstart 0
++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_botaimlifetime 0
++set g_balance_arc_beam_botaimspeed 0
++set g_balance_arc_beam_damage 115
++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_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_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_returnspeed 8
++set g_balance_arc_beam_tightness 0.5
++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_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_weaponreplace ""
++set g_balance_arc_weaponstart 0
++set g_balance_arc_weaponstartoverride -1
++set g_balance_arc_weaponthrowable 1
++// }}}
++// {{{ #21: Heavy Machine Gun
++set g_balance_hmg_ammo 0
++set g_balance_hmg_damage 0
++set g_balance_hmg_force 0
++set g_balance_hmg_refire 0
++set g_balance_hmg_reload_ammo 120
++set g_balance_hmg_reload_time 1
++set g_balance_hmg_solidpenetration 32
++set g_balance_hmg_spread_add 0.01
++set g_balance_hmg_spread_max 0.05
++set g_balance_hmg_spread_min 0.02
++set g_balance_hmg_switchdelay_drop 0.2
++set g_balance_hmg_switchdelay_raise 0.2
++set g_balance_hmg_weaponreplace ""
++set g_balance_hmg_weaponstart 0
++set g_balance_hmg_weaponstartoverride 0
++set g_balance_hmg_weaponthrowable 0
++// }}}
++// {{{ #22: Rocket Propelled Chainsaw
++set g_balance_rpc_ammo 10
++set g_balance_rpc_animtime 1
++set g_balance_rpc_damage 150
++set g_balance_rpc_damage2 500
++set g_balance_rpc_damageforcescale 2
++set g_balance_rpc_edgedamage 50
++set g_balance_rpc_force 400
++set g_balance_rpc_health 25
++set g_balance_rpc_lifetime 30
++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_speedaccel 5000
++set g_balance_rpc_switchdelay_drop 0.2
++set g_balance_rpc_switchdelay_raise 0.2
++set g_balance_rpc_weaponreplace ""
++set g_balance_rpc_weaponstart 0
++set g_balance_rpc_weaponstartoverride 0
++set g_balance_rpc_weaponthrowable 0
++// }}}
index 0000000000000000000000000000000000000000,2ec59d610cd558505e0c12598776a5336a36be2b..82549c8a449096aeb4fe9ae8c62922f0be5007f9
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,761 +1,802 @@@
+ // {{{ #1: Blaster
+ set g_balance_blaster_primary_animtime 0.2
+ set g_balance_blaster_primary_damage 25
+ set g_balance_blaster_primary_delay 0
+ set g_balance_blaster_primary_edgedamage 12.5
+ set g_balance_blaster_primary_force 300
+ set g_balance_blaster_primary_lifetime 5
+ set g_balance_blaster_primary_radius 70
+ set g_balance_blaster_primary_refire 0.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.2
+ set g_balance_blaster_secondary_damage 25
+ set g_balance_blaster_secondary_delay 0
+ set g_balance_blaster_secondary_edgedamage 12.5
+ set g_balance_blaster_secondary_force 300
+ set g_balance_blaster_secondary_lifetime 5
+ set g_balance_blaster_secondary_radius 70
+ set g_balance_blaster_secondary_refire 0.7
+ set g_balance_blaster_secondary_shotangle 0
+ set g_balance_blaster_secondary_speed 6000
+ set g_balance_blaster_secondary_spread 0
+ set g_balance_blaster_switchdelay_drop 0.15
+ set g_balance_blaster_switchdelay_raise 0.15
+ set g_balance_blaster_weaponreplace ""
+ set g_balance_blaster_weaponstart 1
+ set g_balance_blaster_weaponstartoverride -1
+ set g_balance_blaster_weaponthrowable 0
+ // }}}
+ // {{{ #2: Shockwave
+ set g_balance_shockwave_blast_animtime 0.3
+ set g_balance_shockwave_blast_damage 20
+ 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_forwardbias 50
+ set g_balance_shockwave_blast_force_zscale 2
+ 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_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_min 0
+ set g_balance_shockwave_blast_refire 0.75
+ set g_balance_shockwave_blast_splash_damage 15
+ set g_balance_shockwave_blast_splash_edgedamage 0
+ set g_balance_shockwave_blast_splash_force 100
+ set g_balance_shockwave_blast_splash_force_forwardbias 50
+ set g_balance_shockwave_blast_splash_multiplier_accuracy 0.5
+ set g_balance_shockwave_blast_splash_multiplier_distance 0.5
+ set g_balance_shockwave_blast_splash_multiplier_min 0
+ set g_balance_shockwave_blast_splash_radius 70
+ set g_balance_shockwave_blast_spread_max 120
+ set g_balance_shockwave_blast_spread_min 25
+ set g_balance_shockwave_melee_animtime 1.3
+ set g_balance_shockwave_melee_damage 80
+ set g_balance_shockwave_melee_delay 0.25
+ set g_balance_shockwave_melee_force 200
+ set g_balance_shockwave_melee_multihit 1
+ set g_balance_shockwave_melee_no_doubleslap 1
+ set g_balance_shockwave_melee_nonplayerdamage 40
+ set g_balance_shockwave_melee_range 120
+ set g_balance_shockwave_melee_refire 1.25
+ set g_balance_shockwave_melee_swing_side 120
+ set g_balance_shockwave_melee_swing_up 30
+ set g_balance_shockwave_melee_time 0.15
+ set g_balance_shockwave_melee_traces 10
+ set g_balance_shockwave_switchdelay_drop 0.2
+ set g_balance_shockwave_switchdelay_raise 0.2
+ set g_balance_shockwave_weaponreplace ""
+ set g_balance_shockwave_weaponstart 1
+ set g_balance_shockwave_weaponstartoverride -1
+ set g_balance_shockwave_weaponthrowable 0
+ // }}}
+ // {{{ #3: Machine Gun
+ set g_balance_machinegun_burst 3
+ set g_balance_machinegun_burst_ammo 3
+ set g_balance_machinegun_burst_animtime 0.3
+ set g_balance_machinegun_burst_refire 0.06
+ set g_balance_machinegun_burst_refire2 0.45
+ 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.125
+ set g_balance_machinegun_first_spread 0.03
+ set g_balance_machinegun_mode 1
+ set g_balance_machinegun_reload_ammo 60
+ set g_balance_machinegun_reload_time 2
+ set g_balance_machinegun_solidpenetration 13.1
+ set g_balance_machinegun_spread_add 0.012
+ set g_balance_machinegun_spread_max 0.05
+ set g_balance_machinegun_spread_min 0.02
+ set g_balance_machinegun_sustained_ammo 1
+ set g_balance_machinegun_sustained_damage 10
+ set g_balance_machinegun_sustained_force 5
+ set g_balance_machinegun_sustained_refire 0.1
+ set g_balance_machinegun_sustained_spread 0.03
+ set g_balance_machinegun_switchdelay_drop 0.2
+ set g_balance_machinegun_switchdelay_raise 0.2
+ set g_balance_machinegun_weaponreplace "arc"
+ set g_balance_machinegun_weaponstart 0
+ set g_balance_machinegun_weaponstartoverride -1
+ set g_balance_machinegun_weaponthrowable 1
+ // }}}
+ // {{{ #4: Mortar
+ 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_damageforcescale 0
+ set g_balance_mortar_primary_edgedamage 25
+ set g_balance_mortar_primary_force 250
+ 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 120
+ set g_balance_mortar_primary_refire 0.8
+ set g_balance_mortar_primary_remote_minbouncecnt 0
+ set g_balance_mortar_primary_speed 1900
+ set g_balance_mortar_primary_speed_up 225
+ set g_balance_mortar_primary_speed_z 0
+ set g_balance_mortar_primary_spread 0
+ set g_balance_mortar_primary_type 0
+ set g_balance_mortar_reload_ammo 0
+ set g_balance_mortar_reload_time 2
+ set g_balance_mortar_secondary_ammo 2
+ set g_balance_mortar_secondary_animtime 0.3
+ set g_balance_mortar_secondary_damage 60
+ set g_balance_mortar_secondary_damageforcescale 4
+ set g_balance_mortar_secondary_edgedamage 30
+ set g_balance_mortar_secondary_force 250
+ set g_balance_mortar_secondary_health 30
+ set g_balance_mortar_secondary_lifetime 5
+ set g_balance_mortar_secondary_lifetime_bounce 0.5
+ set g_balance_mortar_secondary_lifetime_stick 0
+ set g_balance_mortar_secondary_radius 120
+ set g_balance_mortar_secondary_refire 0.7
+ set g_balance_mortar_secondary_remote_detonateprimary 0
+ set g_balance_mortar_secondary_speed 1400
+ set g_balance_mortar_secondary_speed_up 150
+ set g_balance_mortar_secondary_speed_z 0
+ set g_balance_mortar_secondary_spread 0
+ set g_balance_mortar_secondary_type 1
+ set g_balance_mortar_switchdelay_drop 0.2
+ set g_balance_mortar_switchdelay_raise 0.2
+ set g_balance_mortar_weaponreplace ""
+ set g_balance_mortar_weaponstart 0
+ set g_balance_mortar_weaponstartoverride -1
+ set g_balance_mortar_weaponthrowable 1
+ // }}}
+ // {{{ #5: Mine Layer (MUTATOR WEAPON)
+ set g_balance_minelayer_ammo 4
+ set g_balance_minelayer_animtime 0.4
+ set g_balance_minelayer_damage 40
+ set g_balance_minelayer_damageforcescale 0
+ set g_balance_minelayer_detonatedelay -1
+ set g_balance_minelayer_edgedamage 20
+ set g_balance_minelayer_force 250
+ set g_balance_minelayer_health 15
+ set g_balance_minelayer_lifetime 10
+ set g_balance_minelayer_lifetime_countdown 0.5
+ set g_balance_minelayer_limit 3
+ set g_balance_minelayer_protection 0
+ set g_balance_minelayer_proximityradius 150
+ set g_balance_minelayer_radius 175
+ set g_balance_minelayer_refire 1.5
+ set g_balance_minelayer_reload_ammo 0
+ set g_balance_minelayer_reload_time 2
+ set g_balance_minelayer_remote_damage 45
+ set g_balance_minelayer_remote_edgedamage 40
+ set g_balance_minelayer_remote_force 300
+ set g_balance_minelayer_remote_radius 200
+ set g_balance_minelayer_speed 1000
+ set g_balance_minelayer_switchdelay_drop 0.2
+ set g_balance_minelayer_switchdelay_raise 0.2
+ set g_balance_minelayer_time 0.5
+ set g_balance_minelayer_weaponreplace ""
+ set g_balance_minelayer_weaponstart 0
+ set g_balance_minelayer_weaponstartoverride -1
+ set g_balance_minelayer_weaponthrowable 1
+ // }}}
+ // {{{ #6: Electro
+ set g_balance_electro_combo_comboradius 300
+ set g_balance_electro_combo_comboradius_thruwall 200
+ 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 150
+ 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.3
+ set g_balance_electro_primary_comboradius 300
+ 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
+ set g_balance_electro_primary_midaircombo_interval 0.1
+ set g_balance_electro_primary_midaircombo_radius 100
+ set g_balance_electro_primary_radius 100
+ set g_balance_electro_primary_refire 0.6
+ set g_balance_electro_primary_speed 2500
+ set g_balance_electro_primary_spread 0
+ set g_balance_electro_reload_ammo 0
+ set g_balance_electro_reload_time 2
+ set g_balance_electro_secondary_ammo 2
+ set g_balance_electro_secondary_animtime 0.2
+ set g_balance_electro_secondary_bouncefactor 0.3
+ 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_damagedbycontents 1
+ set g_balance_electro_secondary_damageforcescale 4
+ set g_balance_electro_secondary_edgedamage 20
+ set g_balance_electro_secondary_force 50
+ set g_balance_electro_secondary_health 5
+ set g_balance_electro_secondary_lifetime 4
+ set g_balance_electro_secondary_radius 150
+ set g_balance_electro_secondary_refire 0.2
+ 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_touchexplode 0
+ set g_balance_electro_switchdelay_drop 0.2
+ set g_balance_electro_switchdelay_raise 0.2
+ set g_balance_electro_weaponreplace ""
+ set g_balance_electro_weaponstart 0
+ set g_balance_electro_weaponstartoverride -1
+ set g_balance_electro_weaponthrowable 1
+ // }}}
+ // {{{ #7: Arc
+ set g_balance_arc_beam_ammo 0
+ set g_balance_arc_beam_animtime 0.2
+ set g_balance_arc_beam_botaimlifetime 0
+ set g_balance_arc_beam_botaimspeed 0
+ set g_balance_arc_beam_damage 150
+ 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 2000
+ set g_balance_arc_beam_healing_amax 200
+ set g_balance_arc_beam_healing_aps 50
+ set g_balance_arc_beam_healing_hmax 200
+ set g_balance_arc_beam_healing_hps 50
+ 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_returnspeed 8
+ set g_balance_arc_beam_tightness 0.5
+ set g_balance_arc_burst_ammo 0
+ set g_balance_arc_burst_damage 500
+ set g_balance_arc_burst_healing_aps 100
+ set g_balance_arc_burst_healing_hps 100
+ set g_balance_arc_cooldown 2.5
+ 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_burst_heat 5
+ set g_balance_arc_switchdelay_drop 0.3
+ set g_balance_arc_switchdelay_raise 0.3
+ set g_balance_arc_weaponreplace ""
+ set g_balance_arc_weaponstart 0
+ set g_balance_arc_weaponstartoverride -1
+ set g_balance_arc_weaponthrowable 1
+ // }}}
+ // {{{ #8: Crylink
+ 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 -50
+ set g_balance_crylink_primary_joindelay 0.1
+ set g_balance_crylink_primary_joinexplode 1
+ set g_balance_crylink_primary_joinexplode_damage 0
+ 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_middle_fadetime 5
+ set g_balance_crylink_primary_middle_lifetime 5
+ set g_balance_crylink_primary_other_fadetime 5
+ set g_balance_crylink_primary_other_lifetime 5
+ set g_balance_crylink_primary_radius 80
+ set g_balance_crylink_primary_refire 0.7
+ set g_balance_crylink_primary_shots 6
+ set g_balance_crylink_primary_speed 2000
+ set g_balance_crylink_primary_spread 0.08
+ set g_balance_crylink_reload_ammo 0
+ 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_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_joindelay 0
+ set g_balance_crylink_secondary_joinexplode 0
+ set g_balance_crylink_secondary_joinexplode_damage 0
+ set g_balance_crylink_secondary_joinexplode_edgedamage 0
+ set g_balance_crylink_secondary_joinexplode_force 0
+ set g_balance_crylink_secondary_joinexplode_radius 0
+ set g_balance_crylink_secondary_joinspread 0
+ set g_balance_crylink_secondary_linkexplode 1
+ 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_spreadtype 1
+ set g_balance_crylink_switchdelay_drop 0.2
+ set g_balance_crylink_switchdelay_raise 0.2
+ set g_balance_crylink_weaponreplace ""
+ set g_balance_crylink_weaponstart 0
+ set g_balance_crylink_weaponstartoverride -1
+ set g_balance_crylink_weaponthrowable 1
+ // }}}
+ // {{{ #9: Vortex
+ set g_balance_vortex_charge 1
+ 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_rot_pause 0
+ set g_balance_vortex_charge_rot_rate 0
+ set g_balance_vortex_charge_shot_multiplier 0
+ 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.6
+ 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
+ set g_balance_vortex_primary_damagefalloff_mindist 0
+ set g_balance_vortex_primary_force 400
+ set g_balance_vortex_primary_refire 1.5
+ set g_balance_vortex_reload_ammo 0
+ set g_balance_vortex_reload_time 2
+ set g_balance_vortex_secondary 0
+ set g_balance_vortex_secondary_ammo 2
+ set g_balance_vortex_secondary_animtime 0
+ set g_balance_vortex_secondary_chargepool 0
+ set g_balance_vortex_secondary_chargepool_pause_regen 1
+ set g_balance_vortex_secondary_chargepool_regen 0.15
+ set g_balance_vortex_secondary_damage 0
+ set g_balance_vortex_secondary_damagefalloff_forcehalflife 0
+ set g_balance_vortex_secondary_damagefalloff_halflife 0
+ set g_balance_vortex_secondary_damagefalloff_maxdist 0
+ set g_balance_vortex_secondary_damagefalloff_mindist 0
+ set g_balance_vortex_secondary_force 0
+ set g_balance_vortex_secondary_refire 0
+ set g_balance_vortex_switchdelay_drop 0.3
+ set g_balance_vortex_switchdelay_raise 0.25
+ set g_balance_vortex_weaponreplace ""
+ set g_balance_vortex_weaponstart 0
+ set g_balance_vortex_weaponstartoverride -1
+ set g_balance_vortex_weaponthrowable 1
+ // }}}
+ // {{{ #10: Hagar
+ set g_balance_hagar_primary_ammo 1
+ set g_balance_hagar_primary_damage 25
+ set g_balance_hagar_primary_damageforcescale 0
+ set g_balance_hagar_primary_edgedamage 12.5
+ set g_balance_hagar_primary_force 100
+ set g_balance_hagar_primary_health 15
+ 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 2500
+ set g_balance_hagar_primary_spread 0.03
+ set g_balance_hagar_reload_ammo 0
+ set g_balance_hagar_reload_time 2
+ set g_balance_hagar_secondary 1
+ set g_balance_hagar_secondary_ammo 1
+ set g_balance_hagar_secondary_damage 40
+ set g_balance_hagar_secondary_damageforcescale 0
+ set g_balance_hagar_secondary_edgedamage 20
+ set g_balance_hagar_secondary_force 75
+ set g_balance_hagar_secondary_health 15
+ set g_balance_hagar_secondary_lifetime_min 10
+ set g_balance_hagar_secondary_lifetime_rand 0
+ set g_balance_hagar_secondary_load 1
+ set g_balance_hagar_secondary_load_abort 0
+ set g_balance_hagar_secondary_load_animtime 0.2
+ set g_balance_hagar_secondary_load_hold 4
+ set g_balance_hagar_secondary_load_linkexplode 0
+ set g_balance_hagar_secondary_load_max 4
+ set g_balance_hagar_secondary_load_releasedeath 0
+ set g_balance_hagar_secondary_load_speed 0.5
+ set g_balance_hagar_secondary_load_spread 0.075
+ 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 2500
+ set g_balance_hagar_secondary_spread 0.05
+ set g_balance_hagar_switchdelay_drop 0.2
+ set g_balance_hagar_switchdelay_raise 0.2
+ set g_balance_hagar_weaponreplace ""
+ set g_balance_hagar_weaponstart 0
+ set g_balance_hagar_weaponstartoverride -1
+ set g_balance_hagar_weaponthrowable 1
+ // }}}
+ // {{{ #11: Devastator
+ set g_balance_devastator_ammo 4
+ set g_balance_devastator_animtime 0.4
+ set g_balance_devastator_damage 70
+ set g_balance_devastator_damageforcescale 1
+ set g_balance_devastator_detonatedelay 0.02
+ set g_balance_devastator_edgedamage 35
+ set g_balance_devastator_force 450
+ set g_balance_devastator_guidedelay 0.2
+ set g_balance_devastator_guidegoal 512
+ set g_balance_devastator_guiderate 70
+ set g_balance_devastator_guideratedelay 0.01
+ set g_balance_devastator_guidestop 0
+ set g_balance_devastator_health 30
+ set g_balance_devastator_lifetime 10
+ set g_balance_devastator_radius 110
+ set g_balance_devastator_refire 1.2
+ set g_balance_devastator_reload_ammo 0
+ set g_balance_devastator_reload_time 2
+ set g_balance_devastator_remote_damage 70
+ set g_balance_devastator_remote_edgedamage 35
+ set g_balance_devastator_remote_force 400
+ set g_balance_devastator_remote_jump_damage 40
+ set g_balance_devastator_remote_jump_radius 200
+ set g_balance_devastator_remote_jump_velocity_z_add 500
+ set g_balance_devastator_remote_jump_velocity_z_max 1500
+ set g_balance_devastator_remote_jump_velocity_z_min 500
+ set g_balance_devastator_remote_radius 110
+ set g_balance_devastator_speed 1300
+ set g_balance_devastator_speedaccel 1300
+ set g_balance_devastator_speedstart 1000
+ set g_balance_devastator_switchdelay_drop 0.3
+ set g_balance_devastator_switchdelay_raise 0.2
+ set g_balance_devastator_weaponreplace ""
+ set g_balance_devastator_weaponstart 0
+ set g_balance_devastator_weaponstartoverride -1
+ set g_balance_devastator_weaponthrowable 1
+ // }}}
+ // {{{ #12: Port-O-Launch
+ 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 1000
+ set g_balance_porto_secondary 1
+ set g_balance_porto_secondary_animtime 0.3
+ set g_balance_porto_secondary_lifetime 5
+ set g_balance_porto_secondary_refire 1.5
+ set g_balance_porto_secondary_speed 1000
+ set g_balance_porto_switchdelay_drop 0.2
+ set g_balance_porto_switchdelay_raise 0.2
+ set g_balance_porto_weaponreplace ""
+ set g_balance_porto_weaponstart 0
+ set g_balance_porto_weaponstartoverride -1
+ set g_balance_porto_weaponthrowable 1
+ // }}}
+ // {{{ #13: Vaporizer
+ set g_balance_vaporizer_primary_ammo 10
+ set g_balance_vaporizer_primary_animtime 0.3
+ set g_balance_vaporizer_primary_refire 1
+ set g_balance_vaporizer_reload_ammo 0
+ set g_balance_vaporizer_reload_time 0
+ set g_balance_vaporizer_secondary_ammo 0
+ set g_balance_vaporizer_secondary_animtime 0.2
+ set g_balance_vaporizer_secondary_damage 25
+ set g_balance_vaporizer_secondary_delay 0
+ set g_balance_vaporizer_secondary_edgedamage 12.5
+ set g_balance_vaporizer_secondary_force 400
+ set g_balance_vaporizer_secondary_lifetime 5
+ set g_balance_vaporizer_secondary_radius 70
+ set g_balance_vaporizer_secondary_refire 0.7
+ set g_balance_vaporizer_secondary_shotangle 0
+ set g_balance_vaporizer_secondary_speed 6000
+ set g_balance_vaporizer_secondary_spread 0
+ set g_balance_vaporizer_switchdelay_drop 0.2
+ 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
+ // }}}
+ // {{{ #14: Grappling Hook
+ set g_balance_hook_primary_ammo 5
+ set g_balance_hook_primary_animtime 0.3
+ set g_balance_hook_primary_hooked_ammo 5
+ set g_balance_hook_primary_hooked_time_free 2
+ set g_balance_hook_primary_hooked_time_max 0
+ set g_balance_hook_primary_refire 0
+ set g_balance_hook_secondary_animtime 0.3
+ set g_balance_hook_secondary_damage 25
+ set g_balance_hook_secondary_damageforcescale 0
+ set g_balance_hook_secondary_duration 1.5
+ set g_balance_hook_secondary_edgedamage 5
+ set g_balance_hook_secondary_force -2000
+ set g_balance_hook_secondary_gravity 5
+ set g_balance_hook_secondary_health 15
+ set g_balance_hook_secondary_lifetime 5
+ set g_balance_hook_secondary_power 3
+ set g_balance_hook_secondary_radius 500
+ set g_balance_hook_secondary_refire 3
+ set g_balance_hook_secondary_speed 0
+ set g_balance_hook_switchdelay_drop 0.2
+ set g_balance_hook_switchdelay_raise 0.2
+ set g_balance_hook_weaponreplace ""
+ set g_balance_hook_weaponstart 0
+ set g_balance_hook_weaponstartoverride -1
+ set g_balance_hook_weaponthrowable 1
+ // }}}
+ // {{{ #15: Heavy Laser Assault Cannon (MUTATOR WEAPON)
+ set g_balance_hlac_primary_ammo 1
+ set g_balance_hlac_primary_animtime 0.4
+ set g_balance_hlac_primary_damage 18
+ set g_balance_hlac_primary_edgedamage 9
+ set g_balance_hlac_primary_force 90
+ set g_balance_hlac_primary_lifetime 5
+ set g_balance_hlac_primary_radius 70
+ set g_balance_hlac_primary_refire 0.15
+ set g_balance_hlac_primary_speed 9000
+ set g_balance_hlac_primary_spread_add 0.0045
+ set g_balance_hlac_primary_spread_crouchmod 0.25
+ set g_balance_hlac_primary_spread_max 0.25
+ set g_balance_hlac_primary_spread_min 0.01
+ set g_balance_hlac_reload_ammo 0
+ set g_balance_hlac_reload_time 2
+ set g_balance_hlac_secondary 1
+ set g_balance_hlac_secondary_ammo 10
+ set g_balance_hlac_secondary_animtime 0.3
+ set g_balance_hlac_secondary_damage 15
+ set g_balance_hlac_secondary_edgedamage 7.5
+ set g_balance_hlac_secondary_force 90
+ set g_balance_hlac_secondary_lifetime 5
+ set g_balance_hlac_secondary_radius 70
+ set g_balance_hlac_secondary_refire 1
+ set g_balance_hlac_secondary_shots 6
+ set g_balance_hlac_secondary_speed 9000
+ set g_balance_hlac_secondary_spread 0.15
+ set g_balance_hlac_secondary_spread_crouchmod 0.5
+ set g_balance_hlac_switchdelay_drop 0.2
+ set g_balance_hlac_switchdelay_raise 0.2
+ set g_balance_hlac_weaponreplace ""
+ set g_balance_hlac_weaponstart 0
+ set g_balance_hlac_weaponstartoverride -1
+ set g_balance_hlac_weaponthrowable 1
+ // }}}
+ // {{{ #16: @!#%'n Tuba
+ set g_balance_tuba_animtime 0.05
+ set g_balance_tuba_attenuation 0.5
+ set g_balance_tuba_damage 5
+ set g_balance_tuba_edgedamage 0
+ set g_balance_tuba_fadetime 0.25
+ set g_balance_tuba_force 40
+ set g_balance_tuba_pitchstep 6
+ set g_balance_tuba_radius 200
+ set g_balance_tuba_refire 0.05
+ set g_balance_tuba_switchdelay_drop 0.2
+ set g_balance_tuba_switchdelay_raise 0.2
+ set g_balance_tuba_volume 1
+ set g_balance_tuba_weaponreplace ""
+ set g_balance_tuba_weaponstart 0
+ set g_balance_tuba_weaponstartoverride -1
+ set g_balance_tuba_weaponthrowable 1
+ // }}}
+ // {{{ #17: Rifle (MUTATOR WEAPON)
+ set g_balance_rifle_bursttime 0
+ set g_balance_rifle_primary_ammo 10
+ set g_balance_rifle_primary_animtime 0.4
+ set g_balance_rifle_primary_bullethail 0
+ set g_balance_rifle_primary_burstcost 0
+ set g_balance_rifle_primary_damage 80
+ set g_balance_rifle_primary_force 100
+ set g_balance_rifle_primary_refire 1.2
+ set g_balance_rifle_primary_shots 1
+ set g_balance_rifle_primary_solidpenetration 62.2
+ set g_balance_rifle_primary_spread 0
+ set g_balance_rifle_primary_tracer 1
+ set g_balance_rifle_reload_ammo 80
+ set g_balance_rifle_reload_time 2
+ set g_balance_rifle_secondary 1
+ set g_balance_rifle_secondary_ammo 10
+ set g_balance_rifle_secondary_animtime 0.3
+ set g_balance_rifle_secondary_bullethail 0
+ set g_balance_rifle_secondary_burstcost 0
+ set g_balance_rifle_secondary_damage 20
+ set g_balance_rifle_secondary_force 50
+ set g_balance_rifle_secondary_refire 0.9
+ set g_balance_rifle_secondary_reload 0
+ set g_balance_rifle_secondary_shots 4
+ set g_balance_rifle_secondary_solidpenetration 15.5
+ set g_balance_rifle_secondary_spread 0.04
+ set g_balance_rifle_secondary_tracer 0
+ set g_balance_rifle_switchdelay_drop 0.2
+ set g_balance_rifle_switchdelay_raise 0.2
+ set g_balance_rifle_weaponreplace ""
+ set g_balance_rifle_weaponstart 0
+ set g_balance_rifle_weaponstartoverride -1
+ set g_balance_rifle_weaponthrowable 1
+ // }}}
+ // {{{ #18: Fireball
+ set g_balance_fireball_primary_animtime 0.2
+ set g_balance_fireball_primary_bfgdamage 100
+ set g_balance_fireball_primary_bfgforce 0
+ set g_balance_fireball_primary_bfgradius 1000
+ set g_balance_fireball_primary_damage 200
+ set g_balance_fireball_primary_damageforcescale 0
+ set g_balance_fireball_primary_edgedamage 50
+ set g_balance_fireball_primary_force 600
+ set g_balance_fireball_primary_health 0
+ set g_balance_fireball_primary_laserburntime 0.5
+ set g_balance_fireball_primary_laserdamage 80
+ set g_balance_fireball_primary_laseredgedamage 20
+ set g_balance_fireball_primary_laserradius 256
+ set g_balance_fireball_primary_lifetime 15
+ set g_balance_fireball_primary_radius 200
+ set g_balance_fireball_primary_refire 2
+ set g_balance_fireball_primary_refire2 0
+ set g_balance_fireball_primary_speed 1200
+ set g_balance_fireball_primary_spread 0
+ set g_balance_fireball_secondary_animtime 0.3
+ set g_balance_fireball_secondary_damage 40
+ set g_balance_fireball_secondary_damageforcescale 4
+ set g_balance_fireball_secondary_damagetime 5
+ set g_balance_fireball_secondary_laserburntime 0.5
+ set g_balance_fireball_secondary_laserdamage 50
+ set g_balance_fireball_secondary_laseredgedamage 20
+ set g_balance_fireball_secondary_laserradius 110
+ set g_balance_fireball_secondary_lifetime 7
+ set g_balance_fireball_secondary_refire 1.5
+ set g_balance_fireball_secondary_speed 900
+ set g_balance_fireball_secondary_speed_up 100
+ set g_balance_fireball_secondary_speed_z 0
+ set g_balance_fireball_secondary_spread 0
+ set g_balance_fireball_switchdelay_drop 0.2
+ set g_balance_fireball_switchdelay_raise 0.2
+ set g_balance_fireball_weaponreplace ""
+ set g_balance_fireball_weaponstart 0
+ set g_balance_fireball_weaponstartoverride -1
+ set g_balance_fireball_weaponthrowable 0
+ // }}}
+ // {{{ #19: T.A.G. Seeker (MUTATOR WEAPON)
+ set g_balance_seeker_flac_ammo 1
+ set g_balance_seeker_flac_animtime 0.1
+ set g_balance_seeker_flac_damage 15
+ set g_balance_seeker_flac_edgedamage 10
+ set g_balance_seeker_flac_force 50
+ set g_balance_seeker_flac_lifetime 0.1
+ set g_balance_seeker_flac_lifetime_rand 0.05
+ set g_balance_seeker_flac_radius 100
+ set g_balance_seeker_flac_refire 0.1
+ set g_balance_seeker_flac_speed 3000
+ set g_balance_seeker_flac_speed_up 1000
+ set g_balance_seeker_flac_speed_z 0
+ set g_balance_seeker_flac_spread 0.4
+ set g_balance_seeker_missile_accel 1400
+ set g_balance_seeker_missile_ammo 2
+ set g_balance_seeker_missile_animtime 0.2
+ set g_balance_seeker_missile_count 3
+ set g_balance_seeker_missile_damage 30
+ set g_balance_seeker_missile_damageforcescale 4
+ set g_balance_seeker_missile_decel 1400
+ set g_balance_seeker_missile_delay 0.25
+ set g_balance_seeker_missile_edgedamage 10
+ set g_balance_seeker_missile_force 150
+ set g_balance_seeker_missile_health 5
+ set g_balance_seeker_missile_lifetime 15
+ set g_balance_seeker_missile_proxy 0
+ set g_balance_seeker_missile_proxy_delay 0.2
+ set g_balance_seeker_missile_proxy_maxrange 45
+ set g_balance_seeker_missile_radius 80
+ set g_balance_seeker_missile_refire 0.5
+ set g_balance_seeker_missile_smart 1
+ set g_balance_seeker_missile_smart_mindist 800
+ set g_balance_seeker_missile_smart_trace_max 2500
+ set g_balance_seeker_missile_smart_trace_min 1000
+ set g_balance_seeker_missile_speed 700
+ set g_balance_seeker_missile_speed_max 1300
+ set g_balance_seeker_missile_speed_up 300
+ set g_balance_seeker_missile_speed_z 0
+ set g_balance_seeker_missile_spread 0
+ set g_balance_seeker_missile_turnrate 0.65
+ set g_balance_seeker_reload_ammo 0
+ set g_balance_seeker_reload_time 2
+ set g_balance_seeker_switchdelay_drop 0.2
+ set g_balance_seeker_switchdelay_raise 0.2
+ set g_balance_seeker_tag_ammo 1
+ set g_balance_seeker_tag_animtime 0.2
+ set g_balance_seeker_tag_damageforcescale 4
+ set g_balance_seeker_tag_health 5
+ set g_balance_seeker_tag_lifetime 15
+ set g_balance_seeker_tag_refire 0.75
+ set g_balance_seeker_tag_speed 5000
+ set g_balance_seeker_tag_spread 0
+ set g_balance_seeker_tag_tracker_lifetime 10
+ set g_balance_seeker_type 0
+ set g_balance_seeker_weaponreplace ""
+ set g_balance_seeker_weaponstart 0
+ set g_balance_seeker_weaponstartoverride -1
+ set g_balance_seeker_weaponthrowable 1
+ // }}}
+ // {{{ #20: Shotgun (MUTATOR WEAPON)
+ 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_damage 4
+ set g_balance_shotgun_primary_force 15
+ set g_balance_shotgun_primary_refire 0.75
+ set g_balance_shotgun_primary_solidpenetration 3.8
+ set g_balance_shotgun_primary_spread 0.12
+ 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
+ set g_balance_shotgun_secondary_damage 80
+ set g_balance_shotgun_secondary_force 200
+ set g_balance_shotgun_secondary_melee_delay 0.25
+ set g_balance_shotgun_secondary_melee_multihit 1
+ set g_balance_shotgun_secondary_melee_no_doubleslap 1
+ set g_balance_shotgun_secondary_melee_nonplayerdamage 40
+ set g_balance_shotgun_secondary_melee_range 120
+ set g_balance_shotgun_secondary_melee_swing_side 120
+ 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 ""
+ set g_balance_shotgun_weaponstart 0
+ set g_balance_shotgun_weaponstartoverride -1
+ set g_balance_shotgun_weaponthrowable 1
+ // }}}
++// {{{ #21: Heavy Machine Gun
++set g_balance_hmg_ammo 0
++set g_balance_hmg_damage 0
++set g_balance_hmg_force 0
++set g_balance_hmg_refire 0
++set g_balance_hmg_reload_ammo 120
++set g_balance_hmg_reload_time 1
++set g_balance_hmg_solidpenetration 32
++set g_balance_hmg_spread_add 0.01
++set g_balance_hmg_spread_max 0.05
++set g_balance_hmg_spread_min 0.02
++set g_balance_hmg_switchdelay_drop 0.2
++set g_balance_hmg_switchdelay_raise 0.2
++set g_balance_hmg_weaponreplace ""
++set g_balance_hmg_weaponstart 0
++set g_balance_hmg_weaponstartoverride 0
++set g_balance_hmg_weaponthrowable 0
++// }}}
++// {{{ #22: Rocket Propelled Chainsaw
++set g_balance_rpc_ammo 10
++set g_balance_rpc_animtime 1
++set g_balance_rpc_damage 150
++set g_balance_rpc_damage2 500
++set g_balance_rpc_damageforcescale 2
++set g_balance_rpc_edgedamage 50
++set g_balance_rpc_force 400
++set g_balance_rpc_health 25
++set g_balance_rpc_lifetime 30
++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_speedaccel 5000
++set g_balance_rpc_switchdelay_drop 0.2
++set g_balance_rpc_switchdelay_raise 0.2
++set g_balance_rpc_weaponreplace ""
++set g_balance_rpc_weaponstart 0
++set g_balance_rpc_weaponstartoverride 0
++set g_balance_rpc_weaponthrowable 0
++// }}}
diff --cc bal-wep-xdf.cfg
index 0000000000000000000000000000000000000000,ef8035ea72180434c1d70e7848b97ace27d8bd9d..be087a5d7e46eb40686bb8e4da5f06b8e8ad72e2
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,763 +1,804 @@@
+ // {{{ #1: Blaster
+ set g_balance_blaster_primary_animtime 0.3
+ set g_balance_blaster_primary_damage 25
+ 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_lifetime 5
+ set g_balance_blaster_primary_radius 60
+ set g_balance_blaster_primary_refire 0.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_damage 25
+ set g_balance_blaster_secondary_delay 0
+ set g_balance_blaster_secondary_edgedamage 12.5
+ set g_balance_blaster_secondary_force 300
+ set g_balance_blaster_secondary_force_zscale 1.2
+ set g_balance_blaster_secondary_lifetime 5
+ set g_balance_blaster_secondary_radius 70
+ set g_balance_blaster_secondary_refire 0.7
+ set g_balance_blaster_secondary_shotangle 0
+ set g_balance_blaster_secondary_speed 6000
+ set g_balance_blaster_secondary_spread 0
+ set g_balance_blaster_switchdelay_drop 0
+ set g_balance_blaster_switchdelay_raise 0
+ set g_balance_blaster_weaponreplace ""
+ set g_balance_blaster_weaponstart 0
+ set g_balance_blaster_weaponstartoverride -1
+ 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_damage 4
+ set g_balance_shotgun_primary_force 15
+ set g_balance_shotgun_primary_refire 0.75
+ set g_balance_shotgun_primary_solidpenetration 3.8
+ set g_balance_shotgun_primary_spread 0.12
+ 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
+ set g_balance_shotgun_secondary_damage 80
+ set g_balance_shotgun_secondary_force 200
+ set g_balance_shotgun_secondary_melee_delay 0.25
+ set g_balance_shotgun_secondary_melee_multihit 1
+ set g_balance_shotgun_secondary_melee_no_doubleslap 1
+ set g_balance_shotgun_secondary_melee_nonplayerdamage 40
+ set g_balance_shotgun_secondary_melee_range 120
+ set g_balance_shotgun_secondary_melee_swing_side 120
+ 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
+ set g_balance_shotgun_switchdelay_raise 0
+ set g_balance_shotgun_weaponreplace ""
+ set g_balance_shotgun_weaponstart 0
+ set g_balance_shotgun_weaponstartoverride -1
+ set g_balance_shotgun_weaponthrowable 1
+ // }}}
+ // {{{ #3: Machine Gun
+ set g_balance_machinegun_burst 3
+ set g_balance_machinegun_burst_ammo 3
+ set g_balance_machinegun_burst_animtime 0.3
+ set g_balance_machinegun_burst_refire 0.06
+ set g_balance_machinegun_burst_refire2 0.45
+ 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_spread 0.03
+ set g_balance_machinegun_mode 1
+ set g_balance_machinegun_reload_ammo 0
+ set g_balance_machinegun_reload_time 2
+ set g_balance_machinegun_solidpenetration 13.1
+ 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_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_weaponstartoverride -1
+ set g_balance_machinegun_weaponthrowable 1
+ // }}}
+ // {{{ #4: Mortar
+ 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_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_lifetime 5
+ set g_balance_mortar_primary_lifetime_stick 0
+ set g_balance_mortar_primary_radius 100
+ set g_balance_mortar_primary_refire 0.7
+ set g_balance_mortar_primary_remote_minbouncecnt 0
+ set g_balance_mortar_primary_speed 2000
+ set g_balance_mortar_primary_speed_up 200
+ set g_balance_mortar_primary_speed_z 0
+ set g_balance_mortar_primary_spread 0
+ set g_balance_mortar_primary_type 0
+ set g_balance_mortar_reload_ammo 0
+ set g_balance_mortar_reload_time 2
+ set g_balance_mortar_secondary_ammo 2
+ set g_balance_mortar_secondary_animtime 0.5
+ 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_lifetime 8
+ set g_balance_mortar_secondary_lifetime_bounce 0.5
+ set g_balance_mortar_secondary_lifetime_stick 0
+ set g_balance_mortar_secondary_radius 200
+ set g_balance_mortar_secondary_refire 0.7
+ set g_balance_mortar_secondary_remote_detonateprimary 0
+ set g_balance_mortar_secondary_speed 800
+ set g_balance_mortar_secondary_speed_up 0
+ set g_balance_mortar_secondary_speed_z 200
+ set g_balance_mortar_secondary_spread 0
+ set g_balance_mortar_secondary_type 1
+ set g_balance_mortar_switchdelay_drop 0
+ set g_balance_mortar_switchdelay_raise 0
+ set g_balance_mortar_weaponreplace ""
+ set g_balance_mortar_weaponstart 0
+ set g_balance_mortar_weaponstartoverride -1
+ set g_balance_mortar_weaponthrowable 1
+ // }}}
+ // {{{ #5: Mine Layer (MUTATOR WEAPON)
+ set g_balance_minelayer_ammo 4
+ set g_balance_minelayer_animtime 0.4
+ set g_balance_minelayer_damage 40
+ set g_balance_minelayer_damageforcescale 0
+ set g_balance_minelayer_detonatedelay -1
+ set g_balance_minelayer_edgedamage 20
+ set g_balance_minelayer_force 250
+ set g_balance_minelayer_health 15
+ set g_balance_minelayer_lifetime 10
+ set g_balance_minelayer_lifetime_countdown 0.5
+ set g_balance_minelayer_limit 3
+ set g_balance_minelayer_protection 0
+ set g_balance_minelayer_proximityradius 150
+ set g_balance_minelayer_radius 175
+ set g_balance_minelayer_refire 1.5
+ set g_balance_minelayer_reload_ammo 0
+ set g_balance_minelayer_reload_time 2
+ set g_balance_minelayer_remote_damage 45
+ set g_balance_minelayer_remote_edgedamage 40
+ set g_balance_minelayer_remote_force 300
+ set g_balance_minelayer_remote_radius 200
+ set g_balance_minelayer_speed 1000
+ set g_balance_minelayer_switchdelay_drop 0
+ set g_balance_minelayer_switchdelay_raise 0
+ set g_balance_minelayer_time 0.5
+ set g_balance_minelayer_weaponreplace ""
+ set g_balance_minelayer_weaponstart 0
+ set g_balance_minelayer_weaponstartoverride -1
+ 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_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_comboradius 150
+ set g_balance_electro_primary_damage 55
+ set g_balance_electro_primary_edgedamage 27.5
+ 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 100
+ set g_balance_electro_primary_radius 100
+ set g_balance_electro_primary_refire 0.6
+ set g_balance_electro_primary_speed 2500
+ set g_balance_electro_primary_spread 0
+ set g_balance_electro_reload_ammo 0
+ set g_balance_electro_reload_time 2
+ set g_balance_electro_secondary_ammo 2
+ 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_damagedbycontents 1
+ set g_balance_electro_secondary_damageforcescale 4
+ set g_balance_electro_secondary_edgedamage 20
+ set g_balance_electro_secondary_force 200
+ set g_balance_electro_secondary_health 5
+ set g_balance_electro_secondary_lifetime 3
+ set g_balance_electro_secondary_radius 150
+ set g_balance_electro_secondary_refire 0.2
+ 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_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_weaponstart 0
+ set g_balance_electro_weaponstartoverride -1
+ set g_balance_electro_weaponthrowable 1
+ // }}}
+ // {{{ #7: Crylink
+ 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_joindelay 0.1
+ set g_balance_crylink_primary_joinexplode 1
+ set g_balance_crylink_primary_joinexplode_damage 0
+ 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_middle_fadetime 5
+ set g_balance_crylink_primary_middle_lifetime 5
+ set g_balance_crylink_primary_other_fadetime 5
+ set g_balance_crylink_primary_other_lifetime 5
+ set g_balance_crylink_primary_radius 80
+ set g_balance_crylink_primary_refire 0.7
+ set g_balance_crylink_primary_shots 6
+ set g_balance_crylink_primary_speed 2000
+ set g_balance_crylink_primary_spread 0.08
+ set g_balance_crylink_reload_ammo 0
+ 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_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_joindelay 0
+ set g_balance_crylink_secondary_joinexplode 0
+ set g_balance_crylink_secondary_joinexplode_damage 0
+ set g_balance_crylink_secondary_joinexplode_edgedamage 0
+ set g_balance_crylink_secondary_joinexplode_force 0
+ set g_balance_crylink_secondary_joinexplode_radius 0
+ set g_balance_crylink_secondary_joinspread 0
+ set g_balance_crylink_secondary_linkexplode 1
+ 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_spreadtype 1
+ set g_balance_crylink_switchdelay_drop 0
+ set g_balance_crylink_switchdelay_raise 0
+ set g_balance_crylink_weaponreplace ""
+ set g_balance_crylink_weaponstart 0
+ 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_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_rot_pause 0
+ set g_balance_vortex_charge_rot_rate 0
+ set g_balance_vortex_charge_shot_multiplier 0
+ 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_damagefalloff_forcehalflife 0
+ set g_balance_vortex_primary_damagefalloff_halflife 0
+ set g_balance_vortex_primary_damagefalloff_maxdist 0
+ set g_balance_vortex_primary_damagefalloff_mindist 0
+ set g_balance_vortex_primary_force 400
+ set g_balance_vortex_primary_refire 1.5
+ set g_balance_vortex_reload_ammo 0
+ set g_balance_vortex_reload_time 2
+ set g_balance_vortex_secondary 0
+ set g_balance_vortex_secondary_ammo 2
+ set g_balance_vortex_secondary_animtime 0
+ set g_balance_vortex_secondary_chargepool 0
+ set g_balance_vortex_secondary_chargepool_pause_regen 1
+ set g_balance_vortex_secondary_chargepool_regen 0.15
+ set g_balance_vortex_secondary_damage 0
+ set g_balance_vortex_secondary_damagefalloff_forcehalflife 0
+ set g_balance_vortex_secondary_damagefalloff_halflife 0
+ set g_balance_vortex_secondary_damagefalloff_maxdist 0
+ set g_balance_vortex_secondary_damagefalloff_mindist 0
+ set g_balance_vortex_secondary_force 0
+ set g_balance_vortex_secondary_refire 0
+ set g_balance_vortex_switchdelay_drop 0
+ set g_balance_vortex_switchdelay_raise 0
+ set g_balance_vortex_weaponreplace ""
+ set g_balance_vortex_weaponstart 0
+ set g_balance_vortex_weaponstartoverride -1
+ set g_balance_vortex_weaponthrowable 1
+ // }}}
+ // {{{ #9: Hagar
+ set g_balance_hagar_primary_ammo 1
+ set g_balance_hagar_primary_damage 25
+ set g_balance_hagar_primary_damageforcescale 0
+ set g_balance_hagar_primary_edgedamage 12.5
+ set g_balance_hagar_primary_force 92
+ set g_balance_hagar_primary_health 15
+ 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_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_damageforcescale 0
+ set g_balance_hagar_secondary_edgedamage 20
+ set g_balance_hagar_secondary_force 75
+ set g_balance_hagar_secondary_health 15
+ set g_balance_hagar_secondary_lifetime_min 10
+ set g_balance_hagar_secondary_lifetime_rand 0
+ set g_balance_hagar_secondary_load 1
+ set g_balance_hagar_secondary_load_abort 1
+ set g_balance_hagar_secondary_load_animtime 0.2
+ set g_balance_hagar_secondary_load_hold 4
+ set g_balance_hagar_secondary_load_linkexplode 0
+ set g_balance_hagar_secondary_load_max 4
+ set g_balance_hagar_secondary_load_releasedeath 0
+ set g_balance_hagar_secondary_load_speed 0.5
+ set g_balance_hagar_secondary_load_spread 0.075
+ 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_switchdelay_drop 0
+ set g_balance_hagar_switchdelay_raise 0
+ set g_balance_hagar_weaponreplace ""
+ set g_balance_hagar_weaponstart 0
+ set g_balance_hagar_weaponstartoverride -1
+ set g_balance_hagar_weaponthrowable 1
+ // }}}
+ // {{{ #10: Devastator
+ 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_edgedamage 40
+ set g_balance_devastator_force 350
+ set g_balance_devastator_guidedelay 0.2
+ 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_lifetime 100
+ set g_balance_devastator_radius 110
+ set g_balance_devastator_refire 0.9
+ set g_balance_devastator_reload_ammo 0
+ set g_balance_devastator_reload_time 2
+ 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_radius 0
+ set g_balance_devastator_remote_jump_velocity_z_add 400
+ 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
+ set g_balance_devastator_speed 1000
+ set g_balance_devastator_speedaccel 0
+ set g_balance_devastator_speedstart 1000
+ set g_balance_devastator_switchdelay_drop 0
+ set g_balance_devastator_switchdelay_raise 0
+ set g_balance_devastator_weaponreplace ""
+ set g_balance_devastator_weaponstart 0
+ set g_balance_devastator_weaponstartoverride -1
+ set g_balance_devastator_weaponthrowable 1
+ // }}}
+ // {{{ #11: Port-O-Launch
+ 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_secondary 1
+ set g_balance_porto_secondary_animtime 0.3
+ set g_balance_porto_secondary_lifetime 5
+ set g_balance_porto_secondary_refire 1.5
+ set g_balance_porto_secondary_speed 1000
+ set g_balance_porto_switchdelay_drop 0
+ set g_balance_porto_switchdelay_raise 0
+ set g_balance_porto_weaponreplace ""
+ set g_balance_porto_weaponstart 0
+ set g_balance_porto_weaponstartoverride -1
+ 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_refire 1
+ set g_balance_vaporizer_reload_ammo 0
+ set g_balance_vaporizer_reload_time 0
+ set g_balance_vaporizer_secondary_ammo 0
+ set g_balance_vaporizer_secondary_animtime 0.2
+ set g_balance_vaporizer_secondary_damage 25
+ set g_balance_vaporizer_secondary_delay 0
+ set g_balance_vaporizer_secondary_edgedamage 12.5
+ set g_balance_vaporizer_secondary_force 400
+ set g_balance_vaporizer_secondary_lifetime 5
+ set g_balance_vaporizer_secondary_radius 70
+ set g_balance_vaporizer_secondary_refire 0.7
+ set g_balance_vaporizer_secondary_shotangle 0
+ set g_balance_vaporizer_secondary_speed 6000
+ set g_balance_vaporizer_secondary_spread 0
+ set g_balance_vaporizer_switchdelay_drop 0
+ 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
+ // }}}
+ // {{{ #13: Grappling Hook
+ set g_balance_hook_primary_ammo 5
+ set g_balance_hook_primary_animtime 0.3
+ set g_balance_hook_primary_hooked_ammo 5
+ set g_balance_hook_primary_hooked_time_free 2
+ set g_balance_hook_primary_hooked_time_max 0
+ set g_balance_hook_primary_refire 0.2
+ set g_balance_hook_secondary_animtime 0.3
+ set g_balance_hook_secondary_damage 25
+ set g_balance_hook_secondary_damageforcescale 0
+ set g_balance_hook_secondary_duration 1.5
+ set g_balance_hook_secondary_edgedamage 5
+ set g_balance_hook_secondary_force -2000
+ set g_balance_hook_secondary_gravity 5
+ set g_balance_hook_secondary_health 15
+ set g_balance_hook_secondary_lifetime 5
+ set g_balance_hook_secondary_power 3
+ set g_balance_hook_secondary_radius 500
+ set g_balance_hook_secondary_refire 3
+ set g_balance_hook_secondary_speed 0
+ set g_balance_hook_switchdelay_drop 0
+ set g_balance_hook_switchdelay_raise 0
+ set g_balance_hook_weaponreplace ""
+ set g_balance_hook_weaponstart 0
+ set g_balance_hook_weaponstartoverride -1
+ set g_balance_hook_weaponthrowable 1
+ // }}}
+ // {{{ #14: Heavy Laser Assault Cannon (MUTATOR WEAPON)
+ set g_balance_hlac_primary_ammo 1
+ set g_balance_hlac_primary_animtime 0.4
+ set g_balance_hlac_primary_damage 18
+ set g_balance_hlac_primary_edgedamage 9
+ set g_balance_hlac_primary_force 90
+ set g_balance_hlac_primary_lifetime 5
+ set g_balance_hlac_primary_radius 70
+ set g_balance_hlac_primary_refire 0.15
+ set g_balance_hlac_primary_speed 9000
+ set g_balance_hlac_primary_spread_add 0.0045
+ set g_balance_hlac_primary_spread_crouchmod 0.25
+ set g_balance_hlac_primary_spread_max 0.25
+ set g_balance_hlac_primary_spread_min 0.01
+ set g_balance_hlac_reload_ammo 0
+ set g_balance_hlac_reload_time 2
+ set g_balance_hlac_secondary 1
+ set g_balance_hlac_secondary_ammo 10
+ set g_balance_hlac_secondary_animtime 0.3
+ set g_balance_hlac_secondary_damage 15
+ set g_balance_hlac_secondary_edgedamage 7.5
+ set g_balance_hlac_secondary_force 90
+ set g_balance_hlac_secondary_lifetime 5
+ set g_balance_hlac_secondary_radius 70
+ set g_balance_hlac_secondary_refire 1
+ set g_balance_hlac_secondary_shots 6
+ set g_balance_hlac_secondary_speed 9000
+ set g_balance_hlac_secondary_spread 0.15
+ set g_balance_hlac_secondary_spread_crouchmod 0.5
+ set g_balance_hlac_switchdelay_drop 0
+ set g_balance_hlac_switchdelay_raise 0
+ set g_balance_hlac_weaponreplace ""
+ set g_balance_hlac_weaponstart 0
+ set g_balance_hlac_weaponstartoverride -1
+ set g_balance_hlac_weaponthrowable 1
+ // }}}
+ // {{{ #15: @!#%'n Tuba
+ set g_balance_tuba_animtime 0.05
+ set g_balance_tuba_attenuation 0.5
+ set g_balance_tuba_damage 5
+ set g_balance_tuba_edgedamage 0
+ set g_balance_tuba_fadetime 0.25
+ set g_balance_tuba_force 40
+ set g_balance_tuba_pitchstep 6
+ set g_balance_tuba_radius 200
+ set g_balance_tuba_refire 0.05
+ set g_balance_tuba_switchdelay_drop 0
+ set g_balance_tuba_switchdelay_raise 0
+ set g_balance_tuba_volume 1
+ set g_balance_tuba_weaponreplace ""
+ set g_balance_tuba_weaponstart 0
+ set g_balance_tuba_weaponstartoverride -1
+ set g_balance_tuba_weaponthrowable 1
+ // }}}
+ // {{{ #16: Rifle (MUTATOR WEAPON)
+ set g_balance_rifle_bursttime 0
+ set g_balance_rifle_primary_ammo 10
+ set g_balance_rifle_primary_animtime 0.4
+ set g_balance_rifle_primary_bullethail 0
+ set g_balance_rifle_primary_burstcost 0
+ set g_balance_rifle_primary_damage 80
+ set g_balance_rifle_primary_force 100
+ set g_balance_rifle_primary_refire 1.2
+ set g_balance_rifle_primary_shots 1
+ set g_balance_rifle_primary_solidpenetration 62.2
+ set g_balance_rifle_primary_spread 0
+ set g_balance_rifle_primary_tracer 1
+ set g_balance_rifle_reload_ammo 80
+ set g_balance_rifle_reload_time 2
+ set g_balance_rifle_secondary 1
+ set g_balance_rifle_secondary_ammo 10
+ set g_balance_rifle_secondary_animtime 0.3
+ set g_balance_rifle_secondary_bullethail 0
+ set g_balance_rifle_secondary_burstcost 0
+ set g_balance_rifle_secondary_damage 20
+ set g_balance_rifle_secondary_force 50
+ set g_balance_rifle_secondary_refire 0.9
+ set g_balance_rifle_secondary_reload 0
+ set g_balance_rifle_secondary_shots 4
+ set g_balance_rifle_secondary_solidpenetration 15.5
+ set g_balance_rifle_secondary_spread 0.04
+ set g_balance_rifle_secondary_tracer 0
+ set g_balance_rifle_switchdelay_drop 0
+ set g_balance_rifle_switchdelay_raise 0
+ set g_balance_rifle_weaponreplace ""
+ set g_balance_rifle_weaponstart 0
+ set g_balance_rifle_weaponstartoverride -1
+ set g_balance_rifle_weaponthrowable 1
+ // }}}
+ // {{{ #17: Fireball
+ set g_balance_fireball_primary_animtime 0.4
+ set g_balance_fireball_primary_bfgdamage 100
+ set g_balance_fireball_primary_bfgforce 0
+ set g_balance_fireball_primary_bfgradius 1000
+ set g_balance_fireball_primary_damage 200
+ set g_balance_fireball_primary_damageforcescale 0
+ set g_balance_fireball_primary_edgedamage 50
+ set g_balance_fireball_primary_force 600
+ set g_balance_fireball_primary_health 0
+ set g_balance_fireball_primary_laserburntime 0.5
+ set g_balance_fireball_primary_laserdamage 80
+ set g_balance_fireball_primary_laseredgedamage 20
+ set g_balance_fireball_primary_laserradius 256
+ set g_balance_fireball_primary_lifetime 15
+ set g_balance_fireball_primary_radius 200
+ set g_balance_fireball_primary_refire 2
+ set g_balance_fireball_primary_refire2 0
+ set g_balance_fireball_primary_speed 1200
+ set g_balance_fireball_primary_spread 0
+ set g_balance_fireball_secondary_animtime 0.3
+ set g_balance_fireball_secondary_damage 40
+ set g_balance_fireball_secondary_damageforcescale 4
+ set g_balance_fireball_secondary_damagetime 5
+ set g_balance_fireball_secondary_laserburntime 0.5
+ set g_balance_fireball_secondary_laserdamage 50
+ set g_balance_fireball_secondary_laseredgedamage 20
+ set g_balance_fireball_secondary_laserradius 110
+ set g_balance_fireball_secondary_lifetime 7
+ set g_balance_fireball_secondary_refire 1.5
+ set g_balance_fireball_secondary_speed 900
+ set g_balance_fireball_secondary_speed_up 100
+ set g_balance_fireball_secondary_speed_z 0
+ set g_balance_fireball_secondary_spread 0
+ set g_balance_fireball_switchdelay_drop 0
+ set g_balance_fireball_switchdelay_raise 0
+ set g_balance_fireball_weaponreplace ""
+ set g_balance_fireball_weaponstart 0
+ set g_balance_fireball_weaponstartoverride -1
+ set g_balance_fireball_weaponthrowable 0
+ // }}}
+ // {{{ #18: T.A.G. Seeker (MUTATOR WEAPON)
+ set g_balance_seeker_flac_ammo 1
+ set g_balance_seeker_flac_animtime 0.1
+ set g_balance_seeker_flac_damage 15
+ set g_balance_seeker_flac_edgedamage 10
+ set g_balance_seeker_flac_force 50
+ set g_balance_seeker_flac_lifetime 0.1
+ set g_balance_seeker_flac_lifetime_rand 0.05
+ set g_balance_seeker_flac_radius 100
+ set g_balance_seeker_flac_refire 0.1
+ set g_balance_seeker_flac_speed 3000
+ set g_balance_seeker_flac_speed_up 1000
+ set g_balance_seeker_flac_speed_z 0
+ set g_balance_seeker_flac_spread 0.4
+ set g_balance_seeker_missile_accel 1400
+ set g_balance_seeker_missile_ammo 2
+ set g_balance_seeker_missile_animtime 0.2
+ set g_balance_seeker_missile_count 3
+ set g_balance_seeker_missile_damage 30
+ set g_balance_seeker_missile_damageforcescale 4
+ set g_balance_seeker_missile_decel 1400
+ set g_balance_seeker_missile_delay 0.25
+ set g_balance_seeker_missile_edgedamage 10
+ set g_balance_seeker_missile_force 150
+ set g_balance_seeker_missile_health 5
+ set g_balance_seeker_missile_lifetime 15
+ set g_balance_seeker_missile_proxy 0
+ set g_balance_seeker_missile_proxy_delay 0.2
+ set g_balance_seeker_missile_proxy_maxrange 45
+ set g_balance_seeker_missile_radius 80
+ set g_balance_seeker_missile_refire 0.5
+ set g_balance_seeker_missile_smart 1
+ set g_balance_seeker_missile_smart_mindist 800
+ set g_balance_seeker_missile_smart_trace_max 2500
+ set g_balance_seeker_missile_smart_trace_min 1000
+ set g_balance_seeker_missile_speed 700
+ set g_balance_seeker_missile_speed_max 1300
+ set g_balance_seeker_missile_speed_up 300
+ set g_balance_seeker_missile_speed_z 0
+ set g_balance_seeker_missile_spread 0
+ set g_balance_seeker_missile_turnrate 0.65
+ set g_balance_seeker_reload_ammo 0
+ set g_balance_seeker_reload_time 2
+ set g_balance_seeker_switchdelay_drop 0
+ set g_balance_seeker_switchdelay_raise 0
+ set g_balance_seeker_tag_ammo 1
+ set g_balance_seeker_tag_animtime 0.2
+ set g_balance_seeker_tag_damageforcescale 4
+ set g_balance_seeker_tag_health 5
+ set g_balance_seeker_tag_lifetime 15
+ set g_balance_seeker_tag_refire 0.75
+ set g_balance_seeker_tag_speed 5000
+ set g_balance_seeker_tag_spread 0
+ set g_balance_seeker_tag_tracker_lifetime 10
+ set g_balance_seeker_type 0
+ set g_balance_seeker_weaponreplace ""
+ set g_balance_seeker_weaponstart 0
+ set g_balance_seeker_weaponstartoverride -1
+ 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_distance 1000
+ set g_balance_shockwave_blast_edgedamage 0
+ set g_balance_shockwave_blast_force 200
+ set g_balance_shockwave_blast_force_forwardbias 50
+ set g_balance_shockwave_blast_force_zscale 2
+ 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_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_min 0
+ set g_balance_shockwave_blast_refire 0.75
+ set g_balance_shockwave_blast_splash_damage 15
+ set g_balance_shockwave_blast_splash_edgedamage 0
+ set g_balance_shockwave_blast_splash_force 100
+ set g_balance_shockwave_blast_splash_force_forwardbias 50
+ set g_balance_shockwave_blast_splash_multiplier_accuracy 0.5
+ set g_balance_shockwave_blast_splash_multiplier_distance 0.5
+ set g_balance_shockwave_blast_splash_multiplier_min 0
+ set g_balance_shockwave_blast_splash_radius 70
+ set g_balance_shockwave_blast_spread_max 120
+ set g_balance_shockwave_blast_spread_min 25
+ set g_balance_shockwave_melee_animtime 1.3
+ set g_balance_shockwave_melee_damage 80
+ set g_balance_shockwave_melee_delay 0.25
+ set g_balance_shockwave_melee_force 200
+ set g_balance_shockwave_melee_multihit 1
+ set g_balance_shockwave_melee_no_doubleslap 1
+ set g_balance_shockwave_melee_nonplayerdamage 40
+ set g_balance_shockwave_melee_range 120
+ set g_balance_shockwave_melee_refire 1.25
+ set g_balance_shockwave_melee_swing_side 120
+ set g_balance_shockwave_melee_swing_up 30
+ set g_balance_shockwave_melee_time 0.15
+ set g_balance_shockwave_melee_traces 10
+ set g_balance_shockwave_switchdelay_drop 0
+ set g_balance_shockwave_switchdelay_raise 0
+ set g_balance_shockwave_weaponreplace ""
+ set g_balance_shockwave_weaponstart 0
+ 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_botaimlifetime 0
+ set g_balance_arc_beam_botaimspeed 0
+ set g_balance_arc_beam_damage 115
+ 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_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_overheat_max 5
+ set g_balance_arc_overheat_min 3
+ set g_balance_arc_beam_heat 1
+ 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_returnspeed 8
+ set g_balance_arc_beam_tightness 0.5
+ 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_weaponreplace ""
+ set g_balance_arc_weaponstart 0
+ set g_balance_arc_weaponstartoverride -1
+ set g_balance_arc_weaponthrowable 1
+ // }}}
++// {{{ #21: Heavy Machine Gun
++set g_balance_hmg_ammo 0
++set g_balance_hmg_damage 0
++set g_balance_hmg_force 0
++set g_balance_hmg_refire 0
++set g_balance_hmg_reload_ammo 120
++set g_balance_hmg_reload_time 1
++set g_balance_hmg_solidpenetration 32
++set g_balance_hmg_spread_add 0.01
++set g_balance_hmg_spread_max 0.05
++set g_balance_hmg_spread_min 0.02
++set g_balance_hmg_switchdelay_drop 0.2
++set g_balance_hmg_switchdelay_raise 0.2
++set g_balance_hmg_weaponreplace ""
++set g_balance_hmg_weaponstart 0
++set g_balance_hmg_weaponstartoverride 0
++set g_balance_hmg_weaponthrowable 0
++// }}}
++// {{{ #22: Rocket Propelled Chainsaw
++set g_balance_rpc_ammo 10
++set g_balance_rpc_animtime 1
++set g_balance_rpc_damage 150
++set g_balance_rpc_damage2 500
++set g_balance_rpc_damageforcescale 2
++set g_balance_rpc_edgedamage 50
++set g_balance_rpc_force 400
++set g_balance_rpc_health 25
++set g_balance_rpc_lifetime 30
++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_speedaccel 5000
++set g_balance_rpc_switchdelay_drop 0.2
++set g_balance_rpc_switchdelay_raise 0.2
++set g_balance_rpc_weaponreplace ""
++set g_balance_rpc_weaponstart 0
++set g_balance_rpc_weaponstartoverride 0
++set g_balance_rpc_weaponthrowable 0
++// }}}
index 0000000000000000000000000000000000000000,320ce228047aa2d2b1838dccc9ec7b4c70f730ba..e061e6920f4ee4f5c6a525e4a1b5ab7a9464601d
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,763 +1,804 @@@
+ // {{{ #1: Blaster
+ set g_balance_blaster_primary_animtime 0.2
+ set g_balance_blaster_primary_damage 25
+ set g_balance_blaster_primary_delay 0
+ set g_balance_blaster_primary_edgedamage 12.5
+ 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
+ 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.2
+ set g_balance_blaster_secondary_damage 25
+ set g_balance_blaster_secondary_delay 0
+ set g_balance_blaster_secondary_edgedamage 12.5
+ set g_balance_blaster_secondary_force 300
+ set g_balance_blaster_secondary_force_zscale 1.2
+ set g_balance_blaster_secondary_lifetime 5
+ set g_balance_blaster_secondary_radius 70
+ set g_balance_blaster_secondary_refire 0.7
+ set g_balance_blaster_secondary_shotangle 0
+ set g_balance_blaster_secondary_speed 6000
+ set g_balance_blaster_secondary_spread 0
+ set g_balance_blaster_switchdelay_drop 0.2
+ set g_balance_blaster_switchdelay_raise 0.2
+ set g_balance_blaster_weaponreplace ""
+ set g_balance_blaster_weaponstart 1
+ set g_balance_blaster_weaponstartoverride -1
+ 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_damage 3.5
+ set g_balance_shotgun_primary_force 15
+ set g_balance_shotgun_primary_refire 0.75
+ set g_balance_shotgun_primary_solidpenetration 3.8
+ set g_balance_shotgun_primary_spread 0.11
+ 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
+ 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
+ set g_balance_shotgun_secondary_melee_no_doubleslap 1
+ set g_balance_shotgun_secondary_melee_nonplayerdamage 40
+ set g_balance_shotgun_secondary_melee_range 120
+ set g_balance_shotgun_secondary_melee_swing_side 120
+ 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 ""
+ set g_balance_shotgun_weaponstart 1
+ set g_balance_shotgun_weaponstartoverride -1
+ set g_balance_shotgun_weaponthrowable 1
+ // }}}
+ // {{{ #3: Machine Gun
+ set g_balance_machinegun_burst 3
+ set g_balance_machinegun_burst_ammo 3
+ set g_balance_machinegun_burst_animtime 0.3
+ set g_balance_machinegun_burst_refire 0.06
+ set g_balance_machinegun_burst_refire2 0.45
+ 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.125
+ set g_balance_machinegun_first_spread 0.03
+ set g_balance_machinegun_mode 1
+ set g_balance_machinegun_reload_ammo 60
+ set g_balance_machinegun_reload_time 2
+ set g_balance_machinegun_solidpenetration 13.1
+ set g_balance_machinegun_spread_add 0.012
+ set g_balance_machinegun_spread_max 0.05
+ set g_balance_machinegun_spread_min 0.02
+ set g_balance_machinegun_sustained_ammo 1
+ set g_balance_machinegun_sustained_damage 10
+ set g_balance_machinegun_sustained_force 5
+ set g_balance_machinegun_sustained_refire 0.1
+ set g_balance_machinegun_sustained_spread 0.03
+ set g_balance_machinegun_switchdelay_drop 0.2
+ set g_balance_machinegun_switchdelay_raise 0.2
+ set g_balance_machinegun_weaponreplace ""
+ set g_balance_machinegun_weaponstart 0
+ set g_balance_machinegun_weaponstartoverride -1
+ set g_balance_machinegun_weaponthrowable 1
+ // }}}
+ // {{{ #4: Mortar
+ 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 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 15
+ set g_balance_mortar_primary_lifetime 5
+ set g_balance_mortar_primary_lifetime_stick 0
+ set g_balance_mortar_primary_radius 120
+ set g_balance_mortar_primary_refire 0.8
+ set g_balance_mortar_primary_remote_minbouncecnt 0
+ set g_balance_mortar_primary_speed 1900
+ set g_balance_mortar_primary_speed_up 225
+ set g_balance_mortar_primary_speed_z 0
+ set g_balance_mortar_primary_spread 0
+ set g_balance_mortar_primary_type 0
+ set g_balance_mortar_reload_ammo 0
+ set g_balance_mortar_reload_time 2
+ set g_balance_mortar_secondary_ammo 2
+ set g_balance_mortar_secondary_animtime 0.3
+ set g_balance_mortar_secondary_damage 55
+ set g_balance_mortar_secondary_damageforcescale 4
+ set g_balance_mortar_secondary_edgedamage 30
+ set g_balance_mortar_secondary_force 250
+ set g_balance_mortar_secondary_health 30
+ set g_balance_mortar_secondary_lifetime 5
+ set g_balance_mortar_secondary_lifetime_bounce 0.5
+ set g_balance_mortar_secondary_lifetime_stick 0
+ set g_balance_mortar_secondary_radius 120
+ set g_balance_mortar_secondary_refire 0.7
+ set g_balance_mortar_secondary_remote_detonateprimary 0
+ set g_balance_mortar_secondary_speed 1400
+ set g_balance_mortar_secondary_speed_up 150
+ set g_balance_mortar_secondary_speed_z 0
+ set g_balance_mortar_secondary_spread 0
+ set g_balance_mortar_secondary_type 1
+ set g_balance_mortar_switchdelay_drop 0.2
+ set g_balance_mortar_switchdelay_raise 0.2
+ set g_balance_mortar_weaponreplace ""
+ set g_balance_mortar_weaponstart 0
+ set g_balance_mortar_weaponstartoverride -1
+ set g_balance_mortar_weaponthrowable 1
+ // }}}
+ // {{{ #5: Mine Layer (MUTATOR WEAPON)
+ set g_balance_minelayer_ammo 4
+ set g_balance_minelayer_animtime 0.4
+ set g_balance_minelayer_damage 40
+ set g_balance_minelayer_damageforcescale 0
+ set g_balance_minelayer_detonatedelay -1
+ set g_balance_minelayer_edgedamage 20
+ set g_balance_minelayer_force 250
+ set g_balance_minelayer_health 15
+ set g_balance_minelayer_lifetime 10
+ set g_balance_minelayer_lifetime_countdown 0.5
+ set g_balance_minelayer_limit 3
+ set g_balance_minelayer_protection 0
+ set g_balance_minelayer_proximityradius 150
+ set g_balance_minelayer_radius 175
+ set g_balance_minelayer_refire 1.5
+ set g_balance_minelayer_reload_ammo 0
+ set g_balance_minelayer_reload_time 2
+ set g_balance_minelayer_remote_damage 45
+ set g_balance_minelayer_remote_edgedamage 40
+ set g_balance_minelayer_remote_force 300
+ set g_balance_minelayer_remote_radius 200
+ set g_balance_minelayer_speed 1000
+ set g_balance_minelayer_switchdelay_drop 0.2
+ set g_balance_minelayer_switchdelay_raise 0.2
+ set g_balance_minelayer_time 0.5
+ set g_balance_minelayer_weaponreplace ""
+ set g_balance_minelayer_weaponstart 0
+ set g_balance_minelayer_weaponstartoverride -1
+ set g_balance_minelayer_weaponthrowable 1
+ // }}}
+ // {{{ #6: Electro
+ set g_balance_electro_combo_comboradius 300
+ set g_balance_electro_combo_comboradius_thruwall 200
+ 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 150
+ 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.3
+ set g_balance_electro_primary_comboradius 300
+ 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
+ set g_balance_electro_primary_midaircombo_interval 0.1
+ set g_balance_electro_primary_midaircombo_radius 150
+ set g_balance_electro_primary_radius 100
+ set g_balance_electro_primary_refire 0.6
+ set g_balance_electro_primary_speed 2500
+ set g_balance_electro_primary_spread 0
+ set g_balance_electro_reload_ammo 0
+ set g_balance_electro_reload_time 2
+ set g_balance_electro_secondary_ammo 2
+ set g_balance_electro_secondary_animtime 0.2
+ set g_balance_electro_secondary_bouncefactor 0.3
+ set g_balance_electro_secondary_bouncestop 0.05
+ set g_balance_electro_secondary_count 3
+ 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 15
+ set g_balance_electro_secondary_force 50
+ set g_balance_electro_secondary_health 5
+ set g_balance_electro_secondary_lifetime 4
+ set g_balance_electro_secondary_radius 150
+ set g_balance_electro_secondary_refire 0.2
+ 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_touchexplode 0
+ set g_balance_electro_switchdelay_drop 0.2
+ set g_balance_electro_switchdelay_raise 0.2
+ set g_balance_electro_weaponreplace ""
+ set g_balance_electro_weaponstart 0
+ set g_balance_electro_weaponstartoverride -1
+ set g_balance_electro_weaponthrowable 1
+ // }}}
+ // {{{ #7: Crylink
+ 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 -50
+ set g_balance_crylink_primary_joindelay 0.1
+ set g_balance_crylink_primary_joinexplode 1
+ set g_balance_crylink_primary_joinexplode_damage 0
+ 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_middle_fadetime 5
+ set g_balance_crylink_primary_middle_lifetime 5
+ set g_balance_crylink_primary_other_fadetime 5
+ set g_balance_crylink_primary_other_lifetime 5
+ set g_balance_crylink_primary_radius 80
+ set g_balance_crylink_primary_refire 0.7
+ set g_balance_crylink_primary_shots 6
+ set g_balance_crylink_primary_speed 2000
+ set g_balance_crylink_primary_spread 0.08
+ set g_balance_crylink_reload_ammo 0
+ 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_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_joindelay 0
+ set g_balance_crylink_secondary_joinexplode 0
+ set g_balance_crylink_secondary_joinexplode_damage 0
+ set g_balance_crylink_secondary_joinexplode_edgedamage 0
+ set g_balance_crylink_secondary_joinexplode_force 0
+ set g_balance_crylink_secondary_joinexplode_radius 0
+ set g_balance_crylink_secondary_joinspread 0
+ set g_balance_crylink_secondary_linkexplode 1
+ 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_spreadtype 1
+ set g_balance_crylink_switchdelay_drop 0.2
+ set g_balance_crylink_switchdelay_raise 0.2
+ set g_balance_crylink_weaponreplace ""
+ set g_balance_crylink_weaponstart 0
+ 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_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.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
+ 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 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
+ set g_balance_vortex_primary_damagefalloff_mindist 0
+ set g_balance_vortex_primary_force 400
+ set g_balance_vortex_primary_refire 1.5
+ set g_balance_vortex_reload_ammo 0
+ set g_balance_vortex_reload_time 2
+ set g_balance_vortex_secondary 0
+ set g_balance_vortex_secondary_ammo 2
+ set g_balance_vortex_secondary_animtime 0
+ set g_balance_vortex_secondary_chargepool 0
+ set g_balance_vortex_secondary_chargepool_pause_regen 1
+ set g_balance_vortex_secondary_chargepool_regen 0.15
+ set g_balance_vortex_secondary_damage 0
+ set g_balance_vortex_secondary_damagefalloff_forcehalflife 0
+ set g_balance_vortex_secondary_damagefalloff_halflife 0
+ set g_balance_vortex_secondary_damagefalloff_maxdist 0
+ set g_balance_vortex_secondary_damagefalloff_mindist 0
+ set g_balance_vortex_secondary_force 0
+ set g_balance_vortex_secondary_refire 0
+ set g_balance_vortex_switchdelay_drop 0.25
+ set g_balance_vortex_switchdelay_raise 0.25
+ set g_balance_vortex_weaponreplace ""
+ set g_balance_vortex_weaponstart 0
+ set g_balance_vortex_weaponstartoverride -1
+ set g_balance_vortex_weaponthrowable 1
+ // }}}
+ // {{{ #9: Hagar
+ set g_balance_hagar_primary_ammo 1
+ set g_balance_hagar_primary_damage 25
+ set g_balance_hagar_primary_damageforcescale 0
+ set g_balance_hagar_primary_edgedamage 12.5
+ set g_balance_hagar_primary_force 100
+ set g_balance_hagar_primary_health 15
+ 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_reload_ammo 0
+ set g_balance_hagar_reload_time 2
+ set g_balance_hagar_secondary 1
+ set g_balance_hagar_secondary_ammo 1
+ set g_balance_hagar_secondary_damage 35
+ set g_balance_hagar_secondary_damageforcescale 0
+ 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
+ set g_balance_hagar_secondary_lifetime_rand 0
+ set g_balance_hagar_secondary_load 1
+ set g_balance_hagar_secondary_load_abort 1
+ set g_balance_hagar_secondary_load_animtime 0.2
+ set g_balance_hagar_secondary_load_hold 4
+ set g_balance_hagar_secondary_load_linkexplode 0
+ set g_balance_hagar_secondary_load_max 4
+ set g_balance_hagar_secondary_load_releasedeath 0
+ set g_balance_hagar_secondary_load_speed 0.5
+ set g_balance_hagar_secondary_load_spread 0.075
+ 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_switchdelay_drop 0.2
+ set g_balance_hagar_switchdelay_raise 0.2
+ set g_balance_hagar_weaponreplace ""
+ set g_balance_hagar_weaponstart 0
+ set g_balance_hagar_weaponstartoverride -1
+ set g_balance_hagar_weaponthrowable 1
+ // }}}
+ // {{{ #10: Devastator
+ set g_balance_devastator_ammo 4
+ set g_balance_devastator_animtime 0.4
+ set g_balance_devastator_damage 80
+ set g_balance_devastator_damageforcescale 1
+ set g_balance_devastator_detonatedelay 0.02
+ set g_balance_devastator_edgedamage 40
+ set g_balance_devastator_force 400
+ set g_balance_devastator_guidedelay 0.2
+ set g_balance_devastator_guidegoal 512
+ set g_balance_devastator_guiderate 90
+ set g_balance_devastator_guideratedelay 0.01
+ set g_balance_devastator_guidestop 0
+ set g_balance_devastator_health 30
+ set g_balance_devastator_lifetime 10
+ set g_balance_devastator_radius 110
+ set g_balance_devastator_refire 1.1
+ set g_balance_devastator_reload_ammo 0
+ set g_balance_devastator_reload_time 2
+ 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_radius 0
+ set g_balance_devastator_remote_jump_velocity_z_add 400
+ 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
+ set g_balance_devastator_speed 1300
+ set g_balance_devastator_speedaccel 1300
+ set g_balance_devastator_speedstart 1000
+ set g_balance_devastator_switchdelay_drop 0.2
+ set g_balance_devastator_switchdelay_raise 0.2
+ set g_balance_devastator_weaponreplace ""
+ set g_balance_devastator_weaponstart 0
+ set g_balance_devastator_weaponstartoverride -1
+ set g_balance_devastator_weaponthrowable 1
+ // }}}
+ // {{{ #11: Port-O-Launch
+ 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 1000
+ set g_balance_porto_secondary 1
+ set g_balance_porto_secondary_animtime 0.3
+ set g_balance_porto_secondary_lifetime 5
+ set g_balance_porto_secondary_refire 1.5
+ set g_balance_porto_secondary_speed 1000
+ set g_balance_porto_switchdelay_drop 0.2
+ set g_balance_porto_switchdelay_raise 0.2
+ set g_balance_porto_weaponreplace ""
+ set g_balance_porto_weaponstart 0
+ set g_balance_porto_weaponstartoverride -1
+ 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_refire 1
+ set g_balance_vaporizer_reload_ammo 0
+ set g_balance_vaporizer_reload_time 0
+ set g_balance_vaporizer_secondary_ammo 0
+ set g_balance_vaporizer_secondary_animtime 0.2
+ set g_balance_vaporizer_secondary_damage 25
+ set g_balance_vaporizer_secondary_delay 0
+ set g_balance_vaporizer_secondary_edgedamage 12.5
+ set g_balance_vaporizer_secondary_force 400
+ set g_balance_vaporizer_secondary_lifetime 5
+ set g_balance_vaporizer_secondary_radius 70
+ set g_balance_vaporizer_secondary_refire 0.7
+ set g_balance_vaporizer_secondary_shotangle 0
+ set g_balance_vaporizer_secondary_speed 6000
+ set g_balance_vaporizer_secondary_spread 0
+ set g_balance_vaporizer_switchdelay_drop 0.2
+ 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
+ // }}}
+ // {{{ #13: Grappling Hook
+ set g_balance_hook_primary_ammo 5
+ set g_balance_hook_primary_animtime 0.3
+ set g_balance_hook_primary_hooked_ammo 5
+ set g_balance_hook_primary_hooked_time_free 2
+ set g_balance_hook_primary_hooked_time_max 0
+ set g_balance_hook_primary_refire 0.2
+ set g_balance_hook_secondary_animtime 0.3
+ set g_balance_hook_secondary_damage 25
+ set g_balance_hook_secondary_damageforcescale 0
+ set g_balance_hook_secondary_duration 1.5
+ set g_balance_hook_secondary_edgedamage 5
+ set g_balance_hook_secondary_force -2000
+ set g_balance_hook_secondary_gravity 5
+ set g_balance_hook_secondary_health 15
+ set g_balance_hook_secondary_lifetime 5
+ set g_balance_hook_secondary_power 3
+ set g_balance_hook_secondary_radius 500
+ set g_balance_hook_secondary_refire 3
+ set g_balance_hook_secondary_speed 0
+ set g_balance_hook_switchdelay_drop 0.2
+ set g_balance_hook_switchdelay_raise 0.2
+ set g_balance_hook_weaponreplace ""
+ set g_balance_hook_weaponstart 0
+ set g_balance_hook_weaponstartoverride -1
+ set g_balance_hook_weaponthrowable 1
+ // }}}
+ // {{{ #14: Heavy Laser Assault Cannon (MUTATOR WEAPON)
+ set g_balance_hlac_primary_ammo 1
+ set g_balance_hlac_primary_animtime 0.4
+ set g_balance_hlac_primary_damage 18
+ set g_balance_hlac_primary_edgedamage 9
+ set g_balance_hlac_primary_force 90
+ set g_balance_hlac_primary_lifetime 5
+ set g_balance_hlac_primary_radius 70
+ set g_balance_hlac_primary_refire 0.15
+ set g_balance_hlac_primary_speed 9000
+ set g_balance_hlac_primary_spread_add 0.0045
+ set g_balance_hlac_primary_spread_crouchmod 0.25
+ set g_balance_hlac_primary_spread_max 0.25
+ set g_balance_hlac_primary_spread_min 0.01
+ set g_balance_hlac_reload_ammo 0
+ set g_balance_hlac_reload_time 2
+ set g_balance_hlac_secondary 1
+ set g_balance_hlac_secondary_ammo 10
+ set g_balance_hlac_secondary_animtime 0.3
+ set g_balance_hlac_secondary_damage 15
+ set g_balance_hlac_secondary_edgedamage 7.5
+ set g_balance_hlac_secondary_force 90
+ set g_balance_hlac_secondary_lifetime 5
+ set g_balance_hlac_secondary_radius 70
+ set g_balance_hlac_secondary_refire 1
+ set g_balance_hlac_secondary_shots 6
+ set g_balance_hlac_secondary_speed 9000
+ set g_balance_hlac_secondary_spread 0.15
+ set g_balance_hlac_secondary_spread_crouchmod 0.5
+ set g_balance_hlac_switchdelay_drop 0.2
+ set g_balance_hlac_switchdelay_raise 0.2
+ set g_balance_hlac_weaponreplace ""
+ set g_balance_hlac_weaponstart 0
+ set g_balance_hlac_weaponstartoverride -1
+ set g_balance_hlac_weaponthrowable 1
+ // }}}
+ // {{{ #15: @!#%'n Tuba
+ set g_balance_tuba_animtime 0.05
+ set g_balance_tuba_attenuation 0.5
+ set g_balance_tuba_damage 5
+ set g_balance_tuba_edgedamage 0
+ set g_balance_tuba_fadetime 0.25
+ set g_balance_tuba_force 40
+ set g_balance_tuba_pitchstep 6
+ set g_balance_tuba_radius 200
+ set g_balance_tuba_refire 0.05
+ set g_balance_tuba_switchdelay_drop 0.2
+ set g_balance_tuba_switchdelay_raise 0.2
+ set g_balance_tuba_volume 1
+ set g_balance_tuba_weaponreplace ""
+ set g_balance_tuba_weaponstart 0
+ set g_balance_tuba_weaponstartoverride -1
+ set g_balance_tuba_weaponthrowable 1
+ // }}}
+ // {{{ #16: Rifle (MUTATOR WEAPON)
+ set g_balance_rifle_bursttime 0
+ set g_balance_rifle_primary_ammo 10
+ set g_balance_rifle_primary_animtime 0.4
+ set g_balance_rifle_primary_bullethail 0
+ set g_balance_rifle_primary_burstcost 0
+ set g_balance_rifle_primary_damage 80
+ set g_balance_rifle_primary_force 100
+ set g_balance_rifle_primary_refire 1.2
+ set g_balance_rifle_primary_shots 1
+ set g_balance_rifle_primary_solidpenetration 62.2
+ set g_balance_rifle_primary_spread 0
+ set g_balance_rifle_primary_tracer 1
+ set g_balance_rifle_reload_ammo 80
+ set g_balance_rifle_reload_time 2
+ set g_balance_rifle_secondary 1
+ set g_balance_rifle_secondary_ammo 10
+ set g_balance_rifle_secondary_animtime 0.3
+ set g_balance_rifle_secondary_bullethail 0
+ set g_balance_rifle_secondary_burstcost 0
+ set g_balance_rifle_secondary_damage 20
+ set g_balance_rifle_secondary_force 50
+ set g_balance_rifle_secondary_refire 0.9
+ set g_balance_rifle_secondary_reload 0
+ set g_balance_rifle_secondary_shots 4
+ set g_balance_rifle_secondary_solidpenetration 15.5
+ set g_balance_rifle_secondary_spread 0.04
+ set g_balance_rifle_secondary_tracer 0
+ set g_balance_rifle_switchdelay_drop 0.2
+ set g_balance_rifle_switchdelay_raise 0.2
+ set g_balance_rifle_weaponreplace ""
+ set g_balance_rifle_weaponstart 0
+ set g_balance_rifle_weaponstartoverride -1
+ set g_balance_rifle_weaponthrowable 1
+ // }}}
+ // {{{ #17: Fireball
+ set g_balance_fireball_primary_animtime 0.4
+ set g_balance_fireball_primary_bfgdamage 100
+ set g_balance_fireball_primary_bfgforce 0
+ set g_balance_fireball_primary_bfgradius 1000
+ set g_balance_fireball_primary_damage 200
+ set g_balance_fireball_primary_damageforcescale 0
+ set g_balance_fireball_primary_edgedamage 50
+ set g_balance_fireball_primary_force 600
+ set g_balance_fireball_primary_health 0
+ set g_balance_fireball_primary_laserburntime 0.5
+ set g_balance_fireball_primary_laserdamage 80
+ set g_balance_fireball_primary_laseredgedamage 20
+ set g_balance_fireball_primary_laserradius 256
+ set g_balance_fireball_primary_lifetime 15
+ set g_balance_fireball_primary_radius 200
+ set g_balance_fireball_primary_refire 2
+ set g_balance_fireball_primary_refire2 0
+ set g_balance_fireball_primary_speed 1200
+ set g_balance_fireball_primary_spread 0
+ set g_balance_fireball_secondary_animtime 0.3
+ set g_balance_fireball_secondary_damage 40
+ set g_balance_fireball_secondary_damageforcescale 4
+ set g_balance_fireball_secondary_damagetime 5
+ set g_balance_fireball_secondary_laserburntime 0.5
+ set g_balance_fireball_secondary_laserdamage 50
+ set g_balance_fireball_secondary_laseredgedamage 20
+ set g_balance_fireball_secondary_laserradius 110
+ set g_balance_fireball_secondary_lifetime 7
+ set g_balance_fireball_secondary_refire 1.5
+ set g_balance_fireball_secondary_speed 900
+ set g_balance_fireball_secondary_speed_up 100
+ set g_balance_fireball_secondary_speed_z 0
+ set g_balance_fireball_secondary_spread 0
+ set g_balance_fireball_switchdelay_drop 0.2
+ set g_balance_fireball_switchdelay_raise 0.2
+ set g_balance_fireball_weaponreplace ""
+ set g_balance_fireball_weaponstart 0
+ set g_balance_fireball_weaponstartoverride -1
+ set g_balance_fireball_weaponthrowable 0
+ // }}}
+ // {{{ #18: T.A.G. Seeker (MUTATOR WEAPON)
+ set g_balance_seeker_flac_ammo 1
+ set g_balance_seeker_flac_animtime 0.1
+ set g_balance_seeker_flac_damage 15
+ set g_balance_seeker_flac_edgedamage 10
+ set g_balance_seeker_flac_force 50
+ set g_balance_seeker_flac_lifetime 0.1
+ set g_balance_seeker_flac_lifetime_rand 0.05
+ set g_balance_seeker_flac_radius 100
+ set g_balance_seeker_flac_refire 0.1
+ set g_balance_seeker_flac_speed 3000
+ set g_balance_seeker_flac_speed_up 1000
+ set g_balance_seeker_flac_speed_z 0
+ set g_balance_seeker_flac_spread 0.4
+ set g_balance_seeker_missile_accel 1400
+ set g_balance_seeker_missile_ammo 2
+ set g_balance_seeker_missile_animtime 0.2
+ set g_balance_seeker_missile_count 3
+ set g_balance_seeker_missile_damage 30
+ set g_balance_seeker_missile_damageforcescale 4
+ set g_balance_seeker_missile_decel 1400
+ set g_balance_seeker_missile_delay 0.25
+ set g_balance_seeker_missile_edgedamage 10
+ set g_balance_seeker_missile_force 150
+ set g_balance_seeker_missile_health 5
+ set g_balance_seeker_missile_lifetime 15
+ set g_balance_seeker_missile_proxy 0
+ set g_balance_seeker_missile_proxy_delay 0.2
+ set g_balance_seeker_missile_proxy_maxrange 45
+ set g_balance_seeker_missile_radius 80
+ set g_balance_seeker_missile_refire 0.5
+ set g_balance_seeker_missile_smart 1
+ set g_balance_seeker_missile_smart_mindist 800
+ set g_balance_seeker_missile_smart_trace_max 2500
+ set g_balance_seeker_missile_smart_trace_min 1000
+ set g_balance_seeker_missile_speed 700
+ set g_balance_seeker_missile_speed_max 1300
+ set g_balance_seeker_missile_speed_up 300
+ set g_balance_seeker_missile_speed_z 0
+ set g_balance_seeker_missile_spread 0
+ set g_balance_seeker_missile_turnrate 0.65
+ set g_balance_seeker_reload_ammo 0
+ set g_balance_seeker_reload_time 2
+ set g_balance_seeker_switchdelay_drop 0.2
+ set g_balance_seeker_switchdelay_raise 0.2
+ set g_balance_seeker_tag_ammo 1
+ set g_balance_seeker_tag_animtime 0.2
+ set g_balance_seeker_tag_damageforcescale 4
+ set g_balance_seeker_tag_health 5
+ set g_balance_seeker_tag_lifetime 15
+ set g_balance_seeker_tag_refire 0.75
+ set g_balance_seeker_tag_speed 5000
+ set g_balance_seeker_tag_spread 0
+ set g_balance_seeker_tag_tracker_lifetime 10
+ set g_balance_seeker_type 0
+ set g_balance_seeker_weaponreplace ""
+ set g_balance_seeker_weaponstart 0
+ set g_balance_seeker_weaponstartoverride -1
+ 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_distance 1000
+ set g_balance_shockwave_blast_edgedamage 0
+ set g_balance_shockwave_blast_force 200
+ set g_balance_shockwave_blast_force_forwardbias 50
+ set g_balance_shockwave_blast_force_zscale 2
+ 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_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_min 0
+ set g_balance_shockwave_blast_refire 0.75
+ set g_balance_shockwave_blast_splash_damage 15
+ set g_balance_shockwave_blast_splash_edgedamage 0
+ set g_balance_shockwave_blast_splash_force 100
+ set g_balance_shockwave_blast_splash_force_forwardbias 50
+ set g_balance_shockwave_blast_splash_multiplier_accuracy 0.5
+ set g_balance_shockwave_blast_splash_multiplier_distance 0.5
+ set g_balance_shockwave_blast_splash_multiplier_min 0
+ set g_balance_shockwave_blast_splash_radius 70
+ set g_balance_shockwave_blast_spread_max 120
+ set g_balance_shockwave_blast_spread_min 25
+ set g_balance_shockwave_melee_animtime 1.3
+ set g_balance_shockwave_melee_damage 80
+ set g_balance_shockwave_melee_delay 0.25
+ set g_balance_shockwave_melee_force 200
+ set g_balance_shockwave_melee_multihit 1
+ set g_balance_shockwave_melee_no_doubleslap 1
+ set g_balance_shockwave_melee_nonplayerdamage 40
+ set g_balance_shockwave_melee_range 120
+ set g_balance_shockwave_melee_refire 1.25
+ set g_balance_shockwave_melee_swing_side 120
+ set g_balance_shockwave_melee_swing_up 30
+ set g_balance_shockwave_melee_time 0.15
+ set g_balance_shockwave_melee_traces 10
+ set g_balance_shockwave_switchdelay_drop 0.2
+ set g_balance_shockwave_switchdelay_raise 0.2
+ set g_balance_shockwave_weaponreplace ""
+ set g_balance_shockwave_weaponstart 0
+ 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_botaimlifetime 0
+ set g_balance_arc_beam_botaimspeed 0
+ set g_balance_arc_beam_damage 115
+ 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_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_overheat_max 5
+ set g_balance_arc_overheat_min 3
+ set g_balance_arc_beam_heat 1
+ set g_balance_arc_burst_heat 4
+ 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_returnspeed 8
+ set g_balance_arc_beam_tightness 0.5
+ 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_weaponreplace ""
+ set g_balance_arc_weaponstart 0
+ set g_balance_arc_weaponstartoverride -1
+ set g_balance_arc_weaponthrowable 1
+ // }}}
++// {{{ #21: Heavy Machine Gun
++set g_balance_hmg_ammo 0
++set g_balance_hmg_damage 0
++set g_balance_hmg_force 0
++set g_balance_hmg_refire 0
++set g_balance_hmg_reload_ammo 120
++set g_balance_hmg_reload_time 1
++set g_balance_hmg_solidpenetration 32
++set g_balance_hmg_spread_add 0.01
++set g_balance_hmg_spread_max 0.05
++set g_balance_hmg_spread_min 0.02
++set g_balance_hmg_switchdelay_drop 0.2
++set g_balance_hmg_switchdelay_raise 0.2
++set g_balance_hmg_weaponreplace ""
++set g_balance_hmg_weaponstart 0
++set g_balance_hmg_weaponstartoverride 0
++set g_balance_hmg_weaponthrowable 0
++// }}}
++// {{{ #22: Rocket Propelled Chainsaw
++set g_balance_rpc_ammo 10
++set g_balance_rpc_animtime 1
++set g_balance_rpc_damage 150
++set g_balance_rpc_damage2 500
++set g_balance_rpc_damageforcescale 2
++set g_balance_rpc_edgedamage 50
++set g_balance_rpc_force 400
++set g_balance_rpc_health 25
++set g_balance_rpc_lifetime 30
++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_speedaccel 5000
++set g_balance_rpc_switchdelay_drop 0.2
++set g_balance_rpc_switchdelay_raise 0.2
++set g_balance_rpc_weaponreplace ""
++set g_balance_rpc_weaponstart 0
++set g_balance_rpc_weaponstartoverride 0
++set g_balance_rpc_weaponthrowable 0
++// }}}
diff --cc bal-wep-xpm.cfg
index 0000000000000000000000000000000000000000,320ce228047aa2d2b1838dccc9ec7b4c70f730ba..e061e6920f4ee4f5c6a525e4a1b5ab7a9464601d
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,763 +1,804 @@@
+ // {{{ #1: Blaster
+ set g_balance_blaster_primary_animtime 0.2
+ set g_balance_blaster_primary_damage 25
+ set g_balance_blaster_primary_delay 0
+ set g_balance_blaster_primary_edgedamage 12.5
+ 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
+ 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.2
+ set g_balance_blaster_secondary_damage 25
+ set g_balance_blaster_secondary_delay 0
+ set g_balance_blaster_secondary_edgedamage 12.5
+ set g_balance_blaster_secondary_force 300
+ set g_balance_blaster_secondary_force_zscale 1.2
+ set g_balance_blaster_secondary_lifetime 5
+ set g_balance_blaster_secondary_radius 70
+ set g_balance_blaster_secondary_refire 0.7
+ set g_balance_blaster_secondary_shotangle 0
+ set g_balance_blaster_secondary_speed 6000
+ set g_balance_blaster_secondary_spread 0
+ set g_balance_blaster_switchdelay_drop 0.2
+ set g_balance_blaster_switchdelay_raise 0.2
+ set g_balance_blaster_weaponreplace ""
+ set g_balance_blaster_weaponstart 1
+ set g_balance_blaster_weaponstartoverride -1
+ 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_damage 3.5
+ set g_balance_shotgun_primary_force 15
+ set g_balance_shotgun_primary_refire 0.75
+ set g_balance_shotgun_primary_solidpenetration 3.8
+ set g_balance_shotgun_primary_spread 0.11
+ 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
+ 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
+ set g_balance_shotgun_secondary_melee_no_doubleslap 1
+ set g_balance_shotgun_secondary_melee_nonplayerdamage 40
+ set g_balance_shotgun_secondary_melee_range 120
+ set g_balance_shotgun_secondary_melee_swing_side 120
+ 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 ""
+ set g_balance_shotgun_weaponstart 1
+ set g_balance_shotgun_weaponstartoverride -1
+ set g_balance_shotgun_weaponthrowable 1
+ // }}}
+ // {{{ #3: Machine Gun
+ set g_balance_machinegun_burst 3
+ set g_balance_machinegun_burst_ammo 3
+ set g_balance_machinegun_burst_animtime 0.3
+ set g_balance_machinegun_burst_refire 0.06
+ set g_balance_machinegun_burst_refire2 0.45
+ 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.125
+ set g_balance_machinegun_first_spread 0.03
+ set g_balance_machinegun_mode 1
+ set g_balance_machinegun_reload_ammo 60
+ set g_balance_machinegun_reload_time 2
+ set g_balance_machinegun_solidpenetration 13.1
+ set g_balance_machinegun_spread_add 0.012
+ set g_balance_machinegun_spread_max 0.05
+ set g_balance_machinegun_spread_min 0.02
+ set g_balance_machinegun_sustained_ammo 1
+ set g_balance_machinegun_sustained_damage 10
+ set g_balance_machinegun_sustained_force 5
+ set g_balance_machinegun_sustained_refire 0.1
+ set g_balance_machinegun_sustained_spread 0.03
+ set g_balance_machinegun_switchdelay_drop 0.2
+ set g_balance_machinegun_switchdelay_raise 0.2
+ set g_balance_machinegun_weaponreplace ""
+ set g_balance_machinegun_weaponstart 0
+ set g_balance_machinegun_weaponstartoverride -1
+ set g_balance_machinegun_weaponthrowable 1
+ // }}}
+ // {{{ #4: Mortar
+ 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 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 15
+ set g_balance_mortar_primary_lifetime 5
+ set g_balance_mortar_primary_lifetime_stick 0
+ set g_balance_mortar_primary_radius 120
+ set g_balance_mortar_primary_refire 0.8
+ set g_balance_mortar_primary_remote_minbouncecnt 0
+ set g_balance_mortar_primary_speed 1900
+ set g_balance_mortar_primary_speed_up 225
+ set g_balance_mortar_primary_speed_z 0
+ set g_balance_mortar_primary_spread 0
+ set g_balance_mortar_primary_type 0
+ set g_balance_mortar_reload_ammo 0
+ set g_balance_mortar_reload_time 2
+ set g_balance_mortar_secondary_ammo 2
+ set g_balance_mortar_secondary_animtime 0.3
+ set g_balance_mortar_secondary_damage 55
+ set g_balance_mortar_secondary_damageforcescale 4
+ set g_balance_mortar_secondary_edgedamage 30
+ set g_balance_mortar_secondary_force 250
+ set g_balance_mortar_secondary_health 30
+ set g_balance_mortar_secondary_lifetime 5
+ set g_balance_mortar_secondary_lifetime_bounce 0.5
+ set g_balance_mortar_secondary_lifetime_stick 0
+ set g_balance_mortar_secondary_radius 120
+ set g_balance_mortar_secondary_refire 0.7
+ set g_balance_mortar_secondary_remote_detonateprimary 0
+ set g_balance_mortar_secondary_speed 1400
+ set g_balance_mortar_secondary_speed_up 150
+ set g_balance_mortar_secondary_speed_z 0
+ set g_balance_mortar_secondary_spread 0
+ set g_balance_mortar_secondary_type 1
+ set g_balance_mortar_switchdelay_drop 0.2
+ set g_balance_mortar_switchdelay_raise 0.2
+ set g_balance_mortar_weaponreplace ""
+ set g_balance_mortar_weaponstart 0
+ set g_balance_mortar_weaponstartoverride -1
+ set g_balance_mortar_weaponthrowable 1
+ // }}}
+ // {{{ #5: Mine Layer (MUTATOR WEAPON)
+ set g_balance_minelayer_ammo 4
+ set g_balance_minelayer_animtime 0.4
+ set g_balance_minelayer_damage 40
+ set g_balance_minelayer_damageforcescale 0
+ set g_balance_minelayer_detonatedelay -1
+ set g_balance_minelayer_edgedamage 20
+ set g_balance_minelayer_force 250
+ set g_balance_minelayer_health 15
+ set g_balance_minelayer_lifetime 10
+ set g_balance_minelayer_lifetime_countdown 0.5
+ set g_balance_minelayer_limit 3
+ set g_balance_minelayer_protection 0
+ set g_balance_minelayer_proximityradius 150
+ set g_balance_minelayer_radius 175
+ set g_balance_minelayer_refire 1.5
+ set g_balance_minelayer_reload_ammo 0
+ set g_balance_minelayer_reload_time 2
+ set g_balance_minelayer_remote_damage 45
+ set g_balance_minelayer_remote_edgedamage 40
+ set g_balance_minelayer_remote_force 300
+ set g_balance_minelayer_remote_radius 200
+ set g_balance_minelayer_speed 1000
+ set g_balance_minelayer_switchdelay_drop 0.2
+ set g_balance_minelayer_switchdelay_raise 0.2
+ set g_balance_minelayer_time 0.5
+ set g_balance_minelayer_weaponreplace ""
+ set g_balance_minelayer_weaponstart 0
+ set g_balance_minelayer_weaponstartoverride -1
+ set g_balance_minelayer_weaponthrowable 1
+ // }}}
+ // {{{ #6: Electro
+ set g_balance_electro_combo_comboradius 300
+ set g_balance_electro_combo_comboradius_thruwall 200
+ 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 150
+ 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.3
+ set g_balance_electro_primary_comboradius 300
+ 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
+ set g_balance_electro_primary_midaircombo_interval 0.1
+ set g_balance_electro_primary_midaircombo_radius 150
+ set g_balance_electro_primary_radius 100
+ set g_balance_electro_primary_refire 0.6
+ set g_balance_electro_primary_speed 2500
+ set g_balance_electro_primary_spread 0
+ set g_balance_electro_reload_ammo 0
+ set g_balance_electro_reload_time 2
+ set g_balance_electro_secondary_ammo 2
+ set g_balance_electro_secondary_animtime 0.2
+ set g_balance_electro_secondary_bouncefactor 0.3
+ set g_balance_electro_secondary_bouncestop 0.05
+ set g_balance_electro_secondary_count 3
+ 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 15
+ set g_balance_electro_secondary_force 50
+ set g_balance_electro_secondary_health 5
+ set g_balance_electro_secondary_lifetime 4
+ set g_balance_electro_secondary_radius 150
+ set g_balance_electro_secondary_refire 0.2
+ 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_touchexplode 0
+ set g_balance_electro_switchdelay_drop 0.2
+ set g_balance_electro_switchdelay_raise 0.2
+ set g_balance_electro_weaponreplace ""
+ set g_balance_electro_weaponstart 0
+ set g_balance_electro_weaponstartoverride -1
+ set g_balance_electro_weaponthrowable 1
+ // }}}
+ // {{{ #7: Crylink
+ 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 -50
+ set g_balance_crylink_primary_joindelay 0.1
+ set g_balance_crylink_primary_joinexplode 1
+ set g_balance_crylink_primary_joinexplode_damage 0
+ 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_middle_fadetime 5
+ set g_balance_crylink_primary_middle_lifetime 5
+ set g_balance_crylink_primary_other_fadetime 5
+ set g_balance_crylink_primary_other_lifetime 5
+ set g_balance_crylink_primary_radius 80
+ set g_balance_crylink_primary_refire 0.7
+ set g_balance_crylink_primary_shots 6
+ set g_balance_crylink_primary_speed 2000
+ set g_balance_crylink_primary_spread 0.08
+ set g_balance_crylink_reload_ammo 0
+ 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_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_joindelay 0
+ set g_balance_crylink_secondary_joinexplode 0
+ set g_balance_crylink_secondary_joinexplode_damage 0
+ set g_balance_crylink_secondary_joinexplode_edgedamage 0
+ set g_balance_crylink_secondary_joinexplode_force 0
+ set g_balance_crylink_secondary_joinexplode_radius 0
+ set g_balance_crylink_secondary_joinspread 0
+ set g_balance_crylink_secondary_linkexplode 1
+ 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_spreadtype 1
+ set g_balance_crylink_switchdelay_drop 0.2
+ set g_balance_crylink_switchdelay_raise 0.2
+ set g_balance_crylink_weaponreplace ""
+ set g_balance_crylink_weaponstart 0
+ 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_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.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
+ 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 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
+ set g_balance_vortex_primary_damagefalloff_mindist 0
+ set g_balance_vortex_primary_force 400
+ set g_balance_vortex_primary_refire 1.5
+ set g_balance_vortex_reload_ammo 0
+ set g_balance_vortex_reload_time 2
+ set g_balance_vortex_secondary 0
+ set g_balance_vortex_secondary_ammo 2
+ set g_balance_vortex_secondary_animtime 0
+ set g_balance_vortex_secondary_chargepool 0
+ set g_balance_vortex_secondary_chargepool_pause_regen 1
+ set g_balance_vortex_secondary_chargepool_regen 0.15
+ set g_balance_vortex_secondary_damage 0
+ set g_balance_vortex_secondary_damagefalloff_forcehalflife 0
+ set g_balance_vortex_secondary_damagefalloff_halflife 0
+ set g_balance_vortex_secondary_damagefalloff_maxdist 0
+ set g_balance_vortex_secondary_damagefalloff_mindist 0
+ set g_balance_vortex_secondary_force 0
+ set g_balance_vortex_secondary_refire 0
+ set g_balance_vortex_switchdelay_drop 0.25
+ set g_balance_vortex_switchdelay_raise 0.25
+ set g_balance_vortex_weaponreplace ""
+ set g_balance_vortex_weaponstart 0
+ set g_balance_vortex_weaponstartoverride -1
+ set g_balance_vortex_weaponthrowable 1
+ // }}}
+ // {{{ #9: Hagar
+ set g_balance_hagar_primary_ammo 1
+ set g_balance_hagar_primary_damage 25
+ set g_balance_hagar_primary_damageforcescale 0
+ set g_balance_hagar_primary_edgedamage 12.5
+ set g_balance_hagar_primary_force 100
+ set g_balance_hagar_primary_health 15
+ 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_reload_ammo 0
+ set g_balance_hagar_reload_time 2
+ set g_balance_hagar_secondary 1
+ set g_balance_hagar_secondary_ammo 1
+ set g_balance_hagar_secondary_damage 35
+ set g_balance_hagar_secondary_damageforcescale 0
+ 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
+ set g_balance_hagar_secondary_lifetime_rand 0
+ set g_balance_hagar_secondary_load 1
+ set g_balance_hagar_secondary_load_abort 1
+ set g_balance_hagar_secondary_load_animtime 0.2
+ set g_balance_hagar_secondary_load_hold 4
+ set g_balance_hagar_secondary_load_linkexplode 0
+ set g_balance_hagar_secondary_load_max 4
+ set g_balance_hagar_secondary_load_releasedeath 0
+ set g_balance_hagar_secondary_load_speed 0.5
+ set g_balance_hagar_secondary_load_spread 0.075
+ 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_switchdelay_drop 0.2
+ set g_balance_hagar_switchdelay_raise 0.2
+ set g_balance_hagar_weaponreplace ""
+ set g_balance_hagar_weaponstart 0
+ set g_balance_hagar_weaponstartoverride -1
+ set g_balance_hagar_weaponthrowable 1
+ // }}}
+ // {{{ #10: Devastator
+ set g_balance_devastator_ammo 4
+ set g_balance_devastator_animtime 0.4
+ set g_balance_devastator_damage 80
+ set g_balance_devastator_damageforcescale 1
+ set g_balance_devastator_detonatedelay 0.02
+ set g_balance_devastator_edgedamage 40
+ set g_balance_devastator_force 400
+ set g_balance_devastator_guidedelay 0.2
+ set g_balance_devastator_guidegoal 512
+ set g_balance_devastator_guiderate 90
+ set g_balance_devastator_guideratedelay 0.01
+ set g_balance_devastator_guidestop 0
+ set g_balance_devastator_health 30
+ set g_balance_devastator_lifetime 10
+ set g_balance_devastator_radius 110
+ set g_balance_devastator_refire 1.1
+ set g_balance_devastator_reload_ammo 0
+ set g_balance_devastator_reload_time 2
+ 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_radius 0
+ set g_balance_devastator_remote_jump_velocity_z_add 400
+ 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
+ set g_balance_devastator_speed 1300
+ set g_balance_devastator_speedaccel 1300
+ set g_balance_devastator_speedstart 1000
+ set g_balance_devastator_switchdelay_drop 0.2
+ set g_balance_devastator_switchdelay_raise 0.2
+ set g_balance_devastator_weaponreplace ""
+ set g_balance_devastator_weaponstart 0
+ set g_balance_devastator_weaponstartoverride -1
+ set g_balance_devastator_weaponthrowable 1
+ // }}}
+ // {{{ #11: Port-O-Launch
+ 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 1000
+ set g_balance_porto_secondary 1
+ set g_balance_porto_secondary_animtime 0.3
+ set g_balance_porto_secondary_lifetime 5
+ set g_balance_porto_secondary_refire 1.5
+ set g_balance_porto_secondary_speed 1000
+ set g_balance_porto_switchdelay_drop 0.2
+ set g_balance_porto_switchdelay_raise 0.2
+ set g_balance_porto_weaponreplace ""
+ set g_balance_porto_weaponstart 0
+ set g_balance_porto_weaponstartoverride -1
+ 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_refire 1
+ set g_balance_vaporizer_reload_ammo 0
+ set g_balance_vaporizer_reload_time 0
+ set g_balance_vaporizer_secondary_ammo 0
+ set g_balance_vaporizer_secondary_animtime 0.2
+ set g_balance_vaporizer_secondary_damage 25
+ set g_balance_vaporizer_secondary_delay 0
+ set g_balance_vaporizer_secondary_edgedamage 12.5
+ set g_balance_vaporizer_secondary_force 400
+ set g_balance_vaporizer_secondary_lifetime 5
+ set g_balance_vaporizer_secondary_radius 70
+ set g_balance_vaporizer_secondary_refire 0.7
+ set g_balance_vaporizer_secondary_shotangle 0
+ set g_balance_vaporizer_secondary_speed 6000
+ set g_balance_vaporizer_secondary_spread 0
+ set g_balance_vaporizer_switchdelay_drop 0.2
+ 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
+ // }}}
+ // {{{ #13: Grappling Hook
+ set g_balance_hook_primary_ammo 5
+ set g_balance_hook_primary_animtime 0.3
+ set g_balance_hook_primary_hooked_ammo 5
+ set g_balance_hook_primary_hooked_time_free 2
+ set g_balance_hook_primary_hooked_time_max 0
+ set g_balance_hook_primary_refire 0.2
+ set g_balance_hook_secondary_animtime 0.3
+ set g_balance_hook_secondary_damage 25
+ set g_balance_hook_secondary_damageforcescale 0
+ set g_balance_hook_secondary_duration 1.5
+ set g_balance_hook_secondary_edgedamage 5
+ set g_balance_hook_secondary_force -2000
+ set g_balance_hook_secondary_gravity 5
+ set g_balance_hook_secondary_health 15
+ set g_balance_hook_secondary_lifetime 5
+ set g_balance_hook_secondary_power 3
+ set g_balance_hook_secondary_radius 500
+ set g_balance_hook_secondary_refire 3
+ set g_balance_hook_secondary_speed 0
+ set g_balance_hook_switchdelay_drop 0.2
+ set g_balance_hook_switchdelay_raise 0.2
+ set g_balance_hook_weaponreplace ""
+ set g_balance_hook_weaponstart 0
+ set g_balance_hook_weaponstartoverride -1
+ set g_balance_hook_weaponthrowable 1
+ // }}}
+ // {{{ #14: Heavy Laser Assault Cannon (MUTATOR WEAPON)
+ set g_balance_hlac_primary_ammo 1
+ set g_balance_hlac_primary_animtime 0.4
+ set g_balance_hlac_primary_damage 18
+ set g_balance_hlac_primary_edgedamage 9
+ set g_balance_hlac_primary_force 90
+ set g_balance_hlac_primary_lifetime 5
+ set g_balance_hlac_primary_radius 70
+ set g_balance_hlac_primary_refire 0.15
+ set g_balance_hlac_primary_speed 9000
+ set g_balance_hlac_primary_spread_add 0.0045
+ set g_balance_hlac_primary_spread_crouchmod 0.25
+ set g_balance_hlac_primary_spread_max 0.25
+ set g_balance_hlac_primary_spread_min 0.01
+ set g_balance_hlac_reload_ammo 0
+ set g_balance_hlac_reload_time 2
+ set g_balance_hlac_secondary 1
+ set g_balance_hlac_secondary_ammo 10
+ set g_balance_hlac_secondary_animtime 0.3
+ set g_balance_hlac_secondary_damage 15
+ set g_balance_hlac_secondary_edgedamage 7.5
+ set g_balance_hlac_secondary_force 90
+ set g_balance_hlac_secondary_lifetime 5
+ set g_balance_hlac_secondary_radius 70
+ set g_balance_hlac_secondary_refire 1
+ set g_balance_hlac_secondary_shots 6
+ set g_balance_hlac_secondary_speed 9000
+ set g_balance_hlac_secondary_spread 0.15
+ set g_balance_hlac_secondary_spread_crouchmod 0.5
+ set g_balance_hlac_switchdelay_drop 0.2
+ set g_balance_hlac_switchdelay_raise 0.2
+ set g_balance_hlac_weaponreplace ""
+ set g_balance_hlac_weaponstart 0
+ set g_balance_hlac_weaponstartoverride -1
+ set g_balance_hlac_weaponthrowable 1
+ // }}}
+ // {{{ #15: @!#%'n Tuba
+ set g_balance_tuba_animtime 0.05
+ set g_balance_tuba_attenuation 0.5
+ set g_balance_tuba_damage 5
+ set g_balance_tuba_edgedamage 0
+ set g_balance_tuba_fadetime 0.25
+ set g_balance_tuba_force 40
+ set g_balance_tuba_pitchstep 6
+ set g_balance_tuba_radius 200
+ set g_balance_tuba_refire 0.05
+ set g_balance_tuba_switchdelay_drop 0.2
+ set g_balance_tuba_switchdelay_raise 0.2
+ set g_balance_tuba_volume 1
+ set g_balance_tuba_weaponreplace ""
+ set g_balance_tuba_weaponstart 0
+ set g_balance_tuba_weaponstartoverride -1
+ set g_balance_tuba_weaponthrowable 1
+ // }}}
+ // {{{ #16: Rifle (MUTATOR WEAPON)
+ set g_balance_rifle_bursttime 0
+ set g_balance_rifle_primary_ammo 10
+ set g_balance_rifle_primary_animtime 0.4
+ set g_balance_rifle_primary_bullethail 0
+ set g_balance_rifle_primary_burstcost 0
+ set g_balance_rifle_primary_damage 80
+ set g_balance_rifle_primary_force 100
+ set g_balance_rifle_primary_refire 1.2
+ set g_balance_rifle_primary_shots 1
+ set g_balance_rifle_primary_solidpenetration 62.2
+ set g_balance_rifle_primary_spread 0
+ set g_balance_rifle_primary_tracer 1
+ set g_balance_rifle_reload_ammo 80
+ set g_balance_rifle_reload_time 2
+ set g_balance_rifle_secondary 1
+ set g_balance_rifle_secondary_ammo 10
+ set g_balance_rifle_secondary_animtime 0.3
+ set g_balance_rifle_secondary_bullethail 0
+ set g_balance_rifle_secondary_burstcost 0
+ set g_balance_rifle_secondary_damage 20
+ set g_balance_rifle_secondary_force 50
+ set g_balance_rifle_secondary_refire 0.9
+ set g_balance_rifle_secondary_reload 0
+ set g_balance_rifle_secondary_shots 4
+ set g_balance_rifle_secondary_solidpenetration 15.5
+ set g_balance_rifle_secondary_spread 0.04
+ set g_balance_rifle_secondary_tracer 0
+ set g_balance_rifle_switchdelay_drop 0.2
+ set g_balance_rifle_switchdelay_raise 0.2
+ set g_balance_rifle_weaponreplace ""
+ set g_balance_rifle_weaponstart 0
+ set g_balance_rifle_weaponstartoverride -1
+ set g_balance_rifle_weaponthrowable 1
+ // }}}
+ // {{{ #17: Fireball
+ set g_balance_fireball_primary_animtime 0.4
+ set g_balance_fireball_primary_bfgdamage 100
+ set g_balance_fireball_primary_bfgforce 0
+ set g_balance_fireball_primary_bfgradius 1000
+ set g_balance_fireball_primary_damage 200
+ set g_balance_fireball_primary_damageforcescale 0
+ set g_balance_fireball_primary_edgedamage 50
+ set g_balance_fireball_primary_force 600
+ set g_balance_fireball_primary_health 0
+ set g_balance_fireball_primary_laserburntime 0.5
+ set g_balance_fireball_primary_laserdamage 80
+ set g_balance_fireball_primary_laseredgedamage 20
+ set g_balance_fireball_primary_laserradius 256
+ set g_balance_fireball_primary_lifetime 15
+ set g_balance_fireball_primary_radius 200
+ set g_balance_fireball_primary_refire 2
+ set g_balance_fireball_primary_refire2 0
+ set g_balance_fireball_primary_speed 1200
+ set g_balance_fireball_primary_spread 0
+ set g_balance_fireball_secondary_animtime 0.3
+ set g_balance_fireball_secondary_damage 40
+ set g_balance_fireball_secondary_damageforcescale 4
+ set g_balance_fireball_secondary_damagetime 5
+ set g_balance_fireball_secondary_laserburntime 0.5
+ set g_balance_fireball_secondary_laserdamage 50
+ set g_balance_fireball_secondary_laseredgedamage 20
+ set g_balance_fireball_secondary_laserradius 110
+ set g_balance_fireball_secondary_lifetime 7
+ set g_balance_fireball_secondary_refire 1.5
+ set g_balance_fireball_secondary_speed 900
+ set g_balance_fireball_secondary_speed_up 100
+ set g_balance_fireball_secondary_speed_z 0
+ set g_balance_fireball_secondary_spread 0
+ set g_balance_fireball_switchdelay_drop 0.2
+ set g_balance_fireball_switchdelay_raise 0.2
+ set g_balance_fireball_weaponreplace ""
+ set g_balance_fireball_weaponstart 0
+ set g_balance_fireball_weaponstartoverride -1
+ set g_balance_fireball_weaponthrowable 0
+ // }}}
+ // {{{ #18: T.A.G. Seeker (MUTATOR WEAPON)
+ set g_balance_seeker_flac_ammo 1
+ set g_balance_seeker_flac_animtime 0.1
+ set g_balance_seeker_flac_damage 15
+ set g_balance_seeker_flac_edgedamage 10
+ set g_balance_seeker_flac_force 50
+ set g_balance_seeker_flac_lifetime 0.1
+ set g_balance_seeker_flac_lifetime_rand 0.05
+ set g_balance_seeker_flac_radius 100
+ set g_balance_seeker_flac_refire 0.1
+ set g_balance_seeker_flac_speed 3000
+ set g_balance_seeker_flac_speed_up 1000
+ set g_balance_seeker_flac_speed_z 0
+ set g_balance_seeker_flac_spread 0.4
+ set g_balance_seeker_missile_accel 1400
+ set g_balance_seeker_missile_ammo 2
+ set g_balance_seeker_missile_animtime 0.2
+ set g_balance_seeker_missile_count 3
+ set g_balance_seeker_missile_damage 30
+ set g_balance_seeker_missile_damageforcescale 4
+ set g_balance_seeker_missile_decel 1400
+ set g_balance_seeker_missile_delay 0.25
+ set g_balance_seeker_missile_edgedamage 10
+ set g_balance_seeker_missile_force 150
+ set g_balance_seeker_missile_health 5
+ set g_balance_seeker_missile_lifetime 15
+ set g_balance_seeker_missile_proxy 0
+ set g_balance_seeker_missile_proxy_delay 0.2
+ set g_balance_seeker_missile_proxy_maxrange 45
+ set g_balance_seeker_missile_radius 80
+ set g_balance_seeker_missile_refire 0.5
+ set g_balance_seeker_missile_smart 1
+ set g_balance_seeker_missile_smart_mindist 800
+ set g_balance_seeker_missile_smart_trace_max 2500
+ set g_balance_seeker_missile_smart_trace_min 1000
+ set g_balance_seeker_missile_speed 700
+ set g_balance_seeker_missile_speed_max 1300
+ set g_balance_seeker_missile_speed_up 300
+ set g_balance_seeker_missile_speed_z 0
+ set g_balance_seeker_missile_spread 0
+ set g_balance_seeker_missile_turnrate 0.65
+ set g_balance_seeker_reload_ammo 0
+ set g_balance_seeker_reload_time 2
+ set g_balance_seeker_switchdelay_drop 0.2
+ set g_balance_seeker_switchdelay_raise 0.2
+ set g_balance_seeker_tag_ammo 1
+ set g_balance_seeker_tag_animtime 0.2
+ set g_balance_seeker_tag_damageforcescale 4
+ set g_balance_seeker_tag_health 5
+ set g_balance_seeker_tag_lifetime 15
+ set g_balance_seeker_tag_refire 0.75
+ set g_balance_seeker_tag_speed 5000
+ set g_balance_seeker_tag_spread 0
+ set g_balance_seeker_tag_tracker_lifetime 10
+ set g_balance_seeker_type 0
+ set g_balance_seeker_weaponreplace ""
+ set g_balance_seeker_weaponstart 0
+ set g_balance_seeker_weaponstartoverride -1
+ 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_distance 1000
+ set g_balance_shockwave_blast_edgedamage 0
+ set g_balance_shockwave_blast_force 200
+ set g_balance_shockwave_blast_force_forwardbias 50
+ set g_balance_shockwave_blast_force_zscale 2
+ 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_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_min 0
+ set g_balance_shockwave_blast_refire 0.75
+ set g_balance_shockwave_blast_splash_damage 15
+ set g_balance_shockwave_blast_splash_edgedamage 0
+ set g_balance_shockwave_blast_splash_force 100
+ set g_balance_shockwave_blast_splash_force_forwardbias 50
+ set g_balance_shockwave_blast_splash_multiplier_accuracy 0.5
+ set g_balance_shockwave_blast_splash_multiplier_distance 0.5
+ set g_balance_shockwave_blast_splash_multiplier_min 0
+ set g_balance_shockwave_blast_splash_radius 70
+ set g_balance_shockwave_blast_spread_max 120
+ set g_balance_shockwave_blast_spread_min 25
+ set g_balance_shockwave_melee_animtime 1.3
+ set g_balance_shockwave_melee_damage 80
+ set g_balance_shockwave_melee_delay 0.25
+ set g_balance_shockwave_melee_force 200
+ set g_balance_shockwave_melee_multihit 1
+ set g_balance_shockwave_melee_no_doubleslap 1
+ set g_balance_shockwave_melee_nonplayerdamage 40
+ set g_balance_shockwave_melee_range 120
+ set g_balance_shockwave_melee_refire 1.25
+ set g_balance_shockwave_melee_swing_side 120
+ set g_balance_shockwave_melee_swing_up 30
+ set g_balance_shockwave_melee_time 0.15
+ set g_balance_shockwave_melee_traces 10
+ set g_balance_shockwave_switchdelay_drop 0.2
+ set g_balance_shockwave_switchdelay_raise 0.2
+ set g_balance_shockwave_weaponreplace ""
+ set g_balance_shockwave_weaponstart 0
+ 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_botaimlifetime 0
+ set g_balance_arc_beam_botaimspeed 0
+ set g_balance_arc_beam_damage 115
+ 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_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_overheat_max 5
+ set g_balance_arc_overheat_min 3
+ set g_balance_arc_beam_heat 1
+ set g_balance_arc_burst_heat 4
+ 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_returnspeed 8
+ set g_balance_arc_beam_tightness 0.5
+ 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_weaponreplace ""
+ set g_balance_arc_weaponstart 0
+ set g_balance_arc_weaponstartoverride -1
+ set g_balance_arc_weaponthrowable 1
+ // }}}
++// {{{ #21: Heavy Machine Gun
++set g_balance_hmg_ammo 0
++set g_balance_hmg_damage 0
++set g_balance_hmg_force 0
++set g_balance_hmg_refire 0
++set g_balance_hmg_reload_ammo 120
++set g_balance_hmg_reload_time 1
++set g_balance_hmg_solidpenetration 32
++set g_balance_hmg_spread_add 0.01
++set g_balance_hmg_spread_max 0.05
++set g_balance_hmg_spread_min 0.02
++set g_balance_hmg_switchdelay_drop 0.2
++set g_balance_hmg_switchdelay_raise 0.2
++set g_balance_hmg_weaponreplace ""
++set g_balance_hmg_weaponstart 0
++set g_balance_hmg_weaponstartoverride 0
++set g_balance_hmg_weaponthrowable 0
++// }}}
++// {{{ #22: Rocket Propelled Chainsaw
++set g_balance_rpc_ammo 10
++set g_balance_rpc_animtime 1
++set g_balance_rpc_damage 150
++set g_balance_rpc_damage2 500
++set g_balance_rpc_damageforcescale 2
++set g_balance_rpc_edgedamage 50
++set g_balance_rpc_force 400
++set g_balance_rpc_health 25
++set g_balance_rpc_lifetime 30
++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_speedaccel 5000
++set g_balance_rpc_switchdelay_drop 0.2
++set g_balance_rpc_switchdelay_raise 0.2
++set g_balance_rpc_weaponreplace ""
++set g_balance_rpc_weaponstart 0
++set g_balance_rpc_weaponstartoverride 0
++set g_balance_rpc_weaponthrowable 0
++// }}}
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..c33361838ef6c04186a7b48bca720d95122d4b7a
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,228 @@@
++g_mod_balance Overkill
++
++// {{{ starting gear
++set g_balance_health_start 100
++set g_balance_armor_start 0
++set g_start_ammo_shells 15
++set g_start_ammo_nails 0
++set g_start_ammo_rockets 0
++set g_start_ammo_cells 0
++set g_start_ammo_plasma 0
++set g_start_ammo_fuel 0
++set g_warmup_start_health 100 "starting values when being in warmup-stage"
++set g_warmup_start_armor 100 "starting values when being in warmup-stage"
++set g_warmup_start_ammo_shells 30 "starting values when being in warmup-stage"
++set g_warmup_start_ammo_nails 160 "starting values when being in warmup-stage"
++set g_warmup_start_ammo_rockets 80 "starting values when being in warmup-stage"
++set g_warmup_start_ammo_cells 90 "starting values when being in warmup-stage"
++set g_warmup_start_ammo_plasma 90 "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 200
++set g_lms_start_ammo_shells 60
++set g_lms_start_ammo_nails 320
++set g_lms_start_ammo_rockets 160
++set g_lms_start_ammo_cells 180
++set g_lms_start_ammo_plasma 180
++set g_lms_start_ammo_fuel 0
++set g_balance_nix_roundtime 25
++set g_balance_nix_incrtime 1.6
++set g_balance_nix_ammo_shells 60
++set g_balance_nix_ammo_nails 320
++set g_balance_nix_ammo_rockets 160
++set g_balance_nix_ammo_cells 180
++set g_balance_nix_ammo_plasma 180
++set g_balance_nix_ammo_fuel 0
++set g_balance_nix_ammoincr_shells 2 // eh this will need figured out later I assume
++set g_balance_nix_ammoincr_nails 6
++set g_balance_nix_ammoincr_rockets 2
++set g_balance_nix_ammoincr_cells 2
++set g_balance_nix_ammoincr_plasma 2
++set g_balance_nix_ammoincr_fuel 2
++// }}}
++
++// {{{ pickup items
++set g_pickup_ammo_anyway 1
++set g_pickup_weapons_anyway 1
++set g_pickup_shells 15
++set g_pickup_shells_weapon 15
++set g_pickup_shells_max 60
++set g_pickup_nails 80
++set g_pickup_nails_weapon 80
++set g_pickup_nails_max 320
++set g_pickup_rockets 40
++set g_pickup_rockets_weapon 40
++set g_pickup_rockets_max 160
++set g_pickup_cells 30
++set g_pickup_cells_weapon 30
++set g_pickup_cells_max 180
++set g_pickup_plasma 30
++set g_pickup_plasma_weapon 30
++set g_pickup_plasma_max 180
++set g_pickup_fuel 50
++set g_pickup_fuel_weapon 50
++set g_pickup_fuel_jetpack 100
++set g_pickup_fuel_max 100
++set g_pickup_armorsmall 5
++set g_pickup_armorsmall_max 20
++set g_pickup_armorsmall_anyway 0
++set g_pickup_armormedium 25
++set g_pickup_armormedium_max 200
++set g_pickup_armormedium_anyway 1
++set g_pickup_armorbig 50
++set g_pickup_armorbig_max 200
++set g_pickup_armorbig_anyway 1
++set g_pickup_armorlarge 100
++set g_pickup_armorlarge_max 200
++set g_pickup_armorlarge_anyway 1
++set g_pickup_healthsmall 5
++set g_pickup_healthsmall_max 200
++set g_pickup_healthsmall_anyway 1
++set g_pickup_healthmedium 25
++set g_pickup_healthmedium_max 200
++set g_pickup_healthmedium_anyway 1
++set g_pickup_healthlarge 50
++set g_pickup_healthlarge_max 200
++set g_pickup_healthlarge_anyway 1
++set g_pickup_healthmega 100
++set g_pickup_healthmega_max 200
++set g_pickup_healthmega_anyway 0
++set g_pickup_respawntime_short 15
++set g_pickup_respawntime_medium 20
++set g_pickup_respawntime_long 30
++set g_pickup_respawntime_powerup 120
++set g_pickup_respawntime_weapon 10
++set g_pickup_respawntime_superweapon 120
++set g_pickup_respawntime_ammo 10
++set g_pickup_respawntimejitter_short 0
++set g_pickup_respawntimejitter_medium 0
++set g_pickup_respawntimejitter_long 0
++set g_pickup_respawntimejitter_powerup 0
++set g_pickup_respawntimejitter_weapon 0
++set g_pickup_respawntimejitter_superweapon 10
++set g_pickup_respawntimejitter_ammo 0
++// }}}
++
++// {{{ regen/rot
++set g_balance_health_regen 0
++set g_balance_health_regenlinear 100
++set g_balance_pause_health_regen 2
++set g_balance_pause_health_regen_spawn 0
++set g_balance_health_rot 0
++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
++set g_balance_health_rotstable 200
++set g_balance_health_limit 999
++set g_balance_armor_regen 0
++set g_balance_armor_regenlinear 0
++set g_balance_armor_rot 0
++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 0
++set g_balance_armor_limit 999
++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
++set g_balance_fuel_rot 0.05
++set g_balance_fuel_rotlinear 0
++set g_balance_pause_fuel_rot 5
++set g_balance_pause_fuel_rot_spawn 10
++set g_balance_fuel_regenstable 50
++set g_balance_fuel_rotstable 100
++set g_balance_fuel_limit 999
++// }}}
++
++// {{{ misc
++set g_balance_selfdamagepercent 0.65
++set g_weaponspeedfactor 1 "weapon projectile speed multiplier"
++set g_weaponratefactor 1 "weapon fire rate multiplier"
++set g_weapondamagefactor 1 "weapon damage multiplier"
++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.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)
++// 0: only damage from contents (lava/slime) or exceptions
++// 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 0
++// possible values:
++// 0: absolute velocity projectiles (like Quake)
++// 1: relative velocity projectiles, "Newtonian" (like Tribes 2)
++// 2: relative velocity projectiles, but aim is precorrected so projectiles hit the crosshair (note: strafe rockets then are SLOWER than ones shot while standing, happens in 1 too when aiming correctly which is hard)
++set g_projectiles_newton_style_2_minfactor 1
++set g_projectiles_newton_style_2_maxfactor 1.5
++set g_projectiles_spread_style 7
++// possible values:
++// 0: forward + solid sphere (like Quake) - varies velocity
++// 1: forward + flattened solid sphere
++// 2: forward + solid circle
++// 3: forward + normal distribution 3D - varies velocity
++// 4: forward + normal distribution on a plane
++// 5: forward + circle with 1-r falloff
++// 6: forward + circle with 1-r^2 falloff
++// 7: forward + circle with (1-r)(2-r) falloff
++set g_balance_falldamage_deadminspeed 250
++set g_balance_falldamage_minspeed 900
++set g_balance_falldamage_factor 0.20
++set g_balance_falldamage_maxdamage 40
++set g_balance_damagepush_speedfactor 2.5
++set g_balance_contents_damagerate 0.2 // ticrate interval for applying damage with playerdamage/projectiledamage
++set g_balance_contents_drowndelay 10 // time under water before a player begins drowning
++set g_balance_contents_playerdamage_drowning 20 // damage per second for while player is drowning
++set g_balance_contents_playerdamage_lava 50 // damage per second for while player is inside lava
++set g_balance_contents_playerdamage_slime 30 // damage per second for while player is inside slime
++set g_balance_contents_projectiledamage 10000 // instantly kill projectiles upon touching lava/slime
++set g_maxpushtime 8.0 "timeout for kill credit when your damage knocks someone into a death trap"
++// }}}
++
++// {{{ powerups
++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 30
++set g_balance_powerup_strength_selfdamage 1.5
++set g_balance_powerup_strength_selfforce 1.5
++set g_balance_superweapons_time 30
++// }}}
++
++// {{{ jetpack/hook
++set g_jetpack_antigravity 0.8 "factor of gravity compensation of the jetpack"
++set g_jetpack_acceleration_side 1200 "acceleration of the jetpack in xy direction"
++set g_jetpack_acceleration_up 600 "acceleration of the jetpack in z direction (note: you have to factor in gravity here, if antigravity is not 1)"
++set g_jetpack_maxspeed_side 1200 "max speed of the jetpack in xy direction"
++set g_jetpack_maxspeed_up 600 "max speed of the jetpack in z direction"
++set g_jetpack_fuel 8 "fuel per second for jetpack"
++set g_jetpack_attenuation 2 "jetpack sound attenuation"
++
++set g_grappling_hook_tarzan 2 // 2: can also pull players
++set g_balance_grapplehook_speed_fly 1800
++set g_balance_grapplehook_speed_pull 2000
++set g_balance_grapplehook_force_rubber 2000
++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 50
++set g_balance_grapplehook_damagedbycontents 1
++set g_balance_grapplehook_refire 0.2
++// }}}
++
++// {{{ port-o-launch
++set g_balance_portal_health 200 // these get recharged whenever the portal is used
++set g_balance_portal_lifetime 15 // these get recharged whenever the portal is used
++// }}}
++
++exec bal-wep-xonotic.cfg
diff --cc mutators.cfg
index ef60d819342d63325f218ebb1e190b34ac4f5246,c6716585c35e118ca507015565fb3b9efcea5740..adfcd240522d7e07f21cbbecef049650c0ec755b
@@@ -23,44 -23,16 +23,45 @@@ set sv_dodging_frozen 0 "allow dodging 
  
  
  // ===========
- //  minstagib
+ //  instagib
  // ===========
- set g_minstagib 0 "enable minstagib"
- set g_minstagib_extralives 1 "how many extra lives you will get per powerup"
- set g_minstagib_ammo_start 10 "starting ammo"
- set g_minstagib_ammo_drop 5 "how much ammo you'll get for weapons or cells"
- set g_minstagib_invis_alpha 0.15
- set g_minstagib_speed_highspeed 1.5 "speed-multiplier that applies while you carry the invincibility powerup"
+ set g_instagib 0 "enable instagib"
+ set g_instagib_extralives 1 "how many extra lives you will get per powerup"
+ set g_instagib_ammo_start 10 "starting ammo"
+ set g_instagib_ammo_drop 5 "how much ammo you'll get for weapons or cells"
+ set g_instagib_invis_alpha 0.15
+ set g_instagib_speed_highspeed 1.5 "speed-multiplier that applies while you carry the invincibility powerup"
  
  
- set g_overkill_ammo_charge_rate_nex 0.5
- set g_overkill_ammo_charge_rate_uzi 0.5
 +// ==========
 +//  overkill
 +// ==========
 +set g_overkill 0 "enable overkill"
++set g_overkill_superguns_builtin 0
 +
 +set g_overkill_100a_anyway 1
 +set g_overkill_100h_anyway 1
 +set g_overkill_powerups_replace 1
 +set g_overkill_superguns_onemag 1
 +set g_overkill_superguns_respawn_time 20
 +
 +set g_overkill_ammo_charge 1
 +set g_overkill_ammo_charge_notice 1
 +set g_overkill_ammo_charge_limit 1
 +set g_overkill_ammo_charge_rate 0.5
- set g_overkill_ammo_decharge_uzi 0.025
++set g_overkill_ammo_charge_rate_vortex 0.5
++set g_overkill_ammo_charge_rate_machinegun 0.5
 +set g_overkill_ammo_charge_rate_shotgun 0.5
 +set g_overkill_ammo_charge_rate_hmg 0.25
 +set g_overkill_ammo_charge_rate_rpc 1.5
 +set g_overkill_ammo_decharge 0.1
- set g_overkill_ammo_decharge_nex 0.2
++set g_overkill_ammo_decharge_machinegun 0.025
 +set g_overkill_ammo_decharge_shotgun 0.15
++set g_overkill_ammo_decharge_vortex 0.2
 +set g_overkill_ammo_decharge_rpc 1
 +set g_overkill_ammo_decharge_hmg 0.01
 +
 +
  // =========
  //  vampire
  // =========
index a4cf324d3d55d11366518c55c4ea6289cd5118f2,1e2c7b770147e88bde914b38b0693545b4f24262..baf8202ac727ca0c9bddc7d2ed97a88c9c6bb4b7
@@@ -1436,16 -1520,14 +1520,18 @@@ void CSQC_UpdateView(float w, float h
                                        weapon_clipload = getstati(STAT_WEAPON_CLIPLOAD);
                                        weapon_clipsize = getstati(STAT_WEAPON_CLIPSIZE);
  
-                                       float nex_charge, nex_chargepool;
-                                       nex_charge = getstatf(STAT_NEX_CHARGE);
-                                       nex_chargepool = getstatf(STAT_NEX_CHARGEPOOL);
-                                       
 +                                      float ok_ammo_charge, ok_ammo_chargepool;
 +                                      ok_ammo_charge = getstatf(STAT_OK_AMMO_CHARGE);
 +                                      ok_ammo_chargepool = getstatf(STAT_OK_AMMO_CHARGEPOOl);
 +
-                                       if(nex_charge_movingavg == 0) // this should only happen if we have just loaded up the game
-                                               nex_charge_movingavg = nex_charge;
+                                       float vortex_charge, vortex_chargepool;
+                                       vortex_charge = getstatf(STAT_VORTEX_CHARGE);
+                                       vortex_chargepool = getstatf(STAT_VORTEX_CHARGEPOOL);
+                                       float arc_heat = getstatf(STAT_ARC_HEAT);
+                                       if(vortex_charge_movingavg == 0) // this should only happen if we have just loaded up the game
+                                               vortex_charge_movingavg = vortex_charge;
  
  
                                        // handle the values
index b8ad43a3eb1a3012f96eed6bbce29ce61f736569,b03a67a92f12f0b7a2ed87daf8fadbda906be703..90a74a905b9bfaa1771ed3a9e157c9df9bdc234c
@@@ -439,13 -452,4 +452,12 @@@ string autocvar__cl_playermodel
  float autocvar_cl_deathglow;
  float autocvar_developer_csqcentities;
  float autocvar_g_jetpack_attenuation;
- // OK Crosshair
 +var string autocvar_crosshair_hmg = ""; 
 +var vector autocvar_crosshair_hmg_color = '0.2 1.0 0.2';
 +var float autocvar_crosshair_hmg_alpha = 1;
 +var float autocvar_crosshair_hmg_size = 1;
 +var string autocvar_crosshair_rpc = ""; 
 +var vector autocvar_crosshair_rpc_color = '0.2 1.0 0.2';
 +var float autocvar_crosshair_rpc_alpha = 1;
 +var float autocvar_crosshair_rpc_size = 1;
+ float autocvar_cl_nade_timer;
index 0000000000000000000000000000000000000000,0d2bce9439953fb5931e8ac3e5a1a03b57ab8ed8..ba6491ffbd54e08f5556bc51616643cdae955716
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,511 +1,515 @@@
+ .vector iorigin1, iorigin2;
+ .float spawntime;
+ .vector trail_oldorigin;
+ .float trail_oldtime;
+ .float fade_time, fade_rate;
+ void SUB_Stop()
+ {
+       self.move_velocity = self.move_avelocity = '0 0 0';
+       self.move_movetype = MOVETYPE_NONE;
+ }
+ .float alphamod;
+ .float count; // set if clientside projectile
+ .float cnt; // sound index
+ .float gravity;
+ .float snd_looping;
+ .float silent;
+ void Projectile_ResetTrail(vector to)
+ {
+       self.trail_oldorigin = to;
+       self.trail_oldtime = time;
+ }
+ void Projectile_DrawTrail(vector to)
+ {
+       vector from;
+       float t0;
+       from = self.trail_oldorigin;
+       t0 = self.trail_oldtime;
+       self.trail_oldorigin = to;
+       self.trail_oldtime = time;
+       // force the effect even for stationary firemine
+       if(self.cnt == PROJECTILE_FIREMINE)
+               if(from == to)
+                       from_z += 1;
+       if (self.traileffect)
+       {
+               particles_alphamin = particles_alphamax = particles_fade = sqrt(self.alpha);
+               boxparticles(self.traileffect, self, from, to, self.velocity, self.velocity, 1, PARTICLES_USEALPHA | PARTICLES_USEFADE | PARTICLES_DRAWASTRAIL);
+       }
+ }
+ .float proj_time;
+ void Projectile_Draw()
+ {
+       vector rot;
+       vector trailorigin;
+       float f;
+       float drawn;
+       float t;
+       float a;
+       float dt = time - self.proj_time;
+       self.proj_time = time;
+       if(dt <= 0) { return; }
+       f = self.move_flags;
+       if(self.count & 0x80)
+       {
+               //self.move_flags &= ~FL_ONGROUND;
+               if(self.move_movetype == MOVETYPE_NONE || self.move_movetype == MOVETYPE_FLY)
+                       Movetype_Physics_NoMatchServer();
+                       // the trivial movetypes do not have to match the
+                       // server's ticrate as they are ticrate independent
+                       // NOTE: this assumption is only true if MOVETYPE_FLY
+                       // projectiles detonate on impact. If they continue
+                       // moving, we might still be ticrate dependent.
+               else
+                       Movetype_Physics_MatchServer(autocvar_cl_projectiles_sloppy);
+               if(!(self.move_flags & FL_ONGROUND))
+                       if(self.velocity != '0 0 0')
+                               self.move_angles = self.angles = vectoangles(self.velocity);
+       }
+       else
+       {
+               InterpolateOrigin_Do();
+       }
+       if(self.count & 0x80)
+       {
+               drawn = (time >= self.spawntime - 0.02);
+               t = max(time, self.spawntime);
+       }
+       else
+       {
+               drawn = (self.iflags & IFLAG_VALID);
+               t = time;
+       }
+       if(!(f & FL_ONGROUND))
+       {
+               rot = '0 0 0';
+               switch(self.cnt)
+               {
+                       /*
+                       case PROJECTILE_GRENADE:
+                               rot = '-2000 0 0'; // forward
+                               break;
+                       */
+                       case PROJECTILE_GRENADE_BOUNCING:
+                               rot = '0 -1000 0'; // sideways
+                               break;
+                       case PROJECTILE_HOOKBOMB:
+                               rot = '1000 0 0'; // forward
+                               break;
+                       default:
+                               break;
+               }
+               if(Nade_IDFromProjectile(self.cnt) != 0)
+                       rot = self.avelocity;
+               self.angles = AnglesTransform_ToAngles(AnglesTransform_Multiply(AnglesTransform_FromAngles(self.angles), rot * (t - self.spawntime)));
+       }
+       vector ang;
+       ang = self.angles;
+       ang_x = -ang_x;
+       makevectors(ang);
+       a = 1 - (time - self.fade_time) * self.fade_rate;
+       self.alpha = bound(0, self.alphamod * a, 1);
+       if(self.alpha <= 0)
+               drawn = 0;
+       self.renderflags = 0;
+       trailorigin = self.origin;
+       switch(self.cnt)
+       {
+               case PROJECTILE_GRENADE:
+               case PROJECTILE_GRENADE_BOUNCING:
+                       trailorigin += v_right * 1 + v_forward * -10;
+                       break;
+               default:
+                       break;
+       }
+       if(Nade_IDFromProjectile(self.cnt) != 0)
+               trailorigin += v_up * 4;
+       if(drawn)
+               Projectile_DrawTrail(trailorigin);
+       else
+               Projectile_ResetTrail(trailorigin);
+       self.drawmask = 0;
+       if(!drawn)
+               return;
+       switch(self.cnt)
+       {
+               // Possibly add dlights here.
+               default:
+                       break;
+       }
+       self.drawmask = MASK_NORMAL;
+ }
+ void loopsound(entity e, float ch, string samp, float vol, float attn)
+ {
+       if(self.silent)
+               return;
+       sound(e, ch, samp, vol, attn);
+       e.snd_looping = ch;
+ }
+ void Ent_RemoveProjectile()
+ {
+       if(self.count & 0x80)
+       {
+               tracebox(self.origin, self.mins, self.maxs, self.origin + self.velocity * 0.05, MOVE_NORMAL, self);
+               Projectile_DrawTrail(trace_endpos);
+       }
+ }
+ void Ent_Projectile()
+ {
+       float f;
+       // projectile properties:
+       //   kind (interpolated, or clientside)
+       //
+       //   modelindex
+       //   origin
+       //   scale
+       //   if clientside:
+       //     velocity
+       //     gravity
+       //   soundindex (hardcoded list)
+       //   effects
+       //
+       // projectiles don't send angles, because they always follow the velocity
+       f = ReadByte();
+       self.count = (f & 0x80);
+       self.iflags = (self.iflags & IFLAG_INTERNALMASK) | IFLAG_AUTOANGLES | IFLAG_ANGLES | IFLAG_ORIGIN;
+       self.solid = SOLID_TRIGGER;
+       self.proj_time = time;
+       //self.effects = EF_NOMODELFLAGS;
+       // this should make collisions with bmodels more exact, but it leads to
+       // projectiles no longer being able to lie on a bmodel
+       self.move_nomonsters = MOVE_WORLDONLY;
+       if(f & 0x40)
+               self.move_flags |= FL_ONGROUND;
+       else
+               self.move_flags &= ~FL_ONGROUND;
+       if(!self.move_time)
+       {
+               // for some unknown reason, we don't need to care for
+               // sv_gameplayfix_delayprojectiles here.
+               self.move_time = time;
+               self.spawntime = time;
+       }
+       else
+               self.move_time = max(self.move_time, time);
+       if(!(self.count & 0x80))
+               InterpolateOrigin_Undo();
+       if(f & 1)
+       {
+               self.origin_x = ReadCoord();
+               self.origin_y = ReadCoord();
+               self.origin_z = ReadCoord();
+               setorigin(self, self.origin);
+               if(self.count & 0x80)
+               {
+                       self.velocity_x = ReadCoord();
+                       self.velocity_y = ReadCoord();
+                       self.velocity_z = ReadCoord();
+                       if(f & 0x10)
+                               self.gravity = ReadCoord();
+                       else
+                               self.gravity = 0; // none
+                       self.move_origin = self.origin;
+                       self.move_velocity = self.velocity;
+               }
+               if(time == self.spawntime || (self.count & 0x80) || (f & 0x08))
+               {
+                       self.trail_oldorigin = self.origin;
+                       if(!(self.count & 0x80))
+                               InterpolateOrigin_Reset();
+               }
+               if(f & 0x20)
+               {
+                       self.fade_time = time + ReadByte() * ticrate;
+                       self.fade_rate = 1 / (ReadByte() * ticrate);
+               }
+               else
+               {
+                       self.fade_time = 0;
+                       self.fade_rate = 0;
+               }
+               self.team = ReadByte() - 1;
+       }
+       if(f & 2)
+       {
+               self.cnt = ReadByte();
+               self.silent = (self.cnt & 0x80);
+               self.cnt = (self.cnt & 0x7F);
+               self.scale = 1;
+               self.traileffect = 0;
+               switch(self.cnt)
+               {
+                       case PROJECTILE_ELECTRO: setmodel(self, "models/ebomb.mdl");self.traileffect = particleeffectnum("TR_NEXUIZPLASMA"); break;
+                       case PROJECTILE_ROCKET: setmodel(self, "models/rocket.md3");self.traileffect = particleeffectnum("TR_ROCKET"); self.scale = 2; break;
+                       case PROJECTILE_CRYLINK: setmodel(self, "models/plasmatrail.mdl");self.traileffect = particleeffectnum("TR_CRYLINKPLASMA"); break;
+                       case PROJECTILE_CRYLINK_BOUNCING: setmodel(self, "models/plasmatrail.mdl");self.traileffect = particleeffectnum("TR_CRYLINKPLASMA"); break;
+                       case PROJECTILE_ELECTRO_BEAM: setmodel(self, "models/elaser.mdl");self.traileffect = particleeffectnum("TR_NEXUIZPLASMA"); break;
+                       case PROJECTILE_GRENADE: setmodel(self, "models/grenademodel.md3");self.traileffect = particleeffectnum("TR_GRENADE"); break;
+                       case PROJECTILE_GRENADE_BOUNCING: setmodel(self, "models/grenademodel.md3");self.traileffect = particleeffectnum("TR_GRENADE"); break;
+                       case PROJECTILE_MINE: setmodel(self, "models/mine.md3");self.traileffect = particleeffectnum("TR_GRENADE"); break;
+                       case PROJECTILE_BLASTER: setmodel(self, "models/laser.mdl");self.traileffect = particleeffectnum(""); break;
+                       case PROJECTILE_HLAC: setmodel(self, "models/hlac_bullet.md3");self.traileffect = particleeffectnum(""); break;
+                       case PROJECTILE_PORTO_RED: setmodel(self, "models/grenademodel.md3");self.traileffect = particleeffectnum("TR_WIZSPIKE"); self.scale = 4; break;
+                       case PROJECTILE_PORTO_BLUE: setmodel(self, "models/grenademodel.md3");self.traileffect = particleeffectnum("TR_WIZSPIKE"); self.scale = 4; break;
+                       case PROJECTILE_HOOKBOMB: setmodel(self, "models/grenademodel.md3");self.traileffect = particleeffectnum("TR_KNIGHTSPIKE"); break;
+                       case PROJECTILE_HAGAR: setmodel(self, "models/hagarmissile.mdl");self.traileffect = particleeffectnum("tr_hagar"); self.scale = 0.75; break;
+                       case PROJECTILE_HAGAR_BOUNCING: setmodel(self, "models/hagarmissile.mdl");self.traileffect = particleeffectnum("tr_hagar"); self.scale = 0.75; break;
+                       case PROJECTILE_NAPALM_FOUNTAIN: //self.model = ""; self.modelindex = 0; self.traileffect = particleeffectnum("torch_small"); break;
+                       case PROJECTILE_FIREBALL: self.model = ""; self.modelindex = 0; self.traileffect = particleeffectnum("fireball"); break; // particle effect is good enough
+                       case PROJECTILE_FIREMINE: self.model = ""; self.modelindex = 0; self.traileffect = particleeffectnum("firemine"); break; // particle effect is good enough
+                       case PROJECTILE_TAG: setmodel(self, "models/laser.mdl"); self.traileffect = particleeffectnum("TR_ROCKET"); break;
+                       case PROJECTILE_FLAC: setmodel(self, "models/hagarmissile.mdl"); self.scale = 0.4; self.traileffect = particleeffectnum("TR_SEEKER"); break;
+                       case PROJECTILE_SEEKER: setmodel(self, "models/tagrocket.md3"); self.traileffect = particleeffectnum("TR_SEEKER"); break;
+                       case PROJECTILE_MAGE_SPIKE: setmodel(self, "models/ebomb.mdl"); self.traileffect = particleeffectnum("TR_VORESPIKE"); break;
+                       case PROJECTILE_SHAMBLER_LIGHTNING: setmodel(self, "models/ebomb.mdl"); self.traileffect = particleeffectnum("TR_NEXUIZPLASMA"); break;
+                       case PROJECTILE_RAPTORBOMB:    setmodel(self, "models/vehicles/clusterbomb.md3"); self.gravity = 1; self.avelocity = '0 0 180'; self.traileffect = particleeffectnum(""); break;
+                       case PROJECTILE_RAPTORBOMBLET: setmodel(self, "models/vehicles/bomblet.md3");     self.gravity = 1; self.avelocity = '0 0 180'; self.traileffect = particleeffectnum(""); break;
+                       case PROJECTILE_RAPTORCANNON:  setmodel(self, "models/plasmatrail.mdl"); self.traileffect = particleeffectnum("TR_CRYLINKPLASMA"); break;
+                       case PROJECTILE_SPIDERROCKET: setmodel(self, "models/vehicles/rocket02.md3"); self.traileffect = particleeffectnum("spiderbot_rocket_thrust"); break;
+                       case PROJECTILE_WAKIROCKET:   setmodel(self, "models/vehicles/rocket01.md3");  self.traileffect = particleeffectnum("wakizashi_rocket_thrust"); break;
+                       case PROJECTILE_WAKICANNON:   setmodel(self, "models/laser.mdl");  self.traileffect = particleeffectnum(""); break;
+                       case PROJECTILE_BUMBLE_GUN: setmodel(self, "models/elaser.mdl");self.traileffect = particleeffectnum("TR_NEXUIZPLASMA"); break;
+                       case PROJECTILE_BUMBLE_BEAM: setmodel(self, "models/elaser.mdl");self.traileffect = particleeffectnum("TR_NEXUIZPLASMA"); break;
++                      case PROJECTILE_RPC: setmodel(self, "models/weapons/ok_rocket.md3");self.traileffect = particleeffectnum("TR_ROCKET"); break;
++
+                       default:
+                               if(Nade_IDFromProjectile(self.cnt) != 0) { setmodel(self, "models/weapons/v_ok_grenade.md3");self.traileffect = particleeffectnum(Nade_TrailEffect(self.cnt, self.team)); break; }
+                               error("Received invalid CSQC projectile, can't work with this!");
+                               break;
+               }
+               self.mins = '0 0 0';
+               self.maxs = '0 0 0';
+               self.colormod = '0 0 0';
+               self.move_touch = SUB_Stop;
+               self.move_movetype = MOVETYPE_TOSS;
+               self.alphamod = 1;
+               switch(self.cnt)
+               {
+                       case PROJECTILE_ELECTRO:
+                               // only new engines support sound moving with object
+                               loopsound(self, CH_SHOTS_SINGLE, "weapons/electro_fly.wav", VOL_BASE, ATTEN_NORM);
+                               self.mins = '0 0 -4';
+                               self.maxs = '0 0 -4';
+                               self.move_movetype = MOVETYPE_BOUNCE;
+                               self.move_touch = func_null;
+                               self.move_bounce_factor = g_balance_electro_secondary_bouncefactor;
+                               self.move_bounce_stopspeed = g_balance_electro_secondary_bouncestop;
+                               break;
++                      case PROJECTILE_RPC:
+                       case PROJECTILE_ROCKET:
+                               loopsound(self, CH_SHOTS_SINGLE, "weapons/rocket_fly.wav", VOL_BASE, ATTEN_NORM);
+                               self.mins = '-3 -3 -3';
+                               self.maxs = '3 3 3';
+                               break;
+                       case PROJECTILE_GRENADE:
+                               self.mins = '-3 -3 -3';
+                               self.maxs = '3 3 3';
+                               break;
+                       case PROJECTILE_GRENADE_BOUNCING:
+                               self.mins = '-3 -3 -3';
+                               self.maxs = '3 3 3';
+                               self.move_movetype = MOVETYPE_BOUNCE;
+                               self.move_touch = func_null;
+                               self.move_bounce_factor = g_balance_mortar_bouncefactor;
+                               self.move_bounce_stopspeed = g_balance_mortar_bouncestop;
+                               break;
+                       case PROJECTILE_SHAMBLER_LIGHTNING:
+                               self.mins = '-8 -8 -8';
+                               self.maxs = '8 8 8';
+                               self.scale = 2.5;
+                               self.avelocity = randomvec() * 720;
+                               break;
+                       case PROJECTILE_MINE:
+                               self.mins = '-4 -4 -4';
+                               self.maxs = '4 4 4';
+                               break;
+                       case PROJECTILE_PORTO_RED:
+                               self.colormod = '2 1 1';
+                               self.alphamod = 0.5;
+                               self.move_movetype = MOVETYPE_BOUNCE;
+                               self.move_touch = func_null;
+                               break;
+                       case PROJECTILE_PORTO_BLUE:
+                               self.colormod = '1 1 2';
+                               self.alphamod = 0.5;
+                               self.move_movetype = MOVETYPE_BOUNCE;
+                               self.move_touch = func_null;
+                               break;
+                       case PROJECTILE_HAGAR_BOUNCING:
+                               self.move_movetype = MOVETYPE_BOUNCE;
+                               self.move_touch = func_null;
+                               break;
+                       case PROJECTILE_CRYLINK_BOUNCING:
+                               self.move_movetype = MOVETYPE_BOUNCE;
+                               self.move_touch = func_null;
+                               break;
+                       case PROJECTILE_NAPALM_FOUNTAIN:
+                       case PROJECTILE_FIREBALL:
+                               loopsound(self, CH_SHOTS_SINGLE, "weapons/fireball_fly2.wav", VOL_BASE, ATTEN_NORM);
+                               self.mins = '-16 -16 -16';
+                               self.maxs = '16 16 16';
+                               break;
+                       case PROJECTILE_FIREMINE:
+                               loopsound(self, CH_SHOTS_SINGLE, "weapons/fireball_fly.wav", VOL_BASE, ATTEN_NORM);
+                               self.move_movetype = MOVETYPE_BOUNCE;
+                               self.move_touch = func_null;
+                               self.mins = '-4 -4 -4';
+                               self.maxs = '4 4 4';
+                               break;
+                       case PROJECTILE_TAG:
+                               self.mins = '-2 -2 -2';
+                               self.maxs = '2 2 2';
+                               break;
+                       case PROJECTILE_FLAC:
+                               self.mins = '-2 -2 -2';
+                               self.maxs = '2 2 2';
+                               break;
+                       case PROJECTILE_SEEKER:
+                               loopsound(self, CH_SHOTS_SINGLE, "weapons/tag_rocket_fly.wav", VOL_BASE, ATTEN_NORM);
+                               self.mins = '-4 -4 -4';
+                               self.maxs = '4 4 4';
+                               break;
+             case PROJECTILE_RAPTORBOMB:
+                               self.mins = '-3 -3 -3';
+                               self.maxs = '3 3 3';
+                               break;
+             case PROJECTILE_RAPTORBOMBLET:
+                               break;
+             case PROJECTILE_RAPTORCANNON:
+                               break;
+             case PROJECTILE_SPIDERROCKET:
+                 loopsound(self, CH_SHOTS_SINGLE, "weapons/tag_rocket_fly.wav", VOL_BASE, ATTEN_NORM);
+                               break;
+             case PROJECTILE_WAKIROCKET:
+                 loopsound(self, CH_SHOTS_SINGLE, "weapons/tag_rocket_fly.wav", VOL_BASE, ATTEN_NORM);
+                               break;
+             /*
+             case PROJECTILE_WAKICANNON:
+                               break;
+                       case PROJECTILE_BUMBLE_GUN:
+                               // only new engines support sound moving with object
+                               loopsound(self, CH_SHOTS_SINGLE, "weapons/electro_fly.wav", VOL_BASE, ATTEN_NORM);
+                               self.mins = '0 0 -4';
+                               self.maxs = '0 0 -4';
+                               self.move_movetype = MOVETYPE_BOUNCE;
+                               self.move_touch = func_null;
+                               self.move_bounce_factor = g_balance_electro_secondary_bouncefactor;
+                               self.move_bounce_stopspeed = g_balance_electro_secondary_bouncestop;
+                               break;
+                       */
+                       default:
+                               break;
+               }
+               if(Nade_IDFromProjectile(self.cnt) != 0)
+               {
+                       self.mins = '-16 -16 -16';
+                       self.maxs = '16 16 16';
+                       self.colormod = Nade_Color(Nade_IDFromProjectile(self.cnt));
+                       self.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_PLAYERCLIP | DPCONTENTS_BOTCLIP;
+                       self.move_movetype = MOVETYPE_BOUNCE;
+                       self.move_touch = func_null;
+                       self.scale = 1.5;
+                       self.avelocity = randomvec() * 720;
+                       
+                       if(Nade_IDFromProjectile(self.cnt) == NADE_TYPE_TRANSLOCATE)
+                               self.solid = SOLID_TRIGGER;
+               }
+               setsize(self, self.mins, self.maxs);
+       }
+       if(self.gravity)
+       {
+               if(self.move_movetype == MOVETYPE_FLY)
+                       self.move_movetype = MOVETYPE_TOSS;
+               if(self.move_movetype == MOVETYPE_BOUNCEMISSILE)
+                       self.move_movetype = MOVETYPE_BOUNCE;
+       }
+       else
+       {
+               if(self.move_movetype == MOVETYPE_TOSS)
+                       self.move_movetype = MOVETYPE_FLY;
+               if(self.move_movetype == MOVETYPE_BOUNCE)
+                       self.move_movetype = MOVETYPE_BOUNCEMISSILE;
+       }
+       if(!(self.count & 0x80))
+               InterpolateOrigin_Note();
+       self.draw = Projectile_Draw;
+       self.entremove = Ent_RemoveProjectile;
+ }
+ void Projectile_Precache()
+ {
+       precache_model("models/ebomb.mdl");
+       precache_model("models/elaser.mdl");
+       precache_model("models/grenademodel.md3");
+       precache_model("models/mine.md3");
+       precache_model("models/hagarmissile.mdl");
+       precache_model("models/hlac_bullet.md3");
+       precache_model("models/laser.mdl");
+       precache_model("models/plasmatrail.mdl");
+       precache_model("models/rocket.md3");
+       precache_model("models/tagrocket.md3");
+       precache_model("models/tracer.mdl");
+       precache_model("models/sphere/sphere.md3");
+       precache_model("models/weapons/v_ok_grenade.md3");
++      precache_model("models/weapons/ok_rocket.md3");
+       precache_sound("weapons/electro_fly.wav");
+       precache_sound("weapons/rocket_fly.wav");
+       precache_sound("weapons/fireball_fly.wav");
+       precache_sound("weapons/fireball_fly2.wav");
+       precache_sound("weapons/tag_rocket_fly.wav");
+ }
index 0242da7e2c2504b6bc81b36653202c25216e34b4,21216452cf6ba7b074d2ec925fd494251ee278ba..8586cffa9d539ff5f56067ab570df0e132f43ce6
@@@ -364,19 -273,6 +273,8 @@@ const float PROJECTILE_BUMBLE_BEAM = 31
  const float PROJECTILE_MAGE_SPIKE = 32;
  const float PROJECTILE_SHAMBLER_LIGHTNING = 33;
  
- const float PROJECTILE_NADE_RED = 50;
- const float PROJECTILE_NADE_RED_BURN = 51;
- const float PROJECTILE_NADE_BLUE = 52;
- const float PROJECTILE_NADE_BLUE_BURN = 53;
- const float PROJECTILE_NADE_YELLOW = 54;
- const float PROJECTILE_NADE_YELLOW_BURN = 55;
- const float PROJECTILE_NADE_PINK = 56;
- const float PROJECTILE_NADE_PINK_BURN = 57;
- const float PROJECTILE_NADE = 58;
- const float PROJECTILE_NADE_BURN = 59;
 +const float PROJECTILE_RPC = 60;
 +
  const float SPECIES_HUMAN = 0;
  const float SPECIES_ROBOT_SOLID = 1;
  const float SPECIES_ALIEN = 2;
index 31e350e16d12f94183126d1064c1e5c6f9869062,471e22cfd5d6407608e8a0159d3a596074081551..a879cb489720da7189042fac66623b61787f931d
  #define NOTIF_ABORT  -1234   // allows Send_Notification to safely abort sending
  
  #define EIGHT_VARS_TO_VARARGS_VARLIST \
--      VARITEM(1, 0, s1) \
--      VARITEM(2, 0, XPD(s1, s2)) \
--      VARITEM(3, 0, XPD(s1, s2, s3)) \
--      VARITEM(4, 0, XPD(s1, s2, s3, s4)) \
--      VARITEM(0, 1, f1) \
--      VARITEM(1, 1, XPD(s1, f1)) \
--      VARITEM(2, 1, XPD(s1, s2, f1)) \
--      VARITEM(3, 1, XPD(s1, s2, s3, f1)) \
--      VARITEM(4, 1, XPD(s1, s2, s3, s4, f1)) \
--      VARITEM(0, 2, XPD(f1, f2)) \
--      VARITEM(1, 2, XPD(s1, f1, f2)) \
--      VARITEM(2, 2, XPD(s1, s2, f1, f2)) \
--      VARITEM(3, 2, XPD(s1, s2, s3, f1, f2)) \
--      VARITEM(4, 2, XPD(s1, s2, s3, s4, f1, f2)) \
--      VARITEM(0, 3, XPD(f1, f2, f3)) \
--      VARITEM(1, 3, XPD(s1, f1, f2, f3)) \
--      VARITEM(2, 3, XPD(s1, s2, f1, f2, f3)) \
--      VARITEM(3, 3, XPD(s1, s2, s3, f1, f2, f3)) \
--      VARITEM(4, 3, XPD(s1, s2, s3, s4, f1, f2, f3)) \
--      VARITEM(0, 4, XPD(f1, f2, f3, f4)) \
--      VARITEM(1, 4, XPD(s1, f1, f2, f3, f4)) \
--      VARITEM(2, 4, XPD(s1, s2, f1, f2, f3, f4)) \
--      VARITEM(3, 4, XPD(s1, s2, s3, f1, f2, f3, f4)) \
--      VARITEM(4, 4, XPD(s1, s2, s3, s4, f1, f2, f3, f4))
++    VARITEM(1, 0, s1) \
++    VARITEM(2, 0, XPD(s1, s2)) \
++    VARITEM(3, 0, XPD(s1, s2, s3)) \
++    VARITEM(4, 0, XPD(s1, s2, s3, s4)) \
++    VARITEM(0, 1, f1) \
++    VARITEM(1, 1, XPD(s1, f1)) \
++    VARITEM(2, 1, XPD(s1, s2, f1)) \
++    VARITEM(3, 1, XPD(s1, s2, s3, f1)) \
++    VARITEM(4, 1, XPD(s1, s2, s3, s4, f1)) \
++    VARITEM(0, 2, XPD(f1, f2)) \
++    VARITEM(1, 2, XPD(s1, f1, f2)) \
++    VARITEM(2, 2, XPD(s1, s2, f1, f2)) \
++    VARITEM(3, 2, XPD(s1, s2, s3, f1, f2)) \
++    VARITEM(4, 2, XPD(s1, s2, s3, s4, f1, f2)) \
++    VARITEM(0, 3, XPD(f1, f2, f3)) \
++    VARITEM(1, 3, XPD(s1, f1, f2, f3)) \
++    VARITEM(2, 3, XPD(s1, s2, f1, f2, f3)) \
++    VARITEM(3, 3, XPD(s1, s2, s3, f1, f2, f3)) \
++    VARITEM(4, 3, XPD(s1, s2, s3, s4, f1, f2, f3)) \
++    VARITEM(0, 4, XPD(f1, f2, f3, f4)) \
++    VARITEM(1, 4, XPD(s1, f1, f2, f3, f4)) \
++    VARITEM(2, 4, XPD(s1, s2, f1, f2, f3, f4)) \
++    VARITEM(3, 4, XPD(s1, s2, s3, f1, f2, f3, f4)) \
++    VARITEM(4, 4, XPD(s1, s2, s3, s4, f1, f2, f3, f4))
  
  void Destroy_All_Notifications(void);
  void Create_Notification_Entity(
--      float var_default,
--      float var_cvar,
--      float typeid,
--      float nameid,
--      string namestring,
--      float strnum,
--      float flnum,
--      /* MSG_ANNCE */
--      float channel,
--      string snd,
--      float vol,
--      float position,
--      /* MSG_INFO & MSG_CENTER */
--      string args,
--      string hudargs,
--      string icon,
--      float cpid,
--      string durcnt,
--      string normal,
--      string gentle,
--      /* MSG_MULTI */
--      float anncename,
--      float infoname,
--      float centername,
--      /* MSG_CHOICE */
--      float challow_def,
--      float challow_var,
--      float chtype,
--      float optiona,
--      float optionb);
++    float var_default,
++    float var_cvar,
++    float typeid,
++    float nameid,
++    string namestring,
++    float strnum,
++    float flnum,
++    /* MSG_ANNCE */
++    float channel,
++    string snd,
++    float vol,
++    float position,
++    /* MSG_INFO & MSG_CENTER */
++    string args,
++    string hudargs,
++    string icon,
++    float cpid,
++    string durcnt,
++    string normal,
++    string gentle,
++    /* MSG_MULTI */
++    float anncename,
++    float infoname,
++    float centername,
++    /* MSG_CHOICE */
++    float challow_def,
++    float challow_var,
++    float chtype,
++    float optiona,
++    float optionb);
  
  void Dump_Notifications(float fh, float alsoprint);
  
@@@ -82,10 -82,10 +82,10 @@@ void Debug_Notification(string input)
  
  void Local_Notification(float net_type, float net_name, ...count);
  void Local_Notification_WOVA(
--      float net_type, float net_name,
--      float stringcount, float floatcount,
--      string s1, string s2, string s3, string s4,
--      float f1, float f2, float f3, float f4);
++    float net_type, float net_name,
++    float stringcount, float floatcount,
++    string s1, string s2, string s3, string s4,
++    float f1, float f2, float f3, float f4);
  
  #ifdef CSQC // CLIENT ONLY
  void Read_Notification(float is_new);
@@@ -102,23 -102,23 +102,23 @@@ float prev_soundtime
  #define NOTIF_ALL_EXCEPT 6
  
  void Kill_Notification(
--      float broadcast, entity client,
--      float net_type, float net_name);
++    float broadcast, entity client,
++    float net_type, float net_name);
  void Send_Notification(
--      float broadcast, entity client,
--      float net_type, float net_name,
--      ...count);
++    float broadcast, entity client,
++    float net_type, float net_name,
++    ...count);
  void Send_Notification_WOVA(
--      float broadcast, entity client,
--      float net_type, float net_name,
--      float stringcount, float floatcount,
--      string s1, string s2, string s3, string s4,
--      float f1, float f2, float f3, float f4);
++    float broadcast, entity client,
++    float net_type, float net_name,
++    float stringcount, float floatcount,
++    string s1, string s2, string s3, string s4,
++    float f1, float f2, float f3, float f4);
  void Send_Notification_WOCOVA(
--      float broadcast, entity client,
--      float net_type, float net_name,
--      string s1, string s2, string s3, string s4,
--      float f1, float f2, float f3, float f4);
++    float broadcast, entity client,
++    float net_type, float net_name,
++    string s1, string s2, string s3, string s4,
++    float f1, float f2, float f3, float f4);
  #endif
  
  
  */
  
  #define MULTITEAM_ANNCE2(default,prefix,channel,sound,volume,position) \
--      MSG_ANNCE_NOTIF(default, prefix##RED, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_1)), volume, position) \
--      MSG_ANNCE_NOTIF(default, prefix##BLUE, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_2)), volume, position)
++    MSG_ANNCE_NOTIF(default, prefix##RED, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_1)), volume, position) \
++    MSG_ANNCE_NOTIF(default, prefix##BLUE, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_2)), volume, position)
  #define MULTITEAM_ANNCE3(default,prefix,channel,sound,volume,position) \
--      MSG_ANNCE_NOTIF(default, prefix##RED, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_1)), volume, position) \
--      MSG_ANNCE_NOTIF(default, prefix##BLUE, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_2)), volume, position) \
--      MSG_ANNCE_NOTIF(default, prefix##YELLOW, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_3)), volume, position)
++    MSG_ANNCE_NOTIF(default, prefix##RED, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_1)), volume, position) \
++    MSG_ANNCE_NOTIF(default, prefix##BLUE, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_2)), volume, position) \
++    MSG_ANNCE_NOTIF(default, prefix##YELLOW, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_3)), volume, position)
  #define MULTITEAM_ANNCE4(default,prefix,channel,sound,volume,position) \
--      MSG_ANNCE_NOTIF(default, prefix##RED, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_1)), volume, position) \
--      MSG_ANNCE_NOTIF(default, prefix##BLUE, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_2)), volume, position) \
--      MSG_ANNCE_NOTIF(default, prefix##YELLOW, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_3)), volume, position) \
--      MSG_ANNCE_NOTIF(default, prefix##PINK, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_4)), volume, position)
++    MSG_ANNCE_NOTIF(default, prefix##RED, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_1)), volume, position) \
++    MSG_ANNCE_NOTIF(default, prefix##BLUE, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_2)), volume, position) \
++    MSG_ANNCE_NOTIF(default, prefix##YELLOW, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_3)), volume, position) \
++    MSG_ANNCE_NOTIF(default, prefix##PINK, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_4)), volume, position)
  #define MULTITEAM_ANNCE(default,prefix,teams,channel,sound,volume,position) \
--      MULTITEAM_ANNCE##teams(default,prefix,channel,sound,volume,position)
++    MULTITEAM_ANNCE##teams(default,prefix,channel,sound,volume,position)
  
  #define MSG_ANNCE_NOTIFICATIONS \
--      MSG_ANNCE_NOTIF(1, ANNCE_ACHIEVEMENT_AIRSHOT,       CH_INFO, "airshot",           VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(1, ANNCE_ACHIEVEMENT_AMAZING,       CH_INFO, "amazing",           VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(1, ANNCE_ACHIEVEMENT_AWESOME,       CH_INFO, "awesome",           VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(1, ANNCE_ACHIEVEMENT_BOTLIKE,       CH_INFO, "botlike",           VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(2, ANNCE_ACHIEVEMENT_ELECTROBITCH,  CH_INFO, "electrobitch",      VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(1, ANNCE_ACHIEVEMENT_IMPRESSIVE,    CH_INFO, "impressive",        VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(1, ANNCE_ACHIEVEMENT_YODA,          CH_INFO, "yoda",              VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(2, ANNCE_BEGIN,                     CH_INFO, "begin",             VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_03,             CH_INFO, "03kills",           VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_05,             CH_INFO, "05kills",           VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_10,             CH_INFO, "10kills",           VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_15,             CH_INFO, "15kills",           VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_20,             CH_INFO, "20kills",           VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_25,             CH_INFO, "25kills",           VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_30,             CH_INFO, "30kills",           VOL_BASEVOICE, ATTEN_NONE) \
-       MSG_ANNCE_NOTIF(1, ANNCE_MINSTAGIB_LASTSECOND,      CH_INFO, "lastsecond",        VOL_BASEVOICE, ATTEN_NONE) \
-       MSG_ANNCE_NOTIF(1, ANNCE_MINSTAGIB_NARROWLY,        CH_INFO, "narrowly",          VOL_BASEVOICE, ATTEN_NONE) \
-       MSG_ANNCE_NOTIF(1, ANNCE_MINSTAGIB_TERMINATED,      CH_INFO, "terminated",        VOL_BASEVOICE, ATTEN_NONE) \
 -      MSG_ANNCE_NOTIF(1, ANNCE_INSTAGIB_LASTSECOND,      CH_INFO, "lastsecond",        VOL_BASEVOICE, ATTEN_NONE) \
 -      MSG_ANNCE_NOTIF(1, ANNCE_INSTAGIB_NARROWLY,        CH_INFO, "narrowly",          VOL_BASEVOICE, ATTEN_NONE) \
 -      MSG_ANNCE_NOTIF(1, ANNCE_INSTAGIB_TERMINATED,      CH_INFO, "terminated",        VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_MULTIFRAG,                 CH_INFO, "multifrag",         VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(2, ANNCE_NUM_1,                     CH_INFO, "1",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(2, ANNCE_NUM_2,                     CH_INFO, "2",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(2, ANNCE_NUM_3,                     CH_INFO, "3",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(2, ANNCE_NUM_4,                     CH_INFO, "4",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(2, ANNCE_NUM_5,                     CH_INFO, "5",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(2, ANNCE_NUM_6,                     CH_INFO, "6",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(2, ANNCE_NUM_7,                     CH_INFO, "7",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(2, ANNCE_NUM_8,                     CH_INFO, "8",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(2, ANNCE_NUM_9,                     CH_INFO, "9",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(2, ANNCE_NUM_10,                    CH_INFO, "10",                VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(2, ANNCE_NUM_GAMESTART_1,           CH_INFO, "1",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(2, ANNCE_NUM_GAMESTART_2,           CH_INFO, "2",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(2, ANNCE_NUM_GAMESTART_3,           CH_INFO, "3",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(2, ANNCE_NUM_GAMESTART_4,           CH_INFO, "4",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(2, ANNCE_NUM_GAMESTART_5,           CH_INFO, "5",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_GAMESTART_6,           CH_INFO, "6",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_GAMESTART_7,           CH_INFO, "7",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_GAMESTART_8,           CH_INFO, "8",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_GAMESTART_9,           CH_INFO, "9",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_GAMESTART_10,          CH_INFO, "10",                VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_1,                CH_INFO, "1",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_2,                CH_INFO, "2",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_3,                CH_INFO, "3",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_4,                CH_INFO, "4",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_5,                CH_INFO, "5",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_6,                CH_INFO, "6",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_7,                CH_INFO, "7",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_8,                CH_INFO, "8",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_9,                CH_INFO, "9",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_10,               CH_INFO, "10",                VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_1,                CH_INFO, "1",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_2,                CH_INFO, "2",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_3,                CH_INFO, "3",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_4,                CH_INFO, "4",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_5,                CH_INFO, "5",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_6,                CH_INFO, "6",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_7,                CH_INFO, "7",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_8,                CH_INFO, "8",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_9,                CH_INFO, "9",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_10,               CH_INFO, "10",                VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_1,             CH_INFO, "1",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_2,             CH_INFO, "2",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_3,             CH_INFO, "3",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_4,             CH_INFO, "4",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_5,             CH_INFO, "5",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_6,             CH_INFO, "6",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_7,             CH_INFO, "7",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_8,             CH_INFO, "8",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_9,             CH_INFO, "9",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_10,            CH_INFO, "10",                VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(2, ANNCE_NUM_ROUNDSTART_1,          CH_INFO, "1",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(2, ANNCE_NUM_ROUNDSTART_2,          CH_INFO, "2",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(2, ANNCE_NUM_ROUNDSTART_3,          CH_INFO, "3",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_ROUNDSTART_4,          CH_INFO, "4",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_ROUNDSTART_5,          CH_INFO, "5",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_ROUNDSTART_6,          CH_INFO, "6",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_ROUNDSTART_7,          CH_INFO, "7",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_ROUNDSTART_8,          CH_INFO, "8",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_ROUNDSTART_9,          CH_INFO, "9",                 VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(0, ANNCE_NUM_ROUNDSTART_10,         CH_INFO, "10",                VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(2, ANNCE_PREPARE,                   CH_INFO, "prepareforbattle",  VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(1, ANNCE_REMAINING_FRAG_1,          CH_INFO, "1fragleft",         VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(1, ANNCE_REMAINING_FRAG_2,          CH_INFO, "2fragsleft",        VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(1, ANNCE_REMAINING_FRAG_3,          CH_INFO, "3fragsleft",        VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(2, ANNCE_REMAINING_MIN_1,           CH_INFO, "1minuteremains",    VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(2, ANNCE_REMAINING_MIN_5,           CH_INFO, "5minutesremain",    VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(2, ANNCE_TIMEOUT,                   CH_INFO, "timeoutcalled",     VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(2, ANNCE_VOTE_ACCEPT,               CH_INFO, "voteaccept",        VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(2, ANNCE_VOTE_CALL,                 CH_INFO, "votecall",          VOL_BASEVOICE, ATTEN_NONE) \
--      MSG_ANNCE_NOTIF(2, ANNCE_VOTE_FAIL,                 CH_INFO, "votefail",          VOL_BASEVOICE, ATTEN_NONE)
++    MSG_ANNCE_NOTIF(1, ANNCE_ACHIEVEMENT_AIRSHOT,       CH_INFO, "airshot",           VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(1, ANNCE_ACHIEVEMENT_AMAZING,       CH_INFO, "amazing",           VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(1, ANNCE_ACHIEVEMENT_AWESOME,       CH_INFO, "awesome",           VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(1, ANNCE_ACHIEVEMENT_BOTLIKE,       CH_INFO, "botlike",           VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(2, ANNCE_ACHIEVEMENT_ELECTROBITCH,  CH_INFO, "electrobitch",      VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(1, ANNCE_ACHIEVEMENT_IMPRESSIVE,    CH_INFO, "impressive",        VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(1, ANNCE_ACHIEVEMENT_YODA,          CH_INFO, "yoda",              VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(2, ANNCE_BEGIN,                     CH_INFO, "begin",             VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_03,             CH_INFO, "03kills",           VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_05,             CH_INFO, "05kills",           VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_10,             CH_INFO, "10kills",           VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_15,             CH_INFO, "15kills",           VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_20,             CH_INFO, "20kills",           VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_25,             CH_INFO, "25kills",           VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_30,             CH_INFO, "30kills",           VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(1, ANNCE_INSTAGIB_LASTSECOND,      CH_INFO, "lastsecond",        VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(1, ANNCE_INSTAGIB_NARROWLY,        CH_INFO, "narrowly",          VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(1, ANNCE_INSTAGIB_TERMINATED,      CH_INFO, "terminated",        VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_MULTIFRAG,                 CH_INFO, "multifrag",         VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(2, ANNCE_NUM_1,                     CH_INFO, "1",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(2, ANNCE_NUM_2,                     CH_INFO, "2",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(2, ANNCE_NUM_3,                     CH_INFO, "3",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(2, ANNCE_NUM_4,                     CH_INFO, "4",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(2, ANNCE_NUM_5,                     CH_INFO, "5",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(2, ANNCE_NUM_6,                     CH_INFO, "6",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(2, ANNCE_NUM_7,                     CH_INFO, "7",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(2, ANNCE_NUM_8,                     CH_INFO, "8",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(2, ANNCE_NUM_9,                     CH_INFO, "9",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(2, ANNCE_NUM_10,                    CH_INFO, "10",                VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(2, ANNCE_NUM_GAMESTART_1,           CH_INFO, "1",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(2, ANNCE_NUM_GAMESTART_2,           CH_INFO, "2",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(2, ANNCE_NUM_GAMESTART_3,           CH_INFO, "3",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(2, ANNCE_NUM_GAMESTART_4,           CH_INFO, "4",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(2, ANNCE_NUM_GAMESTART_5,           CH_INFO, "5",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_GAMESTART_6,           CH_INFO, "6",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_GAMESTART_7,           CH_INFO, "7",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_GAMESTART_8,           CH_INFO, "8",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_GAMESTART_9,           CH_INFO, "9",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_GAMESTART_10,          CH_INFO, "10",                VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_1,                CH_INFO, "1",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_2,                CH_INFO, "2",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_3,                CH_INFO, "3",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_4,                CH_INFO, "4",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_5,                CH_INFO, "5",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_6,                CH_INFO, "6",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_7,                CH_INFO, "7",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_8,                CH_INFO, "8",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_9,                CH_INFO, "9",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_10,               CH_INFO, "10",                VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_1,                CH_INFO, "1",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_2,                CH_INFO, "2",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_3,                CH_INFO, "3",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_4,                CH_INFO, "4",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_5,                CH_INFO, "5",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_6,                CH_INFO, "6",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_7,                CH_INFO, "7",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_8,                CH_INFO, "8",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_9,                CH_INFO, "9",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_10,               CH_INFO, "10",                VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_1,             CH_INFO, "1",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_2,             CH_INFO, "2",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_3,             CH_INFO, "3",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_4,             CH_INFO, "4",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_5,             CH_INFO, "5",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_6,             CH_INFO, "6",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_7,             CH_INFO, "7",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_8,             CH_INFO, "8",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_9,             CH_INFO, "9",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_10,            CH_INFO, "10",                VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(2, ANNCE_NUM_ROUNDSTART_1,          CH_INFO, "1",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(2, ANNCE_NUM_ROUNDSTART_2,          CH_INFO, "2",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(2, ANNCE_NUM_ROUNDSTART_3,          CH_INFO, "3",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_ROUNDSTART_4,          CH_INFO, "4",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_ROUNDSTART_5,          CH_INFO, "5",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_ROUNDSTART_6,          CH_INFO, "6",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_ROUNDSTART_7,          CH_INFO, "7",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_ROUNDSTART_8,          CH_INFO, "8",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_ROUNDSTART_9,          CH_INFO, "9",                 VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(0, ANNCE_NUM_ROUNDSTART_10,         CH_INFO, "10",                VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(2, ANNCE_PREPARE,                   CH_INFO, "prepareforbattle",  VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(1, ANNCE_REMAINING_FRAG_1,          CH_INFO, "1fragleft",         VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(1, ANNCE_REMAINING_FRAG_2,          CH_INFO, "2fragsleft",        VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(1, ANNCE_REMAINING_FRAG_3,          CH_INFO, "3fragsleft",        VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(2, ANNCE_REMAINING_MIN_1,           CH_INFO, "1minuteremains",    VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(2, ANNCE_REMAINING_MIN_5,           CH_INFO, "5minutesremain",    VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(2, ANNCE_TIMEOUT,                   CH_INFO, "timeoutcalled",     VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(2, ANNCE_VOTE_ACCEPT,               CH_INFO, "voteaccept",        VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(2, ANNCE_VOTE_CALL,                 CH_INFO, "votecall",          VOL_BASEVOICE, ATTEN_NONE) \
++    MSG_ANNCE_NOTIF(2, ANNCE_VOTE_FAIL,                 CH_INFO, "votefail",          VOL_BASEVOICE, ATTEN_NONE)
  
  #define MULTITEAM_INFO2(default,prefix,strnum,flnum,args,hudargs,icon,normal,gentle) \
--      MSG_INFO_NOTIF(default, prefix##RED, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_1)), TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \
--      MSG_INFO_NOTIF(default, prefix##BLUE, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_2)), TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2)))
++    MSG_INFO_NOTIF(default, prefix##RED, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_1)), TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \
++    MSG_INFO_NOTIF(default, prefix##BLUE, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_2)), TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2)))
  #define MULTITEAM_INFO3(default,prefix,strnum,flnum,args,hudargs,icon,normal,gentle) \
--      MSG_INFO_NOTIF(default, prefix##RED, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_1)), TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \
--      MSG_INFO_NOTIF(default, prefix##BLUE, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_2)), TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2))) \
--      MSG_INFO_NOTIF(default, prefix##YELLOW, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_3)), TCR(normal, COL_TEAM_3, strtoupper(NAME_TEAM_3)), TCR(gentle, COL_TEAM_3, strtoupper(NAME_TEAM_3)))
++    MSG_INFO_NOTIF(default, prefix##RED, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_1)), TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \
++    MSG_INFO_NOTIF(default, prefix##BLUE, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_2)), TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2))) \
++    MSG_INFO_NOTIF(default, prefix##YELLOW, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_3)), TCR(normal, COL_TEAM_3, strtoupper(NAME_TEAM_3)), TCR(gentle, COL_TEAM_3, strtoupper(NAME_TEAM_3)))
  #define MULTITEAM_INFO4(default,prefix,strnum,flnum,args,hudargs,icon,normal,gentle) \
--      MSG_INFO_NOTIF(default, prefix##RED, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_1)), TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \
--      MSG_INFO_NOTIF(default, prefix##BLUE, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_2)), TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2))) \
--      MSG_INFO_NOTIF(default, prefix##YELLOW, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_3)), TCR(normal, COL_TEAM_3, strtoupper(NAME_TEAM_3)), TCR(gentle, COL_TEAM_3, strtoupper(NAME_TEAM_3))) \
--      MSG_INFO_NOTIF(default, prefix##PINK, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_4)), TCR(normal, COL_TEAM_4, strtoupper(NAME_TEAM_4)), TCR(gentle, COL_TEAM_4, strtoupper(NAME_TEAM_4)))
++    MSG_INFO_NOTIF(default, prefix##RED, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_1)), TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \
++    MSG_INFO_NOTIF(default, prefix##BLUE, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_2)), TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2))) \
++    MSG_INFO_NOTIF(default, prefix##YELLOW, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_3)), TCR(normal, COL_TEAM_3, strtoupper(NAME_TEAM_3)), TCR(gentle, COL_TEAM_3, strtoupper(NAME_TEAM_3))) \
++    MSG_INFO_NOTIF(default, prefix##PINK, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_4)), TCR(normal, COL_TEAM_4, strtoupper(NAME_TEAM_4)), TCR(gentle, COL_TEAM_4, strtoupper(NAME_TEAM_4)))
  #define MULTITEAM_INFO(default,prefix,teams,strnum,flnum,args,hudargs,icon,normal,gentle) \
--      MULTITEAM_INFO##teams(default,prefix,strnum,flnum,args,hudargs,icon,normal,gentle)
++    MULTITEAM_INFO##teams(default,prefix,strnum,flnum,args,hudargs,icon,normal,gentle)
  
  #define MSG_INFO_NOTIFICATIONS \
--      MSG_INFO_NOTIF(2, INFO_CHAT_NOSPECTATORS,              0, 0, "", "",                            "",                     _("^F4NOTE: ^BGSpectator chat is not sent to players during the match"), "") \
--      MULTITEAM_INFO(1, INFO_CTF_CAPTURE_, 2,                1, 0, "s1", "s1",                        "notify_%s_captured",   _("^BG%s^BG captured the ^TC^TT^BG flag"), "") \
--      MULTITEAM_INFO(1, INFO_CTF_CAPTURE_BROKEN_, 2,         2, 2, "s1 f1p2dec s2 f2p2dec", "s1",     "notify_%s_captured",   _("^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG%s^BG's previous record of ^F2%s^BG seconds"), "") \
--      MULTITEAM_INFO(1, INFO_CTF_CAPTURE_TIME_, 2,           1, 1, "s1 f1p2dec", "s1",                "notify_%s_captured",   _("^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds"), "") \
--      MULTITEAM_INFO(1, INFO_CTF_CAPTURE_UNBROKEN_, 2,       2, 2, "s1 f1p2dec s2 f2p2dec", "s1",     "notify_%s_captured",   _("^BG%s^BG captured the ^TC^TT^BG flag in ^F2%s^BG seconds, failing to break ^BG%s^BG's previous record of ^F1%s^BG seconds"), "") \
--      MULTITEAM_INFO(1, INFO_CTF_FLAGRETURN_ABORTRUN_, 2,    0, 0, "", "",                            "",                     _("^BGThe ^TC^TT^BG flag was returned to base by its owner"), "") \
--      MULTITEAM_INFO(1, INFO_CTF_FLAGRETURN_DAMAGED_, 2,     0, 0, "", "",                            "",                     _("^BGThe ^TC^TT^BG flag was destroyed and returned to base"), "") \
--      MULTITEAM_INFO(1, INFO_CTF_FLAGRETURN_DROPPED_, 2,     0, 0, "", "",                            "",                     _("^BGThe ^TC^TT^BG flag was dropped in the base and returned itself"), "") \
--      MULTITEAM_INFO(1, INFO_CTF_FLAGRETURN_NEEDKILL_, 2,    0, 0, "", "",                            "",                     _("^BGThe ^TC^TT^BG flag fell somewhere it couldn't be reached and returned to base"), "") \
--      MULTITEAM_INFO(1, INFO_CTF_FLAGRETURN_SPEEDRUN_, 2,    0, 1, "f1p2dec", "",                     "",                     _("^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned itself"), "") \
--      MULTITEAM_INFO(1, INFO_CTF_FLAGRETURN_TIMEOUT_, 2,     0, 0, "", "",                            "",                     _("^BGThe ^TC^TT^BG flag has returned to the base"), "") \
--      MULTITEAM_INFO(1, INFO_CTF_LOST_, 2,                   1, 0, "s1", "s1",                        "notify_%s_lost",       _("^BG%s^BG lost the ^TC^TT^BG flag"), "") \
--      MULTITEAM_INFO(1, INFO_CTF_PICKUP_, 2,                 1, 0, "s1", "s1",                        "notify_%s_taken",      _("^BG%s^BG got the ^TC^TT^BG flag"), "") \
--      MULTITEAM_INFO(1, INFO_CTF_RETURN_, 2,                 1, 0, "s1", "s1",                        "notify_%s_returned",   _("^BG%s^BG returned the ^TC^TT^BG flag"), "") \
--      MULTITEAM_INFO(1, INFO_CTF_RETURN_MONSTER_, 2,         1, 0, "s1", "s1",                        "notify_%s_returned",   _("^BG%s^BG returned the ^TC^TT^BG flag"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_CHEAT,             3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_DROWN,             3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_water",         _("^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_FALL,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_fall",          _("^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_FIRE,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"), _("^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s")) \
--      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_LAVA,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_lava",          _("^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_MONSTER,           3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_NADE,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"), "") \
 -      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_NADE,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_nade",          _("^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"), "") \
 -      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_NADE_NAPALM,       3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_nade_napalm",   _("^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"), _("^BG%s%s^K1 got too close to a napalm explosion%s%s")) \
 -      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_NADE_ICE,          3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_nade_ice",      _("^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"), "") \
 -      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_NADE_ICE_FREEZE,   3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_nade_ice",      _("^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"), "") \
 -      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_NADE_HEAL,         3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_nade_heal",     _("^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_SHOOTING_STAR,     3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_shootingstar",  _("^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_SLIME,             3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_slime",         _("^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_SWAMP,             3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_slime",         _("^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_TELEFRAG,          3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_telefrag",      _("^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"), _("^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s")) \
--      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_TOUCHEXPLODE,      3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_BUMB_DEATH,     3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_BUMB_GUN,       3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_CRUSH,          3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_RAPT_BOMB,      3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_RAPT_CANNON,    3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_RAPT_DEATH,     3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_SPID_DEATH,     3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_SPID_MINIGUN,   3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_SPID_ROCKET,    3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_WAKI_DEATH,     3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_WAKI_GUN,       3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_WAKI_ROCKET,    3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"), "") \
 -      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VENGEANCE,         3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VOID,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_void",          _("^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_AUTOTEAMCHANGE,      2, 1, "s1 s2loc death_team", "",         "",                     _("^BG%s^K1 was moved into the %s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_BETRAYAL,            2, 1, "s1 s2loc spree_lost", "s1",       "notify_teamkill_red",  _("^BG%s^K1 became enemies with the Lord of Teamplay%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_CAMP,                2, 1, "s1 s2loc spree_lost", "s1",       "notify_camping",       _("^BG%s^K1 thought they found a nice camping ground%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_CHEAT,               2, 1, "s1 s2loc spree_lost", "s1",       "notify_selfkill",      _("^BG%s^K1 unfairly eliminated themself%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_CUSTOM,              3, 1, "s1 s2 s3loc spree_lost", "s1",    "notify_void",          _("^BG%s^K1 %s^K1%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_DROWN,               2, 1, "s1 s2loc spree_lost", "s1",       "notify_water",         _("^BG%s^K1 couldn't catch their breath%s%s"), _("^BG%s^K1 was in the water for too long%s%s")) \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_FALL,                2, 1, "s1 s2loc spree_lost", "s1",       "notify_fall",          _("^BG%s^K1 hit the ground with a crunch%s%s"), _("^BG%s^K1 hit the ground with a bit too much force%s%s")) \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_FIRE,                2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 became a bit too crispy%s%s"), _("^BG%s^K1 felt a little hot%s%s")) \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_GENERIC,             2, 1, "s1 s2loc spree_lost", "s1",       "notify_selfkill",      _("^BG%s^K1 died%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_LAVA,                2, 1, "s1 s2loc spree_lost", "s1",       "notify_lava",          _("^BG%s^K1 turned into hot slag%s%s"), _("^BG%s^K1 found a hot place%s%s")) \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NADE,                2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 mastered the art of self-nading%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_MAGE,                2, 1, "s1 s2loc spree_lost", "s1",           "notify_death",                 _("^BG%s^K1 was exploded by a Mage%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_SHAMBLER_CLAW,   2, 1, "s1 s2loc spree_lost", "s1",               "notify_death",                 _("^BG%s^K1's innards became outwards by a Shambler%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_SHAMBLER_SMASH,  2, 1, "s1 s2loc spree_lost", "s1",               "notify_death",                 _("^BG%s^K1 was smashed by a Shambler%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_SHAMBLER_ZAP,    2, 1, "s1 s2loc spree_lost", "s1",               "notify_death",                 _("^BG%s^K1 was zapped to death by a Shambler%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_SPIDER,              2, 1, "s1 s2loc spree_lost", "s1",           "notify_death",                 _("^BG%s^K1 was bitten by a Spider%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_WYVERN,          2, 1, "s1 s2loc spree_lost", "s1",               "notify_death",                 _("^BG%s^K1 was fireballed by a Wyvern%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_ZOMBIE_JUMP,     2, 1, "s1 s2loc spree_lost", "s1",               "notify_death",                 _("^BG%s^K1 joins the Zombies%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_ZOMBIE_MELEE,    2, 1, "s1 s2loc spree_lost", "s1",               "notify_death",                 _("^BG%s^K1 was given kung fu lessons by a Zombie%s%s"), "") \
 -      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NADE,                2, 1, "s1 s2loc spree_lost", "s1",       "notify_nade",          _("^BG%s^K1 mastered the art of self-nading%s%s"), "") \
 -      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NADE_NAPALM,         2, 1, "s1 s2loc spree_lost", "s1",       "notify_nade_napalm",   _("^BG%s^K1 was burned to death by their own Napalm Nade%s%s"), _("^BG%s^K1 decided to take a look at the results of their napalm explosion%s%s")) \
 -      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NADE_ICE,            2, 1, "s1 s2loc spree_lost", "s1",       "notify_nade_ice",      _("^BG%s^K1 mastered the art of self-nading%s%s"), "") \
 -      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NADE_ICE_FREEZE,     2, 1, "s1 s2loc spree_lost", "s1",       "notify_nade_ice",      _("^BG%s^K1 was frozen to death by their own Ice Nade%s%s"), _("^BG%s^K1 felt a little chilly%s%s")) \
 -      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NADE_HEAL,           2, 1, "s1 s2loc spree_lost", "s1",       "notify_nade_heal",     _("^BG%s^K1's Healing Nade didn't quite heal them%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NOAMMO,              2, 1, "s1 s2loc spree_lost", "s1",       "notify_outofammo",     _("^BG%s^K1 died%s%s. What's the point of living without ammo?"), _("^BG%s^K1 ran out of ammo%s%s")) \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_ROT,                 2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 rotted away%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_SHOOTING_STAR,       2, 1, "s1 s2loc spree_lost", "s1",       "notify_shootingstar",  _("^BG%s^K1 became a shooting star%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_SLIME,               2, 1, "s1 s2loc spree_lost", "s1",       "notify_slime",         _("^BG%s^K1 was slimed%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_SUICIDE,             2, 1, "s1 s2loc spree_lost", "s1",       "notify_selfkill",      _("^BG%s^K1 couldn't take it anymore%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_SWAMP,               2, 1, "s1 s2loc spree_lost", "s1",       "notify_slime",         _("^BG%s^K1 is now preserved for centuries to come%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TEAMCHANGE,          2, 1, "s1 s2loc death_team", "",         "",                     _("^BG%s^K1 switched to the %s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TOUCHEXPLODE,        2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 died in an accident%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET,              2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 ran into a turret%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_EWHEEL,       2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 was blasted away by an eWheel turret%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_FLAC,         2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 got caught up in the FLAC turret fire%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_HELLION,      2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 was blasted away by a Hellion turret%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_HK,           2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 could not hide from the Hunter turret%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_MACHINEGUN,   2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 was riddled full of holes by a Machinegun turret%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_MLRS,         2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 got turned into smoldering gibs by an MLRS turret%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_PHASER,       2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 was phased out by a turret%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_PLASMA,       2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 got served some superheated plasma from a turret%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_TESLA,        2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 was electrocuted by a Tesla turret%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_WALK_GUN,     2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 got served a lead enrichment by a Walker turret%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_WALK_MEELE,   2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 was impaled by a Walker turret%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_WALK_ROCKET,  2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 was blasted away by a Walker turret%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_BUMB_DEATH,       2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_CRUSH,            2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 was crushed by a vehicle%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_RAPT_BOMB,        2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 was caught in a Raptor cluster bomb%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_RAPT_DEATH,       2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 got caught in the blast of a Raptor explosion%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_SPID_DEATH,       2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 got caught in the blast of a Spiderbot explosion%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_SPID_ROCKET,      2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 was blasted to bits by a Spiderbot rocket%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_WAKI_DEATH,       2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 got caught in the blast of a Racer explosion%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_WAKI_ROCKET,      2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 couldn't find shelter from a Racer rocket%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VOID,                2, 1, "s1 s2loc spree_lost", "s1",       "notify_void",          _("^BG%s^K1 was in the wrong place%s%s"), "") \
--      MULTITEAM_INFO(1, INFO_DEATH_TEAMKILL_, 4,             3, 1, "s1 s2 s3loc spree_end", "s2 s1",  "notify_teamkill_%s",   _("^BG%s^K1 was betrayed by ^BG%s^K1%s%s"), "") \
 -      MSG_INFO_NOTIF(1, INFO_CA_JOIN_LATE,                   0, 0, "", "",                            "",                     _("^F1Round already started, you will join the game in the next round"), "") \
 -      MSG_INFO_NOTIF(1, INFO_CA_LEAVE,                       0, 0, "", "",                            "",                     _("^F2You will spectate in the next round"), "") \
 -      MSG_INFO_NOTIF(1, INFO_DOMINATION_CAPTURE_TIME,        2, 2, "s1 s2 f1 f2", "",                 "",                     _("^BG%s^BG%s^BG (%s points every %s seconds)"), "") \
--      MSG_INFO_NOTIF(1, INFO_FREEZETAG_FREEZE,               2, 0, "s1 s2", "",                       "",                     _("^BG%s^K1 was frozen by ^BG%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_FREEZETAG_REVIVED,              2, 0, "s1 s2", "",                       "",                     _("^BG%s^K3 was revived by ^BG%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_FREEZETAG_REVIVED_FALL,         1, 0, "s1", "",                          "",                     _("^BG%s^K3 was revived by falling"), "") \
 -      MSG_INFO_NOTIF(1, INFO_FREEZETAG_REVIVED_NADE,         1, 0, "s1", "",                          "",                     _("^BG%s^K3 was revived by their Nade explosion"), "") \
--      MSG_INFO_NOTIF(1, INFO_FREEZETAG_AUTO_REVIVED,         1, 1, "s1 f1", "",                       "",                     _("^BG%s^K3 was automatically revived after %s second(s)"), "") \
--      MULTITEAM_INFO(1, INFO_ROUND_TEAM_WIN_, 4,             0, 0, "", "",                            "",                     _("^TC^TT^BG team wins the round"), "") \
--      MSG_INFO_NOTIF(1, INFO_ROUND_PLAYER_WIN,               1, 0, "s1", "",                          "",                     _("^BG%s^BG wins the round"), "") \
--      MSG_INFO_NOTIF(1, INFO_ROUND_TIED,                     0, 0, "", "",                            "",                     _("^BGRound tied"), "") \
--      MSG_INFO_NOTIF(1, INFO_ROUND_OVER,                     0, 0, "", "",                            "",                     _("^BGRound over, there's no winner"), "") \
--      MSG_INFO_NOTIF(1, INFO_FREEZETAG_SELF,                 1, 0, "s1", "",                          "",                     _("^BG%s^K1 froze themself"), "") \
--      MSG_INFO_NOTIF(1, INFO_GODMODE_OFF,                    0, 1, "f1", "",                          "",                     _("^BGGodmode saved you %s units of damage, cheater!"), "") \
 -      MSG_INFO_NOTIF(1, INFO_ITEM_BUFF,                      1, 1, "s1 item_buffname", "",            "",                     _("^BG%s^BG got the %s^BG Buff!"), "") \
 -      MSG_INFO_NOTIF(1, INFO_ITEM_BUFF_LOST,                 1, 1, "s1 item_buffname", "",            "",                     _("^BG%s^BG lost the %s^BG Buff!"), "") \
 -      MSG_INFO_NOTIF(1, INFO_ITEM_BUFF_DROP,                 0, 1, "item_buffname", "",               "",                     _("^BGYou dropped the %s^BG Buff!"), "") \
 -      MSG_INFO_NOTIF(1, INFO_ITEM_BUFF_GOT,                  0, 1, "item_buffname", "",               "",                     _("^BGYou got the %s^BG Buff!"), "") \
--      MSG_INFO_NOTIF(0, INFO_ITEM_WEAPON_DONTHAVE,           0, 1, "item_wepname", "",                      "",               _("^BGYou do not have the ^F1%s"), "") \
--      MSG_INFO_NOTIF(0, INFO_ITEM_WEAPON_DROP,               1, 1, "item_wepname item_wepammo", "",         "",               _("^BGYou dropped the ^F1%s^BG%s"), "") \
--      MSG_INFO_NOTIF(0, INFO_ITEM_WEAPON_GOT,                0, 1, "item_wepname", "",                      "",               _("^BGYou got the ^F1%s"), "") \
--      MSG_INFO_NOTIF(0, INFO_ITEM_WEAPON_NOAMMO,             0, 1, "item_wepname", "",                      "",               _("^BGYou don't have enough ammo for the ^F1%s"), "") \
--      MSG_INFO_NOTIF(0, INFO_ITEM_WEAPON_PRIMORSEC,          0, 3, "item_wepname f2primsec f3primsec", "",  "",               _("^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"), "") \
--      MSG_INFO_NOTIF(0, INFO_ITEM_WEAPON_UNAVAILABLE,        0, 1, "item_wepname", "",                      "",               _("^F1%s^BG is ^F4not available^BG on this map"), "") \
--      MSG_INFO_NOTIF(2, INFO_JOIN_CONNECT,                   1, 0, "s1", "",                          "",                     _("^BG%s^F3 connected%s"), "") \
--      MULTITEAM_INFO(2, INFO_JOIN_CONNECT_TEAM_, 4,          1, 0, "s1", "",                          "",                     _("^BG%s^F3 connected and joined the ^TC^TT team"), "") \
--      MSG_INFO_NOTIF(1, INFO_JOIN_PLAY,                      1, 0, "s1", "",                          "",                     _("^BG%s^F3 is now playing"), "") \
--      MSG_INFO_NOTIF(1, INFO_KEEPAWAY_DROPPED,               1, 0, "s1", "s1",                        "notify_balldropped",   _("^BG%s^BG has dropped the ball!"), "") \
--      MSG_INFO_NOTIF(1, INFO_KEEPAWAY_PICKUP,                1, 0, "s1", "s1",                        "notify_ballpickedup",  _("^BG%s^BG has picked up the ball!"), "") \
--      MULTITEAM_INFO(1, INFO_KEYHUNT_CAPTURE_, 4,            1, 0, "s1", "",                          "",                     _("^BG%s^BG captured the keys for the ^TC^TT team"), "") \
--      MULTITEAM_INFO(1, INFO_KEYHUNT_DROP_, 4,               1, 0, "s1", "",                          "",                     _("^BG%s^BG dropped the ^TC^TT Key"), "") \
--      MULTITEAM_INFO(1, INFO_KEYHUNT_LOST_, 4,               1, 0, "s1", "",                          "",                     _("^BG%s^BG lost the ^TC^TT Key"), "") \
--      MULTITEAM_INFO(1, INFO_KEYHUNT_PICKUP_, 4,             1, 0, "s1", "",                          "",                     _("^BG%s^BG picked up the ^TC^TT Key"), "") \
--      MSG_INFO_NOTIF(1, INFO_LMS_FORFEIT,                    1, 0, "s1", "",                          "",                     _("^BG%s^F3 forfeited"), "") \
--      MSG_INFO_NOTIF(1, INFO_LMS_NOLIVES,                    1, 0, "s1", "",                          "",                     _("^BG%s^F3 has no more lives left"), "") \
--      MSG_INFO_NOTIF(1, INFO_MONSTERS_DISABLED,              0, 0, "", "",                            "",                     _("^BGMonsters are currently disabled"), "") \
--      MSG_INFO_NOTIF(1, INFO_POWERUP_INVISIBILITY,           1, 0, "s1", "s1",                        "strength",             _("^BG%s^K1 picked up Invisibility"), "") \
--      MSG_INFO_NOTIF(1, INFO_POWERUP_SHIELD,                 1, 0, "s1", "s1",                        "shield",               _("^BG%s^K1 picked up Shield"), "") \
--      MSG_INFO_NOTIF(1, INFO_POWERUP_SPEED,                  1, 0, "s1", "s1",                        "shield",               _("^BG%s^K1 picked up Speed"), "") \
--      MSG_INFO_NOTIF(1, INFO_POWERUP_STRENGTH,               1, 0, "s1", "s1",                        "strength",             _("^BG%s^K1 picked up Strength"), "") \
--      MSG_INFO_NOTIF(2, INFO_QUIT_DISCONNECT,                1, 0, "s1", "",                          "",                     _("^BG%s^F3 disconnected"), "") \
--      MSG_INFO_NOTIF(2, INFO_QUIT_KICK_IDLING,               1, 0, "s1", "",                          "",                     _("^BG%s^F3 was kicked for idling"), "") \
--      MSG_INFO_NOTIF(1, INFO_QUIT_KICK_SPECTATING,           0, 0, "", "",                            "",                     _("^F2You were kicked from the server because you are a spectator and spectators aren't allowed at the moment."), "") \
--      MSG_INFO_NOTIF(1, INFO_QUIT_SPECTATE,                  1, 0, "s1", "",                          "",                     _("^BG%s^F3 is now spectating"), "") \
--      MSG_INFO_NOTIF(1, INFO_RACE_ABANDONED,                 1, 0, "s1", "",                                                                    "",                      _("^BG%s^BG has abandoned the race"), "") \
--      MSG_INFO_NOTIF(1, INFO_RACE_FAIL_RANKED,               1, 3, "s1 race_col f1ord race_col f3race_time race_diff", "s1 f3race_time",        "race_newfail",          _("^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"), "") \
--      MSG_INFO_NOTIF(1, INFO_RACE_FAIL_UNRANKED,             1, 3, "s1 race_col f1ord race_col f3race_time race_diff", "s1 f3race_time",        "race_newfail",          _("^BG%s^BG couldn't break the %s%s^BG place record of %s%s %s"), "") \
--      MSG_INFO_NOTIF(1, INFO_RACE_FINISHED,                  1, 0, "s1", "",                                                                    "",                      _("^BG%s^BG has finished the race"), "") \
--      MSG_INFO_NOTIF(1, INFO_RACE_NEW_BROKEN,                2, 3, "s1 s2 race_col f1ord race_col f2race_time race_diff", "s1 f2race_time",     "race_newrankyellow",    _("^BG%s^BG broke %s^BG's %s%s^BG place record with %s%s %s"), "") \
--      MSG_INFO_NOTIF(1, INFO_RACE_NEW_IMPROVED,              1, 3, "s1 race_col f1ord race_col f2race_time race_diff", "s1 f2race_time",        "race_newtime",          _("^BG%s^BG improved their %s%s^BG place record with %s%s %s"), "") \
--      MSG_INFO_NOTIF(1, INFO_RACE_NEW_MISSING_UID,           1, 1, "s1 f1race_time", "s1 f1race_time",                                          "race_newfail",          _("^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID and will be lost."), "") \
--      MSG_INFO_NOTIF(1, INFO_RACE_NEW_SET,                   1, 2, "s1 race_col f1ord race_col f2race_time", "s1 f2race_time",                  "race_newrecordserver",  _("^BG%s^BG set the %s%s^BG place record with %s%s"), "") \
--      MULTITEAM_INFO(1, INFO_SCORES_, 4,                     0, 0, "", "",                            "",                     _("^TC^TT ^BGteam scores!"), "") \
--      MSG_INFO_NOTIF(1, INFO_SPECTATE_WARNING,               0, 1, "f1secs", "",                      "",                     _("^F2You have to become a player within the next %s, otherwise you will be kicked, because spectating isn't allowed at this time!"), "") \
-       MSG_INFO_NOTIF(1, INFO_SUPERWEAPON_PICKUP,             1, 0, "s1", "s1",                        "strength",             _("^BG%s^K1 picked up a Superweapon"), "") \
 -      MSG_INFO_NOTIF(1, INFO_SUPERWEAPON_PICKUP,             1, 0, "s1", "s1",                        "superweapons",         _("^BG%s^K1 picked up a Superweapon"), "") \
 -      MSG_INFO_NOTIF(1, INFO_TEAMCHANGE_LARGERTEAM,          0, 0, "", "",                            "",                     _("^BGYou cannot change to a larger team"), "") \
 -      MSG_INFO_NOTIF(1, INFO_TEAMCHANGE_NOTALLOWED,          0, 0, "", "",                            "",                     _("^BGYou are not allowed to change teams"), "") \
--      MSG_INFO_NOTIF(2, INFO_VERSION_BETA,                   2, 0, "s1 s2", "",                       "",                     _("^F4NOTE: ^BGThe server is running ^F1Xonotic %s (beta)^BG, you have ^F2Xonotic %s"), "") \
--      MSG_INFO_NOTIF(2, INFO_VERSION_OLD,                    2, 0, "s1 s2", "",                       "",                     _("^F4NOTE: ^BGThe server is running ^F1Xonotic %s^BG, you have ^F2Xonotic %s"), "") \
--      MSG_INFO_NOTIF(2, INFO_VERSION_OUTDATED,               2, 0, "s1 s2", "",                       "",                     _("^F4NOTE: ^F1Xonotic %s^BG is out, and you still have ^F2Xonotic %s^BG - get the update from ^F3http://www.xonotic.org/^BG!"), "") \
--      MSG_INFO_NOTIF(1, INFO_WATERMARK,                      1, 0, "s1", "",                          "",                     _("^F3SVQC Build information: ^F4%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_ACCORDEON_MURDER,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weapontuba",             _("^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_ACCORDEON_SUICIDE,             2, 1, "s1 s2loc spree_lost", "s1",                 "weapontuba",             _("^BG%s^K1 hurt their own ears with the @!#%%'n Accordeon%s%s"), "") \
 -      MSG_INFO_NOTIF(1, INFO_WEAPON_ARC_MURDER,                    3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponhlac",             _("^BG%s%s^K1 was electrocuted by ^BG%s^K1's Arc%s%s"), "") \
 -      MSG_INFO_NOTIF(1, INFO_WEAPON_BLASTER_MURDER,                3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponlaser",            _("^BG%s%s^K1 was shot to death by ^BG%s^K1's Blaster%s%s"), "") \
 -      MSG_INFO_NOTIF(1, INFO_WEAPON_BLASTER_SUICIDE,               2, 1, "s1 s2loc spree_lost", "s1",                 "weaponlaser",            _("^BG%s^K1 shot themself to hell with their Blaster%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_CRYLINK_MURDER,                3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponcrylink",          _("^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_CRYLINK_SUICIDE,               2, 1, "s1 s2loc spree_lost", "s1",                 "weaponcrylink",          _("^BG%s^K1 felt the strong pull of their Crylink%s%s"), "") \
 -      MSG_INFO_NOTIF(1, INFO_WEAPON_DEVASTATOR_MURDER_DIRECT,      3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponrocketlauncher",   _("^BG%s%s^K1 ate ^BG%s^K1's rocket%s%s"), "") \
 -      MSG_INFO_NOTIF(1, INFO_WEAPON_DEVASTATOR_MURDER_SPLASH,      3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponrocketlauncher",   _("^BG%s%s^K1 got too close ^BG%s^K1's rocket%s%s"), "") \
 -      MSG_INFO_NOTIF(1, INFO_WEAPON_DEVASTATOR_SUICIDE,            2, 1, "s1 s2loc spree_lost", "s1",                 "weaponrocketlauncher",   _("^BG%s^K1 blew themself up with their Devastator%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_ELECTRO_MURDER_BOLT,           3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponelectro",          _("^BG%s%s^K1 was blasted by ^BG%s^K1's Electro bolt%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_ELECTRO_MURDER_COMBO,          3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponelectro",          _("^BG%s%s^K1 felt the electrifying air of ^BG%s^K1's Electro combo%s%s"), "") \
-       MSG_INFO_NOTIF(1, INFO_WEAPON_ELECTRO_MURDER_ORBS,           3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponelectro",          _("^BG%s%s^K1 got too close to ^BG%s^K1's Electro plasma%s%s"), "") \
-       MSG_INFO_NOTIF(1, INFO_WEAPON_ELECTRO_SUICIDE_BOLT,          2, 1, "s1 s2loc spree_lost", "s1",                 "weaponelectro",          _("^BG%s^K1 played with Electro plasma%s%s"), "") \
-       MSG_INFO_NOTIF(1, INFO_WEAPON_ELECTRO_SUICIDE_ORBS,          2, 1, "s1 s2loc spree_lost", "s1",                 "weaponelectro",          _("^BG%s^K1 could not remember where they put their Electro plasma%s%s"), "") \
 -      MSG_INFO_NOTIF(1, INFO_WEAPON_ELECTRO_MURDER_ORBS,           3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponelectro",          _("^BG%s%s^K1 got too close to ^BG%s^K1's Electro orb%s%s"), "") \
 -      MSG_INFO_NOTIF(1, INFO_WEAPON_ELECTRO_SUICIDE_BOLT,          2, 1, "s1 s2loc spree_lost", "s1",                 "weaponelectro",          _("^BG%s^K1 played with Electro bolts%s%s"), "") \
 -      MSG_INFO_NOTIF(1, INFO_WEAPON_ELECTRO_SUICIDE_ORBS,          2, 1, "s1 s2loc spree_lost", "s1",                 "weaponelectro",          _("^BG%s^K1 could not remember where they put their Electro orb%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_FIREBALL_MURDER_BLAST,         3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponfireball",         _("^BG%s%s^K1 got too close to ^BG%s^K1's fireball%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_FIREBALL_MURDER_FIREMINE,      3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponfireball",         _("^BG%s%s^K1 got burnt by ^BG%s^K1's firemine%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_FIREBALL_SUICIDE_BLAST,        2, 1, "s1 s2loc spree_lost", "s1",                 "weaponfireball",         _("^BG%s^K1 should have used a smaller gun%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_FIREBALL_SUICIDE_FIREMINE,     2, 1, "s1 s2loc spree_lost", "s1",                 "weaponfireball",         _("^BG%s^K1 forgot about their firemine%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_HAGAR_MURDER_BURST,            3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponhagar",            _("^BG%s%s^K1 was pummeled by a burst of ^BG%s^K1's Hagar rockets%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_HAGAR_MURDER_SPRAY,            3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponhagar",            _("^BG%s%s^K1 was pummeled by ^BG%s^K1's Hagar rockets%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_HAGAR_SUICIDE,                 2, 1, "s1 s2loc spree_lost", "s1",                 "weaponhagar",            _("^BG%s^K1 played with tiny Hagar rockets%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_HLAC_MURDER,                   3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponhlac",             _("^BG%s%s^K1 was cut down with ^BG%s^K1's HLAC%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_HLAC_SUICIDE,                  2, 1, "s1 s2loc spree_lost", "s1",                 "weaponhlac",             _("^BG%s^K1 got a little jumpy with their HLAC%s%s"), "") \
-       MSG_INFO_NOTIF(1, INFO_WEAPON_HMG_MURDER_SNIPE,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponhmg",              _("^BG%s%s^K1 was sniped by ^BG%s^K1's Heavy Machine Gun%s%s"), "") \
-       MSG_INFO_NOTIF(1, INFO_WEAPON_HMG_MURDER_SPRAY,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponhmg",              _("^BG%s%s^K1 was torn to bits by ^BG%s^K1's Heavy Machine Gun%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_HOOK_MURDER,                   3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponhook",             _("^BG%s%s^K1 was caught in ^BG%s^K1's Hook gravity bomb%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_KLEINBOTTLE_MURDER,            3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weapontuba",             _("^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Klein Bottle%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_KLEINBOTTLE_SUICIDE,           2, 1, "s1 s2loc spree_lost", "s1",                 "weapontuba",             _("^BG%s^K1 hurt their own ears with the @!#%%'n Klein Bottle%s%s"), "") \
-       MSG_INFO_NOTIF(1, INFO_WEAPON_LASER_MURDER,                  3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponlaser",            _("^BG%s%s^K1 was shot to death by ^BG%s^K1's Laser%s%s"), "") \
-       MSG_INFO_NOTIF(1, INFO_WEAPON_LASER_SUICIDE,                 2, 1, "s1 s2loc spree_lost", "s1",                 "weaponlaser",            _("^BG%s^K1 shot themself to hell with their Laser%s%s"), "") \
 -      MSG_INFO_NOTIF(1, INFO_WEAPON_MACHINEGUN_MURDER_SNIPE,       3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponuzi",              _("^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"), "") \
 -      MSG_INFO_NOTIF(1, INFO_WEAPON_MACHINEGUN_MURDER_SPRAY,       3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponuzi",              _("^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_MINELAYER_MURDER,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponminelayer",        _("^BG%s%s^K1 got too close to ^BG%s^K1's mine%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_MINELAYER_SUICIDE,             2, 1, "s1 s2loc spree_lost", "s1",                 "weaponminelayer",        _("^BG%s^K1 forgot about their mine%s%s"), "") \
-       MSG_INFO_NOTIF(1, INFO_WEAPON_MINSTANEX_MURDER,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponminstanex",        _("^BG%s%s^K1 has been vaporized by ^BG%s^K1's Minstanex%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_MORTAR_MURDER_BOUNCE,          3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weapongrenadelauncher",  _("^BG%s%s^K1 got too close to ^BG%s^K1's Mortar grenade%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_MORTAR_MURDER_EXPLODE,         3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weapongrenadelauncher",  _("^BG%s%s^K1 ate ^BG%s^K1's Mortar grenade%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_MORTAR_SUICIDE_BOUNCE,         2, 1, "s1 s2loc spree_lost", "s1",                 "weapongrenadelauncher",  _("^BG%s^K1 didn't see their own Mortar grenade%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_MORTAR_SUICIDE_EXPLODE,        2, 1, "s1 s2loc spree_lost", "s1",                 "weapongrenadelauncher",  _("^BG%s^K1 blew themself up with their own Mortar%s%s"), "") \
-       MSG_INFO_NOTIF(1, INFO_WEAPON_NEX_MURDER,                    3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponnex",              _("^BG%s%s^K1 has been vaporized by ^BG%s^K1's Nex%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_RIFLE_MURDER,                  3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponrifle",            _("^BG%s%s^K1 was sniped with a Rifle by ^BG%s^K1%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_RIFLE_MURDER_HAIL,             3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponrifle",            _("^BG%s%s^K1 died in ^BG%s^K1's Rifle bullet hail%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_RIFLE_MURDER_HAIL_PIERCING,    3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponrifle",            _("^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle bullet hail%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_RIFLE_MURDER_PIERCING,         3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponrifle",            _("^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle%s%s"), "") \
-       MSG_INFO_NOTIF(1, INFO_WEAPON_ROCKETLAUNCHER_MURDER_DIRECT,  3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponrocketlauncher",   _("^BG%s%s^K1 ate ^BG%s^K1's rocket%s%s"), "") \
-       MSG_INFO_NOTIF(1, INFO_WEAPON_ROCKETLAUNCHER_MURDER_SPLASH,  3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponrocketlauncher",   _("^BG%s%s^K1 got too close ^BG%s^K1's rocket%s%s"), "") \
-       MSG_INFO_NOTIF(1, INFO_WEAPON_ROCKETLAUNCHER_SUICIDE,        2, 1, "s1 s2loc spree_lost", "s1",                 "weaponrocketlauncher",   _("^BG%s^K1 blew themself up with their Rocketlauncher%s%s"), "") \
-       MSG_INFO_NOTIF(1, INFO_WEAPON_RPC_MURDER_DIRECT,             3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponrpc",              _("^BG%s%s^K1 got sawn in half by ^BG%s^K1's Rocket Propelled Chainsaw%s%s"), "") \
-       MSG_INFO_NOTIF(1, INFO_WEAPON_RPC_MURDER_SPLASH,             3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponrpc",              _("^BG%s%s^K1 almost dodged ^BG%s^K1's Rocket Propelled Chainsaw%s%s"), "") \
-       MSG_INFO_NOTIF(1, INFO_WEAPON_RPC_SUICIDE,                   2, 1, "s1 s2loc spree_lost", "s1",                 "weaponrpc",              _("^BG%s^K1 blew themself up with their Rocket Propelled Chainsaw%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_SEEKER_MURDER_SPRAY,           3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponseeker",           _("^BG%s%s^K1 was pummeled by ^BG%s^K1's Seeker rockets%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_SEEKER_MURDER_TAG,             3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponseeker",           _("^BG%s%s^K1 was tagged by ^BG%s^K1's Seeker%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_SEEKER_SUICIDE,                2, 1, "s1 s2loc spree_lost", "s1",                 "weaponseeker",           _("^BG%s^K1 played with tiny Seeker rockets%s%s"), "") \
 -      MSG_INFO_NOTIF(1, INFO_WEAPON_SHOCKWAVE_MURDER,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponshotgun",          _("^BG%s%s^K1 was gunned down by ^BG%s^K1's Shockwave%s%s"), "") \
 -      MSG_INFO_NOTIF(1, INFO_WEAPON_SHOCKWAVE_MURDER_SLAP,         3, 2, "spree_inf s2 s1 s3loc spree_end", "s2 s1",  "notify_melee_shotgun",   _("^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shockwave%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_SHOTGUN_MURDER,                3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponshotgun",          _("^BG%s%s^K1 was gunned down by ^BG%s^K1's Shotgun%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_SHOTGUN_MURDER_SLAP,           3, 2, "spree_inf s2 s1 s3loc spree_end", "s2 s1",  "notify_melee_shotgun",   _("^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shotgun%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_THINKING_WITH_PORTALS,         2, 1, "s1 s2loc spree_lost", "s1",                 "notify_selfkill",        _("^BG%s^K1 is now thinking with portals%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_TUBA_MURDER,                   3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weapontuba",             _("^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Tuba%s%s"), "") \
--      MSG_INFO_NOTIF(1, INFO_WEAPON_TUBA_SUICIDE,                  2, 1, "s1 s2loc spree_lost", "s1",                 "weapontuba",             _("^BG%s^K1 hurt their own ears with the @!#%%'n Tuba%s%s"), "") \
-       MSG_INFO_NOTIF(1, INFO_WEAPON_UZI_MURDER_SNIPE,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponuzi",              _("^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"), "") \
-       MSG_INFO_NOTIF(1, INFO_WEAPON_UZI_MURDER_SPRAY,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponuzi",              _("^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"), "")
 -      MSG_INFO_NOTIF(1, INFO_WEAPON_VAPORIZER_MURDER,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponminstanex",        _("^BG%s%s^K1 has been sublimated by ^BG%s^K1's Vaporizer%s%s"), "") \
 -      MSG_INFO_NOTIF(1, INFO_WEAPON_VORTEX_MURDER,                 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponnex",              _("^BG%s%s^K1 has been vaporized by ^BG%s^K1's Vortex%s%s"), "")
++    MSG_INFO_NOTIF(2, INFO_CHAT_NOSPECTATORS,              0, 0, "", "",                            "",                     _("^F4NOTE: ^BGSpectator chat is not sent to players during the match"), "") \
++    MULTITEAM_INFO(1, INFO_CTF_CAPTURE_, 2,                1, 0, "s1", "s1",                        "notify_%s_captured",   _("^BG%s^BG captured the ^TC^TT^BG flag"), "") \
++    MULTITEAM_INFO(1, INFO_CTF_CAPTURE_BROKEN_, 2,         2, 2, "s1 f1p2dec s2 f2p2dec", "s1",     "notify_%s_captured",   _("^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG%s^BG's previous record of ^F2%s^BG seconds"), "") \
++    MULTITEAM_INFO(1, INFO_CTF_CAPTURE_TIME_, 2,           1, 1, "s1 f1p2dec", "s1",                "notify_%s_captured",   _("^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds"), "") \
++    MULTITEAM_INFO(1, INFO_CTF_CAPTURE_UNBROKEN_, 2,       2, 2, "s1 f1p2dec s2 f2p2dec", "s1",     "notify_%s_captured",   _("^BG%s^BG captured the ^TC^TT^BG flag in ^F2%s^BG seconds, failing to break ^BG%s^BG's previous record of ^F1%s^BG seconds"), "") \
++    MULTITEAM_INFO(1, INFO_CTF_FLAGRETURN_ABORTRUN_, 2,    0, 0, "", "",                            "",                     _("^BGThe ^TC^TT^BG flag was returned to base by its owner"), "") \
++    MULTITEAM_INFO(1, INFO_CTF_FLAGRETURN_DAMAGED_, 2,     0, 0, "", "",                            "",                     _("^BGThe ^TC^TT^BG flag was destroyed and returned to base"), "") \
++    MULTITEAM_INFO(1, INFO_CTF_FLAGRETURN_DROPPED_, 2,     0, 0, "", "",                            "",                     _("^BGThe ^TC^TT^BG flag was dropped in the base and returned itself"), "") \
++    MULTITEAM_INFO(1, INFO_CTF_FLAGRETURN_NEEDKILL_, 2,    0, 0, "", "",                            "",                     _("^BGThe ^TC^TT^BG flag fell somewhere it couldn't be reached and returned to base"), "") \
++    MULTITEAM_INFO(1, INFO_CTF_FLAGRETURN_SPEEDRUN_, 2,    0, 1, "f1p2dec", "",                     "",                     _("^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned itself"), "") \
++    MULTITEAM_INFO(1, INFO_CTF_FLAGRETURN_TIMEOUT_, 2,     0, 0, "", "",                            "",                     _("^BGThe ^TC^TT^BG flag has returned to the base"), "") \
++    MULTITEAM_INFO(1, INFO_CTF_LOST_, 2,                   1, 0, "s1", "s1",                        "notify_%s_lost",       _("^BG%s^BG lost the ^TC^TT^BG flag"), "") \
++    MULTITEAM_INFO(1, INFO_CTF_PICKUP_, 2,                 1, 0, "s1", "s1",                        "notify_%s_taken",      _("^BG%s^BG got the ^TC^TT^BG flag"), "") \
++    MULTITEAM_INFO(1, INFO_CTF_RETURN_, 2,                 1, 0, "s1", "s1",                        "notify_%s_returned",   _("^BG%s^BG returned the ^TC^TT^BG flag"), "") \
++    MULTITEAM_INFO(1, INFO_CTF_RETURN_MONSTER_, 2,         1, 0, "s1", "s1",                        "notify_%s_returned",   _("^BG%s^BG returned the ^TC^TT^BG flag"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_CHEAT,             3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_DROWN,             3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_water",         _("^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_FALL,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_fall",          _("^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_FIRE,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"), _("^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s")) \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_LAVA,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_lava",          _("^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_MONSTER,           3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_NADE,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_nade",          _("^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_NADE_NAPALM,       3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_nade_napalm",   _("^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"), _("^BG%s%s^K1 got too close to a napalm explosion%s%s")) \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_NADE_ICE,          3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_nade_ice",      _("^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_NADE_ICE_FREEZE,   3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_nade_ice",      _("^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_NADE_HEAL,         3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_nade_heal",     _("^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_SHOOTING_STAR,     3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_shootingstar",  _("^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_SLIME,             3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_slime",         _("^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_SWAMP,             3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_slime",         _("^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_TELEFRAG,          3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_telefrag",      _("^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"), _("^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s")) \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_TOUCHEXPLODE,      3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_BUMB_DEATH,     3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_BUMB_GUN,       3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_CRUSH,          3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_RAPT_BOMB,      3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_RAPT_CANNON,    3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_RAPT_DEATH,     3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_SPID_DEATH,     3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_SPID_MINIGUN,   3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_SPID_ROCKET,    3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_WAKI_DEATH,     3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_WAKI_GUN,       3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_WAKI_ROCKET,    3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VENGEANCE,         3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VOID,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_void",          _("^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_AUTOTEAMCHANGE,      2, 1, "s1 s2loc death_team", "",         "",                     _("^BG%s^K1 was moved into the %s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_BETRAYAL,            2, 1, "s1 s2loc spree_lost", "s1",       "notify_teamkill_red",  _("^BG%s^K1 became enemies with the Lord of Teamplay%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_CAMP,                2, 1, "s1 s2loc spree_lost", "s1",       "notify_camping",       _("^BG%s^K1 thought they found a nice camping ground%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_CHEAT,               2, 1, "s1 s2loc spree_lost", "s1",       "notify_selfkill",      _("^BG%s^K1 unfairly eliminated themself%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_CUSTOM,              3, 1, "s1 s2 s3loc spree_lost", "s1",    "notify_void",          _("^BG%s^K1 %s^K1%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_DROWN,               2, 1, "s1 s2loc spree_lost", "s1",       "notify_water",         _("^BG%s^K1 couldn't catch their breath%s%s"), _("^BG%s^K1 was in the water for too long%s%s")) \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_FALL,                2, 1, "s1 s2loc spree_lost", "s1",       "notify_fall",          _("^BG%s^K1 hit the ground with a crunch%s%s"), _("^BG%s^K1 hit the ground with a bit too much force%s%s")) \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_FIRE,                2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 became a bit too crispy%s%s"), _("^BG%s^K1 felt a little hot%s%s")) \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_GENERIC,             2, 1, "s1 s2loc spree_lost", "s1",       "notify_selfkill",      _("^BG%s^K1 died%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_LAVA,                2, 1, "s1 s2loc spree_lost", "s1",       "notify_lava",          _("^BG%s^K1 turned into hot slag%s%s"), _("^BG%s^K1 found a hot place%s%s")) \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_MAGE,            2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 was exploded by a Mage%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_SHAMBLER_CLAW,   2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1's innards became outwards by a Shambler%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_SHAMBLER_SMASH,  2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 was smashed by a Shambler%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_SHAMBLER_ZAP,    2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 was zapped to death by a Shambler%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_SPIDER,          2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 was bitten by a Spider%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_WYVERN,          2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 was fireballed by a Wyvern%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_ZOMBIE_JUMP,     2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 joins the Zombies%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_ZOMBIE_MELEE,    2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 was given kung fu lessons by a Zombie%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NADE,                2, 1, "s1 s2loc spree_lost", "s1",       "notify_nade",          _("^BG%s^K1 mastered the art of self-nading%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NADE_NAPALM,         2, 1, "s1 s2loc spree_lost", "s1",       "notify_nade_napalm",   _("^BG%s^K1 was burned to death by their own Napalm Nade%s%s"), _("^BG%s^K1 decided to take a look at the results of their napalm explosion%s%s")) \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NADE_ICE,            2, 1, "s1 s2loc spree_lost", "s1",       "notify_nade_ice",      _("^BG%s^K1 mastered the art of self-nading%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NADE_ICE_FREEZE,     2, 1, "s1 s2loc spree_lost", "s1",       "notify_nade_ice",      _("^BG%s^K1 was frozen to death by their own Ice Nade%s%s"), _("^BG%s^K1 felt a little chilly%s%s")) \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NADE_HEAL,           2, 1, "s1 s2loc spree_lost", "s1",       "notify_nade_heal",     _("^BG%s^K1's Healing Nade didn't quite heal them%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NOAMMO,              2, 1, "s1 s2loc spree_lost", "s1",       "notify_outofammo",     _("^BG%s^K1 died%s%s. What's the point of living without ammo?"), _("^BG%s^K1 ran out of ammo%s%s")) \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_ROT,                 2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 rotted away%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_SHOOTING_STAR,       2, 1, "s1 s2loc spree_lost", "s1",       "notify_shootingstar",  _("^BG%s^K1 became a shooting star%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_SLIME,               2, 1, "s1 s2loc spree_lost", "s1",       "notify_slime",         _("^BG%s^K1 was slimed%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_SUICIDE,             2, 1, "s1 s2loc spree_lost", "s1",       "notify_selfkill",      _("^BG%s^K1 couldn't take it anymore%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_SWAMP,               2, 1, "s1 s2loc spree_lost", "s1",       "notify_slime",         _("^BG%s^K1 is now preserved for centuries to come%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TEAMCHANGE,          2, 1, "s1 s2loc death_team", "",         "",                     _("^BG%s^K1 switched to the %s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TOUCHEXPLODE,        2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 died in an accident%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET,              2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 ran into a turret%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_EWHEEL,       2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 was blasted away by an eWheel turret%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_FLAC,         2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 got caught up in the FLAC turret fire%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_HELLION,      2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 was blasted away by a Hellion turret%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_HK,           2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 could not hide from the Hunter turret%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_MACHINEGUN,   2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 was riddled full of holes by a Machinegun turret%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_MLRS,         2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 got turned into smoldering gibs by an MLRS turret%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_PHASER,       2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 was phased out by a turret%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_PLASMA,       2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 got served some superheated plasma from a turret%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_TESLA,        2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 was electrocuted by a Tesla turret%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_WALK_GUN,     2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 got served a lead enrichment by a Walker turret%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_WALK_MEELE,   2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 was impaled by a Walker turret%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_WALK_ROCKET,  2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 was blasted away by a Walker turret%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_BUMB_DEATH,       2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_CRUSH,            2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 was crushed by a vehicle%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_RAPT_BOMB,        2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 was caught in a Raptor cluster bomb%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_RAPT_DEATH,       2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 got caught in the blast of a Raptor explosion%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_SPID_DEATH,       2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 got caught in the blast of a Spiderbot explosion%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_SPID_ROCKET,      2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 was blasted to bits by a Spiderbot rocket%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_WAKI_DEATH,       2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 got caught in the blast of a Racer explosion%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_WAKI_ROCKET,      2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 couldn't find shelter from a Racer rocket%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VOID,                2, 1, "s1 s2loc spree_lost", "s1",       "notify_void",          _("^BG%s^K1 was in the wrong place%s%s"), "") \
++    MULTITEAM_INFO(1, INFO_DEATH_TEAMKILL_, 4,             3, 1, "s1 s2 s3loc spree_end", "s2 s1",  "notify_teamkill_%s",   _("^BG%s^K1 was betrayed by ^BG%s^K1%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_CA_JOIN_LATE,                   0, 0, "", "",                            "",                     _("^F1Round already started, you will join the game in the next round"), "") \
++    MSG_INFO_NOTIF(1, INFO_CA_LEAVE,                       0, 0, "", "",                            "",                     _("^F2You will spectate in the next round"), "") \
++    MSG_INFO_NOTIF(1, INFO_DOMINATION_CAPTURE_TIME,        2, 2, "s1 s2 f1 f2", "",                 "",                     _("^BG%s^BG%s^BG (%s points every %s seconds)"), "") \
++    MSG_INFO_NOTIF(1, INFO_FREEZETAG_FREEZE,               2, 0, "s1 s2", "",                       "",                     _("^BG%s^K1 was frozen by ^BG%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_FREEZETAG_REVIVED,              2, 0, "s1 s2", "",                       "",                     _("^BG%s^K3 was revived by ^BG%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_FREEZETAG_REVIVED_FALL,         1, 0, "s1", "",                          "",                     _("^BG%s^K3 was revived by falling"), "") \
++    MSG_INFO_NOTIF(1, INFO_FREEZETAG_REVIVED_NADE,         1, 0, "s1", "",                          "",                     _("^BG%s^K3 was revived by their Nade explosion"), "") \
++    MSG_INFO_NOTIF(1, INFO_FREEZETAG_AUTO_REVIVED,         1, 1, "s1 f1", "",                       "",                     _("^BG%s^K3 was automatically revived after %s second(s)"), "") \
++    MULTITEAM_INFO(1, INFO_ROUND_TEAM_WIN_, 4,             0, 0, "", "",                            "",                     _("^TC^TT^BG team wins the round"), "") \
++    MSG_INFO_NOTIF(1, INFO_ROUND_PLAYER_WIN,               1, 0, "s1", "",                          "",                     _("^BG%s^BG wins the round"), "") \
++    MSG_INFO_NOTIF(1, INFO_ROUND_TIED,                     0, 0, "", "",                            "",                     _("^BGRound tied"), "") \
++    MSG_INFO_NOTIF(1, INFO_ROUND_OVER,                     0, 0, "", "",                            "",                     _("^BGRound over, there's no winner"), "") \
++    MSG_INFO_NOTIF(1, INFO_FREEZETAG_SELF,                 1, 0, "s1", "",                          "",                     _("^BG%s^K1 froze themself"), "") \
++    MSG_INFO_NOTIF(1, INFO_GODMODE_OFF,                    0, 1, "f1", "",                          "",                     _("^BGGodmode saved you %s units of damage, cheater!"), "") \
++    MSG_INFO_NOTIF(1, INFO_ITEM_BUFF,                      1, 1, "s1 item_buffname", "",            "",                     _("^BG%s^BG got the %s^BG Buff!"), "") \
++    MSG_INFO_NOTIF(1, INFO_ITEM_BUFF_LOST,                 1, 1, "s1 item_buffname", "",            "",                     _("^BG%s^BG lost the %s^BG Buff!"), "") \
++    MSG_INFO_NOTIF(1, INFO_ITEM_BUFF_DROP,                 0, 1, "item_buffname", "",               "",                     _("^BGYou dropped the %s^BG Buff!"), "") \
++    MSG_INFO_NOTIF(1, INFO_ITEM_BUFF_GOT,                  0, 1, "item_buffname", "",               "",                     _("^BGYou got the %s^BG Buff!"), "") \
++    MSG_INFO_NOTIF(0, INFO_ITEM_WEAPON_DONTHAVE,           0, 1, "item_wepname", "",                      "",               _("^BGYou do not have the ^F1%s"), "") \
++    MSG_INFO_NOTIF(0, INFO_ITEM_WEAPON_DROP,               1, 1, "item_wepname item_wepammo", "",         "",               _("^BGYou dropped the ^F1%s^BG%s"), "") \
++    MSG_INFO_NOTIF(0, INFO_ITEM_WEAPON_GOT,                0, 1, "item_wepname", "",                      "",               _("^BGYou got the ^F1%s"), "") \
++    MSG_INFO_NOTIF(0, INFO_ITEM_WEAPON_NOAMMO,             0, 1, "item_wepname", "",                      "",               _("^BGYou don't have enough ammo for the ^F1%s"), "") \
++    MSG_INFO_NOTIF(0, INFO_ITEM_WEAPON_PRIMORSEC,          0, 3, "item_wepname f2primsec f3primsec", "",  "",               _("^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"), "") \
++    MSG_INFO_NOTIF(0, INFO_ITEM_WEAPON_UNAVAILABLE,        0, 1, "item_wepname", "",                      "",               _("^F1%s^BG is ^F4not available^BG on this map"), "") \
++    MSG_INFO_NOTIF(2, INFO_JOIN_CONNECT,                   1, 0, "s1", "",                          "",                     _("^BG%s^F3 connected%s"), "") \
++    MULTITEAM_INFO(2, INFO_JOIN_CONNECT_TEAM_, 4,          1, 0, "s1", "",                          "",                     _("^BG%s^F3 connected and joined the ^TC^TT team"), "") \
++    MSG_INFO_NOTIF(1, INFO_JOIN_PLAY,                      1, 0, "s1", "",                          "",                     _("^BG%s^F3 is now playing"), "") \
++    MSG_INFO_NOTIF(1, INFO_KEEPAWAY_DROPPED,               1, 0, "s1", "s1",                        "notify_balldropped",   _("^BG%s^BG has dropped the ball!"), "") \
++    MSG_INFO_NOTIF(1, INFO_KEEPAWAY_PICKUP,                1, 0, "s1", "s1",                        "notify_ballpickedup",  _("^BG%s^BG has picked up the ball!"), "") \
++    MULTITEAM_INFO(1, INFO_KEYHUNT_CAPTURE_, 4,            1, 0, "s1", "",                          "",                     _("^BG%s^BG captured the keys for the ^TC^TT team"), "") \
++    MULTITEAM_INFO(1, INFO_KEYHUNT_DROP_, 4,               1, 0, "s1", "",                          "",                     _("^BG%s^BG dropped the ^TC^TT Key"), "") \
++    MULTITEAM_INFO(1, INFO_KEYHUNT_LOST_, 4,               1, 0, "s1", "",                          "",                     _("^BG%s^BG lost the ^TC^TT Key"), "") \
++    MULTITEAM_INFO(1, INFO_KEYHUNT_PICKUP_, 4,             1, 0, "s1", "",                          "",                     _("^BG%s^BG picked up the ^TC^TT Key"), "") \
++    MSG_INFO_NOTIF(1, INFO_LMS_FORFEIT,                    1, 0, "s1", "",                          "",                     _("^BG%s^F3 forfeited"), "") \
++    MSG_INFO_NOTIF(1, INFO_LMS_NOLIVES,                    1, 0, "s1", "",                          "",                     _("^BG%s^F3 has no more lives left"), "") \
++    MSG_INFO_NOTIF(1, INFO_MONSTERS_DISABLED,              0, 0, "", "",                            "",                     _("^BGMonsters are currently disabled"), "") \
++    MSG_INFO_NOTIF(1, INFO_POWERUP_INVISIBILITY,           1, 0, "s1", "s1",                        "strength",             _("^BG%s^K1 picked up Invisibility"), "") \
++    MSG_INFO_NOTIF(1, INFO_POWERUP_SHIELD,                 1, 0, "s1", "s1",                        "shield",               _("^BG%s^K1 picked up Shield"), "") \
++    MSG_INFO_NOTIF(1, INFO_POWERUP_SPEED,                  1, 0, "s1", "s1",                        "shield",               _("^BG%s^K1 picked up Speed"), "") \
++    MSG_INFO_NOTIF(1, INFO_POWERUP_STRENGTH,               1, 0, "s1", "s1",                        "strength",             _("^BG%s^K1 picked up Strength"), "") \
++    MSG_INFO_NOTIF(2, INFO_QUIT_DISCONNECT,                1, 0, "s1", "",                          "",                     _("^BG%s^F3 disconnected"), "") \
++    MSG_INFO_NOTIF(2, INFO_QUIT_KICK_IDLING,               1, 0, "s1", "",                          "",                     _("^BG%s^F3 was kicked for idling"), "") \
++    MSG_INFO_NOTIF(1, INFO_QUIT_KICK_SPECTATING,           0, 0, "", "",                            "",                     _("^F2You were kicked from the server because you are a spectator and spectators aren't allowed at the moment."), "") \
++    MSG_INFO_NOTIF(1, INFO_QUIT_SPECTATE,                  1, 0, "s1", "",                          "",                     _("^BG%s^F3 is now spectating"), "") \
++    MSG_INFO_NOTIF(1, INFO_RACE_ABANDONED,                 1, 0, "s1", "",                                                                    "",                      _("^BG%s^BG has abandoned the race"), "") \
++    MSG_INFO_NOTIF(1, INFO_RACE_FAIL_RANKED,               1, 3, "s1 race_col f1ord race_col f3race_time race_diff", "s1 f3race_time",        "race_newfail",          _("^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"), "") \
++    MSG_INFO_NOTIF(1, INFO_RACE_FAIL_UNRANKED,             1, 3, "s1 race_col f1ord race_col f3race_time race_diff", "s1 f3race_time",        "race_newfail",          _("^BG%s^BG couldn't break the %s%s^BG place record of %s%s %s"), "") \
++    MSG_INFO_NOTIF(1, INFO_RACE_FINISHED,                  1, 0, "s1", "",                                                                    "",                      _("^BG%s^BG has finished the race"), "") \
++    MSG_INFO_NOTIF(1, INFO_RACE_NEW_BROKEN,                2, 3, "s1 s2 race_col f1ord race_col f2race_time race_diff", "s1 f2race_time",     "race_newrankyellow",    _("^BG%s^BG broke %s^BG's %s%s^BG place record with %s%s %s"), "") \
++    MSG_INFO_NOTIF(1, INFO_RACE_NEW_IMPROVED,              1, 3, "s1 race_col f1ord race_col f2race_time race_diff", "s1 f2race_time",        "race_newtime",          _("^BG%s^BG improved their %s%s^BG place record with %s%s %s"), "") \
++    MSG_INFO_NOTIF(1, INFO_RACE_NEW_MISSING_UID,           1, 1, "s1 f1race_time", "s1 f1race_time",                                          "race_newfail",          _("^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID and will be lost."), "") \
++    MSG_INFO_NOTIF(1, INFO_RACE_NEW_SET,                   1, 2, "s1 race_col f1ord race_col f2race_time", "s1 f2race_time",                  "race_newrecordserver",  _("^BG%s^BG set the %s%s^BG place record with %s%s"), "") \
++    MULTITEAM_INFO(1, INFO_SCORES_, 4,                     0, 0, "", "",                            "",                     _("^TC^TT ^BGteam scores!"), "") \
++    MSG_INFO_NOTIF(1, INFO_SPECTATE_WARNING,               0, 1, "f1secs", "",                      "",                     _("^F2You have to become a player within the next %s, otherwise you will be kicked, because spectating isn't allowed at this time!"), "") \
++    MSG_INFO_NOTIF(1, INFO_SUPERWEAPON_PICKUP,             1, 0, "s1", "s1",                        "superweapons",         _("^BG%s^K1 picked up a Superweapon"), "") \
++    MSG_INFO_NOTIF(1, INFO_TEAMCHANGE_LARGERTEAM,          0, 0, "", "",                            "",                     _("^BGYou cannot change to a larger team"), "") \
++    MSG_INFO_NOTIF(1, INFO_TEAMCHANGE_NOTALLOWED,          0, 0, "", "",                            "",                     _("^BGYou are not allowed to change teams"), "") \
++    MSG_INFO_NOTIF(2, INFO_VERSION_BETA,                   2, 0, "s1 s2", "",                       "",                     _("^F4NOTE: ^BGThe server is running ^F1Xonotic %s (beta)^BG, you have ^F2Xonotic %s"), "") \
++    MSG_INFO_NOTIF(2, INFO_VERSION_OLD,                    2, 0, "s1 s2", "",                       "",                     _("^F4NOTE: ^BGThe server is running ^F1Xonotic %s^BG, you have ^F2Xonotic %s"), "") \
++    MSG_INFO_NOTIF(2, INFO_VERSION_OUTDATED,               2, 0, "s1 s2", "",                       "",                     _("^F4NOTE: ^F1Xonotic %s^BG is out, and you still have ^F2Xonotic %s^BG - get the update from ^F3http://www.xonotic.org/^BG!"), "") \
++    MSG_INFO_NOTIF(1, INFO_WATERMARK,                      1, 0, "s1", "",                          "",                     _("^F3SVQC Build information: ^F4%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_ACCORDEON_MURDER,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weapontuba",             _("^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_ACCORDEON_SUICIDE,             2, 1, "s1 s2loc spree_lost", "s1",                 "weapontuba",             _("^BG%s^K1 hurt their own ears with the @!#%%'n Accordeon%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_ARC_MURDER,                    3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponhlac",             _("^BG%s%s^K1 was electrocuted by ^BG%s^K1's Arc%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_BLASTER_MURDER,                3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponlaser",            _("^BG%s%s^K1 was shot to death by ^BG%s^K1's Blaster%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_BLASTER_SUICIDE,               2, 1, "s1 s2loc spree_lost", "s1",                 "weaponlaser",            _("^BG%s^K1 shot themself to hell with their Blaster%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_CRYLINK_MURDER,                3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponcrylink",          _("^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_CRYLINK_SUICIDE,               2, 1, "s1 s2loc spree_lost", "s1",                 "weaponcrylink",          _("^BG%s^K1 felt the strong pull of their Crylink%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_DEVASTATOR_MURDER_DIRECT,      3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponrocketlauncher",   _("^BG%s%s^K1 ate ^BG%s^K1's rocket%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_DEVASTATOR_MURDER_SPLASH,      3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponrocketlauncher",   _("^BG%s%s^K1 got too close ^BG%s^K1's rocket%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_DEVASTATOR_SUICIDE,            2, 1, "s1 s2loc spree_lost", "s1",                 "weaponrocketlauncher",   _("^BG%s^K1 blew themself up with their Devastator%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_ELECTRO_MURDER_BOLT,           3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponelectro",          _("^BG%s%s^K1 was blasted by ^BG%s^K1's Electro bolt%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_ELECTRO_MURDER_COMBO,          3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponelectro",          _("^BG%s%s^K1 felt the electrifying air of ^BG%s^K1's Electro combo%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_ELECTRO_MURDER_ORBS,           3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponelectro",          _("^BG%s%s^K1 got too close to ^BG%s^K1's Electro orb%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_ELECTRO_SUICIDE_BOLT,          2, 1, "s1 s2loc spree_lost", "s1",                 "weaponelectro",          _("^BG%s^K1 played with Electro bolts%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_ELECTRO_SUICIDE_ORBS,          2, 1, "s1 s2loc spree_lost", "s1",                 "weaponelectro",          _("^BG%s^K1 could not remember where they put their Electro orb%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_FIREBALL_MURDER_BLAST,         3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponfireball",         _("^BG%s%s^K1 got too close to ^BG%s^K1's fireball%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_FIREBALL_MURDER_FIREMINE,      3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponfireball",         _("^BG%s%s^K1 got burnt by ^BG%s^K1's firemine%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_FIREBALL_SUICIDE_BLAST,        2, 1, "s1 s2loc spree_lost", "s1",                 "weaponfireball",         _("^BG%s^K1 should have used a smaller gun%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_FIREBALL_SUICIDE_FIREMINE,     2, 1, "s1 s2loc spree_lost", "s1",                 "weaponfireball",         _("^BG%s^K1 forgot about their firemine%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_HAGAR_MURDER_BURST,            3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponhagar",            _("^BG%s%s^K1 was pummeled by a burst of ^BG%s^K1's Hagar rockets%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_HAGAR_MURDER_SPRAY,            3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponhagar",            _("^BG%s%s^K1 was pummeled by ^BG%s^K1's Hagar rockets%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_HAGAR_SUICIDE,                 2, 1, "s1 s2loc spree_lost", "s1",                 "weaponhagar",            _("^BG%s^K1 played with tiny Hagar rockets%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_HLAC_MURDER,                   3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponhlac",             _("^BG%s%s^K1 was cut down with ^BG%s^K1's HLAC%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_HLAC_SUICIDE,                  2, 1, "s1 s2loc spree_lost", "s1",                 "weaponhlac",             _("^BG%s^K1 got a little jumpy with their HLAC%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_HMG_MURDER_SNIPE,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponhmg",              _("^BG%s%s^K1 was sniped by ^BG%s^K1's Heavy Machine Gun%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_HMG_MURDER_SPRAY,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponhmg",              _("^BG%s%s^K1 was torn to bits by ^BG%s^K1's Heavy Machine Gun%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_HOOK_MURDER,                   3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponhook",             _("^BG%s%s^K1 was caught in ^BG%s^K1's Hook gravity bomb%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_KLEINBOTTLE_MURDER,            3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weapontuba",             _("^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Klein Bottle%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_KLEINBOTTLE_SUICIDE,           2, 1, "s1 s2loc spree_lost", "s1",                 "weapontuba",             _("^BG%s^K1 hurt their own ears with the @!#%%'n Klein Bottle%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_MACHINEGUN_MURDER_SNIPE,       3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponuzi",              _("^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_MACHINEGUN_MURDER_SPRAY,       3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponuzi",              _("^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_MINELAYER_MURDER,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponminelayer",        _("^BG%s%s^K1 got too close to ^BG%s^K1's mine%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_MINELAYER_SUICIDE,             2, 1, "s1 s2loc spree_lost", "s1",                 "weaponminelayer",        _("^BG%s^K1 forgot about their mine%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_MORTAR_MURDER_BOUNCE,          3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weapongrenadelauncher",  _("^BG%s%s^K1 got too close to ^BG%s^K1's Mortar grenade%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_MORTAR_MURDER_EXPLODE,         3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weapongrenadelauncher",  _("^BG%s%s^K1 ate ^BG%s^K1's Mortar grenade%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_MORTAR_SUICIDE_BOUNCE,         2, 1, "s1 s2loc spree_lost", "s1",                 "weapongrenadelauncher",  _("^BG%s^K1 didn't see their own Mortar grenade%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_MORTAR_SUICIDE_EXPLODE,        2, 1, "s1 s2loc spree_lost", "s1",                 "weapongrenadelauncher",  _("^BG%s^K1 blew themself up with their own Mortar%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_RIFLE_MURDER,                  3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponrifle",            _("^BG%s%s^K1 was sniped with a Rifle by ^BG%s^K1%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_RIFLE_MURDER_HAIL,             3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponrifle",            _("^BG%s%s^K1 died in ^BG%s^K1's Rifle bullet hail%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_RIFLE_MURDER_HAIL_PIERCING,    3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponrifle",            _("^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle bullet hail%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_RIFLE_MURDER_PIERCING,         3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponrifle",            _("^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_RPC_MURDER_DIRECT,             3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponrpc",              _("^BG%s%s^K1 was sawn in half by ^BG%s^K1's Rocket Propelled Chainsaw%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_RPC_MURDER_SPLASH,             3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponrpc",              _("^BG%s%s^K1 almost dodged ^BG%s^K1's Rocket Propelled Chainsaw%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_RPC_SUICIDE_DIRECT,            2, 1, "s1 s2loc spree_lost", "s1",                 "weaponrpc",              _("^BG%s^K1 was sawn in half by their own Rocket Propelled Chainsaw%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_RPC_SUICIDE_SPLASH,            2, 1, "s1 s2loc spree_lost", "s1",                 "weaponrpc",              _("^BG%s^K1 blew themself up with their Rocket Propelled Chainsaw%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_SEEKER_MURDER_SPRAY,           3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponseeker",           _("^BG%s%s^K1 was pummeled by ^BG%s^K1's Seeker rockets%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_SEEKER_MURDER_TAG,             3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponseeker",           _("^BG%s%s^K1 was tagged by ^BG%s^K1's Seeker%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_SEEKER_SUICIDE,                2, 1, "s1 s2loc spree_lost", "s1",                 "weaponseeker",           _("^BG%s^K1 played with tiny Seeker rockets%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_SHOCKWAVE_MURDER,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponshotgun",          _("^BG%s%s^K1 was gunned down by ^BG%s^K1's Shockwave%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_SHOCKWAVE_MURDER_SLAP,         3, 2, "spree_inf s2 s1 s3loc spree_end", "s2 s1",  "notify_melee_shotgun",   _("^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shockwave%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_SHOTGUN_MURDER,                3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponshotgun",          _("^BG%s%s^K1 was gunned down by ^BG%s^K1's Shotgun%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_SHOTGUN_MURDER_SLAP,           3, 2, "spree_inf s2 s1 s3loc spree_end", "s2 s1",  "notify_melee_shotgun",   _("^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shotgun%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_THINKING_WITH_PORTALS,         2, 1, "s1 s2loc spree_lost", "s1",                 "notify_selfkill",        _("^BG%s^K1 is now thinking with portals%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_TUBA_MURDER,                   3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weapontuba",             _("^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Tuba%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_TUBA_SUICIDE,                  2, 1, "s1 s2loc spree_lost", "s1",                 "weapontuba",             _("^BG%s^K1 hurt their own ears with the @!#%%'n Tuba%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_VAPORIZER_MURDER,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponminstanex",        _("^BG%s%s^K1 has been sublimated by ^BG%s^K1's Vaporizer%s%s"), "") \
++    MSG_INFO_NOTIF(1, INFO_WEAPON_VORTEX_MURDER,                 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponnex",              _("^BG%s%s^K1 has been vaporized by ^BG%s^K1's Vortex%s%s"), "")
  
  #define MULTITEAM_CENTER2(default,prefix,strnum,flnum,args,cpid,durcnt,normal,gentle) \
--      MSG_CENTER_NOTIF(default, prefix##RED, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \
--      MSG_CENTER_NOTIF(default, prefix##BLUE, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2)))
++    MSG_CENTER_NOTIF(default, prefix##RED, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \
++    MSG_CENTER_NOTIF(default, prefix##BLUE, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2)))
  #define MULTITEAM_CENTER3(default,prefix,strnum,flnum,args,cpid,durcnt,normal,gentle) \
--      MSG_CENTER_NOTIF(default, prefix##RED, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \
--      MSG_CENTER_NOTIF(default, prefix##BLUE, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2))) \
--      MSG_CENTER_NOTIF(default, prefix##YELLOW, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_3, strtoupper(NAME_TEAM_3)), TCR(gentle, COL_TEAM_3, strtoupper(NAME_TEAM_3)))
++    MSG_CENTER_NOTIF(default, prefix##RED, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \
++    MSG_CENTER_NOTIF(default, prefix##BLUE, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2))) \
++    MSG_CENTER_NOTIF(default, prefix##YELLOW, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_3, strtoupper(NAME_TEAM_3)), TCR(gentle, COL_TEAM_3, strtoupper(NAME_TEAM_3)))
  #define MULTITEAM_CENTER4(default,prefix,strnum,flnum,args,cpid,durcnt,normal,gentle) \
--      MSG_CENTER_NOTIF(default, prefix##RED, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \
--      MSG_CENTER_NOTIF(default, prefix##BLUE, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2))) \
--      MSG_CENTER_NOTIF(default, prefix##YELLOW, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_3, strtoupper(NAME_TEAM_3)), TCR(gentle, COL_TEAM_3, strtoupper(NAME_TEAM_3))) \
--      MSG_CENTER_NOTIF(default, prefix##PINK, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_4, strtoupper(NAME_TEAM_4)), TCR(gentle, COL_TEAM_4, strtoupper(NAME_TEAM_4)))
++    MSG_CENTER_NOTIF(default, prefix##RED, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \
++    MSG_CENTER_NOTIF(default, prefix##BLUE, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2))) \
++    MSG_CENTER_NOTIF(default, prefix##YELLOW, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_3, strtoupper(NAME_TEAM_3)), TCR(gentle, COL_TEAM_3, strtoupper(NAME_TEAM_3))) \
++    MSG_CENTER_NOTIF(default, prefix##PINK, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_4, strtoupper(NAME_TEAM_4)), TCR(gentle, COL_TEAM_4, strtoupper(NAME_TEAM_4)))
  #define MULTITEAM_CENTER(default,prefix,teams,strnum,flnum,args,cpid,durcnt,normal,gentle) \
--      MULTITEAM_CENTER##teams(default,prefix,strnum,flnum,args,cpid,durcnt,normal,gentle)
++    MULTITEAM_CENTER##teams(default,prefix,strnum,flnum,args,cpid,durcnt,normal,gentle)
  
  #define MSG_CENTER_NOTIFICATIONS \
 -      MSG_CENTER_NOTIF(1, CENTER_ALONE,                       0, 0, "",             NO_CPID,             "0 0", _("^F4You are now alone!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_ASSAULT_ATTACKING,           0, 0, "",             CPID_ASSAULT_ROLE,   "0 0", _("^BGYou are attacking!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_ASSAULT_DEFENDING,           0, 0, "",             CPID_ASSAULT_ROLE,   "0 0", _("^BGYou are defending!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_COUNTDOWN_BEGIN,             0, 0, "",             CPID_ROUND,          "2 0", _("^F4Begin!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_COUNTDOWN_GAMESTART,         0, 1, "",             CPID_ROUND,          "1 f1", _("^F4Game starts in ^COUNT"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_COUNTDOWN_ROUNDSTART,        0, 1, "",             CPID_ROUND,          "1 f1", _("^F4Round starts in ^COUNT"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_COUNTDOWN_ROUNDSTOP,         0, 0, "",             CPID_ROUND,          "2 0", _("^F4Round cannot start"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_ROUND_TIED,                  0, 0, "",             CPID_ROUND,          "0 0", _("^BGRound tied"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_ROUND_OVER,                  0, 0, "",             CPID_ROUND,          "0 0", _("^BGRound over, there's no winner"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_CAMPCHECK,                   0, 0, "",             CPID_CAMPCHECK,      "0 0", _("^F2Don't camp!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_CTF_CAPTURESHIELD_FREE,      0, 0, "",             CPID_CTF_CAPSHIELD,  "0 0", _("^BGYou are now free.\n^BGFeel free to ^F2try to capture^BG the flag again\n^BGif you think you will succeed."), "") \
--      MSG_CENTER_NOTIF(1, CENTER_CTF_CAPTURESHIELD_SHIELDED,  0, 0, "",             CPID_CTF_CAPSHIELD,  "0 0", _("^BGYou are now ^F1shielded^BG from the flag\n^BGfor ^F2too many unsuccessful attempts^BG to capture.\n^BGMake some defensive scores before trying again."), "") \
--      MULTITEAM_CENTER(1, CENTER_CTF_CAPTURE_, 2,             0, 0, "",             CPID_CTF_LOWPRIO,    "0 0", _("^BGYou captured the ^TC^TT^BG flag!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_CTF_FLAG_THROW_PUNISH,       0, 1, "f1secs",       CPID_CTF_LOWPRIO,    "0 0", _("^BGToo many flag throws! Throwing disabled for %s."), "") \
--      MULTITEAM_CENTER(1, CENTER_CTF_PASS_OTHER_, 2,          2, 0, "s1 s2",        CPID_CTF_PASS,       "0 0", _("^BG%s^BG passed the ^TC^TT^BG flag to %s"), "") \
--      MULTITEAM_CENTER(1, CENTER_CTF_PASS_RECEIVED_, 2,       1, 0, "s1",           CPID_CTF_PASS,       "0 0", _("^BGYou received the ^TC^TT^BG flag from %s"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_CTF_PASS_REQUESTED,          1, 0, "s1 pass_key",  CPID_CTF_PASS,       "0 0", _("^BG%s^BG requests you to pass the flag%s"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_CTF_PASS_REQUESTING,         1, 0, "s1",           CPID_CTF_PASS,       "0 0", _("^BGRequesting %s^BG to pass you the flag"), "") \
--      MULTITEAM_CENTER(1, CENTER_CTF_PASS_SENT_, 2,           1, 0, "s1",           CPID_CTF_PASS,       "0 0", _("^BGYou passed the ^TC^TT^BG flag to %s"), "") \
--      MULTITEAM_CENTER(1, CENTER_CTF_PICKUP_, 2,              0, 0, "",             CPID_CTF_LOWPRIO,    "0 0", _("^BGYou got the ^TC^TT^BG flag!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_CTF_PICKUP_ENEMY,            1, 0, "s1",           CPID_CTF_LOWPRIO,    "0 0", _("^BGThe %senemy^BG got your flag! Retrieve it!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_CTF_PICKUP_ENEMY_VERBOSE,    2, 0, "s1 s2 s1",     CPID_CTF_LOWPRIO,    "0 0", _("^BGThe %senemy (^BG%s%s)^BG got your flag! Retrieve it!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_CTF_PICKUP_TEAM,             1, 0, "s1",           CPID_CTF_LOWPRIO,    "0 0", _("^BGYour %steam mate^BG got the flag! Protect them!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_CTF_PICKUP_TEAM_VERBOSE,     2, 0, "s1 s2 s1",     CPID_CTF_LOWPRIO,    "0 0", _("^BGYour %steam mate (^BG%s%s)^BG got the flag! Protect them!"), "") \
--      MULTITEAM_CENTER(1, CENTER_CTF_RETURN_, 2,              0, 0, "",             CPID_CTF_LOWPRIO,    "0 0", _("^BGYou returned the ^TC^TT^BG flag!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_CTF_STALEMATE_CARRIER,       0, 0, "",             CPID_STALEMATE,      "0 0", _("^BGStalemate! Enemies can now see you on radar!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_CTF_STALEMATE_OTHER,         0, 0, "",             CPID_STALEMATE,      "0 0", _("^BGStalemate! Flag carriers can now be seen by enemies on radar!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_FRAG,                 1, 1, "spree_cen s1",             NO_CPID, "0 0", _("^K3%sYou fragged ^BG%s"), _("^K3%sYou scored against ^BG%s")) \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_FRAGGED,              1, 1, "spree_cen s1",             NO_CPID, "0 0", _("^K1%sYou were fragged by ^BG%s"), _("^K1%sYou were scored against by ^BG%s")) \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_FRAGGED_VERBOSE,      1, 4, "spree_cen s1 frag_stats",  NO_CPID, "0 0", _("^K1%sYou were fragged by ^BG%s^BG%s"), _("^K1%sYou were scored against by ^BG%s^BG%s")) \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_FRAG_VERBOSE,         1, 2, "spree_cen s1 frag_ping",   NO_CPID, "0 0", _("^K3%sYou fragged ^BG%s^BG%s"), _("^K3%sYou scored against ^BG%s^BG%s")) \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_TYPEFRAG,             1, 1, "spree_cen s1",             NO_CPID, "0 0", _("^K1%sYou typefragged ^BG%s"), _("^K1%sYou scored against ^BG%s^K1 while they were typing")) \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_TYPEFRAGGED,          1, 1, "spree_cen s1",             NO_CPID, "0 0", _("^K1%sYou were typefragged by ^BG%s"), _("^K1%sYou were scored against by ^BG%s^K1 while typing!")) \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_TYPEFRAGGED_VERBOSE,  1, 4, "spree_cen s1 frag_stats",  NO_CPID, "0 0", _("^K1%sYou were typefragged by ^BG%s^BG%s"), _("^K1%sYou were scored against by ^BG%s^K1 while typing^BG%s")) \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_TYPEFRAG_VERBOSE,     1, 2, "spree_cen s1 frag_ping",   NO_CPID, "0 0", _("^K1%sYou typefragged ^BG%s^BG%s"), _("^K1%sYou scored against ^BG%s^K1 while they were typing^BG%s")) \
--      MSG_CENTER_NOTIF(1, CENTER_NADE_THROW,                          0, 0, "",             CPID_NADES,          "0 0", _("^BGPress ^F2DROPWEAPON^BG again to toss the nade!"), "") \
 -      MSG_CENTER_NOTIF(1, CENTER_NADE_BONUS,                          0, 0, "",             CPID_NADES,          "0 0", _("^F2You got a ^K1BONUS GRENADE^F2!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_AUTOTEAMCHANGE,   0, 1, "death_team",   NO_CPID,             "0 0", _("^BGYou have been moved into a different team\nYou are now on: %s"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_BETRAYAL,         0, 0, "",             NO_CPID,             "0 0", _("^K1Don't shoot your team mates!"), _("^K1Don't go against your team mates!")) \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_CAMP,             0, 0, "",             NO_CPID,             "0 0", _("^K1Die camper!"), _("^K1Reconsider your tactics, camper!")) \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_CHEAT,            0, 0, "",             NO_CPID,             "0 0", _("^K1You unfairly eliminated yourself!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_CUSTOM,           2, 0, "s2",           NO_CPID,             "0 0", _("^K1You were %s"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_DROWN,            0, 0, "",             NO_CPID,             "0 0", _("^K1You couldn't catch your breath!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_FALL,             0, 0, "",             NO_CPID,             "0 0", _("^K1You hit the ground with a crunch!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_FIRE,             0, 0, "",             NO_CPID,             "0 0", _("^K1You got a little bit too crispy!"), _("^K1You felt a little too hot!")) \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_GENERIC,          0, 0, "",             NO_CPID,             "0 0", _("^K1You killed your own dumb self!"), _("^K1You need to be more careful!")) \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_LAVA,             0, 0, "",             NO_CPID,             "0 0", _("^K1You couldn't stand the heat!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_MONSTER,          0, 0, "",             NO_CPID,             "0 0", _("^K1You were killed by a monster!"), _("^K1You need to watch out for monsters!")) \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_NADE,                             0, 0, "",                         NO_CPID,                         "0 0", _("^K1You forgot to put the pin back in!"), _("^K1Tastes like chicken!")) \
 -      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_NADE_NAPALM,              0, 0, "",                         NO_CPID,                         "0 0", _("^K1Hanging around a napalm explosion is bad!"), "") \
 -      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_NADE_ICE_FREEZE,  0, 0, "",                         NO_CPID,                         "0 0", _("^K1You got a little bit too cold!"), _("^K1You felt a little chilly!")) \
 -      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_NADE_HEAL,        0, 0, "",             NO_CPID,             "0 0", _("^K1Your Healing Nade is a bit defective"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_NOAMMO,           0, 0, "",             NO_CPID,             "0 0", _("^K1You were killed for running out of ammo..."), _("^K1You are respawning for running out of ammo...")) \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_ROT,              0, 0, "",             NO_CPID,             "0 0", _("^K1You grew too old without taking your medicine"), _("^K1You need to preserve your health")) \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_SHOOTING_STAR,    0, 0, "",             NO_CPID,             "0 0", _("^K1You became a shooting star!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_SLIME,            0, 0, "",             NO_CPID,             "0 0", _("^K1You melted away in slime!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_SUICIDE,          0, 0, "",             NO_CPID,             "0 0", _("^K1You committed suicide!"), _("^K1You ended it all!")) \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_SWAMP,            0, 0, "",             NO_CPID,             "0 0", _("^K1You got stuck in a swamp!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_TEAMCHANGE,       0, 1, "death_team",   NO_CPID,             "0 0", _("^BGYou are now on: %s"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_TOUCHEXPLODE,     0, 0, "",             NO_CPID,             "0 0", _("^K1You died in an accident!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_TURRET,           0, 0, "",             NO_CPID,             "0 0", _("^K1You were fragged by a turret!"), _("^K1You had an unfortunate run in with a turret!")) \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_TURRET_EWHEEL,    0, 0, "",             NO_CPID,             "0 0", _("^K1You were fragged by an eWheel turret!"), _("^K1You had an unfortunate run in with an eWheel turret!")) \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_TURRET_WALK,      0, 0, "",             NO_CPID,             "0 0", _("^K1You were fragged by a Walker turret!"), _("^K1You had an unfortunate run in with a Walker turret!")) \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_BUMB_DEATH,    0, 0, "",             NO_CPID,             "0 0", _("^K1You got caught in the blast of a Bumblebee explosion!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_CRUSH,         0, 0, "",             NO_CPID,             "0 0", _("^K1You were crushed by a vehicle!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_RAPT_BOMB,     0, 0, "",             NO_CPID,             "0 0", _("^K1You were caught in a Raptor cluster bomb!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_RAPT_DEATH,    0, 0, "",             NO_CPID,             "0 0", _("^K1You got caught in the blast of a Raptor explosion!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_SPID_DEATH,    0, 0, "",             NO_CPID,             "0 0", _("^K1You got caught in the blast of a Spiderbot explosion!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_SPID_ROCKET,   0, 0, "",             NO_CPID,             "0 0", _("^K1You were blasted to bits by a Spiderbot rocket!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_WAKI_DEATH,    0, 0, "",             NO_CPID,             "0 0", _("^K1You got caught in the blast of a Racer explosion!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_WAKI_ROCKET,   0, 0, "",             NO_CPID,             "0 0", _("^K1You couldn't find shelter from a Racer rocket!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VOID,             0, 0, "",             NO_CPID,             "0 0", _("^K1Watch your step!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_TEAMKILL_FRAG,         1, 0, "s1",           NO_CPID,             "0 0", _("^K1Moron! You fragged ^BG%s^K1, a team mate!"), _("^K1Moron! You went against ^BG%s^K1, a team mate!")) \
--      MSG_CENTER_NOTIF(1, CENTER_DEATH_TEAMKILL_FRAGGED,      1, 0, "s1",           NO_CPID,             "0 0", _("^K1You were fragged by ^BG%s^K1, a team mate"), _("^K1You were scored against by ^BG%s^K1, a team mate")) \
--      MSG_CENTER_NOTIF(1, CENTER_DISCONNECT_IDLING,           0, 1, "",             CPID_IDLING,         "1 f1", _("^K1Stop idling!\n^BGDisconnecting in ^COUNT..."), "") \
 -      MSG_CENTER_NOTIF(1, CENTER_DOOR_LOCKED_NEED,            0, 0, "",             NO_CPID,             "0 0", _("^BGYou need %s^BG!"), "") \
 -      MSG_CENTER_NOTIF(1, CENTER_DOOR_LOCKED_ALSONEED,        0, 0, "",             NO_CPID,             "0 0", _("^BGYou also need %s^BG!"), "") \
 -      MSG_CENTER_NOTIF(1, CENTER_DOOR_UNLOCKED,               0, 0, "",             NO_CPID,             "0 0", _("^BGDoor unlocked!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_EXTRALIVES,                          0, 0, "",             NO_CPID,             "0 0", _("^F2You picked up some extra lives"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_FREEZE,            1, 0, "s1",           NO_CPID,             "0 0", _("^K3You froze ^BG%s"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_FROZEN,            1, 0, "s1",           NO_CPID,             "0 0", _("^K1You were frozen by ^BG%s"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_REVIVE,            1, 0, "s1",           NO_CPID,             "0 0", _("^K3You revived ^BG%s"), "") \
-       MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_REVIVE_FALL,       0, 0, "",             NO_CPID,             "0 0", _("^K3You revived yourself"), "") \
 -      MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_REVIVE_SELF,       0, 0, "",             NO_CPID,             "0 0", _("^K3You revived yourself"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_REVIVED,           1, 0, "s1",           NO_CPID,             "0 0", _("^K3You were revived by ^BG%s"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_AUTO_REVIVED,      0, 1, "f1",           NO_CPID,             "0 0", _("^K3You were automatically revived after %s second(s)"), "") \
--      MULTITEAM_CENTER(1, CENTER_ROUND_TEAM_WIN_, 4,          0, 0, "",             CPID_ROUND,          "0 0", _("^TC^TT^BG team wins the round"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_ROUND_PLAYER_WIN,            1, 0, "s1",           CPID_ROUND,          "0 0", _("^BG%s^BG wins the round"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_SELF,              0, 0, "",             NO_CPID,             "0 0", _("^K1You froze yourself"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_SPAWN_LATE,        0, 0, "",             NO_CPID,             "0 0", _("^K1Round already started, you spawn as frozen"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_INVASION_SUPERMONSTER,       1, 0, "s1",           NO_CPID,             "0 0", _("^K1A %s has arrived!"), "") \
 -      MSG_CENTER_NOTIF(1, CENTER_ITEM_BUFF_DROP,              0, 1, "item_buffname",                     CPID_ITEM, "item_centime 0", _("^BGYou dropped the %s^BG Buff!"), "") \
 -      MSG_CENTER_NOTIF(1, CENTER_ITEM_BUFF_GOT,               0, 1, "item_buffname",                     CPID_ITEM, "item_centime 0", _("^BGYou got the %s^BG Buff!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_ITEM_WEAPON_DONTHAVE,        0, 1, "item_wepname",                      CPID_ITEM, "item_centime 0", _("^BGYou do not have the ^F1%s"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_ITEM_WEAPON_DROP,            1, 1, "item_wepname item_wepammo",         CPID_ITEM, "item_centime 0", _("^BGYou dropped the ^F1%s^BG%s"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_ITEM_WEAPON_GOT,             0, 1, "item_wepname",                      CPID_ITEM, "item_centime 0", _("^BGYou got the ^F1%s"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_ITEM_WEAPON_NOAMMO,          0, 1, "item_wepname",                      CPID_ITEM, "item_centime 0", _("^BGYou don't have enough ammo for the ^F1%s"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_ITEM_WEAPON_PRIMORSEC,       0, 3, "item_wepname f2primsec f3primsec",  CPID_ITEM, "item_centime 0", _("^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_ITEM_WEAPON_UNAVAILABLE,     0, 1, "item_wepname",                      CPID_ITEM, "item_centime 0", _("^F1%s^BG is ^F4not available^BG on this map"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_JOIN_NOSPAWNS,               0, 0, "",              CPID_PREVENT_JOIN,     "0 0", _("^K1No spawnpoints available!\nHope your team can fix it..."), "") \
--      MSG_CENTER_NOTIF(1, CENTER_JOIN_PREVENT,                0, 0, "",              CPID_PREVENT_JOIN,     "0 0", _("^K1You may not join the game at this time.\nThe player limit reached maximum capacity."), "") \
--      MSG_CENTER_NOTIF(1, CENTER_KEEPAWAY_DROPPED,            1, 0, "s1",            CPID_KEEPAWAY,         "0 0", _("^BG%s^BG has dropped the ball!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_KEEPAWAY_PICKUP,             1, 0, "s1",            CPID_KEEPAWAY,         "0 0", _("^BG%s^BG has picked up the ball!"), "") \
 -      MSG_CENTER_NOTIF(1, CENTER_KEEPAWAY_PICKUP_SELF,        0, 0, "",              CPID_KEEPAWAY,         "0 0", _("^BGYou picked up the ball"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_KEEPAWAY_WARN,               0, 0, "",              CPID_KEEPAWAY_WARN,    "0 0", _("^BGKilling people while you don't have the ball gives no points!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_KEYHUNT_HELP,                0, 0, "",              CPID_KEYHUNT,          "0 0", _("^BGAll keys are in your team's hands!\nHelp the key carriers to meet!"), "") \
--      MULTITEAM_CENTER(1, CENTER_KEYHUNT_INTERFERE_, 4,       0, 0, "",              CPID_KEYHUNT,          "0 0", _("^BGAll keys are in ^TC^TT team^BG's hands!\nInterfere ^F4NOW^BG!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_KEYHUNT_MEET,                0, 0, "",              CPID_KEYHUNT,          "0 0", _("^BGAll keys are in your team's hands!\nMeet the other key carriers ^F4NOW^BG!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_KEYHUNT_ROUNDSTART,          0, 1, "",              CPID_KEYHUNT_OTHER,    "1 f1", _("^F4Round will start in ^COUNT"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_KEYHUNT_SCAN,                0, 1, "",              CPID_KEYHUNT_OTHER,    "f1 0", _("^BGScanning frequency range..."), "") \
--      MULTITEAM_CENTER(1, CENTER_KEYHUNT_START_, 4,           0, 0, "",              CPID_KEYHUNT,          "0 0", _("^BGYou are starting with the ^TC^TT Key"), "") \
-       MSG_CENTER_NOTIF(1, CENTER_KEYHUNT_WAIT,                0, 4, "missing_teams", CPID_KEYHUNT_OTHER,    "0 0", _("^BGWaiting for players to join...\nNeed active players for: %s"), "") \
-       MSG_CENTER_NOTIF(1, CENTER_MISSING_TEAMS,               0, 4, "missing_teams", CPID_MISSING_TEAMS,    "-1 0", _("^BGWaiting for players to join...\nNeed active players for: %s"), "") \
 -      MSG_CENTER_NOTIF(1, CENTER_KEYHUNT_WAIT,                0, 1, "missing_teams", CPID_KEYHUNT_OTHER,    "0 0", _("^BGWaiting for players to join...\nNeed active players for: %s"), "") \
 -      MSG_CENTER_NOTIF(1, CENTER_MISSING_TEAMS,               0, 1, "missing_teams", CPID_MISSING_TEAMS,    "-1 0", _("^BGWaiting for players to join...\nNeed active players for: %s"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_MISSING_PLAYERS,             0, 1, "f1",            CPID_MISSING_PLAYERS,  "-1 0", _("^BGWaiting for %s player(s) to join..."), "") \
--      MSG_CENTER_NOTIF(1, CENTER_MINSTA_FINDAMMO,             0, 0, "",              CPID_MINSTA_FINDAMMO,  "1 9", _("^F4^COUNT^BG left to find some ammo!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_MINSTA_FINDAMMO_FIRST,       0, 0, "",              CPID_MINSTA_FINDAMMO,  "1 10", _("^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"), _("^BGGet some ammo! ^F4^COUNT^BG left!")) \
--      MSG_CENTER_NOTIF(1, CENTER_MINSTA_LIVES_REMAINING,      0, 1, "f1",            NO_CPID,                           "0 0", _("^F2Extra lives remaining: ^K1%s"), "") \
 -      MSG_CENTER_NOTIF(1, CENTER_MINSTA_SECONDARY,            0, 0, "",              NO_CPID,                           "0 0", _("^BGSecondary fire inflicts no damage!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_MOTD,                        1, 0, "s1",            CPID_MOTD,             "-1 0", _("^BG%s"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_NIX_COUNTDOWN,               0, 2, "item_wepname",  CPID_NIX,              "1 f2", _("^F2^COUNT^BG until weapon change...\nNext weapon: ^F1%s"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_NIX_NEWWEAPON,               0, 1, "item_wepname",  CPID_NIX,              "0 0", _("^F2Active weapon: ^F1%s"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_NADE,                                0, 0, "",              NO_CPID,                   "0 0", _("^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"), "") \
-       MSG_CENTER_NOTIF(1, CENTER_OVERKILL_CHARGE,             0, 0, "",              CPID_OVERKILL,         "0 0", _("^BGYour weapon's charge is too low, release the attack button & wait for it to charge"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_OVERTIME_FRAG,               0, 0, "",              CPID_OVERTIME,         "0 0", _("^F2Now playing ^F4OVERTIME^F2!\nKeep fragging until we have a winner!"), _("^F2Now playing ^F4OVERTIME^F2!\nKeep scoring until we have a winner!")) \
--      MSG_CENTER_NOTIF(1, CENTER_OVERTIME_TIME,               0, 1, "f1time",        CPID_OVERTIME,         "0 0", _("^F2Now playing ^F4OVERTIME^F2!\n^BGAdded ^F4%s^BG to the game!"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_POWERDOWN_INVISIBILITY,      0, 0, "",              CPID_POWERUP,          "0 0", _("^F2Invisibility has worn off"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_POWERDOWN_SHIELD,            0, 0, "",              CPID_POWERUP,          "0 0", _("^F2Shield has worn off"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_POWERDOWN_SPEED,             0, 0, "",              CPID_POWERUP,          "0 0", _("^F2Speed has worn off"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_POWERDOWN_STRENGTH,          0, 0, "",              CPID_POWERUP,          "0 0", _("^F2Strength has worn off"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_POWERUP_INVISIBILITY,        0, 0, "",              CPID_POWERUP,          "0 0", _("^F2You are invisible"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_POWERUP_SHIELD,              0, 0, "",              CPID_POWERUP,          "0 0", _("^F2Shield surrounds you"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_POWERUP_SPEED,               0, 0, "",              CPID_POWERUP,          "0 0", _("^F2You are on speed"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_POWERUP_STRENGTH,            0, 0, "",              CPID_POWERUP,          "0 0", _("^F2Strength infuses your weapons with devastating power"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_RACE_FINISHLAP,              0, 0, "",              CPID_RACE_FINISHLAP,   "0 0", _("^F2The race is over, finish your lap!"), "") \
-       MSG_CENTER_NOTIF(1, CENTER_SECONDARY_NODAMAGE,         0, 0, "",              NO_CPID,               "0 0", _("^BGSecondary fire inflicts no damage!"), "") \
 -      MSG_CENTER_NOTIF(1, CENTER_SEQUENCE_COMPLETED,          0, 0, "",              NO_CPID,               "0 0", _("^BGSequence completed!"), "") \
 -      MSG_CENTER_NOTIF(1, CENTER_SEQUENCE_COUNTER,            0, 0, "",              NO_CPID,               "0 0", _("^BGThere are more to go..."), "") \
 -      MSG_CENTER_NOTIF(1, CENTER_SEQUENCE_COUNTER_FEWMORE,    0, 1, "f1",            NO_CPID,               "0 0", _("^BGOnly %s^BG more to go..."), "") \
--      MSG_CENTER_NOTIF(1, CENTER_SUPERWEAPON_BROKEN,          0, 0, "",              CPID_POWERUP,          "0 0", _("^F2Superweapons have broken down"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_SUPERWEAPON_LOST,            0, 0, "",              CPID_POWERUP,          "0 0", _("^F2Superweapons have been lost"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_SUPERWEAPON_PICKUP,          0, 0, "",              CPID_POWERUP,          "0 0", _("^F2You now have a superweapon"), "") \
--      MULTITEAM_CENTER(1, CENTER_TEAMCHANGE_, 4,              0, 1, "",              CPID_TEAMCHANGE,       "1 f1", _("^K1Changing to ^TC^TT^K1 in ^COUNT"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_TEAMCHANGE_AUTO,             0, 1, "",              CPID_TEAMCHANGE,       "1 f1", _("^K1Changing team in ^COUNT"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_TEAMCHANGE_SPECTATE,         0, 1, "",              CPID_TEAMCHANGE,       "1 f1", _("^K1Spectating in ^COUNT"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_TEAMCHANGE_SUICIDE,          0, 1, "",              CPID_TEAMCHANGE,       "1 f1", _("^K1Suicide in ^COUNT"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_TIMEOUT_BEGINNING,           0, 1, "",              CPID_TIMEOUT,          "1 f1", _("^F4Timeout begins in ^COUNT"), "") \
--      MSG_CENTER_NOTIF(1, CENTER_TIMEOUT_ENDING,              0, 1, "",              CPID_TIMEOUT,          "1 f1", _("^F4Timeout ends in ^COUNT"), "")
++    MSG_CENTER_NOTIF(1, CENTER_ALONE,                       0, 0, "",             NO_CPID,             "0 0", _("^F4You are now alone!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_ASSAULT_ATTACKING,           0, 0, "",             CPID_ASSAULT_ROLE,   "0 0", _("^BGYou are attacking!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_ASSAULT_DEFENDING,           0, 0, "",             CPID_ASSAULT_ROLE,   "0 0", _("^BGYou are defending!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_COUNTDOWN_BEGIN,             0, 0, "",             CPID_ROUND,          "2 0", _("^F4Begin!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_COUNTDOWN_GAMESTART,         0, 1, "",             CPID_ROUND,          "1 f1", _("^F4Game starts in ^COUNT"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_COUNTDOWN_ROUNDSTART,        0, 1, "",             CPID_ROUND,          "1 f1", _("^F4Round starts in ^COUNT"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_COUNTDOWN_ROUNDSTOP,         0, 0, "",             CPID_ROUND,          "2 0", _("^F4Round cannot start"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_ROUND_TIED,                  0, 0, "",             CPID_ROUND,          "0 0", _("^BGRound tied"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_ROUND_OVER,                  0, 0, "",             CPID_ROUND,          "0 0", _("^BGRound over, there's no winner"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_CAMPCHECK,                   0, 0, "",             CPID_CAMPCHECK,      "0 0", _("^F2Don't camp!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_CTF_CAPTURESHIELD_FREE,      0, 0, "",             CPID_CTF_CAPSHIELD,  "0 0", _("^BGYou are now free.\n^BGFeel free to ^F2try to capture^BG the flag again\n^BGif you think you will succeed."), "") \
++    MSG_CENTER_NOTIF(1, CENTER_CTF_CAPTURESHIELD_SHIELDED,  0, 0, "",             CPID_CTF_CAPSHIELD,  "0 0", _("^BGYou are now ^F1shielded^BG from the flag\n^BGfor ^F2too many unsuccessful attempts^BG to capture.\n^BGMake some defensive scores before trying again."), "") \
++    MULTITEAM_CENTER(1, CENTER_CTF_CAPTURE_, 2,             0, 0, "",             CPID_CTF_LOWPRIO,    "0 0", _("^BGYou captured the ^TC^TT^BG flag!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_CTF_FLAG_THROW_PUNISH,       0, 1, "f1secs",       CPID_CTF_LOWPRIO,    "0 0", _("^BGToo many flag throws! Throwing disabled for %s."), "") \
++    MULTITEAM_CENTER(1, CENTER_CTF_PASS_OTHER_, 2,          2, 0, "s1 s2",        CPID_CTF_PASS,       "0 0", _("^BG%s^BG passed the ^TC^TT^BG flag to %s"), "") \
++    MULTITEAM_CENTER(1, CENTER_CTF_PASS_RECEIVED_, 2,       1, 0, "s1",           CPID_CTF_PASS,       "0 0", _("^BGYou received the ^TC^TT^BG flag from %s"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_CTF_PASS_REQUESTED,          1, 0, "s1 pass_key",  CPID_CTF_PASS,       "0 0", _("^BG%s^BG requests you to pass the flag%s"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_CTF_PASS_REQUESTING,         1, 0, "s1",           CPID_CTF_PASS,       "0 0", _("^BGRequesting %s^BG to pass you the flag"), "") \
++    MULTITEAM_CENTER(1, CENTER_CTF_PASS_SENT_, 2,           1, 0, "s1",           CPID_CTF_PASS,       "0 0", _("^BGYou passed the ^TC^TT^BG flag to %s"), "") \
++    MULTITEAM_CENTER(1, CENTER_CTF_PICKUP_, 2,              0, 0, "",             CPID_CTF_LOWPRIO,    "0 0", _("^BGYou got the ^TC^TT^BG flag!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_CTF_PICKUP_ENEMY,            1, 0, "s1",           CPID_CTF_LOWPRIO,    "0 0", _("^BGThe %senemy^BG got your flag! Retrieve it!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_CTF_PICKUP_ENEMY_VERBOSE,    2, 0, "s1 s2 s1",     CPID_CTF_LOWPRIO,    "0 0", _("^BGThe %senemy (^BG%s%s)^BG got your flag! Retrieve it!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_CTF_PICKUP_TEAM,             1, 0, "s1",           CPID_CTF_LOWPRIO,    "0 0", _("^BGYour %steam mate^BG got the flag! Protect them!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_CTF_PICKUP_TEAM_VERBOSE,     2, 0, "s1 s2 s1",     CPID_CTF_LOWPRIO,    "0 0", _("^BGYour %steam mate (^BG%s%s)^BG got the flag! Protect them!"), "") \
++    MULTITEAM_CENTER(1, CENTER_CTF_RETURN_, 2,              0, 0, "",             CPID_CTF_LOWPRIO,    "0 0", _("^BGYou returned the ^TC^TT^BG flag!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_CTF_STALEMATE_CARRIER,       0, 0, "",             CPID_STALEMATE,      "0 0", _("^BGStalemate! Enemies can now see you on radar!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_CTF_STALEMATE_OTHER,         0, 0, "",             CPID_STALEMATE,      "0 0", _("^BGStalemate! Flag carriers can now be seen by enemies on radar!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_FRAG,                 1, 1, "spree_cen s1",             NO_CPID, "0 0", _("^K3%sYou fragged ^BG%s"), _("^K3%sYou scored against ^BG%s")) \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_FRAGGED,              1, 1, "spree_cen s1",             NO_CPID, "0 0", _("^K1%sYou were fragged by ^BG%s"), _("^K1%sYou were scored against by ^BG%s")) \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_FRAGGED_VERBOSE,      1, 4, "spree_cen s1 frag_stats",  NO_CPID, "0 0", _("^K1%sYou were fragged by ^BG%s^BG%s"), _("^K1%sYou were scored against by ^BG%s^BG%s")) \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_FRAG_VERBOSE,         1, 2, "spree_cen s1 frag_ping",   NO_CPID, "0 0", _("^K3%sYou fragged ^BG%s^BG%s"), _("^K3%sYou scored against ^BG%s^BG%s")) \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_TYPEFRAG,             1, 1, "spree_cen s1",             NO_CPID, "0 0", _("^K1%sYou typefragged ^BG%s"), _("^K1%sYou scored against ^BG%s^K1 while they were typing")) \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_TYPEFRAGGED,          1, 1, "spree_cen s1",             NO_CPID, "0 0", _("^K1%sYou were typefragged by ^BG%s"), _("^K1%sYou were scored against by ^BG%s^K1 while typing!")) \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_TYPEFRAGGED_VERBOSE,  1, 4, "spree_cen s1 frag_stats",  NO_CPID, "0 0", _("^K1%sYou were typefragged by ^BG%s^BG%s"), _("^K1%sYou were scored against by ^BG%s^K1 while typing^BG%s")) \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_TYPEFRAG_VERBOSE,     1, 2, "spree_cen s1 frag_ping",   NO_CPID, "0 0", _("^K1%sYou typefragged ^BG%s^BG%s"), _("^K1%sYou scored against ^BG%s^K1 while they were typing^BG%s")) \
++    MSG_CENTER_NOTIF(1, CENTER_NADE_THROW,                  0, 0, "",             CPID_NADES,          "0 0", _("^BGPress ^F2DROPWEAPON^BG again to toss the nade!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_NADE_BONUS,                  0, 0, "",             CPID_NADES,          "0 0", _("^F2You got a ^K1BONUS GRENADE^F2!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_AUTOTEAMCHANGE,   0, 1, "death_team",   NO_CPID,             "0 0", _("^BGYou have been moved into a different team\nYou are now on: %s"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_BETRAYAL,         0, 0, "",             NO_CPID,             "0 0", _("^K1Don't shoot your team mates!"), _("^K1Don't go against your team mates!")) \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_CAMP,             0, 0, "",             NO_CPID,             "0 0", _("^K1Die camper!"), _("^K1Reconsider your tactics, camper!")) \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_CHEAT,            0, 0, "",             NO_CPID,             "0 0", _("^K1You unfairly eliminated yourself!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_CUSTOM,           2, 0, "s2",           NO_CPID,             "0 0", _("^K1You were %s"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_DROWN,            0, 0, "",             NO_CPID,             "0 0", _("^K1You couldn't catch your breath!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_FALL,             0, 0, "",             NO_CPID,             "0 0", _("^K1You hit the ground with a crunch!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_FIRE,             0, 0, "",             NO_CPID,             "0 0", _("^K1You got a little bit too crispy!"), _("^K1You felt a little too hot!")) \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_GENERIC,          0, 0, "",             NO_CPID,             "0 0", _("^K1You killed your own dumb self!"), _("^K1You need to be more careful!")) \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_LAVA,             0, 0, "",             NO_CPID,             "0 0", _("^K1You couldn't stand the heat!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_MONSTER,          0, 0, "",             NO_CPID,             "0 0", _("^K1You were killed by a monster!"), _("^K1You need to watch out for monsters!")) \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_NADE,             0, 0, "",             NO_CPID,             "0 0", _("^K1You forgot to put the pin back in!"), _("^K1Tastes like chicken!")) \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_NADE_NAPALM,      0, 0, "",             NO_CPID,             "0 0", _("^K1Hanging around a napalm explosion is bad!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_NADE_ICE_FREEZE,  0, 0, "",             NO_CPID,             "0 0", _("^K1You got a little bit too cold!"), _("^K1You felt a little chilly!")) \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_NADE_HEAL,        0, 0, "",             NO_CPID,             "0 0", _("^K1Your Healing Nade is a bit defective"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_NOAMMO,           0, 0, "",             NO_CPID,             "0 0", _("^K1You were killed for running out of ammo..."), _("^K1You are respawning for running out of ammo...")) \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_ROT,              0, 0, "",             NO_CPID,             "0 0", _("^K1You grew too old without taking your medicine"), _("^K1You need to preserve your health")) \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_SHOOTING_STAR,    0, 0, "",             NO_CPID,             "0 0", _("^K1You became a shooting star!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_SLIME,            0, 0, "",             NO_CPID,             "0 0", _("^K1You melted away in slime!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_SUICIDE,          0, 0, "",             NO_CPID,             "0 0", _("^K1You committed suicide!"), _("^K1You ended it all!")) \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_SWAMP,            0, 0, "",             NO_CPID,             "0 0", _("^K1You got stuck in a swamp!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_TEAMCHANGE,       0, 1, "death_team",   NO_CPID,             "0 0", _("^BGYou are now on: %s"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_TOUCHEXPLODE,     0, 0, "",             NO_CPID,             "0 0", _("^K1You died in an accident!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_TURRET,           0, 0, "",             NO_CPID,             "0 0", _("^K1You were fragged by a turret!"), _("^K1You had an unfortunate run in with a turret!")) \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_TURRET_EWHEEL,    0, 0, "",             NO_CPID,             "0 0", _("^K1You were fragged by an eWheel turret!"), _("^K1You had an unfortunate run in with an eWheel turret!")) \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_TURRET_WALK,      0, 0, "",             NO_CPID,             "0 0", _("^K1You were fragged by a Walker turret!"), _("^K1You had an unfortunate run in with a Walker turret!")) \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_BUMB_DEATH,    0, 0, "",             NO_CPID,             "0 0", _("^K1You got caught in the blast of a Bumblebee explosion!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_CRUSH,         0, 0, "",             NO_CPID,             "0 0", _("^K1You were crushed by a vehicle!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_RAPT_BOMB,     0, 0, "",             NO_CPID,             "0 0", _("^K1You were caught in a Raptor cluster bomb!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_RAPT_DEATH,    0, 0, "",             NO_CPID,             "0 0", _("^K1You got caught in the blast of a Raptor explosion!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_SPID_DEATH,    0, 0, "",             NO_CPID,             "0 0", _("^K1You got caught in the blast of a Spiderbot explosion!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_SPID_ROCKET,   0, 0, "",             NO_CPID,             "0 0", _("^K1You were blasted to bits by a Spiderbot rocket!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_WAKI_DEATH,    0, 0, "",             NO_CPID,             "0 0", _("^K1You got caught in the blast of a Racer explosion!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_WAKI_ROCKET,   0, 0, "",             NO_CPID,             "0 0", _("^K1You couldn't find shelter from a Racer rocket!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VOID,             0, 0, "",             NO_CPID,             "0 0", _("^K1Watch your step!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_TEAMKILL_FRAG,         1, 0, "s1",           NO_CPID,             "0 0", _("^K1Moron! You fragged ^BG%s^K1, a team mate!"), _("^K1Moron! You went against ^BG%s^K1, a team mate!")) \
++    MSG_CENTER_NOTIF(1, CENTER_DEATH_TEAMKILL_FRAGGED,      1, 0, "s1",           NO_CPID,             "0 0", _("^K1You were fragged by ^BG%s^K1, a team mate"), _("^K1You were scored against by ^BG%s^K1, a team mate")) \
++    MSG_CENTER_NOTIF(1, CENTER_DISCONNECT_IDLING,           0, 1, "",             CPID_IDLING,         "1 f1", _("^K1Stop idling!\n^BGDisconnecting in ^COUNT..."), "") \
++    MSG_CENTER_NOTIF(1, CENTER_DOOR_LOCKED_NEED,            0, 0, "",             NO_CPID,             "0 0", _("^BGYou need %s^BG!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_DOOR_LOCKED_ALSONEED,        0, 0, "",             NO_CPID,             "0 0", _("^BGYou also need %s^BG!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_DOOR_UNLOCKED,               0, 0, "",             NO_CPID,             "0 0", _("^BGDoor unlocked!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_EXTRALIVES,                  0, 0, "",             NO_CPID,             "0 0", _("^F2You picked up some extra lives"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_FREEZE,            1, 0, "s1",           NO_CPID,             "0 0", _("^K3You froze ^BG%s"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_FROZEN,            1, 0, "s1",           NO_CPID,             "0 0", _("^K1You were frozen by ^BG%s"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_REVIVE,            1, 0, "s1",           NO_CPID,             "0 0", _("^K3You revived ^BG%s"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_REVIVE_SELF,       0, 0, "",             NO_CPID,             "0 0", _("^K3You revived yourself"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_REVIVED,           1, 0, "s1",           NO_CPID,             "0 0", _("^K3You were revived by ^BG%s"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_AUTO_REVIVED,      0, 1, "f1",           NO_CPID,             "0 0", _("^K3You were automatically revived after %s second(s)"), "") \
++    MULTITEAM_CENTER(1, CENTER_ROUND_TEAM_WIN_, 4,          0, 0, "",             CPID_ROUND,          "0 0", _("^TC^TT^BG team wins the round"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_ROUND_PLAYER_WIN,            1, 0, "s1",           CPID_ROUND,          "0 0", _("^BG%s^BG wins the round"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_SELF,              0, 0, "",             NO_CPID,             "0 0", _("^K1You froze yourself"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_SPAWN_LATE,        0, 0, "",             NO_CPID,             "0 0", _("^K1Round already started, you spawn as frozen"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_INVASION_SUPERMONSTER,       1, 0, "s1",           NO_CPID,             "0 0", _("^K1A %s has arrived!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_ITEM_BUFF_DROP,              0, 1, "item_buffname",                     CPID_ITEM, "item_centime 0", _("^BGYou dropped the %s^BG Buff!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_ITEM_BUFF_GOT,               0, 1, "item_buffname",                     CPID_ITEM, "item_centime 0", _("^BGYou got the %s^BG Buff!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_ITEM_WEAPON_DONTHAVE,        0, 1, "item_wepname",                      CPID_ITEM, "item_centime 0", _("^BGYou do not have the ^F1%s"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_ITEM_WEAPON_DROP,            1, 1, "item_wepname item_wepammo",         CPID_ITEM, "item_centime 0", _("^BGYou dropped the ^F1%s^BG%s"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_ITEM_WEAPON_GOT,             0, 1, "item_wepname",                      CPID_ITEM, "item_centime 0", _("^BGYou got the ^F1%s"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_ITEM_WEAPON_NOAMMO,          0, 1, "item_wepname",                      CPID_ITEM, "item_centime 0", _("^BGYou don't have enough ammo for the ^F1%s"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_ITEM_WEAPON_PRIMORSEC,       0, 3, "item_wepname f2primsec f3primsec",  CPID_ITEM, "item_centime 0", _("^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_ITEM_WEAPON_UNAVAILABLE,     0, 1, "item_wepname",                      CPID_ITEM, "item_centime 0", _("^F1%s^BG is ^F4not available^BG on this map"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_JOIN_NOSPAWNS,               0, 0, "",              CPID_PREVENT_JOIN,     "0 0", _("^K1No spawnpoints available!\nHope your team can fix it..."), "") \
++    MSG_CENTER_NOTIF(1, CENTER_JOIN_PREVENT,                0, 0, "",              CPID_PREVENT_JOIN,     "0 0", _("^K1You may not join the game at this time.\nThe player limit reached maximum capacity."), "") \
++    MSG_CENTER_NOTIF(1, CENTER_KEEPAWAY_DROPPED,            1, 0, "s1",            CPID_KEEPAWAY,         "0 0", _("^BG%s^BG has dropped the ball!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_KEEPAWAY_PICKUP,             1, 0, "s1",            CPID_KEEPAWAY,         "0 0", _("^BG%s^BG has picked up the ball!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_KEEPAWAY_PICKUP_SELF,        0, 0, "",              CPID_KEEPAWAY,         "0 0", _("^BGYou picked up the ball"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_KEEPAWAY_WARN,               0, 0, "",              CPID_KEEPAWAY_WARN,    "0 0", _("^BGKilling people while you don't have the ball gives no points!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_KEYHUNT_HELP,                0, 0, "",              CPID_KEYHUNT,          "0 0", _("^BGAll keys are in your team's hands!\nHelp the key carriers to meet!"), "") \
++    MULTITEAM_CENTER(1, CENTER_KEYHUNT_INTERFERE_, 4,       0, 0, "",              CPID_KEYHUNT,          "0 0", _("^BGAll keys are in ^TC^TT team^BG's hands!\nInterfere ^F4NOW^BG!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_KEYHUNT_MEET,                0, 0, "",              CPID_KEYHUNT,          "0 0", _("^BGAll keys are in your team's hands!\nMeet the other key carriers ^F4NOW^BG!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_KEYHUNT_ROUNDSTART,          0, 1, "",              CPID_KEYHUNT_OTHER,    "1 f1", _("^F4Round will start in ^COUNT"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_KEYHUNT_SCAN,                0, 1, "",              CPID_KEYHUNT_OTHER,    "f1 0", _("^BGScanning frequency range..."), "") \
++    MULTITEAM_CENTER(1, CENTER_KEYHUNT_START_, 4,           0, 0, "",              CPID_KEYHUNT,          "0 0", _("^BGYou are starting with the ^TC^TT Key"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_KEYHUNT_WAIT,                0, 1, "missing_teams", CPID_KEYHUNT_OTHER,    "0 0", _("^BGWaiting for players to join...\nNeed active players for: %s"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_MISSING_TEAMS,               0, 1, "missing_teams", CPID_MISSING_TEAMS,    "-1 0", _("^BGWaiting for players to join...\nNeed active players for: %s"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_MISSING_PLAYERS,             0, 1, "f1",            CPID_MISSING_PLAYERS,  "-1 0", _("^BGWaiting for %s player(s) to join..."), "") \
++    MSG_CENTER_NOTIF(1, CENTER_MINSTA_FINDAMMO,             0, 0, "",              CPID_MINSTA_FINDAMMO,  "1 9", _("^F4^COUNT^BG left to find some ammo!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_MINSTA_FINDAMMO_FIRST,       0, 0, "",              CPID_MINSTA_FINDAMMO,  "1 10", _("^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"), _("^BGGet some ammo! ^F4^COUNT^BG left!")) \
++    MSG_CENTER_NOTIF(1, CENTER_MINSTA_LIVES_REMAINING,      0, 1, "f1",            NO_CPID,               "0 0", _("^F2Extra lives remaining: ^K1%s"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_MOTD,                        1, 0, "s1",            CPID_MOTD,             "-1 0", _("^BG%s"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_NIX_COUNTDOWN,               0, 2, "item_wepname",  CPID_NIX,              "1 f2", _("^F2^COUNT^BG until weapon change...\nNext weapon: ^F1%s"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_NIX_NEWWEAPON,               0, 1, "item_wepname",  CPID_NIX,              "0 0", _("^F2Active weapon: ^F1%s"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_NADE,                        0, 0, "",              NO_CPID,               "0 0", _("^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_OVERKILL_CHARGE,             0, 0, "",              CPID_OVERKILL,         "0 0", _("^BGYour weapon's charge is too low, release the attack button & wait for it to charge"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_OVERTIME_FRAG,               0, 0, "",              CPID_OVERTIME,         "0 0", _("^F2Now playing ^F4OVERTIME^F2!\nKeep fragging until we have a winner!"), _("^F2Now playing ^F4OVERTIME^F2!\nKeep scoring until we have a winner!")) \
++    MSG_CENTER_NOTIF(1, CENTER_OVERTIME_TIME,               0, 1, "f1time",        CPID_OVERTIME,         "0 0", _("^F2Now playing ^F4OVERTIME^F2!\n^BGAdded ^F4%s^BG to the game!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_POWERDOWN_INVISIBILITY,      0, 0, "",              CPID_POWERUP,          "0 0", _("^F2Invisibility has worn off"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_POWERDOWN_SHIELD,            0, 0, "",              CPID_POWERUP,          "0 0", _("^F2Shield has worn off"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_POWERDOWN_SPEED,             0, 0, "",              CPID_POWERUP,          "0 0", _("^F2Speed has worn off"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_POWERDOWN_STRENGTH,          0, 0, "",              CPID_POWERUP,          "0 0", _("^F2Strength has worn off"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_POWERUP_INVISIBILITY,        0, 0, "",              CPID_POWERUP,          "0 0", _("^F2You are invisible"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_POWERUP_SHIELD,              0, 0, "",              CPID_POWERUP,          "0 0", _("^F2Shield surrounds you"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_POWERUP_SPEED,               0, 0, "",              CPID_POWERUP,          "0 0", _("^F2You are on speed"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_POWERUP_STRENGTH,            0, 0, "",              CPID_POWERUP,          "0 0", _("^F2Strength infuses your weapons with devastating power"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_RACE_FINISHLAP,              0, 0, "",              CPID_RACE_FINISHLAP,   "0 0", _("^F2The race is over, finish your lap!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_SECONDARY_NODAMAGE,          0, 0, "",              NO_CPID,               "0 0", _("^BGSecondary fire inflicts no damage!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_SEQUENCE_COMPLETED,          0, 0, "",              NO_CPID,               "0 0", _("^BGSequence completed!"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_SEQUENCE_COUNTER,            0, 0, "",              NO_CPID,               "0 0", _("^BGThere are more to go..."), "") \
++    MSG_CENTER_NOTIF(1, CENTER_SEQUENCE_COUNTER_FEWMORE,    0, 1, "f1",            NO_CPID,               "0 0", _("^BGOnly %s^BG more to go..."), "") \
++    MSG_CENTER_NOTIF(1, CENTER_SUPERWEAPON_BROKEN,          0, 0, "",              CPID_POWERUP,          "0 0", _("^F2Superweapons have broken down"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_SUPERWEAPON_LOST,            0, 0, "",              CPID_POWERUP,          "0 0", _("^F2Superweapons have been lost"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_SUPERWEAPON_PICKUP,          0, 0, "",              CPID_POWERUP,          "0 0", _("^F2You now have a superweapon"), "") \
++    MULTITEAM_CENTER(1, CENTER_TEAMCHANGE_, 4,              0, 1, "",              CPID_TEAMCHANGE,       "1 f1", _("^K1Changing to ^TC^TT^K1 in ^COUNT"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_TEAMCHANGE_AUTO,             0, 1, "",              CPID_TEAMCHANGE,       "1 f1", _("^K1Changing team in ^COUNT"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_TEAMCHANGE_SPECTATE,         0, 1, "",              CPID_TEAMCHANGE,       "1 f1", _("^K1Spectating in ^COUNT"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_TEAMCHANGE_SUICIDE,          0, 1, "",              CPID_TEAMCHANGE,       "1 f1", _("^K1Suicide in ^COUNT"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_TIMEOUT_BEGINNING,           0, 1, "",              CPID_TIMEOUT,          "1 f1", _("^F4Timeout begins in ^COUNT"), "") \
++    MSG_CENTER_NOTIF(1, CENTER_TIMEOUT_ENDING,              0, 1, "",              CPID_TIMEOUT,          "1 f1", _("^F4Timeout ends in ^COUNT"), "")
  
  #define MULTITEAM_MULTI2(default,prefix,anncepre,infopre,centerpre) \
--      MSG_MULTI_NOTIF(default, prefix##RED, anncepre##RED, infopre##RED, centerpre##RED) \
--      MSG_MULTI_NOTIF(default, prefix##BLUE, anncepre##BLUE, infopre##BLUE, centerpre##BLUE)
++    MSG_MULTI_NOTIF(default, prefix##RED, anncepre##RED, infopre##RED, centerpre##RED) \
++    MSG_MULTI_NOTIF(default, prefix##BLUE, anncepre##BLUE, infopre##BLUE, centerpre##BLUE)
  #define MULTITEAM_MULTI3(default,prefix,anncepre,infopre,centerpre) \
--      MSG_MULTI_NOTIF(default, prefix##RED, anncepre##RED, infopre##RED, centerpre##RED) \
--      MSG_MULTI_NOTIF(default, prefix##BLUE, anncepre##BLUE, infopre##BLUE, centerpre##BLUE) \
--      MSG_MULTI_NOTIF(default, prefix##YELLOW, anncepre##YELLOW, infopre##YELLOW, centerpre##YELLOW)
++    MSG_MULTI_NOTIF(default, prefix##RED, anncepre##RED, infopre##RED, centerpre##RED) \
++    MSG_MULTI_NOTIF(default, prefix##BLUE, anncepre##BLUE, infopre##BLUE, centerpre##BLUE) \
++    MSG_MULTI_NOTIF(default, prefix##YELLOW, anncepre##YELLOW, infopre##YELLOW, centerpre##YELLOW)
  #define MULTITEAM_MULTI4(default,prefix,anncepre,infopre,centerpre) \
--      MSG_MULTI_NOTIF(default, prefix##RED, anncepre##RED, infopre##RED, centerpre##RED) \
--      MSG_MULTI_NOTIF(default, prefix##BLUE, anncepre##BLUE, infopre##BLUE, centerpre##BLUE) \
--      MSG_MULTI_NOTIF(default, prefix##YELLOW, anncepre##YELLOW, infopre##YELLOW, centerpre##YELLOW) \
--      MSG_MULTI_NOTIF(default, prefix##PINK, anncepre##PINK, infopre##PINK, centerpre##PINK)
++    MSG_MULTI_NOTIF(default, prefix##RED, anncepre##RED, infopre##RED, centerpre##RED) \
++    MSG_MULTI_NOTIF(default, prefix##BLUE, anncepre##BLUE, infopre##BLUE, centerpre##BLUE) \
++    MSG_MULTI_NOTIF(default, prefix##YELLOW, anncepre##YELLOW, infopre##YELLOW, centerpre##YELLOW) \
++    MSG_MULTI_NOTIF(default, prefix##PINK, anncepre##PINK, infopre##PINK, centerpre##PINK)
  #define MULTITEAM_MULTI(default,prefix,teams,anncepre,infopre,centerpre) \
--      MULTITEAM_MULTI##teams(default,prefix,anncepre,infopre,centerpre)
++    MULTITEAM_MULTI##teams(default,prefix,anncepre,infopre,centerpre)
  
  #define MSG_MULTI_NOTIFICATIONS \
--      MSG_MULTI_NOTIF(1, DEATH_MURDER_CHEAT,                   NO_MSG,        INFO_DEATH_MURDER_CHEAT,                   NO_MSG) \
--      MSG_MULTI_NOTIF(1, DEATH_MURDER_DROWN,                   NO_MSG,        INFO_DEATH_MURDER_DROWN,                   NO_MSG) \
--      MSG_MULTI_NOTIF(1, DEATH_MURDER_FALL,                    NO_MSG,        INFO_DEATH_MURDER_FALL,                    NO_MSG) \
--      MSG_MULTI_NOTIF(1, DEATH_MURDER_FIRE,                    NO_MSG,        INFO_DEATH_MURDER_FIRE,                    NO_MSG) \
--      MSG_MULTI_NOTIF(1, DEATH_MURDER_LAVA,                    NO_MSG,        INFO_DEATH_MURDER_LAVA,                    NO_MSG) \
--      MSG_MULTI_NOTIF(1, DEATH_MURDER_MONSTER,                 NO_MSG,        INFO_DEATH_MURDER_MONSTER,                 CENTER_DEATH_SELF_MONSTER) \
--      MSG_MULTI_NOTIF(1, DEATH_MURDER_NADE,                    NO_MSG,        INFO_DEATH_MURDER_NADE,                    NO_MSG) \
 -      MSG_MULTI_NOTIF(1, DEATH_MURDER_NADE_NAPALM,             NO_MSG,        INFO_DEATH_MURDER_NADE_NAPALM,             NO_MSG) \
 -      MSG_MULTI_NOTIF(1, DEATH_MURDER_NADE_ICE,                NO_MSG,        INFO_DEATH_MURDER_NADE_ICE,                NO_MSG) \
 -      MSG_MULTI_NOTIF(1, DEATH_MURDER_NADE_ICE_FREEZE,         NO_MSG,        INFO_DEATH_MURDER_NADE_ICE_FREEZE,         NO_MSG) \
 -      MSG_MULTI_NOTIF(1, DEATH_MURDER_NADE_HEAL,               NO_MSG,        INFO_DEATH_MURDER_NADE_HEAL,               NO_MSG) \
--      MSG_MULTI_NOTIF(1, DEATH_MURDER_SHOOTING_STAR,           NO_MSG,        INFO_DEATH_MURDER_SHOOTING_STAR,           NO_MSG) \
--      MSG_MULTI_NOTIF(1, DEATH_MURDER_SLIME,                   NO_MSG,        INFO_DEATH_MURDER_SLIME,                   NO_MSG) \
--      MSG_MULTI_NOTIF(1, DEATH_MURDER_SWAMP,                   NO_MSG,        INFO_DEATH_MURDER_SWAMP,                   NO_MSG) \
--      MSG_MULTI_NOTIF(1, DEATH_MURDER_TELEFRAG,                NO_MSG,        INFO_DEATH_MURDER_TELEFRAG,                NO_MSG) \
--      MSG_MULTI_NOTIF(1, DEATH_MURDER_TOUCHEXPLODE,            NO_MSG,        INFO_DEATH_MURDER_TOUCHEXPLODE,            NO_MSG) \
--      MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_BUMB_DEATH,           NO_MSG,        INFO_DEATH_MURDER_VH_BUMB_DEATH,           NO_MSG) \
--      MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_BUMB_GUN,             NO_MSG,        INFO_DEATH_MURDER_VH_BUMB_GUN,             NO_MSG) \
--      MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_CRUSH,                NO_MSG,        INFO_DEATH_MURDER_VH_CRUSH,                NO_MSG) \
--      MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_RAPT_BOMB,            NO_MSG,        INFO_DEATH_MURDER_VH_RAPT_BOMB,            NO_MSG) \
--      MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_RAPT_CANNON,          NO_MSG,        INFO_DEATH_MURDER_VH_RAPT_CANNON,          NO_MSG) \
--      MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_RAPT_DEATH,           NO_MSG,        INFO_DEATH_MURDER_VH_RAPT_DEATH,           NO_MSG) \
--      MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_SPID_DEATH,           NO_MSG,        INFO_DEATH_MURDER_VH_SPID_DEATH,           NO_MSG) \
--      MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_SPID_MINIGUN,         NO_MSG,        INFO_DEATH_MURDER_VH_SPID_MINIGUN,         NO_MSG) \
--      MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_SPID_ROCKET,          NO_MSG,        INFO_DEATH_MURDER_VH_SPID_ROCKET,          NO_MSG) \
--      MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_WAKI_DEATH,           NO_MSG,        INFO_DEATH_MURDER_VH_WAKI_DEATH,           NO_MSG) \
--      MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_WAKI_GUN,             NO_MSG,        INFO_DEATH_MURDER_VH_WAKI_GUN,             NO_MSG) \
--      MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_WAKI_ROCKET,          NO_MSG,        INFO_DEATH_MURDER_VH_WAKI_ROCKET,          NO_MSG) \
 -      MSG_MULTI_NOTIF(1, DEATH_MURDER_VENGEANCE,               NO_MSG,        INFO_DEATH_MURDER_VENGEANCE,               NO_MSG) \
--      MSG_MULTI_NOTIF(1, DEATH_MURDER_VOID,                    NO_MSG,        INFO_DEATH_MURDER_VOID,                    NO_MSG) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_AUTOTEAMCHANGE,            NO_MSG,        INFO_DEATH_SELF_AUTOTEAMCHANGE,            CENTER_DEATH_SELF_AUTOTEAMCHANGE) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_BETRAYAL,                  NO_MSG,        INFO_DEATH_SELF_BETRAYAL,                  CENTER_DEATH_SELF_BETRAYAL) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_CAMP,                      NO_MSG,        INFO_DEATH_SELF_CAMP,                      CENTER_DEATH_SELF_CAMP) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_CHEAT,                     NO_MSG,        INFO_DEATH_SELF_CHEAT,                     CENTER_DEATH_SELF_CHEAT) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_CUSTOM,                    NO_MSG,        INFO_DEATH_SELF_GENERIC,                   CENTER_DEATH_SELF_CUSTOM) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_DROWN,                     NO_MSG,        INFO_DEATH_SELF_DROWN,                     CENTER_DEATH_SELF_DROWN) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_FALL,                      NO_MSG,        INFO_DEATH_SELF_FALL,                      CENTER_DEATH_SELF_FALL) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_FIRE,                      NO_MSG,        INFO_DEATH_SELF_FIRE,                      CENTER_DEATH_SELF_FIRE) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_GENERIC,                   NO_MSG,        INFO_DEATH_SELF_GENERIC,                   CENTER_DEATH_SELF_GENERIC) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_LAVA,                      NO_MSG,        INFO_DEATH_SELF_LAVA,                      CENTER_DEATH_SELF_LAVA) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_MON_MAGE,                                  NO_MSG,        INFO_DEATH_SELF_MON_MAGE,                                  CENTER_DEATH_SELF_MONSTER) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_MON_SHAMBLER_CLAW,                 NO_MSG,        INFO_DEATH_SELF_MON_SHAMBLER_CLAW,                 CENTER_DEATH_SELF_MONSTER) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_MON_SHAMBLER_SMASH,                NO_MSG,        INFO_DEATH_SELF_MON_SHAMBLER_SMASH,                CENTER_DEATH_SELF_MONSTER) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_MON_SHAMBLER_ZAP,                  NO_MSG,        INFO_DEATH_SELF_MON_SHAMBLER_ZAP,                  CENTER_DEATH_SELF_MONSTER) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_MON_SPIDER,                                NO_MSG,        INFO_DEATH_SELF_MON_SPIDER,                                CENTER_DEATH_SELF_MONSTER) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_MON_WYVERN,                                NO_MSG,        INFO_DEATH_SELF_MON_WYVERN,                                CENTER_DEATH_SELF_MONSTER) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_MON_ZOMBIE_JUMP,                   NO_MSG,        INFO_DEATH_SELF_MON_ZOMBIE_JUMP,                   CENTER_DEATH_SELF_MONSTER) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_MON_ZOMBIE_MELEE,                  NO_MSG,        INFO_DEATH_SELF_MON_ZOMBIE_MELEE,                  CENTER_DEATH_SELF_MONSTER) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_NADE,                                              NO_MSG,                INFO_DEATH_SELF_NADE,                                      CENTER_DEATH_SELF_NADE) \
 -      MSG_MULTI_NOTIF(1, DEATH_SELF_NADE_NAPALM,                               NO_MSG,                INFO_DEATH_SELF_NADE_NAPALM,                       CENTER_DEATH_SELF_NADE_NAPALM) \
 -      MSG_MULTI_NOTIF(1, DEATH_SELF_NADE_ICE,                                  NO_MSG,                INFO_DEATH_SELF_NADE_ICE,                                  CENTER_DEATH_SELF_NADE_ICE_FREEZE) \
 -      MSG_MULTI_NOTIF(1, DEATH_SELF_NADE_ICE_FREEZE,           NO_MSG,                INFO_DEATH_SELF_NADE_ICE_FREEZE,           CENTER_DEATH_SELF_NADE_ICE_FREEZE) \
 -      MSG_MULTI_NOTIF(1, DEATH_SELF_NADE_HEAL,                 NO_MSG,        INFO_DEATH_SELF_NADE_HEAL,                 CENTER_DEATH_SELF_NADE_HEAL) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_NOAMMO,                    NO_MSG,        INFO_DEATH_SELF_NOAMMO,                    CENTER_DEATH_SELF_NOAMMO) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_ROT,                       NO_MSG,        INFO_DEATH_SELF_ROT,                       CENTER_DEATH_SELF_ROT) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_SHOOTING_STAR,             NO_MSG,        INFO_DEATH_SELF_SHOOTING_STAR,             CENTER_DEATH_SELF_SHOOTING_STAR) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_SLIME,                     NO_MSG,        INFO_DEATH_SELF_SLIME,                     CENTER_DEATH_SELF_SLIME) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_SUICIDE,                   NO_MSG,        INFO_DEATH_SELF_SUICIDE,                   CENTER_DEATH_SELF_SUICIDE) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_SWAMP,                     NO_MSG,        INFO_DEATH_SELF_SWAMP,                     CENTER_DEATH_SELF_SWAMP) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_TEAMCHANGE,                NO_MSG,        INFO_DEATH_SELF_TEAMCHANGE,                CENTER_DEATH_SELF_TEAMCHANGE) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_TOUCHEXPLODE,              NO_MSG,        INFO_DEATH_SELF_TOUCHEXPLODE,              CENTER_DEATH_SELF_TOUCHEXPLODE) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET,                    NO_MSG,        INFO_DEATH_SELF_TURRET,                    CENTER_DEATH_SELF_TURRET) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_EWHEEL,             NO_MSG,        INFO_DEATH_SELF_TURRET_EWHEEL,             CENTER_DEATH_SELF_TURRET_EWHEEL) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_FLAC,               NO_MSG,        INFO_DEATH_SELF_TURRET_FLAC,               CENTER_DEATH_SELF_TURRET) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_HELLION,            NO_MSG,        INFO_DEATH_SELF_TURRET_HELLION,            CENTER_DEATH_SELF_TURRET) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_HK,                 NO_MSG,        INFO_DEATH_SELF_TURRET_HK,                 CENTER_DEATH_SELF_TURRET) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_MACHINEGUN,         NO_MSG,        INFO_DEATH_SELF_TURRET_MACHINEGUN,         CENTER_DEATH_SELF_TURRET) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_MLRS,               NO_MSG,        INFO_DEATH_SELF_TURRET_MLRS,               CENTER_DEATH_SELF_TURRET) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_PHASER,             NO_MSG,        INFO_DEATH_SELF_TURRET_PHASER,             CENTER_DEATH_SELF_TURRET) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_PLASMA,             NO_MSG,        INFO_DEATH_SELF_TURRET_PLASMA,             CENTER_DEATH_SELF_TURRET) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_TESLA,              NO_MSG,        INFO_DEATH_SELF_TURRET_TESLA,              CENTER_DEATH_SELF_TURRET) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_WALK_GUN,           NO_MSG,        INFO_DEATH_SELF_TURRET_WALK_GUN,           CENTER_DEATH_SELF_TURRET_WALK) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_WALK_MEELE,         NO_MSG,        INFO_DEATH_SELF_TURRET_WALK_MEELE,         CENTER_DEATH_SELF_TURRET_WALK) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_WALK_ROCKET,        NO_MSG,        INFO_DEATH_SELF_TURRET_WALK_ROCKET,        CENTER_DEATH_SELF_TURRET_WALK) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_VH_BUMB_DEATH,             NO_MSG,        INFO_DEATH_SELF_VH_BUMB_DEATH,             CENTER_DEATH_SELF_VH_BUMB_DEATH) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_VH_CRUSH,                  NO_MSG,        INFO_DEATH_SELF_VH_CRUSH,                  CENTER_DEATH_SELF_VH_CRUSH) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_VH_RAPT_BOMB,              NO_MSG,        INFO_DEATH_SELF_VH_RAPT_BOMB,              CENTER_DEATH_SELF_VH_RAPT_BOMB) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_VH_RAPT_DEATH,             NO_MSG,        INFO_DEATH_SELF_VH_RAPT_DEATH,             CENTER_DEATH_SELF_VH_RAPT_DEATH) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_VH_SPID_DEATH,             NO_MSG,        INFO_DEATH_SELF_VH_SPID_DEATH,             CENTER_DEATH_SELF_VH_SPID_DEATH) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_VH_SPID_ROCKET,            NO_MSG,        INFO_DEATH_SELF_VH_SPID_ROCKET,            CENTER_DEATH_SELF_VH_SPID_ROCKET) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_VH_WAKI_DEATH,             NO_MSG,        INFO_DEATH_SELF_VH_WAKI_DEATH,             CENTER_DEATH_SELF_VH_WAKI_DEATH) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_VH_WAKI_ROCKET,            NO_MSG,        INFO_DEATH_SELF_VH_WAKI_ROCKET,            CENTER_DEATH_SELF_VH_WAKI_ROCKET) \
--      MSG_MULTI_NOTIF(1, DEATH_SELF_VOID,                      NO_MSG,        INFO_DEATH_SELF_VOID,                      CENTER_DEATH_SELF_VOID) \
 -      MSG_MULTI_NOTIF(1, ITEM_BUFF_DROP,                       NO_MSG,        INFO_ITEM_BUFF_DROP,                       CENTER_ITEM_BUFF_DROP) \
 -      MSG_MULTI_NOTIF(1, ITEM_BUFF_GOT,                        NO_MSG,        INFO_ITEM_BUFF_GOT,                        CENTER_ITEM_BUFF_GOT) \
--      MSG_MULTI_NOTIF(1, ITEM_WEAPON_DONTHAVE,                 NO_MSG,        INFO_ITEM_WEAPON_DONTHAVE,                 CENTER_ITEM_WEAPON_DONTHAVE) \
--      MSG_MULTI_NOTIF(1, ITEM_WEAPON_DROP,                     NO_MSG,        INFO_ITEM_WEAPON_DROP,                     CENTER_ITEM_WEAPON_DROP) \
--      MSG_MULTI_NOTIF(1, ITEM_WEAPON_GOT,                      NO_MSG,        INFO_ITEM_WEAPON_GOT,                      CENTER_ITEM_WEAPON_GOT) \
--      MSG_MULTI_NOTIF(1, ITEM_WEAPON_NOAMMO,                   NO_MSG,        INFO_ITEM_WEAPON_NOAMMO,                   CENTER_ITEM_WEAPON_NOAMMO) \
--      MSG_MULTI_NOTIF(1, ITEM_WEAPON_PRIMORSEC,                NO_MSG,        INFO_ITEM_WEAPON_PRIMORSEC,                CENTER_ITEM_WEAPON_PRIMORSEC) \
--      MSG_MULTI_NOTIF(1, ITEM_WEAPON_UNAVAILABLE,              NO_MSG,        INFO_ITEM_WEAPON_UNAVAILABLE,              CENTER_ITEM_WEAPON_UNAVAILABLE) \
--      MSG_MULTI_NOTIF(1, MULTI_COUNTDOWN_BEGIN,                ANNCE_BEGIN,   NO_MSG,                                    CENTER_COUNTDOWN_BEGIN) \
--      MSG_MULTI_NOTIF(1, MULTI_MINSTA_FINDAMMO,                ANNCE_NUM_10,  NO_MSG,                                    CENTER_MINSTA_FINDAMMO_FIRST) \
--      MSG_MULTI_NOTIF(1, WEAPON_ACCORDEON_MURDER,              NO_MSG,        INFO_WEAPON_ACCORDEON_MURDER,              NO_MSG) \
--      MSG_MULTI_NOTIF(1, WEAPON_ACCORDEON_SUICIDE,             NO_MSG,        INFO_WEAPON_ACCORDEON_SUICIDE,             CENTER_DEATH_SELF_GENERIC) \
 -      MSG_MULTI_NOTIF(1, WEAPON_ARC_MURDER,                    NO_MSG,        INFO_WEAPON_ARC_MURDER,                    NO_MSG) \
 -      MSG_MULTI_NOTIF(1, WEAPON_BLASTER_MURDER,                NO_MSG,        INFO_WEAPON_BLASTER_MURDER,                NO_MSG) \
 -      MSG_MULTI_NOTIF(1, WEAPON_BLASTER_SUICIDE,               NO_MSG,        INFO_WEAPON_BLASTER_SUICIDE,               CENTER_DEATH_SELF_GENERIC) \
--      MSG_MULTI_NOTIF(1, WEAPON_CRYLINK_MURDER,                NO_MSG,        INFO_WEAPON_CRYLINK_MURDER,                NO_MSG) \
--      MSG_MULTI_NOTIF(1, WEAPON_CRYLINK_SUICIDE,               NO_MSG,        INFO_WEAPON_CRYLINK_SUICIDE,               CENTER_DEATH_SELF_GENERIC) \
 -      MSG_MULTI_NOTIF(1, WEAPON_DEVASTATOR_MURDER_DIRECT,      NO_MSG,        INFO_WEAPON_DEVASTATOR_MURDER_DIRECT,      NO_MSG) \
 -      MSG_MULTI_NOTIF(1, WEAPON_DEVASTATOR_MURDER_SPLASH,      NO_MSG,        INFO_WEAPON_DEVASTATOR_MURDER_SPLASH,      NO_MSG) \
 -      MSG_MULTI_NOTIF(1, WEAPON_DEVASTATOR_SUICIDE,            NO_MSG,        INFO_WEAPON_DEVASTATOR_SUICIDE,            CENTER_DEATH_SELF_GENERIC) \
--      MSG_MULTI_NOTIF(1, WEAPON_ELECTRO_MURDER_BOLT,           NO_MSG,        INFO_WEAPON_ELECTRO_MURDER_BOLT,           NO_MSG) \
--      MSG_MULTI_NOTIF(1, WEAPON_ELECTRO_MURDER_COMBO,          NO_MSG,        INFO_WEAPON_ELECTRO_MURDER_COMBO,          NO_MSG) \
--      MSG_MULTI_NOTIF(1, WEAPON_ELECTRO_MURDER_ORBS,           NO_MSG,        INFO_WEAPON_ELECTRO_MURDER_ORBS,           NO_MSG) \
--      MSG_MULTI_NOTIF(1, WEAPON_ELECTRO_SUICIDE_BOLT,          NO_MSG,        INFO_WEAPON_ELECTRO_SUICIDE_BOLT,          CENTER_DEATH_SELF_GENERIC) \
--      MSG_MULTI_NOTIF(1, WEAPON_ELECTRO_SUICIDE_ORBS,          NO_MSG,        INFO_WEAPON_ELECTRO_SUICIDE_ORBS,          CENTER_DEATH_SELF_GENERIC) \
--      MSG_MULTI_NOTIF(1, WEAPON_FIREBALL_MURDER_BLAST,         NO_MSG,        INFO_WEAPON_FIREBALL_MURDER_BLAST,         NO_MSG) \
--      MSG_MULTI_NOTIF(1, WEAPON_FIREBALL_MURDER_FIREMINE,      NO_MSG,        INFO_WEAPON_FIREBALL_MURDER_FIREMINE,      NO_MSG) \
--      MSG_MULTI_NOTIF(1, WEAPON_FIREBALL_SUICIDE_BLAST,        NO_MSG,        INFO_WEAPON_FIREBALL_SUICIDE_BLAST,        CENTER_DEATH_SELF_GENERIC) \
--      MSG_MULTI_NOTIF(1, WEAPON_FIREBALL_SUICIDE_FIREMINE,     NO_MSG,        INFO_WEAPON_FIREBALL_SUICIDE_FIREMINE,     CENTER_DEATH_SELF_GENERIC) \
--      MSG_MULTI_NOTIF(1, WEAPON_HAGAR_MURDER_BURST,            NO_MSG,        INFO_WEAPON_HAGAR_MURDER_BURST,            NO_MSG) \
--      MSG_MULTI_NOTIF(1, WEAPON_HAGAR_MURDER_SPRAY,            NO_MSG,        INFO_WEAPON_HAGAR_MURDER_SPRAY,            NO_MSG) \
--      MSG_MULTI_NOTIF(1, WEAPON_HAGAR_SUICIDE,                 NO_MSG,        INFO_WEAPON_HAGAR_SUICIDE,                 CENTER_DEATH_SELF_GENERIC) \
--      MSG_MULTI_NOTIF(1, WEAPON_HLAC_MURDER,                   NO_MSG,        INFO_WEAPON_HLAC_MURDER,                   NO_MSG) \
--      MSG_MULTI_NOTIF(1, WEAPON_HLAC_SUICIDE,                  NO_MSG,        INFO_WEAPON_HLAC_SUICIDE,                  CENTER_DEATH_SELF_GENERIC) \
--      MSG_MULTI_NOTIF(1, WEAPON_HOOK_MURDER,                   NO_MSG,        INFO_WEAPON_HOOK_MURDER,                   NO_MSG) \
--      MSG_MULTI_NOTIF(1, WEAPON_KLEINBOTTLE_MURDER,            NO_MSG,        INFO_WEAPON_KLEINBOTTLE_MURDER,            NO_MSG) \
--      MSG_MULTI_NOTIF(1, WEAPON_KLEINBOTTLE_SUICIDE,           NO_MSG,        INFO_WEAPON_KLEINBOTTLE_SUICIDE,           CENTER_DEATH_SELF_GENERIC) \
-       MSG_MULTI_NOTIF(1, WEAPON_LASER_MURDER,                  NO_MSG,        INFO_WEAPON_LASER_MURDER,                  NO_MSG) \
-       MSG_MULTI_NOTIF(1, WEAPON_LASER_SUICIDE,                 NO_MSG,        INFO_WEAPON_LASER_SUICIDE,                 CENTER_DEATH_SELF_GENERIC) \
 -      MSG_MULTI_NOTIF(1, WEAPON_MACHINEGUN_MURDER_SNIPE,       NO_MSG,        INFO_WEAPON_MACHINEGUN_MURDER_SNIPE,       NO_MSG) \
 -      MSG_MULTI_NOTIF(1, WEAPON_MACHINEGUN_MURDER_SPRAY,       NO_MSG,        INFO_WEAPON_MACHINEGUN_MURDER_SPRAY,       NO_MSG) \
--      MSG_MULTI_NOTIF(1, WEAPON_MINELAYER_MURDER,              NO_MSG,        INFO_WEAPON_MINELAYER_MURDER,              NO_MSG) \
--      MSG_MULTI_NOTIF(1, WEAPON_MINELAYER_SUICIDE,             NO_MSG,        INFO_WEAPON_MINELAYER_SUICIDE,             CENTER_DEATH_SELF_GENERIC) \
-       MSG_MULTI_NOTIF(1, WEAPON_MINSTANEX_MURDER,              NO_MSG,        INFO_WEAPON_MINSTANEX_MURDER,              NO_MSG) \
--      MSG_MULTI_NOTIF(1, WEAPON_MORTAR_MURDER_BOUNCE,          NO_MSG,        INFO_WEAPON_MORTAR_MURDER_BOUNCE,          NO_MSG) \
--      MSG_MULTI_NOTIF(1, WEAPON_MORTAR_MURDER_EXPLODE,         NO_MSG,        INFO_WEAPON_MORTAR_MURDER_EXPLODE,         NO_MSG) \
--      MSG_MULTI_NOTIF(1, WEAPON_MORTAR_SUICIDE_BOUNCE,         NO_MSG,        INFO_WEAPON_MORTAR_SUICIDE_BOUNCE,         CENTER_DEATH_SELF_GENERIC) \
--      MSG_MULTI_NOTIF(1, WEAPON_MORTAR_SUICIDE_EXPLODE,        NO_MSG,        INFO_WEAPON_MORTAR_SUICIDE_EXPLODE,        CENTER_DEATH_SELF_GENERIC) \
-       MSG_MULTI_NOTIF(1, WEAPON_NEX_MURDER,                    NO_MSG,        INFO_WEAPON_NEX_MURDER,                    NO_MSG) \
--      MSG_MULTI_NOTIF(1, WEAPON_RIFLE_MURDER,                  NO_MSG,        INFO_WEAPON_RIFLE_MURDER,                  NO_MSG) \
--      MSG_MULTI_NOTIF(1, WEAPON_RIFLE_MURDER_HAIL,             NO_MSG,        INFO_WEAPON_RIFLE_MURDER_HAIL,             NO_MSG) \
--      MSG_MULTI_NOTIF(1, WEAPON_RIFLE_MURDER_HAIL_PIERCING,    NO_MSG,        INFO_WEAPON_RIFLE_MURDER_HAIL_PIERCING,    NO_MSG) \
--      MSG_MULTI_NOTIF(1, WEAPON_RIFLE_MURDER_PIERCING,         NO_MSG,        INFO_WEAPON_RIFLE_MURDER_PIERCING,         NO_MSG) \
-       MSG_MULTI_NOTIF(1, WEAPON_ROCKETLAUNCHER_MURDER_DIRECT,  NO_MSG,        INFO_WEAPON_ROCKETLAUNCHER_MURDER_DIRECT,  NO_MSG) \
-       MSG_MULTI_NOTIF(1, WEAPON_ROCKETLAUNCHER_MURDER_SPLASH,  NO_MSG,        INFO_WEAPON_ROCKETLAUNCHER_MURDER_SPLASH,  NO_MSG) \
-       MSG_MULTI_NOTIF(1, WEAPON_ROCKETLAUNCHER_SUICIDE,        NO_MSG,        INFO_WEAPON_ROCKETLAUNCHER_SUICIDE,        CENTER_DEATH_SELF_GENERIC) \
--      MSG_MULTI_NOTIF(1, WEAPON_SEEKER_MURDER_SPRAY,           NO_MSG,        INFO_WEAPON_SEEKER_MURDER_SPRAY,           NO_MSG) \
--      MSG_MULTI_NOTIF(1, WEAPON_SEEKER_MURDER_TAG,             NO_MSG,        INFO_WEAPON_SEEKER_MURDER_TAG,             NO_MSG) \
--      MSG_MULTI_NOTIF(1, WEAPON_SEEKER_SUICIDE,                NO_MSG,        INFO_WEAPON_SEEKER_SUICIDE,                CENTER_DEATH_SELF_GENERIC) \
 -      MSG_MULTI_NOTIF(1, WEAPON_SHOCKWAVE_MURDER,              NO_MSG,        INFO_WEAPON_SHOCKWAVE_MURDER,              NO_MSG) \
 -      MSG_MULTI_NOTIF(1, WEAPON_SHOCKWAVE_MURDER_SLAP,         NO_MSG,        INFO_WEAPON_SHOCKWAVE_MURDER_SLAP,         NO_MSG) \
--      MSG_MULTI_NOTIF(1, WEAPON_SHOTGUN_MURDER,                NO_MSG,        INFO_WEAPON_SHOTGUN_MURDER,                NO_MSG) \
--      MSG_MULTI_NOTIF(1, WEAPON_SHOTGUN_MURDER_SLAP,           NO_MSG,        INFO_WEAPON_SHOTGUN_MURDER_SLAP,           NO_MSG) \
--      MSG_MULTI_NOTIF(1, WEAPON_THINKING_WITH_PORTALS,         NO_MSG,        INFO_WEAPON_THINKING_WITH_PORTALS,         CENTER_DEATH_SELF_GENERIC) \
--      MSG_MULTI_NOTIF(1, WEAPON_TUBA_MURDER,                   NO_MSG,        INFO_WEAPON_TUBA_MURDER,                   NO_MSG) \
--      MSG_MULTI_NOTIF(1, WEAPON_TUBA_SUICIDE,                  NO_MSG,        INFO_WEAPON_TUBA_SUICIDE,                  CENTER_DEATH_SELF_GENERIC) \
-       MSG_MULTI_NOTIF(1, WEAPON_UZI_MURDER_SNIPE,              NO_MSG,        INFO_WEAPON_UZI_MURDER_SNIPE,              NO_MSG) \
-       MSG_MULTI_NOTIF(1, WEAPON_UZI_MURDER_SPRAY,              NO_MSG,        INFO_WEAPON_UZI_MURDER_SPRAY,              NO_MSG) \
-       MSG_MULTI_NOTIF(1, WEAPON_HMG_MURDER_SNIPE,              NO_MSG,        INFO_WEAPON_HMG_MURDER_SNIPE,              NO_MSG) \
-       MSG_MULTI_NOTIF(1, WEAPON_HMG_MURDER_SPRAY,              NO_MSG,        INFO_WEAPON_HMG_MURDER_SPRAY,              NO_MSG) \
-       MSG_MULTI_NOTIF(1, WEAPON_RPC_MURDER_DIRECT,             NO_MSG,        INFO_WEAPON_RPC_MURDER_DIRECT,             NO_MSG) \
-       MSG_MULTI_NOTIF(1, WEAPON_RPC_MURDER_SPLASH,             NO_MSG,        INFO_WEAPON_RPC_MURDER_SPLASH,             NO_MSG) \
-       MSG_MULTI_NOTIF(1, WEAPON_RPC_SUICIDE,                   NO_MSG,        INFO_WEAPON_RPC_SUICIDE,                   NO_MSG)
 -      MSG_MULTI_NOTIF(1, WEAPON_VAPORIZER_MURDER,              NO_MSG,        INFO_WEAPON_VAPORIZER_MURDER,              NO_MSG) \
 -      MSG_MULTI_NOTIF(1, WEAPON_VORTEX_MURDER,                 NO_MSG,        INFO_WEAPON_VORTEX_MURDER,                 NO_MSG)
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_CHEAT,                   NO_MSG,        INFO_DEATH_MURDER_CHEAT,                   NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_DROWN,                   NO_MSG,        INFO_DEATH_MURDER_DROWN,                   NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_FALL,                    NO_MSG,        INFO_DEATH_MURDER_FALL,                    NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_FIRE,                    NO_MSG,        INFO_DEATH_MURDER_FIRE,                    NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_LAVA,                    NO_MSG,        INFO_DEATH_MURDER_LAVA,                    NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_MONSTER,                 NO_MSG,        INFO_DEATH_MURDER_MONSTER,                 CENTER_DEATH_SELF_MONSTER) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_NADE,                    NO_MSG,        INFO_DEATH_MURDER_NADE,                    NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_NADE_NAPALM,             NO_MSG,        INFO_DEATH_MURDER_NADE_NAPALM,             NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_NADE_ICE,                NO_MSG,        INFO_DEATH_MURDER_NADE_ICE,                NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_NADE_ICE_FREEZE,         NO_MSG,        INFO_DEATH_MURDER_NADE_ICE_FREEZE,         NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_NADE_HEAL,               NO_MSG,        INFO_DEATH_MURDER_NADE_HEAL,               NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_SHOOTING_STAR,           NO_MSG,        INFO_DEATH_MURDER_SHOOTING_STAR,           NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_SLIME,                   NO_MSG,        INFO_DEATH_MURDER_SLIME,                   NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_SWAMP,                   NO_MSG,        INFO_DEATH_MURDER_SWAMP,                   NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_TELEFRAG,                NO_MSG,        INFO_DEATH_MURDER_TELEFRAG,                NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_TOUCHEXPLODE,            NO_MSG,        INFO_DEATH_MURDER_TOUCHEXPLODE,            NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_BUMB_DEATH,           NO_MSG,        INFO_DEATH_MURDER_VH_BUMB_DEATH,           NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_BUMB_GUN,             NO_MSG,        INFO_DEATH_MURDER_VH_BUMB_GUN,             NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_CRUSH,                NO_MSG,        INFO_DEATH_MURDER_VH_CRUSH,                NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_RAPT_BOMB,            NO_MSG,        INFO_DEATH_MURDER_VH_RAPT_BOMB,            NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_RAPT_CANNON,          NO_MSG,        INFO_DEATH_MURDER_VH_RAPT_CANNON,          NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_RAPT_DEATH,           NO_MSG,        INFO_DEATH_MURDER_VH_RAPT_DEATH,           NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_SPID_DEATH,           NO_MSG,        INFO_DEATH_MURDER_VH_SPID_DEATH,           NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_SPID_MINIGUN,         NO_MSG,        INFO_DEATH_MURDER_VH_SPID_MINIGUN,         NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_SPID_ROCKET,          NO_MSG,        INFO_DEATH_MURDER_VH_SPID_ROCKET,          NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_WAKI_DEATH,           NO_MSG,        INFO_DEATH_MURDER_VH_WAKI_DEATH,           NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_WAKI_GUN,             NO_MSG,        INFO_DEATH_MURDER_VH_WAKI_GUN,             NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_WAKI_ROCKET,          NO_MSG,        INFO_DEATH_MURDER_VH_WAKI_ROCKET,          NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_VENGEANCE,               NO_MSG,        INFO_DEATH_MURDER_VENGEANCE,               NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_MURDER_VOID,                    NO_MSG,        INFO_DEATH_MURDER_VOID,                    NO_MSG) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_AUTOTEAMCHANGE,            NO_MSG,        INFO_DEATH_SELF_AUTOTEAMCHANGE,            CENTER_DEATH_SELF_AUTOTEAMCHANGE) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_BETRAYAL,                  NO_MSG,        INFO_DEATH_SELF_BETRAYAL,                  CENTER_DEATH_SELF_BETRAYAL) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_CAMP,                      NO_MSG,        INFO_DEATH_SELF_CAMP,                      CENTER_DEATH_SELF_CAMP) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_CHEAT,                     NO_MSG,        INFO_DEATH_SELF_CHEAT,                     CENTER_DEATH_SELF_CHEAT) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_CUSTOM,                    NO_MSG,        INFO_DEATH_SELF_GENERIC,                   CENTER_DEATH_SELF_CUSTOM) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_DROWN,                     NO_MSG,        INFO_DEATH_SELF_DROWN,                     CENTER_DEATH_SELF_DROWN) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_FALL,                      NO_MSG,        INFO_DEATH_SELF_FALL,                      CENTER_DEATH_SELF_FALL) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_FIRE,                      NO_MSG,        INFO_DEATH_SELF_FIRE,                      CENTER_DEATH_SELF_FIRE) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_GENERIC,                   NO_MSG,        INFO_DEATH_SELF_GENERIC,                   CENTER_DEATH_SELF_GENERIC) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_LAVA,                      NO_MSG,        INFO_DEATH_SELF_LAVA,                      CENTER_DEATH_SELF_LAVA) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_MON_MAGE,                  NO_MSG,        INFO_DEATH_SELF_MON_MAGE,                  CENTER_DEATH_SELF_MONSTER) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_MON_SHAMBLER_CLAW,         NO_MSG,        INFO_DEATH_SELF_MON_SHAMBLER_CLAW,         CENTER_DEATH_SELF_MONSTER) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_MON_SHAMBLER_SMASH,        NO_MSG,        INFO_DEATH_SELF_MON_SHAMBLER_SMASH,        CENTER_DEATH_SELF_MONSTER) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_MON_SHAMBLER_ZAP,          NO_MSG,        INFO_DEATH_SELF_MON_SHAMBLER_ZAP,          CENTER_DEATH_SELF_MONSTER) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_MON_SPIDER,                NO_MSG,        INFO_DEATH_SELF_MON_SPIDER,                CENTER_DEATH_SELF_MONSTER) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_MON_WYVERN,                NO_MSG,        INFO_DEATH_SELF_MON_WYVERN,                CENTER_DEATH_SELF_MONSTER) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_MON_ZOMBIE_JUMP,           NO_MSG,        INFO_DEATH_SELF_MON_ZOMBIE_JUMP,           CENTER_DEATH_SELF_MONSTER) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_MON_ZOMBIE_MELEE,          NO_MSG,        INFO_DEATH_SELF_MON_ZOMBIE_MELEE,          CENTER_DEATH_SELF_MONSTER) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_NADE,                      NO_MSG,        INFO_DEATH_SELF_NADE,                      CENTER_DEATH_SELF_NADE) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_NADE_NAPALM,               NO_MSG,        INFO_DEATH_SELF_NADE_NAPALM,               CENTER_DEATH_SELF_NADE_NAPALM) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_NADE_ICE,                  NO_MSG,        INFO_DEATH_SELF_NADE_ICE,                  CENTER_DEATH_SELF_NADE_ICE_FREEZE) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_NADE_ICE_FREEZE,           NO_MSG,        INFO_DEATH_SELF_NADE_ICE_FREEZE,           CENTER_DEATH_SELF_NADE_ICE_FREEZE) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_NADE_HEAL,                 NO_MSG,        INFO_DEATH_SELF_NADE_HEAL,                 CENTER_DEATH_SELF_NADE_HEAL) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_NOAMMO,                    NO_MSG,        INFO_DEATH_SELF_NOAMMO,                    CENTER_DEATH_SELF_NOAMMO) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_ROT,                       NO_MSG,        INFO_DEATH_SELF_ROT,                       CENTER_DEATH_SELF_ROT) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_SHOOTING_STAR,             NO_MSG,        INFO_DEATH_SELF_SHOOTING_STAR,             CENTER_DEATH_SELF_SHOOTING_STAR) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_SLIME,                     NO_MSG,        INFO_DEATH_SELF_SLIME,                     CENTER_DEATH_SELF_SLIME) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_SUICIDE,                   NO_MSG,        INFO_DEATH_SELF_SUICIDE,                   CENTER_DEATH_SELF_SUICIDE) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_SWAMP,                     NO_MSG,        INFO_DEATH_SELF_SWAMP,                     CENTER_DEATH_SELF_SWAMP) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_TEAMCHANGE,                NO_MSG,        INFO_DEATH_SELF_TEAMCHANGE,                CENTER_DEATH_SELF_TEAMCHANGE) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_TOUCHEXPLODE,              NO_MSG,        INFO_DEATH_SELF_TOUCHEXPLODE,              CENTER_DEATH_SELF_TOUCHEXPLODE) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET,                    NO_MSG,        INFO_DEATH_SELF_TURRET,                    CENTER_DEATH_SELF_TURRET) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_EWHEEL,             NO_MSG,        INFO_DEATH_SELF_TURRET_EWHEEL,             CENTER_DEATH_SELF_TURRET_EWHEEL) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_FLAC,               NO_MSG,        INFO_DEATH_SELF_TURRET_FLAC,               CENTER_DEATH_SELF_TURRET) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_HELLION,            NO_MSG,        INFO_DEATH_SELF_TURRET_HELLION,            CENTER_DEATH_SELF_TURRET) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_HK,                 NO_MSG,        INFO_DEATH_SELF_TURRET_HK,                 CENTER_DEATH_SELF_TURRET) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_MACHINEGUN,         NO_MSG,        INFO_DEATH_SELF_TURRET_MACHINEGUN,         CENTER_DEATH_SELF_TURRET) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_MLRS,               NO_MSG,        INFO_DEATH_SELF_TURRET_MLRS,               CENTER_DEATH_SELF_TURRET) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_PHASER,             NO_MSG,        INFO_DEATH_SELF_TURRET_PHASER,             CENTER_DEATH_SELF_TURRET) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_PLASMA,             NO_MSG,        INFO_DEATH_SELF_TURRET_PLASMA,             CENTER_DEATH_SELF_TURRET) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_TESLA,              NO_MSG,        INFO_DEATH_SELF_TURRET_TESLA,              CENTER_DEATH_SELF_TURRET) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_WALK_GUN,           NO_MSG,        INFO_DEATH_SELF_TURRET_WALK_GUN,           CENTER_DEATH_SELF_TURRET_WALK) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_WALK_MEELE,         NO_MSG,        INFO_DEATH_SELF_TURRET_WALK_MEELE,         CENTER_DEATH_SELF_TURRET_WALK) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_WALK_ROCKET,        NO_MSG,        INFO_DEATH_SELF_TURRET_WALK_ROCKET,        CENTER_DEATH_SELF_TURRET_WALK) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_VH_BUMB_DEATH,             NO_MSG,        INFO_DEATH_SELF_VH_BUMB_DEATH,             CENTER_DEATH_SELF_VH_BUMB_DEATH) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_VH_CRUSH,                  NO_MSG,        INFO_DEATH_SELF_VH_CRUSH,                  CENTER_DEATH_SELF_VH_CRUSH) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_VH_RAPT_BOMB,              NO_MSG,        INFO_DEATH_SELF_VH_RAPT_BOMB,              CENTER_DEATH_SELF_VH_RAPT_BOMB) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_VH_RAPT_DEATH,             NO_MSG,        INFO_DEATH_SELF_VH_RAPT_DEATH,             CENTER_DEATH_SELF_VH_RAPT_DEATH) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_VH_SPID_DEATH,             NO_MSG,        INFO_DEATH_SELF_VH_SPID_DEATH,             CENTER_DEATH_SELF_VH_SPID_DEATH) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_VH_SPID_ROCKET,            NO_MSG,        INFO_DEATH_SELF_VH_SPID_ROCKET,            CENTER_DEATH_SELF_VH_SPID_ROCKET) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_VH_WAKI_DEATH,             NO_MSG,        INFO_DEATH_SELF_VH_WAKI_DEATH,             CENTER_DEATH_SELF_VH_WAKI_DEATH) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_VH_WAKI_ROCKET,            NO_MSG,        INFO_DEATH_SELF_VH_WAKI_ROCKET,            CENTER_DEATH_SELF_VH_WAKI_ROCKET) \
++    MSG_MULTI_NOTIF(1, DEATH_SELF_VOID,                      NO_MSG,        INFO_DEATH_SELF_VOID,                      CENTER_DEATH_SELF_VOID) \
++    MSG_MULTI_NOTIF(1, ITEM_BUFF_DROP,                       NO_MSG,        INFO_ITEM_BUFF_DROP,                       CENTER_ITEM_BUFF_DROP) \
++    MSG_MULTI_NOTIF(1, ITEM_BUFF_GOT,                        NO_MSG,        INFO_ITEM_BUFF_GOT,                        CENTER_ITEM_BUFF_GOT) \
++    MSG_MULTI_NOTIF(1, ITEM_WEAPON_DONTHAVE,                 NO_MSG,        INFO_ITEM_WEAPON_DONTHAVE,                 CENTER_ITEM_WEAPON_DONTHAVE) \
++    MSG_MULTI_NOTIF(1, ITEM_WEAPON_DROP,                     NO_MSG,        INFO_ITEM_WEAPON_DROP,                     CENTER_ITEM_WEAPON_DROP) \
++    MSG_MULTI_NOTIF(1, ITEM_WEAPON_GOT,                      NO_MSG,        INFO_ITEM_WEAPON_GOT,                      CENTER_ITEM_WEAPON_GOT) \
++    MSG_MULTI_NOTIF(1, ITEM_WEAPON_NOAMMO,                   NO_MSG,        INFO_ITEM_WEAPON_NOAMMO,                   CENTER_ITEM_WEAPON_NOAMMO) \
++    MSG_MULTI_NOTIF(1, ITEM_WEAPON_PRIMORSEC,                NO_MSG,        INFO_ITEM_WEAPON_PRIMORSEC,                CENTER_ITEM_WEAPON_PRIMORSEC) \
++    MSG_MULTI_NOTIF(1, ITEM_WEAPON_UNAVAILABLE,              NO_MSG,        INFO_ITEM_WEAPON_UNAVAILABLE,              CENTER_ITEM_WEAPON_UNAVAILABLE) \
++    MSG_MULTI_NOTIF(1, MULTI_COUNTDOWN_BEGIN,                ANNCE_BEGIN,   NO_MSG,                                    CENTER_COUNTDOWN_BEGIN) \
++    MSG_MULTI_NOTIF(1, MULTI_MINSTA_FINDAMMO,                ANNCE_NUM_10,  NO_MSG,                                    CENTER_MINSTA_FINDAMMO_FIRST) \
++    MSG_MULTI_NOTIF(1, WEAPON_ACCORDEON_MURDER,              NO_MSG,        INFO_WEAPON_ACCORDEON_MURDER,              NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_ACCORDEON_SUICIDE,             NO_MSG,        INFO_WEAPON_ACCORDEON_SUICIDE,             CENTER_DEATH_SELF_GENERIC) \
++    MSG_MULTI_NOTIF(1, WEAPON_ARC_MURDER,                    NO_MSG,        INFO_WEAPON_ARC_MURDER,                    NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_BLASTER_MURDER,                NO_MSG,        INFO_WEAPON_BLASTER_MURDER,                NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_BLASTER_SUICIDE,               NO_MSG,        INFO_WEAPON_BLASTER_SUICIDE,               CENTER_DEATH_SELF_GENERIC) \
++    MSG_MULTI_NOTIF(1, WEAPON_CRYLINK_MURDER,                NO_MSG,        INFO_WEAPON_CRYLINK_MURDER,                NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_CRYLINK_SUICIDE,               NO_MSG,        INFO_WEAPON_CRYLINK_SUICIDE,               CENTER_DEATH_SELF_GENERIC) \
++    MSG_MULTI_NOTIF(1, WEAPON_DEVASTATOR_MURDER_DIRECT,      NO_MSG,        INFO_WEAPON_DEVASTATOR_MURDER_DIRECT,      NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_DEVASTATOR_MURDER_SPLASH,      NO_MSG,        INFO_WEAPON_DEVASTATOR_MURDER_SPLASH,      NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_DEVASTATOR_SUICIDE,            NO_MSG,        INFO_WEAPON_DEVASTATOR_SUICIDE,            CENTER_DEATH_SELF_GENERIC) \
++    MSG_MULTI_NOTIF(1, WEAPON_ELECTRO_MURDER_BOLT,           NO_MSG,        INFO_WEAPON_ELECTRO_MURDER_BOLT,           NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_ELECTRO_MURDER_COMBO,          NO_MSG,        INFO_WEAPON_ELECTRO_MURDER_COMBO,          NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_ELECTRO_MURDER_ORBS,           NO_MSG,        INFO_WEAPON_ELECTRO_MURDER_ORBS,           NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_ELECTRO_SUICIDE_BOLT,          NO_MSG,        INFO_WEAPON_ELECTRO_SUICIDE_BOLT,          CENTER_DEATH_SELF_GENERIC) \
++    MSG_MULTI_NOTIF(1, WEAPON_ELECTRO_SUICIDE_ORBS,          NO_MSG,        INFO_WEAPON_ELECTRO_SUICIDE_ORBS,          CENTER_DEATH_SELF_GENERIC) \
++    MSG_MULTI_NOTIF(1, WEAPON_FIREBALL_MURDER_BLAST,         NO_MSG,        INFO_WEAPON_FIREBALL_MURDER_BLAST,         NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_FIREBALL_MURDER_FIREMINE,      NO_MSG,        INFO_WEAPON_FIREBALL_MURDER_FIREMINE,      NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_FIREBALL_SUICIDE_BLAST,        NO_MSG,        INFO_WEAPON_FIREBALL_SUICIDE_BLAST,        CENTER_DEATH_SELF_GENERIC) \
++    MSG_MULTI_NOTIF(1, WEAPON_FIREBALL_SUICIDE_FIREMINE,     NO_MSG,        INFO_WEAPON_FIREBALL_SUICIDE_FIREMINE,     CENTER_DEATH_SELF_GENERIC) \
++    MSG_MULTI_NOTIF(1, WEAPON_HAGAR_MURDER_BURST,            NO_MSG,        INFO_WEAPON_HAGAR_MURDER_BURST,            NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_HAGAR_MURDER_SPRAY,            NO_MSG,        INFO_WEAPON_HAGAR_MURDER_SPRAY,            NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_HAGAR_SUICIDE,                 NO_MSG,        INFO_WEAPON_HAGAR_SUICIDE,                 CENTER_DEATH_SELF_GENERIC) \
++    MSG_MULTI_NOTIF(1, WEAPON_HLAC_MURDER,                   NO_MSG,        INFO_WEAPON_HLAC_MURDER,                   NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_HLAC_SUICIDE,                  NO_MSG,        INFO_WEAPON_HLAC_SUICIDE,                  CENTER_DEATH_SELF_GENERIC) \
++    MSG_MULTI_NOTIF(1, WEAPON_HMG_MURDER_SNIPE,              NO_MSG,        INFO_WEAPON_HMG_MURDER_SNIPE,              NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_HMG_MURDER_SPRAY,              NO_MSG,        INFO_WEAPON_HMG_MURDER_SPRAY,              NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_HOOK_MURDER,                   NO_MSG,        INFO_WEAPON_HOOK_MURDER,                   NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_KLEINBOTTLE_MURDER,            NO_MSG,        INFO_WEAPON_KLEINBOTTLE_MURDER,            NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_KLEINBOTTLE_SUICIDE,           NO_MSG,        INFO_WEAPON_KLEINBOTTLE_SUICIDE,           CENTER_DEATH_SELF_GENERIC) \
++    MSG_MULTI_NOTIF(1, WEAPON_MACHINEGUN_MURDER_SNIPE,       NO_MSG,        INFO_WEAPON_MACHINEGUN_MURDER_SNIPE,       NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_MACHINEGUN_MURDER_SPRAY,       NO_MSG,        INFO_WEAPON_MACHINEGUN_MURDER_SPRAY,       NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_MINELAYER_MURDER,              NO_MSG,        INFO_WEAPON_MINELAYER_MURDER,              NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_MINELAYER_SUICIDE,             NO_MSG,        INFO_WEAPON_MINELAYER_SUICIDE,             CENTER_DEATH_SELF_GENERIC) \
++    MSG_MULTI_NOTIF(1, WEAPON_MORTAR_MURDER_BOUNCE,          NO_MSG,        INFO_WEAPON_MORTAR_MURDER_BOUNCE,          NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_MORTAR_MURDER_EXPLODE,         NO_MSG,        INFO_WEAPON_MORTAR_MURDER_EXPLODE,         NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_MORTAR_SUICIDE_BOUNCE,         NO_MSG,        INFO_WEAPON_MORTAR_SUICIDE_BOUNCE,         CENTER_DEATH_SELF_GENERIC) \
++    MSG_MULTI_NOTIF(1, WEAPON_MORTAR_SUICIDE_EXPLODE,        NO_MSG,        INFO_WEAPON_MORTAR_SUICIDE_EXPLODE,        CENTER_DEATH_SELF_GENERIC) \
++    MSG_MULTI_NOTIF(1, WEAPON_RIFLE_MURDER,                  NO_MSG,        INFO_WEAPON_RIFLE_MURDER,                  NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_RIFLE_MURDER_HAIL,             NO_MSG,        INFO_WEAPON_RIFLE_MURDER_HAIL,             NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_RIFLE_MURDER_HAIL_PIERCING,    NO_MSG,        INFO_WEAPON_RIFLE_MURDER_HAIL_PIERCING,    NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_RIFLE_MURDER_PIERCING,         NO_MSG,        INFO_WEAPON_RIFLE_MURDER_PIERCING,         NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_RPC_MURDER_DIRECT,             NO_MSG,        INFO_WEAPON_RPC_MURDER_DIRECT,             NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_RPC_MURDER_SPLASH,             NO_MSG,        INFO_WEAPON_RPC_MURDER_SPLASH,             NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_RPC_SUICIDE_DIRECT,            NO_MSG,        INFO_WEAPON_RPC_SUICIDE_DIRECT,            NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_RPC_SUICIDE_SPLASH,            NO_MSG,        INFO_WEAPON_RPC_SUICIDE_SPLASH,            CENTER_DEATH_SELF_GENERIC) \
++    MSG_MULTI_NOTIF(1, WEAPON_SEEKER_MURDER_SPRAY,           NO_MSG,        INFO_WEAPON_SEEKER_MURDER_SPRAY,           NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_SEEKER_MURDER_TAG,             NO_MSG,        INFO_WEAPON_SEEKER_MURDER_TAG,             NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_SEEKER_SUICIDE,                NO_MSG,        INFO_WEAPON_SEEKER_SUICIDE,                CENTER_DEATH_SELF_GENERIC) \
++    MSG_MULTI_NOTIF(1, WEAPON_SHOCKWAVE_MURDER,              NO_MSG,        INFO_WEAPON_SHOCKWAVE_MURDER,              NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_SHOCKWAVE_MURDER_SLAP,         NO_MSG,        INFO_WEAPON_SHOCKWAVE_MURDER_SLAP,         NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_SHOTGUN_MURDER,                NO_MSG,        INFO_WEAPON_SHOTGUN_MURDER,                NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_SHOTGUN_MURDER_SLAP,           NO_MSG,        INFO_WEAPON_SHOTGUN_MURDER_SLAP,           NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_THINKING_WITH_PORTALS,         NO_MSG,        INFO_WEAPON_THINKING_WITH_PORTALS,         CENTER_DEATH_SELF_GENERIC) \
++    MSG_MULTI_NOTIF(1, WEAPON_TUBA_MURDER,                   NO_MSG,        INFO_WEAPON_TUBA_MURDER,                   NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_TUBA_SUICIDE,                  NO_MSG,        INFO_WEAPON_TUBA_SUICIDE,                  CENTER_DEATH_SELF_GENERIC) \
++    MSG_MULTI_NOTIF(1, WEAPON_VAPORIZER_MURDER,              NO_MSG,        INFO_WEAPON_VAPORIZER_MURDER,              NO_MSG) \
++    MSG_MULTI_NOTIF(1, WEAPON_VORTEX_MURDER,                 NO_MSG,        INFO_WEAPON_VORTEX_MURDER,                 NO_MSG)
  
  #define MULTITEAM_CHOICE2(default,challow,prefix,chtype,optiona,optionb) \
--      MSG_CHOICE_NOTIF(default, challow, prefix##RED, chtype, optiona##RED, optionb##RED) \
--      MSG_CHOICE_NOTIF(default, challow, prefix##BLUE, chtype, optiona##BLUE, optionb##BLUE)
++    MSG_CHOICE_NOTIF(default, challow, prefix##RED, chtype, optiona##RED, optionb##RED) \
++    MSG_CHOICE_NOTIF(default, challow, prefix##BLUE, chtype, optiona##BLUE, optionb##BLUE)
  #define MULTITEAM_CHOICE3(default,challow,prefix,chtype,optiona,optionb) \
--      MSG_CHOICE_NOTIF(default, challow, prefix##RED, chtype, optiona##RED, optionb##RED) \
--      MSG_CHOICE_NOTIF(default, challow, prefix##BLUE, chtype, optiona##BLUE, optionb##BLUE) \
--      MSG_CHOICE_NOTIF(default, challow, prefix##YELLOW, chtype, optiona##YELLOW, optionb##YELLOW)
++    MSG_CHOICE_NOTIF(default, challow, prefix##RED, chtype, optiona##RED, optionb##RED) \
++    MSG_CHOICE_NOTIF(default, challow, prefix##BLUE, chtype, optiona##BLUE, optionb##BLUE) \
++    MSG_CHOICE_NOTIF(default, challow, prefix##YELLOW, chtype, optiona##YELLOW, optionb##YELLOW)
  #define MULTITEAM_CHOICE4(default,challow,prefix,chtype,optiona,optionb) \
--      MSG_CHOICE_NOTIF(default, challow, prefix##RED, chtype, optiona##RED, optionb##RED) \
--      MSG_CHOICE_NOTIF(default, challow, prefix##BLUE, chtype, optiona##BLUE, optionb##BLUE) \
--      MSG_CHOICE_NOTIF(default, challow, prefix##YELLOW, chtype, optiona##YELLOW, optionb##YELLOW) \
--      MSG_CHOICE_NOTIF(default, challow, prefix##PINK, chtype, optiona##PINK, optionb##PINK)
++    MSG_CHOICE_NOTIF(default, challow, prefix##RED, chtype, optiona##RED, optionb##RED) \
++    MSG_CHOICE_NOTIF(default, challow, prefix##BLUE, chtype, optiona##BLUE, optionb##BLUE) \
++    MSG_CHOICE_NOTIF(default, challow, prefix##YELLOW, chtype, optiona##YELLOW, optionb##YELLOW) \
++    MSG_CHOICE_NOTIF(default, challow, prefix##PINK, chtype, optiona##PINK, optionb##PINK)
  #define MULTITEAM_CHOICE(default,challow,prefix,teams,chtype,optiona,optionb) \
--      MULTITEAM_CHOICE##teams(default,challow,prefix,chtype,optiona,optionb)
++    MULTITEAM_CHOICE##teams(default,challow,prefix,chtype,optiona,optionb)
  
  #define MSG_CHOICE_NOTIFICATIONS \
--      MULTITEAM_CHOICE(1, 2, CHOICE_CTF_CAPTURE_BROKEN_, 2,    MSG_INFO,    INFO_CTF_CAPTURE_,                INFO_CTF_CAPTURE_BROKEN_) \
--      MULTITEAM_CHOICE(1, 2, CHOICE_CTF_CAPTURE_TIME_, 2,      MSG_INFO,    INFO_CTF_CAPTURE_,                INFO_CTF_CAPTURE_TIME_) \
--      MULTITEAM_CHOICE(1, 2, CHOICE_CTF_CAPTURE_UNBROKEN_, 2,  MSG_INFO,    INFO_CTF_CAPTURE_,                INFO_CTF_CAPTURE_UNBROKEN_) \
--      MSG_CHOICE_NOTIF(1, 2, CHOICE_CTF_PICKUP_TEAM,           MSG_CENTER,  CENTER_CTF_PICKUP_TEAM,           CENTER_CTF_PICKUP_TEAM_VERBOSE) \
--      MSG_CHOICE_NOTIF(1, 2, CHOICE_CTF_PICKUP_ENEMY,          MSG_CENTER,  CENTER_CTF_PICKUP_ENEMY,          CENTER_CTF_PICKUP_ENEMY_VERBOSE) \
--      MSG_CHOICE_NOTIF(1, 1, CHOICE_FRAG,                      MSG_CENTER,  CENTER_DEATH_MURDER_FRAG,         CENTER_DEATH_MURDER_FRAG_VERBOSE) \
--      MSG_CHOICE_NOTIF(1, 1, CHOICE_FRAGGED,                   MSG_CENTER,  CENTER_DEATH_MURDER_FRAGGED,      CENTER_DEATH_MURDER_FRAGGED_VERBOSE) \
--      MSG_CHOICE_NOTIF(1, 1, CHOICE_TYPEFRAG,                  MSG_CENTER,  CENTER_DEATH_MURDER_TYPEFRAG,     CENTER_DEATH_MURDER_TYPEFRAG_VERBOSE) \
--      MSG_CHOICE_NOTIF(1, 1, CHOICE_TYPEFRAGGED,               MSG_CENTER,  CENTER_DEATH_MURDER_TYPEFRAGGED,  CENTER_DEATH_MURDER_TYPEFRAGGED_VERBOSE)
--      //MSG_CHOICE_NOTIF(2, CHOICE_)
++    MULTITEAM_CHOICE(1, 2, CHOICE_CTF_CAPTURE_BROKEN_, 2,    MSG_INFO,    INFO_CTF_CAPTURE_,                INFO_CTF_CAPTURE_BROKEN_) \
++    MULTITEAM_CHOICE(1, 2, CHOICE_CTF_CAPTURE_TIME_, 2,      MSG_INFO,    INFO_CTF_CAPTURE_,                INFO_CTF_CAPTURE_TIME_) \
++    MULTITEAM_CHOICE(1, 2, CHOICE_CTF_CAPTURE_UNBROKEN_, 2,  MSG_INFO,    INFO_CTF_CAPTURE_,                INFO_CTF_CAPTURE_UNBROKEN_) \
++    MSG_CHOICE_NOTIF(1, 2, CHOICE_CTF_PICKUP_TEAM,           MSG_CENTER,  CENTER_CTF_PICKUP_TEAM,           CENTER_CTF_PICKUP_TEAM_VERBOSE) \
++    MSG_CHOICE_NOTIF(1, 2, CHOICE_CTF_PICKUP_ENEMY,          MSG_CENTER,  CENTER_CTF_PICKUP_ENEMY,          CENTER_CTF_PICKUP_ENEMY_VERBOSE) \
++    MSG_CHOICE_NOTIF(1, 1, CHOICE_FRAG,                      MSG_CENTER,  CENTER_DEATH_MURDER_FRAG,         CENTER_DEATH_MURDER_FRAG_VERBOSE) \
++    MSG_CHOICE_NOTIF(1, 1, CHOICE_FRAGGED,                   MSG_CENTER,  CENTER_DEATH_MURDER_FRAGGED,      CENTER_DEATH_MURDER_FRAGGED_VERBOSE) \
++    MSG_CHOICE_NOTIF(1, 1, CHOICE_TYPEFRAG,                  MSG_CENTER,  CENTER_DEATH_MURDER_TYPEFRAG,     CENTER_DEATH_MURDER_TYPEFRAG_VERBOSE) \
++    MSG_CHOICE_NOTIF(1, 1, CHOICE_TYPEFRAGGED,               MSG_CENTER,  CENTER_DEATH_MURDER_TYPEFRAGGED,  CENTER_DEATH_MURDER_TYPEFRAGGED_VERBOSE)
++    //MSG_CHOICE_NOTIF(2, CHOICE_)
  
  
  // ===========================
@@@ -1005,196 -1046,196 +1059,196 @@@ string arg_slot[NOTIF_MAX_ARGS]
  #define NOTIF_HIT_UNKNOWN(token,funcname) { backtrace(sprintf("%s: Hit unknown token in selected string! '%s'\n", funcname, selected)); break; }
  
  #define KILL_SPREE_LIST \
--      SPREE_ITEM(3, 03, _("TRIPLE FRAG! "), _("%s^K1 made a TRIPLE FRAG! %s^BG"), _("%s^K1 made a TRIPLE SCORE! %s^BG")) \
--      SPREE_ITEM(5, 05, _("RAGE! "), _("%s^K1 unlocked RAGE! %s^BG"), _("%s^K1 made FIVE SCORES IN A ROW! %s^BG")) \
--      SPREE_ITEM(10, 10, _("MASSACRE! "), _("%s^K1 started a MASSACRE! %s^BG"), _("%s^K1 made TEN SCORES IN A ROW! %s^BG")) \
--      SPREE_ITEM(15, 15, _("MAYHEM! "), _("%s^K1 executed MAYHEM! %s^BG"), _("%s^K1 made FIFTEEN SCORES IN A ROW! %s^BG")) \
--      SPREE_ITEM(20, 20, _("BERSERKER! "), _("%s^K1 is a BERSERKER! %s^BG"), _("%s^K1 made TWENTY SCORES IN A ROW! %s^BG")) \
--      SPREE_ITEM(25, 25, _("CARNAGE! "), _("%s^K1 inflicts CARNAGE! %s^BG"), _("%s^K1 made TWENTY FIVE SCORES IN A ROW! %s^BG")) \
--      SPREE_ITEM(30, 30, _("ARMAGEDDON! "), _("%s^K1 unleashes ARMAGEDDON! %s^BG"), _("%s^K1 made THIRTY SCORES IN A ROW! %s^BG"))
++    SPREE_ITEM(3, 03, _("TRIPLE FRAG! "), _("%s^K1 made a TRIPLE FRAG! %s^BG"), _("%s^K1 made a TRIPLE SCORE! %s^BG")) \
++    SPREE_ITEM(5, 05, _("RAGE! "), _("%s^K1 unlocked RAGE! %s^BG"), _("%s^K1 made FIVE SCORES IN A ROW! %s^BG")) \
++    SPREE_ITEM(10, 10, _("MASSACRE! "), _("%s^K1 started a MASSACRE! %s^BG"), _("%s^K1 made TEN SCORES IN A ROW! %s^BG")) \
++    SPREE_ITEM(15, 15, _("MAYHEM! "), _("%s^K1 executed MAYHEM! %s^BG"), _("%s^K1 made FIFTEEN SCORES IN A ROW! %s^BG")) \
++    SPREE_ITEM(20, 20, _("BERSERKER! "), _("%s^K1 is a BERSERKER! %s^BG"), _("%s^K1 made TWENTY SCORES IN A ROW! %s^BG")) \
++    SPREE_ITEM(25, 25, _("CARNAGE! "), _("%s^K1 inflicts CARNAGE! %s^BG"), _("%s^K1 made TWENTY FIVE SCORES IN A ROW! %s^BG")) \
++    SPREE_ITEM(30, 30, _("ARMAGEDDON! "), _("%s^K1 unleashes ARMAGEDDON! %s^BG"), _("%s^K1 made THIRTY SCORES IN A ROW! %s^BG"))
  
  #ifdef CSQC
  string notif_arg_frag_ping(float newline, float fping)
  {
--      if(fping == NO_MSG)
--              return sprintf(CCR(_("%s(^F1Bot^BG)")), (newline ? "\n" : " "));
--      else
--              return sprintf(CCR(_("%s(Ping ^F1%d^BG)")), (newline ? "\n" : " "), fping);
++    if(fping == NO_MSG)
++        return sprintf(CCR(_("%s(^F1Bot^BG)")), (newline ? "\n" : " "));
++    else
++        return sprintf(CCR(_("%s(Ping ^F1%d^BG)")), (newline ? "\n" : " "), fping);
  }
  
  string notif_arg_frag_stats(float fhealth, float farmor, float fping)
  {
--      if (!(fhealth < 1))
--              return sprintf(CCR(_("\n(Health ^1%d^BG / Armor ^2%d^BG)%s")), fhealth, farmor, notif_arg_frag_ping(FALSE, fping));
--      else
--              return sprintf(CCR(_("\n(^F4Dead^BG)%s")), notif_arg_frag_ping(FALSE, fping));
++    if (!(fhealth < 1))
++        return sprintf(CCR(_("\n(Health ^1%d^BG / Armor ^2%d^BG)%s")), fhealth, farmor, notif_arg_frag_ping(FALSE, fping));
++    else
++        return sprintf(CCR(_("\n(^F4Dead^BG)%s")), notif_arg_frag_ping(FALSE, fping));
  }
  
- string notif_arg_missing_teams(float f1, float f2, float f3, float f4)
+ string notif_arg_missing_teams(float f1)
  {
--      return sprintf("%s%s%s%s",
-               (f1 ?
-                       sprintf("%s%s", Team_ColoredFullName(f1 - 1), ((f2 + f3 + f4) ? ", " : ""))
 -              ((f1 & 1) ?
 -                      sprintf("%s%s", Team_ColoredFullName(NUM_TEAM_1), ((f1 & (2 + 4 + 8)) ? ", " : ""))
--                      :
--                      ""
--              ),
-               (f2 ?
-                       sprintf("%s%s", Team_ColoredFullName(f2 - 1), ((f3 + f4) ? ", " : ""))
 -              ((f1 & 2) ?
 -                      sprintf("%s%s", Team_ColoredFullName(NUM_TEAM_2), ((f1 & (4 + 8)) ? ", " : ""))
--                      :
--                      ""
--              ),
-               (f3 ?
-                       sprintf("%s%s", Team_ColoredFullName(f3 - 1), (f4 ? ", " : ""))
 -              ((f1 & 4) ?
 -                      sprintf("%s%s", Team_ColoredFullName(NUM_TEAM_3), ((f1 & 8) ? ", " : ""))
--                      :
--                      ""
--              ),
-               (f4 ?
-                       Team_ColoredFullName(f4 - 1)
 -              ((f1 & 8) ?
 -                      Team_ColoredFullName(NUM_TEAM_4)
--                      :
--                      ""
--              )
--      );
++    return sprintf("%s%s%s%s",
++        ((f1 & 1) ?
++            sprintf("%s%s", Team_ColoredFullName(NUM_TEAM_1), ((f1 & (2 + 4 + 8)) ? ", " : ""))
++            :
++            ""
++        ),
++        ((f1 & 2) ?
++            sprintf("%s%s", Team_ColoredFullName(NUM_TEAM_2), ((f1 & (4 + 8)) ? ", " : ""))
++            :
++            ""
++        ),
++        ((f1 & 4) ?
++            sprintf("%s%s", Team_ColoredFullName(NUM_TEAM_3), ((f1 & 8) ? ", " : ""))
++            :
++            ""
++        ),
++        ((f1 & 8) ?
++            Team_ColoredFullName(NUM_TEAM_4)
++            :
++            ""
++        )
++    );
  }
  
  string notif_arg_spree_cen(float spree)
  {
--      // 0 = off, 1 = target (but only for first victim) and attacker
--      if(autocvar_notification_show_sprees_center)
--      {
--              if(spree > 1)
--              {
--                      #define SPREE_ITEM(counta,countb,center,normal,gentle) \
--                              case counta: { return normal_or_gentle(center, sprintf(_("%d score spree! "), spree)); }
--
--                      switch(spree)
--                      {
--                              KILL_SPREE_LIST
--                              default:
--                              {
--                                      if (!autocvar_notification_show_sprees_center_specialonly)
--                                      {
--                                              return
--                                                      sprintf(
--                                                              normal_or_gentle(
--                                                                      _("%d frag spree! "),
--                                                                      _("%d score spree! ")
--                                                              ),
--                                                              spree);
--                                      }
--                                      else { return ""; } // don't show spree information if it isn't an achievement
--                              }
--                      }
--
--                      #undef SPREE_ITEM
--              }
--              else if(spree == -1) // first blood
--              {
--                      return normal_or_gentle(_("First blood! "), _("First score! "));
--              }
--              else if(spree == -2) // first victim
--              {
--                      return normal_or_gentle(_("First victim! "), _("First casualty! "));
--              }
--      }
--      return "";
++    // 0 = off, 1 = target (but only for first victim) and attacker
++    if(autocvar_notification_show_sprees_center)
++    {
++        if(spree > 1)
++        {
++            #define SPREE_ITEM(counta,countb,center,normal,gentle) \
++                case counta: { return normal_or_gentle(center, sprintf(_("%d score spree! "), spree)); }
++
++            switch(spree)
++            {
++                KILL_SPREE_LIST
++                default:
++                {
++                    if (!autocvar_notification_show_sprees_center_specialonly)
++                    {
++                        return
++                            sprintf(
++                                normal_or_gentle(
++                                    _("%d frag spree! "),
++                                    _("%d score spree! ")
++                                ),
++                                spree);
++                    }
++                    else { return ""; } // don't show spree information if it isn't an achievement
++                }
++            }
++
++            #undef SPREE_ITEM
++        }
++        else if(spree == -1) // first blood
++        {
++            return normal_or_gentle(_("First blood! "), _("First score! "));
++        }
++        else if(spree == -2) // first victim
++        {
++            return normal_or_gentle(_("First victim! "), _("First casualty! "));
++        }
++    }
++    return "";
  }
  #endif
  
  string notif_arg_spree_inf(float type, string input, string player, float spree)
  {
--      switch(type)
--      {
--              case 1: // attacker kill spree
--              {
--                      // 0 = off, 1 = target only, 2 = attacker only, 3 = target and attacker
--                      // this conditional (& 2) is true for 2 and 3
--                      if(autocvar_notification_show_sprees_info & 2)
--                      {
--                              #ifdef CSQC
--                              string spree_newline =
--                                      ( autocvar_notification_show_sprees_info_newline ?
--                                              ((substring(input, 0, 1) == "\{3}") ? "\n\{3}" : "\n") : "" );
--                              #else
--                              string spree_newline =
--                                      (autocvar_notification_show_sprees_info_newline ? "\n" : "");
--                              #endif
--
--                              if(spree > 1)
--                              {
--                                      #define SPREE_ITEM(counta,countb,center,normal,gentle) \
--                                              case counta: { return sprintf(CCR(normal_or_gentle(normal, gentle)), player, spree_newline); }
--
--                                      switch(spree)
--                                      {
--                                              KILL_SPREE_LIST
--                                              default:
--                                              {
--                                                      if (!autocvar_notification_show_sprees_info_specialonly)
--                                                      {
--                                                              return
--                                                                      sprintf(
--                                                                              CCR(normal_or_gentle(
--                                                                                      _("%s^K1 has %d frags in a row! %s^BG"),
--                                                                                      _("%s^K1 made %d scores in a row! %s^BG")
--                                                                              )),
--                                                                              player,
--                                                                              spree,
--                                                                              spree_newline
--                                                                      );
--                                                      }
--                                                      else { return ""; } // don't show spree information if it isn't an achievement
--                                              }
--                                      }
--
--                                      #undef SPREE_ITEM
--                              }
--                              else if(spree == -1) // firstblood
--                              {
--                                      return
--                                              sprintf(
--                                                      CCR(normal_or_gentle(
--                                                              _("%s^K1 drew first blood! %s^BG"),
--                                                              _("%s^K1 got the first score! %s^BG")
--                                                      )),
--                                                      player,
--                                                      spree_newline
--                                              );
--                              }
--                      }
--                      break;
--              }
--
--              case -1: // kill spree ended
--              {
--                      if((spree > 1) && (autocvar_notification_show_sprees_info & 1))
--                      {
--                              return
--                                      sprintf(normal_or_gentle(
--                                              _(", ending their %d frag spree"),
--                                              _(", ending their %d score spree")
--                                              ),
--                                              spree
--                                      );
--                      }
--                      break;
--              }
--
--              case -2: // kill spree lost
--              {
--                      if((spree > 1) && (autocvar_notification_show_sprees_info & 1))
--                      {
--                              return
--                                      sprintf(normal_or_gentle(
--                                              _(", losing their %d frag spree"),
--                                              _(", losing their %d score spree")
--                                              ),
--                                              spree
--                                      );
--                      }
--                      break;
--              }
--      }
--      return "";
++    switch(type)
++    {
++        case 1: // attacker kill spree
++        {
++            // 0 = off, 1 = target only, 2 = attacker only, 3 = target and attacker
++            // this conditional (& 2) is true for 2 and 3
++            if(autocvar_notification_show_sprees_info & 2)
++            {
++                #ifdef CSQC
++                string spree_newline =
++                    ( autocvar_notification_show_sprees_info_newline ?
++                        ((substring(input, 0, 1) == "\{3}") ? "\n\{3}" : "\n") : "" );
++                #else
++                string spree_newline =
++                    (autocvar_notification_show_sprees_info_newline ? "\n" : "");
++                #endif
++
++                if(spree > 1)
++                {
++                    #define SPREE_ITEM(counta,countb,center,normal,gentle) \
++                        case counta: { return sprintf(CCR(normal_or_gentle(normal, gentle)), player, spree_newline); }
++
++                    switch(spree)
++                    {
++                        KILL_SPREE_LIST
++                        default:
++                        {
++                            if (!autocvar_notification_show_sprees_info_specialonly)
++                            {
++                                return
++                                    sprintf(
++                                        CCR(normal_or_gentle(
++                                            _("%s^K1 has %d frags in a row! %s^BG"),
++                                            _("%s^K1 made %d scores in a row! %s^BG")
++                                        )),
++                                        player,
++                                        spree,
++                                        spree_newline
++                                    );
++                            }
++                            else { return ""; } // don't show spree information if it isn't an achievement
++                        }
++                    }
++
++                    #undef SPREE_ITEM
++                }
++                else if(spree == -1) // firstblood
++                {
++                    return
++                        sprintf(
++                            CCR(normal_or_gentle(
++                                _("%s^K1 drew first blood! %s^BG"),
++                                _("%s^K1 got the first score! %s^BG")
++                            )),
++                            player,
++                            spree_newline
++                        );
++                }
++            }
++            break;
++        }
++
++        case -1: // kill spree ended
++        {
++            if((spree > 1) && (autocvar_notification_show_sprees_info & 1))
++            {
++                return
++                    sprintf(normal_or_gentle(
++                        _(", ending their %d frag spree"),
++                        _(", ending their %d score spree")
++                        ),
++                        spree
++                    );
++            }
++            break;
++        }
++
++        case -2: // kill spree lost
++        {
++            if((spree > 1) && (autocvar_notification_show_sprees_info & 1))
++            {
++                return
++                    sprintf(normal_or_gentle(
++                        _(", losing their %d frag spree"),
++                        _(", losing their %d score spree")
++                        ),
++                        spree
++                    );
++            }
++            break;
++        }
++    }
++    return "";
  }
  
  
@@@ -1275,258 -1316,259 +1329,259 @@@ float notif_error
  float notif_global_error;
  
  #define MSG_ANNCE_NOTIF(default,name,channel,sound,volume,position) \
--      NOTIF_ADD_AUTOCVAR(name, default) \
--      float name; \
--      void RegisterNotification_##name() \
--      { \
--              SET_FIELD_COUNT(name, NOTIF_FIRST, NOTIF_ANNCE_COUNT) \
--              CHECK_MAX_COUNT(name, NOTIF_ANNCE_MAX, NOTIF_ANNCE_COUNT, "MSG_ANNCE") \
--              Create_Notification_Entity( \
--                      /* COMMON ======================== */ \
--                      default,            /* var_default */ \
--                      ACVNN(name),        /* var_cvar    */ \
--                      MSG_ANNCE,          /* typeid      */ \
--                      name,               /* nameid      */ \
--                      strtoupper(#name),  /* namestring  */ \
--                      NO_MSG,             /* strnum      */ \
--                      NO_MSG,             /* flnum       */ \
--                      /* ANNCE ============= */ \
--                      channel,   /* channel  */ \
--                      sound,     /* snd      */ \
--                      volume,    /* vol      */ \
--                      position,  /* position */ \
--                      /* INFO & CENTER == */ \
--                      "",      /* args    */ \
--                      "",      /* hudargs */ \
--                      "",      /* icon    */ \
--                      NO_MSG,  /* cpid    */ \
--                      "",      /* durcnt  */ \
--                      "",      /* normal  */ \
--                      "",      /* gentle  */ \
--                      /* MULTI ============= */ \
--                      NO_MSG,  /* anncename  */ \
--                      NO_MSG,  /* infoname   */ \
--                      NO_MSG,  /* centername */ \
--                      /* MSG_CHOICE ========== */ \
--                      NO_MSG,   /* challow_def */ \
--                      NO_MSG,   /* challow_var */ \
--                      NO_MSG,   /* chtype      */ \
--                      NO_MSG,   /* optiona     */ \
--                      NO_MSG);  /* optionb     */ \
--      } \
--      ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name);
++    NOTIF_ADD_AUTOCVAR(name, default) \
++    float name; \
++    void RegisterNotification_##name() \
++    { \
++        SET_FIELD_COUNT(name, NOTIF_FIRST, NOTIF_ANNCE_COUNT) \
++        CHECK_MAX_COUNT(name, NOTIF_ANNCE_MAX, NOTIF_ANNCE_COUNT, "MSG_ANNCE") \
++        Create_Notification_Entity( \
++            /* COMMON ======================== */ \
++            default,            /* var_default */ \
++            ACVNN(name),        /* var_cvar    */ \
++            MSG_ANNCE,          /* typeid      */ \
++            name,               /* nameid      */ \
++            strtoupper(#name),  /* namestring  */ \
++            NO_MSG,             /* strnum      */ \
++            NO_MSG,             /* flnum       */ \
++            /* ANNCE ============= */ \
++            channel,   /* channel  */ \
++            sound,     /* snd      */ \
++            volume,    /* vol      */ \
++            position,  /* position */ \
++            /* INFO & CENTER == */ \
++            "",      /* args    */ \
++            "",      /* hudargs */ \
++            "",      /* icon    */ \
++            NO_MSG,  /* cpid    */ \
++            "",      /* durcnt  */ \
++            "",      /* normal  */ \
++            "",      /* gentle  */ \
++            /* MULTI ============= */ \
++            NO_MSG,  /* anncename  */ \
++            NO_MSG,  /* infoname   */ \
++            NO_MSG,  /* centername */ \
++            /* MSG_CHOICE ========== */ \
++            NO_MSG,   /* challow_def */ \
++            NO_MSG,   /* challow_var */ \
++            NO_MSG,   /* chtype      */ \
++            NO_MSG,   /* optiona     */ \
++            NO_MSG);  /* optionb     */ \
++    } \
++    ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name);
  
  #define MSG_INFO_NOTIF(default,name,strnum,flnum,args,hudargs,icon,normal,gentle) \
--      NOTIF_ADD_AUTOCVAR(name, default) \
--      float name; \
--      void RegisterNotification_##name() \
--      { \
--              SET_FIELD_COUNT(name, NOTIF_FIRST, NOTIF_INFO_COUNT) \
--              CHECK_MAX_COUNT(name, NOTIF_INFO_MAX, NOTIF_INFO_COUNT, "MSG_INFO") \
--              Create_Notification_Entity( \
--                      /* COMMON ======================== */ \
--                      default,            /* var_default */ \
--                      ACVNN(name),        /* var_cvar    */ \
--                      MSG_INFO,           /* typeid      */ \
--                      name,               /* nameid      */ \
--                      strtoupper(#name),  /* namestring  */ \
--                      strnum,             /* strnum      */ \
--                      flnum,              /* flnum       */ \
--                      /* ANNCE =========== */ \
--                      NO_MSG,  /* channel  */ \
--                      "",      /* snd      */ \
--                      NO_MSG,  /* vol      */ \
--                      NO_MSG,  /* position */ \
--                      /* INFO & CENTER === */ \
--                      args,     /* args    */ \
--                      hudargs,  /* hudargs */ \
--                      icon,     /* icon    */ \
--                      NO_MSG,   /* cpid    */ \
--                      "",       /* durcnt  */ \
--                      normal,   /* normal  */ \
--                      gentle,   /* gentle  */ \
--                      /* MULTI ============= */ \
--                      NO_MSG,  /* anncename  */ \
--                      NO_MSG,  /* infoname   */ \
--                      NO_MSG,  /* centername */ \
--                      /* CHOICE ============== */ \
--                      NO_MSG,   /* challow_def */ \
--                      NO_MSG,   /* challow_var */ \
--                      NO_MSG,   /* chtype      */ \
--                      NO_MSG,   /* optiona     */ \
--                      NO_MSG);  /* optionb     */ \
--      } \
--      ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name);
++    NOTIF_ADD_AUTOCVAR(name, default) \
++    float name; \
++    void RegisterNotification_##name() \
++    { \
++        SET_FIELD_COUNT(name, NOTIF_FIRST, NOTIF_INFO_COUNT) \
++        CHECK_MAX_COUNT(name, NOTIF_INFO_MAX, NOTIF_INFO_COUNT, "MSG_INFO") \
++        Create_Notification_Entity( \
++            /* COMMON ======================== */ \
++            default,            /* var_default */ \
++            ACVNN(name),        /* var_cvar    */ \
++            MSG_INFO,           /* typeid      */ \
++            name,               /* nameid      */ \
++            strtoupper(#name),  /* namestring  */ \
++            strnum,             /* strnum      */ \
++            flnum,              /* flnum       */ \
++            /* ANNCE =========== */ \
++            NO_MSG,  /* channel  */ \
++            "",      /* snd      */ \
++            NO_MSG,  /* vol      */ \
++            NO_MSG,  /* position */ \
++            /* INFO & CENTER === */ \
++            args,     /* args    */ \
++            hudargs,  /* hudargs */ \
++            icon,     /* icon    */ \
++            NO_MSG,   /* cpid    */ \
++            "",       /* durcnt  */ \
++            normal,   /* normal  */ \
++            gentle,   /* gentle  */ \
++            /* MULTI ============= */ \
++            NO_MSG,  /* anncename  */ \
++            NO_MSG,  /* infoname   */ \
++            NO_MSG,  /* centername */ \
++            /* CHOICE ============== */ \
++            NO_MSG,   /* challow_def */ \
++            NO_MSG,   /* challow_var */ \
++            NO_MSG,   /* chtype      */ \
++            NO_MSG,   /* optiona     */ \
++            NO_MSG);  /* optionb     */ \
++    } \
++    ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name);
  
  #define MSG_CENTER_NOTIF(default,name,strnum,flnum,args,cpid,durcnt,normal,gentle) \
--      NOTIF_ADD_AUTOCVAR(name, default) \
--      float name; \
--      float cpid; \
--      void RegisterNotification_##name() \
--      { \
--              SET_FIELD_COUNT(name, NOTIF_FIRST, NOTIF_CENTER_COUNT) \
--              SET_FIELD_COUNT(cpid, NOTIF_FIRST, NOTIF_CPID_COUNT) \
--              CHECK_MAX_COUNT(name, NOTIF_CENTER_MAX, NOTIF_CENTER_COUNT, "MSG_CENTER") \
--              Create_Notification_Entity( \
--                      /* COMMON ======================== */ \
--                      default,            /* var_default */ \
--                      ACVNN(name),        /* var_cvar    */ \
--                      MSG_CENTER,         /* typeid      */ \
--                      name,               /* nameid      */ \
--                      strtoupper(#name),  /* namestring  */ \
--                      strnum,             /* strnum      */ \
--                      flnum,              /* flnum       */ \
--                      /* ANNCE =========== */ \
--                      NO_MSG,  /* channel  */ \
--                      "",      /* snd      */ \
--                      NO_MSG,  /* vol      */ \
--                      NO_MSG,  /* position */ \
--                      /* INFO & CENTER == */ \
--                      args,    /* args    */ \
--                      "",      /* hudargs */ \
--                      "",      /* icon    */ \
--                      cpid,    /* cpid    */ \
--                      durcnt,  /* durcnt  */ \
--                      normal,  /* normal  */ \
--                      gentle,  /* gentle  */ \
--                      /* MULTI ============= */ \
--                      NO_MSG,  /* anncename  */ \
--                      NO_MSG,  /* infoname   */ \
--                      NO_MSG,  /* centername */ \
--                      /* CHOICE ============== */ \
--                      NO_MSG,   /* challow_def */ \
--                      NO_MSG,   /* challow_var */ \
--                      NO_MSG,   /* chtype      */ \
--                      NO_MSG,   /* optiona     */ \
--                      NO_MSG);  /* optionb     */ \
--      } \
--      ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name);
++    NOTIF_ADD_AUTOCVAR(name, default) \
++    float name; \
++    float cpid; \
++    void RegisterNotification_##name() \
++    { \
++        SET_FIELD_COUNT(name, NOTIF_FIRST, NOTIF_CENTER_COUNT) \
++        SET_FIELD_COUNT(cpid, NOTIF_FIRST, NOTIF_CPID_COUNT) \
++        CHECK_MAX_COUNT(name, NOTIF_CENTER_MAX, NOTIF_CENTER_COUNT, "MSG_CENTER") \
++        Create_Notification_Entity( \
++            /* COMMON ======================== */ \
++            default,            /* var_default */ \
++            ACVNN(name),        /* var_cvar    */ \
++            MSG_CENTER,         /* typeid      */ \
++            name,               /* nameid      */ \
++            strtoupper(#name),  /* namestring  */ \
++            strnum,             /* strnum      */ \
++            flnum,              /* flnum       */ \
++            /* ANNCE =========== */ \
++            NO_MSG,  /* channel  */ \
++            "",      /* snd      */ \
++            NO_MSG,  /* vol      */ \
++            NO_MSG,  /* position */ \
++            /* INFO & CENTER == */ \
++            args,    /* args    */ \
++            "",      /* hudargs */ \
++            "",      /* icon    */ \
++            cpid,    /* cpid    */ \
++            durcnt,  /* durcnt  */ \
++            normal,  /* normal  */ \
++            gentle,  /* gentle  */ \
++            /* MULTI ============= */ \
++            NO_MSG,  /* anncename  */ \
++            NO_MSG,  /* infoname   */ \
++            NO_MSG,  /* centername */ \
++            /* CHOICE ============== */ \
++            NO_MSG,   /* challow_def */ \
++            NO_MSG,   /* challow_var */ \
++            NO_MSG,   /* chtype      */ \
++            NO_MSG,   /* optiona     */ \
++            NO_MSG);  /* optionb     */ \
++    } \
++    ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name);
  
  #define MSG_MULTI_NOTIF(default,name,anncename,infoname,centername) \
--      NOTIF_ADD_AUTOCVAR(name, default) \
--      float name; \
--      void RegisterNotification_##name() \
--      { \
--              SET_FIELD_COUNT(name, NOTIF_FIRST, NOTIF_MULTI_COUNT) \
--              CHECK_MAX_COUNT(name, NOTIF_MULTI_MAX, NOTIF_MULTI_COUNT, "MSG_MULTI") \
--              Create_Notification_Entity( \
--                      /* COMMON ======================== */ \
--                      default,            /* var_default */ \
--                      ACVNN(name),        /* var_cvar    */ \
--                      MSG_MULTI,          /* typeid      */ \
--                      name,               /* nameid      */ \
--                      strtoupper(#name),  /* namestring  */ \
--                      NO_MSG,             /* strnum      */ \
--                      NO_MSG,             /* flnum       */ \
--                      /* ANNCE =========== */ \
--                      NO_MSG,  /* channel  */ \
--                      "",      /* snd      */ \
--                      NO_MSG,  /* vol      */ \
--                      NO_MSG,  /* position */ \
--                      /* INFO & CENTER == */ \
--                      "",      /* args    */ \
--                      "",      /* hudargs */ \
--                      "",      /* icon    */ \
--                      NO_MSG,  /* cpid    */ \
--                      "",      /* durcnt  */ \
--                      "",      /* normal  */ \
--                      "",      /* gentle  */ \
--                      /* MULTI ================= */ \
--                      anncename,   /* anncename  */ \
--                      infoname,    /* infoname   */ \
--                      centername,  /* centername */ \
--                      /* CHOICE ============== */ \
--                      NO_MSG,   /* challow_def */ \
--                      NO_MSG,   /* challow_var */ \
--                      NO_MSG,   /* chtype      */ \
--                      NO_MSG,   /* optiona     */ \
--                      NO_MSG);  /* optionb     */ \
--      } \
--      ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name);
++    NOTIF_ADD_AUTOCVAR(name, default) \
++    float name; \
++    void RegisterNotification_##name() \
++    { \
++        SET_FIELD_COUNT(name, NOTIF_FIRST, NOTIF_MULTI_COUNT) \
++        CHECK_MAX_COUNT(name, NOTIF_MULTI_MAX, NOTIF_MULTI_COUNT, "MSG_MULTI") \
++        Create_Notification_Entity( \
++            /* COMMON ======================== */ \
++            default,            /* var_default */ \
++            ACVNN(name),        /* var_cvar    */ \
++            MSG_MULTI,          /* typeid      */ \
++            name,               /* nameid      */ \
++            strtoupper(#name),  /* namestring  */ \
++            NO_MSG,             /* strnum      */ \
++            NO_MSG,             /* flnum       */ \
++            /* ANNCE =========== */ \
++            NO_MSG,  /* channel  */ \
++            "",      /* snd      */ \
++            NO_MSG,  /* vol      */ \
++            NO_MSG,  /* position */ \
++            /* INFO & CENTER == */ \
++            "",      /* args    */ \
++            "",      /* hudargs */ \
++            "",      /* icon    */ \
++            NO_MSG,  /* cpid    */ \
++            "",      /* durcnt  */ \
++            "",      /* normal  */ \
++            "",      /* gentle  */ \
++            /* MULTI ================= */ \
++            anncename,   /* anncename  */ \
++            infoname,    /* infoname   */ \
++            centername,  /* centername */ \
++            /* CHOICE ============== */ \
++            NO_MSG,   /* challow_def */ \
++            NO_MSG,   /* challow_var */ \
++            NO_MSG,   /* chtype      */ \
++            NO_MSG,   /* optiona     */ \
++            NO_MSG);  /* optionb     */ \
++    } \
++    ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name);
  
  #define ACVNN(name) autocvar_notification_##name
  
  #define MSG_CHOICE_NOTIF(default,challow,name,chtype,optiona,optionb) \
--      NOTIF_ADD_AUTOCVAR(name, default) \
--      NOTIF_ADD_AUTOCVAR(name##_ALLOWED, challow) \
--      float name; \
--      void RegisterNotification_##name() \
--      { \
--              SET_FIELD_COUNT(name, NOTIF_FIRST, NOTIF_CHOICE_COUNT) \
--              CHECK_MAX_COUNT(name, NOTIF_CHOICE_MAX, NOTIF_CHOICE_COUNT, "MSG_CHOICE") \
--              Create_Notification_Entity( \
--                      /* COMMON ======================== */ \
--                      default,            /* var_default */ \
--                      ACVNN(name),        /* var_cvar    */ \
--                      MSG_CHOICE,         /* typeid      */ \
--                      name,               /* nameid      */ \
--                      strtoupper(#name),  /* namestring  */ \
--                      NO_MSG,             /* strnum      */ \
--                      NO_MSG,             /* flnum       */ \
--                      /* ANNCE =========== */ \
--                      NO_MSG,  /* channel  */ \
--                      "",      /* snd      */ \
--                      NO_MSG,  /* vol      */ \
--                      NO_MSG,  /* position */ \
--                      /* INFO & CENTER == */ \
--                      "",      /* args    */ \
--                      "",      /* hudargs */ \
--                      "",      /* icon    */ \
--                      NO_MSG,  /* cpid    */ \
--                      "",      /* durcnt  */ \
--                      "",      /* normal  */ \
--                      "",      /* gentle  */ \
--                      /* MULTI ============= */ \
--                      NO_MSG,  /* anncename  */ \
--                      NO_MSG,  /* infoname   */ \
--                      NO_MSG,  /* centername */ \
--                      /* CHOICE ============================================= */ \
--                      challow,                                 /* challow_def */ \
--                      autocvar_notification_##name##_ALLOWED,  /* challow_var */ \
--                      chtype,                                  /* chtype      */ \
--                      optiona,                                 /* optiona     */ \
--                      optionb);                                /* optionb     */ \
--      } \
--      ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name);
++    NOTIF_ADD_AUTOCVAR(name, default) \
++    NOTIF_ADD_AUTOCVAR(name##_ALLOWED, challow) \
++    float name; \
++    void RegisterNotification_##name() \
++    { \
++        SET_FIELD_COUNT(name, NOTIF_FIRST, NOTIF_CHOICE_COUNT) \
++        CHECK_MAX_COUNT(name, NOTIF_CHOICE_MAX, NOTIF_CHOICE_COUNT, "MSG_CHOICE") \
++        Create_Notification_Entity( \
++            /* COMMON ======================== */ \
++            default,            /* var_default */ \
++            ACVNN(name),        /* var_cvar    */ \
++            MSG_CHOICE,         /* typeid      */ \
++            name,               /* nameid      */ \
++            strtoupper(#name),  /* namestring  */ \
++            NO_MSG,             /* strnum      */ \
++            NO_MSG,             /* flnum       */ \
++            /* ANNCE =========== */ \
++            NO_MSG,  /* channel  */ \
++            "",      /* snd      */ \
++            NO_MSG,  /* vol      */ \
++            NO_MSG,  /* position */ \
++            /* INFO & CENTER == */ \
++            "",      /* args    */ \
++            "",      /* hudargs */ \
++            "",      /* icon    */ \
++            NO_MSG,  /* cpid    */ \
++            "",      /* durcnt  */ \
++            "",      /* normal  */ \
++            "",      /* gentle  */ \
++            /* MULTI ============= */ \
++            NO_MSG,  /* anncename  */ \
++            NO_MSG,  /* infoname   */ \
++            NO_MSG,  /* centername */ \
++            /* CHOICE ============================================= */ \
++            challow,                                 /* challow_def */ \
++            autocvar_notification_##name##_ALLOWED,  /* challow_var */ \
++            chtype,                                  /* chtype      */ \
++            optiona,                                 /* optiona     */ \
++            optionb);                                /* optionb     */ \
++    } \
++    ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name);
  
  void RegisterNotifications_First()
  {
--      notif_global_error = FALSE;
--
--      #ifdef SVQC
--      #define dedi (server_is_dedicated ? "a dedicated " : "")
--      #else
--      #define dedi ""
--      #endif
--
--      printf("Beginning notification initialization on %s%s program...\n", dedi, PROGNAME);
 -      #undef dedi
--
--      // maybe do another implementation of this with checksums? for now, we don't need versioning
--      /*if(autocvar_notification_version != NOTIF_VERSION)
--      {
--              #ifdef CSQC
--              if(autocvar_notification_version_mismatch_client_error)
--              #else
--              if(autocvar_notification_version_mismatch_server_error)
--              #endif
--                      notif_global_error = TRUE;
--
--              printf("^1NOTIFICATION VERSION MISMATCH: ^7program = %s, config = %d, code = %d.\n",
--                      PROGNAME, autocvar_notification_version, NOTIF_VERSION);
--      }*/
++    notif_global_error = FALSE;
++
++    #ifdef SVQC
++    #define dedi (server_is_dedicated ? "a dedicated " : "")
++    #else
++    #define dedi ""
++    #endif
++
++    printf("Beginning notification initialization on %s%s program...\n", dedi, PROGNAME);
++    #undef dedi
++
++    // maybe do another implementation of this with checksums? for now, we don't need versioning
++    /*if(autocvar_notification_version != NOTIF_VERSION)
++    {
++        #ifdef CSQC
++        if(autocvar_notification_version_mismatch_client_error)
++        #else
++        if(autocvar_notification_version_mismatch_server_error)
++        #endif
++            notif_global_error = TRUE;
++
++        printf("^1NOTIFICATION VERSION MISMATCH: ^7program = %s, config = %d, code = %d.\n",
++            PROGNAME, autocvar_notification_version, NOTIF_VERSION);
++    }*/
  }
  
  void RegisterNotifications_Done()
  {
--      if(notif_global_error)
--      {
--              // shit happened... stop the loading of the program now if this is unacceptable
--              if(autocvar_notification_errors_are_fatal)
--                      error("Notification initialization failed! Read above and fix the errors!\n");
--              else
--                      print("Notification initialization failed! Read above and fix the errors!\n");
--      }
--      else { print("Notification initialization successful!\n"); }
++    if(notif_global_error)
++    {
++        // shit happened... stop the loading of the program now if this is unacceptable
++        if(autocvar_notification_errors_are_fatal)
++            error("Notification initialization failed! Read above and fix the errors!\n");
++        else
++            print("Notification initialization failed! Read above and fix the errors!\n");
++    }
++    else { print("Notification initialization successful!\n"); }
  }
  
  // NOW we actually activate the declarations
index 0000000000000000000000000000000000000000,d92977f2c5bf4ebe9878adb42be50f40d8caaba0..ce6e005d87941ab977262ca831faf2e0b5344794
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,290 +1,290 @@@
 -// 85 empty?
 -// 86 empty?
+ // Full list of all stat constants, icnluded in a single location for easy reference
+ // 255 is the current limit (MAX_CL_STATS - 1), engine will need to be modified if you wish to add more stats
+ const float MAX_CL_STATS                = 256;
+ const float STAT_HEALTH                 = 0;
+ // 1 empty?
+ const float STAT_WEAPON                 = 2;
+ const float STAT_AMMO                   = 3;
+ const float STAT_ARMOR                  = 4;
+ const float STAT_WEAPONFRAME            = 5;
+ const float STAT_SHELLS                 = 6;
+ const float STAT_NAILS                  = 7;
+ const float STAT_ROCKETS                = 8;
+ const float STAT_CELLS                  = 9;
+ const float STAT_ACTIVEWEAPON           = 10;
+ const float STAT_TOTALSECRETS           = 11;
+ const float STAT_TOTALMONSTERS          = 12;
+ const float STAT_SECRETS                = 13;
+ const float STAT_MONSTERS               = 14;
+ const float STAT_ITEMS                  = 15;
+ const float STAT_VIEWHEIGHT             = 16;
+ // 17 empty?
+ // 18 empty?
+ // 19 empty?
+ // 20 empty?
+ const float STAT_VIEWZOOM               = 21;
+ // 22 empty?
+ // 23 empty?
+ // 24 empty?
+ // 25 empty?
+ // 26 empty?
+ // 27 empty?
+ // 28 empty?
+ // 29 empty?
+ // 30 empty?
+ // 31 empty?
+ const float STAT_KH_KEYS                = 32;
+ const float STAT_CTF_STATE              = 33;
+ // 34 empty?
+ const float STAT_WEAPONS                = 35;
+ const float STAT_SWITCHWEAPON           = 36;
+ const float STAT_GAMESTARTTIME          = 37;
+ const float STAT_STRENGTH_FINISHED      = 38;
+ const float STAT_INVINCIBLE_FINISHED    = 39;
+ // 40 empty?
+ const float STAT_ARC_HEAT               = 41;
+ const float STAT_PRESSED_KEYS           = 42;
+ const float STAT_ALLOW_OLDVORTEXBEAM    = 43; // this stat could later contain some other bits of info, like, more server-side particle config
+ const float STAT_FUEL                   = 44;
+ const float STAT_NB_METERSTART          = 45;
+ const float STAT_SHOTORG                = 46; // compressShotOrigin
+ const float STAT_LEADLIMIT              = 47;
+ const float STAT_WEAPON_CLIPLOAD        = 48;
+ const float STAT_WEAPON_CLIPSIZE        = 49;
+ const float STAT_VORTEX_CHARGE          = 50;
+ const float STAT_LAST_PICKUP            = 51;
+ const float STAT_HUD                    = 52;
+ const float STAT_VORTEX_CHARGEPOOL      = 53;
+ const float STAT_DAMAGE_DEALT_TOTAL     = 54;
+ const float STAT_TYPEHIT_TIME           = 55;
+ const float STAT_LAYED_MINES            = 56;
+ const float STAT_HAGAR_LOAD             = 57;
+ const float STAT_SWITCHINGWEAPON        = 58;
+ const float STAT_SUPERWEAPONS_FINISHED  = 59;
+ const float STAT_VEHICLESTAT_HEALTH     = 60;
+ const float STAT_VEHICLESTAT_SHIELD     = 61;
+ const float STAT_VEHICLESTAT_ENERGY     = 62;
+ const float STAT_VEHICLESTAT_AMMO1      = 63;
+ const float STAT_VEHICLESTAT_RELOAD1    = 64;
+ const float STAT_VEHICLESTAT_AMMO2      = 65;
+ const float STAT_VEHICLESTAT_RELOAD2    = 66;
+ const float STAT_VEHICLESTAT_W2MODE     = 67;
+ // 68 empty?
+ const float STAT_NADE_TIMER             = 69;
+ const float STAT_SECRETS_TOTAL          = 70;
+ const float STAT_SECRETS_FOUND          = 71;
+ const float STAT_RESPAWN_TIME           = 72;
+ const float STAT_ROUNDSTARTTIME         = 73;
+ const float STAT_WEAPONS2               = 74;
+ const float STAT_WEAPONS3               = 75;
+ const float STAT_MONSTERS_TOTAL         = 76;
+ const float STAT_MONSTERS_KILLED        = 77;
+ const float STAT_BUFFS                  = 78;
+ const float STAT_NADE_BONUS             = 79;
+ const float STAT_NADE_BONUS_TYPE        = 80;
+ const float STAT_NADE_BONUS_SCORE       = 81;
+ const float STAT_HEALING_ORB            = 82;
+ const float STAT_HEALING_ORB_ALPHA      = 83;
+ const float STAT_PLASMA                 = 84;
++const float STAT_OK_AMMO_CHARGE         = 85;
++const float STAT_OK_AMMO_CHARGEPOOl     = 86;
+ // 87 empty?
+ // 88 empty?
+ // 89 empty?
+ // 90 empty?
+ // 91 empty?
+ // 92 empty?
+ // 93 empty?
+ // 94 empty?
+ // 95 empty?
+ // 96 empty?
+ // 97 empty?
+ // 98 empty?
+ // 99 empty?
+ /* The following stats change depending on the gamemode, so can share the same ID */
+ // IDs 100 to 104 reserved for gamemodes
+ // freeze tag, clan arena, jailbreak
+ const float STAT_REDALIVE               = 100;
+ const float STAT_BLUEALIVE              = 101;
+ const float STAT_YELLOWALIVE            = 102;
+ const float STAT_PINKALIVE              = 103;
+ // domination
+ const float STAT_DOM_TOTAL_PPS          = 100;
+ const float STAT_DOM_PPS_RED            = 101;
+ const float STAT_DOM_PPS_BLUE           = 102;
+ const float STAT_DOM_PPS_YELLOW         = 103;
+ const float STAT_DOM_PPS_PINK           = 104;
+ // vip
+ const float STAT_VIP                    = 100;
+ const float STAT_VIP_RED                = 101;
+ const float STAT_VIP_BLUE               = 102;
+ const float STAT_VIP_YELLOW             = 103;
+ const float STAT_VIP_PINK               = 104;
+ // key hunt
+ const float STAT_KH_REDKEY_TEAM         = 100;
+ const float STAT_KH_BLUEKEY_TEAM        = 101;
+ const float STAT_KH_YELLOWKEY_TEAM      = 102;
+ const float STAT_KH_PINKKEY_TEAM        = 103;
+ /* Gamemode-specific stats end here */
+ const float STAT_FROZEN                 = 105;
+ const float STAT_REVIVE_PROGRESS        = 106;
+ // 107 empty?
+ // 108 empty?
+ // 109 empty?
+ // 110 empty?
+ // 111 empty?
+ // 112 empty?
+ // 113 empty?
+ // 114 empty?
+ // 115 empty?
+ // 116 empty?
+ // 117 empty?
+ // 118 empty?
+ // 119 empty?
+ // 120 empty?
+ // 121 empty?
+ // 122 empty?
+ // 123 empty?
+ // 124 empty?
+ // 125 empty?
+ // 126 empty?
+ // 127 empty?
+ // 128 empty?
+ // 129 empty?
+ // 130 empty?
+ // 131 empty?
+ // 132 empty?
+ // 133 empty?
+ // 134 empty?
+ // 135 empty?
+ // 136 empty?
+ // 137 empty?
+ // 138 empty?
+ // 139 empty?
+ // 140 empty?
+ // 141 empty?
+ // 142 empty?
+ // 143 empty?
+ // 144 empty?
+ // 145 empty?
+ // 146 empty?
+ // 147 empty?
+ // 148 empty?
+ // 149 empty?
+ // 150 empty?
+ // 151 empty?
+ // 152 empty?
+ // 153 empty?
+ // 154 empty?
+ // 155 empty?
+ // 156 empty?
+ // 157 empty?
+ // 158 empty?
+ // 159 empty?
+ // 160 empty?
+ // 161 empty?
+ // 162 empty?
+ // 162 empty?
+ // 163 empty?
+ // 164 empty?
+ // 165 empty?
+ // 166 empty?
+ // 167 empty?
+ // 168 empty?
+ // 169 empty?
+ // 170 empty?
+ // 171 empty?
+ // 172 empty?
+ // 173 empty?
+ // 174 empty?
+ // 175 empty?
+ // 176 empty?
+ // 177 empty?
+ // 178 empty?
+ // 179 empty?
+ // 180 empty?
+ // 181 empty?
+ // 182 empty?
+ // 183 empty?
+ // 184 empty?
+ // 185 empty?
+ // 186 empty?
+ // 187 empty?
+ // 188 empty?
+ // 189 empty?
+ // 190 empty?
+ // 191 empty?
+ // 192 empty?
+ // 193 empty?
+ // 194 empty?
+ // 195 empty?
+ // 196 empty?
+ // 197 empty?
+ // 198 empty?
+ // 199 empty?
+ // 200 empty?
+ // 201 empty?
+ // 202 empty?
+ // 203 empty?
+ // 204 empty?
+ // 205 empty?
+ // 206 empty?
+ // 207 empty?
+ // 208 empty?
+ // 209 empty?
+ // 210 empty?
+ // 211 empty?
+ // 212 empty?
+ // 213 empty?
+ // 214 empty?
+ // 215 empty?
+ // 216 empty?
+ // 217 empty?
+ // 218 empty?
+ // 219 empty?
+ const float STAT_MOVEVARS_AIRACCEL_QW_STRETCHFACTOR     = 220;
+ const float STAT_MOVEVARS_AIRCONTROL_PENALTY            = 221;
+ const float STAT_MOVEVARS_AIRSPEEDLIMIT_NONQW           = 222;
+ const float STAT_MOVEVARS_AIRSTRAFEACCEL_QW             = 223;
+ const float STAT_MOVEVARS_AIRCONTROL_POWER              = 224;
+ const float STAT_MOVEFLAGS                              = 225;
+ const float STAT_MOVEVARS_WARSOWBUNNY_AIRFORWARDACCEL   = 226;
+ const float STAT_MOVEVARS_WARSOWBUNNY_ACCEL             = 227;
+ const float STAT_MOVEVARS_WARSOWBUNNY_TOPSPEED          = 228;
+ const float STAT_MOVEVARS_WARSOWBUNNY_TURNACCEL         = 229;
+ const float STAT_MOVEVARS_WARSOWBUNNY_BACKTOSIDERATIO   = 230;
+ const float STAT_MOVEVARS_AIRSTOPACCELERATE             = 231;
+ const float STAT_MOVEVARS_AIRSTRAFEACCELERATE           = 232;
+ const float STAT_MOVEVARS_MAXAIRSTRAFESPEED             = 233;
+ const float STAT_MOVEVARS_AIRCONTROL                    = 234;
+ const float STAT_FRAGLIMIT                              = 235;
+ const float STAT_TIMELIMIT                              = 236;
+ const float STAT_MOVEVARS_WALLFRICTION                  = 237;
+ const float STAT_MOVEVARS_FRICTION                      = 238;
+ const float STAT_MOVEVARS_WATERFRICTION                 = 239;
+ const float STAT_MOVEVARS_TICRATE                       = 240;
+ const float STAT_MOVEVARS_TIMESCALE                     = 241;
+ const float STAT_MOVEVARS_GRAVITY                       = 242;
+ const float STAT_MOVEVARS_STOPSPEED                     = 243;
+ const float STAT_MOVEVARS_MAXSPEED                      = 244;
+ const float STAT_MOVEVARS_SPECTATORMAXSPEED             = 245;
+ const float STAT_MOVEVARS_ACCELERATE                    = 246;
+ const float STAT_MOVEVARS_AIRACCELERATE                 = 247;
+ const float STAT_MOVEVARS_WATERACCELERATE               = 248;
+ const float STAT_MOVEVARS_ENTGRAVITY                    = 249;
+ const float STAT_MOVEVARS_JUMPVELOCITY                  = 250;
+ const float STAT_MOVEVARS_EDGEFRICTION                  = 251;
+ const float STAT_MOVEVARS_MAXAIRSPEED                   = 252;
+ const float STAT_MOVEVARS_STEPHEIGHT                    = 253;
+ const float STAT_MOVEVARS_AIRACCEL_QW                   = 254;
+ const float STAT_MOVEVARS_AIRACCEL_SIDEWAYS_FRICTION    = 255;
index 0000000000000000000000000000000000000000,a40488f8383f432005f52e2ffb7d657a436b77d0..4f4cd2b3d8f35a7bf82d3f2fdda523034f1f9475
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,27 +1,29 @@@
+ // ONLY EVER ADD NEW WEAPONS AT THE END. IF YOU REMOVE ONE, PUT THE LAST ONE ON
+ // ITS PLACE. THIS IS TO AVOID UNNECESSARY RENUMBERING OF WEAPON IMPULSES.
+ // IF YOU DISREGARD THIS NOTICE, I'LL KILL YOU WITH THE @!#%'N TUBA
+ // core weapons
+ #include "w_blaster.qc"
+ #include "w_shotgun.qc"
+ #include "w_machinegun.qc"
+ #include "w_mortar.qc"
+ #include "w_minelayer.qc"
+ #include "w_electro.qc"
+ #include "w_crylink.qc"
+ #include "w_vortex.qc"
+ #include "w_hagar.qc"
+ #include "w_devastator.qc"
+ // other weapons
+ #include "w_porto.qc"
+ #include "w_vaporizer.qc"
+ #include "w_hook.qc"
+ #include "w_hlac.qc"
+ #include "w_tuba.qc"
+ #include "w_rifle.qc"
+ #include "w_fireball.qc"
+ #include "w_seeker.qc"
+ #include "w_shockwave.qc"
+ #include "w_arc.qc"
++#include "w_hmg.qc"
++#include "w_rpc.qc"
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..ecc5791ed336f7ecf0929fa233b8f5abec400092
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,207 @@@
++#ifdef REGISTER_WEAPON
++REGISTER_WEAPON(
++/* WEP_##id    */ HMG,
++/* function    */ W_HeavyMachineGun,
++/* ammotype    */ ammo_nails,
++/* impulse     */ 3,
++/* flags       */ WEP_FLAG_MUTATORBLOCKED | WEP_FLAG_HIDDEN | WEP_FLAG_NORMAL | WEP_FLAG_RELOADABLE | WEP_TYPE_HITSCAN | WEP_FLAG_SUPERWEAPON,
++/* rating      */ BOT_PICKUP_RATING_HIGH,
++/* color     */ '1 1 0',
++/* modelname */ "ok_hmg",
++/* simplemdl */ "foobar",
++/* crosshair */ "gfx/crosshairuzi 0.6",
++/* wepimg    */ "weaponhmg",
++/* refname   */ "hmg",
++/* wepname   */ _("Heavy Machine Gun")
++);
++
++#define HMG_SETTINGS(w_cvar,w_prop) HMG_SETTINGS_LIST(w_cvar, w_prop, HMG, hmg)
++#define HMG_SETTINGS_LIST(w_cvar,w_prop,id,sn) \
++      w_cvar(id, sn, NONE, spread_min) \
++      w_cvar(id, sn, NONE, spread_max) \
++      w_cvar(id, sn, NONE, spread_add) \
++      w_cvar(id, sn, NONE, solidpenetration) \
++      w_cvar(id, sn, NONE, damage) \
++      w_cvar(id, sn, NONE, force) \
++      w_cvar(id, sn, NONE, refire) \
++      w_cvar(id, sn, NONE, ammo) \
++      w_prop(id, sn, float,  reloading_ammo, reload_ammo) \
++      w_prop(id, sn, float,  reloading_time, reload_time) \
++      w_prop(id, sn, float,  switchdelay_raise, switchdelay_raise) \
++      w_prop(id, sn, float,  switchdelay_drop, switchdelay_drop) \
++      w_prop(id, sn, string, weaponreplace, weaponreplace) \
++      w_prop(id, sn, float,  weaponstart, weaponstart) \
++      w_prop(id, sn, float,  weaponstartoverride, weaponstartoverride) \
++      w_prop(id, sn, float,  weaponthrowable, weaponthrowable)
++
++#ifdef SVQC
++HMG_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
++#endif
++#else
++#ifdef SVQC
++
++void spawnfunc_weapon_hmg() { weapon_defaultspawnfunc(WEP_HMG); }
++
++void W_HeavyMachineGun_Attack_Auto()
++{
++      if (!self.BUTTON_ATCK)
++      {
++              w_ready();
++              return;
++      }
++
++      if(!WEP_ACTION(self.weapon, WR_CHECKAMMO1))
++      if(!(self.items & IT_UNLIMITED_WEAPON_AMMO))
++      {
++              W_SwitchWeapon_Force(self, w_getbestweapon(self));
++              w_ready();
++              return;
++      }
++
++      W_DecreaseAmmo(WEP_CVAR(hmg, ammo));
++
++      W_SetupShot (self, TRUE, 0, "weapons/uzi_fire.wav", CH_WEAPON_A, WEP_CVAR(hmg, damage));
++
++      if(!autocvar_g_norecoil)
++      {
++              self.punchangle_x = random () - 0.5;
++              self.punchangle_y = random () - 0.5;
++      }
++
++      float hmg_spread = bound(WEP_CVAR(hmg, spread_min), WEP_CVAR(hmg, spread_min) + (WEP_CVAR(hmg, spread_add) * self.misc_bulletcounter), WEP_CVAR(hmg, spread_max));
++      fireBullet(w_shotorg, w_shotdir, hmg_spread, WEP_CVAR(hmg, solidpenetration), WEP_CVAR(hmg, damage), WEP_CVAR(hmg, force), WEP_HMG, 0);
++
++      self.misc_bulletcounter = self.misc_bulletcounter + 1;
++
++      pointparticles(particleeffectnum("uzi_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
++
++      W_MachineGun_MuzzleFlash();
++      W_AttachToShotorg(self.muzzle_flash, '5 0 0');
++
++      if (autocvar_g_casings >= 2) // casing code
++              SpawnCasing (((random () * 50 + 50) * v_right) - (v_forward * (random () * 25 + 25)) - ((random () * 5 - 70) * v_up), 2, vectoangles(v_forward),'0 250 0', 100, 3, self);
++
++      ATTACK_FINISHED(self) = time + WEP_CVAR(hmg, refire) * W_WeaponRateFactor();
++      weapon_thinkf(WFRAME_FIRE1, WEP_CVAR(hmg, refire), W_HeavyMachineGun_Attack_Auto);
++}
++
++float W_HeavyMachineGun(float req)
++{
++      float ammo_amount;
++      switch(req)
++      {
++              case WR_AIM:
++              {
++                      if(vlen(self.origin-self.enemy.origin) < 3000 - bound(0, skill, 10) * 200)
++                              self.BUTTON_ATCK = bot_aim(1000000, 0, 0.001, FALSE);
++                      else
++                              self.BUTTON_ATCK2 = bot_aim(1000000, 0, 0.001, FALSE);
++                      
++                      return TRUE;
++              }
++              case WR_THINK:
++              {
++                      if(WEP_CVAR(hmg, reload_ammo) && self.clip_load < WEP_CVAR(hmg, ammo)) // forced reload
++                              WEP_ACTION(self.weapon, WR_RELOAD);
++                      else
++                      {
++                              if (self.BUTTON_ATCK)
++                              if (weapon_prepareattack(0, 0))
++                              {
++                                      self.misc_bulletcounter = 0;
++                                      W_HeavyMachineGun_Attack_Auto();
++                              }
++                      }
++
++                      return TRUE;
++              }
++              case WR_INIT:
++              {
++                      precache_model ("models/uziflash.md3");
++                      precache_model ("models/weapons/g_ok_hmg.md3");
++                      precache_model ("models/weapons/v_ok_hmg.md3");
++                      precache_model ("models/weapons/h_ok_hmg.iqm");
++                      precache_sound ("weapons/uzi_fire.wav");
++                      HMG_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP)
++                      return TRUE;
++              }
++              case WR_CHECKAMMO1:
++              {
++                      ammo_amount = self.ammo_nails >= WEP_CVAR(hmg, ammo);
++
++                      if(autocvar_g_balance_hmg_reload_ammo)
++                              ammo_amount += self.(weapon_load[WEP_HMG]) >= WEP_CVAR(hmg, ammo);
++
++                      return ammo_amount;
++              }
++              case WR_CHECKAMMO2:
++              {
++                      ammo_amount = self.ammo_nails >= WEP_CVAR(hmg, ammo);
++
++                      if(autocvar_g_balance_hmg_reload_ammo)
++                              ammo_amount += self.(weapon_load[WEP_HMG]) >= WEP_CVAR(hmg, ammo);
++
++                      return ammo_amount;
++              }
++              case WR_CONFIG:
++              {
++                      HMG_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS)
++                      return TRUE;
++              }
++              case WR_RELOAD:
++              {
++                      W_Reload(WEP_CVAR(hmg, ammo), "weapons/reload.wav");
++                      return TRUE;
++              }
++              case WR_SUICIDEMESSAGE:
++              {
++                      return WEAPON_THINKING_WITH_PORTALS;
++              }
++              case WR_KILLMESSAGE:
++              {
++                      if(w_deathtype & HITTYPE_SECONDARY)
++                              return WEAPON_HMG_MURDER_SNIPE;
++                      else
++                              return WEAPON_HMG_MURDER_SPRAY;
++              }
++      }
++      return FALSE;
++}
++#endif
++#ifdef CSQC
++float W_HeavyMachineGun(float req)
++{
++      switch(req)
++      {
++              case WR_IMPACTEFFECT:
++              {
++                      vector org2;
++                      org2 = w_org + w_backoff * 2;
++                      pointparticles(particleeffectnum("machinegun_impact"), org2, w_backoff * 1000, 1);
++                      if(!w_issilent)
++                              if(w_random < 0.05)
++                                      sound(self, CH_SHOTS, "weapons/ric1.wav", VOL_BASE, ATTEN_NORM);
++                              else if(w_random < 0.1)
++                                      sound(self, CH_SHOTS, "weapons/ric2.wav", VOL_BASE, ATTEN_NORM);
++                              else if(w_random < 0.2)
++                                      sound(self, CH_SHOTS, "weapons/ric3.wav", VOL_BASE, ATTEN_NORM);
++
++                      return TRUE;
++              }
++              case WR_INIT:
++              {
++                      precache_sound("weapons/ric1.wav");
++                      precache_sound("weapons/ric2.wav");
++                      precache_sound("weapons/ric3.wav");
++                      return TRUE;
++              }
++              case WR_ZOOMRETICLE:
++              {
++                      // no weapon specific image for this weapon
++                      return FALSE;
++              }
++      }
++      return FALSE;
++}
++#endif
++#endif
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..c6d68de3b171c678d4388c878c48efbbfe1e3d2e
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,264 @@@
++#ifdef REGISTER_WEAPON
++REGISTER_WEAPON(
++/* WEP_##id    */ RPC,
++/* function    */ W_RocketPropelledChainsaw,
++/* ammotype    */ ammo_rockets,
++/* impulse     */ 7,
++/* flags       */ WEP_FLAG_MUTATORBLOCKED | WEP_FLAG_HIDDEN | WEP_FLAG_NORMAL | WEP_FLAG_CANCLIMB | WEP_FLAG_RELOADABLE | WEP_TYPE_SPLASH | WEP_FLAG_SUPERWEAPON,
++/* rating      */ BOT_PICKUP_RATING_HIGH,
++/* color     */ '1 1 0',
++/* modelname */ "ok_rl",
++/* simplemdl */ "foobar",
++/* crosshair */ "gfx/crosshairrocketlauncher 0.5875",
++/* wepimg    */ "weaponrpc",
++/* refname   */ "rpc",
++/* wepname     */ _("Rocket Propelled Chainsaw")
++);
++
++#define RPC_SETTINGS(w_cvar,w_prop) RPC_SETTINGS_LIST(w_cvar, w_prop, RPC, rpc)
++#define RPC_SETTINGS_LIST(w_cvar,w_prop,id,sn) \
++      w_cvar(id, sn, NONE, ammo) \
++      w_cvar(id, sn, NONE, animtime) \
++      w_cvar(id, sn, NONE, damage) \
++      w_cvar(id, sn, NONE, damage2) \
++      w_cvar(id, sn, NONE, damageforcescale) \
++      w_cvar(id, sn, NONE, edgedamage) \
++      w_cvar(id, sn, NONE, force) \
++      w_cvar(id, sn, NONE, health) \
++      w_cvar(id, sn, NONE, lifetime) \
++      w_cvar(id, sn, NONE, radius) \
++      w_cvar(id, sn, NONE, refire) \
++      w_cvar(id, sn, NONE, speed) \
++      w_cvar(id, sn, NONE, speedaccel) \
++      w_prop(id, sn, float,  reloading_ammo, reload_ammo) \
++      w_prop(id, sn, float,  reloading_time, reload_time) \
++      w_prop(id, sn, float,  switchdelay_raise, switchdelay_raise) \
++      w_prop(id, sn, float,  switchdelay_drop, switchdelay_drop) \
++      w_prop(id, sn, string, weaponreplace, weaponreplace) \
++      w_prop(id, sn, float,  weaponstart, weaponstart) \
++      w_prop(id, sn, float,  weaponstartoverride, weaponstartoverride) \
++      w_prop(id, sn, float,  weaponthrowable, weaponthrowable)
++
++#ifdef SVQC
++RPC_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
++#endif
++#else
++#ifdef SVQC
++void spawnfunc_weapon_rpc() { weapon_defaultspawnfunc(WEP_RPC); }
++
++void W_RocketPropelledChainsaw_Explode()
++{
++      self.event_damage = func_null;
++      self.takedamage = DAMAGE_NO;
++
++      RadiusDamage (self, self.realowner, WEP_CVAR(rpc, damage), WEP_CVAR(rpc, edgedamage), WEP_CVAR(rpc, radius), world, world, WEP_CVAR(rpc, force), self.projectiledeathtype, other);
++
++      remove (self);
++}
++
++void W_RocketPropelledChainsaw_Touch (void)
++{
++      if(WarpZone_Projectile_Touch())
++              if(wasfreed(self))
++                      return;
++
++      W_RocketPropelledChainsaw_Explode();
++}
++
++void W_RocketPropelledChainsaw_Damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
++{
++      if (self.health <= 0)
++              return;
++
++      if (!W_CheckProjectileDamage(inflictor.realowner, self.realowner, deathtype, -1)) // no exceptions
++              return; // g_projectiles_damage says to halt
++
++      self.health = self.health - damage;
++
++      if (self.health <= 0)
++              W_PrepareExplosionByDamage(attacker, W_RocketPropelledChainsaw_Explode);
++}
++
++void W_RocketPropelledChainsaw_Think()
++{
++      if(self.cnt <= time)
++      {
++              remove(self);
++              return;
++      }
++
++      self.cnt = vlen(self.velocity);
++      self.wait = self.cnt * sys_frametime;
++      self.pos1 = normalize(self.velocity);
++
++      tracebox(self.origin, self.mins, self.maxs, self.origin + self.pos1 * (2 * self.wait), MOVE_NORMAL, self);
++      if(IS_PLAYER(trace_ent))
++              Damage (trace_ent, self, self.realowner, WEP_CVAR(rpc, damage2), self.projectiledeathtype, self.origin, normalize(self.origin - other.origin) * WEP_CVAR(rpc, force));
++
++      self.velocity = self.pos1 * (self.cnt + (WEP_CVAR(rpc, speedaccel) * sys_frametime));
++
++      UpdateCSQCProjectile(self);
++      self.nextthink = time;
++}
++
++void W_RocketPropelledChainsaw_Attack (void)
++{
++      entity missile = spawn(); //WarpZone_RefSys_SpawnSameRefSys(self);
++      entity flash = spawn ();
++
++      W_DecreaseAmmo(WEP_CVAR(rpc, ammo));
++      W_SetupShot_ProjectileSize (self, '-3 -3 -3', '3 3 3', FALSE, 5, "weapons/rocket_fire.wav", CH_WEAPON_A, WEP_CVAR(rpc, damage));
++      pointparticles(particleeffectnum("rocketlauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
++      PROJECTILE_MAKETRIGGER(missile);
++
++      missile.owner = missile.realowner = self;
++      missile.bot_dodge = TRUE;
++      missile.bot_dodgerating = WEP_CVAR(rpc, damage) * 2;
++
++      missile.takedamage = DAMAGE_YES;
++      missile.damageforcescale = WEP_CVAR(rpc, damageforcescale);
++      missile.health = WEP_CVAR(rpc, health);
++      missile.event_damage = W_RocketPropelledChainsaw_Damage;
++      missile.damagedbycontents = TRUE;
++      missile.movetype = MOVETYPE_FLY;
++
++      missile.projectiledeathtype = WEP_RPC;
++      setsize (missile, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot
++
++      setorigin (missile, w_shotorg - v_forward * 3); // move it back so it hits the wall at the right point
++      W_SetupProjVelocity_Basic(missile, WEP_CVAR(rpc, speed), 0);
++
++      missile.touch = W_RocketPropelledChainsaw_Touch;
++
++      missile.think = W_RocketPropelledChainsaw_Think;
++      missile.cnt = time + WEP_CVAR(rpc, lifetime);
++      missile.nextthink = time;
++      missile.flags = FL_PROJECTILE;
++
++      CSQCProjectile(missile, TRUE, PROJECTILE_RPC, FALSE);
++
++      setmodel(flash, "models/flash.md3"); // precision set below
++      SUB_SetFade (flash, time, 0.1);
++      flash.effects = EF_ADDITIVE | EF_FULLBRIGHT | EF_LOWPRECISION;
++      W_AttachToShotorg(flash, '5 0 0');
++      missile.pos1 = missile.velocity;
++
++      other = missile; MUTATOR_CALLHOOK(EditProjectile);
++}
++
++float W_RocketPropelledChainsaw(float req)
++{
++      float ammo_amount = FALSE;
++      switch(req)
++      {
++              case WR_AIM:
++              {
++                      self.BUTTON_ATCK = bot_aim(WEP_CVAR(rpc, speed), 0, WEP_CVAR(rpc, lifetime), FALSE);
++                      return TRUE;
++              }
++              case WR_THINK:
++              {
++                      if(WEP_CVAR(rpc, reload_ammo) && self.clip_load < WEP_CVAR(rpc, ammo))
++                              WEP_ACTION(self.weapon, WR_RELOAD);
++                      else
++                      {
++                              if (self.BUTTON_ATCK)
++                              {
++                                      if(weapon_prepareattack(0, WEP_CVAR(rpc, refire)))
++                                      {
++                                              W_RocketPropelledChainsaw_Attack();
++                                              weapon_thinkf(WFRAME_FIRE1, WEP_CVAR(rpc, animtime), w_ready);
++                                      }
++                              }
++
++                              if (self.BUTTON_ATCK2)
++                              {
++                                      // to-do
++                              }
++                      }
++
++                      return TRUE;
++              }
++              case WR_INIT:
++              {
++                      precache_model ("models/flash.md3");
++                      precache_model("models/weapons/h_ok_rl.iqm");
++                      precache_model("models/weapons/v_ok_rl.md3");
++                      precache_model("models/weapons/g_ok_rl.md3");
++                      precache_sound ("weapons/rocket_fire.wav");
++                      RPC_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP)
++                      return TRUE;
++              }
++              case WR_CHECKAMMO1:
++              {
++                      ammo_amount = self.WEP_AMMO(RPC) >= WEP_CVAR(rpc, ammo);
++                      ammo_amount += self.(weapon_load[WEP_RPC]) >= WEP_CVAR(rpc, ammo);
++                      return ammo_amount;
++              }
++              case WR_CHECKAMMO2:
++              {
++                      return FALSE;
++              }
++              case WR_CONFIG:
++              {
++                      RPC_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS)
++                      return TRUE;
++              }
++              case WR_RELOAD:
++              {
++                      W_Reload(WEP_CVAR(rpc, ammo), "weapons/reload.wav");
++                      return TRUE;
++              }
++              case WR_SUICIDEMESSAGE:
++              {
++                      if((w_deathtype & HITTYPE_BOUNCE) || (w_deathtype & HITTYPE_SPLASH))
++                              return WEAPON_RPC_SUICIDE_SPLASH;
++                      else
++                              return WEAPON_RPC_SUICIDE_DIRECT;
++              }
++              case WR_KILLMESSAGE:
++              {
++                      if(w_deathtype & HITTYPE_SECONDARY)
++                              return WEAPON_BLASTER_MURDER;
++                      else if((w_deathtype & HITTYPE_BOUNCE) || (w_deathtype & HITTYPE_SPLASH))
++                              return WEAPON_RPC_MURDER_SPLASH;
++                      else
++                              return WEAPON_RPC_MURDER_DIRECT;
++              }
++      }
++
++      return FALSE;
++}
++#endif
++
++#ifdef CSQC
++float W_RocketPropelledChainsaw(float req)
++{
++      switch(req)
++      {
++              case WR_IMPACTEFFECT:
++              {
++                      vector org2;
++                      org2 = w_org + w_backoff * 12;
++                      pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1);
++                      if(!w_issilent)
++                              sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
++
++                      return TRUE;
++              }
++              case WR_INIT:
++              {
++                      precache_sound("weapons/rocket_impact.wav");
++                      return TRUE;
++              }
++              case WR_ZOOMRETICLE:
++              {
++                      // no weapon specific image for this weapon
++                      return FALSE;
++              }
++      }
++
++      return FALSE;
++}
++#endif
++#endif
index c908d82d3ffd6b55f513eaf0b30863688bee04f4,18e167f5d29fff5f01f2c24fd894cba1039c33eb..c276a2cd2efd8b41f4a3f88f67e64315c346311c
@@@ -253,11 -251,8 +253,11 @@@ void XonoticMutatorsDialog_fill(entity 
                me.TD(me, 1, 4, makeXonoticTextLabel(0, _("Special arenas:")));
        me.TR(me);
                me.TDempty(me, 0.2);
-               me.TD(me, 1, 1.8, e = makeXonoticRadioButton(1, "g_minstagib", "1", _("MinstaGib")));
+               me.TD(me, 1, 1.8, e = makeXonoticRadioButton(1, "g_instagib", "1", _("InstaGib")));
                        e.cvarOffValue = "0";
 +      me.TR(me);
 +              me.TDempty(me, 0.2);
 +              me.TD(me, 1, 2, e = makeXonoticRadioButton(1, "g_overkill", "1", _("Overkill")));
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.8, e = makeXonoticRadioButton(1, "g_nix", "1", _("NIX")));
Simple merge
index 3eb4292452ac4ea8469236ee2e326c548c1817ec,5eb92bcb37a22e8180174731fcea62d59814e9b7..15bad10d6efd6d1919b2765904002e0ecc0616c3
@@@ -583,9 -572,13 +572,14 @@@ float serverflags
  .float team_forced; // can be a team number to force a team, or 0 for default action, or -1 for forced spectator
  
  .float player_blocked;
 +.float weapon_blocked; // weapon use disabled
  
- .float freezetag_frozen;
+ .float frozen; // for freeze attacks
+ .float revive_progress;
+ .float revival_time; // time at which player was last revived
+ .float revive_speed; // NOTE: multiplier (anything above 1 is instaheal)
+ .entity iceblock;
+ .entity frozen_by; // for ice fields
  
  .entity muzzle_flash;
  .float misc_bulletcounter;    // replaces uzi & hlac bullet counter.
index 0000000000000000000000000000000000000000,dc822e2749e8e879fb2dc6ddd4e3a547d6871092..c448617c3058d82092dfe5a001af9fee59cd9079
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,458 +1,458 @@@
 -                                      if(frag_target.health > 0) { Send_Notification(NOTIF_ONE, frag_attacker, MSG_CENTER, CENTER_MINSTA_SECONDARY); }
+ void spawnfunc_item_minst_cells (void)
+ {
+       if (!g_instagib) { remove(self); return; }
+       if (!self.ammo_cells)
+               self.ammo_cells = autocvar_g_instagib_ammo_drop;
+       StartItem ("models/items/a_cells.md3",
+                          "misc/itempickup.wav", 45, 0,
+                          "Vaporizer Ammo", IT_CELLS, 0, 0, generic_pickupevalfunc, 100);
+ }
+ void instagib_health_mega()
+ {
+       self.max_health = 1;
+       StartItem ("models/items/g_h100.md3",
+                          "misc/megahealth.wav", g_pickup_respawntime_powerup, g_pickup_respawntimejitter_powerup,
+                          "Extralife", IT_NAILS, 0, FL_POWERUP, generic_pickupevalfunc, BOT_PICKUP_RATING_HIGH);
+ }
+ .float instagib_nextthink;
+ .float instagib_needammo;
+ void instagib_stop_countdown(entity e)
+ {
+       if (!e.instagib_needammo)
+               return;
+       Kill_Notification(NOTIF_ONE_ONLY, e, MSG_CENTER_CPID, CPID_MINSTA_FINDAMMO);
+       e.instagib_needammo = FALSE;
+ }
+ void instagib_ammocheck()
+ {
+       if (!IS_PLAYER(self))
+               return; // not a player
+       if (time < self.instagib_nextthink)
+               return;
+       if (self.deadflag || gameover)
+               instagib_stop_countdown(self);
+       else if (self.ammo_cells > 0 || (self.items & IT_UNLIMITED_WEAPON_AMMO))
+               instagib_stop_countdown(self);
+       else
+       {
+               self.instagib_needammo = TRUE;
+               if (self.health <= 5)
+               {
+                       Damage(self, self, self, 5, DEATH_NOAMMO, self.origin, '0 0 0');
+                       Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_INSTAGIB_TERMINATED);
+               }
+               else if (self.health <= 10)
+               {
+                       Damage(self, self, self, 5, DEATH_NOAMMO, self.origin, '0 0 0');
+                       Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_NUM_1);
+               }
+               else if (self.health <= 20)
+               {
+                       Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
+                       Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_NUM_2);
+               }
+               else if (self.health <= 30)
+               {
+                       Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
+                       Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_NUM_3);
+               }
+               else if (self.health <= 40)
+               {
+                       Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
+                       Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_NUM_4);
+               }
+               else if (self.health <= 50)
+               {
+                       Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
+                       Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_NUM_5);
+               }
+               else if (self.health <= 60)
+               {
+                       Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
+                       Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_NUM_6);
+               }
+               else if (self.health <= 70)
+               {
+                       Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
+                       Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_NUM_7);
+               }
+               else if (self.health <= 80)
+               {
+                       Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
+                       Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_NUM_8);
+               }
+               else if (self.health <= 90)
+               {
+                       Send_Notification(NOTIF_ONE_ONLY, self, MSG_CENTER, CENTER_MINSTA_FINDAMMO);
+                       Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
+                       Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_NUM_9);
+               }
+               else
+               {
+                       Send_Notification(NOTIF_ONE_ONLY, self, MSG_MULTI, MULTI_MINSTA_FINDAMMO);
+                       Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
+               }
+       }
+       self.instagib_nextthink = time + 1;
+ }
+ MUTATOR_HOOKFUNCTION(instagib_MatchEnd)
+ {
+       entity head;
+       FOR_EACH_PLAYER(head)
+               instagib_stop_countdown(head);
+       return FALSE;
+ }
+ MUTATOR_HOOKFUNCTION(instagib_MonsterLoot)
+ {
+       other.monster_loot = spawnfunc_item_minst_cells;
+       return FALSE;
+ }
+ MUTATOR_HOOKFUNCTION(instagib_MonsterSpawn)
+ {
+       // always refill ammo
+       if(self.monsterid == MON_MAGE)
+               self.skin = 1;
+       
+       return FALSE;
+ }
+ MUTATOR_HOOKFUNCTION(instagib_BotShouldAttack)
+ {
+       if(checkentity.items & IT_STRENGTH)
+               return TRUE;
+       return FALSE;
+ }
+ MUTATOR_HOOKFUNCTION(instagib_MakePlayerObserver)
+ {
+       instagib_stop_countdown(self);
+       return FALSE;
+ }
+ MUTATOR_HOOKFUNCTION(instagib_PlayerSpawn)
+ {
+       self.effects |= EF_FULLBRIGHT;
+       return FALSE;
+ }
+ MUTATOR_HOOKFUNCTION(instagib_PlayerPreThink)
+ {
+       instagib_ammocheck();
+       return FALSE;
+ }
+ MUTATOR_HOOKFUNCTION(instagib_PlayerRegen)
+ {
+       // no regeneration in instagib
+       return TRUE;
+ }
+ MUTATOR_HOOKFUNCTION(instagib_PlayerPowerups)
+ {
+       if (!(self.effects & EF_FULLBRIGHT))
+               self.effects |= EF_FULLBRIGHT;
+       if (self.items & IT_STRENGTH)
+       {
+               play_countdown(self.strength_finished, "misc/poweroff.wav");
+               if (time > self.strength_finished)
+               {
+                       self.alpha = default_player_alpha;
+                       self.exteriorweaponentity.alpha = default_weapon_alpha;
+                       self.items &= ~IT_STRENGTH;
+                       Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_POWERDOWN_INVISIBILITY);
+               }
+       }
+       else
+       {
+               if (time < self.strength_finished)
+               {
+                       self.alpha = autocvar_g_instagib_invis_alpha;
+                       self.exteriorweaponentity.alpha = autocvar_g_instagib_invis_alpha;
+                       self.items |= IT_STRENGTH;
+                       Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_POWERUP_INVISIBILITY, self.netname);
+                       Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_POWERUP_INVISIBILITY);
+               }
+       }
+       if (self.items & IT_INVINCIBLE)
+       {
+               play_countdown(self.invincible_finished, "misc/poweroff.wav");
+               if (time > self.invincible_finished)
+               {
+                       self.items &= ~IT_INVINCIBLE;
+                       Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_POWERDOWN_SPEED);
+               }
+       }
+       else
+       {
+               if (time < self.invincible_finished)
+               {
+                       self.items |= IT_INVINCIBLE;
+                       Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_POWERUP_SPEED, self.netname);
+                       Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_POWERUP_SPEED);
+               }
+       }
+       return FALSE;
+ }
+ MUTATOR_HOOKFUNCTION(instagib_PlayerPhysics)
+ {
+       if(self.items & IT_INVINCIBLE)
+               self.stat_sv_maxspeed = self.stat_sv_maxspeed * autocvar_g_instagib_speed_highspeed;
+       return FALSE;
+ }
+ MUTATOR_HOOKFUNCTION(instagib_SplitHealthArmor)
+ {
+       damage_save = 0;
+       damage_take = frag_damage;
+       return FALSE;
+ }
+ MUTATOR_HOOKFUNCTION(instagib_ForbidThrowing)
+ {
+       // weapon dropping on death handled by FilterItem
+       return TRUE;
+ }
+ MUTATOR_HOOKFUNCTION(instagib_PlayerDamage)
+ {
+       if(autocvar_g_friendlyfire == 0 && SAME_TEAM(frag_target, frag_attacker) && IS_PLAYER(frag_target) && IS_PLAYER(frag_attacker))
+               frag_damage = 0;
+       if(IS_PLAYER(frag_target))
+       {
+               if ((frag_deathtype == DEATH_FALL)  ||
+                       (frag_deathtype == DEATH_DROWN) ||
+                       (frag_deathtype == DEATH_SLIME) ||
+                       (frag_deathtype == DEATH_LAVA))
+               {
+                       frag_damage = 0;
+               }
+               if(IS_PLAYER(frag_attacker))
+               if(DEATH_ISWEAPON(frag_deathtype, WEP_VAPORIZER))
+               {
+                       if(frag_deathtype & HITTYPE_SECONDARY)
+                       {
+                               frag_damage = frag_mirrordamage = 0;
+                               
+                               if(frag_target != frag_attacker)
+                               {
++                                      if(frag_target.health > 0) { Send_Notification(NOTIF_ONE, frag_attacker, MSG_CENTER, CENTER_SECONDARY_NODAMAGE); }
+                                       frag_force = '0 0 0';
+                               }
+                       }
+                       else if(frag_target.armorvalue)
+                       {
+                               frag_target.armorvalue -= 1;
+                               frag_damage = 0;
+                               frag_target.damage_dealt += 1;
+                               frag_attacker.damage_dealt += 1; // TODO: change this to a specific hitsound for armor hit
+                               Send_Notification(NOTIF_ONE, frag_target, MSG_CENTER, CENTER_MINSTA_LIVES_REMAINING, frag_target.armorvalue);
+                       }
+               }
+       }
+       if(IS_PLAYER(frag_attacker))
+       if(frag_mirrordamage > 0)
+       {
+               // just lose extra LIVES, don't kill the player for mirror damage
+               if(frag_attacker.armorvalue > 0)
+               {
+                       frag_attacker.armorvalue -= 1;
+                       Send_Notification(NOTIF_ONE, frag_attacker, MSG_CENTER, CENTER_MINSTA_LIVES_REMAINING, frag_attacker.armorvalue);
+                       frag_attacker.damage_dealt += 1;
+               }
+               frag_mirrordamage = 0;
+       }
+       if(frag_target.items & IT_STRENGTH)
+               yoda = 1;
+       return FALSE;
+ }
+ MUTATOR_HOOKFUNCTION(instagib_SetStartItems)
+ {
+       start_ammo_cells = cvar("g_instagib_ammo_start");
+       start_health = 100;
+       start_armorvalue = 0;
+       start_weapons = WEPSET_VAPORIZER;
+       warmup_start_weapons = WEPSET_VAPORIZER;
+       start_items |= IT_UNLIMITED_SUPERWEAPONS;
+       return FALSE;
+ }
+ MUTATOR_HOOKFUNCTION(instagib_FilterItem)
+ {
+       if(self.classname == "item_cells")
+               return TRUE; // no normal cells?
+       if(self.weapon == WEP_VAPORIZER && self.classname == "droppedweapon")
+       {
+               self.ammo_cells = autocvar_g_instagib_ammo_drop;
+               return FALSE;
+       }
+       if(self.weapon == WEP_DEVASTATOR || self.weapon == WEP_VORTEX)
+       {
+               entity e = spawn();
+               setorigin(e, self.origin);
+               entity oldself;
+               oldself = self;
+               self = e;
+               spawnfunc_item_minst_cells();
+               self = oldself;
+               return TRUE;
+       }
+       if(self.flags & FL_POWERUP)
+               return FALSE;
+       if(self.ammo_cells > autocvar_g_instagib_ammo_drop && self.classname != "item_minst_cells")
+               self.ammo_cells = autocvar_g_instagib_ammo_drop;
+       if(self.ammo_cells && !self.weapon)
+               return FALSE;
+       return TRUE;
+ }
+ MUTATOR_HOOKFUNCTION(instagib_CustomizeWaypoint)
+ {
+       entity e = WaypointSprite_getviewentity(other);
+       // if you have the invisibility powerup, sprites ALWAYS are restricted to your team
+       // but only apply this to real players, not to spectators
+       if((self.owner.flags & FL_CLIENT) && (self.owner.items & IT_STRENGTH) && (e == other))
+       if(DIFF_TEAM(self.owner, e))
+               return TRUE;
+       return FALSE;
+ }
+ MUTATOR_HOOKFUNCTION(instagib_ItemCountdown)
+ {
+       switch(self.items)
+       {
+               case IT_STRENGTH:   item_name = "item-invis"; item_color = '0 0 1'; break;
+               case IT_NAILS:      item_name = "item-extralife"; item_color = '1 0 0'; break;
+               case IT_INVINCIBLE: item_name = "item-speed"; item_color = '1 0 1'; break;
+       }
+       return FALSE;
+ }
+ MUTATOR_HOOKFUNCTION(instagib_ItemTouch)
+ {
+       if(self.ammo_cells)
+       {
+               // play some cool sounds ;)
+               if (IS_CLIENT(other))
+               {
+                       if(other.health <= 5)
+                               Send_Notification(NOTIF_ONE, other, MSG_ANNCE, ANNCE_INSTAGIB_LASTSECOND);
+                       else if(other.health < 50)
+                               Send_Notification(NOTIF_ONE, other, MSG_ANNCE, ANNCE_INSTAGIB_NARROWLY);
+               }
+               if(other.health < 100)
+                       other.health = 100;
+               return MUT_ITEMTOUCH_CONTINUE;
+       }
+       if(self.max_health)
+       {
+               other.armorvalue = bound(other.armorvalue, 999, other.armorvalue + autocvar_g_instagib_extralives);
+               Send_Notification(NOTIF_ONE, other, MSG_CENTER, CENTER_EXTRALIVES);
+               return MUT_ITEMTOUCH_PICKUP;
+       }
+       return MUT_ITEMTOUCH_CONTINUE;
+ }
+ MUTATOR_HOOKFUNCTION(instagib_OnEntityPreSpawn)
+ {
+       if (!autocvar_g_powerups) { return FALSE; }
+       if (!(self.classname == "item_strength" || self.classname == "item_invincible" || self.classname == "item_health_mega"))
+               return FALSE;
+       entity e = spawn();
+       if(random() < 0.3)
+               e.think = spawnfunc_item_strength;
+       else if(random() < 0.6)
+               e.think = instagib_health_mega;
+       else
+               e.think = spawnfunc_item_invincible;
+       e.nextthink = time + 0.1;
+       e.spawnflags = self.spawnflags;
+       e.noalign = self.noalign;
+       setorigin(e, self.origin);
+       return TRUE;
+ }
+ MUTATOR_HOOKFUNCTION(instagib_BuildMutatorsString)
+ {
+       ret_string = strcat(ret_string, ":instagib");
+       return FALSE;
+ }
+ MUTATOR_HOOKFUNCTION(instagib_BuildMutatorsPrettyString)
+ {
+       ret_string = strcat(ret_string, ", instagib");
+       return FALSE;
+ }
+ MUTATOR_HOOKFUNCTION(instagib_SetModname)
+ {
+       modname = "instagib";
+       return TRUE;
+ }
+ MUTATOR_DEFINITION(mutator_instagib)
+ {
+       MUTATOR_HOOK(MatchEnd, instagib_MatchEnd, CBC_ORDER_ANY);
+       MUTATOR_HOOK(MonsterDropItem, instagib_MonsterLoot, CBC_ORDER_ANY);
+       MUTATOR_HOOK(MonsterSpawn, instagib_MonsterSpawn, CBC_ORDER_ANY);
+       MUTATOR_HOOK(BotShouldAttack, instagib_BotShouldAttack, CBC_ORDER_ANY);
+       MUTATOR_HOOK(PlayerPhysics, instagib_PlayerPhysics, CBC_ORDER_ANY);
+       MUTATOR_HOOK(PlayerSpawn, instagib_PlayerSpawn, CBC_ORDER_ANY);
+       MUTATOR_HOOK(PlayerDamage_Calculate, instagib_PlayerDamage, CBC_ORDER_ANY);
+       MUTATOR_HOOK(MakePlayerObserver, instagib_MakePlayerObserver, CBC_ORDER_ANY);
+       MUTATOR_HOOK(SetStartItems, instagib_SetStartItems, CBC_ORDER_ANY);
+       MUTATOR_HOOK(ItemTouch, instagib_ItemTouch, CBC_ORDER_ANY);
+       MUTATOR_HOOK(FilterItem, instagib_FilterItem, CBC_ORDER_ANY);
+       MUTATOR_HOOK(CustomizeWaypoint, instagib_CustomizeWaypoint, CBC_ORDER_ANY);
+       MUTATOR_HOOK(Item_RespawnCountdown, instagib_ItemCountdown, CBC_ORDER_ANY);
+       MUTATOR_HOOK(PlayerDamage_SplitHealthArmor, instagib_SplitHealthArmor, CBC_ORDER_ANY);
+       MUTATOR_HOOK(PlayerPowerups, instagib_PlayerPowerups, CBC_ORDER_ANY);
+       MUTATOR_HOOK(ForbidThrowCurrentWeapon, instagib_ForbidThrowing, CBC_ORDER_ANY);
+       MUTATOR_HOOK(PlayerPreThink, instagib_PlayerPreThink, CBC_ORDER_ANY);
+       MUTATOR_HOOK(PlayerRegen, instagib_PlayerRegen, CBC_ORDER_ANY);
+       MUTATOR_HOOK(OnEntityPreSpawn, instagib_OnEntityPreSpawn, CBC_ORDER_ANY);
+       MUTATOR_HOOK(BuildMutatorsString, instagib_BuildMutatorsString, CBC_ORDER_ANY);
+       MUTATOR_HOOK(BuildMutatorsPrettyString, instagib_BuildMutatorsPrettyString, CBC_ORDER_ANY);
+       MUTATOR_HOOK(SetModname, instagib_SetModname, CBC_ORDER_ANY);
+       return FALSE;
+ }
index 3f798c9de1e37938330335393f5a4e9a1d565e68,0000000000000000000000000000000000000000..ecef7ceac1c2001d23890c545e527a5eceef5ade
mode 100644,000000..100644
--- /dev/null
@@@ -1,356 -1,0 +1,389 @@@
-       if(DEATH_ISWEAPON(frag_deathtype, WEP_LASER))
 +void ok_DecreaseCharge(entity ent, float wep)
 +{
 +      if(!ent.ok_use_ammocharge) return;
 +
 +      entity wepent = get_weaponinfo(wep);
 +
 +      if(wepent.weapon == 0)
 +              return; // dummy
 +
 +      ent.ammo_charge[wep] -= max(0, cvar(sprintf("g_overkill_ammo_decharge_%s", wepent.netname)));
 +}
 +
 +void ok_IncreaseCharge(entity ent, float wep)
 +{
 +      entity wepent = get_weaponinfo(wep);
 +
 +      if(wepent.weapon == 0)
 +              return; // dummy
 +
 +      if(ent.ok_use_ammocharge)
 +      if(!ent.BUTTON_ATCK) // not while attacking?
 +              ent.ammo_charge[wep] = min(autocvar_g_overkill_ammo_charge_limit, ent.ammo_charge[wep] + cvar(sprintf("g_overkill_ammo_charge_rate_%s", wepent.netname)) * frametime / W_TICSPERFRAME);
 +}
 +
 +float ok_CheckWeaponCharge(entity ent, float wep)
 +{
 +      if(!ent.ok_use_ammocharge) return TRUE;
 +
 +      entity wepent = get_weaponinfo(wep);
 +
 +      if(wepent.weapon == 0)
 +              return 0; // dummy
 +
 +      return (ent.ammo_charge[wep] >= cvar(sprintf("g_overkill_ammo_decharge_%s", wepent.netname)));
 +}
 +
 +void start_hmg()
 +{
 +      self.classname = "weapon_hmg";
 +      self.respawntime = autocvar_g_overkill_superguns_respawn_time;
 +      self.ok_item = TRUE;
 +      setmodel(self, "models/weapons/g_ok_hmg.md3");
 +      self.pickup_anyway = TRUE;
 +      spawnfunc_weapon_hmg();
 +}
 +
 +void start_rpc()
 +{
 +      self.classname = "weapon_rpc";
 +      self.respawntime = autocvar_g_overkill_superguns_respawn_time;
 +      self.ok_item = TRUE;
 +      self.pickup_anyway = TRUE;
 +      setmodel(self, "models/weapons/g_ok_rl.md3");
 +      spawnfunc_weapon_rpc();
 +}
 +
 +MUTATOR_HOOKFUNCTION(ok_PlayerDamage_Calculate)
 +{
 +      if(IS_PLAYER(frag_attacker) && IS_PLAYER(frag_target))
-               if(frag_target.freezetag_frozen == 0)
++      if(DEATH_ISWEAPON(frag_deathtype, WEP_BLASTER))
 +      {
 +              frag_damage = 0;
 +
 +              if(frag_attacker != frag_target)
 +              if(frag_target.health > 0)
- MUTATOR_HOOKFUNCTION(ok_MonsterSpawn)
++              if(frag_target.frozen == 0)
 +              if(frag_target.deadflag == DEAD_NO)
 +              {
 +                      Send_Notification(NOTIF_ONE, frag_attacker, MSG_CENTER, CENTER_SECONDARY_NODAMAGE);
 +                      frag_force = '0 0 0';
 +              }
 +      }
 +
 +      return FALSE;
 +}
 +
++MUTATOR_HOOKFUNCTION(ok_PlayerDamage_SplitHealthArmor)
++{
++      if(damage_take)
++              self.ok_pauseregen_finished = max(self.ok_pauseregen_finished, time + 2);
++      return FALSE;
++}
++
 +MUTATOR_HOOKFUNCTION(ok_PlayerDies)
 +{
 +      entity oldself = self;
 +
++      if(self.flags & FL_MONSTER)
++      {
++              remove(other); // remove default item
++              other = world;
++      }
++
 +      self.ok_lastwep = self.weapon;
 +      self.ok_deathloc = self.origin;
 +      self = spawn();
 +      self.ok_item = TRUE;
 +      self.noalign = TRUE;
 +      self.pickup_anyway = TRUE;
 +      spawnfunc_item_armor_small();
 +      self.movetype = MOVETYPE_TOSS;
 +      self.gravity = 1;
 +      self.reset = SUB_Remove;
 +      setorigin(self, frag_target.origin + '0 0 32');
 +      self.velocity = '0 0 200' + normalize(frag_attacker.origin - self.origin) * 500;
 +      self.classname = "droppedweapon"; // hax
 +      SUB_SetFade(self, time + 5, 1);
 +      self = oldself;
 +
 +      return FALSE;
 +}
 +
-       self.candrop = FALSE; // no default item drops
-       return FALSE;
++MUTATOR_HOOKFUNCTION(ok_PlayerRegen)
 +{
-       if(self.deadflag != DEAD_NO || !IS_PLAYER(self) || self.freezetag_frozen)
++      // overkill's values are different, so use custom regen
++      if(!self.frozen)
++      {
++              self.armorvalue = CalcRotRegen(self.armorvalue, autocvar_g_balance_armor_regenstable, autocvar_g_balance_armor_regen, autocvar_g_balance_armor_regenlinear, 1 * frametime * (time > self.ok_pauseregen_finished), 0, 0, 1, 1 * frametime * (time > self.pauserotarmor_finished), autocvar_g_balance_armor_limit);
++              self.health = CalcRotRegen(self.health, autocvar_g_balance_health_regenstable, 0, 100, 1 * frametime * (time > self.ok_pauseregen_finished), 200, 0, autocvar_g_balance_health_rotlinear, 1 * frametime * (time > self.pauserothealth_finished), autocvar_g_balance_health_limit);
++              
++              float minf, maxf, limitf;
++
++              maxf = autocvar_g_balance_fuel_rotstable;
++              minf = autocvar_g_balance_fuel_regenstable;
++              limitf = autocvar_g_balance_fuel_limit;
++
++              self.ammo_fuel = CalcRotRegen(self.ammo_fuel, minf, autocvar_g_balance_fuel_regen, autocvar_g_balance_fuel_regenlinear, frametime * (time > self.pauseregen_finished) * ((self.items & IT_FUEL_REGEN) != 0), maxf, autocvar_g_balance_fuel_rot, autocvar_g_balance_fuel_rotlinear, frametime * (time > self.pauserotfuel_finished), limitf);
++      }
++      return TRUE; // return TRUE anyway, as frozen uses no regen
 +}
 +
 +MUTATOR_HOOKFUNCTION(ok_ForbidThrowCurrentWeapon)
 +{
 +      return TRUE;
 +}
 +
 +MUTATOR_HOOKFUNCTION(ok_PlayerPreThink)
 +{
 +      if(intermission_running || gameover)
 +              return FALSE;
 +
-               self.jump_interval = time + autocvar_g_balance_laser_primary_refire * W_WeaponRateFactor();
++      if(self.deadflag != DEAD_NO || !IS_PLAYER(self) || self.frozen)
 +              return FALSE;
 +
 +      ok_IncreaseCharge(self, self.weapon);
 +
 +      if(self.BUTTON_ATCK2)
 +      if(!forbidWeaponUse() || self.weapon_blocked) // allow if weapon is blocked
 +      if(time >= self.jump_interval)
 +      {
-               float w = self.weapon;
-               self.weapon = WEP_LASER;
-               W_Laser_Attack(3);
-               self.weapon = w;
++              self.jump_interval = time + WEP_CVAR_PRI(blaster, refire) * W_WeaponRateFactor();
 +              makevectors(self.v_angle);
-               if(autocvar_g_overkill_ammo_charge_notice && time > self.ok_notice_time && self.BUTTON_ATCK && IS_REAL_CLIENT(self))
++              
++              W_Blaster_Attack(
++                      WEP_BLASTER | HITTYPE_SECONDARY,
++                      WEP_CVAR_SEC(vaporizer, shotangle),
++                      WEP_CVAR_SEC(vaporizer, damage),
++                      WEP_CVAR_SEC(vaporizer, edgedamage),
++                      WEP_CVAR_SEC(vaporizer, radius),
++                      WEP_CVAR_SEC(vaporizer, force),
++                      WEP_CVAR_SEC(vaporizer, speed),
++                      WEP_CVAR_SEC(vaporizer, spread),
++                      WEP_CVAR_SEC(vaporizer, delay),
++                      WEP_CVAR_SEC(vaporizer, lifetime)
++              );
 +      }
 +
 +      self.weapon_blocked = FALSE;
 +
 +      self.ok_ammo_charge = self.ammo_charge[self.weapon];
 +
 +      if(self.ok_use_ammocharge)
 +      if(!ok_CheckWeaponCharge(self, self.weapon))
 +      {
-       start_weapons = warmup_start_weapons = (WEPSET_UZI | WEPSET_NEX | WEPSET_SHOTGUN);
++              if(autocvar_g_overkill_ammo_charge_notice && time > self.ok_notice_time && self.BUTTON_ATCK && IS_REAL_CLIENT(self) && self.weapon == self.switchweapon)
 +              {
 +                      //Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_OVERKILL_CHARGE);
 +                      self.ok_notice_time = time + 2;
 +                      play2(self, "weapons/dryfire.wav");
 +              }
 +              if(self.weaponentity.state != WS_CLEAR)
 +                      w_ready();
 +
 +              self.weapon_blocked = TRUE;
 +      }
 +
 +      self.BUTTON_ATCK2 = 0;
 +
 +      return FALSE;
 +}
 +
 +MUTATOR_HOOKFUNCTION(ok_PlayerSpawn)
 +{
 +      if(autocvar_g_overkill_ammo_charge)
 +      {
 +              float i;
 +
 +              for(i = WEP_FIRST; i <= WEP_LAST; ++i)
 +                      self.ammo_charge[i] = autocvar_g_overkill_ammo_charge_limit;
 +
 +              self.ok_use_ammocharge = 1;
 +              self.ok_notice_time = time;
 +      }
 +      else
 +              self.ok_use_ammocharge = 0;
++              
++      self.ok_pauseregen_finished = time + 2;
 +
 +      return FALSE;
 +}
 +
 +MUTATOR_HOOKFUNCTION(ok_OnEntityPreSpawn)
 +{
 +      if(autocvar_g_powerups)
 +      if(autocvar_g_overkill_powerups_replace)
 +      {
 +              if(self.classname == "item_strength")
 +              {
 +                      entity wep = spawn();
 +                      setorigin(wep, self.origin);
 +                      setmodel(wep, "models/weapons/g_ok_hmg.md3");
 +                      wep.classname = "weapon_hmg";
 +                      wep.ok_item = TRUE;
 +                      wep.noalign = self.noalign;
 +                      wep.cnt = self.cnt;
 +                      wep.team = self.team;
 +                      wep.respawntime = autocvar_g_overkill_superguns_respawn_time;
 +                      wep.pickup_anyway = TRUE;
 +                      wep.think = spawnfunc_weapon_hmg;
 +                      wep.nextthink = time + 0.1;
 +                      return TRUE;
 +              }
 +
 +              if(self.classname == "item_invincible")
 +              {
 +                      entity wep = spawn();
 +                      setorigin(wep, self.origin);
 +                      setmodel(wep, "models/weapons/g_ok_rl.md3");
 +                      wep.classname = "weapon_rpc";
 +                      wep.ok_item = TRUE;
 +                      wep.noalign = self.noalign;
 +                      wep.cnt = self.cnt;
 +                      wep.team = self.team;
 +                      wep.respawntime = autocvar_g_overkill_superguns_respawn_time;
 +                      wep.pickup_anyway = TRUE;
 +                      wep.think = spawnfunc_weapon_rpc;
 +                      wep.nextthink = time + 0.1;
 +                      return TRUE;
 +              }
 +      }
 +
 +      return FALSE;
 +}
 +
 +MUTATOR_HOOKFUNCTION(ok_ItemRemove)
 +{
 +      if(self.ok_item)
 +              return FALSE;
 +
 +      switch(self.items)
 +      {
 +              case IT_HEALTH: return !(autocvar_g_overkill_100h_anyway);
 +              case IT_ARMOR: return !(autocvar_g_overkill_100a_anyway);
 +      }
 +
 +      return TRUE;
 +}
 +
 +MUTATOR_HOOKFUNCTION(ok_SpectateCopy)
 +{
 +      self.ammo_charge[self.weapon] = other.ammo_charge[other.weapon];
 +      self.ok_use_ammocharge = other.ok_use_ammocharge;
 +
 +      return FALSE;
 +}
 +
 +MUTATOR_HOOKFUNCTION(ok_StartItems)
 +{
++      WepSet ok_start_items = (WEPSET_MACHINEGUN | WEPSET_VORTEX | WEPSET_SHOTGUN);
++
++      if((get_weaponinfo(WEP_RPC)).weaponstart > 0) { ok_start_items |= WEPSET_RPC; }
++      if((get_weaponinfo(WEP_HMG)).weaponstart > 0) { ok_start_items |= WEPSET_HMG; }
++
 +      start_items |= IT_UNLIMITED_WEAPON_AMMO;
-       precache_all_playermodels("models/ok_player/*.dpm");
++      start_weapons = warmup_start_weapons = ok_start_items;
 +
 +      start_ammo_nails = start_ammo_cells = start_ammo_shells = start_ammo_rockets =
 +      warmup_start_ammo_nails = warmup_start_ammo_cells = warmup_start_ammo_shells = warmup_start_ammo_rockets = autocvar_g_overkill_ammo_start;
 +
 +      return FALSE;
 +}
 +
 +MUTATOR_HOOKFUNCTION(ok_BuildMutatorsString)
 +{
 +      ret_string = strcat(ret_string, ":OK");
 +      return FALSE;
 +}
 +
 +MUTATOR_HOOKFUNCTION(ok_BuildMutatorsPrettyString)
 +{
 +      ret_string = strcat(ret_string, ", Overkill");
 +      return FALSE;
 +}
 +
 +MUTATOR_HOOKFUNCTION(ok_SetModname)
 +{
 +      modname = "Overkill";
 +      return TRUE;
 +}
 +
++void ok_SetCvars()
++{
++      // hack to force overkill playermodels
++      cvar_settemp("sv_defaultcharacter", "1");
++      cvar_settemp("sv_defaultplayermodel", "models/ok_player/okrobot1.dpm models/ok_player/okrobot2.dpm models/ok_player/okrobot3.dpm models/ok_player/okrobot4.dpm models/ok_player/okmale1.dpm models/ok_player/okmale2.dpm models/ok_player/okmale3.dpm models/ok_player/okmale4.dpm");
++      cvar_settemp("sv_defaultplayermodel_red", "models/ok_player/okrobot1.dpm models/ok_player/okrobot2.dpm models/ok_player/okrobot3.dpm models/ok_player/okrobot4.dpm");
++      cvar_settemp("sv_defaultplayermodel_blue", "models/ok_player/okmale1.dpm models/ok_player/okmale2.dpm models/ok_player/okmale3.dpm models/ok_player/okmale4.dpm");
++}
++
 +void ok_Initialize()
 +{
-       precache_model("models/weapons/h_ok_rl.iqm");
-       precache_model("models/weapons/v_ok_rl.md3");
-       precache_model("models/weapons/g_ok_rl.md3");
-       precache_model("models/weapons/ok_rocket.md3");
++      ok_SetCvars();
 +
-       precache_model("models/weapons/h_ok_hmg.iqm");
-       precache_model("models/weapons/v_ok_hmg.md3");
-       precache_model("models/weapons/g_ok_hmg.md3");
++      precache_all_playermodels("models/ok_player/*.dpm");
 +
 +      precache_model("models/weapons/h_ok_mg.iqm");
 +      precache_model("models/weapons/v_ok_mg.md3");
 +      precache_model("models/weapons/g_ok_mg.md3");
 +
-       w_uzi(WR_PRECACHE);
-       w_nex(WR_PRECACHE);
-       w_shotgun(WR_PRECACHE);
-       w_laser(WR_PRECACHE);
 +      precache_model("models/weapons/h_ok_shotgun.iqm");
 +      precache_model("models/weapons/v_ok_shotgun.md3");
 +      precache_model("models/weapons/g_ok_shotgun.md3");
 +
 +      precache_model("models/weapons/h_ok_sniper.iqm");
 +      precache_model("models/weapons/v_ok_sniper.md3");
 +      precache_model("models/weapons/g_ok_sniper.md3");
 +
 +      precache_sound("weapons/dryfire.wav");
 +
 +      addstat(STAT_OK_AMMO_CHARGE, AS_FLOAT, ok_use_ammocharge);
 +      addstat(STAT_OK_AMMO_CHARGEPOOl, AS_FLOAT, ok_ammo_charge);
 +
-       (get_weaponinfo(WEP_UZI)).mdl = "ok_mg";
-       (get_weaponinfo(WEP_NEX)).mdl = "ok_sniper";
-       string s;
-       float fh = fopen("overkill.cfg", FILE_READ);
-       if(fh >= 0)
-       {
-               while((s = fgets(fh)))
-               {
-                       tokenize_console(s);
-                       if(!(argv(0) == "" || argv(1) == "//" || argv(1) == ""))
-                               cvar_settemp(argv(0), argv(1));
-               }
-               fclose(fh);
-       }
-       else
-               dprint("^1Mutator Overkill: WARNING! overkill.cfg NOT found, things will be strange!\n");
++      WEP_ACTION(WEP_MACHINEGUN, WR_INIT);
++      WEP_ACTION(WEP_VORTEX, WR_INIT);
++      WEP_ACTION(WEP_SHOTGUN, WR_INIT);
++      WEP_ACTION(WEP_BLASTER, WR_INIT);
++      
++      WEP_ACTION(WEP_RPC, WR_INIT);
++      WEP_ACTION(WEP_HMG, WR_INIT);
 +
 +      (get_weaponinfo(WEP_RPC)).spawnflags &= ~WEP_FLAG_MUTATORBLOCKED;
 +      (get_weaponinfo(WEP_HMG)).spawnflags &= ~WEP_FLAG_MUTATORBLOCKED;
 +
 +      (get_weaponinfo(WEP_SHOTGUN)).mdl = "ok_shotgun";
-       MUTATOR_HOOK(MonsterDies, ok_PlayerDies, CBC_ORDER_ANY);
-       MUTATOR_HOOK(MonsterSpawn, ok_MonsterSpawn, CBC_ORDER_ANY);
++      (get_weaponinfo(WEP_MACHINEGUN)).mdl = "ok_mg";
++      (get_weaponinfo(WEP_VORTEX)).mdl = "ok_sniper";
 +}
 +
 +MUTATOR_DEFINITION(mutator_overkill)
 +{
 +      MUTATOR_HOOK(ForbidThrowCurrentWeapon, ok_ForbidThrowCurrentWeapon, CBC_ORDER_ANY);
 +      MUTATOR_HOOK(PlayerPreThink, ok_PlayerPreThink, CBC_ORDER_LAST);
 +      MUTATOR_HOOK(PlayerSpawn, ok_PlayerSpawn, CBC_ORDER_ANY);
 +      MUTATOR_HOOK(PlayerDamage_Calculate, ok_PlayerDamage_Calculate, CBC_ORDER_LAST);
++      MUTATOR_HOOK(PlayerDamage_SplitHealthArmor, ok_PlayerDamage_SplitHealthArmor, CBC_ORDER_ANY);
 +      MUTATOR_HOOK(PlayerDies, ok_PlayerDies, CBC_ORDER_ANY);
++      MUTATOR_HOOK(PlayerRegen, ok_PlayerRegen, CBC_ORDER_ANY);
 +      MUTATOR_HOOK(OnEntityPreSpawn, ok_OnEntityPreSpawn, CBC_ORDER_ANY);
 +      MUTATOR_HOOK(FilterItem, ok_ItemRemove, CBC_ORDER_ANY);
++      MUTATOR_HOOK(MonsterDropItem, ok_PlayerDies, CBC_ORDER_ANY);
 +      MUTATOR_HOOK(SpectateCopy, ok_SpectateCopy, CBC_ORDER_ANY);
 +      MUTATOR_HOOK(SetStartItems, ok_StartItems, CBC_ORDER_ANY);
 +      MUTATOR_HOOK(BuildMutatorsString, ok_BuildMutatorsString, CBC_ORDER_ANY);
 +      MUTATOR_HOOK(BuildMutatorsPrettyString, ok_BuildMutatorsPrettyString, CBC_ORDER_ANY);
 +      MUTATOR_HOOK(SetModname, ok_SetModname, CBC_ORDER_ANY);
 +
 +      MUTATOR_ONADD
 +      {
 +              ok_Initialize();
 +      }
 +
 +      MUTATOR_ONREMOVE
 +      {
 +              (get_weaponinfo(WEP_RPC)).spawnflags |= WEP_FLAG_MUTATORBLOCKED;
 +              (get_weaponinfo(WEP_HMG)).spawnflags |= WEP_FLAG_MUTATORBLOCKED;
 +      }
 +
 +      return FALSE;
 +}
index 17e46e20dee17183cfd328ddc5792d56f03f9b68,0000000000000000000000000000000000000000..98ba99cb5507c3de5f1fed55eaeb1584beb21456
mode 100644,000000..100644
--- /dev/null
@@@ -1,12 -1,0 +1,14 @@@
 +.vector ok_deathloc;
 +.float ok_spawnsys_timer;
 +.float ok_lastwep;
 +.float ok_item;
 +
 +.float ok_notice_time;
 +.float ammo_charge[WEP_MAXCOUNT];
 +.float ok_use_ammocharge;
 +.float ok_ammo_charge;
 +
++.float ok_pauseregen_finished;
++
 +void(entity ent, float wep) ok_DecreaseCharge;
 +
index 0000000000000000000000000000000000000000,2f96e9e8a077f44aded1bc151c4978be54370aa9..0fa2caab27c78bbdb679682d7527be4b97afbb17
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,29 +1,30 @@@
 -      CHECK_MUTATOR_ADD("g_invincible_projectiles", mutator_invincibleprojectiles, !cvar("g_instagib"));
 -      CHECK_MUTATOR_ADD("g_new_toys", mutator_new_toys, !cvar("g_instagib"));
 -      CHECK_MUTATOR_ADD("g_nix", mutator_nix, !cvar("g_instagib"));
 -      CHECK_MUTATOR_ADD("g_rocket_flying", mutator_rocketflying, !cvar("g_instagib"));
+ void mutators_add()
+ {
+       #define CHECK_MUTATOR_ADD(mut_cvar,mut_name,dependence) \
+               { if(cvar(mut_cvar) && dependence) { MUTATOR_ADD(mut_name); } }
+       CHECK_MUTATOR_ADD("g_dodging", mutator_dodging, 1);
+       CHECK_MUTATOR_ADD("g_spawn_near_teammate", mutator_spawn_near_teammate, teamplay);
+       CHECK_MUTATOR_ADD("g_physical_items", mutator_physical_items, 1);
+       CHECK_MUTATOR_ADD("g_touchexplode", mutator_touchexplode, 1);
+       CHECK_MUTATOR_ADD("g_instagib", mutator_instagib, !g_nexball);
 -      CHECK_MUTATOR_ADD("g_pinata", mutator_pinata, !cvar("g_instagib"));
++      CHECK_MUTATOR_ADD("g_invincible_projectiles", mutator_invincibleprojectiles, 1);
++      CHECK_MUTATOR_ADD("g_new_toys", mutator_new_toys, !cvar("g_instagib") && !cvar("g_overkill"));
++      CHECK_MUTATOR_ADD("g_nix", mutator_nix, !cvar("g_instagib") && !cvar("g_overkill"));
++      CHECK_MUTATOR_ADD("g_rocket_flying", mutator_rocketflying, 1);
+       CHECK_MUTATOR_ADD("g_vampire", mutator_vampire, !cvar("g_instagib"));
+       CHECK_MUTATOR_ADD("g_superspectate", mutator_superspec, 1);
 -      CHECK_MUTATOR_ADD("g_bloodloss", mutator_bloodloss, !cvar("g_instagib"));
++      CHECK_MUTATOR_ADD("g_pinata", mutator_pinata, !cvar("g_instagib") && !cvar("g_overkill"));
+       CHECK_MUTATOR_ADD("g_midair", mutator_midair, 1);
++      CHECK_MUTATOR_ADD("g_bloodloss", mutator_bloodloss, 1);
+       CHECK_MUTATOR_ADD("g_random_gravity", mutator_random_gravity, 1);
+       CHECK_MUTATOR_ADD("g_multijump", mutator_multijump, 1);
+       CHECK_MUTATOR_ADD("g_melee_only", mutator_melee_only, !cvar("g_instagib") && !g_nexball);
+       CHECK_MUTATOR_ADD("g_nades", mutator_nades, 1);
+       CHECK_MUTATOR_ADD("g_sandbox", sandbox, 1);
+       CHECK_MUTATOR_ADD("g_campcheck", mutator_campcheck, 1);
++      CHECK_MUTATOR_ADD("g_overkill", mutator_overkill, !cvar("g_instagib") && !g_nexball && cvar_string("g_mod_balance") == "Overkill");
+       CHECK_MUTATOR_ADD("g_buffs", mutator_buffs, 1);
+       #undef CHECK_MUTATOR_ADD
+ }
index cf44978ff71c548726639e7dd2d56d2b139d9da9,955ba1a526f24b5bd0f4d0d5d1e1eeefd29d6352..4dcc9df2fab87443a85906eddfe402dac5ca7e52
@@@ -29,7 -32,6 +32,8 @@@ MUTATOR_DECLARATION(mutator_multijump)
  MUTATOR_DECLARATION(mutator_melee_only);
  MUTATOR_DECLARATION(mutator_nades);
  MUTATOR_DECLARATION(mutator_campcheck);
+ MUTATOR_DECLARATION(mutator_buffs);
  
  MUTATOR_DECLARATION(sandbox);
 +MUTATOR_DECLARATION(mutator_overkill);
 +
index 0000000000000000000000000000000000000000,220bd059574058f7d6f4fb8e6f7efa7ac9eedec9..0f52e34f033aa6b9f6f1231f9043494cea3d3e59
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,37 +1,38 @@@
+ #include "base.qc"
+ #include "gamemode_assault.qc"
+ #include "gamemode_ca.qc"
+ #include "gamemode_ctf.qc"
+ #include "gamemode_domination.qc"
+ #include "gamemode_freezetag.qc"
+ #include "gamemode_keyhunt.qc"
+ #include "gamemode_keepaway.qc"
+ #include "gamemode_nexball.qc"
+ #include "gamemode_onslaught.qc"
+ #include "gamemode_lms.qc"
+ #include "gamemode_invasion.qc"
+ #include "gamemode_race.qc"
+ #include "gamemode_cts.qc"
+ #include "gamemode_tdm.qc"
+ #include "mutator_invincibleproj.qc"
+ #include "mutator_new_toys.qc"
+ #include "mutator_nix.qc"
+ #include "mutator_dodging.qc"
+ #include "mutator_rocketflying.qc"
+ #include "mutator_vampire.qc"
+ #include "mutator_spawn_near_teammate.qc"
+ #include "mutator_physical_items.qc"
+ #include "sandbox.qc"
+ #include "mutator_superspec.qc"
++#include "mutator_overkill.qc"
+ #include "mutator_instagib.qc"
+ #include "mutator_touchexplode.qc"
+ #include "mutator_pinata.qc"
+ #include "mutator_midair.qc"
+ #include "mutator_bloodloss.qc"
+ #include "mutator_random_gravity.qc"
+ #include "mutator_multijump.qc"
+ #include "mutator_melee_only.qc"
+ #include "mutator_nades.qc"
+ #include "mutator_campcheck.qc"
+ #include "mutator_buffs.qc"
index 0000000000000000000000000000000000000000,08841db932eba64e0a3b4849b2b433e8ed9eb727..c869ab69669a6eab1da1abc924c94da93c5bd70e
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,17 +1,18 @@@
+ #include "base.qh"
+ #include "mutators.qh"
+ #include "gamemode_assault.qh"
+ #include "gamemode_ca.qh"
+ #include "gamemode_ctf.qh"
+ #include "gamemode_domination.qh"
+ #include "gamemode_keyhunt.qh"
+ #include "gamemode_keepaway.qh"
+ #include "gamemode_nexball.qh"
+ #include "gamemode_lms.qh"
+ #include "gamemode_invasion.qh"
+ #include "gamemode_race.qh"
+ #include "gamemode_cts.qh"
+ #include "mutator_dodging.qh"
++#include "mutator_overkill.qh"
+ #include "mutator_nades.qh"
+ #include "mutator_buffs.qh"
index 0000000000000000000000000000000000000000,df3380116c4500719aa48e87a43cf95196faed08..13123a4601bf91a791018e37a232c5626c5dda45
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,956 +1,967 @@@
+ /*
+ ===========================================================================
+   CLIENT WEAPONSYSTEM CODE
+   Bring back W_Weaponframe
+ ===========================================================================
+ */
+ .float weapon_frametime;
+ float W_WeaponRateFactor()
+ {
+       float t;
+       t = 1.0 / g_weaponratefactor;
+       weapon_rate = t;
+       MUTATOR_CALLHOOK(WeaponRateFactor);
+       t = weapon_rate;
+       return t;
+ }
+ // VorteX: static frame globals
+ const float WFRAME_DONTCHANGE = -1;
+ const float WFRAME_FIRE1 = 0;
+ const float WFRAME_FIRE2 = 1;
+ const float WFRAME_IDLE = 2;
+ const float WFRAME_RELOAD = 3;
+ .float wframe;
+ void(float fr, float t, void() func) weapon_thinkf;
+ float CL_Weaponentity_CustomizeEntityForClient()
+ {
+       self.viewmodelforclient = self.owner;
+       if(IS_SPEC(other))
+               if(other.enemy == self.owner)
+                       self.viewmodelforclient = other;
+       return TRUE;
+ }
+ /*
+  * supported formats:
+  *
+  * 1. simple animated model, muzzle flash handling on h_ model:
+  *    h_tuba.dpm, h_tuba.dpm.framegroups - invisible model controlling the animation
+  *      tags:
+  *        shot = muzzle end (shot origin, also used for muzzle flashes)
+  *        shell = casings ejection point (must be on the right hand side of the gun)
+  *        weapon = attachment for v_tuba.md3
+  *    v_tuba.md3 - first and third person model
+  *    g_tuba.md3 - pickup model
+  *
+  * 2. simple animated model, muzzle flash handling on v_ model:
+  *    h_tuba.dpm, h_tuba.dpm.framegroups - invisible model controlling the animation
+  *      tags:
+  *        weapon = attachment for v_tuba.md3
+  *    v_tuba.md3 - first and third person model
+  *      tags:
+  *        shot = muzzle end (shot origin, also used for muzzle flashes)
+  *        shell = casings ejection point (must be on the right hand side of the gun)
+  *    g_tuba.md3 - pickup model
+  *
+  * 3. fully animated model, muzzle flash handling on h_ model:
+  *    h_tuba.dpm, h_tuba.dpm.framegroups - animated first person model
+  *      tags:
+  *        shot = muzzle end (shot origin, also used for muzzle flashes)
+  *        shell = casings ejection point (must be on the right hand side of the gun)
+  *        handle = corresponding to the origin of v_tuba.md3 (used for muzzle flashes)
+  *    v_tuba.md3 - third person model
+  *    g_tuba.md3 - pickup model
+  *
+  * 4. fully animated model, muzzle flash handling on v_ model:
+  *    h_tuba.dpm, h_tuba.dpm.framegroups - animated first person model
+  *      tags:
+  *        shot = muzzle end (shot origin)
+  *        shell = casings ejection point (must be on the right hand side of the gun)
+  *    v_tuba.md3 - third person model
+  *      tags:
+  *        shot = muzzle end (for muzzle flashes)
+  *    g_tuba.md3 - pickup model
+  */
+ // writes:
+ //   self.origin, self.angles
+ //   self.weaponentity
+ //   self.movedir, self.view_ofs
+ //   attachment stuff
+ //   anim stuff
+ // to free:
+ //   call again with ""
+ //   remove the ent
+ void CL_WeaponEntity_SetModel(string name)
+ {
+       float v_shot_idx;
+       if (name != "")
+       {
+               // if there is a child entity, hide it until we're sure we use it
+               if (self.weaponentity)
+                       self.weaponentity.model = "";
+               setmodel(self, strcat("models/weapons/v_", name, ".md3")); // precision set below
+               v_shot_idx = gettagindex(self, "shot"); // used later
+               if(!v_shot_idx)
+                       v_shot_idx = gettagindex(self, "tag_shot");
+               setmodel(self, strcat("models/weapons/h_", name, ".iqm")); // precision set below
+               // preset some defaults that work great for renamed zym files (which don't need an animinfo)
+               self.anim_fire1  = animfixfps(self, '0 1 0.01', '0 0 0');
+               self.anim_fire2  = animfixfps(self, '1 1 0.01', '0 0 0');
+               self.anim_idle   = animfixfps(self, '2 1 0.01', '0 0 0');
+               self.anim_reload = animfixfps(self, '3 1 0.01', '0 0 0');
+               // if we have a "weapon" tag, let's attach the v_ model to it ("invisible hand" style model)
+               // if we don't, this is a "real" animated model
+               if(gettagindex(self, "weapon"))
+               {
+                       if (!self.weaponentity)
+                               self.weaponentity = spawn();
+                       setmodel(self.weaponentity, strcat("models/weapons/v_", name, ".md3")); // precision does not matter
+                       setattachment(self.weaponentity, self, "weapon");
+               }
+               else if(gettagindex(self, "tag_weapon"))
+               {
+                       if (!self.weaponentity)
+                               self.weaponentity = spawn();
+                       setmodel(self.weaponentity, strcat("models/weapons/v_", name, ".md3")); // precision does not matter
+                       setattachment(self.weaponentity, self, "tag_weapon");
+               }
+               else
+               {
+                       if(self.weaponentity)
+                               remove(self.weaponentity);
+                       self.weaponentity = world;
+               }
+               setorigin(self,'0 0 0');
+               self.angles = '0 0 0';
+               self.frame = 0;
+               self.viewmodelforclient = world;
+               float idx;
+               if(v_shot_idx) // v_ model attached to invisible h_ model
+               {
+                       self.movedir = gettaginfo(self.weaponentity, v_shot_idx);
+               }
+               else
+               {
+                       idx = gettagindex(self, "shot");
+                       if(!idx)
+                               idx = gettagindex(self, "tag_shot");
+                       if(idx)
+                               self.movedir = gettaginfo(self, idx);
+                       else
+                       {
+                               print("WARNING: weapon model ", self.model, " does not support the 'shot' tag, will display shots TOTALLY wrong\n");
+                               self.movedir = '0 0 0';
+                       }
+               }
+               if(self.weaponentity) // v_ model attached to invisible h_ model
+               {
+                       idx = gettagindex(self.weaponentity, "shell");
+                       if(!idx)
+                               idx = gettagindex(self.weaponentity, "tag_shell");
+                       if(idx)
+                               self.spawnorigin = gettaginfo(self.weaponentity, idx);
+               }
+               else
+                       idx = 0;
+               if(!idx)
+               {
+                       idx = gettagindex(self, "shell");
+                       if(!idx)
+                               idx = gettagindex(self, "tag_shell");
+                       if(idx)
+                               self.spawnorigin = gettaginfo(self, idx);
+                       else
+                       {
+                               print("WARNING: weapon model ", self.model, " does not support the 'shell' tag, will display casings wrong\n");
+                               self.spawnorigin = self.movedir;
+                       }
+               }
+               if(v_shot_idx)
+               {
+                       self.oldorigin = '0 0 0'; // use regular attachment
+               }
+               else
+               {
+                       if(self.weaponentity)
+                       {
+                               idx = gettagindex(self, "weapon");
+                               if(!idx)
+                                       idx = gettagindex(self, "tag_weapon");
+                       }
+                       else
+                       {
+                               idx = gettagindex(self, "handle");
+                               if(!idx)
+                                       idx = gettagindex(self, "tag_handle");
+                       }
+                       if(idx)
+                       {
+                               self.oldorigin = self.movedir - gettaginfo(self, idx);
+                       }
+                       else
+                       {
+                               print("WARNING: weapon model ", self.model, " does not support the 'handle' tag and neither does the v_ model support the 'shot' tag, will display muzzle flashes TOTALLY wrong\n");
+                               self.oldorigin = '0 0 0'; // there is no way to recover from this
+                       }
+               }
+               self.viewmodelforclient = self.owner;
+       }
+       else
+       {
+               self.model = "";
+               if(self.weaponentity)
+                       remove(self.weaponentity);
+               self.weaponentity = world;
+               self.movedir = '0 0 0';
+               self.spawnorigin = '0 0 0';
+               self.oldorigin = '0 0 0';
+               self.anim_fire1  = '0 1 0.01';
+               self.anim_fire2  = '0 1 0.01';
+               self.anim_idle   = '0 1 0.01';
+               self.anim_reload = '0 1 0.01';
+       }
+       self.view_ofs = '0 0 0';
+       if(self.movedir_x >= 0)
+       {
+               vector v0;
+               v0 = self.movedir;
+               self.movedir = shotorg_adjust(v0, FALSE, FALSE);
+               self.view_ofs = shotorg_adjust(v0, FALSE, TRUE) - v0;
+       }
+       self.owner.stat_shotorg = compressShotOrigin(self.movedir);
+       self.movedir = decompressShotOrigin(self.owner.stat_shotorg); // make them match perfectly
+       self.spawnorigin += self.view_ofs; // offset the casings origin by the same amount
+       // check if an instant weapon switch occurred
+       setorigin(self, self.view_ofs);
+       // reset animstate now
+       self.wframe = WFRAME_IDLE;
+       setanim(self, self.anim_idle, TRUE, FALSE, TRUE);
+ }
+ vector CL_Weapon_GetShotOrg(float wpn)
+ {
+       entity wi, oldself;
+       vector ret;
+       wi = get_weaponinfo(wpn);
+       oldself = self;
+       self = spawn();
+       CL_WeaponEntity_SetModel(wi.mdl);
+       ret = self.movedir;
+       CL_WeaponEntity_SetModel("");
+       remove(self);
+       self = oldself;
+       return ret;
+ }
+ void CL_Weaponentity_Think()
+ {
+       float tb;
+       self.nextthink = time;
+       if (intermission_running)
+               self.frame = self.anim_idle_x;
+       if (self.owner.weaponentity != self)
+       {
+               if (self.weaponentity)
+                       remove(self.weaponentity);
+               remove(self);
+               return;
+       }
+       if (self.owner.deadflag != DEAD_NO)
+       {
+               self.model = "";
+               if (self.weaponentity)
+                       self.weaponentity.model = "";
+               return;
+       }
+       if (self.weaponname != self.owner.weaponname || self.dmg != self.owner.modelindex || self.deadflag != self.owner.deadflag)
+       {
+               self.weaponname = self.owner.weaponname;
+               self.dmg = self.owner.modelindex;
+               self.deadflag = self.owner.deadflag;
+               CL_WeaponEntity_SetModel(self.owner.weaponname);
+       }
+       tb = (self.effects & (EF_TELEPORT_BIT | EF_RESTARTANIM_BIT));
+       self.effects = self.owner.effects & EFMASK_CHEAP;
+       self.effects &= ~EF_LOWPRECISION;
+       self.effects &= ~EF_FULLBRIGHT; // can mask team color, so get rid of it
+       self.effects &= ~EF_TELEPORT_BIT;
+       self.effects &= ~EF_RESTARTANIM_BIT;
+       self.effects |= tb;
+       if(self.owner.alpha == default_player_alpha)
+               self.alpha = default_weapon_alpha;
+       else if(self.owner.alpha != 0)
+               self.alpha = self.owner.alpha;
+       else
+               self.alpha = 1;
+       self.glowmod = self.owner.weaponentity_glowmod;
+       self.colormap = self.owner.colormap;
+       if (self.weaponentity)
+       {
+               self.weaponentity.effects = self.effects;
+               self.weaponentity.alpha = self.alpha;
+               self.weaponentity.colormap = self.colormap;
+               self.weaponentity.glowmod = self.glowmod;
+       }
+       self.angles = '0 0 0';
+       float f = (self.owner.weapon_nextthink - time);
+       if (self.state == WS_RAISE && !intermission_running)
+       {
+               entity newwep = get_weaponinfo(self.owner.switchweapon);
+               f = f * g_weaponratefactor / max(f, newwep.switchdelay_raise);
+               self.angles_x = -90 * f * f;
+       }
+       else if (self.state == WS_DROP && !intermission_running)
+       {
+               entity oldwep = get_weaponinfo(self.owner.weapon);
+               f = 1 - f * g_weaponratefactor / max(f, oldwep.switchdelay_drop);
+               self.angles_x = -90 * f * f;
+       }
+       else if (self.state == WS_CLEAR)
+       {
+               f = 1;
+               self.angles_x = -90 * f * f;
+       }
+ }
+ void CL_ExteriorWeaponentity_Think()
+ {
+       float tag_found;
+       self.nextthink = time;
+       if (self.owner.exteriorweaponentity != self)
+       {
+               remove(self);
+               return;
+       }
+       if (self.owner.deadflag != DEAD_NO)
+       {
+               self.model = "";
+               return;
+       }
+       if (self.weaponname != self.owner.weaponname || self.dmg != self.owner.modelindex || self.deadflag != self.owner.deadflag)
+       {
+               self.weaponname = self.owner.weaponname;
+               self.dmg = self.owner.modelindex;
+               self.deadflag = self.owner.deadflag;
+               if (self.owner.weaponname != "")
+                       setmodel(self, strcat("models/weapons/v_", self.owner.weaponname, ".md3")); // precision set below
+               else
+                       self.model = "";
+               if((tag_found = gettagindex(self.owner, "tag_weapon")))
+               {
+                       self.tag_index = tag_found;
+                       self.tag_entity = self.owner;
+               }
+               else
+                       setattachment(self, self.owner, "bip01 r hand");
+       }
+       self.effects = self.owner.effects;
+       self.effects |= EF_LOWPRECISION;
+       self.effects = self.effects & EFMASK_CHEAP; // eat performance
+       if(self.owner.alpha == default_player_alpha)
+               self.alpha = default_weapon_alpha;
+       else if(self.owner.alpha != 0)
+               self.alpha = self.owner.alpha;
+       else
+               self.alpha = 1;
+       self.glowmod = self.owner.weaponentity_glowmod;
+       self.colormap = self.owner.colormap;
+       CSQCMODEL_AUTOUPDATE();
+ }
+ // spawning weaponentity for client
+ void CL_SpawnWeaponentity()
+ {
+       self.weaponentity = spawn();
+       self.weaponentity.classname = "weaponentity";
+       self.weaponentity.solid = SOLID_NOT;
+       self.weaponentity.owner = self;
+       setmodel(self.weaponentity, ""); // precision set when changed
+       setorigin(self.weaponentity, '0 0 0');
+       self.weaponentity.angles = '0 0 0';
+       self.weaponentity.viewmodelforclient = self;
+       self.weaponentity.flags = 0;
+       self.weaponentity.think = CL_Weaponentity_Think;
+       self.weaponentity.customizeentityforclient = CL_Weaponentity_CustomizeEntityForClient;
+       self.weaponentity.nextthink = time;
+       self.exteriorweaponentity = spawn();
+       self.exteriorweaponentity.classname = "exteriorweaponentity";
+       self.exteriorweaponentity.solid = SOLID_NOT;
+       self.exteriorweaponentity.exteriorweaponentity = self.exteriorweaponentity;
+       self.exteriorweaponentity.owner = self;
+       setorigin(self.exteriorweaponentity, '0 0 0');
+       self.exteriorweaponentity.angles = '0 0 0';
+       self.exteriorweaponentity.think = CL_ExteriorWeaponentity_Think;
+       self.exteriorweaponentity.nextthink = time;
+       {
+               entity oldself = self;
+               self = self.exteriorweaponentity;
+               CSQCMODEL_AUTOINIT();
+               self = oldself;
+       }
+ }
+ // Weapon subs
+ void w_clear()
+ {
+       if (self.weapon != -1)
+       {
+               self.weapon = 0;
+               self.switchingweapon = 0;
+       }
+       if (self.weaponentity)
+       {
+               self.weaponentity.state = WS_CLEAR;
+               self.weaponentity.effects = 0;
+       }
+ }
+ void w_ready()
+ {
+       if (self.weaponentity)
+               self.weaponentity.state = WS_READY;
+       weapon_thinkf(WFRAME_IDLE, 1000000, w_ready);
+ }
+ .float prevdryfire;
+ .float prevwarntime;
+ float weapon_prepareattack_checkammo(float secondary)
+ {
+       if (!(self.items & IT_UNLIMITED_WEAPON_AMMO))
+       if (!WEP_ACTION(self.weapon, WR_CHECKAMMO1 + secondary))
+       {
+               // always keep the Mine Layer if we placed mines, so that we can detonate them
+               entity mine;
+               if(self.weapon == WEP_MINE_LAYER)
+               for(mine = world; (mine = find(mine, classname, "mine")); ) if(mine.owner == self)
+                       return FALSE;
+               if(self.weapon == WEP_SHOTGUN)
+               if(!secondary && WEP_CVAR(shotgun, secondary) == 1)
+                       return FALSE; // no clicking, just allow
+               if(self.weapon == self.switchweapon && time - self.prevdryfire > 1) // only play once BEFORE starting to switch weapons
+               {
+                       sound (self, CH_WEAPON_A, "weapons/dryfire.wav", VOL_BASE, ATTEN_NORM);
+                       self.prevdryfire = time;
+               }
+               if(WEP_ACTION(self.weapon, WR_CHECKAMMO2 - secondary)) // check if the other firing mode has enough ammo
+               {
+                       if(time - self.prevwarntime > 1)
+                       {
+                               Send_Notification(
+                                       NOTIF_ONE,
+                                       self,
+                                       MSG_MULTI,
+                                       ITEM_WEAPON_PRIMORSEC,
+                                       self.weapon,
+                                       secondary,
+                                       (1 - secondary)
+                               );
+                       }
+                       self.prevwarntime = time;
+               }
+               else // this weapon is totally unable to fire, switch to another one
+               {
+                       W_SwitchToOtherWeapon(self);
+               }
+               return FALSE;
+       }
+       return TRUE;
+ }
+ .float race_penalty;
+ float weapon_prepareattack_check(float secondary, float attacktime)
+ {
+       if(!weapon_prepareattack_checkammo(secondary))
+               return FALSE;
+       //if sv_ready_restart_after_countdown is set, don't allow the player to shoot
+       //if all players readied up and the countdown is running
+       if(time < game_starttime || time < self.race_penalty) {
+               return FALSE;
+       }
+       if (timeout_status == TIMEOUT_ACTIVE) //don't allow the player to shoot while game is paused
+               return FALSE;
+       // do not even think about shooting if switching
+       if(self.switchweapon != self.weapon)
+               return FALSE;
+       if(attacktime >= 0)
+       {
+               // don't fire if previous attack is not finished
+               if (ATTACK_FINISHED(self) > time + self.weapon_frametime * 0.5)
+                       return FALSE;
+               // don't fire while changing weapon
+               if (self.weaponentity.state != WS_READY)
+                       return FALSE;
+       }
+       return TRUE;
+ }
+ float weapon_prepareattack_do(float secondary, float attacktime)
+ {
+       self.weaponentity.state = WS_INUSE;
+       self.spawnshieldtime = min(self.spawnshieldtime, time); // kill spawn shield when you fire
+       // if the weapon hasn't been firing continuously, reset the timer
+       if(attacktime >= 0)
+       {
+               if (ATTACK_FINISHED(self) < time - self.weapon_frametime * 1.5)
+               {
+                       ATTACK_FINISHED(self) = time;
+                       //dprint("resetting attack finished to ", ftos(time), "\n");
+               }
+               ATTACK_FINISHED(self) = ATTACK_FINISHED(self) + attacktime * W_WeaponRateFactor();
+       }
+       self.bulletcounter += 1;
+       //dprint("attack finished ", ftos(ATTACK_FINISHED(self)), "\n");
+       return TRUE;
+ }
+ float weapon_prepareattack(float secondary, float attacktime)
+ {
+       if(weapon_prepareattack_check(secondary, attacktime))
+       {
+               weapon_prepareattack_do(secondary, attacktime);
+               return TRUE;
+       }
+       else
+               return FALSE;
+ }
+ void weapon_thinkf(float fr, float t, void() func)
+ {
+       vector a;
+       vector of, or, ou;
+       float restartanim;
+       if(fr == WFRAME_DONTCHANGE)
+       {
+               fr = self.weaponentity.wframe;
+               restartanim = FALSE;
+       }
+       else if (fr == WFRAME_IDLE)
+               restartanim = FALSE;
+       else
+               restartanim = TRUE;
+       of = v_forward;
+       or = v_right;
+       ou = v_up;
+       if (self.weaponentity)
+       {
+               self.weaponentity.wframe = fr;
+               a = '0 0 0';
+               if (fr == WFRAME_IDLE)
+                       a = self.weaponentity.anim_idle;
+               else if (fr == WFRAME_FIRE1)
+                       a = self.weaponentity.anim_fire1;
+               else if (fr == WFRAME_FIRE2)
+                       a = self.weaponentity.anim_fire2;
+               else // if (fr == WFRAME_RELOAD)
+                       a = self.weaponentity.anim_reload;
+               a_z *= g_weaponratefactor;
+               setanim(self.weaponentity, a, restartanim == FALSE, restartanim, restartanim);
+       }
+       v_forward = of;
+       v_right = or;
+       v_up = ou;
+       if(self.weapon_think == w_ready && func != w_ready && self.weaponentity.state == WS_RAISE)
+       {
+               backtrace("Tried to override initial weapon think function - should this really happen?");
+       }
+       t *= W_WeaponRateFactor();
+       // VorteX: haste can be added here
+       if (self.weapon_think == w_ready)
+       {
+               self.weapon_nextthink = time;
+               //dprint("started firing at ", ftos(time), "\n");
+       }
+       if (self.weapon_nextthink < time - self.weapon_frametime * 1.5 || self.weapon_nextthink > time + self.weapon_frametime * 1.5)
+       {
+               self.weapon_nextthink = time;
+               //dprint("reset weapon animation timer at ", ftos(time), "\n");
+       }
+       self.weapon_nextthink = self.weapon_nextthink + t;
+       self.weapon_think = func;
+       //dprint("next ", ftos(self.weapon_nextthink), "\n");
+       if((fr == WFRAME_FIRE1 || fr == WFRAME_FIRE2) && t)
+       {
+               if((self.weapon == WEP_SHOCKWAVE || self.weapon == WEP_SHOTGUN) && fr == WFRAME_FIRE2)
+                       animdecide_setaction(self, ANIMACTION_MELEE, restartanim);
+               else
+                       animdecide_setaction(self, ANIMACTION_SHOOT, restartanim);
+       }
+       else
+       {
+               if(self.anim_upper_action == ANIMACTION_SHOOT || self.anim_upper_action == ANIMACTION_MELEE)
+                       self.anim_upper_action = 0;
+       }
+ }
+ float forbidWeaponUse()
+ {
+       if(time < game_starttime && !autocvar_sv_ready_restart_after_countdown)
+               return 1;
+       if(round_handler_IsActive() && !round_handler_IsRoundStarted())
+               return 1;
+       if(self.player_blocked)
+               return 1;
+       if(self.frozen)
+               return 1;
+       return 0;
+ }
+ void W_WeaponFrame()
+ {
+       vector fo, ri, up;
+       if (frametime)
+               self.weapon_frametime = frametime;
+       if (!self.weaponentity || self.health < 1)
+               return; // Dead player can't use weapons and injure impulse commands
+       if(forbidWeaponUse())
+       if(self.weaponentity.state != WS_CLEAR)
+       {
+               w_ready();
+               return;
+       }
+       if(!self.switchweapon)
+       {
+               self.weapon = 0;
+               self.switchingweapon = 0;
+               self.weaponentity.state = WS_CLEAR;
+               self.weaponname = "";
+               //self.items &= ~IT_AMMO;
+               return;
+       }
+       makevectors(self.v_angle);
+       fo = v_forward; // save them in case the weapon think functions change it
+       ri = v_right;
+       up = v_up;
+       // Change weapon
+       if (self.weapon != self.switchweapon)
+       {
+               if (self.weaponentity.state == WS_CLEAR)
+               {
+                       // end switching!
+                       self.switchingweapon = self.switchweapon;
+                       entity newwep = get_weaponinfo(self.switchweapon);
+                       // the two weapon entities will notice this has changed and update their models
+                       self.weapon = self.switchweapon;
+                       self.weaponname = newwep.mdl;
+                       self.bulletcounter = 0;
+                       //self.ammo_field = newwep.ammo_field;
+                       WEP_ACTION(self.switchweapon, WR_SETUP);
+                       self.weaponentity.state = WS_RAISE;
+                       // set our clip load to the load of the weapon we switched to, if it's reloadable
+                       if(newwep.spawnflags & WEP_FLAG_RELOADABLE && newwep.reloading_ammo) // prevent accessing undefined cvars
+                       {
+                               self.clip_load = self.(weapon_load[self.switchweapon]);
+                               self.clip_size = newwep.reloading_ammo;
+                       }
+                       else
+                               self.clip_load = self.clip_size = 0;
+                       weapon_thinkf(WFRAME_IDLE, newwep.switchdelay_raise, w_ready);
+               }
+               else if (self.weaponentity.state == WS_DROP)
+               {
+                       // in dropping phase we can switch at any time
+                       self.switchingweapon = self.switchweapon;
+               }
+               else if (self.weaponentity.state == WS_READY)
+               {
+                       // start switching!
+                       self.switchingweapon = self.switchweapon;
+                       entity oldwep = get_weaponinfo(self.weapon);
+                       // set up weapon switch think in the future, and start drop anim
+                       #ifndef INDEPENDENT_ATTACK_FINISHED
+                       if(ATTACK_FINISHED(self) <= time + self.weapon_frametime * 0.5)
+                       {
+                       #endif
+                               sound(self, CH_WEAPON_SINGLE, "weapons/weapon_switch.wav", VOL_BASE, ATTN_NORM);
+                               self.weaponentity.state = WS_DROP;
+                               weapon_thinkf(WFRAME_DONTCHANGE, oldwep.switchdelay_drop, w_clear);
+                       #ifndef INDEPENDENT_ATTACK_FINISHED
+                       }
+                       #endif
+               }
+       }
+       // LordHavoc: network timing test code
+       //if (self.button0)
+       //      print(ftos(frametime), " ", ftos(time), " >= ", ftos(ATTACK_FINISHED(self)), " >= ", ftos(self.weapon_nextthink), "\n");
+       float w;
+       w = self.weapon;
+       // call the think code which may fire the weapon
+       // and do so multiple times to resolve framerate dependency issues if the
+       // server framerate is very low and the weapon fire rate very high
+       float c;
+       c = 0;
+       while (c < W_TICSPERFRAME)
+       {
+               c = c + 1;
+               if(w && !(self.weapons & WepSet_FromWeapon(w)))
+               {
+                       if(self.weapon == self.switchweapon)
+                               W_SwitchWeapon_Force(self, w_getbestweapon(self));
+                       w = 0;
+               }
+               v_forward = fo;
+               v_right = ri;
+               v_up = up;
+               if(w)
+                       WEP_ACTION(self.weapon, WR_THINK);
+               else
+                       WEP_ACTION(self.weapon, WR_GONETHINK);
+               if (time + self.weapon_frametime * 0.5 >= self.weapon_nextthink)
+               {
+                       if(self.weapon_think)
+                       {
+                               v_forward = fo;
+                               v_right = ri;
+                               v_up = up;
+                               self.weapon_think();
+                       }
+                       else
+                               bprint("\{1}^1ERROR: undefined weapon think function for ", self.netname, "\n");
+               }
+       }
+ }
+ void W_AttachToShotorg(entity flash, vector offset)
+ {
+       entity xflash;
+       flash.owner = self;
+       flash.angles_z = random() * 360;
+       if(gettagindex(self.weaponentity, "shot"))
+               setattachment(flash, self.weaponentity, "shot");
+       else
+               setattachment(flash, self.weaponentity, "tag_shot");
+       setorigin(flash, offset);
+       xflash = spawn();
+       copyentity(flash, xflash);
+       flash.viewmodelforclient = self;
+       if(self.weaponentity.oldorigin_x > 0)
+       {
+               setattachment(xflash, self.exteriorweaponentity, "");
+               setorigin(xflash, self.weaponentity.oldorigin + offset);
+       }
+       else
+       {
+               if(gettagindex(self.exteriorweaponentity, "shot"))
+                       setattachment(xflash, self.exteriorweaponentity, "shot");
+               else
+                       setattachment(xflash, self.exteriorweaponentity, "tag_shot");
+               setorigin(xflash, offset);
+       }
+ }
+ void W_DecreaseAmmo(float ammo_use)
+ {
+       entity wep = get_weaponinfo(self.weapon);
++      if(cvar("g_overkill"))
++      if(self.ok_use_ammocharge)
++      {
++              ok_DecreaseCharge(self, self.weapon);
++              return; // TODO
++      }
++
+       if((self.items & IT_UNLIMITED_WEAPON_AMMO) && !wep.reloading_ammo)
+               return;
+       // if this weapon is reloadable, decrease its load. Else decrease the player's ammo
+       if(wep.reloading_ammo)
+       {
+               self.clip_load -= ammo_use;
+               self.(weapon_load[self.weapon]) = self.clip_load;
+       }
+       else if(wep.ammo_field != ammo_none)
+       {
+               self.(wep.ammo_field) -= ammo_use;
+               if(self.(wep.ammo_field) < 0)
+               {
+                       backtrace(sprintf(
+                               "W_DecreaseAmmo(%.2f): '%s' subtracted too much %s from '%s', resulting with '%.2f' left... "
+                               "Please notify Samual immediately with a copy of this backtrace!\n",
+                               ammo_use,
+                               wep.netname,
+                               GetAmmoPicture(wep.ammo_field),
+                               self.netname,
+                               self.(wep.ammo_field)
+                       ));
+               }
+       }
+ }
+ // weapon reloading code
+ .float reload_ammo_amount, reload_ammo_min, reload_time;
+ .float reload_complain;
+ .string reload_sound;
+ void W_ReloadedAndReady()
+ {
+       // finish the reloading process, and do the ammo transfer
+       self.clip_load = self.old_clip_load; // restore the ammo counter, in case we still had ammo in the weapon before reloading
+       // if the gun uses no ammo, max out weapon load, else decrease ammo as we increase weapon load
+       if(!self.reload_ammo_min || self.items & IT_UNLIMITED_WEAPON_AMMO || self.ammo_field == ammo_none)
+               self.clip_load = self.reload_ammo_amount;
+       else
+       {
+               while(self.clip_load < self.reload_ammo_amount && self.(self.ammo_field)) // make sure we don't add more ammo than we have
+               {
+                       self.clip_load += 1;
+                       self.(self.ammo_field) -= 1;
+               }
+       }
+       self.(weapon_load[self.weapon]) = self.clip_load;
+       // do not set ATTACK_FINISHED in reload code any more. This causes annoying delays if eg: You start reloading a weapon,
+       // then quickly switch to another weapon and back. Reloading is canceled, but the reload delay is still there,
+       // so your weapon is disabled for a few seconds without reason
+       //ATTACK_FINISHED(self) -= self.reload_time - 1;
+       w_ready();
+ }
+ void W_Reload(float sent_ammo_min, string sent_sound)
+ {
+       // set global values to work with
+       entity e;
+       e = get_weaponinfo(self.weapon);
++      if(cvar("g_overkill"))
++      if(self.ok_use_ammocharge)
++              return; // TODO
++
+       self.reload_ammo_min = sent_ammo_min;
+       self.reload_ammo_amount = e.reloading_ammo;;
+       self.reload_time = e.reloading_time;
+       self.reload_sound = sent_sound;
+       // don't reload weapons that don't have the RELOADABLE flag
+       if (!(e.spawnflags & WEP_FLAG_RELOADABLE))
+       {
+               dprint("Warning: Attempted to reload a weapon that does not have the WEP_FLAG_RELOADABLE flag. Fix your code!\n");
+               return;
+       }
+       // return if reloading is disabled for this weapon
+       if(!self.reload_ammo_amount)
+               return;
+       // our weapon is fully loaded, no need to reload
+       if (self.clip_load >= self.reload_ammo_amount)
+               return;
+       // no ammo, so nothing to load
+       if(self.ammo_field != ammo_none)
+       if(!self.(self.ammo_field) && self.reload_ammo_min)
+       if (!(self.items & IT_UNLIMITED_WEAPON_AMMO))
+       {
+               if(IS_REAL_CLIENT(self) && self.reload_complain < time)
+               {
+                       play2(self, "weapons/unavailable.wav");
+                       sprint(self, strcat("You don't have enough ammo to reload the ^2", WEP_NAME(self.weapon), "\n"));
+                       self.reload_complain = time + 1;
+               }
+               // switch away if the amount of ammo is not enough to keep using this weapon
+               if (!(WEP_ACTION(self.weapon, WR_CHECKAMMO1) + WEP_ACTION(self.weapon, WR_CHECKAMMO2)))
+               {
+                       self.clip_load = -1; // reload later
+                       W_SwitchToOtherWeapon(self);
+               }
+               return;
+       }
+       if (self.weaponentity)
+       {
+               if (self.weaponentity.wframe == WFRAME_RELOAD)
+                       return;
+               // allow switching away while reloading, but this will cause a new reload!
+               self.weaponentity.state = WS_READY;
+       }
+       // now begin the reloading process
+       sound(self, CH_WEAPON_SINGLE, self.reload_sound, VOL_BASE, ATTEN_NORM);
+       // do not set ATTACK_FINISHED in reload code any more. This causes annoying delays if eg: You start reloading a weapon,
+       // then quickly switch to another weapon and back. Reloading is canceled, but the reload delay is still there,
+       // so your weapon is disabled for a few seconds without reason
+       //ATTACK_FINISHED(self) = max(time, ATTACK_FINISHED(self)) + self.reload_time + 1;
+       weapon_thinkf(WFRAME_RELOAD, self.reload_time, W_ReloadedAndReady);
+       if(self.clip_load < 0)
+               self.clip_load = 0;
+       self.old_clip_load = self.clip_load;
+       self.clip_load = self.(weapon_load[self.weapon]) = -1;
+ }
+ entity weapon_dropevent_item;
+ void W_DropEvent(float event, entity player, float weapon_type, entity weapon_item)
+ {
+       entity oldself = self;
+       self = player;
+       weapon_dropevent_item = weapon_item;
+       WEP_ACTION(weapon_type, event);
+       self = oldself;
+ }