]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge remote branch 'origin/master' into fruitiex/balance
authorFruitieX <fruitiex@gmail.com>
Sun, 9 Jan 2011 01:06:24 +0000 (03:06 +0200)
committerFruitieX <fruitiex@gmail.com>
Sun, 9 Jan 2011 01:06:24 +0000 (03:06 +0200)
21 files changed:
balance25.cfg
balanceLeeStricklin.cfg
balanceSamual.cfg
balanceXonotic.cfg
balancetZork.cfg
defaultXonotic.cfg
fixbalance.sh [new file with mode: 0755]
qcsrc/menu/xonotic/slider_picmip.c
qcsrc/server/autocvars.qh
qcsrc/server/defs.qh
qcsrc/server/g_damage.qc
qcsrc/server/miscfunctions.qc
qcsrc/server/mutators/base.qh
qcsrc/server/mutators/gamemode_freezetag.qc
qcsrc/server/tturrets/system/system_aimprocs.qc
qcsrc/server/tturrets/system/system_damage.qc
qcsrc/server/tturrets/system/system_main.qc
qcsrc/server/tturrets/units/unit_fusionreactor.qc
qcsrc/server/w_crylink.qc
qcsrc/server/w_electro.qc
qcsrc/server/w_shotgun.qc

index faf4fbfa166b352b8361bc744b2fd33e3ad9673d..bb646c8f7af55b75bbfcab5bd95efb42f375c2b3 100644 (file)
@@ -269,6 +269,7 @@ set g_balance_uzi_mode 0                            // Activates varible spread for sustained & burst m
 set g_balance_uzi_spread_min 0.02
 set g_balance_uzi_spread_max 0.6
 set g_balance_uzi_spread_add 0.012
+
 set g_balance_uzi_burst 0                              // # of bullets in a burst (if set to 2 or more)
 set g_balance_uzi_burst_refire 0.05            // refire between burst bullets
 set g_balance_uzi_burst_refire2 0.75   // refire after burst
@@ -276,17 +277,20 @@ set g_balance_uzi_burst_spread 0.04
 set g_balance_uzi_burst_damage 18              
 set g_balance_uzi_burst_force 50
 set g_balance_uzi_burst_ammo 3
+
 set g_balance_uzi_first 1
 set g_balance_uzi_first_damage 30
 set g_balance_uzi_first_force 50
 set g_balance_uzi_first_spread 0.015
 set g_balance_uzi_first_refire 0.2
 set g_balance_uzi_first_ammo 1
+
 set g_balance_uzi_sustained_damage 15
 set g_balance_uzi_sustained_force 27
 set g_balance_uzi_sustained_spread 0.05
 set g_balance_uzi_sustained_refire 0.1
 set g_balance_uzi_sustained_ammo 1
+
 set g_balance_uzi_speed 18000
 set g_balance_uzi_bulletconstant 115 // 13.1qu
 // }}}
@@ -330,7 +334,7 @@ set g_balance_grenadelauncher_secondary_remote_detonateprimary 0
 set g_balance_grenadelauncher_bouncefactor 0.5
 set g_balance_grenadelauncher_bouncestop 0.075
 // }}}
-// {{{ minelayer // TODO
+// {{{ minelayer
 set g_balance_minelayer_damage 35
 set g_balance_minelayer_edgedamage 30
 set g_balance_minelayer_force 250
@@ -408,6 +412,7 @@ set g_balance_crylink_primary_refire 0.4
 set g_balance_crylink_primary_animtime 0.3
 set g_balance_crylink_primary_ammo 2
 set g_balance_crylink_primary_bouncedamagefactor 0.5
+set g_balance_crylink_primary_joindelay 0
 set g_balance_crylink_primary_joinspread 0
 set g_balance_crylink_primary_jointime 0
 set g_balance_crylink_primary_joinexplode 0
@@ -435,6 +440,7 @@ set g_balance_crylink_secondary_refire 0.5
 set g_balance_crylink_secondary_animtime 0.3
 set g_balance_crylink_secondary_ammo 2
 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_crylink_secondary_joinexplode 0                  
index 87d5b2bc27b9ce9cc9042f3dbfd19af97d1c18ff..0ee81798805b6a32f6ff7bf946ee363b55cb4c94 100644 (file)
@@ -269,6 +269,7 @@ set g_balance_uzi_mode 0                            // Activates varible spread for sustained & burst m
 set g_balance_uzi_spread_min 0.02
 set g_balance_uzi_spread_max 0.6
 set g_balance_uzi_spread_add 0.012
+
 set g_balance_uzi_burst 0                              // # of bullets in a burst (if set to 2 or more)
 set g_balance_uzi_burst_refire 0.05            // refire between burst bullets
 set g_balance_uzi_burst_refire2 0.75   // refire after burst
@@ -276,21 +277,24 @@ set g_balance_uzi_burst_spread 0.04
 set g_balance_uzi_burst_damage 18              
 set g_balance_uzi_burst_force 50
 set g_balance_uzi_burst_ammo 3
+
 set g_balance_uzi_first 1
 set g_balance_uzi_first_damage 26
 set g_balance_uzi_first_force -30
 set g_balance_uzi_first_spread 0.01
 set g_balance_uzi_first_refire 0.2
 set g_balance_uzi_first_ammo 1
+
 set g_balance_uzi_sustained_damage 17
 set g_balance_uzi_sustained_force 27
 set g_balance_uzi_sustained_spread 0.05
 set g_balance_uzi_sustained_refire 0.1
 set g_balance_uzi_sustained_ammo 1
+
 set g_balance_uzi_speed 18000
 set g_balance_uzi_bulletconstant 300 // 13.1qu
 // }}}
-// {{{ mortar 
+// {{{ mortar
 set g_balance_grenadelauncher_primary_type 0
 set g_balance_grenadelauncher_primary_damage 65
 set g_balance_grenadelauncher_primary_edgedamage 35
@@ -330,7 +334,7 @@ set g_balance_grenadelauncher_secondary_remote_detonateprimary 0
 set g_balance_grenadelauncher_bouncefactor 0.7
 set g_balance_grenadelauncher_bouncestop 0.12
 // }}}
-// {{{ minelayer 
+// {{{ minelayer
 set g_balance_minelayer_damage 65
 set g_balance_minelayer_edgedamage 30
 set g_balance_minelayer_force 250
@@ -352,7 +356,7 @@ set g_balance_minelayer_remote_edgedamage 40
 set g_balance_minelayer_remote_radius 200
 set g_balance_minelayer_remote_force 300
 // }}}
-// {{{ electro 
+// {{{ electro
 set g_balance_electro_lightning 0
 set g_balance_electro_primary_damage 55
 set g_balance_electro_primary_edgedamage 5
@@ -408,6 +412,7 @@ set g_balance_crylink_primary_refire 0.4
 set g_balance_crylink_primary_animtime 0.30008
 set g_balance_crylink_primary_ammo 3
 set g_balance_crylink_primary_bouncedamagefactor 0.2
+set g_balance_crylink_primary_joindelay 0
 set g_balance_crylink_primary_joinspread 0
 set g_balance_crylink_primary_jointime 0
 set g_balance_crylink_primary_joinexplode 0
@@ -435,6 +440,7 @@ set g_balance_crylink_secondary_refire 0.5
 set g_balance_crylink_secondary_animtime 0.3
 set g_balance_crylink_secondary_ammo 3
 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_crylink_secondary_joinexplode 0                  
@@ -516,7 +522,7 @@ set g_balance_hagar_secondary_lifetime_rand 0
 set g_balance_hagar_secondary_refire 0.15
 set g_balance_hagar_secondary_ammo 2
 // }}}
-// {{{ rocketlauncher 
+// {{{ rocketlauncher
 set g_balance_rocketlauncher_damage 65
 set g_balance_rocketlauncher_edgedamage 25
 set g_balance_rocketlauncher_force 360
index d2a394e05b4df02792283e54a8ff3ba916d51022..451adf196ef4dd84738c211866ffb7e8d815652e 100644 (file)
@@ -269,6 +269,7 @@ set g_balance_uzi_mode 0                            // Activates varible spread for sustained & burst m
 set g_balance_uzi_spread_min 0.02
 set g_balance_uzi_spread_max 0.6
 set g_balance_uzi_spread_add 0.012
+
 set g_balance_uzi_burst 0                              // # of bullets in a burst (if set to 2 or more)
 set g_balance_uzi_burst_refire 0.05            // refire between burst bullets
 set g_balance_uzi_burst_refire2 0.75   // refire after burst
@@ -276,17 +277,20 @@ set g_balance_uzi_burst_spread 0.04
 set g_balance_uzi_burst_damage 18              
 set g_balance_uzi_burst_force 50
 set g_balance_uzi_burst_ammo 3
+
 set g_balance_uzi_first 1
 set g_balance_uzi_first_damage 18
 set g_balance_uzi_first_force 20
 set g_balance_uzi_first_spread 0.03
 set g_balance_uzi_first_refire 0.2
 set g_balance_uzi_first_ammo 1
+
 set g_balance_uzi_sustained_damage 10
 set g_balance_uzi_sustained_force 10
 set g_balance_uzi_sustained_spread 0.08
 set g_balance_uzi_sustained_refire 0.1
 set g_balance_uzi_sustained_ammo 1
+
 set g_balance_uzi_speed 18000
 set g_balance_uzi_bulletconstant 115 // 13.1qu
 // }}}
@@ -330,7 +334,7 @@ set g_balance_grenadelauncher_secondary_remote_detonateprimary 0
 set g_balance_grenadelauncher_bouncefactor 0.5
 set g_balance_grenadelauncher_bouncestop 0.075
 // }}}
-// {{{ minelayer // TODO
+// {{{ minelayer
 set g_balance_minelayer_damage 35
 set g_balance_minelayer_edgedamage 30
 set g_balance_minelayer_force 250
@@ -352,7 +356,7 @@ set g_balance_minelayer_remote_edgedamage 40
 set g_balance_minelayer_remote_radius 200
 set g_balance_minelayer_remote_force 300
 // }}}
-// {{{ electro // TODO
+// {{{ electro
 set g_balance_electro_lightning 1
 set g_balance_electro_primary_damage 90
 set g_balance_electro_primary_edgedamage 0
@@ -395,7 +399,7 @@ set g_balance_electro_combo_radius 250
 set g_balance_electro_combo_comboradius 0
 set g_balance_electro_combo_speed 400
 // }}}
-// {{{ crylink 
+// {{{ crylink
 set g_balance_crylink_primary_damage 10
 set g_balance_crylink_primary_edgedamage 0
 set g_balance_crylink_primary_force -55
@@ -408,6 +412,7 @@ set g_balance_crylink_primary_refire 0.4
 set g_balance_crylink_primary_animtime 0.3
 set g_balance_crylink_primary_ammo 2
 set g_balance_crylink_primary_bouncedamagefactor 0.5
+set g_balance_crylink_primary_joindelay 0
 set g_balance_crylink_primary_joinspread 0
 set g_balance_crylink_primary_jointime 0
 set g_balance_crylink_primary_joinexplode 0
@@ -435,6 +440,7 @@ 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.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_crylink_secondary_joinexplode 0                  
index 9db5724d219c83674f1eb4c9a7605d188703a74a..30d9daae20c196ed6ed46b2e2d34f58f21c6fd5a 100644 (file)
@@ -412,6 +412,7 @@ set g_balance_crylink_primary_refire 0.8
 set g_balance_crylink_primary_animtime 0.3
 set g_balance_crylink_primary_ammo 2
 set g_balance_crylink_primary_bouncedamagefactor 0.2
+set g_balance_crylink_primary_joindelay 0
 set g_balance_crylink_primary_joinspread 0.2
 set g_balance_crylink_primary_jointime 0.1
 set g_balance_crylink_primary_joinexplode 0
@@ -439,6 +440,7 @@ set g_balance_crylink_secondary_refire 0.15
 set g_balance_crylink_secondary_animtime 0.15
 set g_balance_crylink_secondary_ammo 1
 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_crylink_secondary_joinexplode 0                  
index ce37fdb53db1748b43a181b9b5ce62dcda4e32a8..b0b589867b9f6573c845334077add9cb1013fc43 100644 (file)
@@ -55,67 +55,52 @@ 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 20
 set g_pickup_shells_weapon 10
 set g_pickup_shells_max 50
-
 set g_pickup_nails 60
 set g_pickup_nails_weapon 60
 set g_pickup_nails_max 300
-
 set g_pickup_rockets 25
 set g_pickup_rockets_weapon 15
 set g_pickup_rockets_max 150
-
 set g_pickup_cells 30
 set g_pickup_cells_weapon 20
 set g_pickup_cells_max 300
-
 set g_pickup_fuel 25
 set g_pickup_fuel_weapon 15
 set g_pickup_fuel_jetpack 50
 set g_pickup_fuel_max 999
-
 set g_pickup_armorsmall 5
 set g_pickup_armorsmall_max 999
 set g_pickup_armorsmall_anyway 0
-
 set g_pickup_armormedium 25
 set g_pickup_armormedium_max 100
 set g_pickup_armormedium_anyway 0
-
 set g_pickup_armorbig 50
 set g_pickup_armorbig_max 150
 set g_pickup_armorbig_anyway 0
-
 set g_pickup_armorlarge 100
 set g_pickup_armorlarge_max 999
 set g_pickup_armorlarge_anyway 0
-
 set g_pickup_healthsmall 5
 set g_pickup_healthsmall_max 999
 set g_pickup_healthsmall_anyway 0
-
 set g_pickup_healthmedium 25
 set g_pickup_healthmedium_max 100
 set g_pickup_healthmedium_anyway 0
-
 set g_pickup_healthlarge 50
 set g_pickup_healthlarge_max 150
 set g_pickup_healthlarge_anyway 0
-
 set g_pickup_healthmega 100
 set g_pickup_healthmega_max 999
 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 20
 set g_pickup_respawntime_ammo 15
-
 set g_pickup_respawntimejitter_short 0
 set g_pickup_respawntimejitter_medium 0
 set g_pickup_respawntimejitter_long 0
@@ -279,7 +264,6 @@ set g_balance_shotgun_secondary_force 150
 set g_balance_shotgun_secondary_refire 1.1
 set g_balance_shotgun_secondary_animtime 1
 // }}}
-
 // {{{ uzi
 set g_balance_uzi_mode 1                               // Activates varible spread for sustained & burst mode secondary
 set g_balance_uzi_spread_min 0.02
@@ -350,7 +334,7 @@ set g_balance_grenadelauncher_secondary_remote_detonateprimary 0
 set g_balance_grenadelauncher_bouncefactor 0.5
 set g_balance_grenadelauncher_bouncestop 0.075
 // }}}
-// {{{ minelayer // TODO
+// {{{ minelayer
 set g_balance_minelayer_damage 35
 set g_balance_minelayer_edgedamage 30
 set g_balance_minelayer_force 250
@@ -390,7 +374,6 @@ set g_balance_electro_primary_range 0
 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 25
 set g_balance_electro_secondary_edgedamage 0
 set g_balance_electro_secondary_force 50
@@ -409,7 +392,6 @@ set g_balance_electro_secondary_damageforcescale 2
 set g_balance_electro_secondary_count 3
 set g_balance_electro_secondary_bouncefactor 0.5
 set g_balance_electro_secondary_bouncestop 0.075
-
 set g_balance_electro_combo_damage 80
 set g_balance_electro_combo_edgedamage 10
 set g_balance_electro_combo_force 150
@@ -430,6 +412,7 @@ set g_balance_crylink_primary_refire 1
 set g_balance_crylink_primary_animtime 0.4
 set g_balance_crylink_primary_ammo 2
 set g_balance_crylink_primary_bouncedamagefactor 0.2
+set g_balance_crylink_primary_joindelay 0
 set g_balance_crylink_primary_joinspread 0.1
 set g_balance_crylink_primary_jointime 0
 set g_balance_crylink_primary_joinexplode 1                            //if != 0 do a extra damage pass when projectiles join
@@ -438,6 +421,7 @@ set g_balance_crylink_primary_joinexplode_edgedamage 20
 set g_balance_crylink_primary_joinexplode_radius 200
 set g_balance_crylink_primary_joinexplode_force 400
 set g_balance_crylink_primary_linkexplode 0
+
 set g_balance_crylink_primary_middle_lifetime 5 
 set g_balance_crylink_primary_middle_fadetime 0.25
 set g_balance_crylink_primary_other_lifetime 2 // range: 800 full, fades to 1300
@@ -456,6 +440,7 @@ set g_balance_crylink_secondary_refire 0.15
 set g_balance_crylink_secondary_animtime 0.15
 set g_balance_crylink_secondary_ammo 1
 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_crylink_secondary_joinexplode 0                  
@@ -537,7 +522,7 @@ set g_balance_hagar_secondary_lifetime_rand 0
 set g_balance_hagar_secondary_refire 0.15
 set g_balance_hagar_secondary_ammo 1
 // }}}
-// {{{ rocketlauncher // TODO
+// {{{ rocketlauncher
 set g_balance_rocketlauncher_damage 120
 set g_balance_rocketlauncher_edgedamage 25
 set g_balance_rocketlauncher_force 350
@@ -617,6 +602,7 @@ set g_balance_hlac_secondary_force 100
 set g_balance_hlac_secondary_radius 50
 set g_balance_hlac_secondary_speed 15000
 set g_balance_hlac_secondary_lifetime 3
+
 set g_balance_hlac_secondary_refire 1
 set g_balance_hlac_secondary_animtime 0.7
 set g_balance_hlac_secondary_ammo 10
@@ -718,7 +704,6 @@ set g_balance_seeker_flac_speed 5000
 set g_balance_seeker_flac_speed_up 500
 set g_balance_seeker_flac_speed_z 0
 set g_balance_seeker_flac_spread 0.25
-
 set g_balance_seeker_missile_accel 1400
 set g_balance_seeker_missile_ammo 2
 set g_balance_seeker_missile_animtime 0.3
@@ -746,7 +731,6 @@ set g_balance_seeker_missile_speed_z 0
 set g_balance_seeker_missile_speed_max 1400
 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
index f234f934698ebc82e9b8514069b75a7b5c927c25..6b5b21f9a12689861fc72532884b8a0072cee66b 100644 (file)
@@ -565,7 +565,8 @@ set g_freezetag 0 "Freeze Tag: Freeze the opposing team(s) to win, unfreeze team
 seta g_freezetag_warmup 5 "Time players get to run around before the round starts"
 seta g_freezetag_point_limit -1        "Freeze Tag point limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)"
 seta g_freezetag_point_leadlimit -1    "Freeze Tag point lead limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)"
-seta g_freezetag_revive_time 2.5 "Time it takes to revive a frozen teammate"
+seta g_freezetag_revive_speed 0.4 "Speed for reviving a frozen teammate"
+seta g_freezetag_revive_clearspeed 1.6 "Speed at which reviving progress gets lost when out of range"
 seta g_freezetag_revive_extra_size 100 "Distance in qu that you can stand from a frozen teammate to keep reviving him"
 seta g_freezetag_frozen_force 0.6 "How much to multiply the force on a frozen player with"
 
@@ -1361,6 +1362,7 @@ seta slowmo 1
 seta menu_skin "luminos"
 set menu_slowmo 1
 seta menu_sounds 0 "enables menu sound effects. 1 enables click sounds, 2 also enables hover sounds"
+set menu_picmip_bypass 0 "bypass texture quality enforcement based on system resources, not recommended and may cause crashes!"
 
 r_textbrightness 0.2
 r_textcontrast 0.8
diff --git a/fixbalance.sh b/fixbalance.sh
new file mode 100755 (executable)
index 0000000..cfc6cc0
--- /dev/null
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+main=balanceXonotic.cfg
+for X in balance*.cfg; do
+       case "$X" in
+               "$main")
+                       ;;
+               *)
+                       perl ../../misc/tools/cfgapply.pl "$main" "$X" > "$X.new" && mv "$X.new" "$X"
+                       ;;
+       esac
+done
+git diff
index af278dfd1f776da754fb952689a7a262c47ec90f..ddedc4bab2901e2cd077a60c475aef525f223e80 100644 (file)
@@ -26,13 +26,15 @@ float texmemsize(float s3tc)
 {
        return
        (
-                 2500 * pow(0.5, max(0, cvar("gl_picmip") + cvar("gl_picmip_other")))
-               + 1500 * pow(0.5, max(0, cvar("gl_picmip") + cvar("gl_picmip_world")))
-       ) * (s3tc && ((cvar("r_texture_dds_load") || cvar("gl_texturecompression")) ? 0.2 : 1.0)); // TC: normalmaps 50%, other 25%, few incompressible, guessing 40% as conservative average
+                 2500 * pow(0.25, max(0, cvar("gl_picmip") + cvar("gl_picmip_other")))
+               + 1500 * pow(0.25, max(0, cvar("gl_picmip") + cvar("gl_picmip_world")))
+       ) * ((s3tc && (cvar("r_texture_dds_load") || cvar("gl_texturecompression"))) ? 0.2 : 1.0); // TC: normalmaps 50%, other 25%, few incompressible, guessing 40% as conservative average
 }
 void XonoticPicmipSlider_autofix(entity me)
 {
        float max_hard, max_soft;
+       if(cvar("menu_picmip_bypass"))
+               return;
        max_hard = cvar("sys_memsize_virtual");
        max_soft = cvar("sys_memsize_physical");
        if(max_hard > 0)
index fb9afec70627e9e4a2975bf28b405d5d9fbeefb9..d8d0c5f82c27da2c17e724097425d49a5c06ac39 100644 (file)
@@ -121,6 +121,7 @@ float autocvar_g_balance_crylink_primary_bounces;
 float autocvar_g_balance_crylink_primary_damage;
 float autocvar_g_balance_crylink_primary_edgedamage;
 float autocvar_g_balance_crylink_primary_force;
+float autocvar_g_balance_crylink_primary_joindelay;
 float autocvar_g_balance_crylink_primary_joinexplode;
 float autocvar_g_balance_crylink_primary_joinexplode_damage;
 float autocvar_g_balance_crylink_primary_joinexplode_edgedamage;
@@ -146,6 +147,7 @@ float autocvar_g_balance_crylink_secondary_bounces;
 float autocvar_g_balance_crylink_secondary_damage;
 float autocvar_g_balance_crylink_secondary_edgedamage;
 float autocvar_g_balance_crylink_secondary_force;
+float autocvar_g_balance_crylink_secondary_joindelay;
 float autocvar_g_balance_crylink_secondary_joinexplode;
 float autocvar_g_balance_crylink_secondary_joinexplode_damage;
 float autocvar_g_balance_crylink_secondary_joinexplode_edgedamage;
@@ -721,7 +723,8 @@ float autocvar_g_freezetag_frozen_force;
 float autocvar_g_freezetag_point_leadlimit;
 float autocvar_g_freezetag_point_limit;
 float autocvar_g_freezetag_revive_extra_size;
-float autocvar_g_freezetag_revive_time;
+float autocvar_g_freezetag_revive_speed;
+float autocvar_g_freezetag_revive_clearspeed;
 float autocvar_g_freezetag_warmup;
 #define autocvar_g_friendlyfire cvar("g_friendlyfire")
 #define autocvar_g_friendlyfire_virtual cvar("g_friendlyfire_virtual")
index bbd554f5e375697c29dace35b7ab1abcf79fd3d7..8db4849e7816e1a161b9e27375924e22b0d93e12 100644 (file)
@@ -658,7 +658,6 @@ 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 freezetag_frozen;
-.float freezetag_beginrevive_time;
 .float freezetag_revive_progress;
 
 .entity muzzle_flash;
index 0c07ad5a74de568af22a5fbb73cdf7345a4ba439..357f5191ec8355c9d22533f016a53a45191e372a 100644 (file)
@@ -779,7 +779,9 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float
                                {
                                        if(damage > 0)
                                        {
-                                               if(attacker.weapon != WEP_ELECTRO && attacker.weapon != WEP_LASER || ((attacker.weapon == WEP_ELECTRO && autocvar_g_balance_electro_lightning || attacker.weapon == WEP_LASER) && attacker.prevhitsound + autocvar_sv_hitsound_antispam_time < time))
+                                               if(attacker.weapon != WEP_LASER
+                                               && (attacker.weapon != WEP_ELECTRO || !autocvar_g_balance_electro_lightning)
+                                               && attacker.prevhitsound + autocvar_sv_hitsound_antispam_time < time)
                                                {
                                                        if(targ.BUTTON_CHAT)
                                                                attacker.typehitsound += 1;
@@ -810,8 +812,12 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float
                                }
                                else
                                {
-                                       if(deathtype != DEATH_FIRE)
+                                       if(deathtype != DEATH_FIRE
+                                       && attacker.prevhitsound + autocvar_sv_hitsound_antispam_time < time)
+                                       {
                                                attacker.typehitsound += 1;
+                                               attacker.prevhitsound = time;
+                                       }
                                        if(mirrordamage > 0)
                                                if(time > attacker.teamkill_complain)
                                                {
index a770ec55eb5c0bbd1be910cddf08844b3203e179..849dcdab45197e62877c96d5bf124b1bd4443589 100644 (file)
@@ -2553,10 +2553,7 @@ float MoveToRandomMapLocation(entity e, float goodcontents, float badcontents, f
 
         // rule 6: we must not end up in trigger_hurt
         if (tracebox_hits_trigger_hurt(start, e.mins, e.maxs, enddown))
-        {
-            dprint("trigger_hurt! ouch! and nothing else could find it!\n");
             continue;
-        }
 
         break;
     }
index b7c523dcbbfd0853c80bab058559b380fb104f0d..aa581228bd474fc32a12bc885291d0ae9a0c9775 100644 (file)
@@ -94,6 +94,10 @@ MUTATOR_HOOKABLE(FilterItem);
        // checks if the current item may be spawned (self.items and self.weapons may be read and written to, as well as the ammo_ fields)
        // return error to request removal
 
+MUTATOR_HOOKABLE(TurretSpawn);
+       // return error to request removal
+       // INPUT: self - turret
+       
 MUTATOR_HOOKABLE(OnEntityPreSpawn);
        // return error to prevent entity spawn, or modify the entity
 
index 410a33673c9b8c0aff3f18343ddefdb93f666487..d09bbeecf6bfbb4f91ccf34c1c01821c001120fc 100644 (file)
@@ -65,7 +65,10 @@ void freezetag_Ice_Think()
 
 void freezetag_Freeze(entity attacker)
 {
+       if(self.freezetag_frozen)
+               return;
        self.freezetag_frozen = 1;
+       self.freezetag_revive_progress = 0;
 
        entity ice;
        ice = spawn();
@@ -111,6 +114,7 @@ void freezetag_Freeze(entity attacker)
 void freezetag_Unfreeze(entity attacker)
 {
        self.freezetag_frozen = 0;
+       self.freezetag_revive_progress = 0;
 
        // remove the ice block
        entity ice;
@@ -215,88 +219,86 @@ MUTATOR_HOOKFUNCTION(freezetag_GiveFragsForKill)
 
 MUTATOR_HOOKFUNCTION(freezetag_PlayerPreThink)
 {
-    vector revive_extra_size;
-    revive_extra_size = '1 1 1' * autocvar_g_freezetag_revive_extra_size;
+       float n;
+       vector revive_extra_size;
 
-    float teammate_nearby;
-    FOR_EACH_PLAYER(other) if(self != other)
-    {
-        if(other.freezetag_frozen == 0)
-        {
-            if(other.team == self.team)
-            {
-                teammate_nearby = boxesoverlap(self.absmin - revive_extra_size, self.absmax + revive_extra_size, other.absmin, other.absmax);
-                if(teammate_nearby)
-                    break;
-            }
-        }
-    }
+       revive_extra_size = '1 1 1' * autocvar_g_freezetag_revive_extra_size;
 
-    if(teammate_nearby && self.freezetag_frozen == 1) // OK, there is at least one teammate reviving us
-    {
-        if(self.freezetag_beginrevive_time == -9999) // initialize values if this is the first frame of revival
-        {
-            self.freezetag_beginrevive_time = time;
-            self.freezetag_revive_progress = 0;
-        }
-        else
-        {
-            self.freezetag_revive_progress = (time - self.freezetag_beginrevive_time) / autocvar_g_freezetag_revive_time;
-            if(time - self.freezetag_beginrevive_time >= autocvar_g_freezetag_revive_time)
-            {
-                freezetag_Unfreeze(self);
-               entity o;
-               o = other;
-               
-               // EVERY team mate nearby gets a point (even if multiple!)
-               float n;
-               FOR_EACH_PLAYER(other) if(self != other)
+       entity o;
+       o = world;
+       n = 0;
+       FOR_EACH_PLAYER(other) if(self != other)
+       {
+               if(other.freezetag_frozen == 0)
                {
-                       if(other.freezetag_frozen == 0)
+                       if(other.team == self.team)
                        {
-                               if(other.team == self.team)
+                               if(boxesoverlap(self.absmin - revive_extra_size, self.absmax + revive_extra_size, other.absmin, other.absmax))
+                               {
+                                       if(!o)
+                                               o = other;
+                                       ++n;
+                               }
+                       }
+               }
+       }
+
+       if(n && self.freezetag_frozen) // OK, there is at least one teammate reviving us
+       {
+               self.freezetag_revive_progress = bound(0, self.freezetag_revive_progress + frametime * autocvar_g_freezetag_revive_speed, 1);
+
+               if(self.freezetag_revive_progress >= 1)
+               {
+                       freezetag_Unfreeze(self);
+
+                       // EVERY team mate nearby gets a point (even if multiple!)
+                       FOR_EACH_PLAYER(other) if(self != other)
+                       {
+                               if(other.freezetag_frozen == 0)
                                {
-                                       teammate_nearby = boxesoverlap(self.absmin - revive_extra_size, self.absmax + revive_extra_size, other.absmin, other.absmax);
-                                       if(teammate_nearby)
+                                       if(other.team == self.team)
                                        {
-                                               PlayerScore_Add(other, SP_FREEZETAG_REVIVALS, +1);
-                                               PlayerScore_Add(other, SP_SCORE, +1);
-                                               ++n;
+                                               if(boxesoverlap(self.absmin - revive_extra_size, self.absmax + revive_extra_size, other.absmin, other.absmax))
+                                               {
+                                                       PlayerScore_Add(other, SP_FREEZETAG_REVIVALS, +1);
+                                                       PlayerScore_Add(other, SP_SCORE, +1);
+                                               }
                                        }
                                }
                        }
-               }
 
-               if(n > 1)
-                       centerprint(self, strcat("^5You were revived by ^7", o.netname, "^5 et al.\n"));
-               else
-                       centerprint(self, strcat("^5You were revived by ^7", o.netname, "^5.\n"));
-                centerprint(o, strcat("^5You revived ^7", self.netname, "^5.\n"));
-                bprint("^7", o.netname, "^5 revived ^7", self.netname, "^5.\n");
+                       if(n > 1)
+                               centerprint(self, strcat("^5You were revived by ^7", o.netname, "^5 et al.\n"));
+                       else
+                               centerprint(self, strcat("^5You were revived by ^7", o.netname, "^5.\n"));
+                       centerprint(o, strcat("^5You revived ^7", self.netname, "^5.\n"));
+                       if(n > 1)
+                               bprint("^7", o.netname, "^5 et al revived ^7", self.netname, "^5.\n");
+                       else
+                               bprint("^7", o.netname, "^5 revived ^7", self.netname, "^5.\n");
+               }
 
-                self.freezetag_beginrevive_time = -9999;
-                self.freezetag_revive_progress = 0;
-            }
-        }
-        // now find EVERY teammate within reviving radius, set their revive_progress values correct
-        FOR_EACH_PLAYER(other) if(self != other)
-        {
-            if(other.freezetag_frozen == 0)
-            {
-                if(other.team == self.team)
-                {
-                    teammate_nearby = boxesoverlap(self.absmin - revive_extra_size, self.absmax + revive_extra_size, other.absmin, other.absmax);
-                    if(teammate_nearby)
-                        other.freezetag_revive_progress = self.freezetag_revive_progress;
-                }
-            }
-        }
-    }
-    else if(!teammate_nearby) // only if no teammate is nearby will we reset
-    {
-        self.freezetag_beginrevive_time = -9999;
-        self.freezetag_revive_progress = 0;
-    }
+               // now find EVERY teammate within reviving radius, set their revive_progress values correct
+               FOR_EACH_PLAYER(other) if(self != other)
+               {
+                       if(other.freezetag_frozen == 0)
+                       {
+                               if(other.team == self.team)
+                               {
+                                       if(boxesoverlap(self.absmin - revive_extra_size, self.absmax + revive_extra_size, other.absmin, other.absmax))
+                                               other.freezetag_revive_progress = self.freezetag_revive_progress;
+                               }
+                       }
+               }
+       }
+       else if(!n && self.freezetag_frozen) // only if no teammate is nearby will we reset
+       {
+               self.freezetag_revive_progress = bound(0, self.freezetag_revive_progress - frametime * autocvar_g_freezetag_revive_clearspeed, 1);
+       }
+       else if(!n)
+       {
+               self.freezetag_revive_progress = 0; // thawing nobody
+       }
 
        return 1;
 }
index 80344a9e1f211bd2501911c7dc6272f39659264b..843af3d5ad64fad215932d91c7c25a7300febf92 100644 (file)
@@ -19,15 +19,15 @@ TFL_AIM_GROUND
 vector turret_stdproc_aim_generic()
 {
 
-    vector pre_pos,prep;
-    float distance,impact_time,i,mintime;
+    vector pre_pos, prep;
+    float distance, impact_time, i, mintime;
 
     turret_tag_fire_update();
 
     if(self.aim_flags & TFL_AIM_SIMPLE)
         return real_origin(self.enemy);
 
-       mintime = max(self.attack_finished_single - time,0) + sys_frametime ;
+       mintime = max(self.attack_finished_single - time,0) + sys_frametime;
 
     // Baseline
     pre_pos = real_origin(self.enemy);
index b7af33af82e506cc657ceee10e3cd6573fbb42d5..c7f25a4467825f6b9c6eefbd7ba9f4fc96b73289 100644 (file)
@@ -287,8 +287,6 @@ void turret_stdproc_damage (entity inflictor, entity attacker, float damage, flo
     // thorw head slightly off aim when hit?
     if (self.damage_flags & TFL_DMG_HEADSHAKE)
     {
-        //baseent.tur_aimoff_x += (random() * damage);
-        //baseent.tur_aimoff_y += ((random()*0.75) * damage);
         self.tur_head.angles_x = self.tur_head.angles_x + (-0.5 + random()) * damage;
         self.tur_head.angles_y = self.tur_head.angles_y + (-0.5 + random()) * damage;
     }
@@ -296,11 +294,8 @@ void turret_stdproc_damage (entity inflictor, entity attacker, float damage, flo
     if (self.turrcaps_flags & TFL_TURRCAPS_MOVE)
         self.velocity = self.velocity + vforce;
 
-    // FIXME: Better damage feedback
-    // Start burning when we have 10% or less health left
-    //if (self.health < (self.tur_health * 0.1))
-    //    self.effects = EF_FLAME;
-
+    // FIXME: Better damage feedback?
+    
     if (self.health <= 0)
     {
         self.event_damage           = SUB_Null;
index 4a2e886af863bdca739e41c43786dc5f684bc5ab..7d023e99ef199d9049f3954a9779e4847fa61881 100644 (file)
@@ -637,6 +637,10 @@ void turret_think()
     if (self.ammo < self.ammo_max)
         self.ammo = min(self.ammo + self.ammo_recharge, self.ammo_max);
 
+    if (self.health < (self.tur_health * 0.5))
+               if(random() < 0.25)
+                       te_spark(self.origin + '0 0 40', randomvec() * 256 + '0 0 256', 16);
+                       
     // Inactive turrets needs to run the think loop,
     // So they can handle animation and wake up if need be.
     if not (self.tur_active)
@@ -873,6 +877,7 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base
     {
         e = spawn();
 
+        /*
         setorigin(e,'0 0 0');
         setmodel(e,"models/turrets/plasma.md3");
         vector v;
@@ -883,6 +888,7 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base
             //crash();
         }
         setmodel(e,"");
+        */
 
         e.classname = "turret_manager";
         e.think = turrets_manager_think;
@@ -1129,6 +1135,10 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base
 // Offsets & origins
     if (!self.tur_shotorg)   self.tur_shotorg = '50 0 50';
 
+// Gane hooks
+       if(MUTATOR_CALLHOOK(TurretSpawn))
+               return 0;
+
 // End of default & sanety checks, start building the turret.
 
 // Spawn extra bits
@@ -1234,7 +1244,7 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base
         activator = ee;
         self.use();
     }
-
+       
        turret_stdproc_respawn();
     return 1;
 }
index 601a934c5b206eaecc2833aedc5af1048a3e7ec1..03b0c40ad91cc49b873ee48344a18c250d6eeb0a 100644 (file)
@@ -2,19 +2,6 @@ void spawnfunc_turret_fusionreactor();
 void turret_fusionreactor_dinit();
 void turret_fusionreactor_fire();
 
-float turret_fusionreactor_firecheck()
-{
-    if (self.enemy == world) return 0;
-    if not (self.enemy.ammo_flags & TFL_AMMO_RECIVE) return 0;
-    if not (self.enemy.ammo_flags & TFL_AMMO_ENERGY) return 0;
-    if (self.ammo < self.shot_dmg) return 0;
-    if (self.enemy.ammo >= self.enemy.ammo_max) return 0;
-    if (self.tur_dist_aimpos > self.target_range) return 0;
-    if (self.tur_dist_aimpos < self.target_range_min) return 0;
-
-    return 1;
-}
-
 void turret_fusionreactor_fire()
 {
     vector fl_org;
@@ -22,20 +9,51 @@ void turret_fusionreactor_fire()
     self.enemy.ammo = min(self.enemy.ammo + self.shot_dmg,self.enemy.ammo_max);
     fl_org = 0.5 * (self.enemy.absmin + self.enemy.absmax);
     te_smallflash(fl_org);
-    //te_lightning1(world,self.origin,self.enemy.origin);
 }
 
 void turret_fusionreactor_postthink()
 {
-    float f;
-    f = self.ammo / self.ammo_max;
-    self.tur_head.avelocity = '0 250 0' * f;
+    self.tur_head.avelocity = '0 250 0' * (self.ammo / self.ammo_max);
 }
 
+/*
 void turret_fusionreactor_respawnhook()
 {
     self.tur_head.avelocity = '0 50 0';
 }
+*/
+
+/**
+** Preforms pre-fire checks for fusionreactor
+**/
+float turret_fusionreactor_firecheck()
+{
+       if (self.attack_finished_single > time) 
+               return 0;
+
+       if (self.enemy.deadflag != DEAD_NO)
+               return 0;
+
+       if (self.enemy == world)
+               return 0;
+
+       if (self.ammo < self.shot_dmg)
+               return 0;
+
+       if (self.enemy.ammo >= self.enemy.ammo_max)
+               return 0;
+       
+       if (vlen(self.enemy.origin - self.origin) > self.target_range)
+               return 0;                               
+       
+       if(self.team != self.enemy.team)
+               return 0;
+       
+       if not (self.enemy.ammo_flags & TFL_AMMO_ENERGY)
+               return 0;    
+       
+       return 1;
+}
 
 void turret_fusionreactor_dinit()
 {
@@ -48,7 +66,7 @@ void turret_fusionreactor_dinit()
     self.shoot_flags         = TFL_SHOOT_HITALLVALID;
     self.aim_flags           = TFL_AIM_NO;
     self.track_flags         = TFL_TRACK_NO;
-    self.turret_respawnhook  = turret_fusionreactor_respawnhook;
+    // self.turret_respawnhook  = turret_fusionreactor_respawnhook;
 
     if (turret_stdproc_init("fusreac_std",0,"models/turrets/base.md3","models/turrets/reactor.md3") == 0)
     {
index 4495b720c54e02eecd3ab2ca62e772aa31771adb..151b508f4105b7bb336391678c137c2bbc9cfe9e 100644 (file)
@@ -397,6 +397,7 @@ void W_Crylink_Attack (void)
                        proj.fade_rate = 1 / autocvar_g_balance_crylink_primary_other_fadetime;
                        proj.nextthink = time + autocvar_g_balance_crylink_primary_other_lifetime + autocvar_g_balance_crylink_primary_other_fadetime;
                }
+               proj.teleport_time = time + autocvar_g_balance_crylink_primary_joindelay;
                proj.cnt = autocvar_g_balance_crylink_primary_bounces;
                //proj.scale = 1 + 1 * proj.cnt;
 
@@ -484,6 +485,7 @@ void W_Crylink_Attack2 (void)
                        proj.fade_rate = 1 / autocvar_g_balance_crylink_secondary_line_fadetime;
                        proj.nextthink = time + autocvar_g_balance_crylink_secondary_line_lifetime + autocvar_g_balance_crylink_secondary_line_fadetime;
                }
+               proj.teleport_time = time + autocvar_g_balance_crylink_secondary_joindelay;
                proj.cnt = autocvar_g_balance_crylink_secondary_bounces;
                //proj.scale = 1 + 1 * proj.cnt;
 
@@ -542,7 +544,7 @@ float w_crylink(float req)
                }
                else
                {
-                       if (self.crylink_waitrelease)
+                       if (self.crylink_waitrelease && (!self.crylink_lastgroup || time > self.crylink_lastgroup.teleport_time))
                        {
                                // fired and released now!
                                if(self.crylink_lastgroup)
@@ -550,7 +552,6 @@ float w_crylink(float req)
                                        vector pos;
                                        entity linkjoineffect;
 
-
                                        if(self.crylink_waitrelease == 1)
                                        {
                                                pos = W_Crylink_LinkJoin(self.crylink_lastgroup, autocvar_g_balance_crylink_primary_joinspread * autocvar_g_balance_crylink_primary_speed, autocvar_g_balance_crylink_primary_jointime);
@@ -567,8 +568,6 @@ float w_crylink(float req)
                                        linkjoineffect.nextthink = time + w_crylink_linkjoin_time;
                                        linkjoineffect.owner = self;
                                        setorigin(linkjoineffect, pos);
-
-
                                }
                                self.crylink_waitrelease = 0;
                                if(!w_crylink(WR_CHECKAMMO1) && !w_crylink(WR_CHECKAMMO2))
index 2a6b1f393e002814af9292f63042894e4c9cb9ef..13301a0f7325b3e8dc4cc54ad9e77288d19e431d 100644 (file)
@@ -426,7 +426,7 @@ float w_electro(float req)
                        W_Electro_Attack2();
                        self.electro_count = autocvar_g_balance_electro_secondary_count;
                        weapon_thinkf(WFRAME_FIRE2, autocvar_g_balance_electro_secondary_animtime, w_electro_checkattack);
-                       self.electro_secondarytime = time + autocvar_g_balance_electro_secondary_refire2;
+                       self.electro_secondarytime = time + autocvar_g_balance_electro_secondary_refire2 * W_WeaponRateFactor();
                }
        }
        else if (req == WR_PRECACHE)
index 08c4a901e12083d7bdd972ed8755e3010cf97d9e..d9d717ecdeb6d3165d2c2109d74b55917f756b19 100644 (file)
@@ -56,9 +56,12 @@ void shotgun_meleethink (void)
        vector angle;
        angle = v_forward;
 
+       float meleetime;
+       meleetime = autocvar_g_balance_shotgun_secondary_melee_time * W_WeaponRateFactor();
+
        // perform trace
        float f;
-       f = (self.cnt + autocvar_g_balance_shotgun_secondary_melee_time - time) / autocvar_g_balance_shotgun_secondary_melee_time * 2 - 1;
+       f = (self.cnt + meleetime - time) / meleetime * 2 - 1;
        vector targpos;
        targpos = self.owner.origin + self.owner.view_ofs + angle * autocvar_g_balance_shotgun_secondary_melee_range + v_right * f * autocvar_g_balance_shotgun_secondary_melee_swing + v_up * f * autocvar_g_balance_shotgun_secondary_melee_swing;
 
@@ -74,7 +77,7 @@ void shotgun_meleethink (void)
                Damage (trace_ent, self.owner, self.owner, autocvar_g_balance_shotgun_secondary_damage * min(1, f + 1), WEP_SHOTGUN | HITTYPE_SECONDARY , self.owner.origin + self.owner.view_ofs, force);
                remove(self);
        }
-       else if(time >= self.cnt + autocvar_g_balance_shotgun_secondary_melee_time) // missed, remove ent
+       else if(time >= self.cnt + meleetime) // missed, remove ent
                remove(self);
        else // continue swinging the weapon in hope of hitting someone :)
                self.nextthink = time;