]> icculus.org git repositories - divverent/nexuiz.git/blob - attic/TeamNexuiz/game/gamec/pyro.c
ctf movetype fix
[divverent/nexuiz.git] / attic / TeamNexuiz / game / gamec / pyro.c
1 \r
2 \r
3 void W_NapalmGlob_Think (void)\r
4 {\r
5         if(self.wait < time)\r
6         {\r
7                 remove(self);\r
8                 return;\r
9         }\r
10         self.nextthink = time + cvar("g_balance_napalm_glob_damagerate");\r
11 \r
12         RadiusDamage (self, self.owner, cvar("g_balance_napalm_glob_damage"), cvar("g_balance_napalm_glob_edgedamage"), cvar("g_balance_napalm_glob_radius"), world, cvar("g_balance_napalm_glob_force"), WEP_PYRO_SPECIAL);\r
13 }\r
14 \r
15 void W_NapalmGlob_Touch (void)\r
16 {\r
17         if(self.count)\r
18                 return;\r
19 \r
20         self.movetype = MOVETYPE_NONE;\r
21 \r
22         self.count = 1;\r
23 }\r
24 \r
25 void W_NapalmSpitGlob(vector org, vector vel)\r
26 {\r
27         entity gren;\r
28 \r
29         gren = spawn ();\r
30         gren.owner = self.owner;\r
31         gren.classname = "napalm";\r
32         gren.movetype = MOVETYPE_TOSS;\r
33         gren.solid = SOLID_BBOX;\r
34         setmodel(gren, "models/plasma.mdl");\r
35         setsize(gren, '0 0 0', '0 0 0');\r
36         setorigin(gren, org);\r
37 \r
38         gren.nextthink = time + 0.1;\r
39         gren.think = W_NapalmGlob_Think;\r
40         gren.touch = W_NapalmGlob_Touch;\r
41         gren.wait = time + cvar("g_balance_napalm_glob_duration");\r
42         gren.gravity = cvar("g_balance_napalm_glob_gravity");\r
43         gren.velocity = vel;\r
44         gren.avelocity = '100 150 100';\r
45         gren.count = 0;\r
46 \r
47         gren.angles = vectoangles (gren.velocity);\r
48 \r
49         gren.scale = 5;\r
50         gren.colormod = '5 0 0';\r
51         //gren.glow_size = cvar("g_balance_napalm_glob_radius");        // glow at damage radius\r
52         //gren.glow_color = 236;//250; // red\r
53 }\r
54 \r
55 void W_Napalm_Explode (void)\r
56 {\r
57         vector  org2, vel, vel2, vels, ang;\r
58         float num, angsize;\r
59 \r
60         setsize(self, '0 0 0', '0 0 0');\r
61 \r
62         org2 = findbetterlocation (self.origin);\r
63         //te_explosion (org2);\r
64         //effect (org2, "models/sprites/grenadeexplosion.spr32", 0, 20, 30);\r
65         sound (self, CHAN_BODY, "misc/gib.wav", 1, ATTN_NORM);\r
66 \r
67 //      RadiusDamage (self, self.owner, cvar("g_balance_napalm_damage"), cvar("g_balance_napalm_edgedamage"), cvar("g_balance_napalm_radius"), world, cvar("g_balance_napalm_force"), WEP_PYRO_SPECIAL);\r
68 \r
69         traceline(org2, org2 - '0 0 30', TRUE, self);\r
70         if(trace_fraction < 1)\r
71                 vels = '0 0 1';\r
72         else\r
73                 vels = '0 0 -1';\r
74 \r
75         num = cvar("g_balance_napalm_numglobs");\r
76         angsize = 360 / (num - 1);\r
77         ang_y = self.angles_y;\r
78         while(num > 0)\r
79         {\r
80                 if(num == 1)\r
81                 {\r
82                         vel = '0 0 0';\r
83                 }\r
84                 else\r
85                 {\r
86                         ang_y = ang_y + angsize;\r
87                         makevectors(ang);\r
88                         vel_x = v_forward_x;\r
89                         vel_y = v_forward_y;\r
90                         //vel_x = vels_x + crandom()*0.8;\r
91                         //vel_y = vels_y + crandom()*0.8;\r
92                 }\r
93                 vel2_z = vels_z + crandom()*0.8;\r
94                 vel = normalize(vel);\r
95                 vel2 = normalize(vel2);\r
96                 W_NapalmSpitGlob(org2, vel*cvar("g_balance_napalm_glob_speedh") + vel2*cvar("g_balance_napalm_glob_speedv"));\r
97                 num = num - 1;\r
98         }\r
99 \r
100         remove (self);\r
101 }\r
102 \r
103 void PyroSpecial()\r
104 {\r
105         if(self.special_time > time)\r
106                 return;\r
107         self.special_time = time + cvar("g_balance_napalm_firerate");\r
108 \r
109         local entity gren;\r
110         local vector org;\r
111 \r
112         sound (self, CHAN_WEAPON, "weapons/grenade_fire.wav", 1, ATTN_NORM);\r
113         self.punchangle_x = -4;\r
114         org = self.origin + self.view_ofs + v_forward * 15 + v_right * 5 + v_up * -12;\r
115 \r
116         gren = spawn ();\r
117         gren.owner = self;\r
118         gren.classname = "grenade";\r
119         gren.movetype = MOVETYPE_BOUNCE;\r
120         gren.solid = SOLID_BBOX;\r
121         setmodel(gren, "models/plasma.mdl");\r
122         setsize(gren, '-6 -6 -3', '6 6 3');\r
123         setorigin(gren, org);\r
124 \r
125         gren.nextthink = time + 5;\r
126         gren.think = W_Napalm_Explode;\r
127         gren.touch = W_Napalm_Explode;\r
128         gren.velocity = v_forward * cvar("g_balance_napalm_speed")\r
129                 + v_up * cvar("g_balance_napalm_speed_up");\r
130         gren.avelocity = '100 150 100';\r
131 \r
132         gren.angles = vectoangles (gren.velocity);\r
133 \r
134         gren.scale = 8;\r
135         gren.colormod = '5 0 0';\r
136 }\r
137 \r
138 \r
139 void PyroGrenade(float req)\r
140 {\r
141         if(req == WR_GRENADE1)\r
142         {\r
143                 if(W_ThrowGrenade(W_ConcussionGrenade))\r
144                         self.grenade_time = time + cvar("g_balance_grenade_concussion_refire");\r
145         }\r
146         else if(req == WR_GRENADE2)\r
147         {\r
148                 if(W_ThrowGrenade(W_Firebomb))\r
149                         self.grenade_time = time + cvar("g_balance_grenade_firebomb_refire");\r
150         }\r
151 }\r
152 \r
153 void PyroPreThink()\r
154 {\r
155 }\r
156 \r
157 void PyroPostThink()\r
158 {\r
159 }\r
160 \r
161 void BecomePyro(float portion)\r
162 {\r
163         self.max_health = cvar("g_balance_class_pyro_health") * portion;\r
164 \r
165         self.max_armor = cvar("g_balance_class_pyro_armor") * portion;\r
166 \r
167         self.mass = cvar("g_balance_class_pyro_mass");\r
168 \r
169         SetPlayerSpeed(self);\r
170 \r
171         self.items = IT_WEP1 | IT_WEP2 | IT_WEP3 | IT_WEP4;\r
172         self.switchweapon = WEP2;//w_getbestweapon(self);\r
173         self.ammo_shells = floor(20 * portion);\r
174         self.ammo_nails = floor(150 * portion);\r
175         self.ammo_rockets = floor(14 * portion);\r
176         self.ammo_cells = floor(6 * portion);\r
177         self.playerclass = TF_CLASS_PYRO;               // TF P.C.\r
178         SetMaxAmmoFor (8);\r
179 }\r