160 lines
3.5 KiB
Plaintext
160 lines
3.5 KiB
Plaintext
void() train_next;
|
|
|
|
void() train_blocked =
|
|
{
|
|
if (time < self.attack_finished)
|
|
return;
|
|
self.attack_finished = time + 0.5;
|
|
Damage (other, self, self, self.dmg);
|
|
};
|
|
|
|
void() train_wait =
|
|
{
|
|
self.think = train_next;
|
|
if (self.wait > 0)
|
|
{
|
|
if (self.movetype == MOVETYPE_PUSH)
|
|
self.nextthink = self.ltime + self.wait;
|
|
else
|
|
self.nextthink = time + self.wait;
|
|
|
|
if (self.noise != "")
|
|
sound (self, CHAN_VOICE, self.noise, 1, ATTN_NORM);
|
|
}
|
|
else
|
|
{
|
|
if (self.movetype == MOVETYPE_PUSH)
|
|
self.nextthink = self.ltime + 0.1;
|
|
else
|
|
self.nextthink = time + 0.1;
|
|
}
|
|
};
|
|
|
|
void() train_next =
|
|
{
|
|
entity targ = find(world, targetname, self.target);
|
|
self.target = targ.target;
|
|
if (!self.target)
|
|
{
|
|
self.velocity = '0 0 0';
|
|
self.think = SUB_Null;
|
|
self.nextthink = -1;
|
|
objerror("train_next: no next target");
|
|
return;
|
|
}
|
|
|
|
if (targ.wait > 0)
|
|
self.wait = targ.wait;
|
|
else
|
|
self.wait = 0;
|
|
|
|
if (self.noise1 != "")
|
|
sound (self, CHAN_VOICE, self.noise1, 1, ATTN_NORM);
|
|
SUB_CalcMove (targ.origin - self.mins, self.speed, train_wait);
|
|
};
|
|
|
|
void() train_use =
|
|
{
|
|
self.use = SUB_Null;
|
|
train_next();
|
|
};
|
|
|
|
void() train_find =
|
|
{
|
|
entity targ = find(world, targetname, self.target);
|
|
self.target = targ.target;
|
|
setorigin (self, targ.origin - self.mins);
|
|
if (!self.targetname)
|
|
{
|
|
if (self.movetype == MOVETYPE_PUSH)
|
|
self.nextthink = self.ltime + 0.1;
|
|
else
|
|
self.nextthink = time + 0.1;
|
|
self.think = train_next;
|
|
}
|
|
else
|
|
self.use = train_use;
|
|
};
|
|
|
|
/*QUAKED func_train (0 .5 .8) ?
|
|
Trains are moving platforms that players can ride.
|
|
Must target a series of 'path_corner' entities.
|
|
The targets origin specifies the min point of the train at each corner.
|
|
It will always position itself on its first target at map load.
|
|
If a targetname is set, it must be triggered to start moving, otherwise it will start immediately.
|
|
|
|
speed default 100
|
|
dmg default 2
|
|
sounds
|
|
-1) custom, set "noise" and "noise1"
|
|
0) none
|
|
1) ratchet metal
|
|
*/
|
|
void() func_train =
|
|
{
|
|
if (!self.target)
|
|
{
|
|
objerror ("func_train without a target");
|
|
remove(self);
|
|
return;
|
|
}
|
|
|
|
self.solid = SOLID_BSP;
|
|
self.movetype = MOVETYPE_PUSH;
|
|
self.blocked = train_blocked;
|
|
setmodel (self, self.model);
|
|
setsize (self, self.mins, self.maxs);
|
|
setorigin (self, self.origin);
|
|
|
|
SetPositiveDefault(speed, 100);
|
|
SetPositiveDefault(dmg, 2);
|
|
if (self.sounds == 0)
|
|
{
|
|
self.noise = "";
|
|
self.noise1 = "";
|
|
}
|
|
else if (self.sounds == 1)
|
|
{
|
|
self.noise = "plats/train2.wav";
|
|
self.noise1 = "plats/train1.wav";
|
|
}
|
|
if (self.noise != "")
|
|
precache_sound (self.noise);
|
|
if (self.noise1 != "")
|
|
precache_sound (self.noise1);
|
|
|
|
self.think = train_find;
|
|
self.nextthink = self.ltime + 0.1;
|
|
};
|
|
|
|
/*QUAKED misc_teleporttrain (.5 .5 .5) (-16 -16 -16) (16 16 16) X X X X X X X X NOT_IN_EASY NOT_IN_NORMAL NOT_IN_HARD NOT_IN_DM
|
|
{ model("progs/teleport.mdl"); }
|
|
|
|
Floating teleporter target for final boss level. Must target a series of 'path_corner' entities.
|
|
It will always position itself on its first target at map load.
|
|
If a targetname is set, it must be triggered to start moving, otherwise it will start immediately.
|
|
|
|
speed default 100
|
|
*/
|
|
void() misc_teleporttrain =
|
|
{
|
|
if (!self.target)
|
|
{
|
|
objerror ("misc_teleporttrain without a target");
|
|
remove(self);
|
|
return;
|
|
}
|
|
|
|
self.solid = SOLID_NOT;
|
|
self.movetype = MOVETYPE_NOCLIP;
|
|
precache_model ("progs/teleport.mdl");
|
|
setmodel (self, "progs/teleport.mdl");
|
|
setsize (self, '-16 -16 -16', '16 16 16');
|
|
|
|
SetPositiveDefault(speed, 100);
|
|
self.avelocity = '20 40 80';
|
|
|
|
self.think = train_find;
|
|
self.nextthink = time + 0.1;
|
|
};
|