IW4-Dump-Files/animscripts/dog/dog_init.gsc

142 lines
4.8 KiB
Plaintext

#using_animtree( "dog" );
main()
{
self useAnimTree( #animtree );
initDogAnimations();
animscripts\init::firstInit();
self.ignoreSuppression = true;
self.newEnemyReactionDistSq = 0;
self.chatInitialized = false;
self.noDodgeMove = true;
self.root_anim = %root;
self.meleeAttackDist = 0;
self thread setMeleeAttackDist();
self.a = spawnStruct();
self.a.pose = "stand"; // to use DoNoteTracks()
self.a.nextStandingHitDying = false; // to allow dogs to use bullet shield
self.a.movement = "run";
animscripts\init::set_anim_playback_rate();
self.suppressionThreshold = 1;
self.disableArrivals = false;
self.stopAnimDistSq = anim.dogStoppingDistSq;
self.useChokePoints = false;
self.turnRate = 0.2;
self thread animscripts\combat_utility::monitorFlash();
self.pathEnemyFightDist = 512;
self setTalkToSpecies( "dog" );
self.health = int( anim.dog_health * self.health );
}
setMeleeAttackDist()
{
self endon( "death" );
while ( 1 )
{
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 = true;
// [{+melee}] Melee the dog right when it bites to grab its throat.
precachestring( &"SCRIPT_PLATFORM_DOG_DEATH_DO_NOTHING" );
// [{+melee}] Melee the dog before it bites to grab its throat.
precachestring( &"SCRIPT_PLATFORM_DOG_DEATH_TOO_LATE" );
// [{+melee}] Wait for the dog to bite to grab its throat.
precachestring( &"SCRIPT_PLATFORM_DOG_DEATH_TOO_SOON" );
// [{+melee}]
precachestring( &"SCRIPT_PLATFORM_DOG_HINT" );
// Watch for the ^3[{+melee}]^7 hint to grab a dog.
precachestring( &"NEW_DOG_DEATH_DO_NOTHING_ALT" );
// Too late. Watch for the ^3[{+melee}]^7 hint to grab a dog.
precachestring( &"NEW_DOG_DEATH_TOO_LATE_ALT" );
// Too early. Wait for the ^3[{+melee}]^7 hint to grab a dog.
precachestring( &"NEW_DOG_DEATH_TOO_SOON_ALT" );
}
// Initialization that should happen once per level
if ( isDefined( anim.NotFirstTimeDogs ) )// Use this to trigger the first init
return;
precacheShader( "hud_dog_melee" );
anim.NotFirstTimeDogs = 1;
anim.dogStoppingDistSq = lengthSquared( getmovedelta( %german_shepherd_run_stop, 0, 1 ) * 1.2 ) ;
anim.dogStartMoveDist = length( getmovedelta( %german_shepherd_run_start, 0, 1 ) );
// notetime = getNotetrackTimes( %german_shepherd_attack_player, "dog_melee" );
// anim.dogAttackPlayerDist = length( getmovedelta( %german_shepherd_attack_player, 0, notetime[ 0 ] ) );
anim.dogAttackPlayerDist = 102;// hard code for now, above is not accurate.
offset = getstartorigin( ( 0, 0, 0 ), ( 0, 0, 0 ), %german_shepherd_attack_AI_01_start_a );
anim.dogAttackAIDist = length( offset );
anim.dogTraverseAnims = [];
anim.dogTraverseAnims[ "wallhop" ] = %german_shepherd_run_jump_40;
anim.dogTraverseAnims[ "window_40" ] = %german_shepherd_run_jump_window_40;
anim.dogTraverseAnims[ "jump_down_40" ] = %german_shepherd_traverse_down_40;
anim.dogTraverseAnims[ "jump_up_40" ] = %german_shepherd_traverse_up_40;
anim.dogTraverseAnims[ "jump_up_80" ] = %german_shepherd_traverse_up_80;
// Dog start move animations
// number indexes correspond to keyboard number directions
anim.dogStartMoveAngles[ 8 ] = 0;
anim.dogStartMoveAngles[ 6 ] = 90;
anim.dogStartMoveAngles[ 4 ] = -90;
anim.dogStartMoveAngles[ 3 ] = 180;
anim.dogStartMoveAngles[ 1 ] = -180;
anim.dogStartMoveAnim[8] = %german_shepherd_run_start;
anim.dogStartMoveAnim[6] = %german_shepherd_run_start_L;
anim.dogStartMoveAnim[4] = %german_shepherd_run_start_R;
anim.dogStartMoveAnim[3] = %german_shepherd_run_start_180_L;
anim.dogStartMoveAnim[1] = %german_shepherd_run_start_180_R;
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;
// effects used by dog
level._effect[ "dog_bite_blood" ] = loadfx( "impacts/deathfx_dogbite" );
level._effect[ "deathfx_bloodpool" ] = loadfx( "impacts/deathfx_bloodpool_view" );
// setup random timings for dogs attacking the player
slices = 5;
array = [];
for ( i = 0; i <= slices; i++ )
{
array[ array.size ] = i / slices;
}
level.dog_melee_index = 0;
level.dog_melee_timing_array = maps\_utility::array_randomize( array );
setdvar( "friendlySaveFromDog", "0" );
}