aitype
animscripts
character
codescripts
common_scripts
destructible_scripts
maps
animated_models
createart
createfx
interactive_models
mp
agents
alien
_achievement.gsc
_achievement_dlc.gsc
_achievement_dlc2.gsc
_achievement_dlc3.gsc
_achievement_dlc4.gsc
_airdrop.gsc
_alien_class_skills_main.gsc
_alien_fx.gsc
_alien_maaws.gsc
_alien_matchdata.gsc
_alien_plant.gsc
_alien_vanguard.gsc
_armory_weapon.gsc
_autosentry_alien.gsc
_beacon_weapon.gsc
_challenge.gsc
_challenge_function.gsc
_chaos.gsc
_chaos_laststand.gsc
_chaos_utility.gsc
_collectibles.gsc
_combat_resources.gsc
_container_spawn.gsc
_cortex.gsc
_crafting.gsc
_crafting_traps.gsc
_damage.gsc
_death.gsc
_debug.gsc
_deployablebox.gsc
_deployablebox_functions.gsc
_dev.gsc
_director.gsc
_dlc3_weapon.gsc
_drill.gsc
_ffotd.gsc
_gamescore.gsc
_gamescore_armory.gsc
_gamescore_beacon.gsc
_gamescore_dlc3.gsc
_gamescore_last.gsc
_globallogic.gsc
_hive.gsc
_hud.gsc
_intro_sequence.gsc
_lasedstrike_alien.gsc
_laststand.gsc
_music_and_dialog.gsc
_music_and_dialog_dlc.gsc
_nuke.gsc
_outline_proto.gsc
_perk_utility.gsc
_perkfunctions.gsc
_perks.gsc
_persistence.gsc
_pillage.gsc
_pillage_intel.gsc
_pillage_locker.gsc
_prestige.gsc
_progression.gsc
_spawn_director.gsc
_spawnlogic.gsc
_switchblade_alien.gsc
_trap.gsc
_unlock.gsc
_utility.gsc
mp_alien_armory_challenges.gsc
mp_alien_beacon_challenges.gsc
mp_alien_beacon_turret.gsc
mp_alien_dlc3_ark.gsc
mp_alien_dlc3_challenges.gsc
mp_alien_last_challenges.gsc
mp_alien_last_turret.gsc
bots
gametypes
killstreaks
perks
_animatedmodels.gsc
_areas.gsc
_art.gsc
_audio.gsc
_awards.gsc
_barrels_leak.gsc
_breach.gsc
_compass.gsc
_createfx.gsc
_crib.gsc
_defcon.gsc
_destructables.gsc
_dlcalienegg.gsc
_elevator.gsc
_elevator_v2.gsc
_empgrenade.gsc
_entityheadicons.gsc
_events.gsc
_flashgrenades.gsc
_fx.gsc
_global_fx.gsc
_global_fx_code.gsc
_highlights.gsc
_javelin.gsc
_laserguidedlauncher.gsc
_load.gsc
_matchdata.gsc
_matchevents.gsc
_menus.gsc
_minefields.gsc
_movable_cover.gsc
_movers.gsc
_obelisk.gsc
_radiation.gsc
_scoreboard.gsc
_shutter.gsc
_stinger.gsc
_teleport.gsc
_utility.gsc
_water.gsc
_zipline.gsc
mp_alien_armory.gsc
mp_alien_armory_fx.gsc
mp_alien_armory_precache.gsc
mp_alien_armory_vignettes.gsc
mp_alien_beacon.gsc
mp_alien_beacon_fx.gsc
mp_alien_beacon_precache.gsc
mp_alien_beacon_vignettes.gsc
mp_alien_dlc3.gsc
mp_alien_dlc3_escape.gsc
mp_alien_dlc3_fx.gsc
mp_alien_dlc3_precache.gsc
mp_alien_dlc3_vignettes.gsc
mp_alien_last.gsc
mp_alien_last_encounters.gsc
mp_alien_last_final_battle.gsc
mp_alien_last_fx.gsc
mp_alien_last_precache.gsc
mp_alien_last_progression.gsc
mp_alien_last_traps.gsc
mp_alien_last_weapon.gsc
mp_alien_town.gsc
mp_alien_town_fx.gsc
mp_alien_town_precache.gsc
mp_alien_weapon.gsc
mp_battery3.gsc
mp_battery3_fx.gsc
mp_battery3_precache.gsc
mp_beast_men.gsc
mp_boneyard_ns.gsc
mp_boneyard_ns_anim.gsc
mp_boneyard_ns_fx.gsc
mp_boneyard_ns_killstreak.gsc
mp_boneyard_ns_precache.gsc
mp_ca_behemoth.gsc
mp_ca_behemoth_fx.gsc
mp_ca_behemoth_precache.gsc
mp_ca_impact.gsc
mp_ca_impact_fx.gsc
mp_ca_impact_precache.gsc
mp_ca_killstreaks_a10.gsc
mp_ca_killstreaks_heligunner.gsc
mp_ca_red_river.gsc
mp_ca_red_river_bridge_device.gsc
mp_ca_red_river_bridge_event.gsc
mp_ca_red_river_fx.gsc
mp_ca_red_river_precache.gsc
mp_ca_rumble.gsc
mp_ca_rumble_fx.gsc
mp_ca_rumble_precache.gsc
mp_chasm.gsc
mp_chasm_fx.gsc
mp_chasm_precache.gsc
mp_conflict.gsc
mp_conflict_fx.gsc
mp_conflict_precache.gsc
mp_dart.gsc
mp_dart_events.gsc
mp_dart_fx.gsc
mp_dart_precache.gsc
mp_dart_scriptlights.gsc
mp_descent_new.gsc
mp_descent_new_fx.gsc
mp_descent_new_precache.gsc
mp_dig.gsc
mp_dig_fx.gsc
mp_dig_precache.gsc
mp_dome_ns.gsc
mp_dome_ns_alien.gsc
mp_dome_ns_alien_idle.gsc
mp_dome_ns_alien_move.gsc
mp_dome_ns_alien_think.gsc
mp_dome_ns_alien_traverse.gsc
mp_dome_ns_fx.gsc
mp_dome_ns_precache.gsc
mp_fahrenheit.gsc
mp_fahrenheit_fx.gsc
mp_fahrenheit_precache.gsc
mp_favela_iw6.gsc
mp_favela_iw6_fx.gsc
mp_favela_iw6_precache.gsc
mp_flooded.gsc
mp_flooded_fx.gsc
mp_flooded_precache.gsc
mp_frag.gsc
mp_frag_fx.gsc
mp_frag_precache.gsc
mp_hashima.gsc
mp_hashima_fx.gsc
mp_hashima_precache.gsc
mp_lonestar.gsc
mp_lonestar_fx.gsc
mp_lonestar_precache.gsc
mp_mine.gsc
mp_mine_fx.gsc
mp_mine_precache.gsc
mp_pirate.gsc
mp_pirate_fx.gsc
mp_pirate_ghost.gsc
mp_pirate_precache.gsc
mp_prisonbreak.gsc
mp_prisonbreak_fx.gsc
mp_prisonbreak_precache.gsc
mp_shipment_ns.gsc
mp_shipment_ns_fx.gsc
mp_shipment_ns_precache.gsc
mp_skeleton.gsc
mp_skeleton_fx.gsc
mp_skeleton_precache.gsc
mp_snow.gsc
mp_snow_fx.gsc
mp_snow_precache.gsc
mp_sovereign.gsc
mp_sovereign_events.gsc
mp_sovereign_fx.gsc
mp_sovereign_precache.gsc
mp_strikezone.gsc
mp_strikezone_fx.gsc
mp_strikezone_precache.gsc
mp_swamp.gsc
mp_swamp_fx.gsc
mp_swamp_precache.gsc
mp_warhawk.gsc
mp_warhawk_events.gsc
mp_warhawk_fx.gsc
mp_warhawk_precache.gsc
mp_zebra.gsc
mp_zebra_events.gsc
mp_zebra_fx.gsc
mp_zebra_precache.gsc
mp_zerosub.gsc
mp_zerosub_fx.gsc
mp_zerosub_precache.gsc
mp_zulu.gsc
mp_zulu_fx.gsc
mp_zulu_precache.gsc
_ambient.gsc
_anim.gsc
_animatedmodels.gsc
_art.gsc
_ash_falling.gsc
_audio.gsc
_audio_ambient.gsc
_audio_code.gsc
_autosave.gsc
_breach.gsc
_c4.gsc
_chaingun_player.gsc
_chopperboss.gsc
_chopperboss_utility.gsc
_colors.gsc
_compass.gsc
_coop.gsc
_createfx.gsc
_credits.gsc
_credits_autogen.gsc
_damagefeedback.gsc
_deadbody.gsc
_debug.gsc
_detonategrenades.gsc
_dog_control.gsc
_dog_drive.gsc
_dog_kinect.gsc
_dog_pip.gsc
_drone.gsc
_drone_ai.gsc
_drone_base.gsc
_drone_civilian.gsc
_drone_deer.gsc
_dynamic_run_speed.gsc
_endmission.gsc
_friendlyfire.gsc
_gameskill.gsc
_geo_mover.gsc
_global_fx.gsc
_global_fx_code.gsc
_hand_signals.gsc
_helicopter_ai.gsc
_helicopter_globals.gsc
_helicopter_spotlight.gsc
_hud.gsc
_hud_util.gsc
_idle.gsc
_idle_coffee.gsc
_idle_lean_smoke.gsc
_idle_phone.gsc
_idle_sit_load_ak.gsc
_idle_sleep.gsc
_idle_smoke.gsc
_idle_smoke_balcony.gsc
_intelligence.gsc
_introscreen.gsc
_inventory.gsc
_lights.gsc
_load.gsc
_loadout.gsc
_loadout_code.gsc
_mg_penetration.gsc
_mgturret.gsc
_minigun_viewmodel.gsc
_mocap_ar.gsc
_mortar.gsc
_names.gsc
_nightvision.gsc
_ocean.gsc
_patrol.gsc
_patrol_anims.gsc
_patrol_anims_creepwalk.gsc
_patrol_anims_gundown.gsc
_patrol_anims_patroljog.gsc
_perlin_noise.gsc
_player_death.gsc
_player_limp.gsc
_player_rig.gsc
_player_stats.gsc
_props.gsc
_radiation.gsc
_rambo.gsc
_readystand_anims.gsc
_remoteturret.gsc
_riotshield.gsc
_rv_vfx.gsc
_shellshock.gsc
_shg_common.gsc
_slowmo_breach.gsc
_space.gsc
_space_ai.gsc
_space_player.gsc
_spawner.gsc
_stealth.gsc
_stealth_accuracy_friendly.gsc
_stealth_animation_funcs.gsc
_stealth_anims.gsc
_stealth_behavior_enemy.gsc
_stealth_behavior_friendly.gsc
_stealth_behavior_system.gsc
_stealth_color_friendly.gsc
_stealth_corpse_enemy.gsc
_stealth_corpse_system.gsc
_stealth_event_enemy.gsc
_stealth_shared_utilities.gsc
_stealth_smartstance_friendly.gsc
_stealth_threat_enemy.gsc
_stealth_utility.gsc
_stealth_visibility_enemy.gsc
_stealth_visibility_friendly.gsc
_stealth_visibility_system.gsc
_swim_ai.gsc
_swim_ai_common.gsc
_swim_player.gsc
_tank_battlechatter.gsc
_teargas.gsc
_treadfx.gsc
_trigger.gsc
_underwater.gsc
_utility.gsc
_utility_code.gsc
_utility_dogs.gsc
_vehicle.gsc
_vehicle_aianim.gsc
_vehicle_code.gsc
_vehicle_spline_zodiac.gsc
_vignette_util.gsc
_weather.gsc
ally_attack_dog.gsc
black_ice.gsc
black_ice_anim.gsc
black_ice_ascend.gsc
black_ice_audio.gsc
black_ice_camp.gsc
black_ice_catwalks.gsc
black_ice_command.gsc
black_ice_exfil.gsc
black_ice_flarestack.gsc
black_ice_fx.gsc
black_ice_pipe_deck.gsc
black_ice_precache.gsc
black_ice_refinery.gsc
black_ice_swim.gsc
black_ice_tanks_to_mud_pumps.gsc
black_ice_util.gsc
black_ice_util_ai.gsc
black_ice_vignette.gsc
carrier.gsc
carrier_anim.gsc
carrier_audio.gsc
carrier_code.gsc
carrier_code_sparrow.gsc
carrier_code_zodiac.gsc
carrier_deck_combat.gsc
carrier_deck_tilt.gsc
carrier_deck_transition.gsc
carrier_deck_victory.gsc
carrier_defend_sparrow.gsc
carrier_defend_zodiac.gsc
carrier_depth_charge.gsc
carrier_fx.gsc
carrier_planes.gsc
carrier_precache.gsc
carrier_scriptlights.gsc
carrier_slow_intro.gsc
carrier_sparrow_run.gsc
carrier_vista.gsc
clockwork.gsc
clockwork_anim.gsc
clockwork_audio.gsc
clockwork_code.gsc
clockwork_defend.gsc
clockwork_exfil.gsc
clockwork_fx.gsc
clockwork_interior.gsc
clockwork_interior_nvg.gsc
clockwork_intro.gsc
clockwork_pip.gsc
clockwork_precache.gsc
clockwork_scriptedlights.gsc
cornered.gsc
cornered_anim.gsc
cornered_audio.gsc
cornered_binoculars.gsc
cornered_building_entry.gsc
cornered_code.gsc
cornered_code_rappel.gsc
cornered_code_rappel_allies.gsc
cornered_code_slide.gsc
cornered_destruct.gsc
cornered_fx.gsc
cornered_garden.gsc
cornered_infil.gsc
cornered_interior.gsc
cornered_intro.gsc
cornered_lighting.gsc
cornered_precache.gsc
cornered_rappel.gsc
cornered_zipline_turret.gsc
deer_hunt.gsc
deer_hunt_anim.gsc
deer_hunt_audio.gsc
deer_hunt_color_system.gsc
deer_hunt_fx.gsc
deer_hunt_intro.gsc
deer_hunt_precache.gsc
deer_hunt_ride.gsc
deer_hunt_util.gsc
enemyhq.gsc
enemyhq_anim.gsc
enemyhq_atrium.gsc
enemyhq_audio.gsc
enemyhq_basement.gsc
enemyhq_code.gsc
enemyhq_finale.gsc
enemyhq_fx.gsc
enemyhq_intro.gsc
enemyhq_precache.gsc
enemyhq_remoteturret.gsc
enemyhq_rooftop_intro.gsc
enemyhq_traverse.gsc
enemyhq_vip.gsc
factory.gsc
factory_ambush.gsc
factory_ambush_escape.gsc
factory_anim.gsc
factory_audio.gsc
factory_camera.gsc
factory_chase.gsc
factory_fx.gsc
factory_intro.gsc
factory_parking_lot.gsc
factory_powerstealth.gsc
factory_precache.gsc
factory_rooftop.gsc
factory_util.gsc
factory_weapon_room.gsc
flood.gsc
flood_anim.gsc
flood_audio.gsc
flood_chopper.gsc
flood_coverwater.gsc
flood_ending.gsc
flood_flooding.gsc
flood_fx.gsc
flood_garage.gsc
flood_infil.gsc
flood_mall.gsc
flood_precache.gsc
flood_roof_stealth.gsc
flood_rooftops.gsc
flood_streets.gsc
flood_swept.gsc
flood_util.gsc
homecoming.gsc
homecoming_a10.gsc
homecoming_anim.gsc
homecoming_audio.gsc
homecoming_beach.gsc
homecoming_beach_ambient.gsc
homecoming_drones.gsc
homecoming_fx.gsc
homecoming_intro.gsc
homecoming_precache.gsc
homecoming_recruits.gsc
homecoming_recruits_util.gsc
homecoming_retreat.gsc
homecoming_trench.gsc
homecoming_util.gsc
hud_outline_objective.gsc
iplane.gsc
iplane_anim.gsc
iplane_code.gsc
iplane_fx.gsc
iplane_interrogation.gsc
jungle_ghosts.gsc
jungle_ghosts_anim.gsc
jungle_ghosts_audio.gsc
jungle_ghosts_fx.gsc
jungle_ghosts_jungle.gsc
jungle_ghosts_precache.gsc
jungle_ghosts_runway.gsc
jungle_ghosts_stream.gsc
jungle_ghosts_util.gsc
las_vegas.gsc
las_vegas_anim.gsc
las_vegas_audio.gsc
las_vegas_casino.gsc
las_vegas_code.gsc
las_vegas_ending.gsc
las_vegas_entrance.gsc
las_vegas_fx.gsc
las_vegas_player_hurt.gsc
las_vegas_precache.gsc
loki.gsc
loki_anim.gsc
loki_audio.gsc
loki_combat_one.gsc
loki_combat_two.gsc
loki_ending.gsc
loki_fx.gsc
loki_infil.gsc
loki_moving_cover.gsc
loki_precache.gsc
loki_rog.gsc
loki_rog_hud.gsc
loki_space_breach.gsc
loki_util.gsc
nml.gsc
nml_anim.gsc
nml_audio.gsc
nml_code.gsc
nml_dogattacks.gsc
nml_fx.gsc
nml_precache.gsc
nml_satellite_new.gsc
nml_stealth.gsc
nml_tunnel_new.gsc
nml_util.gsc
nml_wolf.gsc
nml_wolf_code.gsc
ocean_perlin.gsc
odin.gsc
odin_ally.gsc
odin_anim.gsc
odin_audio.gsc
odin_escape.gsc
odin_fx.gsc
odin_intro.gsc
odin_precache.gsc
odin_sat_section_02_solar_panels_destruction.gsc
odin_satellite.gsc
odin_spin.gsc
odin_util.gsc
oilrocks.gsc
oilrocks_achievement.gsc
oilrocks_apache_antiair.gsc
oilrocks_apache_bridge_exploder.gsc
oilrocks_apache_chain_objective.gsc
oilrocks_apache_chopper.gsc
oilrocks_apache_code.gsc
oilrocks_apache_difficulty.gsc
oilrocks_apache_factory.gsc
oilrocks_apache_finale.gsc
oilrocks_apache_hints.gsc
oilrocks_apache_hints_code.gsc
oilrocks_apache_landing.gsc
oilrocks_apache_main_island.gsc
oilrocks_apache_starts.gsc
oilrocks_apache_tutorial.gsc
oilrocks_apache_vo.gsc
oilrocks_audio.gsc
oilrocks_code.gsc
oilrocks_fx.gsc
oilrocks_hacks.gsc
oilrocks_infantry.gsc
oilrocks_infantry_b.gsc
oilrocks_infantry_code.gsc
oilrocks_infantry_elevator.gsc
oilrocks_infantry_panic_room.gsc
oilrocks_infantry_panic_room_anim.gsc
oilrocks_infantry_starts.gsc
oilrocks_infantry_upper.gsc
oilrocks_infantry_upper_starts.gsc
oilrocks_precache.gsc
oilrocks_proximity_spawned_ai.gsc
oilrocks_proximity_spawned_vehicles.gsc
oilrocks_slamzoom.gsc
player_scripted_anim_util.gsc
prologue.gsc
prologue_audio.gsc
prologue_fx.gsc
prologue_precache.gsc
satfarm.gsc
satfarm_air_strip.gsc
satfarm_air_strip_secured.gsc
satfarm_ambient_a10.gsc
satfarm_anim.gsc
satfarm_audio.gsc
satfarm_base_array.gsc
satfarm_bridge_deploy.gsc
satfarm_canyon.gsc
satfarm_code.gsc
satfarm_code_heli.gsc
satfarm_crash_site.gsc
satfarm_fx.gsc
satfarm_intro.gsc
satfarm_m880.gsc
satfarm_precache.gsc
satfarm_scriptlights.gsc
satfarm_tower.gsc
ship_graveyard.gsc
ship_graveyard_anim.gsc
ship_graveyard_audio.gsc
ship_graveyard_code.gsc
ship_graveyard_fx.gsc
ship_graveyard_new_trench.gsc
ship_graveyard_precache.gsc
ship_graveyard_stealth.gsc
ship_graveyard_surface.gsc
ship_graveyard_torpedo.gsc
ship_graveyard_util.gsc
skyway.gsc
skyway_ambient_a10.gsc
skyway_anim.gsc
skyway_audio.gsc
skyway_code.gsc
skyway_end_swim.gsc
skyway_end_wreck.gsc
skyway_endbeach.gsc
skyway_fx.gsc
skyway_hangar_intro.gsc
skyway_loco.gsc
skyway_precache.gsc
skyway_rooftop_combat.gsc
skyway_rooftops.gsc
skyway_sat.gsc
skyway_util.gsc
skyway_util_ai.gsc
skyway_vignette.gsc
ss_util.gsc
youngblood.gsc
youngblood_anim.gsc
youngblood_audio.gsc
youngblood_code.gsc
youngblood_exit_ride.gsc
youngblood_fx.gsc
youngblood_precache.gsc
youngblood_util.gsc
vehicle_scripts
xmodelalias
$default.gsc
1099 lines
30 KiB
Plaintext
1099 lines
30 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
beacon_turret_init()
|
|
{
|
|
precacheitem( "killstreak_remote_turret_remote_mp" );
|
|
precachestring( &"ALIEN_COLLECTIBLES_USE_TURRET" );
|
|
precacheturret( "turret_minigun_alien_shock" );
|
|
precacheshader( "reticle_flechette" );
|
|
beacon_turret_fx_init();
|
|
}
|
|
|
|
beacon_turret_fx_init()
|
|
{
|
|
level._effect["beacon_turret_hit_fx"] = loadfx( "vfx/gameplay/alien/vfx_alien_beac_turret_hit_fx" );
|
|
level._effect["beacon_turret_kraken_hit_fx"] = loadfx( "vfx/gameplay/alien/vfx_alien_arm_gun_li_cloud" );
|
|
}
|
|
|
|
set_up_remote_turrets()
|
|
{
|
|
level.kraken_turrets = [];
|
|
wait 1.0;
|
|
var_0 = getentarray( "turret_use_trigger", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 thread remote_turret_monitoruse();
|
|
|
|
var_4 = getentarray( "crr_phalanx_03", "targetname" );
|
|
|
|
foreach ( var_6 in var_4 )
|
|
var_6 delete();
|
|
|
|
level thread listen_for_kraken_emp();
|
|
level thread set_up_kraken_zap_logic();
|
|
}
|
|
|
|
set_up_kraken_zap_logic()
|
|
{
|
|
common_scripts\utility::flag_wait( "boss_turrets_on" );
|
|
level thread zap_the_kraken();
|
|
}
|
|
|
|
remote_turret_monitoruse()
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "turret_is_broken" );
|
|
wait 0.05;
|
|
var_0 = build_turret_func();
|
|
var_0.in_use = 0;
|
|
var_0.overloaded = 0;
|
|
var_0.reloading = 0;
|
|
var_0.off = 0;
|
|
var_1 = var_0.turret_ammo;
|
|
var_0.use_trigger = self;
|
|
var_0 makeunusable();
|
|
|
|
if ( self.origin[1] > 6500 )
|
|
{
|
|
var_0.off = is_port_side_boss_turret();
|
|
common_scripts\utility::flag_wait( "boss_turrets_on" );
|
|
}
|
|
else
|
|
common_scripts\utility::flag_wait( "players_on_top_deck" );
|
|
|
|
if ( isdefined( level.shock_turret_ammo_override ) )
|
|
{
|
|
var_1 = level.shock_turret_ammo_override;
|
|
var_0.turret_ammo = level.shock_turret_ammo_override;
|
|
}
|
|
|
|
self makeusable();
|
|
self sethintstring( &"ALIEN_COLLECTIBLES_ACTIVATE_TURRET" );
|
|
self setmodel( "tag_origin" );
|
|
|
|
if ( maps\mp\alien\_utility::alien_mode_has( "outline" ) )
|
|
{
|
|
self.outline_model = getent( self.script_noteworthy, "targetname" );
|
|
|
|
if ( !is_port_side_boss_turret() )
|
|
maps\mp\alien\_outline_proto::add_to_outline_watch_list( self.outline_model, 750 );
|
|
}
|
|
|
|
var_0 thread watch_for_turret_reloading();
|
|
var_0 thread watch_for_turret_overloading();
|
|
level.kraken_turrets[level.kraken_turrets.size] = var_0;
|
|
|
|
if ( !var_0.off )
|
|
var_0 maps\mp\_utility::delaythread( 2, ::play_turret_fx, 0 );
|
|
else
|
|
{
|
|
var_0 maps\mp\_utility::delaythread( 2, ::play_turret_fx, 1 );
|
|
self sethintstring( "" );
|
|
}
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "trigger", var_2 );
|
|
|
|
if ( !isplayer( var_2 ) )
|
|
continue;
|
|
|
|
if ( var_2 maps\mp\alien\_utility::is_holding_deployable() )
|
|
{
|
|
var_2 maps\mp\_utility::setlowermessage( "cant_buy", &"ALIEN_COLLECTIBLES_PLAYER_HOLDING", 3 );
|
|
continue;
|
|
}
|
|
|
|
if ( var_0.in_use )
|
|
continue;
|
|
|
|
if ( var_0.off )
|
|
continue;
|
|
|
|
if ( maps\mp\alien\_utility::is_true( var_2.iscarrying ) )
|
|
continue;
|
|
|
|
if ( isdefined( level.drill_carrier ) && level.drill_carrier == var_2 )
|
|
continue;
|
|
|
|
if ( var_0.overloaded )
|
|
{
|
|
var_2 maps\mp\_utility::setlowermessage( "cant_buy", &"MP_ALIEN_BEACON_TURRET_OFFLINE", 3 );
|
|
continue;
|
|
}
|
|
|
|
if ( var_0.reloading )
|
|
{
|
|
var_2 maps\mp\_utility::setlowermessage( "cant_buy", &"MP_ALIEN_BEACON_TURRET_RELOAD", 3 );
|
|
continue;
|
|
}
|
|
|
|
while ( !var_2 isonground() )
|
|
wait 0.1;
|
|
|
|
var_3 = int( 750 * var_2 maps\mp\alien\_perk_utility::perk_gettrapcostscalar() );
|
|
|
|
if ( !var_0 is_turret_enabled() )
|
|
{
|
|
if ( var_2 can_activate_turret( var_3 ) )
|
|
{
|
|
var_2 maps\mp\alien\_persistence::take_player_currency( var_3, 1, "trap" );
|
|
self sethintstring( "" );
|
|
var_0.enabled = 1;
|
|
var_0.turret_ammo = int( var_1 * var_2 maps\mp\alien\_perk_utility::perk_gettrapdurationscalar() );
|
|
var_2 maps\mp\alien\_utility::set_turret_ammocount( var_0.turret_ammo );
|
|
var_0.in_use = 1;
|
|
var_0 enable_turret_use();
|
|
var_0 thread turret_monitoruse( var_2 );
|
|
var_0.owner = var_2;
|
|
maps\mp\alien\_outline_proto::remove_from_outline_watch_list( self.outline_model );
|
|
}
|
|
else
|
|
var_2 maps\mp\_utility::setlowermessage( "no_money", &"ALIEN_COLLECTIBLES_NO_MONEY", 3 );
|
|
|
|
continue;
|
|
}
|
|
|
|
var_0.in_use = 1;
|
|
var_2 maps\mp\alien\_utility::set_turret_ammocount( var_0.turret_ammo );
|
|
var_0 enable_turret_use();
|
|
var_0 thread turret_monitoruse( var_2 );
|
|
var_0.owner = var_2;
|
|
maps\mp\alien\_outline_proto::remove_from_outline_watch_list( self.outline_model );
|
|
}
|
|
}
|
|
|
|
build_turret_func()
|
|
{
|
|
var_0 = getent( self.target, "targetname" );
|
|
var_1 = "mg_turret";
|
|
var_2 = "turret_minigun_alien_shock";
|
|
var_3 = "killstreak_remote_turret_remote_mp";
|
|
var_4 = "beacon_phalanx_turret";
|
|
var_5 = "used_minigun_turret";
|
|
var_6 = spawnturret( "misc_turret", var_0.origin, var_2 );
|
|
var_6.angles = var_0.angles;
|
|
var_6 setmodel( var_4 );
|
|
var_6.weaponinfo = var_2;
|
|
var_0 delete();
|
|
var_6.health = 100;
|
|
var_6.turrettype = var_1;
|
|
var_6.turret_ammo = 300;
|
|
var_6 setturretmodechangewait( 1 );
|
|
var_6 setdefaultdroppitch( 0.0 );
|
|
var_6 maketurretsolid();
|
|
var_6.enabled = 0;
|
|
var_7 = getentarray( "turret_trigger_use_touch", "targetname" );
|
|
|
|
if ( var_7.size > 0 )
|
|
{
|
|
if ( var_7.size > 1 )
|
|
var_7 = common_scripts\utility::get_array_of_closest( self.origin, var_7 );
|
|
|
|
var_6.actual_use_trigger = var_7[0];
|
|
}
|
|
|
|
return var_6;
|
|
}
|
|
|
|
turret_monitoruse( var_0 )
|
|
{
|
|
level endon( "game_ended" );
|
|
level notify( "beacon_turret_used" );
|
|
|
|
while ( !isdefined( self.turret_ammo ) )
|
|
wait 0.05;
|
|
|
|
self.use_trigger hide();
|
|
self.owner = var_0;
|
|
var_0.iscarrying = 1;
|
|
self.overheated = 0;
|
|
var_0.pressed_use = 0;
|
|
move_player_camera_to_turret( var_0 );
|
|
play_turret_fx( 0 );
|
|
thread monitor_player_exit( var_0 );
|
|
thread watch_bullet_fired( var_0 );
|
|
thread wait_for_turret_to_spin_up();
|
|
thread check_player_state_and_stop_using_turret( var_0 );
|
|
wait_for_disable_turret();
|
|
disable_turret();
|
|
}
|
|
|
|
move_player_camera_to_turret( var_0 )
|
|
{
|
|
var_0 maps\mp\_utility::_giveweapon( "killstreak_remote_turret_remote_mp" );
|
|
var_0 switchtoweapon( "killstreak_remote_turret_remote_mp" );
|
|
|
|
if ( getdvarint( "camera_thirdPerson" ) )
|
|
var_0 maps\mp\_utility::setthirdpersondof( 0 );
|
|
|
|
var_0 maps\mp\_utility::setusingremote( self.turrettype );
|
|
var_0 playerlinkweaponviewtodelta( self, "tag_player", 1, 80, 80, 25, 25, 0 );
|
|
var_0 playerlinkedsetviewznear( 0 );
|
|
var_0 playerlinkedsetusebaseangleforviewclamp( 1 );
|
|
var_0 remotecontrolturret( self );
|
|
var_0 maps\mp\_utility::clearlowermessage( "enter_remote_turret" );
|
|
var_0 maps\mp\alien\_utility::disable_special_ammo();
|
|
var_0 maps\mp\alien\_utility::show_turret_icon( 2 );
|
|
var_0 maps\mp\alien\_utility::set_turret_ammocount( self.turret_ammo );
|
|
var_0 setclientomnvar( "ui_alien_turret_overheat", 0 );
|
|
thread turret_overheat_monitor( var_0 );
|
|
thread turret_cooldown_monitor();
|
|
var_0 maps\mp\_utility::setlowermessage( "disengage_turret", &"ALIEN_COLLECTIBLES_DISENGAGE_TURRET", 4 );
|
|
var_0 add_reticle_to_player_view();
|
|
}
|
|
|
|
wait_for_disable_turret()
|
|
{
|
|
self waittill( "disable_turret" );
|
|
}
|
|
|
|
listen_for_player_use_button()
|
|
{
|
|
self endon( "stop_watching" );
|
|
|
|
while ( self.owner usebuttonpressed() )
|
|
wait 0.05;
|
|
|
|
for (;;)
|
|
{
|
|
var_0 = 0;
|
|
|
|
while ( self.owner usebuttonpressed() )
|
|
{
|
|
var_0 = var_0 + 0.05;
|
|
wait 0.05;
|
|
|
|
if ( var_0 > 0.5 )
|
|
{
|
|
self.owner notify( "player_pressed_use" );
|
|
wait 2.0;
|
|
}
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
watch_bullet_fired( var_0 )
|
|
{
|
|
self endon( "disable_turret" );
|
|
self endon( "player_exit" );
|
|
thread zap_periodically_when_firing( var_0 );
|
|
var_1 = 0;
|
|
var_2 = self.turret_ammo;
|
|
var_3 = weaponfiretime( self.weaponinfo );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "turret_fire" );
|
|
self getturretowner() notify( "turret_fire" );
|
|
self.heatlevel = self.heatlevel + var_3;
|
|
var_1++;
|
|
self.cooldownwaittime = var_3;
|
|
self.turret_ammo = var_2 - var_1;
|
|
|
|
if ( var_1 >= var_2 )
|
|
{
|
|
self.turret_ammo = 0;
|
|
self.owner maps\mp\alien\_utility::set_turret_ammocount( self.turret_ammo );
|
|
break;
|
|
}
|
|
|
|
self.owner maps\mp\alien\_utility::set_turret_ammocount( self.turret_ammo );
|
|
}
|
|
|
|
if ( isdefined( self.owner ) && isalive( self.owner ) )
|
|
self.owner thread maps\mp\alien\_utility::wait_for_player_to_dismount_turret();
|
|
|
|
self.reloading = 1;
|
|
self.owner setclientomnvar( "ui_alien_turret_overheat", -1 );
|
|
self notify( "disable_turret" );
|
|
}
|
|
|
|
wait_for_turret_to_spin_up()
|
|
{
|
|
self endon( "disable_turret" );
|
|
self endon( "player_exit" );
|
|
|
|
for (;;)
|
|
{
|
|
var_0 = self getbarrelspinrate();
|
|
|
|
if ( var_0 == 1 && !self.overheated )
|
|
self turretfireenable();
|
|
else
|
|
self turretfiredisable();
|
|
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
wait_for_player_to_dismount_remote_turret()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "disconnect" );
|
|
maps\mp\_utility::setlowermessage( "disengage_turret", &"ALIEN_COLLECTIBLES_DISENGAGE_TURRET", 0 );
|
|
|
|
while ( maps\mp\_utility::isusingremote() )
|
|
wait 0.5;
|
|
|
|
maps\mp\_utility::clearlowermessage( "disengage_turret" );
|
|
}
|
|
|
|
watch_for_turret_reloading()
|
|
{
|
|
if ( isdefined( level.shock_turret_reload_time_override ) )
|
|
var_0 = level.shock_turret_reload_time_override;
|
|
else
|
|
var_0 = 25;
|
|
|
|
while ( !isdefined( self.broken ) )
|
|
{
|
|
if ( self.reloading && !self.overloaded )
|
|
{
|
|
thread play_turret_fx( 1 );
|
|
self.use_trigger sethintstring( "" );
|
|
maps\mp\alien\_outline_proto::remove_from_outline_watch_list( self.use_trigger.outline_model );
|
|
wait( var_0 - 5 );
|
|
|
|
if ( self.overloaded )
|
|
{
|
|
self.reloading = 0;
|
|
break;
|
|
}
|
|
|
|
thread play_turret_fx( 0 );
|
|
wait 5;
|
|
|
|
if ( self.overloaded )
|
|
{
|
|
self.reloading = 0;
|
|
break;
|
|
}
|
|
|
|
maps\mp\alien\_outline_proto::add_to_outline_watch_list( self.use_trigger.outline_model, 750 );
|
|
self.reloading = 0;
|
|
self.use_trigger sethintstring( &"ALIEN_COLLECTIBLES_ACTIVATE_TURRET" );
|
|
}
|
|
|
|
wait 0.1;
|
|
}
|
|
|
|
self.reloading_func_done = 1;
|
|
}
|
|
|
|
watch_for_turret_overloading()
|
|
{
|
|
while ( !isdefined( self.broken ) )
|
|
{
|
|
if ( self.overloaded )
|
|
{
|
|
playsoundatpos( self.origin, "scn_beacon_turret_offline" );
|
|
thread play_turret_fx( 1 );
|
|
self.use_trigger sethintstring( "" );
|
|
maps\mp\alien\_outline_proto::remove_from_outline_watch_list( self.use_trigger.outline_model );
|
|
|
|
if ( !isdefined( self.broken ) )
|
|
{
|
|
if ( !self.off )
|
|
self.off = 1;
|
|
else
|
|
self.off = 0;
|
|
|
|
wait 25;
|
|
thread play_turret_fx( 0 );
|
|
wait 5;
|
|
self.overloaded = 0;
|
|
self.reloading = 0;
|
|
|
|
if ( !self.off )
|
|
{
|
|
maps\mp\alien\_outline_proto::add_to_outline_watch_list( self.use_trigger.outline_model, 750 );
|
|
self.use_trigger sethintstring( &"ALIEN_COLLECTIBLES_ACTIVATE_TURRET" );
|
|
}
|
|
}
|
|
}
|
|
|
|
wait 0.1;
|
|
}
|
|
|
|
self.overloading_func_done = 1;
|
|
}
|
|
|
|
listen_for_kraken_emp()
|
|
{
|
|
common_scripts\utility::flag_wait( "boss_turrets_on" );
|
|
|
|
while ( !isdefined( level.kraken ) )
|
|
wait 0.1;
|
|
|
|
var_0 = undefined;
|
|
|
|
for (;;)
|
|
{
|
|
var_1 = level.kraken common_scripts\utility::waittill_any_return_no_endon_death( "kraken_emp", "kraken_emp_stage_2", "kraken_emp_stage_3" );
|
|
|
|
foreach ( var_3 in level.kraken_turrets )
|
|
{
|
|
var_3.overloaded = 1;
|
|
|
|
if ( var_1 == "kraken_emp_stage_2" )
|
|
{
|
|
if ( isdefined( var_3.use_trigger.script_noteworthy ) && var_3.use_trigger.script_noteworthy == "turret_console_lower_right" )
|
|
var_0 = var_3;
|
|
}
|
|
|
|
if ( var_1 == "kraken_emp_stage_3" )
|
|
{
|
|
if ( isdefined( var_3.use_trigger.script_noteworthy ) && var_3.use_trigger.script_noteworthy == "turret_console_lower_left" )
|
|
var_0 = var_3;
|
|
}
|
|
}
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
var_0 notify( "disable_turret" );
|
|
var_0.use_trigger notify( "turret_is_broken" );
|
|
var_0.use_trigger turret_is_broken( var_0 );
|
|
}
|
|
}
|
|
}
|
|
|
|
is_turret_enabled()
|
|
{
|
|
return self.enabled;
|
|
}
|
|
|
|
is_remote_enabled()
|
|
{
|
|
return self.enabled;
|
|
}
|
|
|
|
disable_turret()
|
|
{
|
|
self.enabled = 0;
|
|
self.use_trigger sethintstring( &"ALIEN_COLLECTIBLES_ACTIVATE_TURRET" );
|
|
self turretfiredisable();
|
|
self maketurretinoperable();
|
|
}
|
|
|
|
play_turret_fx( var_0 )
|
|
{
|
|
self endon( "turret_is_broken" );
|
|
|
|
if ( isdefined( self.broken ) )
|
|
return;
|
|
|
|
if ( var_0 )
|
|
{
|
|
if ( self.off )
|
|
killfxontag( level._effect["glow_red_light_100_nolight"], self, "tag_light_fx" );
|
|
else
|
|
killfxontag( level._effect["green_light"], self, "tag_light_fx" );
|
|
|
|
wait 0.5;
|
|
|
|
if ( self.overloaded )
|
|
playfxontag( level._effect["boss_turret_smoke"], self, "TAG_PLAYER" );
|
|
else
|
|
playfxontag( level._effect["glow_red_light_100_nolight"], self, "tag_light_fx" );
|
|
}
|
|
else
|
|
{
|
|
if ( self.overloaded )
|
|
{
|
|
stopfxontag( level._effect["boss_turret_smoke"], self, "TAG_PLAYER" );
|
|
wait 5;
|
|
}
|
|
else
|
|
{
|
|
stopfxontag( level._effect["glow_red_light_100_nolight"], self, "tag_light_fx" );
|
|
wait 0.5;
|
|
}
|
|
|
|
if ( !self.off )
|
|
playfxontag( level._effect["green_light"], self, "tag_light_fx" );
|
|
else
|
|
playfxontag( level._effect["glow_red_light_100_nolight"], self, "tag_light_fx" );
|
|
}
|
|
}
|
|
|
|
play_broken_fx()
|
|
{
|
|
killfxontag( level._effect["glow_red_light_100_nolight"], self, "tag_light_fx" );
|
|
killfxontag( level._effect["green_light"], self, "tag_light_fx" );
|
|
wait 0.5;
|
|
playfxontag( level._effect["boss_turret_smoke"], self, "TAG_PLAYER" );
|
|
}
|
|
|
|
enable_turret_use()
|
|
{
|
|
self sethintstring( "" );
|
|
self turretfireenable();
|
|
self maketurretoperable();
|
|
}
|
|
|
|
can_activate_turret( var_0 )
|
|
{
|
|
return maps\mp\alien\_persistence::player_has_enough_currency( var_0 );
|
|
}
|
|
|
|
monitor_player_exit( var_0 )
|
|
{
|
|
self endon( "turret_disabled" );
|
|
thread listen_for_player_use_button();
|
|
|
|
for (;;)
|
|
{
|
|
var_0 waittill( "player_pressed_use" );
|
|
self.use_trigger sethintstring( &"ALIEN_COLLECTIBLES_USE_TURRET" );
|
|
maps\mp\alien\_outline_proto::add_to_outline_watch_list( self.use_trigger.outline_model, 750 );
|
|
var_0.pressed_use = 1;
|
|
}
|
|
}
|
|
|
|
turret_cooldown_monitor()
|
|
{
|
|
self endon( "death" );
|
|
self notify( "stop_cooldown_monitor" );
|
|
self endon( "stop_cooldown_monitor" );
|
|
self endon( "turret_disabled" );
|
|
self endon( "disable_turret" );
|
|
self endon( "exit" );
|
|
|
|
for (;;)
|
|
{
|
|
if ( self.heatlevel > 0 )
|
|
{
|
|
if ( self.cooldownwaittime <= 0 )
|
|
self.heatlevel = max( 0, self.heatlevel - 0.05 );
|
|
else
|
|
self.cooldownwaittime = max( 0, self.cooldownwaittime - 0.05 );
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
turret_overheat_monitor( var_0 )
|
|
{
|
|
self notify( "overheat_monitor" );
|
|
self endon( "overheat_monitor" );
|
|
self endon( "turret_disabled" );
|
|
self endon( "disable_turret" );
|
|
self endon( "exit" );
|
|
self.heatlevel = 0;
|
|
|
|
if ( isdefined( level.shock_turret_heat_override ) )
|
|
var_1 = level.shock_turret_heat_override;
|
|
else
|
|
var_1 = 2.5;
|
|
|
|
self.cooldownwaittime = 1;
|
|
var_2 = 0;
|
|
|
|
for (;;)
|
|
{
|
|
if ( !maps\mp\_utility::isreallyalive( var_0 ) )
|
|
{
|
|
self.inuseby = undefined;
|
|
var_0 setclientomnvar( "ui_alien_turret_overheat", -1 );
|
|
break;
|
|
}
|
|
|
|
if ( self.heatlevel >= var_1 )
|
|
{
|
|
var_3 = 1;
|
|
thread turret_overheat_disable();
|
|
}
|
|
else
|
|
var_3 = self.heatlevel / var_1;
|
|
|
|
var_4 = 5;
|
|
var_5 = int( var_3 * 100 );
|
|
|
|
if ( var_2 != var_5 )
|
|
{
|
|
if ( var_5 <= var_4 || abs( abs( var_2 ) - abs( var_5 ) ) > var_4 )
|
|
{
|
|
var_0 setclientomnvar( "ui_alien_turret_overheat", var_5 );
|
|
var_2 = var_5;
|
|
}
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
var_0 setclientomnvar( "ui_alien_turret_overheat", -1 );
|
|
}
|
|
|
|
turret_overheat_disable()
|
|
{
|
|
self endon( "turret_disabled" );
|
|
self endon( "disable_turret" );
|
|
self endon( "exit" );
|
|
self.overheated = 1;
|
|
|
|
while ( self.heatlevel > 0 )
|
|
wait 0.1;
|
|
|
|
self.overheated = 0;
|
|
}
|
|
|
|
clear_turret_ammo_counter_on_death( var_0 )
|
|
{
|
|
self notify( "clearammocounterondeath" );
|
|
self endon( "clearammocounterondeath" );
|
|
var_0 endon( "disconnect" );
|
|
self waittill( "turret_disabled" );
|
|
var_0 maps\mp\alien\_utility::hide_turret_icon();
|
|
var_0 maps\mp\_utility::clearlowermessage( "disengage_turret" );
|
|
}
|
|
|
|
clear_turret_ammo_counter_on_dismount( var_0 )
|
|
{
|
|
self notify( "dimountammocounter" );
|
|
self endon( "dismountammocounter" );
|
|
var_0 endon( "disconnect" );
|
|
var_0 maps\mp\alien\_utility::hide_turret_icon();
|
|
var_0 maps\mp\_utility::clearlowermessage( "disengage_turret" );
|
|
|
|
if ( var_0 getcurrentweapon() == "none" )
|
|
var_0 thread restore_last_valid_weapon();
|
|
}
|
|
|
|
restore_last_valid_weapon()
|
|
{
|
|
var_0 = self getweaponslistprimaries();
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
if ( isdefined( var_2 ) && var_2 != "none" )
|
|
{
|
|
self switchtoweapon( var_2 );
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
zap_periodically_when_firing( var_0 )
|
|
{
|
|
self endon( "player_exit" );
|
|
|
|
while ( self.turret_ammo > 0 )
|
|
{
|
|
self waittill( "turret_fire" );
|
|
|
|
if ( self.heatlevel > 0.1 )
|
|
{
|
|
var_1 = self gettagorigin( "tag_player" );
|
|
var_2 = vectornormalize( anglestoforward( self gettagangles( "tag_player" ) ) );
|
|
var_3 = var_1 + var_2 * 10000;
|
|
var_4 = bullettrace( var_1, var_3, 1, undefined, 1, 1 );
|
|
|
|
if ( isdefined( var_4["position"] ) )
|
|
{
|
|
var_5 = var_4["position"];
|
|
|
|
if ( isdefined( var_4["entity"] ) && isdefined( var_4["entity"].agent_type ) && ( var_4["entity"].agent_type == "kraken_tentacle" || var_4["entity"].agent_type == "kraken" ) )
|
|
zap_aliens( var_5, var_4["entity"].agent_type );
|
|
else
|
|
zap_aliens( var_5 );
|
|
}
|
|
|
|
wait 0.5;
|
|
}
|
|
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
zap_aliens( var_0, var_1 )
|
|
{
|
|
var_2 = 62500;
|
|
|
|
if ( self.heatlevel > 0.5 )
|
|
var_2 = 122500;
|
|
|
|
if ( self.heatlevel > 0.75 )
|
|
var_2 = 250000;
|
|
|
|
var_3 = maps\mp\alien\_spawnlogic::get_alive_agents();
|
|
|
|
if ( isdefined( level.seeder_active_turrets ) )
|
|
var_3 = common_scripts\utility::array_combine( var_3, level.seeder_active_turrets );
|
|
|
|
var_4 = [];
|
|
|
|
foreach ( var_6 in var_3 )
|
|
{
|
|
if ( distancesquared( var_0, var_6.origin ) < var_2 )
|
|
var_4[var_4.size] = var_6;
|
|
}
|
|
|
|
var_8 = 0;
|
|
var_9 = 4;
|
|
|
|
if ( !isdefined( self.death_struct ) )
|
|
{
|
|
self.death_struct = spawnstruct();
|
|
self.death_struct.attack_bolt = spawn( "script_model", var_0 );
|
|
self.death_struct.attack_bolt setmodel( "tag_origin" );
|
|
|
|
if ( isdefined( level.shock_turret_arc_damage_override ) )
|
|
self.death_struct.damage_amount = level.shock_turret_arc_damage_override;
|
|
else
|
|
self.death_struct.damage_amount = 200;
|
|
|
|
common_scripts\utility::waitframe();
|
|
self.death_struct.attack_bolt.origin = var_0;
|
|
}
|
|
|
|
self.death_struct.attack_bolt.origin = var_0;
|
|
|
|
if ( var_4.size < 1 )
|
|
{
|
|
for ( var_8 = 0; var_8 < var_9; var_8++ )
|
|
{
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
level.zap_the_kraken_time = 2;
|
|
turret_tesla_bolt_no_target( var_0, var_1 );
|
|
}
|
|
else
|
|
turret_tesla_bolt_no_target( var_0 );
|
|
|
|
if ( randomint( 2 ) == 0 )
|
|
break;
|
|
|
|
wait 0.1;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
foreach ( var_6 in var_4 )
|
|
{
|
|
if ( isdefined( var_6 ) )
|
|
{
|
|
var_6 turret_tesla_bolt_death( self );
|
|
var_8++;
|
|
|
|
if ( var_8 >= var_9 )
|
|
break;
|
|
|
|
wait 0.1;
|
|
}
|
|
}
|
|
}
|
|
|
|
wait 0.05;
|
|
killfxontag( level._effect["tesla_attack"], self.death_struct.attack_bolt, "TAG_ORIGIN" );
|
|
killfxontag( level._effect["tesla_shock"], self.death_struct.attack_bolt, "TAG_ORIGIN" );
|
|
killfxontag( level._effect["beacon_turret_kraken_hit_fx"], self.death_struct.attack_bolt, "TAG_ORIGIN" );
|
|
}
|
|
|
|
turret_tesla_bolt_death( var_0 )
|
|
{
|
|
common_scripts\utility::waitframe();
|
|
playfxontag( level._effect["tesla_attack"], var_0.death_struct.attack_bolt, "TAG_ORIGIN" );
|
|
playfxontag( level._effect["beacon_turret_hit_fx"], var_0.death_struct.attack_bolt, "tag_origin" );
|
|
var_1 = undefined;
|
|
|
|
if ( isdefined( self.alien_type ) && self.alien_type == "seeder_spore" )
|
|
var_1 = self gettagorigin( "J_Spore_46" );
|
|
else if ( isdefined( self ) && isalive( self ) && maps\mp\alien\_utility::has_tag( self.model, "J_SpineUpper" ) )
|
|
var_1 = self gettagorigin( "J_SpineUpper" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
var_0.death_struct.attack_bolt moveto( var_1, 0.05 );
|
|
wait 0.05;
|
|
|
|
if ( isdefined( self ) && distancesquared( self.origin, var_0.death_struct.attack_bolt.origin ) > 40000 )
|
|
playfxontag( level._effect["beacon_turret_hit_fx"], var_0.death_struct.attack_bolt, "tag_origin" );
|
|
|
|
if ( isdefined( self ) )
|
|
self playsound( "turret_shock" );
|
|
|
|
wait 0.05;
|
|
|
|
if ( isdefined( self ) )
|
|
{
|
|
var_2 = self;
|
|
|
|
if ( isdefined( self.alien_type ) && self.alien_type == "seeder_spore" )
|
|
var_2 = self.coll_model;
|
|
|
|
if ( isdefined( var_2 ) )
|
|
var_2 dodamage( var_0.death_struct.damage_amount, self.origin, var_0.owner, var_0 );
|
|
}
|
|
}
|
|
|
|
stopfxontag( level._effect["tesla_attack"], var_0.death_struct.attack_bolt, "TAG_ORIGIN" );
|
|
}
|
|
|
|
turret_tesla_bolt_no_target( var_0, var_1 )
|
|
{
|
|
var_2 = self;
|
|
common_scripts\utility::waitframe();
|
|
playfxontag( level._effect["tesla_attack"], var_2.death_struct.attack_bolt, "TAG_ORIGIN" );
|
|
|
|
if ( isdefined( var_1 ) && var_1 == "kraken" )
|
|
playfxontag( level._effect["beacon_turret_kraken_hit_fx"], var_2.death_struct.attack_bolt, "tag_origin" );
|
|
else
|
|
playfxontag( level._effect["tesla_shock"], var_2.death_struct.attack_bolt, "tag_origin" );
|
|
|
|
var_3 = 4;
|
|
var_4 = self gettagorigin( "tag_player" );
|
|
|
|
for ( var_5 = 0; var_5 < var_3; var_5++ )
|
|
{
|
|
if ( isdefined( var_1 ) )
|
|
var_6 = var_0 + ( randomintrange( -300, 300 ), randomintrange( -300, 300 ), randomintrange( -300, 300 ) );
|
|
else
|
|
var_6 = var_0 + ( randomintrange( -150, 150 ), randomintrange( -150, 150 ), 0 );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
var_4 = self gettagorigin( "tag_player" );
|
|
var_7 = bullettrace( var_4, var_6, 1, undefined, 1, 1 );
|
|
|
|
if ( !isdefined( var_7["entity"] ) || !isdefined( var_7["entity"].agent_type ) )
|
|
continue;
|
|
}
|
|
else
|
|
var_7 = bullettrace( var_4, var_6, 1 );
|
|
|
|
if ( isdefined( var_7["position"] ) )
|
|
{
|
|
if ( distancesquared( var_7["position"], var_2.death_struct.attack_bolt.origin ) < 10000 )
|
|
continue;
|
|
|
|
if ( !isdefined( var_1 ) && var_7["position"][2] > var_0[2] + 20 )
|
|
continue;
|
|
|
|
var_0 = var_7["position"];
|
|
break;
|
|
}
|
|
}
|
|
|
|
var_8 = var_0 + ( 0, 0, 5 );
|
|
var_2.death_struct.attack_bolt moveto( var_8, 0.05 );
|
|
wait 0.05;
|
|
|
|
if ( isdefined( self ) && distancesquared( self.origin, var_2.death_struct.attack_bolt.origin ) > 40000 )
|
|
{
|
|
if ( isdefined( var_1 ) && var_1 == "kraken" )
|
|
{
|
|
playfxontag( level._effect["beacon_turret_kraken_hit_fx"], var_2.death_struct.attack_bolt, "tag_origin" );
|
|
thread sfx_kraken_shock( var_8 );
|
|
}
|
|
else
|
|
{
|
|
playfxontag( level._effect["tesla_shock"], var_2.death_struct.attack_bolt, "tag_origin" );
|
|
playsoundatpos( var_8, "turret_shock" );
|
|
}
|
|
}
|
|
|
|
wait 0.2;
|
|
stopfxontag( level._effect["tesla_shock"], var_2.death_struct.attack_bolt, "TAG_ORIGIN" );
|
|
stopfxontag( level._effect["beacon_turret_kraken_hit_fx"], var_2.death_struct.attack_bolt, "TAG_ORIGIN" );
|
|
stopfxontag( level._effect["tesla_attack"], var_2.death_struct.attack_bolt, "TAG_ORIGIN" );
|
|
}
|
|
|
|
zap_the_kraken()
|
|
{
|
|
var_0 = 0.2;
|
|
level.zap_multiplier_active = 0;
|
|
level.zap_the_kraken_time = 0;
|
|
|
|
for (;;)
|
|
{
|
|
while ( level.zap_the_kraken_time > 0 )
|
|
{
|
|
if ( !level.zap_multiplier_active )
|
|
level.zap_multiplier_active = 1;
|
|
|
|
level.zap_the_kraken_time = level.zap_the_kraken_time - var_0;
|
|
wait( var_0 );
|
|
}
|
|
|
|
level.zap_multiplier_active = 0;
|
|
level.zap_the_kraken_time = 0;
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
stop_using_turret( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "disconnect" );
|
|
|
|
if ( maps\mp\_utility::isusingremote() )
|
|
{
|
|
self remotecontrolturretoff( var_0 );
|
|
self unlink();
|
|
self switchtoweapon( common_scripts\utility::getlastweapon() );
|
|
maps\mp\_utility::clearusingremote();
|
|
self notify( "exit_turret" );
|
|
var_0 notify( "stop_watching" );
|
|
|
|
if ( getdvarint( "camera_thirdPerson" ) )
|
|
maps\mp\_utility::setthirdpersondof( 1 );
|
|
|
|
var_2 = self getweaponslistexclusives();
|
|
|
|
foreach ( var_4 in var_2 )
|
|
self takeweapon( var_4 );
|
|
|
|
maps\mp\alien\_utility::hide_turret_icon();
|
|
maps\mp\alien\_utility::enable_special_ammo();
|
|
var_0.owner = undefined;
|
|
self setclientomnvar( "ui_alien_turret_overheat", -1 );
|
|
maps\mp\_utility::clearlowermessage( "disengage_turret" );
|
|
self.is_using_remote_turret = 0;
|
|
var_0.in_use = 0;
|
|
self.iscarrying = 0;
|
|
}
|
|
|
|
maps\mp\_utility::clearlowermessage( "disengage_turret" );
|
|
maps\mp\_utility::clearlowermessage( "early_exit" );
|
|
var_0 notify( "exit" );
|
|
var_0 notify( "player_exit" );
|
|
clear_turret_reticle();
|
|
var_0.use_trigger show();
|
|
}
|
|
|
|
check_player_state_and_stop_using_turret( var_0 )
|
|
{
|
|
for (;;)
|
|
{
|
|
if ( !isdefined( self.owner ) || self.owner != var_0 )
|
|
break;
|
|
|
|
if ( var_0 maps\mp\alien\_utility::is_in_laststand() )
|
|
break;
|
|
|
|
if ( var_0.health <= 1 )
|
|
break;
|
|
|
|
if ( maps\mp\alien\_utility::is_true( var_0.pressed_use ) )
|
|
break;
|
|
|
|
if ( maps\mp\alien\_utility::is_true( self.broken ) )
|
|
break;
|
|
|
|
if ( self.overloaded )
|
|
break;
|
|
|
|
if ( self.reloading )
|
|
{
|
|
wait 0.5;
|
|
break;
|
|
}
|
|
|
|
wait 0.1;
|
|
}
|
|
|
|
var_0 stop_using_turret( self, self.turrettype );
|
|
}
|
|
|
|
add_reticle_to_player_view()
|
|
{
|
|
self.beacon_turret_icon = [];
|
|
var_0 = "reticle_flechette";
|
|
self.beacon_turret_icon["hud_center"] = maps\mp\gametypes\_hud_util::createicon( var_0, 32, 32 );
|
|
self.beacon_turret_icon["hud_center"] set_default_hud_parameters();
|
|
self.beacon_turret_icon["hud_center"].alignx = "center";
|
|
self.beacon_turret_icon["hud_center"].aligny = "middle";
|
|
self.beacon_turret_icon["hud_center"].alpha = 1.0;
|
|
}
|
|
|
|
set_default_hud_parameters()
|
|
{
|
|
self.alignx = "left";
|
|
self.aligny = "top";
|
|
self.horzalign = "center";
|
|
self.vertalign = "middle";
|
|
self.hidewhendead = 0;
|
|
self.hidewheninmenu = 0;
|
|
self.sort = 205;
|
|
self.foreground = 1;
|
|
self.alpha = 0.65;
|
|
}
|
|
|
|
clear_turret_reticle()
|
|
{
|
|
if ( isdefined( self.beacon_turret_icon["hud_center"] ) )
|
|
{
|
|
self.beacon_turret_icon["hud_center"] destroy();
|
|
self.beacon_turret_icon["hud_center"] = undefined;
|
|
}
|
|
}
|
|
|
|
turret_is_broken( var_0 )
|
|
{
|
|
var_0.broken = 1;
|
|
|
|
while ( !( isdefined( var_0.reloading_func_done ) && isdefined( var_0.overloading_func_done ) ) )
|
|
wait 0.1;
|
|
|
|
var_0 disable_turret();
|
|
self makeunusable();
|
|
self sethintstring( "" );
|
|
maps\mp\alien\_outline_proto::remove_from_outline_watch_list( self.outline_model );
|
|
var_0 thread play_broken_fx();
|
|
playfx( level._effect["electrical_sparks_20_funner"], self.origin );
|
|
}
|
|
|
|
is_port_side_boss_turret()
|
|
{
|
|
if ( self.origin[1] > 6500 && self.origin[0] < -300 )
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
test_hud_on_player()
|
|
{
|
|
wait 10;
|
|
|
|
foreach ( var_1 in level.players )
|
|
var_1 add_reticle_to_player_view();
|
|
}
|
|
|
|
debug_print_posrot( var_0 )
|
|
{
|
|
if ( maps\mp\alien\_utility::has_tag( self.model, var_0 ) )
|
|
{
|
|
var_1 = self gettagorigin( var_0 );
|
|
var_2 = self gettagangles( var_0 );
|
|
}
|
|
else
|
|
{
|
|
var_1 = self gettagorigin( "tag_origin" );
|
|
var_2 = self gettagangles( "tag_origin" );
|
|
}
|
|
|
|
iprintln( "origin: " + var_1[0] + ", " + var_1[1] + ", " + var_1[2] );
|
|
iprintln( "angles: " + var_2[0] + ", " + var_2[1] + ", " + var_2[2] );
|
|
}
|
|
|
|
sfx_kraken_shock( var_0 )
|
|
{
|
|
if ( !isdefined( level.kraken_shock_sfx ) )
|
|
level.kraken_shock_sfx = 0;
|
|
|
|
if ( level.kraken_shock_sfx == 0 )
|
|
{
|
|
level.kraken_shock_sfx = 1;
|
|
playsoundatpos( var_0, "kraken_big_shock" );
|
|
wait 1.8;
|
|
level.kraken_shock_sfx = 0;
|
|
}
|
|
else
|
|
playsoundatpos( var_0, "kraken_small_shock" );
|
|
}
|