4 if(!self.special_active)
\r
6 self.special_active = 0;
\r
7 ResetPlayerModel(self);
\r
16 if(self.health <= cvar("g_balance_spy_cloak_min_health"))
\r
18 sprint(self, "not healthy enough\n");
\r
22 self.health = self.health - cvar("g_balance_spy_cloak_cost_start");
\r
26 self.special_active = 1;
\r
27 self.special_time = time;
\r
32 if(self.special_active)
\r
40 void SpyGrenade(float req)
\r
43 if(req == WR_GRENADE1)
\r
45 if( W_ThrowGrenade(W_NailGrenade) )
\r
46 self.grenade_time = time + cvar("g_balance_grenade_nail_refire");
\r
48 else if(req == WR_GRENADE2)
\r
53 void SpyCloakFlicker(entity pl)
\r
55 if(pl.class != CLASS_SPY)
\r
57 if(!pl.special_active)
\r
60 pl.alpha = bound(0.001, pl.alpha + 0.3 + random()*0.2, 1);
\r
65 local vector m1, m2;
\r
66 local float desired_alpha, spd, min_health;
\r
68 if(self.special_active) // am I cloaked?
\r
70 min_health = cvar("g_balance_spy_cloak_min_health");
\r
71 if(self.health < min_health || self.onfire != world || self.poison_damage)
\r
77 spd = vlen(self.velocity);
\r
78 spd = spd - self.speed*1.15; // spy can stay cloaked up to his max speed (plus some extra to keep from flickering on slopes), but any faster and he starts to show...
\r
83 desired_alpha = bound(0,
\r
84 cvar("g_balance_spy_move_alpha")*spd / self.speed,
\r
85 cvar("g_balance_spy_move_alpha_max"));
\r
89 // adjust alpha to reflect new value
\r
90 if(self.alpha < desired_alpha)
\r
91 self.alpha = bound(0.001, self.alpha + 0.1, 1);
\r
92 else if(self.alpha > desired_alpha)
\r
93 self.alpha = bound(0.001, self.alpha - 0.1, 1);
\r
95 // take health/armor cost
\r
96 self.health = bound(min_health,
\r
97 self.health - cvar("g_balance_spy_cloak_cost_upkeeph") * frametime,
\r
99 // take health/armor cost
\r
100 self.armorvalue = bound(0,
\r
101 self.armorvalue - cvar("g_balance_spy_cloak_cost_upkeepa") * frametime,
\r
104 if(self.health <= min_health)
\r
111 self.special_time = time + 0.1;
\r
113 // if I'm fully cloaked, set my model to nothing
\r
114 if(self.alpha < 0.01 && self.model != "")
\r
118 setmodel (self, "");
\r
119 setsize (self, m1, m2);
\r
121 else if(self.alpha > 0.01 && self.model == "")
\r
123 ResetPlayerModel(self);
\r
126 self.alpha = bound(0.001, self.alpha, 1.0);
\r
128 // also cloak weapons
\r
129 self.weaponentity.alpha = 1 - 0.5*(1 - self.alpha);//self.alpha + 0.1;
\r
130 self.exteriorweaponentity.alpha = self.alpha; //self.weaponentity.alpha;
\r
134 if(self.alpha != 0)// && self.alpha != 1)
\r
135 {// not fully visible yet, keep phasing back in
\r
136 self.alpha = self.alpha + 0.1;
\r
137 self.weaponentity.alpha = 1 - (1 - self.alpha)*0.5;
\r
139 self.alpha = self.weaponentity.alpha = 0;
\r
142 // self.weaponentity.alpha = 0;
\r
147 /* if(self.special_active) // am I cloaked?
\r
149 if(self.health < 10)
\r
153 else if(self.model != "" && self.special_time <= time)
\r
154 {// not fully cloaked yet, but working on it
\r
155 self.alpha = self.alpha - 0.1;
\r
156 self.weaponentity.alpha = 1 - (1 - self.alpha)*0.5;//self.alpha + 0.1;
\r
157 self.special_time = time + 0.1;
\r
158 if(self.alpha < 0.1)
\r
162 setmodel (self, "");
\r
163 setsize (self, m1, m2);
\r
164 self.special_time = time + 1;
\r
167 else if(self.special_time <= time)
\r
168 {// fully cloaked, take health cost
\r
169 self.alpha = self.weaponentity.alpha = 0.25;
\r
170 self.special_time = time + 1;
\r
172 // reduce health & armor while cloaked
\r
173 self.health = self.health - 2;//3;
\r
174 if(self.armorvalue > 2)//3)
\r
175 self.armorvalue = self.armorvalue - 2;//3;
\r
180 if(self.alpha != 0 && self.alpha != 1)
\r
181 {// not fully visible yet, keep phasing back in
\r
182 self.alpha = self.alpha + 0.1;
\r
183 self.weaponentity.alpha = 1 - (1 - self.alpha)*0.5;
\r
188 self.weaponentity.alpha = 0;
\r
191 self.exteriorweaponentity.alpha = self.weaponentity.alpha;*/
\r
194 void SpyPostThink()
\r
198 void BecomeSpy(float portion)
\r
200 self.max_health = cvar("g_balance_class_spy_health") * portion;
\r
202 self.max_armor = cvar("g_balance_class_spy_armor") * portion;
\r
204 self.mass = cvar("g_balance_class_spy_mass");
\r
206 SetPlayerSpeed(self);
\r
208 self.items = IT_WEP1 | IT_WEP2 | IT_WEP3 | IT_WEP4;
\r
209 self.switchweapon = WEP2;
\r
210 self.ammo_shells = floor(20 * portion);
\r
211 self.ammo_nails = floor(50 * portion);
\r
212 self.ammo_rockets = floor(3 * portion);
\r
213 self.ammo_cells = floor(0 * portion);
\r
214 self.playerclass = TF_CLASS_SPY; // TF P.C.
\r
216 // fixme: also have off-hand grenade, different for each class
\r
217 // where to do that?
\r