884 lines
20 KiB
Plaintext
884 lines
20 KiB
Plaintext
#include common_scripts\utility;
|
|
#include maps\mp\_utility;
|
|
#include maps\mp\gametypes\_hud_util;
|
|
|
|
main()
|
|
{
|
|
maps\mp\mp_strikezone_precache::main();
|
|
maps\createart\mp_strikezone_art::main();
|
|
maps\mp\mp_strikezone_fx::main();
|
|
|
|
maps\mp\_teleport::main();
|
|
maps\mp\_teleport::teleport_set_minimap_for_zone("start", "compass_map_mp_strikezone");
|
|
maps\mp\_teleport::teleport_set_minimap_for_zone("destroyed", "compass_map_mp_strikezone_after");
|
|
maps\mp\_teleport::teleport_set_a10_splines_for_zone("start", [1,2,3,4], [2,1,4,3]);
|
|
maps\mp\_teleport::teleport_set_a10_splines_for_zone("destroyed", [5,6,7,8], [6,5,8,7]);
|
|
maps\mp\_teleport::teleport_origin_use_offset(false);
|
|
|
|
maps\mp\_teleport::teleport_set_pre_func( ::pre_teleport, "destroyed");
|
|
maps\mp\_teleport::teleport_set_post_func( ::post_teleport, "destroyed");
|
|
|
|
maps\mp\_teleport::teleport_set_post_func( ::pre_teleport_to_start, "start");
|
|
|
|
level.doNuke_fx = ::doNuke_fx_strikezone;
|
|
|
|
level thread sunflare();
|
|
level thread flip_sky();
|
|
level thread init_destroyed_zone();
|
|
|
|
level.mapCustomCrateFunc = ::strikezoneCustomCrateFunc;
|
|
level.mapCustomKillstreakFunc = ::strikezoneCustomKillstreakFunc;
|
|
level.mapCustomBotKillstreakFunc = ::strikezoneCustomBotKillstreakFunc;
|
|
|
|
maps\mp\_load::main();
|
|
thread maps\mp\_fx::func_glass_handler(); // Text on glass
|
|
|
|
flag_init("nuke_event_active");
|
|
|
|
level.vision_set_stage = 0;
|
|
|
|
setdvar("r_reactiveMotionWindAmplitudeScale", .3);
|
|
setdvar("r_reactiveMotionWindFrequencyScale", .5);
|
|
|
|
setdvar( "r_lightGridEnableTweaks", 1 );
|
|
setdvar( "r_lightGridIntensity", 1.33 );
|
|
setdvar_cg_ng( "r_diffuseColorScale" , 1.639, 1.5 );
|
|
setdvar_cg_ng( "r_specularcolorscale", 2.5, 3 );
|
|
setdvar( "r_ssaorejectdepth", 1500);
|
|
setdvar( "r_ssaofadedepth", 1200);
|
|
|
|
|
|
game["attackers"] = "allies";
|
|
game["defenders"] = "axis";
|
|
|
|
game[ "allies_outfit" ] = "urban";
|
|
game[ "axis_outfit" ] = "desert";
|
|
|
|
if( level.ps3 )
|
|
{
|
|
setdvar( "sm_sunShadowScale", "0.6" ); // optimization
|
|
}
|
|
else if( level.xenon )
|
|
{
|
|
setdvar( "sm_sunShadowScale", "0.7" ); // optimization
|
|
}
|
|
|
|
|
|
level.pre_org = getstruct("world_origin_pre", "targetname");
|
|
level.post_org = getstruct("world_origin_post", "targetname");
|
|
level.mid_z = 0;
|
|
if(IsDefined(level.post_org) && IsDefined(level.pre_org))
|
|
{
|
|
level.mid_z = (level.pre_org.origin[2] + level.post_org.origin[2])/2;
|
|
}
|
|
|
|
flag_init( "teleport_to_destroyed" );
|
|
flag_init( "start_fog_fade_in" );
|
|
flag_init( "start_fog_fade_out" );
|
|
|
|
level thread nuke_activate_at_end_of_match();
|
|
//level thread generic_swing_ents();
|
|
level thread fall_objects();
|
|
|
|
level thread ronnie_talks();
|
|
|
|
level thread connect_watch();
|
|
/#
|
|
level thread vision_set_stage_test();
|
|
#/
|
|
level thread initExtraCollision();
|
|
}
|
|
|
|
/#
|
|
vision_set_stage_test()
|
|
{
|
|
SetDevDvar("vision_set_stage_fade_time", "1");
|
|
dvar_name = "vision_set_stage";
|
|
default_value = -1;
|
|
SetDevDvarIfUninitialized(dvar_name, default_value);
|
|
while(1)
|
|
{
|
|
value = GetDvarInt(dvar_name, default_value);
|
|
if(value<0)
|
|
{
|
|
waitframe();
|
|
}
|
|
else
|
|
{
|
|
set_vision_set_stage(value, GetDvarFloat("vision_set_stage_fade_time"));
|
|
SetDvar(dvar_name, default_value);
|
|
}
|
|
}
|
|
}
|
|
#/
|
|
|
|
initExtraCollision()
|
|
{
|
|
collision1 = GetEnt( "clip128x128x128", "targetname" );
|
|
collision1Ent = spawn( "script_model", (1488, 448, 34992) );
|
|
collision1Ent.angles = ( 0, 0, 0);
|
|
collision1Ent CloneBrushmodelToScriptmodel( collision1 );
|
|
|
|
collision2 = GetEnt( "clip256x256x8", "targetname" );
|
|
collision2Ent = spawn( "script_model", (-1589.73, 167.941, 34846) );
|
|
collision2Ent.angles = ( 7.64427, 359.534, -40.4325 );
|
|
collision2Ent CloneBrushmodelToScriptmodel( collision2 );
|
|
|
|
//next gen displacement bugs
|
|
if ( is_gen4() )
|
|
{
|
|
//IWSIX-148692
|
|
collision3 = GetEnt( "player256x256x128", "targetname" );
|
|
collision3Ent = spawn( "script_model", (1091.96, -1218, 35088) );
|
|
collision3Ent.angles = ( 0, 60, -90 );
|
|
collision3Ent CloneBrushmodelToScriptmodel( collision3 );
|
|
|
|
//IWSIX-148679
|
|
collision4 = GetEnt( "player256x256x128", "targetname" );
|
|
collision4Ent = spawn( "script_model", (1314.31, -727.89, 34967.3) );
|
|
collision4Ent.angles = ( 345.369, 351.123, 18.9223 );
|
|
collision4Ent CloneBrushmodelToScriptmodel( collision4 );
|
|
|
|
//IWSIX-148673
|
|
collision5 = GetEnt( "player256x256x128", "targetname" );
|
|
collision5Ent = spawn( "script_model", (955.98, 485.142, 34875.7) );
|
|
collision5Ent.angles = ( 336.26, 306.702, -30.7675 );
|
|
collision5Ent CloneBrushmodelToScriptmodel( collision5 );
|
|
}
|
|
}
|
|
|
|
flip_sky()
|
|
{
|
|
sky = GetEnt("after_sky", "targetname");
|
|
if(IsDefined(sky))
|
|
{
|
|
sky.angles = (180,0,0);
|
|
}
|
|
}
|
|
|
|
connect_watch()
|
|
{
|
|
while(1)
|
|
{
|
|
level waittill("connected", player);
|
|
if(IsDefined(level.vision_set_stage))
|
|
player VisionSetStage(level.vision_set_stage, .1);
|
|
|
|
player thread watch_throwing_knife();
|
|
PlayFXOnTagForClients(level._effect["vfx_sunflare"],level.sunflare_ent,"tag_origin",player);
|
|
}
|
|
}
|
|
|
|
watch_throwing_knife()
|
|
{
|
|
self endon( "disconnect" );
|
|
|
|
while(1)
|
|
{
|
|
self waittill( "grenade_fire", knife, weaponName );
|
|
if( IsDefined(weaponName) && IsDefined(knife) && weaponName == "throwingknife_mp")
|
|
{
|
|
level thread watch_throwing_knife_land(knife);
|
|
}
|
|
}
|
|
}
|
|
|
|
watch_throwing_knife_land(knife)
|
|
{
|
|
knife endon("death");
|
|
|
|
knife waittill("missile_stuck", hitEnt);
|
|
|
|
level notify("hit_by_knife", knife, hitEnt);
|
|
}
|
|
|
|
sunflare()
|
|
{
|
|
pre_nuke_origin = (-2827.98, -25930.5, 12914.9);
|
|
pre_nuke_angles = (270, 0, 0);
|
|
|
|
post_nuke_origin = (-1831.25, -12492.3, 41020.6);
|
|
post_nuke_angles = (270, 0, 0);
|
|
|
|
level.sunflare_ent = spawn("script_model", pre_nuke_origin);
|
|
level.sunflare_ent SetModel("tag_origin");
|
|
level.sunflare_ent.angles = pre_nuke_angles;
|
|
|
|
flag_wait("teleport_setup_complete");
|
|
if(level.teleport_zone_current != "start")
|
|
{
|
|
level.sunflare_ent.origin = post_nuke_origin;
|
|
level.sunflare_ent.angles = post_nuke_angles;
|
|
}
|
|
|
|
while(1)
|
|
{
|
|
level waittill("teleport_to_zone", new_zone_name);
|
|
if(new_zone_name == "start")
|
|
{
|
|
level.sunflare_ent.origin = pre_nuke_origin;
|
|
level.sunflare_ent.angles = pre_nuke_angles;
|
|
}
|
|
else
|
|
{
|
|
level.sunflare_ent.origin = post_nuke_origin;
|
|
level.sunflare_ent.angles = post_nuke_angles;
|
|
}
|
|
}
|
|
}
|
|
|
|
init_destroyed_zone()
|
|
{
|
|
flag_wait("teleport_setup_complete");
|
|
if(level.teleport_zone_current != "start")
|
|
{
|
|
destroyed_fire_fx();
|
|
}
|
|
}
|
|
|
|
doNuke_fx_strikezone()
|
|
{
|
|
if(!level.allow_level_killstreak)
|
|
return false;
|
|
|
|
game["player_holding_level_killstrek"] = false;
|
|
disable_strikezone_rog();
|
|
thread maps\mp\_teleport::teleport_to_zone("destroyed");
|
|
|
|
return true;
|
|
}
|
|
|
|
pre_teleport()
|
|
{
|
|
level notify("nuke_start");
|
|
flag_set("nuke_event_active");
|
|
|
|
level.allow_level_killstreak = false;
|
|
|
|
level.disable_killcam = true;
|
|
maps\mp\gametypes\_damage::eraseFinalKillCam();
|
|
|
|
if(!levelFlag( "post_game_level_event_active" ))
|
|
{
|
|
maps\mp\gametypes\_hostmigration::waitLongDurationWithHostMigrationPause(level.nukeTimer-2);
|
|
}
|
|
|
|
fx_to_flash_time = 2;
|
|
slow_mo_time = .2;
|
|
flash_fade_in_time = .1;
|
|
|
|
|
|
level thread nuke_earthquake(.3, fx_to_flash_time);
|
|
thread nuke_fx_exploders(2);
|
|
level.nuke_fx_start_time = GetTime();
|
|
exploder(60);
|
|
level thread nuke_sounds();
|
|
|
|
maps\mp\gametypes\_hostmigration::waitLongDurationWithHostMigrationPause( fx_to_flash_time );
|
|
|
|
//remove all TI for infected
|
|
foreach ( player in level.players )
|
|
{
|
|
if ( isDefined( player.setSpawnPoint ) )
|
|
player maps\mp\perks\_perkfunctions::deleteTI( player.setSpawnPoint );
|
|
}
|
|
|
|
level thread nuke_slow_motion( .1, slow_mo_time + flash_fade_in_time, 0 );
|
|
maps\mp\gametypes\_hostmigration::waitLongDurationWithHostMigrationPause( slow_mo_time );
|
|
|
|
level thread nuke_earthquake(.5, 5);
|
|
level thread rumble_all_players( "hijack_plane_medium" );
|
|
level thread nuke_ground_tilt();
|
|
if(!levelFlag( "post_game_level_event_active" ) && IsDefined(level.nukeInfo.team))
|
|
level thread maps\mp\killstreaks\_nuke::nukeDeath();
|
|
|
|
VisionSetNaked("mp_strikezone_flash", flash_fade_in_time);
|
|
maps\mp\gametypes\_hostmigration::waitLongDurationWithHostMigrationPause( flash_fade_in_time );
|
|
wait .1;
|
|
exploder(70, undefined, (level.nuke_fx_start_time/1000));
|
|
flag_set( "teleport_to_destroyed" );
|
|
}
|
|
|
|
post_teleport()
|
|
{
|
|
level thread maps\mp\killstreaks\_nuke::nukeClearTimer();
|
|
level thread updateMLGCameras();
|
|
|
|
if ( level.gametype == "grnd" )
|
|
level thread maps\mp\gametypes\grnd::cycleZones();
|
|
|
|
flash_fade_out_time = 0.5;
|
|
explosion_vision_time = 2.5;
|
|
explosion_vision_fade_out_time = 3.5;
|
|
nuke_blur(3, .1);
|
|
|
|
flag_set( "start_fog_fade_out" );
|
|
VisionSetNaked("mp_strikezone_explosion", flash_fade_out_time);
|
|
|
|
waitframe();
|
|
|
|
level thread nuke_slow_motion( 0, flash_fade_out_time, 1 );
|
|
maps\mp\gametypes\_hostmigration::waitLongDurationWithHostMigrationPause( flash_fade_out_time );
|
|
nuke_blur(0, explosion_vision_time+2);
|
|
maps\mp\gametypes\_hostmigration::waitLongDurationWithHostMigrationPause( explosion_vision_time );
|
|
|
|
VisionSetNaked("mp_strikezone_after", explosion_vision_fade_out_time);
|
|
SetExpFog(431.294, 2011.37, 0.54, 0.54, 0.54, 1, 0.5, explosion_vision_fade_out_time, 0.92, 0.69, 0.44, 1, (-0.05, -0.89, 0.44), 0, 100, 0.625, 1, 140.897, 114.026);
|
|
wait explosion_vision_fade_out_time;
|
|
VisionSetNaked("", 0);
|
|
ClearFog(0);
|
|
level.disable_killcam = false;
|
|
flag_clear("nuke_event_active");
|
|
}
|
|
|
|
updateMLGCameras()
|
|
{
|
|
if ( level.gameEnded )
|
|
return;
|
|
|
|
foreach ( player in level.players )
|
|
{
|
|
if ( isAI( player ) )
|
|
continue;
|
|
|
|
//Setting MLG camera positions
|
|
player setmlgcameradefaults( 0, level.Camera5Pos, level.Camera5Ang );
|
|
player setmlgcameradefaults( 1, level.Camera6Pos, level.Camera6Ang );
|
|
player setmlgcameradefaults( 2, level.Camera7Pos, level.Camera7Ang );
|
|
player setmlgcameradefaults( 3, level.Camera8Pos, level.Camera8Ang );
|
|
}
|
|
}
|
|
|
|
pre_teleport_to_start()
|
|
{
|
|
VisionSetNaked("", 0);
|
|
}
|
|
|
|
nuke_activate_at_end_of_match()
|
|
{
|
|
level endon("nuke_start");
|
|
|
|
flag_wait("teleport_setup_complete");
|
|
|
|
level waittill ( "spawning_intermission" );
|
|
if(level.allow_level_killstreak)
|
|
level thread nuke_end_of_match();
|
|
}
|
|
|
|
nuke_end_of_match()
|
|
{
|
|
levelFlagSet( "post_game_level_event_active" );
|
|
visionSetNaked( "", 0.5 );
|
|
|
|
maps\mp\_teleport::teleport_to_zone("destroyed");
|
|
|
|
wait 5;
|
|
|
|
levelFlagClear( "post_game_level_event_active" );
|
|
}
|
|
|
|
nuke_fx_exploders(delay_time)
|
|
{
|
|
if(isDefined(delay_time) && delay_time>0)
|
|
wait delay_time;
|
|
|
|
exploder(2);
|
|
wait(2);
|
|
destroyed_fire_fx();
|
|
wait(2.5);
|
|
exploder(19);
|
|
wait(4.8);
|
|
exploder(23);
|
|
}
|
|
|
|
destroyed_fire_fx()
|
|
{
|
|
exploder_with_connect_watch(8, -2);
|
|
}
|
|
|
|
exploder_with_connect_watch(num, startTime)
|
|
{
|
|
exploder(num, undefined, startTime);
|
|
level thread exploder_connect_watch(num, startTime);
|
|
}
|
|
|
|
exploder_connect_watch(num, startTime)
|
|
{
|
|
while(1)
|
|
{
|
|
level waittill( "connected", player );
|
|
exploder(num, player, startTime);
|
|
}
|
|
}
|
|
|
|
set_vision_set_stage(stage, time)
|
|
{
|
|
if(!isDefined(time))
|
|
time = 1.0;
|
|
|
|
foreach(player in level.players)
|
|
{
|
|
player VisionSetStage(stage, time);
|
|
}
|
|
|
|
level.vision_set_stage = stage;
|
|
}
|
|
|
|
set_all_players_undying(enable)
|
|
{
|
|
if(!IsDefined(level.players_undying))
|
|
level.players_undying = false;
|
|
|
|
if(enable == level.players_undying)
|
|
return;
|
|
|
|
if(enable)
|
|
{
|
|
level.prev_modifyPlayerDamage = level.modifyPlayerDamage;
|
|
level.modifyPlayerDamage = ::undying;
|
|
}
|
|
else
|
|
{
|
|
level.modifyPlayerDamage = level.prev_modifyPlayerDamage;
|
|
}
|
|
|
|
level.players_undying = enable;
|
|
}
|
|
|
|
undying(victim, eAttacker, iDamage, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc)
|
|
{
|
|
if(IsDefined(victim))
|
|
{
|
|
return victim.health-1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
nuke_slow_motion( transition_to_slow, players_are_slow, transition_to_normal )
|
|
{
|
|
SetSlowMotion( 1.0, 0.25, transition_to_slow );
|
|
wait( players_are_slow );
|
|
SetSlowMotion( 0.25, 1, transition_to_normal );
|
|
}
|
|
|
|
nuke_earthquake(scale, time)
|
|
{
|
|
quakes = getstructarray("nuke_earthquake", "targetname");
|
|
foreach(quake in quakes)
|
|
{
|
|
Earthquake(scale, time, quake.origin, quake.radius);
|
|
}
|
|
}
|
|
|
|
nuke_sounds()
|
|
{
|
|
move_dist = 40000;
|
|
move_dir = AnglesToForward((319.008, 265.869, 88.6746));
|
|
end_point = (-3892.33, 1244.78, -156.711);
|
|
start_point = end_point + move_dir*move_dist;
|
|
|
|
playSoundAtPos(start_point, "kem_launch");
|
|
|
|
move_time = 2;
|
|
sound_mover = spawn("script_model", start_point);
|
|
sound_mover SetModel("tag_origin");
|
|
sound_mover delayCall(0.05, ::PlaySoundOnMovingEnt, "kem_incoming");
|
|
//sound_mover PlaySoundOnMovingEnt("kem_incoming");
|
|
sound_mover MoveTo(end_point, move_time);
|
|
maps\mp\gametypes\_hostmigration::waitLongDurationWithHostMigrationPause( move_time );
|
|
|
|
if( !IsDefined( level.nuke_soundObject ) )
|
|
{
|
|
level.nuke_soundObject = Spawn( "script_origin", (0,0,1) );
|
|
level.nuke_soundObject hide();
|
|
}
|
|
level.nuke_soundObject PlaySound( "kem_explosion" );
|
|
}
|
|
|
|
nuke_ground_tilt()
|
|
{
|
|
start = SpawnStruct();
|
|
end = SpawnStruct();
|
|
|
|
kick_time = .2;
|
|
unkick_time = 1;
|
|
kick_angle = 20;
|
|
|
|
ground_ent = Spawn("script_model", (0,0,0));
|
|
ground_ent.angles = (0,0,0);
|
|
|
|
foreach(player in level.players)
|
|
{
|
|
player PlayerSetGroundReferenceEnt(ground_ent);
|
|
}
|
|
|
|
|
|
ground_ent Rotateto((kick_angle, 0, 0), kick_time, 0, kick_time);
|
|
|
|
wait kick_time;
|
|
|
|
ground_ent Rotateto((0, 0, 0), unkick_time, 0, unkick_time);
|
|
|
|
wait unkick_time;
|
|
|
|
foreach(player in level.players)
|
|
{
|
|
player PlayerSetGroundReferenceEnt(undefined);
|
|
}
|
|
|
|
ground_ent Delete();
|
|
}
|
|
|
|
nuke_blur(scale, blend_time)
|
|
{
|
|
foreach( player in level.players )
|
|
{
|
|
player SetBlurForPlayer(scale, blend_time);
|
|
}
|
|
}
|
|
|
|
rumble_all_players( rumble, loop )
|
|
{
|
|
if ( !IsDefined( loop ) )
|
|
loop = false;
|
|
|
|
foreach ( player in level.players )
|
|
{
|
|
if ( loop )
|
|
{
|
|
player PlayRumbleLoopOnEntity( rumble );
|
|
}
|
|
else
|
|
{
|
|
player PlayRumbleOnEntity( rumble );
|
|
}
|
|
}
|
|
|
|
if ( !loop )
|
|
return;
|
|
|
|
level waittill( "stop_rumble_loop" );
|
|
|
|
foreach ( player in level.players )
|
|
{
|
|
player StopRumble( rumble );
|
|
}
|
|
}
|
|
|
|
stop_rumble_all_players()
|
|
{
|
|
level notify("stop_rumble_loop");
|
|
}
|
|
|
|
generic_swing_ents()
|
|
{
|
|
swing_anims = [];
|
|
swing_anims["small"] = "mp_strikezone_chunk_sway_small";
|
|
swing_anims["large"] = "mp_strikezone_chunk_sway_large";
|
|
|
|
foreach(key,value in swing_anims)
|
|
{
|
|
PrecacheMpAnim(value);
|
|
}
|
|
|
|
swing_origins = GetEntArray("generic_swing", "targetname");
|
|
|
|
foreach(swing in swing_origins)
|
|
{
|
|
if(!IsDefined(swing.angles))
|
|
swing.angles = (0,0,0);
|
|
|
|
pivot = Spawn("script_model", swing.origin);
|
|
pivot.angles = swing.angles;
|
|
pivot SetModel("generic_prop_raven");
|
|
|
|
swing linkto(pivot, "j_prop_1");
|
|
|
|
|
|
anim_name = "small";
|
|
if(IsDefined(swing.script_noteworthy) && IsDefined(swing_anims[swing.script_noteworthy]))
|
|
{
|
|
anim_name = swing.script_noteworthy;
|
|
}
|
|
|
|
pivot ScriptModelPlayAnim(swing_anims[swing.script_noteworthy]);
|
|
}
|
|
|
|
}
|
|
|
|
fall_objects()
|
|
{
|
|
objects = GetEntArray("fall_object", "targetname");
|
|
array_thread(objects, ::fall_object_init);
|
|
}
|
|
|
|
fall_object_init()
|
|
{
|
|
self.end = self;
|
|
|
|
things = [];
|
|
|
|
if(IsDefined(self.target))
|
|
{
|
|
structs = getstructarray(self.target, "targetname");
|
|
set_default_script_noteworthy(structs, "angle_ref");
|
|
things = array_combine(things, structs);
|
|
|
|
ents = GetEntArray(self.target, "targetname");
|
|
things = array_combine(things, ents);
|
|
}
|
|
|
|
if(IsDefined(self.script_linkto))
|
|
{
|
|
structs = getstructarray(self.script_linkto, "script_linkname");
|
|
set_default_script_noteworthy(structs, "start");
|
|
things = array_combine(things, structs);
|
|
|
|
ents = GetEntArray(self.script_linkto, "script_linkname");
|
|
things = array_combine(things, ents);
|
|
}
|
|
|
|
foreach(thing in things)
|
|
{
|
|
if(!IsDefined(thing.script_noteworthy))
|
|
continue;
|
|
|
|
switch(thing.script_noteworthy)
|
|
{
|
|
case "angle_ref":
|
|
self.end = thing;
|
|
break;
|
|
case "start":
|
|
self.start = thing;
|
|
break;
|
|
case "link":
|
|
thing linkto(self);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
set_default_angles(things);
|
|
|
|
if(IsDefined(self.start) && IsDefined(self.end))
|
|
self thread fall_object_run();
|
|
}
|
|
|
|
set_default_script_noteworthy(things, noteworthy)
|
|
{
|
|
if(!IsDefined(things))
|
|
return;
|
|
|
|
if(!IsDefined(noteworthy))
|
|
noteworthy = "";
|
|
|
|
if(!isArray(things))
|
|
things = [things];
|
|
|
|
foreach(thing in things)
|
|
{
|
|
if(!IsDefined(thing.script_noteworthy))
|
|
thing.script_noteworthy = noteworthy;
|
|
}
|
|
}
|
|
|
|
set_default_angles(things, angles)
|
|
{
|
|
if(!IsDefined(things))
|
|
return;
|
|
|
|
if(!IsDefined(angles))
|
|
angles = (0,0,0);
|
|
|
|
if(!isArray(things))
|
|
things = [things];
|
|
|
|
foreach(thing in things)
|
|
{
|
|
if(!IsDefined(thing.angles))
|
|
thing.angles = angles;
|
|
}
|
|
}
|
|
|
|
fall_object_run()
|
|
{
|
|
fall_to_origin = self.origin;
|
|
fall_to_angles = self.angles;
|
|
|
|
|
|
trans = TransformMove(self.start.origin, self.start.angles, self.end.origin, self.end.angles, self.origin, self.angles);
|
|
self.origin = trans["origin"];
|
|
self.angles = trans["angles"];
|
|
|
|
|
|
flag_wait( "start_fog_fade_out" );
|
|
|
|
wait RandomFloatRange(0.8,1.0);
|
|
|
|
if(IsDefined(self.script_delay))
|
|
{
|
|
if(self.script_delay<0)
|
|
self.script_delay = RandomFloatRange(30, 120);
|
|
|
|
wait self.script_delay;
|
|
}
|
|
|
|
PlaySoundAtPos(self.origin, "cobra_helicopter_crash");
|
|
|
|
fall_speed = RandomFloatRange(300,320);
|
|
dist = Distance(fall_to_origin, self.origin);
|
|
time = dist/fall_speed;
|
|
|
|
self moveTo(fall_to_origin, time, time, 0);
|
|
if(fall_to_angles != self.angles)
|
|
self RotateTo(fall_to_angles, time, 0, 0);
|
|
|
|
wait time;
|
|
|
|
|
|
}
|
|
|
|
ronnie_talks()
|
|
{
|
|
ronnie_vo = [];
|
|
ronnie_vo["low"] = [];
|
|
ronnie_vo["high"] = [];
|
|
|
|
ronnie_vo["high"][0] = "mp_strikezone_hdg_01";
|
|
ronnie_vo["high"][1] = "mp_strikezone_hdg_02";
|
|
ronnie_vo["high"][2] = "mp_strikezone_hdg_03";
|
|
ronnie_vo["high"][3] = "mp_strikezone_hdg_05";
|
|
ronnie_vo["high"][4] = "mp_strikezone_hdg_06";
|
|
ronnie_vo["high"][4] = "mp_strikezone_hdg_07";
|
|
ronnie_vo["high"][4] = "mp_strikezone_hdg_09";
|
|
|
|
ronnie_vo["low"][0] = "mp_strikezone_hdg_04";
|
|
ronnie_vo["low"][1] = "mp_strikezone_hdg_08";
|
|
ronnie_vo["low"][2] = "mp_strikezone_hdg_10";
|
|
|
|
locs = GetEntArray("ronnie_talk_location", "targetname");
|
|
array_thread(locs, ::ronnie_knife_watcher);
|
|
|
|
while(1)
|
|
{
|
|
level waittill("ronnie_speak", trigger);
|
|
|
|
vo = random(ronnie_vo[trigger.script_noteworthy]);
|
|
playSoundAtPos( trigger.origin, vo);
|
|
}
|
|
}
|
|
|
|
ronnie_knife_watcher()
|
|
{
|
|
self endon("death");
|
|
while(1)
|
|
{
|
|
level waittill("hit_by_knife", knife, hitEnt);
|
|
if(IsDefined(knife))
|
|
{
|
|
if(knife IsTouching(self))
|
|
{
|
|
level notify("ronnie_speak", self);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
STRIKEZONE_ROG_WEIGHT = 55;
|
|
strikezoneCustomCrateFunc()
|
|
{
|
|
if(!IsDefined(game["player_holding_level_killstrek"]))
|
|
game["player_holding_level_killstrek"] = false;
|
|
|
|
level.allow_level_killstreak = allowLevelKillstreaks();
|
|
if(!level.allow_level_killstreak || game["player_holding_level_killstrek"])
|
|
return;
|
|
|
|
maps\mp\killstreaks\_airdrop::addCrateType( "airdrop_assault", "nuke", STRIKEZONE_ROG_WEIGHT, maps\mp\killstreaks\_airdrop::killstreakCrateThink, maps\mp\killstreaks\_airdrop::get_friendly_crate_model(), maps\mp\killstreaks\_airdrop::get_enemy_crate_model(), &"KILLSTREAKS_HINTS_STRIKEZONE_ROG" );
|
|
level thread strikezone_rog_post_teleport_init();
|
|
}
|
|
|
|
strikezone_rog_post_teleport_init()
|
|
{
|
|
flag_wait("teleport_setup_complete");
|
|
|
|
if(level.teleport_allowed)
|
|
{
|
|
if( level.allow_level_killstreak )
|
|
level thread watch_for_strikezone_rog_crate();
|
|
}
|
|
else
|
|
{
|
|
level.allow_level_killstreak = false;
|
|
disable_strikezone_rog();
|
|
}
|
|
}
|
|
|
|
watch_for_strikezone_rog_crate()
|
|
{
|
|
while(1)
|
|
{
|
|
level waittill("createAirDropCrate", dropCrate);
|
|
|
|
if(IsDefined(dropCrate) && IsDefined(dropCrate.crateType) && dropCrate.crateType=="nuke")
|
|
{
|
|
//Only allow RoG killstreak once
|
|
disable_strikezone_rog();
|
|
|
|
captured = wait_for_capture(dropCrate);
|
|
|
|
if(!captured)
|
|
{
|
|
//reEnable RoG care packages if it expires with out anyone picking it up
|
|
enable_strikezone_rog();
|
|
}
|
|
else
|
|
{
|
|
//Once its picked up it needs to remain off.
|
|
game["player_holding_level_killstrek"] = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//death and capture are sent on the same frame but death is processed first :(
|
|
wait_for_capture(dropCrate)
|
|
{
|
|
result = watch_for_air_drop_death(dropCrate);
|
|
return !IsDefined(result); //If !isdefined the captured notify was also sent.
|
|
}
|
|
|
|
watch_for_air_drop_death(dropCrate)
|
|
{
|
|
dropCrate endon("captured");
|
|
|
|
dropCrate waittill("death");
|
|
waittillframeend;
|
|
|
|
return true;
|
|
}
|
|
|
|
enable_strikezone_rog()
|
|
{
|
|
maps\mp\killstreaks\_airdrop::changeCrateWeight("airdrop_assault", "nuke", STRIKEZONE_ROG_WEIGHT);
|
|
}
|
|
|
|
disable_strikezone_rog()
|
|
{
|
|
maps\mp\killstreaks\_airdrop::changeCrateWeight("airdrop_assault", "nuke", 0);
|
|
}
|
|
|
|
strikezoneCustomKillstreakFunc()
|
|
{
|
|
AddDebugCommand("devgui_cmd \"MP/Killstreak/Level Event:5/Care Package/Strikezone RoG\" \"set scr_devgivecarepackage nuke; set scr_devgivecarepackagetype airdrop_assault\"\n");
|
|
AddDebugCommand("devgui_cmd \"MP/Killstreak/Level Event:5/Strikezone RoG\" \"set scr_givekillstreak nuke\"\n");
|
|
}
|
|
|
|
strikezoneCustomBotKillstreakFunc()
|
|
{
|
|
AddDebugCommand("devgui_cmd \"MP/Bots(Killstreak)/Level Events:5/Strikezone RoG\" \"set scr_testclients_givekillstreak nuke\"\n");
|
|
}
|