This commit is contained in:
2024-02-13 13:20:49 +01:00
commit 872504afef
1761 changed files with 871764 additions and 0 deletions

36
maps/_ambient.gsc Normal file
View File

@ -0,0 +1,36 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
use_eq_settings( var_0, var_1 )
{
if ( level.player maps\_utility::ent_flag( "player_has_red_flashing_overlay" ) )
return;
maps\_audio::set_filter( var_0, var_1 );
}
deactivate_index( var_0 )
{
level.eq_track[var_0] = "";
level.player deactivateeq( var_0 );
}
blend_to_eq_track( var_0, var_1 )
{
var_2 = 1.0;
if ( isdefined( var_1 ) )
var_2 = var_1;
var_3 = 0.05;
var_4 = var_2 / var_3;
var_5 = 1 / var_4;
for ( var_6 = 0; var_6 <= 1; var_6 = var_6 + var_5 )
{
level.player seteqlerp( var_6, var_0 );
wait( var_3 );
}
level.player seteqlerp( 1, var_0 );
}

2622
maps/_anim.gsc Normal file

File diff suppressed because it is too large Load Diff

120
maps/_animatedmodels.gsc Normal file
View File

@ -0,0 +1,120 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
#using_animtree("animated_props");
main()
{
waittillframeend;
init_wind_if_uninitialized();
level.init_animatedmodels_dump = [];
level.anim_prop_models_animtree = #animtree;
if ( !isdefined( level.anim_prop_models ) )
level.anim_prop_models = [];
if ( !isdefined( level.anim_prop_init_threads ) )
level.anim_prop_init_threads = [];
var_0 = getentarray( "animated_model", "targetname" );
common_scripts\utility::array_thread( var_0, ::model_init );
if ( isdefined( level.init_animatedmodels_dump ) && level.init_animatedmodels_dump.size )
{
var_1 = " ";
foreach ( var_3 in level.init_animatedmodels_dump )
var_1 = var_1 + ( var_3 + " " );
}
foreach ( var_6 in var_0 )
{
if ( isdefined( level.anim_prop_init_threads[var_6.model] ) )
{
var_6 thread [[ level.anim_prop_init_threads[var_6.model] ]]();
continue;
}
var_7 = getarraykeys( level.anim_prop_models[var_6.model] );
var_8 = 0;
foreach ( var_10 in var_7 )
{
if ( var_10 == "still" )
{
var_8 = 1;
break;
}
}
if ( var_8 )
var_6 thread animatetreewind();
else
var_6 thread animatemodel();
}
}
init_wind_if_uninitialized()
{
if ( isdefined( level.wind ) )
return;
level.wind = spawnstruct();
level.wind.rate = 0.4;
level.wind.weight = 1;
level.wind.variance = 0.2;
}
model_init()
{
if ( !isdefined( level.anim_prop_models[self.model] ) )
{
if ( !already_dumpped( level.init_animatedmodels_dump, self.model ) )
level.init_animatedmodels_dump[level.init_animatedmodels_dump.size] = self.model;
}
}
already_dumpped( var_0, var_1 )
{
if ( var_0.size <= 0 )
return 0;
foreach ( var_3 in var_0 )
{
if ( var_3 == var_1 )
return 1;
}
return 0;
}
animatemodel()
{
self useanimtree( #animtree );
var_0 = getarraykeys( level.anim_prop_models[self.model] );
var_1 = var_0[randomint( var_0.size )];
var_2 = level.anim_prop_models[self.model][var_1];
self setanim( var_2, 1, self getanimtime( var_2 ), 1 );
self setanimtime( var_2, randomfloatrange( 0, 1 ) );
}
animatetreewind()
{
self useanimtree( #animtree );
var_0 = "strong";
for (;;)
{
thread blendtreeanims( var_0 );
level waittill( "windchange", var_0 );
}
}
blendtreeanims( var_0 )
{
level endon( "windchange" );
var_1 = level.wind.weight;
var_2 = level.wind.rate + randomfloat( level.wind.variance );
self setanim( level.anim_prop_models[self.model]["still"], 1, self getanimtime( level.anim_prop_models[self.model]["still"] ), var_2 );
self setanim( level.anim_prop_models[self.model][var_0], var_1, self getanimtime( level.anim_prop_models[self.model][var_0] ), var_2 );
}

663
maps/_art.gsc Normal file
View File

@ -0,0 +1,663 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
level.current_sunflare_setting = "default";
level._clearalltextafterhudelem = 0;
dof_init();
tess_init();
precachemenu( "dev_vision_noloc" );
precachemenu( "dev_vision_exec" );
level.special_weapon_dof_funcs = [];
level.buttons = [];
if ( !isdefined( level.vision_set_transition_ent ) )
{
level.vision_set_transition_ent = spawnstruct();
level.vision_set_transition_ent.vision_set = "";
level.vision_set_transition_ent.time = 0;
}
if ( !isdefined( level.sunflare_settings ) )
level.sunflare_settings = [];
if ( !isdefined( level.vision_set_fog ) )
{
level.vision_set_fog = [];
create_default_vision_set_fog( level.script );
common_scripts\_artcommon::setfogsliders();
}
if ( !isdefined( level.script ) )
level.script = tolower( getdvar( "mapname" ) );
}
create_default_vision_set_fog( var_0 )
{
var_1 = maps\_utility::create_vision_set_fog( var_0 );
var_1.startdist = 3764.17;
var_1.halfwaydist = 19391;
var_1.red = 0.661137;
var_1.green = 0.554261;
var_1.blue = 0.454014;
var_1.maxopacity = 0.7;
var_1.transitiontime = 0;
var_1.skyfogintensity = 0;
var_1.skyfogminangle = 0;
var_1.skyfogmaxangle = 0;
}
dof_set_generic( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
level.dof[var_0][var_1]["nearStart"] = var_2;
level.dof[var_0][var_1]["nearEnd"] = var_3;
level.dof[var_0][var_1]["nearBlur"] = var_4;
level.dof[var_0][var_1]["farStart"] = var_5;
level.dof[var_0][var_1]["farEnd"] = var_6;
level.dof[var_0][var_1]["farBlur"] = var_7;
level.dof[var_0][var_1]["weight"] = var_8;
}
dof_blend_interior_generic( var_0 )
{
if ( level.dof[var_0]["timeRemaining"] <= 0.0 )
return;
var_1 = min( 1.0, 0.05 / level.dof[var_0]["timeRemaining"] );
level.dof[var_0]["timeRemaining"] = level.dof[var_0]["timeRemaining"] - 0.05;
if ( level.dof[var_0]["timeRemaining"] <= 0.0 )
{
level.dof[var_0]["timeRemaining"] = 0.0;
level.dof[var_0]["current"]["nearStart"] = level.dof[var_0]["goal"]["nearStart"];
level.dof[var_0]["current"]["nearEnd"] = level.dof[var_0]["goal"]["nearEnd"];
level.dof[var_0]["current"]["nearBlur"] = level.dof[var_0]["goal"]["nearBlur"];
level.dof[var_0]["current"]["farStart"] = level.dof[var_0]["goal"]["farStart"];
level.dof[var_0]["current"]["farEnd"] = level.dof[var_0]["goal"]["farEnd"];
level.dof[var_0]["current"]["farBlur"] = level.dof[var_0]["goal"]["farBlur"];
level.dof[var_0]["current"]["weight"] = level.dof[var_0]["goal"]["weight"];
return;
}
level.dof[var_0]["current"]["nearStart"] = level.dof[var_0]["current"]["nearStart"] + var_1 * ( level.dof[var_0]["goal"]["nearStart"] - level.dof[var_0]["current"]["nearStart"] );
level.dof[var_0]["current"]["nearEnd"] = level.dof[var_0]["current"]["nearEnd"] + var_1 * ( level.dof[var_0]["goal"]["nearEnd"] - level.dof[var_0]["current"]["nearEnd"] );
level.dof[var_0]["current"]["nearBlur"] = level.dof[var_0]["current"]["nearBlur"] + var_1 * ( level.dof[var_0]["goal"]["nearBlur"] - level.dof[var_0]["current"]["nearBlur"] );
level.dof[var_0]["current"]["farStart"] = level.dof[var_0]["current"]["farStart"] + var_1 * ( level.dof[var_0]["goal"]["farStart"] - level.dof[var_0]["current"]["farStart"] );
level.dof[var_0]["current"]["farEnd"] = level.dof[var_0]["current"]["farEnd"] + var_1 * ( level.dof[var_0]["goal"]["farEnd"] - level.dof[var_0]["current"]["farEnd"] );
level.dof[var_0]["current"]["farBlur"] = level.dof[var_0]["current"]["farBlur"] + var_1 * ( level.dof[var_0]["goal"]["farBlur"] - level.dof[var_0]["current"]["farBlur"] );
level.dof[var_0]["current"]["weight"] = level.dof[var_0]["current"]["weight"] + var_1 * ( level.dof[var_0]["goal"]["weight"] - level.dof[var_0]["current"]["weight"] );
}
dof_init()
{
if ( getdvar( "scr_dof_enable" ) == "" )
setsaveddvar( "scr_dof_enable", "1" );
setdvar( "ads_dof_tracedist", 8192 );
setdvar( "ads_dof_maxEnemyDist", 10000 );
setdvar( "ads_dof_playerForgetEnemyTime", 5000 );
setdvar( "ads_dof_nearStartScale", 0.25 );
setdvar( "ads_dof_nearEndScale", 0.85 );
setdvar( "ads_dof_farStartScale", 1.15 );
setdvar( "ads_dof_farEndScale", 3 );
setdvar( "ads_dof_nearBlur", 4 );
setdvar( "ads_dof_farBlur", 1.5 );
setdvar( "ads_dof_debug", 0 );
var_0 = 1;
var_1 = 1;
var_2 = 4.5;
var_3 = 500;
var_4 = 500;
var_5 = 0.05;
level.dof = [];
level.dof["base"] = [];
level.dof["base"]["current"] = [];
level.dof["base"]["goal"] = [];
level.dof["base"]["timeRemaining"] = 0.0;
dof_set_generic( "base", "current", var_0, var_1, var_2, var_3, var_4, var_5, 1.0 );
dof_set_generic( "base", "goal", 0, 0, 0, 0, 0, 0, 0.0 );
level.dof["script"] = [];
level.dof["script"]["current"] = [];
level.dof["script"]["goal"] = [];
level.dof["script"]["timeRemaining"] = 0.0;
dof_set_generic( "script", "current", 0, 0, 0, 0, 0, 0, 0.0 );
dof_set_generic( "script", "goal", 0, 0, 0, 0, 0, 0, 0.0 );
level.dof["ads"] = [];
level.dof["ads"]["current"] = [];
level.dof["ads"]["goal"] = [];
dof_set_generic( "ads", "current", 0, 0, 0, 0, 0, 0, 0.0 );
dof_set_generic( "ads", "goal", 0, 0, 0, 0, 0, 0, 0.0 );
level.dof["results"] = [];
level.dof["results"]["current"] = [];
dof_set_generic( "results", "current", var_0, var_1, var_2, var_3, var_4, var_5, 1.0 );
foreach ( var_7 in level.players )
var_7 thread dof_update();
}
dof_set_base( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
{
dof_set_generic( "base", "goal", var_0, var_1, var_2, var_3, var_4, var_5, 1.0 );
level.dof["base"]["timeRemaining"] = var_6;
if ( var_6 <= 0.0 )
dof_set_generic( "base", "current", var_0, var_1, var_2, var_3, var_4, var_5, 1.0 );
}
dof_enable_script( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
{
dof_set_generic( "script", "goal", var_0, var_1, var_2, var_3, var_4, var_5, 1.0 );
level.dof["script"]["timeRemaining"] = var_6;
if ( var_6 <= 0.0 )
dof_set_generic( "script", "current", var_0, var_1, var_2, var_3, var_4, var_5, 1.0 );
else if ( level.dof["script"]["current"]["weight"] <= 0.0 )
dof_set_generic( "script", "current", var_0, var_1, var_2, var_3, var_4, var_5, 0.0 );
}
dof_disable_script( var_0 )
{
level.dof["script"]["goal"]["weight"] = 0.0;
level.dof["script"]["timeRemaining"] = var_0;
if ( var_0 <= 0.0 )
level.dof["script"]["current"]["weight"] = 0.0;
}
dof_enable_ads( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
{
dof_set_generic( "ads", "goal", var_0, var_1, var_2, var_3, var_4, var_5, var_6 );
if ( level.dof["ads"]["current"]["weight"] <= 0.0 )
dof_set_generic( "ads", "current", var_0, var_1, var_2, var_3, var_4, var_5, 0.0 );
}
dof_blend_interior_ads_element( var_0, var_1, var_2, var_3 )
{
if ( var_0 > var_1 )
{
var_4 = ( var_0 - var_1 ) * var_3;
if ( var_4 > var_2 )
var_4 = var_2;
else if ( var_4 < 1 )
var_4 = 1;
if ( var_0 - var_4 <= var_1 )
return var_1;
else
return var_0 - var_4;
}
else if ( var_0 < var_1 )
{
var_4 = ( var_1 - var_0 ) * var_3;
if ( var_4 > var_2 )
var_4 = var_2;
else if ( var_4 < 1 )
var_4 = 1;
if ( var_0 + var_4 >= var_1 )
return var_1;
else
return var_0 + var_4;
}
return var_0;
}
dof_blend_interior_ads()
{
var_0 = level.dof["ads"]["goal"]["weight"];
if ( var_0 < 1.0 )
{
if ( self adsbuttonpressed() && self playerads() > 0.0 )
var_0 = min( 1, var_0 + 0.7 );
else
var_0 = 0;
level.dof["ads"]["current"]["nearStart"] = level.dof["ads"]["goal"]["nearStart"];
level.dof["ads"]["current"]["nearEnd"] = level.dof["ads"]["goal"]["nearEnd"];
level.dof["ads"]["current"]["nearBlur"] = level.dof["ads"]["goal"]["nearBlur"];
level.dof["ads"]["current"]["farStart"] = level.dof["ads"]["goal"]["farStart"];
level.dof["ads"]["current"]["farEnd"] = level.dof["ads"]["goal"]["farEnd"];
level.dof["ads"]["current"]["farBlur"] = level.dof["ads"]["goal"]["farBlur"];
level.dof["ads"]["current"]["weight"] = var_0;
return;
}
if ( isdefined( level.dof_blend_interior_ads_scalar ) )
var_1 = level.dof_blend_interior_ads_scalar;
else
var_1 = 0.1;
var_2 = 10;
var_3 = max( var_2, abs( level.dof["ads"]["current"]["nearStart"] - level.dof["ads"]["goal"]["nearStart"] ) * var_1 );
var_4 = max( var_2, abs( level.dof["ads"]["current"]["nearEnd"] - level.dof["ads"]["goal"]["nearEnd"] ) * var_1 );
var_5 = max( var_2, abs( level.dof["ads"]["current"]["farStart"] - level.dof["ads"]["goal"]["farStart"] ) * var_1 );
var_6 = max( var_2, abs( level.dof["ads"]["current"]["farEnd"] - level.dof["ads"]["goal"]["farEnd"] ) * var_1 );
var_7 = 0.1;
level.dof["ads"]["current"]["nearStart"] = dof_blend_interior_ads_element( level.dof["ads"]["current"]["nearStart"], level.dof["ads"]["goal"]["nearStart"], var_3, 0.33 );
level.dof["ads"]["current"]["nearEnd"] = dof_blend_interior_ads_element( level.dof["ads"]["current"]["nearEnd"], level.dof["ads"]["goal"]["nearEnd"], var_4, 0.33 );
level.dof["ads"]["current"]["nearBlur"] = dof_blend_interior_ads_element( level.dof["ads"]["current"]["nearBlur"], level.dof["ads"]["goal"]["nearBlur"], var_7, 0.33 );
level.dof["ads"]["current"]["farStart"] = dof_blend_interior_ads_element( level.dof["ads"]["current"]["farStart"], level.dof["ads"]["goal"]["farStart"], var_5, 0.33 );
level.dof["ads"]["current"]["farEnd"] = dof_blend_interior_ads_element( level.dof["ads"]["current"]["farEnd"], level.dof["ads"]["goal"]["farEnd"], var_6, 0.33 );
level.dof["ads"]["current"]["farBlur"] = dof_blend_interior_ads_element( level.dof["ads"]["current"]["farBlur"], level.dof["ads"]["goal"]["farBlur"], var_7, 0.33 );
level.dof["ads"]["current"]["weight"] = 1.0;
}
dof_disable_ads()
{
level.dof["ads"]["goal"]["weight"] = 0.0;
level.dof["ads"]["current"]["weight"] = 0.0;
}
dof_apply_to_results( var_0 )
{
var_1 = level.dof[var_0]["current"]["weight"];
var_2 = 1.0 - var_1;
level.dof["results"]["current"]["nearStart"] = level.dof["results"]["current"]["nearStart"] * var_2 + level.dof[var_0]["current"]["nearStart"] * var_1;
level.dof["results"]["current"]["nearEnd"] = level.dof["results"]["current"]["nearEnd"] * var_2 + level.dof[var_0]["current"]["nearEnd"] * var_1;
level.dof["results"]["current"]["nearBlur"] = level.dof["results"]["current"]["nearBlur"] * var_2 + level.dof[var_0]["current"]["nearBlur"] * var_1;
level.dof["results"]["current"]["farStart"] = level.dof["results"]["current"]["farStart"] * var_2 + level.dof[var_0]["current"]["farStart"] * var_1;
level.dof["results"]["current"]["farEnd"] = level.dof["results"]["current"]["farEnd"] * var_2 + level.dof[var_0]["current"]["farEnd"] * var_1;
level.dof["results"]["current"]["farBlur"] = level.dof["results"]["current"]["farBlur"] * var_2 + level.dof[var_0]["current"]["farBlur"] * var_1;
}
dof_calc_results()
{
dof_blend_interior_generic( "base" );
dof_blend_interior_generic( "script" );
dof_blend_interior_ads();
dof_apply_to_results( "base" );
dof_apply_to_results( "script" );
dof_apply_to_results( "ads" );
var_0 = level.dof["results"]["current"]["nearStart"];
var_1 = level.dof["results"]["current"]["nearEnd"];
var_2 = level.dof["results"]["current"]["nearBlur"];
var_3 = level.dof["results"]["current"]["farStart"];
var_4 = level.dof["results"]["current"]["farEnd"];
var_5 = level.dof["results"]["current"]["farBlur"];
var_0 = max( 0, var_0 );
var_1 = max( 0, var_1 );
var_3 = max( 0, var_3 );
var_4 = max( 0, var_4 );
var_2 = max( 4, var_2 );
var_2 = min( 10, var_2 );
var_5 = max( 0, var_5 );
var_5 = min( var_2, var_5 );
if ( var_5 > 0.0 )
var_3 = max( var_1, var_3 );
level.dof["results"]["current"]["nearStart"] = var_0;
level.dof["results"]["current"]["nearEnd"] = var_1;
level.dof["results"]["current"]["nearBlur"] = var_2;
level.dof["results"]["current"]["farStart"] = var_3;
level.dof["results"]["current"]["farEnd"] = var_4;
level.dof["results"]["current"]["farBlur"] = var_5;
}
dof_process_ads()
{
var_0 = self playerads();
if ( var_0 <= 0.0 )
{
dof_disable_ads();
return;
}
if ( isdefined( level.custom_dof_trace ) )
{
[[ level.custom_dof_trace ]]();
return;
}
var_1 = getdvarfloat( "ads_dof_tracedist", 4096 );
var_2 = getdvarfloat( "ads_dof_maxEnemyDist", 0 );
var_3 = getdvarint( "ads_dof_playerForgetEnemyTime", 5000 );
var_4 = getdvarfloat( "ads_dof_nearStartScale", 0.25 );
var_5 = getdvarfloat( "ads_dof_nearEndScale", 0.85 );
var_6 = getdvarfloat( "ads_dof_farStartScale", 1.15 );
var_7 = getdvarfloat( "ads_dof_farEndScale", 3 );
var_8 = getdvarfloat( "ads_dof_nearBlur", 4 );
var_9 = getdvarfloat( "ads_dof_farBlur", 2.5 );
var_10 = self geteye();
var_11 = self getplayerangles();
if ( isdefined( self.dof_ref_ent ) )
var_12 = combineangles( self.dof_ref_ent.angles, var_11 );
else
var_12 = var_11;
var_13 = vectornormalize( anglestoforward( var_12 ) );
var_14 = bullettrace( var_10, var_10 + var_13 * var_1, 1, self, 1, 0, 0, 0, 0 );
var_15 = getaiarray( "axis" );
var_16 = self getcurrentweapon();
if ( isdefined( level.special_weapon_dof_funcs[var_16] ) )
{
[[ level.special_weapon_dof_funcs[var_16] ]]( var_14, var_15, var_10, var_13, var_0 );
return;
}
if ( var_14["fraction"] == 1 )
{
var_1 = 2048;
var_17 = 256;
var_18 = var_1 * var_6 * 2;
}
else
{
var_1 = distance( var_10, var_14["position"] );
var_17 = var_1 * var_4;
var_18 = var_1 * var_6;
}
foreach ( var_20 in var_15 )
{
var_21 = var_20 isenemyaware();
var_22 = var_20 hasenemybeenseen( var_3 );
if ( !var_21 && !var_22 )
continue;
var_23 = vectornormalize( var_20.origin - var_10 );
var_24 = vectordot( var_13, var_23 );
if ( var_24 < 0.923 )
continue;
var_25 = distance( var_10, var_20.origin );
if ( var_25 - 30 < var_17 )
var_17 = var_25 - 30;
var_26 = min( var_25, var_2 );
if ( var_26 + 30 > var_18 )
var_18 = var_26 + 30;
}
if ( var_17 > var_18 )
var_17 = var_18 - 256;
if ( var_17 > var_1 )
var_17 = var_1 - 30;
if ( var_17 < 1 )
var_17 = 1;
if ( var_18 < var_1 )
var_18 = var_1;
var_28 = var_17 * var_4;
var_29 = var_18 * var_7;
dof_enable_ads( var_28, var_17, var_8, var_18, var_29, var_9, var_0 );
}
javelin_dof( var_0, var_1, var_2, var_3, var_4 )
{
if ( var_4 < 0.88 )
{
dof_disable_ads();
return;
}
var_5 = 10000;
var_6 = -1;
var_5 = 2400;
var_7 = 2400;
for ( var_8 = 0; var_8 < var_1.size; var_8++ )
{
var_9 = vectornormalize( var_1[var_8].origin - var_2 );
var_10 = vectordot( var_3, var_9 );
if ( var_10 < 0.923 )
continue;
var_11 = distance( var_2, var_1[var_8].origin );
if ( var_11 < 2500 )
var_11 = 2500;
if ( var_11 - 30 < var_5 )
var_5 = var_11 - 30;
if ( var_11 + 30 > var_6 )
var_6 = var_11 + 30;
}
if ( var_5 > var_6 )
{
var_5 = 2400;
var_6 = 3000;
}
else
{
if ( var_5 < 50 )
var_5 = 50;
if ( var_6 > 2500 )
var_6 = 2500;
else if ( var_6 < 1000 )
var_6 = 1000;
}
var_12 = distance( var_2, var_0["position"] );
if ( var_12 < 2500 )
var_12 = 2500;
if ( var_5 > var_12 )
var_5 = var_12 - 30;
if ( var_5 < 1 )
var_5 = 1;
if ( var_6 < var_12 )
var_6 = var_12;
if ( var_7 >= var_5 )
var_7 = var_5 - 1;
var_13 = var_6 * 4;
var_14 = 4;
var_15 = 1.8;
dof_enable_ads( var_7, var_5, var_14, var_6, var_13, var_15, var_4 );
}
dof_update()
{
for (;;)
{
common_scripts\utility::waitframe();
if ( level.level_specific_dof )
continue;
if ( !getdvarint( "scr_dof_enable" ) )
continue;
dof_process_ads();
dof_calc_results();
var_0 = level.dof["results"]["current"]["nearStart"];
var_1 = level.dof["results"]["current"]["nearEnd"];
var_2 = level.dof["results"]["current"]["farStart"];
var_3 = level.dof["results"]["current"]["farEnd"];
var_4 = level.dof["results"]["current"]["nearBlur"];
var_5 = level.dof["results"]["current"]["farBlur"];
self setdepthoffield( var_0, var_1, var_2, var_3, var_4, var_5 );
}
}
tess_init()
{
var_0 = getdvar( "r_tessellation" );
if ( var_0 == "" )
return;
level.tess = spawnstruct();
level.tess.cutoff_distance_current = getdvarfloat( "r_tessellationCutoffDistance", 960.0 );
level.tess.cutoff_distance_goal = level.tess.cutoff_distance_current;
level.tess.cutoff_falloff_current = getdvarfloat( "r_tessellationCutoffFalloff", 320.0 );
level.tess.cutoff_falloff_goal = level.tess.cutoff_falloff_current;
level.tess.time_remaining = 0.0;
foreach ( var_2 in level.players )
var_2 thread tess_update();
}
tess_set_goal( var_0, var_1, var_2 )
{
level.tess.cutoff_distance_goal = var_0;
level.tess.cutoff_falloff_goal = var_1;
level.tess.time_remaining = var_2;
}
tess_update()
{
for (;;)
{
var_0 = level.tess.cutoff_distance_current;
var_1 = level.tess.cutoff_falloff_current;
common_scripts\utility::waitframe();
if ( level.tess.time_remaining > 0.0 )
{
var_2 = level.tess.time_remaining * 20;
var_3 = ( level.tess.cutoff_distance_goal - level.tess.cutoff_distance_current ) / var_2;
var_4 = ( level.tess.cutoff_falloff_goal - level.tess.cutoff_falloff_current ) / var_2;
level.tess.cutoff_distance_current = level.tess.cutoff_distance_current + var_3;
level.tess.cutoff_falloff_current = level.tess.cutoff_falloff_current + var_4;
level.tess.time_remaining = level.tess.time_remaining - 0.05;
}
else
{
level.tess.cutoff_distance_current = level.tess.cutoff_distance_goal;
level.tess.cutoff_falloff_current = level.tess.cutoff_falloff_goal;
}
if ( var_0 != level.tess.cutoff_distance_current )
setsaveddvar( "r_tessellationCutoffDistance", level.tess.cutoff_distance_current );
if ( var_1 != level.tess.cutoff_falloff_current )
setsaveddvar( "r_tessellationCutoffFalloff", level.tess.cutoff_falloff_current );
}
}
sunflare_changes( var_0, var_1 )
{
if ( !isdefined( level.sunflare_settings[var_0] ) )
return;
self notify( "sunflare_start_adjust" );
self endon( "sunflare_start_adjust" );
var_2 = gettime();
var_3 = var_1 * 1000;
var_4 = getdvarvector( "r_sunflare_position", ( 0, 0, 0 ) );
var_5 = gettime() - var_2;
var_6 = level.sunflare_settings[var_0].position;
for ( level.current_sunflare_setting = var_0; var_5 < var_3; var_5 = gettime() - var_2 )
{
var_6 = level.sunflare_settings[var_0].position;
var_7 = min( float( var_5 / var_3 ), 1 );
var_8 = var_4 + ( var_6 - var_4 ) * var_7;
setdvar( "r_sunflare_position", var_8 );
setsunflareposition( var_8 );
wait 0.05;
}
setdvar( "r_sunflare_position", level.sunflare_settings[var_0].position );
setsunflareposition( var_6 );
}
init_fog_transition()
{
if ( !isdefined( level.fog_transition_ent ) )
{
level.fog_transition_ent = spawnstruct();
level.fog_transition_ent.fogset = "";
level.fog_transition_ent.time = 0;
}
}
set_fog_progress( var_0 )
{
var_1 = 1 - var_0;
var_2 = self.start_neardist * var_1 + self.end_neardist * var_0;
var_3 = self.start_fardist * var_1 + self.end_fardist * var_0;
var_4 = self.start_color * var_1 + self.end_color * var_0;
var_5 = self.start_hdrcolorintensity * var_1 + self.end_hdrcolorintensity * var_0;
var_6 = self.start_opacity;
var_7 = self.end_opacity;
var_8 = self.start_skyfogintensity;
var_9 = self.start_skyfogminangle;
var_10 = self.start_skyfogmaxangle;
var_8 = self.start_skyfogintensity * var_1 + self.end_skyfogintensity * var_0;
var_9 = self.start_skyfogminangle * var_1 + self.end_skyfogminangle * var_0;
var_10 = self.start_skyfogmaxangle * var_1 + self.end_skyfogmaxangle * var_0;
if ( !isdefined( var_6 ) )
var_6 = 1;
if ( !isdefined( var_7 ) )
var_7 = 1;
var_11 = var_6 * var_1 + var_7 * var_0;
if ( self.sunfog_enabled )
{
var_12 = self.start_suncolor * var_1 + self.end_suncolor * var_0;
var_13 = self.start_hdrsuncolorintensity * var_1 + self.end_hdrsuncolorintensity * var_0;
var_14 = self.start_sundir * var_1 + self.end_sundir * var_0;
var_15 = self.start_sunbeginfadeangle * var_1 + self.end_sunbeginfadeangle * var_0;
var_16 = self.start_sunendfadeangle * var_1 + self.end_sunendfadeangle * var_0;
var_17 = self.start_sunfogscale * var_1 + self.end_sunfogscale * var_0;
setexpfog( var_2, var_3, var_4[0], var_4[1], var_4[2], var_5, var_11, 0.4, var_12[0], var_12[1], var_12[2], var_13, var_14, var_15, var_16, var_17, var_8, var_9, var_10 );
}
else
setexpfog( var_2, var_3, var_4[0], var_4[1], var_4[2], var_5, var_11, 0.4, var_8, var_9, var_10 );
}
ssao_set_target_over_time_internal( var_0, var_1 )
{
level notify( "ssao_set_target_over_time_internal" );
level endon( "ssao_set_target_over_time_internal" );
maps\_utility::set_console_status();
if ( !maps\_utility::is_gen4() )
return;
var_2 = getdvarfloat( "r_ssaoScriptScale", 1.0 );
for ( var_3 = var_1; var_3 > 0.0; var_3 = var_3 - 0.05 )
{
var_4 = min( 1.0, 0.05 / var_3 );
var_5 = var_2;
var_2 = var_2 + var_4 * ( var_0 - var_2 );
if ( var_5 != var_2 )
setsaveddvar( "r_ssaoScriptScale", var_2 );
common_scripts\utility::waitframe();
}
setsaveddvar( "r_ssaoScriptScale", var_0 );
}
disable_ssao_over_time( var_0 )
{
level thread ssao_set_target_over_time_internal( 0.0, var_0 );
}
enable_ssao_over_time( var_0 )
{
level thread ssao_set_target_over_time_internal( 1.0, var_0 );
}

32
maps/_ash_falling.gsc Normal file
View File

@ -0,0 +1,32 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
ash_fall( var_0 )
{
self notify( "ash_change" );
if ( var_0 > 0 )
thread ash_fall_thread( var_0 );
}
ash_fall_thread( var_0 )
{
self endon( "ash_change" );
for (;;)
{
if ( maps\_utility::is_coop() )
playfxontagforclients( level._effect["ash"], self, "tag_origin", self );
else
playfx( level._effect["ash"], self.origin );
wait( 0.3 / var_0 );
}
}
ash_init()
{
setsaveddvar( "r_outdoorfeather", "32" );
level._effect["ash_nowind"] = loadfx( "vfx/ambient/atmospheric/vfx_ash_fall_onplayer" );
level._effect["ash"] = level._effect["ash_nowind"];
}

908
maps/_audio.gsc Normal file
View File

@ -0,0 +1,908 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_audio()
{
if ( isdefined( level._audio ) )
return;
setdvarifuninitialized( "debug_audio", "0" );
setdvarifuninitialized( "debug_headroom", "-1" );
setdvarifuninitialized( "music_enable", "1" );
level._audio = spawnstruct();
level._audio.using_string_tables = 0;
level._audio.progress_trigger_callbacks = [];
level._audio.progress_maps = [];
init_tracks();
init_filter();
init_occlusion();
maps\_audio_ambient::init_ambient();
init_mix();
init_reverb();
init_timescale();
init_whizby();
init_zones();
thread level_fadein();
}
aud_set_spec_ops()
{
}
aud_add_progress_map( var_0, var_1 )
{
level._audio.progress_maps[var_0] = var_1;
}
is_deathsdoor_audio_enabled()
{
if ( !isdefined( level._audio.deathsdoor_enabled ) )
return 1;
else
return level._audio.deathsdoor_enabled;
}
aud_enable_deathsdoor_audio()
{
level.player.disable_breathing_sound = 0;
level._audio.deathsdoor_enabled = 1;
}
aud_disable_deathsdoor_audio()
{
level.player.disable_breathing_sound = 1;
level._audio.deathsdoor_enabled = 0;
}
restore_after_deathsdoor()
{
if ( is_deathsdoor_audio_enabled() || isdefined( level._audio.in_deathsdoor ) )
{
level._audio.in_deathsdoor = undefined;
level.player clearclienttriggeraudiozone();
}
}
set_deathsdoor()
{
level._audio.in_deathsdoor = 1;
if ( is_deathsdoor_audio_enabled() )
{
if ( isdefined( level.deathsdooroverride ) )
level.player setclienttriggeraudiozonepartial( level.deathsdooroverride, "reverb", "mix", "filter" );
else
level.player setclienttriggeraudiozonepartial( "deathsdoor", "reverb", "mix", "filter" );
}
}
trigger_multiple_audio_trigger( var_0 )
{
if ( isdefined( var_0._audio_trigger ) )
return;
var_0._audio_trigger = 1;
var_1 = undefined;
if ( isdefined( var_0.ambient ) )
var_1 = strtok( var_0.ambient, " " );
else if ( isdefined( var_0.script_audio_zones ) )
var_1 = strtok( var_0.script_audio_zones, " " );
else if ( isdefined( var_0.audio_zones ) )
var_1 = strtok( var_0.audio_zones, " " );
if ( isdefined( var_1 ) && var_1.size == 2 )
{
}
else if ( isdefined( var_1 ) && var_1.size == 1 )
{
for (;;)
{
var_0 waittill( "trigger", var_2 );
set_zone( var_1[0], var_0.script_duration );
}
}
if ( isdefined( var_0.script_audio_progress_map ) )
{
if ( !isdefined( level._audio.progress_maps[var_0.script_audio_progress_map] ) )
{
maps\_audio_code::debug_error( "Trying to set a progress_map_function without defining the envelope in the level.aud.envs array." );
var_0.script_audio_progress_map = undefined;
}
}
if ( !isdefined( var_0.script_audio_blend_mode ) )
var_0.script_audio_blend_mode = "blend";
var_3 = undefined;
var_4 = undefined;
var_5 = undefined;
if ( isdefined( var_0.target ) )
{
if ( !isdefined( var_0 common_scripts\utility::get_target_ent() ) )
{
maps\_audio_code::debug_error( "Audo Zone Trigger at " + var_0.origin + " has defined a target, " + var_0.target + ", but that target doesn't exist." );
return;
}
if ( isdefined( var_0 get_target_ent_target() ) )
{
var_3 = var_0 get_target_ent_origin();
if ( !isdefined( var_0 get_target_ent_target_ent() ) )
{
maps\_audio_code::debug_error( "Audo Zone Trigger at " + var_0.origin + " has defined a target, " + get_target_ent_target() + ", but that target doesn't exist." );
return;
}
var_4 = var_0 get_target_ent_target_ent_origin();
}
else
{
var_6 = var_0 common_scripts\utility::get_target_ent();
var_7 = 2 * ( var_0.origin - var_6.origin );
var_8 = vectortoangles( var_7 );
var_3 = var_0 get_target_ent_origin();
var_4 = var_3 + var_7;
if ( angleclamp180( var_8[0] ) < 45 )
{
var_3 = ( var_3[0], var_3[1], 0 );
var_4 = ( var_4[0], var_4[1], 0 );
}
}
var_5 = distance( var_3, var_4 );
}
var_9 = 0;
for (;;)
{
var_0 waittill( "trigger", var_2 );
if ( maps\_utility::is_specialop() && var_2 != level.player )
continue;
if ( isdefined( var_3 ) && isdefined( var_4 ) )
{
var_10 = trigger_multiple_audio_progress( var_3, var_4, var_5, var_2.origin );
if ( var_10 < 0.5 )
var_9 = 0;
else
var_9 = 1;
}
var_11 = undefined;
var_12 = get_zone_from( var_1, var_9 );
var_13 = get_zone_to( var_1, var_9 );
if ( isdefined( var_12 ) && isdefined( var_13 ) )
{
var_11 = maps\_audio_code::get_zone_blend_args( var_12, var_13 );
if ( !isdefined( var_11 ) )
return;
var_11["mode"] = var_0.script_audio_blend_mode;
if ( var_9 )
{
var_14 = var_11["filter1"];
var_15 = var_11["filter2"];
var_11["filter1"] = var_15;
var_11["filter2"] = var_14;
var_14 = undefined;
var_15 = undefined;
}
}
var_16 = -1;
var_10 = -1;
while ( var_2 istouching( var_0 ) )
{
if ( isdefined( var_0.script_audio_point_func ) )
{
var_17 = trigger_multiple_audio_progress_point( var_3, var_4, var_2.origin );
if ( isdefined( level._audio.trigger_functions[var_0.script_audio_point_func] ) )
[[ level._audio.trigger_functions[var_0.script_audio_point_func] ]]( var_17 );
}
if ( isdefined( var_3 ) && isdefined( var_4 ) )
{
var_10 = trigger_multiple_audio_progress( var_3, var_4, var_5, var_2.origin );
if ( isdefined( var_0.script_audio_progress_map ) )
var_10 = aud_map( var_10, level._audio.progress_maps[var_0.script_audio_progress_map] );
if ( var_10 != var_16 )
{
if ( isdefined( var_11 ) )
trigger_multiple_audio_blend( var_10, var_11, var_9 );
var_16 = var_10;
}
}
if ( isdefined( var_0.script_audio_update_rate ) )
{
wait( var_0.script_audio_update_rate );
continue;
}
wait 0.05;
}
if ( isdefined( var_3 ) && isdefined( var_4 ) )
{
if ( var_10 > 0.5 )
{
if ( isdefined( var_1 ) && isdefined( var_1[1] ) )
maps\_audio_code::set_current_audio_zone( var_1[1] );
var_10 = 1;
}
else
{
if ( isdefined( var_1 ) && isdefined( var_1[0] ) )
maps\_audio_code::set_current_audio_zone( var_1[0] );
var_10 = 0;
}
if ( isdefined( var_11 ) )
trigger_multiple_audio_blend( var_10, var_11, var_9 );
}
}
}
trigger_multiple_audio_progress( var_0, var_1, var_2, var_3 )
{
var_4 = vectornormalize( var_1 - var_0 );
var_5 = var_3 - var_0;
var_6 = vectordot( var_5, var_4 );
var_6 = var_6 / var_2;
return clamp( var_6, 0, 1.0 );
}
trigger_multiple_audio_progress_point( var_0, var_1, var_2 )
{
var_3 = vectornormalize( var_1 - var_0 );
var_4 = var_2 - var_0;
var_5 = vectordot( var_4, var_3 );
return var_3 * var_5 + var_0;
}
trigger_multiple_audio_blend( var_0, var_1, var_2 )
{
var_0 = clamp( var_0, 0, 1.0 );
if ( var_2 )
var_0 = 1 - var_0;
var_3 = var_1["mode"];
if ( var_3 == "blend" )
{
var_4 = 1 - var_0;
var_5 = var_0;
maps\_audio_code::blend_zones( var_4, var_5, var_1, var_2 );
}
else if ( var_0 < 0.33 )
set_zone( var_1["zone_from"] );
else if ( var_0 > 0.66 )
set_zone( var_1["zone_to"] );
}
get_target_ent_target()
{
var_0 = common_scripts\utility::get_target_ent();
return var_0.target;
}
get_target_ent_origin()
{
var_0 = common_scripts\utility::get_target_ent();
return var_0.origin;
}
get_target_ent_target_ent()
{
var_0 = common_scripts\utility::get_target_ent();
return var_0 common_scripts\utility::get_target_ent();
}
get_target_ent_target_ent_origin()
{
var_0 = get_target_ent_target_ent();
return var_0.origin;
}
get_zone_from( var_0, var_1 )
{
if ( !isdefined( var_0 ) || !isdefined( var_1 ) )
return undefined;
if ( var_1 )
return var_0[1];
else
return var_0[0];
}
get_zone_to( var_0, var_1 )
{
if ( !isdefined( var_0 ) || !isdefined( var_1 ) )
return undefined;
if ( var_1 )
return var_0[0];
else
return var_0[1];
}
aud_map( var_0, var_1 )
{
var_2 = 0.0;
var_3 = var_1.size;
var_4 = var_1[0];
for ( var_5 = 1; var_5 < var_1.size; var_5++ )
{
var_6 = var_1[var_5];
if ( var_0 >= var_4[0] && var_0 <= var_6[0] )
{
var_7 = var_4[0];
var_8 = var_6[0];
var_9 = var_4[1];
var_10 = var_6[1];
var_11 = ( var_0 - var_7 ) / ( var_8 - var_7 );
var_2 = var_9 + var_11 * ( var_10 - var_9 );
break;
}
else
var_4 = var_6;
}
return var_2;
}
aud_map_range( var_0, var_1, var_2, var_3 )
{
var_4 = ( var_0 - var_1 ) / ( var_2 - var_1 );
var_4 = clamp( var_4, 0.0, 1.0 );
return aud_map( var_4, var_3 );
}
audx_validate_env_array( var_0 )
{
}
play_linked_sound( var_0, var_1, var_2, var_3, var_4 )
{
if ( !isdefined( var_2 ) )
var_2 = "oneshot";
var_5 = spawn( "script_origin", var_1.origin );
if ( isdefined( var_4 ) )
var_5 linkto( var_1, "tag_origin", var_4, ( 0, 0, 0 ) );
else
var_5 linkto( var_1 );
if ( var_2 == "loop" )
var_1 thread play_linked_sound_think( var_5, var_3 );
var_5 thread play_linked_sound_internal( var_2, var_0, var_3 );
return var_5;
}
play_linked_sound_internal( var_0, var_1, var_2 )
{
if ( var_0 == "loop" )
{
level endon( var_2 + "internal" );
self playloopsound( var_1 );
level waittill( var_2 );
if ( isdefined( self ) )
{
self stoploopsound( var_1 );
wait 0.05;
self delete();
}
}
else if ( var_0 == "oneshot" )
{
self playsound( var_1, "sounddone" );
self waittill( "sounddone" );
if ( isdefined( self ) )
self delete();
}
}
play_linked_sound_think( var_0, var_1 )
{
level endon( var_1 );
while ( isdefined( self ) )
wait 0.1;
level notify( var_1 + "internal" );
if ( isdefined( var_0 ) )
{
var_0 stoploopsound();
wait 0.05;
var_0 delete();
}
}
level_fadein()
{
if ( !isdefined( level._audio.level_fade_time ) )
level._audio.level_fade_time = 1.0;
wait 0.05;
levelsoundfade( 1, level._audio.level_fade_time );
}
init_tracks()
{
level._audio.ambient_track = spawnstruct();
level._audio.ambient_track.current = create_track_struct();
level._audio.ambient_track.previous = create_track_struct();
}
create_track_struct()
{
var_0 = spawnstruct();
var_0.name = "";
var_0.volume = 0.0;
var_0.fade = 0.0;
return var_0;
}
clear_track_struct( var_0 )
{
var_0.name = "";
var_0.volume = 0.0;
var_0.fade = 0.0;
}
set_current_track_struct( var_0, var_1, var_2, var_3 )
{
var_0.previous set_track_values( var_0.current.name, var_0.current.volume, var_0.current.fade );
var_0.current set_track_values( var_1, var_2, var_3 );
}
set_track_values( var_0, var_1, var_2 )
{
self.name = var_0;
self.volume = var_1;
self.fade = var_2;
}
set_ambient_track( var_0, var_1, var_2 )
{
if ( !isdefined( var_1 ) )
var_1 = 1;
if ( !isdefined( var_2 ) )
var_2 = 1;
set_current_track_struct( level._audio.ambient_track, var_0, var_2, var_1 );
maps\_audio_code::set_hud_value( "ambient", var_0 );
maps\_audio_code::set_hud_name_percent_value( "ambient_from", "" );
maps\_audio_code::set_hud_name_percent_value( "ambient_to", "" );
ambientplay( var_0, var_1, var_2 );
}
stop_ambient_track( var_0, var_1 )
{
if ( var_0 == "" )
return;
if ( !isdefined( var_1 ) )
var_1 = 1;
if ( level._audio.ambient_track.current.name == var_0 )
{
level._audio.ambient_track.current = level._audio.ambient_track.previous;
maps\_audio_code::set_hud_value( "ambient", "" );
maps\_audio_code::set_hud_name_percent_value( "ambient_from", "" );
maps\_audio_code::set_hud_name_percent_value( "ambient_to", "" );
clear_track_struct( level._audio.ambient_track.previous );
}
else if ( level._audio.ambient_track.previous.name == var_0 )
clear_track_struct( level._audio.ambient_track.previous );
ambientstop( var_1, var_0 );
}
stop_ambient_tracks( var_0 )
{
if ( !isdefined( var_0 ) )
var_0 = 1;
clear_track_struct( level._audio.ambient_track.current );
clear_track_struct( level._audio.ambient_track.previous );
ambientstop( var_0 );
}
mix_ambient_tracks( var_0 )
{
var_1 = 0.009;
var_2 = level._audio.ambient_track.current;
var_3 = level._audio.ambient_track.previous;
if ( var_0.size == 1 )
var_2 set_track_values( var_0[0].alias, var_0[0].volume, var_0[0].fade );
else if ( var_0.size == 2 )
{
var_3 set_track_values( var_0[0].alias, var_0[0].volume, var_0[0].fade );
var_2 set_track_values( var_0[1].alias, var_0[1].volume, var_0[1].fade );
}
for ( var_5 = 0; var_5 < var_0.size; var_5++ )
{
var_6 = var_0[var_5].alias;
var_7 = max( var_0[var_5].volume, 0 );
var_8 = clamp( var_0[var_5].fade, 0, 1 );
if ( var_6 != "" )
{
if ( var_7 < var_1 )
{
ambientstop( var_8, var_6 );
continue;
}
ambientplay( var_6, var_8, var_7, 0 );
}
}
}
empty_string_if_none( var_0 )
{
if ( var_0 == "none" )
return "";
return var_0;
}
init_zones()
{
level._audio.zone = spawnstruct();
level._audio.zone.current_zone = "";
level._audio.zone.cached = [];
}
set_zone( var_0, var_1, var_2 )
{
if ( isdefined( var_2 ) )
{
}
if ( level._audio.zone.current_zone == var_0 )
return;
if ( level._audio.zone.current_zone != "" )
stop_zone( level._audio.zone.current_zone, var_1 );
level._audio.zone.current_zone = var_0;
if ( isdefined( level._audio.zone.cached[var_0] ) && isdefined( level._audio.zone.cached[var_0]["state"] ) && level._audio.zone.cached[var_0]["state"] != "stopping" )
{
maps\_audio_code::debug_error( "set_zone( \"" + var_0 + "\" ) being called even though audio zone, \"" + var_0 + "\", is already started." );
return;
}
if ( !isdefined( var_1 ) )
var_1 = 2;
maps\_audio_code::cache_zone( var_0 );
maps\_audio_code::debug_println( "ZONE START: " + var_0 );
level._audio.zone.cached[var_0]["state"] = "playing";
maps\_audio_code::set_hud_value( "zone", var_0 );
var_3 = level._audio.zone.cached[var_0];
if ( isdefined( var_3["ambience"] ) )
{
if ( var_3["ambience"] != "" )
set_ambient_track( var_3["ambience"], var_1 );
else
stop_ambient_tracks( var_1 );
}
if ( isdefined( var_3["ambient_name"] ) )
{
if ( var_3["ambient_name"] != "" )
{
maps\_audio_code::set_hud_value( "ambient_elem", var_3["ambient_name"] );
maps\_audio_code::set_hud_name_percent_value( "ambient_elem_from", "", "" );
maps\_audio_code::set_hud_name_percent_value( "ambient_elem_to", "", "" );
maps\_audio_ambient::start_ambient_event_zone( var_3["ambient_name"] );
}
else
{
maps\_audio_code::set_hud_value( "ambient_elem", "" );
maps\_audio_code::set_hud_name_percent_value( "ambient_elem_from", "", "" );
maps\_audio_code::set_hud_name_percent_value( "ambient_elem_to", "", "" );
maps\_audio_ambient::stop_current_ambient();
}
}
if ( isdefined( var_3["occlusion"] ) )
{
if ( var_3["occlusion"] != "" )
set_occlusion( var_3["occlusion"] );
else
deactivate_occlusion();
}
if ( isdefined( var_3["filter"] ) )
{
if ( var_3["filter"] != "" )
{
set_filter( var_3["filter"], 0 );
level.player seteqlerp( 1, level._audio.filter.eq_index );
}
}
if ( isdefined( var_3["reverb"] ) )
{
if ( var_3["reverb"] != "" )
set_reverb( var_3["reverb"] );
else
clear_reverb();
}
if ( isdefined( var_3["mix"] ) )
{
if ( var_3["mix"] != "" )
set_mix( var_3["mix"], var_1 );
else
clear_mix();
}
}
stop_zones( var_0 )
{
if ( !isdefined( var_0 ) )
var_0 = 1.0;
maps\_audio_code::debug_println( "ZONE STOP ALL" );
foreach ( var_2 in level._audio.zone.cached )
stop_zone( var_2["name"], var_0 );
}
stop_zone( var_0, var_1 )
{
if ( isdefined( level._audio.zone.cached[var_0] ) && isdefined( level._audio.zone.cached[var_0]["state"] ) && level._audio.zone.cached[var_0]["state"] != "stopping" )
{
if ( !isdefined( var_1 ) )
var_1 = 1.0;
var_2 = level._audio.zone.cached[var_0];
maps\_audio_code::debug_println( "ZONE STOP " + var_0 );
if ( isdefined( var_2["ambience"] ) )
stop_ambient_track( var_2["ambience"], var_1 );
if ( isdefined( var_2["ambient_name"] ) )
maps\_audio_ambient::stop_ambient_event_zone( var_2["ambient_name"] );
level._audio.zone.cached[var_0]["state"] = "stopping";
}
}
init_filter()
{
level._audio.filter = spawnstruct();
level._audio.filter.eq_index = 0;
level._audio.filter.current = [];
level._audio.filter.current[0] = "";
level._audio.filter.current[1] = "";
level._audio.filter.previous = [];
level._audio.filter.previous[0] = "";
level._audio.filter.previous[1] = "";
}
set_filter( var_0, var_1 )
{
if ( !isdefined( var_1 ) )
var_1 = 0;
if ( level._audio.filter.current[var_1] == var_0 )
return;
if ( isdefined( level._audio.in_deathsdoor ) )
{
level._audio.deathsdoor.filter[var_1] = var_0;
return;
}
if ( level._audio.filter.current[var_1] != var_0 )
{
maps\_audio_code::debug_println( "filter DeactivateEq() index=" + var_1, 2 );
level.player deactivateeq( var_1 );
}
set_current_filter( var_1, var_0 );
level.player seteqfromtable( maps\_audio_code::get_map_soundtable(), var_0, var_1 );
}
set_current_filter( var_0, var_1 )
{
if ( var_1 == "deathsdoor" )
return;
level._audio.filter.previous[var_0] = level._audio.filter.current[var_0];
level._audio.filter.current[var_0] = var_1;
maps\_audio_code::set_hud_name_percent_value( "filter_" + var_0, var_1, "last" );
}
clear_filter( var_0 )
{
if ( !isdefined( var_0 ) )
var_0 = 0;
set_current_filter( var_0, "" );
maps\_audio_code::debug_println( "filter DeactivateEq() index=" + var_0, 2 );
level.player deactivateeq( var_0 );
maps\_audio_code::set_hud_name_percent_value( "filter_" + var_0, "", "last" );
}
init_occlusion()
{
level._audio.occlusion = spawnstruct();
level._audio.occlusion.current = "";
set_occlusion( "default" );
}
set_occlusion( var_0 )
{
if ( level._audio.occlusion.current == var_0 )
return;
thread set_occlusion_thread( var_0 );
}
set_occlusion_thread( var_0 )
{
if ( level._audio.occlusion.current == var_0 )
return;
level._audio.occlusion.current = var_0;
maps\_audio_code::debug_println( "occlusion SetOcclusionFromTable() name=" + var_0, 2 );
maps\_audio_code::set_hud_value( "occlusion", var_0 );
level.player setocclusionfromtable( maps\_audio_code::get_map_soundtable(), var_0 );
}
deactivate_occlusion()
{
maps\_audio_code::debug_println( "occlusion DeactivateAllOcclusion() " );
level.player deactivateallocclusion();
}
init_reverb( var_0 )
{
level._audio.reverb = spawnstruct();
level._audio.reverb.current = "";
}
set_reverb( var_0 )
{
if ( !isdefined( var_0 ) )
return;
if ( level._audio.reverb.current == var_0 )
return;
if ( isdefined( level._audio.in_deathsdoor ) && var_0 != "deathsdoor" )
{
level._audio.deathsdoor.reverb = var_0;
return;
}
level._audio.reverb.current = var_0;
maps\_audio_code::debug_println( "reverb SetReverbFromTable(): name=" + var_0, 2 );
level.player setreverbfromtable( maps\_audio_code::get_map_soundtable(), var_0, "snd_enveffectsprio_level" );
}
clear_reverb()
{
maps\_audio_code::debug_println( "deactivatereverb" );
level.player deactivatereverb( "snd_enveffectsprio_level", 2 );
level._audio.reverb.current = "";
maps\_audio_code::set_hud_value( "reverb", "" );
}
init_mix()
{
level._audio.mix = spawnstruct();
level._audio.mix.current = "";
level._audio.mix.previous = "";
set_mix( "default" );
}
set_mix( var_0, var_1 )
{
if ( level._audio.mix.current == var_0 )
return;
change_mix( var_0, "default", var_1 );
}
change_mix( var_0, var_1, var_2 )
{
if ( !isdefined( var_1 ) )
var_1 = "default";
if ( var_0 == var_1 )
return;
if ( isdefined( var_2 ) )
level.player setvolmodfromtable( maps\_audio_code::get_map_soundtable(), var_0, var_2 );
else
level.player setvolmodfromtable( maps\_audio_code::get_map_soundtable(), var_0 );
maps\_audio_code::set_hud_value( "mix", var_0 );
level._audio.mix.previous = level._audio.mix.current;
level._audio.mix.current = var_0;
}
clear_mix( var_0 )
{
if ( level._audio.mix.current == "" )
return;
if ( !isdefined( var_0 ) )
var_0 = 1;
change_mix( "default", level._audio.mix.current );
}
init_whizby()
{
level._audio.whizby = spawnstruct();
level._audio.whizby.current = "";
thread set_whizby( "default" );
}
set_whizby( var_0 )
{
if ( level._audio.whizby.current == var_0 )
return;
level._audio.whizby.current = var_0;
level.player setwhizbyfromtable( maps\_audio_code::get_map_soundtable(), var_0 );
}
init_timescale()
{
level._audio.timescale = spawnstruct();
level._audio.timescale.current = "";
set_timescale( "default" );
}
set_timescale( var_0 )
{
if ( level._audio.timescale.current == var_0 )
return;
level._audio.timescale.current = var_0;
level.player settimescalefactorfromtable( maps\_audio_code::get_map_soundtable(), var_0 );
}

277
maps/_audio_ambient.gsc Normal file
View File

@ -0,0 +1,277 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_ambient()
{
if ( isdefined( level._audio.ambient ) )
return;
level._audio.ambient = spawnstruct();
level._audio.ambient.thread_active = 0;
level._audio.ambient.current_zone = "";
level._audio.ambient.current = [];
level._audio.ambient.current["zone"] = [];
level._audio.ambient.elem_weights = [];
level._audio.ambient.cached_ambients = [];
level._audio.ambient.cached_elems = [];
level._audio.ambient.max_sound_ents = 15;
level._audio.ambient.sound_ents = [];
}
start_ambient_event_zone( var_0 )
{
start_ambient_event_internal( "zone", var_0 );
}
start_ambient_event_internal( var_0, var_1, var_2, var_3, var_4 )
{
maps\_audio_code::cache_ambient( var_1 );
if ( !isdefined( level._audio.ambient.cached_ambients[var_1] ) )
return;
level._audio.ambient.current_zone = var_1;
if ( !level._audio.ambient.thread_active )
level thread ambient_event_thread();
}
stop_ambient_event_zone( var_0, var_1 )
{
if ( var_0 == "" )
return;
if ( level._audio.ambient.current_zone == var_0 )
{
level._audio.ambient.current_zone = "";
fade_ambient_elems( var_0, var_1 );
}
}
stop_current_ambient()
{
if ( level._audio.ambient.current_zone == "" )
return;
stop_ambient_event_zone( level._audio.ambient.current_zone );
}
stop_all_ambient_events()
{
stop_ambient_event_zone( level._audio.ambient.current_zone );
}
fade_ambient_elems( var_0, var_1 )
{
if ( !isdefined( var_1 ) )
var_1 = 1;
foreach ( var_3 in level._audio.ambient.sound_ents )
{
if ( !isdefined( var_3.ambient ) || var_3.ambient != var_0 )
continue;
var_3 thread fade_ambient_elem_internal( var_1 );
}
}
fade_ambient_elem_internal( var_0 )
{
if ( isdefined( self.fading ) )
return;
self endon( "sounddone" );
self.fading = 1;
thread fade_ambient_elem_reset();
self scalevolume( 0.0, var_0 );
wait( var_0 );
self stopsounds();
self notify( "sounddone" );
}
fade_ambient_elem_reset()
{
self waittill( "sounddone" );
self scalevolume( 1 );
self.fading = undefined;
}
swap_ambient_event_zones( var_0, var_1, var_2, var_3 )
{
swap_ambient_event_zone_internal( var_0, var_1 );
swap_ambient_event_zone_internal( var_2, var_3 );
}
swap_ambient_event_zone_internal( var_0, var_1 )
{
if ( isdefined( var_0 ) && var_0 != "" && var_0 != "none" )
{
if ( var_1 == 0 )
stop_ambient_event_zone( var_0 );
else
start_ambient_event_zone( var_0 );
}
}
ambient_event_thread()
{
level endon( "stop_ambient_event_thread" );
var_0 = "";
level._audio.ambient.thread_active = 1;
for (;;)
{
var_1 = gettime();
if ( level._audio.ambient.current_zone != "" )
{
var_2 = level._audio.ambient.current_zone;
var_3 = level._audio.ambient.cached_ambients[var_2];
if ( isdefined( var_3.serialized ) )
{
if ( !isdefined( var_3.next_play_time ) )
var_3 set_next_play_time( 1 );
if ( var_3.next_play_time <= var_1 )
{
if ( var_3.events.size > 1 )
{
for ( var_4 = var_3 get_random_event(); var_4.elem == var_0; var_4 = var_3 get_random_event() )
wait 0.05;
}
else
var_4 = var_3.events[0];
play_ambient_elem( var_4, var_2 );
if ( level._audio.ambient.current_zone != "" )
{
var_0 = var_4.elem;
var_3 set_next_play_time( 1 );
}
}
}
else
{
foreach ( var_4 in var_3.events )
{
if ( !isdefined( var_4.next_play_time ) )
var_4 set_next_play_time();
if ( var_4.next_play_time <= var_1 )
{
level thread play_ambient_elem( var_4, var_2 );
var_4 set_next_play_time();
}
}
}
}
wait 0.05;
}
}
stop_ambient_event_thread()
{
level notify( "stop_ambient_event_thread" );
level._audio.ambient.thread_active = 0;
}
play_ambient_elem( var_0, var_1 )
{
var_2 = level._audio.ambient.cached_elems[var_0.elem];
play_ambient_elem_oneshot( var_2, var_1 );
}
play_ambient_elem_oneshot( var_0, var_1 )
{
var_2 = var_0["alias"];
var_3 = get_sound_ent();
if ( !isdefined( var_3 ) )
{
maps\_audio_code::debug_println( "^3play_ambient_elem_oneshot cannot play, out of sound ents" );
return;
}
maps\_audio_code::debug_println( "play_ambient_elem_oneshot -- ambient: \"" + var_1 + "\" alias: \"" + var_2 + "\"" );
var_3.ambient = var_1;
var_3.is_playing = 1;
var_4 = get_elem_position( var_0 );
var_3.origin = var_4 + level.player.origin;
var_3 playsound( var_2, "sounddone" );
var_3 waittill( "sounddone" );
wait 0.1;
var_3.ambient = undefined;
var_3.is_playing = 0;
}
get_elem_position( var_0 )
{
var_1 = randomfloatrange( var_0["range"][0], var_0["range"][1] );
var_2 = undefined;
if ( isdefined( var_0["cone"] ) )
var_2 = randomfloatrange( var_0["cone"][0], var_0["cone"][1] );
else
var_2 = randomfloatrange( 0, 360 );
var_3 = anglestoforward( ( 0, var_2, 0 ) ) * var_1;
return ( var_3[0], var_3[1], 0 );
}
set_next_play_time( var_0 )
{
if ( isdefined( var_0 ) )
var_1 = level._audio.ambient.cached_ambients[level._audio.ambient.current_zone].data;
else
var_1 = level._audio.ambient.cached_elems[self.elem];
var_2 = randomfloatrange( var_1["time"][0], var_1["time"][1] );
self.next_play_time = gettime() + var_2 * 1000;
}
get_random_event()
{
var_0 = 0;
foreach ( var_2 in self.events )
var_0 = var_0 + var_2.weight;
var_4 = randomfloat( var_0 );
var_5 = 0;
var_6 = undefined;
foreach ( var_2 in self.events )
{
var_5 = var_5 + var_2.weight;
if ( var_4 < var_5 )
{
var_6 = var_2;
break;
}
}
return var_6;
}
get_sound_ent()
{
foreach ( var_1 in level._audio.ambient.sound_ents )
{
if ( !var_1.is_playing )
return var_1;
}
if ( level._audio.ambient.sound_ents.size < level._audio.ambient.max_sound_ents )
{
var_1 = spawn( "script_origin", ( 0, 0, 0 ) );
var_1.is_playing = 0;
level._audio.ambient.sound_ents[level._audio.ambient.sound_ents.size] = var_1;
return var_1;
}
return undefined;
}

842
maps/_audio_code.gsc Normal file
View File

@ -0,0 +1,842 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
get_channel_array()
{
var_0 = [];
var_0["physics"] = "physics";
var_0["ambdist1"] = "ambdist1";
var_0["ambdist2"] = "ambdist2";
var_0["alarm"] = "alarm";
var_0["auto"] = "auto";
var_0["auto2"] = "auto2";
var_0["auto2d"] = "auto2d";
var_0["autodog"] = "autodog";
var_0["explosiondist1"] = "explosiondist1";
var_0["explosiondist2"] = "explosiondist2";
var_0["explosiveimpact"] = "explosiveimpact";
var_0["element"] = "element";
var_0["foley_plr_mvmt"] = "foley_plr_mvmt";
var_0["foley_plr_weap"] = "foley_plr_weap";
var_0["foley_npc_mvmt"] = "foley_npc_mvmt";
var_0["foley_npc_weap"] = "foley_npc_weap";
var_0["element_int"] = "element_int";
var_0["element_ext"] = "element_ext";
var_0["foley_dog_mvmt"] = "foley_dog_mvmt";
var_0["voice_dog"] = "voice_dog";
var_0["element_lim"] = "element_lim";
var_0["element2d"] = "element2d";
var_0["voice_dog_dist"] = "voice_dog_dist";
var_0["bulletflesh1npc_npc"] = "bulletflesh1npc_npc";
var_0["bulletflesh2npc_npc"] = "bulletflesh2npc_npc";
var_0["bulletimpact"] = "bulletimpact";
var_0["bulletflesh1"] = "bulletflesh1";
var_0["bulletflesh2"] = "bulletflesh2";
var_0["vehicle"] = "vehicle";
var_0["vehiclelimited"] = "vehiclelimited";
var_0["menu"] = "menu";
var_0["menulim1"] = "menulim1";
var_0["menulim2"] = "menulim2";
var_0["bulletflesh1npc"] = "bulletflesh1npc";
var_0["bulletflesh2npc"] = "bulletflesh2npc";
var_0["bulletwhizbyin"] = "bulletwhizbyin";
var_0["bulletwhizbyout"] = "bulletwhizbyout";
var_0["body"] = "body";
var_0["body2d"] = "body2d";
var_0["reload"] = "reload";
var_0["reload2d"] = "reload2d";
var_0["foley_plr_step"] = "foley_plr_step";
var_0["foley_plr_step_unres"] = "foley_plr_step";
var_0["foley_npc_step"] = "foley_npc_step";
var_0["foley_dog_step"] = "foley_dog_step";
var_0["item"] = "item";
var_0["weapon_drone"] = "weapon_drone";
var_0["explosion1"] = "explosion1";
var_0["explosion2"] = "explosion2";
var_0["explosion3"] = "explosion3";
var_0["explosion4"] = "explosion4";
var_0["explosion5"] = "explosion5";
var_0["effects1"] = "effects1";
var_0["effects2"] = "effects2";
var_0["effects3"] = "effects3";
var_0["effects2d1"] = "effects2d1";
var_0["effects2d2"] = "effects2d2";
var_0["norestrict"] = "norestrict";
var_0["norestrict2d"] = "norestrict2d";
var_0["aircraft"] = "aircraft";
var_0["vehicle2d"] = "vehicle2d";
var_0["weapon_dist"] = "weapon_dist";
var_0["weapon_mid"] = "weapon_mid";
var_0["weapon"] = "weapon";
var_0["weapon2d"] = "weapon2d";
var_0["nonshock"] = "nonshock";
var_0["nonshock2"] = "nonshock2";
var_0["voice"] = "voice";
var_0["music_emitter"] = "music_emitter";
var_0["voice_dog_attack"] = "voice_dog_attack";
var_0["local"] = "local";
var_0["local2"] = "local2";
var_0["local3"] = "local3";
var_0["ambient"] = "ambient";
var_0["plr_weap_fire_2d"] = "plr_weap_fire_2d";
var_0["plr_weap_mech_2d"] = "plr_weap_mech_2d";
var_0["hurt"] = "hurt";
var_0["player1"] = "player1";
var_0["player2"] = "player2";
var_0["music"] = "music";
var_0["musicnopause"] = "musicnopause";
var_0["mission"] = "mission";
var_0["missionfx"] = "missionfx";
var_0["announcer"] = "announcer";
var_0["shellshock"] = "shellshock";
return var_0;
}
cache_ambient( var_0 )
{
if ( isdefined( level._audio.ambient.cached_ambients[var_0] ) )
return;
var_1 = [ "ambient_name", "time_min", "time_max" ];
var_2 = get_table_data( get_map_soundtable(), var_0, var_1 );
if ( var_2.size == 0 )
return;
var_2["time_min"] = string_to_float( var_2["time_min"] );
var_2["time_max"] = string_to_float( var_2["time_max"] );
var_2["time"] = [ var_2["time_min"], var_2["time_max"] ];
var_2["time_min"] = undefined;
var_2["time_max"] = undefined;
var_3 = spawnstruct();
var_3.data = var_2;
if ( var_2["time"][0] > 0 && var_2["time"][1] > 0 )
var_3.serialized = 1;
level._audio.ambient.cached_ambients[var_0] = var_3;
cache_ambient_event( var_0 );
}
cache_ambient_event( var_0 )
{
var_1 = [ "ambient_event", "element", "weight" ];
var_2 = get_table_data_array( get_map_soundtable(), var_0, var_1 );
if ( var_2.size == 0 )
return;
foreach ( var_5, var_4 in var_2 )
var_2[var_5]["weight"] = string_to_float( var_4["weight"] );
var_6 = [];
foreach ( var_4 in var_2 )
{
var_8 = spawnstruct();
var_8.elem = var_4["element"];
var_8.weight = var_4["weight"];
var_6[var_6.size] = var_8;
cache_ambient_element( var_8 );
}
level._audio.ambient.cached_ambients[var_0].events = var_6;
}
cache_ambient_element( var_0 )
{
var_1 = var_0.elem;
if ( isdefined( level._audio.ambient.cached_elems[var_1] ) )
return;
var_2 = [ "ambient_element", "alias", "range_min", "range_max", "cone_min", "cone_max", "time_min", "time_max", "travel_min", "travel_max", "travel_time_min", "travel_time_max" ];
var_3 = get_table_data( get_map_soundtable(), var_1, var_2 );
if ( var_3.size == 0 )
return;
foreach ( var_6, var_5 in var_3 )
{
if ( var_5 == "" )
{
var_3[var_6] = undefined;
continue;
}
if ( var_6 == "alias" )
continue;
var_3[var_6] = string_to_float( var_3[var_6] );
}
var_7 = [ "range", "cone", "time", "travel", "travel_time" ];
foreach ( var_9 in var_7 )
{
if ( isdefined( var_3[var_9 + "_min"] ) && isdefined( var_3[var_9 + "_max"] ) )
{
var_3[var_9] = [ var_3[var_9 + "_min"], var_3[var_9 + "_max"] ];
var_3[var_9 + "_min"] = undefined;
var_3[var_9 + "_max"] = undefined;
}
}
level._audio.ambient.cached_elems[var_1] = var_3;
}
cache_zone( var_0 )
{
if ( isdefined( level._audio.zone.cached[var_0] ) )
return;
var_1 = [ "zone_name", "ambience", "ambient_name", "mix", "reverb", "filter", "occlusion" ];
var_2 = get_table_data( get_map_soundtable(), var_0, var_1 );
if ( var_2.size == 0 )
return;
level._audio.zone.cached[var_0] = var_2;
}
get_zone_blend_args( var_0, var_1 )
{
if ( !isdefined( level._audio.zone.cached[var_0] ) )
{
cache_zone( var_0 );
if ( !isdefined( level._audio.zone.cached[var_0] ) )
{
debug_warning( "Couldn't find zone: " + var_0 );
return undefined;
}
}
var_2 = level._audio.zone.cached[var_0];
if ( !isdefined( level._audio.zone.cached[var_1] ) )
{
cache_zone( var_1 );
if ( !isdefined( level._audio.zone.cached[var_1] ) )
{
debug_warning( "Couldn't find zone: " + var_1 );
return undefined;
}
}
var_3 = level._audio.zone.cached[var_1];
var_4 = [ "ambience", "occlusion", "filter", "reverb", "mix" ];
var_5 = [];
var_5["zone1"] = var_0;
var_5["zone2"] = var_1;
foreach ( var_7 in var_4 )
{
var_5[var_7 + "1"] = var_2[var_7];
var_5[var_7 + "2"] = var_3[var_7];
}
var_5["ambient_name1"] = level._audio.ambient.current_zone;
maps\_audio_ambient::stop_current_ambient();
var_5["ambient_name2"] = var_3["ambient_name"];
return var_5;
}
is_dyn_ambience_valid( var_0, var_1 )
{
if ( !isdefined( var_0 ) && !isdefined( var_1 ) )
return 0;
if ( isdefined( var_0 ) || isdefined( var_1 ) )
return 1;
if ( var_0 == var_1 )
return 0;
return 1;
}
is_ambience_blend_valid( var_0, var_1 )
{
if ( !isdefined( var_0 ) && !isdefined( var_1 ) )
return 0;
if ( var_0 == var_1 )
return 0;
if ( !isdefined( var_1 ) )
return 0;
return 1;
}
blend_zones( var_0, var_1, var_2, var_3 )
{
var_4 = [ var_0, var_1 ];
var_5 = var_4;
if ( var_3 )
var_5 = common_scripts\utility::array_reverse( var_5 );
if ( is_ambience_blend_valid( var_2["ambience1"], var_2["ambience2"] ) )
{
var_6 = [];
for ( var_7 = 0; var_7 < 2; var_7++ )
{
var_8 = var_7 + 1;
var_9 = "ambience" + var_8;
if ( isdefined( var_2[var_9] ) && var_2[var_9] != "" )
{
var_10 = level._audio.zone.cached[var_2["zone" + var_8]];
var_6[var_7] = spawnstruct();
var_6[var_7].alias = var_2[var_9];
var_6[var_7].volume = var_4[var_7];
var_6[var_7].fade = 0.5;
}
}
if ( var_6.size > 0 )
maps\_audio::mix_ambient_tracks( var_6 );
}
if ( is_dyn_ambience_valid( var_2["ambient_name1"], var_2["ambient_name2"] ) )
maps\_audio_ambient::swap_ambient_event_zones( var_2["ambient_name1"], var_0, var_2["ambient_name2"], var_1 );
var_11 = 0;
for ( var_7 = 0; var_7 < 2; var_7++ )
{
var_8 = var_7 + 1;
var_12 = undefined;
if ( isdefined( var_2["filter" + var_8] ) )
{
var_11++;
var_12 = var_2["filter" + var_8];
}
if ( !isdefined( var_12 ) || var_12 == "" )
{
maps\_audio::clear_filter( var_7 );
continue;
}
maps\_audio::set_filter( var_12, var_7 );
}
if ( var_11 == 2 )
level.player seteqlerp( var_5[0], 0 );
if ( var_0 >= 0.75 )
{
if ( isdefined( var_2["reverb1"] ) )
{
if ( var_2["reverb1"] == "" )
{
}
else
maps\_audio::set_reverb( var_2["reverb1"] );
}
if ( isdefined( var_2["mix1"] ) )
{
if ( var_2["mix1"] == "" )
maps\_audio::clear_mix( 2 );
else
maps\_audio::set_mix( var_2["mix1"] );
}
if ( isdefined( var_2["occlusion1"] ) )
{
if ( var_2["occlusion1"] == "" )
maps\_audio::deactivate_occlusion();
else
maps\_audio::set_occlusion( var_2["occlusion1"] );
}
}
else if ( var_1 >= 0.75 )
{
if ( isdefined( var_2["reverb2"] ) )
{
if ( var_2["reverb2"] == "" )
{
}
else
maps\_audio::set_reverb( var_2["reverb2"] );
}
if ( isdefined( var_2["mix2"] ) )
{
if ( var_2["mix2"] == "" )
maps\_audio::clear_mix( 2 );
else
maps\_audio::set_mix( var_2["mix2"] );
}
if ( isdefined( var_2["occlusion2"] ) )
{
if ( var_2["occlusion2"] == "" )
maps\_audio::deactivate_occlusion();
else
maps\_audio::set_occlusion( var_2["occlusion2"] );
}
}
}
get_current_audio_zone()
{
return level._audio.zone.current_zone;
}
set_current_audio_zone( var_0 )
{
level._audio.zone.current_zone = var_0;
}
validate_zone( var_0, var_1 )
{
}
cache_filter( var_0 )
{
if ( isdefined( level._audio.filter.cached[var_0] ) )
return;
var_1 = [ "filter_name", "channel", "band", "type", "freq", "gain", "q" ];
var_2 = get_table_data_array( get_map_soundtable(), var_0, var_1 );
if ( var_2.size == 0 )
return;
foreach ( var_5, var_4 in var_2 )
{
var_2[var_5]["band"] = string_to_int( var_4["band"] );
var_2[var_5]["freq"] = string_to_float( var_4["freq"] );
var_2[var_5]["gain"] = string_to_float( var_4["gain"] );
var_2[var_5]["q"] = string_to_float( var_4["q"] );
}
level._audio.filter.cached[var_0] = var_2;
}
cache_occlusion( var_0 )
{
if ( isdefined( level._audio.occlusion.cached[var_0] ) )
return;
var_1 = [ "occlusion_name", "channel", "freq", "type", "gain", "q" ];
var_2 = get_table_data_array( get_map_soundtable(), var_0, var_1 );
if ( var_2.size == 0 )
return;
foreach ( var_5, var_4 in var_2 )
{
var_2[var_5]["freq"] = string_to_float( var_4["freq"] );
var_2[var_5]["gain"] = string_to_float( var_4["gain"] );
var_2[var_5]["q"] = string_to_float( var_4["q"] );
}
level._audio.occlusion.cached[var_0] = var_2;
}
cache_mix( var_0 )
{
if ( isdefined( level._audio.mix.cached[var_0] ) )
return;
var_1 = [ "mix_name", "mix_bus", "volume", "fade" ];
var_2 = get_table_data_array( get_map_soundtable(), var_0, var_1 );
if ( var_2.size == 0 )
return;
foreach ( var_5, var_4 in var_2 )
{
var_2[var_5]["volume"] = string_to_float( var_4["volume"] );
var_2[var_5]["fade"] = string_to_float( var_4["fade"] );
var_2[var_5]["mix_bus"] = undefined;
}
level._audio.mix.cached[var_0] = var_2;
}
cache_mix_default()
{
var_0 = [ "mix_bus", "volume" ];
var_1 = read_in_table( "soundaliases/volumemodgroups.svmod", var_0 );
foreach ( var_4, var_3 in var_1 )
{
var_1[var_4]["volume"] = string_to_float( var_3["volume"] );
var_1[var_4]["fade"] = 1;
var_1[var_4]["mix_bus"] = undefined;
}
level._audio.mix.cached["default"] = var_1;
}
cache_reverb( var_0 )
{
if ( isdefined( level._audio.reverb.cached[var_0] ) )
return;
var_1 = [ "reverb_name", "roomtype", "drylevel", "wetlevel", "fade" ];
var_2 = get_table_data( get_map_soundtable(), var_0, var_1 );
if ( var_2.size == 0 )
return;
var_2["drylevel"] = string_to_float( var_2["drylevel"] );
var_2["wetlevel"] = string_to_float( var_2["wetlevel"] );
var_2["fade"] = string_to_float( var_2["fade"] );
level._audio.reverb.cached[var_0] = var_2;
}
cache_whizby( var_0 )
{
if ( isdefined( level._audio.whizby.cached[var_0] ) )
return;
var_1 = [ "whizby_name", "near_radius", "medium_radius", "far_radius", "radius_offset", "near_spread", "medium_spread", "far_spread", "near_prob", "medium_prob", "far_prob" ];
var_2 = get_table_data( get_map_soundtable(), var_0, var_1 );
if ( var_2.size == 0 )
return;
foreach ( var_5, var_4 in var_2 )
var_2[var_5] = string_to_float( var_2[var_5] );
level._audio.whizby.cached[var_0] = var_2;
}
cache_timescale( var_0 )
{
if ( isdefined( level._audio.timescale.cached[var_0] ) )
return;
var_1 = [ "timescale_name", "channel", "scale" ];
var_2 = get_table_data_array( get_map_soundtable(), var_0, var_1 );
if ( var_2.size == 0 )
return;
foreach ( var_5, var_4 in var_2 )
var_2[var_5]["scale"] = string_to_float( var_4["scale"] );
level._audio.timescale.cached[var_0] = var_2;
}
get_table_data( var_0, var_1, var_2 )
{
var_3 = [];
if ( tableexists( get_map_soundtable() ) )
var_3 = get_table_data_array_internal( get_map_soundtable(), var_1, var_2, 1 );
if ( var_3.size == 0 )
{
debug_println( "^2Looking in common soundtable for " + var_1 );
var_3 = get_table_data_array_internal( get_common_soundtable(), var_1, var_2, 1 );
}
return var_3;
}
get_table_data_array( var_0, var_1, var_2 )
{
var_3 = [];
if ( tableexists( get_map_soundtable() ) )
var_3 = get_table_data_array_internal( get_map_soundtable(), var_1, var_2 );
if ( var_3.size == 0 )
{
debug_println( "^2Looking in common soundtable for " + var_1 );
var_3 = get_table_data_array_internal( get_common_soundtable(), var_1, var_2 );
}
return var_3;
}
get_table_data_array_internal( var_0, var_1, var_2, var_3 )
{
var_4 = var_2[0];
var_5 = tablelookuprownum( var_0, 0, var_4 );
var_6 = 0;
var_7 = [];
if ( var_5 < 0 )
return var_7;
var_8 = undefined;
for (;;)
{
var_5++;
var_9 = tablelookupbyrow( var_0, var_5, 0 );
if ( var_9 == "" )
{
var_6++;
if ( var_6 > 10 )
break;
}
else
{
var_6 = 0;
if ( isdefined( var_8 ) && var_8 != var_9 )
break;
if ( var_9 != var_1 )
continue;
if ( var_9 == "END_OF_FILE" || in_new_section( var_4, var_9 ) )
break;
var_8 = var_1;
var_10 = [];
var_11 = undefined;
for ( var_12 = 1; var_12 < var_2.size; var_12++ )
{
var_13 = tablelookupbyrow( var_0, var_5, var_12 );
var_10[var_2[var_12]] = var_13;
if ( var_12 == 1 )
var_11 = var_13;
}
if ( isdefined( var_3 ) )
return var_10;
var_7[var_11] = var_10;
}
}
return var_7;
}
in_new_section( var_0, var_1 )
{
var_2 = [ "zone_name", "whizby_name", "reverb_name", "mix_name", "filter_name", "occlusion_name", "timescale_name", "ambient_name", "ambient_event", "ambient_element", "adsr_name", "adsr_zone_player", "adsr_zone_npc" ];
var_2 = common_scripts\utility::array_remove( var_2, var_0 );
foreach ( var_4 in var_2 )
{
if ( var_4 == var_1 )
return 1;
}
return 0;
}
read_in_table( var_0, var_1 )
{
var_2 = 0;
var_3 = 0;
var_4 = [];
for (;;)
{
var_2++;
var_5 = tablelookupbyrow( var_0, var_2, 0 );
if ( var_5 == "" )
{
var_3++;
if ( var_3 > 10 )
break;
}
else
{
var_3 = 0;
var_6 = [];
var_6[var_1[0]] = var_5;
for ( var_7 = 1; var_7 < var_1.size; var_7++ )
{
var_8 = tablelookupbyrow( var_0, var_2, var_7 );
var_6[var_1[var_7]] = var_8;
}
var_4[var_5] = var_6;
}
}
return var_4;
}
get_map_soundtable()
{
return "soundtables/" + common_scripts\utility::get_template_level() + ".csv";
}
get_common_soundtable()
{
return "soundtables/common.csv";
}
string_to_float( var_0 )
{
if ( var_0 == "" )
return 0;
return float( var_0 );
}
string_to_int( var_0 )
{
if ( var_0 == "" )
return 0;
return int( var_0 );
}
round_to( var_0, var_1 )
{
return int( var_0 * var_1 ) / var_1;
}
debug_println( var_0, var_1 )
{
}
debug_iprintln( var_0 )
{
}
debug_enabled()
{
return 0;
}
debug_warning( var_0 )
{
debug_println( "^2" + var_0 );
}
debug_error( var_0 )
{
debug_println( "^3" + var_0 );
}
get_headroom_dvar()
{
return getdvarfloat( "debug_headroom" );
}
create_submix_hud()
{
}
destroy_submix_hud()
{
}
new_volmod_hud( var_0, var_1, var_2, var_3, var_4, var_5 )
{
}
new_submix_hud( var_0, var_1, var_2, var_3, var_4, var_5 )
{
}
delete_volmod_hud( var_0 )
{
}
create_zone_hud()
{
}
destroy_zone_hud()
{
}
remove_hud_text( var_0 )
{
if ( !isdefined( level._audio.huds[var_0] ) )
return;
level._audio.huds[var_0] destroy();
level._audio.huds = common_scripts\utility::array_removeundefined( level._audio.huds );
}
debug_hud_disabled()
{
}
debug_audio_hud()
{
}
check_zone_hud_dvar()
{
}
check_submix_hud_dvar()
{
}
create_hud( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
{
}
init_hud( var_0, var_1, var_2, var_3, var_4, var_5 )
{
}
init_hud_internal( var_0, var_1, var_2, var_3, var_4, var_5 )
{
}
init_hud_percent( var_0, var_1, var_2, var_3, var_4, var_5 )
{
}
set_hud_value( var_0, var_1 )
{
}
set_hud_percent_value( var_0, var_1 )
{
}
set_hud_value_internal( var_0 )
{
}
set_hud_name_percent_value( var_0, var_1, var_2 )
{
}

610
maps/_autosave.gsc Normal file
View File

@ -0,0 +1,610 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
level.lastautosavetime = 0;
common_scripts\utility::flag_init( "game_saving" );
common_scripts\utility::flag_init( "can_save" );
common_scripts\utility::flag_set( "can_save" );
common_scripts\utility::flag_init( "disable_autosaves" );
if ( !isdefined( level._extra_autosave_checks ) )
level._extra_autosave_checks = [];
level.autosave_proximity_threat_func = ::autosave_proximity_threat_func;
}
getdescription()
{
return &"AUTOSAVE_AUTOSAVE";
}
getnames( var_0 )
{
if ( var_0 == 0 )
var_1 = &"AUTOSAVE_GAME";
else
var_1 = &"AUTOSAVE_NOGAME";
return var_1;
}
beginningoflevelsave()
{
common_scripts\utility::flag_wait( "introscreen_complete" );
if ( isdefined( level.introscreen_complete_delay ) )
wait( level.introscreen_complete_delay );
if ( level.missionfailed )
return;
if ( common_scripts\utility::flag( "game_saving" ) )
return;
common_scripts\utility::flag_set( "game_saving" );
var_0 = "levelshots / autosave / autosave_" + level.script + "start";
savegame( "levelstart", &"AUTOSAVE_LEVELSTART", var_0, 1 );
setdvar( "ui_grenade_death", "0" );
common_scripts\utility::flag_clear( "game_saving" );
}
trigger_autosave_stealth( var_0 )
{
var_0 waittill( "trigger" );
maps\_utility::autosave_stealth();
}
trigger_autosave_tactical( var_0 )
{
var_0 waittill( "trigger" );
maps\_utility::autosave_tactical();
}
trigger_autosave( var_0 )
{
if ( !isdefined( var_0.script_autosave ) )
var_0.script_autosave = 0;
autosaves_think( var_0 );
}
autosaves_think( var_0 )
{
var_1 = getnames( var_0.script_autosave );
if ( !isdefined( var_1 ) )
return;
wait 1;
var_0 waittill( "trigger" );
var_2 = var_0.script_autosave;
var_3 = "levelshots / autosave / autosave_" + level.script + var_2;
tryautosave( var_2, var_1, var_3 );
if ( isdefined( var_0 ) )
var_0 delete();
}
autosavenamethink( var_0 )
{
if ( maps\_utility::is_no_game_start() )
return;
wait 1;
var_0 waittill( "trigger" );
if ( !isdefined( var_0 ) )
return;
var_1 = var_0.script_autosavename;
var_0 delete();
if ( isdefined( level.customautosavecheck ) )
{
if ( ![[ level.customautosavecheck ]]() )
return;
}
maps\_utility::autosave_by_name( var_1 );
}
trigger_autosave_immediate( var_0 )
{
var_0 waittill( "trigger" );
}
autosaveprint( var_0, var_1 )
{
if ( isdefined( var_1 ) )
return;
return;
}
autosave_timeout( var_0 )
{
level endon( "trying_new_autosave" );
level endon( "autosave_complete" );
wait( var_0 );
common_scripts\utility::flag_clear( "game_saving" );
level notify( "autosave_timeout" );
}
_autosave_game_now_nochecks()
{
var_0 = "levelshots / autosave / autosave_" + level.script + "start";
savegame( "levelstart", &"AUTOSAVE_LEVELSTART", var_0, 1 );
autosave_recon( 0 );
}
_autosave_game_now_notrestart()
{
var_0 = "levelshots / autosave / autosave_" + level.script + "start";
if ( getdvarint( "g_reloading" ) == 0 )
{
savegame( "levelstart", &"AUTOSAVE_LEVELSTART", var_0, 1 );
autosave_recon( 0 );
}
}
_autosave_game_now( var_0 )
{
if ( isdefined( level.missionfailed ) && level.missionfailed )
return;
if ( common_scripts\utility::flag( "game_saving" ) )
return 0;
for ( var_1 = 0; var_1 < level.players.size; var_1++ )
{
var_2 = level.players[var_1];
if ( !isalive( var_2 ) )
return 0;
}
var_3 = "save_now";
var_4 = getdescription();
if ( isdefined( var_0 ) )
var_5 = savegamenocommit( var_3, var_4, "$default", 1 );
else
var_5 = savegamenocommit( var_3, var_4 );
wait 0.05;
if ( issaverecentlyloaded() )
{
level.lastautosavetime = gettime();
return 0;
}
if ( var_5 < 0 )
return 0;
if ( !try_to_autosave_now() )
return 0;
common_scripts\utility::flag_set( "game_saving" );
wait 2;
common_scripts\utility::flag_clear( "game_saving" );
if ( !commitwouldbevalid( var_5 ) )
return 0;
if ( try_to_autosave_now() )
{
autosave_recon( var_5 );
commitsave( var_5 );
setdvar( "ui_grenade_death", "0" );
}
return 1;
}
autosave_now_trigger( var_0 )
{
var_0 waittill( "trigger" );
maps\_utility::autosave_now();
}
try_to_autosave_now()
{
if ( !issavesuccessful() )
return 0;
for ( var_0 = 0; var_0 < level.players.size; var_0++ )
{
var_1 = level.players[var_0];
if ( !var_1 autosavehealthcheck() )
return 0;
}
if ( !common_scripts\utility::flag( "can_save" ) )
return 0;
return 1;
}
tryautosave( var_0, var_1, var_2, var_3, var_4, var_5 )
{
if ( common_scripts\utility::flag( "disable_autosaves" ) )
return 0;
level endon( "nextmission" );
level.player endon( "death" );
if ( maps\_utility::is_coop() )
level.player2 endon( "death" );
level notify( "trying_new_autosave" );
if ( common_scripts\utility::flag( "game_saving" ) )
return 0;
if ( isdefined( level.nextmission ) )
return 0;
var_6 = 1.25;
var_7 = 1.25;
if ( isdefined( var_3 ) && var_3 < var_6 + var_7 )
{
}
if ( !isdefined( var_5 ) )
var_5 = 0;
if ( !isdefined( var_2 ) )
var_2 = "$default";
if ( !isdefined( var_4 ) )
var_4 = 0;
common_scripts\utility::flag_set( "game_saving" );
var_8 = getdescription();
var_9 = gettime();
for (;;)
{
if ( autosavecheck( undefined, var_4 ) )
{
var_10 = savegamenocommit( var_0, var_8, var_2, var_5 );
if ( var_10 < 0 )
break;
wait 0.05;
if ( issaverecentlyloaded() )
{
level.lastautosavetime = gettime();
break;
}
wait( var_6 );
if ( extra_autosave_checks_failed() )
continue;
if ( !autosavecheck( undefined, var_4 ) )
continue;
wait( var_7 );
if ( !autosavecheck_not_picky() )
continue;
if ( isdefined( var_3 ) )
{
if ( gettime() > var_9 + var_3 * 1000 )
break;
}
if ( !common_scripts\utility::flag( "can_save" ) )
break;
if ( !commitwouldbevalid( var_10 ) )
{
common_scripts\utility::flag_clear( "game_saving" );
return 0;
}
autosave_recon( var_10 );
commitsave( var_10 );
level.lastsavetime = gettime();
setdvar( "ui_grenade_death", "0" );
break;
}
wait 0.25;
}
common_scripts\utility::flag_clear( "game_saving" );
return 1;
}
extra_autosave_checks_failed()
{
foreach ( var_1 in level._extra_autosave_checks )
{
if ( ![[ var_1["func"] ]]() )
{
autosaveprint( "autosave failed: " + var_1["msg"] );
return 1;
}
}
return 0;
}
autosavecheck_not_picky()
{
return autosavecheck( 0, 0 );
}
autosavecheck( var_0, var_1 )
{
if ( isdefined( level.autosave_check_override ) )
return [[ level.autosave_check_override ]]();
if ( isdefined( level.special_autosavecondition ) && ![[ level.special_autosavecondition ]]() )
return 0;
if ( level.missionfailed )
return 0;
if ( !isdefined( var_0 ) )
var_0 = level.dopickyautosavechecks;
if ( !isdefined( var_1 ) )
var_1 = 0;
if ( var_1 )
{
if ( ![[ level.global_callbacks["_autosave_stealthcheck"] ]]() )
return 0;
}
for ( var_2 = 0; var_2 < level.players.size; var_2++ )
{
var_3 = level.players[var_2];
if ( !var_3 autosavehealthcheck() )
return 0;
if ( var_0 && !var_3 autosaveammocheck() )
return 0;
}
if ( level.autosave_threat_check_enabled )
{
if ( !autosavethreatcheck( var_0 ) )
return 0;
}
for ( var_2 = 0; var_2 < level.players.size; var_2++ )
{
var_3 = level.players[var_2];
if ( !var_3 autosaveplayercheck( var_0 ) )
return 0;
}
if ( isdefined( level.savehere ) && !level.savehere )
return 0;
if ( isdefined( level.cansave ) && !level.cansave )
return 0;
if ( !issavesuccessful() )
{
autosaveprint( "autosave failed: save call was unsuccessful" );
return 0;
}
return 1;
}
autosaveplayercheck( var_0 )
{
if ( isdefined( level.ac130gunner ) && level.ac130gunner == self )
return 1;
if ( self ismeleeing() && var_0 )
{
autosaveprint( "autosave failed:player is meleeing" );
return 0;
}
if ( self isthrowinggrenade() && var_0 )
{
autosaveprint( "autosave failed:player is throwing a grenade" );
return 0;
}
if ( self isfiring() && var_0 )
{
autosaveprint( "autosave failed:player is firing" );
return 0;
}
if ( isdefined( self.shellshocked ) && self.shellshocked )
{
autosaveprint( "autosave failed:player is in shellshock" );
return 0;
}
if ( common_scripts\utility::isflashed() )
{
autosaveprint( "autosave failed:player is flashbanged" );
return 0;
}
return 1;
}
autosaveammocheck()
{
if ( isdefined( level.ac130gunner ) && level.ac130gunner == self )
return 1;
var_0 = self getweaponslistprimaries();
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
{
var_2 = self getfractionmaxammo( var_0[var_1] );
if ( var_2 > 0.1 )
return 1;
}
autosaveprint( "autosave failed: ammo too low" );
return 0;
}
autosavehealthcheck()
{
if ( isdefined( level.ac130gunner ) && level.ac130gunner == self )
return 1;
if ( maps\_utility::ent_flag_exist( "laststand_downed" ) && maps\_utility::ent_flag( "laststand_downed" ) )
return 0;
var_0 = self.health / self.maxhealth;
if ( var_0 < 0.5 )
return 0;
if ( common_scripts\utility::flag( "_radiation_poisoning" ) )
return 0;
if ( maps\_utility::ent_flag( "player_has_red_flashing_overlay" ) )
return 0;
return 1;
}
autosavethreatcheck( var_0 )
{
if ( isdefined( level.ac130gunner ) && level.ac130gunner == self )
return 1;
var_1 = getaispeciesarray( "bad_guys", "all" );
foreach ( var_3 in var_1 )
{
if ( !isdefined( var_3.enemy ) )
continue;
if ( !isplayer( var_3.enemy ) )
continue;
if ( var_3.type == "dog" )
{
foreach ( var_5 in level.players )
{
if ( distance( var_3.origin, var_5.origin ) < 384 )
return 0;
}
continue;
}
if ( isdefined( var_3.melee ) && isdefined( var_3.melee.target ) && isplayer( var_3.melee.target ) )
return 0;
var_7 = [[ level.autosave_proximity_threat_func ]]( var_3 );
if ( var_7 == "return_even_if_low_accuracy" )
return 0;
if ( var_3.finalaccuracy < 0.021 && var_3.finalaccuracy > -1 )
continue;
if ( var_7 == "return" )
return 0;
if ( var_7 == "none" )
continue;
if ( var_3.a.lastshoottime > gettime() - 500 )
{
if ( var_0 || var_3 animscripts\utility::canseeenemy( 0 ) && var_3 canshootenemy( 0 ) )
return 0;
}
if ( isdefined( var_3.a.aimidlethread ) && var_3 animscripts\utility::canseeenemy( 0 ) && var_3 canshootenemy( 0 ) )
return 0;
}
if ( maps\_utility::player_is_near_live_grenade() )
return 0;
var_9 = getentarray( "destructible", "classname" );
foreach ( var_11 in var_9 )
{
if ( !isdefined( var_11.healthdrain ) )
continue;
foreach ( var_5 in level.players )
{
if ( distance( var_11.origin, var_5.origin ) < 400 )
return 0;
}
}
return 1;
}
enemy_is_a_threat()
{
if ( self.finalaccuracy >= 0.021 )
return 1;
foreach ( var_1 in level.players )
{
if ( distance( self.origin, var_1.origin ) < 500 )
return 1;
}
return 0;
}
autosave_proximity_threat_func( var_0 )
{
foreach ( var_2 in level.players )
{
var_3 = distance( var_0.origin, var_2.origin );
if ( var_3 < 200 )
return "return_even_if_low_accuracy";
else if ( var_3 < 360 )
return "return";
else if ( var_3 < 1000 )
return "threat_exists";
}
return "none";
}
autosave_recon( var_0 )
{
if ( !maps\_utility::is_default_start() )
return;
var_1 = maps\_utility_code::get_leveltime();
var_2 = var_1;
if ( isdefined( level.recon_checkpoint_lasttime ) )
var_2 = var_1 - level.recon_checkpoint_lasttime;
level.recon_checkpoint_lasttime = var_1;
reconevent( "script_checkpoint: id %d, leveltime %d, deltatime %d", var_0, var_1, var_2 );
}

642
maps/_breach.gsc Normal file
View File

@ -0,0 +1,642 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
level._effect["_breach_doorbreach_detpack"] = loadfx( "fx/explosions/exp_pack_doorbreach" );
level._effect["_breach_doorbreach_kick"] = loadfx( "fx/dust/door_kick" );
level.scr_sound["breach_wooden_door"] = "detpack_explo_main";
level.scr_sound["breach_wood_door_kick"] = "wood_door_kick";
common_scripts\utility::flag_init( "begin_the_breach" );
}
breach_think( var_0, var_1, var_2, var_3, var_4, var_5 )
{
self endon( "breach_abort" );
if ( isdefined( var_5 ) && var_5 == 0 )
anim.fire_notetrack_functions["scripted"] = ::breach_fire_straight;
self.flashthrown = 0;
self.closestai = undefined;
self.animent = undefined;
self.breached = 0;
self.breachers = 0;
self.breachersready = 0;
self.singlebreacher = 0;
self.readytobreach = 0;
self.aiareintheroom = 0;
self.abouttobebreached = 0;
self.cleared = 0;
self.hasdoor = 1;
self.hasflashbangs = 0;
self.hostilesspawned = 0;
var_6 = getentarray( self.targetname, "targetname" );
var_7 = self.targetname;
self.sbadplacename = "badplace_" + var_7;
self.badplace = getent( "badplace_" + var_7, "targetname" );
if ( isdefined( self.badplace ) )
{
}
self.breachtrigger = getent( "trigger_" + var_7, "targetname" );
if ( !isdefined( var_4 ) )
var_4 = 1;
if ( isdefined( self.breachtrigger ) )
{
switch ( self.breachtrigger.classname )
{
case "trigger_use":
self.triggerhintstring = var_2;
break;
case "trigger_use_touch":
self.triggerhintstring = var_2;
break;
case "trigger_radius":
break;
case "trigger_multiple":
break;
default:
break;
}
}
switch ( var_1 )
{
case "explosive_breach_left":
break;
case "shotgunhinges_breach_left":
break;
case "flash_breach_no_door_right":
self.hasdoor = 0;
self.hasflashbangs = 1;
break;
default:
break;
}
if ( self.hasdoor == 1 )
{
self.edoor = getent( self.script_linkto, "script_linkname" );
if ( self.edoor.classname == "script_model" )
{
self.animent = spawn( "script_origin", self.edoor.origin );
self.animent.angles = self.edoor.angles;
}
else if ( self.edoor.classname == "script_brushmodel" )
{
self.animent = getent( self.edoor.target, "targetname" );
self.edoor.vector = anglestoforward( self.animent.angles );
}
self.animent.type = "Cover Right";
self.eexploderorigin = getent( self.edoor.script_linkto, "script_linkname" );
self.iexplodernum = self.eexploderorigin.script_exploder;
}
else if ( self.hasdoor == 0 )
self.animent = getent( self.script_linkto, "script_linkname" );
if ( self.hasflashbangs == 1 )
{
self.grenadeorigin = getent( "flashthrow_" + var_7, "targetname" );
self.grenadedest = getent( self.grenadeorigin.target, "targetname" );
}
thread breach_abort( var_0 );
thread breach_cleanup( var_0 );
thread breach_play_fx( var_1, var_4 );
var_8 = 0;
for ( var_9 = 0; var_9 < var_0.size; var_9++ )
{
if ( isdefined( var_0[var_9].firstbreacher ) )
{
var_8++;
self.closestai = var_0[var_9];
}
}
if ( var_8 > 0 )
{
}
else
self.closestai = common_scripts\utility::getclosest( self.animent.origin, var_0 );
if ( var_0.size == 1 )
self.singlebreacher = 1;
for ( var_9 = 0; var_9 < var_0.size; var_9++ )
var_0[var_9] thread breacher_think( self, var_1, var_5 );
while ( self.breachers < var_0.size )
wait 0.05;
self notify( "ready_to_breach" );
self.readytobreach = 1;
if ( isdefined( self.breachtrigger ) )
{
self.breachtrigger thread breach_trigger_think( self );
self waittill( "execute_the_breach" );
}
else
self notify( "execute_the_breach" );
common_scripts\utility::flag_set( "begin_the_breach" );
self.abouttobebreached = 1;
if ( isdefined( var_3 ) && var_3 == 1 )
{
var_10 = getentarray( "hostiles_" + var_7, "targetname" );
self waittill( "spawn_hostiles" );
spawnbreachhostiles( var_10 );
self.hostilesspawned = 1;
}
if ( isdefined( self.badplace ) )
badplace_cylinder( self.sbadplacename, -1, self.badplace.origin, self.badplace.radius, 200, "bad_guys" );
var_11 = getaiarray( "bad_guys" );
var_12 = [];
for ( var_9 = 0; var_9 < var_11.size; var_9++ )
{
if ( var_11[var_9] istouching( self ) )
var_12[var_12.size] = var_11[var_9];
}
if ( var_12.size > 0 )
common_scripts\utility::array_thread( var_12, ::breach_enemies_stunned, self );
while ( !self.aiareintheroom )
wait 0.05;
self notify( "breach_complete" );
if ( !var_12.size )
return;
while ( !self.cleared )
{
wait 0.05;
for ( var_9 = 0; var_9 < var_12.size; var_9++ )
{
if ( !isalive( var_12[var_9] ) )
var_12 = common_scripts\utility::array_remove( var_12, var_12[var_9] );
if ( var_12.size == 0 )
self.cleared = 1;
}
}
}
breach_dont_fire()
{
while ( self.breaching == 1 )
{
self waittillmatch( "single anim", "fire" );
self.a.lastshoottime = gettime();
}
}
breacher_think( var_0, var_1, var_2 )
{
self.breaching = 1;
self.breachdonotfire = undefined;
if ( !isdefined( var_2 ) )
var_2 = 1;
self pushplayer( 1 );
thread give_infinite_ammo();
var_0 endon( "breach_abort" );
self.ender = "stop_idle_" + self getentitynumber();
var_3 = undefined;
var_4 = undefined;
var_5 = undefined;
var_6 = undefined;
var_7 = undefined;
if ( self == var_0.closestai )
var_3 = "01";
else
var_3 = "02";
if ( var_0.singlebreacher == 1 && var_1 == "explosive_breach_left" )
var_3 = "02";
switch ( var_1 )
{
case "explosive_breach_left":
if ( isdefined( self.usebreachapproach ) && self.usebreachapproach == 0 )
var_4 = "detcord_stack_left_start_no_approach_" + var_3;
else
var_4 = "detcord_stack_left_start_" + var_3;
var_5 = "detcord_stack_leftidle_" + var_3;
var_6 = "detcord_stack_leftbreach_" + var_3;
break;
case "shotgunhinges_breach_left":
var_4 = "shotgunhinges_breach_left_stack_start_" + var_3;
var_5 = "shotgunhinges_breach_left_stack_idle_" + var_3;
var_6 = "shotgunhinges_breach_left_stack_breach_" + var_3;
break;
case "flash_breach_no_door_right":
if ( var_0.singlebreacher == 1 )
{
var_4 = "flash_stack_right_start_single";
var_5 = "flash_stack_right_idle_single";
var_6 = "flash_stack_right_breach_single";
var_7 = "flash_stack_right_flash_single";
}
else
{
var_4 = "flash_stack_right_start_" + var_3;
var_5 = "flash_stack_right_idle_" + var_3;
var_6 = "flash_stack_right_breach_" + var_3;
var_7 = "flash_stack_right_flash_" + var_3;
}
break;
default:
break;
}
breach_set_goaladius( 64 );
if ( !isdefined( self.usebreachapproach ) || self.usebreachapproach )
var_0.animent maps\_anim::anim_generic_reach( self, var_4 );
else
{
self.scriptedarrivalent = var_0.animent;
var_0.animent maps\_anim::anim_generic_reach_and_arrive( self, var_4 );
}
var_0.animent maps\_anim::anim_generic( self, var_4 );
var_0.animent thread maps\_anim::anim_generic_loop( self, var_5, self.ender );
self.setgoalpos = self.origin;
var_0.breachers++;
self.scriptedarrivalent = undefined;
var_0 waittill( "execute_the_breach" );
if ( !var_0.flashthrown && isdefined( var_7 ) )
{
var_0.animent notify( self.ender );
var_0.animent thread maps\_anim::anim_generic( self, var_7 );
wait 1;
if ( var_3 == "02" || var_0.singlebreacher == 1 )
{
var_8 = "J_Mid_LE_1";
self attach( "projectile_m84_flashbang_grenade", var_8 );
var_9 = self.grenadeweapon;
self.grenadeweapon = "flash_grenade";
self.grenadeammo++;
if ( var_3 == "02" )
self waittillmatch( "single anim", "grenade_throw" );
if ( var_0.singlebreacher == 1 && var_3 == "01" )
self waittillmatch( "single anim", "fire" );
self magicgrenade( var_0.grenadeorigin.origin, var_0.grenadedest.origin, level.iflashfuse );
self detach( "projectile_m84_flashbang_grenade", var_8 );
self.grenadeweapon = var_9;
self.grenadeammo = 0;
}
self waittillmatch( "single anim", "end" );
var_0.animent thread maps\_anim::anim_generic_loop( self, var_5, self.ender );
wait 0.1;
}
var_0.animent notify( self.ender );
if ( var_2 == 0 )
self.breachdonotfire = 1;
var_0.animent thread maps\_anim::anim_generic( self, var_6 );
if ( var_1 == "explosive_breach_left" )
{
if ( var_3 == "02" )
{
thread detcord_logic( var_0 );
self waittillmatch( "single anim", "pull fuse" );
wait 1;
var_0 notify( "spawn_hostiles" );
var_0 notify( "detpack_about_to_blow" );
self waittillmatch( "single anim", "explosion" );
var_0 notify( "detpack_detonated" );
var_0.breached = 1;
var_0.edoor thread door_open( "explosive", var_0 );
var_0 notify( "play_breach_fx" );
}
}
else if ( var_1 == "shotgunhinges_breach_left" )
{
if ( var_3 == "01" )
{
var_0 notify( "spawn_hostiles" );
self waittillmatch( "single anim", "kick" );
var_0.edoor thread door_open( "shotgun", var_0 );
var_0 notify( "play_breach_fx" );
}
}
else if ( var_1 == "flash_breach_no_door_right" )
{
}
self waittillmatch( "single anim", "end" );
self notify( "breach_complete" );
if ( var_2 == 0 )
self.breachdonotfire = undefined;
if ( isdefined( level.friendly_breach_thread ) )
self thread [[ level.friendly_breach_thread ]]( var_0 );
var_0.aiareintheroom = 1;
self pushplayer( 0 );
breach_reset_animname();
while ( !var_0.cleared )
wait 0.05;
self.breaching = 0;
}
breach_fire_straight()
{
if ( isdefined( self.breachdonotfire ) )
return;
animscripts\notetracks::fire_straight();
}
detcord_logic( var_0 )
{
thread sound_effect_play( var_0 );
self waittillmatch( "single anim", "attach prop right" );
var_1 = "TAG_INHAND";
self attach( "weapon_detcord", var_1 );
self waittillmatch( "single anim", "detach prop right" );
var_2 = self gettagorigin( var_1 );
var_3 = self gettagangles( var_1 );
self detach( "weapon_detcord", var_1 );
var_4 = spawn( "script_model", var_2 );
var_4 setmodel( "weapon_detcord" );
var_4.angles = var_3;
var_0 waittill( "detpack_detonated" );
radiusdamage( var_4.origin, 64, 50, 25 );
var_4 delete();
}
sound_effect_play( var_0 )
{
self waittillmatch( "single anim", "sound effect" );
thread common_scripts\utility::play_sound_in_space( "detpack_plant_arming", var_0.animent.origin );
}
breach_enemies_stunned( var_0 )
{
self endon( "death" );
var_0 endon( "breach_aborted" );
var_0 waittill( "detpack_detonated" );
if ( distance( self.origin, var_0.animent.origin ) <= level.detpackstunradius )
{
level.stunnedanimnumber++;
if ( level.stunnedanimnumber > 2 )
level.stunnedanimnumber = 1;
var_1 = "exposed_flashbang_v" + level.stunnedanimnumber;
self.allowdeath = 1;
maps\_anim::anim_generic_custom_animmode( self, "gravity", var_1 );
breach_reset_animname();
}
}
breach_trigger_think( var_0 )
{
var_0 endon( "execute_the_breach" );
var_0 endon( "breach_aborted" );
thread breach_trigger_cleanup( var_0 );
self waittill( "trigger" );
var_0 notify( "execute_the_breach" );
}
breach_trigger_cleanup( var_0 )
{
var_0 waittill( "execute_the_breach" );
common_scripts\utility::trigger_off();
if ( isdefined( var_0.ebreachmodel ) )
var_0.ebreachmodel delete();
}
breach_abort( var_0 )
{
self endon( "breach_complete" );
self waittill( "breach_abort" );
self.cleared = 1;
thread breach_cleanup( var_0 );
}
breach_cleanup( var_0 )
{
while ( !self.cleared )
wait 0.05;
if ( isdefined( self.badplace ) )
badplace_delete( self.sbadplacename );
while ( !self.cleared )
wait 0.05;
common_scripts\utility::array_thread( var_0, ::breach_ai_reset, self );
}
breach_ai_reset( var_0 )
{
self endon( "death" );
breach_reset_animname();
breach_reset_goaladius();
var_0.animent notify( self.ender );
self notify( "stop_infinite_ammo" );
self pushplayer( 0 );
}
breach_play_fx( var_0, var_1 )
{
self endon( "breach_aborted" );
self endon( "breach_complete" );
switch ( var_0 )
{
case "explosive_breach_left":
self waittill( "play_breach_fx" );
common_scripts\utility::exploder( self.iexplodernum );
thread common_scripts\utility::play_sound_in_space( level.scr_sound["breach_wooden_door"], self.eexploderorigin.origin );
if ( var_1 )
playfx( level._effect["_breach_doorbreach_detpack"], self.eexploderorigin.origin, anglestoforward( self.eexploderorigin.angles ) );
break;
case "shotgunhinges_breach_left":
self waittill( "play_breach_fx" );
common_scripts\utility::exploder( self.iexplodernum );
if ( var_1 )
playfx( level._effect["_breach_doorbreach_kick"], self.eexploderorigin.origin, anglestoforward( self.eexploderorigin.angles ) );
break;
case "flash_breach_no_door_right":
break;
default:
break;
}
}
spawnhostile( var_0 )
{
var_1 = var_0 dospawn();
maps\_utility::spawn_failed( var_1 );
return var_1;
}
spawnbreachhostiles( var_0 )
{
var_1 = [];
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
{
var_3 = spawnhostile( var_0[var_2] );
var_1[var_1.size] = var_3;
}
return var_1;
}
give_infinite_ammo()
{
self endon( "death" );
self endon( "stop_infinite_ammo" );
while ( isdefined( self.weapon ) )
{
if ( isdefined( self.weapon ) && self.weapon == "none" )
break;
self.bulletsinclip = weaponclipsize( self.weapon );
wait 0.5;
}
}
door_open( var_0, var_1, var_2 )
{
if ( !isdefined( var_2 ) )
var_2 = 1;
if ( var_2 == 1 )
self playsound( level.scr_sound["breach_wood_door_kick"] );
switch ( var_0 )
{
case "explosive":
thread door_fall_over( var_1.animent );
door_connectpaths();
self playsound( level.scr_sound["breach_wooden_door"] );
earthquake( 0.4, 1, self.origin, 1000 );
radiusdamage( self.origin, 56, level.maxdetpackdamage, level.mindetpackdamage );
break;
case "shotgun":
thread door_fall_over( var_1.animent );
door_connectpaths();
self playsound( level.scr_sound["breach_wooden_door"] );
break;
}
}
door_connectpaths()
{
if ( self.classname == "script_brushmodel" )
self connectpaths();
else
{
var_0 = getent( self.target, "targetname" );
var_0 hide();
var_0 notsolid();
var_0 connectpaths();
}
}
door_fall_over( var_0 )
{
var_1 = undefined;
if ( self.classname == "script_model" )
var_1 = anglestoforward( self.angles );
else if ( self.classname == "script_brushmodel" )
var_1 = self.vector;
else
{
}
var_2 = ( var_1[0] * 20, var_1[1] * 20, var_1[2] * 20 );
self moveto( self.origin + var_2, 0.5, 0, 0.5 );
var_3 = spawn( "script_origin", ( 0, 0, 0 ) );
var_3.angles = var_0.angles;
var_3.origin = ( self.origin[0], self.origin[1], var_0.origin[2] );
self linkto( var_3 );
var_3 rotatepitch( 90, 0.45, 0.4 );
wait 0.45;
var_3 rotatepitch( -4, 0.2, 0, 0.2 );
wait 0.2;
var_3 rotatepitch( 4, 0.15, 0.15 );
wait 0.15;
self unlink();
var_3 delete();
}
breach_set_goaladius( var_0 )
{
if ( !isdefined( self.old_goalradius ) )
self.old_goalradius = self.goalradius;
self.goalradius = var_0;
}
breach_reset_goaladius()
{
if ( isdefined( self.old_goalradius ) )
self.goalradius = self.old_goalradius;
self.old_goalradius = undefined;
}
breach_set_animname( var_0 )
{
if ( !isdefined( self.old_animname ) )
self.old_animname = self.animname;
self.animname = var_0;
}
breach_reset_animname()
{
if ( isdefined( self.old_animname ) )
self.animname = self.old_animname;
self.old_animname = undefined;
}

248
maps/_c4.gsc Normal file
View File

@ -0,0 +1,248 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main( var_0, var_1, var_2 )
{
if ( !isdefined( var_1 ) )
var_1 = "weapon_c4";
if ( !isdefined( var_2 ) )
var_2 = "weapon_c4_obj";
if ( !isdefined( var_0 ) )
level.c4_weaponname = "c4";
else
level.c4_weaponname = var_0;
precachemodel( var_1 );
precachemodel( var_2 );
precacheitem( level.c4_weaponname );
level._effect["c4_explosion"] = loadfx( "fx/explosions/grenadeExp_metal" );
}
c4_location( var_0, var_1, var_2, var_3, var_4, var_5 )
{
var_6 = undefined;
if ( !isdefined( var_1 ) )
var_1 = ( 0, 0, 0 );
if ( !isdefined( var_2 ) )
var_2 = ( 0, 0, 0 );
if ( !isdefined( var_4 ) )
var_4 = "weapon_c4";
if ( !isdefined( var_5 ) )
var_5 = "weapon_c4_obj";
if ( isdefined( var_0 ) )
var_6 = self gettagorigin( var_0 );
else if ( isdefined( var_3 ) )
var_6 = var_3;
else
{
}
var_7 = spawn( "script_model", var_6 + var_1 );
var_7 setmodel( var_5 );
if ( isdefined( var_0 ) )
var_7 linkto( self, var_0, var_1, var_2 );
else
var_7.angles = self.angles;
var_7.trigger = get_use_trigger();
if ( isdefined( level.c4_hintstring ) )
var_7.trigger sethintstring( level.c4_hintstring );
else
var_7.trigger sethintstring( &"SCRIPT_PLATFORM_HINT_PLANTEXPLOSIVES" );
if ( isdefined( var_0 ) )
{
var_7.trigger linkto( self, var_0, var_1, var_2 );
var_7.trigger.islinked = 1;
}
else
var_7.trigger.origin = var_7.origin;
var_7 thread handle_use( self, var_4 );
if ( !isdefined( self.multiple_c4 ) )
var_7 thread handle_delete( self );
var_7 thread handle_clear_c4( self );
return var_7;
}
playc4effects()
{
self endon( "death" );
wait 0.1;
playfxontag( common_scripts\utility::getfx( "c4_light_blink" ), self, "tag_fx" );
}
handle_use( var_0, var_1 )
{
var_0 endon( "clear_c4" );
if ( !isdefined( var_1 ) )
var_1 = "weapon_c4";
if ( !isdefined( var_0.multiple_c4 ) )
var_0 endon( "c4_planted" );
if ( !isdefined( var_0.c4_count ) )
var_0.c4_count = 0;
var_0.c4_count++;
self.trigger usetriggerrequirelookat();
self.trigger waittill( "trigger", var_2 );
level notify( "c4_in_place", self );
self.trigger unlink();
self.trigger release_use_trigger();
self playsound( "c4_bounce_default" );
self setmodel( var_1 );
thread playc4effects();
var_0.c4_count--;
if ( !isdefined( var_0.multiple_c4 ) || !var_0.c4_count )
var_2 switch_to_detonator();
thread handle_detonation( var_0, var_2 );
var_0 notify( "c4_planted", self );
}
handle_delete( var_0 )
{
var_0 endon( "clear_c4" );
self.trigger endon( "trigger" );
var_0 waittill( "c4_planted", var_1 );
self.trigger unlink();
self.trigger release_use_trigger();
self delete();
}
handle_detonation( var_0, var_1 )
{
var_0 endon( "clear_c4" );
var_1 waittill( "detonate" );
playfx( level._effect["c4_explosion"], self.origin );
var_2 = spawn( "script_origin", self.origin );
if ( isdefined( level.c4_sound_override ) )
var_2 playsound( "detpack_explo_main", "sound_done" );
self radiusdamage( self.origin, 256, 200, 50 );
earthquake( 0.4, 1, self.origin, 1000 );
if ( isdefined( self ) )
self delete();
var_1 thread remove_detonator();
var_0 notify( "c4_detonation" );
var_2 waittill( "sound_done" );
var_2 delete();
}
handle_clear_c4( var_0 )
{
var_0 endon( "c4_detonation" );
var_0 waittill( "clear_c4" );
if ( !isdefined( self ) )
return;
if ( isdefined( self.trigger.inuse ) && self.trigger.inuse )
self.trigger release_use_trigger();
if ( isdefined( self ) )
self delete();
level.player thread remove_detonator();
}
remove_detonator()
{
level endon( "c4_in_place" );
wait 1;
var_0 = 0;
if ( level.c4_weaponname == self getcurrentweapon() && isdefined( self.old_weapon ) )
{
if ( self.old_weapon == "none" )
{
var_0 = 1;
self switchtoweapon( self getweaponslistprimaries()[0] );
}
else if ( self hasweapon( self.old_weapon ) && self.old_weapon != level.c4_weaponname )
self switchtoweapon( self.old_weapon );
else
self switchtoweapon( self getweaponslistprimaries()[0] );
}
self.old_weapon = undefined;
if ( 0 != self getammocount( level.c4_weaponname ) )
return;
self waittill( "weapon_change" );
self takeweapon( level.c4_weaponname );
}
switch_to_detonator()
{
var_0 = undefined;
if ( !isdefined( self.old_weapon ) )
self.old_weapon = self getcurrentweapon();
var_1 = self getweaponslistall();
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
{
if ( var_1[var_2] != level.c4_weaponname )
continue;
var_0 = var_1[var_2];
}
if ( !isdefined( var_0 ) )
{
self giveweapon( level.c4_weaponname );
self setweaponammoclip( level.c4_weaponname, 0 );
self setactionslot( 2, "weapon", level.c4_weaponname );
}
self switchtoweapon( level.c4_weaponname );
}
get_use_trigger()
{
var_0 = getentarray( "generic_use_trigger", "targetname" );
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
{
if ( isdefined( var_0[var_1].inuse ) && var_0[var_1].inuse )
continue;
if ( !isdefined( var_0[var_1].inuse ) )
var_0[var_1] enablelinkto();
var_0[var_1].inuse = 1;
var_0[var_1].oldorigin = var_0[var_1].origin;
return var_0[var_1];
}
}
release_use_trigger()
{
if ( isdefined( self.islinked ) )
self unlink();
self.islinked = undefined;
self.origin = self.oldorigin;
self.inuse = 0;
}

358
maps/_chaingun_player.gsc Normal file
View File

@ -0,0 +1,358 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_chaingun_player()
{
common_scripts\utility::flag_init( "player_mounting_chaingun_turret" );
common_scripts\utility::flag_init( "player_dismounting_chaingun_turret" );
common_scripts\utility::flag_init( "player_on_chaingun_turret" );
chaingun_player_anims();
}
#using_animtree("vehicles");
chaingun_player_anims()
{
level.scr_animtree["turret_player_rig"] = #animtree;
level.scr_model["turret_player_rig"] = level.chaingun_viewmodel;
level.scr_anim["turret_player_rig"]["chaingun_hands_geton"] = %chaingun_geton_player;
level.scr_anim["chaingun_player"]["chaingun_hands_getoff"] = %chaingun_getoff_player;
level.scr_anim["chaingun_player"]["chaingun_hands_idle"] = %chaingun_idle_player;
level.scr_anim["chaingun_player"]["chaingun_hands_fire"] = %chaingun_fire_player;
level.scr_anim["chaingun_player"]["chaingun_hands_idle2fire"] = %chaingun_fire_in_player;
level.scr_anim["chaingun_player"]["chaingun_hands_idle2fire"] = %chaingun_fire_out_player;
level.scr_animtree["chaingun_player"] = #animtree;
level.scr_anim["chaingun_player"]["turret_gun_geton"] = %chaingun_geton_gun;
level.scr_anim["chaingun_player"]["turret_gun_getoff"] = %chaingun_getoff_gun;
level.scr_anim["chaingun_player"]["turret_gun_idle"] = %chaingun_idle_gun;
level.scr_anim["chaingun_player"]["turret_gun_fire"] = %chaingun_fire_gun;
level.scr_anim["chaingun_player"]["turret_gun_idle2fire"] = %chaingun_fire_in_gun;
level.scr_anim["chaingun_player"]["turret_gun_fire2idle"] = %chaingun_fire_out_gun;
}
chaingun_turret_init( var_0 )
{
level.player endon( "death" );
var_1 = self;
var_1 endon( "death" );
var_1 endon( "disable_player_turret" );
var_1 makeunusable();
var_1 setdefaultdroppitch( 0 );
var_1.setturretusable = 1;
while ( var_1.setturretusable == 1 )
{
wait 1.5;
var_2 = get_world_relative_offset( var_1.origin, var_1.angles, ( -32, 0, -48 ) );
var_1.usable_turret_trigger = spawn( "trigger_radius", var_2, 0, 30, 128 );
var_1 custom_mount_hint_return_when_mounted( var_1.usable_turret_trigger );
thread player_use_chaingun_with_viewmodel( self, level.player, var_0 );
var_1.usable_turret_trigger delete();
self waittill( "geton_anim_finished" );
var_1 custom_dismount_hint_return_when_dismounted();
var_1 handle_dismount();
}
}
custom_mount_hint_return_when_mounted( var_0 )
{
level.player endon( "death" );
var_0 endon( "death" );
self.mount_hint = maps\_hud_util::createfontstring( "default", 1.5 );
self.mount_hint.alpha = 0.9;
self.mount_hint.x = 0;
self.mount_hint.y = 50;
self.mount_hint.alignx = "center";
self.mount_hint.aligny = "middle";
self.mount_hint.horzalign = "center";
self.mount_hint.vertalign = "middle";
self.mount_hint.foreground = 0;
self.mount_hint.hidewhendead = 1;
self.mount_hint.hidewheninmenu = 1;
var_1 = cos( 80 );
for (;;)
{
wait 0.05;
if ( level.player istouching( var_0 ) )
{
if ( level.player getstance() == "prone" )
{
self.mount_hint settext( "" );
continue;
}
if ( level.player issprintsliding() )
{
self.mount_hint settext( "" );
continue;
}
if ( !maps\_utility::within_fov_2d( level.player geteye(), level.player.angles, self.origin, var_1 ) )
{
self.mount_hint settext( "" );
continue;
}
self.mount_hint settext( &"PLATFORM_HOLD_TO_USE" );
if ( level.player usebuttonpressed() )
{
self.mount_hint destroy();
return;
}
}
else
self.mount_hint settext( "" );
}
}
custom_dismount_hint_return_when_dismounted()
{
level.player endon( "death" );
self.disomount_hint = maps\_hud_util::createfontstring( "default", 1.5 );
self.disomount_hint.alpha = 0.9;
self.disomount_hint.x = 0;
self.disomount_hint.y = 50;
self.disomount_hint.alignx = "center";
self.disomount_hint.aligny = "middle";
self.disomount_hint.horzalign = "center";
self.disomount_hint.vertalign = "middle";
self.disomount_hint.foreground = 0;
self.disomount_hint.hidewhendead = 1;
self.disomount_hint.hidewheninmenu = 1;
self.disomount_hint settext( &"PLATFORM_PRESS_TO_DROP" );
notifyoncommand( "turret_dismount", "+usereload" );
notifyoncommand( "turret_dismount", "+activate" );
level.player waittill( "turret_dismount" );
self.disomount_hint destroy();
}
handle_dismount()
{
if ( !common_scripts\utility::flag( "player_dismounting_chaingun_turret" ) )
{
common_scripts\utility::flag_set( "player_dismounting_chaingun_turret" );
level.player freezecontrols( 1 );
self.animname = "chaingun_player";
self notify( "player_dismount" );
maps\_anim::setanimtree();
var_0 = self gettagangles( "tag_ground" );
var_1 = getanimlength( %chaingun_getoff_gun );
var_2 = maps\_utility::getanim( "chaingun_hands_getoff" );
var_3 = maps\_utility::getanim( "turret_gun_getoff" );
self clearanim( %root, 0 );
self setanim( var_2, 1, 0, 1 );
self setanim( var_3, 1, 0, 1 );
wait( var_1 );
self detachall();
self makeusable();
self setturretdismountorg( self gettagorigin( "tag_ground" ) );
level.player enableturretdismount();
self useby( level.player );
self makeunusable();
var_4 = 0.15;
level.player lerpfov( 65, var_4 );
var_5 = spawn( "script_origin", ( 0, 0, 0 ) );
var_5.origin = self gettagorigin( "tag_ground" );
var_5.angles = var_0;
level.player playerlinkto( var_5, "", 1, 0, 0, 0, 0, 0 );
var_5 moveto( self.mount_pos, var_4, var_4 * 0.25 );
wait( var_4 + 0.1 );
var_5 delete();
if ( isdefined( self.disomount_hint ) )
self.disomount_hint destroy();
if ( isdefined( self.mount_hint ) )
self.mount_hint destroy();
if ( isdefined( self.player_rig ) )
self.player_rig delete();
level.player enableweapons();
level.player freezecontrols( 0 );
setsaveddvar( "ammoCounterHide", 0 );
common_scripts\utility::flag_clear( "player_on_chaingun_turret" );
common_scripts\utility::flag_clear( "player_dismounting_chaingun_turret" );
}
}
player_use_chaingun_with_viewmodel( var_0, var_1, var_2 )
{
level.player endon( "death" );
common_scripts\utility::flag_set( "player_on_chaingun_turret" );
common_scripts\utility::flag_set( "player_mounting_chaingun_turret" );
var_0 endon( "player_dismount" );
var_0.animname = "chaingun_player";
var_0 maps\_anim::setanimtree();
var_1 freezecontrols( 1 );
var_1 disableweapons();
setsaveddvar( "ammoCounterHide", 1 );
level.player setstance( "stand" );
self.mount_pos = var_1.origin;
var_0.player_rig = maps\_utility::spawn_anim_model( "turret_player_rig" );
var_0.player_rig.animname = "turret_player_rig";
var_0.player_rig linkto( var_0, "tag_ground", ( 0, 0, 0 ), ( 0, 0, 0 ) );
var_0.player_rig hide();
var_0.player_rig common_scripts\utility::delaycall( 0.25, ::show );
var_0 maps\_anim::anim_first_frame_solo( var_0.player_rig, "chaingun_hands_geton", "tag_player" );
maps\_anim::anim_first_frame_solo( var_0, "turret_gun_geton" );
var_1 playerlinktoblend( var_0.player_rig, "tag_origin", 0.3, 0.1, 0.1 );
wait 0.2;
var_3 = getanimlength( %chaingun_geton_gun );
var_4 = var_0.player_rig maps\_utility::getanim( "chaingun_hands_geton" );
var_5 = maps\_utility::getanim( "turret_gun_geton" );
var_0 clearanim( %root, 0 );
var_0 setanim( var_5, 1, 0, 1 );
thread notifyaftertime( "geton_anim_finished", "time is up", var_3 );
wait 0.1;
var_0.player_rig setanim( var_4, 1, 0, 1 );
var_6 = var_0 getanimtime( var_5 );
var_0.player_rig setanimtime( var_4, var_6 );
var_1 lerpfov( 65, 0.2 );
self waittill( "geton_anim_finished" );
common_scripts\utility::flag_clear( "player_mounting_chaingun_turret" );
if ( isdefined( var_2 ) && var_2 == 1 )
thread chaingun_shells( level.chaingun_shelleject_fx, "player_dismounting_chaingun_turret" );
var_1 playerlinktodelta( self, "tag_player", 0.35, 90, 90, 45, 30, 1 );
var_0.player_rig delete();
var_0.viewhands = level.scr_model["turret_player_rig"];
var_0 attach( var_0.viewhands, "tag_ground" );
thread cleanup_on_death();
var_0.is_occupied = 1;
var_0 makeusable();
var_0 setmode( "manual" );
var_1 unlink();
var_0 useby( var_1 );
var_0 makeunusable();
var_1 disableturretdismount();
var_7 = maps\_utility::getanim( "chaingun_hands_idle" );
var_0 clearanim( var_4, 0.1 );
var_0 setanim( var_7, 1, 0.1, 1 );
var_0.hands_animation = var_7;
var_8 = var_0 maps\_utility::getanim( "turret_gun_idle" );
var_0 clearanim( var_5, 0.1 );
var_0 setanim( var_8, 1, 0.1, 1 );
var_0.gun_animation = var_8;
var_9 = 0;
var_10 = 0;
while ( common_scripts\utility::flag( "player_on_chaingun_turret" ) )
{
var_9 = level.player attackbuttonpressed();
if ( var_10 != var_9 )
{
if ( var_9 )
var_0 thread animate_turret_with_viewmodel( "chaingun_hands_idle2fire", "chaingun_hands_fire", "turret_gun_idle2fire", "turret_gun_fire" );
else
var_0 thread animate_turret_with_viewmodel( "chaingun_hands_idle2fire", "chaingun_hands_idle", "turret_gun_fire2idle", "turret_gun_idle" );
var_10 = var_9;
}
wait 0.05;
}
}
animate_turret_with_viewmodel( var_0, var_1, var_2, var_3 )
{
self notify( "turret_anim_change" );
self endon( "turret_anim_change" );
self endon( "player_dismount" );
var_4 = maps\_utility::getanim( var_0 );
var_5 = maps\_utility::getanim( var_1 );
var_6 = maps\_utility::getanim( var_2 );
var_7 = maps\_utility::getanim( var_3 );
self clearanim( self.hands_animation, 0 );
self.hands_animation = var_4;
self clearanim( self.gun_animation, 0 );
self.gun_animation = var_6;
self setanim( var_6, 1, 0.1, 1 );
self setflaggedanim( var_0, var_4, 1, 0.1, 1 );
self waittillmatch( var_0, "end" );
self clearanim( var_4, 0 );
self clearanim( var_6, 0 );
self.hands_animation = var_5;
self.gun_animation = var_7;
self setanim( var_5, 1, 0.1, 1 );
self setanim( var_7, 1, 0.1, 1 );
}
cleanup_on_death()
{
level.player endon( "death" );
level.player waittill( "death" );
level.player unlink();
level.player lerpfov( 65, 0.1 );
}
chaingun_shells( var_0, var_1 )
{
self endon( "death" );
if ( isdefined( var_1 ) )
level endon( var_1 );
var_2 = common_scripts\utility::getfx( var_0 );
var_3 = "tag_brass";
var_4 = 0.1;
common_scripts\utility::flag_wait( "player_on_chaingun_turret" );
while ( common_scripts\utility::flag( "player_on_chaingun_turret" ) )
{
while ( level.player attackbuttonpressed() )
{
playfxontag( var_2, self, var_3 );
wait( var_4 );
}
wait 0.05;
}
}
chaingun_turret_disable( var_0 )
{
if ( common_scripts\utility::flag( "player_mounting_chaingun_turret" ) )
{
common_scripts\utility::flag_waitopen( "player_mounting_chaingun_turret" );
wait 0.1;
}
if ( common_scripts\utility::flag( "player_on_chaingun_turret" ) )
{
self notify( "turret_dismount" );
var_0.setturretusable = 0;
}
else
var_0 notify( "disable_player_turret" );
if ( isdefined( var_0.usable_turret_trigger ) )
var_0.usable_turret_trigger delete();
if ( isdefined( var_0.mount_hint ) )
var_0.mount_hint destroy();
}
notifyaftertime( var_0, var_1, var_2 )
{
self endon( "death" );
self endon( var_1 );
wait( var_2 );
self notify( var_0 );
}
get_world_relative_offset( var_0, var_1, var_2 )
{
var_3 = cos( var_1[1] );
var_4 = sin( var_1[1] );
var_5 = var_2[0] * var_3 - var_2[1] * var_4;
var_6 = var_2[0] * var_4 + var_2[1] * var_3;
var_5 = var_5 + var_0[0];
var_6 = var_6 + var_0[1];
return ( var_5, var_6, var_0[2] + var_2[2] );
}

725
maps/_chopperboss.gsc Normal file
View File

@ -0,0 +1,725 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
common_scripts\utility::create_lock( "chopperboss_trace" );
common_scripts\utility::create_lock( "chopperboss_aggro_trace" );
maps\_chopperboss_utility::build_chopperboss_defaults();
}
chopper_boss_locs_populate( var_0, var_1 )
{
var_2 = getent( "heli_nav_optimizer", "targetname" );
if ( isdefined( var_2 ) )
thread chopper_boss_locs_populate_thread_optimized( var_0, var_1, var_2 );
else
thread chopper_boss_locs_populate_thread( var_0, var_1 );
}
chopper_boss_locs_populate_thread( var_0, var_1 )
{
level.chopper_boss_locs = common_scripts\utility::getstructarray( var_1, var_0 );
var_2 = 0;
foreach ( var_4 in level.chopper_boss_locs )
{
var_4.neighbors = var_4 maps\_utility::get_linked_structs();
foreach ( var_6 in level.chopper_boss_locs )
{
if ( var_4 == var_6 )
continue;
if ( !common_scripts\utility::array_contains( var_4.neighbors, var_6 ) && common_scripts\utility::array_contains( var_6 maps\_utility::get_linked_structs(), var_4 ) )
var_4.neighbors[var_4.neighbors.size] = var_6;
var_2++;
var_2 = var_2 % 2000;
if ( var_2 == 0 )
wait 0.05;
}
foreach ( var_9 in var_4.neighbors )
{
if ( isdefined( var_9.script_ignoreme ) && var_9.script_ignoreme )
var_4.neighbors = common_scripts\utility::array_remove( var_4.neighbors, var_9 );
}
}
level.chopper_boss_locs_populated = 1;
}
chopper_boss_locs_populate_thread_optimized( var_0, var_1, var_2 )
{
level.chopper_boss_locs = common_scripts\utility::getstructarray( var_1, var_0 );
var_3 = [];
for ( var_4 = var_2; isdefined( var_4 ); var_4 = getent( var_4.target, "targetname" ) )
{
var_3[var_3.size] = var_4;
var_4.boss_locs = [];
foreach ( var_6 in level.chopper_boss_locs )
{
if ( ispointinvolume( var_6.origin, var_4 ) )
var_4.boss_locs[var_4.boss_locs.size] = var_6;
}
if ( !isdefined( var_4.target ) )
break;
}
foreach ( var_6 in level.chopper_boss_locs )
var_6.neighbors = var_6 maps\_utility::get_linked_structs();
var_4 = var_2;
var_10 = getent( var_4.target, "targetname" );
for ( var_11 = undefined; isdefined( var_4 ); var_4 = var_10 )
{
if ( isdefined( var_4.target ) )
var_10 = getent( var_4.target, "targetname" );
else
var_10 = undefined;
foreach ( var_6 in var_4.boss_locs )
{
var_6 add_back_links_for_neighbors( var_4.boss_locs );
if ( isdefined( var_10 ) )
var_6 add_back_links_for_neighbors( var_10.boss_locs );
if ( isdefined( var_11 ) )
var_6 add_back_links_for_neighbors( var_11.boss_locs );
}
var_11 = var_4;
}
foreach ( var_6 in level.chopper_boss_locs )
{
foreach ( var_16 in var_6.neighbors )
{
if ( isdefined( var_16.script_ignoreme ) && var_16.script_ignoreme )
var_6.neighbors = common_scripts\utility::array_remove( var_6.neighbors, var_16 );
}
}
maps\_utility::array_delete( var_3 );
level.chopper_boss_locs_populated = 1;
}
add_back_links_for_neighbors( var_0 )
{
foreach ( var_2 in var_0 )
{
if ( self == var_2 )
continue;
if ( !common_scripts\utility::array_contains( self.neighbors, var_2 ) && common_scripts\utility::array_contains( var_2 maps\_utility::get_linked_structs(), self ) )
self.neighbors[self.neighbors.size] = var_2;
}
}
chopper_path_release( var_0, var_1 )
{
if ( isdefined( var_1 ) )
{
var_2 = strtok( var_1, " " );
foreach ( var_4 in var_2 )
self endon( var_4 );
}
var_6 = strtok( var_0, " " );
switch ( var_6.size )
{
case 1:
self waittill( var_6[0] );
break;
case 2:
common_scripts\utility::waittill_either( var_6[0], var_6[1] );
break;
case 3:
common_scripts\utility::waittill_any( var_6[0], var_6[1], var_6[2] );
break;
case 4:
common_scripts\utility::waittill_any( var_6[0], var_6[1], var_6[2], var_6[3] );
break;
default:
break;
}
if ( isdefined( self.loc_current ) )
self.loc_current.in_use = undefined;
}
chopper_boss_think( var_0, var_1 )
{
self endon( "death" );
self endon( "deathspin" );
level endon( "special_op_terminated" );
maps\_chopperboss_utility::chopper_boss_wait_populate();
var_1 = common_scripts\utility::ter_op( isdefined( var_1 ), var_1, 0 );
self.loc_current = var_0;
self.loc_current.in_use = 1;
thread chopper_path_release( "death deathspin" );
self.fired_weapons = 0;
for (;;)
{
if ( !isdefined( self.chopper_boss_agro ) )
self.heli_target = undefined;
if ( pause_action() )
continue;
if ( var_1 )
{
self setneargoalnotifydist( 2048 );
var_2 = chopper_boss_get_closest_target_2d();
if ( isdefined( var_2 ) )
{
var_3 = chopper_boss_get_closest_neighbor_2d( var_2 );
if ( isdefined( var_3 ) && !chopper_boss_in_range( var_2.origin, var_3.origin ) )
{
self.request_move = undefined;
self [[ maps\_chopperboss_utility::get_chopperboss_data( "pre_move_func" ) ]]();
thread chopper_boss_move( var_3 );
var_4 = common_scripts\utility::waittill_any_return( "reached_dynamic_path_end", "near_goal", "request_move_update" );
self thread [[ maps\_chopperboss_utility::get_chopperboss_data( "post_move_func" ) ]]();
continue;
}
}
}
var_5 = isdefined( self.request_move ) && self.request_move || self.fired_weapons;
while ( isdefined( level.chopper_boss_finding_target ) )
wait 0.05;
var_6 = chopper_boss_get_best_location_and_target( var_5 );
if ( pause_action() )
continue;
if ( isdefined( var_6 ) && self.loc_current != var_6 )
{
self [[ maps\_chopperboss_utility::get_chopperboss_data( "pre_move_func" ) ]]();
self.request_move = undefined;
thread chopper_boss_move( var_6 );
if ( !isdefined( self.chopper_boss_agro ) )
self waittill( "reached_dynamic_path_end" );
else
common_scripts\utility::waittill_any( "near_goal", "request_move_update" );
self thread [[ maps\_chopperboss_utility::get_chopperboss_data( "post_move_func" ) ]]();
}
if ( !isdefined( self.chopper_boss_agro ) || !self.chopper_boss_agro )
self [[ maps\_chopperboss_utility::get_chopperboss_data( "stop_func" ) ]]();
wait 0.1;
}
}
chopper_boss_get_closest_target_2d()
{
var_0 = [[ maps\_chopperboss_utility::get_chopperboss_data( "get_targets_func" ) ]]();
if ( !var_0.size )
return undefined;
var_1 = undefined;
var_2 = undefined;
foreach ( var_4 in var_0 )
{
if ( !isdefined( var_1 ) )
{
var_1 = var_4;
var_2 = distance2d( self.origin, var_4.origin );
continue;
}
var_5 = distance2d( self.origin, var_4.origin );
if ( var_5 < var_2 )
{
var_1 = var_4;
var_2 = var_5;
}
}
return var_1;
}
chopper_boss_get_closest_neighbor_2d( var_0 )
{
var_1 = undefined;
var_2 = undefined;
foreach ( var_4 in self.loc_current.neighbors )
{
if ( isdefined( var_4.in_use ) || isdefined( var_4.disabled ) )
continue;
if ( !isdefined( var_1 ) )
{
var_1 = var_4;
var_2 = distance2d( var_4.origin, var_0.origin );
continue;
}
var_5 = distance2d( var_4.origin, var_0.origin );
if ( var_5 < var_2 )
{
var_1 = var_4;
var_2 = var_5;
}
}
return var_1;
}
chopper_boss_in_range( var_0, var_1, var_2 )
{
var_1 = common_scripts\utility::ter_op( isdefined( var_1 ), var_1, self.origin );
var_3 = distance2d( var_1, var_0 );
var_4 = maps\_chopperboss_utility::get_chopperboss_data( "min_target_dist2d" );
var_5 = undefined;
if ( isdefined( var_2 ) && var_2 )
var_5 = 90000;
else
var_5 = maps\_chopperboss_utility::get_chopperboss_data( "max_target_dist2d" );
return var_3 >= var_4 && var_3 <= var_5;
}
chopper_boss_set_target( var_0 )
{
if ( isdefined( var_0 ) )
self.heli_target = var_0;
else if ( isdefined( self.chopper_boss_agro ) && self.chopper_boss_agro )
self.heli_target = undefined;
}
chopper_boss_attempt_firing( var_0, var_1 )
{
self endon( "deathspin" );
self endon( "death" );
var_2 = 0;
var_3 = maps\_chopperboss_utility::chopper_boss_forced_target_get();
var_4 = 0;
if ( isdefined( var_0 ) || isdefined( var_3 ) )
{
if ( isdefined( var_3 ) )
{
var_0 = var_3;
var_4 = 1;
}
else
{
var_5 = 0;
if ( isdefined( var_0.heli_shooting ) )
var_5 = var_0.heli_shooting;
if ( var_5 < maps\_chopperboss_utility::get_chopperboss_data( "heli_shoot_limit" ) && chopper_boss_in_range( var_0.origin, undefined, isdefined( var_1 ) ) )
var_4 = 1;
}
}
if ( var_4 )
{
thread chopper_boss_manage_shooting_flag( var_0 );
var_6 = pause_action();
self setlookatent( var_0 );
var_7 = chopper_boss_wait_face_target( var_0, maps\_chopperboss_utility::get_chopperboss_data( "face_target_timeout" ) );
if ( isdefined( var_0 ) )
{
if ( isdefined( var_7 ) && var_7 )
{
var_2 = self [[ maps\_chopperboss_utility::get_chopperboss_data( "fire_func" ) ]]( var_0 );
var_2 = common_scripts\utility::ter_op( isdefined( var_2 ), var_2, 1 );
}
}
self notify( "chopper_done_shooting" );
}
return var_2;
}
chopper_boss_manage_shooting_flag( var_0 )
{
if ( !isdefined( var_0.heli_shooting ) )
var_0.heli_shooting = 0;
var_0.heli_shooting++;
common_scripts\utility::waittill_any( "death", "deathspin", "chopper_done_shooting" );
if ( isdefined( var_0 ) )
var_0.heli_shooting--;
}
chopper_boss_wait_face_target( var_0, var_1 )
{
self endon( "death" );
self endon( "deathspin" );
var_0 endon( "death" );
var_2 = undefined;
if ( isdefined( var_1 ) )
var_2 = gettime() + var_1 * 1000;
while ( isdefined( var_0 ) )
{
if ( maps\_utility::within_fov_2d( self.origin, self.angles, var_0.origin, 0.766 ) )
return 1;
if ( isdefined( var_2 ) && gettime() >= var_2 )
return 0;
wait 0.25;
}
}
chopper_boss_manage_targeting_flag()
{
level.chopper_boss_finding_target = self;
common_scripts\utility::waittill_any( "death", "deathspin", "chopper_done_targeting" );
level.chopper_boss_finding_target = undefined;
}
chopper_boss_get_best_location_and_target( var_0 )
{
self endon( "death" );
var_1 = self.loc_current.neighbors;
if ( !isdefined( var_0 ) || var_0 == 0 )
var_1[var_1.size] = self.loc_current;
if ( isdefined( level.chopper_boss_hangout ) )
var_1 = level.chopper_boss_hangout;
var_2 = chopper_boss_get_target();
return [[ maps\_chopperboss_utility::get_chopperboss_data( "next_loc_func" ) ]]( var_1, var_2 );
}
chopper_boss_get_target()
{
var_0 = undefined;
if ( isdefined( maps\_chopperboss_utility::chopper_boss_forced_target_get() ) )
var_0 = [ maps\_chopperboss_utility::chopper_boss_forced_target_get() ];
else
var_0 = [[ maps\_chopperboss_utility::get_chopperboss_data( "get_targets_func" ) ]]();
return var_0;
}
chopper_boss_get_best_location_and_target_proc( var_0, var_1 )
{
var_2 = maps\_chopperboss_utility::get_chopperboss_data( "tracecheck_func" );
thread chopper_boss_manage_targeting_flag();
var_3 = [];
var_4 = 0;
foreach ( var_6 in var_0 )
{
if ( var_6 != self.loc_current && isdefined( var_6.in_use ) )
continue;
if ( isdefined( var_6.disabled ) )
continue;
var_6.heli_target = undefined;
var_6.dist2d = undefined;
var_7 = undefined;
common_scripts\utility::lock( "chopperboss_trace" );
foreach ( var_9 in var_1 )
{
common_scripts\utility::unlock_wait( "chopperboss_trace" );
common_scripts\utility::lock( "chopperboss_trace" );
if ( !isdefined( var_9 ) )
continue;
if ( chopper_boss_in_range( var_9.origin, var_6.origin ) == 0 )
continue;
var_10 = var_9.origin + ( 0, 0, 64 );
if ( isai( var_9 ) || isplayer( var_9 ) )
var_10 = var_9 geteye();
if ( self [[ var_2 ]]( var_6.origin, var_10 ) )
{
if ( !isdefined( var_6.heli_target ) )
{
var_3[var_3.size] = var_6;
var_6.heli_target = var_9;
var_7 = distance2d( var_6.origin, var_9.origin );
continue;
}
var_11 = distance2d( var_6.origin, var_9.origin );
if ( var_11 < var_7 )
{
var_6.heli_target = var_9;
var_7 = var_11;
}
}
}
common_scripts\utility::unlock_wait( "chopperboss_trace" );
}
if ( var_3.size )
{
var_14 = [];
foreach ( var_6 in var_3 )
{
if ( isdefined( var_6.heli_target ) && !isdefined( var_6.in_use ) && !isdefined( var_6.disabled ) )
var_14[var_14.size] = var_6;
}
var_3 = var_14;
}
if ( !var_3.size )
{
foreach ( var_6 in var_0 )
{
if ( var_6 != self.loc_current && isdefined( var_6.in_use ) )
continue;
if ( isdefined( var_6.disabled ) )
continue;
var_18 = undefined;
foreach ( var_9 in var_1 )
{
if ( !isdefined( var_9 ) )
continue;
if ( !isdefined( var_18 ) )
{
var_18 = var_9;
var_6.dist2d = distance2d( var_6.origin, var_9.origin );
continue;
}
var_20 = distance2d( var_6.origin, var_9.origin );
if ( var_20 < var_6.dist2d )
{
var_18 = var_9;
var_6.dist2d = var_20;
}
}
if ( isdefined( var_6.dist2d ) )
var_3[var_3.size] = var_6;
}
}
else
{
foreach ( var_6 in var_3 )
var_6.dist2d = distance2d( var_6.heli_target.origin, var_6.origin );
}
var_25 = common_scripts\utility::array_sort_by_handler( var_3, ::chopper_boss_loc_compare );
var_26 = undefined;
foreach ( var_6 in var_25 )
{
var_28 = maps\_chopperboss_utility::get_chopperboss_data( "min_target_dist2d" );
var_29 = maps\_chopperboss_utility::get_chopperboss_data( "max_target_dist2d" );
if ( var_6.dist2d >= var_28 && var_6.dist2d <= var_29 )
{
var_26 = var_6;
break;
}
}
if ( !isdefined( var_26 ) && var_25.size )
var_26 = var_25[0];
if ( isdefined( var_26 ) && isdefined( var_26.heli_target ) )
chopper_boss_set_target( var_26.heli_target );
self notify( "chopper_done_targeting" );
if ( isdefined( var_26 ) && var_26 != self.loc_current )
return var_26;
else
return undefined;
}
get_trace_loc_for_target( var_0, var_1 )
{
var_2 = var_0 maps\_chopperboss_utility::get_boundry_radius();
var_3 = vectornormalize( self getcentroid() - var_0.origin ) * var_2;
return var_0.origin + var_3;
}
chopper_boss_get_best_target_proc( var_0 )
{
var_1 = maps\_chopperboss_utility::get_chopperboss_data( "tracecheck_func" );
var_2 = undefined;
common_scripts\utility::lock( "chopperboss_aggro_trace" );
var_3 = undefined;
foreach ( var_5 in var_0 )
{
common_scripts\utility::unlock( "chopperboss_aggro_trace" );
common_scripts\utility::lock( "chopperboss_aggro_trace" );
if ( !isdefined( var_5 ) )
continue;
if ( isdefined( var_5.crashing ) && var_5.crashing )
continue;
if ( chopper_boss_in_range( var_5.origin, self.origin, 1 ) == 0 )
continue;
var_6 = get_trace_loc_for_target( self, var_5 getcentroid() );
if ( sillyboxtrace( var_6, var_5, self ) )
{
var_3 = var_5;
break;
}
}
common_scripts\utility::unlock( "chopperboss_aggro_trace" );
chopper_boss_set_target( var_3 );
}
sillyboxtrace( var_0, var_1, var_2 )
{
if ( sighttracepassed( var_0, var_1 getpointinbounds( 0, 0, 1 ), 0, var_2 ) )
return 1;
if ( sighttracepassed( var_0, var_1 getpointinbounds( 0, 0, -1 ), 0, var_2 ) )
return 1;
if ( sighttracepassed( var_0, var_1 getpointinbounds( 0, 1, 0 ), 0, var_2 ) )
return 1;
if ( sighttracepassed( var_0, var_1 getpointinbounds( 0, -1, 0 ), 0, var_2 ) )
return 1;
if ( sighttracepassed( var_0, var_1 getpointinbounds( 1, 0, 0 ), 0, var_2 ) )
return 1;
if ( sighttracepassed( var_0, var_1 getpointinbounds( -1, 0, 0 ), 0, var_2 ) )
return 1;
return 0;
}
chopper_boss_loc_compare()
{
return self.dist2d;
}
chopper_boss_move( var_0, var_1 )
{
self notify( "chopper_boss_move" );
if ( isdefined( self.loc_current ) )
self.loc_current.in_use = undefined;
self.loc_current = var_0;
self.loc_current.in_use = 1;
self clearlookatent();
self cleartargetyaw();
thread maps\_vehicle::vehicle_paths( var_0, undefined, var_1 );
}
chopper_boss_agro_chopper()
{
self endon( "stop_chopper_boss_agro_chopper" );
self endon( "death" );
self endon( "deathspin" );
self.chopper_boss_agro = 1;
for (;;)
{
if ( pause_action() )
continue;
var_0 = chopper_boss_get_target();
chopper_boss_get_best_target_proc( var_0 );
if ( pause_action() )
continue;
if ( isdefined( self.heli_target ) )
self.fired_weapons = chopper_boss_attempt_firing( self.heli_target, 1 );
else
self.fired_weapons = 0;
wait 0.05;
}
}
stop_chopper_boss_agro_chopper()
{
self notify( "stop_chopper_boss_agro_chopper" );
}
chopper_boss_pause_path_finding()
{
self.chopper_boss_path_paused = 1;
}
chopper_boss_resume_path_finding()
{
self.chopper_boss_path_paused = 0;
}
pause_action()
{
var_0 = 0;
for (;;)
{
if ( !isdefined( self.chopper_boss_path_paused ) )
break;
if ( !self.chopper_boss_path_paused )
break;
var_0 = 1;
wait 0.05;
}
return var_0;
}
request_move_now()
{
self.request_move = 1;
self notify( "request_move_update" );
}

View File

@ -0,0 +1,405 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
build_data_override( var_0, var_1 )
{
level.chopperboss_const[self.classname][var_0] = var_1;
}
get_chopperboss_data( var_0 )
{
var_1 = self.classname;
if ( !isdefined( level.chopperboss_const[var_1] ) || !isdefined( level.chopperboss_const[var_1][var_0] ) )
var_1 = "default";
return level.chopperboss_const[var_1][var_0];
}
build_chopperboss_defaults()
{
if ( isdefined( level.chopperboss_const ) )
return;
level.chopperboss_const = [];
level.chopperboss_const["default"] = [];
level.chopperboss_const["default"]["shot_count"] = 20;
level.chopperboss_const["default"]["shot_count_long"] = 60;
level.chopperboss_const["default"]["heli_shoot_limit"] = 1;
level.chopperboss_const["default"]["windup_time"] = 2.0;
level.chopperboss_const["default"]["weapon_cooldown_time"] = 1.0;
level.chopperboss_const["default"]["face_target_timeout"] = 5.0;
level.chopperboss_const["default"]["min_target_dist2d"] = 384;
level.chopperboss_const["default"]["max_target_dist2d"] = 3072;
level.chopperboss_const["default"]["get_targets_func"] = ::chopper_boss_gather_targets;
level.chopperboss_const["default"]["tracecheck_func"] = ::chopper_boss_can_hit_from_mgturret;
level.chopperboss_const["default"]["fire_func"] = ::chopper_boss_fire_mgturrets;
level.chopperboss_const["default"]["pre_move_func"] = ::chopper_boss_pre_move_func;
level.chopperboss_const["default"]["post_move_func"] = ::chopper_boss_post_move_func;
level.chopperboss_const["default"]["next_loc_func"] = maps\_chopperboss::chopper_boss_get_best_location_and_target_proc;
level.chopperboss_const["default"]["stop_func"] = ::chopper_boss_stop_func;
}
chopper_boss_locs_monitor_disable( var_0 )
{
self endon( "death" );
self notify( "chopper_boss_locs_monitor_disable_turn_off" );
self endon( "chopper_boss_locs_monitor_disable_turn_off" );
self.chopper_boss_locs_disabled = [];
var_1 = squared( var_0 );
for (;;)
{
if ( isdefined( level.chopper_boss_locs ) && level.chopper_boss_locs.size )
{
chopper_boss_locs_monitor_disable_reset();
var_2 = ( self.origin[0], self.origin[1], 0 );
foreach ( var_4 in level.chopper_boss_locs )
{
var_5 = ( var_4.origin[0], var_4.origin[1], 0 );
if ( distancesquared( var_2, var_5 ) <= var_1 )
{
var_4 chopper_boss_loc_disable();
self.chopper_boss_locs_disabled[self.chopper_boss_locs_disabled.size] = var_4;
}
}
}
wait 0.05;
}
}
chopper_boss_locs_monitor_disable_turn_off()
{
self notify( "chopper_boss_locs_monitor_disable_turn_off" );
chopper_boss_locs_monitor_disable_reset();
self.chopper_boss_locs_disabled = undefined;
}
chopper_boss_locs_monitor_disable_clean_up()
{
self endon( "chopper_boss_locs_monitor_disable_turn_off" );
self waittill( "death" );
chopper_boss_locs_monitor_disable_reset();
}
chopper_boss_locs_monitor_disable_reset()
{
if ( isdefined( self.chopper_boss_locs_disabled ) && self.chopper_boss_locs_disabled.size )
{
foreach ( var_1 in self.chopper_boss_locs_disabled )
var_1 chopper_boss_loc_enable();
}
self.chopper_boss_locs_disabled = [];
}
chopper_boss_loc_disable()
{
if ( !isdefined( self.disabled ) )
self.disabled = 0;
self.disabled++;
}
chopper_boss_loc_enable()
{
if ( isdefined( self.disabled ) )
{
self.disabled--;
if ( self.disabled <= 0 )
self.disabled = undefined;
}
}
chopper_boss_forced_target_set( var_0 )
{
self.heli_target_forced = var_0;
}
chopper_boss_forced_target_clear()
{
self.heli_target_forced = undefined;
}
chopper_boss_forced_target_get()
{
var_0 = undefined;
if ( isdefined( self.heli_target_forced ) )
var_0 = self.heli_target_forced;
return var_0;
}
chopper_boss_set_hangout_volume( var_0 )
{
var_1 = [];
foreach ( var_3 in level.chopper_boss_locs )
{
if ( ispointinvolume( var_3.origin, var_0 ) )
var_1[var_1.size] = var_3;
}
level.chopper_boss_hangout = var_1;
}
chopper_boss_clear_hangout_volume()
{
level.chopper_boss_hangout = undefined;
}
chopper_boss_wait_populate()
{
while ( !isdefined( level.chopper_boss_locs_populated ) )
wait 0.05;
}
chopper_boss_get_closest_available_path_struct_2d( var_0 )
{
var_1 = undefined;
var_2 = undefined;
var_3 = level.chopper_boss_locs;
if ( isdefined( level.chopper_boss_hangout ) )
var_3 = level.chopper_boss_hangout;
foreach ( var_5 in var_3 )
{
if ( isdefined( var_5.in_use ) || isdefined( var_5.disabled ) )
continue;
var_6 = common_scripts\utility::distance_2d_squared( var_0, var_5.origin );
if ( !isdefined( var_1 ) || var_6 < var_1 )
{
var_1 = var_6;
var_2 = var_5;
}
}
return var_2;
}
chopper_boss_gather_targets()
{
var_0 = [];
if ( self.script_team == "allies" )
{
var_1 = getaiarray( "axis" );
foreach ( var_3 in var_1 )
{
if ( !isdefined( var_3.ignoreme ) || var_3.ignoreme == 0 )
var_0[var_0.size] = var_3;
}
var_1 = getaiarray( "team3" );
foreach ( var_3 in var_1 )
{
if ( !isdefined( var_3.ignoreme ) || var_3.ignoreme == 0 )
var_0[var_0.size] = var_3;
}
}
else
{
foreach ( var_8 in level.players )
{
if ( !maps\_utility::is_player_down( var_8 ) && ( !isdefined( var_8.ignoreme ) || var_8.ignoreme == 0 ) )
var_0[var_0.size] = var_8;
}
var_10 = getaiarray( "allies" );
foreach ( var_12 in var_10 )
{
if ( !isdefined( var_12.ignoreme ) || var_12.ignoreme == 0 )
var_0[var_0.size] = var_12;
}
if ( !var_0.size )
{
foreach ( var_8 in level.players )
{
if ( !maps\_utility::is_player_down_and_out( var_8 ) && ( !isdefined( var_8.ignoreme ) || var_8.ignoreme == 0 ) )
var_0[var_0.size] = var_8;
}
}
}
return var_0;
}
chopper_boss_can_hit_from_mgturret( var_0, var_1 )
{
var_2 = self.mgturret[0].origin[2] - self.origin[2];
return bullettracepassed( var_0 + ( 0, 0, var_2 ), var_1, 0, self );
}
get_boundry_radius()
{
if ( isdefined( self.boundryradius ) )
return self.boundryradius;
if ( get_model_boundry_radius() )
return self.boundryradius;
if ( !isdefined( level.boundry_radius_cache ) )
level.boundry_radius_cache = [];
self.boundryradius = distance( self.origin, self getpointinbounds( 1, 1, 1 ) ) + 10;
level.boundry_radius_cache[self.model] = self.boundryradius;
return self.boundryradius;
}
get_model_boundry_radius()
{
if ( !isdefined( level.boundry_radius_cache ) )
return 0;
if ( !isdefined( level.boundry_radius_cache[self.model] ) )
return 0;
self.boundryradius = level.boundry_radius_cache[self.model];
return 1;
}
draw_boundry_sphere()
{
self notify( "draw_boundry_sphere" );
self endon( "draw_boundry_sphere" );
self endon( "death" );
for (;;)
wait 0.05;
}
chopper_boss_can_hit_from_tag_turret( var_0, var_1 )
{
var_2 = self gettagorigin( "tag_flash" );
var_3 = var_2[2] - self.origin[2];
return bullettracepassed( var_0 + ( 0, 0, var_3 ), var_1, 0, self );
}
chopper_boss_fire_mgturrets( var_0 )
{
self endon( "deathspin" );
self endon( "death" );
var_0 endon( "death" );
var_1 = get_chopperboss_data( "shot_count" );
foreach ( var_3 in self.mgturret )
{
if ( isai( var_0 ) )
var_3 settargetentity( var_0, ( var_0 geteye() - var_0.origin ) * 0.7 );
else if ( isplayer( var_0 ) )
{
if ( maps\_utility::is_player_down( var_0 ) )
{
var_1 = get_chopperboss_data( "shot_count_long" );
var_3 settargetentity( var_0 );
}
else
var_3 settargetentity( var_0, var_0 geteye() - var_0.origin );
}
else
var_3 settargetentity( var_0, ( 0, 0, 32 ) );
var_3 startbarrelspin();
}
wait( get_chopperboss_data( "windup_time" ) );
var_5 = 0;
for ( var_6 = 0; var_6 < var_1; var_6++ )
{
var_7 = level.vehicle_mgturret[self.classname][var_5];
var_8 = weaponfiretime( var_7.info );
self.mgturret[var_5] shootturret();
var_5++;
if ( var_5 >= self.mgturret.size )
var_5 = 0;
wait( var_8 + 0.05 );
}
wait( get_chopperboss_data( "weapon_cooldown_time" ) );
foreach ( var_3 in self.mgturret )
var_3 stopbarrelspin();
}
chopper_boss_fire_weapon( var_0 )
{
self endon( "deathspin" );
self endon( "death" );
var_0 endon( "death" );
var_1 = get_chopperboss_data( "shot_count" );
if ( isai( var_0 ) )
self setturrettargetent( var_0, var_0 geteye() - var_0.origin );
else if ( isplayer( var_0 ) )
{
if ( maps\_utility::is_player_down( var_0 ) )
{
var_1 = get_chopperboss_data( "shot_count_long" );
self setturrettargetent( var_0 );
}
else
self setturrettargetent( var_0, var_0 geteye() - var_0.origin );
}
else
self setturrettargetent( var_0, ( 0, 0, 32 ) );
wait( get_chopperboss_data( "windup_time" ) );
var_2 = 0;
for ( var_3 = 0; var_3 < var_1; var_3++ )
{
if ( isdefined( self.weapon ) )
var_4 = weaponfiretime( self.weapon );
else
var_4 = 0.65;
self fireweapon();
var_2++;
wait( var_4 + 0.05 );
}
wait( get_chopperboss_data( "weapon_cooldown_time" ) );
}
chopper_boss_pre_move_func()
{
if ( isdefined( chopper_boss_forced_target_get() ) )
self setlookatent( chopper_boss_forced_target_get() );
else if ( isdefined( self.heli_target ) )
self setlookatent( self.heli_target );
else
{
var_0 = common_scripts\utility::getclosest( self.origin, level.players );
if ( isdefined( var_0 ) )
self setlookatent( var_0 );
}
}
chopper_boss_post_move_func()
{
}
chopper_boss_stop_func()
{
if ( isdefined( self.heli_target ) )
self.fired_weapons = maps\_chopperboss::chopper_boss_attempt_firing( self.heli_target );
else
self.fired_weapons = 0;
}

1367
maps/_colors.gsc Normal file

File diff suppressed because it is too large Load Diff

89
maps/_compass.gsc Normal file
View File

@ -0,0 +1,89 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
setupminimap( var_0, var_1 )
{
level.minimap_image = var_0;
if ( !isdefined( level._loadstarted ) && !isdefined( var_1 ) )
{
}
if ( !isdefined( var_1 ) )
var_1 = "minimap_corner";
var_2 = getdvarfloat( "scr_requiredMapAspectRatio", 1 );
var_3 = getentarray( var_1, "targetname" );
if ( var_3.size != 2 )
return;
var_4 = ( var_3[0].origin[0], var_3[0].origin[1], 0 );
var_5 = ( var_3[1].origin[0], var_3[1].origin[1], 0 );
var_6 = var_5 - var_4;
var_7 = ( cos( getnorthyaw() ), sin( getnorthyaw() ), 0 );
var_8 = ( 0 - var_7[1], var_7[0], 0 );
if ( vectordot( var_6, var_8 ) > 0 )
{
if ( vectordot( var_6, var_7 ) > 0 )
{
var_9 = var_5;
var_10 = var_4;
}
else
{
var_11 = vecscale( var_7, vectordot( var_6, var_7 ) );
var_9 = var_5 - var_11;
var_10 = var_4 + var_11;
}
}
else if ( vectordot( var_6, var_7 ) > 0 )
{
var_11 = vecscale( var_7, vectordot( var_6, var_7 ) );
var_9 = var_4 + var_11;
var_10 = var_5 - var_11;
}
else
{
var_9 = var_4;
var_10 = var_5;
}
if ( var_2 > 0 )
{
var_12 = vectordot( var_9 - var_10, var_7 );
var_13 = vectordot( var_9 - var_10, var_8 );
var_14 = var_13 / var_12;
if ( var_14 < var_2 )
{
var_15 = var_2 / var_14;
var_16 = vecscale( var_8, var_13 * ( var_15 - 1 ) * 0.5 );
}
else
{
var_15 = var_14 / var_2;
var_16 = vecscale( var_7, var_12 * ( var_15 - 1 ) * 0.5 );
}
var_9 = var_9 + var_16;
var_10 = var_10 - var_16;
}
level.map_extents = [];
level.map_extents["top"] = var_9[1];
level.map_extents["left"] = var_10[0];
level.map_extents["bottom"] = var_10[1];
level.map_extents["right"] = var_9[0];
level.map_width = level.map_extents["right"] - level.map_extents["left"];
level.map_height = level.map_extents["top"] - level.map_extents["bottom"];
level.mapsize = vectordot( var_9 - var_10, var_7 );
setminimap( var_0, var_9[0], var_9[1], var_10[0], var_10[1] );
}
vecscale( var_0, var_1 )
{
return ( var_0[0] * var_1, var_0[1] * var_1, var_0[2] * var_1 );
}

293
maps/_coop.gsc Normal file
View File

@ -0,0 +1,293 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
common_scripts\utility::flag_init( "coop_game" );
if ( !maps\_utility::is_coop() )
return;
common_scripts\utility::flag_set( "coop_game" );
common_scripts\utility::flag_init( "coop_show_constant_icon" );
setdvarifuninitialized( "coop_show_constant_icon", 1 );
if ( getdvarint( "coop_show_constant_icon" ) == 1 )
common_scripts\utility::flag_set( "coop_show_constant_icon" );
precacheshader( "hint_health" );
precacheshader( "coop_player_location" );
precacheshader( "coop_player_location_fire" );
level.coop_icon_blinktime = 7;
level.coop_icon_blinkcrement = 0.375;
level.coop_revive_nag_hud_refreshtime = 20;
foreach ( var_1 in level.players )
{
var_1.colorblind = var_1 getlocalplayerprofiledata( "colorBlind" );
var_1 thread initialize_colors( var_1.colorblind );
var_1 thread friendly_hud_init();
}
}
initialize_colors( var_0 )
{
if ( var_0 )
{
var_1 = ( 0.35, 1, 1 );
var_2 = ( 1, 0.65, 0.2 );
var_3 = ( 1, 1, 1 );
self.coop_icon_color_normal = var_1;
self.coop_icon_color_downed = var_2;
self.coop_icon_color_shoot = var_1;
self.coop_icon_color_damage = var_3;
self.coop_icon_color_dying = var_2;
self.coop_icon_color_blink = var_3;
}
else
{
var_4 = ( 0.635, 0.929, 0.604 );
var_5 = ( 1, 1, 0.2 );
var_2 = ( 1, 0.65, 0.2 );
var_6 = ( 1, 0.2, 0.2 );
var_3 = ( 1, 1, 1 );
self.coop_icon_color_normal = var_4;
self.coop_icon_color_downed = var_5;
self.coop_icon_color_shoot = var_4;
self.coop_icon_color_damage = var_2;
self.coop_icon_color_dying = var_6;
self.coop_icon_color_blink = var_3;
}
}
rebuild_friendly_icon( var_0, var_1, var_2 )
{
if ( isdefined( self.nofriendlyhudicon ) )
return;
if ( !isdefined( self.friendlyicon ) || self.friendlyicon.material != var_1 )
create_fresh_friendly_icon( var_1 );
self.friendlyicon.color = var_0;
if ( isdefined( var_2 ) && var_2 )
self.friendlyicon setwaypointedgestyle_rotatingicon();
}
create_fresh_friendly_icon( var_0 )
{
if ( isdefined( self.friendlyicon ) )
self.friendlyicon destroy();
self.friendlyicon = newclienthudelem( self );
self.friendlyicon setshader( var_0, 1, 1 );
self.friendlyicon setwaypoint( 1, 1, 0 );
self.friendlyicon setwaypointiconoffscreenonly();
self.friendlyicon settargetent( maps\_utility::get_other_player( self ) );
self.friendlyicon.material = var_0;
self.friendlyicon.hidewheninmenu = 1;
if ( common_scripts\utility::flag( "coop_show_constant_icon" ) )
self.friendlyicon.alpha = 1.0;
else
self.friendlyicon.alpha = 0.0;
}
friendly_hud_icon_blink_on_fire()
{
self endon( "death" );
for (;;)
{
self waittill( "weapon_fired" );
var_0 = maps\_utility::get_other_player( self );
var_0 thread friendly_hud_icon_flash( var_0.coop_icon_color_shoot, "coop_player_location_fire", 1 );
}
}
friendly_hud_icon_blink_on_damage()
{
self endon( "death" );
for (;;)
{
self waittill( "damage" );
var_0 = maps\_utility::get_other_player( self );
var_0 thread friendly_hud_icon_flash( var_0.coop_icon_color_damage, "coop_player_location", 1 );
}
}
friendly_hud_icon_flash( var_0, var_1, var_2 )
{
if ( isdefined( self.nofriendlyhudicon ) )
return;
self endon( "death" );
self notify( "flash_color_thread" );
self endon( "flash_color_thread" );
var_3 = maps\_utility::get_other_player( self );
if ( maps\_utility::is_player_down( var_3 ) )
return;
rebuild_friendly_icon( var_0, var_1, var_2 );
wait 0.5;
var_1 = friendlyhudicon_currentmaterial();
var_4 = friendlyhudicon_rotating();
rebuild_friendly_icon( self.coop_icon_color_normal, var_1, var_4 );
}
friendly_hud_init()
{
level endon( "special_op_terminated" );
friendlyhudicon_normal();
thread friendly_hud_icon_blink_on_fire();
thread friendly_hud_icon_blink_on_damage();
thread monitor_color_blind_toggle();
thread friendly_hud_destroy_on_mission_end();
if ( isdefined( self.nofriendlyhudicon ) )
return;
self.friendlyicon.alpha = 0.0;
for (;;)
{
common_scripts\utility::flag_wait( "coop_show_constant_icon" );
self.friendlyicon.alpha = 1.0;
common_scripts\utility::flag_waitopen( "coop_show_constant_icon" );
self.friendlyicon.alpha = 0.0;
}
}
friendly_hud_destroy_on_mission_end()
{
level waittill( "special_op_terminated" );
foreach ( var_1 in level.players )
var_1 player_friendly_hud_destroy();
}
player_friendly_hud_destroy()
{
if ( isdefined( self.friendlyicon ) )
self.friendlyicon destroy();
}
friendlyhudicon_hideall()
{
common_scripts\utility::flag_clear( "coop_show_constant_icon" );
}
friendlyhudicon_showall()
{
common_scripts\utility::flag_set( "coop_show_constant_icon" );
}
friendlyhudicon_disable()
{
self.nofriendlyhudicon = 1;
player_friendly_hud_destroy();
}
friendlyhudicon_enable()
{
self.nofriendlyhudicon = undefined;
if ( !isdefined( self.friendlyicon ) )
friendlyhudicon_normal();
}
friendlyhudicon_normal()
{
if ( !common_scripts\utility::flag( "coop_game" ) )
return;
self.coop_icon_state = "ICON_STATE_NORMAL";
var_0 = friendlyhudicon_currentmaterial();
var_1 = friendlyhudicon_rotating();
rebuild_friendly_icon( self.coop_icon_color_normal, var_0, var_1 );
}
friendlyhudicon_downed()
{
if ( !common_scripts\utility::flag( "coop_game" ) )
return;
self.coop_icon_state = "ICON_STATE_DOWNED";
var_0 = friendlyhudicon_currentmaterial();
var_1 = friendlyhudicon_rotating();
rebuild_friendly_icon( self.coop_icon_color_downed, var_0, var_1 );
}
friendlyhudicon_update( var_0 )
{
if ( !common_scripts\utility::flag( "coop_game" ) )
return;
var_1 = friendlyhudicon_currentmaterial();
var_2 = friendlyhudicon_rotating();
rebuild_friendly_icon( var_0, var_1, var_2 );
}
friendlyhudicon_currentmaterial()
{
var_0 = "coop_player_location";
switch ( self.coop_icon_state )
{
case "ICON_STATE_NORMAL":
var_0 = "coop_player_location";
break;
case "ICON_STATE_DOWNED":
var_0 = "hint_health";
break;
default:
break;
}
return var_0;
}
friendlyhudicon_rotating()
{
var_0 = 0;
switch ( self.coop_icon_state )
{
case "ICON_STATE_NORMAL":
var_0 = 1;
break;
case "ICON_STATE_DOWNED":
var_0 = 0;
break;
default:
break;
}
return var_0;
}
monitor_color_blind_toggle()
{
for (;;)
{
if ( self getlocalplayerprofiledata( "colorBlind" ) != self.colorblind )
{
self.colorblind = self getlocalplayerprofiledata( "colorBlind" );
initialize_colors( self.colorblind );
switch ( self.coop_icon_state )
{
case "ICON_STATE_NORMAL":
friendlyhudicon_normal();
break;
case "ICON_STATE_DOWNED":
friendlyhudicon_downed();
break;
}
}
wait 0.05;
}
}

64
maps/_createfx.gsc Normal file
View File

@ -0,0 +1,64 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
createfx()
{
level.func_position_player = ::func_position_player;
level.func_position_player_get = ::func_position_player_get;
level.func_loopfxthread = common_scripts\_fx::loopfxthread;
level.func_oneshotfxthread = common_scripts\_fx::oneshotfxthread;
level.func_create_loopsound = common_scripts\_fx::create_loopsound;
level.func_updatefx = common_scripts\_createfx::restart_fx_looper;
level.func_process_fx_rotater = common_scripts\_createfx::process_fx_rotater;
level.func_player_speed = ::func_player_speed;
level.mp_createfx = 0;
common_scripts\utility::array_call( getaiarray(), ::delete );
common_scripts\utility::array_call( getspawnerarray(), ::delete );
var_0 = getaiarray();
common_scripts\utility::array_call( var_0, ::delete );
common_scripts\_createfx::createfx_common();
thread common_scripts\_createfx::createfxlogic();
thread common_scripts\_createfx::func_get_level_fx();
level.player allowcrouch( 0 );
level.player allowprone( 0 );
createfx_only_triggers();
level waittill( "eternity" );
}
createfx_only_triggers()
{
var_0 = [];
var_0["trigger_createart_transient"] = maps\_trigger::trigger_createart_transient;
foreach ( var_4, var_2 in var_0 )
{
var_3 = getentarray( var_4, "classname" );
common_scripts\utility::array_levelthread( var_3, var_2 );
}
}
func_position_player_get( var_0 )
{
if ( distancesquared( var_0, level.player.origin ) > 4096 )
{
setdvar( "createfx_playerpos_x", level.player.origin[0] );
setdvar( "createfx_playerpos_y", level.player.origin[1] );
setdvar( "createfx_playerpos_z", level.player.origin[2] );
}
return level.player.origin;
}
func_position_player()
{
var_0 = [];
var_0[0] = getdvarint( "createfx_playerpos_x" );
var_0[1] = getdvarint( "createfx_playerpos_y" );
var_0[2] = getdvarint( "createfx_playerpos_z" );
level.player setorigin( ( var_0[0], var_0[1], var_0[2] ) );
}
func_player_speed()
{
setsaveddvar( "g_speed", level._createfx.player_speed );
}

714
maps/_credits.gsc Normal file
View File

@ -0,0 +1,714 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
initcredits( var_0 )
{
common_scripts\utility::flag_init( "atvi_credits_go" );
level.linesize = 1.35;
level.headingsize = 1.75;
level.linelist = [];
level.credits_speed = 20.25;
level.credits_spacing = -120;
maps\_utility::set_console_status();
if ( !isdefined( var_0 ) )
var_0 = "all";
switch ( var_0 )
{
case "iw":
maps\_credits_autogen::initiw6credits();
break;
case "atvi":
maps\_credits_autogen::initactivisioncredits();
break;
case "all":
maps\_credits_autogen::initiw6credits();
maps\_credits_autogen::initactivisioncredits();
break;
}
}
addlefttitle( var_0, var_1 )
{
precachestring( var_0 );
if ( !isdefined( var_1 ) )
var_1 = level.linesize;
var_2 = spawnstruct();
var_2.type = "lefttitle";
var_2.title = var_0;
var_2.textscale = var_1;
level.linelist[level.linelist.size] = var_2;
}
addleftname( var_0, var_1 )
{
precachestring( var_0 );
if ( !isdefined( var_1 ) )
var_1 = level.linesize;
var_2 = spawnstruct();
var_2.type = "leftname";
var_2.name = var_0;
var_2.textscale = var_1;
level.linelist[level.linelist.size] = var_2;
}
addsublefttitle( var_0, var_1 )
{
addleftname( var_0, var_1 );
}
addsubleftname( var_0, var_1 )
{
precachestring( var_0 );
if ( !isdefined( var_1 ) )
var_1 = level.linesize;
var_2 = spawnstruct();
var_2.type = "subleftname";
var_2.name = var_0;
var_2.textscale = var_1;
level.linelist[level.linelist.size] = var_2;
}
addrighttitle( var_0, var_1 )
{
precachestring( var_0 );
if ( !isdefined( var_1 ) )
var_1 = level.linesize;
var_2 = spawnstruct();
var_2.type = "righttitle";
var_2.title = var_0;
var_2.textscale = var_1;
level.linelist[level.linelist.size] = var_2;
}
addrightname( var_0, var_1 )
{
precachestring( var_0 );
if ( !isdefined( var_1 ) )
var_1 = level.linesize;
var_2 = spawnstruct();
var_2.type = "rightname";
var_2.name = var_0;
var_2.textscale = var_1;
level.linelist[level.linelist.size] = var_2;
}
addcenterheading( var_0, var_1 )
{
precachestring( var_0 );
if ( !isdefined( var_1 ) )
var_1 = level.linesize;
var_2 = spawnstruct();
var_2.type = "centerheading";
var_2.heading = var_0;
var_2.textscale = var_1;
level.linelist[level.linelist.size] = var_2;
}
addcentersubtitle( var_0, var_1 )
{
precachestring( var_0 );
if ( !isdefined( var_1 ) )
var_1 = level.linesize;
var_2 = spawnstruct();
var_2.type = "centersubtitle";
var_2.heading = var_0;
var_2.textscale = var_1;
level.linelist[level.linelist.size] = var_2;
}
addcastname( var_0, var_1, var_2 )
{
precachestring( var_1 );
precachestring( var_0 );
if ( !isdefined( var_2 ) )
var_2 = level.linesize;
var_3 = spawnstruct();
var_3.type = "castname";
var_3.title = var_1;
var_3.name = var_0;
var_3.textscale = var_2;
level.linelist[level.linelist.size] = var_3;
}
addcentername( var_0, var_1 )
{
precachestring( var_0 );
if ( !isdefined( var_1 ) )
var_1 = level.linesize;
var_2 = spawnstruct();
var_2.type = "centername";
var_2.name = var_0;
var_2.textscale = var_1;
level.linelist[level.linelist.size] = var_2;
}
addcenternamedouble( var_0, var_1, var_2 )
{
precachestring( var_0 );
precachestring( var_1 );
if ( !isdefined( var_2 ) )
var_2 = level.linesize;
var_3 = spawnstruct();
var_3.type = "centernamedouble";
var_3.name1 = var_0;
var_3.name2 = var_1;
var_3.textscale = var_2;
level.linelist[level.linelist.size] = var_3;
}
addcenterdual( var_0, var_1, var_2 )
{
precachestring( var_0 );
precachestring( var_1 );
if ( !isdefined( var_2 ) )
var_2 = level.linesize;
var_3 = spawnstruct();
var_3.type = "centerdual";
var_3.title = var_0;
var_3.name = var_1;
var_3.textscale = var_2;
level.linelist[level.linelist.size] = var_3;
}
addcentertriple( var_0, var_1, var_2, var_3 )
{
var_4 = spawnstruct();
var_4.type = "centertriple";
if ( isdefined( var_0 ) )
{
precachestring( var_0 );
var_4.name1 = var_0;
}
else
var_4.name1 = "";
if ( isdefined( var_1 ) )
{
precachestring( var_1 );
var_4.name2 = var_1;
}
else
var_4.name2 = "";
if ( isdefined( var_2 ) )
{
precachestring( var_2 );
var_4.name3 = var_2;
}
else
var_4.name3 = "";
if ( !isdefined( var_3 ) )
var_3 = level.linesize;
var_4.textscale = var_3;
level.linelist[level.linelist.size] = var_4;
}
addspace()
{
var_0 = spawnstruct();
var_0.type = "space";
level.linelist[level.linelist.size] = var_0;
}
addspacesmall()
{
var_0 = spawnstruct();
var_0.type = "spacesmall";
level.linelist[level.linelist.size] = var_0;
}
playcredits()
{
visionsetnaked( "", 0 );
var_0 = getdvar( "ui_char_museum_mode" );
for ( var_1 = 0; var_1 < level.linelist.size; var_1++ )
{
var_2 = 0.5;
var_3 = level.linelist[var_1].type;
if ( var_3 == "lefttitle" )
{
var_4 = level.linelist[var_1].title;
var_5 = level.linelist[var_1].textscale;
var_6 = newhudelem();
var_6 settext( var_4 );
var_6.alignx = "left";
var_6.horzalign = "left";
var_6.x = 28;
var_6.y = 480;
if ( !level.console )
var_6.font = "default";
else
var_6.font = "small";
var_6.fontscale = var_5;
var_6.sort = 2;
var_6.glowcolor = ( 0.3, 0.6, 0.3 );
var_6.glowalpha = 1;
var_6 thread delaydestroy( level.credits_speed );
var_6 moveovertime( level.credits_speed );
var_6.y = level.credits_spacing;
var_6 thread pulse_fx();
}
else if ( var_3 == "leftname" )
{
var_7 = level.linelist[var_1].name;
var_5 = level.linelist[var_1].textscale;
var_6 = newhudelem();
var_6 settext( var_7 );
var_6.alignx = "left";
var_6.horzalign = "left";
var_6.x = 60;
var_6.y = 480;
if ( !level.console )
var_6.font = "default";
else
var_6.font = "small";
var_6.fontscale = var_5;
var_6.sort = 2;
var_6.glowcolor = ( 0.3, 0.6, 0.3 );
var_6.glowalpha = 1;
var_6 thread delaydestroy( level.credits_speed );
var_6 moveovertime( level.credits_speed );
var_6.y = level.credits_spacing;
var_6 thread pulse_fx();
}
else if ( var_3 == "castname" )
{
var_4 = level.linelist[var_1].title;
var_7 = level.linelist[var_1].name;
var_5 = level.linelist[var_1].textscale;
var_8 = newhudelem();
var_8 settext( var_4 );
var_8.alignx = "left";
var_8.horzalign = "left";
var_8.x = 60;
var_8.y = 480;
if ( !level.console )
var_8.font = "default";
else
var_8.font = "small";
var_8.fontscale = var_5;
var_8.sort = 2;
var_8.glowcolor = ( 0.3, 0.6, 0.3 );
var_8.glowalpha = 1;
var_9 = newhudelem();
var_9 settext( var_7 );
var_9.alignx = "right";
var_9.horzalign = "left";
var_9.x = 275;
var_9.y = 480;
if ( !level.console )
var_9.font = "default";
else
var_9.font = "small";
var_9.fontscale = var_5;
var_9.sort = 2;
var_9.glowcolor = ( 0.3, 0.6, 0.3 );
var_9.glowalpha = 1;
var_8 thread delaydestroy( level.credits_speed );
var_8 moveovertime( level.credits_speed );
var_8.y = level.credits_spacing;
var_9 thread delaydestroy( level.credits_speed );
var_9 moveovertime( level.credits_speed );
var_9.y = level.credits_spacing;
var_8 thread pulse_fx();
var_9 thread pulse_fx();
}
else if ( var_3 == "subleftname" )
{
var_7 = level.linelist[var_1].name;
var_5 = level.linelist[var_1].textscale;
var_6 = newhudelem();
var_6 settext( var_7 );
var_6.alignx = "left";
var_6.horzalign = "left";
var_6.x = 92;
var_6.y = 480;
if ( !level.console )
var_6.font = "default";
else
var_6.font = "small";
var_6.fontscale = var_5;
var_6.sort = 2;
var_6.glowcolor = ( 0.3, 0.6, 0.3 );
var_6.glowalpha = 1;
var_6 thread delaydestroy( level.credits_speed );
var_6 moveovertime( level.credits_speed );
var_6.y = level.credits_spacing;
var_6 thread pulse_fx();
}
else if ( var_3 == "righttitle" )
{
var_4 = level.linelist[var_1].title;
var_5 = level.linelist[var_1].textscale;
var_6 = newhudelem();
var_6 settext( var_4 );
var_6.alignx = "left";
var_6.horzalign = "right";
var_6.x = -132;
var_6.y = 480;
if ( !level.console )
var_6.font = "default";
else
var_6.font = "small";
var_6.fontscale = var_5;
var_6.sort = 2;
var_6.glowcolor = ( 0.3, 0.6, 0.3 );
var_6.glowalpha = 1;
var_6 thread delaydestroy( level.credits_speed );
var_6 moveovertime( level.credits_speed );
var_6.y = level.credits_spacing;
}
else if ( var_3 == "rightname" )
{
var_7 = level.linelist[var_1].name;
var_5 = level.linelist[var_1].textscale;
var_6 = newhudelem();
var_6 settext( var_7 );
var_6.alignx = "left";
var_6.horzalign = "right";
var_6.x = -100;
var_6.y = 480;
if ( !level.console )
var_6.font = "default";
else
var_6.font = "small";
var_6.fontscale = var_5;
var_6.sort = 2;
var_6.glowcolor = ( 0.3, 0.6, 0.3 );
var_6.glowalpha = 1;
var_6 thread delaydestroy( level.credits_speed );
var_6 moveovertime( level.credits_speed );
var_6.y = level.credits_spacing;
}
else if ( var_3 == "centerheading" )
{
var_10 = level.linelist[var_1].heading;
var_5 = level.linelist[var_1].textscale * 1.2;
var_6 = newhudelem();
var_6 settext( var_10 );
var_6.alignx = "center";
var_6.horzalign = "center";
var_6.x = 0;
var_6.y = 480;
if ( !level.console )
var_6.font = "objective";
else
var_6.font = "objective";
var_6.fontscale = var_5;
var_6.sort = 2;
var_6.glowcolor = ( 0.1, 0.6, 0.7 );
var_6.glowalpha = 0.5;
var_6 thread delaydestroy( level.credits_speed );
var_6 moveovertime( level.credits_speed );
var_6 thread delayfade( level.credits_speed );
var_6.y = level.credits_spacing;
var_2 = var_2 * 1.2;
}
else if ( var_3 == "centersubtitle" )
{
var_10 = level.linelist[var_1].heading;
var_5 = level.linelist[var_1].textscale;
var_6 = newhudelem();
var_6 settext( var_10 );
var_6.alignx = "center";
var_6.horzalign = "center";
var_6.x = 0;
var_6.y = 480;
if ( !level.console )
var_6.font = "big";
else
var_6.font = "big";
var_6.fontscale = var_5;
var_6.sort = 2;
var_6.glowcolor = ( 0.1, 0.6, 0.7 );
var_6.glowalpha = 0.5;
var_6 thread delaydestroy( level.credits_speed );
var_6 moveovertime( level.credits_speed );
var_6 thread delayfade( level.credits_speed );
var_6.y = level.credits_spacing;
var_2 = var_2 * 1.1;
}
else if ( var_3 == "centerdual" )
{
var_4 = level.linelist[var_1].title;
var_7 = level.linelist[var_1].name;
var_5 = level.linelist[var_1].textscale;
var_8 = newhudelem();
var_8 settext( var_4 );
var_8.alignx = "right";
var_8.horzalign = "center";
var_8.x = -4;
var_8.y = 480;
if ( !level.console )
var_8.font = "small";
else
var_8.font = "small";
var_8.fontscale = var_5;
var_8.sort = 2;
var_8.glowcolor = ( 0.6, 0.6, 0.6 );
var_8.glowalpha = 0;
var_9 = newhudelem();
var_9 settext( var_7 );
var_9.alignx = "left";
var_9.horzalign = "center";
var_9.x = 4;
var_9.y = 480;
if ( !level.console )
var_9.font = "small";
else
var_9.font = "small";
var_9.fontscale = var_5;
var_9.sort = 2;
var_9.glowcolor = ( 0.6, 0.6, 0.6 );
var_9.glowalpha = 0;
var_8 thread delaydestroy( level.credits_speed );
var_8 moveovertime( level.credits_speed );
var_8 thread delayfade( level.credits_speed - 0.3 );
var_8.y = level.credits_spacing;
var_9 thread delaydestroy( level.credits_speed );
var_9 moveovertime( level.credits_speed );
var_9 thread delayfade( level.credits_speed );
var_9.y = level.credits_spacing;
}
else if ( var_3 == "centertriple" )
{
var_11 = level.linelist[var_1].name1;
var_12 = level.linelist[var_1].name2;
var_13 = level.linelist[var_1].name3;
var_5 = level.linelist[var_1].textscale;
var_8 = newhudelem();
var_8 settext( var_11 );
var_8.alignx = "left";
var_8.horzalign = "center";
var_8.x = -220;
var_8.y = 480;
if ( !level.console )
var_8.font = "small";
else
var_8.font = "small";
var_8.fontscale = var_5;
var_8.sort = 2;
var_8.glowcolor = ( 0.6, 0.6, 0.6 );
var_8.glowalpha = 0;
var_9 = newhudelem();
var_9 settext( var_12 );
var_9.alignx = "center";
var_9.horzalign = "center";
var_9.x = 0;
var_9.y = 480;
if ( !level.console )
var_9.font = "small";
else
var_9.font = "small";
var_9.fontscale = var_5;
var_9.sort = 2;
var_9.glowcolor = ( 0.6, 0.6, 0.6 );
var_9.glowalpha = 0;
var_14 = newhudelem();
var_14 settext( var_13 );
var_14.alignx = "right";
var_14.horzalign = "center";
var_14.x = 220;
var_14.y = 480;
if ( !level.console )
var_14.font = "small";
else
var_14.font = "small";
var_14.fontscale = var_5;
var_14.sort = 2;
var_14.glowcolor = ( 0.6, 0.6, 0.6 );
var_14.glowalpha = 0;
var_8 thread delaydestroy( level.credits_speed );
var_8 moveovertime( level.credits_speed );
var_8 thread delayfade( level.credits_speed - 0.4 );
var_8.y = level.credits_spacing;
var_9 thread delaydestroy( level.credits_speed );
var_9 moveovertime( level.credits_speed );
var_9 thread delayfade( level.credits_speed - 0.2 );
var_9.y = level.credits_spacing;
var_14 thread delaydestroy( level.credits_speed );
var_14 moveovertime( level.credits_speed );
var_14 thread delayfade( level.credits_speed );
var_14.y = level.credits_spacing;
}
else if ( var_3 == "centername" )
{
var_7 = level.linelist[var_1].name;
var_5 = level.linelist[var_1].textscale;
var_6 = newhudelem();
var_6 settext( var_7 );
var_6.alignx = "left";
var_6.horzalign = "center";
var_6.x = 8;
var_6.y = 480;
if ( !level.console )
var_6.font = "default";
else
var_6.font = "small";
var_6.fontscale = var_5;
var_6.sort = 2;
var_6.glowcolor = ( 0.3, 0.6, 0.3 );
var_6.glowalpha = 1;
var_6 thread delaydestroy( level.credits_speed );
var_6 moveovertime( level.credits_speed );
var_6.y = level.credits_spacing;
}
else if ( var_3 == "centernamedouble" )
{
var_11 = level.linelist[var_1].name1;
var_12 = level.linelist[var_1].name2;
var_5 = level.linelist[var_1].textscale;
var_8 = newhudelem();
var_8 settext( var_11 );
var_8.alignx = "center";
var_8.horzalign = "center";
var_8.x = -80;
var_8.y = 480;
if ( !level.console )
var_8.font = "default";
else
var_8.font = "small";
var_8.fontscale = var_5;
var_8.sort = 2;
var_8.glowcolor = ( 0.3, 0.6, 0.3 );
var_8.glowalpha = 1;
var_9 = newhudelem();
var_9 settext( var_12 );
var_9.alignx = "center";
var_9.horzalign = "center";
var_9.x = 80;
var_9.y = 480;
if ( !level.console )
var_9.font = "default";
else
var_9.font = "small";
var_9.fontscale = var_5;
var_9.sort = 2;
var_9.glowcolor = ( 0.3, 0.6, 0.3 );
var_9.glowalpha = 1;
var_8 thread delaydestroy( level.credits_speed );
var_8 moveovertime( level.credits_speed );
var_8.y = level.credits_spacing;
var_9 thread delaydestroy( level.credits_speed );
var_9 moveovertime( level.credits_speed );
var_9.y = level.credits_spacing;
}
else if ( var_3 == "spacesmall" )
var_2 = 0.25;
else
{
}
wait( var_2 * ( level.credits_speed / 22.5 ) );
}
}
delayfade( var_0 )
{
wait( var_0 - 7 );
self fadeovertime( 1.5 );
self.alpha = 0;
}
delaydestroy( var_0 )
{
wait( var_0 - 2 );
self destroy();
}
pulse_fx()
{
self.alpha = 0;
wait( level.credits_speed * 0.08 );
self fadeovertime( 0.2 );
self.alpha = 1;
self setpulsefx( 50, int( level.credits_speed * 0.6 * 1000 ), 500 );
}
addgap()
{
addspace();
addspace();
}
readncolumns( var_0, var_1, var_2, var_3 )
{
var_4 = [];
for ( var_5 = 0; var_5 < var_3; var_5++ )
var_4[var_5] = tablelookupbyrow( var_0, var_1, var_2 + var_5 );
return var_4;
}
readtriple( var_0, var_1, var_2 )
{
var_3[0] = tablelookupbyrow( var_0, var_1, var_2 );
var_3[1] = tablelookupbyrow( var_0, var_1, var_2 + 1 );
var_3[2] = tablelookupbyrow( var_0, var_1, var_2 + 2 );
return var_3;
}

899
maps/_credits_autogen.gsc Normal file
View File

@ -0,0 +1,899 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
initiw6credits()
{
maps\_credits::addcenterheading( &"CREDITS_DESIGNED_AND_DEVELOPED_BY_INFI" );
maps\_credits::addspacesmall();
maps\_credits::addcentertriple( &"CREDITS_AARON_EADY", &"CREDITS_ERIC_SPRAY", &"CREDITS_MICHAEL_ESPOSITO" );
maps\_credits::addcentertriple( &"CREDITS_AARON_SKILLMAN", &"CREDITS_ERIC_SU", &"CREDITS_MICHAEL_FRIEDRICH" );
maps\_credits::addcentertriple( &"CREDITS_AARON_WILLIAMS", &"CREDITS_ERIC_WIDNER", &"CREDITS_MICHAEL_GILARDI" );
maps\_credits::addcentertriple( &"CREDITS_ADAM_MICCIULLA", &"CREDITS_ERIC_WILLES", &"CREDITS_MICHAEL_MCCULLOUGH" );
maps\_credits::addcentertriple( &"CREDITS_ADAM_SMITH", &"CREDITS_ETHAN_HILEY", &"CREDITS_MICHAEL_RENNER" );
maps\_credits::addcentertriple( &"CREDITS_ADDISON_DEBOLT", &"CREDITS_GARETH_DAVIES", &"CREDITS_MIKE_BUTTON" );
maps\_credits::addcentertriple( &"CREDITS_ADRIENNE_MUNCY", &"CREDITS_GAVIN_PUGH", &"CREDITS_MIKE_DENNY" );
maps\_credits::addcentertriple( &"CREDITS_ALESSANDRO_NARDINI", &"CREDITS_GENNADY_BABICHENKO", &"CREDITS_MIKE_DIMEO" );
maps\_credits::addcentertriple( &"CREDITS_ALEX_KREEGER", &"CREDITS_GEOFF_D_HILL", &"CREDITS_MIKE_MAJERNIK" );
maps\_credits::addcentertriple( &"CREDITS_ALLEN_MOSER", &"CREDITS_GEOFFREY_HUDSON", &"CREDITS_MIKE_VELASQUEZ" );
maps\_credits::addcentertriple( &"CREDITS_AMBER_FEIRFEIL", &"CREDITS_GIANCARLO_SURLA", &"CREDITS_MITCHELL_SANBORN" );
maps\_credits::addcentertriple( &"CREDITS_AMELIE_LEROCHE", &"CREDITS_GIDEON_STOCEK", &"CREDITS_NATHAN_KINNEY" );
maps\_credits::addcentertriple( &"CREDITS_AMOS_HODGE", &"CREDITS_GINA_LOHMAN", &"CREDITS_NATHAN_RAUSCH" );
maps\_credits::addcentertriple( &"CREDITS_AMY_STEVENSON", &"CREDITS_GRADEN_MCCOOL", &"CREDITS_NATHAN_SILVERS" );
maps\_credits::addcentertriple( &"CREDITS_ANDRE_BEARDSLEYDUSETTE", &"CREDITS_GREG_LOPEZ", &"CREDITS_NATHANIEL_JORGENSON" );
maps\_credits::addcentertriple( &"CREDITS_ANDRE_TIRAN", &"CREDITS_HARI_KHALSA", &"CREDITS_NED_BUTTON" );
maps\_credits::addcentertriple( &"CREDITS_ANDREW_AYE", &"CREDITS_HOUGANT_CHEN", &"CREDITS_NEELANGSHU_KAR" );
maps\_credits::addcentertriple( &"CREDITS_ANDREW_OLSON", &"CREDITS_IAN_SILVERMAN", &"CREDITS_NGHIA_LAM" );
maps\_credits::addcentertriple( &"CREDITS_ANDY_BAYLESS", &"CREDITS_IFEDAYO_O_OJOMO", &"CREDITS_NICHOLAS_KLEIMAN" );
maps\_credits::addcentertriple( &"CREDITS_ANDY_MARCHAL", &"CREDITS_ISAAC_B_OWENS", &"CREDITS_NICHOLAS_STEVENSON" );
maps\_credits::addcentertriple( &"CREDITS_ANDY_WARWICK", &"CREDITS_IVAN_JANKOVIC", &"CREDITS_NICOLAS_LEBESSIS" );
maps\_credits::addcentertriple( &"CREDITS_ANET_HAMBARSUMIAN", &"CREDITS_JACK_OHARA", &"CREDITS_NORBERT_NACU" );
maps\_credits::addcentertriple( &"CREDITS_ANTHONY_BARNES", &"CREDITS_JACOB_VANENKEVORT", &"CREDITS_OLIN_GEORGESCU" );
maps\_credits::addcentertriple( &"CREDITS_ANTHONY_CAROTENUTO", &"CREDITS_JAKE_GEIGER", &"CREDITS_OMAR_GATICA" );
maps\_credits::addcentertriple( &"CREDITS_ANTHONY_RUBIN", &"CREDITS_JAKE_ROWELL", &"CREDITS_ORION_BROWN" );
maps\_credits::addcentertriple( &"CREDITS_ANTOINE_GERSANT", &"CREDITS_JAMES_CHEN", &"CREDITS_OSCAR_LOPEZ" );
maps\_credits::addcentertriple( &"CREDITS_ARNIE_SWEKEL", &"CREDITS_JAMES_MONROE", &"CREDITS_PAT_WILLIAMS" );
maps\_credits::addcentertriple( &"CREDITS_BEN_KUTCHER", &"CREDITS_JAMES_S_BRADFORD", &"CREDITS_PATRICK_HAGAR" );
maps\_credits::addcentertriple( &"CREDITS_BERND_KREIMEIER", &"CREDITS_JAMES_SINGER", &"CREDITS_PAUL_HAILE" );
maps\_credits::addcentertriple( &"CREDITS_BILL_BUCKLEY", &"CREDITS_JAMES_WAGNER", &"CREDITS_PAUL_INTERRANTE" );
maps\_credits::addcentertriple( &"CREDITS_BRANDON_RIGGS", &"CREDITS_JAMIE_PARENT", &"CREDITS_PAUL_KERBY" );
maps\_credits::addcentertriple( &"CREDITS_BRENDAN_WIUFF", &"CREDITS_JANICE_LOHR_KELLEY", &"CREDITS_PAUL_SANDLER" );
maps\_credits::addcentertriple( &"CREDITS_BRENTON_MATHEWS", &"CREDITS_JARED_DICKINSON", &"CREDITS_PAUL_VALDIVIA" );
maps\_credits::addcentertriple( &"CREDITS_BRIAN_BAKER", &"CREDITS_JASON_BARAJAS", &"CREDITS_PEDRO_FLORES" );
maps\_credits::addcentertriple( &"CREDITS_BRIAN_BRIGHT", &"CREDITS_JASON_GREENBERG", &"CREDITS_PETE_BLUMEL" );
maps\_credits::addcentertriple( &"CREDITS_BRIAN_HACKBARTH", &"CREDITS_JASON_HALL", &"CREDITS_PETE_DAY" );
maps\_credits::addcentertriple( &"CREDITS_BRIAN_MARVIN", &"CREDITS_JASON_HOLT", &"CREDITS_PETER_CHEN" );
maps\_credits::addcentertriple( &"CREDITS_BRIAN_MCDONALD", &"CREDITS_JASON_MAYNARD", &"CREDITS_PETER_MCCABE" );
maps\_credits::addcentertriple( &"CREDITS_BRIAN_OLES", &"CREDITS_JASON_UYEDA", &"CREDITS_PETER_PON" );
maps\_credits::addcentertriple( &"CREDITS_BRIAN_RAFFEL", &"CREDITS_JEANFRANCOIS_FORTIN", &"CREDITS_PHEBE_SUH" );
maps\_credits::addcentertriple( &"CREDITS_BRIAN_WHITE", &"CREDITS_JEFF_CURLEY", &"CREDITS_PHIL_SHEETS" );
maps\_credits::addcentertriple( &"CREDITS_BRITTANY_MAXEY", &"CREDITS_JEFF_DEGENHARDT", &"CREDITS_PRASHANTHAN_GUNASINGAM" );
maps\_credits::addcentertriple( &"CREDITS_BROOKE_STAMPFLI", &"CREDITS_JEFF_SWENTY", &"CREDITS_REYMUNDO_SIERRA" );
maps\_credits::addcentertriple( &"CREDITS_BUMJIN_LEE", &"CREDITS_JEFFREY_HEATH", &"CREDITS_RICK_ALVAREZ" );
maps\_credits::addcentertriple( &"CREDITS_BYEONG_PARK", &"CREDITS_JEFFREY_NEWQUIST", &"CREDITS_RICHARD_KRIEGLER" );
maps\_credits::addcentertriple( &"CREDITS_CALEB_TOMPLAIT", &"CREDITS_JEFFREY_SKUBAL", &"CREDITS_RICHARD_TAYLOR" );
maps\_credits::addcentertriple( &"CREDITS_CALEB_ZART", &"CREDITS_JEREMIAH_BYCHOWSKI", &"CREDITS_RILEY_THE_DOG" );
maps\_credits::addcentertriple( &"CREDITS_CALVIN_LIN", &"CREDITS_JEREMY_BLUMEL", &"CREDITS_RION_JONES" );
maps\_credits::addcentertriple( &"CREDITS_CANDICE_CAPEN", &"CREDITS_JEREMY_LUYTIES", &"CREDITS_ROB_T_MILLER" );
maps\_credits::addcentertriple( &"CREDITS_CARLOS_EMMANUEL_PINEDA", &"CREDITS_JEREMY_ROGERS", &"CREDITS_ROBERT_ESPINOZA" );
maps\_credits::addcentertriple( &"CREDITS_CHAD_FINDLEY", &"CREDITS_JESSE_BUCHANAN", &"CREDITS_ROBERT_LOVE" );
maps\_credits::addcentertriple( &"CREDITS_CHANCE_GLASCO", &"CREDITS_JESSE_SNYDER", &"CREDITS_ROBERTO_RODRIGUEZ" );
maps\_credits::addcentertriple( &"CREDITS_CHARLES_A_BERNSTEIN", &"CREDITS_JI_LI", &"CREDITS_ROCK_GROPPER" );
maps\_credits::addcentertriple( &"CREDITS_CHARLES_WEISS", &"CREDITS_JIHYUN_JULIA_SONG", &"CREDITS_RODRIGO_SUAREZ" );
maps\_credits::addcentertriple( &"CREDITS_CHARLES_P_MORROW", &"CREDITS_JIN_SONG", &"CREDITS_RON_DEL_ROSARIO" );
maps\_credits::addcentertriple( &"CREDITS_CHARNJIT_BANSI", &"CREDITS_JIWON_SON", &"CREDITS_ROXANA_BRACAMONTES" );
maps\_credits::addcentertriple( &"CREDITS_CHRIS_BARNES", &"CREDITS_JOCELYN_CHEW", &"CREDITS_RULON_RAYMOND" );
maps\_credits::addcentertriple( &"CREDITS_CHRIS_EGERT", &"CREDITS_JOE_KIRCHOFF", &"CREDITS_RYAN_BROOKS" );
maps\_credits::addcentertriple( &"CREDITS_CHRISTOPHER_R_FOSTER", &"CREDITS_JOE_PEASE", &"CREDITS_RYAN_BURNETT" );
maps\_credits::addcentertriple( &"CREDITS_CHRIS_LINN", &"CREDITS_JOEL_JEWETT", &"CREDITS_RYAN_BUTTS" );
maps\_credits::addcentertriple( &"CREDITS_CHRIS_MYERS", &"CREDITS_JOEL_MCDONALD", &"CREDITS_RYAN_DANZ" );
maps\_credits::addcentertriple( &"CREDITS_CHRIS_PARISE", &"CREDITS_JOE_CECOT", &"CREDITS_RYAN_HUMMER" );
maps\_credits::addcentertriple( &"CREDITS_CHRIS_PIERRO", &"CREDITS_JOHN_BOJORQUEZ", &"CREDITS_RYAN_PALSER" );
maps\_credits::addcentertriple( &"CREDITS_CHRIS_SELF", &"CREDITS_JOHN_DOBBIE", &"CREDITS_RYAN_RIES" );
maps\_credits::addcentertriple( &"CREDITS_CHRIS_STAPLES", &"CREDITS_JOHN_GOLDSWORTHY", &"CREDITS_RYAN_SMITH" );
maps\_credits::addcentertriple( &"CREDITS_CHRISSY_ARYA", &"CREDITS_JOHN_HARRIES", &"CREDITS_RYNE_PETERSEN" );
maps\_credits::addcentertriple( &"CREDITS_CHRISTINA_PALACIOS", &"CREDITS_JOHN_L_SINCLAIR", &"CREDITS_SARAH_KARCZEWSKI" );
maps\_credits::addcentertriple( &"CREDITS_CHRISTINA_SEAMAN", &"CREDITS_JOHN_WEBB", &"CREDITS_SCOTT_LINDSLEY" );
maps\_credits::addcentertriple( &"CREDITS_CHRISTOPHER_BEESE", &"CREDITS_JOHNNY_OW", &"CREDITS_SCOTT_PEASE" );
maps\_credits::addcentertriple( &"CREDITS_CHRISTOPHER_GEORGE", &"CREDITS_JOLYON_MYERS", &"CREDITS_SEAN_BYERS" );
maps\_credits::addcentertriple( &"CREDITS_CHRISTOPHER_HARTMANN", &"CREDITS_JON_BAILEY", &"CREDITS_SEAN_THURLER" );
maps\_credits::addcentertriple( &"CREDITS_CHRISTOPHER_LAI", &"CREDITS_JON_PORTER", &"CREDITS_SEBASTIEN_STLAURENT" );
maps\_credits::addcentertriple( &"CREDITS_CHRISTOPHER_MANSAVAGE", &"CREDITS_JON_ZUK", &"CREDITS_SERGIO_GIL" );
maps\_credits::addcentertriple( &"CREDITS_CHRISTOPHER_OLSEN", &"CREDITS_JONATHAN_GRAHAM", &"CREDITS_SEROZH_SARKISYAN" );
maps\_credits::addcentertriple( &"CREDITS_CHRISTOPHER_REED", &"CREDITS_JONATHAN_KEISER", &"CREDITS_SEUNG_YOUNG_LEE" );
maps\_credits::addcentertriple( &"CREDITS_CHRISTOPHER_SHEPHERD", &"CREDITS_JONATHAN_STRONG", &"CREDITS_SHANE_CALNAN" );
maps\_credits::addcentertriple( &"CREDITS_CLARK_WEN", &"CREDITS_JORGE_CORONA", &"CREDITS_SHANNON_ANDERSEN" );
maps\_credits::addcentertriple( &"CREDITS_CLAUDIA_FRANCO", &"CREDITS_JORDAN_HIRSH", &"CREDITS_SHAWN_PEEPLES" );
maps\_credits::addcentertriple( &"CREDITS_CODY_PIERSON", &"CREDITS_JOSEPH_KOBERSTEIN", &"CREDITS_SHAWN_WIEDERHOEFT" );
maps\_credits::addcentertriple( &"CREDITS_COLIN_CRENSHAW", &"CREDITS_SPENCER_NIGL", &"CREDITS_SIDDHARTH_ACHREKAR" );
maps\_credits::addcentertriple( &"CREDITS_CONNOR_JEWETT", &"CREDITS_JOSH_LORD", &"CREDITS_SIMON_COURNOYER" );
maps\_credits::addcentertriple( &"CREDITS_COREY_TEBLUM", &"CREDITS_JOSHDAVID_ISAACSON", &"CREDITS_SIMON_EBEJER" );
maps\_credits::addcentertriple( &"CREDITS_CURTI_C_SMITH", &"CREDITS_JOSHUA_TERRY", &"CREDITS_SIMON_KO" );
maps\_credits::addcentertriple( &"CREDITS_DALLAS_MIDDLETON", &"CREDITS_JULIAN_LUO", &"CREDITS_SIMON_PARKINSON" );
maps\_credits::addcentertriple( &"CREDITS_DAN_KRAMER", &"CREDITS_JUN_CHANG", &"CREDITS_SIMON_TAPPING" );
maps\_credits::addcentertriple( &"CREDITS_DAN_MERBOTH", &"CREDITS_JUSTIN_HARRIS", &"CREDITS_SIVARAK_KAI_TAWAROTIP" );
maps\_credits::addcentertriple( &"CREDITS_DAN_SAVAGE", &"CREDITS_JUSTIN_NEGRETE", &"CREDITS_SKYE_KANG" );
maps\_credits::addcentertriple( &"CREDITS_DAN_TAFARO", &"CREDITS_JUSTIN_ROTE", &"CREDITS_SKYLER_CLARK" );
maps\_credits::addcentertriple( &"CREDITS_DAN_VONDRAK", &"CREDITS_JUSTIN_SUPERTY", &"CREDITS_STE_CORK" );
maps\_credits::addcentertriple( &"CREDITS_DANA_DE_LALLA", &"CREDITS_JUSTIN_WILDER", &"CREDITS_STEPHEN_BROWN" );
maps\_credits::addcentertriple( &"CREDITS_DANIEL_EDWARDS", &"CREDITS_KARL_DROWN", &"CREDITS_STEPHEN_JENKINS" );
maps\_credits::addcentertriple( &"CREDITS_DANIEL_FETTER", &"CREDITS_KATHLEEN_M_MARTY", &"CREDITS_STEPHEN_MILLER" );
maps\_credits::addcentertriple( &"CREDITS_DANIEL_GAVRIN", &"CREDITS_KATHY_BOCK", &"CREDITS_STEPHEN_OKASAKI" );
maps\_credits::addcentertriple( &"CREDITS_DANIEL_NELSON", &"CREDITS_KATIE_SABIN", &"CREDITS_STEVE_RAFFEL" );
maps\_credits::addcentertriple( &"CREDITS_DANIEL_ORZULAK", &"CREDITS_KEITH__MORTON", &"CREDITS_STEVE_TAYLOR" );
maps\_credits::addcentertriple( &"CREDITS_DANIEL_SCOTT_MENARD", &"CREDITS_KEITH_MATEJKA", &"CREDITS_STEVEN_ACKRICH" );
maps\_credits::addcentertriple( &"CREDITS_DANIEL_WAPNER", &"CREDITS_KELSON_RAFFEL", &"CREDITS_STEVEN_GIESLER" );
maps\_credits::addcentertriple( &"CREDITS_DARYL_KIMOTO", &"CREDITS_KEN_MOODIE", &"CREDITS_STEVEN_HOLMES" );
maps\_credits::addcentertriple( &"CREDITS_DASH_NASH", &"CREDITS_KEVIN_CHUNG", &"CREDITS_STEVEN_MYERS" );
maps\_credits::addcentertriple( &"CREDITS_DAVE_CURD", &"CREDITS_KEVIN_LONG", &"CREDITS_STUART_WIEGERT" );
maps\_credits::addcentertriple( &"CREDITS_DAVE_OSEI", &"CREDITS_KEVIN_REED", &"CREDITS_SUNGIN_PAIK" );
maps\_credits::addcentertriple( &"CREDITS_DAVE_ROWE", &"CREDITS_KRISTIN_GALLAGHER", &"CREDITS_SUSAN_DEVENERO" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_C_SAVAGE", &"CREDITS_KRISTINA_ADELMEYER", &"CREDITS_SUZANNE_WHELPLEY" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_FIFIELD", &"CREDITS_KYLE_AUDICK", &"CREDITS_SYLVIA_MILLER" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_GULISANO", &"CREDITS_KYLE_MCKISIC", &"CREDITS_TABARI_JEFFRIES" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_HAUPTMAN", &"CREDITS_KYLE_STEPHENS", &"CREDITS_TAEHOON_OH" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_HERNANDEZ", &"CREDITS_LEE_ROSS", &"CREDITS_TED_THELEN" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_JOHNSON", &"CREDITS_LEI_YANG", &"CREDITS_TERRAN_CASEY" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_MICKNER", &"CREDITS_LEN_WHITE", &"CREDITS_TERRY_D_BARNETT_II" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_ROSE", &"CREDITS_LISA_DAVIES", &"CREDITS_THEERAPOL_SRISUPHAN" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_SCHORN", &"CREDITS_LISA_STONE", &"CREDITS_THOMAS_HAMILTON" );
maps\_credits::addcentertriple( &"CREDITS_DEAN_SERIO", &"CREDITS_LUCAS_MEYER", &"CREDITS_THOMAS_SZAKOLCZAY" );
maps\_credits::addcentertriple( &"CREDITS_DEREK_LARSON", &"CREDITS_LUCY_ANDONIAN", &"CREDITS_THOMAS_WELLS" );
maps\_credits::addcentertriple( &"CREDITS_DEREK_RACCA", &"CREDITS_LUKE_VERNON", &"CREDITS_THOMAS_WRIGHT" );
maps\_credits::addcentertriple( &"CREDITS_DEVIN_CURRY", &"CREDITS_MARIO_GIOMBI", &"CREDITS_TIM_STASICA" );
maps\_credits::addcentertriple( &"CREDITS_DEVON_FAY", &"CREDITS_MARIO_SANCHEZ", &"CREDITS_TIM_UTTECH" );
maps\_credits::addcentertriple( &"CREDITS_DONGWOO_SHIN", &"CREDITS_MARK_DERIDDER", &"CREDITS_TIMOTHY_MCGRATH" );
maps\_credits::addcentertriple( &"CREDITS_DONOVAN_KEELE", &"CREDITS_MARK_GANUS", &"CREDITS_TJ_STAMM" );
maps\_credits::addcentertriple( &"CREDITS_DOUG_SMITH", &"CREDITS_MARK_KILBORN", &"CREDITS_TOBIAS_STROMVALL" );
maps\_credits::addcentertriple( &"CREDITS_DUNCAN_ADAMSON", &"CREDITS_MARK_KORNKVEN", &"CREDITS_TOM_DE_LA_GARZA" );
maps\_credits::addcentertriple( &"CREDITS_DWIGHT_LUETSCHER", &"CREDITS_MARK_RUBIN", &"CREDITS_TOM_PARKER" );
maps\_credits::addcentertriple( &"CREDITS_EDWARD_HARMER", &"CREDITS_MARKUS_PEEKNA", &"CREDITS_TONY_MAGRO" );
maps\_credits::addcentertriple( &"CREDITS_ELIZABETH_TIRAN", &"CREDITS_MARYANN_G_KNOKE", &"CREDITS_TRISTAN_BANKS" );
maps\_credits::addcentertriple( &"CREDITS_ELPIDIO_LOVERANES", &"CREDITS_MASIS_MAX_DAVIDIAN", &"CREDITS_VELINDA_REYES" );
maps\_credits::addcentertriple( &"CREDITS_EMILY_KUYKENDALL", &"CREDITS_MATT__CANALE", &"CREDITS_VISHAL_KASHYAP" );
maps\_credits::addcentertriple( &"CREDITS_EMILY_SHERMAN", &"CREDITS_MATT__MASON", &"CREDITS_WALLACE_HUANG" );
maps\_credits::addcentertriple( &"CREDITS_EMMANUEL_APILADO", &"CREDITS_MATT_PINKSTON", &"CREDITS_WILLIAM_CARANI" );
maps\_credits::addcentertriple( &"CREDITS_ERIC_BIESSMAN", &"CREDITS_MATTHEW_EVANS", &"CREDITS_WILLIAM_PETROSKY" );
maps\_credits::addcentertriple( &"CREDITS_ERIC_FEINBERG", &"CREDITS_MAZEN_ZAIYA", &"CREDITS_YAN_OSTRETSOV" );
maps\_credits::addcentertriple( &"CREDITS_ERIC_FELDMAN", &"CREDITS_MEGAN_PARKER", &"CREDITS_YOUNG_KIM" );
maps\_credits::addcentertriple( &"CREDITS_ERIC_MCDANIEL", &"CREDITS_MELISSA_MULHALL", &"CREDITS_YURY_NEDELIN" );
maps\_credits::addcentertriple( &"CREDITS_ERIC_MILOTA", &"CREDITS_MELISSA_SAITO", &"CREDITS_ZACH_PARR" );
maps\_credits::addcentertriple( &"CREDITS_ERIC_SCHLAUTMAN", &"CREDITS_MICHAEL_BOON", &"CREDITS_ZACHARY_VOLKER" );
maps\_credits::addcentertriple( &"CREDITS_ERIC_SCHMIDT", &"CREDITS_MICHAEL_CHANG_GUMMELT", &"CREDITS_ZACK_COOPER" );
maps\_credits::addcentertriple( undefined, &"CREDITS_MICHAEL_EKBERG", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_ADDITIONAL_DESIGN_AND_DEVELOPM" );
maps\_credits::addcentertriple( &"CREDITS_ALEX_HAMPTON", &"CREDITS_GILBERT_NGO", &"CREDITS_PATRICK_CONNOLE" );
maps\_credits::addcentertriple( &"CREDITS_ALLEN_FREESE", &"CREDITS_HUNTER_STANLEY", &"CREDITS_PEDRAM_JAVIDPOUR" );
maps\_credits::addcentertriple( &"CREDITS_ATTILA_ZALANYI", &"CREDITS_JAMES_FIORELLA", &"CREDITS_RANDY_GUILLOTE" );
maps\_credits::addcentertriple( &"CREDITS_BRAD_SANTOS", &"CREDITS_JEFFREY_SCHANZ", &"CREDITS_RICHARD_FARRELLY" );
maps\_credits::addcentertriple( &"CREDITS_BRIAN_BIBBO", &"CREDITS_JODY_COGLIANESE", &"CREDITS_RICHARD_LOPEZ" );
maps\_credits::addcentertriple( &"CREDITS_BRIAN_BLOOM", &"CREDITS_JORDAN_SARIEGO", &"CREDITS_RONN_LEFEUVRE" );
maps\_credits::addcentertriple( &"CREDITS_BRYAN_KUHN", &"CREDITS_JOSE_MIRANDA", &"CREDITS_RYAN_GARIGLIANO" );
maps\_credits::addcentertriple( &"CREDITS_CODY_MALACH", &"CREDITS_KEVIN_DEBOLT", &"CREDITS_SACHA_BEST" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_SCHONEVELD", &"CREDITS_MATTHEW_TOVAR", &"CREDITS_SENGJOON_SONG" );
maps\_credits::addcentertriple( &"CREDITS_GARY_JESDANUN", &"CREDITS_MICHAEL_BAHURINSKY", &"CREDITS_TRAVIS_CHEN" );
maps\_credits::addcentertriple( &"CREDITS_GEOFFREY__EVANS", &"CREDITS_MIKE_CARLYLE", &"CREDITS_YARON_LONEWOLF_LEVI" );
maps\_credits::addcentertriple( &"CREDITS_GIL_DORON", &"CREDITS_MIKE_FLETCHER", &"CREDITS_YIPAN_PAN" );
maps\_credits::addcentertriple( undefined, &"CREDITS_NAKIA_HARRIS", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_ADDITIONAL_QUALITY_ASSURANCE" );
maps\_credits::addcentertriple( &"CREDITS_ADRIAN_MONTOYA", &"CREDITS_ENRIQUE_SANCHEZ", &"CREDITS_MICHAEL_MILLER" );
maps\_credits::addcentertriple( &"CREDITS_ADRIAN_SANDOVAL", &"CREDITS_ERIC_LIFFERS", &"CREDITS_MICHAEL_ROBINSON" );
maps\_credits::addcentertriple( &"CREDITS_ALEX_CARRACINO", &"CREDITS_IRMA_WARD", &"CREDITS_OBED_NAVAS" );
maps\_credits::addcentertriple( &"CREDITS_ALEX_JACOBSON", &"CREDITS_JAMES_GUTIERREZ", &"CREDITS_PACO_ERSKINE" );
maps\_credits::addcentertriple( &"CREDITS_ALEX_WELDON", &"CREDITS_JAMES_WATERS", &"CREDITS_PATRICK_MCGINNIS" );
maps\_credits::addcentertriple( &"CREDITS_ANDREW_BAXTER", &"CREDITS_JASON_BOLES", &"CREDITS_PATRICK_THOMSEN" );
maps\_credits::addcentertriple( &"CREDITS_ANDREW_RUMER", &"CREDITS_JERRY_CORTES", &"CREDITS_PAUL_HUNT" );
maps\_credits::addcentertriple( &"CREDITS_ANN_SMITH", &"CREDITS_JESSICA_MILLER", &"CREDITS_PETER_NUOFFER" );
maps\_credits::addcentertriple( &"CREDITS_ANTHONY_INTERRANTE", &"CREDITS_JUSTIN_SCHWARTZ", &"CREDITS_ROBERT_MERCADO" );
maps\_credits::addcentertriple( &"CREDITS_ATHENA_ABDO", &"CREDITS_KEITH_DORAN", &"CREDITS_ROBERT_WAI" );
maps\_credits::addcentertriple( &"CREDITS_BENJAMIN_OBRIEN", &"CREDITS_KEITH_LEOPOLD", &"CREDITS_RONALD_HINES" );
maps\_credits::addcentertriple( &"CREDITS_BRANT_KORTMAN", &"CREDITS_KEVIN_NORWOOD", &"CREDITS_ROMULO_PETE_PEDROZA" );
maps\_credits::addcentertriple( &"CREDITS_BRIAN_CARL", &"CREDITS_KRISTOPHER_GREENE", &"CREDITS_RUY_PENA" );
maps\_credits::addcentertriple( &"CREDITS_BRIAN_DIONNE", &"CREDITS_KRYSTLE_WALLIS", &"CREDITS_SCOTT_BERGIN" );
maps\_credits::addcentertriple( &"CREDITS_COLIN_OVERHOLT", &"CREDITS_KYLE_COLLIER", &"CREDITS_STEPHANIE_LANGWELL" );
maps\_credits::addcentertriple( &"CREDITS_CORY_ALDRIDGE", &"CREDITS_LINDSEY_ROOT", &"CREDITS_THADDEUS_PHILLIPS" );
maps\_credits::addcentertriple( &"CREDITS_DAGMAR_JANTZEN", &"CREDITS_MARIA_MORALES", &"CREDITS_TRAVIS_RAMON" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_DE_LA_TORRE", &"CREDITS_MARK_RUZICKA", &"CREDITS_VALENTIN_CAIN" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_SCHULTZ", &"CREDITS_MATHEW_JONES", &"CREDITS_VERONICA_FLINT" );
maps\_credits::addcentertriple( &"CREDITS_DREW_SURMENIAN", &"CREDITS_MEGHAN_HOUSE", &"CREDITS_VINCENT_COUCH" );
maps\_credits::addspacesmall();
maps\_credits::addspacesmall();
maps\_credits::addcenterheading( &"CREDITS_ADDITIONAL_SUPPORT" );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_HIGH_MOON_STUDIOS" );
maps\_credits::addcentertriple( &"CREDITS_ALFONSO_FONZY_ELENES_JR", &"CREDITS_JEFFREY_FROEHLICH", &"CREDITS_MATTHEW_LIM" );
maps\_credits::addcentertriple( &"CREDITS_ANDREW_ZAFERAKIS", &"CREDITS_JOSHUA_KROLAK", &"CREDITS_PETER_DELLA_PENNA" );
maps\_credits::addcentertriple( &"CREDITS_DAN_MULKIEWICZ", &"CREDITS_JUNKO_TAKASAWA", &"CREDITS_PAULINA_BEAUROYRE" );
maps\_credits::addcentertriple( &"CREDITS_JARKKO_HAEKKINEN", &"CREDITS_KEITH_STAINES", &"CREDITS_ROBERT_MIDLIL" );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_TREYARCH" );
maps\_credits::addcentertriple( &"CREDITS_CHAD_PROCTOR", &"CREDITS_JAY_PURYEAR", &"CREDITS_MARCUS_GOODEY" );
maps\_credits::addcentertriple( &"CREDITS_DIMITAR_LAZAROV", &"CREDITS_JOSE_DORAN", &"CREDITS_MICHAEL_GEVORKIAN" );
maps\_credits::addcentertriple( &"CREDITS_EJI_YARED", &"CREDITS_LEI_HU", &"CREDITS_POKEE_CHAN" );
maps\_credits::addcentertriple( &"CREDITS_GREG_ZHENG", &"CREDITS_LEO_ZIDE", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_NERVE_SOFTWARE" );
maps\_credits::addcentertriple( &"CREDITS_ALAN_FLORES", &"CREDITS_ETHAN_MCCAUGHEY", &"CREDITS_JAMES_GRESKO" );
maps\_credits::addcentertriple( &"CREDITS_CHRIS_EDMISTON", &"CREDITS_SHAWN_SPETCH", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_CERTAIN_AFFINITY_INC" );
maps\_credits::addcentertriple( &"CREDITS_ALEX_CHRISMAN", &"CREDITS_JAVIER_DE_JESUS", &"CREDITS_RAY_ARRIAGA" );
maps\_credits::addcentertriple( &"CREDITS_ANDREW_MORRIS", &"CREDITS_JOHN_GRUBNER", &"CREDITS_RICK_KNOX" );
maps\_credits::addcentertriple( &"CREDITS_BRAD_JEANSONNE", &"CREDITS_JOSH_POWERS", &"CREDITS_ROLF_MOHR" );
maps\_credits::addcentertriple( &"CREDITS_BRETT_ACUFF", &"CREDITS_JOSH_TYRELL", &"CREDITS_RYAN_FOX" );
maps\_credits::addcentertriple( &"CREDITS_BRYAN_MOSS", &"CREDITS_KYLE_UBERMAN", &"CREDITS_RYAN_GITTER" );
maps\_credits::addcentertriple( &"CREDITS_CHANCE_DEAN", &"CREDITS_LAYNE_JOHNSON", &"CREDITS_SCOTT_DOWNEY" );
maps\_credits::addcentertriple( &"CREDITS_DAN_VALEY", &"CREDITS_LORI_ZAWADA", &"CREDITS_SCOTT_LEPANEN" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_ANCIRA", &"CREDITS_MARK_ANDERSON", &"CREDITS_SCOTT_MACLEAN" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_PROUT", &"CREDITS_MARK_FLETCHER", &"CREDITS_SCOTT_STEVENS" );
maps\_credits::addcentertriple( &"CREDITS_DEAN_MCCALL", &"CREDITS_MARK_HORONY", &"CREDITS_SEOK_KI_KWON" );
maps\_credits::addcentertriple( &"CREDITS_GARRET_BREAUX", &"CREDITS_MAX_HOBERMAN", &"CREDITS_THOMAS_WHITLOW" );
maps\_credits::addcentertriple( &"CREDITS_GEOFF_TAYLOR", &"CREDITS_MIKE_CLOPPER", &"CREDITS_TOM_POTTER" );
maps\_credits::addcentertriple( &"CREDITS_JAMES_WAHLQUIST", &"CREDITS_NIKKI_TANGTIPHONGKUL", &"CREDITS_TOMMY_SPAMPINATO" );
maps\_credits::addcentertriple( &"CREDITS_JASON_BORNE", &"CREDITS_PATRICK_BERGMAN", &"CREDITS_TYLER_JOHNSTON" );
maps\_credits::addcentertriple( undefined, &"CREDITS_PHIL_WATTENBARGER", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_DEMONWARE" );
maps\_credits::addcentertriple( &"CREDITS_ADAM_TALSMA", &"CREDITS_EOIN_OFEARGHAIL", &"CREDITS_NEIL_WALSH" );
maps\_credits::addcentertriple( &"CREDITS_ADRIAN_OLIVER", &"CREDITS_ERIK_NIKLAS", &"CREDITS_NIC_NERO" );
maps\_credits::addcentertriple( &"CREDITS_ALEX_COUTUREBEIL", &"CREDITS_FIONA_WHELAN", &"CREDITS_NIC_ROLAND" );
maps\_credits::addcentertriple( &"CREDITS_ALEX_YUAN", &"CREDITS_FRANCISCO_GARCIA_MIRANDA", &"CREDITS_NICOLA_COLLERAN" );
maps\_credits::addcentertriple( &"CREDITS_ALLAN_KUMKA", &"CREDITS_GARRETT_LYNCH", &"CREDITS_NIKOLA_RADOICIC" );
maps\_credits::addcentertriple( &"CREDITS_ALLEN_HSIEH", &"CREDITS_GARY_QUAN", &"CREDITS_OTTO_YIU" );
maps\_credits::addcentertriple( &"CREDITS_AMY_SMITH", &"CREDITS_GARY_RAFTER", &"CREDITS_PADRAIC_HALLINAN" );
maps\_credits::addcentertriple( &"CREDITS_ANDR_CARON", &"CREDITS_GERALD_MAGNUSSON", &"CREDITS_PAN_YE" );
maps\_credits::addcentertriple( &"CREDITS_ANDREW_AGNO", &"CREDITS_GLEN_POWLEY", &"CREDITS_PARVINDER_SINGH_GREWAL" );
maps\_credits::addcentertriple( &"CREDITS_ANGEL_RAMBOI", &"CREDITS_GORDAN_SCHNEIDER", &"CREDITS_PATRICK_BARRINGTON" );
maps\_credits::addcentertriple( &"CREDITS_ANNIE_BENNETT", &"CREDITS_GORDON_KLOK", &"CREDITS_PATRICK_MAMAID" );
maps\_credits::addcentertriple( &"CREDITS_ANTOINE_LEPINE", &"CREDITS_GRAEME_HUMPHRIES", &"CREDITS_PAULINE_BYRNE" );
maps\_credits::addcentertriple( &"CREDITS_ARTHUR_GREEN", &"CREDITS_GRAHAM_CAMPBELL", &"CREDITS_PEDRO_CALCAO" );
maps\_credits::addcentertriple( &"CREDITS_ARTIOM_LUNEV", &"CREDITS_GREG_SMITH", &"CREDITS_PERRY_GREWAL" );
maps\_credits::addcentertriple( &"CREDITS_BEN_CRIBB", &"CREDITS_GUSTAVO_BARATTO", &"CREDITS_PETER_KIESER" );
maps\_credits::addcentertriple( &"CREDITS_BOTI_BERES", &"CREDITS_HAMZA_FARAN", &"CREDITS_PIOTR_SIEKLUCKI" );
maps\_credits::addcentertriple( &"CREDITS_BRENDAN_DILLON", &"CREDITS_HENRY_PRECHEUR", &"CREDITS_QIONG_TONY_YANG" );
maps\_credits::addcentertriple( &"CREDITS_BRENDAN_FIELDS", &"CREDITS_HUGH_NOWLAN", &"CREDITS_RALUCA_IVAN" );
maps\_credits::addcentertriple( &"CREDITS_BRIAN_MCGEOGH", &"CREDITS_IRINA_ZAUGOLNIKOVA", &"CREDITS_RASHID_BHAMJEE" );
maps\_credits::addcentertriple( &"CREDITS_BRUNO_FURTADO", &"CREDITS_JAIME_BUELTA", &"CREDITS_RICHARD_DELANEY" );
maps\_credits::addcentertriple( &"CREDITS_CARL_STUBENS", &"CREDITS_JAKE_XU", &"CREDITS_RICK_BARZILLI" );
maps\_credits::addcentertriple( &"CREDITS_CATALINA_CICIOIU", &"CREDITS_JASON_HAGAO_WEI", &"CREDITS_ROB_MCADOO" );
maps\_credits::addcentertriple( &"CREDITS_CATHAL_CRONIN", &"CREDITS_JEFF_MILLS", &"CREDITS_ROBERT_KEIGHTLEY" );
maps\_credits::addcentertriple( &"CREDITS_CATHAL_MCGUIRE", &"CREDITS_JRMIE_BETHMONT", &"CREDITS_ROMAN_LISAGOR" );
maps\_credits::addcentertriple( &"CREDITS_CATHERINE_MCCARTHY", &"CREDITS_JOHN_ALLEN", &"CREDITS_RUAIDHR_POWER" );
maps\_credits::addcentertriple( &"CREDITS_CHASE_VIGAR", &"CREDITS_JOHN_HAMILL", &"CREDITS_RUI_JIANG" );
maps\_credits::addcentertriple( &"CREDITS_CHRIS_REYNOLDS", &"CREDITS_JOHN_KIRK", &"CREDITS_RYAN_BLAZECKA" );
maps\_credits::addcentertriple( &"CREDITS_CHRISTIAN_FLODIHN", &"CREDITS_JORDAN_TAEKEMA", &"CREDITS_RYAN_HUNTER" );
maps\_credits::addcentertriple( &"CREDITS_CHRISTIE_WILSON", &"CREDITS_JOSEPH_POWER", &"CREDITS_SEAN_ODONNELL" );
maps\_credits::addcentertriple( &"CREDITS_CHRISTOPHER_MCKNIGHT", &"CREDITS_JOSH_PLOUFFE", &"CREDITS_SEAN_OSULLIVAN" );
maps\_credits::addcentertriple( &"CREDITS_CHRISTOPHER_MUELLER", &"CREDITS_JOYCE_WU", &"CREDITS_SHAHAB_NAZEMI" );
maps\_credits::addcentertriple( &"CREDITS_COLIN_COX", &"CREDITS_KALE_STEDMAN", &"CREDITS_SINAD_DEVEREAUX" );
maps\_credits::addcentertriple( &"CREDITS_COLIN_DEASY", &"CREDITS_KATHRYN_BAKER", &"CREDITS_SIOBHN_GOLDEN" );
maps\_credits::addcentertriple( &"CREDITS_COLLEEN_KEYLAND", &"CREDITS_KULBIR_SINGH", &"CREDITS_STEFAN_REIMER" );
maps\_credits::addcentertriple( &"CREDITS_CONOR_HENNESSY", &"CREDITS_LEE_CASH", &"CREDITS_STEFFEN_HIGEL" );
maps\_credits::addcentertriple( &"CREDITS_CRAIG_MCINNES", &"CREDITS_LIAM_MACINNES", &"CREDITS_STEPHANE_DUDZINSKI" );
maps\_credits::addcentertriple( &"CREDITS_DAMIEN_MARSHALL", &"CREDITS_LISA_REILLY", &"CREDITS_STEPHANIE_CATES" );
maps\_credits::addcentertriple( &"CREDITS_DANIEL_COBBAN", &"CREDITS_LUKE_BURDEN", &"CREDITS_STEPHEN_OSULLIVAN" );
maps\_credits::addcentertriple( &"CREDITS_DANIEL_KEOHANE", &"CREDITS_MACIEJ_ANCZURA", &"CREDITS_STUART_FOX" );
maps\_credits::addcentertriple( &"CREDITS_DARA_PRICE", &"CREDITS_MALCOLM_DOWSE", &"CREDITS_TAO_SU" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_BRENNAN", &"CREDITS_MARIAN_CULLEN", &"CREDITS_TENDAYI_MAWUSHE" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_BALLANO_FERNANDEZ", &"CREDITS_MARIN_NELSON", &"CREDITS_THEORAN_MUTIA" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_FALLOON", &"CREDITS_MARK_MCGREE", &"CREDITS_THOMAS_DRYER" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_LIN", &"CREDITS_MARTIN_CLARKE", &"CREDITS_THOMAS_SHAW" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_LYNAM", &"CREDITS_MARTIN_PELIKAN", &"CREDITS_TIM_CZERNIAK" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_YUCKIN", &"CREDITS_MATTHEW_EDWARDS", &"CREDITS_TIM_PATTERSON" );
maps\_credits::addcentertriple( &"CREDITS_DAVIDE_ROMANI", &"CREDITS_MATTHEW_SAWASY", &"CREDITS_TONY_KELLY" );
maps\_credits::addcentertriple( &"CREDITS_DEMIAN_BRECHT", &"CREDITS_MICHAEL_COLLINS", &"CREDITS_TRAVIS_KAY" );
maps\_credits::addcentertriple( &"CREDITS_DMYTRO_DYACHUK", &"CREDITS_MICHAEL_EDWARDS", &"CREDITS_TYLER_DIXON" );
maps\_credits::addcentertriple( &"CREDITS_DUNCAN_MCNAB", &"CREDITS_MICHELE_MAZZUCCO", &"CREDITS_VERA_LIU" );
maps\_credits::addcentertriple( &"CREDITS_EDWARD_BAKER", &"CREDITS_MIKE_WHITTY", &"CREDITS_VLADIMIR_RYZHOV" );
maps\_credits::addcentertriple( &"CREDITS_ELI_KAZMIROUK", &"CREDITS_MIROSLAW_BARAN", &"CREDITS_VLADISLAV_TITOV" );
maps\_credits::addcentertriple( &"CREDITS_ELLIE_FROST", &"CREDITS_MORGAN_BRICKLEY", &"CREDITS_WENDY_ROBILLARD" );
maps\_credits::addcentertriple( &"CREDITS_EMMA_MCBREEN", &"CREDITS_NADIA_ALRAMLI", &"CREDITS_YASCHA_FRIESEN" );
maps\_credits::addcentertriple( &"CREDITS_EMMANUEL_STONE", &"CREDITS_NATALIE_MURRAY", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_FREESTYLE_GAMES" );
maps\_credits::addcentertriple( &"CREDITS_ALEX_BENYON", &"CREDITS_JENS_RESTEMEIER", &"CREDITS_NEIL_DODD" );
maps\_credits::addcentertriple( &"CREDITS_DAMIAN_FURLONG", &"CREDITS_JOE_LENTON", &"CREDITS_NEIL_WATTS" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_BURKE", &"CREDITS_JONATHAN_NAPIER", &"CREDITS_NEIL_WIGFIELD" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_COSTELLO", &"CREDITS_KATE_TAYLOR", &"CREDITS_PATRIK_MCCORMACK" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_OSBOURN", &"CREDITS_MARK_JONES", &"CREDITS_PAUL_GARTLAND" );
maps\_credits::addcentertriple( &"CREDITS_GABE_THE_DOG", &"CREDITS_MATT_SANDERS", &"CREDITS_PETE_ODONNELL" );
maps\_credits::addcentertriple( &"CREDITS_GARETH_MORRISON", &"CREDITS_MICHAEL_RUTTER", &"CREDITS_PHIL_HINDLE" );
maps\_credits::addcentertriple( &"CREDITS_JAMIE_JACKSON", &"CREDITS_MIKE_MCLAFFERTY", &"CREDITS_PHILIPP_GEYER" );
maps\_credits::addcentertriple( &"CREDITS_JASON_PICKTHALL", &"CREDITS_NADIR_ALRAWI", &"CREDITS_ROBERT_DUTTON" );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_BEACHHEAD_STUDIOS" );
maps\_credits::addcentertriple( &"CREDITS_AARON_EATON", &"CREDITS_ERIK_MELEN", &"CREDITS_MELISA_ANGULOJAVIER" );
maps\_credits::addcentertriple( &"CREDITS_AARON_LEE", &"CREDITS_FELIX_GALLO", &"CREDITS_MICHAEL_BLANCHARD" );
maps\_credits::addcentertriple( &"CREDITS_ALEXANDER_AMERINE", &"CREDITS_GIZ_GEWIRTZ", &"CREDITS_MICHAEL_GESNER" );
maps\_credits::addcentertriple( &"CREDITS_ANDUIN_WITHERS", &"CREDITS_GREG_BORRUD", &"CREDITS_NEIL_WIGFIELD" );
maps\_credits::addcentertriple( &"CREDITS_ANTONIUS_LIN", &"CREDITS_HUGH_HONG", &"CREDITS_PHILLIPPE_GUAY" );
maps\_credits::addcentertriple( &"CREDITS_ART_WONG", &"CREDITS_JAMES_SCOTT", &"CREDITS_RAGENE_NOMOLOSDIXON" );
maps\_credits::addcentertriple( &"CREDITS_BEN_BERLIN", &"CREDITS_JARED_BAILEY", &"CREDITS_RANDY_KY" );
maps\_credits::addcentertriple( &"CREDITS_BENEDICT_CHOY", &"CREDITS_JASIM_QAZI", &"CREDITS_RAY_COSICO" );
maps\_credits::addcentertriple( &"CREDITS_BHASKAR_UPADHYAY", &"CREDITS_JEFF_LEE", &"CREDITS_RAYMOND_GONZALES" );
maps\_credits::addcentertriple( &"CREDITS_BOB_BAE", &"CREDITS_JOHN_BASILLE", &"CREDITS_RHEA_MOODY" );
maps\_credits::addcentertriple( &"CREDITS_BRIAN_PETERS", &"CREDITS_JOHN_BURNETT", &"CREDITS_ROCK_MUTCHLER" );
maps\_credits::addcentertriple( &"CREDITS_CAMERON_WARNOCK", &"CREDITS_JOHN_DURKIN", &"CREDITS_RUDY_KOCH" );
maps\_credits::addcentertriple( &"CREDITS_CANDICE_DRISCOLL", &"CREDITS_JOHN_LINDEN", &"CREDITS_RYAN_KOONS" );
maps\_credits::addcentertriple( &"CREDITS_CARL_BRUMM", &"CREDITS_JONATHAN_DIETZ", &"CREDITS_RYAN_MEDEIROS" );
maps\_credits::addcentertriple( &"CREDITS_CELESTE_PANG", &"CREDITS_KARAN_SOTA", &"CREDITS_SAM_BENNETT" );
maps\_credits::addcentertriple( &"CREDITS_CHARLES_REEVES", &"CREDITS_KEITH_KEI", &"CREDITS_SETH_NEWTON" );
maps\_credits::addcentertriple( &"CREDITS_CHRIS_DOWNS", &"CREDITS_KENT_GAMBILL", &"CREDITS_SHERBAN_DRULEA" );
maps\_credits::addcentertriple( &"CREDITS_CHUCK_ALLEN", &"CREDITS_KIMBERLY_MARLIS", &"CREDITS_STEPHAN_DUBE" );
maps\_credits::addcentertriple( &"CREDITS_DAN_NOEL", &"CREDITS_LEVI_DAHLSTROM", &"CREDITS_STEPHEN_KOCHAN" );
maps\_credits::addcentertriple( &"CREDITS_DENNIS_BAILTON", &"CREDITS_MARK_EVELEIGH", &"CREDITS_STEVE_OBRIEN" );
maps\_credits::addcentertriple( &"CREDITS_DORIAN_COMPO", &"CREDITS_MARK_HU", &"CREDITS_TREY_WATKINS" );
maps\_credits::addcentertriple( &"CREDITS_DOUG_MUIR", &"CREDITS_MARKE_HALLOWELL", &"CREDITS_YIFU_QIAO" );
maps\_credits::addcentertriple( &"CREDITS_EARTH_WARREN", &"CREDITS_MARTIN_HOFFESOMMER", &"CREDITS_ZACH_GERSHMAN" );
maps\_credits::addcentertriple( &"CREDITS_ERIC_WU", &"CREDITS_MARTY_MILLER", &"CREDITS_ZACHARY_REYNOLDS" );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_WRITTEN_BY" );
maps\_credits::addcentertriple( undefined, &"CREDITS_STEPHEN_GAGHAN", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_CAST" );
maps\_credits::addcentertriple( undefined, &"CREDITS_IN_ALPHABETICAL_ORDER", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_BRANDON_ROUTH", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_BRIAN_BLOOM", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_JEFFREY_PIERCE", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_KEVIN_GAGE", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_STEPHEN_LANG", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_ADDITIONAL_VOICE_CAST" );
maps\_credits::addcentertriple( &"CREDITS_ALEX_MENDOZA", &"CREDITS_JOHN_BENTLEY", &"CREDITS_MICHAEL_HAWLEY" );
maps\_credits::addcentertriple( &"CREDITS_BRENDA_CANELA", &"CREDITS_JONATHAN_ROOT", &"CREDITS_RICARDO_HERRANZ" );
maps\_credits::addcentertriple( &"CREDITS_BRYCE_PAPENBROOK", &"CREDITS_JUSTIN_HARRIS", &"CREDITS_SEVY_DI_CIONE" );
maps\_credits::addcentertriple( &"CREDITS_CARLA_TASSARA", &"CREDITS_KIMBERLY_BROOKS", &"CREDITS_STEVE_WILCOX" );
maps\_credits::addcentertriple( &"CREDITS_CHRIS_COX", &"CREDITS_LANDON_ASHWORTH", &"CREDITS_SUMALEE_MONTANO" );
maps\_credits::addcentertriple( &"CREDITS_CHRISTIAN_LANZ", &"CREDITS_LORENI_DELGADO", &"CREDITS_TRAVIS_WILLINGHAM" );
maps\_credits::addcentertriple( &"CREDITS_DAVE_CARTER", &"CREDITS_MATT_MERCER", &"CREDITS_VALERIE_AREM" );
maps\_credits::addcentertriple( &"CREDITS_JAMES_PATRICK_STUART", &"CREDITS_MAURICIO_MENDOZA", &"CREDITS_YURI_LOWENTHAL" );
maps\_credits::addcentertriple( &"CREDITS_JANELL_COX", &"CREDITS_MELISSA_PINO", &"CREDITS_ZACH_HANKS" );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_VOICE_TALENT_DIRECTION_BY_KEIT" );
maps\_credits::addcentertriple( undefined, &"CREDITS_AARON_GALLANT", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_CASEY_BOYD", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_MATT_LEMBERGER", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_PADEN_JAMES", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_CASTING" );
maps\_credits::addcentertriple( undefined, &"CREDITS_IVY_ISENBERG", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_MUSIC_COMPOSED_ARRANGED_AND_PR" );
maps\_credits::addcenterdual( &"CREDITS_SCORE_PERFORMED_BY", &"CREDITS_THE_HUNGARIAN_STUDIO_ORCHESTRA" );
maps\_credits::addcenterdual( &"CREDITS_CONDUCTOR", &"CREDITS_PETER_PEJTSIK" );
maps\_credits::addcenterdual( &"CREDITS_ORCHESTRATED_BY", &"CREDITS_LUKE_RICHARDS" );
maps\_credits::addcenterdual( &"CREDITS_CONCERTMASTER", &"CREDITS_BALAZS_BUJTOR" );
maps\_credits::addcenterdual( &"CREDITS_CONTRACTOR", &"CREDITS_SANDOR_M_JOZSA" );
maps\_credits::addcenterdual( &"CREDITS_ORCHESTRA_MANAGER", &"CREDITS_GERGELY_KISS" );
maps\_credits::addcenterdual( &"CREDITS_RECORDING_ENGINEER", &"CREDITS_TAMAS_KURINA" );
maps\_credits::addcenterdual( &"CREDITS_MUSIC_EDITOR", &"CREDITS_SCOTT_JOHNSON" );
maps\_credits::addcenterdual( &"CREDITS_ELECTRIC_VIOLIN", &"CREDITS_HUGH_MARSH" );
maps\_credits::addcenterdual( &"CREDITS_ELECTRIC_CELLO", &"CREDITS_MARTIN_TILLMAN" );
maps\_credits::addcenterdual( &"CREDITS_GUITARS", &"CREDITS_COSTA_KOTSELAS__ANDY_PAGE" );
maps\_credits::addcenterdual( &"CREDITS_ADDITIONAL_SYNTH_PROGRAMMING", &"CREDITS_ANDY_PAGE__MICHAEL_WHITE" );
maps\_credits::addcenterdual( &"CREDITS_ADDITIONAL_PROGRAMMING", &"CREDITS_LUKE_RICHARDS" );
maps\_credits::addcenterdual( &"CREDITS_MUSIC_MIXED_BY", &"CREDITS_JEFF_BIGGERS" );
maps\_credits::addcenterdual( &"CREDITS_ASSISTANT_ENGINEER", &"CREDITS_LORI_CASTRO" );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_STUNT_COORDINATOR__FIGHT_CHORE" );
maps\_credits::addcentertriple( undefined, &"CREDITS_ALLEN_JO", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_ASSISTANT_STUNT_COORDINATOR" );
maps\_credits::addcentertriple( undefined, &"CREDITS_LATEEF_CROWDER", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_MOTION_CAPTURE_AND_STUNT_PERFO" );
maps\_credits::addcentertriple( &"CREDITS_ADAM_JENNINGS", &"CREDITS_EMERSON_BROOKS", &"CREDITS_MICHAEL_GIORDANI" );
maps\_credits::addcentertriple( &"CREDITS_ALISA_HENSLEY", &"CREDITS_EMERSON_CONNELL", &"CREDITS_NICK_BENSEMAN" );
maps\_credits::addcentertriple( &"CREDITS_ANDREW_WEIR", &"CREDITS_HEATHER_WILDMAN", &"CREDITS_PETER_DURKIN" );
maps\_credits::addcentertriple( &"CREDITS_BEN_REESING", &"CREDITS_KATHERINE_ROBINSON", &"CREDITS_RICO_THE_DOG" );
maps\_credits::addcentertriple( &"CREDITS_BRIAN_BROOKS", &"CREDITS_JOE_DECONO", &"CREDITS_RUGER_THE_DOG" );
maps\_credits::addcentertriple( &"CREDITS_DANNY_BOYER", &"CREDITS_JOEL_LAMBERT", &"CREDITS_ZACH_HUDSON" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_PALADINO", &"CREDITS_JOLENE_KAY", &"CREDITS_ZACH_MUNNS" );
maps\_credits::addcentertriple( &"CREDITS_EFKA_KVARACIJUS", &"CREDITS_JOSHUA_HILL", &"CREDITS_ZACH_ROBERTS" );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_STUNT_RIGGERS" );
maps\_credits::addcentertriple( &"CREDITS_RALF_KOCH", &"CREDITS_BRIAN_SIMPSON", &"CREDITS_STEVE_UPTON" );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_DOG_HANDLERS_AND_MILITARY_ADVI" );
maps\_credits::addcentertriple( &"CREDITS_TURBO", &"CREDITS_MICHAEL_BJORN_RITLAND_AND_RICO", &"CREDITS_EMILIO_CUESTA" );
maps\_credits::addcentertriple( &"CREDITS_BRYAN_SKAAR", &"CREDITS_CHRISTOPHER_CONNELL_AND_RUGER", &"CREDITS_WAYNE_DODGE" );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_ARMORERS" );
maps\_credits::addcentertriple( &"CREDITS_MG_SHOOTERS", &"CREDITS_KENTON_TUCKER", &"CREDITS_ED_HOPE" );
maps\_credits::addcentertriple( &"CREDITS_INDEPENDENT_STUDIO_SERVICES", &"CREDITS_LARRY_ZANOFF", &"CREDITS_MIKE_SIMONS" );
maps\_credits::addcentertriple( &"CREDITS_MISSION_SUPPORT_SPECIALISTS_IN", undefined, &"CREDITS_RUSS_AND_MICHELLE_CANNON" );
maps\_credits::addspacesmall();
maps\_credits::addspacesmall();
maps\_credits::addcenterheading( &"CREDITS_ADDITIONAL_ART_SERVICES" );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_AMC_PIXEL_FACTORY" );
maps\_credits::addcentertriple( &"CREDITS_ANDREI_RADOI", &"CREDITS_DAN_COCINA", &"CREDITS_LAURA_ALDICA" );
maps\_credits::addcentertriple( &"CREDITS_ANDREI_ZEGREA", &"CREDITS_DANIEL_MICU", &"CREDITS_LILIANA_ALDICA" );
maps\_credits::addcentertriple( &"CREDITS_AUREL_BREZAN", &"CREDITS_DANIEL_VIJOI", &"CREDITS_MADALINA_GHEORGHE" );
maps\_credits::addcentertriple( &"CREDITS_BOGDAN_ANDRONIC", &"CREDITS_DRAGOS_COCIOABA", &"CREDITS_OANA_NICULAIE" );
maps\_credits::addcentertriple( &"CREDITS_CIPRIAN_MUNTEANU", &"CREDITS_DRAGOS_MARINESCU", &"CREDITS_OVIDIU_BEJAN" );
maps\_credits::addcentertriple( &"CREDITS_CLAUDIU_BADICESCU", &"CREDITS_FLORENTINA_NECULCEA", &"CREDITS_RARES_TUJAN" );
maps\_credits::addcentertriple( &"CREDITS_CLAUDIU_TANASIE", &"CREDITS_FLORIN_POPA", &"CREDITS_VALENTIN_NADOLU" );
maps\_credits::addcentertriple( &"CREDITS_CRISTINA_CONSTANDA", &"CREDITS_FLORIN_VOICU", &"CREDITS_VIRGINIA_BONTAS" );
maps\_credits::addcentertriple( &"CREDITS_CRISTINA_NEAMTU", &"CREDITS_HORIA_SERBAN", &"CREDITS_VLAD_GHENGHEA" );
maps\_credits::addcentertriple( undefined, &"CREDITS_IONUT_NICOLAESCU", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_TECHNICOLOR_INDIA_PRIVATE_LIMI" );
maps\_credits::addcentertriple( &"CREDITS_AJEESH_BABU", &"CREDITS_KUNAL_DHIMAN", &"CREDITS_RAJEESH_TP" );
maps\_credits::addcentertriple( &"CREDITS_ANIKA_NEGI", &"CREDITS_LOKNATH_PATNAIK", &"CREDITS_RAJU_INTIVENUKA" );
maps\_credits::addcentertriple( &"CREDITS_ANINGI_TARAK", &"CREDITS_MADHANKUMAR_R", &"CREDITS_RISHAB_NANDA" );
maps\_credits::addcentertriple( &"CREDITS_ARATHI_VINOD", &"CREDITS_MTR_PRASAD", &"CREDITS_SANKARA_BABU" );
maps\_credits::addcentertriple( &"CREDITS_ASHISH_SAINI", &"CREDITS_NARASIMHA_MURTHY", &"CREDITS_SHASHANK_RAJPOOT" );
maps\_credits::addcentertriple( &"CREDITS_CYRUS_MISTRY", &"CREDITS_NAUSHAD_SHARIFF", &"CREDITS_SHEKHAR_BHAGAT" );
maps\_credits::addcentertriple( &"CREDITS_DILIP_GAUTHAM", &"CREDITS_NISHA_BHAVSAR", &"CREDITS_SHIRISH_KOKA" );
maps\_credits::addcentertriple( &"CREDITS_DINENDRA_MOHANTY", &"CREDITS_OMKAR_NERLEKAR", &"CREDITS_SIVAPRASAD_MANEPALLI" );
maps\_credits::addcentertriple( &"CREDITS_DINESH_RAWAT", &"CREDITS_OWEN_HURLEY", &"CREDITS_SREENATH_MOHANAN" );
maps\_credits::addcentertriple( &"CREDITS_GEORGE_MATHEW", &"CREDITS_PRANEET_TULSHYAN", &"CREDITS_SRINIVAS_MAMADAPALLI" );
maps\_credits::addcentertriple( &"CREDITS_HITESH_PARMAR", &"CREDITS_PREETAM_BORDOLOI", &"CREDITS_SUKHJINDER_SINGH" );
maps\_credits::addcentertriple( &"CREDITS_JAMANJYOTHI_JAGDISHWAR", &"CREDITS_PUJARI_RAJKUMAR", &"CREDITS_UTTAM_BORDOLOI" );
maps\_credits::addcentertriple( &"CREDITS_JAYASEELAN_SANTHOSH", &"CREDITS_RAHIL_SONI", &"CREDITS_VENKATRAMAN_SAMPATH" );
maps\_credits::addcentertriple( &"CREDITS_JIJO_THOMAS", &"CREDITS_RAJ_THADANI", &"CREDITS_VIKRAM_VENKATARAGHAVAN" );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_3_POINT_PRODUCTIONS" );
maps\_credits::addcentersubtitle( &"CREDITS_CENTURION" );
maps\_credits::addcentersubtitle( &"CREDITS_LEMON_SKY" );
maps\_credits::addcentersubtitle( &"CREDITS_STARGATE_STUDIOS" );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_LIGHT_STAGE_FACIAL_SCANNING" );
maps\_credits::addcentertriple( undefined, &"CREDITS_UNIVERSITY_OF_SOUTHERN_CALIFOR", undefined );
maps\_credits::addspacesmall();
maps\_credits::addspacesmall();
maps\_credits::addcenterheading( &"CREDITS_ADDITIONAL_SOUND_DESIGN" );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_EARBASH_AUDIO_INC" );
maps\_credits::addcentertriple( undefined, &"CREDITS_YUAN_LIU", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_FOLEY_PERFORMED_AND_RECORDED_B" );
maps\_credits::addcentertriple( &"CREDITS_GARY_HECKER", &"CREDITS_GARY_MARULLO", &"CREDITS_NERSES_GEZALYAN" );
maps\_credits::addcentertriple( undefined, &"CREDITS_KATIE_ROWE", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_FIELD_RECORDIST" );
maps\_credits::addcentertriple( undefined, &"CREDITS_JOHN_P_FASAL", undefined );
maps\_credits::addspacesmall();
maps\_credits::addspacesmall();
maps\_credits::addcenterheading( &"CREDITS_CGI_CINEMATICS__CREATURES_AUDI" );
maps\_credits::addcentersubtitle( &"CREDITS_SOURCE_SOUND_INC" );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_SUPERVISING_SOUND_DESIGNER__MI" );
maps\_credits::addcentertriple( undefined, &"CREDITS_CHARLES_DEENEN", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_SOUND_DESIGNERS" );
maps\_credits::addcentertriple( &"CREDITS_GREGORY_ALLEN", &"CREDITS_JAY_JENNINGS", &"CREDITS_STUART_PROVINE" );
maps\_credits::addcentertriple( &"CREDITS_TIM_GEDEMER", &"CREDITS_TIM_WALSTON", undefined );
maps\_credits::addspacesmall();
maps\_credits::addspacesmall();
maps\_credits::addcenterheading( &"CREDITS_CINEMATICS" );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_THE_MILL" );
maps\_credits::addcentertriple( &"CREDITS_ADAM_DROY", &"CREDITS_GEORGINA_FORD", &"CREDITS_MAX_FORWARD" );
maps\_credits::addcentertriple( &"CREDITS_ADRIAN_RUSSELL", &"CREDITS_GREG_GANGEMI", &"CREDITS_MENGYANG_LU" );
maps\_credits::addcentertriple( &"CREDITS_ALASDAIR_MCNEILL", &"CREDITS_GREG_HOWEDAVIES", &"CREDITS_MICHAEL_HUNAULT" );
maps\_credits::addcentertriple( &"CREDITS_ALBERTO_LARA", &"CREDITS_GREG_SPENCER", &"CREDITS_MIGUEL_GUERRERO" );
maps\_credits::addcentertriple( &"CREDITS_AMY_GRAHAM", &"CREDITS_HARTWELL_DURFOR", &"CREDITS_MIKE_CHAPMAN" );
maps\_credits::addcentertriple( &"CREDITS_ANDREW_HUANG", &"CREDITS_HELEN_BROWNELL", &"CREDITS_MILTON_RAMIREZ" );
maps\_credits::addcentertriple( &"CREDITS_ANDREW_PROCTOR", &"CREDITS_HELEN_HSU", &"CREDITS_NATALIE_WESTERFIELD" );
maps\_credits::addcentertriple( &"CREDITS_ANDY_NICHOLAS", &"CREDITS_HUGO_GUERRA", &"CREDITS_NOLE_MURPHY" );
maps\_credits::addcentertriple( &"CREDITS_ANGELA_BARRY", &"CREDITS_IAN_BAXTER", &"CREDITS_PAUL_DONNELLAN" );
maps\_credits::addcentertriple( &"CREDITS_ANNESOFIE_THOLANDER", &"CREDITS_IAN_BERRY", &"CREDITS_PAUL_MITCHELL" );
maps\_credits::addcentertriple( &"CREDITS_ARTHUR_LARSON", &"CREDITS_ISAAC_IRVIN", &"CREDITS_PETE_HODSMAN" );
maps\_credits::addcentertriple( &"CREDITS_ASHRAF_GHONIEM", &"CREDITS_JACQUELINE_SAND", &"CREDITS_PETER_AGG" );
maps\_credits::addcentertriple( &"CREDITS_BARRY_DEMPSEY", &"CREDITS_JAKE_MAYMUDES", &"CREDITS_PHILL_MAYER" );
maps\_credits::addcentertriple( &"CREDITS_BEN_HURAND", &"CREDITS_JARRAD_VLADICH", &"CREDITS_PHILLIP_MORTON" );
maps\_credits::addcentertriple( &"CREDITS_BEN_SMITH", &"CREDITS_JAYMIE_MIGUEL", &"CREDITS_REBECCA_FERCUSON" );
maps\_credits::addcentertriple( &"CREDITS_BENITO_VARGAS", &"CREDITS_JERRY_ZIGOUNAKIS", &"CREDITS_REMEDY_HUYNH" );
maps\_credits::addcentertriple( &"CREDITS_BLAKE_GUEST", &"CREDITS_JON_URIARTE", &"CREDITS_RICH_SHALLCROSS" );
maps\_credits::addcentertriple( &"CREDITS_BLAKE_SULLIVAN", &"CREDITS_JOSH_HATTON", &"CREDITS_RICHARD_LIM" );
maps\_credits::addcentertriple( &"CREDITS_BRETT_ANGELILLIS", &"CREDITS_JOY_TIERNAN", &"CREDITS_ROSEMARY_EVE" );
maps\_credits::addcentertriple( &"CREDITS_BRIAN_YANG", &"CREDITS_JUAN_BROCKHAUS", &"CREDITS_RYAN_HURD" );
maps\_credits::addcentertriple( &"CREDITS_BYRON_SLAYBAUGH", &"CREDITS_JULES_JANAUD", &"CREDITS_SAM_DRISCOLL" );
maps\_credits::addcentertriple( &"CREDITS_CAMERON_SMITHER", &"CREDITS_JUSTIN_SUCARA", &"CREDITS_SAMANTHA_BANACK" );
maps\_credits::addcentertriple( &"CREDITS_CARLO_VOLPATI", &"CREDITS_KEN_PELLETIER", &"CREDITS_SAUCE_VILAS" );
maps\_credits::addcentertriple( &"CREDITS_CHRIS_BROWN", &"CREDITS_KRISTAN_KELLY", &"CREDITS_SERGIO_XISTO" );
maps\_credits::addcentertriple( &"CREDITS_CHRISTOS_PARLIAROS", &"CREDITS_KRYSTAL_SAE_EUA", &"CREDITS_SHANE_REED" );
maps\_credits::addcentertriple( &"CREDITS_DANIEL_THURESSON", &"CREDITS_KYLE_MOORE", &"CREDITS_STEPHEN_VENNING" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_HEMPSTEAD", &"CREDITS_LARUE_ANDERSON", &"CREDITS_STU_MINTZ" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_HOCHSTADTER", &"CREDITS_LEE_BUCKLEY", &"CREDITS_SURAJ_HARRINGTONODEDRA" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_LAWSON", &"CREDITS_LEONARDO_COSTA", &"CREDITS_TODD_DUFOUR" );
maps\_credits::addcentertriple( &"CREDITS_DENIS_GAUTHIER", &"CREDITS_LUKAS_LUNDBERG", &"CREDITS_TOM_RAYNOR" );
maps\_credits::addcentertriple( &"CREDITS_ED_LAAG", &"CREDITS_LUKE_KRAMAN", &"CREDITS_TOM_WALTER" );
maps\_credits::addcentertriple( &"CREDITS_ELIZABETH_NEWMAN", &"CREDITS_LUKE_TICKNER", &"CREDITS_VICTOR_DUNCAN" );
maps\_credits::addcentertriple( &"CREDITS_EUGENE_GAURAN", &"CREDITS_MANIJA_EMRAN", &"CREDITS_WILL_LEMMON" );
maps\_credits::addcentertriple( &"CREDITS_FABRICE_LE_NEZET", &"CREDITS_MARGAUX_HUNEAU", &"CREDITS_YOANN_GOURAUD" );
maps\_credits::addcentertriple( &"CREDITS_FREDERIC_BONPAPA", &"CREDITS_MATT_BOHNERT", &"CREDITS_YORIE_KUMALASARI" );
maps\_credits::addcentertriple( &"CREDITS_GABRIEL_J_DIAZ", &"CREDITS_MATT_NEAPOLITAN", &"CREDITS_ZISSIS_PAPATZIKIS" );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_SPOV" );
maps\_credits::addcentertriple( &"CREDITS_ADAM_ROCHE", &"CREDITS_IAN_JONES", &"CREDITS_MARTIN_AGGERHOLM" );
maps\_credits::addcentertriple( &"CREDITS_ALLEN_LEITCH", &"CREDITS_JEN_MATHER", &"CREDITS_MILES_CHRISTENSEN" );
maps\_credits::addcentertriple( &"CREDITS_DAN_HIGGOTT", &"CREDITS_JULIO_DEAN", &"CREDITS_PAUL_HUNT" );
maps\_credits::addcentertriple( &"CREDITS_EMMA_CLARKE", &"CREDITS_KIERAN_GEEFINCH", &"CREDITS_RACHEL_CHU" );
maps\_credits::addcentertriple( undefined, &"CREDITS_MANTAS_GRIGAITIS", undefined );
maps\_credits::addspacesmall();
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_ECONOMY_ENERGY_AND_ENVIRONMENT" );
maps\_credits::addcentertriple( undefined, &"CREDITS_JULIAN_RICHARDSON", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_SPECIAL_THANKS" );
maps\_credits::addcentertriple( &"CREDITS_BEN_BENSON_BOWE", &"CREDITS_JIM_AND_JAMIE_DOW", &"CREDITS_THE_ANT_FARM" );
maps\_credits::addcentertriple( &"CREDITS_EDWARD_SCHOPPMAN", &"CREDITS_MARK_LAMIA", &"CREDITS_THE_SEA_SNIPERS" );
maps\_credits::addcentertriple( &"CREDITS_JAMES_RILEY", &"CREDITS_RYAN_FWIZ_WYATT", &"CREDITS_TIM_PATTERSON" );
maps\_credits::addcentertriple( &"CREDITS_JARED_MAGGARD", &"CREDITS_TACTICAL_MEDIA_GROUP", &"CREDITS_WOLF_CONNECTION__ACTON_CA" );
maps\_credits::addcentertriple( &"CREDITS_87ELEVEN", &"CREDITS_L3_COMMUNICATIONS_CORPORATIONE", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_PRODUCTION_BABIES" );
maps\_credits::addcentertriple( &"CREDITS_ADIA_ELIZABETH_ORZULAK", &"CREDITS_EVERETT_SAMUEL", &"CREDITS_NATHANIEL_THOMAS_EBEJER" );
maps\_credits::addcentertriple( &"CREDITS_ANAYA_ROSE_WILLIAMS", &"CREDITS_GABRIELA_BUCKLEY", &"CREDITS_NICO_FRANCISCO_BARAJAS" );
maps\_credits::addcentertriple( &"CREDITS_ARIA_QUINN_WIDNER", &"CREDITS_GRACIE_WRIGHT", &"CREDITS_NOAH_MCDANIEL" );
maps\_credits::addcentertriple( &"CREDITS_AYDEN_GATICA", &"CREDITS_GRIFFIN_DANIEL_NELSON", &"CREDITS_OLIVER_PATRICK_MULHALL" );
maps\_credits::addcentertriple( &"CREDITS_BABY_ANNE_ERSKINE", &"CREDITS_HAROLD_CALVIN_DAVIS_MOODIE", &"CREDITS_OTTO_AKIRA_DOBBIE" );
maps\_credits::addcentertriple( &"CREDITS_BABY_REYES", &"CREDITS_ISABELLA_ANDONIAN", &"CREDITS_PARKER_WYATT_KORNKVEN" );
maps\_credits::addcentertriple( &"CREDITS_BRANDON_ENRIQUE_GIL", &"CREDITS_JUSTIN_HYUNWOO_OH", &"CREDITS_REMY_DRAYTON_PALSER" );
maps\_credits::addcentertriple( &"CREDITS_CALEB_H_KIM", &"CREDITS_KEIARA_MARIE_RIES", &"CREDITS_RYKER_ETHAN_BLUMEL" );
maps\_credits::addcentertriple( &"CREDITS_CECILIA_JOLIE_MIRANDA", &"CREDITS_KRISH_BANSI", &"CREDITS_RYLEY_QUINN_RACCA" );
maps\_credits::addcentertriple( &"CREDITS_CHARLOTTE_ROSE_BYCHOWSKI", &"CREDITS_KRISTIAN_HAMILTON", &"CREDITS_SAMUEL_MACHETE_GALLAGHER" );
maps\_credits::addcentertriple( &"CREDITS_CLOVER_MINA_KYDLAND_KAR", &"CREDITS_LUCA_VALDIVIA", &"CREDITS_SLOANE_ELIZABETH_GROPPER" );
maps\_credits::addcentertriple( &"CREDITS_DECLAN_MCKISIC", &"CREDITS_MATTHEW_BRIAN_FEIRFEIL", &"CREDITS_SOPHIA_LILAH_LOPEZ" );
maps\_credits::addcentertriple( &"CREDITS_DRAKE_ANDREW_NELSON", &"CREDITS_MELIA_DERSARKISSIAN", &"CREDITS_SYDNEY_DROWN" );
maps\_credits::addcentertriple( &"CREDITS_ELLA_SOFIA_HONG_SKILLMAN", &"CREDITS_MICHAEL_ALEXANDER_CAROTENUTO", &"CREDITS_TRISTAN_CARTER_OLES" );
maps\_credits::addcentertriple( undefined, &"CREDITS_MINA_ANGELINE_DE_LALLA", undefined );
maps\_credits::addspacesmall();
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_OUR_DEEPEST_GRATITUDE_TO_OUR_F" );
maps\_credits::addcentersubtitle( &"CREDITS_WE_COULDNT_HAVE_MADE_THIS_GAME" );
maps\_credits::addspacesmall();
maps\_credits::addspacesmall();
}
initactivisioncredits()
{
maps\_credits::addcenterheading( &"CREDITS_ACTIVISION_PUBLISHING" );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_ACTIVISION_PRODUCTION_MANAGEME" );
maps\_credits::addcentertriple( &"CREDITS_ALYSSA_DELHOTALSCHOFIELD", &"CREDITS_JAMES_LODATO", &"CREDITS_MATT_WELLMAN" );
maps\_credits::addcentertriple( &"CREDITS_DANIEL_SUAREZ", &"CREDITS_GRAHAM_HAGMAIER", &"CREDITS_MARCUS_IREMONGER" );
maps\_credits::addcentertriple( &"CREDITS_DAVE_STOHL", &"CREDITS_JOE_CAMMORATA", &"CREDITS_YALE_MILLER" );
maps\_credits::addcentertriple( undefined, &"CREDITS_LISA_OHANIAN", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_PMG_SPECIAL_THANKS" );
maps\_credits::addcentertriple( &"CREDITS_ANDREW_HOFFACKER", &"CREDITS_DOUG_PEARSON", &"CREDITS_LU_ZHANG" );
maps\_credits::addcentertriple( &"CREDITS_ASH_THUKRAL", &"CREDITS_EMORY_IRPAN", &"CREDITS_MEGHAN_MORGAN" );
maps\_credits::addcentertriple( &"CREDITS_BEN_BRINKMAN", &"CREDITS_EUNICE_LEE", &"CREDITS_NEVEN_DRAVINSKI" );
maps\_credits::addcentertriple( &"CREDITS_BRIAN_ABRAMS", &"CREDITS_EVE_CHANG", &"CREDITS_ROSE_CLARKE" );
maps\_credits::addcentertriple( &"CREDITS_CHRIS_BAGGIO", &"CREDITS_JAMES_BONTI", &"CREDITS_RYAN_TRONDSEN" );
maps\_credits::addcentertriple( &"CREDITS_CHRIS_CHOWDHURY", &"CREDITS_JASON_ADES", &"CREDITS_SHANNON_WAHL" );
maps\_credits::addcentertriple( undefined, &"CREDITS_JOHN_BANAYAN", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_ACTIVISION_GLOBAL_BRANDING" );
maps\_credits::addcentertriple( &"CREDITS_ERIC_FOLLIOT", &"CREDITS_PHILLIP_ZINDA", &"CREDITS_ROXANN_BELLE" );
maps\_credits::addcentertriple( &"CREDITS_JONATHAN_MURNANE", &"CREDITS_ROBERT_KOSTICH", &"CREDITS_RYAN_SCOTT" );
maps\_credits::addcentertriple( &"CREDITS_MATTHEW_COX", &"CREDITS_ROCHELLE_WEBB", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_ACTIVISION_CONSUMER_MARKETING" );
maps\_credits::addcentertriple( &"CREDITS_ANDREW_DRAKE", &"CREDITS_KAREN_STARR", &"CREDITS_MATT_SMALL" );
maps\_credits::addcentertriple( &"CREDITS_CAROLYN_WANG", &"CREDITS_LYNN_BALLEW", &"CREDITS_TODD_HARVEY" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_CUSHMAN", &"CREDITS_MAILE_ROBERTSON", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_ACTIVISION_DIGITAL_MARKETING" );
maps\_credits::addcentertriple( &"CREDITS_AMAR_REYES", &"CREDITS_DANIELLE_WOLFSON", &"CREDITS_JONATHAN_ANASTAS" );
maps\_credits::addcentertriple( &"CREDITS_CHRISTY_BUENA", &"CREDITS_JEFF_GOODWIN", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_ACTIVISION_PUBLIC_RELATIONS" );
maps\_credits::addcentertriple( &"CREDITS_ALAN_JOHNSON", &"CREDITS_KAREN_YI", &"CREDITS_MONICA_PONTRELLI" );
maps\_credits::addcentertriple( &"CREDITS_ALI_MILLER", &"CREDITS_KYLE_WALKER", &"CREDITS_ROBERT_TAYLOR" );
maps\_credits::addcentertriple( &"CREDITS_BIANCA_BLAIR", &"CREDITS_MACLEAN_MARSHALL", &"CREDITS_VANESSA_VANASIN" );
maps\_credits::addcentertriple( &"CREDITS_JOSHUA_SELINGER", &"CREDITS_MICHAEL_MANTARRO", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_PR_SPECIAL_THANKS" );
maps\_credits::addcentertriple( &"CREDITS_PMK__BNC", &"CREDITS_DAN_AMRICH", &"CREDITS_STEP_3" );
maps\_credits::addcentertriple( undefined, &"CREDITS_HANK_KEIRSEY", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_ACTIVISION_PRODUCTION_SERVICES" );
maps\_credits::addcentertriple( &"CREDITS_ADAM_PARIS", &"CREDITS_FRANCESCA_BRIGGS", &"CREDITS_MICHAEL_THRIPPLETON" );
maps\_credits::addcentertriple( &"CREDITS_ALBERTO_CORREA_TOSTICROCRE", &"CREDITS_FRANCESCA_SQUELLERIO", &"CREDITS_MICHELE_IORIO" );
maps\_credits::addcentertriple( &"CREDITS_ALEJANDRO_FERNANDEZ", &"CREDITS_FRANCESCO_DESSOLIS", &"CREDITS_MIRANDA_HUYBERS" );
maps\_credits::addcentertriple( &"CREDITS_ALEKSEJS_RADCENKO", &"CREDITS_FRANCK_MORISSEAU", &"CREDITS_NEIDSON_PEREIRA" );
maps\_credits::addcentertriple( &"CREDITS_ALFIO_FEDERICO_DI_PINTO", &"CREDITS_GIACOMO_CASAROTTO", &"CREDITS_NIAIARA_MITXELENA" );
maps\_credits::addcentertriple( &"CREDITS_ALFONSO_CASANOVA", &"CREDITS_GIOVANNI_BASILICO", &"CREDITS_NICHOLAS_COLARES" );
maps\_credits::addcentertriple( &"CREDITS_ANDERSON_CAHET", &"CREDITS_GREG_KORDAS", &"CREDITS_NICOLAS_DICKER" );
maps\_credits::addcentertriple( &"CREDITS_ANTOINE_DE_FOURCROY", &"CREDITS_GUILHERME_SANTOS", &"CREDITS_OLIVER_BECK" );
maps\_credits::addcentertriple( &"CREDITS_BAPTISTE_DESCATOIRE", &"CREDITS_GUILLEM_BALAYER", &"CREDITS_PAOLA_PALERMO" );
maps\_credits::addcentertriple( &"CREDITS_BARRY_KEHOE", &"CREDITS_GURVINDER_BAHRA", &"CREDITS_PAVEL_HOROVEC" );
maps\_credits::addcentertriple( &"CREDITS_CEDRIC_VIGNEAU", &"CREDITS_IGNAT_CONSTANTIN_CATALIN", &"CREDITS_PIERRE_LARALDE" );
maps\_credits::addcentertriple( &"CREDITS_CHRISTIAN_VALUER", &"CREDITS_IVAN_MENDEZ", &"CREDITS_RAUL_PRADES_ROCA" );
maps\_credits::addcentertriple( &"CREDITS_CHRISTOPHER_BUGNY", &"CREDITS_IVAR_ROCHA_ARIAS", &"CREDITS_RENE_PREISS" );
maps\_credits::addcentertriple( &"CREDITS_CLAUDIO_MEDINA", &"CREDITS_JAVIER_FERNANDEZ_CORDOBA", &"CREDITS_RUBEN_DEHOUCK" );
maps\_credits::addcentertriple( &"CREDITS_CONOR_HARLOW", &"CREDITS_KEVIN_FLYNN", &"CREDITS_SEBASTIEN_LE_PORT" );
maps\_credits::addcentertriple( &"CREDITS_CRAIG_OBOYLE", &"CREDITS_LAURA_COCCO", &"CREDITS_SIMON_NORTH" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_TYLER", &"CREDITS_LUCAS_TARDIM", &"CREDITS_STEFAN_LULUDES" );
maps\_credits::addcentertriple( &"CREDITS_ESTHER_REIMANN", &"CREDITS_MAICON_LAMB_FLORES", &"CREDITS_STEFANIA_VANERIO" );
maps\_credits::addcentertriple( &"CREDITS_FALK_BUERGER", &"CREDITS_MANNIX_KELLY", &"CREDITS_THOMAS_LOPEZ" );
maps\_credits::addcentertriple( &"CREDITS_FERGUS_LINDSAY", &"CREDITS_MANUELA_LORITZ", &"CREDITS_TODD_LAMBERT" );
maps\_credits::addcentertriple( &"CREDITS_FIONA_EBBS", &"CREDITS_MARK_COX", &"CREDITS_VINICIUS_VERZA" );
maps\_credits::addcentertriple( undefined, &"CREDITS_MATTHEW_BUTLER", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_ACTIVISION_STUDIO_OPERATIONS" );
maps\_credits::addcentertriple( &"CREDITS_ALEXANDRE_DUCLOS", &"CREDITS_EVALINA_SHIN", &"CREDITS_NICK_LAMIA" );
maps\_credits::addcentertriple( &"CREDITS_ANDY_SHIN", &"CREDITS_JAMES_MARTIN", &"CREDITS_PAULINE_MARTYN" );
maps\_credits::addcentertriple( &"CREDITS_ANDY_YOON", &"CREDITS_JASON_JORDAN", &"CREDITS_ROB_LEBEAU" );
maps\_credits::addcentertriple( &"CREDITS_ANGEL_GARCIA", &"CREDITS_JEFF_KETCHAM", &"CREDITS_SAMARIA_DANIEL" );
maps\_credits::addcentertriple( &"CREDITS_BRANDON_RUSS", &"CREDITS_JOEL_ESPANA", &"CREDITS_SAMUEL_PETERSON" );
maps\_credits::addcentertriple( &"CREDITS_BRANDON_SCHEBLER", &"CREDITS_JOEY_DERRICO", &"CREDITS_SANG_KIM" );
maps\_credits::addcentertriple( &"CREDITS_CARL_HUGHES", &"CREDITS_JOSH_BOLTON", &"CREDITS_SHEILAH_BROOKS" );
maps\_credits::addcentertriple( &"CREDITS_CHRISTOPHER_WILSON", &"CREDITS_KATHLEEN_OROURKE", &"CREDITS_STUART_ROCH" );
maps\_credits::addcentertriple( &"CREDITS_CLINTON_ALLEN", &"CREDITS_MATT_WAHLQUIST", &"CREDITS_TODD_PRUYN" );
maps\_credits::addcentertriple( &"CREDITS_EDDIE_CHAN", &"CREDITS_MIKE_HUNAU", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_ACTIVISION_TALENT_MANAGEMENT_G" );
maps\_credits::addcentertriple( &"CREDITS_DAN_WINTERS", &"CREDITS_MARCHELE_HARDIN", &"CREDITS_NOAH_SARID" );
maps\_credits::addcentertriple( &"CREDITS_GINA_RAMIREZ", &"CREDITS_MARIE_BAGNELL", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_ACTIVISION_STUDIO_CENTRAL" );
maps\_credits::addcentertriple( &"CREDITS_ADAM_BOYD", &"CREDITS_ETIENNE_DANVOYE", &"CREDITS_MICHAEL_JANTZ" );
maps\_credits::addcentertriple( &"CREDITS_ADAM_FOSHKO", &"CREDITS_EVAN_BUTTON", &"CREDITS_MICHAEL_VANCE" );
maps\_credits::addcentertriple( &"CREDITS_ADAM_MARRS", &"CREDITS_GARETH_GRIFFITHS", &"CREDITS_PAT_GRIFFITH" );
maps\_credits::addcentertriple( &"CREDITS_ALEXANDRE_DEBROUSSE", &"CREDITS_GAURAV_SHELLIKERI", &"CREDITS_PAUL_EDELSTEIN" );
maps\_credits::addcentertriple( &"CREDITS_ANDRE_LOPEZ", &"CREDITS_HEATHER_POLUBINSKI", &"CREDITS_PAUL_ROBINSON" );
maps\_credits::addcentertriple( &"CREDITS_ANGELO_PESCE", &"CREDITS_J_BRICE_FORESTIER", &"CREDITS_PHIL_KECK" );
maps\_credits::addcentertriple( &"CREDITS_ARTHUR_VON_ESCHEN", &"CREDITS_JAMES_HUGHES", &"CREDITS_RICCARD_LINDE" );
maps\_credits::addcentertriple( &"CREDITS_BEN_STRAGNELL", &"CREDITS_JAMIE_EGERTON", &"CREDITS_RYAN_FORD" );
maps\_credits::addcentertriple( &"CREDITS_BEN_WATSON", &"CREDITS_JAVIER_VON_DER_PAHLEN", &"CREDITS_SASHA_REBECCA_GROSS" );
maps\_credits::addcentertriple( &"CREDITS_BERNARDO_ANTONIAZZI", &"CREDITS_JEFF_CHEN", &"CREDITS_SPENCER_RICHMOND_SHULMAN" );
maps\_credits::addcentertriple( &"CREDITS_BILL_PETRO", &"CREDITS_JENNIFER_VELAZQUEZ", &"CREDITS_STEVE_PEARCE" );
maps\_credits::addcentertriple( &"CREDITS_CARL_SCHNURR", &"CREDITS_JEREMY_LE", &"CREDITS_STEVE_WANG" );
maps\_credits::addcentertriple( &"CREDITS_CHRIS_CODDING", &"CREDITS_JONATHAN_BONILLAS", &"CREDITS_SYLVAIN_DOREAU" );
maps\_credits::addcentertriple( &"CREDITS_CHRISTOPHER_HAN_ELLIS", &"CREDITS_JORGE_JIMENEZ", &"CREDITS_TREVEOR_BRESAW" );
maps\_credits::addcentertriple( &"CREDITS_DAVE_COWLING", &"CREDITS_LI_XIONG", &"CREDITS_VICTOR_DURLING" );
maps\_credits::addcentertriple( &"CREDITS_DAVID_BULLAT_II", &"CREDITS_LIM_HUR", &"CREDITS_VINCENT_EDWARDS" );
maps\_credits::addcentertriple( &"CREDITS_DONNY_HUANG", &"CREDITS_LISA_WONG", &"CREDITS_VLADIMIR_RYZHOV" );
maps\_credits::addcentertriple( &"CREDITS_DYLAN_ROGERSON", &"CREDITS_MATT_KARNES", &"CREDITS_WADE_BRAINERD" );
maps\_credits::addcentertriple( undefined, &"CREDITS_MICHAEL_EHELER", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_ACTIVISION_CUSTOMER_SUPPORT" );
maps\_credits::addcentertriple( &"CREDITS_CESAR_ESPITIA", &"CREDITS_JEFF_WALSH", &"CREDITS_PHILIP_CHUNG" );
maps\_credits::addcentertriple( &"CREDITS_CHRIS_KAUFMAN", &"CREDITS_KEVIN_CRAWFORD", &"CREDITS_ROZANNE_GALLEGOS" );
maps\_credits::addcentertriple( &"CREDITS_CHRISTIANE_BRAND", &"CREDITS_LOUIS_BLACKWELL", &"CREDITS_RUSSELL_JOHNSON" );
maps\_credits::addcentertriple( &"CREDITS_CHUCK_MCNAMEE", &"CREDITS_LOUIS_KAM", &"CREDITS_RUTH_BERENJI" );
maps\_credits::addcentertriple( &"CREDITS_DOV_CARSON", &"CREDITS_MIKE_DANGERFIELD", &"CREDITS_SAMANTHA_WOOD" );
maps\_credits::addcentertriple( &"CREDITS_GUILLERMO_HERNANDEZ", &"CREDITS_NOEL_FELICIANO", &"CREDITS_SHERRY_COTLAR" );
maps\_credits::addcentertriple( &"CREDITS_JACK_BALDUF", &"CREDITS_PAUL_BOUSTANY", &"CREDITS_SJOERD_VAN_DEN_BERG" );
maps\_credits::addcentertriple( &"CREDITS_JAMES_CABELNEIL", &"CREDITS_PEDRO_PULIDO", &"CREDITS_TIM_RONDEAU" );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_ACTIVISION_MUSIC_DEPARTMENT" );
maps\_credits::addcentertriple( &"CREDITS_BRANDON_YOUNG", &"CREDITS_KATIE_SIPPEL", &"CREDITS_TIM_RILEY" );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_ACTIVISION_GLOBAL_IT" );
maps\_credits::addcentertriple( &"CREDITS_ANDY_BEZER", &"CREDITS_JAMES_HENNESSEY", &"CREDITS_PAUL_FLORES" );
maps\_credits::addcentertriple( &"CREDITS_ANDY_IRVIN", &"CREDITS_JASON_POSADA", &"CREDITS_RICARDO_ROMERO" );
maps\_credits::addcentertriple( &"CREDITS_BEN_PIRET", &"CREDITS_JASON_QUIRE", &"CREDITS_RODRIGO_MORA" );
maps\_credits::addcentertriple( &"CREDITS_BERTRAND_LEROUX", &"CREDITS_JAY_MARTINEZ", &"CREDITS_RONNIE_LOU" );
maps\_credits::addcentertriple( &"CREDITS_CHRIS_TAYLOR", &"CREDITS_KAREN_SEGAWA", &"CREDITS_SAM_WINOTAI" );
maps\_credits::addcentertriple( &"CREDITS_COLIN_SCHILLER", &"CREDITS_KEITH_ARCHER", &"CREDITS_SATYA_MUTHYALA" );
maps\_credits::addcentertriple( &"CREDITS_CRAIG_HARRISON", &"CREDITS_MAHESH_TYAGI", &"CREDITS_SEAN_DARTER" );
maps\_credits::addcentertriple( &"CREDITS_DEAN_DING", &"CREDITS_MIKE_CONSTANTAS", &"CREDITS_SEAN_WILLIAMS" );
maps\_credits::addcentertriple( &"CREDITS_DELPHINE_CALSADA", &"CREDITS_MYO_KYAWSWAR", &"CREDITS_SIMON_LI" );
maps\_credits::addcentertriple( &"CREDITS_FRANCIS_JIMENEZ", &"CREDITS_NEIL_HOLMES", &"CREDITS_TODD_SZALLA" );
maps\_credits::addcentertriple( &"CREDITS_GINA_HOPE", &"CREDITS_NICK_HARLAND", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_ACTIVISION_BUSINESS_DEVELOPMEN" );
maps\_credits::addcentertriple( &"CREDITS_GARRETT_BRODIE", &"CREDITS_KEVIN_FRYERS", &"CREDITS_ROB_SCHONFELD" );
maps\_credits::addcentertriple( &"CREDITS_JON_ESTANISLAO", &"CREDITS_MARCUS_MORGAN", &"CREDITS_SUGGIE_OH" );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_ACTIVISION_SUPPLY_CHAIN_OPERAT" );
maps\_credits::addcentertriple( &"CREDITS_DEREK_BROWN", &"CREDITS_JENNIFER_SULIVAN", &"CREDITS_NIKKI_MAK" );
maps\_credits::addcentertriple( undefined, &"CREDITS_MELISSA_WESSELY", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_ACTIVISION_CONSUMER_INSIGHTS" );
maps\_credits::addcentertriple( &"CREDITS_JUSTIN_SHEARER", &"CREDITS_LISA_WELCH", &"CREDITS_TAL_OREN" );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_ACTIVISION_BUSINESS__LEGAL_AFF" );
maps\_credits::addcentertriple( &"CREDITS_CHRIS_WALTHER", &"CREDITS_KELLY_SCHWARM", &"CREDITS_TERRI_DURHAM" );
maps\_credits::addcentertriple( &"CREDITS_KAP_KANG", &"CREDITS_LIP_HO", &"CREDITS_TERRY_KIEL" );
maps\_credits::addcentertriple( &"CREDITS_KATE_OGOSTA", &"CREDITS_MARY_TUCK", &"CREDITS_TRAVIS_STANSBURY" );
maps\_credits::addcentertriple( &"CREDITS_KEITH_HAMMONS", &"CREDITS_PHIL_TERZIAN", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_ACTIVISION_QUALITY_ASSURANCE_L" );
maps\_credits::addcentertriple( undefined, &"CREDITS_AARON_GARNER_EARL_EUGENIO_MARQ", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ADAM_LATZ_EDSON_MARTINEZ_MATT_", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ALBERT_ASTORGA_EDWARD_SANCHEZ_", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ALEX_CHANG_EJ_ALCANTARA_MATTHE", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ALEX_HARTERT_ELLIOTT_EHLIG_MAT", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ALEXANDRA_HALEY_ERIC_STANZIONE", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ALEXANDRE_MOREAU_ERIC_W_DZENGE", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ALTHERIA_WEAVER_ERIC_WHANG_MAT", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_AMANDA_ROSE_ERICA_QUALLS_MAX_C", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_AMBER_CLARK_EUGENE_CHA_MICHAEL", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ANDRES_RIOS_EVAN_TAKASHI_CHIAN", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ANDREW_VILLALPANDO_FRANK_E_PER", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ANTHONY_MACIAS_GABRIELA_N_ELLI", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ANTONIO_WHITFIELD_GERALD_ARTEA", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ARMANDO_VALDEZ_GIANCARLO_CONTR", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ARMANDO_VILLIN_PEREZ_JR_GIANCA", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ARMOND_GOODIN_GLENN_VISTANTE_N", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ASHLEY_IMAN_NICKSON_GRANT_J_MA", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ASHLEY_S_HOLLAND_GREG_HARTERT_", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_AVERY_BENNET_GREG_SANDS_PATRIC", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_BRAD_SAAVEDRA_GUSTAVO_FISCER_P", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_BRANDON_HUNTER_WILLIAMS_GUSTOV", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_BRANDON_L_HOOPER_HANNAH_CHAO_P", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_BRIAN_BENSI_HENRY_DYKSTRA_PAUL", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_BRYAN_CHICE_INDRA_YEE_PAUL_VIR", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_CAMERON_RAZAVI_ISAAC_LEE_RILEY", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_CARLOS_MONROY_JACK_MICHAEL_ROW", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_CARLOS_RUEDAYAMADA_JAMES_LARA_", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_CHAD_SCHMIDT_JAMES_HOOPER_REN_", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_CHANTEL_DELULIO_JASON_GARZA_RI", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_CHRIS_ARENDS_JASON_WONG_RICHAR", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_CHRIS_SARAJINA_JEFF_BARBERA_RI", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_CHRISTIAN_GOMEZ_JEFF_ROPER_RIC", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_CHRISTIAN_VASCO_JEROME_JARANIL", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_CHRISTOPHER_FINLAY_JOHANNA_RAM", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_CHRISTOPHER_M_GERFEN_JOHN_ROSS", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_CHRISTOPHER_R_GREEN_JOHNNY_KIM", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_CHRISTOPHER_S_CASTRO_JOHNNY_SA", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_CIARRA_NICOLE_INGLES_JONATHAN_", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_COLIN_CESA_JONATHAN_ESCOBEDO_R", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_COLIN_KAWAKAMI_JONATHAN_RAMSAY", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_CONOR_FALLEN_BAILEY_JONATHAN_S", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_COREY_A_ROGERS_JORGE_ROMERO_SA", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_CORY_MULLEN_JOSEPH_I_LEE_SASAN", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_DAMIEN_NICHOLS_JOSH_ROUNTREE_S", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_DAN_FRIEDMAN_JOSHUA_GREEN_SEAN", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_DAN_VO_JULIA_GRAMMER_SEAN_PAUL", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_DANIEL_A_SALAZAR_JUSTIN_MAUTNE", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_DANIEL_DE_JESUS_CALDERON_KAI_H", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_DANIEL_MALDONADO_KEITH_COX_SHA", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_DANTE_ASHLEY_KELLY_HUFFINE_SPE", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_DAVID_JOSEPH_SOLOMON_KENNETH_B", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_DAVID_SHAW_KENRIC_D_FRELIX_STE", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_DAVID_THOMAS_KIRT_SANCHEZ_STEV", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_DIANA_VINCENTY_KRIS_KAUTHEN_SU", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_DIEGO_CARRILLO_KYLE_MELTON_TEA", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_DO_HUN_RYAN_PARK_KYLE_R_JONES_", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_DOMINICK_MOZEE_KYUNGBUM_LEE_TI", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_DUSTIN_CARTER_LENARD_J_STATEN_", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_DUSTIN_SIEBERS_LEONARD_RODRIGU", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_DYLAN_SANTIZO_LUCAS_GOODMAN_VA", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_MARCO_ZAMORA_TOMMY_BLASHAW_WES", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_MARIO_BOTERO_TORRANCE_T_TROTTE", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_ACTIVISION_QUALITY_ASSURANCE_Q" );
maps\_credits::addcentertriple( undefined, &"CREDITS_ADAM_BLANCHETMAINVILLE_GUILLAU", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ALBERT_YAO_GUILLAUME_ROCHAT_MA", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ALEC_THIBAULT_GUILLAUME_WEBER_", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ALEX_TREMBLAY_HEIDI_NADEAU_MAT", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ALEXANDRE_DUFOURFOURNIER_HLNE_", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ALEXANDRE_GINGRAS_HENRICK_PELL", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ALEXANDRE_LAFOND_HUGO_ROY_MAXI", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ALEXANDRE_MATHIEUPLANTE_IAN_LV", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ALEXIS_BLANGER_LEBEL_IGOR_AGNA", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ALEXIS_BERNATCHEZ_IZAROZE_NERO", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ANDRANNE_FIOLA_JASON_BEAULIEU_", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ANNE_MTHOT_JASON_DECICCIO_MEDH", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ANTHONY_LEBRUNLAPOINTE_JASON_G", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ANTHONY_LTOURNEAU_JASON_PAGEAU", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ANTOINE_LAFLEUR_JEANFRANOIS_BO", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ANTOINE_LAPOINTE_JEANFRANOIS_G", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_BERNARD_BILODEAU_JEANFRANCOIS_", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_CATHERINE_BRUB_JEANFRANOIS_LE_", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_CATHERINE_GUERIN_JEANMICHEL_BL", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_CHARLES_DUFOUR_JEANMICHEL_GAGN", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_CHARLES_GRENIER_JEANMICHEL_VIN", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_CHARLESWILLIAM_GUAY_JEANPHILIP", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_CHRISTIAN_MORIN_JRMI_AUCLAIR_N", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_CHRISTOPHE_BLIVEAU_JEREMIE_BEA", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_DANIEL_GIRARD_JRMIE_GRATTON_NI", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_DANIEL_GOSSELIN_JRMY_GILBERT_N", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_DAVID_BEAUDIN_JEROME_SEGUINLAR", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_DAVID_FORTIN_JESSICA_DEBLOIS_P", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_DAVID_LEFEBVRE_JESSICA_DESROSI", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_DJAMEL_CAUFRIEZ_JESSICA_MOREAU", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_DOMINIC_POIRIER_JESSIE_STATES_", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_DONAVAN_LAPOINTE_JOBINLESSARD_", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ELLIOT_STEVENS_JONATHAN_LECLER", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_EMIL_UDDESTRAND_JONATHAN_LESSA", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_MILIE_SAINDON_JONATHAN_ROUSSEA", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_MILIE_VILLENEUVE_JOSE_LABOISSO", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ERIC_CT_JULIEN_LAVOIE_SAMUEL_D", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_RIC_LEGAULT_JUSTIN_MENS_SAMUEL", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ERIC_POULIOT_KASSANDRA_WILLIAM", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ETIENNE_DUB_KEVIN_GOULET_SBAST", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_FABIEN__DOYON_KVIN_PAR_SBASTIE", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_FARUK_KASTRATI_KEVIN_VALLE_SER", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_FELIX_LEBLANCBEAUREGARD_LAUREN", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_FELIX_PERRONBRAULT_LOUIS_BLANC", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_FRANCIS_GIROUXJOSEPH_LOUISALEX", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_FRANCIS_LEVASSEUR_LOUISOLIVIER", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_FRANCIS_MALTAIS_LUKAL_BLANGER_", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_FRANCIS_RODRIGUE_MAHDI_EL_MAAR", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_FRANCOIS_AUDETTE_MANUEL_LAMY_S", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_FRANOIS_SYLVAIN_MARCANDR_DUCHA", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_FRDRIC_DOLBECMASSON_MARCANDR_D", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_FRDRIC_GARNEAU_MARCANDR_LALIBE", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_FRDRICK_PERRY_LANDRY_MARCANDR_", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_GABRIEL_DION_MARCANTHONY_PERRE", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_GABRIEL_PELLETIER_MARCANTOINE_", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_GABRIEL_TACAAUBE_MARCHELLO_BOU", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_GABRIELLE_GOSSELIN_MARCO_CASTO", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_GUILLAUME_ALAIN_MARIEPIER_FORT", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_GUILLAUME_CLOUTIER_MARTIN_BEAU", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_GUILLAUME_GAGN_GAUTHIER_MARTIN", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_GUILLAUME_GAUTHIER_MARTIN_SYNN", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_GUILLAUME_LEMIEUX_MATHIEU_BIBE", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_GUILLAUME_LEMIEUXMARTEL_MATHIE", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_GUILLAUME_MORIN_MARIO_ORANTES_", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_ACTIVISION_QA_SPECIAL_THANKS" );
maps\_credits::addcentertriple( &"CREDITS_ABBY_ALVARADO", &"CREDITS_MALY_UM", &"CREDITS_MARIA_GONZALEZ" );
maps\_credits::addcentertriple( &"CREDITS_LOUISE_GRACE", &"CREDITS_MARC_WILLIAMS", &"CREDITS_RACHEL_OVERTON" );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_ACTIVISION_SPECIAL_THANKS" );
maps\_credits::addcentertriple( &"CREDITS_BOBBY_KOTICK", &"CREDITS_HAVOK", &"CREDITS_PHILIP_EARL" );
maps\_credits::addcentertriple( &"CREDITS_BRENT_MCDONALD", &"CREDITS_JASON_NORRID", &"CREDITS_RICK_GRUBEL" );
maps\_credits::addcentertriple( &"CREDITS_BRIAN_HODOUS", &"CREDITS_JEFF_PARKER", &"CREDITS_ROB_TROY" );
maps\_credits::addcentertriple( &"CREDITS_BYRON_BEEDE", &"CREDITS_JERROLD_GREEN", &"CREDITS_RYAN_VICKERS" );
maps\_credits::addcentertriple( &"CREDITS_CHETAN_DESAI", &"CREDITS_JESUS_RUIZ", &"CREDITS_SCOTT_BLAIR" );
maps\_credits::addcentertriple( &"CREDITS_CODDY_JOHNSON", &"CREDITS_JORGE_PERCIVAL", &"CREDITS_SCOTT_CARSON" );
maps\_credits::addcentertriple( &"CREDITS_CONNOR_CALLAGHAN", &"CREDITS_JULIANA_HAYES", &"CREDITS_SHANE_NEEDHAM" );
maps\_credits::addcentertriple( &"CREDITS_DANNY_GONZALEZ", &"CREDITS_KEVIN_WASIELEWSKI", &"CREDITS_STEPHEN_SANDERS" );
maps\_credits::addcentertriple( &"CREDITS_DAVE_OXFORD", &"CREDITS_MARQUIS_CANNON", &"CREDITS_STEVE_YOUNG" );
maps\_credits::addcentertriple( &"CREDITS_DAVIS_JUNG", &"CREDITS_MARYANNE_LATAIF", &"CREDITS_SUZANNE_TODD" );
maps\_credits::addcentertriple( &"CREDITS_DENNIS_DURKIN", &"CREDITS_MICHAL_SPORTOUCH", &"CREDITS_TEAM_TODD" );
maps\_credits::addcentertriple( &"CREDITS_ERIC_HIRSHBERG", &"CREDITS_NCOMPASS", &"CREDITS_THOMAS_TIPPL" );
maps\_credits::addcentertriple( &"CREDITS_ERIC_LYNCH", &"CREDITS_NJLIVE", &"CREDITS_TODD_MUELLER" );
maps\_credits::addcentertriple( &"CREDITS_FEDERICO_JIMENEZ", &"CREDITS_NOAH_KIRCHERALLEN", &"CREDITS_TONY_HSU" );
maps\_credits::addcentertriple( &"CREDITS_GLENN_OLIVER", &"CREDITS_PAT_KELLY", &"CREDITS_72_AND_SUNNY" );
maps\_credits::addcentertriple( undefined, &"CREDITS_REMINGTON_ARMS_COMPANY_INC", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_LOCALISATION_TOOLS__SUPPORT" );
maps\_credits::addcentertriple( undefined, &"CREDITS_PROVIDED_BY_STEPHANIE_DEMING__", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_PACKAGING_AND_MANUAL_DESIGN_BY" );
maps\_credits::addcentertriple( undefined, &"CREDITS_PETROL", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_FONTS_LICENSED_FROM" );
maps\_credits::addcentertriple( undefined, &"CREDITS_T26_DIGITAL_TYPE_FOUNDRY", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_FOOTAGE_AND_STILL_IMAGES_SUPPL" );
maps\_credits::addcentertriple( undefined, &"CREDITS_GETTY_IMAGES", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_CORBIS_MOTION", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_SURVIVAL" );
maps\_credits::addcentertriple( undefined, &"CREDITS_PERFORMED_BY_EMINEM", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_COURTESY_OF_INTERSCOPE_RECORDS", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_WRITTEN_BY_MARSHALL_MATHERS_KH", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ERIK_ALCOCK_LIZ_RODRIGUES_PRAN", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_PUBLISHED_BY_UNIVERSAL_MUSIC_P", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_SHROOM_SHADY_MUSIC_BMI_JALEESA", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_BMI_ADMIN_UNIVERSAL_MUSICBMITR", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_CANADAMATRIZ_MUSICSOCAN_ADMIN_", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ALL_RIGHTS_RESERVED_USED_BY_PE", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_2013", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_SCORCHER" );
maps\_credits::addcentertriple( undefined, &"CREDITS_COMPOSED_BY_GEENEUS_PRS", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_PUBLISHED_BY_KPM_APM_ASCAP", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_COURTESY_OF_APM_MUSIC", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentersubtitle( &"CREDITS_EL_ESTADERO_A" );
maps\_credits::addcentertriple( undefined, &"CREDITS_LICENSED_COURTESY_OF_APM_MUSIC", undefined );
maps\_credits::addspacesmall();
maps\_credits::addspacesmall();
maps\_credits::addcentertriple( undefined, &"CREDITS_DEPSOC360_DEPSOC_OLD_DESERT_DE", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_DEPSOC_FOREST_FLOOR_DEPSOC_SPR", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_DEPSOC_BRUSHLAND_DEPSOC_WINTER", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_PRODUCED_AND_DISTRIBUTED_BY_MM", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ALL_PATTERNS_AND_MARKS_ARE_COP", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentertriple( undefined, &"CREDITS_ATACS_AU_CAMO_AND_ATACS_FG_CAM", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_2013_DIGITAL_CONCEALMENT_SYSTE", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentertriple( undefined, &"CREDITS_USES_BINK_VIDEO_COPYRIGHT__199", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentertriple( undefined, &"CREDITS_USES_MILES_SOUND_SYSTEM_COPYRI", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentertriple( undefined, &"CREDITS_CALL_OF_DUTY__GHOSTS_USES_HAVO", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_ALL_RIGHTS_RESERVED_SEE_WWWHAV", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentertriple( undefined, &"CREDITS_USES_UMBRA_3__2013_BY_UMBRA_SO", undefined );
maps\_credits::addspacesmall();
if ( !level.console || level.ps3 || level.ps4 || level.xenon )
maps\_credits::addcentertriple( undefined, &"CREDITS_DOLBY_PRO_LOGIC_AND_THE_DOUBLE", undefined );
if ( !level.console )
maps\_credits::addcentertriple( undefined, &"CREDITS_PC_AUDIO_SOLUTION_CONTAINING_D", undefined );
if ( !level.console )
maps\_credits::addcentertriple( undefined, &"CREDITS_REQUIRED_FOR_DOLBY_DIGITAL_AUD", undefined );
maps\_credits::addspacesmall();
maps\_credits::addcentertriple( undefined, &"CREDITS_HOLLYWOOD__DESIGN__2013_HOLLYW", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_THE_HOLLYWOOD_SIGN_IS_A_TRADEM", undefined );
maps\_credits::addcentertriple( undefined, &"CREDITS_OF_HOLLYWOOD_CHAMBER_OF_COMMER", undefined );
}

89
maps/_damagefeedback.gsc Normal file
View File

@ -0,0 +1,89 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
precacheshader( "damage_feedback" );
common_scripts\utility::array_thread( level.players, ::init_damage_feedback );
common_scripts\utility::array_thread( level.players, ::monitordamage );
}
init_damage_feedback()
{
self.hud_damagefeedback = newclienthudelem( self );
self.hud_damagefeedback.alignx = "center";
self.hud_damagefeedback.aligny = "middle";
self.hud_damagefeedback.horzalign = "center";
self.hud_damagefeedback.vertalign = "middle";
self.hud_damagefeedback.alpha = 0;
self.hud_damagefeedback.archived = 1;
self.hud_damagefeedback setshader( "damage_feedback", 24, 48 );
self.hud_damagefeedback.y = 12;
}
monitordamage()
{
maps\_utility::add_damage_function( ::damagefeedback_took_damage );
}
stopmonitordamage()
{
maps\_utility::remove_damage_function( ::damagefeedback_took_damage );
}
damagefeedback_took_damage( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
{
if ( !isplayer( var_1 ) )
return;
if ( !maps\_utility::is_damagefeedback_enabled() )
return;
if ( isdefined( self.bullet_resistance ) )
{
var_7 = [];
var_7["MOD_PISTOL_BULLET"] = 1;
var_7["MOD_RIFLE_BULLET"] = 1;
if ( isdefined( var_7[var_4] ) )
{
if ( var_0 <= self.bullet_resistance )
return;
}
}
var_1 updatedamagefeedback( self );
}
updatedamagefeedback( var_0 )
{
if ( !isplayer( self ) )
return;
if ( !isdefined( var_0.team ) )
return;
if ( var_0.team == self.team || var_0.team == "neutral" )
return;
if ( isdefined( var_0.magic_bullet_shield ) && var_0.magic_bullet_shield )
return;
if ( isdefined( var_0.godmode ) && var_0.godmode )
return;
if ( isdefined( var_0.script_godmode ) && var_0.script_godmode )
return;
self playlocalsound( "SP_hit_alert" );
var_1 = 1;
if ( isdefined( level.slowmo.speed_slow ) )
var_1 = level.slowmo.speed_slow;
self.hud_damagefeedback.alpha = 1;
self.hud_damagefeedback fadeovertime( var_1 );
self.hud_damagefeedback.alpha = 0;
var_2 = getdvarfloat( "cg_crosshairVerticalOffset" ) * 240;
self.hud_damagefeedback.y = 12 - int( var_2 );
}

91
maps/_deadbody.gsc Normal file
View File

@ -0,0 +1,91 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
#using_animtree("generic_human");
main()
{
level.scr_anim["dead_guy"]["death1"] = %exposed_death_nerve;
level.scr_anim["dead_guy"]["death2"] = %exposed_death_falltoknees;
level.scr_anim["dead_guy"]["death3"] = %exposed_death_headtwist;
level.scr_anim["dead_guy"]["death4"] = %exposed_crouch_death_twist;
level.scr_anim["dead_guy"]["death5"] = %exposed_crouch_death_fetal;
level.scr_anim["dead_guy"]["death6"] = %death_sitting_pose_v1;
level.scr_anim["dead_guy"]["death7"] = %death_sitting_pose_v2;
level.scr_anim["dead_guy"]["death8"] = %death_pose_on_desk;
level.scr_anim["dead_guy"]["death9"] = %death_pose_on_window;
level.scr_animtree["dead_guy"] = #animtree;
level.dead_body_count = 1;
var_0 = getdvarint( "ragdoll_max_simulating" ) - 6;
if ( var_0 > 0 )
level.max_number_of_dead_bodies = var_0;
else
level.max_number_of_dead_bodies = 0;
var_1 = spawnstruct();
var_1.bodies = [];
common_scripts\utility::run_thread_on_targetname( "trigger_body", ::trigger_body, var_1 );
common_scripts\utility::run_thread_on_targetname( "dead_body", ::spawn_dead_body, var_1 );
}
trigger_body( var_0 )
{
self waittill( "trigger" );
var_1 = getentarray( self.target, "targetname" );
common_scripts\utility::array_thread( var_1, ::spawn_dead_body, var_0 );
}
spawn_dead_body( var_0 )
{
if ( !getdvarint( "ragdoll_enable" ) && isdefined( self.script_parameters ) && self.script_parameters == "require_ragdoll" )
return;
if ( level.max_number_of_dead_bodies == 0 )
return;
var_1 = undefined;
if ( isdefined( self.script_index ) )
var_1 = self.script_index;
else
{
level.dead_body_count++;
if ( level.dead_body_count > 3 )
level.dead_body_count = 1;
var_1 = level.dead_body_count;
}
var_2 = spawn( "script_model", ( 0, 0, 0 ) );
var_2.origin = self.origin;
var_2.angles = self.angles;
var_2.animname = "dead_guy";
var_2 maps\_utility::assign_animtree();
var_0 que_body( var_2 );
var_2 [[ level.scr_deadbody[var_1] ]]();
if ( !isdefined( self.script_trace ) )
{
var_3 = bullettrace( var_2.origin + ( 0, 0, 5 ), var_2.origin + ( 0, 0, -64 ), 0, undefined );
var_2.origin = var_3["position"];
}
var_2 setflaggedanim( "flag", var_2 maps\_utility::getanim( self.script_noteworthy ), 1, 0, 1 );
var_2 waittillmatch( "flag", "end" );
if ( !isdefined( self.script_start ) )
var_2 startragdoll();
}
que_body( var_0 )
{
self.bodies[self.bodies.size] = var_0;
if ( self.bodies.size <= level.max_number_of_dead_bodies )
return;
self.bodies[0] delete();
self.bodies = common_scripts\utility::array_removeundefined( self.bodies );
}

1638
maps/_debug.gsc Normal file

File diff suppressed because it is too large Load Diff

609
maps/_detonategrenades.gsc Normal file
View File

@ -0,0 +1,609 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
level._effect["c4_light_blink"] = loadfx( "fx/misc/light_c4_blink" );
level._effect["claymore_laser"] = loadfx( "fx/misc/claymore_laser" );
for ( var_0 = 0; var_0 < level.players.size; var_0++ )
level.players[var_0] thread watchgrenadeusage();
}
watchgrenadeusage()
{
level.c4explodethisframe = 0;
self endon( "death" );
self.c4array = [];
self.throwinggrenade = 0;
thread watchc4();
thread watchc4detonation();
thread watchc4altdetonation();
thread watchclaymores();
thread begin_semtex_grenade_tracking();
thread begin_concussion_grenade_tracking();
for (;;)
{
self waittill( "grenade_pullback", var_0 );
self.throwinggrenade = 1;
if ( var_0 == "c4" )
{
beginc4tracking();
continue;
}
if ( var_0 == "smoke_grenade_american" )
{
beginsmokegrenadetracking();
continue;
}
if ( var_0 == "flash_grenade" )
{
beginflashgrenadetracking();
continue;
}
begingrenadetracking();
}
}
beginsmokegrenadetracking()
{
self waittill( "grenade_fire", var_0, var_1 );
if ( !isdefined( level.smokegrenades ) )
level.smokegrenades = 0;
var_0 thread smoke_grenade_death();
}
beginflashgrenadetracking()
{
self.throwinggrenade = 0;
var_0 = gettime();
self waittill( "grenade_fire", var_1, var_2 );
if ( isdefined( var_1 ) )
{
var_3 = gettime();
var_4 = var_3 - var_0;
if ( var_4 >= 1250 )
{
var_1 waittill( "explode", var_5 );
if ( soundexists( "grenade_explode_default" ) )
thread common_scripts\utility::play_sound_in_space( "grenade_explode_default", var_5 );
radiusdamage( var_5, 96, 300, 200, self, "MOD_UNKNOWN", "flash_grenade" );
}
}
}
begin_semtex_grenade_tracking()
{
for (;;)
{
self waittill( "grenade_fire", var_0, var_1 );
if ( var_1 == "semtex_grenade" )
{
thread track_semtex_grenade( var_0 );
var_0 thread semtex_sticky_handle( self );
}
}
}
track_semtex_grenade( var_0 )
{
self.throwinggrenade = 0;
if ( !isdefined( level.thrown_semtex_grenades ) )
level.thrown_semtex_grenades = 1;
else
level.thrown_semtex_grenades++;
var_0 waittill( "death" );
waittillframeend;
level.thrown_semtex_grenades--;
}
semtex_sticky_handle( var_0 )
{
self waittill( "missile_stuck", var_1 );
if ( !isdefined( var_1 ) )
return;
if ( var_1.code_classname != "script_vehicle" )
return;
var_1.has_semtex_on_it = 1;
self waittill( "explode" );
if ( !isdefined( var_1 ) || !isalive( var_1 ) )
return;
if ( var_1 maps\_vehicle::is_godmode() || var_1 maps\_vehicle_code::attacker_isonmyteam( var_0 ) )
{
var_1.has_semtex_on_it = undefined;
return;
}
var_1 kill( var_1.origin, var_0 );
}
begin_concussion_grenade_tracking()
{
for (;;)
{
self waittill( "grenade_fire", var_0, var_1 );
if ( var_1 == "concussion_grenade" )
thread track_concussion_grenade( var_0 );
}
}
track_concussion_grenade( var_0 )
{
self.throwinggrenade = 0;
var_0 waittill( "death" );
maps\_utility::slowmo_setlerptime_in( 0.1 );
maps\_utility::slowmo_setlerptime_out( 0.25 );
maps\_utility::slowmo_setspeed_norm( 1 );
maps\_utility::slowmo_setspeed_slow( 0.25 );
maps\_utility::slowmo_lerp_in();
setdvar( "noflash", "1" );
wait 0.05;
setdvar( "noflash", "0" );
wait 2.0;
maps\_utility::slowmo_lerp_out();
}
smoke_grenade_death()
{
level.smokegrenades++;
wait 50;
level.smokegrenades--;
}
begingrenadetracking()
{
self endon( "death" );
self waittill( "grenade_fire", var_0, var_1 );
if ( var_1 == "fraggrenade" )
var_0 thread maps\_utility::grenade_earthquake();
else if ( var_1 == "ninebang_grenade" )
self.threw_ninebang = 1;
self.throwinggrenade = 0;
}
beginc4tracking()
{
self endon( "death" );
common_scripts\utility::waittill_any( "grenade_fire", "weapon_change" );
self.throwinggrenade = 0;
}
watchc4()
{
for (;;)
{
self waittill( "grenade_fire", var_0, var_1 );
if ( var_1 == "c4" )
{
if ( !self.c4array.size )
thread watchc4altdetonate();
self.c4array[self.c4array.size] = var_0;
var_0.owner = self;
var_0 thread c4damage();
thread c4death( var_0 );
var_0 thread playc4effects();
}
}
}
c4death( var_0 )
{
var_0 waittill( "death" );
self.c4array = maps\_utility::array_remove_nokeys( self.c4array, var_0 );
}
watchclaymores()
{
self endon( "spawned_player" );
self endon( "disconnect" );
for (;;)
{
self waittill( "grenade_fire", var_0, var_1 );
if ( var_1 == "claymore" || var_1 == "claymore_mp" )
{
var_0.owner = self;
var_0 thread c4damage();
var_0 thread claymoredetonation();
var_0 thread playclaymoreeffects();
var_0 thread claymoremakesentient( self.team );
}
}
}
claymoremakesentient( var_0 )
{
self endon( "death" );
wait 1;
if ( isdefined( level.claymoresentientfunc ) )
{
self thread [[ level.claymoresentientfunc ]]( var_0 );
return;
}
self makeentitysentient( var_0, 1 );
self.attackeraccuracy = 2;
self.maxvisibledist = 750;
self.threatbias = -1000;
}
claymoredetonation()
{
self endon( "death" );
self waittill( "missile_stuck" );
var_0 = 192;
if ( isdefined( self.detonateradius ) )
var_0 = self.detonateradius;
var_1 = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - var_0 ), 9, var_0, var_0 * 2 );
thread deleteondeath( var_1 );
if ( !isdefined( level.claymores ) )
level.claymores = [];
level.claymores = common_scripts\utility::array_add( level.claymores, self );
if ( !maps\_utility::is_specialop() && level.claymores.size > 15 )
level.claymores[0] delete();
for (;;)
{
var_1 waittill( "trigger", var_2 );
if ( isdefined( self.owner ) && var_2 == self.owner )
continue;
if ( isplayer( var_2 ) )
continue;
if ( var_2 damageconetrace( self.origin, self ) > 0 )
{
self playsound( "claymore_activated_SP" );
wait 0.4;
if ( isdefined( self.owner ) )
self detonate( self.owner );
else
self detonate( undefined );
return;
}
}
}
deleteondeath( var_0 )
{
self waittill( "death" );
level.claymores = maps\_utility::array_remove_nokeys( level.claymores, self );
wait 0.05;
if ( isdefined( var_0 ) )
var_0 delete();
}
watchc4detonation()
{
self endon( "death" );
for (;;)
{
self waittill( "detonate" );
var_0 = self getcurrentweapon();
if ( var_0 == "c4" )
{
for ( var_1 = 0; var_1 < self.c4array.size; var_1++ )
{
if ( isdefined( self.c4array[var_1] ) )
self.c4array[var_1] thread waitanddetonate( 0.1 );
}
self.c4array = [];
}
}
}
watchc4altdetonation()
{
self endon( "death" );
self endon( "disconnect" );
for (;;)
{
self waittill( "alt_detonate" );
var_0 = self getcurrentweapon();
if ( var_0 != "c4" )
{
var_1 = [];
for ( var_2 = 0; var_2 < self.c4array.size; var_2++ )
{
var_3 = self.c4array[var_2];
if ( isdefined( self.c4array[var_2] ) )
var_3 thread waitanddetonate( 0.1 );
}
self.c4array = var_1;
self notify( "detonated" );
}
}
}
waitanddetonate( var_0 )
{
self endon( "death" );
wait( var_0 );
self detonate();
}
c4damage()
{
self.health = 100;
self setcandamage( 1 );
self.maxhealth = 100000;
self.health = self.maxhealth;
var_0 = undefined;
for (;;)
{
self waittill( "damage", var_1, var_0 );
break;
}
self playsound( "claymore_activated_SP" );
if ( level.c4explodethisframe )
wait( 0.1 + randomfloat( 0.4 ) );
else
wait 0.05;
if ( !isdefined( self ) )
return;
level.c4explodethisframe = 1;
thread resetc4explodethisframe();
if ( isplayer( var_0 ) )
self detonate( var_0 );
else
self detonate();
}
resetc4explodethisframe()
{
wait 0.05;
level.c4explodethisframe = 0;
}
saydamaged( var_0, var_1 )
{
for ( var_2 = 0; var_2 < 60; var_2++ )
wait 0.05;
}
playc4effects()
{
self endon( "death" );
self waittill( "missile_stuck" );
playfxontag( common_scripts\utility::getfx( "c4_light_blink" ), self, "tag_fx" );
}
playclaymoreeffects()
{
self endon( "death" );
self waittill( "missile_stuck" );
playfxontag( common_scripts\utility::getfx( "claymore_laser" ), self, "tag_fx" );
}
clearfxondeath( var_0 )
{
self waittill( "death" );
var_0 delete();
}
getdamageableents( var_0, var_1, var_2, var_3 )
{
var_4 = [];
if ( !isdefined( var_2 ) )
var_2 = 0;
if ( !isdefined( var_3 ) )
var_3 = 0;
for ( var_5 = 0; var_5 < level.players.size; var_5++ )
{
if ( !isalive( level.players[var_5] ) || level.players[var_5].sessionstate != "playing" )
continue;
var_6 = level.players[var_5].origin + ( 0, 0, 32 );
var_7 = distance( var_0, var_6 );
if ( var_7 < var_1 && ( !var_2 || weapondamagetracepassed( var_0, var_6, var_3, undefined ) ) )
{
var_8 = spawnstruct();
var_8.isplayer = 1;
var_8.isadestructable = 0;
var_8.entity = level.players[var_5];
var_8.damagecenter = var_6;
var_4[var_4.size] = var_8;
}
}
var_9 = getentarray( "grenade", "classname" );
for ( var_5 = 0; var_5 < var_9.size; var_5++ )
{
var_10 = var_9[var_5].origin;
var_7 = distance( var_0, var_10 );
if ( var_7 < var_1 && ( !var_2 || weapondamagetracepassed( var_0, var_10, var_3, var_9[var_5] ) ) )
{
var_8 = spawnstruct();
var_8.isplayer = 0;
var_8.isadestructable = 0;
var_8.entity = var_9[var_5];
var_8.damagecenter = var_10;
var_4[var_4.size] = var_8;
}
}
var_11 = getentarray( "destructable", "targetname" );
for ( var_5 = 0; var_5 < var_11.size; var_5++ )
{
var_10 = var_11[var_5].origin;
var_7 = distance( var_0, var_10 );
if ( var_7 < var_1 && ( !var_2 || weapondamagetracepassed( var_0, var_10, var_3, var_11[var_5] ) ) )
{
var_8 = spawnstruct();
var_8.isplayer = 0;
var_8.isadestructable = 1;
var_8.entity = var_11[var_5];
var_8.damagecenter = var_10;
var_4[var_4.size] = var_8;
}
}
return var_4;
}
weapondamagetracepassed( var_0, var_1, var_2, var_3 )
{
var_4 = undefined;
var_5 = var_1 - var_0;
if ( lengthsquared( var_5 ) < var_2 * var_2 )
var_4 = var_1;
var_6 = vectornormalize( var_5 );
var_4 = var_0 + ( var_6[0] * var_2, var_6[1] * var_2, var_6[2] * var_2 );
var_7 = bullettrace( var_4, var_1, 0, var_3 );
if ( getdvarint( "scr_damage_debug" ) != 0 )
{
if ( var_7["fraction"] == 1 )
thread debugline( var_4, var_1, ( 1, 1, 1 ) );
else
{
thread debugline( var_4, var_7["position"], ( 1, 0.9, 0.8 ) );
thread debugline( var_7["position"], var_1, ( 1, 0.4, 0.3 ) );
}
}
return var_7["fraction"] == 1;
}
damageent( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
{
if ( self.isplayer )
{
self.damageorigin = var_5;
self.entity thread [[ level.callbackplayerdamage ]]( var_0, var_1, var_2, 0, var_3, var_4, var_5, var_6, "none", 0 );
}
else
{
if ( self.isadestructable && ( var_4 == "artillery_mp" || var_4 == "claymore_mp" ) )
return;
self.entity notify( "damage", var_2, var_1 );
}
}
debugline( var_0, var_1, var_2 )
{
for ( var_3 = 0; var_3 < 600; var_3++ )
wait 0.05;
}
onweapondamage( var_0, var_1, var_2, var_3 )
{
self endon( "death" );
switch ( var_1 )
{
case "concussion_grenade_mp":
var_4 = 512;
var_5 = 1 - distance( self.origin, var_0.origin ) / var_4;
var_6 = 1 + 4 * var_5;
wait 0.05;
self shellshock( "concussion_grenade_mp", var_6 );
break;
default:
break;
}
}
watchc4altdetonate()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "detonated" );
level endon( "game_ended" );
var_0 = 0;
for (;;)
{
if ( self usebuttonpressed() )
{
var_0 = 0;
while ( self usebuttonpressed() )
{
var_0 = var_0 + 0.05;
wait 0.05;
}
if ( var_0 >= 0.5 )
continue;
var_0 = 0;
while ( !self usebuttonpressed() && var_0 < 0.5 )
{
var_0 = var_0 + 0.05;
wait 0.05;
}
if ( var_0 >= 0.5 )
continue;
if ( !self.c4array.size )
return;
self notify( "alt_detonate" );
}
wait 0.05;
}
}

925
maps/_dog_control.gsc Normal file
View File

@ -0,0 +1,925 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
#using_animtree("dog");
init_dog_control()
{
precachestring( &"SCRIPT_DOG_NOTARGET" );
precachestring( &"SCRIPT_DOG_NOTREADY" );
createthreatbiasgroup( "dog" );
createthreatbiasgroup( "dog_targets" );
setignoremegroup( "dog_targets", "allies" );
level.scr_anim["dog"]["dog_bark"] = %iw6_dog_attackidle_bark;
common_scripts\utility::flag_init( "enable_dog_pip" );
}
enable_dog_control( var_0 )
{
var_0.animname = "dog";
if ( !var_0 maps\_utility::ent_flag_exist( "dog_no_teleport" ) )
var_0 maps\_utility::ent_flag_init( "dog_no_teleport" );
if ( !var_0 maps\_utility::ent_flag_exist( "dog_cooldown" ) )
var_0 maps\_utility::ent_flag_init( "dog_cooldown" );
if ( !var_0 maps\_utility::ent_flag_exist( "running_dog_command" ) )
var_0 maps\_utility::ent_flag_init( "running_dog_command" );
if ( !var_0 maps\_utility::ent_flag_exist( "pause_dog_command" ) )
var_0 maps\_utility::ent_flag_init( "pause_dog_command" );
if ( !var_0 maps\_utility::ent_flag_exist( "cancel_command_disabled" ) )
var_0 maps\_utility::ent_flag_init( "cancel_command_disabled" );
self.controlled_dog = var_0;
var_0.player_controller = self;
childthread give_laser();
childthread listen_for_dog_commands( var_0 );
if ( !isdefined( self.notargethudelem ) )
{
self.notargethudelem = maps\_hud_util::createclientfontstring( "default", 1.1 );
self.notargethudelem maps\_hud_util::setpoint( "CENTER", "CENTER", 0, -15, 0 );
self.notargethudelem settext( "No Target" );
self.notargethudelem.alpha = 0;
}
self takeweapon( "flash_grenade" );
self.controlled_dog.dog_marker = common_scripts\utility::spawn_tag_origin();
setdvar( "ui_dog_grenade", 1 );
thread ui_dog_grenade_logic();
if ( level.xb3 )
maps\_dog_kinect::speechcommands();
}
disable_dog_control()
{
self notify( "disable_dog_control" );
self.controlled_dog = undefined;
self.controlled_dog.dog_marker delete();
self enableoffhandweapons();
setdvar( "ui_dog_grenade", 0 );
}
listen_for_dog_commands( var_0 )
{
self endon( "death" );
var_0 endon( "death" );
self endon( "disable_dog_control" );
for (;;)
{
self waittill( "issue_dog_command", var_1, var_2, var_3 );
if ( var_0 maps\_utility::ent_flag( "pause_dog_command" ) )
continue;
if ( var_0 maps\_utility::ent_flag( "dog_cooldown" ) || isdefined( var_0.in_melee ) && var_0.in_melee )
{
thread display_no_target( &"SCRIPT_DOG_NOTREADY", 2 );
continue;
}
if ( isdefined( var_0.animnode ) )
{
var_0 stopanimscripted();
var_0.animnode notify( "stop_loop" );
}
var_0 thread run_dog_command( var_1, var_2, var_3 );
}
}
isneargrenade()
{
var_0 = getentarray( "grenade", "classname" );
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
{
var_2 = var_0[var_1];
if ( var_2.model == "weapon_claymore" )
continue;
for ( var_3 = 0; var_3 < level.players.size; var_3++ )
{
var_4 = level.players[var_3];
if ( distancesquared( var_2.origin, var_4.origin ) < 36864 )
return 1;
}
}
return 0;
}
give_laser()
{
level.see_enemy_dot = 0.985;
level.see_enemy_dot_close = 0.99;
self endon( "disable_dog_control" );
self endon( "remove_laser" );
self.lastusedweapon = undefined;
self notifyonplayercommand( "fired_laser", "+smoke" );
childthread laser_designate_target();
childthread listen_for_cancel();
}
laser_designate_target()
{
for (;;)
{
self waittill( "fired_laser" );
var_0 = get_laser_designated_trace();
var_1 = undefined;
var_2 = getaiarray( "axis" );
var_3 = [];
var_4 = self;
var_5 = var_4 get_eye();
if ( isdefined( var_0["entity"] ) && isai( var_0["entity"] ) )
{
if ( isalive( var_0["entity"] ) && var_0["entity"].team != "allies" && var_0["entity"].type != "dog" )
var_1 = var_0["entity"];
}
if ( !isdefined( var_1 ) )
{
var_6 = level.see_enemy_dot_close;
foreach ( var_8 in var_2 )
{
if ( var_8.type == "dog" )
continue;
var_9 = var_8 gettagorigin( "J_SpineUpper" );
var_10 = vectortoangles( var_9 - var_5 );
var_11 = anglestoforward( var_10 );
var_12 = var_4 getplayerangles();
var_13 = anglestoforward( var_12 );
var_14 = vectordot( var_11, var_13 );
if ( var_14 > var_6 )
var_3 = common_scripts\utility::array_add( var_3, var_8 );
}
if ( var_3.size > 0 )
{
var_3 = sortbydistance( var_3, var_5 );
foreach ( var_8 in var_3 )
{
if ( test_trace( var_8 geteye(), var_5, var_4.controlled_dog ) )
{
var_1 = var_8;
break;
}
}
}
}
if ( !isdefined( var_1 ) )
{
var_6 = level.see_enemy_dot;
foreach ( var_8 in var_2 )
{
if ( var_8.type == "dog" )
continue;
var_9 = var_8 gettagorigin( "J_SpineUpper" );
var_10 = vectortoangles( var_9 - var_5 );
var_11 = anglestoforward( var_10 );
var_12 = var_4 getplayerangles();
var_13 = anglestoforward( var_12 );
var_14 = vectordot( var_11, var_13 );
if ( var_14 > var_6 && test_trace( var_8 geteye(), var_5, var_4.controlled_dog ) )
{
var_1 = var_8;
var_6 = var_14;
}
}
}
self notify( "issue_dog_command", var_0, undefined, var_1 );
if ( isdefined( var_1 ) )
wait 2;
}
}
test_trace( var_0, var_1, var_2 )
{
var_3 = bullettrace( var_0, var_1, 0, var_2 );
return var_3["fraction"] == 1;
}
listen_for_cancel()
{
for (;;)
{
self waittill( "cancel_command" );
if ( !self.controlled_dog maps\_utility::ent_flag( "cancel_command_disabled" ) )
{
var_0 = get_laser_designated_trace();
self notify( "issue_dog_command", var_0, self );
}
wait 0.1;
}
}
get_laser_designated_trace()
{
var_0 = get_eye();
var_1 = self getplayerangles();
var_2 = anglestoforward( var_1 );
var_0 = var_0 + var_2 * 20;
var_3 = var_0 + var_2 * 7000;
var_4 = bullettrace( var_0, var_3, 1, self.controlled_dog );
var_5 = var_4["entity"];
if ( isdefined( var_5 ) )
var_4["position"] = var_5.origin;
return var_4;
}
run_dog_command( var_0, var_1, var_2 )
{
self endon( "death" );
if ( var_0["fraction"] >= 0.98 && !isdefined( var_1 ) )
{
if ( !maps\_utility::ent_flag( "running_dog_command" ) )
self.player_controller thread display_no_target( &"SCRIPT_DOG_NOTARGET", 1.75 );
return;
}
var_3 = var_0["position"];
if ( isdefined( var_2 ) )
var_4 = var_2;
else
var_4 = enemy_near_position( var_0["position"] );
var_5 = get_flush_volume( var_3 );
if ( !isdefined( var_2 ) && !isdefined( var_1 ) && !isdefined( var_5 ) )
{
if ( !maps\_utility::ent_flag( "running_dog_command" ) )
self.player_controller thread display_no_target( &"SCRIPT_DOG_NOTARGET", 1.75 );
return;
}
self notify( "new_dog_command" );
self hudoutlinedisable();
self endon( "new_dog_command" );
maps\_utility::ent_flag_set( "running_dog_command" );
var_6 = isdefined( self.script_forcecolor ) || isdefined( self.script_old_forcecolor );
if ( var_6 && isdefined( self.script_forcecolor ) )
self.script_old_forcecolor = self.script_forcecolor;
if ( isdefined( self.current_follow_path ) )
{
self.old_path = self.current_follow_path;
self notify( "stop_path" );
}
if ( isdefined( self.doghandler ) )
{
self.oldhandler = self.doghandler;
self setdoghandler();
}
maps\_utility::disable_ai_color();
self.dog_marker unlink();
self.dog_marker.origin = var_3;
self.dog_marker.angles = vectortoangles( var_0["normal"] );
if ( !isdefined( self.dc_old_moveplaybackrate ) )
self.dc_old_moveplaybackrate = self.moveplaybackrate;
self.moveplaybackrate = 1;
if ( self.a.movement == "walk" )
{
self.was_walking = 1;
maps\_utility::clear_run_anim();
}
if ( isdefined( var_1 ) )
dog_command_cancel( var_1 );
else if ( isdefined( var_5 ) )
dog_command_flush( var_5, var_0 );
else if ( isdefined( var_4 ) )
{
self.script_nostairs = 1;
maps\_utility::set_hudoutline( "friendly", 0 );
self.moveplaybackrate = 1;
maps\_utility::enable_sprint();
var_7 = dog_command_attack( var_4 );
if ( isdefined( var_7 ) && var_7 == "attack" )
{
if ( isalive( var_4 ) )
{
if ( isdefined( self.in_melee ) && self.in_melee )
var_4 waittill( "death" );
}
}
else
{
wait 0.5;
if ( !isdefined( self.in_melee ) || !self.in_melee )
self clearenemy();
}
if ( isdefined( self.old_ai_target ) )
{
self.old_ai_target hudoutlinedisable();
self.favoriteenemy = undefined;
}
maps\_utility::disable_sprint();
self hudoutlinedisable();
}
else
dog_command_goto( var_0 );
self.script_nostairs = undefined;
self hudoutlinedisable();
if ( isdefined( self.oldhandler ) )
{
self setdoghandler( self.oldhandler );
self setgoalentity( self.oldhandler );
}
else if ( var_6 && isdefined( self.script_old_forcecolor ) )
{
var_8 = undefined;
if ( isdefined( self.script_color_delay_override ) )
{
var_8 = self.script_color_delay_override;
self.script_color_delay_override = undefined;
}
maps\_utility::enable_ai_color();
self.script_old_forcecolor = undefined;
self.old_path = undefined;
if ( isdefined( var_8 ) )
self.script_color_delay_override = var_8;
}
else if ( isdefined( self.old_path ) )
{
thread maps\_utility::follow_path_and_animate( self.old_path );
self.old_path = undefined;
}
if ( isdefined( self.dc_old_moveplaybackrate ) )
{
common_scripts\utility::waittill_notify_or_timeout( "goal", 5 );
if ( isdefined( self.dc_old_moveplaybackrate ) )
{
self.moveplaybackrate = self.dc_old_moveplaybackrate;
self.dc_old_moveplaybackrate = undefined;
}
}
if ( isdefined( self.was_walking ) && self.was_walking )
{
self.was_walking = undefined;
maps\_utility::set_dog_walk_anim();
}
self.oldhandler = undefined;
maps\_utility::ent_flag_clear( "running_dog_command" );
self notify( "dog_command_complete" );
}
dog_command_flush( var_0, var_1 )
{
self endon( "new_dog_command" );
var_2 = var_1["position"];
wait 0.05;
playfxontag( common_scripts\utility::getfx( "target_marker_yellow" ), self.dog_marker, "tag_origin" );
thread maps\_utility::play_sound_on_entity( "anml_dog_bark" );
var_3 = level.dog_flush_functions[var_0.script_noteworthy];
self childthread [[ var_3 ]]( var_0, var_1 );
level waittill( "dog_flush_started" );
var_0.done_flushing = 1;
level waittill( "dog_flush_done" );
}
dog_command_cancel( var_0 )
{
if ( isdefined( self.favoriteenemy ) )
{
if ( isdefined( self.favoriteenemy.oldignoreme ) )
self.favoriteenemy.ignoreme = self.favoriteenemy.oldignoreme;
self.favoriteenemy = undefined;
}
if ( isdefined( self.old_moveplaybackrate ) )
{
self.moveplaybackrate = self.old_moveplaybackrate;
self.old_moveplaybackrate = undefined;
}
}
dog_command_attack( var_0 )
{
self endon( "damage" );
self endon( "cancel_dog_attack" );
self notify( "dog_command_attack", var_0 );
self.dog_marker linkto( var_0, "tag_origin", ( 0, 0, 0 ), ( -90, 0, -90 ) );
wait 0.05;
if ( !isalive( var_0 ) )
return "bail";
self.script_nostairs = 1;
if ( isdefined( self.old_ai_target ) && self.old_ai_target != var_0 )
self.old_ai_target hudoutlinedisable();
var_0 thread hud_outlineenable();
if ( isdefined( var_0.dog_attack_alt_func ) )
self [[ var_0.dog_attack_alt_func ]]( var_0 );
else
{
self.old_ai_target = var_0;
var_0.old_ignoreme = var_0.ignoreme;
var_0.ignoreme = 0;
var_0 setthreatbiasgroup( "dog_targets" );
var_0 thread maps\_utility::set_battlechatter( 0 );
self.favoriteenemy = var_0;
if ( common_scripts\utility::flag_exist( "_stealth_spotted" ) && !common_scripts\utility::flag( "_stealth_spotted" ) )
thread maps\_utility::play_sound_on_entity( "anml_dog_growl" );
else
thread maps\_utility::play_sound_on_entity( "anml_dog_bark_attack_start_npc" );
self setgoalentity( var_0, 50 );
thread temporary_disable_pain();
thread dog_attack_damage_tracking();
if ( !maps\_utility::ent_flag( "dog_no_teleport" ) )
{
var_1 = self gettagorigin( "spine2_jnt" );
if ( !maps\_utility::player_looking_at( var_1, 0.5, 1 ) )
{
var_2 = var_0 gettagorigin( "J_SpineUpper" );
var_3 = level.player geteye();
var_4 = distance( var_1, var_2 );
var_5 = distance( var_3, var_2 );
if ( var_4 > var_5 )
{
var_6 = getnodesinradius( var_3, 128, 32, 128, "Path" );
foreach ( var_8 in var_6 )
{
if ( !maps\_utility::player_looking_at( var_8.origin, 0.5, 1 ) )
{
if ( test_trace( var_3, var_8.origin, level.player ) )
{
var_9 = var_2 - var_1;
var_9 = ( var_9[0], var_9[1], 0 );
var_10 = vectortoangles( var_9 );
self forceteleport( var_8.origin, var_10 );
break;
}
}
}
}
}
}
self.player_controller notify( "displaying_no_target" );
self.player_controller notify( "clear_no_target" );
self.player_controller.notargethudelem.alpha = 0;
var_12 = dog_waitfor_attack_or_bail( var_0 );
if ( isdefined( var_12 ) )
self notify( "stop_disable_pain" );
self notify( "dog_attack_damage_tracking" );
if ( !isdefined( var_12 ) || var_12 == "bail" )
return "bail";
}
}
dog_waitfor_attack_or_bail( var_0 )
{
var_0 endon( "death" );
if ( isdefined( self.in_melee ) && self.in_melee )
{
if ( isdefined( self.enemy ) && self.enemy == var_0 )
return "dog_attacks_ai";
return "bail";
}
level waittill( "dog_attacks_ai", var_1, var_2, var_3 );
if ( var_2 == var_0 )
return "dog_attacks_ai";
return "bail";
}
temporary_disable_pain()
{
self endon( "stop_disable_pain" );
self notify( "temporary_disable_pain" );
self endon( "temporary_disable_pain" );
self setcandamage( 0 );
wait 2;
if ( !isdefined( self.in_melee ) || self.in_melee == 0 )
self setcandamage( 1 );
}
dog_attack_damage_tracking()
{
self notify( "dog_attack_damage_tracking" );
self endon( "dog_attack_damage_tracking" );
common_scripts\utility::waittill_either( "damage", "cancel_dog_attack" );
if ( !isdefined( self.in_melee ) || !self.in_melee )
thread dog_got_hit();
}
dog_got_hit()
{
self notify( "dog_got_hit" );
self endon( "dog_got_hit" );
maps\_utility::disable_pain();
maps\_utility::ent_flag_set( "dog_cooldown" );
var_0 = self.ignoreall;
self.ignoreall = 0;
self clearenemy();
wait 8;
self.ignoreall = var_0;
maps\_utility::enable_pain();
maps\_utility::ent_flag_clear( "dog_cooldown" );
}
ai_remove_outline_waiter( var_0 )
{
self endon( "death" );
self endon( "dog_attacks_ai" );
var_0 waittill( "new_dog_command" );
self hudoutlinedisable();
}
dog_command_goto( var_0 )
{
var_1 = var_0["position"];
wait 0.05;
playfxontag( common_scripts\utility::getfx( "target_marker_yellow" ), self.dog_marker, "tag_origin" );
thread maps\_utility::play_sound_on_entity( "anml_dog_bark" );
self setgoalpos( var_1 );
common_scripts\utility::waittill_notify_or_timeout( "goal", 0.2 );
if ( isdefined( self.pathgoalpos ) )
self waittill( "goal" );
else if ( distance2d( self.origin, var_1 ) > self.goalradius )
{
var_2 = getnodesinradius( var_1, 96, 0, 96 );
var_2 = sortbydistance( var_2, level.player get_eye() );
if ( var_2.size > 0 )
{
var_3 = var_2[0];
self setgoalpos( var_3.origin );
self waittill( "goal" );
}
}
wait( randomfloatrange( 1, 3 ) );
}
enemy_near_position( var_0 )
{
var_1 = getaiarray( "axis" );
if ( var_1.size > 0 )
{
var_1 = sortbydistance( var_1, var_0 );
if ( distance( var_1[0].origin, var_0 ) < 196 )
return var_1[0];
}
return undefined;
}
get_flush_volume( var_0 )
{
var_1 = common_scripts\utility::spawn_tag_origin();
var_1.origin = var_0;
var_2 = getentarray( "dog_flush_volume", "targetname" );
foreach ( var_4 in var_2 )
{
if ( isdefined( var_4.script_noteworthy ) && ( !isdefined( var_4.done_flushing ) || var_4.done_flushing == 0 ) )
{
if ( var_1 istouching( var_4 ) )
{
var_1 delete();
return var_4;
}
}
}
var_1 delete();
return undefined;
}
chopper_air_support_activate()
{
level endon( "air_support_canceled" );
level endon( "air_support_called" );
level.chopperattackarrow = spawn( "script_model", ( 0, 0, 0 ) );
level.chopperattackarrow setmodel( "tag_origin" );
level.chopperattackarrow.angles = ( -90, 0, 0 );
level.chopperattackarrow.offset = 4;
level.playeractivatedairsupport = 1;
var_0 = undefined;
var_1 = 15;
var_2 = 15000;
var_3 = 90000;
var_4 = [];
var_4[0] = spawnstruct();
var_4[0].offsetdir = "vertical";
var_4[0].offsetdist = var_1;
var_4[1] = spawnstruct();
var_4[1].offsetdir = "vertical";
var_4[1].offsetdist = var_1 * -1;
var_4[2] = spawnstruct();
var_4[2].offsetdir = "horizontal";
var_4[2].offsetdist = var_1;
var_4[3] = spawnstruct();
var_4[3].offsetdir = "horizontal";
var_4[3].offsetdist = var_1 * -1;
var_5 = 0;
for (;;)
{
wait 0.05;
var_6 = level.player getplayerangles();
var_7 = anglestoforward( var_6 );
var_8 = level.player get_eye();
for ( var_9 = 0; var_9 < var_4.size; var_9++ )
{
var_10 = var_8;
var_11 = undefined;
if ( var_4[var_9].offsetdir == "vertical" )
var_11 = anglestoup( var_6 );
else if ( var_4[var_9].offsetdir == "horizontal" )
var_11 = anglestoright( var_6 );
var_10 = var_10 + var_11 * var_4[var_9].offsetdist;
var_4[var_9].trace = bullettrace( var_10, var_10 + var_7 * var_2, 0, undefined );
var_4[var_9].length = distancesquared( var_10, var_4[var_9].trace["position"] );
if ( getdvar( "village_assault_debug_marker" ) == "1" )
thread common_scripts\utility::draw_line_for_time( var_10, var_4[var_9].trace["position"], 1, 1, 1, 0.05 );
}
var_12 = [];
var_13 = [];
for ( var_9 = 0; var_9 < var_4.size; var_9++ )
{
if ( var_4[var_9].length < var_3 )
continue;
var_14 = var_12.size;
var_12[var_14] = var_4[var_9].trace["position"];
var_13[var_14] = var_4[var_9].trace["normal"];
if ( getdvar( "village_assault_debug_marker" ) == "1" )
thread common_scripts\utility::draw_line_for_time( level.player get_eye(), var_12[var_14], 0, 1, 0, 0.05 );
}
if ( var_12.size == 0 )
{
for ( var_9 = 0; var_9 < var_4.size; var_9++ )
{
var_12[var_9] = var_4[var_9].trace["position"];
var_13[var_9] = var_4[var_9].trace["normal"];
}
}
if ( var_12.size == 4 )
{
var_15 = findaveragepointvec( var_12[0], var_12[1], var_12[2], var_12[3] );
var_16 = findaveragepointvec( var_13[0], var_13[1], var_13[2], var_13[3] );
}
else if ( var_12.size == 3 )
{
var_15 = findaveragepointvec( var_12[0], var_12[1], var_12[2] );
var_16 = findaveragepointvec( var_13[0], var_13[1], var_13[2] );
}
else if ( var_12.size == 2 )
{
var_15 = findaveragepointvec( var_12[0], var_12[1] );
var_16 = findaveragepointvec( var_13[0], var_13[1] );
}
else
{
var_15 = var_12[0];
var_16 = var_13[0];
}
if ( getdvar( "village_assault_debug_marker" ) == "1" )
thread common_scripts\utility::draw_line_for_time( level.player get_eye(), var_15, 1, 0, 0, 0.05 );
thread drawchopperattackarrow( var_15, var_16, var_5 );
var_5 = 0.2;
}
}
findaveragepointvec( var_0, var_1, var_2, var_3 )
{
if ( isdefined( var_3 ) )
{
var_4 = findaveragepoint( var_0[0], var_1[0], var_2[0], var_3[0] );
var_5 = findaveragepoint( var_0[1], var_1[1], var_2[1], var_3[1] );
var_6 = findaveragepoint( var_0[2], var_1[2], var_2[2], var_3[2] );
}
else if ( isdefined( var_2 ) )
{
var_4 = findaveragepoint( var_0[0], var_1[0], var_2[0] );
var_5 = findaveragepoint( var_0[1], var_1[1], var_2[1] );
var_6 = findaveragepoint( var_0[2], var_1[2], var_2[2] );
}
else
{
var_4 = findaveragepoint( var_0[0], var_1[0] );
var_5 = findaveragepoint( var_0[1], var_1[1] );
var_6 = findaveragepoint( var_0[2], var_1[2] );
}
return ( var_4, var_5, var_6 );
}
findaveragepoint( var_0, var_1, var_2, var_3 )
{
if ( isdefined( var_3 ) )
return ( var_0 + var_1 + var_2 + var_3 ) / 4;
else if ( isdefined( var_2 ) )
return ( var_0 + var_1 + var_2 ) / 3;
else
return ( var_0 + var_1 ) / 2;
}
drawchopperattackarrow( var_0, var_1, var_2 )
{
var_0 = var_0 + var_1 * level.chopperattackarrow.offset;
level.chopperattackarrow.origin = var_0;
if ( var_2 > 0 )
level.chopperattackarrow rotateto( vectortoangles( var_1 ), 0.2 );
else
level.chopperattackarrow.angles = vectortoangles( var_1 );
}
get_eye()
{
if ( isdefined( self.controlled_dog.controlling_dog ) && self.controlled_dog.controlling_dog )
{
var_0 = self.controlled_dog gettagorigin( "TAG_CAMERA" );
return var_0;
}
else
return self geteye();
}
hud_outlineenable()
{
if ( !isdefined( self ) )
return;
self notify( "outline_enable" );
self endon( "outline_enable" );
thread hudoutline_blink();
thread hudoutline_wait_death();
self endon( "death" );
self waittill( "dog_attacks_ai" );
wait 0.1;
maps\_utility::set_hudoutline( "enemy", 0 );
wait 5;
if ( isdefined( self ) )
{
self.no_more_outlines = 1;
self hudoutlinedisable();
}
}
hudoutline_blink()
{
self endon( "outline_enable" );
self endon( "dog_attacks_ai" );
self endon( "death" );
maps\_utility::set_hudoutline( "enemy", 0 );
wait 0.8;
self hudoutlinedisable();
wait 0.1;
for ( var_0 = 0; var_0 < 3; var_0++ )
{
maps\_utility::set_hudoutline( "enemy", 0 );
wait 0.1;
self hudoutlinedisable();
wait 0.1;
}
self hudoutlinedisable();
}
hudoutline_wait_death()
{
self endon( "outline_enable" );
self waittill( "death" );
wait 2.5;
if ( isdefined( self ) )
{
self.no_more_outlines = 1;
self hudoutlinedisable();
}
var_0 = getcorpsearray();
foreach ( var_2 in var_0 )
var_2 hudoutlinedisable();
}
display_no_target( var_0, var_1 )
{
self notify( "displaying_no_target" );
self endon( "displaying_no_target" );
self.notargethudelem settext( var_0 );
self.notargethudelem fadeovertime( 0.1 );
self.notargethudelem.alpha = 0.5;
wait 0.1;
thread notargethudelem_pulse();
wait( var_1 );
self notify( "clear_no_target" );
self.notargethudelem fadeovertime( 0.25 );
self.notargethudelem.alpha = 0.0;
}
notargethudelem_pulse()
{
self endon( "displaying_no_target" );
self endon( "clear_no_target" );
for (;;)
{
self.notargethudelem fadeovertime( 0.2 );
self.notargethudelem.alpha = 0.7;
wait 0.2;
self.notargethudelem fadeovertime( 0.2 );
self.notargethudelem.alpha = 0.5;
wait 0.2;
}
}
ui_dog_grenade_logic()
{
self.controlled_dog endon( "death" );
for (;;)
{
self.controlled_dog maps\_utility::ent_flag_wait_either( "pause_dog_command", "dog_cooldown" );
setdvar( "ui_dog_grenade", 0 );
self.controlled_dog maps\_utility::ent_flag_waitopen( "pause_dog_command" );
self.controlled_dog maps\_utility::ent_flag_waitopen( "dog_cooldown" );
setdvar( "ui_dog_grenade", 1 );
}
}

1379
maps/_dog_drive.gsc Normal file

File diff suppressed because it is too large Load Diff

224
maps/_dog_kinect.gsc Normal file
View File

@ -0,0 +1,224 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
enable_dog_kinect()
{
if ( level.script == "enemyhq" )
speechenablegrammar( "speech/iw6/grammars/en-us_rileyenemyhq.cfg", 1 );
else if ( level.script == "nml" )
speechenablegrammar( "speech/iw6/grammars/en-us_rileynml.cfg", 1 );
speechenable( 1 );
setdvar( "show_riley_commands", 0 );
}
disable_dog_kinect()
{
speechenable( 0 );
if ( level.script == "enemyhq" )
speechenablegrammar( "speech/iw6/grammars/en-us_rileyenemyhq.cfg", 0 );
else if ( level.script == "nml" )
speechenablegrammar( "speech/iw6/grammars/en-us_rileynml.cfg", 0 );
}
speechcommands()
{
enable_dog_kinect();
level.player thread listen_for_dog_kinect_commands( level.dog );
}
listen_for_dog_kinect_commands( var_0 )
{
self endon( "death" );
var_0 endon( "death" );
for (;;)
{
level.player waittill( "speechCommand", var_1, var_2 );
if ( getdvarint( "show_riley_commands" ) == 1 )
iprintlnbold( "speechCommand: " + var_2 + " at " + var_1 + " confidence." );
var_3 = 0.3;
var_4 = 0.7;
switch ( var_2 )
{
case "attack":
if ( var_1 > var_3 )
{
if ( isdefined( var_0.controlling_dog ) && var_0 maps\_utility::ent_flag( "pause_dog_command" ) )
level.player notify( "attack_command" );
else
level.player notify( "fired_laser" );
}
break;
case "cancel":
if ( var_1 > var_3 )
var_0 notify( "cancel_dog_attack" );
break;
case "bark":
if ( var_1 > var_4 )
{
if ( isdefined( var_0.controlling_dog ) )
level.player notify( "LISTEN_ads_button_pressed" );
}
break;
case "platform":
if ( var_1 > var_3 )
{
var_5 = [ "platform", "ramp", "walkway", "catwalk" ];
foreach ( var_7 in var_5 )
{
var_8 = findlocation( var_7 );
if ( isdefined( var_8 ) )
{
laser_designate_target_kinect( var_8 );
break;
}
}
}
break;
case "cart":
if ( var_1 > var_3 )
{
var_10 = [ "cart", "counter", "stand", "conession", "concession" ];
foreach ( var_12 in var_10 )
{
var_8 = findlocation( var_12 );
if ( isdefined( var_8 ) )
{
laser_designate_target_kinect( var_8 );
break;
}
}
}
break;
case "vehicle":
if ( var_1 > var_3 )
{
var_14 = [ "car", "van", "bus" ];
foreach ( var_16 in var_14 )
{
var_8 = findlocation( var_16 );
if ( isdefined( var_8 ) )
{
laser_designate_target_kinect( var_8 );
break;
}
}
}
break;
case "debris":
if ( var_1 > var_3 )
{
var_18 = [ "debris", "rubble" ];
foreach ( var_20 in var_18 )
{
var_8 = findlocation( var_20 );
if ( isdefined( var_8 ) )
{
laser_designate_target_kinect( var_8 );
break;
}
}
}
break;
default:
if ( var_1 > var_3 )
{
var_8 = findlocation( var_2 );
if ( isdefined( var_8 ) )
laser_designate_target_kinect( var_8 );
}
break;
}
}
}
findlocation( var_0 )
{
var_1 = anim.bcs_locations;
foreach ( var_3 in var_1 )
{
if ( isdefined( var_3.locationaliases ) )
{
foreach ( var_5 in var_3.locationaliases )
{
if ( issubstr( var_5, var_0 ) )
return var_5;
}
}
}
return undefined;
}
laser_designate_target_kinect( var_0 )
{
var_1 = [];
var_2 = getaiarray( "axis" );
foreach ( var_4 in var_2 )
{
if ( var_4.type == "dog" )
continue;
var_5 = var_4 gettagorigin( "J_SpineUpper" );
if ( maps\_utility::player_looking_at( var_5, 0.8, 1 ) )
{
var_6 = var_4 animscripts\battlechatter::get_all_my_locations();
foreach ( var_8 in var_6 )
{
var_9 = var_8.locationaliases;
foreach ( var_11 in var_9 )
{
if ( var_11 == var_0 )
{
var_1 = common_scripts\utility::array_add( var_1, var_4 );
break;
}
}
}
}
}
var_15 = maps\_dog_control::get_eye();
if ( var_1.size > 0 )
{
var_1 = sortbydistance( var_1, var_15 );
foreach ( var_4 in var_1 )
{
if ( !isdefined( var_4.a.doinglongdeath ) )
{
var_17 = maps\_dog_control::get_laser_designated_trace();
self notify( "issue_dog_command", var_17, undefined, var_4 );
return;
}
}
}
}

409
maps/_dog_pip.gsc Normal file
View File

@ -0,0 +1,409 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
#using_animtree("generic_human");
pip_init()
{
level.scr_anim["generic"]["setup_pose"] = %casual_stand_idle;
level.pip = level.player newpip();
level.pip.enable = 0;
precacheshader( "ac130_overlay_pip_vignette" );
precacheshader( "ac130_overlay_pip_static_a" );
precacheshader( "ac130_overlay_pip_static_b" );
precacheshader( "ac130_overlay_pip_static_c" );
precacheshader( "overlay_grain" );
precacheshader( "overlay_static" );
}
dog_pip_init( var_0, var_1 )
{
if ( isdefined( self.controlling_dog ) && self.controlling_dog )
return;
if ( level.pip.enable )
return;
var_2 = var_0 common_scripts\utility::spawn_tag_origin();
var_2 linkto( var_0, "tag_camera", ( 12, 0, 3 ), ( 0, 0, 0 ) );
level.pip.enable = 1;
level.pip.freecamera = 1;
level.pip.entity = var_2;
level.pip.fov = common_scripts\utility::ter_op( isdefined( var_1 ), var_1, 50 );
var_3 = getdvarint( "widescreen", 1 );
var_4 = 0.75;
level.pip_ai_cam = var_0;
level.pip.closed_width = 16;
level.pip.opened_width = common_scripts\utility::ter_op( var_3, 220, 130 );
level.pip.closed_height = common_scripts\utility::ter_op( var_3, 135, int( floor( var_4 * level.pip.opened_width ) ) );
level.pip.opened_height = common_scripts\utility::ter_op( var_3, 135, int( floor( var_4 * level.pip.opened_width ) ) );
level.pip.opened_x = common_scripts\utility::ter_op( var_3, 490, 475 );
level.pip.opened_y = common_scripts\utility::ter_op( var_3, 15, 30 );
level.pip.closed_x = level.pip.opened_x + level.pip.opened_width * 0.5 - level.pip.closed_width * 0.5;
level.pip.closed_y = level.pip.opened_y;
level.pip.border_thickness = 2;
level.pip.enableshadows = 0;
level.pip.tag = "tag_origin";
level.pip.x = level.pip.closed_x;
level.pip.y = level.pip.closed_y;
level.pip.width = level.pip.closed_width;
level.pip.height = level.pip.closed_height;
level.pip.visionsetnaked = "thermal";
var_5 = level.pip.closed_x;
var_6 = level.pip.closed_y;
level.pip.borders["top_left"] = new_l_pip_corner( var_5, var_6, "top_left" );
level.pip.borders["top_right"] = new_l_pip_corner( var_5, var_6, "top_right" );
level.pip.borders["bottom_left"] = new_l_pip_corner( var_5, var_6, "bottom_left" );
level.pip.borders["bottom_right"] = new_l_pip_corner( var_5, var_6, "bottom_right" );
level thread pip_static();
level thread pip_open();
level thread pip_border();
level thread pip_static_lines();
}
pip_toggle_ai_cam( var_0 )
{
notifyoncommand( "toggle_pip_cam", "+actionslot 4" );
for (;;)
{
foreach ( var_2 in var_0 )
{
level.player waittill( "toggle_pip_cam" );
var_3 = spawn( "script_model", var_2.origin );
var_3 setmodel( "tag_origin" );
var_3.angles = var_2.angles;
var_3 linkto( var_2, "j_head", ( -13, -12, 64 ), ( 0, 0, 0 ) );
level.pip.entity = var_3;
level.pip_ai_cam = var_2;
wait 0.2;
}
}
}
pip_display_name()
{
level.pip_display_name = newhudelem();
level.pip_display_name.alpha = 1;
level.pip_display_name.x = level.pip.opened_x + 15;
level.pip_display_name.y = level.pip.opened_y + 1;
level.pip_display_name.hidewheninmenu = 0;
level.pip_display_name.hidewhendead = 1;
level.pip_display_name.fontscale = 1.5;
level.pip_display_name.font = "objective";
level.pip_display_name settext( level.pip_ai_cam.name );
for (;;)
{
level.player waittill( "toggle_pip_cam" );
wait 0.1;
level.pip_display_name settext( level.pip_ai_cam.name );
}
}
pip_display_timer()
{
level.pip_timer = level.player maps\_hud_util::createclienttimer( "objective", 1.5 );
level.pip_timer.alpha = 1;
level.pip_timer.x = level.pip.opened_x + 200;
level.pip_timer.y = level.pip.opened_y + 82;
level.pip_timer.hidewheninmenu = 0;
level.pip_timer.hidewhendead = 1;
level.pip_timer settenthstimerup( 0.0 );
}
pip_static()
{
var_0 = newhudelem();
var_0.alpha = 1;
var_0.sort = -50;
var_0.x = level.pip.opened_x;
var_0.y = level.pip.opened_y;
var_0.hidewheninmenu = 0;
var_0.hidewhendead = 1;
var_0 setshader( "overlay_static", level.pip.opened_width, level.pip.opened_height );
level.pip.static_overlay = var_0;
}
pip_static_lines()
{
level.pip endon( "stop_interference" );
level.pip.line_a = newhudelem();
level.pip.line_a.alpha = 1;
level.pip.line_a.sort = -50;
level.pip.line_a.x = level.pip.opened_x;
level.pip.line_a.y = level.pip.opened_y;
level.pip.line_a.hidewheninmenu = 0;
level.pip.line_a.hidewhendead = 1;
var_0 = [];
var_0[0] = "ac130_overlay_pip_static_a";
var_0[1] = "ac130_overlay_pip_static_b";
var_0[2] = "ac130_overlay_pip_static_c";
var_0 = common_scripts\utility::array_randomize( var_0 );
level thread random_line_flicker();
level thread random_line_placement();
var_1 = 135;
var_2 = randomfloatrange( 0.1, 0.35 );
for (;;)
{
level.pip.line_a setshader( common_scripts\utility::random( var_0 ), level.pip.opened_width, int( var_1 * var_2 ) );
wait 0.05;
}
}
random_line_flicker()
{
level.pip endon( "stop_interference" );
for (;;)
{
var_0 = randomfloatrange( 0.05, 0.08 );
var_1 = randomfloatrange( 0.1, 0.8 );
level.pip.line_a fadeovertime( var_0 );
level.pip.line_a.alpha = var_1;
wait( var_0 );
if ( randomint( 100 ) > 50 )
{
var_0 = randomfloatrange( 0.25, 0.4 );
level.pip.line_a fadeovertime( var_0 );
level.pip.line_a.alpha = 0;
wait( var_0 );
}
}
}
random_line_placement()
{
level.pip endon( "stop_interference" );
for (;;)
{
var_0 = randomintrange( 10, 110 );
level.pip.line_a.y = var_0;
wait( randomfloatrange( 0.05, 0.4 ) );
}
}
pip_border()
{
var_0 = newhudelem();
var_0.alpha = 1;
var_0.sort = -50;
var_0.x = level.pip.opened_x;
var_0.y = level.pip.opened_y;
var_0.hidewheninmenu = 0;
var_0.hidewhendead = 1;
var_0 setshader( "ac130_overlay_pip_vignette", level.pip.opened_width, level.pip.opened_height );
level.pip.border = var_0;
}
pip_interference()
{
level.pip endon( "stop_interference" );
for (;;)
{
var_0 = randomfloatrange( 0.1, 1 );
var_1 = var_0 + randomfloatrange( 0.1, 0.4 );
var_2 = randomfloatrange( 0.1, 0.2 );
level.pip.static_overlay fadeovertime( var_0 );
level.pip.static_overlay.alpha = var_2;
wait( var_1 );
var_0 = randomfloatrange( 0.5, 0.75 );
var_1 = var_0 + randomfloatrange( 0.5, 1.5 );
level.pip.static_overlay fadeovertime( var_0 );
level.pip.static_overlay.alpha = 0.3;
wait( var_1 );
}
}
pip_open()
{
var_0 = 0.1;
foreach ( var_3, var_2 in level.pip.borders )
var_2 thread pip_open_l_corner( var_3, var_0 );
wait( var_0 + 0.05 );
level.pip.width = level.pip.opened_width;
level.pip.height = level.pip.opened_height;
level.pip.x = level.pip.opened_x;
level.pip.y = level.pip.opened_y;
level.pip.enable = 1;
wait 0.3;
level notify( "pip_in" );
level.pip.static_overlay fadeovertime( 0.5 );
level.pip.static_overlay.alpha = 0.2;
level thread pip_interference();
}
get_world_relative_offset( var_0, var_1, var_2 )
{
var_3 = cos( var_1[1] );
var_4 = sin( var_1[1] );
var_5 = var_2[0] * var_3 - var_2[1] * var_4;
var_6 = var_2[0] * var_4 + var_2[1] * var_3;
var_5 = var_5 + var_0[0];
var_6 = var_6 + var_0[1];
return ( var_5, var_6, var_0[2] + var_2[2] );
}
new_l_pip_corner( var_0, var_1, var_2 )
{
var_3 = level.pip.closed_width;
var_4 = level.pip.closed_height;
var_5 = spawnstruct();
var_6 = level.pip.border_thickness;
var_7 = 16;
if ( var_2 == "top_left" )
{
var_8 = "left";
var_9 = "top";
var_10 = "left";
var_11 = "top";
var_0 = var_0 - var_6;
var_1 = var_1 - var_6;
}
else if ( var_2 == "top_right" )
{
var_8 = "left";
var_9 = "top";
var_10 = "right";
var_11 = "top";
var_0 = var_0 + var_3 + var_6 - 1;
var_1 = var_1 - var_6;
}
else if ( var_2 == "bottom_left" )
{
var_8 = "left";
var_9 = "bottom";
var_10 = "left";
var_11 = "bottom";
var_0 = var_0 - var_6;
var_1 = var_1 + var_4 + var_6;
}
else
{
var_8 = "left";
var_9 = "bottom";
var_10 = "right";
var_11 = "bottom";
var_0 = var_0 + var_3 + var_6 - 1;
var_1 = var_1 + var_4 + var_6;
}
var_12 = newhudelem();
var_12.alignx = var_8;
var_12.aligny = var_9;
var_12.x = var_0;
var_12.y = var_1;
var_12.hidewheninmenu = 0;
var_12.hidewhendead = 1;
var_12 setshader( "white", var_6, var_7 );
var_5.vertical = var_12;
var_12 = newhudelem();
var_12.alignx = var_10;
var_12.aligny = var_11;
var_12.x = var_0;
var_12.y = var_1;
var_12.hidewheninmenu = 0;
var_12.hidewhendead = 1;
var_12 setshader( "white", var_7, var_6 );
var_5.horizontal = var_12;
return var_5;
}
pip_open_l_corner( var_0, var_1 )
{
if ( var_0 == "top_left" || var_0 == "bottom_left" )
{
self.vertical moveovertime( var_1 );
self.vertical.x = level.pip.opened_x;
self.horizontal moveovertime( var_1 );
self.horizontal.x = level.pip.opened_x;
}
else
{
self.vertical moveovertime( var_1 );
self.vertical.x = level.pip.opened_x + level.pip.opened_width;
self.horizontal moveovertime( var_1 );
self.horizontal.x = level.pip.opened_x + level.pip.opened_width;
}
}
dog_pip_close()
{
level.pip notify( "stop_interference" );
level.pip.static_overlay.alpha = 1;
var_0 = 0.2;
level.pip.enableshadows = 1;
level.pip.static_overlay fadeovertime( var_0 );
level.pip.static_overlay.alpha = 1;
wait( var_0 );
if ( isdefined( level.pip.linked_ent ) )
level.pip.linked_ent delete();
var_0 = 0.1;
foreach ( var_3, var_2 in level.pip.borders )
var_2 thread pip_close_l_corner( var_3, var_0 );
level.pip.static_overlay scaleovertime( var_0, level.pip.closed_width, level.pip.closed_height );
wait( var_0 + 0.05 );
level.pip.width = level.pip.closed_width;
level.pip.height = level.pip.closed_height;
level.pip.x = level.pip.closed_x;
level.pip.y = level.pip.closed_y;
if ( isdefined( level.pip.borders ) )
common_scripts\utility::array_thread( level.pip.borders, ::pip_remove_l_corners );
level.pip.static_overlay destroy();
if ( isdefined( level.pip_display_name ) )
level.pip_display_name destroy();
if ( isdefined( level.pip_timer ) )
level.pip_timer destroy();
if ( isdefined( level.pip.border ) )
level.pip.border destroy();
if ( isdefined( level.pip.line_a ) )
level.pip.line_a destroy();
level.pip.enable = 0;
}
pip_remove_l_corners()
{
self.vertical destroy();
self.horizontal destroy();
}
pip_close_l_corner( var_0, var_1 )
{
if ( var_0 == "top_left" || var_0 == "bottom_left" )
{
self.vertical moveovertime( var_1 );
self.vertical.x = level.pip.closed_x;
self.horizontal moveovertime( var_1 );
self.horizontal.x = level.pip.closed_x;
}
else
{
self.vertical moveovertime( var_1 );
self.vertical.x = level.pip.closed_x + level.pip.closed_width;
self.horizontal moveovertime( var_1 );
self.horizontal.x = level.pip.closed_x + level.pip.closed_width;
}
}
print3d_on_ent( var_0 )
{
}

786
maps/_drone.gsc Normal file
View File

@ -0,0 +1,786 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
initglobals()
{
if ( getdvar( "debug_drones" ) == "" )
setdvar( "debug_drones", "0" );
if ( !isdefined( level.lookahead_value ) )
level.drone_lookahead_value = 200;
if ( !isdefined( level.max_drones ) )
level.max_drones = [];
if ( !isdefined( level.max_drones["allies"] ) )
level.max_drones["allies"] = 99999;
if ( !isdefined( level.max_drones["axis"] ) )
level.max_drones["axis"] = 99999;
if ( !isdefined( level.max_drones["team3"] ) )
level.max_drones["team3"] = 99999;
if ( !isdefined( level.max_drones["neutral"] ) )
level.max_drones["neutral"] = 99999;
if ( !isdefined( level.drones ) )
level.drones = [];
if ( !isdefined( level.drones["allies"] ) )
level.drones["allies"] = maps\_utility::struct_arrayspawn();
if ( !isdefined( level.drones["axis"] ) )
level.drones["axis"] = maps\_utility::struct_arrayspawn();
if ( !isdefined( level.drones["team3"] ) )
level.drones["team3"] = maps\_utility::struct_arrayspawn();
if ( !isdefined( level.drones["neutral"] ) )
level.drones["neutral"] = maps\_utility::struct_arrayspawn();
level.drone_spawn_func = ::drone_init;
}
drone_init()
{
if ( level.drones[self.team].array.size >= level.max_drones[self.team] )
{
self delete();
return;
}
thread drone_array_handling( self );
level notify( "new_drone" );
self setcandamage( 1 );
maps\_drone_base::drone_give_soul();
if ( isdefined( self.script_drone_override ) )
return;
thread drone_death_thread();
if ( isdefined( self.target ) )
{
if ( !isdefined( self.script_moveoverride ) )
thread drone_move();
else
thread drone_wait_move();
}
if ( isdefined( self.script_looping ) && self.script_looping == 0 )
return;
thread drone_idle();
}
drone_array_handling( var_0 )
{
maps\_utility::structarray_add( level.drones[var_0.team], var_0 );
var_1 = var_0.team;
var_0 waittill( "death" );
if ( isdefined( var_0 ) && isdefined( var_0.struct_array_index ) )
maps\_utility::structarray_remove_index( level.drones[var_1], var_0.struct_array_index );
else
maps\_utility::structarray_remove_undefined( level.drones[var_1] );
}
drone_death_thread()
{
drone_wait_for_death();
if ( !isdefined( self ) )
return;
var_0 = "stand";
if ( isdefined( self.animset ) && isdefined( level.drone_anims[self.team][self.animset] ) && isdefined( level.drone_anims[self.team][self.animset]["death"] ) )
var_0 = self.animset;
var_1 = level.drone_anims[self.team][var_0]["death"];
if ( isdefined( self.deathanim ) )
var_1 = self.deathanim;
self notify( "death" );
if ( isdefined( level.drone_death_handler ) )
{
self thread [[ level.drone_death_handler ]]( var_1 );
return;
}
if ( !( isdefined( self.noragdoll ) && isdefined( self.skipdeathanim ) ) )
{
if ( isdefined( self.noragdoll ) )
drone_play_scripted_anim( var_1, "deathplant" );
else if ( isdefined( self.skipdeathanim ) )
{
self startragdoll();
drone_play_scripted_anim( var_1, "deathplant" );
}
else
{
drone_play_scripted_anim( var_1, "deathplant" );
self startragdoll();
}
}
self notsolid();
thread drone_thermal_draw_disable( 2 );
if ( isdefined( self ) && isdefined( self.nocorpsedelete ) )
return;
wait 10;
while ( isdefined( self ) )
{
if ( !common_scripts\utility::within_fov( level.player.origin, level.player.angles, self.origin, 0.5 ) )
self delete();
wait 5;
}
}
drone_wait_for_death()
{
self endon( "death" );
while ( isdefined( self ) )
{
self waittill( "damage" );
if ( isdefined( self.damageshield ) && self.damageshield )
{
self.health = 100000;
continue;
}
if ( self.health <= 0 )
break;
}
}
drone_thermal_draw_disable( var_0 )
{
wait( var_0 );
if ( isdefined( self ) )
self thermaldrawdisable();
}
#using_animtree("generic_human");
drone_play_looping_anim( var_0, var_1 )
{
if ( isdefined( self.drone_loop_custom ) )
self [[ self.drone_loop_override ]]( var_0, var_1 );
else
{
self clearanim( %body, 0.2 );
self stopanimscripted();
self setflaggedanimknoballrestart( "drone_anim", var_0, %body, 1, 0.2, var_1 );
self.droneanim = var_0;
}
}
drone_play_scripted_anim( var_0, var_1 )
{
if ( self.type == "human" )
self clearanim( %body, 0.2 );
self stopanimscripted();
var_2 = "normal";
if ( isdefined( var_1 ) )
var_2 = "deathplant";
var_3 = "drone_anim";
self animscripted( var_3, self.origin, self.angles, var_0, var_2 );
self waittillmatch( "drone_anim", "end" );
}
drone_drop_real_weapon_on_death()
{
if ( !isdefined( self ) )
return;
self waittill( "death" );
if ( !isdefined( self ) )
return;
var_0 = getweaponmodel( self.weapon );
var_1 = self.weapon;
if ( isdefined( var_0 ) )
{
self detach( var_0, "tag_weapon_right" );
var_2 = self gettagorigin( "tag_weapon_right" );
var_3 = self gettagangles( "tag_weapon_right" );
var_4 = spawn( "weapon_" + var_1, ( 0, 0, 0 ) );
var_4.angles = var_3;
var_4.origin = var_2;
}
}
drone_idle( var_0, var_1 )
{
if ( isdefined( self.drone_idle_custom ) )
[[ self.drone_idle_override ]]();
else if ( isdefined( var_0 ) && isdefined( var_0["script_noteworthy"] ) && isdefined( level.drone_anims[self.team][var_0["script_noteworthy"]] ) )
thread drone_fight( var_0["script_noteworthy"], var_0, var_1 );
else
{
if ( isdefined( self.idleanim ) )
{
drone_play_looping_anim( self.idleanim, 1 );
return;
}
drone_play_looping_anim( level.drone_anims[self.team]["stand"]["idle"], 1 );
}
}
drone_get_goal_loc_with_arrival( var_0, var_1 )
{
var_2 = var_1["script_noteworthy"];
if ( !isdefined( level.drone_anims[self.team][var_2]["arrival"] ) )
return var_0;
var_3 = getmovedelta( level.drone_anims[self.team][var_2]["arrival"], 0, 1 );
var_3 = length( var_3 );
var_0 = var_0 - var_3;
return var_0;
}
drone_fight( var_0, var_1, var_2 )
{
self endon( "death" );
self endon( "stop_drone_fighting" );
self.animset = var_0;
self.weaponsound = undefined;
var_3 = randomintrange( 1, 4 );
if ( self.team == "axis" )
{
if ( var_3 == 1 )
self.weaponsound = "drone_ak12_fire_npc";
else if ( var_3 == 2 )
self.weaponsound = "drone_cz805_fire_npc";
if ( var_3 == 3 )
self.weaponsound = "drone_cbjms_fire_npc";
}
else
{
if ( var_3 == 1 )
self.weaponsound = "drone_r5rgp_fire_npc";
else if ( var_3 == 2 )
self.weaponsound = "drone_fad_fire_npc";
if ( var_3 == 3 )
self.weaponsound = "drone_m27_fire_npc";
}
self.angles = ( 0, self.angles[1], self.angles[2] );
if ( var_0 == "coverprone" )
self moveto( self.origin + ( 0, 0, 8 ), 0.05 );
self.noragdoll = 1;
var_4 = level.drone_anims[self.team][var_0];
self.deathanim = var_4["death"];
while ( isdefined( self ) )
{
drone_play_scripted_anim( var_4["idle"][randomint( var_4["idle"].size )] );
if ( common_scripts\utility::cointoss() && !isdefined( self.ignoreall ) )
{
var_5 = 1;
if ( isdefined( var_4["pop_up_chance"] ) )
var_5 = var_4["pop_up_chance"];
var_5 = var_5 * 100;
var_6 = 1;
if ( randomfloat( 100 ) > var_5 )
var_6 = 0;
if ( var_6 == 1 )
{
drone_play_scripted_anim( var_4["hide_2_aim"] );
wait( getanimlength( var_4["hide_2_aim"] ) - 0.5 );
}
if ( isdefined( var_4["fire"] ) )
{
if ( var_0 == "coverprone" && var_6 == 1 )
thread drone_play_looping_anim( var_4["fire_exposed"], 1 );
else
thread drone_play_looping_anim( var_4["fire"], 1 );
drone_fire_randomly();
}
else
{
drone_shoot();
wait 0.15;
drone_shoot();
wait 0.15;
drone_shoot();
wait 0.15;
drone_shoot();
}
if ( var_6 == 1 )
drone_play_scripted_anim( var_4["aim_2_hide"] );
drone_play_scripted_anim( var_4["reload"] );
}
}
}
drone_fire_randomly()
{
self endon( "death" );
if ( common_scripts\utility::cointoss() )
{
drone_shoot();
wait 0.1;
drone_shoot();
wait 0.1;
drone_shoot();
if ( common_scripts\utility::cointoss() )
{
wait 0.1;
drone_shoot();
}
if ( common_scripts\utility::cointoss() )
{
wait 0.1;
drone_shoot();
wait 0.1;
drone_shoot();
wait 0.1;
}
if ( common_scripts\utility::cointoss() )
wait( randomfloatrange( 1, 2 ) );
}
else
{
drone_shoot();
wait( randomfloatrange( 0.25, 0.75 ) );
drone_shoot();
wait( randomfloatrange( 0.15, 0.75 ) );
drone_shoot();
wait( randomfloatrange( 0.15, 0.75 ) );
drone_shoot();
wait( randomfloatrange( 0.15, 0.75 ) );
}
}
drone_shoot()
{
self endon( "death" );
self notify( "firing" );
self endon( "firing" );
drone_shoot_fx();
var_0 = %exposed_crouch_shoot_auto_v2;
self setanimknobrestart( var_0, 1, 0.2, 1.0 );
common_scripts\utility::delaycall( 0.25, ::clearanim, var_0, 0 );
}
drone_shoot_fx()
{
var_0 = common_scripts\utility::getfx( "ak47_muzzleflash" );
if ( self.team == "allies" )
var_0 = common_scripts\utility::getfx( "m16_muzzleflash" );
if ( isdefined( self.muzzleflashoverride ) )
var_0 = common_scripts\utility::getfx( self.muzzleflashoverride );
if ( !isdefined( self.nodroneweaponsound ) )
thread drone_play_weapon_sound( self.weaponsound );
playfxontag( var_0, self, "tag_flash" );
}
drone_play_weapon_sound( var_0 )
{
self playsound( var_0 );
}
drone_wait_move()
{
self endon( "death" );
self waittill( "move" );
thread drone_move();
}
get_anim_data( var_0 )
{
var_1 = 170;
var_2 = 1;
var_3 = getanimlength( var_0 );
var_4 = getmovedelta( var_0, 0, 1 );
var_5 = length( var_4 );
if ( var_3 > 0 && var_5 > 0 )
{
var_1 = var_5 / var_3;
var_2 = 0;
}
if ( isdefined( self.drone_run_speed ) )
var_1 = self.drone_run_speed;
var_6 = spawnstruct();
var_6.anim_relative = var_2;
var_6.run_speed = var_1;
var_6.anim_time = var_3;
return var_6;
}
drone_move()
{
self endon( "death" );
self endon( "drone_stop" );
wait 0.05;
var_0 = getpatharray( self.target, self.origin );
var_1 = level.drone_anims[self.team]["stand"]["run"];
if ( isdefined( self.runanim ) )
var_1 = self.runanim;
var_2 = get_anim_data( var_1 );
var_3 = var_2.run_speed;
var_4 = var_2.anim_relative;
if ( isdefined( self.drone_move_callback ) )
{
var_2 = [[ self.drone_move_callback ]]();
if ( isdefined( var_2 ) )
{
var_1 = var_2.runanim;
var_3 = var_2.run_speed;
var_4 = var_2.anim_relative;
}
var_2 = undefined;
}
if ( !var_4 )
thread drone_move_z( var_3 );
drone_play_looping_anim( var_1, self.moveplaybackrate );
var_5 = 0.5;
var_6 = 0;
self.started_moving = 1;
self.cur_node = var_0[var_6];
var_7 = 0;
var_8 = undefined;
for (;;)
{
if ( !isdefined( var_0[var_6] ) )
break;
var_9 = var_0[var_6]["vec"];
var_10 = self.origin - var_0[var_6]["origin"];
var_11 = vectordot( vectornormalize( var_9 ), var_10 );
if ( !isdefined( var_0[var_6]["dist"] ) )
break;
var_12 = var_11 + level.drone_lookahead_value;
while ( var_12 > var_0[var_6]["dist"] )
{
var_12 = var_12 - var_0[var_6]["dist"];
var_6++;
self.cur_node = var_0[var_6];
if ( isdefined( var_8 ) )
{
if ( var_6 == 0 )
{
}
if ( !isdefined( self.beforestairanim ) )
self.beforestairanim = self.droneanim;
var_13 = level.drone_anims[self.team]["stairs"][var_8];
drone_play_looping_anim( var_13, self.moveplaybackrate );
var_7 = 1;
}
if ( !isdefined( var_0[var_6]["dist"] ) )
{
self rotateto( vectortoangles( var_0[var_0.size - 1]["vec"] ), var_5 );
var_14 = distance( self.origin, var_0[var_0.size - 1]["origin"] );
var_15 = var_14 / ( var_3 * self.moveplaybackrate );
var_16 = var_0[var_0.size - 1]["origin"] + ( 0, 0, 100 );
var_17 = var_0[var_0.size - 1]["origin"] - ( 0, 0, 100 );
var_18 = physicstrace( var_16, var_17 );
if ( getdvar( "debug_drones" ) == "1" )
{
thread common_scripts\utility::draw_line_for_time( var_16, var_17, 1, 1, 1, var_5 );
thread common_scripts\utility::draw_line_for_time( self.origin, var_18, 0, 0, 1, var_5 );
}
self moveto( var_18, var_15 );
wait( var_15 );
self notify( "goal" );
thread check_delete();
thread drone_idle( var_0[var_0.size - 1], var_18 );
return;
}
if ( !isdefined( var_0[var_6] ) )
{
self notify( "goal" );
thread drone_idle();
return;
}
}
if ( isdefined( self.drone_move_callback ) )
{
var_2 = [[ self.drone_move_callback ]]();
if ( isdefined( var_2 ) )
{
if ( var_2.runanim != var_1 )
{
var_1 = var_2.runanim;
var_3 = var_2.run_speed;
var_4 = var_2.anim_relative;
if ( !var_4 )
thread drone_move_z( var_3 );
else
self notify( "drone_move_z" );
drone_play_looping_anim( var_1, self.moveplaybackrate );
}
}
}
self.cur_node = var_0[var_6];
var_19 = var_0[var_6]["vec"] * var_12;
var_19 = var_19 + var_0[var_6]["origin"];
var_20 = var_19;
var_16 = var_20 + ( 0, 0, 100 );
var_17 = var_20 - ( 0, 0, 100 );
var_20 = physicstrace( var_16, var_17 );
if ( !var_4 )
self.drone_look_ahead_point = var_20;
if ( getdvar( "debug_drones" ) == "1" )
{
thread common_scripts\utility::draw_line_for_time( var_16, var_17, 1, 1, 1, var_5 );
thread draw_point( var_20, 1, 0, 0, 16, var_5 );
}
var_21 = vectortoangles( var_20 - self.origin );
self rotateto( ( 0, var_21[1], 0 ), var_5 );
var_22 = var_3 * var_5 * self.moveplaybackrate;
var_23 = vectornormalize( var_20 - self.origin );
var_19 = var_23 * var_22;
var_19 = var_19 + self.origin;
if ( getdvar( "debug_drones" ) == "1" )
thread common_scripts\utility::draw_line_for_time( self.origin, var_19, 0, 0, 1, var_5 );
self moveto( var_19, var_5 );
wait( var_5 );
if ( isdefined( self.cur_node["script_noteworthy"] ) && ( self.cur_node["script_noteworthy"] == "stairs_start_up" || self.cur_node["script_noteworthy"] == "stairs_start_down" ) )
{
var_24 = strtok( self.cur_node["script_noteworthy"], "_" );
var_8 = var_24[2];
continue;
}
if ( var_7 == 1 )
{
if ( isdefined( self.cur_node["script_noteworthy"] ) && self.cur_node["script_noteworthy"] == "stairs_end" )
{
var_25 = self.beforestairanim;
drone_play_looping_anim( var_25, self.moveplaybackrate );
var_7 = 0;
var_8 = undefined;
}
}
}
thread drone_idle();
}
drone_move_z( var_0 )
{
self endon( "death" );
self endon( "drone_stop" );
self notify( "drone_move_z" );
self endon( "drone_move_z" );
var_1 = 0.05;
for (;;)
{
if ( isdefined( self.drone_look_ahead_point ) && var_0 > 0 )
{
var_2 = self.drone_look_ahead_point[2] - self.origin[2];
var_3 = distance2d( self.drone_look_ahead_point, self.origin );
var_4 = var_3 / var_0;
if ( var_4 > 0 && var_2 != 0 )
{
var_5 = abs( var_2 ) / var_4;
var_6 = var_5 * var_1;
if ( var_2 >= var_5 )
self.origin = ( self.origin[0], self.origin[1], self.origin[2] + var_6 );
else if ( var_2 <= var_5 * -1 )
self.origin = ( self.origin[0], self.origin[1], self.origin[2] - var_6 );
}
}
wait( var_1 );
}
}
getpatharray( var_0, var_1 )
{
var_2 = 1;
var_3 = [];
var_3[0]["origin"] = var_1;
var_3[0]["dist"] = 0;
var_4 = undefined;
var_4 = var_0;
var_5["entity"] = maps\_spawner::get_target_ents;
var_5["node"] = maps\_spawner::get_target_nodes;
var_5["struct"] = maps\_spawner::get_target_structs;
var_6 = undefined;
var_7 = [[ var_5["entity"] ]]( var_4 );
var_8 = [[ var_5["node"] ]]( var_4 );
var_9 = [[ var_5["struct"] ]]( var_4 );
if ( var_7.size )
var_6 = "entity";
else if ( var_8.size )
var_6 = "node";
else if ( var_9.size )
var_6 = "struct";
for (;;)
{
var_10 = var_3.size;
var_11 = [[ var_5[var_6] ]]( var_4 );
var_12 = common_scripts\utility::random( var_11 );
var_13 = var_12.origin;
if ( isdefined( var_12.radius ) )
{
if ( !isdefined( self.dronerunoffset ) )
self.dronerunoffset = -1 + randomfloat( 2 );
if ( !isdefined( var_12.angles ) )
var_12.angles = ( 0, 0, 0 );
var_14 = anglestoforward( var_12.angles );
var_15 = anglestoright( var_12.angles );
var_16 = anglestoup( var_12.angles );
var_17 = ( 0, self.dronerunoffset * var_12.radius, 0 );
var_13 = var_13 + var_14 * var_17[0];
var_13 = var_13 + var_15 * var_17[1];
var_13 = var_13 + var_16 * var_17[2];
}
var_3[var_10]["origin"] = var_13;
var_3[var_10]["target"] = var_12.target;
if ( isdefined( self.script_parameters ) && self.script_parameters == "use_last_node_angles" && isdefined( var_12.angles ) )
var_3[var_10]["angles"] = var_12.angles;
if ( isdefined( var_12.script_noteworthy ) )
var_3[var_10]["script_noteworthy"] = var_12.script_noteworthy;
if ( isdefined( var_12.script_linkname ) )
var_3[var_10]["script_linkname"] = var_12.script_linkname;
var_3[var_10 - 1]["dist"] = distance( var_3[var_10]["origin"], var_3[var_10 - 1]["origin"] );
var_3[var_10 - 1]["vec"] = vectornormalize( var_3[var_10]["origin"] - var_3[var_10 - 1]["origin"] );
if ( !isdefined( var_3[var_10 - 1]["target"] ) )
var_3[var_10 - 1]["target"] = var_12.targetname;
if ( !isdefined( var_3[var_10 - 1]["script_noteworthy"] ) && isdefined( var_12.script_noteworthy ) )
var_3[var_10 - 1]["script_noteworthy"] = var_12.script_noteworthy;
if ( !isdefined( var_3[var_10 - 1]["script_linkname"] ) && isdefined( var_12.script_linkname ) )
var_3[var_10 - 1]["script_linkname"] = var_12.script_linkname;
if ( !isdefined( var_12.target ) )
break;
var_4 = var_12.target;
}
if ( isdefined( self.script_parameters ) && self.script_parameters == "use_last_node_angles" && isdefined( var_3[var_10]["angles"] ) )
var_3[var_10]["vec"] = anglestoforward( var_3[var_10]["angles"] );
else
var_3[var_10]["vec"] = var_3[var_10 - 1]["vec"];
var_12 = undefined;
return var_3;
}
draw_point( var_0, var_1, var_2, var_3, var_4, var_5 )
{
var_6 = var_0 + ( var_4, 0, 0 );
var_7 = var_0 - ( var_4, 0, 0 );
thread common_scripts\utility::draw_line_for_time( var_6, var_7, var_1, var_2, var_3, var_5 );
var_6 = var_0 + ( 0, var_4, 0 );
var_7 = var_0 - ( 0, var_4, 0 );
thread common_scripts\utility::draw_line_for_time( var_6, var_7, var_1, var_2, var_3, var_5 );
var_6 = var_0 + ( 0, 0, var_4 );
var_7 = var_0 - ( 0, 0, var_4 );
thread common_scripts\utility::draw_line_for_time( var_6, var_7, var_1, var_2, var_3, var_5 );
}
check_delete()
{
if ( !isdefined( self ) )
return;
if ( !isdefined( self.script_noteworthy ) )
return;
switch ( self.script_noteworthy )
{
case "delete_on_goal":
if ( isdefined( self.magic_bullet_shield ) )
maps\_utility::stop_magic_bullet_shield();
self delete();
break;
case "die_on_goal":
self kill();
break;
}
}

183
maps/_drone_ai.gsc Normal file
View File

@ -0,0 +1,183 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
#using_animtree("generic_human");
init()
{
level.drone_anims["allies"]["stand"]["idle"] = %casual_stand_idle;
level.drone_anims["allies"]["stand"]["run"] = %run_lowready_f_relative;
level.drone_anims["allies"]["stand"]["death"] = %exposed_death;
level.drone_anims["allies"]["stairs"]["up"] = %traverse_stair_run_relative;
level.drone_anims["allies"]["stairs"]["down"] = %traverse_stair_run_down_relative;
level.drone_anims["allies"]["covercrouch"]["idle"][0] = %covercrouch_hide_idle;
level.drone_anims["allies"]["covercrouch"]["idle"][1] = %covercrouch_twitch_1;
level.drone_anims["allies"]["covercrouch"]["idle"][2] = %covercrouch_twitch_2;
level.drone_anims["allies"]["covercrouch"]["idle"][3] = %covercrouch_twitch_3;
level.drone_anims["allies"]["covercrouch"]["idle"][4] = %covercrouch_hide_look;
level.drone_anims["allies"]["covercrouch"]["hide_2_aim"] = %covercrouch_hide_2_aim;
level.drone_anims["allies"]["covercrouch"]["aim_2_hide"] = %covercrouch_aim_2_hide;
level.drone_anims["allies"]["covercrouch"]["reload"] = %covercrouch_reload_hide;
level.drone_anims["allies"]["covercrouch"]["fire"] = %covercrouch_aim5;
level.drone_anims["allies"]["covercrouch"]["death"] = %covercrouch_death_1;
level.drone_anims["allies"]["covercrouch"]["pop_up_chance"] = 1;
level.drone_anims["allies"]["coverstand"]["idle"][0] = %coverstand_hide_idle;
level.drone_anims["allies"]["coverstand"]["idle"][1] = %coverstand_look_quick;
level.drone_anims["allies"]["coverstand"]["idle"][2] = %coverstand_look_quick_v2;
level.drone_anims["allies"]["coverstand"]["idle"][3] = %coverstand_hide_idle_twitch04;
level.drone_anims["allies"]["coverstand"]["idle"][4] = %coverstand_hide_idle_twitch05;
level.drone_anims["allies"]["coverstand"]["hide_2_aim"] = %coverstand_hide_2_aim;
level.drone_anims["allies"]["coverstand"]["aim_2_hide"] = %coverstand_aim_2_hide;
level.drone_anims["allies"]["coverstand"]["reload"] = %coverstand_reloada;
level.drone_anims["allies"]["coverstand"]["fire"] = %exposed_aim_5;
level.drone_anims["allies"]["coverstand"]["death"] = %coverstand_death_left;
level.drone_anims["allies"]["coverstand"]["pop_up_chance"] = 1;
level.drone_anims["allies"]["coverleftstand"]["idle"][0] = %corner_standl_alert_idle;
level.drone_anims["allies"]["coverleftstand"]["idle"][1] = %corner_standl_alert_twitch01;
level.drone_anims["allies"]["coverleftstand"]["idle"][2] = %corner_standl_alert_twitch02;
level.drone_anims["allies"]["coverleftstand"]["idle"][3] = %corner_standl_alert_twitch03;
level.drone_anims["allies"]["coverleftstand"]["idle"][4] = %corner_standl_alert_twitch04;
level.drone_anims["allies"]["coverleftstand"]["hide_2_aim"] = %corner_standl_trans_alert_2_b_v2;
level.drone_anims["allies"]["coverleftstand"]["aim_2_hide"] = %corner_standl_trans_b_2_alert_v2;
level.drone_anims["allies"]["coverleftstand"]["reload"] = %corner_standl_reload_v1;
level.drone_anims["allies"]["coverleftstand"]["fire"] = %exposed_aim_5;
level.drone_anims["allies"]["coverleftstand"]["death"] = %corner_standl_deathb;
level.drone_anims["allies"]["coverleftstand"]["pop_up_chance"] = 1;
level.drone_anims["allies"]["coverrightstand"]["idle"][0] = %corner_standr_alert_idle;
level.drone_anims["allies"]["coverrightstand"]["idle"][1] = %corner_standr_alert_twitch01;
level.drone_anims["allies"]["coverrightstand"]["idle"][2] = %corner_standr_alert_twitch02;
level.drone_anims["allies"]["coverrightstand"]["idle"][3] = %corner_standr_alert_twitch04;
level.drone_anims["allies"]["coverrightstand"]["hide_2_aim"] = %corner_standr_trans_alert_2_b;
level.drone_anims["allies"]["coverrightstand"]["aim_2_hide"] = %corner_standr_trans_b_2_alert;
level.drone_anims["allies"]["coverrightstand"]["reload"] = %corner_standr_reload_v1;
level.drone_anims["allies"]["coverrightstand"]["fire"] = %exposed_aim_5;
level.drone_anims["allies"]["coverrightstand"]["death"] = %corner_standr_deathb;
level.drone_anims["allies"]["coverrightstand"]["pop_up_chance"] = 1;
level.drone_anims["allies"]["coverrightcrouch"]["idle"][0] = %cornercrr_alert_idle;
level.drone_anims["allies"]["coverrightcrouch"]["idle"][1] = %cornercrr_alert_twitch_v1;
level.drone_anims["allies"]["coverrightcrouch"]["idle"][2] = %cornercrr_alert_twitch_v2;
level.drone_anims["allies"]["coverrightcrouch"]["idle"][3] = %cornercrr_alert_twitch_v3;
level.drone_anims["allies"]["coverrightcrouch"]["hide_2_aim"] = %cornercrr_alert_2_lean;
level.drone_anims["allies"]["coverrightcrouch"]["aim_2_hide"] = %cornercrr_lean_2_alert;
level.drone_anims["allies"]["coverrightcrouch"]["reload"] = %cornercrr_reloada;
level.drone_anims["allies"]["coverrightcrouch"]["death"] = %exposed_crouch_death_fetal;
level.drone_anims["allies"]["coverrightcrouch"]["pop_up_chance"] = 1;
level.drone_anims["allies"]["coverguard"]["idle"][0] = %exposed_crouch_idle_twitch_v2;
level.drone_anims["allies"]["coverguard"]["idle"][1] = %exposed_crouch_idle_twitch_v3;
level.drone_anims["allies"]["coverguard"]["reload"] = %exposed_crouch_reload;
level.drone_anims["allies"]["coverguard"]["fire"] = %exposed_crouch_aim_5;
level.drone_anims["allies"]["coverguard"]["death"] = %exposed_crouch_death_fetal;
level.drone_anims["allies"]["coverguard"]["pop_up_chance"] = 0;
level.drone_anims["allies"]["coverprone"]["idle"][0] = %prone_reaction_a;
level.drone_anims["allies"]["coverprone"]["idle"][1] = %prone_twitch_ammocheck;
level.drone_anims["allies"]["coverprone"]["idle"][2] = %prone_twitch_scan;
level.drone_anims["allies"]["coverprone"]["idle"][3] = %prone_twitch_look;
level.drone_anims["allies"]["coverprone"]["idle"][4] = %prone_twitch_lookup;
level.drone_anims["allies"]["coverprone"]["hide_2_aim"] = %prone_2_crouch;
level.drone_anims["allies"]["coverprone"]["aim_2_hide"] = %crouch_2_prone;
level.drone_anims["allies"]["coverprone"]["reload"] = %prone_reload;
level.drone_anims["allies"]["coverprone"]["fire"] = %prone_fire_1;
level.drone_anims["allies"]["coverprone"]["fire_exposed"] = %exposed_crouch_aim_5;
level.drone_anims["allies"]["coverprone"]["death"] = %saw_gunner_prone_death;
level.drone_anims["allies"]["coverprone"]["pop_up_chance"] = 0.5;
level.drone_anims["allies"]["coverprone_no_pop"]["idle"][0] = %prone_reaction_a;
level.drone_anims["allies"]["coverprone_no_pop"]["idle"][1] = %prone_twitch_ammocheck;
level.drone_anims["allies"]["coverprone_no_pop"]["idle"][2] = %prone_twitch_scan;
level.drone_anims["allies"]["coverprone_no_pop"]["idle"][3] = %prone_twitch_look;
level.drone_anims["allies"]["coverprone_no_pop"]["idle"][4] = %prone_twitch_lookup;
level.drone_anims["allies"]["coverprone_no_pop"]["hide_2_aim"] = %prone_2_crouch;
level.drone_anims["allies"]["coverprone_no_pop"]["aim_2_hide"] = %crouch_2_prone;
level.drone_anims["allies"]["coverprone_no_pop"]["reload"] = %prone_reload;
level.drone_anims["allies"]["coverprone_no_pop"]["fire"] = %prone_fire_1;
level.drone_anims["allies"]["coverprone_no_pop"]["fire_exposed"] = %exposed_crouch_aim_5;
level.drone_anims["allies"]["coverprone_no_pop"]["death"] = %saw_gunner_prone_death;
level.drone_anims["allies"]["coverprone_no_pop"]["pop_up_chance"] = 0;
level.drone_anims["axis"]["stand"]["idle"] = %casual_stand_idle;
level.drone_anims["axis"]["stand"]["run"] = %run_lowready_f_relative;
level.drone_anims["axis"]["stand"]["death"] = %exposed_death;
level.drone_anims["axis"]["covercrouch"]["idle"][0] = %covercrouch_hide_idle;
level.drone_anims["axis"]["covercrouch"]["idle"][1] = %covercrouch_twitch_1;
level.drone_anims["axis"]["covercrouch"]["idle"][2] = %covercrouch_twitch_2;
level.drone_anims["axis"]["covercrouch"]["idle"][3] = %covercrouch_twitch_3;
level.drone_anims["axis"]["covercrouch"]["idle"][4] = %covercrouch_hide_look;
level.drone_anims["axis"]["covercrouch"]["hide_2_aim"] = %covercrouch_hide_2_aim;
level.drone_anims["axis"]["covercrouch"]["aim_2_hide"] = %covercrouch_aim_2_hide;
level.drone_anims["axis"]["covercrouch"]["reload"] = %covercrouch_reload_hide;
level.drone_anims["axis"]["covercrouch"]["fire"] = %covercrouch_aim5;
level.drone_anims["axis"]["covercrouch"]["death"] = %covercrouch_death_1;
level.drone_anims["axis"]["covercrouch"]["pop_up_chance"] = 1;
level.drone_anims["axis"]["coverstand"]["idle"][0] = %coverstand_hide_idle;
level.drone_anims["axis"]["coverstand"]["idle"][1] = %coverstand_look_quick;
level.drone_anims["axis"]["coverstand"]["idle"][2] = %coverstand_look_quick_v2;
level.drone_anims["axis"]["coverstand"]["idle"][3] = %coverstand_hide_idle_twitch04;
level.drone_anims["axis"]["coverstand"]["idle"][4] = %coverstand_hide_idle_twitch05;
level.drone_anims["axis"]["coverstand"]["hide_2_aim"] = %coverstand_hide_2_aim;
level.drone_anims["axis"]["coverstand"]["aim_2_hide"] = %coverstand_aim_2_hide;
level.drone_anims["axis"]["coverstand"]["reload"] = %coverstand_reloada;
level.drone_anims["axis"]["coverstand"]["fire"] = %exposed_aim_5;
level.drone_anims["axis"]["coverstand"]["death"] = %coverstand_death_left;
level.drone_anims["axis"]["coverstand"]["pop_up_chance"] = 1;
level.drone_anims["axis"]["coverleftstand"]["idle"][0] = %corner_standl_alert_idle;
level.drone_anims["axis"]["coverleftstand"]["idle"][1] = %corner_standl_alert_twitch01;
level.drone_anims["axis"]["coverleftstand"]["idle"][2] = %corner_standl_alert_twitch02;
level.drone_anims["axis"]["coverleftstand"]["idle"][3] = %corner_standl_alert_twitch03;
level.drone_anims["axis"]["coverleftstand"]["idle"][4] = %corner_standl_alert_twitch04;
level.drone_anims["axis"]["coverleftstand"]["hide_2_aim"] = %corner_standl_trans_alert_2_b_v2;
level.drone_anims["axis"]["coverleftstand"]["aim_2_hide"] = %corner_standl_trans_b_2_alert_v2;
level.drone_anims["axis"]["coverleftstand"]["reload"] = %corner_standl_reload_v1;
level.drone_anims["axis"]["coverleftstand"]["fire"] = %exposed_aim_5;
level.drone_anims["axis"]["coverleftstand"]["death"] = %corner_standl_deathb;
level.drone_anims["axis"]["coverleftstand"]["pop_up_chance"] = 1;
level.drone_anims["axis"]["coverrightstand"]["idle"][0] = %corner_standr_alert_idle;
level.drone_anims["axis"]["coverrightstand"]["idle"][1] = %corner_standr_alert_twitch01;
level.drone_anims["axis"]["coverrightstand"]["idle"][2] = %corner_standr_alert_twitch02;
level.drone_anims["axis"]["coverrightstand"]["idle"][3] = %corner_standr_alert_twitch04;
level.drone_anims["axis"]["coverrightstand"]["hide_2_aim"] = %corner_standr_trans_alert_2_b;
level.drone_anims["axis"]["coverrightstand"]["aim_2_hide"] = %corner_standr_trans_b_2_alert;
level.drone_anims["axis"]["coverrightstand"]["reload"] = %corner_standr_reload_v1;
level.drone_anims["axis"]["coverrightstand"]["fire"] = %exposed_aim_5;
level.drone_anims["axis"]["coverrightstand"]["death"] = %corner_standr_deathb;
level.drone_anims["axis"]["coverrightstand"]["pop_up_chance"] = 1;
level.drone_anims["axis"]["coverrightcrouch"]["idle"][0] = %cornercrr_alert_idle;
level.drone_anims["axis"]["coverrightcrouch"]["idle"][1] = %cornercrr_alert_twitch_v1;
level.drone_anims["axis"]["coverrightcrouch"]["idle"][2] = %cornercrr_alert_twitch_v2;
level.drone_anims["axis"]["coverrightcrouch"]["idle"][3] = %cornercrr_alert_twitch_v3;
level.drone_anims["axis"]["coverrightcrouch"]["hide_2_aim"] = %cornercrr_alert_2_lean;
level.drone_anims["axis"]["coverrightcrouch"]["aim_2_hide"] = %cornercrr_lean_2_alert;
level.drone_anims["axis"]["coverrightcrouch"]["reload"] = %cornercrr_reloada;
level.drone_anims["axis"]["coverrightcrouch"]["death"] = %exposed_crouch_death_fetal;
level.drone_anims["axis"]["coverrightcrouch"]["pop_up_chance"] = 1;
level.drone_anims["axis"]["coverguard"]["idle"][0] = %exposed_crouch_idle_twitch_v2;
level.drone_anims["axis"]["coverguard"]["idle"][1] = %exposed_crouch_idle_twitch_v3;
level.drone_anims["axis"]["coverguard"]["reload"] = %exposed_crouch_reload;
level.drone_anims["axis"]["coverguard"]["fire"] = %exposed_crouch_aim_5;
level.drone_anims["axis"]["coverguard"]["death"] = %exposed_crouch_death_fetal;
level.drone_anims["axis"]["coverguard"]["pop_up_chance"] = 0;
level.drone_anims["axis"]["coverprone"]["idle"][0] = %prone_reaction_a;
level.drone_anims["axis"]["coverprone"]["idle"][1] = %prone_twitch_ammocheck;
level.drone_anims["axis"]["coverprone"]["idle"][2] = %prone_twitch_scan;
level.drone_anims["axis"]["coverprone"]["idle"][3] = %prone_twitch_look;
level.drone_anims["axis"]["coverprone"]["idle"][4] = %prone_twitch_lookup;
level.drone_anims["axis"]["coverprone"]["hide_2_aim"] = %prone_2_crouch;
level.drone_anims["axis"]["coverprone"]["aim_2_hide"] = %crouch_2_prone;
level.drone_anims["axis"]["coverprone"]["reload"] = %prone_reload;
level.drone_anims["axis"]["coverprone"]["fire"] = %prone_fire_1;
level.drone_anims["axis"]["coverprone"]["fire_exposed"] = %exposed_crouch_aim_5;
level.drone_anims["axis"]["coverprone"]["death"] = %saw_gunner_prone_death;
level.drone_anims["axis"]["coverprone"]["pop_up_chance"] = 0.5;
level.drone_anims["axis"]["coverprone_no_pop"]["idle"][0] = %prone_reaction_a;
level.drone_anims["axis"]["coverprone_no_pop"]["idle"][1] = %prone_twitch_ammocheck;
level.drone_anims["axis"]["coverprone_no_pop"]["idle"][2] = %prone_twitch_scan;
level.drone_anims["axis"]["coverprone_no_pop"]["idle"][3] = %prone_twitch_look;
level.drone_anims["axis"]["coverprone_no_pop"]["idle"][4] = %prone_twitch_lookup;
level.drone_anims["axis"]["coverprone_no_pop"]["hide_2_aim"] = %prone_2_crouch;
level.drone_anims["axis"]["coverprone_no_pop"]["aim_2_hide"] = %crouch_2_prone;
level.drone_anims["axis"]["coverprone_no_pop"]["reload"] = %prone_reload;
level.drone_anims["axis"]["coverprone_no_pop"]["fire"] = %prone_fire_1;
level.drone_anims["axis"]["coverprone_no_pop"]["fire_exposed"] = %exposed_crouch_aim_5;
level.drone_anims["axis"]["coverprone_no_pop"]["death"] = %saw_gunner_prone_death;
level.drone_anims["axis"]["coverprone_no_pop"]["pop_up_chance"] = 0;
level._effect["ak47_muzzleflash"] = loadfx( "vfx/gameplay/muzzle_flashes/ar/vfx_muz_ar_w" );
level._effect["m16_muzzleflash"] = loadfx( "vfx/gameplay/muzzle_flashes/ar/vfx_muz_ar_w" );
maps\_drone::initglobals();
}

190
maps/_drone_base.gsc Normal file
View File

@ -0,0 +1,190 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
drone_give_soul()
{
assign_drone_tree();
self startusingheroonlylighting();
if ( isdefined( self.script_moveplaybackrate ) )
self.moveplaybackrate = self.script_moveplaybackrate;
else
self.moveplaybackrate = 1;
if ( self.team == "allies" )
{
maps\_names::get_name();
self setlookattext( self.name, &"" );
}
if ( isdefined( level.dronecallbackthread ) )
self thread [[ level.dronecallbackthread ]]();
if ( !isdefined( self.script_friendly_fire_disable ) )
level thread maps\_friendlyfire::friendly_fire_think( self );
if ( !isdefined( level.ai_dont_glow_in_thermal ) )
thermaldrawenabledrone();
}
thermaldrawenabledrone()
{
if ( !isdefined( level.dronesthermalteamselect ) )
level.dronesthermalteamselect = "all";
var_0 = 0;
switch ( level.dronesthermalteamselect )
{
case "all":
var_0 = 1;
break;
case "axis":
var_0 = self.team == "axis";
break;
default:
break;
}
if ( var_0 )
self thermaldrawenable();
}
drone_init_path()
{
if ( !isdefined( self.target ) )
return;
if ( isdefined( level.drone_paths[self.target] ) )
return;
level.drone_paths[self.target] = 1;
var_0 = self.target;
var_1 = common_scripts\utility::getstruct( var_0, "targetname" );
if ( !isdefined( var_1 ) )
return;
var_2 = [];
var_3 = [];
var_4 = var_1;
for (;;)
{
var_1 = var_4;
var_5 = 0;
for (;;)
{
if ( !isdefined( var_1.target ) )
break;
var_6 = common_scripts\utility::getstructarray( var_1.target, "targetname" );
if ( var_6.size )
break;
var_7 = undefined;
foreach ( var_9 in var_6 )
{
if ( isdefined( var_3[var_9.origin + ""] ) )
continue;
var_7 = var_9;
break;
}
if ( !isdefined( var_7 ) )
break;
var_3[var_7.origin + ""] = 1;
var_2[var_1.targetname] = var_7.origin - var_1.origin;
var_1.angles = vectortoangles( var_2[var_1.targetname] );
var_1 = var_7;
var_5 = 1;
}
if ( !var_5 )
break;
}
var_0 = self.target;
var_1 = common_scripts\utility::getstruct( var_0, "targetname" );
var_11 = var_1;
var_3 = [];
for (;;)
{
var_1 = var_4;
var_5 = 0;
for (;;)
{
if ( !isdefined( var_1.target ) )
return;
if ( !isdefined( var_2[var_1.targetname] ) )
return;
var_6 = common_scripts\utility::getstructarray( var_1.target, "targetname" );
if ( var_6.size )
break;
var_7 = undefined;
foreach ( var_9 in var_6 )
{
if ( isdefined( var_3[var_9.origin + ""] ) )
continue;
var_7 = var_9;
break;
}
if ( !isdefined( var_7 ) )
break;
if ( isdefined( var_1.radius ) )
{
var_14 = var_2[var_11.targetname];
var_15 = var_2[var_1.targetname];
var_16 = ( var_14 + var_15 ) * 0.5;
var_1.angles = vectortoangles( var_16 );
}
var_5 = 1;
var_11 = var_1;
var_1 = var_7;
}
if ( !var_5 )
break;
}
}
assign_drone_tree()
{
if ( isdefined( self.type ) )
{
if ( self.type == "dog" )
assign_animals_tree();
else
assign_generic_human_tree();
}
}
#using_animtree("generic_human");
assign_generic_human_tree()
{
self useanimtree( #animtree );
}
#using_animtree("animals");
assign_animals_tree()
{
self useanimtree( #animtree );
}

13
maps/_drone_civilian.gsc Normal file
View File

@ -0,0 +1,13 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
#using_animtree("generic_human");
init()
{
level.drone_anims["neutral"]["stand"]["idle"] = %casual_stand_idle;
level.drone_anims["neutral"]["stand"]["run"] = %unarmed_scared_run;
level.drone_anims["neutral"]["stand"]["death"] = %exposed_death;
level.attachpropsfunction = animscripts\civilian\civilian_init::attachprops;
maps\_drone::initglobals();
}

87
maps/_drone_deer.gsc Normal file
View File

@ -0,0 +1,87 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
#using_animtree("animals");
init()
{
level.drone_anims["team3"]["stand"]["idle"] = %deer_idle_iw6;
level.drone_anims["team3"]["stand"]["run"] = %deer_run_iw6;
level.drone_anims["team3"]["stand"]["death"] = %deer_death_iw6;
maps\_drone::initglobals();
}
deer_dronespawn( var_0 )
{
if ( !isdefined( var_0 ) )
var_0 = self;
var_0 maps\_utility::script_delay();
var_1 = deer_dronespawn_internal( var_0 );
var_1 deer_drone_spawn_func();
var_1 [[ level.drone_spawn_func ]]();
var_1.spawn_funcs = var_0.spawn_functions;
return var_1;
}
deer_dronespawn_internal( var_0 )
{
var_1 = var_0 spawndrone();
var_1.spawner = var_0;
var_1.drone_delete_on_unload = isdefined( var_0.script_noteworthy ) && var_0.script_noteworthy == "drone_delete_on_unload";
var_0 notify( "drone_spawned", var_1 );
return var_1;
}
deer_drone_spawn_func()
{
self.noragdoll = 1;
self.health = 250;
self.drone_idle_custom = 1;
self.drone_idle_override = ::deer_drone_custom_idle;
self.drone_loop_custom = 1;
self.drone_loop_override = ::deer_drone_custom_loop;
self.drone_run_speed = randomintrange( 580, 620 );
thread deer_damage_fx();
}
deer_damage_fx()
{
self endon( "entitydeleted" );
for (;;)
{
self waittill( "damage", var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 );
if ( isdefined( var_7 ) && var_7 != "" )
playfxontag( common_scripts\utility::getfx( "melee_knife_ai" ), self, var_7 );
}
}
deer_drone_custom_idle()
{
self clearanim( %root, 0.2 );
self stopanimscripted();
var_0 = undefined;
var_1 = level.drone_anims["team3"]["stand"]["idle"];
if ( isarray( var_1 ) )
{
if ( var_1.size > 1 )
var_0 = common_scripts\utility::random( var_1 );
}
else
var_0 = var_1;
self setflaggedanimknoballrestart( "drone_anim", var_0, %root, 1, 0.2, 1 );
self.droneanim = var_1;
}
deer_drone_custom_loop( var_0, var_1 )
{
wait( randomfloatrange( 0.1, 0.35 ) );
self clearanim( %deer, 0.2 );
self stopanimscripted();
self setanimknob( var_0, 1, 0.2, var_1 );
self.droneanim = var_0;
}

View File

@ -0,0 +1,22 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
#using_animtree("generic_human");
main( var_0 )
{
if ( isdefined( var_0 ) )
{
level.dynamic_run_speed_dialogue = var_0;
foreach ( var_2 in var_0 )
level.scr_radio[var_2] = var_2;
}
level.scr_anim["generic"]["DRS_sprint"] = %sprint1_loop;
level.scr_anim["generic"]["DRS_combat_jog"] = %combat_jog;
level.scr_anim["generic"]["DRS_run_2_stop"] = %run_2_crouch_f;
level.scr_anim["generic"]["DRS_stop_idle"][0] = %exposed_crouch_aim_5;
level.scr_anim["generic"]["signal_go"] = %cqb_stand_wave_go_v1;
level.drs_ahead_test = maps\_utility_code::dynamic_run_ahead_test;
}

482
maps/_endmission.gsc Normal file
View File

@ -0,0 +1,482 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
var_0 = [];
var_0 = createmission();
var_0 addlevel( "prologue", 0, "LEVEL_1", 1, "EXTRA2", undefined );
var_0 addlevel( "deer_hunt", 0, "LEVEL_2", 1, "EXTRA2", undefined );
var_0 addlevel( "nml", 0, "LEVEL_3", 1, "EXTRA2", undefined );
var_0 addlevel( "enemyhq", 0, "LEVEL_4", 1, "EXTRA2", undefined );
var_0 addlevel( "homecoming", 0, "LEVEL_5", 1, "EXTRA2", undefined );
var_0 addlevel( "flood", 0, "LEVEL_6", 1, "EXTRA2", undefined );
var_0 addlevel( "cornered", 0, "LEVEL_7", 1, "EXTRA2", undefined );
var_0 addlevel( "oilrocks", 0, "LEVEL_8", 1, "EXTRA2", undefined );
var_0 addlevel( "jungle_ghosts", 0, "LEVEL_9", 1, "EXTRA2", undefined );
var_0 addlevel( "clockwork", 0, "LEVEL_10", 1, "EXTRA2", undefined );
var_0 addlevel( "black_ice", 0, "LEVEL_11", 1, "EXTRA2", undefined );
var_0 addlevel( "ship_graveyard", 0, "LEVEL_12", 1, "EXTRA2", undefined );
var_0 addlevel( "factory", 0, "LEVEL_13", 1, "EXTRA2", undefined );
var_0 addlevel( "las_vegas", 0, "LEVEL_14", 1, "EXTRA2", undefined );
var_0 addlevel( "carrier", 0, "LEVEL_15", 1, "EXTRA2", undefined );
var_0 addlevel( "satfarm", 1, undefined, 1, "EXTRA2", undefined );
var_0 addlevel( "satfarm_b", 0, "LEVEL_16", 1, "EXTRA2", undefined );
var_0 addlevel( "loki", 0, "LEVEL_17", 1, "EXTRA2", undefined );
var_0 addlevel( "skyway", 0, "LEVEL_18", 1, "EXTRA2", undefined );
if ( isdefined( level.endmission_main_func ) )
{
[[ level.endmission_main_func ]]();
level.endmission_main_func = undefined;
}
level.missionsettings = var_0;
}
debug_test_next_mission()
{
wait 10;
while ( getdvarint( "test_next_mission" ) < 1 )
wait 3;
_nextmission();
}
_nextmission()
{
if ( maps\_utility::is_demo() )
{
setsaveddvar( "ui_nextMission", "0" );
if ( isdefined( level.nextmission_exit_time ) )
changelevel( "", 0, level.nextmission_exit_time );
else
changelevel( "", 0 );
}
else
{
level notify( "nextmission" );
level.nextmission = 1;
level.player enableinvulnerability();
var_0 = undefined;
setsaveddvar( "ui_nextMission", "1" );
setdvar( "ui_showPopup", "0" );
setdvar( "ui_popupString", "" );
setdvar( "ui_prev_map", level.script );
if ( level.script == "prologue" )
level.player setlocalplayerprofiledata( "unlockedAliens", 1 );
game["previous_map"] = undefined;
var_0 = level.missionsettings getlevelindex( level.script );
if ( level.script == "sp_intro" && !getdvarint( "prologue_select" ) )
{
for ( var_1 = var_0 + 1; var_1 < level.missionsettings.levels.size - 1; var_1++ )
{
if ( level.missionsettings.levels[var_1].name == "sp_intro" )
{
var_0 = var_1;
break;
}
}
}
setdvar( "prologue_select", "0" );
maps\_gameskill::auto_adust_zone_complete( "aa_main_" + level.script );
if ( !isdefined( var_0 ) )
{
missionsuccess( level.script );
return;
}
if ( level.script != "skyway" )
maps\_utility::level_end_save();
level.missionsettings setlevelcompleted( var_0 );
var_2 = updatesppercent();
updategamerprofile();
if ( level.missionsettings hasachievement( var_0 ) )
maps\_utility::giveachievement_wrapper( level.missionsettings getachievement( var_0 ) );
if ( level.missionsettings haslevelveteranaward( var_0 ) && getlevelcompleted( var_0 ) == 4 && level.missionsettings check_other_haslevelveteranachievement( var_0 ) )
maps\_utility::giveachievement_wrapper( level.missionsettings getlevelveteranaward( var_0 ) );
if ( level.missionsettings hasmissionhardenedaward() && level.missionsettings getlowestskill() > 2 )
maps\_utility::giveachievement_wrapper( level.missionsettings gethardenedaward() );
if ( level.script == "skyway" )
return;
var_3 = var_0 + 1;
if ( maps\_utility::arcademode() )
{
if ( !getdvarint( "arcademode_full" ) )
{
setsaveddvar( "ui_nextMission", "0" );
missionsuccess( level.script );
return;
}
}
if ( level.missionsettings skipssuccess( var_0 ) )
{
if ( isdefined( level.missionsettings getfadetime( var_0 ) ) )
{
changelevel( level.missionsettings getlevelname( var_3 ), level.missionsettings getkeepweapons( var_0 ), level.missionsettings getfadetime( var_0 ) );
return;
}
changelevel( level.missionsettings getlevelname( var_3 ), level.missionsettings getkeepweapons( var_0 ) );
return;
return;
}
missionsuccess( level.missionsettings getlevelname( var_3 ), level.missionsettings getkeepweapons( var_0 ) );
}
}
updatesppercent()
{
var_0 = int( gettotalpercentcompletesp() * 100 );
if ( getdvarint( "mis_cheat" ) == 0 )
level.player setlocalplayerprofiledata( "percentCompleteSP", var_0 );
return var_0;
}
gettotalpercentcompletesp()
{
var_0 = max( getstat_easy(), getstat_regular() );
var_1 = 0.5;
var_2 = getstat_hardened();
var_3 = 0.25;
var_4 = getstat_veteran();
var_5 = 0.1;
var_6 = getstat_intel();
var_7 = 0.15;
var_8 = 0.0;
var_8 = var_8 + var_1 * var_0;
var_8 = var_8 + var_3 * var_2;
var_8 = var_8 + var_5 * var_4;
var_8 = var_8 + var_7 * var_6;
return var_8;
}
getstat_progression( var_0 )
{
var_1 = level.player getlocalplayerprofiledata( "missionHighestDifficulty" );
var_2 = 0;
var_3 = [];
var_4 = 0;
for ( var_5 = 0; var_5 < level.missionsettings.levels.size - 1; var_5++ )
{
if ( int( var_1[var_5] ) >= var_0 )
var_2++;
}
var_6 = var_2 / ( level.missionsettings.levels.size - 1 ) * 100;
return var_6;
}
getstat_easy()
{
var_0 = 1;
return getstat_progression( var_0 );
}
getstat_regular()
{
var_0 = 2;
return getstat_progression( var_0 );
}
getstat_hardened()
{
var_0 = 3;
return getstat_progression( var_0 );
}
getstat_veteran()
{
var_0 = 4;
return getstat_progression( var_0 );
}
getstat_intel()
{
var_0 = 45;
var_1 = level.player getlocalplayerprofiledata( "cheatPoints" ) / var_0 * 100;
return var_1;
}
getlevelcompleted( var_0 )
{
return int( level.player getlocalplayerprofiledata( "missionHighestDifficulty" )[var_0] );
}
getsolevelcompleted( var_0 )
{
return int( level.player getlocalplayerprofiledata( "missionSOHighestDifficulty" )[var_0] );
}
setlevelcompleted( var_0 )
{
var_1 = level.player getlocalplayerprofiledata( "missionHighestDifficulty" );
var_2 = "";
for ( var_3 = 0; var_3 < var_1.size; var_3++ )
{
if ( var_3 != var_0 )
{
var_2 = var_2 + var_1[var_3];
continue;
}
if ( level.gameskill + 1 > int( var_1[var_0] ) )
{
var_2 = var_2 + ( level.gameskill + 1 );
continue;
}
var_2 = var_2 + var_1[var_3];
}
var_4 = "";
var_5 = 0;
var_6 = 0;
for ( var_7 = 0; var_7 < var_2.size; var_7++ )
{
if ( int( var_2[var_7] ) == 0 || var_5 )
{
var_4 = var_4 + "0";
var_5 = 1;
continue;
}
var_4 = var_4 + var_2[var_7];
var_6++;
}
_sethighestmissionifnotcheating( var_6 );
_setmissiondiffstringifnotcheating( var_4 );
}
_sethighestmissionifnotcheating( var_0 )
{
if ( getdvar( "mis_cheat" ) == "1" )
return;
level.player setlocalplayerprofiledata( "highestMission", var_0 );
}
_setmissiondiffstringifnotcheating( var_0 )
{
if ( getdvar( "mis_cheat" ) == "1" )
return;
level.player setlocalplayerprofiledata( "missionHighestDifficulty", var_0 );
}
getlevelskill( var_0 )
{
var_1 = level.player getlocalplayerprofiledata( "missionHighestDifficulty" );
return int( var_1[var_0] );
}
getmissiondvarstring( var_0 )
{
if ( var_0 < 9 )
return "mis_0" + ( var_0 + 1 );
else
return "mis_" + ( var_0 + 1 );
}
getlowestskill()
{
var_0 = level.player getlocalplayerprofiledata( "missionHighestDifficulty" );
var_1 = 4;
for ( var_2 = 0; var_2 < self.levels.size; var_2++ )
{
if ( int( var_0[var_2] ) < var_1 )
var_1 = int( var_0[var_2] );
}
return var_1;
}
createmission( var_0 )
{
var_1 = spawnstruct();
var_1.levels = [];
var_1.prereqs = [];
var_1.hardenedaward = var_0;
return var_1;
}
addlevel( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
{
var_7 = self.levels.size;
self.levels[var_7] = spawnstruct();
self.levels[var_7].name = var_0;
self.levels[var_7].keepweapons = var_1;
self.levels[var_7].achievement = var_2;
self.levels[var_7].skipssuccess = var_3;
self.levels[var_7].veteran_achievement = var_4;
if ( isdefined( var_5 ) )
self.levels[var_7].fade_time = var_5;
}
addprereq( var_0 )
{
var_1 = self.prereqs.size;
self.prereqs[var_1] = var_0;
}
getlevelindex( var_0 )
{
foreach ( var_3, var_2 in self.levels )
{
if ( var_2.name == var_0 )
return var_3;
}
return undefined;
}
getlevelname( var_0 )
{
return self.levels[var_0].name;
}
getkeepweapons( var_0 )
{
return self.levels[var_0].keepweapons;
}
getachievement( var_0 )
{
return self.levels[var_0].achievement;
}
getlevelveteranaward( var_0 )
{
return self.levels[var_0].veteran_achievement;
}
getfadetime( var_0 )
{
if ( !isdefined( self.levels[var_0].fade_time ) )
return undefined;
return self.levels[var_0].fade_time;
}
haslevelveteranaward( var_0 )
{
if ( isdefined( self.levels[var_0].veteran_achievement ) )
return 1;
else
return 0;
}
hasachievement( var_0 )
{
if ( isdefined( self.levels[var_0].achievement ) )
return 1;
else
return 0;
}
check_other_haslevelveteranachievement( var_0 )
{
for ( var_1 = 0; var_1 < self.levels.size; var_1++ )
{
if ( var_1 == var_0 )
continue;
if ( !haslevelveteranaward( var_1 ) )
continue;
if ( self.levels[var_1].veteran_achievement == self.levels[var_0].veteran_achievement )
{
if ( getlevelcompleted( var_1 ) < 4 )
return 0;
}
}
return 1;
}
skipssuccess( var_0 )
{
if ( !isdefined( self.levels[var_0].skipssuccess ) )
return 0;
return 1;
}
gethardenedaward()
{
return self.hardenedaward;
}
hasmissionhardenedaward()
{
if ( isdefined( self.hardenedaward ) )
return 1;
else
return 0;
}
getnextlevelindex()
{
for ( var_0 = 0; var_0 < self.levels.size; var_0++ )
{
if ( !getlevelskill( var_0 ) )
return var_0;
}
return 0;
}
force_all_complete()
{
var_0 = level.player getlocalplayerprofiledata( "missionHighestDifficulty" );
var_1 = "";
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
{
if ( var_2 < 20 )
{
var_1 = var_1 + 2;
continue;
}
var_1 = var_1 + 0;
}
level.player setlocalplayerprofiledata( "missionHighestDifficulty", var_1 );
level.player setlocalplayerprofiledata( "highestMission", 20 );
}
clearall()
{
level.player setlocalplayerprofiledata( "missionHighestDifficulty", "00000000000000000000000000000000000000000000000000" );
level.player setlocalplayerprofiledata( "highestMission", 1 );
}
credits_end()
{
changelevel( "airplane", 0 );
}

355
maps/_friendlyfire.gsc Normal file
View File

@ -0,0 +1,355 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
level.friendlyfire["min_participation"] = -200;
level.friendlyfire["max_participation"] = 1000;
level.friendlyfire["enemy_kill_points"] = 250;
level.friendlyfire["friend_kill_points"] = -650;
level.friendlyfire["point_loss_interval"] = 1.25;
level.player.participation = 0;
level.friendlyfiredisabled = 0;
level.friendlyfiredisabledfordestructible = 0;
setdvarifuninitialized( "friendlyfire_dev_disabled", "0" );
common_scripts\utility::flag_init( "friendly_fire_warning" );
thread debug_friendlyfire();
thread participation_point_flattenovertime();
}
debug_friendlyfire()
{
}
apply_friendly_fire_damage_modifier( var_0 )
{
level.friendlyfire_damage_modifier = var_0;
}
remove_friendly_fire_damage_modifier( var_0 )
{
level.friendlyfire_damage_modifier = undefined;
}
friendly_fire_think( var_0 )
{
if ( !isdefined( var_0 ) )
return;
if ( !isdefined( var_0.team ) )
var_0.team = "allies";
if ( isdefined( level.no_friendly_fire_penalty ) )
return;
level endon( "mission failed" );
level thread notifydamage( var_0 );
level thread notifydamagenotdone( var_0 );
level thread notifydeath( var_0 );
for (;;)
{
if ( !isdefined( var_0 ) )
return;
if ( var_0.health <= 0 )
return;
var_1 = undefined;
var_2 = undefined;
var_3 = undefined;
var_4 = undefined;
var_5 = undefined;
var_6 = undefined;
var_7 = undefined;
var_0 waittill( "friendlyfire_notify", var_1, var_2, var_3, var_4, var_5, var_6 );
if ( !isdefined( var_0 ) )
return;
if ( !isdefined( var_2 ) )
continue;
if ( isdefined( level.friendlyfire_damage_modifier ) )
{
var_1 = var_1 * level.friendlyfire_damage_modifier;
var_1 = int( var_1 );
}
var_8 = 0;
if ( !isdefined( var_6 ) )
var_6 = var_0.damageweapon;
if ( isdefined( level.friendlyfire_destructible_attacker ) )
{
if ( isdefined( var_2.damageowner ) )
{
var_7 = 1;
var_2 = var_2.damageowner;
}
}
if ( isdefined( level.friendlyfire_enable_attacker_owner_check ) )
{
if ( isdefined( var_2 ) && isdefined( var_2.owner ) && var_2.owner == level.player )
var_8 = 1;
}
if ( isplayer( var_2 ) )
{
var_8 = 1;
if ( isdefined( var_6 ) && var_6 == "none" )
var_8 = 0;
if ( var_2 isusingturret() )
var_8 = 1;
if ( isdefined( var_7 ) )
var_8 = 1;
}
else if ( isdefined( var_2.code_classname ) && var_2.code_classname == "script_vehicle" )
{
var_9 = var_2 getvehicleowner();
if ( isdefined( var_9 ) && isplayer( var_9 ) )
var_8 = 1;
}
if ( !var_8 )
continue;
if ( !isdefined( var_0.team ) )
continue;
var_10 = var_0.team == level.player.team;
var_11 = undefined;
if ( isdefined( var_0.type ) && var_0.type == "civilian" )
var_11 = 1;
else
var_11 = issubstr( var_0.classname, "civilian" );
var_12 = var_1 == -1;
if ( !var_10 && !var_11 )
{
if ( var_12 )
{
level.player.participation = level.player.participation + level.friendlyfire["enemy_kill_points"];
participation_point_cap();
return;
}
}
else
{
if ( isdefined( var_0.no_friendly_fire_penalty ) )
continue;
if ( var_5 == "MOD_PROJECTILE_SPLASH" && isdefined( level.no_friendly_fire_splash_damage ) )
continue;
if ( isdefined( var_6 ) && var_6 == "claymore" )
continue;
if ( var_12 )
{
if ( isdefined( var_0.friend_kill_points ) )
level.player.participation = level.player.participation + var_0.friend_kill_points;
else
level.player.participation = level.player.participation + level.friendlyfire["friend_kill_points"];
}
else
level.player.participation = level.player.participation - var_1;
participation_point_cap();
if ( check_grenade( var_0, var_5 ) && savecommit_aftergrenade() )
{
if ( var_12 )
return;
else
continue;
}
if ( isdefined( level.friendly_fire_fail_check ) )
{
[[ level.friendly_fire_fail_check ]]( var_0, var_1, var_2, var_3, var_4, var_5, var_6 );
continue;
}
friendly_fire_checkpoints( var_11 );
}
}
}
friendly_fire_checkpoints( var_0 )
{
if ( isdefined( level.failonfriendlyfire ) && level.failonfriendlyfire )
{
level thread missionfail( var_0 );
return;
}
var_1 = level.friendlyfiredisabledfordestructible;
if ( isdefined( level.friendlyfire_destructible_attacker ) && var_0 )
var_1 = 0;
if ( var_1 )
return;
if ( level.friendlyfiredisabled == 1 )
return;
if ( level.player.participation <= level.friendlyfire["min_participation"] )
level thread missionfail( var_0 );
}
check_grenade( var_0, var_1 )
{
if ( !isdefined( var_0 ) )
return 0;
var_2 = 0;
if ( isdefined( var_0.damageweapon ) && var_0.damageweapon == "none" )
var_2 = 1;
if ( isdefined( var_1 ) && var_1 == "MOD_GRENADE_SPLASH" )
var_2 = 1;
return var_2;
}
savecommit_aftergrenade()
{
var_0 = gettime();
if ( var_0 < 4500 )
return 1;
else if ( var_0 - level.lastautosavetime < 4500 )
return 1;
return 0;
}
participation_point_cap()
{
if ( level.player.participation > level.friendlyfire["max_participation"] )
level.player.participation = level.friendlyfire["max_participation"];
if ( level.player.participation < level.friendlyfire["min_participation"] )
level.player.participation = level.friendlyfire["min_participation"];
}
participation_point_flattenovertime()
{
level endon( "mission failed" );
for (;;)
{
if ( level.player.participation > 0 )
level.player.participation--;
else if ( level.player.participation < 0 )
level.player.participation++;
wait( level.friendlyfire["point_loss_interval"] );
}
}
turnbackon()
{
level.friendlyfiredisabled = 0;
}
turnoff()
{
level.friendlyfiredisabled = 1;
}
missionfail( var_0 )
{
if ( !isdefined( var_0 ) )
var_0 = 0;
if ( getdvar( "friendlyfire_dev_disabled" ) == "1" )
return;
level.player endon( "death" );
if ( !isalive( level.player ) )
return;
level endon( "mine death" );
level notify( "mission failed" );
level notify( "friendlyfire_mission_fail" );
waittillframeend;
setsaveddvar( "hud_missionFailed", 1 );
setsaveddvar( "ammoCounterHide", 1 );
setsaveddvar( "hud_showstance", 0 );
setsaveddvar( "actionSlotsHide", 1 );
if ( isdefined( level.player.failingmission ) )
return;
if ( var_0 )
maps\_player_death::set_deadquote( &"SCRIPT_MISSIONFAIL_CIVILIAN_KILLED" );
else if ( isdefined( level.custom_friendly_fire_message ) )
maps\_player_death::set_deadquote( level.custom_friendly_fire_message );
else if ( level.campaign == "british" )
maps\_player_death::set_deadquote( &"SCRIPT_MISSIONFAIL_KILLTEAM_BRITISH" );
else if ( level.campaign == "russian" )
maps\_player_death::set_deadquote( &"SCRIPT_MISSIONFAIL_KILLTEAM_RUSSIAN" );
else
maps\_player_death::set_deadquote( &"SCRIPT_MISSIONFAIL_KILLTEAM_AMERICAN" );
if ( isdefined( level.custom_friendly_fire_shader ) )
thread maps\_player_death::set_death_icon( level.custom_friendly_fire_shader, 64, 64, 0 );
reconspatialevent( level.player.origin, "script_friendlyfire: civilian %d", var_0 );
maps\_utility::missionfailedwrapper();
}
notifydamage( var_0 )
{
level endon( "mission failed" );
var_0 endon( "death" );
for (;;)
{
var_1 = undefined;
var_2 = undefined;
var_3 = undefined;
var_4 = undefined;
var_5 = undefined;
var_6 = undefined;
var_7 = undefined;
var_8 = undefined;
var_9 = undefined;
var_10 = undefined;
var_0 waittill( "damage", var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10 );
var_0 notify( "friendlyfire_notify", var_1, var_2, var_3, var_4, var_5, var_10 );
}
}
notifydamagenotdone( var_0 )
{
level endon( "mission failed" );
var_0 waittill( "damage_notdone", var_1, var_2, var_3, var_4, var_5 );
var_0 notify( "friendlyfire_notify", -1, var_2, undefined, undefined, var_5 );
}
notifydeath( var_0 )
{
level endon( "mission failed" );
var_0 waittill( "death", var_1, var_2, var_3 );
var_0 notify( "friendlyfire_notify", -1, var_1, undefined, undefined, var_2, var_3 );
}
detectfriendlyfireonentity( var_0 )
{
}

2055
maps/_gameskill.gsc Normal file

File diff suppressed because it is too large Load Diff

184
maps/_geo_mover.gsc Normal file
View File

@ -0,0 +1,184 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
trigger_moveto( var_0 )
{
if ( !isdefined( level.mover_candidates ) )
{
level.mover_candidates = getentarray( "script_brushmodel", "classname" );
level.mover_candidates = common_scripts\utility::array_combine( level.mover_candidates, getentarray( "script_model", "classname" ) );
level.mover_object = common_scripts\utility::spawn_tag_origin();
}
var_1 = getentarray( self.target, "targetname" );
common_scripts\utility::array_thread( var_1, ::moveto_volume_think, self );
}
moveto_volume_think( var_0 )
{
var_1 = [];
var_2 = self;
foreach ( var_4 in level.mover_candidates )
{
level.mover_object.origin = var_4.origin;
if ( level.mover_object istouching( var_2 ) )
{
level.mover_candidates = common_scripts\utility::array_remove( level.mover_candidates, var_4 );
var_1 = common_scripts\utility::array_add( var_1, var_4 );
}
}
var_6 = undefined;
foreach ( var_4 in var_1 )
{
if ( isdefined( var_4.script_noteworthy ) && var_4.script_noteworthy == "mover" || isdefined( var_4.targetname ) && var_4.targetname == "mover" )
{
var_6 = var_4;
break;
}
}
foreach ( var_4 in var_1 )
{
if ( var_6 != var_4 )
var_4 linkto( var_6 );
}
var_11 = common_scripts\utility::get_target_ent();
if ( !isdefined( var_11.angles ) )
var_11.angles = ( 0, 0, 0 );
var_0.mover = var_6;
var_6.origin = var_11.origin;
var_6.angles = var_11.angles;
var_12 = undefined;
var_13 = 5;
var_14 = 0;
var_15 = 0;
if ( isdefined( var_11.script_duration ) )
var_13 = var_11.script_duration;
if ( isdefined( var_11.script_accel ) )
var_14 = var_11.script_accel;
if ( isdefined( var_11.script_decel ) )
var_15 = var_11.script_decel;
if ( isdefined( var_11.script_earthquake ) )
var_12 = var_11.script_earthquake;
var_0 waittill( "trigger" );
var_11 maps\_utility::script_delay();
if ( isdefined( var_11.target ) )
var_11 = var_11 common_scripts\utility::get_target_ent();
else
var_11 = undefined;
while ( isdefined( var_11 ) )
{
if ( isdefined( var_12 ) )
{
if ( issubstr( var_12, "constant" ) )
var_6 thread constant_quake( var_12 );
}
if ( !isdefined( var_11.angles ) )
var_11.angles = ( 0, 0, 0 );
var_6 moveto_rotateto( var_11, var_13, var_14, var_15 );
var_6 notify( "stop_constant_quake" );
var_13 = 5;
var_14 = 0;
var_15 = 0;
var_12 = undefined;
var_11 maps\_utility::script_delay();
if ( isdefined( var_11.script_duration ) )
var_13 = var_11.script_duration;
if ( isdefined( var_11.script_accel ) )
var_14 = var_11.script_accel;
if ( isdefined( var_11.script_decel ) )
var_15 = var_11.script_decel;
if ( isdefined( var_11.script_earthquake ) )
var_12 = var_11.script_earthquake;
var_16 = var_11 common_scripts\utility::get_linked_ents();
if ( var_16.size > 0 )
{
if ( issubstr( var_16[0].classname, "trigger" ) )
var_16[0] waittill( "trigger" );
}
if ( isdefined( var_11.target ) )
{
var_11 = var_11 common_scripts\utility::get_target_ent();
continue;
}
var_11 = undefined;
}
self notify( "done_moving" );
}
constant_quake( var_0 )
{
self endon( "stop_constant_quake" );
for (;;)
{
thread common_scripts\utility::do_earthquake( var_0, self.origin );
wait( randomfloatrange( 0.1, 0.2 ) );
}
}
moveto_rotateto_speed( var_0, var_1, var_2, var_3 )
{
var_4 = var_0.origin;
var_5 = self.origin;
var_6 = distance( var_5, var_4 );
var_7 = var_6 / var_1;
if ( !isdefined( var_2 ) )
var_2 = 0;
if ( !isdefined( var_3 ) )
var_3 = 0;
self rotateto( var_0.angles, var_7, var_7 * var_2, var_7 * var_3 );
self moveto( var_4, var_7, var_7 * var_2, var_7 * var_3 );
self waittill( "movedone" );
}
moveto_rotateto( var_0, var_1, var_2, var_3 )
{
self moveto( var_0.origin, var_1, var_2, var_3 );
self rotateto( var_0.angles, var_1, var_2, var_3 );
self waittill( "movedone" );
}
set_start_positions( var_0 )
{
var_1 = common_scripts\utility::getstructarray( var_0, "targetname" );
foreach ( var_3 in var_1 )
{
switch ( var_3.script_noteworthy )
{
case "player":
level.player setorigin( var_3.origin );
level.player setplayerangles( var_3.angles );
break;
}
}
}

37
maps/_global_fx.gsc Normal file
View File

@ -0,0 +1,37 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
maps\_global_fx_code::global_fx( "ch_streetlight_02_FX_origin", "fx/misc/lighthaze" );
maps\_global_fx_code::global_fx( "me_streetlight_01_FX_origin", "fx/misc/lighthaze_bog_a" );
maps\_global_fx_code::global_fx( "ch_street_light_01_on", "fx/misc/lighthaze" );
maps\_global_fx_code::global_fx( "com_wall_streetlamp_on", "fx/misc/light_glow_white_dim" );
maps\_global_fx_code::global_fx( "lamp_post_globe_on", "fx/misc/light_glow_white" );
maps\_global_fx_code::global_fx( "highway_lamp_post", "fx/misc/lighthaze_villassault" );
maps\_global_fx_code::global_fx( "cs_cargoship_spotlight_on_FX_origin", "fx/misc/lighthaze" );
maps\_global_fx_code::global_fx( "com_tires_burning01_FX_origin", "fx/fire/tire_fire_med" );
maps\_global_fx_code::global_fx( "icbm_powerlinetower_FX_origin", "fx/misc/power_tower_light_red_blink" );
maps\_global_fx_code::global_fx( "icbm_mainframe_FX_origin", "fx/props/icbm_mainframe_lightblink" );
maps\_global_fx_code::global_fx( "lighthaze_oilrig_FX_origin", "fx/misc/lighthaze_oilrig" );
maps\_global_fx_code::global_fx( "lighthaze_white_FX_origin", "fx/misc/lighthaze_white" );
maps\_global_fx_code::global_fx( "light_glow_walllight_white_FX_origin", "fx/misc/light_glow_walllight_white" );
maps\_global_fx_code::global_fx( "fluorescent_glow_FX_origin", "fx/misc/fluorescent_glow" );
maps\_global_fx_code::global_fx( "light_glow_industrial_FX_origin", "fx/misc/light_glow_industrial" );
maps\_global_fx_code::global_fx( "light_glow_white_bulb_FX_origin", "fx/misc/light_glow_white_bulb" );
maps\_global_fx_code::global_fx( "light_glow_white_lamp_FX_origin", "fx/misc/light_glow_white_lamp" );
maps\_global_fx_code::global_fx( "highrise_blinky_tower", "fx/misc/power_tower_light_red_blink_large" );
maps\_global_fx_code::global_fx( "light_red_steady_FX_origin", "fx/misc/tower_light_red_steady", -2 );
maps\_global_fx_code::global_fx( "light_blue_steady_FX_origin", "fx/misc/tower_light_blue_steady", -2 );
maps\_global_fx_code::global_fx( "light_orange_steady_FX_origin", "fx/misc/tower_light_orange_steady", -2 );
maps\_global_fx_code::global_fx( "glow_stick_pile_FX_origin", "fx/misc/glow_stick_glow_pile", -2 );
maps\_global_fx_code::global_fx( "light_pulse_red_FX_origin", "fx/misc/light_glow_red_generic_pulse", -2 );
maps\_global_fx_code::global_fx( "light_pulse_red_FX_origin", "fx/misc/light_glow_red_generic_pulse", -2 );
maps\_global_fx_code::global_fx( "light_pulse_orange_FX_origin", "fx/misc/light_glow_orange_generic_pulse", -2 );
maps\_global_fx_code::global_fx( "light_red_blink_FX_origin", "fx/misc/power_tower_light_red_blink", -2 );
maps\_global_fx_code::global_fx( "flare_ambient_FX_origin", "fx/misc/flare_ambient", undefined, "emt_road_flare_burn" );
maps\_global_fx_code::global_fx( "me_dumpster_fire_FX_origin", "fx/fire/firelp_med_pm", undefined, "fire_dumpster_medium" );
maps\_global_fx_code::global_fx( "barrel_fireFX_origin", "fx/fire/firelp_barrel_pm", undefined, "fire_barrel_small" );
maps\_global_fx_code::global_fx( "cnd_laptop_001_open_on_FX_origin", "vfx/ambient/props/laptop_dust" );
maps\_global_fx_code::global_fx( "cnd_glowstick_FX_origin", "fx/misc/glow_stick_glow_orange" );
}

59
maps/_global_fx_code.gsc Normal file
View File

@ -0,0 +1,59 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
global_fx( var_0, var_1, var_2, var_3, var_4 )
{
if ( !isdefined( level._effect ) )
level._effect = [];
level.global_fx[var_0] = var_3;
var_5 = maps\_utility::getstructarray_delete( var_0, "targetname" );
if ( !isdefined( var_5 ) )
return;
if ( !var_5.size )
return;
if ( !isdefined( var_3 ) )
var_3 = var_1;
if ( !isdefined( var_2 ) )
var_2 = randomfloatrange( -20, -15 );
foreach ( var_7 in var_5 )
{
if ( !isdefined( level._effect[var_3] ) )
level._effect[var_3] = loadfx( var_1 );
if ( !isdefined( var_7.angles ) )
var_7.angles = ( 0, 0, 0 );
var_8 = common_scripts\utility::createoneshoteffect( var_3 );
var_8.v["origin"] = var_7.origin;
var_8.v["angles"] = var_7.angles;
var_8.v["fxid"] = var_3;
var_8.v["delay"] = var_2;
if ( isdefined( var_4 ) )
var_8.v["soundalias"] = var_4;
if ( !isdefined( var_7.script_noteworthy ) )
continue;
var_9 = var_7.script_noteworthy;
if ( !isdefined( level._global_fx_ents[var_9] ) )
level._global_fx_ents[var_9] = [];
level._global_fx_ents[var_9][level._global_fx_ents[var_9].size] = var_8;
}
}
init()
{
if ( !isdefined( level.global_fx ) )
level.global_fx = [];
level._global_fx_ents = [];
}

37
maps/_hand_signals.gsc Normal file
View File

@ -0,0 +1,37 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
#using_animtree("generic_human");
inithandsignals()
{
level.scr_anim["generic"]["signal_moveout_cqb"] = %cqb_stand_signal_move_out;
level.scr_anim["generic"]["signal_moveup_cqb"] = %cqb_stand_signal_move_up;
level.scr_anim["generic"]["signal_stop_cqb"] = %cqb_stand_signal_stop;
level.scr_anim["generic"]["signal_onme_cqb"] = %cqb_stand_wave_on_me;
level.scr_anim["generic"]["signal_enemy_cqb"] = %cqb_stand_signal_stop;
level.scr_anim["generic"]["signal_moveout"] = %stand_exposed_wave_move_out;
level.scr_anim["generic"]["signal_moveup"] = %stand_exposed_wave_move_up;
level.scr_anim["generic"]["signal_stop"] = %stand_exposed_wave_halt;
level.scr_anim["generic"]["signal_onme"] = %stand_exposed_wave_on_me;
level.scr_anim["generic"]["signal_enemy"] = %stand_exposed_wave_target_spotted;
level.scr_anim["generic"]["signal_go"] = %stand_exposed_wave_go;
level.scr_anim["generic"]["signal_moveout_crouch"] = %cqb_stand_wave_go_v1;
level.scr_anim["generic"]["signal_moveup_crouch"] = %cqb_stand_wave_go_v1;
level.scr_anim["generic"]["signal_stop_crouch"] = %cqb_stand_wave_go_v1;
level.scr_anim["generic"]["signal_onme_crouch"] = %cqb_stand_wave_go_v1;
level.scr_anim["generic"]["signal_enemy_crouch"] = %cqb_stand_wave_go_v1;
level.scr_anim["generic"]["signal_go_crouch"] = %cqb_stand_wave_go_v1;
level.scr_anim["generic"]["signal_moveout_coverR"] = %cornerstndr_alert_signal_move_out;
level.scr_anim["generic"]["signal_moveup_coverR"] = %cornerstndr_alert_signal_move_out;
level.scr_anim["generic"]["signal_stop_coverR"] = %cornerstndr_alert_signal_stopstay_down;
level.scr_anim["generic"]["signal_onme_coverR"] = %cornerstndr_alert_signal_on_me;
level.scr_anim["generic"]["signal_enemy_coverR"] = %cornerstndr_alert_signal_enemy_spotted;
level.scr_anim["generic"]["signal_go_coverR"] = %cornerstndr_alert_signal_move_out;
level.scr_anim["generic"]["signal_moveout_coverL"] = %corner_standl_signal_move;
level.scr_anim["generic"]["signal_moveup_coverL"] = %corner_standl_signal_move;
level.scr_anim["generic"]["signal_stop_coverL"] = %corner_standl_signal_hold;
level.scr_anim["generic"]["signal_onme_coverL"] = %corner_standl_signal_move;
level.scr_anim["generic"]["signal_enemy_coverL"] = %corner_standl_signal_look;
level.scr_anim["generic"]["signal_go_coverL"] = %corner_standl_signal_move;
}

246
maps/_helicopter_ai.gsc Normal file
View File

@ -0,0 +1,246 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
evasive_think( var_0 )
{
var_0 endon( "death" );
while ( var_0.health > 0 )
{
var_0 waittill( "missile_lock", var_1 );
var_2 = evasive_createmaneuvers( var_0, "random" );
evasive_startmaneuvers( var_0, var_2 );
wait 0.05;
}
}
evasive_createmaneuvers( var_0, var_1 )
{
switch ( var_1 )
{
case "strafe_left_right":
var_0 evasive_addpoint( 3000, -1500, 500, "average" );
var_0 evasive_addpoint( 6000, 3000, -700, "average" );
var_0 evasive_addpoint( 3000, -1500, 200, "average" );
break;
case "strafe_right_left":
var_0 evasive_addpoint( 3000, 1500, 500, "average" );
var_0 evasive_addpoint( 6000, -3000, -700, "average" );
var_0 evasive_addpoint( 3000, 1500, 200, "average" );
break;
case "360_clockwise":
var_0 evasive_addpoint( 1500, 1500, 200, "none" );
var_0 evasive_addpoint( 0, 1500, 200, "none" );
var_0 evasive_addpoint( -1500, 1500, 200, "none" );
var_0 evasive_addpoint( -1500, 0, 0, "none" );
var_0 evasive_addpoint( -1000, -1000, -200, "none" );
var_0 evasive_addpoint( 0, -1000, -200, "none" );
var_0 evasive_addpoint( 1000, -1000, -200, "none" );
break;
case "360_counter_clockwise":
var_0 evasive_addpoint( 1500, -1500, 200, "none" );
var_0 evasive_addpoint( 0, -1500, 200, "none" );
var_0 evasive_addpoint( -1500, -1500, 200, "none" );
var_0 evasive_addpoint( -1500, 0, 0, "none" );
var_0 evasive_addpoint( -1000, 1000, -200, "none" );
var_0 evasive_addpoint( 0, 1000, -200, "none" );
var_0 evasive_addpoint( 1000, 1000, -200, "none" );
break;
case "random":
var_2 = [];
var_2[0] = "strafe_left_right";
var_2[1] = "strafe_right_left";
var_2[2] = "360_clockwise";
var_2[3] = "360_counter_clockwise";
return evasive_createmaneuvers( var_0, var_2[randomint( var_2.size )] );
}
var_3 = evasive_getallpoints( var_0 );
return var_3;
}
evasive_startmaneuvers( var_0, var_1 )
{
var_0 notify( "taking_evasive_actions" );
var_0 endon( "taking_evasive_actions" );
var_0 endon( "death" );
var_0 notify( "evasive_action_done" );
thread evasive_endmaneuvers( var_0 );
if ( getdvar( "cobrapilot_debug" ) == "1" )
var_0 evasive_drawpoints( var_1 );
var_0 setneargoalnotifydist( 1500 );
var_0 vehicle_setspeed( 100, 30, 30 );
var_2 = var_0.angles[1];
for ( var_3 = 1; var_3 < var_1.size; var_3++ )
{
if ( isdefined( var_1[var_3 + 1] ) )
var_4 = vectortoangles( var_1[var_3 + 1]["pos"] - var_1[var_3]["pos"] );
else
var_4 = ( 0, var_2, 0 );
var_5 = var_4[1];
if ( var_1[var_3]["goalYawMethod"] == "average" )
var_5 = ( var_4[1] + var_2 ) / 2;
else if ( var_1[var_3]["goalYawMethod"] == "forward" )
var_5 = var_0.angles[1];
if ( getdvar( "cobrapilot_debug" ) == "1" )
thread maps\_utility::draw_line_until_notify( var_1[var_3]["pos"], var_1[var_3]["pos"] + anglestoforward( ( 0, var_5, 0 ) ) * 250, 1.0, 1.0, 0.2, var_0, "evasive_action_done" );
var_0 settargetyaw( var_5 );
var_0 thread maps\_vehicle_code::setvehgoalpos_wrap( var_1[var_3]["pos"], 0 );
var_0 waittill( "near_goal" );
}
var_0 notify( "evasive_action_done" );
var_0 thread maps\_utility::vehicle_resumepath();
}
evasive_endmaneuvers( var_0 )
{
var_0 notify( "end_maneuvers" );
var_0 endon( "end_maneuvers" );
var_0 endon( "evasive_action_done" );
var_0 endon( "death" );
var_0 waittill( "missile_lock_ended" );
var_0 thread maps\_utility::vehicle_resumepath();
}
evasive_addpoint( var_0, var_1, var_2, var_3 )
{
if ( !isdefined( self.evasive_points ) )
{
self.evasive_points = [];
self.evasive_points[0]["pos"] = self.origin;
self.evasive_points[0]["ang"] = ( 0, self.angles[1], 0 );
}
var_4 = self.evasive_points.size;
if ( !isdefined( var_3 ) )
var_3 = "none";
if ( !isdefined( var_2 ) )
var_2 = 0;
self.evasive_points[var_4]["forward"] = var_0;
self.evasive_points[var_4]["side"] = var_1;
self.evasive_points[var_4]["up"] = var_2;
var_5 = anglestoforward( self.evasive_points[0]["ang"] );
var_6 = anglestoright( self.evasive_points[0]["ang"] );
self.evasive_points[var_4]["pos"] = self.evasive_points[var_4 - 1]["pos"] + var_5 * self.evasive_points[var_4]["forward"] + var_6 * self.evasive_points[var_4]["side"] + ( 0, 0, var_2 );
self.evasive_points[var_4]["goalYawMethod"] = var_3;
}
evasive_getallpoints( var_0 )
{
var_1 = var_0.evasive_points;
var_0.evasive_points = undefined;
return var_1;
}
evasive_drawpoints( var_0 )
{
for ( var_1 = 1; var_1 < var_0.size; var_1++ )
thread maps\_utility::draw_line_until_notify( var_0[var_1 - 1]["pos"], var_0[var_1]["pos"], 1.0, 0.2, 0.2, self, "evasive_action_done" );
}
wingman_think( var_0 )
{
var_0 endon( "death" );
level.playervehicle endon( "death" );
var_1 = 2200;
var_2 = 1500;
var_3 = 0;
var_4 = 1.0;
var_5 = 1.2;
var_6 = 50;
var_7 = 60;
var_8 = 2000;
var_9 = getplayerhelispeed();
var_10 = 0.0;
var_11 = gettime();
var_12 = wingman_getgoalpos( var_1, var_2, var_3 );
var_0 vehicle_setspeed( 30, 20, 20 );
var_0 settargetyaw( level.playervehicle.angles[1] );
var_0 setvehgoalpos( var_12, 1 );
for (;;)
{
var_12 = wingman_getgoalpos( var_1, var_2, var_3 );
if ( getdvar( "cobrapilot_debug" ) == "1" )
{
thread common_scripts\utility::draw_line_for_time( level.playervehicle.origin, var_12, 0, 1, 0, var_4 );
thread common_scripts\utility::draw_line_for_time( level.playervehicle.origin, var_0.origin, 0, 0, 1, var_4 );
thread common_scripts\utility::draw_line_for_time( var_0.origin, var_12, 1, 1, 0, var_4 );
}
var_13 = gettime();
if ( var_13 >= var_11 + var_8 )
{
var_11 = var_13;
var_10 = var_9;
var_9 = getplayerhelispeed();
}
var_14 = 0;
var_15 = 0;
if ( var_10 > 20 )
{
var_15 = var_10;
var_14 = 1;
}
else if ( var_10 <= 20 && getplayerhelispeed() > 20 )
{
var_15 = getplayerhelispeed();
var_14 = 1;
}
if ( var_14 && var_15 > 0 )
{
var_15 = var_15 * var_5;
var_16 = var_6;
var_17 = var_7;
if ( var_16 >= var_15 / 2 )
var_16 = var_15 / 2;
if ( var_17 >= var_15 / 2 )
var_17 = var_15 / 2;
var_0 vehicle_setspeed( var_15, var_16, var_17 );
var_0 settargetyaw( level.playervehicle.angles[1] );
var_18 = 0;
if ( getplayerhelispeed() <= 30 )
var_18 = 1;
if ( getdvar( "cobrapilot_debug" ) == "1" )
iprintln( "wingman speed: " + var_15 + " : " + var_18 );
var_0 setvehgoalpos( var_12, var_18 );
}
wait( var_4 );
}
}
wingman_getgoalpos( var_0, var_1, var_2 )
{
var_3 = anglestoforward( common_scripts\utility::flat_angle( level.playervehicle.angles ) );
var_4 = anglestoright( common_scripts\utility::flat_angle( level.playervehicle.angles ) );
var_5 = level.playervehicle.origin + var_3 * var_0 + var_4 * var_1 + ( 0, 0, var_2 );
return var_5;
}
getplayerhelispeed()
{
return level.playervehicle vehicle_getspeed();
}

View File

@ -0,0 +1,692 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_helicopters()
{
level.helicopter_firelinkfunk = ::heli_firelink;
level.chopperturretonfunc = ::chopper_turret_on;
level.chopperturretofffunc = ::chopper_turret_off;
}
chopper_turret_off()
{
self notify( "mg_off" );
}
chopper_turret_on()
{
self endon( "death" );
self endon( "mg_off" );
var_0 = cos( 55 );
while ( self.health > 0 )
{
var_1 = getenemytarget( 16000, var_0, 1, 1 );
if ( isdefined( var_1 ) )
thread shootenemytarget_bullets( var_1 );
wait 2;
}
}
heli_firelink( var_0 )
{
var_1 = getent( var_0.script_linkto, "script_linkname" );
var_2 = !isdefined( var_1 );
if ( !isdefined( var_1 ) )
var_1 = common_scripts\utility::getstruct( var_0.script_linkto, "script_linkname" );
var_3 = var_0.script_firelink;
if ( var_2 )
var_1 = var_1 common_scripts\utility::spawn_tag_origin();
switch ( var_3 )
{
case "zippy_burst":
wait 1;
fire_missile( "hind_zippy", 1, var_1 );
wait 0.1;
fire_missile( "hind_zippy", 1, var_1 );
wait 0.2;
fire_missile( "hind_zippy", 1, var_1 );
wait 0.3;
fire_missile( "hind_zippy", 1, var_1 );
wait 0.3;
fire_missile( "hind_zippy", 1, var_1 );
break;
case "apache_zippy":
var_4 = [ 0.1, 0.2, 0.3 ];
wait 1;
var_1.origin = var_1.origin + ( 0, 0, -150 );
var_1 moveto( var_1.origin + ( 0, 0, 150 ), 0.6, 0, 0 );
foreach ( var_6 in var_4 )
{
if ( !isdefined( self ) )
continue;
fire_missile( "apache_zippy", 1, var_1 );
wait( var_6 );
}
break;
case "hind_rpg":
fire_missile( "hind_rpg", 5, var_1, 0.3 );
break;
default:
if ( self.classname == "script_vehicle_littlebird_armed" || self.classname == "script_vehicle_littlebird_md500" )
vehicle_scripts\_attack_heli::heli_fire_missiles( var_1, 2, 0.25 );
else
fire_missile( "hind_zippy", 5, var_1, 0.3 );
break;
}
if ( var_2 )
var_1 delete();
}
globalthink()
{
if ( !isdefined( self.vehicletype ) )
return;
var_0 = 0;
if ( self.vehicletype == "hind" || self.vehicletype == "hind_blackice" || self.vehicletype == "ny_harbor_hind" )
var_0 = 1;
if ( self.vehicletype == "cobra" || self.vehicletype == "cobra_player" )
{
thread attachmissiles( "chopperpilot_hellfire", "cobra_Sidewinder" );
if ( isdefined( self.fullmodel ) )
self.fullmodel thread attachmissiles( "chopperpilot_hellfire", "cobra_Sidewinder" );
var_0 = 1;
}
if ( !var_0 )
return;
level thread flares_think( self );
level thread maps\_helicopter_ai::evasive_think( self );
if ( getdvar( "cobrapilot_wingman_enabled" ) == "1" )
{
if ( isdefined( self.script_wingman ) )
{
level.wingman = self;
level thread maps\_helicopter_ai::wingman_think( self );
}
}
}
flares_think( var_0 )
{
var_0 endon( "death" );
notifyoncommand( "flare_button", "+frag" );
notifyoncommand( "flare_button", "+usereload" );
notifyoncommand( "flare_button", "+activate" );
while ( var_0.health > 0 )
{
if ( isdefined( var_0.playercontrolled ) )
var_0.pilot waittill( "flare_button" );
else
{
var_0 waittill( "incomming_missile", var_1 );
if ( !isdefined( var_1 ) )
continue;
if ( randomint( 3 ) == 0 )
continue;
wait( randomfloatrange( 0.5, 1.0 ) );
}
thread flares_fire( var_0 );
wait 3.0;
}
}
flares_fire_burst( var_0, var_1, var_2, var_3 )
{
var_4 = 1;
for ( var_5 = 0; var_5 < var_1; var_5++ )
{
playfx( level.flare_fx[var_0.vehicletype], var_0 gettagorigin( "tag_flare" ) );
if ( isdefined( var_0.playercontrolled ) )
{
level.stats["flares_used"]++;
var_0 notify( "dropping_flares" );
if ( var_4 )
var_0 playsound( "cobra_flare_fire" );
var_4 = !var_4;
}
if ( var_5 <= var_2 - 1 )
thread flares_redirect_missiles( var_0, var_3 );
wait 0.1;
}
}
flares_fire( var_0 )
{
var_0 endon( "death" );
var_1 = 5.0;
if ( isdefined( var_0.flare_duration ) )
var_1 = var_0.flare_duration;
flares_fire_burst( var_0, 8, 1, var_1 );
}
create_missileattractor_on_player_chopper()
{
if ( isdefined( self.missileattractor ) )
missile_deleteattractor( self.missileattractor );
self.missileattractor = missile_createattractorent( self.centeraimpoint, 10000, 10000 );
}
flares_redirect_missiles( var_0, var_1 )
{
var_0 notify( "flares_out" );
var_0 endon( "death" );
var_0 endon( "flares_out" );
if ( !isdefined( var_1 ) )
var_1 = 5.0;
var_2 = flares_get_vehicle_velocity( var_0 );
var_3 = spawn( "script_origin", var_0 gettagorigin( "tag_flare" ) );
var_3 movegravity( var_2, var_1 );
var_4 = undefined;
if ( isdefined( var_0.playercontrolled ) )
{
if ( isdefined( var_0.missileattractor ) )
missile_deleteattractor( var_0.missileattractor );
var_4 = missile_createattractorent( var_3, 10000, 10000 );
}
if ( isdefined( var_0.incomming_missiles ) )
{
for ( var_5 = 0; var_5 < var_0.incomming_missiles.size; var_5++ )
var_0.incomming_missiles[var_5] missile_settargetent( var_3 );
}
wait( var_1 );
if ( isdefined( var_0.playercontrolled ) )
{
if ( isdefined( var_4 ) )
missile_deleteattractor( var_4 );
var_0 thread create_missileattractor_on_player_chopper();
}
if ( !isdefined( var_0.script_targetoffset_z ) )
var_0.script_targetoffset_z = 0;
var_6 = ( 0, 0, var_0.script_targetoffset_z );
if ( !isdefined( var_0.incomming_missiles ) )
return;
for ( var_5 = 0; var_5 < var_0.incomming_missiles.size; var_5++ )
var_0.incomming_missiles[var_5] missile_settargetent( var_0, var_6 );
}
flares_get_vehicle_velocity( var_0 )
{
var_1 = var_0.origin;
wait 0.05;
var_2 = var_0.origin - var_1;
return var_2 * 20;
}
missile_deathwait( var_0, var_1 )
{
var_1 endon( "death" );
var_0 waittill( "death" );
if ( !isdefined( var_1.incomming_missiles ) )
return;
var_1.incomming_missiles = common_scripts\utility::array_remove( var_1.incomming_missiles, var_0 );
}
getenemytarget( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
{
if ( !isdefined( var_2 ) )
var_2 = 0;
if ( !isdefined( var_3 ) )
var_3 = 0;
if ( !isdefined( var_4 ) )
var_4 = 1;
if ( !isdefined( var_5 ) )
var_5 = 0;
var_7 = [];
var_8 = undefined;
var_9 = common_scripts\utility::get_enemy_team( self.script_team );
var_10 = [];
if ( var_4 )
{
for ( var_11 = 0; var_11 < level.vehicles[var_9].size; var_11++ )
var_10[var_10.size] = level.vehicles[var_9][var_11];
}
if ( var_2 )
{
var_12 = getaiarray( var_9 );
for ( var_11 = 0; var_11 < var_12.size; var_11++ )
{
if ( isdefined( var_12[var_11].ignored_by_attack_heli ) )
continue;
var_10[var_10.size] = var_12[var_11];
}
if ( var_9 == "allies" )
{
for ( var_11 = 0; var_11 < level.players.size; var_11++ )
var_10[var_10.size] = level.players[var_11];
}
}
if ( isdefined( var_6 ) )
var_10 = maps\_utility::array_exclude( var_10, var_6 );
if ( var_5 )
var_10 = common_scripts\utility::array_randomize( var_10 );
var_13 = anglestoforward( self.angles );
for ( var_11 = 0; var_11 < var_10.size; var_11++ )
{
if ( issentient( var_10[var_11] ) && issentient( self ) && self getthreatbiasgroup() != "" )
{
var_14 = getthreatbias( var_10[var_11] getthreatbiasgroup(), self getthreatbiasgroup() );
if ( var_14 <= -1000000 )
continue;
}
if ( isdefined( var_0 ) && var_0 > 0 )
{
if ( distance( self.origin, var_10[var_11].origin ) > var_0 )
continue;
}
if ( isdefined( var_1 ) )
{
var_15 = vectornormalize( var_10[var_11].origin - self.origin );
var_16 = vectordot( var_13, var_15 );
if ( var_16 <= var_1 )
continue;
}
if ( var_3 )
{
var_17 = 0;
if ( isai( var_10[var_11] ) )
var_18 = 48;
else
var_18 = 150;
var_17 = sighttracepassed( self.origin, var_10[var_11].origin + ( 0, 0, var_18 ), 0, self );
if ( !var_17 )
continue;
}
var_7[var_7.size] = var_10[var_11];
}
if ( var_7.size == 0 )
{
self notify( "gunner_new_target", var_8 );
return var_8;
}
if ( var_7.size == 1 )
{
self notify( "gunner_new_target", var_7[0] );
return var_7[0];
}
var_19 = common_scripts\utility::getclosest( self.origin, var_7 );
self notify( "gunner_new_target", var_19 );
return var_19;
}
shootenemytarget_bullets( var_0 )
{
self endon( "death" );
self endon( "mg_off" );
var_0 endon( "death" );
self endon( "gunner_new_target" );
if ( isdefined( self.playercontrolled ) )
self endon( "gunner_stop_firing" );
var_1 = ( 0, 0, 0 );
if ( isdefined( var_0.script_targetoffset_z ) )
var_1 = var_1 + ( 0, 0, var_0.script_targetoffset_z );
else if ( issentient( var_0 ) )
var_1 = ( 0, 0, 32 );
self setturrettargetent( var_0, var_1 );
while ( self.health > 0 )
{
var_2 = randomintrange( 1, 25 );
if ( getdvar( "cobrapilot_debug" ) == "1" )
iprintln( "randomShots = " + var_2 );
for ( var_3 = 0; var_3 < var_2; var_3++ )
{
if ( isdefined( self.playercontrolled ) )
{
if ( isdefined( level.cobraweapon ) && level.cobraweapon.size > 0 )
self setvehweapon( level.gunnerweapon );
}
thread shootenemytarget_bullets_debugline( self, "tag_turret", var_0, var_1, ( 1, 1, 0 ), 0.05 );
self fireweapon( "tag_flash" );
if ( isdefined( self.playercontrolled ) )
self setvehweapon( level.cobraweapon[self.pilot.currentweapon].v["weapon"] );
wait 0.05;
}
wait( randomfloatrange( 0.25, 2.5 ) );
}
}
shootenemytarget_bullets_debugline( var_0, var_1, var_2, var_3, var_4, var_5 )
{
if ( getdvar( "cobrapilot_debug" ) != "1" )
return;
if ( !isdefined( var_4 ) )
var_4 = ( 0, 0, 0 );
var_2 endon( "death" );
self endon( "gunner_new_target" );
if ( !isdefined( var_3 ) )
var_3 = ( 0, 0, 0 );
if ( isdefined( var_5 ) )
{
var_5 = gettime() + var_5 * 1000;
while ( gettime() < var_5 )
wait 0.05;
}
else
{
for (;;)
wait 0.05;
}
}
attachmissiles( var_0, var_1, var_2, var_3 )
{
self.hasattachedweapons = 1;
var_4 = [];
var_4[0] = var_0;
if ( isdefined( var_1 ) )
var_4[1] = var_1;
if ( isdefined( var_2 ) )
var_4[2] = var_2;
if ( isdefined( var_3 ) )
var_4[3] = var_3;
for ( var_5 = 0; var_5 < var_4.size; var_5++ )
{
for ( var_6 = 0; var_6 < level.cobra_weapon_tags[var_4[var_5]].size; var_6++ )
self attach( level.cobra_missile_models[var_4[var_5]], level.cobra_weapon_tags[var_4[var_5]][var_6] );
}
}
fire_missile( var_0, var_1, var_2, var_3, var_4 )
{
if ( !isdefined( var_1 ) )
var_1 = 1;
var_5 = undefined;
var_6 = undefined;
var_7 = "cobra_20mm";
var_8 = [];
switch ( var_0 )
{
case "f15_missile":
var_5 = "cobra_Sidewinder";
var_8[0] = "le_side_wing_jnt";
var_8[1] = "ri_side_wing_jnt";
break;
case "mi28_seeker":
var_5 = "cobra_seeker";
var_8[0] = "tag_store_L_1_a";
var_8[1] = "tag_store_R_1_a";
var_8[2] = "tag_store_L_2_a";
var_8[3] = "tag_store_R_2_a";
break;
case "ffar":
var_5 = "cobra_FFAR";
var_8[0] = "tag_store_r_2";
break;
case "seeker":
var_5 = "cobra_seeker";
var_8[0] = "tag_store_r_2";
break;
case "ffar_bog_a_lite":
var_5 = "cobra_FFAR_bog_a_lite";
var_8[0] = "tag_store_r_2";
break;
case "ffar_airlift":
var_5 = "cobra_FFAR_airlift";
var_8[0] = "tag_store_L_wing";
var_8[1] = "tag_store_R_wing";
break;
case "ffar_airlift_nofx":
var_5 = "cobra_FFAR_airlift_nofx";
var_8[0] = "tag_store_L_wing";
var_8[1] = "tag_store_R_wing";
break;
case "cobra_zippy":
var_5 = "zippy_rockets";
var_8[0] = "tag_store_L_wing";
var_8[1] = "tag_store_R_wing";
break;
case "apache_zippy":
var_5 = "zippy_rockets_apache";
var_8[0] = "tag_flash_2";
var_8[1] = "tag_flash_3";
break;
case "apache_zippy_nd":
var_5 = "zippy_rockets_apache_nodamage";
var_8[0] = "tag_flash_2";
var_8[1] = "tag_flash_3";
break;
case "mi28_zippy":
var_5 = "zippy_rockets_apache";
var_8[0] = "tag_store_L_wing";
var_8[1] = "tag_store_R_wing";
break;
case "mi28_zippy_cheap":
var_5 = "zippy_rockets_apache_cheap";
var_8[0] = "tag_store_L_wing";
var_8[1] = "tag_store_R_wing";
break;
case "cobra_turret":
var_5 = "hind_turret_penetration";
var_8[0] = "tag_store_L_wing";
var_8[1] = "tag_store_R_wing";
break;
case "ffar_hind":
var_7 = "hind_turret";
var_5 = "hind_FFAR";
var_8[0] = "tag_missile_left";
var_8[1] = "tag_missile_right";
break;
case "hind_zippy":
var_7 = "hind_turret";
var_5 = "zippy_rockets";
var_8[0] = "tag_missile_left";
var_8[1] = "tag_missile_right";
break;
case "hind_rpg":
var_7 = "hind_turret";
var_5 = "rpg";
var_8[0] = "tag_missile_left";
var_8[1] = "tag_missile_right";
break;
case "hind_rpg_cheap":
var_7 = "hind_turret";
var_5 = "rpg_cheap";
var_8[0] = "tag_missile_left";
var_8[1] = "tag_missile_right";
break;
case "ffar_hind_nodamage":
var_7 = "hind_turret";
var_5 = "hind_FFAR_nodamage";
var_8[0] = "tag_missile_left";
var_8[1] = "tag_missile_right";
break;
case "ffar_mi28_village_assault":
var_7 = "hind_turret";
var_5 = "mi28_ffar_village_assault";
var_8[0] = "tag_store_L_2_a";
var_8[1] = "tag_store_R_2_a";
var_8[2] = "tag_store_L_2_b";
var_8[3] = "tag_store_R_2_b";
var_8[4] = "tag_store_L_2_c";
var_8[5] = "tag_store_R_2_c";
var_8[6] = "tag_store_L_2_d";
var_8[7] = "tag_store_R_2_d";
break;
case "ffar_co_rescue":
var_5 = "cobra_FFAR_bog_a_lite";
var_8[0] = "tag_store_R_2_a";
var_8[1] = "tag_store_L_2_a";
break;
default:
break;
}
var_6 = weaponfiretime( var_5 );
if ( isdefined( self.nextmissiletag ) )
var_9 = self.nextmissiletag;
else
var_9 = -1;
for ( var_10 = 0; var_10 < var_1; var_10++ )
{
var_9++;
var_9 = var_9 % var_8.size;
if ( var_0 == "ffar_mi28_village_assault" )
{
if ( isdefined( var_2 ) && isdefined( var_2.origin ) )
{
magicbullet( var_5, self gettagorigin( var_8[var_9] ), var_2.origin );
if ( isdefined( level._effect["ffar_mi28_muzzleflash"] ) )
playfxontag( common_scripts\utility::getfx( "ffar_mi28_muzzleflash" ), self, var_8[var_9] );
thread delayed_earthquake( 0.1, 0.5, 0.2, var_2.origin, 1600 );
}
}
else
{
self setvehweapon( var_5 );
if ( isdefined( var_2 ) )
{
var_11 = self fireweapon( var_8[var_9], var_2 );
switch ( var_0 )
{
case "ffar_airlift":
case "ffar_bog_a_lite":
case "ffar":
var_11 thread missilelosetarget( 0.1 );
break;
case "apache_zippy_wall":
case "mi28_zippy_cheap":
case "mi28_zippy":
case "apache_zippy_nd":
case "apache_zippy":
if ( !isdefined( var_4 ) )
var_11 thread missilelosetarget( 0.6 );
else
var_11 thread missilelosetarget( var_4 );
break;
default:
break;
}
}
else
var_11 = self fireweapon( var_8[var_9] );
self notify( "missile_fired", var_11 );
}
self.nextmissiletag = var_9;
if ( var_10 < var_1 - 1 )
wait( var_6 );
if ( isdefined( var_3 ) )
wait( var_3 );
}
self setvehweapon( var_7 );
}
delayed_earthquake( var_0, var_1, var_2, var_3, var_4 )
{
wait( var_0 );
earthquake( var_1, var_2, var_3, var_4 );
}
missilelosetarget( var_0 )
{
self endon( "death" );
wait( var_0 );
if ( isdefined( self ) )
self missile_cleartarget();
}

View File

@ -0,0 +1,355 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
setup_spotlight_heli( var_0, var_1, var_2 )
{
if ( !isdefined( var_2 ) )
var_2 = 1;
var_3 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( var_1 );
level.spotlight_heli = var_3;
var_3 thread heli_target_dialogue();
if ( !isdefined( var_3 ) )
return;
var_3 endon( "death" );
var_3.state = "reveal";
var_3.section = "market";
var_3.spottarget_last_known_pos = ( 0, 0, 0 );
var_3.default_speed = 18;
var_3.evade_health_threshold = 0.9;
var_3.num_evasions = 2;
var_3.reacquire_player_time = gettime() + 9000;
var_3.focus_ally = 0;
var_3.damage_fx = "none";
var_3 thread spotlight_heli_on_death();
var_3 thread spotlight_heli_trigger_death();
var_3 maps\_vehicle::gopath();
var_3 vehicle_setspeed( var_3.default_speed, 15, 15 );
var_3.etarget = level.player;
var_3 vehicle_scripts\_attack_heli::heli_default_target_setup();
var_3 thread vehicle_scripts\_attack_heli::heli_spotlight_on( "tag_barrel", 0, 1 );
var_3 thread vehicle_scripts\_attack_heli::heli_spotlight_aim( ::spotlight_heli_think );
var_3 thread spotlight_heli_check_vision_set();
var_3 spotlight_heli_update_spotlight_speed( 0.33 );
if ( var_2 )
{
var_4 = anglestoforward( level.player.angles );
var_5 = var_4 * 500;
var_6 = var_5 + common_scripts\utility::randomvector( 50 );
var_3.spottarget = spawn( "script_origin", level.player.origin + var_5 );
var_3 vehicle_scripts\_attack_heli::heli_spotlight_destroy_default_targets();
var_3 vehicle_scripts\_attack_heli::heli_spotlight_create_default_targets( var_3.spottarget );
}
return var_3;
}
heli_target_dialogue()
{
self endon( "death" );
wait 0.5;
var_0 = undefined;
for (;;)
{
if ( isdefined( self.spottarget ) )
{
if ( !isdefined( var_0 ) || var_0 != self.spottarget )
{
var_0 = self.spottarget;
if ( isdefined( var_0 ) && isplayer( var_0 ) )
return;
}
}
wait 1.0;
}
}
spotlight_heli_on_death()
{
self waittill( "death" );
}
spotlight_heli_trigger_death()
{
self endon( "death" );
if ( isdefined( level.spotlight_heli ) )
{
var_0 = anglestoforward( level.spotlight_heli.angles ) * -1;
var_1 = ( level.spotlight_heli.origin + var_0 * 10000 ) * ( 1, 1, 0 ) + ( 0, 0, 600 );
level.spotlight_heli maps\_vehicle_code::vehicle_pathdetach();
level.spotlight_heli vehicle_setspeed( 100, 40, 40 );
level.spotlight_heli setvehgoalpos( var_1, 1 );
level.spotlight_heli waittill( "near_goal" );
level.spotlight_heli delete();
}
}
spotlight_heli_set_threatbias( var_0 )
{
var_1 = level.allies["ally1"];
if ( isdefined( level.spotlight_heli ) && level.spotlight_heli.focus_ally == 1 )
var_0 = "none";
switch ( var_0 )
{
case "player":
level.player.threatbias = 1000;
if ( isdefined( var_1 ) )
var_1.threatbias = 0;
break;
case "ally":
if ( isdefined( var_1 ) )
var_1.threatbias = 1000;
level.player.threatbias = 0;
break;
case "none":
level.player.threatbias = level.default_player_threatbias;
if ( isdefined( var_1 ) )
var_1.threatbias = 200;
break;
default:
}
}
spotlight_heli_check_vision_set()
{
self endon( "death" );
var_0 = 0.25;
for (;;)
{
if ( vehicle_scripts\_attack_heli::can_see_player( level.player ) )
{
var_1 = self gettagorigin( "TAG_FLASH" );
var_2 = self gettagangles( "TAG_FLASH" );
var_3 = anglestoforward( var_2 );
var_4 = level.player geteye() - var_1;
var_4 = vectornormalize( var_4 );
var_5 = acos( vectordot( var_3, var_4 ) );
if ( var_5 < 10 )
{
}
else
{
}
}
else
{
}
wait( var_0 );
}
}
spotlight_heli_update_spotlight_speed( var_0 )
{
}
spotlight_heli_think()
{
self endon( "death" );
for (;;)
{
wait( randomfloatrange( 1, 3 ) );
switch ( self.state )
{
case "reveal":
thread spotlight_heli_reveal_state();
break;
case "searching":
thread spotlight_heli_searching_state();
break;
case "targeting":
thread spotlight_heli_targeting_state();
break;
case "reacquire":
thread spotlight_heli_reacquire_state();
break;
case "waiting":
break;
default:
break;
}
}
}
spotlight_heli_reveal_state()
{
self endon( "death" );
if ( gettime() > self.reacquire_player_time )
{
vehicle_scripts\_attack_heli::heli_spotlight_destroy_default_targets();
self.state = "searching";
}
else
{
vehicle_scripts\_attack_heli::heli_spotlight_destroy_default_targets();
var_0 = anglestoforward( level.player.angles );
var_1 = var_0 * 500;
var_2 = var_1 + common_scripts\utility::randomvector( 50 );
self.spottarget = spawn( "script_origin", level.player.origin + var_1 );
vehicle_scripts\_attack_heli::heli_spotlight_create_default_targets( self.spottarget );
}
}
spotlight_heli_searching_state()
{
self endon( "death" );
var_0 = level.allies["ally1"];
var_1 = self.focus_ally == 0 && vehicle_scripts\_attack_heli::can_see_player( level.player );
var_2 = isdefined( var_0 ) && vehicle_scripts\_attack_heli::can_see_player( var_0 );
var_3 = 0;
var_4 = 0;
if ( var_1 && var_2 )
{
var_5 = randomint( 3 );
if ( var_5 == 2 )
var_4 = 1;
else
var_3 = 1;
}
else if ( var_1 )
var_3 = 1;
else if ( var_2 )
var_4 = 1;
else
spotlight_heli_default_targeting();
if ( var_3 )
{
self.spottarget = level.player;
self.state = "targeting";
maps\_utility::delaythread( 1.0, ::spotlight_heli_update_spotlight_speed, 5.0 );
}
else if ( var_4 )
{
self.spottarget = var_0;
self.state = "targeting";
maps\_utility::delaythread( 1.0, ::spotlight_heli_update_spotlight_speed, 5.0 );
}
else
spotlight_heli_update_spotlight_speed( 0.33 );
}
spotlight_heli_targeting_state()
{
self endon( "death" );
var_0 = level.allies["ally1"];
if ( isdefined( self.spottarget ) && vehicle_scripts\_attack_heli::can_see_player( self.spottarget ) )
{
self.spottarget_last_known_pos = self.spottarget.origin;
if ( self.focus_ally == 0 )
{
if ( self.spottarget != level.player )
{
var_1 = randomint( 4 );
if ( var_1 == 2 )
{
if ( vehicle_scripts\_attack_heli::can_see_player( level.player ) )
{
self.spottarget = level.player;
self.spottarget_last_known_pos = level.player.origin;
spotlight_heli_update_spotlight_speed( 0.75 );
maps\_utility::delaythread( 0.75, ::spotlight_heli_update_spotlight_speed, 5.0 );
return;
}
return;
}
}
else if ( self.spottarget != var_0 )
{
var_1 = randomint( 7 );
if ( var_1 == 3 )
{
if ( vehicle_scripts\_attack_heli::can_see_player( var_0 ) )
{
self.spottarget = var_0;
self.spottarget_last_known_pos = var_0.origin;
spotlight_heli_update_spotlight_speed( 0.75 );
maps\_utility::delaythread( 0.75, ::spotlight_heli_update_spotlight_speed, 5.0 );
}
}
}
}
}
else
{
self.prevspottarget = self.spottarget;
self.spottarget = spawn( "script_origin", self.spottarget_last_known_pos );
self.spottarget.angles = level.player.angles;
self.reacquire_player_time = gettime() + 3000;
if ( self.focus_ally == 0 )
self.reacquire_ally_time = gettime() + 10000;
else
self.reacquire_ally_time = gettime() + 2500;
vehicle_scripts\_attack_heli::heli_spotlight_destroy_default_targets();
vehicle_scripts\_attack_heli::heli_spotlight_create_default_targets( self.spottarget );
self.state = "reacquire";
spotlight_heli_update_spotlight_speed( 0.33 );
}
}
spotlight_heli_reacquire_state()
{
self endon( "death" );
var_0 = level.allies["ally1"];
if ( isdefined( self.prevspottarget ) && isdefined( self.spottarget_last_known_pos ) && distance( self.prevspottarget.origin, self.spottarget_last_known_pos ) > 500 )
{
vehicle_scripts\_attack_heli::heli_spotlight_destroy_default_targets();
spotlight_heli_default_targeting();
self.state = "searching";
}
else if ( gettime() > self.reacquire_player_time && vehicle_scripts\_attack_heli::can_see_player( level.player ) )
{
vehicle_scripts\_attack_heli::heli_spotlight_destroy_default_targets();
self.spottarget = level.player;
self.state = "targeting";
maps\_utility::delaythread( 1.0, ::spotlight_heli_update_spotlight_speed, 5.0 );
}
else if ( gettime() > self.reacquire_ally_time && isdefined( var_0 ) && vehicle_scripts\_attack_heli::can_see_player( var_0 ) )
{
vehicle_scripts\_attack_heli::heli_spotlight_destroy_default_targets();
self.spottarget = var_0;
self.state = "targeting";
maps\_utility::delaythread( 1.0, ::spotlight_heli_update_spotlight_speed, 5.0 );
}
}
spotlight_heli_default_targeting()
{
self endon( "death" );
var_0 = randomint( level.spotlight_aim_ents.size );
self.targetdefault = level.spotlight_aim_ents[var_0];
self.spottarget = self.targetdefault;
}

21
maps/_hud.gsc Normal file
View File

@ -0,0 +1,21 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
level.uiparent = spawnstruct();
level.uiparent.horzalign = "left";
level.uiparent.vertalign = "top";
level.uiparent.alignx = "left";
level.uiparent.aligny = "top";
level.uiparent.x = 0;
level.uiparent.y = 0;
level.uiparent.width = 0;
level.uiparent.height = 0;
level.uiparent.children = [];
if ( level.console )
level.fontheight = 12;
else
level.fontheight = 12;
}

829
maps/_hud_util.gsc Normal file
View File

@ -0,0 +1,829 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
setparent( var_0 )
{
if ( isdefined( self.parent ) && self.parent == var_0 )
return;
if ( isdefined( self.parent ) )
self.parent removechild( self );
self.parent = var_0;
self.parent addchild( self );
if ( isdefined( self.point ) )
setpoint( self.point, self.relativepoint, self.xoffset, self.yoffset );
else
setpoint( "TOPLEFT" );
}
getparent()
{
return self.parent;
}
removedestroyedchildren()
{
if ( isdefined( self.childchecktime ) && self.childchecktime == gettime() )
return;
self.childchecktime = gettime();
var_0 = [];
foreach ( var_3, var_2 in self.children )
{
if ( !isdefined( var_2 ) )
continue;
var_2.index = var_0.size;
var_0[var_0.size] = var_2;
}
self.children = var_0;
}
addchild( var_0 )
{
var_0.index = self.children.size;
self.children[self.children.size] = var_0;
removedestroyedchildren();
}
removechild( var_0 )
{
var_0.parent = undefined;
if ( self.children[self.children.size - 1] != var_0 )
{
self.children[var_0.index] = self.children[self.children.size - 1];
self.children[var_0.index].index = var_0.index;
}
self.children[self.children.size - 1] = undefined;
var_0.index = undefined;
}
setpoint( var_0, var_1, var_2, var_3, var_4 )
{
if ( !isdefined( var_4 ) )
var_4 = 0;
var_5 = getparent();
if ( var_4 )
self moveovertime( var_4 );
if ( !isdefined( var_2 ) )
var_2 = 0;
self.xoffset = var_2;
if ( !isdefined( var_3 ) )
var_3 = 0;
self.yoffset = var_3;
self.point = var_0;
self.alignx = "center";
self.aligny = "middle";
if ( issubstr( var_0, "TOP" ) )
self.aligny = "top";
if ( issubstr( var_0, "BOTTOM" ) )
self.aligny = "bottom";
if ( issubstr( var_0, "LEFT" ) )
self.alignx = "left";
if ( issubstr( var_0, "RIGHT" ) )
self.alignx = "right";
if ( !isdefined( var_1 ) )
var_1 = var_0;
self.relativepoint = var_1;
var_6 = "center";
var_7 = "middle";
if ( issubstr( var_1, "TOP" ) )
var_7 = "top";
if ( issubstr( var_1, "BOTTOM" ) )
var_7 = "bottom";
if ( issubstr( var_1, "LEFT" ) )
var_6 = "left";
if ( issubstr( var_1, "RIGHT" ) )
var_6 = "right";
if ( var_5 == level.uiparent )
{
self.horzalign = var_6;
self.vertalign = var_7;
}
else
{
self.horzalign = var_5.horzalign;
self.vertalign = var_5.vertalign;
}
if ( var_6 == var_5.alignx )
{
var_8 = 0;
var_9 = 0;
}
else if ( var_6 == "center" || var_5.alignx == "center" )
{
var_8 = int( var_5.width / 2 );
if ( var_6 == "left" || var_5.alignx == "right" )
var_9 = -1;
else
var_9 = 1;
}
else
{
var_8 = var_5.width;
if ( var_6 == "left" )
var_9 = -1;
else
var_9 = 1;
}
self.x = var_5.x + var_8 * var_9;
if ( var_7 == var_5.aligny )
{
var_10 = 0;
var_11 = 0;
}
else if ( var_7 == "middle" || var_5.aligny == "middle" )
{
var_10 = int( var_5.height / 2 );
if ( var_7 == "top" || var_5.aligny == "bottom" )
var_11 = -1;
else
var_11 = 1;
}
else
{
var_10 = var_5.height;
if ( var_7 == "top" )
var_11 = -1;
else
var_11 = 1;
}
self.y = var_5.y + var_10 * var_11;
self.x = self.x + self.xoffset;
self.y = self.y + self.yoffset;
switch ( self.elemtype )
{
case "bar":
setpointbar( var_0, var_1, var_2, var_3 );
break;
}
updatechildren( var_4 );
}
setpointbar( var_0, var_1, var_2, var_3 )
{
self.bar.horzalign = self.horzalign;
self.bar.vertalign = self.vertalign;
self.bar.alignx = "left";
self.bar.aligny = self.aligny;
self.bar.y = self.y;
if ( self.alignx == "left" )
self.bar.x = self.x + self.xpadding;
else if ( self.alignx == "right" )
self.bar.x = self.x - ( self.width - self.xpadding );
else
self.bar.x = self.x - int( ( self.width - self.xpadding * 2 ) / 2 );
updatebar( self.bar.frac );
}
updatebar( var_0 )
{
var_1 = int( ( self.width - self.xpadding * 2 ) * var_0 );
if ( !var_1 )
var_1 = 1;
self.bar.frac = var_0;
self.bar setshader( self.bar.shader, var_1, self.height - self.ypadding * 2 );
}
hidebar( var_0 )
{
var_0 = common_scripts\utility::ter_op( isdefined( var_0 ), var_0, 1 );
if ( var_0 || !isdefined( self.orig_alpha ) || !isdefined( self.bar.orig_alpha ) )
{
self.orig_alpha = self.alpha;
self.bar.orig_alpha = self.bar.alpha;
}
self.alpha = common_scripts\utility::ter_op( var_0, 0, self.orig_alpha );
self.bar.alpha = common_scripts\utility::ter_op( var_0, 0, self.bar.orig_alpha );
}
createfontstring( var_0, var_1 )
{
var_2 = newhudelem();
var_2.elemtype = "font";
var_2.font = var_0;
var_2.fontscale = var_1;
var_2.x = 0;
var_2.y = 0;
var_2.width = 0;
var_2.height = int( level.fontheight * var_1 );
var_2.xoffset = 0;
var_2.yoffset = 0;
var_2.children = [];
var_2 setparent( level.uiparent );
return var_2;
}
createclientfontstring( var_0, var_1 )
{
var_2 = newclienthudelem( self );
var_2.elemtype = "font";
var_2.font = var_0;
var_2.fontscale = var_1;
var_2.x = 0;
var_2.y = 0;
var_2.width = 0;
var_2.height = int( level.fontheight * var_1 );
var_2.xoffset = 0;
var_2.yoffset = 0;
var_2.children = [];
var_2 setparent( level.uiparent );
return var_2;
}
createclienttimer( var_0, var_1 )
{
var_2 = newclienthudelem( self );
var_2.elemtype = "timer";
var_2.font = var_0;
var_2.fontscale = var_1;
var_2.x = 0;
var_2.y = 0;
var_2.width = 0;
var_2.height = int( level.fontheight * var_1 );
var_2.xoffset = 0;
var_2.yoffset = 0;
var_2.children = [];
var_2 setparent( level.uiparent );
return var_2;
}
createserverfontstring( var_0, var_1 )
{
var_2 = newhudelem();
var_2.elemtype = "font";
var_2.font = var_0;
var_2.fontscale = var_1;
var_2.x = 0;
var_2.y = 0;
var_2.width = 0;
var_2.height = int( level.fontheight * var_1 );
var_2.xoffset = 0;
var_2.yoffset = 0;
var_2.children = [];
var_2 setparent( level.uiparent );
return var_2;
}
createservertimer( var_0, var_1 )
{
var_2 = newhudelem();
var_2.elemtype = "timer";
var_2.font = var_0;
var_2.fontscale = var_1;
var_2.x = 0;
var_2.y = 0;
var_2.width = 0;
var_2.height = int( level.fontheight * var_1 );
var_2.xoffset = 0;
var_2.yoffset = 0;
var_2.children = [];
var_2 setparent( level.uiparent );
return var_2;
}
createicon( var_0, var_1, var_2 )
{
var_3 = newhudelem();
return createicon_hudelem( var_3, var_0, var_1, var_2 );
}
createclienticon( var_0, var_1, var_2 )
{
var_3 = newclienthudelem( self );
return createicon_hudelem( var_3, var_0, var_1, var_2 );
}
createicon_hudelem( var_0, var_1, var_2, var_3 )
{
var_0.elemtype = "icon";
var_0.x = 0;
var_0.y = 0;
var_0.width = var_2;
var_0.height = var_3;
var_0.xoffset = 0;
var_0.yoffset = 0;
var_0.children = [];
var_0 setparent( level.uiparent );
if ( isdefined( var_1 ) )
var_0 setshader( var_1, var_2, var_3 );
return var_0;
}
createbar( var_0, var_1, var_2, var_3, var_4 )
{
if ( !isdefined( var_0 ) )
var_0 = "white";
if ( !isdefined( var_1 ) )
var_1 = "black";
if ( !isdefined( var_2 ) )
var_2 = 100;
if ( !isdefined( var_3 ) )
var_3 = 9;
var_5 = newhudelem();
var_5.x = 2;
var_5.y = 2;
var_5.frac = 0.25;
var_5.shader = var_0;
var_5.sort = -1;
var_5 setshader( var_0, var_2 - 2, var_3 - 2 );
if ( isdefined( var_4 ) )
{
var_5.flashfrac = var_4;
var_5 thread flashthread();
}
var_6 = newhudelem();
var_6.elemtype = "bar";
var_6.x = 0;
var_6.y = 0;
var_6.width = var_2;
var_6.height = var_3;
var_6.xoffset = 0;
var_6.yoffset = 0;
var_6.bar = var_5;
var_6.children = [];
var_6.padding = 2;
var_6.sort = -2;
var_6.alpha = 0.5;
var_6 setparent( level.uiparent );
var_6 setshader( var_1, var_2, var_3 );
return var_6;
}
createclientprogressbar( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7 )
{
var_0 = common_scripts\utility::ter_op( isdefined( var_0 ), var_0, level.player );
var_1 = common_scripts\utility::ter_op( isdefined( var_1 ), var_1, 90 );
var_2 = common_scripts\utility::ter_op( isdefined( var_2 ), var_2, "white" );
var_3 = common_scripts\utility::ter_op( isdefined( var_3 ), var_3, "black" );
var_4 = common_scripts\utility::ter_op( isdefined( var_4 ), var_4, 100 );
var_5 = common_scripts\utility::ter_op( isdefined( var_5 ), var_5, 9 );
var_6 = common_scripts\utility::ter_op( isdefined( var_6 ), var_6, 2 );
var_7 = common_scripts\utility::ter_op( isdefined( var_7 ), var_7, 2 );
var_8 = var_0 createclientbar( var_2, var_3, var_4, var_5, undefined, var_6, var_7 );
var_8 setpoint( "CENTER", undefined, 0, var_1 );
return var_8;
}
createclientbar( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
{
if ( !isdefined( var_5 ) )
var_5 = 2;
if ( !isdefined( var_6 ) )
var_6 = 2;
var_7 = newclienthudelem( self );
var_7.x = 0 - var_5;
var_7.y = 0 - var_6;
var_7.frac = 0.25;
var_7.shader = var_0;
var_7.sort = -1;
var_7 setshader( var_0, var_2 - var_5 * 2, var_3 - var_6 * 2 );
if ( isdefined( var_4 ) )
{
var_7.flashfrac = var_4;
var_7 thread flashthread();
}
var_8 = newclienthudelem( self );
var_8.elemtype = "bar";
var_8.x = 0;
var_8.y = 0;
var_8.width = var_2;
var_8.height = var_3;
var_8.xoffset = -1 * var_5;
var_8.yoffset = 0;
var_8.bar = var_7;
var_8.children = [];
var_8.xpadding = var_5;
var_8.ypadding = var_6;
var_8.sort = -2;
var_8.alpha = 0.5;
var_8 setparent( level.uiparent );
var_8 setshader( var_1, var_2, var_3 );
return var_8;
}
setflashfrac( var_0 )
{
self.bar.flashfrac = var_0;
}
fade_over_time( var_0, var_1 )
{
if ( isdefined( var_1 ) && var_1 > 0 )
self fadeovertime( var_1 );
self.alpha = var_0;
if ( isdefined( var_1 ) && var_1 > 0 )
wait( var_1 );
}
flashthread()
{
self endon( "death" );
self.alpha = 1;
for (;;)
{
if ( self.frac >= self.flashfrac )
{
self fadeovertime( 0.3 );
self.alpha = 0.2;
wait 0.35;
self fadeovertime( 0.3 );
self.alpha = 1;
wait 0.7;
continue;
}
self.alpha = 1;
wait 0.05;
}
}
destroyelem()
{
if ( isdefined( self.children ) && self.children.size )
{
var_0 = [];
for ( var_1 = 0; var_1 < self.children.size; var_1++ )
var_0[var_1] = self.children[var_1];
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
var_0[var_1] setparent( getparent() );
}
if ( isdefined( self.elemtype ) && self.elemtype == "bar" )
self.bar destroy();
self destroy();
}
seticonshader( var_0 )
{
self setshader( var_0, self.width, self.height );
}
setwidth( var_0 )
{
self.width = var_0;
}
setheight( var_0 )
{
self.height = var_0;
}
setsize( var_0, var_1 )
{
self.width = var_0;
self.height = var_1;
}
updatechildren( var_0 )
{
for ( var_1 = 0; var_1 < self.children.size; var_1++ )
{
var_2 = self.children[var_1];
var_2 setpoint( var_2.point, var_2.relativepoint, var_2.xoffset, var_2.yoffset, var_0 );
}
}
stance_carry_icon_enable( var_0 )
{
if ( isdefined( var_0 ) && var_0 == 0 )
{
stance_carry_icon_disable();
return;
}
if ( isdefined( level.stance_carry ) )
level.stance_carry destroy();
setsaveddvar( "hud_showStance", "0" );
level.stance_carry = newhudelem();
level.stance_carry.x = -75;
if ( level.console )
level.stance_carry.y = -20;
else
level.stance_carry.y = -10;
level.stance_carry setshader( "stance_carry", 64, 64 );
level.stance_carry.alignx = "right";
level.stance_carry.aligny = "bottom";
level.stance_carry.horzalign = "right";
level.stance_carry.vertalign = "bottom";
level.stance_carry.foreground = 1;
level.stance_carry.alpha = 0;
level.stance_carry fadeovertime( 0.5 );
level.stance_carry.alpha = 1;
}
stance_carry_icon_disable()
{
if ( isdefined( level.stance_carry ) )
{
level.stance_carry fadeovertime( 0.5 );
level.stance_carry.alpha = 0;
level.stance_carry destroy();
}
setsaveddvar( "hud_showStance", "1" );
}
create_mantle()
{
if ( level.console )
{
var_0 = createfontstring( "default", 1.8 );
var_0 setpoint( "CENTER", undefined, -23, 115 );
var_0 settext( level.strings["mantle"] );
var_1 = createicon( "hint_mantle", 40, 40 );
var_1 setpoint( "CENTER", undefined, 73, 0 );
var_1 setparent( var_0 );
}
else
{
var_0 = createfontstring( "default", 1.6 );
var_0 setpoint( "CENTER", undefined, 0, 115 );
var_0 settext( level.strings["mantle"] );
var_1 = createicon( "hint_mantle", 40, 40 );
var_1 setpoint( "CENTER", undefined, 0, 30 );
var_1 setparent( var_0 );
}
var_1.alpha = 0;
var_0.alpha = 0;
level.hud_mantle = [];
level.hud_mantle["text"] = var_0;
level.hud_mantle["icon"] = var_1;
}
get_countdown_hud( var_0, var_1, var_2, var_3 )
{
if ( !isdefined( var_3 ) )
var_3 = 0;
var_4 = undefined;
if ( !level.console )
var_4 = -250;
else if ( !isdefined( var_0 ) )
var_4 = -225;
else
var_4 = var_0;
if ( var_3 )
var_4 = var_0;
if ( !isdefined( var_1 ) )
var_5 = 100;
else
var_5 = var_1;
if ( isdefined( var_2 ) )
var_6 = newclienthudelem( var_2 );
else
var_6 = newhudelem();
var_6.alignx = "left";
var_6.aligny = "middle";
var_6.horzalign = "right";
var_6.vertalign = "top";
var_6.x = var_4;
var_6.y = var_5;
var_6.fontscale = 1.6;
var_6.color = ( 0.8, 1, 0.8 );
var_6.font = "objective";
var_6.glowcolor = ( 0.3, 0.6, 0.3 );
var_6.glowalpha = 1;
var_6.foreground = 1;
var_6.hidewheninmenu = 1;
var_6.hidewhendead = 1;
return var_6;
}
get_download_state_hud( var_0, var_1, var_2, var_3 )
{
if ( !isdefined( var_3 ) )
var_3 = 0;
var_4 = undefined;
if ( !level.console )
var_4 = -250;
else if ( !isdefined( var_0 ) )
var_4 = -170;
else
var_4 = var_0;
if ( var_3 )
var_4 = var_0;
if ( !isdefined( var_1 ) )
var_5 = 100;
else
var_5 = var_1;
if ( isdefined( var_2 ) )
var_6 = newclienthudelem( var_2 );
else
var_6 = newhudelem();
var_6.alignx = "right";
var_6.aligny = "middle";
var_6.horzalign = "right";
var_6.vertalign = "top";
var_6.x = var_4;
var_6.y = var_5;
var_6.fontscale = 1.6;
var_6.color = ( 0.8, 1, 0.8 );
var_6.font = "objective";
var_6.glowcolor = ( 0.3, 0.6, 0.3 );
var_6.glowalpha = 1;
var_6.foreground = 1;
var_6.hidewheninmenu = 1;
var_6.hidewhendead = 1;
return var_6;
}
create_client_overlay( var_0, var_1, var_2 )
{
if ( isdefined( var_2 ) )
var_3 = newclienthudelem( var_2 );
else
var_3 = newhudelem();
var_3.x = 0;
var_3.y = 0;
var_3 setshader( var_0, 640, 480 );
var_3.alignx = "left";
var_3.aligny = "top";
var_3.sort = 1;
var_3.horzalign = "fullscreen";
var_3.vertalign = "fullscreen";
var_3.alpha = var_1;
var_3.foreground = 1;
return var_3;
}
create_client_overlay_custom_size( var_0, var_1, var_2, var_3, var_4 )
{
var_5 = maps\_utility::get_player_from_self();
var_6 = newclienthudelem( var_5 );
if ( !isdefined( var_4 ) )
var_4 = 1;
if ( !isdefined( var_2 ) )
var_2 = 0;
if ( !isdefined( var_3 ) )
var_3 = 0;
var_6.x = var_2;
var_6.y = var_3;
var_6 setshader( var_0, int( 640 * var_4 ), int( 480 * var_4 ) );
var_6.alignx = "center";
var_6.aligny = "middle";
var_6.sort = 1;
var_6.horzalign = "center";
var_6.vertalign = "middle";
var_6.alpha = var_1;
var_6.foreground = 1;
return var_6;
}
create_client_overlay_fullscreen( var_0, var_1, var_2, var_3, var_4 )
{
var_5 = maps\_utility::get_player_from_self();
var_6 = newclienthudelem( var_5 );
if ( !isdefined( var_4 ) )
var_4 = 1;
var_6.x = var_2;
var_6.y = var_3;
var_6 setshader( var_0, int( 640 * var_4 ), int( 480 * var_4 ) );
var_6.alignx = "center";
var_6.aligny = "middle";
var_6.sort = 1;
var_6.horzalign = "fullscreen";
var_6.vertalign = "fullscreen";
var_6.alpha = var_1;
var_6.foreground = 1;
return var_6;
}
fade_in( var_0, var_1 )
{
if ( level.missionfailed )
return;
if ( !isdefined( var_0 ) )
var_0 = 0.3;
var_2 = get_optional_overlay( var_1 );
var_2 fadeovertime( var_0 );
var_2.alpha = 0;
wait( var_0 );
}
get_optional_overlay( var_0 )
{
if ( !isdefined( var_0 ) )
var_0 = "black";
return get_overlay( var_0 );
}
fade_out( var_0, var_1 )
{
if ( !isdefined( var_0 ) )
var_0 = 0.3;
var_2 = get_optional_overlay( var_1 );
if ( var_0 > 0 )
var_2 fadeovertime( var_0 );
var_2.alpha = 1;
wait( var_0 );
}
start_overlay( var_0 )
{
var_1 = get_optional_overlay( var_0 );
var_1.alpha = 1;
}
get_overlay( var_0 )
{
if ( isplayer( self ) )
var_1 = self;
else
var_1 = level.player;
if ( !isdefined( var_1.overlay ) )
var_1.overlay = [];
if ( !isdefined( var_1.overlay[var_0] ) )
var_1.overlay[var_0] = create_client_overlay( var_0, 0, var_1 );
var_1.overlay[var_0].sort = 0;
var_1.overlay[var_0].foreground = 1;
return var_1.overlay[var_0];
}

358
maps/_idle.gsc Normal file
View File

@ -0,0 +1,358 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
create_animation_list()
{
var_0 = [];
var_0[var_0.size] = "phone";
var_0[var_0.size] = "smoke";
var_0[var_0.size] = "lean_smoke";
var_0[var_0.size] = "coffee";
var_0[var_0.size] = "sleep";
var_0[var_0.size] = "sit_load_ak";
var_0[var_0.size] = "smoke_balcony";
if ( isdefined( level.idle_animation_list_func ) )
var_0 = [[ level.idle_animation_list_func ]]( var_0 );
return var_0;
}
idle_main()
{
level.global_callbacks["_idle_call_idle_func"] = ::idle;
}
idle()
{
waittillframeend;
if ( !isalive( self ) )
return;
var_0 = undefined;
if ( !isdefined( self.target ) )
var_0 = self;
else
{
var_0 = getnode( self.target, "targetname" );
var_1 = getent( self.target, "targetname" );
var_2 = common_scripts\utility::getstruct( self.target, "targetname" );
var_3 = undefined;
if ( isdefined( var_0 ) )
var_3 = ::get_node;
else if ( isdefined( var_1 ) )
var_3 = ::get_ent;
else if ( isdefined( var_2 ) )
var_3 = common_scripts\utility::getstruct;
for ( var_0 = [[ var_3 ]]( self.target, "targetname" ); isdefined( var_0.target ); var_0 = [[ var_3 ]]( var_0.target, "targetname" ) )
{
}
}
var_4 = var_0.script_animation;
if ( !isdefined( var_4 ) )
var_4 = "random";
if ( !check_animation( var_4, var_0 ) )
return;
if ( var_4 == "random" )
{
var_4 = create_random_animation();
var_0.script_animation = var_4;
}
var_5 = var_4 + "_idle";
var_6 = var_4 + "_react";
var_7 = var_4 + "_death";
thread idle_proc( var_0, var_5, var_6, var_7 );
}
idle_reach_node( var_0, var_1 )
{
self endon( "death" );
self endon( "stop_idle_proc" );
if ( isdefined( self._stealth ) )
{
level maps\_utility::add_wait( common_scripts\utility::flag_wait, maps\_stealth_utility::stealth_get_group_spotted_flag() );
if ( isdefined( self._stealth.plugins.corpse ) )
{
level maps\_utility::add_wait( common_scripts\utility::flag_wait, maps\_stealth_utility::stealth_get_group_corpse_flag() );
maps\_utility::add_wait( maps\_utility::ent_flag_wait, "_stealth_saw_corpse" );
}
}
else
maps\_utility::add_wait( maps\_utility::waittill_msg, "enemy" );
maps\_utility::add_func( maps\_utility::send_notify, "stop_idle_proc" );
thread maps\_utility::do_wait_any();
if ( isdefined( self.script_patroller ) )
self waittill( "_patrol_reached_path_end" );
else
var_0 maps\_anim::anim_generic_reach( self, var_1 );
}
idle_proc( var_0, var_1, var_2, var_3 )
{
self.allowdeath = 1;
self endon( "death" );
if ( isdefined( self.script_idlereach ) )
{
self endon( "stop_idle_proc" );
idle_reach_node( var_0, var_1 );
}
if ( isdefined( self.script_idlereach ) )
{
self.script_animation = var_0.script_animation;
var_0 = self;
}
if ( var_0.script_animation == "sit_load_ak" )
{
var_4 = maps\_utility::spawn_anim_model( "chair_ak" );
self.has_delta = 1;
self.anim_props = maps\_utility::make_array( var_4 );
var_0 thread maps\_anim::anim_first_frame_solo( var_4, "sit_load_ak_react" );
}
if ( var_0.script_animation == "lean_smoke" || var_0.script_animation == "smoke_balcony" )
thread maps\_props::attach_cig_self();
if ( var_0.script_animation == "smoke_balcony" )
thread special_death_proc( var_0, var_3 );
if ( var_0.script_animation == "sleep" )
{
var_4 = maps\_utility::spawn_anim_model( "chair" );
self.has_delta = 1;
self.anim_props = maps\_utility::make_array( var_4 );
var_0 thread maps\_anim::anim_first_frame_solo( var_4, "sleep_react" );
thread reaction_sleep();
}
if ( isdefined( level.idle_proc_func ) )
self [[ level.idle_proc_func ]]( var_0, var_1, var_2, var_3 );
var_0 maps\_utility::script_delay();
self.deathanim = level.scr_anim["generic"][var_3];
if ( isdefined( self._stealth ) )
{
var_5 = undefined;
if ( var_0.script_animation == "smoke_balcony" )
var_5 = 1;
var_0 maps\_stealth_utility::stealth_ai_idle_and_react( self, var_1, var_2, undefined, var_5 );
var_0 common_scripts\utility::waittill_either( "stop_loop", "stop_idle_proc" );
maps\_utility::clear_deathanim();
return;
}
var_6 = "stop_loop";
var_0 thread maps\_anim::anim_generic_loop( self, var_1, var_6 );
thread animate_props_on_death( var_0, var_2 );
thread reaction_proc( var_0, var_6, var_2 );
}
reaction_sleep()
{
self endon( "death" );
self.ignoreall = 1;
reaction_sleep_wait_wakeup();
self.ignoreall = 0;
}
reaction_sleep_wait_wakeup()
{
self endon( "death" );
if ( isdefined( self._stealth ) )
{
thread maps\_stealth_utility::stealth_enemy_endon_alert();
self endon( "stealth_enemy_endon_alert" );
}
var_0 = 70;
common_scripts\utility::array_thread( level.players, ::reaction_sleep_wait_wakeup_dist, self, var_0 );
self waittill( "_idle_reaction" );
}
reaction_sleep_wait_wakeup_dist( var_0, var_1 )
{
var_0 endon( "death" );
var_0 endon( "_idle_reaction" );
self endon( "death" );
var_0 endon( "enemy" );
var_2 = var_1 * var_1;
for (;;)
{
while ( distancesquared( self.origin, var_0.origin ) > var_2 )
wait 0.1;
var_0.ignoreall = 0;
while ( distancesquared( self.origin, var_0.origin ) <= var_2 )
wait 0.1;
var_0.ignoreall = 1;
}
}
reaction_proc( var_0, var_1, var_2, var_3 )
{
self endon( "death" );
thread reaction_wait( "enemy" );
thread reaction_wait( "stop_idle_proc" );
thread reaction_wait( "react" );
thread reaction_wait( "doFlashBanged" );
thread reaction_wait( "explode" );
var_4 = undefined;
self waittill( "_idle_reaction", var_4 );
maps\_utility::clear_deathanim();
var_0 notify( var_1 );
if ( isdefined( self.anim_props ) )
{
self.anim_props_animated = 1;
var_0 thread maps\_anim::anim_single( self.anim_props, var_2 );
}
if ( var_4 == "stop_idle_proc" )
{
maps\_utility::anim_stopanimscripted();
return;
}
if ( var_4 != "doFlashBanged" )
{
if ( isdefined( var_3 ) || isdefined( self.has_delta ) )
var_0 maps\_anim::anim_generic( self, var_2, var_3 );
else
var_0 maps\_anim::anim_generic_custom_animmode( self, "gravity", var_2 );
}
}
reaction_wait( var_0 )
{
self waittill( var_0 );
self notify( "_idle_reaction", var_0 );
}
special_death_proc( var_0, var_1 )
{
thread maps\_utility::deletable_magic_bullet_shield();
thread clear_bulletshield_on_alert( var_0 );
self waittill( "damage" );
if ( isdefined( self.deathanim ) )
{
if ( isdefined( self._stealth ) )
maps\_stealth_utility::disable_stealth_for_ai();
var_0 maps\_anim::anim_generic( self, var_1 );
self delete();
}
}
clear_bulletshield_on_alert( var_0 )
{
self endon( "death" );
if ( !isdefined( self._stealth ) )
self waittill( "_idle_reaction" );
else
var_0 common_scripts\utility::waittill_either( "stop_loop", "stop_idle_proc" );
maps\_utility::clear_deathanim();
if ( isdefined( self.magic_bullet_shield ) && self.magic_bullet_shield )
maps\_utility::stop_magic_bullet_shield();
}
animate_props_on_death( var_0, var_1 )
{
if ( !isdefined( self.anim_props ) )
return;
var_2 = self.anim_props;
self waittill( "death" );
if ( isdefined( self.anim_props_animated ) )
return;
var_0 thread maps\_anim::anim_single( var_2, var_1 );
}
create_random_animation()
{
var_0 = create_animation_list();
return var_0[randomint( 2 )];
}
check_animation( var_0, var_1 )
{
var_2 = create_animation_list();
if ( var_0 == "random" )
{
var_3 = [];
for ( var_4 = 0; var_4 < var_2.size; var_4++ )
{
if ( !isdefined( level.scr_anim["generic"][var_2[var_4] + "_react"] ) )
var_3[var_3.size] = var_2[var_4];
}
if ( !var_3.size )
return 1;
for ( var_4 = 0; var_4 < var_3.size; var_4++ )
{
}
return 0;
}
for ( var_4 = 0; var_4 < var_2.size; var_4++ )
{
if ( var_2[var_4] == var_0 )
{
if ( !isdefined( level.scr_anim["generic"][var_0 + "_react"] ) )
return 0;
return 1;
}
}
var_5 = "";
for ( var_4 = 0; var_4 < var_2.size; var_4++ )
var_5 = var_5 + var_2[var_4] + ", ";
var_5 = var_5 + "and random.";
return 0;
}
get_ent( var_0, var_1 )
{
return getent( var_0, var_1 );
}
get_node( var_0, var_1 )
{
return getnode( var_0, var_1 );
}

20
maps/_idle_coffee.gsc Normal file
View File

@ -0,0 +1,20 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
#using_animtree("generic_human");
main()
{
level.scr_anim["generic"]["coffee_idle"][0] = %cargoship_stunned_coffee_react_idle;
level.scr_anim["generic"]["coffee_react"] = %exposed_idle_twitch_v4;
script_models();
}
#using_animtree("script_model");
script_models()
{
level.scr_anim["chair"]["sleep_react"] = %parabolic_guard_sleeper_react_chair;
level.scr_animtree["chair"] = #animtree;
level.scr_model["chair"] = "com_folding_chair";
}

12
maps/_idle_lean_smoke.gsc Normal file
View File

@ -0,0 +1,12 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
#using_animtree("generic_human");
main()
{
maps\_props::add_smoking_notetracks( "generic" );
level.scr_anim["generic"]["lean_smoke_idle"][0] = %parabolic_leaning_guy_smoking_idle;
level.scr_anim["generic"]["lean_smoke_idle"][1] = %parabolic_leaning_guy_smoking_twitch;
level.scr_anim["generic"]["lean_smoke_react"] = %parabolic_leaning_guy_react;
}

11
maps/_idle_phone.gsc Normal file
View File

@ -0,0 +1,11 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
#using_animtree("generic_human");
main()
{
maps\_props::add_cellphone_notetracks( "generic" );
level.scr_anim["generic"]["phone_idle"][0] = %patrol_bored_idle_cellphone;
level.scr_anim["generic"]["phone_react"] = %patrol_bored_react_look_retreat;
}

View File

@ -0,0 +1,30 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
#using_animtree("generic_human");
main()
{
maps\_props::add_sit_load_ak_notetracks( "generic" );
level.scr_anim["generic"]["sit_load_ak_idle"][0] = %sitting_guard_loadak_idle;
level.scr_anim["generic"]["sit_load_ak_react"] = %sitting_guard_loadak_react1;
maps\_anim::addnotetrack_customfunction( "generic", "detach clip left", ::load_ak_deathanim, "sit_load_ak_react" );
script_models();
}
load_ak_deathanim( var_0 )
{
var_0.deathanim = %exposed_death_nerve;
var_0 endon( "death" );
wait 2;
var_0.deathanim = undefined;
}
#using_animtree("script_model");
script_models()
{
level.scr_anim["chair_ak"]["sit_load_ak_react"] = %sitting_guard_loadak_idle_chair;
level.scr_animtree["chair_ak"] = #animtree;
level.scr_model["chair_ak"] = "com_folding_chair";
}

20
maps/_idle_sleep.gsc Normal file
View File

@ -0,0 +1,20 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
#using_animtree("generic_human");
main()
{
level.scr_anim["generic"]["sleep_idle"][0] = %parabolic_guard_sleeper_idle;
level.scr_anim["generic"]["sleep_react"] = %parabolic_guard_sleeper_react;
script_models();
}
#using_animtree("script_model");
script_models()
{
level.scr_anim["chair"]["sleep_react"] = %parabolic_guard_sleeper_react_chair;
level.scr_animtree["chair"] = #animtree;
level.scr_model["chair"] = "com_folding_chair";
}

11
maps/_idle_smoke.gsc Normal file
View File

@ -0,0 +1,11 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
#using_animtree("generic_human");
main()
{
maps\_props::add_smoking_notetracks( "generic" );
level.scr_anim["generic"]["smoke_idle"][0] = %patrol_bored_idle_smoke;
level.scr_anim["generic"]["smoke_react"] = %patrol_bored_react_look_advance;
}

View File

@ -0,0 +1,12 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
#using_animtree("generic_human");
main()
{
maps\_props::add_smoking_notetracks( "generic" );
level.scr_anim["generic"]["smoke_balcony_idle"][0] = %oilrig_balcony_smoke_idle;
level.scr_anim["generic"]["smoke_balcony_react"] = %patrol_bored_react_look_advance;
level.scr_anim["generic"]["smoke_balcony_death"] = %oilrig_balcony_death;
}

379
maps/_intelligence.gsc Normal file
View File

@ -0,0 +1,379 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
precachestring( &"SCRIPT_INTELLIGENCE_OF_EIGHTEEN" );
precachestring( &"SCRIPT_RORKEFILE_PREV_FOUND" );
precachestring( &"SCRIPT_RORKEFILE_PICKUP" );
precachestring( &"SCRIPT_INTELLIGENCE_PERCENT" );
precachestring( &"SCRIPT_INTELLIGENCE_UPLOADING" );
precacheshader( "torpedo_connection_bar" );
precacheshader( "torpedo_connection_frame" );
level.intel_items = create_array_of_intel_items();
setdvar( "ui_level_cheatpoints", level.intel_items.size );
level.intel_counter = 0;
setdvar( "ui_level_player_cheatpoints", level.intel_counter );
level.table_origins = create_array_of_origins_from_table();
initialize_intel();
if ( maps\_utility::is_specialop() )
{
remove_all_intel();
return;
}
intel_think();
wait 0.05;
}
remove_all_intel()
{
foreach ( var_2, var_1 in level.intel_items )
{
if ( !isdefined( var_1.removed ) )
var_1 remove_intel_item();
}
}
remove_intel_item()
{
self.removed = 1;
self.item hide();
self.item notsolid();
common_scripts\utility::trigger_off();
level.intel_counter++;
setdvar( "ui_level_player_cheatpoints", level.intel_counter );
self notify( "end_trigger_thread" );
}
initialize_intel()
{
foreach ( var_3, var_1 in level.intel_items )
{
var_2 = var_1.origin;
var_1.num = get_nums_from_origins( var_2 );
}
}
intel_think()
{
foreach ( var_2, var_1 in level.intel_items )
{
if ( var_1 check_item_found() )
{
var_1 remove_intel_item();
continue;
}
var_1 thread wait_for_pickup();
var_1 thread poll_for_found();
}
}
poll_for_found()
{
self endon( "end_loop_thread" );
if ( isdefined( self ) )
{
if ( check_item_found() )
remove_intel_item();
}
else
return;
while ( !check_item_found() )
wait 0.05;
remove_intel_item();
}
check_item_found()
{
foreach ( var_1 in level.players )
{
if ( !var_1 getplayerintelisfound( self.num ) )
return 0;
}
return 1;
}
create_array_of_intel_items()
{
var_0 = getentarray( "intelligence_item", "targetname" );
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
{
var_0[var_1].item = getent( var_0[var_1].target, "targetname" );
var_0[var_1].found = 0;
}
return var_0;
}
create_array_of_origins_from_table()
{
var_0 = 20;
var_1 = [];
for ( var_2 = 1; var_2 <= var_0; var_2++ )
{
var_3 = tablelookup( "maps/_intel_items.csv", 0, var_2, 4 );
if ( isdefined( var_3 ) && var_3 != "undefined" )
{
var_4 = strtok( var_3, "," );
for ( var_5 = 0; var_5 < var_4.size; var_5++ )
var_4[var_5] = int( var_4[var_5] );
var_1[var_2] = ( var_4[0], var_4[1], var_4[2] );
continue;
}
var_1[var_2] = undefined;
}
return var_1;
}
award_intel()
{
save_intel_for_all_players();
updategamerprofileall();
waittillframeend;
remove_intel_item();
}
wait_for_pickup()
{
self endon( "end_trigger_thread" );
if ( self.classname == "trigger_use" )
{
self sethintstring( &"SCRIPT_RORKEFILE_PICKUP" );
self usetriggerrequirelookat();
}
thread upload_hold();
self waittill( "hold_complete" );
self notify( "end_loop_thread" );
intel_feedback( level.player );
award_intel();
}
upload_hold()
{
level.player.hold_count = 0;
while ( level.player.hold_count < 30 && isdefined( self ) )
{
level.player.hold_count = 0;
self stoploopsound( "intelligence_pickup_loop" );
self waittill( "trigger", var_0 );
self playloopsound( "intelligence_pickup_loop" );
setdvar( "ui_securing", "intel" );
setdvar( "ui_securing_progress", 0.0 );
thread progress_bar();
hold_count_check();
}
self notify( "hold_complete" );
self stoploopsound( "intelligence_pickup_loop" );
setdvar( "ui_securing_progress", 1.0 );
setdvar( "ui_securing", "" );
}
hold_count_check()
{
self endon( "stopped_pressing" );
while ( isdefined( self ) && isdefined( level.player ) )
{
if ( level.player usebuttonpressed() && distance( level.player.origin, self.origin ) < 128 && isalive( level.player ) )
level.player.hold_count++;
else
{
setdvar( "ui_securing", "" );
self stoploopsound( "intelligence_pickup_loop" );
self notify( "stopped_pressing" );
}
if ( level.player.hold_count >= 30 )
{
setdvar( "ui_securing", "" );
self notify( "stopped_pressing" );
self stoploopsound( "intelligence_pickup_loop" );
}
common_scripts\utility::waitframe();
}
}
progress_bar()
{
self endon( "stopped_pressing" );
var_0 = 30;
var_1 = 8;
for ( var_2 = 0; var_2 < var_0; var_2++ )
{
setdvar( "ui_securing_progress", getdvarfloat( "ui_securing_progress" ) + 1 / var_0 );
common_scripts\utility::waitframe();
}
}
intel_upload_text( var_0, var_1 )
{
self endon( "stopped_pressing" );
var_2 = 30;
var_3 = 10;
var_4 = 0;
for ( var_5 = 0; var_5 < var_2; var_5++ )
{
if ( var_4 > var_3 )
var_4 = 0;
if ( var_4 < var_3 / 2 )
var_0 settext( &"SCRIPT_INTELLIGENCE_UPLOADING" );
else
var_0 settext( "" );
var_1.label = int( var_5 / var_2 * 100 );
var_1 settext( &"SCRIPT_INTELLIGENCE_PERCENT" );
var_4++;
common_scripts\utility::waitframe();
}
var_0 settext( &"SCRIPT_INTELLIGENCE_UPLOADING" );
var_1.label = "100";
var_1 settext( &"SCRIPT_INTELLIGENCE_PERCENT" );
}
save_intel_for_all_players()
{
foreach ( var_1 in level.players )
{
if ( var_1 getplayerintelisfound( self.num ) )
continue;
var_1 setplayerintelfound( self.num );
}
logstring( "found intel item " + self.num );
maps\_endmission::updatesppercent();
}
give_point()
{
var_0 = self getlocalplayerprofiledata( "cheatPoints" );
self setlocalplayerprofiledata( "cheatPoints", var_0 + 1 );
}
intel_feedback( var_0 )
{
self.item hide();
self.item notsolid();
level thread common_scripts\utility::play_sound_in_space( "intelligence_pickup", self.item.origin );
var_1 = 3000;
var_2 = 700;
var_3 = var_1 + var_2 / 1000;
foreach ( var_5 in level.players )
{
if ( var_0 != var_5 && var_5 getplayerintelisfound( self.num ) )
continue;
var_6 = var_5 maps\_hud_util::createclientfontstring( "objective", 1.5 );
var_6.glowcolor = ( 0.7, 0.7, 0.3 );
var_6.glowalpha = 1;
var_6 setup_hud_elem();
var_6.y = -50;
var_6 setpulsefx( 60, var_1, var_2 );
var_7 = 0;
if ( var_0 == var_5 && var_5 getplayerintelisfound( self.num ) )
var_6.label = &"SCRIPT_RORKEFILE_PREV_FOUND";
else
{
var_6.label = &"SCRIPT_INTELLIGENCE_OF_EIGHTEEN";
var_5 give_point();
var_7 = var_5 getlocalplayerprofiledata( "cheatPoints" );
var_6 setvalue( var_7 );
}
if ( var_7 == 18 )
var_5 maps\_utility::player_giveachievement_wrapper( "EXT_1" );
var_6 common_scripts\utility::delaycall( var_3, ::destroy );
}
}
setup_hud_elem()
{
self.color = ( 1, 1, 1 );
self.alpha = 1;
self.x = 0;
self.alignx = "center";
self.aligny = "middle";
self.horzalign = "center";
self.vertalign = "middle";
self.foreground = 1;
}
assert_if_identical_origins()
{
var_0 = [];
for ( var_1 = 1; var_1 < 65; var_1++ )
{
var_2 = tablelookup( "maps/_intel_items.csv", 0, var_1, 4 );
var_3 = strtok( var_2, "," );
for ( var_1 = 0; var_1 < var_3.size; var_1++ )
var_3[var_1] = int( var_3[var_1] );
var_0[var_1] = ( var_3[0], var_3[1], var_3[2] );
}
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
{
if ( !isdefined( var_0[var_1] ) )
continue;
if ( var_0[var_1] == "undefined" )
continue;
for ( var_4 = 0; var_4 < var_0.size; var_4++ )
{
if ( !isdefined( var_0[var_4] ) )
continue;
if ( var_0[var_4] == "undefined" )
continue;
if ( var_1 == var_4 )
continue;
if ( var_0[var_1] == var_0[var_4] )
{
}
}
}
}
get_nums_from_origins( var_0 )
{
for ( var_1 = 1; var_1 < level.table_origins.size + 1; var_1++ )
{
if ( !isdefined( level.table_origins[var_1] ) )
continue;
if ( distancesquared( var_0, level.table_origins[var_1] ) < squared( 75 ) )
return var_1;
}
}

1151
maps/_introscreen.gsc Normal file

File diff suppressed because it is too large Load Diff

107
maps/_inventory.gsc Normal file
View File

@ -0,0 +1,107 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
level.inventory = [];
}
inventory_create( var_0, var_1 )
{
if ( 1 )
return spawnstruct();
if ( !isdefined( var_1 ) )
var_1 = 0;
var_2 = newhudelem();
var_2.alignx = "right";
var_2.aligny = "top";
var_2.horzalign = "right";
var_2.vertalign = "top";
var_2.alpha = 0;
var_2.index = level.inventory.size;
var_2.show_icon = var_1;
var_2 setshader( var_0, 40, 40 );
level.inventory[var_2.index] = var_2;
inventroy_update();
return var_2;
}
inventory_hide()
{
if ( 1 )
return;
self.show_icon = 0;
inventroy_update();
}
inventory_show()
{
if ( 1 )
return;
self.show_icon = 1;
inventroy_update();
}
inventroy_update()
{
if ( 1 )
return;
var_0 = -18;
var_1 = 8;
var_2 = 42;
var_3 = 0;
for ( var_4 = 0; var_4 < level.inventory.size; var_4++ )
{
if ( level.inventory[var_4].show_icon )
{
var_5 = var_1 + var_2 * var_3;
if ( var_5 != level.inventory[var_4].y )
{
level.inventory[var_4].x = var_0;
if ( level.inventory[var_4].alpha != 0 )
level.inventory[var_4] moveovertime( 0.3 );
level.inventory[var_4].y = var_5;
}
if ( level.inventory[var_4].alpha != 1 )
{
level.inventory[var_4] fadeovertime( 0.3 );
level.inventory[var_4].alpha = 1;
}
var_3++;
continue;
}
level.inventory[var_4] fadeovertime( 0.3 );
level.inventory[var_4].alpha = 0;
}
}
inventory_destroy()
{
if ( 1 )
return;
self destroy();
var_0 = 0;
var_1 = level.inventory;
level.inventory = [];
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
{
if ( isdefined( var_1[var_2] ) )
level.inventory[level.inventory.size] = var_1[var_2];
}
inventroy_update();
}

1115
maps/_lights.gsc Normal file

File diff suppressed because it is too large Load Diff

2058
maps/_load.gsc Normal file

File diff suppressed because it is too large Load Diff

50
maps/_loadout.gsc Normal file
View File

@ -0,0 +1,50 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_loadout()
{
if ( !isdefined( level.campaign ) )
level.campaign = "american";
give_loadout();
maps\_loadout_code::loadout_complete();
}
give_loadout()
{
if ( isdefined( level.dodgeloadout ) )
return;
var_0 = maps\_loadout_code::get_loadout();
level.player maps\_loadout_code::setdefaultactionslot();
level.has_loadout = 0;
maps\_loadout_code::campaign( "british" );
maps\_loadout_code::persist( "innocent", "london", "flash" );
maps\_loadout_code::loadout( "london", "mp5_silencer_eotech", "fraggrenade", "flash_grenade", undefined, "viewhands_sas", "flash" );
maps\_loadout_code::loadout( "innocent", "mp5_silencer_eotech", "usp_silencer", "flash_grenade", "fraggrenade", "viewhands_sas", "flash" );
maps\_loadout_code::campaign( "delta" );
maps\_loadout_code::loadout( "prologue", "noweapon_youngblood", undefined, undefined, undefined, "viewhands_gs_hostage", undefined );
maps\_loadout_code::loadout( "deer_hunt", "honeybadger+acog_sp", "m9a1", "fraggrenade", undefined, "viewhands_us_rangers", undefined );
maps\_loadout_code::loadout( "nml", "honeybadger+acog_sp", "p226", undefined, undefined, "viewhands_us_rangers", undefined );
maps\_loadout_code::loadout( "enemyhq", "sc2010+reflex_sp", undefined, "flash_grenade", "fraggrenade", "viewhands_us_rangers", undefined );
maps\_loadout_code::loadout( "homecoming", "cz805bren+acog_sp", "m9a1", "flash_grenade", "fraggrenade", "viewhands_us_rangers", "flash" );
maps\_loadout_code::loadout( "flood", "r5rgp+reflex_sp", "p226", "flash_grenade", "fraggrenade", "viewhands_gs_flood", "flash" );
maps\_loadout_code::loadout( "cornered", "imbel+acog_sp+silencer_sp", "kriss+eotechsmg_sp+silencer_sp", "flash_grenade", "fraggrenade", "viewhands_gs_stealth", "flash" );
maps\_loadout_code::loadout( "oilrocks", "sc2010+acog_sp", "m9a1", "flash_grenade", "fraggrenade", "viewhands_devgru_elite", "flash" );
maps\_loadout_code::loadout( "jungle_ghosts", "m4_silencer_reflex", "fraggrenade", undefined, undefined, "viewhands_gs_jungle_b", undefined );
maps\_loadout_code::loadout( "clockwork", "gm6+scopegm6_sp+silencer03_sp", "cz805bren+reflex_sp+silencer_sp", "flash_grenade", "fraggrenade", "viewhands_player_fed_army_arctic", "flash" );
maps\_loadout_code::loadout( "black_ice", "r5rgp+reflex_sp", "p226", "flash_grenade", "fraggrenade", "viewhands_us_udt", "flash" );
maps\_loadout_code::loadout( "ship_graveyard", "aps_underwater+swim", undefined, undefined, undefined, "viewhands_us_udt", undefined );
maps\_loadout_code::loadout( "factory", "honeybadger+grip_sp+reflex_sp", "p226_tactical+silencerpistol_sp+tactical_sp", "flash_grenade", "fraggrenade", "viewhands_devgru_elite", "flash" );
maps\_loadout_code::loadout( "las_vegas", "r5rgp+acog_sp", "fraggrenade", undefined, undefined, "viewhands_gs_hostage", "flash" );
maps\_loadout_code::loadout( "carrier", "g28+acog_sp", "msbs+eotech_sp", "flash_grenade", "fraggrenade", "viewhands_gs_stealth", "flash" );
maps\_loadout_code::loadout( "satfarm", "lsat", "kriss+eotechsmg_sp", "flash_grenade", "fraggrenade", "viewhands_gs_stealth", "flash" );
maps\_loadout_code::loadout( "loki", "arx160_space+acog_sp+glarx160_sp", undefined, undefined, undefined, "viewhands_us_space", undefined );
maps\_loadout_code::loadout( "skyway", "fads+acog_sp", "k7+reflexsmg_sp", "flash_grenade", "semtex_grenade", "viewhands_gs_stealth", "flash" );
maps\_loadout_code::loadout( "youngblood", "noweapon_youngblood", undefined, undefined, undefined, "viewhands_gs_hostage", undefined );
maps\_loadout_code::loadout( "odin", "microtar_space_interior+acogsmg_sp", undefined, undefined, undefined, "viewhands_us_space", undefined );
maps\_loadout_code::loadout( "hamburg", "m4m203_acog_payback", "smaw_nolock", "flash_grenade", "fraggrenade", "viewhands_delta", "flash" );
maps\_loadout_code::loadout( "prague", "rsass_hybrid_silenced", "usp_silencer", "flash_grenade", "fraggrenade", "viewhands_yuri_europe", "flash" );
maps\_loadout_code::loadout( "payback", "m4m203_acog_payback", "deserteagle", "flash_grenade", "fraggrenade", "viewhands_yuri", "flash" );
maps\_loadout_code::default_loadout_if_notset();
}

176
maps/_loadout_code.gsc Normal file
View File

@ -0,0 +1,176 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
saveplayerweaponstatepersistent( var_0, var_1 )
{
if ( !isdefined( var_1 ) )
var_1 = 0;
level.player endon( "death" );
if ( level.player.health == 0 )
return;
var_2 = level.player getcurrentprimaryweapon();
if ( !isdefined( var_2 ) || var_2 == "none" )
{
}
game["weaponstates"][var_0]["current"] = var_2;
var_3 = level.player getcurrentoffhand();
game["weaponstates"][var_0]["offhand"] = var_3;
game["weaponstates"][var_0]["list"] = [];
var_4 = common_scripts\utility::array_combine( level.player getweaponslistprimaries(), level.player getweaponslistoffhands() );
for ( var_5 = 0; var_5 < var_4.size; var_5++ )
{
game["weaponstates"][var_0]["list"][var_5]["name"] = var_4[var_5];
if ( var_1 )
{
game["weaponstates"][var_0]["list"][var_5]["clip"] = level.player getweaponammoclip( var_4[var_5] );
game["weaponstates"][var_0]["list"][var_5]["stock"] = level.player getweaponammostock( var_4[var_5] );
}
}
}
restoreplayerweaponstatepersistent( var_0, var_1, var_2 )
{
var_3 = common_scripts\utility::ter_op( isdefined( var_2 ) && var_2, ::switchtoweaponimmediate, ::switchtoweapon );
if ( !isdefined( var_1 ) )
var_1 = 0;
if ( !isdefined( game["weaponstates"] ) )
return 0;
if ( !isdefined( game["weaponstates"][var_0] ) )
return 0;
level.player takeallweapons();
for ( var_4 = 0; var_4 < game["weaponstates"][var_0]["list"].size; var_4++ )
{
var_5 = game["weaponstates"][var_0]["list"][var_4]["name"];
if ( var_5 == "c4" )
continue;
if ( var_5 == "claymore" )
continue;
level.player giveweapon( var_5 );
level.player givemaxammo( var_5 );
if ( var_1 )
{
level.player setweaponammoclip( var_5, game["weaponstates"][var_0]["list"][var_4]["clip"] );
level.player setweaponammostock( var_5, game["weaponstates"][var_0]["list"][var_4]["stock"] );
}
}
level.player switchtooffhand( game["weaponstates"][var_0]["offhand"] );
level.player call [[ var_3 ]]( game["weaponstates"][var_0]["current"] );
return 1;
}
setdefaultactionslot()
{
self setactionslot( 1, "" );
self setactionslot( 2, "" );
self setactionslot( 3, "altMode" );
self setactionslot( 4, "" );
}
init_player()
{
setdefaultactionslot();
self takeallweapons();
}
get_loadout()
{
if ( isdefined( level.loadout ) )
return level.loadout;
return level.script;
}
campaign( var_0 )
{
level._lc = var_0;
}
persist( var_0, var_1, var_2 )
{
var_3 = get_loadout();
if ( var_0 != var_3 )
return;
if ( !isdefined( game["previous_map"] ) )
return;
level._lc_persists = 1;
if ( isdefined( var_2 ) )
level.player setoffhandsecondaryclass( var_2 );
restoreplayerweaponstatepersistent( get_loadout(), 1 );
level.has_loadout = 1;
}
loadout( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
{
if ( isdefined( var_0 ) )
{
var_7 = get_loadout();
if ( var_0 != var_7 || isdefined( level._lc_persists ) )
return;
}
if ( isdefined( var_1 ) )
{
level.default_weapon = var_1;
level.player giveweapon( var_1 );
}
if ( isdefined( var_6 ) )
level.player setoffhandsecondaryclass( var_6 );
if ( isdefined( var_2 ) )
level.player giveweapon( var_2 );
if ( isdefined( var_3 ) )
level.player giveweapon( var_3 );
if ( isdefined( var_4 ) )
level.player giveweapon( var_4 );
level.player switchtoweapon( var_1 );
if ( isdefined( var_5 ) )
level.player setviewmodel( var_5 );
level.campaign = level._lc;
level._lc = undefined;
level.has_loadout = 1;
}
loadout_complete()
{
level.loadoutcomplete = 1;
level notify( "loadout complete" );
}
default_loadout_if_notset()
{
if ( level.has_loadout )
return;
loadout( undefined, "kriss", undefined, "flash_grenade", "fraggrenade", "viewmodel_base_viewhands", "flash" );
level.map_without_loadout = 1;
}

321
maps/_mg_penetration.gsc Normal file
View File

@ -0,0 +1,321 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
gunner_think( var_0 )
{
self endon( "death" );
self notify( "end_mg_behavior" );
self endon( "end_mg_behavior" );
self.can_fire_turret = 1;
self.wants_to_fire = 0;
if ( !maps\_mgturret::use_the_turret( var_0 ) )
{
self notify( "continue_cover_script" );
return;
}
self.last_enemy_sighting_position = undefined;
thread record_enemy_sightings();
var_1 = anglestoforward( var_0.angles );
var_2 = spawn( "script_origin", ( 0, 0, 0 ) );
thread target_ent_cleanup( var_2 );
var_2.origin = var_0.origin + var_1 * 500;
if ( isdefined( self.last_enemy_sighting_position ) )
var_2.origin = self.last_enemy_sighting_position;
var_0 settargetentity( var_2 );
var_3 = undefined;
for (;;)
{
if ( !isalive( self.current_enemy ) )
{
stop_firing();
self waittill( "new_enemy" );
}
start_firing();
shoot_enemy_until_he_hides_then_shoot_wall( var_2 );
if ( !isalive( self.current_enemy ) )
continue;
if ( self cansee( self.current_enemy ) )
continue;
self waittill( "saw_enemy" );
}
}
target_ent_cleanup( var_0 )
{
common_scripts\utility::waittill_either( "death", "end_mg_behavior" );
var_0 delete();
}
shoot_enemy_until_he_hides_then_shoot_wall( var_0 )
{
self endon( "death" );
self endon( "new_enemy" );
self.current_enemy endon( "death" );
var_1 = self.current_enemy;
while ( self cansee( var_1 ) )
{
var_2 = vectortoangles( var_1 geteye() - var_0.origin );
var_2 = anglestoforward( var_2 );
var_0 moveto( var_0.origin + var_2 * 12, 0.1 );
wait 0.1;
}
if ( isplayer( var_1 ) )
{
self endon( "saw_enemy" );
var_3 = var_1 geteye();
var_2 = vectortoangles( var_3 - var_0.origin );
var_2 = anglestoforward( var_2 );
var_4 = 150;
var_5 = distance( var_0.origin, self.last_enemy_sighting_position ) / var_4;
if ( var_5 > 0 )
{
var_0 moveto( self.last_enemy_sighting_position, var_5 );
wait( var_5 );
}
var_6 = var_0.origin + var_2 * 180;
var_7 = get_suppress_point( self geteye(), var_0.origin, var_6 );
if ( !isdefined( var_7 ) )
var_7 = var_0.origin;
var_0 moveto( var_0.origin + var_2 * 80 + ( 0, 0, randomfloatrange( 15, 50 ) * -1 ), 3, 1, 1 );
wait 3.5;
var_0 moveto( var_7 + var_2 * -20, 3, 1, 1 );
}
wait( randomfloatrange( 2.5, 4 ) );
stop_firing();
}
set_firing( var_0 )
{
if ( var_0 )
{
self.can_fire_turret = 1;
if ( self.wants_to_fire )
self.turret notify( "startfiring" );
}
else
{
self.can_fire_turret = 0;
self.turret notify( "stopfiring" );
}
}
stop_firing()
{
self.wants_to_fire = 0;
self.turret notify( "stopfiring" );
}
start_firing()
{
self.wants_to_fire = 1;
if ( self.can_fire_turret )
self.turret notify( "startfiring" );
}
create_mg_team()
{
if ( isdefined( level.mg_gunner_team ) )
{
level.mg_gunner_team[level.mg_gunner_team.size] = self;
return;
}
level.mg_gunner_team = [];
level.mg_gunner_team[level.mg_gunner_team.size] = self;
waittillframeend;
var_0 = spawnstruct();
common_scripts\utility::array_thread( level.mg_gunner_team, ::mg_gunner_death_notify, var_0 );
var_1 = level.mg_gunner_team;
level.mg_gunner_team = undefined;
var_0 waittill( "gunner_died" );
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
{
if ( !isalive( var_1[var_2] ) )
continue;
var_1[var_2] notify( "stop_using_built_in_burst_fire" );
var_1[var_2] thread solo_fires();
}
}
mg_gunner_death_notify( var_0 )
{
self waittill( "death" );
var_0 notify( "gunner_died" );
}
mgteam_take_turns_firing( var_0 )
{
wait 1;
level notify( "new_mg_firing_team" + var_0[0].script_noteworthy );
level endon( "new_mg_firing_team" + var_0[0].script_noteworthy );
for (;;)
{
dual_firing( var_0 );
solo_firing( var_0 );
}
}
solo_firing( var_0 )
{
var_1 = undefined;
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
{
if ( !isalive( var_0[var_2] ) )
continue;
var_1 = var_0[var_2];
break;
}
if ( !isdefined( var_1 ) )
return;
}
solo_fires()
{
self endon( "death" );
for (;;)
{
self.turret startfiring();
wait( randomfloatrange( 0.3, 0.7 ) );
self.turret stopfiring();
wait( randomfloatrange( 0.1, 1.1 ) );
}
}
dual_firing( var_0 )
{
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
var_0[var_1] endon( "death" );
var_2 = 0;
var_3 = 1;
for (;;)
{
if ( isalive( var_0[var_2] ) )
var_0[var_2] set_firing( 1 );
if ( isalive( var_0[var_3] ) )
var_0[var_3] set_firing( 0 );
var_4 = var_2;
var_2 = var_3;
var_3 = var_4;
wait( randomfloatrange( 2.3, 3.5 ) );
}
}
spotted_an_enemy( var_0, var_1 )
{
start_firing();
self endon( "death" );
self endon( "new_enemy" );
var_1 endon( "death" );
while ( self cansee( var_1 ) )
{
var_2 = vectortoangles( var_1 geteye() - var_0.origin );
var_2 = anglestoforward( var_2 );
var_0 moveto( var_0.origin + var_2 * 10, 0.2 );
wait 0.2;
}
var_2 = vectortoangles( var_1 geteye() - var_0.origin );
var_2 = anglestoforward( var_2 );
var_3 = 150;
var_4 = distance( var_0.origin, self.last_enemy_sighting_position ) / var_3;
var_0 moveto( self.last_enemy_sighting_position, var_4 );
wait( var_4 );
var_5 = var_0.origin;
var_0 moveto( var_0.origin + var_2 * 80 + ( 0, 0, -25 ), 3, 1, 1 );
wait 3.5;
var_0 moveto( var_5 + var_2 * -20, 3, 1, 1 );
wait 1;
stop_firing();
}
get_suppress_point( var_0, var_1, var_2 )
{
var_3 = distance( var_1, var_2 ) * 0.05;
if ( var_3 < 5 )
var_3 = 5;
if ( var_3 > 20 )
var_3 = 20;
var_4 = var_2 - var_1;
var_4 = ( var_4[0] / var_3, var_4[1] / var_3, var_4[2] / var_3 );
var_5 = ( 0, 0, 0 );
var_6 = undefined;
for ( var_7 = 0; var_7 < var_3 + 2; var_7++ )
{
var_8 = bullettrace( var_0, var_1 + var_5, 0, undefined );
if ( var_8["fraction"] < 1 )
{
var_6 = var_8["position"];
break;
}
var_5 = var_5 + var_4;
}
return var_6;
}
record_enemy_sightings()
{
self endon( "death" );
self endon( "end_mg_behavior" );
self.current_enemy = undefined;
for (;;)
{
record_sighting();
wait 0.05;
}
}
record_sighting()
{
if ( !isalive( self.enemy ) )
return;
if ( !self cansee( self.enemy ) )
return;
self.last_enemy_sighting_position = self.enemy geteye();
self notify( "saw_enemy" );
if ( !isalive( self.current_enemy ) || self.current_enemy != self.enemy )
{
self.current_enemy = self.enemy;
self notify( "new_enemy" );
}
}

1762
maps/_mgturret.gsc Normal file

File diff suppressed because it is too large Load Diff

166
maps/_minigun_viewmodel.gsc Normal file
View File

@ -0,0 +1,166 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
#using_animtree("vehicles");
player_viewhands_minigun( var_0, var_1, var_2 )
{
if ( !isdefined( var_1 ) )
var_1 = "viewhands_player_us_army";
var_0 useanimtree( #animtree );
if ( !isdefined( var_2 ) )
var_0.animname = "suburban_hands";
else
var_0.animname = var_2;
var_0.has_hands = 0;
var_0 show_hands( var_1 );
var_0 set_idle();
var_0 thread player_viewhands_minigun_hand( "LEFT" );
var_0 thread player_viewhands_minigun_hand( "RIGHT" );
var_0 thread handle_mounting( var_1 );
}
set_idle()
{
self setanim( maps\_utility::getanim( "idle_L" ), 1, 0, 1 );
self setanim( maps\_utility::getanim( "idle_R" ), 1, 0, 1 );
}
handle_mounting( var_0 )
{
var_1 = self;
var_1 endon( "death" );
for (;;)
{
var_1 waittill( "turretownerchange" );
var_2 = var_1 getturretowner();
if ( !isalive( var_2 ) )
{
hide_hands( var_0 );
continue;
}
show_hands( var_0 );
}
}
show_hands( var_0 )
{
if ( !isdefined( var_0 ) )
var_0 = "viewhands_player_us_army";
var_1 = self;
if ( var_1.has_hands )
return;
var_1 dontcastshadows();
var_1.has_hands = 1;
var_1 attach( var_0, "tag_player" );
}
hide_hands( var_0 )
{
if ( !isdefined( var_0 ) )
var_0 = "viewhands_player_us_army";
var_1 = self;
if ( !var_1.has_hands )
return;
var_1 castshadows();
var_1.has_hands = 0;
var_1 detach( var_0, "tag_player" );
}
anim_minigun_hands()
{
level.scr_animtree["suburban_hands"] = #animtree;
level.scr_model["suburban_hands"] = "viewhands_player_us_army";
level.scr_anim["suburban_hands"]["idle_L"] = %player_suburban_minigun_idle_l;
level.scr_anim["suburban_hands"]["idle_R"] = %player_suburban_minigun_idle_r;
level.scr_anim["suburban_hands"]["idle2fire_L"] = %player_suburban_minigun_idle2fire_l;
level.scr_anim["suburban_hands"]["idle2fire_R"] = %player_suburban_minigun_idle2fire_r;
level.scr_anim["suburban_hands"]["fire2idle_L"] = %player_suburban_minigun_fire2idle_l;
level.scr_anim["suburban_hands"]["fire2idle_R"] = %player_suburban_minigun_fire2idle_r;
}
player_viewhands_minigun_hand( var_0 )
{
self endon( "death" );
var_1 = undefined;
if ( var_0 == "LEFT" )
var_1 = ::spinbuttonpressed;
else if ( var_0 == "RIGHT" )
var_1 = ::firebuttonpressed;
for (;;)
{
if ( level.player [[ var_1 ]]() )
{
thread player_viewhands_minigun_presed( var_0 );
while ( level.player [[ var_1 ]]() )
wait 0.05;
continue;
}
thread player_viewhands_minigun_idle( var_0 );
while ( !level.player [[ var_1 ]]() )
wait 0.05;
}
}
spinbuttonpressed()
{
if ( level.player adsbuttonpressed() )
return 1;
if ( level.player attackbuttonpressed() )
return 1;
return 0;
}
firebuttonpressed()
{
return level.player attackbuttonpressed();
}
player_viewhands_minigun_idle( var_0 )
{
var_1 = undefined;
if ( var_0 == "LEFT" )
var_1 = "L";
else if ( var_0 == "RIGHT" )
var_1 = "R";
self clearanim( maps\_utility::getanim( "idle2fire_" + var_1 ), 0.2 );
self setflaggedanimrestart( "anim", maps\_utility::getanim( "fire2idle_" + var_1 ) );
self waittillmatch( "anim", "end" );
self clearanim( maps\_utility::getanim( "fire2idle_" + var_1 ), 0.2 );
self setanim( maps\_utility::getanim( "idle_" + var_1 ) );
}
player_viewhands_minigun_presed( var_0 )
{
var_1 = undefined;
if ( var_0 == "LEFT" )
var_1 = "L";
else if ( var_0 == "RIGHT" )
var_1 = "R";
self clearanim( maps\_utility::getanim( "idle_" + var_1 ), 0.2 );
self setanim( maps\_utility::getanim( "idle2fire_" + var_1 ) );
}

12
maps/_mocap_ar.gsc Normal file
View File

@ -0,0 +1,12 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
}
start_mocap_ar()
{
}

1326
maps/_mortar.gsc Normal file

File diff suppressed because it is too large Load Diff

364
maps/_names.gsc Normal file
View File

@ -0,0 +1,364 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
}
setup_names()
{
if ( isdefined( level.names ) )
return;
var_0 = [];
var_0[var_0.size] = "american";
var_0[var_0.size] = "seal";
var_0[var_0.size] = "taskforce";
var_0[var_0.size] = "secretservice";
var_0[var_0.size] = "british";
var_0[var_0.size] = "arab";
var_0[var_0.size] = "russian";
var_0[var_0.size] = "multilingual";
var_0[var_0.size] = "portuguese";
var_0[var_0.size] = "shadowcompany";
var_0[var_0.size] = "delta";
var_0[var_0.size] = "french";
var_0[var_0.size] = "african";
var_0[var_0.size] = "czech";
var_0[var_0.size] = "czech_surnames";
var_0[var_0.size] = "pmc";
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
level.names[var_0[var_1]] = [];
add_name( "american", "Smith" );
add_name( "american", "Johnson" );
add_name( "american", "Williams" );
add_name( "american", "Jones" );
add_name( "american", "Brown" );
add_name( "american", "Davis" );
add_name( "american", "Miller" );
add_name( "american", "Wilson" );
add_name( "american", "Moore" );
add_name( "american", "Taylor" );
add_name( "american", "Anderson" );
add_name( "american", "Thomas" );
add_name( "american", "Jackson" );
add_name( "american", "White" );
add_name( "american", "Harris" );
add_name( "american", "Martin" );
add_name( "american", "Garcia" );
add_name( "american", "Martinez" );
add_name( "american", "Robinson" );
add_name( "american", "Clark" );
add_name( "american", "Rodriguez" );
add_name( "american", "Lewis" );
add_name( "american", "Lee" );
add_name( "american", "Hall" );
add_name( "american", "Allen" );
add_name( "american", "Young" );
add_name( "american", "Hernandez" );
add_name( "american", "King" );
add_name( "seal", "Angel" );
add_name( "seal", "Apex" );
add_name( "seal", "Bearcat" );
add_name( "seal", "Bishop" );
add_name( "seal", "Boomer" );
add_name( "seal", "Boxer" );
add_name( "seal", "Canine" );
add_name( "seal", "Chemist" );
add_name( "seal", "Chemo" );
add_name( "seal", "Cherub" );
add_name( "seal", "Chino" );
add_name( "seal", "Coffin" );
add_name( "seal", "Coma" );
add_name( "seal", "Cyclops" );
add_name( "seal", "Cypher" );
add_name( "seal", "Doc" );
add_name( "seal", "Druid" );
add_name( "seal", "Exxon" );
add_name( "seal", "Gator" );
add_name( "seal", "Hannibal" );
add_name( "seal", "Hazard" );
add_name( "seal", "Hitman" );
add_name( "seal", "Jayhawk" );
add_name( "seal", "Jester" );
add_name( "seal", "Justice" );
add_name( "seal", "Klepto" );
add_name( "seal", "Kojak" );
add_name( "seal", "Langley" );
add_name( "seal", "Neptune" );
add_name( "seal", "Mamba" );
add_name( "seal", "Midnight" );
add_name( "seal", "Neon" );
add_name( "seal", "Nomad" );
add_name( "seal", "Ogre" );
add_name( "seal", "Ozone" );
add_name( "seal", "Patron" );
add_name( "seal", "Pharaoh" );
add_name( "seal", "Pieces" );
add_name( "seal", "Poet" );
add_name( "seal", "Preacher" );
add_name( "seal", "Reaper" );
add_name( "seal", "Redcell" );
add_name( "seal", "Roadie" );
add_name( "seal", "Robot" );
add_name( "seal", "Rocket" );
add_name( "seal", "Rooster" );
add_name( "seal", "Sparrow" );
add_name( "seal", "Taco" );
add_name( "seal", "Thumper" );
add_name( "seal", "Trojan" );
add_name( "seal", "Twister" );
add_name( "seal", "Undertone" );
add_name( "seal", "Utah" );
add_name( "seal", "Whiskey" );
add_name( "seal", "Worm" );
add_name( "seal", "Yankee" );
add_name( "seal", "Zero" );
copy_names( "taskforce", "seal" );
copy_names( "delta", "seal" );
add_name( "secretservice", "Smith" );
add_name( "secretservice", "Jones" );
add_name( "british", "Abbot" );
add_name( "british", "Adams" );
add_name( "british", "Bartlett" );
add_name( "british", "Boyd" );
add_name( "russian", "Sasha Ivanov" );
add_name( "russian", "Aleksei Vyshinskiy" );
add_name( "russian", "Boris Ryzhkov" );
add_name( "russian", "Dima Tikhonov" );
add_name( "russian", "Oleg Kosygin" );
add_name( "arab", "Abdulaziz" );
add_name( "arab", "Abdullah" );
add_name( "arab", "Ali" );
add_name( "portuguese", "Carlitos" );
add_name( "portuguese", "Antonio" );
add_name( "portuguese", "Gervasio" );
add_name( "portuguese", "Lois" );
add_name( "portuguese", "Xesus" );
add_name( "shadowcompany", "Lestat" );
add_name( "shadowcompany", "Nosferatu" );
add_name( "shadowcompany", "Lecter" );
add_name( "multilingual", "Kugelschreiber" );
add_name( "multilingual", "Flughafen" );
add_name( "french", "Astor" );
add_name( "french", "Beliveau" );
add_name( "african", "Sulaiman" );
add_name( "african", "Camara" );
add_name( "african", "Mustapha" );
add_name( "african", "Abubakarr" );
add_name( "czech", "Andrej" );
add_name( "czech", "Anton" );
add_name( "czech_surnames", "Blumel" );
add_name( "czech_surnames", "Maly" );
add_name( "czech_surnames", "Pospisil" );
copy_names( "pmc", "czech_surnames" );
init_script_friendnames();
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
{
remove_script_friendnames_from_list( var_0[var_1] );
randomize_name_list( var_0[var_1] );
level.nameindex[var_0[var_1]] = 0;
}
}
copy_names( var_0, var_1 )
{
level.names[var_0] = level.names[var_1];
}
add_name( var_0, var_1 )
{
level.names[var_0][level.names[var_0].size] = var_1;
}
remove_name( var_0, var_1 )
{
level.names[var_0] = common_scripts\utility::array_remove( level.names[var_0], var_1 );
}
init_script_friendnames()
{
var_0 = [];
var_1 = getspawnerarray();
var_2 = getaiarray();
foreach ( var_4 in var_1 )
{
if ( isdefined( var_4.script_friendname ) && var_4.script_friendname != "none" )
{
var_5 = normalize_script_friendname( var_4.script_friendname );
var_0[var_0.size] = var_5;
}
}
foreach ( var_8 in var_2 )
{
if ( isdefined( var_8.script_friendname ) && var_8.script_friendname != "none" )
{
var_5 = normalize_script_friendname( var_8.script_friendname );
var_0[var_0.size] = var_5;
}
}
level.script_friendnames = var_0;
}
normalize_script_friendname( var_0 )
{
var_1 = strtok( var_0, " " );
if ( var_1.size > 1 )
var_0 = var_1[1];
return var_0;
}
remove_script_friendnames_from_list( var_0 )
{
foreach ( var_2 in level.script_friendnames )
{
foreach ( var_4 in level.names[var_0] )
{
if ( var_2 == var_4 )
remove_name( var_0, var_4 );
}
}
}
randomize_name_list( var_0 )
{
var_1 = level.names[var_0].size;
for ( var_2 = 0; var_2 < var_1; var_2++ )
{
var_3 = randomint( var_1 );
var_4 = level.names[var_0][var_2];
level.names[var_0][var_2] = level.names[var_0][var_3];
level.names[var_0][var_3] = var_4;
}
}
get_name( var_0 )
{
if ( isdefined( self.team ) && self.team == "neutral" )
return;
if ( isdefined( self.script_friendname ) )
{
if ( self.script_friendname == "none" )
return;
self.name = self.script_friendname;
getrankfromname( self.name );
self notify( "set name and rank" );
return;
}
get_name_for_nationality( self.voice );
self notify( "set name and rank" );
}
get_name_for_nationality( var_0 )
{
level.nameindex[var_0] = ( level.nameindex[var_0] + 1 ) % level.names[var_0].size;
var_1 = level.names[var_0][level.nameindex[var_0]];
var_2 = randomint( 10 );
if ( nationalityusessurnames( var_0 ) )
{
var_3 = var_0 + "_surnames";
level.nameindex[var_3] = ( level.nameindex[var_3] + 1 ) % level.names[var_3].size;
var_1 = var_1 + " " + level.names[var_3][level.nameindex[var_3]];
}
if ( nationalityusescallsigns( var_0 ) )
{
var_4 = var_1;
self.airank = "private";
}
else if ( var_0 == "secretservice" )
{
var_4 = "Agent " + var_1;
self.airank = "private";
}
else if ( var_2 > 5 )
{
var_4 = "Pvt. " + var_1;
self.airank = "private";
}
else if ( var_2 > 2 )
{
var_4 = "Cpl. " + var_1;
self.airank = "private";
}
else
{
var_4 = "Sgt. " + var_1;
self.airank = "sergeant";
}
if ( isai( self ) && self isbadguy() )
self.ainame = var_4;
else
self.name = var_4;
}
getrankfromname( var_0 )
{
if ( !isdefined( var_0 ) )
self.airank = "private";
var_1 = strtok( var_0, " " );
var_2 = var_1[0];
switch ( var_2 )
{
case "Pvt.":
self.airank = "private";
break;
case "Pfc.":
self.airank = "private";
break;
case "Agent":
self.airank = "private";
break;
case "Cpl.":
self.airank = "corporal";
break;
case "Sgt.":
self.airank = "sergeant";
break;
case "Lt.":
self.airank = "lieutenant";
break;
case "Cpt.":
self.airank = "captain";
break;
default:
self.airank = "private";
break;
}
}
nationalityusescallsigns( var_0 )
{
switch ( var_0 )
{
case "czech":
case "delta":
case "taskforce":
case "seal":
return 1;
}
return 0;
}
nationalityusessurnames( var_0 )
{
return isdefined( level.names[var_0 + "_surnames"] );
}

158
maps/_nightvision.gsc Normal file
View File

@ -0,0 +1,158 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main( var_0, var_1 )
{
if ( !isdefined( var_0 ) )
var_0 = level.players;
thread init_and_run( var_0, var_1 );
}
init_and_run( var_0, var_1 )
{
var_1 = common_scripts\utility::ter_op( isdefined( var_1 ), var_1, 1 );
precachenightvisioncodeassets();
precacheshellshock( "nightvision" );
level.nightvision_dlight_effect = loadfx( "fx/misc/NV_dlight" );
level.nightvision_reflector_effect = loadfx( "fx/misc/ir_tapeReflect" );
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
{
var_3 = var_0[var_2];
var_3 maps\_utility::ent_flag_init( "nightvision_enabled" );
var_3 maps\_utility::ent_flag_init( "nightvision_on" );
var_3 maps\_utility::ent_flag_set( "nightvision_enabled" );
var_3 maps\_utility::ent_flag_init( "nightvision_dlight_enabled" );
var_3 maps\_utility::ent_flag_set( "nightvision_dlight_enabled" );
var_3 maps\_utility::ent_flag_clear( "nightvision_dlight_enabled" );
var_3 setactionslot( var_1, "nightvision" );
}
visionsetnight( "default_night" );
waittillframeend;
wait 0.05;
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
{
var_3 = var_0[var_2];
var_3 thread nightvision_toggle();
}
}
nightvision_toggle()
{
self endon( "death" );
for (;;)
{
self waittill( "night_vision_on" );
nightvision_on();
self waittill( "night_vision_off" );
nightvision_off();
wait 0.05;
}
}
nightvision_check( var_0 )
{
if ( !isdefined( var_0 ) )
var_0 = level.player;
return isdefined( var_0.nightvision_enabled );
}
nightvision_on()
{
self.nightvision_started = 1;
wait 1.0;
maps\_utility::ent_flag_set( "nightvision_on" );
self.nightvision_enabled = 1;
var_0 = getaiarray( "allies" );
common_scripts\utility::array_thread( var_0, ::enable_ir_beacon );
if ( !maps\_utility::exists_global_spawn_function( "allies", ::enable_ir_beacon ) )
maps\_utility::add_global_spawn_function( "allies", ::enable_ir_beacon );
}
enable_ir_beacon()
{
if ( !isai( self ) )
return;
if ( isdefined( self.has_no_ir ) )
return;
animscripts\shared::updatelaserstatus();
thread loopreflectoreffect();
}
loopreflectoreffect()
{
level endon( "night_vision_off" );
self endon( "death" );
for (;;)
{
playfxontag( level.nightvision_reflector_effect, self, "tag_reflector_arm_le" );
playfxontag( level.nightvision_reflector_effect, self, "tag_reflector_arm_ri" );
wait 0.1;
}
}
stop_reflector_effect()
{
if ( isdefined( self.has_no_ir ) )
return;
stopfxontag( level.nightvision_reflector_effect, self, "tag_reflector_arm_le" );
stopfxontag( level.nightvision_reflector_effect, self, "tag_reflector_arm_ri" );
}
nightvision_off()
{
self.nightvision_started = undefined;
wait 0.4;
level notify( "night_vision_off" );
if ( isdefined( level.nightvision_dlight ) )
level.nightvision_dlight delete();
self notify( "nightvision_shellshock_off" );
maps\_utility::ent_flag_clear( "nightvision_on" );
self.nightvision_enabled = undefined;
var_0 = 0;
for ( var_1 = 0; var_1 < level.players.size; var_1++ )
{
if ( nightvision_check( level.players[var_1] ) )
var_0 = 1;
}
if ( !var_0 )
maps\_utility::remove_global_spawn_function( "allies", ::enable_ir_beacon );
thread nightvision_effectsoff();
}
nightvision_effectsoff()
{
var_0 = getaiarray( "allies" );
foreach ( var_2 in var_0 )
{
var_2.usingnvfx = undefined;
var_2 animscripts\shared::updatelaserstatus();
var_2 stop_reflector_effect();
}
}
shouldbreaknvghintprint()
{
return isdefined( self.nightvision_started );
}
should_break_disable_nvg_print()
{
return !isdefined( self.nightvision_started );
}

118
maps/_ocean.gsc Normal file
View File

@ -0,0 +1,118 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
setup_ocean_params( var_0, var_1, var_2, var_3, var_4 )
{
var_5[0] = 3;
var_6[0] = 3;
var_7[0] = 30;
var_8[0] = 4;
var_9[0] = 0;
var_5[1] = 8;
var_6[1] = 8;
var_7[1] = 10;
var_8[1] = 1.75;
var_9[1] = 45;
var_5[2] = 2;
var_6[2] = 2;
var_7[2] = 0;
var_8[2] = 2;
var_9[2] = 315;
maps\ocean_perlin::setup_ocean_perlin( var_0 );
for ( var_10 = 0; var_10 < 3; var_10++ )
{
var_0.uscale[var_10] = 0.0001 * var_1 * var_5[var_10];
var_0.vscale[var_10] = 0.0001 * var_2 * var_6[var_10];
var_0.amplitude[var_10] = var_3 * var_7[var_10];
var_0.uscrollrate[var_10] = cos( var_9[var_10] ) * var_4 * var_8[var_10];
var_0.vscrollrate[var_10] = sin( var_9[var_10] ) * var_4 * var_8[var_10];
}
var_0.uoff = -0.5;
var_0.voff = -0.5;
var_0.gametimeoffset = 0.0;
var_0.displacement_uvscale = 1.0;
}
setup_ocean()
{
var_0 = 1;
var_1 = 1;
var_2 = 1;
var_3 = 0.025;
level.oceantextures["water_patch"] = spawnstruct();
setup_ocean_params( level.oceantextures["water_patch"], var_0, var_1, var_2, var_3 );
level.oceantextures["water_patch_med"] = spawnstruct();
setup_ocean_params( level.oceantextures["water_patch_med"], var_0, var_1, 0.5 * var_2, var_3 );
level.oceantextures["water_patch_calm"] = spawnstruct();
setup_ocean_params( level.oceantextures["water_patch_calm"], var_0, var_1, 0, var_3 );
}
gettransformeduv( var_0, var_1, var_2, var_3 )
{
var_4 = gettime();
var_4 = var_4 / 43200000.0;
var_4 = var_4 - int( var_4 );
var_4 = var_4 * 43200.0;
var_4 = var_4 + var_0.gametimeoffset;
var_5 = ( var_1[0] * var_0.uscale[var_2] * var_3, var_1[1] * var_0.vscale[var_2] * var_3, 0 );
var_5 = var_5 + ( var_4 * var_0.uscrollrate[var_2] * var_3, var_4 * var_0.vscrollrate[var_2] * var_3, 0 );
return var_5;
}
gettexturesamplefromint( var_0, var_1 )
{
var_2 = animscripts\utility::safemod( var_1[0], var_0.width );
var_3 = animscripts\utility::safemod( var_1[1], var_0.height );
var_4 = var_0.image[var_3][var_2];
var_4 = var_4 / 255.0;
return var_4;
}
getinterpolatedtexturesample( var_0, var_1 )
{
var_2 = var_1[0] - floor( var_1[0] );
var_3 = var_1[1] - floor( var_1[1] );
var_4 = ( var_2 * var_0.width, var_3 * var_0.height, 0 );
var_1 = ( var_4[0] + var_0.uoff, var_4[1] + var_0.voff, 0 );
var_5 = ( floor( var_1[0] ), floor( var_1[1] ), 0 );
var_6 = var_1 - var_5;
var_2 = animscripts\utility::safemod( var_5[0], var_0.width );
var_3 = animscripts\utility::safemod( var_5[1], var_0.height );
var_7 = ( var_2, var_3, 0 );
var_8[0][0] = gettexturesamplefromint( var_0, var_7 );
var_8[0][1] = gettexturesamplefromint( var_0, var_7 + ( 0, 1, 0 ) );
var_8[1][0] = gettexturesamplefromint( var_0, var_7 + ( 1, 0, 0 ) );
var_8[1][1] = gettexturesamplefromint( var_0, var_7 + ( 1, 1, 0 ) );
var_9 = ( var_8[0][0] * ( 1.0 - var_6[0] ) + var_8[1][0] * var_6[0] ) * ( 1.0 - var_6[1] );
var_9 = var_9 + ( var_8[0][1] * ( 1.0 - var_6[0] ) + var_8[1][1] * var_6[0] ) * var_6[1];
return var_9;
}
getperlintexturesample( var_0, var_1 )
{
var_2 = var_1[0] - floor( var_1[0] );
var_3 = var_1[1] - floor( var_1[1] );
var_4 = ( var_2 * var_0.width, var_3 * var_0.height, 0 );
var_1 = ( var_4[0] + var_0.uoff, var_4[1] + var_0.voff, 0 );
var_5 = maps\_perlin_noise::getperlinnoisesample( var_0, var_1[0], var_1[1] ) / 255.0;
return var_5;
}
getdisplacementforvertex( var_0, var_1 )
{
var_2 = 0;
for ( var_3 = 0; var_3 < 3; var_3++ )
{
if ( var_0.amplitude[var_3] > 0 )
{
var_4 = gettransformeduv( var_0, var_1, var_3, var_0.displacement_uvscale );
var_5 = getperlintexturesample( var_0, var_4 );
var_2 = var_2 + ( var_5 * 2.0 - 1.0 ) * var_0.amplitude[var_3];
}
}
return var_2;
}

815
maps/_patrol.gsc Normal file
View File

@ -0,0 +1,815 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
patrol( var_0 )
{
if ( isdefined( self.enemy ) )
return;
self endon( "enemy" );
self endon( "death" );
self endon( "damage" );
self endon( "end_patrol" );
self endon( "dog_attacks_ai" );
waittillframeend;
if ( isdefined( self.script_stealthgroup ) )
[[ level.global_callbacks["_patrol_endon_spotted_flag"] ]]();
thread waittill_combat();
thread waittill_death();
self.goalradius = 32;
self allowedstances( "stand" );
self.disablearrivals = 1;
self.disableexits = 1;
self.allowdeath = 1;
self.script_patroller = 1;
self.oldcombatmode = self.combatmode;
self.combatmode = "no_cover";
maps\_utility::disable_cqbwalk();
if ( isdefined( self.script_moveplaybackrate ) )
{
self.oldmoveplaybackrate = self.moveplaybackrate;
self.moveplaybackrate = self.script_moveplaybackrate;
}
linkpet();
set_patrol_run_anim_array();
var_1["ent"][1] = ::get_target_ents;
var_1["ent"][0] = common_scripts\utility::get_linked_ents;
var_1["node"][1] = ::get_target_nodes;
var_1["node"][0] = ::get_linked_nodes;
var_1["struct"][1] = ::get_target_structs;
var_1["struct"][0] = maps\_utility::get_linked_structs;
var_2["ent"] = maps\_utility::set_goal_ent;
var_2["node"] = maps\_utility::set_goal_node;
var_2["struct"] = maps\_utility::set_goal_ent;
if ( isdefined( var_0 ) )
self.target = var_0;
if ( isdefined( self.target ) )
{
var_3 = 1;
var_4 = get_target_ents();
var_5 = get_target_nodes();
var_6 = get_target_structs();
if ( var_4.size )
{
var_7 = common_scripts\utility::random( var_4 );
var_8 = "ent";
}
else if ( var_5.size )
{
var_7 = common_scripts\utility::random( var_5 );
var_8 = "node";
}
else
{
var_7 = common_scripts\utility::random( var_6 );
var_8 = "struct";
}
}
else
{
var_3 = 0;
var_4 = common_scripts\utility::get_linked_ents();
var_5 = get_linked_nodes();
var_6 = maps\_utility::get_linked_structs();
if ( var_4.size )
{
var_7 = common_scripts\utility::random( var_4 );
var_8 = "ent";
}
else if ( var_5.size )
{
var_7 = common_scripts\utility::random( var_5 );
var_8 = "node";
}
else
{
var_7 = common_scripts\utility::random( var_6 );
var_8 = "struct";
}
}
var_9 = [];
var_9["pause"] = "patrol_idle_";
var_9["turn180"] = common_scripts\utility::ter_op( isdefined( self.patrol_anim_turn180 ), self.patrol_anim_turn180, "patrol_turn180" );
var_9["smoke"] = "patrol_idle_smoke";
var_9["stretch"] = "patrol_idle_stretch";
var_9["checkphone"] = "patrol_idle_checkphone";
var_9["phone"] = "patrol_idle_phone";
var_10 = var_7;
for (;;)
{
while ( isdefined( var_10.patrol_claimed ) )
wait 0.05;
var_7.patrol_claimed = undefined;
var_7 = var_10;
self notify( "release_node" );
var_7.patrol_claimed = 1;
self.last_patrol_goal = var_7;
[[ var_2[var_8] ]]( var_7 );
if ( isdefined( var_7.radius ) && var_7.radius > 0 )
self.goalradius = var_7.radius;
else
self.goalradius = 32;
self waittill( "goal" );
var_7 notify( "trigger", self );
if ( isdefined( var_7.script_flag_set ) )
common_scripts\utility::flag_set( var_7.script_flag_set );
if ( isdefined( var_7.script_ent_flag_set ) )
maps\_utility::ent_flag_set( var_7.script_ent_flag_set );
if ( isdefined( var_7.script_flag_clear ) )
common_scripts\utility::flag_clear( var_7.script_flag_clear );
var_11 = var_7 [[ var_1[var_8][var_3] ]]();
if ( !var_11.size )
{
self notify( "reached_path_end" );
self notify( "_patrol_reached_path_end" );
if ( isalive( self.patrol_pet ) )
self.patrol_pet notify( "master_reached_patrol_end" );
}
var_12 = animscripts\reactions::reactionscheckloop;
var_13 = var_7.script_animation;
var_14 = 1;
var_15 = 0;
if ( isdefined( var_7.script_parameters ) )
{
var_16 = strtok( var_7.script_parameters, " " );
for ( var_17 = 0; var_17 < var_16.size; var_17++ )
{
switch ( var_16[var_17] )
{
case "keep_running":
var_14 = 0;
break;
case "use_node":
var_15 = 1;
break;
case "animset":
var_17 = var_17 + 1;
self.script_animation = var_16[var_17];
if ( self.script_animation == "default" )
{
self.script_animation = undefined;
self.patrol_walk_anim = undefined;
self.patrol_walk_twitch = undefined;
self.patrol_idle_anim = undefined;
}
set_patrol_run_anim_array();
}
}
}
if ( isdefined( var_7.script_moveplaybackrate ) )
self.moveplaybackrate = var_7.script_moveplaybackrate;
if ( isdefined( var_7.script_delay ) && var_7.script_delay > 0.5 || isdefined( var_13 ) || isdefined( var_7.script_flag_wait ) && !common_scripts\utility::flag( var_7.script_flag_wait ) )
{
if ( !isdefined( self.patrol_no_stop_transition ) && var_14 )
patrol_do_stop_transition_anim( var_13, var_12, var_7 );
if ( isdefined( var_7.script_flag_wait ) && !common_scripts\utility::flag( var_7.script_flag_wait ) )
common_scripts\utility::flag_wait( var_7.script_flag_wait );
var_7 maps\_utility::script_delay();
if ( isdefined( var_13 ) )
{
if ( isdefined( var_7.script_faceangles ) )
self orientmode( "face angle", var_7.angles[1] );
self.patrol_script_animation = 1;
var_18 = var_9[var_13];
if ( !isdefined( var_18 ) )
{
if ( isdefined( level.patrol_scriptedanims ) )
var_18 = level.patrol_scriptedanims[var_13];
}
if ( isdefined( var_18 ) )
{
if ( var_13 == "pause" )
{
if ( isdefined( self.patrol_scriptedanim ) && isdefined( self.patrol_scriptedanim[var_13] ) )
var_18 = self.patrol_scriptedanim[var_13][randomint( self.patrol_scriptedanim[var_13].size )];
else
var_18 = var_18 + randomintrange( 1, 6 );
}
if ( var_15 )
{
var_7 maps\_anim::anim_generic_reach( self, var_18 );
var_7 maps\_anim::anim_generic_custom_animmode( self, "gravity", var_18, undefined, var_12 );
}
else
maps\_anim::anim_generic_custom_animmode( self, "gravity", var_18, undefined, var_12 );
}
self.patrol_script_animation = undefined;
}
if ( var_11.size && ( !isdefined( var_13 ) || var_13 != "turn180" ) && var_14 && ( !isdefined( self.skip_start_transition ) || !self.skip_start_transition ) )
patrol_do_start_transition_anim( var_13, var_12 );
}
if ( !var_11.size )
{
if ( isdefined( self.patrol_end_idle ) && !isdefined( var_13 ) )
{
patrol_do_stop_transition_anim( "path_end_idle", var_12, var_7 );
for (;;)
{
var_19 = self.patrol_end_idle[randomint( self.patrol_end_idle.size )];
maps\_anim::anim_generic_custom_animmode( self, "gravity", var_19, undefined, var_12 );
}
}
break;
}
var_10 = common_scripts\utility::random( var_11 );
}
}
patrol_do_stop_transition_anim( var_0, var_1, var_2 )
{
var_3 = self;
var_4 = 0;
if ( isdefined( var_2.script_faceangles ) )
{
var_3 = var_2;
self.noteleport = 1;
var_4 = 1;
}
if ( isdefined( self.patrol_stop ) && isdefined( self.patrol_stop[var_0] ) )
var_3 maps\_anim::anim_generic_custom_animmode( self, "gravity", self.patrol_stop[var_0], undefined, var_1, var_4 );
else if ( isdefined( self.script_animation ) && isdefined( level.scr_anim["generic"]["patrol_stop_" + self.script_animation] ) )
maps\_anim::anim_generic_custom_animmode( self, "gravity", "patrol_stop_" + self.script_animation, undefined, var_1 );
else
var_3 maps\_anim::anim_generic_custom_animmode( self, "gravity", "patrol_stop", undefined, var_1, var_4 );
}
patrol_do_start_transition_anim( var_0, var_1 )
{
if ( isdefined( self.patrol_start ) && isdefined( self.patrol_start[var_0] ) )
maps\_anim::anim_generic_custom_animmode( self, "gravity", self.patrol_start[var_0], undefined, var_1 );
else if ( isdefined( self.script_animation ) && isdefined( level.scr_anim["generic"]["patrol_start_" + self.script_animation] ) )
maps\_anim::anim_generic_custom_animmode( self, "gravity", "patrol_start_" + self.script_animation, undefined, var_1 );
else
maps\_anim::anim_generic_custom_animmode( self, "gravity", "patrol_start", undefined, var_1 );
}
#using_animtree("generic_human");
stand_up_if_necessary()
{
if ( self.a.pose == "crouch" && isdefined( self.a.array ) )
{
var_0 = self.a.array["stance_change"];
if ( isdefined( var_0 ) )
{
self setflaggedanimknoballrestart( "stand_up", var_0, %root, 1 );
animscripts\shared::donotetracks( "stand_up" );
}
}
}
patrol_resume_move_start_func()
{
self endon( "enemy" );
self animmode( "zonly_physics", 0 );
self orientmode( "face current" );
stand_up_if_necessary();
var_0 = level.scr_anim["generic"]["patrol_radio_in_clear"];
self setflaggedanimknoballrestart( "radio", var_0, %root, 1 );
animscripts\shared::donotetracks( "radio" );
turn_180_move_start_func();
}
turn_180_move_start_func()
{
if ( !isdefined( self.pathgoalpos ) )
return;
var_0 = self.pathgoalpos;
var_1 = var_0 - self.origin;
var_1 = ( var_1[0], var_1[1], 0 );
var_2 = lengthsquared( var_1 );
if ( var_2 < 1 )
return;
var_1 = var_1 / sqrt( var_2 );
var_3 = anglestoforward( self.angles );
if ( vectordot( var_3, var_1 ) < -0.5 )
{
self animmode( "zonly_physics", 0 );
self orientmode( "face current" );
stand_up_if_necessary();
var_4 = level.scr_anim["generic"]["patrol_turn180"];
self setflaggedanimknoballrestart( "move", var_4, %root, 1 );
if ( animhasnotetrack( var_4, "code_move" ) )
{
animscripts\shared::donotetracks( "move" );
self orientmode( "face motion" );
self animmode( "none", 0 );
}
animscripts\shared::donotetracks( "move" );
}
}
set_patrol_run_anim_array()
{
if ( isdefined( self.script_animation ) )
{
if ( isdefined( level.scr_anim["generic"]["patrol_walk_" + self.script_animation] ) )
self.patrol_walk_anim = "patrol_walk_" + self.script_animation;
if ( isdefined( level.scr_anim["generic"]["patrol_walk_weights_" + self.script_animation] ) )
self.patrol_walk_twitch = "patrol_walk_weights_" + self.script_animation;
if ( isdefined( level.scr_anim["generic"]["patrol_idle_" + self.script_animation] ) )
self.patrol_idle_anim = "patrol_idle_" + self.script_animation;
}
var_0 = "patrol_walk";
if ( isdefined( self.patrol_walk_anim ) )
var_0 = self.patrol_walk_anim;
var_1 = undefined;
if ( isdefined( self.patrol_walk_twitch ) )
var_1 = self.patrol_walk_twitch;
if ( isdefined( self.script_animation ) )
{
if ( isdefined( level.scr_anim["generic"]["patrol_idle_" + self.script_animation] ) )
maps\_utility::set_generic_idle_anim( "patrol_idle_" + self.script_animation );
}
maps\_utility::set_generic_run_anim_array( var_0, var_1 );
}
waittill_combat_wait()
{
self endon( "end_patrol" );
if ( isdefined( self.patrol_master ) )
self.patrol_master endon( "death" );
self waittill( "enemy" );
}
waittill_death()
{
self waittill( "death" );
if ( !isdefined( self ) )
return;
self notify( "release_node" );
if ( !isdefined( self.last_patrol_goal ) )
return;
self.last_patrol_goal.patrol_claimed = undefined;
}
waittill_combat()
{
self endon( "death" );
waittill_combat_wait();
var_0 = maps\_utility::ent_flag_exist( "_stealth_enabled" ) && maps\_utility::ent_flag( "_stealth_enabled" );
self.script_patroller = 0;
if ( !var_0 )
{
maps\_utility::clear_generic_idle_anim();
self.combatmode = self.oldcombatmode;
maps\_utility::clear_run_anim();
self allowedstances( "stand", "crouch", "prone" );
self.disablearrivals = 0;
self.disableexits = 0;
self stopanimscripted();
self notify( "stop_animmode" );
self.script_nobark = undefined;
self.goalradius = level.default_goalradius;
}
if ( isdefined( self.old_interval ) )
self.interval = self.old_interval;
self.moveplaybackrate = 1;
if ( !isdefined( self ) )
return;
self notify( "release_node" );
if ( !isdefined( self.last_patrol_goal ) )
return;
self.last_patrol_goal.patrol_claimed = undefined;
}
get_target_ents()
{
var_0 = [];
if ( isdefined( self.target ) )
var_0 = getentarray( self.target, "targetname" );
return var_0;
}
get_target_nodes()
{
var_0 = [];
if ( isdefined( self.target ) )
var_0 = getnodearray( self.target, "targetname" );
return var_0;
}
get_target_structs()
{
var_0 = [];
if ( isdefined( self.target ) )
var_0 = common_scripts\utility::getstructarray( self.target, "targetname" );
return var_0;
}
get_linked_nodes()
{
var_0 = [];
if ( isdefined( self.script_linkto ) )
{
var_1 = strtok( self.script_linkto, " " );
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
{
var_3 = getnode( var_1[var_2], "script_linkname" );
if ( isdefined( var_3 ) )
var_0[var_0.size] = var_3;
}
}
return var_0;
}
showclaimed( var_0 )
{
self endon( "release_node" );
}
linkpet()
{
if ( isdefined( self.patrol_pet ) )
{
self.patrol_pet thread pet_patrol();
return;
}
if ( !isdefined( self.script_pet ) )
return;
waittillframeend;
var_0 = getaispeciesarray( self.team, "dog" );
var_1 = undefined;
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
{
if ( !isdefined( var_0[var_2].script_pet ) )
continue;
if ( var_0[var_2].script_pet != self.script_pet )
continue;
var_1 = var_0[var_2];
self.patrol_pet = var_1;
var_1.patrol_master = self;
break;
}
if ( !isdefined( var_1 ) )
return;
var_1 thread pet_patrol();
}
pet_patrol()
{
maps\_utility::spawn_failed( self );
if ( isdefined( self.enemy ) )
return;
self endon( "enemy" );
self endon( "death" );
self endon( "end_patrol" );
if ( isdefined( self.script_stealthgroup ) )
[[ level.global_callbacks["_patrol_endon_spotted_flag"] ]]();
self.patrol_master endon( "death" );
thread waittill_combat();
self.goalradius = 4;
self.allowdeath = 1;
var_0 = pet_patrol_create_positions();
var_1 = vectornormalize( self.origin - self.patrol_master.origin );
var_2 = anglestoright( self.patrol_master.angles );
var_3 = "left";
if ( vectordot( var_1, var_2 ) > 0 )
var_3 = "right";
wait 1;
thread pet_patrol_handle_move_state();
thread pet_patrol_handle_movespeed();
self.old_interval = self.interval;
self.interval = 70;
for (;;)
{
if ( isdefined( self.patrol_master ) && !isdefined( self.patrol_master.patrol_script_animation ) )
{
var_0 = pet_patrol_init_positions( var_0 );
if ( var_3 == "null" )
var_3 = "back";
var_3 = pet_patrol_get_available_origin( var_0, var_3 );
self.patrol_goal_pos = var_0[var_3].origin;
}
else
self.patrol_goal_pos = self.origin;
self setgoalpos( self.patrol_goal_pos );
wait 0.05;
}
}
pet_patrol_create_positions()
{
var_0 = [];
var_1 = spawnstruct();
var_1.options = [];
var_1.options[var_1.options.size] = "right";
var_1.options[var_1.options.size] = "back_right";
var_2 = spawnstruct();
var_2.options = [];
var_2.options[var_2.options.size] = "right";
var_2.options[var_2.options.size] = "back_right";
var_2.options[var_2.options.size] = "back";
var_3 = spawnstruct();
var_3.options = [];
var_3.options[var_3.options.size] = "back_right";
var_3.options[var_3.options.size] = "back_left";
var_3.options[var_3.options.size] = "back";
var_4 = spawnstruct();
var_4.options = [];
var_4.options[var_4.options.size] = "left";
var_4.options[var_4.options.size] = "back_left";
var_4.options[var_4.options.size] = "back";
var_5 = spawnstruct();
var_5.options = [];
var_5.options[var_5.options.size] = "left";
var_5.options[var_5.options.size] = "back_left";
var_6 = spawnstruct();
var_0["right"] = var_1;
var_0["left"] = var_5;
var_0["back_right"] = var_2;
var_0["back_left"] = var_4;
var_0["back"] = var_3;
var_0["null"] = var_6;
return var_0;
}
pet_patrol_init_positions( var_0 )
{
var_1 = vectortoangles( self.patrol_master.last_patrol_goal.origin - self.patrol_master.origin );
var_2 = self.patrol_master.origin;
var_3 = anglestoright( var_1 );
var_4 = anglestoforward( var_1 );
var_0["right"].origin = var_2 + var_3 * 40 + var_4 * 30;
var_0["left"].origin = var_2 + var_3 * -40 + var_4 * 30;
var_0["back_right"].origin = var_2 + var_3 * 32 + var_4 * -16;
var_0["back_left"].origin = var_2 + var_3 * -32 + var_4 * -16;
var_0["back"].origin = var_2 + var_4 * -48;
var_0["null"].origin = self.origin;
var_5 = getarraykeys( var_0 );
for ( var_6 = 0; var_6 < var_5.size; var_6++ )
{
var_7 = var_5[var_6];
var_0[var_7].checked = 0;
var_0[var_7].recursed = 0;
}
return var_0;
}
pet_debug_positions( var_0 )
{
var_1 = getarraykeys( var_0 );
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
{
var_3 = var_1[var_2];
if ( var_3 == "null" )
continue;
}
}
pet_patrol_get_available_origin( var_0, var_1 )
{
var_0[var_1].recursed = 1;
for ( var_2 = 0; var_2 < var_0[var_1].options.size; var_2++ )
{
var_3 = var_0[var_1].options[var_2];
if ( var_0[var_3].checked )
continue;
if ( self maymovetopoint( var_0[var_3].origin ) )
return var_3;
var_0[var_3].checked = 1;
}
for ( var_2 = 0; var_2 < var_0[var_1].options.size; var_2++ )
{
var_3 = var_0[var_1].options[var_2];
if ( var_0[var_3].recursed )
continue;
var_3 = pet_patrol_get_available_origin( var_0, var_3 );
return var_3;
}
return "null";
}
pet_patrol_handle_move_state( var_0 )
{
if ( isdefined( self.enemy ) )
return;
self endon( "enemy" );
self endon( "death" );
self endon( "end_patrol" );
self.patrol_master endon( "death" );
if ( isdefined( self.patrol_master.script_noteworthy ) && self.patrol_master.script_noteworthy == "cqb_patrol" )
{
maps\_utility::set_dog_walk_anim();
return;
}
if ( !isdefined( var_0 ) )
var_0 = 200;
maps\_utility::set_dog_walk_anim();
for (;;)
{
wait 0.1;
var_1 = self.patrol_goal_pos;
var_2 = distancesquared( self.origin, self.patrol_goal_pos );
if ( var_2 > squared( var_0 ) )
{
if ( self.a.movement == "run" )
continue;
maps\_anim::anim_generic_custom_animmode( self, "gravity", "patrol_dog_start" );
maps\_utility::clear_run_anim();
self.script_nobark = 1;
continue;
}
if ( self.a.movement != "walk" )
{
self notify( "stopped_while_patrolling" );
maps\_anim::anim_generic_custom_animmode( self, "gravity", "patrol_dog_stop" );
maps\_utility::set_dog_walk_anim();
}
}
}
pet_patrol_handle_movespeed( var_0, var_1 )
{
if ( isdefined( self.enemy ) )
return;
self endon( "enemy" );
self endon( "death" );
self endon( "end_patrol" );
self.patrol_master endon( "death" );
if ( isdefined( self.patrol_master.script_noteworthy ) && self.patrol_master.script_noteworthy == "cqb_patrol" )
{
for (;;)
{
wait 0.05;
var_2 = self.patrol_goal_pos;
var_3 = distancesquared( self.origin, self.patrol_goal_pos );
if ( var_3 < squared( 16 ) )
{
if ( self.moveplaybackrate > 0.4 )
self.moveplaybackrate = self.moveplaybackrate - 0.05;
continue;
}
if ( var_3 > squared( 48 ) )
{
if ( self.moveplaybackrate < 1.8 )
self.moveplaybackrate = self.moveplaybackrate + 0.05;
continue;
}
self.moveplaybackrate = 1;
}
}
if ( !isdefined( var_0 ) )
var_0 = 16;
if ( !isdefined( var_1 ) )
var_1 = 48;
var_4 = var_0 * var_0;
var_5 = var_1 * var_1;
for (;;)
{
wait 0.05;
var_2 = self.patrol_goal_pos;
var_3 = distancesquared( self.origin, self.patrol_goal_pos );
if ( self.a.movement != "walk" )
{
self.moveplaybackrate = 1;
continue;
}
if ( var_3 < var_4 )
{
if ( self.moveplaybackrate > 0.4 )
self.moveplaybackrate = self.moveplaybackrate - 0.05;
continue;
}
if ( var_3 > var_5 )
{
if ( self.moveplaybackrate < 0.75 )
self.moveplaybackrate = self.moveplaybackrate + 0.05;
continue;
}
self.moveplaybackrate = 0.5;
}
}

39
maps/_patrol_anims.gsc Normal file
View File

@ -0,0 +1,39 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
humans();
dogs();
}
#using_animtree("generic_human");
humans()
{
level.scr_anim["generic"]["patrol_walk"] = %patrol_bored_patrolwalk;
level.scr_anim["generic"]["patrol_walk_twitch"] = %patrol_bored_patrolwalk_twitch;
level.scr_anim["generic"]["patrol_stop"] = %patrol_bored_walk_2_bored;
level.scr_anim["generic"]["patrol_start"] = %patrol_bored_2_walk;
level.scr_anim["generic"]["patrol_turn180"] = %patrol_bored_2_walk_180turn;
level.scr_anim["generic"]["patrol_radio_in_clear"] = %patrolwalk_cold_gunup_transition;
level.scr_anim["generic"]["patrol_idle"] = %patrol_bored_idle;
level.scr_anim["generic"]["patrol_idle_1"] = %patrol_bored_idle;
level.scr_anim["generic"]["patrol_idle_2"] = %patrol_bored_idle_smoke;
level.scr_anim["generic"]["patrol_idle_3"] = %patrol_bored_idle_cellphone;
level.scr_anim["generic"]["patrol_idle_4"] = %patrol_bored_twitch_bug;
level.scr_anim["generic"]["patrol_idle_5"] = %patrol_bored_twitch_checkphone;
level.scr_anim["generic"]["patrol_idle_6"] = %patrol_bored_twitch_stretch;
level.scr_anim["generic"]["patrol_idle_smoke"] = %patrol_bored_idle_smoke;
level.scr_anim["generic"]["patrol_idle_checkphone"] = %patrol_bored_twitch_checkphone;
level.scr_anim["generic"]["patrol_idle_stretch"] = %patrol_bored_twitch_stretch;
level.scr_anim["generic"]["patrol_idle_phone"] = %patrol_bored_idle_cellphone;
}
#using_animtree("dog");
dogs()
{
level.scr_anim["generic"]["patrol_dog_stop"] = %iw6_dog_attackidle_runin_8;
level.scr_anim["generic"]["patrol_dog_start"] = %iw6_dog_attackidle_runout_8;
}

View File

@ -0,0 +1,63 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
humans();
dogs();
}
#using_animtree("generic_human");
humans()
{
level.scr_anim["generic"]["_stealth_patrol_walk_creepwalk"] = %creepwalk_f;
level.scr_anim["generic"]["patrol_walk_creepwalk"][0] = %creepwalk_f;
level.scr_anim["generic"]["patrol_walk_creepwalk"][1] = %creepwalk_twitch_a_1;
level.scr_anim["generic"]["patrol_walk_creepwalk"][2] = %creepwalk_twitch_a_2;
level.scr_anim["generic"]["patrol_walk_creepwalk"][3] = %creepwalk_twitch_a_3;
level.scr_anim["generic"]["patrol_walk_creepwalk"][4] = %creepwalk_twitch_a_4;
level.scr_anim["generic"]["patrol_idle_creepwalk"][0] = %readystand_idle;
var_0 = [ 4, 1, 1, 1, 1 ];
level.scr_anim["generic"]["patrol_walk_weights_creepwalk"] = common_scripts\utility::get_cumulative_weights( var_0 );
level.scr_anim["generic"]["patrol_stop_creepwalk"] = %creepwalk_2_readystand;
level.scr_anim["generic"]["patrol_start_creepwalk"] = %readystand_2_creepwalk;
}
dogs()
{
}
enable_creepwalk()
{
self.script_animation = "creepwalk";
if ( isdefined( self.script_patroller ) && self.script_patroller )
maps\_patrol::set_patrol_run_anim_array();
}
init_creepwalk_archetype()
{
if ( isdefined( anim.archetypes ) && maps\_utility::archetype_exists( "creepwalk" ) )
return;
var_0 = [];
var_0["cover_trans_angles"]["creepwalk"][1] = 45;
var_0["cover_trans_angles"]["creepwalk"][2] = 0;
var_0["cover_trans_angles"]["creepwalk"][3] = -45;
var_0["cover_trans_angles"]["creepwalk"][4] = 90;
var_0["cover_trans_angles"]["creepwalk"][6] = -90;
var_0["cover_trans_angles"]["creepwalk"][8] = 180;
var_0["run"]["straight"] = %creepwalk_f;
var_0["run"]["move_f"] = %creepwalk_f;
var_0["walk"]["straight"] = %creepwalk_f;
var_0["walk"]["move_f"] = %creepwalk_f;
var_0["run"]["straight_twitch"] = [ %creepwalk_twitch_a_1, %creepwalk_twitch_a_2, %creepwalk_twitch_a_3 ];
var_0["flashed"]["flashed"] = [ %creepwalk_flashbang_a, %creepwalk_flashbang_b ];
var_0["run_turn"][2] = [ %creepwalk_turn_90_l, %creepwalk_turn_90_l_aiming ];
var_0["run_turn"][3] = %creepwalk_turn_45_l;
var_0["run_turn"][5] = %creepwalk_turn_45_r;
var_0["run_turn"][6] = [ %creepwalk_turn_90_r, %creepwalk_turn_90_r_aiming ];
maps\_utility::register_archetype( "creepwalk", var_0 );
}

View File

@ -0,0 +1,38 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
humans();
dogs();
}
#using_animtree("generic_human");
humans()
{
level.scr_anim["generic"]["_stealth_patrol_walk_gundown"] = %patrol_bored_gundown_walk1;
level.scr_anim["generic"]["_stealth_look_around_gundown"][0] = %patrol_bored_gundown_alerted_1;
level.scr_anim["generic"]["_stealth_look_around_gundown"][1] = %patrol_bored_gundown_alerted_2;
level.scr_anim["generic"]["patrol_walk_gundown"][0] = %patrol_bored_gundown_walk1;
level.scr_anim["generic"]["patrol_walk_gundown"][1] = %patrol_bored_gundown_walk2;
level.scr_anim["generic"]["patrol_walk_gundown"][2] = %patrol_bored_gundown_walk3;
var_0 = [ 3, 1, 1 ];
level.scr_anim["generic"]["patrol_walk_weights_gundown"] = common_scripts\utility::get_cumulative_weights( var_0 );
level.scr_anim["generic"]["patrol_idle_gundown"][0] = %patrol_bored_gundown_idle;
level.scr_anim["generic"]["patrol_stop_gundown"] = %patrol_bored_gundown_walk2idle;
level.scr_anim["generic"]["patrol_start_gundown"] = %patrol_bored_gundown_idle2walk;
}
dogs()
{
}
enable_gundown()
{
self.script_animation = "gundown";
if ( isdefined( self.script_patroller ) && self.script_patroller )
maps\_patrol::set_patrol_run_anim_array();
}

View File

@ -0,0 +1,27 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
humans();
dogs();
}
#using_animtree("generic_human");
humans()
{
level.scr_anim["generic"]["_stealth_patrol_walk_patroljog"] = %patrol_jog;
level.scr_anim["generic"]["patrol_walk_patroljog"][0] = %patrol_jog;
level.scr_anim["generic"]["patrol_lookup"] = %patrol_jog_look_up_once;
level.scr_anim["generic"]["patrol_orders"] = %patrol_jog_orders_once;
level.scr_anim["generic"]["patrol_360"] = %patrol_jog_360_once;
level.patrol_scriptedanims["patrol_lookup"] = "patrol_lookup";
level.patrol_scriptedanims["patrol_orders"] = "patrol_orders";
level.patrol_scriptedanims["patrol_360"] = "patrol_360";
}
dogs()
{
}

33
maps/_perlin_noise.gsc Normal file
View File

@ -0,0 +1,33 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
getperlinnoisesample( var_0, var_1, var_2 )
{
var_3 = var_1 * var_0.xscale;
var_4 = var_2 * var_0.yscale;
var_5 = var_3 - var_0.xoff;
var_6 = var_4 - var_0.yoff;
var_7 = var_0.refscale;
if ( var_0.tile )
{
var_8 = var_0.octaves;
var_9 = var_0.lacunarity;
var_10 = var_0.gain;
var_11 = ( var_7 - var_4 ) * ( ( var_7 - var_3 ) * perlinnoise2d( var_5, var_6, var_8, var_9, var_10 ) + var_3 * perlinnoise2d( var_5 - var_7, var_6, var_8, var_9, var_10 ) ) + var_4 * ( ( var_7 - var_3 ) * perlinnoise2d( var_5, var_6 - var_7, var_8, var_9, var_10 ) + var_3 * perlinnoise2d( var_5 - var_7, var_6 - var_7, var_8, var_9, var_10 ) );
}
else
var_11 = perlinnoise2d( var_5, var_6, var_0.octaves, var_0.lacunarity, var_0.gain );
var_11 = var_11 - var_0.sum;
var_11 = var_11 * var_0.refsc;
var_11 = var_11 + 127.0;
if ( var_11 < 0.0 )
var_11 = 0.0;
if ( var_11 > 255.0 )
var_11 = 255.0;
return var_11;
}

270
maps/_player_death.gsc Normal file
View File

@ -0,0 +1,270 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
level.player thread player_throwgrenade_timer();
level endon( "new_quote_string" );
level.player waittill( "death", var_0, var_1, var_2, var_3 );
set_deadquote( "" );
setsaveddvar( "ammoCounterHide", 1 );
setsaveddvar( "hud_showstance", 0 );
setsaveddvar( "actionSlotsHide", 1 );
if ( isdefined( var_3 ) )
{
var_4 = level.player.origin - level.player geteye() + ( 0, 0, 35 );
var_5 = spawn( "script_model", level.player.origin + ( 0, 0, var_4[2] ) );
var_5.angles = ( -10, level.player.angles[2], 30 );
var_5 linkto( var_3 );
level.player playerlinkto( var_5 );
}
special_death_hint( var_0, var_1, var_2 );
}
player_throwgrenade_timer()
{
self endon( "death" );
self.lastgrenadetime = 0;
for (;;)
{
while ( !self isthrowinggrenade() )
wait 0.05;
self.lastgrenadetime = gettime();
while ( self isthrowinggrenade() )
wait 0.05;
}
}
special_death_hint( var_0, var_1, var_2 )
{
if ( maps\_utility::is_specialop() )
return;
if ( level.missionfailed )
return;
set_deadquote( "" );
if ( var_1 != "MOD_GRENADE" && var_1 != "MOD_GRENADE_SPLASH" && var_1 != "MOD_SUICIDE" && var_1 != "MOD_EXPLOSIVE" )
return;
if ( level.gameskill >= 2 )
{
if ( !maps\_load::map_is_early_in_the_game() )
return;
}
switch ( var_1 )
{
case "MOD_SUICIDE":
if ( level.player.lastgrenadetime - gettime() > 3500.0 )
return;
thread grenade_death_hint( &"SCRIPT_GRENADE_SUICIDE_LINE1", &"SCRIPT_GRENADE_SUICIDE_LINE2" );
break;
case "MOD_EXPLOSIVE":
if ( level.player destructible_death( var_0 ) )
return;
if ( level.player vehicle_death( var_0 ) )
return;
if ( level.player exploding_barrel_death( var_0 ) )
return;
break;
case "MOD_GRENADE_SPLASH":
case "MOD_GRENADE":
if ( isdefined( var_2 ) && !isweapondetonationtimed( var_2 ) )
return;
set_deadquote( "@SCRIPT_GRENADE_DEATH" );
thread grenade_death_indicator_hud();
break;
default:
break;
}
}
vehicle_death( var_0 )
{
if ( !isdefined( var_0 ) )
return 0;
if ( var_0.code_classname != "script_vehicle" )
return 0;
level notify( "new_quote_string" );
set_deadquote( "@SCRIPT_EXPLODING_VEHICLE_DEATH" );
thread set_death_icon( "hud_burningcaricon", 96, 96 );
return 1;
}
destructible_death( var_0 )
{
if ( !isdefined( var_0 ) )
return 0;
if ( !isdefined( var_0.destructible_type ) )
return 0;
level notify( "new_quote_string" );
if ( issubstr( var_0.destructible_type, "vehicle" ) )
{
set_deadquote( "@SCRIPT_EXPLODING_VEHICLE_DEATH" );
thread set_death_icon( "hud_burningcaricon", 96, 96 );
}
else
{
set_deadquote( "@SCRIPT_EXPLODING_DESTRUCTIBLE_DEATH" );
thread set_death_icon( "hud_destructibledeathicon", 96, 96 );
}
return 1;
}
exploding_barrel_death( var_0 )
{
if ( isdefined( level.lastexplodingbarrel ) )
{
if ( gettime() != level.lastexplodingbarrel["time"] )
return 0;
var_1 = distance( self.origin, level.lastexplodingbarrel["origin"] );
if ( var_1 > level.lastexplodingbarrel["radius"] )
return 0;
level notify( "new_quote_string" );
set_deadquote( "@SCRIPT_EXPLODING_BARREL_DEATH" );
thread set_death_icon( "hud_burningbarrelicon", 64, 64 );
return 1;
}
return 0;
}
set_deadquote( var_0 )
{
setdvar( "ui_deadquote", var_0 );
}
deadquote_recently_used( var_0 )
{
if ( var_0 == getdvar( "ui_deadquote_v1" ) )
return 1;
if ( var_0 == getdvar( "ui_deadquote_v2" ) )
return 1;
if ( var_0 == getdvar( "ui_deadquote_v3" ) )
return 1;
return 0;
}
lookupdeathquote( var_0 )
{
var_1 = tablelookup( "sp/deathQuoteTable.csv", 0, var_0, 1 );
if ( tolower( var_1[0] ) != tolower( "@" ) )
var_1 = "@" + var_1;
return var_1;
}
grenade_death_hint( var_0, var_1 )
{
level.player.failingmission = 1;
set_deadquote( "" );
wait 1.5;
var_2 = newhudelem();
var_2.elemtype = "font";
var_2.font = "default";
var_2.fontscale = 1.5;
var_2.x = 0;
var_2.y = -30;
var_2.alignx = "center";
var_2.aligny = "middle";
var_2.horzalign = "center";
var_2.vertalign = "middle";
var_2 settext( var_0 );
var_2.foreground = 1;
var_2.alpha = 0;
var_2 fadeovertime( 1 );
var_2.alpha = 1;
if ( isdefined( var_1 ) )
{
var_2 = newhudelem();
var_2.elemtype = "font";
var_2.font = "default";
var_2.fontscale = 1.5;
var_2.x = 0;
var_2.y = -25 + level.fontheight * var_2.fontscale;
var_2.alignx = "center";
var_2.aligny = "middle";
var_2.horzalign = "center";
var_2.vertalign = "middle";
var_2 settext( var_1 );
var_2.foreground = 1;
var_2.alpha = 0;
var_2 fadeovertime( 1 );
var_2.alpha = 1;
}
}
grenade_death_indicator_hud()
{
wait 1.5;
var_0 = newhudelem();
var_0.x = 0;
var_0.y = 68;
var_0 setshader( "hud_grenadeicon", 50, 50 );
var_0.alignx = "center";
var_0.aligny = "middle";
var_0.horzalign = "center";
var_0.vertalign = "middle";
var_0.foreground = 1;
var_0.alpha = 0;
var_0 fadeovertime( 1 );
var_0.alpha = 1;
var_0 = newhudelem();
var_0.x = 0;
var_0.y = 25;
var_0 setshader( "hud_grenadepointer", 50, 25 );
var_0.alignx = "center";
var_0.aligny = "middle";
var_0.horzalign = "center";
var_0.vertalign = "middle";
var_0.foreground = 1;
var_0.alpha = 0;
var_0 fadeovertime( 1 );
var_0.alpha = 1;
}
set_death_icon( var_0, var_1, var_2, var_3 )
{
if ( !isdefined( var_3 ) )
var_3 = 1.5;
wait( var_3 );
var_4 = newhudelem();
var_4.x = 0;
var_4.y = 40;
var_4 setshader( var_0, var_1, var_2 );
var_4.alignx = "center";
var_4.aligny = "middle";
var_4.horzalign = "center";
var_4.vertalign = "middle";
var_4.foreground = 1;
var_4.alpha = 0;
var_4 fadeovertime( 1 );
var_4.alpha = 1;
}

383
maps/_player_limp.gsc Normal file
View File

@ -0,0 +1,383 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_player_limp()
{
precacheshellshock( "player_limp" );
precacheshader( "black" );
}
init_default_limp()
{
level.player_limp = [];
level.player_limp["pitch"]["min"] = 2;
level.player_limp["pitch"]["max"] = 5;
level.player_limp["yaw"]["min"] = -8;
level.player_limp["yaw"]["max"] = 5;
level.player_limp["roll"]["min"] = 3;
level.player_limp["roll"]["max"] = 5;
}
set_custom_limp( var_0, var_1, var_2 )
{
if ( isdefined( var_0 ) )
{
level.player_limp["pitch"]["min"] = var_0["min"];
level.player_limp["pitch"]["max"] = var_0["max"];
}
if ( isdefined( var_1 ) )
{
level.player_limp["yaw"]["min"] = var_1["min"];
level.player_limp["yaw"]["max"] = var_1["max"];
}
if ( isdefined( var_2 ) )
{
level.player_limp["roll"]["min"] = var_2["min"];
level.player_limp["roll"]["max"] = var_2["max"];
}
}
reset_default_limp( var_0, var_1, var_2 )
{
if ( !isdefined( var_0 ) && !isdefined( var_1 ) && !isdefined( var_2 ) )
{
level.player_limp["pitch"]["min"] = 2;
level.player_limp["pitch"]["max"] = 5;
level.player_limp["yaw"]["min"] = -8;
level.player_limp["yaw"]["max"] = 5;
level.player_limp["roll"]["min"] = 3;
level.player_limp["roll"]["max"] = 5;
return;
}
if ( isdefined( var_0 ) )
{
level.player_limp["pitch"]["min"] = 2;
level.player_limp["pitch"]["max"] = 5;
}
if ( isdefined( var_1 ) )
{
level.player_limp["yaw"]["min"] = -8;
level.player_limp["yaw"]["max"] = 5;
}
if ( isdefined( var_2 ) )
{
level.player_limp["roll"]["min"] = 3;
level.player_limp["roll"]["max"] = 5;
}
}
enable_limp( var_0, var_1 )
{
if ( !maps\_utility::ent_flag_exist( "fall" ) )
{
maps\_utility::ent_flag_init( "fall" );
maps\_utility::ent_flag_init( "collapse" );
}
if ( !isdefined( level.player_limp ) )
init_default_limp();
self.limp = 1;
self.sprinting = undefined;
self.allow_fall = 1;
self.limp_strength = 1.0;
level.default_heartbeat_rate = 0.75;
create_ground_ref_ent();
level.originalvisionset = self.vision_set_transition_ent.vision_set;
if ( !isdefined( var_0 ) )
var_0 = 75;
maps\_utility::player_speed_percent( var_0, 0.05 );
self.player_speed = var_0;
thread limp();
if ( isdefined( var_1 ) )
thread fade_limp( var_1 );
}
disable_limp( var_0, var_1 )
{
self notify( "stop_limp" );
self notify( "stop_random_blur" );
self fadeoutshellshock();
if ( !isdefined( var_1 ) )
var_1 = 0;
if ( isdefined( var_0 ) )
{
self playersetgroundreferenceent( undefined );
setsaveddvar( "player_sprintUnlimited", "0" );
self notify( "stop_limp_forgood" );
}
else
{
var_2 = randomfloatrange( 0.65, 1.25 );
var_3 = adjust_angles_to_player( ( 0, 0, 0 ) );
self.ground_ref_ent rotateto( var_3, var_2, 0, var_2 / 2 );
self.ground_ref_ent waittill( "rotatedone" );
}
level.player maps\_utility::vision_set_fog_changes( level.originalvisionset, 0 );
setblur( 0, randomfloatrange( 0.5, 0.75 ) );
self allowstand( 1 );
self allowcrouch( 1 );
self allowprone( 1 );
self allowsprint( 1 );
self allowjump( 1 );
}
fade_limp( var_0 )
{
self endon( "stop_limp" );
wait( var_0 );
thread disable_limp();
}
limp( var_0 )
{
self endon( "stop_limp" );
self shellshock( "player_limp", 9999 );
self allowsprint( 0 );
self allowjump( 0 );
thread player_random_blur();
thread player_hurt_sounds();
level waittill( "blah blah blah" );
var_1 = 0;
var_2 = self.vision_set_transition_ent.vision_set;
for (;;)
{
if ( self playerads() > 0.3 )
{
wait 0.05;
continue;
}
var_3 = level.player getstance();
if ( var_3 == "crouch" || var_3 == "prone" )
{
wait 0.05;
continue;
}
var_4 = self getvelocity();
var_5 = abs( var_4[0] ) + abs( var_4[1] );
if ( var_5 < 10 )
{
wait 0.05;
continue;
}
var_6 = var_5 / self.player_speed;
var_7 = randomfloatrange( level.player_limp["pitch"]["min"], level.player_limp["pitch"]["max"] );
if ( randomint( 100 ) < 20 )
var_7 = var_7 * 1.5;
var_8 = randomfloatrange( level.player_limp["roll"]["min"], level.player_limp["roll"]["max"] );
var_9 = randomfloatrange( level.player_limp["yaw"]["min"], level.player_limp["yaw"]["max"] );
var_10 = ( var_7, var_9, var_8 );
var_10 = var_10 * var_6;
var_10 = var_10 * self.limp_strength;
var_11 = randomfloatrange( 0.15, 0.45 );
var_12 = randomfloatrange( 0.65, 1.25 );
if ( self.vision_set_transition_ent.vision_set != "aftermath_pain" )
var_2 = self.vision_set_transition_ent.vision_set;
thread maps\_utility::vision_set_fog_changes( "aftermath_pain", 3 );
thread stumble( var_10, var_11, var_12 );
wait( var_11 );
thread maps\_utility::vision_set_fog_changes( var_2, var_12 );
self waittill( "recovered" );
}
}
stumble( var_0, var_1, var_2, var_3 )
{
self endon( "stop_stumble" );
self endon( "stop_limp" );
if ( maps\_utility::ent_flag( "collapse" ) )
return;
var_0 = adjust_angles_to_player( var_0 );
self notify( "stumble" );
create_ground_ref_ent();
self.ground_ref_ent rotateto( var_0, var_1, var_1 / 4 * 3, var_1 / 4 );
self.ground_ref_ent waittill( "rotatedone" );
var_4 = ( randomfloat( 4 ) - 4, randomfloat( 5 ), 0 );
var_4 = adjust_angles_to_player( var_4 );
self.ground_ref_ent rotateto( var_4, var_2, 0, var_2 / 2 );
self.ground_ref_ent waittill( "rotatedone" );
if ( !isdefined( var_3 ) )
self notify( "recovered" );
}
player_random_sway()
{
self endon( "stop_random_sway" );
for (;;)
{
var_0 = self getvelocity();
if ( var_0 > 0 )
{
wait 0.05;
continue;
}
wait 0.05;
}
}
player_random_blur()
{
self endon( "dying" );
self endon( "stop_random_blur" );
for (;;)
{
wait 0.05;
if ( randomint( 100 ) > 10 )
continue;
var_0 = randomint( 3 ) + 4;
var_1 = randomfloatrange( 0.1, 0.3 );
var_2 = randomfloatrange( 0.3, 1 );
setblur( var_0 * 1.2, var_1 );
wait( var_1 );
setblur( 0, var_2 );
wait( var_2 );
wait( randomfloatrange( 0, 1.5 ) );
common_scripts\utility::waittill_notify_or_timeout( "blur", 5 );
}
}
player_hurt_sounds()
{
self endon( "stop_limp" );
for (;;)
{
if ( player_playing_hurt_sounds() )
{
wait 0.05;
continue;
}
self notify( "blur" );
common_scripts\utility::play_sound_in_space( "breathing_limp_start" );
common_scripts\utility::play_sound_in_space( "breathing_limp_better" );
wait( randomfloatrange( 0, 1 ) );
common_scripts\utility::waittill_notify_or_timeout( "stumble", randomintrange( 5, 7 ) );
}
}
player_heartbeat()
{
self endon( "stop_limp" );
level.player_heartbeat_rate = 0.75;
for (;;)
{
common_scripts\utility::play_sound_in_space( "breathing_limp_heartbeat" );
wait( level.player_heartbeat_rate );
}
}
set_player_hearbeat_rate( var_0 )
{
if ( !isdefined( var_0 ) || isstring( var_0 ) )
level.player_heartbeat_rate = 0.75;
else
level.player_heartbeat_rate = var_0;
}
player_playing_hurt_sounds()
{
if ( level.player.health < 50 )
return 1;
else
return 0;
}
player_jump_punishment()
{
self endon( "stop_limp_forgood" );
wait 1;
for (;;)
{
wait 0.05;
if ( self isonground() )
continue;
wait 0.2;
if ( self isonground() )
continue;
for (;;)
{
if ( self isonground() )
break;
else
wait 0.05;
}
self notify( "stop_stumble" );
wait 0.2;
limp();
self notify( "start_limp" );
}
}
recover()
{
var_0 = adjust_angles_to_player( ( -5, -5, 0 ) );
self.ground_ref_ent rotateto( var_0, 0.4, 0.4, 0 );
self.ground_ref_ent waittill( "rotatedone" );
var_0 = adjust_angles_to_player( ( -15, -20, 0 ) );
self.ground_ref_ent rotateto( var_0, 1, 0, 1 );
self.ground_ref_ent waittill( "rotatedone" );
var_0 = adjust_angles_to_player( ( 5, 5, 0 ) );
self.ground_ref_ent rotateto( var_0, 0.9, 0.7, 0.1 );
self.ground_ref_ent waittill( "rotatedone" );
self.ground_ref_ent rotateto( ( 0, 0, 0 ), 1, 0.2, 0.8 );
}
adjust_angles_to_player( var_0 )
{
var_1 = var_0[0];
var_2 = var_0[2];
var_3 = anglestoright( self.angles );
var_4 = anglestoforward( self.angles );
var_5 = ( var_3[0], 0, var_3[1] * -1 );
var_6 = ( var_4[0], 0, var_4[1] * -1 );
var_7 = var_5 * var_1;
var_7 = var_7 + var_6 * var_2;
return var_7 + ( 0, var_0[1], 0 );
}
create_ground_ref_ent()
{
if ( isdefined( self.ground_ref_ent ) )
return;
self.ground_ref_ent = spawn( "script_model", ( 0, 0, 0 ) );
self playersetgroundreferenceent( self.ground_ref_ent );
}

79
maps/_player_rig.gsc Normal file
View File

@ -0,0 +1,79 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
#using_animtree("player");
init_player_rig( var_0, var_1 )
{
if ( isdefined( var_0 ) )
precachemodel( var_0 );
if ( isdefined( var_1 ) )
precachemodel( var_1 );
if ( isdefined( var_0 ) )
{
level.scr_animtree["player_rig"] = #animtree;
level.scr_model["player_rig"] = var_0;
}
if ( isdefined( var_1 ) )
{
level.scr_animtree["player_legs"] = #animtree;
level.scr_model["player_legs"] = var_1;
}
}
get_player_rig()
{
if ( !isdefined( level.player_rig ) )
{
level.player_rig = maps\_utility::spawn_anim_model( "player_rig" );
level.player_rig.origin = level.player.origin;
level.player_rig.angles = level.player.angles;
}
return level.player_rig;
}
get_player_legs()
{
if ( !isdefined( level.player_legs ) )
{
level.player_legs = maps\_utility::spawn_anim_model( "player_legs" );
level.player_legs.origin = level.player.origin;
level.player_legs.angles = level.player.angles;
}
return level.player_legs;
}
link_player_to_arms( var_0, var_1, var_2, var_3 )
{
if ( !isdefined( var_0 ) )
var_0 = 30;
if ( !isdefined( var_1 ) )
var_1 = 30;
if ( !isdefined( var_2 ) )
var_2 = 30;
if ( !isdefined( var_3 ) )
var_3 = 30;
var_4 = get_player_rig();
var_4 show();
level.player playerlinktoabsolute( var_4, "tag_player" );
level.player playerlinktodelta( var_4, "tag_player", 1, var_0, var_1, var_2, var_3, 1 );
}
blend_player_to_arms( var_0 )
{
if ( !isdefined( var_0 ) )
var_0 = 0.7;
var_1 = get_player_rig();
var_1 show();
level.player playerlinktoblend( var_1, "tag_player", var_0 );
}

284
maps/_player_stats.gsc Normal file
View File

@ -0,0 +1,284 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_stats()
{
self.stats["kills"] = 0;
self.stats["kills_melee"] = 0;
self.stats["kills_explosives"] = 0;
self.stats["kills_juggernaut"] = 0;
self.stats["kills_vehicle"] = 0;
self.stats["kills_sentry"] = 0;
self.stats["headshots"] = 0;
self.stats["shots_fired"] = 0;
self.stats["shots_hit"] = 0;
self.stats["weapon"] = [];
thread shots_fired_recorder();
}
was_headshot()
{
if ( isdefined( self.died_of_headshot ) && self.died_of_headshot )
return 1;
if ( !isdefined( self.damagelocation ) )
return 0;
return self.damagelocation == "helmet" || self.damagelocation == "head" || self.damagelocation == "neck";
}
register_kill( var_0, var_1, var_2, var_3 )
{
var_4 = self;
if ( isdefined( self.owner ) )
var_4 = self.owner;
if ( !isplayer( var_4 ) )
{
if ( isdefined( level.pmc_match ) && level.pmc_match )
var_4 = level.players[randomint( level.players.size )];
}
if ( !isplayer( var_4 ) )
return;
if ( isdefined( level.skip_pilot_kill_count ) && isdefined( var_0.drivingvehicle ) && var_0.drivingvehicle )
return;
var_4.stats["kills"]++;
var_4 career_stat_increment( "kills", 1 );
if ( maps\_utility::is_specialop() )
level notify( "specops_player_kill", var_4, var_0, var_2, var_3 );
if ( isdefined( var_0 ) )
{
if ( var_0 was_headshot() )
{
var_4.stats["headshots"]++;
var_4 career_stat_increment( "headshots", 1 );
}
if ( isdefined( var_0.juggernaut ) )
{
var_4.stats["kills_juggernaut"]++;
var_4 career_stat_increment( "kills_juggernaut", 1 );
}
if ( isdefined( var_0.issentrygun ) )
var_4.stats["kills_sentry"]++;
if ( var_0.code_classname == "script_vehicle" )
{
var_4.stats["kills_vehicle"]++;
if ( isdefined( var_0.riders ) )
{
foreach ( var_6 in var_0.riders )
{
if ( isdefined( var_6 ) )
var_4 register_kill( var_6, var_1, var_2, var_3 );
}
}
}
}
if ( cause_is_explosive( var_1 ) )
var_4.stats["kills_explosives"]++;
if ( !isdefined( var_2 ) )
var_2 = var_4 getcurrentweapon();
if ( issubstr( tolower( var_1 ), "melee" ) )
{
var_4.stats["kills_melee"]++;
if ( weaponinventorytype( var_2 ) == "primary" )
return;
}
if ( var_4 is_new_weapon( var_2 ) )
var_4 register_new_weapon( var_2 );
var_4.stats["weapon"][var_2].kills++;
}
career_stat_increment( var_0, var_1 )
{
if ( !maps\_utility::is_specialop() )
return;
var_2 = int( self getplayerdata( "career", var_0 ) ) + var_1;
self setplayerdata( "career", var_0, var_2 );
}
register_shot_hit()
{
if ( !isplayer( self ) )
return;
if ( isdefined( self.registeringshothit ) )
return;
self.registeringshothit = 1;
self.stats["shots_hit"]++;
career_stat_increment( "bullets_hit", 1 );
var_0 = self getcurrentweapon();
if ( is_new_weapon( var_0 ) )
register_new_weapon( var_0 );
self.stats["weapon"][var_0].shots_hit++;
waittillframeend;
self.registeringshothit = undefined;
}
shots_fired_recorder()
{
self endon( "death" );
for (;;)
{
self waittill( "weapon_fired" );
var_0 = self getcurrentweapon();
if ( !isdefined( var_0 ) || !maps\_utility::isprimaryweapon( var_0 ) )
continue;
self.stats["shots_fired"]++;
career_stat_increment( "bullets_fired", 1 );
if ( is_new_weapon( var_0 ) )
register_new_weapon( var_0 );
self.stats["weapon"][var_0].shots_fired++;
}
}
is_new_weapon( var_0 )
{
if ( isdefined( self.stats["weapon"][var_0] ) )
return 0;
return 1;
}
cause_is_explosive( var_0 )
{
var_0 = tolower( var_0 );
switch ( var_0 )
{
case "splash":
case "mod_explosive":
case "mod_projectile_splash":
case "mod_projectile":
case "mod_grenade_splash":
case "mod_grenade":
return 1;
default:
return 0;
}
return 0;
}
register_new_weapon( var_0 )
{
self.stats["weapon"][var_0] = spawnstruct();
self.stats["weapon"][var_0].name = var_0;
self.stats["weapon"][var_0].shots_fired = 0;
self.stats["weapon"][var_0].shots_hit = 0;
self.stats["weapon"][var_0].kills = 0;
}
set_stat_dvars()
{
var_0 = 1;
foreach ( var_2 in level.players )
{
setdvar( "stats_" + var_0 + "_kills_melee", var_2.stats["kills_melee"] );
setdvar( "stats_" + var_0 + "_kills_juggernaut", var_2.stats["kills_juggernaut"] );
setdvar( "stats_" + var_0 + "_kills_explosives", var_2.stats["kills_explosives"] );
setdvar( "stats_" + var_0 + "_kills_vehicle", var_2.stats["kills_vehicle"] );
setdvar( "stats_" + var_0 + "_kills_sentry", var_2.stats["kills_sentry"] );
var_3 = var_2 get_best_weapons( 5 );
foreach ( var_5 in var_3 )
{
var_5.accuracy = 0;
if ( var_5.shots_fired > 0 )
var_5.accuracy = int( var_5.shots_hit / var_5.shots_fired * 100 );
}
for ( var_7 = 1; var_7 < 6; var_7++ )
{
setdvar( "stats_" + var_0 + "_weapon" + var_7 + "_name", " " );
setdvar( "stats_" + var_0 + "_weapon" + var_7 + "_kills", " " );
setdvar( "stats_" + var_0 + "_weapon" + var_7 + "_shots", " " );
setdvar( "stats_" + var_0 + "_weapon" + var_7 + "_accuracy", " " );
}
for ( var_7 = 0; var_7 < var_3.size; var_7++ )
{
if ( !isdefined( var_3[var_7] ) )
break;
setdvar( "stats_" + var_0 + "_weapon" + ( var_7 + 1 ) + "_name", var_3[var_7].name );
setdvar( "stats_" + var_0 + "_weapon" + ( var_7 + 1 ) + "_kills", var_3[var_7].kills );
setdvar( "stats_" + var_0 + "_weapon" + ( var_7 + 1 ) + "_shots", var_3[var_7].shots_fired );
setdvar( "stats_" + var_0 + "_weapon" + ( var_7 + 1 ) + "_accuracy", var_3[var_7].accuracy + "%" );
}
var_0++;
}
}
get_best_weapons( var_0 )
{
var_1 = [];
for ( var_2 = 0; var_2 < var_0; var_2++ )
var_1[var_2] = get_weapon_with_most_kills( var_1 );
return var_1;
}
get_weapon_with_most_kills( var_0 )
{
if ( !isdefined( var_0 ) )
var_0 = [];
var_1 = undefined;
foreach ( var_3 in self.stats["weapon"] )
{
var_4 = 0;
foreach ( var_6 in var_0 )
{
if ( var_3.name == var_6.name )
{
var_4 = 1;
break;
}
}
if ( var_4 )
continue;
if ( !isdefined( var_1 ) )
{
var_1 = var_3;
continue;
}
if ( var_3.kills > var_1.kills )
var_1 = var_3;
}
return var_1;
}

218
maps/_props.gsc Normal file
View File

@ -0,0 +1,218 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
prop_notetrack_exist( var_0, var_1 )
{
if ( !isdefined( level.prop_notetracks ) )
level.prop_notetracks = [];
if ( !isdefined( level.prop_notetracks[var_0] ) )
level.prop_notetracks[var_0] = [];
if ( isdefined( level.prop_notetracks[var_0][var_1] ) )
return 1;
level.prop_notetracks[var_0][var_1] = 1;
return 0;
}
add_smoking_notetracks( var_0 )
{
if ( prop_notetrack_exist( var_0, "add_smoking_notetracks" ) )
return;
maps\_anim::addnotetrack_customfunction( var_0, "attach cig", ::attach_cig );
maps\_anim::addnotetrack_customfunction( var_0, "detach cig", ::detach_cig );
maps\_anim::addnotetrack_customfunction( var_0, "puff", ::smoke_puff );
maps\_anim::addnotetrack_customfunction( var_0, "exhale", ::smoke_exhale );
level._effect["cigar_glow"] = loadfx( "fx/fire/cigar_glow_far" );
level._effect["cigar_glow_puff"] = loadfx( "fx/fire/cigar_glow_puff" );
level._effect["cigar_smoke_puff"] = loadfx( "fx/smoke/cigarsmoke_puff_far" );
level._effect["cigar_exhale"] = loadfx( "fx/smoke/cigarsmoke_exhale_far" );
level.scr_model["cigar"] = "prop_price_cigar";
}
detach_idle_clip( var_0 )
{
if ( isdefined( var_0.clip ) )
var_0.clip delete();
}
add_sit_load_ak_notetracks( var_0 )
{
if ( prop_notetrack_exist( var_0, "add_cellphone_notetracks" ) )
return;
maps\_anim::addnotetrack_customfunction( var_0, "attach clip left", ::attach_clip );
maps\_anim::addnotetrack_customfunction( var_0, "detach clip left", ::detach_idle_clip );
level.scr_model["clip"] = "weapon_ak47_clip";
}
attach_clip( var_0 )
{
var_0 notify( "new_prop_rotation" );
var_1 = spawn( "script_model", ( 0, 0, 0 ) );
var_1 linkto( var_0, "tag_inhand", ( 0, 0, 0 ), ( 0, 0, 0 ) );
var_1 setmodel( maps\_utility::getmodel( "clip" ) );
var_0.clip = var_1;
thread prop_delete( var_1, var_0 );
}
add_cellphone_notetracks( var_0 )
{
if ( prop_notetrack_exist( var_0, "add_cellphone_notetracks" ) )
return;
maps\_anim::addnotetrack_customfunction( var_0, "attach phone", ::attach_phone );
maps\_anim::addnotetrack_customfunction( var_0, "detach phone", ::detach_phone );
level.scr_model["cellphone"] = "com_cellphone_off";
}
attach_phone( var_0 )
{
var_0 notify( "new_phone_rotation" );
var_1 = spawn( "script_model", ( 0, 0, 0 ) );
var_1 linkto( var_0, "tag_inhand", ( 0, 0, 0 ), ( 0, 0, 0 ) );
var_1 setmodel( maps\_utility::getmodel( "cellphone" ) );
var_0.phone = var_1;
thread prop_delete( var_1, var_0 );
}
detach_phone( var_0 )
{
if ( isdefined( var_0.phone ) )
var_0.phone delete();
}
attach_cig( var_0 )
{
var_0 notify( "new_cigar_rotation" );
var_1 = spawn( "script_model", ( 0, 0, 0 ) );
var_1 linkto( var_0, "tag_inhand", ( 0, 0, 0 ), ( 0, 0, 0 ) );
var_1 setmodel( maps\_utility::getmodel( "cigar" ) );
playfxontag( common_scripts\utility::getfx( "cigar_glow" ), var_1, "tag_cigarglow" );
var_0.cigar = var_1;
thread prop_delete_cig( var_1, var_0 );
}
detach_cig( var_0 )
{
if ( isdefined( var_0.cigar ) )
var_0.cigar thread prop_cig_throw();
}
prop_delete( var_0, var_1 )
{
var_1 notify( "new_prop_rotation" + var_0.model );
var_1 endon( "new_prop_rotation" + var_0.model );
var_0 endon( "death" );
var_1 maps\_utility::add_endon( "new_prop_rotation" + var_0.model );
var_0 maps\_utility::add_endon( "death" );
maps\_utility::add_wait( maps\_utility::waittill_msg, "stop_loop" );
var_1 maps\_utility::add_wait( maps\_utility::waittill_msg, "death" );
maps\_utility::do_wait_any();
var_0 delete();
}
prop_delete_cig( var_0, var_1 )
{
var_1 notify( "new_prop_rotation" + var_0.model );
var_1 endon( "new_prop_rotation" + var_0.model );
var_0 endon( "death" );
var_1 maps\_utility::add_endon( "new_prop_rotation" + var_0.model );
var_0 maps\_utility::add_endon( "death" );
maps\_utility::add_wait( maps\_utility::waittill_msg, "stop_loop" );
var_1 maps\_utility::add_wait( maps\_utility::waittill_msg, "death" );
maps\_utility::do_wait_any();
var_0 thread prop_cig_throw();
}
prop_cig_throw()
{
self endon( "death" );
if ( !isdefined( self ) )
return;
if ( isdefined( self.cig_throwing ) && self.cig_throwing )
return;
self.cig_throwing = 1;
stopfxontag( common_scripts\utility::getfx( "cigar_glow" ), self, "tag_cigarglow" );
var_0 = 3;
var_1 = anglestoforward( self.angles );
self unlink();
self movegravity( var_1 * 100, var_0 );
self rotatevelocity( ( 400, 0, 0 ), var_0, 0, var_0 );
wait( var_0 );
self delete();
}
smoke_puff( var_0 )
{
if ( !isdefined( var_0.cigar ) )
return;
var_0 endon( "death" );
var_0.cigar endon( "death" );
playfxontag( common_scripts\utility::getfx( "cigar_glow_puff" ), var_0.cigar, "tag_cigarglow" );
wait 1;
playfxontag( common_scripts\utility::getfx( "cigar_smoke_puff" ), var_0, "tag_eye" );
}
smoke_exhale( var_0 )
{
if ( !isdefined( var_0.cigar ) )
return;
playfxontag( common_scripts\utility::getfx( "cigar_exhale" ), var_0, "tag_eye" );
}
ghillie_leaves()
{
var_0 = [];
var_0[var_0.size] = "J_MainRoot";
var_0[var_0.size] = "J_CoatFront_LE";
var_0[var_0.size] = "J_Hip_LE";
var_0[var_0.size] = "J_CoatRear_RI";
var_0[var_0.size] = "J_CoatRear_LE";
var_0[var_0.size] = "J_CoatFront_RI";
var_0[var_0.size] = "J_Cheek_RI";
var_0[var_0.size] = "J_Brow_LE";
var_0[var_0.size] = "J_Shoulder_RI";
var_0[var_0.size] = "J_Head";
var_0[var_0.size] = "J_ShoulderRaise_LE";
var_0[var_0.size] = "J_Neck";
var_0[var_0.size] = "J_Clavicle_RI";
var_0[var_0.size] = "J_Ball_LE";
var_0[var_0.size] = "J_Knee_Bulge_LE";
var_0[var_0.size] = "J_Ankle_RI";
var_0[var_0.size] = "J_Ankle_LE";
var_0[var_0.size] = "J_SpineUpper";
var_0[var_0.size] = "J_Knee_RI";
var_0[var_0.size] = "J_Knee_LE";
var_0[var_0.size] = "J_HipTwist_RI";
var_0[var_0.size] = "J_HipTwist_LE";
var_0[var_0.size] = "J_SpineLower";
var_0[var_0.size] = "J_Hip_RI";
var_0[var_0.size] = "J_Elbow_LE";
var_0[var_0.size] = "J_Wrist_RI";
self endon( "death" );
for (;;)
{
while ( self.movemode != "run" )
{
wait 0.2;
continue;
}
playfxontag( level._effect["ghillie_leaves"], self, common_scripts\utility::random( var_0 ) );
wait( randomfloatrange( 0.1, 2.5 ) );
}
}
attach_cig_self()
{
attach_cig( self );
}

390
maps/_radiation.gsc Normal file
View File

@ -0,0 +1,390 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
precachestring( &"SCOUTSNIPER_MRHR" );
precachestring( &"SCRIPT_RADIATION_DEATH" );
precacheshellshock( "radiation_low" );
precacheshellshock( "radiation_med" );
precacheshellshock( "radiation_high" );
foreach ( var_2, var_1 in level.players )
{
var_1.radiation = spawnstruct();
var_1.radiation.super_dose = 0;
var_1.radiation.inside = 0;
var_1 maps\_utility::ent_flag_init( "_radiation_poisoning" );
}
common_scripts\utility::run_thread_on_targetname( "radiation", ::updateradiationtriggers );
common_scripts\utility::run_thread_on_targetname( "super_radiation", ::super_radiation_trigger );
common_scripts\utility::array_thread( level.players, ::updateradiationdosage );
common_scripts\utility::array_thread( level.players, ::updateradiationdosimeter );
common_scripts\utility::array_thread( level.players, ::updateradiationshock );
common_scripts\utility::array_thread( level.players, ::updateradiationblackout );
common_scripts\utility::array_thread( level.players, ::updateradiationsound );
common_scripts\utility::array_thread( level.players, ::updateradiationflag );
common_scripts\utility::array_thread( level.players, ::first_radiation_dialogue );
}
updateradiationtriggers()
{
self.members = 0;
for (;;)
{
self waittill( "trigger", var_0 );
thread updateradiationtrigger_perplayer( var_0 );
}
}
updateradiationtrigger_perplayer( var_0 )
{
if ( var_0.radiation.inside )
return;
var_0.radiation.inside = 1;
var_0.radiation.triggers[var_0.radiation.triggers.size] = self;
while ( var_0 istouching( self ) )
wait 0.05;
var_0.radiation.inside = 0;
var_0.radiation.triggers = common_scripts\utility::array_remove( var_0.radiation.triggers, self );
}
super_radiation_trigger()
{
self waittill( "trigger", var_0 );
var_0.radiation.super_dose = 1;
}
updateradiationdosage()
{
self.radiation.triggers = [];
self.radiation.rate = 0;
self.radiation.ratepercent = 0;
self.radiation.total = 0;
self.radiation.totalpercent = 0;
var_0 = 1;
var_1 = 0;
var_2 = 1100000 / ( 60 * var_0 );
var_3 = 200000;
var_4 = var_2 - var_1;
for (;;)
{
var_5 = [];
for ( var_6 = 0; var_6 < self.radiation.triggers.size; var_6++ )
{
var_7 = self.radiation.triggers[var_6];
var_8 = distance( self.origin, var_7.origin ) - 15;
var_5[var_6] = var_2 - var_2 / var_7.radius * var_8;
}
var_9 = 0;
for ( var_6 = 0; var_6 < var_5.size; var_6++ )
var_9 = var_9 + var_5[var_6];
if ( var_9 < var_1 )
var_9 = var_1;
if ( var_9 > var_2 )
var_9 = var_2;
self.radiation.rate = var_9;
self.radiation.ratepercent = ( var_9 - var_1 ) / var_4 * 100;
if ( self.radiation.super_dose )
{
var_9 = var_2;
self.radiation.ratepercent = 100;
}
if ( self.radiation.ratepercent > 25 )
{
self.radiation.total = self.radiation.total + var_9;
self.radiation.totalpercent = self.radiation.total / var_3 * 100;
}
else if ( self.radiation.ratepercent < 1 && self.radiation.total > 0 )
{
self.radiation.total = self.radiation.total - 1500;
if ( self.radiation.total < 0 )
self.radiation.total = 0;
self.radiation.totalpercent = self.radiation.total / var_3 * 100;
}
wait( var_0 );
}
}
updateradiationshock()
{
var_0 = 1;
for (;;)
{
if ( self.radiation.ratepercent >= 75 )
self shellshock( "radiation_high", 5 );
else if ( self.radiation.ratepercent >= 50 )
self shellshock( "radiation_med", 5 );
else if ( self.radiation.ratepercent > 25 )
self shellshock( "radiation_low", 5 );
wait( var_0 );
}
}
updateradiationsound()
{
thread playradiationsound();
for (;;)
{
if ( self.radiation.ratepercent >= 75 )
self.radiation.sound = "item_geigercouner_level4";
else if ( self.radiation.ratepercent >= 50 )
self.radiation.sound = "item_geigercouner_level3";
else if ( self.radiation.ratepercent >= 25 )
self.radiation.sound = "item_geigercouner_level2";
else if ( self.radiation.ratepercent > 0 )
self.radiation.sound = "item_geigercouner_level1";
else
self.radiation.sound = "none";
wait 0.05;
}
}
updateradiationflag()
{
for (;;)
{
if ( self.radiation.ratepercent > 25 )
maps\_utility::ent_flag_set( "_radiation_poisoning" );
else
maps\_utility::ent_flag_clear( "_radiation_poisoning" );
wait 0.05;
}
}
playradiationsound()
{
wait 0.05;
var_0 = spawn( "script_origin", ( 0, 0, 0 ) );
var_0.origin = self.origin;
var_0.angles = self.angles;
var_0 linkto( self );
var_1 = self.radiation.sound;
for (;;)
{
if ( var_1 != self.radiation.sound )
{
var_0 stoploopsound();
if ( isdefined( self.radiation.sound ) && self.radiation.sound != "none" )
var_0 playloopsound( self.radiation.sound );
}
var_1 = self.radiation.sound;
wait 0.05;
}
}
updateradiationratepercent()
{
var_0 = 0.05;
var_1 = newclienthudelem( self );
var_1.fontscale = 1.2;
var_1.x = 670;
var_1.y = 350;
var_1.alignx = "right";
var_1.label = "";
var_1.alpha = 0;
for (;;)
{
var_1.label = self.radiation.ratepercent;
wait( var_0 );
}
}
updateradiationdosimeter()
{
var_0 = 0.028;
var_1 = 100;
var_2 = 1;
var_3 = var_1 - var_0;
var_4 = self.origin;
var_5 = newclienthudelem( self );
var_5.fontscale = 1.2;
var_5.x = 676;
var_5.y = 360;
var_5.alpha = 0;
var_5.alignx = "right";
var_5.label = &"SCOUTSNIPER_MRHR";
var_5 thread updateradiationdosimetercolor( self );
for (;;)
{
if ( self.radiation.rate <= var_0 )
{
var_6 = randomfloatrange( -0.001, 0.001 );
var_5 setvalue( var_0 + var_6 );
}
else if ( self.radiation.rate > var_1 )
var_5 setvalue( var_1 );
else
var_5 setvalue( self.radiation.rate );
wait( var_2 );
}
}
updateradiationdosimetercolor( var_0 )
{
var_1 = 0.05;
for (;;)
{
var_2 = 1;
var_3 = 0.13;
while ( var_0.radiation.rate >= 100 )
{
if ( var_2 <= 0 || var_2 >= 1 )
var_3 = var_3 * -1;
var_2 = var_2 + var_3;
if ( var_2 <= 0 )
var_2 = 0;
if ( var_2 >= 1 )
var_2 = 1;
self.color = ( 1, var_2, var_2 );
wait( var_1 );
}
self.color = ( 1, 1, 1 );
wait( var_1 );
}
}
updateradiationblackout()
{
level endon( "special_op_terminated" );
self endon( "death" );
var_0 = newclienthudelem( self );
var_0.x = 0;
var_0.y = 0;
var_0 setshader( "black", 640, 480 );
var_0.alignx = "left";
var_0.aligny = "top";
var_0.horzalign = "fullscreen";
var_0.vertalign = "fullscreen";
var_0.alpha = 0;
var_1 = 1;
var_2 = 4;
var_3 = 0.25;
var_4 = 1;
var_5 = 25;
var_6 = 100;
var_7 = 0;
for (;;)
{
while ( self.radiation.totalpercent > 25 && self.radiation.ratepercent > 25 )
{
var_8 = var_6 - var_5;
var_7 = ( self.radiation.totalpercent - var_5 ) / var_8;
if ( var_7 < 0 )
var_7 = 0;
else if ( var_7 > 1 )
var_7 = 1;
var_9 = var_2 - var_1;
var_10 = var_1 + var_9 * ( 1 - var_7 );
var_11 = var_4 - var_3;
var_12 = var_3 + var_11 * var_7;
var_13 = 7.2 * var_12;
var_14 = var_7 * 0.5;
var_15 = 7.2 * var_14;
if ( var_7 == 1 )
break;
var_16 = var_10 / 2;
var_0 fadeinblackout( var_16, var_12, var_13, self );
var_0 fadeoutblackout( var_16, var_14, var_15, self );
wait( var_7 * 0.5 );
}
if ( var_7 == 1 )
break;
if ( var_0.alpha != 0 )
var_0 fadeoutblackout( 1, 0, 0, self );
wait 0.05;
}
var_0 fadeinblackout( 2, 1, 6, self );
thread radiation_kill();
}
radiation_kill()
{
self.specialdamage = 1;
self.specialdeath = 1;
self.radiationdeath = 1;
if ( !maps\_utility::kill_wrapper() )
return;
waittillframeend;
var_0 = &"SCRIPT_RADIATION_DEATH";
setdvar( "ui_deadquote", var_0 );
}
fadeinblackout( var_0, var_1, var_2, var_3 )
{
self fadeovertime( var_0 );
self.alpha = var_1;
var_3 setblurforplayer( var_2, var_0 );
wait( var_0 );
}
fadeoutblackout( var_0, var_1, var_2, var_3 )
{
self fadeovertime( var_0 );
self.alpha = var_1;
var_3 setblurforplayer( var_2, var_0 );
wait( var_0 );
}
first_radiation_dialogue()
{
self endon( "death" );
for (;;)
{
maps\_utility::ent_flag_wait( "_radiation_poisoning" );
if ( level.script == "scoutsniper" || level.script == "co_scoutsniper" )
level thread maps\_utility::function_stack( maps\_utility::radio_dialogue, "scoutsniper_mcm_youdaft" );
level notify( "radiation_warning" );
maps\_utility::ent_flag_waitopen( "_radiation_poisoning" );
wait 10;
}
}

68
maps/_rambo.gsc Normal file
View File

@ -0,0 +1,68 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
#using_animtree("generic_human");
main()
{
if ( isdefined( anim.ramboanims ) )
return;
if ( !isdefined( level.subclass_spawn_functions ) )
level.subclass_spawn_functions = [];
level.subclass_spawn_functions["militia"] = ::enable_militia_behavior;
anim.ramboanims = spawnstruct();
anim.ramboanims.coverleft90 = animscripts\utility::array( %favela_chaotic_cornerl_hop90, %favela_chaotic_cornerl_high90, %favela_chaotic_cornerl_mid90 );
anim.ramboanims.coverleft45 = animscripts\utility::array( %favela_chaotic_cornerl_high45, %favela_chaotic_cornerl_mid45 );
anim.ramboanims.coverleftgrenade = %favela_chaotic_cornerl_grenade;
anim.ramboanims.coverright90 = animscripts\utility::array( %favela_chaotic_cornerr_med90, %favela_chaotic_cornerr_low90, %favela_chaotic_cornerr_high90 );
anim.ramboanims.coverright45 = animscripts\utility::array( %favela_chaotic_cornerr_med45, %favela_chaotic_cornerr_low45, %favela_chaotic_cornerr_high45 );
anim.ramboanims.coverrightgrenade = %favela_chaotic_cornerr_grenade;
anim.ramboanims.coverstand = animscripts\utility::array( %favela_chaotic_standcover_firea, %favela_chaotic_standcover_fireb, %favela_chaotic_standcover_firec );
anim.ramboanims.coverstandfail = animscripts\utility::array( %favela_chaotic_standcover_gunjama, %favela_chaotic_standcover_gunjamb );
anim.ramboanims.coverstandgrenade = animscripts\utility::array( %favela_chaotic_standcover_grenadefirea );
anim.ramboanims.covercrouch = animscripts\utility::array( %favela_chaotic_crouchcover_firea, %favela_chaotic_crouchcover_fireb, %favela_chaotic_crouchcover_firec );
anim.ramboanims.covercrouchfail = animscripts\utility::array( %favela_chaotic_crouchcover_gunjama, %favela_chaotic_crouchcover_gunjamb );
anim.ramboanims.covercrouchgrenade = animscripts\utility::array( %favela_chaotic_crouchcover_grenadefirea );
setrambogrenadeoffsets();
}
setrambogrenadeoffsets()
{
animscripts\combat_utility::addgrenadethrowanimoffset( %favela_chaotic_cornerr_grenade, ( 52.4535, 10.107, 64.2898 ) );
animscripts\combat_utility::addgrenadethrowanimoffset( %favela_chaotic_cornerl_grenade, ( 19.1753, -18.9954, 49.3355 ) );
animscripts\combat_utility::addgrenadethrowanimoffset( %favela_chaotic_standcover_grenadefirea, ( 6.66898, -0.135193, 72.117 ) );
animscripts\combat_utility::addgrenadethrowanimoffset( %favela_chaotic_crouchcover_grenadefirea, ( 4.53614, -10.4574, 59.7186 ) );
}
enable_militia_behavior()
{
if ( self.type == "dog" )
return;
self.neverenablecqb = 1;
self.maxfaceenemydist = 256;
if ( animscripts\combat_utility::islongrangeai() )
return;
if ( animscripts\utility::isshotgun( self.weapon ) )
return;
self.disable_blindfire = undefined;
self.favor_blindfire = 1;
self.rambochance = 0.9;
self.ramboaccuracymult = 1.0;
self.baseaccuracy = 0.75;
self.neversprintforvariation = undefined;
}
disable_militia_behavior()
{
self.favor_blindfire = undefined;
self.rambochance = undefined;
self.neverenablecqb = 0;
self.maxfaceenemydist = 512;
self.ramboaccuracymult = undefined;
}

254
maps/_readystand_anims.gsc Normal file
View File

@ -0,0 +1,254 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
#using_animtree("generic_human");
initreadystand()
{
anim.readystand_anims_inited = 1;
level.scr_anim["generic"]["readystand_idle"][0] = %readystand_idle;
level.scr_anim["generic"]["readystand_idle"][1] = %readystand_idle_twitch_1;
level.scr_anim["generic"]["readystand_idle"][2] = %readystand_idle_twitch_2;
level.scr_anim["generic"]["readystand_idle"][3] = %readystand_idle_twitch_3;
level.scr_anim["generic"]["readystand_idle"][4] = %readystand_idle_twitch_4;
level.scr_anim["generic"]["readystand_trans_2_cqb_1"] = %readystand_trans_2_cqb_1;
level.scr_anim["generic"]["readystand_trans_2_cqb_2"] = %readystand_trans_2_cqb_2;
level.scr_anim["generic"]["readystand_trans_2_cqb_3"] = %readystand_trans_2_cqb_3;
level.scr_anim["generic"]["readystand_trans_2_cqb_4"] = %readystand_trans_2_cqb_4;
level.scr_anim["generic"]["readystand_trans_2_cqb_6"] = %readystand_trans_2_cqb_6;
level.scr_anim["generic"]["readystand_trans_2_cqb_7"] = %readystand_trans_2_cqb_7;
level.scr_anim["generic"]["readystand_trans_2_cqb_8"] = %readystand_trans_2_cqb_8;
level.scr_anim["generic"]["readystand_trans_2_cqb_9"] = %readystand_trans_2_cqb_9;
level.scr_anim["generic"]["readystand_trans_2_run_1"] = %readystand_trans_2_run_1;
level.scr_anim["generic"]["readystand_trans_2_run_2"] = %readystand_trans_2_run_2;
level.scr_anim["generic"]["readystand_trans_2_run_3"] = %readystand_trans_2_run_3;
level.scr_anim["generic"]["readystand_trans_2_run_4"] = %readystand_trans_2_run_4;
level.scr_anim["generic"]["readystand_trans_2_run_6"] = %readystand_trans_2_run_6;
level.scr_anim["generic"]["readystand_trans_2_run_7"] = %readystand_trans_2_run_7;
level.scr_anim["generic"]["readystand_trans_2_run_8"] = %readystand_trans_2_run_8;
level.scr_anim["generic"]["readystand_trans_2_run_9"] = %readystand_trans_2_run_9;
anim.readyanimarray["stand"][0][0] = %readystand_idle;
anim.readyanimarray["stand"][0][1] = %readystand_idle_twitch_1;
anim.readyanimarray["stand"][0][2] = %readystand_idle_twitch_2;
anim.readyanimarray["stand"][0][3] = %readystand_idle_twitch_3;
anim.readyanimarray["stand"][0][4] = %readystand_idle_twitch_4;
anim.readyanimweights["stand"][0][0] = 10;
anim.readyanimweights["stand"][0][1] = 3;
anim.readyanimweights["stand"][0][2] = 3;
anim.readyanimweights["stand"][0][3] = 1;
anim.readyanimweights["stand"][0][4] = 1;
anim.covertrans["exposed_ready_cqb"] = [];
anim.covertrans["exposed_ready_cqb"][1] = %cqb_trans_2_readystand_1;
anim.covertrans["exposed_ready_cqb"][2] = %cqb_trans_2_readystand_2;
anim.covertrans["exposed_ready_cqb"][3] = %cqb_trans_2_readystand_3;
anim.covertrans["exposed_ready_cqb"][4] = %cqb_trans_2_readystand_4;
anim.covertrans["exposed_ready_cqb"][6] = %cqb_trans_2_readystand_6;
anim.covertrans["exposed_ready_cqb"][7] = %cqb_trans_2_readystand_7;
anim.covertrans["exposed_ready_cqb"][8] = %cqb_trans_2_readystand_8;
anim.covertrans["exposed_ready_cqb"][9] = %cqb_trans_2_readystand_9;
anim.covertrans["exposed_ready"] = [];
anim.covertrans["exposed_ready"][1] = %run_trans_2_readystand_1;
anim.covertrans["exposed_ready"][2] = %run_trans_2_readystand_2;
anim.covertrans["exposed_ready"][3] = %run_trans_2_readystand_3;
anim.covertrans["exposed_ready"][4] = %run_trans_2_readystand_4;
anim.covertrans["exposed_ready"][6] = %run_trans_2_readystand_6;
anim.covertrans["exposed_ready"][7] = %run_trans_2_readystand_7;
anim.covertrans["exposed_ready"][8] = %run_trans_2_readystand_8;
anim.covertrans["exposed_ready"][9] = %run_trans_2_readystand_9;
anim.coverexit["exposed_ready_cqb"] = [];
anim.coverexit["exposed_ready_cqb"][1] = %readystand_trans_2_cqb_1;
anim.coverexit["exposed_ready_cqb"][2] = %readystand_trans_2_cqb_2;
anim.coverexit["exposed_ready_cqb"][3] = %readystand_trans_2_cqb_3;
anim.coverexit["exposed_ready_cqb"][4] = %readystand_trans_2_cqb_4;
anim.coverexit["exposed_ready_cqb"][6] = %readystand_trans_2_cqb_6;
anim.coverexit["exposed_ready_cqb"][7] = %readystand_trans_2_cqb_7;
anim.coverexit["exposed_ready_cqb"][8] = %readystand_trans_2_cqb_8;
anim.coverexit["exposed_ready_cqb"][9] = %readystand_trans_2_cqb_9;
anim.coverexit["exposed_ready"] = [];
anim.coverexit["exposed_ready"][1] = %readystand_trans_2_run_1;
anim.coverexit["exposed_ready"][2] = %readystand_trans_2_run_2;
anim.coverexit["exposed_ready"][3] = %readystand_trans_2_run_3;
anim.coverexit["exposed_ready"][4] = %readystand_trans_2_run_4;
anim.coverexit["exposed_ready"][6] = %readystand_trans_2_run_6;
anim.coverexit["exposed_ready"][7] = %readystand_trans_2_run_7;
anim.coverexit["exposed_ready"][8] = %readystand_trans_2_run_8;
anim.coverexit["exposed_ready"][9] = %readystand_trans_2_run_9;
var_0 = [];
var_0[0] = "exposed_ready";
var_0[1] = "exposed_ready_cqb";
for ( var_1 = 1; var_1 <= 6; var_1++ )
{
if ( var_1 == 5 )
continue;
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
{
var_3 = var_0[var_2];
if ( isdefined( anim.covertrans[var_3] ) && isdefined( anim.covertrans[var_3][var_1] ) )
{
anim.covertransdist[var_3][var_1] = getmovedelta( anim.covertrans[var_3][var_1], 0, 1 );
anim.covertransangles[var_3][var_1] = getangledelta( anim.covertrans[var_3][var_1], 0, 1 );
}
if ( isdefined( anim.coverexit[var_3] ) && isdefined( anim.coverexit[var_3][var_1] ) )
{
if ( animhasnotetrack( anim.coverexit[var_3][var_1], "code_move" ) )
var_4 = getnotetracktimes( anim.coverexit[var_3][var_1], "code_move" )[0];
else
var_4 = 1;
anim.coverexitdist[var_3][var_1] = getmovedelta( anim.coverexit[var_3][var_1], 0, var_4 );
anim.coverexitangles[var_3][var_1] = getangledelta( anim.coverexit[var_3][var_1], 0, 1 );
}
}
}
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
{
var_3 = var_0[var_2];
anim.covertranslongestdist[var_3] = 0;
for ( var_1 = 1; var_1 <= 6; var_1++ )
{
if ( var_1 == 5 || !isdefined( anim.covertrans[var_3] ) || !isdefined( anim.covertrans[var_3][var_1] ) )
continue;
var_5 = lengthsquared( anim.covertransdist[var_3][var_1] );
if ( anim.covertranslongestdist[var_3] < var_5 )
anim.covertranslongestdist[var_3] = var_5;
}
anim.covertranslongestdist[var_3] = sqrt( anim.covertranslongestdist[var_3] );
}
if ( !isdefined( anim.longestexposedapproachdist ) )
anim.longestexposedapproachdist = 0;
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
{
var_3 = var_0[var_2];
for ( var_1 = 7; var_1 <= 9; var_1++ )
{
if ( isdefined( anim.covertrans[var_3] ) && isdefined( anim.covertrans[var_3][var_1] ) )
{
anim.covertransdist[var_3][var_1] = getmovedelta( anim.covertrans[var_3][var_1], 0, 1 );
anim.covertransangles[var_3][var_1] = getangledelta( anim.covertrans[var_3][var_1], 0, 1 );
}
if ( isdefined( anim.coverexit[var_3] ) && isdefined( anim.coverexit[var_3][var_1] ) )
{
var_4 = getnotetracktimes( anim.coverexit[var_3][var_1], "code_move" )[0];
anim.coverexitdist[var_3][var_1] = getmovedelta( anim.coverexit[var_3][var_1], 0, var_4 );
anim.coverexitangles[var_3][var_1] = getangledelta( anim.coverexit[var_3][var_1], 0, 1 );
}
}
for ( var_1 = 1; var_1 <= 9; var_1++ )
{
if ( !isdefined( anim.covertrans[var_3] ) || !isdefined( anim.covertrans[var_3][var_1] ) )
continue;
var_6 = length( anim.covertransdist[var_3][var_1] );
if ( var_6 > anim.longestexposedapproachdist )
anim.longestexposedapproachdist = var_6;
}
}
thread create_default_entries();
}
create_default_entries()
{
while ( !isdefined( anim.archetypes ) )
wait 0.1;
var_0 = "exposed_ready";
var_1 = "cover_trans_angles";
anim.archetypes["soldier"][var_1][var_0] = [];
for ( var_2 = 0; var_2 < anim.archetypes["soldier"][var_1]["exposed"].size; var_2++ )
anim.archetypes["soldier"][var_1][var_0][var_2] = anim.archetypes["soldier"][var_1]["exposed"][var_2];
var_1 = "cover_trans_dist";
anim.archetypes["soldier"][var_1][var_0] = [];
for ( var_2 = 0; var_2 < anim.archetypes["soldier"][var_1]["exposed"].size; var_2++ )
anim.archetypes["soldier"][var_1][var_0][var_2] = anim.archetypes["soldier"][var_1]["exposed"][var_2];
var_1 = "cover_exit_angles";
anim.archetypes["soldier"][var_1][var_0] = [];
for ( var_2 = 0; var_2 < anim.archetypes["soldier"][var_1]["exposed"].size; var_2++ )
anim.archetypes["soldier"][var_1][var_0][var_2] = anim.archetypes["soldier"][var_1]["exposed"][var_2];
var_1 = "cover_exit_dist";
anim.archetypes["soldier"][var_1][var_0] = [];
for ( var_2 = 0; var_2 < anim.archetypes["soldier"][var_1]["exposed"].size; var_2++ )
anim.archetypes["soldier"][var_1][var_0][var_2] = anim.archetypes["soldier"][var_1]["exposed"][var_2];
anim.archetypes["soldier"]["cover_trans"][var_0][1] = %run_trans_2_readystand_1;
anim.archetypes["soldier"]["cover_trans"][var_0][2] = %run_trans_2_readystand_2;
anim.archetypes["soldier"]["cover_trans"][var_0][3] = %run_trans_2_readystand_3;
anim.archetypes["soldier"]["cover_trans"][var_0][4] = %run_trans_2_readystand_4;
anim.archetypes["soldier"]["cover_trans"][var_0][6] = %run_trans_2_readystand_6;
anim.archetypes["soldier"]["cover_trans"][var_0][7] = %run_trans_2_readystand_7;
anim.archetypes["soldier"]["cover_trans"][var_0][8] = %run_trans_2_readystand_8;
anim.archetypes["soldier"]["cover_trans"][var_0][9] = %run_trans_2_readystand_9;
anim.archetypes["soldier"]["cover_exit"][var_0] = [];
anim.archetypes["soldier"]["cover_exit"][var_0][1] = %readystand_trans_2_cqb_1;
anim.archetypes["soldier"]["cover_exit"][var_0][2] = %readystand_trans_2_cqb_2;
anim.archetypes["soldier"]["cover_exit"][var_0][3] = %readystand_trans_2_cqb_3;
anim.archetypes["soldier"]["cover_exit"][var_0][4] = %readystand_trans_2_cqb_4;
anim.archetypes["soldier"]["cover_exit"][var_0][6] = %readystand_trans_2_cqb_6;
anim.archetypes["soldier"]["cover_exit"][var_0][7] = %readystand_trans_2_cqb_7;
anim.archetypes["soldier"]["cover_exit"][var_0][8] = %readystand_trans_2_cqb_8;
anim.archetypes["soldier"]["cover_exit"][var_0][9] = %readystand_trans_2_cqb_9;
var_0 = "exposed_ready_cqb";
var_1 = "cover_trans_angles";
anim.archetypes["soldier"][var_1][var_0] = [];
for ( var_2 = 0; var_2 < anim.archetypes["soldier"][var_1]["exposed"].size; var_2++ )
anim.archetypes["soldier"][var_1][var_0][var_2] = anim.archetypes["soldier"][var_1]["exposed"][var_2];
var_1 = "cover_trans_dist";
anim.archetypes["soldier"][var_1][var_0] = [];
for ( var_2 = 0; var_2 < anim.archetypes["soldier"][var_1]["exposed"].size; var_2++ )
anim.archetypes["soldier"][var_1][var_0][var_2] = anim.archetypes["soldier"][var_1]["exposed"][var_2];
var_1 = "cover_exit_angles";
anim.archetypes["soldier"][var_1][var_0] = [];
for ( var_2 = 0; var_2 < anim.archetypes["soldier"][var_1]["exposed"].size; var_2++ )
anim.archetypes["soldier"][var_1][var_0][var_2] = anim.archetypes["soldier"][var_1]["exposed"][var_2];
var_1 = "cover_exit_dist";
anim.archetypes["soldier"][var_1][var_0] = [];
for ( var_2 = 0; var_2 < anim.archetypes["soldier"][var_1]["exposed"].size; var_2++ )
anim.archetypes["soldier"][var_1][var_0][var_2] = anim.archetypes["soldier"][var_1]["exposed"][var_2];
anim.archetypes["soldier"]["cover_trans"][var_0][1] = %cqb_trans_2_readystand_1;
anim.archetypes["soldier"]["cover_trans"][var_0][2] = %cqb_trans_2_readystand_2;
anim.archetypes["soldier"]["cover_trans"][var_0][3] = %cqb_trans_2_readystand_3;
anim.archetypes["soldier"]["cover_trans"][var_0][4] = %cqb_trans_2_readystand_4;
anim.archetypes["soldier"]["cover_trans"][var_0][6] = %cqb_trans_2_readystand_6;
anim.archetypes["soldier"]["cover_trans"][var_0][7] = %cqb_trans_2_readystand_7;
anim.archetypes["soldier"]["cover_trans"][var_0][8] = %cqb_trans_2_readystand_8;
anim.archetypes["soldier"]["cover_trans"][var_0][9] = %cqb_trans_2_readystand_9;
anim.archetypes["soldier"]["cover_exit"][var_0] = [];
anim.archetypes["soldier"]["cover_exit"][var_0][1] = %readystand_trans_2_cqb_1;
anim.archetypes["soldier"]["cover_exit"][var_0][2] = %readystand_trans_2_cqb_2;
anim.archetypes["soldier"]["cover_exit"][var_0][3] = %readystand_trans_2_cqb_3;
anim.archetypes["soldier"]["cover_exit"][var_0][4] = %readystand_trans_2_cqb_4;
anim.archetypes["soldier"]["cover_exit"][var_0][6] = %readystand_trans_2_cqb_6;
anim.archetypes["soldier"]["cover_exit"][var_0][7] = %readystand_trans_2_cqb_7;
anim.archetypes["soldier"]["cover_exit"][var_0][8] = %readystand_trans_2_cqb_8;
anim.archetypes["soldier"]["cover_exit"][var_0][9] = %readystand_trans_2_cqb_9;
}

798
maps/_remoteturret.gsc Normal file
View File

@ -0,0 +1,798 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
precache_cam_names( var_0 )
{
if ( !isdefined( var_0 ) || !isarray( var_0 ) )
return;
level._remoteturret_loc_table = var_0;
var_1 = get_terminals();
foreach ( var_3 in var_1 )
{
var_4 = var_3 common_scripts\utility::get_linked_ents();
foreach ( var_6 in var_4 )
{
if ( isdefined( var_0[var_6.script_startname] ) )
precachestring( var_0[var_6.script_startname] );
}
}
}
init()
{
precacheshader( "uav_crosshair" );
precacheshader( "uav_vertical_meter" );
precacheshader( "uav_horizontal_meter" );
precacheshader( "overlay_grain" );
precacheshader( "uav_arrow_up" );
precacheshader( "uav_arrow_left" );
precacheshader( "ac130_thermal_overlay_bar" );
var_0 = get_terminals();
common_scripts\utility::array_thread( var_0, ::remote_turret_terminal_think );
foreach ( var_2 in level.players )
var_2 maps\_utility::ent_flag_init( "on_remote_turret" );
common_scripts\utility::flag_init( "_remoteturret_manual_getoff" );
common_scripts\utility::flag_init( "_remoteturret_nofade" );
common_scripts\utility::flag_set( "_remoteturret_manual_getoff" );
}
get_terminals()
{
return getentarray( "remote_turret_terminal", "targetname" );
}
remote_turret_terminal_think()
{
var_0 = spawn( "script_model", self.origin );
self.trigger = var_0;
self.lastturretindex = 0;
self._remote_turrets = common_scripts\utility::get_linked_ents();
common_scripts\utility::array_thread( self._remote_turrets, ::setup_turret, self );
var_0.angles = self.angles;
var_0 setmodel( "com_laptop_2_open_obj" );
var_0 makeusable();
var_0 sethintstring( &"PLATFORM_HOLD_TO_USE" );
for (;;)
{
var_0 waittill( "trigger", var_1 );
var_0 common_scripts\utility::trigger_off();
var_1 thread maps\_utility::play_sound_on_entity( "intelligence_pickup" );
var_1 thread remote_turret_loop( self );
var_1 waittill( "get_off_turret" );
var_0 common_scripts\utility::trigger_on();
}
}
remote_turret_loop( var_0 )
{
self endon( "transfer_terminal" );
if ( common_scripts\utility::flag( "_remoteturret_manual_getoff" ) )
self notifyonplayercommand( "get_off_turret", "+stance" );
if ( var_0._remote_turrets.size > 1 )
thread turret_switch_input_loop( var_0 );
thread remote_turret_enable( var_0._remote_turrets[var_0.lastturretindex], var_0 );
thread cancel_on_player_damage();
self waittill( "get_off_turret" );
thread remote_turret_disable( var_0._remote_turrets[var_0.lastturretindex], var_0 );
maps\_utility::ent_flag_waitopen( "on_remote_turret" );
}
turret_switch_input_loop( var_0 )
{
self endon( "no_switching_allowed" );
self endon( "get_off_turret" );
self notifyonplayercommand( "next_turret", "weapnext" );
waittillframeend;
for (;;)
{
self waittill( "next_turret" );
if ( maps\_utility::ent_flag( "on_remote_turret" ) )
remote_turret_next( var_0 );
}
}
setup_turret( var_0 )
{
var_1 = self;
var_1 makeunusable();
var_1.issentrygun = 1;
if ( isdefined( var_1.target ) )
{
var_2 = var_1 common_scripts\utility::get_target_ent();
var_1.last_look_origin = var_2.origin;
}
if ( !isdefined( var_1.leftarc ) )
var_1.leftarc = 70;
if ( !isdefined( var_1.rightarc ) )
var_1.rightarc = 70;
if ( !isdefined( var_1.toparc ) )
var_1.toparc = 60;
if ( !isdefined( var_1.bottomarc ) )
var_1.bottomarc = 60;
var_1 setrightarc( var_1.rightarc );
var_1 setleftarc( var_1.rightarc );
var_1 settoparc( var_1.toparc );
var_1 setbottomarc( var_1.bottomarc );
var_1.terminal = var_0;
var_1.turret = spawnturret( "misc_turret", var_1.origin, var_1.weaponinfo );
var_1.turret.angles = var_1.angles;
var_1.turret setmodel( var_1.model );
var_1.turret hide();
var_1.turret makeunusable();
var_1.turret setdefaultdroppitch( 0 );
}
player_turret_shoot( var_0 )
{
var_0 endon( "stop_use_turret" );
for (;;)
{
while ( !self attackbuttonpressed() )
wait 0.05;
var_0 shootturret();
var_0 notify( "create_badplace" );
wait 0.05;
}
}
player_look_aim( var_0, var_1 )
{
var_0 endon( "stop_use_turret" );
var_2 = getaiarray( "axis" );
var_3 = var_0 gettagorigin( "tag_player" );
var_0 setmode( "manual" );
var_0 settargetentity( var_1 );
for (;;)
{
var_4 = self getplayerangles();
var_5 = anglestoforward( var_4 );
var_6 = var_3 + var_5 * 999999;
var_1.origin = var_6;
var_0.last_look_origin = var_6;
wait 0.1;
}
}
remote_turret_enable( var_0, var_1 )
{
self endon( "get_off_turret" );
var_0.attacker = self;
var_0.owner = self;
var_0 setsentryowner( self );
self freezecontrols( 1 );
self.oldangles = self getplayerangles();
self disableweapons();
holdstancechange( 0 );
rt_fade_out();
self thermalvisionon();
self remotecamerasoundscapeon();
text_titlecreate();
maps\_utility::ent_flag_set( "on_remote_turret" );
huditemshide();
thread turret_activate( var_0, var_1 );
rt_fade_in();
self freezecontrols( 0 );
}
remote_turret_disable( var_0, var_1 )
{
var_0.attacker = undefined;
var_0.owner = undefined;
self setsentryowner( undefined );
maps\_utility::ent_flag_clear( "on_remote_turret" );
if ( !common_scripts\utility::flag( "_remoteturret_nofade" ) )
rt_fade_out();
turret_deactivate( var_0, var_1 );
self enableweapons();
self thermalvisionoff();
self remotecamerasoundscapeoff();
self setplayerangles( self.oldangles );
holdstancechange( 1 );
huditemsshow();
text_titledestroy();
if ( !common_scripts\utility::flag( "_remoteturret_nofade" ) )
rt_fade_in();
}
remote_turret_next( var_0 )
{
maps\_utility::ent_flag_clear( "on_remote_turret" );
self endon( "get_off_turret" );
if ( !common_scripts\utility::flag( "_remoteturret_nofade" ) )
rt_fade_out();
turret_deactivate( var_0._remote_turrets[var_0.lastturretindex], var_0 );
var_0.lastturretindex = var_0.lastturretindex + 1;
var_0.lastturretindex = var_0.lastturretindex % var_0._remote_turrets.size;
thread turret_activate( var_0._remote_turrets[var_0.lastturretindex], var_0 );
if ( !common_scripts\utility::flag( "_remoteturret_nofade" ) )
rt_fade_in();
maps\_utility::ent_flag_set( "on_remote_turret" );
}
turret_activate( var_0, var_1 )
{
if ( isdefined( level._remoteturret_loc_table ) && isdefined( var_0.script_startname ) && isdefined( level._remoteturret_loc_table[var_0.script_startname] ) )
text_titlesettext( level._remoteturret_loc_table[var_0.script_startname] );
else
text_titlesettext( "CAMERA: " + ( var_1.lastturretindex + 1 ) );
var_0 hideonclient( self );
uav_enable_view();
var_2 = common_scripts\utility::spawn_tag_origin();
var_3 = var_0 gettagangles( "tag_origin" );
if ( isdefined( var_0.last_look_origin ) )
var_3 = vectortoangles( var_0.last_look_origin - var_0.origin );
self setplayerangles( ( var_3[0], var_3[1], self.angles[2] ) );
self playerlinkto( var_0, "tag_player", 0, var_0.rightarc * 0.9, var_0.leftarc * 0.9, var_0.toparc * 0.9, var_0.bottomarc * 0.9 );
var_0 turretfireenable();
var_0 makeusable();
var_0 useby( self );
var_0 makeunusable();
self disableturretdismount();
var_2 delete();
}
turret_deactivate( var_0, var_1 )
{
uav_disable_view();
var_0 turretfiredisable();
var_0 stopfiring();
wait 0.1;
self unlink();
self enableturretdismount();
var_0 makeusable();
var_0 useby( self );
var_0 makeunusable();
var_0 notify( "stop_use_turret" );
var_0 showonclient( self );
}
remote_turret_badplace( var_0, var_1 )
{
var_0 endon( "stop_use_turret" );
for (;;)
{
var_0 waittill( "create_badplace" );
var_2 = var_0 gettagorigin( "tag_flash" );
var_3 = var_0 gettagangles( "tag_flash" );
var_4 = var_2 + anglestoforward( var_3 ) * 9999;
var_5 = bullettrace( var_2, var_4, 0 );
badplace_cylinder( "bullet_impact", 1, var_5["position"], 256, 96, "axis" );
wait 1;
}
}
rt_fade_in()
{
if ( level.missionfailed )
return;
level notify( "now_fade_in" );
wait 0.05;
var_0 = get_white_overlay();
var_0 fadeovertime( 0.2 );
var_0.alpha = 0;
wait 0.3;
}
rt_fade_out()
{
var_0 = get_white_overlay();
var_0 fadeovertime( 0.2 );
var_0.alpha = 1;
wait 0.2;
}
get_white_overlay()
{
if ( !isdefined( self.white_overlay ) )
self.white_overlay = maps\_hud_util::create_client_overlay( "white", 0, self );
self.white_overlay.sort = -1;
self.white_overlay.foreground = 0;
return self.white_overlay;
}
huditemshide()
{
if ( level.players.size > 0 )
{
for ( var_0 = 0; var_0 < level.players.size; var_0++ )
{
if ( level.players[var_0] maps\_utility::ent_flag( "on_remote_turret" ) )
setdvar( "ui_remotemissile_playernum", var_0 + 1 );
}
}
else
{
setsaveddvar( "compass", "0" );
setsaveddvar( "ammoCounterHide", "1" );
setsaveddvar( "actionSlotsHide", "1" );
}
}
huditemsshow()
{
if ( level.players.size > 0 )
setdvar( "ui_remotemissile_playernum", 0 );
else
{
setsaveddvar( "compass", "1" );
setsaveddvar( "ammoCounterHide", "0" );
setsaveddvar( "actionSlotsHide", "0" );
}
}
holdstancechange( var_0 )
{
if ( !var_0 )
{
var_1 = self getstance();
if ( var_1 != "prone" )
self allowprone( var_0 );
if ( var_1 != "crouch" )
self allowcrouch( var_0 );
if ( var_1 != "stand" )
{
self allowstand( var_0 );
return;
}
}
else
{
self allowprone( var_0 );
self allowcrouch( var_0 );
self allowstand( var_0 );
}
}
uav_enable_view( var_0, var_1 )
{
level.uav_sort = -5;
level.uav_hud_color = ( 1, 1, 1 );
self.uav_huds = [];
self.uav_huds["static_hud"] = create_hud_static_overlay( var_0 );
self.uav_huds["scanline"] = create_hud_scanline_overlay( var_0 );
self.uav_huds["crosshair"] = create_hud_crosshair( var_0 );
setsaveddvar( "sm_sunsamplesizenear", "1" );
setsaveddvar( "sm_cameraoffset", "3400" );
thread uav_hud_scanline();
}
hud_fade_in_time( var_0, var_1 )
{
if ( !isdefined( var_0 ) )
return 0;
if ( !isdefined( var_1 ) )
var_1 = 1;
self.alpha = 0;
self fadeovertime( var_0 );
self.alpha = var_1;
return 1;
}
create_hud_static_overlay( var_0 )
{
var_1 = maps\_hud_util::create_client_overlay( "overlay_grain", 0.3, self );
var_1.sort = level.uav_sort;
if ( !var_1 hud_fade_in_time( var_0, 0.3 ) )
var_1.alpha = 0.3;
return var_1;
}
create_hud_scanline_overlay( var_0 )
{
var_1 = maps\_hud_util::create_client_overlay( "ac130_thermal_overlay_bar", 1, self );
var_1.x = 0;
var_1.y = 0;
var_1.sort = level.uav_sort + 1;
var_1.horzalign = "fullscreen";
var_1.vertalign = "fullscreen";
if ( !var_1 hud_fade_in_time( var_0, 1 ) )
var_1.alpha = 1;
return var_1;
}
create_hud_horizontal_meter( var_0 )
{
var_1 = newhudelem();
var_1.x = 320;
var_1.y = 40;
var_1.sort = level.uav_sort;
var_1.alignx = "center";
var_1.aligny = "bottom";
var_1.color = level.uav_hud_color;
var_1 setshader( "uav_horizontal_meter", 96, 16 );
var_1 hud_fade_in_time( var_0 );
return var_1;
}
create_hud_vertical_meter( var_0 )
{
var_1 = newhudelem();
var_1.x = 40;
var_1.y = 240;
var_1.sort = level.uav_sort;
var_1.alignx = "right";
var_1.aligny = "middle";
var_1.color = level.uav_hud_color;
var_1 setshader( "uav_vertical_meter", 16, 96 );
var_1 hud_fade_in_time( var_0 );
return var_1;
}
create_hud_crosshair( var_0 )
{
var_1 = maps\_hud_util::createclienticon( "uav_crosshair", 320, 240 );
var_1.sort = level.uav_sort;
var_1.elemtype = "icon";
var_1 maps\_hud_util::setparent( level.uiparent );
var_1 maps\_hud_util::setpoint( "CENTER", undefined, 0, 0 );
var_1 hud_fade_in_time( var_0 );
return var_1;
}
uav_set_target_hud_data( var_0, var_1 )
{
self.uav_huds["lower_right"][var_0].data_value setvalue( var_1 );
}
uav_set_hud_data( var_0, var_1 )
{
self.uav_huds[var_0].data_value setvalue( var_1 );
}
create_hud_upper_left( var_0 )
{
var_1 = [];
var_1["nar"] = [ &"UAV_NAR", "none" ];
var_1["white"] = [ &"UAV_WHT", "none" ];
var_1["rate"] = [ &"UAV_RATE", "none" ];
var_1["angle"] = [ &"UAV_RATIO", "none" ];
var_1["numbers"] = [ &"UAV_ABOVE_TEMP_NUMBERS", "none" ];
var_1["temp"] = [ &"UAV_TEMP", "none" ];
return create_hud_section( var_1, 10, 80, "left", var_0 );
}
create_hud_upper_right( var_0 )
{
var_1 = [];
var_1["acft"] = [ &"UAV_ACFT", "none" ];
var_1["long"] = [ &"UAV_N", "none" ];
var_1["lat"] = [ &"UAV_W", "none" ];
var_1["angle"] = [ &"UAV_HAT", "none" ];
return create_hud_section( var_1, 510, 80, "left", var_0 );
}
create_hud_lower_right( var_0 )
{
var_1 = [];
var_1["long"] = [ &"UAV_N", "none" ];
var_1["lat"] = [ &"UAV_W", "none" ];
var_2 = create_hud_section( var_1, 500, 335, "left", var_0 );
var_1 = [];
var_1["brg"] = [ &"UAV_BRG", "" ];
var_1["rng_m"] = [ &"UAV_RNG", &"UAV_M" ];
var_1["rng_nm"] = [ &"UAV_RNG", &"UAV_NM" ];
var_1["elv"] = [ &"UAV_ELV", &"UAV_F" ];
var_3 = create_hud_section( var_1, 510, 360, "right", var_0 );
foreach ( var_6, var_5 in var_3 )
var_2[var_6] = var_5;
return var_2;
}
create_hud_section( var_0, var_1, var_2, var_3, var_4 )
{
var_5 = [];
var_6 = 10 * level.uav_fontscale;
foreach ( var_10, var_8 in var_0 )
{
var_9 = newhudelem();
var_9.x = var_1;
var_9.y = var_2;
var_9.sort = level.uav_sort;
var_9.alignx = var_3;
var_9.aligny = "middle";
var_9.fontscale = level.uav_fontscale;
var_9.color = level.uav_hud_color;
var_9 settext( var_8[0] );
if ( isdefined( var_8[1] ) )
{
if ( !string_is_valid( var_8[1], "none" ) )
var_9 create_hud_data_value( var_8[1], var_4 );
}
else
var_9 create_hud_data_value( undefined, var_4 );
var_9 hud_fade_in_time( var_4 );
var_5[var_10] = var_9;
var_2 = var_2 + var_6;
}
return var_5;
}
string_is_valid( var_0, var_1 )
{
if ( isstring( var_0 ) )
{
if ( var_0 == var_1 )
return 1;
}
return 0;
}
create_hud_data_value( var_0, var_1 )
{
var_2 = 75;
if ( isdefined( var_0 ) && !string_is_valid( var_0, "" ) )
{
var_3 = newhudelem();
var_3.x = self.x + var_2;
var_3.y = self.y;
var_3.alignx = "right";
var_3.aligny = "middle";
var_3.fontscale = level.uav_fontscale;
var_3.color = level.uav_hud_color;
var_3.sort = level.uav_sort;
var_3 settext( var_0 );
self.data_value_suffix = var_3;
var_4 = 1;
if ( var_0 == &"UAV_NM" )
var_4 = 2;
var_3 hud_fade_in_time( var_1 );
var_2 = var_2 - 10 * var_4;
}
var_5 = newhudelem();
var_5.x = self.x + var_2;
var_5.y = self.y;
var_5.alignx = "right";
var_5.aligny = "middle";
var_5.fontscale = level.uav_fontscale;
var_5.color = level.uav_hud_color;
var_5.sort = level.uav_sort;
var_5 setvalue( 0 );
var_5 hud_fade_in_time( var_1 );
self.data_value = var_5;
}
create_hud_arrow( var_0, var_1 )
{
if ( var_0 == "up" )
{
var_2 = "uav_arrow_up";
var_3 = self.uav_huds["horz_meter"];
var_4 = 320;
var_5 = var_3.y + 10;
var_6 = "center";
var_7 = "top";
}
else
{
var_2 = "uav_arrow_left";
var_3 = self.uav_huds["vert_meter"];
var_4 = var_3.x + 10;
var_5 = 240;
var_6 = "left";
var_7 = "middle";
}
var_8 = newhudelem();
var_8.x = var_4;
var_8.y = var_5;
var_8.alignx = var_6;
var_8.aligny = var_7;
var_8.sort = level.uav_sort;
var_8 setshader( var_2, 16, 16 );
var_8 hud_fade_in_time( var_1 );
var_8 create_hud_arrow_value( var_0, var_1 );
return var_8;
}
create_hud_arrow_value( var_0, var_1 )
{
if ( var_0 == "up" )
{
var_2 = self.x;
var_3 = self.y + 16;
var_4 = "center";
var_5 = "top";
}
else
{
var_2 = self.x + 16;
var_3 = self.y;
var_4 = "left";
var_5 = "middle";
}
var_6 = newhudelem();
var_6.x = var_2;
var_6.y = var_3;
var_6.alignx = var_4;
var_6.aligny = var_5;
var_6.sort = level.uav_sort;
var_6 setvalue( 0 );
var_6 hud_fade_in_time( var_1 );
self.data_value = var_6;
}
uav_disable_view( var_0 )
{
if ( isdefined( self.uav_huds ) )
{
foreach ( var_2 in self.uav_huds )
{
if ( isarray( var_2 ) )
{
foreach ( var_4 in var_2 )
uav_destroy_hud( var_4, var_0 );
var_2 = undefined;
continue;
}
uav_destroy_hud( var_2, var_0 );
}
}
if ( !isdefined( var_0 ) )
var_0 = 0.05;
setsaveddvar( "sm_sunenable", 1.0 );
}
uav_destroy_hud( var_0, var_1 )
{
if ( isdefined( var_0.data_value ) )
var_0.data_value thread uav_destroy_hud_wrapper( var_1 );
if ( isdefined( var_0.data_value_suffix ) )
var_0.data_value_suffix thread uav_destroy_hud_wrapper( var_1 );
var_0 thread uav_destroy_hud_wrapper( var_1 );
}
uav_destroy_hud_wrapper( var_0 )
{
if ( isdefined( var_0 ) )
{
self fadeovertime( var_0 );
self.alpha = 0;
wait( var_0 );
}
if ( isdefined( self ) )
self destroy();
}
text_titlecreate()
{
level.text1 = maps\_hud_util::createclientfontstring( "objective", 2.0 );
level.text1 maps\_hud_util::setpoint( "TOP", undefined, 0, 10 );
}
text_titlesettext( var_0 )
{
level.text1 settext( var_0 );
}
text_titlefadeout()
{
level.text1 fadeovertime( 0.25 );
level.text1.alpha = 0;
}
text_titledestroy()
{
if ( !isdefined( level.text1 ) )
return;
level.text1 destroy();
level.text1 = undefined;
}
cancel_on_player_damage()
{
self endon( "get_off_turret" );
self.took_damage = 0;
common_scripts\utility::waittill_any( "damage", "dtest", "force_out_of_uav" );
self.took_damage = 1;
self notify( "get_off_turret" );
}
uav_hud_scanline()
{
var_0 = self.uav_huds["scanline"];
if ( !isdefined( var_0 ) )
return;
var_0 endon( "death" );
var_1 = 80;
var_2 = 280;
var_3 = 7;
var_4 = 15;
var_5 = -100;
var_6 = 580;
for (;;)
{
var_0.y = var_5;
var_7 = randomintrange( var_1, var_2 );
var_0 setshader( "ac130_thermal_overlay_bar", 640, var_7 );
var_8 = randomfloatrange( var_3, var_4 );
var_0 moveovertime( var_8 );
var_0.y = var_6;
wait( var_8 );
}
}
transfer_to_new_terminal( var_0, var_1 )
{
common_scripts\utility::flag_set( "_remoteturret_nofade" );
maps\_utility::ent_flag_clear( "on_remote_turret" );
self notify( "no_switching_allowed" );
rt_fade_out();
turret_deactivate( var_0 get_active_turret() );
self notify( "transfer_terminal" );
self notify( "get_off_turret" );
text_titledestroy();
thread remote_turret_loop( var_1 );
rt_fade_in();
maps\_utility::ent_flag_set( "on_remote_turret" );
common_scripts\utility::flag_clear( "_remoteturret_nofade" );
}
get_active_turret()
{
return self._remote_turrets[self.lastturretindex];
}

398
maps/_riotshield.gsc Normal file
View File

@ -0,0 +1,398 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_riotshield()
{
if ( isdefined( level.riotshield_initialized ) )
return;
level.riotshield_initialized = 1;
level._effect["riot_shield_dmg"] = loadfx( "fx/misc/riot_shield_dmg" );
if ( !isdefined( level.subclass_spawn_functions ) )
level.subclass_spawn_functions = [];
level.subclass_spawn_functions["riotshield"] = ::subclass_riotshield;
animscripts\riotshield\riotshield::init_riotshield_ai_anims();
}
subclass_riotshield()
{
animscripts\riotshield\riotshield::init_riotshield_ai();
}
riotshield_sprint_on()
{
animscripts\riotshield\riotshield::riotshield_sprint_on();
}
riotshield_fastwalk_on()
{
animscripts\riotshield\riotshield::riotshield_fastwalk_on();
}
riotshield_sprint_off()
{
animscripts\riotshield\riotshield::riotshield_sprint_off();
}
riotshield_fastwalk_off()
{
animscripts\riotshield\riotshield::riotshield_fastwalk_off();
}
riotshield_flee()
{
if ( self.subclass != "riotshield" )
return;
self.combatmode = "cover";
self.goalradius = 2048;
animscripts\riotshield\riotshield::riotshield_init_flee();
var_0 = self findbestcovernode();
if ( isdefined( var_0 ) )
self usecovernode( var_0 );
}
group_create( var_0, var_1, var_2 )
{
var_3 = [];
foreach ( var_5 in var_0 )
{
if ( var_5.combatmode != "no_cover" )
continue;
var_3[var_3.size] = var_5;
}
var_7 = spawnstruct();
foreach ( var_5 in var_3 )
{
if ( isdefined( var_5.group ) && isdefined( var_5.group.ai_array ) )
var_5.group.ai_array = common_scripts\utility::array_remove( var_5.group.ai_array, var_5 );
var_5.group = var_7;
}
var_7.ai_array = var_3;
var_7.fleethreshold = 1;
var_7.spacing = 50;
var_7 thread group_check_deaths();
return var_7;
}
group_initialize_formation( var_0, var_1 )
{
self.ai_array = maps\_utility::array_removedead( self.ai_array );
self.forward = var_0;
if ( isdefined( var_1 ) )
self.spacing = var_1;
foreach ( var_3 in self.ai_array )
{
var_3.goalradius = 25;
var_3.pathenemyfightdist = 128;
var_3.pathenemylookahead = 128;
}
group_sort_by_closest_match();
thread check_group_facing_forward();
}
group_resort_on_deaths()
{
self endon( "break_group" );
if ( self.ai_array.size == 0 )
return;
while ( self.ai_array.size )
{
maps\_utility::waittill_dead( self.ai_array, 1 );
if ( self.group_move_mode != "stopped" )
self waittill( "goal" );
self.ai_array = maps\_utility::array_removedead( self.ai_array );
group_sort_by_closest_match();
}
}
group_sort_by_closest_match( var_0 )
{
if ( self.ai_array.size == 0 )
return;
if ( isdefined( var_0 ) )
self.forward = var_0;
else
var_0 = self.forward;
var_1 = group_center();
var_2 = ( self.forward[1], -1 * self.forward[0], 0 );
var_3 = var_2 * self.spacing;
var_4 = group_left_corner( var_1, var_3 );
var_5 = [];
for ( var_6 = 0; var_6 < self.ai_array.size; var_6++ )
{
if ( isdefined( self.ai_array[var_6] ) )
{
var_5[var_6] = vectordot( var_4 - self.ai_array[var_6].origin, var_2 );
continue;
}
var_5[var_6] = 0;
}
for ( var_6 = 1; var_6 < var_5.size; var_6++ )
{
var_7 = var_5[var_6];
var_8 = self.ai_array[var_6];
for ( var_9 = var_6 - 1; var_9 >= 0; var_9-- )
{
if ( var_7 < var_5[var_9] )
break;
var_5[var_9 + 1] = var_5[var_9];
self.ai_array[var_9 + 1] = self.ai_array[var_9];
}
var_5[var_9 + 1] = var_7;
self.ai_array[var_9 + 1] = var_8;
}
}
group_check_deaths()
{
for (;;)
{
if ( self.fleethreshold > 0 )
{
self.ai_array = maps\_utility::array_removedead( self.ai_array );
if ( self.ai_array.size <= self.fleethreshold )
{
foreach ( var_1 in self.ai_array )
var_1 riotshield_flee();
self notify( "break_group" );
break;
}
}
wait 1;
}
}
group_left_corner( var_0, var_1 )
{
return var_0 - ( self.ai_array.size - 1 ) / 2 * var_1;
}
group_move( var_0, var_1 )
{
self notify( "new_goal_set" );
self.group_move_mode = "moving";
if ( isdefined( var_1 ) )
self.forward = var_1;
else
var_1 = self.forward;
var_2 = ( var_1[1], -1 * var_1[0], 0 );
var_3 = var_2 * self.spacing;
var_4 = group_left_corner( var_0, var_3 );
for ( var_5 = 0; var_5 < self.ai_array.size; var_5++ )
{
var_6 = self.ai_array[var_5];
if ( isdefined( var_6 ) )
var_6 setgoalpos( var_4 );
var_4 = var_4 + var_3;
}
thread check_group_at_goal();
}
check_group_at_goal()
{
self endon( "new_goal_set" );
for (;;)
{
wait 0.5;
var_0 = 0;
foreach ( var_2 in self.ai_array )
{
if ( isdefined( var_2 ) && isalive( var_2 ) )
var_0++;
}
var_4 = 0;
for ( var_5 = 0; var_5 < self.ai_array.size; var_5++ )
{
var_2 = self.ai_array[var_5];
if ( isdefined( var_2 ) )
{
var_6 = max( 45, var_2.goalradius );
if ( distancesquared( var_2.origin, var_2.goalpos ) < squared( var_6 ) )
var_4++;
}
}
if ( var_4 == var_0 )
{
self notify( "goal" );
self.group_move_mode = "stopped";
}
}
}
check_group_facing_forward()
{
self endon( "break_group" );
for (;;)
{
wait 0.5;
var_0 = 0;
foreach ( var_2 in self.ai_array )
{
if ( isdefined( var_2 ) && isalive( var_2 ) )
var_0++;
}
var_4 = 0;
var_5 = vectortoyaw( self.forward );
for ( var_6 = 0; var_6 < self.ai_array.size; var_6++ )
{
var_2 = self.ai_array[var_6];
if ( isdefined( var_2 ) )
{
if ( abs( var_2.angles[1] - var_5 ) < 45 )
var_4++;
}
}
if ( var_4 == var_0 )
self notify( "goal_yaw" );
}
}
group_sprint_on()
{
foreach ( var_1 in self.ai_array )
{
if ( isalive( var_1 ) )
var_1 riotshield_sprint_on();
}
}
group_fastwalk_on()
{
foreach ( var_1 in self.ai_array )
{
if ( isalive( var_1 ) )
var_1 riotshield_fastwalk_on();
}
}
group_sprint_off()
{
foreach ( var_1 in self.ai_array )
{
if ( isalive( var_1 ) )
var_1 riotshield_sprint_off();
}
}
group_fastwalk_off()
{
foreach ( var_1 in self.ai_array )
{
if ( isalive( var_1 ) )
var_1 riotshield_fastwalk_off();
}
}
group_lock_angles( var_0 )
{
self.forward = var_0;
var_1 = vectortoyaw( var_0 );
foreach ( var_3 in self.ai_array )
{
if ( !isdefined( var_3 ) )
continue;
if ( isdefined( var_3.enemy ) && distancesquared( var_3.origin, var_3.enemy.origin ) < squared( var_3.pathenemyfightdist ) )
continue;
var_3 orientmode( "face angle", var_1 );
var_3.lockorientation = 1;
}
wait 0.1;
}
group_unlock_angles()
{
foreach ( var_1 in self.ai_array )
{
if ( !isdefined( var_1 ) )
continue;
var_1 orientmode( "face default" );
var_1.lockorientation = 0;
}
}
group_free_combat()
{
group_unlock_angles();
foreach ( var_1 in self.ai_array )
{
if ( !isdefined( var_1 ) )
continue;
var_1.goalradius = 2048;
var_1.pathenemyfightdist = 400;
var_1.pathenemylookahead = 400;
}
}
group_center()
{
var_0 = ( 0, 0, 0 );
var_1 = 0;
foreach ( var_3 in self.ai_array )
{
if ( isdefined( var_3 ) )
{
var_0 = var_0 + var_3.origin;
var_1++;
}
}
if ( var_1 )
var_0 = 1 / var_1 * var_0;
return var_0;
}

343
maps/_rv_vfx.gsc Normal file
View File

@ -0,0 +1,343 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
level thread init_fx_triggers();
level thread global_breakables_think();
level thread func_glass_handler();
level thread impact_override();
}
set_fungglass_life( var_0, var_1 )
{
setsaveddvar( "glass_damageToWeaken", var_0 );
setsaveddvar( "glass_damageToDestroy", var_1 );
}
global_breakables_think()
{
var_0 = getentarray( "vfx_breakable", "script_noteworthy" );
var_1 = [];
foreach ( var_3 in var_0 )
{
if ( isdefined( var_3.script_parameters ) )
{
if ( issubstr( var_3.script_parameters, ".efx" ) || issubstr( var_3.script_parameters, ".EFX" ) || issubstr( var_3.script_parameters, "fx/" ) )
var_1[var_1.size] = var_3;
}
}
foreach ( var_6 in var_1 )
{
if ( isdefined( var_6.groupname ) && isdefined( var_6.script_spawn_pool ) )
{
var_7 = strtok( var_6.groupname, "|" );
foreach ( var_9 in var_7 )
{
if ( var_9 != "NO_MODEL" && var_9 != "no_model" )
precachemodel( var_9 );
}
var_11 = strtok( var_6.script_parameters, "|" );
var_12 = [];
var_13 = strtok( var_6.script_spawn_pool, "|" );
foreach ( var_15 in var_11 )
{
var_16 = strtok( var_15, "." )[0];
level._effect[var_16] = loadfx( var_16 );
var_12[var_12.size] = var_16;
}
var_6 thread global_breakable_wait( var_7, var_12, var_13, int( var_13[0] ) );
}
}
}
global_breakable_target_damage_wait()
{
var_0 = self.origin;
self endon( "delete" );
while ( isdefined( self ) )
{
var_1 = self.target;
self waittill( "damage", var_2 );
var_3 = getentarray( var_1, "targetname" );
foreach ( var_5 in var_3 )
{
if ( isdefined( var_5 ) )
var_5 dodamage( var_2, var_0 );
}
}
}
global_breakable_wait( var_0, var_1, var_2, var_3 )
{
var_4 = self.origin;
if ( isdefined( self.target ) )
thread global_breakable_target_damage_wait();
self.health = var_3;
self setcandamage( 1 );
self waittill( "death" );
if ( !isdefined( self ) )
return;
var_5 = 0;
var_6 = var_3;
var_7 = 0;
foreach ( var_9 in var_2 )
{
var_10 = int( var_9 );
var_7 = var_7 + var_10;
}
var_12 = self.health * -1 + var_3;
var_13 = "";
var_14 = undefined;
if ( isdefined( self.targetname ) && self.targetname != "" )
var_13 = self.targetname;
if ( isdefined( self.target ) )
var_14 = self.target;
var_5 = -1;
if ( self.health != 0 )
{
foreach ( var_9 in var_2 )
{
var_10 = int( var_9 );
if ( var_12 > var_10 )
{
var_12 = var_12 - var_10;
var_5++;
continue;
}
var_6 = var_10 - var_12;
break;
}
}
if ( var_5 < 0 )
var_5 = 0;
if ( var_5 > var_0.size - 1 )
var_5 = var_0.size - 1;
var_17 = ( 0, 0, 0 );
if ( isdefined( self.origin ) )
var_17 = self.origin;
var_18 = ( 0, 0, 0 );
if ( isdefined( self.angles ) )
var_18 = self.angles;
var_19 = undefined;
if ( isdefined( self.script_group ) && self.script_group != 0 )
var_19 = self.script_group;
playfx( level._effect[var_1[var_5]], self.origin, anglestoforward( self.angles ), anglestoup( self.angles ) );
self delete();
if ( var_0[var_5] != "NO_MODEL" && var_0[var_5] != "no_model" )
{
var_20 = spawn( "script_model", ( 0, 0, 0 ) );
var_20.origin = var_17;
var_20.angles = var_18;
var_20.targetname = var_13;
var_20.target = var_14;
var_20.script_group = var_19;
var_20 setmodel( var_0[var_5] );
if ( var_0.size > var_5 + 1 )
{
for ( var_21 = 0; var_21 < var_5 + 1; var_21++ )
{
var_0 = maps\_utility::array_remove_index( var_0, 0 );
var_1 = maps\_utility::array_remove_index( var_1, 0 );
var_2 = maps\_utility::array_remove_index( var_2, 0 );
}
var_22 = var_6;
if ( var_22 <= 0 )
var_22 = 1;
var_20.health = var_22;
var_20 thread global_breakable_wait( var_0, var_1, var_2, var_20.health );
return;
}
if ( isdefined( var_19 ) )
{
radiusdamage( var_20.origin, var_19, int( var_2[0] ) * 2, int( var_2[0] ) / 2 );
return;
}
return;
}
else
{
}
}
global_fx_array_to_string( var_0 )
{
var_1 = "";
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
{
var_1 = var_1 + var_0[var_2];
if ( var_2 != var_0.size - 1 )
var_1 = var_1 + "|";
}
return var_1;
}
init_fx_triggers()
{
var_0 = getentarray( "fx_trigger", "targetname" );
common_scripts\utility::array_thread( var_0, ::handle_exploder_trigger );
}
handle_exploder_trigger()
{
if ( !common_scripts\utility::flag_exist( self.script_flag ) )
common_scripts\utility::flag_init( self.script_flag );
var_0 = strtok( self.script_flag, "_" );
var_1 = var_0[1];
if ( var_0.size == 2 )
{
for (;;)
{
common_scripts\utility::flag_wait( self.script_flag );
common_scripts\_exploder::activate_exploder( var_1 );
common_scripts\utility::flag_waitopen( self.script_flag );
maps\_utility::stop_exploder( var_1 );
}
}
}
func_glass_handler()
{
var_0 = [];
var_1 = [];
var_2 = getentarray( "vfx_custom_glass", "targetname" );
foreach ( var_4 in var_2 )
{
if ( isdefined( var_4.script_noteworthy ) )
{
var_5 = getglass( var_4.script_noteworthy );
if ( isdefined( var_5 ) )
{
var_1[var_5] = var_4;
var_0[var_0.size] = var_5;
}
}
}
var_7 = var_0.size;
var_8 = var_0.size;
var_9 = 5;
var_10 = 0;
while ( var_7 != 0 )
{
var_11 = var_10 + var_9 - 1;
if ( var_11 > var_8 )
var_11 = var_8;
if ( var_10 == var_8 )
var_10 = 0;
while ( var_10 < var_11 )
{
var_12 = var_0[var_10];
var_4 = var_1[var_12];
if ( isdefined( var_4 ) )
{
if ( isglassdestroyed( var_12 ) )
{
var_4 delete();
var_7--;
var_1[var_12] = undefined;
}
}
var_10++;
}
wait 0.05;
}
}
impact_override()
{
var_0 = getentarray( "vfx_impact_override", "targetname" );
var_1 = [];
foreach ( var_3 in var_0 )
{
if ( isdefined( var_3.script_parameters ) )
{
if ( issubstr( var_3.script_parameters, ".efx" ) || issubstr( var_3.script_parameters, ".EFX" ) || issubstr( var_3.script_parameters, "fx/" ) )
{
var_4 = strtok( var_3.script_parameters, "." )[0];
level._effect[var_4] = loadfx( var_4 );
var_3.script_parameters = var_4;
var_3 thread impact_override_object_damage_check();
}
}
}
}
impact_override_object_damage_check()
{
self setcandamage( 1 );
self.health = 1000;
self endon( "delete" );
var_0 = undefined;
var_1 = undefined;
var_2 = undefined;
var_3 = undefined;
for ( var_4 = undefined; isdefined( self ); self.health = 1000 )
{
self waittill( "damage", var_0, var_1, var_2, var_3, var_4 );
var_4 = tolower( var_4 );
switch ( var_4 )
{
case "mod_rifle_bullet":
case "mod_pistol_bullet":
case "bullet":
case "mod_projectile":
var_5 = self.script_parameters;
playfx( level._effect[var_5], var_3, anglestoforward( vectortoangles( var_2 ) ), anglestoup( vectortoangles( var_2 ) ) );
}
}
}

66
maps/_shellshock.gsc Normal file
View File

@ -0,0 +1,66 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main( var_0, var_1, var_2, var_3, var_4, var_5 )
{
level thread internalmain( var_0, var_1, var_2, var_3, var_4, var_5 );
}
internalmain( var_0, var_1, var_2, var_3, var_4, var_5 )
{
if ( !isdefined( var_0 ) )
var_0 = 12;
else if ( var_0 < 7 )
var_0 = 7;
if ( !isdefined( var_1 ) )
var_1 = 150;
if ( !isdefined( var_2 ) )
var_2 = 100;
if ( !isdefined( var_3 ) )
var_3 = 100;
if ( !isdefined( var_5 ) )
var_6 = "default";
else
var_6 = var_5;
var_7 = level.player getorigin() + ( 0, 8, 2 );
var_8 = 320;
var_9 = var_1 + randomint( var_2 );
var_10 = var_3;
level.player playsound( "weapons_rocket_explosion" );
wait 0.25;
radiusdamage( var_7, var_8, var_9, var_10 );
earthquake( 0.75, 2, var_7, 2250 );
if ( isalive( level.player ) )
{
level.player allowstand( 0 );
level.player allowcrouch( 0 );
level.player allowprone( 1 );
wait 0.15;
level.player viewkick( 127, level.player.origin );
level.player shellshock( var_6, var_0 );
if ( !isdefined( var_4 ) )
level.player thread playerhitable( var_0 );
wait 1.5;
level.player allowstand( 1 );
level.player allowcrouch( 1 );
}
}
playerhitable( var_0 )
{
self.shellshocked = 1;
self.ignoreme = 1;
self notify( "player is shell shocked" );
self endon( "player is shell shocked" );
wait( var_0 - 1 );
self.shellshocked = 0;
self.ignoreme = 0;
}

1017
maps/_shg_common.gsc Normal file

File diff suppressed because it is too large Load Diff

3268
maps/_slowmo_breach.gsc Normal file

File diff suppressed because it is too large Load Diff

126
maps/_space.gsc Normal file
View File

@ -0,0 +1,126 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
precache()
{
precacheshader( "hud_space_helmet_overlay" );
}
set_zero_gravity()
{
}
set_glass_zero_gravity()
{
setsaveddvar( "glass_angular_vel", "1 5" );
setsaveddvar( "glass_linear_vel", "20 40" );
setsaveddvar( "glass_fall_gravity", 0 );
setsaveddvar( "glass_simple_duration", 10000 );
}
player_space()
{
if ( !issplitscreen() )
thread player_space_breathe_sound();
else if ( self == level.player )
thread player_space_breathe_sound();
thread player_scuba_bubbles();
}
player_space_breathe_sound()
{
self endon( "death" );
self endon( "disable_space" );
self notify( "start_space_breathe" );
self endon( "start_space_breathe" );
self endon( "stop_space_breathe" );
for (;;)
{
wait 0.05;
self notify( "space_breathe_sound_starting" );
self waittill( "space_breathe_sound_done" );
}
}
stop_player_space()
{
self notify( "stop_space_breathe" );
self stoplocalsound( "scuba_breathe_player" );
}
debug_org()
{
for (;;)
wait 0.5;
}
player_scuba_bubbles()
{
self endon( "death" );
self endon( "disable_space" );
self endon( "stop_space_breathe" );
waittillframeend;
self.playerfxorg = spawn( "script_model", self.origin + ( 0, 0, 0 ) );
self.playerfxorg setmodel( "tag_origin" );
self.playerfxorg.angles = self.angles;
self.playerfxorg.origin = self geteye() - ( 0, 0, 10 );
self.playerfxorg linktoplayerview( self, "tag_origin", ( 5, 0, -55 ), ( 0, 0, 0 ), 1 );
thread scuba_fx_cleanup( self.playerfxorg );
for (;;)
{
self waittill( "space_breathe_sound_starting" );
wait 2.1;
if ( common_scripts\utility::cointoss() )
self waittill( "space_breathe_sound_starting" );
}
}
scuba_fx_cleanup( var_0 )
{
self waittill( "stop_space_breathe" );
var_0 unlinkfromplayerview( self );
var_0 delete();
}
player_bubbles_fx( var_0 )
{
self endon( "stop_space_breathe" );
}
space_hud_enable( var_0 )
{
wait 0.05;
if ( var_0 == 1 )
{
setsaveddvar( "hud_showStance", "0" );
setsaveddvar( "compass", "0" );
}
else
{
setsaveddvar( "hud_drawhud", "1" );
setsaveddvar( "hud_showStance", "1" );
setsaveddvar( "compass", "1" );
}
}
player_space_helmet( var_0 )
{
self.hud_space_helmet_overlay = maps\_hud_util::create_client_overlay( "hud_space_helmet_overlay", 1, self );
self.hud_space_helmet_overlay.foreground = 0;
self.hud_space_helmet_overlay.sort = -99;
}
player_space_helmet_disable( var_0 )
{
if ( isdefined( self.hud_space_helmet_rim ) )
self.hud_space_helmet_rim maps\_hud_util::destroyelem();
if ( isdefined( self.hud_space_helmet_overlay ) )
self.hud_space_helmet_overlay maps\_hud_util::destroyelem();
}

1045
maps/_space_ai.gsc Normal file

File diff suppressed because it is too large Load Diff

1160
maps/_space_player.gsc Normal file

File diff suppressed because it is too large Load Diff

4596
maps/_spawner.gsc Normal file

File diff suppressed because it is too large Load Diff

13
maps/_stealth.gsc Normal file
View File

@ -0,0 +1,13 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
maps\_stealth_visibility_system::stealth_visibility_system_main();
maps\_stealth_behavior_system::stealth_behavior_system_main();
maps\_stealth_corpse_system::stealth_corpse_system_main();
maps\_stealth_anims::main();
level.global_callbacks["_autosave_stealthcheck"] = maps\_stealth_shared_utilities::_autosave_stealthcheck;
level.global_callbacks["_patrol_endon_spotted_flag"] = maps\_stealth_shared_utilities::_patrol_endon_spotted_flag;
level.global_callbacks["_spawner_stealth_default"] = maps\_stealth_shared_utilities::_spawner_stealth_default;
}

View File

@ -0,0 +1,51 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
stealth_accuracy_friendly_main()
{
friendly_init();
var_0 = self._stealth.behavior.ai_functions["accuracy"]["hidden"];
thread maps\_stealth_shared_utilities::ai_message_handler_hidden( var_0, "accuracy_friendly" );
var_0 = self._stealth.behavior.ai_functions["accuracy"]["spotted"];
thread maps\_stealth_shared_utilities::ai_message_handler_spotted( var_0, "accuracy_friendly" );
}
friendly_acc_hidden()
{
self.baseaccuracy = self._stealth.behavior.goodaccuracy;
self.accuracy = self._stealth.behavior.goodaccuracy;
}
friendly_acc_spotted()
{
self.baseaccuracy = self._stealth.behavior.old_baseaccuracy;
self.accuracy = self._stealth.behavior.old_accuracy;
}
friendly_init()
{
self._stealth.behavior.goodaccuracy = 50;
self._stealth.behavior.old_baseaccuracy = self.baseaccuracy;
self._stealth.behavior.old_accuracy = self.accuracy;
friendly_default_acc_behavior();
self._stealth.plugins.accaracy_mod = 1;
}
friendly_custom_acc_behavior( var_0 )
{
foreach ( var_3, var_2 in var_0 )
maps\_stealth_shared_utilities::ai_create_behavior_function( "accuracy", var_3, var_2 );
var_4 = self._stealth.behavior.ai_functions["accuracy"]["hidden"];
thread maps\_stealth_shared_utilities::ai_message_handler_hidden( var_4, "accuracy_friendly" );
var_4 = self._stealth.behavior.ai_functions["accuracy"]["spotted"];
thread maps\_stealth_shared_utilities::ai_message_handler_spotted( var_4, "accuracy_friendly" );
}
friendly_default_acc_behavior()
{
var_0 = [];
var_0["hidden"] = ::friendly_acc_hidden;
var_0["spotted"] = ::friendly_acc_spotted;
friendly_custom_acc_behavior( var_0 );
}

View File

@ -0,0 +1,170 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
#using_animtree("generic_human");
clear_animation( var_0 )
{
self clearanim( %root, var_0 );
}
enemy_animation_attack( var_0 )
{
var_1 = 600;
if ( isdefined( self.enemy ) )
var_1 = distance( self.enemy.origin, self.origin );
if ( var_1 < 512 )
var_2 = "_stealth_behavior_spotted_short";
else
var_2 = "_stealth_behavior_spotted_long";
self.allowdeath = 1;
thread maps\_stealth_shared_utilities::stealth_anim_custom_animmode( self, "gravity", var_2 );
if ( var_1 < 200 )
wait 0.5;
else
common_scripts\utility::waittill_notify_or_timeout( var_2, randomfloatrange( 1.5, 3 ) );
self notify( "stop_animmode" );
}
enemy_animation_nothing( var_0 )
{
}
enemy_animation_generic( var_0 )
{
self.allowdeath = 1;
var_1 = level.player;
if ( isdefined( self.enemy ) )
var_1 = self.enemy;
else if ( isdefined( self.favoriteenemy ) )
var_1 = self.favoriteenemy;
var_2 = distance( self.origin, var_1.origin );
var_3 = 4;
var_4 = 1024;
for ( var_5 = 1; var_5 < var_3; var_5++ )
{
var_6 = var_4 * ( var_5 / var_3 );
if ( var_2 < var_6 )
break;
}
var_7 = "_stealth_behavior_generic" + var_5;
maps\_stealth_shared_utilities::stealth_anim_custom_animmode( self, "gravity", var_7 );
}
dog_animation_generic( var_0 )
{
self.allowdeath = 1;
var_1 = undefined;
if ( isdefined( self.meleeingplayer ) )
{
var_2 = self.meleeingplayer;
if ( isdefined( var_2.player_view ) && isdefined( var_2.player_view.dog ) && self == var_2.player_view.dog )
return;
}
if ( maps\_utility::ent_flag( "_stealth_behavior_asleep" ) )
{
if ( randomint( 100 ) < 50 )
var_1 = "_stealth_dog_wakeup_fast";
else
var_1 = "_stealth_dog_wakeup_slow";
}
else
var_1 = "_stealth_dog_growl";
maps\_stealth_shared_utilities::stealth_anim_custom_animmode( self, "gravity", var_1 );
}
dog_animation_wakeup_fast( var_0 )
{
self.allowdeath = 1;
var_1 = undefined;
if ( maps\_utility::ent_flag( "_stealth_behavior_asleep" ) )
var_1 = "_stealth_dog_wakeup_fast";
else
var_1 = "_stealth_dog_growl";
maps\_stealth_shared_utilities::stealth_anim_custom_animmode( self, "gravity", var_1 );
}
dog_animation_wakeup_slow( var_0 )
{
self.allowdeath = 1;
var_1 = undefined;
if ( maps\_utility::ent_flag( "_stealth_behavior_asleep" ) )
var_1 = "_stealth_dog_wakeup_slow";
else
var_1 = "_stealth_dog_growl";
maps\_stealth_shared_utilities::stealth_anim_custom_animmode( self, "gravity", var_1 );
}
enemy_animation_sawcorpse( var_0 )
{
self.allowdeath = 1;
var_1 = "_stealth_behavior_saw_corpse";
maps\_stealth_shared_utilities::stealth_anim_custom_animmode( self, "gravity", var_1 );
}
dog_animation_sawcorpse( var_0 )
{
self.allowdeath = 1;
var_1 = "_stealth_dog_saw_corpse";
maps\_stealth_shared_utilities::stealth_anim_custom_animmode( self, "gravity", var_1 );
}
dog_animation_howl( var_0 )
{
self.allowdeath = 1;
var_1 = "_stealth_dog_howl";
maps\_stealth_shared_utilities::stealth_anim_custom_animmode( self, "gravity", var_1 );
maps\_stealth_shared_utilities::stealth_anim_custom_animmode( self, "gravity", var_1 );
maps\_stealth_shared_utilities::stealth_anim_custom_animmode( self, "gravity", var_1 );
maps\_stealth_shared_utilities::stealth_anim_custom_animmode( self, "gravity", var_1 );
maps\_stealth_shared_utilities::stealth_anim_custom_animmode( self, "gravity", var_1 );
maps\_stealth_shared_utilities::stealth_anim_custom_animmode( self, "gravity", var_1 );
}
enemy_animation_foundcorpse( var_0 )
{
self endon( "enemy" );
if ( isdefined( self.enemy ) )
return;
self.allowdeath = 1;
if ( self.a.movement == "stop" )
var_1 = "_stealth_find_stand";
else
var_1 = "_stealth_find_jog";
maps\_stealth_shared_utilities::stealth_anim_custom_animmode( self, "gravity", var_1 );
}
dog_animation_foundcorpse( var_0 )
{
self endon( "enemy" );
if ( isdefined( self.enemy ) )
return;
self.allowdeath = 1;
var_1 = "_stealth_dog_find";
maps\_stealth_shared_utilities::stealth_anim_custom_animmode( self, "gravity", var_1 );
}

60
maps/_stealth_anims.gsc Normal file
View File

@ -0,0 +1,60 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
humans();
dogs();
}
#using_animtree("generic_human");
humans()
{
level.scr_anim["generic"]["patrol_turn180"] = %patrol_bored_2_walk_180turn;
level.scr_anim["generic"]["patrol_radio_in_clear"] = %patrolwalk_cold_gunup_transition;
level.scr_anim["generic"]["_stealth_patrol_jog"] = %patrol_jog;
level.scr_anim["generic"]["_stealth_patrol_walk"] = %patrol_bored_patrolwalk;
level.scr_anim["generic"]["_stealth_combat_jog"] = %combat_jog;
level.scr_anim["generic"]["_stealth_patrol_cqb"] = %cqb_walk_iw6;
if ( !isdefined( level.scr_anim["generic"]["_stealth_patrol_search_a"] ) )
{
level.scr_anim["generic"]["_stealth_patrol_search_a"] = %patrol_boredwalk_lookcycle_a;
level.scr_anim["generic"]["_stealth_patrol_search_b"] = %patrol_boredwalk_lookcycle_b;
}
level.scr_anim["generic"]["_stealth_behavior_spotted_short"] = %exposed_idle_twitch_v4;
level.scr_anim["generic"]["_stealth_behavior_spotted_long"] = %patrol_bored_react_walkstop_short;
level.scr_anim["generic"]["_stealth_look_around"][0] = %patrol_bored_react_look_v1;
level.scr_anim["generic"]["_stealth_look_around"][1] = %patrol_bored_react_look_v2;
level.scr_anim["generic"]["_stealth_behavior_saw_corpse"] = %exposed_idle_twitch_v4;
level.scr_anim["generic"]["_stealth_behavior_generic1"] = %patrol_bored_react_look_advance;
level.scr_anim["generic"]["_stealth_behavior_generic2"] = %patrol_bored_react_look_retreat;
level.scr_anim["generic"]["_stealth_behavior_generic3"] = %patrol_bored_react_walkstop;
level.scr_anim["generic"]["_stealth_behavior_generic4"] = %patrol_bored_react_walkstop_short;
level.scr_anim["generic"]["_stealth_idle_to_run_2"] = %patrol_bored_duckandrun_b;
level.scr_anim["generic"]["_stealth_idle_to_run_4"] = %patrol_bored_duckandrun_l;
level.scr_anim["generic"]["_stealth_idle_to_run_6"] = %patrol_bored_duckandrun_r;
level.scr_anim["generic"]["_stealth_idle_to_run_8"] = %patrol_bored_duckandrun_f;
level.scr_anim["generic"]["_stealth_find_jog"] = %patrol_boredjog_find;
level.scr_anim["generic"]["_stealth_find_stand"] = %patrol_bored_react_look_v2;
level.scr_anim["generic"]["_stealth_prone_idle"][0] = %prone_aim_idle;
level.scr_anim["generic"]["_stealth_prone_stop"] = %prone_crawl_2_prone;
level.scr_anim["generic"]["_stealth_prone_start"] = %prone_2_prone_crawl;
level.scr_anim["generic"]["_stealth_prone_2_run_roll"] = %hunted_pronehide_2_stand_v4;
}
#using_animtree("dog");
dogs()
{
level.scr_anim["generic"]["_stealth_dog_sleeping"][0] = %german_shepherd_sleeping;
level.scr_anim["generic"]["_stealth_dog_stop"] = %iw6_dog_attackidle_runin_8;
level.scr_anim["generic"]["_stealth_dog_find"] = %german_shepherd_run_flashbang_b;
level.scr_anim["generic"]["_stealth_dog_howl"] = %iw6_dog_attackidle_bark;
level.scr_anim["generic"]["_stealth_dog_saw_corpse"] = %iw6_dog_attackidle_bark;
level.scr_anim["generic"]["_stealth_dog_growl"] = %iw6_dog_attackidle;
level.scr_anim["generic"]["_stealth_dog_wakeup_fast"] = %german_shepherd_wakeup_fast;
level.scr_anim["generic"]["_stealth_dog_wakeup_slow"] = %german_shepherd_wakeup_slow;
}

View File

@ -0,0 +1,172 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
stealth_behavior_enemy_main()
{
enemy_init();
var_0 = self._stealth.behavior.ai_functions["state"]["hidden"];
thread maps\_stealth_shared_utilities::ai_message_handler_hidden( var_0, "enemy_behavior" );
var_0 = self._stealth.behavior.ai_functions["state"]["spotted"];
thread maps\_stealth_shared_utilities::ai_message_handler_spotted( var_0, "enemy_behavior" );
thread enemy_animation_loop();
}
enemy_animation_loop()
{
self endon( "death" );
self endon( "pain_death" );
self endon( "damage" );
self endon( "dog_attacks_ai" );
for (;;)
{
self waittill( "event_awareness", var_0 );
if ( !maps\_utility::ent_flag( "_stealth_enabled" ) )
continue;
var_1 = self._stealth.behavior.ai_functions["animation"]["wrapper"];
self thread [[ var_1 ]]( var_0 );
}
}
enemy_state_hidden()
{
self.fovcosine = 0.5;
self.fovcosinebusy = 0.1;
self.favoriteenemy = undefined;
self.dontattackme = 1;
self.dontevershoot = 1;
thread maps\_utility::set_battlechatter( 0 );
if ( self.type == "dog" )
return;
self.diequietly = 1;
self clearenemy();
}
enemy_state_spotted( var_0 )
{
self.fovcosine = 0.01;
if ( !isdefined( self.dog_attacking_me ) )
{
self.ignoreall = 0;
thread maps\_utility::set_battlechatter( 1 );
}
self.dontattackme = undefined;
self.dontevershoot = undefined;
if ( isdefined( self.oldfixednode ) )
self.fixednode = self.oldfixednode;
if ( self.type != "dog" )
{
self.diequietly = 0;
if ( !isdefined( var_0 ) )
{
maps\_utility::clear_run_anim();
maps\_stealth_shared_utilities::enemy_stop_current_behavior();
}
}
else
{
self.script_growl = undefined;
self.script_nobark = undefined;
}
if ( isdefined( var_0 ) )
return;
if ( isdefined( level._stealth.group.spotted_enemy ) )
{
var_1 = level._stealth.group.spotted_enemy[self.script_stealthgroup];
if ( isdefined( var_1 ) )
self getenemyinfo( var_1 );
}
}
enemy_init()
{
maps\_utility::ent_flag_init( "_stealth_override_goalpos" );
maps\_utility::ent_flag_init( "_stealth_enemy_alert_level_action" );
maps\_utility::ent_flag_init( "_stealth_running_to_corpse" );
maps\_utility::ent_flag_init( "_stealth_behavior_reaction_anim" );
maps\_utility::ent_flag_init( "_stealth_behavior_first_reaction" );
maps\_utility::ent_flag_init( "_stealth_behavior_reaction_anim_in_progress" );
self._stealth.behavior = spawnstruct();
self.a.nofirstframemelee = 1;
self._stealth.behavior.ai_functions = [];
enemy_default_state_behavior();
enemy_default_anim_behavior();
self._stealth.behavior.event = spawnstruct();
if ( self.type == "dog" )
enemy_dog_init();
self._stealth.plugins = spawnstruct();
thread maps\_stealth_shared_utilities::ai_stealth_pause_handler();
}
enemy_dog_init()
{
if ( threatbiasgroupexists( "dog" ) )
self setthreatbiasgroup( "dog" );
if ( isdefined( self.enemy ) || isdefined( self.favoriteenemy ) )
return;
maps\_utility::ent_flag_init( "_stealth_behavior_asleep" );
if ( isdefined( self.script_pet ) || isdefined( self.script_patroller ) )
return;
self.ignoreme = 1;
self.ignoreall = 1;
self.allowdeath = 1;
thread maps\_anim::anim_generic_custom_animmode_loop( self, "gravity", "_stealth_dog_sleeping" );
maps\_utility::ent_flag_set( "_stealth_behavior_asleep" );
}
enemy_custom_state_behavior( var_0 )
{
foreach ( var_3, var_2 in var_0 )
maps\_stealth_shared_utilities::ai_create_behavior_function( "state", var_3, var_2 );
var_4 = self._stealth.behavior.ai_functions["state"]["hidden"];
thread maps\_stealth_shared_utilities::ai_message_handler_hidden( var_4, "enemy_behavior" );
var_4 = self._stealth.behavior.ai_functions["state"]["spotted"];
thread maps\_stealth_shared_utilities::ai_message_handler_spotted( var_4, "enemy_behavior" );
}
enemy_default_state_behavior()
{
var_0 = [];
var_0["hidden"] = ::enemy_state_hidden;
var_0["spotted"] = ::enemy_state_spotted;
enemy_custom_state_behavior( var_0 );
}
enemy_default_anim_behavior()
{
maps\_stealth_shared_utilities::ai_create_behavior_function( "animation", "wrapper", maps\_stealth_shared_utilities::enemy_animation_wrapper );
if ( self.type == "dog" )
{
maps\_stealth_shared_utilities::ai_create_behavior_function( "animation", "grenade danger", maps\_stealth_animation_funcs::dog_animation_wakeup_fast );
maps\_stealth_shared_utilities::ai_create_behavior_function( "animation", "bulletwhizby", maps\_stealth_animation_funcs::dog_animation_wakeup_fast );
maps\_stealth_shared_utilities::ai_create_behavior_function( "animation", "gunshot_teammate", maps\_stealth_animation_funcs::dog_animation_wakeup_fast );
maps\_stealth_shared_utilities::ai_create_behavior_function( "animation", "projectile_impact", maps\_stealth_animation_funcs::dog_animation_wakeup_slow );
}
else
{
maps\_stealth_shared_utilities::ai_create_behavior_function( "animation", "grenade danger", maps\_stealth_animation_funcs::enemy_animation_nothing );
maps\_stealth_shared_utilities::ai_create_behavior_function( "animation", "bulletwhizby", maps\_stealth_animation_funcs::enemy_animation_nothing );
maps\_stealth_shared_utilities::ai_create_behavior_function( "animation", "gunshot_teammate", maps\_stealth_animation_funcs::enemy_animation_nothing );
maps\_stealth_shared_utilities::ai_create_behavior_function( "animation", "projectile_impact", maps\_stealth_animation_funcs::enemy_animation_nothing );
}
}

View File

@ -0,0 +1,89 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
stealth_behavior_friendly_main()
{
friendly_init();
var_0 = self._stealth.behavior.ai_functions["state"]["hidden"];
thread maps\_stealth_shared_utilities::ai_message_handler_hidden( var_0, "friendly_behavior" );
var_0 = self._stealth.behavior.ai_functions["state"]["spotted"];
thread maps\_stealth_shared_utilities::ai_message_handler_spotted( var_0, "friendly_behavior" );
}
friendly_state_hidden()
{
thread maps\_utility::set_battlechatter( 0 );
self._stealth.behavior.oldgrenadeammo = self.grenadeammo;
self.grenadeammo = 0;
self.forcesidearm = undefined;
self.ignoreme = 1;
}
friendly_state_spotted()
{
thread maps\_utility::set_battlechatter( 1 );
if ( isdefined( self._stealth.behavior.oldgrenadeammo ) )
self.grenadeammo = self._stealth.behavior.oldgrenadeammo;
else
self.grenadeammo = 3;
self.ignoreme = 0;
self pushplayer( 0 );
maps\_utility::disable_cqbwalk();
thread friendly_spotted_getup_from_prone();
self allowedstances( "prone", "crouch", "stand" );
if ( self.type != "dog" || !isdefined( self.in_melee ) || !self.in_melee )
maps\_utility::anim_stopanimscripted();
}
friendly_spotted_getup_from_prone( var_0 )
{
self endon( "death" );
if ( self._stealth.logic.stance != "prone" )
return;
maps\_utility::ent_flag_set( "_stealth_custom_anim" );
var_1 = "_stealth_prone_2_run_roll";
if ( isdefined( var_0 ) )
self orientmode( "face angle", var_0[1] + 20 );
thread maps\_stealth_shared_utilities::stealth_anim_custom_animmode( self, "gravity", var_1 );
var_2 = getanimlength( maps\_utility::getanim_generic( var_1 ) );
wait( var_2 - 0.2 );
self notify( "stop_animmode" );
maps\_utility::ent_flag_clear( "_stealth_custom_anim" );
}
friendly_init()
{
maps\_utility::ent_flag_init( "_stealth_custom_anim" );
maps\_utility::ent_flag_init( "_stealth_override_goalpos" );
self._stealth.behavior = spawnstruct();
self._stealth.behavior.ai_functions = [];
friendly_default_state_behavior();
self._stealth.plugins = spawnstruct();
thread maps\_stealth_shared_utilities::ai_stealth_pause_handler();
}
friendly_custom_state_behavior( var_0 )
{
foreach ( var_3, var_2 in var_0 )
maps\_stealth_shared_utilities::ai_create_behavior_function( "state", var_3, var_2 );
var_4 = self._stealth.behavior.ai_functions["state"]["hidden"];
thread maps\_stealth_shared_utilities::ai_message_handler_hidden( var_4, "friendly_behavior" );
var_4 = self._stealth.behavior.ai_functions["state"]["spotted"];
thread maps\_stealth_shared_utilities::ai_message_handler_spotted( var_4, "friendly_behavior" );
}
friendly_default_state_behavior()
{
var_0 = [];
var_0["hidden"] = ::friendly_state_hidden;
var_0["spotted"] = ::friendly_state_spotted;
friendly_custom_state_behavior( var_0 );
}

View File

@ -0,0 +1,23 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
stealth_behavior_system_main()
{
stealth_behavior_system_init();
}
stealth_behavior_system_init()
{
level._stealth.behavior = spawnstruct();
level._stealth.node_search = spawnstruct();
level._stealth.behavior.sound = [];
level._stealth.behavior.sound["huh"] = 0;
level._stealth.behavior.sound["hmph"] = 0;
level._stealth.behavior.sound["name"] = 0;
level._stealth.behavior.sound["wtf"] = 0;
level._stealth.behavior.sound["spotted"] = [];
level._stealth.behavior.sound["corpse"] = 0;
level._stealth.behavior.sound["alert"] = 0;
level._stealth.behavior.sound["acknowledge"] = 0;
level._stealth.behavior.sound_reset_time = 3;
}

Some files were not shown because too many files have changed in this diff Show More