281 lines
8.0 KiB
Plaintext
281 lines
8.0 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
stealth_visibility_friendly_main()
|
|
{
|
|
friendly_init();
|
|
thread friendly_visibility_logic();
|
|
}
|
|
|
|
friendly_visibility_logic()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "pain_death" );
|
|
var_0 = self._stealth.logic.current_stance_func;
|
|
|
|
if ( isplayer( self ) )
|
|
thread player_movespeed_calc_loop();
|
|
|
|
for (;;)
|
|
{
|
|
maps\_utility::ent_flag_wait( "_stealth_enabled" );
|
|
self [[ var_0 ]]();
|
|
self.maxvisibledist = friendly_compute_score();
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
friendly_getvelocity()
|
|
{
|
|
return length( self getvelocity() );
|
|
}
|
|
|
|
player_getvelocity_pc()
|
|
{
|
|
var_0 = length( self getvelocity() );
|
|
var_1 = self._stealth.logic.stance;
|
|
var_2 = [];
|
|
var_2["stand"] = 30;
|
|
var_2["crouch"] = 15;
|
|
var_2["prone"] = 4;
|
|
var_3 = [];
|
|
var_3["stand"] = 40;
|
|
var_3["crouch"] = 25;
|
|
var_3["prone"] = 10;
|
|
|
|
if ( !var_0 )
|
|
self._stealth.logic.player_pc_velocity = 0;
|
|
else if ( var_0 > self._stealth.logic.player_pc_velocity )
|
|
{
|
|
self._stealth.logic.player_pc_velocity = self._stealth.logic.player_pc_velocity + var_2[var_1];
|
|
|
|
if ( self._stealth.logic.player_pc_velocity > var_0 )
|
|
self._stealth.logic.player_pc_velocity = var_0;
|
|
}
|
|
else if ( var_0 < self._stealth.logic.player_pc_velocity )
|
|
{
|
|
self._stealth.logic.player_pc_velocity = self._stealth.logic.player_pc_velocity - var_3[var_1];
|
|
|
|
if ( self._stealth.logic.player_pc_velocity < 0 )
|
|
self._stealth.logic.player_pc_velocity = 0;
|
|
}
|
|
|
|
return self._stealth.logic.player_pc_velocity;
|
|
}
|
|
|
|
friendly_compute_score( var_0 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = self._stealth.logic.stance;
|
|
|
|
if ( var_0 == "back" )
|
|
var_0 = "prone";
|
|
|
|
if ( isdefined( self.type ) && self.type == "dog" )
|
|
{
|
|
if ( isdefined( self.sprint ) && self.sprint )
|
|
var_0 = "crouch";
|
|
else
|
|
var_0 = "prone";
|
|
}
|
|
|
|
if ( maps\_stealth_utility::stealth_group_spotted_flag() )
|
|
var_1 = "spotted";
|
|
else
|
|
var_1 = "hidden";
|
|
|
|
var_2 = level._stealth.logic.detect_range[var_1][var_0];
|
|
|
|
if ( maps\_utility::ent_flag( "_stealth_in_shadow" ) )
|
|
{
|
|
var_2 = var_2 * 0.5;
|
|
|
|
if ( var_2 < level._stealth.logic.detect_range["hidden"]["prone"] )
|
|
var_2 = level._stealth.logic.detect_range["hidden"]["prone"];
|
|
}
|
|
|
|
var_3 = self._stealth.logic.movespeed_multiplier[var_1][var_0];
|
|
|
|
if ( isdefined( self._stealth_move_detection_cap ) && var_3 > self._stealth_move_detection_cap )
|
|
var_3 = self._stealth_move_detection_cap;
|
|
|
|
return var_2 + var_3;
|
|
}
|
|
|
|
friendly_getstance_ai()
|
|
{
|
|
return self.a.pose;
|
|
}
|
|
|
|
friendly_getangles_ai()
|
|
{
|
|
return self.angles;
|
|
}
|
|
|
|
friendly_compute_stances_ai()
|
|
{
|
|
self._stealth.logic.stance = self [[ self._stealth.logic.getstance_func ]]();
|
|
self._stealth.logic.oldstance = self._stealth.logic.stance;
|
|
}
|
|
|
|
player_movespeed_calc_loop()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "pain_death" );
|
|
var_0 = self._stealth.logic.getangles_func;
|
|
var_1 = self._stealth.logic.getvelocity_func;
|
|
var_2 = self [[ var_0 ]]();
|
|
|
|
for (;;)
|
|
{
|
|
maps\_utility::ent_flag_wait( "_stealth_enabled" );
|
|
var_3 = undefined;
|
|
|
|
if ( maps\_utility::ent_flag( "_stealth_in_shadow" ) )
|
|
var_3 = 0;
|
|
else
|
|
var_3 = self [[ var_1 ]]();
|
|
|
|
foreach ( var_9, var_5 in self._stealth.logic.movespeed_multiplier )
|
|
{
|
|
foreach ( var_8, var_7 in var_5 )
|
|
var_7 = var_3 * self._stealth.logic.movespeed_scale[var_9][var_8];
|
|
}
|
|
|
|
var_2 = self [[ var_0 ]]();
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
friendly_getstance_player()
|
|
{
|
|
return self getstance();
|
|
}
|
|
|
|
friendly_getangles_player()
|
|
{
|
|
return self getplayerangles();
|
|
}
|
|
|
|
friendly_compute_stances_player()
|
|
{
|
|
var_0 = self [[ self._stealth.logic.getstance_func ]]();
|
|
|
|
if ( !self._stealth.logic.stance_change )
|
|
{
|
|
switch ( var_0 )
|
|
{
|
|
case "prone":
|
|
if ( self._stealth.logic.oldstance != "prone" )
|
|
self._stealth.logic.stance_change = self._stealth.logic.stance_change_time;
|
|
|
|
break;
|
|
case "crouch":
|
|
if ( self._stealth.logic.oldstance == "stand" )
|
|
self._stealth.logic.stance_change = self._stealth.logic.stance_change_time;
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( self._stealth.logic.stance_change )
|
|
{
|
|
self._stealth.logic.stance = self._stealth.logic.oldstance;
|
|
|
|
if ( self._stealth.logic.stance_change > 0.05 )
|
|
self._stealth.logic.stance_change = self._stealth.logic.stance_change - 0.05;
|
|
else
|
|
{
|
|
self._stealth.logic.stance_change = 0;
|
|
self._stealth.logic.stance = var_0;
|
|
self._stealth.logic.oldstance = var_0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
self._stealth.logic.stance = var_0;
|
|
self._stealth.logic.oldstance = var_0;
|
|
}
|
|
}
|
|
|
|
friendly_init()
|
|
{
|
|
maps\_utility::ent_flag_init( "_stealth_in_shadow" );
|
|
maps\_utility::ent_flag_init( "_stealth_enabled" );
|
|
maps\_utility::ent_flag_set( "_stealth_enabled" );
|
|
maps\_stealth_shared_utilities::group_flag_init( "_stealth_spotted" );
|
|
maps\_stealth_shared_utilities::group_add_to_global_list();
|
|
self._stealth = spawnstruct();
|
|
self._stealth.logic = spawnstruct();
|
|
|
|
if ( isplayer( self ) )
|
|
{
|
|
self._stealth.logic.getstance_func = ::friendly_getstance_player;
|
|
self._stealth.logic.getangles_func = ::friendly_getangles_player;
|
|
|
|
if ( level.console )
|
|
self._stealth.logic.getvelocity_func = ::friendly_getvelocity;
|
|
else
|
|
{
|
|
self._stealth.logic.getvelocity_func = ::player_getvelocity_pc;
|
|
self._stealth.logic.player_pc_velocity = 0;
|
|
}
|
|
|
|
self._stealth.logic.current_stance_func = ::friendly_compute_stances_player;
|
|
}
|
|
else
|
|
{
|
|
self._stealth.logic.getstance_func = ::friendly_getstance_ai;
|
|
self._stealth.logic.getangles_func = ::friendly_getangles_ai;
|
|
self._stealth.logic.getvelocity_func = ::friendly_getvelocity;
|
|
self._stealth.logic.current_stance_func = ::friendly_compute_stances_ai;
|
|
}
|
|
|
|
self._stealth.logic.stance_change_time = 0.2;
|
|
self._stealth.logic.stance_change = 0;
|
|
self._stealth.logic.oldstance = self [[ self._stealth.logic.getstance_func ]]();
|
|
self._stealth.logic.stance = self [[ self._stealth.logic.getstance_func ]]();
|
|
self._stealth.logic.spotted_list = [];
|
|
self._stealth.logic.movespeed_multiplier = [];
|
|
self._stealth.logic.movespeed_scale = [];
|
|
self._stealth.logic.movespeed_multiplier["hidden"] = [];
|
|
self._stealth.logic.movespeed_multiplier["hidden"]["prone"] = 0;
|
|
self._stealth.logic.movespeed_multiplier["hidden"]["crouch"] = 0;
|
|
self._stealth.logic.movespeed_multiplier["hidden"]["stand"] = 0;
|
|
self._stealth.logic.movespeed_multiplier["spotted"] = [];
|
|
self._stealth.logic.movespeed_multiplier["spotted"]["prone"] = 0;
|
|
self._stealth.logic.movespeed_multiplier["spotted"]["crouch"] = 0;
|
|
self._stealth.logic.movespeed_multiplier["spotted"]["stand"] = 0;
|
|
friendly_default_movespeed_scale();
|
|
}
|
|
|
|
friendly_default_movespeed_scale()
|
|
{
|
|
var_0 = [];
|
|
var_0["prone"] = 3;
|
|
var_0["crouch"] = 2;
|
|
var_0["stand"] = 2;
|
|
var_1 = [];
|
|
var_1["prone"] = 2;
|
|
var_1["crouch"] = 2;
|
|
var_1["stand"] = 2;
|
|
friendly_set_movespeed_scale( var_0, var_1 );
|
|
}
|
|
|
|
friendly_set_movespeed_scale( var_0, var_1 )
|
|
{
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
self._stealth.logic.movespeed_scale["hidden"]["prone"] = var_0["prone"];
|
|
self._stealth.logic.movespeed_scale["hidden"]["crouch"] = var_0["crouch"];
|
|
self._stealth.logic.movespeed_scale["hidden"]["stand"] = var_0["stand"];
|
|
}
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
self._stealth.logic.movespeed_scale["spotted"]["prone"] = var_1["prone"];
|
|
self._stealth.logic.movespeed_scale["spotted"]["crouch"] = var_1["crouch"];
|
|
self._stealth.logic.movespeed_scale["spotted"]["stand"] = var_1["stand"];
|
|
}
|
|
}
|