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
199 if (self.allowteams == "red")
\r
203 if (self.allowteams == "blue")
\r
208 if (CheckExistence() == 0)
\r
213 if (!(self.t_length))
\r
215 self.t_length = 80;
\r
217 if (!(self.t_width))
\r
221 if (self.sounds == 0)
\r
225 if (self.sounds == 1)
\r
227 precache_sound("plats/plat1.wav");
\r
228 precache_sound("plats/plat2.wav");
\r
229 self.noise = "plats/plat1.wav";
\r
230 self.noise1 = "plats/plat2.wav";
\r
232 if (self.sounds == 2)
\r
234 precache_sound("plats/medplat1.wav");
\r
235 precache_sound("plats/medplat2.wav");
\r
236 self.noise = "plats/medplat1.wav";
\r
237 self.noise1 = "plats/medplat2.wav";
\r
239 if (self.sounds == 4)
\r
241 precache_sound("plats/track_st.wav");
\r
242 precache_sound("plats/track_e.wav");
\r
243 self.noise = "plats/track_st.wav";
\r
244 self.noise1 = "plats/track_e.wav";
\r
246 self.mangle = self.angles;
\r
247 self.angles = '0 0 0';
\r
248 self.classname = "plat";
\r
251 setorigin(self, self.origin);
\r
252 setmodel(self, self.model);
\r
253 setsize(self, self.mins, self.maxs);
\r
254 self.blocked = plat_crush;
\r
259 self.pos1 = self.origin;
\r
260 self.pos2 = self.origin;
\r
263 self.pos2_z = self.origin_z - self.height;
\r
267 self.pos2_z = self.origin_z - self.size_z + 8;
\r
269 self.use = plat_trigger_use;
\r
270 plat_spawn_inside_trigger();
\r
271 if (self.targetname)
\r
274 self.use = plat_use;
\r
278 setorigin(self, self.pos2);
\r
283 void() train_blocked =
\r
285 if (time < self.attack_finished)
\r
289 self.attack_finished = time + 0.5;
\r
290 T_Damage(other, self, self, self.dmg);
\r
293 void() train_use =
\r
295 if (self.think != func_train_find)
\r
302 void() train_wait =
\r
306 self.nextthink = self.ltime + self.wait;
\r
307 if (self.wait == -1)
\r
309 self.think = func_train_find;
\r
314 sound(self, 2, self.noise, 1, 0);
\r
318 sound(self, 2, self.noise, 1, 1);
\r
323 self.nextthink = self.ltime + 0.1;
\r
325 self.think = train_next;
\r
328 void() train_next =
\r
331 targ = find(world, targetname, self.target);
\r
332 self.target = targ.target;
\r
333 if (!(self.target))
\r
335 objerror("train_next: no next target");
\r
339 self.wait = targ.wait;
\r
348 // sound(self, 2, self.noise1, 1, 0);
\r
352 sound(self, 2, self.noise1, 1, 1);
\r
354 SUB_CalcMove(targ.origin - self.mins, self.speed, train_wait);
\r
357 void() func_train_find =
\r
360 targ = find(world, targetname, self.target);
\r
361 self.target = targ.target;
\r
362 setorigin(self, targ.origin - self.mins);
\r
363 if (!(self.targetname))
\r
365 self.nextthink = self.ltime + 0.1;
\r
366 self.think = train_next;
\r
370 void() followtrain =
\r
372 setorigin(self, self.owner.origin);
\r
373 self.nextthink = time + 0.1;
\r
374 self.think = followtrain;
\r
377 void() func_train =
\r
380 if (CheckExistence() == 0)
\r
389 if (!(self.target))
\r
391 objerror("func_train without a target");
\r
397 if (self.sounds == 0)
\r
399 self.noise = "misc/null.wav";
\r
400 precache_sound("misc/null.wav");
\r
401 self.noise1 = "misc/null.wav";
\r
402 precache_sound("misc/null.wav");
\r
404 if (self.sounds == 1)
\r
406 self.noise = "plats/train2.wav";
\r
407 precache_sound("plats/train2.wav");
\r
408 self.noise1 = "plats/train1.wav";
\r
409 precache_sound("plats/train1.wav");
\r
411 if (self.sounds == 4)
\r
413 precache_sound("plats/track_st.wav");
\r
414 precache_sound("plats/track_e.wav");
\r
415 self.noise = "plats/track_e.wav";
\r
416 self.noise1 = "plats/track_st.wav";
\r
421 self.blocked = train_blocked;
\r
422 self.use = train_use;
\r
423 self.classname = "train";
\r
424 setmodel(self, self.model);
\r
425 setsize(self, self.mins, self.maxs);
\r
426 setorigin(self, self.origin);
\r
427 self.nextthink = self.ltime + 0.1;
\r
428 self.think = func_train_find;
\r
431 void() light_move =
\r
433 if (CheckExistence() == 0)
\r
442 if (!(self.target))
\r
444 objerror("light_move without a target");
\r
446 self.noise = "misc/null.wav";
\r
447 precache_sound("misc/null.wav");
\r
448 self.noise1 = "misc/null.wav";
\r
449 precache_sound("misc/null.wav");
\r
451 if (!(self.effects))
\r
457 self.classname = "movelight";
\r
458 precache_model("progs/s_null.spr");
\r
459 setmodel(self, "progs/s_null.spr");
\r
460 setsize(self, '0 0 0', '0 0 0');
\r
461 setorigin(self, self.origin);
\r
462 self.nextthink = self.ltime + 0.1;
\r
463 self.think = func_train_find;
\r
466 void() misc_teleporttrain =
\r
468 if (CheckExistence() == 0)
\r
477 if (!(self.target))
\r
479 objerror("func_train without a target");
\r
484 self.blocked = train_blocked;
\r
485 self.use = train_use;
\r
486 self.avelocity = '100 200 300';
\r
487 self.noise = "misc/null.wav";
\r
488 precache_sound("misc/null.wav");
\r
489 self.noise1 = "misc/null.wav";
\r
490 precache_sound("misc/null.wav");
\r
491 precache_model2("progs/teleport.mdl");
\r
492 setmodel(self, "progs/teleport.mdl");
\r
493 setsize(self, self.mins, self.maxs);
\r
494 setorigin(self, self.origin);
\r
495 self.nextthink = self.ltime + 0.1;
\r
496 self.think = func_train_find;
\r