1046 lines
28 KiB
Plaintext
1046 lines
28 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
main()
|
|
{
|
|
maps\mp\mp_snow_precache::main();
|
|
maps\createart\mp_snow_art::main();
|
|
maps\mp\mp_snow_fx::main();
|
|
thread maps\mp\_fx::func_glass_handler();
|
|
common_scripts\utility::flag_init( "satellite_crashed" );
|
|
common_scripts\utility::flag_init( "satellite_incoming" );
|
|
level.snow_satellite_allowed = maps\mp\_utility::allowlevelkillstreaks();
|
|
level thread satellite_fall();
|
|
precache();
|
|
level.mapcustomcratefunc = ::snowcustomcratefunc;
|
|
level.mapcustomkillstreakfunc = ::snowcustomkillstreakfunc;
|
|
level.mapcustombotkillstreakfunc = ::snowcustombotkillstreakfunc;
|
|
maps\mp\_load::main();
|
|
precacheshader( "fullscreen_dirtylense" );
|
|
maps\mp\_compass::setupminimap( "compass_map_mp_snow" );
|
|
maps\mp\_utility::setdvar_cg_ng( "r_specularColorScale", 2.3, 10 );
|
|
maps\mp\_utility::setdvar_cg_ng( "r_diffuseColorScale", 1.2, 3 );
|
|
setdvar( "r_ssaorejectdepth", 1500 );
|
|
setdvar( "r_ssaofadedepth", 1200 );
|
|
setdvar( "r_sky_fog_intensity", "1" );
|
|
setdvar( "r_sky_fog_min_angle", "74.6766" );
|
|
setdvar( "r_sky_fog_max_angle", "91.2327" );
|
|
setdvar( "r_lightGridEnableTweaks", 1 );
|
|
setdvar( "r_lightGridIntensity", 1.33 );
|
|
|
|
if ( level.ps3 )
|
|
setdvar( "sm_sunShadowScale", "0.6" );
|
|
else if ( level.xenon )
|
|
setdvar( "sm_sunShadowScale", "0.7" );
|
|
|
|
game["attackers"] = "allies";
|
|
game["defenders"] = "axis";
|
|
common_scripts\utility::flag_init( "satellite_active" );
|
|
common_scripts\utility::flag_init( "satellite_charged" );
|
|
level thread lighthouse();
|
|
level thread snowmen();
|
|
common_scripts\utility::waitframe();
|
|
level thread group_anim( "buoy", "mp_snow_buoy_sway", 0.2, 1.0 );
|
|
level thread group_anim( "boat", "mp_snow_boat_sway", 0.2, 1.0 );
|
|
level thread fishing_boat();
|
|
level thread rotate_helicopter_rotor();
|
|
level thread ice();
|
|
level thread initextracollision();
|
|
}
|
|
|
|
initextracollision()
|
|
{
|
|
var_0 = getent( "player32x32x8", "targetname" );
|
|
var_1 = spawn( "script_model", ( -1646.94, 881.505, -2.82839 ) );
|
|
var_1.angles = ( 270, 211.182, 123.817 );
|
|
var_1 clonebrushmodeltoscriptmodel( var_0 );
|
|
var_2 = getent( "clip64x64x128", "targetname" );
|
|
var_3 = spawn( "script_model", ( 245, 2512, -64 ) );
|
|
var_3.angles = ( 0, 0, 0 );
|
|
var_3 clonebrushmodeltoscriptmodel( var_2 );
|
|
var_4 = getent( "clip256x256x128", "targetname" );
|
|
var_5 = spawn( "script_model", ( -1536, -1312, -136 ) );
|
|
var_5.angles = ( 0, 0, 0 );
|
|
var_5 clonebrushmodeltoscriptmodel( var_4 );
|
|
var_6 = getent( "clip256x256x128", "targetname" );
|
|
var_7 = spawn( "script_model", ( -1484, -1440, -136 ) );
|
|
var_7.angles = ( 0, 45, 0 );
|
|
var_7 clonebrushmodeltoscriptmodel( var_6 );
|
|
|
|
if ( maps\mp\_utility::is_gen4() )
|
|
{
|
|
var_8 = getent( "player64x64x128", "targetname" );
|
|
var_9 = spawn( "script_model", ( -1474, 966, -136 ) );
|
|
var_9.angles = ( 0, 352, 0 );
|
|
var_9 clonebrushmodeltoscriptmodel( var_8 );
|
|
var_10 = getent( "clip128x128x8", "targetname" );
|
|
var_11 = spawn( "script_model", ( 1700, 872, -48 ) );
|
|
var_11.angles = ( 0, 335, 0 );
|
|
var_11 clonebrushmodeltoscriptmodel( var_10 );
|
|
}
|
|
}
|
|
|
|
fishing_boat()
|
|
{
|
|
var_0 = getentarray( "fishing_boat", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
var_3 = spawn( "script_model", var_2.origin );
|
|
var_3.angles = ( 0, 0, 0 );
|
|
var_3 setmodel( "generic_prop_raven" );
|
|
var_2 linkto( var_3, "tag_origin" );
|
|
var_3 scriptmodelplayanimdeltamotion( "mp_snow_fishingboat_sway_prop" );
|
|
var_4 = getent( var_2.target, "targetname" );
|
|
|
|
if ( isdefined( var_4 ) )
|
|
{
|
|
var_4 linkto( var_3, "tag_origin" );
|
|
var_4 scriptmodelplayanimdeltamotion( "mp_snow_fishingboat_sway" );
|
|
}
|
|
|
|
var_2.no_moving_platfrom_death = 1;
|
|
}
|
|
}
|
|
|
|
lighthouse()
|
|
{
|
|
var_0 = getent( "lighthouse", "targetname" );
|
|
var_1 = spawn( "script_model", var_0.origin );
|
|
var_1.angles = var_0.angles;
|
|
var_1 setmodel( "generic_prop_raven" );
|
|
var_0 linkto( var_1, "j_prop_1" );
|
|
var_1 scriptmodelplayanimdeltamotion( "mp_snow_lighthouse_scan" );
|
|
var_2 = spawn( "script_model", var_0.origin + ( 0, 0, 70 ) );
|
|
var_2.angles = var_0.angles;
|
|
var_2 setmodel( "tag_origin" );
|
|
var_2 linkto( var_1, "j_prop_1" );
|
|
var_0.fx_ent = var_2;
|
|
level thread lighthouse_play_fx_onconnect( var_0 );
|
|
}
|
|
|
|
snowmen()
|
|
{
|
|
var_0 = getscriptablearray( "snowman", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 thread snowman_death_watch();
|
|
}
|
|
|
|
snowman_death_watch()
|
|
{
|
|
self waittill( "death" );
|
|
maps\mp\_movers::notify_moving_platform_invalid();
|
|
}
|
|
|
|
lighthouse_play_fx_onconnect( var_0 )
|
|
{
|
|
for (;;)
|
|
{
|
|
level waittill( "connected", var_1 );
|
|
playfxontagforclients( level._effect["mp_snow_lighthouse"], var_0.fx_ent, "tag_origin", var_1 );
|
|
}
|
|
}
|
|
|
|
precache()
|
|
{
|
|
precachempanim( "mp_snow_boat_sway" );
|
|
precachempanim( "mp_snow_buoy_sway" );
|
|
precachempanim( "mp_snow_fishingboat_sway" );
|
|
precachempanim( "mp_snow_fishingboat_sway_prop" );
|
|
precachempanim( "mp_snow_tree_fall" );
|
|
precachempanim( "mp_snow_tree_prefall_loop" );
|
|
}
|
|
|
|
is_dynamic_path()
|
|
{
|
|
return isdefined( self.spawnflags ) && self.spawnflags & 1;
|
|
}
|
|
|
|
is_ai_sight_line()
|
|
{
|
|
return isdefined( self.spawnflags ) && self.spawnflags & 2;
|
|
}
|
|
|
|
satellite_fall()
|
|
{
|
|
if ( getdvar( "r_reflectionProbeGenerate" ) == "1" )
|
|
return;
|
|
|
|
if ( level.snow_satellite_allowed )
|
|
level thread play_satellite_static_on_connect();
|
|
|
|
common_scripts\utility::waitframe();
|
|
var_0 = getent( "tree_broken_stump", "targetname" );
|
|
var_1 = getent( "tree_broken_top", "targetname" );
|
|
var_2 = spawn( "script_model", var_0.origin );
|
|
var_2.angles = ( 0, 0, 0 );
|
|
var_2 setmodel( "generic_prop_raven" );
|
|
var_2 scriptmodelplayanimdeltamotion( "mp_snow_tree_prefall_loop" );
|
|
var_0 linkto( var_2, "j_prop_1", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
var_1 linkto( var_2, "j_prop_2", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
var_3 = satellite_group( "satellite_pre_crash" );
|
|
var_4 = satellite_group( "satellite_post_crash" );
|
|
|
|
if ( !isdefined( var_3 ) || !isdefined( var_4 ) )
|
|
return;
|
|
|
|
var_4 satellite_group_hide();
|
|
|
|
if ( !level.snow_satellite_allowed )
|
|
{
|
|
satellite_set_post_crash( var_3, var_4 );
|
|
return;
|
|
}
|
|
|
|
var_5 = getent( "satellite_flash_trigger", "targetname" );
|
|
var_6 = getent( "satellite_kill_trigger", "targetname" );
|
|
var_7 = common_scripts\utility::getstruct( "sat_start", "targetname" );
|
|
var_8 = getent( "sat_start_kill_trigger", "targetname" );
|
|
|
|
if ( isdefined( var_8 ) )
|
|
{
|
|
var_8.start_origin = var_8.origin;
|
|
var_8.start_angles = var_8.angles;
|
|
var_8 enablelinkto();
|
|
}
|
|
|
|
if ( level.createfx_enabled )
|
|
{
|
|
while ( !isdefined( level.player ) )
|
|
common_scripts\utility::waitframe();
|
|
|
|
level.players = [ level.player ];
|
|
level.characters = [];
|
|
}
|
|
else
|
|
maps\mp\_utility::gameflagwait( "prematch_done" );
|
|
|
|
for (;;)
|
|
{
|
|
var_9 = spawn( "script_model", var_7.origin );
|
|
var_9.angles = var_7.angles;
|
|
var_9 setmodel( "tag_origin" );
|
|
var_10 = satellite_killstreak_wait();
|
|
var_11 = undefined;
|
|
|
|
if ( isdefined( var_10 ) )
|
|
var_11 = var_10.team;
|
|
|
|
common_scripts\utility::flag_set( "satellite_incoming" );
|
|
wait 0.5;
|
|
var_12 = 2000;
|
|
|
|
if ( isdefined( var_8 ) )
|
|
{
|
|
var_8 linkto( var_9 );
|
|
var_8 thread monitor_touching();
|
|
}
|
|
|
|
level thread play_satellite_fx_on_model( var_9 );
|
|
var_9 playsoundonmovingent( "scn_satellite_entry" );
|
|
var_13 = var_7;
|
|
|
|
for ( var_14 = 0; isdefined( var_13.target ); var_13 = var_15 )
|
|
{
|
|
var_14++;
|
|
var_15 = common_scripts\utility::getstruct( var_13.target, "targetname" );
|
|
var_16 = distance( var_13.origin, var_15.origin );
|
|
var_17 = var_16 / var_12;
|
|
var_9 moveto( var_15.origin, var_17 );
|
|
level.satellite = var_9;
|
|
|
|
if ( var_14 == 1 )
|
|
var_9 rotatevelocity( ( -360, 0, 0 ), var_17 );
|
|
else
|
|
var_9 rotatevelocity( ( 0, 1500, 1500 ), var_17 );
|
|
|
|
var_9 waittill( "movedone" );
|
|
|
|
if ( var_14 == 1 )
|
|
{
|
|
var_2 scriptmodelclearanim();
|
|
var_2 scriptmodelplayanim( "mp_snow_tree_fall" );
|
|
common_scripts\utility::exploder( "2" );
|
|
|
|
foreach ( var_19 in level.players )
|
|
var_19 playrumbleonentity( "artillery_rumble" );
|
|
|
|
var_9 playsound( "scn_satellite_skip" );
|
|
continue;
|
|
}
|
|
|
|
common_scripts\utility::flag_clear( "satellite_incoming" );
|
|
satellite_flash( var_9.origin, 2000, 0, var_5 );
|
|
earthquake( 0.5, 3, var_9.origin, 2000 );
|
|
playfx( level._effect["satellite_fall_impact"], var_9.origin );
|
|
|
|
while ( level.ingraceperiod )
|
|
common_scripts\utility::waitframe();
|
|
|
|
foreach ( var_22 in level.characters )
|
|
{
|
|
if ( var_22 istouching( var_6 ) )
|
|
{
|
|
if ( isdefined( var_10 ) && ( !level.teambased || var_22.team != var_11 ) )
|
|
{
|
|
var_22 dodamage( var_22.health + 1000, var_22.origin, var_10, var_9, "MOD_EXPLOSIVE" );
|
|
continue;
|
|
}
|
|
|
|
var_22 maps\mp\_movers::mover_suicide();
|
|
}
|
|
}
|
|
|
|
if ( isdefined( level.littlebirds ) )
|
|
{
|
|
foreach ( var_25 in level.littlebirds )
|
|
{
|
|
if ( var_25 istouching( var_6 ) )
|
|
var_25 notify( "death" );
|
|
}
|
|
}
|
|
|
|
var_9 playsound( "scn_satellite_impact" );
|
|
common_scripts\utility::waitframe();
|
|
satellite_set_post_crash( var_3, var_4 );
|
|
}
|
|
|
|
if ( isdefined( var_8 ) )
|
|
{
|
|
var_8 unlink();
|
|
var_8.origin = var_8.start_origin;
|
|
var_8.angles = var_8.start_angles;
|
|
}
|
|
|
|
var_9 delete();
|
|
|
|
if ( !maps\mp\_utility::levelflag( "post_game_level_event_active" ) )
|
|
{
|
|
if ( !level.teambased && !isdefined( var_10 ) )
|
|
continue;
|
|
|
|
var_27 = common_scripts\utility::getstruct( "satellite_use_loc", "targetname" );
|
|
var_28 = spawn( "script_origin", var_27.origin );
|
|
var_28.angles = ( 0, 0, 0 );
|
|
var_28.owner = var_10;
|
|
var_28.team = var_11;
|
|
var_28.immediatedeath = 0;
|
|
|
|
if ( isdefined( var_10 ) )
|
|
var_28 setotherent( var_10 );
|
|
|
|
maps\mp\killstreaks\_uplink::adduplinktolevellist( var_28 );
|
|
var_29 = 0;
|
|
|
|
if ( !var_29 )
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
monitor_touching()
|
|
{
|
|
level endon( "satellite_crashed" );
|
|
|
|
for (;;)
|
|
{
|
|
if ( isdefined( level.littlebirds ) )
|
|
{
|
|
if ( level.littlebirds.size > 0 )
|
|
{
|
|
foreach ( var_1 in level.littlebirds )
|
|
{
|
|
if ( var_1 istouching( self ) )
|
|
var_1 notify( "death" );
|
|
}
|
|
}
|
|
}
|
|
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
}
|
|
|
|
satellite_set_post_crash( var_0, var_1 )
|
|
{
|
|
common_scripts\utility::flag_set( "satellite_crashed" );
|
|
|
|
foreach ( var_3 in level.players )
|
|
var_3 thread play_exploder_when_not_in_killcam();
|
|
|
|
var_0 satellite_group_hide();
|
|
var_1 satellite_group_show();
|
|
level thread play_crater_fire_on_connect();
|
|
}
|
|
|
|
play_exploder_when_not_in_killcam()
|
|
{
|
|
self endon( "disconnect" );
|
|
|
|
while ( maps\mp\_utility::isinkillcam() )
|
|
common_scripts\utility::waitframe();
|
|
|
|
common_scripts\utility::exploder( "32", self );
|
|
}
|
|
|
|
satellite_flash( var_0, var_1, var_2, var_3 )
|
|
{
|
|
foreach ( var_5 in level.players )
|
|
{
|
|
var_6 = var_5 geteye();
|
|
var_7 = var_0 - var_6;
|
|
var_8 = length( var_7 );
|
|
|
|
if ( var_8 > var_1 )
|
|
continue;
|
|
|
|
var_7 = vectornormalize( var_7 );
|
|
var_9 = anglestoforward( var_5 getplayerangles() );
|
|
var_10 = vectordot( var_9, var_7 );
|
|
|
|
if ( var_10 < var_2 )
|
|
continue;
|
|
|
|
if ( isdefined( var_3 ) )
|
|
{
|
|
if ( !var_5 istouching( var_3 ) )
|
|
continue;
|
|
}
|
|
|
|
var_5 shellshock( "flashbang_mp", max( 2.0, 4 * ( 1 - var_8 / var_1 ) ) );
|
|
}
|
|
}
|
|
|
|
satellite_group_hide()
|
|
{
|
|
if ( isdefined( self.satellite_group_hide ) && self.satellite_group_hide )
|
|
return;
|
|
|
|
self.satellite_group_hide = 1;
|
|
self.origin = self.origin - ( 0, 0, 1000 );
|
|
|
|
foreach ( var_1 in self.clip )
|
|
var_1 satellite_clip_hide();
|
|
|
|
self dontinterpolate();
|
|
}
|
|
|
|
satellite_clip_hide()
|
|
{
|
|
if ( is_dynamic_path() )
|
|
self connectpaths();
|
|
|
|
if ( is_ai_sight_line() )
|
|
self setaisightlinevisible( 0 );
|
|
|
|
maps\mp\_movers::notify_moving_platform_invalid();
|
|
self.old_contents = self setcontents( 0 );
|
|
self notsolid();
|
|
self hide();
|
|
}
|
|
|
|
satellite_group_show()
|
|
{
|
|
if ( isdefined( self.satellite_group_hide ) && !self.satellite_group_hide )
|
|
return;
|
|
|
|
self.satellite_group_hide = 0;
|
|
self.origin = self.origin + ( 0, 0, 1000 );
|
|
|
|
foreach ( var_1 in self.clip )
|
|
var_1 satellite_clip_show();
|
|
|
|
self dontinterpolate();
|
|
}
|
|
|
|
satellite_clip_show()
|
|
{
|
|
self solid();
|
|
self setcontents( self.old_contents );
|
|
self show();
|
|
|
|
if ( is_dynamic_path() )
|
|
self disconnectpaths();
|
|
|
|
if ( is_ai_sight_line() )
|
|
self setaisightlinevisible( 1 );
|
|
}
|
|
|
|
satellite_group( var_0 )
|
|
{
|
|
var_1 = common_scripts\utility::getstruct( var_0, "targetname" );
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
return undefined;
|
|
|
|
var_2 = spawn( "script_model", var_1.origin );
|
|
var_2 setmodel( "tag_origin" );
|
|
var_2.clip = [];
|
|
var_2.linked = [];
|
|
var_3 = getentarray( var_1.target, "targetname" );
|
|
|
|
foreach ( var_5 in var_3 )
|
|
{
|
|
if ( var_5.classname == "script_brushmodel" )
|
|
{
|
|
var_2.clip[var_2.clip.size] = var_5;
|
|
continue;
|
|
}
|
|
|
|
var_2.linked[var_2.linked.size] = var_5;
|
|
var_5 linkto( var_2 );
|
|
}
|
|
|
|
return var_2;
|
|
}
|
|
|
|
satellite_killstreak_wait()
|
|
{
|
|
level thread satellite_activate_at_end_of_match();
|
|
level thread satellite_killstreak_notify_wait();
|
|
level waittill( "satellite_start", var_0 );
|
|
return var_0;
|
|
}
|
|
|
|
satellite_activate_at_end_of_match()
|
|
{
|
|
level endon( "satellite_start" );
|
|
|
|
if ( !level.snow_satellite_allowed )
|
|
return;
|
|
|
|
level waittill( "spawning_intermission" );
|
|
level thread satellite_end_of_match();
|
|
level notify( "satellite_start" );
|
|
}
|
|
|
|
satellite_end_of_match()
|
|
{
|
|
maps\mp\_utility::levelflagset( "post_game_level_event_active" );
|
|
visionsetnaked( "", 0.5 );
|
|
wait 15;
|
|
maps\mp\_utility::levelflagclear( "post_game_level_event_active" );
|
|
}
|
|
|
|
satellite_killstreak_notify_wait()
|
|
{
|
|
level waittill( "snow_satellite_killstreak", var_0 );
|
|
level notify( "satellite_start", var_0 );
|
|
}
|
|
|
|
move_satellite( var_0 )
|
|
{
|
|
var_1 = self.origin;
|
|
var_2 = 3.0;
|
|
var_3 = 3.0;
|
|
|
|
for (;;)
|
|
{
|
|
self moveto( var_0, var_2, var_3, 0 );
|
|
wait( var_2 + 3.0 );
|
|
self moveto( var_1, 0.1 );
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
play_satellite_static_on_connect()
|
|
{
|
|
for (;;)
|
|
{
|
|
level waittill( "connected", var_0 );
|
|
var_0 thread run_func_after_spawn( ::satellite_static );
|
|
}
|
|
}
|
|
|
|
play_crater_fire_on_connect()
|
|
{
|
|
for (;;)
|
|
{
|
|
level waittill( "connected", var_0 );
|
|
var_0 thread run_func_after_spawn( ::call_fire_exploder_on_spawn );
|
|
}
|
|
}
|
|
|
|
call_fire_exploder_on_spawn()
|
|
{
|
|
self endon( "disconnect" );
|
|
common_scripts\utility::exploder( "32", self );
|
|
}
|
|
|
|
run_func_after_spawn( var_0 )
|
|
{
|
|
self endon( "disconnect" );
|
|
self endon( "death" );
|
|
self waittill( "spawned_player" );
|
|
self thread [[ var_0 ]]();
|
|
}
|
|
|
|
play_satellite_fx_on_model( var_0 )
|
|
{
|
|
playfxontag( level._effect["satellite_fall"], var_0, "tag_origin" );
|
|
playfxontag( level._effect["satellite_fall_child0"], var_0, "tag_origin" );
|
|
wait 0.7;
|
|
playfxontag( level._effect["satellite_fall_child1"], var_0, "tag_origin" );
|
|
wait 0.7;
|
|
playfxontag( level._effect["satellite_fall_child2"], var_0, "tag_origin" );
|
|
wait 0.7;
|
|
playfxontag( level._effect["satellite_fall_child3"], var_0, "tag_origin" );
|
|
wait 0.7;
|
|
playfxontag( level._effect["satellite_fall_child4"], var_0, "tag_origin" );
|
|
wait 0.7;
|
|
playfxontag( level._effect["satellite_fall_child5"], var_0, "tag_origin" );
|
|
wait 0.7;
|
|
playfxontag( level._effect["satellite_fall_child6"], var_0, "tag_origin" );
|
|
wait 0.7;
|
|
playfxontag( level._effect["satellite_fall_child7"], var_0, "tag_origin" );
|
|
wait 0.7;
|
|
playfxontag( level._effect["satellite_fall_child8"], var_0, "tag_origin" );
|
|
}
|
|
|
|
group_anim( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = getentarray( var_0, "targetname" );
|
|
|
|
foreach ( var_6 in var_4 )
|
|
{
|
|
if ( isdefined( var_2 ) && isdefined( var_3 ) )
|
|
wait( randomfloatrange( var_2, var_3 ) );
|
|
|
|
var_7 = spawn( "script_model", var_6.origin );
|
|
var_7.angles = ( 0, 0, 0 );
|
|
var_7 setmodel( "generic_prop_raven" );
|
|
var_6 linkto( var_7, "tag_origin" );
|
|
var_7 scriptmodelplayanimdeltamotion( var_1 );
|
|
|
|
if ( isdefined( var_6.target ) )
|
|
{
|
|
var_8 = getentarray( var_6.target, "targetname" );
|
|
|
|
foreach ( var_10 in var_8 )
|
|
var_10 linkto( var_7, "j_prop_1" );
|
|
}
|
|
}
|
|
}
|
|
|
|
rotating_windows()
|
|
{
|
|
var_0 = getentarray( "rotating_window", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::rotating_windows_init );
|
|
}
|
|
|
|
rotating_windows_init()
|
|
{
|
|
if ( !isdefined( self.target ) )
|
|
return;
|
|
|
|
var_0 = common_scripts\utility::getstructarray( self.target, "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
switch ( var_2.script_noteworthy )
|
|
{
|
|
case "open_angles":
|
|
self.open_angles = var_2.angles;
|
|
break;
|
|
case "closed_angles":
|
|
self.closed_angles = var_2.angles;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
var_4 = getentarray( self.target, "targetname" );
|
|
self.hide_when_closed = [];
|
|
|
|
foreach ( var_6 in var_4 )
|
|
{
|
|
switch ( var_6.script_noteworthy )
|
|
{
|
|
case "open_trigger":
|
|
self.open_trigger = var_6;
|
|
break;
|
|
case "close_trigger":
|
|
self.close_trigger = var_6;
|
|
break;
|
|
case "hide_when_closed":
|
|
self.hide_when_closed[self.hide_when_closed.size] = var_6;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
self setcandamage( 0 );
|
|
thread rotating_windows_run();
|
|
}
|
|
|
|
rotating_windows_run()
|
|
{
|
|
var_0 = spawn( "script_model", self.origin );
|
|
var_0.angles = self.open_angles;
|
|
var_0 setmodel( "tag_origin" );
|
|
self linkto( var_0, "tag_origin" );
|
|
var_1 = 0;
|
|
|
|
if ( isdefined( self.script_noteworthy ) && self.script_noteworthy == "start_closed" )
|
|
{
|
|
var_1 = 1;
|
|
self.open_trigger common_scripts\utility::trigger_off();
|
|
|
|
foreach ( var_3 in self.hide_when_closed )
|
|
var_3 hide();
|
|
}
|
|
else
|
|
{
|
|
self.close_trigger common_scripts\utility::trigger_off();
|
|
|
|
foreach ( var_3 in self.hide_when_closed )
|
|
var_3 show();
|
|
}
|
|
|
|
var_7 = angleclamp( self.closed_angles[0] - self.open_angles[0] );
|
|
|
|
for (;;)
|
|
{
|
|
if ( var_1 )
|
|
var_1 = 0;
|
|
else
|
|
{
|
|
self.open_trigger common_scripts\utility::trigger_off();
|
|
self.close_trigger common_scripts\utility::trigger_on();
|
|
self.close_trigger waittill( "trigger" );
|
|
|
|
foreach ( var_3 in self.hide_when_closed )
|
|
var_3 hide();
|
|
|
|
var_0 rotatepitch( var_7, 0.3, 0, 0 );
|
|
wait 1;
|
|
}
|
|
|
|
self.open_trigger common_scripts\utility::trigger_on();
|
|
self.close_trigger common_scripts\utility::trigger_off();
|
|
self.open_trigger waittill( "trigger" );
|
|
var_0 rotatepitch( -1 * var_7, 0.3, 0, 0 );
|
|
wait 0.3;
|
|
|
|
foreach ( var_3 in self.hide_when_closed )
|
|
var_3 show();
|
|
|
|
wait 0.7;
|
|
}
|
|
}
|
|
|
|
satellite_scrambler()
|
|
{
|
|
var_0 = common_scripts\utility::getstruct( "satellite_use_loc", "targetname" );
|
|
var_1 = spawn( "script_model", var_0.origin );
|
|
var_1.angles = var_0.angles;
|
|
var_1 makescrambler( self );
|
|
}
|
|
|
|
rotate_helicopter_rotor()
|
|
{
|
|
var_0 = getent( "heli_rotor_top", "targetname" );
|
|
var_0 rotatevelocity( ( 0, -300, 0 ), 36000, 0, 0 );
|
|
var_1 = getent( "heli_rotor_back", "targetname" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_1 rotatevelocity( ( -300, 0, 0 ), 36000, 0, 0 );
|
|
}
|
|
|
|
satellite_static()
|
|
{
|
|
self endon( "disconnect" );
|
|
var_0 = common_scripts\utility::getstruct( "satellite_use_loc", "targetname" );
|
|
maps\mp\killstreaks\_emp_common::staticfieldinit();
|
|
var_1 = 512;
|
|
var_2 = var_1 * var_1;
|
|
|
|
for (;;)
|
|
{
|
|
var_3 = length2dsquared( self.origin - var_0.origin ) < var_2;
|
|
|
|
if ( var_3 && common_scripts\utility::flag( "satellite_crashed" ) )
|
|
maps\mp\killstreaks\_emp_common::staticfieldsetstrength( 1 );
|
|
else
|
|
maps\mp\killstreaks\_emp_common::staticfieldsetstrength( 0 );
|
|
|
|
wait 0.5;
|
|
}
|
|
}
|
|
|
|
satellite_static_emp_watch()
|
|
{
|
|
level common_scripts\utility::waittill_either( "emp_update" );
|
|
}
|
|
|
|
ice()
|
|
{
|
|
var_0 = getentarray( "ice", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::ice_init );
|
|
}
|
|
|
|
ice_init()
|
|
{
|
|
self.start_origin = self.origin;
|
|
self.anim_ref = self;
|
|
var_0 = getentarray( self.target, "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
switch ( var_2.script_noteworthy )
|
|
{
|
|
case "border":
|
|
self.border = var_2;
|
|
break;
|
|
case "trigger_sink":
|
|
self.trigger = var_2;
|
|
self.trigger enablelinkto();
|
|
self.trigger linkto( self );
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
thread ice_damage_watch();
|
|
}
|
|
|
|
ice_damage_watch()
|
|
{
|
|
self setcandamage( 1 );
|
|
self.health = 30;
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "damage" );
|
|
|
|
if ( self.health <= 0 )
|
|
break;
|
|
}
|
|
|
|
if ( isdefined( self.script_fxid ) )
|
|
common_scripts\utility::exploder( self.script_fxid );
|
|
|
|
self playsound( "pond_ice_crack" );
|
|
self.border delete();
|
|
thread ice_float();
|
|
thread ice_player_watch();
|
|
thread ice_sink();
|
|
}
|
|
|
|
ice_float()
|
|
{
|
|
var_0 = 0;
|
|
|
|
for (;;)
|
|
{
|
|
var_1 = randomfloatrange( 3, 5 );
|
|
var_2 = ( randomfloatrange( -1, 1 ), randomfloatrange( -1, 1 ), randomfloatrange( -1, 1 ) );
|
|
var_2 = vectornormalize( var_2 );
|
|
var_2 = var_2 * 3;
|
|
|
|
if ( var_0 <= 2 )
|
|
{
|
|
var_2 = var_2 * ( 3 - var_0 );
|
|
var_1 = var_1 / ( 3 - var_0 );
|
|
}
|
|
|
|
self rotateto( var_2, var_1 );
|
|
self waittill( "rotatedone" );
|
|
var_0++;
|
|
}
|
|
}
|
|
|
|
ice_player_watch()
|
|
{
|
|
self.sink_time = 0;
|
|
|
|
for (;;)
|
|
{
|
|
self.trigger waittill( "trigger" );
|
|
self.sink_time = gettime() + 200;
|
|
}
|
|
}
|
|
|
|
ice_sink()
|
|
{
|
|
var_0 = 40;
|
|
var_1 = 20;
|
|
var_2 = self.start_origin;
|
|
var_3 = var_2 - ( 0, 0, 100 );
|
|
|
|
for (;;)
|
|
{
|
|
while ( self.sink_time < gettime() )
|
|
common_scripts\utility::waitframe();
|
|
|
|
var_4 = distance( self.origin, var_3 );
|
|
var_5 = var_4 / var_0;
|
|
self.anim_ref moveto( var_3, var_5 );
|
|
|
|
while ( self.sink_time >= gettime() )
|
|
common_scripts\utility::waitframe();
|
|
|
|
var_4 = distance( self.origin, var_2 );
|
|
var_5 = var_4 / var_1;
|
|
self.anim_ref moveto( var_2, var_5, 0, var_5 );
|
|
}
|
|
}
|
|
|
|
wait_game_percent_complete( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = var_0;
|
|
|
|
maps\mp\_utility::gameflagwait( "prematch_done" );
|
|
|
|
if ( !isdefined( level.starttime ) )
|
|
return;
|
|
|
|
var_2 = maps\mp\_utility::getscorelimit();
|
|
var_3 = maps\mp\_utility::gettimelimit() * 60;
|
|
var_4 = 0;
|
|
var_5 = 0;
|
|
|
|
if ( var_2 <= 0 && var_3 <= 0 )
|
|
{
|
|
var_4 = 1;
|
|
var_3 = 600;
|
|
}
|
|
else if ( var_2 <= 0 )
|
|
var_4 = 1;
|
|
else if ( var_3 <= 0 )
|
|
var_5 = 1;
|
|
|
|
var_6 = var_0 * var_3;
|
|
var_7 = var_1 * var_2;
|
|
var_8 = get_highest_score();
|
|
var_9 = ( gettime() - level.starttime ) / 1000;
|
|
|
|
if ( var_4 )
|
|
{
|
|
while ( var_9 < var_6 )
|
|
{
|
|
wait 0.5;
|
|
var_9 = ( gettime() - level.starttime ) / 1000;
|
|
}
|
|
}
|
|
else if ( var_5 )
|
|
{
|
|
while ( var_8 < var_7 )
|
|
{
|
|
wait 0.5;
|
|
var_8 = get_highest_score();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
while ( var_9 < var_6 && var_8 < var_7 )
|
|
{
|
|
wait 0.5;
|
|
var_8 = get_highest_score();
|
|
var_9 = ( gettime() - level.starttime ) / 1000;
|
|
}
|
|
}
|
|
}
|
|
|
|
get_highest_score()
|
|
{
|
|
var_0 = 0;
|
|
|
|
if ( level.teambased )
|
|
{
|
|
if ( isdefined( game["teamScores"] ) )
|
|
{
|
|
var_0 = game["teamScores"]["allies"];
|
|
|
|
if ( game["teamScores"]["axis"] > var_0 )
|
|
var_0 = game["teamScores"]["axis"];
|
|
}
|
|
}
|
|
else if ( isdefined( level.players ) )
|
|
{
|
|
foreach ( var_2 in level.players )
|
|
{
|
|
if ( isdefined( var_2.score ) && var_2.score > var_0 )
|
|
var_0 = var_2.score;
|
|
}
|
|
}
|
|
|
|
return var_0;
|
|
}
|
|
|
|
snowcustomcratefunc()
|
|
{
|
|
if ( !isdefined( game["player_holding_level_killstrek"] ) )
|
|
game["player_holding_level_killstrek"] = 0;
|
|
|
|
if ( !level.snow_satellite_allowed || game["player_holding_level_killstrek"] )
|
|
return;
|
|
|
|
maps\mp\killstreaks\_airdrop::addcratetype( "airdrop_assault", "snow_satellite", 55, maps\mp\killstreaks\_airdrop::killstreakcratethink, maps\mp\killstreaks\_airdrop::get_friendly_crate_model(), maps\mp\killstreaks\_airdrop::get_enemy_crate_model(), &"KILLSTREAKS_HINTS_SNOW_SATELLITE" );
|
|
level thread watch_for_snow_satellite_crate();
|
|
}
|
|
|
|
watch_for_snow_satellite_crate()
|
|
{
|
|
for (;;)
|
|
{
|
|
level waittill( "createAirDropCrate", var_0 );
|
|
|
|
if ( isdefined( var_0 ) && isdefined( var_0.cratetype ) && var_0.cratetype == "snow_satellite" )
|
|
{
|
|
disable_snow_satellite();
|
|
var_1 = wait_for_capture( var_0 );
|
|
|
|
if ( !var_1 )
|
|
{
|
|
maps\mp\killstreaks\_airdrop::changecrateweight( "airdrop_assault", "snow_satellite", 55 );
|
|
continue;
|
|
}
|
|
|
|
game["player_holding_level_killstrek"] = 1;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
wait_for_capture( var_0 )
|
|
{
|
|
var_1 = watch_for_air_drop_death( var_0 );
|
|
return !isdefined( var_1 );
|
|
}
|
|
|
|
watch_for_air_drop_death( var_0 )
|
|
{
|
|
var_0 endon( "captured" );
|
|
var_0 waittill( "death" );
|
|
waittillframeend;
|
|
return 1;
|
|
}
|
|
|
|
disable_snow_satellite()
|
|
{
|
|
maps\mp\killstreaks\_airdrop::changecrateweight( "airdrop_assault", "snow_satellite", 0 );
|
|
}
|
|
|
|
snowcustomkillstreakfunc()
|
|
{
|
|
level.killstreakfuncs["snow_satellite"] = ::tryusesnowsatellite;
|
|
level.killstreakweildweapons["snow_satellite_mp"] = "snow_satellite";
|
|
}
|
|
|
|
snowcustombotkillstreakfunc()
|
|
{
|
|
maps\mp\bots\_bots_ks::bot_register_killstreak_func( "snow_satellite", maps\mp\bots\_bots_ks::bot_killstreak_simple_use );
|
|
}
|
|
|
|
tryusesnowsatellite( var_0, var_1 )
|
|
{
|
|
game["player_holding_level_killstrek"] = 0;
|
|
level notify( "snow_satellite_killstreak", self );
|
|
return 1;
|
|
}
|