--- /dev/null
+ // {{{ #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
++// }}}
--- /dev/null
--- /dev/null
++// {{{ #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
++// }}}
--- /dev/null
+ // {{{ #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
++// }}}
--- /dev/null
+ // {{{ #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
++// }}}
--- /dev/null
+ // {{{ #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
++// }}}
--- /dev/null
+ // {{{ #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
++// }}}
--- /dev/null
--- /dev/null
++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
// ===========
- // 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
// =========
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
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;
--- /dev/null
+ .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");
+
+ }
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;
#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);
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);
#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_)
// ===========================
#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 "";
}
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
--- /dev/null
-// 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;
--- /dev/null
+ // 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"
--- /dev/null
--- /dev/null
++#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
--- /dev/null
--- /dev/null
++#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
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")));
.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.
--- /dev/null
- 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;
+ }
--- /dev/null
- 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;
+}
--- /dev/null
+.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;
+
--- /dev/null
- 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
+ }
MUTATOR_DECLARATION(mutator_melee_only);
MUTATOR_DECLARATION(mutator_nades);
MUTATOR_DECLARATION(mutator_campcheck);
+ MUTATOR_DECLARATION(mutator_buffs);
MUTATOR_DECLARATION(sandbox);
+MUTATOR_DECLARATION(mutator_overkill);
+
--- /dev/null
+ #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"
--- /dev/null
+ #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"
--- /dev/null
+ /*
+ ===========================================================================
+
+ 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;
+ }