From: Mario Date: Sat, 13 Dec 2014 02:59:44 +0000 (+1100) Subject: (Untested) Merge branch 'master' into Mario/overkill X-Git-Tag: xonotic-v0.8.0~70^2~15 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=a59c12d71fa599891fc1d658aeea2f546d89d9e4;p=xonotic%2Fxonotic-data.pk3dir.git (Untested) Merge branch 'master' into Mario/overkill Conflicts: balance25.cfg balanceFruitieX.cfg balanceXDF.cfg balanceXPM.cfg balanceXonotic.cfg defaultXonotic.cfg qcsrc/client/View.qc qcsrc/client/autocvars.qh qcsrc/client/waypointsprites.qc qcsrc/client/weapons/projectile.qc qcsrc/common/constants.qh qcsrc/common/notifications.qh qcsrc/common/weapons/all.qh qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c qcsrc/server/cl_weapons.qc qcsrc/server/miscfunctions.qc qcsrc/server/mutators/mutator_instagib.qc qcsrc/server/mutators/mutator_nades.qc qcsrc/server/mutators/mutator_nades.qh qcsrc/server/progs.src qcsrc/server/weapons/weaponsystem.qc --- a59c12d71fa599891fc1d658aeea2f546d89d9e4 diff --cc bal-wep-nexuiz25.cfg index 000000000,b2427eccd..0e9db8168 mode 000000,100644..100644 --- a/bal-wep-nexuiz25.cfg +++ b/bal-wep-nexuiz25.cfg @@@ -1,0 -1,763 +1,804 @@@ + // {{{ #1: Blaster + set g_balance_blaster_primary_animtime 0.3 + set g_balance_blaster_primary_damage 35 + set g_balance_blaster_primary_delay 0 + set g_balance_blaster_primary_edgedamage 10 + set g_balance_blaster_primary_force 400 + set g_balance_blaster_primary_force_zscale 1 + set g_balance_blaster_primary_lifetime 30 + set g_balance_blaster_primary_radius 70 + set g_balance_blaster_primary_refire 0.7 + set g_balance_blaster_primary_shotangle 0 + set g_balance_blaster_primary_speed 9000 + set g_balance_blaster_primary_spread 0 + set g_balance_blaster_secondary 0 + set g_balance_blaster_secondary_animtime 0.3 + set g_balance_blaster_secondary_damage 35 + set g_balance_blaster_secondary_delay 0 + set g_balance_blaster_secondary_edgedamage 10 + set g_balance_blaster_secondary_force 400 + set g_balance_blaster_secondary_force_zscale 1 + set g_balance_blaster_secondary_lifetime 30 + set g_balance_blaster_secondary_radius 70 + set g_balance_blaster_secondary_refire 0.7 + set g_balance_blaster_secondary_shotangle 0 + set g_balance_blaster_secondary_speed 9000 + set g_balance_blaster_secondary_spread 0 + set g_balance_blaster_switchdelay_drop 0.15 + set g_balance_blaster_switchdelay_raise 0.15 + set g_balance_blaster_weaponreplace "" + set g_balance_blaster_weaponstart 1 + set g_balance_blaster_weaponstartoverride -1 + set g_balance_blaster_weaponthrowable 0 + // }}} + // {{{ #2: Shotgun + set g_balance_shotgun_primary_ammo 1 + set g_balance_shotgun_primary_animtime 0.2 + set g_balance_shotgun_primary_bullets 6 + set g_balance_shotgun_primary_damage 9 + set g_balance_shotgun_primary_force 60 + set g_balance_shotgun_primary_refire 0.5 + set g_balance_shotgun_primary_solidpenetration 3.8 + set g_balance_shotgun_primary_spread 0.07 + set g_balance_shotgun_reload_ammo 0 + set g_balance_shotgun_reload_time 2 + set g_balance_shotgun_secondary 2 + set g_balance_shotgun_secondary_animtime 1 + set g_balance_shotgun_secondary_damage 80 + set g_balance_shotgun_secondary_force 200 + set g_balance_shotgun_secondary_melee_delay 0.25 + set g_balance_shotgun_secondary_melee_multihit 1 + set g_balance_shotgun_secondary_melee_no_doubleslap 1 + set g_balance_shotgun_secondary_melee_nonplayerdamage 40 + set g_balance_shotgun_secondary_melee_range 120 + set g_balance_shotgun_secondary_melee_swing_side 120 + set g_balance_shotgun_secondary_melee_swing_up 30 + set g_balance_shotgun_secondary_melee_time 0.15 + set g_balance_shotgun_secondary_melee_traces 10 + set g_balance_shotgun_secondary_refire 1.25 + set g_balance_shotgun_secondary_alt_animtime 0.2 + set g_balance_shotgun_secondary_alt_refire 1.2 + set g_balance_shotgun_switchdelay_drop 0.15 + set g_balance_shotgun_switchdelay_raise 0.15 + set g_balance_shotgun_weaponreplace "" + set g_balance_shotgun_weaponstart 1 + set g_balance_shotgun_weaponstartoverride -1 + set g_balance_shotgun_weaponthrowable 1 + // }}} + // {{{ #3: Machine Gun + set g_balance_machinegun_burst 0 + set g_balance_machinegun_burst_ammo 3 + set g_balance_machinegun_burst_animtime 0.75 + set g_balance_machinegun_burst_refire 0.05 + set g_balance_machinegun_burst_refire2 0.75 + set g_balance_machinegun_burst_speed 0 + set g_balance_machinegun_first 1 + set g_balance_machinegun_first_ammo 1 + set g_balance_machinegun_first_damage 30 + set g_balance_machinegun_first_force 50 + set g_balance_machinegun_first_refire 0.2 + set g_balance_machinegun_first_spread 0.015 + set g_balance_machinegun_mode 0 + set g_balance_machinegun_reload_ammo 0 + set g_balance_machinegun_reload_time 2 + set g_balance_machinegun_solidpenetration 13.1 + set g_balance_machinegun_spread_add 0.02 + set g_balance_machinegun_spread_max 0.6 + set g_balance_machinegun_spread_min 0.02 + set g_balance_machinegun_sustained_ammo 1 + set g_balance_machinegun_sustained_damage 15 + set g_balance_machinegun_sustained_force 27 + set g_balance_machinegun_sustained_refire 0.1 + set g_balance_machinegun_sustained_spread 0.05 + set g_balance_machinegun_switchdelay_drop 0.15 + set g_balance_machinegun_switchdelay_raise 0.15 + set g_balance_machinegun_weaponreplace "" + set g_balance_machinegun_weaponstart 0 + set g_balance_machinegun_weaponstartoverride -1 + set g_balance_machinegun_weaponthrowable 1 + // }}} + // {{{ #4: Mortar + set g_balance_mortar_bouncefactor 0.5 + set g_balance_mortar_bouncestop 0.075 + set g_balance_mortar_primary_ammo 2 + set g_balance_mortar_primary_animtime 0.3 + set g_balance_mortar_primary_damage 70 + set g_balance_mortar_primary_damageforcescale 4 + set g_balance_mortar_primary_edgedamage 25 + set g_balance_mortar_primary_force 400 + set g_balance_mortar_primary_health 25 + set g_balance_mortar_primary_lifetime 30 + set g_balance_mortar_primary_lifetime_stick 1 + set g_balance_mortar_primary_radius 140 + set g_balance_mortar_primary_refire 0.8 + set g_balance_mortar_primary_remote_minbouncecnt 0 + set g_balance_mortar_primary_speed 2000 + set g_balance_mortar_primary_speed_up 200 + set g_balance_mortar_primary_speed_z 0 + set g_balance_mortar_primary_spread 0 + set g_balance_mortar_primary_type 0 + set g_balance_mortar_reload_ammo 0 + set g_balance_mortar_reload_time 2 + set g_balance_mortar_secondary_ammo 2 + set g_balance_mortar_secondary_animtime 0.3 + set g_balance_mortar_secondary_damage 70 + set g_balance_mortar_secondary_damageforcescale 4 + set g_balance_mortar_secondary_edgedamage 38 + set g_balance_mortar_secondary_force 400 + set g_balance_mortar_secondary_health 10 + set g_balance_mortar_secondary_lifetime 2.5 + set g_balance_mortar_secondary_lifetime_bounce 0 + set g_balance_mortar_secondary_lifetime_stick 0 + set g_balance_mortar_secondary_radius 140 + set g_balance_mortar_secondary_refire 0.7 + set g_balance_mortar_secondary_remote_detonateprimary 0 + set g_balance_mortar_secondary_speed 1400 + set g_balance_mortar_secondary_speed_up 200 + set g_balance_mortar_secondary_speed_z 0 + set g_balance_mortar_secondary_spread 0 + set g_balance_mortar_secondary_type 1 + set g_balance_mortar_switchdelay_drop 0.15 + set g_balance_mortar_switchdelay_raise 0.15 + set g_balance_mortar_weaponreplace "" + set g_balance_mortar_weaponstart 0 + set g_balance_mortar_weaponstartoverride -1 + set g_balance_mortar_weaponthrowable 1 + // }}} + // {{{ #5: Mine Layer (MUTATOR WEAPON) + set g_balance_minelayer_ammo 4 + set g_balance_minelayer_animtime 0.4 + set g_balance_minelayer_damage 40 + set g_balance_minelayer_damageforcescale 0 + set g_balance_minelayer_detonatedelay -1 + set g_balance_minelayer_edgedamage 20 + set g_balance_minelayer_force 250 + set g_balance_minelayer_health 15 + set g_balance_minelayer_lifetime 10 + set g_balance_minelayer_lifetime_countdown 0.5 + set g_balance_minelayer_limit 3 + set g_balance_minelayer_protection 0 + set g_balance_minelayer_proximityradius 150 + set g_balance_minelayer_radius 175 + set g_balance_minelayer_refire 1.5 + set g_balance_minelayer_reload_ammo 0 + set g_balance_minelayer_reload_time 2 + set g_balance_minelayer_remote_damage 45 + set g_balance_minelayer_remote_edgedamage 40 + set g_balance_minelayer_remote_force 300 + set g_balance_minelayer_remote_radius 200 + set g_balance_minelayer_speed 1000 + set g_balance_minelayer_switchdelay_drop 0.15 + set g_balance_minelayer_switchdelay_raise 0.15 + set g_balance_minelayer_time 0.5 + set g_balance_minelayer_weaponreplace "" + set g_balance_minelayer_weaponstart 0 + set g_balance_minelayer_weaponstartoverride -1 + set g_balance_minelayer_weaponthrowable 1 + // }}} + // {{{ #6: Electro + set g_balance_electro_combo_comboradius 0 + set g_balance_electro_combo_comboradius_thruwall 0 + set g_balance_electro_combo_damage 80 + set g_balance_electro_combo_edgedamage 0 + set g_balance_electro_combo_force 200 + set g_balance_electro_combo_radius 250 + set g_balance_electro_combo_safeammocheck 0 + set g_balance_electro_combo_speed 2000 + set g_balance_electro_primary_ammo 2 + set g_balance_electro_primary_animtime 0.3 + set g_balance_electro_primary_comboradius 0 + set g_balance_electro_primary_damage 65 + set g_balance_electro_primary_edgedamage 0 + set g_balance_electro_primary_force 200 + set g_balance_electro_primary_lifetime 30 + set g_balance_electro_primary_midaircombo_explode 0 + set g_balance_electro_primary_midaircombo_interval 0 + set g_balance_electro_primary_midaircombo_radius 0 + set g_balance_electro_primary_radius 150 + set g_balance_electro_primary_refire 0.6 + set g_balance_electro_primary_speed 2000 + set g_balance_electro_primary_spread 0 + set g_balance_electro_reload_ammo 0 + set g_balance_electro_reload_time 2 + set g_balance_electro_secondary_ammo 2 + set g_balance_electro_secondary_animtime 0.3 + set g_balance_electro_secondary_bouncefactor 0.5 + set g_balance_electro_secondary_bouncestop 0.075 + set g_balance_electro_secondary_count 1 + set g_balance_electro_secondary_damage 50 + set g_balance_electro_secondary_damagedbycontents 0 + set g_balance_electro_secondary_damageforcescale 4 + set g_balance_electro_secondary_edgedamage 0 + set g_balance_electro_secondary_force 200 + set g_balance_electro_secondary_health 5 + set g_balance_electro_secondary_lifetime 5 + set g_balance_electro_secondary_radius 150 + set g_balance_electro_secondary_refire 0.3 + set g_balance_electro_secondary_refire2 0 + set g_balance_electro_secondary_speed 900 + set g_balance_electro_secondary_speed_up 200 + set g_balance_electro_secondary_speed_z 0 + set g_balance_electro_secondary_spread 0.04 + set g_balance_electro_secondary_touchexplode 0 + set g_balance_electro_switchdelay_drop 0.15 + set g_balance_electro_switchdelay_raise 0.15 + set g_balance_electro_weaponreplace "" + set g_balance_electro_weaponstart 0 + set g_balance_electro_weaponstartoverride -1 + set g_balance_electro_weaponthrowable 1 + // }}} + // {{{ #7: Crylink + set g_balance_crylink_primary_ammo 2 + set g_balance_crylink_primary_animtime 0.3 + set g_balance_crylink_primary_bouncedamagefactor 0.5 + set g_balance_crylink_primary_bounces 1 + set g_balance_crylink_primary_damage 18 + set g_balance_crylink_primary_edgedamage 0 + set g_balance_crylink_primary_force -55 + set g_balance_crylink_primary_joindelay 0 + set g_balance_crylink_primary_joinexplode 0 + set g_balance_crylink_primary_joinexplode_damage 0 + set g_balance_crylink_primary_joinexplode_edgedamage 0 + set g_balance_crylink_primary_joinexplode_force 0 + set g_balance_crylink_primary_joinexplode_radius 0 + set g_balance_crylink_primary_joinspread 0 + set g_balance_crylink_primary_linkexplode 1 + set g_balance_crylink_primary_middle_fadetime 5 + set g_balance_crylink_primary_middle_lifetime 5 + set g_balance_crylink_primary_other_fadetime 0.25 + set g_balance_crylink_primary_other_lifetime 0.1 + set g_balance_crylink_primary_radius 80 + set g_balance_crylink_primary_refire 0.4 + set g_balance_crylink_primary_shots 4 + set g_balance_crylink_primary_speed 7000 + set g_balance_crylink_primary_spread 0.03 + set g_balance_crylink_reload_ammo 0 + set g_balance_crylink_reload_time 2 + set g_balance_crylink_secondary 1 + set g_balance_crylink_secondary_ammo 2 + set g_balance_crylink_secondary_animtime 0.2 + set g_balance_crylink_secondary_bouncedamagefactor 0.5 + set g_balance_crylink_secondary_bounces 0 + set g_balance_crylink_secondary_damage 18 + set g_balance_crylink_secondary_edgedamage 5 + set g_balance_crylink_secondary_force -55 + set g_balance_crylink_secondary_joindelay 0 + set g_balance_crylink_secondary_joinexplode 0 + set g_balance_crylink_secondary_joinexplode_damage 0 + set g_balance_crylink_secondary_joinexplode_edgedamage 0 + set g_balance_crylink_secondary_joinexplode_force 0 + set g_balance_crylink_secondary_joinexplode_radius 0 + set g_balance_crylink_secondary_joinspread 0 + set g_balance_crylink_secondary_linkexplode 1 + set g_balance_crylink_secondary_middle_fadetime 5 + set g_balance_crylink_secondary_middle_lifetime 5 + set g_balance_crylink_secondary_other_fadetime 2 + set g_balance_crylink_secondary_other_lifetime 2 + set g_balance_crylink_secondary_radius 100 + set g_balance_crylink_secondary_refire 0.5 + set g_balance_crylink_secondary_shots 7 + set g_balance_crylink_secondary_speed 7000 + set g_balance_crylink_secondary_spread 0.08 + set g_balance_crylink_secondary_spreadtype 0 + set g_balance_crylink_switchdelay_drop 0.15 + set g_balance_crylink_switchdelay_raise 0.15 + set g_balance_crylink_weaponreplace "" + set g_balance_crylink_weaponstart 0 + set g_balance_crylink_weaponstartoverride -1 + set g_balance_crylink_weaponthrowable 1 + // }}} + // {{{ #8: Vortex + set g_balance_vortex_charge 0 + set g_balance_vortex_charge_animlimit 0.5 + set g_balance_vortex_charge_limit 1 + set g_balance_vortex_charge_maxspeed 800 + set g_balance_vortex_charge_mindmg 40 + set g_balance_vortex_charge_minspeed 400 + set g_balance_vortex_charge_rate 0.4 + set g_balance_vortex_charge_rot_pause 0 + set g_balance_vortex_charge_rot_rate 0 + set g_balance_vortex_charge_shot_multiplier 0 + set g_balance_vortex_charge_start 0.5 + set g_balance_vortex_charge_velocity_rate 0 + set g_balance_vortex_primary_ammo 5 + set g_balance_vortex_primary_animtime 0.3 + set g_balance_vortex_primary_damage 100 + set g_balance_vortex_primary_damagefalloff_forcehalflife 0 + set g_balance_vortex_primary_damagefalloff_halflife 0 + set g_balance_vortex_primary_damagefalloff_maxdist 0 + set g_balance_vortex_primary_damagefalloff_mindist 0 + set g_balance_vortex_primary_force 600 + set g_balance_vortex_primary_refire 1.5 + set g_balance_vortex_reload_ammo 0 + set g_balance_vortex_reload_time 2 + set g_balance_vortex_secondary 0 + set g_balance_vortex_secondary_ammo 2 + set g_balance_vortex_secondary_animtime 0 + set g_balance_vortex_secondary_chargepool 0 + set g_balance_vortex_secondary_chargepool_pause_regen 1 + set g_balance_vortex_secondary_chargepool_regen 0.15 + set g_balance_vortex_secondary_damage 0 + set g_balance_vortex_secondary_damagefalloff_forcehalflife 0 + set g_balance_vortex_secondary_damagefalloff_halflife 0 + set g_balance_vortex_secondary_damagefalloff_maxdist 0 + set g_balance_vortex_secondary_damagefalloff_mindist 0 + set g_balance_vortex_secondary_force 0 + set g_balance_vortex_secondary_refire 0 + set g_balance_vortex_switchdelay_drop 0.15 + set g_balance_vortex_switchdelay_raise 0.15 + set g_balance_vortex_weaponreplace "" + set g_balance_vortex_weaponstart 0 + set g_balance_vortex_weaponstartoverride -1 + set g_balance_vortex_weaponthrowable 1 + // }}} + // {{{ #9: Hagar + set g_balance_hagar_primary_ammo 1 + set g_balance_hagar_primary_damage 37 + set g_balance_hagar_primary_damageforcescale 0 + set g_balance_hagar_primary_edgedamage 15 + set g_balance_hagar_primary_force 100 + set g_balance_hagar_primary_health 0 + set g_balance_hagar_primary_lifetime 30 + set g_balance_hagar_primary_radius 65 + set g_balance_hagar_primary_refire 0.15 + set g_balance_hagar_primary_speed 3000 + set g_balance_hagar_primary_spread 0.010 + set g_balance_hagar_reload_ammo 0 + set g_balance_hagar_reload_time 2 + set g_balance_hagar_secondary 1 + set g_balance_hagar_secondary_ammo 1 + set g_balance_hagar_secondary_damage 37 + set g_balance_hagar_secondary_damageforcescale 0 + set g_balance_hagar_secondary_edgedamage 15 + set g_balance_hagar_secondary_force 100 + set g_balance_hagar_secondary_health 0 + set g_balance_hagar_secondary_lifetime_min 30 + set g_balance_hagar_secondary_lifetime_rand 0 + set g_balance_hagar_secondary_load 0 + set g_balance_hagar_secondary_load_abort 1 + set g_balance_hagar_secondary_load_animtime 0.2 + set g_balance_hagar_secondary_load_hold 4 + set g_balance_hagar_secondary_load_linkexplode 0 + set g_balance_hagar_secondary_load_max 4 + set g_balance_hagar_secondary_load_releasedeath 0 + set g_balance_hagar_secondary_load_speed 0.5 + set g_balance_hagar_secondary_load_spread 0.075 + set g_balance_hagar_secondary_load_spread_bias 0.5 + set g_balance_hagar_secondary_radius 80 + set g_balance_hagar_secondary_refire 0.15 + set g_balance_hagar_secondary_speed 1400 + set g_balance_hagar_secondary_spread 0.015 + set g_balance_hagar_switchdelay_drop 0.15 + set g_balance_hagar_switchdelay_raise 0.15 + set g_balance_hagar_weaponreplace "" + set g_balance_hagar_weaponstart 0 + set g_balance_hagar_weaponstartoverride -1 + set g_balance_hagar_weaponthrowable 1 + // }}} + // {{{ #10: Devastator + set g_balance_devastator_ammo 3 + set g_balance_devastator_animtime 0.3 + set g_balance_devastator_damage 105 + set g_balance_devastator_damageforcescale 4 + set g_balance_devastator_detonatedelay 0.2 + set g_balance_devastator_edgedamage 40 + set g_balance_devastator_force 600 + set g_balance_devastator_guidedelay 0.15 + set g_balance_devastator_guidegoal 512 + set g_balance_devastator_guiderate 90 + set g_balance_devastator_guideratedelay 0.01 + set g_balance_devastator_guidestop 0 + set g_balance_devastator_health 40 + set g_balance_devastator_lifetime 30 + set g_balance_devastator_radius 150 + set g_balance_devastator_refire 1 + set g_balance_devastator_reload_ammo 0 + set g_balance_devastator_reload_time 2 + set g_balance_devastator_remote_damage 105 + set g_balance_devastator_remote_edgedamage 40 + set g_balance_devastator_remote_force 600 + set g_balance_devastator_remote_jump_damage 70 + set g_balance_devastator_remote_jump_radius 0 + set g_balance_devastator_remote_jump_velocity_z_add 400 + set g_balance_devastator_remote_jump_velocity_z_max 1500 + set g_balance_devastator_remote_jump_velocity_z_min 400 + set g_balance_devastator_remote_radius 150 + set g_balance_devastator_speed 850 + set g_balance_devastator_speedaccel 0 + set g_balance_devastator_speedstart 850 + set g_balance_devastator_switchdelay_drop 0.15 + set g_balance_devastator_switchdelay_raise 0.15 + set g_balance_devastator_weaponreplace "" + set g_balance_devastator_weaponstart 0 + set g_balance_devastator_weaponstartoverride -1 + set g_balance_devastator_weaponthrowable 1 + // }}} + // {{{ #11: Port-O-Launch + set g_balance_porto_primary_animtime 0.3 + set g_balance_porto_primary_lifetime 30 + set g_balance_porto_primary_refire 1.5 + set g_balance_porto_primary_speed 2000 + set g_balance_porto_secondary 1 + set g_balance_porto_secondary_animtime 0.3 + set g_balance_porto_secondary_lifetime 30 + set g_balance_porto_secondary_refire 1.5 + set g_balance_porto_secondary_speed 2000 + set g_balance_porto_switchdelay_drop 0.15 + set g_balance_porto_switchdelay_raise 0.15 + set g_balance_porto_weaponreplace "" + set g_balance_porto_weaponstart 0 + set g_balance_porto_weaponstartoverride -1 + set g_balance_porto_weaponthrowable 1 + // }}} + // {{{ #12: Vaporizer + set g_balance_vaporizer_primary_ammo 10 + set g_balance_vaporizer_primary_animtime 0.3 + set g_balance_vaporizer_primary_refire 1 + set g_balance_vaporizer_reload_ammo 0 + set g_balance_vaporizer_reload_time 0 + set g_balance_vaporizer_secondary_ammo 0 + set g_balance_vaporizer_secondary_animtime 0.2 + set g_balance_vaporizer_secondary_damage 25 + set g_balance_vaporizer_secondary_delay 0 + set g_balance_vaporizer_secondary_edgedamage 12.5 + set g_balance_vaporizer_secondary_force 400 + set g_balance_vaporizer_secondary_lifetime 5 + set g_balance_vaporizer_secondary_radius 70 + set g_balance_vaporizer_secondary_refire 0.7 + set g_balance_vaporizer_secondary_shotangle 0 + set g_balance_vaporizer_secondary_speed 6000 + set g_balance_vaporizer_secondary_spread 0 + set g_balance_vaporizer_switchdelay_drop 0.15 + set g_balance_vaporizer_switchdelay_raise 0.15 + set g_balance_vaporizer_weaponreplace "" + set g_balance_vaporizer_weaponstart 0 + set g_balance_vaporizer_weaponstartoverride -1 + set g_balance_vaporizer_weaponthrowable 0 + // }}} + // {{{ #13: Grappling Hook + set g_balance_hook_primary_ammo 5 + set g_balance_hook_primary_animtime 0.3 + set g_balance_hook_primary_hooked_ammo 5 + set g_balance_hook_primary_hooked_time_free 2 + set g_balance_hook_primary_hooked_time_max 0 + set g_balance_hook_primary_refire 0.2 + set g_balance_hook_secondary_animtime 0.3 + set g_balance_hook_secondary_damage 25 + set g_balance_hook_secondary_damageforcescale 0 + set g_balance_hook_secondary_duration 1.5 + set g_balance_hook_secondary_edgedamage 5 + set g_balance_hook_secondary_force -2000 + set g_balance_hook_secondary_gravity 5 + set g_balance_hook_secondary_health 15 + set g_balance_hook_secondary_lifetime 5 + set g_balance_hook_secondary_power 3 + set g_balance_hook_secondary_radius 500 + set g_balance_hook_secondary_refire 3 + set g_balance_hook_secondary_speed 0 + set g_balance_hook_switchdelay_drop 0.15 + set g_balance_hook_switchdelay_raise 0.15 + set g_balance_hook_weaponreplace "" + set g_balance_hook_weaponstart 0 + set g_balance_hook_weaponstartoverride -1 + set g_balance_hook_weaponthrowable 1 + // }}} + // {{{ #14: Heavy Laser Assault Cannon (MUTATOR WEAPON) + set g_balance_hlac_primary_ammo 1 + set g_balance_hlac_primary_animtime 0.4 + set g_balance_hlac_primary_damage 18 + set g_balance_hlac_primary_edgedamage 9 + set g_balance_hlac_primary_force 90 + set g_balance_hlac_primary_lifetime 5 + set g_balance_hlac_primary_radius 70 + set g_balance_hlac_primary_refire 0.15 + set g_balance_hlac_primary_speed 9000 + set g_balance_hlac_primary_spread_add 0.0045 + set g_balance_hlac_primary_spread_crouchmod 0.25 + set g_balance_hlac_primary_spread_max 0.25 + set g_balance_hlac_primary_spread_min 0.01 + set g_balance_hlac_reload_ammo 0 + set g_balance_hlac_reload_time 2 + set g_balance_hlac_secondary 1 + set g_balance_hlac_secondary_ammo 10 + set g_balance_hlac_secondary_animtime 0.3 + set g_balance_hlac_secondary_damage 15 + set g_balance_hlac_secondary_edgedamage 7.5 + set g_balance_hlac_secondary_force 90 + set g_balance_hlac_secondary_lifetime 5 + set g_balance_hlac_secondary_radius 70 + set g_balance_hlac_secondary_refire 1 + set g_balance_hlac_secondary_shots 6 + set g_balance_hlac_secondary_speed 9000 + set g_balance_hlac_secondary_spread 0.15 + set g_balance_hlac_secondary_spread_crouchmod 0.5 + set g_balance_hlac_switchdelay_drop 0.15 + set g_balance_hlac_switchdelay_raise 0.15 + set g_balance_hlac_weaponreplace "" + set g_balance_hlac_weaponstart 0 + set g_balance_hlac_weaponstartoverride -1 + set g_balance_hlac_weaponthrowable 1 + // }}} + // {{{ #15: @!#%'n Tuba + set g_balance_tuba_animtime 0.05 + set g_balance_tuba_attenuation 0.5 + set g_balance_tuba_damage 5 + set g_balance_tuba_edgedamage 0 + set g_balance_tuba_fadetime 0.25 + set g_balance_tuba_force 40 + set g_balance_tuba_pitchstep 6 + set g_balance_tuba_radius 200 + set g_balance_tuba_refire 0.05 + set g_balance_tuba_switchdelay_drop 0.15 + set g_balance_tuba_switchdelay_raise 0.15 + set g_balance_tuba_volume 1 + set g_balance_tuba_weaponreplace "" + set g_balance_tuba_weaponstart 0 + set g_balance_tuba_weaponstartoverride -1 + set g_balance_tuba_weaponthrowable 1 + // }}} + // {{{ #16: Rifle (MUTATOR WEAPON) + set g_balance_rifle_bursttime 0 + set g_balance_rifle_primary_ammo 10 + set g_balance_rifle_primary_animtime 0.4 + set g_balance_rifle_primary_bullethail 0 + set g_balance_rifle_primary_burstcost 0 + set g_balance_rifle_primary_damage 80 + set g_balance_rifle_primary_force 100 + set g_balance_rifle_primary_refire 1.2 + set g_balance_rifle_primary_shots 1 + set g_balance_rifle_primary_solidpenetration 62.2 + set g_balance_rifle_primary_spread 0 + set g_balance_rifle_primary_tracer 1 + set g_balance_rifle_reload_ammo 80 + set g_balance_rifle_reload_time 2 + set g_balance_rifle_secondary 1 + set g_balance_rifle_secondary_ammo 10 + set g_balance_rifle_secondary_animtime 0.3 + set g_balance_rifle_secondary_bullethail 0 + set g_balance_rifle_secondary_burstcost 0 + set g_balance_rifle_secondary_damage 20 + set g_balance_rifle_secondary_force 50 + set g_balance_rifle_secondary_refire 0.9 + set g_balance_rifle_secondary_reload 0 + set g_balance_rifle_secondary_shots 4 + set g_balance_rifle_secondary_solidpenetration 15.5 + set g_balance_rifle_secondary_spread 0.04 + set g_balance_rifle_secondary_tracer 0 + set g_balance_rifle_switchdelay_drop 0.15 + set g_balance_rifle_switchdelay_raise 0.15 + set g_balance_rifle_weaponreplace "" + set g_balance_rifle_weaponstart 0 + set g_balance_rifle_weaponstartoverride -1 + set g_balance_rifle_weaponthrowable 1 + // }}} + // {{{ #17: Fireball + set g_balance_fireball_primary_animtime 0.4 + set g_balance_fireball_primary_bfgdamage 100 + set g_balance_fireball_primary_bfgforce 0 + set g_balance_fireball_primary_bfgradius 1000 + set g_balance_fireball_primary_damage 200 + set g_balance_fireball_primary_damageforcescale 0 + set g_balance_fireball_primary_edgedamage 50 + set g_balance_fireball_primary_force 600 + set g_balance_fireball_primary_health 0 + set g_balance_fireball_primary_laserburntime 0.5 + set g_balance_fireball_primary_laserdamage 80 + set g_balance_fireball_primary_laseredgedamage 20 + set g_balance_fireball_primary_laserradius 256 + set g_balance_fireball_primary_lifetime 15 + set g_balance_fireball_primary_radius 200 + set g_balance_fireball_primary_refire 2 + set g_balance_fireball_primary_refire2 0 + set g_balance_fireball_primary_speed 1200 + set g_balance_fireball_primary_spread 0 + set g_balance_fireball_secondary_animtime 0.3 + set g_balance_fireball_secondary_damage 40 + set g_balance_fireball_secondary_damageforcescale 4 + set g_balance_fireball_secondary_damagetime 5 + set g_balance_fireball_secondary_laserburntime 0.5 + set g_balance_fireball_secondary_laserdamage 50 + set g_balance_fireball_secondary_laseredgedamage 20 + set g_balance_fireball_secondary_laserradius 110 + set g_balance_fireball_secondary_lifetime 7 + set g_balance_fireball_secondary_refire 1.5 + set g_balance_fireball_secondary_speed 900 + set g_balance_fireball_secondary_speed_up 100 + set g_balance_fireball_secondary_speed_z 0 + set g_balance_fireball_secondary_spread 0 + set g_balance_fireball_switchdelay_drop 0.15 + set g_balance_fireball_switchdelay_raise 0.15 + set g_balance_fireball_weaponreplace "" + set g_balance_fireball_weaponstart 0 + set g_balance_fireball_weaponstartoverride -1 + set g_balance_fireball_weaponthrowable 0 + // }}} + // {{{ #18: T.A.G. Seeker (MUTATOR WEAPON) + set g_balance_seeker_flac_ammo 1 + set g_balance_seeker_flac_animtime 0.1 + set g_balance_seeker_flac_damage 15 + set g_balance_seeker_flac_edgedamage 10 + set g_balance_seeker_flac_force 50 + set g_balance_seeker_flac_lifetime 0.1 + set g_balance_seeker_flac_lifetime_rand 0.05 + set g_balance_seeker_flac_radius 100 + set g_balance_seeker_flac_refire 0.1 + set g_balance_seeker_flac_speed 3000 + set g_balance_seeker_flac_speed_up 1000 + set g_balance_seeker_flac_speed_z 0 + set g_balance_seeker_flac_spread 0.4 + set g_balance_seeker_missile_accel 1400 + set g_balance_seeker_missile_ammo 2 + set g_balance_seeker_missile_animtime 0.2 + set g_balance_seeker_missile_count 3 + set g_balance_seeker_missile_damage 30 + set g_balance_seeker_missile_damageforcescale 4 + set g_balance_seeker_missile_decel 1400 + set g_balance_seeker_missile_delay 0.25 + set g_balance_seeker_missile_edgedamage 10 + set g_balance_seeker_missile_force 150 + set g_balance_seeker_missile_health 5 + set g_balance_seeker_missile_lifetime 15 + set g_balance_seeker_missile_proxy 0 + set g_balance_seeker_missile_proxy_delay 0.2 + set g_balance_seeker_missile_proxy_maxrange 45 + set g_balance_seeker_missile_radius 80 + set g_balance_seeker_missile_refire 0.5 + set g_balance_seeker_missile_smart 1 + set g_balance_seeker_missile_smart_mindist 800 + set g_balance_seeker_missile_smart_trace_max 2500 + set g_balance_seeker_missile_smart_trace_min 1000 + set g_balance_seeker_missile_speed 700 + set g_balance_seeker_missile_speed_max 1300 + set g_balance_seeker_missile_speed_up 300 + set g_balance_seeker_missile_speed_z 0 + set g_balance_seeker_missile_spread 0 + set g_balance_seeker_missile_turnrate 0.65 + set g_balance_seeker_reload_ammo 0 + set g_balance_seeker_reload_time 2 + set g_balance_seeker_switchdelay_drop 0.15 + set g_balance_seeker_switchdelay_raise 0.15 + set g_balance_seeker_tag_ammo 1 + set g_balance_seeker_tag_animtime 0.2 + set g_balance_seeker_tag_damageforcescale 4 + set g_balance_seeker_tag_health 5 + set g_balance_seeker_tag_lifetime 15 + set g_balance_seeker_tag_refire 0.75 + set g_balance_seeker_tag_speed 5000 + set g_balance_seeker_tag_spread 0 + set g_balance_seeker_tag_tracker_lifetime 10 + set g_balance_seeker_type 0 + set g_balance_seeker_weaponreplace "" + set g_balance_seeker_weaponstart 0 + set g_balance_seeker_weaponstartoverride -1 + set g_balance_seeker_weaponthrowable 1 + // }}} + // {{{ #19: Shockwave (MUTATOR WEAPON) + set g_balance_shockwave_blast_animtime 0.3 + set g_balance_shockwave_blast_damage 20 + set g_balance_shockwave_blast_distance 1000 + set g_balance_shockwave_blast_edgedamage 0 + set g_balance_shockwave_blast_force 200 + set g_balance_shockwave_blast_force_forwardbias 50 + set g_balance_shockwave_blast_force_zscale 2 + set g_balance_shockwave_blast_jump_damage 20 + set g_balance_shockwave_blast_jump_edgedamage 0 + set g_balance_shockwave_blast_jump_force 300 + set g_balance_shockwave_blast_jump_force_velocitybias 0 + set g_balance_shockwave_blast_jump_force_zscale 1.25 + set g_balance_shockwave_blast_jump_multiplier_accuracy 0.5 + set g_balance_shockwave_blast_jump_multiplier_distance 0.5 + set g_balance_shockwave_blast_jump_multiplier_min 0 + set g_balance_shockwave_blast_jump_radius 150 + set g_balance_shockwave_blast_multiplier_accuracy 0.5 + set g_balance_shockwave_blast_multiplier_distance 0.5 + set g_balance_shockwave_blast_multiplier_min 0 + set g_balance_shockwave_blast_refire 0.75 + set g_balance_shockwave_blast_splash_damage 15 + set g_balance_shockwave_blast_splash_edgedamage 0 + set g_balance_shockwave_blast_splash_force 100 + set g_balance_shockwave_blast_splash_force_forwardbias 50 + set g_balance_shockwave_blast_splash_multiplier_accuracy 0.5 + set g_balance_shockwave_blast_splash_multiplier_distance 0.5 + set g_balance_shockwave_blast_splash_multiplier_min 0 + set g_balance_shockwave_blast_splash_radius 70 + set g_balance_shockwave_blast_spread_max 120 + set g_balance_shockwave_blast_spread_min 25 + set g_balance_shockwave_melee_animtime 1.3 + set g_balance_shockwave_melee_damage 80 + set g_balance_shockwave_melee_delay 0.25 + set g_balance_shockwave_melee_force 200 + set g_balance_shockwave_melee_multihit 1 + set g_balance_shockwave_melee_no_doubleslap 1 + set g_balance_shockwave_melee_nonplayerdamage 40 + set g_balance_shockwave_melee_range 120 + set g_balance_shockwave_melee_refire 1.25 + set g_balance_shockwave_melee_swing_side 120 + set g_balance_shockwave_melee_swing_up 30 + set g_balance_shockwave_melee_time 0.15 + set g_balance_shockwave_melee_traces 10 + set g_balance_shockwave_switchdelay_drop 0.15 + set g_balance_shockwave_switchdelay_raise 0.15 + set g_balance_shockwave_weaponreplace "" + set g_balance_shockwave_weaponstart 1 + set g_balance_shockwave_weaponstartoverride -1 + set g_balance_shockwave_weaponthrowable 0 + // }}} + // {{{ #20: Arc + set g_balance_arc_beam_ammo 4 + set g_balance_arc_beam_animtime 0.2 + set g_balance_arc_beam_botaimlifetime 0 + set g_balance_arc_beam_botaimspeed 0 + set g_balance_arc_beam_damage 115 + set g_balance_arc_beam_degreespersegment 1 + set g_balance_arc_beam_distancepersegment 0 + set g_balance_arc_beam_falloff_halflifedist 0 + set g_balance_arc_beam_falloff_maxdist 0 + set g_balance_arc_beam_falloff_mindist 0 + set g_balance_arc_beam_force 900 + set g_balance_arc_beam_healing_amax 100 + set g_balance_arc_beam_healing_aps 50 + set g_balance_arc_beam_healing_hmax 150 + set g_balance_arc_beam_healing_hps 50 + set g_balance_arc_cooldown 2.5 + set g_balance_arc_overheat_max 5 + set g_balance_arc_overheat_min 3 + set g_balance_arc_beam_heat 1 + set g_balance_arc_burst_heat 3 + set g_balance_arc_beam_maxangle 10 + set g_balance_arc_beam_nonplayerdamage 80 + set g_balance_arc_beam_range 1000 + set g_balance_arc_beam_refire 0.5 + set g_balance_arc_beam_returnspeed 8 + set g_balance_arc_beam_tightness 0.5 + set g_balance_arc_burst_ammo 15 + set g_balance_arc_burst_damage 150 + set g_balance_arc_burst_healing_aps 100 + set g_balance_arc_burst_healing_hps 100 + set g_balance_arc_switchdelay_drop 0.3 + set g_balance_arc_switchdelay_raise 0.3 + set g_balance_arc_weaponreplace "" + set g_balance_arc_weaponstart 0 + set g_balance_arc_weaponstartoverride -1 + set g_balance_arc_weaponthrowable 1 + // }}} ++// {{{ #21: Heavy Machine Gun ++set g_balance_hmg_ammo 0 ++set g_balance_hmg_damage 0 ++set g_balance_hmg_force 0 ++set g_balance_hmg_refire 0 ++set g_balance_hmg_reload_ammo 120 ++set g_balance_hmg_reload_time 1 ++set g_balance_hmg_solidpenetration 32 ++set g_balance_hmg_spread_add 0.01 ++set g_balance_hmg_spread_max 0.05 ++set g_balance_hmg_spread_min 0.02 ++set g_balance_hmg_switchdelay_drop 0.2 ++set g_balance_hmg_switchdelay_raise 0.2 ++set g_balance_hmg_weaponreplace "" ++set g_balance_hmg_weaponstart 0 ++set g_balance_hmg_weaponstartoverride 0 ++set g_balance_hmg_weaponthrowable 0 ++// }}} ++// {{{ #22: Rocket Propelled Chainsaw ++set g_balance_rpc_ammo 10 ++set g_balance_rpc_animtime 1 ++set g_balance_rpc_damage 150 ++set g_balance_rpc_damage2 500 ++set g_balance_rpc_damageforcescale 2 ++set g_balance_rpc_edgedamage 50 ++set g_balance_rpc_force 400 ++set g_balance_rpc_health 25 ++set g_balance_rpc_lifetime 30 ++set g_balance_rpc_radius 300 ++set g_balance_rpc_refire 1 ++set g_balance_rpc_reload_ammo 10 ++set g_balance_rpc_reload_time 1 ++set g_balance_rpc_speed 1250 ++set g_balance_rpc_speedaccel 5000 ++set g_balance_rpc_switchdelay_drop 0.2 ++set g_balance_rpc_switchdelay_raise 0.2 ++set g_balance_rpc_weaponreplace "" ++set g_balance_rpc_weaponstart 0 ++set g_balance_rpc_weaponstartoverride 0 ++set g_balance_rpc_weaponthrowable 0 ++// }}} diff --cc bal-wep-overkill.cfg index 000000000,000000000..ab18a5d89 new file mode 100644 --- /dev/null +++ b/bal-wep-overkill.cfg @@@ -1,0 -1,0 +1,804 @@@ ++// {{{ #1: Blaster ++set g_balance_blaster_primary_animtime 0.2 ++set g_balance_blaster_primary_damage 25 ++set g_balance_blaster_primary_delay 0 ++set g_balance_blaster_primary_edgedamage 12.5 ++set g_balance_blaster_primary_force 300 ++set g_balance_blaster_primary_force_zscale 1.25 ++set g_balance_blaster_primary_lifetime 5 ++set g_balance_blaster_primary_radius 60 ++set g_balance_blaster_primary_refire 0.7 ++set g_balance_blaster_primary_shotangle 0 ++set g_balance_blaster_primary_speed 6000 ++set g_balance_blaster_primary_spread 0 ++set g_balance_blaster_secondary 0 ++set g_balance_blaster_secondary_animtime 0.2 ++set g_balance_blaster_secondary_damage 25 ++set g_balance_blaster_secondary_delay 0 ++set g_balance_blaster_secondary_edgedamage 12.5 ++set g_balance_blaster_secondary_force 300 ++set g_balance_blaster_secondary_force_zscale 1.2 ++set g_balance_blaster_secondary_lifetime 5 ++set g_balance_blaster_secondary_radius 70 ++set g_balance_blaster_secondary_refire 0.7 ++set g_balance_blaster_secondary_shotangle 0 ++set g_balance_blaster_secondary_speed 6000 ++set g_balance_blaster_secondary_spread 0 ++set g_balance_blaster_switchdelay_drop 0.2 ++set g_balance_blaster_switchdelay_raise 0.2 ++set g_balance_blaster_weaponreplace "" ++set g_balance_blaster_weaponstart 1 ++set g_balance_blaster_weaponstartoverride -1 ++set g_balance_blaster_weaponthrowable 0 ++// }}} ++// {{{ #2: Shotgun ++set g_balance_shotgun_primary_ammo 6.25 ++set g_balance_shotgun_primary_animtime 0.65 ++set g_balance_shotgun_primary_bullets 10 ++set g_balance_shotgun_primary_damage 17 ++set g_balance_shotgun_primary_force 80 ++set g_balance_shotgun_primary_refire 0.75 ++set g_balance_shotgun_primary_solidpenetration 3.8 ++set g_balance_shotgun_primary_spread 0.07 ++set g_balance_shotgun_reload_ammo 50 ++set g_balance_shotgun_reload_time 2 ++set g_balance_shotgun_secondary 1 ++set g_balance_shotgun_secondary_alt_animtime 0.2 ++set g_balance_shotgun_secondary_alt_refire 1.2 ++set g_balance_shotgun_secondary_animtime 1 ++set g_balance_shotgun_secondary_damage 70 ++set g_balance_shotgun_secondary_force 200 ++set g_balance_shotgun_secondary_melee_delay 0.25 ++set g_balance_shotgun_secondary_melee_multihit 1 ++set g_balance_shotgun_secondary_melee_no_doubleslap 1 ++set g_balance_shotgun_secondary_melee_nonplayerdamage 40 ++set g_balance_shotgun_secondary_melee_range 120 ++set g_balance_shotgun_secondary_melee_swing_side 120 ++set g_balance_shotgun_secondary_melee_swing_up 30 ++set g_balance_shotgun_secondary_melee_time 0.15 ++set g_balance_shotgun_secondary_melee_traces 10 ++set g_balance_shotgun_secondary_refire 1.25 ++set g_balance_shotgun_switchdelay_drop 0.2 ++set g_balance_shotgun_switchdelay_raise 0.2 ++set g_balance_shotgun_weaponreplace "" ++set g_balance_shotgun_weaponstart 1 ++set g_balance_shotgun_weaponstartoverride -1 ++set g_balance_shotgun_weaponthrowable 1 ++// }}} ++// {{{ #3: Machine Gun ++set g_balance_machinegun_burst 3 ++set g_balance_machinegun_burst_ammo 3 ++set g_balance_machinegun_burst_animtime 0.3 ++set g_balance_machinegun_burst_refire 0.06 ++set g_balance_machinegun_burst_refire2 0.45 ++set g_balance_machinegun_burst_speed 0 ++set g_balance_machinegun_first 1 ++set g_balance_machinegun_first_ammo 1 ++set g_balance_machinegun_first_damage 14 ++set g_balance_machinegun_first_force 5 ++set g_balance_machinegun_first_refire 0.125 ++set g_balance_machinegun_first_spread 0.03 ++set g_balance_machinegun_mode 1 ++set g_balance_machinegun_reload_ammo 30 ++set g_balance_machinegun_reload_time 1.5 ++set g_balance_machinegun_solidpenetration 13.1 ++set g_balance_machinegun_spread_add 0.012 ++set g_balance_machinegun_spread_max 0.05 ++set g_balance_machinegun_spread_min 0.02 ++set g_balance_machinegun_sustained_ammo 1 ++set g_balance_machinegun_sustained_damage 25 ++set g_balance_machinegun_sustained_force 5 ++set g_balance_machinegun_sustained_refire 0.1 ++set g_balance_machinegun_sustained_spread 0.01 ++set g_balance_machinegun_switchdelay_drop 0.2 ++set g_balance_machinegun_switchdelay_raise 0.2 ++set g_balance_machinegun_weaponreplace "" ++set g_balance_machinegun_weaponstart 0 ++set g_balance_machinegun_weaponstartoverride -1 ++set g_balance_machinegun_weaponthrowable 1 ++// }}} ++// {{{ #4: Mortar ++set g_balance_mortar_bouncefactor 0.5 ++set g_balance_mortar_bouncestop 0.075 ++set g_balance_mortar_primary_ammo 2 ++set g_balance_mortar_primary_animtime 0.3 ++set g_balance_mortar_primary_damage 55 ++set g_balance_mortar_primary_damageforcescale 0 ++set g_balance_mortar_primary_edgedamage 25 ++set g_balance_mortar_primary_force 250 ++set g_balance_mortar_primary_health 15 ++set g_balance_mortar_primary_lifetime 5 ++set g_balance_mortar_primary_lifetime_stick 0 ++set g_balance_mortar_primary_radius 120 ++set g_balance_mortar_primary_refire 0.8 ++set g_balance_mortar_primary_remote_minbouncecnt 0 ++set g_balance_mortar_primary_speed 1900 ++set g_balance_mortar_primary_speed_up 225 ++set g_balance_mortar_primary_speed_z 0 ++set g_balance_mortar_primary_spread 0 ++set g_balance_mortar_primary_type 0 ++set g_balance_mortar_reload_ammo 0 ++set g_balance_mortar_reload_time 2 ++set g_balance_mortar_secondary_ammo 2 ++set g_balance_mortar_secondary_animtime 0.3 ++set g_balance_mortar_secondary_damage 55 ++set g_balance_mortar_secondary_damageforcescale 4 ++set g_balance_mortar_secondary_edgedamage 30 ++set g_balance_mortar_secondary_force 250 ++set g_balance_mortar_secondary_health 30 ++set g_balance_mortar_secondary_lifetime 5 ++set g_balance_mortar_secondary_lifetime_bounce 0.5 ++set g_balance_mortar_secondary_lifetime_stick 0 ++set g_balance_mortar_secondary_radius 120 ++set g_balance_mortar_secondary_refire 0.7 ++set g_balance_mortar_secondary_remote_detonateprimary 0 ++set g_balance_mortar_secondary_speed 1400 ++set g_balance_mortar_secondary_speed_up 150 ++set g_balance_mortar_secondary_speed_z 0 ++set g_balance_mortar_secondary_spread 0 ++set g_balance_mortar_secondary_type 1 ++set g_balance_mortar_switchdelay_drop 0.2 ++set g_balance_mortar_switchdelay_raise 0.2 ++set g_balance_mortar_weaponreplace "" ++set g_balance_mortar_weaponstart 0 ++set g_balance_mortar_weaponstartoverride -1 ++set g_balance_mortar_weaponthrowable 1 ++// }}} ++// {{{ #5: Mine Layer (MUTATOR WEAPON) ++set g_balance_minelayer_ammo 4 ++set g_balance_minelayer_animtime 0.4 ++set g_balance_minelayer_damage 40 ++set g_balance_minelayer_damageforcescale 0 ++set g_balance_minelayer_detonatedelay -1 ++set g_balance_minelayer_edgedamage 20 ++set g_balance_minelayer_force 250 ++set g_balance_minelayer_health 15 ++set g_balance_minelayer_lifetime 10 ++set g_balance_minelayer_lifetime_countdown 0.5 ++set g_balance_minelayer_limit 3 ++set g_balance_minelayer_protection 0 ++set g_balance_minelayer_proximityradius 150 ++set g_balance_minelayer_radius 175 ++set g_balance_minelayer_refire 1.5 ++set g_balance_minelayer_reload_ammo 0 ++set g_balance_minelayer_reload_time 2 ++set g_balance_minelayer_remote_damage 45 ++set g_balance_minelayer_remote_edgedamage 40 ++set g_balance_minelayer_remote_force 300 ++set g_balance_minelayer_remote_radius 200 ++set g_balance_minelayer_speed 1000 ++set g_balance_minelayer_switchdelay_drop 0.2 ++set g_balance_minelayer_switchdelay_raise 0.2 ++set g_balance_minelayer_time 0.5 ++set g_balance_minelayer_weaponreplace "" ++set g_balance_minelayer_weaponstart 0 ++set g_balance_minelayer_weaponstartoverride -1 ++set g_balance_minelayer_weaponthrowable 1 ++// }}} ++// {{{ #6: Electro ++set g_balance_electro_combo_comboradius 300 ++set g_balance_electro_combo_comboradius_thruwall 200 ++set g_balance_electro_combo_damage 50 ++set g_balance_electro_combo_edgedamage 25 ++set g_balance_electro_combo_force 120 ++set g_balance_electro_combo_radius 150 ++set g_balance_electro_combo_safeammocheck 1 ++set g_balance_electro_combo_speed 2000 ++set g_balance_electro_primary_ammo 4 ++set g_balance_electro_primary_animtime 0.3 ++set g_balance_electro_primary_comboradius 300 ++set g_balance_electro_primary_damage 40 ++set g_balance_electro_primary_edgedamage 20 ++set g_balance_electro_primary_force 200 ++set g_balance_electro_primary_lifetime 5 ++set g_balance_electro_primary_midaircombo_explode 1 ++set g_balance_electro_primary_midaircombo_interval 0.1 ++set g_balance_electro_primary_midaircombo_radius 150 ++set g_balance_electro_primary_radius 100 ++set g_balance_electro_primary_refire 0.6 ++set g_balance_electro_primary_speed 2500 ++set g_balance_electro_primary_spread 0 ++set g_balance_electro_reload_ammo 0 ++set g_balance_electro_reload_time 2 ++set g_balance_electro_secondary_ammo 2 ++set g_balance_electro_secondary_animtime 0.2 ++set g_balance_electro_secondary_bouncefactor 0.3 ++set g_balance_electro_secondary_bouncestop 0.05 ++set g_balance_electro_secondary_count 3 ++set g_balance_electro_secondary_damage 30 ++set g_balance_electro_secondary_damagedbycontents 1 ++set g_balance_electro_secondary_damageforcescale 4 ++set g_balance_electro_secondary_edgedamage 15 ++set g_balance_electro_secondary_force 50 ++set g_balance_electro_secondary_health 5 ++set g_balance_electro_secondary_lifetime 4 ++set g_balance_electro_secondary_radius 150 ++set g_balance_electro_secondary_refire 0.2 ++set g_balance_electro_secondary_refire2 1.6 ++set g_balance_electro_secondary_speed 1000 ++set g_balance_electro_secondary_speed_up 200 ++set g_balance_electro_secondary_speed_z 0 ++set g_balance_electro_secondary_spread 0.04 ++set g_balance_electro_secondary_touchexplode 0 ++set g_balance_electro_switchdelay_drop 0.2 ++set g_balance_electro_switchdelay_raise 0.2 ++set g_balance_electro_weaponreplace "" ++set g_balance_electro_weaponstart 0 ++set g_balance_electro_weaponstartoverride -1 ++set g_balance_electro_weaponthrowable 1 ++// }}} ++// {{{ #7: Crylink ++set g_balance_crylink_primary_ammo 3 ++set g_balance_crylink_primary_animtime 0.3 ++set g_balance_crylink_primary_bouncedamagefactor 0.5 ++set g_balance_crylink_primary_bounces 1 ++set g_balance_crylink_primary_damage 12 ++set g_balance_crylink_primary_edgedamage 6 ++set g_balance_crylink_primary_force -50 ++set g_balance_crylink_primary_joindelay 0.1 ++set g_balance_crylink_primary_joinexplode 1 ++set g_balance_crylink_primary_joinexplode_damage 0 ++set g_balance_crylink_primary_joinexplode_edgedamage 0 ++set g_balance_crylink_primary_joinexplode_force 0 ++set g_balance_crylink_primary_joinexplode_radius 0 ++set g_balance_crylink_primary_joinspread 0.2 ++set g_balance_crylink_primary_linkexplode 1 ++set g_balance_crylink_primary_middle_fadetime 5 ++set g_balance_crylink_primary_middle_lifetime 5 ++set g_balance_crylink_primary_other_fadetime 5 ++set g_balance_crylink_primary_other_lifetime 5 ++set g_balance_crylink_primary_radius 80 ++set g_balance_crylink_primary_refire 0.7 ++set g_balance_crylink_primary_shots 6 ++set g_balance_crylink_primary_speed 2000 ++set g_balance_crylink_primary_spread 0.08 ++set g_balance_crylink_reload_ammo 0 ++set g_balance_crylink_reload_time 2 ++set g_balance_crylink_secondary 1 ++set g_balance_crylink_secondary_ammo 2 ++set g_balance_crylink_secondary_animtime 0.2 ++set g_balance_crylink_secondary_bouncedamagefactor 0.5 ++set g_balance_crylink_secondary_bounces 0 ++set g_balance_crylink_secondary_damage 10 ++set g_balance_crylink_secondary_edgedamage 5 ++set g_balance_crylink_secondary_force -250 ++set g_balance_crylink_secondary_joindelay 0 ++set g_balance_crylink_secondary_joinexplode 0 ++set g_balance_crylink_secondary_joinexplode_damage 0 ++set g_balance_crylink_secondary_joinexplode_edgedamage 0 ++set g_balance_crylink_secondary_joinexplode_force 0 ++set g_balance_crylink_secondary_joinexplode_radius 0 ++set g_balance_crylink_secondary_joinspread 0 ++set g_balance_crylink_secondary_linkexplode 1 ++set g_balance_crylink_secondary_middle_fadetime 5 ++set g_balance_crylink_secondary_middle_lifetime 5 ++set g_balance_crylink_secondary_other_fadetime 5 ++set g_balance_crylink_secondary_other_lifetime 5 ++set g_balance_crylink_secondary_radius 100 ++set g_balance_crylink_secondary_refire 0.7 ++set g_balance_crylink_secondary_shots 5 ++set g_balance_crylink_secondary_speed 3000 ++set g_balance_crylink_secondary_spread 0.01 ++set g_balance_crylink_secondary_spreadtype 1 ++set g_balance_crylink_switchdelay_drop 0.2 ++set g_balance_crylink_switchdelay_raise 0.2 ++set g_balance_crylink_weaponreplace "" ++set g_balance_crylink_weaponstart 0 ++set g_balance_crylink_weaponstartoverride -1 ++set g_balance_crylink_weaponthrowable 1 ++// }}} ++// {{{ #8: Vortex ++set g_balance_vortex_charge 0 ++set g_balance_vortex_charge_animlimit 0.5 ++set g_balance_vortex_charge_limit 1 ++set g_balance_vortex_charge_maxspeed 800 ++set g_balance_vortex_charge_mindmg 40 ++set g_balance_vortex_charge_minspeed 400 ++set g_balance_vortex_charge_rate 0.6 ++set g_balance_vortex_charge_rot_pause 0 ++set g_balance_vortex_charge_rot_rate 0 ++set g_balance_vortex_charge_shot_multiplier 0 ++set g_balance_vortex_charge_start 0.5 ++set g_balance_vortex_charge_velocity_rate 0 ++set g_balance_vortex_primary_ammo 10 ++set g_balance_vortex_primary_animtime 0.95 ++set g_balance_vortex_primary_damage 100 ++set g_balance_vortex_primary_damagefalloff_forcehalflife 0 ++set g_balance_vortex_primary_damagefalloff_halflife 0 ++set g_balance_vortex_primary_damagefalloff_maxdist 0 ++set g_balance_vortex_primary_damagefalloff_mindist 0 ++set g_balance_vortex_primary_force 500 ++set g_balance_vortex_primary_refire 1 ++set g_balance_vortex_reload_ammo 50 ++set g_balance_vortex_reload_time 2 ++set g_balance_vortex_secondary 1 ++set g_balance_vortex_secondary_ammo 2 ++set g_balance_vortex_secondary_animtime 0 ++set g_balance_vortex_secondary_chargepool 0 ++set g_balance_vortex_secondary_chargepool_pause_regen 1 ++set g_balance_vortex_secondary_chargepool_regen 0.15 ++set g_balance_vortex_secondary_damage 0 ++set g_balance_vortex_secondary_damagefalloff_forcehalflife 0 ++set g_balance_vortex_secondary_damagefalloff_halflife 0 ++set g_balance_vortex_secondary_damagefalloff_maxdist 0 ++set g_balance_vortex_secondary_damagefalloff_mindist 0 ++set g_balance_vortex_secondary_force 0 ++set g_balance_vortex_secondary_refire 0 ++set g_balance_vortex_switchdelay_drop 0.25 ++set g_balance_vortex_switchdelay_raise 0.25 ++set g_balance_vortex_weaponreplace "" ++set g_balance_vortex_weaponstart 0 ++set g_balance_vortex_weaponstartoverride -1 ++set g_balance_vortex_weaponthrowable 1 ++// }}} ++// {{{ #9: Hagar ++set g_balance_hagar_primary_ammo 1 ++set g_balance_hagar_primary_damage 25 ++set g_balance_hagar_primary_damageforcescale 0 ++set g_balance_hagar_primary_edgedamage 12.5 ++set g_balance_hagar_primary_force 100 ++set g_balance_hagar_primary_health 15 ++set g_balance_hagar_primary_lifetime 5 ++set g_balance_hagar_primary_radius 65 ++set g_balance_hagar_primary_refire 0.16667 ++set g_balance_hagar_primary_speed 2200 ++set g_balance_hagar_primary_spread 0.03 ++set g_balance_hagar_reload_ammo 0 ++set g_balance_hagar_reload_time 2 ++set g_balance_hagar_secondary 1 ++set g_balance_hagar_secondary_ammo 1 ++set g_balance_hagar_secondary_damage 35 ++set g_balance_hagar_secondary_damageforcescale 0 ++set g_balance_hagar_secondary_edgedamage 17.5 ++set g_balance_hagar_secondary_force 75 ++set g_balance_hagar_secondary_health 15 ++set g_balance_hagar_secondary_lifetime_min 10 ++set g_balance_hagar_secondary_lifetime_rand 0 ++set g_balance_hagar_secondary_load 1 ++set g_balance_hagar_secondary_load_abort 1 ++set g_balance_hagar_secondary_load_animtime 0.2 ++set g_balance_hagar_secondary_load_hold 4 ++set g_balance_hagar_secondary_load_linkexplode 0 ++set g_balance_hagar_secondary_load_max 4 ++set g_balance_hagar_secondary_load_releasedeath 0 ++set g_balance_hagar_secondary_load_speed 0.5 ++set g_balance_hagar_secondary_load_spread 0.075 ++set g_balance_hagar_secondary_load_spread_bias 0.5 ++set g_balance_hagar_secondary_radius 80 ++set g_balance_hagar_secondary_refire 0.5 ++set g_balance_hagar_secondary_speed 2000 ++set g_balance_hagar_secondary_spread 0.05 ++set g_balance_hagar_switchdelay_drop 0.2 ++set g_balance_hagar_switchdelay_raise 0.2 ++set g_balance_hagar_weaponreplace "" ++set g_balance_hagar_weaponstart 0 ++set g_balance_hagar_weaponstartoverride -1 ++set g_balance_hagar_weaponthrowable 1 ++// }}} ++// {{{ #10: Devastator ++set g_balance_devastator_ammo 4 ++set g_balance_devastator_animtime 0.4 ++set g_balance_devastator_damage 80 ++set g_balance_devastator_damageforcescale 1 ++set g_balance_devastator_detonatedelay 0.02 ++set g_balance_devastator_edgedamage 40 ++set g_balance_devastator_force 400 ++set g_balance_devastator_guidedelay 0.2 ++set g_balance_devastator_guidegoal 512 ++set g_balance_devastator_guiderate 90 ++set g_balance_devastator_guideratedelay 0.01 ++set g_balance_devastator_guidestop 0 ++set g_balance_devastator_health 30 ++set g_balance_devastator_lifetime 10 ++set g_balance_devastator_radius 110 ++set g_balance_devastator_refire 1.1 ++set g_balance_devastator_reload_ammo 0 ++set g_balance_devastator_reload_time 2 ++set g_balance_devastator_remote_damage 70 ++set g_balance_devastator_remote_edgedamage 35 ++set g_balance_devastator_remote_force 300 ++set g_balance_devastator_remote_jump_damage 70 ++set g_balance_devastator_remote_jump_radius 0 ++set g_balance_devastator_remote_jump_velocity_z_add 400 ++set g_balance_devastator_remote_jump_velocity_z_max 1500 ++set g_balance_devastator_remote_jump_velocity_z_min 400 ++set g_balance_devastator_remote_radius 110 ++set g_balance_devastator_speed 1300 ++set g_balance_devastator_speedaccel 1300 ++set g_balance_devastator_speedstart 1000 ++set g_balance_devastator_switchdelay_drop 0.2 ++set g_balance_devastator_switchdelay_raise 0.2 ++set g_balance_devastator_weaponreplace "" ++set g_balance_devastator_weaponstart 0 ++set g_balance_devastator_weaponstartoverride -1 ++set g_balance_devastator_weaponthrowable 1 ++// }}} ++// {{{ #11: Port-O-Launch ++set g_balance_porto_primary_animtime 0.3 ++set g_balance_porto_primary_lifetime 5 ++set g_balance_porto_primary_refire 1.5 ++set g_balance_porto_primary_speed 1000 ++set g_balance_porto_secondary 1 ++set g_balance_porto_secondary_animtime 0.3 ++set g_balance_porto_secondary_lifetime 5 ++set g_balance_porto_secondary_refire 1.5 ++set g_balance_porto_secondary_speed 1000 ++set g_balance_porto_switchdelay_drop 0.2 ++set g_balance_porto_switchdelay_raise 0.2 ++set g_balance_porto_weaponreplace "" ++set g_balance_porto_weaponstart 0 ++set g_balance_porto_weaponstartoverride -1 ++set g_balance_porto_weaponthrowable 1 ++// }}} ++// {{{ #12: Vaporizer ++set g_balance_vaporizer_primary_ammo 10 ++set g_balance_vaporizer_primary_animtime 0.3 ++set g_balance_vaporizer_primary_refire 1 ++set g_balance_vaporizer_reload_ammo 0 ++set g_balance_vaporizer_reload_time 0 ++set g_balance_vaporizer_secondary_ammo 0 ++set g_balance_vaporizer_secondary_animtime 0.2 ++set g_balance_vaporizer_secondary_damage 25 ++set g_balance_vaporizer_secondary_delay 0 ++set g_balance_vaporizer_secondary_edgedamage 12.5 ++set g_balance_vaporizer_secondary_force 400 ++set g_balance_vaporizer_secondary_lifetime 5 ++set g_balance_vaporizer_secondary_radius 70 ++set g_balance_vaporizer_secondary_refire 0.7 ++set g_balance_vaporizer_secondary_shotangle 0 ++set g_balance_vaporizer_secondary_speed 6000 ++set g_balance_vaporizer_secondary_spread 0 ++set g_balance_vaporizer_switchdelay_drop 0.2 ++set g_balance_vaporizer_switchdelay_raise 0.2 ++set g_balance_vaporizer_weaponreplace "" ++set g_balance_vaporizer_weaponstart 0 ++set g_balance_vaporizer_weaponstartoverride -1 ++set g_balance_vaporizer_weaponthrowable 0 ++// }}} ++// {{{ #13: Grappling Hook ++set g_balance_hook_primary_ammo 5 ++set g_balance_hook_primary_animtime 0.3 ++set g_balance_hook_primary_hooked_ammo 5 ++set g_balance_hook_primary_hooked_time_free 2 ++set g_balance_hook_primary_hooked_time_max 0 ++set g_balance_hook_primary_refire 0.2 ++set g_balance_hook_secondary_animtime 0.3 ++set g_balance_hook_secondary_damage 25 ++set g_balance_hook_secondary_damageforcescale 0 ++set g_balance_hook_secondary_duration 1.5 ++set g_balance_hook_secondary_edgedamage 5 ++set g_balance_hook_secondary_force -2000 ++set g_balance_hook_secondary_gravity 5 ++set g_balance_hook_secondary_health 15 ++set g_balance_hook_secondary_lifetime 5 ++set g_balance_hook_secondary_power 3 ++set g_balance_hook_secondary_radius 500 ++set g_balance_hook_secondary_refire 3 ++set g_balance_hook_secondary_speed 0 ++set g_balance_hook_switchdelay_drop 0.2 ++set g_balance_hook_switchdelay_raise 0.2 ++set g_balance_hook_weaponreplace "" ++set g_balance_hook_weaponstart 0 ++set g_balance_hook_weaponstartoverride -1 ++set g_balance_hook_weaponthrowable 1 ++// }}} ++// {{{ #14: Heavy Laser Assault Cannon (MUTATOR WEAPON) ++set g_balance_hlac_primary_ammo 1 ++set g_balance_hlac_primary_animtime 0.4 ++set g_balance_hlac_primary_damage 18 ++set g_balance_hlac_primary_edgedamage 9 ++set g_balance_hlac_primary_force 90 ++set g_balance_hlac_primary_lifetime 5 ++set g_balance_hlac_primary_radius 70 ++set g_balance_hlac_primary_refire 0.15 ++set g_balance_hlac_primary_speed 9000 ++set g_balance_hlac_primary_spread_add 0.0045 ++set g_balance_hlac_primary_spread_crouchmod 0.25 ++set g_balance_hlac_primary_spread_max 0.25 ++set g_balance_hlac_primary_spread_min 0.01 ++set g_balance_hlac_reload_ammo 0 ++set g_balance_hlac_reload_time 2 ++set g_balance_hlac_secondary 1 ++set g_balance_hlac_secondary_ammo 10 ++set g_balance_hlac_secondary_animtime 0.3 ++set g_balance_hlac_secondary_damage 15 ++set g_balance_hlac_secondary_edgedamage 7.5 ++set g_balance_hlac_secondary_force 90 ++set g_balance_hlac_secondary_lifetime 5 ++set g_balance_hlac_secondary_radius 70 ++set g_balance_hlac_secondary_refire 1 ++set g_balance_hlac_secondary_shots 6 ++set g_balance_hlac_secondary_speed 9000 ++set g_balance_hlac_secondary_spread 0.15 ++set g_balance_hlac_secondary_spread_crouchmod 0.5 ++set g_balance_hlac_switchdelay_drop 0.2 ++set g_balance_hlac_switchdelay_raise 0.2 ++set g_balance_hlac_weaponreplace "" ++set g_balance_hlac_weaponstart 0 ++set g_balance_hlac_weaponstartoverride -1 ++set g_balance_hlac_weaponthrowable 1 ++// }}} ++// {{{ #15: @!#%'n Tuba ++set g_balance_tuba_animtime 0.05 ++set g_balance_tuba_attenuation 0.5 ++set g_balance_tuba_damage 5 ++set g_balance_tuba_edgedamage 0 ++set g_balance_tuba_fadetime 0.25 ++set g_balance_tuba_force 40 ++set g_balance_tuba_pitchstep 6 ++set g_balance_tuba_radius 200 ++set g_balance_tuba_refire 0.05 ++set g_balance_tuba_switchdelay_drop 0.2 ++set g_balance_tuba_switchdelay_raise 0.2 ++set g_balance_tuba_volume 1 ++set g_balance_tuba_weaponreplace "" ++set g_balance_tuba_weaponstart 0 ++set g_balance_tuba_weaponstartoverride -1 ++set g_balance_tuba_weaponthrowable 1 ++// }}} ++// {{{ #16: Rifle (MUTATOR WEAPON) ++set g_balance_rifle_bursttime 0 ++set g_balance_rifle_primary_ammo 10 ++set g_balance_rifle_primary_animtime 0.4 ++set g_balance_rifle_primary_bullethail 0 ++set g_balance_rifle_primary_burstcost 0 ++set g_balance_rifle_primary_damage 80 ++set g_balance_rifle_primary_force 100 ++set g_balance_rifle_primary_refire 1.2 ++set g_balance_rifle_primary_shots 1 ++set g_balance_rifle_primary_solidpenetration 62.2 ++set g_balance_rifle_primary_spread 0 ++set g_balance_rifle_primary_tracer 1 ++set g_balance_rifle_reload_ammo 80 ++set g_balance_rifle_reload_time 2 ++set g_balance_rifle_secondary 1 ++set g_balance_rifle_secondary_ammo 10 ++set g_balance_rifle_secondary_animtime 0.3 ++set g_balance_rifle_secondary_bullethail 0 ++set g_balance_rifle_secondary_burstcost 0 ++set g_balance_rifle_secondary_damage 20 ++set g_balance_rifle_secondary_force 50 ++set g_balance_rifle_secondary_refire 0.9 ++set g_balance_rifle_secondary_reload 0 ++set g_balance_rifle_secondary_shots 4 ++set g_balance_rifle_secondary_solidpenetration 15.5 ++set g_balance_rifle_secondary_spread 0.04 ++set g_balance_rifle_secondary_tracer 0 ++set g_balance_rifle_switchdelay_drop 0.2 ++set g_balance_rifle_switchdelay_raise 0.2 ++set g_balance_rifle_weaponreplace "" ++set g_balance_rifle_weaponstart 0 ++set g_balance_rifle_weaponstartoverride -1 ++set g_balance_rifle_weaponthrowable 1 ++// }}} ++// {{{ #17: Fireball ++set g_balance_fireball_primary_animtime 0.4 ++set g_balance_fireball_primary_bfgdamage 100 ++set g_balance_fireball_primary_bfgforce 0 ++set g_balance_fireball_primary_bfgradius 1000 ++set g_balance_fireball_primary_damage 200 ++set g_balance_fireball_primary_damageforcescale 0 ++set g_balance_fireball_primary_edgedamage 50 ++set g_balance_fireball_primary_force 600 ++set g_balance_fireball_primary_health 0 ++set g_balance_fireball_primary_laserburntime 0.5 ++set g_balance_fireball_primary_laserdamage 80 ++set g_balance_fireball_primary_laseredgedamage 20 ++set g_balance_fireball_primary_laserradius 256 ++set g_balance_fireball_primary_lifetime 15 ++set g_balance_fireball_primary_radius 200 ++set g_balance_fireball_primary_refire 2 ++set g_balance_fireball_primary_refire2 0 ++set g_balance_fireball_primary_speed 1200 ++set g_balance_fireball_primary_spread 0 ++set g_balance_fireball_secondary_animtime 0.3 ++set g_balance_fireball_secondary_damage 40 ++set g_balance_fireball_secondary_damageforcescale 4 ++set g_balance_fireball_secondary_damagetime 5 ++set g_balance_fireball_secondary_laserburntime 0.5 ++set g_balance_fireball_secondary_laserdamage 50 ++set g_balance_fireball_secondary_laseredgedamage 20 ++set g_balance_fireball_secondary_laserradius 110 ++set g_balance_fireball_secondary_lifetime 7 ++set g_balance_fireball_secondary_refire 1.5 ++set g_balance_fireball_secondary_speed 900 ++set g_balance_fireball_secondary_speed_up 100 ++set g_balance_fireball_secondary_speed_z 0 ++set g_balance_fireball_secondary_spread 0 ++set g_balance_fireball_switchdelay_drop 0.2 ++set g_balance_fireball_switchdelay_raise 0.2 ++set g_balance_fireball_weaponreplace "" ++set g_balance_fireball_weaponstart 0 ++set g_balance_fireball_weaponstartoverride -1 ++set g_balance_fireball_weaponthrowable 0 ++// }}} ++// {{{ #18: T.A.G. Seeker (MUTATOR WEAPON) ++set g_balance_seeker_flac_ammo 1 ++set g_balance_seeker_flac_animtime 0.1 ++set g_balance_seeker_flac_damage 15 ++set g_balance_seeker_flac_edgedamage 10 ++set g_balance_seeker_flac_force 50 ++set g_balance_seeker_flac_lifetime 0.1 ++set g_balance_seeker_flac_lifetime_rand 0.05 ++set g_balance_seeker_flac_radius 100 ++set g_balance_seeker_flac_refire 0.1 ++set g_balance_seeker_flac_speed 3000 ++set g_balance_seeker_flac_speed_up 1000 ++set g_balance_seeker_flac_speed_z 0 ++set g_balance_seeker_flac_spread 0.4 ++set g_balance_seeker_missile_accel 1400 ++set g_balance_seeker_missile_ammo 2 ++set g_balance_seeker_missile_animtime 0.2 ++set g_balance_seeker_missile_count 3 ++set g_balance_seeker_missile_damage 30 ++set g_balance_seeker_missile_damageforcescale 4 ++set g_balance_seeker_missile_decel 1400 ++set g_balance_seeker_missile_delay 0.25 ++set g_balance_seeker_missile_edgedamage 10 ++set g_balance_seeker_missile_force 150 ++set g_balance_seeker_missile_health 5 ++set g_balance_seeker_missile_lifetime 15 ++set g_balance_seeker_missile_proxy 0 ++set g_balance_seeker_missile_proxy_delay 0.2 ++set g_balance_seeker_missile_proxy_maxrange 45 ++set g_balance_seeker_missile_radius 80 ++set g_balance_seeker_missile_refire 0.5 ++set g_balance_seeker_missile_smart 1 ++set g_balance_seeker_missile_smart_mindist 800 ++set g_balance_seeker_missile_smart_trace_max 2500 ++set g_balance_seeker_missile_smart_trace_min 1000 ++set g_balance_seeker_missile_speed 700 ++set g_balance_seeker_missile_speed_max 1300 ++set g_balance_seeker_missile_speed_up 300 ++set g_balance_seeker_missile_speed_z 0 ++set g_balance_seeker_missile_spread 0 ++set g_balance_seeker_missile_turnrate 0.65 ++set g_balance_seeker_reload_ammo 0 ++set g_balance_seeker_reload_time 2 ++set g_balance_seeker_switchdelay_drop 0.2 ++set g_balance_seeker_switchdelay_raise 0.2 ++set g_balance_seeker_tag_ammo 1 ++set g_balance_seeker_tag_animtime 0.2 ++set g_balance_seeker_tag_damageforcescale 4 ++set g_balance_seeker_tag_health 5 ++set g_balance_seeker_tag_lifetime 15 ++set g_balance_seeker_tag_refire 0.75 ++set g_balance_seeker_tag_speed 5000 ++set g_balance_seeker_tag_spread 0 ++set g_balance_seeker_tag_tracker_lifetime 10 ++set g_balance_seeker_type 0 ++set g_balance_seeker_weaponreplace "" ++set g_balance_seeker_weaponstart 0 ++set g_balance_seeker_weaponstartoverride -1 ++set g_balance_seeker_weaponthrowable 1 ++// }}} ++// {{{ #19: Shockwave (MUTATOR WEAPON) ++set g_balance_shockwave_blast_animtime 0.3 ++set g_balance_shockwave_blast_damage 20 ++set g_balance_shockwave_blast_distance 1000 ++set g_balance_shockwave_blast_edgedamage 0 ++set g_balance_shockwave_blast_force 200 ++set g_balance_shockwave_blast_force_forwardbias 50 ++set g_balance_shockwave_blast_force_zscale 2 ++set g_balance_shockwave_blast_jump_damage 20 ++set g_balance_shockwave_blast_jump_edgedamage 0 ++set g_balance_shockwave_blast_jump_force 300 ++set g_balance_shockwave_blast_jump_force_velocitybias 0 ++set g_balance_shockwave_blast_jump_force_zscale 1.25 ++set g_balance_shockwave_blast_jump_multiplier_accuracy 0.5 ++set g_balance_shockwave_blast_jump_multiplier_distance 0.5 ++set g_balance_shockwave_blast_jump_multiplier_min 0 ++set g_balance_shockwave_blast_jump_radius 150 ++set g_balance_shockwave_blast_multiplier_accuracy 0.5 ++set g_balance_shockwave_blast_multiplier_distance 0.5 ++set g_balance_shockwave_blast_multiplier_min 0 ++set g_balance_shockwave_blast_refire 0.75 ++set g_balance_shockwave_blast_splash_damage 15 ++set g_balance_shockwave_blast_splash_edgedamage 0 ++set g_balance_shockwave_blast_splash_force 100 ++set g_balance_shockwave_blast_splash_force_forwardbias 50 ++set g_balance_shockwave_blast_splash_multiplier_accuracy 0.5 ++set g_balance_shockwave_blast_splash_multiplier_distance 0.5 ++set g_balance_shockwave_blast_splash_multiplier_min 0 ++set g_balance_shockwave_blast_splash_radius 70 ++set g_balance_shockwave_blast_spread_max 120 ++set g_balance_shockwave_blast_spread_min 25 ++set g_balance_shockwave_melee_animtime 1.3 ++set g_balance_shockwave_melee_damage 80 ++set g_balance_shockwave_melee_delay 0.25 ++set g_balance_shockwave_melee_force 200 ++set g_balance_shockwave_melee_multihit 1 ++set g_balance_shockwave_melee_no_doubleslap 1 ++set g_balance_shockwave_melee_nonplayerdamage 40 ++set g_balance_shockwave_melee_range 120 ++set g_balance_shockwave_melee_refire 1.25 ++set g_balance_shockwave_melee_swing_side 120 ++set g_balance_shockwave_melee_swing_up 30 ++set g_balance_shockwave_melee_time 0.15 ++set g_balance_shockwave_melee_traces 10 ++set g_balance_shockwave_switchdelay_drop 0.2 ++set g_balance_shockwave_switchdelay_raise 0.2 ++set g_balance_shockwave_weaponreplace "" ++set g_balance_shockwave_weaponstart 0 ++set g_balance_shockwave_weaponstartoverride -1 ++set g_balance_shockwave_weaponthrowable 0 ++// }}} ++// {{{ #20: Arc ++set g_balance_arc_beam_ammo 4 ++set g_balance_arc_beam_animtime 0.2 ++set g_balance_arc_beam_botaimlifetime 0 ++set g_balance_arc_beam_botaimspeed 0 ++set g_balance_arc_beam_damage 115 ++set g_balance_arc_beam_degreespersegment 1 ++set g_balance_arc_beam_distancepersegment 0 ++set g_balance_arc_beam_falloff_halflifedist 0 ++set g_balance_arc_beam_falloff_maxdist 0 ++set g_balance_arc_beam_falloff_mindist 0 ++set g_balance_arc_beam_force 900 ++set g_balance_arc_beam_healing_amax 100 ++set g_balance_arc_beam_healing_aps 50 ++set g_balance_arc_beam_healing_hmax 150 ++set g_balance_arc_beam_healing_hps 50 ++set g_balance_arc_beam_heat 1 ++set g_balance_arc_beam_maxangle 10 ++set g_balance_arc_beam_nonplayerdamage 80 ++set g_balance_arc_beam_range 1000 ++set g_balance_arc_beam_refire 0.5 ++set g_balance_arc_beam_returnspeed 8 ++set g_balance_arc_beam_tightness 0.5 ++set g_balance_arc_burst_ammo 15 ++set g_balance_arc_burst_damage 250 ++set g_balance_arc_burst_healing_aps 100 ++set g_balance_arc_burst_healing_hps 100 ++set g_balance_arc_burst_heat 4 ++set g_balance_arc_cooldown 2.5 ++set g_balance_arc_overheat_max 5 ++set g_balance_arc_overheat_min 3 ++set g_balance_arc_switchdelay_drop 0.3 ++set g_balance_arc_switchdelay_raise 0.3 ++set g_balance_arc_weaponreplace "" ++set g_balance_arc_weaponstart 0 ++set g_balance_arc_weaponstartoverride -1 ++set g_balance_arc_weaponthrowable 1 ++// }}} ++// {{{ #21: Heavy Machine Gun ++set g_balance_hmg_ammo 0 ++set g_balance_hmg_damage 0 ++set g_balance_hmg_force 0 ++set g_balance_hmg_refire 0 ++set g_balance_hmg_reload_ammo 120 ++set g_balance_hmg_reload_time 1 ++set g_balance_hmg_solidpenetration 32 ++set g_balance_hmg_spread_add 0.01 ++set g_balance_hmg_spread_max 0.05 ++set g_balance_hmg_spread_min 0.02 ++set g_balance_hmg_switchdelay_drop 0.2 ++set g_balance_hmg_switchdelay_raise 0.2 ++set g_balance_hmg_weaponreplace "" ++set g_balance_hmg_weaponstart 0 ++set g_balance_hmg_weaponstartoverride 0 ++set g_balance_hmg_weaponthrowable 0 ++// }}} ++// {{{ #22: Rocket Propelled Chainsaw ++set g_balance_rpc_ammo 10 ++set g_balance_rpc_animtime 1 ++set g_balance_rpc_damage 150 ++set g_balance_rpc_damage2 500 ++set g_balance_rpc_damageforcescale 2 ++set g_balance_rpc_edgedamage 50 ++set g_balance_rpc_force 400 ++set g_balance_rpc_health 25 ++set g_balance_rpc_lifetime 30 ++set g_balance_rpc_radius 300 ++set g_balance_rpc_refire 1 ++set g_balance_rpc_reload_ammo 10 ++set g_balance_rpc_reload_time 1 ++set g_balance_rpc_speed 1250 ++set g_balance_rpc_speedaccel 5000 ++set g_balance_rpc_switchdelay_drop 0.2 ++set g_balance_rpc_switchdelay_raise 0.2 ++set g_balance_rpc_weaponreplace "" ++set g_balance_rpc_weaponstart 0 ++set g_balance_rpc_weaponstartoverride 0 ++set g_balance_rpc_weaponthrowable 0 ++// }}} diff --cc bal-wep-samual.cfg index 000000000,2ec59d610..82549c8a4 mode 000000,100644..100644 --- a/bal-wep-samual.cfg +++ b/bal-wep-samual.cfg @@@ -1,0 -1,761 +1,802 @@@ + // {{{ #1: Blaster + set g_balance_blaster_primary_animtime 0.2 + set g_balance_blaster_primary_damage 25 + set g_balance_blaster_primary_delay 0 + set g_balance_blaster_primary_edgedamage 12.5 + set g_balance_blaster_primary_force 300 + set g_balance_blaster_primary_lifetime 5 + set g_balance_blaster_primary_radius 70 + set g_balance_blaster_primary_refire 0.7 + set g_balance_blaster_primary_shotangle 0 + set g_balance_blaster_primary_speed 6000 + set g_balance_blaster_primary_spread 0 + set g_balance_blaster_secondary 0 + set g_balance_blaster_secondary_animtime 0.2 + set g_balance_blaster_secondary_damage 25 + set g_balance_blaster_secondary_delay 0 + set g_balance_blaster_secondary_edgedamage 12.5 + set g_balance_blaster_secondary_force 300 + set g_balance_blaster_secondary_lifetime 5 + set g_balance_blaster_secondary_radius 70 + set g_balance_blaster_secondary_refire 0.7 + set g_balance_blaster_secondary_shotangle 0 + set g_balance_blaster_secondary_speed 6000 + set g_balance_blaster_secondary_spread 0 + set g_balance_blaster_switchdelay_drop 0.15 + set g_balance_blaster_switchdelay_raise 0.15 + set g_balance_blaster_weaponreplace "" + set g_balance_blaster_weaponstart 1 + set g_balance_blaster_weaponstartoverride -1 + set g_balance_blaster_weaponthrowable 0 + // }}} + // {{{ #2: Shockwave + set g_balance_shockwave_blast_animtime 0.3 + set g_balance_shockwave_blast_damage 20 + set g_balance_shockwave_blast_distance 1000 + set g_balance_shockwave_blast_edgedamage 0 + set g_balance_shockwave_blast_force 200 + set g_balance_shockwave_blast_force_forwardbias 50 + set g_balance_shockwave_blast_force_zscale 2 + set g_balance_shockwave_blast_jump_damage 20 + set g_balance_shockwave_blast_jump_edgedamage 0 + set g_balance_shockwave_blast_jump_force 300 + set g_balance_shockwave_blast_jump_force_velocitybias 0 + set g_balance_shockwave_blast_jump_force_zscale 1.25 + set g_balance_shockwave_blast_jump_multiplier_accuracy 0.5 + set g_balance_shockwave_blast_jump_multiplier_distance 0.5 + set g_balance_shockwave_blast_jump_multiplier_min 0 + set g_balance_shockwave_blast_jump_radius 150 + set g_balance_shockwave_blast_multiplier_accuracy 0.5 + set g_balance_shockwave_blast_multiplier_distance 0.5 + set g_balance_shockwave_blast_multiplier_min 0 + set g_balance_shockwave_blast_refire 0.75 + set g_balance_shockwave_blast_splash_damage 15 + set g_balance_shockwave_blast_splash_edgedamage 0 + set g_balance_shockwave_blast_splash_force 100 + set g_balance_shockwave_blast_splash_force_forwardbias 50 + set g_balance_shockwave_blast_splash_multiplier_accuracy 0.5 + set g_balance_shockwave_blast_splash_multiplier_distance 0.5 + set g_balance_shockwave_blast_splash_multiplier_min 0 + set g_balance_shockwave_blast_splash_radius 70 + set g_balance_shockwave_blast_spread_max 120 + set g_balance_shockwave_blast_spread_min 25 + set g_balance_shockwave_melee_animtime 1.3 + set g_balance_shockwave_melee_damage 80 + set g_balance_shockwave_melee_delay 0.25 + set g_balance_shockwave_melee_force 200 + set g_balance_shockwave_melee_multihit 1 + set g_balance_shockwave_melee_no_doubleslap 1 + set g_balance_shockwave_melee_nonplayerdamage 40 + set g_balance_shockwave_melee_range 120 + set g_balance_shockwave_melee_refire 1.25 + set g_balance_shockwave_melee_swing_side 120 + set g_balance_shockwave_melee_swing_up 30 + set g_balance_shockwave_melee_time 0.15 + set g_balance_shockwave_melee_traces 10 + set g_balance_shockwave_switchdelay_drop 0.2 + set g_balance_shockwave_switchdelay_raise 0.2 + set g_balance_shockwave_weaponreplace "" + set g_balance_shockwave_weaponstart 1 + set g_balance_shockwave_weaponstartoverride -1 + set g_balance_shockwave_weaponthrowable 0 + // }}} + // {{{ #3: Machine Gun + set g_balance_machinegun_burst 3 + set g_balance_machinegun_burst_ammo 3 + set g_balance_machinegun_burst_animtime 0.3 + set g_balance_machinegun_burst_refire 0.06 + set g_balance_machinegun_burst_refire2 0.45 + set g_balance_machinegun_burst_speed 0 + set g_balance_machinegun_first 1 + set g_balance_machinegun_first_ammo 1 + set g_balance_machinegun_first_damage 14 + set g_balance_machinegun_first_force 5 + set g_balance_machinegun_first_refire 0.125 + set g_balance_machinegun_first_spread 0.03 + set g_balance_machinegun_mode 1 + set g_balance_machinegun_reload_ammo 60 + set g_balance_machinegun_reload_time 2 + set g_balance_machinegun_solidpenetration 13.1 + set g_balance_machinegun_spread_add 0.012 + set g_balance_machinegun_spread_max 0.05 + set g_balance_machinegun_spread_min 0.02 + set g_balance_machinegun_sustained_ammo 1 + set g_balance_machinegun_sustained_damage 10 + set g_balance_machinegun_sustained_force 5 + set g_balance_machinegun_sustained_refire 0.1 + set g_balance_machinegun_sustained_spread 0.03 + set g_balance_machinegun_switchdelay_drop 0.2 + set g_balance_machinegun_switchdelay_raise 0.2 + set g_balance_machinegun_weaponreplace "arc" + set g_balance_machinegun_weaponstart 0 + set g_balance_machinegun_weaponstartoverride -1 + set g_balance_machinegun_weaponthrowable 1 + // }}} + // {{{ #4: Mortar + set g_balance_mortar_bouncefactor 0.5 + set g_balance_mortar_bouncestop 0.075 + set g_balance_mortar_primary_ammo 2 + set g_balance_mortar_primary_animtime 0.3 + set g_balance_mortar_primary_damage 50 + set g_balance_mortar_primary_damageforcescale 0 + set g_balance_mortar_primary_edgedamage 25 + set g_balance_mortar_primary_force 250 + set g_balance_mortar_primary_health 15 + set g_balance_mortar_primary_lifetime 5 + set g_balance_mortar_primary_lifetime_stick 0 + set g_balance_mortar_primary_radius 120 + set g_balance_mortar_primary_refire 0.8 + set g_balance_mortar_primary_remote_minbouncecnt 0 + set g_balance_mortar_primary_speed 1900 + set g_balance_mortar_primary_speed_up 225 + set g_balance_mortar_primary_speed_z 0 + set g_balance_mortar_primary_spread 0 + set g_balance_mortar_primary_type 0 + set g_balance_mortar_reload_ammo 0 + set g_balance_mortar_reload_time 2 + set g_balance_mortar_secondary_ammo 2 + set g_balance_mortar_secondary_animtime 0.3 + set g_balance_mortar_secondary_damage 60 + set g_balance_mortar_secondary_damageforcescale 4 + set g_balance_mortar_secondary_edgedamage 30 + set g_balance_mortar_secondary_force 250 + set g_balance_mortar_secondary_health 30 + set g_balance_mortar_secondary_lifetime 5 + set g_balance_mortar_secondary_lifetime_bounce 0.5 + set g_balance_mortar_secondary_lifetime_stick 0 + set g_balance_mortar_secondary_radius 120 + set g_balance_mortar_secondary_refire 0.7 + set g_balance_mortar_secondary_remote_detonateprimary 0 + set g_balance_mortar_secondary_speed 1400 + set g_balance_mortar_secondary_speed_up 150 + set g_balance_mortar_secondary_speed_z 0 + set g_balance_mortar_secondary_spread 0 + set g_balance_mortar_secondary_type 1 + set g_balance_mortar_switchdelay_drop 0.2 + set g_balance_mortar_switchdelay_raise 0.2 + set g_balance_mortar_weaponreplace "" + set g_balance_mortar_weaponstart 0 + set g_balance_mortar_weaponstartoverride -1 + set g_balance_mortar_weaponthrowable 1 + // }}} + // {{{ #5: Mine Layer (MUTATOR WEAPON) + set g_balance_minelayer_ammo 4 + set g_balance_minelayer_animtime 0.4 + set g_balance_minelayer_damage 40 + set g_balance_minelayer_damageforcescale 0 + set g_balance_minelayer_detonatedelay -1 + set g_balance_minelayer_edgedamage 20 + set g_balance_minelayer_force 250 + set g_balance_minelayer_health 15 + set g_balance_minelayer_lifetime 10 + set g_balance_minelayer_lifetime_countdown 0.5 + set g_balance_minelayer_limit 3 + set g_balance_minelayer_protection 0 + set g_balance_minelayer_proximityradius 150 + set g_balance_minelayer_radius 175 + set g_balance_minelayer_refire 1.5 + set g_balance_minelayer_reload_ammo 0 + set g_balance_minelayer_reload_time 2 + set g_balance_minelayer_remote_damage 45 + set g_balance_minelayer_remote_edgedamage 40 + set g_balance_minelayer_remote_force 300 + set g_balance_minelayer_remote_radius 200 + set g_balance_minelayer_speed 1000 + set g_balance_minelayer_switchdelay_drop 0.2 + set g_balance_minelayer_switchdelay_raise 0.2 + set g_balance_minelayer_time 0.5 + set g_balance_minelayer_weaponreplace "" + set g_balance_minelayer_weaponstart 0 + set g_balance_minelayer_weaponstartoverride -1 + set g_balance_minelayer_weaponthrowable 1 + // }}} + // {{{ #6: Electro + set g_balance_electro_combo_comboradius 300 + set g_balance_electro_combo_comboradius_thruwall 200 + set g_balance_electro_combo_damage 50 + set g_balance_electro_combo_edgedamage 25 + set g_balance_electro_combo_force 120 + set g_balance_electro_combo_radius 150 + set g_balance_electro_combo_safeammocheck 1 + set g_balance_electro_combo_speed 2000 + set g_balance_electro_primary_ammo 4 + set g_balance_electro_primary_animtime 0.3 + set g_balance_electro_primary_comboradius 300 + set g_balance_electro_primary_damage 40 + set g_balance_electro_primary_edgedamage 20 + set g_balance_electro_primary_force 200 + set g_balance_electro_primary_lifetime 5 + set g_balance_electro_primary_midaircombo_explode 1 + set g_balance_electro_primary_midaircombo_interval 0.1 + set g_balance_electro_primary_midaircombo_radius 100 + set g_balance_electro_primary_radius 100 + set g_balance_electro_primary_refire 0.6 + set g_balance_electro_primary_speed 2500 + set g_balance_electro_primary_spread 0 + set g_balance_electro_reload_ammo 0 + set g_balance_electro_reload_time 2 + set g_balance_electro_secondary_ammo 2 + set g_balance_electro_secondary_animtime 0.2 + set g_balance_electro_secondary_bouncefactor 0.3 + set g_balance_electro_secondary_bouncestop 0.05 + set g_balance_electro_secondary_count 3 + set g_balance_electro_secondary_damage 40 + set g_balance_electro_secondary_damagedbycontents 1 + set g_balance_electro_secondary_damageforcescale 4 + set g_balance_electro_secondary_edgedamage 20 + set g_balance_electro_secondary_force 50 + set g_balance_electro_secondary_health 5 + set g_balance_electro_secondary_lifetime 4 + set g_balance_electro_secondary_radius 150 + set g_balance_electro_secondary_refire 0.2 + set g_balance_electro_secondary_refire2 1.6 + set g_balance_electro_secondary_speed 1000 + set g_balance_electro_secondary_speed_up 200 + set g_balance_electro_secondary_speed_z 0 + set g_balance_electro_secondary_spread 0.04 + set g_balance_electro_secondary_touchexplode 0 + set g_balance_electro_switchdelay_drop 0.2 + set g_balance_electro_switchdelay_raise 0.2 + set g_balance_electro_weaponreplace "" + set g_balance_electro_weaponstart 0 + set g_balance_electro_weaponstartoverride -1 + set g_balance_electro_weaponthrowable 1 + // }}} + // {{{ #7: Arc + set g_balance_arc_beam_ammo 0 + set g_balance_arc_beam_animtime 0.2 + set g_balance_arc_beam_botaimlifetime 0 + set g_balance_arc_beam_botaimspeed 0 + set g_balance_arc_beam_damage 150 + set g_balance_arc_beam_degreespersegment 1 + set g_balance_arc_beam_distancepersegment 0 + set g_balance_arc_beam_falloff_halflifedist 0 + set g_balance_arc_beam_falloff_maxdist 0 + set g_balance_arc_beam_falloff_mindist 0 + set g_balance_arc_beam_force 2000 + set g_balance_arc_beam_healing_amax 200 + set g_balance_arc_beam_healing_aps 50 + set g_balance_arc_beam_healing_hmax 200 + set g_balance_arc_beam_healing_hps 50 + set g_balance_arc_beam_maxangle 10 + set g_balance_arc_beam_nonplayerdamage 80 + set g_balance_arc_beam_range 1000 + set g_balance_arc_beam_refire 0.5 + set g_balance_arc_beam_returnspeed 8 + set g_balance_arc_beam_tightness 0.5 + set g_balance_arc_burst_ammo 0 + set g_balance_arc_burst_damage 500 + set g_balance_arc_burst_healing_aps 100 + set g_balance_arc_burst_healing_hps 100 + set g_balance_arc_cooldown 2.5 + set g_balance_arc_overheat_max 5 + set g_balance_arc_overheat_min 3 + set g_balance_arc_beam_heat 1 + set g_balance_arc_burst_heat 5 + set g_balance_arc_switchdelay_drop 0.3 + set g_balance_arc_switchdelay_raise 0.3 + set g_balance_arc_weaponreplace "" + set g_balance_arc_weaponstart 0 + set g_balance_arc_weaponstartoverride -1 + set g_balance_arc_weaponthrowable 1 + // }}} + // {{{ #8: Crylink + set g_balance_crylink_primary_ammo 3 + set g_balance_crylink_primary_animtime 0.3 + set g_balance_crylink_primary_bouncedamagefactor 0.5 + set g_balance_crylink_primary_bounces 1 + set g_balance_crylink_primary_damage 12 + set g_balance_crylink_primary_edgedamage 6 + set g_balance_crylink_primary_force -50 + set g_balance_crylink_primary_joindelay 0.1 + set g_balance_crylink_primary_joinexplode 1 + set g_balance_crylink_primary_joinexplode_damage 0 + set g_balance_crylink_primary_joinexplode_edgedamage 0 + set g_balance_crylink_primary_joinexplode_force 0 + set g_balance_crylink_primary_joinexplode_radius 0 + set g_balance_crylink_primary_joinspread 0.2 + set g_balance_crylink_primary_linkexplode 1 + set g_balance_crylink_primary_middle_fadetime 5 + set g_balance_crylink_primary_middle_lifetime 5 + set g_balance_crylink_primary_other_fadetime 5 + set g_balance_crylink_primary_other_lifetime 5 + set g_balance_crylink_primary_radius 80 + set g_balance_crylink_primary_refire 0.7 + set g_balance_crylink_primary_shots 6 + set g_balance_crylink_primary_speed 2000 + set g_balance_crylink_primary_spread 0.08 + set g_balance_crylink_reload_ammo 0 + set g_balance_crylink_reload_time 2 + set g_balance_crylink_secondary 1 + set g_balance_crylink_secondary_ammo 2 + set g_balance_crylink_secondary_animtime 0.2 + set g_balance_crylink_secondary_bouncedamagefactor 0.5 + set g_balance_crylink_secondary_bounces 0 + set g_balance_crylink_secondary_damage 10 + set g_balance_crylink_secondary_edgedamage 5 + set g_balance_crylink_secondary_force -250 + set g_balance_crylink_secondary_joindelay 0 + set g_balance_crylink_secondary_joinexplode 0 + set g_balance_crylink_secondary_joinexplode_damage 0 + set g_balance_crylink_secondary_joinexplode_edgedamage 0 + set g_balance_crylink_secondary_joinexplode_force 0 + set g_balance_crylink_secondary_joinexplode_radius 0 + set g_balance_crylink_secondary_joinspread 0 + set g_balance_crylink_secondary_linkexplode 1 + set g_balance_crylink_secondary_middle_fadetime 5 + set g_balance_crylink_secondary_middle_lifetime 5 + set g_balance_crylink_secondary_other_fadetime 5 + set g_balance_crylink_secondary_other_lifetime 5 + set g_balance_crylink_secondary_radius 100 + set g_balance_crylink_secondary_refire 0.7 + set g_balance_crylink_secondary_shots 5 + set g_balance_crylink_secondary_speed 3000 + set g_balance_crylink_secondary_spread 0.01 + set g_balance_crylink_secondary_spreadtype 1 + set g_balance_crylink_switchdelay_drop 0.2 + set g_balance_crylink_switchdelay_raise 0.2 + set g_balance_crylink_weaponreplace "" + set g_balance_crylink_weaponstart 0 + set g_balance_crylink_weaponstartoverride -1 + set g_balance_crylink_weaponthrowable 1 + // }}} + // {{{ #9: Vortex + set g_balance_vortex_charge 1 + set g_balance_vortex_charge_animlimit 0.5 + set g_balance_vortex_charge_limit 1 + set g_balance_vortex_charge_maxspeed 800 + set g_balance_vortex_charge_mindmg 40 + set g_balance_vortex_charge_minspeed 400 + set g_balance_vortex_charge_rate 0.4 + set g_balance_vortex_charge_rot_pause 0 + set g_balance_vortex_charge_rot_rate 0 + set g_balance_vortex_charge_shot_multiplier 0 + set g_balance_vortex_charge_start 0.5 + set g_balance_vortex_charge_velocity_rate 0 + set g_balance_vortex_primary_ammo 6 + set g_balance_vortex_primary_animtime 0.6 + set g_balance_vortex_primary_damage 80 + set g_balance_vortex_primary_damagefalloff_forcehalflife 0 + set g_balance_vortex_primary_damagefalloff_halflife 0 + set g_balance_vortex_primary_damagefalloff_maxdist 0 + set g_balance_vortex_primary_damagefalloff_mindist 0 + set g_balance_vortex_primary_force 400 + set g_balance_vortex_primary_refire 1.5 + set g_balance_vortex_reload_ammo 0 + set g_balance_vortex_reload_time 2 + set g_balance_vortex_secondary 0 + set g_balance_vortex_secondary_ammo 2 + set g_balance_vortex_secondary_animtime 0 + set g_balance_vortex_secondary_chargepool 0 + set g_balance_vortex_secondary_chargepool_pause_regen 1 + set g_balance_vortex_secondary_chargepool_regen 0.15 + set g_balance_vortex_secondary_damage 0 + set g_balance_vortex_secondary_damagefalloff_forcehalflife 0 + set g_balance_vortex_secondary_damagefalloff_halflife 0 + set g_balance_vortex_secondary_damagefalloff_maxdist 0 + set g_balance_vortex_secondary_damagefalloff_mindist 0 + set g_balance_vortex_secondary_force 0 + set g_balance_vortex_secondary_refire 0 + set g_balance_vortex_switchdelay_drop 0.3 + set g_balance_vortex_switchdelay_raise 0.25 + set g_balance_vortex_weaponreplace "" + set g_balance_vortex_weaponstart 0 + set g_balance_vortex_weaponstartoverride -1 + set g_balance_vortex_weaponthrowable 1 + // }}} + // {{{ #10: Hagar + set g_balance_hagar_primary_ammo 1 + set g_balance_hagar_primary_damage 25 + set g_balance_hagar_primary_damageforcescale 0 + set g_balance_hagar_primary_edgedamage 12.5 + set g_balance_hagar_primary_force 100 + set g_balance_hagar_primary_health 15 + set g_balance_hagar_primary_lifetime 5 + set g_balance_hagar_primary_radius 65 + set g_balance_hagar_primary_refire 0.16667 + set g_balance_hagar_primary_speed 2500 + set g_balance_hagar_primary_spread 0.03 + set g_balance_hagar_reload_ammo 0 + set g_balance_hagar_reload_time 2 + set g_balance_hagar_secondary 1 + set g_balance_hagar_secondary_ammo 1 + set g_balance_hagar_secondary_damage 40 + set g_balance_hagar_secondary_damageforcescale 0 + set g_balance_hagar_secondary_edgedamage 20 + set g_balance_hagar_secondary_force 75 + set g_balance_hagar_secondary_health 15 + set g_balance_hagar_secondary_lifetime_min 10 + set g_balance_hagar_secondary_lifetime_rand 0 + set g_balance_hagar_secondary_load 1 + set g_balance_hagar_secondary_load_abort 0 + set g_balance_hagar_secondary_load_animtime 0.2 + set g_balance_hagar_secondary_load_hold 4 + set g_balance_hagar_secondary_load_linkexplode 0 + set g_balance_hagar_secondary_load_max 4 + set g_balance_hagar_secondary_load_releasedeath 0 + set g_balance_hagar_secondary_load_speed 0.5 + set g_balance_hagar_secondary_load_spread 0.075 + set g_balance_hagar_secondary_load_spread_bias 0.5 + set g_balance_hagar_secondary_radius 80 + set g_balance_hagar_secondary_refire 0.5 + set g_balance_hagar_secondary_speed 2500 + set g_balance_hagar_secondary_spread 0.05 + set g_balance_hagar_switchdelay_drop 0.2 + set g_balance_hagar_switchdelay_raise 0.2 + set g_balance_hagar_weaponreplace "" + set g_balance_hagar_weaponstart 0 + set g_balance_hagar_weaponstartoverride -1 + set g_balance_hagar_weaponthrowable 1 + // }}} + // {{{ #11: Devastator + set g_balance_devastator_ammo 4 + set g_balance_devastator_animtime 0.4 + set g_balance_devastator_damage 70 + set g_balance_devastator_damageforcescale 1 + set g_balance_devastator_detonatedelay 0.02 + set g_balance_devastator_edgedamage 35 + set g_balance_devastator_force 450 + set g_balance_devastator_guidedelay 0.2 + set g_balance_devastator_guidegoal 512 + set g_balance_devastator_guiderate 70 + set g_balance_devastator_guideratedelay 0.01 + set g_balance_devastator_guidestop 0 + set g_balance_devastator_health 30 + set g_balance_devastator_lifetime 10 + set g_balance_devastator_radius 110 + set g_balance_devastator_refire 1.2 + set g_balance_devastator_reload_ammo 0 + set g_balance_devastator_reload_time 2 + set g_balance_devastator_remote_damage 70 + set g_balance_devastator_remote_edgedamage 35 + set g_balance_devastator_remote_force 400 + set g_balance_devastator_remote_jump_damage 40 + set g_balance_devastator_remote_jump_radius 200 + set g_balance_devastator_remote_jump_velocity_z_add 500 + set g_balance_devastator_remote_jump_velocity_z_max 1500 + set g_balance_devastator_remote_jump_velocity_z_min 500 + set g_balance_devastator_remote_radius 110 + set g_balance_devastator_speed 1300 + set g_balance_devastator_speedaccel 1300 + set g_balance_devastator_speedstart 1000 + set g_balance_devastator_switchdelay_drop 0.3 + set g_balance_devastator_switchdelay_raise 0.2 + set g_balance_devastator_weaponreplace "" + set g_balance_devastator_weaponstart 0 + set g_balance_devastator_weaponstartoverride -1 + set g_balance_devastator_weaponthrowable 1 + // }}} + // {{{ #12: Port-O-Launch + set g_balance_porto_primary_animtime 0.3 + set g_balance_porto_primary_lifetime 5 + set g_balance_porto_primary_refire 1.5 + set g_balance_porto_primary_speed 1000 + set g_balance_porto_secondary 1 + set g_balance_porto_secondary_animtime 0.3 + set g_balance_porto_secondary_lifetime 5 + set g_balance_porto_secondary_refire 1.5 + set g_balance_porto_secondary_speed 1000 + set g_balance_porto_switchdelay_drop 0.2 + set g_balance_porto_switchdelay_raise 0.2 + set g_balance_porto_weaponreplace "" + set g_balance_porto_weaponstart 0 + set g_balance_porto_weaponstartoverride -1 + set g_balance_porto_weaponthrowable 1 + // }}} + // {{{ #13: Vaporizer + set g_balance_vaporizer_primary_ammo 10 + set g_balance_vaporizer_primary_animtime 0.3 + set g_balance_vaporizer_primary_refire 1 + set g_balance_vaporizer_reload_ammo 0 + set g_balance_vaporizer_reload_time 0 + set g_balance_vaporizer_secondary_ammo 0 + set g_balance_vaporizer_secondary_animtime 0.2 + set g_balance_vaporizer_secondary_damage 25 + set g_balance_vaporizer_secondary_delay 0 + set g_balance_vaporizer_secondary_edgedamage 12.5 + set g_balance_vaporizer_secondary_force 400 + set g_balance_vaporizer_secondary_lifetime 5 + set g_balance_vaporizer_secondary_radius 70 + set g_balance_vaporizer_secondary_refire 0.7 + set g_balance_vaporizer_secondary_shotangle 0 + set g_balance_vaporizer_secondary_speed 6000 + set g_balance_vaporizer_secondary_spread 0 + set g_balance_vaporizer_switchdelay_drop 0.2 + set g_balance_vaporizer_switchdelay_raise 0.2 + set g_balance_vaporizer_weaponreplace "" + set g_balance_vaporizer_weaponstart 0 + set g_balance_vaporizer_weaponstartoverride -1 + set g_balance_vaporizer_weaponthrowable 0 + // }}} + // {{{ #14: Grappling Hook + set g_balance_hook_primary_ammo 5 + set g_balance_hook_primary_animtime 0.3 + set g_balance_hook_primary_hooked_ammo 5 + set g_balance_hook_primary_hooked_time_free 2 + set g_balance_hook_primary_hooked_time_max 0 + set g_balance_hook_primary_refire 0 + set g_balance_hook_secondary_animtime 0.3 + set g_balance_hook_secondary_damage 25 + set g_balance_hook_secondary_damageforcescale 0 + set g_balance_hook_secondary_duration 1.5 + set g_balance_hook_secondary_edgedamage 5 + set g_balance_hook_secondary_force -2000 + set g_balance_hook_secondary_gravity 5 + set g_balance_hook_secondary_health 15 + set g_balance_hook_secondary_lifetime 5 + set g_balance_hook_secondary_power 3 + set g_balance_hook_secondary_radius 500 + set g_balance_hook_secondary_refire 3 + set g_balance_hook_secondary_speed 0 + set g_balance_hook_switchdelay_drop 0.2 + set g_balance_hook_switchdelay_raise 0.2 + set g_balance_hook_weaponreplace "" + set g_balance_hook_weaponstart 0 + set g_balance_hook_weaponstartoverride -1 + set g_balance_hook_weaponthrowable 1 + // }}} + // {{{ #15: Heavy Laser Assault Cannon (MUTATOR WEAPON) + set g_balance_hlac_primary_ammo 1 + set g_balance_hlac_primary_animtime 0.4 + set g_balance_hlac_primary_damage 18 + set g_balance_hlac_primary_edgedamage 9 + set g_balance_hlac_primary_force 90 + set g_balance_hlac_primary_lifetime 5 + set g_balance_hlac_primary_radius 70 + set g_balance_hlac_primary_refire 0.15 + set g_balance_hlac_primary_speed 9000 + set g_balance_hlac_primary_spread_add 0.0045 + set g_balance_hlac_primary_spread_crouchmod 0.25 + set g_balance_hlac_primary_spread_max 0.25 + set g_balance_hlac_primary_spread_min 0.01 + set g_balance_hlac_reload_ammo 0 + set g_balance_hlac_reload_time 2 + set g_balance_hlac_secondary 1 + set g_balance_hlac_secondary_ammo 10 + set g_balance_hlac_secondary_animtime 0.3 + set g_balance_hlac_secondary_damage 15 + set g_balance_hlac_secondary_edgedamage 7.5 + set g_balance_hlac_secondary_force 90 + set g_balance_hlac_secondary_lifetime 5 + set g_balance_hlac_secondary_radius 70 + set g_balance_hlac_secondary_refire 1 + set g_balance_hlac_secondary_shots 6 + set g_balance_hlac_secondary_speed 9000 + set g_balance_hlac_secondary_spread 0.15 + set g_balance_hlac_secondary_spread_crouchmod 0.5 + set g_balance_hlac_switchdelay_drop 0.2 + set g_balance_hlac_switchdelay_raise 0.2 + set g_balance_hlac_weaponreplace "" + set g_balance_hlac_weaponstart 0 + set g_balance_hlac_weaponstartoverride -1 + set g_balance_hlac_weaponthrowable 1 + // }}} + // {{{ #16: @!#%'n Tuba + set g_balance_tuba_animtime 0.05 + set g_balance_tuba_attenuation 0.5 + set g_balance_tuba_damage 5 + set g_balance_tuba_edgedamage 0 + set g_balance_tuba_fadetime 0.25 + set g_balance_tuba_force 40 + set g_balance_tuba_pitchstep 6 + set g_balance_tuba_radius 200 + set g_balance_tuba_refire 0.05 + set g_balance_tuba_switchdelay_drop 0.2 + set g_balance_tuba_switchdelay_raise 0.2 + set g_balance_tuba_volume 1 + set g_balance_tuba_weaponreplace "" + set g_balance_tuba_weaponstart 0 + set g_balance_tuba_weaponstartoverride -1 + set g_balance_tuba_weaponthrowable 1 + // }}} + // {{{ #17: Rifle (MUTATOR WEAPON) + set g_balance_rifle_bursttime 0 + set g_balance_rifle_primary_ammo 10 + set g_balance_rifle_primary_animtime 0.4 + set g_balance_rifle_primary_bullethail 0 + set g_balance_rifle_primary_burstcost 0 + set g_balance_rifle_primary_damage 80 + set g_balance_rifle_primary_force 100 + set g_balance_rifle_primary_refire 1.2 + set g_balance_rifle_primary_shots 1 + set g_balance_rifle_primary_solidpenetration 62.2 + set g_balance_rifle_primary_spread 0 + set g_balance_rifle_primary_tracer 1 + set g_balance_rifle_reload_ammo 80 + set g_balance_rifle_reload_time 2 + set g_balance_rifle_secondary 1 + set g_balance_rifle_secondary_ammo 10 + set g_balance_rifle_secondary_animtime 0.3 + set g_balance_rifle_secondary_bullethail 0 + set g_balance_rifle_secondary_burstcost 0 + set g_balance_rifle_secondary_damage 20 + set g_balance_rifle_secondary_force 50 + set g_balance_rifle_secondary_refire 0.9 + set g_balance_rifle_secondary_reload 0 + set g_balance_rifle_secondary_shots 4 + set g_balance_rifle_secondary_solidpenetration 15.5 + set g_balance_rifle_secondary_spread 0.04 + set g_balance_rifle_secondary_tracer 0 + set g_balance_rifle_switchdelay_drop 0.2 + set g_balance_rifle_switchdelay_raise 0.2 + set g_balance_rifle_weaponreplace "" + set g_balance_rifle_weaponstart 0 + set g_balance_rifle_weaponstartoverride -1 + set g_balance_rifle_weaponthrowable 1 + // }}} + // {{{ #18: Fireball + set g_balance_fireball_primary_animtime 0.2 + set g_balance_fireball_primary_bfgdamage 100 + set g_balance_fireball_primary_bfgforce 0 + set g_balance_fireball_primary_bfgradius 1000 + set g_balance_fireball_primary_damage 200 + set g_balance_fireball_primary_damageforcescale 0 + set g_balance_fireball_primary_edgedamage 50 + set g_balance_fireball_primary_force 600 + set g_balance_fireball_primary_health 0 + set g_balance_fireball_primary_laserburntime 0.5 + set g_balance_fireball_primary_laserdamage 80 + set g_balance_fireball_primary_laseredgedamage 20 + set g_balance_fireball_primary_laserradius 256 + set g_balance_fireball_primary_lifetime 15 + set g_balance_fireball_primary_radius 200 + set g_balance_fireball_primary_refire 2 + set g_balance_fireball_primary_refire2 0 + set g_balance_fireball_primary_speed 1200 + set g_balance_fireball_primary_spread 0 + set g_balance_fireball_secondary_animtime 0.3 + set g_balance_fireball_secondary_damage 40 + set g_balance_fireball_secondary_damageforcescale 4 + set g_balance_fireball_secondary_damagetime 5 + set g_balance_fireball_secondary_laserburntime 0.5 + set g_balance_fireball_secondary_laserdamage 50 + set g_balance_fireball_secondary_laseredgedamage 20 + set g_balance_fireball_secondary_laserradius 110 + set g_balance_fireball_secondary_lifetime 7 + set g_balance_fireball_secondary_refire 1.5 + set g_balance_fireball_secondary_speed 900 + set g_balance_fireball_secondary_speed_up 100 + set g_balance_fireball_secondary_speed_z 0 + set g_balance_fireball_secondary_spread 0 + set g_balance_fireball_switchdelay_drop 0.2 + set g_balance_fireball_switchdelay_raise 0.2 + set g_balance_fireball_weaponreplace "" + set g_balance_fireball_weaponstart 0 + set g_balance_fireball_weaponstartoverride -1 + set g_balance_fireball_weaponthrowable 0 + // }}} + // {{{ #19: T.A.G. Seeker (MUTATOR WEAPON) + set g_balance_seeker_flac_ammo 1 + set g_balance_seeker_flac_animtime 0.1 + set g_balance_seeker_flac_damage 15 + set g_balance_seeker_flac_edgedamage 10 + set g_balance_seeker_flac_force 50 + set g_balance_seeker_flac_lifetime 0.1 + set g_balance_seeker_flac_lifetime_rand 0.05 + set g_balance_seeker_flac_radius 100 + set g_balance_seeker_flac_refire 0.1 + set g_balance_seeker_flac_speed 3000 + set g_balance_seeker_flac_speed_up 1000 + set g_balance_seeker_flac_speed_z 0 + set g_balance_seeker_flac_spread 0.4 + set g_balance_seeker_missile_accel 1400 + set g_balance_seeker_missile_ammo 2 + set g_balance_seeker_missile_animtime 0.2 + set g_balance_seeker_missile_count 3 + set g_balance_seeker_missile_damage 30 + set g_balance_seeker_missile_damageforcescale 4 + set g_balance_seeker_missile_decel 1400 + set g_balance_seeker_missile_delay 0.25 + set g_balance_seeker_missile_edgedamage 10 + set g_balance_seeker_missile_force 150 + set g_balance_seeker_missile_health 5 + set g_balance_seeker_missile_lifetime 15 + set g_balance_seeker_missile_proxy 0 + set g_balance_seeker_missile_proxy_delay 0.2 + set g_balance_seeker_missile_proxy_maxrange 45 + set g_balance_seeker_missile_radius 80 + set g_balance_seeker_missile_refire 0.5 + set g_balance_seeker_missile_smart 1 + set g_balance_seeker_missile_smart_mindist 800 + set g_balance_seeker_missile_smart_trace_max 2500 + set g_balance_seeker_missile_smart_trace_min 1000 + set g_balance_seeker_missile_speed 700 + set g_balance_seeker_missile_speed_max 1300 + set g_balance_seeker_missile_speed_up 300 + set g_balance_seeker_missile_speed_z 0 + set g_balance_seeker_missile_spread 0 + set g_balance_seeker_missile_turnrate 0.65 + set g_balance_seeker_reload_ammo 0 + set g_balance_seeker_reload_time 2 + set g_balance_seeker_switchdelay_drop 0.2 + set g_balance_seeker_switchdelay_raise 0.2 + set g_balance_seeker_tag_ammo 1 + set g_balance_seeker_tag_animtime 0.2 + set g_balance_seeker_tag_damageforcescale 4 + set g_balance_seeker_tag_health 5 + set g_balance_seeker_tag_lifetime 15 + set g_balance_seeker_tag_refire 0.75 + set g_balance_seeker_tag_speed 5000 + set g_balance_seeker_tag_spread 0 + set g_balance_seeker_tag_tracker_lifetime 10 + set g_balance_seeker_type 0 + set g_balance_seeker_weaponreplace "" + set g_balance_seeker_weaponstart 0 + set g_balance_seeker_weaponstartoverride -1 + set g_balance_seeker_weaponthrowable 1 + // }}} + // {{{ #20: Shotgun (MUTATOR WEAPON) + set g_balance_shotgun_primary_ammo 1 + set g_balance_shotgun_primary_animtime 0.2 + set g_balance_shotgun_primary_bullets 14 + set g_balance_shotgun_primary_damage 4 + set g_balance_shotgun_primary_force 15 + set g_balance_shotgun_primary_refire 0.75 + set g_balance_shotgun_primary_solidpenetration 3.8 + set g_balance_shotgun_primary_spread 0.12 + set g_balance_shotgun_reload_ammo 0 + set g_balance_shotgun_reload_time 2 + set g_balance_shotgun_secondary 1 + set g_balance_shotgun_secondary_animtime 1 + set g_balance_shotgun_secondary_damage 80 + set g_balance_shotgun_secondary_force 200 + set g_balance_shotgun_secondary_melee_delay 0.25 + set g_balance_shotgun_secondary_melee_multihit 1 + set g_balance_shotgun_secondary_melee_no_doubleslap 1 + set g_balance_shotgun_secondary_melee_nonplayerdamage 40 + set g_balance_shotgun_secondary_melee_range 120 + set g_balance_shotgun_secondary_melee_swing_side 120 + set g_balance_shotgun_secondary_melee_swing_up 30 + set g_balance_shotgun_secondary_melee_time 0.15 + set g_balance_shotgun_secondary_melee_traces 10 + set g_balance_shotgun_secondary_refire 1.25 + set g_balance_shotgun_secondary_alt_animtime 0.2 + set g_balance_shotgun_secondary_alt_refire 1.2 + set g_balance_shotgun_switchdelay_drop 0.2 + set g_balance_shotgun_switchdelay_raise 0.2 + set g_balance_shotgun_weaponreplace "" + set g_balance_shotgun_weaponstart 0 + set g_balance_shotgun_weaponstartoverride -1 + set g_balance_shotgun_weaponthrowable 1 + // }}} ++// {{{ #21: Heavy Machine Gun ++set g_balance_hmg_ammo 0 ++set g_balance_hmg_damage 0 ++set g_balance_hmg_force 0 ++set g_balance_hmg_refire 0 ++set g_balance_hmg_reload_ammo 120 ++set g_balance_hmg_reload_time 1 ++set g_balance_hmg_solidpenetration 32 ++set g_balance_hmg_spread_add 0.01 ++set g_balance_hmg_spread_max 0.05 ++set g_balance_hmg_spread_min 0.02 ++set g_balance_hmg_switchdelay_drop 0.2 ++set g_balance_hmg_switchdelay_raise 0.2 ++set g_balance_hmg_weaponreplace "" ++set g_balance_hmg_weaponstart 0 ++set g_balance_hmg_weaponstartoverride 0 ++set g_balance_hmg_weaponthrowable 0 ++// }}} ++// {{{ #22: Rocket Propelled Chainsaw ++set g_balance_rpc_ammo 10 ++set g_balance_rpc_animtime 1 ++set g_balance_rpc_damage 150 ++set g_balance_rpc_damage2 500 ++set g_balance_rpc_damageforcescale 2 ++set g_balance_rpc_edgedamage 50 ++set g_balance_rpc_force 400 ++set g_balance_rpc_health 25 ++set g_balance_rpc_lifetime 30 ++set g_balance_rpc_radius 300 ++set g_balance_rpc_refire 1 ++set g_balance_rpc_reload_ammo 10 ++set g_balance_rpc_reload_time 1 ++set g_balance_rpc_speed 1250 ++set g_balance_rpc_speedaccel 5000 ++set g_balance_rpc_switchdelay_drop 0.2 ++set g_balance_rpc_switchdelay_raise 0.2 ++set g_balance_rpc_weaponreplace "" ++set g_balance_rpc_weaponstart 0 ++set g_balance_rpc_weaponstartoverride 0 ++set g_balance_rpc_weaponthrowable 0 ++// }}} diff --cc bal-wep-xdf.cfg index 000000000,ef8035ea7..be087a5d7 mode 000000,100644..100644 --- a/bal-wep-xdf.cfg +++ b/bal-wep-xdf.cfg @@@ -1,0 -1,763 +1,804 @@@ + // {{{ #1: Blaster + set g_balance_blaster_primary_animtime 0.3 + set g_balance_blaster_primary_damage 25 + set g_balance_blaster_primary_delay 0 + set g_balance_blaster_primary_edgedamage 12.5 + set g_balance_blaster_primary_force 250 + set g_balance_blaster_primary_force_zscale 1.5 + set g_balance_blaster_primary_lifetime 5 + set g_balance_blaster_primary_radius 60 + set g_balance_blaster_primary_refire 0.7 + set g_balance_blaster_primary_shotangle 0 + set g_balance_blaster_primary_speed 6000 + set g_balance_blaster_primary_spread 0 + set g_balance_blaster_secondary 0 + set g_balance_blaster_secondary_animtime 0.3 + set g_balance_blaster_secondary_damage 25 + set g_balance_blaster_secondary_delay 0 + set g_balance_blaster_secondary_edgedamage 12.5 + set g_balance_blaster_secondary_force 300 + set g_balance_blaster_secondary_force_zscale 1.2 + set g_balance_blaster_secondary_lifetime 5 + set g_balance_blaster_secondary_radius 70 + set g_balance_blaster_secondary_refire 0.7 + set g_balance_blaster_secondary_shotangle 0 + set g_balance_blaster_secondary_speed 6000 + set g_balance_blaster_secondary_spread 0 + set g_balance_blaster_switchdelay_drop 0 + set g_balance_blaster_switchdelay_raise 0 + set g_balance_blaster_weaponreplace "" + set g_balance_blaster_weaponstart 0 + set g_balance_blaster_weaponstartoverride -1 + set g_balance_blaster_weaponthrowable 0 + // }}} + // {{{ #2: Shotgun + set g_balance_shotgun_primary_ammo 1 + set g_balance_shotgun_primary_animtime 0.2 + set g_balance_shotgun_primary_bullets 14 + set g_balance_shotgun_primary_damage 4 + set g_balance_shotgun_primary_force 15 + set g_balance_shotgun_primary_refire 0.75 + set g_balance_shotgun_primary_solidpenetration 3.8 + set g_balance_shotgun_primary_spread 0.12 + set g_balance_shotgun_reload_ammo 0 + set g_balance_shotgun_reload_time 2 + set g_balance_shotgun_secondary 1 + set g_balance_shotgun_secondary_animtime 1 + set g_balance_shotgun_secondary_damage 80 + set g_balance_shotgun_secondary_force 200 + set g_balance_shotgun_secondary_melee_delay 0.25 + set g_balance_shotgun_secondary_melee_multihit 1 + set g_balance_shotgun_secondary_melee_no_doubleslap 1 + set g_balance_shotgun_secondary_melee_nonplayerdamage 40 + set g_balance_shotgun_secondary_melee_range 120 + set g_balance_shotgun_secondary_melee_swing_side 120 + set g_balance_shotgun_secondary_melee_swing_up 30 + set g_balance_shotgun_secondary_melee_time 0.15 + set g_balance_shotgun_secondary_melee_traces 10 + set g_balance_shotgun_secondary_refire 1.25 + set g_balance_shotgun_secondary_alt_animtime 0.2 + set g_balance_shotgun_secondary_alt_refire 1.2 + set g_balance_shotgun_switchdelay_drop 0 + set g_balance_shotgun_switchdelay_raise 0 + set g_balance_shotgun_weaponreplace "" + set g_balance_shotgun_weaponstart 0 + set g_balance_shotgun_weaponstartoverride -1 + set g_balance_shotgun_weaponthrowable 1 + // }}} + // {{{ #3: Machine Gun + set g_balance_machinegun_burst 3 + set g_balance_machinegun_burst_ammo 3 + set g_balance_machinegun_burst_animtime 0.3 + set g_balance_machinegun_burst_refire 0.06 + set g_balance_machinegun_burst_refire2 0.45 + set g_balance_machinegun_burst_speed 0 + set g_balance_machinegun_first 1 + set g_balance_machinegun_first_ammo 1 + set g_balance_machinegun_first_damage 14 + set g_balance_machinegun_first_force 5 + set g_balance_machinegun_first_refire 0.4 + set g_balance_machinegun_first_spread 0.03 + set g_balance_machinegun_mode 1 + set g_balance_machinegun_reload_ammo 0 + set g_balance_machinegun_reload_time 2 + set g_balance_machinegun_solidpenetration 13.1 + set g_balance_machinegun_spread_add 0 + set g_balance_machinegun_spread_max 0 + set g_balance_machinegun_spread_min 0 + set g_balance_machinegun_sustained_ammo 1 + set g_balance_machinegun_sustained_damage 12 + set g_balance_machinegun_sustained_force 5 + set g_balance_machinegun_sustained_refire 0.1 + set g_balance_machinegun_sustained_spread 0 + set g_balance_machinegun_switchdelay_drop 0 + set g_balance_machinegun_switchdelay_raise 0 + set g_balance_machinegun_weaponreplace "" + set g_balance_machinegun_weaponstart 1 + set g_balance_machinegun_weaponstartoverride -1 + set g_balance_machinegun_weaponthrowable 1 + // }}} + // {{{ #4: Mortar + set g_balance_mortar_bouncefactor 0.5 + set g_balance_mortar_bouncestop 0.075 + set g_balance_mortar_primary_ammo 2 + set g_balance_mortar_primary_animtime 0.3 + set g_balance_mortar_primary_damage 50 + set g_balance_mortar_primary_damageforcescale 0 + set g_balance_mortar_primary_edgedamage 25 + set g_balance_mortar_primary_force 250 + set g_balance_mortar_primary_health 0 + set g_balance_mortar_primary_lifetime 5 + set g_balance_mortar_primary_lifetime_stick 0 + set g_balance_mortar_primary_radius 100 + set g_balance_mortar_primary_refire 0.7 + set g_balance_mortar_primary_remote_minbouncecnt 0 + set g_balance_mortar_primary_speed 2000 + set g_balance_mortar_primary_speed_up 200 + set g_balance_mortar_primary_speed_z 0 + set g_balance_mortar_primary_spread 0 + set g_balance_mortar_primary_type 0 + set g_balance_mortar_reload_ammo 0 + set g_balance_mortar_reload_time 2 + set g_balance_mortar_secondary_ammo 2 + set g_balance_mortar_secondary_animtime 0.5 + set g_balance_mortar_secondary_damage 55 + set g_balance_mortar_secondary_damageforcescale 0 + set g_balance_mortar_secondary_edgedamage 30 + set g_balance_mortar_secondary_force 300 + set g_balance_mortar_secondary_health 0 + set g_balance_mortar_secondary_lifetime 8 + set g_balance_mortar_secondary_lifetime_bounce 0.5 + set g_balance_mortar_secondary_lifetime_stick 0 + set g_balance_mortar_secondary_radius 200 + set g_balance_mortar_secondary_refire 0.7 + set g_balance_mortar_secondary_remote_detonateprimary 0 + set g_balance_mortar_secondary_speed 800 + set g_balance_mortar_secondary_speed_up 0 + set g_balance_mortar_secondary_speed_z 200 + set g_balance_mortar_secondary_spread 0 + set g_balance_mortar_secondary_type 1 + set g_balance_mortar_switchdelay_drop 0 + set g_balance_mortar_switchdelay_raise 0 + set g_balance_mortar_weaponreplace "" + set g_balance_mortar_weaponstart 0 + set g_balance_mortar_weaponstartoverride -1 + set g_balance_mortar_weaponthrowable 1 + // }}} + // {{{ #5: Mine Layer (MUTATOR WEAPON) + set g_balance_minelayer_ammo 4 + set g_balance_minelayer_animtime 0.4 + set g_balance_minelayer_damage 40 + set g_balance_minelayer_damageforcescale 0 + set g_balance_minelayer_detonatedelay -1 + set g_balance_minelayer_edgedamage 20 + set g_balance_minelayer_force 250 + set g_balance_minelayer_health 15 + set g_balance_minelayer_lifetime 10 + set g_balance_minelayer_lifetime_countdown 0.5 + set g_balance_minelayer_limit 3 + set g_balance_minelayer_protection 0 + set g_balance_minelayer_proximityradius 150 + set g_balance_minelayer_radius 175 + set g_balance_minelayer_refire 1.5 + set g_balance_minelayer_reload_ammo 0 + set g_balance_minelayer_reload_time 2 + set g_balance_minelayer_remote_damage 45 + set g_balance_minelayer_remote_edgedamage 40 + set g_balance_minelayer_remote_force 300 + set g_balance_minelayer_remote_radius 200 + set g_balance_minelayer_speed 1000 + set g_balance_minelayer_switchdelay_drop 0 + set g_balance_minelayer_switchdelay_raise 0 + set g_balance_minelayer_time 0.5 + set g_balance_minelayer_weaponreplace "" + set g_balance_minelayer_weaponstart 0 + set g_balance_minelayer_weaponstartoverride -1 + set g_balance_minelayer_weaponthrowable 1 + // }}} + // {{{ #6: Electro + set g_balance_electro_combo_comboradius 275 + set g_balance_electro_combo_comboradius_thruwall 200 + set g_balance_electro_combo_damage 40 + set g_balance_electro_combo_edgedamage 20 + set g_balance_electro_combo_force 120 + set g_balance_electro_combo_radius 175 + set g_balance_electro_combo_safeammocheck 1 + set g_balance_electro_combo_speed 2000 + set g_balance_electro_primary_ammo 4 + set g_balance_electro_primary_animtime 0.1 + set g_balance_electro_primary_comboradius 150 + set g_balance_electro_primary_damage 55 + set g_balance_electro_primary_edgedamage 27.5 + set g_balance_electro_primary_force 200 + set g_balance_electro_primary_lifetime 5 + set g_balance_electro_primary_midaircombo_explode 1 + set g_balance_electro_primary_midaircombo_interval 0.1 + set g_balance_electro_primary_midaircombo_radius 100 + set g_balance_electro_primary_radius 100 + set g_balance_electro_primary_refire 0.6 + set g_balance_electro_primary_speed 2500 + set g_balance_electro_primary_spread 0 + set g_balance_electro_reload_ammo 0 + set g_balance_electro_reload_time 2 + set g_balance_electro_secondary_ammo 2 + set g_balance_electro_secondary_animtime 0.2 + set g_balance_electro_secondary_bouncefactor 0.4 + set g_balance_electro_secondary_bouncestop 0.05 + set g_balance_electro_secondary_count 3 + set g_balance_electro_secondary_damage 40 + set g_balance_electro_secondary_damagedbycontents 1 + set g_balance_electro_secondary_damageforcescale 4 + set g_balance_electro_secondary_edgedamage 20 + set g_balance_electro_secondary_force 200 + set g_balance_electro_secondary_health 5 + set g_balance_electro_secondary_lifetime 3 + set g_balance_electro_secondary_radius 150 + set g_balance_electro_secondary_refire 0.2 + set g_balance_electro_secondary_refire2 1.5 + set g_balance_electro_secondary_speed 900 + set g_balance_electro_secondary_speed_up 200 + set g_balance_electro_secondary_speed_z 0 + set g_balance_electro_secondary_spread 0.05 + set g_balance_electro_secondary_touchexplode 0 + set g_balance_electro_switchdelay_drop 0 + set g_balance_electro_switchdelay_raise 0 + set g_balance_electro_weaponreplace "" + set g_balance_electro_weaponstart 0 + set g_balance_electro_weaponstartoverride -1 + set g_balance_electro_weaponthrowable 1 + // }}} + // {{{ #7: Crylink + set g_balance_crylink_primary_ammo 3 + set g_balance_crylink_primary_animtime 0.3 + set g_balance_crylink_primary_bouncedamagefactor 0.5 + set g_balance_crylink_primary_bounces 1 + set g_balance_crylink_primary_damage 12 + set g_balance_crylink_primary_edgedamage 6 + set g_balance_crylink_primary_force -60 + set g_balance_crylink_primary_joindelay 0.1 + set g_balance_crylink_primary_joinexplode 1 + set g_balance_crylink_primary_joinexplode_damage 0 + set g_balance_crylink_primary_joinexplode_edgedamage 0 + set g_balance_crylink_primary_joinexplode_force 0 + set g_balance_crylink_primary_joinexplode_radius 0 + set g_balance_crylink_primary_joinspread 0.2 + set g_balance_crylink_primary_linkexplode 1 + set g_balance_crylink_primary_middle_fadetime 5 + set g_balance_crylink_primary_middle_lifetime 5 + set g_balance_crylink_primary_other_fadetime 5 + set g_balance_crylink_primary_other_lifetime 5 + set g_balance_crylink_primary_radius 80 + set g_balance_crylink_primary_refire 0.7 + set g_balance_crylink_primary_shots 6 + set g_balance_crylink_primary_speed 2000 + set g_balance_crylink_primary_spread 0.08 + set g_balance_crylink_reload_ammo 0 + set g_balance_crylink_reload_time 2 + set g_balance_crylink_secondary 1 + set g_balance_crylink_secondary_ammo 2 + set g_balance_crylink_secondary_animtime 0.2 + set g_balance_crylink_secondary_bouncedamagefactor 0.5 + set g_balance_crylink_secondary_bounces 0 + set g_balance_crylink_secondary_damage 10 + set g_balance_crylink_secondary_edgedamage 5 + set g_balance_crylink_secondary_force -150 + set g_balance_crylink_secondary_joindelay 0 + set g_balance_crylink_secondary_joinexplode 0 + set g_balance_crylink_secondary_joinexplode_damage 0 + set g_balance_crylink_secondary_joinexplode_edgedamage 0 + set g_balance_crylink_secondary_joinexplode_force 0 + set g_balance_crylink_secondary_joinexplode_radius 0 + set g_balance_crylink_secondary_joinspread 0 + set g_balance_crylink_secondary_linkexplode 1 + set g_balance_crylink_secondary_middle_fadetime 5 + set g_balance_crylink_secondary_middle_lifetime 5 + set g_balance_crylink_secondary_other_fadetime 5 + set g_balance_crylink_secondary_other_lifetime 5 + set g_balance_crylink_secondary_radius 100 + set g_balance_crylink_secondary_refire 0.7 + set g_balance_crylink_secondary_shots 5 + set g_balance_crylink_secondary_speed 3000 + set g_balance_crylink_secondary_spread 0.01 + set g_balance_crylink_secondary_spreadtype 1 + set g_balance_crylink_switchdelay_drop 0 + set g_balance_crylink_switchdelay_raise 0 + set g_balance_crylink_weaponreplace "" + set g_balance_crylink_weaponstart 0 + set g_balance_crylink_weaponstartoverride -1 + set g_balance_crylink_weaponthrowable 1 + // }}} + // {{{ #8: Vortex + set g_balance_vortex_charge 1 + set g_balance_vortex_charge_animlimit 0.5 + set g_balance_vortex_charge_limit 1 + set g_balance_vortex_charge_maxspeed 800 + set g_balance_vortex_charge_mindmg 40 + set g_balance_vortex_charge_minspeed 400 + set g_balance_vortex_charge_rate 0.4 + set g_balance_vortex_charge_rot_pause 0 + set g_balance_vortex_charge_rot_rate 0 + set g_balance_vortex_charge_shot_multiplier 0 + set g_balance_vortex_charge_start 0.5 + set g_balance_vortex_charge_velocity_rate 0 + set g_balance_vortex_primary_ammo 6 + set g_balance_vortex_primary_animtime 0.4 + set g_balance_vortex_primary_damage 90 + set g_balance_vortex_primary_damagefalloff_forcehalflife 0 + set g_balance_vortex_primary_damagefalloff_halflife 0 + set g_balance_vortex_primary_damagefalloff_maxdist 0 + set g_balance_vortex_primary_damagefalloff_mindist 0 + set g_balance_vortex_primary_force 400 + set g_balance_vortex_primary_refire 1.5 + set g_balance_vortex_reload_ammo 0 + set g_balance_vortex_reload_time 2 + set g_balance_vortex_secondary 0 + set g_balance_vortex_secondary_ammo 2 + set g_balance_vortex_secondary_animtime 0 + set g_balance_vortex_secondary_chargepool 0 + set g_balance_vortex_secondary_chargepool_pause_regen 1 + set g_balance_vortex_secondary_chargepool_regen 0.15 + set g_balance_vortex_secondary_damage 0 + set g_balance_vortex_secondary_damagefalloff_forcehalflife 0 + set g_balance_vortex_secondary_damagefalloff_halflife 0 + set g_balance_vortex_secondary_damagefalloff_maxdist 0 + set g_balance_vortex_secondary_damagefalloff_mindist 0 + set g_balance_vortex_secondary_force 0 + set g_balance_vortex_secondary_refire 0 + set g_balance_vortex_switchdelay_drop 0 + set g_balance_vortex_switchdelay_raise 0 + set g_balance_vortex_weaponreplace "" + set g_balance_vortex_weaponstart 0 + set g_balance_vortex_weaponstartoverride -1 + set g_balance_vortex_weaponthrowable 1 + // }}} + // {{{ #9: Hagar + set g_balance_hagar_primary_ammo 1 + set g_balance_hagar_primary_damage 25 + set g_balance_hagar_primary_damageforcescale 0 + set g_balance_hagar_primary_edgedamage 12.5 + set g_balance_hagar_primary_force 92 + set g_balance_hagar_primary_health 15 + set g_balance_hagar_primary_lifetime 5 + set g_balance_hagar_primary_radius 25 + set g_balance_hagar_primary_refire 0.11 + set g_balance_hagar_primary_speed 2000 + set g_balance_hagar_primary_spread 0.03 + set g_balance_hagar_reload_ammo 0 + set g_balance_hagar_reload_time 2 + set g_balance_hagar_secondary 0 + set g_balance_hagar_secondary_ammo 1 + set g_balance_hagar_secondary_damage 40 + set g_balance_hagar_secondary_damageforcescale 0 + set g_balance_hagar_secondary_edgedamage 20 + set g_balance_hagar_secondary_force 75 + set g_balance_hagar_secondary_health 15 + set g_balance_hagar_secondary_lifetime_min 10 + set g_balance_hagar_secondary_lifetime_rand 0 + set g_balance_hagar_secondary_load 1 + set g_balance_hagar_secondary_load_abort 1 + set g_balance_hagar_secondary_load_animtime 0.2 + set g_balance_hagar_secondary_load_hold 4 + set g_balance_hagar_secondary_load_linkexplode 0 + set g_balance_hagar_secondary_load_max 4 + set g_balance_hagar_secondary_load_releasedeath 0 + set g_balance_hagar_secondary_load_speed 0.5 + set g_balance_hagar_secondary_load_spread 0.075 + set g_balance_hagar_secondary_load_spread_bias 0.5 + set g_balance_hagar_secondary_radius 80 + set g_balance_hagar_secondary_refire 0.5 + set g_balance_hagar_secondary_speed 2000 + set g_balance_hagar_secondary_spread 0.05 + set g_balance_hagar_switchdelay_drop 0 + set g_balance_hagar_switchdelay_raise 0 + set g_balance_hagar_weaponreplace "" + set g_balance_hagar_weaponstart 0 + set g_balance_hagar_weaponstartoverride -1 + set g_balance_hagar_weaponthrowable 1 + // }}} + // {{{ #10: Devastator + set g_balance_devastator_ammo 4 + set g_balance_devastator_animtime 0.7 + set g_balance_devastator_damage 80 + set g_balance_devastator_damageforcescale 0 + set g_balance_devastator_detonatedelay 0.02 + set g_balance_devastator_edgedamage 40 + set g_balance_devastator_force 350 + set g_balance_devastator_guidedelay 0.2 + set g_balance_devastator_guidegoal 512 + set g_balance_devastator_guiderate 0 + set g_balance_devastator_guideratedelay 999 + set g_balance_devastator_guidestop 1 + set g_balance_devastator_health 0 + set g_balance_devastator_lifetime 100 + set g_balance_devastator_radius 110 + set g_balance_devastator_refire 0.9 + set g_balance_devastator_reload_ammo 0 + set g_balance_devastator_reload_time 2 + set g_balance_devastator_remote_damage 70 + set g_balance_devastator_remote_edgedamage 35 + set g_balance_devastator_remote_force 350 + set g_balance_devastator_remote_jump_damage 70 + set g_balance_devastator_remote_jump_radius 0 + set g_balance_devastator_remote_jump_velocity_z_add 400 + set g_balance_devastator_remote_jump_velocity_z_max 1500 + set g_balance_devastator_remote_jump_velocity_z_min 400 + set g_balance_devastator_remote_radius 110 + set g_balance_devastator_speed 1000 + set g_balance_devastator_speedaccel 0 + set g_balance_devastator_speedstart 1000 + set g_balance_devastator_switchdelay_drop 0 + set g_balance_devastator_switchdelay_raise 0 + set g_balance_devastator_weaponreplace "" + set g_balance_devastator_weaponstart 0 + set g_balance_devastator_weaponstartoverride -1 + set g_balance_devastator_weaponthrowable 1 + // }}} + // {{{ #11: Port-O-Launch + set g_balance_porto_primary_animtime 0.3 + set g_balance_porto_primary_lifetime 5 + set g_balance_porto_primary_refire 1.5 + set g_balance_porto_primary_speed 5000 + set g_balance_porto_secondary 1 + set g_balance_porto_secondary_animtime 0.3 + set g_balance_porto_secondary_lifetime 5 + set g_balance_porto_secondary_refire 1.5 + set g_balance_porto_secondary_speed 1000 + set g_balance_porto_switchdelay_drop 0 + set g_balance_porto_switchdelay_raise 0 + set g_balance_porto_weaponreplace "" + set g_balance_porto_weaponstart 0 + set g_balance_porto_weaponstartoverride -1 + set g_balance_porto_weaponthrowable 1 + // }}} + // {{{ #12: Vaporizer + set g_balance_vaporizer_primary_ammo 10 + set g_balance_vaporizer_primary_animtime 0.3 + set g_balance_vaporizer_primary_refire 1 + set g_balance_vaporizer_reload_ammo 0 + set g_balance_vaporizer_reload_time 0 + set g_balance_vaporizer_secondary_ammo 0 + set g_balance_vaporizer_secondary_animtime 0.2 + set g_balance_vaporizer_secondary_damage 25 + set g_balance_vaporizer_secondary_delay 0 + set g_balance_vaporizer_secondary_edgedamage 12.5 + set g_balance_vaporizer_secondary_force 400 + set g_balance_vaporizer_secondary_lifetime 5 + set g_balance_vaporizer_secondary_radius 70 + set g_balance_vaporizer_secondary_refire 0.7 + set g_balance_vaporizer_secondary_shotangle 0 + set g_balance_vaporizer_secondary_speed 6000 + set g_balance_vaporizer_secondary_spread 0 + set g_balance_vaporizer_switchdelay_drop 0 + set g_balance_vaporizer_switchdelay_raise 0 + set g_balance_vaporizer_weaponreplace "" + set g_balance_vaporizer_weaponstart 0 + set g_balance_vaporizer_weaponstartoverride -1 + set g_balance_vaporizer_weaponthrowable 0 + // }}} + // {{{ #13: Grappling Hook + set g_balance_hook_primary_ammo 5 + set g_balance_hook_primary_animtime 0.3 + set g_balance_hook_primary_hooked_ammo 5 + set g_balance_hook_primary_hooked_time_free 2 + set g_balance_hook_primary_hooked_time_max 0 + set g_balance_hook_primary_refire 0.2 + set g_balance_hook_secondary_animtime 0.3 + set g_balance_hook_secondary_damage 25 + set g_balance_hook_secondary_damageforcescale 0 + set g_balance_hook_secondary_duration 1.5 + set g_balance_hook_secondary_edgedamage 5 + set g_balance_hook_secondary_force -2000 + set g_balance_hook_secondary_gravity 5 + set g_balance_hook_secondary_health 15 + set g_balance_hook_secondary_lifetime 5 + set g_balance_hook_secondary_power 3 + set g_balance_hook_secondary_radius 500 + set g_balance_hook_secondary_refire 3 + set g_balance_hook_secondary_speed 0 + set g_balance_hook_switchdelay_drop 0 + set g_balance_hook_switchdelay_raise 0 + set g_balance_hook_weaponreplace "" + set g_balance_hook_weaponstart 0 + set g_balance_hook_weaponstartoverride -1 + set g_balance_hook_weaponthrowable 1 + // }}} + // {{{ #14: Heavy Laser Assault Cannon (MUTATOR WEAPON) + set g_balance_hlac_primary_ammo 1 + set g_balance_hlac_primary_animtime 0.4 + set g_balance_hlac_primary_damage 18 + set g_balance_hlac_primary_edgedamage 9 + set g_balance_hlac_primary_force 90 + set g_balance_hlac_primary_lifetime 5 + set g_balance_hlac_primary_radius 70 + set g_balance_hlac_primary_refire 0.15 + set g_balance_hlac_primary_speed 9000 + set g_balance_hlac_primary_spread_add 0.0045 + set g_balance_hlac_primary_spread_crouchmod 0.25 + set g_balance_hlac_primary_spread_max 0.25 + set g_balance_hlac_primary_spread_min 0.01 + set g_balance_hlac_reload_ammo 0 + set g_balance_hlac_reload_time 2 + set g_balance_hlac_secondary 1 + set g_balance_hlac_secondary_ammo 10 + set g_balance_hlac_secondary_animtime 0.3 + set g_balance_hlac_secondary_damage 15 + set g_balance_hlac_secondary_edgedamage 7.5 + set g_balance_hlac_secondary_force 90 + set g_balance_hlac_secondary_lifetime 5 + set g_balance_hlac_secondary_radius 70 + set g_balance_hlac_secondary_refire 1 + set g_balance_hlac_secondary_shots 6 + set g_balance_hlac_secondary_speed 9000 + set g_balance_hlac_secondary_spread 0.15 + set g_balance_hlac_secondary_spread_crouchmod 0.5 + set g_balance_hlac_switchdelay_drop 0 + set g_balance_hlac_switchdelay_raise 0 + set g_balance_hlac_weaponreplace "" + set g_balance_hlac_weaponstart 0 + set g_balance_hlac_weaponstartoverride -1 + set g_balance_hlac_weaponthrowable 1 + // }}} + // {{{ #15: @!#%'n Tuba + set g_balance_tuba_animtime 0.05 + set g_balance_tuba_attenuation 0.5 + set g_balance_tuba_damage 5 + set g_balance_tuba_edgedamage 0 + set g_balance_tuba_fadetime 0.25 + set g_balance_tuba_force 40 + set g_balance_tuba_pitchstep 6 + set g_balance_tuba_radius 200 + set g_balance_tuba_refire 0.05 + set g_balance_tuba_switchdelay_drop 0 + set g_balance_tuba_switchdelay_raise 0 + set g_balance_tuba_volume 1 + set g_balance_tuba_weaponreplace "" + set g_balance_tuba_weaponstart 0 + set g_balance_tuba_weaponstartoverride -1 + set g_balance_tuba_weaponthrowable 1 + // }}} + // {{{ #16: Rifle (MUTATOR WEAPON) + set g_balance_rifle_bursttime 0 + set g_balance_rifle_primary_ammo 10 + set g_balance_rifle_primary_animtime 0.4 + set g_balance_rifle_primary_bullethail 0 + set g_balance_rifle_primary_burstcost 0 + set g_balance_rifle_primary_damage 80 + set g_balance_rifle_primary_force 100 + set g_balance_rifle_primary_refire 1.2 + set g_balance_rifle_primary_shots 1 + set g_balance_rifle_primary_solidpenetration 62.2 + set g_balance_rifle_primary_spread 0 + set g_balance_rifle_primary_tracer 1 + set g_balance_rifle_reload_ammo 80 + set g_balance_rifle_reload_time 2 + set g_balance_rifle_secondary 1 + set g_balance_rifle_secondary_ammo 10 + set g_balance_rifle_secondary_animtime 0.3 + set g_balance_rifle_secondary_bullethail 0 + set g_balance_rifle_secondary_burstcost 0 + set g_balance_rifle_secondary_damage 20 + set g_balance_rifle_secondary_force 50 + set g_balance_rifle_secondary_refire 0.9 + set g_balance_rifle_secondary_reload 0 + set g_balance_rifle_secondary_shots 4 + set g_balance_rifle_secondary_solidpenetration 15.5 + set g_balance_rifle_secondary_spread 0.04 + set g_balance_rifle_secondary_tracer 0 + set g_balance_rifle_switchdelay_drop 0 + set g_balance_rifle_switchdelay_raise 0 + set g_balance_rifle_weaponreplace "" + set g_balance_rifle_weaponstart 0 + set g_balance_rifle_weaponstartoverride -1 + set g_balance_rifle_weaponthrowable 1 + // }}} + // {{{ #17: Fireball + set g_balance_fireball_primary_animtime 0.4 + set g_balance_fireball_primary_bfgdamage 100 + set g_balance_fireball_primary_bfgforce 0 + set g_balance_fireball_primary_bfgradius 1000 + set g_balance_fireball_primary_damage 200 + set g_balance_fireball_primary_damageforcescale 0 + set g_balance_fireball_primary_edgedamage 50 + set g_balance_fireball_primary_force 600 + set g_balance_fireball_primary_health 0 + set g_balance_fireball_primary_laserburntime 0.5 + set g_balance_fireball_primary_laserdamage 80 + set g_balance_fireball_primary_laseredgedamage 20 + set g_balance_fireball_primary_laserradius 256 + set g_balance_fireball_primary_lifetime 15 + set g_balance_fireball_primary_radius 200 + set g_balance_fireball_primary_refire 2 + set g_balance_fireball_primary_refire2 0 + set g_balance_fireball_primary_speed 1200 + set g_balance_fireball_primary_spread 0 + set g_balance_fireball_secondary_animtime 0.3 + set g_balance_fireball_secondary_damage 40 + set g_balance_fireball_secondary_damageforcescale 4 + set g_balance_fireball_secondary_damagetime 5 + set g_balance_fireball_secondary_laserburntime 0.5 + set g_balance_fireball_secondary_laserdamage 50 + set g_balance_fireball_secondary_laseredgedamage 20 + set g_balance_fireball_secondary_laserradius 110 + set g_balance_fireball_secondary_lifetime 7 + set g_balance_fireball_secondary_refire 1.5 + set g_balance_fireball_secondary_speed 900 + set g_balance_fireball_secondary_speed_up 100 + set g_balance_fireball_secondary_speed_z 0 + set g_balance_fireball_secondary_spread 0 + set g_balance_fireball_switchdelay_drop 0 + set g_balance_fireball_switchdelay_raise 0 + set g_balance_fireball_weaponreplace "" + set g_balance_fireball_weaponstart 0 + set g_balance_fireball_weaponstartoverride -1 + set g_balance_fireball_weaponthrowable 0 + // }}} + // {{{ #18: T.A.G. Seeker (MUTATOR WEAPON) + set g_balance_seeker_flac_ammo 1 + set g_balance_seeker_flac_animtime 0.1 + set g_balance_seeker_flac_damage 15 + set g_balance_seeker_flac_edgedamage 10 + set g_balance_seeker_flac_force 50 + set g_balance_seeker_flac_lifetime 0.1 + set g_balance_seeker_flac_lifetime_rand 0.05 + set g_balance_seeker_flac_radius 100 + set g_balance_seeker_flac_refire 0.1 + set g_balance_seeker_flac_speed 3000 + set g_balance_seeker_flac_speed_up 1000 + set g_balance_seeker_flac_speed_z 0 + set g_balance_seeker_flac_spread 0.4 + set g_balance_seeker_missile_accel 1400 + set g_balance_seeker_missile_ammo 2 + set g_balance_seeker_missile_animtime 0.2 + set g_balance_seeker_missile_count 3 + set g_balance_seeker_missile_damage 30 + set g_balance_seeker_missile_damageforcescale 4 + set g_balance_seeker_missile_decel 1400 + set g_balance_seeker_missile_delay 0.25 + set g_balance_seeker_missile_edgedamage 10 + set g_balance_seeker_missile_force 150 + set g_balance_seeker_missile_health 5 + set g_balance_seeker_missile_lifetime 15 + set g_balance_seeker_missile_proxy 0 + set g_balance_seeker_missile_proxy_delay 0.2 + set g_balance_seeker_missile_proxy_maxrange 45 + set g_balance_seeker_missile_radius 80 + set g_balance_seeker_missile_refire 0.5 + set g_balance_seeker_missile_smart 1 + set g_balance_seeker_missile_smart_mindist 800 + set g_balance_seeker_missile_smart_trace_max 2500 + set g_balance_seeker_missile_smart_trace_min 1000 + set g_balance_seeker_missile_speed 700 + set g_balance_seeker_missile_speed_max 1300 + set g_balance_seeker_missile_speed_up 300 + set g_balance_seeker_missile_speed_z 0 + set g_balance_seeker_missile_spread 0 + set g_balance_seeker_missile_turnrate 0.65 + set g_balance_seeker_reload_ammo 0 + set g_balance_seeker_reload_time 2 + set g_balance_seeker_switchdelay_drop 0 + set g_balance_seeker_switchdelay_raise 0 + set g_balance_seeker_tag_ammo 1 + set g_balance_seeker_tag_animtime 0.2 + set g_balance_seeker_tag_damageforcescale 4 + set g_balance_seeker_tag_health 5 + set g_balance_seeker_tag_lifetime 15 + set g_balance_seeker_tag_refire 0.75 + set g_balance_seeker_tag_speed 5000 + set g_balance_seeker_tag_spread 0 + set g_balance_seeker_tag_tracker_lifetime 10 + set g_balance_seeker_type 0 + set g_balance_seeker_weaponreplace "" + set g_balance_seeker_weaponstart 0 + set g_balance_seeker_weaponstartoverride -1 + set g_balance_seeker_weaponthrowable 1 + // }}} + // {{{ #19: Shockwave (MUTATOR WEAPON) + set g_balance_shockwave_blast_animtime 0.3 + set g_balance_shockwave_blast_damage 20 + set g_balance_shockwave_blast_distance 1000 + set g_balance_shockwave_blast_edgedamage 0 + set g_balance_shockwave_blast_force 200 + set g_balance_shockwave_blast_force_forwardbias 50 + set g_balance_shockwave_blast_force_zscale 2 + set g_balance_shockwave_blast_jump_damage 20 + set g_balance_shockwave_blast_jump_edgedamage 0 + set g_balance_shockwave_blast_jump_force 300 + set g_balance_shockwave_blast_jump_force_velocitybias 0 + set g_balance_shockwave_blast_jump_force_zscale 1.25 + set g_balance_shockwave_blast_jump_multiplier_accuracy 0.5 + set g_balance_shockwave_blast_jump_multiplier_distance 0.5 + set g_balance_shockwave_blast_jump_multiplier_min 0 + set g_balance_shockwave_blast_jump_radius 150 + set g_balance_shockwave_blast_multiplier_accuracy 0.5 + set g_balance_shockwave_blast_multiplier_distance 0.5 + set g_balance_shockwave_blast_multiplier_min 0 + set g_balance_shockwave_blast_refire 0.75 + set g_balance_shockwave_blast_splash_damage 15 + set g_balance_shockwave_blast_splash_edgedamage 0 + set g_balance_shockwave_blast_splash_force 100 + set g_balance_shockwave_blast_splash_force_forwardbias 50 + set g_balance_shockwave_blast_splash_multiplier_accuracy 0.5 + set g_balance_shockwave_blast_splash_multiplier_distance 0.5 + set g_balance_shockwave_blast_splash_multiplier_min 0 + set g_balance_shockwave_blast_splash_radius 70 + set g_balance_shockwave_blast_spread_max 120 + set g_balance_shockwave_blast_spread_min 25 + set g_balance_shockwave_melee_animtime 1.3 + set g_balance_shockwave_melee_damage 80 + set g_balance_shockwave_melee_delay 0.25 + set g_balance_shockwave_melee_force 200 + set g_balance_shockwave_melee_multihit 1 + set g_balance_shockwave_melee_no_doubleslap 1 + set g_balance_shockwave_melee_nonplayerdamage 40 + set g_balance_shockwave_melee_range 120 + set g_balance_shockwave_melee_refire 1.25 + set g_balance_shockwave_melee_swing_side 120 + set g_balance_shockwave_melee_swing_up 30 + set g_balance_shockwave_melee_time 0.15 + set g_balance_shockwave_melee_traces 10 + set g_balance_shockwave_switchdelay_drop 0 + set g_balance_shockwave_switchdelay_raise 0 + set g_balance_shockwave_weaponreplace "" + set g_balance_shockwave_weaponstart 0 + set g_balance_shockwave_weaponstartoverride -1 + set g_balance_shockwave_weaponthrowable 0 + // }}} + // {{{ #20: Arc + set g_balance_arc_beam_ammo 4 + set g_balance_arc_beam_animtime 0.2 + set g_balance_arc_beam_botaimlifetime 0 + set g_balance_arc_beam_botaimspeed 0 + set g_balance_arc_beam_damage 115 + set g_balance_arc_beam_degreespersegment 1 + set g_balance_arc_beam_distancepersegment 0 + set g_balance_arc_beam_falloff_halflifedist 0 + set g_balance_arc_beam_falloff_maxdist 0 + set g_balance_arc_beam_falloff_mindist 0 + set g_balance_arc_beam_force 900 + set g_balance_arc_beam_healing_amax 100 + set g_balance_arc_beam_healing_aps 50 + set g_balance_arc_beam_healing_hmax 150 + set g_balance_arc_beam_healing_hps 50 + set g_balance_arc_cooldown 2.5 + set g_balance_arc_overheat_max 5 + set g_balance_arc_overheat_min 3 + set g_balance_arc_beam_heat 1 + set g_balance_arc_burst_heat 5 + set g_balance_arc_beam_maxangle 10 + set g_balance_arc_beam_nonplayerdamage 80 + set g_balance_arc_beam_range 1000 + set g_balance_arc_beam_refire 0.5 + set g_balance_arc_beam_returnspeed 8 + set g_balance_arc_beam_tightness 0.5 + set g_balance_arc_burst_ammo 15 + set g_balance_arc_burst_damage 250 + set g_balance_arc_burst_healing_aps 100 + set g_balance_arc_burst_healing_hps 100 + set g_balance_arc_switchdelay_drop 0.3 + set g_balance_arc_switchdelay_raise 0.3 + set g_balance_arc_weaponreplace "" + set g_balance_arc_weaponstart 0 + set g_balance_arc_weaponstartoverride -1 + set g_balance_arc_weaponthrowable 1 + // }}} ++// {{{ #21: Heavy Machine Gun ++set g_balance_hmg_ammo 0 ++set g_balance_hmg_damage 0 ++set g_balance_hmg_force 0 ++set g_balance_hmg_refire 0 ++set g_balance_hmg_reload_ammo 120 ++set g_balance_hmg_reload_time 1 ++set g_balance_hmg_solidpenetration 32 ++set g_balance_hmg_spread_add 0.01 ++set g_balance_hmg_spread_max 0.05 ++set g_balance_hmg_spread_min 0.02 ++set g_balance_hmg_switchdelay_drop 0.2 ++set g_balance_hmg_switchdelay_raise 0.2 ++set g_balance_hmg_weaponreplace "" ++set g_balance_hmg_weaponstart 0 ++set g_balance_hmg_weaponstartoverride 0 ++set g_balance_hmg_weaponthrowable 0 ++// }}} ++// {{{ #22: Rocket Propelled Chainsaw ++set g_balance_rpc_ammo 10 ++set g_balance_rpc_animtime 1 ++set g_balance_rpc_damage 150 ++set g_balance_rpc_damage2 500 ++set g_balance_rpc_damageforcescale 2 ++set g_balance_rpc_edgedamage 50 ++set g_balance_rpc_force 400 ++set g_balance_rpc_health 25 ++set g_balance_rpc_lifetime 30 ++set g_balance_rpc_radius 300 ++set g_balance_rpc_refire 1 ++set g_balance_rpc_reload_ammo 10 ++set g_balance_rpc_reload_time 1 ++set g_balance_rpc_speed 1250 ++set g_balance_rpc_speedaccel 5000 ++set g_balance_rpc_switchdelay_drop 0.2 ++set g_balance_rpc_switchdelay_raise 0.2 ++set g_balance_rpc_weaponreplace "" ++set g_balance_rpc_weaponstart 0 ++set g_balance_rpc_weaponstartoverride 0 ++set g_balance_rpc_weaponthrowable 0 ++// }}} diff --cc bal-wep-xonotic.cfg index 000000000,320ce2280..e061e6920 mode 000000,100644..100644 --- a/bal-wep-xonotic.cfg +++ b/bal-wep-xonotic.cfg @@@ -1,0 -1,763 +1,804 @@@ + // {{{ #1: Blaster + set g_balance_blaster_primary_animtime 0.2 + set g_balance_blaster_primary_damage 25 + set g_balance_blaster_primary_delay 0 + set g_balance_blaster_primary_edgedamage 12.5 + set g_balance_blaster_primary_force 300 + set g_balance_blaster_primary_force_zscale 1.25 + set g_balance_blaster_primary_lifetime 5 + set g_balance_blaster_primary_radius 60 + set g_balance_blaster_primary_refire 0.7 + set g_balance_blaster_primary_shotangle 0 + set g_balance_blaster_primary_speed 6000 + set g_balance_blaster_primary_spread 0 + set g_balance_blaster_secondary 0 + set g_balance_blaster_secondary_animtime 0.2 + set g_balance_blaster_secondary_damage 25 + set g_balance_blaster_secondary_delay 0 + set g_balance_blaster_secondary_edgedamage 12.5 + set g_balance_blaster_secondary_force 300 + set g_balance_blaster_secondary_force_zscale 1.2 + set g_balance_blaster_secondary_lifetime 5 + set g_balance_blaster_secondary_radius 70 + set g_balance_blaster_secondary_refire 0.7 + set g_balance_blaster_secondary_shotangle 0 + set g_balance_blaster_secondary_speed 6000 + set g_balance_blaster_secondary_spread 0 + set g_balance_blaster_switchdelay_drop 0.2 + set g_balance_blaster_switchdelay_raise 0.2 + set g_balance_blaster_weaponreplace "" + set g_balance_blaster_weaponstart 1 + set g_balance_blaster_weaponstartoverride -1 + set g_balance_blaster_weaponthrowable 0 + // }}} + // {{{ #2: Shotgun + set g_balance_shotgun_primary_ammo 1 + set g_balance_shotgun_primary_animtime 0.2 + set g_balance_shotgun_primary_bullets 14 + set g_balance_shotgun_primary_damage 3.5 + set g_balance_shotgun_primary_force 15 + set g_balance_shotgun_primary_refire 0.75 + set g_balance_shotgun_primary_solidpenetration 3.8 + set g_balance_shotgun_primary_spread 0.11 + set g_balance_shotgun_reload_ammo 0 + set g_balance_shotgun_reload_time 2 + set g_balance_shotgun_secondary 1 + set g_balance_shotgun_secondary_animtime 1 + set g_balance_shotgun_secondary_damage 70 + set g_balance_shotgun_secondary_force 200 + set g_balance_shotgun_secondary_melee_delay 0.25 + set g_balance_shotgun_secondary_melee_multihit 1 + set g_balance_shotgun_secondary_melee_no_doubleslap 1 + set g_balance_shotgun_secondary_melee_nonplayerdamage 40 + set g_balance_shotgun_secondary_melee_range 120 + set g_balance_shotgun_secondary_melee_swing_side 120 + set g_balance_shotgun_secondary_melee_swing_up 30 + set g_balance_shotgun_secondary_melee_time 0.15 + set g_balance_shotgun_secondary_melee_traces 10 + set g_balance_shotgun_secondary_refire 1.25 + set g_balance_shotgun_secondary_alt_animtime 0.2 + set g_balance_shotgun_secondary_alt_refire 1.2 + set g_balance_shotgun_switchdelay_drop 0.2 + set g_balance_shotgun_switchdelay_raise 0.2 + set g_balance_shotgun_weaponreplace "" + set g_balance_shotgun_weaponstart 1 + set g_balance_shotgun_weaponstartoverride -1 + set g_balance_shotgun_weaponthrowable 1 + // }}} + // {{{ #3: Machine Gun + set g_balance_machinegun_burst 3 + set g_balance_machinegun_burst_ammo 3 + set g_balance_machinegun_burst_animtime 0.3 + set g_balance_machinegun_burst_refire 0.06 + set g_balance_machinegun_burst_refire2 0.45 + set g_balance_machinegun_burst_speed 0 + set g_balance_machinegun_first 1 + set g_balance_machinegun_first_ammo 1 + set g_balance_machinegun_first_damage 14 + set g_balance_machinegun_first_force 5 + set g_balance_machinegun_first_refire 0.125 + set g_balance_machinegun_first_spread 0.03 + set g_balance_machinegun_mode 1 + set g_balance_machinegun_reload_ammo 60 + set g_balance_machinegun_reload_time 2 + set g_balance_machinegun_solidpenetration 13.1 + set g_balance_machinegun_spread_add 0.012 + set g_balance_machinegun_spread_max 0.05 + set g_balance_machinegun_spread_min 0.02 + set g_balance_machinegun_sustained_ammo 1 + set g_balance_machinegun_sustained_damage 10 + set g_balance_machinegun_sustained_force 5 + set g_balance_machinegun_sustained_refire 0.1 + set g_balance_machinegun_sustained_spread 0.03 + set g_balance_machinegun_switchdelay_drop 0.2 + set g_balance_machinegun_switchdelay_raise 0.2 + set g_balance_machinegun_weaponreplace "" + set g_balance_machinegun_weaponstart 0 + set g_balance_machinegun_weaponstartoverride -1 + set g_balance_machinegun_weaponthrowable 1 + // }}} + // {{{ #4: Mortar + set g_balance_mortar_bouncefactor 0.5 + set g_balance_mortar_bouncestop 0.075 + set g_balance_mortar_primary_ammo 2 + set g_balance_mortar_primary_animtime 0.3 + set g_balance_mortar_primary_damage 55 + set g_balance_mortar_primary_damageforcescale 0 + set g_balance_mortar_primary_edgedamage 25 + set g_balance_mortar_primary_force 250 + set g_balance_mortar_primary_health 15 + set g_balance_mortar_primary_lifetime 5 + set g_balance_mortar_primary_lifetime_stick 0 + set g_balance_mortar_primary_radius 120 + set g_balance_mortar_primary_refire 0.8 + set g_balance_mortar_primary_remote_minbouncecnt 0 + set g_balance_mortar_primary_speed 1900 + set g_balance_mortar_primary_speed_up 225 + set g_balance_mortar_primary_speed_z 0 + set g_balance_mortar_primary_spread 0 + set g_balance_mortar_primary_type 0 + set g_balance_mortar_reload_ammo 0 + set g_balance_mortar_reload_time 2 + set g_balance_mortar_secondary_ammo 2 + set g_balance_mortar_secondary_animtime 0.3 + set g_balance_mortar_secondary_damage 55 + set g_balance_mortar_secondary_damageforcescale 4 + set g_balance_mortar_secondary_edgedamage 30 + set g_balance_mortar_secondary_force 250 + set g_balance_mortar_secondary_health 30 + set g_balance_mortar_secondary_lifetime 5 + set g_balance_mortar_secondary_lifetime_bounce 0.5 + set g_balance_mortar_secondary_lifetime_stick 0 + set g_balance_mortar_secondary_radius 120 + set g_balance_mortar_secondary_refire 0.7 + set g_balance_mortar_secondary_remote_detonateprimary 0 + set g_balance_mortar_secondary_speed 1400 + set g_balance_mortar_secondary_speed_up 150 + set g_balance_mortar_secondary_speed_z 0 + set g_balance_mortar_secondary_spread 0 + set g_balance_mortar_secondary_type 1 + set g_balance_mortar_switchdelay_drop 0.2 + set g_balance_mortar_switchdelay_raise 0.2 + set g_balance_mortar_weaponreplace "" + set g_balance_mortar_weaponstart 0 + set g_balance_mortar_weaponstartoverride -1 + set g_balance_mortar_weaponthrowable 1 + // }}} + // {{{ #5: Mine Layer (MUTATOR WEAPON) + set g_balance_minelayer_ammo 4 + set g_balance_minelayer_animtime 0.4 + set g_balance_minelayer_damage 40 + set g_balance_minelayer_damageforcescale 0 + set g_balance_minelayer_detonatedelay -1 + set g_balance_minelayer_edgedamage 20 + set g_balance_minelayer_force 250 + set g_balance_minelayer_health 15 + set g_balance_minelayer_lifetime 10 + set g_balance_minelayer_lifetime_countdown 0.5 + set g_balance_minelayer_limit 3 + set g_balance_minelayer_protection 0 + set g_balance_minelayer_proximityradius 150 + set g_balance_minelayer_radius 175 + set g_balance_minelayer_refire 1.5 + set g_balance_minelayer_reload_ammo 0 + set g_balance_minelayer_reload_time 2 + set g_balance_minelayer_remote_damage 45 + set g_balance_minelayer_remote_edgedamage 40 + set g_balance_minelayer_remote_force 300 + set g_balance_minelayer_remote_radius 200 + set g_balance_minelayer_speed 1000 + set g_balance_minelayer_switchdelay_drop 0.2 + set g_balance_minelayer_switchdelay_raise 0.2 + set g_balance_minelayer_time 0.5 + set g_balance_minelayer_weaponreplace "" + set g_balance_minelayer_weaponstart 0 + set g_balance_minelayer_weaponstartoverride -1 + set g_balance_minelayer_weaponthrowable 1 + // }}} + // {{{ #6: Electro + set g_balance_electro_combo_comboradius 300 + set g_balance_electro_combo_comboradius_thruwall 200 + set g_balance_electro_combo_damage 50 + set g_balance_electro_combo_edgedamage 25 + set g_balance_electro_combo_force 120 + set g_balance_electro_combo_radius 150 + set g_balance_electro_combo_safeammocheck 1 + set g_balance_electro_combo_speed 2000 + set g_balance_electro_primary_ammo 4 + set g_balance_electro_primary_animtime 0.3 + set g_balance_electro_primary_comboradius 300 + set g_balance_electro_primary_damage 40 + set g_balance_electro_primary_edgedamage 20 + set g_balance_electro_primary_force 200 + set g_balance_electro_primary_lifetime 5 + set g_balance_electro_primary_midaircombo_explode 1 + set g_balance_electro_primary_midaircombo_interval 0.1 + set g_balance_electro_primary_midaircombo_radius 150 + set g_balance_electro_primary_radius 100 + set g_balance_electro_primary_refire 0.6 + set g_balance_electro_primary_speed 2500 + set g_balance_electro_primary_spread 0 + set g_balance_electro_reload_ammo 0 + set g_balance_electro_reload_time 2 + set g_balance_electro_secondary_ammo 2 + set g_balance_electro_secondary_animtime 0.2 + set g_balance_electro_secondary_bouncefactor 0.3 + set g_balance_electro_secondary_bouncestop 0.05 + set g_balance_electro_secondary_count 3 + set g_balance_electro_secondary_damage 30 + set g_balance_electro_secondary_damagedbycontents 1 + set g_balance_electro_secondary_damageforcescale 4 + set g_balance_electro_secondary_edgedamage 15 + set g_balance_electro_secondary_force 50 + set g_balance_electro_secondary_health 5 + set g_balance_electro_secondary_lifetime 4 + set g_balance_electro_secondary_radius 150 + set g_balance_electro_secondary_refire 0.2 + set g_balance_electro_secondary_refire2 1.6 + set g_balance_electro_secondary_speed 1000 + set g_balance_electro_secondary_speed_up 200 + set g_balance_electro_secondary_speed_z 0 + set g_balance_electro_secondary_spread 0.04 + set g_balance_electro_secondary_touchexplode 0 + set g_balance_electro_switchdelay_drop 0.2 + set g_balance_electro_switchdelay_raise 0.2 + set g_balance_electro_weaponreplace "" + set g_balance_electro_weaponstart 0 + set g_balance_electro_weaponstartoverride -1 + set g_balance_electro_weaponthrowable 1 + // }}} + // {{{ #7: Crylink + set g_balance_crylink_primary_ammo 3 + set g_balance_crylink_primary_animtime 0.3 + set g_balance_crylink_primary_bouncedamagefactor 0.5 + set g_balance_crylink_primary_bounces 1 + set g_balance_crylink_primary_damage 12 + set g_balance_crylink_primary_edgedamage 6 + set g_balance_crylink_primary_force -50 + set g_balance_crylink_primary_joindelay 0.1 + set g_balance_crylink_primary_joinexplode 1 + set g_balance_crylink_primary_joinexplode_damage 0 + set g_balance_crylink_primary_joinexplode_edgedamage 0 + set g_balance_crylink_primary_joinexplode_force 0 + set g_balance_crylink_primary_joinexplode_radius 0 + set g_balance_crylink_primary_joinspread 0.2 + set g_balance_crylink_primary_linkexplode 1 + set g_balance_crylink_primary_middle_fadetime 5 + set g_balance_crylink_primary_middle_lifetime 5 + set g_balance_crylink_primary_other_fadetime 5 + set g_balance_crylink_primary_other_lifetime 5 + set g_balance_crylink_primary_radius 80 + set g_balance_crylink_primary_refire 0.7 + set g_balance_crylink_primary_shots 6 + set g_balance_crylink_primary_speed 2000 + set g_balance_crylink_primary_spread 0.08 + set g_balance_crylink_reload_ammo 0 + set g_balance_crylink_reload_time 2 + set g_balance_crylink_secondary 1 + set g_balance_crylink_secondary_ammo 2 + set g_balance_crylink_secondary_animtime 0.2 + set g_balance_crylink_secondary_bouncedamagefactor 0.5 + set g_balance_crylink_secondary_bounces 0 + set g_balance_crylink_secondary_damage 10 + set g_balance_crylink_secondary_edgedamage 5 + set g_balance_crylink_secondary_force -250 + set g_balance_crylink_secondary_joindelay 0 + set g_balance_crylink_secondary_joinexplode 0 + set g_balance_crylink_secondary_joinexplode_damage 0 + set g_balance_crylink_secondary_joinexplode_edgedamage 0 + set g_balance_crylink_secondary_joinexplode_force 0 + set g_balance_crylink_secondary_joinexplode_radius 0 + set g_balance_crylink_secondary_joinspread 0 + set g_balance_crylink_secondary_linkexplode 1 + set g_balance_crylink_secondary_middle_fadetime 5 + set g_balance_crylink_secondary_middle_lifetime 5 + set g_balance_crylink_secondary_other_fadetime 5 + set g_balance_crylink_secondary_other_lifetime 5 + set g_balance_crylink_secondary_radius 100 + set g_balance_crylink_secondary_refire 0.7 + set g_balance_crylink_secondary_shots 5 + set g_balance_crylink_secondary_speed 3000 + set g_balance_crylink_secondary_spread 0.01 + set g_balance_crylink_secondary_spreadtype 1 + set g_balance_crylink_switchdelay_drop 0.2 + set g_balance_crylink_switchdelay_raise 0.2 + set g_balance_crylink_weaponreplace "" + set g_balance_crylink_weaponstart 0 + set g_balance_crylink_weaponstartoverride -1 + set g_balance_crylink_weaponthrowable 1 + // }}} + // {{{ #8: Vortex + set g_balance_vortex_charge 1 + set g_balance_vortex_charge_animlimit 0.5 + set g_balance_vortex_charge_limit 1 + set g_balance_vortex_charge_maxspeed 800 + set g_balance_vortex_charge_mindmg 40 + set g_balance_vortex_charge_minspeed 400 + set g_balance_vortex_charge_rate 0.6 + set g_balance_vortex_charge_rot_pause 0 + set g_balance_vortex_charge_rot_rate 0 + set g_balance_vortex_charge_shot_multiplier 0 + set g_balance_vortex_charge_start 0.5 + set g_balance_vortex_charge_velocity_rate 0 + set g_balance_vortex_primary_ammo 6 + set g_balance_vortex_primary_animtime 0.4 + set g_balance_vortex_primary_damage 80 + set g_balance_vortex_primary_damagefalloff_forcehalflife 0 + set g_balance_vortex_primary_damagefalloff_halflife 0 + set g_balance_vortex_primary_damagefalloff_maxdist 0 + set g_balance_vortex_primary_damagefalloff_mindist 0 + set g_balance_vortex_primary_force 400 + set g_balance_vortex_primary_refire 1.5 + set g_balance_vortex_reload_ammo 0 + set g_balance_vortex_reload_time 2 + set g_balance_vortex_secondary 0 + set g_balance_vortex_secondary_ammo 2 + set g_balance_vortex_secondary_animtime 0 + set g_balance_vortex_secondary_chargepool 0 + set g_balance_vortex_secondary_chargepool_pause_regen 1 + set g_balance_vortex_secondary_chargepool_regen 0.15 + set g_balance_vortex_secondary_damage 0 + set g_balance_vortex_secondary_damagefalloff_forcehalflife 0 + set g_balance_vortex_secondary_damagefalloff_halflife 0 + set g_balance_vortex_secondary_damagefalloff_maxdist 0 + set g_balance_vortex_secondary_damagefalloff_mindist 0 + set g_balance_vortex_secondary_force 0 + set g_balance_vortex_secondary_refire 0 + set g_balance_vortex_switchdelay_drop 0.25 + set g_balance_vortex_switchdelay_raise 0.25 + set g_balance_vortex_weaponreplace "" + set g_balance_vortex_weaponstart 0 + set g_balance_vortex_weaponstartoverride -1 + set g_balance_vortex_weaponthrowable 1 + // }}} + // {{{ #9: Hagar + set g_balance_hagar_primary_ammo 1 + set g_balance_hagar_primary_damage 25 + set g_balance_hagar_primary_damageforcescale 0 + set g_balance_hagar_primary_edgedamage 12.5 + set g_balance_hagar_primary_force 100 + set g_balance_hagar_primary_health 15 + set g_balance_hagar_primary_lifetime 5 + set g_balance_hagar_primary_radius 65 + set g_balance_hagar_primary_refire 0.16667 + set g_balance_hagar_primary_speed 2200 + set g_balance_hagar_primary_spread 0.03 + set g_balance_hagar_reload_ammo 0 + set g_balance_hagar_reload_time 2 + set g_balance_hagar_secondary 1 + set g_balance_hagar_secondary_ammo 1 + set g_balance_hagar_secondary_damage 35 + set g_balance_hagar_secondary_damageforcescale 0 + set g_balance_hagar_secondary_edgedamage 17.5 + set g_balance_hagar_secondary_force 75 + set g_balance_hagar_secondary_health 15 + set g_balance_hagar_secondary_lifetime_min 10 + set g_balance_hagar_secondary_lifetime_rand 0 + set g_balance_hagar_secondary_load 1 + set g_balance_hagar_secondary_load_abort 1 + set g_balance_hagar_secondary_load_animtime 0.2 + set g_balance_hagar_secondary_load_hold 4 + set g_balance_hagar_secondary_load_linkexplode 0 + set g_balance_hagar_secondary_load_max 4 + set g_balance_hagar_secondary_load_releasedeath 0 + set g_balance_hagar_secondary_load_speed 0.5 + set g_balance_hagar_secondary_load_spread 0.075 + set g_balance_hagar_secondary_load_spread_bias 0.5 + set g_balance_hagar_secondary_radius 80 + set g_balance_hagar_secondary_refire 0.5 + set g_balance_hagar_secondary_speed 2000 + set g_balance_hagar_secondary_spread 0.05 + set g_balance_hagar_switchdelay_drop 0.2 + set g_balance_hagar_switchdelay_raise 0.2 + set g_balance_hagar_weaponreplace "" + set g_balance_hagar_weaponstart 0 + set g_balance_hagar_weaponstartoverride -1 + set g_balance_hagar_weaponthrowable 1 + // }}} + // {{{ #10: Devastator + set g_balance_devastator_ammo 4 + set g_balance_devastator_animtime 0.4 + set g_balance_devastator_damage 80 + set g_balance_devastator_damageforcescale 1 + set g_balance_devastator_detonatedelay 0.02 + set g_balance_devastator_edgedamage 40 + set g_balance_devastator_force 400 + set g_balance_devastator_guidedelay 0.2 + set g_balance_devastator_guidegoal 512 + set g_balance_devastator_guiderate 90 + set g_balance_devastator_guideratedelay 0.01 + set g_balance_devastator_guidestop 0 + set g_balance_devastator_health 30 + set g_balance_devastator_lifetime 10 + set g_balance_devastator_radius 110 + set g_balance_devastator_refire 1.1 + set g_balance_devastator_reload_ammo 0 + set g_balance_devastator_reload_time 2 + set g_balance_devastator_remote_damage 70 + set g_balance_devastator_remote_edgedamage 35 + set g_balance_devastator_remote_force 300 + set g_balance_devastator_remote_jump_damage 70 + set g_balance_devastator_remote_jump_radius 0 + set g_balance_devastator_remote_jump_velocity_z_add 400 + set g_balance_devastator_remote_jump_velocity_z_max 1500 + set g_balance_devastator_remote_jump_velocity_z_min 400 + set g_balance_devastator_remote_radius 110 + set g_balance_devastator_speed 1300 + set g_balance_devastator_speedaccel 1300 + set g_balance_devastator_speedstart 1000 + set g_balance_devastator_switchdelay_drop 0.2 + set g_balance_devastator_switchdelay_raise 0.2 + set g_balance_devastator_weaponreplace "" + set g_balance_devastator_weaponstart 0 + set g_balance_devastator_weaponstartoverride -1 + set g_balance_devastator_weaponthrowable 1 + // }}} + // {{{ #11: Port-O-Launch + set g_balance_porto_primary_animtime 0.3 + set g_balance_porto_primary_lifetime 5 + set g_balance_porto_primary_refire 1.5 + set g_balance_porto_primary_speed 1000 + set g_balance_porto_secondary 1 + set g_balance_porto_secondary_animtime 0.3 + set g_balance_porto_secondary_lifetime 5 + set g_balance_porto_secondary_refire 1.5 + set g_balance_porto_secondary_speed 1000 + set g_balance_porto_switchdelay_drop 0.2 + set g_balance_porto_switchdelay_raise 0.2 + set g_balance_porto_weaponreplace "" + set g_balance_porto_weaponstart 0 + set g_balance_porto_weaponstartoverride -1 + set g_balance_porto_weaponthrowable 1 + // }}} + // {{{ #12: Vaporizer + set g_balance_vaporizer_primary_ammo 10 + set g_balance_vaporizer_primary_animtime 0.3 + set g_balance_vaporizer_primary_refire 1 + set g_balance_vaporizer_reload_ammo 0 + set g_balance_vaporizer_reload_time 0 + set g_balance_vaporizer_secondary_ammo 0 + set g_balance_vaporizer_secondary_animtime 0.2 + set g_balance_vaporizer_secondary_damage 25 + set g_balance_vaporizer_secondary_delay 0 + set g_balance_vaporizer_secondary_edgedamage 12.5 + set g_balance_vaporizer_secondary_force 400 + set g_balance_vaporizer_secondary_lifetime 5 + set g_balance_vaporizer_secondary_radius 70 + set g_balance_vaporizer_secondary_refire 0.7 + set g_balance_vaporizer_secondary_shotangle 0 + set g_balance_vaporizer_secondary_speed 6000 + set g_balance_vaporizer_secondary_spread 0 + set g_balance_vaporizer_switchdelay_drop 0.2 + set g_balance_vaporizer_switchdelay_raise 0.2 + set g_balance_vaporizer_weaponreplace "" + set g_balance_vaporizer_weaponstart 0 + set g_balance_vaporizer_weaponstartoverride -1 + set g_balance_vaporizer_weaponthrowable 0 + // }}} + // {{{ #13: Grappling Hook + set g_balance_hook_primary_ammo 5 + set g_balance_hook_primary_animtime 0.3 + set g_balance_hook_primary_hooked_ammo 5 + set g_balance_hook_primary_hooked_time_free 2 + set g_balance_hook_primary_hooked_time_max 0 + set g_balance_hook_primary_refire 0.2 + set g_balance_hook_secondary_animtime 0.3 + set g_balance_hook_secondary_damage 25 + set g_balance_hook_secondary_damageforcescale 0 + set g_balance_hook_secondary_duration 1.5 + set g_balance_hook_secondary_edgedamage 5 + set g_balance_hook_secondary_force -2000 + set g_balance_hook_secondary_gravity 5 + set g_balance_hook_secondary_health 15 + set g_balance_hook_secondary_lifetime 5 + set g_balance_hook_secondary_power 3 + set g_balance_hook_secondary_radius 500 + set g_balance_hook_secondary_refire 3 + set g_balance_hook_secondary_speed 0 + set g_balance_hook_switchdelay_drop 0.2 + set g_balance_hook_switchdelay_raise 0.2 + set g_balance_hook_weaponreplace "" + set g_balance_hook_weaponstart 0 + set g_balance_hook_weaponstartoverride -1 + set g_balance_hook_weaponthrowable 1 + // }}} + // {{{ #14: Heavy Laser Assault Cannon (MUTATOR WEAPON) + set g_balance_hlac_primary_ammo 1 + set g_balance_hlac_primary_animtime 0.4 + set g_balance_hlac_primary_damage 18 + set g_balance_hlac_primary_edgedamage 9 + set g_balance_hlac_primary_force 90 + set g_balance_hlac_primary_lifetime 5 + set g_balance_hlac_primary_radius 70 + set g_balance_hlac_primary_refire 0.15 + set g_balance_hlac_primary_speed 9000 + set g_balance_hlac_primary_spread_add 0.0045 + set g_balance_hlac_primary_spread_crouchmod 0.25 + set g_balance_hlac_primary_spread_max 0.25 + set g_balance_hlac_primary_spread_min 0.01 + set g_balance_hlac_reload_ammo 0 + set g_balance_hlac_reload_time 2 + set g_balance_hlac_secondary 1 + set g_balance_hlac_secondary_ammo 10 + set g_balance_hlac_secondary_animtime 0.3 + set g_balance_hlac_secondary_damage 15 + set g_balance_hlac_secondary_edgedamage 7.5 + set g_balance_hlac_secondary_force 90 + set g_balance_hlac_secondary_lifetime 5 + set g_balance_hlac_secondary_radius 70 + set g_balance_hlac_secondary_refire 1 + set g_balance_hlac_secondary_shots 6 + set g_balance_hlac_secondary_speed 9000 + set g_balance_hlac_secondary_spread 0.15 + set g_balance_hlac_secondary_spread_crouchmod 0.5 + set g_balance_hlac_switchdelay_drop 0.2 + set g_balance_hlac_switchdelay_raise 0.2 + set g_balance_hlac_weaponreplace "" + set g_balance_hlac_weaponstart 0 + set g_balance_hlac_weaponstartoverride -1 + set g_balance_hlac_weaponthrowable 1 + // }}} + // {{{ #15: @!#%'n Tuba + set g_balance_tuba_animtime 0.05 + set g_balance_tuba_attenuation 0.5 + set g_balance_tuba_damage 5 + set g_balance_tuba_edgedamage 0 + set g_balance_tuba_fadetime 0.25 + set g_balance_tuba_force 40 + set g_balance_tuba_pitchstep 6 + set g_balance_tuba_radius 200 + set g_balance_tuba_refire 0.05 + set g_balance_tuba_switchdelay_drop 0.2 + set g_balance_tuba_switchdelay_raise 0.2 + set g_balance_tuba_volume 1 + set g_balance_tuba_weaponreplace "" + set g_balance_tuba_weaponstart 0 + set g_balance_tuba_weaponstartoverride -1 + set g_balance_tuba_weaponthrowable 1 + // }}} + // {{{ #16: Rifle (MUTATOR WEAPON) + set g_balance_rifle_bursttime 0 + set g_balance_rifle_primary_ammo 10 + set g_balance_rifle_primary_animtime 0.4 + set g_balance_rifle_primary_bullethail 0 + set g_balance_rifle_primary_burstcost 0 + set g_balance_rifle_primary_damage 80 + set g_balance_rifle_primary_force 100 + set g_balance_rifle_primary_refire 1.2 + set g_balance_rifle_primary_shots 1 + set g_balance_rifle_primary_solidpenetration 62.2 + set g_balance_rifle_primary_spread 0 + set g_balance_rifle_primary_tracer 1 + set g_balance_rifle_reload_ammo 80 + set g_balance_rifle_reload_time 2 + set g_balance_rifle_secondary 1 + set g_balance_rifle_secondary_ammo 10 + set g_balance_rifle_secondary_animtime 0.3 + set g_balance_rifle_secondary_bullethail 0 + set g_balance_rifle_secondary_burstcost 0 + set g_balance_rifle_secondary_damage 20 + set g_balance_rifle_secondary_force 50 + set g_balance_rifle_secondary_refire 0.9 + set g_balance_rifle_secondary_reload 0 + set g_balance_rifle_secondary_shots 4 + set g_balance_rifle_secondary_solidpenetration 15.5 + set g_balance_rifle_secondary_spread 0.04 + set g_balance_rifle_secondary_tracer 0 + set g_balance_rifle_switchdelay_drop 0.2 + set g_balance_rifle_switchdelay_raise 0.2 + set g_balance_rifle_weaponreplace "" + set g_balance_rifle_weaponstart 0 + set g_balance_rifle_weaponstartoverride -1 + set g_balance_rifle_weaponthrowable 1 + // }}} + // {{{ #17: Fireball + set g_balance_fireball_primary_animtime 0.4 + set g_balance_fireball_primary_bfgdamage 100 + set g_balance_fireball_primary_bfgforce 0 + set g_balance_fireball_primary_bfgradius 1000 + set g_balance_fireball_primary_damage 200 + set g_balance_fireball_primary_damageforcescale 0 + set g_balance_fireball_primary_edgedamage 50 + set g_balance_fireball_primary_force 600 + set g_balance_fireball_primary_health 0 + set g_balance_fireball_primary_laserburntime 0.5 + set g_balance_fireball_primary_laserdamage 80 + set g_balance_fireball_primary_laseredgedamage 20 + set g_balance_fireball_primary_laserradius 256 + set g_balance_fireball_primary_lifetime 15 + set g_balance_fireball_primary_radius 200 + set g_balance_fireball_primary_refire 2 + set g_balance_fireball_primary_refire2 0 + set g_balance_fireball_primary_speed 1200 + set g_balance_fireball_primary_spread 0 + set g_balance_fireball_secondary_animtime 0.3 + set g_balance_fireball_secondary_damage 40 + set g_balance_fireball_secondary_damageforcescale 4 + set g_balance_fireball_secondary_damagetime 5 + set g_balance_fireball_secondary_laserburntime 0.5 + set g_balance_fireball_secondary_laserdamage 50 + set g_balance_fireball_secondary_laseredgedamage 20 + set g_balance_fireball_secondary_laserradius 110 + set g_balance_fireball_secondary_lifetime 7 + set g_balance_fireball_secondary_refire 1.5 + set g_balance_fireball_secondary_speed 900 + set g_balance_fireball_secondary_speed_up 100 + set g_balance_fireball_secondary_speed_z 0 + set g_balance_fireball_secondary_spread 0 + set g_balance_fireball_switchdelay_drop 0.2 + set g_balance_fireball_switchdelay_raise 0.2 + set g_balance_fireball_weaponreplace "" + set g_balance_fireball_weaponstart 0 + set g_balance_fireball_weaponstartoverride -1 + set g_balance_fireball_weaponthrowable 0 + // }}} + // {{{ #18: T.A.G. Seeker (MUTATOR WEAPON) + set g_balance_seeker_flac_ammo 1 + set g_balance_seeker_flac_animtime 0.1 + set g_balance_seeker_flac_damage 15 + set g_balance_seeker_flac_edgedamage 10 + set g_balance_seeker_flac_force 50 + set g_balance_seeker_flac_lifetime 0.1 + set g_balance_seeker_flac_lifetime_rand 0.05 + set g_balance_seeker_flac_radius 100 + set g_balance_seeker_flac_refire 0.1 + set g_balance_seeker_flac_speed 3000 + set g_balance_seeker_flac_speed_up 1000 + set g_balance_seeker_flac_speed_z 0 + set g_balance_seeker_flac_spread 0.4 + set g_balance_seeker_missile_accel 1400 + set g_balance_seeker_missile_ammo 2 + set g_balance_seeker_missile_animtime 0.2 + set g_balance_seeker_missile_count 3 + set g_balance_seeker_missile_damage 30 + set g_balance_seeker_missile_damageforcescale 4 + set g_balance_seeker_missile_decel 1400 + set g_balance_seeker_missile_delay 0.25 + set g_balance_seeker_missile_edgedamage 10 + set g_balance_seeker_missile_force 150 + set g_balance_seeker_missile_health 5 + set g_balance_seeker_missile_lifetime 15 + set g_balance_seeker_missile_proxy 0 + set g_balance_seeker_missile_proxy_delay 0.2 + set g_balance_seeker_missile_proxy_maxrange 45 + set g_balance_seeker_missile_radius 80 + set g_balance_seeker_missile_refire 0.5 + set g_balance_seeker_missile_smart 1 + set g_balance_seeker_missile_smart_mindist 800 + set g_balance_seeker_missile_smart_trace_max 2500 + set g_balance_seeker_missile_smart_trace_min 1000 + set g_balance_seeker_missile_speed 700 + set g_balance_seeker_missile_speed_max 1300 + set g_balance_seeker_missile_speed_up 300 + set g_balance_seeker_missile_speed_z 0 + set g_balance_seeker_missile_spread 0 + set g_balance_seeker_missile_turnrate 0.65 + set g_balance_seeker_reload_ammo 0 + set g_balance_seeker_reload_time 2 + set g_balance_seeker_switchdelay_drop 0.2 + set g_balance_seeker_switchdelay_raise 0.2 + set g_balance_seeker_tag_ammo 1 + set g_balance_seeker_tag_animtime 0.2 + set g_balance_seeker_tag_damageforcescale 4 + set g_balance_seeker_tag_health 5 + set g_balance_seeker_tag_lifetime 15 + set g_balance_seeker_tag_refire 0.75 + set g_balance_seeker_tag_speed 5000 + set g_balance_seeker_tag_spread 0 + set g_balance_seeker_tag_tracker_lifetime 10 + set g_balance_seeker_type 0 + set g_balance_seeker_weaponreplace "" + set g_balance_seeker_weaponstart 0 + set g_balance_seeker_weaponstartoverride -1 + set g_balance_seeker_weaponthrowable 1 + // }}} + // {{{ #19: Shockwave (MUTATOR WEAPON) + set g_balance_shockwave_blast_animtime 0.3 + set g_balance_shockwave_blast_damage 20 + set g_balance_shockwave_blast_distance 1000 + set g_balance_shockwave_blast_edgedamage 0 + set g_balance_shockwave_blast_force 200 + set g_balance_shockwave_blast_force_forwardbias 50 + set g_balance_shockwave_blast_force_zscale 2 + set g_balance_shockwave_blast_jump_damage 20 + set g_balance_shockwave_blast_jump_edgedamage 0 + set g_balance_shockwave_blast_jump_force 300 + set g_balance_shockwave_blast_jump_force_velocitybias 0 + set g_balance_shockwave_blast_jump_force_zscale 1.25 + set g_balance_shockwave_blast_jump_multiplier_accuracy 0.5 + set g_balance_shockwave_blast_jump_multiplier_distance 0.5 + set g_balance_shockwave_blast_jump_multiplier_min 0 + set g_balance_shockwave_blast_jump_radius 150 + set g_balance_shockwave_blast_multiplier_accuracy 0.5 + set g_balance_shockwave_blast_multiplier_distance 0.5 + set g_balance_shockwave_blast_multiplier_min 0 + set g_balance_shockwave_blast_refire 0.75 + set g_balance_shockwave_blast_splash_damage 15 + set g_balance_shockwave_blast_splash_edgedamage 0 + set g_balance_shockwave_blast_splash_force 100 + set g_balance_shockwave_blast_splash_force_forwardbias 50 + set g_balance_shockwave_blast_splash_multiplier_accuracy 0.5 + set g_balance_shockwave_blast_splash_multiplier_distance 0.5 + set g_balance_shockwave_blast_splash_multiplier_min 0 + set g_balance_shockwave_blast_splash_radius 70 + set g_balance_shockwave_blast_spread_max 120 + set g_balance_shockwave_blast_spread_min 25 + set g_balance_shockwave_melee_animtime 1.3 + set g_balance_shockwave_melee_damage 80 + set g_balance_shockwave_melee_delay 0.25 + set g_balance_shockwave_melee_force 200 + set g_balance_shockwave_melee_multihit 1 + set g_balance_shockwave_melee_no_doubleslap 1 + set g_balance_shockwave_melee_nonplayerdamage 40 + set g_balance_shockwave_melee_range 120 + set g_balance_shockwave_melee_refire 1.25 + set g_balance_shockwave_melee_swing_side 120 + set g_balance_shockwave_melee_swing_up 30 + set g_balance_shockwave_melee_time 0.15 + set g_balance_shockwave_melee_traces 10 + set g_balance_shockwave_switchdelay_drop 0.2 + set g_balance_shockwave_switchdelay_raise 0.2 + set g_balance_shockwave_weaponreplace "" + set g_balance_shockwave_weaponstart 0 + set g_balance_shockwave_weaponstartoverride -1 + set g_balance_shockwave_weaponthrowable 0 + // }}} + // {{{ #20: Arc + set g_balance_arc_beam_ammo 4 + set g_balance_arc_beam_animtime 0.2 + set g_balance_arc_beam_botaimlifetime 0 + set g_balance_arc_beam_botaimspeed 0 + set g_balance_arc_beam_damage 115 + set g_balance_arc_beam_degreespersegment 1 + set g_balance_arc_beam_distancepersegment 0 + set g_balance_arc_beam_falloff_halflifedist 0 + set g_balance_arc_beam_falloff_maxdist 0 + set g_balance_arc_beam_falloff_mindist 0 + set g_balance_arc_beam_force 900 + set g_balance_arc_beam_healing_amax 100 + set g_balance_arc_beam_healing_aps 50 + set g_balance_arc_beam_healing_hmax 150 + set g_balance_arc_beam_healing_hps 50 + set g_balance_arc_cooldown 2.5 + set g_balance_arc_overheat_max 5 + set g_balance_arc_overheat_min 3 + set g_balance_arc_beam_heat 1 + set g_balance_arc_burst_heat 4 + set g_balance_arc_beam_maxangle 10 + set g_balance_arc_beam_nonplayerdamage 80 + set g_balance_arc_beam_range 1000 + set g_balance_arc_beam_refire 0.5 + set g_balance_arc_beam_returnspeed 8 + set g_balance_arc_beam_tightness 0.5 + set g_balance_arc_burst_ammo 15 + set g_balance_arc_burst_damage 250 + set g_balance_arc_burst_healing_aps 100 + set g_balance_arc_burst_healing_hps 100 + set g_balance_arc_switchdelay_drop 0.3 + set g_balance_arc_switchdelay_raise 0.3 + set g_balance_arc_weaponreplace "" + set g_balance_arc_weaponstart 0 + set g_balance_arc_weaponstartoverride -1 + set g_balance_arc_weaponthrowable 1 + // }}} ++// {{{ #21: Heavy Machine Gun ++set g_balance_hmg_ammo 0 ++set g_balance_hmg_damage 0 ++set g_balance_hmg_force 0 ++set g_balance_hmg_refire 0 ++set g_balance_hmg_reload_ammo 120 ++set g_balance_hmg_reload_time 1 ++set g_balance_hmg_solidpenetration 32 ++set g_balance_hmg_spread_add 0.01 ++set g_balance_hmg_spread_max 0.05 ++set g_balance_hmg_spread_min 0.02 ++set g_balance_hmg_switchdelay_drop 0.2 ++set g_balance_hmg_switchdelay_raise 0.2 ++set g_balance_hmg_weaponreplace "" ++set g_balance_hmg_weaponstart 0 ++set g_balance_hmg_weaponstartoverride 0 ++set g_balance_hmg_weaponthrowable 0 ++// }}} ++// {{{ #22: Rocket Propelled Chainsaw ++set g_balance_rpc_ammo 10 ++set g_balance_rpc_animtime 1 ++set g_balance_rpc_damage 150 ++set g_balance_rpc_damage2 500 ++set g_balance_rpc_damageforcescale 2 ++set g_balance_rpc_edgedamage 50 ++set g_balance_rpc_force 400 ++set g_balance_rpc_health 25 ++set g_balance_rpc_lifetime 30 ++set g_balance_rpc_radius 300 ++set g_balance_rpc_refire 1 ++set g_balance_rpc_reload_ammo 10 ++set g_balance_rpc_reload_time 1 ++set g_balance_rpc_speed 1250 ++set g_balance_rpc_speedaccel 5000 ++set g_balance_rpc_switchdelay_drop 0.2 ++set g_balance_rpc_switchdelay_raise 0.2 ++set g_balance_rpc_weaponreplace "" ++set g_balance_rpc_weaponstart 0 ++set g_balance_rpc_weaponstartoverride 0 ++set g_balance_rpc_weaponthrowable 0 ++// }}} diff --cc bal-wep-xpm.cfg index 000000000,320ce2280..e061e6920 mode 000000,100644..100644 --- a/bal-wep-xpm.cfg +++ b/bal-wep-xpm.cfg @@@ -1,0 -1,763 +1,804 @@@ + // {{{ #1: Blaster + set g_balance_blaster_primary_animtime 0.2 + set g_balance_blaster_primary_damage 25 + set g_balance_blaster_primary_delay 0 + set g_balance_blaster_primary_edgedamage 12.5 + set g_balance_blaster_primary_force 300 + set g_balance_blaster_primary_force_zscale 1.25 + set g_balance_blaster_primary_lifetime 5 + set g_balance_blaster_primary_radius 60 + set g_balance_blaster_primary_refire 0.7 + set g_balance_blaster_primary_shotangle 0 + set g_balance_blaster_primary_speed 6000 + set g_balance_blaster_primary_spread 0 + set g_balance_blaster_secondary 0 + set g_balance_blaster_secondary_animtime 0.2 + set g_balance_blaster_secondary_damage 25 + set g_balance_blaster_secondary_delay 0 + set g_balance_blaster_secondary_edgedamage 12.5 + set g_balance_blaster_secondary_force 300 + set g_balance_blaster_secondary_force_zscale 1.2 + set g_balance_blaster_secondary_lifetime 5 + set g_balance_blaster_secondary_radius 70 + set g_balance_blaster_secondary_refire 0.7 + set g_balance_blaster_secondary_shotangle 0 + set g_balance_blaster_secondary_speed 6000 + set g_balance_blaster_secondary_spread 0 + set g_balance_blaster_switchdelay_drop 0.2 + set g_balance_blaster_switchdelay_raise 0.2 + set g_balance_blaster_weaponreplace "" + set g_balance_blaster_weaponstart 1 + set g_balance_blaster_weaponstartoverride -1 + set g_balance_blaster_weaponthrowable 0 + // }}} + // {{{ #2: Shotgun + set g_balance_shotgun_primary_ammo 1 + set g_balance_shotgun_primary_animtime 0.2 + set g_balance_shotgun_primary_bullets 14 + set g_balance_shotgun_primary_damage 3.5 + set g_balance_shotgun_primary_force 15 + set g_balance_shotgun_primary_refire 0.75 + set g_balance_shotgun_primary_solidpenetration 3.8 + set g_balance_shotgun_primary_spread 0.11 + set g_balance_shotgun_reload_ammo 0 + set g_balance_shotgun_reload_time 2 + set g_balance_shotgun_secondary 1 + set g_balance_shotgun_secondary_animtime 1 + set g_balance_shotgun_secondary_damage 70 + set g_balance_shotgun_secondary_force 200 + set g_balance_shotgun_secondary_melee_delay 0.25 + set g_balance_shotgun_secondary_melee_multihit 1 + set g_balance_shotgun_secondary_melee_no_doubleslap 1 + set g_balance_shotgun_secondary_melee_nonplayerdamage 40 + set g_balance_shotgun_secondary_melee_range 120 + set g_balance_shotgun_secondary_melee_swing_side 120 + set g_balance_shotgun_secondary_melee_swing_up 30 + set g_balance_shotgun_secondary_melee_time 0.15 + set g_balance_shotgun_secondary_melee_traces 10 + set g_balance_shotgun_secondary_refire 1.25 + set g_balance_shotgun_secondary_alt_animtime 0.2 + set g_balance_shotgun_secondary_alt_refire 1.2 + set g_balance_shotgun_switchdelay_drop 0.2 + set g_balance_shotgun_switchdelay_raise 0.2 + set g_balance_shotgun_weaponreplace "" + set g_balance_shotgun_weaponstart 1 + set g_balance_shotgun_weaponstartoverride -1 + set g_balance_shotgun_weaponthrowable 1 + // }}} + // {{{ #3: Machine Gun + set g_balance_machinegun_burst 3 + set g_balance_machinegun_burst_ammo 3 + set g_balance_machinegun_burst_animtime 0.3 + set g_balance_machinegun_burst_refire 0.06 + set g_balance_machinegun_burst_refire2 0.45 + set g_balance_machinegun_burst_speed 0 + set g_balance_machinegun_first 1 + set g_balance_machinegun_first_ammo 1 + set g_balance_machinegun_first_damage 14 + set g_balance_machinegun_first_force 5 + set g_balance_machinegun_first_refire 0.125 + set g_balance_machinegun_first_spread 0.03 + set g_balance_machinegun_mode 1 + set g_balance_machinegun_reload_ammo 60 + set g_balance_machinegun_reload_time 2 + set g_balance_machinegun_solidpenetration 13.1 + set g_balance_machinegun_spread_add 0.012 + set g_balance_machinegun_spread_max 0.05 + set g_balance_machinegun_spread_min 0.02 + set g_balance_machinegun_sustained_ammo 1 + set g_balance_machinegun_sustained_damage 10 + set g_balance_machinegun_sustained_force 5 + set g_balance_machinegun_sustained_refire 0.1 + set g_balance_machinegun_sustained_spread 0.03 + set g_balance_machinegun_switchdelay_drop 0.2 + set g_balance_machinegun_switchdelay_raise 0.2 + set g_balance_machinegun_weaponreplace "" + set g_balance_machinegun_weaponstart 0 + set g_balance_machinegun_weaponstartoverride -1 + set g_balance_machinegun_weaponthrowable 1 + // }}} + // {{{ #4: Mortar + set g_balance_mortar_bouncefactor 0.5 + set g_balance_mortar_bouncestop 0.075 + set g_balance_mortar_primary_ammo 2 + set g_balance_mortar_primary_animtime 0.3 + set g_balance_mortar_primary_damage 55 + set g_balance_mortar_primary_damageforcescale 0 + set g_balance_mortar_primary_edgedamage 25 + set g_balance_mortar_primary_force 250 + set g_balance_mortar_primary_health 15 + set g_balance_mortar_primary_lifetime 5 + set g_balance_mortar_primary_lifetime_stick 0 + set g_balance_mortar_primary_radius 120 + set g_balance_mortar_primary_refire 0.8 + set g_balance_mortar_primary_remote_minbouncecnt 0 + set g_balance_mortar_primary_speed 1900 + set g_balance_mortar_primary_speed_up 225 + set g_balance_mortar_primary_speed_z 0 + set g_balance_mortar_primary_spread 0 + set g_balance_mortar_primary_type 0 + set g_balance_mortar_reload_ammo 0 + set g_balance_mortar_reload_time 2 + set g_balance_mortar_secondary_ammo 2 + set g_balance_mortar_secondary_animtime 0.3 + set g_balance_mortar_secondary_damage 55 + set g_balance_mortar_secondary_damageforcescale 4 + set g_balance_mortar_secondary_edgedamage 30 + set g_balance_mortar_secondary_force 250 + set g_balance_mortar_secondary_health 30 + set g_balance_mortar_secondary_lifetime 5 + set g_balance_mortar_secondary_lifetime_bounce 0.5 + set g_balance_mortar_secondary_lifetime_stick 0 + set g_balance_mortar_secondary_radius 120 + set g_balance_mortar_secondary_refire 0.7 + set g_balance_mortar_secondary_remote_detonateprimary 0 + set g_balance_mortar_secondary_speed 1400 + set g_balance_mortar_secondary_speed_up 150 + set g_balance_mortar_secondary_speed_z 0 + set g_balance_mortar_secondary_spread 0 + set g_balance_mortar_secondary_type 1 + set g_balance_mortar_switchdelay_drop 0.2 + set g_balance_mortar_switchdelay_raise 0.2 + set g_balance_mortar_weaponreplace "" + set g_balance_mortar_weaponstart 0 + set g_balance_mortar_weaponstartoverride -1 + set g_balance_mortar_weaponthrowable 1 + // }}} + // {{{ #5: Mine Layer (MUTATOR WEAPON) + set g_balance_minelayer_ammo 4 + set g_balance_minelayer_animtime 0.4 + set g_balance_minelayer_damage 40 + set g_balance_minelayer_damageforcescale 0 + set g_balance_minelayer_detonatedelay -1 + set g_balance_minelayer_edgedamage 20 + set g_balance_minelayer_force 250 + set g_balance_minelayer_health 15 + set g_balance_minelayer_lifetime 10 + set g_balance_minelayer_lifetime_countdown 0.5 + set g_balance_minelayer_limit 3 + set g_balance_minelayer_protection 0 + set g_balance_minelayer_proximityradius 150 + set g_balance_minelayer_radius 175 + set g_balance_minelayer_refire 1.5 + set g_balance_minelayer_reload_ammo 0 + set g_balance_minelayer_reload_time 2 + set g_balance_minelayer_remote_damage 45 + set g_balance_minelayer_remote_edgedamage 40 + set g_balance_minelayer_remote_force 300 + set g_balance_minelayer_remote_radius 200 + set g_balance_minelayer_speed 1000 + set g_balance_minelayer_switchdelay_drop 0.2 + set g_balance_minelayer_switchdelay_raise 0.2 + set g_balance_minelayer_time 0.5 + set g_balance_minelayer_weaponreplace "" + set g_balance_minelayer_weaponstart 0 + set g_balance_minelayer_weaponstartoverride -1 + set g_balance_minelayer_weaponthrowable 1 + // }}} + // {{{ #6: Electro + set g_balance_electro_combo_comboradius 300 + set g_balance_electro_combo_comboradius_thruwall 200 + set g_balance_electro_combo_damage 50 + set g_balance_electro_combo_edgedamage 25 + set g_balance_electro_combo_force 120 + set g_balance_electro_combo_radius 150 + set g_balance_electro_combo_safeammocheck 1 + set g_balance_electro_combo_speed 2000 + set g_balance_electro_primary_ammo 4 + set g_balance_electro_primary_animtime 0.3 + set g_balance_electro_primary_comboradius 300 + set g_balance_electro_primary_damage 40 + set g_balance_electro_primary_edgedamage 20 + set g_balance_electro_primary_force 200 + set g_balance_electro_primary_lifetime 5 + set g_balance_electro_primary_midaircombo_explode 1 + set g_balance_electro_primary_midaircombo_interval 0.1 + set g_balance_electro_primary_midaircombo_radius 150 + set g_balance_electro_primary_radius 100 + set g_balance_electro_primary_refire 0.6 + set g_balance_electro_primary_speed 2500 + set g_balance_electro_primary_spread 0 + set g_balance_electro_reload_ammo 0 + set g_balance_electro_reload_time 2 + set g_balance_electro_secondary_ammo 2 + set g_balance_electro_secondary_animtime 0.2 + set g_balance_electro_secondary_bouncefactor 0.3 + set g_balance_electro_secondary_bouncestop 0.05 + set g_balance_electro_secondary_count 3 + set g_balance_electro_secondary_damage 30 + set g_balance_electro_secondary_damagedbycontents 1 + set g_balance_electro_secondary_damageforcescale 4 + set g_balance_electro_secondary_edgedamage 15 + set g_balance_electro_secondary_force 50 + set g_balance_electro_secondary_health 5 + set g_balance_electro_secondary_lifetime 4 + set g_balance_electro_secondary_radius 150 + set g_balance_electro_secondary_refire 0.2 + set g_balance_electro_secondary_refire2 1.6 + set g_balance_electro_secondary_speed 1000 + set g_balance_electro_secondary_speed_up 200 + set g_balance_electro_secondary_speed_z 0 + set g_balance_electro_secondary_spread 0.04 + set g_balance_electro_secondary_touchexplode 0 + set g_balance_electro_switchdelay_drop 0.2 + set g_balance_electro_switchdelay_raise 0.2 + set g_balance_electro_weaponreplace "" + set g_balance_electro_weaponstart 0 + set g_balance_electro_weaponstartoverride -1 + set g_balance_electro_weaponthrowable 1 + // }}} + // {{{ #7: Crylink + set g_balance_crylink_primary_ammo 3 + set g_balance_crylink_primary_animtime 0.3 + set g_balance_crylink_primary_bouncedamagefactor 0.5 + set g_balance_crylink_primary_bounces 1 + set g_balance_crylink_primary_damage 12 + set g_balance_crylink_primary_edgedamage 6 + set g_balance_crylink_primary_force -50 + set g_balance_crylink_primary_joindelay 0.1 + set g_balance_crylink_primary_joinexplode 1 + set g_balance_crylink_primary_joinexplode_damage 0 + set g_balance_crylink_primary_joinexplode_edgedamage 0 + set g_balance_crylink_primary_joinexplode_force 0 + set g_balance_crylink_primary_joinexplode_radius 0 + set g_balance_crylink_primary_joinspread 0.2 + set g_balance_crylink_primary_linkexplode 1 + set g_balance_crylink_primary_middle_fadetime 5 + set g_balance_crylink_primary_middle_lifetime 5 + set g_balance_crylink_primary_other_fadetime 5 + set g_balance_crylink_primary_other_lifetime 5 + set g_balance_crylink_primary_radius 80 + set g_balance_crylink_primary_refire 0.7 + set g_balance_crylink_primary_shots 6 + set g_balance_crylink_primary_speed 2000 + set g_balance_crylink_primary_spread 0.08 + set g_balance_crylink_reload_ammo 0 + set g_balance_crylink_reload_time 2 + set g_balance_crylink_secondary 1 + set g_balance_crylink_secondary_ammo 2 + set g_balance_crylink_secondary_animtime 0.2 + set g_balance_crylink_secondary_bouncedamagefactor 0.5 + set g_balance_crylink_secondary_bounces 0 + set g_balance_crylink_secondary_damage 10 + set g_balance_crylink_secondary_edgedamage 5 + set g_balance_crylink_secondary_force -250 + set g_balance_crylink_secondary_joindelay 0 + set g_balance_crylink_secondary_joinexplode 0 + set g_balance_crylink_secondary_joinexplode_damage 0 + set g_balance_crylink_secondary_joinexplode_edgedamage 0 + set g_balance_crylink_secondary_joinexplode_force 0 + set g_balance_crylink_secondary_joinexplode_radius 0 + set g_balance_crylink_secondary_joinspread 0 + set g_balance_crylink_secondary_linkexplode 1 + set g_balance_crylink_secondary_middle_fadetime 5 + set g_balance_crylink_secondary_middle_lifetime 5 + set g_balance_crylink_secondary_other_fadetime 5 + set g_balance_crylink_secondary_other_lifetime 5 + set g_balance_crylink_secondary_radius 100 + set g_balance_crylink_secondary_refire 0.7 + set g_balance_crylink_secondary_shots 5 + set g_balance_crylink_secondary_speed 3000 + set g_balance_crylink_secondary_spread 0.01 + set g_balance_crylink_secondary_spreadtype 1 + set g_balance_crylink_switchdelay_drop 0.2 + set g_balance_crylink_switchdelay_raise 0.2 + set g_balance_crylink_weaponreplace "" + set g_balance_crylink_weaponstart 0 + set g_balance_crylink_weaponstartoverride -1 + set g_balance_crylink_weaponthrowable 1 + // }}} + // {{{ #8: Vortex + set g_balance_vortex_charge 1 + set g_balance_vortex_charge_animlimit 0.5 + set g_balance_vortex_charge_limit 1 + set g_balance_vortex_charge_maxspeed 800 + set g_balance_vortex_charge_mindmg 40 + set g_balance_vortex_charge_minspeed 400 + set g_balance_vortex_charge_rate 0.6 + set g_balance_vortex_charge_rot_pause 0 + set g_balance_vortex_charge_rot_rate 0 + set g_balance_vortex_charge_shot_multiplier 0 + set g_balance_vortex_charge_start 0.5 + set g_balance_vortex_charge_velocity_rate 0 + set g_balance_vortex_primary_ammo 6 + set g_balance_vortex_primary_animtime 0.4 + set g_balance_vortex_primary_damage 80 + set g_balance_vortex_primary_damagefalloff_forcehalflife 0 + set g_balance_vortex_primary_damagefalloff_halflife 0 + set g_balance_vortex_primary_damagefalloff_maxdist 0 + set g_balance_vortex_primary_damagefalloff_mindist 0 + set g_balance_vortex_primary_force 400 + set g_balance_vortex_primary_refire 1.5 + set g_balance_vortex_reload_ammo 0 + set g_balance_vortex_reload_time 2 + set g_balance_vortex_secondary 0 + set g_balance_vortex_secondary_ammo 2 + set g_balance_vortex_secondary_animtime 0 + set g_balance_vortex_secondary_chargepool 0 + set g_balance_vortex_secondary_chargepool_pause_regen 1 + set g_balance_vortex_secondary_chargepool_regen 0.15 + set g_balance_vortex_secondary_damage 0 + set g_balance_vortex_secondary_damagefalloff_forcehalflife 0 + set g_balance_vortex_secondary_damagefalloff_halflife 0 + set g_balance_vortex_secondary_damagefalloff_maxdist 0 + set g_balance_vortex_secondary_damagefalloff_mindist 0 + set g_balance_vortex_secondary_force 0 + set g_balance_vortex_secondary_refire 0 + set g_balance_vortex_switchdelay_drop 0.25 + set g_balance_vortex_switchdelay_raise 0.25 + set g_balance_vortex_weaponreplace "" + set g_balance_vortex_weaponstart 0 + set g_balance_vortex_weaponstartoverride -1 + set g_balance_vortex_weaponthrowable 1 + // }}} + // {{{ #9: Hagar + set g_balance_hagar_primary_ammo 1 + set g_balance_hagar_primary_damage 25 + set g_balance_hagar_primary_damageforcescale 0 + set g_balance_hagar_primary_edgedamage 12.5 + set g_balance_hagar_primary_force 100 + set g_balance_hagar_primary_health 15 + set g_balance_hagar_primary_lifetime 5 + set g_balance_hagar_primary_radius 65 + set g_balance_hagar_primary_refire 0.16667 + set g_balance_hagar_primary_speed 2200 + set g_balance_hagar_primary_spread 0.03 + set g_balance_hagar_reload_ammo 0 + set g_balance_hagar_reload_time 2 + set g_balance_hagar_secondary 1 + set g_balance_hagar_secondary_ammo 1 + set g_balance_hagar_secondary_damage 35 + set g_balance_hagar_secondary_damageforcescale 0 + set g_balance_hagar_secondary_edgedamage 17.5 + set g_balance_hagar_secondary_force 75 + set g_balance_hagar_secondary_health 15 + set g_balance_hagar_secondary_lifetime_min 10 + set g_balance_hagar_secondary_lifetime_rand 0 + set g_balance_hagar_secondary_load 1 + set g_balance_hagar_secondary_load_abort 1 + set g_balance_hagar_secondary_load_animtime 0.2 + set g_balance_hagar_secondary_load_hold 4 + set g_balance_hagar_secondary_load_linkexplode 0 + set g_balance_hagar_secondary_load_max 4 + set g_balance_hagar_secondary_load_releasedeath 0 + set g_balance_hagar_secondary_load_speed 0.5 + set g_balance_hagar_secondary_load_spread 0.075 + set g_balance_hagar_secondary_load_spread_bias 0.5 + set g_balance_hagar_secondary_radius 80 + set g_balance_hagar_secondary_refire 0.5 + set g_balance_hagar_secondary_speed 2000 + set g_balance_hagar_secondary_spread 0.05 + set g_balance_hagar_switchdelay_drop 0.2 + set g_balance_hagar_switchdelay_raise 0.2 + set g_balance_hagar_weaponreplace "" + set g_balance_hagar_weaponstart 0 + set g_balance_hagar_weaponstartoverride -1 + set g_balance_hagar_weaponthrowable 1 + // }}} + // {{{ #10: Devastator + set g_balance_devastator_ammo 4 + set g_balance_devastator_animtime 0.4 + set g_balance_devastator_damage 80 + set g_balance_devastator_damageforcescale 1 + set g_balance_devastator_detonatedelay 0.02 + set g_balance_devastator_edgedamage 40 + set g_balance_devastator_force 400 + set g_balance_devastator_guidedelay 0.2 + set g_balance_devastator_guidegoal 512 + set g_balance_devastator_guiderate 90 + set g_balance_devastator_guideratedelay 0.01 + set g_balance_devastator_guidestop 0 + set g_balance_devastator_health 30 + set g_balance_devastator_lifetime 10 + set g_balance_devastator_radius 110 + set g_balance_devastator_refire 1.1 + set g_balance_devastator_reload_ammo 0 + set g_balance_devastator_reload_time 2 + set g_balance_devastator_remote_damage 70 + set g_balance_devastator_remote_edgedamage 35 + set g_balance_devastator_remote_force 300 + set g_balance_devastator_remote_jump_damage 70 + set g_balance_devastator_remote_jump_radius 0 + set g_balance_devastator_remote_jump_velocity_z_add 400 + set g_balance_devastator_remote_jump_velocity_z_max 1500 + set g_balance_devastator_remote_jump_velocity_z_min 400 + set g_balance_devastator_remote_radius 110 + set g_balance_devastator_speed 1300 + set g_balance_devastator_speedaccel 1300 + set g_balance_devastator_speedstart 1000 + set g_balance_devastator_switchdelay_drop 0.2 + set g_balance_devastator_switchdelay_raise 0.2 + set g_balance_devastator_weaponreplace "" + set g_balance_devastator_weaponstart 0 + set g_balance_devastator_weaponstartoverride -1 + set g_balance_devastator_weaponthrowable 1 + // }}} + // {{{ #11: Port-O-Launch + set g_balance_porto_primary_animtime 0.3 + set g_balance_porto_primary_lifetime 5 + set g_balance_porto_primary_refire 1.5 + set g_balance_porto_primary_speed 1000 + set g_balance_porto_secondary 1 + set g_balance_porto_secondary_animtime 0.3 + set g_balance_porto_secondary_lifetime 5 + set g_balance_porto_secondary_refire 1.5 + set g_balance_porto_secondary_speed 1000 + set g_balance_porto_switchdelay_drop 0.2 + set g_balance_porto_switchdelay_raise 0.2 + set g_balance_porto_weaponreplace "" + set g_balance_porto_weaponstart 0 + set g_balance_porto_weaponstartoverride -1 + set g_balance_porto_weaponthrowable 1 + // }}} + // {{{ #12: Vaporizer + set g_balance_vaporizer_primary_ammo 10 + set g_balance_vaporizer_primary_animtime 0.3 + set g_balance_vaporizer_primary_refire 1 + set g_balance_vaporizer_reload_ammo 0 + set g_balance_vaporizer_reload_time 0 + set g_balance_vaporizer_secondary_ammo 0 + set g_balance_vaporizer_secondary_animtime 0.2 + set g_balance_vaporizer_secondary_damage 25 + set g_balance_vaporizer_secondary_delay 0 + set g_balance_vaporizer_secondary_edgedamage 12.5 + set g_balance_vaporizer_secondary_force 400 + set g_balance_vaporizer_secondary_lifetime 5 + set g_balance_vaporizer_secondary_radius 70 + set g_balance_vaporizer_secondary_refire 0.7 + set g_balance_vaporizer_secondary_shotangle 0 + set g_balance_vaporizer_secondary_speed 6000 + set g_balance_vaporizer_secondary_spread 0 + set g_balance_vaporizer_switchdelay_drop 0.2 + set g_balance_vaporizer_switchdelay_raise 0.2 + set g_balance_vaporizer_weaponreplace "" + set g_balance_vaporizer_weaponstart 0 + set g_balance_vaporizer_weaponstartoverride -1 + set g_balance_vaporizer_weaponthrowable 0 + // }}} + // {{{ #13: Grappling Hook + set g_balance_hook_primary_ammo 5 + set g_balance_hook_primary_animtime 0.3 + set g_balance_hook_primary_hooked_ammo 5 + set g_balance_hook_primary_hooked_time_free 2 + set g_balance_hook_primary_hooked_time_max 0 + set g_balance_hook_primary_refire 0.2 + set g_balance_hook_secondary_animtime 0.3 + set g_balance_hook_secondary_damage 25 + set g_balance_hook_secondary_damageforcescale 0 + set g_balance_hook_secondary_duration 1.5 + set g_balance_hook_secondary_edgedamage 5 + set g_balance_hook_secondary_force -2000 + set g_balance_hook_secondary_gravity 5 + set g_balance_hook_secondary_health 15 + set g_balance_hook_secondary_lifetime 5 + set g_balance_hook_secondary_power 3 + set g_balance_hook_secondary_radius 500 + set g_balance_hook_secondary_refire 3 + set g_balance_hook_secondary_speed 0 + set g_balance_hook_switchdelay_drop 0.2 + set g_balance_hook_switchdelay_raise 0.2 + set g_balance_hook_weaponreplace "" + set g_balance_hook_weaponstart 0 + set g_balance_hook_weaponstartoverride -1 + set g_balance_hook_weaponthrowable 1 + // }}} + // {{{ #14: Heavy Laser Assault Cannon (MUTATOR WEAPON) + set g_balance_hlac_primary_ammo 1 + set g_balance_hlac_primary_animtime 0.4 + set g_balance_hlac_primary_damage 18 + set g_balance_hlac_primary_edgedamage 9 + set g_balance_hlac_primary_force 90 + set g_balance_hlac_primary_lifetime 5 + set g_balance_hlac_primary_radius 70 + set g_balance_hlac_primary_refire 0.15 + set g_balance_hlac_primary_speed 9000 + set g_balance_hlac_primary_spread_add 0.0045 + set g_balance_hlac_primary_spread_crouchmod 0.25 + set g_balance_hlac_primary_spread_max 0.25 + set g_balance_hlac_primary_spread_min 0.01 + set g_balance_hlac_reload_ammo 0 + set g_balance_hlac_reload_time 2 + set g_balance_hlac_secondary 1 + set g_balance_hlac_secondary_ammo 10 + set g_balance_hlac_secondary_animtime 0.3 + set g_balance_hlac_secondary_damage 15 + set g_balance_hlac_secondary_edgedamage 7.5 + set g_balance_hlac_secondary_force 90 + set g_balance_hlac_secondary_lifetime 5 + set g_balance_hlac_secondary_radius 70 + set g_balance_hlac_secondary_refire 1 + set g_balance_hlac_secondary_shots 6 + set g_balance_hlac_secondary_speed 9000 + set g_balance_hlac_secondary_spread 0.15 + set g_balance_hlac_secondary_spread_crouchmod 0.5 + set g_balance_hlac_switchdelay_drop 0.2 + set g_balance_hlac_switchdelay_raise 0.2 + set g_balance_hlac_weaponreplace "" + set g_balance_hlac_weaponstart 0 + set g_balance_hlac_weaponstartoverride -1 + set g_balance_hlac_weaponthrowable 1 + // }}} + // {{{ #15: @!#%'n Tuba + set g_balance_tuba_animtime 0.05 + set g_balance_tuba_attenuation 0.5 + set g_balance_tuba_damage 5 + set g_balance_tuba_edgedamage 0 + set g_balance_tuba_fadetime 0.25 + set g_balance_tuba_force 40 + set g_balance_tuba_pitchstep 6 + set g_balance_tuba_radius 200 + set g_balance_tuba_refire 0.05 + set g_balance_tuba_switchdelay_drop 0.2 + set g_balance_tuba_switchdelay_raise 0.2 + set g_balance_tuba_volume 1 + set g_balance_tuba_weaponreplace "" + set g_balance_tuba_weaponstart 0 + set g_balance_tuba_weaponstartoverride -1 + set g_balance_tuba_weaponthrowable 1 + // }}} + // {{{ #16: Rifle (MUTATOR WEAPON) + set g_balance_rifle_bursttime 0 + set g_balance_rifle_primary_ammo 10 + set g_balance_rifle_primary_animtime 0.4 + set g_balance_rifle_primary_bullethail 0 + set g_balance_rifle_primary_burstcost 0 + set g_balance_rifle_primary_damage 80 + set g_balance_rifle_primary_force 100 + set g_balance_rifle_primary_refire 1.2 + set g_balance_rifle_primary_shots 1 + set g_balance_rifle_primary_solidpenetration 62.2 + set g_balance_rifle_primary_spread 0 + set g_balance_rifle_primary_tracer 1 + set g_balance_rifle_reload_ammo 80 + set g_balance_rifle_reload_time 2 + set g_balance_rifle_secondary 1 + set g_balance_rifle_secondary_ammo 10 + set g_balance_rifle_secondary_animtime 0.3 + set g_balance_rifle_secondary_bullethail 0 + set g_balance_rifle_secondary_burstcost 0 + set g_balance_rifle_secondary_damage 20 + set g_balance_rifle_secondary_force 50 + set g_balance_rifle_secondary_refire 0.9 + set g_balance_rifle_secondary_reload 0 + set g_balance_rifle_secondary_shots 4 + set g_balance_rifle_secondary_solidpenetration 15.5 + set g_balance_rifle_secondary_spread 0.04 + set g_balance_rifle_secondary_tracer 0 + set g_balance_rifle_switchdelay_drop 0.2 + set g_balance_rifle_switchdelay_raise 0.2 + set g_balance_rifle_weaponreplace "" + set g_balance_rifle_weaponstart 0 + set g_balance_rifle_weaponstartoverride -1 + set g_balance_rifle_weaponthrowable 1 + // }}} + // {{{ #17: Fireball + set g_balance_fireball_primary_animtime 0.4 + set g_balance_fireball_primary_bfgdamage 100 + set g_balance_fireball_primary_bfgforce 0 + set g_balance_fireball_primary_bfgradius 1000 + set g_balance_fireball_primary_damage 200 + set g_balance_fireball_primary_damageforcescale 0 + set g_balance_fireball_primary_edgedamage 50 + set g_balance_fireball_primary_force 600 + set g_balance_fireball_primary_health 0 + set g_balance_fireball_primary_laserburntime 0.5 + set g_balance_fireball_primary_laserdamage 80 + set g_balance_fireball_primary_laseredgedamage 20 + set g_balance_fireball_primary_laserradius 256 + set g_balance_fireball_primary_lifetime 15 + set g_balance_fireball_primary_radius 200 + set g_balance_fireball_primary_refire 2 + set g_balance_fireball_primary_refire2 0 + set g_balance_fireball_primary_speed 1200 + set g_balance_fireball_primary_spread 0 + set g_balance_fireball_secondary_animtime 0.3 + set g_balance_fireball_secondary_damage 40 + set g_balance_fireball_secondary_damageforcescale 4 + set g_balance_fireball_secondary_damagetime 5 + set g_balance_fireball_secondary_laserburntime 0.5 + set g_balance_fireball_secondary_laserdamage 50 + set g_balance_fireball_secondary_laseredgedamage 20 + set g_balance_fireball_secondary_laserradius 110 + set g_balance_fireball_secondary_lifetime 7 + set g_balance_fireball_secondary_refire 1.5 + set g_balance_fireball_secondary_speed 900 + set g_balance_fireball_secondary_speed_up 100 + set g_balance_fireball_secondary_speed_z 0 + set g_balance_fireball_secondary_spread 0 + set g_balance_fireball_switchdelay_drop 0.2 + set g_balance_fireball_switchdelay_raise 0.2 + set g_balance_fireball_weaponreplace "" + set g_balance_fireball_weaponstart 0 + set g_balance_fireball_weaponstartoverride -1 + set g_balance_fireball_weaponthrowable 0 + // }}} + // {{{ #18: T.A.G. Seeker (MUTATOR WEAPON) + set g_balance_seeker_flac_ammo 1 + set g_balance_seeker_flac_animtime 0.1 + set g_balance_seeker_flac_damage 15 + set g_balance_seeker_flac_edgedamage 10 + set g_balance_seeker_flac_force 50 + set g_balance_seeker_flac_lifetime 0.1 + set g_balance_seeker_flac_lifetime_rand 0.05 + set g_balance_seeker_flac_radius 100 + set g_balance_seeker_flac_refire 0.1 + set g_balance_seeker_flac_speed 3000 + set g_balance_seeker_flac_speed_up 1000 + set g_balance_seeker_flac_speed_z 0 + set g_balance_seeker_flac_spread 0.4 + set g_balance_seeker_missile_accel 1400 + set g_balance_seeker_missile_ammo 2 + set g_balance_seeker_missile_animtime 0.2 + set g_balance_seeker_missile_count 3 + set g_balance_seeker_missile_damage 30 + set g_balance_seeker_missile_damageforcescale 4 + set g_balance_seeker_missile_decel 1400 + set g_balance_seeker_missile_delay 0.25 + set g_balance_seeker_missile_edgedamage 10 + set g_balance_seeker_missile_force 150 + set g_balance_seeker_missile_health 5 + set g_balance_seeker_missile_lifetime 15 + set g_balance_seeker_missile_proxy 0 + set g_balance_seeker_missile_proxy_delay 0.2 + set g_balance_seeker_missile_proxy_maxrange 45 + set g_balance_seeker_missile_radius 80 + set g_balance_seeker_missile_refire 0.5 + set g_balance_seeker_missile_smart 1 + set g_balance_seeker_missile_smart_mindist 800 + set g_balance_seeker_missile_smart_trace_max 2500 + set g_balance_seeker_missile_smart_trace_min 1000 + set g_balance_seeker_missile_speed 700 + set g_balance_seeker_missile_speed_max 1300 + set g_balance_seeker_missile_speed_up 300 + set g_balance_seeker_missile_speed_z 0 + set g_balance_seeker_missile_spread 0 + set g_balance_seeker_missile_turnrate 0.65 + set g_balance_seeker_reload_ammo 0 + set g_balance_seeker_reload_time 2 + set g_balance_seeker_switchdelay_drop 0.2 + set g_balance_seeker_switchdelay_raise 0.2 + set g_balance_seeker_tag_ammo 1 + set g_balance_seeker_tag_animtime 0.2 + set g_balance_seeker_tag_damageforcescale 4 + set g_balance_seeker_tag_health 5 + set g_balance_seeker_tag_lifetime 15 + set g_balance_seeker_tag_refire 0.75 + set g_balance_seeker_tag_speed 5000 + set g_balance_seeker_tag_spread 0 + set g_balance_seeker_tag_tracker_lifetime 10 + set g_balance_seeker_type 0 + set g_balance_seeker_weaponreplace "" + set g_balance_seeker_weaponstart 0 + set g_balance_seeker_weaponstartoverride -1 + set g_balance_seeker_weaponthrowable 1 + // }}} + // {{{ #19: Shockwave (MUTATOR WEAPON) + set g_balance_shockwave_blast_animtime 0.3 + set g_balance_shockwave_blast_damage 20 + set g_balance_shockwave_blast_distance 1000 + set g_balance_shockwave_blast_edgedamage 0 + set g_balance_shockwave_blast_force 200 + set g_balance_shockwave_blast_force_forwardbias 50 + set g_balance_shockwave_blast_force_zscale 2 + set g_balance_shockwave_blast_jump_damage 20 + set g_balance_shockwave_blast_jump_edgedamage 0 + set g_balance_shockwave_blast_jump_force 300 + set g_balance_shockwave_blast_jump_force_velocitybias 0 + set g_balance_shockwave_blast_jump_force_zscale 1.25 + set g_balance_shockwave_blast_jump_multiplier_accuracy 0.5 + set g_balance_shockwave_blast_jump_multiplier_distance 0.5 + set g_balance_shockwave_blast_jump_multiplier_min 0 + set g_balance_shockwave_blast_jump_radius 150 + set g_balance_shockwave_blast_multiplier_accuracy 0.5 + set g_balance_shockwave_blast_multiplier_distance 0.5 + set g_balance_shockwave_blast_multiplier_min 0 + set g_balance_shockwave_blast_refire 0.75 + set g_balance_shockwave_blast_splash_damage 15 + set g_balance_shockwave_blast_splash_edgedamage 0 + set g_balance_shockwave_blast_splash_force 100 + set g_balance_shockwave_blast_splash_force_forwardbias 50 + set g_balance_shockwave_blast_splash_multiplier_accuracy 0.5 + set g_balance_shockwave_blast_splash_multiplier_distance 0.5 + set g_balance_shockwave_blast_splash_multiplier_min 0 + set g_balance_shockwave_blast_splash_radius 70 + set g_balance_shockwave_blast_spread_max 120 + set g_balance_shockwave_blast_spread_min 25 + set g_balance_shockwave_melee_animtime 1.3 + set g_balance_shockwave_melee_damage 80 + set g_balance_shockwave_melee_delay 0.25 + set g_balance_shockwave_melee_force 200 + set g_balance_shockwave_melee_multihit 1 + set g_balance_shockwave_melee_no_doubleslap 1 + set g_balance_shockwave_melee_nonplayerdamage 40 + set g_balance_shockwave_melee_range 120 + set g_balance_shockwave_melee_refire 1.25 + set g_balance_shockwave_melee_swing_side 120 + set g_balance_shockwave_melee_swing_up 30 + set g_balance_shockwave_melee_time 0.15 + set g_balance_shockwave_melee_traces 10 + set g_balance_shockwave_switchdelay_drop 0.2 + set g_balance_shockwave_switchdelay_raise 0.2 + set g_balance_shockwave_weaponreplace "" + set g_balance_shockwave_weaponstart 0 + set g_balance_shockwave_weaponstartoverride -1 + set g_balance_shockwave_weaponthrowable 0 + // }}} + // {{{ #20: Arc + set g_balance_arc_beam_ammo 4 + set g_balance_arc_beam_animtime 0.2 + set g_balance_arc_beam_botaimlifetime 0 + set g_balance_arc_beam_botaimspeed 0 + set g_balance_arc_beam_damage 115 + set g_balance_arc_beam_degreespersegment 1 + set g_balance_arc_beam_distancepersegment 0 + set g_balance_arc_beam_falloff_halflifedist 0 + set g_balance_arc_beam_falloff_maxdist 0 + set g_balance_arc_beam_falloff_mindist 0 + set g_balance_arc_beam_force 900 + set g_balance_arc_beam_healing_amax 100 + set g_balance_arc_beam_healing_aps 50 + set g_balance_arc_beam_healing_hmax 150 + set g_balance_arc_beam_healing_hps 50 + set g_balance_arc_cooldown 2.5 + set g_balance_arc_overheat_max 5 + set g_balance_arc_overheat_min 3 + set g_balance_arc_beam_heat 1 + set g_balance_arc_burst_heat 4 + set g_balance_arc_beam_maxangle 10 + set g_balance_arc_beam_nonplayerdamage 80 + set g_balance_arc_beam_range 1000 + set g_balance_arc_beam_refire 0.5 + set g_balance_arc_beam_returnspeed 8 + set g_balance_arc_beam_tightness 0.5 + set g_balance_arc_burst_ammo 15 + set g_balance_arc_burst_damage 250 + set g_balance_arc_burst_healing_aps 100 + set g_balance_arc_burst_healing_hps 100 + set g_balance_arc_switchdelay_drop 0.3 + set g_balance_arc_switchdelay_raise 0.3 + set g_balance_arc_weaponreplace "" + set g_balance_arc_weaponstart 0 + set g_balance_arc_weaponstartoverride -1 + set g_balance_arc_weaponthrowable 1 + // }}} ++// {{{ #21: Heavy Machine Gun ++set g_balance_hmg_ammo 0 ++set g_balance_hmg_damage 0 ++set g_balance_hmg_force 0 ++set g_balance_hmg_refire 0 ++set g_balance_hmg_reload_ammo 120 ++set g_balance_hmg_reload_time 1 ++set g_balance_hmg_solidpenetration 32 ++set g_balance_hmg_spread_add 0.01 ++set g_balance_hmg_spread_max 0.05 ++set g_balance_hmg_spread_min 0.02 ++set g_balance_hmg_switchdelay_drop 0.2 ++set g_balance_hmg_switchdelay_raise 0.2 ++set g_balance_hmg_weaponreplace "" ++set g_balance_hmg_weaponstart 0 ++set g_balance_hmg_weaponstartoverride 0 ++set g_balance_hmg_weaponthrowable 0 ++// }}} ++// {{{ #22: Rocket Propelled Chainsaw ++set g_balance_rpc_ammo 10 ++set g_balance_rpc_animtime 1 ++set g_balance_rpc_damage 150 ++set g_balance_rpc_damage2 500 ++set g_balance_rpc_damageforcescale 2 ++set g_balance_rpc_edgedamage 50 ++set g_balance_rpc_force 400 ++set g_balance_rpc_health 25 ++set g_balance_rpc_lifetime 30 ++set g_balance_rpc_radius 300 ++set g_balance_rpc_refire 1 ++set g_balance_rpc_reload_ammo 10 ++set g_balance_rpc_reload_time 1 ++set g_balance_rpc_speed 1250 ++set g_balance_rpc_speedaccel 5000 ++set g_balance_rpc_switchdelay_drop 0.2 ++set g_balance_rpc_switchdelay_raise 0.2 ++set g_balance_rpc_weaponreplace "" ++set g_balance_rpc_weaponstart 0 ++set g_balance_rpc_weaponstartoverride 0 ++set g_balance_rpc_weaponthrowable 0 ++// }}} diff --cc balance-overkill.cfg index 000000000,000000000..c33361838 new file mode 100644 --- /dev/null +++ b/balance-overkill.cfg @@@ -1,0 -1,0 +1,228 @@@ ++g_mod_balance Overkill ++ ++// {{{ starting gear ++set g_balance_health_start 100 ++set g_balance_armor_start 0 ++set g_start_ammo_shells 15 ++set g_start_ammo_nails 0 ++set g_start_ammo_rockets 0 ++set g_start_ammo_cells 0 ++set g_start_ammo_plasma 0 ++set g_start_ammo_fuel 0 ++set g_warmup_start_health 100 "starting values when being in warmup-stage" ++set g_warmup_start_armor 100 "starting values when being in warmup-stage" ++set g_warmup_start_ammo_shells 30 "starting values when being in warmup-stage" ++set g_warmup_start_ammo_nails 160 "starting values when being in warmup-stage" ++set g_warmup_start_ammo_rockets 80 "starting values when being in warmup-stage" ++set g_warmup_start_ammo_cells 90 "starting values when being in warmup-stage" ++set g_warmup_start_ammo_plasma 90 "starting values when being in warmup-stage" ++set g_warmup_start_ammo_fuel 0 "starting values when being in warmup-stage" ++set g_lms_start_health 200 ++set g_lms_start_armor 200 ++set g_lms_start_ammo_shells 60 ++set g_lms_start_ammo_nails 320 ++set g_lms_start_ammo_rockets 160 ++set g_lms_start_ammo_cells 180 ++set g_lms_start_ammo_plasma 180 ++set g_lms_start_ammo_fuel 0 ++set g_balance_nix_roundtime 25 ++set g_balance_nix_incrtime 1.6 ++set g_balance_nix_ammo_shells 60 ++set g_balance_nix_ammo_nails 320 ++set g_balance_nix_ammo_rockets 160 ++set g_balance_nix_ammo_cells 180 ++set g_balance_nix_ammo_plasma 180 ++set g_balance_nix_ammo_fuel 0 ++set g_balance_nix_ammoincr_shells 2 // eh this will need figured out later I assume ++set g_balance_nix_ammoincr_nails 6 ++set g_balance_nix_ammoincr_rockets 2 ++set g_balance_nix_ammoincr_cells 2 ++set g_balance_nix_ammoincr_plasma 2 ++set g_balance_nix_ammoincr_fuel 2 ++// }}} ++ ++// {{{ pickup items ++set g_pickup_ammo_anyway 1 ++set g_pickup_weapons_anyway 1 ++set g_pickup_shells 15 ++set g_pickup_shells_weapon 15 ++set g_pickup_shells_max 60 ++set g_pickup_nails 80 ++set g_pickup_nails_weapon 80 ++set g_pickup_nails_max 320 ++set g_pickup_rockets 40 ++set g_pickup_rockets_weapon 40 ++set g_pickup_rockets_max 160 ++set g_pickup_cells 30 ++set g_pickup_cells_weapon 30 ++set g_pickup_cells_max 180 ++set g_pickup_plasma 30 ++set g_pickup_plasma_weapon 30 ++set g_pickup_plasma_max 180 ++set g_pickup_fuel 50 ++set g_pickup_fuel_weapon 50 ++set g_pickup_fuel_jetpack 100 ++set g_pickup_fuel_max 100 ++set g_pickup_armorsmall 5 ++set g_pickup_armorsmall_max 20 ++set g_pickup_armorsmall_anyway 0 ++set g_pickup_armormedium 25 ++set g_pickup_armormedium_max 200 ++set g_pickup_armormedium_anyway 1 ++set g_pickup_armorbig 50 ++set g_pickup_armorbig_max 200 ++set g_pickup_armorbig_anyway 1 ++set g_pickup_armorlarge 100 ++set g_pickup_armorlarge_max 200 ++set g_pickup_armorlarge_anyway 1 ++set g_pickup_healthsmall 5 ++set g_pickup_healthsmall_max 200 ++set g_pickup_healthsmall_anyway 1 ++set g_pickup_healthmedium 25 ++set g_pickup_healthmedium_max 200 ++set g_pickup_healthmedium_anyway 1 ++set g_pickup_healthlarge 50 ++set g_pickup_healthlarge_max 200 ++set g_pickup_healthlarge_anyway 1 ++set g_pickup_healthmega 100 ++set g_pickup_healthmega_max 200 ++set g_pickup_healthmega_anyway 0 ++set g_pickup_respawntime_short 15 ++set g_pickup_respawntime_medium 20 ++set g_pickup_respawntime_long 30 ++set g_pickup_respawntime_powerup 120 ++set g_pickup_respawntime_weapon 10 ++set g_pickup_respawntime_superweapon 120 ++set g_pickup_respawntime_ammo 10 ++set g_pickup_respawntimejitter_short 0 ++set g_pickup_respawntimejitter_medium 0 ++set g_pickup_respawntimejitter_long 0 ++set g_pickup_respawntimejitter_powerup 0 ++set g_pickup_respawntimejitter_weapon 0 ++set g_pickup_respawntimejitter_superweapon 10 ++set g_pickup_respawntimejitter_ammo 0 ++// }}} ++ ++// {{{ regen/rot ++set g_balance_health_regen 0 ++set g_balance_health_regenlinear 100 ++set g_balance_pause_health_regen 2 ++set g_balance_pause_health_regen_spawn 0 ++set g_balance_health_rot 0 ++set g_balance_health_rotlinear 1 ++set g_balance_pause_health_rot 1 ++set g_balance_pause_health_rot_spawn 5 ++set g_balance_health_regenstable 100 ++set g_balance_health_rotstable 200 ++set g_balance_health_limit 999 ++set g_balance_armor_regen 0 ++set g_balance_armor_regenlinear 0 ++set g_balance_armor_rot 0 ++set g_balance_armor_rotlinear 1 ++set g_balance_pause_armor_rot 1 ++set g_balance_pause_armor_rot_spawn 5 ++set g_balance_armor_regenstable 100 ++set g_balance_armor_rotstable 0 ++set g_balance_armor_limit 999 ++set g_balance_armor_blockpercent 0.7 ++set g_balance_fuel_regen 0.1 "fuel regeneration (only applies if the player owns IT_FUEL_REGEN)" ++set g_balance_fuel_regenlinear 0 ++set g_balance_pause_fuel_regen 2 // other than this, fuel uses the health regen counter ++set g_balance_fuel_rot 0.05 ++set g_balance_fuel_rotlinear 0 ++set g_balance_pause_fuel_rot 5 ++set g_balance_pause_fuel_rot_spawn 10 ++set g_balance_fuel_regenstable 50 ++set g_balance_fuel_rotstable 100 ++set g_balance_fuel_limit 999 ++// }}} ++ ++// {{{ misc ++set g_balance_selfdamagepercent 0.65 ++set g_weaponspeedfactor 1 "weapon projectile speed multiplier" ++set g_weaponratefactor 1 "weapon fire rate multiplier" ++set g_weapondamagefactor 1 "weapon damage multiplier" ++set g_weaponforcefactor 1 "weapon force multiplier" ++set g_weaponspreadfactor 1 "weapon spread multiplier" ++set g_balance_firetransfer_time 0.9 ++set g_balance_firetransfer_damage 0.8 ++set g_throughfloor_damage 0.75 ++set g_throughfloor_force 0.75 ++set g_projectiles_damage -2 ++// possible values: ++// -2: absolutely no damage to projectiles (no exceptions) ++// -1: no damage other than the exceptions (electro combo, hagar join explode, ML mines) ++// 0: only damage from contents (lava/slime) or exceptions ++// 1: only self damage or damage from contents or exceptions ++// 2: allow all damage to projectiles normally ++set g_projectiles_keep_owner 0 ++set g_projectiles_newton_style 0 ++// possible values: ++// 0: absolute velocity projectiles (like Quake) ++// 1: relative velocity projectiles, "Newtonian" (like Tribes 2) ++// 2: relative velocity projectiles, but aim is precorrected so projectiles hit the crosshair (note: strafe rockets then are SLOWER than ones shot while standing, happens in 1 too when aiming correctly which is hard) ++set g_projectiles_newton_style_2_minfactor 1 ++set g_projectiles_newton_style_2_maxfactor 1.5 ++set g_projectiles_spread_style 7 ++// possible values: ++// 0: forward + solid sphere (like Quake) - varies velocity ++// 1: forward + flattened solid sphere ++// 2: forward + solid circle ++// 3: forward + normal distribution 3D - varies velocity ++// 4: forward + normal distribution on a plane ++// 5: forward + circle with 1-r falloff ++// 6: forward + circle with 1-r^2 falloff ++// 7: forward + circle with (1-r)(2-r) falloff ++set g_balance_falldamage_deadminspeed 250 ++set g_balance_falldamage_minspeed 900 ++set g_balance_falldamage_factor 0.20 ++set g_balance_falldamage_maxdamage 40 ++set g_balance_damagepush_speedfactor 2.5 ++set g_balance_contents_damagerate 0.2 // ticrate interval for applying damage with playerdamage/projectiledamage ++set g_balance_contents_drowndelay 10 // time under water before a player begins drowning ++set g_balance_contents_playerdamage_drowning 20 // damage per second for while player is drowning ++set g_balance_contents_playerdamage_lava 50 // damage per second for while player is inside lava ++set g_balance_contents_playerdamage_slime 30 // damage per second for while player is inside slime ++set g_balance_contents_projectiledamage 10000 // instantly kill projectiles upon touching lava/slime ++set g_maxpushtime 8.0 "timeout for kill credit when your damage knocks someone into a death trap" ++// }}} ++ ++// {{{ powerups ++set g_balance_powerup_invincible_takedamage 0.33 // only 1/3rd damage is taken ++set g_balance_powerup_invincible_time 30 ++set g_balance_powerup_strength_damage 3 ++set g_balance_powerup_strength_force 3 ++set g_balance_powerup_strength_time 30 ++set g_balance_powerup_strength_selfdamage 1.5 ++set g_balance_powerup_strength_selfforce 1.5 ++set g_balance_superweapons_time 30 ++// }}} ++ ++// {{{ jetpack/hook ++set g_jetpack_antigravity 0.8 "factor of gravity compensation of the jetpack" ++set g_jetpack_acceleration_side 1200 "acceleration of the jetpack in xy direction" ++set g_jetpack_acceleration_up 600 "acceleration of the jetpack in z direction (note: you have to factor in gravity here, if antigravity is not 1)" ++set g_jetpack_maxspeed_side 1200 "max speed of the jetpack in xy direction" ++set g_jetpack_maxspeed_up 600 "max speed of the jetpack in z direction" ++set g_jetpack_fuel 8 "fuel per second for jetpack" ++set g_jetpack_attenuation 2 "jetpack sound attenuation" ++ ++set g_grappling_hook_tarzan 2 // 2: can also pull players ++set g_balance_grapplehook_speed_fly 1800 ++set g_balance_grapplehook_speed_pull 2000 ++set g_balance_grapplehook_force_rubber 2000 ++set g_balance_grapplehook_force_rubber_overstretch 1000 ++set g_balance_grapplehook_length_min 50 ++set g_balance_grapplehook_stretch 50 ++set g_balance_grapplehook_airfriction 0.2 ++set g_balance_grapplehook_health 50 ++set g_balance_grapplehook_damagedbycontents 1 ++set g_balance_grapplehook_refire 0.2 ++// }}} ++ ++// {{{ port-o-launch ++set g_balance_portal_health 200 // these get recharged whenever the portal is used ++set g_balance_portal_lifetime 15 // these get recharged whenever the portal is used ++// }}} ++ ++exec bal-wep-xonotic.cfg diff --cc mutators.cfg index ef60d8193,c6716585c..adfcd2405 --- a/mutators.cfg +++ b/mutators.cfg @@@ -23,44 -23,16 +23,45 @@@ set sv_dodging_frozen 0 "allow dodging // =========== - // minstagib + // instagib // =========== - set g_minstagib 0 "enable minstagib" - set g_minstagib_extralives 1 "how many extra lives you will get per powerup" - set g_minstagib_ammo_start 10 "starting ammo" - set g_minstagib_ammo_drop 5 "how much ammo you'll get for weapons or cells" - set g_minstagib_invis_alpha 0.15 - set g_minstagib_speed_highspeed 1.5 "speed-multiplier that applies while you carry the invincibility powerup" + set g_instagib 0 "enable instagib" + set g_instagib_extralives 1 "how many extra lives you will get per powerup" + set g_instagib_ammo_start 10 "starting ammo" + set g_instagib_ammo_drop 5 "how much ammo you'll get for weapons or cells" + set g_instagib_invis_alpha 0.15 + set g_instagib_speed_highspeed 1.5 "speed-multiplier that applies while you carry the invincibility powerup" +// ========== +// 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_charge_rate_nex 0.5 - set g_overkill_ammo_charge_rate_uzi 0.5 ++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_uzi 0.025 ++set g_overkill_ammo_decharge_machinegun 0.025 +set g_overkill_ammo_decharge_shotgun 0.15 - set g_overkill_ammo_decharge_nex 0.2 ++set g_overkill_ammo_decharge_vortex 0.2 +set g_overkill_ammo_decharge_rpc 1 +set g_overkill_ammo_decharge_hmg 0.01 + + // ========= // vampire // ========= diff --cc qcsrc/client/View.qc index a4cf324d3,1e2c7b770..baf8202ac --- a/qcsrc/client/View.qc +++ b/qcsrc/client/View.qc @@@ -1436,16 -1520,14 +1520,18 @@@ void CSQC_UpdateView(float w, float h weapon_clipload = getstati(STAT_WEAPON_CLIPLOAD); weapon_clipsize = getstati(STAT_WEAPON_CLIPSIZE); - float nex_charge, nex_chargepool; - nex_charge = getstatf(STAT_NEX_CHARGE); - nex_chargepool = getstatf(STAT_NEX_CHARGEPOOL); - + float ok_ammo_charge, ok_ammo_chargepool; + ok_ammo_charge = getstatf(STAT_OK_AMMO_CHARGE); + ok_ammo_chargepool = getstatf(STAT_OK_AMMO_CHARGEPOOl); + - if(nex_charge_movingavg == 0) // this should only happen if we have just loaded up the game - nex_charge_movingavg = nex_charge; + float vortex_charge, vortex_chargepool; + vortex_charge = getstatf(STAT_VORTEX_CHARGE); + vortex_chargepool = getstatf(STAT_VORTEX_CHARGEPOOL); + + float arc_heat = getstatf(STAT_ARC_HEAT); + + if(vortex_charge_movingavg == 0) // this should only happen if we have just loaded up the game + vortex_charge_movingavg = vortex_charge; // handle the values diff --cc qcsrc/client/autocvars.qh index b8ad43a3e,b03a67a92..90a74a905 --- a/qcsrc/client/autocvars.qh +++ b/qcsrc/client/autocvars.qh @@@ -439,13 -452,4 +452,12 @@@ string autocvar__cl_playermodel float autocvar_cl_deathglow; float autocvar_developer_csqcentities; float autocvar_g_jetpack_attenuation; - - // OK Crosshair +var string autocvar_crosshair_hmg = ""; +var vector autocvar_crosshair_hmg_color = '0.2 1.0 0.2'; +var float autocvar_crosshair_hmg_alpha = 1; +var float autocvar_crosshair_hmg_size = 1; +var string autocvar_crosshair_rpc = ""; +var vector autocvar_crosshair_rpc_color = '0.2 1.0 0.2'; +var float autocvar_crosshair_rpc_alpha = 1; +var float autocvar_crosshair_rpc_size = 1; + float autocvar_cl_nade_timer; diff --cc qcsrc/client/weapons/projectile.qc index 000000000,0d2bce943..ba6491ffb mode 000000,100644..100644 --- a/qcsrc/client/weapons/projectile.qc +++ b/qcsrc/client/weapons/projectile.qc @@@ -1,0 -1,511 +1,515 @@@ + .vector iorigin1, iorigin2; + .float spawntime; + .vector trail_oldorigin; + .float trail_oldtime; + .float fade_time, fade_rate; + + void SUB_Stop() + { + self.move_velocity = self.move_avelocity = '0 0 0'; + self.move_movetype = MOVETYPE_NONE; + } + + .float alphamod; + .float count; // set if clientside projectile + .float cnt; // sound index + .float gravity; + .float snd_looping; + .float silent; + + void Projectile_ResetTrail(vector to) + { + self.trail_oldorigin = to; + self.trail_oldtime = time; + } + + void Projectile_DrawTrail(vector to) + { + vector from; + float t0; + + from = self.trail_oldorigin; + t0 = self.trail_oldtime; + self.trail_oldorigin = to; + self.trail_oldtime = time; + + // force the effect even for stationary firemine + if(self.cnt == PROJECTILE_FIREMINE) + if(from == to) + from_z += 1; + + if (self.traileffect) + { + particles_alphamin = particles_alphamax = particles_fade = sqrt(self.alpha); + boxparticles(self.traileffect, self, from, to, self.velocity, self.velocity, 1, PARTICLES_USEALPHA | PARTICLES_USEFADE | PARTICLES_DRAWASTRAIL); + } + } + + .float proj_time; + void Projectile_Draw() + { + vector rot; + vector trailorigin; + float f; + float drawn; + float t; + float a; + float dt = time - self.proj_time; + + self.proj_time = time; + if(dt <= 0) { return; } + + f = self.move_flags; + + if(self.count & 0x80) + { + //self.move_flags &= ~FL_ONGROUND; + if(self.move_movetype == MOVETYPE_NONE || self.move_movetype == MOVETYPE_FLY) + Movetype_Physics_NoMatchServer(); + // the trivial movetypes do not have to match the + // server's ticrate as they are ticrate independent + // NOTE: this assumption is only true if MOVETYPE_FLY + // projectiles detonate on impact. If they continue + // moving, we might still be ticrate dependent. + else + Movetype_Physics_MatchServer(autocvar_cl_projectiles_sloppy); + if(!(self.move_flags & FL_ONGROUND)) + if(self.velocity != '0 0 0') + self.move_angles = self.angles = vectoangles(self.velocity); + } + else + { + InterpolateOrigin_Do(); + } + + if(self.count & 0x80) + { + drawn = (time >= self.spawntime - 0.02); + t = max(time, self.spawntime); + } + else + { + drawn = (self.iflags & IFLAG_VALID); + t = time; + } + + if(!(f & FL_ONGROUND)) + { + rot = '0 0 0'; + switch(self.cnt) + { + /* + case PROJECTILE_GRENADE: + rot = '-2000 0 0'; // forward + break; + */ + case PROJECTILE_GRENADE_BOUNCING: + rot = '0 -1000 0'; // sideways + break; + case PROJECTILE_HOOKBOMB: + rot = '1000 0 0'; // forward + break; + default: + break; + } + + if(Nade_IDFromProjectile(self.cnt) != 0) + rot = self.avelocity; + + self.angles = AnglesTransform_ToAngles(AnglesTransform_Multiply(AnglesTransform_FromAngles(self.angles), rot * (t - self.spawntime))); + } + + vector ang; + ang = self.angles; + ang_x = -ang_x; + makevectors(ang); + + a = 1 - (time - self.fade_time) * self.fade_rate; + self.alpha = bound(0, self.alphamod * a, 1); + if(self.alpha <= 0) + drawn = 0; + self.renderflags = 0; + + trailorigin = self.origin; + switch(self.cnt) + { + case PROJECTILE_GRENADE: + case PROJECTILE_GRENADE_BOUNCING: + trailorigin += v_right * 1 + v_forward * -10; + break; + default: + break; + } + + if(Nade_IDFromProjectile(self.cnt) != 0) + trailorigin += v_up * 4; + + if(drawn) + Projectile_DrawTrail(trailorigin); + else + Projectile_ResetTrail(trailorigin); + + self.drawmask = 0; + + if(!drawn) + return; + + switch(self.cnt) + { + // Possibly add dlights here. + default: + break; + } + + self.drawmask = MASK_NORMAL; + } + + void loopsound(entity e, float ch, string samp, float vol, float attn) + { + if(self.silent) + return; + + sound(e, ch, samp, vol, attn); + e.snd_looping = ch; + } + + void Ent_RemoveProjectile() + { + if(self.count & 0x80) + { + tracebox(self.origin, self.mins, self.maxs, self.origin + self.velocity * 0.05, MOVE_NORMAL, self); + Projectile_DrawTrail(trace_endpos); + } + } + + void Ent_Projectile() + { + float f; + + // projectile properties: + // kind (interpolated, or clientside) + // + // modelindex + // origin + // scale + // if clientside: + // velocity + // gravity + // soundindex (hardcoded list) + // effects + // + // projectiles don't send angles, because they always follow the velocity + + f = ReadByte(); + self.count = (f & 0x80); + self.iflags = (self.iflags & IFLAG_INTERNALMASK) | IFLAG_AUTOANGLES | IFLAG_ANGLES | IFLAG_ORIGIN; + self.solid = SOLID_TRIGGER; + self.proj_time = time; + //self.effects = EF_NOMODELFLAGS; + + // this should make collisions with bmodels more exact, but it leads to + // projectiles no longer being able to lie on a bmodel + self.move_nomonsters = MOVE_WORLDONLY; + if(f & 0x40) + self.move_flags |= FL_ONGROUND; + else + self.move_flags &= ~FL_ONGROUND; + + if(!self.move_time) + { + // for some unknown reason, we don't need to care for + // sv_gameplayfix_delayprojectiles here. + self.move_time = time; + self.spawntime = time; + } + else + self.move_time = max(self.move_time, time); + + if(!(self.count & 0x80)) + InterpolateOrigin_Undo(); + + if(f & 1) + { + self.origin_x = ReadCoord(); + self.origin_y = ReadCoord(); + self.origin_z = ReadCoord(); + setorigin(self, self.origin); + if(self.count & 0x80) + { + self.velocity_x = ReadCoord(); + self.velocity_y = ReadCoord(); + self.velocity_z = ReadCoord(); + if(f & 0x10) + self.gravity = ReadCoord(); + else + self.gravity = 0; // none + self.move_origin = self.origin; + self.move_velocity = self.velocity; + } + + if(time == self.spawntime || (self.count & 0x80) || (f & 0x08)) + { + self.trail_oldorigin = self.origin; + if(!(self.count & 0x80)) + InterpolateOrigin_Reset(); + } + + if(f & 0x20) + { + self.fade_time = time + ReadByte() * ticrate; + self.fade_rate = 1 / (ReadByte() * ticrate); + } + else + { + self.fade_time = 0; + self.fade_rate = 0; + } + + self.team = ReadByte() - 1; + } + + if(f & 2) + { + self.cnt = ReadByte(); + + self.silent = (self.cnt & 0x80); + self.cnt = (self.cnt & 0x7F); + + self.scale = 1; + self.traileffect = 0; + switch(self.cnt) + { + case PROJECTILE_ELECTRO: setmodel(self, "models/ebomb.mdl");self.traileffect = particleeffectnum("TR_NEXUIZPLASMA"); break; + case PROJECTILE_ROCKET: setmodel(self, "models/rocket.md3");self.traileffect = particleeffectnum("TR_ROCKET"); self.scale = 2; break; + case PROJECTILE_CRYLINK: setmodel(self, "models/plasmatrail.mdl");self.traileffect = particleeffectnum("TR_CRYLINKPLASMA"); break; + case PROJECTILE_CRYLINK_BOUNCING: setmodel(self, "models/plasmatrail.mdl");self.traileffect = particleeffectnum("TR_CRYLINKPLASMA"); break; + case PROJECTILE_ELECTRO_BEAM: setmodel(self, "models/elaser.mdl");self.traileffect = particleeffectnum("TR_NEXUIZPLASMA"); break; + case PROJECTILE_GRENADE: setmodel(self, "models/grenademodel.md3");self.traileffect = particleeffectnum("TR_GRENADE"); break; + case PROJECTILE_GRENADE_BOUNCING: setmodel(self, "models/grenademodel.md3");self.traileffect = particleeffectnum("TR_GRENADE"); break; + case PROJECTILE_MINE: setmodel(self, "models/mine.md3");self.traileffect = particleeffectnum("TR_GRENADE"); break; + case PROJECTILE_BLASTER: setmodel(self, "models/laser.mdl");self.traileffect = particleeffectnum(""); break; + case PROJECTILE_HLAC: setmodel(self, "models/hlac_bullet.md3");self.traileffect = particleeffectnum(""); break; + case PROJECTILE_PORTO_RED: setmodel(self, "models/grenademodel.md3");self.traileffect = particleeffectnum("TR_WIZSPIKE"); self.scale = 4; break; + case PROJECTILE_PORTO_BLUE: setmodel(self, "models/grenademodel.md3");self.traileffect = particleeffectnum("TR_WIZSPIKE"); self.scale = 4; break; + case PROJECTILE_HOOKBOMB: setmodel(self, "models/grenademodel.md3");self.traileffect = particleeffectnum("TR_KNIGHTSPIKE"); break; + case PROJECTILE_HAGAR: setmodel(self, "models/hagarmissile.mdl");self.traileffect = particleeffectnum("tr_hagar"); self.scale = 0.75; break; + case PROJECTILE_HAGAR_BOUNCING: setmodel(self, "models/hagarmissile.mdl");self.traileffect = particleeffectnum("tr_hagar"); self.scale = 0.75; break; + case PROJECTILE_NAPALM_FOUNTAIN: //self.model = ""; self.modelindex = 0; self.traileffect = particleeffectnum("torch_small"); break; + case PROJECTILE_FIREBALL: self.model = ""; self.modelindex = 0; self.traileffect = particleeffectnum("fireball"); break; // particle effect is good enough + case PROJECTILE_FIREMINE: self.model = ""; self.modelindex = 0; self.traileffect = particleeffectnum("firemine"); break; // particle effect is good enough + case PROJECTILE_TAG: setmodel(self, "models/laser.mdl"); self.traileffect = particleeffectnum("TR_ROCKET"); break; + case PROJECTILE_FLAC: setmodel(self, "models/hagarmissile.mdl"); self.scale = 0.4; self.traileffect = particleeffectnum("TR_SEEKER"); break; + case PROJECTILE_SEEKER: setmodel(self, "models/tagrocket.md3"); self.traileffect = particleeffectnum("TR_SEEKER"); break; + + case PROJECTILE_MAGE_SPIKE: setmodel(self, "models/ebomb.mdl"); self.traileffect = particleeffectnum("TR_VORESPIKE"); break; + case PROJECTILE_SHAMBLER_LIGHTNING: setmodel(self, "models/ebomb.mdl"); self.traileffect = particleeffectnum("TR_NEXUIZPLASMA"); break; + + case PROJECTILE_RAPTORBOMB: setmodel(self, "models/vehicles/clusterbomb.md3"); self.gravity = 1; self.avelocity = '0 0 180'; self.traileffect = particleeffectnum(""); break; + case PROJECTILE_RAPTORBOMBLET: setmodel(self, "models/vehicles/bomblet.md3"); self.gravity = 1; self.avelocity = '0 0 180'; self.traileffect = particleeffectnum(""); break; + case PROJECTILE_RAPTORCANNON: setmodel(self, "models/plasmatrail.mdl"); self.traileffect = particleeffectnum("TR_CRYLINKPLASMA"); break; + + case PROJECTILE_SPIDERROCKET: setmodel(self, "models/vehicles/rocket02.md3"); self.traileffect = particleeffectnum("spiderbot_rocket_thrust"); break; + case PROJECTILE_WAKIROCKET: setmodel(self, "models/vehicles/rocket01.md3"); self.traileffect = particleeffectnum("wakizashi_rocket_thrust"); break; + case PROJECTILE_WAKICANNON: setmodel(self, "models/laser.mdl"); self.traileffect = particleeffectnum(""); break; + + case PROJECTILE_BUMBLE_GUN: setmodel(self, "models/elaser.mdl");self.traileffect = particleeffectnum("TR_NEXUIZPLASMA"); break; + case PROJECTILE_BUMBLE_BEAM: setmodel(self, "models/elaser.mdl");self.traileffect = particleeffectnum("TR_NEXUIZPLASMA"); break; + ++ case PROJECTILE_RPC: setmodel(self, "models/weapons/ok_rocket.md3");self.traileffect = particleeffectnum("TR_ROCKET"); break; ++ + default: + if(Nade_IDFromProjectile(self.cnt) != 0) { setmodel(self, "models/weapons/v_ok_grenade.md3");self.traileffect = particleeffectnum(Nade_TrailEffect(self.cnt, self.team)); break; } + error("Received invalid CSQC projectile, can't work with this!"); + break; + } + + self.mins = '0 0 0'; + self.maxs = '0 0 0'; + self.colormod = '0 0 0'; + self.move_touch = SUB_Stop; + self.move_movetype = MOVETYPE_TOSS; + self.alphamod = 1; + + switch(self.cnt) + { + case PROJECTILE_ELECTRO: + // only new engines support sound moving with object + loopsound(self, CH_SHOTS_SINGLE, "weapons/electro_fly.wav", VOL_BASE, ATTEN_NORM); + self.mins = '0 0 -4'; + self.maxs = '0 0 -4'; + self.move_movetype = MOVETYPE_BOUNCE; + self.move_touch = func_null; + self.move_bounce_factor = g_balance_electro_secondary_bouncefactor; + self.move_bounce_stopspeed = g_balance_electro_secondary_bouncestop; + break; ++ case PROJECTILE_RPC: + case PROJECTILE_ROCKET: + loopsound(self, CH_SHOTS_SINGLE, "weapons/rocket_fly.wav", VOL_BASE, ATTEN_NORM); + self.mins = '-3 -3 -3'; + self.maxs = '3 3 3'; + break; + case PROJECTILE_GRENADE: + self.mins = '-3 -3 -3'; + self.maxs = '3 3 3'; + break; + case PROJECTILE_GRENADE_BOUNCING: + self.mins = '-3 -3 -3'; + self.maxs = '3 3 3'; + self.move_movetype = MOVETYPE_BOUNCE; + self.move_touch = func_null; + self.move_bounce_factor = g_balance_mortar_bouncefactor; + self.move_bounce_stopspeed = g_balance_mortar_bouncestop; + break; + case PROJECTILE_SHAMBLER_LIGHTNING: + self.mins = '-8 -8 -8'; + self.maxs = '8 8 8'; + self.scale = 2.5; + self.avelocity = randomvec() * 720; + break; + case PROJECTILE_MINE: + self.mins = '-4 -4 -4'; + self.maxs = '4 4 4'; + break; + case PROJECTILE_PORTO_RED: + self.colormod = '2 1 1'; + self.alphamod = 0.5; + self.move_movetype = MOVETYPE_BOUNCE; + self.move_touch = func_null; + break; + case PROJECTILE_PORTO_BLUE: + self.colormod = '1 1 2'; + self.alphamod = 0.5; + self.move_movetype = MOVETYPE_BOUNCE; + self.move_touch = func_null; + break; + case PROJECTILE_HAGAR_BOUNCING: + self.move_movetype = MOVETYPE_BOUNCE; + self.move_touch = func_null; + break; + case PROJECTILE_CRYLINK_BOUNCING: + self.move_movetype = MOVETYPE_BOUNCE; + self.move_touch = func_null; + break; + case PROJECTILE_NAPALM_FOUNTAIN: + case PROJECTILE_FIREBALL: + loopsound(self, CH_SHOTS_SINGLE, "weapons/fireball_fly2.wav", VOL_BASE, ATTEN_NORM); + self.mins = '-16 -16 -16'; + self.maxs = '16 16 16'; + break; + case PROJECTILE_FIREMINE: + loopsound(self, CH_SHOTS_SINGLE, "weapons/fireball_fly.wav", VOL_BASE, ATTEN_NORM); + self.move_movetype = MOVETYPE_BOUNCE; + self.move_touch = func_null; + self.mins = '-4 -4 -4'; + self.maxs = '4 4 4'; + break; + case PROJECTILE_TAG: + self.mins = '-2 -2 -2'; + self.maxs = '2 2 2'; + break; + case PROJECTILE_FLAC: + self.mins = '-2 -2 -2'; + self.maxs = '2 2 2'; + break; + case PROJECTILE_SEEKER: + loopsound(self, CH_SHOTS_SINGLE, "weapons/tag_rocket_fly.wav", VOL_BASE, ATTEN_NORM); + self.mins = '-4 -4 -4'; + self.maxs = '4 4 4'; + break; + case PROJECTILE_RAPTORBOMB: + self.mins = '-3 -3 -3'; + self.maxs = '3 3 3'; + break; + case PROJECTILE_RAPTORBOMBLET: + break; + case PROJECTILE_RAPTORCANNON: + break; + case PROJECTILE_SPIDERROCKET: + loopsound(self, CH_SHOTS_SINGLE, "weapons/tag_rocket_fly.wav", VOL_BASE, ATTEN_NORM); + break; + case PROJECTILE_WAKIROCKET: + loopsound(self, CH_SHOTS_SINGLE, "weapons/tag_rocket_fly.wav", VOL_BASE, ATTEN_NORM); + break; + /* + case PROJECTILE_WAKICANNON: + break; + case PROJECTILE_BUMBLE_GUN: + // only new engines support sound moving with object + loopsound(self, CH_SHOTS_SINGLE, "weapons/electro_fly.wav", VOL_BASE, ATTEN_NORM); + self.mins = '0 0 -4'; + self.maxs = '0 0 -4'; + self.move_movetype = MOVETYPE_BOUNCE; + self.move_touch = func_null; + self.move_bounce_factor = g_balance_electro_secondary_bouncefactor; + self.move_bounce_stopspeed = g_balance_electro_secondary_bouncestop; + break; + */ + default: + break; + } + + if(Nade_IDFromProjectile(self.cnt) != 0) + { + self.mins = '-16 -16 -16'; + self.maxs = '16 16 16'; + self.colormod = Nade_Color(Nade_IDFromProjectile(self.cnt)); + self.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_PLAYERCLIP | DPCONTENTS_BOTCLIP; + self.move_movetype = MOVETYPE_BOUNCE; + self.move_touch = func_null; + self.scale = 1.5; + self.avelocity = randomvec() * 720; + + if(Nade_IDFromProjectile(self.cnt) == NADE_TYPE_TRANSLOCATE) + self.solid = SOLID_TRIGGER; + } + + setsize(self, self.mins, self.maxs); + } + + if(self.gravity) + { + if(self.move_movetype == MOVETYPE_FLY) + self.move_movetype = MOVETYPE_TOSS; + if(self.move_movetype == MOVETYPE_BOUNCEMISSILE) + self.move_movetype = MOVETYPE_BOUNCE; + } + else + { + if(self.move_movetype == MOVETYPE_TOSS) + self.move_movetype = MOVETYPE_FLY; + if(self.move_movetype == MOVETYPE_BOUNCE) + self.move_movetype = MOVETYPE_BOUNCEMISSILE; + } + + if(!(self.count & 0x80)) + InterpolateOrigin_Note(); + + self.draw = Projectile_Draw; + self.entremove = Ent_RemoveProjectile; + } + + void Projectile_Precache() + { + precache_model("models/ebomb.mdl"); + precache_model("models/elaser.mdl"); + precache_model("models/grenademodel.md3"); + precache_model("models/mine.md3"); + precache_model("models/hagarmissile.mdl"); + precache_model("models/hlac_bullet.md3"); + precache_model("models/laser.mdl"); + precache_model("models/plasmatrail.mdl"); + precache_model("models/rocket.md3"); + precache_model("models/tagrocket.md3"); + precache_model("models/tracer.mdl"); + precache_model("models/sphere/sphere.md3"); + + precache_model("models/weapons/v_ok_grenade.md3"); ++ precache_model("models/weapons/ok_rocket.md3"); + + precache_sound("weapons/electro_fly.wav"); + precache_sound("weapons/rocket_fly.wav"); + precache_sound("weapons/fireball_fly.wav"); + precache_sound("weapons/fireball_fly2.wav"); + precache_sound("weapons/tag_rocket_fly.wav"); + + } diff --cc qcsrc/common/constants.qh index 0242da7e2,21216452c..8586cffa9 --- a/qcsrc/common/constants.qh +++ b/qcsrc/common/constants.qh @@@ -364,19 -273,6 +273,8 @@@ const float PROJECTILE_BUMBLE_BEAM = 31 const float PROJECTILE_MAGE_SPIKE = 32; const float PROJECTILE_SHAMBLER_LIGHTNING = 33; - const float PROJECTILE_NADE_RED = 50; - const float PROJECTILE_NADE_RED_BURN = 51; - const float PROJECTILE_NADE_BLUE = 52; - const float PROJECTILE_NADE_BLUE_BURN = 53; - const float PROJECTILE_NADE_YELLOW = 54; - const float PROJECTILE_NADE_YELLOW_BURN = 55; - const float PROJECTILE_NADE_PINK = 56; - const float PROJECTILE_NADE_PINK_BURN = 57; - const float PROJECTILE_NADE = 58; - const float PROJECTILE_NADE_BURN = 59; - +const float PROJECTILE_RPC = 60; + const float SPECIES_HUMAN = 0; const float SPECIES_ROBOT_SOLID = 1; const float SPECIES_ALIEN = 2; diff --cc qcsrc/common/notifications.qh index 31e350e16,471e22cfd..a879cb489 --- a/qcsrc/common/notifications.qh +++ b/qcsrc/common/notifications.qh @@@ -16,63 -16,63 +16,63 @@@ #define NOTIF_ABORT -1234 // allows Send_Notification to safely abort sending #define EIGHT_VARS_TO_VARARGS_VARLIST \ -- VARITEM(1, 0, s1) \ -- VARITEM(2, 0, XPD(s1, s2)) \ -- VARITEM(3, 0, XPD(s1, s2, s3)) \ -- VARITEM(4, 0, XPD(s1, s2, s3, s4)) \ -- VARITEM(0, 1, f1) \ -- VARITEM(1, 1, XPD(s1, f1)) \ -- VARITEM(2, 1, XPD(s1, s2, f1)) \ -- VARITEM(3, 1, XPD(s1, s2, s3, f1)) \ -- VARITEM(4, 1, XPD(s1, s2, s3, s4, f1)) \ -- VARITEM(0, 2, XPD(f1, f2)) \ -- VARITEM(1, 2, XPD(s1, f1, f2)) \ -- VARITEM(2, 2, XPD(s1, s2, f1, f2)) \ -- VARITEM(3, 2, XPD(s1, s2, s3, f1, f2)) \ -- VARITEM(4, 2, XPD(s1, s2, s3, s4, f1, f2)) \ -- VARITEM(0, 3, XPD(f1, f2, f3)) \ -- VARITEM(1, 3, XPD(s1, f1, f2, f3)) \ -- VARITEM(2, 3, XPD(s1, s2, f1, f2, f3)) \ -- VARITEM(3, 3, XPD(s1, s2, s3, f1, f2, f3)) \ -- VARITEM(4, 3, XPD(s1, s2, s3, s4, f1, f2, f3)) \ -- VARITEM(0, 4, XPD(f1, f2, f3, f4)) \ -- VARITEM(1, 4, XPD(s1, f1, f2, f3, f4)) \ -- VARITEM(2, 4, XPD(s1, s2, f1, f2, f3, f4)) \ -- VARITEM(3, 4, XPD(s1, s2, s3, f1, f2, f3, f4)) \ -- VARITEM(4, 4, XPD(s1, s2, s3, s4, f1, f2, f3, f4)) ++ VARITEM(1, 0, s1) \ ++ VARITEM(2, 0, XPD(s1, s2)) \ ++ VARITEM(3, 0, XPD(s1, s2, s3)) \ ++ VARITEM(4, 0, XPD(s1, s2, s3, s4)) \ ++ VARITEM(0, 1, f1) \ ++ VARITEM(1, 1, XPD(s1, f1)) \ ++ VARITEM(2, 1, XPD(s1, s2, f1)) \ ++ VARITEM(3, 1, XPD(s1, s2, s3, f1)) \ ++ VARITEM(4, 1, XPD(s1, s2, s3, s4, f1)) \ ++ VARITEM(0, 2, XPD(f1, f2)) \ ++ VARITEM(1, 2, XPD(s1, f1, f2)) \ ++ VARITEM(2, 2, XPD(s1, s2, f1, f2)) \ ++ VARITEM(3, 2, XPD(s1, s2, s3, f1, f2)) \ ++ VARITEM(4, 2, XPD(s1, s2, s3, s4, f1, f2)) \ ++ VARITEM(0, 3, XPD(f1, f2, f3)) \ ++ VARITEM(1, 3, XPD(s1, f1, f2, f3)) \ ++ VARITEM(2, 3, XPD(s1, s2, f1, f2, f3)) \ ++ VARITEM(3, 3, XPD(s1, s2, s3, f1, f2, f3)) \ ++ VARITEM(4, 3, XPD(s1, s2, s3, s4, f1, f2, f3)) \ ++ VARITEM(0, 4, XPD(f1, f2, f3, f4)) \ ++ VARITEM(1, 4, XPD(s1, f1, f2, f3, f4)) \ ++ VARITEM(2, 4, XPD(s1, s2, f1, f2, f3, f4)) \ ++ VARITEM(3, 4, XPD(s1, s2, s3, f1, f2, f3, f4)) \ ++ VARITEM(4, 4, XPD(s1, s2, s3, s4, f1, f2, f3, f4)) void Destroy_All_Notifications(void); void Create_Notification_Entity( -- float var_default, -- float var_cvar, -- float typeid, -- float nameid, -- string namestring, -- float strnum, -- float flnum, -- /* MSG_ANNCE */ -- float channel, -- string snd, -- float vol, -- float position, -- /* MSG_INFO & MSG_CENTER */ -- string args, -- string hudargs, -- string icon, -- float cpid, -- string durcnt, -- string normal, -- string gentle, -- /* MSG_MULTI */ -- float anncename, -- float infoname, -- float centername, -- /* MSG_CHOICE */ -- float challow_def, -- float challow_var, -- float chtype, -- float optiona, -- float optionb); ++ float var_default, ++ float var_cvar, ++ float typeid, ++ float nameid, ++ string namestring, ++ float strnum, ++ float flnum, ++ /* MSG_ANNCE */ ++ float channel, ++ string snd, ++ float vol, ++ float position, ++ /* MSG_INFO & MSG_CENTER */ ++ string args, ++ string hudargs, ++ string icon, ++ float cpid, ++ string durcnt, ++ string normal, ++ string gentle, ++ /* MSG_MULTI */ ++ float anncename, ++ float infoname, ++ float centername, ++ /* MSG_CHOICE */ ++ float challow_def, ++ float challow_var, ++ float chtype, ++ float optiona, ++ float optionb); void Dump_Notifications(float fh, float alsoprint); @@@ -82,10 -82,10 +82,10 @@@ void Debug_Notification(string input) void Local_Notification(float net_type, float net_name, ...count); void Local_Notification_WOVA( -- float net_type, float net_name, -- float stringcount, float floatcount, -- string s1, string s2, string s3, string s4, -- float f1, float f2, float f3, float f4); ++ float net_type, float net_name, ++ float stringcount, float floatcount, ++ string s1, string s2, string s3, string s4, ++ float f1, float f2, float f3, float f4); #ifdef CSQC // CLIENT ONLY void Read_Notification(float is_new); @@@ -102,23 -102,23 +102,23 @@@ float prev_soundtime #define NOTIF_ALL_EXCEPT 6 void Kill_Notification( -- float broadcast, entity client, -- float net_type, float net_name); ++ float broadcast, entity client, ++ float net_type, float net_name); void Send_Notification( -- float broadcast, entity client, -- float net_type, float net_name, -- ...count); ++ float broadcast, entity client, ++ float net_type, float net_name, ++ ...count); void Send_Notification_WOVA( -- float broadcast, entity client, -- float net_type, float net_name, -- float stringcount, float floatcount, -- string s1, string s2, string s3, string s4, -- float f1, float f2, float f3, float f4); ++ float broadcast, entity client, ++ float net_type, float net_name, ++ float stringcount, float floatcount, ++ string s1, string s2, string s3, string s4, ++ float f1, float f2, float f3, float f4); void Send_Notification_WOCOVA( -- float broadcast, entity client, -- float net_type, float net_name, -- string s1, string s2, string s3, string s4, -- float f1, float f2, float f3, float f4); ++ float broadcast, entity client, ++ float net_type, float net_name, ++ string s1, string s2, string s3, string s4, ++ float f1, float f2, float f3, float f4); #endif @@@ -218,648 -218,687 +218,700 @@@ */ #define MULTITEAM_ANNCE2(default,prefix,channel,sound,volume,position) \ -- MSG_ANNCE_NOTIF(default, prefix##RED, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_1)), volume, position) \ -- MSG_ANNCE_NOTIF(default, prefix##BLUE, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_2)), volume, position) ++ MSG_ANNCE_NOTIF(default, prefix##RED, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_1)), volume, position) \ ++ MSG_ANNCE_NOTIF(default, prefix##BLUE, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_2)), volume, position) #define MULTITEAM_ANNCE3(default,prefix,channel,sound,volume,position) \ -- MSG_ANNCE_NOTIF(default, prefix##RED, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_1)), volume, position) \ -- MSG_ANNCE_NOTIF(default, prefix##BLUE, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_2)), volume, position) \ -- MSG_ANNCE_NOTIF(default, prefix##YELLOW, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_3)), volume, position) ++ MSG_ANNCE_NOTIF(default, prefix##RED, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_1)), volume, position) \ ++ MSG_ANNCE_NOTIF(default, prefix##BLUE, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_2)), volume, position) \ ++ MSG_ANNCE_NOTIF(default, prefix##YELLOW, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_3)), volume, position) #define MULTITEAM_ANNCE4(default,prefix,channel,sound,volume,position) \ -- MSG_ANNCE_NOTIF(default, prefix##RED, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_1)), volume, position) \ -- MSG_ANNCE_NOTIF(default, prefix##BLUE, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_2)), volume, position) \ -- MSG_ANNCE_NOTIF(default, prefix##YELLOW, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_3)), volume, position) \ -- MSG_ANNCE_NOTIF(default, prefix##PINK, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_4)), volume, position) ++ MSG_ANNCE_NOTIF(default, prefix##RED, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_1)), volume, position) \ ++ MSG_ANNCE_NOTIF(default, prefix##BLUE, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_2)), volume, position) \ ++ MSG_ANNCE_NOTIF(default, prefix##YELLOW, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_3)), volume, position) \ ++ MSG_ANNCE_NOTIF(default, prefix##PINK, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_4)), volume, position) #define MULTITEAM_ANNCE(default,prefix,teams,channel,sound,volume,position) \ -- MULTITEAM_ANNCE##teams(default,prefix,channel,sound,volume,position) ++ MULTITEAM_ANNCE##teams(default,prefix,channel,sound,volume,position) #define MSG_ANNCE_NOTIFICATIONS \ -- MSG_ANNCE_NOTIF(1, ANNCE_ACHIEVEMENT_AIRSHOT, CH_INFO, "airshot", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(1, ANNCE_ACHIEVEMENT_AMAZING, CH_INFO, "amazing", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(1, ANNCE_ACHIEVEMENT_AWESOME, CH_INFO, "awesome", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(1, ANNCE_ACHIEVEMENT_BOTLIKE, CH_INFO, "botlike", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(2, ANNCE_ACHIEVEMENT_ELECTROBITCH, CH_INFO, "electrobitch", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(1, ANNCE_ACHIEVEMENT_IMPRESSIVE, CH_INFO, "impressive", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(1, ANNCE_ACHIEVEMENT_YODA, CH_INFO, "yoda", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(2, ANNCE_BEGIN, CH_INFO, "begin", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_03, CH_INFO, "03kills", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_05, CH_INFO, "05kills", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_10, CH_INFO, "10kills", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_15, CH_INFO, "15kills", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_20, CH_INFO, "20kills", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_25, CH_INFO, "25kills", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_30, CH_INFO, "30kills", VOL_BASEVOICE, ATTEN_NONE) \ - MSG_ANNCE_NOTIF(1, ANNCE_MINSTAGIB_LASTSECOND, CH_INFO, "lastsecond", VOL_BASEVOICE, ATTEN_NONE) \ - MSG_ANNCE_NOTIF(1, ANNCE_MINSTAGIB_NARROWLY, CH_INFO, "narrowly", VOL_BASEVOICE, ATTEN_NONE) \ - MSG_ANNCE_NOTIF(1, ANNCE_MINSTAGIB_TERMINATED, CH_INFO, "terminated", VOL_BASEVOICE, ATTEN_NONE) \ - MSG_ANNCE_NOTIF(1, ANNCE_INSTAGIB_LASTSECOND, CH_INFO, "lastsecond", VOL_BASEVOICE, ATTEN_NONE) \ - MSG_ANNCE_NOTIF(1, ANNCE_INSTAGIB_NARROWLY, CH_INFO, "narrowly", VOL_BASEVOICE, ATTEN_NONE) \ - MSG_ANNCE_NOTIF(1, ANNCE_INSTAGIB_TERMINATED, CH_INFO, "terminated", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_MULTIFRAG, CH_INFO, "multifrag", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(2, ANNCE_NUM_1, CH_INFO, "1", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(2, ANNCE_NUM_2, CH_INFO, "2", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(2, ANNCE_NUM_3, CH_INFO, "3", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(2, ANNCE_NUM_4, CH_INFO, "4", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(2, ANNCE_NUM_5, CH_INFO, "5", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(2, ANNCE_NUM_6, CH_INFO, "6", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(2, ANNCE_NUM_7, CH_INFO, "7", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(2, ANNCE_NUM_8, CH_INFO, "8", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(2, ANNCE_NUM_9, CH_INFO, "9", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(2, ANNCE_NUM_10, CH_INFO, "10", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(2, ANNCE_NUM_GAMESTART_1, CH_INFO, "1", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(2, ANNCE_NUM_GAMESTART_2, CH_INFO, "2", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(2, ANNCE_NUM_GAMESTART_3, CH_INFO, "3", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(2, ANNCE_NUM_GAMESTART_4, CH_INFO, "4", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(2, ANNCE_NUM_GAMESTART_5, CH_INFO, "5", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_GAMESTART_6, CH_INFO, "6", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_GAMESTART_7, CH_INFO, "7", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_GAMESTART_8, CH_INFO, "8", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_GAMESTART_9, CH_INFO, "9", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_GAMESTART_10, CH_INFO, "10", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_1, CH_INFO, "1", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_2, CH_INFO, "2", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_3, CH_INFO, "3", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_4, CH_INFO, "4", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_5, CH_INFO, "5", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_6, CH_INFO, "6", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_7, CH_INFO, "7", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_8, CH_INFO, "8", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_9, CH_INFO, "9", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_10, CH_INFO, "10", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_1, CH_INFO, "1", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_2, CH_INFO, "2", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_3, CH_INFO, "3", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_4, CH_INFO, "4", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_5, CH_INFO, "5", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_6, CH_INFO, "6", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_7, CH_INFO, "7", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_8, CH_INFO, "8", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_9, CH_INFO, "9", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_10, CH_INFO, "10", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_1, CH_INFO, "1", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_2, CH_INFO, "2", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_3, CH_INFO, "3", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_4, CH_INFO, "4", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_5, CH_INFO, "5", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_6, CH_INFO, "6", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_7, CH_INFO, "7", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_8, CH_INFO, "8", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_9, CH_INFO, "9", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_10, CH_INFO, "10", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(2, ANNCE_NUM_ROUNDSTART_1, CH_INFO, "1", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(2, ANNCE_NUM_ROUNDSTART_2, CH_INFO, "2", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(2, ANNCE_NUM_ROUNDSTART_3, CH_INFO, "3", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_ROUNDSTART_4, CH_INFO, "4", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_ROUNDSTART_5, CH_INFO, "5", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_ROUNDSTART_6, CH_INFO, "6", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_ROUNDSTART_7, CH_INFO, "7", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_ROUNDSTART_8, CH_INFO, "8", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_ROUNDSTART_9, CH_INFO, "9", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(0, ANNCE_NUM_ROUNDSTART_10, CH_INFO, "10", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(2, ANNCE_PREPARE, CH_INFO, "prepareforbattle", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(1, ANNCE_REMAINING_FRAG_1, CH_INFO, "1fragleft", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(1, ANNCE_REMAINING_FRAG_2, CH_INFO, "2fragsleft", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(1, ANNCE_REMAINING_FRAG_3, CH_INFO, "3fragsleft", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(2, ANNCE_REMAINING_MIN_1, CH_INFO, "1minuteremains", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(2, ANNCE_REMAINING_MIN_5, CH_INFO, "5minutesremain", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(2, ANNCE_TIMEOUT, CH_INFO, "timeoutcalled", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(2, ANNCE_VOTE_ACCEPT, CH_INFO, "voteaccept", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(2, ANNCE_VOTE_CALL, CH_INFO, "votecall", VOL_BASEVOICE, ATTEN_NONE) \ -- MSG_ANNCE_NOTIF(2, ANNCE_VOTE_FAIL, CH_INFO, "votefail", VOL_BASEVOICE, ATTEN_NONE) ++ MSG_ANNCE_NOTIF(1, ANNCE_ACHIEVEMENT_AIRSHOT, CH_INFO, "airshot", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(1, ANNCE_ACHIEVEMENT_AMAZING, CH_INFO, "amazing", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(1, ANNCE_ACHIEVEMENT_AWESOME, CH_INFO, "awesome", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(1, ANNCE_ACHIEVEMENT_BOTLIKE, CH_INFO, "botlike", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(2, ANNCE_ACHIEVEMENT_ELECTROBITCH, CH_INFO, "electrobitch", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(1, ANNCE_ACHIEVEMENT_IMPRESSIVE, CH_INFO, "impressive", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(1, ANNCE_ACHIEVEMENT_YODA, CH_INFO, "yoda", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(2, ANNCE_BEGIN, CH_INFO, "begin", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_03, CH_INFO, "03kills", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_05, CH_INFO, "05kills", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_10, CH_INFO, "10kills", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_15, CH_INFO, "15kills", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_20, CH_INFO, "20kills", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_25, CH_INFO, "25kills", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_30, CH_INFO, "30kills", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(1, ANNCE_INSTAGIB_LASTSECOND, CH_INFO, "lastsecond", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(1, ANNCE_INSTAGIB_NARROWLY, CH_INFO, "narrowly", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(1, ANNCE_INSTAGIB_TERMINATED, CH_INFO, "terminated", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_MULTIFRAG, CH_INFO, "multifrag", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(2, ANNCE_NUM_1, CH_INFO, "1", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(2, ANNCE_NUM_2, CH_INFO, "2", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(2, ANNCE_NUM_3, CH_INFO, "3", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(2, ANNCE_NUM_4, CH_INFO, "4", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(2, ANNCE_NUM_5, CH_INFO, "5", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(2, ANNCE_NUM_6, CH_INFO, "6", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(2, ANNCE_NUM_7, CH_INFO, "7", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(2, ANNCE_NUM_8, CH_INFO, "8", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(2, ANNCE_NUM_9, CH_INFO, "9", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(2, ANNCE_NUM_10, CH_INFO, "10", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(2, ANNCE_NUM_GAMESTART_1, CH_INFO, "1", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(2, ANNCE_NUM_GAMESTART_2, CH_INFO, "2", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(2, ANNCE_NUM_GAMESTART_3, CH_INFO, "3", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(2, ANNCE_NUM_GAMESTART_4, CH_INFO, "4", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(2, ANNCE_NUM_GAMESTART_5, CH_INFO, "5", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_GAMESTART_6, CH_INFO, "6", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_GAMESTART_7, CH_INFO, "7", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_GAMESTART_8, CH_INFO, "8", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_GAMESTART_9, CH_INFO, "9", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_GAMESTART_10, CH_INFO, "10", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_1, CH_INFO, "1", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_2, CH_INFO, "2", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_3, CH_INFO, "3", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_4, CH_INFO, "4", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_5, CH_INFO, "5", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_6, CH_INFO, "6", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_7, CH_INFO, "7", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_8, CH_INFO, "8", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_9, CH_INFO, "9", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_IDLE_10, CH_INFO, "10", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_1, CH_INFO, "1", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_2, CH_INFO, "2", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_3, CH_INFO, "3", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_4, CH_INFO, "4", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_5, CH_INFO, "5", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_6, CH_INFO, "6", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_7, CH_INFO, "7", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_8, CH_INFO, "8", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_9, CH_INFO, "9", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_KILL_10, CH_INFO, "10", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_1, CH_INFO, "1", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_2, CH_INFO, "2", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_3, CH_INFO, "3", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_4, CH_INFO, "4", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_5, CH_INFO, "5", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_6, CH_INFO, "6", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_7, CH_INFO, "7", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_8, CH_INFO, "8", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_9, CH_INFO, "9", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_RESPAWN_10, CH_INFO, "10", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(2, ANNCE_NUM_ROUNDSTART_1, CH_INFO, "1", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(2, ANNCE_NUM_ROUNDSTART_2, CH_INFO, "2", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(2, ANNCE_NUM_ROUNDSTART_3, CH_INFO, "3", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_ROUNDSTART_4, CH_INFO, "4", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_ROUNDSTART_5, CH_INFO, "5", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_ROUNDSTART_6, CH_INFO, "6", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_ROUNDSTART_7, CH_INFO, "7", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_ROUNDSTART_8, CH_INFO, "8", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_ROUNDSTART_9, CH_INFO, "9", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(0, ANNCE_NUM_ROUNDSTART_10, CH_INFO, "10", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(2, ANNCE_PREPARE, CH_INFO, "prepareforbattle", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(1, ANNCE_REMAINING_FRAG_1, CH_INFO, "1fragleft", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(1, ANNCE_REMAINING_FRAG_2, CH_INFO, "2fragsleft", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(1, ANNCE_REMAINING_FRAG_3, CH_INFO, "3fragsleft", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(2, ANNCE_REMAINING_MIN_1, CH_INFO, "1minuteremains", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(2, ANNCE_REMAINING_MIN_5, CH_INFO, "5minutesremain", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(2, ANNCE_TIMEOUT, CH_INFO, "timeoutcalled", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(2, ANNCE_VOTE_ACCEPT, CH_INFO, "voteaccept", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(2, ANNCE_VOTE_CALL, CH_INFO, "votecall", VOL_BASEVOICE, ATTEN_NONE) \ ++ MSG_ANNCE_NOTIF(2, ANNCE_VOTE_FAIL, CH_INFO, "votefail", VOL_BASEVOICE, ATTEN_NONE) #define MULTITEAM_INFO2(default,prefix,strnum,flnum,args,hudargs,icon,normal,gentle) \ -- MSG_INFO_NOTIF(default, prefix##RED, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_1)), TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \ -- MSG_INFO_NOTIF(default, prefix##BLUE, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_2)), TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2))) ++ MSG_INFO_NOTIF(default, prefix##RED, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_1)), TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \ ++ MSG_INFO_NOTIF(default, prefix##BLUE, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_2)), TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2))) #define MULTITEAM_INFO3(default,prefix,strnum,flnum,args,hudargs,icon,normal,gentle) \ -- MSG_INFO_NOTIF(default, prefix##RED, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_1)), TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \ -- MSG_INFO_NOTIF(default, prefix##BLUE, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_2)), TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2))) \ -- MSG_INFO_NOTIF(default, prefix##YELLOW, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_3)), TCR(normal, COL_TEAM_3, strtoupper(NAME_TEAM_3)), TCR(gentle, COL_TEAM_3, strtoupper(NAME_TEAM_3))) ++ MSG_INFO_NOTIF(default, prefix##RED, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_1)), TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \ ++ MSG_INFO_NOTIF(default, prefix##BLUE, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_2)), TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2))) \ ++ MSG_INFO_NOTIF(default, prefix##YELLOW, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_3)), TCR(normal, COL_TEAM_3, strtoupper(NAME_TEAM_3)), TCR(gentle, COL_TEAM_3, strtoupper(NAME_TEAM_3))) #define MULTITEAM_INFO4(default,prefix,strnum,flnum,args,hudargs,icon,normal,gentle) \ -- MSG_INFO_NOTIF(default, prefix##RED, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_1)), TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \ -- MSG_INFO_NOTIF(default, prefix##BLUE, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_2)), TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2))) \ -- MSG_INFO_NOTIF(default, prefix##YELLOW, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_3)), TCR(normal, COL_TEAM_3, strtoupper(NAME_TEAM_3)), TCR(gentle, COL_TEAM_3, strtoupper(NAME_TEAM_3))) \ -- MSG_INFO_NOTIF(default, prefix##PINK, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_4)), TCR(normal, COL_TEAM_4, strtoupper(NAME_TEAM_4)), TCR(gentle, COL_TEAM_4, strtoupper(NAME_TEAM_4))) ++ MSG_INFO_NOTIF(default, prefix##RED, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_1)), TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \ ++ MSG_INFO_NOTIF(default, prefix##BLUE, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_2)), TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2))) \ ++ MSG_INFO_NOTIF(default, prefix##YELLOW, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_3)), TCR(normal, COL_TEAM_3, strtoupper(NAME_TEAM_3)), TCR(gentle, COL_TEAM_3, strtoupper(NAME_TEAM_3))) \ ++ MSG_INFO_NOTIF(default, prefix##PINK, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_4)), TCR(normal, COL_TEAM_4, strtoupper(NAME_TEAM_4)), TCR(gentle, COL_TEAM_4, strtoupper(NAME_TEAM_4))) #define MULTITEAM_INFO(default,prefix,teams,strnum,flnum,args,hudargs,icon,normal,gentle) \ -- MULTITEAM_INFO##teams(default,prefix,strnum,flnum,args,hudargs,icon,normal,gentle) ++ MULTITEAM_INFO##teams(default,prefix,strnum,flnum,args,hudargs,icon,normal,gentle) #define MSG_INFO_NOTIFICATIONS \ -- MSG_INFO_NOTIF(2, INFO_CHAT_NOSPECTATORS, 0, 0, "", "", "", _("^F4NOTE: ^BGSpectator chat is not sent to players during the match"), "") \ -- MULTITEAM_INFO(1, INFO_CTF_CAPTURE_, 2, 1, 0, "s1", "s1", "notify_%s_captured", _("^BG%s^BG captured the ^TC^TT^BG flag"), "") \ -- MULTITEAM_INFO(1, INFO_CTF_CAPTURE_BROKEN_, 2, 2, 2, "s1 f1p2dec s2 f2p2dec", "s1", "notify_%s_captured", _("^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG%s^BG's previous record of ^F2%s^BG seconds"), "") \ -- MULTITEAM_INFO(1, INFO_CTF_CAPTURE_TIME_, 2, 1, 1, "s1 f1p2dec", "s1", "notify_%s_captured", _("^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds"), "") \ -- MULTITEAM_INFO(1, INFO_CTF_CAPTURE_UNBROKEN_, 2, 2, 2, "s1 f1p2dec s2 f2p2dec", "s1", "notify_%s_captured", _("^BG%s^BG captured the ^TC^TT^BG flag in ^F2%s^BG seconds, failing to break ^BG%s^BG's previous record of ^F1%s^BG seconds"), "") \ -- MULTITEAM_INFO(1, INFO_CTF_FLAGRETURN_ABORTRUN_, 2, 0, 0, "", "", "", _("^BGThe ^TC^TT^BG flag was returned to base by its owner"), "") \ -- MULTITEAM_INFO(1, INFO_CTF_FLAGRETURN_DAMAGED_, 2, 0, 0, "", "", "", _("^BGThe ^TC^TT^BG flag was destroyed and returned to base"), "") \ -- MULTITEAM_INFO(1, INFO_CTF_FLAGRETURN_DROPPED_, 2, 0, 0, "", "", "", _("^BGThe ^TC^TT^BG flag was dropped in the base and returned itself"), "") \ -- MULTITEAM_INFO(1, INFO_CTF_FLAGRETURN_NEEDKILL_, 2, 0, 0, "", "", "", _("^BGThe ^TC^TT^BG flag fell somewhere it couldn't be reached and returned to base"), "") \ -- MULTITEAM_INFO(1, INFO_CTF_FLAGRETURN_SPEEDRUN_, 2, 0, 1, "f1p2dec", "", "", _("^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned itself"), "") \ -- MULTITEAM_INFO(1, INFO_CTF_FLAGRETURN_TIMEOUT_, 2, 0, 0, "", "", "", _("^BGThe ^TC^TT^BG flag has returned to the base"), "") \ -- MULTITEAM_INFO(1, INFO_CTF_LOST_, 2, 1, 0, "s1", "s1", "notify_%s_lost", _("^BG%s^BG lost the ^TC^TT^BG flag"), "") \ -- MULTITEAM_INFO(1, INFO_CTF_PICKUP_, 2, 1, 0, "s1", "s1", "notify_%s_taken", _("^BG%s^BG got the ^TC^TT^BG flag"), "") \ -- MULTITEAM_INFO(1, INFO_CTF_RETURN_, 2, 1, 0, "s1", "s1", "notify_%s_returned", _("^BG%s^BG returned the ^TC^TT^BG flag"), "") \ -- MULTITEAM_INFO(1, INFO_CTF_RETURN_MONSTER_, 2, 1, 0, "s1", "s1", "notify_%s_returned", _("^BG%s^BG returned the ^TC^TT^BG flag"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_CHEAT, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_DROWN, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_water", _("^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_FALL, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_fall", _("^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_FIRE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"), _("^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s")) \ -- MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_LAVA, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_lava", _("^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_MONSTER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_NADE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_NADE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_nade", _("^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_NADE_NAPALM, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_nade_napalm", _("^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"), _("^BG%s%s^K1 got too close to a napalm explosion%s%s")) \ - MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_NADE_ICE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_nade_ice", _("^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_NADE_ICE_FREEZE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_nade_ice", _("^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_NADE_HEAL, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_nade_heal", _("^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_SHOOTING_STAR, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_shootingstar", _("^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_SLIME, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_slime", _("^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_SWAMP, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_slime", _("^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_TELEFRAG, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_telefrag", _("^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"), _("^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s")) \ -- MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_TOUCHEXPLODE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_BUMB_DEATH, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_BUMB_GUN, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_CRUSH, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_RAPT_BOMB, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_RAPT_CANNON, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_RAPT_DEATH, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_SPID_DEATH, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_SPID_MINIGUN, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_SPID_ROCKET, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_WAKI_DEATH, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_WAKI_GUN, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_WAKI_ROCKET, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VENGEANCE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VOID, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_void", _("^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_AUTOTEAMCHANGE, 2, 1, "s1 s2loc death_team", "", "", _("^BG%s^K1 was moved into the %s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_BETRAYAL, 2, 1, "s1 s2loc spree_lost", "s1", "notify_teamkill_red", _("^BG%s^K1 became enemies with the Lord of Teamplay%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_CAMP, 2, 1, "s1 s2loc spree_lost", "s1", "notify_camping", _("^BG%s^K1 thought they found a nice camping ground%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_CHEAT, 2, 1, "s1 s2loc spree_lost", "s1", "notify_selfkill", _("^BG%s^K1 unfairly eliminated themself%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_CUSTOM, 3, 1, "s1 s2 s3loc spree_lost", "s1", "notify_void", _("^BG%s^K1 %s^K1%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_DROWN, 2, 1, "s1 s2loc spree_lost", "s1", "notify_water", _("^BG%s^K1 couldn't catch their breath%s%s"), _("^BG%s^K1 was in the water for too long%s%s")) \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_FALL, 2, 1, "s1 s2loc spree_lost", "s1", "notify_fall", _("^BG%s^K1 hit the ground with a crunch%s%s"), _("^BG%s^K1 hit the ground with a bit too much force%s%s")) \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_FIRE, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 became a bit too crispy%s%s"), _("^BG%s^K1 felt a little hot%s%s")) \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_GENERIC, 2, 1, "s1 s2loc spree_lost", "s1", "notify_selfkill", _("^BG%s^K1 died%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_LAVA, 2, 1, "s1 s2loc spree_lost", "s1", "notify_lava", _("^BG%s^K1 turned into hot slag%s%s"), _("^BG%s^K1 found a hot place%s%s")) \ - MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NADE, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 mastered the art of self-nading%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_MAGE, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was exploded by a Mage%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_SHAMBLER_CLAW, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1's innards became outwards by a Shambler%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_SHAMBLER_SMASH, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was smashed by a Shambler%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_SHAMBLER_ZAP, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was zapped to death by a Shambler%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_SPIDER, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was bitten by a Spider%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_WYVERN, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was fireballed by a Wyvern%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_ZOMBIE_JUMP, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 joins the Zombies%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_ZOMBIE_MELEE, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was given kung fu lessons by a Zombie%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NADE, 2, 1, "s1 s2loc spree_lost", "s1", "notify_nade", _("^BG%s^K1 mastered the art of self-nading%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NADE_NAPALM, 2, 1, "s1 s2loc spree_lost", "s1", "notify_nade_napalm", _("^BG%s^K1 was burned to death by their own Napalm Nade%s%s"), _("^BG%s^K1 decided to take a look at the results of their napalm explosion%s%s")) \ - MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NADE_ICE, 2, 1, "s1 s2loc spree_lost", "s1", "notify_nade_ice", _("^BG%s^K1 mastered the art of self-nading%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NADE_ICE_FREEZE, 2, 1, "s1 s2loc spree_lost", "s1", "notify_nade_ice", _("^BG%s^K1 was frozen to death by their own Ice Nade%s%s"), _("^BG%s^K1 felt a little chilly%s%s")) \ - MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NADE_HEAL, 2, 1, "s1 s2loc spree_lost", "s1", "notify_nade_heal", _("^BG%s^K1's Healing Nade didn't quite heal them%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NOAMMO, 2, 1, "s1 s2loc spree_lost", "s1", "notify_outofammo", _("^BG%s^K1 died%s%s. What's the point of living without ammo?"), _("^BG%s^K1 ran out of ammo%s%s")) \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_ROT, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 rotted away%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_SHOOTING_STAR, 2, 1, "s1 s2loc spree_lost", "s1", "notify_shootingstar", _("^BG%s^K1 became a shooting star%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_SLIME, 2, 1, "s1 s2loc spree_lost", "s1", "notify_slime", _("^BG%s^K1 was slimed%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "notify_selfkill", _("^BG%s^K1 couldn't take it anymore%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_SWAMP, 2, 1, "s1 s2loc spree_lost", "s1", "notify_slime", _("^BG%s^K1 is now preserved for centuries to come%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TEAMCHANGE, 2, 1, "s1 s2loc death_team", "", "", _("^BG%s^K1 switched to the %s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TOUCHEXPLODE, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 died in an accident%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 ran into a turret%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_EWHEEL, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was blasted away by an eWheel turret%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_FLAC, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 got caught up in the FLAC turret fire%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_HELLION, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was blasted away by a Hellion turret%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_HK, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 could not hide from the Hunter turret%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_MACHINEGUN, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was riddled full of holes by a Machinegun turret%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_MLRS, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 got turned into smoldering gibs by an MLRS turret%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_PHASER, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was phased out by a turret%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_PLASMA, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 got served some superheated plasma from a turret%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_TESLA, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was electrocuted by a Tesla turret%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_WALK_GUN, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 got served a lead enrichment by a Walker turret%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_WALK_MEELE, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was impaled by a Walker turret%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_WALK_ROCKET, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was blasted away by a Walker turret%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_BUMB_DEATH, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_CRUSH, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was crushed by a vehicle%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_RAPT_BOMB, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was caught in a Raptor cluster bomb%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_RAPT_DEATH, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 got caught in the blast of a Raptor explosion%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_SPID_DEATH, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 got caught in the blast of a Spiderbot explosion%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_SPID_ROCKET, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was blasted to bits by a Spiderbot rocket%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_WAKI_DEATH, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 got caught in the blast of a Racer explosion%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_WAKI_ROCKET, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 couldn't find shelter from a Racer rocket%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VOID, 2, 1, "s1 s2loc spree_lost", "s1", "notify_void", _("^BG%s^K1 was in the wrong place%s%s"), "") \ -- MULTITEAM_INFO(1, INFO_DEATH_TEAMKILL_, 4, 3, 1, "s1 s2 s3loc spree_end", "s2 s1", "notify_teamkill_%s", _("^BG%s^K1 was betrayed by ^BG%s^K1%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_CA_JOIN_LATE, 0, 0, "", "", "", _("^F1Round already started, you will join the game in the next round"), "") \ - MSG_INFO_NOTIF(1, INFO_CA_LEAVE, 0, 0, "", "", "", _("^F2You will spectate in the next round"), "") \ - MSG_INFO_NOTIF(1, INFO_DOMINATION_CAPTURE_TIME, 2, 2, "s1 s2 f1 f2", "", "", _("^BG%s^BG%s^BG (%s points every %s seconds)"), "") \ -- MSG_INFO_NOTIF(1, INFO_FREEZETAG_FREEZE, 2, 0, "s1 s2", "", "", _("^BG%s^K1 was frozen by ^BG%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_FREEZETAG_REVIVED, 2, 0, "s1 s2", "", "", _("^BG%s^K3 was revived by ^BG%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_FREEZETAG_REVIVED_FALL, 1, 0, "s1", "", "", _("^BG%s^K3 was revived by falling"), "") \ - MSG_INFO_NOTIF(1, INFO_FREEZETAG_REVIVED_NADE, 1, 0, "s1", "", "", _("^BG%s^K3 was revived by their Nade explosion"), "") \ -- MSG_INFO_NOTIF(1, INFO_FREEZETAG_AUTO_REVIVED, 1, 1, "s1 f1", "", "", _("^BG%s^K3 was automatically revived after %s second(s)"), "") \ -- MULTITEAM_INFO(1, INFO_ROUND_TEAM_WIN_, 4, 0, 0, "", "", "", _("^TC^TT^BG team wins the round"), "") \ -- MSG_INFO_NOTIF(1, INFO_ROUND_PLAYER_WIN, 1, 0, "s1", "", "", _("^BG%s^BG wins the round"), "") \ -- MSG_INFO_NOTIF(1, INFO_ROUND_TIED, 0, 0, "", "", "", _("^BGRound tied"), "") \ -- MSG_INFO_NOTIF(1, INFO_ROUND_OVER, 0, 0, "", "", "", _("^BGRound over, there's no winner"), "") \ -- MSG_INFO_NOTIF(1, INFO_FREEZETAG_SELF, 1, 0, "s1", "", "", _("^BG%s^K1 froze themself"), "") \ -- MSG_INFO_NOTIF(1, INFO_GODMODE_OFF, 0, 1, "f1", "", "", _("^BGGodmode saved you %s units of damage, cheater!"), "") \ - MSG_INFO_NOTIF(1, INFO_ITEM_BUFF, 1, 1, "s1 item_buffname", "", "", _("^BG%s^BG got the %s^BG Buff!"), "") \ - MSG_INFO_NOTIF(1, INFO_ITEM_BUFF_LOST, 1, 1, "s1 item_buffname", "", "", _("^BG%s^BG lost the %s^BG Buff!"), "") \ - MSG_INFO_NOTIF(1, INFO_ITEM_BUFF_DROP, 0, 1, "item_buffname", "", "", _("^BGYou dropped the %s^BG Buff!"), "") \ - MSG_INFO_NOTIF(1, INFO_ITEM_BUFF_GOT, 0, 1, "item_buffname", "", "", _("^BGYou got the %s^BG Buff!"), "") \ -- MSG_INFO_NOTIF(0, INFO_ITEM_WEAPON_DONTHAVE, 0, 1, "item_wepname", "", "", _("^BGYou do not have the ^F1%s"), "") \ -- MSG_INFO_NOTIF(0, INFO_ITEM_WEAPON_DROP, 1, 1, "item_wepname item_wepammo", "", "", _("^BGYou dropped the ^F1%s^BG%s"), "") \ -- MSG_INFO_NOTIF(0, INFO_ITEM_WEAPON_GOT, 0, 1, "item_wepname", "", "", _("^BGYou got the ^F1%s"), "") \ -- MSG_INFO_NOTIF(0, INFO_ITEM_WEAPON_NOAMMO, 0, 1, "item_wepname", "", "", _("^BGYou don't have enough ammo for the ^F1%s"), "") \ -- MSG_INFO_NOTIF(0, INFO_ITEM_WEAPON_PRIMORSEC, 0, 3, "item_wepname f2primsec f3primsec", "", "", _("^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"), "") \ -- MSG_INFO_NOTIF(0, INFO_ITEM_WEAPON_UNAVAILABLE, 0, 1, "item_wepname", "", "", _("^F1%s^BG is ^F4not available^BG on this map"), "") \ -- MSG_INFO_NOTIF(2, INFO_JOIN_CONNECT, 1, 0, "s1", "", "", _("^BG%s^F3 connected%s"), "") \ -- MULTITEAM_INFO(2, INFO_JOIN_CONNECT_TEAM_, 4, 1, 0, "s1", "", "", _("^BG%s^F3 connected and joined the ^TC^TT team"), "") \ -- MSG_INFO_NOTIF(1, INFO_JOIN_PLAY, 1, 0, "s1", "", "", _("^BG%s^F3 is now playing"), "") \ -- MSG_INFO_NOTIF(1, INFO_KEEPAWAY_DROPPED, 1, 0, "s1", "s1", "notify_balldropped", _("^BG%s^BG has dropped the ball!"), "") \ -- MSG_INFO_NOTIF(1, INFO_KEEPAWAY_PICKUP, 1, 0, "s1", "s1", "notify_ballpickedup", _("^BG%s^BG has picked up the ball!"), "") \ -- MULTITEAM_INFO(1, INFO_KEYHUNT_CAPTURE_, 4, 1, 0, "s1", "", "", _("^BG%s^BG captured the keys for the ^TC^TT team"), "") \ -- MULTITEAM_INFO(1, INFO_KEYHUNT_DROP_, 4, 1, 0, "s1", "", "", _("^BG%s^BG dropped the ^TC^TT Key"), "") \ -- MULTITEAM_INFO(1, INFO_KEYHUNT_LOST_, 4, 1, 0, "s1", "", "", _("^BG%s^BG lost the ^TC^TT Key"), "") \ -- MULTITEAM_INFO(1, INFO_KEYHUNT_PICKUP_, 4, 1, 0, "s1", "", "", _("^BG%s^BG picked up the ^TC^TT Key"), "") \ -- MSG_INFO_NOTIF(1, INFO_LMS_FORFEIT, 1, 0, "s1", "", "", _("^BG%s^F3 forfeited"), "") \ -- MSG_INFO_NOTIF(1, INFO_LMS_NOLIVES, 1, 0, "s1", "", "", _("^BG%s^F3 has no more lives left"), "") \ -- MSG_INFO_NOTIF(1, INFO_MONSTERS_DISABLED, 0, 0, "", "", "", _("^BGMonsters are currently disabled"), "") \ -- MSG_INFO_NOTIF(1, INFO_POWERUP_INVISIBILITY, 1, 0, "s1", "s1", "strength", _("^BG%s^K1 picked up Invisibility"), "") \ -- MSG_INFO_NOTIF(1, INFO_POWERUP_SHIELD, 1, 0, "s1", "s1", "shield", _("^BG%s^K1 picked up Shield"), "") \ -- MSG_INFO_NOTIF(1, INFO_POWERUP_SPEED, 1, 0, "s1", "s1", "shield", _("^BG%s^K1 picked up Speed"), "") \ -- MSG_INFO_NOTIF(1, INFO_POWERUP_STRENGTH, 1, 0, "s1", "s1", "strength", _("^BG%s^K1 picked up Strength"), "") \ -- MSG_INFO_NOTIF(2, INFO_QUIT_DISCONNECT, 1, 0, "s1", "", "", _("^BG%s^F3 disconnected"), "") \ -- MSG_INFO_NOTIF(2, INFO_QUIT_KICK_IDLING, 1, 0, "s1", "", "", _("^BG%s^F3 was kicked for idling"), "") \ -- MSG_INFO_NOTIF(1, INFO_QUIT_KICK_SPECTATING, 0, 0, "", "", "", _("^F2You were kicked from the server because you are a spectator and spectators aren't allowed at the moment."), "") \ -- MSG_INFO_NOTIF(1, INFO_QUIT_SPECTATE, 1, 0, "s1", "", "", _("^BG%s^F3 is now spectating"), "") \ -- MSG_INFO_NOTIF(1, INFO_RACE_ABANDONED, 1, 0, "s1", "", "", _("^BG%s^BG has abandoned the race"), "") \ -- MSG_INFO_NOTIF(1, INFO_RACE_FAIL_RANKED, 1, 3, "s1 race_col f1ord race_col f3race_time race_diff", "s1 f3race_time", "race_newfail", _("^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"), "") \ -- MSG_INFO_NOTIF(1, INFO_RACE_FAIL_UNRANKED, 1, 3, "s1 race_col f1ord race_col f3race_time race_diff", "s1 f3race_time", "race_newfail", _("^BG%s^BG couldn't break the %s%s^BG place record of %s%s %s"), "") \ -- MSG_INFO_NOTIF(1, INFO_RACE_FINISHED, 1, 0, "s1", "", "", _("^BG%s^BG has finished the race"), "") \ -- MSG_INFO_NOTIF(1, INFO_RACE_NEW_BROKEN, 2, 3, "s1 s2 race_col f1ord race_col f2race_time race_diff", "s1 f2race_time", "race_newrankyellow", _("^BG%s^BG broke %s^BG's %s%s^BG place record with %s%s %s"), "") \ -- MSG_INFO_NOTIF(1, INFO_RACE_NEW_IMPROVED, 1, 3, "s1 race_col f1ord race_col f2race_time race_diff", "s1 f2race_time", "race_newtime", _("^BG%s^BG improved their %s%s^BG place record with %s%s %s"), "") \ -- MSG_INFO_NOTIF(1, INFO_RACE_NEW_MISSING_UID, 1, 1, "s1 f1race_time", "s1 f1race_time", "race_newfail", _("^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID and will be lost."), "") \ -- MSG_INFO_NOTIF(1, INFO_RACE_NEW_SET, 1, 2, "s1 race_col f1ord race_col f2race_time", "s1 f2race_time", "race_newrecordserver", _("^BG%s^BG set the %s%s^BG place record with %s%s"), "") \ -- MULTITEAM_INFO(1, INFO_SCORES_, 4, 0, 0, "", "", "", _("^TC^TT ^BGteam scores!"), "") \ -- MSG_INFO_NOTIF(1, INFO_SPECTATE_WARNING, 0, 1, "f1secs", "", "", _("^F2You have to become a player within the next %s, otherwise you will be kicked, because spectating isn't allowed at this time!"), "") \ - MSG_INFO_NOTIF(1, INFO_SUPERWEAPON_PICKUP, 1, 0, "s1", "s1", "strength", _("^BG%s^K1 picked up a Superweapon"), "") \ - MSG_INFO_NOTIF(1, INFO_SUPERWEAPON_PICKUP, 1, 0, "s1", "s1", "superweapons", _("^BG%s^K1 picked up a Superweapon"), "") \ - MSG_INFO_NOTIF(1, INFO_TEAMCHANGE_LARGERTEAM, 0, 0, "", "", "", _("^BGYou cannot change to a larger team"), "") \ - MSG_INFO_NOTIF(1, INFO_TEAMCHANGE_NOTALLOWED, 0, 0, "", "", "", _("^BGYou are not allowed to change teams"), "") \ -- MSG_INFO_NOTIF(2, INFO_VERSION_BETA, 2, 0, "s1 s2", "", "", _("^F4NOTE: ^BGThe server is running ^F1Xonotic %s (beta)^BG, you have ^F2Xonotic %s"), "") \ -- MSG_INFO_NOTIF(2, INFO_VERSION_OLD, 2, 0, "s1 s2", "", "", _("^F4NOTE: ^BGThe server is running ^F1Xonotic %s^BG, you have ^F2Xonotic %s"), "") \ -- MSG_INFO_NOTIF(2, INFO_VERSION_OUTDATED, 2, 0, "s1 s2", "", "", _("^F4NOTE: ^F1Xonotic %s^BG is out, and you still have ^F2Xonotic %s^BG - get the update from ^F3http://www.xonotic.org/^BG!"), "") \ -- MSG_INFO_NOTIF(1, INFO_WATERMARK, 1, 0, "s1", "", "", _("^F3SVQC Build information: ^F4%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_ACCORDEON_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weapontuba", _("^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_ACCORDEON_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "weapontuba", _("^BG%s^K1 hurt their own ears with the @!#%%'n Accordeon%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_ARC_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponhlac", _("^BG%s%s^K1 was electrocuted by ^BG%s^K1's Arc%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_BLASTER_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponlaser", _("^BG%s%s^K1 was shot to death by ^BG%s^K1's Blaster%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_BLASTER_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "weaponlaser", _("^BG%s^K1 shot themself to hell with their Blaster%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_CRYLINK_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponcrylink", _("^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_CRYLINK_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "weaponcrylink", _("^BG%s^K1 felt the strong pull of their Crylink%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_DEVASTATOR_MURDER_DIRECT, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponrocketlauncher", _("^BG%s%s^K1 ate ^BG%s^K1's rocket%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_DEVASTATOR_MURDER_SPLASH, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponrocketlauncher", _("^BG%s%s^K1 got too close ^BG%s^K1's rocket%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_DEVASTATOR_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "weaponrocketlauncher", _("^BG%s^K1 blew themself up with their Devastator%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_ELECTRO_MURDER_BOLT, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponelectro", _("^BG%s%s^K1 was blasted by ^BG%s^K1's Electro bolt%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_ELECTRO_MURDER_COMBO, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponelectro", _("^BG%s%s^K1 felt the electrifying air of ^BG%s^K1's Electro combo%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_ELECTRO_MURDER_ORBS, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponelectro", _("^BG%s%s^K1 got too close to ^BG%s^K1's Electro plasma%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_ELECTRO_SUICIDE_BOLT, 2, 1, "s1 s2loc spree_lost", "s1", "weaponelectro", _("^BG%s^K1 played with Electro plasma%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_ELECTRO_SUICIDE_ORBS, 2, 1, "s1 s2loc spree_lost", "s1", "weaponelectro", _("^BG%s^K1 could not remember where they put their Electro plasma%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_ELECTRO_MURDER_ORBS, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponelectro", _("^BG%s%s^K1 got too close to ^BG%s^K1's Electro orb%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_ELECTRO_SUICIDE_BOLT, 2, 1, "s1 s2loc spree_lost", "s1", "weaponelectro", _("^BG%s^K1 played with Electro bolts%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_ELECTRO_SUICIDE_ORBS, 2, 1, "s1 s2loc spree_lost", "s1", "weaponelectro", _("^BG%s^K1 could not remember where they put their Electro orb%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_FIREBALL_MURDER_BLAST, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponfireball", _("^BG%s%s^K1 got too close to ^BG%s^K1's fireball%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_FIREBALL_MURDER_FIREMINE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponfireball", _("^BG%s%s^K1 got burnt by ^BG%s^K1's firemine%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_FIREBALL_SUICIDE_BLAST, 2, 1, "s1 s2loc spree_lost", "s1", "weaponfireball", _("^BG%s^K1 should have used a smaller gun%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_FIREBALL_SUICIDE_FIREMINE, 2, 1, "s1 s2loc spree_lost", "s1", "weaponfireball", _("^BG%s^K1 forgot about their firemine%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_HAGAR_MURDER_BURST, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponhagar", _("^BG%s%s^K1 was pummeled by a burst of ^BG%s^K1's Hagar rockets%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_HAGAR_MURDER_SPRAY, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponhagar", _("^BG%s%s^K1 was pummeled by ^BG%s^K1's Hagar rockets%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_HAGAR_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "weaponhagar", _("^BG%s^K1 played with tiny Hagar rockets%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_HLAC_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponhlac", _("^BG%s%s^K1 was cut down with ^BG%s^K1's HLAC%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_HLAC_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "weaponhlac", _("^BG%s^K1 got a little jumpy with their HLAC%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_HMG_MURDER_SNIPE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponhmg", _("^BG%s%s^K1 was sniped by ^BG%s^K1's Heavy Machine Gun%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_HMG_MURDER_SPRAY, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponhmg", _("^BG%s%s^K1 was torn to bits by ^BG%s^K1's Heavy Machine Gun%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_HOOK_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponhook", _("^BG%s%s^K1 was caught in ^BG%s^K1's Hook gravity bomb%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_KLEINBOTTLE_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weapontuba", _("^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Klein Bottle%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_KLEINBOTTLE_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "weapontuba", _("^BG%s^K1 hurt their own ears with the @!#%%'n Klein Bottle%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_LASER_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponlaser", _("^BG%s%s^K1 was shot to death by ^BG%s^K1's Laser%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_LASER_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "weaponlaser", _("^BG%s^K1 shot themself to hell with their Laser%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_MACHINEGUN_MURDER_SNIPE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponuzi", _("^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_MACHINEGUN_MURDER_SPRAY, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponuzi", _("^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_MINELAYER_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponminelayer", _("^BG%s%s^K1 got too close to ^BG%s^K1's mine%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_MINELAYER_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "weaponminelayer", _("^BG%s^K1 forgot about their mine%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_MINSTANEX_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponminstanex", _("^BG%s%s^K1 has been vaporized by ^BG%s^K1's Minstanex%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_MORTAR_MURDER_BOUNCE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weapongrenadelauncher", _("^BG%s%s^K1 got too close to ^BG%s^K1's Mortar grenade%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_MORTAR_MURDER_EXPLODE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weapongrenadelauncher", _("^BG%s%s^K1 ate ^BG%s^K1's Mortar grenade%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_MORTAR_SUICIDE_BOUNCE, 2, 1, "s1 s2loc spree_lost", "s1", "weapongrenadelauncher", _("^BG%s^K1 didn't see their own Mortar grenade%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_MORTAR_SUICIDE_EXPLODE, 2, 1, "s1 s2loc spree_lost", "s1", "weapongrenadelauncher", _("^BG%s^K1 blew themself up with their own Mortar%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_NEX_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponnex", _("^BG%s%s^K1 has been vaporized by ^BG%s^K1's Nex%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_RIFLE_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponrifle", _("^BG%s%s^K1 was sniped with a Rifle by ^BG%s^K1%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_RIFLE_MURDER_HAIL, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponrifle", _("^BG%s%s^K1 died in ^BG%s^K1's Rifle bullet hail%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_RIFLE_MURDER_HAIL_PIERCING, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponrifle", _("^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle bullet hail%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_RIFLE_MURDER_PIERCING, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponrifle", _("^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_ROCKETLAUNCHER_MURDER_DIRECT, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponrocketlauncher", _("^BG%s%s^K1 ate ^BG%s^K1's rocket%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_ROCKETLAUNCHER_MURDER_SPLASH, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponrocketlauncher", _("^BG%s%s^K1 got too close ^BG%s^K1's rocket%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_ROCKETLAUNCHER_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "weaponrocketlauncher", _("^BG%s^K1 blew themself up with their Rocketlauncher%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_RPC_MURDER_DIRECT, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponrpc", _("^BG%s%s^K1 got sawn in half by ^BG%s^K1's Rocket Propelled Chainsaw%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_RPC_MURDER_SPLASH, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponrpc", _("^BG%s%s^K1 almost dodged ^BG%s^K1's Rocket Propelled Chainsaw%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_RPC_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "weaponrpc", _("^BG%s^K1 blew themself up with their Rocket Propelled Chainsaw%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_SEEKER_MURDER_SPRAY, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponseeker", _("^BG%s%s^K1 was pummeled by ^BG%s^K1's Seeker rockets%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_SEEKER_MURDER_TAG, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponseeker", _("^BG%s%s^K1 was tagged by ^BG%s^K1's Seeker%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_SEEKER_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "weaponseeker", _("^BG%s^K1 played with tiny Seeker rockets%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_SHOCKWAVE_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponshotgun", _("^BG%s%s^K1 was gunned down by ^BG%s^K1's Shockwave%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_SHOCKWAVE_MURDER_SLAP, 3, 2, "spree_inf s2 s1 s3loc spree_end", "s2 s1", "notify_melee_shotgun", _("^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shockwave%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_SHOTGUN_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponshotgun", _("^BG%s%s^K1 was gunned down by ^BG%s^K1's Shotgun%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_SHOTGUN_MURDER_SLAP, 3, 2, "spree_inf s2 s1 s3loc spree_end", "s2 s1", "notify_melee_shotgun", _("^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shotgun%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_THINKING_WITH_PORTALS, 2, 1, "s1 s2loc spree_lost", "s1", "notify_selfkill", _("^BG%s^K1 is now thinking with portals%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_TUBA_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weapontuba", _("^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Tuba%s%s"), "") \ -- MSG_INFO_NOTIF(1, INFO_WEAPON_TUBA_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "weapontuba", _("^BG%s^K1 hurt their own ears with the @!#%%'n Tuba%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_UZI_MURDER_SNIPE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponuzi", _("^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_UZI_MURDER_SPRAY, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponuzi", _("^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"), "") - MSG_INFO_NOTIF(1, INFO_WEAPON_VAPORIZER_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponminstanex", _("^BG%s%s^K1 has been sublimated by ^BG%s^K1's Vaporizer%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_WEAPON_VORTEX_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponnex", _("^BG%s%s^K1 has been vaporized by ^BG%s^K1's Vortex%s%s"), "") ++ MSG_INFO_NOTIF(2, INFO_CHAT_NOSPECTATORS, 0, 0, "", "", "", _("^F4NOTE: ^BGSpectator chat is not sent to players during the match"), "") \ ++ MULTITEAM_INFO(1, INFO_CTF_CAPTURE_, 2, 1, 0, "s1", "s1", "notify_%s_captured", _("^BG%s^BG captured the ^TC^TT^BG flag"), "") \ ++ MULTITEAM_INFO(1, INFO_CTF_CAPTURE_BROKEN_, 2, 2, 2, "s1 f1p2dec s2 f2p2dec", "s1", "notify_%s_captured", _("^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG%s^BG's previous record of ^F2%s^BG seconds"), "") \ ++ MULTITEAM_INFO(1, INFO_CTF_CAPTURE_TIME_, 2, 1, 1, "s1 f1p2dec", "s1", "notify_%s_captured", _("^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds"), "") \ ++ MULTITEAM_INFO(1, INFO_CTF_CAPTURE_UNBROKEN_, 2, 2, 2, "s1 f1p2dec s2 f2p2dec", "s1", "notify_%s_captured", _("^BG%s^BG captured the ^TC^TT^BG flag in ^F2%s^BG seconds, failing to break ^BG%s^BG's previous record of ^F1%s^BG seconds"), "") \ ++ MULTITEAM_INFO(1, INFO_CTF_FLAGRETURN_ABORTRUN_, 2, 0, 0, "", "", "", _("^BGThe ^TC^TT^BG flag was returned to base by its owner"), "") \ ++ MULTITEAM_INFO(1, INFO_CTF_FLAGRETURN_DAMAGED_, 2, 0, 0, "", "", "", _("^BGThe ^TC^TT^BG flag was destroyed and returned to base"), "") \ ++ MULTITEAM_INFO(1, INFO_CTF_FLAGRETURN_DROPPED_, 2, 0, 0, "", "", "", _("^BGThe ^TC^TT^BG flag was dropped in the base and returned itself"), "") \ ++ MULTITEAM_INFO(1, INFO_CTF_FLAGRETURN_NEEDKILL_, 2, 0, 0, "", "", "", _("^BGThe ^TC^TT^BG flag fell somewhere it couldn't be reached and returned to base"), "") \ ++ MULTITEAM_INFO(1, INFO_CTF_FLAGRETURN_SPEEDRUN_, 2, 0, 1, "f1p2dec", "", "", _("^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned itself"), "") \ ++ MULTITEAM_INFO(1, INFO_CTF_FLAGRETURN_TIMEOUT_, 2, 0, 0, "", "", "", _("^BGThe ^TC^TT^BG flag has returned to the base"), "") \ ++ MULTITEAM_INFO(1, INFO_CTF_LOST_, 2, 1, 0, "s1", "s1", "notify_%s_lost", _("^BG%s^BG lost the ^TC^TT^BG flag"), "") \ ++ MULTITEAM_INFO(1, INFO_CTF_PICKUP_, 2, 1, 0, "s1", "s1", "notify_%s_taken", _("^BG%s^BG got the ^TC^TT^BG flag"), "") \ ++ MULTITEAM_INFO(1, INFO_CTF_RETURN_, 2, 1, 0, "s1", "s1", "notify_%s_returned", _("^BG%s^BG returned the ^TC^TT^BG flag"), "") \ ++ MULTITEAM_INFO(1, INFO_CTF_RETURN_MONSTER_, 2, 1, 0, "s1", "s1", "notify_%s_returned", _("^BG%s^BG returned the ^TC^TT^BG flag"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_CHEAT, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_DROWN, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_water", _("^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_FALL, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_fall", _("^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_FIRE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"), _("^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s")) \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_LAVA, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_lava", _("^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_MONSTER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_NADE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_nade", _("^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_NADE_NAPALM, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_nade_napalm", _("^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"), _("^BG%s%s^K1 got too close to a napalm explosion%s%s")) \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_NADE_ICE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_nade_ice", _("^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_NADE_ICE_FREEZE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_nade_ice", _("^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_NADE_HEAL, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_nade_heal", _("^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_SHOOTING_STAR, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_shootingstar", _("^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_SLIME, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_slime", _("^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_SWAMP, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_slime", _("^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_TELEFRAG, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_telefrag", _("^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"), _("^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s")) \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_TOUCHEXPLODE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_BUMB_DEATH, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_BUMB_GUN, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_CRUSH, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_RAPT_BOMB, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_RAPT_CANNON, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_RAPT_DEATH, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_SPID_DEATH, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_SPID_MINIGUN, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_SPID_ROCKET, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_WAKI_DEATH, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_WAKI_GUN, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_WAKI_ROCKET, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VENGEANCE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_death", _("^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VOID, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "notify_void", _("^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_AUTOTEAMCHANGE, 2, 1, "s1 s2loc death_team", "", "", _("^BG%s^K1 was moved into the %s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_BETRAYAL, 2, 1, "s1 s2loc spree_lost", "s1", "notify_teamkill_red", _("^BG%s^K1 became enemies with the Lord of Teamplay%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_CAMP, 2, 1, "s1 s2loc spree_lost", "s1", "notify_camping", _("^BG%s^K1 thought they found a nice camping ground%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_CHEAT, 2, 1, "s1 s2loc spree_lost", "s1", "notify_selfkill", _("^BG%s^K1 unfairly eliminated themself%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_CUSTOM, 3, 1, "s1 s2 s3loc spree_lost", "s1", "notify_void", _("^BG%s^K1 %s^K1%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_DROWN, 2, 1, "s1 s2loc spree_lost", "s1", "notify_water", _("^BG%s^K1 couldn't catch their breath%s%s"), _("^BG%s^K1 was in the water for too long%s%s")) \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_FALL, 2, 1, "s1 s2loc spree_lost", "s1", "notify_fall", _("^BG%s^K1 hit the ground with a crunch%s%s"), _("^BG%s^K1 hit the ground with a bit too much force%s%s")) \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_FIRE, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 became a bit too crispy%s%s"), _("^BG%s^K1 felt a little hot%s%s")) \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_GENERIC, 2, 1, "s1 s2loc spree_lost", "s1", "notify_selfkill", _("^BG%s^K1 died%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_LAVA, 2, 1, "s1 s2loc spree_lost", "s1", "notify_lava", _("^BG%s^K1 turned into hot slag%s%s"), _("^BG%s^K1 found a hot place%s%s")) \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_MAGE, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was exploded by a Mage%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_SHAMBLER_CLAW, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1's innards became outwards by a Shambler%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_SHAMBLER_SMASH, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was smashed by a Shambler%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_SHAMBLER_ZAP, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was zapped to death by a Shambler%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_SPIDER, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was bitten by a Spider%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_WYVERN, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was fireballed by a Wyvern%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_ZOMBIE_JUMP, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 joins the Zombies%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_ZOMBIE_MELEE, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was given kung fu lessons by a Zombie%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NADE, 2, 1, "s1 s2loc spree_lost", "s1", "notify_nade", _("^BG%s^K1 mastered the art of self-nading%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NADE_NAPALM, 2, 1, "s1 s2loc spree_lost", "s1", "notify_nade_napalm", _("^BG%s^K1 was burned to death by their own Napalm Nade%s%s"), _("^BG%s^K1 decided to take a look at the results of their napalm explosion%s%s")) \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NADE_ICE, 2, 1, "s1 s2loc spree_lost", "s1", "notify_nade_ice", _("^BG%s^K1 mastered the art of self-nading%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NADE_ICE_FREEZE, 2, 1, "s1 s2loc spree_lost", "s1", "notify_nade_ice", _("^BG%s^K1 was frozen to death by their own Ice Nade%s%s"), _("^BG%s^K1 felt a little chilly%s%s")) \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NADE_HEAL, 2, 1, "s1 s2loc spree_lost", "s1", "notify_nade_heal", _("^BG%s^K1's Healing Nade didn't quite heal them%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NOAMMO, 2, 1, "s1 s2loc spree_lost", "s1", "notify_outofammo", _("^BG%s^K1 died%s%s. What's the point of living without ammo?"), _("^BG%s^K1 ran out of ammo%s%s")) \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_ROT, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 rotted away%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_SHOOTING_STAR, 2, 1, "s1 s2loc spree_lost", "s1", "notify_shootingstar", _("^BG%s^K1 became a shooting star%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_SLIME, 2, 1, "s1 s2loc spree_lost", "s1", "notify_slime", _("^BG%s^K1 was slimed%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "notify_selfkill", _("^BG%s^K1 couldn't take it anymore%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_SWAMP, 2, 1, "s1 s2loc spree_lost", "s1", "notify_slime", _("^BG%s^K1 is now preserved for centuries to come%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TEAMCHANGE, 2, 1, "s1 s2loc death_team", "", "", _("^BG%s^K1 switched to the %s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TOUCHEXPLODE, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 died in an accident%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 ran into a turret%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_EWHEEL, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was blasted away by an eWheel turret%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_FLAC, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 got caught up in the FLAC turret fire%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_HELLION, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was blasted away by a Hellion turret%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_HK, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 could not hide from the Hunter turret%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_MACHINEGUN, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was riddled full of holes by a Machinegun turret%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_MLRS, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 got turned into smoldering gibs by an MLRS turret%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_PHASER, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was phased out by a turret%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_PLASMA, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 got served some superheated plasma from a turret%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_TESLA, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was electrocuted by a Tesla turret%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_WALK_GUN, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 got served a lead enrichment by a Walker turret%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_WALK_MEELE, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was impaled by a Walker turret%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_WALK_ROCKET, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was blasted away by a Walker turret%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_BUMB_DEATH, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_CRUSH, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was crushed by a vehicle%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_RAPT_BOMB, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was caught in a Raptor cluster bomb%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_RAPT_DEATH, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 got caught in the blast of a Raptor explosion%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_SPID_DEATH, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 got caught in the blast of a Spiderbot explosion%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_SPID_ROCKET, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was blasted to bits by a Spiderbot rocket%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_WAKI_DEATH, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 got caught in the blast of a Racer explosion%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_WAKI_ROCKET, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 couldn't find shelter from a Racer rocket%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VOID, 2, 1, "s1 s2loc spree_lost", "s1", "notify_void", _("^BG%s^K1 was in the wrong place%s%s"), "") \ ++ MULTITEAM_INFO(1, INFO_DEATH_TEAMKILL_, 4, 3, 1, "s1 s2 s3loc spree_end", "s2 s1", "notify_teamkill_%s", _("^BG%s^K1 was betrayed by ^BG%s^K1%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_CA_JOIN_LATE, 0, 0, "", "", "", _("^F1Round already started, you will join the game in the next round"), "") \ ++ MSG_INFO_NOTIF(1, INFO_CA_LEAVE, 0, 0, "", "", "", _("^F2You will spectate in the next round"), "") \ ++ MSG_INFO_NOTIF(1, INFO_DOMINATION_CAPTURE_TIME, 2, 2, "s1 s2 f1 f2", "", "", _("^BG%s^BG%s^BG (%s points every %s seconds)"), "") \ ++ MSG_INFO_NOTIF(1, INFO_FREEZETAG_FREEZE, 2, 0, "s1 s2", "", "", _("^BG%s^K1 was frozen by ^BG%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_FREEZETAG_REVIVED, 2, 0, "s1 s2", "", "", _("^BG%s^K3 was revived by ^BG%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_FREEZETAG_REVIVED_FALL, 1, 0, "s1", "", "", _("^BG%s^K3 was revived by falling"), "") \ ++ MSG_INFO_NOTIF(1, INFO_FREEZETAG_REVIVED_NADE, 1, 0, "s1", "", "", _("^BG%s^K3 was revived by their Nade explosion"), "") \ ++ MSG_INFO_NOTIF(1, INFO_FREEZETAG_AUTO_REVIVED, 1, 1, "s1 f1", "", "", _("^BG%s^K3 was automatically revived after %s second(s)"), "") \ ++ MULTITEAM_INFO(1, INFO_ROUND_TEAM_WIN_, 4, 0, 0, "", "", "", _("^TC^TT^BG team wins the round"), "") \ ++ MSG_INFO_NOTIF(1, INFO_ROUND_PLAYER_WIN, 1, 0, "s1", "", "", _("^BG%s^BG wins the round"), "") \ ++ MSG_INFO_NOTIF(1, INFO_ROUND_TIED, 0, 0, "", "", "", _("^BGRound tied"), "") \ ++ MSG_INFO_NOTIF(1, INFO_ROUND_OVER, 0, 0, "", "", "", _("^BGRound over, there's no winner"), "") \ ++ MSG_INFO_NOTIF(1, INFO_FREEZETAG_SELF, 1, 0, "s1", "", "", _("^BG%s^K1 froze themself"), "") \ ++ MSG_INFO_NOTIF(1, INFO_GODMODE_OFF, 0, 1, "f1", "", "", _("^BGGodmode saved you %s units of damage, cheater!"), "") \ ++ MSG_INFO_NOTIF(1, INFO_ITEM_BUFF, 1, 1, "s1 item_buffname", "", "", _("^BG%s^BG got the %s^BG Buff!"), "") \ ++ MSG_INFO_NOTIF(1, INFO_ITEM_BUFF_LOST, 1, 1, "s1 item_buffname", "", "", _("^BG%s^BG lost the %s^BG Buff!"), "") \ ++ MSG_INFO_NOTIF(1, INFO_ITEM_BUFF_DROP, 0, 1, "item_buffname", "", "", _("^BGYou dropped the %s^BG Buff!"), "") \ ++ MSG_INFO_NOTIF(1, INFO_ITEM_BUFF_GOT, 0, 1, "item_buffname", "", "", _("^BGYou got the %s^BG Buff!"), "") \ ++ MSG_INFO_NOTIF(0, INFO_ITEM_WEAPON_DONTHAVE, 0, 1, "item_wepname", "", "", _("^BGYou do not have the ^F1%s"), "") \ ++ MSG_INFO_NOTIF(0, INFO_ITEM_WEAPON_DROP, 1, 1, "item_wepname item_wepammo", "", "", _("^BGYou dropped the ^F1%s^BG%s"), "") \ ++ MSG_INFO_NOTIF(0, INFO_ITEM_WEAPON_GOT, 0, 1, "item_wepname", "", "", _("^BGYou got the ^F1%s"), "") \ ++ MSG_INFO_NOTIF(0, INFO_ITEM_WEAPON_NOAMMO, 0, 1, "item_wepname", "", "", _("^BGYou don't have enough ammo for the ^F1%s"), "") \ ++ MSG_INFO_NOTIF(0, INFO_ITEM_WEAPON_PRIMORSEC, 0, 3, "item_wepname f2primsec f3primsec", "", "", _("^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"), "") \ ++ MSG_INFO_NOTIF(0, INFO_ITEM_WEAPON_UNAVAILABLE, 0, 1, "item_wepname", "", "", _("^F1%s^BG is ^F4not available^BG on this map"), "") \ ++ MSG_INFO_NOTIF(2, INFO_JOIN_CONNECT, 1, 0, "s1", "", "", _("^BG%s^F3 connected%s"), "") \ ++ MULTITEAM_INFO(2, INFO_JOIN_CONNECT_TEAM_, 4, 1, 0, "s1", "", "", _("^BG%s^F3 connected and joined the ^TC^TT team"), "") \ ++ MSG_INFO_NOTIF(1, INFO_JOIN_PLAY, 1, 0, "s1", "", "", _("^BG%s^F3 is now playing"), "") \ ++ MSG_INFO_NOTIF(1, INFO_KEEPAWAY_DROPPED, 1, 0, "s1", "s1", "notify_balldropped", _("^BG%s^BG has dropped the ball!"), "") \ ++ MSG_INFO_NOTIF(1, INFO_KEEPAWAY_PICKUP, 1, 0, "s1", "s1", "notify_ballpickedup", _("^BG%s^BG has picked up the ball!"), "") \ ++ MULTITEAM_INFO(1, INFO_KEYHUNT_CAPTURE_, 4, 1, 0, "s1", "", "", _("^BG%s^BG captured the keys for the ^TC^TT team"), "") \ ++ MULTITEAM_INFO(1, INFO_KEYHUNT_DROP_, 4, 1, 0, "s1", "", "", _("^BG%s^BG dropped the ^TC^TT Key"), "") \ ++ MULTITEAM_INFO(1, INFO_KEYHUNT_LOST_, 4, 1, 0, "s1", "", "", _("^BG%s^BG lost the ^TC^TT Key"), "") \ ++ MULTITEAM_INFO(1, INFO_KEYHUNT_PICKUP_, 4, 1, 0, "s1", "", "", _("^BG%s^BG picked up the ^TC^TT Key"), "") \ ++ MSG_INFO_NOTIF(1, INFO_LMS_FORFEIT, 1, 0, "s1", "", "", _("^BG%s^F3 forfeited"), "") \ ++ MSG_INFO_NOTIF(1, INFO_LMS_NOLIVES, 1, 0, "s1", "", "", _("^BG%s^F3 has no more lives left"), "") \ ++ MSG_INFO_NOTIF(1, INFO_MONSTERS_DISABLED, 0, 0, "", "", "", _("^BGMonsters are currently disabled"), "") \ ++ MSG_INFO_NOTIF(1, INFO_POWERUP_INVISIBILITY, 1, 0, "s1", "s1", "strength", _("^BG%s^K1 picked up Invisibility"), "") \ ++ MSG_INFO_NOTIF(1, INFO_POWERUP_SHIELD, 1, 0, "s1", "s1", "shield", _("^BG%s^K1 picked up Shield"), "") \ ++ MSG_INFO_NOTIF(1, INFO_POWERUP_SPEED, 1, 0, "s1", "s1", "shield", _("^BG%s^K1 picked up Speed"), "") \ ++ MSG_INFO_NOTIF(1, INFO_POWERUP_STRENGTH, 1, 0, "s1", "s1", "strength", _("^BG%s^K1 picked up Strength"), "") \ ++ MSG_INFO_NOTIF(2, INFO_QUIT_DISCONNECT, 1, 0, "s1", "", "", _("^BG%s^F3 disconnected"), "") \ ++ MSG_INFO_NOTIF(2, INFO_QUIT_KICK_IDLING, 1, 0, "s1", "", "", _("^BG%s^F3 was kicked for idling"), "") \ ++ MSG_INFO_NOTIF(1, INFO_QUIT_KICK_SPECTATING, 0, 0, "", "", "", _("^F2You were kicked from the server because you are a spectator and spectators aren't allowed at the moment."), "") \ ++ MSG_INFO_NOTIF(1, INFO_QUIT_SPECTATE, 1, 0, "s1", "", "", _("^BG%s^F3 is now spectating"), "") \ ++ MSG_INFO_NOTIF(1, INFO_RACE_ABANDONED, 1, 0, "s1", "", "", _("^BG%s^BG has abandoned the race"), "") \ ++ MSG_INFO_NOTIF(1, INFO_RACE_FAIL_RANKED, 1, 3, "s1 race_col f1ord race_col f3race_time race_diff", "s1 f3race_time", "race_newfail", _("^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_RACE_FAIL_UNRANKED, 1, 3, "s1 race_col f1ord race_col f3race_time race_diff", "s1 f3race_time", "race_newfail", _("^BG%s^BG couldn't break the %s%s^BG place record of %s%s %s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_RACE_FINISHED, 1, 0, "s1", "", "", _("^BG%s^BG has finished the race"), "") \ ++ MSG_INFO_NOTIF(1, INFO_RACE_NEW_BROKEN, 2, 3, "s1 s2 race_col f1ord race_col f2race_time race_diff", "s1 f2race_time", "race_newrankyellow", _("^BG%s^BG broke %s^BG's %s%s^BG place record with %s%s %s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_RACE_NEW_IMPROVED, 1, 3, "s1 race_col f1ord race_col f2race_time race_diff", "s1 f2race_time", "race_newtime", _("^BG%s^BG improved their %s%s^BG place record with %s%s %s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_RACE_NEW_MISSING_UID, 1, 1, "s1 f1race_time", "s1 f1race_time", "race_newfail", _("^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID and will be lost."), "") \ ++ MSG_INFO_NOTIF(1, INFO_RACE_NEW_SET, 1, 2, "s1 race_col f1ord race_col f2race_time", "s1 f2race_time", "race_newrecordserver", _("^BG%s^BG set the %s%s^BG place record with %s%s"), "") \ ++ MULTITEAM_INFO(1, INFO_SCORES_, 4, 0, 0, "", "", "", _("^TC^TT ^BGteam scores!"), "") \ ++ MSG_INFO_NOTIF(1, INFO_SPECTATE_WARNING, 0, 1, "f1secs", "", "", _("^F2You have to become a player within the next %s, otherwise you will be kicked, because spectating isn't allowed at this time!"), "") \ ++ MSG_INFO_NOTIF(1, INFO_SUPERWEAPON_PICKUP, 1, 0, "s1", "s1", "superweapons", _("^BG%s^K1 picked up a Superweapon"), "") \ ++ MSG_INFO_NOTIF(1, INFO_TEAMCHANGE_LARGERTEAM, 0, 0, "", "", "", _("^BGYou cannot change to a larger team"), "") \ ++ MSG_INFO_NOTIF(1, INFO_TEAMCHANGE_NOTALLOWED, 0, 0, "", "", "", _("^BGYou are not allowed to change teams"), "") \ ++ MSG_INFO_NOTIF(2, INFO_VERSION_BETA, 2, 0, "s1 s2", "", "", _("^F4NOTE: ^BGThe server is running ^F1Xonotic %s (beta)^BG, you have ^F2Xonotic %s"), "") \ ++ MSG_INFO_NOTIF(2, INFO_VERSION_OLD, 2, 0, "s1 s2", "", "", _("^F4NOTE: ^BGThe server is running ^F1Xonotic %s^BG, you have ^F2Xonotic %s"), "") \ ++ MSG_INFO_NOTIF(2, INFO_VERSION_OUTDATED, 2, 0, "s1 s2", "", "", _("^F4NOTE: ^F1Xonotic %s^BG is out, and you still have ^F2Xonotic %s^BG - get the update from ^F3http://www.xonotic.org/^BG!"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WATERMARK, 1, 0, "s1", "", "", _("^F3SVQC Build information: ^F4%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_ACCORDEON_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weapontuba", _("^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_ACCORDEON_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "weapontuba", _("^BG%s^K1 hurt their own ears with the @!#%%'n Accordeon%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_ARC_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponhlac", _("^BG%s%s^K1 was electrocuted by ^BG%s^K1's Arc%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_BLASTER_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponlaser", _("^BG%s%s^K1 was shot to death by ^BG%s^K1's Blaster%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_BLASTER_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "weaponlaser", _("^BG%s^K1 shot themself to hell with their Blaster%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_CRYLINK_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponcrylink", _("^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_CRYLINK_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "weaponcrylink", _("^BG%s^K1 felt the strong pull of their Crylink%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_DEVASTATOR_MURDER_DIRECT, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponrocketlauncher", _("^BG%s%s^K1 ate ^BG%s^K1's rocket%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_DEVASTATOR_MURDER_SPLASH, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponrocketlauncher", _("^BG%s%s^K1 got too close ^BG%s^K1's rocket%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_DEVASTATOR_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "weaponrocketlauncher", _("^BG%s^K1 blew themself up with their Devastator%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_ELECTRO_MURDER_BOLT, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponelectro", _("^BG%s%s^K1 was blasted by ^BG%s^K1's Electro bolt%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_ELECTRO_MURDER_COMBO, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponelectro", _("^BG%s%s^K1 felt the electrifying air of ^BG%s^K1's Electro combo%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_ELECTRO_MURDER_ORBS, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponelectro", _("^BG%s%s^K1 got too close to ^BG%s^K1's Electro orb%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_ELECTRO_SUICIDE_BOLT, 2, 1, "s1 s2loc spree_lost", "s1", "weaponelectro", _("^BG%s^K1 played with Electro bolts%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_ELECTRO_SUICIDE_ORBS, 2, 1, "s1 s2loc spree_lost", "s1", "weaponelectro", _("^BG%s^K1 could not remember where they put their Electro orb%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_FIREBALL_MURDER_BLAST, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponfireball", _("^BG%s%s^K1 got too close to ^BG%s^K1's fireball%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_FIREBALL_MURDER_FIREMINE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponfireball", _("^BG%s%s^K1 got burnt by ^BG%s^K1's firemine%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_FIREBALL_SUICIDE_BLAST, 2, 1, "s1 s2loc spree_lost", "s1", "weaponfireball", _("^BG%s^K1 should have used a smaller gun%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_FIREBALL_SUICIDE_FIREMINE, 2, 1, "s1 s2loc spree_lost", "s1", "weaponfireball", _("^BG%s^K1 forgot about their firemine%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_HAGAR_MURDER_BURST, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponhagar", _("^BG%s%s^K1 was pummeled by a burst of ^BG%s^K1's Hagar rockets%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_HAGAR_MURDER_SPRAY, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponhagar", _("^BG%s%s^K1 was pummeled by ^BG%s^K1's Hagar rockets%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_HAGAR_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "weaponhagar", _("^BG%s^K1 played with tiny Hagar rockets%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_HLAC_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponhlac", _("^BG%s%s^K1 was cut down with ^BG%s^K1's HLAC%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_HLAC_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "weaponhlac", _("^BG%s^K1 got a little jumpy with their HLAC%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_HMG_MURDER_SNIPE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponhmg", _("^BG%s%s^K1 was sniped by ^BG%s^K1's Heavy Machine Gun%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_HMG_MURDER_SPRAY, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponhmg", _("^BG%s%s^K1 was torn to bits by ^BG%s^K1's Heavy Machine Gun%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_HOOK_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponhook", _("^BG%s%s^K1 was caught in ^BG%s^K1's Hook gravity bomb%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_KLEINBOTTLE_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weapontuba", _("^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Klein Bottle%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_KLEINBOTTLE_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "weapontuba", _("^BG%s^K1 hurt their own ears with the @!#%%'n Klein Bottle%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_MACHINEGUN_MURDER_SNIPE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponuzi", _("^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_MACHINEGUN_MURDER_SPRAY, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponuzi", _("^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_MINELAYER_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponminelayer", _("^BG%s%s^K1 got too close to ^BG%s^K1's mine%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_MINELAYER_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "weaponminelayer", _("^BG%s^K1 forgot about their mine%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_MORTAR_MURDER_BOUNCE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weapongrenadelauncher", _("^BG%s%s^K1 got too close to ^BG%s^K1's Mortar grenade%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_MORTAR_MURDER_EXPLODE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weapongrenadelauncher", _("^BG%s%s^K1 ate ^BG%s^K1's Mortar grenade%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_MORTAR_SUICIDE_BOUNCE, 2, 1, "s1 s2loc spree_lost", "s1", "weapongrenadelauncher", _("^BG%s^K1 didn't see their own Mortar grenade%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_MORTAR_SUICIDE_EXPLODE, 2, 1, "s1 s2loc spree_lost", "s1", "weapongrenadelauncher", _("^BG%s^K1 blew themself up with their own Mortar%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_RIFLE_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponrifle", _("^BG%s%s^K1 was sniped with a Rifle by ^BG%s^K1%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_RIFLE_MURDER_HAIL, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponrifle", _("^BG%s%s^K1 died in ^BG%s^K1's Rifle bullet hail%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_RIFLE_MURDER_HAIL_PIERCING, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponrifle", _("^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle bullet hail%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_RIFLE_MURDER_PIERCING, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponrifle", _("^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_RPC_MURDER_DIRECT, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponrpc", _("^BG%s%s^K1 was sawn in half by ^BG%s^K1's Rocket Propelled Chainsaw%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_RPC_MURDER_SPLASH, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponrpc", _("^BG%s%s^K1 almost dodged ^BG%s^K1's Rocket Propelled Chainsaw%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_RPC_SUICIDE_DIRECT, 2, 1, "s1 s2loc spree_lost", "s1", "weaponrpc", _("^BG%s^K1 was sawn in half by their own Rocket Propelled Chainsaw%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_RPC_SUICIDE_SPLASH, 2, 1, "s1 s2loc spree_lost", "s1", "weaponrpc", _("^BG%s^K1 blew themself up with their Rocket Propelled Chainsaw%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_SEEKER_MURDER_SPRAY, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponseeker", _("^BG%s%s^K1 was pummeled by ^BG%s^K1's Seeker rockets%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_SEEKER_MURDER_TAG, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponseeker", _("^BG%s%s^K1 was tagged by ^BG%s^K1's Seeker%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_SEEKER_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "weaponseeker", _("^BG%s^K1 played with tiny Seeker rockets%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_SHOCKWAVE_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponshotgun", _("^BG%s%s^K1 was gunned down by ^BG%s^K1's Shockwave%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_SHOCKWAVE_MURDER_SLAP, 3, 2, "spree_inf s2 s1 s3loc spree_end", "s2 s1", "notify_melee_shotgun", _("^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shockwave%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_SHOTGUN_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponshotgun", _("^BG%s%s^K1 was gunned down by ^BG%s^K1's Shotgun%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_SHOTGUN_MURDER_SLAP, 3, 2, "spree_inf s2 s1 s3loc spree_end", "s2 s1", "notify_melee_shotgun", _("^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shotgun%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_THINKING_WITH_PORTALS, 2, 1, "s1 s2loc spree_lost", "s1", "notify_selfkill", _("^BG%s^K1 is now thinking with portals%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_TUBA_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weapontuba", _("^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Tuba%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_TUBA_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "weapontuba", _("^BG%s^K1 hurt their own ears with the @!#%%'n Tuba%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_VAPORIZER_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponminstanex", _("^BG%s%s^K1 has been sublimated by ^BG%s^K1's Vaporizer%s%s"), "") \ ++ MSG_INFO_NOTIF(1, INFO_WEAPON_VORTEX_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponnex", _("^BG%s%s^K1 has been vaporized by ^BG%s^K1's Vortex%s%s"), "") #define MULTITEAM_CENTER2(default,prefix,strnum,flnum,args,cpid,durcnt,normal,gentle) \ -- MSG_CENTER_NOTIF(default, prefix##RED, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \ -- MSG_CENTER_NOTIF(default, prefix##BLUE, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2))) ++ MSG_CENTER_NOTIF(default, prefix##RED, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \ ++ MSG_CENTER_NOTIF(default, prefix##BLUE, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2))) #define MULTITEAM_CENTER3(default,prefix,strnum,flnum,args,cpid,durcnt,normal,gentle) \ -- MSG_CENTER_NOTIF(default, prefix##RED, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \ -- MSG_CENTER_NOTIF(default, prefix##BLUE, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2))) \ -- MSG_CENTER_NOTIF(default, prefix##YELLOW, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_3, strtoupper(NAME_TEAM_3)), TCR(gentle, COL_TEAM_3, strtoupper(NAME_TEAM_3))) ++ MSG_CENTER_NOTIF(default, prefix##RED, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \ ++ MSG_CENTER_NOTIF(default, prefix##BLUE, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2))) \ ++ MSG_CENTER_NOTIF(default, prefix##YELLOW, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_3, strtoupper(NAME_TEAM_3)), TCR(gentle, COL_TEAM_3, strtoupper(NAME_TEAM_3))) #define MULTITEAM_CENTER4(default,prefix,strnum,flnum,args,cpid,durcnt,normal,gentle) \ -- MSG_CENTER_NOTIF(default, prefix##RED, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \ -- MSG_CENTER_NOTIF(default, prefix##BLUE, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2))) \ -- MSG_CENTER_NOTIF(default, prefix##YELLOW, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_3, strtoupper(NAME_TEAM_3)), TCR(gentle, COL_TEAM_3, strtoupper(NAME_TEAM_3))) \ -- MSG_CENTER_NOTIF(default, prefix##PINK, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_4, strtoupper(NAME_TEAM_4)), TCR(gentle, COL_TEAM_4, strtoupper(NAME_TEAM_4))) ++ MSG_CENTER_NOTIF(default, prefix##RED, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \ ++ MSG_CENTER_NOTIF(default, prefix##BLUE, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2))) \ ++ MSG_CENTER_NOTIF(default, prefix##YELLOW, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_3, strtoupper(NAME_TEAM_3)), TCR(gentle, COL_TEAM_3, strtoupper(NAME_TEAM_3))) \ ++ MSG_CENTER_NOTIF(default, prefix##PINK, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_4, strtoupper(NAME_TEAM_4)), TCR(gentle, COL_TEAM_4, strtoupper(NAME_TEAM_4))) #define MULTITEAM_CENTER(default,prefix,teams,strnum,flnum,args,cpid,durcnt,normal,gentle) \ -- MULTITEAM_CENTER##teams(default,prefix,strnum,flnum,args,cpid,durcnt,normal,gentle) ++ MULTITEAM_CENTER##teams(default,prefix,strnum,flnum,args,cpid,durcnt,normal,gentle) #define MSG_CENTER_NOTIFICATIONS \ - MSG_CENTER_NOTIF(1, CENTER_ALONE, 0, 0, "", NO_CPID, "0 0", _("^F4You are now alone!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_ASSAULT_ATTACKING, 0, 0, "", CPID_ASSAULT_ROLE, "0 0", _("^BGYou are attacking!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_ASSAULT_DEFENDING, 0, 0, "", CPID_ASSAULT_ROLE, "0 0", _("^BGYou are defending!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_COUNTDOWN_BEGIN, 0, 0, "", CPID_ROUND, "2 0", _("^F4Begin!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_COUNTDOWN_GAMESTART, 0, 1, "", CPID_ROUND, "1 f1", _("^F4Game starts in ^COUNT"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_COUNTDOWN_ROUNDSTART, 0, 1, "", CPID_ROUND, "1 f1", _("^F4Round starts in ^COUNT"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_COUNTDOWN_ROUNDSTOP, 0, 0, "", CPID_ROUND, "2 0", _("^F4Round cannot start"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_ROUND_TIED, 0, 0, "", CPID_ROUND, "0 0", _("^BGRound tied"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_ROUND_OVER, 0, 0, "", CPID_ROUND, "0 0", _("^BGRound over, there's no winner"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_CAMPCHECK, 0, 0, "", CPID_CAMPCHECK, "0 0", _("^F2Don't camp!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_CTF_CAPTURESHIELD_FREE, 0, 0, "", CPID_CTF_CAPSHIELD, "0 0", _("^BGYou are now free.\n^BGFeel free to ^F2try to capture^BG the flag again\n^BGif you think you will succeed."), "") \ -- MSG_CENTER_NOTIF(1, CENTER_CTF_CAPTURESHIELD_SHIELDED, 0, 0, "", CPID_CTF_CAPSHIELD, "0 0", _("^BGYou are now ^F1shielded^BG from the flag\n^BGfor ^F2too many unsuccessful attempts^BG to capture.\n^BGMake some defensive scores before trying again."), "") \ -- MULTITEAM_CENTER(1, CENTER_CTF_CAPTURE_, 2, 0, 0, "", CPID_CTF_LOWPRIO, "0 0", _("^BGYou captured the ^TC^TT^BG flag!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_CTF_FLAG_THROW_PUNISH, 0, 1, "f1secs", CPID_CTF_LOWPRIO, "0 0", _("^BGToo many flag throws! Throwing disabled for %s."), "") \ -- MULTITEAM_CENTER(1, CENTER_CTF_PASS_OTHER_, 2, 2, 0, "s1 s2", CPID_CTF_PASS, "0 0", _("^BG%s^BG passed the ^TC^TT^BG flag to %s"), "") \ -- MULTITEAM_CENTER(1, CENTER_CTF_PASS_RECEIVED_, 2, 1, 0, "s1", CPID_CTF_PASS, "0 0", _("^BGYou received the ^TC^TT^BG flag from %s"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_CTF_PASS_REQUESTED, 1, 0, "s1 pass_key", CPID_CTF_PASS, "0 0", _("^BG%s^BG requests you to pass the flag%s"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_CTF_PASS_REQUESTING, 1, 0, "s1", CPID_CTF_PASS, "0 0", _("^BGRequesting %s^BG to pass you the flag"), "") \ -- MULTITEAM_CENTER(1, CENTER_CTF_PASS_SENT_, 2, 1, 0, "s1", CPID_CTF_PASS, "0 0", _("^BGYou passed the ^TC^TT^BG flag to %s"), "") \ -- MULTITEAM_CENTER(1, CENTER_CTF_PICKUP_, 2, 0, 0, "", CPID_CTF_LOWPRIO, "0 0", _("^BGYou got the ^TC^TT^BG flag!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_CTF_PICKUP_ENEMY, 1, 0, "s1", CPID_CTF_LOWPRIO, "0 0", _("^BGThe %senemy^BG got your flag! Retrieve it!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_CTF_PICKUP_ENEMY_VERBOSE, 2, 0, "s1 s2 s1", CPID_CTF_LOWPRIO, "0 0", _("^BGThe %senemy (^BG%s%s)^BG got your flag! Retrieve it!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_CTF_PICKUP_TEAM, 1, 0, "s1", CPID_CTF_LOWPRIO, "0 0", _("^BGYour %steam mate^BG got the flag! Protect them!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_CTF_PICKUP_TEAM_VERBOSE, 2, 0, "s1 s2 s1", CPID_CTF_LOWPRIO, "0 0", _("^BGYour %steam mate (^BG%s%s)^BG got the flag! Protect them!"), "") \ -- MULTITEAM_CENTER(1, CENTER_CTF_RETURN_, 2, 0, 0, "", CPID_CTF_LOWPRIO, "0 0", _("^BGYou returned the ^TC^TT^BG flag!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_CTF_STALEMATE_CARRIER, 0, 0, "", CPID_STALEMATE, "0 0", _("^BGStalemate! Enemies can now see you on radar!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_CTF_STALEMATE_OTHER, 0, 0, "", CPID_STALEMATE, "0 0", _("^BGStalemate! Flag carriers can now be seen by enemies on radar!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_FRAG, 1, 1, "spree_cen s1", NO_CPID, "0 0", _("^K3%sYou fragged ^BG%s"), _("^K3%sYou scored against ^BG%s")) \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_FRAGGED, 1, 1, "spree_cen s1", NO_CPID, "0 0", _("^K1%sYou were fragged by ^BG%s"), _("^K1%sYou were scored against by ^BG%s")) \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_FRAGGED_VERBOSE, 1, 4, "spree_cen s1 frag_stats", NO_CPID, "0 0", _("^K1%sYou were fragged by ^BG%s^BG%s"), _("^K1%sYou were scored against by ^BG%s^BG%s")) \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_FRAG_VERBOSE, 1, 2, "spree_cen s1 frag_ping", NO_CPID, "0 0", _("^K3%sYou fragged ^BG%s^BG%s"), _("^K3%sYou scored against ^BG%s^BG%s")) \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_TYPEFRAG, 1, 1, "spree_cen s1", NO_CPID, "0 0", _("^K1%sYou typefragged ^BG%s"), _("^K1%sYou scored against ^BG%s^K1 while they were typing")) \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_TYPEFRAGGED, 1, 1, "spree_cen s1", NO_CPID, "0 0", _("^K1%sYou were typefragged by ^BG%s"), _("^K1%sYou were scored against by ^BG%s^K1 while typing!")) \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_TYPEFRAGGED_VERBOSE, 1, 4, "spree_cen s1 frag_stats", NO_CPID, "0 0", _("^K1%sYou were typefragged by ^BG%s^BG%s"), _("^K1%sYou were scored against by ^BG%s^K1 while typing^BG%s")) \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_TYPEFRAG_VERBOSE, 1, 2, "spree_cen s1 frag_ping", NO_CPID, "0 0", _("^K1%sYou typefragged ^BG%s^BG%s"), _("^K1%sYou scored against ^BG%s^K1 while they were typing^BG%s")) \ -- MSG_CENTER_NOTIF(1, CENTER_NADE_THROW, 0, 0, "", CPID_NADES, "0 0", _("^BGPress ^F2DROPWEAPON^BG again to toss the nade!"), "") \ - MSG_CENTER_NOTIF(1, CENTER_NADE_BONUS, 0, 0, "", CPID_NADES, "0 0", _("^F2You got a ^K1BONUS GRENADE^F2!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_AUTOTEAMCHANGE, 0, 1, "death_team", NO_CPID, "0 0", _("^BGYou have been moved into a different team\nYou are now on: %s"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_BETRAYAL, 0, 0, "", NO_CPID, "0 0", _("^K1Don't shoot your team mates!"), _("^K1Don't go against your team mates!")) \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_CAMP, 0, 0, "", NO_CPID, "0 0", _("^K1Die camper!"), _("^K1Reconsider your tactics, camper!")) \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_CHEAT, 0, 0, "", NO_CPID, "0 0", _("^K1You unfairly eliminated yourself!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_CUSTOM, 2, 0, "s2", NO_CPID, "0 0", _("^K1You were %s"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_DROWN, 0, 0, "", NO_CPID, "0 0", _("^K1You couldn't catch your breath!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_FALL, 0, 0, "", NO_CPID, "0 0", _("^K1You hit the ground with a crunch!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_FIRE, 0, 0, "", NO_CPID, "0 0", _("^K1You got a little bit too crispy!"), _("^K1You felt a little too hot!")) \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_GENERIC, 0, 0, "", NO_CPID, "0 0", _("^K1You killed your own dumb self!"), _("^K1You need to be more careful!")) \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_LAVA, 0, 0, "", NO_CPID, "0 0", _("^K1You couldn't stand the heat!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_MONSTER, 0, 0, "", NO_CPID, "0 0", _("^K1You were killed by a monster!"), _("^K1You need to watch out for monsters!")) \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_NADE, 0, 0, "", NO_CPID, "0 0", _("^K1You forgot to put the pin back in!"), _("^K1Tastes like chicken!")) \ - MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_NADE_NAPALM, 0, 0, "", NO_CPID, "0 0", _("^K1Hanging around a napalm explosion is bad!"), "") \ - MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_NADE_ICE_FREEZE, 0, 0, "", NO_CPID, "0 0", _("^K1You got a little bit too cold!"), _("^K1You felt a little chilly!")) \ - MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_NADE_HEAL, 0, 0, "", NO_CPID, "0 0", _("^K1Your Healing Nade is a bit defective"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_NOAMMO, 0, 0, "", NO_CPID, "0 0", _("^K1You were killed for running out of ammo..."), _("^K1You are respawning for running out of ammo...")) \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_ROT, 0, 0, "", NO_CPID, "0 0", _("^K1You grew too old without taking your medicine"), _("^K1You need to preserve your health")) \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_SHOOTING_STAR, 0, 0, "", NO_CPID, "0 0", _("^K1You became a shooting star!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_SLIME, 0, 0, "", NO_CPID, "0 0", _("^K1You melted away in slime!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_SUICIDE, 0, 0, "", NO_CPID, "0 0", _("^K1You committed suicide!"), _("^K1You ended it all!")) \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_SWAMP, 0, 0, "", NO_CPID, "0 0", _("^K1You got stuck in a swamp!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_TEAMCHANGE, 0, 1, "death_team", NO_CPID, "0 0", _("^BGYou are now on: %s"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_TOUCHEXPLODE, 0, 0, "", NO_CPID, "0 0", _("^K1You died in an accident!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_TURRET, 0, 0, "", NO_CPID, "0 0", _("^K1You were fragged by a turret!"), _("^K1You had an unfortunate run in with a turret!")) \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_TURRET_EWHEEL, 0, 0, "", NO_CPID, "0 0", _("^K1You were fragged by an eWheel turret!"), _("^K1You had an unfortunate run in with an eWheel turret!")) \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_TURRET_WALK, 0, 0, "", NO_CPID, "0 0", _("^K1You were fragged by a Walker turret!"), _("^K1You had an unfortunate run in with a Walker turret!")) \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_BUMB_DEATH, 0, 0, "", NO_CPID, "0 0", _("^K1You got caught in the blast of a Bumblebee explosion!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_CRUSH, 0, 0, "", NO_CPID, "0 0", _("^K1You were crushed by a vehicle!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_RAPT_BOMB, 0, 0, "", NO_CPID, "0 0", _("^K1You were caught in a Raptor cluster bomb!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_RAPT_DEATH, 0, 0, "", NO_CPID, "0 0", _("^K1You got caught in the blast of a Raptor explosion!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_SPID_DEATH, 0, 0, "", NO_CPID, "0 0", _("^K1You got caught in the blast of a Spiderbot explosion!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_SPID_ROCKET, 0, 0, "", NO_CPID, "0 0", _("^K1You were blasted to bits by a Spiderbot rocket!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_WAKI_DEATH, 0, 0, "", NO_CPID, "0 0", _("^K1You got caught in the blast of a Racer explosion!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_WAKI_ROCKET, 0, 0, "", NO_CPID, "0 0", _("^K1You couldn't find shelter from a Racer rocket!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VOID, 0, 0, "", NO_CPID, "0 0", _("^K1Watch your step!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_TEAMKILL_FRAG, 1, 0, "s1", NO_CPID, "0 0", _("^K1Moron! You fragged ^BG%s^K1, a team mate!"), _("^K1Moron! You went against ^BG%s^K1, a team mate!")) \ -- MSG_CENTER_NOTIF(1, CENTER_DEATH_TEAMKILL_FRAGGED, 1, 0, "s1", NO_CPID, "0 0", _("^K1You were fragged by ^BG%s^K1, a team mate"), _("^K1You were scored against by ^BG%s^K1, a team mate")) \ -- MSG_CENTER_NOTIF(1, CENTER_DISCONNECT_IDLING, 0, 1, "", CPID_IDLING, "1 f1", _("^K1Stop idling!\n^BGDisconnecting in ^COUNT..."), "") \ - MSG_CENTER_NOTIF(1, CENTER_DOOR_LOCKED_NEED, 0, 0, "", NO_CPID, "0 0", _("^BGYou need %s^BG!"), "") \ - MSG_CENTER_NOTIF(1, CENTER_DOOR_LOCKED_ALSONEED, 0, 0, "", NO_CPID, "0 0", _("^BGYou also need %s^BG!"), "") \ - MSG_CENTER_NOTIF(1, CENTER_DOOR_UNLOCKED, 0, 0, "", NO_CPID, "0 0", _("^BGDoor unlocked!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_EXTRALIVES, 0, 0, "", NO_CPID, "0 0", _("^F2You picked up some extra lives"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_FREEZE, 1, 0, "s1", NO_CPID, "0 0", _("^K3You froze ^BG%s"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_FROZEN, 1, 0, "s1", NO_CPID, "0 0", _("^K1You were frozen by ^BG%s"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_REVIVE, 1, 0, "s1", NO_CPID, "0 0", _("^K3You revived ^BG%s"), "") \ - MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_REVIVE_FALL, 0, 0, "", NO_CPID, "0 0", _("^K3You revived yourself"), "") \ - MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_REVIVE_SELF, 0, 0, "", NO_CPID, "0 0", _("^K3You revived yourself"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_REVIVED, 1, 0, "s1", NO_CPID, "0 0", _("^K3You were revived by ^BG%s"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_AUTO_REVIVED, 0, 1, "f1", NO_CPID, "0 0", _("^K3You were automatically revived after %s second(s)"), "") \ -- MULTITEAM_CENTER(1, CENTER_ROUND_TEAM_WIN_, 4, 0, 0, "", CPID_ROUND, "0 0", _("^TC^TT^BG team wins the round"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_ROUND_PLAYER_WIN, 1, 0, "s1", CPID_ROUND, "0 0", _("^BG%s^BG wins the round"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_SELF, 0, 0, "", NO_CPID, "0 0", _("^K1You froze yourself"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_SPAWN_LATE, 0, 0, "", NO_CPID, "0 0", _("^K1Round already started, you spawn as frozen"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_INVASION_SUPERMONSTER, 1, 0, "s1", NO_CPID, "0 0", _("^K1A %s has arrived!"), "") \ - MSG_CENTER_NOTIF(1, CENTER_ITEM_BUFF_DROP, 0, 1, "item_buffname", CPID_ITEM, "item_centime 0", _("^BGYou dropped the %s^BG Buff!"), "") \ - MSG_CENTER_NOTIF(1, CENTER_ITEM_BUFF_GOT, 0, 1, "item_buffname", CPID_ITEM, "item_centime 0", _("^BGYou got the %s^BG Buff!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_ITEM_WEAPON_DONTHAVE, 0, 1, "item_wepname", CPID_ITEM, "item_centime 0", _("^BGYou do not have the ^F1%s"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_ITEM_WEAPON_DROP, 1, 1, "item_wepname item_wepammo", CPID_ITEM, "item_centime 0", _("^BGYou dropped the ^F1%s^BG%s"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_ITEM_WEAPON_GOT, 0, 1, "item_wepname", CPID_ITEM, "item_centime 0", _("^BGYou got the ^F1%s"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_ITEM_WEAPON_NOAMMO, 0, 1, "item_wepname", CPID_ITEM, "item_centime 0", _("^BGYou don't have enough ammo for the ^F1%s"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_ITEM_WEAPON_PRIMORSEC, 0, 3, "item_wepname f2primsec f3primsec", CPID_ITEM, "item_centime 0", _("^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_ITEM_WEAPON_UNAVAILABLE, 0, 1, "item_wepname", CPID_ITEM, "item_centime 0", _("^F1%s^BG is ^F4not available^BG on this map"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_JOIN_NOSPAWNS, 0, 0, "", CPID_PREVENT_JOIN, "0 0", _("^K1No spawnpoints available!\nHope your team can fix it..."), "") \ -- MSG_CENTER_NOTIF(1, CENTER_JOIN_PREVENT, 0, 0, "", CPID_PREVENT_JOIN, "0 0", _("^K1You may not join the game at this time.\nThe player limit reached maximum capacity."), "") \ -- MSG_CENTER_NOTIF(1, CENTER_KEEPAWAY_DROPPED, 1, 0, "s1", CPID_KEEPAWAY, "0 0", _("^BG%s^BG has dropped the ball!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_KEEPAWAY_PICKUP, 1, 0, "s1", CPID_KEEPAWAY, "0 0", _("^BG%s^BG has picked up the ball!"), "") \ - MSG_CENTER_NOTIF(1, CENTER_KEEPAWAY_PICKUP_SELF, 0, 0, "", CPID_KEEPAWAY, "0 0", _("^BGYou picked up the ball"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_KEEPAWAY_WARN, 0, 0, "", CPID_KEEPAWAY_WARN, "0 0", _("^BGKilling people while you don't have the ball gives no points!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_KEYHUNT_HELP, 0, 0, "", CPID_KEYHUNT, "0 0", _("^BGAll keys are in your team's hands!\nHelp the key carriers to meet!"), "") \ -- MULTITEAM_CENTER(1, CENTER_KEYHUNT_INTERFERE_, 4, 0, 0, "", CPID_KEYHUNT, "0 0", _("^BGAll keys are in ^TC^TT team^BG's hands!\nInterfere ^F4NOW^BG!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_KEYHUNT_MEET, 0, 0, "", CPID_KEYHUNT, "0 0", _("^BGAll keys are in your team's hands!\nMeet the other key carriers ^F4NOW^BG!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_KEYHUNT_ROUNDSTART, 0, 1, "", CPID_KEYHUNT_OTHER, "1 f1", _("^F4Round will start in ^COUNT"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_KEYHUNT_SCAN, 0, 1, "", CPID_KEYHUNT_OTHER, "f1 0", _("^BGScanning frequency range..."), "") \ -- MULTITEAM_CENTER(1, CENTER_KEYHUNT_START_, 4, 0, 0, "", CPID_KEYHUNT, "0 0", _("^BGYou are starting with the ^TC^TT Key"), "") \ - MSG_CENTER_NOTIF(1, CENTER_KEYHUNT_WAIT, 0, 4, "missing_teams", CPID_KEYHUNT_OTHER, "0 0", _("^BGWaiting for players to join...\nNeed active players for: %s"), "") \ - MSG_CENTER_NOTIF(1, CENTER_MISSING_TEAMS, 0, 4, "missing_teams", CPID_MISSING_TEAMS, "-1 0", _("^BGWaiting for players to join...\nNeed active players for: %s"), "") \ - MSG_CENTER_NOTIF(1, CENTER_KEYHUNT_WAIT, 0, 1, "missing_teams", CPID_KEYHUNT_OTHER, "0 0", _("^BGWaiting for players to join...\nNeed active players for: %s"), "") \ - MSG_CENTER_NOTIF(1, CENTER_MISSING_TEAMS, 0, 1, "missing_teams", CPID_MISSING_TEAMS, "-1 0", _("^BGWaiting for players to join...\nNeed active players for: %s"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_MISSING_PLAYERS, 0, 1, "f1", CPID_MISSING_PLAYERS, "-1 0", _("^BGWaiting for %s player(s) to join..."), "") \ -- MSG_CENTER_NOTIF(1, CENTER_MINSTA_FINDAMMO, 0, 0, "", CPID_MINSTA_FINDAMMO, "1 9", _("^F4^COUNT^BG left to find some ammo!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_MINSTA_FINDAMMO_FIRST, 0, 0, "", CPID_MINSTA_FINDAMMO, "1 10", _("^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"), _("^BGGet some ammo! ^F4^COUNT^BG left!")) \ -- MSG_CENTER_NOTIF(1, CENTER_MINSTA_LIVES_REMAINING, 0, 1, "f1", NO_CPID, "0 0", _("^F2Extra lives remaining: ^K1%s"), "") \ - MSG_CENTER_NOTIF(1, CENTER_MINSTA_SECONDARY, 0, 0, "", NO_CPID, "0 0", _("^BGSecondary fire inflicts no damage!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_MOTD, 1, 0, "s1", CPID_MOTD, "-1 0", _("^BG%s"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_NIX_COUNTDOWN, 0, 2, "item_wepname", CPID_NIX, "1 f2", _("^F2^COUNT^BG until weapon change...\nNext weapon: ^F1%s"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_NIX_NEWWEAPON, 0, 1, "item_wepname", CPID_NIX, "0 0", _("^F2Active weapon: ^F1%s"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_NADE, 0, 0, "", NO_CPID, "0 0", _("^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"), "") \ - MSG_CENTER_NOTIF(1, CENTER_OVERKILL_CHARGE, 0, 0, "", CPID_OVERKILL, "0 0", _("^BGYour weapon's charge is too low, release the attack button & wait for it to charge"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_OVERTIME_FRAG, 0, 0, "", CPID_OVERTIME, "0 0", _("^F2Now playing ^F4OVERTIME^F2!\nKeep fragging until we have a winner!"), _("^F2Now playing ^F4OVERTIME^F2!\nKeep scoring until we have a winner!")) \ -- MSG_CENTER_NOTIF(1, CENTER_OVERTIME_TIME, 0, 1, "f1time", CPID_OVERTIME, "0 0", _("^F2Now playing ^F4OVERTIME^F2!\n^BGAdded ^F4%s^BG to the game!"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_POWERDOWN_INVISIBILITY, 0, 0, "", CPID_POWERUP, "0 0", _("^F2Invisibility has worn off"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_POWERDOWN_SHIELD, 0, 0, "", CPID_POWERUP, "0 0", _("^F2Shield has worn off"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_POWERDOWN_SPEED, 0, 0, "", CPID_POWERUP, "0 0", _("^F2Speed has worn off"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_POWERDOWN_STRENGTH, 0, 0, "", CPID_POWERUP, "0 0", _("^F2Strength has worn off"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_POWERUP_INVISIBILITY, 0, 0, "", CPID_POWERUP, "0 0", _("^F2You are invisible"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_POWERUP_SHIELD, 0, 0, "", CPID_POWERUP, "0 0", _("^F2Shield surrounds you"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_POWERUP_SPEED, 0, 0, "", CPID_POWERUP, "0 0", _("^F2You are on speed"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_POWERUP_STRENGTH, 0, 0, "", CPID_POWERUP, "0 0", _("^F2Strength infuses your weapons with devastating power"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_RACE_FINISHLAP, 0, 0, "", CPID_RACE_FINISHLAP, "0 0", _("^F2The race is over, finish your lap!"), "") \ - MSG_CENTER_NOTIF(1, CENTER_SECONDARY_NODAMAGE, 0, 0, "", NO_CPID, "0 0", _("^BGSecondary fire inflicts no damage!"), "") \ - MSG_CENTER_NOTIF(1, CENTER_SEQUENCE_COMPLETED, 0, 0, "", NO_CPID, "0 0", _("^BGSequence completed!"), "") \ - MSG_CENTER_NOTIF(1, CENTER_SEQUENCE_COUNTER, 0, 0, "", NO_CPID, "0 0", _("^BGThere are more to go..."), "") \ - MSG_CENTER_NOTIF(1, CENTER_SEQUENCE_COUNTER_FEWMORE, 0, 1, "f1", NO_CPID, "0 0", _("^BGOnly %s^BG more to go..."), "") \ -- MSG_CENTER_NOTIF(1, CENTER_SUPERWEAPON_BROKEN, 0, 0, "", CPID_POWERUP, "0 0", _("^F2Superweapons have broken down"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_SUPERWEAPON_LOST, 0, 0, "", CPID_POWERUP, "0 0", _("^F2Superweapons have been lost"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_SUPERWEAPON_PICKUP, 0, 0, "", CPID_POWERUP, "0 0", _("^F2You now have a superweapon"), "") \ -- MULTITEAM_CENTER(1, CENTER_TEAMCHANGE_, 4, 0, 1, "", CPID_TEAMCHANGE, "1 f1", _("^K1Changing to ^TC^TT^K1 in ^COUNT"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_TEAMCHANGE_AUTO, 0, 1, "", CPID_TEAMCHANGE, "1 f1", _("^K1Changing team in ^COUNT"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_TEAMCHANGE_SPECTATE, 0, 1, "", CPID_TEAMCHANGE, "1 f1", _("^K1Spectating in ^COUNT"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_TEAMCHANGE_SUICIDE, 0, 1, "", CPID_TEAMCHANGE, "1 f1", _("^K1Suicide in ^COUNT"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_TIMEOUT_BEGINNING, 0, 1, "", CPID_TIMEOUT, "1 f1", _("^F4Timeout begins in ^COUNT"), "") \ -- MSG_CENTER_NOTIF(1, CENTER_TIMEOUT_ENDING, 0, 1, "", CPID_TIMEOUT, "1 f1", _("^F4Timeout ends in ^COUNT"), "") ++ MSG_CENTER_NOTIF(1, CENTER_ALONE, 0, 0, "", NO_CPID, "0 0", _("^F4You are now alone!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_ASSAULT_ATTACKING, 0, 0, "", CPID_ASSAULT_ROLE, "0 0", _("^BGYou are attacking!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_ASSAULT_DEFENDING, 0, 0, "", CPID_ASSAULT_ROLE, "0 0", _("^BGYou are defending!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_COUNTDOWN_BEGIN, 0, 0, "", CPID_ROUND, "2 0", _("^F4Begin!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_COUNTDOWN_GAMESTART, 0, 1, "", CPID_ROUND, "1 f1", _("^F4Game starts in ^COUNT"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_COUNTDOWN_ROUNDSTART, 0, 1, "", CPID_ROUND, "1 f1", _("^F4Round starts in ^COUNT"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_COUNTDOWN_ROUNDSTOP, 0, 0, "", CPID_ROUND, "2 0", _("^F4Round cannot start"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_ROUND_TIED, 0, 0, "", CPID_ROUND, "0 0", _("^BGRound tied"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_ROUND_OVER, 0, 0, "", CPID_ROUND, "0 0", _("^BGRound over, there's no winner"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_CAMPCHECK, 0, 0, "", CPID_CAMPCHECK, "0 0", _("^F2Don't camp!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_CTF_CAPTURESHIELD_FREE, 0, 0, "", CPID_CTF_CAPSHIELD, "0 0", _("^BGYou are now free.\n^BGFeel free to ^F2try to capture^BG the flag again\n^BGif you think you will succeed."), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_CTF_CAPTURESHIELD_SHIELDED, 0, 0, "", CPID_CTF_CAPSHIELD, "0 0", _("^BGYou are now ^F1shielded^BG from the flag\n^BGfor ^F2too many unsuccessful attempts^BG to capture.\n^BGMake some defensive scores before trying again."), "") \ ++ MULTITEAM_CENTER(1, CENTER_CTF_CAPTURE_, 2, 0, 0, "", CPID_CTF_LOWPRIO, "0 0", _("^BGYou captured the ^TC^TT^BG flag!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_CTF_FLAG_THROW_PUNISH, 0, 1, "f1secs", CPID_CTF_LOWPRIO, "0 0", _("^BGToo many flag throws! Throwing disabled for %s."), "") \ ++ MULTITEAM_CENTER(1, CENTER_CTF_PASS_OTHER_, 2, 2, 0, "s1 s2", CPID_CTF_PASS, "0 0", _("^BG%s^BG passed the ^TC^TT^BG flag to %s"), "") \ ++ MULTITEAM_CENTER(1, CENTER_CTF_PASS_RECEIVED_, 2, 1, 0, "s1", CPID_CTF_PASS, "0 0", _("^BGYou received the ^TC^TT^BG flag from %s"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_CTF_PASS_REQUESTED, 1, 0, "s1 pass_key", CPID_CTF_PASS, "0 0", _("^BG%s^BG requests you to pass the flag%s"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_CTF_PASS_REQUESTING, 1, 0, "s1", CPID_CTF_PASS, "0 0", _("^BGRequesting %s^BG to pass you the flag"), "") \ ++ MULTITEAM_CENTER(1, CENTER_CTF_PASS_SENT_, 2, 1, 0, "s1", CPID_CTF_PASS, "0 0", _("^BGYou passed the ^TC^TT^BG flag to %s"), "") \ ++ MULTITEAM_CENTER(1, CENTER_CTF_PICKUP_, 2, 0, 0, "", CPID_CTF_LOWPRIO, "0 0", _("^BGYou got the ^TC^TT^BG flag!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_CTF_PICKUP_ENEMY, 1, 0, "s1", CPID_CTF_LOWPRIO, "0 0", _("^BGThe %senemy^BG got your flag! Retrieve it!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_CTF_PICKUP_ENEMY_VERBOSE, 2, 0, "s1 s2 s1", CPID_CTF_LOWPRIO, "0 0", _("^BGThe %senemy (^BG%s%s)^BG got your flag! Retrieve it!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_CTF_PICKUP_TEAM, 1, 0, "s1", CPID_CTF_LOWPRIO, "0 0", _("^BGYour %steam mate^BG got the flag! Protect them!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_CTF_PICKUP_TEAM_VERBOSE, 2, 0, "s1 s2 s1", CPID_CTF_LOWPRIO, "0 0", _("^BGYour %steam mate (^BG%s%s)^BG got the flag! Protect them!"), "") \ ++ MULTITEAM_CENTER(1, CENTER_CTF_RETURN_, 2, 0, 0, "", CPID_CTF_LOWPRIO, "0 0", _("^BGYou returned the ^TC^TT^BG flag!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_CTF_STALEMATE_CARRIER, 0, 0, "", CPID_STALEMATE, "0 0", _("^BGStalemate! Enemies can now see you on radar!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_CTF_STALEMATE_OTHER, 0, 0, "", CPID_STALEMATE, "0 0", _("^BGStalemate! Flag carriers can now be seen by enemies on radar!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_FRAG, 1, 1, "spree_cen s1", NO_CPID, "0 0", _("^K3%sYou fragged ^BG%s"), _("^K3%sYou scored against ^BG%s")) \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_FRAGGED, 1, 1, "spree_cen s1", NO_CPID, "0 0", _("^K1%sYou were fragged by ^BG%s"), _("^K1%sYou were scored against by ^BG%s")) \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_FRAGGED_VERBOSE, 1, 4, "spree_cen s1 frag_stats", NO_CPID, "0 0", _("^K1%sYou were fragged by ^BG%s^BG%s"), _("^K1%sYou were scored against by ^BG%s^BG%s")) \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_FRAG_VERBOSE, 1, 2, "spree_cen s1 frag_ping", NO_CPID, "0 0", _("^K3%sYou fragged ^BG%s^BG%s"), _("^K3%sYou scored against ^BG%s^BG%s")) \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_TYPEFRAG, 1, 1, "spree_cen s1", NO_CPID, "0 0", _("^K1%sYou typefragged ^BG%s"), _("^K1%sYou scored against ^BG%s^K1 while they were typing")) \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_TYPEFRAGGED, 1, 1, "spree_cen s1", NO_CPID, "0 0", _("^K1%sYou were typefragged by ^BG%s"), _("^K1%sYou were scored against by ^BG%s^K1 while typing!")) \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_TYPEFRAGGED_VERBOSE, 1, 4, "spree_cen s1 frag_stats", NO_CPID, "0 0", _("^K1%sYou were typefragged by ^BG%s^BG%s"), _("^K1%sYou were scored against by ^BG%s^K1 while typing^BG%s")) \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_TYPEFRAG_VERBOSE, 1, 2, "spree_cen s1 frag_ping", NO_CPID, "0 0", _("^K1%sYou typefragged ^BG%s^BG%s"), _("^K1%sYou scored against ^BG%s^K1 while they were typing^BG%s")) \ ++ MSG_CENTER_NOTIF(1, CENTER_NADE_THROW, 0, 0, "", CPID_NADES, "0 0", _("^BGPress ^F2DROPWEAPON^BG again to toss the nade!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_NADE_BONUS, 0, 0, "", CPID_NADES, "0 0", _("^F2You got a ^K1BONUS GRENADE^F2!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_AUTOTEAMCHANGE, 0, 1, "death_team", NO_CPID, "0 0", _("^BGYou have been moved into a different team\nYou are now on: %s"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_BETRAYAL, 0, 0, "", NO_CPID, "0 0", _("^K1Don't shoot your team mates!"), _("^K1Don't go against your team mates!")) \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_CAMP, 0, 0, "", NO_CPID, "0 0", _("^K1Die camper!"), _("^K1Reconsider your tactics, camper!")) \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_CHEAT, 0, 0, "", NO_CPID, "0 0", _("^K1You unfairly eliminated yourself!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_CUSTOM, 2, 0, "s2", NO_CPID, "0 0", _("^K1You were %s"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_DROWN, 0, 0, "", NO_CPID, "0 0", _("^K1You couldn't catch your breath!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_FALL, 0, 0, "", NO_CPID, "0 0", _("^K1You hit the ground with a crunch!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_FIRE, 0, 0, "", NO_CPID, "0 0", _("^K1You got a little bit too crispy!"), _("^K1You felt a little too hot!")) \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_GENERIC, 0, 0, "", NO_CPID, "0 0", _("^K1You killed your own dumb self!"), _("^K1You need to be more careful!")) \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_LAVA, 0, 0, "", NO_CPID, "0 0", _("^K1You couldn't stand the heat!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_MONSTER, 0, 0, "", NO_CPID, "0 0", _("^K1You were killed by a monster!"), _("^K1You need to watch out for monsters!")) \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_NADE, 0, 0, "", NO_CPID, "0 0", _("^K1You forgot to put the pin back in!"), _("^K1Tastes like chicken!")) \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_NADE_NAPALM, 0, 0, "", NO_CPID, "0 0", _("^K1Hanging around a napalm explosion is bad!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_NADE_ICE_FREEZE, 0, 0, "", NO_CPID, "0 0", _("^K1You got a little bit too cold!"), _("^K1You felt a little chilly!")) \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_NADE_HEAL, 0, 0, "", NO_CPID, "0 0", _("^K1Your Healing Nade is a bit defective"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_NOAMMO, 0, 0, "", NO_CPID, "0 0", _("^K1You were killed for running out of ammo..."), _("^K1You are respawning for running out of ammo...")) \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_ROT, 0, 0, "", NO_CPID, "0 0", _("^K1You grew too old without taking your medicine"), _("^K1You need to preserve your health")) \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_SHOOTING_STAR, 0, 0, "", NO_CPID, "0 0", _("^K1You became a shooting star!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_SLIME, 0, 0, "", NO_CPID, "0 0", _("^K1You melted away in slime!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_SUICIDE, 0, 0, "", NO_CPID, "0 0", _("^K1You committed suicide!"), _("^K1You ended it all!")) \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_SWAMP, 0, 0, "", NO_CPID, "0 0", _("^K1You got stuck in a swamp!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_TEAMCHANGE, 0, 1, "death_team", NO_CPID, "0 0", _("^BGYou are now on: %s"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_TOUCHEXPLODE, 0, 0, "", NO_CPID, "0 0", _("^K1You died in an accident!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_TURRET, 0, 0, "", NO_CPID, "0 0", _("^K1You were fragged by a turret!"), _("^K1You had an unfortunate run in with a turret!")) \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_TURRET_EWHEEL, 0, 0, "", NO_CPID, "0 0", _("^K1You were fragged by an eWheel turret!"), _("^K1You had an unfortunate run in with an eWheel turret!")) \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_TURRET_WALK, 0, 0, "", NO_CPID, "0 0", _("^K1You were fragged by a Walker turret!"), _("^K1You had an unfortunate run in with a Walker turret!")) \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_BUMB_DEATH, 0, 0, "", NO_CPID, "0 0", _("^K1You got caught in the blast of a Bumblebee explosion!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_CRUSH, 0, 0, "", NO_CPID, "0 0", _("^K1You were crushed by a vehicle!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_RAPT_BOMB, 0, 0, "", NO_CPID, "0 0", _("^K1You were caught in a Raptor cluster bomb!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_RAPT_DEATH, 0, 0, "", NO_CPID, "0 0", _("^K1You got caught in the blast of a Raptor explosion!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_SPID_DEATH, 0, 0, "", NO_CPID, "0 0", _("^K1You got caught in the blast of a Spiderbot explosion!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_SPID_ROCKET, 0, 0, "", NO_CPID, "0 0", _("^K1You were blasted to bits by a Spiderbot rocket!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_WAKI_DEATH, 0, 0, "", NO_CPID, "0 0", _("^K1You got caught in the blast of a Racer explosion!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VH_WAKI_ROCKET, 0, 0, "", NO_CPID, "0 0", _("^K1You couldn't find shelter from a Racer rocket!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_VOID, 0, 0, "", NO_CPID, "0 0", _("^K1Watch your step!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_TEAMKILL_FRAG, 1, 0, "s1", NO_CPID, "0 0", _("^K1Moron! You fragged ^BG%s^K1, a team mate!"), _("^K1Moron! You went against ^BG%s^K1, a team mate!")) \ ++ MSG_CENTER_NOTIF(1, CENTER_DEATH_TEAMKILL_FRAGGED, 1, 0, "s1", NO_CPID, "0 0", _("^K1You were fragged by ^BG%s^K1, a team mate"), _("^K1You were scored against by ^BG%s^K1, a team mate")) \ ++ MSG_CENTER_NOTIF(1, CENTER_DISCONNECT_IDLING, 0, 1, "", CPID_IDLING, "1 f1", _("^K1Stop idling!\n^BGDisconnecting in ^COUNT..."), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_DOOR_LOCKED_NEED, 0, 0, "", NO_CPID, "0 0", _("^BGYou need %s^BG!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_DOOR_LOCKED_ALSONEED, 0, 0, "", NO_CPID, "0 0", _("^BGYou also need %s^BG!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_DOOR_UNLOCKED, 0, 0, "", NO_CPID, "0 0", _("^BGDoor unlocked!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_EXTRALIVES, 0, 0, "", NO_CPID, "0 0", _("^F2You picked up some extra lives"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_FREEZE, 1, 0, "s1", NO_CPID, "0 0", _("^K3You froze ^BG%s"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_FROZEN, 1, 0, "s1", NO_CPID, "0 0", _("^K1You were frozen by ^BG%s"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_REVIVE, 1, 0, "s1", NO_CPID, "0 0", _("^K3You revived ^BG%s"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_REVIVE_SELF, 0, 0, "", NO_CPID, "0 0", _("^K3You revived yourself"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_REVIVED, 1, 0, "s1", NO_CPID, "0 0", _("^K3You were revived by ^BG%s"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_AUTO_REVIVED, 0, 1, "f1", NO_CPID, "0 0", _("^K3You were automatically revived after %s second(s)"), "") \ ++ MULTITEAM_CENTER(1, CENTER_ROUND_TEAM_WIN_, 4, 0, 0, "", CPID_ROUND, "0 0", _("^TC^TT^BG team wins the round"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_ROUND_PLAYER_WIN, 1, 0, "s1", CPID_ROUND, "0 0", _("^BG%s^BG wins the round"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_SELF, 0, 0, "", NO_CPID, "0 0", _("^K1You froze yourself"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_SPAWN_LATE, 0, 0, "", NO_CPID, "0 0", _("^K1Round already started, you spawn as frozen"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_INVASION_SUPERMONSTER, 1, 0, "s1", NO_CPID, "0 0", _("^K1A %s has arrived!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_ITEM_BUFF_DROP, 0, 1, "item_buffname", CPID_ITEM, "item_centime 0", _("^BGYou dropped the %s^BG Buff!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_ITEM_BUFF_GOT, 0, 1, "item_buffname", CPID_ITEM, "item_centime 0", _("^BGYou got the %s^BG Buff!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_ITEM_WEAPON_DONTHAVE, 0, 1, "item_wepname", CPID_ITEM, "item_centime 0", _("^BGYou do not have the ^F1%s"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_ITEM_WEAPON_DROP, 1, 1, "item_wepname item_wepammo", CPID_ITEM, "item_centime 0", _("^BGYou dropped the ^F1%s^BG%s"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_ITEM_WEAPON_GOT, 0, 1, "item_wepname", CPID_ITEM, "item_centime 0", _("^BGYou got the ^F1%s"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_ITEM_WEAPON_NOAMMO, 0, 1, "item_wepname", CPID_ITEM, "item_centime 0", _("^BGYou don't have enough ammo for the ^F1%s"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_ITEM_WEAPON_PRIMORSEC, 0, 3, "item_wepname f2primsec f3primsec", CPID_ITEM, "item_centime 0", _("^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_ITEM_WEAPON_UNAVAILABLE, 0, 1, "item_wepname", CPID_ITEM, "item_centime 0", _("^F1%s^BG is ^F4not available^BG on this map"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_JOIN_NOSPAWNS, 0, 0, "", CPID_PREVENT_JOIN, "0 0", _("^K1No spawnpoints available!\nHope your team can fix it..."), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_JOIN_PREVENT, 0, 0, "", CPID_PREVENT_JOIN, "0 0", _("^K1You may not join the game at this time.\nThe player limit reached maximum capacity."), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_KEEPAWAY_DROPPED, 1, 0, "s1", CPID_KEEPAWAY, "0 0", _("^BG%s^BG has dropped the ball!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_KEEPAWAY_PICKUP, 1, 0, "s1", CPID_KEEPAWAY, "0 0", _("^BG%s^BG has picked up the ball!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_KEEPAWAY_PICKUP_SELF, 0, 0, "", CPID_KEEPAWAY, "0 0", _("^BGYou picked up the ball"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_KEEPAWAY_WARN, 0, 0, "", CPID_KEEPAWAY_WARN, "0 0", _("^BGKilling people while you don't have the ball gives no points!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_KEYHUNT_HELP, 0, 0, "", CPID_KEYHUNT, "0 0", _("^BGAll keys are in your team's hands!\nHelp the key carriers to meet!"), "") \ ++ MULTITEAM_CENTER(1, CENTER_KEYHUNT_INTERFERE_, 4, 0, 0, "", CPID_KEYHUNT, "0 0", _("^BGAll keys are in ^TC^TT team^BG's hands!\nInterfere ^F4NOW^BG!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_KEYHUNT_MEET, 0, 0, "", CPID_KEYHUNT, "0 0", _("^BGAll keys are in your team's hands!\nMeet the other key carriers ^F4NOW^BG!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_KEYHUNT_ROUNDSTART, 0, 1, "", CPID_KEYHUNT_OTHER, "1 f1", _("^F4Round will start in ^COUNT"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_KEYHUNT_SCAN, 0, 1, "", CPID_KEYHUNT_OTHER, "f1 0", _("^BGScanning frequency range..."), "") \ ++ MULTITEAM_CENTER(1, CENTER_KEYHUNT_START_, 4, 0, 0, "", CPID_KEYHUNT, "0 0", _("^BGYou are starting with the ^TC^TT Key"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_KEYHUNT_WAIT, 0, 1, "missing_teams", CPID_KEYHUNT_OTHER, "0 0", _("^BGWaiting for players to join...\nNeed active players for: %s"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_MISSING_TEAMS, 0, 1, "missing_teams", CPID_MISSING_TEAMS, "-1 0", _("^BGWaiting for players to join...\nNeed active players for: %s"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_MISSING_PLAYERS, 0, 1, "f1", CPID_MISSING_PLAYERS, "-1 0", _("^BGWaiting for %s player(s) to join..."), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_MINSTA_FINDAMMO, 0, 0, "", CPID_MINSTA_FINDAMMO, "1 9", _("^F4^COUNT^BG left to find some ammo!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_MINSTA_FINDAMMO_FIRST, 0, 0, "", CPID_MINSTA_FINDAMMO, "1 10", _("^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"), _("^BGGet some ammo! ^F4^COUNT^BG left!")) \ ++ MSG_CENTER_NOTIF(1, CENTER_MINSTA_LIVES_REMAINING, 0, 1, "f1", NO_CPID, "0 0", _("^F2Extra lives remaining: ^K1%s"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_MOTD, 1, 0, "s1", CPID_MOTD, "-1 0", _("^BG%s"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_NIX_COUNTDOWN, 0, 2, "item_wepname", CPID_NIX, "1 f2", _("^F2^COUNT^BG until weapon change...\nNext weapon: ^F1%s"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_NIX_NEWWEAPON, 0, 1, "item_wepname", CPID_NIX, "0 0", _("^F2Active weapon: ^F1%s"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_NADE, 0, 0, "", NO_CPID, "0 0", _("^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_OVERKILL_CHARGE, 0, 0, "", CPID_OVERKILL, "0 0", _("^BGYour weapon's charge is too low, release the attack button & wait for it to charge"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_OVERTIME_FRAG, 0, 0, "", CPID_OVERTIME, "0 0", _("^F2Now playing ^F4OVERTIME^F2!\nKeep fragging until we have a winner!"), _("^F2Now playing ^F4OVERTIME^F2!\nKeep scoring until we have a winner!")) \ ++ MSG_CENTER_NOTIF(1, CENTER_OVERTIME_TIME, 0, 1, "f1time", CPID_OVERTIME, "0 0", _("^F2Now playing ^F4OVERTIME^F2!\n^BGAdded ^F4%s^BG to the game!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_POWERDOWN_INVISIBILITY, 0, 0, "", CPID_POWERUP, "0 0", _("^F2Invisibility has worn off"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_POWERDOWN_SHIELD, 0, 0, "", CPID_POWERUP, "0 0", _("^F2Shield has worn off"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_POWERDOWN_SPEED, 0, 0, "", CPID_POWERUP, "0 0", _("^F2Speed has worn off"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_POWERDOWN_STRENGTH, 0, 0, "", CPID_POWERUP, "0 0", _("^F2Strength has worn off"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_POWERUP_INVISIBILITY, 0, 0, "", CPID_POWERUP, "0 0", _("^F2You are invisible"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_POWERUP_SHIELD, 0, 0, "", CPID_POWERUP, "0 0", _("^F2Shield surrounds you"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_POWERUP_SPEED, 0, 0, "", CPID_POWERUP, "0 0", _("^F2You are on speed"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_POWERUP_STRENGTH, 0, 0, "", CPID_POWERUP, "0 0", _("^F2Strength infuses your weapons with devastating power"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_RACE_FINISHLAP, 0, 0, "", CPID_RACE_FINISHLAP, "0 0", _("^F2The race is over, finish your lap!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_SECONDARY_NODAMAGE, 0, 0, "", NO_CPID, "0 0", _("^BGSecondary fire inflicts no damage!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_SEQUENCE_COMPLETED, 0, 0, "", NO_CPID, "0 0", _("^BGSequence completed!"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_SEQUENCE_COUNTER, 0, 0, "", NO_CPID, "0 0", _("^BGThere are more to go..."), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_SEQUENCE_COUNTER_FEWMORE, 0, 1, "f1", NO_CPID, "0 0", _("^BGOnly %s^BG more to go..."), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_SUPERWEAPON_BROKEN, 0, 0, "", CPID_POWERUP, "0 0", _("^F2Superweapons have broken down"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_SUPERWEAPON_LOST, 0, 0, "", CPID_POWERUP, "0 0", _("^F2Superweapons have been lost"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_SUPERWEAPON_PICKUP, 0, 0, "", CPID_POWERUP, "0 0", _("^F2You now have a superweapon"), "") \ ++ MULTITEAM_CENTER(1, CENTER_TEAMCHANGE_, 4, 0, 1, "", CPID_TEAMCHANGE, "1 f1", _("^K1Changing to ^TC^TT^K1 in ^COUNT"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_TEAMCHANGE_AUTO, 0, 1, "", CPID_TEAMCHANGE, "1 f1", _("^K1Changing team in ^COUNT"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_TEAMCHANGE_SPECTATE, 0, 1, "", CPID_TEAMCHANGE, "1 f1", _("^K1Spectating in ^COUNT"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_TEAMCHANGE_SUICIDE, 0, 1, "", CPID_TEAMCHANGE, "1 f1", _("^K1Suicide in ^COUNT"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_TIMEOUT_BEGINNING, 0, 1, "", CPID_TIMEOUT, "1 f1", _("^F4Timeout begins in ^COUNT"), "") \ ++ MSG_CENTER_NOTIF(1, CENTER_TIMEOUT_ENDING, 0, 1, "", CPID_TIMEOUT, "1 f1", _("^F4Timeout ends in ^COUNT"), "") #define MULTITEAM_MULTI2(default,prefix,anncepre,infopre,centerpre) \ -- MSG_MULTI_NOTIF(default, prefix##RED, anncepre##RED, infopre##RED, centerpre##RED) \ -- MSG_MULTI_NOTIF(default, prefix##BLUE, anncepre##BLUE, infopre##BLUE, centerpre##BLUE) ++ MSG_MULTI_NOTIF(default, prefix##RED, anncepre##RED, infopre##RED, centerpre##RED) \ ++ MSG_MULTI_NOTIF(default, prefix##BLUE, anncepre##BLUE, infopre##BLUE, centerpre##BLUE) #define MULTITEAM_MULTI3(default,prefix,anncepre,infopre,centerpre) \ -- MSG_MULTI_NOTIF(default, prefix##RED, anncepre##RED, infopre##RED, centerpre##RED) \ -- MSG_MULTI_NOTIF(default, prefix##BLUE, anncepre##BLUE, infopre##BLUE, centerpre##BLUE) \ -- MSG_MULTI_NOTIF(default, prefix##YELLOW, anncepre##YELLOW, infopre##YELLOW, centerpre##YELLOW) ++ MSG_MULTI_NOTIF(default, prefix##RED, anncepre##RED, infopre##RED, centerpre##RED) \ ++ MSG_MULTI_NOTIF(default, prefix##BLUE, anncepre##BLUE, infopre##BLUE, centerpre##BLUE) \ ++ MSG_MULTI_NOTIF(default, prefix##YELLOW, anncepre##YELLOW, infopre##YELLOW, centerpre##YELLOW) #define MULTITEAM_MULTI4(default,prefix,anncepre,infopre,centerpre) \ -- MSG_MULTI_NOTIF(default, prefix##RED, anncepre##RED, infopre##RED, centerpre##RED) \ -- MSG_MULTI_NOTIF(default, prefix##BLUE, anncepre##BLUE, infopre##BLUE, centerpre##BLUE) \ -- MSG_MULTI_NOTIF(default, prefix##YELLOW, anncepre##YELLOW, infopre##YELLOW, centerpre##YELLOW) \ -- MSG_MULTI_NOTIF(default, prefix##PINK, anncepre##PINK, infopre##PINK, centerpre##PINK) ++ MSG_MULTI_NOTIF(default, prefix##RED, anncepre##RED, infopre##RED, centerpre##RED) \ ++ MSG_MULTI_NOTIF(default, prefix##BLUE, anncepre##BLUE, infopre##BLUE, centerpre##BLUE) \ ++ MSG_MULTI_NOTIF(default, prefix##YELLOW, anncepre##YELLOW, infopre##YELLOW, centerpre##YELLOW) \ ++ MSG_MULTI_NOTIF(default, prefix##PINK, anncepre##PINK, infopre##PINK, centerpre##PINK) #define MULTITEAM_MULTI(default,prefix,teams,anncepre,infopre,centerpre) \ -- MULTITEAM_MULTI##teams(default,prefix,anncepre,infopre,centerpre) ++ MULTITEAM_MULTI##teams(default,prefix,anncepre,infopre,centerpre) #define MSG_MULTI_NOTIFICATIONS \ -- MSG_MULTI_NOTIF(1, DEATH_MURDER_CHEAT, NO_MSG, INFO_DEATH_MURDER_CHEAT, NO_MSG) \ -- MSG_MULTI_NOTIF(1, DEATH_MURDER_DROWN, NO_MSG, INFO_DEATH_MURDER_DROWN, NO_MSG) \ -- MSG_MULTI_NOTIF(1, DEATH_MURDER_FALL, NO_MSG, INFO_DEATH_MURDER_FALL, NO_MSG) \ -- MSG_MULTI_NOTIF(1, DEATH_MURDER_FIRE, NO_MSG, INFO_DEATH_MURDER_FIRE, NO_MSG) \ -- MSG_MULTI_NOTIF(1, DEATH_MURDER_LAVA, NO_MSG, INFO_DEATH_MURDER_LAVA, NO_MSG) \ -- MSG_MULTI_NOTIF(1, DEATH_MURDER_MONSTER, NO_MSG, INFO_DEATH_MURDER_MONSTER, CENTER_DEATH_SELF_MONSTER) \ -- MSG_MULTI_NOTIF(1, DEATH_MURDER_NADE, NO_MSG, INFO_DEATH_MURDER_NADE, NO_MSG) \ - MSG_MULTI_NOTIF(1, DEATH_MURDER_NADE_NAPALM, NO_MSG, INFO_DEATH_MURDER_NADE_NAPALM, NO_MSG) \ - MSG_MULTI_NOTIF(1, DEATH_MURDER_NADE_ICE, NO_MSG, INFO_DEATH_MURDER_NADE_ICE, NO_MSG) \ - MSG_MULTI_NOTIF(1, DEATH_MURDER_NADE_ICE_FREEZE, NO_MSG, INFO_DEATH_MURDER_NADE_ICE_FREEZE, NO_MSG) \ - MSG_MULTI_NOTIF(1, DEATH_MURDER_NADE_HEAL, NO_MSG, INFO_DEATH_MURDER_NADE_HEAL, NO_MSG) \ -- MSG_MULTI_NOTIF(1, DEATH_MURDER_SHOOTING_STAR, NO_MSG, INFO_DEATH_MURDER_SHOOTING_STAR, NO_MSG) \ -- MSG_MULTI_NOTIF(1, DEATH_MURDER_SLIME, NO_MSG, INFO_DEATH_MURDER_SLIME, NO_MSG) \ -- MSG_MULTI_NOTIF(1, DEATH_MURDER_SWAMP, NO_MSG, INFO_DEATH_MURDER_SWAMP, NO_MSG) \ -- MSG_MULTI_NOTIF(1, DEATH_MURDER_TELEFRAG, NO_MSG, INFO_DEATH_MURDER_TELEFRAG, NO_MSG) \ -- MSG_MULTI_NOTIF(1, DEATH_MURDER_TOUCHEXPLODE, NO_MSG, INFO_DEATH_MURDER_TOUCHEXPLODE, NO_MSG) \ -- MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_BUMB_DEATH, NO_MSG, INFO_DEATH_MURDER_VH_BUMB_DEATH, NO_MSG) \ -- MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_BUMB_GUN, NO_MSG, INFO_DEATH_MURDER_VH_BUMB_GUN, NO_MSG) \ -- MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_CRUSH, NO_MSG, INFO_DEATH_MURDER_VH_CRUSH, NO_MSG) \ -- MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_RAPT_BOMB, NO_MSG, INFO_DEATH_MURDER_VH_RAPT_BOMB, NO_MSG) \ -- MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_RAPT_CANNON, NO_MSG, INFO_DEATH_MURDER_VH_RAPT_CANNON, NO_MSG) \ -- MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_RAPT_DEATH, NO_MSG, INFO_DEATH_MURDER_VH_RAPT_DEATH, NO_MSG) \ -- MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_SPID_DEATH, NO_MSG, INFO_DEATH_MURDER_VH_SPID_DEATH, NO_MSG) \ -- MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_SPID_MINIGUN, NO_MSG, INFO_DEATH_MURDER_VH_SPID_MINIGUN, NO_MSG) \ -- MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_SPID_ROCKET, NO_MSG, INFO_DEATH_MURDER_VH_SPID_ROCKET, NO_MSG) \ -- MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_WAKI_DEATH, NO_MSG, INFO_DEATH_MURDER_VH_WAKI_DEATH, NO_MSG) \ -- MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_WAKI_GUN, NO_MSG, INFO_DEATH_MURDER_VH_WAKI_GUN, NO_MSG) \ -- MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_WAKI_ROCKET, NO_MSG, INFO_DEATH_MURDER_VH_WAKI_ROCKET, NO_MSG) \ - MSG_MULTI_NOTIF(1, DEATH_MURDER_VENGEANCE, NO_MSG, INFO_DEATH_MURDER_VENGEANCE, NO_MSG) \ -- MSG_MULTI_NOTIF(1, DEATH_MURDER_VOID, NO_MSG, INFO_DEATH_MURDER_VOID, NO_MSG) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_AUTOTEAMCHANGE, NO_MSG, INFO_DEATH_SELF_AUTOTEAMCHANGE, CENTER_DEATH_SELF_AUTOTEAMCHANGE) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_BETRAYAL, NO_MSG, INFO_DEATH_SELF_BETRAYAL, CENTER_DEATH_SELF_BETRAYAL) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_CAMP, NO_MSG, INFO_DEATH_SELF_CAMP, CENTER_DEATH_SELF_CAMP) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_CHEAT, NO_MSG, INFO_DEATH_SELF_CHEAT, CENTER_DEATH_SELF_CHEAT) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_CUSTOM, NO_MSG, INFO_DEATH_SELF_GENERIC, CENTER_DEATH_SELF_CUSTOM) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_DROWN, NO_MSG, INFO_DEATH_SELF_DROWN, CENTER_DEATH_SELF_DROWN) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_FALL, NO_MSG, INFO_DEATH_SELF_FALL, CENTER_DEATH_SELF_FALL) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_FIRE, NO_MSG, INFO_DEATH_SELF_FIRE, CENTER_DEATH_SELF_FIRE) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_GENERIC, NO_MSG, INFO_DEATH_SELF_GENERIC, CENTER_DEATH_SELF_GENERIC) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_LAVA, NO_MSG, INFO_DEATH_SELF_LAVA, CENTER_DEATH_SELF_LAVA) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_MON_MAGE, NO_MSG, INFO_DEATH_SELF_MON_MAGE, CENTER_DEATH_SELF_MONSTER) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_MON_SHAMBLER_CLAW, NO_MSG, INFO_DEATH_SELF_MON_SHAMBLER_CLAW, CENTER_DEATH_SELF_MONSTER) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_MON_SHAMBLER_SMASH, NO_MSG, INFO_DEATH_SELF_MON_SHAMBLER_SMASH, CENTER_DEATH_SELF_MONSTER) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_MON_SHAMBLER_ZAP, NO_MSG, INFO_DEATH_SELF_MON_SHAMBLER_ZAP, CENTER_DEATH_SELF_MONSTER) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_MON_SPIDER, NO_MSG, INFO_DEATH_SELF_MON_SPIDER, CENTER_DEATH_SELF_MONSTER) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_MON_WYVERN, NO_MSG, INFO_DEATH_SELF_MON_WYVERN, CENTER_DEATH_SELF_MONSTER) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_MON_ZOMBIE_JUMP, NO_MSG, INFO_DEATH_SELF_MON_ZOMBIE_JUMP, CENTER_DEATH_SELF_MONSTER) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_MON_ZOMBIE_MELEE, NO_MSG, INFO_DEATH_SELF_MON_ZOMBIE_MELEE, CENTER_DEATH_SELF_MONSTER) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_NADE, NO_MSG, INFO_DEATH_SELF_NADE, CENTER_DEATH_SELF_NADE) \ - MSG_MULTI_NOTIF(1, DEATH_SELF_NADE_NAPALM, NO_MSG, INFO_DEATH_SELF_NADE_NAPALM, CENTER_DEATH_SELF_NADE_NAPALM) \ - MSG_MULTI_NOTIF(1, DEATH_SELF_NADE_ICE, NO_MSG, INFO_DEATH_SELF_NADE_ICE, CENTER_DEATH_SELF_NADE_ICE_FREEZE) \ - MSG_MULTI_NOTIF(1, DEATH_SELF_NADE_ICE_FREEZE, NO_MSG, INFO_DEATH_SELF_NADE_ICE_FREEZE, CENTER_DEATH_SELF_NADE_ICE_FREEZE) \ - MSG_MULTI_NOTIF(1, DEATH_SELF_NADE_HEAL, NO_MSG, INFO_DEATH_SELF_NADE_HEAL, CENTER_DEATH_SELF_NADE_HEAL) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_NOAMMO, NO_MSG, INFO_DEATH_SELF_NOAMMO, CENTER_DEATH_SELF_NOAMMO) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_ROT, NO_MSG, INFO_DEATH_SELF_ROT, CENTER_DEATH_SELF_ROT) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_SHOOTING_STAR, NO_MSG, INFO_DEATH_SELF_SHOOTING_STAR, CENTER_DEATH_SELF_SHOOTING_STAR) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_SLIME, NO_MSG, INFO_DEATH_SELF_SLIME, CENTER_DEATH_SELF_SLIME) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_SUICIDE, NO_MSG, INFO_DEATH_SELF_SUICIDE, CENTER_DEATH_SELF_SUICIDE) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_SWAMP, NO_MSG, INFO_DEATH_SELF_SWAMP, CENTER_DEATH_SELF_SWAMP) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_TEAMCHANGE, NO_MSG, INFO_DEATH_SELF_TEAMCHANGE, CENTER_DEATH_SELF_TEAMCHANGE) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_TOUCHEXPLODE, NO_MSG, INFO_DEATH_SELF_TOUCHEXPLODE, CENTER_DEATH_SELF_TOUCHEXPLODE) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET, NO_MSG, INFO_DEATH_SELF_TURRET, CENTER_DEATH_SELF_TURRET) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_EWHEEL, NO_MSG, INFO_DEATH_SELF_TURRET_EWHEEL, CENTER_DEATH_SELF_TURRET_EWHEEL) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_FLAC, NO_MSG, INFO_DEATH_SELF_TURRET_FLAC, CENTER_DEATH_SELF_TURRET) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_HELLION, NO_MSG, INFO_DEATH_SELF_TURRET_HELLION, CENTER_DEATH_SELF_TURRET) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_HK, NO_MSG, INFO_DEATH_SELF_TURRET_HK, CENTER_DEATH_SELF_TURRET) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_MACHINEGUN, NO_MSG, INFO_DEATH_SELF_TURRET_MACHINEGUN, CENTER_DEATH_SELF_TURRET) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_MLRS, NO_MSG, INFO_DEATH_SELF_TURRET_MLRS, CENTER_DEATH_SELF_TURRET) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_PHASER, NO_MSG, INFO_DEATH_SELF_TURRET_PHASER, CENTER_DEATH_SELF_TURRET) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_PLASMA, NO_MSG, INFO_DEATH_SELF_TURRET_PLASMA, CENTER_DEATH_SELF_TURRET) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_TESLA, NO_MSG, INFO_DEATH_SELF_TURRET_TESLA, CENTER_DEATH_SELF_TURRET) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_WALK_GUN, NO_MSG, INFO_DEATH_SELF_TURRET_WALK_GUN, CENTER_DEATH_SELF_TURRET_WALK) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_WALK_MEELE, NO_MSG, INFO_DEATH_SELF_TURRET_WALK_MEELE, CENTER_DEATH_SELF_TURRET_WALK) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_WALK_ROCKET, NO_MSG, INFO_DEATH_SELF_TURRET_WALK_ROCKET, CENTER_DEATH_SELF_TURRET_WALK) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_VH_BUMB_DEATH, NO_MSG, INFO_DEATH_SELF_VH_BUMB_DEATH, CENTER_DEATH_SELF_VH_BUMB_DEATH) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_VH_CRUSH, NO_MSG, INFO_DEATH_SELF_VH_CRUSH, CENTER_DEATH_SELF_VH_CRUSH) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_VH_RAPT_BOMB, NO_MSG, INFO_DEATH_SELF_VH_RAPT_BOMB, CENTER_DEATH_SELF_VH_RAPT_BOMB) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_VH_RAPT_DEATH, NO_MSG, INFO_DEATH_SELF_VH_RAPT_DEATH, CENTER_DEATH_SELF_VH_RAPT_DEATH) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_VH_SPID_DEATH, NO_MSG, INFO_DEATH_SELF_VH_SPID_DEATH, CENTER_DEATH_SELF_VH_SPID_DEATH) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_VH_SPID_ROCKET, NO_MSG, INFO_DEATH_SELF_VH_SPID_ROCKET, CENTER_DEATH_SELF_VH_SPID_ROCKET) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_VH_WAKI_DEATH, NO_MSG, INFO_DEATH_SELF_VH_WAKI_DEATH, CENTER_DEATH_SELF_VH_WAKI_DEATH) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_VH_WAKI_ROCKET, NO_MSG, INFO_DEATH_SELF_VH_WAKI_ROCKET, CENTER_DEATH_SELF_VH_WAKI_ROCKET) \ -- MSG_MULTI_NOTIF(1, DEATH_SELF_VOID, NO_MSG, INFO_DEATH_SELF_VOID, CENTER_DEATH_SELF_VOID) \ - MSG_MULTI_NOTIF(1, ITEM_BUFF_DROP, NO_MSG, INFO_ITEM_BUFF_DROP, CENTER_ITEM_BUFF_DROP) \ - MSG_MULTI_NOTIF(1, ITEM_BUFF_GOT, NO_MSG, INFO_ITEM_BUFF_GOT, CENTER_ITEM_BUFF_GOT) \ -- MSG_MULTI_NOTIF(1, ITEM_WEAPON_DONTHAVE, NO_MSG, INFO_ITEM_WEAPON_DONTHAVE, CENTER_ITEM_WEAPON_DONTHAVE) \ -- MSG_MULTI_NOTIF(1, ITEM_WEAPON_DROP, NO_MSG, INFO_ITEM_WEAPON_DROP, CENTER_ITEM_WEAPON_DROP) \ -- MSG_MULTI_NOTIF(1, ITEM_WEAPON_GOT, NO_MSG, INFO_ITEM_WEAPON_GOT, CENTER_ITEM_WEAPON_GOT) \ -- MSG_MULTI_NOTIF(1, ITEM_WEAPON_NOAMMO, NO_MSG, INFO_ITEM_WEAPON_NOAMMO, CENTER_ITEM_WEAPON_NOAMMO) \ -- MSG_MULTI_NOTIF(1, ITEM_WEAPON_PRIMORSEC, NO_MSG, INFO_ITEM_WEAPON_PRIMORSEC, CENTER_ITEM_WEAPON_PRIMORSEC) \ -- MSG_MULTI_NOTIF(1, ITEM_WEAPON_UNAVAILABLE, NO_MSG, INFO_ITEM_WEAPON_UNAVAILABLE, CENTER_ITEM_WEAPON_UNAVAILABLE) \ -- MSG_MULTI_NOTIF(1, MULTI_COUNTDOWN_BEGIN, ANNCE_BEGIN, NO_MSG, CENTER_COUNTDOWN_BEGIN) \ -- MSG_MULTI_NOTIF(1, MULTI_MINSTA_FINDAMMO, ANNCE_NUM_10, NO_MSG, CENTER_MINSTA_FINDAMMO_FIRST) \ -- MSG_MULTI_NOTIF(1, WEAPON_ACCORDEON_MURDER, NO_MSG, INFO_WEAPON_ACCORDEON_MURDER, NO_MSG) \ -- MSG_MULTI_NOTIF(1, WEAPON_ACCORDEON_SUICIDE, NO_MSG, INFO_WEAPON_ACCORDEON_SUICIDE, CENTER_DEATH_SELF_GENERIC) \ - MSG_MULTI_NOTIF(1, WEAPON_ARC_MURDER, NO_MSG, INFO_WEAPON_ARC_MURDER, NO_MSG) \ - MSG_MULTI_NOTIF(1, WEAPON_BLASTER_MURDER, NO_MSG, INFO_WEAPON_BLASTER_MURDER, NO_MSG) \ - MSG_MULTI_NOTIF(1, WEAPON_BLASTER_SUICIDE, NO_MSG, INFO_WEAPON_BLASTER_SUICIDE, CENTER_DEATH_SELF_GENERIC) \ -- MSG_MULTI_NOTIF(1, WEAPON_CRYLINK_MURDER, NO_MSG, INFO_WEAPON_CRYLINK_MURDER, NO_MSG) \ -- MSG_MULTI_NOTIF(1, WEAPON_CRYLINK_SUICIDE, NO_MSG, INFO_WEAPON_CRYLINK_SUICIDE, CENTER_DEATH_SELF_GENERIC) \ - MSG_MULTI_NOTIF(1, WEAPON_DEVASTATOR_MURDER_DIRECT, NO_MSG, INFO_WEAPON_DEVASTATOR_MURDER_DIRECT, NO_MSG) \ - MSG_MULTI_NOTIF(1, WEAPON_DEVASTATOR_MURDER_SPLASH, NO_MSG, INFO_WEAPON_DEVASTATOR_MURDER_SPLASH, NO_MSG) \ - MSG_MULTI_NOTIF(1, WEAPON_DEVASTATOR_SUICIDE, NO_MSG, INFO_WEAPON_DEVASTATOR_SUICIDE, CENTER_DEATH_SELF_GENERIC) \ -- MSG_MULTI_NOTIF(1, WEAPON_ELECTRO_MURDER_BOLT, NO_MSG, INFO_WEAPON_ELECTRO_MURDER_BOLT, NO_MSG) \ -- MSG_MULTI_NOTIF(1, WEAPON_ELECTRO_MURDER_COMBO, NO_MSG, INFO_WEAPON_ELECTRO_MURDER_COMBO, NO_MSG) \ -- MSG_MULTI_NOTIF(1, WEAPON_ELECTRO_MURDER_ORBS, NO_MSG, INFO_WEAPON_ELECTRO_MURDER_ORBS, NO_MSG) \ -- MSG_MULTI_NOTIF(1, WEAPON_ELECTRO_SUICIDE_BOLT, NO_MSG, INFO_WEAPON_ELECTRO_SUICIDE_BOLT, CENTER_DEATH_SELF_GENERIC) \ -- MSG_MULTI_NOTIF(1, WEAPON_ELECTRO_SUICIDE_ORBS, NO_MSG, INFO_WEAPON_ELECTRO_SUICIDE_ORBS, CENTER_DEATH_SELF_GENERIC) \ -- MSG_MULTI_NOTIF(1, WEAPON_FIREBALL_MURDER_BLAST, NO_MSG, INFO_WEAPON_FIREBALL_MURDER_BLAST, NO_MSG) \ -- MSG_MULTI_NOTIF(1, WEAPON_FIREBALL_MURDER_FIREMINE, NO_MSG, INFO_WEAPON_FIREBALL_MURDER_FIREMINE, NO_MSG) \ -- MSG_MULTI_NOTIF(1, WEAPON_FIREBALL_SUICIDE_BLAST, NO_MSG, INFO_WEAPON_FIREBALL_SUICIDE_BLAST, CENTER_DEATH_SELF_GENERIC) \ -- MSG_MULTI_NOTIF(1, WEAPON_FIREBALL_SUICIDE_FIREMINE, NO_MSG, INFO_WEAPON_FIREBALL_SUICIDE_FIREMINE, CENTER_DEATH_SELF_GENERIC) \ -- MSG_MULTI_NOTIF(1, WEAPON_HAGAR_MURDER_BURST, NO_MSG, INFO_WEAPON_HAGAR_MURDER_BURST, NO_MSG) \ -- MSG_MULTI_NOTIF(1, WEAPON_HAGAR_MURDER_SPRAY, NO_MSG, INFO_WEAPON_HAGAR_MURDER_SPRAY, NO_MSG) \ -- MSG_MULTI_NOTIF(1, WEAPON_HAGAR_SUICIDE, NO_MSG, INFO_WEAPON_HAGAR_SUICIDE, CENTER_DEATH_SELF_GENERIC) \ -- MSG_MULTI_NOTIF(1, WEAPON_HLAC_MURDER, NO_MSG, INFO_WEAPON_HLAC_MURDER, NO_MSG) \ -- MSG_MULTI_NOTIF(1, WEAPON_HLAC_SUICIDE, NO_MSG, INFO_WEAPON_HLAC_SUICIDE, CENTER_DEATH_SELF_GENERIC) \ -- MSG_MULTI_NOTIF(1, WEAPON_HOOK_MURDER, NO_MSG, INFO_WEAPON_HOOK_MURDER, NO_MSG) \ -- MSG_MULTI_NOTIF(1, WEAPON_KLEINBOTTLE_MURDER, NO_MSG, INFO_WEAPON_KLEINBOTTLE_MURDER, NO_MSG) \ -- MSG_MULTI_NOTIF(1, WEAPON_KLEINBOTTLE_SUICIDE, NO_MSG, INFO_WEAPON_KLEINBOTTLE_SUICIDE, CENTER_DEATH_SELF_GENERIC) \ - MSG_MULTI_NOTIF(1, WEAPON_LASER_MURDER, NO_MSG, INFO_WEAPON_LASER_MURDER, NO_MSG) \ - MSG_MULTI_NOTIF(1, WEAPON_LASER_SUICIDE, NO_MSG, INFO_WEAPON_LASER_SUICIDE, CENTER_DEATH_SELF_GENERIC) \ - MSG_MULTI_NOTIF(1, WEAPON_MACHINEGUN_MURDER_SNIPE, NO_MSG, INFO_WEAPON_MACHINEGUN_MURDER_SNIPE, NO_MSG) \ - MSG_MULTI_NOTIF(1, WEAPON_MACHINEGUN_MURDER_SPRAY, NO_MSG, INFO_WEAPON_MACHINEGUN_MURDER_SPRAY, NO_MSG) \ -- MSG_MULTI_NOTIF(1, WEAPON_MINELAYER_MURDER, NO_MSG, INFO_WEAPON_MINELAYER_MURDER, NO_MSG) \ -- MSG_MULTI_NOTIF(1, WEAPON_MINELAYER_SUICIDE, NO_MSG, INFO_WEAPON_MINELAYER_SUICIDE, CENTER_DEATH_SELF_GENERIC) \ - MSG_MULTI_NOTIF(1, WEAPON_MINSTANEX_MURDER, NO_MSG, INFO_WEAPON_MINSTANEX_MURDER, NO_MSG) \ -- MSG_MULTI_NOTIF(1, WEAPON_MORTAR_MURDER_BOUNCE, NO_MSG, INFO_WEAPON_MORTAR_MURDER_BOUNCE, NO_MSG) \ -- MSG_MULTI_NOTIF(1, WEAPON_MORTAR_MURDER_EXPLODE, NO_MSG, INFO_WEAPON_MORTAR_MURDER_EXPLODE, NO_MSG) \ -- MSG_MULTI_NOTIF(1, WEAPON_MORTAR_SUICIDE_BOUNCE, NO_MSG, INFO_WEAPON_MORTAR_SUICIDE_BOUNCE, CENTER_DEATH_SELF_GENERIC) \ -- MSG_MULTI_NOTIF(1, WEAPON_MORTAR_SUICIDE_EXPLODE, NO_MSG, INFO_WEAPON_MORTAR_SUICIDE_EXPLODE, CENTER_DEATH_SELF_GENERIC) \ - MSG_MULTI_NOTIF(1, WEAPON_NEX_MURDER, NO_MSG, INFO_WEAPON_NEX_MURDER, NO_MSG) \ -- MSG_MULTI_NOTIF(1, WEAPON_RIFLE_MURDER, NO_MSG, INFO_WEAPON_RIFLE_MURDER, NO_MSG) \ -- MSG_MULTI_NOTIF(1, WEAPON_RIFLE_MURDER_HAIL, NO_MSG, INFO_WEAPON_RIFLE_MURDER_HAIL, NO_MSG) \ -- MSG_MULTI_NOTIF(1, WEAPON_RIFLE_MURDER_HAIL_PIERCING, NO_MSG, INFO_WEAPON_RIFLE_MURDER_HAIL_PIERCING, NO_MSG) \ -- MSG_MULTI_NOTIF(1, WEAPON_RIFLE_MURDER_PIERCING, NO_MSG, INFO_WEAPON_RIFLE_MURDER_PIERCING, NO_MSG) \ - MSG_MULTI_NOTIF(1, WEAPON_ROCKETLAUNCHER_MURDER_DIRECT, NO_MSG, INFO_WEAPON_ROCKETLAUNCHER_MURDER_DIRECT, NO_MSG) \ - MSG_MULTI_NOTIF(1, WEAPON_ROCKETLAUNCHER_MURDER_SPLASH, NO_MSG, INFO_WEAPON_ROCKETLAUNCHER_MURDER_SPLASH, NO_MSG) \ - MSG_MULTI_NOTIF(1, WEAPON_ROCKETLAUNCHER_SUICIDE, NO_MSG, INFO_WEAPON_ROCKETLAUNCHER_SUICIDE, CENTER_DEATH_SELF_GENERIC) \ -- MSG_MULTI_NOTIF(1, WEAPON_SEEKER_MURDER_SPRAY, NO_MSG, INFO_WEAPON_SEEKER_MURDER_SPRAY, NO_MSG) \ -- MSG_MULTI_NOTIF(1, WEAPON_SEEKER_MURDER_TAG, NO_MSG, INFO_WEAPON_SEEKER_MURDER_TAG, NO_MSG) \ -- MSG_MULTI_NOTIF(1, WEAPON_SEEKER_SUICIDE, NO_MSG, INFO_WEAPON_SEEKER_SUICIDE, CENTER_DEATH_SELF_GENERIC) \ - MSG_MULTI_NOTIF(1, WEAPON_SHOCKWAVE_MURDER, NO_MSG, INFO_WEAPON_SHOCKWAVE_MURDER, NO_MSG) \ - MSG_MULTI_NOTIF(1, WEAPON_SHOCKWAVE_MURDER_SLAP, NO_MSG, INFO_WEAPON_SHOCKWAVE_MURDER_SLAP, NO_MSG) \ -- MSG_MULTI_NOTIF(1, WEAPON_SHOTGUN_MURDER, NO_MSG, INFO_WEAPON_SHOTGUN_MURDER, NO_MSG) \ -- MSG_MULTI_NOTIF(1, WEAPON_SHOTGUN_MURDER_SLAP, NO_MSG, INFO_WEAPON_SHOTGUN_MURDER_SLAP, NO_MSG) \ -- MSG_MULTI_NOTIF(1, WEAPON_THINKING_WITH_PORTALS, NO_MSG, INFO_WEAPON_THINKING_WITH_PORTALS, CENTER_DEATH_SELF_GENERIC) \ -- MSG_MULTI_NOTIF(1, WEAPON_TUBA_MURDER, NO_MSG, INFO_WEAPON_TUBA_MURDER, NO_MSG) \ -- MSG_MULTI_NOTIF(1, WEAPON_TUBA_SUICIDE, NO_MSG, INFO_WEAPON_TUBA_SUICIDE, CENTER_DEATH_SELF_GENERIC) \ - MSG_MULTI_NOTIF(1, WEAPON_UZI_MURDER_SNIPE, NO_MSG, INFO_WEAPON_UZI_MURDER_SNIPE, NO_MSG) \ - MSG_MULTI_NOTIF(1, WEAPON_UZI_MURDER_SPRAY, NO_MSG, INFO_WEAPON_UZI_MURDER_SPRAY, NO_MSG) \ - MSG_MULTI_NOTIF(1, WEAPON_HMG_MURDER_SNIPE, NO_MSG, INFO_WEAPON_HMG_MURDER_SNIPE, NO_MSG) \ - MSG_MULTI_NOTIF(1, WEAPON_HMG_MURDER_SPRAY, NO_MSG, INFO_WEAPON_HMG_MURDER_SPRAY, NO_MSG) \ - MSG_MULTI_NOTIF(1, WEAPON_RPC_MURDER_DIRECT, NO_MSG, INFO_WEAPON_RPC_MURDER_DIRECT, NO_MSG) \ - MSG_MULTI_NOTIF(1, WEAPON_RPC_MURDER_SPLASH, NO_MSG, INFO_WEAPON_RPC_MURDER_SPLASH, NO_MSG) \ - MSG_MULTI_NOTIF(1, WEAPON_RPC_SUICIDE, NO_MSG, INFO_WEAPON_RPC_SUICIDE, NO_MSG) - MSG_MULTI_NOTIF(1, WEAPON_VAPORIZER_MURDER, NO_MSG, INFO_WEAPON_VAPORIZER_MURDER, NO_MSG) \ - MSG_MULTI_NOTIF(1, WEAPON_VORTEX_MURDER, NO_MSG, INFO_WEAPON_VORTEX_MURDER, NO_MSG) ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_CHEAT, NO_MSG, INFO_DEATH_MURDER_CHEAT, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_DROWN, NO_MSG, INFO_DEATH_MURDER_DROWN, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_FALL, NO_MSG, INFO_DEATH_MURDER_FALL, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_FIRE, NO_MSG, INFO_DEATH_MURDER_FIRE, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_LAVA, NO_MSG, INFO_DEATH_MURDER_LAVA, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_MONSTER, NO_MSG, INFO_DEATH_MURDER_MONSTER, CENTER_DEATH_SELF_MONSTER) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_NADE, NO_MSG, INFO_DEATH_MURDER_NADE, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_NADE_NAPALM, NO_MSG, INFO_DEATH_MURDER_NADE_NAPALM, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_NADE_ICE, NO_MSG, INFO_DEATH_MURDER_NADE_ICE, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_NADE_ICE_FREEZE, NO_MSG, INFO_DEATH_MURDER_NADE_ICE_FREEZE, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_NADE_HEAL, NO_MSG, INFO_DEATH_MURDER_NADE_HEAL, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_SHOOTING_STAR, NO_MSG, INFO_DEATH_MURDER_SHOOTING_STAR, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_SLIME, NO_MSG, INFO_DEATH_MURDER_SLIME, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_SWAMP, NO_MSG, INFO_DEATH_MURDER_SWAMP, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_TELEFRAG, NO_MSG, INFO_DEATH_MURDER_TELEFRAG, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_TOUCHEXPLODE, NO_MSG, INFO_DEATH_MURDER_TOUCHEXPLODE, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_BUMB_DEATH, NO_MSG, INFO_DEATH_MURDER_VH_BUMB_DEATH, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_BUMB_GUN, NO_MSG, INFO_DEATH_MURDER_VH_BUMB_GUN, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_CRUSH, NO_MSG, INFO_DEATH_MURDER_VH_CRUSH, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_RAPT_BOMB, NO_MSG, INFO_DEATH_MURDER_VH_RAPT_BOMB, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_RAPT_CANNON, NO_MSG, INFO_DEATH_MURDER_VH_RAPT_CANNON, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_RAPT_DEATH, NO_MSG, INFO_DEATH_MURDER_VH_RAPT_DEATH, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_SPID_DEATH, NO_MSG, INFO_DEATH_MURDER_VH_SPID_DEATH, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_SPID_MINIGUN, NO_MSG, INFO_DEATH_MURDER_VH_SPID_MINIGUN, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_SPID_ROCKET, NO_MSG, INFO_DEATH_MURDER_VH_SPID_ROCKET, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_WAKI_DEATH, NO_MSG, INFO_DEATH_MURDER_VH_WAKI_DEATH, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_WAKI_GUN, NO_MSG, INFO_DEATH_MURDER_VH_WAKI_GUN, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_WAKI_ROCKET, NO_MSG, INFO_DEATH_MURDER_VH_WAKI_ROCKET, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_VENGEANCE, NO_MSG, INFO_DEATH_MURDER_VENGEANCE, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_MURDER_VOID, NO_MSG, INFO_DEATH_MURDER_VOID, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_AUTOTEAMCHANGE, NO_MSG, INFO_DEATH_SELF_AUTOTEAMCHANGE, CENTER_DEATH_SELF_AUTOTEAMCHANGE) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_BETRAYAL, NO_MSG, INFO_DEATH_SELF_BETRAYAL, CENTER_DEATH_SELF_BETRAYAL) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_CAMP, NO_MSG, INFO_DEATH_SELF_CAMP, CENTER_DEATH_SELF_CAMP) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_CHEAT, NO_MSG, INFO_DEATH_SELF_CHEAT, CENTER_DEATH_SELF_CHEAT) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_CUSTOM, NO_MSG, INFO_DEATH_SELF_GENERIC, CENTER_DEATH_SELF_CUSTOM) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_DROWN, NO_MSG, INFO_DEATH_SELF_DROWN, CENTER_DEATH_SELF_DROWN) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_FALL, NO_MSG, INFO_DEATH_SELF_FALL, CENTER_DEATH_SELF_FALL) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_FIRE, NO_MSG, INFO_DEATH_SELF_FIRE, CENTER_DEATH_SELF_FIRE) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_GENERIC, NO_MSG, INFO_DEATH_SELF_GENERIC, CENTER_DEATH_SELF_GENERIC) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_LAVA, NO_MSG, INFO_DEATH_SELF_LAVA, CENTER_DEATH_SELF_LAVA) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_MON_MAGE, NO_MSG, INFO_DEATH_SELF_MON_MAGE, CENTER_DEATH_SELF_MONSTER) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_MON_SHAMBLER_CLAW, NO_MSG, INFO_DEATH_SELF_MON_SHAMBLER_CLAW, CENTER_DEATH_SELF_MONSTER) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_MON_SHAMBLER_SMASH, NO_MSG, INFO_DEATH_SELF_MON_SHAMBLER_SMASH, CENTER_DEATH_SELF_MONSTER) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_MON_SHAMBLER_ZAP, NO_MSG, INFO_DEATH_SELF_MON_SHAMBLER_ZAP, CENTER_DEATH_SELF_MONSTER) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_MON_SPIDER, NO_MSG, INFO_DEATH_SELF_MON_SPIDER, CENTER_DEATH_SELF_MONSTER) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_MON_WYVERN, NO_MSG, INFO_DEATH_SELF_MON_WYVERN, CENTER_DEATH_SELF_MONSTER) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_MON_ZOMBIE_JUMP, NO_MSG, INFO_DEATH_SELF_MON_ZOMBIE_JUMP, CENTER_DEATH_SELF_MONSTER) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_MON_ZOMBIE_MELEE, NO_MSG, INFO_DEATH_SELF_MON_ZOMBIE_MELEE, CENTER_DEATH_SELF_MONSTER) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_NADE, NO_MSG, INFO_DEATH_SELF_NADE, CENTER_DEATH_SELF_NADE) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_NADE_NAPALM, NO_MSG, INFO_DEATH_SELF_NADE_NAPALM, CENTER_DEATH_SELF_NADE_NAPALM) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_NADE_ICE, NO_MSG, INFO_DEATH_SELF_NADE_ICE, CENTER_DEATH_SELF_NADE_ICE_FREEZE) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_NADE_ICE_FREEZE, NO_MSG, INFO_DEATH_SELF_NADE_ICE_FREEZE, CENTER_DEATH_SELF_NADE_ICE_FREEZE) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_NADE_HEAL, NO_MSG, INFO_DEATH_SELF_NADE_HEAL, CENTER_DEATH_SELF_NADE_HEAL) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_NOAMMO, NO_MSG, INFO_DEATH_SELF_NOAMMO, CENTER_DEATH_SELF_NOAMMO) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_ROT, NO_MSG, INFO_DEATH_SELF_ROT, CENTER_DEATH_SELF_ROT) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_SHOOTING_STAR, NO_MSG, INFO_DEATH_SELF_SHOOTING_STAR, CENTER_DEATH_SELF_SHOOTING_STAR) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_SLIME, NO_MSG, INFO_DEATH_SELF_SLIME, CENTER_DEATH_SELF_SLIME) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_SUICIDE, NO_MSG, INFO_DEATH_SELF_SUICIDE, CENTER_DEATH_SELF_SUICIDE) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_SWAMP, NO_MSG, INFO_DEATH_SELF_SWAMP, CENTER_DEATH_SELF_SWAMP) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_TEAMCHANGE, NO_MSG, INFO_DEATH_SELF_TEAMCHANGE, CENTER_DEATH_SELF_TEAMCHANGE) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_TOUCHEXPLODE, NO_MSG, INFO_DEATH_SELF_TOUCHEXPLODE, CENTER_DEATH_SELF_TOUCHEXPLODE) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET, NO_MSG, INFO_DEATH_SELF_TURRET, CENTER_DEATH_SELF_TURRET) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_EWHEEL, NO_MSG, INFO_DEATH_SELF_TURRET_EWHEEL, CENTER_DEATH_SELF_TURRET_EWHEEL) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_FLAC, NO_MSG, INFO_DEATH_SELF_TURRET_FLAC, CENTER_DEATH_SELF_TURRET) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_HELLION, NO_MSG, INFO_DEATH_SELF_TURRET_HELLION, CENTER_DEATH_SELF_TURRET) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_HK, NO_MSG, INFO_DEATH_SELF_TURRET_HK, CENTER_DEATH_SELF_TURRET) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_MACHINEGUN, NO_MSG, INFO_DEATH_SELF_TURRET_MACHINEGUN, CENTER_DEATH_SELF_TURRET) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_MLRS, NO_MSG, INFO_DEATH_SELF_TURRET_MLRS, CENTER_DEATH_SELF_TURRET) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_PHASER, NO_MSG, INFO_DEATH_SELF_TURRET_PHASER, CENTER_DEATH_SELF_TURRET) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_PLASMA, NO_MSG, INFO_DEATH_SELF_TURRET_PLASMA, CENTER_DEATH_SELF_TURRET) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_TESLA, NO_MSG, INFO_DEATH_SELF_TURRET_TESLA, CENTER_DEATH_SELF_TURRET) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_WALK_GUN, NO_MSG, INFO_DEATH_SELF_TURRET_WALK_GUN, CENTER_DEATH_SELF_TURRET_WALK) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_WALK_MEELE, NO_MSG, INFO_DEATH_SELF_TURRET_WALK_MEELE, CENTER_DEATH_SELF_TURRET_WALK) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_WALK_ROCKET, NO_MSG, INFO_DEATH_SELF_TURRET_WALK_ROCKET, CENTER_DEATH_SELF_TURRET_WALK) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_VH_BUMB_DEATH, NO_MSG, INFO_DEATH_SELF_VH_BUMB_DEATH, CENTER_DEATH_SELF_VH_BUMB_DEATH) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_VH_CRUSH, NO_MSG, INFO_DEATH_SELF_VH_CRUSH, CENTER_DEATH_SELF_VH_CRUSH) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_VH_RAPT_BOMB, NO_MSG, INFO_DEATH_SELF_VH_RAPT_BOMB, CENTER_DEATH_SELF_VH_RAPT_BOMB) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_VH_RAPT_DEATH, NO_MSG, INFO_DEATH_SELF_VH_RAPT_DEATH, CENTER_DEATH_SELF_VH_RAPT_DEATH) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_VH_SPID_DEATH, NO_MSG, INFO_DEATH_SELF_VH_SPID_DEATH, CENTER_DEATH_SELF_VH_SPID_DEATH) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_VH_SPID_ROCKET, NO_MSG, INFO_DEATH_SELF_VH_SPID_ROCKET, CENTER_DEATH_SELF_VH_SPID_ROCKET) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_VH_WAKI_DEATH, NO_MSG, INFO_DEATH_SELF_VH_WAKI_DEATH, CENTER_DEATH_SELF_VH_WAKI_DEATH) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_VH_WAKI_ROCKET, NO_MSG, INFO_DEATH_SELF_VH_WAKI_ROCKET, CENTER_DEATH_SELF_VH_WAKI_ROCKET) \ ++ MSG_MULTI_NOTIF(1, DEATH_SELF_VOID, NO_MSG, INFO_DEATH_SELF_VOID, CENTER_DEATH_SELF_VOID) \ ++ MSG_MULTI_NOTIF(1, ITEM_BUFF_DROP, NO_MSG, INFO_ITEM_BUFF_DROP, CENTER_ITEM_BUFF_DROP) \ ++ MSG_MULTI_NOTIF(1, ITEM_BUFF_GOT, NO_MSG, INFO_ITEM_BUFF_GOT, CENTER_ITEM_BUFF_GOT) \ ++ MSG_MULTI_NOTIF(1, ITEM_WEAPON_DONTHAVE, NO_MSG, INFO_ITEM_WEAPON_DONTHAVE, CENTER_ITEM_WEAPON_DONTHAVE) \ ++ MSG_MULTI_NOTIF(1, ITEM_WEAPON_DROP, NO_MSG, INFO_ITEM_WEAPON_DROP, CENTER_ITEM_WEAPON_DROP) \ ++ MSG_MULTI_NOTIF(1, ITEM_WEAPON_GOT, NO_MSG, INFO_ITEM_WEAPON_GOT, CENTER_ITEM_WEAPON_GOT) \ ++ MSG_MULTI_NOTIF(1, ITEM_WEAPON_NOAMMO, NO_MSG, INFO_ITEM_WEAPON_NOAMMO, CENTER_ITEM_WEAPON_NOAMMO) \ ++ MSG_MULTI_NOTIF(1, ITEM_WEAPON_PRIMORSEC, NO_MSG, INFO_ITEM_WEAPON_PRIMORSEC, CENTER_ITEM_WEAPON_PRIMORSEC) \ ++ MSG_MULTI_NOTIF(1, ITEM_WEAPON_UNAVAILABLE, NO_MSG, INFO_ITEM_WEAPON_UNAVAILABLE, CENTER_ITEM_WEAPON_UNAVAILABLE) \ ++ MSG_MULTI_NOTIF(1, MULTI_COUNTDOWN_BEGIN, ANNCE_BEGIN, NO_MSG, CENTER_COUNTDOWN_BEGIN) \ ++ MSG_MULTI_NOTIF(1, MULTI_MINSTA_FINDAMMO, ANNCE_NUM_10, NO_MSG, CENTER_MINSTA_FINDAMMO_FIRST) \ ++ MSG_MULTI_NOTIF(1, WEAPON_ACCORDEON_MURDER, NO_MSG, INFO_WEAPON_ACCORDEON_MURDER, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_ACCORDEON_SUICIDE, NO_MSG, INFO_WEAPON_ACCORDEON_SUICIDE, CENTER_DEATH_SELF_GENERIC) \ ++ MSG_MULTI_NOTIF(1, WEAPON_ARC_MURDER, NO_MSG, INFO_WEAPON_ARC_MURDER, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_BLASTER_MURDER, NO_MSG, INFO_WEAPON_BLASTER_MURDER, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_BLASTER_SUICIDE, NO_MSG, INFO_WEAPON_BLASTER_SUICIDE, CENTER_DEATH_SELF_GENERIC) \ ++ MSG_MULTI_NOTIF(1, WEAPON_CRYLINK_MURDER, NO_MSG, INFO_WEAPON_CRYLINK_MURDER, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_CRYLINK_SUICIDE, NO_MSG, INFO_WEAPON_CRYLINK_SUICIDE, CENTER_DEATH_SELF_GENERIC) \ ++ MSG_MULTI_NOTIF(1, WEAPON_DEVASTATOR_MURDER_DIRECT, NO_MSG, INFO_WEAPON_DEVASTATOR_MURDER_DIRECT, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_DEVASTATOR_MURDER_SPLASH, NO_MSG, INFO_WEAPON_DEVASTATOR_MURDER_SPLASH, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_DEVASTATOR_SUICIDE, NO_MSG, INFO_WEAPON_DEVASTATOR_SUICIDE, CENTER_DEATH_SELF_GENERIC) \ ++ MSG_MULTI_NOTIF(1, WEAPON_ELECTRO_MURDER_BOLT, NO_MSG, INFO_WEAPON_ELECTRO_MURDER_BOLT, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_ELECTRO_MURDER_COMBO, NO_MSG, INFO_WEAPON_ELECTRO_MURDER_COMBO, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_ELECTRO_MURDER_ORBS, NO_MSG, INFO_WEAPON_ELECTRO_MURDER_ORBS, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_ELECTRO_SUICIDE_BOLT, NO_MSG, INFO_WEAPON_ELECTRO_SUICIDE_BOLT, CENTER_DEATH_SELF_GENERIC) \ ++ MSG_MULTI_NOTIF(1, WEAPON_ELECTRO_SUICIDE_ORBS, NO_MSG, INFO_WEAPON_ELECTRO_SUICIDE_ORBS, CENTER_DEATH_SELF_GENERIC) \ ++ MSG_MULTI_NOTIF(1, WEAPON_FIREBALL_MURDER_BLAST, NO_MSG, INFO_WEAPON_FIREBALL_MURDER_BLAST, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_FIREBALL_MURDER_FIREMINE, NO_MSG, INFO_WEAPON_FIREBALL_MURDER_FIREMINE, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_FIREBALL_SUICIDE_BLAST, NO_MSG, INFO_WEAPON_FIREBALL_SUICIDE_BLAST, CENTER_DEATH_SELF_GENERIC) \ ++ MSG_MULTI_NOTIF(1, WEAPON_FIREBALL_SUICIDE_FIREMINE, NO_MSG, INFO_WEAPON_FIREBALL_SUICIDE_FIREMINE, CENTER_DEATH_SELF_GENERIC) \ ++ MSG_MULTI_NOTIF(1, WEAPON_HAGAR_MURDER_BURST, NO_MSG, INFO_WEAPON_HAGAR_MURDER_BURST, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_HAGAR_MURDER_SPRAY, NO_MSG, INFO_WEAPON_HAGAR_MURDER_SPRAY, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_HAGAR_SUICIDE, NO_MSG, INFO_WEAPON_HAGAR_SUICIDE, CENTER_DEATH_SELF_GENERIC) \ ++ MSG_MULTI_NOTIF(1, WEAPON_HLAC_MURDER, NO_MSG, INFO_WEAPON_HLAC_MURDER, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_HLAC_SUICIDE, NO_MSG, INFO_WEAPON_HLAC_SUICIDE, CENTER_DEATH_SELF_GENERIC) \ ++ MSG_MULTI_NOTIF(1, WEAPON_HMG_MURDER_SNIPE, NO_MSG, INFO_WEAPON_HMG_MURDER_SNIPE, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_HMG_MURDER_SPRAY, NO_MSG, INFO_WEAPON_HMG_MURDER_SPRAY, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_HOOK_MURDER, NO_MSG, INFO_WEAPON_HOOK_MURDER, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_KLEINBOTTLE_MURDER, NO_MSG, INFO_WEAPON_KLEINBOTTLE_MURDER, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_KLEINBOTTLE_SUICIDE, NO_MSG, INFO_WEAPON_KLEINBOTTLE_SUICIDE, CENTER_DEATH_SELF_GENERIC) \ ++ MSG_MULTI_NOTIF(1, WEAPON_MACHINEGUN_MURDER_SNIPE, NO_MSG, INFO_WEAPON_MACHINEGUN_MURDER_SNIPE, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_MACHINEGUN_MURDER_SPRAY, NO_MSG, INFO_WEAPON_MACHINEGUN_MURDER_SPRAY, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_MINELAYER_MURDER, NO_MSG, INFO_WEAPON_MINELAYER_MURDER, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_MINELAYER_SUICIDE, NO_MSG, INFO_WEAPON_MINELAYER_SUICIDE, CENTER_DEATH_SELF_GENERIC) \ ++ MSG_MULTI_NOTIF(1, WEAPON_MORTAR_MURDER_BOUNCE, NO_MSG, INFO_WEAPON_MORTAR_MURDER_BOUNCE, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_MORTAR_MURDER_EXPLODE, NO_MSG, INFO_WEAPON_MORTAR_MURDER_EXPLODE, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_MORTAR_SUICIDE_BOUNCE, NO_MSG, INFO_WEAPON_MORTAR_SUICIDE_BOUNCE, CENTER_DEATH_SELF_GENERIC) \ ++ MSG_MULTI_NOTIF(1, WEAPON_MORTAR_SUICIDE_EXPLODE, NO_MSG, INFO_WEAPON_MORTAR_SUICIDE_EXPLODE, CENTER_DEATH_SELF_GENERIC) \ ++ MSG_MULTI_NOTIF(1, WEAPON_RIFLE_MURDER, NO_MSG, INFO_WEAPON_RIFLE_MURDER, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_RIFLE_MURDER_HAIL, NO_MSG, INFO_WEAPON_RIFLE_MURDER_HAIL, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_RIFLE_MURDER_HAIL_PIERCING, NO_MSG, INFO_WEAPON_RIFLE_MURDER_HAIL_PIERCING, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_RIFLE_MURDER_PIERCING, NO_MSG, INFO_WEAPON_RIFLE_MURDER_PIERCING, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_RPC_MURDER_DIRECT, NO_MSG, INFO_WEAPON_RPC_MURDER_DIRECT, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_RPC_MURDER_SPLASH, NO_MSG, INFO_WEAPON_RPC_MURDER_SPLASH, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_RPC_SUICIDE_DIRECT, NO_MSG, INFO_WEAPON_RPC_SUICIDE_DIRECT, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_RPC_SUICIDE_SPLASH, NO_MSG, INFO_WEAPON_RPC_SUICIDE_SPLASH, CENTER_DEATH_SELF_GENERIC) \ ++ MSG_MULTI_NOTIF(1, WEAPON_SEEKER_MURDER_SPRAY, NO_MSG, INFO_WEAPON_SEEKER_MURDER_SPRAY, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_SEEKER_MURDER_TAG, NO_MSG, INFO_WEAPON_SEEKER_MURDER_TAG, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_SEEKER_SUICIDE, NO_MSG, INFO_WEAPON_SEEKER_SUICIDE, CENTER_DEATH_SELF_GENERIC) \ ++ MSG_MULTI_NOTIF(1, WEAPON_SHOCKWAVE_MURDER, NO_MSG, INFO_WEAPON_SHOCKWAVE_MURDER, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_SHOCKWAVE_MURDER_SLAP, NO_MSG, INFO_WEAPON_SHOCKWAVE_MURDER_SLAP, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_SHOTGUN_MURDER, NO_MSG, INFO_WEAPON_SHOTGUN_MURDER, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_SHOTGUN_MURDER_SLAP, NO_MSG, INFO_WEAPON_SHOTGUN_MURDER_SLAP, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_THINKING_WITH_PORTALS, NO_MSG, INFO_WEAPON_THINKING_WITH_PORTALS, CENTER_DEATH_SELF_GENERIC) \ ++ MSG_MULTI_NOTIF(1, WEAPON_TUBA_MURDER, NO_MSG, INFO_WEAPON_TUBA_MURDER, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_TUBA_SUICIDE, NO_MSG, INFO_WEAPON_TUBA_SUICIDE, CENTER_DEATH_SELF_GENERIC) \ ++ MSG_MULTI_NOTIF(1, WEAPON_VAPORIZER_MURDER, NO_MSG, INFO_WEAPON_VAPORIZER_MURDER, NO_MSG) \ ++ MSG_MULTI_NOTIF(1, WEAPON_VORTEX_MURDER, NO_MSG, INFO_WEAPON_VORTEX_MURDER, NO_MSG) #define MULTITEAM_CHOICE2(default,challow,prefix,chtype,optiona,optionb) \ -- MSG_CHOICE_NOTIF(default, challow, prefix##RED, chtype, optiona##RED, optionb##RED) \ -- MSG_CHOICE_NOTIF(default, challow, prefix##BLUE, chtype, optiona##BLUE, optionb##BLUE) ++ MSG_CHOICE_NOTIF(default, challow, prefix##RED, chtype, optiona##RED, optionb##RED) \ ++ MSG_CHOICE_NOTIF(default, challow, prefix##BLUE, chtype, optiona##BLUE, optionb##BLUE) #define MULTITEAM_CHOICE3(default,challow,prefix,chtype,optiona,optionb) \ -- MSG_CHOICE_NOTIF(default, challow, prefix##RED, chtype, optiona##RED, optionb##RED) \ -- MSG_CHOICE_NOTIF(default, challow, prefix##BLUE, chtype, optiona##BLUE, optionb##BLUE) \ -- MSG_CHOICE_NOTIF(default, challow, prefix##YELLOW, chtype, optiona##YELLOW, optionb##YELLOW) ++ MSG_CHOICE_NOTIF(default, challow, prefix##RED, chtype, optiona##RED, optionb##RED) \ ++ MSG_CHOICE_NOTIF(default, challow, prefix##BLUE, chtype, optiona##BLUE, optionb##BLUE) \ ++ MSG_CHOICE_NOTIF(default, challow, prefix##YELLOW, chtype, optiona##YELLOW, optionb##YELLOW) #define MULTITEAM_CHOICE4(default,challow,prefix,chtype,optiona,optionb) \ -- MSG_CHOICE_NOTIF(default, challow, prefix##RED, chtype, optiona##RED, optionb##RED) \ -- MSG_CHOICE_NOTIF(default, challow, prefix##BLUE, chtype, optiona##BLUE, optionb##BLUE) \ -- MSG_CHOICE_NOTIF(default, challow, prefix##YELLOW, chtype, optiona##YELLOW, optionb##YELLOW) \ -- MSG_CHOICE_NOTIF(default, challow, prefix##PINK, chtype, optiona##PINK, optionb##PINK) ++ MSG_CHOICE_NOTIF(default, challow, prefix##RED, chtype, optiona##RED, optionb##RED) \ ++ MSG_CHOICE_NOTIF(default, challow, prefix##BLUE, chtype, optiona##BLUE, optionb##BLUE) \ ++ MSG_CHOICE_NOTIF(default, challow, prefix##YELLOW, chtype, optiona##YELLOW, optionb##YELLOW) \ ++ MSG_CHOICE_NOTIF(default, challow, prefix##PINK, chtype, optiona##PINK, optionb##PINK) #define MULTITEAM_CHOICE(default,challow,prefix,teams,chtype,optiona,optionb) \ -- MULTITEAM_CHOICE##teams(default,challow,prefix,chtype,optiona,optionb) ++ MULTITEAM_CHOICE##teams(default,challow,prefix,chtype,optiona,optionb) #define MSG_CHOICE_NOTIFICATIONS \ -- MULTITEAM_CHOICE(1, 2, CHOICE_CTF_CAPTURE_BROKEN_, 2, MSG_INFO, INFO_CTF_CAPTURE_, INFO_CTF_CAPTURE_BROKEN_) \ -- MULTITEAM_CHOICE(1, 2, CHOICE_CTF_CAPTURE_TIME_, 2, MSG_INFO, INFO_CTF_CAPTURE_, INFO_CTF_CAPTURE_TIME_) \ -- MULTITEAM_CHOICE(1, 2, CHOICE_CTF_CAPTURE_UNBROKEN_, 2, MSG_INFO, INFO_CTF_CAPTURE_, INFO_CTF_CAPTURE_UNBROKEN_) \ -- MSG_CHOICE_NOTIF(1, 2, CHOICE_CTF_PICKUP_TEAM, MSG_CENTER, CENTER_CTF_PICKUP_TEAM, CENTER_CTF_PICKUP_TEAM_VERBOSE) \ -- MSG_CHOICE_NOTIF(1, 2, CHOICE_CTF_PICKUP_ENEMY, MSG_CENTER, CENTER_CTF_PICKUP_ENEMY, CENTER_CTF_PICKUP_ENEMY_VERBOSE) \ -- MSG_CHOICE_NOTIF(1, 1, CHOICE_FRAG, MSG_CENTER, CENTER_DEATH_MURDER_FRAG, CENTER_DEATH_MURDER_FRAG_VERBOSE) \ -- MSG_CHOICE_NOTIF(1, 1, CHOICE_FRAGGED, MSG_CENTER, CENTER_DEATH_MURDER_FRAGGED, CENTER_DEATH_MURDER_FRAGGED_VERBOSE) \ -- MSG_CHOICE_NOTIF(1, 1, CHOICE_TYPEFRAG, MSG_CENTER, CENTER_DEATH_MURDER_TYPEFRAG, CENTER_DEATH_MURDER_TYPEFRAG_VERBOSE) \ -- MSG_CHOICE_NOTIF(1, 1, CHOICE_TYPEFRAGGED, MSG_CENTER, CENTER_DEATH_MURDER_TYPEFRAGGED, CENTER_DEATH_MURDER_TYPEFRAGGED_VERBOSE) -- //MSG_CHOICE_NOTIF(2, CHOICE_) ++ MULTITEAM_CHOICE(1, 2, CHOICE_CTF_CAPTURE_BROKEN_, 2, MSG_INFO, INFO_CTF_CAPTURE_, INFO_CTF_CAPTURE_BROKEN_) \ ++ MULTITEAM_CHOICE(1, 2, CHOICE_CTF_CAPTURE_TIME_, 2, MSG_INFO, INFO_CTF_CAPTURE_, INFO_CTF_CAPTURE_TIME_) \ ++ MULTITEAM_CHOICE(1, 2, CHOICE_CTF_CAPTURE_UNBROKEN_, 2, MSG_INFO, INFO_CTF_CAPTURE_, INFO_CTF_CAPTURE_UNBROKEN_) \ ++ MSG_CHOICE_NOTIF(1, 2, CHOICE_CTF_PICKUP_TEAM, MSG_CENTER, CENTER_CTF_PICKUP_TEAM, CENTER_CTF_PICKUP_TEAM_VERBOSE) \ ++ MSG_CHOICE_NOTIF(1, 2, CHOICE_CTF_PICKUP_ENEMY, MSG_CENTER, CENTER_CTF_PICKUP_ENEMY, CENTER_CTF_PICKUP_ENEMY_VERBOSE) \ ++ MSG_CHOICE_NOTIF(1, 1, CHOICE_FRAG, MSG_CENTER, CENTER_DEATH_MURDER_FRAG, CENTER_DEATH_MURDER_FRAG_VERBOSE) \ ++ MSG_CHOICE_NOTIF(1, 1, CHOICE_FRAGGED, MSG_CENTER, CENTER_DEATH_MURDER_FRAGGED, CENTER_DEATH_MURDER_FRAGGED_VERBOSE) \ ++ MSG_CHOICE_NOTIF(1, 1, CHOICE_TYPEFRAG, MSG_CENTER, CENTER_DEATH_MURDER_TYPEFRAG, CENTER_DEATH_MURDER_TYPEFRAG_VERBOSE) \ ++ MSG_CHOICE_NOTIF(1, 1, CHOICE_TYPEFRAGGED, MSG_CENTER, CENTER_DEATH_MURDER_TYPEFRAGGED, CENTER_DEATH_MURDER_TYPEFRAGGED_VERBOSE) ++ //MSG_CHOICE_NOTIF(2, CHOICE_) // =========================== @@@ -1005,196 -1046,196 +1059,196 @@@ string arg_slot[NOTIF_MAX_ARGS] #define NOTIF_HIT_UNKNOWN(token,funcname) { backtrace(sprintf("%s: Hit unknown token in selected string! '%s'\n", funcname, selected)); break; } #define KILL_SPREE_LIST \ -- SPREE_ITEM(3, 03, _("TRIPLE FRAG! "), _("%s^K1 made a TRIPLE FRAG! %s^BG"), _("%s^K1 made a TRIPLE SCORE! %s^BG")) \ -- SPREE_ITEM(5, 05, _("RAGE! "), _("%s^K1 unlocked RAGE! %s^BG"), _("%s^K1 made FIVE SCORES IN A ROW! %s^BG")) \ -- SPREE_ITEM(10, 10, _("MASSACRE! "), _("%s^K1 started a MASSACRE! %s^BG"), _("%s^K1 made TEN SCORES IN A ROW! %s^BG")) \ -- SPREE_ITEM(15, 15, _("MAYHEM! "), _("%s^K1 executed MAYHEM! %s^BG"), _("%s^K1 made FIFTEEN SCORES IN A ROW! %s^BG")) \ -- SPREE_ITEM(20, 20, _("BERSERKER! "), _("%s^K1 is a BERSERKER! %s^BG"), _("%s^K1 made TWENTY SCORES IN A ROW! %s^BG")) \ -- SPREE_ITEM(25, 25, _("CARNAGE! "), _("%s^K1 inflicts CARNAGE! %s^BG"), _("%s^K1 made TWENTY FIVE SCORES IN A ROW! %s^BG")) \ -- SPREE_ITEM(30, 30, _("ARMAGEDDON! "), _("%s^K1 unleashes ARMAGEDDON! %s^BG"), _("%s^K1 made THIRTY SCORES IN A ROW! %s^BG")) ++ SPREE_ITEM(3, 03, _("TRIPLE FRAG! "), _("%s^K1 made a TRIPLE FRAG! %s^BG"), _("%s^K1 made a TRIPLE SCORE! %s^BG")) \ ++ SPREE_ITEM(5, 05, _("RAGE! "), _("%s^K1 unlocked RAGE! %s^BG"), _("%s^K1 made FIVE SCORES IN A ROW! %s^BG")) \ ++ SPREE_ITEM(10, 10, _("MASSACRE! "), _("%s^K1 started a MASSACRE! %s^BG"), _("%s^K1 made TEN SCORES IN A ROW! %s^BG")) \ ++ SPREE_ITEM(15, 15, _("MAYHEM! "), _("%s^K1 executed MAYHEM! %s^BG"), _("%s^K1 made FIFTEEN SCORES IN A ROW! %s^BG")) \ ++ SPREE_ITEM(20, 20, _("BERSERKER! "), _("%s^K1 is a BERSERKER! %s^BG"), _("%s^K1 made TWENTY SCORES IN A ROW! %s^BG")) \ ++ SPREE_ITEM(25, 25, _("CARNAGE! "), _("%s^K1 inflicts CARNAGE! %s^BG"), _("%s^K1 made TWENTY FIVE SCORES IN A ROW! %s^BG")) \ ++ SPREE_ITEM(30, 30, _("ARMAGEDDON! "), _("%s^K1 unleashes ARMAGEDDON! %s^BG"), _("%s^K1 made THIRTY SCORES IN A ROW! %s^BG")) #ifdef CSQC string notif_arg_frag_ping(float newline, float fping) { -- if(fping == NO_MSG) -- return sprintf(CCR(_("%s(^F1Bot^BG)")), (newline ? "\n" : " ")); -- else -- return sprintf(CCR(_("%s(Ping ^F1%d^BG)")), (newline ? "\n" : " "), fping); ++ if(fping == NO_MSG) ++ return sprintf(CCR(_("%s(^F1Bot^BG)")), (newline ? "\n" : " ")); ++ else ++ return sprintf(CCR(_("%s(Ping ^F1%d^BG)")), (newline ? "\n" : " "), fping); } string notif_arg_frag_stats(float fhealth, float farmor, float fping) { -- if (!(fhealth < 1)) -- return sprintf(CCR(_("\n(Health ^1%d^BG / Armor ^2%d^BG)%s")), fhealth, farmor, notif_arg_frag_ping(FALSE, fping)); -- else -- return sprintf(CCR(_("\n(^F4Dead^BG)%s")), notif_arg_frag_ping(FALSE, fping)); ++ if (!(fhealth < 1)) ++ return sprintf(CCR(_("\n(Health ^1%d^BG / Armor ^2%d^BG)%s")), fhealth, farmor, notif_arg_frag_ping(FALSE, fping)); ++ else ++ return sprintf(CCR(_("\n(^F4Dead^BG)%s")), notif_arg_frag_ping(FALSE, fping)); } - string notif_arg_missing_teams(float f1, float f2, float f3, float f4) + string notif_arg_missing_teams(float f1) { -- return sprintf("%s%s%s%s", - (f1 ? - sprintf("%s%s", Team_ColoredFullName(f1 - 1), ((f2 + f3 + f4) ? ", " : "")) - ((f1 & 1) ? - sprintf("%s%s", Team_ColoredFullName(NUM_TEAM_1), ((f1 & (2 + 4 + 8)) ? ", " : "")) -- : -- "" -- ), - (f2 ? - sprintf("%s%s", Team_ColoredFullName(f2 - 1), ((f3 + f4) ? ", " : "")) - ((f1 & 2) ? - sprintf("%s%s", Team_ColoredFullName(NUM_TEAM_2), ((f1 & (4 + 8)) ? ", " : "")) -- : -- "" -- ), - (f3 ? - sprintf("%s%s", Team_ColoredFullName(f3 - 1), (f4 ? ", " : "")) - ((f1 & 4) ? - sprintf("%s%s", Team_ColoredFullName(NUM_TEAM_3), ((f1 & 8) ? ", " : "")) -- : -- "" -- ), - (f4 ? - Team_ColoredFullName(f4 - 1) - ((f1 & 8) ? - Team_ColoredFullName(NUM_TEAM_4) -- : -- "" -- ) -- ); ++ return sprintf("%s%s%s%s", ++ ((f1 & 1) ? ++ sprintf("%s%s", Team_ColoredFullName(NUM_TEAM_1), ((f1 & (2 + 4 + 8)) ? ", " : "")) ++ : ++ "" ++ ), ++ ((f1 & 2) ? ++ sprintf("%s%s", Team_ColoredFullName(NUM_TEAM_2), ((f1 & (4 + 8)) ? ", " : "")) ++ : ++ "" ++ ), ++ ((f1 & 4) ? ++ sprintf("%s%s", Team_ColoredFullName(NUM_TEAM_3), ((f1 & 8) ? ", " : "")) ++ : ++ "" ++ ), ++ ((f1 & 8) ? ++ Team_ColoredFullName(NUM_TEAM_4) ++ : ++ "" ++ ) ++ ); } string notif_arg_spree_cen(float spree) { -- // 0 = off, 1 = target (but only for first victim) and attacker -- if(autocvar_notification_show_sprees_center) -- { -- if(spree > 1) -- { -- #define SPREE_ITEM(counta,countb,center,normal,gentle) \ -- case counta: { return normal_or_gentle(center, sprintf(_("%d score spree! "), spree)); } -- -- switch(spree) -- { -- KILL_SPREE_LIST -- default: -- { -- if (!autocvar_notification_show_sprees_center_specialonly) -- { -- return -- sprintf( -- normal_or_gentle( -- _("%d frag spree! "), -- _("%d score spree! ") -- ), -- spree); -- } -- else { return ""; } // don't show spree information if it isn't an achievement -- } -- } -- -- #undef SPREE_ITEM -- } -- else if(spree == -1) // first blood -- { -- return normal_or_gentle(_("First blood! "), _("First score! ")); -- } -- else if(spree == -2) // first victim -- { -- return normal_or_gentle(_("First victim! "), _("First casualty! ")); -- } -- } -- return ""; ++ // 0 = off, 1 = target (but only for first victim) and attacker ++ if(autocvar_notification_show_sprees_center) ++ { ++ if(spree > 1) ++ { ++ #define SPREE_ITEM(counta,countb,center,normal,gentle) \ ++ case counta: { return normal_or_gentle(center, sprintf(_("%d score spree! "), spree)); } ++ ++ switch(spree) ++ { ++ KILL_SPREE_LIST ++ default: ++ { ++ if (!autocvar_notification_show_sprees_center_specialonly) ++ { ++ return ++ sprintf( ++ normal_or_gentle( ++ _("%d frag spree! "), ++ _("%d score spree! ") ++ ), ++ spree); ++ } ++ else { return ""; } // don't show spree information if it isn't an achievement ++ } ++ } ++ ++ #undef SPREE_ITEM ++ } ++ else if(spree == -1) // first blood ++ { ++ return normal_or_gentle(_("First blood! "), _("First score! ")); ++ } ++ else if(spree == -2) // first victim ++ { ++ return normal_or_gentle(_("First victim! "), _("First casualty! ")); ++ } ++ } ++ return ""; } #endif string notif_arg_spree_inf(float type, string input, string player, float spree) { -- switch(type) -- { -- case 1: // attacker kill spree -- { -- // 0 = off, 1 = target only, 2 = attacker only, 3 = target and attacker -- // this conditional (& 2) is true for 2 and 3 -- if(autocvar_notification_show_sprees_info & 2) -- { -- #ifdef CSQC -- string spree_newline = -- ( autocvar_notification_show_sprees_info_newline ? -- ((substring(input, 0, 1) == "\{3}") ? "\n\{3}" : "\n") : "" ); -- #else -- string spree_newline = -- (autocvar_notification_show_sprees_info_newline ? "\n" : ""); -- #endif -- -- if(spree > 1) -- { -- #define SPREE_ITEM(counta,countb,center,normal,gentle) \ -- case counta: { return sprintf(CCR(normal_or_gentle(normal, gentle)), player, spree_newline); } -- -- switch(spree) -- { -- KILL_SPREE_LIST -- default: -- { -- if (!autocvar_notification_show_sprees_info_specialonly) -- { -- return -- sprintf( -- CCR(normal_or_gentle( -- _("%s^K1 has %d frags in a row! %s^BG"), -- _("%s^K1 made %d scores in a row! %s^BG") -- )), -- player, -- spree, -- spree_newline -- ); -- } -- else { return ""; } // don't show spree information if it isn't an achievement -- } -- } -- -- #undef SPREE_ITEM -- } -- else if(spree == -1) // firstblood -- { -- return -- sprintf( -- CCR(normal_or_gentle( -- _("%s^K1 drew first blood! %s^BG"), -- _("%s^K1 got the first score! %s^BG") -- )), -- player, -- spree_newline -- ); -- } -- } -- break; -- } -- -- case -1: // kill spree ended -- { -- if((spree > 1) && (autocvar_notification_show_sprees_info & 1)) -- { -- return -- sprintf(normal_or_gentle( -- _(", ending their %d frag spree"), -- _(", ending their %d score spree") -- ), -- spree -- ); -- } -- break; -- } -- -- case -2: // kill spree lost -- { -- if((spree > 1) && (autocvar_notification_show_sprees_info & 1)) -- { -- return -- sprintf(normal_or_gentle( -- _(", losing their %d frag spree"), -- _(", losing their %d score spree") -- ), -- spree -- ); -- } -- break; -- } -- } -- return ""; ++ switch(type) ++ { ++ case 1: // attacker kill spree ++ { ++ // 0 = off, 1 = target only, 2 = attacker only, 3 = target and attacker ++ // this conditional (& 2) is true for 2 and 3 ++ if(autocvar_notification_show_sprees_info & 2) ++ { ++ #ifdef CSQC ++ string spree_newline = ++ ( autocvar_notification_show_sprees_info_newline ? ++ ((substring(input, 0, 1) == "\{3}") ? "\n\{3}" : "\n") : "" ); ++ #else ++ string spree_newline = ++ (autocvar_notification_show_sprees_info_newline ? "\n" : ""); ++ #endif ++ ++ if(spree > 1) ++ { ++ #define SPREE_ITEM(counta,countb,center,normal,gentle) \ ++ case counta: { return sprintf(CCR(normal_or_gentle(normal, gentle)), player, spree_newline); } ++ ++ switch(spree) ++ { ++ KILL_SPREE_LIST ++ default: ++ { ++ if (!autocvar_notification_show_sprees_info_specialonly) ++ { ++ return ++ sprintf( ++ CCR(normal_or_gentle( ++ _("%s^K1 has %d frags in a row! %s^BG"), ++ _("%s^K1 made %d scores in a row! %s^BG") ++ )), ++ player, ++ spree, ++ spree_newline ++ ); ++ } ++ else { return ""; } // don't show spree information if it isn't an achievement ++ } ++ } ++ ++ #undef SPREE_ITEM ++ } ++ else if(spree == -1) // firstblood ++ { ++ return ++ sprintf( ++ CCR(normal_or_gentle( ++ _("%s^K1 drew first blood! %s^BG"), ++ _("%s^K1 got the first score! %s^BG") ++ )), ++ player, ++ spree_newline ++ ); ++ } ++ } ++ break; ++ } ++ ++ case -1: // kill spree ended ++ { ++ if((spree > 1) && (autocvar_notification_show_sprees_info & 1)) ++ { ++ return ++ sprintf(normal_or_gentle( ++ _(", ending their %d frag spree"), ++ _(", ending their %d score spree") ++ ), ++ spree ++ ); ++ } ++ break; ++ } ++ ++ case -2: // kill spree lost ++ { ++ if((spree > 1) && (autocvar_notification_show_sprees_info & 1)) ++ { ++ return ++ sprintf(normal_or_gentle( ++ _(", losing their %d frag spree"), ++ _(", losing their %d score spree") ++ ), ++ spree ++ ); ++ } ++ break; ++ } ++ } ++ return ""; } @@@ -1275,258 -1316,259 +1329,259 @@@ float notif_error float notif_global_error; #define MSG_ANNCE_NOTIF(default,name,channel,sound,volume,position) \ -- NOTIF_ADD_AUTOCVAR(name, default) \ -- float name; \ -- void RegisterNotification_##name() \ -- { \ -- SET_FIELD_COUNT(name, NOTIF_FIRST, NOTIF_ANNCE_COUNT) \ -- CHECK_MAX_COUNT(name, NOTIF_ANNCE_MAX, NOTIF_ANNCE_COUNT, "MSG_ANNCE") \ -- Create_Notification_Entity( \ -- /* COMMON ======================== */ \ -- default, /* var_default */ \ -- ACVNN(name), /* var_cvar */ \ -- MSG_ANNCE, /* typeid */ \ -- name, /* nameid */ \ -- strtoupper(#name), /* namestring */ \ -- NO_MSG, /* strnum */ \ -- NO_MSG, /* flnum */ \ -- /* ANNCE ============= */ \ -- channel, /* channel */ \ -- sound, /* snd */ \ -- volume, /* vol */ \ -- position, /* position */ \ -- /* INFO & CENTER == */ \ -- "", /* args */ \ -- "", /* hudargs */ \ -- "", /* icon */ \ -- NO_MSG, /* cpid */ \ -- "", /* durcnt */ \ -- "", /* normal */ \ -- "", /* gentle */ \ -- /* MULTI ============= */ \ -- NO_MSG, /* anncename */ \ -- NO_MSG, /* infoname */ \ -- NO_MSG, /* centername */ \ -- /* MSG_CHOICE ========== */ \ -- NO_MSG, /* challow_def */ \ -- NO_MSG, /* challow_var */ \ -- NO_MSG, /* chtype */ \ -- NO_MSG, /* optiona */ \ -- NO_MSG); /* optionb */ \ -- } \ -- ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name); ++ NOTIF_ADD_AUTOCVAR(name, default) \ ++ float name; \ ++ void RegisterNotification_##name() \ ++ { \ ++ SET_FIELD_COUNT(name, NOTIF_FIRST, NOTIF_ANNCE_COUNT) \ ++ CHECK_MAX_COUNT(name, NOTIF_ANNCE_MAX, NOTIF_ANNCE_COUNT, "MSG_ANNCE") \ ++ Create_Notification_Entity( \ ++ /* COMMON ======================== */ \ ++ default, /* var_default */ \ ++ ACVNN(name), /* var_cvar */ \ ++ MSG_ANNCE, /* typeid */ \ ++ name, /* nameid */ \ ++ strtoupper(#name), /* namestring */ \ ++ NO_MSG, /* strnum */ \ ++ NO_MSG, /* flnum */ \ ++ /* ANNCE ============= */ \ ++ channel, /* channel */ \ ++ sound, /* snd */ \ ++ volume, /* vol */ \ ++ position, /* position */ \ ++ /* INFO & CENTER == */ \ ++ "", /* args */ \ ++ "", /* hudargs */ \ ++ "", /* icon */ \ ++ NO_MSG, /* cpid */ \ ++ "", /* durcnt */ \ ++ "", /* normal */ \ ++ "", /* gentle */ \ ++ /* MULTI ============= */ \ ++ NO_MSG, /* anncename */ \ ++ NO_MSG, /* infoname */ \ ++ NO_MSG, /* centername */ \ ++ /* MSG_CHOICE ========== */ \ ++ NO_MSG, /* challow_def */ \ ++ NO_MSG, /* challow_var */ \ ++ NO_MSG, /* chtype */ \ ++ NO_MSG, /* optiona */ \ ++ NO_MSG); /* optionb */ \ ++ } \ ++ ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name); #define MSG_INFO_NOTIF(default,name,strnum,flnum,args,hudargs,icon,normal,gentle) \ -- NOTIF_ADD_AUTOCVAR(name, default) \ -- float name; \ -- void RegisterNotification_##name() \ -- { \ -- SET_FIELD_COUNT(name, NOTIF_FIRST, NOTIF_INFO_COUNT) \ -- CHECK_MAX_COUNT(name, NOTIF_INFO_MAX, NOTIF_INFO_COUNT, "MSG_INFO") \ -- Create_Notification_Entity( \ -- /* COMMON ======================== */ \ -- default, /* var_default */ \ -- ACVNN(name), /* var_cvar */ \ -- MSG_INFO, /* typeid */ \ -- name, /* nameid */ \ -- strtoupper(#name), /* namestring */ \ -- strnum, /* strnum */ \ -- flnum, /* flnum */ \ -- /* ANNCE =========== */ \ -- NO_MSG, /* channel */ \ -- "", /* snd */ \ -- NO_MSG, /* vol */ \ -- NO_MSG, /* position */ \ -- /* INFO & CENTER === */ \ -- args, /* args */ \ -- hudargs, /* hudargs */ \ -- icon, /* icon */ \ -- NO_MSG, /* cpid */ \ -- "", /* durcnt */ \ -- normal, /* normal */ \ -- gentle, /* gentle */ \ -- /* MULTI ============= */ \ -- NO_MSG, /* anncename */ \ -- NO_MSG, /* infoname */ \ -- NO_MSG, /* centername */ \ -- /* CHOICE ============== */ \ -- NO_MSG, /* challow_def */ \ -- NO_MSG, /* challow_var */ \ -- NO_MSG, /* chtype */ \ -- NO_MSG, /* optiona */ \ -- NO_MSG); /* optionb */ \ -- } \ -- ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name); ++ NOTIF_ADD_AUTOCVAR(name, default) \ ++ float name; \ ++ void RegisterNotification_##name() \ ++ { \ ++ SET_FIELD_COUNT(name, NOTIF_FIRST, NOTIF_INFO_COUNT) \ ++ CHECK_MAX_COUNT(name, NOTIF_INFO_MAX, NOTIF_INFO_COUNT, "MSG_INFO") \ ++ Create_Notification_Entity( \ ++ /* COMMON ======================== */ \ ++ default, /* var_default */ \ ++ ACVNN(name), /* var_cvar */ \ ++ MSG_INFO, /* typeid */ \ ++ name, /* nameid */ \ ++ strtoupper(#name), /* namestring */ \ ++ strnum, /* strnum */ \ ++ flnum, /* flnum */ \ ++ /* ANNCE =========== */ \ ++ NO_MSG, /* channel */ \ ++ "", /* snd */ \ ++ NO_MSG, /* vol */ \ ++ NO_MSG, /* position */ \ ++ /* INFO & CENTER === */ \ ++ args, /* args */ \ ++ hudargs, /* hudargs */ \ ++ icon, /* icon */ \ ++ NO_MSG, /* cpid */ \ ++ "", /* durcnt */ \ ++ normal, /* normal */ \ ++ gentle, /* gentle */ \ ++ /* MULTI ============= */ \ ++ NO_MSG, /* anncename */ \ ++ NO_MSG, /* infoname */ \ ++ NO_MSG, /* centername */ \ ++ /* CHOICE ============== */ \ ++ NO_MSG, /* challow_def */ \ ++ NO_MSG, /* challow_var */ \ ++ NO_MSG, /* chtype */ \ ++ NO_MSG, /* optiona */ \ ++ NO_MSG); /* optionb */ \ ++ } \ ++ ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name); #define MSG_CENTER_NOTIF(default,name,strnum,flnum,args,cpid,durcnt,normal,gentle) \ -- NOTIF_ADD_AUTOCVAR(name, default) \ -- float name; \ -- float cpid; \ -- void RegisterNotification_##name() \ -- { \ -- SET_FIELD_COUNT(name, NOTIF_FIRST, NOTIF_CENTER_COUNT) \ -- SET_FIELD_COUNT(cpid, NOTIF_FIRST, NOTIF_CPID_COUNT) \ -- CHECK_MAX_COUNT(name, NOTIF_CENTER_MAX, NOTIF_CENTER_COUNT, "MSG_CENTER") \ -- Create_Notification_Entity( \ -- /* COMMON ======================== */ \ -- default, /* var_default */ \ -- ACVNN(name), /* var_cvar */ \ -- MSG_CENTER, /* typeid */ \ -- name, /* nameid */ \ -- strtoupper(#name), /* namestring */ \ -- strnum, /* strnum */ \ -- flnum, /* flnum */ \ -- /* ANNCE =========== */ \ -- NO_MSG, /* channel */ \ -- "", /* snd */ \ -- NO_MSG, /* vol */ \ -- NO_MSG, /* position */ \ -- /* INFO & CENTER == */ \ -- args, /* args */ \ -- "", /* hudargs */ \ -- "", /* icon */ \ -- cpid, /* cpid */ \ -- durcnt, /* durcnt */ \ -- normal, /* normal */ \ -- gentle, /* gentle */ \ -- /* MULTI ============= */ \ -- NO_MSG, /* anncename */ \ -- NO_MSG, /* infoname */ \ -- NO_MSG, /* centername */ \ -- /* CHOICE ============== */ \ -- NO_MSG, /* challow_def */ \ -- NO_MSG, /* challow_var */ \ -- NO_MSG, /* chtype */ \ -- NO_MSG, /* optiona */ \ -- NO_MSG); /* optionb */ \ -- } \ -- ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name); ++ NOTIF_ADD_AUTOCVAR(name, default) \ ++ float name; \ ++ float cpid; \ ++ void RegisterNotification_##name() \ ++ { \ ++ SET_FIELD_COUNT(name, NOTIF_FIRST, NOTIF_CENTER_COUNT) \ ++ SET_FIELD_COUNT(cpid, NOTIF_FIRST, NOTIF_CPID_COUNT) \ ++ CHECK_MAX_COUNT(name, NOTIF_CENTER_MAX, NOTIF_CENTER_COUNT, "MSG_CENTER") \ ++ Create_Notification_Entity( \ ++ /* COMMON ======================== */ \ ++ default, /* var_default */ \ ++ ACVNN(name), /* var_cvar */ \ ++ MSG_CENTER, /* typeid */ \ ++ name, /* nameid */ \ ++ strtoupper(#name), /* namestring */ \ ++ strnum, /* strnum */ \ ++ flnum, /* flnum */ \ ++ /* ANNCE =========== */ \ ++ NO_MSG, /* channel */ \ ++ "", /* snd */ \ ++ NO_MSG, /* vol */ \ ++ NO_MSG, /* position */ \ ++ /* INFO & CENTER == */ \ ++ args, /* args */ \ ++ "", /* hudargs */ \ ++ "", /* icon */ \ ++ cpid, /* cpid */ \ ++ durcnt, /* durcnt */ \ ++ normal, /* normal */ \ ++ gentle, /* gentle */ \ ++ /* MULTI ============= */ \ ++ NO_MSG, /* anncename */ \ ++ NO_MSG, /* infoname */ \ ++ NO_MSG, /* centername */ \ ++ /* CHOICE ============== */ \ ++ NO_MSG, /* challow_def */ \ ++ NO_MSG, /* challow_var */ \ ++ NO_MSG, /* chtype */ \ ++ NO_MSG, /* optiona */ \ ++ NO_MSG); /* optionb */ \ ++ } \ ++ ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name); #define MSG_MULTI_NOTIF(default,name,anncename,infoname,centername) \ -- NOTIF_ADD_AUTOCVAR(name, default) \ -- float name; \ -- void RegisterNotification_##name() \ -- { \ -- SET_FIELD_COUNT(name, NOTIF_FIRST, NOTIF_MULTI_COUNT) \ -- CHECK_MAX_COUNT(name, NOTIF_MULTI_MAX, NOTIF_MULTI_COUNT, "MSG_MULTI") \ -- Create_Notification_Entity( \ -- /* COMMON ======================== */ \ -- default, /* var_default */ \ -- ACVNN(name), /* var_cvar */ \ -- MSG_MULTI, /* typeid */ \ -- name, /* nameid */ \ -- strtoupper(#name), /* namestring */ \ -- NO_MSG, /* strnum */ \ -- NO_MSG, /* flnum */ \ -- /* ANNCE =========== */ \ -- NO_MSG, /* channel */ \ -- "", /* snd */ \ -- NO_MSG, /* vol */ \ -- NO_MSG, /* position */ \ -- /* INFO & CENTER == */ \ -- "", /* args */ \ -- "", /* hudargs */ \ -- "", /* icon */ \ -- NO_MSG, /* cpid */ \ -- "", /* durcnt */ \ -- "", /* normal */ \ -- "", /* gentle */ \ -- /* MULTI ================= */ \ -- anncename, /* anncename */ \ -- infoname, /* infoname */ \ -- centername, /* centername */ \ -- /* CHOICE ============== */ \ -- NO_MSG, /* challow_def */ \ -- NO_MSG, /* challow_var */ \ -- NO_MSG, /* chtype */ \ -- NO_MSG, /* optiona */ \ -- NO_MSG); /* optionb */ \ -- } \ -- ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name); ++ NOTIF_ADD_AUTOCVAR(name, default) \ ++ float name; \ ++ void RegisterNotification_##name() \ ++ { \ ++ SET_FIELD_COUNT(name, NOTIF_FIRST, NOTIF_MULTI_COUNT) \ ++ CHECK_MAX_COUNT(name, NOTIF_MULTI_MAX, NOTIF_MULTI_COUNT, "MSG_MULTI") \ ++ Create_Notification_Entity( \ ++ /* COMMON ======================== */ \ ++ default, /* var_default */ \ ++ ACVNN(name), /* var_cvar */ \ ++ MSG_MULTI, /* typeid */ \ ++ name, /* nameid */ \ ++ strtoupper(#name), /* namestring */ \ ++ NO_MSG, /* strnum */ \ ++ NO_MSG, /* flnum */ \ ++ /* ANNCE =========== */ \ ++ NO_MSG, /* channel */ \ ++ "", /* snd */ \ ++ NO_MSG, /* vol */ \ ++ NO_MSG, /* position */ \ ++ /* INFO & CENTER == */ \ ++ "", /* args */ \ ++ "", /* hudargs */ \ ++ "", /* icon */ \ ++ NO_MSG, /* cpid */ \ ++ "", /* durcnt */ \ ++ "", /* normal */ \ ++ "", /* gentle */ \ ++ /* MULTI ================= */ \ ++ anncename, /* anncename */ \ ++ infoname, /* infoname */ \ ++ centername, /* centername */ \ ++ /* CHOICE ============== */ \ ++ NO_MSG, /* challow_def */ \ ++ NO_MSG, /* challow_var */ \ ++ NO_MSG, /* chtype */ \ ++ NO_MSG, /* optiona */ \ ++ NO_MSG); /* optionb */ \ ++ } \ ++ ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name); #define ACVNN(name) autocvar_notification_##name #define MSG_CHOICE_NOTIF(default,challow,name,chtype,optiona,optionb) \ -- NOTIF_ADD_AUTOCVAR(name, default) \ -- NOTIF_ADD_AUTOCVAR(name##_ALLOWED, challow) \ -- float name; \ -- void RegisterNotification_##name() \ -- { \ -- SET_FIELD_COUNT(name, NOTIF_FIRST, NOTIF_CHOICE_COUNT) \ -- CHECK_MAX_COUNT(name, NOTIF_CHOICE_MAX, NOTIF_CHOICE_COUNT, "MSG_CHOICE") \ -- Create_Notification_Entity( \ -- /* COMMON ======================== */ \ -- default, /* var_default */ \ -- ACVNN(name), /* var_cvar */ \ -- MSG_CHOICE, /* typeid */ \ -- name, /* nameid */ \ -- strtoupper(#name), /* namestring */ \ -- NO_MSG, /* strnum */ \ -- NO_MSG, /* flnum */ \ -- /* ANNCE =========== */ \ -- NO_MSG, /* channel */ \ -- "", /* snd */ \ -- NO_MSG, /* vol */ \ -- NO_MSG, /* position */ \ -- /* INFO & CENTER == */ \ -- "", /* args */ \ -- "", /* hudargs */ \ -- "", /* icon */ \ -- NO_MSG, /* cpid */ \ -- "", /* durcnt */ \ -- "", /* normal */ \ -- "", /* gentle */ \ -- /* MULTI ============= */ \ -- NO_MSG, /* anncename */ \ -- NO_MSG, /* infoname */ \ -- NO_MSG, /* centername */ \ -- /* CHOICE ============================================= */ \ -- challow, /* challow_def */ \ -- autocvar_notification_##name##_ALLOWED, /* challow_var */ \ -- chtype, /* chtype */ \ -- optiona, /* optiona */ \ -- optionb); /* optionb */ \ -- } \ -- ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name); ++ NOTIF_ADD_AUTOCVAR(name, default) \ ++ NOTIF_ADD_AUTOCVAR(name##_ALLOWED, challow) \ ++ float name; \ ++ void RegisterNotification_##name() \ ++ { \ ++ SET_FIELD_COUNT(name, NOTIF_FIRST, NOTIF_CHOICE_COUNT) \ ++ CHECK_MAX_COUNT(name, NOTIF_CHOICE_MAX, NOTIF_CHOICE_COUNT, "MSG_CHOICE") \ ++ Create_Notification_Entity( \ ++ /* COMMON ======================== */ \ ++ default, /* var_default */ \ ++ ACVNN(name), /* var_cvar */ \ ++ MSG_CHOICE, /* typeid */ \ ++ name, /* nameid */ \ ++ strtoupper(#name), /* namestring */ \ ++ NO_MSG, /* strnum */ \ ++ NO_MSG, /* flnum */ \ ++ /* ANNCE =========== */ \ ++ NO_MSG, /* channel */ \ ++ "", /* snd */ \ ++ NO_MSG, /* vol */ \ ++ NO_MSG, /* position */ \ ++ /* INFO & CENTER == */ \ ++ "", /* args */ \ ++ "", /* hudargs */ \ ++ "", /* icon */ \ ++ NO_MSG, /* cpid */ \ ++ "", /* durcnt */ \ ++ "", /* normal */ \ ++ "", /* gentle */ \ ++ /* MULTI ============= */ \ ++ NO_MSG, /* anncename */ \ ++ NO_MSG, /* infoname */ \ ++ NO_MSG, /* centername */ \ ++ /* CHOICE ============================================= */ \ ++ challow, /* challow_def */ \ ++ autocvar_notification_##name##_ALLOWED, /* challow_var */ \ ++ chtype, /* chtype */ \ ++ optiona, /* optiona */ \ ++ optionb); /* optionb */ \ ++ } \ ++ ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name); void RegisterNotifications_First() { -- notif_global_error = FALSE; -- -- #ifdef SVQC -- #define dedi (server_is_dedicated ? "a dedicated " : "") -- #else -- #define dedi "" -- #endif -- -- printf("Beginning notification initialization on %s%s program...\n", dedi, PROGNAME); - #undef dedi -- -- // maybe do another implementation of this with checksums? for now, we don't need versioning -- /*if(autocvar_notification_version != NOTIF_VERSION) -- { -- #ifdef CSQC -- if(autocvar_notification_version_mismatch_client_error) -- #else -- if(autocvar_notification_version_mismatch_server_error) -- #endif -- notif_global_error = TRUE; -- -- printf("^1NOTIFICATION VERSION MISMATCH: ^7program = %s, config = %d, code = %d.\n", -- PROGNAME, autocvar_notification_version, NOTIF_VERSION); -- }*/ ++ notif_global_error = FALSE; ++ ++ #ifdef SVQC ++ #define dedi (server_is_dedicated ? "a dedicated " : "") ++ #else ++ #define dedi "" ++ #endif ++ ++ printf("Beginning notification initialization on %s%s program...\n", dedi, PROGNAME); ++ #undef dedi ++ ++ // maybe do another implementation of this with checksums? for now, we don't need versioning ++ /*if(autocvar_notification_version != NOTIF_VERSION) ++ { ++ #ifdef CSQC ++ if(autocvar_notification_version_mismatch_client_error) ++ #else ++ if(autocvar_notification_version_mismatch_server_error) ++ #endif ++ notif_global_error = TRUE; ++ ++ printf("^1NOTIFICATION VERSION MISMATCH: ^7program = %s, config = %d, code = %d.\n", ++ PROGNAME, autocvar_notification_version, NOTIF_VERSION); ++ }*/ } void RegisterNotifications_Done() { -- if(notif_global_error) -- { -- // shit happened... stop the loading of the program now if this is unacceptable -- if(autocvar_notification_errors_are_fatal) -- error("Notification initialization failed! Read above and fix the errors!\n"); -- else -- print("Notification initialization failed! Read above and fix the errors!\n"); -- } -- else { print("Notification initialization successful!\n"); } ++ if(notif_global_error) ++ { ++ // shit happened... stop the loading of the program now if this is unacceptable ++ if(autocvar_notification_errors_are_fatal) ++ error("Notification initialization failed! Read above and fix the errors!\n"); ++ else ++ print("Notification initialization failed! Read above and fix the errors!\n"); ++ } ++ else { print("Notification initialization successful!\n"); } } // NOW we actually activate the declarations diff --cc qcsrc/common/stats.qh index 000000000,d92977f2c..ce6e005d8 mode 000000,100644..100644 --- a/qcsrc/common/stats.qh +++ b/qcsrc/common/stats.qh @@@ -1,0 -1,290 +1,290 @@@ + // 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; -// 85 empty? -// 86 empty? ++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; diff --cc qcsrc/common/weapons/all.qh index 000000000,a40488f83..4f4cd2b3d mode 000000,100644..100644 --- a/qcsrc/common/weapons/all.qh +++ b/qcsrc/common/weapons/all.qh @@@ -1,0 -1,27 +1,29 @@@ + // ONLY EVER ADD NEW WEAPONS AT THE END. IF YOU REMOVE ONE, PUT THE LAST ONE ON + // ITS PLACE. THIS IS TO AVOID UNNECESSARY RENUMBERING OF WEAPON IMPULSES. + // IF YOU DISREGARD THIS NOTICE, I'LL KILL YOU WITH THE @!#%'N TUBA + + // core weapons + #include "w_blaster.qc" + #include "w_shotgun.qc" + #include "w_machinegun.qc" + #include "w_mortar.qc" + #include "w_minelayer.qc" + #include "w_electro.qc" + #include "w_crylink.qc" + #include "w_vortex.qc" + #include "w_hagar.qc" + #include "w_devastator.qc" + + // other weapons + #include "w_porto.qc" + #include "w_vaporizer.qc" + #include "w_hook.qc" + #include "w_hlac.qc" + #include "w_tuba.qc" + #include "w_rifle.qc" + #include "w_fireball.qc" + #include "w_seeker.qc" + #include "w_shockwave.qc" + #include "w_arc.qc" ++#include "w_hmg.qc" ++#include "w_rpc.qc" diff --cc qcsrc/common/weapons/w_hmg.qc index 000000000,000000000..ecc5791ed new file mode 100644 --- /dev/null +++ b/qcsrc/common/weapons/w_hmg.qc @@@ -1,0 -1,0 +1,207 @@@ ++#ifdef REGISTER_WEAPON ++REGISTER_WEAPON( ++/* WEP_##id */ HMG, ++/* function */ W_HeavyMachineGun, ++/* ammotype */ ammo_nails, ++/* impulse */ 3, ++/* flags */ WEP_FLAG_MUTATORBLOCKED | WEP_FLAG_HIDDEN | WEP_FLAG_NORMAL | WEP_FLAG_RELOADABLE | WEP_TYPE_HITSCAN | WEP_FLAG_SUPERWEAPON, ++/* rating */ BOT_PICKUP_RATING_HIGH, ++/* color */ '1 1 0', ++/* modelname */ "ok_hmg", ++/* simplemdl */ "foobar", ++/* crosshair */ "gfx/crosshairuzi 0.6", ++/* wepimg */ "weaponhmg", ++/* refname */ "hmg", ++/* wepname */ _("Heavy Machine Gun") ++); ++ ++#define HMG_SETTINGS(w_cvar,w_prop) HMG_SETTINGS_LIST(w_cvar, w_prop, HMG, hmg) ++#define HMG_SETTINGS_LIST(w_cvar,w_prop,id,sn) \ ++ w_cvar(id, sn, NONE, spread_min) \ ++ w_cvar(id, sn, NONE, spread_max) \ ++ w_cvar(id, sn, NONE, spread_add) \ ++ w_cvar(id, sn, NONE, solidpenetration) \ ++ w_cvar(id, sn, NONE, damage) \ ++ w_cvar(id, sn, NONE, force) \ ++ w_cvar(id, sn, NONE, refire) \ ++ w_cvar(id, sn, NONE, ammo) \ ++ w_prop(id, sn, float, reloading_ammo, reload_ammo) \ ++ w_prop(id, sn, float, reloading_time, reload_time) \ ++ w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \ ++ w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \ ++ w_prop(id, sn, string, weaponreplace, weaponreplace) \ ++ w_prop(id, sn, float, weaponstart, weaponstart) \ ++ w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) \ ++ w_prop(id, sn, float, weaponthrowable, weaponthrowable) ++ ++#ifdef SVQC ++HMG_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP) ++#endif ++#else ++#ifdef SVQC ++ ++void spawnfunc_weapon_hmg() { weapon_defaultspawnfunc(WEP_HMG); } ++ ++void W_HeavyMachineGun_Attack_Auto() ++{ ++ if (!self.BUTTON_ATCK) ++ { ++ w_ready(); ++ return; ++ } ++ ++ if(!WEP_ACTION(self.weapon, WR_CHECKAMMO1)) ++ if(!(self.items & IT_UNLIMITED_WEAPON_AMMO)) ++ { ++ W_SwitchWeapon_Force(self, w_getbestweapon(self)); ++ w_ready(); ++ return; ++ } ++ ++ W_DecreaseAmmo(WEP_CVAR(hmg, ammo)); ++ ++ W_SetupShot (self, TRUE, 0, "weapons/uzi_fire.wav", CH_WEAPON_A, WEP_CVAR(hmg, damage)); ++ ++ if(!autocvar_g_norecoil) ++ { ++ self.punchangle_x = random () - 0.5; ++ self.punchangle_y = random () - 0.5; ++ } ++ ++ float hmg_spread = bound(WEP_CVAR(hmg, spread_min), WEP_CVAR(hmg, spread_min) + (WEP_CVAR(hmg, spread_add) * self.misc_bulletcounter), WEP_CVAR(hmg, spread_max)); ++ fireBullet(w_shotorg, w_shotdir, hmg_spread, WEP_CVAR(hmg, solidpenetration), WEP_CVAR(hmg, damage), WEP_CVAR(hmg, force), WEP_HMG, 0); ++ ++ self.misc_bulletcounter = self.misc_bulletcounter + 1; ++ ++ pointparticles(particleeffectnum("uzi_muzzleflash"), w_shotorg, w_shotdir * 1000, 1); ++ ++ W_MachineGun_MuzzleFlash(); ++ W_AttachToShotorg(self.muzzle_flash, '5 0 0'); ++ ++ if (autocvar_g_casings >= 2) // casing code ++ SpawnCasing (((random () * 50 + 50) * v_right) - (v_forward * (random () * 25 + 25)) - ((random () * 5 - 70) * v_up), 2, vectoangles(v_forward),'0 250 0', 100, 3, self); ++ ++ ATTACK_FINISHED(self) = time + WEP_CVAR(hmg, refire) * W_WeaponRateFactor(); ++ weapon_thinkf(WFRAME_FIRE1, WEP_CVAR(hmg, refire), W_HeavyMachineGun_Attack_Auto); ++} ++ ++float W_HeavyMachineGun(float req) ++{ ++ float ammo_amount; ++ switch(req) ++ { ++ case WR_AIM: ++ { ++ if(vlen(self.origin-self.enemy.origin) < 3000 - bound(0, skill, 10) * 200) ++ self.BUTTON_ATCK = bot_aim(1000000, 0, 0.001, FALSE); ++ else ++ self.BUTTON_ATCK2 = bot_aim(1000000, 0, 0.001, FALSE); ++ ++ return TRUE; ++ } ++ case WR_THINK: ++ { ++ if(WEP_CVAR(hmg, reload_ammo) && self.clip_load < WEP_CVAR(hmg, ammo)) // forced reload ++ WEP_ACTION(self.weapon, WR_RELOAD); ++ else ++ { ++ if (self.BUTTON_ATCK) ++ if (weapon_prepareattack(0, 0)) ++ { ++ self.misc_bulletcounter = 0; ++ W_HeavyMachineGun_Attack_Auto(); ++ } ++ } ++ ++ return TRUE; ++ } ++ case WR_INIT: ++ { ++ precache_model ("models/uziflash.md3"); ++ precache_model ("models/weapons/g_ok_hmg.md3"); ++ precache_model ("models/weapons/v_ok_hmg.md3"); ++ precache_model ("models/weapons/h_ok_hmg.iqm"); ++ precache_sound ("weapons/uzi_fire.wav"); ++ HMG_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP) ++ return TRUE; ++ } ++ case WR_CHECKAMMO1: ++ { ++ ammo_amount = self.ammo_nails >= WEP_CVAR(hmg, ammo); ++ ++ if(autocvar_g_balance_hmg_reload_ammo) ++ ammo_amount += self.(weapon_load[WEP_HMG]) >= WEP_CVAR(hmg, ammo); ++ ++ return ammo_amount; ++ } ++ case WR_CHECKAMMO2: ++ { ++ ammo_amount = self.ammo_nails >= WEP_CVAR(hmg, ammo); ++ ++ if(autocvar_g_balance_hmg_reload_ammo) ++ ammo_amount += self.(weapon_load[WEP_HMG]) >= WEP_CVAR(hmg, ammo); ++ ++ return ammo_amount; ++ } ++ case WR_CONFIG: ++ { ++ HMG_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS) ++ return TRUE; ++ } ++ case WR_RELOAD: ++ { ++ W_Reload(WEP_CVAR(hmg, ammo), "weapons/reload.wav"); ++ return TRUE; ++ } ++ case WR_SUICIDEMESSAGE: ++ { ++ return WEAPON_THINKING_WITH_PORTALS; ++ } ++ case WR_KILLMESSAGE: ++ { ++ if(w_deathtype & HITTYPE_SECONDARY) ++ return WEAPON_HMG_MURDER_SNIPE; ++ else ++ return WEAPON_HMG_MURDER_SPRAY; ++ } ++ } ++ return FALSE; ++} ++#endif ++#ifdef CSQC ++float W_HeavyMachineGun(float req) ++{ ++ switch(req) ++ { ++ case WR_IMPACTEFFECT: ++ { ++ vector org2; ++ org2 = w_org + w_backoff * 2; ++ pointparticles(particleeffectnum("machinegun_impact"), org2, w_backoff * 1000, 1); ++ if(!w_issilent) ++ if(w_random < 0.05) ++ sound(self, CH_SHOTS, "weapons/ric1.wav", VOL_BASE, ATTEN_NORM); ++ else if(w_random < 0.1) ++ sound(self, CH_SHOTS, "weapons/ric2.wav", VOL_BASE, ATTEN_NORM); ++ else if(w_random < 0.2) ++ sound(self, CH_SHOTS, "weapons/ric3.wav", VOL_BASE, ATTEN_NORM); ++ ++ return TRUE; ++ } ++ case WR_INIT: ++ { ++ precache_sound("weapons/ric1.wav"); ++ precache_sound("weapons/ric2.wav"); ++ precache_sound("weapons/ric3.wav"); ++ return TRUE; ++ } ++ case WR_ZOOMRETICLE: ++ { ++ // no weapon specific image for this weapon ++ return FALSE; ++ } ++ } ++ return FALSE; ++} ++#endif ++#endif diff --cc qcsrc/common/weapons/w_rpc.qc index 000000000,000000000..c6d68de3b new file mode 100644 --- /dev/null +++ b/qcsrc/common/weapons/w_rpc.qc @@@ -1,0 -1,0 +1,264 @@@ ++#ifdef REGISTER_WEAPON ++REGISTER_WEAPON( ++/* WEP_##id */ RPC, ++/* function */ W_RocketPropelledChainsaw, ++/* ammotype */ ammo_rockets, ++/* impulse */ 7, ++/* flags */ WEP_FLAG_MUTATORBLOCKED | WEP_FLAG_HIDDEN | WEP_FLAG_NORMAL | WEP_FLAG_CANCLIMB | WEP_FLAG_RELOADABLE | WEP_TYPE_SPLASH | WEP_FLAG_SUPERWEAPON, ++/* rating */ BOT_PICKUP_RATING_HIGH, ++/* color */ '1 1 0', ++/* modelname */ "ok_rl", ++/* simplemdl */ "foobar", ++/* crosshair */ "gfx/crosshairrocketlauncher 0.5875", ++/* wepimg */ "weaponrpc", ++/* refname */ "rpc", ++/* wepname */ _("Rocket Propelled Chainsaw") ++); ++ ++#define RPC_SETTINGS(w_cvar,w_prop) RPC_SETTINGS_LIST(w_cvar, w_prop, RPC, rpc) ++#define RPC_SETTINGS_LIST(w_cvar,w_prop,id,sn) \ ++ w_cvar(id, sn, NONE, ammo) \ ++ w_cvar(id, sn, NONE, animtime) \ ++ w_cvar(id, sn, NONE, damage) \ ++ w_cvar(id, sn, NONE, damage2) \ ++ w_cvar(id, sn, NONE, damageforcescale) \ ++ w_cvar(id, sn, NONE, edgedamage) \ ++ w_cvar(id, sn, NONE, force) \ ++ w_cvar(id, sn, NONE, health) \ ++ w_cvar(id, sn, NONE, lifetime) \ ++ w_cvar(id, sn, NONE, radius) \ ++ w_cvar(id, sn, NONE, refire) \ ++ w_cvar(id, sn, NONE, speed) \ ++ w_cvar(id, sn, NONE, speedaccel) \ ++ w_prop(id, sn, float, reloading_ammo, reload_ammo) \ ++ w_prop(id, sn, float, reloading_time, reload_time) \ ++ w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \ ++ w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \ ++ w_prop(id, sn, string, weaponreplace, weaponreplace) \ ++ w_prop(id, sn, float, weaponstart, weaponstart) \ ++ w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) \ ++ w_prop(id, sn, float, weaponthrowable, weaponthrowable) ++ ++#ifdef SVQC ++RPC_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP) ++#endif ++#else ++#ifdef SVQC ++void spawnfunc_weapon_rpc() { weapon_defaultspawnfunc(WEP_RPC); } ++ ++void W_RocketPropelledChainsaw_Explode() ++{ ++ self.event_damage = func_null; ++ self.takedamage = DAMAGE_NO; ++ ++ RadiusDamage (self, self.realowner, WEP_CVAR(rpc, damage), WEP_CVAR(rpc, edgedamage), WEP_CVAR(rpc, radius), world, world, WEP_CVAR(rpc, force), self.projectiledeathtype, other); ++ ++ remove (self); ++} ++ ++void W_RocketPropelledChainsaw_Touch (void) ++{ ++ if(WarpZone_Projectile_Touch()) ++ if(wasfreed(self)) ++ return; ++ ++ W_RocketPropelledChainsaw_Explode(); ++} ++ ++void W_RocketPropelledChainsaw_Damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force) ++{ ++ if (self.health <= 0) ++ return; ++ ++ if (!W_CheckProjectileDamage(inflictor.realowner, self.realowner, deathtype, -1)) // no exceptions ++ return; // g_projectiles_damage says to halt ++ ++ self.health = self.health - damage; ++ ++ if (self.health <= 0) ++ W_PrepareExplosionByDamage(attacker, W_RocketPropelledChainsaw_Explode); ++} ++ ++void W_RocketPropelledChainsaw_Think() ++{ ++ if(self.cnt <= time) ++ { ++ remove(self); ++ return; ++ } ++ ++ self.cnt = vlen(self.velocity); ++ self.wait = self.cnt * sys_frametime; ++ self.pos1 = normalize(self.velocity); ++ ++ tracebox(self.origin, self.mins, self.maxs, self.origin + self.pos1 * (2 * self.wait), MOVE_NORMAL, self); ++ if(IS_PLAYER(trace_ent)) ++ Damage (trace_ent, self, self.realowner, WEP_CVAR(rpc, damage2), self.projectiledeathtype, self.origin, normalize(self.origin - other.origin) * WEP_CVAR(rpc, force)); ++ ++ self.velocity = self.pos1 * (self.cnt + (WEP_CVAR(rpc, speedaccel) * sys_frametime)); ++ ++ UpdateCSQCProjectile(self); ++ self.nextthink = time; ++} ++ ++void W_RocketPropelledChainsaw_Attack (void) ++{ ++ entity missile = spawn(); //WarpZone_RefSys_SpawnSameRefSys(self); ++ entity flash = spawn (); ++ ++ W_DecreaseAmmo(WEP_CVAR(rpc, ammo)); ++ W_SetupShot_ProjectileSize (self, '-3 -3 -3', '3 3 3', FALSE, 5, "weapons/rocket_fire.wav", CH_WEAPON_A, WEP_CVAR(rpc, damage)); ++ pointparticles(particleeffectnum("rocketlauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1); ++ PROJECTILE_MAKETRIGGER(missile); ++ ++ missile.owner = missile.realowner = self; ++ missile.bot_dodge = TRUE; ++ missile.bot_dodgerating = WEP_CVAR(rpc, damage) * 2; ++ ++ missile.takedamage = DAMAGE_YES; ++ missile.damageforcescale = WEP_CVAR(rpc, damageforcescale); ++ missile.health = WEP_CVAR(rpc, health); ++ missile.event_damage = W_RocketPropelledChainsaw_Damage; ++ missile.damagedbycontents = TRUE; ++ missile.movetype = MOVETYPE_FLY; ++ ++ missile.projectiledeathtype = WEP_RPC; ++ setsize (missile, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot ++ ++ setorigin (missile, w_shotorg - v_forward * 3); // move it back so it hits the wall at the right point ++ W_SetupProjVelocity_Basic(missile, WEP_CVAR(rpc, speed), 0); ++ ++ missile.touch = W_RocketPropelledChainsaw_Touch; ++ ++ missile.think = W_RocketPropelledChainsaw_Think; ++ missile.cnt = time + WEP_CVAR(rpc, lifetime); ++ missile.nextthink = time; ++ missile.flags = FL_PROJECTILE; ++ ++ CSQCProjectile(missile, TRUE, PROJECTILE_RPC, FALSE); ++ ++ setmodel(flash, "models/flash.md3"); // precision set below ++ SUB_SetFade (flash, time, 0.1); ++ flash.effects = EF_ADDITIVE | EF_FULLBRIGHT | EF_LOWPRECISION; ++ W_AttachToShotorg(flash, '5 0 0'); ++ missile.pos1 = missile.velocity; ++ ++ other = missile; MUTATOR_CALLHOOK(EditProjectile); ++} ++ ++float W_RocketPropelledChainsaw(float req) ++{ ++ float ammo_amount = FALSE; ++ switch(req) ++ { ++ case WR_AIM: ++ { ++ self.BUTTON_ATCK = bot_aim(WEP_CVAR(rpc, speed), 0, WEP_CVAR(rpc, lifetime), FALSE); ++ return TRUE; ++ } ++ case WR_THINK: ++ { ++ if(WEP_CVAR(rpc, reload_ammo) && self.clip_load < WEP_CVAR(rpc, ammo)) ++ WEP_ACTION(self.weapon, WR_RELOAD); ++ else ++ { ++ if (self.BUTTON_ATCK) ++ { ++ if(weapon_prepareattack(0, WEP_CVAR(rpc, refire))) ++ { ++ W_RocketPropelledChainsaw_Attack(); ++ weapon_thinkf(WFRAME_FIRE1, WEP_CVAR(rpc, animtime), w_ready); ++ } ++ } ++ ++ if (self.BUTTON_ATCK2) ++ { ++ // to-do ++ } ++ } ++ ++ return TRUE; ++ } ++ case WR_INIT: ++ { ++ precache_model ("models/flash.md3"); ++ precache_model("models/weapons/h_ok_rl.iqm"); ++ precache_model("models/weapons/v_ok_rl.md3"); ++ precache_model("models/weapons/g_ok_rl.md3"); ++ precache_sound ("weapons/rocket_fire.wav"); ++ RPC_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP) ++ return TRUE; ++ } ++ case WR_CHECKAMMO1: ++ { ++ ammo_amount = self.WEP_AMMO(RPC) >= WEP_CVAR(rpc, ammo); ++ ammo_amount += self.(weapon_load[WEP_RPC]) >= WEP_CVAR(rpc, ammo); ++ return ammo_amount; ++ } ++ case WR_CHECKAMMO2: ++ { ++ return FALSE; ++ } ++ case WR_CONFIG: ++ { ++ RPC_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS) ++ return TRUE; ++ } ++ case WR_RELOAD: ++ { ++ W_Reload(WEP_CVAR(rpc, ammo), "weapons/reload.wav"); ++ return TRUE; ++ } ++ case WR_SUICIDEMESSAGE: ++ { ++ if((w_deathtype & HITTYPE_BOUNCE) || (w_deathtype & HITTYPE_SPLASH)) ++ return WEAPON_RPC_SUICIDE_SPLASH; ++ else ++ return WEAPON_RPC_SUICIDE_DIRECT; ++ } ++ case WR_KILLMESSAGE: ++ { ++ if(w_deathtype & HITTYPE_SECONDARY) ++ return WEAPON_BLASTER_MURDER; ++ else if((w_deathtype & HITTYPE_BOUNCE) || (w_deathtype & HITTYPE_SPLASH)) ++ return WEAPON_RPC_MURDER_SPLASH; ++ else ++ return WEAPON_RPC_MURDER_DIRECT; ++ } ++ } ++ ++ return FALSE; ++} ++#endif ++ ++#ifdef CSQC ++float W_RocketPropelledChainsaw(float req) ++{ ++ switch(req) ++ { ++ case WR_IMPACTEFFECT: ++ { ++ vector org2; ++ org2 = w_org + w_backoff * 12; ++ pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1); ++ if(!w_issilent) ++ sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM); ++ ++ return TRUE; ++ } ++ case WR_INIT: ++ { ++ precache_sound("weapons/rocket_impact.wav"); ++ return TRUE; ++ } ++ case WR_ZOOMRETICLE: ++ { ++ // no weapon specific image for this weapon ++ return FALSE; ++ } ++ } ++ ++ return FALSE; ++} ++#endif ++#endif diff --cc qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c index c908d82d3,18e167f5d..c276a2cd2 --- a/qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c +++ b/qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c @@@ -253,11 -251,8 +253,11 @@@ void XonoticMutatorsDialog_fill(entity me.TD(me, 1, 4, makeXonoticTextLabel(0, _("Special arenas:"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.8, e = makeXonoticRadioButton(1, "g_minstagib", "1", _("MinstaGib"))); + me.TD(me, 1, 1.8, e = makeXonoticRadioButton(1, "g_instagib", "1", _("InstaGib"))); e.cvarOffValue = "0"; + me.TR(me); + me.TDempty(me, 0.2); + me.TD(me, 1, 2, e = makeXonoticRadioButton(1, "g_overkill", "1", _("Overkill"))); me.TR(me); me.TDempty(me, 0.2); me.TD(me, 1, 1.8, e = makeXonoticRadioButton(1, "g_nix", "1", _("NIX"))); diff --cc qcsrc/server/defs.qh index 3eb429245,5eb92bcb3..15bad10d6 --- a/qcsrc/server/defs.qh +++ b/qcsrc/server/defs.qh @@@ -583,9 -572,13 +572,14 @@@ float serverflags .float team_forced; // can be a team number to force a team, or 0 for default action, or -1 for forced spectator .float player_blocked; +.float weapon_blocked; // weapon use disabled - .float freezetag_frozen; + .float frozen; // for freeze attacks + .float revive_progress; + .float revival_time; // time at which player was last revived + .float revive_speed; // NOTE: multiplier (anything above 1 is instaheal) + .entity iceblock; + .entity frozen_by; // for ice fields .entity muzzle_flash; .float misc_bulletcounter; // replaces uzi & hlac bullet counter. diff --cc qcsrc/server/mutators/mutator_instagib.qc index 000000000,dc822e274..c448617c3 mode 000000,100644..100644 --- a/qcsrc/server/mutators/mutator_instagib.qc +++ b/qcsrc/server/mutators/mutator_instagib.qc @@@ -1,0 -1,458 +1,458 @@@ + 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_MINSTA_SECONDARY); } ++ 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; + } diff --cc qcsrc/server/mutators/mutator_overkill.qc index 3f798c9de,000000000..ecef7ceac mode 100644,000000..100644 --- a/qcsrc/server/mutators/mutator_overkill.qc +++ b/qcsrc/server/mutators/mutator_overkill.qc @@@ -1,356 -1,0 +1,389 @@@ +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(DEATH_ISWEAPON(frag_deathtype, WEP_LASER)) ++ if(DEATH_ISWEAPON(frag_deathtype, WEP_BLASTER)) + { + frag_damage = 0; + + if(frag_attacker != frag_target) + if(frag_target.health > 0) - if(frag_target.freezetag_frozen == 0) ++ 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; +} + - MUTATOR_HOOKFUNCTION(ok_MonsterSpawn) ++MUTATOR_HOOKFUNCTION(ok_PlayerRegen) +{ - self.candrop = FALSE; // no default item drops - return FALSE; ++ // 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; + - if(self.deadflag != DEAD_NO || !IS_PLAYER(self) || self.freezetag_frozen) ++ 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) + { - self.jump_interval = time + autocvar_g_balance_laser_primary_refire * W_WeaponRateFactor(); ++ self.jump_interval = time + WEP_CVAR_PRI(blaster, refire) * W_WeaponRateFactor(); + makevectors(self.v_angle); - float w = self.weapon; - self.weapon = WEP_LASER; - W_Laser_Attack(3); - self.weapon = w; ++ ++ 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)) + { - if(autocvar_g_overkill_ammo_charge_notice && time > self.ok_notice_time && self.BUTTON_ATCK && IS_REAL_CLIENT(self)) ++ 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; - start_weapons = warmup_start_weapons = (WEPSET_UZI | WEPSET_NEX | WEPSET_SHOTGUN); ++ 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_all_playermodels("models/ok_player/*.dpm"); ++ ok_SetCvars(); + - 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"); ++ 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"); + - 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_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); + - w_uzi(WR_PRECACHE); - w_nex(WR_PRECACHE); - w_shotgun(WR_PRECACHE); - w_laser(WR_PRECACHE); ++ 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"; - (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"); ++ (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(MonsterDies, ok_PlayerDies, CBC_ORDER_ANY); - MUTATOR_HOOK(MonsterSpawn, ok_MonsterSpawn, 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; +} diff --cc qcsrc/server/mutators/mutator_overkill.qh index 17e46e20d,000000000..98ba99cb5 mode 100644,000000..100644 --- a/qcsrc/server/mutators/mutator_overkill.qh +++ b/qcsrc/server/mutators/mutator_overkill.qh @@@ -1,12 -1,0 +1,14 @@@ +.vector ok_deathloc; +.float ok_spawnsys_timer; +.float ok_lastwep; +.float ok_item; + +.float ok_notice_time; +.float ammo_charge[WEP_MAXCOUNT]; +.float ok_use_ammocharge; +.float ok_ammo_charge; + ++.float ok_pauseregen_finished; ++ +void(entity ent, float wep) ok_DecreaseCharge; + diff --cc qcsrc/server/mutators/mutators.qc index 000000000,2f96e9e8a..0fa2caab2 mode 000000,100644..100644 --- a/qcsrc/server/mutators/mutators.qc +++ b/qcsrc/server/mutators/mutators.qc @@@ -1,0 -1,29 +1,30 @@@ + 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_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")); ++ 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_pinata", mutator_pinata, !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, !cvar("g_instagib")); ++ 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 + } diff --cc qcsrc/server/mutators/mutators.qh index cf44978ff,955ba1a52..4dcc9df2f --- a/qcsrc/server/mutators/mutators.qh +++ b/qcsrc/server/mutators/mutators.qh @@@ -29,7 -32,6 +32,8 @@@ MUTATOR_DECLARATION(mutator_multijump) MUTATOR_DECLARATION(mutator_melee_only); MUTATOR_DECLARATION(mutator_nades); MUTATOR_DECLARATION(mutator_campcheck); + MUTATOR_DECLARATION(mutator_buffs); MUTATOR_DECLARATION(sandbox); +MUTATOR_DECLARATION(mutator_overkill); + diff --cc qcsrc/server/mutators/mutators_include.qc index 000000000,220bd0595..0f52e34f0 mode 000000,100644..100644 --- a/qcsrc/server/mutators/mutators_include.qc +++ b/qcsrc/server/mutators/mutators_include.qc @@@ -1,0 -1,37 +1,38 @@@ + #include "base.qc" + #include "gamemode_assault.qc" + #include "gamemode_ca.qc" + #include "gamemode_ctf.qc" + #include "gamemode_domination.qc" + #include "gamemode_freezetag.qc" + #include "gamemode_keyhunt.qc" + #include "gamemode_keepaway.qc" + #include "gamemode_nexball.qc" + #include "gamemode_onslaught.qc" + #include "gamemode_lms.qc" + #include "gamemode_invasion.qc" + #include "gamemode_race.qc" + #include "gamemode_cts.qc" + #include "gamemode_tdm.qc" + + #include "mutator_invincibleproj.qc" + #include "mutator_new_toys.qc" + #include "mutator_nix.qc" + #include "mutator_dodging.qc" + #include "mutator_rocketflying.qc" + #include "mutator_vampire.qc" + #include "mutator_spawn_near_teammate.qc" + #include "mutator_physical_items.qc" + #include "sandbox.qc" + #include "mutator_superspec.qc" ++#include "mutator_overkill.qc" + #include "mutator_instagib.qc" + #include "mutator_touchexplode.qc" + #include "mutator_pinata.qc" + #include "mutator_midair.qc" + #include "mutator_bloodloss.qc" + #include "mutator_random_gravity.qc" + #include "mutator_multijump.qc" + #include "mutator_melee_only.qc" + #include "mutator_nades.qc" + #include "mutator_campcheck.qc" + #include "mutator_buffs.qc" diff --cc qcsrc/server/mutators/mutators_include.qh index 000000000,08841db93..c869ab696 mode 000000,100644..100644 --- a/qcsrc/server/mutators/mutators_include.qh +++ b/qcsrc/server/mutators/mutators_include.qh @@@ -1,0 -1,17 +1,18 @@@ + #include "base.qh" + #include "mutators.qh" + #include "gamemode_assault.qh" + #include "gamemode_ca.qh" + #include "gamemode_ctf.qh" + #include "gamemode_domination.qh" + #include "gamemode_keyhunt.qh" + #include "gamemode_keepaway.qh" + #include "gamemode_nexball.qh" + #include "gamemode_lms.qh" + #include "gamemode_invasion.qh" + #include "gamemode_race.qh" + #include "gamemode_cts.qh" + + #include "mutator_dodging.qh" ++#include "mutator_overkill.qh" + #include "mutator_nades.qh" + #include "mutator_buffs.qh" diff --cc qcsrc/server/weapons/weaponsystem.qc index 000000000,df3380116..13123a460 mode 000000,100644..100644 --- a/qcsrc/server/weapons/weaponsystem.qc +++ b/qcsrc/server/weapons/weaponsystem.qc @@@ -1,0 -1,956 +1,967 @@@ + /* + =========================================================================== + + CLIENT WEAPONSYSTEM CODE + Bring back W_Weaponframe + + =========================================================================== + */ + + .float weapon_frametime; + + float W_WeaponRateFactor() + { + float t; + t = 1.0 / g_weaponratefactor; + + weapon_rate = t; + MUTATOR_CALLHOOK(WeaponRateFactor); + t = weapon_rate; + + return t; + } + + // VorteX: static frame globals + const float WFRAME_DONTCHANGE = -1; + const float WFRAME_FIRE1 = 0; + const float WFRAME_FIRE2 = 1; + const float WFRAME_IDLE = 2; + const float WFRAME_RELOAD = 3; + .float wframe; + + void(float fr, float t, void() func) weapon_thinkf; + + float CL_Weaponentity_CustomizeEntityForClient() + { + self.viewmodelforclient = self.owner; + if(IS_SPEC(other)) + if(other.enemy == self.owner) + self.viewmodelforclient = other; + return TRUE; + } + + /* + * supported formats: + * + * 1. simple animated model, muzzle flash handling on h_ model: + * h_tuba.dpm, h_tuba.dpm.framegroups - invisible model controlling the animation + * tags: + * shot = muzzle end (shot origin, also used for muzzle flashes) + * shell = casings ejection point (must be on the right hand side of the gun) + * weapon = attachment for v_tuba.md3 + * v_tuba.md3 - first and third person model + * g_tuba.md3 - pickup model + * + * 2. simple animated model, muzzle flash handling on v_ model: + * h_tuba.dpm, h_tuba.dpm.framegroups - invisible model controlling the animation + * tags: + * weapon = attachment for v_tuba.md3 + * v_tuba.md3 - first and third person model + * tags: + * shot = muzzle end (shot origin, also used for muzzle flashes) + * shell = casings ejection point (must be on the right hand side of the gun) + * g_tuba.md3 - pickup model + * + * 3. fully animated model, muzzle flash handling on h_ model: + * h_tuba.dpm, h_tuba.dpm.framegroups - animated first person model + * tags: + * shot = muzzle end (shot origin, also used for muzzle flashes) + * shell = casings ejection point (must be on the right hand side of the gun) + * handle = corresponding to the origin of v_tuba.md3 (used for muzzle flashes) + * v_tuba.md3 - third person model + * g_tuba.md3 - pickup model + * + * 4. fully animated model, muzzle flash handling on v_ model: + * h_tuba.dpm, h_tuba.dpm.framegroups - animated first person model + * tags: + * shot = muzzle end (shot origin) + * shell = casings ejection point (must be on the right hand side of the gun) + * v_tuba.md3 - third person model + * tags: + * shot = muzzle end (for muzzle flashes) + * g_tuba.md3 - pickup model + */ + + // writes: + // self.origin, self.angles + // self.weaponentity + // self.movedir, self.view_ofs + // attachment stuff + // anim stuff + // to free: + // call again with "" + // remove the ent + void CL_WeaponEntity_SetModel(string name) + { + float v_shot_idx; + if (name != "") + { + // if there is a child entity, hide it until we're sure we use it + if (self.weaponentity) + self.weaponentity.model = ""; + setmodel(self, strcat("models/weapons/v_", name, ".md3")); // precision set below + v_shot_idx = gettagindex(self, "shot"); // used later + if(!v_shot_idx) + v_shot_idx = gettagindex(self, "tag_shot"); + + setmodel(self, strcat("models/weapons/h_", name, ".iqm")); // precision set below + // preset some defaults that work great for renamed zym files (which don't need an animinfo) + self.anim_fire1 = animfixfps(self, '0 1 0.01', '0 0 0'); + self.anim_fire2 = animfixfps(self, '1 1 0.01', '0 0 0'); + self.anim_idle = animfixfps(self, '2 1 0.01', '0 0 0'); + self.anim_reload = animfixfps(self, '3 1 0.01', '0 0 0'); + + // if we have a "weapon" tag, let's attach the v_ model to it ("invisible hand" style model) + // if we don't, this is a "real" animated model + if(gettagindex(self, "weapon")) + { + if (!self.weaponentity) + self.weaponentity = spawn(); + setmodel(self.weaponentity, strcat("models/weapons/v_", name, ".md3")); // precision does not matter + setattachment(self.weaponentity, self, "weapon"); + } + else if(gettagindex(self, "tag_weapon")) + { + if (!self.weaponentity) + self.weaponentity = spawn(); + setmodel(self.weaponentity, strcat("models/weapons/v_", name, ".md3")); // precision does not matter + setattachment(self.weaponentity, self, "tag_weapon"); + } + else + { + if(self.weaponentity) + remove(self.weaponentity); + self.weaponentity = world; + } + + setorigin(self,'0 0 0'); + self.angles = '0 0 0'; + self.frame = 0; + self.viewmodelforclient = world; + + float idx; + + if(v_shot_idx) // v_ model attached to invisible h_ model + { + self.movedir = gettaginfo(self.weaponentity, v_shot_idx); + } + else + { + idx = gettagindex(self, "shot"); + if(!idx) + idx = gettagindex(self, "tag_shot"); + if(idx) + self.movedir = gettaginfo(self, idx); + else + { + print("WARNING: weapon model ", self.model, " does not support the 'shot' tag, will display shots TOTALLY wrong\n"); + self.movedir = '0 0 0'; + } + } + + if(self.weaponentity) // v_ model attached to invisible h_ model + { + idx = gettagindex(self.weaponentity, "shell"); + if(!idx) + idx = gettagindex(self.weaponentity, "tag_shell"); + if(idx) + self.spawnorigin = gettaginfo(self.weaponentity, idx); + } + else + idx = 0; + if(!idx) + { + idx = gettagindex(self, "shell"); + if(!idx) + idx = gettagindex(self, "tag_shell"); + if(idx) + self.spawnorigin = gettaginfo(self, idx); + else + { + print("WARNING: weapon model ", self.model, " does not support the 'shell' tag, will display casings wrong\n"); + self.spawnorigin = self.movedir; + } + } + + if(v_shot_idx) + { + self.oldorigin = '0 0 0'; // use regular attachment + } + else + { + if(self.weaponentity) + { + idx = gettagindex(self, "weapon"); + if(!idx) + idx = gettagindex(self, "tag_weapon"); + } + else + { + idx = gettagindex(self, "handle"); + if(!idx) + idx = gettagindex(self, "tag_handle"); + } + if(idx) + { + self.oldorigin = self.movedir - gettaginfo(self, idx); + } + else + { + print("WARNING: weapon model ", self.model, " does not support the 'handle' tag and neither does the v_ model support the 'shot' tag, will display muzzle flashes TOTALLY wrong\n"); + self.oldorigin = '0 0 0'; // there is no way to recover from this + } + } + + self.viewmodelforclient = self.owner; + } + else + { + self.model = ""; + if(self.weaponentity) + remove(self.weaponentity); + self.weaponentity = world; + self.movedir = '0 0 0'; + self.spawnorigin = '0 0 0'; + self.oldorigin = '0 0 0'; + self.anim_fire1 = '0 1 0.01'; + self.anim_fire2 = '0 1 0.01'; + self.anim_idle = '0 1 0.01'; + self.anim_reload = '0 1 0.01'; + } + + self.view_ofs = '0 0 0'; + + if(self.movedir_x >= 0) + { + vector v0; + v0 = self.movedir; + self.movedir = shotorg_adjust(v0, FALSE, FALSE); + self.view_ofs = shotorg_adjust(v0, FALSE, TRUE) - v0; + } + self.owner.stat_shotorg = compressShotOrigin(self.movedir); + self.movedir = decompressShotOrigin(self.owner.stat_shotorg); // make them match perfectly + + self.spawnorigin += self.view_ofs; // offset the casings origin by the same amount + + // check if an instant weapon switch occurred + setorigin(self, self.view_ofs); + // reset animstate now + self.wframe = WFRAME_IDLE; + setanim(self, self.anim_idle, TRUE, FALSE, TRUE); + } + + vector CL_Weapon_GetShotOrg(float wpn) + { + entity wi, oldself; + vector ret; + wi = get_weaponinfo(wpn); + oldself = self; + self = spawn(); + CL_WeaponEntity_SetModel(wi.mdl); + ret = self.movedir; + CL_WeaponEntity_SetModel(""); + remove(self); + self = oldself; + return ret; + } + + void CL_Weaponentity_Think() + { + float tb; + self.nextthink = time; + if (intermission_running) + self.frame = self.anim_idle_x; + if (self.owner.weaponentity != self) + { + if (self.weaponentity) + remove(self.weaponentity); + remove(self); + return; + } + if (self.owner.deadflag != DEAD_NO) + { + self.model = ""; + if (self.weaponentity) + self.weaponentity.model = ""; + return; + } + if (self.weaponname != self.owner.weaponname || self.dmg != self.owner.modelindex || self.deadflag != self.owner.deadflag) + { + self.weaponname = self.owner.weaponname; + self.dmg = self.owner.modelindex; + self.deadflag = self.owner.deadflag; + + CL_WeaponEntity_SetModel(self.owner.weaponname); + } + + tb = (self.effects & (EF_TELEPORT_BIT | EF_RESTARTANIM_BIT)); + self.effects = self.owner.effects & EFMASK_CHEAP; + self.effects &= ~EF_LOWPRECISION; + self.effects &= ~EF_FULLBRIGHT; // can mask team color, so get rid of it + self.effects &= ~EF_TELEPORT_BIT; + self.effects &= ~EF_RESTARTANIM_BIT; + self.effects |= tb; + + if(self.owner.alpha == default_player_alpha) + self.alpha = default_weapon_alpha; + else if(self.owner.alpha != 0) + self.alpha = self.owner.alpha; + else + self.alpha = 1; + + self.glowmod = self.owner.weaponentity_glowmod; + self.colormap = self.owner.colormap; + if (self.weaponentity) + { + self.weaponentity.effects = self.effects; + self.weaponentity.alpha = self.alpha; + self.weaponentity.colormap = self.colormap; + self.weaponentity.glowmod = self.glowmod; + } + + self.angles = '0 0 0'; + + float f = (self.owner.weapon_nextthink - time); + if (self.state == WS_RAISE && !intermission_running) + { + entity newwep = get_weaponinfo(self.owner.switchweapon); + f = f * g_weaponratefactor / max(f, newwep.switchdelay_raise); + self.angles_x = -90 * f * f; + } + else if (self.state == WS_DROP && !intermission_running) + { + entity oldwep = get_weaponinfo(self.owner.weapon); + f = 1 - f * g_weaponratefactor / max(f, oldwep.switchdelay_drop); + self.angles_x = -90 * f * f; + } + else if (self.state == WS_CLEAR) + { + f = 1; + self.angles_x = -90 * f * f; + } + } + + void CL_ExteriorWeaponentity_Think() + { + float tag_found; + self.nextthink = time; + if (self.owner.exteriorweaponentity != self) + { + remove(self); + return; + } + if (self.owner.deadflag != DEAD_NO) + { + self.model = ""; + return; + } + if (self.weaponname != self.owner.weaponname || self.dmg != self.owner.modelindex || self.deadflag != self.owner.deadflag) + { + self.weaponname = self.owner.weaponname; + self.dmg = self.owner.modelindex; + self.deadflag = self.owner.deadflag; + if (self.owner.weaponname != "") + setmodel(self, strcat("models/weapons/v_", self.owner.weaponname, ".md3")); // precision set below + else + self.model = ""; + + if((tag_found = gettagindex(self.owner, "tag_weapon"))) + { + self.tag_index = tag_found; + self.tag_entity = self.owner; + } + else + setattachment(self, self.owner, "bip01 r hand"); + } + self.effects = self.owner.effects; + self.effects |= EF_LOWPRECISION; + self.effects = self.effects & EFMASK_CHEAP; // eat performance + if(self.owner.alpha == default_player_alpha) + self.alpha = default_weapon_alpha; + else if(self.owner.alpha != 0) + self.alpha = self.owner.alpha; + else + self.alpha = 1; + + self.glowmod = self.owner.weaponentity_glowmod; + self.colormap = self.owner.colormap; + + CSQCMODEL_AUTOUPDATE(); + } + + // spawning weaponentity for client + void CL_SpawnWeaponentity() + { + self.weaponentity = spawn(); + self.weaponentity.classname = "weaponentity"; + self.weaponentity.solid = SOLID_NOT; + self.weaponentity.owner = self; + setmodel(self.weaponentity, ""); // precision set when changed + setorigin(self.weaponentity, '0 0 0'); + self.weaponentity.angles = '0 0 0'; + self.weaponentity.viewmodelforclient = self; + self.weaponentity.flags = 0; + self.weaponentity.think = CL_Weaponentity_Think; + self.weaponentity.customizeentityforclient = CL_Weaponentity_CustomizeEntityForClient; + self.weaponentity.nextthink = time; + + self.exteriorweaponentity = spawn(); + self.exteriorweaponentity.classname = "exteriorweaponentity"; + self.exteriorweaponentity.solid = SOLID_NOT; + self.exteriorweaponentity.exteriorweaponentity = self.exteriorweaponentity; + self.exteriorweaponentity.owner = self; + setorigin(self.exteriorweaponentity, '0 0 0'); + self.exteriorweaponentity.angles = '0 0 0'; + self.exteriorweaponentity.think = CL_ExteriorWeaponentity_Think; + self.exteriorweaponentity.nextthink = time; + + { + entity oldself = self; + self = self.exteriorweaponentity; + CSQCMODEL_AUTOINIT(); + self = oldself; + } + } + + // Weapon subs + void w_clear() + { + if (self.weapon != -1) + { + self.weapon = 0; + self.switchingweapon = 0; + } + if (self.weaponentity) + { + self.weaponentity.state = WS_CLEAR; + self.weaponentity.effects = 0; + } + } + + void w_ready() + { + if (self.weaponentity) + self.weaponentity.state = WS_READY; + weapon_thinkf(WFRAME_IDLE, 1000000, w_ready); + } + + .float prevdryfire; + .float prevwarntime; + float weapon_prepareattack_checkammo(float secondary) + { + if (!(self.items & IT_UNLIMITED_WEAPON_AMMO)) + if (!WEP_ACTION(self.weapon, WR_CHECKAMMO1 + secondary)) + { + // always keep the Mine Layer if we placed mines, so that we can detonate them + entity mine; + if(self.weapon == WEP_MINE_LAYER) + for(mine = world; (mine = find(mine, classname, "mine")); ) if(mine.owner == self) + return FALSE; + + if(self.weapon == WEP_SHOTGUN) + if(!secondary && WEP_CVAR(shotgun, secondary) == 1) + return FALSE; // no clicking, just allow + + if(self.weapon == self.switchweapon && time - self.prevdryfire > 1) // only play once BEFORE starting to switch weapons + { + sound (self, CH_WEAPON_A, "weapons/dryfire.wav", VOL_BASE, ATTEN_NORM); + self.prevdryfire = time; + } + + if(WEP_ACTION(self.weapon, WR_CHECKAMMO2 - secondary)) // check if the other firing mode has enough ammo + { + if(time - self.prevwarntime > 1) + { + Send_Notification( + NOTIF_ONE, + self, + MSG_MULTI, + ITEM_WEAPON_PRIMORSEC, + self.weapon, + secondary, + (1 - secondary) + ); + } + self.prevwarntime = time; + } + else // this weapon is totally unable to fire, switch to another one + { + W_SwitchToOtherWeapon(self); + } + + return FALSE; + } + return TRUE; + } + .float race_penalty; + float weapon_prepareattack_check(float secondary, float attacktime) + { + if(!weapon_prepareattack_checkammo(secondary)) + return FALSE; + + //if sv_ready_restart_after_countdown is set, don't allow the player to shoot + //if all players readied up and the countdown is running + if(time < game_starttime || time < self.race_penalty) { + return FALSE; + } + + if (timeout_status == TIMEOUT_ACTIVE) //don't allow the player to shoot while game is paused + return FALSE; + + // do not even think about shooting if switching + if(self.switchweapon != self.weapon) + return FALSE; + + if(attacktime >= 0) + { + // don't fire if previous attack is not finished + if (ATTACK_FINISHED(self) > time + self.weapon_frametime * 0.5) + return FALSE; + // don't fire while changing weapon + if (self.weaponentity.state != WS_READY) + return FALSE; + } + + return TRUE; + } + float weapon_prepareattack_do(float secondary, float attacktime) + { + self.weaponentity.state = WS_INUSE; + + self.spawnshieldtime = min(self.spawnshieldtime, time); // kill spawn shield when you fire + + // if the weapon hasn't been firing continuously, reset the timer + if(attacktime >= 0) + { + if (ATTACK_FINISHED(self) < time - self.weapon_frametime * 1.5) + { + ATTACK_FINISHED(self) = time; + //dprint("resetting attack finished to ", ftos(time), "\n"); + } + ATTACK_FINISHED(self) = ATTACK_FINISHED(self) + attacktime * W_WeaponRateFactor(); + } + self.bulletcounter += 1; + //dprint("attack finished ", ftos(ATTACK_FINISHED(self)), "\n"); + return TRUE; + } + float weapon_prepareattack(float secondary, float attacktime) + { + if(weapon_prepareattack_check(secondary, attacktime)) + { + weapon_prepareattack_do(secondary, attacktime); + return TRUE; + } + else + return FALSE; + } + + void weapon_thinkf(float fr, float t, void() func) + { + vector a; + vector of, or, ou; + float restartanim; + + if(fr == WFRAME_DONTCHANGE) + { + fr = self.weaponentity.wframe; + restartanim = FALSE; + } + else if (fr == WFRAME_IDLE) + restartanim = FALSE; + else + restartanim = TRUE; + + of = v_forward; + or = v_right; + ou = v_up; + + if (self.weaponentity) + { + self.weaponentity.wframe = fr; + a = '0 0 0'; + if (fr == WFRAME_IDLE) + a = self.weaponentity.anim_idle; + else if (fr == WFRAME_FIRE1) + a = self.weaponentity.anim_fire1; + else if (fr == WFRAME_FIRE2) + a = self.weaponentity.anim_fire2; + else // if (fr == WFRAME_RELOAD) + a = self.weaponentity.anim_reload; + a_z *= g_weaponratefactor; + setanim(self.weaponentity, a, restartanim == FALSE, restartanim, restartanim); + } + + v_forward = of; + v_right = or; + v_up = ou; + + if(self.weapon_think == w_ready && func != w_ready && self.weaponentity.state == WS_RAISE) + { + backtrace("Tried to override initial weapon think function - should this really happen?"); + } + + t *= W_WeaponRateFactor(); + + // VorteX: haste can be added here + if (self.weapon_think == w_ready) + { + self.weapon_nextthink = time; + //dprint("started firing at ", ftos(time), "\n"); + } + if (self.weapon_nextthink < time - self.weapon_frametime * 1.5 || self.weapon_nextthink > time + self.weapon_frametime * 1.5) + { + self.weapon_nextthink = time; + //dprint("reset weapon animation timer at ", ftos(time), "\n"); + } + self.weapon_nextthink = self.weapon_nextthink + t; + self.weapon_think = func; + //dprint("next ", ftos(self.weapon_nextthink), "\n"); + + if((fr == WFRAME_FIRE1 || fr == WFRAME_FIRE2) && t) + { + if((self.weapon == WEP_SHOCKWAVE || self.weapon == WEP_SHOTGUN) && fr == WFRAME_FIRE2) + animdecide_setaction(self, ANIMACTION_MELEE, restartanim); + else + animdecide_setaction(self, ANIMACTION_SHOOT, restartanim); + } + else + { + if(self.anim_upper_action == ANIMACTION_SHOOT || self.anim_upper_action == ANIMACTION_MELEE) + self.anim_upper_action = 0; + } + } + + float forbidWeaponUse() + { + if(time < game_starttime && !autocvar_sv_ready_restart_after_countdown) + return 1; + if(round_handler_IsActive() && !round_handler_IsRoundStarted()) + return 1; + if(self.player_blocked) + return 1; + if(self.frozen) + return 1; + return 0; + } + + void W_WeaponFrame() + { + vector fo, ri, up; + + if (frametime) + self.weapon_frametime = frametime; + + if (!self.weaponentity || self.health < 1) + return; // Dead player can't use weapons and injure impulse commands + + if(forbidWeaponUse()) + if(self.weaponentity.state != WS_CLEAR) + { + w_ready(); + return; + } + + if(!self.switchweapon) + { + self.weapon = 0; + self.switchingweapon = 0; + self.weaponentity.state = WS_CLEAR; + self.weaponname = ""; + //self.items &= ~IT_AMMO; + return; + } + + makevectors(self.v_angle); + fo = v_forward; // save them in case the weapon think functions change it + ri = v_right; + up = v_up; + + // Change weapon + if (self.weapon != self.switchweapon) + { + if (self.weaponentity.state == WS_CLEAR) + { + // end switching! + self.switchingweapon = self.switchweapon; + entity newwep = get_weaponinfo(self.switchweapon); + + // the two weapon entities will notice this has changed and update their models + self.weapon = self.switchweapon; + self.weaponname = newwep.mdl; + self.bulletcounter = 0; + //self.ammo_field = newwep.ammo_field; + WEP_ACTION(self.switchweapon, WR_SETUP); + self.weaponentity.state = WS_RAISE; + + // set our clip load to the load of the weapon we switched to, if it's reloadable + if(newwep.spawnflags & WEP_FLAG_RELOADABLE && newwep.reloading_ammo) // prevent accessing undefined cvars + { + self.clip_load = self.(weapon_load[self.switchweapon]); + self.clip_size = newwep.reloading_ammo; + } + else + self.clip_load = self.clip_size = 0; + + weapon_thinkf(WFRAME_IDLE, newwep.switchdelay_raise, w_ready); + } + else if (self.weaponentity.state == WS_DROP) + { + // in dropping phase we can switch at any time + self.switchingweapon = self.switchweapon; + } + else if (self.weaponentity.state == WS_READY) + { + // start switching! + self.switchingweapon = self.switchweapon; + entity oldwep = get_weaponinfo(self.weapon); + + // set up weapon switch think in the future, and start drop anim + #ifndef INDEPENDENT_ATTACK_FINISHED + if(ATTACK_FINISHED(self) <= time + self.weapon_frametime * 0.5) + { + #endif + sound(self, CH_WEAPON_SINGLE, "weapons/weapon_switch.wav", VOL_BASE, ATTN_NORM); + self.weaponentity.state = WS_DROP; + weapon_thinkf(WFRAME_DONTCHANGE, oldwep.switchdelay_drop, w_clear); + #ifndef INDEPENDENT_ATTACK_FINISHED + } + #endif + } + } + + // LordHavoc: network timing test code + //if (self.button0) + // print(ftos(frametime), " ", ftos(time), " >= ", ftos(ATTACK_FINISHED(self)), " >= ", ftos(self.weapon_nextthink), "\n"); + + float w; + w = self.weapon; + + // call the think code which may fire the weapon + // and do so multiple times to resolve framerate dependency issues if the + // server framerate is very low and the weapon fire rate very high + float c; + c = 0; + while (c < W_TICSPERFRAME) + { + c = c + 1; + if(w && !(self.weapons & WepSet_FromWeapon(w))) + { + if(self.weapon == self.switchweapon) + W_SwitchWeapon_Force(self, w_getbestweapon(self)); + w = 0; + } + + v_forward = fo; + v_right = ri; + v_up = up; + + if(w) + WEP_ACTION(self.weapon, WR_THINK); + else + WEP_ACTION(self.weapon, WR_GONETHINK); + + if (time + self.weapon_frametime * 0.5 >= self.weapon_nextthink) + { + if(self.weapon_think) + { + v_forward = fo; + v_right = ri; + v_up = up; + self.weapon_think(); + } + else + bprint("\{1}^1ERROR: undefined weapon think function for ", self.netname, "\n"); + } + } + } + + void W_AttachToShotorg(entity flash, vector offset) + { + entity xflash; + flash.owner = self; + flash.angles_z = random() * 360; + + if(gettagindex(self.weaponentity, "shot")) + setattachment(flash, self.weaponentity, "shot"); + else + setattachment(flash, self.weaponentity, "tag_shot"); + setorigin(flash, offset); + + xflash = spawn(); + copyentity(flash, xflash); + + flash.viewmodelforclient = self; + + if(self.weaponentity.oldorigin_x > 0) + { + setattachment(xflash, self.exteriorweaponentity, ""); + setorigin(xflash, self.weaponentity.oldorigin + offset); + } + else + { + if(gettagindex(self.exteriorweaponentity, "shot")) + setattachment(xflash, self.exteriorweaponentity, "shot"); + else + setattachment(xflash, self.exteriorweaponentity, "tag_shot"); + setorigin(xflash, offset); + } + } + + void W_DecreaseAmmo(float ammo_use) + { + entity wep = get_weaponinfo(self.weapon); + ++ if(cvar("g_overkill")) ++ if(self.ok_use_ammocharge) ++ { ++ ok_DecreaseCharge(self, self.weapon); ++ return; // TODO ++ } ++ + if((self.items & IT_UNLIMITED_WEAPON_AMMO) && !wep.reloading_ammo) + return; + + // if this weapon is reloadable, decrease its load. Else decrease the player's ammo + if(wep.reloading_ammo) + { + self.clip_load -= ammo_use; + self.(weapon_load[self.weapon]) = self.clip_load; + } + else if(wep.ammo_field != ammo_none) + { + self.(wep.ammo_field) -= ammo_use; + if(self.(wep.ammo_field) < 0) + { + backtrace(sprintf( + "W_DecreaseAmmo(%.2f): '%s' subtracted too much %s from '%s', resulting with '%.2f' left... " + "Please notify Samual immediately with a copy of this backtrace!\n", + ammo_use, + wep.netname, + GetAmmoPicture(wep.ammo_field), + self.netname, + self.(wep.ammo_field) + )); + } + } + } + + // weapon reloading code + + .float reload_ammo_amount, reload_ammo_min, reload_time; + .float reload_complain; + .string reload_sound; + + void W_ReloadedAndReady() + { + // finish the reloading process, and do the ammo transfer + + self.clip_load = self.old_clip_load; // restore the ammo counter, in case we still had ammo in the weapon before reloading + + // if the gun uses no ammo, max out weapon load, else decrease ammo as we increase weapon load + if(!self.reload_ammo_min || self.items & IT_UNLIMITED_WEAPON_AMMO || self.ammo_field == ammo_none) + self.clip_load = self.reload_ammo_amount; + else + { + while(self.clip_load < self.reload_ammo_amount && self.(self.ammo_field)) // make sure we don't add more ammo than we have + { + self.clip_load += 1; + self.(self.ammo_field) -= 1; + } + } + self.(weapon_load[self.weapon]) = self.clip_load; + + // do not set ATTACK_FINISHED in reload code any more. This causes annoying delays if eg: You start reloading a weapon, + // then quickly switch to another weapon and back. Reloading is canceled, but the reload delay is still there, + // so your weapon is disabled for a few seconds without reason + + //ATTACK_FINISHED(self) -= self.reload_time - 1; + + w_ready(); + } + + void W_Reload(float sent_ammo_min, string sent_sound) + { + // set global values to work with + entity e; + e = get_weaponinfo(self.weapon); + ++ if(cvar("g_overkill")) ++ if(self.ok_use_ammocharge) ++ return; // TODO ++ + self.reload_ammo_min = sent_ammo_min; + self.reload_ammo_amount = e.reloading_ammo;; + self.reload_time = e.reloading_time; + self.reload_sound = sent_sound; + + // don't reload weapons that don't have the RELOADABLE flag + if (!(e.spawnflags & WEP_FLAG_RELOADABLE)) + { + dprint("Warning: Attempted to reload a weapon that does not have the WEP_FLAG_RELOADABLE flag. Fix your code!\n"); + return; + } + + // return if reloading is disabled for this weapon + if(!self.reload_ammo_amount) + return; + + // our weapon is fully loaded, no need to reload + if (self.clip_load >= self.reload_ammo_amount) + return; + + // no ammo, so nothing to load + if(self.ammo_field != ammo_none) + if(!self.(self.ammo_field) && self.reload_ammo_min) + if (!(self.items & IT_UNLIMITED_WEAPON_AMMO)) + { + if(IS_REAL_CLIENT(self) && self.reload_complain < time) + { + play2(self, "weapons/unavailable.wav"); + sprint(self, strcat("You don't have enough ammo to reload the ^2", WEP_NAME(self.weapon), "\n")); + self.reload_complain = time + 1; + } + // switch away if the amount of ammo is not enough to keep using this weapon + if (!(WEP_ACTION(self.weapon, WR_CHECKAMMO1) + WEP_ACTION(self.weapon, WR_CHECKAMMO2))) + { + self.clip_load = -1; // reload later + W_SwitchToOtherWeapon(self); + } + return; + } + + if (self.weaponentity) + { + if (self.weaponentity.wframe == WFRAME_RELOAD) + return; + + // allow switching away while reloading, but this will cause a new reload! + self.weaponentity.state = WS_READY; + } + + // now begin the reloading process + + sound(self, CH_WEAPON_SINGLE, self.reload_sound, VOL_BASE, ATTEN_NORM); + + // do not set ATTACK_FINISHED in reload code any more. This causes annoying delays if eg: You start reloading a weapon, + // then quickly switch to another weapon and back. Reloading is canceled, but the reload delay is still there, + // so your weapon is disabled for a few seconds without reason + + //ATTACK_FINISHED(self) = max(time, ATTACK_FINISHED(self)) + self.reload_time + 1; + + weapon_thinkf(WFRAME_RELOAD, self.reload_time, W_ReloadedAndReady); + + if(self.clip_load < 0) + self.clip_load = 0; + self.old_clip_load = self.clip_load; + self.clip_load = self.(weapon_load[self.weapon]) = -1; + } + + entity weapon_dropevent_item; + void W_DropEvent(float event, entity player, float weapon_type, entity weapon_item) + { + entity oldself = self; + self = player; + weapon_dropevent_item = weapon_item; + WEP_ACTION(weapon_type, event); + self = oldself; + }