tenebrae-progs/statics.qc

244 lines
5.0 KiB
C++

void() next_frame =
{
if (self.frame < self.button1){
self.frame = self.frame + 1;
} else {
self.frame = self.button0;
}
self.nextthink = time + 0.1;
self.think = next_frame;
};
/*
Put any model in the map
model = filename of model to have
If button0 and 1 are set it loops the frames:
button0 = startframe to play
button1 = endframe to play
If target is set it follows the path defined by the target path_corner ents.
noise and noise1 then define the noises to play during movement.
button0 & 1 dont work when target is set.
*/
void() misc_model =
{
precache_model (self.model);
setmodel (self, self.model);
self.solid = SOLID_NOT;
if (self.target) {
if (!self.speed)
self.speed = 100;
self.cnt = 1;
self.solid = SOLID_NOT;
self.movetype = MOVETYPE_FAKEPUSH;
self.blocked = train_blocked;
self.use = train_use;
if (!self.noise) self.noise = "misc/null.wav";
if (!self.noise1) self.noise1 = "misc/null.wav";
precache_sound (self.noise);
precache_sound (self.noise1);
setsize (self, self.mins , self.maxs);
setorigin (self, self.origin);
// start trains on the second frame, to make sure their targets have had
// a chance to spawn
self.nextthink = self.ltime + 0.1;
self.think = func_train_find;
return;
}
//if (!self.button0){
// if (!self.noise4) {
// makestatic(self);
// }
//} else {
if (self.button0) {
self.think = next_frame;
self.nextthink = self.ltime + 0.1;
self.frame = self.button0;
}
//}
self.solid = SOLID_NOT;
if (self.target)
self.movetype = MOVETYPE_FAKEPUSH;
else
self.movetype = MOVETYPE_NONE;
};
void() static_brush =
{
//static_brush == compatibility with old tenebrae maps
misc_model();
};
void() rotateengine_use =
{
local entity targ;
targ = find (world, noise4, self.target);
if (targ)
if (self.state == STATE_TOP) {
targ.avelocity = '0 0 0';
self.state = STATE_DOWN;
} else {
targ.avelocity = self.avelocity;
self.state = STATE_TOP;
}
else objerror("No target found");
};
void() misc_rotateengine =
{
self.use = rotateengine_use;
self.state = STATE_DOWN;
};
/*
The fan is spinning out
*/
void () fan_turnoff = {
local float reached;
if (self.state == STATE_TOP) {
reached = 1;
if (self.avelocity_x > 0) {
self.avelocity_x = self.avelocity_x - self.waitmin;
reached = 0;
}
if (self.avelocity_y > 0) {
self.avelocity_y = self.avelocity_y - self.waitmin;
reached = 0;
}
if (self.avelocity_z > 0) {
self.avelocity_z = self.avelocity_z - self.waitmin;
reached = 0;
}
if (reached == 0) {
self.nextthink = time + 0.1;
} else {
self.state = STATE_DOWN;
self.avelocity = '0 0 0';
self.nextthink = time + 100000;
}
}
};
/*
The fan is starting up
*/
void () fan_turnon = {
local float reached;
self.state = STATE_TOP;
reached = 1;
if (self.avelocity_x < self.dest_x) {
self.avelocity_x = self.avelocity_x + self.waitmax;
reached = 0;
}
if (self.avelocity_y < self.dest_y) {
self.avelocity_y = self.avelocity_y + self.waitmax;
reached = 0;
}
if (self.avelocity_z < self.dest_z) {
self.avelocity_z = self.avelocity_z + self.waitmax;
reached = 0;
}
//We are at the top speed stop thinking
if (reached == 1) {
self.nextthink = time + 100000;
} else {
self.nextthink = time + 0.1;
}
};
/*
The fan is toggled
*/
void () fan_use =
{
//shootable and destroyed?
if (self.max_health) {
if (self.health <= 0) {
return;
}
}
if (self.state == STATE_TOP) {
self.think = fan_turnoff;
self.nextthink = time + 0.1;
} else {
self.think = fan_turnon;
self.nextthink = time + 0.1;
}
};
/*
The fan is shot
*/
void () fan_die =
{
if (self.state == STATE_TOP) {
self.think = fan_turnoff;
self.nextthink = time + 0.1;
}
};
/*
Put a fan in the map. A is any model that spins, it spins slowly up until it reaches max speed.
It can be turned on/ off by triggering. It can be shot out.
model = name of the fan model
avelocity = rotation speed around the 3 axis (0 90 0)
health = how long it takes to destroy. (zero is indestuctible)
waitmin = spin down speed (default 5)
waitmax = spin up speed (default 5)
if spawnlfags 1 is set it starts disabled
*/
void() misc_fan =
{
precache_model (self.model);
setmodel (self, self.model);
self.solid = SOLID_SLIDEBOX;
if (self.health)
{
self.max_health = self.health;
self.th_die = fan_die;
self.takedamage = DAMAGE_YES;
} else {
self.max_health = 0;
}
self.dest = self.avelocity;
self.think = fan_turnon;
self.nextthink = time + 100000;
self.use = fan_use;
self.state = STATE_TOP;
//start off?
if (self.spawnflags & 1) {
self.avelocity = '0 0 0';
}
if (!self.waitmin)
self.waitmin = 5;
if (!self.waitmax)
self.waitmax = 5;
setsize(self, self.mins, self.maxs);
self.movetype = MOVETYPE_FAKEPUSH;
};