]> icculus.org git repositories - divverent/nexuiz.git/blob - TeamNexuiz/game/gamec/tfq3fitems.c
- Added new backpack/tfitem property -- item_backpack gives metal ammo when var...
[divverent/nexuiz.git] / TeamNexuiz / game / gamec / tfq3fitems.c
1 /*\r
2 =============\r
3         XavioR's Q3F/ETF Entity recognition\r
4                                                         ==============\r
5 */\r
6 // q3f_forts seems to work almost perfectly --\r
7 //any other map will probably need a small to large amount of entity editing;\r
8 //still, this code does do a lot of work for you so give it a look :)\r
9 .string groupname;\r
10 //.string allowteams;\r
11 .string give;\r
12 .string active_all_sound;\r
13 .string carried_message;\r
14 .string active_all_message;\r
15 .string carried_sound;\r
16 .string holding;\r
17 .float gameindex;\r
18 .float teamscore;\r
19 .float floating;\r
20 //.vector orig_origin;\r
21 \r
22 // Q3F/ETF Maps dont have info_tfdetects, so this calls it.\r
23 void () DoTFDetect =\r
24 {\r
25         if (q3fdetect == 1)\r
26                 return;\r
27 self.display_item_status1 = 1;\r
28 self.n_s_c = "ÅÎÅÍÙ flag: carried by";\r
29 self.display_item_status2 = 2;\r
30 self.impulse = 64;\r
31 //self.classname = "info_tfdetect";\r
32 self.b_n = "\n";\r
33 self.t_s_h = "ÙÏÕÒ flag: base.";\r
34 //self.origin = '-80 -60 108';\r
35 self.t_s_c = "ÙÏÕÒ flag: carried by";\r
36 self.n_s_h = "ÅÎÅÍÙ flag: base.";\r
37 self.b_t = "Amnesia\n\9d\9e\9f CHOOSE YOUR TEAM \9d\9e\9f\n\n\90..\85 BLUE TEAM\n\90..\85 ÒÅÄ TEAM \n\n\90\97.\85 AUTO TEAM\n";\r
38 self.b_b = "TeamFortress";\r
39 self.n_s_m = "ÅÎÅÍÙ flag: down.";\r
40 self.t_s_m = "ÙÏÕÒ flag: down.";\r
41 q3fdetect = 1;\r
42 info_tfdetect();\r
43 };\r
44 \r
45 void () PossiblyDoTFDetect =\r
46 {\r
47         if (q3fdetect != 1)\r
48         {\r
49                 newmis = spawn();\r
50                 newmis.classname = "info_tfdetect";\r
51                 newmis.nextthink = time;\r
52                 newmis.think = DoTFDetect;\r
53         }\r
54 }\r
55 \r
56 //      Converts item to FLAG\r
57 void (float tno) ConvertToFlag =\r
58 {\r
59         PossiblyDoTFDetect();\r
60         local string droppedmsg;\r
61 \r
62         if (self.allowteams == "red")\r
63         {\r
64 //              if (redflagexists == 1)\r
65 //                      return;\r
66                 self.team_no = 2;\r
67                 self.owned_by = 1;\r
68                 self.n_b = " took the Blue Æìáç!\n";\r
69                 droppedmsg = " Dropped the Blue flag\n";\r
70                 self.netname = "Red Flag";\r
71                 redflagexists = 1;\r
72 \r
73                         if (!self.goal_no)\r
74                 self.goal_no = 200;             // Temp Goal Number, can be overridden by a "goal" def in the entity\r
75         }\r
76         if (self.allowteams == "blue")\r
77         {\r
78 //              if (blueflagexists == 1)\r
79 //                      return;\r
80                 self.team_no = 1;\r
81                 self.owned_by = 2;\r
82                 self.n_b = " took the Red Æìáç!\n";\r
83                 droppedmsg = " Dropped the Red flag\n";\r
84                 self.netname = "Blue Flag";\r
85                 blueflagexists = 1;\r
86 \r
87                         if (!self.goal_no)\r
88                 self.goal_no = 100;             // Temp Goal Number, can be overridden by a "goal" def in the entity\r
89         }\r
90         self.classname = "item_tfgoal";\r
91         if (self.carried_message)\r
92                 self.message = self.carried_message;\r
93 \r
94         self.d_t = "the ÅÎÅÍÙ ìïóô your flag!\n";               // The enemy stole your flag msg\r
95         self.b_o = "Your flag has been stolen!\n";\r
96 \r
97         self.noise = self.carried_sound;\r
98 //      self.noise3 = self.inactive_all_message;\r
99         self.noise3 = "Your flag has returned to base!\n";\r
100 //      self.noise4 = self.inactive_all_message;\r
101         self.noise4 = "The enemy flag has returned to base!\n";\r
102 \r
103 //      self.impulse = 9;\r
104         self.items = 133701;\r
105 \r
106         if (self.model)\r
107                 self.mdl = self.model;\r
108 \r
109 //      self.mdl = "models/flag.md3";\r
110 \r
111         if (!self.delay)\r
112                 self.delay = self.wait;\r
113 \r
114         self.d_n_n = droppedmsg;\r
115         self.d_n_t = droppedmsg;\r
116 \r
117         self.g_a = 2741;\r
118         self.g_e = 17;\r
119 \r
120 \r
121         item_tfgoal();\r
122 };\r
123 \r
124 // Simulate animation for converted tfgoal backpack\r
125 // Very unorthodox -- i cant find out why self.owner.velocity has no effect\r
126 void () PackFloat =\r
127 {\r
128         self.owner.angles_y = self.owner.angles_y + 10;\r
129 \r
130         if (self.floating == -17)\r
131         {\r
132                 self.floating = 9;\r
133         }\r
134         if (self.floating == 0)\r
135         {\r
136                 self.floating = 9;\r
137         }\r
138         if (self.floating > 0)\r
139         {\r
140                 self.owner.origin_z = self.owner.origin_z + 3;\r
141                 self.floating = self.floating - 1;\r
142         }\r
143         if (self.floating == 0)\r
144         {\r
145                 self.floating = -9;\r
146         }\r
147         if (self.floating < 0)\r
148         {\r
149                 self.owner.origin_z = self.owner.origin_z - 3;\r
150                 self.floating = self.floating + 1;\r
151         }\r
152         self.owner.movetype = 9;\r
153 \r
154 //      self.nextthink = (time + 0.500000);\r
155         self.nextthink = time + 0.01;\r
156         self.think = PackFloat;\r
157 };\r
158 \r
159 // This is the function that will convert an item to a backpack\r
160 //(happens with any item that has a "give" value).\r
161 void () ConvertToBackPack =\r
162 {\r
163         PossiblyDoTFDetect();\r
164         if (self.give == "")\r
165                 return;\r
166 \r
167 //      self.classname = "i_t_g";\r
168         if (self.allowteams == "red")\r
169         {\r
170                 self.team_no = 2;\r
171                 self.owned_by = 2;\r
172         }\r
173         if (self.allowteams == "blue")\r
174         {\r
175                 self.team_no = 1;\r
176                 self.owned_by = 1;\r
177         }\r
178 \r
179         self.message = "Resupplied!\n";\r
180         if (self.carried_message != "")\r
181                 self.message = self.carried_message;\r
182         if (self.active_all_message != "")\r
183                 self.message = self.active_all_message;\r
184 \r
185         self.mdl = self.model;\r
186         self.noise = self.active_all_sound;\r
187         self.g_e = 1;\r
188         self.g_a = 1;\r
189 \r
190         self.flags = self.flags & FL_ITEM & FL_WEAPON; // makes it turn around -- much more bandwidth efficient\r
191 \r
192 /*      self.orig_origin = self.origin;         // old pack float code\r
193         newmis = spawn();                                       // thx savagex for making me aware of cl_itembobheight\r
194         newmis.floating = -17;\r
195         newmis.owner = self;\r
196         newmis.think = PackFloat;\r
197         newmis.nextthink = (time + 1.000000);*/\r
198 \r
199         // If no ammo amount is specified in the entity, it will default to these values.\r
200         // The reason for this is because q3f/etf uses "give" commands to add ammo, and I can't\r
201         //convert those easily :(\r
202         if (!(self.ammo_nails || self.ammo_cells || self.ammo_rockets || self.health))\r
203         {\r
204                 self.health = 50;\r
205                 self.ammo_shells = 20;\r
206                 self.ammo_nails = 100;\r
207                 self.ammo_rockets = 15;\r
208                 self.a_c = 25;\r
209                 self.armorvalue = 100;\r
210                 self.no_grenades_1 = 2;\r
211                 self.no_grenades_2 = 1;\r
212         }\r
213         i_t_g ();\r
214 };\r
215 \r
216 // Converts Q3F/ETF Team Spawn points to tf-recognized ones.\r
217 /*void () info_player_start =\r
218 {\r
219         if (self.allowteams == "blue")\r
220                 self.team_no = 1;\r
221         if (self.allowteams == "red")\r
222                 self.team_no = 2;\r
223         i_p_t();\r
224 };*/\r
225 \r
226 void() info_notnull =\r
227 {\r
228         if (self.give != "")\r
229         {\r
230                 ConvertToBackPack ();\r
231         }\r
232         if (self.groupname == "blueflag")\r
233                 ConvertToFlag(1);\r
234         if (self.groupname == "redflag")\r
235                 ConvertToFlag(2);\r
236 };\r
237 \r
238 void() func_goalinfo =\r
239 {\r
240         if (self.give != "")\r
241         {\r
242                 ConvertToBackPack ();\r
243         }\r
244         if (self.groupname == "blueflag")\r
245                 ConvertToFlag(1);\r
246         if (self.groupname == "redflag")\r
247                 ConvertToFlag(2);\r
248 };\r
249 \r
250 void() func_goalitem =\r
251 {\r
252         if (self.give != "")\r
253         {\r
254                 ConvertToBackPack ();\r
255         }\r
256         if (self.groupname == "blueflag" && self.gameindex != 3) {\r
257                 ConvertToFlag(1);\r
258         }\r
259         if (self.groupname == "redflag" && self.gameindex != 3) {\r
260                 ConvertToFlag(2);\r
261         }\r
262 };\r
263 \r
264 // Converts trigger_multiples to Flag Goals (the point(s) where the flag is capped).\r
265 //This works for q3f_forts and machse and a couple other ones. \r
266 void(float tno) ConvertToGoal =\r
267 {\r
268         if (!self.teamscore)\r
269                 return;\r
270         if (tno == 1)\r
271         {\r
272                 self.team_no = 2;\r
273                 self.axhitme = 200;\r
274                 self.items_allowed = 200;\r
275         }\r
276         if (tno == 2)\r
277         {\r
278                 self.team_no = 1;\r
279                 self.axhitme = 100;\r
280                 self.items_allowed = 100;\r
281         }\r
282 \r
283         self.is_converted_goal = "yes"; // used with spawn point finder, no connnection with the actual conversion\r
284 \r
285         self.goal_result = 2;\r
286         self.noise = self.active_all_sound;\r
287         self.frags = self.teamscore;\r
288         self.count = self.teamscore;\r
289         self.classname = "i_t_g";\r
290 \r
291         self.g_a = 1;\r
292         self.g_e = 3;\r
293 \r
294         i_t_g();\r
295 };\r
296 \r
297 void() CheckIfQ3FTrigger =                      // Handles trigger_multiples from Q3F/ETF -- called from trigger_multiple\r
298 {\r
299         if (self.holding == "blueflag")\r
300                 ConvertToGoal (1);\r
301         if (self.holding == "redflag")\r
302                 ConvertToGoal (2);\r
303         if (self.holding == "oneflag" && self.allowteams == "blue")\r
304                 ConvertToGoal (1);\r
305         if (self.holding == "oneflag" && self.allowteams == "red")\r
306                 ConvertToGoal (2);\r
307 };\r
308 \r
309 // func_hud is not valid in Team:Nexuiz (dont know if it will ever be)\r
310 void () func_hud =\r
311 {\r
312         dremove(self);\r
313 };\r