]> icculus.org git repositories - divverent/nexuiz.git/blob - TeamNexuiz/game/gamec/scout.c
Added a Game C folder
[divverent/nexuiz.git] / TeamNexuiz / game / gamec / scout.c
1 void SpecialShieldThink()\r
2 {\r
3         if(!self.owner.special_active || self.owner.health <= 0)\r
4         {\r
5                 remove(self.enemy);\r
6                 remove(self);\r
7                 return;\r
8         }\r
9         self.nextthink = time;\r
10 \r
11         // let tag attachment handle this\r
12         //setorigin(self, 0.5*(self.owner.absmin + self.owner.absmax));\r
13         //self.velocity = self.owner.velocity;\r
14 \r
15         self.alpha = 0.3 + 0.3*((self.owner.special_time - time) / cvar("g_balance_shield_duration"));\r
16         if(self.alpha < 0.05)\r
17                 self.alpha = 0.05;\r
18 \r
19         self.enemy.alpha = self.alpha;\r
20         self.enemy.effects = self.effects;\r
21 };\r
22 \r
23 void ActivateSpecialShield(float emergency_shield)\r
24 {\r
25         vector org;\r
26         entity e;\r
27         if(self.special_time > time)\r
28         {\r
29                 return; // currently active or recharging\r
30         }\r
31 \r
32         sprint(self, "<==Shield activated!==>\n");\r
33 \r
34         self.special_active = 1;\r
35         if(emergency_shield)\r
36                 self.special_time = time + cvar("g_balance_shield_emergency_duration");\r
37         else\r
38                 self.special_time = time + cvar("g_balance_shield_duration");\r
39 \r
40         e = spawn();\r
41         e.owner = self;\r
42         e.think = SpecialShieldThink;\r
43         e.nextthink = time;\r
44         e.alpha = 1;\r
45 \r
46         e.colormod_x = 255;\r
47         e.colormod_y = 0;\r
48         e.colormod_z = 128;\r
49         e.colormod = e.colormod * (1/255) * 1.2;\r
50 \r
51         e.effects = EF_ADDITIVE;\r
52 \r
53         e.movetype = MOVETYPE_NONE;\r
54         e.solid = SOLID_NOT;\r
55 \r
56         org = 0.5*(self.absmin + self.absmax) - self.origin;\r
57 \r
58         setmodel(e, "models/misc/shield_s.mdl");\r
59         setorigin(e, org + '0 0 16');//0.5*(self.absmin + self.absmax));\r
60 \r
61         setattachment(e, self, "");\r
62 \r
63         e.enemy = spawn();\r
64         e.enemy.owner = e;\r
65         e.enemy.alpha = 1;\r
66         e.enemy.colormod = e.colormod;\r
67         setmodel(e.enemy, e.model);\r
68 \r
69         // use viewmodelforclient, since setattachment makes it invisible to the player\r
70         e.enemy.viewmodelforclient = self;\r
71         setorigin(e.enemy, e.origin);//'0 0 0');//0.5*(self.absmin + self.absmax));\r
72 \r
73         //setattachment(e.enemy, e, "");\r
74         //setorigin(e.enemy, e.origin);//0.5*(self.absmin + self.absmax));\r
75 }\r
76 \r
77 float SpecialShieldProtect(float damage)\r
78 {\r
79         // check for emergency activate\r
80         if(!self.special_active && self.special_time < time) // shield is off but ready\r
81         {\r
82                 if(damage > self.health - 5) // this attack will be lethal or dang-well close\r
83                         ActivateSpecialShield(TRUE); // emergency activate for less time, but save me\r
84         }\r
85 \r
86         if(!self.special_active || self.special_time < time) // shield is off\r
87                 return damage; // don't alter damage\r
88 \r
89 \r
90         damage = damage - damage * (cvar("g_balance_shield_protection") / 100);\r
91         if(damage < 0)\r
92                 damage = 0;\r
93         return damage;\r
94 }\r
95 \r
96 void ScoutSpecial()\r
97 {\r
98         ActivateSpecialShield(FALSE);\r
99 }\r
100 \r
101 void ScoutGrenade(float req)\r
102 {\r
103         if(req == WR_GRENADE1)\r
104         {\r
105                 if(W_ThrowGrenade(W_ConcussionGrenade))\r
106                         self.grenade_time = time + cvar("g_balance_grenade_concussion_refire");\r
107         }\r
108         else if(req == WR_GRENADE2)\r
109         {\r
110 \r
111                 self.grenade_time = time + 2;\r
112         }\r
113 }\r
114 \r
115 \r
116 void ScoutPreThink()\r
117 {\r
118         if(self.special_time != 0 && self.special_time < time)\r
119         {\r
120                 // the timer has run out\r
121 \r
122                 // shield was active, go into recharge mode\r
123                 if(self.special_active)\r
124                 {\r
125                         self.special_active = 0;\r
126                         self.special_time = time + cvar("g_balance_shield_recharge_time");\r
127                 }\r
128                 else\r
129                 {\r
130                         self.special_time = 0; // finished recharging; ready to activate again\r
131                 }\r
132         }\r
133 }\r
134 \r
135 void ScoutPostThink()\r
136 {\r
137 }\r
138 \r
139 void BecomeScout(float portion)\r
140 {\r
141         self.max_health = cvar("g_balance_class_scout_health") * portion;\r
142 \r
143         self.max_armor = cvar("g_balance_class_scout_armor") * portion;\r
144 \r
145         self.mass = cvar("g_balance_class_scout_mass");\r
146 \r
147         SetPlayerSpeed(self);\r
148 \r
149         self.items = IT_WEP1 | IT_WEP2 | IT_WEP3 | IT_WEP4;\r
150         self.switchweapon = WEP2;\r
151         self.ammo_shells = floor(20 * portion);\r
152         self.ammo_nails = floor(150 * portion);\r
153         self.ammo_rockets = floor(0 * portion);\r
154         self.ammo_cells = floor(0 * portion);\r
155         self.playerclass = 1;           // TF P.C.\r
156         SetMaxAmmoFor (1);\r
157 }\r