320 lines
9.7 KiB
Plaintext
320 lines
9.7 KiB
Plaintext
|
#include maps\_utility;
|
||
|
#include animscripts\utility;
|
||
|
#include common_scripts\utility;
|
||
|
|
||
|
/*
|
||
|
=============
|
||
|
///ScriptDocBegin
|
||
|
"Name: enable_casual_killer( <enable_casual_killer> )"
|
||
|
"Summary: "
|
||
|
"Module: Entity"
|
||
|
"CallOn: An entity"
|
||
|
"MandatoryArg: <param1>: "
|
||
|
"OptionalArg: <param2>: "
|
||
|
"Example: "
|
||
|
"SPMP: singleplayer"
|
||
|
///ScriptDocEnd
|
||
|
=============
|
||
|
*/
|
||
|
enable_casual_killer()
|
||
|
{
|
||
|
if( isdefined( self.casual_killer ) )
|
||
|
return;
|
||
|
|
||
|
self disable_turnAnims();
|
||
|
self disable_surprise();
|
||
|
|
||
|
self.casual_killer = true;
|
||
|
self.no_pistol_switch = true;
|
||
|
self.ignoresuppression = true;
|
||
|
self.maxFaceEnemyDist = 0;
|
||
|
self.noRunReload = true;
|
||
|
self.ammoCheatInterval = 2000;
|
||
|
self.disableBulletWhizbyReaction = true;
|
||
|
self.useChokePoints = false;
|
||
|
self.disableDoorBehavior = true;
|
||
|
self.combatmode = "no_cover";
|
||
|
self.oldgrenadeawareness = self.grenadeawareness;
|
||
|
self.grenadeawareness = 0;
|
||
|
self.oldGrenadeReturnThrow = self.noGrenadeReturnThrow;
|
||
|
self.noGrenadeReturnThrow = true;
|
||
|
|
||
|
self.old_walkDist = self.walkDist;
|
||
|
self.old_walkDistFacingMotion = self.walkDistFacingMotion;
|
||
|
self.walkDist = 0;
|
||
|
self.walkDistFacingMotion = 0;
|
||
|
|
||
|
self init_casual_killer_animsets();
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
=============
|
||
|
///ScriptDocBegin
|
||
|
"Name: disable_casual_killer( <disable_casual_killer> )"
|
||
|
"Summary: "
|
||
|
"Module: Entity"
|
||
|
"CallOn: An entity"
|
||
|
"MandatoryArg: <param1>: "
|
||
|
"OptionalArg: <param2>: "
|
||
|
"Example: "
|
||
|
"SPMP: singleplayer"
|
||
|
///ScriptDocEnd
|
||
|
=============
|
||
|
*/
|
||
|
disable_casual_killer()
|
||
|
{
|
||
|
if( !isdefined( self.casual_killer ) )
|
||
|
return;
|
||
|
|
||
|
self enable_turnAnims();
|
||
|
|
||
|
self.casual_killer = undefined;
|
||
|
self.no_pistol_switch = undefined;
|
||
|
self.ignoresuppression = false;
|
||
|
self.maxFaceEnemyDist = 512;
|
||
|
self.noRunReload = undefined;
|
||
|
self.disableBulletWhizbyReaction = undefined;
|
||
|
self.useChokePoints = true;
|
||
|
self.disableDoorBehavior = undefined;
|
||
|
self.combatmode = "cover";
|
||
|
self.grenadeawareness = self.oldgrenadeawareness;
|
||
|
self.noGrenadeReturnThrow = self.oldGrenadeReturnThrow;
|
||
|
|
||
|
self.walkDist = self.old_walkDist;
|
||
|
self.walkDistFacingMotion = self.old_walkDistFacingMotion;
|
||
|
|
||
|
self animscripts\animset::clear_custom_animset();
|
||
|
|
||
|
self.prevMoveMode = "none";
|
||
|
|
||
|
self allowedStances( "stand", "crouch", "prone" );
|
||
|
|
||
|
self animscripts\animset::set_animset_run_n_gun();
|
||
|
|
||
|
self.customMoveTransition = undefined;
|
||
|
self.permanentCustomMoveTransition = undefined;
|
||
|
self.approachTypeFunc = undefined;
|
||
|
self.approachConditionCheckFunc = undefined;
|
||
|
self.disableCoverArrivalsOnly = undefined;
|
||
|
}
|
||
|
|
||
|
#using_animtree( "generic_human" );
|
||
|
init_casual_killer_animsets()
|
||
|
{
|
||
|
// move animations
|
||
|
animset = [];
|
||
|
animset[ "sprint" ] = %casual_killer_jog_A;
|
||
|
animset[ "straight" ] = %casual_killer_walk_F;
|
||
|
|
||
|
animset[ "move_f" ] = %casual_killer_walk_F;
|
||
|
animset[ "move_l" ] = %walk_left;
|
||
|
animset[ "move_r" ] = %walk_right;
|
||
|
animset[ "move_b" ] = %walk_backward;
|
||
|
|
||
|
animset[ "crouch" ] = %crouch_fastwalk_F;
|
||
|
animset[ "crouch_l" ] = %crouch_fastwalk_L;
|
||
|
animset[ "crouch_r" ] = %crouch_fastwalk_R;
|
||
|
animset[ "crouch_b" ] = %crouch_fastwalk_B;
|
||
|
|
||
|
animset[ "stairs_up" ] = %traverse_stair_run_01;
|
||
|
animset[ "stairs_down" ] = %traverse_stair_run_down;
|
||
|
|
||
|
self.customMoveAnimSet[ "run" ] = animset;
|
||
|
self.customMoveAnimSet[ "walk" ] = animset;
|
||
|
//self.customMoveAnimSet[ "cqb" ] = animset;
|
||
|
|
||
|
self.customIdleAnimSet = [];
|
||
|
self.customIdleAnimSet[ "stand" ] = %casual_killer_stand_aim5;
|
||
|
self.customIdleAnimSet[ "stand_add" ] = %casual_killer_stand_idle;
|
||
|
|
||
|
self.a.pose = "stand";
|
||
|
self allowedStances( "stand" );
|
||
|
|
||
|
// combat animations
|
||
|
animset = anim.animsets.defaultStand;
|
||
|
|
||
|
animset[ "add_aim_up" ] = %casual_killer_stand_aim8;
|
||
|
animset[ "add_aim_down" ] = %casual_killer_stand_aim2;
|
||
|
animset[ "add_aim_left" ] = %casual_killer_stand_aim4;
|
||
|
animset[ "add_aim_right" ] = %casual_killer_stand_aim6;
|
||
|
|
||
|
animset[ "straight_level" ] = %casual_killer_stand_aim5;
|
||
|
|
||
|
animset[ "fire" ] = %casual_killer_stand_auto;
|
||
|
animset[ "single" ] = array( %casual_killer_stand_auto );
|
||
|
|
||
|
// remove this burst, semi nonsense soon
|
||
|
animset[ "burst2" ] = %casual_killer_stand_auto;
|
||
|
animset[ "burst3" ] = %casual_killer_stand_auto;
|
||
|
animset[ "burst4" ] = %casual_killer_stand_auto;
|
||
|
animset[ "burst5" ] = %casual_killer_stand_auto;
|
||
|
animset[ "burst6" ] = %casual_killer_stand_auto;
|
||
|
animset[ "semi2" ] = %casual_killer_stand_auto;
|
||
|
animset[ "semi3" ] = %casual_killer_stand_auto;
|
||
|
animset[ "semi4" ] = %casual_killer_stand_auto;
|
||
|
animset[ "semi5" ] = %casual_killer_stand_auto;
|
||
|
|
||
|
animset[ "exposed_idle" ] = array( %casual_killer_stand_idle );
|
||
|
|
||
|
self animscripts\animset::init_animset_complete_custom_stand( animset );
|
||
|
self animscripts\animset::init_animset_complete_custom_crouch( animset );
|
||
|
|
||
|
self set_casual_killer_run_n_gun();
|
||
|
|
||
|
animscripts\init_move_transitions::init_move_transition_arrays();
|
||
|
|
||
|
//exits
|
||
|
self.customMoveTransition = ::casual_killer_startMoveTransition;
|
||
|
self.permanentCustomMoveTransition = true;
|
||
|
|
||
|
//arrivals
|
||
|
anim.coverTrans[ "casual_killer" ] = [];
|
||
|
anim.coverTrans[ "casual_killer" ][ 1 ] = %casual_killer_walk_stop;
|
||
|
anim.coverTrans[ "casual_killer" ][ 2 ] = %casual_killer_walk_stop;
|
||
|
anim.coverTrans[ "casual_killer" ][ 3 ] = %casual_killer_walk_stop;
|
||
|
anim.coverTrans[ "casual_killer" ][ 4 ] = %casual_killer_walk_stop;
|
||
|
anim.coverTrans[ "casual_killer" ][ 6 ] = %casual_killer_walk_stop;
|
||
|
anim.coverTrans[ "casual_killer" ][ 7 ] = %casual_killer_walk_stop;
|
||
|
anim.coverTrans[ "casual_killer" ][ 8 ] = %casual_killer_walk_stop;
|
||
|
anim.coverTrans[ "casual_killer" ][ 9 ] = %casual_killer_walk_stop;
|
||
|
|
||
|
anim.coverTrans[ "casual_killer_sprint" ] = [];
|
||
|
anim.coverTrans[ "casual_killer_sprint" ][ 1 ] = %casual_killer_jog_stop;
|
||
|
anim.coverTrans[ "casual_killer_sprint" ][ 2 ] = %casual_killer_jog_stop;
|
||
|
anim.coverTrans[ "casual_killer_sprint" ][ 3 ] = %casual_killer_jog_stop;
|
||
|
anim.coverTrans[ "casual_killer_sprint" ][ 4 ] = %casual_killer_jog_stop;
|
||
|
anim.coverTrans[ "casual_killer_sprint" ][ 6 ] = %casual_killer_jog_stop;
|
||
|
anim.coverTrans[ "casual_killer_sprint" ][ 7 ] = %casual_killer_jog_stop;
|
||
|
anim.coverTrans[ "casual_killer_sprint" ][ 8 ] = %casual_killer_jog_stop;
|
||
|
anim.coverTrans[ "casual_killer_sprint" ][ 9 ] = %casual_killer_jog_stop;
|
||
|
|
||
|
casual_killerTransTypes = [];
|
||
|
casual_killerTransTypes[0] = "casual_killer";
|
||
|
casual_killerTransTypes[1] = "casual_killer_sprint";
|
||
|
|
||
|
for ( j = 0; j < casual_killerTransTypes.size; j++ )
|
||
|
{
|
||
|
trans = casual_killerTransTypes[ j ];
|
||
|
|
||
|
for ( i = 1; i <= 9; i++ )
|
||
|
{
|
||
|
if ( i == 5 )
|
||
|
continue;
|
||
|
|
||
|
if ( isdefined( anim.coverTrans[ trans ][ i ] ) )
|
||
|
{
|
||
|
anim.coverTransDist [ trans ][ i ] = getMoveDelta( anim.coverTrans[ trans ][ i ], 0, 1 );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
anim.coverTransAngles[ "casual_killer" ][ 1 ] = 45;
|
||
|
anim.coverTransAngles[ "casual_killer" ][ 2 ] = 0;
|
||
|
anim.coverTransAngles[ "casual_killer" ][ 3 ] = -45;
|
||
|
anim.coverTransAngles[ "casual_killer" ][ 4 ] = 90;
|
||
|
anim.coverTransAngles[ "casual_killer" ][ 6 ] = -90;
|
||
|
anim.coverTransAngles[ "casual_killer" ][ 8 ] = 180;
|
||
|
|
||
|
anim.coverTransAngles[ "casual_killer_sprint" ][ 1 ] = 45;
|
||
|
anim.coverTransAngles[ "casual_killer_sprint" ][ 2 ] = 0;
|
||
|
anim.coverTransAngles[ "casual_killer_sprint" ][ 3 ] = -45;
|
||
|
anim.coverTransAngles[ "casual_killer_sprint" ][ 4 ] = 90;
|
||
|
anim.coverTransAngles[ "casual_killer_sprint" ][ 6 ] = -90;
|
||
|
anim.coverTransAngles[ "casual_killer_sprint" ][ 8 ] = 180;
|
||
|
|
||
|
anim.arrivalEndStance[ "casual_killer" ] = "stand";
|
||
|
anim.arrivalEndStance[ "casual_killer_sprint" ] = "stand";
|
||
|
|
||
|
self.approachTypeFunc = ::casual_killer_approach_type;
|
||
|
self.approachConditionCheckFunc = ::casual_killer_approach_conditions;
|
||
|
self.disableCoverArrivalsOnly = true;
|
||
|
}
|
||
|
|
||
|
casual_killer_approach_conditions( node )
|
||
|
{
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
casual_killer_approach_type()
|
||
|
{
|
||
|
if( self casual_killer_is_jogging() )
|
||
|
return "casual_killer_sprint";
|
||
|
|
||
|
return "casual_killer";
|
||
|
}
|
||
|
|
||
|
casual_killer_startMoveTransition()
|
||
|
{
|
||
|
if ( isdefined( self.disableExits ) )
|
||
|
return;
|
||
|
|
||
|
self orientmode( "face angle", self.angles[1] );
|
||
|
self animmode( "zonly_physics", false );
|
||
|
|
||
|
rate = randomfloatrange( 0.9, 1.1 );
|
||
|
|
||
|
|
||
|
if( self casual_killer_is_jogging() )
|
||
|
startAnim = %casual_killer_jog_start;
|
||
|
else
|
||
|
startAnim = %casual_killer_walk_start;
|
||
|
|
||
|
self setFlaggedAnimKnobAllRestart( "startmove", startAnim, %body, 1, .1, rate );
|
||
|
self animscripts\shared::DoNoteTracks( "startmove" );
|
||
|
|
||
|
self OrientMode( "face default" );
|
||
|
self animmode( "none", false );
|
||
|
|
||
|
if ( animHasNotetrack( startAnim, "code_move" ) )
|
||
|
self animscripts\shared::DoNoteTracks( "startmove" ); // return on code_move
|
||
|
}
|
||
|
|
||
|
casual_killer_is_jogging()
|
||
|
{
|
||
|
if( !isdefined( self.run_overrideanim ) )
|
||
|
return false;
|
||
|
|
||
|
if( isarray( self.run_overrideanim ) )
|
||
|
{
|
||
|
if( self.run_overrideanim[0] == %casual_killer_jog_A || self.run_overrideanim[0] == %casual_killer_jog_B )
|
||
|
return true;
|
||
|
else
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
if( self.run_overrideanim == %casual_killer_jog_A || self.run_overrideanim == %casual_killer_jog_B )
|
||
|
return true;
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
set_casual_killer_run_n_gun( type )
|
||
|
{
|
||
|
self.maxRunNGunAngle = 90;
|
||
|
self.runNGunTransitionPoint = 1;
|
||
|
self.runNGunIncrement = 0.2;
|
||
|
|
||
|
if( !isdefined( type ) )
|
||
|
type = "straight";
|
||
|
|
||
|
self clearanim( %run_n_gun, 0.2 );
|
||
|
|
||
|
switch( type )
|
||
|
{
|
||
|
case "straight":
|
||
|
self.runNGunAnims[ "F" ] = %casual_killer_walk_shoot_F;
|
||
|
self.runNGunAnims[ "L" ] = %casual_killer_walk_shoot_L;
|
||
|
self.runNGunAnims[ "R" ] = %casual_killer_walk_shoot_R;
|
||
|
self.runNGunAnims[ "LB" ] = %casual_killer_walk_shoot_L;
|
||
|
self.runNGunAnims[ "RB" ] = %casual_killer_walk_shoot_R;
|
||
|
break;
|
||
|
|
||
|
case "down":
|
||
|
self.runNGunAnims[ "F" ] = %casual_killer_walk_shoot_F_aimdown;
|
||
|
self.runNGunAnims[ "L" ] = %casual_killer_walk_shoot_L_aimdown;
|
||
|
self.runNGunAnims[ "R" ] = %casual_killer_walk_shoot_R_aimdown;
|
||
|
self.runNGunAnims[ "LB" ] = %casual_killer_walk_shoot_L_aimdown;
|
||
|
self.runNGunAnims[ "RB" ] = %casual_killer_walk_shoot_R_aimdown;
|
||
|
break;
|
||
|
}
|
||
|
}
|