cod5-sdk/raw/maps/_treeburst.gsc

147 lines
3.4 KiB
Plaintext

#include common_scripts\utility;
main()
{
treebursts = getentarray("treeburst", "script_noteworthy");
for(i = 0; i < treebursts.size; i++)
treebursts[i] thread treeburst();
}
treeburst()
{
self waittill("treeburst");
if(isdefined(self.script_falldirection))
yaw = self.script_falldirection;
else
yaw = randomint(360);
break_angles = (self.angles[0], yaw, self.angles[2]);
break_vector = anglesToForward(break_angles);
break_vector = vectorScale(break_vector, 100);
// yellow - break vector
// thread drawline(self.origin, (self.origin + break_vector), (1, 1, 0), 1);
start = (self.origin + break_vector) + (0, 0, 512);
end = start + (0, 0, -1024);
trace = bulletTrace(start, end, false, self);
// orange - drop to position trace
// thread drawline(start, trace["position"], (1, .5, 0), 1);
dist_vector = ((self.origin + break_vector) - trace["position"]);
dist = dist_vector[2];
velocity = 0;
travelled = 0;
lasttravelled = travelled;
count = 0;
lastcount = count;
while(travelled < dist)
{
//velocity = velocity + 385.8267717;
velocity = velocity + 340;
lasttravelled = travelled;
travelled = travelled + velocity;
lastcount = count;
count++;
}
remainder = lasttravelled - dist;
if(remainder < 0)
remainder = remainder * -1;
time = lastcount + (remainder / velocity);
self moveGravity(break_vector, time);
// self moveTo(trace["position"], time, (time / 2), 0);
self waittill("movedone");
vec = vectorNormalize(break_vector);
//vec = vectorScale(vec, 150);
vec = vectorScale(vec, 320);
start = (self.origin + vec) + (0, 0, 512);
end = start + (0, 0, -1024);
trace = bulletTrace(start, end, false, self);
ground = trace["position"];
// blue - rotate to position trace
// thread drawline(start, ground, (0, 0, 1), 1);
// red - vector showing rotated position
// thread drawline(self.origin, ground, (1, 0, 0), 1);
treeup_vector = anglesToUp(self.angles);
treeup_angles = vectortoangles(treeup_vector);
rest_vector = ground - self.origin;
rest_angles = vectorToAngles(rest_vector);
treeorg = spawn("script_origin", self.origin);
treeorg.origin = self.origin;
treeorg.angles = (treeup_angles[0], rest_angles[1], rest_angles[2]);
self linkto(treeorg);
treeorg rotateTo(rest_angles, 1.15, .5, 0);
treeorg waittill("rotatedone");
// treeorg rotatepitch(90,1.1,.05,.2);
// treeorg waittill("rotatedone");
treeorg rotatepitch(-2.5,.21,.05,.15);
treeorg waittill("rotatedone");
treeorg rotatepitch(2.5,.26,.15,.1);
treeorg waittill("rotatedone");
self unlink();
treeorg delete();
}
drawline(start, end, color, alpha)
{
while(1)
{
line(start, end, color, alpha);
wait .05;
}
}
draworigin(origin, color, alpha)
{
if(!isdefined(alpha))
alpha = 1;
if(isdefined(color))
{
while(1)
{
line(origin + (16, 0, 0), origin + (-16, 0, 0), color, alpha);
line(origin + (0, 16, 0), origin + (0, -16, 0), color, alpha);
line(origin + (0, 0, 16), origin + (0, 0, -16), color, alpha);
wait .05;
}
}
else
{
while(1)
{
red = (1, 0, 0);
green = (0, 1, 0);
blue = (0, 0, 1);
line(origin + (16, 0, 0), origin + (-16, 0, 0), red, alpha);
line(origin + (0, 16, 0), origin + (0, -16, 0), green, alpha);
line(origin + (0, 0, 16), origin + (0, 0, -16), blue, alpha);
wait .05;
}
}
}