// IW6 GSC SOURCE // Generated by https://github.com/xensik/gsc-tool init_system() { level.death_model_col = getent( "death_collision_map", "targetname" ); level.scr_model["vehicle_t90ms_tank_destroyed_iw6"] = "vehicle_t90ms_tank_destroyed_iw6"; level.friendly_thermal_reflector_effect = loadfx( "fx/misc/thermal_tapereflect_inv_lrg" ); level.numberofhitstaken = 0; level.allyhitcount = 0; thread handle_friendly_fail(); precachemodel( "vehicle_gaz_tigr_base_destroyed_crushable" ); tank_tread_freq_all(); common_scripts\utility::flag_init( "playerTankNoDeath" ); common_scripts\utility::flag_init( "stop_tank_chatter" ); } init_tank( var_0, var_1, var_2 ) { if ( !isdefined( var_1 ) || !isplayer( var_1 ) ) var_1 = level.player; if ( isdefined( var_2 ) ) common_scripts\utility::flag_wait( var_2 ); var_0 mount_tank( var_1 ); } mount_tank( var_0, var_1, var_2, var_3, var_4, var_5 ) { if ( isdefined( var_1 ) ) { if ( !isdefined( var_2 ) ) var_2 = 1.0; level.player thread static_on( var_2, 1.0 ); if ( isdefined( var_3 ) ) wait( var_2 ); } if ( !isdefined( var_4 ) || !var_4 ) thread mark_friendly_vehicles(); var_6 = self; common_scripts\utility::flag_set( "player_in_tank" ); var_0 enableinvulnerability(); var_0 enableslowaim( 0.5, 0.25 ); var_7 = var_6 gettagangles( "tag_flash" ); var_7 = ( var_7[0], var_7[1], 0 ); var_0 setplayerangles( var_7 ); level.player maps\_utility::player_mount_vehicle( var_6 ); var_6 makeunusable(); setsaveddvar( "cg_viewVehicleInfluence", 0.1 ); setsaveddvar( "aim_aimAssistRangeScale", "1" ); setsaveddvar( "aim_autoAimRangeScale", "1" ); var_0 allowprone( 0 ); var_0 allowcrouch( 0 ); var_0 enableweaponswitch(); var_0 enableoffhandweapons(); var_0 enableweapons(); thread tank_zoom(); level.player thread take_fire_tracking(); var_6 thread tank_rumble(); var_6 thread tank_quake(); var_6 thread tank_health_monitor(); var_6 thread tank_boost(); level.player thread tank_hud( var_6, var_5, var_4 ); var_6 thread on_fire_main_cannon(); var_6 thread on_fire_mg(); var_6 thread tank_handle_sabot( var_4 ); var_6 thread on_pop_smoke(); var_6 thread on_fire_sabot(); level.player thread toggle_thermal(); level.player.old_contents = level.player.contents; level.player.contents = 0; level.playertank listen_player(); thread exiting_combat_zone(); thread fire_tracking_missile_mig(); level thread maps\satfarm_audio::player_tank_sounds(); var_0 lerpviewangleclamp( 1, 0.05, 0.05, 180, 180, 30, 5 ); var_6 thread player_view_clamp(); if ( isdefined( level.player.was_in_thermal ) && level.player.was_in_thermal ) { level.player.was_in_thermal = 0; level.player notify( "thermal" ); } } dismount_tank( var_0, var_1, var_2, var_3, var_4 ) { if ( isdefined( var_1 ) && var_1 ) { if ( !isdefined( var_2 ) ) var_2 = 1.0; var_0 thread static_on( var_2, 1.0 ); } if ( !isdefined( var_3 ) || !var_3 ) remove_all_tags(); var_5 = self; var_0 maps\_utility::player_dismount_vehicle(); if ( !isdefined( var_3 ) || !var_3 ) setsaveddvar( "aim_aimAssistRangeScale", "1" ); setsaveddvar( "aim_autoAimRangeScale", "1" ); common_scripts\utility::flag_clear( "player_in_tank" ); var_0 disableinvulnerability(); var_0 disableslowaim(); var_0 allowads( 1 ); var_0 allowprone( 1 ); var_0 allowcrouch( 1 ); var_0 uav_thermal_off(); level.player digitaldistortsetparams( 0, 0 ); if ( !isdefined( var_3 ) || !var_3 ) { var_0 notify( "tank_dismount" ); var_0 enableoffhandweapons(); } else { level.old_kill_fail_flag = common_scripts\utility::flag( "kill_fail_flag" ); var_0 notify( "missile_tank_dismount" ); if ( isdefined( level.hintelement ) ) level.hintelement maps\_hud_util::destroyelem(); if ( isdefined( level.playertank ) ) level.playertank vehicle_setspeedimmediate( 0, 100, 100 ); var_0 disableoffhandweapons(); thread disable_all_triggers(); stopallrumbles(); } var_5 notify( "stop_do_damage_from_tank" ); var_0.contents = var_0.old_contents; var_0 thread tank_clear_hud( var_4 ); common_scripts\utility::flag_clear( "MG_FIRE" ); common_scripts\utility::flag_set( "dismounted_tank" ); } player_view_clamp() { self endon( "death" ); level.player endon( "tank_dismount" ); level.player endon( "missile_tank_dismount" ); for (;;) { var_0 = vectornormalize( self gettagorigin( "tag_barrel" ) - self.origin ); var_1 = anglestoforward( self.angles ); var_2 = vectordot( var_1, var_0 ); if ( var_2 <= -0.5 ) level.player lerpviewangleclamp( 0, 0, 0, 180, 180, 30, 5 ); else level.player lerpviewangleclamp( 0, 0, 0, 180, 180, 30, 15 ); wait 0.25; } } mark_friendly_vehicles() { level endon( "remove_all_tags" ); for (;;) { foreach ( var_1 in vehicle_getarray() ) { if ( var_1.script_team == "allies" && var_1 != level.playertank && var_1 istank() && !isdefined( var_1.chevron_tag ) ) { var_1.chevron_tag = var_1 common_scripts\utility::spawn_tag_origin(); var_1.chevron_tag linkto( var_1, "tag_origin", ( 0, 0, 150 ), ( 0, 0, 0 ) ); playfxontag( common_scripts\utility::getfx( "friendly_tank_chevron" ), var_1.chevron_tag, "tag_origin" ); var_1 thread remove_tag_on_death(); } } wait 0.05; } } remove_tag_on_death() { common_scripts\utility::waittill_any( "death", "remove_tags" ); if ( isdefined( self.chevron_tag ) ) { stopfxontag( common_scripts\utility::getfx( "friendly_tank_chevron" ), self.chevron_tag, "tag_origin" ); self.chevron_tag delete(); self.chevron_tag = undefined; } if ( isdefined( self.reflector_tag ) ) { self.reflector_tag delete(); self.reflector_tag = undefined; } } remove_all_tags() { level notify( "remove_all_tags" ); foreach ( var_1 in vehicle_getarray() ) { if ( var_1.script_team == "allies" ) var_1 notify( "remove_tags" ); } } tank_rumble() { self endon( "death" ); level.player endon( "tank_dismount" ); level.player endon( "missile_tank_dismount" ); var_0 = self; var_1 = spawn( "script_origin", var_0.driver.origin + ( 0, 0, 500 ) ); var_1 playrumblelooponentity( "subtler_tank_rumble" ); thread cleanup_rumble_on_death( var_1 ); thread cleanup_rumble_on_dismount( var_1 ); var_2 = gettime(); for (;;) { var_3 = var_0 vehicle_getspeed(); var_4 = clamp( 1 - var_3 / 50, 0.0, 1.0 ); var_5 = 400 + 100 * var_4; var_1 unlink(); var_1 linkto( level.player, "", ( 0.0, 0.0, var_5 ), ( 0, 0, 0 ) ); wait 0.1; } } cleanup_rumble_on_death( var_0 ) { level.player endon( "tank_dismount" ); level.player endon( "missile_tank_dismount" ); self waittill( "death" ); if ( isdefined( var_0 ) ) { var_0 stoprumble( "subtler_tank_rumble" ); var_0 delete(); } } cleanup_rumble_on_dismount( var_0 ) { self endon( "death" ); level.player common_scripts\utility::waittill_either( "tank_dismount", "missile_tank_dismount" ); if ( isdefined( var_0 ) ) { var_0 stoprumble( "subtler_tank_rumble" ); var_0 delete(); } } tank_quake() { self endon( "death" ); level.player endon( "tank_dismount" ); level.player endon( "missile_tank_dismount" ); var_0 = self; var_1 = gettime(); level.isfiring = 0; for (;;) { var_2 = var_0 vehicle_getspeed(); var_3 = clamp( var_2 / 50, 0.0, 1.0 ); if ( level.isfiring ) { earthquake( 0.4, 1.0, var_0.driver.origin, 512 ); wait 0.9; level.isfiring = 0; continue; } var_4 = 0.05 + 0.05 * var_3; earthquake( var_4, 0.25, var_0.driver.origin, 512 ); wait 0.05; } } tank_health_monitor() { level.player endon( "tank_dismount" ); level.player endon( "missile_tank_dismount" ); level endon( "final_hit" ); if ( !isdefined( self.current_hit_count ) ) self.current_hit_count = 0; if ( level.gameskill == 3 ) self.max_hit_count = 4; else if ( level.gameskill == 2 ) self.max_hit_count = 5; else self.max_hit_count = 6; self.max_health = self.health; while ( !common_scripts\utility::flag( "final_hit" ) ) { self waittill( "damage", var_0, var_1, var_2, var_3, var_4 ); var_4 = tolower( var_4 ); if ( var_4 != "mod_projectile" && var_4 != "mod_projectile_splash" && var_4 != "mod_explosive" || isdefined( var_1.script_team ) && var_1.script_team == "allies" ) { self.health = self.max_health; continue; } if ( !common_scripts\utility::flag( "playerTankNoDeath" ) ) self.current_hit_count++; else if ( self.current_hit_count < self.max_hit_count - 1 ) self.current_hit_count++; else self.current_hit_count = self.max_hit_count - 1; level.numberofhitstaken++; earthquake( 0.5, 1.0, self.origin, 512 ); level.player playrumbleonentity( "damage_heavy" ); level.player viewkick( 1, var_3 ); var_5 = 1 / self.max_hit_count * ( self.current_hit_count * 0.5 ); level.player digitaldistortsetparams( var_5, var_5 ); if ( self.current_hit_count >= self.max_hit_count ) { self makeusable(); self useby( level.player ); level.player disableinvulnerability(); level.player kill(); self kill(); return; } else { self.health = self.maxhealth; thread tank_health_regen(); } } } tank_health_regen() { level.player endon( "tank_dismount" ); level endon( "final_hit" ); self endon( "damage" ); self endon( "death" ); var_0 = 3; while ( self.current_hit_count > 0 ) { wait( var_0 ); self.current_hit_count--; self notify( "regen" ); var_1 = 1 / self.max_hit_count * ( self.current_hit_count * 0.5 ); level.player digitaldistortsetparams( var_1, var_1 ); if ( var_0 > 1 ) { if ( var_0 > 0 ) { var_0 = var_0 - 1; continue; } level.player digitaldistortsetparams( 0, 0 ); self.current_hit_count = 0; break; } } level.player painvisionoff(); } tank_save( var_0 ) { level endon( "air_strip_end" ); while ( self.current_hit_count > 0 ) common_scripts\utility::waitframe(); maps\_utility::autosave_by_name( var_0 ); } tank_boost() { level.player endon( "tank_dismount" ); level.player endon( "missile_tank_dismount" ); var_0 = []; var_0[var_0.size] = "satfarm_td1_punchit"; var_0[var_0.size] = "satfarm_td1_move"; var_0[var_0.size] = "satfarm_td1_floorit"; var_0[var_0.size] = "satfarm_td1_fullthrottle"; var_1 = 0; for (;;) { level.playertank waittill( "veh_boost_activated" ); thread radio_dialog_add_and_go( var_0[var_1], 0.1, 0 ); var_1++; if ( var_1 >= var_0.size ) var_1 = 0; } } tank_zoom() { level.player endon( "tank_dismount" ); level.player endon( "missile_tank_dismount" ); level.player notifyonplayercommand( "zoomin", "+speed_throw" ); level.player notifyonplayercommand( "zoomout", "-speed_throw" ); level.player notifyonplayercommand( "zoomin", "+toggleads_throw" ); level.player notifyonplayercommand( "zoomout", "+toggleads_throw" ); level.player notifyonplayercommand( "zoomin", "+speed" ); level.player notifyonplayercommand( "zoomout", "-speed" ); level.player notifyonplayercommand( "zoomin", "+ads_akimbo_accessible" ); level.player notifyonplayercommand( "zoomout", "+ads_akimbo_accessible" ); level.zoomlevel = 15; while ( !common_scripts\utility::flag( "optics_out" ) ) { level.player waittill( "zoomin" ); if ( isdefined( level.player.tank_hud_item["current_weapon"] ) && level.player.tank_hud_item["current_weapon"].weap != "turret" ) continue; level.player thread tank_dynamic_zoom_monitor(); common_scripts\utility::flag_set( "PLAYER_ZOOMED_ONCE" ); common_scripts\utility::flag_set( "ZOOM_ON" ); level.player waittill( "zoomout" ); if ( isdefined( level.player.tank_hud_item["current_weapon"] ) && level.player.tank_hud_item["current_weapon"].weap != "turret" ) continue; level.player lerpfov( 65, 0.15 ); level.player.tank_hud_item["turret_zoom"] settext( "1.0 X" ); common_scripts\utility::flag_clear( "ZOOM_ON" ); } } tank_dynamic_zoom_monitor() { self endon( "zoomout" ); self endon( "tank_dismount" ); self endon( "missile_tank_dismount" ); var_0 = 65; var_1 = var_0; var_2 = 18000; var_3 = 500; var_4 = tan( var_0 ) * var_3; var_5 = 20; var_6 = 0.1; for (;;) { var_7 = 0; var_8 = []; foreach ( var_10 in target_getarray() ) { if ( target_isinrect( var_10, self, var_0, 30, 30 ) && distancesquared( self geteye(), var_10.origin ) < var_2 * var_2 && var_10 sightconetrace( self geteye() ) != 0 ) var_8[var_8.size] = var_10; } if ( var_8.size > 0 ) { var_12 = ( 0, 0, 0 ); foreach ( var_10 in var_8 ) var_12 = var_12 + var_10.origin; var_12 = var_12 / var_8.size; var_15 = distance( var_12, self geteye() ); if ( var_15 > var_3 ) { var_16 = atan( var_4 / var_15 ); if ( var_16 <= var_5 ) { var_1 = var_16; self lerpfov( var_16, var_6 ); var_7 = 1; } } } if ( !var_7 && getdvarfloat( "cg_fov" ) != var_5 ) { var_1 = var_5; self lerpfov( var_5, var_6 ); } var_17 = var_0 / var_1; var_17 = int( var_17 * 10 ) / 10; var_18 = "" + var_17 + common_scripts\utility::ter_op( modulus( var_17, 10 ) == 0, ".0 X", " X" ); self.tank_hud_item["turret_zoom"] settext( var_18 ); wait 0.1; var_6 = 0.5; } } toggle_zoom() { level.player notifyonplayercommand( "zoom", "+actionslot 4" ); for (;;) { iprintlnbold( "Zoom 20 DEFAULT." ); level.zoomlevel = 20; wait 0.05; level.player waittill( "zoom" ); iprintlnbold( "Zoom 30." ); level.zoomlevel = 30; wait 0.05; level.player waittill( "zoom" ); iprintlnbold( "Zoom 40." ); level.zoomlevel = 40; wait 0.05; level.player waittill( "zoom" ); iprintlnbold( "Zoom 50." ); level.zoomlevel = 50; wait 0.05; level.player waittill( "zoom" ); iprintlnbold( "Zoom 60." ); level.zoomlevel = 60; wait 0.05; level.player waittill( "zoom" ); iprintlnbold( "Zoom 65." ); level.zoomlevel = 65; wait 0.05; level.player waittill( "zoom" ); } } detectkill() { self.nodrop = 1; self.grenadeammo = 0; thread detectdamage(); self waittill( "death", var_0, var_1 ); if ( isdefined( self ) ) { if ( isai( self ) ) { if ( isdefined( self.weapon ) && self.weapon != "none" ) animscripts\shared::placeweaponon( self.weapon, "none" ); } else self hidepart( "tag_weapon_right" ); } if ( isdefined( var_1 ) && isdefined( var_0 ) && isdefined( level.playertank ) && var_0 == level.playertank ) { var_1 = tolower( var_1 ); if ( var_1 == "mod_crush" ) { thread common_scripts\utility::play_sound_in_space( "satf_body_crush_plr", self.origin ); thread common_scripts\utility::play_sound_in_space( "satfarm_crush_scream_plr", self.origin ); level.player screenshakeonentity( 4.0, 1.0, 1.0, 0.5, 0, 0.25, 0, 2.0, 0.5, 0.5 ); level.player playrumbleonentity( "damage_light" ); } } } detectdamage() { self waittill( "damage", var_0, var_1, var_2, var_3, var_4 ); if ( isdefined( var_4 ) && isdefined( var_1 ) && isdefined( level.playertank ) && var_1 == level.playertank ) { var_4 = tolower( var_4 ); if ( var_4 == "mod_crush" ) { if ( isdefined( self ) && self.health == 0 ) self.noragdoll = 1; } } } tank_hud( var_0, var_1, var_2 ) { level notify( "clear_tank_hud" ); var_3 = 0.66; if ( isdefined( var_2 ) && var_2 ) var_3 = 0.0; self.tank_hud_item["tank_overlay"] = maps\_hud_util::createicon( "ugv_vignette_overlay", 640, 480 ); self.tank_hud_item["tank_overlay"] set_default_hud_parameters(); self.tank_hud_item["tank_overlay"].alignx = "left"; self.tank_hud_item["tank_overlay"].aligny = "top"; self.tank_hud_item["tank_overlay"].horzalign = "fullscreen"; self.tank_hud_item["tank_overlay"].vertalign = "fullscreen"; self.tank_hud_item["tank_overlay"].alpha = 0.5; self.tank_hud_item["tank_overlay"].sort = self.tank_hud_item["tank_overlay"].sort - 5; self.tank_hud_item["reticle"] = maps\_hud_util::createicon( "m1a1_tank_primary_reticle", 400, 200 ); self.tank_hud_item["reticle"] set_default_hud_parameters(); self.tank_hud_item["reticle"].alignx = "center"; self.tank_hud_item["reticle"].aligny = "middle"; self.tank_hud_item["reticle"].alpha = var_3; self.tank_hud_item["reticle_center"] = maps\_hud_util::createicon( "m1a1_tank_primary_reticle_center", 20, 20 ); self.tank_hud_item["reticle_center"] set_default_hud_parameters(); self.tank_hud_item["reticle_center"].alignx = "center"; self.tank_hud_item["reticle_center"].aligny = "middle"; self.tank_hud_item["reticle_center"].alpha = var_3; self.tank_hud_item["reticle_center_cyan"] = maps\_hud_util::createicon( "m1a1_tank_primary_reticle_center_cyan", 20, 20 ); self.tank_hud_item["reticle_center_cyan"] set_default_hud_parameters(); self.tank_hud_item["reticle_center_cyan"].alignx = "center"; self.tank_hud_item["reticle_center_cyan"].aligny = "middle"; self.tank_hud_item["reticle_center_cyan"].alpha = 0.0; self.tank_hud_item["reticle_center_red"] = maps\_hud_util::createicon( "m1a1_tank_primary_reticle_center_red", 20, 20 ); self.tank_hud_item["reticle_center_red"] set_default_hud_parameters(); self.tank_hud_item["reticle_center_red"].alignx = "center"; self.tank_hud_item["reticle_center_red"].aligny = "middle"; self.tank_hud_item["reticle_center_red"].alpha = 0.0; self.tank_hud_item["reticle_cross"] = maps\_hud_util::createicon( "m1a1_tank_primary_reticle_cross", 88, 88 ); self.tank_hud_item["reticle_cross"] set_default_hud_parameters(); self.tank_hud_item["reticle_cross"].alignx = "center"; self.tank_hud_item["reticle_cross"].aligny = "middle"; self.tank_hud_item["reticle_cross"].alpha = var_3; self.tank_hud_item["reticle_cross_cyan"] = maps\_hud_util::createicon( "m1a1_tank_primary_reticle_cross_cyan", 88, 88 ); self.tank_hud_item["reticle_cross_cyan"] set_default_hud_parameters(); self.tank_hud_item["reticle_cross_cyan"].alignx = "center"; self.tank_hud_item["reticle_cross_cyan"].aligny = "middle"; self.tank_hud_item["reticle_cross_cyan"].alpha = 0.0; self.tank_hud_item["reticle_cross_red"] = maps\_hud_util::createicon( "m1a1_tank_primary_reticle_cross_red", 88, 88 ); self.tank_hud_item["reticle_cross_red"] set_default_hud_parameters(); self.tank_hud_item["reticle_cross_red"].alignx = "center"; self.tank_hud_item["reticle_cross_red"].aligny = "middle"; self.tank_hud_item["reticle_cross_red"].alpha = 0.0; self.tank_hud_item["compass_heading"] = maps\_hud_util::createicon( "m1a1_compass_center", 10, 20 ); self.tank_hud_item["compass_heading"] set_default_hud_parameters(); self.tank_hud_item["compass_heading"].alignx = "center"; self.tank_hud_item["compass_heading"].aligny = "top"; self.tank_hud_item["compass_heading"].vertalign = "top"; self.tank_hud_item["compass_heading"].x = 0; self.tank_hud_item["compass_heading"].y = 10; self.tank_hud_item["compass_heading"].alpha = 0.9; self.tank_hud_item["turret_zoom"] = maps\_hud_util::createclientfontstring( "small", 1.3 ); self.tank_hud_item["turret_zoom"] set_default_hud_parameters(); self.tank_hud_item["turret_zoom"].alignx = "right"; self.tank_hud_item["turret_zoom"].aligny = "bottom"; self.tank_hud_item["turret_zoom"].alpha = 0.9; self.tank_hud_item["turret_zoom"].x = 0 - self.tank_hud_item["reticle"].width * 0.4; self.tank_hud_item["turret_zoom"].y = -5; self.tank_hud_item["turret_zoom"] settext( "1.0 X" ); self.tank_hud_item["turret_state_bg"] = maps\_hud_util::createicon( "m1a1_tank_weapon_progress_bar", 96, 12 ); self.tank_hud_item["turret_state_bg"] set_default_hud_parameters(); self.tank_hud_item["turret_state_bg"].alignx = "center"; self.tank_hud_item["turret_state_bg"].aligny = "middle"; self.tank_hud_item["turret_state_bg"].vertalign = "bottom"; self.tank_hud_item["turret_state_bg"].x = 170 - common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); self.tank_hud_item["turret_state_bg"].y = -50; self.tank_hud_item["turret_state_bg"].alpha = 0.9; self.tank_hud_item["turret_state"] = maps\_hud_util::createicon( "green_block", 57, 5 ); self.tank_hud_item["turret_state"] set_default_hud_parameters(); self.tank_hud_item["turret_state"].alignx = "left"; self.tank_hud_item["turret_state"].aligny = "middle"; self.tank_hud_item["turret_state"].vertalign = "bottom"; self.tank_hud_item["turret_state"].x = 142 - common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); self.tank_hud_item["turret_state"].y = -51; self.tank_hud_item["turret_state"].alpha = 0.4; self.tank_hud_item["turret_name"] = maps\_hud_util::createclientfontstring( "small", 1.2 ); self.tank_hud_item["turret_name"] set_default_hud_parameters(); self.tank_hud_item["turret_name"].alignx = "center"; self.tank_hud_item["turret_name"].aligny = "bottom"; self.tank_hud_item["turret_name"].vertalign = "bottom"; self.tank_hud_item["turret_name"].alpha = 0.9; self.tank_hud_item["turret_name"].x = 170 - common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); self.tank_hud_item["turret_name"].y = -57; self.tank_hud_item["turret_name"] settext( &"SATFARM_TANK_TURRET" ); self.tank_hud_item["turret_status"] = maps\_hud_util::createclientfontstring( "small", 1.2 ); self.tank_hud_item["turret_status"] set_default_hud_parameters(); self.tank_hud_item["turret_status"].alignx = "center"; self.tank_hud_item["turret_status"].aligny = "top"; self.tank_hud_item["turret_status"].vertalign = "bottom"; self.tank_hud_item["turret_status"].alpha = 0.9; self.tank_hud_item["turret_status"].x = 170 - common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); self.tank_hud_item["turret_status"].y = -43; self.tank_hud_item["turret_status"] settext( &"SATFARM_READY" ); self.tank_hud_item["turret_offline"] = maps\_hud_util::createclientfontstring( "small", 1.6 ); self.tank_hud_item["turret_offline"] set_default_hud_parameters(); self.tank_hud_item["turret_offline"].alignx = "center"; self.tank_hud_item["turret_offline"].aligny = "middle"; self.tank_hud_item["turret_offline"].vertalign = "bottom"; self.tank_hud_item["turret_offline"].alpha = 0; self.tank_hud_item["turret_offline"].x = 170 - common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); self.tank_hud_item["turret_offline"].y = -50; self.tank_hud_item["turret_offline"] settext( &"SATFARM_OFFLINE" ); self.tank_hud_item["turret_warning"] = maps\_hud_util::createicon( "m1a1_tank_warning", 96, 96 ); self.tank_hud_item["turret_warning"] set_default_hud_parameters(); self.tank_hud_item["turret_warning"].alignx = "center"; self.tank_hud_item["turret_warning"].aligny = "middle"; self.tank_hud_item["turret_warning"].vertalign = "bottom"; self.tank_hud_item["turret_warning"].x = 170 - common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); self.tank_hud_item["turret_warning"].y = -50; self.tank_hud_item["turret_warning"].alpha = 0.0; self.tank_hud_item["missile_state_bg"] = maps\_hud_util::createicon( "m1a1_tank_weapon_progress_bar", 96, 12 ); self.tank_hud_item["missile_state_bg"] set_default_hud_parameters(); self.tank_hud_item["missile_state_bg"].alignx = "center"; self.tank_hud_item["missile_state_bg"].aligny = "middle"; self.tank_hud_item["missile_state_bg"].vertalign = "bottom"; self.tank_hud_item["missile_state_bg"].x = 270 - common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); self.tank_hud_item["missile_state_bg"].y = -50; self.tank_hud_item["missile_state_bg"].alpha = 0.9; self.tank_hud_item["missile_state"] = maps\_hud_util::createicon( "green_block", 57, 5 ); self.tank_hud_item["missile_state"] set_default_hud_parameters(); self.tank_hud_item["missile_state"].alignx = "left"; self.tank_hud_item["missile_state"].aligny = "middle"; self.tank_hud_item["missile_state"].vertalign = "bottom"; self.tank_hud_item["missile_state"].x = 242 - common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); self.tank_hud_item["missile_state"].y = -51; self.tank_hud_item["missile_state"].alpha = 0.4; self.tank_hud_item["missile_name"] = maps\_hud_util::createclientfontstring( "small", 1.2 ); self.tank_hud_item["missile_name"] set_default_hud_parameters(); self.tank_hud_item["missile_name"].alignx = "center"; self.tank_hud_item["missile_name"].aligny = "bottom"; self.tank_hud_item["missile_name"].vertalign = "bottom"; self.tank_hud_item["missile_name"].alpha = 0.25; self.tank_hud_item["missile_name"].x = 270 - common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); self.tank_hud_item["missile_name"].y = -57; self.tank_hud_item["missile_name"] settext( &"SATFARM_TANK_MISSILE" ); self.tank_hud_item["missile_status"] = maps\_hud_util::createclientfontstring( "small", 1.2 ); self.tank_hud_item["missile_status"] set_default_hud_parameters(); self.tank_hud_item["missile_status"].alignx = "center"; self.tank_hud_item["missile_status"].aligny = "top"; self.tank_hud_item["missile_status"].vertalign = "bottom"; self.tank_hud_item["missile_status"].alpha = 0.25; self.tank_hud_item["missile_status"].x = 270 - common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); self.tank_hud_item["missile_status"].y = -43; self.tank_hud_item["missile_status"] settext( &"SATFARM_IDLE" ); self.tank_hud_item["missile_offline"] = maps\_hud_util::createclientfontstring( "small", 1.6 ); self.tank_hud_item["missile_offline"] set_default_hud_parameters(); self.tank_hud_item["missile_offline"].alignx = "center"; self.tank_hud_item["missile_offline"].aligny = "middle"; self.tank_hud_item["missile_offline"].vertalign = "bottom"; self.tank_hud_item["missile_offline"].alpha = 0; self.tank_hud_item["missile_offline"].x = 270 - common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); self.tank_hud_item["missile_offline"].y = -50; self.tank_hud_item["missile_offline"] settext( &"SATFARM_OFFLINE" ); self.tank_hud_item["missile_warning"] = maps\_hud_util::createicon( "m1a1_tank_warning", 96, 96 ); self.tank_hud_item["missile_warning"] set_default_hud_parameters(); self.tank_hud_item["missile_warning"].alignx = "center"; self.tank_hud_item["missile_warning"].aligny = "middle"; self.tank_hud_item["missile_warning"].vertalign = "bottom"; self.tank_hud_item["missile_warning"].x = 270 - common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); self.tank_hud_item["missile_warning"].y = -50; self.tank_hud_item["missile_warning"].alpha = 0.0; self.tank_hud_item["current_weapon"] = maps\_hud_util::createicon( "m1a1_tank_weapon_select_arrow", 12, 12 ); self.tank_hud_item["current_weapon"] set_default_hud_parameters(); self.tank_hud_item["current_weapon"].alignx = "center"; self.tank_hud_item["current_weapon"].aligny = "top"; self.tank_hud_item["current_weapon"].vertalign = "bottom"; self.tank_hud_item["current_weapon"].x = 170 - common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); self.tank_hud_item["current_weapon"].y = -26; self.tank_hud_item["current_weapon"].alpha = 0.9; self.tank_hud_item["current_weapon"].weap = "turret"; var_3 = 0.0; if ( isdefined( var_2 ) && var_2 ) var_3 = 0.66; self.tank_hud_item["sabot_overlay"] = maps\_hud_util::createicon( "m1a1_tank_sabot_grid_overlay", 640, 480 ); self.tank_hud_item["sabot_overlay"] set_default_hud_parameters(); self.tank_hud_item["sabot_overlay"].alignx = "left"; self.tank_hud_item["sabot_overlay"].aligny = "top"; self.tank_hud_item["sabot_overlay"].horzalign = "fullscreen"; self.tank_hud_item["sabot_overlay"].vertalign = "fullscreen"; self.tank_hud_item["sabot_overlay"].alpha = var_3; self.tank_hud_item["sabot_overlay"].sort = self.tank_hud_item["sabot_overlay"].sort - 5; self.tank_hud_item["sabot_vignette"] = maps\_hud_util::createicon( "m1a1_tank_sabot_vignette", 640, 480 ); self.tank_hud_item["sabot_vignette"] set_default_hud_parameters(); self.tank_hud_item["sabot_vignette"].alignx = "left"; self.tank_hud_item["sabot_vignette"].aligny = "top"; self.tank_hud_item["sabot_vignette"].horzalign = "fullscreen"; self.tank_hud_item["sabot_vignette"].vertalign = "fullscreen"; self.tank_hud_item["sabot_vignette"].alpha = var_3; self.tank_hud_item["sabot_vignette"].sort = self.tank_hud_item["sabot_vignette"].sort - 5; self.tank_hud_item["sabot_reticle"] = maps\_hud_util::createicon( "m1a1_tank_sabot_reticle_center", 75, 75 ); self.tank_hud_item["sabot_reticle"] set_default_hud_parameters(); self.tank_hud_item["sabot_reticle"].alignx = "center"; self.tank_hud_item["sabot_reticle"].aligny = "middle"; self.tank_hud_item["sabot_reticle"].alpha = var_3; self.tank_hud_item["sabot_reticle_cyan"] = maps\_hud_util::createicon( "m1a1_tank_sabot_reticle_center_cyan", self.tank_hud_item["sabot_reticle"].width, self.tank_hud_item["sabot_reticle"].height ); self.tank_hud_item["sabot_reticle_cyan"] set_default_hud_parameters(); self.tank_hud_item["sabot_reticle_cyan"].alignx = "center"; self.tank_hud_item["sabot_reticle_cyan"].aligny = "middle"; self.tank_hud_item["sabot_reticle_cyan"].alpha = 0.0; self.tank_hud_item["sabot_reticle_red"] = maps\_hud_util::createicon( "m1a1_tank_sabot_reticle_center_red", self.tank_hud_item["sabot_reticle"].width, self.tank_hud_item["sabot_reticle"].height ); self.tank_hud_item["sabot_reticle_red"] set_default_hud_parameters(); self.tank_hud_item["sabot_reticle_red"].alignx = "center"; self.tank_hud_item["sabot_reticle_red"].aligny = "middle"; self.tank_hud_item["sabot_reticle_red"].alpha = 0.0; self.tank_hud_item["sabot_reticle_upper_left"] = maps\_hud_util::createicon( "m1a1_tank_missile_reticle_inner_top_left", 20, 20 ); self.tank_hud_item["sabot_reticle_upper_left"] set_default_hud_parameters(); self.tank_hud_item["sabot_reticle_upper_left"].alignx = "center"; self.tank_hud_item["sabot_reticle_upper_left"].aligny = "middle"; self.tank_hud_item["sabot_reticle_upper_left"].x = self.tank_hud_item["sabot_reticle"].width * -1.25; self.tank_hud_item["sabot_reticle_upper_left"].y = self.tank_hud_item["sabot_reticle"].height * -0.5; self.tank_hud_item["sabot_reticle_upper_left"].alpha = var_3; self.tank_hud_item["sabot_reticle_upper_right"] = maps\_hud_util::createicon( "m1a1_tank_missile_reticle_inner_top_right", 20, 20 ); self.tank_hud_item["sabot_reticle_upper_right"] set_default_hud_parameters(); self.tank_hud_item["sabot_reticle_upper_right"].alignx = "center"; self.tank_hud_item["sabot_reticle_upper_right"].aligny = "middle"; self.tank_hud_item["sabot_reticle_upper_right"].x = self.tank_hud_item["sabot_reticle"].width * 1.25; self.tank_hud_item["sabot_reticle_upper_right"].y = self.tank_hud_item["sabot_reticle"].height * -0.5; self.tank_hud_item["sabot_reticle_upper_right"].alpha = var_3; self.tank_hud_item["sabot_reticle_bottom_left"] = maps\_hud_util::createicon( "m1a1_tank_missile_reticle_inner_bottom_left", 20, 20 ); self.tank_hud_item["sabot_reticle_bottom_left"] set_default_hud_parameters(); self.tank_hud_item["sabot_reticle_bottom_left"].alignx = "center"; self.tank_hud_item["sabot_reticle_bottom_left"].aligny = "middle"; self.tank_hud_item["sabot_reticle_bottom_left"].x = self.tank_hud_item["sabot_reticle"].width * -1.25; self.tank_hud_item["sabot_reticle_bottom_left"].y = self.tank_hud_item["sabot_reticle"].height * 0.5; self.tank_hud_item["sabot_reticle_bottom_left"].alpha = var_3; self.tank_hud_item["sabot_reticle_bottom_right"] = maps\_hud_util::createicon( "m1a1_tank_missile_reticle_inner_bottom_right", 20, 20 ); self.tank_hud_item["sabot_reticle_bottom_right"] set_default_hud_parameters(); self.tank_hud_item["sabot_reticle_bottom_right"].alignx = "center"; self.tank_hud_item["sabot_reticle_bottom_right"].aligny = "middle"; self.tank_hud_item["sabot_reticle_bottom_right"].x = self.tank_hud_item["sabot_reticle"].width * 1.25; self.tank_hud_item["sabot_reticle_bottom_right"].y = self.tank_hud_item["sabot_reticle"].height * 0.5; self.tank_hud_item["sabot_reticle_bottom_right"].alpha = var_3; self.tank_hud_item["sabot_reticle_outer_left"] = maps\_hud_util::createicon( "m1a1_tank_sabot_reticle_outer_left", 40, 320 ); self.tank_hud_item["sabot_reticle_outer_left"] set_default_hud_parameters(); self.tank_hud_item["sabot_reticle_outer_left"].alignx = "center"; self.tank_hud_item["sabot_reticle_outer_left"].aligny = "middle"; self.tank_hud_item["sabot_reticle_outer_left"].x = self.tank_hud_item["sabot_reticle"].width * -2; self.tank_hud_item["sabot_reticle_outer_left"].y = 0; self.tank_hud_item["sabot_reticle_outer_left"].alpha = var_3; self.tank_hud_item["sabot_reticle_outer_right"] = maps\_hud_util::createicon( "m1a1_tank_sabot_reticle_outer_right", 40, 320 ); self.tank_hud_item["sabot_reticle_outer_right"] set_default_hud_parameters(); self.tank_hud_item["sabot_reticle_outer_right"].alignx = "center"; self.tank_hud_item["sabot_reticle_outer_right"].aligny = "middle"; self.tank_hud_item["sabot_reticle_outer_right"].x = self.tank_hud_item["sabot_reticle"].width * 2; self.tank_hud_item["sabot_reticle_outer_right"].y = 0; self.tank_hud_item["sabot_reticle_outer_right"].alpha = var_3; self.tank_hud_item["sabot_target_range"] = maps\_hud_util::createicon( "m1a1_tank_sabot_target_range", 20, 320 ); self.tank_hud_item["sabot_target_range"] set_default_hud_parameters(); self.tank_hud_item["sabot_target_range"].alignx = "center"; self.tank_hud_item["sabot_target_range"].aligny = "middle"; self.tank_hud_item["sabot_target_range"].x = self.tank_hud_item["sabot_reticle"].width * 3; self.tank_hud_item["sabot_target_range"].y = 0; self.tank_hud_item["sabot_target_range"].alpha = var_3; self.tank_hud_item["sabot_fuel_gauge"] = maps\_hud_util::createicon( "m1a1_tank_sabot_fuel_gauge", int( self.tank_hud_item["sabot_target_range"].height * 0.6 * 0.0625 ), int( self.tank_hud_item["sabot_target_range"].height * 0.6 ) ); self.tank_hud_item["sabot_fuel_gauge"] set_default_hud_parameters(); self.tank_hud_item["sabot_fuel_gauge"].alignx = "center"; self.tank_hud_item["sabot_fuel_gauge"].aligny = "middle"; self.tank_hud_item["sabot_fuel_gauge"].x = self.tank_hud_item["sabot_target_range"].x + self.tank_hud_item["sabot_target_range"].width * 2; self.tank_hud_item["sabot_fuel_gauge"].y = 0; self.tank_hud_item["sabot_fuel_gauge"].alpha = var_3; self.tank_hud_item["sabot_fuel_range"] = maps\_hud_util::createicon( "m1a1_tank_sabot_fuel_range", int( self.tank_hud_item["sabot_fuel_gauge"].height * 0.5 * 0.125 ), int( self.tank_hud_item["sabot_fuel_gauge"].height * 0.5 ) ); self.tank_hud_item["sabot_fuel_range"] set_default_hud_parameters(); self.tank_hud_item["sabot_fuel_range"].alignx = "center"; self.tank_hud_item["sabot_fuel_range"].aligny = "middle"; self.tank_hud_item["sabot_fuel_range"].x = self.tank_hud_item["sabot_fuel_gauge"].x + self.tank_hud_item["sabot_fuel_gauge"].width * 2; self.tank_hud_item["sabot_fuel_range"].y = 0; self.tank_hud_item["sabot_fuel_range"].alpha = var_3; self.tank_hud_item["sabot_ROT"] = maps\_hud_util::createclientfontstring( "small", 1.1 ); self.tank_hud_item["sabot_ROT"] set_default_hud_parameters(); self.tank_hud_item["sabot_ROT"].alignx = "right"; self.tank_hud_item["sabot_ROT"].aligny = "middle"; self.tank_hud_item["sabot_ROT"].alpha = var_3; self.tank_hud_item["sabot_ROT"].x = self.tank_hud_item["sabot_target_range"].x - self.tank_hud_item["sabot_target_range"].width * 0.6; self.tank_hud_item["sabot_ROT"].y = 0; self.tank_hud_item["sabot_ROT"] settext( &"SATFARM_RANGE_ON_TARGET" ); self.tank_hud_item["sabot_fuel_range_text"] = maps\_hud_util::createclientfontstring( "small", 0.8 ); self.tank_hud_item["sabot_fuel_range_text"] set_default_hud_parameters(); self.tank_hud_item["sabot_fuel_range_text"].alignx = "left"; self.tank_hud_item["sabot_fuel_range_text"].aligny = "middle"; self.tank_hud_item["sabot_fuel_range_text"].alpha = var_3; self.tank_hud_item["sabot_fuel_range_text"].x = self.tank_hud_item["sabot_fuel_range"].x + self.tank_hud_item["sabot_fuel_range"].width; self.tank_hud_item["sabot_fuel_range_text"].y = -5; self.tank_hud_item["sabot_fuel_range_text"] settext( &"SATFARM_FUELRANGE" ); self.tank_hud_item["sabot_range_highlight"] = maps\_hud_util::createicon( "white", int( self.tank_hud_item["sabot_target_range"].width * 1.25 ), int( self.tank_hud_item["sabot_target_range"].height * 0.0625 ) ); self.tank_hud_item["sabot_range_highlight"] set_default_hud_parameters(); self.tank_hud_item["sabot_range_highlight"].alignx = "left"; self.tank_hud_item["sabot_range_highlight"].aligny = "middle"; self.tank_hud_item["sabot_range_highlight"].x = self.tank_hud_item["sabot_target_range"].x; self.tank_hud_item["sabot_range_highlight"].y = 0 + self.tank_hud_item["sabot_target_range"].height * 0.23; self.tank_hud_item["sabot_range_highlight"].alpha = 0; self.tank_hud_item["sabot_range_1"] = maps\_hud_util::createclientfontstring( "small", 0.8 ); self.tank_hud_item["sabot_range_1"] set_default_hud_parameters(); self.tank_hud_item["sabot_range_1"].alignx = "left"; self.tank_hud_item["sabot_range_1"].aligny = "middle"; self.tank_hud_item["sabot_range_1"].alpha = var_3; self.tank_hud_item["sabot_range_1"].x = self.tank_hud_item["sabot_target_range"].x; self.tank_hud_item["sabot_range_1"].y = 0 + self.tank_hud_item["sabot_target_range"].height * 0.23; self.tank_hud_item["sabot_range_1"] settext( &"SATFARM_RANGE_1" ); self.tank_hud_item["sabot_range_2"] = maps\_hud_util::createclientfontstring( "small", 0.8 ); self.tank_hud_item["sabot_range_2"] set_default_hud_parameters(); self.tank_hud_item["sabot_range_2"].alignx = "left"; self.tank_hud_item["sabot_range_2"].aligny = "middle"; self.tank_hud_item["sabot_range_2"].alpha = var_3; self.tank_hud_item["sabot_range_2"].x = self.tank_hud_item["sabot_target_range"].x; self.tank_hud_item["sabot_range_2"].y = 0 + self.tank_hud_item["sabot_target_range"].height * 0.125; self.tank_hud_item["sabot_range_2"] settext( &"SATFARM_RANGE_2" ); self.tank_hud_item["sabot_range_3"] = maps\_hud_util::createclientfontstring( "small", 0.8 ); self.tank_hud_item["sabot_range_3"] set_default_hud_parameters(); self.tank_hud_item["sabot_range_3"].alignx = "left"; self.tank_hud_item["sabot_range_3"].aligny = "middle"; self.tank_hud_item["sabot_range_3"].alpha = var_3; self.tank_hud_item["sabot_range_3"].x = self.tank_hud_item["sabot_target_range"].x; self.tank_hud_item["sabot_range_3"].y = 0; self.tank_hud_item["sabot_range_3"] settext( &"SATFARM_RANGE_3" ); self.tank_hud_item["sabot_range_4"] = maps\_hud_util::createclientfontstring( "small", 0.8 ); self.tank_hud_item["sabot_range_4"] set_default_hud_parameters(); self.tank_hud_item["sabot_range_4"].alignx = "left"; self.tank_hud_item["sabot_range_4"].aligny = "middle"; self.tank_hud_item["sabot_range_4"].alpha = var_3; self.tank_hud_item["sabot_range_4"].x = self.tank_hud_item["sabot_target_range"].x; self.tank_hud_item["sabot_range_4"].y = 0 - self.tank_hud_item["sabot_target_range"].height * 0.125; self.tank_hud_item["sabot_range_4"] settext( &"SATFARM_RANGE_4" ); self.tank_hud_item["sabot_range_5"] = maps\_hud_util::createclientfontstring( "small", 0.8 ); self.tank_hud_item["sabot_range_5"] set_default_hud_parameters(); self.tank_hud_item["sabot_range_5"].alignx = "left"; self.tank_hud_item["sabot_range_5"].aligny = "middle"; self.tank_hud_item["sabot_range_5"].alpha = var_3; self.tank_hud_item["sabot_range_5"].x = self.tank_hud_item["sabot_target_range"].x; self.tank_hud_item["sabot_range_5"].y = 0 - self.tank_hud_item["sabot_target_range"].height * 0.23; self.tank_hud_item["sabot_range_5"] settext( &"SATFARM_RANGE_5" ); thread tank_update_primary_reticle(); thread tank_compass( var_0 ); thread tank_compass_vehicle_positions( var_0 ); thread tank_compass_objective_positions( var_0 ); thread tank_update_weapon_hud( var_0, var_2 ); thread hide_normal_hud_elements(); if ( isdefined( var_1 ) ) wait( var_1 ); self.tank_hud_item["smoke_state_bg"] = maps\_hud_util::createicon( "m1a1_tank_weapon_progress_bar", 96, 12 ); self.tank_hud_item["smoke_state_bg"] set_default_hud_parameters(); self.tank_hud_item["smoke_state_bg"].alignx = "center"; self.tank_hud_item["smoke_state_bg"].aligny = "middle"; self.tank_hud_item["smoke_state_bg"].vertalign = "bottom"; self.tank_hud_item["smoke_state_bg"].x = -270 + common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); self.tank_hud_item["smoke_state_bg"].y = -50; if ( isdefined( var_1 ) ) { self.tank_hud_item["smoke_state_bg"].alpha = 0.0; self.tank_hud_item["smoke_state_bg"] fadeovertime( 1.0 ); } self.tank_hud_item["smoke_state_bg"].alpha = 0.9; self.tank_hud_item["smoke_state"] = maps\_hud_util::createicon( "green_block", 57, 5 ); self.tank_hud_item["smoke_state"] set_default_hud_parameters(); self.tank_hud_item["smoke_state"].alignx = "left"; self.tank_hud_item["smoke_state"].aligny = "middle"; self.tank_hud_item["smoke_state"].vertalign = "bottom"; self.tank_hud_item["smoke_state"].x = -298 + common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); self.tank_hud_item["smoke_state"].y = -51; if ( isdefined( var_1 ) ) { self.tank_hud_item["smoke_state"].alpha = 0.0; self.tank_hud_item["smoke_state"] fadeovertime( 1.0 ); } self.tank_hud_item["smoke_state"].alpha = 0.4; self.tank_hud_item["smoke_name"] = maps\_hud_util::createclientfontstring( "small", 1.2 ); self.tank_hud_item["smoke_name"] set_default_hud_parameters(); self.tank_hud_item["smoke_name"].alignx = "center"; self.tank_hud_item["smoke_name"].aligny = "bottom"; self.tank_hud_item["smoke_name"].vertalign = "bottom"; if ( isdefined( var_1 ) ) { self.tank_hud_item["smoke_name"].alpha = 0.0; self.tank_hud_item["smoke_name"] fadeovertime( 1.0 ); } self.tank_hud_item["smoke_name"].alpha = 0.9; self.tank_hud_item["smoke_name"].x = -270 + common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); self.tank_hud_item["smoke_name"].y = -57; self.tank_hud_item["smoke_name"] settext( &"SATFARM_SMOKE" ); self.tank_hud_item["smoke_status"] = maps\_hud_util::createclientfontstring( "small", 1.2 ); self.tank_hud_item["smoke_status"] set_default_hud_parameters(); self.tank_hud_item["smoke_status"].alignx = "center"; self.tank_hud_item["smoke_status"].aligny = "top"; self.tank_hud_item["smoke_status"].vertalign = "bottom"; if ( isdefined( var_1 ) ) { self.tank_hud_item["smoke_status"].alpha = 0.0; self.tank_hud_item["smoke_status"] fadeovertime( 1.0 ); } self.tank_hud_item["smoke_status"].alpha = 0.9; self.tank_hud_item["smoke_status"].x = -270 + common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); self.tank_hud_item["smoke_status"].y = -43; self.tank_hud_item["smoke_status"] settext( &"SATFARM_READY" ); self.tank_hud_item["smoke_offline"] = maps\_hud_util::createclientfontstring( "small", 1.6 ); self.tank_hud_item["smoke_offline"] set_default_hud_parameters(); self.tank_hud_item["smoke_offline"].alignx = "center"; self.tank_hud_item["smoke_offline"].aligny = "middle"; self.tank_hud_item["smoke_offline"].vertalign = "bottom"; self.tank_hud_item["smoke_offline"].alpha = 0; self.tank_hud_item["smoke_offline"].x = -270 + common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); self.tank_hud_item["smoke_offline"].y = -50; self.tank_hud_item["smoke_offline"] settext( &"SATFARM_OFFLINE" ); self.tank_hud_item["smoke_warning"] = maps\_hud_util::createicon( "m1a1_tank_warning", 96, 96 ); self.tank_hud_item["smoke_warning"] set_default_hud_parameters(); self.tank_hud_item["smoke_warning"].alignx = "center"; self.tank_hud_item["smoke_warning"].aligny = "middle"; self.tank_hud_item["smoke_warning"].vertalign = "bottom"; self.tank_hud_item["smoke_warning"].x = -270 + common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); self.tank_hud_item["smoke_warning"].y = -50; self.tank_hud_item["smoke_warning"].alpha = 0.0; self.tank_hud_item["speed_bar_bg"] = maps\_hud_util::createicon( "m1a1_tank_weapon_progress_bar", 96, 12 ); self.tank_hud_item["speed_bar_bg"] set_default_hud_parameters(); self.tank_hud_item["speed_bar_bg"].alignx = "center"; self.tank_hud_item["speed_bar_bg"].aligny = "middle"; self.tank_hud_item["speed_bar_bg"].vertalign = "bottom"; self.tank_hud_item["speed_bar_bg"].x = -170 + common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); self.tank_hud_item["speed_bar_bg"].y = -50; if ( isdefined( var_1 ) ) { self.tank_hud_item["speed_bar_bg"].alpha = 0.0; self.tank_hud_item["speed_bar_bg"] fadeovertime( 1.0 ); } self.tank_hud_item["speed_bar_bg"].alpha = 0.9; self.tank_hud_item["speed_bar"] = maps\_hud_util::createicon( "green_block", 57, 5 ); self.tank_hud_item["speed_bar"] set_default_hud_parameters(); self.tank_hud_item["speed_bar"].alignx = "left"; self.tank_hud_item["speed_bar"].aligny = "middle"; self.tank_hud_item["speed_bar"].vertalign = "bottom"; self.tank_hud_item["speed_bar"].x = -198 + common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); self.tank_hud_item["speed_bar"].y = -51; if ( isdefined( var_1 ) ) { self.tank_hud_item["speed_bar"].alpha = 0.0; self.tank_hud_item["speed_bar"] fadeovertime( 1.0 ); } self.tank_hud_item["speed_bar"].alpha = 0.4; self.tank_hud_item["speed_bar_overdrive"] = maps\_hud_util::createicon( "red_block", 57, 5 ); self.tank_hud_item["speed_bar_overdrive"] set_default_hud_parameters(); self.tank_hud_item["speed_bar_overdrive"].alignx = "right"; self.tank_hud_item["speed_bar_overdrive"].aligny = "middle"; self.tank_hud_item["speed_bar_overdrive"].vertalign = "bottom"; self.tank_hud_item["speed_bar_overdrive"].x = self.tank_hud_item["speed_bar"].x + self.tank_hud_item["speed_bar"].width; self.tank_hud_item["speed_bar_overdrive"].y = -51; self.tank_hud_item["speed_bar_overdrive"].alpha = 0.0; self.tank_hud_item["speed_label"] = maps\_hud_util::createclientfontstring( "small", 1.0 ); self.tank_hud_item["speed_label"] set_default_hud_parameters(); self.tank_hud_item["speed_label"].alignx = "left"; self.tank_hud_item["speed_label"].aligny = "bottom"; self.tank_hud_item["speed_label"].vertalign = "bottom"; if ( isdefined( var_1 ) ) { self.tank_hud_item["speed_label"].alpha = 0.0; self.tank_hud_item["speed_label"] fadeovertime( 1.0 ); } self.tank_hud_item["speed_label"].alpha = 0.9; self.tank_hud_item["speed_label"].x = -169 + common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); self.tank_hud_item["speed_label"].y = -57; self.tank_hud_item["speed_label"] settext( &"SATFARM_MPH" ); self.tank_hud_item["speed"] = maps\_hud_util::createclientfontstring( "small", 1.7 ); self.tank_hud_item["speed"] set_default_hud_parameters(); self.tank_hud_item["speed"].alignx = "right"; self.tank_hud_item["speed"].aligny = "bottom"; self.tank_hud_item["speed"].vertalign = "bottom"; if ( isdefined( var_1 ) ) { self.tank_hud_item["speed"].alpha = 0.0; self.tank_hud_item["speed"] fadeovertime( 1.0 ); } self.tank_hud_item["speed"].alpha = 0.9; self.tank_hud_item["speed"].x = -170 + common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); self.tank_hud_item["speed"].y = -57; self.tank_hud_item["speed"] setvalue( 0 ); self.tank_hud_item["min_speed"] = maps\_hud_util::createclientfontstring( "small", 1.0 ); self.tank_hud_item["min_speed"] set_default_hud_parameters(); self.tank_hud_item["min_speed"].alignx = "right"; self.tank_hud_item["min_speed"].aligny = "top"; self.tank_hud_item["min_speed"].vertalign = "bottom"; if ( isdefined( var_1 ) ) { self.tank_hud_item["min_speed"].alpha = 0.0; self.tank_hud_item["min_speed"] fadeovertime( 1.0 ); } self.tank_hud_item["min_speed"].alpha = 0.9; self.tank_hud_item["min_speed"].x = -202 + common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); self.tank_hud_item["min_speed"].y = -57; self.tank_hud_item["min_speed"] setvalue( 0 ); var_4 = 50; self.tank_hud_item["max_speed"] = maps\_hud_util::createclientfontstring( "small", 1.0 ); self.tank_hud_item["max_speed"] set_default_hud_parameters(); self.tank_hud_item["max_speed"].alignx = "center"; self.tank_hud_item["max_speed"].aligny = "top"; self.tank_hud_item["max_speed"].vertalign = "bottom"; if ( isdefined( var_1 ) ) { self.tank_hud_item["max_speed"].alpha = 0.0; self.tank_hud_item["max_speed"] fadeovertime( 1.0 ); } self.tank_hud_item["max_speed"].alpha = 0.9; self.tank_hud_item["max_speed"].x = -131 + common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); self.tank_hud_item["max_speed"].y = -57; self.tank_hud_item["max_speed"] setvalue( var_4 ); thread tank_update_speed( var_0, var_4 ); } hide_normal_hud_elements() { setsaveddvar( "ammoCounterHide", "1" ); setsaveddvar( "actionSlotsHide", "1" ); setsaveddvar( "hud_showStance", "0" ); } show_normal_hud_elements() { setsaveddvar( "ammoCounterHide", "0" ); setsaveddvar( "actionSlotsHide", "0" ); setsaveddvar( "hud_showStance", "1" ); } tank_clear_hud( var_0 ) { level notify( "clear_tank_hud" ); if ( isdefined( var_0 ) && var_0 ) { var_1 = getarraykeys( self.tank_hud_item ); foreach ( var_3 in var_1 ) { self.tank_hud_item[var_3] fadeovertime( 0.5 ); self.tank_hud_item[var_3].alpha = 0; } foreach ( var_6 in maps\_utility::getvehiclearray() ) { if ( isdefined( var_6.hud_compass_elem ) ) { var_6.hud_compass_elem fadeovertime( 0.5 ); var_6.hud_compass_elem.alpha = 0; } } foreach ( var_9 in level.compass_objectives ) { if ( isdefined( var_9.hud_compass_elem ) ) { var_9.hud_compass_elem fadeovertime( 0.5 ); var_9.hud_compass_elem.alpha = 0; } } wait 0.5; } var_1 = getarraykeys( self.tank_hud_item ); foreach ( var_3 in var_1 ) { self.tank_hud_item[var_3] destroy(); self.tank_hud_item[var_3] = undefined; } foreach ( var_6 in maps\_utility::getvehiclearray() ) { if ( isdefined( var_6.hud_compass_elem ) ) { var_6.hud_compass_elem destroy(); var_6.hud_compass_elem = undefined; } } foreach ( var_9 in level.compass_objectives ) { if ( isdefined( var_9.hud_compass_elem ) ) { var_9.hud_compass_elem destroy(); var_9.hud_compass_elem = undefined; } } if ( !isdefined( var_0 ) || !var_0 ) thread show_normal_hud_elements(); } tank_hud_initialize() { thread tank_hud_vignette(); level.player digitaldistortsetparams( 0.5, 1 ); wait 0.5; level.player digitaldistortsetparams( 0, 0 ); var_0 = level.player maps\_hud_util::createclientfontstring( "small", 2 ); var_0 set_default_hud_parameters(); var_0.alignx = "center"; var_0.alpha = 0.9; var_0.y = -100; var_0 settext( &"SATFARM_INITIALIZING" ); thread tank_hud_body( 1 ); thread tank_hud_speed( 2 ); thread tank_hud_compass( 3 ); thread tank_hud_turret( 4 ); thread tank_hud_smoke( 5 ); thread tank_hud_missile( 6 ); wait 2; var_0 destroy(); } tank_hud_reticle() { var_0 = maps\_hud_util::createicon( "m1a1_tank_primary_reticle", 400, 200 ); var_0 set_default_hud_parameters(); var_0.alignx = "center"; var_0.aligny = "middle"; var_0.alpha = 0.66; var_1 = maps\_hud_util::createicon( "m1a1_tank_primary_reticle_center", 20, 20 ); var_1 set_default_hud_parameters(); var_1.alignx = "center"; var_1.aligny = "middle"; var_1.alpha = 0.66; var_2 = maps\_hud_util::createicon( "m1a1_tank_primary_reticle_cross", 88, 88 ); var_2 set_default_hud_parameters(); var_2.alignx = "center"; var_2.aligny = "middle"; var_2.alpha = 0.66; wait 0.75; var_3 = level.player maps\_hud_util::createclientfontstring( "small", 1.3 ); var_3 set_default_hud_parameters(); var_3.alignx = "right"; var_3.aligny = "bottom"; var_3.alpha = 0.9; var_3.x = 0 - var_0.width * 0.4; var_3.y = -5; var_3 settext( "1.0 X" ); level waittill( "clear_tank_hud" ); var_0 destroy(); var_1 destroy(); var_2 destroy(); var_3 destroy(); } tank_hud_vignette() { var_0 = maps\_hud_util::createicon( "ugv_vignette_overlay", 640, 480 ); var_0 set_default_hud_parameters(); var_0.alignx = "left"; var_0.aligny = "top"; var_0.horzalign = "fullscreen"; var_0.vertalign = "fullscreen"; var_0.alpha = 0.5; var_0.sort = var_0.sort - 5; level waittill( "clear_tank_hud" ); var_0 destroy(); } tank_hud_body( var_0 ) { var_1 = maps\_hud_util::createicon( "m1a1_hud_tank_body", 64, 64 ); var_1 set_default_hud_parameters(); var_1.alignx = "center"; var_1.aligny = "top"; var_1.horzalign = "center"; var_1.vertalign = "bottom"; var_1.x = 0; var_1.y = -65; var_1.alpha = 0.25; var_2 = maps\_hud_util::createicon( "m1a1_hud_tank_turret", 64, 64 ); var_2 set_default_hud_parameters(); var_2.alignx = "center"; var_2.aligny = "top"; var_2.horzalign = "center"; var_2.vertalign = "bottom"; var_2.x = 0; var_2.y = -65; var_2.alpha = 0.25; wait( var_0 ); var_1.alpha = 1; var_2.alpha = 1; level waittill( "clear_tank_hud" ); var_1 destroy(); var_2 destroy(); } tank_hud_compass( var_0 ) { var_1 = maps\_hud_util::createicon( "m1a1_compass_center", 10, 20 ); var_1 set_default_hud_parameters(); var_1.alignx = "center"; var_1.aligny = "top"; var_1.vertalign = "top"; var_1.x = 0; var_1.y = 10; var_1.alpha = 0.9; thread tank_hud_compass_movement(); level waittill( "clear_tank_hud" ); var_1 destroy(); var_2 = getarraykeys( level.fake_tank_hud_item ); foreach ( var_4 in var_2 ) { level.fake_tank_hud_item[var_4] destroy(); level.fake_tank_hud_item[var_4] = undefined; } } tank_hud_compass_movement() { level endon( "clear_tank_hud" ); var_0 = 10; var_1 = 45; var_2 = 360; var_3 = -200; var_4 = 0; var_5 = 400; var_6 = 30; var_7 = 0.8; var_8 = int( var_2 / var_0 ); for ( var_9 = 0; var_9 < var_8; var_9++ ) { level.fake_tank_hud_item["compass_tick_mark_" + var_9] = maps\_hud_util::createicon( "white", 1, 1 ); level.fake_tank_hud_item["compass_tick_mark_" + var_9] set_default_hud_parameters(); level.fake_tank_hud_item["compass_tick_mark_" + var_9].alignx = "center"; level.fake_tank_hud_item["compass_tick_mark_" + var_9].aligny = "top"; level.fake_tank_hud_item["compass_tick_mark_" + var_9].vertalign = "top"; level.fake_tank_hud_item["compass_tick_mark_" + var_9].x = 0; level.fake_tank_hud_item["compass_tick_mark_" + var_9].y = 0; level.fake_tank_hud_item["compass_tick_mark_" + var_9].alpha = var_7; } for ( var_9 = 0; var_9 < int( var_2 / var_1 ); var_9++ ) { level.fake_tank_hud_item["compass_label_mark_" + var_9] = level.player maps\_hud_util::createclientfontstring( "small", 1 ); level.fake_tank_hud_item["compass_label_mark_" + var_9] set_default_hud_parameters(); level.fake_tank_hud_item["compass_label_mark_" + var_9].alignx = "center"; level.fake_tank_hud_item["compass_label_mark_" + var_9].aligny = "top"; level.fake_tank_hud_item["compass_label_mark_" + var_9].vertalign = "top"; level.fake_tank_hud_item["compass_label_mark_" + var_9].alpha = var_7; level.fake_tank_hud_item["compass_label_mark_" + var_9].x = 0; level.fake_tank_hud_item["compass_label_mark_" + var_9].y = 0; } for (;;) { var_10 = var_5 / var_8; var_11 = level.player getplayerangles()[1] - getnorthyaw(); var_12 = 0 - var_5 / 2 + ( 1.0 - modulus( abs( var_11 ), var_0 ) / var_0 ) * var_10; var_13 = int( var_11 / var_0 - var_8 / 2 ) * var_0; var_14 = 0; for ( var_9 = 0; var_9 < var_8; var_9++ ) { var_13 = var_13 + var_0; var_15 = max( 0.15, pow( common_scripts\utility::ter_op( var_9 < var_8 / 2, var_9, var_8 - var_9 ) / ( var_8 / 2 ), 1.1 ) ) * var_6 * 0.5; level.fake_tank_hud_item["compass_tick_mark_" + var_9].x = var_12 + var_9 * var_10; level.fake_tank_hud_item["compass_tick_mark_" + var_9].y = var_4 + ( var_15 - var_6 * 0.15 * 0.5 ) * 0.75; level.fake_tank_hud_item["compass_tick_mark_" + var_9].height = int( var_15 ); if ( modulus( var_13, var_1 ) == 0 ) { if ( var_13 >= 360 ) var_13 = var_13 - 360; else if ( var_13 < 0 ) var_13 = var_13 + 360; if ( var_13 == 0 ) var_16 = "00"; else var_16 = "" + var_13; level.fake_tank_hud_item["compass_tick_mark_" + var_9].width = 2; level.fake_tank_hud_item["compass_tick_mark_" + var_9].alpha = var_15 / ( var_6 * 0.5 ); level.fake_tank_hud_item["compass_label_mark_" + var_14].x = var_12 + var_9 * var_10; level.fake_tank_hud_item["compass_label_mark_" + var_14].y = var_4 + var_6; level.fake_tank_hud_item["compass_label_mark_" + var_14].alpha = var_15 / ( var_6 * 0.5 ); level.fake_tank_hud_item["compass_label_mark_" + var_14] settext( var_16 ); var_14++; } else { level.fake_tank_hud_item["compass_tick_mark_" + var_9].width = 1; level.fake_tank_hud_item["compass_tick_mark_" + var_9].alpha = max( 0.15, var_7 / 4.0 * ( var_15 / ( var_6 * 0.5 ) ) ); } level.fake_tank_hud_item["compass_tick_mark_" + var_9] setshader( "white", level.fake_tank_hud_item["compass_tick_mark_" + var_9].width, level.fake_tank_hud_item["compass_tick_mark_" + var_9].height ); } wait 0.05; } } tank_hud_turret( var_0 ) { var_1 = maps\_hud_util::createicon( "m1a1_tank_weapon_progress_bar", 96, 12 ); var_1 set_default_hud_parameters(); var_1.alignx = "center"; var_1.aligny = "middle"; var_1.vertalign = "bottom"; var_1.x = 170 - common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); var_1.y = -50; var_1.alpha = 0.25; var_2 = level.player maps\_hud_util::createclientfontstring( "small", 1.2 ); var_2 set_default_hud_parameters(); var_2.alignx = "center"; var_2.aligny = "bottom"; var_2.vertalign = "bottom"; var_2.alpha = 0.25; var_2.x = 170 - common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); var_2.y = -57; var_2 settext( &"SATFARM_TANK_TURRET" ); var_3 = level.player maps\_hud_util::createclientfontstring( "small", 1.2 ); var_3 set_default_hud_parameters(); var_3.alignx = "center"; var_3.aligny = "top"; var_3.vertalign = "bottom"; var_3.alpha = 0.25; var_3.x = 170 - common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); var_3.y = -43; var_3 settext( &"SATFARM_SYSTEM_CHECK" ); var_4 = maps\_hud_util::createicon( "m1a1_tank_weapon_select_arrow", 12, 12 ); var_4 set_default_hud_parameters(); var_4.alignx = "center"; var_4.aligny = "top"; var_4.vertalign = "bottom"; var_4.x = 170 - common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); var_4.y = -26; var_4.alpha = 0.25; var_4.weap = "turret"; wait( var_0 ); var_1.alpha = 0.9; var_2.alpha = 0.9; var_3.alpha = 0.9; var_4.alpha = 0.9; var_5 = maps\_hud_util::createicon( "green_block", 57, 5 ); var_5 set_default_hud_parameters(); var_5.alignx = "left"; var_5.aligny = "middle"; var_5.vertalign = "bottom"; var_5.x = 142 - common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); var_5.y = -51; var_5.alpha = 0.4; var_3 settext( &"SATFARM_ONLINE" ); level waittill( "clear_tank_hud" ); var_1 destroy(); var_5 destroy(); var_2 destroy(); var_3 destroy(); var_4 destroy(); } tank_hud_smoke( var_0 ) { var_1 = maps\_hud_util::createicon( "m1a1_tank_weapon_progress_bar", 96, 12 ); var_1 set_default_hud_parameters(); var_1.alignx = "center"; var_1.aligny = "middle"; var_1.vertalign = "bottom"; var_1.x = -270 + common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); var_1.y = -50; var_1.alpha = 0.25; var_2 = level.player maps\_hud_util::createclientfontstring( "small", 1.2 ); var_2 set_default_hud_parameters(); var_2.alignx = "center"; var_2.aligny = "bottom"; var_2.vertalign = "bottom"; var_2.alpha = 0.25; var_2.x = -270 + common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); var_2.y = -57; var_2 settext( &"SATFARM_SMOKE" ); var_3 = level.player maps\_hud_util::createclientfontstring( "small", 1.2 ); var_3 set_default_hud_parameters(); var_3.alignx = "center"; var_3.aligny = "top"; var_3.vertalign = "bottom"; var_3.alpha = 0.25; var_3.x = -270 + common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); var_3.y = -43; var_3 settext( &"SATFARM_SYSTEM_CHECK" ); wait( var_0 ); var_1.alpha = 0.9; var_2.alpha = 0.9; var_3.alpha = 0.9; var_4 = maps\_hud_util::createicon( "green_block", 57, 5 ); var_4 set_default_hud_parameters(); var_4.alignx = "left"; var_4.aligny = "middle"; var_4.vertalign = "bottom"; var_4.x = -298 + common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); var_4.y = -51; var_4.alpha = 0.4; var_3 settext( &"SATFARM_ONLINE" ); level waittill( "clear_tank_hud" ); var_1 destroy(); var_4 destroy(); var_2 destroy(); var_3 destroy(); } tank_hud_missile( var_0 ) { var_1 = maps\_hud_util::createicon( "m1a1_tank_weapon_progress_bar", 96, 12 ); var_1 set_default_hud_parameters(); var_1.alignx = "center"; var_1.aligny = "middle"; var_1.vertalign = "bottom"; var_1.x = 270 - common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); var_1.y = -50; var_1.alpha = 0.25; var_2 = level.player maps\_hud_util::createclientfontstring( "small", 1.2 ); var_2 set_default_hud_parameters(); var_2.alignx = "center"; var_2.aligny = "bottom"; var_2.vertalign = "bottom"; var_2.alpha = 0.25; var_2.x = 270 - common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); var_2.y = -57; var_2 settext( &"SATFARM_TANK_MISSILE" ); var_3 = level.player maps\_hud_util::createclientfontstring( "small", 1.2 ); var_3 set_default_hud_parameters(); var_3.alignx = "center"; var_3.aligny = "top"; var_3.vertalign = "bottom"; var_3.alpha = 0.25; var_3.x = 270 - common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); var_3.y = -43; var_3 settext( &"SATFARM_SYSTEM_CHECK" ); wait( var_0 ); var_1.alpha = 0.9; var_4 = maps\_hud_util::createicon( "green_block", 57, 5 ); var_4 set_default_hud_parameters(); var_4.alignx = "left"; var_4.aligny = "middle"; var_4.vertalign = "bottom"; var_4.x = 242 - common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); var_4.y = -51; var_4.alpha = 0.4; var_3 settext( &"SATFARM_ONLINE" ); level waittill( "clear_tank_hud" ); var_1 destroy(); var_4 destroy(); var_2 destroy(); var_3 destroy(); } tank_hud_mg( var_0 ) { var_1 = maps\_hud_util::createicon( "white", 1, 48 ); var_1 set_default_hud_parameters(); var_1.alignx = "center"; var_1.aligny = "middle"; var_1.vertalign = "bottom"; var_1.x = 241; var_1.y = -50; var_1.alpha = 0.25; var_2 = maps\_hud_util::createicon( "m1a1_tank_weapon_progress_bar_infinite", 96, 12 ); var_2 set_default_hud_parameters(); var_2.alignx = "center"; var_2.aligny = "middle"; var_2.vertalign = "bottom"; var_2.x = 290; var_2.y = -50; var_2.alpha = 0.25; var_3 = level.player maps\_hud_util::createclientfontstring( "small", 1.2 ); var_3 set_default_hud_parameters(); var_3.alignx = "center"; var_3.aligny = "bottom"; var_3.vertalign = "bottom"; var_3.alpha = 0.25; var_3.x = 290; var_3.y = -57; var_3 settext( &"SATFARM_TANK_MACHINE_GUN" ); var_4 = level.player maps\_hud_util::createclientfontstring( "small", 1.2 ); var_4 set_default_hud_parameters(); var_4.alignx = "center"; var_4.aligny = "top"; var_4.vertalign = "bottom"; var_4.alpha = 0.25; var_4.x = 290; var_4.y = -43; var_4 settext( &"SATFARM_SYSTEM_CHECK" ); wait( var_0 ); var_1.alpha = 0.9; var_2.alpha = 0.9; var_3.alpha = 0.9; var_5 = maps\_hud_util::createicon( "green_block", 57, 5 ); var_5 set_default_hud_parameters(); var_5.alignx = "left"; var_5.aligny = "middle"; var_5.vertalign = "bottom"; var_5.x = 262; var_5.y = -51; var_5.alpha = 0.4; var_4 settext( &"SATFARM_ONLINE" ); level waittill( "clear_tank_hud" ); var_1 destroy(); var_2 destroy(); var_5 destroy(); var_3 destroy(); var_4 destroy(); } tank_hud_speed( var_0 ) { var_1 = maps\_hud_util::createicon( "m1a1_tank_weapon_progress_bar", 96, 12 ); var_1 set_default_hud_parameters(); var_1.alignx = "center"; var_1.aligny = "middle"; var_1.vertalign = "bottom"; var_1.x = -170 + common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); var_1.y = -50; var_1.alpha = 0.25; var_2 = level.player maps\_hud_util::createclientfontstring( "small", 1.0 ); var_2 set_default_hud_parameters(); var_2.alignx = "left"; var_2.aligny = "bottom"; var_2.vertalign = "bottom"; var_2.alpha = 0.25; var_2.x = -169 + common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); var_2.y = -57; var_2 settext( &"SATFARM_MPH" ); var_3 = level.player maps\_hud_util::createclientfontstring( "small", 1.7 ); var_3 set_default_hud_parameters(); var_3.alignx = "right"; var_3.aligny = "bottom"; var_3.vertalign = "bottom"; var_3.alpha = 0.25; var_3.x = -170 + common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); var_3.y = -57; var_3 setvalue( 0 ); var_4 = level.player maps\_hud_util::createclientfontstring( "small", 1.0 ); var_4 set_default_hud_parameters(); var_4.alignx = "right"; var_4.aligny = "top"; var_4.vertalign = "bottom"; var_4.alpha = 0.25; var_4.x = -202 + common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); var_4.y = -57; var_4 setvalue( 0 ); var_5 = level.player maps\_hud_util::createclientfontstring( "small", 1.0 ); var_5 set_default_hud_parameters(); var_5.alignx = "center"; var_5.aligny = "top"; var_5.vertalign = "bottom"; var_5.alpha = 0.25; var_5.x = -131 + common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 0, 50, 0 ); var_5.y = -57; var_5 setvalue( 50 ); wait( var_0 ); var_1.alpha = 0.9; var_3.alpha = 0.9; var_2.alpha = 0.9; var_4.alpha = 0.9; var_5.alpha = 0.9; level waittill( "clear_tank_hud" ); var_1 destroy(); var_3 destroy(); var_2 destroy(); var_4 destroy(); var_5 destroy(); } tank_hud_crack_left() { self.tank_hud_item["crack_left"] = maps\_hud_util::createicon( "m1a1_tank_screen_crack_left", 400, 400 ); self.tank_hud_item["crack_left"] set_default_hud_parameters(); self.tank_hud_item["crack_left"].alignx = "left"; self.tank_hud_item["crack_left"].aligny = "top"; self.tank_hud_item["crack_left"].horzalign = "left"; self.tank_hud_item["crack_left"].vertalign = "top"; self.tank_hud_item["crack_left"].x = -65; self.tank_hud_item["crack_left"].y = -50; self.tank_hud_item["crack_left"].alpha = 1; } tank_hud_crack_right() { self.tank_hud_item["crack_right"] = maps\_hud_util::createicon( "m1a1_tank_screen_crack_right", 400, 400 ); self.tank_hud_item["crack_right"] set_default_hud_parameters(); self.tank_hud_item["crack_right"].alignx = "right"; self.tank_hud_item["crack_right"].aligny = "top"; self.tank_hud_item["crack_right"].horzalign = "right"; self.tank_hud_item["crack_right"].vertalign = "top"; self.tank_hud_item["crack_right"].x = 65; self.tank_hud_item["crack_right"].y = -50; self.tank_hud_item["crack_right"].alpha = 1; } tank_hud_offline( var_0 ) { level endon( "clear_tank_hud" ); if ( !isdefined( self.tank_hud_item[var_0 + "_name"] ) ) return; if ( isdefined( self.tank_hud_item[var_0 + "_status"] ) ) { self.tank_hud_item[var_0 + "_status"].alpha = 0; self.tank_hud_item[var_0 + "_status"].offline = 1; } self.tank_hud_item[var_0 + "_name"].alpha = 0.25; self.tank_hud_item[var_0 + "_state"].alpha = 0; self.tank_hud_item[var_0 + "_state"] setshader( "white", self.tank_hud_item[var_0 + "_state"].width, self.tank_hud_item[var_0 + "_state"].height ); for (;;) { self.tank_hud_item[var_0 + "_offline"] fadeovertime( 0.25 ); self.tank_hud_item[var_0 + "_offline"].alpha = 1; self.tank_hud_item[var_0 + "_warning"] fadeovertime( 0.25 ); self.tank_hud_item[var_0 + "_warning"].alpha = 1; wait 0.4; self.tank_hud_item[var_0 + "_offline"] fadeovertime( 0.25 ); self.tank_hud_item[var_0 + "_offline"].alpha = 0; self.tank_hud_item[var_0 + "_warning"] fadeovertime( 0.25 ); self.tank_hud_item[var_0 + "_warning"].alpha = 0; wait 0.25; if ( self.tank_hud_item[var_0 + "_offline"].color == ( 1, 1, 1 ) ) { self.tank_hud_item[var_0 + "_offline"].color = ( 1, 0, 0 ); continue; } self.tank_hud_item[var_0 + "_offline"].color = ( 1, 1, 1 ); } } tank_hud_missile_warning() { var_0 = maps\_hud_util::createicon( "m1a1_tank_warning", 80, 80 ); var_0 set_default_hud_parameters(); var_0.alignx = "center"; var_0.aligny = "middle"; var_0.vertalign = "bottom"; var_0.x = 0; var_0.y = -100; var_0.alpha = 0.0; var_0 thread tank_hud_blink_warning(); level common_scripts\utility::waittill_any( "clear_tank_hud", "remove_missile_warning" ); var_0 destroy(); } tank_hud_blink_warning() { level endon( "clear_tank_hud" ); level endon( "remove_missile_warning" ); for (;;) { self fadeovertime( 0.25 ); self.alpha = 1; wait 0.4; self fadeovertime( 0.25 ); self.alpha = 0; wait 0.25; } } tank_update_primary_reticle() { level endon( "clear_tank_hud" ); for (;;) { if ( self.tank_hud_item["current_weapon"].weap == "turret" ) { var_0 = bullettrace( self geteye(), self geteye() + anglestoforward( self getplayerangles() ) * 36000, 1, self ); if ( isdefined( var_0["entity"] ) && ( isdefined( var_0["entity"].script_team ) && var_0["entity"].script_team == "axis" || isdefined( var_0["entity"].red_crosshair ) && var_0["entity"].red_crosshair ) ) { self.tank_hud_item["reticle_center_red"].alpha = 0.66; self.tank_hud_item["reticle_cross_red"].alpha = 0.66; self.tank_hud_item["reticle_center_cyan"].alpha = 0.0; self.tank_hud_item["reticle_cross_cyan"].alpha = 0.0; self.tank_hud_item["reticle_center"].alpha = 0.0; self.tank_hud_item["reticle_cross"].alpha = 0.0; } else if ( isdefined( var_0["entity"] ) && isdefined( var_0["entity"].script_team ) && var_0["entity"].script_team == "allies" ) { self.tank_hud_item["reticle_center_cyan"].alpha = 0.66; self.tank_hud_item["reticle_cross_cyan"].alpha = 0.66; self.tank_hud_item["reticle_center_red"].alpha = 0.0; self.tank_hud_item["reticle_cross_red"].alpha = 0.0; self.tank_hud_item["reticle_center"].alpha = 0.0; self.tank_hud_item["reticle_cross"].alpha = 0.0; } else { self.tank_hud_item["reticle_center"].alpha = 0.66; self.tank_hud_item["reticle_cross"].alpha = 0.66; self.tank_hud_item["reticle_center_red"].alpha = 0.0; self.tank_hud_item["reticle_cross_red"].alpha = 0.0; self.tank_hud_item["reticle_center_cyan"].alpha = 0.0; self.tank_hud_item["reticle_cross_cyan"].alpha = 0.0; } } wait 0.05; } } tank_update_speed( var_0, var_1 ) { level endon( "clear_tank_hud" ); var_2 = self.tank_hud_item["speed_bar"].width; var_3 = self.tank_hud_item["speed_bar"].alpha; for (;;) { var_4 = var_0 vehicle_getspeed(); self.tank_hud_item["speed"] setvalue( int( var_4 ) ); var_5 = int( min( var_4 / var_1 * var_2, var_2 ) ); if ( var_5 == 0 ) self.tank_hud_item["speed_bar"].alpha = 0.0; else { self.tank_hud_item["speed_bar"].alpha = var_3; self.tank_hud_item["speed_bar"] setshader( "green_block", var_5, self.tank_hud_item["speed_bar"].height ); } if ( floor( var_4 ) > var_1 ) { self.tank_hud_item["speed_bar_overdrive"].alpha = 1; self.tank_hud_item["speed_bar_overdrive"] setshader( "red_block", int( ( var_4 - var_1 ) / var_1 * var_2 ), self.tank_hud_item["speed_bar"].height ); } else self.tank_hud_item["speed_bar_overdrive"].alpha = 0; wait 0.05; } } add_ent_objective_to_compass( var_0, var_1 ) { if ( isdefined( var_1 ) ) common_scripts\utility::flag_wait( var_1 ); if ( !isdefined( var_0 ) ) return; if ( !isdefined( level.compass_objectives ) ) level.compass_objectives = []; level.compass_objectives = common_scripts\utility::array_add( level.compass_objectives, var_0 ); } remove_ent_objective_from_compass( var_0 ) { if ( isdefined( level.compass_objectives ) ) { level.compass_objectives = common_scripts\utility::array_remove( level.compass_objectives, var_0 ); if ( isdefined( var_0.hud_compass_elem ) ) { var_0.hud_compass_elem destroy(); var_0.hud_compass_elem = undefined; } } } tank_watch_for_vehicle_death() { level endon( "clear_tank_hud" ); var_0 = self.hud_compass_elem; self waittill( "death" ); if ( isdefined( self ) ) { self.dead = 1; if ( isdefined( self.hud_compass_elem ) ) { self.hud_compass_elem notify( "stop_pulse" ); self.hud_compass_elem destroy(); self.hud_compass_elem = undefined; } if ( target_istarget( self ) ) target_remove( self ); } else if ( isdefined( var_0 ) ) { var_0 notify( "stop_pulse" ); var_0 destroy(); } } tank_compass( var_0 ) { level endon( "clear_tank_hud" ); var_1 = 10; var_2 = 45; var_3 = 360; var_4 = -200; var_5 = 0; var_6 = 400; var_7 = 30; var_8 = 0.8; var_9 = int( var_3 / var_1 ); var_10 = var_6 / var_9; for ( var_11 = 0; var_11 < var_9; var_11++ ) { self.tank_hud_item["compass_tick_mark_" + var_11] = maps\_hud_util::createicon( "white", 1, 1 ); self.tank_hud_item["compass_tick_mark_" + var_11] set_default_hud_parameters(); self.tank_hud_item["compass_tick_mark_" + var_11].alignx = "center"; self.tank_hud_item["compass_tick_mark_" + var_11].aligny = "top"; self.tank_hud_item["compass_tick_mark_" + var_11].vertalign = "top"; self.tank_hud_item["compass_tick_mark_" + var_11].x = 0; self.tank_hud_item["compass_tick_mark_" + var_11].y = 0; self.tank_hud_item["compass_tick_mark_" + var_11].alpha = var_8; } for ( var_11 = 0; var_11 < int( var_3 / var_2 ); var_11++ ) { self.tank_hud_item["compass_label_mark_" + var_11] = maps\_hud_util::createclientfontstring( "small", 1.0 ); self.tank_hud_item["compass_label_mark_" + var_11] set_default_hud_parameters(); self.tank_hud_item["compass_label_mark_" + var_11].alignx = "center"; self.tank_hud_item["compass_label_mark_" + var_11].aligny = "top"; self.tank_hud_item["compass_label_mark_" + var_11].vertalign = "top"; self.tank_hud_item["compass_label_mark_" + var_11].alpha = var_8; self.tank_hud_item["compass_label_mark_" + var_11].x = 0; self.tank_hud_item["compass_label_mark_" + var_11].y = 0; } for (;;) { if ( self.tank_hud_item["current_weapon"].weap != "turret" ) { for ( var_11 = 0; var_11 < var_9; var_11++ ) self.tank_hud_item["compass_tick_mark_" + var_11].alpha = 0; for ( var_11 = 0; var_11 < int( var_3 / var_2 ); var_11++ ) self.tank_hud_item["compass_label_mark_" + var_11].alpha = 0; self waittill( "cycle_weapon" ); } var_12 = self getplayerangles()[1] - getnorthyaw(); var_13 = var_4 + ( 1.0 - modulus( abs( var_12 ), var_1 ) / var_1 ) * var_10; var_14 = int( var_12 / var_1 - var_9 / 2 ) * var_1; var_15 = 0; for ( var_11 = 0; var_11 < var_9; var_11++ ) { var_14 = var_14 + var_1; var_16 = max( 0.15, pow( common_scripts\utility::ter_op( var_11 < var_9 / 2, var_11, var_9 - var_11 ) / ( var_9 / 2 ), 1.1 ) ) * var_7 * 0.5; self.tank_hud_item["compass_tick_mark_" + var_11].x = var_13 + var_11 * var_10; self.tank_hud_item["compass_tick_mark_" + var_11].y = var_5 + ( var_16 - var_7 * 0.15 * 0.5 ) * 0.75; self.tank_hud_item["compass_tick_mark_" + var_11].height = int( var_16 ); if ( modulus( var_14, var_2 ) == 0 ) { if ( var_14 >= 360 ) var_14 = var_14 - 360; else if ( var_14 < 0 ) var_14 = var_14 + 360; if ( var_14 == 0 ) var_17 = "00"; else var_17 = "" + var_14; self.tank_hud_item["compass_tick_mark_" + var_11].width = 2; self.tank_hud_item["compass_tick_mark_" + var_11].alpha = var_16 / ( var_7 * 0.5 ); self.tank_hud_item["compass_label_mark_" + var_15].x = var_13 + var_11 * var_10; self.tank_hud_item["compass_label_mark_" + var_15].y = var_5 + var_7; self.tank_hud_item["compass_label_mark_" + var_15].alpha = var_16 / ( var_7 * 0.5 ); self.tank_hud_item["compass_label_mark_" + var_15] settext( var_17 ); var_15++; } else { self.tank_hud_item["compass_tick_mark_" + var_11].width = 1; self.tank_hud_item["compass_tick_mark_" + var_11].alpha = max( 0.15, var_8 / 4.0 * ( var_16 / ( var_7 * 0.5 ) ) ); } self.tank_hud_item["compass_tick_mark_" + var_11] setshader( "white", self.tank_hud_item["compass_tick_mark_" + var_11].width, self.tank_hud_item["compass_tick_mark_" + var_11].height ); } wait 0.05; } } tank_compass_vehicle_positions( var_0 ) { level endon( "clear_tank_hud" ); var_1 = 0; for (;;) { foreach ( var_3 in maps\_utility::getvehiclearray() ) { if ( var_3.script_team == "axis" && var_3 istank() && ( !isdefined( var_3.dead ) || !var_3.dead ) ) { if ( !isdefined( var_3.hud_compass_elem ) ) { var_3.hud_compass_elem = maps\_hud_util::createicon( "m1a1_compass_enemy", 16, 16 ); var_3.hud_compass_elem set_default_hud_parameters(); var_3.hud_compass_elem.alignx = "center"; var_3.hud_compass_elem.aligny = "middle"; var_3.hud_compass_elem.vertalign = "top"; var_3.hud_compass_elem.x = 0; var_3.hud_compass_elem.y = 0; var_3.hud_compass_elem.alpha = 0.0; var_3.hud_compass_elem.visible = 0; if ( var_1 && isdefined( var_3.compass_flash ) && var_3.compass_flash ) var_3.hud_compass_elem thread tank_compass_pulse( 4, 2 ); if ( !target_istarget( var_3 ) ) { target_set( var_3, common_scripts\utility::ter_op( var_3 maps\_vehicle::ishelicopter(), ( 0, 0, 0 ), ( 0, 0, 72 ) ) ); target_hidefromplayer( var_3, level.player ); } var_3 thread tank_watch_for_vehicle_death(); } if ( level.player.tank_hud_item["current_weapon"].weap != "turret" ) { var_3.hud_compass_elem notify( "stop_pulse" ); var_3.hud_compass_elem.pulsing = 0; var_3.hud_compass_elem.alpha = 0; continue; } var_4 = distance2d( level.player.origin, var_3.origin ); if ( var_4 < 36000 ) { var_5 = vectortoyaw( var_3.origin - level.player.origin ); var_6 = angleclamp180( var_5 - level.player getplayerangles()[1] ); var_3.hud_compass_elem.x = -200 * var_6 / 180; var_3.hud_compass_elem.y = pow( 1.0 - abs( var_6 ) / 180.0, 1.1 ) * 15; if ( !isdefined( var_3.hud_compass_elem.pulsing ) || !var_3.hud_compass_elem.pulsing ) { var_3.hud_compass_elem.alpha = 0.9; var_3.hud_compass_elem.visible = 1; var_7 = int( ( 1 - var_4 / 36000 ) * 16 ); var_3.hud_compass_elem setshader( "m1a1_compass_enemy", var_7, var_7 ); } } else if ( !isdefined( var_3.hud_compass_elem.pulsing ) || !var_3.hud_compass_elem.pulsing ) { var_3.hud_compass_elem.alpha = 0.0; var_3.hud_compass_elem.visible = 0; } } } var_1 = 1; if ( level.player.tank_hud_item["current_weapon"].weap != "turret" ) level.player waittill( "cycle_weapon" ); wait 0.05; } } tank_compass_objective_positions( var_0 ) { level endon( "clear_tank_hud" ); if ( !isdefined( level.compass_objectives ) ) level.compass_objectives = []; var_1 = 0; for (;;) { foreach ( var_3 in level.compass_objectives ) { if ( !isdefined( var_3.hud_compass_elem ) ) { var_3.hud_compass_elem = maps\_hud_util::createicon( "m1a1_compass_objective", 24, 24 ); var_3.hud_compass_elem set_default_hud_parameters(); var_3.hud_compass_elem.alignx = "center"; var_3.hud_compass_elem.aligny = "middle"; var_3.hud_compass_elem.vertalign = "top"; var_3.hud_compass_elem.x = 0; var_3.hud_compass_elem.y = 0; var_3.hud_compass_elem.alpha = 0.0; var_3.hud_compass_elem.sort = var_3.hud_compass_elem.sort + 1; var_3.hud_compass_elem.visible = 0; if ( var_1 ) var_3.hud_compass_elem thread tank_compass_pulse( 4, 2 ); } if ( level.player.tank_hud_item["current_weapon"].weap != "turret" ) { var_3.hud_compass_elem notify( "stop_pulse" ); var_3.hud_compass_elem.pulsing = 0; var_3.hud_compass_elem.alpha = 0; continue; } var_4 = distance2d( level.player.origin, var_3.origin ); if ( var_4 < 36000 ) { var_5 = vectortoyaw( var_3.origin - level.player.origin ); var_6 = angleclamp180( var_5 - level.player getplayerangles()[1] ); var_3.hud_compass_elem.x = -200 * var_6 / 180; var_3.hud_compass_elem.y = pow( 1.0 - abs( var_6 ) / 180.0, 1.1 ) * 15; if ( !isdefined( var_3.hud_compass_elem.pulsing ) || !var_3.hud_compass_elem.pulsing ) { var_3.hud_compass_elem.alpha = 0.9; var_3.hud_compass_elem.visible = 1; var_7 = int( max( ( 1 - var_4 / 36000 ) * 24, 12 ) ); var_3.hud_compass_elem setshader( "m1a1_compass_objective", var_7, var_7 ); } continue; } if ( !isdefined( var_3.hud_compass_elem.pulsing ) || !var_3.hud_compass_elem.pulsing ) { var_3.hud_compass_elem.alpha = 0.0; var_3.hud_compass_elem.visible = 0; } } var_1 = 1; if ( level.player.tank_hud_item["current_weapon"].weap != "turret" ) level.player waittill( "cycle_weapon" ); wait 0.05; } } tank_compass_pulse( var_0, var_1 ) { level endon( "clear_tank_hud" ); self endon( "stop_pulse" ); self.pulsing = 1; var_2 = var_1 / ( var_0 * 2 ); var_3 = self.width; var_4 = int( var_3 / 2 ); for ( var_5 = 0; var_5 < var_0; var_5++ ) { self scaleovertime( var_2, var_4, var_4 ); self fadeovertime( var_2 ); self.alpha = 0.0; wait( var_2 ); self scaleovertime( var_2, var_3, var_3 ); self fadeovertime( var_2 ); self.alpha = 0.9; wait( var_2 ); } self.pulsing = 0; } tank_compass_scanline( var_0 ) { level endon( "clear_tank_hud" ); self.tank_hud_item["compass_scanline"] = maps\_hud_util::createicon( "m1a1_compass_scanline", 18, 72 ); self.tank_hud_item["compass_scanline"] set_default_hud_parameters(); self.tank_hud_item["compass_scanline"].alignx = "center"; self.tank_hud_item["compass_scanline"].aligny = "top"; self.tank_hud_item["compass_scanline"].vertalign = "top"; self.tank_hud_item["compass_scanline"].x = 200; self.tank_hud_item["compass_scanline"].y = -15; self.tank_hud_item["compass_scanline"].alpha = 1.0; var_1 = 0.0; for (;;) { foreach ( var_3 in maps\_utility::getvehiclearray() ) { if ( var_3.script_team == "axis" ) { if ( isdefined( var_3.hud_compass_elem ) && isdefined( var_3.hud_compass_elem.visible ) && var_3.hud_compass_elem.visible ) { var_3.hud_compass_elem fadeovertime( 0.05 ); var_3.hud_compass_elem.alpha = var_3.hud_compass_elem.alpha * 0.95; } } } if ( var_1 > 0.0 ) { var_1 = var_1 - 0.05; wait 0.05; continue; } var_5 = angleclamp180( self.tank_hud_item["compass_scanline"].x / 200.0 * 180.0 + 5 ); var_6 = self.tank_hud_item["compass_scanline"].x - 15; if ( var_6 < -220 ) { self.tank_hud_item["compass_scanline"].x = 200; self.tank_hud_item["compass_scanline"].alpha = 0.0; var_1 = 1; } else { self.tank_hud_item["compass_scanline"] moveovertime( 0.05 ); self.tank_hud_item["compass_scanline"].x = var_6; self.tank_hud_item["compass_scanline"].alpha = 1.0; } var_7 = angleclamp180( var_6 / 200.0 * 180.0 - 5 ); foreach ( var_3 in maps\_utility::getvehiclearray() ) { if ( isdefined( var_3.hud_compass_elem ) && isdefined( var_3.hud_compass_elem.visible ) && var_3.hud_compass_elem.visible ) { var_9 = vectortoyaw( var_3.origin - self geteye() ); var_10 = angleclamp180( self getplayerangles()[1] - var_9 ); if ( var_5 < var_7 ) { if ( var_10 < var_5 ) var_3.hud_compass_elem.alpha = 1.0; } else if ( var_10 < var_5 && var_10 > var_7 ) var_3.hud_compass_elem.alpha = 1.0; } } wait 0.05; } } tank_update_weapon_hud( var_0, var_1 ) { level endon( "clear_tank_hud" ); while ( !common_scripts\utility::flag( "tow_out" ) ) { if ( !isdefined( var_1 ) || !var_1 ) self waittill( "cycle_weapon" ); var_1 = 0; self.tank_hud_item["tank_overlay"].alpha = 0.0; self.tank_hud_item["reticle"].alpha = 0.0; self.tank_hud_item["reticle_center"].alpha = 0.0; self.tank_hud_item["reticle_center_cyan"].alpha = 0.0; self.tank_hud_item["reticle_center_red"].alpha = 0.0; self.tank_hud_item["reticle_cross"].alpha = 0.0; self.tank_hud_item["reticle_cross_cyan"].alpha = 0.0; self.tank_hud_item["reticle_cross_red"].alpha = 0.0; self.tank_hud_item["compass_heading"].alpha = 0.0; self.tank_hud_item["current_weapon"].x = 200; self.tank_hud_item["current_weapon"].weap = "missile"; update_weapon_status( "turret", &"SATFARM_IDLE" ); update_weapon_status( "missile", &"SATFARM_READY" ); self.tank_hud_item["sabot_overlay"].alpha = 0.666; self.tank_hud_item["sabot_vignette"].alpha = 0.9; self.tank_hud_item["sabot_reticle"].alpha = 0.666; self.tank_hud_item["sabot_reticle_upper_left"].alpha = 0.666; self.tank_hud_item["sabot_reticle_upper_right"].alpha = 0.666; self.tank_hud_item["sabot_reticle_bottom_left"].alpha = 0.666; self.tank_hud_item["sabot_reticle_bottom_right"].alpha = 0.666; self.tank_hud_item["sabot_reticle_outer_left"].alpha = 0.666; self.tank_hud_item["sabot_reticle_outer_right"].alpha = 0.666; self.tank_hud_item["sabot_target_range"].alpha = 0.666; self.tank_hud_item["sabot_fuel_gauge"].alpha = 0.666; self.tank_hud_item["sabot_fuel_range"].alpha = 0.666; self.tank_hud_item["sabot_ROT"].alpha = 0.666; self.tank_hud_item["sabot_fuel_range_text"].alpha = 0.666; self.tank_hud_item["sabot_range_1"].alpha = 0.666; self.tank_hud_item["sabot_range_2"].alpha = 0.666; self.tank_hud_item["sabot_range_3"].alpha = 0.666; self.tank_hud_item["sabot_range_4"].alpha = 0.666; self.tank_hud_item["sabot_range_5"].alpha = 0.666; common_scripts\utility::flag_clear( "ZOOM_ON" ); self notify( "zoomout" ); self allowads( 0 ); setsaveddvar( "cg_fov", 20 ); self lerpfov( 20, 0.05 ); var_2 = 3.25; var_2 = int( var_2 * 10 ) / 10; var_3 = "" + var_2 + common_scripts\utility::ter_op( modulus( var_2, 10 ) == 0, ".0 X", " X" ); self.tank_hud_item["turret_zoom"] settext( var_3 ); thread tank_missile_targeting(); self waittill( "cycle_weapon" ); setsaveddvar( "cg_fov", 65 ); self lerpfov( 65, 0.05 ); self allowads( 1 ); self.tank_hud_item["turret_zoom"] settext( "1.0 X" ); self.tank_hud_item["tank_overlay"].alpha = 0.5; self.tank_hud_item["reticle"].alpha = 0.666; self.tank_hud_item["reticle_center"].alpha = 0.666; self.tank_hud_item["reticle_cross"].alpha = 0.666; self.tank_hud_item["compass_heading"].alpha = 0.9; self.tank_hud_item["current_weapon"].x = 110; self.tank_hud_item["current_weapon"].weap = "turret"; update_weapon_status( "missile", &"SATFARM_IDLE" ); update_weapon_status( "turret", &"SATFARM_READY" ); self.tank_hud_item["sabot_overlay"].alpha = 0.0; self.tank_hud_item["sabot_vignette"].alpha = 0.0; self.tank_hud_item["sabot_reticle"].alpha = 0.0; self.tank_hud_item["sabot_reticle_cyan"].alpha = 0.0; self.tank_hud_item["sabot_reticle_red"].alpha = 0.0; self.tank_hud_item["sabot_reticle_upper_left"].alpha = 0.0; self.tank_hud_item["sabot_reticle_upper_right"].alpha = 0.0; self.tank_hud_item["sabot_reticle_bottom_left"].alpha = 0.0; self.tank_hud_item["sabot_reticle_bottom_right"].alpha = 0.0; self.tank_hud_item["sabot_reticle_outer_left"].alpha = 0.0; self.tank_hud_item["sabot_reticle_outer_right"].alpha = 0.0; self.tank_hud_item["sabot_target_range"].alpha = 0.0; self.tank_hud_item["sabot_fuel_gauge"].alpha = 0.0; self.tank_hud_item["sabot_fuel_range"].alpha = 0.0; self.tank_hud_item["sabot_ROT"].alpha = 0.0; self.tank_hud_item["sabot_fuel_range_text"].alpha = 0.0; self.tank_hud_item["sabot_range_1"].alpha = 0.0; self.tank_hud_item["sabot_range_2"].alpha = 0.0; self.tank_hud_item["sabot_range_3"].alpha = 0.0; self.tank_hud_item["sabot_range_4"].alpha = 0.0; self.tank_hud_item["sabot_range_5"].alpha = 0.0; } } update_weapon_status( var_0, var_1 ) { if ( isdefined( level.player.tank_hud_item[var_0 + "_status"].offline ) && level.player.tank_hud_item[var_0 + "_status"].offline ) return; if ( level.player.tank_hud_item["current_weapon"].weap != var_0 ) { level.player.tank_hud_item[var_0 + "_name"].alpha = 0.25; level.player.tank_hud_item[var_0 + "_status"].alpha = 0.25; } else { level.player.tank_hud_item[var_0 + "_name"].alpha = 0.9; level.player.tank_hud_item[var_0 + "_status"].alpha = 0.9; } if ( !isdefined( level.player.tank_hud_item[var_0 + "_status"].loading ) || !level.player.tank_hud_item[var_0 + "_status"].loading ) { if ( var_1 == &"SATFARM_READY" && level.player.tank_hud_item["current_weapon"].weap != var_0 ) level.player.tank_hud_item[var_0 + "_status"] settext( &"SATFARM_IDLE" ); else level.player.tank_hud_item[var_0 + "_status"] settext( var_1 ); } } update_weapon_state( var_0 ) { level endon( "clear_tank_hud" ); var_1 = 0; for ( var_2 = self.width; var_1 < var_0; var_1 = var_1 + 0.05 ) { self setshader( "red_block", int( max( var_1 / var_0 * var_2, 1 ) ), self.height ); wait 0.05; } self setshader( "green_block", var_2, self.height ); } tank_missile_targeting() { level endon( "clear_tank_hud" ); self endon( "cycle_weapon" ); var_0 = 17.6; for (;;) { var_1 = undefined; var_2 = undefined; var_3 = 0; var_4 = sortbydistance( maps\_utility::getvehiclearray(), self geteye() ); foreach ( var_6 in var_4 ) { if ( !isdefined( var_6.dead ) || !var_6.dead ) { if ( !target_istarget( var_6 ) ) { if ( var_3 < 5 ) { target_set( var_6, common_scripts\utility::ter_op( var_6 maps\_vehicle::ishelicopter(), ( 0, 0, 0 ), ( 0, 0, 72 ) ) ); target_hidefromplayer( var_6, level.player ); var_3++; } continue; } if ( target_isinrect( var_6, self, getdvarfloat( "cg_fov" ), self.tank_hud_item["sabot_reticle_bottom_right"].x * 0.5, self.tank_hud_item["sabot_reticle_bottom_right"].y * 0.5 ) && sighttracepassed( self geteye(), var_6.origin + common_scripts\utility::ter_op( var_6 maps\_vehicle::ishelicopter(), ( 0, 0, 0 ), ( 0, 0, 72 ) ), 0, var_6, level.playertank ) ) { if ( var_6.script_team == "axis" ) var_1 = var_6; else if ( var_6.script_team == "allies" ) var_2 = var_6; break; } } } if ( isdefined( var_1 ) ) { if ( self.tank_hud_item["sabot_reticle_red"].alpha == 0.0 ) { self.tank_hud_item["sabot_reticle_red"].alpha = 0.66; self.tank_hud_item["sabot_range_highlight"].alpha = 0.66; self.tank_hud_item["sabot_reticle"].alpha = 0.0; } var_8 = distance( var_1.origin, self.origin ); if ( var_8 <= 200 * var_0 ) self.tank_hud_item["sabot_range_highlight"].y = self.tank_hud_item["sabot_range_1"].y; else if ( var_8 <= 400 * var_0 ) self.tank_hud_item["sabot_range_highlight"].y = self.tank_hud_item["sabot_range_2"].y; else if ( var_8 <= 600 * var_0 ) self.tank_hud_item["sabot_range_highlight"].y = self.tank_hud_item["sabot_range_3"].y; else if ( var_8 <= 800 * var_0 ) self.tank_hud_item["sabot_range_highlight"].y = self.tank_hud_item["sabot_range_4"].y; else self.tank_hud_item["sabot_range_highlight"].y = self.tank_hud_item["sabot_range_5"].y; } else if ( isdefined( var_2 ) ) { self.tank_hud_item["sabot_reticle_cyan"].alpha = 0.66; self.tank_hud_item["sabot_reticle_red"].alpha = 0.0; self.tank_hud_item["sabot_range_highlight"].alpha = 0.0; self.tank_hud_item["sabot_reticle"].alpha = 0.0; } else if ( self.tank_hud_item["sabot_reticle"].alpha == 0.0 ) { self.tank_hud_item["sabot_reticle"].alpha = 0.66; self.tank_hud_item["sabot_reticle_cyan"].alpha = 0.0; self.tank_hud_item["sabot_reticle_red"].alpha = 0.0; self.tank_hud_item["sabot_range_highlight"].alpha = 0.0; } wait 0.05; } } static_on( var_0, var_1, var_2, var_3 ) { var_4 = newclienthudelem( self ); var_4.x = 0; var_4.y = 0; var_4.alignx = "left"; var_4.aligny = "top"; var_4.horzalign = "fullscreen"; var_4.vertalign = "fullscreen"; var_4.sort = 200; var_4 setshader( "black", 640, 480 ); var_5 = newclienthudelem( self ); var_5.x = 0; var_5.y = 0; var_5.alignx = "left"; var_5.aligny = "top"; var_5.horzalign = "fullscreen"; var_5.vertalign = "fullscreen"; var_5.sort = var_4.sort + 1; var_5 setshader( "overlay_static", 640, 480 ); if ( isdefined( var_2 ) ) { var_5.alpha = 0.0; var_5 fadeovertime( var_2 ); var_5.alpha = var_1; var_4.alpha = 0.0; var_4 fadeovertime( var_2 ); var_4.alpha = var_1; wait( var_2 ); } else { var_5.alpha = var_1; var_4.alpha = var_1; } wait( var_0 ); if ( isdefined( var_3 ) ) { var_5 fadeovertime( var_3 ); var_5.alpha = 0.0; var_4 fadeovertime( var_3 ); var_4.alpha = 0.0; wait( var_3 ); } var_5 destroy(); var_4 destroy(); } set_default_hud_parameters() { self.alignx = "left"; self.aligny = "top"; self.horzalign = "center"; self.vertalign = "middle"; self.hidewhendead = 0; self.hidewheninmenu = 1; self.sort = 205; self.foreground = 1; self.alpha = 0.65; } modulus( var_0, var_1 ) { var_2 = int( var_0 / var_1 ); return var_0 - var_2 * var_1; } on_fire_main_cannon() { var_0 = self; var_0 endon( "death" ); level.player endon( "death" ); level.player endon( "tank_dismount" ); level.player endon( "missile_tank_dismount" ); level.player notifyonplayercommand( "BUTTON_FIRE_CANNON", "+attack" ); level.player notifyonplayercommand( "BUTTON_FIRE_CANNON", "+attack_akimbo_accessible" ); wait 0.5; while ( !common_scripts\utility::flag( "all_guns_out" ) ) { level.player waittill( "BUTTON_FIRE_CANNON" ); if ( isdefined( level.player.tank_hud_item["current_weapon"] ) && level.player.tank_hud_item["current_weapon"].weap == "turret" ) { level.isfiring = 1; var_0 shoot_anim(); level.player thread play_fire_bcs(); level.player playsound( "m1a1_abrams_antitank_fire_plr" ); thread maps\satfarm_audio::reload(); if ( isdefined( level.player.tank_hud_item["turret_status"] ) ) { level.player.tank_hud_item["turret_state"] thread update_weapon_state( 2.0 ); update_weapon_status( "turret", &"SATFARM_LOADING" ); level.player.tank_hud_item["turret_status"].loading = 1; } wait 2; level.player thread play_reload_bcs(); if ( isdefined( level.player.tank_hud_item["turret_status"] ) ) { level.player.tank_hud_item["turret_status"].loading = 0; update_weapon_status( "turret", &"SATFARM_READY" ); } continue; } if ( !isdefined( level.playertank.prevent_sabot_firing ) || !level.playertank.prevent_sabot_firing ) { level.isfiring = 1; var_0 shoot_anim(); level.player thread play_fire_bcs(); level.player playsound( "m1a1_abrams_antitank_fire_plr" ); thread maps\satfarm_audio::reload(); wait 2; level.player thread play_reload_bcs(); } } if ( isdefined( level.player.tank_hud_item["turret_status"] ) ) level.player.tank_hud_item["turret_status"] settext( &"SATFARM_OFFLINE" ); } play_fire_bcs() { var_0 = createevent( "inform_firing", "inform_firing" ); thread play_chatter( var_0 ); } play_reload_bcs() { var_0 = createevent( "inform_loaded", "inform_loaded" ); thread play_chatter( var_0 ); } on_fire_mg() { var_0 = self; var_0 endon( "death" ); level.player endon( "death" ); level.player endon( "tank_dismount" ); level.player endon( "missile_tank_dismount" ); level.player notifyonplayercommand( "BUTTON_FIRE_MG", "+frag" ); level.player notifyonplayercommand( "BUTTON_STOP_MG", "-frag" ); if ( isdefined( var_0.mgturret ) ) { var_0.mgturret[0] turretfiredisable(); var_0 thread handle_mg_firing(); for (;;) { level.player waittill( "BUTTON_FIRE_MG" ); common_scripts\utility::flag_set( "PLAYER_FIRED_MG_ONCE" ); common_scripts\utility::flag_set( "MG_FIRE" ); level.player waittill( "BUTTON_STOP_MG" ); common_scripts\utility::flag_clear( "MG_FIRE" ); } } } handle_mg_firing() { var_0 = self; var_0 endon( "death" ); level.player endon( "death" ); level.player endon( "tank_dismount" ); level.player endon( "missile_tank_dismount" ); var_1 = weaponfiretime( "minigun_m1a1" ); var_2 = gettime() - var_1; for (;;) { if ( common_scripts\utility::flag( "MG_FIRE" ) && var_2 < gettime() ) { var_3 = var_0 gettagorigin( "tag_coax_mg" ); var_4 = level.player getplayerangles(); var_5 = anglestoforward( var_4 ); var_6 = anglestoright( var_4 ); var_7 = self.mgturret[0] gettagorigin( "tag_flash" ); var_8 = bullettrace( level.player geteye(), level.player geteye() + var_5 * 12 * 2000, 1, level.player ); var_9 = var_8["position"]; var_10 = magicbullet( "minigun_m1a1", var_7 + var_5 * 32, var_9, level.player ); level.player playsound( "satfarm_turret_temp_plr" ); playfxontag( common_scripts\utility::getfx( "grenade_muzzleflash" ), self.mgturret[0], "tag_flash" ); level.player playrumbleonentity( "minigun_rumble" ); var_2 = gettime() + var_1 * 1000; if ( !level.player fragbuttonpressed() ) { level.player notify( "BUTTON_STOP_MG" ); common_scripts\utility::flag_clear( "MG_FIRE" ); } } wait 0.05; } } on_pop_smoke() { var_0 = self; var_0 endon( "death" ); level.player endon( "death" ); level.player endon( "tank_dismount" ); level.player endon( "missile_tank_dismount" ); level.player notifyonplayercommand( "BUTTON_POP_SMOKE", "+smoke" ); while ( !common_scripts\utility::flag( "smoke_out" ) ) { level.player waittill( "BUTTON_POP_SMOKE" ); common_scripts\utility::flag_set( "PLAYER_POPPED_SMOKE_ONCE" ); common_scripts\utility::flag_set( "POPPED_SMOKE" ); var_1 = level.player getplayerangles(); var_2 = anglestoforward( var_1 ); var_3 = anglestoright( var_1 ); var_4 = bullettrace( level.player geteye(), level.player geteye() + var_2 * 12 * 300, 1, level.player ); var_5 = var_4["position"]; var_0 launch_smoke( var_5 ); if ( isdefined( level.player.tank_hud_item["smoke_status"] ) ) pop_smoke_hud(); common_scripts\utility::flag_clear( "POPPED_SMOKE" ); } if ( isdefined( level.player.tank_hud_item["smoke_status"] ) ) { level.player.tank_hud_item["smoke_status"] settext( &"SATFARM_OFFLINE" ); level.player.tank_hud_item["smoke_status"].alpha = 0.0; level.player.tank_hud_item["smoke_name"].alpha = 0.0; level.player.tank_hud_item["smoke_state_bg"].alpha = 0.0; level.player.tank_hud_item["smoke_state"].alpha = 0.0; } } pop_smoke_hud() { level.player.tank_hud_item["smoke_state"] thread update_weapon_state( 6.0 ); level.player.tank_hud_item["smoke_status"] settext( &"SATFARM_LOADING" ); wait 6; if ( isdefined( level.player.tank_hud_item["smoke_status"] ) ) level.player.tank_hud_item["smoke_status"] settext( &"SATFARM_READY" ); } launch_smoke( var_0 ) { if ( common_scripts\utility::flag( "player_in_tank" ) ) { thread smoke_launcher_sound_player(); level.player playrumbleonentity( "damage_heavy" ); } else thread smoke_launcher_sound_3d(); if ( !isdefined( var_0 ) ) var_0 = trace_to_forward( 1000 )["position"]; var_1 = [ [ "tag_canister_left", 1000 ], [ "tag_canister_left", 0 ], [ "tag_canister_right", -1000 ] ]; var_2 = vectortoangles( var_0 - self getcentroid() ); var_2 = vectornormalize( anglestoright( var_2 ) ); foreach ( var_4 in var_1 ) thread launch_smoke_from_tag( var_4[0], var_0 + var_2 * var_4[1] ); return var_0; } launch_smoke_from_tag( var_0, var_1 ) { var_2 = self gettagorigin( var_0 ); var_3 = self gettagangles( var_0 ); var_1 = common_scripts\utility::drop_to_ground( var_1 ); playfxontag( level._effect["smoke_start"], self, var_0 ); var_4 = spawn( "script_model", var_2 ); var_4 setmodel( "projectile_m203grenade" ); var_4.origin = var_2; var_4.angles = vectortoangles( vectornormalize( var_1 - var_2 ) ); playfxontag( level._effect["rpg_trail"], var_4, "tag_origin" ); var_4 maps\_utility::move_with_rate( var_1, var_4.angles, 12000 ); stopfxontag( level._effect["rpg_trail"], var_4, "tag_origin" ); playfx( level._effect["smoke_screen_flash"], var_1, anglestoforward( var_4.angles ) ); playfx( level._effect["smoke_screen"], var_1, anglestoforward( var_4.angles ) ); var_4 delete(); } smoke_launcher_sound_player() { var_0 = randomfloatrange( 0.1, 0.2 ); level.player playsound( "satf_smoke_launcher_plr" ); wait( var_0 ); level.player playsound( "satf_smoke_launcher_plr" ); } smoke_launcher_sound_3d() { var_0 = randomfloatrange( 0.1, 0.2 ); var_1 = self gettagorigin( "antenna1_jnt" ); var_2 = self gettagorigin( "antenna2_jnt" ); thread common_scripts\utility::play_sound_in_space( "satf_smoke_launcher_3d", var_1 ); wait( var_0 ); thread common_scripts\utility::play_sound_in_space( "satf_smoke_launcher_3d", var_2 ); } trace_to_forward( var_0 ) { if ( !isdefined( var_0 ) ) var_0 = 1000; var_1 = level.player geteye(); var_2 = level.player getplayerangles(); var_3 = anglestoforward( var_2 ); var_1 = var_1 + var_3 * 250; var_4 = var_1 + var_3 * var_0; return bullettrace( var_1, var_4, 1, self ); } smoke_screen_vis_blocker( var_0 ) { var_1 = spawn( "script_model", var_0 ); var_1.angles = ( var_1.angles[0], self.angles[1] + 90, var_1.angles[2] ); var_1 clonebrushmodeltoscriptmodel( getent( "smoke_screen_vis_blocker", "targetname" ) ); wait 6.0; var_1 delete(); } turret_reset() { var_0 = ( 0, 0, 32 ) + self.origin + anglestoforward( self.angles ) * 3000; self setturrettargetvec( var_0 ); self waittill( "turret_on_target" ); self clearturrettarget(); } on_fire_sabot() { level.player endon( "remove_sabot" ); level.playertank endon( "death" ); level.player endon( "death" ); level.player endon( "tank_dismount" ); level.player waittill( "launch_sabot" ); var_0 = level.player.origin; var_1 = level.player getplayerangles(); var_1 = ( var_1[0], var_1[1], 0 ); var_0 = var_0 + anglestoforward( var_1 ) * 50; level thread maps\satfarm_audio::tow_missile_launch(); level.player init_sabot_for_player( var_0, var_1, self ); level.player thread remove_player_missile_control(); level.player give_player_missile_control(); } tank_handle_sabot( var_0 ) { self endon( "death" ); level.player endon( "tank_dismount" ); level.player endon( "missile_tank_dismount" ); level.player notifyonplayercommand( "cycle_weapon", "weapnext" ); level.player notifyonplayercommand( "fire_sabot", "+attack" ); level.player notifyonplayercommand( "fire_sabot", "+attack_akimbo_accessible" ); while ( !common_scripts\utility::flag( "tow_out" ) ) { if ( !isdefined( var_0 ) || !var_0 ) level.player waittill( "cycle_weapon" ); if ( !common_scripts\utility::flag( "tow_out" ) ) { var_0 = 0; level.player playsound( "satf_change_view_tow" ); common_scripts\utility::flag_set( "GUIDED_ROUND_ENABLED" ); thread weapon_toggle_hint(); level.player thread maps\_utility::display_hint_timeout( "HINT_GUIDED_ROUND_FIRE", 8.0 ); var_1 = level.player common_scripts\utility::waittill_any_return( "cycle_weapon", "fire_sabot" ); level.player playsound( "satf_change_view_normal" ); if ( var_1 == "fire_sabot" ) { if ( !isdefined( level.playertank.prevent_sabot_firing ) || !level.playertank.prevent_sabot_firing ) { level.player notify( "launch_sabot" ); common_scripts\utility::flag_set( "PLAYER_FIRED_GUIDED_ROUND" ); } } else { common_scripts\utility::flag_clear( "GUIDED_ROUND_ENABLED" ); level.player.tank_hud_item["sabot_range_highlight"].alpha = 0; } } } if ( isdefined( level.player.tank_hud_item["missile_status"] ) ) level.player.tank_hud_item["missile_status"] settext( &"SATFARM_OFFLINE" ); } weapon_toggle_hint() { level.playertank endon( "death" ); level.player endon( "tank_dismount" ); level.player endon( "missile_tank_dismount" ); level endon( "PLAYER_FIRED_GUIDED_ROUND" ); if ( !common_scripts\utility::flag( "PLAYER_FIRED_GUIDED_ROUND" ) ) return; wait 5.0; if ( common_scripts\utility::flag( "DISPLAYED_WEAPON_TOGGLE_HINT_ONCE" ) ) return; level.player thread maps\_utility::display_hint_timeout( "HINT_WEAPON_TOGGLE", 8.0 ); common_scripts\utility::flag_set( "DISPLAYED_WEAPON_TOGGLE_HINT_ONCE" ); } generic_tank_spawner_setup() { maps\_utility::array_spawn_function_noteworthy( "generic_tank_spawner", ::npc_tank_combat_init ); maps\_utility::array_spawn_function_noteworthy( "generic_tank_spawner", ::add_to_enemytanks_until_dead ); } add_to_enemytanks_until_dead() { level.enemytanks = common_scripts\utility::array_add( level.enemytanks, self ); self waittill( "death" ); if ( isdefined( self ) ) level.enemytanks = common_scripts\utility::array_remove( level.enemytanks, self ); } npc_tank_combat_init( var_0, var_1 ) { if ( isdefined( self ) && self.classname != "script_vehicle_corpse" && !isdefined( self.iscombatready ) ) { self endon( "death" ); self.iscombatready = 1; self.numwaits = 0; thread handle_death(); thread toggle_thermal_npc(); thread start_sand_effects(); if ( self.script_team == "axis" ) { self enableaimassist(); thread toggle_aim_assist(); if ( istank() ) { } } if ( istank() ) { thread handle_damage( var_0 ); thread tank_wait_kill_me(); if ( !isdefined( var_1 ) ) thread manage_target_loc( var_0 ); waittillframeend; self notify( "nodeath_thread" ); if ( !isdefined( var_0 ) && !isdefined( self.relative_speed ) ) thread proxmity_check_stop_loop(); } } } toggle_aim_assist() { for (;;) { level.player waittill( "assist" ); if ( isdefined( self ) ) self disableaimassist(); wait 0.05; } } manage_target_loc( var_0 ) { self endon( "death" ); wait( randomfloatrange( 0.05, 0.5 ) ); if ( !isdefined( self.targetingoffset ) ) self.targetingoffset = ( 0, 0, 64 ); while ( !common_scripts\utility::flag( "all_tanks_stop_firing" ) ) { if ( !isdefined( var_0 ) ) manage_closest_target(); if ( !isdefined( self.tank_target ) ) { common_scripts\utility::waitframe(); continue; } self setturrettargetent( self.tank_target, self.targetingoffset ); wait( randomfloatrange( 0.25, 0.5 ) ); if ( !isdefined( self.disable_turret_fire ) ) { if ( isdefined( self.override_target ) && self.override_target.classname != "script_vehicle_corpse" ) { self setturrettargetent( self.override_target, self.targetingoffset ); var_1 = self.override_target common_scripts\utility::waittill_any_timeout( 1, "death" ); if ( var_1 == "death" || isdefined( self.override_target ) && self.override_target.classname == "script_vehcile_corpse" ) { self.override_target = undefined; self clearturrettarget(); } else attempt_fire_loc(); } else if ( isdefined( self.tank_target ) && self.tank_target.classname != "script_vehicle_corpse" ) { self setturrettargetent( self.tank_target, self.targetingoffset ); var_1 = self.tank_target common_scripts\utility::waittill_any_timeout( 1, "death" ); if ( var_1 == "death" || isdefined( self.tank_target ) && self.tank_target.classname == "script_vehcile_corpse" ) { self.tank_target = undefined; self clearturrettarget(); } else attempt_fire_loc(); } else { self.tank_target = undefined; self clearturrettarget(); } } wait( randomfloatrange( 0.25, 0.5 ) ); } } attempt_fire_loc() { if ( !isdefined( self.tank_target ) ) return 0; else if ( self.classname != "script_vehicle_corpse" && self.tank_target sightconetrace( self.origin + ( 0, 0, 32 ), self ) && istank() ) { if ( getfxvisibility( self.origin + ( 0, 0, 32 ), self.tank_target.origin + ( 0, 0, 32 ) ) < 0.5 ) set_override_offset( ( 0, 0, 192 ) ); else set_override_offset( ( 0, 0, 0 ) ); shoot_anim(); var_0 = self.tank_target common_scripts\utility::waittill_any_timeout( 1, "death" ); if ( var_0 == "death" ) self.tank_target = undefined; return 1; } return 0; } check_fire_angle() { for ( var_0 = 0; var_0 < 20; var_0++ ) { if ( !isdefined( self.tank_target ) ) return 0; var_1 = self gettagangles( "tag_flash" ); var_1 = vectornormalize( var_1 ); var_2 = self.origin - self.tank_target.origin; var_2 = vectornormalize( var_2 ); var_3 = vectordot( var_1, var_2 ); if ( var_3 > 0.7 ) return 1; wait 0.1; } return 0; } tank_death_anim() { self waittill( "death" ); if ( !isdefined( self ) ) return; } #using_animtree("vehicles"); shoot_anim() { self fireweapon(); if ( isdefined( level.playertank ) && self == level.playertank && common_scripts\utility::flag( "player_in_tank" ) && !common_scripts\utility::flag( "ZOOM_ON" ) ) playfxontag( common_scripts\utility::getfx( "tank_muzzleflash" ), self, "tag_flash" ); self clearanim( %abrams_shoot_kick, 0 ); self setanimrestart( %abrams_shoot_kick ); thread tank_play_traced_effect(); } do_decal_square( var_0 ) { var_1 = [ ( 1, 0, 0 ), ( 0, 1, 0 ), ( -1, 0, 0 ), ( 0, -1, 0 ), ( 0, 0, 1 ), ( 0, 0, -1 ) ]; foreach ( var_3 in var_1 ) { var_4 = bullettrace( var_0, var_0 + var_3 * 256, 0, self ); if ( var_4["fraction"] == 1.0 ) continue; if ( !isdefined( var_4["surfacetype"] ) ) continue; var_5 = var_4["surfacetype"]; var_6 = vectortoangles( var_4["normal"] ); if ( isdefined( level._effect["tank_blast_decal_" + var_5] ) ) { playfx( common_scripts\utility::getfx( "tank_blast_decal_" + var_5 ), var_4["position"], anglestoforward( var_6 ), anglestoup( var_6 ) ); continue; } playfx( common_scripts\utility::getfx( "tank_blast_decal_default" ), var_4["position"], anglestoforward( var_6 ), anglestoup( var_6 ) ); } } tank_play_traced_effect() { var_0 = self gettagorigin( "tag_flash" ); var_1 = common_scripts\utility::tag_project( "tag_flash", 999999 ); var_2 = bullettrace( var_0, var_1, 1, self ); var_3 = var_2["surfacetype"]; var_4 = isdefined( var_2["entity"] ); var_5 = -1 * anglestoforward( self gettagangles( "tag_flash" ) ); var_6 = vectortoangles( var_2["normal"] ); var_7 = var_2; if ( var_4 ) { var_8 = bullettrace( var_2["position"], var_2["position"] + ( 0, 0, -10000 ), 0, var_2["entity"] ); var_7 = var_2; if ( var_2["entity"].origin[2] - var_8["position"][2] < 54 ) { var_6 = vectortoangles( var_8["normal"] ); var_7 = var_8; } } var_9 = 500; physicsexplosionsphere( var_2["position"], var_9 + 300, var_9 * 0.25, 1 ); var_10 = "tank_blast_decal_" + var_3; if ( isdefined( var_10 ) && !issubstr( var_10, "grate" ) ) { var_11 = common_scripts\utility::getfx( var_10 ); playfx( var_11, var_7["position"], anglestoforward( var_6 ), anglestoup( var_6 ) ); } if ( common_scripts\utility::flag( "player_in_tank" ) && isdefined( level.playertank ) && common_scripts\utility::flag( "ZOOM_ON" ) && distancesquared( var_2["position"], level.playertank.origin ) < 4000000 ) playfx( common_scripts\utility::getfx( "tank_blast_" + var_3 + "_low" ), var_2["position"], anglestoforward( var_6 ), anglestoup( var_6 ) ); else playfx( common_scripts\utility::getfx( "tank_blast_" + var_3 ), var_2["position"], anglestoforward( var_6 ), anglestoup( var_6 ) ); if ( isdefined( level.playertank ) && self != level.playertank || !isdefined( level.playertank ) ) thread common_scripts\utility::play_sound_in_space( "satf_player_sabot_explosion", var_2["position"] ); } set_override_target( var_0 ) { if ( isdefined( self ) && isdefined( var_0 ) && isdefined( self.script_team ) && isdefined( var_0.script_team ) && self.script_team != var_0.script_team ) self.override_target = var_0; } set_override_offset( var_0 ) { self.targetingoffset = var_0; } set_one_hit_kill() { while ( isdefined( self ) && self.classname != "script_vehicle_corpse" ) { self waittill( "damage", var_0, var_1, var_2, var_3, var_4 ); if ( isdefined( self.script_team ) && isdefined( var_1.script_team ) && self.script_team != var_1.script_team && var_0 > 50 ) thread handle_tank_death(); } } fire_on_non_vehicle( var_0, var_1 ) { self endon( "death" ); self.disable_turret_fire = 1; var_2 = getent( var_0, "targetname" ); if ( !isdefined( var_2 ) ) return; if ( !isdefined( var_1 ) ) var_1 = ( 0, 0, 0 ); self setturrettargetent( var_2, var_1 ); wait 1; if ( isdefined( var_2 ) ) { magicbullet( "tankfire_straight_fast", self gettagorigin( "tag_flash" ), var_2.origin + var_1, level.player ); playfxontag( common_scripts\utility::getfx( "tank_muzzleflash" ), self, "tag_flash" ); self joltbody( self.origin, 1000, 1, 0.5 ); self clearanim( %abrams_shoot_kick, 0 ); self setanimrestart( %abrams_shoot_kick ); } wait 1; self.disable_turret_fire = undefined; } fire_now_on_vehicle( var_0, var_1 ) { self endon( "death" ); self.disable_turret_fire = 1; if ( !isdefined( var_0 ) ) { } if ( !isdefined( var_1 ) ) var_1 = ( 0, 0, 0 ); self setturrettargetent( var_0, var_1 ); wait 1; if ( isdefined( var_0 ) ) { magicbullet( "tankfire_straight_fast", self gettagorigin( "tag_flash" ), var_0.origin + var_1 ); playfxontag( common_scripts\utility::getfx( "tank_muzzleflash" ), self, "tag_flash" ); self joltbody( self.origin, 1000, 1, 0.5 ); self clearanim( %abrams_shoot_kick, 0 ); self setanimrestart( %abrams_shoot_kick ); } wait 1; self.disable_turret_fire = undefined; } handle_damage( var_0 ) { self.health = 200000; var_1 = self.health - self.healthbuffer; var_2 = 0; for (;;) { self waittill( "damage", var_3, var_4, var_5, var_6, var_7 ); if ( var_7 == "MOD_PROJECTILE" || var_7 == "MOD_EXPLOSIVE" || var_7 == "MOD_PROJECTILE_SPLASH" ) { if ( !isdefined( var_4 ) || isdefined( self.godmode ) && self.godmode || isdefined( self.classname ) && self.classname == "script_vehicle_apache_mg" ) { thread handle_hit( var_4, var_3 ); continue; } if ( isdefined( self.script_team ) && self.script_team != "allies" ) { if ( var_4 == level.playertank || var_4 == level.player ) break; } if ( isdefined( self.script_team ) && self.script_team == "allies" ) { if ( var_4 == level.playertank || var_4 == level.player ) { var_2++; if ( var_2 > 4 ) break; } } if ( isdefined( var_4.script_team ) && isdefined( self.script_team ) && var_4.script_team != self.script_team ) { var_2++; if ( var_2 > 4 ) break; } thread handle_hit( var_4, var_3 ); } } if ( isdefined( self ) ) var_8 = common_scripts\utility::distance_2d_squared( self.origin, var_4.origin ); else return; if ( var_8 < 4000000 && var_3 > 250 ) { handle_tank_death( var_0 ); return; } var_9 = anglestoforward( self.angles ); var_10 = vectornormalize( var_5 ); var_11 = abs( vectordot( var_9, var_10 ) ); if ( var_11 < 0.9 && var_3 > 250 ) { handle_tank_death( var_0 ); return; } thread play_damaged_fx( var_1 ); thread handle_hit( var_4, var_3 ); for (;;) { self waittill( "damage", var_3, var_4, var_5, var_6, var_7 ); if ( !isdefined( var_4 ) ) continue; if ( var_4 == level.playertank || var_4 == level.player ) break; if ( isdefined( var_4.script_team ) && var_4.script_team == "allies" ) break; } handle_tank_death( var_0 ); } play_damaged_fx( var_0 ) { self endon( "death" ); while ( isdefined( self ) && self.classname != "script_vehicle_corpse" && maps\_utility::hastag( self.model, "tag_turret" ) ) { playfxontag( common_scripts\utility::getfx( "tank_heavy_smoke" ), self, "tag_turret" ); wait 0.2; } } handle_hit( var_0, var_1 ) { set_override_target( var_0 ); if ( isdefined( level.playertank ) && isdefined( var_0 ) && var_0 == level.playertank || var_0 == level.player ) { if ( self.script_team == "allies" && var_1 > 200 ) { level.allyhitcount++; level thread maps\satfarm_audio::tank_damage_player( self.origin ); if ( common_scripts\utility::cointoss() ) { if ( common_scripts\utility::cointoss() ) self playsound( "satfarm_td1_friendlyfirefriendlyfire", "bc_done", 1 ); else self playsound( "satfarm_td1_ceasefireonfriendlies", "bc_done", 1 ); } else if ( common_scripts\utility::cointoss() ) self playsound( "satfarm_td1_friendlyfirefriendlyfire", "bc_done", 1 ); else self playsound( "satfarm_td1_yourefiringonallies", "bc_done", 1 ); if ( level.allyhitcount >= 3 ) maps\_friendlyfire::missionfail(); } else { if ( isdefined( self ) ) level thread maps\satfarm_audio::tank_damage_player( self.origin ); var_2 = createevent( "inform_enemy_hit", "inform_hit" ); level.player play_chatter( var_2 ); } } else if ( isdefined( self ) ) level thread maps\satfarm_audio::tank_damage_allies( self.origin ); } handle_death() { var_0 = self.script_team; var_1 = self.classname; while ( isdefined( self ) && self.classname != "script_vehicle_corpse" ) wait 0.01; if ( isdefined( var_0 ) && var_0 == "allies" ) return; if ( isdefined( self ) && var_1 != "t90_sand" && target_istarget( self ) ) target_remove( self ); var_2 = createevent( "killfirm", "killfirm" ); level.player play_chatter( var_2 ); return; } handle_friendly_fail() { for (;;) { wait 10; if ( level.allyhitcount == 0 ) continue; level.allyhitcount--; } } spawn_death_collision( var_0 ) { while ( isdefined( self ) && self.classname != "script_vehicle_corpse" ) wait 0.05; if ( isdefined( self ) ) { self notify( "death" ); self setcontents( 0 ); if ( isdefined( self.deathfx_ent ) ) { self.deathfx_ent clonebrushmodeltoscriptmodel( level.death_model_col ); if ( isdefined( var_0 ) ) { var_1 = spawn( "trigger_radius", self.origin, 16, 8, 256 ); var_1.angles = self.angles; var_1 waittill( "trigger" ); if ( isdefined( self ) ) { self.deathfx_ent delete(); self delete(); var_1 delete(); } } } } } spawn_death_collision_phys( var_0 ) { while ( isdefined( self ) && self.model != "vehicle_t90ms_tank_d_noturret_iw6" && self.model != "vehicle_m1a2_abrams_iw6_dmg" ) wait 0.05; if ( isdefined( self ) ) { self notify( "death" ); self setcontents( 0 ); var_1 = spawn( "script_model", self.origin ); var_1.angles = self.angles; var_1 setmodel( self.model ); var_2 = spawn( "script_model", self.origin ); var_2 clonebrushmodeltoscriptmodel( level.death_model_col ); var_2.angles = self.angles; self delete(); if ( isdefined( var_0 ) ) { var_3 = spawn( "trigger_radius", var_1.origin, 16, 8, 256 ); var_3.angles = var_1.angles; var_3 common_scripts\utility::waittill_any_timeout( 10, "trigger" ); if ( isdefined( var_1 ) ) { var_1 moveto( var_1.origin - ( 0, 0, 16 ), 0.25 ); var_2 delete(); var_3 delete(); } wait 5; } else wait 10; for (;;) { if ( !common_scripts\utility::within_fov( level.player.origin, level.player getplayerangles(), var_1.origin, cos( 65 ) ) ) break; wait 0.05; } common_scripts\utility::flag_wait( level.corpseflag ); var_1 delete(); if ( isdefined( var_2 ) ) var_2 delete(); } } handle_tank_death( var_0 ) { if ( isdefined( self ) ) { self setcontents( 0 ); var_1 = bullettrace( self.origin + ( 0, 0, 32 ), self.origin - ( 0, 0, 256 ), 0, 0 ); var_2 = spawn( "script_model", var_1["position"] ); var_2.angles = self.angles; if ( isdefined( self.script_team ) && self.script_team == "allies" ) { var_2 setmodel( "vehicle_t90ms_tank_d_noturret_iw6" ); level thread maps\satfarm_audio::tank_death_allies( self.origin ); } else { var_2 setmodel( "vehicle_t90ms_tank_d_noturret_iw6" ); level thread maps\satfarm_audio::tank_death_player( self.origin ); } var_3 = spawn( "script_model", self.origin ); var_3 clonebrushmodeltoscriptmodel( level.death_model_col ); var_3.angles = self.angles; if ( isdefined( self.rumbletrigger ) ) self.rumbletrigger delete(); if ( isdefined( self.mgturret ) ) { common_scripts\utility::array_levelthread( self.mgturret, maps\_vehicle_code::turret_deleteme ); self.mgturret = undefined; } if ( isdefined( self.script_team ) ) level.vehicles[self.script_team] = common_scripts\utility::array_remove( level.vehicles[self.script_team], self ); if ( isdefined( self.script_linkname ) ) level.vehicle_link[self.script_linkname] = common_scripts\utility::array_remove( level.vehicle_link[self.script_linkname], self ); playfx( common_scripts\utility::getfx( "vfx_big_tank_explosion" ), var_2.origin + ( 0, 0, 48 ), var_2.angles, ( 270, 0, 0 ) ); level thread maps\satfarm_audio::tank_death_player( var_2.origin ); self delete(); if ( isdefined( var_0 ) ) { var_4 = spawn( "trigger_radius", var_2.origin, 16, 8, 256 ); var_4.angles = var_2.angles; var_4 common_scripts\utility::waittill_any_timeout( 10, "trigger" ); if ( isdefined( var_2 ) ) { var_2 moveto( var_2.origin - ( 0, 0, 16 ), 0.25 ); var_3 delete(); var_4 delete(); } wait 5; } else wait 10; for (;;) { if ( !common_scripts\utility::within_fov( level.player.origin, level.player getplayerangles(), var_2.origin, cos( 65 ) ) ) break; wait 0.05; } common_scripts\utility::flag_wait( level.corpseflag ); var_2 delete(); if ( isdefined( var_3 ) ) var_3 delete(); } } tank_wait_kill_me() { self endon( "death" ); maps\_utility::ent_flag_init( "tank_kill_me" ); maps\_utility::ent_flag_wait( "tank_kill_me" ); thread handle_tank_death(); } playerhaslineofsight() { self endon( "death" ); thread toggle_npc_target(); while ( isdefined( self ) && self.classname != "script_vehicle_corpse" ) { if ( isdefined( self ) && self.classname != "script_vehicle_corpse" && self sightconetrace( level.player.origin + ( 0, 0, 32 ), level.player ) ) { if ( !level.istargetingoff ) { var_0 = "ac130_hud_enemy_vehicle_target_s_w"; var_1 = ( 1, 0, 0 ); thread target_enable( self, var_0, var_1, 128 ); } } else if ( target_istarget( self ) ) target_remove( self ); wait 0.01; } } toggle_npc_target() { level.player notifyonplayercommand( "target", "+actionslot 3" ); level.istargetingoff = 0; while ( isdefined( self ) && self.classname != "script_vehicle_corpse" ) { if ( target_istarget( self ) ) target_remove( self ); level.istargetingoff = 1; wait 0.05; level.player waittill( "target" ); var_0 = "ac130_hud_enemy_vehicle_target_s_w"; var_1 = ( 1, 0, 0 ); if ( isdefined( self ) && self.classname != "script_vehicle_corpse" ) thread target_enable( self, var_0, var_1, 128 ); level.istargetingoff = 0; wait 0.05; level.player waittill( "target" ); } } target_enable( var_0, var_1, var_2, var_3 ) { if ( !isdefined( var_0 ) ) return; var_4 = common_scripts\utility::ter_op( var_0 maps\_vehicle::ishelicopter(), ( 0, 0, 0 ), ( 0, 0, 72 ) ); target_alloc( var_0, var_4 ); target_setshader( var_0, var_1 ); target_setscaledrendermode( var_0, 1 ); if ( isdefined( var_2 ) ) target_setcolor( var_0, var_2 ); target_setmaxsize( var_0, 24 ); target_setminsize( var_0, 16, 0 ); target_flush( var_0 ); } init_chatter() { if ( isdefined( anim.tank_bc ) ) return; level.tank_chatter_enabled = 1; anim.tank_bc = spawnstruct(); anim.tank_bc.bc_isspeaking = 0; anim.tank_bc.numtankvoices = 1; anim.tank_bc.currentassignedvoice = 0; anim.tank_bc.lastalias = []; anim.tank_bc.bc_eventtypelastusedtime = []; anim.tank_bc.bc_eventtypelastusedtimeplr = []; anim.tank_bc.eventtypeminwait = []; anim.tank_bc.eventtypeminwait["same_alias"] = 15; anim.tank_bc.eventtypeminwait["callout_clock"] = 10; anim.tank_bc.eventtypeminwait["killfirm"] = 3; anim.tank_bc.eventtypeminwait["inform_firing"] = 10; anim.tank_bc.eventtypeminwait["inform_taking_fire"] = 30; anim.tank_bc.eventtypeminwait["inform_reloading"] = 5; anim.tank_bc.eventtypeminwait["inform_loaded"] = 0.5; anim.tank_bc.eventtypeminwait["inform_enemy_hit"] = 5; anim.tank_bc.eventtypeminwait["inform_enemy_retreat"] = 5; anim.tank_bc.bcprintfailprefix = "^3***** BCS FAILURE: "; if ( isplayer( self ) ) { self.voiceid = "plr"; self.bc_isspeaking = 0; thread enemy_callout_tracking_plr(); } else return; self.bc_enabled = 1; } createevent( var_0, var_1 ) { var_2 = spawnstruct(); var_2.eventtype = var_0; var_2.alias = var_1; return var_2; } play_chatter( var_0, var_1 ) { self endon( "death" ); if ( common_scripts\utility::flag( "stop_tank_chatter" ) ) return 0; if ( !can_say_event_type( var_0.eventtype ) ) return 0; var_2 = get_team_prefix() + self.voiceid + "_" + var_0.alias; if ( !isdefined( var_2 ) ) return 0; if ( !soundexists( var_2 ) ) return 0; if ( !isdefined( var_1 ) ) var_1 = 0; if ( var_1 && !can_say_soundalias( var_2 ) ) return 0; if ( isplayer( self ) ) self.bc_isspeaking = 1; else anim.tank_bc.bc_isspeaking = 1; self playsound( var_2, "bc_done", 1 ); self waittill( "bc_done" ); if ( isplayer( self ) ) self.bc_isspeaking = 0; else anim.tank_bc.bc_isspeaking = 0; update_event_type( var_0.eventtype, var_0.alias ); return 1; } can_say_event_type( var_0 ) { if ( !isdefined( level.tank_chatter_enabled ) || !level.tank_chatter_enabled ) return 0; if ( isdefined( self.bc_enabled ) && !self.bc_enabled ) return 0; if ( !isplayer( self ) && anim.tank_bc.bc_isspeaking ) return 0; else if ( isplayer( self ) && self.bc_isspeaking ) return 0; if ( isplayer( self ) && !isdefined( anim.tank_bc.bc_eventtypelastusedtimeplr[var_0] ) ) return 1; else if ( !isplayer( self ) && !isdefined( anim.tank_bc.bc_eventtypelastusedtime[var_0] ) ) return 1; if ( isplayer( self ) ) var_1 = anim.tank_bc.bc_eventtypelastusedtimeplr[var_0]; else var_1 = anim.tank_bc.bc_eventtypelastusedtime[var_0]; var_2 = anim.tank_bc.eventtypeminwait[var_0] * 1000; if ( gettime() - var_1 >= var_2 ) return 1; return 0; } can_say_soundalias( var_0 ) { if ( isdefined( anim.tank_bc.lastalias["alias"] ) && anim.tank_bc.lastalias["alias"] == var_0 ) { var_1 = anim.tank_bc.lastalias["time"]; var_2 = anim.tank_bc.eventtypeminwait["same_alias"] * 1000; if ( gettime() - var_1 < var_2 ) return 0; } return 1; } update_event_type( var_0, var_1 ) { if ( isplayer( self ) ) anim.tank_bc.bc_eventtypelastusedtimeplr[var_0] = gettime(); else anim.tank_bc.bc_eventtypelastusedtime[var_0] = gettime(); anim.tank_bc.lastalias["time"] = gettime(); anim.tank_bc.lastalias["alias"] = var_1; } check_overrides( var_0, var_1 ) { return var_1; } get_team_prefix() { return "satfarm_tank_"; } take_fire_tracking() { self endon( "death" ); level.player endon( "tank_dismount" ); for (;;) { self waittill( "damage", var_0, var_1 ); self.request_move = 1; if ( isdefined( var_1 ) ) { if ( !isplayer( var_1 ) ) { var_2 = createevent( "inform_taking_fire", "inform_taking_fire" ); play_chatter( var_2 ); } } } } enemy_callout_tracking_plr() { self endon( "death" ); level.player endon( "tank_dismount" ); for (;;) { var_0 = undefined; var_1 = []; var_2 = maps\_utility::getvehiclearray(); foreach ( var_4 in var_2 ) { if ( var_4.script_team != "allies" ) var_1 = common_scripts\utility::array_add( var_1, var_4 ); } var_1 = sortbydistance( var_1, self.origin ); foreach ( var_7 in var_1 ) { if ( isdefined( var_7.lastplayercallouttime ) && gettime() - var_7.lastplayercallouttime < 45000 ) continue; if ( distance2d( self.origin, var_7.origin ) > 8000 ) break; var_0 = var_7; break; } if ( !isdefined( var_0 ) ) { var_1 = getaiarray( "axis" ); var_1 = common_scripts\utility::array_combine( getaiarray( "team3" ), var_1 ); var_1 = sortbydistance( var_1, self.origin ); foreach ( var_7 in var_1 ) { if ( isdefined( var_7.lastplayercallouttime ) && gettime() - var_7.lastplayercallouttime < 45000 ) continue; if ( distance2d( self.origin, var_7.origin ) > 8000 ) break; var_0 = var_7; break; } } if ( isdefined( var_0 ) ) { var_11 = createevent( "callout_clock", getthreatalias( var_0 ) ); if ( play_chatter( var_11 ) ) { if ( isdefined( var_0 ) ) var_0.lastplayercallouttime = gettime(); } } wait 1; } } getthreatalias( var_0 ) { if ( isplayer( self ) ) var_1 = animscripts\battlechatter::getdirectionfacingclock( self getplayerangles(), self.origin, var_0.origin ); else var_1 = animscripts\battlechatter::getdirectionfacingclock( self.angles, self.origin, var_0.origin ); var_2 = "callout_targetclock_" + var_1; if ( common_scripts\utility::cointoss() ) { if ( isai( var_0 ) ) var_2 = var_2 + "_troops"; if ( var_0 maps\_vehicle::isvehicle() ) { if ( var_0 maps\_vehicle::ishelicopter() ) var_2 = var_2 + "_bird"; if ( var_0 istank() ) var_2 = var_2 + "_tank"; } } return var_2; } nav_mesh_build() { level.pos_info_array = []; var_0 = getvehiclenodearray( "tank_enemy_nodes", "script_noteworthy" ); foreach ( var_2 in var_0 ) { if ( var_2 is_path_start_node() ) { var_2.nav_type = "path_start"; add_path_start_and_end_refs( var_2 ); continue; } if ( var_2 is_path_end_node() ) { var_2.nav_type = "path_end"; continue; } var_2.nav_type = "path"; } foreach ( var_2 in var_0 ) { if ( var_2 is_path_mid_node() ) continue; if ( isdefined( var_2.pos_info ) ) continue; var_7 = spawnstruct(); var_7.nodes_start = []; var_7.nodes_end = []; level.pos_info_array[level.pos_info_array.size] = var_7; for ( var_8 = 0; var_8 < var_0.size; var_8++ ) { var_9 = undefined; if ( isdefined( var_0[var_8].script_linkname ) && isdefined( var_0[var_8].script_linkto ) ) var_9 = 1; if ( !isdefined( var_0[var_8].script_linkto ) ) { if ( !isdefined( var_0[var_8].script_linkname ) ) continue; else if ( isdefined( var_2.script_linkto ) && var_0[var_8].script_linkname != var_2.script_linkto ) continue; else if ( isdefined( var_2.script_linkname ) && var_0[var_8].script_linkname != var_2.script_linkname ) continue; } else if ( isdefined( var_2.script_linkname ) && var_0[var_8].script_linkto != var_2.script_linkname ) continue; else if ( isdefined( var_2.script_linkto ) && var_0[var_8].script_linkto != var_2.script_linkto ) continue; if ( var_0[var_8] is_path_start_node() ) var_7.nodes_start[var_7.nodes_start.size] = var_0[var_8]; else if ( var_0[var_8] is_path_end_node() ) var_7.nodes_end[var_7.nodes_end.size] = var_0[var_8]; else continue; var_0[var_8].pos_info = var_7; var_0[var_8].exit_node = var_9; } } } is_path_end_node() { if ( isdefined( self.nav_type ) ) return self.nav_type == "path_end"; var_0 = isdefined( self.target ) && isdefined( getvehiclenode( self.target, "targetname" ) ); var_1 = isdefined( self.targetname ) && isdefined( getvehiclenode( self.targetname, "target" ) ); return !var_0 && var_1; } is_path_start_node() { if ( isdefined( self.nav_type ) ) return self.nav_type == "path_start"; return isdefined( self.spawnflags ) && self.spawnflags & 1; } is_path_mid_node() { if ( isdefined( self.nav_type ) ) return self.nav_type == "path"; return !is_path_start_node() && !is_path_end_node(); } add_path_start_and_end_refs( var_0 ) { var_0.path_end = var_0 get_path_end_node(); var_0.path_end.path_start = var_0; } get_path_end_node() { for ( var_0 = self; isdefined( var_0.target ); var_0 = getvehiclenode( var_0.target, "targetname" ) ) { } return var_0; } nav_mesh_pathing( var_0, var_1 ) { self endon( "death" ); if ( !isdefined( var_1 ) ) var_1 = "nostopping"; if ( !isdefined( self ) ) return; thread proxmity_check_stop_loop( var_1, "", 1 ); self.stuck = 0; thread manage_position_in_use_loc( var_0 ); self.pastswitch = var_0; switch_node_now( self, var_0 ); self waittill( "reached_end_node" ); wait 0.05; var_2 = undefined; while ( !common_scripts\utility::flag( var_1 ) ) { if ( !isdefined( var_2 ) ) { var_3 = self.currentnode.pos_info; var_4 = self.currentnode; if ( self.veh_pathdir == "reverse" ) { var_3 = self.attachedpath.pos_info; var_4 = self.attachedpath; } if ( !isdefined( var_3 ) ) { wait 0.5; continue; } var_5 = get_optimal_next_path_loc( var_3 ); if ( !isdefined( var_5 ) ) { wait 0.5; continue; } thread manage_position_in_use_loc( var_5.path_end ); var_6 = var_5.path_end.pos_info; if ( var_4 is_path_end_node() && var_4.path_start.origin == var_5.path_end.origin ) var_5 = var_4; var_7 = var_5 is_path_end_node(); if ( var_7 ) var_5 = var_5.path_start; var_8 = same_path( var_5 ); if ( var_8 && var_7 ) self.veh_transmission = "reverse"; else self.veh_transmission = "forward"; if ( var_7 ) self.veh_pathdir = "reverse"; else self.veh_pathdir = "forward"; if ( !var_8 ) { switch_node_now( self, var_5 ); self vehicle_setspeed( 20, 25, 25 ); self resumespeed( 25 ); } else { self startpath(); self vehicle_setspeed( 20, 25, 25 ); self resumespeed( 25 ); } } else { switch_node_now( self, var_2 ); self vehicle_setspeed( 20, 25, 25 ); self resumespeed( 25 ); self waittill( "reached_end_node" ); var_2 = undefined; } if ( self.veh_pathdir == "forward" && !self.currentnode is_path_end_node() ) { var_9 = undefined; while ( !common_scripts\utility::flag( var_1 ) ) { if ( !self.currentnode is_path_end_node() && isdefined( self.currentnode ) && isdefined( self.currentnode.target ) ) { if ( isdefined( var_9 ) && self.currentnode.target != var_9.targetname ) var_9 = getvehiclenode( self.currentnode.target, "targetname" ); else if ( !isdefined( var_9 ) ) var_9 = getvehiclenode( self.currentnode.target, "targetname" ); if ( isdefined( var_9 ) && var_9 is_path_end_node() ) { var_2 = get_optimal_next_path_loc( var_9.pos_info ); if ( isdefined( var_2 ) && isdefined( var_2.pos_info.prev_in_use ) && var_2.pos_info.prev_in_use == self ) wait 2; break; } } else { if ( self.currentnode is_path_end_node() ) { var_2 = get_optimal_next_path_loc( self.currentnode.pos_info ); if ( isdefined( var_2 ) && isdefined( var_2.pos_info.prev_in_use ) && var_2.pos_info.prev_in_use == self ) wait 2; break; } break; } var_9 common_scripts\utility::waittill_any_timeout( 4, "trigger" ); } } if ( isdefined( var_2 ) ) { thread manage_position_in_use_loc( var_2.path_end ); continue; } self waittill( "reached_end_node" ); wait 0.5; } if ( isdefined( self ) && self.classname != "script_vehicle_corpse" ) nav_mesh_exit( self.currentnode ); } same_path( var_0 ) { if ( isdefined( self.attachedpath ) ) { if ( self.attachedpath == var_0 ) return 1; else if ( isdefined( self.attachedpath.script_linkname ) && isdefined( var_0.script_linkname ) ) { var_1 = strtok( self.attachedpath.script_linkname, "_" ); var_2 = strtok( var_0.script_linkname, "_" ); if ( var_1[1] == var_2[1] ) return 1; if ( isdefined( var_0.script_linkto ) ) { var_3 = strtok( var_0.script_linkto, "_" ); if ( var_1[1] == var_3[1] ) return 1; } } } return 0; } nav_mesh_exit( var_0 ) { self endon( "death" ); level.inc = 0; self.shortestdepth = 0; var_1 = []; var_1[0] = var_0; var_2 = []; var_2 = nav_mesh_exit_recursive( var_1 ); if ( !isdefined( var_2 ) ) return undefined; if ( var_2.size == 0 ) return undefined; wait 0.05; var_3 = undefined; var_4 = 1; foreach ( var_6 in var_2 ) { var_3 = var_6; if ( isdefined( var_6.path_start ) && isdefined( var_6.path_start.path_end ) ) { if ( !isdefined( var_6.path_start.path_end.pos_info.in_use ) || isdefined( var_6.path_start.path_end.pos_info.in_use ) && var_6.path_start.path_end.pos_info.in_use == self ) { if ( !isdefined( var_6.path_start.path_end.pos_info.prev_in_use ) ) { thread manage_position_in_use_loc( var_6.path_start.path_end ); switch_node_now( self, var_6.path_start ); var_7 = strtok( var_6.path_start.script_linkname, "_" ); var_8 = var_7[1]; } else if ( var_6.path_start.path_end.pos_info.prev_in_use == self ) { thread manage_position_in_use_loc( var_6.path_start.path_end ); switch_node_now( self, var_6.path_start ); var_7 = strtok( var_6.path_start.script_linkname, "_" ); var_8 = var_7[1]; } else continue; } else continue; } else continue; wait 0.05; self waittill( "reached_end_node" ); wait 0.05; } var_10 = getvehiclenode( self.exitnodename, "targetname" ); if ( isdefined( var_10 ) ) switch_node_now( self, var_10 ); } nav_mesh_exit_recursive( var_0 ) { var_1 = []; if ( isdefined( var_0[var_0.size - 1].exit_node ) ) { if ( self.shortestdepth > var_0.size || self.shortestdepth == 0 ) self.shortestdepth = var_0.size; return var_0; } else if ( var_0.size > 15 ) return var_1; else { var_2 = var_0[var_0.size - 1]; foreach ( var_4 in var_2.pos_info.nodes_start ) { if ( !array_contains_script_linkto( var_0, var_4.path_end ) ) { var_5 = var_0; var_5[var_5.size] = var_4.path_end; var_6 = nav_mesh_exit_recursive( var_5 ); if ( var_6.size == self.shortestdepth ) var_1 = var_6; } } } return var_1; } array_contains_script_linkto( var_0, var_1 ) { if ( var_0.size <= 0 ) return 0; var_2 = ""; if ( isdefined( var_1.script_linkto ) ) { var_3 = strtok( var_1.script_linkto, "_" ); var_2 = var_3[1]; } else if ( isdefined( var_1.script_linkname ) ) { var_3 = strtok( var_1.script_linkname, "_" ); var_2 = var_3[1]; } foreach ( var_5 in var_0 ) { if ( isdefined( var_5.script_linkto ) ) { var_6 = strtok( var_5.script_linkto, "_" ); var_7 = var_6[1]; if ( var_7 == var_2 ) return 1; continue; } if ( isdefined( var_5.script_linkname ) ) { var_6 = strtok( var_5.script_linkname, "_" ); var_7 = var_6[1]; if ( var_7 == var_2 ) return 1; } } return 0; } get_optimal_next_path_loc( var_0 ) { var_1 = []; foreach ( var_3 in var_0.nodes_start ) { if ( !isdefined( var_3.path_end.pos_info.in_use ) ) { var_1[var_1.size] = var_3.path_end; continue; } } if ( !var_1.size ) return undefined; manage_closest_target(); if ( !isdefined( self.tank_move_target ) ) return undefined; var_1 = sortbydistance( var_1, self.tank_move_target.origin ); var_5 = var_0.nodes_start[0]; var_6 = distancesquared( var_5.origin, self.tank_move_target.origin ); var_7 = undefined; var_8 = undefined; foreach ( var_10 in var_1 ) { var_11 = distancesquared( self.tank_move_target.origin, var_10.origin ); if ( var_11 < 1000000 ) continue; var_12 = distancesquared( var_5.origin, var_10.origin ); if ( var_11 < var_12 && var_6 < var_12 ) continue; if ( !isdefined( var_7 ) || var_11 < var_8 ) { var_7 = var_10; var_8 = var_11; } } if ( !isdefined( var_7 ) ) { self.numwaits++; return undefined; } if ( isdefined( self.numwaits ) && self.numwaits >= 5 ) { self.numwaits = 0; return var_7.path_start; } if ( var_6 > 1000000 && ( !isdefined( var_7 ) || var_8 > var_6 ) ) { self.numwaits++; return undefined; } self.numwaits = 0; return var_7.path_start; } get_optimal_next_path_los_check( var_0 ) { self endon( "death" ); level.inc = 0; self.shortestdepth = 0; var_1 = []; var_1[0] = var_0; var_2 = []; var_2 = get_optimal_next_path_recursive( var_1 ); if ( !isdefined( var_2 ) ) { self.numwaits++; wait 0.5; return 0; } if ( var_2.size == 0 ) { self.numwaits++; wait 0.5; return 0; } wait 0.05; var_3 = undefined; var_4 = 1; foreach ( var_6 in var_2 ) { var_3 = var_6; if ( isdefined( var_6.path_start ) && isdefined( var_6.path_start.path_end ) ) { if ( !isdefined( var_6.path_start.path_end.pos_info.in_use ) || isdefined( var_6.path_start.path_end.pos_info.in_use ) && var_6.path_start.path_end.pos_info.in_use != self ) { if ( !isdefined( var_6.path_start.path_end.pos_info.prev_in_use ) ) { thread manage_position_in_use_loc( var_6.path_start.path_end ); switch_node_now( self, var_6.path_start ); var_7 = strtok( var_6.path_start.script_linkname, "_" ); var_8 = var_7[1]; } else if ( var_6.path_start.path_end.pos_info.prev_in_use == self ) { thread manage_position_in_use_loc( var_6.path_start.path_end ); switch_node_now( self, var_6.path_start ); var_7 = strtok( var_6.path_start.script_linkname, "_" ); var_8 = var_7[1]; } else continue; } else continue; } else continue; wait 0.05; self waittill( "reached_end_node" ); wait 0.05; } wait 0.5; self.numwaits = 0; return 1; } get_optimal_next_path_recursive( var_0 ) { var_1 = []; if ( self.tank_move_target sightconetrace( var_0[var_0.size - 1].origin + ( 0, 0, 64 ) ) && !isdefined( var_0[var_0.size - 1].pos_info.in_use ) ) { if ( self.shortestdepth > var_0.size || self.shortestdepth == 0 ) self.shortestdepth = var_0.size; return var_0; } else if ( var_0.size > 4 || isdefined( var_0[var_0.size - 1].pos_info.in_use ) ) return var_1; else { var_2 = var_0[var_0.size - 1]; foreach ( var_4 in var_2.pos_info.nodes_start ) { if ( !array_contains_script_linkto( var_0, var_4.path_end ) ) { var_5 = var_0; var_5[var_5.size] = var_4.path_end; var_6 = get_optimal_next_path_recursive( var_5 ); if ( var_6.size == self.shortestdepth ) var_1 = var_6; } } } return var_1; } array_sort_by_handler_parameter( var_0, var_1, var_2 ) { if ( isdefined( self ) ) { for ( var_3 = 0; var_3 < var_0.size - 1; var_3++ ) { if ( isdefined( self ) && isdefined( var_0[var_3] ) ) { for ( var_4 = var_3 + 1; var_4 < var_0.size; var_4++ ) { if ( isdefined( self ) && isdefined( var_0[var_4] ) && isdefined( var_0[var_3] ) ) { if ( var_0[var_4] [[ var_1 ]]( var_2 ) < var_0[var_3] [[ var_1 ]]( var_2 ) ) { var_5 = var_0[var_4]; var_0[var_4] = var_0[var_3]; var_0[var_3] = var_5; } } } } } } return var_0; } distance_squared_from_player_loc( var_0 ) { return distancesquared( self.origin, var_0.origin ); } get_hinds_enemy_active() { return getentarray( "lockon_targets", "script_noteworthy" ); } manage_closest_target() { self endon( "death" ); if ( isdefined( self.tank_target ) && self.tank_target.classname == "script_vehicle_corpse" ) self.tank_target = undefined; if ( isdefined( self.tank_move_target ) && self.tank_move_target.classname == "script_vehicle_corpse" ) self.tank_move_target = undefined; var_0 = []; if ( self.script_team == "allies" ) { if ( isdefined( level.enemytanks ) && level.enemytanks.size ) var_0 = common_scripts\utility::array_combine( var_0, level.enemytanks ); if ( isdefined( level.enemygazs ) && level.enemygazs.size ) var_0 = common_scripts\utility::array_combine( level.enemygazs, var_0 ); manage_closest_target_ally( var_0 ); } else if ( self.script_team == "axis" ) { var_0 = level.allytanks; if ( isdefined( level.playertank ) ) { var_0 = common_scripts\utility::array_insert( level.allytanks, level.playertank, level.allytanks.size ); var_1 = distancesquared( level.playertank.origin, self.origin ); self.tank_move_target = level.playertank; } manage_closest_target_axis( var_0 ); } else { } } manage_closest_target_ally( var_0 ) { var_0 = clean_tank_array( var_0 ); var_1 = 1000000000; if ( var_0.size && isdefined( self ) ) { var_2 = sortbydistance( var_0, self.origin ); if ( isdefined( var_2 ) ) { foreach ( var_4 in var_2 ) { if ( isdefined( var_4 ) ) { var_5 = distancesquared( var_4.origin, self.origin ); var_6 = distancesquared( var_4.origin, level.player.origin ); if ( var_5 < 1000000 ) { if ( var_5 < var_1 && isdefined( var_4 ) && var_4.classname != "script_vehicle_corpse" && self.classname != "script_vehicle_corpse" ) { var_1 = var_5; self.tank_move_target = var_4; if ( var_4 sightconetrace( self.origin + ( 0, 0, 32 ), self ) ) self.tank_target = var_4; } } else if ( var_6 < var_1 && isdefined( var_4 ) && var_4.classname != "script_vehicle_corpse" && self.classname != "script_vehicle_corpse" ) { var_1 = var_6; self.tank_move_target = var_4; if ( var_4 sightconetrace( self.origin + ( 0, 0, 32 ), self ) ) self.tank_target = var_4; } } } } } } manage_closest_target_axis( var_0 ) { var_0 = clean_tank_array( var_0 ); var_1 = 1000000000; if ( var_0.size && isdefined( self ) ) { var_2 = sortbydistance( var_0, self.origin ); if ( isdefined( var_2 ) ) { foreach ( var_4 in var_2 ) { if ( isdefined( var_4 ) ) { var_5 = distancesquared( var_4.origin, self.origin ); if ( var_5 < var_1 && isdefined( var_4 ) && var_4.classname != "script_vehicle_corpse" && self.classname != "script_vehicle_corpse" ) { var_1 = var_5; self.tank_move_target = var_4; if ( var_4 sightconetrace( self.origin + ( 0, 0, 32 ), self ) ) self.tank_target = var_4; } } } } } } manage_position_in_use_loc( var_0 ) { self notify( "clear_last_position" ); self endon( "death" ); if ( isdefined( var_0.pos_info.in_use ) && var_0.pos_info.in_use != self ) return 0; thread manage_clear_dead( var_0 ); if ( isdefined( var_0.pos_info.nodes_end ) ) { foreach ( var_2 in var_0.pos_info.nodes_end ) { if ( isdefined( var_2.pos_info.in_use ) && var_2.pos_info.in_use != self ) return 0; else var_2.pos_info.in_use = self; } } self waittill( "clear_last_position" ); if ( isdefined( var_0.pos_info.nodes_end ) ) { foreach ( var_2 in var_0.pos_info.nodes_end ) { var_2.pos_info.in_use = undefined; var_2.pos_info.prev_in_use = self; } } self waittill( "clear_last_position" ); if ( isdefined( var_0.pos_info.nodes_end ) ) { foreach ( var_2 in var_0.pos_info.nodes_end ) var_2.pos_info.prev_in_use = undefined; } } manage_clear_dead( var_0 ) { self notify( "manage_clear_dead" ); self endon( "manage_clear_dead" ); self waittill( "death" ); if ( isdefined( var_0.pos_info.nodes_end ) ) { foreach ( var_2 in var_0.pos_info.nodes_end ) { var_2.pos_info.in_use = undefined; var_2.pos_info.prev_in_use = undefined; } } } manage_switching_vehicle_speed_loc( var_0 ) { self endon( "death" ); self notify( "switching_path_speed_update" ); self endon( "switching_path_speed_update" ); var_1 = self vehicle_getspeed(); if ( var_1 == 0 ) self vehicle_setspeedimmediate( var_1, 1 ); else self vehicle_setspeedimmediate( var_1, var_1 ); var_2 = getvehiclenode( var_0.target, "targetname" ); var_2 waittillmatch( "trigger", self ); self resumespeed( 20 ); } generic_tank_dynamic_path_spawner_setup() { maps\_utility::array_spawn_function_noteworthy( "generic_tank_dynamic_path_spawner", ::generic_spawn_node_based_enemy_tank ); maps\_utility::array_spawn_function_noteworthy( "generic_tank_dynamic_path_spawner", ::add_to_enemytanks_until_dead ); } generic_spawn_node_based_enemy_tank() { var_0 = self.spawner common_scripts\utility::get_linked_vehicle_node(); self.origin = var_0.origin; thread init_tank_enemy_loc( var_0.pos_info.nodes_start[0] ); } move_ally_to_mesh( var_0, var_1, var_2 ) { var_3 = self; if ( !isdefined( var_2 ) ) var_2 = "nostopping"; var_3.exitnodename = var_1; var_4 = getvehiclenode( var_0, "targetname" ); var_5 = var_4 common_scripts\utility::get_linked_vehicle_node(); switch_node( var_3, var_4, var_5 ); var_3 thread nav_mesh_pathing( var_5.pos_info.nodes_start[0], var_2 ); } tank_relative_speed( var_0, var_1, var_2, var_3, var_4 ) { level.player endon( "tank_dismount" ); if ( isdefined( self ) ) { var_5 = self; var_5.relative_speed = 1; } else return 0; if ( !isdefined( var_0 ) || var_0 == "" ) level.alliedtanktarget = level.playertank; else { var_6 = common_scripts\utility::getstruct( var_0, "targetname" ); level.alliedtanktarget = var_6; } if ( isdefined( var_1 ) && var_1 != "" ) thread tank_relative_speed_stop( var_5, var_1 ); else var_1 = "nostopping"; if ( !isdefined( var_2 ) ) var_2 = 0; if ( !isdefined( var_3 ) ) var_3 = 0; if ( !isdefined( var_4 ) ) var_4 = 0; var_7 = level.playertank; var_8 = squared( 2500 + var_2 ); var_9 = squared( 2000 ); var_10 = squared( 500 ); var_11 = squared( 6000 ); var_12 = var_9 - var_10; var_13 = 0.05; var_14 = undefined; var_15 = undefined; while ( !common_scripts\utility::flag( var_1 ) ) { var_16 = 0; var_17 = 0; var_18 = ""; var_19 = undefined; var_20 = undefined; var_21 = undefined; if ( !isdefined( var_5 ) ) return; if ( var_5.classname == "script_vehicle_corpse" ) return; if ( var_5.classname != "script_vehicle_corpse" && isdefined( var_5.currentnode ) && isdefined( var_5.currentnode.target ) ) { if ( isdefined( var_15 ) && self.currentnode.target != var_15.targetname ) var_15 = getvehiclenode( var_5.currentnode.target, "targetname" ); else if ( !isdefined( var_15 ) ) var_15 = getvehiclenode( var_5.currentnode.target, "targetname" ); } if ( isdefined( var_15 ) ) { if ( isdefined( var_15.script_flag_wait ) && !common_scripts\utility::flag( var_15.script_flag_wait ) ) { var_18 = var_15.script_flag_wait; var_17 = 1; } if ( isdefined( var_15.speed ) && var_15.speed <= 30 ) var_16 = 1; } var_20 = distance2dsquared( level.alliedtanktarget.origin, var_5.origin ); var_21 = distance2dsquared( level.alliedtanktarget.origin, var_7.origin ); var_22 = distance2d( level.alliedtanktarget.origin, var_5.origin ); var_23 = distance2d( level.alliedtanktarget.origin, var_7.origin ); var_24 = 0; if ( var_20 < var_21 ) { var_25 = distance2dsquared( var_5.origin, var_7.origin ); if ( var_25 < var_20 - var_21 && var_25 > 9000000 ) var_24 = 0; else var_24 = 1; } else if ( var_20 > var_21 + var_10 * 2 ) var_16 = 0; if ( !isdefined( var_19 ) ) var_19 = distance2dsquared( var_7.origin, var_5.origin ); else { var_26 = distance2dsquared( var_7.origin, var_5.origin ); if ( var_26 < var_19 ) var_19 = var_26; } var_27 = undefined; var_5 proxmity_check_stop_relative( var_17, var_16 ); if ( var_17 ) { if ( var_5.classname != "script_vehicle_corpse" ) { if ( !isdefined( var_5.isobstructed ) ) var_5 resumespeed( 25 + var_3 ); var_5.flagtowait = var_18; } } if ( isdefined( var_5.flagtowait ) ) { if ( common_scripts\utility::flag( var_5.flagtowait ) ) var_5.flagtowait = undefined; } else if ( !isdefined( var_5.isobstructed ) ) { if ( !var_16 ) { if ( var_5.classname != "script_vehicle_corpse" ) { if ( var_19 >= var_8 && var_24 ) var_27 = 0; else if ( var_24 ) { var_28 = clamp( var_19, var_10, var_9 ); var_29 = 1 - ( var_28 - var_10 ) / var_12; var_27 = 5 + ( 60 + var_4 - 5 ) * var_29; } else var_27 = 60 + var_4; if ( isdefined( var_27 ) ) { var_30 = undefined; if ( isdefined( var_14 ) ) var_30 = abs( var_27 - var_14 ) / max( var_14, 0.001 ); if ( ( !isdefined( var_14 ) || isdefined( var_30 ) && var_30 > 0.1 || var_27 == 0 ) && !isdefined( var_5.isobstructed ) ) { var_5 vehicle_setspeed( var_27, 25 + var_3, 25 ); var_14 = var_27; } else if ( var_27 == 60 + var_4 && !isdefined( var_5.isobstructed ) ) { var_5 vehicle_setspeed( var_27, 25 + var_3, 25 ); var_14 = var_27; } } } } else if ( var_5.classname != "script_vehicle_corpse" && !isdefined( var_5.isobstructed ) ) { if ( var_19 >= var_8 && var_24 ) { if ( var_19 < var_11 ) { var_27 = 0; var_5 vehicle_setspeed( var_27, 25 + var_3, 25 ); var_14 = var_27; } else var_5 resumespeed( 25 + var_3 ); } else var_5 resumespeed( 25 + var_3 ); } } wait( var_13 ); } if ( isdefined( var_5 ) ) { var_5 resumespeed( 25 ); var_5.relative_speed = undefined; } } tank_relative_speed_stop( var_0, var_1 ) { common_scripts\utility::flag_wait( var_1 ); if ( !isdefined( var_0 ) ) return; if ( var_0.classname == "script_vehicle_corpse" ) return; var_0 resumespeed( 25 ); } proxmity_check_stop_loop( var_0, var_1, var_2 ) { self endon( "death" ); level.player endon( "tank_dismount" ); if ( !isdefined( var_0 ) || var_0 == "" ) var_0 = "nostopping"; if ( !isdefined( var_1 ) || var_1 == "" ) var_3 = level.playertank; else var_3 = var_1; if ( !isdefined( var_3 ) ) return; if ( isdefined( var_2 ) ) var_4 = 0.7; else var_4 = 0.98; var_5 = undefined; var_6 = undefined; while ( !common_scripts\utility::flag( var_0 ) ) { var_7 = 0; if ( !isdefined( self ) ) return; if ( self.classname == "script_vehicle_corpse" ) return; if ( self.classname != "script_vehicle_corpse" && isdefined( self.currentnode ) && isdefined( self.currentnode.target ) ) { if ( isdefined( var_5 ) && self.currentnode.target != var_5.targetname ) var_5 = getvehiclenode( self.currentnode.target, "targetname" ); else if ( !isdefined( var_5 ) ) var_5 = getvehiclenode( self.currentnode.target, "targetname" ); } if ( isdefined( var_5 ) ) { if ( isdefined( var_5.script_flag_wait ) && !common_scripts\utility::flag( var_5.script_flag_wait ) ) var_6 = var_5.script_flag_wait; } var_8 = self vehicle_getvelocity(); if ( var_8 == ( 0, 0, 0 ) ) var_9 = anglestoforward( self.angles ); else var_9 = vectornormalize( var_8 ); if ( !isdefined( var_3 ) ) { common_scripts\utility::waitframe(); continue; } else var_10 = vectornormalize( var_3.origin - self.origin ); var_11 = vectordot( var_9, var_10 ); var_12 = self vehicle_getspeed(); if ( var_11 >= var_4 ) { var_13 = common_scripts\utility::distance_2d_squared( var_3.origin, self.origin ); if ( var_13 <= 1000000 ) { self vehicle_setspeed( 0, 12.5, 250 ); self.isobstructed = 1; } else if ( var_13 <= 4000000 ) { self vehicle_setspeed( 10, 12.5, 250 ); self.isobstructed = 1; } else if ( var_12 < 5 ) { if ( !isdefined( var_6 ) ) self resumespeed( 10 ); else if ( common_scripts\utility::flag( var_6 ) ) { var_6 = undefined; self resumespeed( 10 ); } self.isobstructed = undefined; } else self.isobstructed = undefined; } else if ( var_12 < 5 ) { if ( !isdefined( var_6 ) ) { var_6 = undefined; self resumespeed( 10 ); } else if ( common_scripts\utility::flag( var_6 ) ) { var_6 = undefined; self resumespeed( 10 ); } self.isobstructed = undefined; } else self.isobstructed = undefined; wait 0.25; } } proxmity_check_stop_relative( var_0, var_1 ) { self endon( "death" ); if ( !isdefined( self ) ) return; if ( self.classname == "script_vehicle_corpse" ) return; var_2 = self vehicle_getspeed(); var_3 = self vehicle_getvelocity(); if ( var_2 < 1 ) { var_3 = self.angles; var_4 = anglestoforward( self.angles ); } else var_4 = vectornormalize( var_3 ); var_5 = vectornormalize( level.playertank.origin - self.origin ); var_6 = vectordot( var_4, var_5 ); var_2 = self vehicle_getspeed(); if ( var_6 >= 0.95 ) { var_7 = common_scripts\utility::distance_2d_squared( level.playertank.origin, self.origin ); if ( var_7 <= 4000000 ) { self vehicle_setspeed( 0, 12.5, 250 ); self.isobstructed = 1; return; } if ( var_7 <= 9000000 ) { self vehicle_setspeed( 10, 12.5, 250 ); self.isobstructed = 1; return; } if ( isdefined( self.isobstructed ) && var_2 < 5 ) { if ( !var_0 ) { if ( var_1 ) self resumespeed( 10 ); } self.isobstructed = undefined; return; } self.isobstructed = undefined; return; return; return; } else if ( isdefined( self.isobstructed ) && var_2 < 5 ) { if ( !var_0 ) { if ( var_1 ) self resumespeed( 10 ); } self.isobstructed = undefined; } else self.isobstructed = undefined; } generic_gaz_dynamic_path_spawner_setup() { maps\_utility::array_spawn_function_noteworthy( "generic_gaz_dynamic_path_spawner", ::gaz_spawn_setup ); maps\_utility::array_spawn_function_noteworthy( "generic_gaz_dynamic_path_spawner", ::generic_spawn_node_based_enemy_gaz ); } generic_gaz_spawner_setup() { maps\_utility::array_spawn_function_noteworthy( "generic_gaz_spawner", ::gaz_spawn_setup ); } generic_spawn_node_based_enemy_gaz() { var_0 = self.spawner common_scripts\utility::get_linked_vehicle_node(); self.origin = var_0.origin; wait 0.05; thread nav_mesh_pathing( var_0.pos_info.nodes_start[0] ); } gaz_spawn_setup() { thread target_settings(); thread gaz_kill(); thread gaz_damage_watcher(); thread add_to_enemygazs_until_dead(); thread call_trigger_kill_gazs(); if ( isdefined( self.targetname ) && issubstr( self.targetname, "complex" ) ) self vehicle_setspeed( 60, 25, 25 ); self.numwaits = 0; } gaz_relative_speed( var_0, var_1 ) { self endon( "death" ); var_2 = self; if ( !isdefined( var_0 ) || var_0 == "" ) level.alliedtanktarget = level.player; else { var_3 = common_scripts\utility::getstruct( var_0, "targetname" ); level.alliedtanktarget = var_3; } if ( isdefined( var_1 ) ) thread gaz_relative_speed_stop( var_2, var_1 ); else var_1 = "nostopping"; var_4 = level.playertank; var_5 = squared( 6000 ); var_6 = squared( 6000 ); var_7 = squared( 1000 ); var_8 = squared( 6000 ); var_9 = var_6 - var_7; var_10 = 0.25; var_11 = undefined; while ( !common_scripts\utility::flag( var_1 ) ) { var_12 = 0; var_13 = 0; var_14 = ""; var_15 = undefined; var_16 = undefined; var_17 = undefined; var_18 = undefined; if ( !isdefined( var_2 ) ) break; if ( var_2.classname == "script_vehicle_corpse" ) break; if ( var_2.classname != "script_vehicle_corpse" && isdefined( var_2.currentnode.target ) ) var_15 = getvehiclenode( var_2.currentnode.target, "targetname" ); var_17 = distance2dsquared( level.alliedtanktarget.origin, var_2.origin ); var_18 = distance2dsquared( level.alliedtanktarget.origin, var_4.origin ); var_19 = 0; if ( var_17 < var_18 ) var_19 = 1; if ( !isdefined( var_16 ) ) var_16 = distance2dsquared( var_4.origin, var_2.origin ); else { var_20 = distance2dsquared( var_4.origin, var_2.origin ); if ( var_20 < var_16 ) var_16 = var_20; } var_21 = undefined; if ( var_2.classname != "script_vehicle_corpse" ) { if ( var_16 >= var_5 && var_19 ) { if ( var_16 < var_8 ) var_21 = 20; } else if ( var_19 ) { var_22 = clamp( var_16, var_7, var_6 ); var_23 = 1 - ( var_22 - var_7 ) / var_9; var_21 = 20 + 65 * var_23; } else var_21 = 85; if ( isdefined( var_21 ) ) { var_24 = undefined; if ( isdefined( var_11 ) ) var_24 = abs( var_21 - var_11 ) / max( var_11, 0.001 ); if ( !isdefined( var_11 ) || isdefined( var_24 ) && var_24 > 0.1 ) { var_2 vehicle_setspeed( var_21, 25, 25 ); var_11 = var_21; } else if ( var_21 == 85 ) { var_2 vehicle_setspeed( var_21, 25, 25 ); var_11 = var_21; } } } wait( var_10 ); } if ( isdefined( var_2 ) && var_2.classname != "script_vehicle_corpse" ) var_2 resumespeed( 25 ); } gaz_relative_speed_stop( var_0, var_1 ) { common_scripts\utility::flag_wait( var_1 ); if ( isdefined( var_0 ) && var_0.classname != "script_vehicle_corpse" ) var_0 resumespeed( 25 ); } add_to_enemygazs_until_dead() { level.enemygazs = common_scripts\utility::array_add( level.enemygazs, self ); self waittill( "death" ); if ( isdefined( self ) ) level.enemygazs = common_scripts\utility::array_remove( level.enemygazs, self ); } gaz_damage_watcher() { self endon( "death" ); for (;;) { self waittill( "damage", var_0, var_1, var_2, var_3, var_4 ); if ( isdefined( var_4 ) ) { var_4 = tolower( var_4 ); if ( var_4 == "mod_projectile" || var_4 == "mod_projectile_splash" ) { if ( var_0 > 150 ) self kill(); } } } } gaz_kill() { self waittill( "death" ); if ( isdefined( self ) ) thread common_scripts\utility::play_sound_in_space( "satf_tank_death_player", self.origin ); if ( isdefined( self ) && !isdefined( self.iscrushing ) ) { self setcontents( 0 ); self.isexploding = 1; wait( randomfloatrange( 0.25, 1.0 ) ); if ( isdefined( self ) ) { playfx( level._effect["vehicle_explosion_t90_cheap"], self.origin ); if ( isdefined( self.script_team ) && self.script_team == "allies" ) level thread maps\satfarm_audio::tank_death_allies( self.origin ); else level thread maps\satfarm_audio::tank_death_player( self.origin ); wait 0.05; if ( isdefined( self ) ) self delete(); } } } gaz_crushable_setup() { var_0 = getentarray( "gaz_crush_trigger", "targetname" ); common_scripts\utility::array_thread( var_0, ::gaz_crush_trigger_wait ); } gaz_crush_trigger_wait() { var_0 = getent( self.target, "targetname" ); var_1 = getentarray( var_0.target, "targetname" ); var_2 = undefined; foreach ( var_4 in var_1 ) { if ( isdefined( var_4.script_parameters ) && var_4.script_parameters == "gaz_crush_vehicle_clip" ) continue; var_2 = var_4; } self waittill( "trigger" ); var_0 crush_mobile_gaz(); } call_trigger_kill_gazs() { thread trigger_kill_gazs( level.playertank ); thread trigger_kill_gazs( level.player ); foreach ( var_1 in level.allytanks ) { if ( isdefined( var_1 ) ) thread trigger_kill_gazs( var_1 ); } } trigger_kill_gazs( var_0 ) { self endon( "Death" ); var_0 endon( "Death" ); maps\_utility::waittill_entity_in_range( var_0, 420 ); common_scripts\utility::waitframe(); if ( isdefined( self ) && isalive( self ) && isdefined( var_0 ) && isalive( var_0 ) ) { if ( isdefined( self ) && !isdefined( self.isexploding ) ) { self.iscrushing = 1; thread crush_mobile_gaz(); } } } crush_mobile_gaz() { if ( isdefined( self.riders ) ) { foreach ( var_1 in self.riders ) { if ( isdefined( var_1 ) && isalive( var_1 ) ) var_1 kill(); } } var_3 = getent( "gaz_crush_clip", "targetname" ); var_4 = maps\_utility::spawn_anim_model( "gaz_crush", self.origin ); var_4.angles = self.angles; var_5 = spawn( "script_model", self.origin ); var_5 clonebrushmodeltoscriptmodel( var_3 ); var_5.angles = self.angles; if ( isdefined( level.animgaz ) && level.animgaz == self ) level.animgaz = var_4; self delete(); playfx( level._effect["gazexplode"], var_4.origin + ( 0, 0, 16 ), anglestoforward( var_4.angles ), ( 180, 0, 0 ) ); playfx( level._effect["gazsmfire"], var_4.origin + ( 0, 0, 16 ), anglestoforward( var_4.angles ), ( 180, 0, 0 ) ); level thread maps\satfarm_audio::gaz_crush( var_4.origin ); playfx( common_scripts\utility::getfx( "vfx_sparks_met_dbr" ), var_4.origin + ( 0, 0, 16 ), ( 180, 0, 0 ), ( 180, 0, 0 ) ); radiusdamage( var_4.origin + ( 0, 0, 32 ), 500, 400, 400 ); var_5 movez( -16, 0.25 ); var_4 maps\_anim::anim_first_frame_solo( var_4, "frontfull" ); if ( isdefined( level.animgaz ) && level.animgaz == var_4 ) var_5 delete(); else { var_4 thread crush_front_gaz(); var_4 thread crush_rear_gaz(); } } crush_front_gaz() { var_0 = spawn( "trigger_radius", self gettagorigin( "tag_engine_left" ), 16, 16, 128 ); var_0 waittill( "trigger", var_1 ); self setanim( %satfarm_bridge_gaz_crush_front_additive, 1 ); if ( var_1 == level.playertank ) { if ( !common_scripts\utility::flag( "aud_exfil" ) ) self playsound( "satf_debris_crush_plr" ); else self playsound( "satf_debris_crush_plr_small" ); } playfx( common_scripts\utility::getfx( "vfx_sparks_met_dbr" ), self.origin + ( 0, 0, 16 ), ( 180, 0, 0 ), ( 180, 0, 0 ) ); wait 1; var_0 delete(); } crush_rear_gaz() { var_0 = spawn( "trigger_radius", self gettagorigin( "tag_guy_turret" ), 16, 16, 128 ); var_0 waittill( "trigger", var_1 ); self setanim( %satfarm_bridge_gaz_crush_rear_additive, 1 ); if ( var_1 == level.playertank ) { if ( !common_scripts\utility::flag( "aud_exfil" ) ) self playsound( "satf_debris_crush_plr" ); else self playsound( "satf_debris_crush_plr_small" ); } playfx( common_scripts\utility::getfx( "vfx_sparks_met_dbr" ), self.origin + ( 0, 0, 16 ), ( 180, 0, 0 ), ( 180, 0, 0 ) ); wait 1; var_0 delete(); } setup_satfarm_chainlink_fence_triggers() { var_0 = getentarray( "satfarm_chainlink_fence_trigger", "targetname" ); foreach ( var_2 in var_0 ) { var_2 thread satfarm_chainlink_fence_trigger_animate(); iprintlnbold( "AUDIOTEST fence" ); } } satfarm_chainlink_fence_trigger_animate() { var_0 = getent( self.target, "targetname" ); var_0 setcontents( 0 ); self waittill( "trigger", var_1 ); var_2 = 64.0; var_3 = var_1 vehicle_getvelocity(); var_4 = vectordot( var_3, anglestoforward( var_0.angles ) ); if ( var_4 != 0.0 ) { var_5 = var_2 / abs( var_4 ); if ( var_4 > 0 ) var_0 rotatepitch( 90, var_5 ); else var_0 rotatepitch( -90, var_5 ); } } spawn_player_checkpoint( var_0, var_1 ) { if ( !isdefined( var_1 ) ) var_1 = undefined; level.allytanks = []; level.herotanks = []; level.othertanks = []; level.enemytanks = []; level.enemygazs = []; if ( var_0 == "air_strip_secured" || var_0 == "tower" || var_0 == "post_missile_launch" || var_0 == "warehouse" ) { var_2 = common_scripts\utility::getstruct( var_0 + "_player", "targetname" ); level.player setorigin( var_2.origin ); level.player setplayerangles( var_2.angles ); } else { if ( var_0 == "bridge_deploy" || var_0 == "ride_" ) level.playertank = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( var_0 + "playertank" ); else level.playertank = maps\_vehicle::spawn_vehicle_from_targetname( var_0 + "playertank" ); if ( var_0 == "bridge_" ) { level.player finish_zoom(); level.player.tank = level.playertank; level.playertank.driver = level.player; level.playertank notify( "nodeath_thread" ); level.playertank maps\_vehicle::godon(); level.lock_on = 0; level.player.script_team = "allies"; level.player thread init_chatter(); if ( isdefined( var_1 ) ) common_scripts\utility::flag_wait( var_1 ); level.playertank mount_tank( level.player, 1, 0.5, undefined, undefined, 8 ); return; } if ( var_0 != "ride_" ) { level.player.tank = level.playertank; level.playertank.driver = level.player; level.playertank notify( "nodeath_thread" ); level.playertank maps\_vehicle::godon(); level.lock_on = 0; level.player.script_team = "allies"; level.player thread init_chatter(); thread init_tank( level.playertank, level.player, var_1 ); } } } spawn_heroes_checkpoint( var_0 ) { level.herotanks[0] = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( var_0 + "hero0" ); level.bobcat = level.herotanks[0]; level.herotanks[1] = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( var_0 + "hero1" ); level.badger = level.herotanks[1]; level.allytanks = common_scripts\utility::array_combine( level.allytanks, level.herotanks ); } spawn_node_based_enemy_tanks_targetname( var_0 ) { var_1 = getentarray( var_0, "targetname" ); var_2 = []; foreach ( var_4 in var_1 ) { var_5 = var_4 spawn_node_based_enemy_tank(); var_2 = common_scripts\utility::add_to_array( var_2, var_5 ); } return var_2; } spawn_node_based_enemy_tank() { var_0 = self; var_1 = var_0 common_scripts\utility::get_linked_vehicle_node(); var_2 = maps\_vehicle::vehicle_spawn( var_0 ); var_2.origin = var_1.origin; var_2 thread init_tank_enemy_loc( var_1.pos_info.nodes_start[0] ); return var_2; } init_tank_enemy_loc( var_0 ) { self.exitnodename = "defend_exit_node"; thread npc_tank_combat_init( 1 ); thread nav_mesh_pathing( var_0 ); } waittilltanksdead( var_0, var_1, var_2, var_3 ) { var_4 = 0; if ( !isdefined( var_0 ) ) return 1; if ( !isdefined( var_1 ) || var_1 == 0 ) var_1 = var_0.size; var_5 = spawnstruct(); if ( isdefined( var_2 ) && var_2 != 0 ) { var_5 endon( "thread_timed_out" ); var_5 thread maps\_utility::waittill_dead_timeout( var_2 ); } if ( !isdefined( var_3 ) ) { while ( var_0.size && var_1 > var_4 ) { foreach ( var_7 in var_0 ) { if ( isdefined( var_7 ) && var_7.classname == "script_vehicle_corpse" ) { var_0 = common_scripts\utility::array_remove( var_0, var_7 ); var_4++; continue; } if ( !isdefined( var_7 ) ) { var_0 = common_scripts\utility::array_remove( var_0, var_7 ); var_4++; } } wait 0.05; } } else { while ( var_0.size && var_1 > var_4 && !common_scripts\utility::flag( var_3 ) ) { foreach ( var_7 in var_0 ) { if ( isdefined( var_7 ) && var_7.classname == "script_vehicle_corpse" ) { var_0 = common_scripts\utility::array_remove( var_0, var_7 ); var_4++; continue; } if ( !isdefined( var_7 ) ) { var_0 = common_scripts\utility::array_remove( var_0, var_7 ); var_4++; } } wait 0.05; } } return 1; } waittillhelisdead( var_0, var_1, var_2, var_3 ) { if ( !isdefined( var_0 ) ) return 1; var_0 = maps\_utility::array_removedead( var_0 ); if ( var_0.size > 0 ) { var_4 = spawnstruct(); if ( isdefined( var_2 ) && var_2 != 0 ) { var_4 endon( "thread_timed_out" ); var_4 thread maps\_utility::waittill_dead_timeout( var_2 ); } var_4.count = var_0.size; if ( isdefined( var_1 ) && var_1 < var_4.count ) var_4.count = var_1; common_scripts\utility::array_thread( var_0, maps\_utility::waittill_dead_thread, var_4 ); if ( isdefined( var_3 ) ) { while ( var_4.count > 0 && !common_scripts\utility::flag( var_3 ) ) wait 0.05; } else { while ( var_4.count > 0 ) var_4 waittill( "waittill_dead guy died" ); } } return 1; } radio_dialog_add_and_go( var_0, var_1, var_2 ) { maps\_utility::radio_add( var_0 ); if ( isdefined( var_2 ) && var_2 == 1 ) maps\_utility::radio_dialogue_overlap( var_0 ); else maps\_utility::radio_dialogue( var_0, var_1 ); } char_dialog_add_and_go( var_0 ) { level.scr_sound[self.animname][var_0] = var_0; maps\_utility::dialogue_queue( var_0 ); } istank() { if ( issubstr( self.classname, "t90" ) ) return 1; if ( issubstr( self.classname, "t72" ) ) return 1; if ( issubstr( self.classname, "m1a1" ) ) return 1; if ( issubstr( self.classname, "m1a2" ) ) return 1; return 0; } clean_tank_array( var_0 ) { var_0 = common_scripts\utility::array_removeundefined( var_0 ); foreach ( var_2 in var_0 ) { if ( var_2.classname == "script_vehicle_corpse" ) var_0 = common_scripts\utility::array_remove( var_0, var_2 ); } return var_0; } disable_arrivals_and_exits( var_0 ) { if ( !isdefined( var_0 ) ) var_0 = 1; self.disablearrivals = var_0; self.disableexits = var_0; } switch_node_on_flag( var_0, var_1, var_2, var_3 ) { var_0 endon( "death" ); if ( isdefined( var_1 ) && var_1 != "" ) common_scripts\utility::flag_wait( var_1 ); var_4 = getvehiclenode( var_2, "targetname" ); var_5 = getvehiclenode( var_3, "targetname" ); if ( !isdefined( var_4 ) ) return; if ( !isdefined( var_5 ) ) return; common_scripts\utility::flag_wait( var_4.script_flag_set ); var_0.attachedpath = undefined; var_0 notify( "newpath" ); var_0 thread maps\_vehicle::vehicle_paths( var_5 ); var_0 startpath( var_5 ); var_0 vehicle_setspeed( 45, 30, 30 ); var_0 resumespeed( 30 ); } switch_node( var_0, var_1, var_2 ) { var_0 endon( "death" ); if ( !isdefined( var_1 ) ) return; if ( !isdefined( var_2 ) ) return; common_scripts\utility::flag_wait( var_1.script_flag_set ); var_0.attachedpath = undefined; var_0 notify( "newpath" ); var_0 thread maps\_vehicle::vehicle_paths( var_2 ); var_0 startpath( var_2 ); var_0 vehicle_setspeed( 45, 30, 30 ); var_0 resumespeed( 30 ); } switch_node_now( var_0, var_1 ) { var_0 endon( "death" ); if ( !isdefined( var_1 ) ) return; var_0.attachedpath = undefined; var_0 notify( "newpath" ); var_0 thread maps\_vehicle::vehicle_paths( var_1 ); var_0 startpath( var_1 ); } switch_node_now_heli( var_0, var_1 ) { var_0 endon( "death" ); if ( !isdefined( var_1 ) ) return; var_0 maps\_utility::vehicle_detachfrompath(); var_0.currentnode = var_1; var_0 maps\_utility::vehicle_resumepath(); } toggle_thermal() { level.player endon( "tank_dismount" ); level.player endon( "thermal_off" ); level.player endon( "missile_tank_dismount" ); level.player notifyonplayercommand( "thermal", "+usereload" ); level.player notifyonplayercommand( "thermal", "+activate" ); while ( !common_scripts\utility::flag( "thermal_out" ) ) { level.player waittill( "thermal" ); uav_thermal_on(); level thread maps\satfarm_audio::thermal(); thread thermal_hint(); wait 1; level.player waittill( "thermal" ); uav_thermal_off(); wait 1; } } thermal_hint() { level.player endon( "thermal_off" ); level.playertank endon( "death" ); level.player endon( "tank_dismount" ); level.player endon( "missile_tank_dismount" ); wait 5; level.player maps\_utility::display_hint_timeout( "HINT_TOGGLE_THERMAL", 8.0 ); } toggle_thermal_npc() { level.player endon( "tank_dismount" ); self endon( "Death" ); level.player notifyonplayercommand( "thermal", "+usereload" ); if ( isdefined( level.player.is_in_thermal_vision ) && level.player.is_in_thermal_vision ) { self thermaldrawenable(); if ( isdefined( self.script_team ) && self.script_team == "allies" ) thread ally_strobe(); } while ( isdefined( self ) && self.classname != "script_vehicle_corpse" ) { level.player waittill( "thermal" ); wait 0.05; if ( isdefined( level.player.is_in_thermal_vision ) && level.player.is_in_thermal_vision ) { if ( isdefined( self ) && self.classname != "script_vehicle_corpse" ) { self thermaldrawenable(); if ( isdefined( self.script_team ) && self.script_team == "allies" ) thread ally_strobe(); } continue; } if ( isdefined( self ) && self.classname != "script_vehicle_corpse" ) self thermaldrawdisable(); level notify( "thermal_fx_off" ); } if ( isdefined( self ) ) self thermaldrawdisable(); } ally_strobe() { level endon( "thermal_fx_off" ); level.player endon( "tank_dismount" ); level.player endon( "missile_tank_dismount" ); level.player endon( "remove_player_missile_control" ); self endon( "death" ); if ( !isdefined( self.reflector_tag ) ) { self.reflector_tag = common_scripts\utility::spawn_tag_origin(); self.reflector_tag linkto( self, "tag_origin", ( 0, 0, 150 ), ( 0, 0, 0 ) ); } while ( isdefined( self ) && isdefined( self.reflector_tag ) && self.model != "vehicle_t90ms_tank_d_noturret_iw6" ) { playfxontag( level.friendly_thermal_reflector_effect, self.reflector_tag, "tag_origin" ); wait 0.2; } } uav_thermal_on( var_0, var_1 ) { if ( !isdefined( var_1 ) ) var_1 = "ac130_inverted"; setthermalbodymaterial( "thermalbody_snowlevel" ); if ( isdefined( var_0 ) ) self visionsetthermalforplayer( var_1, var_0 ); else self visionsetthermalforplayer( var_1, 0.25 ); maps\_load::thermal_effectson(); self thermalvisionon(); common_scripts\utility::flag_set( "PLAYER_TURNED_ON_THERMAL_ONCE" ); common_scripts\utility::flag_set( "THERMAL_ON" ); } uav_thermal_off() { maps\_load::thermal_effectsoff(); self thermalvisionoff(); common_scripts\utility::flag_clear( "THERMAL_ON" ); } tank_thermal_effects( var_0, var_1 ) { level endon( "thermal_fx_off" + var_0 ); self endon( "death" ); for (;;) { if ( isdefined( var_1 ) ) playfxontagforclients( level.friendly_thermal_reflector_effect, self, "tag_turret", var_1 ); else playfxontag( level.friendly_thermal_reflector_effect, self, "tag_turret" ); wait 0.2; } } enemytank_cleanup() { self endon( "death" ); while ( !isdefined( level.cinematic_started ) ) wait 0.05; if ( isdefined( self ) && isalive( self ) ) self delete(); } flag_wait_god_mode_off( var_0 ) { common_scripts\utility::flag_wait( var_0 ); if ( isdefined( self ) && isalive( self ) ) maps\_vehicle::godoff(); } crawling_guys_spawnfunc() { thread detectkill(); maps\_utility::gun_remove(); self.health = 1; self.ignoreexplosionevents = 1; self.ignoreme = 1; self.ignoreall = 1; self.ignorerandombulletdamage = 1; self.grenadeawareness = 0; self.no_pain_sound = 1; self.noragdoll = 1; self.a.nodeath = 1; self.health = 2; var_0 = randomintrange( 4, 10 ); var_1 = common_scripts\utility::ter_op( randomint( 2 ), level.scr_anim["crawl_death_1"], level.scr_anim["crawl_death_2"] ); maps\_utility::force_crawling_death( self.spawner.angles[1], var_0, var_1, 1 ); self dodamage( 1, self.origin, level.player ); } limping_guys_spawnfunc() { self endon( "death" ); thread detectkill(); self.ignoreexplosionevents = 1; self.ignoreall = 1; self.ignorerandombulletdamage = 1; self.grenadeawareness = 0; self.health = 1; self.animname = "wounded_ai"; disable_arrivals_and_exits( 1 ); if ( common_scripts\utility::cointoss() ) { maps\_utility::set_run_anim( "wounded_limp_jog", 1 ); self.moveplaybackrate = randomfloatrange( 0.8, 1.0 ); } else { maps\_utility::set_run_anim( "wounded_limp_run", 1 ); self.moveplaybackrate = randomfloatrange( 0.8, 1.0 ); } self waittill( "goal" ); if ( isdefined( self ) && isalive( self ) ) self kill(); } delayed_show( var_0 ) { wait( var_0 ); self show(); } delayed_kill( var_0, var_1 ) { self endon( "death" ); if ( isdefined( var_1 ) ) common_scripts\utility::flag_wait( var_1 ); wait( var_0 ); if ( isdefined( self ) ) { if ( istank() ) thread handle_tank_death(); else self kill(); } } random_wait_and_kill( var_0, var_1 ) { self endon( "death" ); wait( randomfloatrange( var_0, var_1 ) ); if ( isdefined( self ) ) thread handle_tank_death(); } flag_wait_delete( var_0 ) { common_scripts\utility::flag_wait( var_0 ); if ( isdefined( self ) ) self delete(); } delete_all_vehicles() { var_0 = vehicle_getarray(); foreach ( var_2 in var_0 ) var_2 delete(); } mortar_fire_on_struct( var_0, var_1 ) { var_2 = common_scripts\utility::spawn_tag_origin(); var_2.origin = var_0.origin; var_2.angles = ( -90, 0, 0 ); thread common_scripts\utility::play_sound_in_space( "satf_mortar_incoming", var_2.origin ); wait( randomfloatrange( 0.25, 0.45 ) ); playfxontag( common_scripts\utility::getfx( "mortar" ), var_2, "tag_origin" ); if ( isdefined( var_1 ) ) radiusdamage( var_2.origin, 170, 500, 250 ); earthquake( 0.2, 0.5, level.player.origin, 512 ); thread common_scripts\utility::play_sound_in_space( "satf_mortar_explosion_dirt", var_2.origin ); wait( randomfloatrange( 0.25, 0.45 ) ); var_2 delete(); } get_a10_player_start() { var_0 = common_scripts\utility::getstruct( "a10_player_start", "targetname" ); return var_0; } init_sabot_for_player( var_0, var_1, var_2 ) { if ( isdefined( level.missile ) ) level.missile delete(); level.missile = common_scripts\utility::spawn_tag_origin(); level.missile.origin = var_0; level.missile.angles = var_1; level.missile.speed = 175; level.missile.acceleration = 200; level.missile.deceleration = 10; level.missile.launch_speed = 200; level.missile.launch_delay = 0.0; level.missile.pitch_max = 180; level.missile.pitch_speed_max = 25; level.missile.yaw_speed_max = 55; level.missile.mph_to_ips = 17.6; level.missile.fov = 100; level.missile.acceleration_fov = 75; level.missile.weap = "sabot_guided"; level.missile.weap_detonate = "sabot_guided_detonate"; level.missile.lifetime = 5; level.missile.tank = var_2; } init_bunker_buster_missile_for_player( var_0, var_1 ) { if ( isdefined( level.missile ) ) level.missile delete(); level.missile = common_scripts\utility::spawn_tag_origin(); level.missile.origin = var_0; level.missile.angles = var_1; level.missile.speed = 250; level.missile.acceleration = 250; level.missile.launch_speed = 250; level.missile.launch_delay = 0.0; level.missile.pitch_max = 180; level.missile.pitch_speed_max = 15; level.missile.yaw_speed_max = 15; level.missile.mph_to_ips = 17.6; level.missile.fov = 100; level.missile.weap = undefined; level.missile.weap_detonate = undefined; level.missile.lifetime = undefined; level.missile.tank = undefined; } give_player_missile_control() { self notify( "give_player_missile_control" ); self endon( "give_player_missile_control" ); self endon( "remove_player_missile_control" ); common_scripts\utility::flag_set( "PLAYER_GUIDING_ROUND" ); if ( level.player usinggamepad() ) level.player thread maps\_utility::display_hint_timeout( "HINT_GUIDED_ROUND_GUIDING", 8.0 ); else { var_0 = 1; var_1 = 0; var_2 = getkeybinding( "+speed_throw" ); if ( !isdefined( var_2 ) || var_2["count"] == 0 ) { var_0 = 0; var_2 = getkeybinding( "+toggleads_throw" ); if ( isdefined( var_2 ) && var_2["count"] > 0 ) var_1 = 1; } if ( var_0 ) level.player thread maps\_utility::display_hint_timeout( "HINT_GUIDED_ROUND_GUIDING", 8.0 ); else level.player thread maps\_utility::display_hint_timeout( "HINT_GUIDED_ROUND_GUIDING_TOGGLEADS_THROW", 8.0 ); } self.prev_angles = self getplayerangles(); self.was_in_thermal = self.is_in_thermal_vision; if ( isdefined( level.missile.tank ) ) level.missile.tank dismount_tank( self, 0, 0, 1 ); self setstance( "stand" ); self allowprone( 0 ); self allowcrouch( 0 ); self allowstand( 1 ); self allowads( 0 ); self hideviewmodel(); self disableweaponswitch(); self disableoffhandweapons(); self enableinvulnerability(); setsaveddvar( "cg_fov", level.missile.fov ); setsaveddvar( "ammoCounterHide", "1" ); setsaveddvar( "actionSlotsHide", "1" ); setsaveddvar( "hud_showStance", "0" ); self disableweapons(); self setorigin( level.missile.origin ); self setplayerangles( level.missile.angles ); self playerlinktodelta( level.missile, "tag_origin", 1, 0, 0, 0, 0, 1 ); self playerlinkedoffsetenable(); level.missile.missile_hud_item["static"] = newhudelem(); level.missile.missile_hud_item["static"].hidewheninmenu = 1; level.missile.missile_hud_item["static"].hidewhendead = 1; level.missile.missile_hud_item["static"] setshader( "overlay_static", 640, 480 ); level.missile.missile_hud_item["static"].alignx = "left"; level.missile.missile_hud_item["static"].aligny = "top"; level.missile.missile_hud_item["static"].horzalign = "fullscreen"; level.missile.missile_hud_item["static"].vertalign = "fullscreen"; level.missile.missile_hud_item["static"].alpha = 0.25; level.missile.missile_hud_item["overlay"] = newhudelem(); level.missile.missile_hud_item["overlay"].hidewheninmenu = 1; level.missile.missile_hud_item["overlay"].hidewhendead = 1; level.missile.missile_hud_item["overlay"] setshader( "ugv_screen_overlay", 640, 480 ); level.missile.missile_hud_item["overlay"].alignx = "left"; level.missile.missile_hud_item["overlay"].aligny = "top"; level.missile.missile_hud_item["overlay"].horzalign = "fullscreen"; level.missile.missile_hud_item["overlay"].vertalign = "fullscreen"; level.missile.missile_hud_item["overlay"].alpha = 0.75; level.missile.missile_hud_item["vignette"] = newhudelem(); level.missile.missile_hud_item["vignette"].hidewheninmenu = 1; level.missile.missile_hud_item["vignette"].hidewhendead = 1; level.missile.missile_hud_item["vignette"] setshader( "ugv_vignette_overlay", 640, 480 ); level.missile.missile_hud_item["vignette"].alignx = "left"; level.missile.missile_hud_item["vignette"].aligny = "top"; level.missile.missile_hud_item["vignette"].horzalign = "fullscreen"; level.missile.missile_hud_item["vignette"].vertalign = "fullscreen"; level.missile.missile_hud_item["vignette"].alpha = 0.5; level.missile.missile_hud_item["scanline"] = newhudelem(); level.missile.missile_hud_item["scanline"].hidewheninmenu = 1; level.missile.missile_hud_item["scanline"].hidewhendead = 1; level.missile.missile_hud_item["scanline"] setshader( "m1a1_tank_sabot_scanline", 1000, 75 ); level.missile.missile_hud_item["scanline"].alignx = "center"; level.missile.missile_hud_item["scanline"].aligny = "middle"; level.missile.missile_hud_item["scanline"].horzalign = "center"; level.missile.missile_hud_item["scanline"].vertalign = "middle"; level.missile.missile_hud_item["scanline"].alpha = 0.75; level.missile.missile_hud_item["scanline"] thread missile_update_scanline(); level.missile.missile_hud_item["sabot_reticle"] = maps\_hud_util::createicon( "m1a1_tank_sabot_reticle_center", 25, 25 ); level.missile.missile_hud_item["sabot_reticle"] set_default_hud_parameters(); level.missile.missile_hud_item["sabot_reticle"].alignx = "center"; level.missile.missile_hud_item["sabot_reticle"].aligny = "middle"; level.missile.missile_hud_item["sabot_reticle"].alpha = 0.666; level.missile.missile_hud_item["sabot_reticle_cyan"] = maps\_hud_util::createicon( "m1a1_tank_sabot_reticle_center_cyan", 25, 25 ); level.missile.missile_hud_item["sabot_reticle_cyan"] set_default_hud_parameters(); level.missile.missile_hud_item["sabot_reticle_cyan"].alignx = "center"; level.missile.missile_hud_item["sabot_reticle_cyan"].aligny = "middle"; level.missile.missile_hud_item["sabot_reticle_cyan"].alpha = 0.0; level.missile.missile_hud_item["sabot_reticle_red"] = maps\_hud_util::createicon( "m1a1_tank_sabot_reticle_center_red", 25, 25 ); level.missile.missile_hud_item["sabot_reticle_red"] set_default_hud_parameters(); level.missile.missile_hud_item["sabot_reticle_red"].alignx = "center"; level.missile.missile_hud_item["sabot_reticle_red"].aligny = "middle"; level.missile.missile_hud_item["sabot_reticle_red"].alpha = 0.0; level.missile.missile_hud_item["sabot_reticle_upper_left"] = maps\_hud_util::createicon( "m1a1_tank_missile_reticle_inner_top_left", 20, 20 ); level.missile.missile_hud_item["sabot_reticle_upper_left"] set_default_hud_parameters(); level.missile.missile_hud_item["sabot_reticle_upper_left"].alignx = "center"; level.missile.missile_hud_item["sabot_reticle_upper_left"].aligny = "middle"; level.missile.missile_hud_item["sabot_reticle_upper_left"].x = level.missile.missile_hud_item["sabot_reticle"].width * -2.5; level.missile.missile_hud_item["sabot_reticle_upper_left"].y = level.missile.missile_hud_item["sabot_reticle"].height * -1; level.missile.missile_hud_item["sabot_reticle_upper_left"].alpha = 0.666; level.missile.missile_hud_item["sabot_reticle_upper_right"] = maps\_hud_util::createicon( "m1a1_tank_missile_reticle_inner_top_right", 20, 20 ); level.missile.missile_hud_item["sabot_reticle_upper_right"] set_default_hud_parameters(); level.missile.missile_hud_item["sabot_reticle_upper_right"].alignx = "center"; level.missile.missile_hud_item["sabot_reticle_upper_right"].aligny = "middle"; level.missile.missile_hud_item["sabot_reticle_upper_right"].x = level.missile.missile_hud_item["sabot_reticle"].width * 2.5; level.missile.missile_hud_item["sabot_reticle_upper_right"].y = level.missile.missile_hud_item["sabot_reticle"].height * -1; level.missile.missile_hud_item["sabot_reticle_upper_right"].alpha = 0.666; level.missile.missile_hud_item["sabot_reticle_bottom_left"] = maps\_hud_util::createicon( "m1a1_tank_missile_reticle_inner_bottom_left", 20, 20 ); level.missile.missile_hud_item["sabot_reticle_bottom_left"] set_default_hud_parameters(); level.missile.missile_hud_item["sabot_reticle_bottom_left"].alignx = "center"; level.missile.missile_hud_item["sabot_reticle_bottom_left"].aligny = "middle"; level.missile.missile_hud_item["sabot_reticle_bottom_left"].x = level.missile.missile_hud_item["sabot_reticle"].width * -2.5; level.missile.missile_hud_item["sabot_reticle_bottom_left"].y = level.missile.missile_hud_item["sabot_reticle"].height * 1; level.missile.missile_hud_item["sabot_reticle_bottom_left"].alpha = 0.666; level.missile.missile_hud_item["sabot_reticle_bottom_right"] = maps\_hud_util::createicon( "m1a1_tank_missile_reticle_inner_bottom_right", 20, 20 ); level.missile.missile_hud_item["sabot_reticle_bottom_right"] set_default_hud_parameters(); level.missile.missile_hud_item["sabot_reticle_bottom_right"].alignx = "center"; level.missile.missile_hud_item["sabot_reticle_bottom_right"].aligny = "middle"; level.missile.missile_hud_item["sabot_reticle_bottom_right"].x = level.missile.missile_hud_item["sabot_reticle"].width * 2.5; level.missile.missile_hud_item["sabot_reticle_bottom_right"].y = level.missile.missile_hud_item["sabot_reticle"].height * 1; level.missile.missile_hud_item["sabot_reticle_bottom_right"].alpha = 0.666; level.missile.missile_hud_item["sabot_fuel_range_bracket"] = maps\_hud_util::createicon( "m1a1_tank_sabot_fuel_range_horizontal", int( level.missile.missile_hud_item["sabot_reticle"].width * 4 ), int( level.missile.missile_hud_item["sabot_reticle"].width * 4 * 0.25 ) ); level.missile.missile_hud_item["sabot_fuel_range_bracket"] set_default_hud_parameters(); level.missile.missile_hud_item["sabot_fuel_range_bracket"].alignx = "center"; level.missile.missile_hud_item["sabot_fuel_range_bracket"].aligny = "bottom"; level.missile.missile_hud_item["sabot_fuel_range_bracket"].y = level.missile.missile_hud_item["sabot_reticle"].height * -3; level.missile.missile_hud_item["sabot_fuel_range_bracket"].alpha = 0.666; level.missile.missile_hud_item["sabot_fuel_range_bar"] = maps\_hud_util::createicon( "red_block", int( level.missile.missile_hud_item["sabot_fuel_range_bracket"].width * 0.625 ), int( level.missile.missile_hud_item["sabot_fuel_range_bracket"].height * 0.32 ) ); level.missile.missile_hud_item["sabot_fuel_range_bar"] set_default_hud_parameters(); level.missile.missile_hud_item["sabot_fuel_range_bar"].alignx = "left"; level.missile.missile_hud_item["sabot_fuel_range_bar"].aligny = "middle"; level.missile.missile_hud_item["sabot_fuel_range_bar"].x = level.missile.missile_hud_item["sabot_fuel_range_bar"].width * -0.5 - 1; level.missile.missile_hud_item["sabot_fuel_range_bar"].y = level.missile.missile_hud_item["sabot_fuel_range_bracket"].y - level.missile.missile_hud_item["sabot_fuel_range_bracket"].height * 0.38; level.missile.missile_hud_item["sabot_fuel_range_bar"].alpha = 0.666; level.missile.missile_hud_item["sabot_fuel_range_bar"].start_width = level.missile.missile_hud_item["sabot_fuel_range_bar"].width; level.missile.missile_hud_item["sabot_fuel_range_text"] = maps\_hud_util::createclientfontstring( "small", 1.0 ); level.missile.missile_hud_item["sabot_fuel_range_text"] set_default_hud_parameters(); level.missile.missile_hud_item["sabot_fuel_range_text"].alignx = "center"; level.missile.missile_hud_item["sabot_fuel_range_text"].aligny = "bottom"; level.missile.missile_hud_item["sabot_fuel_range_text"].alpha = 0.666; level.missile.missile_hud_item["sabot_fuel_range_text"].x = 0; level.missile.missile_hud_item["sabot_fuel_range_text"].y = level.missile.missile_hud_item["sabot_fuel_range_bracket"].y - level.missile.missile_hud_item["sabot_fuel_range_bracket"].height * 0.666; level.missile.missile_hud_item["sabot_fuel_range_text"] settext( &"SATFARM_FUEL_RANGE" ); level.missile.missile_hud_item["speed"] = maps\_hud_util::createclientfontstring( "small", 1.0 ); level.missile.missile_hud_item["speed"] set_default_hud_parameters(); level.missile.missile_hud_item["speed"].alignx = "center"; level.missile.missile_hud_item["speed"].aligny = "top"; level.missile.missile_hud_item["speed"].alpha = 0.666; level.missile.missile_hud_item["speed"].x = 0; level.missile.missile_hud_item["speed"].y = level.missile.missile_hud_item["sabot_fuel_range_bracket"].y + level.missile.missile_hud_item["sabot_fuel_range_bracket"].height * 0.666; visionsetnaked( "satfarm_sabot_view", 0 ); visionsetthermal( "satfarm_sabot_view", 0 ); level.missile thread player_missile_control( self ); if ( isdefined( self.was_in_thermal ) && self.was_in_thermal ) self notify( "thermal" ); } missile_update_scanline() { level.player endon( "remove_player_missile_control" ); while ( isdefined( self ) ) { self.y = -400; self moveovertime( 2 ); self.y = 400; wait 2; } } remove_target_on_death() { self waittill( "death" ); if ( isdefined( self ) && target_istarget( self ) ) target_remove( self ); } remove_player_missile_control() { self waittill( "remove_player_missile_control" ); common_scripts\utility::flag_set( "tow_cam_sound_off" ); remove_player_missile_control_internal(); } remove_player_missile_control_internal() { common_scripts\utility::flag_clear( "PLAYER_GUIDING_ROUND" ); self unlink(); self showviewmodel(); self setstance( "stand" ); self allowprone( 1 ); self allowcrouch( 1 ); self allowstand( 1 ); self allowads( 1 ); self thermalvisionoff(); maps\_load::thermal_effectsoff(); stopallrumbles(); if ( isdefined( level.missile ) ) { var_0 = getarraykeys( level.missile.missile_hud_item ); foreach ( var_2 in var_0 ) { level.missile.missile_hud_item[var_2] destroy(); level.missile.missile_hud_item[var_2] = undefined; } if ( isdefined( level.missile.tank ) ) { self setplayerangles( self.prev_angles ); self enableslowaim( 0, 0 ); level.missile.tank mount_tank( self, 1, 0.25, 1, 1 ); self enableslowaim( 0, 0 ); } visionsetnaked( level.default_level_vision_set, 0 ); level.missile delete(); level.missile = undefined; wait 0.25; self enableslowaim( 0.5, 0.25 ); } else { self disableinvulnerability(); setsaveddvar( "ammoCounterHide", "0" ); setsaveddvar( "actionSlotsHide", "0" ); setsaveddvar( "hud_showStance", "1" ); setsaveddvar( "cg_fov", 65 ); visionsetnaked( level.default_level_vision_set, 0 ); } level.player notify( "reenable_triggers" ); } missile_timeout( var_0 ) { var_0 endon( "give_player_missile_control" ); var_0 endon( "remove_player_missile_control" ); if ( isdefined( level.missile.tank ) ) { var_0 notifyonplayercommand( "early_det", "+attack" ); var_0 notifyonplayercommand( "early_det", "+attack_akimbo_accessible" ); } common_scripts\utility::waittill_any_timeout( self.lifetime, "early_det" ); if ( isdefined( self ) ) { var_0 notify( "missile_timeout" ); var_0 missile_explode( 1 ); } } missile_remove_blur( var_0, var_1 ) { wait( var_0 ); setblur( 0, var_1 ); } player_missile_control( var_0 ) { var_0 endon( "give_player_missile_control" ); var_0 endon( "remove_player_missile_control" ); var_1 = 0; if ( isdefined( self.max_distance ) ) var_1 = self.max_distance; thread missile_trigger_explode( var_0 ); var_0 thread missile_handle_thermal(); var_0 thread missile_handle_boost_fov_lerps( self.acceleration_fov, self.acceleration_fov * 1.5 ); var_2 = self.launch_speed; var_3 = self.lifetime; var_4 = self.launch_delay; var_5 = !isdefined( self.acceleration_fov ); var_0 enablemousesteer( 1 ); while ( isdefined( self ) ) { player_missile_yaw_control( var_0 ); player_missile_pitch_control( var_0 ); self.angles = ( self.angles[0], self.angles[1], self.angles[2] * 0.9 ); if ( var_4 <= 0 ) { if ( !var_5 ) { setblur( 10, 0 ); var_0 lerpfov( self.acceleration_fov, 0.25 ); var_5 = 1; thread missile_remove_blur( 0.05, 0.25 ); earthquake( 1, 0.25, self.origin, 500 ); self screenshakeonentity( randomfloatrange( 0.25, 0.35 ), randomfloatrange( 0.25, 0.35 ), randomfloatrange( 0.25, 0.35 ), self.lifetime, 0, 0, 100, randomfloatrange( 15, 20 ), randomfloatrange( 15, 20 ), randomfloatrange( 15, 20 ) ); var_0 playrumblelooponentity( "tank_missile" ); } if ( !var_0 adsbuttonpressed( 1 ) && var_2 > self.speed ) { var_2 = var_2 - self.acceleration * 0.05; var_2 = max( var_2, self.speed ); } else { var_2 = var_2 + self.acceleration * 0.05 * common_scripts\utility::ter_op( var_0 adsbuttonpressed( 1 ), 2, 1 ); var_2 = min( var_2, self.speed * common_scripts\utility::ter_op( var_0 adsbuttonpressed( 1 ), 1.5, 1 ) ); } } else { var_2 = var_2 - self.deceleration * 0.05; var_4 = var_4 - 0.05; } level.missile.missile_hud_item["speed"] settext( var_2 * 1.5 + " MPH" ); var_6 = self.origin + anglestoforward( self.angles ) * var_2 * self.mph_to_ips * 0.05; if ( var_4 <= 0 && isdefined( self.lifetime ) ) { var_3 = var_3 - 0.05 * var_2 / self.speed; if ( int( level.missile.missile_hud_item["sabot_fuel_range_bar"].start_width * var_3 / self.lifetime ) < 1 ) level.missile.missile_hud_item["sabot_fuel_range_bar"].alpha = 0; else level.missile.missile_hud_item["sabot_fuel_range_bar"] setshader( "red_block", int( level.missile.missile_hud_item["sabot_fuel_range_bar"].start_width * var_3 / self.lifetime ), level.missile.missile_hud_item["sabot_fuel_range_bar"].height ); } if ( common_scripts\utility::flag( "missile_out_of_bounds" ) || var_3 < 0 ) { common_scripts\utility::flag_clear( "missile_out_of_bounds" ); var_0 missile_explode( 1 ); return; } self.origin_diff = var_6 - self.origin; var_7 = bullettrace( var_0 geteye() + ( 0, 0, 10 ), var_0 geteye() + ( 0, 0, 10 ) + self.origin_diff, 0, self ); var_8 = bullettrace( var_0 geteye() - ( 0, 0, 10 ), var_0 geteye() - ( 0, 0, 10 ) + self.origin_diff, 0, self ); var_9 = bullettrace( var_0 geteye() + anglestoright( var_0 getplayerangles() ) * 10, var_0 geteye() + anglestoright( var_0 getplayerangles() ) * 10 + self.origin_diff, 0, self ); var_10 = bullettrace( var_0 geteye() - anglestoright( var_0 getplayerangles() ) * 10, var_0 geteye() - anglestoright( var_0 getplayerangles() ) * 10 + self.origin_diff, 0, self ); if ( var_7["fraction"] < 1 || var_8["fraction"] < 1 || var_9["fraction"] < 1 || var_10["fraction"] < 1 ) { var_0 missile_explode(); return; } var_11 = 0; var_12 = 0; var_13 = 0; var_14 = sortbydistance( maps\_utility::getvehiclearray(), var_0 geteye() ); foreach ( var_16 in var_14 ) { if ( !isdefined( var_16.dead ) || !var_16.dead ) { if ( !target_istarget( var_16 ) ) { if ( var_13 < 5 ) { target_set( var_16, common_scripts\utility::ter_op( var_16 maps\_vehicle::ishelicopter(), ( 0, 0, 0 ), ( 0, 0, 72 ) ) ); target_hidefromplayer( var_16, var_0 ); var_13++; } continue; } if ( target_isinrect( var_16, var_0, getdvarfloat( "cg_fov" ), 20, 20 ) && ( var_16.script_team == "allies" || sighttracepassed( var_0 geteye(), var_16.origin + ( 0, 0, 60 ), 0, self ) ) ) { if ( var_16.script_team == "axis" ) var_11 = 1; else if ( var_16.script_team == "allies" ) var_12 = 1; break; } } } if ( var_11 && level.missile.missile_hud_item["sabot_reticle_red"].alpha == 0 ) { level.missile.missile_hud_item["sabot_reticle_red"].alpha = 0.666; level.missile.missile_hud_item["sabot_reticle_cyan"].alpha = 0; level.missile.missile_hud_item["sabot_reticle"].alpha = 0; } else if ( var_12 && level.missile.missile_hud_item["sabot_reticle_cyan"].alpha == 0 ) { level.missile.missile_hud_item["sabot_reticle_cyan"].alpha = 0.666; level.missile.missile_hud_item["sabot_reticle_red"].alpha = 0; level.missile.missile_hud_item["sabot_reticle"].alpha = 0; } else if ( !var_11 && !var_12 && level.missile.missile_hud_item["sabot_reticle"].alpha == 0 ) { level.missile.missile_hud_item["sabot_reticle"].alpha = 0.666; level.missile.missile_hud_item["sabot_reticle_cyan"].alpha = 0; level.missile.missile_hud_item["sabot_reticle_red"].alpha = 0; } self moveto( var_6, 0.05, 0, 0 ); foreach ( var_16 in target_getarray() ) { if ( var_16.script_team == "axis" && distancesquared( var_6, var_16.origin ) < common_scripts\utility::ter_op( var_16 maps\_vehicle::ishelicopter(), 250000, 40000 ) && vectordot( var_16.origin - var_6, anglestoforward( self.angles ) ) <= 0.0 ) { var_0 missile_explode(); return; } } wait 0.05; } } missile_handle_thermal() { self endon( "give_player_missile_control" ); self endon( "remove_player_missile_control" ); for (;;) { self waittill( "thermal" ); if ( !isdefined( self.is_in_thermal_vision ) || !self.is_in_thermal_vision ) { self thermalvisionon(); maps\_load::thermal_effectson(); continue; } self thermalvisionoff(); maps\_load::thermal_effectsoff(); } } missile_handle_boost_fov_lerps( var_0, var_1 ) { self endon( "give_player_missile_control" ); self endon( "remove_player_missile_control" ); wait 0.25; var_2 = 0; for (;;) { if ( self adsbuttonpressed( 1 ) && !var_2 ) { self lerpfov( var_1, 0.1 ); var_2 = 1; } else if ( !self adsbuttonpressed( 1 ) && var_2 ) { self lerpfov( var_0, 0.1 ); var_2 = 0; } wait 0.1; } } missile_trigger_explode( var_0 ) { var_0 endon( "give_player_missile_control" ); var_0 endon( "remove_player_missile_control" ); if ( isdefined( level.missile.tank ) ) { var_0 notifyonplayercommand( "early_det", "+attack" ); var_0 notifyonplayercommand( "early_det", "+attack_akimbo_accessible" ); var_0 notifyonplayercommand( "early_det", "weapnext" ); var_0 notifyonplayercommand( "early_det", "+stance" ); } wait 0.5; var_0 waittill( "early_det" ); if ( isdefined( self ) ) { var_0 notify( "missile_timeout" ); var_0 missile_explode( 1 ); } } player_missile_roll_control( var_0 ) { var_1 = 0; var_2 = 0; self.old_angles = self.angles; var_3 = var_0 getnormalizedcameramovement()[1]; if ( var_3 > 0 && var_3 < 0.25 ) var_3 = 0; else if ( var_3 < 0 && var_3 > -0.25 ) var_3 = 0; var_4 = self.angles[2]; if ( var_4 > 180 ) var_4 = var_4 - 360; if ( var_3 == 0 ) { if ( var_4 > 0 ) var_1 = var_1 - 0.25 * self.roll_speed_max * 0.05; else var_1 = var_1 + 0.25 * self.roll_speed_max * 0.05; var_1 = clamp( var_1, ( 0 - self.roll_speed_max / 4 ) * 0.05, self.roll_speed_max / 4 * 0.05 ); var_1 = var_1 * min( 1.0, squared( abs( var_4 ) / ( self.roll_max / 2 ) ) ); if ( abs( var_1 ) > abs( var_4 ) ) var_1 = 0 - var_4; self.roll_current = self.roll_current - self.roll_current * 0.05; var_2 = var_2 * 0.75; } else { var_1 = var_1 + var_3 * ( self.roll_speed_max * 4 ) * 0.05; var_1 = clamp( var_1, ( 0 - self.roll_speed_max ) * abs( var_3 ) * 0.05, self.roll_speed_max * abs( var_3 ) * 0.05 ); var_2 = var_2 + var_3 * ( self.yaw_speed_max / 10 ) * 0.05; var_2 = clamp( var_2, ( 0 - self.yaw_speed_max ) * abs( var_3 ) * 0.05, self.yaw_speed_max * abs( var_3 ) * 0.05 ); if ( abs( var_4 ) / self.roll_max > 0.5 ) { if ( var_4 < 0 && var_1 < 0 || var_4 > 0 && var_1 > 0 ) { var_5 = squared( ( self.roll_max - abs( var_4 ) ) / ( self.roll_max - self.roll_max * 0.5 ) ); var_1 = var_1 * var_5; } } self.roll_current = var_1 / ( self.roll_speed_max * 0.05 ); } var_4 = var_4 + var_1; var_4 = clamp( var_4, 0 - self.roll_max, self.roll_max ); self addroll( var_4 - self.angles[2] ); if ( !self.flight_controls ) self.angles = ( self.angles[0], self.angles[1] - var_2, self.angles[2] ); } player_missile_yaw_control( var_0 ) { var_1 = var_0 getnormalizedcameramovement()[1]; if ( !level.console && !level.player common_scripts\utility::is_player_gamepad_enabled() ) var_1 = var_1 * -1; else if ( var_1 > 0 && var_1 < 0.25 ) var_1 = 0; else if ( var_1 < 0 && var_1 > -0.25 ) var_1 = 0; var_2 = self.angles[1]; if ( var_1 != 0.0 ) var_2 = var_2 + self.yaw_speed_max * var_1 * 0.05; self addyaw( self.angles[1] - var_2 ); } player_missile_pitch_control( var_0 ) { var_1 = 0; var_2 = var_0 getnormalizedcameramovement()[0]; if ( level.console || level.player common_scripts\utility::is_player_gamepad_enabled() ) { if ( var_2 > 0 && var_2 < 0.25 ) var_2 = 0; else if ( var_2 < 0 && var_2 > -0.25 ) var_2 = 0; } var_3 = self.angles[0]; if ( var_3 > 180 ) var_3 = var_3 - 360; var_1 = var_1 - var_2 * self.pitch_speed_max * 0.05; var_1 = clamp( var_1, ( 0 - self.pitch_speed_max ) * abs( var_2 ) * 0.05, self.pitch_speed_max * abs( var_2 ) * 0.05 ); if ( abs( var_3 ) / self.pitch_max > 0.5 ) { if ( var_3 < 0 && var_1 < 0 || var_3 > 0 && var_1 > 0 ) { var_4 = squared( ( self.pitch_max - abs( var_3 ) ) / ( self.pitch_max - self.pitch_max * 0.5 ) ); var_1 = var_1 * var_4; } } var_3 = var_3 + var_1; var_3 = clamp( var_3, 0 - self.pitch_max, self.pitch_max ); self addpitch( var_3 - self.angles[0] ); } missile_explode( var_0 ) { thread do_decal_square( self geteye() ); radiusdamage( self geteye(), 500, 1000, 500, self, "MOD_PROJECTILE", level.missile.weap ); playfx( level._effect["sabot_explode"], self.origin ); level thread maps\satfarm_audio::tow_missile_explode( self.origin ); physicsexplosionsphere( self geteye(), 300, 150, 1 ); self notify( "remove_player_missile_control" ); level.player enablemousesteer( 0 ); } update_altitude() { level endon( "remove_player_missile_control" ); for (;;) { self.altitude = ( self.origin[2] - maps\_utility::groundpos( self.origin )[2] ) / 12; wait 0.05; } } spawn_allies() { level.allies = []; level.allies[0] = spawn_ally( "ghost1" ); level.allies[0].animname = "hesh"; } spawn_ally( var_0, var_1 ) { var_2 = undefined; if ( !isdefined( var_1 ) ) var_2 = level.start_point + "_" + var_0; else var_2 = var_1 + "_" + var_0; var_3 = spawn_targetname_at_struct_targetname( var_0, var_2 ); if ( !isdefined( var_3 ) ) return undefined; var_3 maps\_utility::make_hero(); if ( !isdefined( var_3.magic_bullet_shield ) ) var_3 maps\_utility::magic_bullet_shield(); var_3.grenadeammo = 0; return var_3; } spawn_targetname_at_struct_targetname( var_0, var_1 ) { var_2 = getent( var_0, "targetname" ); var_3 = common_scripts\utility::getstruct( var_1, "targetname" ); if ( isdefined( var_2 ) && isdefined( var_3 ) ) { var_2.origin = var_3.origin; if ( isdefined( var_3.angles ) ) var_2.angles = var_3.angles; var_4 = var_2 maps\_utility::spawn_ai( 1 ); return var_4; } if ( isdefined( var_2 ) ) { var_4 = var_2 maps\_utility::spawn_ai( 1 ); iprintlnbold( "Add a script struct called: " + var_1 + " to spawn him in the correct location." ); var_4 teleport( level.player.origin, level.player.angles ); return var_4; } iprintlnbold( "failed to spawn " + var_0 + " at " + var_1 ); return undefined; } send_to_volume_and_delete( var_0 ) { self endon( "death" ); maps\_utility::set_fixednode_false(); self setgoalvolumeauto( var_0 ); self waittill( "goal" ); self delete(); } ai_array_killcount_flag_set( var_0, var_1, var_2, var_3 ) { maps\_utility::waittill_dead_or_dying( var_0, var_1, var_3 ); common_scripts\utility::flag_set( var_2 ); } cleanup_enemies( var_0, var_1 ) { common_scripts\utility::flag_wait( var_0 ); var_1 = maps\_utility::array_removedead_or_dying( var_1 ); if ( var_1.size > 0 ) { foreach ( var_3 in var_1 ) { if ( isdefined( var_3 ) ) var_3 kill(); } } } dumb_tank_shoot( var_0 ) { self endon( "death" ); if ( isdefined( var_0 ) ) self endon( var_0 ); wait( randomfloatrange( 2, 7 ) ); for (;;) { shoot_anim(); wait( randomfloatrange( 6, 12 ) ); } } waittill_goal( var_0, var_1, var_2 ) { self endon( "death" ); if ( isdefined( var_0 ) ) self.goalradius = var_0; self waittill( "goal" ); if ( isdefined( var_1 ) ) { if ( isdefined( self ) ) self delete(); } if ( isdefined( self ) && isdefined( var_2 ) ) { if ( isdefined( self.goalpos ) ) thread mortar_on_spot( self.goalpos ); } } mortar_on_spot( var_0 ) { var_1 = common_scripts\utility::spawn_tag_origin(); var_1.origin = self.goalpos; var_1.angles = ( -90, 0, 0 ); thread common_scripts\utility::play_sound_in_space( "satf_mortar_incoming", var_1.origin ); wait( randomfloatrange( 0.25, 0.45 ) ); mortar_impact( var_1 ); wait( randomfloatrange( 0.25, 0.45 ) ); var_1 delete(); } mortar_impact( var_0 ) { playfxontag( common_scripts\utility::getfx( "mortar" ), var_0, "tag_origin" ); screenshake( var_0.origin, 10, 2, 2, 2.0, 0, 2.0, 1600, 15, 8, 8, 1.8 ); thread common_scripts\utility::play_sound_in_space( "satf_mortar_explosion_dirt", var_0.origin ); playrumbleonposition( "artillery_rumble", var_0.origin ); radiusdamage( var_0.origin, 512, 25, 1 ); } enemy_rpg_unlimited_ammo( var_0 ) { if ( isdefined( var_0 ) ) self endon( var_0 ); self endon( "death" ); var_1 = 1; for (;;) { if ( isdefined( self.a.rockets ) ) self.a.rockets = var_1; wait 0.05; } } rotate_big_sat() { var_0 = getent( "big_dish", "targetname" ); var_0 rotateroll( 50, 0.05 ); common_scripts\utility::flag_wait( "spawn_front" ); var_0 rotateroll( -50, 20 ); } kill_vehicle_spawners_now( var_0 ) { maps\_utility::array_delete( level.vehicle_killspawn_groups[var_0] ); level.vehicle_killspawn_groups[var_0] = []; } kill_spawners_per_checkpoint( var_0 ) { } saf_streetlight_dynamic_setup( var_0, var_1 ) { var_2 = common_scripts\utility::getstructarray( "saf_streetlight_dynamic_" + var_0, "targetname" ); var_3 = 0; foreach ( var_5 in var_2 ) { var_5 thread saf_streetlight_dynamic_func( var_1 ); var_3++; if ( var_3 > 10 ) { wait 0.05; var_3 = 0; } } } saf_streetlight_dynamic_func( var_0 ) { level endon( var_0 ); var_1 = spawn( "script_model", self.origin ); var_1.angles = self.angles; var_1 setmodel( "saf_streetlight_01" ); var_1 thread flag_wait_delete( var_0 ); var_1 setcandamage( 1 ); for (;;) { var_1 waittill( "damage", var_2, var_3, var_4, var_5, var_6 ); if ( isdefined( var_6 ) && isdefined( var_3 ) && isdefined( level.playertank ) && var_3 == level.playertank ) { var_6 = tolower( var_6 ); if ( var_6 == "mod_crush" || var_6 == "mod_explosive" || var_6 == "mod_projectile" || var_6 == "mod_projectile_splash" ) break; } wait 0.05; } if ( isdefined( var_1 ) ) var_1 delete(); var_7 = spawn( "script_model", self.origin ); var_7.angles = self.angles; var_7 setmodel( "saf_streetlight_broken_01" ); var_7 thread flag_wait_delete( var_0 ); var_8 = spawn( "script_model", self.origin ); var_8.angles = self.angles; var_8 setmodel( "saf_streetlight_broken_02" ); var_8 thread flag_wait_delete( var_0 ); if ( isdefined( var_6 ) && var_6 == "mod_crush" ) { if ( isdefined( var_3 ) ) { var_9 = var_3 vehicle_getvelocity(); if ( var_3 == level.playertank ) { thread common_scripts\utility::play_sound_in_space( "satf_tank_collision_post_plr", level.player.origin ); level.player screenshakeonentity( 4.0, 1.0, 1.0, 0.5, 0, 0.25, 0, 2.0, 0.5, 0.5 ); level.player playrumbleonentity( "damage_heavy" ); } else thread common_scripts\utility::play_sound_in_space( "satf_tank_collision_npc", var_7.origin ); var_8 physicslaunchclient( var_8.origin + ( 0, 0, 128 ), var_9 * 50 ); } } else if ( isdefined( var_6 ) && ( var_6 == "mod_explosive" || var_6 == "mod_projectile" || var_6 == "mod_projectile_splash" ) && isdefined( var_5 ) && isdefined( var_4 ) ) { thread common_scripts\utility::play_sound_in_space( "satf_tank_collision_npc", var_7.origin ); var_8 physicslaunchclient( var_5, var_4 * 50 ); } } saf_concrete_barrier_dynamic_setup( var_0, var_1 ) { var_2 = common_scripts\utility::getstructarray( "saf_concrete_barrier_dynamic_" + var_0, "targetname" ); var_3 = 0; foreach ( var_5 in var_2 ) { var_5 thread saf_concrete_barrier_dynamic_func( var_1 ); var_3++; if ( var_3 > 10 ) { wait 0.05; var_3 = 0; } } } saf_concrete_barrier_dynamic_func( var_0 ) { level endon( var_0 ); var_1 = spawn( "script_model", self.origin ); var_1.angles = self.angles; var_1 setmodel( "saf_parking_post_01" ); var_1 thread flag_wait_delete( var_0 ); var_1 setcandamage( 1 ); for (;;) { var_1 waittill( "damage", var_2, var_3, var_4, var_5, var_6 ); if ( isdefined( var_6 ) && isdefined( var_3 ) && isdefined( level.playertank ) && var_3 == level.playertank ) { var_6 = tolower( var_6 ); if ( var_6 == "mod_crush" ) break; } wait 0.05; } if ( isdefined( var_3 ) ) { var_7 = var_3 vehicle_getvelocity(); if ( var_3 == level.playertank ) { thread maps\satfarm_audio::player_post_collision(); level.player screenshakeonentity( 4.0, 1.0, 1.0, 0.5, 0, 0.25, 0, 2.0, 0.5, 0.5 ); level.player playrumbleonentity( "damage_heavy" ); } else thread maps\satfarm_audio::npc_post_collision( var_1.origin ); var_1 physicslaunchclient( var_1.origin + ( 0, 0, 128 ), var_7 * 100 ); } } saf_large_sign_01_dynamic_setup( var_0, var_1 ) { var_2 = common_scripts\utility::getstructarray( "saf_large_sign_01_dynamic_" + var_0, "targetname" ); var_3 = 0; foreach ( var_5 in var_2 ) { var_5 thread saf_large_sign_01_dynamic_func( var_1 ); var_3++; if ( var_3 > 10 ) { wait 0.05; var_3 = 0; } } } saf_large_sign_01_dynamic_func( var_0 ) { level endon( var_0 ); var_1 = spawn( "script_model", self.origin ); var_1.angles = self.angles; var_1 setmodel( "saf_large_sign_01" ); var_1 thread flag_wait_delete( var_0 ); var_1 setcandamage( 1 ); for (;;) { var_1 waittill( "damage", var_2, var_3, var_4, var_5, var_6 ); if ( isdefined( var_6 ) && isdefined( var_3 ) && isdefined( level.playertank ) && var_3 == level.playertank ) { var_6 = tolower( var_6 ); if ( var_6 == "mod_crush" || var_6 == "mod_explosive" || var_6 == "mod_projectile" || var_6 == "mod_projectile_splash" ) break; } wait 0.05; } if ( isdefined( var_6 ) && var_6 == "mod_crush" ) { if ( isdefined( var_3 ) ) { var_7 = var_3 vehicle_getvelocity(); if ( var_3 == level.playertank ) { thread maps\satfarm_audio::player_post_collision(); level.player screenshakeonentity( 4.0, 1.0, 1.0, 0.5, 0, 0.25, 0, 2.0, 0.5, 0.5 ); level.player playrumbleonentity( "damage_heavy" ); } else thread maps\satfarm_audio::npc_post_collision( var_1.origin ); var_1 physicslaunchclient( var_1.origin + ( 0, 0, 128 ), var_7 * 50 ); } } else if ( isdefined( var_6 ) && ( var_6 == "mod_explosive" || var_6 == "mod_projectile" || var_6 == "mod_projectile_splash" ) && isdefined( var_5 ) && isdefined( var_4 ) ) { thread common_scripts\utility::play_sound_in_space( "satf_tank_collision_npc", var_1.origin ); var_1 physicslaunchclient( var_5, var_4 * 100 ); } } disable_all_triggers() { level.player endon( "tank_dismount" ); var_0 = getentarray( "trigger_multiple", "classname" ); var_1 = getentarray( "trigger_radius", "classname" ); var_2 = getentarray( "trigger_multiple_flag_set", "classname" ); var_3 = getentarray( "trigger_damage", "classname" ); var_4 = getentarray( "info_volume", "classname" ); foreach ( var_6 in var_0 ) { if ( isdefined( var_6.trigger_off ) || isdefined( var_6.targetname ) && var_6.targetname == "hangar_wall_smash_trigger" ) { var_0 = common_scripts\utility::array_remove( var_0, var_6 ); continue; } var_6 common_scripts\utility::trigger_off(); } foreach ( var_6 in var_1 ) { if ( isdefined( var_6.trigger_off ) ) { var_1 = common_scripts\utility::array_remove( var_1, var_6 ); continue; } var_6 common_scripts\utility::trigger_off(); } foreach ( var_6 in var_2 ) { if ( isdefined( var_6.trigger_off ) ) { var_2 = common_scripts\utility::array_remove( var_2, var_6 ); continue; } var_6 common_scripts\utility::trigger_off(); } foreach ( var_6 in var_4 ) { if ( isdefined( var_6.trigger_off ) ) { var_4 = common_scripts\utility::array_remove( var_4, var_6 ); continue; } var_6 common_scripts\utility::trigger_off(); } level.player waittill( "reenable_triggers" ); foreach ( var_6 in var_0 ) { if ( isdefined( var_6 ) ) var_6 common_scripts\utility::trigger_on(); } foreach ( var_6 in var_1 ) { if ( isdefined( var_6 ) ) var_6 common_scripts\utility::trigger_on(); } foreach ( var_6 in var_2 ) { if ( isdefined( var_6 ) ) var_6 common_scripts\utility::trigger_on(); } foreach ( var_6 in var_4 ) { if ( isdefined( var_6 ) ) var_6 common_scripts\utility::trigger_on(); } } setup_ambient_tank_drop( var_0, var_1, var_2, var_3, var_4 ) { var_5 = common_scripts\utility::getstruct( var_0, "targetname" ); var_6 = []; var_7 = undefined; var_8 = undefined; if ( isdefined( var_1 ) && var_1 == 1 ) { var_7 = maps\_utility::spawn_anim_model( "tank_ambient" ); var_6 = common_scripts\utility::add_to_array( var_6, var_7 ); var_8 = maps\_utility::spawn_anim_model( "c17_ambient" ); var_6 = common_scripts\utility::add_to_array( var_6, var_8 ); } else { var_9 = maps\_utility::getvehiclespawnerarray( var_0 ); foreach ( var_11 in var_9 ) { if ( isdefined( var_11.script_parameters ) ) { if ( var_11.script_parameters == "tank" ) { var_7 = var_11 maps\_utility::spawn_vehicle(); var_7.animname = "tank_ambient"; var_7 useanimtree( level.scr_animtree[var_7.animname] ); var_6 = common_scripts\utility::add_to_array( var_6, var_7 ); level.allytanks = common_scripts\utility::array_add( level.allytanks, var_7 ); if ( isdefined( var_3 ) ) var_7 thread flag_wait_delete( var_3 ); } if ( var_11.script_parameters == "c17" ) { var_8 = var_11 maps\_utility::spawn_vehicle(); var_8.animname = "c17_ambient"; var_8 useanimtree( level.scr_animtree[var_8.animname] ); var_6 = common_scripts\utility::add_to_array( var_6, var_8 ); } } } } var_5 thread maps\_anim::anim_single( var_6, "ambient_drop" ); var_7 thread tank_ambient_deploy_chutes( var_5, 1, var_4 ); var_7 thread tank_ambient_waits( var_2, var_0 ); if ( isdefined( var_1 ) && var_1 == 1 ) { var_8 waittillmatch( "single anim", "end" ); var_8 delete(); } else { var_13 = getvehiclenode( var_0 + "_c17_start", "targetname" ); var_8 waittillmatch( "single anim", "end" ); wait 0.05; var_8 useanimtree( #animtree ); var_8 attach_path_and_drive( var_13, 180 ); } } tank_ambient_waits( var_0, var_1 ) { self endon( "death" ); self waittillmatch( "single anim", "end" ); wait 0.05; self useanimtree( #animtree ); var_2 = getvehiclenode( var_1 + "_tank_start", "targetname" ); thread attach_path_and_drive( var_2 ); if ( isdefined( var_0 ) ) thread npc_tank_combat_init(); } tank_ambient_deploy_chutes( var_0, var_1, var_2 ) { var_3 = "pilot_chute_tank_ambient"; var_4 = maps\_utility::spawn_anim_model( var_3 ); if ( isdefined( var_1 ) && var_1 == 1 ) var_0 = self; var_4 hide(); if ( isdefined( var_1 ) && var_1 == 1 ) var_4 linkto( self, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ) ); var_5 = []; for ( var_6 = 0; var_6 <= 2; var_6++ ) { var_3 = "main_chute" + var_6 + "_tank_ambient"; var_5[var_6] = maps\_utility::spawn_anim_model( var_3 ); var_5[var_6] hide(); if ( isdefined( var_1 ) && var_1 == 1 ) var_5[var_6] linkto( self, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ) ); } var_0 thread maps\_anim::anim_first_frame_solo( var_4, "pilot_chute_deploy", "tag_origin" ); var_0 thread maps\_anim::anim_first_frame( var_5, "main_chute_deploy", "tag_origin" ); self waittillmatch( "single anim", "spawn_pilot_chute" ); var_4 show(); var_0 thread maps\_anim::anim_single_solo( var_4, "pilot_chute_deploy", "tag_origin" ); self waittillmatch( "single anim", "spawn_main_chutes" ); if ( isdefined( var_2 ) ) { } foreach ( var_8 in var_5 ) var_8 show(); var_0 maps\_anim::anim_single( var_5, "main_chute_deploy", "tag_origin" ); var_4 unlink(); foreach ( var_8 in var_5 ) var_8 unlink(); wait 5.0; var_4 delete(); foreach ( var_8 in var_5 ) var_8 delete(); } attach_path_and_drive( var_0, var_1, var_2 ) { if ( !isdefined( var_1 ) ) var_1 = 45; if ( !isdefined( var_2 ) ) var_2 = 15; self attachpath( var_0 ); self startpath( var_0 ); thread maps\_vehicle::vehicle_paths( var_0 ); if ( isdefined( var_1 ) ) self vehicle_setspeedimmediate( var_1, var_2 ); } create_missile_attractor() { level.playertank endon( "death" ); level.missilefire = common_scripts\utility::spawn_tag_origin(); level.missilehit = common_scripts\utility::spawn_tag_origin(); level.missilehit linkto( level.playertank, "tag_flash", ( 0, 0, 0 ), ( 0, 0, 0 ) ); } play_sparks() { while ( !isdefined( level.oldtank ) ) { playfxontag( common_scripts\utility::getfx( "vfx_malfunction_sparks" ), level.playertank, "tag_barrel" ); playfxontag( common_scripts\utility::getfx( "tank_heavy_smoke" ), level.playertank, "tag_turret" ); playfxontag( common_scripts\utility::getfx( "tank_heavy_smoke" ), level.playertank, "tag_interior_light_godray" ); wait( randomfloatrange( 1, 5 ) ); } } target_settings() { if ( !isdefined( level.target_settings_frame_count ) ) level.target_settings_frame_count = 0; while ( level.target_settings_frame_count >= 5 ) wait 0.05; level.target_settings_frame_count++; target_alloc( self, common_scripts\utility::ter_op( maps\_vehicle::ishelicopter(), ( 0, 0, 0 ), ( 0, 0, 72 ) ) ); target_setshader( self, "ac130_hud_enemy_vehicle_target_s_w" ); target_setcolor( self, ( 1, 0, 0 ) ); target_hidefromplayer( self, level.player ); target_flush( self ); wait 0.05; level.target_settings_frame_count = 0; self waittill( "death" ); if ( isdefined( self ) ) target_remove( self ); } remove_drone_on_path_end() { self waittill( "goal" ); if ( isalive( self ) ) self kill(); } sand_effects_init() { if ( !isdefined( anim._effect ) ) anim._effect = []; } start_sand_effects() { self.bigjump_timedelta = 500; self.event_time = -1; thread listen_leftground(); thread listen_landed(); thread listen_jolt(); thread listen_collision(); thread listen_vehicle_death(); } tank_fx( var_0 ) { if ( self.model == "vehicle_chinese_brave_warrior_anim" ) { if ( isdefined( anim._effect[var_0] ) ) playfxontag( anim._effect[var_0], self, "tag_deathfx" ); } if ( self.model == "vehicle_gaz_tigr_base" ) { if ( isdefined( anim._effect[var_0] ) ) playfxontag( anim._effect[var_0], self, "tag_guy0" ); } } listen_leftground() { self endon( "death" ); for (;;) { self waittill( "veh_leftground" ); thread common_scripts\utility::play_sound_in_space( "satf_tank_leftground_npc", self.origin ); if ( !isdefined( self.kill_my_fx ) ) self.event_time = gettime(); } } listen_vehicle_death() { var_0 = 2000; self waittill( "death" ); if ( isdefined( self ) ) { var_1 = distance( level.player.origin, self.origin ); if ( var_1 < var_0 ) return; } else { } } listen_landed() { self endon( "death" ); for (;;) { self waittill( "veh_landed" ); if ( !isdefined( self.kill_my_fx ) ) { if ( self.event_time + self.bigjump_timedelta < gettime() ) { thread common_scripts\utility::play_sound_in_space( "satf_tank_land_loud_npc", self.origin ); continue; } thread common_scripts\utility::play_sound_in_space( "satf_tank_land_npc", self.origin ); } } } listen_jolt() { self endon( "death" ); for (;;) { self waittill( "veh_jolt", var_0 ); if ( !isdefined( self.kill_my_fx ) ) { if ( var_0[1] >= 0 ) { thread common_scripts\utility::play_sound_in_space( "satf_tank_jolt_npc", self.origin ); continue; } thread common_scripts\utility::play_sound_in_space( "satf_tank_jolt_npc", self.origin ); } } } listen_collision() { self endon( "death" ); for (;;) { self waittill( "veh_collision", var_0, var_1 ); thread common_scripts\utility::play_sound_in_space( "satf_tank_collision_npc", self.origin ); if ( !isdefined( self.kill_my_fx ) ) { } } } listen_player() { self.bigjump_timedelta = 500; self.event_time = -1; thread listen_player_leftground(); thread listen_player_landed(); thread listen_player_jolt(); } listen_player_jolt() { level.player endon( "tank_dismount" ); level.player endon( "missile_tank_dismount" ); for (;;) { self waittill( "veh_jolt", var_0 ); if ( !isdefined( self.kill_my_fx ) ) { var_1 = length( var_0 ); if ( var_1 < 6000 ) continue; var_2 = var_1 / 30000; level.player screenshakeonentity( 15 * var_2, 5 * var_2, 0, 1, 0, 1, 500, 12, 10, 0, 1.8 ); if ( var_1 > 10000 ) { thread play_rumble_seconds( "damage_heavy", 1 ); if ( var_0[1] >= 0 ) thread common_scripts\utility::play_sound_in_space( "satf_tank_collision_plr", level.player.origin ); else thread common_scripts\utility::play_sound_in_space( "satf_tank_jolt_plr", level.player.origin ); } else { thread play_rumble_seconds( "damage_light", 1 ); thread common_scripts\utility::play_sound_in_space( "satf_tank_jolt_plr", level.player.origin ); } } } } listen_player_leftground() { self endon( "death" ); level.player endon( "tank_dismount" ); level.player endon( "missile_tank_dismount" ); for (;;) { self waittill( "veh_leftground" ); thread common_scripts\utility::play_sound_in_space( "satf_tank_leftground_plr", level.player.origin ); self.event_time = gettime(); } } listen_player_landed() { self endon( "death" ); level.player endon( "tank_dismount" ); level.player endon( "missile_tank_dismount" ); for (;;) { self waittill( "veh_landed" ); if ( self.event_time + self.bigjump_timedelta > gettime() ) { thread common_scripts\utility::play_sound_in_space( "satf_tank_land_loud_plr", level.player.origin ); continue; } thread common_scripts\utility::play_sound_in_space( "satf_tank_land_treads_plr", self.origin ); } } play_rumble_seconds( var_0, var_1 ) { level.player endon( "tank_dismount" ); level.player endon( "missile_tank_dismount" ); for ( var_2 = 0; var_2 < var_1 / 0.3; var_2++ ) { level.player playrumbleonentity( var_0 ); wait 0.3; } } screenshakefade( var_0, var_1, var_2, var_3 ) { if ( !isdefined( var_2 ) ) var_2 = 0; if ( !isdefined( var_3 ) ) var_3 = 0; var_4 = var_1 * 10; var_5 = var_2 * 10; if ( var_5 > 0 ) var_6 = var_0 / var_5; else var_6 = var_0; var_7 = var_3 * 10; var_8 = var_4 - var_7; if ( var_7 > 0 ) var_9 = var_0 / var_7; else var_9 = var_0; var_10 = 0.1; var_0 = 0; for ( var_11 = 0; var_11 < var_4; var_11++ ) { if ( var_11 <= var_5 ) var_0 = var_0 + var_6; if ( var_11 > var_8 ) var_0 = var_0 - var_9; earthquake( var_0, var_10, level.player.origin, 500 ); wait( var_10 ); } } heli_crash_kill() { while ( isalive( self ) && !isdefined( self.crashing ) ) wait 1; self waittill( "damage" ); self notify( "crash_done" ); self notify( "in_air_explosion" ); } is_player_locked_on() { if ( isdefined( level.playertank.locked_on ) && level.playertank.locked_on == 1 ) return 1; else return 0; } chopper_insta_kill() { for (;;) { self waittill( "damage", var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 ); if ( isdefined( var_1 ) && var_1 == level.player && isdefined( level.missile ) && isdefined( level.missile.weap ) && isdefined( var_9 ) && var_9 == level.missile.weap ) { if ( !isdefined( level.chopper_missile_kills ) ) level.chopper_missile_kills = 0; level.chopper_missile_kills++; if ( level.chopper_missile_kills == 3 ) level.player maps\_utility::player_giveachievement_wrapper( "LEVEL_16A" ); } if ( isdefined( var_4 ) ) var_4 = tolower( var_4 ); if ( var_4 == "mod_projectile" || var_4 == "mod_projectile_splash" || var_4 == "mod_explosive" ) { if ( isdefined( self ) ) { level thread maps\satfarm_audio::chopper_death_player( self.origin ); self kill(); wait 0.1; if ( isdefined( self ) ) self delete(); } } wait 0.05; } } satfarm_timer( var_0, var_1, var_2, var_3 ) { level endon( "kill_timer" ); if ( getdvar( "notimer" ) == "1" ) return; if ( !isdefined( var_3 ) ) var_3 = 0; if ( !isdefined( var_1 ) ) var_1 = &"SATFARM_TIME_IMACT"; level.hudtimerindex = 20; level.timer = maps\_hud_util::get_countdown_hud( -250 ); level.timer setpulsefx( 30, 900000, 700 ); level.timer.label = var_1; level.timer settimer( var_0 ); level.start_time = gettime(); var_4 = level.timer; if ( !isdefined( var_2 ) ) wait( var_0 ); else wait( var_2 ); if ( isdefined( var_4 ) ) killtimer(); } timer_ten_change( var_0 ) { level endon( "kill_timer" ); while ( isdefined( level.timer ) ) { if ( isdefined( level.timer ) && var_0 < 11 && var_0 > 0 ) { common_scripts\utility::flag_set( "aud_ten_seconds" ); level.timer.color = ( 1, 0, 0 ); wait 0.25; if ( isdefined( level.timer ) ) level.timer.color = ( 0.8, 1, 0.8 ); wait 0.25; if ( isdefined( level.timer ) ) level.timer.color = ( 1, 0, 0 ); wait 0.25; if ( isdefined( level.timer ) ) level.timer.color = ( 0.8, 1, 0.8 ); wait 0.25; } else wait 1; var_0--; } } killtimer() { if ( isdefined( level.timer ) ) level.timer destroy(); } exiting_combat_zone() { level notify( "exiting_combat_zone" ); level endon( "exiting_combat_zone" ); level endon( "air_strip_end" ); level endon( "air_strip_secured_begin" ); level.player endon( "missile_tank_dismount" ); if ( isdefined( level.old_kill_fail_flag ) && !level.old_kill_fail_flag ) common_scripts\utility::flag_clear( "kill_fail_flag" ); var_0 = getentarray( "fail_warning", "targetname" ); for (;;) { foreach ( var_2 in var_0 ) { if ( ( !isdefined( var_2.trigger_off ) || !var_2.trigger_off ) && level.player istouching( var_2 ) ) { maps\_utility::hint( &"SATFARM_LEAVING_COMBAT", 1, 64 ); break; } } if ( common_scripts\utility::flag( "kill_fail_flag" ) ) level notify( "player_tank_exited_combat_area" ); common_scripts\utility::waitframe(); } } exiting_combat_player_fail() { while ( common_scripts\utility::flag( "PLAYER_GUIDING_ROUND" ) ) common_scripts\utility::waitframe(); common_scripts\utility::flag_wait( "player_in_tank" ); level.playertank makeusable(); level.playertank useby( level.player ); level.player disableinvulnerability(); setdvar( "ui_deadquote", &"SATFARM_TANK_DEATH" ); maps\_utility::missionfailedwrapper(); level.player kill(); level.playertank kill(); } fire_tracking_missile_mig() { if ( isdefined( level.fire_tracking_missile_mig ) ) return; level.fire_tracking_missile_mig = 1; level waittill( "player_tank_exited_combat_area" ); thread play_mig_anim( level.playertank ); wait 1.5; var_0 = fire_magic_missile_mig( 75 ); thread track_player_direction_mig( var_0 ); level.player thread common_scripts\utility::play_loop_sound_on_entity( "missile_incoming" ); while ( isdefined( var_0 ) ) common_scripts\utility::waitframe(); level.player thread common_scripts\utility::stop_loop_sound_on_entity( "missile_incoming" ); exiting_combat_player_fail(); } fire_tracking_missile_mig_nonfatal() { thread play_mig_anim( level.playertank ); wait 1.5; var_0 = fire_magic_missile_mig( 75 ); thread track_player_direction_mig( var_0 ); level.player thread common_scripts\utility::play_loop_sound_on_entity( "missile_incoming" ); while ( isdefined( var_0 ) ) common_scripts\utility::waitframe(); level.player thread common_scripts\utility::stop_loop_sound_on_entity( "missile_incoming" ); } fire_tracking_missile_at_vehicle( var_0 ) { thread play_mig_anim( var_0 ); wait 1.5; var_1 = fire_magic_missile_mig( 75, var_0 ); track_player_direction_mig( var_1, var_0 ); while ( isdefined( var_1 ) ) common_scripts\utility::waitframe(); } play_mig_anim( var_0 ) { var_1 = maps\_utility::spawn_anim_model( "mig_flyby", var_0.origin ); var_2 = common_scripts\utility::spawn_tag_origin(); var_2.origin = level.player.origin + ( 0, 0, 1200 ); var_2.angles = level.player.angles; var_2 linkto( var_0 ); var_2 maps\_anim::anim_single_solo( var_1, "flyby" ); var_1 delete(); var_2 delete(); } fire_magic_missile_mig( var_0, var_1 ) { if ( !isdefined( var_1 ) ) var_1 = level.playertank; var_2 = var_1 gettagorigin( "tag_barrel" ); var_3 = anglestoforward( level.player.angles ); var_4 = var_1 vehicle_getspeed(); var_5 = var_2 + 50 * var_3 * var_0 + ( 0, 0, 1500 ); var_6 = magicbullet( "javelin_satfarm", var_5, var_1.origin ); return var_6; } track_player_direction_mig( var_0, var_1 ) { if ( !isdefined( var_1 ) ) var_1 = level.playertank; var_2 = common_scripts\utility::spawn_tag_origin(); var_3 = 0; var_0 missile_settargetent( var_2 ); while ( isdefined( var_0 ) && isdefined( var_1 ) && isalive( var_1 ) ) { var_4 = var_1 gettagorigin( "tag_barrel" ); var_5 = anglestoforward( level.player.angles ); var_6 = var_1 vehicle_getspeed(); var_7 = var_4 + var_6 * var_5 * 5; var_2.origin = var_7; var_3 = var_0.origin; common_scripts\utility::waitframe(); } var_2 delete(); } follow_icon_manager() { level.player endon( "death" ); wait 0.5; while ( !common_scripts\utility::flag( "air_strip_take_off_mig_01_go" ) ) { if ( distancesquared( level.player.origin, level.badger.origin ) <= 6250000 || distancesquared( level.player.origin, level.badger.origin ) > 6250000 && common_scripts\utility::within_fov( level.player.origin, level.player getplayerangles(), level.badger.origin, cos( 15 ) ) ) setsaveddvar( "objectiveHide", 1 ); else setsaveddvar( "objectiveHide", 0 ); wait 1.5; } setsaveddvar( "objectiveHide", 0 ); } tank_tread_freq_all() { var_0 = vehicle_getspawnerarray(); foreach ( var_2 in var_0 ) { if ( var_2 istank() ) var_2 tank_tread_freq(); } } tank_tread_freq() { self.treadfx_freq_scale = 0.5; } finish_zoom() { } satfarm_corpse_cleanup() { level endon( "player_landed" ); for (;;) { var_0 = getcorpsearray(); foreach ( var_2 in var_0 ) { if ( isdefined( var_2 ) && !sighttracepassed( level.player geteye(), var_2.origin, 0, level.player ) ) { if ( isdefined( var_2 ) ) var_2 delete(); } if ( isdefined( var_2 ) && distancesquared( var_2.origin, level.player.origin ) > 6250000 ) { if ( isdefined( var_2 ) ) var_2 delete(); continue; } if ( isdefined( var_2 ) && !common_scripts\utility::within_fov( level.player.origin, level.player getplayerangles(), var_2.origin, cos( 65 ) ) ) { if ( isdefined( var_2 ) ) var_2 delete(); } } wait 1.0; } }