]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge remote branch 'origin/master' into samual/seeker_updates
authorSamual <samual@xonotic.org>
Mon, 21 Mar 2011 17:07:40 +0000 (13:07 -0400)
committerSamual <samual@xonotic.org>
Mon, 21 Mar 2011 17:07:40 +0000 (13:07 -0400)
balance25.cfg
balanceLeeStricklin.cfg
balanceSamual.cfg
balanceXonotic.cfg
balancetZork.cfg
models/sprites/make-sprites.sh
models/sprites/tagged-target_frame0.tga [new file with mode: 0644]
models/sprites/tagged-target_frame1.tga [new file with mode: 0644]
qcsrc/client/projectile.qc
qcsrc/server/autocvars.qh
qcsrc/server/w_seeker.qc

index 665dda5c90682f44730e5c33a4901e2239934e28..0ae42877a122718619f19461d4126697a12613d1 100644 (file)
@@ -726,54 +726,42 @@ set g_balance_fireball_reload_ammo 0 //default: 60
 set g_balance_fireball_reload_time 2
 // }}}
 // {{{ seeker
-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_flac_edgedamage 10
-set g_balance_seeker_flac_force 50
-set g_balance_seeker_flac_lifetime 0.1
-set g_balance_seeker_flac_lifetime_rand 0.05
-set g_balance_seeker_flac_radius 100
-set g_balance_seeker_flac_refire 0.1
-set g_balance_seeker_flac_speed 3000
-set g_balance_seeker_flac_speed_up 1000
-set g_balance_seeker_flac_speed_z 0
-set g_balance_seeker_flac_spread 0.4
-set g_balance_seeker_missile_accel 3000
+set g_balance_seeker_tag_ammo 1
+set g_balance_seeker_tag_animtime 0.2
+set g_balance_seeker_tag_damageforcescale 4
+set g_balance_seeker_tag_health 5
+set g_balance_seeker_tag_lifetime 15
+set g_balance_seeker_tag_refire 0.75 // 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_decel 1400
 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_edgedamage 8
+set g_balance_seeker_missile_force 50 // LOG: 100 -> 150
 set g_balance_seeker_missile_health 5
 set g_balance_seeker_missile_lifetime 15
 set g_balance_seeker_missile_proxy 0
 set g_balance_seeker_missile_proxy_delay 0.2
 set g_balance_seeker_missile_proxy_maxrange 45
-set g_balance_seeker_missile_radius 80
-set g_balance_seeker_missile_refire 0.5
-set g_balance_seeker_missile_smart 1
+set g_balance_seeker_missile_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
index 77aac858a72abb42b7f3ac1b53828439df052670..67cc26dde8780a3773223f14bdd57853b93cf0a4 100644 (file)
@@ -726,54 +726,42 @@ set g_balance_fireball_reload_ammo 0 //default: 60
 set g_balance_fireball_reload_time 2
 // }}}
 // {{{ seeker
-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_flac_edgedamage 10
-set g_balance_seeker_flac_force 50
-set g_balance_seeker_flac_lifetime 0.1
-set g_balance_seeker_flac_lifetime_rand 0.05
-set g_balance_seeker_flac_radius 100
-set g_balance_seeker_flac_refire 0.1
-set g_balance_seeker_flac_speed 3000
-set g_balance_seeker_flac_speed_up 1000
-set g_balance_seeker_flac_speed_z 0
-set g_balance_seeker_flac_spread 0.4
-set g_balance_seeker_missile_accel 3000
+set g_balance_seeker_tag_ammo 1
+set g_balance_seeker_tag_animtime 0.2
+set g_balance_seeker_tag_damageforcescale 4
+set g_balance_seeker_tag_health 5
+set g_balance_seeker_tag_lifetime 15
+set g_balance_seeker_tag_refire 0.75 // 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 8
-set g_balance_seeker_missile_damage 25
+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_decel 1400
 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_edgedamage 8
+set g_balance_seeker_missile_force 50 // LOG: 100 -> 150
 set g_balance_seeker_missile_health 5
 set g_balance_seeker_missile_lifetime 15
 set g_balance_seeker_missile_proxy 0
 set g_balance_seeker_missile_proxy_delay 0.2
 set g_balance_seeker_missile_proxy_maxrange 45
-set g_balance_seeker_missile_radius 80
-set g_balance_seeker_missile_refire 0.5
-set g_balance_seeker_missile_smart 1
+set g_balance_seeker_missile_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
index a117a44a9259546ef1b1b15794512402bde868ea..8a8ed67550e7260afcdc7d2d945d92bb72966e89 100644 (file)
@@ -726,54 +726,42 @@ set g_balance_fireball_reload_ammo 0 //default: 60
 set g_balance_fireball_reload_time 2
 // }}}
 // {{{ seeker
-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_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_speed 3000
-set g_balance_seeker_flac_speed_up 0
-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_tag_ammo 1
+set g_balance_seeker_tag_animtime 0.2
+set g_balance_seeker_tag_damageforcescale 4
+set g_balance_seeker_tag_health 5
+set g_balance_seeker_tag_lifetime 15
+set g_balance_seeker_tag_refire 0.75 // 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_decel 1400
 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_edgedamage 8
+set g_balance_seeker_missile_force 50 // LOG: 100 -> 150
 set g_balance_seeker_missile_health 5
 set g_balance_seeker_missile_lifetime 15
 set g_balance_seeker_missile_proxy 0
 set g_balance_seeker_missile_proxy_delay 0.2
 set g_balance_seeker_missile_proxy_maxrange 45
-set g_balance_seeker_missile_radius 80
-set g_balance_seeker_missile_refire 0.5
-set g_balance_seeker_missile_smart 1
+set g_balance_seeker_missile_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
index a782c6387927577d9e0b0d92a39d7d61c1deb534..f3503688068b2d6ffb5784d028a92ff14f73fe3d 100644 (file)
@@ -726,54 +726,42 @@ set g_balance_fireball_reload_ammo 0 //default: 60
 set g_balance_fireball_reload_time 2
 // }}}
 // {{{ seeker
-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_flac_edgedamage 10
-set g_balance_seeker_flac_force 50
-set g_balance_seeker_flac_lifetime 0.1
-set g_balance_seeker_flac_lifetime_rand 0.05
-set g_balance_seeker_flac_radius 100
-set g_balance_seeker_flac_refire 0.1
-set g_balance_seeker_flac_speed 3000
-set g_balance_seeker_flac_speed_up 1000
-set g_balance_seeker_flac_speed_z 0
-set g_balance_seeker_flac_spread 0.4
-set g_balance_seeker_missile_accel 1400
+set g_balance_seeker_tag_ammo 1
+set g_balance_seeker_tag_animtime 0.2
+set g_balance_seeker_tag_damageforcescale 4
+set g_balance_seeker_tag_health 5
+set g_balance_seeker_tag_lifetime 15
+set g_balance_seeker_tag_refire 0.75 // 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.2
 set g_balance_seeker_missile_count 3 // LOG: 8 -> 3
-set g_balance_seeker_missile_damage 30 // LOG: 15 -> 30
+set g_balance_seeker_missile_damage 16 // LOG: 15 -> 30
 set g_balance_seeker_missile_damageforcescale 4
 set g_balance_seeker_missile_decel 1400
 set g_balance_seeker_missile_delay 0.25
-set g_balance_seeker_missile_edgedamage 10
-set g_balance_seeker_missile_force 150 // LOG: 100 -> 150
+set g_balance_seeker_missile_edgedamage 8
+set g_balance_seeker_missile_force 50 // LOG: 100 -> 150
 set g_balance_seeker_missile_health 5
 set g_balance_seeker_missile_lifetime 15
 set g_balance_seeker_missile_proxy 0
 set g_balance_seeker_missile_proxy_delay 0.2
 set g_balance_seeker_missile_proxy_maxrange 45
-set g_balance_seeker_missile_radius 80
-set g_balance_seeker_missile_refire 0.5
-set g_balance_seeker_missile_smart 1
+set g_balance_seeker_missile_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 1300 // LOG: 1400 -> 1300
+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.2
-set g_balance_seeker_tag_damageforcescale 4
-set g_balance_seeker_tag_health 5
-set g_balance_seeker_tag_lifetime 15
-set g_balance_seeker_tag_refire 0.75 // LOG: 0.7 -> 0.75
-set g_balance_seeker_tag_speed 5000
-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
index 2fb726764c7bae06ccea84a81d78af958fbd8171..5b1b0c564e155db2b38a82cc393497cda0b42519 100644 (file)
@@ -725,54 +725,42 @@ set g_balance_fireball_reload_ammo 0 //default: 60
 set g_balance_fireball_reload_time 2
 // }}}
 // {{{ seeker
-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_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.02
-set g_balance_seeker_flac_radius 100
-set g_balance_seeker_flac_refire 0.1
-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_tag_ammo 1
+set g_balance_seeker_tag_animtime 0.2
+set g_balance_seeker_tag_damageforcescale 4
+set g_balance_seeker_tag_health 5
+set g_balance_seeker_tag_lifetime 15
+set g_balance_seeker_tag_refire 0.75 // 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 50
-set g_balance_seeker_missile_damageforcescale 2
+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 1400
 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_edgedamage 8
+set g_balance_seeker_missile_force 50 // LOG: 100 -> 150
 set g_balance_seeker_missile_health 5
 set g_balance_seeker_missile_lifetime 15
 set g_balance_seeker_missile_proxy 0
 set g_balance_seeker_missile_proxy_delay 0.2
 set g_balance_seeker_missile_proxy_maxrange 45
-set g_balance_seeker_missile_radius 80
-set g_balance_seeker_missile_refire 0.5
-set g_balance_seeker_missile_smart 1
+set g_balance_seeker_missile_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 1400
+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 1
-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
index 87f24a6d0b49fed6eb041a421f8b080d1e99002e..9f08c21f9ba13bf30c4540a194507a1ce508e8c0 100644 (file)
@@ -206,3 +206,5 @@ sprite item-fuelregen     "Fuel regen"    ff8000 000000 0.5 ff8000 ffff00 0.5
 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
diff --git a/models/sprites/tagged-target_frame0.tga b/models/sprites/tagged-target_frame0.tga
new file mode 100644 (file)
index 0000000..3ff6c2f
Binary files /dev/null and b/models/sprites/tagged-target_frame0.tga differ
diff --git a/models/sprites/tagged-target_frame1.tga b/models/sprites/tagged-target_frame1.tga
new file mode 100644 (file)
index 0000000..60881fc
Binary files /dev/null and b/models/sprites/tagged-target_frame1.tga differ
index cede03c5a082c3e756cb9378b09885212d843781..319c36b9ae9461c59d8908e90817d063470fd5ab 100644 (file)
@@ -293,7 +293,7 @@ void Ent_Projectile()
                        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_SEEKER: setmodel(self, "models/tagrocket.md3"); self.traileffect = particleeffectnum("TR_ROCKET"); break;
                        default:
                                error("Received invalid CSQC projectile, can't work with this!");
                                break;
@@ -372,7 +372,6 @@ void Ent_Projectile()
                                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;
@@ -381,6 +380,7 @@ void Ent_Projectile()
                                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;
index c78460c17391b4cebfdd0cce5f6b8e55a57d5db3..0772e3aaa1efe2cff60c563f008502a84cbb86d2 100644 (file)
@@ -579,17 +579,9 @@ float autocvar_g_balance_rune_strength_force;
 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_flac_ammo;
-float autocvar_g_balance_seeker_flac_animtime;
-float autocvar_g_balance_seeker_flac_damage;
-float autocvar_g_balance_seeker_flac_edgedamage;
-float autocvar_g_balance_seeker_flac_force;
-float autocvar_g_balance_seeker_flac_lifetime;
-float autocvar_g_balance_seeker_flac_lifetime_rand;
-float autocvar_g_balance_seeker_flac_radius;
-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;
@@ -603,6 +595,7 @@ float autocvar_g_balance_seeker_missile_proxy;
 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;
@@ -616,6 +609,7 @@ float autocvar_g_balance_seeker_tag_health;
 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;
index 9084cc04da2027affd8b8af43cac58de6d4b984d..20519606910a5f45985cfa949431d6fc38d7829e 100644 (file)
@@ -4,6 +4,8 @@ REGISTER_WEAPON(SEEKER, w_seeker, IT_ROCKETS, 8, WEP_FLAG_NORMAL | WEP_FLAG_RELO
 #ifdef SVQC
 //.float proxytime; = autoswitch
 //.float tl; = wait
+.entity tag_target, wps_tag_tracker;
+.float tag_time;
 
 void Seeker_Missile_Explode ()
 {
@@ -154,7 +156,7 @@ void Seeker_Missile_Animate()
 }
 */
 
-void Seeker_Fire_Missile(vector f_diff)
+void Seeker_Fire_Missile(vector f_diff, entity m_target)
 {
        local entity missile;
 
@@ -178,14 +180,18 @@ void Seeker_Fire_Missile(vector f_diff)
        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);
@@ -201,46 +207,75 @@ void Seeker_Fire_Missile(vector f_diff)
        other = missile; MUTATOR_CALLHOOK(EditProjectile);
 }
 
-void Seeker_Vollycontroler_Think()
+entity Seeker_Tagged_Info(entity isowner, entity istarget)
 {
-       float c;
-       entity oldself,oldenemy;
-       self.cnt = self.cnt - 1;
+       entity tag;
+       for(tag = world; (tag = find(tag, classname, "tag_tracker")); ) 
+               if ((tag.owner == isowner) && (tag.tag_target == istarget))
+                       return tag;
+               
+       return world;
+}
 
-       if((!(self.owner.items & IT_UNLIMITED_AMMO) && self.owner.ammo_rockets < autocvar_g_balance_seeker_missile_ammo) || (self.cnt <= -1) || (self.owner.deadflag != DEAD_NO) || (self.owner.switchweapon != WEP_SEEKER))
+void Seeker_Attack()
+{
+       entity tracker, closest_target;
+       
+       for(tracker = world; (tracker = find(tracker, classname, "tag_tracker")); ) if (tracker.owner == self)
        {
-               remove(self);
-               return;
+               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;
        }
-
-       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);
-       switch(c)
+               
+       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;
+        
+       // we don't need to do this because the model is going to be changed anyway. 
+       // CLEAN THIS UP IN THE FUTURE !!!!!!!!!!!
+       /*
+       switch(mod(self.bulletcounter, 4))
        {
                case 0:
-                       Seeker_Fire_Missile('-1.25 -3.75 0');
+                       Seeker_Fire_Missile('-1.25 -3.75 0', closest_target);
                        break;
                case 1:
-                       Seeker_Fire_Missile('+1.25 -3.75 0');
+                       Seeker_Fire_Missile('+1.25 -3.75 0', closest_target);
                        break;
                case 2:
-                       Seeker_Fire_Missile('-1.25 +3.75 0');
+                       Seeker_Fire_Missile('-1.25 +3.75 0', closest_target);
                        break;
                case 3:
                default:
-                       Seeker_Fire_Missile('+1.25 +3.75 0');
+                       Seeker_Fire_Missile('+1.25 +3.75 0', closest_target);
                        break;
        }
+       */
+       
+       Seeker_Fire_Missile('0 0 0', closest_target);
+}
 
-       self.enemy = oldenemy;
-       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;
 }
 
 void Seeker_Tag_Explode ()
@@ -261,7 +296,6 @@ void Seeker_Tag_Damage (entity inflictor, entity attacker, float damage, float d
                Seeker_Tag_Explode();
 }
 
-
 void Seeker_Tag_Touch()
 {
        vector dir;
@@ -277,13 +311,31 @@ void Seeker_Tag_Touch()
        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) // 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.classname   = "tag_tracker";
+                       e.owner       = self.owner;
+                       e.think       = Seeker_Tracker_Think;
+                       e.nextthink   = time;
+                       e.tag_target  = other;
+                       e.tag_time    = time;
+               }
+                       
+               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);
@@ -328,81 +380,6 @@ void Seeker_Fire_Tag()
        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);
-}
-
 void spawnfunc_weapon_seeker (void)
 {
        weapon_defaultspawnfunc(WEP_SEEKER);
@@ -413,28 +390,32 @@ float w_seeker(float req)
        float ammo_amount;
 
        if (req == WR_AIM)
-               self.BUTTON_ATCK = bot_aim(autocvar_g_balance_seeker_tag_speed, 0, 20, FALSE);
-
+       {
+               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 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 (weapon_prepareattack(0, autocvar_g_balance_seeker_missile_refire))
                        {
-                               Seeker_Fire_Tag();
-                               weapon_thinkf(WFRAME_FIRE1, autocvar_g_balance_seeker_tag_animtime, w_ready);
+                               Seeker_Attack();
+                               weapon_thinkf(WFRAME_FIRE2, autocvar_g_balance_seeker_missile_animtime, w_ready);
                        }
                }
 
                else if (self.BUTTON_ATCK2)
                {
-                       if (weapon_prepareattack(1, autocvar_g_balance_seeker_flac_refire))
+                       if (weapon_prepareattack(1, autocvar_g_balance_seeker_tag_refire))
                        {
-                               Seeker_Fire_Flac();
-                               weapon_thinkf(WFRAME_FIRE2, autocvar_g_balance_seeker_flac_animtime, w_ready);
+                               Seeker_Fire_Tag();
+                               weapon_thinkf(WFRAME_FIRE1, autocvar_g_balance_seeker_tag_animtime, w_ready);
                        }
                }
        }
@@ -444,7 +425,7 @@ float w_seeker(float req)
                precache_model ("models/weapons/v_seeker.md3");
                precache_model ("models/weapons/h_seeker.iqm");
                precache_sound ("weapons/tag_fire.wav");
-               precache_sound ("weapons/flac_fire.wav");
+               //precache_sound ("weapons/flac_fire.wav");
                precache_sound ("weapons/seeker_fire.wav");
                //precache_sound ("weapons/reload.wav"); // until weapons have individual reload sounds, precache the reload sound somewhere else
        }
@@ -455,14 +436,14 @@ float w_seeker(float req)
        }
        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)
@@ -479,59 +460,40 @@ float w_seeker(float req)
        {
                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");
@@ -545,9 +507,9 @@ float w_seeker(float req)
        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;
 }