2024-02-13 13:20:49 +01:00

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 );
}