// IW6 GSC SOURCE // Generated by https://github.com/xensik/gsc-tool main() { self.animsubstate = "none"; settimeofnextsound(); self.timeofnextsound = self.timeofnextsound + 2000; self.bidlehitreaction = 0; self scragentsetgoalpos( self.origin ); self scragentsetorientmode( "face angle abs", self.angles ); self scragentsetanimmode( "anim deltas" ); self scragentsetphysicsmode( "gravity" ); updatestate(); } end_script() { if ( isdefined( self.prevturnrate ) ) { self scragentsetmaxturnspeed( self.prevturnrate ); self.prevturnrate = undefined; } } updatestate() { self endon( "killanimscript" ); self endon( "cancelidleloop" ); for (;;) { var_0 = self.animsubstate; var_1 = determinestate(); if ( var_1 != self.animsubstate ) enterstate( var_1 ); updateangle(); switch ( self.animsubstate ) { case "idle_combat": wait 0.2; break; case "idle_noncombat": if ( var_0 == "none" ) { if ( self.movemode == "run" || self.movemode == "sprint" ) self playsoundonmovingent( common_scripts\utility::ter_op( self.biswolf, "anml_wolf_pants_mp_fast", "anml_dog_pants_mp_fast" ) ); else self playsoundonmovingent( common_scripts\utility::ter_op( self.biswolf, "anml_wolf_pants_mp_med", "anml_dog_pants_mp_med" ) ); } else if ( gettime() > self.timeofnextsound ) { if ( randomint( 10 ) < 4 ) self playsoundonmovingent( common_scripts\utility::ter_op( self.biswolf, "anml_wolf_whine", "anml_dog_whine" ) ); else self playsoundonmovingent( common_scripts\utility::ter_op( self.biswolf, "anml_wolf_pants_mp_med", "anml_dog_pants_mp_med" ) ); settimeofnextsound(); } wait 0.5; break; default: wait 1; break; } } } determinestate() { if ( shouldattackidle() ) return "idle_combat"; else return "idle_noncombat"; } enterstate( var_0 ) { exitstate( self.animsubstate ); self.animsubstate = var_0; playidleanim(); } exitstate( var_0 ) { if ( isdefined( self.prevturnrate ) ) { self scragentsetmaxturnspeed( self.prevturnrate ); self.prevturnrate = undefined; } } playidleanim() { if ( self.animsubstate == "idle_combat" ) self setanimstate( "attack_idle" ); else self setanimstate( "casual_idle" ); } updateangle() { var_0 = undefined; if ( isdefined( self.enemy ) && distancesquared( self.enemy.origin, self.origin ) < 1048576 ) var_0 = self.enemy; else if ( isdefined( self.owner ) && distancesquared( self.owner.origin, self.origin ) > 576 ) var_0 = self.owner; if ( isdefined( var_0 ) ) { var_1 = var_0.origin - self.origin; var_2 = vectortoangles( var_1 ); if ( abs( angleclamp180( var_2[1] - self.angles[1] ) ) > 1 ) turntoangle( var_2[1] ); } } shouldattackidle() { return isdefined( self.enemy ) && maps\mp\_utility::isreallyalive( self.enemy ) && distancesquared( self.origin, self.enemy.origin ) < 1000000; } getturnanimstate( var_0 ) { if ( shouldattackidle() ) { if ( var_0 < -135 || var_0 > 135 ) return "attack_turn_180"; else if ( var_0 < 0 ) return "attack_turn_right_90"; else return "attack_turn_left_90"; } else if ( var_0 < -135 || var_0 > 135 ) return "casual_turn_180"; else if ( var_0 < 0 ) return "casual_turn_right_90"; else return "casual_turn_left_90"; } turntoangle( var_0 ) { var_1 = self.angles[1]; var_2 = angleclamp180( var_0 - var_1 ); if ( -0.5 < var_2 && var_2 < 0.5 ) return; if ( -10 < var_2 && var_2 < 10 ) { rotatetoangle( var_0, 2 ); return; } var_3 = getturnanimstate( var_2 ); var_4 = self getanimentry( var_3, 0 ); var_5 = getanimlength( var_4 ); var_6 = getangledelta3d( var_4 ); self scragentsetanimmode( "anim angle delta" ); if ( animhasnotetrack( var_4, "turn_begin" ) && animhasnotetrack( var_4, "turn_end" ) ) { maps\mp\agents\_scriptedagents::playanimnuntilnotetrack( var_3, 0, "turn_in_place" ); var_7 = getnotetracktimes( var_4, "turn_begin" ); var_8 = getnotetracktimes( var_4, "turn_end" ); var_9 = ( var_8[0] - var_7[0] ) * var_5; var_10 = angleclamp180( var_2 - var_6[1] ); var_11 = abs( var_10 ) / var_9 / 20; var_11 = var_11 * 3.14159 / 180; var_12 = ( 0, angleclamp180( self.angles[1] + var_10 ), 0 ); self.prevturnrate = self scragentgetmaxturnspeed(); self scragentsetmaxturnspeed( var_11 ); self scragentsetorientmode( "face angle abs", var_12 ); maps\mp\agents\_scriptedagents::waituntilnotetrack( "turn_in_place", "turn_end" ); self scragentsetmaxturnspeed( self.prevturnrate ); self.prevturnrate = undefined; maps\mp\agents\_scriptedagents::waituntilnotetrack( "turn_in_place", "end" ); } else { self.prevturnrate = self scragentgetmaxturnspeed(); var_11 = abs( angleclamp180( var_2 - var_6[1] ) ) / var_5 / 20; var_11 = var_11 * 3.14159 / 180; self scragentsetmaxturnspeed( var_11 ); var_12 = ( 0, angleclamp180( var_0 - var_6[1] ), 0 ); self scragentsetorientmode( "face angle abs", var_12 ); maps\mp\agents\_scriptedagents::playanimnuntilnotetrack( var_3, 0, "turn_in_place" ); self scragentsetmaxturnspeed( self.prevturnrate ); self.prevturnrate = undefined; } self scragentsetanimmode( "anim deltas" ); playidleanim(); } rotatetoangle( var_0, var_1 ) { if ( abs( angleclamp180( var_0 - self.angles[1] ) ) <= var_1 ) return; var_2 = ( 0, var_0, 0 ); self scragentsetorientmode( "face angle abs", var_2 ); while ( angleclamp180( var_0 - self.angles[1] ) > var_1 ) wait 0.1; } settimeofnextsound() { self.timeofnextsound = gettime() + 8000 + randomint( 5000 ); } dohitreaction( var_0 ) { self.blockgoalpos = 1; self.statelocked = 1; self.bidlehitreaction = 1; var_1 = angleclamp180( var_0 - self.angles[1] ); if ( var_1 > 0 ) var_2 = 1; else var_2 = 0; self notify( "cancelidleloop" ); self scragentsetanimmode( "anim deltas" ); self scragentsetorientmode( "face angle abs", self.angles ); maps\mp\agents\_scriptedagents::playanimnuntilnotetrack( "stand_pain", var_2, "stand_pain" ); self.blockgoalpos = 0; self.statelocked = 0; self.bidlehitreaction = 0; self scragentsetorientmode( "face angle abs", self.angles ); self.animsubstate = "none"; thread updatestate(); } ondamage( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 ) { if ( self.bidlehitreaction ) return; var_10 = vectortoangles( var_7 ); var_11 = var_10[1] - 180; dohitreaction( var_11 ); } onflashbanged( var_0, var_1, var_2, var_3, var_4, var_5 ) { if ( self.bidlehitreaction ) return; dohitreaction( self.angles[1] + 180 ); }