1 void() plat_center_touch;
2 void() plat_outside_touch;
3 void() plat_trigger_use;
7 float PLAT_LOW_TRIGGER = 1;
10 .float t_length, t_width;
12 void() plat_spawn_inside_trigger =
15 local vector tmin, tmax;
18 trigger.touch = plat_center_touch;
19 trigger.movetype = MOVETYPE_NONE;
20 trigger.solid = SOLID_TRIGGER;
23 tmin = self.mins + '25 25 0';
24 tmax = self.maxs - '25 25 -8';
25 tmin_z = tmax_z - (self.pos1_z - self.pos2_z + 8);
26 if (self.spawnflags & PLAT_LOW_TRIGGER)
29 if (self.size_x <= 50)
31 tmin_x = (self.mins_x + self.maxs_x) / 2;
34 if (self.size_y <= 50)
36 tmin_y = (self.mins_y + self.maxs_y) / 2;
40 setsize (trigger, tmin, tmax);
45 sound (self, CHAN_VOICE, self.noise1, 1, ATTN_NORM);
47 self.think = plat_go_down;
48 self.nextthink = self.ltime + 3;
51 void() plat_hit_bottom =
53 sound (self, CHAN_VOICE, self.noise1, 1, ATTN_NORM);
59 sound (self, CHAN_VOICE, self.noise, 1, ATTN_NORM);
61 SUB_CalcMove (self.pos2, self.speed, plat_hit_bottom);
66 sound (self, CHAN_VOICE, self.noise, 1, ATTN_NORM);
68 SUB_CalcMove (self.pos1, self.speed, plat_hit_top);
71 void() plat_center_touch =
73 if (other.classname != "player")
76 if (other.health <= 0)
82 else if (self.state == 1)
83 self.nextthink = self.ltime + 1; // delay going down
86 void() plat_outside_touch =
88 if (other.classname != "player")
91 if (other.health <= 0)
99 void() plat_trigger_use =
102 return; // allready activated
111 else if (self.state == 3)
114 objerror ("plat_crush: bad self.state\n");
121 objerror ("plat_use: not in up state");
126 .string sound1, sound2;
135 if (self.sounds == 0)
138 if (self.sounds == 1)
140 precache_sound ("plats/plat1.wav");
141 precache_sound ("plats/plat2.wav");
142 self.noise = "plats/plat1.wav";
143 self.noise1 = "plats/plat2.wav";
146 if (self.sounds == 2)
148 precache_sound ("plats/medplat1.wav");
149 precache_sound ("plats/medplat2.wav");
150 self.noise = "plats/medplat1.wav";
151 self.noise1 = "plats/medplat2.wav";
156 precache_sound (self.sound1);
157 self.noise = self.sound1;
161 precache_sound (self.sound2);
162 self.noise1 = self.sound2;
165 self.mangle = self.angles;
166 self.angles = '0 0 0';
168 self.classname = "plat";
169 self.solid = SOLID_BSP;
170 self.movetype = MOVETYPE_PUSH;
171 setorigin (self, self.origin);
172 setmodel (self, self.model);
173 setsize (self, self.mins , self.maxs);
175 self.blocked = plat_crush;
178 self.pos1 = self.origin;
179 self.pos2 = self.origin;
180 self.pos2_z = self.origin_z - self.size_z + 8;
182 self.use = plat_trigger_use;
184 plat_spawn_inside_trigger (); // the "start moving" trigger
193 setorigin (self, self.pos2);
201 void() func_train_find;
203 void() train_blocked =
205 if (time < self.attack_finished)
207 self.attack_finished = time + 0.5;
211 if (self.think != func_train_find)
220 self.nextthink = self.ltime + self.wait;
221 sound (self, CHAN_VOICE, self.noise, 1, ATTN_NORM);
224 self.nextthink = self.ltime + 0.1;
226 self.think = train_next;
233 targ = find (world, targetname, self.target);
234 self.target = targ.target;
236 objerror ("train_next: no next target");
238 self.wait = targ.wait;
241 sound (self, CHAN_VOICE, self.noise1, 1, ATTN_NORM);
242 SUB_CalcMove (targ.origin - self.mins, self.speed, train_wait);
245 void() func_train_find =
249 targ = find (world, targetname, self.target);
250 self.target = targ.target;
251 setorigin (self, targ.origin - self.mins);
252 if (!self.targetname)
253 { // not triggered, so start immediately
254 self.nextthink = self.ltime + 0.1;
255 self.think = train_next;
265 objerror ("func_train without a target");
267 if (self.sounds == 0)
269 self.noise = ("misc/null.wav");
270 precache_sound ("misc/null.wav");
271 self.noise1 = ("misc/null.wav");
272 precache_sound ("misc/null.wav");
275 if (self.sounds == 1)
277 self.noise = ("plats/train2.wav");
278 precache_sound ("plats/train2.wav");
279 self.noise1 = ("plats/train1.wav");
280 precache_sound ("plats/train1.wav");
283 self.solid = SOLID_BSP;
284 self.movetype = MOVETYPE_PUSH;
285 self.blocked = train_blocked;
286 self.use = train_use;
287 self.classname = "train";
289 setmodel (self, self.model);
290 setsize (self, self.mins , self.maxs);
291 setorigin (self, self.origin);
292 self.nextthink = self.ltime + 0.1;
293 self.think = func_train_find;