328 lines
9.3 KiB
Plaintext
328 lines
9.3 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
#using_animtree("animals");
|
|
|
|
main()
|
|
{
|
|
var_0 = spawnstruct();
|
|
var_0.interactive_type = "vulture";
|
|
var_0.react_distance = 700;
|
|
var_0.fly_distance = 350;
|
|
var_0.damage_effect = loadfx( "fx/props/feathers_black_exp" );
|
|
var_0.death_effect = loadfx( "fx/props/vulture_exp" );
|
|
var_0.health = 100;
|
|
var_0.anims = [];
|
|
var_0.anims["fly_away"] = %vulture_fly_away;
|
|
var_0.anims["fly_loop"][0] = %vulture_fly_loop;
|
|
var_0.anims["fly_loopweight"][0] = 1;
|
|
var_0.anims["fly_loop"][1] = %vulture_fly_loop2;
|
|
var_0.anims["fly_loopweight"][1] = 0.3;
|
|
var_0.anims["fly_loop"][2] = %vulture_fly_loop3;
|
|
var_0.anims["fly_loopweight"][2] = 0.3;
|
|
var_0.anims["idle"] = %vulture_idle;
|
|
var_0.anims["idle_body"] = %vulture_idle_body;
|
|
var_0.anims["idle_body_pose"] = %vulture_idle_body_pose;
|
|
var_0.anims["react"] = %vulture_twitch;
|
|
var_0.circle_radius = 350;
|
|
var_0.circle_time = 250;
|
|
var_0.circle_large_variance_amt = 150;
|
|
var_0.circle_large_variance_time = 250;
|
|
var_0.savetostructfn = ::vulture_savetostruct;
|
|
var_0.loadfromstructfn = ::vulture_loadfromstruct;
|
|
|
|
if ( !isdefined( level._interactive ) )
|
|
level._interactive = [];
|
|
|
|
level._interactive[var_0.interactive_type] = var_0;
|
|
thread vultures();
|
|
}
|
|
|
|
vultures()
|
|
{
|
|
level waittill( "load_finished" );
|
|
|
|
if ( !isdefined( level._interactive["vultures_setup"] ) )
|
|
{
|
|
level._interactive["vultures_setup"] = 1;
|
|
var_0 = getentarray( "interactive_vulture", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 thread vulture_waitforstart();
|
|
|
|
var_0 = getentarray( "interactive_vulture_circling", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 thread vulture_waitforstart();
|
|
}
|
|
}
|
|
|
|
vulture_waitforstart()
|
|
{
|
|
if ( isdefined( self.script_triggername ) )
|
|
{
|
|
var_0 = vulture_savetostruct();
|
|
level waittill( "start_" + self.script_triggername );
|
|
var_0 vulture_loadfromstruct();
|
|
}
|
|
else if ( self.targetname == "interactive_vulture" )
|
|
thread vulture();
|
|
else if ( self.targetname == "interactive_vulture_circling" )
|
|
thread vulture_circle( 1 );
|
|
}
|
|
|
|
vulture()
|
|
{
|
|
self endon( "death" );
|
|
self useanimtree( #animtree );
|
|
var_0 = level._interactive["vulture"];
|
|
var_1 = undefined;
|
|
|
|
if ( isdefined( self.target ) )
|
|
var_1 = getent( self.target, "targetname" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
var_1 useanimtree( #animtree );
|
|
var_2 = var_1.origin;
|
|
var_3 = var_1.angles;
|
|
}
|
|
else
|
|
{
|
|
var_2 = self.origin;
|
|
var_3 = self.angles;
|
|
}
|
|
|
|
thread maps\interactive_models\_interactive_utility::detect_events( "interrupted" );
|
|
thread maps\interactive_models\_interactive_utility::detect_people( var_0.react_distance, "interrupted", [ "death", "damage" ] );
|
|
thread maps\interactive_models\_interactive_utility::detect_people( var_0.fly_distance, "damage", [ "death", "damage" ] );
|
|
thread vulture_detect_damage( var_0.health, var_0.damage_effect, var_0.death_effect, var_1, var_0.anims["idle_body_pose"] );
|
|
|
|
if ( isdefined( self.script_triggername ) )
|
|
thread vulture_waitfortriggerstop();
|
|
|
|
var_4 = 1;
|
|
self.interrupted = 0;
|
|
var_5 = "";
|
|
|
|
while ( var_5 != "damage" )
|
|
{
|
|
if ( var_5 == "interrupted" || self.interrupted )
|
|
{
|
|
thread vulture_react( var_1, var_0.anims, var_2, var_3 );
|
|
var_5 = common_scripts\utility::waittill_any_return( "damage", "finished_react" );
|
|
self notify( "stop_idle" );
|
|
continue;
|
|
}
|
|
|
|
thread vulture_idle( var_1, var_0.anims, var_2, var_3 );
|
|
var_5 = common_scripts\utility::waittill_any_return( "interrupted", "damage", "finished_react" );
|
|
self notify( "stop_idle" );
|
|
}
|
|
|
|
self animscripted( "fly_anim", var_2, var_3, var_0.anims["fly_away"] );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_1 setanimknobrestart( var_0.anims["idle_body_pose"], 1, 0.2 );
|
|
|
|
self waittillmatch( "fly_anim", "end" );
|
|
thread vulture_circle();
|
|
}
|
|
|
|
vulture_circle( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( isdefined( self.script_triggername ) )
|
|
thread vulture_waitfortriggerstop();
|
|
|
|
self useanimtree( #animtree );
|
|
var_1 = level._interactive["vulture"];
|
|
thread vulture_detect_damage( var_1.health, var_1.damage_effect, var_1.death_effect );
|
|
self.angles = ( 0, self.angles[1], self.angles[2] );
|
|
|
|
if ( isdefined( var_0 ) && var_0 )
|
|
var_2 = self.origin;
|
|
else
|
|
{
|
|
var_3 = anglestoright( self.angles );
|
|
var_2 = self.origin - var_3 * var_1.circle_radius;
|
|
}
|
|
|
|
if ( isdefined( self.script_radius ) )
|
|
{
|
|
var_4 = var_2 + ( 0, 0, self.script_radius );
|
|
var_5 = common_scripts\_csplines::cspline_initnoise( var_4, self.script_radius, var_1.circle_large_variance_time, var_2 );
|
|
}
|
|
else
|
|
{
|
|
var_4 = var_2 + ( 0, 0, var_1.circle_large_variance_amt );
|
|
var_5 = common_scripts\_csplines::cspline_initnoise( var_4, var_1.circle_large_variance_amt, var_1.circle_large_variance_time, var_2 );
|
|
}
|
|
|
|
var_6 = self.angles[1] - 90;
|
|
var_7 = 0;
|
|
self stopanimscripted();
|
|
thread maps\interactive_models\_interactive_utility::loop_anim( var_1.anims, "fly_loop" );
|
|
|
|
for (;;)
|
|
{
|
|
var_8 = common_scripts\_csplines::cspline_noise( var_5, var_7 );
|
|
self.origin = maps\interactive_models\_interactive_utility::pointoncircle( var_8, var_1.circle_radius, var_6 );
|
|
self.angles = ( 0, var_6 + 90, -5 );
|
|
var_6 = var_6 + 360 / var_1.circle_time;
|
|
var_7++;
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
vulture_detect_damage( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
if ( !isdefined( self.health ) || self.health == 0 )
|
|
self.health = var_0;
|
|
|
|
self setcandamage( 1 );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "damage" );
|
|
|
|
if ( isdefined( self ) )
|
|
{
|
|
if ( self.health > 0 )
|
|
{
|
|
if ( isdefined( var_1 ) )
|
|
playfx( var_1, self.origin + ( 0, 0, 15 ) );
|
|
}
|
|
else
|
|
{
|
|
playfx( var_2, self.origin + ( 0, 0, 15 ) );
|
|
|
|
if ( isdefined( var_3 ) )
|
|
var_3 setanimknobrestart( var_4, 1, 0.2 );
|
|
|
|
self delete();
|
|
}
|
|
|
|
continue;
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
vulture_idle( var_0, var_1, var_2, var_3 )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "stop_idle" );
|
|
|
|
for (;;)
|
|
{
|
|
self animscripted( "idle_anim", var_2, var_3, var_1["idle"] );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_0 setanimknobrestart( var_1["idle_body"], 1 );
|
|
|
|
self waittillmatch( "idle_anim", "end" );
|
|
}
|
|
}
|
|
|
|
vulture_react( var_0, var_1, var_2, var_3 )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "stop_idle" );
|
|
self animscripted( "react_anim", var_2, var_3, var_1["react"] );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_0 setanimknobrestart( var_1["idle_body_pose"], 1, 0.2 );
|
|
|
|
self waittillmatch( "react_anim", "end" );
|
|
self notify( "finished_react" );
|
|
}
|
|
|
|
vulture_waitfortriggerstop()
|
|
{
|
|
self endon( "death" );
|
|
level waittill( "stop_" + self.script_triggername );
|
|
thread vulture_savetostructandwaitfortriggerstart();
|
|
}
|
|
|
|
vulture_savetostructandwaitfortriggerstart()
|
|
{
|
|
var_0 = vulture_savetostruct();
|
|
level waittill( "start_" + self.script_triggername );
|
|
var_0 vulture_loadfromstruct();
|
|
}
|
|
|
|
vulture_deletewithbody()
|
|
{
|
|
if ( isdefined( self.target ) )
|
|
{
|
|
var_0 = getent( self.target, "targetname" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_0 delete();
|
|
}
|
|
|
|
self delete();
|
|
}
|
|
|
|
vulture_savetostruct()
|
|
{
|
|
var_0 = spawnstruct();
|
|
var_0.model = self.model;
|
|
var_0.interactive_type = self.interactive_type;
|
|
var_0.origin = self.origin;
|
|
var_0.angles = self.angles;
|
|
var_0.targetname = self.targetname;
|
|
var_0.target = self.target;
|
|
|
|
if ( isdefined( self.target ) )
|
|
{
|
|
var_1 = getent( self.target, "targetname" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
var_0.body = spawnstruct();
|
|
var_0.body.origin = var_1.origin;
|
|
var_0.body.angles = var_1.angles;
|
|
var_0.body.model = var_1.model;
|
|
var_1 delete();
|
|
}
|
|
}
|
|
|
|
var_0.script_noteworthy = self.script_noteworthy;
|
|
var_0.script_triggername = self.script_triggername;
|
|
var_0.script_radius = self.script_radius;
|
|
self delete();
|
|
return var_0;
|
|
}
|
|
|
|
vulture_loadfromstruct()
|
|
{
|
|
var_0 = spawn( "script_model", self.origin );
|
|
var_0 setmodel( self.model );
|
|
var_0.interactive_type = self.interactive_type;
|
|
var_0.origin = self.origin;
|
|
var_0.angles = self.angles;
|
|
var_0.target = self.target;
|
|
var_0.targetname = self.targetname;
|
|
|
|
if ( isdefined( self.body ) )
|
|
{
|
|
var_1 = spawn( "script_model", self.body.origin );
|
|
var_1 setmodel( self.body.model );
|
|
var_1.angles = self.body.angles;
|
|
var_1.targetname = self.target;
|
|
}
|
|
|
|
var_0.script_noteworthy = self.script_noteworthy;
|
|
var_0.script_triggername = self.script_triggername;
|
|
var_0.script_radius = self.script_radius;
|
|
|
|
if ( var_0.targetname == "interactive_vulture" )
|
|
var_0 thread vulture();
|
|
else if ( var_0.targetname == "interactive_vulture_circling" )
|
|
var_0 thread vulture_circle( 1 );
|
|
}
|