6arelyFuture ef3d077deb
Some checks failed
lint / Lint on Linux (push) Failing after 9s
build: try to fix this
2024-09-01 12:17:11 +02:00

1500 lines
47 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
#using_animtree("generic_human");
init_animset_pain()
{
var_0 = [];
var_0["damage_shield_crouch"] = %exposed_crouch_extendedpaina;
var_0["damage_shield_pain_array"] = [ %stand_exposed_extendedpain_chest, %stand_exposed_extendedpain_head_2_crouch, %stand_exposed_extendedpain_hip_2_crouch ];
var_0["back"] = %back_pain;
var_0["run_long"] = [ %run_pain_leg, %run_pain_shoulder, %run_pain_stomach_stumble, %run_pain_head, %run_pain_fallonknee_02, %run_pain_stomach, %run_pain_stumble, %run_pain_stomach_fast, %run_pain_leg_fast, %run_pain_fall ];
var_0["run_medium"] = [ %run_pain_fallonknee_02, %run_pain_stomach, %run_pain_stumble, %run_pain_stomach_fast, %run_pain_leg_fast, %run_pain_fall ];
var_0["run_short"] = [ %run_pain_fallonknee, %run_pain_fallonknee_03 ];
var_0["pistol_torso_upper"] = [ %pistol_stand_pain_chest, %pistol_stand_pain_rightshoulder, %pistol_stand_pain_leftshoulder ];
var_0["pistol_torso_lower"] = [ %pistol_stand_pain_chest, %pistol_stand_pain_groin ];
var_0["pistol_neck"] = [ %pistol_stand_pain_chest, %pistol_stand_pain_head ];
var_0["pistol_head"] = [ %pistol_stand_pain_head ];
var_0["pistol_leg"] = [ %pistol_stand_pain_groin ];
var_0["pistol_left_arm_upper"] = [ %pistol_stand_pain_chest, %pistol_stand_pain_leftshoulder ];
var_0["pistol_right_arm_upper"] = [ %pistol_stand_pain_chest, %pistol_stand_pain_rightshoulder ];
var_0["pistol_left_arm_lower"] = [ %pistol_stand_pain_leftshoulder ];
var_0["pistol_right_arm_lower"] = [ %pistol_stand_pain_rightshoulder ];
var_0["pistol_default1"] = [ %pistol_stand_pain_chest ];
var_0["pistol_default2"] = [ %pistol_stand_pain_groin ];
var_0["torso_pistol"] = %pistol_stand_pain_chest;
var_0["torso_upper"] = [ %exposed_pain_face, %stand_exposed_extendedpain_neck ];
var_0["torso_upper_extended"] = [ %stand_exposed_extendedpain_gut, %stand_exposed_extendedpain_stomach, %stand_exposed_extendedpain_head_2_crouch ];
var_0["torso_lower"] = [ %exposed_pain_groin, %stand_exposed_extendedpain_hip ];
var_0["torso_lower_extended"] = [ %stand_exposed_extendedpain_gut, %stand_exposed_extendedpain_stomach, %stand_exposed_extendedpain_hip_2_crouch, %stand_exposed_extendedpain_feet_2_crouch, %stand_exposed_extendedpain_stomach ];
var_0["head"] = [ %exposed_pain_face, %stand_exposed_extendedpain_neck ];
var_0["head_extended"] = [ %stand_exposed_extendedpain_head_2_crouch ];
var_0["right_arm"] = [ %exposed_pain_right_arm ];
var_0["right_arm_extended"] = [];
var_0["left_arm"] = [ %stand_exposed_extendedpain_shoulderswing ];
var_0["left_arm_extended"] = [ %stand_exposed_extendedpain_shoulder_2_crouch ];
var_0["leg"] = [ %exposed_pain_groin, %stand_exposed_extendedpain_hip ];
var_0["leg_extended"] = [ %stand_exposed_extendedpain_hip_2_crouch, %stand_exposed_extendedpain_feet_2_crouch, %stand_exposed_extendedpain_stomach ];
var_0["foot"] = [ %stand_exposed_extendedpain_thigh ];
var_0["foot_extended"] = [ %stand_exposed_extendedpain_feet_2_crouch ];
var_0["default_long"] = [ %exposed_pain_2_crouch, %stand_extendedpainb ];
var_0["default_short"] = [ %exposed_pain_right_arm, %exposed_pain_face, %exposed_pain_groin ];
var_0["default_extended"] = [ %stand_extendedpainc, %stand_exposed_extendedpain_chest ];
var_0["crouch_longdeath"] = [ %exposed_crouch_extendedpaina ];
var_0["crouch_default"] = [ %exposed_crouch_pain_chest, %exposed_crouch_pain_headsnap, %exposed_crouch_pain_flinch ];
var_0["crouch_left_arm"] = [ %exposed_crouch_pain_left_arm ];
var_0["crouch_right_arm"] = [ %exposed_crouch_pain_right_arm ];
var_0["prone"] = [ %prone_reaction_a, %prone_reaction_b ];
var_0["cover_left_stand"] = [ %corner_standl_painb, %corner_standl_painc, %corner_standl_paind, %corner_standl_paine ];
var_0["cover_left_crouch"] = [ %cornercrl_painb ];
var_0["cover_right_stand"] = [ %corner_standr_pain, %corner_standr_painb, %corner_standr_painc ];
var_0["cover_right_crouch"] = [ %cornercrr_alert_paina, %cornercrr_alert_painc ];
var_0["cover_right_stand_B"] = %corner_standr_pain_b_2_alert;
var_0["cover_left_stand_A"] = %corner_standl_pain_a_2_alert;
var_0["cover_left_stand_B"] = %corner_standl_pain_b_2_alert;
var_0["cover_crouch"] = [ %covercrouch_pain_right, %covercrouch_pain_front, %covercrouch_pain_left_3 ];
var_0["cover_stand"] = [ %coverstand_pain_groin, %coverstand_pain_leg ];
var_0["cover_stand_aim"] = [ %coverstand_pain_aim_2_hide_01, %coverstand_pain_aim_2_hide_02 ];
var_0["cover_crouch_aim"] = [ %covercrouch_pain_aim_2_hide_01 ];
var_0["saw_stand"] = %saw_gunner_pain;
var_0["saw_crouch"] = %saw_gunner_lowwall_pain_02;
var_0["saw_prone"] = %saw_gunner_prone_pain;
anim.archetypes["soldier"]["pain"] = var_0;
var_0 = [];
var_0["prone_transition"] = [ %dying_crawl_2_back ];
var_0["stand_transition"] = [ %dying_stand_2_back_v1, %dying_stand_2_back_v2 ];
var_0["crouch_transition"] = [ %dying_crouch_2_back ];
var_0["default_transition"] = %dying_crawl_2_back;
var_0["stand_2_crawl"] = [ %dying_stand_2_crawl_v1, %dying_stand_2_crawl_v2, %dying_stand_2_crawl_v3 ];
var_0["crouch_2_crawl"] = [ %dying_crouch_2_crawl ];
var_0["crawl"] = %dying_crawl;
var_0["death"] = [ %dying_crawl_death_v1, %dying_crawl_death_v2 ];
var_0["back_idle"] = %dying_back_idle;
var_0["back_idle_twitch"] = [ %dying_back_twitch_a, %dying_back_twitch_b ];
var_0["back_crawl"] = %dying_crawl_back;
var_0["back_fire"] = %dying_back_fire;
var_0["back_death"] = [ %dying_back_death_v1, %dying_back_death_v2, %dying_back_death_v3 ];
var_0["aim_4"] = %dying_back_aim_4;
var_0["aim_6"] = %dying_back_aim_6;
var_0["longdeath"] = [];
var_0["longdeath"]["gut_b"] = [ [ %stand_2_longdeath_wander_gut, %longdeath_wander_gut, %longdeath_wander_gut_collapse, %longdeath_wander_gut_death ], [ %stand_2_longdeath_gut_wounded_b, %longdeath_gut_wounded_b_walk, %longdeath_gut_wounded_b_collapse ], [ %stand_2_longdeath_gut_b, %longdeath_gut_b_walk, %longdeath_gut_b_impact ] ];
var_0["longdeath"]["gut_l"] = [ [ %stand_2_longdeath_gut_l, %longdeath_gut_l_walk, %longdeath_gut_l_impact ] ];
var_0["longdeath"]["gut_r"] = [ [ %stand_2_longdeath_gut_r, %longdeath_gut_r_walk, %longdeath_gut_r_impact ] ];
var_0["longdeath"]["leg_b"] = [ [ %stand_2_longdeath_wander_leg_1, %longdeath_wander_leg_1, %longdeath_wander_leg_collapse_1, %longdeath_wander_leg_death ], [ %stand_2_longdeath_wander_leg_2, %longdeath_wander_leg_2, %longdeath_wander_leg_collapse_2, %longdeath_wander_leg_death ], [ %stand_2_longdeath_leg_wounded_b_1, %longdeath_leg_wounded_b_walk_1, %longdeath_leg_wounded_b_collapse_1 ], [ %stand_2_longdeath_leg_wounded_b_2, %longdeath_leg_wounded_b_walk_2, %longdeath_leg_wounded_b_collapse_2 ] ];
anim.archetypes["soldier"]["crawl_death"] = var_0;
var_0 = [];
var_0["pain"] = %corner_standr_death_grenade_hit;
var_0["idle"] = %corner_standr_death_grenade_idle;
var_0["release"] = %corner_standr_death_grenade_slump;
var_0["premature_death"] = [ %dying_back_death_v1, %dying_back_death_v2, %dying_back_death_v3, %dying_back_death_v4 ];
anim.archetypes["soldier"]["corner_grenade_death"] = var_0;
var_0 = [];
var_0["default"] = [ %pain_add_standing_belly, %pain_add_standing_left_arm, %pain_add_standing_right_arm ];
var_0["left_arm"] = %pain_add_standing_left_arm;
var_0["right_arm"] = %pain_add_standing_right_arm;
var_0["left_leg"] = %pain_add_standing_left_leg;
var_0["right_leg"] = %pain_add_standing_right_leg;
anim.archetypes["soldier"]["additive_pain"] = var_0;
}
main()
{
if ( isdefined( self.longdeathstarting ) )
{
self waittill( "killanimscript" );
return;
}
if ( [[ anim.pain_test ]]() )
return;
if ( self.a.disablepain )
return;
self notify( "kill_long_death" );
self.facialanimidx = undefined;
if ( isdefined( self.a.paintime ) )
self.a.lastpaintime = self.a.paintime;
else
self.a.lastpaintime = 0;
self.a.paintime = gettime();
if ( self.stairsstate != "none" )
self.a.painonstairs = 1;
else
self.a.painonstairs = undefined;
if ( self.a.nextstandinghitdying )
self.health = 1;
self notify( "anim entered pain" );
self endon( "killanimscript" );
animscripts\utility::initialize( "pain" );
self animmode( "gravity" );
if ( !isdefined( self.no_pain_sound ) )
animscripts\face::saygenericdialogue( "pain" );
if ( self.damagelocation == "helmet" )
animscripts\death::helmetpop();
else if ( wasdamagedbyexplosive() && randomint( 2 ) == 0 )
animscripts\death::helmetpop();
if ( isdefined( self.painfunction ) )
{
self [[ self.painfunction ]]();
return;
}
if ( crawlingpain() )
return;
if ( specialpain( self.a.special ) )
return;
var_0 = getpainanim();
playpainanim( var_0 );
}
initpainfx()
{
level._effect["crawling_death_blood_smear"] = loadfx( "fx/impacts/blood_smear_decal" );
}
end_script()
{
if ( isdefined( self.damageshieldpain ) )
{
self.damageshieldcounter = undefined;
self.damageshieldpain = undefined;
self.allowpain = 1;
if ( !isdefined( self.predamageshieldignoreme ) )
self.ignoreme = 0;
self.predamageshieldignoreme = undefined;
}
if ( isdefined( self.blockingpain ) )
{
self.blockingpain = undefined;
self.allowpain = 1;
}
self clearanim( %head, 0.2 );
self.facialanimidx = undefined;
}
wasdamagedbyexplosive()
{
if ( isexplosivedamagemod( self.damagemod ) )
return 1;
if ( gettime() - anim.lastcarexplosiontime <= 50 )
{
var_0 = anim.lastcarexplosionrange * anim.lastcarexplosionrange * 1.2 * 1.2;
if ( distancesquared( self.origin, anim.lastcarexplosiondamagelocation ) < var_0 )
{
var_1 = var_0 * 0.5 * 0.5;
self.maydoupwardsdeath = distancesquared( self.origin, anim.lastcarexplosionlocation ) < var_1;
return 1;
}
}
return 0;
}
getdamageshieldpainanim()
{
if ( self.a.pose == "prone" )
return;
if ( isdefined( self.lastattacker ) && isdefined( self.lastattacker.team ) && self.lastattacker.team == self.team )
return;
if ( !isdefined( self.damageshieldcounter ) || gettime() - self.a.lastpaintime > 1500 )
self.damageshieldcounter = randomintrange( 2, 3 );
if ( isdefined( self.lastattacker ) && distancesquared( self.origin, self.lastattacker.origin ) < squared( 512 ) )
self.damageshieldcounter = 0;
if ( self.damageshieldcounter > 0 )
self.damageshieldcounter--;
else
{
self.damageshieldpain = 1;
self.allowpain = 0;
if ( self.ignoreme )
self.predamageshieldignoreme = 1;
else
self.ignoreme = 1;
if ( animscripts\utility::usingsidearm() )
animscripts\shared::placeweaponon( self.primaryweapon, "right" );
if ( self.a.pose == "crouch" )
return animscripts\utility::lookupanim( "pain", "damage_shield_crouch" );
var_0 = animscripts\utility::lookupanim( "pain", "damage_shield_pain_array" );
}
}
getpainanim()
{
if ( self.damageshield && !isdefined( self.disabledamageshieldpain ) )
{
var_0 = getdamageshieldpainanim();
if ( isdefined( var_0 ) )
return var_0;
}
if ( isdefined( self.a.onback ) )
{
if ( self.a.pose == "crouch" )
return animscripts\utility::lookupanim( "pain", "back" );
else
animscripts\notetracks::stoponback();
}
if ( self.a.pose == "stand" )
{
var_1 = isdefined( self.node ) && distancesquared( self.origin, self.node.origin ) < 4096;
if ( !var_1 && self.a.movement == "run" && abs( self getmotionangle() ) < 60 )
return getrunningforwardpainanim();
self.a.movement = "stop";
return getstandpainanim();
}
else if ( self.a.pose == "crouch" )
{
self.a.movement = "stop";
return getcrouchpainanim();
}
else if ( self.a.pose == "prone" )
{
self.a.movement = "stop";
return getpronepainanim();
}
}
getrunningforwardpainanim()
{
var_0 = [];
var_1 = 0;
var_2 = 0;
var_3 = 0;
if ( self maymovetopoint( self localtoworldcoords( ( 300, 0, 0 ) ) ) )
{
var_2 = 1;
var_1 = 1;
}
else if ( self maymovetopoint( self localtoworldcoords( ( 200, 0, 0 ) ) ) )
var_1 = 1;
if ( isdefined( self.a.disablelongpain ) )
{
var_2 = 0;
var_1 = 0;
}
if ( var_2 )
var_0 = animscripts\utility::lookupanim( "pain", "run_long" );
else if ( var_1 )
var_0 = animscripts\utility::lookupanim( "pain", "run_medium" );
else if ( self maymovetopoint( self localtoworldcoords( ( 120, 0, 0 ) ) ) )
var_0 = animscripts\utility::lookupanim( "pain", "run_short" );
if ( !var_0.size )
{
self.a.movement = "stop";
return getstandpainanim();
}
return var_0[randomint( var_0.size )];
}
getstandpistolpainanim()
{
var_0 = [];
if ( animscripts\utility::damagelocationisany( "torso_upper" ) )
var_0 = animscripts\utility::lookupanim( "pain", "pistol_torso_upper" );
else if ( animscripts\utility::damagelocationisany( "torso_lower" ) )
var_0 = animscripts\utility::lookupanim( "pain", "pistol_torso_lower" );
else if ( animscripts\utility::damagelocationisany( "neck" ) )
var_0 = animscripts\utility::lookupanim( "pain", "pistol_neck" );
else if ( animscripts\utility::damagelocationisany( "head" ) )
var_0 = animscripts\utility::lookupanim( "pain", "pistol_head" );
else if ( animscripts\utility::damagelocationisany( "left_leg_upper", "right_leg_upper" ) )
var_0 = animscripts\utility::lookupanim( "pain", "pistol_leg" );
else if ( animscripts\utility::damagelocationisany( "left_arm_upper" ) )
var_0 = animscripts\utility::lookupanim( "pain", "pistol_left_arm_upper" );
else if ( animscripts\utility::damagelocationisany( "left_arm_lower" ) )
var_0 = animscripts\utility::lookupanim( "pain", "pistol_left_arm_lower" );
else if ( animscripts\utility::damagelocationisany( "right_arm_upper" ) )
var_0 = animscripts\utility::lookupanim( "pain", "pistol_right_arm_upper" );
else if ( animscripts\utility::damagelocationisany( "right_arm_lower" ) )
var_0 = animscripts\utility::lookupanim( "pain", "pistol_right_arm_lower" );
if ( var_0.size < 2 )
var_0 = common_scripts\utility::array_combine( var_0, animscripts\utility::lookupanim( "pain", "pistol_default1" ) );
if ( var_0.size < 2 )
var_0 = common_scripts\utility::array_combine( var_0, animscripts\utility::lookupanim( "pain", "pistol_default2" ) );
return var_0[randomint( var_0.size )];
}
getstandpainanim()
{
if ( animscripts\utility::usingsidearm() )
return getstandpistolpainanim();
var_0 = [];
var_1 = [];
if ( animscripts\utility::damagelocationisany( "torso_upper" ) )
{
var_0 = animscripts\utility::lookupanim( "pain", "torso_upper" );
var_1 = animscripts\utility::lookupanim( "pain", "torso_upper_extended" );
}
else if ( animscripts\utility::damagelocationisany( "torso_lower" ) )
{
var_0 = animscripts\utility::lookupanim( "pain", "torso_lower" );
var_1 = animscripts\utility::lookupanim( "pain", "torso_lower_extended" );
}
else if ( animscripts\utility::damagelocationisany( "head", "helmet", "neck" ) )
{
var_0 = animscripts\utility::lookupanim( "pain", "head" );
var_1 = animscripts\utility::lookupanim( "pain", "head_extended" );
}
else if ( animscripts\utility::damagelocationisany( "right_arm_upper", "right_arm_lower" ) )
{
var_0 = animscripts\utility::lookupanim( "pain", "right_arm" );
var_1 = animscripts\utility::lookupanim( "pain", "right_arm_extended" );
}
else if ( animscripts\utility::damagelocationisany( "left_arm_upper", "left_arm_lower" ) )
{
var_0 = animscripts\utility::lookupanim( "pain", "left_arm" );
var_1 = animscripts\utility::lookupanim( "pain", "left_arm_extended" );
}
else if ( animscripts\utility::damagelocationisany( "left_leg_upper", "right_leg_upper" ) )
{
var_0 = animscripts\utility::lookupanim( "pain", "leg" );
var_1 = animscripts\utility::lookupanim( "pain", "leg_extended" );
}
else if ( animscripts\utility::damagelocationisany( "left_foot", "right_foot", "left_leg_lower", "right_leg_lower" ) )
{
var_0 = animscripts\utility::lookupanim( "pain", "foot" );
var_1 = animscripts\utility::lookupanim( "pain", "foot_extended" );
}
if ( var_0.size < 2 )
{
if ( !self.a.disablelongdeath )
var_0 = common_scripts\utility::array_combine( var_0, animscripts\utility::lookupanim( "pain", "default_long" ) );
else
var_0 = common_scripts\utility::array_combine( var_0, animscripts\utility::lookupanim( "pain", "default_short" ) );
}
if ( var_1.size < 2 )
var_1 = common_scripts\utility::array_combine( var_1, animscripts\utility::lookupanim( "pain", "default_extended" ) );
if ( !self.damageshield && !self.a.disablelongdeath )
{
var_2 = randomint( var_0.size + var_1.size );
if ( var_2 < var_0.size )
return var_0[var_2];
else
return var_1[var_2 - var_0.size];
}
return var_0[randomint( var_0.size )];
}
getcrouchpainanim()
{
var_0 = [];
if ( !self.damageshield && !self.a.disablelongdeath )
var_0 = animscripts\utility::lookupanim( "pain", "crouch_longdeath" );
var_0 = common_scripts\utility::array_combine( var_0, animscripts\utility::lookupanim( "pain", "crouch_default" ) );
if ( animscripts\utility::damagelocationisany( "left_hand", "left_arm_lower", "left_arm_upper" ) )
var_0 = common_scripts\utility::array_combine( var_0, animscripts\utility::lookupanim( "pain", "crouch_left_arm" ) );
if ( animscripts\utility::damagelocationisany( "right_hand", "right_arm_lower", "right_arm_upper" ) )
var_0 = common_scripts\utility::array_combine( var_0, animscripts\utility::lookupanim( "pain", "crouch_right_arm" ) );
return var_0[randomint( var_0.size )];
}
getpronepainanim()
{
var_0 = animscripts\utility::lookupanim( "pain", "prone" );
return var_0[randomint( var_0.size )];
}
playpainanim( var_0 )
{
var_1 = 1;
pain_setflaggedanimknoballrestart( "painanim", var_0, %body, 1, 0.1, var_1 );
if ( self.a.pose == "prone" )
self updateprone( %prone_legs_up, %prone_legs_down, 1, 0.1, 1 );
if ( animhasnotetrack( var_0, "start_aim" ) )
{
thread notifystartaim( "painanim" );
self endon( "start_aim" );
}
if ( animhasnotetrack( var_0, "code_move" ) )
animscripts\shared::donotetracks( "painanim" );
animscripts\shared::donotetracks( "painanim" );
}
notifystartaim( var_0 )
{
self endon( "killanimscript" );
self waittillmatch( var_0, "start_aim" );
self notify( "start_aim" );
}
specialpainblocker()
{
self endon( "killanimscript" );
self.blockingpain = 1;
self.allowpain = 0;
wait 0.5;
self.blockingpain = undefined;
self.allowpain = 1;
}
specialpain( var_0 )
{
if ( var_0 == "none" )
return 0;
self.a.special = "none";
thread specialpainblocker();
var_2 = 0;
switch ( var_0 )
{
case "cover_left":
if ( self.a.pose == "stand" )
{
var_1 = animscripts\utility::lookupanim( "pain", "cover_left_stand" );
dopainfromarray( var_1 );
var_2 = 1;
}
else if ( self.a.pose == "crouch" )
{
var_1 = animscripts\utility::lookupanim( "pain", "cover_left_crouch" );
dopainfromarray( var_1 );
var_2 = 1;
}
else
var_2 = 0;
break;
case "cover_right":
if ( self.a.pose == "stand" )
{
var_1 = animscripts\utility::lookupanim( "pain", "cover_right_stand" );
dopainfromarray( var_1 );
var_2 = 1;
}
else if ( self.a.pose == "crouch" )
{
var_1 = animscripts\utility::lookupanim( "pain", "cover_right_crouch" );
dopainfromarray( var_1 );
var_2 = 1;
}
else
var_2 = 0;
break;
case "cover_right_stand_A":
var_2 = 0;
break;
case "cover_right_stand_B":
dopain( animscripts\utility::lookupanim( "pain", "cover_right_stand_B" ) );
var_2 = 1;
break;
case "cover_left_stand_A":
dopain( animscripts\utility::lookupanim( "pain", "cover_left_stand_A" ) );
var_2 = 1;
break;
case "cover_left_stand_B":
dopain( animscripts\utility::lookupanim( "pain", "cover_left_stand_B" ) );
var_2 = 1;
break;
case "cover_crouch":
var_1 = animscripts\utility::lookupanim( "pain", "cover_crouch" );
dopainfromarray( var_1 );
var_2 = 1;
break;
case "cover_stand":
var_1 = animscripts\utility::lookupanim( "pain", "cover_stand" );
dopainfromarray( var_1 );
var_2 = 1;
break;
case "cover_stand_aim":
var_1 = animscripts\utility::lookupanim( "pain", "cover_stand_aim" );
dopainfromarray( var_1 );
var_2 = 1;
break;
case "cover_crouch_aim":
var_1 = animscripts\utility::lookupanim( "pain", "cover_crouch_aim" );
dopainfromarray( var_1 );
var_2 = 1;
break;
case "saw":
if ( self.a.pose == "stand" )
var_3 = animscripts\utility::lookupanim( "pain", "saw_stand" );
else if ( self.a.pose == "crouch" )
var_3 = animscripts\utility::lookupanim( "pain", "saw_crouch" );
else
var_3 = animscripts\utility::lookupanim( "pain", "saw_prone" );
pain_setflaggedanimknob( "painanim", var_3, 1, 0.3, 1 );
animscripts\shared::donotetracks( "painanim" );
var_2 = 1;
break;
case "mg42":
mg42pain( self.a.pose );
var_2 = 1;
break;
case "minigun":
var_2 = 0;
break;
case "corner_right_martyrdom":
var_2 = trycornerrightgrenadedeath();
break;
case "rambo":
case "rambo_right":
case "rambo_left":
case "dying_crawl":
var_2 = 0;
break;
default:
var_2 = 0;
}
return var_2;
}
paindeathnotify()
{
self endon( "death" );
wait 0.05;
self notify( "pain_death" );
}
dopainfromarray( var_0 )
{
var_1 = var_0[randomint( var_0.size )];
pain_setflaggedanimknob( "painanim", var_1, 1, 0.3, 1 );
animscripts\shared::donotetracks( "painanim" );
}
dopain( var_0 )
{
pain_setflaggedanimknob( "painanim", var_0, 1, 0.3, 1 );
animscripts\shared::donotetracks( "painanim" );
}
mg42pain( var_0 )
{
pain_setflaggedanimknob( "painanim", level.mg_animmg["pain_" + var_0], 1, 0.1, 1 );
animscripts\shared::donotetracks( "painanim" );
}
waitsetstop( var_0, var_1 )
{
self endon( "killanimscript" );
self endon( "death" );
if ( isdefined( var_1 ) )
self endon( var_1 );
wait( var_0 );
self.a.movement = "stop";
}
crawlingpain()
{
if ( self.a.disablelongdeath || self.diequietly || self.damageshield )
return 0;
if ( self.stairsstate != "none" )
return 0;
if ( isdefined( self.a.onback ) )
return 0;
var_0 = animscripts\utility::damagelocationisany( "left_leg_upper", "left_leg_lower", "right_leg_upper", "right_leg_lower", "left_foot", "right_foot" );
if ( isdefined( self.forcelongdeath ) )
{
setcrawlingpaintransanim( var_0 );
self.health = 10;
thread crawlingpistol();
self waittill( "killanimscript" );
return 1;
}
if ( self.health > 100 )
return 0;
if ( var_0 && self.health < self.maxhealth * 0.4 )
{
if ( gettime() < anim.nextcrawlingpaintimefromlegdamage )
return 0;
}
else
{
if ( anim.numdeathsuntilcrawlingpain > 0 )
return 0;
if ( gettime() < anim.nextcrawlingpaintime )
return 0;
}
if ( isdefined( self.deathfunction ) )
return 0;
foreach ( var_2 in level.players )
{
if ( distancesquared( self.origin, var_2.origin ) < 30625 )
return 0;
}
if ( animscripts\utility::damagelocationisany( "head", "helmet", "gun", "right_hand", "left_hand" ) )
return 0;
if ( animscripts\utility::usingsidearm() )
return 0;
setcrawlingpaintransanim( var_0 );
if ( !isdefined( self.a.stumblingpainanimseq ) && !iscrawldeltaallowed( self.a.crawlingpaintransanim ) )
return 0;
anim.nextcrawlingpaintime = gettime() + 3000;
anim.nextcrawlingpaintimefromlegdamage = gettime() + 3000;
thread crawlingpistol();
self waittill( "killanimscript" );
return 1;
}
setcrawlingpaintransanim( var_0 )
{
var_1 = [];
var_2 = undefined;
if ( self.a.pose == "stand" )
{
var_2 = shouldattemptstumblingpain( var_0 );
if ( isdefined( var_2 ) )
var_1 = [ var_2[0] ];
else
var_1 = animscripts\utility::lookupanim( "crawl_death", "stand_transition" );
}
else if ( self.a.pose == "crouch" )
var_1 = animscripts\utility::lookupanim( "crawl_death", "crouch_transition" );
else
var_1 = animscripts\utility::lookupanim( "crawl_death", "prone_transition" );
self.a.crawlingpaintransanim = var_1[randomint( var_1.size )];
self.a.stumblingpainanimseq = var_2;
}
iscrawldeltaallowed( var_0 )
{
if ( isdefined( self.a.force_num_crawls ) )
return 1;
var_1 = getmovedelta( var_0, 0, 1 );
var_2 = self localtoworldcoords( var_1 );
return self maymovetopoint( var_2 );
}
crawlingpistol()
{
self endon( "kill_long_death" );
self endon( "death" );
thread preventpainforashorttime( "crawling" );
self.a.special = "none";
self.specialdeathfunc = undefined;
self setlookatentity();
thread paindeathnotify();
level notify( "ai_crawling", self );
self setanimknoball( %dying, %body, 1, 0.1, 1 );
if ( isdefined( self.a.stumblingpainanimseq ) )
{
stumblingpain();
self.a.stumblingpainanimseq = undefined;
return;
}
if ( !dyingcrawl() )
return;
pain_setflaggedanimknob( "transition", self.a.crawlingpaintransanim, 1, 0.5, 1 );
animscripts\notetracks::donotetracksintercept( "transition", ::handlebackcrawlnotetracks );
self.a.special = "dying_crawl";
thread dyingcrawlbackaim();
if ( isdefined( self.enemy ) )
self setlookatentity( self.enemy );
decidenumcrawls();
while ( shouldkeepcrawling() )
{
var_0 = animscripts\utility::lookupanim( "crawl_death", "back_crawl" );
if ( !iscrawldeltaallowed( var_0 ) )
break;
pain_setflaggedanimknobrestart( "back_crawl", var_0, 1, 0.1, 1.0 );
animscripts\notetracks::donotetracksintercept( "back_crawl", ::handlebackcrawlnotetracks );
}
self.desiredtimeofdeath = gettime() + randomintrange( 4000, 20000 );
while ( shouldstayalive() )
{
if ( animscripts\utility::canseeenemy() && aimedsomewhatatenemy() )
{
var_1 = animscripts\utility::lookupanim( "crawl_death", "back_fire" );
pain_setflaggedanimknobrestart( "back_idle_or_fire", var_1, 1, 0.2, 1.0 );
animscripts\shared::donotetracks( "back_idle_or_fire" );
continue;
}
var_1 = animscripts\utility::lookupanim( "crawl_death", "back_idle" );
if ( randomfloat( 1 ) < 0.4 )
{
var_2 = animscripts\utility::lookupanim( "crawl_death", "back_idle_twitch" );
var_1 = var_2[randomint( var_2.size )];
}
pain_setflaggedanimknobrestart( "back_idle_or_fire", var_1, 1, 0.1, 1.0 );
var_3 = getanimlength( var_1 );
while ( var_3 > 0 )
{
if ( animscripts\utility::canseeenemy() && aimedsomewhatatenemy() )
break;
var_4 = 0.5;
if ( var_4 > var_3 )
{
var_4 = var_3;
var_3 = 0;
}
else
var_3 = var_3 - var_4;
animscripts\notetracks::donotetracksfortime( var_4, "back_idle_or_fire" );
}
}
self notify( "end_dying_crawl_back_aim" );
self clearanim( %dying_back_aim_4_wrapper, 0.3 );
self clearanim( %dying_back_aim_6_wrapper, 0.3 );
var_5 = animscripts\utility::lookupanim( "crawl_death", "back_death" );
self.deathanim = var_5[randomint( var_5.size )];
killwrapper();
self.a.special = "none";
self.specialdeathfunc = undefined;
}
shouldattemptstumblingpain( var_0 )
{
if ( self.a.pose != "stand" )
return;
var_1 = 2;
if ( randomint( 10 ) > var_1 )
return;
var_2 = 0;
if ( !var_0 )
{
var_2 = animscripts\utility::damagelocationisany( "torso_upper", "torso_lower" );
if ( !var_2 )
return;
}
var_3 = 0;
var_4 = "leg";
var_5 = "b";
if ( var_0 )
var_3 = 200;
else
{
var_4 = "gut";
var_3 = 128;
if ( 45 < self.damageyaw && self.damageyaw < 135 )
var_5 = "l";
else if ( -135 < self.damageyaw && self.damageyaw < -45 )
var_5 = "r";
else if ( -45 < self.damageyaw && self.damageyaw < 45 )
return;
}
switch ( var_5 )
{
case "b":
var_6 = anglestoforward( self.angles );
var_7 = self.origin - var_6 * var_3;
break;
case "l":
var_8 = anglestoright( self.angles );
var_7 = self.origin - var_8 * var_3;
break;
case "r":
var_8 = anglestoright( self.angles );
var_7 = self.origin + var_8 * var_3;
break;
default:
return;
}
if ( !self maymovetopoint( var_7 ) )
return;
var_9 = animscripts\utility::lookupanim( "crawl_death", "longdeath" );
var_10 = var_4 + "_" + var_5;
var_11 = randomint( var_9[var_10].size );
var_12 = var_9[var_10][var_11];
return var_12;
}
stumblingpain()
{
pain_setflaggedanimknobrestart( "stumblingPainInto", self.a.stumblingpainanimseq[0] );
animscripts\shared::donotetracks( "stumblingPainInto" );
self.a.special = "stumbling_pain";
var_0 = getmovedelta( self.a.stumblingpainanimseq[2] );
var_1 = getanimlength( self.a.stumblingpainanimseq[2] ) * 1000;
for ( var_2 = randomint( 2 ) + 1; var_2 > 0; var_2-- )
{
var_3 = anglestoforward( self.angles );
var_4 = self.origin + var_3 * var_0;
if ( !self maymovetopoint( var_4 ) )
break;
pain_setflaggedanimknobrestart( "stumblingPain", self.a.stumblingpainanimseq[1] );
animscripts\shared::donotetracks( "stumblingPain" );
}
self.a.nodeath = 1;
self.a.special = "none";
pain_setflaggedanimknobrestart( "stumblingPainCollapse", self.a.stumblingpainanimseq[2], 1, 0.75 );
animscripts\notetracks::donotetracksintercept( "stumblingPainCollapse", ::stumblingpainnotetrackhandler );
animscripts\shared::donotetracks( "stumblingPainCollapse" );
killwrapper();
}
stumblingpainnotetrackhandler( var_0 )
{
if ( var_0 == "start_ragdoll" )
{
animscripts\notetracks::handlenotetrack( var_0, "stumblingPainCollapse" );
return 1;
}
}
shouldstayalive()
{
if ( !enemyisingeneraldirection( anglestoforward( self.angles ) ) )
return 0;
return gettime() < self.desiredtimeofdeath;
}
dyingcrawl()
{
if ( !isdefined( self.forcelongdeath ) )
{
if ( self.a.pose == "prone" )
return 1;
if ( self.a.movement == "stop" )
{
if ( randomfloat( 1 ) < 0.4 )
{
if ( randomfloat( 1 ) < 0.5 )
return 1;
}
else if ( abs( self.damageyaw ) > 90 )
return 1;
}
else if ( abs( self getmotionangle() ) > 90 )
return 1;
}
if ( self.a.pose != "prone" )
{
var_0 = animscripts\utility::lookupanim( "crawl_death", self.a.pose + "_2_crawl" );
var_1 = var_0[randomint( var_0.size )];
if ( !iscrawldeltaallowed( var_1 ) )
return 1;
thread dyingcrawlbloodsmear();
pain_setflaggedanimknob( "falling", var_1, 1, 0.5, 1 );
animscripts\shared::donotetracks( "falling" );
}
else
thread dyingcrawlbloodsmear();
self.a.crawlingpaintransanim = animscripts\utility::lookupanim( "crawl_death", "default_transition" );
self.a.special = "dying_crawl";
decidenumcrawls();
var_2 = animscripts\utility::lookupanim( "crawl_death", "crawl" );
while ( shouldkeepcrawling() )
{
if ( !iscrawldeltaallowed( var_2 ) )
return 1;
if ( isdefined( self.custom_crawl_sound ) )
self playsound( self.custom_crawl_sound );
pain_setflaggedanimknobrestart( "crawling", var_2, 1, 0.1, 1.0 );
animscripts\shared::donotetracks( "crawling" );
}
self notify( "done_crawling" );
if ( !isdefined( self.forcelongdeath ) && enemyisingeneraldirection( anglestoforward( self.angles ) * -1 ) )
return 1;
var_3 = animscripts\utility::lookupanim( "crawl_death", "death" );
var_4 = var_3[randomint( var_3.size )];
if ( var_4 != %dying_crawl_death_v2 )
self.a.nodeath = 1;
animscripts\death::playdeathanim( var_4 );
killwrapper();
self.a.special = "none";
self.specialdeathfunc = undefined;
return 0;
}
dyingcrawlbloodsmear()
{
self endon( "death" );
if ( self.a.pose != "prone" )
{
for (;;)
{
self waittill( "falling", var_0 );
if ( issubstr( var_0, "bodyfall" ) )
break;
}
}
var_1 = "J_SpineLower";
var_2 = "tag_origin";
var_3 = 0.25;
var_4 = level._effect["crawling_death_blood_smear"];
if ( isdefined( self.a.crawl_fx_rate ) )
var_3 = self.a.crawl_fx_rate;
if ( isdefined( self.a.crawl_fx ) )
var_4 = level._effect[self.a.crawl_fx];
while ( var_3 )
{
var_5 = self gettagorigin( var_1 );
var_6 = self gettagangles( var_2 );
var_7 = anglestoright( var_6 );
var_8 = anglestoforward( ( 270, 0, 0 ) );
playfx( var_4, var_5, var_8, var_7 );
wait( var_3 );
}
}
dyingcrawlbackaim()
{
self endon( "kill_long_death" );
self endon( "death" );
self endon( "end_dying_crawl_back_aim" );
if ( isdefined( self.dyingcrawlaiming ) )
return;
self.dyingcrawlaiming = 1;
self setanimlimited( animscripts\utility::lookupanim( "crawl_death", "aim_4" ), 1, 0 );
self setanimlimited( animscripts\utility::lookupanim( "crawl_death", "aim_6" ), 1, 0 );
var_0 = 0;
for (;;)
{
var_1 = animscripts\utility::getyawtoenemy();
var_2 = angleclamp180( var_1 - var_0 );
if ( abs( var_2 ) > 3 )
var_2 = common_scripts\utility::sign( var_2 ) * 3;
var_1 = angleclamp180( var_0 + var_2 );
if ( var_1 < 0 )
{
if ( var_1 < -45.0 )
var_1 = -45.0;
var_3 = var_1 / -45.0;
self setanim( %dying_back_aim_4_wrapper, var_3, 0.05 );
self setanim( %dying_back_aim_6_wrapper, 0, 0.05 );
}
else
{
if ( var_1 > 45.0 )
var_1 = 45.0;
var_3 = var_1 / 45.0;
self setanim( %dying_back_aim_6_wrapper, var_3, 0.05 );
self setanim( %dying_back_aim_4_wrapper, 0, 0.05 );
}
var_0 = var_1;
wait 0.05;
}
}
startdyingcrawlbackaimsoon()
{
self endon( "kill_long_death" );
self endon( "death" );
wait 0.5;
thread dyingcrawlbackaim();
}
handlebackcrawlnotetracks( var_0 )
{
if ( var_0 == "fire_spray" )
{
if ( !animscripts\utility::canseeenemy() )
return 1;
if ( !aimedsomewhatatenemy() )
return 1;
animscripts\utility::shootenemywrapper();
return 1;
}
else if ( var_0 == "pistol_pickup" )
{
thread startdyingcrawlbackaimsoon();
return 0;
}
return 0;
}
aimedsomewhatatenemy()
{
var_0 = self.enemy getshootatpos();
var_1 = self getmuzzleangle();
var_2 = vectortoangles( var_0 - self getmuzzlepos() );
var_3 = animscripts\utility::absangleclamp180( var_1[1] - var_2[1] );
if ( var_3 > anim.painyawdifffartolerance )
{
if ( distancesquared( self geteye(), var_0 ) > anim.painyawdiffclosedistsq || var_3 > anim.painyawdiffclosetolerance )
return 0;
}
return animscripts\utility::absangleclamp180( var_1[0] - var_2[0] ) <= anim.painpitchdifftolerance;
}
enemyisingeneraldirection( var_0 )
{
if ( !isdefined( self.enemy ) )
return 0;
var_1 = vectornormalize( self.enemy getshootatpos() - self geteye() );
return vectordot( var_1, var_0 ) > 0.5;
}
preventpainforashorttime( var_0 )
{
self endon( "kill_long_death" );
self endon( "death" );
self.flashbangimmunity = 1;
self.longdeathstarting = 1;
self.a.doinglongdeath = 1;
self notify( "long_death" );
self.health = 10000;
self.threatbias = self.threatbias - 2000;
wait 0.75;
if ( self.health > 1 )
self.health = 1;
wait 0.05;
self.longdeathstarting = undefined;
self.a.mayonlydie = 1;
if ( var_0 == "crawling" )
{
wait 1.0;
if ( isdefined( level.player ) && distancesquared( self.origin, level.player.origin ) < 1048576 )
{
anim.numdeathsuntilcrawlingpain = randomintrange( 10, 30 );
anim.nextcrawlingpaintime = gettime() + randomintrange( 15000, 60000 );
}
else
{
anim.numdeathsuntilcrawlingpain = randomintrange( 5, 12 );
anim.nextcrawlingpaintime = gettime() + randomintrange( 5000, 25000 );
}
anim.nextcrawlingpaintimefromlegdamage = gettime() + randomintrange( 7000, 13000 );
}
else if ( var_0 == "corner_grenade" )
{
wait 1.0;
if ( isdefined( level.player ) && distancesquared( self.origin, level.player.origin ) < 490000 )
{
anim.numdeathsuntilcornergrenadedeath = randomintrange( 10, 30 );
anim.nextcornergrenadedeathtime = gettime() + randomintrange( 15000, 60000 );
}
else
{
anim.numdeathsuntilcornergrenadedeath = randomintrange( 5, 12 );
anim.nextcornergrenadedeathtime = gettime() + randomintrange( 5000, 25000 );
}
}
}
decidenumcrawls()
{
if ( isdefined( self.a.force_num_crawls ) )
self.a.numcrawls = self.a.force_num_crawls;
else
self.a.numcrawls = randomintrange( 1, 5 );
}
shouldkeepcrawling()
{
if ( !self.a.numcrawls )
{
self.a.numcrawls = undefined;
return 0;
}
self.a.numcrawls--;
return 1;
}
trycornerrightgrenadedeath()
{
if ( anim.numdeathsuntilcornergrenadedeath > 0 )
return 0;
if ( gettime() < anim.nextcornergrenadedeathtime )
return 0;
if ( self.a.disablelongdeath || self.diequietly || self.damageshield )
return 0;
if ( isdefined( self.deathfunction ) )
return 0;
if ( distance( self.origin, level.player.origin ) < 175 )
return 0;
anim.nextcornergrenadedeathtime = gettime() + 3000;
thread cornerrightgrenadedeath();
self waittill( "killanimscript" );
return 1;
}
cornerrightgrenadedeath()
{
self endon( "kill_long_death" );
self endon( "death" );
thread paindeathnotify();
thread preventpainforashorttime( "corner_grenade" );
thread maps\_utility::set_battlechatter( 0 );
self.threatbias = -1000;
pain_setflaggedanimknoballrestart( "corner_grenade_pain", animscripts\utility::lookupanim( "corner_grenade_death", "pain" ), %body, 1, 0.1 );
self waittillmatch( "corner_grenade_pain", "dropgun" );
animscripts\shared::dropallaiweapons();
self waittillmatch( "corner_grenade_pain", "anim_pose = \"back\"" );
animscripts\notetracks::notetrackposeback();
self waittillmatch( "corner_grenade_pain", "grenade_left" );
var_0 = getweaponmodel( "fraggrenade" );
self attach( var_0, "tag_inhand" );
self.deathfunction = ::prematurecornergrenadedeath;
self waittillmatch( "corner_grenade_pain", "end" );
var_1 = gettime() + randomintrange( 25000, 60000 );
pain_setflaggedanimknoballrestart( "corner_grenade_idle", animscripts\utility::lookupanim( "corner_grenade_death", "pain" ), %body, 1, 0.2 );
thread watchenemyvelocity();
while ( !enemyisapproaching() )
{
if ( gettime() >= var_1 )
break;
animscripts\notetracks::donotetracksfortime( 0.1, "corner_grenade_idle" );
}
var_2 = animscripts\utility::lookupanim( "corner_grenade_death", "release" );
pain_setflaggedanimknoballrestart( "corner_grenade_release", var_2, %body, 1, 0.2 );
var_3 = getnotetracktimes( var_2, "grenade_drop" );
var_4 = var_3[0] * getanimlength( var_2 );
wait( var_4 - 1.0 );
animscripts\death::playdeathsound();
wait 0.7;
self.deathfunction = ::waittillgrenadedrops;
var_5 = ( 0, 0, 30 ) - anglestoright( self.angles ) * 70;
cornerdeathreleasegrenade( var_5, randomfloatrange( 2.0, 3.0 ) );
wait 0.05;
self detach( var_0, "tag_inhand" );
thread killself();
}
cornerdeathreleasegrenade( var_0, var_1 )
{
var_2 = self gettagorigin( "tag_inhand" );
var_3 = var_2 + ( 0, 0, 20 );
var_4 = var_2 - ( 0, 0, 20 );
var_5 = bullettrace( var_3, var_4, 0, undefined );
if ( var_5["fraction"] < 0.5 )
var_2 = var_5["position"];
var_6 = "default";
if ( var_5["surfacetype"] != "none" )
var_6 = var_5["surfacetype"];
thread playsoundatpoint( "grenade_bounce_" + var_6, var_2 );
self.grenadeweapon = "fraggrenade";
self magicgrenademanual( var_2, var_0, var_1 );
}
playsoundatpoint( var_0, var_1 )
{
var_2 = spawn( "script_origin", var_1 );
var_2 playsound( var_0, "sounddone" );
var_2 waittill( "sounddone" );
var_2 delete();
}
killself()
{
self.a.nodeath = 1;
killwrapper();
self startragdoll();
wait 0.1;
self notify( "grenade_drop_done" );
}
killwrapper()
{
if ( isdefined( self.last_dmg_player ) )
self kill( self.origin, self.last_dmg_player );
else
self kill();
}
enemyisapproaching()
{
if ( !isdefined( self.enemy ) )
return 0;
if ( distancesquared( self.origin, self.enemy.origin ) > 147456 )
return 0;
if ( distancesquared( self.origin, self.enemy.origin ) < 16384 )
return 1;
var_0 = self.enemy.origin + self.enemyvelocity * 3.0;
var_1 = self.enemy.origin;
if ( self.enemy.origin != var_0 )
var_1 = pointonsegmentnearesttopoint( self.enemy.origin, var_0, self.origin );
if ( distancesquared( self.origin, var_1 ) < 16384 )
return 1;
return 0;
}
prematurecornergrenadedeath()
{
var_0 = animscripts\utility::lookupanim( "corner_grenade_death", "premature_death" );
var_1 = var_0[randomint( var_0.size )];
animscripts\death::playdeathsound();
pain_setflaggedanimknoballrestart( "corner_grenade_die", var_1, %body, 1, 0.2 );
var_2 = animscripts\combat_utility::getgrenadedropvelocity();
cornerdeathreleasegrenade( var_2, 3.0 );
var_3 = getweaponmodel( "fraggrenade" );
self detach( var_3, "tag_inhand" );
wait 0.05;
self startragdoll();
self waittillmatch( "corner_grenade_die", "end" );
}
waittillgrenadedrops()
{
self waittill( "grenade_drop_done" );
}
watchenemyvelocity()
{
self endon( "kill_long_death" );
self endon( "death" );
self.enemyvelocity = ( 0, 0, 0 );
var_0 = undefined;
var_1 = self.origin;
var_2 = 0.15;
for (;;)
{
if ( isdefined( self.enemy ) && isdefined( var_0 ) && self.enemy == var_0 )
{
var_3 = self.enemy.origin;
self.enemyvelocity = ( var_3 - var_1 ) * ( 1 / var_2 );
var_1 = var_3;
}
else
{
if ( isdefined( self.enemy ) )
var_1 = self.enemy.origin;
else
var_1 = self.origin;
var_0 = self.enemy;
self.shootentvelocity = ( 0, 0, 0 );
}
wait( var_2 );
}
}
additive_pain( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
{
self endon( "death" );
if ( !isdefined( self ) )
return;
if ( isdefined( self.doingadditivepain ) )
return;
if ( var_0 < self.minpaindamage )
return;
self.doingadditivepain = 1;
var_7 = undefined;
if ( animscripts\utility::damagelocationisany( "left_arm_lower", "left_arm_upper", "left_hand" ) )
var_7 = animscripts\utility::lookupanim( "additive_pain", "left_arm" );
if ( animscripts\utility::damagelocationisany( "right_arm_lower", "right_arm_upper", "right_hand" ) )
var_7 = animscripts\utility::lookupanim( "additive_pain", "right_arm" );
else if ( animscripts\utility::damagelocationisany( "left_leg_upper", "left_leg_lower", "left_foot" ) )
var_7 = animscripts\utility::lookupanim( "additive_pain", "left_leg" );
else if ( animscripts\utility::damagelocationisany( "right_leg_upper", "right_leg_lower", "right_foot" ) )
var_7 = animscripts\utility::lookupanim( "additive_pain", "right_leg" );
else
{
var_8 = animscripts\utility::lookupanim( "additive_pain", "default" );
var_7 = var_8[randomint( var_8.size )];
}
self setanimlimited( %add_pain, 1, 0.1, 1 );
self setanimlimited( var_7, 1, 0, 1 );
wait 0.4;
self clearanim( var_7, 0.2 );
self clearanim( %add_pain, 0.2 );
self.doingadditivepain = undefined;
}
pain_setflaggedanimknob( var_0, var_1, var_2, var_3, var_4 )
{
if ( !isdefined( var_2 ) )
var_2 = 1;
if ( !isdefined( var_3 ) )
var_3 = 0.2;
if ( !isdefined( var_4 ) )
var_4 = 1;
self setflaggedanimknob( var_0, var_1, var_2, var_3, var_4 );
self.facialanimidx = animscripts\face::playfacialanim( var_1, "pain", self.facialanimidx );
}
pain_setflaggedanimknobrestart( var_0, var_1, var_2, var_3, var_4 )
{
if ( !isdefined( var_2 ) )
var_2 = 1;
if ( !isdefined( var_3 ) )
var_3 = 0.2;
if ( !isdefined( var_4 ) )
var_4 = 1;
self setflaggedanimknobrestart( var_0, var_1, var_2, var_3, var_4 );
self.facialanimidx = animscripts\face::playfacialanim( var_1, "pain", self.facialanimidx );
}
pain_setflaggedanimknoballrestart( var_0, var_1, var_2, var_3, var_4, var_5 )
{
if ( !isdefined( var_3 ) )
var_3 = 1;
if ( !isdefined( var_4 ) )
var_4 = 0.2;
if ( !isdefined( var_5 ) )
var_5 = 1;
self setflaggedanimknoballrestart( var_0, var_1, var_2, var_3, var_4, var_5 );
self.facialanimidx = animscripts\face::playfacialanim( var_1, "pain", self.facialanimidx );
}