3 float() CheckExistence;
\r
5 void() func_train_find;
\r
6 void() plat_center_touch;
\r
7 void() plat_outside_touch;
\r
8 void() plat_trigger_use;
\r
10 void() plat_go_down;
\r
15 void() plat_spawn_inside_trigger =
\r
17 local entity trigger;
\r
21 trigger.touch = plat_center_touch;
\r
22 trigger.movetype = 0;
\r
24 trigger.enemy = self;
\r
25 trigger.team_no = self.team_no;
\r
26 trigger.playerclass = self.playerclass;
\r
27 trigger.items_allowed = self.items_allowed;
\r
28 trigger.activate_goal_no = self.activate_goal_no;
\r
29 trigger.inactivate_goal_no = self.inactivate_goal_no;
\r
30 trigger.remove_goal_no = self.remove_goal_no;
\r
31 trigger.restore_goal_no = self.restore_goal_no;
\r
32 trigger.activate_group_no = self.activate_group_no;
\r
33 trigger.inactivate_group_no = self.inactivate_group_no;
\r
34 trigger.remove_group_no = self.remove_group_no;
\r
35 trigger.restore_group_no = self.restore_group_no;
\r
36 trigger.goal_activation = self.goal_activation;
\r
37 trigger.goal_effects = self.goal_effects;
\r
38 trigger.goal_result = self.goal_result;
\r
39 trigger.goal_group = self.goal_group;
\r
40 tmin = self.mins + '25 25 0';
\r
41 tmax = self.maxs - '25 25 -8';
\r
42 tmin_z = tmax_z - (self.pos1_z - self.pos2_z + 8);
\r
43 if (self.spawnflags & 1)
\r
45 tmax_z = tmin_z + 8;
\r
47 if (self.size_x <= 50)
\r
49 tmin_x = (self.mins_x + self.maxs_x) / 2;
\r
50 tmax_x = tmin_x + 1;
\r
52 if (self.size_y <= 50)
\r
54 tmin_y = (self.mins_y + self.maxs_y) / 2;
\r
55 tmax_y = tmin_y + 1;
\r
57 setsize(trigger, tmin, tmax);
\r
60 void() plat_hit_top =
\r
62 sound(self, 2, self.noise1, 1, 1);
\r
64 self.think = plat_go_down;
\r
65 self.nextthink = self.ltime + 3;
\r
68 void() plat_hit_bottom =
\r
70 sound(self, 2, self.noise1, 1, 1);
\r
74 void() plat_go_down =
\r
76 sound(self, 2, self.noise, 1, 1);
\r
78 SUB_CalcMove(self.pos2, self.speed, plat_hit_bottom);
\r
81 void() plat_go_up =
\r
83 sound(self, 2, self.noise, 1, 1);
\r
85 SUB_CalcMove(self.pos1, self.speed, plat_hit_top);
\r
88 void() plat_center_touch =
\r
91 if (other.classname != "player")
\r
95 if (!Activated(self, other))
\r
97 if (self.else_goal != 0)
\r
99 te = Findgoal(self.else_goal);
\r
102 DoResults(te, other, self.goal_result & 2);
\r
107 if (other.health <= 0)
\r
112 if (self.state == 1)
\r
118 if (self.state == 0)
\r
120 self.nextthink = self.ltime + 1;
\r
125 void() plat_outside_touch =
\r
128 if (other.classname != "player")
\r
132 if (!Activated(self, other))
\r
134 if (self.else_goal != 0)
\r
136 te = Findgoal(self.else_goal);
\r
139 DoResults(te, other, self.goal_result & 2);
\r
144 if (other.health <= 0)
\r
149 if (self.state == 0)
\r
155 void() plat_trigger_use =
\r
164 void() plat_crush =
\r
166 T_Damage(other, self, self, 1);
\r
167 if (self.state == 2)
\r
173 if (self.state == 3)
\r
179 objerror("plat_crush: bad self.state\n");
\r
186 self.use = SUB_Null;
\r
187 if (self.state != 2)
\r
189 objerror("plat_use: not in up state");
\r
194 void() func_plat =
\r
197 if (self.allowteams == "red")
\r
201 if (self.allowteams == "blue")
\r
206 if (CheckExistence() == 0)
\r
211 if (!(self.t_length))
\r
213 self.t_length = 80;
\r
215 if (!(self.t_width))
\r
219 if (self.sounds == 0)
\r
223 if (self.sounds == 1)
\r
225 precache_sound("plats/plat1.wav");
\r
226 precache_sound("plats/plat2.wav");
\r
227 self.noise = "plats/plat1.wav";
\r
228 self.noise1 = "plats/plat2.wav";
\r
230 if (self.sounds == 2)
\r
232 precache_sound("plats/medplat1.wav");
\r
233 precache_sound("plats/medplat2.wav");
\r
234 self.noise = "plats/medplat1.wav";
\r
235 self.noise1 = "plats/medplat2.wav";
\r
237 if (self.sounds == 4)
\r
239 precache_sound("plats/track_st.wav");
\r
240 precache_sound("plats/track_e.wav");
\r
241 self.noise = "plats/track_st.wav";
\r
242 self.noise1 = "plats/track_e.wav";
\r
244 self.mangle = self.angles;
\r
245 self.angles = '0 0 0';
\r
246 self.classname = "plat";
\r
249 setorigin(self, self.origin);
\r
250 setmodel(self, self.model);
\r
251 setsize(self, self.mins, self.maxs);
\r
252 self.blocked = plat_crush;
\r
257 self.pos1 = self.origin;
\r
258 self.pos2 = self.origin;
\r
261 self.pos2_z = self.origin_z - self.height;
\r
265 self.pos2_z = self.origin_z - self.size_z + 8;
\r
267 self.use = plat_trigger_use;
\r
268 plat_spawn_inside_trigger();
\r
269 if (self.targetname)
\r
272 self.use = plat_use;
\r
276 setorigin(self, self.pos2);
\r
281 void() train_blocked =
\r
283 if (time < self.attack_finished)
\r
287 self.attack_finished = time + 0.5;
\r
288 T_Damage(other, self, self, self.dmg);
\r
291 void() train_use =
\r
293 if (self.think != func_train_find)
\r
300 void() train_wait =
\r
304 self.nextthink = self.ltime + self.wait;
\r
305 if (self.wait == -1)
\r
307 self.think = func_train_find;
\r
312 sound(self, 2, self.noise, 1, 0);
\r
316 sound(self, 2, self.noise, 1, 1);
\r
321 self.nextthink = self.ltime + 0.1;
\r
323 self.think = train_next;
\r
326 void() train_next =
\r
329 targ = find(world, targetname, self.target);
\r
330 self.target = targ.target;
\r
331 if (!(self.target))
\r
333 objerror("train_next: no next target");
\r
337 self.wait = targ.wait;
\r
346 // sound(self, 2, self.noise1, 1, 0);
\r
350 sound(self, 2, self.noise1, 1, 1);
\r
352 SUB_CalcMove(targ.origin - self.mins, self.speed, train_wait);
\r
355 void() func_train_find =
\r
358 targ = find(world, targetname, self.target);
\r
359 self.target = targ.target;
\r
360 setorigin(self, targ.origin - self.mins);
\r
361 if (!(self.targetname))
\r
363 self.nextthink = self.ltime + 0.1;
\r
364 self.think = train_next;
\r
368 void() followtrain =
\r
370 setorigin(self, self.owner.origin);
\r
371 self.nextthink = time + 0.1;
\r
372 self.think = followtrain;
\r
375 void() func_train =
\r
377 if (CheckExistence() == 0)
\r
386 if (!(self.target))
\r
388 objerror("func_train without a target");
\r
394 if (self.sounds == 0)
\r
396 self.noise = "misc/null.wav";
\r
397 precache_sound("misc/null.wav");
\r
398 self.noise1 = "misc/null.wav";
\r
399 precache_sound("misc/null.wav");
\r
401 if (self.sounds == 1)
\r
403 self.noise = "plats/train2.wav";
\r
404 precache_sound("plats/train2.wav");
\r
405 self.noise1 = "plats/train1.wav";
\r
406 precache_sound("plats/train1.wav");
\r
408 if (self.sounds == 4)
\r
410 precache_sound("plats/track_st.wav");
\r
411 precache_sound("plats/track_e.wav");
\r
412 self.noise = "plats/track_e.wav";
\r
413 self.noise1 = "plats/track_st.wav";
\r
418 self.blocked = train_blocked;
\r
419 self.use = train_use;
\r
420 self.classname = "train";
\r
421 setmodel(self, self.model);
\r
422 setsize(self, self.mins, self.maxs);
\r
423 setorigin(self, self.origin);
\r
424 self.nextthink = self.ltime + 0.1;
\r
425 self.think = func_train_find;
\r
428 void() light_move =
\r
430 if (CheckExistence() == 0)
\r
439 if (!(self.target))
\r
441 objerror("light_move without a target");
\r
443 self.noise = "misc/null.wav";
\r
444 precache_sound("misc/null.wav");
\r
445 self.noise1 = "misc/null.wav";
\r
446 precache_sound("misc/null.wav");
\r
448 if (!(self.effects))
\r
454 self.classname = "movelight";
\r
455 precache_model("progs/s_null.spr");
\r
456 setmodel(self, "progs/s_null.spr");
\r
457 setsize(self, '0 0 0', '0 0 0');
\r
458 setorigin(self, self.origin);
\r
459 self.nextthink = self.ltime + 0.1;
\r
460 self.think = func_train_find;
\r
463 void() misc_teleporttrain =
\r
465 if (CheckExistence() == 0)
\r
474 if (!(self.target))
\r
476 objerror("func_train without a target");
\r
481 self.blocked = train_blocked;
\r
482 self.use = train_use;
\r
483 self.avelocity = '100 200 300';
\r
484 self.noise = "misc/null.wav";
\r
485 precache_sound("misc/null.wav");
\r
486 self.noise1 = "misc/null.wav";
\r
487 precache_sound("misc/null.wav");
\r
488 precache_model2("progs/teleport.mdl");
\r
489 setmodel(self, "progs/teleport.mdl");
\r
490 setsize(self, self.mins, self.maxs);
\r
491 setorigin(self, self.origin);
\r
492 self.nextthink = self.ltime + 0.1;
\r
493 self.think = func_train_find;
\r