#include maps\mp\_utility; #include common_scripts\utility; #include maps\mp\alien\_utility; #include maps\mp\alien\_hive; /*QUAKED mp_alien_spawn_group0_start (0.5 0.0 1.0) (-16 -16 0) (16 16 72) Team 0 players spawn at one of these positions at the start of a round.*/ /*QUAKED mp_alien_spawn_group1_start (0.5 0.0 1.0) (-16 -16 0) (16 16 72) Team 1 players spawn at one of these positions at the start of a round.*/ /*QUAKED mp_alien_spawn_group2_start (0.5 0.0 1.0) (-16 -16 0) (16 16 72) Team 2 players spawn at one of these positions at the start of a round.*/ /*QUAKED mp_alien_spawn_group3_start (0.5 0.0 1.0) (-16 -16 0) (16 16 72) Team 3 players spawn at one of these positions at the start of a round.*/ main() { level.additional_boss_weapon = ::update_weapon_placement; // <-- used to either spawn additional weapons, or replace exiting weapons //for introscreen text level.introscreen_line_1 = &"MP_ALIEN_TOWN_INTRO_LINE_1"; level.introscreen_line_2 = &"MP_ALIEN_TOWN_INTRO_LINE_2"; level.introscreen_line_3 = &"MP_ALIEN_TOWN_INTRO_LINE_3"; level.introscreen_line_4 = &"MP_ALIEN_TOWN_INTRO_LINE_4"; level.intro_dialogue_func = ::mp_alien_town_intro_dialog; level.postIntroscreenFunc = ::mp_alien_town_post_intro_func; level.custom_onStartGameTypeFunc = ::mp_alien_town_onStartGameTypeFunc; level.alien_character_cac_table = "mp/alien/alien_cac_presets.csv"; level.initial_spawn_loc_override_func = ::player_initial_spawn_loc_override; level.custom_pillageInitFunc = ::mp_alien_town_pillage_init; level.tryUseDroneHive= ::mp_alien_town_try_use_drone_hive; //ark weapon alien gib death level._effect[ "alien_ark_gib" ] = loadfx( "vfx/gameplay/alien/vfx_alien_ark_gib_01" ); level.custom_alien_death_func = maps\mp\alien\_death::general_alien_custom_death; if ( is_chaos_mode() ) level.adjust_spawnLocation_func = ::town_chaos_adjust_spawnLocation; //enables mist for this level, a level needs mist setup to work //level.alien_player_spawn_group = true; // switches for alien mode systems alien_mode_enable( "kill_resource", "wave", "airdrop", "lurker", "collectible", "loot", "pillage", "challenge", "outline", "scenes" ); alien_areas = [ "lodge", "city", "lake" ]; alien_area_init( alien_areas ); level.alien_challenge_table = "mp/alien/mp_alien_town_challenges.csv"; level.include_default_challenges = true; level.include_default_achievements = true; level.include_default_unlocks = true; level.escape_cycle = 15; //hardcore ricochet variables level.ricochetDamageMax = 10; level.hardcore_spawn_multiplier = 1.0; level.hardcore_damage_scalar = 1.0; level.hardcore_health_scalar = 1.0; level.hardcore_reward_scalar = 1.0; level.hardcore_score_scalar = 1.25; //casual gamemode settings level.casual_spawn_multiplier = 1.0; level.casual_damage_scalar = 0.45; level.casual_health_scalar = 0.45; level.casual_reward_scalar = 1.0; level.casual_score_scalar = 0.5; //level.casual_xp_scalar = 0.5; maps\mp\mp_alien_town_precache::main(); maps\createart\mp_alien_town_art::main(); maps\mp\mp_alien_town_fx::main(); //reactive grass rates setdvar( "r_reactiveMotionWindAmplitudeScale", 0.15 ); level.craftingEasy = 0; level.craftingMedium = 0; level.craftingHard = 0; maps\mp\_load::main(); //Sun Shadows (orig=1 bmax=0.25) setdvar_cg_ng( "sm_sunShadowScale", 0.5, 1.0 ); setdvar_cg_ng( "r_specularColorScale", 2.5, 9.01 ); //Set Spec colorscale dvar to make up for differentials between CG and NG //setsaveddvar_cg_ng( "r_specularColorScale", 2.5, 9.01 ); // AmbientPlay( "ambient_mp_setup_template" ); //maps\mp\_compass::setupMiniMap( "compass_map_mp_alien_town" ); game["attackers"] = "allies"; game["defenders"] = "axis"; game[ "allies_outfit" ] = "woodland"; // game[ "axis_outfit" ] = "desert"; // blocker hive cycle label blocker_hives = []; blocker_hives[ 5 ] = "lodge_lung_3"; blocker_hives[ 9 ] = "city_lung_5"; cycle_end_area_list = [ 5, 9 ]; maps\mp\gametypes\aliens::setup_cycle_end_area_list( cycle_end_area_list ); maps\mp\gametypes\aliens::setup_blocker_hives( blocker_hives ); maps\mp\gametypes\aliens::setup_last_hive( "crater_lung" ); // Turn on the player abilities thread maps\mp\alien\_alien_class_skills_main::main(); level.custom_onSpawnPlayer_func = ::mp_alien_town_onSpawnPlayer_func; crater_dependencies = ["lake_lung_1", "lake_lung_2", "lake_lung_3", "lake_lung_4", "lake_lung_5", "lake_lung_6"]; add_hive_dependencies( "crater_lung", crater_dependencies ); lodge_lung_dependencies = [ "mini_lung" ]; add_hive_dependencies( "lodge_lung_1", lodge_lung_dependencies ); add_hive_dependencies( "lodge_lung_2", lodge_lung_dependencies ); add_hive_dependencies( "lodge_lung_3", lodge_lung_dependencies ); add_hive_dependencies( "lodge_lung_4", lodge_lung_dependencies ); add_hive_dependencies( "lodge_lung_5", lodge_lung_dependencies ); add_hive_dependencies( "lodge_lung_6", lodge_lung_dependencies ); //thread test_meteoroid(); level.hintprecachefunc = ::town_hint_precache; // The time breakdown that determines the escape rank on the leaderboard TIME_LEFT_RANK_0 = 85000; // in ms TIME_LEFT_RANK_1 = 95000; // in ms TIME_LEFT_RANK_2 = 105000; // in ms TIME_LEFT_RANK_3 = 240000; // in ms maps\mp\alien\_persistence::register_LB_escape_rank( [ 0, TIME_LEFT_RANK_0, TIME_LEFT_RANK_1, TIME_LEFT_RANK_2, TIME_LEFT_RANK_3 ] ); level.should_play_next_hive_vo_func =::should_play_next_hive_vo_func; register_encounters(); restore_fog_setting(); nuke_fog_setting(); rescue_waypoint_setting(); set_spawn_table(); // ambient tremors amb_quakes(); // =============================== TU FIXES ============================== // FIX: electric fence in city not high enough to shock aliens level thread TU_electric_fence_fix(); //Change thermal to mp_alien_town_thermal game[ "thermal_vision" ] = "mp_alien_town_thermal"; VisionSetThermal( game[ "thermal_vision" ] ); game[ "thermal_vision_trinity" ] = "mp_alien_thermal_trinity"; level thread initSpawnableCollision(); level.skip_radius_damage_on_puddles = true; level thread maps\mp\alien\_lasedStrike_alien::init(); level thread maps\mp\alien\_switchblade_alien::init(); array_thread( getEntArray( "killstreak_attack_chopper", "targetname" ), ::attack_chopper_monitorUse ); } register_encounters() { if ( is_chaos_mode() ) { /*0*/ maps\mp\gametypes\aliens::register_encounter( ::chaos_init , undefined, undefined, undefined, ::chaos_init , maps\mp\alien\_globallogic::blank ); /*1*/ maps\mp\gametypes\aliens::register_encounter( maps\mp\alien\_chaos::chaos, undefined, undefined, undefined, maps\mp\alien\_chaos::chaos, maps\mp\alien\_globallogic::blank ); return; } // Set up the encounter /*0*/ maps\mp\gametypes\aliens::register_encounter( ::encounter_init, undefined, undefined, undefined, ::encounter_init, maps\mp\alien\_globallogic::blank ); /*1*/ maps\mp\gametypes\aliens::register_encounter( ::regular_hive, 1, undefined, undefined, ::skip_hive, ::jump_to_1st_area, ::beat_regular_hive ); /*2*/ maps\mp\gametypes\aliens::register_encounter( ::regular_hive, 1, undefined, undefined, ::skip_hive, ::jump_to_lodge, ::beat_regular_hive ); /*3*/ maps\mp\gametypes\aliens::register_encounter( ::regular_hive, 1, undefined, undefined, ::skip_hive, ::jump_to_lodge, ::beat_regular_hive ); /*4*/ maps\mp\gametypes\aliens::register_encounter( ::regular_hive, 1, undefined, undefined, ::skip_hive, ::jump_to_lodge, ::beat_regular_hive ); /*5*/ maps\mp\gametypes\aliens::register_encounter( ::blocker_hive, 1, 1, true, ::skip_hive, ::jump_to_lodge, ::beat_blocker_hive ); /*6*/ maps\mp\gametypes\aliens::register_encounter( ::regular_hive, 1, undefined, undefined, ::skip_hive, ::jump_to_city, ::beat_regular_hive ); /*7*/ maps\mp\gametypes\aliens::register_encounter( ::regular_hive, 1, undefined, undefined, ::skip_hive, ::jump_to_city, ::beat_regular_hive ); /*8*/ maps\mp\gametypes\aliens::register_encounter( ::regular_hive, 1, undefined, undefined, ::skip_hive, ::jump_to_city, ::beat_regular_hive ); /*9*/ maps\mp\gametypes\aliens::register_encounter( ::blocker_hive, 1, 1, true, ::skip_hive, ::jump_to_city, ::beat_blocker_hive ); /*10*/ maps\mp\gametypes\aliens::register_encounter( ::regular_hive, 1, undefined, undefined, ::skip_hive, ::jump_to_cabin, ::beat_regular_hive ); /*11*/ maps\mp\gametypes\aliens::register_encounter( ::regular_hive, 1, undefined, undefined, ::skip_hive, ::jump_to_cabin, ::beat_regular_hive ); /*12*/ maps\mp\gametypes\aliens::register_encounter( ::regular_hive, 1, undefined, undefined, ::skip_hive, ::jump_to_cabin, ::beat_regular_hive ); /*13*/ maps\mp\gametypes\aliens::register_encounter( ::regular_hive, 1, undefined, undefined, ::skip_hive, ::jump_to_cabin, ::beat_regular_hive ); /*14*/ maps\mp\gametypes\aliens::register_encounter( ::regular_hive, 1, undefined, undefined, ::skip_hive, ::jump_to_crater_hive, ::beat_regular_hive ); /*15*/ maps\mp\gametypes\aliens::register_encounter( maps\mp\alien\_airdrop::escape , undefined, undefined, undefined, ::skip_escape, ::jump_to_escape ); } initSpawnableCollision() { level waittill("spawn_nondeterministic_entities" ); collision1 = GetEnt( "player512x512x8", "targetname" ); collision1Ent = spawn( "script_model", (-5332.5, -4394, 774.5) ); collision1Ent.angles = ( 90, 274, 7); collision1Ent CloneBrushmodelToScriptmodel( collision1 ); //collision1Ent thread draw_entity_bounds( collision1Ent, 1000, (1,1,1 ) ); } encounter_init() { maps\mp\alien\_drill::init_drill(); init_hives(); maps\mp\alien\_airdrop::init_escape(); maps\mp\alien\_gamescore::init_eog_score_components( ["hive", "escape", "relics"] ); maps\mp\alien\_gamescore::init_encounter_score_components( ["challenge", "drill", "team", "team_blocker", "personal", "personal_blocker", "escape"] ); } town_hint_precache() { all_hints_array = []; all_hints_array[ "ALIEN_COLLECTIBLES_PICKUP_MAUL" ] = &"ALIEN_COLLECTIBLES_PICKUP_MAUL"; all_hints_array[ "ALIEN_COLLECTIBLES_PICKUP_AK12" ] = &"ALIEN_COLLECTIBLES_PICKUP_AK12"; all_hints_array[ "ALIEN_COLLECTIBLES_PICKUP_M27" ] = &"ALIEN_COLLECTIBLES_PICKUP_M27"; all_hints_array[ "ALIEN_COLLECTIBLES_PICKUP_PROPANE_TANK" ] = &"ALIEN_COLLECTIBLES_PICKUP_PROPANE_TANK"; all_hints_array[ "ALIEN_COLLECTIBLES_PICKUP_MK32" ] = &"ALIEN_COLLECTIBLES_PICKUP_MK32"; all_hints_array[ "ALIEN_COLLECTIBLES_PICKUP_HONEYBADGER" ] = &"ALIEN_COLLECTIBLES_PICKUP_HONEYBADGER"; all_hints_array[ "ALIEN_COLLECTIBLES_PICKUP_VKS" ] = &"ALIEN_COLLECTIBLES_PICKUP_VKS"; all_hints_array[ "ALIEN_COLLECTIBLES_PICKUP_FP6" ] = &"ALIEN_COLLECTIBLES_PICKUP_FP6"; all_hints_array[ "ALIEN_COLLECTIBLES_PICKUP_KRISS" ] = &"ALIEN_COLLECTIBLES_PICKUP_KRISS"; all_hints_array[ "ALIEN_COLLECTIBLES_PICKUP_MICROTAR" ] = &"ALIEN_COLLECTIBLES_PICKUP_MICROTAR"; all_hints_array[ "ALIEN_COLLECTIBLES_PICKUP_P226" ] = &"ALIEN_COLLECTIBLES_PICKUP_P226"; all_hints_array[ "ALIEN_COLLECTIBLES_PICKUP_L115A3" ] = &"ALIEN_COLLECTIBLES_PICKUP_L115A3"; all_hints_array[ "ALIEN_COLLECTIBLES_PICKUP_SC2010" ] = &"ALIEN_COLLECTIBLES_PICKUP_SC2010"; all_hints_array[ "ALIEN_COLLECTIBLES_PICKUP_KAC" ] = &"ALIEN_COLLECTIBLES_PICKUP_KAC"; all_hints_array[ "ALIEN_COLLECTIBLES_PICKUP_IMBEL" ] = &"ALIEN_COLLECTIBLES_PICKUP_IMBEL"; all_hints_array[ "ALIEN_COLLECTIBLES_PICKUP_MTS255" ] = &"ALIEN_COLLECTIBLES_PICKUP_MTS255"; all_hints_array[ "ALIEN_COLLECTIBLES_PICKUP_PANZERFAUST" ] = &"ALIEN_COLLECTIBLES_PICKUP_PANZERFAUST"; all_hints_array[ "ALIEN_COLLECTIBLES_PICKUP_CBJMS" ] = &"ALIEN_COLLECTIBLES_PICKUP_CBJMS"; all_hints_array[ "ALIEN_COLLECTIBLES_PICKUP_PP19" ] = &"ALIEN_COLLECTIBLES_PICKUP_PP19"; all_hints_array[ "ALIEN_COLLECTIBLES_PICKUP_VEPR" ] = &"ALIEN_COLLECTIBLES_PICKUP_VEPR"; all_hints_array[ "ALIEN_COLLECTIBLES_PICKUP_BREN" ] = &"ALIEN_COLLECTIBLES_PICKUP_BREN"; all_hints_array[ "ALIEN_COLLECTIBLES_PICKUP_RGM" ] = &"ALIEN_COLLECTIBLES_PICKUP_RGM"; all_hints_array[ "ALIEN_COLLECTIBLES_PICKUP_G28" ] = &"ALIEN_COLLECTIBLES_PICKUP_G28"; return all_hints_array; } // for rescue chopper extraction waypoint hint locations, chained up rescue_waypoint_setting() { escape_ent = getent( "escape_zone", "targetname" ); assertex( isdefined( escape_ent ), "Level missing escape_zone" ); final_waypoint_loc = escape_ent.origin; level.rescue_waypoint_locs = []; level.rescue_waypoint_locs[ 0 ] = ( -3152, 1356, 610 ); level.rescue_waypoint_locs[ 1 ] = ( -5081, -2715, 522 ); level.rescue_waypoint_locs[ 2 ] = ( -1105, -1760, 831 ); level.rescue_waypoint_locs[ 3 ] = final_waypoint_loc; level.rescue_waypoint_locs[ 4 ] = final_waypoint_loc; } restore_fog_setting() { // values grabbed from mp_alien_town_art ent = SpawnStruct(); ent.HDRColorIntensity = 1; ent.HDRSunColorIntensity = 1; ent.startDist = 0; ent.halfwayDist = 2048; ent.red = 0.206; ent.green = 0.255; ent.blue = 0.317; ent.maxOpacity = 0.5; ent.transitionTime = 0; //Sun Fog ent.sunFogEnabled = 1; ent.sunRed = 0.791; ent.sunGreen = 0.435; ent.sunBlue = 0.331; ent.sunDir = (-0.893, 0.273, 0.35); ent.sunBeginFadeAngle = 8; ent.sunEndFadeAngle = 64; ent.normalFogScale = 0.06; //Sky Fog ent.skyFogIntensity = 1.0; ent.skyFogMinAngle = 30; ent.skyFogMaxAngle = 67; level.restore_fog_setting = ent; } nuke_fog_setting() { // values grabbed from mp_alien_town_art ent = SpawnStruct(); if (is_gen4()) { //Alien Nuke_NG //NG_Fog ent.startDist = 0; ent.halfwayDist = 2048; ent.red = 0.498; ent.green = 0.343; ent.blue = 0.192; ent.HDRColorIntensity = 1.25; ent.maxOpacity = 0.5; ent.transitionTime = 0; //NG_Sun Fog ent.sunFogEnabled = 1; ent.sunRed = 0.791; ent.sunGreen = 0.435; ent.sunBlue = 0.331; ent.HDRSunColorIntensity = 1.25; ent.sunDir = (-0.893, 0.273, 0.35); ent.sunBeginFadeAngle = 0; ent.sunEndFadeAngle = 160; ent.normalFogScale = 0.01; //NG_Sky Fog ent.skyFogIntensity = 0.9; ent.skyFogMinAngle = 30; ent.skyFogMaxAngle = 71; } else { // current gen //Fog ent.startDist = 0; ent.halfwayDist = 2048; ent.red = 0.498; ent.green = 0.343; ent.blue = 0.192; ent.maxOpacity = 0.5; ent.transitionTime = 0; //Sun Fog ent.sunFogEnabled = 1; ent.sunRed = 0.791; ent.sunGreen = 0.435; ent.sunBlue = 0.331; ent.sunDir = (-0.893, 0.273, 0.35); ent.sunBeginFadeAngle = 0; ent.sunEndFadeAngle = 160; ent.normalFogScale = 0.01; //Sky Fog ent.skyFogIntensity = 0.9; ent.skyFogMinAngle = 30; ent.skyFogMaxAngle = 71; ent.HDROverride = "alien_nuke_HDR"; } level.nuke_fog_setting = ent; } /# test_meteoroid() { wait 10; thread maps\mp\alien\_spawnlogic::spawn_alien_meteoroid( "minion" ); wait 2; thread maps\mp\alien\_spawnlogic::spawn_alien_meteoroid( "minion" ); wait 10; thread maps\mp\alien\_spawnlogic::spawn_alien_meteoroid( "minion" ); } #/ // ambient quakes and tremors triggered by players in map amb_quakes() { level.quake_trigs = getentarray( "quake_trig", "targetname" ); foreach ( quake_trig in level.quake_trigs ) quake_trig thread run_quake_scene(); } run_quake_scene() { level endon( "game_ended" ); // self is trig wait 5; // wait till players connects // setup self.movables = []; self.fx = []; if ( isdefined( self.target ) ) { targeted_ents = getentarray( self.target, "targetname" ); foreach ( targeted_ent in targeted_ents ) { if ( !isdefined( targeted_ent.script_noteworthy ) ) continue; if ( targeted_ent.script_noteworthy == "moveable" ) self.movables[ self.movables.size ] = targeted_ent; if ( targeted_ent.script_noteworthy == "fx" ) self.fx[ self.fx.size ] = targeted_ent; } } inner_radius = self.radius; outter_radius = self.script_radius; quake_origin = self.origin; // run main loop count = 1; while ( count ) { foreach ( player in level.players ) { if ( isalive( player ) && player IsTouching( self ) ) { player PlaySound( "elm_quake_rumble" ); wait 0.25; Earthquake( 0.3, 3, quake_origin, outter_radius ); PhysicsJitter( quake_origin, outter_radius, inner_radius, 4.0, 6.0 ); player PlayRumbleOnEntity( "heavy_3s" ); //heavy_3s //heavygun_fire foreach ( movable in self.movables ) self thread quake_rotate( movable ); count--; wait RandomIntRange( 20, 30 ); break; } } wait 1; // slower sample rate } } quake_rotate( movable_ent ) { self notify( "moving" ); self endon( "moving" ); // self is trig // movable_ent has target struct as move/rotate to reference moveto_ent = getstruct( movable_ent.target, "targetname" ); assert( isdefined( moveto_ent ) ); original_angles = movable_ent.angles; moveto_angles = moveto_ent.angles; oscillation = 5; move_interval = 0.8; // rotate for ( i = 0; i< oscillation; i++ ) { angles = angles_frac( original_angles, moveto_angles, 1 - ( i / oscillation ) ); interval = move_interval * ( ( i + 1 ) / oscillation ); movable_ent rotateto( angles, interval ); wait interval; movable_ent rotateto( original_angles, interval ); wait interval; } } angles_frac( angles_1, angles_2, fraction ) { fraction *= fraction; pitch = angles_1[ 0 ] + ( angles_2[ 0 ] - angles_1[ 0 ] ) * fraction; yaw = angles_1[ 1 ] + ( angles_2[ 1 ] - angles_1[ 1 ] ) * fraction; roll = angles_1[ 2 ] + ( angles_2[ 2 ] - angles_1[ 2 ] ) * fraction; return ( pitch, yaw, roll ); } mp_alien_town_intro_dialog() { wait ( 2 ); sound_ent = spawn( "script_origin",( 0,0,0 ) ); sound_ent thread maps\mp\alien\_music_and_dialog::play_pilot_vo ("so_alien_plt_introlastsquad"); level waittill( "introscreen_over" ); sound_ent delaythread (0.067, maps\mp\alien\_music_and_dialog::play_pilot_vo ,"so_alien_plt_introunearthed"); sound_ent delaythread ( 4.667, maps\mp\alien\_music_and_dialog::play_pilot_vo,"so_alien_plt_introdrill"); sound_ent delaythread ( 15.767, maps\mp\alien\_music_and_dialog::play_pilot_vo,"so_alien_goodluck"); level delaythread( 17.5, maps\mp\alien\_music_and_dialog::PlayVOForIntro ); wait ( 20 ); sound_ent delete(); } should_play_next_hive_vo_func() { if ( level.cycle_count + 1 == 14 ) //no VO if this is the last hive return false; if ( flag_exist( "hives_cleared" ) && flag( "hives_cleared") ) //no "post hive" VO after the last hive is destroyed return false; return ( !isDefined( level.blocker_hives[ level.cycle_count + 1 ] ) ); //test for the blocker hive being the next hive } //this gets run just as the intro screen is finishing , but before the fadein starts mp_alien_town_post_intro_func() { //force a weapon switch at this point for all players foreach ( player in level.players ) { if ( isDefined ( player.default_starting_pistol ) ) player SwitchToWeapon ( player.default_starting_pistol ); } } //for level specific functions that need to kick off on gametype startup mp_alien_town_onStartGameTypeFunc() { level mp_alien_town_pillage_modification(); level alter_drill_locations(); } mp_alien_town_pillage_modification() { //fix broken pillage spots distcheck = 10*10; //within 10 units pillage_areas = getstructarray( "pillage_area","targetname" ); foreach( index,area in pillage_areas) { pillage_spots = getstructarray( area.target,"targetname" ); foreach ( spot in pillage_spots ) { if ( DistanceSquared( spot.origin, (-3771, 1288, 830) ) <= distcheck ) //fixing a bug where one of the spots spawned the trophy in the wall with no use prompt. { spot.origin = spot.origin + ( 0, 15, -4 ); return; } } } } // Move the drill locations in script to make sure they're in safe locations alter_drill_locations() { set_drill_location( "city_lung_4", ( -4285.85, -3098.1, 550.75 ), ( 2.87763, 77.0197, -2.07208 ) ); set_drill_location( "lake_lung_1", ( -3286.2, 699.453, 671.517 ), ( 356.167, 249.913, 1.77588 ) ); set_drill_location( "lake_lung_2", ( -1620.41, 1558.15, 758 ), ( 0, 161.813, 0 ) ); set_drill_location( "lake_lung_3", ( -3542.69, 2058.54, 570.984 ), ( 0.647456, 186.237, -1.42968 ) ); set_drill_location( "lake_lung_4", ( -2977.48, 1790.44, 565.36 ), ( 358.167, 184.775, -5.04523 ) ); set_drill_location( "lake_lung_6", ( -2769.68, 3698.48, 419.95 ), ( 359.953, 22.833, -10.9619 ) ); set_drill_location( "crater_lung", ( -4375.36, 3138.18, 285.152 ), ( 356.676, 249.752, 12.7989 ) ); } set_drill_location( target_name, location, orientation ) { drillLocation = GetEnt( target_name, "target" ); if ( IsDefined( drillLocation ) ) { drillLocation.origin = location; drillLocation.angles = orientation; } } TU_electric_fence_fix() { while ( !isdefined( level.electric_fences ) ) wait 0.05; wait 5; foreach ( fence in level.electric_fences ) { // parcing target name due to possibility of prefab prefixing to auto target labeler target_name = fence.generator.target; target_name_array = StrTok( fence.generator.target, "_" ); if ( target_name_array.size > 0 ) { foreach ( name in target_name_array ) { if ( IsSubStr( name, "auto" ) ) target_name = name; } } if ( isdefined( fence.generator.target ) && ( target_name == "auto92" ) ) fence.shock_trig.origin += ( 0, 0, 30 ); if ( isdefined( fence.generator.target ) && ( target_name == "auto3" ) ) { fence.shock_trig.origin += ( 102, 64, 30 ); fence.shock_damage = 800; // shock damage override because we can no longer adjust fence height in bsp to increase damage } } } player_initial_spawn_loc_override() { /# if ( alien_mode_has( "nogame" ) ) return; #/ if ( is_chaos_mode() ) { chaos_player_initial_spawn_loc_override(); return; } AFTER_NUKE_ACTIVATION_SPAWN_ORIGIN = ( -4297, 3215, 303 ); AFTER_NUKE_ACTIVATION_SPAWN_ANGLES = ( 0, -6, 0 ); if ( flag( "nuke_countdown" ) ) { self.forceSpawnOrigin = AFTER_NUKE_ACTIVATION_SPAWN_ORIGIN; self.forceSpawnAngles = AFTER_NUKE_ACTIVATION_SPAWN_ANGLES; } } skip_escape() { } chaos_player_initial_spawn_loc_override() { location_list = []; angle_list = []; switch( get_chaos_area() ) { case "lodge": location_list = [ ( 410, -1084, 708.838 ), ( 559, -1239, 705.007 ), ( 753, -1115, 709.901 ), ( 532, -930, 703.947 ) ]; angle_list = [ ( 0, 210, 0 ), ( 0, 210, 0 ), ( 0, 345, 0 ), ( 0, 345, 0 ) ]; break; case "city": location_list = [ ( -4449, -2801, 535.798 ), ( -4496, -3085, 539.619 ), ( -4300, -3088, 549.954 ), ( -4209, -3326, 552.298 ) ]; angle_list = [ ( 0, 210, 0 ), ( 0, 210, 0 ), ( 0, 345, 0 ), ( 0, 345, 0 ) ]; break; case "cabin": location_list = [ ( -2105, 2215, 580 ), ( -2029, 2103, 579 ), ( -3462, 1786, 573 ), ( -3451, 1892, 565 ) ]; angle_list = [ ( 0, 210, 0 ), ( 0, 210, 0 ), ( 0, 345, 0 ), ( 0, 345, 0 ) ]; break; } self.forceSpawnOrigin = location_list[ level.players.size ]; self.forceSpawnAngles = angle_list [ level.players.size ]; } mp_alien_town_try_use_drone_hive( rank, num_missiles, missile_name, altitude, baby_missile_name ) { self maps\mp\alien\_switchblade_alien::tryUseDroneHive( rank, num_missiles, missile_name, altitude, baby_missile_name ); } //***************************************************************** // Attack chopper use //***************************************************************** CONST_CHOPPER_COST = 6000; CONST_CHOPPER_COST_SOLO = 3000; CONST_CHOPPER_UNIT_COST = 1000; CONST_CHOPPER_LOOPS = 6; CONST_CHOPPER_LOOPS_SOLO = 4; remove_upon_escape_sequence() { level waittill( "all_players_using_nuke" ); self delete(); } attack_chopper_monitorUse() { level endon( "game_ended" ); level endon( "all_players_using_nuke" ); // can't use during ending escape! too easy and its double chopper self thread remove_upon_escape_sequence(); self endon( "death" ); self SetCursorHint( "HINT_NOICON" ); self SetHintString( &"ALIEN_COLLECTIBLES_ACTIVATE_ATTACK_CHOPPER" ); self MakeUsable(); // wait before players are ready, we decide how to setup usage based on match type while ( !isdefined( level.players ) || level.players.size < 1 ) wait 0.05; if ( isPlayingSolo() ) { level.chopper_cost = CONST_CHOPPER_COST_SOLO; level.chopper_loops = CONST_CHOPPER_LOOPS_SOLO; } else { level.chopper_cost = CONST_CHOPPER_COST; level.chopper_loops = CONST_CHOPPER_LOOPS; } // wait till features are defined by level script wait 0.05; if ( alien_mode_has( "outline" ) ) maps\mp\alien\_outline_proto::add_to_outline_watch_list( self, CONST_CHOPPER_UNIT_COST ); // shared between multiple chopper call nodes level.attack_chopper_pot = 0; level.attack_chopper_reward_pool = []; while ( true ) { self waittill ( "trigger", player ); if ( !isPlayer ( player ) ) { wait 0.05; continue; } if ( level.attack_chopper_pot >= level.chopper_cost ) { wait 0.05; continue; } if ( !chopper_active() ) { if ( player can_purchase_chopper() ) { player maps\mp\alien\_persistence::take_player_currency( CONST_CHOPPER_UNIT_COST, false, "trap" ); level.attack_chopper_pot += CONST_CHOPPER_UNIT_COST; level.attack_chopper_reward_pool[ level.attack_chopper_reward_pool.size ] = player; if ( level.attack_chopper_pot >= level.chopper_cost ) { //reset level.attack_chopper_pot = 0; level thread maps\mp\alien\_airdrop::call_in_attack_heli( level.chopper_loops, level.attack_chopper_reward_pool ); level thread maps\mp\alien\_music_and_dialog::playVOforAttackChopper( player ); level.attack_chopper_reward_pool = []; // incoming splash thread teamPlayerCardSplash( "attack_chopper_enroute", player, player.team ); self SetHintString( "" ); if ( alien_mode_has( "outline" ) ) maps\mp\alien\_outline_proto::remove_from_outline_watch_list( self ); while ( chopper_active() ) wait 1; if ( alien_mode_has( "outline" ) ) maps\mp\alien\_outline_proto::add_to_outline_watch_list( self, CONST_CHOPPER_UNIT_COST ); self SetHintString( &"ALIEN_COLLECTIBLES_ACTIVATE_ATTACK_CHOPPER" ); } else { if ( isPlayingSolo() ) player thread maps\mp\gametypes\_hud_message::playerCardSplashNotify( "attack_chopper_pot_solo", player, level.attack_chopper_pot ); else thread teamPlayerCardSplash( "attack_chopper_pot", player, player.team, level.attack_chopper_pot ); if ( is_chaos_mode() ) iprintlnBold( "$" + level.attack_chopper_pot + " / $" + level.chopper_cost ); self MakeUnUsable(); self SetHintString( "" ); wait 0.5; // cooldown self MakeUsable(); self SetHintString( &"ALIEN_COLLECTIBLES_ACTIVATE_ATTACK_CHOPPER" ); } } else { player setLowerMessage( "no_money", &"ALIEN_COLLECTIBLES_NO_MONEY", 3 ); //pot = "Not enough money! Pot: $" + level.attack_chopper_pot + "/$" + level.chopper_cost; //player iprintlnBold( pot ); } } else { if ( isdefined( level.hive_heli ) ) player setLowerMessage( "busy", &"ALIEN_COLLECTIBLES_ATTACK_CHOPPER_ACTIVE", 3 ); } } } can_purchase_chopper() { //can_purchase = ( ( level.chopper_cost - level.attack_chopper_pot ) >= CONST_CHOPPER_UNIT_COST ); return self maps\mp\alien\_persistence::player_has_enough_currency( CONST_CHOPPER_UNIT_COST ); } chopper_active() { // self is player return isdefined( level.attack_heli ) || isdefined( level.hive_heli ); } ///////////////////////////////////////////////////////////////// // Blocker hive encounter ///////////////////////////////////////////////////////////////// blocker_hive() { level endon( "game_ended" ); selected_blocker_hives = select_hives( true ); AssertEx( selected_blocker_hives.size == 1, "Not exactly one blocker hive is selected" ); blocker_hive = selected_blocker_hives[0]; level.encounter_name = blocker_hive.target; attackable_ent = create_attackable_ent( blocker_hive ); blocker_hive.attackable_ent = attackable_ent; level.current_blocker_hive = blocker_hive; level thread maps\mp\alien\_spawnlogic::encounter_cycle_spawn( "blocker_hive_heli_inbound" ); pre_heli_sequence( attackable_ent ); heli_inbound( attackable_ent, blocker_hive ); attackable_ent waittill( "death" ); maps\mp\alien\_spawn_director::end_cycle(); level.encounter_name = undefined; blocker_hive_explode_sequence( attackable_ent, blocker_hive ); give_players_rewards( true, ::get_blocker_hive_score_component_name_list ); } CONST_MESSAGE_DELAY = 20; // sec CHOPPER_STATE_INCOMING = 3; CONST_BLOCKER_HIVE_DELAY = 50; pre_heli_sequence( attackable_ent ) { wait CONST_MESSAGE_DELAY; attackable_ent maps\mp\alien\_music_and_dialog::playVOForIncomingChopperBlockerHive(); //screen message regarding the incoming helicopter level thread maps\mp\alien\_airdrop::inbound_chopper_text(); SetOmnvar ( "ui_alien_boss_progression", 0 ); //set hive health to full SetOmnvar ( "ui_alien_chopper_state" , CHOPPER_STATE_INCOMING ); // wait for intermission delay wait max( 5, CONST_BLOCKER_HIVE_DELAY - CONST_MESSAGE_DELAY ); } HELI_INBOUND_EARTHQUAKE_INTENSITY = 0.4; HELI_INBOUND_WARN_DELAY = 0.1; heli_inbound( attackable_ent, blocker_hive ) { // calls in assault chopper to blocker hive thread maps\mp\alien\_airdrop::call_in_hive_heli( attackable_ent ); wait 1; // wait till hive heli is created // wait for chopper ready to assault if( isdefined( level.hive_heli ) ) { if ( level.hive_heli ent_flag_exist( "assault_ready" ) && !level.hive_heli ent_flag( "assault_ready" ) ) level.hive_heli ent_flag_wait( "assault_ready" ); level notify( "blocker_hive_heli_inbound" ); } attackable_ent show(); attackable_ent SetCanDamage( true ); attackable_ent thread maps\mp\alien\_hud::blocker_hive_hp_bar(); attackable_ent thread monitor_attackable_ent_damage( blocker_hive ); attackable_ent thread maps\mp\alien\_music_and_dialog::playVOForProvidingCoverAtBlockerHive(); blocker_hive hive_play_drill_planted_animations(); blocker_hive thread set_hive_icon( "waypoint_alien_blocker", 7000, 20, 20 ); //challenge widget to show the barrier hive intel level maps\mp\alien\_challenge_function::show_barrier_hive_intel(); level.current_hive_name = blocker_hive.target; level.blocker_hive_active = true; /# thread debug_spitter_population(); #/ // reset hive score maps\mp\alien\_gamescore::reset_encounter_performance(); thread warn_all_players( HELI_INBOUND_WARN_DELAY, HELI_INBOUND_EARTHQUAKE_INTENSITY ); } ///////////////////////////////////////////////////////////// // JUMP TO: mp_alien_town ///////////////////////////////////////////////////////////// jump_to_1st_area() { /# PLAYER_SPAWN_POS_1 = ( 2623, -15, 549 ); PLAYER_SPAWN_POS_2 = ( 2758, 276, 502 ); PLAYER_SPAWN_POS_3 = ( 2453, 169, 526 ); PLAYER_SPAWN_POS_4 = ( 2438, -211, 594 ); DRILL_SPAWN_POS = ( 2843, -171, 572 ); hives_to_remove = []; maps\mp\alien\_debug::common_hive_drill_jump_to( [ PLAYER_SPAWN_POS_1, PLAYER_SPAWN_POS_2, PLAYER_SPAWN_POS_3, PLAYER_SPAWN_POS_4 ], DRILL_SPAWN_POS, hives_to_remove ); #/ } jump_to_lodge() { /# PLAYER_SPAWN_POS_1 = ( 353, -1121, 770 ); PLAYER_SPAWN_POS_2 = ( 698, -991, 765 ); PLAYER_SPAWN_POS_3 = ( 1129, -1114, 770 ); PLAYER_SPAWN_POS_4 = ( 793, -1283, 765 ); DRILL_SPAWN_POS = ( 669, -1107, 770 ); hives_to_remove = [ "mini_lung" ]; maps\mp\alien\_debug::common_hive_drill_jump_to( [ PLAYER_SPAWN_POS_1, PLAYER_SPAWN_POS_2, PLAYER_SPAWN_POS_3, PLAYER_SPAWN_POS_4 ], DRILL_SPAWN_POS, hives_to_remove ); maps\mp\alien\_debug::delete_intro_heli_collision(); #/ } jump_to_city() { /# PLAYER_SPAWN_POS_1 = ( -4357, -3089, 608 ); PLAYER_SPAWN_POS_2 = ( -4550, -2805, 588 ); PLAYER_SPAWN_POS_3 = ( -4212, -2527, 595 ); PLAYER_SPAWN_POS_4 = ( -4086, -2845, 611 ); DRILL_SPAWN_POS = ( -4196, -2715, 604 ); hives_to_remove = [ "mini_lung", "lodge_lung_1", "lodge_lung_2", "lodge_lung_3", "lodge_lung_4", "lodge_lung_5", "lodge_lung_6" ]; maps\mp\alien\_debug::common_hive_drill_jump_to( [ PLAYER_SPAWN_POS_1, PLAYER_SPAWN_POS_2, PLAYER_SPAWN_POS_3, PLAYER_SPAWN_POS_4 ], DRILL_SPAWN_POS, hives_to_remove ); maps\mp\alien\_debug::delete_intro_heli_collision(); #/ } jump_to_cabin() { /# PLAYER_SPAWN_POS_1 = ( -2519, 1447, 639 ); PLAYER_SPAWN_POS_2 = ( -2386, 1811, 642 ); PLAYER_SPAWN_POS_3 = ( -2705, 1901, 628 ); PLAYER_SPAWN_POS_4 = ( -2563, 1373, 646 ); DRILL_SPAWN_POS = ( -2645, 1719, 636 ); hives_to_remove = [ "mini_lung", "lodge_lung_1", "lodge_lung_2", "lodge_lung_3", "lodge_lung_4", "lodge_lung_5", "lodge_lung_6", "city_lung_1", "city_lung_2", "city_lung_3", "city_lung_4", "city_lung_5" ]; maps\mp\alien\_debug::common_hive_drill_jump_to( [ PLAYER_SPAWN_POS_1, PLAYER_SPAWN_POS_2, PLAYER_SPAWN_POS_3, PLAYER_SPAWN_POS_4 ], DRILL_SPAWN_POS, hives_to_remove ); maps\mp\alien\_debug::delete_intro_heli_collision(); #/ } jump_to_crater_hive() { /# PLAYER_SPAWN_POS_1 = ( -3855, 3083, 366 ); PLAYER_SPAWN_POS_2 = ( -3818, 3344, 359 ); PLAYER_SPAWN_POS_3 = ( -4171, 3380, 339 ); PLAYER_SPAWN_POS_4 = ( -4194, 2899, 365 ); DRILL_SPAWN_POS = ( -3899, 3037, 367 ); hives_to_remove = [ "mini_lung", "lodge_lung_1", "lodge_lung_2", "lodge_lung_3", "lodge_lung_4", "lodge_lung_5", "lodge_lung_6", "city_lung_1", "city_lung_2", "city_lung_3", "city_lung_4", "city_lung_5", "lake_lung_1", "lake_lung_2", "lake_lung_3", "lake_lung_4", "lake_lung_6" ]; maps\mp\alien\_debug::common_hive_drill_jump_to( [ PLAYER_SPAWN_POS_1, PLAYER_SPAWN_POS_2, PLAYER_SPAWN_POS_3, PLAYER_SPAWN_POS_4 ], DRILL_SPAWN_POS, hives_to_remove ); maps\mp\alien\_debug::delete_intro_heli_collision(); #/ } jump_to_escape() { /# PLAYER_SPAWN_POS_1 = ( -3855, 3083, 366 ); PLAYER_SPAWN_POS_2 = ( -3818, 3344, 359 ); PLAYER_SPAWN_POS_3 = ( -4171, 3380, 339 ); PLAYER_SPAWN_POS_4 = ( -4194, 2899, 365 ); DRILL_SPAWN_POS = ( -3899, 3037, 367 ); hives_to_remove = [ "mini_lung", "lodge_lung_1", "lodge_lung_2", "lodge_lung_3", "lodge_lung_4", "lodge_lung_5", "lodge_lung_6", "city_lung_1", "city_lung_2", "city_lung_3", "city_lung_4", "city_lung_5", "lake_lung_1", "lake_lung_2", "lake_lung_3", "lake_lung_4", "lake_lung_6", "crater_lung" ]; maps\mp\alien\_debug::common_hive_drill_jump_to( [ PLAYER_SPAWN_POS_1, PLAYER_SPAWN_POS_2, PLAYER_SPAWN_POS_3, PLAYER_SPAWN_POS_4 ], DRILL_SPAWN_POS, hives_to_remove ); maps\mp\alien\_debug::delete_intro_heli_collision(); flag_set( "hives_cleared" ); #/ } mp_alien_town_pillage_init() { level.pillageInfo = spawnstruct(); level.pillageInfo.alienattachment_model = "weapon_alien_muzzlebreak"; level.pillageInfo.default_use_time = 1000; level.pillageInfo.money_stack = "pb_money_stack_01"; level.pillageInfo.attachment_model = "has_spotter_scope"; level.pillageInfo.maxammo_model = "mil_ammo_case_1_open"; level.pillageInfo.flare_model = "mil_emergency_flare_mp"; level.pillageInfo.clip_model = "weapon_baseweapon_clip"; level.pillageInfo.soflam_model = "weapon_soflam"; level.pillageInfo.leash_model = "weapon_knife_iw6"; level.pillageInfo.trophy_model = "mp_trophy_system_folded_iw6"; level.pillageInfo.ui_searching = 1; // % chance ( should equal 100% for each category ) level.pillageInfo.easy_attachment = 32; // 32% chance user finds an attachment level.pillageInfo.easy_money = 20; // 20% chance user finds $$ level.pillageInfo.easy_clip = 20; // 20% chance user finds a clip level.pillageInfo.easy_explosive = 15; // 15% chance user finds an explosive ( only a grenade or flare ) level.pillageInfo.easy_soflam = 5; // 5% chance user finds the soflam level.pillageInfo.easy_specialammo = 5; // 5% chance user finds specialty ammo level.pillageInfo.easy_leash = 3; // 3% chance user finds the leash level.pillageInfo.medium_attachment = 35; // 35% chance user finds an attachment level.pillageInfo.medium_explosive = 15; // 15% chance user finds an explosive level.pillageInfo.medium_money = 15; // 15% chance user finds $$ level.pillageInfo.medium_clip = 10; // 10% chance user finds a clip level.pillageInfo.medium_specialammo = 10; // 10% chance user finds specialty ammo level.pillageInfo.medium_leash = 5; // 5% chance user finds the leash level.pillageInfo.medium_soflam = 5; // 10% chance user finds the soflam level.pillageInfo.medium_trophy = 5; // 5% chance user finds trophy level.pillageInfo.hard_attachment = 40; // 40% chance user finds an attachment level.pillageInfo.hard_explosive = 15; // 20% chance user finds an explosive level.pillageInfo.hard_leash = 10; // 10% chance user finds the leash level.pillageInfo.hard_maxammo = 10; // 10% chance user finds max ammo level.pillageInfo.hard_specialammo = 10; // 10% chance user finds specialty ammo level.pillageInfo.hard_money = 5; // 5% chance user finds $$ level.pillageInfo.hard_soflam = 5; // 5% chance user finds the soflam level.pillageInfo.hard_trophy = 5; // 5% chance user finds trophy level.crafting_item_table = "mp/alien/crafting_items.csv"; // craftable item names and omnvars level.crafting_table_item_index = 0; // omnvar level.crafting_table_item_ref = 1; // reference string level.crafting_table_item_name = 2; // level.crafting_table_item_icon = 3; // localization name level.max_crafting_items = 3; level.crafting_model = "weapon_baseweapon_clip"; level.pillageInfo.crafting_easy = 0; level.pillageInfo.crafting_medium = 0; level.pillageInfo.crafting_hard = 0; } set_spawn_table() { if ( is_chaos_mode() ) { set_chaos_spawn_table(); return; } if ( is_hardcore_mode() ) set_hardcore_extinction_spawn_table(); } set_chaos_spawn_table() { if ( isPlayingSolo() ) { switch( get_chaos_area() ) { case "lodge": level.alien_cycle_table = "mp/alien/chaos_spawn_town_lodge_sp.csv"; break; case "city": level.alien_cycle_table = "mp/alien/chaos_spawn_town_city_sp.csv"; break; case "cabin": level.alien_cycle_table = "mp/alien/chaos_spawn_town_cabin_sp.csv"; break; } } else { switch( get_chaos_area() ) { case "lodge": level.alien_cycle_table = "mp/alien/chaos_spawn_town_lodge.csv"; break; case "city": level.alien_cycle_table = "mp/alien/chaos_spawn_town_city.csv"; break; case "cabin": level.alien_cycle_table = "mp/alien/chaos_spawn_town_cabin.csv"; break; } } } chaos_init() { init_hive_locs(); maps\mp\alien\_airdrop::init_fx(); level thread armory_chaos_nondeterministic_entity_handler(); level.removed_hives[ level.removed_hives.size ] = "mini_lung"; maps\mp\alien\_chaos::init(); register_egg_default_loc(); set_player_count_multiplier(); set_end_cam_position(); } armory_chaos_nondeterministic_entity_handler() { level endon( "game_ended" ); NONDETERMINISTIC_ENTITY_WAIT = 5; wait NONDETERMINISTIC_ENTITY_WAIT; delete_intro_heli_clip(); move_clip_brush_cabin_to_city(); move_clip_brush_cabin_to_lake(); move_clip_to_cliffside(); move_clip_brush_cliff_exploit(); } town_chaos_adjust_spawnLocation( spawn_location ) { if ( spawn_location.origin == ( -5716, -2031, 524 ) ) { spawn_location.origin = ( -6011.5, -1494.5, 415.5 ); spawn_location.angles = ( 0,0,0 ); spawn_location.script_noteworthy = "cabin_spawn_ground"; } return spawn_location; } move_clip_to_cliffside() { clip = GetEnt ( "player256x256x8", "targetname" ); clipEnt = Spawn( "script_model", ( -6294, -1282, 558 ) ); clipEnt.angles = ( 270, 68, 3 ); clipEnt CloneBrushmodelToScriptmodel( clip ); } move_clip_brush_cliff_exploit() { clip = GetEnt ( "player512x512x8", "targetname" ); clipEnt = Spawn ( "script_model", ( -4320, 2120, 572 ) ); clipEnt.angles = ( 270, 5, 1.28 ); clipEnt CloneBrushmodelToScriptmodel( clip ); } set_end_cam_position() { points = getEntArray( "mp_global_intermission", "classname" ); end_point = getClosest( level.eggs_default_loc,points ); switch( get_chaos_area() ) { case "lodge": end_point.origin = ( -3840, 1632, 1008 ); end_point.angles = ( 25,0,0 ); break; case "city": end_point.origin = ( -3840, 1632, 1008 ); end_point.angles = ( 25,0,0 ); break; case "cabin": end_point.origin = ( -3840, 1632, 1008 ); end_point.angles = ( 25,0,0 ); break; } } set_player_count_multiplier() { if ( isPlayingSolo() ) level.base_player_count_multiplier = 1; else level.base_player_count_multiplier = .49; } register_egg_default_loc() { switch( get_chaos_area() ) { case "lodge": maps\mp\alien\_chaos::set_egg_default_loc( ( -2534, 1751, 421 ) ); break; case "city": maps\mp\alien\_chaos::set_egg_default_loc( ( -2534, 1751, 421 ) ); break; case "cabin": maps\mp\alien\_chaos::set_egg_default_loc( ( -2534, 1751, 421 ) ); break; } } /* Leaving this here in case we bring it back block_city_exit() { meteor_model = "mp_ext_alien_meteor"; meteor_org = ( -5692, -1988, 604 ); meteor_angles = ( 0,180,0 ); clip_model = getent("player128x128x8","targetname" ); clip_org = ( -5659, -1915, 580.5 ); clip_angles = ( 270, 245, -180 ); city_exit_clip = spawn( "script_model",clip_org ); city_exit_clip.angles = clip_angles; city_exit_clip CloneBrushmodelToScriptmodel( clip_model ); meteor = spawn( "script_model",meteor_org ); meteor.angles = meteor_angles; meteor SetModel ( meteor_model ); } */ move_clip_brush_cabin_to_city() { clip = GetEnt ( "player256x256x256", "targetname" ); clip.origin = ( -5374, -2662, 498 ); clip.angles = ( 0, 248, 0 ); } move_clip_brush_cabin_to_lake() { clip = GetEnt ( "player128x128x256", "targetname" ); clip.origin = ( -3448, 2256, 618 ); clip.angles = ( 270, 344, -8.36695 ); } delete_intro_heli_clip() { helibrush = GetEnt( "helicoptercoll", "targetname" ); helibrush delete(); } set_hardcore_extinction_spawn_table() { if ( isPlayingSolo() ) level.alien_cycle_table_hardcore = "mp/alien/cycle_spawn_town_hardcore_sp.csv"; else level.alien_cycle_table_hardcore = "mp/alien/cycle_spawn_town_hardcore.csv"; } mp_alien_town_onSpawnPlayer_func() { if( !IsDefined( level.setSkillsFlag ) ) { level.setSkillsFlag = true; flag_set( "give_player_abilities" ); } self thread maps\mp\alien\_alien_class_skills_main::assign_skills(); } update_weapon_placement() { items = getstructarray( "item", "targetname" ); //replace the honeybadger with the ak12 foreach ( world_item in items ) { if ( !isDefined( world_item.script_noteworthy ) ) continue; if ( world_item.script_noteworthy == "weapon_iw6_alienhoneybadger_mp" ) { world_item.script_noteworthy = "weapon_iw6_alienak12_mp"; world_item.origin = (-1503.68, 1942.12, 598.9); break; } } return undefined; }