init
This commit is contained in:
1707
animscripts/dog/dog_combat.gsc
Normal file
1707
animscripts/dog/dog_combat.gsc
Normal file
File diff suppressed because it is too large
Load Diff
14
animscripts/dog/dog_cover_arrival.gsc
Normal file
14
animscripts/dog/dog_cover_arrival.gsc
Normal file
@ -0,0 +1,14 @@
|
||||
// IW6 GSC SOURCE
|
||||
// Generated by https://github.com/xensik/gsc-tool
|
||||
|
||||
#using_animtree("dog");
|
||||
|
||||
main()
|
||||
{
|
||||
self endon( "killanimscript" );
|
||||
thread animscripts\dog\dog_move::handlefootstepnotetracks();
|
||||
self clearanim( %dog_move, 0.2 );
|
||||
self setflaggedanimknoballrestart( "dog_stop", self.dogarrivalanim, %body, 1, 0.2, self.moveplaybackrate );
|
||||
animscripts\shared::donotetracks( "dog_stop" );
|
||||
self.dogarrivalanim = undefined;
|
||||
}
|
78
animscripts/dog/dog_death.gsc
Normal file
78
animscripts/dog/dog_death.gsc
Normal file
@ -0,0 +1,78 @@
|
||||
// IW6 GSC SOURCE
|
||||
// Generated by https://github.com/xensik/gsc-tool
|
||||
|
||||
#using_animtree("dog");
|
||||
|
||||
main()
|
||||
{
|
||||
if ( isdefined( level.shark_functions ) )
|
||||
{
|
||||
if ( issubstr( self.model, "shark" ) )
|
||||
{
|
||||
self [[ level.shark_functions["death"] ]]();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
self endon( "killanimscript" );
|
||||
|
||||
if ( isdefined( self.a.nodeath ) )
|
||||
{
|
||||
wait 1.1;
|
||||
var_0 = self getdroptofloorposition();
|
||||
|
||||
if ( isdefined( var_0 ) )
|
||||
{
|
||||
var_1 = common_scripts\utility::spawn_tag_origin();
|
||||
var_1.origin = self.origin;
|
||||
var_1.angles = self.angles;
|
||||
self linkto( var_1 );
|
||||
var_1 moveto( var_0, 0.5 );
|
||||
wait 0.5;
|
||||
self unlink();
|
||||
var_1 delete();
|
||||
}
|
||||
else
|
||||
wait 0.5;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
self unlink();
|
||||
|
||||
if ( isdefined( self.enemy ) && isdefined( self.enemy.syncedmeleetarget ) && self.enemy.syncedmeleetarget == self )
|
||||
self.enemy.syncedmeleetarget = undefined;
|
||||
|
||||
self clearanim( %body, 0.2 );
|
||||
var_2 = getdogdeathanim( "front" );
|
||||
|
||||
if ( isdefined( self.deathanim ) )
|
||||
var_2 = self.deathanim;
|
||||
|
||||
if ( isdefined( self.custom_deathsound ) )
|
||||
self playsound( self.custom_deathsound );
|
||||
else if ( self isdogbeingdriven() )
|
||||
self playsound( "anml_dog_shot_death_plr" );
|
||||
else
|
||||
self playsound( "anml_dog_shot_death" );
|
||||
|
||||
self setflaggedanimrestart( "dog_anim", var_2, 1, 0.2, 1 );
|
||||
animscripts\shared::donotetracks( "dog_anim" );
|
||||
}
|
||||
|
||||
getdogdeathanim( var_0 )
|
||||
{
|
||||
var_1 = animscripts\utility::lookupdoganim( "death", var_0 );
|
||||
|
||||
if ( isarray( var_1 ) )
|
||||
return var_1[randomint( var_1.size )];
|
||||
|
||||
return var_1;
|
||||
}
|
||||
|
||||
initdogarchetype_death()
|
||||
{
|
||||
var_0 = [];
|
||||
var_0["front"] = [ %iw6_dog_death_4, %iw6_dog_death_6 ];
|
||||
anim.archetypes["dog"]["death"] = var_0;
|
||||
}
|
43
animscripts/dog/dog_flashed.gsc
Normal file
43
animscripts/dog/dog_flashed.gsc
Normal file
@ -0,0 +1,43 @@
|
||||
// IW6 GSC SOURCE
|
||||
// Generated by https://github.com/xensik/gsc-tool
|
||||
|
||||
#using_animtree("dog");
|
||||
|
||||
main()
|
||||
{
|
||||
if ( isdefined( level.shark_functions ) )
|
||||
{
|
||||
if ( issubstr( self.model, "shark" ) )
|
||||
{
|
||||
self [[ level.shark_functions["flashed"] ]]();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
self endon( "killanimscript" );
|
||||
self endon( "stop_flashbang_effect" );
|
||||
wait( randomfloatrange( 0, 0.4 ) );
|
||||
self clearanim( %body, 0.1 );
|
||||
var_0 = maps\_utility::flashbanggettimeleftsec();
|
||||
|
||||
if ( var_0 > 2 && randomint( 100 ) > 60 )
|
||||
self setflaggedanimrestart( "flashed_anim", getdogflashedanim( "flash_long" ), 1, 0.2, self.animplaybackrate * 0.75 );
|
||||
else
|
||||
self setflaggedanimrestart( "flashed_anim", getdogflashedanim( "flash_short" ), 1, 0.2, self.animplaybackrate );
|
||||
|
||||
var_1 = getanimlength( getdogflashedanim( "flash_short" ) ) * self.animplaybackrate;
|
||||
|
||||
if ( var_0 < var_1 )
|
||||
animscripts\notetracks::donotetracksfortime( var_0, "flashed_anim" );
|
||||
else
|
||||
animscripts\shared::donotetracks( "flashed_anim" );
|
||||
|
||||
self.flashed = 0;
|
||||
self notify( "stop_flashbang_effect" );
|
||||
}
|
||||
|
||||
getdogflashedanim( var_0 )
|
||||
{
|
||||
var_1 = animscripts\utility::lookupdoganim( "reaction", var_0 );
|
||||
return var_1;
|
||||
}
|
206
animscripts/dog/dog_init.gsc
Normal file
206
animscripts/dog/dog_init.gsc
Normal file
@ -0,0 +1,206 @@
|
||||
// IW6 GSC SOURCE
|
||||
// Generated by https://github.com/xensik/gsc-tool
|
||||
|
||||
#using_animtree("dog");
|
||||
|
||||
main()
|
||||
{
|
||||
if ( isdefined( level.shark_functions ) )
|
||||
{
|
||||
if ( issubstr( self.model, "shark" ) )
|
||||
{
|
||||
self [[ level.shark_functions["init"] ]]();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
self useanimtree( #animtree );
|
||||
initdoganimations();
|
||||
initdogarchetype();
|
||||
animscripts\init::firstinit();
|
||||
self.ignoresuppression = 1;
|
||||
self.newenemyreactiondistsq = 0;
|
||||
self.chatinitialized = 0;
|
||||
self.nododgemove = 1;
|
||||
self.root_anim = %body;
|
||||
self.meleeattackdist = 0;
|
||||
thread setmeleeattackdist();
|
||||
self.a = spawnstruct();
|
||||
self.a.pose = "stand";
|
||||
self.a.nextstandinghitdying = 0;
|
||||
self.a.movement = "run";
|
||||
animscripts\init::set_anim_playback_rate();
|
||||
self.suppressionthreshold = 1;
|
||||
self.disablearrivals = 0;
|
||||
self.stopanimdistsq = anim.dogstoppingdistsq;
|
||||
self.usechokepoints = 0;
|
||||
self.turnrate = 0.2;
|
||||
thread animscripts\combat_utility::monitorflash();
|
||||
self.pathenemyfightdist = 512;
|
||||
self settalktospecies( "dog" );
|
||||
self.health = int( anim.dog_health * self.health );
|
||||
|
||||
if ( !level.console )
|
||||
thread pc_dogsetup();
|
||||
}
|
||||
|
||||
pc_upgradedog()
|
||||
{
|
||||
var_0 = issubstr( self.model, "dog" );
|
||||
|
||||
if ( var_0 )
|
||||
var_1 = "dog";
|
||||
else
|
||||
var_1 = "wolf";
|
||||
|
||||
var_2 = maps\_utility_dogs::get_dog_model_letter_type( self.model );
|
||||
|
||||
if ( !isdefined( level.furfx ) || !isdefined( level.furfx[var_1] ) || !isdefined( level.furfx[var_1][var_2] ) )
|
||||
return;
|
||||
|
||||
self endon( "death" );
|
||||
self setmodel( self.model + "_fur" );
|
||||
wait 0.25;
|
||||
self.furfx = level.furfx[var_1][var_2];
|
||||
playfxontag( self.furfx, self, "tag_origin" );
|
||||
}
|
||||
|
||||
pc_downgradedog()
|
||||
{
|
||||
if ( !issubstr( self.model, "_fur" ) )
|
||||
return;
|
||||
|
||||
var_0 = getsubstr( self.model, 0, self.model.size - 4 );
|
||||
var_1 = issubstr( self.model, "dog" );
|
||||
|
||||
if ( var_1 )
|
||||
var_2 = "dog";
|
||||
else
|
||||
var_2 = "wolf";
|
||||
|
||||
if ( isdefined( self.furfx ) )
|
||||
{
|
||||
killfxontag( self.furfx, self, "tag_origin" );
|
||||
self.furfx = undefined;
|
||||
}
|
||||
|
||||
self setmodel( var_0 );
|
||||
}
|
||||
|
||||
pc_dogsetup()
|
||||
{
|
||||
if ( ishairrunning() )
|
||||
pc_upgradedog();
|
||||
|
||||
if ( !isdefined( self.pc_furmonitor ) )
|
||||
{
|
||||
self.pc_furmonitor = 1;
|
||||
thread pc_furmonitor();
|
||||
}
|
||||
}
|
||||
|
||||
pc_furmonitor()
|
||||
{
|
||||
self endon( "death" );
|
||||
var_0 = ishairrunning();
|
||||
|
||||
for (;;)
|
||||
{
|
||||
wait 0.1;
|
||||
var_1 = ishairrunning();
|
||||
|
||||
if ( var_0 != var_1 )
|
||||
{
|
||||
if ( var_1 )
|
||||
pc_upgradedog();
|
||||
else
|
||||
pc_downgradedog();
|
||||
}
|
||||
|
||||
var_0 = var_1;
|
||||
}
|
||||
}
|
||||
|
||||
setmeleeattackdist()
|
||||
{
|
||||
self endon( "death" );
|
||||
|
||||
for (;;)
|
||||
{
|
||||
if ( isdefined( self.enemy ) && isplayer( self.enemy ) )
|
||||
self.meleeattackdist = anim.dogattackplayerdist;
|
||||
else
|
||||
self.meleeattackdist = anim.dogattackaidist;
|
||||
|
||||
self waittill( "enemy" );
|
||||
}
|
||||
}
|
||||
|
||||
initdoganimations()
|
||||
{
|
||||
if ( !isdefined( level.dogsinitialized ) )
|
||||
{
|
||||
level.dogsinitialized = 1;
|
||||
precachestring( &"SCRIPT_PLATFORM_DOG_DEATH_DO_NOTHING" );
|
||||
precachestring( &"SCRIPT_PLATFORM_DOG_DEATH_TOO_LATE" );
|
||||
precachestring( &"SCRIPT_PLATFORM_DOG_DEATH_TOO_SOON" );
|
||||
precachestring( &"SCRIPT_PLATFORM_DOG_HINT" );
|
||||
precachestring( &"NEW_DOG_DEATH_DO_NOTHING_ALT" );
|
||||
precachestring( &"NEW_DOG_DEATH_TOO_LATE_ALT" );
|
||||
precachestring( &"NEW_DOG_DEATH_TOO_SOON_ALT" );
|
||||
}
|
||||
|
||||
if ( isdefined( anim.notfirsttimedogs ) )
|
||||
return;
|
||||
|
||||
precacheshader( "hud_dog_melee" );
|
||||
precacheshader( "hud_hyena_melee" );
|
||||
anim.notfirsttimedogs = 1;
|
||||
anim.dogstoppingdistsq = lengthsquared( getmovedelta( %iw6_dog_attackidle_runin_8, 0, 1 ) * 3 );
|
||||
anim.dogstartmovedist = length( getmovedelta( %iw6_dog_attackidle_runout_8, 0, 1 ) );
|
||||
anim.dogattackplayerdist = 102;
|
||||
var_0 = getstartorigin( ( 0, 0, 0 ), ( 0, 0, 0 ), %iw6_dog_kill_front_quick_1 );
|
||||
anim.dogattackaidist = length( var_0 );
|
||||
anim.dogtraverseanims = [];
|
||||
anim.dogtraverseanims["wallhop"] = %iw6_dog_traverse_over_24;
|
||||
anim.dogtraverseanims["window_40"] = %iw6_dog_traverse_over_36;
|
||||
anim.dogtraverseanims["jump_down_40"] = %iw6_dog_traverse_down_40;
|
||||
anim.dogtraverseanims["jump_down_24"] = %iw6_dog_traverse_down_24;
|
||||
anim.dogtraverseanims["jump_up_24"] = %iw6_dog_traverse_up_24;
|
||||
anim.dogtraverseanims["jump_up_40"] = %iw6_dog_traverse_up_40;
|
||||
anim.dogtraverseanims["jump_up_80"] = %iw6_dog_traverse_up_70;
|
||||
anim.dogtraverseanims["jump_down_70"] = %iw6_dog_traverse_down_70;
|
||||
anim.doglookpose["attackIdle"][2] = %german_shepherd_attack_look_down;
|
||||
anim.doglookpose["attackIdle"][4] = %german_shepherd_attack_look_left;
|
||||
anim.doglookpose["attackIdle"][6] = %german_shepherd_attack_look_right;
|
||||
anim.doglookpose["attackIdle"][8] = %german_shepherd_attack_look_up;
|
||||
anim.doglookpose["normal"][2] = %german_shepherd_look_down;
|
||||
anim.doglookpose["normal"][4] = %german_shepherd_look_left;
|
||||
anim.doglookpose["normal"][6] = %german_shepherd_look_right;
|
||||
anim.doglookpose["normal"][8] = %german_shepherd_look_up;
|
||||
level._effect["dog_bite_blood"] = loadfx( "fx/impacts/deathfx_dogbite" );
|
||||
level._effect["deathfx_bloodpool"] = loadfx( "fx/impacts/deathfx_bloodpool_view" );
|
||||
var_1 = 5;
|
||||
var_2 = [];
|
||||
|
||||
for ( var_3 = 0; var_3 <= var_1; var_3++ )
|
||||
var_2[var_2.size] = var_3 / var_1;
|
||||
|
||||
level.dog_melee_index = 0;
|
||||
level.dog_melee_timing_array = common_scripts\utility::array_randomize( var_2 );
|
||||
setdvar( "friendlySaveFromDog", "0" );
|
||||
}
|
||||
|
||||
initdogarchetype()
|
||||
{
|
||||
animscripts\animset::init_anim_sets();
|
||||
|
||||
if ( animscripts\animset::archetypeexists( "dog" ) )
|
||||
return;
|
||||
|
||||
anim.archetypes["dog"] = [];
|
||||
animscripts\dog\dog_stop::initdogarchetype_stop();
|
||||
animscripts\dog\dog_move::initdogarchetype_move();
|
||||
animscripts\dog\dog_pain::initdogarchetype_reaction();
|
||||
animscripts\dog\dog_death::initdogarchetype_death();
|
||||
}
|
142
animscripts/dog/dog_kill_traversal.gsc
Normal file
142
animscripts/dog/dog_kill_traversal.gsc
Normal file
@ -0,0 +1,142 @@
|
||||
// IW6 GSC SOURCE
|
||||
// Generated by https://github.com/xensik/gsc-tool
|
||||
|
||||
check_kill_traversal( var_0 )
|
||||
{
|
||||
if ( self.team != "allies" )
|
||||
return 0;
|
||||
|
||||
self endon( "killanimscript" );
|
||||
var_1 = self getnegotiationstartnode();
|
||||
var_2 = self getnegotiationendnode();
|
||||
var_3 = getaiarray( "axis" );
|
||||
var_4 = undefined;
|
||||
var_5 = dog_get_within_range( var_2.origin, var_3, 90 );
|
||||
|
||||
if ( var_5.size > 0 )
|
||||
{
|
||||
var_6 = var_5[0];
|
||||
var_7 = lengthsquared( var_1.origin - var_2.origin );
|
||||
var_8 = lengthsquared( var_1.origin - var_6.origin );
|
||||
|
||||
if ( var_8 < var_7 )
|
||||
{
|
||||
self.syncedmeleetarget2 = var_6;
|
||||
var_6.syncedmeleetarget2 = self;
|
||||
var_6.traversedata = var_0;
|
||||
var_9 = [];
|
||||
var_9[0][0] = 400;
|
||||
var_9[0][1] = "blood_small";
|
||||
var_9[0][2] = "J_Neck";
|
||||
var_9[1][0] = 2300;
|
||||
var_9[1][1] = "blood_medium";
|
||||
var_9[1][2] = "J_Neck";
|
||||
var_9[2][0] = 2600;
|
||||
var_9[2][1] = "blood_medium";
|
||||
var_9[2][2] = "J_Neck";
|
||||
var_9[3][0] = 3300;
|
||||
var_9[3][1] = "blood_heavy";
|
||||
var_9[3][2] = "J_Neck";
|
||||
var_6 thread monitorfx( var_9 );
|
||||
var_6 animcustom( ::human_traverse_kill );
|
||||
self orientmode( "face angle", var_1.angles[1] );
|
||||
dog_traverse_kill( var_0 );
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
dog_get_within_range( var_0, var_1, var_2 )
|
||||
{
|
||||
var_3 = [];
|
||||
|
||||
for ( var_4 = 0; var_4 < var_1.size; var_4++ )
|
||||
{
|
||||
if ( distance( var_1[var_4].origin, var_0 ) <= var_2 )
|
||||
var_3[var_3.size] = var_1[var_4];
|
||||
}
|
||||
|
||||
return var_3;
|
||||
}
|
||||
|
||||
#using_animtree("dog");
|
||||
|
||||
dog_traverse_kill( var_0 )
|
||||
{
|
||||
self.safetochangescript = 0;
|
||||
self.orig_flashbangimmunity = self.flashbangimmunity;
|
||||
self.flashbangimmunity = 1;
|
||||
self.pushable = 0;
|
||||
self traversemode( "nogravity" );
|
||||
self traversemode( "noclip" );
|
||||
self clearpitchorient();
|
||||
self setcandamage( 0 );
|
||||
self clearanim( %body, 0.1 );
|
||||
self setflaggedanimrestart( "dog_traverse", level.scr_anim["generic"][var_0["traverseAnim"]][0], 1, 0.2, 1 );
|
||||
animscripts\shared::donotetracks( "dog_traverse" );
|
||||
self unlink();
|
||||
self setcandamage( 1 );
|
||||
self traversemode( "gravity" );
|
||||
self.pushable = 1;
|
||||
self.safetochangescript = 1;
|
||||
self.flashbangimmunity = self.orig_flashbangimmunity;
|
||||
}
|
||||
|
||||
#using_animtree("generic_human");
|
||||
|
||||
human_traverse_kill()
|
||||
{
|
||||
self endon( "killanimscript" );
|
||||
self endon( "death" );
|
||||
self orientmode( "face point", self.syncedmeleetarget2.origin, 1 );
|
||||
self animmode( "nogravity" );
|
||||
self.a.pose = "stand";
|
||||
self.a.special = "none";
|
||||
|
||||
if ( animscripts\utility::usingsidearm() )
|
||||
animscripts\shared::placeweaponon( self.primaryweapon, "right" );
|
||||
|
||||
self clearanim( %body, 0.1 );
|
||||
self setflaggedanimrestart( "aianim", level.scr_anim["generic"][self.traversedata["traverseAnim"]][1], 1, 0.1, 1 );
|
||||
|
||||
if ( isdefined( self.traversedata["linkMe"] ) )
|
||||
thread dog_link();
|
||||
|
||||
animscripts\shared::donotetracks( "aianim" );
|
||||
self waittillmatch( "aianim", "end" );
|
||||
|
||||
if ( isalive( self ) && !isdefined( self.magic_bullet_shield ) )
|
||||
{
|
||||
self.a.nodeath = 1;
|
||||
animscripts\shared::dropallaiweapons();
|
||||
self kill();
|
||||
}
|
||||
}
|
||||
|
||||
monitorfx( var_0 )
|
||||
{
|
||||
self endon( "death" );
|
||||
var_1 = 0;
|
||||
var_2 = gettime();
|
||||
|
||||
while ( var_1 < var_0.size )
|
||||
{
|
||||
var_3 = gettime() - var_2;
|
||||
|
||||
if ( var_3 >= var_0[var_1][0] )
|
||||
{
|
||||
playfxontag( level._effect[var_0[var_1][1]], self, var_0[var_1][2] );
|
||||
var_1++;
|
||||
}
|
||||
|
||||
wait 0.05;
|
||||
}
|
||||
}
|
||||
|
||||
dog_link()
|
||||
{
|
||||
wait 0.15;
|
||||
self.syncedmeleetarget2 linkto( self, "tag_sync", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
||||
}
|
1184
animscripts/dog/dog_move.gsc
Normal file
1184
animscripts/dog/dog_move.gsc
Normal file
File diff suppressed because it is too large
Load Diff
61
animscripts/dog/dog_pain.gsc
Normal file
61
animscripts/dog/dog_pain.gsc
Normal file
@ -0,0 +1,61 @@
|
||||
// IW6 GSC SOURCE
|
||||
// Generated by https://github.com/xensik/gsc-tool
|
||||
|
||||
#using_animtree("dog");
|
||||
|
||||
main()
|
||||
{
|
||||
if ( isdefined( level.shark_functions ) )
|
||||
{
|
||||
if ( issubstr( self.model, "shark" ) )
|
||||
{
|
||||
self [[ level.shark_functions["pain"] ]]();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
self endon( "killanimscript" );
|
||||
|
||||
if ( isdefined( self.enemy ) && isdefined( self.enemy.syncedmeleetarget ) && self.enemy.syncedmeleetarget == self && ( !isdefined( self.disablepain ) || !self.disablepain ) )
|
||||
{
|
||||
self unlink();
|
||||
self.enemy.syncedmeleetarget = undefined;
|
||||
}
|
||||
|
||||
self animmode( "zonly_physics" );
|
||||
self clearanim( %body, 0.2 );
|
||||
|
||||
if ( self.prevscript == "dog_stop" )
|
||||
var_0 = "idle_pain";
|
||||
else
|
||||
var_0 = "run_pain";
|
||||
|
||||
self setflaggedanimrestart( "dog_pain_anim", getdogpainanim( var_0 ), 1, 0.2, 1 );
|
||||
|
||||
if ( self isdogbeingdriven() )
|
||||
self playsound( "bullet_large_flesh" );
|
||||
else
|
||||
self playsound( "bullet_large_flesh_npc" );
|
||||
|
||||
animscripts\shared::donotetracks( "dog_pain_anim" );
|
||||
}
|
||||
|
||||
getdogpainanim( var_0 )
|
||||
{
|
||||
var_1 = animscripts\utility::lookupdoganim( "reaction", var_0 );
|
||||
|
||||
if ( isarray( var_1 ) )
|
||||
return var_1[randomint( var_1.size )];
|
||||
|
||||
return var_1;
|
||||
}
|
||||
|
||||
initdogarchetype_reaction()
|
||||
{
|
||||
var_0 = [];
|
||||
var_0["flash_long"] = [ %iw6_dog_run_pain_4, %iw6_dog_run_pain_6 ];
|
||||
var_0["flash_short"] = %german_shepherd_run_flashbang_b;
|
||||
var_0["run_pain"] = [ %iw6_dog_run_pain_4, %iw6_dog_run_pain_6 ];
|
||||
var_0["idle_pain"] = [ %iw6_dog_alertidle_pain_4, %iw6_dog_alertidle_pain_6 ];
|
||||
anim.archetypes["dog"]["reaction"] = var_0;
|
||||
}
|
14
animscripts/dog/dog_reactions.gsc
Normal file
14
animscripts/dog/dog_reactions.gsc
Normal file
@ -0,0 +1,14 @@
|
||||
// IW6 GSC SOURCE
|
||||
// Generated by https://github.com/xensik/gsc-tool
|
||||
|
||||
main()
|
||||
{
|
||||
if ( isdefined( level.shark_functions ) )
|
||||
{
|
||||
if ( issubstr( self.model, "shark" ) )
|
||||
{
|
||||
self [[ level.shark_functions["reactions"] ]]();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
57
animscripts/dog/dog_scripted.gsc
Normal file
57
animscripts/dog/dog_scripted.gsc
Normal file
@ -0,0 +1,57 @@
|
||||
// IW6 GSC SOURCE
|
||||
// Generated by https://github.com/xensik/gsc-tool
|
||||
|
||||
#using_animtree("dog");
|
||||
|
||||
main()
|
||||
{
|
||||
if ( isdefined( level.shark_functions ) )
|
||||
{
|
||||
if ( issubstr( self.model, "shark" ) )
|
||||
{
|
||||
self [[ level.shark_functions["scripted"] ]]();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
self endon( "death" );
|
||||
self notify( "killanimscript" );
|
||||
self.codescripted["root"] = %body;
|
||||
self endon( "end_sequence" );
|
||||
self startscriptedanim( self.codescripted["notifyName"], self.codescripted["origin"], self.codescripted["angles"], self.codescripted["anim"], self.codescripted["animMode"], self.codescripted["root"], self.codescripted["goalTime"] );
|
||||
self.codescripted = undefined;
|
||||
|
||||
if ( isdefined( self.deathstring_passed ) )
|
||||
self.deathstring = self.deathstring_passed;
|
||||
|
||||
self waittill( "killanimscript" );
|
||||
}
|
||||
|
||||
init( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
|
||||
{
|
||||
if ( isdefined( level.shark_functions ) )
|
||||
{
|
||||
if ( issubstr( self.model, "shark" ) )
|
||||
{
|
||||
self [[ level.shark_functions["scripted_init"] ]]( var_0, var_1, var_2, var_3, var_4, var_5 );
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
self.codescripted["notifyName"] = var_0;
|
||||
self.codescripted["origin"] = var_1;
|
||||
self.codescripted["angles"] = var_2;
|
||||
self.codescripted["anim"] = var_3;
|
||||
|
||||
if ( isdefined( var_4 ) )
|
||||
self.codescripted["animMode"] = var_4;
|
||||
else
|
||||
self.codescripted["animMode"] = "normal";
|
||||
|
||||
if ( isdefined( var_5 ) )
|
||||
self.codescripted["root"] = var_5;
|
||||
else
|
||||
self.codescripted["root"] = %body;
|
||||
|
||||
self.codescripted["goalTime"] = var_6;
|
||||
}
|
842
animscripts/dog/dog_stop.gsc
Normal file
842
animscripts/dog/dog_stop.gsc
Normal file
@ -0,0 +1,842 @@
|
||||
// IW6 GSC SOURCE
|
||||
// Generated by https://github.com/xensik/gsc-tool
|
||||
|
||||
#using_animtree("dog");
|
||||
|
||||
main()
|
||||
{
|
||||
if ( isdefined( level.shark_functions ) )
|
||||
{
|
||||
if ( issubstr( self.model, "shark" ) )
|
||||
{
|
||||
self [[ level.shark_functions["stop"] ]]();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
self endon( "killanimscript" );
|
||||
self clearanim( %body, 0.2 );
|
||||
self setanim( %dog_idle_knob );
|
||||
thread waitforstatechange();
|
||||
self.dognextidletwitchtime = getdognexttwitchtime();
|
||||
self.moveanimtype = "walk";
|
||||
self.idleanimtype = undefined;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
if ( self isdogbeingdriven() )
|
||||
{
|
||||
dodrivenidle();
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( isdefined( self.specialidleanim ) )
|
||||
{
|
||||
dospecialidle();
|
||||
continue;
|
||||
}
|
||||
|
||||
var_0 = dogstop_getnode();
|
||||
|
||||
if ( !self isdogbeingdriven() && ( !isdefined( self.bidlelooking ) || !self.bidlelooking ) )
|
||||
{
|
||||
var_1 = 262144;
|
||||
var_2 = self.doghandler;
|
||||
|
||||
if ( isdefined( var_2 ) )
|
||||
{
|
||||
if ( isdefined( var_2.node ) && isdefined( var_0 ) )
|
||||
{
|
||||
var_3 = var_2.origin - self.origin;
|
||||
turntoangle( vectortoyaw( var_3 ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
var_4 = 65536;
|
||||
var_5 = 6400;
|
||||
var_6 = distancesquared( self.origin, var_2.origin );
|
||||
|
||||
if ( var_6 < var_5 )
|
||||
turntoangle( var_2.angles[1] );
|
||||
else if ( var_6 < var_4 )
|
||||
{
|
||||
var_3 = var_2.origin - self.origin;
|
||||
var_7 = vectortoyaw( var_3 );
|
||||
turntoangle( var_7 );
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ( ( !isdefined( var_0 ) || !issubstr( var_0.type, "Cover" ) || isdefined( self.favoriteenemy ) ) && isdefined( self.enemy ) && isalive( self.enemy ) && ( self seerecently( self.enemy, 5 ) || distancesquared( self.origin, self.enemy.origin ) < var_1 ) )
|
||||
{
|
||||
var_8 = self.enemy.origin - self.origin;
|
||||
turntoangle( vectortoyaw( var_8 ) );
|
||||
}
|
||||
else if ( isdefined( var_0 ) && shouldfacenodedir( var_0 ) )
|
||||
turntoangle( var_0.angles[1] );
|
||||
|
||||
self orientmode( "face angle", self.angles[1] );
|
||||
}
|
||||
|
||||
if ( isdefined( self.customidleanimset ) )
|
||||
{
|
||||
stoplookatidle();
|
||||
docustomidle();
|
||||
continue;
|
||||
}
|
||||
|
||||
var_9 = getdefaultidlestate();
|
||||
|
||||
if ( var_9 == "casualidle" )
|
||||
{
|
||||
if ( isdefined( self.idlelookattargets ) )
|
||||
dolookatidle();
|
||||
else
|
||||
{
|
||||
stoplookatidle();
|
||||
playidleanim( "casualidle", getdogstopanim( "casualidle" ), 0, 0.5, 2 );
|
||||
}
|
||||
}
|
||||
else if ( var_9 == "attackidle" )
|
||||
{
|
||||
if ( isdefined( self.idlelookattargets ) && isdefined( self.aggresivelookat ) )
|
||||
dolookatidle();
|
||||
else
|
||||
{
|
||||
stopidlesound();
|
||||
stoplookatidle();
|
||||
var_10 = !isdefined( self.enemy ) || distance2dsquared( self.origin, self.enemy.origin ) > 589824;
|
||||
|
||||
if ( var_10 && gettime() > self.dognextidletwitchtime )
|
||||
{
|
||||
var_11 = chooseattackidle();
|
||||
playidleanim( "attackidle", getdogstopanim( var_11 ), 0, 0.2, -1 );
|
||||
self.dognextidletwitchtime = getdognexttwitchtime();
|
||||
}
|
||||
else
|
||||
playidleanim( "attackidle", getdogstopanim( "attackidle" ), 0, 0.5, 0.5 );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
stopidlesound();
|
||||
stoplookatidle();
|
||||
playidleanim( var_9, getdogstopanim( var_9 ), 0, 0.5, 2 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
end_script()
|
||||
{
|
||||
if ( isdefined( self.prevturnrate ) )
|
||||
{
|
||||
self.turnrate = self.prevturnrate;
|
||||
self.prevturnrate = undefined;
|
||||
}
|
||||
|
||||
self.dogturnadjust = undefined;
|
||||
self.dogturnrate = undefined;
|
||||
self.dognextidletwitchtime = undefined;
|
||||
self.currenttrackingyawspeed = undefined;
|
||||
self.currenttrackingyaw = undefined;
|
||||
stopidlesound();
|
||||
stoplookatidle();
|
||||
}
|
||||
|
||||
playidleanim( var_0, var_1, var_2, var_3, var_4 )
|
||||
{
|
||||
self endon( "killIdleAnim" );
|
||||
|
||||
if ( isdefined( self.idleanimtype ) && self.idleanimtype != var_0 )
|
||||
{
|
||||
var_5 = getdogstoptransitionanim( self.idleanimtype, var_0 );
|
||||
|
||||
if ( isdefined( var_5 ) )
|
||||
{
|
||||
self setflaggedanimknobrestart( "dog_idle_transition", var_5, 1, 0.2, self.animplaybackrate );
|
||||
animscripts\shared::donotetracks( "dog_idle_transition" );
|
||||
var_3 = 0.2;
|
||||
}
|
||||
}
|
||||
|
||||
self.idleanimtype = var_0;
|
||||
|
||||
if ( var_2 )
|
||||
self setflaggedanimknobrestart( "dog_idle", var_1, 1, var_3, self.animplaybackrate );
|
||||
else
|
||||
self setflaggedanimknob( "dog_idle", var_1, 1, var_3, self.animplaybackrate );
|
||||
|
||||
if ( var_4 > 0 )
|
||||
animscripts\notetracks::donotetracksfortime( var_4, "dog_idle" );
|
||||
else
|
||||
animscripts\shared::donotetracks( "dog_idle" );
|
||||
}
|
||||
|
||||
waitforstatechange()
|
||||
{
|
||||
self endon( "killanimscript" );
|
||||
var_0 = self isdogbeingdriven();
|
||||
var_1 = self.defaultidlestateoverride;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
var_2 = self isdogbeingdriven();
|
||||
|
||||
if ( var_2 != var_0 )
|
||||
{
|
||||
killidleanim();
|
||||
var_0 = var_2;
|
||||
self orientmode( "face angle", self.angles[1] );
|
||||
}
|
||||
else if ( animscripts\dog\dog_move::aredifferent( self.defaultidlestateoverride, var_1 ) )
|
||||
{
|
||||
killidleanim();
|
||||
var_1 = self.defaultidlestateoverride;
|
||||
}
|
||||
|
||||
wait 0.1;
|
||||
}
|
||||
}
|
||||
|
||||
killidleanim()
|
||||
{
|
||||
self notify( "killIdleAnim" );
|
||||
stoplookatidle();
|
||||
}
|
||||
|
||||
shouldfacenodedir( var_0 )
|
||||
{
|
||||
return var_0.type == "Guard" || var_0.type == "Exposed" || issubstr( var_0.type, "Cover " );
|
||||
}
|
||||
|
||||
getturnanim( var_0 )
|
||||
{
|
||||
var_1 = getdefaultidlestate();
|
||||
|
||||
if ( var_1 == "casualidle" || var_1 == "sniffidle" )
|
||||
{
|
||||
if ( var_0 < -135 || var_0 > 135 )
|
||||
return getdogstopanim( "casual_turn_180" );
|
||||
else if ( var_0 < 0 )
|
||||
return getdogstopanim( "casual_turn_right" );
|
||||
else
|
||||
return getdogstopanim( "casual_turn_left" );
|
||||
}
|
||||
else if ( var_0 < -135 || var_0 > 135 )
|
||||
return getdogstopanim( "attack_turn_180" );
|
||||
else if ( var_0 < 0 )
|
||||
return getdogstopanim( "attack_turn_right" );
|
||||
else
|
||||
return getdogstopanim( "attack_turn_left" );
|
||||
}
|
||||
|
||||
handledogturnnotetracks( var_0 )
|
||||
{
|
||||
if ( var_0 == "turn_begin" )
|
||||
{
|
||||
var_1 = angleclamp180( self.angles[1] + self.dogturnadjust );
|
||||
self.dogturnadjust = undefined;
|
||||
self.prevturnrate = self.turnrate;
|
||||
self.turnrate = self.dogturnrate;
|
||||
self.dogturnrate = undefined;
|
||||
self orientmode( "face angle", var_1 );
|
||||
}
|
||||
else if ( var_0 == "turn_end" )
|
||||
{
|
||||
self.turnrate = self.prevturnrate;
|
||||
self.prevturnrate = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
turntoangle( var_0, var_1 )
|
||||
{
|
||||
self endon( "killIdleAnim" );
|
||||
var_2 = self.angles[1];
|
||||
var_3 = angleclamp180( var_0 - var_2 );
|
||||
|
||||
if ( -0.5 < var_3 && var_3 < 0.5 )
|
||||
return;
|
||||
|
||||
if ( -15 < var_3 && var_3 < 15 )
|
||||
{
|
||||
rotatetoangle( var_0, 2 );
|
||||
return;
|
||||
}
|
||||
|
||||
stopidlesound();
|
||||
var_4 = getturnanim( var_3 );
|
||||
var_5 = getanimlength( var_4 );
|
||||
var_6 = getangledelta( var_4 );
|
||||
var_7 = 0.2;
|
||||
|
||||
if ( var_5 < 0.7 )
|
||||
var_7 = 0.05;
|
||||
|
||||
if ( isdefined( var_1 ) && var_1 )
|
||||
self animmode( "zonly_physics" );
|
||||
else
|
||||
self animmode( "angle deltas" );
|
||||
|
||||
self setanim( %dog_idle_knob, 1, var_7 );
|
||||
self setflaggedanimknobrestart( "dog_turn", var_4, 1, var_7 );
|
||||
|
||||
if ( animhasnotetrack( var_4, "turn_begin" ) && animhasnotetrack( var_4, "turn_end" ) )
|
||||
{
|
||||
var_8 = getnotetracktimes( var_4, "turn_begin" );
|
||||
var_9 = getnotetracktimes( var_4, "turn_end" );
|
||||
var_10 = ( var_9[0] - var_8[0] ) * var_5;
|
||||
self.dogturnadjust = angleclamp180( var_3 - var_6 );
|
||||
self.dogturnrate = max( abs( self.dogturnadjust ) / var_10 / 1000, 0.01 );
|
||||
self orientmode( "face angle", self.angles[1] );
|
||||
animscripts\shared::donotetracks( "dog_turn", ::handledogturnnotetracks );
|
||||
}
|
||||
else
|
||||
{
|
||||
self.prevturnrate = self.turnrate;
|
||||
self.turnrate = max( abs( angleclamp180( var_3 - var_6 ) ) / var_5 / 1000, 0.01 );
|
||||
self orientmode( "face angle", angleclamp180( var_0 - var_6 ) );
|
||||
animscripts\shared::donotetracks( "dog_turn" );
|
||||
self.turnrate = self.prevturnrate;
|
||||
self.prevturnrate = undefined;
|
||||
}
|
||||
|
||||
self clearanim( var_4, 0.2 );
|
||||
self animmode( "none" );
|
||||
}
|
||||
|
||||
rotatetoangle( var_0, var_1 )
|
||||
{
|
||||
self orientmode( "face angle", var_0 );
|
||||
|
||||
while ( abs( angleclamp180( var_0 - self.angles[1] ) ) > var_1 )
|
||||
wait 0.1;
|
||||
}
|
||||
|
||||
shouldcoveridle()
|
||||
{
|
||||
var_0 = dogstop_getnode();
|
||||
|
||||
if ( isdefined( var_0 ) && issubstr( var_0.type, "Cover" ) )
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
chooseattackidle()
|
||||
{
|
||||
var_0 = [ "attackidle_twitch_1", "attackidle_twitch_2" ];
|
||||
var_1 = [ 1, 1 ];
|
||||
|
||||
if ( !isdefined( self.script_nobark ) || !self.script_nobark )
|
||||
{
|
||||
var_2 = var_0.size;
|
||||
var_0[var_2] = "attackidle_bark";
|
||||
var_1[var_2] = 4;
|
||||
}
|
||||
|
||||
var_3 = 0;
|
||||
|
||||
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
|
||||
var_3 = var_3 + var_1[var_2];
|
||||
|
||||
var_4 = randomint( var_3 );
|
||||
var_5 = 0;
|
||||
|
||||
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
|
||||
{
|
||||
var_5 = var_5 + var_1[var_2];
|
||||
|
||||
if ( var_4 < var_5 )
|
||||
return var_0[var_2];
|
||||
}
|
||||
}
|
||||
|
||||
dodrivenidle()
|
||||
{
|
||||
playidlesound( self.customidlesound );
|
||||
playidleanim( "sneakstandidle", getdogstopanim( "sneakstandidle" ), 0, 0.5, -1 );
|
||||
}
|
||||
|
||||
dospecialidle()
|
||||
{
|
||||
if ( isarray( self.specialidleanim ) )
|
||||
var_0 = self.specialidleanim[randomint( self.specialidleanim.size )];
|
||||
else
|
||||
var_0 = self.specialidleanim;
|
||||
|
||||
playidlesound( self.customidlesound );
|
||||
playidleanim( "specialidle", var_0, 0, 0.5, -1 );
|
||||
}
|
||||
|
||||
docustomidle()
|
||||
{
|
||||
if ( isarray( self.customidleanimset ) )
|
||||
{
|
||||
if ( isdefined( self.customidleanimweights ) )
|
||||
var_0 = animscripts\utility::anim_array( self.customidleanimset, self.customidleanimweights );
|
||||
else
|
||||
var_0 = self.customidleanimset[randomint( self.customidleanimset.size )];
|
||||
}
|
||||
else
|
||||
var_0 = self.customidleanimset;
|
||||
|
||||
playidlesound( self.customidlesound );
|
||||
playidleanim( "customidle", var_0, 0, 0.5, -1 );
|
||||
}
|
||||
|
||||
dolookatidle()
|
||||
{
|
||||
if ( !isdefined( self.bidlelooking ) || !self.bidlelooking )
|
||||
{
|
||||
self.bidlelooking = 1;
|
||||
thread lookatidleupdate();
|
||||
}
|
||||
|
||||
wait 0.5;
|
||||
}
|
||||
|
||||
stoplookatidle()
|
||||
{
|
||||
if ( !isdefined( self.bidlelooking ) || !self.bidlelooking )
|
||||
return;
|
||||
|
||||
self.bidlelooking = undefined;
|
||||
self.idletrackloop = undefined;
|
||||
self notify( "endIdleLookAt" );
|
||||
self clearanim( %look_2, 1 );
|
||||
self clearanim( %look_4, 1 );
|
||||
self clearanim( %look_6, 1 );
|
||||
self clearanim( %look_8, 1 );
|
||||
}
|
||||
|
||||
lookatidleupdate()
|
||||
{
|
||||
self endon( "killanimscript" );
|
||||
self endon( "endIdleLookAt" );
|
||||
|
||||
while ( isdefined( self.idlelookattargets ) && isarray( self.idlelookattargets ) && self.idlelookattargets.size > 0 )
|
||||
{
|
||||
var_0 = getlookattarget( self.lookattarget );
|
||||
self.lookattarget = var_0;
|
||||
|
||||
if ( !isdefined( self.idletrackloop ) )
|
||||
thread idletrackloop();
|
||||
|
||||
var_1 = 3 + randomfloat( 3 );
|
||||
wait( var_1 );
|
||||
}
|
||||
|
||||
stoplookatidle();
|
||||
}
|
||||
|
||||
getlookattarget( var_0 )
|
||||
{
|
||||
if ( isdefined( self.alwayslookatfirsttarget ) && self.alwayslookatfirsttarget && self.idlelookattargets.size > 0 )
|
||||
return self.idlelookattargets[0];
|
||||
|
||||
var_1 = isdefined( var_0 );
|
||||
|
||||
if ( self.idlelookattargets.size == 1 )
|
||||
{
|
||||
if ( var_1 )
|
||||
return undefined;
|
||||
else
|
||||
return self.idlelookattargets[0];
|
||||
}
|
||||
|
||||
if ( var_1 )
|
||||
{
|
||||
var_2 = randomint( 100 );
|
||||
|
||||
if ( var_2 < 33 )
|
||||
return undefined;
|
||||
}
|
||||
|
||||
var_3 = self.idlelookattargets;
|
||||
var_4 = [];
|
||||
var_5 = 0;
|
||||
var_6 = !var_1;
|
||||
|
||||
for ( var_7 = 0; var_7 < var_3.size; var_7++ )
|
||||
{
|
||||
if ( !var_6 && var_3[var_7] == var_0 )
|
||||
{
|
||||
var_8 = var_3.size - 1;
|
||||
|
||||
if ( var_7 != var_8 )
|
||||
var_3[var_7] = var_3[var_8];
|
||||
|
||||
var_3[var_8] = undefined;
|
||||
var_6 = 1;
|
||||
|
||||
if ( var_7 == var_8 )
|
||||
break;
|
||||
}
|
||||
|
||||
var_9 = distance2dsquared( self.origin, var_3[var_7].origin );
|
||||
var_4[var_7] = 1 / var_9;
|
||||
var_5 = var_5 + var_4[var_7];
|
||||
}
|
||||
|
||||
var_10 = randomfloat( var_5 );
|
||||
var_11 = 0;
|
||||
|
||||
for ( var_7 = 0; var_7 < var_3.size; var_7++ )
|
||||
{
|
||||
var_11 = var_11 + var_4[var_7];
|
||||
|
||||
if ( var_10 < var_11 )
|
||||
return var_3[var_7];
|
||||
}
|
||||
}
|
||||
|
||||
idletrackloop()
|
||||
{
|
||||
self endon( "killanimscript" );
|
||||
self endon( "endIdleLookAt" );
|
||||
self.idletrackloop = 1;
|
||||
self clearanim( %dog_idle_knob, 0.2 );
|
||||
self setanimknob( getdogstopanimbase(), 1, 0.5 );
|
||||
self setanimknoblimited( getdogstopanimlook( "2" ), 1, 0 );
|
||||
self setanimknoblimited( getdogstopanimlook( "4" ), 1, 0 );
|
||||
self setanimknoblimited( getdogstopanimlook( "6" ), 1, 0 );
|
||||
self setanimknoblimited( getdogstopanimlook( "8" ), 1, 0 );
|
||||
var_0 = 90;
|
||||
var_1 = -100;
|
||||
var_2 = -25;
|
||||
var_3 = 25;
|
||||
self.currenttrackingyaw = 0;
|
||||
self.currenttrackingyawspeed = 0;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
var_4 = self geteye();
|
||||
|
||||
if ( isdefined( self.lookattarget ) )
|
||||
{
|
||||
var_5 = self.lookattarget geteye();
|
||||
var_6 = var_5 - var_4;
|
||||
var_7 = vectortoangles( var_6 );
|
||||
}
|
||||
else
|
||||
var_7 = self.angles;
|
||||
|
||||
var_8 = angleclamp180( var_7[1] - self.angles[1] );
|
||||
var_9 = angleclamp180( var_7[0] - self.angles[0] );
|
||||
|
||||
if ( var_8 > var_0 || var_8 < var_1 )
|
||||
{
|
||||
self.currenttrackingyaw = 0;
|
||||
self.currenttrackingyawspeed = 0;
|
||||
turntoangle( self.angles[1] + var_8 * 0.75 );
|
||||
self setanimknob( getdogstopanimbase(), 1, 0.1 );
|
||||
continue;
|
||||
}
|
||||
|
||||
var_10 = calctrackingyaw( var_8, self.currenttrackingyaw, self.currenttrackingyawspeed );
|
||||
self.currenttrackingyaw = var_10;
|
||||
var_11 = 0;
|
||||
var_12 = 0;
|
||||
var_13 = 0;
|
||||
var_14 = 0;
|
||||
|
||||
if ( var_10 > 0 )
|
||||
var_11 = clamp( var_10 / var_0, 0, 1 );
|
||||
else
|
||||
var_12 = clamp( var_10 / var_1, 0, 1 );
|
||||
|
||||
if ( var_9 < 0 )
|
||||
var_13 = clamp( var_9 / var_2, 0, 1 );
|
||||
else
|
||||
var_14 = clamp( var_9 / var_3, 0, 1 );
|
||||
|
||||
self setanimlimited( %look_2, var_14, 1 );
|
||||
self setanimlimited( %look_4, var_11, 0.1 );
|
||||
self setanimlimited( %look_6, var_12, 0.1 );
|
||||
self setanimlimited( %look_8, var_13, 1 );
|
||||
wait 0.05;
|
||||
}
|
||||
}
|
||||
|
||||
calctrackingyaw( var_0, var_1, var_2 )
|
||||
{
|
||||
var_3 = 90;
|
||||
var_4 = -100;
|
||||
var_5 = 1;
|
||||
var_6 = 0.5;
|
||||
var_7 = 6;
|
||||
var_8 = clamp( var_0, var_4, var_3 );
|
||||
var_9 = angleclamp180( var_8 - var_1 );
|
||||
|
||||
if ( var_8 > var_1 )
|
||||
{
|
||||
if ( var_2 >= 0 && !needtodecelforarrival( var_9, var_2, var_6 ) )
|
||||
var_10 = var_2 + var_5;
|
||||
else if ( var_2 >= 0 )
|
||||
var_10 = var_2 - var_6;
|
||||
else
|
||||
var_10 = var_2 + var_6;
|
||||
}
|
||||
else if ( var_2 <= 0 && !needtodecelforarrival( var_9, var_2, var_6 ) )
|
||||
var_10 = var_2 - var_5;
|
||||
else if ( var_2 <= 0 )
|
||||
var_10 = var_2 + var_6;
|
||||
else
|
||||
var_10 = var_2 - var_6;
|
||||
|
||||
var_10 = clamp( var_10, -1 * var_7, var_7 );
|
||||
|
||||
if ( var_8 >= var_1 && var_1 + var_10 > var_8 )
|
||||
var_10 = var_8 - var_1;
|
||||
else if ( var_8 <= var_1 && var_1 + var_10 < var_8 )
|
||||
var_10 = var_8 - var_1;
|
||||
|
||||
var_11 = var_1 + var_10;
|
||||
self.currenttrackingyawspeed = var_10;
|
||||
return var_11;
|
||||
}
|
||||
|
||||
needtodecelforarrival( var_0, var_1, var_2 )
|
||||
{
|
||||
if ( var_1 == 0 )
|
||||
return 0;
|
||||
|
||||
var_3 = abs( var_0 );
|
||||
var_4 = abs( var_1 );
|
||||
var_2 = abs( var_2 );
|
||||
|
||||
while ( var_3 > 0 )
|
||||
{
|
||||
var_3 = var_3 - var_4;
|
||||
var_4 = var_4 - var_2;
|
||||
|
||||
if ( var_4 < 0 )
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
dogstop_getnode()
|
||||
{
|
||||
if ( isdefined( self.node ) )
|
||||
return self.node;
|
||||
|
||||
return self.prevnode;
|
||||
}
|
||||
|
||||
getdefaultidlestate( var_0 )
|
||||
{
|
||||
if ( isdefined( self.defaultidlestateoverride ) )
|
||||
return self.defaultidlestateoverride;
|
||||
|
||||
var_1 = isdefined( self.enemy ) && isalive( self.enemy );
|
||||
var_2 = var_1 && distancesquared( self.origin, self.enemy.origin ) < 1000000 && ( isdefined( self.favoriteenemy ) || self seerecently( self.enemy, 5 ) );
|
||||
var_3 = dogstop_getnode();
|
||||
|
||||
if ( isdefined( self.aggresivelookat ) )
|
||||
return "attackidle";
|
||||
|
||||
if ( !isdefined( var_0 ) )
|
||||
var_0 = 1;
|
||||
|
||||
if ( isdefined( var_3 ) && ( !var_0 || distance( self.origin, var_3.origin ) <= 32 ) )
|
||||
{
|
||||
if ( var_3.type == "Guard" )
|
||||
{
|
||||
if ( var_2 )
|
||||
return "attackidle";
|
||||
else
|
||||
return "alertidle";
|
||||
}
|
||||
else if ( issubstr( var_3.type, "Cover" ) )
|
||||
return "sneakidle";
|
||||
else if ( var_1 )
|
||||
{
|
||||
if ( var_2 )
|
||||
return "attackidle";
|
||||
else
|
||||
return "alertidle";
|
||||
}
|
||||
}
|
||||
|
||||
if ( var_2 )
|
||||
return "attackidle";
|
||||
|
||||
if ( animscripts\dog\dog_move::shouldsniff() )
|
||||
return "sniffidle";
|
||||
|
||||
return "casualidle";
|
||||
}
|
||||
|
||||
should_growl()
|
||||
{
|
||||
if ( isdefined( self.script_growl ) )
|
||||
return 1;
|
||||
|
||||
if ( !isdefined( self.enemy ) )
|
||||
return 0;
|
||||
|
||||
if ( !isalive( self.enemy ) )
|
||||
return 1;
|
||||
|
||||
return !self cansee( self.enemy );
|
||||
}
|
||||
|
||||
lookattarget( var_0 )
|
||||
{
|
||||
self endon( "killanimscript" );
|
||||
self endon( "stop tracking" );
|
||||
self clearanim( %german_shepherd_look_2, 0 );
|
||||
self clearanim( %german_shepherd_look_4, 0 );
|
||||
self clearanim( %german_shepherd_look_6, 0 );
|
||||
self clearanim( %german_shepherd_look_8, 0 );
|
||||
self setdefaultaimlimits();
|
||||
self.rightaimlimit = 90;
|
||||
self.leftaimlimit = -90;
|
||||
self setanimlimited( anim.doglookpose[var_0][2], 1, 0 );
|
||||
self setanimlimited( anim.doglookpose[var_0][4], 1, 0 );
|
||||
self setanimlimited( anim.doglookpose[var_0][6], 1, 0 );
|
||||
self setanimlimited( anim.doglookpose[var_0][8], 1, 0 );
|
||||
animscripts\track::setanimaimweight( 1, 0.2 );
|
||||
animscripts\track::trackloop( %german_shepherd_look_2, %german_shepherd_look_4, %german_shepherd_look_6, %german_shepherd_look_8 );
|
||||
}
|
||||
|
||||
playidlesound( var_0 )
|
||||
{
|
||||
if ( !animscripts\dog\dog_move::aredifferent( self.idlesound, var_0 ) )
|
||||
return;
|
||||
|
||||
stopidlesound();
|
||||
|
||||
if ( isdefined( var_0 ) )
|
||||
thread loopidlesound( var_0 );
|
||||
}
|
||||
|
||||
loopidlesound( var_0 )
|
||||
{
|
||||
self endon( "killanimscript" );
|
||||
var_1 = spawn( "script_origin", self.origin );
|
||||
var_1.angles = self.angles;
|
||||
var_1 linkto( self );
|
||||
self.idlesoundorigin = var_1;
|
||||
self.idlesound = var_0;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
var_1 playsound( var_0, "dog_idle_sound" );
|
||||
var_2 = idlesound_waitfordoneordeath( var_1, "dog_idle_sound" );
|
||||
|
||||
if ( !isdefined( var_2 ) )
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
idlesound_waitfordoneordeath( var_0, var_1 )
|
||||
{
|
||||
self endon( "death" );
|
||||
var_0 endon( "death" );
|
||||
var_0 waittill( var_1 );
|
||||
return 1;
|
||||
}
|
||||
|
||||
stopidlesound()
|
||||
{
|
||||
if ( isdefined( self.idlesoundorigin ) )
|
||||
{
|
||||
if ( self.idlesoundorigin iswaitingonsound() )
|
||||
{
|
||||
self.idlesoundorigin stopsounds();
|
||||
wait 0.05;
|
||||
}
|
||||
|
||||
self.idlesoundorigin delete();
|
||||
self.idlesoundorigin = undefined;
|
||||
self.idlesound = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
getdognexttwitchtime()
|
||||
{
|
||||
if ( isdefined( self.script_nobark ) && self.script_nobark )
|
||||
return gettime() + 4000 + randomint( 3000 );
|
||||
|
||||
return gettime() + 1000 + randomint( 1000 );
|
||||
}
|
||||
|
||||
getdogstopanimbase()
|
||||
{
|
||||
if ( isdefined( self.aggresivelookat ) )
|
||||
return getdogstopanim( "attackidle_base" );
|
||||
else
|
||||
return getdogstopanim( "casualidle_base" );
|
||||
}
|
||||
|
||||
getdogstopanimlook( var_0 )
|
||||
{
|
||||
if ( isdefined( self.aggresivelookat ) )
|
||||
return getdogstopanim( "attackidle_look_" + var_0 );
|
||||
else
|
||||
return getdogstopanim( "casualidle_look_" + var_0 );
|
||||
}
|
||||
|
||||
getdogstopanim( var_0 )
|
||||
{
|
||||
var_1 = animscripts\utility::lookupdoganim( "stop", var_0 );
|
||||
return var_1;
|
||||
}
|
||||
|
||||
getdogstoptransitionanim( var_0, var_1 )
|
||||
{
|
||||
var_2 = animscripts\utility::lookupdoganim( "stop", "transition" );
|
||||
|
||||
if ( isdefined( var_2[var_0] ) && isdefined( var_2[var_0][var_1] ) )
|
||||
return var_2[var_0][var_1];
|
||||
|
||||
return undefined;
|
||||
}
|
||||
|
||||
initdogarchetype_stop()
|
||||
{
|
||||
var_0 = [];
|
||||
var_0["attackidle"] = %iw6_dog_attackidle;
|
||||
var_0["attack_turn_left"] = %iw6_dog_attackidle_turn_4;
|
||||
var_0["attack_turn_right"] = %iw6_dog_attackidle_turn_6;
|
||||
var_0["attack_turn_180"] = %iw6_dog_attackidle_turn_2;
|
||||
var_0["attackidle_base"] = %iw6_dog_attackidle_base;
|
||||
var_0["attackidle_look_2"] = %iw6_dog_attackidle_2;
|
||||
var_0["attackidle_look_4"] = %iw6_dog_attackidle_4;
|
||||
var_0["attackidle_look_6"] = %iw6_dog_attackidle_6;
|
||||
var_0["attackidle_look_8"] = %iw6_dog_attackidle_8;
|
||||
var_0["alertidle"] = %iw6_dog_alertidle;
|
||||
var_0["attackidle_bark"] = %iw6_dog_attackidle_bark;
|
||||
var_0["attackidle_twitch_1"] = %iw6_dog_attackidle_twitch_1;
|
||||
var_0["attackidle_twitch_2"] = %iw6_dog_attackidle_twitch_2;
|
||||
var_0["casualidle"] = %iw6_dog_casualidle;
|
||||
var_0["casual_turn_left"] = %iw6_dog_casualidle_turn_4;
|
||||
var_0["casual_turn_right"] = %iw6_dog_casualidle_turn_6;
|
||||
var_0["casual_turn_180"] = %iw6_dog_casualidle_turn_2;
|
||||
var_0["casualidle_base"] = %iw6_dog_casualidle_base;
|
||||
var_0["casualidle_look_2"] = %iw6_dog_casualidle_2;
|
||||
var_0["casualidle_look_4"] = %iw6_dog_casualidle_4;
|
||||
var_0["casualidle_look_6"] = %iw6_dog_casualidle_6;
|
||||
var_0["casualidle_look_8"] = %iw6_dog_casualidle_8;
|
||||
var_0["sneakstandidle"] = %iw6_dog_sneak_stand_idle;
|
||||
var_0["sneakidle"] = %iw6_dog_sneakidle;
|
||||
var_0["sniffidle"] = %iw6_dog_sniff_idle;
|
||||
var_0["transition"] = [];
|
||||
var_0["transition"]["casualidle"] = [];
|
||||
var_0["transition"]["casualidle"]["sneakidle"] = %iw6_dog_idle_2_sneak_idle;
|
||||
var_0["transition"]["casualidle"]["alertidle"] = %iw6_dog_idle_2_alert_idle;
|
||||
var_0["transition"]["casualidle"]["attackidle"] = %iw6_dog_idle_2_alert_idle;
|
||||
var_0["transition"]["alertidle"] = [];
|
||||
var_0["transition"]["alertidle"]["casualidle"] = %iw6_dog_alert_2_casual_idle;
|
||||
var_0["transition"]["alertidle"]["sneakidle"] = %iw6_dog_idle_2_sneak_idle;
|
||||
var_0["transition"]["attackidle"] = [];
|
||||
var_0["transition"]["attackidle"]["casualidle"] = %iw6_dog_alert_2_casual_idle;
|
||||
var_0["transition"]["attackidle"]["sneakidle"] = %iw6_dog_idle_2_sneak_idle;
|
||||
var_0["transition"]["sneakidle"] = [];
|
||||
var_0["transition"]["sneakidle"]["casualidle"] = %iw6_dog_sneak_2_casual_idle;
|
||||
var_0["transition"]["sneakidle"]["alertidle"] = %iw6_dog_sneak_2_casual_idle;
|
||||
var_0["transition"]["sneakidle"]["attackidle"] = %iw6_dog_sneak_2_casual_idle;
|
||||
anim.archetypes["dog"]["stop"] = var_0;
|
||||
}
|
11
animscripts/dog/dog_vest_init.gsc
Normal file
11
animscripts/dog/dog_vest_init.gsc
Normal file
@ -0,0 +1,11 @@
|
||||
// IW6 GSC SOURCE
|
||||
// Generated by https://github.com/xensik/gsc-tool
|
||||
|
||||
initdogvestanimations()
|
||||
{
|
||||
if ( isdefined( anim.notfirsttimedogvests ) )
|
||||
return;
|
||||
|
||||
anim.notfirsttimedogvests = 1;
|
||||
animscripts\dog\dog_init::initdoganimations();
|
||||
}
|
Reference in New Issue
Block a user