set g_balance_falldamage_minspeed 1400
set g_balance_falldamage_factor 0.15
set g_balance_falldamage_maxdamage 25
+set g_balance_damagepush_speedfactor 0
// }}}
// {{{ powerups
set g_balance_fireball_reload_time 2
// }}}
// {{{ seeker
+set g_balance_seeker_type 0 // 0 = old seeker, 1 = new seeker. THIS IS A TEMPORARY CVAR FOR TESTING, will be removed later.
set g_balance_seeker_flac_ammo 0.5
set g_balance_seeker_flac_animtime 0.1
set g_balance_seeker_flac_damage 15
set g_balance_seeker_tag_refire 0.7
set g_balance_seeker_tag_speed 9000
set g_balance_seeker_tag_spread 0
+set g_balance_seeker_tag_tracker_lifetime 10
set g_balance_seeker_reload_ammo 0 //default: 15
set g_balance_seeker_reload_time 2
// End new seeker
set g_balance_falldamage_minspeed 1400
set g_balance_falldamage_factor 0.15
set g_balance_falldamage_maxdamage 25
+set g_balance_damagepush_speedfactor 0
// }}}
// {{{ powerups
set g_balance_fireball_reload_time 2
// }}}
// {{{ seeker
+set g_balance_seeker_type 0 // 0 = old seeker, 1 = new seeker. THIS IS A TEMPORARY CVAR FOR TESTING, will be removed later.
set g_balance_seeker_flac_ammo 0.5
set g_balance_seeker_flac_animtime 0.1
set g_balance_seeker_flac_damage 15
set g_balance_seeker_tag_refire 0.7
set g_balance_seeker_tag_speed 9000
set g_balance_seeker_tag_spread 0
+set g_balance_seeker_tag_tracker_lifetime 10
set g_balance_seeker_reload_ammo 0 //default: 15
set g_balance_seeker_reload_time 2
// End new seeker
set g_balance_falldamage_minspeed 1000
set g_balance_falldamage_factor 0.20
set g_balance_falldamage_maxdamage 15
+set g_balance_damagepush_speedfactor 0
// }}}
// {{{ powerups
// {{{ uzi
set g_balance_uzi_mode 1 // Activates varible spread for sustained & burst mode secondary
set g_balance_uzi_spread_min 0.02
-set g_balance_uzi_spread_max 0.1
+set g_balance_uzi_spread_max 0.06
set g_balance_uzi_spread_add 0.012
set g_balance_uzi_burst 3 // # of bullets in a burst (if set to 2 or more)
set g_balance_uzi_speed 18000
set g_balance_uzi_bulletconstant 115 // 13.1qu
-set g_balance_uzi_reload_ammo 40 //default: 30
+set g_balance_uzi_reload_ammo 60 //default: 30
set g_balance_uzi_reload_time 2
// }}}
// {{{ mortar
set g_balance_minelayer_animtime 0.4
set g_balance_minelayer_ammo 4
set g_balance_minelayer_health 15
-set g_balance_minelayer_limit 4 // 0 disables the limit
-set g_balance_minelayer_protection 1 // don't explode if the mine would hurt the owner or a team mate
+set g_balance_minelayer_limit 3 // 0 disables the limit
+set g_balance_minelayer_protection 0 // don't explode if the mine would hurt the owner or a team mate
set g_balance_minelayer_damageforcescale 0
set g_balance_minelayer_detonatedelay -1 // positive: timer till detonation is allowed, negative: "security device" that prevents ANY remote detonation if it could hurt its owner, zero: detonatable at any time
set g_balance_minelayer_time 0.5
set g_balance_electro_primary_falloff_mindist 255 // 0.3 * radius
set g_balance_electro_primary_falloff_maxdist 850
set g_balance_electro_primary_falloff_halflifedist 425
-set g_balance_electro_secondary_damage 45
-set g_balance_electro_secondary_edgedamage 22.5
+set g_balance_electro_secondary_damage 40
+set g_balance_electro_secondary_edgedamage 20
set g_balance_electro_secondary_force 200
set g_balance_electro_secondary_radius 150
set g_balance_electro_secondary_speed 900
set g_balance_electro_secondary_bouncestop 0.075
set g_balance_electro_combo_damage 40
set g_balance_electro_combo_edgedamage 20
-set g_balance_electro_combo_force 200
-set g_balance_electro_combo_radius 250
-set g_balance_electro_combo_comboradius 0
+set g_balance_electro_combo_force 120
+set g_balance_electro_combo_radius 175
+set g_balance_electro_combo_comboradius 250
set g_balance_electro_combo_speed 2000
set g_balance_electro_reload_ammo 0 //default: 20
set g_balance_electro_reload_time 2
set g_balance_crylink_secondary 1
set g_balance_crylink_secondary_damage 5
-set g_balance_crylink_secondary_edgedamage 5
+set g_balance_crylink_secondary_edgedamage 0
set g_balance_crylink_secondary_force -40
-set g_balance_crylink_secondary_radius 50
+set g_balance_crylink_secondary_radius 70
set g_balance_crylink_secondary_speed 2000
set g_balance_crylink_secondary_spread 0.02
set g_balance_crylink_secondary_shots 3
set g_balance_crylink_secondary_refire 0.2
set g_balance_crylink_secondary_animtime 0.2
set g_balance_crylink_secondary_ammo 2
-set g_balance_crylink_secondary_bouncedamagefactor 0.25
+set g_balance_crylink_secondary_bouncedamagefactor 0.5
set g_balance_crylink_secondary_joindelay 0
set g_balance_crylink_secondary_joinspread 0
set g_balance_crylink_secondary_jointime 0
set g_balance_minstanex_reload_ammo 0 //default: 50
set g_balance_minstanex_reload_time 2
// }}}
-// {{{ hagar
+// {{{ hagar // TO BE REMOVED
set g_balance_hagar_primary_damage 30
set g_balance_hagar_primary_edgedamage 15
set g_balance_hagar_primary_force 50
set g_balance_rocketlauncher_animtime 0.3
set g_balance_rocketlauncher_ammo 4
set g_balance_rocketlauncher_health 0 // 30 // 5 hitpoints above maximum laser value -- this way lasers can't blow it up, but grenadelauncher still can most the time.
-set g_balance_rocketlauncher_damageforcescale 1
+set g_balance_rocketlauncher_damageforcescale 1 // low damage force scale so that it can still be affected by other hits, but not so much that it does a 90 degree turn
set g_balance_rocketlauncher_detonatedelay 0.05 // positive: timer till detonation is allowed, negative: "security device" that prevents ANY remote detonation if it could hurt its owner, zero: detonatable at any time
set g_balance_rocketlauncher_guiderate 110 // max degrees per second
set g_balance_rocketlauncher_guideratedelay 0.01 // immediate
set g_balance_hook_secondary_power 3 // effect behaves like a square function
set g_balance_hook_secondary_duration 1.5 // effect runs for three seconds
// }}}
-// {{{ hlac
+// {{{ hlac // TO BE REMOVED
set g_balance_hlac_primary_spread_min 0.01
set g_balance_hlac_primary_spread_max 0.25
set g_balance_hlac_primary_spread_add 0.0045
set g_balance_hlac_primary_spread_crouchmod 0.25
set g_balance_hlac_primary_damage 18
-set g_balance_hlac_primary_edgedamage 10
-set g_balance_hlac_primary_force 100
+set g_balance_hlac_primary_edgedamage 9
+set g_balance_hlac_primary_force 90
set g_balance_hlac_primary_radius 70
-set g_balance_hlac_primary_speed 12000
+set g_balance_hlac_primary_speed 9000
set g_balance_hlac_primary_lifetime 5
set g_balance_hlac_primary_refire 0.15
set g_balance_hlac_secondary_spread 0.15
set g_balance_hlac_secondary_spread_crouchmod 0.5
-set g_balance_hlac_secondary_damage 16
-set g_balance_hlac_secondary_edgedamage 10
-set g_balance_hlac_secondary_force 100
+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_radius 70
set g_balance_hlac_secondary_speed 9000
set g_balance_hlac_secondary_lifetime 5
// {{{ sniperrifle
set g_balance_sniperrifle_bursttime 0
set g_balance_sniperrifle_primary_tracer 1
-set g_balance_sniperrifle_primary_damage 50
+set g_balance_sniperrifle_primary_damage 60
set g_balance_sniperrifle_primary_headshotaddeddamage 50
set g_balance_sniperrifle_primary_spread 0
set g_balance_sniperrifle_primary_force 100
set g_balance_sniperrifle_primary_speed 40000
set g_balance_sniperrifle_primary_lifetime 5
-set g_balance_sniperrifle_primary_refire 1.25
-set g_balance_sniperrifle_primary_animtime 0.5
+set g_balance_sniperrifle_primary_refire 1.5
+set g_balance_sniperrifle_primary_animtime 0.7
set g_balance_sniperrifle_primary_ammo 10
set g_balance_sniperrifle_primary_bulletconstant 110 // 62.2qu
set g_balance_sniperrifle_primary_burstcost 0
set g_balance_tuba_radius 200
set g_balance_tuba_force 40
// }}}
-// {{{ fireball
-set g_balance_fireball_primary_ammo 40
-set g_balance_fireball_primary_animtime 0.15
+// {{{ fireball // this is a superweapon -- lets make it behave as one.
+set g_balance_fireball_primary_ammo 20
+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 4
-set g_balance_fireball_primary_edgedamage 0
-set g_balance_fireball_primary_force 700
-set g_balance_fireball_primary_health 50
+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 5
+set g_balance_fireball_primary_refire 2
set g_balance_fireball_primary_refire2 0
-set g_balance_fireball_primary_speed 650
+set g_balance_fireball_primary_speed 1200
set g_balance_fireball_primary_spread 0
set g_balance_fireball_secondary_ammo 5
set g_balance_fireball_secondary_animtime 0.3
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 2
+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_reload_ammo 0 //default: 60
+set g_balance_fireball_reload_ammo 0 //default: 100
set g_balance_fireball_reload_time 2
// }}}
// {{{ seeker
+set g_balance_seeker_type 1 // 0 = old seeker, 1 = new seeker. THIS IS A TEMPORARY CVAR FOR TESTING, will be removed later.
set g_balance_seeker_flac_ammo 0.5
set g_balance_seeker_flac_animtime 0.1
-set g_balance_seeker_flac_damage 16
-set g_balance_seeker_flac_edgedamage 8
+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.05
-set g_balance_seeker_flac_lifetime_rand 0.01
-set g_balance_seeker_flac_radius 70
-set g_balance_seeker_flac_refire 0.15
+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 0
+set g_balance_seeker_flac_speed_up 1000
set g_balance_seeker_flac_speed_z 0
-set g_balance_seeker_flac_spread 0.05
-set g_balance_seeker_missile_accel 3000
+set g_balance_seeker_flac_spread 0.4
+set g_balance_seeker_tag_ammo 1
+set g_balance_seeker_tag_animtime 0.2
+set g_balance_seeker_tag_damageforcescale 0
+set g_balance_seeker_tag_health 0
+set g_balance_seeker_tag_lifetime 15
+set g_balance_seeker_tag_refire 0.75 // LOG: 0.7 -> 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_missile_accel 1500
set g_balance_seeker_missile_ammo 2
-set g_balance_seeker_missile_animtime 0.3
-set g_balance_seeker_missile_count 4
-set g_balance_seeker_missile_damage 40
+set g_balance_seeker_missile_animtime 0.2
+set g_balance_seeker_missile_count 3 // LOG: 8 -> 3
+set g_balance_seeker_missile_damage 16 // LOG: 15 -> 30
set g_balance_seeker_missile_damageforcescale 4
set g_balance_seeker_missile_decel 6000
set g_balance_seeker_missile_delay 0.25
-set g_balance_seeker_missile_edgedamage 10
-set g_balance_seeker_missile_force 250
-set g_balance_seeker_missile_health 5
+set g_balance_seeker_missile_edgedamage 8
+set g_balance_seeker_missile_force 50 // LOG: 100 -> 150
+set g_balance_seeker_missile_health 1
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_radius 70
+set g_balance_seeker_missile_refire 0.25
+set g_balance_seeker_missile_smart 0
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_up 300
+set g_balance_seeker_missile_speed 1500
+set g_balance_seeker_missile_speed_up 0
set g_balance_seeker_missile_speed_z 0
-set g_balance_seeker_missile_speed_max 1250
+set g_balance_seeker_missile_speed_max 2000 // LOG: 1400 -> 1300
set g_balance_seeker_missile_spread 0
-set g_balance_seeker_missile_turnrate 0.65
-set g_balance_seeker_tag_ammo 1
-set g_balance_seeker_tag_animtime 0.3
-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.7
-set g_balance_seeker_tag_speed 9000
-set g_balance_seeker_tag_spread 0
+set g_balance_seeker_missile_turnrate 0.2
set g_balance_seeker_reload_ammo 0 //default: 15
set g_balance_seeker_reload_time 2
// End new seeker
set g_balance_falldamage_minspeed 800
set g_balance_falldamage_factor 0.20
set g_balance_falldamage_maxdamage 15
+set g_balance_damagepush_speedfactor 2.5
// }}}
// {{{ powerups
set g_balance_fireball_reload_time 2
// }}}
// {{{ seeker
+set g_balance_seeker_type 0 // 0 = old seeker, 1 = new seeker. THIS IS A TEMPORARY CVAR FOR TESTING, will be removed later.
set g_balance_seeker_flac_ammo 0.5
set g_balance_seeker_flac_animtime 0.1
set g_balance_seeker_flac_damage 15
set g_balance_seeker_tag_refire 0.75 // LOG: 0.7 -> 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_reload_ammo 0 //default: 15
set g_balance_seeker_reload_time 2
// End new seeker
set g_balance_falldamage_minspeed 800
set g_balance_falldamage_factor 0.02 // maxspeed = minspeed + maxdamage / factor = 4550
set g_balance_falldamage_maxdamage 75
+set g_balance_damagepush_speedfactor 0
// }}}
// {{{ powerups
set g_balance_fireball_reload_time 2
// }}}
// {{{ seeker
+set g_balance_seeker_type 0 // 0 = old seeker, 1 = new seeker. THIS IS A TEMPORARY CVAR FOR TESTING, will be removed later.
set g_balance_seeker_flac_ammo 0.5
set g_balance_seeker_flac_animtime 0.1
set g_balance_seeker_flac_damage 15
set g_balance_seeker_tag_refire 1
set g_balance_seeker_tag_speed 9000
set g_balance_seeker_tag_spread 0
+set g_balance_seeker_tag_tracker_lifetime 10
set g_balance_seeker_reload_ammo 0 //default: 15
set g_balance_seeker_reload_time 2
// End new seeker
seta crosshair_ring_minelayer_alpha 0.15
seta crosshair_ring_reload 1 "main cvar to enable or disable ammo crosshair rings"
-seta crosshair_ring_reload_inner 1 "allow switching to inner ring when the main ring is already used by the weapon"
seta crosshair_ring_reload_size 2.5 "reload ring size"
seta crosshair_ring_reload_alpha 0.2 "reload ring alpha"
// enable menu syncing
alias menu_sync "menu_cmd sync"
alias scoreboard_columns_set "cl_cmd scoreboard_columns_set $*"
+
+// BALANCE TESTING (TEMPORARY, PLEASE REMOVE LATER)
+alias balanceSamual "exec balanceSamual.cfg; restart"
+alias balanceFruitieX "exec balanceXonotic.cfg; restart"
+bind f7 balanceSamual
+bind f8 balanceFruitieX
velocitymultiplier 15
airfriction -1
rotate 0 360 -180 180
+
+// seeker missile trail
+effect TR_SEEKER
+trailspacing 10
+type smoke
+notunderwater
+color 0x000000 0x666666
+tex 0 8
+size 2 2
+bounce 1
+sizeincrease 11
+alpha 200 300 200
+lightradius 100
+lighttime 0
+lightcolor 6 3 1
+originjitter 2 2 2
+velocityjitter 3 3 3
+velocitymultiplier -0.02
+rotate -180 180 -30 30
+//gravity -0.11
+// fire
+effect TR_SEEKER
+trailspacing 4
+type static
+color 0xffdf72 0x811200
+tex 48 55
+size 5 5
+sizeincrease -30
+alpha 100 144 588
+airfriction 8
+velocityjitter 32 32 32
+velocitymultiplier -1.5
+// bubbles
+effect TR_SEEKER
+type bubble
+underwater
+trailspacing 16
+tex 62 62
+size 1 2
+alpha 256 256 256
+gravity -0.125
+bounce 1.5
+liquidfriction 4
+velocityjitter 16 16 16
+velocitymultiplier -0.31
+rotate 0 0 0 0
+// sparks
+effect TR_SEEKER
+notunderwater
+trailspacing 20
+type spark
+tex 40 40
+color 0xFFFDD9 0xFFFDD9
+size 0.5 0.5
+alpha 444 512 1866
+stretchfactor 0.3
+//gravity 1
+bounce 1
+//velocityoffset 0 0 15
+airfriction 5
+originjitter 1 1 1
+velocityjitter 100 100 100
+velocitymultiplier -0.31
seta hud_skin "luminos"
-seta hud_panel_bg "border_default"
-seta hud_panel_bg_color "1 0.4375 0"
-seta hud_panel_bg_color_team "0"
+seta hud_panel_bg "0"
+seta hud_panel_bg_color "0.6875 0.84375 1"
+seta hud_panel_bg_color_team "1"
seta hud_panel_bg_alpha "1"
seta hud_panel_bg_border "8"
seta hud_panel_bg_padding "2"
seta hud_panel_fg_alpha "1"
-seta hud_dock "dock"
-seta hud_dock_color "0 0.1875 0.40625"
-seta hud_dock_color_team "0.700000"
+seta hud_dock "0"
+seta hud_dock_color "0 0.449576 0.860796"
+seta hud_dock_color_team "1"
seta hud_dock_alpha "1"
seta hud_progressbar_alpha "0.500000"
seta hud_progressbar_fuel_color "0.6 0.6 0"
seta hud_progressbar_nexball_color "0.7 0.1 0"
-seta _hud_panelorder "10 9 6 8 14 5 0 4 13 2 7 1 3 11 12 "
+seta _hud_panelorder "12 9 10 5 6 14 0 7 4 11 2 1 3 8 13 "
seta hud_configure_grid "1"
seta hud_configure_grid_xsize "0.010000"
seta scr_centerpos "0.25"
seta hud_panel_weapons 1
-seta hud_panel_weapons_pos "0.920000 0.090000"
-seta hud_panel_weapons_size "0.060000 0.630000"
-seta hud_panel_weapons_bg ""
+seta hud_panel_weapons_pos "0.940000 0.180000"
+seta hud_panel_weapons_size "0.060000 0.610000"
+seta hud_panel_weapons_bg "border_small_weapons"
seta hud_panel_weapons_bg_color ""
seta hud_panel_weapons_bg_color_team ""
seta hud_panel_weapons_bg_alpha ""
seta hud_panel_weapons_ammo_alpha "1"
seta hud_panel_weapons_aspect "2"
seta hud_panel_weapons_timeout "3"
-seta hud_panel_weapons_timeout_effect "1"
+seta hud_panel_weapons_timeout_effect "2"
seta hud_panel_ammo 1
-seta hud_panel_ammo_pos "0.190000 0.920000"
-seta hud_panel_ammo_size "0.120000 0.070000"
+seta hud_panel_ammo_pos "0.330000 0.960000"
+seta hud_panel_ammo_size "0.350000 0.040000"
seta hud_panel_ammo_bg ""
seta hud_panel_ammo_bg_color ""
seta hud_panel_ammo_bg_color_team ""
seta hud_panel_ammo_onlycurrent "0"
seta hud_panel_ammo_iconalign "0"
seta hud_panel_ammo_progressbar "0"
-seta hud_panel_ammo_progressbar_xoffset "0"
seta hud_panel_ammo_progressbar_name "progressbar"
+seta hud_panel_ammo_progressbar_xoffset "0"
seta hud_panel_ammo_text "1"
seta hud_panel_powerups 1
-seta hud_panel_powerups_pos "0.660000 0.940000"
-seta hud_panel_powerups_size "0.330000 0.060000"
-seta hud_panel_powerups_bg "0"
+seta hud_panel_powerups_pos "0.360000 0.850000"
+seta hud_panel_powerups_size "0.290000 0.030000"
+seta hud_panel_powerups_bg "border_small_powerups"
seta hud_panel_powerups_bg_color ""
seta hud_panel_powerups_bg_color_team ""
seta hud_panel_powerups_bg_alpha ""
seta hud_panel_powerups_bg_border ""
-seta hud_panel_powerups_bg_padding ""
-seta hud_panel_powerups_flip "1"
+seta hud_panel_powerups_bg_padding "0"
+seta hud_panel_powerups_flip "0"
seta hud_panel_powerups_iconalign "4"
seta hud_panel_powerups_baralign "4"
seta hud_panel_powerups_progressbar "1"
seta hud_panel_powerups_text "1"
seta hud_panel_healtharmor 1
-seta hud_panel_healtharmor_pos "0.330000 0.920000"
-seta hud_panel_healtharmor_size "0.310000 0.070000"
-seta hud_panel_healtharmor_bg ""
+seta hud_panel_healtharmor_pos "0.320000 0.910000"
+seta hud_panel_healtharmor_size "0.370000 0.060000"
+seta hud_panel_healtharmor_bg "border_small_healtharmor"
seta hud_panel_healtharmor_bg_color ""
seta hud_panel_healtharmor_bg_color_team ""
seta hud_panel_healtharmor_bg_alpha ""
seta hud_panel_healtharmor_text "1"
seta hud_panel_notify 1
-seta hud_panel_notify_pos "0.660000 0.730000"
-seta hud_panel_notify_size "0.320000 0.190000"
+seta hud_panel_notify_pos "0.710000 0.800000"
+seta hud_panel_notify_size "0.290000 0.190000"
seta hud_panel_notify_bg "0"
seta hud_panel_notify_bg_color ""
seta hud_panel_notify_bg_color_team ""
seta hud_panel_notify_print "1"
seta hud_panel_timer 1
-seta hud_panel_timer_pos "0.870000 0"
-seta hud_panel_timer_size "0.130000 0.060000"
-seta hud_panel_timer_bg "0"
+seta hud_panel_timer_pos "0.800000 0.040000"
+seta hud_panel_timer_size "0.070000 0.040000"
+seta hud_panel_timer_bg "border_small_timer"
seta hud_panel_timer_bg_color ""
seta hud_panel_timer_bg_color_team ""
seta hud_panel_timer_bg_alpha ""
seta hud_panel_timer_bg_border ""
seta hud_panel_timer_bg_padding "0"
-seta hud_panel_radar 2 // enabled for keepaway and to make the HUD consistent throughout game modes
-seta hud_panel_radar_pos "0.030000 0.020000"
-seta hud_panel_radar_size "0.170000 0.220000"
-seta hud_panel_radar_bg ""
+seta hud_panel_radar 2
+seta hud_panel_radar_pos "0 0"
+seta hud_panel_radar_size "0.200000 0.240000"
+seta hud_panel_radar_bg "border_small_radar"
seta hud_panel_radar_bg_color ""
seta hud_panel_radar_bg_color_team ""
-seta hud_panel_radar_bg_alpha ""
+seta hud_panel_radar_bg_alpha "0.800000"
seta hud_panel_radar_bg_border ""
-seta hud_panel_radar_bg_padding "-3"
+seta hud_panel_radar_bg_padding "-1"
seta hud_panel_radar_foreground_alpha "0.800000"
seta hud_panel_score 1
-seta hud_panel_score_pos "0.020000 0.920000"
-seta hud_panel_score_size "0.150000 0.070000"
-seta hud_panel_score_bg ""
+seta hud_panel_score_pos "0.890000 0.030000"
+seta hud_panel_score_size "0.100000 0.050000"
+seta hud_panel_score_bg "border_small_score"
seta hud_panel_score_bg_color ""
seta hud_panel_score_bg_color_team ""
seta hud_panel_score_bg_alpha ""
seta hud_panel_score_bg_border ""
-seta hud_panel_score_bg_padding ""
+seta hud_panel_score_bg_padding "0"
seta hud_panel_racetimer 1
-seta hud_panel_racetimer_pos "0.360000 0.090000"
+seta hud_panel_racetimer_pos "0.360000 0.110000"
seta hud_panel_racetimer_size "0.280000 0.090000"
seta hud_panel_racetimer_bg "0"
seta hud_panel_racetimer_bg_color ""
seta hud_panel_racetimer_bg_padding ""
seta hud_panel_vote 1
-seta hud_panel_vote_pos "0.020000 0.650000"
-seta hud_panel_vote_size "0.230000 0.110000"
-seta hud_panel_vote_bg ""
+seta hud_panel_vote_pos "0.710000 0.660000"
+seta hud_panel_vote_size "0.210000 0.100000"
+seta hud_panel_vote_bg "border_vote"
seta hud_panel_vote_bg_color ""
seta hud_panel_vote_bg_color_team ""
seta hud_panel_vote_bg_alpha ""
seta hud_panel_vote_bg_border ""
seta hud_panel_vote_bg_padding ""
-seta hud_panel_vote_alreadyvoted_alpha "0.800000"
+seta hud_panel_vote_alreadyvoted_alpha "0.500000"
seta hud_panel_modicons 1
-seta hud_panel_modicons_pos "0.040000 0.270000"
-seta hud_panel_modicons_size "0.080000 0.200000"
-seta hud_panel_modicons_bg ""
+seta hud_panel_modicons_pos "0.410000 0"
+seta hud_panel_modicons_size "0.180000 0.080000"
+seta hud_panel_modicons_bg "border_small_modicons"
seta hud_panel_modicons_bg_color ""
seta hud_panel_modicons_bg_color_team ""
seta hud_panel_modicons_bg_alpha ""
seta hud_panel_modicons_bg_border ""
-seta hud_panel_modicons_bg_padding ""
+seta hud_panel_modicons_bg_padding "0"
seta hud_panel_pressedkeys 1
-seta hud_panel_pressedkeys_pos "0.410000 0.710000"
-seta hud_panel_pressedkeys_size "0.180000 0.130000"
+seta hud_panel_pressedkeys_pos "0.450000 0.720000"
+seta hud_panel_pressedkeys_size "0.110000 0.090000"
seta hud_panel_pressedkeys_bg "0"
seta hud_panel_pressedkeys_bg_color ""
seta hud_panel_pressedkeys_bg_color_team ""
seta hud_panel_pressedkeys_aspect "1.600000"
seta hud_panel_chat 1
-seta hud_panel_chat_pos "0.020000 0.780000"
-seta hud_panel_chat_size "0.630000 0.110000"
+seta hud_panel_chat_pos "0.010000 0.700000"
+seta hud_panel_chat_size "0.460000 0.190000"
seta hud_panel_chat_bg "0"
seta hud_panel_chat_bg_color ""
seta hud_panel_chat_bg_color_team ""
seta hud_panel_chat_bg_padding ""
seta hud_panel_engineinfo 0
-seta hud_panel_engineinfo_pos "0.910000 0.970000"
-seta hud_panel_engineinfo_size "0.090000 0.030000"
+seta hud_panel_engineinfo_pos "0.930000 0.970000"
+seta hud_panel_engineinfo_size "0.070000 0.030000"
seta hud_panel_engineinfo_bg "0"
seta hud_panel_engineinfo_bg_color ""
seta hud_panel_engineinfo_bg_color_team ""
seta hud_panel_engineinfo_bg_padding ""
seta hud_panel_infomessages 1
-seta hud_panel_infomessages_pos "0.510000 0"
-seta hud_panel_infomessages_size "0.340000 0.090000"
+seta hud_panel_infomessages_pos "0.720000 0.100000"
+seta hud_panel_infomessages_size "0.280000 0.080000"
seta hud_panel_infomessages_bg "0"
seta hud_panel_infomessages_bg_color ""
seta hud_panel_infomessages_bg_color_team ""
--- /dev/null
+seta hud_skin "luminos"
+seta hud_panel_bg "border_default"
+seta hud_panel_bg_color "1 0.4375 0"
+seta hud_panel_bg_color_team "0"
+seta hud_panel_bg_alpha "1"
+seta hud_panel_bg_border "8"
+seta hud_panel_bg_padding "2"
+seta hud_panel_fg_alpha "1"
+
+seta hud_dock "dock"
+seta hud_dock_color "0 0.1875 0.40625"
+seta hud_dock_color_team "0.700000"
+seta hud_dock_alpha "1"
+
+seta hud_progressbar_alpha "0.500000"
+seta hud_progressbar_strength_color "0 0 0.6"
+seta hud_progressbar_shield_color "0.6 0 0.6"
+seta hud_progressbar_health_color "0.6 0 0"
+seta hud_progressbar_armor_color "0 0.6 0"
+seta hud_progressbar_fuel_color "0.6 0.6 0"
+seta hud_progressbar_nexball_color "0.7 0.1 0"
+
+seta _hud_panelorder "10 9 6 8 14 5 0 4 13 2 7 1 3 11 12 "
+
+seta hud_configure_grid "1"
+seta hud_configure_grid_xsize "0.010000"
+seta hud_configure_grid_ysize "0.010000"
+
+seta scr_centerpos "0.25"
+
+seta hud_panel_weapons 1
+seta hud_panel_weapons_pos "0.920000 0.090000"
+seta hud_panel_weapons_size "0.060000 0.630000"
+seta hud_panel_weapons_bg ""
+seta hud_panel_weapons_bg_color ""
+seta hud_panel_weapons_bg_color_team ""
+seta hud_panel_weapons_bg_alpha ""
+seta hud_panel_weapons_bg_border ""
+seta hud_panel_weapons_bg_padding ""
+seta hud_panel_weapons_complainbubble "1"
+seta hud_panel_weapons_complainbubble_padding "-10"
+seta hud_panel_weapons_complainbubble_color_outofammo "0.8 0 0"
+seta hud_panel_weapons_complainbubble_color_donthave "0.8 0.5 0"
+seta hud_panel_weapons_complainbubble_color_unavailable "0 0.3 0.8"
+seta hud_panel_weapons_ammo_color "0 1 0"
+seta hud_panel_weapons_ammo_alpha "1"
+seta hud_panel_weapons_aspect "2"
+seta hud_panel_weapons_timeout "3"
+seta hud_panel_weapons_timeout_effect "1"
+
+seta hud_panel_ammo 1
+seta hud_panel_ammo_pos "0.190000 0.920000"
+seta hud_panel_ammo_size "0.120000 0.070000"
+seta hud_panel_ammo_bg ""
+seta hud_panel_ammo_bg_color ""
+seta hud_panel_ammo_bg_color_team ""
+seta hud_panel_ammo_bg_alpha ""
+seta hud_panel_ammo_bg_border ""
+seta hud_panel_ammo_bg_padding ""
+seta hud_panel_ammo_onlycurrent "0"
+seta hud_panel_ammo_iconalign "0"
+seta hud_panel_ammo_progressbar "0"
+seta hud_panel_ammo_progressbar_xoffset "0"
+seta hud_panel_ammo_progressbar_name "progressbar"
+seta hud_panel_ammo_text "1"
+
+seta hud_panel_powerups 1
+seta hud_panel_powerups_pos "0.660000 0.940000"
+seta hud_panel_powerups_size "0.330000 0.060000"
+seta hud_panel_powerups_bg "0"
+seta hud_panel_powerups_bg_color ""
+seta hud_panel_powerups_bg_color_team ""
+seta hud_panel_powerups_bg_alpha ""
+seta hud_panel_powerups_bg_border ""
+seta hud_panel_powerups_bg_padding ""
+seta hud_panel_powerups_flip "1"
+seta hud_panel_powerups_iconalign "4"
+seta hud_panel_powerups_baralign "4"
+seta hud_panel_powerups_progressbar "1"
+seta hud_panel_powerups_progressbar_strength "progressbar"
+seta hud_panel_powerups_progressbar_shield "progressbar"
+seta hud_panel_powerups_text "1"
+
+seta hud_panel_healtharmor 1
+seta hud_panel_healtharmor_pos "0.330000 0.920000"
+seta hud_panel_healtharmor_size "0.310000 0.070000"
+seta hud_panel_healtharmor_bg ""
+seta hud_panel_healtharmor_bg_color ""
+seta hud_panel_healtharmor_bg_color_team ""
+seta hud_panel_healtharmor_bg_alpha ""
+seta hud_panel_healtharmor_bg_border ""
+seta hud_panel_healtharmor_bg_padding ""
+seta hud_panel_healtharmor_flip "0"
+seta hud_panel_healtharmor_iconalign "4"
+seta hud_panel_healtharmor_baralign "4"
+seta hud_panel_healtharmor_progressbar "1"
+seta hud_panel_healtharmor_progressbar_health "progressbar"
+seta hud_panel_healtharmor_progressbar_armor "progressbar"
+seta hud_panel_healtharmor_text "1"
+
+seta hud_panel_notify 1
+seta hud_panel_notify_pos "0.660000 0.730000"
+seta hud_panel_notify_size "0.320000 0.190000"
+seta hud_panel_notify_bg "0"
+seta hud_panel_notify_bg_color ""
+seta hud_panel_notify_bg_color_team ""
+seta hud_panel_notify_bg_alpha ""
+seta hud_panel_notify_bg_border ""
+seta hud_panel_notify_bg_padding ""
+seta hud_panel_notify_flip "0"
+seta hud_panel_notify_fontsize "0.8"
+seta hud_panel_notify_print "1"
+
+seta hud_panel_timer 1
+seta hud_panel_timer_pos "0.870000 0"
+seta hud_panel_timer_size "0.130000 0.060000"
+seta hud_panel_timer_bg "0"
+seta hud_panel_timer_bg_color ""
+seta hud_panel_timer_bg_color_team ""
+seta hud_panel_timer_bg_alpha ""
+seta hud_panel_timer_bg_border ""
+seta hud_panel_timer_bg_padding "0"
+
+seta hud_panel_radar 2 // enabled for keepaway and to make the HUD consistent throughout game modes
+seta hud_panel_radar_pos "0.030000 0.020000"
+seta hud_panel_radar_size "0.170000 0.220000"
+seta hud_panel_radar_bg ""
+seta hud_panel_radar_bg_color ""
+seta hud_panel_radar_bg_color_team ""
+seta hud_panel_radar_bg_alpha ""
+seta hud_panel_radar_bg_border ""
+seta hud_panel_radar_bg_padding "-3"
+seta hud_panel_radar_foreground_alpha "0.800000"
+
+seta hud_panel_score 1
+seta hud_panel_score_pos "0.020000 0.920000"
+seta hud_panel_score_size "0.150000 0.070000"
+seta hud_panel_score_bg ""
+seta hud_panel_score_bg_color ""
+seta hud_panel_score_bg_color_team ""
+seta hud_panel_score_bg_alpha ""
+seta hud_panel_score_bg_border ""
+seta hud_panel_score_bg_padding ""
+
+seta hud_panel_racetimer 1
+seta hud_panel_racetimer_pos "0.360000 0.090000"
+seta hud_panel_racetimer_size "0.280000 0.090000"
+seta hud_panel_racetimer_bg "0"
+seta hud_panel_racetimer_bg_color ""
+seta hud_panel_racetimer_bg_color_team ""
+seta hud_panel_racetimer_bg_alpha ""
+seta hud_panel_racetimer_bg_border ""
+seta hud_panel_racetimer_bg_padding ""
+
+seta hud_panel_vote 1
+seta hud_panel_vote_pos "0.020000 0.650000"
+seta hud_panel_vote_size "0.230000 0.110000"
+seta hud_panel_vote_bg ""
+seta hud_panel_vote_bg_color ""
+seta hud_panel_vote_bg_color_team ""
+seta hud_panel_vote_bg_alpha ""
+seta hud_panel_vote_bg_border ""
+seta hud_panel_vote_bg_padding ""
+seta hud_panel_vote_alreadyvoted_alpha "0.800000"
+
+seta hud_panel_modicons 1
+seta hud_panel_modicons_pos "0.040000 0.270000"
+seta hud_panel_modicons_size "0.080000 0.200000"
+seta hud_panel_modicons_bg ""
+seta hud_panel_modicons_bg_color ""
+seta hud_panel_modicons_bg_color_team ""
+seta hud_panel_modicons_bg_alpha ""
+seta hud_panel_modicons_bg_border ""
+seta hud_panel_modicons_bg_padding ""
+
+seta hud_panel_pressedkeys 1
+seta hud_panel_pressedkeys_pos "0.410000 0.710000"
+seta hud_panel_pressedkeys_size "0.180000 0.130000"
+seta hud_panel_pressedkeys_bg "0"
+seta hud_panel_pressedkeys_bg_color ""
+seta hud_panel_pressedkeys_bg_color_team ""
+seta hud_panel_pressedkeys_bg_alpha ""
+seta hud_panel_pressedkeys_bg_border ""
+seta hud_panel_pressedkeys_bg_padding ""
+seta hud_panel_pressedkeys_aspect "1.600000"
+
+seta hud_panel_chat 1
+seta hud_panel_chat_pos "0.020000 0.780000"
+seta hud_panel_chat_size "0.630000 0.110000"
+seta hud_panel_chat_bg "0"
+seta hud_panel_chat_bg_color ""
+seta hud_panel_chat_bg_color_team ""
+seta hud_panel_chat_bg_alpha ""
+seta hud_panel_chat_bg_border ""
+seta hud_panel_chat_bg_padding ""
+
+seta hud_panel_engineinfo 0
+seta hud_panel_engineinfo_pos "0.910000 0.970000"
+seta hud_panel_engineinfo_size "0.090000 0.030000"
+seta hud_panel_engineinfo_bg "0"
+seta hud_panel_engineinfo_bg_color ""
+seta hud_panel_engineinfo_bg_color_team ""
+seta hud_panel_engineinfo_bg_alpha ""
+seta hud_panel_engineinfo_bg_border ""
+seta hud_panel_engineinfo_bg_padding ""
+
+seta hud_panel_infomessages 1
+seta hud_panel_infomessages_pos "0.510000 0"
+seta hud_panel_infomessages_size "0.340000 0.090000"
+seta hud_panel_infomessages_bg "0"
+seta hud_panel_infomessages_bg_color ""
+seta hud_panel_infomessages_bg_color_team ""
+seta hud_panel_infomessages_bg_alpha ""
+seta hud_panel_infomessages_bg_border ""
+seta hud_panel_infomessages_bg_padding "0"
+seta hud_panel_infomessages_flip "1"
+
+menu_sync
sprite item-jetpack "Jet Pack" 808080 000000 0.5 808080 ffff00 0.5
sprite freezetag_frozen "Frozen!" 40e6ff 000000 0.0 # bright cyan
+
+sprite tagged-target "Tagged" 80ff0f 000000 0.25 80ff0f ffff80 0.25
wcross_size = drawgetimagesize(wcross_name) * wcross_scale;
// crosshair rings for weapon stats
- if ((autocvar_crosshair_ring) || (autocvar_crosshair_ring_reload))
+ if (autocvar_crosshair_ring || autocvar_crosshair_ring_reload)
{
// declarations and stats
float ring_value, ring_scale, ring_alpha, ring_inner_value, ring_inner_alpha;
ring_inner_value = bound(0, autocvar_crosshair_ring_nex_currentcharge_scale * (nex_charge - nex_charge_movingavg), 1);
}
- ring_inner_alpha = wcross_alpha * autocvar_crosshair_ring_nex_inner_alpha;
+ ring_inner_alpha = autocvar_crosshair_ring_nex_inner_alpha;
ring_inner_rgb = eX * autocvar_crosshair_ring_nex_inner_color_red + eY * autocvar_crosshair_ring_nex_inner_color_green + eZ * autocvar_crosshair_ring_nex_inner_color_blue;
ring_inner_image = "gfx/crosshair_ring_inner.tga";
// draw the outer ring to show the current charge of the weapon
ring_value = nex_charge;
- ring_alpha = wcross_alpha * autocvar_crosshair_ring_nex_alpha;
+ ring_alpha = autocvar_crosshair_ring_nex_alpha;
ring_rgb = wcross_color;
ring_image = "gfx/crosshair_ring_nexgun.tga";
}
else if (activeweapon == WEP_MINE_LAYER && minelayer_maxmines && autocvar_crosshair_ring_minelayer)
{
ring_value = bound(0, getstati(STAT_LAYED_MINES) / minelayer_maxmines, 1); // if you later need to use the count of bullets in another place, then add a float for it. For now, no need to.
- ring_alpha = wcross_alpha * autocvar_crosshair_ring_minelayer_alpha;
+ ring_alpha = autocvar_crosshair_ring_minelayer_alpha;
ring_rgb = wcross_color;
ring_image = "gfx/crosshair_ring.tga";
}
if(autocvar_crosshair_ring_reload && weapon_clipsize) // forces there to be only an ammo ring
{
- // if the main ring is already used by another weapon, instead use the inner one for ammo.
- // inner ring is secondary anyway and doesn't matter as much as main ring, so overriding it is no issue.
- if(ring_value && autocvar_crosshair_ring_reload_inner)
- {
- ring_inner_value = bound(0, weapon_clipload / weapon_clipsize, 1);
- ring_inner_alpha = autocvar_crosshair_ring_reload_alpha;
- ring_inner_rgb = wcross_color;
- ring_inner_image = "gfx/crosshair_ring_inner.tga";
- }
- else
- {
- ring_value = bound(0, weapon_clipload / weapon_clipsize, 1);
- ring_scale = autocvar_crosshair_ring_reload_size;
- ring_alpha = autocvar_crosshair_ring_reload_alpha;
- ring_rgb = wcross_color;
+ ring_value = bound(0, weapon_clipload / weapon_clipsize, 1);
+ ring_scale = autocvar_crosshair_ring_reload_size;
+ ring_alpha = autocvar_crosshair_ring_reload_alpha;
+ ring_rgb = wcross_color;
- // Note: This is to stop Taoki from complaining that the image doesn't match all potential balances.
- // if a new image for another weapon is added, add the code (and its respective file/value) here
- if ((activeweapon == WEP_SNIPERRIFLE) && (weapon_clipsize == 80))
- ring_image = "gfx/crosshair_ring_sniperrifle.tga";
- else
- ring_image = "gfx/crosshair_ring.tga";
- }
+ // Note: This is to stop Taoki from complaining that the image doesn't match all potential balances.
+ // if a new image for another weapon is added, add the code (and its respective file/value) here
+ if ((activeweapon == WEP_SNIPERRIFLE) && (weapon_clipsize == 80))
+ ring_image = "gfx/crosshair_ring_sniperrifle.tga";
+ else
+ ring_image = "gfx/crosshair_ring.tga";
}
- if ((autocvar_crosshair_ring_inner || autocvar_crosshair_ring_reload_inner) && ring_inner_value) // lets draw a ring inside a ring so you can ring while you ring
- DrawCircleClippedPic(wcross_origin, wcross_size_x * ring_scale, ring_inner_image, ring_inner_value, ring_inner_rgb, ring_inner_alpha, DRAWFLAG_ADDITIVE);
+ if (autocvar_crosshair_ring_inner && ring_inner_value) // lets draw a ring inside a ring so you can ring while you ring
+ DrawCircleClippedPic(wcross_origin, wcross_size_x * ring_scale, ring_inner_image, ring_inner_value, ring_inner_rgb, wcross_alpha * ring_inner_alpha, DRAWFLAG_ADDITIVE);
if (ring_value)
- DrawCircleClippedPic(wcross_origin, wcross_size_x * ring_scale, ring_image, ring_value, ring_rgb, ring_alpha, DRAWFLAG_ADDITIVE);
+ DrawCircleClippedPic(wcross_origin, wcross_size_x * ring_scale, ring_image, ring_value, ring_rgb, wcross_alpha * ring_alpha, DRAWFLAG_ADDITIVE);
}
#define CROSSHAIR_DO_BLUR(M,sz,wcross_name,wcross_alpha) \
float autocvar_crosshair_ring_size;
float autocvar_crosshair_ring_reload;
float autocvar_crosshair_ring_reload_alpha;
-float autocvar_crosshair_ring_reload_inner;
float autocvar_crosshair_ring_reload_size;
float autocvar_crosshair_size;
float autocvar_ekg;
float autocvar_fov;
+float autocvar_g_balance_damagepush_speedfactor;
float autocvar_g_balance_tuba_attenuation;
float autocvar_g_balance_tuba_fadetime;
float autocvar_g_balance_tuba_volume;
if(self.damageforcescale)
if(vlen(thisforce))
{
- self.move_velocity = self.move_velocity + self.damageforcescale * thisforce;
+ self.move_velocity = self.move_velocity + damage_explosion_calcpush(self.damageforcescale * thisforce, self.move_velocity, autocvar_g_balance_damagepush_speedfactor);
self.move_flags &~= FL_ONGROUND;
}
../common/util.qh
../common/items.qh
+../common/explosion_equation.qh
../common/mapinfo.qh
../common/mapinfo.qc
../common/items.qc
../server/w_all.qc
+../common/explosion_equation.qc
../warpzonelib/anglestransform.qc
../warpzonelib/mathlib.qc
../warpzonelib/common.qc
../warpzonelib/client.qc
+
+../common/if-this-file-errors-scroll-up-and-fix-the-warnings.fteqccfail
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_ROCKET"); break;
- case PROJECTILE_SEEKER: setmodel(self, "models/tagrocket.md3"); self.scale = 2; 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;
default:
error("Received invalid CSQC projectile, can't work with this!");
break;
self.maxs = '4 4 4';
break;
case PROJECTILE_TAG:
- loopsound(self, CHAN_PROJECTILE, "weapons/tag_rocket_fly.wav", VOL_BASE, ATTN_NORM);
self.mins = '-2 -2 -2';
self.maxs = '2 2 2';
break;
self.maxs = '2 2 2';
break;
case PROJECTILE_SEEKER:
+ loopsound(self, CHAN_PROJECTILE, "weapons/tag_rocket_fly.wav", VOL_BASE, ATTN_NORM);
self.mins = '-4 -4 -4';
self.maxs = '4 4 4';
break;
--- /dev/null
+float explosion_calcpush_getmultiplier(vector explosion_v, vector target_v)
+{
+ float a;
+ a = explosion_v * (explosion_v - target_v);
+
+ if(a <= 0)
+ // target is too fast to be hittable by this
+ return 0;
+
+ a /= (explosion_v * explosion_v);
+ // we know we can divide by this, or above a would be == 0
+
+ return a;
+}
+
+#if 0
+vector explosion_calcpush(vector explosion_v, float explosion_m, vector target_v, float target_m, float elasticity)
+{
+ // solution of the equations:
+ // v' = v + a vp // central hit
+ // m*v' + mp*vp' = m*v + mp*vp // conservation of momentum
+ // m*v'^2 + mp*vp'^2 = m*v^2 + mp*vp^2 // conservation of energy (ELASTIC hit)
+ // -> a = 0 // case 1: did not hit
+ // -> a = 2*mp*(vp^2 - vp.v) / ((m+mp) * vp^2) // case 2: did hit
+ // // non-elastic hits are somewhere between these two
+
+ // this would be physically correct, but we don't do that
+ return explosion_v * explosion_calcpush_getmultiplier(explosion_v, target_v) * (
+ (1 + elasticity) * (
+ explosion_m
+ ) / (
+ target_m + explosion_m
+ )
+ ); // note: this factor is at least 0, at most 2
+}
+#endif
+
+// simplified formula, tuned so that if the target has velocity 0, we get exactly the original force
+vector damage_explosion_calcpush(vector explosion_f, vector target_v, float speedfactor)
+{
+ // if below 1, the formulas make no sense (and would cause superjumps)
+ if(speedfactor < 1)
+ return explosion_f;
+
+#if 0
+ float m;
+ // find m so that
+ // speedfactor * (1 + e) * m / (1 + m) == 1
+ m = 1 / ((1 + 0) * speedfactor - 1);
+ vector v;
+ v = explosion_calcpush(explosion_f * speedfactor, m, target_v, 1, 0);
+ // the factor we then get is:
+ // 1
+ print(sprintf("MASS: %f\nv: %v -> %v\nENERGY BEFORE == %f + %f = %f\nENERGY AFTER >= %f\n",
+ m,
+ target_v, target_v + v,
+ target_v * target_v, m * explosion_f * speedfactor * explosion_f * speedfactor, target_v * target_v + m * explosion_f * speedfactor * explosion_f * speedfactor,
+ (target_v + v) * (target_v + v)));
+ return v;
+#endif
+ return explosion_f * explosion_calcpush_getmultiplier(explosion_f * speedfactor, target_v);
+}
--- /dev/null
+vector damage_explosion_calcpush(vector explosion_f, vector target_v, float speedfactor);
../common/items.qc
../warpzonelib/mathlib.qc
+
+../common/if-this-file-errors-scroll-up-and-fix-the-warnings.fteqccfail
float autocvar_g_balance_curse_vulner_takedamage;
float autocvar_g_balance_curse_weak_damage;
float autocvar_g_balance_curse_weak_force;
+float autocvar_g_balance_damagepush_speedfactor;
float autocvar_g_balance_electro_combo_comboradius;
float autocvar_g_balance_electro_combo_damage;
float autocvar_g_balance_electro_combo_edgedamage;
float autocvar_g_balance_rune_vampire_absorb;
float autocvar_g_balance_rune_vampire_combo_absorb;
float autocvar_g_balance_rune_vampire_maxhealth;
+float autocvar_g_balance_seeker_type;
float autocvar_g_balance_seeker_flac_ammo;
float autocvar_g_balance_seeker_flac_animtime;
float autocvar_g_balance_seeker_flac_damage;
float autocvar_g_balance_seeker_flac_refire;
float autocvar_g_balance_seeker_missile_accel;
float autocvar_g_balance_seeker_missile_ammo;
+float autocvar_g_balance_seeker_missile_animtime;
float autocvar_g_balance_seeker_missile_count;
float autocvar_g_balance_seeker_missile_damage;
float autocvar_g_balance_seeker_missile_damageforcescale;
float autocvar_g_balance_seeker_missile_proxy_delay;
float autocvar_g_balance_seeker_missile_proxy_maxrange;
float autocvar_g_balance_seeker_missile_radius;
+float autocvar_g_balance_seeker_missile_refire;
float autocvar_g_balance_seeker_missile_smart;
float autocvar_g_balance_seeker_missile_smart_mindist;
float autocvar_g_balance_seeker_missile_smart_trace_max;
float autocvar_g_balance_seeker_tag_lifetime;
float autocvar_g_balance_seeker_tag_refire;
float autocvar_g_balance_seeker_tag_speed;
+float autocvar_g_balance_seeker_tag_tracker_lifetime;
float autocvar_g_balance_seeker_reload_ammo;
float autocvar_g_balance_seeker_reload_time;
float autocvar_g_balance_selfdamagepercent;
entity damage_targ;
entity damage_inflictor;
entity damage_attacker;
-.float prevhitsound;
void Damage (entity targ, entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
{
if (vlen(force))
if (self.classname != "player" || time >= self.spawnshieldtime || g_midair)
{
- self.velocity = self.velocity + self.damageforcescale * force;
+ self.velocity = self.velocity + damage_explosion_calcpush(self.damageforcescale * force, self.velocity, autocvar_g_balance_damagepush_speedfactor);
self.flags &~= FL_ONGROUND;
UpdateCSQCProjectile(self);
}
float to_eventlog;
float to_file;
float i;
- entity e;
to_console = autocvar_sv_logscores_console;
to_eventlog = autocvar_sv_eventlog;
db_put(d, "TR_NEHAHRASMOKE", "1"); print("effect TR_NEHAHRASMOKE is ", ftos(particleeffectnum("TR_NEHAHRASMOKE")), "\n");
db_put(d, "TR_NEXUIZPLASMA", "1"); print("effect TR_NEXUIZPLASMA is ", ftos(particleeffectnum("TR_NEXUIZPLASMA")), "\n");
db_put(d, "TR_GLOWTRAIL", "1"); print("effect TR_GLOWTRAIL is ", ftos(particleeffectnum("TR_GLOWTRAIL")), "\n");
+ db_put(d, "TR_SEEKER", "1"); print("effect TR_SEEKER is ", ftos(particleeffectnum("TR_SEEKER")), "\n");
db_put(d, "SVC_PARTICLE", "1"); print("effect SVC_PARTICLE is ", ftos(particleeffectnum("SVC_PARTICLE")), "\n");
fh = fopen("effectinfo.txt", FILE_READ);
../common/constants.qh
../common/util.qh
../common/items.qh
+../common/explosion_equation.qh
autocvars.qh
constants.qh
cheats.qc
playerstats.qc
+../common/explosion_equation.qc
+
mutators/base.qc
mutators/gamemode_keyhunt.qc
mutators/gamemode_freezetag.qc
../warpzonelib/common.qc
../warpzonelib/util_server.qc
../warpzonelib/server.qc
+
+../common/if-this-file-errors-scroll-up-and-fix-the-warnings.fteqccfail
entity winnerscorekeeper;
entity secondscorekeeper;
entity sk;
- float slots;
// format:
// gametype:P<pure>:S<slots>::plabel,plabel:tlabel,tlabel:teamid:tscore,tscore:teamid:tscore,tscore
return;
if (self.ammo_cells <= 0)
+ if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
{
if (self.health == 5)
{
void spawnfunc_weapon_minstanex (void); // defined in t_items.qc
-float minstanex_ammo;
float w_minstanex(float req)
{
float ammo_amount;
+ float minstanex_ammo;
+
+ // now multiple WR_s use this
+ if(g_minstagib)
+ minstanex_ammo = 1;
+ else
+ minstanex_ammo = autocvar_g_balance_minstanex_ammo;
+
if (req == WR_AIM)
{
if(self.ammo_cells > 0)
}
else if (req == WR_THINK)
{
- if(g_minstagib)
- minstanex_ammo = 1;
- else
- minstanex_ammo = autocvar_g_balance_minstanex_ammo;
-
// if the laser uses load, we also consider its ammo for reloading
if(autocvar_g_balance_minstanex_reload_ammo && autocvar_g_balance_minstanex_laser_ammo && self.clip_load < min(minstanex_ammo, autocvar_g_balance_minstanex_laser_ammo)) // forced reload
weapon_action(self.weapon, WR_RELOAD);
}
else if (req == WR_CHECKAMMO1)
{
- ammo_amount = self.ammo_cells >= autocvar_g_balance_minstanex_ammo;
- ammo_amount += self.weapon_load[WEP_MINSTANEX] >= autocvar_g_balance_minstanex_ammo;
+ ammo_amount = self.ammo_cells >= minstanex_ammo;
+ ammo_amount += self.weapon_load[WEP_MINSTANEX] >= minstanex_ammo;
return ammo_amount;
}
else if (req == WR_CHECKAMMO2)
{
float used_ammo;
if(autocvar_g_balance_minstanex_laser_ammo)
- used_ammo = min(autocvar_g_balance_minstanex_ammo, autocvar_g_balance_minstanex_laser_ammo);
+ used_ammo = min(minstanex_ammo, autocvar_g_balance_minstanex_laser_ammo);
else
- used_ammo = autocvar_g_balance_minstanex_ammo;
+ used_ammo = minstanex_ammo;
W_Reload(used_ammo, autocvar_g_balance_minstanex_reload_ammo, autocvar_g_balance_minstanex_reload_time, "weapons/reload.wav");
}
#ifdef SVQC
//.float proxytime; = autoswitch
//.float tl; = wait
+.entity tag_target, wps_tag_tracker;
+.float tag_time;
+// ============================
+// Begin: Missile functions, these are general functions to be manipulated by other code
+// ============================
void Seeker_Missile_Explode ()
{
self.event_damage = SUB_Null;
}
*/
-void Seeker_Fire_Missile(vector f_diff)
+void Seeker_Fire_Missile(vector f_diff, entity m_target)
{
local entity missile;
missile.event_damage = Seeker_Missile_Damage;
missile.nextthink = time;// + 0.2;// + cvar("g_balance_seeker_missile_activate_delay");
missile.cnt = time + autocvar_g_balance_seeker_missile_lifetime;
- missile.enemy = self.enemy;
+ missile.enemy = m_target;
missile.solid = SOLID_BBOX;
missile.scale = 2;
missile.takedamage = DAMAGE_YES;
missile.health = autocvar_g_balance_seeker_missile_health;
missile.damageforcescale = autocvar_g_balance_seeker_missile_damageforcescale;
- missile.projectiledeathtype = WEP_SEEKER;
//missile.think = Seeker_Missile_Animate; // csqc projectiles.
+
+ if (missile.enemy != world)
+ missile.projectiledeathtype = WEP_SEEKER | HITTYPE_SECONDARY;
+ else
+ missile.projectiledeathtype = WEP_SEEKER;
setorigin (missile, w_shotorg);
other = missile; MUTATOR_CALLHOOK(EditProjectile);
}
-void Seeker_Vollycontroler_Think()
+// ============================
+// Begin: FLAC, close range attack meant for defeating rockets which are coming at you.
+// ============================
+void Seeker_Flac_Explode ()
+{
+ self.event_damage = SUB_Null;
+
+ RadiusDamage (self, self.owner, autocvar_g_balance_seeker_flac_damage, autocvar_g_balance_seeker_flac_edgedamage, autocvar_g_balance_seeker_flac_radius, world, autocvar_g_balance_seeker_flac_force, self.projectiledeathtype, other);
+
+ remove (self);
+}
+
+void Seeker_Flac_Touch()
+{
+ PROJECTILE_TOUCH;
+
+ Seeker_Flac_Explode();
+}
+
+void Seeker_Fire_Flac()
+{
+ local entity missile;
+ vector f_diff;
+ float c;
+
+ W_DecreaseAmmo(ammo_rockets, autocvar_g_balance_seeker_flac_ammo, autocvar_g_balance_seeker_reload_ammo);
+
+ c = mod(self.bulletcounter, 4);
+ switch(c)
+ {
+ case 0:
+ f_diff = '-1.25 -3.75 0';
+ break;
+ case 1:
+ f_diff = '+1.25 -3.75 0';
+ break;
+ case 2:
+ f_diff = '-1.25 +3.75 0';
+ break;
+ case 3:
+ default:
+ f_diff = '+1.25 +3.75 0';
+ break;
+ }
+ W_SetupShot_ProjectileSize (self, '-2 -2 -2', '2 2 2', FALSE, 2, "weapons/flac_fire.wav", CHAN_WEAPON, autocvar_g_balance_seeker_flac_damage);
+ w_shotorg += f_diff;
+
+ pointparticles(particleeffectnum("hagar_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+
+ missile = spawn ();
+ missile.owner = missile.realowner = self;
+ missile.classname = "missile";
+ missile.bot_dodge = TRUE;
+ missile.bot_dodgerating = autocvar_g_balance_seeker_flac_damage;
+ missile.touch = Seeker_Flac_Explode;
+ missile.use = Seeker_Flac_Explode;
+ missile.think = adaptor_think2use_hittype_splash;
+ missile.nextthink = time + autocvar_g_balance_seeker_flac_lifetime + autocvar_g_balance_seeker_flac_lifetime_rand;
+ missile.solid = SOLID_BBOX;
+ missile.movetype = MOVETYPE_FLY;
+ missile.projectiledeathtype = WEP_SEEKER;
+ missile.projectiledeathtype = WEP_SEEKER | HITTYPE_SECONDARY;
+ missile.flags = FL_PROJECTILE;
+
+ // csqc projectiles
+ //missile.angles = vectoangles (missile.velocity);
+ //missile.scale = 0.4; // BUG: the model is too big
+
+ setorigin (missile, w_shotorg);
+ setsize (missile, '-2 -2 -2', '2 2 2');
+
+ W_SETUPPROJECTILEVELOCITY_UP(missile, g_balance_seeker_flac);
+ CSQCProjectile(missile, TRUE, PROJECTILE_FLAC, TRUE);
+
+ other = missile; MUTATOR_CALLHOOK(EditProjectile);
+}
+
+// ============================
+// Begin: Tag and rocket controllers
+// ============================
+entity Seeker_Tagged_Info(entity isowner, entity istarget)
+{
+ entity tag;
+ for(tag = world; (tag = find(tag, classname, "tag_tracker")); )
+ if ((tag.owner == isowner) && (tag.tag_target == istarget))
+ return tag;
+
+ return world;
+}
+
+void Seeker_Attack()
+{
+ entity tracker, closest_target;
+
+ for(tracker = world; (tracker = find(tracker, classname, "tag_tracker")); ) if (tracker.owner == self)
+ {
+ if (closest_target)
+ {
+ if (vlen(self.origin - tracker.tag_target.origin) < vlen(self.origin - closest_target.origin))
+ closest_target = tracker.tag_target;
+ }
+ else
+ closest_target = tracker.tag_target;
+ }
+
+ traceline(self.origin + self.view_ofs, closest_target.origin, MOVE_NOMONSTERS, self);
+ if ((!closest_target) || ((trace_fraction < 1) && (trace_ent != closest_target)))
+ closest_target = world;
+
+ Seeker_Fire_Missile('0 0 0', closest_target);
+}
+
+void Seeker_Vollycontroller_Think() // TODO: Merge this with Seeker_Attack
{
float c;
entity oldself,oldenemy;
}
self.nextthink = time + autocvar_g_balance_seeker_missile_delay;
-
+
oldself = self;
self = self.owner;
-
+
oldenemy = self.enemy;
self.enemy = oldself.enemy;
-
- c = mod(oldself.cnt, 4);
+
+ c = mod(self.cnt, 4);
switch(c)
{
case 0:
- Seeker_Fire_Missile('-1.25 -3.75 0');
+ Seeker_Fire_Missile('-1.25 -3.75 0', self.enemy);
break;
case 1:
- Seeker_Fire_Missile('+1.25 -3.75 0');
+ Seeker_Fire_Missile('+1.25 -3.75 0', self.enemy);
break;
case 2:
- Seeker_Fire_Missile('-1.25 +3.75 0');
+ Seeker_Fire_Missile('-1.25 +3.75 0', self.enemy);
break;
case 3:
default:
- Seeker_Fire_Missile('+1.25 +3.75 0');
+ Seeker_Fire_Missile('+1.25 +3.75 0', self.enemy);
break;
}
self = oldself;
}
+void Seeker_Tracker_Think()
+{
+ // commit suicide if: You die OR target dies OR you switch away from the seeker OR commit suicide if lifetime is up
+ if ((self.owner.deadflag != DEAD_NO) || (self.tag_target.deadflag != DEAD_NO) || (self.owner.switchweapon != WEP_SEEKER)
+ || (time > self.tag_time + autocvar_g_balance_seeker_tag_tracker_lifetime))
+ {
+ if (self)
+ {
+ WaypointSprite_Kill(self.tag_target.wps_tag_tracker);
+ remove(self);
+ }
+ return;
+ }
+
+ // Update the think method information
+ self.nextthink = time;
+}
+
+// ============================
+// Begin: Tag projectile
+// ============================
void Seeker_Tag_Explode ()
{
//if(other==self.owner)
Seeker_Tag_Explode();
}
-
void Seeker_Tag_Touch()
{
vector dir;
Damage_DamageInfo(self.origin, 0, 0, 0, self.velocity, WEP_SEEKER | HITTYPE_HEADSHOT, self);
if (other.takedamage == DAMAGE_AIM && other.deadflag == DEAD_NO)
- {
- e = spawn();
- e.cnt = autocvar_g_balance_seeker_missile_count;
- e.owner = self.owner;
- e.enemy = other;
- e.think = Seeker_Vollycontroler_Think;
- e.nextthink = time;
+ {
+ // check to see if this person is already tagged by me
+ entity tag = Seeker_Tagged_Info(self.owner, other);
+
+ if (tag != world)
+ {
+ if (other.wps_tag_tracker && (autocvar_g_balance_seeker_type == 1)) // don't attach another waypointsprite without killing the old one first
+ WaypointSprite_Kill(other.wps_tag_tracker);
+
+ tag.tag_time = time;
+ }
+ else
+ {
+ //sprint(self.owner, strcat("You just tagged ^2", other.netname, "^7 with a tracking device!\n"));
+ e = spawn();
+ e.cnt = autocvar_g_balance_seeker_missile_count;
+ e.classname = "tag_tracker";
+ e.owner = self.owner;
+
+ if (autocvar_g_balance_seeker_type == 1)
+ {
+ e.tag_target = other;
+ e.tag_time = time;
+ e.think = Seeker_Tracker_Think;
+ }
+ else
+ {
+ e.enemy = other;
+ e.think = Seeker_Vollycontroller_Think;
+ }
+
+ e.nextthink = time;
+ }
+
+ if (autocvar_g_balance_seeker_type == 1)
+ {
+ WaypointSprite_Spawn("tagged-target", autocvar_g_balance_seeker_tag_tracker_lifetime, 0, other, '0 0 64', self.owner, 0, other, wps_tag_tracker, TRUE);
+ WaypointSprite_UpdateRule(other.wps_tag_tracker, 0, SPRITERULE_DEFAULT);
+ }
}
remove(self);
other = missile; MUTATOR_CALLHOOK(EditProjectile);
}
-
-void Seeker_Flac_Explode ()
-{
- self.event_damage = SUB_Null;
-
- RadiusDamage (self, self.owner, autocvar_g_balance_seeker_flac_damage, autocvar_g_balance_seeker_flac_edgedamage, autocvar_g_balance_seeker_flac_radius, world, autocvar_g_balance_seeker_flac_force, self.projectiledeathtype, other);
-
- remove (self);
-}
-
-void Seeker_Flac_Touch()
-{
- PROJECTILE_TOUCH;
-
- Seeker_Flac_Explode();
-}
-
-void Seeker_Fire_Flac()
-{
- local entity missile;
- vector f_diff;
- float c;
-
- W_DecreaseAmmo(ammo_rockets, autocvar_g_balance_seeker_flac_ammo, autocvar_g_balance_seeker_reload_ammo);
-
- c = mod(self.bulletcounter, 4);
- switch(c)
- {
- case 0:
- f_diff = '-1.25 -3.75 0';
- break;
- case 1:
- f_diff = '+1.25 -3.75 0';
- break;
- case 2:
- f_diff = '-1.25 +3.75 0';
- break;
- case 3:
- default:
- f_diff = '+1.25 +3.75 0';
- break;
- }
- W_SetupShot_ProjectileSize (self, '-2 -2 -2', '2 2 2', FALSE, 2, "weapons/flac_fire.wav", CHAN_WEAPON, autocvar_g_balance_seeker_flac_damage);
- w_shotorg += f_diff;
-
- pointparticles(particleeffectnum("hagar_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
-
- missile = spawn ();
- missile.owner = missile.realowner = self;
- missile.classname = "missile";
- missile.bot_dodge = TRUE;
- missile.bot_dodgerating = autocvar_g_balance_seeker_flac_damage;
- missile.touch = Seeker_Flac_Explode;
- missile.use = Seeker_Flac_Explode;
- missile.think = adaptor_think2use_hittype_splash;
- missile.nextthink = time + autocvar_g_balance_seeker_flac_lifetime + autocvar_g_balance_seeker_flac_lifetime_rand;
- missile.solid = SOLID_BBOX;
- missile.movetype = MOVETYPE_FLY;
- missile.projectiledeathtype = WEP_SEEKER;
- missile.projectiledeathtype = WEP_SEEKER | HITTYPE_SECONDARY;
- missile.flags = FL_PROJECTILE;
-
- // csqc projectiles
- //missile.angles = vectoangles (missile.velocity);
- //missile.scale = 0.4; // BUG: the model is too big
-
- setorigin (missile, w_shotorg);
- setsize (missile, '-2 -2 -2', '2 2 2');
-
- W_SETUPPROJECTILEVELOCITY_UP(missile, g_balance_seeker_flac);
- CSQCProjectile(missile, TRUE, PROJECTILE_FLAC, TRUE);
-
- other = missile; MUTATOR_CALLHOOK(EditProjectile);
-}
-
+// ============================
+// Begin: Genereal weapon functions
+// ============================
void spawnfunc_weapon_seeker (void)
{
weapon_defaultspawnfunc(WEP_SEEKER);
float ammo_amount;
if (req == WR_AIM)
- self.BUTTON_ATCK = bot_aim(autocvar_g_balance_seeker_tag_speed, 0, 20, FALSE);
-
+ {
+ if (autocvar_g_balance_seeker_type == 1)
+ if (Seeker_Tagged_Info(self, self.enemy) != world)
+ self.BUTTON_ATCK = bot_aim(autocvar_g_balance_seeker_missile_speed_max, 0, autocvar_g_balance_seeker_missile_lifetime, FALSE);
+ else
+ self.BUTTON_ATCK2 = bot_aim(autocvar_g_balance_seeker_tag_speed, 0, autocvar_g_balance_seeker_tag_lifetime, FALSE);
+ else
+ self.BUTTON_ATCK = bot_aim(autocvar_g_balance_seeker_tag_speed, 0, autocvar_g_balance_seeker_tag_lifetime, FALSE);
+ }
else if (req == WR_THINK)
{
if(autocvar_g_balance_seeker_reload_ammo && self.clip_load < min(autocvar_g_balance_seeker_missile_ammo, autocvar_g_balance_seeker_tag_ammo)) // forced reload
weapon_action(self.weapon, WR_RELOAD);
-
+
else if (self.BUTTON_ATCK)
{
- if (weapon_prepareattack(0, autocvar_g_balance_seeker_tag_refire))
+ if (autocvar_g_balance_seeker_type == 1)
{
- Seeker_Fire_Tag();
- weapon_thinkf(WFRAME_FIRE1, autocvar_g_balance_seeker_tag_animtime, w_ready);
+ if (weapon_prepareattack(0, autocvar_g_balance_seeker_missile_refire))
+ {
+ Seeker_Attack();
+ weapon_thinkf(WFRAME_FIRE2, autocvar_g_balance_seeker_missile_animtime, w_ready);
+ }
+ }
+ else
+ {
+ if (weapon_prepareattack(0, autocvar_g_balance_seeker_tag_refire))
+ {
+ Seeker_Fire_Tag();
+ weapon_thinkf(WFRAME_FIRE2, autocvar_g_balance_seeker_tag_animtime, w_ready);
+ }
}
}
else if (self.BUTTON_ATCK2)
{
- if (weapon_prepareattack(1, autocvar_g_balance_seeker_flac_refire))
+ if (autocvar_g_balance_seeker_type == 1)
+ {
+ if (weapon_prepareattack(0, autocvar_g_balance_seeker_tag_refire))
+ {
+ Seeker_Fire_Tag();
+ weapon_thinkf(WFRAME_FIRE2, autocvar_g_balance_seeker_tag_animtime, w_ready);
+ }
+ }
+ else
{
- Seeker_Fire_Flac();
- weapon_thinkf(WFRAME_FIRE2, autocvar_g_balance_seeker_flac_animtime, w_ready);
+ if (weapon_prepareattack(0, autocvar_g_balance_seeker_flac_refire))
+ {
+ Seeker_Fire_Flac();
+ weapon_thinkf(WFRAME_FIRE2, autocvar_g_balance_seeker_flac_animtime, w_ready);
+ }
}
}
}
}
else if (req == WR_CHECKAMMO1)
{
- ammo_amount = self.ammo_cells >= autocvar_g_balance_seeker_missile_ammo;
+ ammo_amount = self.ammo_rockets >= autocvar_g_balance_seeker_missile_ammo;
ammo_amount += self.weapon_load[WEP_SEEKER] >= autocvar_g_balance_seeker_missile_ammo;
return ammo_amount;
}
else if (req == WR_CHECKAMMO2)
{
- ammo_amount = self.ammo_cells >= autocvar_g_balance_seeker_flac_ammo;
- ammo_amount += self.weapon_load[WEP_SEEKER] >= autocvar_g_balance_seeker_flac_ammo;
+ ammo_amount = self.ammo_rockets >= autocvar_g_balance_seeker_tag_ammo;
+ ammo_amount += self.weapon_load[WEP_SEEKER] >= autocvar_g_balance_seeker_tag_ammo;
return ammo_amount;
}
else if (req == WR_RELOAD)
{
vector org2;
org2 = w_org + w_backoff * 6;
- if(w_deathtype & HITTYPE_SECONDARY)
+ if(w_deathtype & HITTYPE_BOUNCE)
{
- pointparticles(particleeffectnum("flac_explode"), org2, '0 0 0', 1);
+ pointparticles(particleeffectnum("hagar_explode"), org2, '0 0 0', 1);
if(!w_issilent)
{
if (w_random<0.15)
- sound(self, CHAN_PROJECTILE, "weapons/flacexp1.wav", 1, ATTN_NORM);
+ sound(self, CHAN_PROJECTILE, "weapons/tagexp1.wav", 1, ATTN_NORM);
else if (w_random<0.7)
- sound(self, CHAN_PROJECTILE, "weapons/flacexp2.wav", 1, ATTN_NORM);
+ sound(self, CHAN_PROJECTILE, "weapons/tagexp2.wav", 1, ATTN_NORM);
else
- sound(self, CHAN_PROJECTILE, "weapons/flacexp3.wav", 1, ATTN_NORM);
+ sound(self, CHAN_PROJECTILE, "weapons/tagexp3.wav", 1, ATTN_NORM);
}
}
+ else if(w_deathtype & HITTYPE_HEADSHOT)
+ {
+ if(!w_issilent)
+ sound(self, CHAN_PROJECTILE, "weapons/tag_impact.wav", 1, ATTN_NORM);
+ }
else
{
- if(w_deathtype & HITTYPE_BOUNCE)
- {
- pointparticles(particleeffectnum("hagar_explode"), org2, '0 0 0', 1);
- if(!w_issilent)
- {
- if (w_random<0.15)
- sound(self, CHAN_PROJECTILE, "weapons/tagexp1.wav", 1, ATTN_NORM);
- else if (w_random<0.7)
- sound(self, CHAN_PROJECTILE, "weapons/tagexp2.wav", 1, ATTN_NORM);
- else
- sound(self, CHAN_PROJECTILE, "weapons/tagexp3.wav", 1, ATTN_NORM);
- }
- }
- else if(w_deathtype & HITTYPE_HEADSHOT)
- {
- if(!w_issilent)
- sound(self, CHAN_PROJECTILE, "weapons/tag_impact.wav", 1, ATTN_NORM);
- }
- else
+ pointparticles(particleeffectnum("hagar_explode"), org2, '0 0 0', 1);
+ if(!w_issilent)
{
- pointparticles(particleeffectnum("hagar_explode"), org2, '0 0 0', 1);
- if(!w_issilent)
- {
- if (w_random<0.15)
- sound(self, CHAN_PROJECTILE, "weapons/seekerexp1.wav", 1, ATTN_NORM);
- else if (w_random<0.7)
- sound(self, CHAN_PROJECTILE, "weapons/seekerexp2.wav", 1, ATTN_NORM);
- else
- sound(self, CHAN_PROJECTILE, "weapons/seekerexp3.wav", 1, ATTN_NORM);
- }
+ if (w_random<0.15)
+ sound(self, CHAN_PROJECTILE, "weapons/seekerexp1.wav", 1, ATTN_NORM);
+ else if (w_random<0.7)
+ sound(self, CHAN_PROJECTILE, "weapons/seekerexp2.wav", 1, ATTN_NORM);
+ else
+ sound(self, CHAN_PROJECTILE, "weapons/seekerexp3.wav", 1, ATTN_NORM);
}
}
}
else if(req == WR_PRECACHE)
{
- precache_sound("weapons/flacexp1.wav");
- precache_sound("weapons/flacexp2.wav");
- precache_sound("weapons/flacexp3.wav");
precache_sound("weapons/seekerexp1.wav");
precache_sound("weapons/seekerexp2.wav");
precache_sound("weapons/seekerexp3.wav");
else if (req == WR_KILLMESSAGE)
{
if(w_deathtype & HITTYPE_SECONDARY)
- w_deathtypestring = _("%s ran into %s's flac");
- else
w_deathtypestring = _("%s was tagged by %s");
+ else
+ w_deathtypestring = _("%s was pummeled by %s");
}
return TRUE;
}