init
This commit is contained in:
975
maps/interactive_models/_birds.gsc
Normal file
975
maps/interactive_models/_birds.gsc
Normal file
@ -0,0 +1,975 @@
|
||||
// IW6 GSC SOURCE
|
||||
// Generated by https://github.com/xensik/gsc-tool
|
||||
|
||||
birds()
|
||||
{
|
||||
if ( common_scripts\utility::issp() )
|
||||
level waittill( "load_finished" );
|
||||
else
|
||||
level waittill( "interactive_start" );
|
||||
|
||||
if ( !isdefined( level._interactive["birds_setup"] ) )
|
||||
{
|
||||
level._interactive["birds_setup"] = 1;
|
||||
level._interactive["bird_perches"] = [];
|
||||
var_0 = getentarray( "interactive_birds", "targetname" );
|
||||
|
||||
foreach ( var_2 in var_0 )
|
||||
var_2 thread birds_setup();
|
||||
}
|
||||
}
|
||||
|
||||
birds_setup()
|
||||
{
|
||||
birds_finishbirdtypesetup( level._interactive[self.interactive_type] );
|
||||
birds_setupconnectedperches();
|
||||
|
||||
if ( isdefined( self.script_triggername ) )
|
||||
{
|
||||
var_0 = birds_savetostruct();
|
||||
level waittill( "start_" + self.script_triggername );
|
||||
var_0 birds_loadfromstruct();
|
||||
}
|
||||
else
|
||||
{
|
||||
birds_createents();
|
||||
thread birds_fly( self.target );
|
||||
}
|
||||
}
|
||||
|
||||
birds_createents()
|
||||
{
|
||||
var_0 = level._interactive[self.interactive_type];
|
||||
|
||||
if ( !isdefined( self.interactive_number ) )
|
||||
self.interactive_number = var_0.rig_numtags;
|
||||
|
||||
self setmodel( var_0.rig_model );
|
||||
|
||||
if ( common_scripts\utility::issp() )
|
||||
self call [[ level.func["useanimtree"] ]]( var_0.rig_animtree );
|
||||
|
||||
self hideallparts();
|
||||
self.birds = [];
|
||||
self.birdexists = [];
|
||||
self.numbirds = 0;
|
||||
|
||||
for ( var_1 = 1; var_1 <= self.interactive_number; var_1++ )
|
||||
{
|
||||
self.birds[var_1] = spawn( "script_model", self gettagorigin( "tag_bird" + var_1 ) );
|
||||
self.birds[var_1] setmodel( var_0.bird_model["idle"] );
|
||||
self.birds[var_1] linkto( self, "tag_bird" + var_1 );
|
||||
|
||||
if ( common_scripts\utility::issp() )
|
||||
self.birds[var_1] call [[ level.func["useanimtree"] ]]( var_0.bird_animtree );
|
||||
|
||||
var_2 = ( var_1 - randomfloat( 1 ) ) / self.interactive_number;
|
||||
self.birds[var_1] thread maps\interactive_models\_interactive_utility::wait_then_fn( var_2, "Stop initial model setup", ::bird_sit, self, "tag_bird" + var_1, var_0.bird_model["idle"], var_0.birdmodel_anims );
|
||||
self.birdexists[var_1] = 1;
|
||||
self.numbirds++;
|
||||
|
||||
if ( isdefined( var_0.bird_health ) )
|
||||
self.birds[var_1].health = var_0.bird_health;
|
||||
else
|
||||
self.birds[var_1].health = 20;
|
||||
|
||||
self.birds[var_1] setcandamage( 1 );
|
||||
self.birds[var_1] thread bird_waitfordamage( self, var_1 );
|
||||
}
|
||||
|
||||
if ( isdefined( self.script_triggername ) )
|
||||
thread birds_waitfortriggerstop();
|
||||
}
|
||||
|
||||
birds_setupconnectedperches( var_0, var_1 )
|
||||
{
|
||||
if ( !isdefined( var_0 ) )
|
||||
var_0 = getent( self.target, "targetname" );
|
||||
|
||||
var_2 = spawnstruct();
|
||||
var_2.targetname = var_0.targetname;
|
||||
var_2.target = var_0.target;
|
||||
var_2.origin = var_0.origin;
|
||||
var_2.angles = var_0.angles;
|
||||
var_2.interactive_takeoffanim = var_0.interactive_takeoffanim;
|
||||
var_2.interactive_landanim = var_0.interactive_landanim;
|
||||
var_2.script_radius = var_0.script_radius;
|
||||
var_2.script_noteworthy = var_0.script_noteworthy;
|
||||
var_2.script_triggername = var_0.script_triggername;
|
||||
|
||||
if ( isdefined( var_1 ) )
|
||||
var_1[0] = var_2;
|
||||
|
||||
if ( isdefined( var_0.incoming ) )
|
||||
{
|
||||
foreach ( var_4 in var_0.incoming )
|
||||
var_4.endperch = var_2;
|
||||
}
|
||||
|
||||
var_0 delete();
|
||||
level._interactive["bird_perches"][var_2.targetname] = var_2;
|
||||
|
||||
if ( !isdefined( var_2.interactive_takeoffanim ) )
|
||||
var_2.interactive_takeoffanim = "flying";
|
||||
|
||||
if ( !isdefined( var_2.interactive_landanim ) )
|
||||
var_2.interactive_landanim = "flying";
|
||||
|
||||
var_2.triggers = [];
|
||||
var_6 = getentarray( var_2.targetname, "target" );
|
||||
|
||||
foreach ( var_8 in var_6 )
|
||||
{
|
||||
if ( var_8.classname == "trigger_multiple" )
|
||||
var_2.triggers[var_2.triggers.size] = var_8;
|
||||
}
|
||||
|
||||
if ( isdefined( var_2.target ) )
|
||||
{
|
||||
var_6 = getentarray( var_2.target, "targetname" );
|
||||
|
||||
foreach ( var_8 in var_6 )
|
||||
{
|
||||
if ( var_8.classname == "trigger_multiple" )
|
||||
var_2.triggers[var_2.triggers.size] = var_8;
|
||||
}
|
||||
}
|
||||
|
||||
if ( isdefined( var_2.script_triggername ) )
|
||||
{
|
||||
var_6 = getentarray( var_2.script_triggername, "target" );
|
||||
|
||||
foreach ( var_8 in var_6 )
|
||||
{
|
||||
if ( var_8.classname == "trigger_multiple" )
|
||||
var_2.triggers[var_2.triggers.size] = var_8;
|
||||
}
|
||||
}
|
||||
|
||||
if ( !isdefined( var_1 ) )
|
||||
{
|
||||
var_14 = getvehiclenodearray( var_2.target, "targetname" );
|
||||
|
||||
foreach ( var_16 in var_14 )
|
||||
{
|
||||
var_17 = [];
|
||||
var_17[0] = var_2;
|
||||
var_17[1] = var_16;
|
||||
|
||||
for ( var_18 = 1; !isdefined( var_17[var_18].script_noteworthy ) || var_17[var_18].script_noteworthy != "bird_perch"; var_18++ )
|
||||
{
|
||||
if ( !isdefined( var_17[var_18].target ) )
|
||||
break;
|
||||
|
||||
var_19 = var_17[var_18].target;
|
||||
var_20 = getvehiclenode( var_19, "targetname" );
|
||||
|
||||
if ( !isdefined( var_20 ) )
|
||||
{
|
||||
var_20 = getnode( var_19, "targetname" );
|
||||
|
||||
if ( !isdefined( var_20 ) )
|
||||
{
|
||||
var_20 = getent( var_19, "targetname" );
|
||||
|
||||
if ( isdefined( var_20 ) )
|
||||
var_20 = birds_setupconnectedperches( var_20 );
|
||||
else
|
||||
var_20 = level._interactive["bird_perches"][var_2.targetname];
|
||||
}
|
||||
}
|
||||
|
||||
var_17[var_18 + 1] = var_20;
|
||||
}
|
||||
|
||||
var_2 birds_perchsetuppath( var_17 );
|
||||
}
|
||||
}
|
||||
else
|
||||
var_2 birds_perchsetuppath( var_1 );
|
||||
|
||||
return var_2;
|
||||
}
|
||||
|
||||
birds_perchsetuppath( var_0 )
|
||||
{
|
||||
if ( !isdefined( self.outgoing ) )
|
||||
self.outgoing = [];
|
||||
|
||||
var_1 = common_scripts\_csplines::cspline_makepath( var_0 );
|
||||
var_2 = var_0[var_0.size - 1];
|
||||
|
||||
if ( isdefined( var_2.classname ) )
|
||||
{
|
||||
if ( !isdefined( var_2.incoming ) )
|
||||
var_2.incoming = [];
|
||||
|
||||
var_2.incoming[var_2.incoming.size] = var_1;
|
||||
}
|
||||
|
||||
if ( isdefined( var_2.script_noteworthy ) && var_2.script_noteworthy == "bird_perch" )
|
||||
{
|
||||
var_1.endperch = var_2;
|
||||
var_1.landanim = var_2.interactive_landanim;
|
||||
}
|
||||
|
||||
var_1.startorigin = self.origin;
|
||||
var_1.startangles = self.angles;
|
||||
var_1.takeoffanim = self.interactive_takeoffanim;
|
||||
var_1.endorigin = var_2.origin;
|
||||
var_1.endangles = var_2.angles;
|
||||
self.outgoing[self.outgoing.size] = var_1;
|
||||
}
|
||||
|
||||
birds_fly( var_0 )
|
||||
{
|
||||
self endon( "death" );
|
||||
self.perch = level._interactive["bird_perches"][var_0];
|
||||
var_1 = level._interactive[self.interactive_type];
|
||||
var_2 = self.perch.outgoing[randomint( self.perch.outgoing.size )];
|
||||
var_3 = common_scripts\_csplines::cspline_getpointatdistance( var_2, 0 );
|
||||
self.origin = var_3["pos"];
|
||||
self.angles = var_2.startangles;
|
||||
|
||||
if ( common_scripts\utility::issp() )
|
||||
{
|
||||
self call [[ level.func["setanimknob"] ]]( var_1.rigmodel_anims[var_2.takeoffanim], 1, 0, 0 );
|
||||
self call [[ level.func["setanimtime"] ]]( var_1.rigmodel_anims[var_2.takeoffanim], 0 );
|
||||
}
|
||||
else
|
||||
self call [[ level.func["scriptModelPlayAnim"] ]]( var_1.rigmodel_anims[var_2.takeoffanim + "mp"] );
|
||||
|
||||
var_4 = 0;
|
||||
self.landed = 1;
|
||||
var_5 = var_1.scareradius;
|
||||
|
||||
if ( isdefined( self.perch.script_radius ) )
|
||||
var_5 = self.perch.script_radius;
|
||||
|
||||
if ( var_5 > 0 )
|
||||
self.perch thread birds_perchdangertrigger( var_5, "triggered", "leaving perch" );
|
||||
|
||||
for (;;)
|
||||
{
|
||||
var_6 = 0;
|
||||
var_7 = var_1.rigmodel_anims[var_2.takeoffanim];
|
||||
var_8 = var_1.rigmodel_anims[var_2.takeoffanim + "mp"];
|
||||
var_9 = var_1.rigmodel_anims["flying"];
|
||||
var_10 = var_1.rigmodel_anims["flyingmp"];
|
||||
|
||||
if ( isdefined( var_2.landanim ) )
|
||||
{
|
||||
var_11 = var_1.rigmodel_anims[var_2.landanim];
|
||||
var_12 = var_1.rigmodel_anims[var_2.landanim + "mp"];
|
||||
}
|
||||
else
|
||||
{
|
||||
var_11 = undefined;
|
||||
var_12 = undefined;
|
||||
}
|
||||
|
||||
if ( isdefined( var_1.rigmodel_pausestart[var_2.takeoffanim] ) )
|
||||
var_13 = var_1.rigmodel_pausestart[var_2.takeoffanim];
|
||||
else
|
||||
var_13 = 0;
|
||||
|
||||
var_14 = 0;
|
||||
|
||||
if ( !self.landed )
|
||||
{
|
||||
if ( isdefined( var_11 ) && self.currentanim == var_11 )
|
||||
{
|
||||
var_6 = 1 - self call [[ level.func["getanimtime"] ]]( self.currentanim );
|
||||
var_14 = var_6 * getanimlength( var_7 );
|
||||
var_13 = var_13 - var_14;
|
||||
var_13 = max( 0, var_13 );
|
||||
}
|
||||
else
|
||||
{
|
||||
var_7 = var_1.rigmodel_anims["flying"];
|
||||
var_8 = var_1.rigmodel_anims["flyingmp"];
|
||||
var_6 = self call [[ level.func["getanimtime"] ]]( self.currentanim );
|
||||
var_14 = var_6 * getanimlength( var_7 );
|
||||
var_13 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if ( isdefined( var_11 ) && isdefined( var_1.rigmodel_pauseend[var_2.landanim] ) )
|
||||
var_15 = var_1.rigmodel_pauseend[var_2.landanim];
|
||||
else
|
||||
var_15 = 0;
|
||||
|
||||
var_16 = var_1.accn / 400;
|
||||
var_17 = var_2.segments[var_2.segments.size - 1].endat;
|
||||
var_18 = sqrt( var_16 * var_17 + var_4 * var_4 / 2 );
|
||||
var_19 = var_1.topspeed / 20;
|
||||
|
||||
if ( var_18 < var_19 )
|
||||
var_19 = var_18;
|
||||
|
||||
var_20 = int( ( var_19 - var_4 ) / var_16 );
|
||||
var_21 = var_16 * ( var_20 / 2 ) * ( var_20 + 1 ) + var_4 * var_20;
|
||||
|
||||
if ( isdefined( var_2.endperch ) )
|
||||
{
|
||||
var_22 = int( var_19 / var_16 );
|
||||
var_23 = var_16 * ( var_22 / 2 ) * ( var_22 + 1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
var_22 = 0;
|
||||
var_23 = 0;
|
||||
}
|
||||
|
||||
var_24 = ( var_17 - ( var_21 + var_23 ) ) / var_19;
|
||||
var_25 = ( var_24 + ( var_20 + var_22 ) ) / 20;
|
||||
var_26 = getanimlength( var_9 );
|
||||
|
||||
if ( isdefined( var_11 ) )
|
||||
var_27 = getanimlength( var_7 ) + getanimlength( var_11 ) - ( var_13 + var_14 + var_15 );
|
||||
else
|
||||
var_27 = getanimlength( var_7 ) - ( var_13 + var_14 + var_15 );
|
||||
|
||||
var_28 = int( ( var_25 - var_27 ) / var_26 + 0.5 );
|
||||
var_29 = ( var_28 * var_26 + var_27 ) / var_25;
|
||||
var_30 = var_2.endangles - var_2.startangles;
|
||||
var_30 = ( angleclamp180( var_30[0] ), angleclamp180( var_30[1] ), angleclamp180( var_30[2] ) );
|
||||
|
||||
if ( self.landed )
|
||||
{
|
||||
self.perch waittill( "triggered" );
|
||||
self.landed = 0;
|
||||
thread flock_fly_anim( var_7, 0, var_9, var_11, var_29, var_28, var_8, var_10, var_12 );
|
||||
thread flock_playsound( var_1, "takeoff" );
|
||||
var_31 = var_13 == 0;
|
||||
|
||||
for ( var_32 = 1; var_32 <= self.interactive_number; var_32++ )
|
||||
{
|
||||
if ( self.birdexists[var_32] )
|
||||
self.birds[var_32] thread bird_flyfromperch( self, "tag_bird" + var_32, var_1.bird_model["fly"], var_1.bird_model["idle"], var_1.birdmodel_anims, "land_" + var_32, "takeoff_" + var_32, var_31 );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
self notify( "stop_path" );
|
||||
thread flock_fly_anim( var_7, var_6, var_9, var_11, var_29, var_28, var_8, var_10, var_12 );
|
||||
|
||||
for ( var_32 = 1; var_32 <= self.interactive_number; var_32++ )
|
||||
{
|
||||
if ( self.birdexists[var_32] )
|
||||
self.birds[var_32] thread bird_fly( self, "tag_bird" + var_32, var_1.bird_model["fly"], var_1.bird_model["idle"], var_1.birdmodel_anims, "land_" + var_32 );
|
||||
}
|
||||
}
|
||||
|
||||
if ( isdefined( self.perch ) )
|
||||
{
|
||||
self.perch notify( "leaving perch" );
|
||||
self.perch = undefined;
|
||||
}
|
||||
|
||||
wait( var_13 );
|
||||
var_33 = 0;
|
||||
var_34 = 0.2;
|
||||
|
||||
while ( var_4 < var_19 - var_16 )
|
||||
{
|
||||
var_4 = var_4 + var_16;
|
||||
var_33 = var_33 + var_4;
|
||||
var_3 = common_scripts\_csplines::cspline_getpointatdistance( var_2, var_33 );
|
||||
self.origin = var_3["pos"];
|
||||
self.angles = var_2.startangles + var_30 * ( var_33 / var_17 );
|
||||
birds_set_flying_angles( self, var_3["vel"] * var_4, var_34, self.birds );
|
||||
wait 0.05;
|
||||
}
|
||||
|
||||
var_4 = var_19;
|
||||
|
||||
while ( var_33 < var_17 - var_23 )
|
||||
{
|
||||
var_33 = var_33 + var_4;
|
||||
var_3 = common_scripts\_csplines::cspline_getpointatdistance( var_2, var_33 );
|
||||
self.origin = var_3["pos"];
|
||||
self.angles = var_2.startangles + var_30 * ( var_33 / var_17 );
|
||||
birds_set_flying_angles( self, var_3["vel"] * var_4, var_34, self.birds );
|
||||
wait 0.05;
|
||||
}
|
||||
|
||||
if ( !isdefined( var_2.endperch ) )
|
||||
birds_delete();
|
||||
|
||||
var_35 = var_17 - var_33;
|
||||
var_36 = var_35 / var_23;
|
||||
var_4 = var_16 * ( int( var_4 / var_16 ) + 1 );
|
||||
self.perch = var_2.endperch;
|
||||
self.perch thread birds_perchdangertrigger( var_5, "triggered", "leaving perch" );
|
||||
|
||||
while ( var_4 > var_19 * 0.75 || var_4 > 0 && birds_isperchsafe( self.perch ) )
|
||||
{
|
||||
var_4 = var_4 - var_16;
|
||||
var_33 = var_33 + var_4 * var_36;
|
||||
var_3 = common_scripts\_csplines::cspline_getpointatdistance( var_2, var_33 );
|
||||
self.origin = var_3["pos"];
|
||||
self.angles = var_2.startangles + var_30 * ( var_33 / var_17 );
|
||||
birds_set_flying_angles( self, var_3["vel"] * var_4, var_34, self.birds );
|
||||
wait 0.05;
|
||||
}
|
||||
|
||||
if ( var_4 <= 0 )
|
||||
{
|
||||
self.origin = self.perch.origin;
|
||||
self.angles = self.perch.angles;
|
||||
var_2 = self.perch.outgoing[randomint( self.perch.outgoing.size )];
|
||||
|
||||
for ( var_32 = 0; var_32 < 20 * var_15 && birds_isperchsafe( self.perch ); var_32++ )
|
||||
wait 0.05;
|
||||
|
||||
if ( birds_isperchsafe( self.perch ) )
|
||||
self.landed = 1;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
var_37 = self.perch.outgoing[randomint( self.perch.outgoing.size )];
|
||||
var_2 = birds_path_move_first_point( var_37, var_3["pos"], var_3["vel"] * ( var_4 / var_19 ) );
|
||||
var_2.startangles = self.angles;
|
||||
self.perch notify( "leaving perch" );
|
||||
self.perch = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
debugprint( var_0 )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
birds_set_flying_angles( var_0, var_1, var_2, var_3 )
|
||||
{
|
||||
if ( common_scripts\utility::issp() )
|
||||
{
|
||||
for ( var_4 = 1; var_4 <= var_3.size; var_4++ )
|
||||
{
|
||||
if ( self.birdexists[var_4] )
|
||||
{
|
||||
var_5 = var_0 gettagangles( "tag_bird" + var_4 );
|
||||
var_6 = anglestoforward( var_5 ) / var_2;
|
||||
var_7 = var_6 + var_1;
|
||||
var_8 = vectortoangles( var_7 );
|
||||
var_9 = var_8 - var_5;
|
||||
var_9 = ( angleclamp180( var_9[0] ) / 3, angleclamp180( var_9[1] ), 0 );
|
||||
var_3[var_4] linkto( var_0, "tag_bird" + var_4, ( 0, 0, 0 ), var_9 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
flock_playsound( var_0, var_1 )
|
||||
{
|
||||
if ( isdefined( var_0.sounds ) && isdefined( var_0.sounds[var_1] ) )
|
||||
self playsound( var_0.sounds[var_1] );
|
||||
}
|
||||
|
||||
flock_fly_anim( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "stop_path" );
|
||||
|
||||
if ( common_scripts\utility::issp() )
|
||||
{
|
||||
var_9 = 0;
|
||||
|
||||
if ( getanimlength( var_0 ) == 0 )
|
||||
{
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
var_10 = var_4 / ( getanimlength( var_0 ) * 20 );
|
||||
var_1 = var_1 - 2 * var_10;
|
||||
|
||||
if ( var_1 > var_10 )
|
||||
var_9 = 0.3;
|
||||
|
||||
self call [[ level.func["setflaggedanimknob"] ]]( "bird_rig_takeoff_anim", var_0, 1, var_9, var_4 );
|
||||
self.currentanim = var_0;
|
||||
|
||||
if ( var_1 > var_10 )
|
||||
{
|
||||
common_scripts\utility::waitframe();
|
||||
self call [[ level.func["setanimtime"] ]]( var_0, var_1 );
|
||||
self waittillmatch( "bird_rig_takeoff_anim", "end" );
|
||||
}
|
||||
else
|
||||
self waittillmatch( "bird_rig_takeoff_anim", "end" );
|
||||
}
|
||||
|
||||
self call [[ level.func["setflaggedanimknobrestart"] ]]( "bird_rig_loop_anim", var_2, 1, 0, var_4 );
|
||||
self.currentanim = var_2;
|
||||
|
||||
for ( var_11 = 0; var_11 < var_5; var_11++ )
|
||||
self waittillmatch( "bird_rig_loop_anim", "end" );
|
||||
|
||||
if ( isdefined( var_3 ) )
|
||||
{
|
||||
self call [[ level.func["setflaggedanimknobrestart"] ]]( "bird_rig_land_anim", var_3, 1, 0.05, var_4 );
|
||||
self.currentanim = var_3;
|
||||
self waittillmatch( "bird_rig_land_anim", "end" );
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( getanimlength( var_0 ) == 0 )
|
||||
{
|
||||
|
||||
}
|
||||
else if ( var_1 < 0.2 )
|
||||
{
|
||||
self call [[ level.func["scriptModelPlayAnim"] ]]( var_6 );
|
||||
self.currentanim = var_0;
|
||||
wait( getanimlength( var_0 ) );
|
||||
}
|
||||
|
||||
self call [[ level.func["scriptModelPlayAnim"] ]]( var_7 );
|
||||
self.currentanim = var_2;
|
||||
|
||||
for ( var_11 = 0; var_11 < var_5; var_11++ )
|
||||
wait( getanimlength( var_2 ) );
|
||||
|
||||
if ( isdefined( var_3 ) )
|
||||
{
|
||||
self call [[ level.func["scriptModelPlayAnim"] ]]( var_8 );
|
||||
self.currentanim = var_3;
|
||||
wait( getanimlength( var_3 ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bird_flyfromperch( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7 )
|
||||
{
|
||||
self endon( "death" );
|
||||
var_0 endon( "stop_path" );
|
||||
|
||||
if ( isdefined( var_6 ) && !var_7 && common_scripts\utility::issp() )
|
||||
var_0 waittillmatch( "bird_rig_takeoff_anim", var_6 );
|
||||
|
||||
self notify( "Stop initial model setup" );
|
||||
self setmodel( var_2 );
|
||||
self notify( "stop_loop" );
|
||||
|
||||
if ( var_7 )
|
||||
{
|
||||
var_8 = maps\interactive_models\_interactive_utility::single_anim( var_4, "flying", undefined, 0 );
|
||||
|
||||
if ( common_scripts\utility::issp() )
|
||||
{
|
||||
common_scripts\utility::waitframe();
|
||||
self call [[ level.func["setanimtime"] ]]( var_8, randomfloat( 1 ) );
|
||||
}
|
||||
}
|
||||
else if ( isdefined( var_4["takeoff"] ) )
|
||||
{
|
||||
var_9 = maps\interactive_models\_interactive_utility::single_anim( var_4, "takeoff", "takeoff_anim", 1 );
|
||||
|
||||
if ( common_scripts\utility::issp() )
|
||||
self waittillmatch( "takeoff_anim", "end" );
|
||||
else
|
||||
wait( getanimlength( var_9 ) );
|
||||
}
|
||||
|
||||
bird_fly( var_0, var_1, var_2, var_3, var_4, var_5 );
|
||||
}
|
||||
|
||||
bird_fly( var_0, var_1, var_2, var_3, var_4, var_5 )
|
||||
{
|
||||
self endon( "death" );
|
||||
var_0 endon( "stop_path" );
|
||||
self setmodel( var_2 );
|
||||
self notify( "stop_loop" );
|
||||
thread maps\interactive_models\_interactive_utility::loop_anim( var_4, "flying", "stop_loop" );
|
||||
var_0 waittillmatch( "bird_rig_land_anim", var_5 );
|
||||
|
||||
if ( isdefined( var_4["land"] ) )
|
||||
{
|
||||
self notify( "stop_loop" );
|
||||
self endon( "stop_loop" );
|
||||
maps\interactive_models\_interactive_utility::single_anim( var_4, "land", undefined, 1 );
|
||||
}
|
||||
|
||||
thread bird_sit( var_0, var_1, var_3, var_4 );
|
||||
}
|
||||
|
||||
bird_sit( var_0, var_1, var_2, var_3 )
|
||||
{
|
||||
self endon( "death" );
|
||||
self setmodel( var_2 );
|
||||
self notify( "stop_loop" );
|
||||
maps\interactive_models\_interactive_utility::loop_anim( var_3, "idle", "stop_loop" );
|
||||
}
|
||||
|
||||
bird_waitfordamage( var_0, var_1 )
|
||||
{
|
||||
for (;;)
|
||||
{
|
||||
self waittill( "damage", var_2, var_3, var_4, var_5, var_6 );
|
||||
|
||||
if ( isdefined( self.origin ) )
|
||||
{
|
||||
if ( var_6 == "MOD_GRENADE_SPLASH" )
|
||||
var_5 = self.origin + ( 0, 0, 5 );
|
||||
|
||||
playfx( level._interactive[var_0.interactive_type].death_effect, var_5 );
|
||||
|
||||
if ( self.health <= 0 )
|
||||
{
|
||||
var_0.birdexists[var_1] = 0;
|
||||
var_0.numbirds--;
|
||||
|
||||
if ( var_0.numbirds == 0 )
|
||||
var_0 delete();
|
||||
|
||||
self delete();
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( isdefined( var_0.perch ) )
|
||||
var_0.perch notify( "triggered" );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
birds_finishbirdtypesetup( var_0, var_1 )
|
||||
{
|
||||
if ( !isdefined( var_1 ) )
|
||||
var_1 = 0;
|
||||
|
||||
precachemodel( var_0.rig_model );
|
||||
|
||||
foreach ( var_3 in var_0.bird_model )
|
||||
precachemodel( var_3 );
|
||||
|
||||
if ( !common_scripts\utility::issp() )
|
||||
{
|
||||
foreach ( var_6 in var_0.sounds )
|
||||
precachesound( var_6 );
|
||||
|
||||
for ( var_8 = 1; var_8 <= 12; var_8++ )
|
||||
precachestring( "tag_bird" + var_8 );
|
||||
|
||||
foreach ( var_10 in getarraykeys( level._interactive[self.interactive_type].rigmodel_anims ) )
|
||||
{
|
||||
if ( isendstr( var_10, "mp" ) )
|
||||
{
|
||||
var_11 = level._interactive[self.interactive_type].rigmodel_anims[var_10];
|
||||
|
||||
if ( isarray( var_11 ) )
|
||||
{
|
||||
foreach ( var_13 in var_11 )
|
||||
call [[ level.func["precacheMpAnim"] ]]( var_13 );
|
||||
}
|
||||
else
|
||||
call [[ level.func["precacheMpAnim"] ]]( var_11 );
|
||||
}
|
||||
}
|
||||
|
||||
foreach ( var_10 in getarraykeys( level._interactive[self.interactive_type].birdmodel_anims ) )
|
||||
{
|
||||
if ( isendstr( var_10, "mp" ) )
|
||||
{
|
||||
var_11 = level._interactive[self.interactive_type].birdmodel_anims[var_10];
|
||||
|
||||
if ( isarray( var_11 ) )
|
||||
{
|
||||
foreach ( var_13 in var_11 )
|
||||
call [[ level.func["precacheMpAnim"] ]]( var_13 );
|
||||
}
|
||||
else
|
||||
call [[ level.func["precacheMpAnim"] ]]( var_11 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var_0.savetostructfn = ::birds_savetostruct;
|
||||
var_0.loadfromstructfn = ::birds_loadfromstruct;
|
||||
var_0.rigmodel_pausestart = [];
|
||||
var_0.rigmodel_pauseend = [];
|
||||
var_20 = getarraykeys( var_0.rigmodel_anims );
|
||||
|
||||
foreach ( var_22 in var_20 )
|
||||
{
|
||||
if ( !isendstr( var_22, "mp" ) )
|
||||
{
|
||||
if ( common_scripts\utility::string_starts_with( var_22, "takeoff_" ) )
|
||||
{
|
||||
if ( getanimlength( var_0.rigmodel_anims[var_22] ) == 0 )
|
||||
{
|
||||
var_0.rigmodel_anims[var_22] = var_0.rigmodel_anims["fly"];
|
||||
var_0.rigmodel_pausestart[var_22] = 0;
|
||||
}
|
||||
else
|
||||
var_0.rigmodel_pausestart[var_22] = birds_get_last_takeoff( var_0, var_22, var_0.rig_numtags ) + var_1;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( common_scripts\utility::string_starts_with( var_22, "land_" ) )
|
||||
{
|
||||
if ( getanimlength( var_0.rigmodel_anims[var_22] ) == 0 )
|
||||
{
|
||||
var_0.rigmodel_anims[var_22] = var_0.rigmodel_anims["fly"];
|
||||
var_0.rigmodel_pauseend[var_22] = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
var_0.rigmodel_pauseend[var_22] = birds_get_first_land( var_0, var_22, var_0.rig_numtags );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
birds_get_last_takeoff( var_0, var_1, var_2 )
|
||||
{
|
||||
var_3 = var_0.rigmodel_anims[var_1];
|
||||
var_4 = 0;
|
||||
|
||||
for ( var_5 = 1; var_5 <= var_2; var_5++ )
|
||||
{
|
||||
var_6 = getnotetracktimes( var_3, "takeoff_" + var_5 );
|
||||
|
||||
if ( var_6.size <= 0 )
|
||||
continue;
|
||||
|
||||
if ( var_6.size > 1 )
|
||||
continue;
|
||||
|
||||
if ( var_6[0] > var_4 )
|
||||
var_4 = var_6[0];
|
||||
}
|
||||
|
||||
return getanimlength( var_0.rigmodel_anims[var_1] ) * var_4;
|
||||
}
|
||||
|
||||
birds_get_first_land( var_0, var_1, var_2 )
|
||||
{
|
||||
var_3 = var_0.rigmodel_anims[var_1];
|
||||
var_4 = 1;
|
||||
|
||||
for ( var_5 = 1; var_5 <= var_2; var_5++ )
|
||||
{
|
||||
var_6 = getnotetracktimes( var_3, "land_" + var_5 );
|
||||
|
||||
if ( var_6.size <= 0 )
|
||||
continue;
|
||||
|
||||
if ( var_6.size > 1 )
|
||||
continue;
|
||||
|
||||
if ( var_6[0] < var_4 )
|
||||
var_4 = var_6[0];
|
||||
}
|
||||
|
||||
return getanimlength( var_0.rigmodel_anims[var_1] ) * ( 1 - var_4 );
|
||||
}
|
||||
|
||||
birds_perchdangertrigger( var_0, var_1, var_2 )
|
||||
{
|
||||
self.trigger = spawn( "trigger_radius", self.origin - ( 0, 0, var_0 ), 23, var_0, 2 * var_0 );
|
||||
thread maps\interactive_models\_interactive_utility::delete_on_notify( self.trigger, "death", var_2 );
|
||||
thread birds_perchtouchtrigger( self.trigger, var_1, var_2 );
|
||||
thread birds_percheventtrigger( var_0, var_1, var_2 );
|
||||
|
||||
foreach ( var_4 in self.triggers )
|
||||
thread birds_perchtouchtrigger( var_4, var_1, var_2 );
|
||||
}
|
||||
|
||||
birds_perchtouchtrigger( var_0, var_1, var_2 )
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( var_2 );
|
||||
|
||||
for (;;)
|
||||
{
|
||||
var_0.anythingtouchingtrigger = 0;
|
||||
var_0 waittill( "trigger" );
|
||||
self notify( var_1 );
|
||||
var_0.anythingtouchingtrigger = 1;
|
||||
wait 1;
|
||||
}
|
||||
}
|
||||
|
||||
birds_percheventtrigger( var_0, var_1, var_2 )
|
||||
{
|
||||
if ( common_scripts\utility::issp() )
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( var_2 );
|
||||
self.sentient = spawn( "script_origin", self.origin );
|
||||
self.sentient call [[ level.makeentitysentient_func ]]( "neutral" );
|
||||
thread maps\interactive_models\_interactive_utility::wait_then_fn( var_2, "death", ::birds_deleteperchsentient );
|
||||
self.sentient call [[ level.addaieventlistener_func ]]( "projectile_impact" );
|
||||
self.sentient call [[ level.addaieventlistener_func ]]( "bulletwhizby" );
|
||||
self.sentient call [[ level.addaieventlistener_func ]]( "explode" );
|
||||
self.lastaieventtrigger = gettime() - 500;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
self.sentient waittill( "ai_event", var_3, var_4, var_5 );
|
||||
|
||||
if ( var_3 != "explode" && var_3 != "gunshot" || distancesquared( self.origin, var_5 ) < 2 * var_0 )
|
||||
{
|
||||
self notify( var_1 );
|
||||
self.lastaieventtrigger = gettime();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
birds_deleteperchsentient()
|
||||
{
|
||||
self.sentient delete();
|
||||
}
|
||||
|
||||
birds_isperchsafe( var_0 )
|
||||
{
|
||||
var_1 = 0;
|
||||
var_2 = !var_0.trigger.anythingtouchingtrigger;
|
||||
|
||||
if ( var_2 )
|
||||
{
|
||||
foreach ( var_4 in var_0.triggers )
|
||||
{
|
||||
if ( var_4.anythingtouchingtrigger )
|
||||
{
|
||||
var_2 = 0;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if ( var_0.lastaieventtrigger > gettime() )
|
||||
var_0.lastaieventtrigger = gettime() - 500;
|
||||
|
||||
if ( gettime() - var_0.lastaieventtrigger >= 500 )
|
||||
var_1 = 1;
|
||||
}
|
||||
|
||||
return var_2 && var_1;
|
||||
}
|
||||
|
||||
birds_path_move_first_point( var_0, var_1, var_2 )
|
||||
{
|
||||
var_3 = common_scripts\_csplines::cspline_movefirstpoint( var_0, var_1, var_2 );
|
||||
var_3.startorigin = var_1;
|
||||
|
||||
if ( isdefined( var_0.startangles ) )
|
||||
var_3.startangles = var_0.startangles;
|
||||
|
||||
if ( isdefined( var_0.endorigin ) )
|
||||
var_3.endorigin = var_0.endorigin;
|
||||
|
||||
if ( isdefined( var_0.endangles ) )
|
||||
var_3.endangles = var_0.endangles;
|
||||
|
||||
if ( isdefined( var_0.endperch ) )
|
||||
var_3.endperch = var_0.endperch;
|
||||
|
||||
if ( isdefined( var_0.takeoffanim ) )
|
||||
var_3.takeoffanim = var_0.takeoffanim;
|
||||
|
||||
if ( isdefined( var_0.landanim ) )
|
||||
var_3.landanim = var_0.landanim;
|
||||
|
||||
return var_3;
|
||||
}
|
||||
|
||||
birds_spawnandflyaway( var_0, var_1, var_2, var_3 )
|
||||
{
|
||||
if ( !isdefined( level._interactive["scriptSpawnedCount"] ) )
|
||||
level._interactive["scriptSpawnedCount"] = 0;
|
||||
|
||||
level._interactive["scriptSpawnedCount"]++;
|
||||
var_4 = spawn( "script_model", var_1 );
|
||||
var_4.angles = vectortoangles( var_2 );
|
||||
var_4.targetname = "scriptSpawned_" + level._interactive["scriptSpawnedCount"];
|
||||
var_4.script_noteworthy = "bird_perch";
|
||||
var_5 = [];
|
||||
var_5[0] = var_4;
|
||||
var_5[1] = spawnstruct();
|
||||
var_5[1].origin = var_1 + var_2;
|
||||
var_5[1].angles = var_4.angles;
|
||||
var_4 = birds_setupconnectedperches( var_4, var_5 );
|
||||
var_6 = spawnstruct();
|
||||
var_6.interactive_type = var_0;
|
||||
var_6.target = var_4.targetname;
|
||||
var_6.origin = var_1;
|
||||
var_6.interactive_number = var_3;
|
||||
var_6 birds_loadfromstruct();
|
||||
var_4 notify( "triggered" );
|
||||
common_scripts\utility::waitframe();
|
||||
level._interactive["bird_perches"][var_4.targetname] = undefined;
|
||||
}
|
||||
|
||||
birds_waitfortriggerstop()
|
||||
{
|
||||
self endon( "death" );
|
||||
level waittill( "stop_" + self.script_triggername );
|
||||
thread birds_savetostructandwaitfortriggerstart();
|
||||
}
|
||||
|
||||
birds_savetostructandwaitfortriggerstart()
|
||||
{
|
||||
var_0 = birds_savetostruct();
|
||||
level waittill( "start_" + self.script_triggername );
|
||||
var_0 birds_loadfromstruct();
|
||||
}
|
||||
|
||||
birds_savetostruct()
|
||||
{
|
||||
var_0 = spawnstruct();
|
||||
var_0.interactive_type = self.interactive_type;
|
||||
var_0.target = self.target;
|
||||
var_0.origin = self.origin;
|
||||
var_0.targetname = self.targetname;
|
||||
|
||||
if ( isdefined( self.interactive_number ) )
|
||||
var_0.interactive_number = self.interactive_number;
|
||||
|
||||
var_0.script_triggername = self.script_triggername;
|
||||
birds_delete();
|
||||
return var_0;
|
||||
}
|
||||
|
||||
birds_loadfromstruct()
|
||||
{
|
||||
var_0 = spawn( "script_model", self.origin );
|
||||
var_0.interactive_type = self.interactive_type;
|
||||
var_0.target = self.target;
|
||||
var_0.origin = self.origin;
|
||||
|
||||
if ( isdefined( self.interactive_number ) )
|
||||
var_0.interactive_number = self.interactive_number;
|
||||
|
||||
var_0.script_triggername = self.script_triggername;
|
||||
var_0.targetname = "interactive_birds";
|
||||
|
||||
if ( !isdefined( level._interactive["bird_perches"][self.target] ) )
|
||||
var_0 birds_setupconnectedperches();
|
||||
|
||||
var_0 birds_createents();
|
||||
var_0 thread birds_fly( var_0.target );
|
||||
}
|
||||
|
||||
birds_delete()
|
||||
{
|
||||
if ( isdefined( self.birds ) )
|
||||
{
|
||||
for ( var_0 = 1; var_0 <= self.birds.size; var_0++ )
|
||||
{
|
||||
if ( self.birdexists[var_0] )
|
||||
self.birds[var_0] delete();
|
||||
}
|
||||
}
|
||||
|
||||
if ( isdefined( self.perch ) )
|
||||
self.perch notify( "leaving perch" );
|
||||
|
||||
self delete();
|
||||
}
|
1039
maps/interactive_models/_birds_dlc.gsc
Normal file
1039
maps/interactive_models/_birds_dlc.gsc
Normal file
File diff suppressed because it is too large
Load Diff
316
maps/interactive_models/_fish.gsc
Normal file
316
maps/interactive_models/_fish.gsc
Normal file
@ -0,0 +1,316 @@
|
||||
// IW6 GSC SOURCE
|
||||
// Generated by https://github.com/xensik/gsc-tool
|
||||
|
||||
fish()
|
||||
{
|
||||
level waittill( "load_finished" );
|
||||
|
||||
if ( isdefined( level._interactive["fish_setup"] ) )
|
||||
return;
|
||||
|
||||
level._interactive["fish_setup"] = 1;
|
||||
var_0 = getentarray( "interactive_fish", "script_noteworthy" );
|
||||
|
||||
foreach ( var_2 in var_0 )
|
||||
{
|
||||
if ( var_2.classname == "script_model" )
|
||||
var_2 thread single_fish_start();
|
||||
}
|
||||
}
|
||||
|
||||
single_fish_start()
|
||||
{
|
||||
if ( isdefined( self.target ) )
|
||||
var_0 = getentarray( self.target, "targetname" );
|
||||
else
|
||||
var_0 = [];
|
||||
|
||||
if ( var_0.size >= 1 && isdefined( var_0[0].script_noteworthy ) && var_0[0].script_noteworthy == "interactive_fish" )
|
||||
{
|
||||
self.following = var_0[0];
|
||||
|
||||
if ( !isdefined( var_0[0].followedby ) )
|
||||
var_0[0].followedby = [];
|
||||
|
||||
var_0[0].followedby[var_0[0].followedby.size] = self;
|
||||
var_0 = [];
|
||||
}
|
||||
|
||||
var_1 = spawnstruct();
|
||||
var_1.origin = self.origin;
|
||||
var_1.script_radius = self.script_radius;
|
||||
var_0[var_0.size] = var_1;
|
||||
|
||||
if ( !isdefined( self.script_moveplaybackrate ) )
|
||||
self.script_moveplaybackrate = 1;
|
||||
|
||||
foreach ( var_3 in var_0 )
|
||||
{
|
||||
if ( !isdefined( var_3.script_radius ) )
|
||||
var_3.script_radius = level._interactive[self.interactive_type].default_wander_radius;
|
||||
}
|
||||
|
||||
thread single_fish_detectdamage( "interrupted" );
|
||||
thread single_fish_idle( self.interactive_type, var_0, var_1.origin, var_1.script_radius, 1 );
|
||||
self removefrommovingplatformsystem( 1 );
|
||||
}
|
||||
|
||||
single_fish_idle( var_0, var_1, var_2, var_3, var_4 )
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "interrupted" );
|
||||
|
||||
if ( !isdefined( var_4 ) )
|
||||
var_4 = 0;
|
||||
|
||||
var_5 = level._interactive[var_0];
|
||||
self useanimtree( var_5.animtree );
|
||||
thread maps\interactive_models\_interactive_utility::detect_people( var_5.people_react_distance, "interrupted", [ "interrupted", "death", "damage" ] );
|
||||
thread maps\interactive_models\_interactive_utility::detect_player_event( var_5.gunfire_react_distance, "interrupted", [ "interrupted", "death", "damage" ], "weapon_fired" );
|
||||
thread single_fish_flee( var_0, var_1 );
|
||||
|
||||
for (;;)
|
||||
{
|
||||
var_6 = var_2 - self.origin;
|
||||
var_7 = length( ( var_6[0], var_6[1], 2 * var_6[2] ) );
|
||||
|
||||
if ( var_7 > var_3 * 2 )
|
||||
var_8 = maps\interactive_models\_interactive_utility::single_anim( var_5.anims, "flee_continue", "idle anim", 1, self.script_moveplaybackrate );
|
||||
else
|
||||
var_8 = maps\interactive_models\_interactive_utility::single_anim( var_5.anims, "idle", "idle anim", 1, self.script_moveplaybackrate );
|
||||
|
||||
var_9 = getanimlength( var_8 ) / self.script_moveplaybackrate;
|
||||
var_10 = length( getmovedelta( var_8 ) ) / var_9;
|
||||
var_11 = 0;
|
||||
|
||||
if ( var_4 )
|
||||
{
|
||||
wait 0.05;
|
||||
var_12 = randomfloatrange( 0, 1 );
|
||||
self setanimtime( var_8, var_12 );
|
||||
var_11 = var_12 * var_9 + 0.05;
|
||||
var_4 = 0;
|
||||
}
|
||||
|
||||
while ( var_11 < var_9 )
|
||||
{
|
||||
var_13 = var_5.wander_redirect_time * randomfloatrange( 0.5, 1.5 ) / self.script_moveplaybackrate;
|
||||
|
||||
if ( var_11 + var_13 > var_9 - var_5.wander_redirect_time / 2 )
|
||||
var_13 = var_9 - var_11;
|
||||
|
||||
if ( var_10 * var_13 > var_3 )
|
||||
var_13 = var_3 / ( var_10 * 1.5 );
|
||||
|
||||
var_14 = anglestoforward( self.angles );
|
||||
var_15 = self.origin + 0.5 * var_10 * var_14 * var_13;
|
||||
var_16 = var_2 - var_15;
|
||||
var_17 = length( ( var_16[0], var_16[1], 2 * var_16[2] ) );
|
||||
|
||||
if ( var_17 + var_10 * var_13 < var_3 )
|
||||
{
|
||||
if ( var_7 < var_3 )
|
||||
var_18 = randomfloatrange( -20, 20 );
|
||||
else
|
||||
var_18 = randomfloatrange( -60, 60 );
|
||||
|
||||
var_19 = randomfloatrange( -20, 20 ) - 0.5 * self.angles[0];
|
||||
maps\interactive_models\_interactive_utility::interactives_drawdebuglinefortime( self.origin, var_2, 0, 1, 0, var_13 );
|
||||
}
|
||||
else
|
||||
{
|
||||
var_20 = anglestoright( self.angles );
|
||||
var_18 = randomfloatrange( 60, 100 );
|
||||
|
||||
if ( vectordot( var_16, var_14 ) > 0 )
|
||||
{
|
||||
var_18 = var_18 - 60;
|
||||
|
||||
if ( var_7 < var_3 )
|
||||
var_18 = var_18 / 2;
|
||||
}
|
||||
|
||||
if ( vectordot( var_16, var_20 ) > 0 )
|
||||
var_18 = var_18 * -1;
|
||||
|
||||
var_21 = var_3 / 2;
|
||||
|
||||
if ( var_16[2] < -1 * var_21 )
|
||||
var_19 = randomfloatrange( 15, 30 ) - 0.5 * self.angles[0];
|
||||
else if ( var_16[2] > var_21 )
|
||||
var_19 = randomfloatrange( -30, -15 ) - 0.5 * self.angles[0];
|
||||
else if ( var_16[2] < -0.5 * var_21 )
|
||||
var_19 = randomfloatrange( 0, 30 ) - 0.5 * self.angles[0];
|
||||
else if ( var_16[2] > 0.5 * var_21 )
|
||||
var_19 = randomfloatrange( -30, 0 ) - 0.5 * self.angles[0];
|
||||
else
|
||||
var_19 = randomfloatrange( -20, 20 ) - 0.5 * self.angles[0];
|
||||
|
||||
maps\interactive_models\_interactive_utility::interactives_drawdebuglinefortime( self.origin, var_2, 0.7, 0.7, 0, var_13 );
|
||||
}
|
||||
|
||||
clamp( var_19, -60 - self.angles[0], 60 - self.angles[0] );
|
||||
|
||||
if ( var_18 > 0 )
|
||||
{
|
||||
self setanimlimitedrestart( var_5.anims["turn_left_child"], 1, 0 );
|
||||
self setanim( var_5.anims["turn_left"], min( var_18 / 60, 1 ), 0 );
|
||||
}
|
||||
else
|
||||
{
|
||||
self setanimlimitedrestart( var_5.anims["turn_right_child"], 1, 0, self.script_moveplaybackrate );
|
||||
self setanim( var_5.anims["turn_right"], min( var_18 / -60, 1 ), 0 );
|
||||
}
|
||||
|
||||
self rotateby( ( var_19, var_18, 0 ), 0.5 / self.script_moveplaybackrate, 0, 0.5 / self.script_moveplaybackrate );
|
||||
self.detect_people_trigger["interrupted"].origin = var_15 - ( 0, 0, 16 );
|
||||
wait( var_13 );
|
||||
var_11 = var_11 + var_13;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
single_fish_flee( var_0, var_1 )
|
||||
{
|
||||
self endon( "death" );
|
||||
var_2 = level._interactive[var_0];
|
||||
var_3 = randomint( var_1.size );
|
||||
self.nextorigin = var_1[var_3].origin;
|
||||
var_4 = var_1[var_3].script_radius;
|
||||
self waittill( "interrupted" );
|
||||
var_5 = undefined;
|
||||
|
||||
if ( isdefined( self.interruptedent ) )
|
||||
{
|
||||
if ( issentient( self.interruptedent ) )
|
||||
var_6 = self.interruptedent geteye();
|
||||
else
|
||||
var_6 = self.interruptedent.origin;
|
||||
|
||||
var_5 = vectornormalize( var_6 - self.origin );
|
||||
}
|
||||
|
||||
thread single_fish_interruptfollowers();
|
||||
self.nextorigin = single_fish_getnextorigin();
|
||||
var_7 = self.nextorigin - self.origin;
|
||||
var_8 = vectornormalize( var_7 );
|
||||
|
||||
if ( isdefined( var_5 ) && vectordot( var_5, var_8 ) > 0.7 )
|
||||
var_8 = var_5 + vectornormalize( var_8 - var_5 );
|
||||
|
||||
var_9 = anglestoforward( self.angles );
|
||||
|
||||
if ( vectordot( var_8, var_9 ) > 0.7 )
|
||||
var_10 = "flee_straight";
|
||||
else
|
||||
{
|
||||
var_11 = anglestoright( self.angles );
|
||||
|
||||
if ( vectordot( var_8, var_11 ) > 0 )
|
||||
var_10 = "flee_right";
|
||||
else
|
||||
var_10 = "flee_left";
|
||||
}
|
||||
|
||||
var_12 = vectortoangles( var_8 );
|
||||
var_13 = randomfloatrange( 0.8, 1.2 );
|
||||
var_14 = maps\interactive_models\_interactive_utility::single_anim( var_2.anims, var_10, "flee anim", 1, self.script_moveplaybackrate * var_13 );
|
||||
self rotateto( var_12, 0.2 / self.script_moveplaybackrate, 0, 0.2 / self.script_moveplaybackrate );
|
||||
var_15 = getanimlength( var_14 ) / ( self.script_moveplaybackrate * var_13 );
|
||||
var_15 = var_15 - 0.5;
|
||||
var_15 = var_15 - randomfloat( 2 );
|
||||
wait 0.5;
|
||||
|
||||
while ( var_15 > 0.3 )
|
||||
{
|
||||
var_7 = self.nextorigin - self.origin;
|
||||
var_8 = vectornormalize( var_7 );
|
||||
var_12 = vectortoangles( var_8 );
|
||||
self rotateto( var_12, 1, 0.1, 0.3 );
|
||||
wait 0.3;
|
||||
var_15 = var_15 - 0.3;
|
||||
}
|
||||
|
||||
self waittillmatch( "flee anim", "end" );
|
||||
thread single_fish_idle( var_0, var_1, self.nextorigin, var_4 );
|
||||
}
|
||||
|
||||
single_fish_getnextorigin()
|
||||
{
|
||||
if ( isdefined( self.following ) )
|
||||
return self.following single_fish_getnextorigin();
|
||||
else
|
||||
return self.nextorigin;
|
||||
}
|
||||
|
||||
single_fish_interruptfollowers()
|
||||
{
|
||||
self endon( "death" );
|
||||
wait( 0.05 * randomint( 3 ) );
|
||||
|
||||
if ( isdefined( self.following ) )
|
||||
{
|
||||
self.following.interruptedent = self.interruptedent;
|
||||
self.following notify( "interrupted" );
|
||||
}
|
||||
|
||||
if ( isdefined( self.followedby ) )
|
||||
{
|
||||
var_0 = self.followedby.size;
|
||||
|
||||
foreach ( var_2 in self.followedby )
|
||||
{
|
||||
wait( 0.05 * randomintrange( 5, 10 ) / var_0 );
|
||||
var_2.interruptedent = self.interruptedent;
|
||||
var_2 notify( "interrupted" );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
single_fish_detectdamage( var_0 )
|
||||
{
|
||||
self endon( "death" );
|
||||
self setcandamage( 1 );
|
||||
|
||||
for (;;)
|
||||
{
|
||||
self.health = 1000000;
|
||||
self waittill( "damage" );
|
||||
self notify( var_0 );
|
||||
}
|
||||
}
|
||||
|
||||
single_fish_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.target = self.target;
|
||||
var_0.targetname = self.targetname;
|
||||
var_0.script_noteworthy = self.script_noteworthy;
|
||||
var_0.script_radius = self.script_radius;
|
||||
self delete();
|
||||
return var_0;
|
||||
}
|
||||
|
||||
single_fish_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;
|
||||
var_0.script_noteworthy = self.script_noteworthy;
|
||||
var_0.script_radius = self.script_radius;
|
||||
var_0 thread single_fish_start_after_frameend();
|
||||
}
|
||||
|
||||
single_fish_start_after_frameend()
|
||||
{
|
||||
waittillframeend;
|
||||
single_fish_start();
|
||||
}
|
531
maps/interactive_models/_interactive_utility.gsc
Normal file
531
maps/interactive_models/_interactive_utility.gsc
Normal file
@ -0,0 +1,531 @@
|
||||
// IW6 GSC SOURCE
|
||||
// Generated by https://github.com/xensik/gsc-tool
|
||||
|
||||
delete_on_notify( var_0, var_1, var_2, var_3 )
|
||||
{
|
||||
var_0 endon( "death" );
|
||||
common_scripts\utility::waittill_any( var_1, var_2, var_3 );
|
||||
|
||||
if ( isdefined( var_0 ) )
|
||||
var_0 delete();
|
||||
}
|
||||
|
||||
array_sortbyarray( var_0, var_1 )
|
||||
{
|
||||
var_2 = [];
|
||||
var_2[0] = var_0[0];
|
||||
var_3 = [];
|
||||
var_3[0] = var_1[0];
|
||||
|
||||
for ( var_4 = 1; var_4 < var_0.size; var_4++ )
|
||||
{
|
||||
var_5 = 0;
|
||||
|
||||
for ( var_6 = 0; var_6 < var_2.size; var_6++ )
|
||||
{
|
||||
if ( var_1[var_4] < var_3[var_6] )
|
||||
{
|
||||
for ( var_7 = var_2.size - 1; var_7 >= var_6; var_7-- )
|
||||
{
|
||||
var_2[var_7 + 1] = var_2[var_7];
|
||||
var_3[var_7 + 1] = var_3[var_7];
|
||||
}
|
||||
|
||||
var_2[var_6] = var_0[var_4];
|
||||
var_3[var_6] = var_1[var_4];
|
||||
var_5 = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( !var_5 )
|
||||
{
|
||||
var_2[var_4] = var_0[var_4];
|
||||
var_3[var_4] = var_1[var_4];
|
||||
}
|
||||
}
|
||||
|
||||
return var_2;
|
||||
}
|
||||
|
||||
array_sortbysorter( var_0 )
|
||||
{
|
||||
var_1 = [];
|
||||
var_1[0] = var_0[0];
|
||||
|
||||
for ( var_2 = 1; var_2 < var_0.size; var_2++ )
|
||||
{
|
||||
var_3 = 0;
|
||||
|
||||
for ( var_4 = 0; var_4 < var_1.size; var_4++ )
|
||||
{
|
||||
if ( var_0[var_2].sorter < var_1[var_4].sorter )
|
||||
{
|
||||
for ( var_5 = var_1.size - 1; var_5 >= var_4; var_5-- )
|
||||
var_1[var_5 + 1] = var_1[var_5];
|
||||
|
||||
var_1[var_4] = var_0[var_2];
|
||||
var_3 = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( !var_3 )
|
||||
var_1[var_2] = var_0[var_2];
|
||||
}
|
||||
|
||||
return var_1;
|
||||
}
|
||||
|
||||
wait_then_fn( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
|
||||
{
|
||||
self endon( "death" );
|
||||
|
||||
if ( isdefined( var_1 ) )
|
||||
{
|
||||
if ( isarray( var_1 ) )
|
||||
{
|
||||
foreach ( var_8 in var_1 )
|
||||
self endon( var_8 );
|
||||
}
|
||||
else
|
||||
self endon( var_1 );
|
||||
}
|
||||
|
||||
if ( isstring( var_0 ) )
|
||||
self waittill( var_0 );
|
||||
else
|
||||
wait( var_0 );
|
||||
|
||||
if ( isdefined( var_6 ) )
|
||||
self [[ var_2 ]]( var_3, var_4, var_5, var_6 );
|
||||
else if ( isdefined( var_5 ) )
|
||||
self [[ var_2 ]]( var_3, var_4, var_5 );
|
||||
else if ( isdefined( var_4 ) )
|
||||
self [[ var_2 ]]( var_3, var_4 );
|
||||
else if ( isdefined( var_3 ) )
|
||||
self [[ var_2 ]]( var_3 );
|
||||
else
|
||||
self [[ var_2 ]]();
|
||||
}
|
||||
|
||||
waittill_notify( var_0, var_1, var_2, var_3, var_4 )
|
||||
{
|
||||
if ( !isdefined( var_4 ) )
|
||||
var_4 = 0;
|
||||
|
||||
for ( var_5 = 1; var_5; var_5 = var_4 )
|
||||
{
|
||||
self endon( "death" );
|
||||
|
||||
if ( isdefined( var_3 ) )
|
||||
self endon( var_3 );
|
||||
|
||||
self waittill( var_0 );
|
||||
var_1 notify( var_2 );
|
||||
}
|
||||
}
|
||||
|
||||
loop_anim( var_0, var_1, var_2, var_3 )
|
||||
{
|
||||
self endon( "death" );
|
||||
|
||||
if ( isdefined( var_2 ) )
|
||||
self endon( var_2 );
|
||||
|
||||
for (;;)
|
||||
{
|
||||
var_4 = single_anim( var_0, var_1, "loop_anim", 0, var_3 );
|
||||
|
||||
if ( common_scripts\utility::issp() )
|
||||
{
|
||||
self waittillmatch( "loop_anim", "end" );
|
||||
continue;
|
||||
}
|
||||
|
||||
wait( getanimlength( var_4 ) );
|
||||
}
|
||||
}
|
||||
|
||||
single_anim( var_0, var_1, var_2, var_3, var_4 )
|
||||
{
|
||||
if ( !isdefined( var_2 ) )
|
||||
var_2 = "single_anim";
|
||||
|
||||
if ( !isdefined( var_4 ) )
|
||||
var_4 = 1;
|
||||
|
||||
if ( isarray( var_0[var_1] ) )
|
||||
{
|
||||
if ( !isdefined( var_0[var_1 + "weight"] ) )
|
||||
{
|
||||
var_0[var_1 + "weight"] = [];
|
||||
var_5 = getarraykeys( var_0[var_1] );
|
||||
|
||||
foreach ( var_7 in var_5 )
|
||||
var_0[var_1 + "weight"][var_7] = 1;
|
||||
}
|
||||
|
||||
var_9 = var_0[var_1].size;
|
||||
var_10 = 0;
|
||||
|
||||
for ( var_11 = 0; var_11 < var_9; var_11++ )
|
||||
var_10 = var_10 + var_0[var_1 + "weight"][var_11];
|
||||
|
||||
var_12 = randomfloat( var_10 );
|
||||
var_13 = 0;
|
||||
|
||||
for ( var_14 = -1; var_13 <= var_12; var_13 = var_13 + var_0[var_1 + "weight"][var_14] )
|
||||
var_14++;
|
||||
|
||||
var_15 = var_0[var_1][var_14];
|
||||
|
||||
if ( isdefined( var_0[var_1 + "mp"] ) )
|
||||
var_16 = var_0[var_1 + "mp"][var_14];
|
||||
else
|
||||
var_16 = undefined;
|
||||
}
|
||||
else
|
||||
{
|
||||
var_15 = var_0[var_1];
|
||||
var_16 = var_0[var_1 + "mp"];
|
||||
}
|
||||
|
||||
if ( common_scripts\utility::issp() )
|
||||
{
|
||||
if ( isdefined( var_3 ) && var_3 )
|
||||
self call [[ level.func["setflaggedanimknobrestart"] ]]( var_2, var_15, 1, 0.1, var_4 );
|
||||
else
|
||||
self call [[ level.func["setflaggedanimknob"] ]]( var_2, var_15, 1, 0.1, var_4 );
|
||||
}
|
||||
else
|
||||
self call [[ level.func["scriptModelPlayAnim"] ]]( var_16 );
|
||||
|
||||
return var_15;
|
||||
}
|
||||
|
||||
blendanimsbyspeed( var_0, var_1, var_2, var_3, var_4 )
|
||||
{
|
||||
if ( !isdefined( var_4 ) )
|
||||
var_4 = 0.1;
|
||||
|
||||
var_0 = clamp( var_0, var_2[0], var_2[var_2.size - 1] );
|
||||
|
||||
for ( var_5 = 0; var_0 > var_2[var_5 + 1]; var_5++ )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
var_6 = var_0 - var_2[var_5];
|
||||
var_6 = var_6 / ( var_2[var_5 + 1] - var_2[var_5] );
|
||||
|
||||
if ( common_scripts\utility::issp() )
|
||||
{
|
||||
var_6 = clamp( var_6, 0.01, 0.99 );
|
||||
var_7 = var_3[var_5 + 1] / var_3[var_5];
|
||||
var_8 = var_6 + ( 1 - var_6 ) * var_7;
|
||||
self call [[ level.func["setanimlimited"] ]]( var_1[var_5], 1 - var_6, var_4, var_8 / var_7 );
|
||||
self call [[ level.func["setanimlimited"] ]]( var_1[var_5 + 1], var_6, var_4, var_8 );
|
||||
|
||||
for ( var_9 = 0; var_9 < var_5; var_9++ )
|
||||
{
|
||||
var_7 = var_3[var_5 + 1] / var_3[var_9];
|
||||
self call [[ level.func["setanimlimited"] ]]( var_1[var_9], 0.01, var_4, var_8 / var_7 );
|
||||
}
|
||||
|
||||
for ( var_9 = var_5 + 2; var_9 < var_2.size; var_9++ )
|
||||
{
|
||||
var_7 = var_3[var_5 + 1] / var_3[var_9];
|
||||
self call [[ level.func["setanimlimited"] ]]( var_1[var_9], 0.01, var_4, var_8 / var_7 );
|
||||
}
|
||||
}
|
||||
else if ( var_6 > 0.5 )
|
||||
self call [[ level.func["scriptModelPlayAnim"] ]]( var_1[var_5 + 1] );
|
||||
else
|
||||
self call [[ level.func["scriptModelPlayAnim"] ]]( var_1[var_5] );
|
||||
}
|
||||
|
||||
detect_events( var_0 )
|
||||
{
|
||||
if ( common_scripts\utility::issp() )
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "damage" );
|
||||
self call [[ level.makeentitysentient_func ]]( "neutral" );
|
||||
self call [[ level.addaieventlistener_func ]]( "projectile_impact" );
|
||||
self call [[ level.addaieventlistener_func ]]( "bulletwhizby" );
|
||||
self call [[ level.addaieventlistener_func ]]( "gunshot" );
|
||||
self call [[ level.addaieventlistener_func ]]( "explode" );
|
||||
|
||||
for (;;)
|
||||
{
|
||||
self waittill( "ai_event", var_1 );
|
||||
self notify( var_0 );
|
||||
self.interrupted = 1;
|
||||
waittillframeend;
|
||||
self.interrupted = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
detect_people( var_0, var_1, var_2 )
|
||||
{
|
||||
if ( !isarray( var_2 ) )
|
||||
{
|
||||
var_3 = var_2;
|
||||
var_2 = [];
|
||||
var_2[0] = var_3;
|
||||
}
|
||||
|
||||
foreach ( var_5 in var_2 )
|
||||
self endon( var_5 );
|
||||
|
||||
self.detect_people_trigger[var_1] = spawn( "trigger_radius", self.origin, 23, var_0, var_0 );
|
||||
|
||||
for ( var_7 = var_2.size; var_7 < 3; var_7++ )
|
||||
var_2[var_7] = undefined;
|
||||
|
||||
thread delete_on_notify( self.detect_people_trigger[var_1], var_2[0], var_2[1], var_2[2] );
|
||||
|
||||
for (;;)
|
||||
{
|
||||
self.detect_people_trigger[var_1] waittill( "trigger", var_8 );
|
||||
self.interruptedent = var_8;
|
||||
self notify( var_1 );
|
||||
self.interrupted = 1;
|
||||
waittillframeend;
|
||||
self.interrupted = 0;
|
||||
}
|
||||
}
|
||||
|
||||
detect_player_event( var_0, var_1, var_2, var_3 )
|
||||
{
|
||||
if ( !isarray( var_2 ) )
|
||||
{
|
||||
var_4 = var_2;
|
||||
var_2 = [];
|
||||
var_2[0] = var_4;
|
||||
}
|
||||
|
||||
foreach ( var_6 in var_2 )
|
||||
self endon( var_6 );
|
||||
|
||||
for (;;)
|
||||
{
|
||||
level.player waittill( var_3 );
|
||||
|
||||
if ( distancesquared( level.player.origin, self.origin ) < var_0 * var_0 )
|
||||
{
|
||||
self notify( var_1 );
|
||||
self.interruptedent = level.player;
|
||||
self notify( var_1 );
|
||||
self.interrupted = 1;
|
||||
waittillframeend;
|
||||
self.interrupted = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
wrap( var_0, var_1 )
|
||||
{
|
||||
var_2 = int( var_0 / var_1 );
|
||||
var_3 = var_0 - var_1 * var_2;
|
||||
|
||||
if ( var_0 < 0 )
|
||||
var_3 = var_3 + var_1;
|
||||
|
||||
if ( var_3 == var_1 )
|
||||
var_3 = 0;
|
||||
|
||||
return var_3;
|
||||
}
|
||||
|
||||
interactives_drawdebuglinefortime( var_0, var_1, var_2, var_3, var_4, var_5 )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
drawcross( var_0, var_1, var_2, var_3 )
|
||||
{
|
||||
thread common_scripts\utility::draw_line_for_time( var_0 - ( var_1, 0, 0 ), var_0 + ( var_1, 0, 0 ), var_2[0], var_2[1], var_2[2], var_3 );
|
||||
thread common_scripts\utility::draw_line_for_time( var_0 - ( 0, var_1, 0 ), var_0 + ( 0, var_1, 0 ), var_2[0], var_2[1], var_2[2], var_3 );
|
||||
thread common_scripts\utility::draw_line_for_time( var_0 - ( 0, 0, var_1 ), var_0 + ( 0, 0, var_1 ), var_2[0], var_2[1], var_2[2], var_3 );
|
||||
}
|
||||
|
||||
drawcircle( var_0, var_1, var_2, var_3 )
|
||||
{
|
||||
var_4 = 16;
|
||||
|
||||
for ( var_5 = 0; var_5 < 360; var_5 = var_5 + 360 / var_4 )
|
||||
{
|
||||
var_6 = var_5 + 360 / var_4;
|
||||
thread common_scripts\utility::draw_line_for_time( var_0 + ( var_1 * cos( var_5 ), var_1 * sin( var_5 ), 0 ), var_0 + ( var_1 * cos( var_6 ), var_1 * sin( var_6 ), 0 ), var_2[0], var_2[1], var_2[2], var_3 );
|
||||
}
|
||||
}
|
||||
|
||||
drawcirculararrow( var_0, var_1, var_2, var_3, var_4 )
|
||||
{
|
||||
if ( var_4 == 0 )
|
||||
return;
|
||||
|
||||
var_5 = 16;
|
||||
var_6 = int( 1 + var_5 * abs( var_4 ) / 360 );
|
||||
|
||||
for ( var_7 = 0; var_7 < var_6; var_7++ )
|
||||
{
|
||||
var_8 = var_7 * var_4 / var_6;
|
||||
var_9 = var_8 + var_4 / var_6;
|
||||
thread common_scripts\utility::draw_line_for_time( var_0 + ( var_1 * cos( var_8 ), var_1 * sin( var_8 ), 0 ), var_0 + ( var_1 * cos( var_9 ), var_1 * sin( var_9 ), 0 ), var_2[0], var_2[1], var_2[2], var_3 );
|
||||
}
|
||||
|
||||
var_8 = var_4;
|
||||
var_9 = var_4 - common_scripts\utility::sign( var_4 ) * 20;
|
||||
thread common_scripts\utility::draw_line_for_time( var_0 + ( var_1 * cos( var_8 ), var_1 * sin( var_8 ), 0 ), var_0 + ( var_1 * 0.8 * cos( var_9 ), var_1 * 0.8 * sin( var_9 ), 0 ), var_2[0], var_2[1], var_2[2], var_3 );
|
||||
thread common_scripts\utility::draw_line_for_time( var_0 + ( var_1 * cos( var_8 ), var_1 * sin( var_8 ), 0 ), var_0 + ( var_1 * 1.2 * cos( var_9 ), var_1 * 1.2 * sin( var_9 ), 0 ), var_2[0], var_2[1], var_2[2], var_3 );
|
||||
}
|
||||
|
||||
isinarray( var_0, var_1 )
|
||||
{
|
||||
foreach ( var_3 in var_1 )
|
||||
{
|
||||
if ( var_0 == var_3 )
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
newtonsmethod( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
|
||||
{
|
||||
var_7 = 5;
|
||||
var_8 = ( var_0 + var_1 ) / 2;
|
||||
|
||||
for ( var_9 = var_6 + 1; abs( var_9 ) > var_6 && var_7 > 0; var_7-- )
|
||||
{
|
||||
var_10 = var_2 * var_8 * var_8 * var_8 + var_3 * var_8 * var_8 + var_4 * var_8 + var_5;
|
||||
var_11 = 3 * var_2 * var_8 * var_8 + 2 * var_3 * var_8 + var_4;
|
||||
var_9 = -1 * var_10 / var_11;
|
||||
var_12 = var_8;
|
||||
var_8 = var_8 + var_9;
|
||||
|
||||
if ( var_8 > var_1 )
|
||||
{
|
||||
var_8 = ( var_12 + 3 * var_1 ) / 4;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( var_8 < var_0 )
|
||||
var_8 = ( var_12 + 3 * var_0 ) / 4;
|
||||
}
|
||||
|
||||
return var_8;
|
||||
}
|
||||
|
||||
rootsofcubic( var_0, var_1, var_2, var_3 )
|
||||
{
|
||||
if ( var_0 == 0 )
|
||||
return rootsofquadratic( var_1, var_2, var_3 );
|
||||
|
||||
var_4 = 2 * var_1 * var_1 * var_1 - 9 * var_0 * var_1 * var_2 + 27 * var_0 * var_0 * var_3;
|
||||
var_5 = var_1 * var_1 - 3 * var_0 * var_2;
|
||||
|
||||
if ( var_5 == 0 )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
if ( var_4 == 0 && var_5 == 0 )
|
||||
var_6[0] = -1 * var_1 / ( 3 * var_0 );
|
||||
else if ( var_4 == 0 && var_5 != 0 )
|
||||
var_6[0] = ( 9 * var_0 * var_0 * var_3 - 4 * var_0 * var_1 * var_2 + var_1 * var_1 * var_1 ) / ( var_0 * ( 3 * var_0 * var_2 - var_1 * var_1 ) );
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
rootsofquadratic( var_0, var_1, var_2 )
|
||||
{
|
||||
while ( abs( var_0 ) > 65536 || abs( var_1 ) > 65536 || abs( var_2 ) > 65536 )
|
||||
{
|
||||
var_0 = var_0 / 10;
|
||||
var_1 = var_1 / 10;
|
||||
var_2 = var_2 / 10;
|
||||
}
|
||||
|
||||
var_3 = [];
|
||||
|
||||
if ( var_0 == 0 )
|
||||
{
|
||||
if ( var_1 != 0 )
|
||||
var_3[0] = -1 * var_2 / var_1;
|
||||
}
|
||||
else
|
||||
{
|
||||
var_4 = var_1 * var_1 - 4 * var_0 * var_2;
|
||||
|
||||
if ( var_4 > 0 )
|
||||
{
|
||||
var_3[0] = ( -1 * var_1 - sqrt( var_4 ) ) / ( 2 * var_0 );
|
||||
var_3[1] = ( -1 * var_1 + sqrt( var_4 ) ) / ( 2 * var_0 );
|
||||
}
|
||||
else if ( var_4 == 0 )
|
||||
var_3[0] = -1 * var_1 / ( 2 * var_0 );
|
||||
}
|
||||
|
||||
return var_3;
|
||||
}
|
||||
|
||||
nonvectorlength( var_0, var_1 )
|
||||
{
|
||||
var_2 = 0;
|
||||
|
||||
for ( var_3 = 0; var_3 < var_0.size; var_3++ )
|
||||
{
|
||||
var_4 = var_0[var_3];
|
||||
|
||||
if ( isdefined( var_1 ) )
|
||||
var_4 = var_4 - var_1[var_3];
|
||||
|
||||
var_2 = var_2 + var_4 * var_4;
|
||||
}
|
||||
|
||||
return sqrt( var_2 );
|
||||
}
|
||||
|
||||
clampandnormalize( var_0, var_1, var_2 )
|
||||
{
|
||||
if ( var_1 < var_2 )
|
||||
var_0 = clamp( var_0, var_1, var_2 );
|
||||
else
|
||||
var_0 = clamp( var_0, var_2, var_1 );
|
||||
|
||||
return ( var_0 - var_1 ) / ( var_2 - var_1 );
|
||||
}
|
||||
|
||||
pointoncircle( var_0, var_1, var_2 )
|
||||
{
|
||||
var_3 = cos( var_2 );
|
||||
var_3 = var_3 * var_1;
|
||||
var_3 = var_3 + var_0[0];
|
||||
var_4 = sin( var_2 );
|
||||
var_4 = var_4 * var_1;
|
||||
var_4 = var_4 + var_0[1];
|
||||
var_5 = var_0[2];
|
||||
return ( var_3, var_4, var_5 );
|
||||
}
|
||||
|
||||
zerocomponent( var_0, var_1 )
|
||||
{
|
||||
return ( var_0[0] * ( var_1 != 0 ), var_0[1] * ( var_1 != 1 ), var_0[2] * ( var_1 != 2 ) );
|
||||
}
|
||||
|
||||
rotate90aroundaxis( var_0, var_1 )
|
||||
{
|
||||
if ( var_1 == 0 )
|
||||
return ( var_0[0], var_0[2], -1 * var_0[1] );
|
||||
else if ( var_1 == 1 )
|
||||
return ( -1 * var_0[2], var_0[1], var_0[0] );
|
||||
else
|
||||
return ( var_0[1], -1 * var_0[0], var_0[2] );
|
||||
}
|
16
maps/interactive_models/_interactive_utility_sp.gsc
Normal file
16
maps/interactive_models/_interactive_utility_sp.gsc
Normal file
@ -0,0 +1,16 @@
|
||||
// IW6 GSC SOURCE
|
||||
// Generated by https://github.com/xensik/gsc-tool
|
||||
|
||||
drawcircleuntilnotify( var_0, var_1, var_2, var_3, var_4 )
|
||||
{
|
||||
if ( common_scripts\utility::issp() )
|
||||
{
|
||||
var_5 = 16;
|
||||
|
||||
for ( var_6 = 0; var_6 < 360; var_6 = var_6 + 360 / var_5 )
|
||||
{
|
||||
var_7 = var_6 + 360 / var_5;
|
||||
thread maps\_utility::draw_line_until_notify( var_0 + ( var_1 * cos( var_6 ), var_1 * sin( var_6 ), 0 ), var_0 + ( var_1 * cos( var_7 ), var_1 * sin( var_7 ), 0 ), var_2[0], var_2[1], var_2[2], var_3, var_4 );
|
||||
}
|
||||
}
|
||||
}
|
93
maps/interactive_models/batcave.gsc
Normal file
93
maps/interactive_models/batcave.gsc
Normal file
@ -0,0 +1,93 @@
|
||||
// IW6 GSC SOURCE
|
||||
// Generated by https://github.com/xensik/gsc-tool
|
||||
|
||||
vfxbatcavewaitinit( var_0, var_1, var_2, var_3, var_4 )
|
||||
{
|
||||
if ( !isdefined( var_4 ) )
|
||||
var_4 = 0;
|
||||
|
||||
level endon( "game_ended" );
|
||||
var_5 = getent( var_0, "targetname" );
|
||||
|
||||
if ( isdefined( var_5 ) )
|
||||
{
|
||||
var_5 childthread vfxbatcavetrigger( var_1, var_2, var_3 );
|
||||
var_5 childthread vfxbatcavewatchforempty( var_4 );
|
||||
|
||||
for (;;)
|
||||
{
|
||||
var_5 waittill( "trigger", var_6 );
|
||||
var_5 thread vfxbatcavewatchplayerstate( var_6 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
vfxbatcavewatchplayerstate( var_0 )
|
||||
{
|
||||
self endon( "batCaveTrigger" );
|
||||
var_0 endon( "death" );
|
||||
var_0 endon( "disconnect" );
|
||||
var_0 notify( "batCaveExit" );
|
||||
var_0 endon( "batCaveExit" );
|
||||
childthread vfxbatcavewatchplayerweapons( var_0 );
|
||||
|
||||
while ( var_0 istouching( self ) )
|
||||
{
|
||||
common_scripts\utility::waitframe();
|
||||
self.lasttouchedtime = gettime();
|
||||
}
|
||||
|
||||
var_0 notify( "batCaveExit" );
|
||||
}
|
||||
|
||||
vfxbatcavewatchplayerweapons( var_0 )
|
||||
{
|
||||
var_0 waittill( "weapon_fired" );
|
||||
self notify( "batCaveTrigger" );
|
||||
}
|
||||
|
||||
vfxbatcavewatchforempty( var_0 )
|
||||
{
|
||||
self.lasttouchedtime = gettime();
|
||||
self.batcavereset = 1;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
common_scripts\utility::waitframe();
|
||||
|
||||
if ( self.lasttouchedtime + var_0 <= gettime() )
|
||||
self.batcavereset = 1;
|
||||
}
|
||||
}
|
||||
|
||||
vfxbatcavetrigger( var_0, var_1, var_2 )
|
||||
{
|
||||
for (;;)
|
||||
{
|
||||
self waittill( "batCaveTrigger" );
|
||||
|
||||
if ( self.batcavereset )
|
||||
{
|
||||
vfxbatsfly( var_0, var_1, var_2 );
|
||||
self.batcavereset = 0;
|
||||
var_3 = 60;
|
||||
wait( var_3 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
vfxbatsfly( var_0, var_1, var_2 )
|
||||
{
|
||||
common_scripts\utility::exploder( var_0 );
|
||||
|
||||
if ( isdefined( var_1 ) && isdefined( var_2 ) )
|
||||
{
|
||||
var_3 = spawn( "script_model", var_2 );
|
||||
var_3 setmodel( "vulture_circle_rig" );
|
||||
var_3 scriptmodelplayanim( var_1 );
|
||||
var_4 = spawn( "script_model", var_3 gettagorigin( "tag_attach" ) );
|
||||
var_4 linkto( var_3, "tag_attach" );
|
||||
wait 0.1;
|
||||
var_4 playsoundonmovingent( "scn_mp_swamp_bat_cave_big" );
|
||||
}
|
||||
}
|
7
maps/interactive_models/bldg_01_dest.gsc
Normal file
7
maps/interactive_models/bldg_01_dest.gsc
Normal file
@ -0,0 +1,7 @@
|
||||
// IW6 GSC SOURCE
|
||||
// Generated by https://github.com/xensik/gsc-tool
|
||||
|
||||
main()
|
||||
{
|
||||
common_scripts\utility::add_fx( "bldg_industry_01_dest", "vfx/props/oilrocks_gastank1_large" );
|
||||
}
|
62
maps/interactive_models/crows_dlc.gsc
Normal file
62
maps/interactive_models/crows_dlc.gsc
Normal file
@ -0,0 +1,62 @@
|
||||
// IW6 GSC SOURCE
|
||||
// Generated by https://github.com/xensik/gsc-tool
|
||||
|
||||
#using_animtree("animals_dlc");
|
||||
|
||||
main()
|
||||
{
|
||||
var_0 = spawnstruct();
|
||||
var_0.interactive_type = "crows_dlc";
|
||||
var_0.rig_model = "use_radiant_model";
|
||||
var_0.rig_animtree = #animtree;
|
||||
var_0.rig_numtags = 2;
|
||||
var_0.bird_model["idle"] = "crow_fly";
|
||||
var_0.bird_model["fly"] = "crow_fly";
|
||||
var_0.bird_animtree = #animtree;
|
||||
var_0.topspeed = 300;
|
||||
var_0.accn = 75;
|
||||
var_0.scareradius = 600;
|
||||
var_0.death_effect = loadfx( "fx/props/bird_feather_exp_black" );
|
||||
var_0.birdmodel_anims = [];
|
||||
var_0.rigmodel_anims = [];
|
||||
var_0.birdmodel_anims["idle"][0] = %crow_idle_1;
|
||||
var_0.birdmodel_anims["idleweight"][0] = 1;
|
||||
var_0.birdmodel_anims["idle"][1] = %crow_idle_2;
|
||||
var_0.birdmodel_anims["idleweight"][1] = 0.3;
|
||||
var_0.birdmodel_anims["flying"] = %crow_fly;
|
||||
var_0.rigmodel_anims["flying"] = %pigeon_flock_fly_loop;
|
||||
var_0.rigmodel_anims["takeoff_wire"] = %pigeon_flock_takeoff_wire;
|
||||
var_0.rigmodel_anims["land_wire"] = %pigeon_flock_land_wire;
|
||||
var_0.rigmodel_anims["takeoff_ground"] = %pigeon_flock_takeoff_ground;
|
||||
var_0.rigmodel_anims["land_ground"] = %pigeon_flock_land_ground;
|
||||
var_0.rigmodel_anims["takeoff_inpipe"] = %pigeon_flock_takeoff_inpipe;
|
||||
var_0.rigmodel_anims["land_inpipe"] = %pigeon_flock_land_inpipe;
|
||||
|
||||
if ( !common_scripts\utility::issp() )
|
||||
{
|
||||
var_0.birdmodel_anims["idlemp"][0] = "crow_idle_1";
|
||||
var_0.birdmodel_anims["idlemp"][1] = "crow_idle_2";
|
||||
var_0.birdmodel_anims["flyingmp"] = "crow_fly";
|
||||
var_0.rigmodel_anims["flyingmp"] = "pigeon_flock_fly_loop_mp";
|
||||
var_0.rigmodel_anims["takeoff_wiremp"] = "pigeon_flock_takeoff_wire_mp";
|
||||
var_0.rigmodel_anims["land_wiremp"] = "pigeon_flock_land_wire_mp";
|
||||
var_0.rigmodel_anims["takeoff_groundmp"] = "pigeon_flock_takeoff_ground_mp";
|
||||
var_0.rigmodel_anims["land_groundmp"] = "pigeon_flock_land_ground_mp";
|
||||
var_0.rigmodel_anims["takeoff_inpipemp"] = "pigeon_flock_takeoff_inpipe_mp";
|
||||
var_0.rigmodel_anims["land_inpipemp"] = "pigeon_flock_land_inpipe_mp";
|
||||
}
|
||||
|
||||
var_0.sounds = [];
|
||||
var_0.sounds["takeoff"] = "anml_crow_startle_flyaway";
|
||||
var_0.sounds["idle"] = "anml_crow_idle";
|
||||
precachemodel( var_0.rig_model );
|
||||
|
||||
foreach ( var_2 in var_0.bird_model )
|
||||
precachemodel( var_2 );
|
||||
|
||||
if ( !isdefined( level._interactive ) )
|
||||
level._interactive = [];
|
||||
|
||||
level._interactive[var_0.interactive_type] = var_0;
|
||||
thread maps\interactive_models\_birds_dlc::birds( var_0 );
|
||||
}
|
50
maps/interactive_models/egrets.gsc
Normal file
50
maps/interactive_models/egrets.gsc
Normal file
@ -0,0 +1,50 @@
|
||||
// IW6 GSC SOURCE
|
||||
// Generated by https://github.com/xensik/gsc-tool
|
||||
|
||||
#using_animtree("animals");
|
||||
|
||||
main()
|
||||
{
|
||||
var_0 = spawnstruct();
|
||||
var_0.interactive_type = "egrets";
|
||||
var_0.rig_model = "pigeon_flock_rig";
|
||||
var_0.rig_animtree = #animtree;
|
||||
var_0.rig_numtags = 12;
|
||||
var_0.bird_health = 500;
|
||||
var_0.bird_model["idle"] = "bird_egret_flock";
|
||||
var_0.bird_model["fly"] = "bird_egret_flock_fly";
|
||||
var_0.bird_animtree = #animtree;
|
||||
var_1 = 0.5;
|
||||
var_0.topspeed = 500;
|
||||
var_0.accn = 130;
|
||||
var_0.scareradius = 6000;
|
||||
var_0.death_effect = loadfx( "fx/props/chicken_exp_white" );
|
||||
var_0.birdmodel_anims = [];
|
||||
var_0.rigmodel_anims = [];
|
||||
var_0.birdmodel_anims["idle"] = %egret_flock_idle1;
|
||||
var_0.birdmodel_anims["takeoff"] = %egret_flock_takeoff;
|
||||
var_0.birdmodel_anims["flying"] = %egret_flock_fly;
|
||||
var_0.rigmodel_anims["flying"] = %bird_flock_large_fly_loop;
|
||||
var_0.rigmodel_anims["takeoff_tree"] = %bird_flock_large_takeoff_tree;
|
||||
var_0.rigmodel_anims["land_tree"] = %bird_flock_large_land_tree;
|
||||
var_0.rigmodel_anims["takeoff_ground"] = %bird_flock_large_takeoff_ground;
|
||||
var_0.rigmodel_anims["land_ground"] = %bird_flock_large_land_ground;
|
||||
|
||||
if ( !common_scripts\utility::issp() )
|
||||
{
|
||||
var_0.birdmodel_anims["idlemp"] = "egret_flock_idle1";
|
||||
var_0.birdmodel_anims["takeoffmp"] = "egret_flock_takeoff";
|
||||
var_0.birdmodel_anims["flyingmp"] = "egret_flock_fly";
|
||||
var_0.rigmodel_anims["flyingmp"] = "bird_flock_large_fly_loop";
|
||||
var_0.rigmodel_anims["takeoff_treemp"] = "bird_flock_large_takeoff_tree";
|
||||
var_0.rigmodel_anims["land_treemp"] = "bird_flock_large_land_tree";
|
||||
var_0.rigmodel_anims["takeoff_groundmp"] = "bird_flock_large_takeoff_ground";
|
||||
var_0.rigmodel_anims["land_groundmp"] = "bird_flock_large_land_ground";
|
||||
}
|
||||
|
||||
if ( !isdefined( level._interactive ) )
|
||||
level._interactive = [];
|
||||
|
||||
level._interactive["egrets"] = var_0;
|
||||
thread maps\interactive_models\_birds::birds();
|
||||
}
|
34
maps/interactive_models/fish_bannerfish.gsc
Normal file
34
maps/interactive_models/fish_bannerfish.gsc
Normal file
@ -0,0 +1,34 @@
|
||||
// IW6 GSC SOURCE
|
||||
// Generated by https://github.com/xensik/gsc-tool
|
||||
|
||||
#using_animtree("animals");
|
||||
|
||||
main()
|
||||
{
|
||||
var_0 = spawnstruct();
|
||||
var_0.animtree = #animtree;
|
||||
var_0.anims["idle"][0] = %bannerfish_idle1;
|
||||
var_0.anims["idle"][1] = %bannerfish_idle_fast;
|
||||
var_0.anims["idleweight"][0] = 4;
|
||||
var_0.anims["idleweight"][1] = 1;
|
||||
var_0.anims["flee_straight"][0] = %bannerfish_flee_straight;
|
||||
var_0.anims["flee_left"][0] = %bannerfish_flee_left;
|
||||
var_0.anims["flee_right"][0] = %bannerfish_flee_right;
|
||||
var_0.anims["flee_continue"][0] = %bannerfish_idle_fast;
|
||||
var_0.anims["turn_left"] = %bannerfish_turn_left;
|
||||
var_0.anims["turn_left_child"] = %bannerfish_turn_left_add;
|
||||
var_0.anims["turn_right"] = %bannerfish_turn_right;
|
||||
var_0.anims["turn_right_child"] = %bannerfish_turn_right_add;
|
||||
var_0.default_wander_radius = 20;
|
||||
var_0.wander_redirect_time = 2;
|
||||
var_0.people_react_distance = 36;
|
||||
var_0.gunfire_react_distance = 200;
|
||||
var_0.savetostructfn = maps\interactive_models\_fish::single_fish_savetostruct;
|
||||
var_0.loadfromstructfn = maps\interactive_models\_fish::single_fish_loadfromstruct;
|
||||
|
||||
if ( !isdefined( level._interactive ) )
|
||||
level._interactive = [];
|
||||
|
||||
level._interactive["fish_bannerfish"] = var_0;
|
||||
thread maps\interactive_models\_fish::fish();
|
||||
}
|
1180
maps/interactive_models/fish_school_sardines.gsc
Normal file
1180
maps/interactive_models/fish_school_sardines.gsc
Normal file
File diff suppressed because it is too large
Load Diff
96
maps/interactive_models/fish_school_snapper.gsc
Normal file
96
maps/interactive_models/fish_school_snapper.gsc
Normal file
@ -0,0 +1,96 @@
|
||||
// IW6 GSC SOURCE
|
||||
// Generated by https://github.com/xensik/gsc-tool
|
||||
|
||||
#using_animtree("animals");
|
||||
|
||||
main()
|
||||
{
|
||||
var_0 = spawnstruct();
|
||||
var_0.name = "fish_school_snapper";
|
||||
var_0.targetname = "interactive_fish_school_snapper";
|
||||
var_0.piece = spawnstruct();
|
||||
var_0.piece.model = "sardines_flocking_rig";
|
||||
var_0.piece.tagprefix = "tag_attach";
|
||||
var_0.piece.maxturn = 5;
|
||||
var_0.piece.animtree = #animtree;
|
||||
var_0.piece.anims = [];
|
||||
var_0.piece.anims["idle_loop"] = %sardines_flock_loop;
|
||||
var_0.piece.anims["add_bend_left"] = %sardines_flock_add_left60;
|
||||
var_0.piece.anims["add_bend_right"] = %sardines_flock_add_right60;
|
||||
var_0.piece.anims["add_fast"] = %sardines_flock_add_stretch_horiz;
|
||||
var_0.piece.anims["add_tilt_left"] = %sardines_flock_add_tilt_left_add;
|
||||
var_0.piece.anims["add_tilt_right"] = %sardines_flock_add_tilt_right_add;
|
||||
var_0.piece.anims["add_tilt_left_child"] = %sardines_flock_add_tilt_left;
|
||||
var_0.piece.anims["add_tilt_right_child"] = %sardines_flock_add_tilt_right;
|
||||
var_0.piece.anims["add_rotate_left"] = %sardines_flock_add_rotate_left_add;
|
||||
var_0.piece.anims["add_rotate_left_child"] = %sardines_flock_add_rotate_left;
|
||||
var_0.piece.anims["add_rotate_right"] = %sardines_flock_add_rotate_right_add;
|
||||
var_0.piece.anims["add_rotate_right_child"] = %sardines_flock_add_rotate_right;
|
||||
var_0.fish = spawnstruct();
|
||||
var_0.fish.model = [];
|
||||
var_0.fish.model[1]["bright"] = "fish_emperorsnapper_rigid";
|
||||
var_0.fish.model[2]["bright"] = "fish_emperorsnapper_rigid";
|
||||
var_0.fish.model[2]["grey1"] = "fish_emperorsnapper_rigid";
|
||||
var_0.fish.model[2]["grey2"] = "fish_emperorsnapper_rigid";
|
||||
var_0.fish.model[3]["bright"] = "fish_emperorsnapper_rigid";
|
||||
var_0.fish.model[3]["grey1"] = "fish_emperorsnapper_rigid";
|
||||
var_0.fish.model[3]["grey2"] = "fish_emperorsnapper_rigid";
|
||||
var_0.fish.anims = [];
|
||||
var_0.fish.anims["idle_loop"] = %sardines_smallgroup_loop1;
|
||||
var_0.ball = spawnstruct();
|
||||
var_0.ball.rotationperiod = 5;
|
||||
var_0.ball.numtags = 16;
|
||||
var_0.ball.relocatespeed = 30;
|
||||
var_0.ball.reactdistance = 300;
|
||||
var_0.ball.panicdistance = 150;
|
||||
var_0.ball.maxdriftdist = 150;
|
||||
var_0.ball.driftspeed = 10;
|
||||
var_0.ball.ringvertoffset = 48;
|
||||
var_0.ball.rings = [];
|
||||
var_0.ball.rings[0] = spawnstruct();
|
||||
var_0.ball.rings[0].numpieces = 6;
|
||||
var_0.ball.rings[0].radius = 64;
|
||||
var_0.ball.rings[0].offset = -1 * var_0.ball.ringvertoffset;
|
||||
var_0.ball.rings[1] = spawnstruct();
|
||||
var_0.ball.rings[1].numpieces = 6;
|
||||
var_0.ball.rings[1].radius = 96;
|
||||
var_0.ball.rings[1].offset = -1 * var_0.ball.ringvertoffset;
|
||||
var_0.ball.rings[2] = spawnstruct();
|
||||
var_0.ball.rings[2].numpieces = 6;
|
||||
var_0.ball.rings[2].radius = 64;
|
||||
var_0.ball.rings[2].offset = var_0.ball.ringvertoffset;
|
||||
var_0.ball.rings[3] = spawnstruct();
|
||||
var_0.ball.rings[3].numpieces = 6;
|
||||
var_0.ball.rings[3].radius = 96;
|
||||
var_0.ball.rings[3].offset = var_0.ball.ringvertoffset;
|
||||
var_0.line = spawnstruct();
|
||||
var_0.line.spacing = 3;
|
||||
var_0.line.anims = [];
|
||||
var_0.line.anim_base = %sardines_flock_spin;
|
||||
var_0.line.anims[0] = %sardines_flock_spinloop;
|
||||
var_0.line.anims[1] = %sardines_flock_spinloop_fast;
|
||||
var_0.line.anims[2] = %sardines_flock_spinloop_faster;
|
||||
var_0.line.animspeeds[0] = 17.6;
|
||||
var_0.line.animspeeds[1] = 26.4;
|
||||
var_0.line.animspeeds[2] = 52.8;
|
||||
var_0.line.animoffset = 0.28;
|
||||
var_0.line.taper = 8;
|
||||
var_0.line.tagmodels = [];
|
||||
var_0.line.tagmodels["1"] = 5;
|
||||
var_0.line.tagmodels["4"] = 3;
|
||||
var_0.line.tagmodels["7"] = 3;
|
||||
var_0.line.tagmodels["10"] = 2;
|
||||
var_0.line.tagmodels["13"] = 2;
|
||||
var_0.line.tagmodels["16"] = 2;
|
||||
var_0.line.tagmodels["19"] = 1;
|
||||
var_0.line.tagmodels["22"] = 1;
|
||||
var_0.line.tagmodels["25"] = 1;
|
||||
var_0.line.tagmodels["28"] = 1;
|
||||
var_0.line.tagmodels["31"] = 1;
|
||||
|
||||
if ( !isdefined( level._interactive ) )
|
||||
level._interactive = [];
|
||||
|
||||
level._interactive["fish_school_snapper"] = var_0;
|
||||
thread maps\interactive_models\fish_school_sardines::sardines( var_0 );
|
||||
}
|
97
maps/interactive_models/hanging_light_off.gsc
Normal file
97
maps/interactive_models/hanging_light_off.gsc
Normal file
@ -0,0 +1,97 @@
|
||||
// IW6 GSC SOURCE
|
||||
// Generated by https://github.com/xensik/gsc-tool
|
||||
|
||||
main()
|
||||
{
|
||||
if ( common_scripts\utility::issp() )
|
||||
{
|
||||
common_scripts\_destructible::destructible_create( "toy_hanging_light_off", "tag_origin", 0 );
|
||||
common_scripts\_destructible::destructible_function( ::hanging_light_off );
|
||||
}
|
||||
}
|
||||
|
||||
hanging_light_off()
|
||||
{
|
||||
var_0 = self.angles;
|
||||
var_1 = anglestoforward( var_0 );
|
||||
var_2 = ( var_1[1], var_1[0], 0 );
|
||||
var_1 = ( var_1[0], -1 * var_1[1], 0 );
|
||||
|
||||
if ( isdefined( self.script_angles ) )
|
||||
var_3 = ( self.script_angles[2], self.script_angles[0], self.script_angles[1] );
|
||||
else
|
||||
var_3 = ( 90, 90, 90 );
|
||||
|
||||
if ( isdefined( self.script_duration ) )
|
||||
var_4 = self.script_duration / 6 * randomfloatrange( 0.9, 1.1 );
|
||||
else
|
||||
var_4 = 0.4 * randomfloatrange( 0.9, 1.1 );
|
||||
|
||||
var_4 = int( var_4 * 20 ) / 20;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
self waittill( "damage", var_5, var_6, var_7, var_8, var_9 );
|
||||
|
||||
if ( isdefined( var_6 ) && var_6 == self )
|
||||
continue;
|
||||
|
||||
var_9 = destructible_scripts\toy_lv_trash_can_vegas::destructible_modifydamagetype( var_9 );
|
||||
var_10 = [];
|
||||
|
||||
if ( var_9 == "splash" )
|
||||
{
|
||||
var_7 = vectornormalize( var_7 );
|
||||
var_8 = ( randomfloatrange( -100, 100 ), randomfloatrange( -100, 100 ), -400 );
|
||||
var_8 = var_8 * var_4;
|
||||
var_8 = var_8 + self.origin;
|
||||
}
|
||||
|
||||
var_11 = vectorfromlinetopoint( var_8, var_8 + var_7, self.origin );
|
||||
|
||||
for ( var_12 = 0; var_12 < 3; var_12++ )
|
||||
{
|
||||
var_13 = maps\interactive_models\_interactive_utility::zerocomponent( var_11, var_12 );
|
||||
var_13 = maps\interactive_models\_interactive_utility::rotate90aroundaxis( var_13, var_12 );
|
||||
var_14 = maps\interactive_models\_interactive_utility::zerocomponent( var_7, var_12 );
|
||||
var_10[var_12] = vectordot( var_13, var_14 );
|
||||
}
|
||||
|
||||
var_10 = var_10[0] * var_1 + var_10[1] * var_2 + ( 0, 0, var_10[2] );
|
||||
var_10 = var_10 / ( var_4 * var_4 * 40 );
|
||||
self notify( "new swing" );
|
||||
thread hanging_light_swing( ( var_10[1], var_10[2], var_10[0] ), var_0, var_4, var_3 );
|
||||
}
|
||||
}
|
||||
|
||||
hanging_light_swing( var_0, var_1, var_2, var_3 )
|
||||
{
|
||||
self endon( "new swing" );
|
||||
var_4 = self.angles + var_0;
|
||||
var_4 = ( clamp( var_4[0], var_1[0] - var_3[0], var_1[0] + var_3[0] ), clamp( var_4[1], var_1[1] - var_3[1], var_1[1] + var_3[1] ), clamp( var_4[2], var_1[2] - var_3[2], var_1[2] + var_3[2] ) );
|
||||
var_5 = length( var_4 - self.angles ) / length( var_0 );
|
||||
var_5 = var_5 * var_2;
|
||||
var_5 = int( var_5 * 20 ) / 20;
|
||||
|
||||
if ( var_5 < 0.1 )
|
||||
var_5 = 0.1;
|
||||
|
||||
self rotateto( var_4, var_5 * 3 / 2, 0, var_5 );
|
||||
wait( var_5 * 3 / 2 );
|
||||
var_0 = var_4 - var_1;
|
||||
var_6 = max( max( abs( var_0[0] ), abs( var_0[1] ) ), abs( var_0[2] ) );
|
||||
|
||||
while ( var_0[0] != 0 || var_0[1] != 0 || var_0[2] != 0 )
|
||||
{
|
||||
var_7 = ( var_6 * 0.9 - 0.5 ) / var_6;
|
||||
|
||||
if ( var_7 < 0 )
|
||||
var_7 = 0;
|
||||
|
||||
var_6 = var_6 * var_7;
|
||||
var_0 = var_0 * ( var_7 * -1 );
|
||||
var_4 = var_1 + var_0;
|
||||
self rotateto( var_4, var_2 * 3, var_2, var_2 );
|
||||
wait( var_2 * 3 );
|
||||
}
|
||||
}
|
270
maps/interactive_models/oilrig_hanging_jumpsuit.gsc
Normal file
270
maps/interactive_models/oilrig_hanging_jumpsuit.gsc
Normal file
@ -0,0 +1,270 @@
|
||||
// IW6 GSC SOURCE
|
||||
// Generated by https://github.com/xensik/gsc-tool
|
||||
|
||||
#using_animtree("animated_props");
|
||||
|
||||
main()
|
||||
{
|
||||
var_0 = spawnstruct();
|
||||
var_0.targetname = "interactive_oilrig_jumpsuit";
|
||||
var_0.name = "oilrig_jumpsuit";
|
||||
var_0.animtree = #animtree;
|
||||
|
||||
if ( common_scripts\utility::issp() )
|
||||
{
|
||||
var_0.anims["idle1"] = %oilrig_jumpsuit_idle1;
|
||||
var_0.anims["idle2"] = %oilrig_jumpsuit_idle2;
|
||||
var_0.anims["move_b_large"] = %oilrig_jumpsuit_move_b_large;
|
||||
var_0.anims["move_b_small"] = %oilrig_jumpsuit_move_b_small;
|
||||
var_0.anims["move_bl_large"] = %oilrig_jumpsuit_move_bl_large;
|
||||
var_0.anims["move_bl_small"] = %oilrig_jumpsuit_move_bl_small;
|
||||
var_0.anims["move_br_large"] = %oilrig_jumpsuit_move_br_large;
|
||||
var_0.anims["move_br_small"] = %oilrig_jumpsuit_move_br_small;
|
||||
var_0.anims["move_f_large"] = %oilrig_jumpsuit_move_f_large;
|
||||
var_0.anims["move_f_small"] = %oilrig_jumpsuit_move_f_small;
|
||||
var_0.anims["move_fl_large"] = %oilrig_jumpsuit_move_fl_large;
|
||||
var_0.anims["move_fl_small"] = %oilrig_jumpsuit_move_fl_small;
|
||||
var_0.anims["move_fr_large"] = %oilrig_jumpsuit_move_fr_large;
|
||||
var_0.anims["move_fr_small"] = %oilrig_jumpsuit_move_fr_small;
|
||||
}
|
||||
else
|
||||
{
|
||||
var_0.anims["idle1"] = "oilrig_jumpsuit_idle1";
|
||||
var_0.anims["idle2"] = "oilrig_jumpsuit_idle2";
|
||||
var_0.anims["move_b_large"] = "oilrig_jumpsuit_move_b_large";
|
||||
var_0.anims["move_b_small"] = "oilrig_jumpsuit_move_b_small";
|
||||
var_0.anims["move_bl_large"] = "oilrig_jumpsuit_move_bl_large";
|
||||
var_0.anims["move_bl_small"] = "oilrig_jumpsuit_move_bl_small";
|
||||
var_0.anims["move_br_large"] = "oilrig_jumpsuit_move_br_large";
|
||||
var_0.anims["move_br_small"] = "oilrig_jumpsuit_move_br_small";
|
||||
var_0.anims["move_f_large"] = "oilrig_jumpsuit_move_f_large";
|
||||
var_0.anims["move_f_small"] = "oilrig_jumpsuit_move_f_small";
|
||||
var_0.anims["move_fl_large"] = "oilrig_jumpsuit_move_fl_large";
|
||||
var_0.anims["move_fl_small"] = "oilrig_jumpsuit_move_fl_small";
|
||||
var_0.anims["move_fr_large"] = "oilrig_jumpsuit_move_fr_large";
|
||||
var_0.anims["move_fr_small"] = "oilrig_jumpsuit_move_fr_small";
|
||||
}
|
||||
|
||||
var_1 = getarraykeys( var_0.anims );
|
||||
|
||||
foreach ( var_3 in var_1 )
|
||||
var_0.animlengths[var_3] = getanimlength( var_0.anims[var_3] );
|
||||
|
||||
if ( !isdefined( level._interactive ) )
|
||||
level._interactive = [];
|
||||
|
||||
level._interactive[var_0.name] = var_0;
|
||||
thread oilrig_jumpsuits( var_0 );
|
||||
}
|
||||
|
||||
oilrig_jumpsuits( var_0 )
|
||||
{
|
||||
level waittill( "load_finished" );
|
||||
|
||||
if ( !isdefined( level._interactive[var_0.name + "_setup"] ) )
|
||||
{
|
||||
level._interactive[var_0.name + "_setup"] = 1;
|
||||
var_1 = getentarray( var_0.targetname, "targetname" );
|
||||
|
||||
foreach ( var_3 in var_1 )
|
||||
var_3 thread oilrig_jumpsuit( var_0 );
|
||||
}
|
||||
}
|
||||
|
||||
oilrig_jumpsuit( var_0 )
|
||||
{
|
||||
level endon( "game_ended" );
|
||||
oilrig_jumpsuit_precache();
|
||||
|
||||
if ( isdefined( self.target ) )
|
||||
{
|
||||
var_1 = getentarray( self.target, "targetname" );
|
||||
var_2 = common_scripts\utility::getclosest( self.origin, var_1 );
|
||||
var_2 hide();
|
||||
var_2 thread oilrig_jumpsuit_hitbox_ondamage( self );
|
||||
}
|
||||
|
||||
thread oilrig_jumpsuit_ondamage( var_0.anims, var_0.animlengths );
|
||||
}
|
||||
|
||||
oilrig_jumpsuit_precache( var_0 )
|
||||
{
|
||||
if ( !common_scripts\utility::issp() )
|
||||
{
|
||||
foreach ( var_2 in var_0 )
|
||||
call [[ level.func["precacheMpAnim"] ]]( var_2 );
|
||||
}
|
||||
}
|
||||
|
||||
oilrig_jumpsuit_ondamage( var_0, var_1 )
|
||||
{
|
||||
level endon( "game_ended" );
|
||||
self endon( "stop_scripts" );
|
||||
|
||||
if ( isdefined( level.func["useanimtree"] ) )
|
||||
self call [[ level.func["useanimtree"] ]]( #animtree );
|
||||
|
||||
var_2 = common_scripts\utility::ter_op( common_scripts\utility::issp(), level.func["clearanim"], level.func["scriptModelClearAnim"] );
|
||||
var_3 = common_scripts\utility::ter_op( common_scripts\utility::issp(), level.func["setanim"], level.func["scriptModelPlayAnim"] );
|
||||
|
||||
for (;;)
|
||||
{
|
||||
var_4 = undefined;
|
||||
var_5 = undefined;
|
||||
var_6 = undefined;
|
||||
var_7 = undefined;
|
||||
self waittill( "damage", var_8, var_9, var_10, var_11, var_12 );
|
||||
var_5 = "move_";
|
||||
var_13 = self.angles[1];
|
||||
var_14 = angleclamp( vectortoyaw( var_10 ) );
|
||||
var_15 = 15;
|
||||
var_16 = common_scripts\utility::ter_op( var_14 - var_13 > 0, 1, -1 );
|
||||
var_17 = var_14 - var_13;
|
||||
var_17 = common_scripts\utility::ter_op( abs( var_17 ) > 180, -1 * var_16 * ( 360 - abs( var_17 ) ), var_16 * abs( var_17 ) );
|
||||
|
||||
if ( abs( var_17 ) > 90 )
|
||||
{
|
||||
if ( var_17 > 0 && 180 - abs( var_17 ) > var_15 )
|
||||
var_5 = var_5 + "br";
|
||||
else if ( var_17 < 0 && 180 - abs( var_17 ) > var_15 )
|
||||
var_5 = var_5 + "bl";
|
||||
else
|
||||
var_5 = var_5 + "b";
|
||||
}
|
||||
else if ( abs( var_17 ) < 90 )
|
||||
{
|
||||
if ( var_17 < 0 && abs( var_17 ) > var_15 )
|
||||
var_5 = var_5 + "fl";
|
||||
else if ( var_17 > 0 && abs( var_17 ) > var_15 )
|
||||
var_5 = var_5 + "fr";
|
||||
else
|
||||
var_5 = var_5 + "f";
|
||||
}
|
||||
|
||||
var_4 = "small";
|
||||
var_6 = 0;
|
||||
|
||||
if ( isdefined( var_12 ) )
|
||||
{
|
||||
switch ( var_12 )
|
||||
{
|
||||
case "MOD_EXPLOSIVE_SPLASH":
|
||||
case "MOD_GRENADE_SPLASH":
|
||||
case "MOD_GRENADE":
|
||||
case "MOD_EXPLOSIVE":
|
||||
var_7 = length( var_10 - ( 0, 0, 100 ) );
|
||||
var_6 = ( var_7 - 50 ) / 400;
|
||||
var_6 = max( var_6, 0 );
|
||||
|
||||
if ( var_6 > 1 )
|
||||
var_6 = 0;
|
||||
|
||||
if ( var_8 > 85 )
|
||||
var_4 = "large";
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
var_5 = var_5 + ( "_" + var_4 );
|
||||
|
||||
if ( isdefined( self.script_parameters ) )
|
||||
{
|
||||
if ( isdefined( var_0[var_5 + "_" + self.script_parameters] ) )
|
||||
var_5 = var_5 + ( "_" + self.script_parameters );
|
||||
}
|
||||
|
||||
wait( var_6 );
|
||||
|
||||
if ( common_scripts\utility::issp() )
|
||||
{
|
||||
self call [[ var_2 ]]( var_0["idle1"], 0 );
|
||||
self call [[ var_2 ]]( var_0["idle2"], 0 );
|
||||
}
|
||||
else
|
||||
self call [[ var_2 ]]();
|
||||
|
||||
if ( common_scripts\utility::issp() )
|
||||
self call [[ var_3 ]]( var_0[var_5], 1, 0, 1 );
|
||||
else
|
||||
self call [[ var_3 ]]( var_0[var_5] );
|
||||
|
||||
var_13 = undefined;
|
||||
var_14 = undefined;
|
||||
var_15 = undefined;
|
||||
var_16 = undefined;
|
||||
var_17 = undefined;
|
||||
var_8 = undefined;
|
||||
var_9 = undefined;
|
||||
var_10 = undefined;
|
||||
var_11 = undefined;
|
||||
var_12 = undefined;
|
||||
wait( var_1[var_5] );
|
||||
|
||||
if ( common_scripts\utility::issp() )
|
||||
self call [[ var_2 ]]( var_0[var_5], 0 );
|
||||
else
|
||||
self call [[ var_2 ]]();
|
||||
|
||||
thread oilrig_jumpsuit_playidleanim( var_0, var_1 );
|
||||
}
|
||||
}
|
||||
|
||||
oilrig_jumpsuit_playidleanim( var_0, var_1 )
|
||||
{
|
||||
level endon( "game_ended" );
|
||||
self endon( "damage" );
|
||||
self endon( "stop_scripts" );
|
||||
var_2 = common_scripts\utility::ter_op( common_scripts\utility::issp(), level.func["clearanim"], level.func["scriptModelClearAnim"] );
|
||||
var_3 = common_scripts\utility::ter_op( common_scripts\utility::issp(), level.func["setanim"], level.func["scriptModelPlayAnim"] );
|
||||
var_4 = randomintrange( 1, 3 );
|
||||
|
||||
for ( var_5 = 0; var_5 < var_4; var_5++ )
|
||||
{
|
||||
if ( common_scripts\utility::issp() )
|
||||
self call [[ var_3 ]]( var_0["idle1"], 1, 0, 1 );
|
||||
else
|
||||
self call [[ var_3 ]]( var_0["idle1"] );
|
||||
|
||||
wait( var_1["idle1"] );
|
||||
|
||||
if ( common_scripts\utility::issp() )
|
||||
{
|
||||
self call [[ var_2 ]]( var_0["idle1"], 0 );
|
||||
continue;
|
||||
}
|
||||
|
||||
self call [[ var_2 ]]();
|
||||
}
|
||||
|
||||
if ( common_scripts\utility::issp() )
|
||||
self call [[ var_3 ]]( var_0["idle2"], 1, 0, 1 );
|
||||
else
|
||||
self call [[ var_3 ]]( var_0["idle2"] );
|
||||
|
||||
wait( var_1["idle2"] );
|
||||
wait( randomfloat( 3 ) );
|
||||
|
||||
if ( common_scripts\utility::issp() )
|
||||
self call [[ var_2 ]]( var_0["idle2"], 0 );
|
||||
else
|
||||
self call [[ var_2 ]]();
|
||||
}
|
||||
|
||||
oilrig_jumpsuit_hitbox_ondamage( var_0 )
|
||||
{
|
||||
level endon( "game_ended" );
|
||||
self endon( "stop_scripts" );
|
||||
self setcandamage( 1 );
|
||||
|
||||
for (;;)
|
||||
{
|
||||
var_1 = undefined;
|
||||
var_2 = undefined;
|
||||
var_3 = undefined;
|
||||
var_4 = undefined;
|
||||
var_5 = undefined;
|
||||
self waittill( "damage", var_1, var_2, var_3, var_4, var_5 );
|
||||
var_0 notify( "damage", var_1, var_2, var_3, var_4, var_5 );
|
||||
}
|
||||
}
|
57
maps/interactive_models/parakeets.gsc
Normal file
57
maps/interactive_models/parakeets.gsc
Normal file
@ -0,0 +1,57 @@
|
||||
// IW6 GSC SOURCE
|
||||
// Generated by https://github.com/xensik/gsc-tool
|
||||
|
||||
#using_animtree("animals");
|
||||
|
||||
main()
|
||||
{
|
||||
var_0 = spawnstruct();
|
||||
var_0.interactive_type = "parakeets";
|
||||
var_0.rig_model = "pigeon_flock_rig";
|
||||
var_0.rig_animtree = #animtree;
|
||||
var_0.rig_numtags = 12;
|
||||
var_0.bird_model["idle"] = "parakeet";
|
||||
var_0.bird_model["fly"] = "parakeet_fly";
|
||||
var_0.bird_animtree = #animtree;
|
||||
var_0.topspeed = 600;
|
||||
var_0.accn = 150;
|
||||
var_0.scareradius = 300;
|
||||
var_0.death_effect = loadfx( "fx/props/chicken_exp_white" );
|
||||
var_0.birdmodel_anims = [];
|
||||
var_0.rigmodel_anims = [];
|
||||
var_0.birdmodel_anims["idle"][0] = %pigeon_idle;
|
||||
var_0.birdmodel_anims["idleweight"][0] = 1;
|
||||
var_0.birdmodel_anims["idle"][1] = %pigeon_idle_twitch_1;
|
||||
var_0.birdmodel_anims["idleweight"][1] = 0.3;
|
||||
var_0.birdmodel_anims["flying"] = %pigeon_flying_cycle;
|
||||
var_0.rigmodel_anims["flying"] = %pigeon_flock_fly_loop;
|
||||
var_0.rigmodel_anims["takeoff_wire"] = %pigeon_flock_takeoff_wire;
|
||||
var_0.rigmodel_anims["land_wire"] = %pigeon_flock_land_wire;
|
||||
var_0.rigmodel_anims["takeoff_ground"] = %pigeon_flock_takeoff_ground;
|
||||
var_0.rigmodel_anims["land_ground"] = %pigeon_flock_land_ground;
|
||||
var_0.rigmodel_anims["takeoff_inpipe"] = %pigeon_flock_takeoff_inpipe;
|
||||
var_0.rigmodel_anims["land_inpipe"] = %pigeon_flock_land_inpipe;
|
||||
|
||||
if ( !common_scripts\utility::issp() )
|
||||
{
|
||||
var_0.birdmodel_anims["idlemp"][0] = "pigeon_idle";
|
||||
var_0.birdmodel_anims["idlemp"][1] = "pigeon_idle_twitch_1";
|
||||
var_0.birdmodel_anims["flyingmp"] = "pigeon_flying_cycle";
|
||||
var_0.rigmodel_anims["flyingmp"] = "pigeon_flock_fly_loop";
|
||||
var_0.rigmodel_anims["takeoff_wiremp"] = "pigeon_flock_takeoff_wire";
|
||||
var_0.rigmodel_anims["land_wiremp"] = "pigeon_flock_land_wire";
|
||||
var_0.rigmodel_anims["takeoff_groundmp"] = "pigeon_flock_takeoff_ground";
|
||||
var_0.rigmodel_anims["land_groundmp"] = "pigeon_flock_land_ground";
|
||||
var_0.rigmodel_anims["takeoff_inpipemp"] = "pigeon_flock_takeoff_inpipe";
|
||||
var_0.rigmodel_anims["land_inpipemp"] = "pigeon_flock_land_inpipe";
|
||||
}
|
||||
|
||||
var_0.sounds = [];
|
||||
var_0.sounds["takeoff"] = "anml_bird_startle_flyaway";
|
||||
|
||||
if ( !isdefined( level._interactive ) )
|
||||
level._interactive = [];
|
||||
|
||||
level._interactive[var_0.interactive_type] = var_0;
|
||||
thread maps\interactive_models\_birds::birds();
|
||||
}
|
61
maps/interactive_models/parakeets_dlc.gsc
Normal file
61
maps/interactive_models/parakeets_dlc.gsc
Normal file
@ -0,0 +1,61 @@
|
||||
// IW6 GSC SOURCE
|
||||
// Generated by https://github.com/xensik/gsc-tool
|
||||
|
||||
#using_animtree("animals_dlc");
|
||||
|
||||
main()
|
||||
{
|
||||
var_0 = spawnstruct();
|
||||
var_0.interactive_type = "parakeets_dlc";
|
||||
var_0.rig_model = "pigeon_flock_rig";
|
||||
var_0.rig_animtree = #animtree;
|
||||
var_0.rig_numtags = 12;
|
||||
var_0.bird_model["idle"] = "parakeet";
|
||||
var_0.bird_model["fly"] = "parakeet_fly";
|
||||
var_0.bird_animtree = #animtree;
|
||||
var_0.topspeed = 600;
|
||||
var_0.accn = 150;
|
||||
var_0.scareradius = 300;
|
||||
var_0.death_effect = loadfx( "fx/props/chicken_exp_white" );
|
||||
var_0.birdmodel_anims = [];
|
||||
var_0.rigmodel_anims = [];
|
||||
var_0.birdmodel_anims["idle"][0] = %pigeon_idle;
|
||||
var_0.birdmodel_anims["idleweight"][0] = 1;
|
||||
var_0.birdmodel_anims["idle"][1] = %pigeon_idle_twitch_1;
|
||||
var_0.birdmodel_anims["idleweight"][1] = 0.3;
|
||||
var_0.birdmodel_anims["flying"] = %pigeon_flying_cycle;
|
||||
var_0.rigmodel_anims["flying"] = %pigeon_flock_fly_loop;
|
||||
var_0.rigmodel_anims["takeoff_wire"] = %pigeon_flock_takeoff_wire;
|
||||
var_0.rigmodel_anims["land_wire"] = %pigeon_flock_land_wire;
|
||||
var_0.rigmodel_anims["takeoff_ground"] = %pigeon_flock_takeoff_ground;
|
||||
var_0.rigmodel_anims["land_ground"] = %pigeon_flock_land_ground;
|
||||
var_0.rigmodel_anims["takeoff_inpipe"] = %pigeon_flock_takeoff_inpipe;
|
||||
var_0.rigmodel_anims["land_inpipe"] = %pigeon_flock_land_inpipe;
|
||||
|
||||
if ( !common_scripts\utility::issp() )
|
||||
{
|
||||
var_0.birdmodel_anims["idlemp"][0] = "pigeon_idle";
|
||||
var_0.birdmodel_anims["idlemp"][1] = "pigeon_idle_twitch_1";
|
||||
var_0.birdmodel_anims["flyingmp"] = "pigeon_flying_cycle";
|
||||
var_0.rigmodel_anims["flyingmp"] = "pigeon_flock_fly_loop_mp";
|
||||
var_0.rigmodel_anims["takeoff_wiremp"] = "pigeon_flock_takeoff_wire_mp";
|
||||
var_0.rigmodel_anims["land_wiremp"] = "pigeon_flock_land_wire_mp";
|
||||
var_0.rigmodel_anims["takeoff_groundmp"] = "pigeon_flock_takeoff_ground_mp";
|
||||
var_0.rigmodel_anims["land_groundmp"] = "pigeon_flock_land_ground_mp";
|
||||
var_0.rigmodel_anims["takeoff_inpipemp"] = "pigeon_flock_takeoff_inpipe_mp";
|
||||
var_0.rigmodel_anims["land_inpipemp"] = "pigeon_flock_land_inpipe_mp";
|
||||
}
|
||||
|
||||
var_0.sounds = [];
|
||||
var_0.sounds["takeoff"] = "anml_bird_startle_flyaway";
|
||||
precachemodel( var_0.rig_model );
|
||||
|
||||
foreach ( var_2 in var_0.bird_model )
|
||||
precachemodel( var_2 );
|
||||
|
||||
if ( !isdefined( level._interactive ) )
|
||||
level._interactive = [];
|
||||
|
||||
level._interactive[var_0.interactive_type] = var_0;
|
||||
thread maps\interactive_models\_birds_dlc::birds( var_0 );
|
||||
}
|
57
maps/interactive_models/pigeons.gsc
Normal file
57
maps/interactive_models/pigeons.gsc
Normal file
@ -0,0 +1,57 @@
|
||||
// IW6 GSC SOURCE
|
||||
// Generated by https://github.com/xensik/gsc-tool
|
||||
|
||||
#using_animtree("animals");
|
||||
|
||||
main()
|
||||
{
|
||||
var_0 = spawnstruct();
|
||||
var_0.interactive_type = "pigeons";
|
||||
var_0.rig_model = "pigeon_flock_rig";
|
||||
var_0.rig_animtree = #animtree;
|
||||
var_0.rig_numtags = 12;
|
||||
var_0.bird_model["idle"] = "pigeon_iw5";
|
||||
var_0.bird_model["fly"] = "pigeon_fly_iw5";
|
||||
var_0.bird_animtree = #animtree;
|
||||
var_0.topspeed = 400;
|
||||
var_0.accn = 100;
|
||||
var_0.scareradius = 300;
|
||||
var_0.death_effect = loadfx( "fx/props/chicken_exp_white" );
|
||||
var_0.birdmodel_anims = [];
|
||||
var_0.rigmodel_anims = [];
|
||||
var_0.birdmodel_anims["idle"][0] = %pigeon_idle;
|
||||
var_0.birdmodel_anims["idleweight"][0] = 1;
|
||||
var_0.birdmodel_anims["idle"][1] = %pigeon_idle_twitch_1;
|
||||
var_0.birdmodel_anims["idleweight"][1] = 0.3;
|
||||
var_0.birdmodel_anims["flying"] = %pigeon_flying_cycle;
|
||||
var_0.rigmodel_anims["flying"] = %pigeon_flock_fly_loop;
|
||||
var_0.rigmodel_anims["takeoff_wire"] = %pigeon_flock_takeoff_wire;
|
||||
var_0.rigmodel_anims["land_wire"] = %pigeon_flock_land_wire;
|
||||
var_0.rigmodel_anims["takeoff_ground"] = %pigeon_flock_takeoff_ground;
|
||||
var_0.rigmodel_anims["land_ground"] = %pigeon_flock_land_ground;
|
||||
var_0.rigmodel_anims["takeoff_inpipe"] = %pigeon_flock_takeoff_inpipe;
|
||||
var_0.rigmodel_anims["land_inpipe"] = %pigeon_flock_land_inpipe;
|
||||
|
||||
if ( !common_scripts\utility::issp() )
|
||||
{
|
||||
var_0.birdmodel_anims["idlemp"][0] = "pigeon_idle";
|
||||
var_0.birdmodel_anims["idlemp"][1] = "pigeon_idle_twitch_1";
|
||||
var_0.birdmodel_anims["flyingmp"] = "pigeon_flying_cycle";
|
||||
var_0.rigmodel_anims["flyingmp"] = "pigeon_flock_fly_loop";
|
||||
var_0.rigmodel_anims["takeoff_wiremp"] = "pigeon_flock_takeoff_wire";
|
||||
var_0.rigmodel_anims["land_wiremp"] = "pigeon_flock_land_wire";
|
||||
var_0.rigmodel_anims["takeoff_groundmp"] = "pigeon_flock_takeoff_ground";
|
||||
var_0.rigmodel_anims["land_groundmp"] = "pigeon_flock_land_ground";
|
||||
var_0.rigmodel_anims["takeoff_inpipemp"] = "pigeon_flock_takeoff_inpipe";
|
||||
var_0.rigmodel_anims["land_inpipemp"] = "pigeon_flock_land_inpipe";
|
||||
}
|
||||
|
||||
var_0.sounds = [];
|
||||
var_0.sounds["takeoff"] = "anml_bird_startle_flyaway";
|
||||
|
||||
if ( !isdefined( level._interactive ) )
|
||||
level._interactive = [];
|
||||
|
||||
level._interactive[var_0.interactive_type] = var_0;
|
||||
thread maps\interactive_models\_birds::birds();
|
||||
}
|
327
maps/interactive_models/vulture.gsc
Normal file
327
maps/interactive_models/vulture.gsc
Normal file
@ -0,0 +1,327 @@
|
||||
// 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 );
|
||||
}
|
51
maps/interactive_models/vulture_mp.gsc
Normal file
51
maps/interactive_models/vulture_mp.gsc
Normal file
@ -0,0 +1,51 @@
|
||||
// IW6 GSC SOURCE
|
||||
// Generated by https://github.com/xensik/gsc-tool
|
||||
|
||||
vulture_circling( var_0, var_1 )
|
||||
{
|
||||
if ( !isdefined( var_1 ) )
|
||||
var_1 = 1;
|
||||
|
||||
if ( !isdefined( level._interactive ) )
|
||||
level._interactive = [];
|
||||
|
||||
if ( !isdefined( level._interactive["vultures"] ) )
|
||||
{
|
||||
level._interactive["vultures"]["count"] = 0;
|
||||
level._interactive["vultures"]["anims"][0] = "vulture_rig_circle";
|
||||
level._interactive["vultures"]["anims"][1] = "vulture_rig_circle2";
|
||||
level._interactive["vultures"]["anims"][2] = "vulture_rig_circle3";
|
||||
level._interactive["vultures"]["rigs"] = [];
|
||||
level._interactive["vultures"]["vultures"] = [];
|
||||
}
|
||||
|
||||
for ( var_2 = 0; var_2 < var_1; var_2++ )
|
||||
{
|
||||
var_3 = var_0 + ( 0, 0, 50 ) * var_2;
|
||||
|
||||
if ( var_2 > 0 )
|
||||
var_3 = var_3 + ( 0, 0, randomintrange( -20, 20 ) );
|
||||
|
||||
thread vulture_circling_internal( var_3 );
|
||||
}
|
||||
}
|
||||
|
||||
vulture_circling_internal( var_0 )
|
||||
{
|
||||
var_1 = level._interactive["vultures"]["rigs"].size;
|
||||
var_2 = randomint( 360 );
|
||||
var_3 = spawn( "script_model", var_0 );
|
||||
var_3.angles = ( 0, var_2, 0 );
|
||||
var_3 setmodel( "vulture_circle_rig" );
|
||||
var_4 = spawn( "script_model", var_3.origin );
|
||||
var_4.angles = ( 0, var_2, 0 );
|
||||
var_4 setmodel( "ng_vulture" );
|
||||
var_4 linkto( var_3, "tag_attach" );
|
||||
var_5 = level._interactive["vultures"]["anims"][common_scripts\utility::mod( var_1, 3 )];
|
||||
var_3 scriptmodelplayanim( var_5 );
|
||||
level._interactive["vultures"]["vultures"][var_1] = var_4;
|
||||
level._interactive["vultures"]["rigs"][var_1] = var_3;
|
||||
var_4 endon( "death" );
|
||||
wait( randomfloat( 5 ) );
|
||||
var_4 scriptmodelplayanim( "vulture_fly_loop_all" );
|
||||
}
|
Reference in New Issue
Block a user