// IW6 GSC SOURCE // Generated by https://github.com/xensik/gsc-tool sparrow_init() { common_scripts\utility::flag_init( "sparrow_hud_black" ); precachestring( &"ENEMY_HQ_NORTH" ); precachestring( &"ENEMY_HQ_SOUTH" ); precachestring( &"ENEMY_HQ_EAST" ); precachestring( &"ENEMY_HQ_WEST" ); precachestring( &"ENEMY_HQ_NORTHWEST" ); precachestring( &"ENEMY_HQ_SOUTHWEST" ); precachestring( &"ENEMY_HQ_SOUTHEAST" ); precachestring( &"ENEMY_HQ_NORTHEAST" ); } sam_give_control() { self endon( "remove_sam_control" ); self endon( "death" ); level.sam_launchers = []; level.sam_launchers = common_scripts\utility::array_add( level.sam_launchers, getent( "sparrow_launcher", "targetname" ) ); level.sam_launchers[0] hide(); level.sam_launchers[0].old_contents = level.sam_launchers[0] setcontents( 0 ); level.sam_launcher_index = level.sam_launchers.size; level.sam_launchers[level.sam_launchers.size] = spawn( "script_model", level.sam_launchers[0].origin ); level.sam_launchers[level.sam_launcher_index].angles = level.sam_launchers[0].angles; level.sam_launchers[level.sam_launcher_index] setmodel( "crr_sparrow_launcher" ); level.sam_lockon_targets = []; level.sam_lockon_range = 30000; for (;;) { self waittill( "use_sam" ); if ( isdefined( self.using_sam ) && self.using_sam ) { sam_exit(); continue; } self.lastusedweapon = self getcurrentweapon(); self giveweapon( "sparrow_targeting_device" ); self switchtoweapon( "sparrow_targeting_device" ); self freezecontrols( 1 ); self.using_sam = 1; level.black_overlay = maps\_hud_util::create_client_overlay( "black", 0, self ); level.black_overlay fadeovertime( 0.25 ); level.black_overlay.alpha = 1; thread maps\carrier_audio::aud_carr_sparrow_zone_on(); wait 0.25; thread maps\_utility::autosave_now_silent(); wait 0.2; common_scripts\utility::flag_set( "sparrow_hud_black" ); self.prev_origin = self.origin; self.prev_angles = self getplayerangles(); self.prev_stance = self getstance(); self takeweapon( "sparrow_targeting_device" ); maps\_utility::store_players_weapons( "sam" ); self takeallweapons(); self setstance( "stand" ); self allowcrouch( 0 ); self allowjump( 0 ); self allowprone( 0 ); self enableinvulnerability(); level.friendlyfiredisabled = 1; setsaveddvar( "ammoCounterHide", "1" ); setsaveddvar( "actionSlotsHide", "1" ); setsaveddvar( "hud_showstance", 0 ); setsaveddvar( "cg_fov", 90 ); self setorigin( level.sam_launchers[level.sam_launcher_index].origin + anglestoup( level.sam_launchers[level.sam_launcher_index] gettagangles( "tag_origin" ) ) * 95 + anglestoforward( level.sam_launchers[level.sam_launcher_index] gettagangles( "tag_origin" ) ) * -20 ); self setplayerangles( level.sam_launchers[level.sam_launcher_index] gettagangles( "tag_origin" ) + ( 5, 0, 0 ) ); self playerlinktodelta( level.sam_launchers[level.sam_launcher_index], "tag_origin", 1, 0, 0, 0, 0 ); self playerlinkedoffsetenable(); if ( !level.console && !common_scripts\utility::is_player_gamepad_enabled() ) self enablemousesteer( 1 ); level.sam_launchers[level.sam_launcher_index].old_contents = level.sam_launchers[level.sam_launcher_index] setcontents( 0 ); clear_sam_missiles(); load_sam_missiles(); thread sam_control(); thread maps\carrier_audio::aud_sparrow_aiming(); level.black_overlay fadeovertime( 0.25 ); level.black_overlay.alpha = 0; thread sam_use_auto_lock_on(); level.sam_damage_dummy = spawn( "script_model", self.origin + anglestoforward( self getplayerangles() ) * 65 ); level.sam_damage_dummy.angles = self getplayerangles() + ( 90, 0, 0 ); level.sam_damage_dummy hide(); level.sam_damage_dummy setmodel( "com_barrel_black_h" ); level.sam_damage_dummy linkto( self ); level.sam_damage_dummy thread sam_monitor_damage(); foreach ( var_1 in getaiarray( "allies" ) ) { if ( !isdefined( var_1.magic_bullet_shield ) ) var_1 maps\_utility::magic_bullet_shield( 1 ); } } } sam_exit() { self notify( "exit_sam" ); self endon( "death" ); level.black_overlay fadeovertime( 0.25 ); level.black_overlay.alpha = 1; wait 0.25; sam_clear_hud(); clear_sam_missiles(); thread maps\carrier_audio::aud_carr_sparrow_zone_off(); thread maps\carrier_audio::aud_play_victory_deck_music(); var_0 = 0; foreach ( var_2 in target_getarray() ) { if ( !isdefined( var_2 ) ) continue; target_hidefromplayer( var_2, self ); var_2 hudoutlinedisable(); var_0++; if ( var_0 > 5 ) { var_0 = 0; wait 0.05; } } level.sam_lockon_targets = []; level.black_overlay fadeovertime( 0.25 ); level.black_overlay.alpha = 0; level.sam_damage_dummy unlink(); self unlink(); self setorigin( self.prev_origin ); self setplayerangles( self.prev_angles ); self setstance( self.prev_stance ); self allowprone( 1 ); self allowcrouch( 1 ); self allowjump( 1 ); self disableinvulnerability(); self digitaldistortsetparams( 0, 0 ); level.friendlyfiredisabled = 0; setsaveddvar( "cg_fov", 65 ); setsaveddvar( "ammoCounterHide", "0" ); setsaveddvar( "actionSlotsHide", "0" ); setsaveddvar( "hud_showstance", 1 ); self.using_sam = 0; if ( !level.console && !common_scripts\utility::is_player_gamepad_enabled() ) self enablemousesteer( 0 ); level.sam_launchers[0] show(); level.sam_launchers[0] setcontents( level.sam_launchers[0].old_contents ); level.sam_launchers[level.sam_launcher_index] delete(); level.sam_launchers = maps\_utility::array_remove_index( level.sam_launchers, level.sam_launcher_index ); level.sam_damage_dummy delete(); level.sam_damage_dummy = undefined; foreach ( var_5 in getaiarray( "allies" ) ) { if ( isdefined( var_5.magic_bullet_shield ) && isdefined( var_5.script_noteworthy ) && var_5.script_noteworthy != "hesh" ) var_5 maps\_utility::stop_magic_bullet_shield(); } } sam_remove_control() { self notify( "remove_sam_control" ); self notify( "stop_lockon_sound" ); self endon( "death" ); level.player enablemousesteer( 0 ); self setweaponhudiconoverride( "actionslot4", "" ); if ( isdefined( self.using_sam ) && self.using_sam ) sam_exit(); level.sam_targets = []; } sam_hud() { self endon( "remove_sam_control" ); self endon( "exit_sam" ); self endon( "death" ); self.sam_hud_elements = []; self.sam_hud_elements["screen_overlay"] = newclienthudelem( self ); self.sam_hud_elements["screen_overlay"].x = 0; self.sam_hud_elements["screen_overlay"].y = 0; self.sam_hud_elements["screen_overlay"].alignx = "left"; self.sam_hud_elements["screen_overlay"].aligny = "top"; self.sam_hud_elements["screen_overlay"].horzalign = "fullscreen"; self.sam_hud_elements["screen_overlay"].vertalign = "fullscreen"; self.sam_hud_elements["screen_overlay"].alpha = 1; self.sam_hud_elements["screen_overlay"] setshader( "crr_hud_missile_system_overlay_01", 640, 480 ); self.sam_hud_elements["scanlines"] = newclienthudelem( self ); self.sam_hud_elements["scanlines"].x = 0; self.sam_hud_elements["scanlines"].y = 0; self.sam_hud_elements["scanlines"].alignx = "left"; self.sam_hud_elements["scanlines"].aligny = "top"; self.sam_hud_elements["scanlines"].horzalign = "fullscreen"; self.sam_hud_elements["scanlines"].vertalign = "fullscreen"; self.sam_hud_elements["scanlines"].alpha = 0.25; self.sam_hud_elements["scanlines"] setshader( "crr_hud_interlace_mask", 640, 480 ); self.sam_hud_elements["pitch_ladder_left"] = maps\_hud_util::createclienticon( "crr_hud_missl_sys_ladder_l", 60, 480 ); self.sam_hud_elements["pitch_ladder_left"].alignx = "left"; self.sam_hud_elements["pitch_ladder_left"].aligny = "middle"; self.sam_hud_elements["pitch_ladder_left"].horzalign = "left"; self.sam_hud_elements["pitch_ladder_left"].vertalign = "middle"; self.sam_hud_elements["pitch_ladder_left"].x = 15; self.sam_hud_elements["pitch_ladder_left"].y = 0; self.sam_hud_elements["pitch_ladder_left"].alpha = 1; self.sam_hud_elements["pitch_ladder_left"].sort = 50; self.sam_hud_elements["pitch_ladder_right"] = maps\_hud_util::createclienticon( "crr_hud_missl_sys_ladder_r", 60, 480 ); self.sam_hud_elements["pitch_ladder_right"].alignx = "right"; self.sam_hud_elements["pitch_ladder_right"].aligny = "middle"; self.sam_hud_elements["pitch_ladder_right"].horzalign = "right"; self.sam_hud_elements["pitch_ladder_right"].vertalign = "middle"; self.sam_hud_elements["pitch_ladder_right"].x = -15; self.sam_hud_elements["pitch_ladder_right"].y = 0; self.sam_hud_elements["pitch_ladder_right"].alpha = 1; self.sam_hud_elements["pitch_ladder_right"].sort = 50; self.sam_hud_elements["pitch_arrow_left"] = maps\_hud_util::createclienticon( "crr_hud_arrow_l", 10, 10 ); self.sam_hud_elements["pitch_arrow_left"].alignx = "right"; self.sam_hud_elements["pitch_arrow_left"].aligny = "middle"; self.sam_hud_elements["pitch_arrow_left"].horzalign = "left"; self.sam_hud_elements["pitch_arrow_left"].vertalign = "middle"; self.sam_hud_elements["pitch_arrow_left"].x = 12; self.sam_hud_elements["pitch_arrow_left"].y = 0; self.sam_hud_elements["pitch_arrow_left"].alpha = 1; self.sam_hud_elements["pitch_arrow_left"].sort = 50; self.sam_hud_elements["pitch_arrow_right"] = maps\_hud_util::createclienticon( "crr_hud_arrow_r", 10, 10 ); self.sam_hud_elements["pitch_arrow_right"].alignx = "left"; self.sam_hud_elements["pitch_arrow_right"].aligny = "middle"; self.sam_hud_elements["pitch_arrow_right"].horzalign = "right"; self.sam_hud_elements["pitch_arrow_right"].vertalign = "middle"; self.sam_hud_elements["pitch_arrow_right"].x = -12; self.sam_hud_elements["pitch_arrow_right"].y = 0; self.sam_hud_elements["pitch_arrow_right"].alpha = 1; self.sam_hud_elements["pitch_arrow_right"].sort = 50; self.sam_hud_elements["class_2"] = maps\_hud_util::createclienticon( "crr_hud_icon_class_2", 15, 15 ); self.sam_hud_elements["class_2"].alignx = "center"; self.sam_hud_elements["class_2"].aligny = "middle"; self.sam_hud_elements["class_2"].horzalign = "center"; self.sam_hud_elements["class_2"].vertalign = "middle"; self.sam_hud_elements["class_2"].x = 46; self.sam_hud_elements["class_2"].y = common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 1, -39, -30 ); self.sam_hud_elements["class_2"].alpha = 0; self.sam_hud_elements["class_2"].sort = 50; self.sam_hud_elements["class_4"] = maps\_hud_util::createclienticon( "crr_hud_icon_class_4", 15, 15 ); self.sam_hud_elements["class_4"].alignx = "center"; self.sam_hud_elements["class_4"].aligny = "middle"; self.sam_hud_elements["class_4"].horzalign = "center"; self.sam_hud_elements["class_4"].vertalign = "middle"; self.sam_hud_elements["class_4"].x = 46; self.sam_hud_elements["class_4"].y = self.sam_hud_elements["class_2"].y; self.sam_hud_elements["class_4"].alpha = 0; self.sam_hud_elements["class_4"].sort = 50; self.sam_hud_elements["gunship"] = maps\_hud_util::createclienticon( "crr_hud_icon_fed_gunship", common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 1, 64, 48 ), common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 1, 64, 48 ) ); self.sam_hud_elements["gunship"].alignx = "center"; self.sam_hud_elements["gunship"].aligny = "top"; self.sam_hud_elements["gunship"].horzalign = "center"; self.sam_hud_elements["gunship"].vertalign = "middle"; self.sam_hud_elements["gunship"].x = common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 1, 203, 152 ); self.sam_hud_elements["gunship"].y = common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 1, -108, -104 ); self.sam_hud_elements["gunship"].alpha = 0; self.sam_hud_elements["gunship"].sort = 50; self.sam_hud_elements["helicopter"] = maps\_hud_util::createclienticon( "crr_hud_icon_fed_helicopter", common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 1, 64, 48 ), common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 1, 64, 48 ) ); self.sam_hud_elements["helicopter"].alignx = "center"; self.sam_hud_elements["helicopter"].aligny = "top"; self.sam_hud_elements["helicopter"].horzalign = "center"; self.sam_hud_elements["helicopter"].vertalign = "middle"; self.sam_hud_elements["helicopter"].x = self.sam_hud_elements["gunship"].x; self.sam_hud_elements["helicopter"].y = self.sam_hud_elements["gunship"].y; self.sam_hud_elements["helicopter"].alpha = 0; self.sam_hud_elements["helicopter"].sort = 50; self.sam_hud_elements["inflatable"] = maps\_hud_util::createclienticon( "crr_hud_icon_fed_inflatable", common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 1, 64, 48 ), common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 1, 64, 48 ) ); self.sam_hud_elements["inflatable"].alignx = "center"; self.sam_hud_elements["inflatable"].aligny = "top"; self.sam_hud_elements["inflatable"].horzalign = "center"; self.sam_hud_elements["inflatable"].vertalign = "middle"; self.sam_hud_elements["inflatable"].x = self.sam_hud_elements["gunship"].x; self.sam_hud_elements["inflatable"].y = self.sam_hud_elements["gunship"].y; self.sam_hud_elements["inflatable"].alpha = 0; self.sam_hud_elements["inflatable"].sort = 50; self.sam_hud_elements["radar"] = maps\_hud_util::createclienticon( "cinematic", 160, 85 ); self.sam_hud_elements["radar"].alignx = "center"; self.sam_hud_elements["radar"].aligny = "bottom"; self.sam_hud_elements["radar"].horzalign = "center"; self.sam_hud_elements["radar"].vertalign = "bottom"; self.sam_hud_elements["radar"].x = 0; self.sam_hud_elements["radar"].y = 8; self.sam_hud_elements["radar"].alpha = 1; self.sam_hud_elements["radar"].sort = 50; self.sam_hud_elements["left_pitch_val"] = maps\_hud_util::createclientfontstring( "hudsmall", 0.6 ); self.sam_hud_elements["left_pitch_val"].alignx = "left"; self.sam_hud_elements["left_pitch_val"].aligny = "bottom"; self.sam_hud_elements["left_pitch_val"].horzalign = "left"; self.sam_hud_elements["left_pitch_val"].vertalign = "bottom"; self.sam_hud_elements["left_pitch_val"].x = 31; self.sam_hud_elements["left_pitch_val"].y = 14; self.sam_hud_elements["left_pitch_val"].alpha = 0.5; self.sam_hud_elements["left_pitch_val"].sort = 50; self.sam_hud_elements["right_pitch_val"] = maps\_hud_util::createclientfontstring( "hudsmall", 0.6 ); self.sam_hud_elements["right_pitch_val"].alignx = "right"; self.sam_hud_elements["right_pitch_val"].aligny = "bottom"; self.sam_hud_elements["right_pitch_val"].horzalign = "right"; self.sam_hud_elements["right_pitch_val"].vertalign = "bottom"; self.sam_hud_elements["right_pitch_val"].x = -31; self.sam_hud_elements["right_pitch_val"].y = 14; self.sam_hud_elements["right_pitch_val"].alpha = 0.5; self.sam_hud_elements["right_pitch_val"].sort = 50; self.sam_hud_elements["time"] = maps\_hud_util::createclientfontstring( "hudsmall", 0.7 ); self.sam_hud_elements["time"].alignx = "left"; self.sam_hud_elements["time"].aligny = "top"; self.sam_hud_elements["time"].horzalign = "left"; self.sam_hud_elements["time"].vertalign = "top"; self.sam_hud_elements["time"].x = 150; self.sam_hud_elements["time"].y = -14; self.sam_hud_elements["time"].alpha = 0.75; self.sam_hud_elements["time"].sort = 50; self.sam_hud_elements["engage"] = maps\_hud_util::createclientfontstring( "hudsmall", 0.7 ); self.sam_hud_elements["engage"].alignx = "center"; self.sam_hud_elements["engage"].aligny = "bottom"; self.sam_hud_elements["engage"].horzalign = "center"; self.sam_hud_elements["engage"].vertalign = "middle"; self.sam_hud_elements["engage"].x = self.sam_hud_elements["gunship"].x; self.sam_hud_elements["engage"].y = common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 1, -108, -112 ); self.sam_hud_elements["engage"].alpha = 0; self.sam_hud_elements["engage"].sort = 50; self.sam_hud_elements["engage"].hidewheninmenu = 1; self.sam_hud_elements["engage"] settext( &"CARRIER_ENGAGE" ); self.sam_hud_elements["compass_top"] = maps\_hud_util::createclienticon( "white", 195, 1 ); self.sam_hud_elements["compass_top"].alignx = "center"; self.sam_hud_elements["compass_top"].aligny = "bottom"; self.sam_hud_elements["compass_top"].horzalign = "center"; self.sam_hud_elements["compass_top"].vertalign = "top"; self.sam_hud_elements["compass_top"].x = 0; self.sam_hud_elements["compass_top"].y = 0; self.sam_hud_elements["compass_top"].alpha = 0.75; self.sam_hud_elements["compass_top"].sort = 50; self.sam_hud_elements["compass_left"] = maps\_hud_util::createclienticon( "white", 1, 7 ); self.sam_hud_elements["compass_left"].alignx = "center"; self.sam_hud_elements["compass_left"].aligny = "top"; self.sam_hud_elements["compass_left"].horzalign = "center"; self.sam_hud_elements["compass_left"].vertalign = "top"; self.sam_hud_elements["compass_left"].x = -97; self.sam_hud_elements["compass_left"].y = 0; self.sam_hud_elements["compass_left"].alpha = 0.75; self.sam_hud_elements["compass_left"].sort = 50; self.sam_hud_elements["compass_right"] = maps\_hud_util::createclienticon( "white", 1, 7 ); self.sam_hud_elements["compass_right"].alignx = "center"; self.sam_hud_elements["compass_right"].aligny = "top"; self.sam_hud_elements["compass_right"].horzalign = "center"; self.sam_hud_elements["compass_right"].vertalign = "top"; self.sam_hud_elements["compass_right"].x = 97; self.sam_hud_elements["compass_right"].y = 0; self.sam_hud_elements["compass_right"].alpha = 0.75; self.sam_hud_elements["compass_right"].sort = 50; thread sam_update_pitch_values(); thread sam_update_time(); thread sam_update_radar(); thread sam_update_compass(); setsaveddvar( "cg_cinematicFullScreen", "0" ); cinematicingameloopresident( "carrier_sparrow_radar" ); } sam_clear_hud() { self notify( "sam_clear_hud" ); var_0 = getarraykeys( self.sam_hud_elements ); foreach ( var_2 in var_0 ) { self.sam_hud_elements[var_2] destroy(); self.sam_hud_elements[var_2] = undefined; } var_0 = getarraykeys( self.sam_hud_radar_elements ); foreach ( var_2 in var_0 ) { self.sam_hud_radar_elements[var_2] destroy(); self.sam_hud_radar_elements[var_2] = undefined; } self.sam_hud_elements = undefined; self.sam_hud_radar_elements = undefined; } sam_update_pitch_values() { self endon( "sam_clear_hud" ); for (;;) { var_0 = ( angleclamp180( self getplayerangles()[0] ), angleclamp180( self getplayerangles()[1] ), angleclamp180( self getplayerangles()[2] ) ); self.sam_hud_elements["pitch_arrow_left"].y = ( var_0[0] - var_0[2] ) / 45 * 205; self.sam_hud_elements["pitch_arrow_right"].y = ( var_0[0] + var_0[2] ) / 45 * 205; self.sam_hud_elements["left_pitch_val"] settext( 0 - var_0[0] + var_0[2] ); self.sam_hud_elements["right_pitch_val"] settext( 0 - var_0[0] - var_0[2] ); wait 0.05; } } sam_update_time() { self endon( "sam_clear_hud" ); var_0 = 8; var_1 = 35; var_2 = 16; var_3 = 0; for (;;) { var_4 = ""; if ( var_0 < 10 ) var_4 = "0"; var_4 = var_4 + ( var_0 + ":" ); if ( var_1 < 10 ) var_4 = var_4 + "0"; var_4 = var_4 + ( var_1 + ":" ); if ( var_2 < 10 ) var_4 = var_4 + "0"; var_4 = var_4 + ( var_2 + ":" ); if ( var_3 < 10 ) var_4 = var_4 + "0"; var_4 = var_4 + var_3; self.sam_hud_elements["time"] settext( var_4 ); wait 0.05; var_3 = var_3 + 5; if ( var_3 >= 100 ) { var_3 = 0; var_2++; if ( var_2 >= 60 ) { var_2 = 0; var_1++; if ( var_1 >= 60 ) { var_1 = 0; var_0++; if ( var_0 >= 24 ) var_0 = 0; } } } } } sam_update_radar() { self endon( "sam_clear_hud" ); self.sam_hud_radar_elements = []; for (;;) { var_0 = 0; var_1 = self getplayerangles(); var_2 = anglestoforward( ( 0, var_1[1], 0 ) ); var_3 = anglestoright( ( 0, var_1[1], 0 ) ); foreach ( var_5 in vehicle_getarray() ) { if ( ( var_5 maps\_vehicle::ishelicopter() || var_5.classname == "script_vehicle_y_8_gunship" ) && var_5.health > 0 ) { var_6 = var_5.origin - self geteye(); var_6 = vectornormalize( ( var_6[0], var_6[1], 0 ) ); var_7 = vectordot( var_6, var_2 ); if ( var_7 < 0 ) continue; var_8 = vectordot( var_6, var_3 ); var_9 = distance2d( self geteye(), var_5.origin ); if ( !isdefined( self.sam_hud_radar_elements[var_0] ) ) { self.sam_hud_radar_elements[var_0] = maps\_hud_util::createclienticon( "hud_red_dot", 4, 4 ); self.sam_hud_radar_elements[var_0].alignx = "center"; self.sam_hud_radar_elements[var_0].aligny = "middle"; self.sam_hud_radar_elements[var_0].horzalign = "center"; self.sam_hud_radar_elements[var_0].vertalign = "bottom"; self.sam_hud_radar_elements[var_0].sort = 100; self.sam_hud_radar_elements[var_0].alpha = 0.5; } self.sam_hud_radar_elements[var_0].x = 0 + var_8 * min( pow( var_9 / 25000, 0.5 ), 1.0 ) * 48; self.sam_hud_radar_elements[var_0].y = -23 - var_7 * min( pow( var_9 / 25000, 0.5 ), 1.0 ) * 48; self.sam_hud_radar_elements[var_0].alpha = 0.5; var_0++; } } for ( var_11 = var_0; var_11 < self.sam_hud_radar_elements.size; var_11++ ) self.sam_hud_radar_elements[var_11].alpha = 0; wait 0.05; } } sam_update_compass() { self endon( "sam_clear_hud" ); var_0 = 5; var_1 = 45; var_2 = 90; var_3 = self.sam_hud_elements["compass_left"].x; var_4 = self.sam_hud_elements["compass_top"].y; var_5 = abs( var_3 * 2 ); var_6 = 5; var_7 = 0.8; var_8 = int( var_2 / var_0 ); var_9 = var_5 / var_8; for ( var_10 = 0; var_10 < var_8; var_10++ ) { self.sam_hud_elements["compass_tick_mark_" + var_10] = maps\_hud_util::createicon( "white", 1, var_6 ); self.sam_hud_elements["compass_tick_mark_" + var_10].alignx = "center"; self.sam_hud_elements["compass_tick_mark_" + var_10].aligny = "top"; self.sam_hud_elements["compass_tick_mark_" + var_10].horzalign = "center"; self.sam_hud_elements["compass_tick_mark_" + var_10].vertalign = "top"; self.sam_hud_elements["compass_tick_mark_" + var_10].x = 0; self.sam_hud_elements["compass_tick_mark_" + var_10].y = var_4; self.sam_hud_elements["compass_tick_mark_" + var_10].alpha = var_7; self.sam_hud_elements["compass_tick_mark_" + var_10].sort = 50; } for ( var_10 = 0; var_10 < int( var_2 / var_1 ); var_10++ ) { self.sam_hud_elements["compass_label_mark_" + var_10] = maps\_hud_util::createclientfontstring( "default", 1.0 ); self.sam_hud_elements["compass_label_mark_" + var_10].alignx = "center"; self.sam_hud_elements["compass_label_mark_" + var_10].aligny = "top"; self.sam_hud_elements["compass_label_mark_" + var_10].horzalign = "center"; self.sam_hud_elements["compass_label_mark_" + var_10].vertalign = "top"; self.sam_hud_elements["compass_label_mark_" + var_10].alpha = var_7; self.sam_hud_elements["compass_label_mark_" + var_10].x = 0; self.sam_hud_elements["compass_label_mark_" + var_10].y = var_4 + var_6 + 1; self.sam_hud_elements["compass_label_mark_" + var_10].sort = 50; } for (;;) { var_11 = angleclamp( getnorthyaw() - self getplayerangles()[1] ); var_12 = var_3 + ( 1.0 - maps\carrier_code::modulus( abs( var_11 ), var_0 ) / var_0 ) * var_9; var_13 = int( floor( var_11 / var_0 ) - var_8 / 2 ) * var_0; var_14 = 0; for ( var_10 = 0; var_10 < var_8; var_10++ ) { var_13 = var_13 + var_0; self.sam_hud_elements["compass_tick_mark_" + var_10].x = var_12 + var_10 * var_9; if ( maps\carrier_code::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; var_15 = ""; if ( var_13 == 0 ) var_15 = &"ENEMY_HQ_NORTH"; else if ( var_13 == 45 ) var_15 = &"ENEMY_HQ_NORTHEAST"; else if ( var_13 == 90 ) var_15 = &"ENEMY_HQ_EAST"; else if ( var_13 == 135 ) var_15 = &"ENEMY_HQ_SOUTHEAST"; else if ( var_13 == 180 ) var_15 = &"ENEMY_HQ_SOUTH"; else if ( var_13 == 225 ) var_15 = &"ENEMY_HQ_SOUTHWEST"; else if ( var_13 == 270 ) var_15 = &"ENEMY_HQ_WEST"; else if ( var_13 == 315 ) var_15 = &"ENEMY_HQ_NORTHWEST"; self.sam_hud_elements["compass_label_mark_" + var_14].x = var_12 + var_10 * var_9; self.sam_hud_elements["compass_label_mark_" + var_14] settext( var_15 ); var_14++; } } wait 0.05; } } sam_monitor_damage() { level.player endon( "remove_sam_control" ); level.player endon( "exit_sam" ); level.player endon( "death" ); level.sam_max_health = 500; level.sam_health = level.sam_max_health; self setcandamage( 1 ); var_0 = 0; for (;;) { self waittill( "damage", var_1, var_2, var_3, var_4, var_5 ); if ( var_2 == level.player ) continue; level.sam_health = level.sam_health - 50; level.sam_health = max( level.sam_health, 0 ); var_6 = 1 - level.sam_health / level.sam_max_health; level.player digitaldistortsetparams( var_6 * 0.5, 1 ); level.player viewkick( 20, var_2.origin ); if ( var_5 == "MOD_PROJECTILE_SPLASH" ) { level.player setplayerangles( ( level.player getplayerangles()[0] - 5, level.player getplayerangles()[1], level.player getplayerangles()[2] - 5 ) ); earthquake( 0.7, 1.5, level.player geteye(), 800 ); level.player playrumbleonentity( "heavy_2s" ); var_0++; if ( var_0 == 1 ) common_scripts\utility::exploder( 5515 ); else if ( var_0 == 2 ) common_scripts\utility::exploder( 5525 ); } if ( var_6 >= 1 ) { level.player disableinvulnerability(); level.player kill(); continue; } thread sam_regen_health(); } } sam_regen_health() { level.player endon( "remove_sam_control" ); level.player endon( "exit_sam" ); level.player endon( "death" ); self endon( "damage" ); wait 3; while ( level.sam_health < level.sam_max_health ) { level.sam_health = clamp( level.sam_health + level.sam_max_health / 10 * 0.05, 0, level.sam_max_health ); var_0 = ( 1 - level.sam_health / level.sam_max_health ) * 0.5; level.player digitaldistortsetparams( var_0, var_0 ); wait 0.05; } } sam_control() { self endon( "remove_sam_control" ); self endon( "exit_sam" ); self endon( "death" ); sam_hud(); if ( !isdefined( self.lockon_sequence_active ) ) self.lockon_sequence_active = 0; wait 0.25; level.sam_launchers[level.sam_launcher_index].angles = vectortoangles( level.ac_130.origin - self geteye() ) + ( randomfloatrange( -30, 30 ), randomfloatrange( -30, 30 ), 0 ); for (;;) { var_0 = self getnormalizedcameramovement(); if ( !level.console && !level.player common_scripts\utility::is_player_gamepad_enabled() ) var_0 = ( var_0[0], var_0[1] * -1, 0 ); if ( abs( var_0[0] ) < 0.1 ) var_0 = ( 0.0, var_0[1], var_0[1] ); if ( abs( var_0[1] ) < 0.1 ) var_0 = ( var_0[0], 0.0, var_0[1] ); level.sam_launchers[level.sam_launcher_index].angles = level.sam_launchers[level.sam_launcher_index].angles - ( var_0[0] * common_scripts\utility::ter_op( getdvarfloat( "cg_fov" ) >= 65, 3.75, 1.0625 ) * common_scripts\utility::ter_op( self.lockon_sequence_active, 0.5, 1.0 ), var_0[1] * common_scripts\utility::ter_op( getdvarfloat( "cg_fov" ) >= 65, 3.75, 1.0625 ) * common_scripts\utility::ter_op( self.lockon_sequence_active, 0.5, 1.0 ), 0 ); level.sam_launchers[level.sam_launcher_index].angles = ( clamp( angleclamp180( level.sam_launchers[level.sam_launcher_index].angles[0] ), -30, 30 ), clamp( level.sam_launchers[level.sam_launcher_index].angles[1], -65, 100 ), level.sam_launchers[level.sam_launcher_index].angles[2] ); wait 0.05; } } sam_use_auto_lock_on() { self endon( "exit_sam" ); self endon( "remove_sam_control" ); self endon( "death" ); self notifyonplayercommand( "fire_missiles", "+attack" ); self notifyonplayercommand( "fire_missiles", "+speed_throw" ); self notifyonplayercommand( "fire_missiles", "+attack_akimbo_accessible" ); for (;;) { self.lockon_sequence_active = 0; thread sam_start_missile_lockon(); while ( level.sam_lockon_targets.size == 0 ) self waittill( "fire_missiles" ); self notify( "sam_missile_lockon_end" ); if ( self.lockon_sequence_active ) { self notify( "end_lockon_sequence" ); self.lockon_sequence_active = 0; } sam_fire_missiles(); wait 1.25; } } sam_ads() { self endon( "exit_sam" ); self endon( "remove_sam_control" ); self endon( "death" ); self notifyonplayercommand( "ads_on", "+speed_throw" ); self notifyonplayercommand( "ads_off", "-speed_throw" ); self.sam_ads = 0; for (;;) { if ( !self adsbuttonpressed() ) self waittill( "ads_on" ); self lerpfov( 15, 0.25 ); self.sam_ads = 1; wait 0.25; if ( self adsbuttonpressed() ) self waittill( "ads_off" ); self lerpfov( 65, 0.25 ); self.sam_ads = 0; wait 0.25; } } sam_start_missile_lockon() { self endon( "exit_sam" ); self endon( "remove_sam_control" ); self endon( "sam_missile_lockon_end" ); self endon( "death" ); var_0 = self; var_1 = 0.0; var_2 = 0.0; var_3 = 0; var_4 = 64; var_5 = 32; var_6 = 784000000; self.lockon_sequence_active = 0; if ( !isdefined( level.sam_targets ) ) level.sam_targets = []; for (;;) { if ( isdefined( level.sam_lockon_targets ) && level.sam_lockon_targets.size < 1 ) { if ( var_0 == self ) { var_7 = undefined; var_8 = 999999999; foreach ( var_10 in level.sam_targets ) { if ( isdefined( var_10 ) && isalive( var_10 ) && !common_scripts\utility::array_contains( level.sam_lockon_targets, var_10 ) && target_istarget( var_10 ) && target_isinrect( var_10, self, getdvarfloat( "cg_fov" ), var_4, var_5 ) && ( var_10.classname != "script_vehicle_y_8_gunship" || !isdefined( var_10.attacked_this_run ) || !var_10.attacked_this_run ) ) { var_11 = distancesquared( var_10.origin, self.origin ); if ( !isdefined( var_7 ) || var_11 < var_8 ) { if ( var_11 < var_6 ) { var_7 = var_10; var_8 = var_11; } } } } var_0 = var_7; if ( isdefined( var_0 ) ) { if ( var_0.classname == "script_vehicle_y_8_gunship" ) var_1 = 0.75; else var_1 = 0.25; var_2 = 0.0; var_3 = 0; thread looplocalseeksound( "scn_carr_sparrow_target", 0.4 ); target_hidefromplayer( var_0, self ); var_0 hudoutlinedisable(); if ( !self.lockon_sequence_active ) { self notify( "start_lockon_sequence" ); self.lockon_sequence_active = 1; } } else { var_0 = self; if ( self.lockon_sequence_active ) { self notify( "stop_lockon_sound" ); self notify( "end_lockon_sequence" ); self.lockon_sequence_active = 0; self.sam_hud_elements["gunship"].alpha = 0; self.sam_hud_elements["helicopter"].alpha = 0; self.sam_hud_elements["inflatable"].alpha = 0; self.sam_hud_elements["class_2"].alpha = 0; self.sam_hud_elements["class_4"].alpha = 0; self.sam_hud_elements["engage"].alpha = 0; } } } else { if ( !isdefined( var_0 ) || !target_istarget( var_0 ) ) { self notify( "stop_lockon_sound" ); var_0 = self; continue; } var_1 = var_1 - 0.05; var_2 = var_2 + 0.05; if ( var_1 < 0.0 ) { self notify( "stop_lockon_sound" ); self.sam_hud_elements["gunship"].alpha = 0; self.sam_hud_elements["helicopter"].alpha = 0; self.sam_hud_elements["inflatable"].alpha = 0; self.sam_hud_elements["class_2"].alpha = 0; self.sam_hud_elements["class_4"].alpha = 0; self.sam_hud_elements["engage"].alpha = 1; if ( var_0 maps\_vehicle::ishelicopter() ) { self.sam_hud_elements["helicopter"].alpha = 1; self.sam_hud_elements["class_2"].alpha = 1; } else if ( var_0.classname == "script_vehicle_y_8_gunship" ) { self.sam_hud_elements["gunship"].alpha = 1; self.sam_hud_elements["class_4"].alpha = 1; } else { self.sam_hud_elements["inflatable"].alpha = 1; self.sam_hud_elements["class_2"].alpha = 1; } target_showtoplayer( var_0, self ); target_drawcornersonly( var_0, 0 ); var_0 hudoutlineenable( 0, 1 ); var_0.lased = 1; thread sam_break_lockon( var_0, var_4, var_5 ); level.sam_lockon_targets = common_scripts\utility::array_add( level.sam_lockon_targets, var_0 ); var_0 = self; self playlocalsound( "scn_carr_sparrow_lock" ); } else if ( !target_isinrect( var_0, self, getdvarfloat( "cg_fov" ), var_4, var_5 ) ) { self notify( "stop_lockon_sound" ); target_hidefromplayer( var_0, self ); var_0 hudoutlinedisable(); var_0 = self; self.sam_hud_elements["gunship"].alpha = 0; self.sam_hud_elements["helicopter"].alpha = 0; self.sam_hud_elements["inflatable"].alpha = 0; self.sam_hud_elements["class_4"].alpha = 0; self.sam_hud_elements["class_2"].alpha = 0; self.sam_hud_elements["engage"].alpha = 0; } else if ( var_2 == 0.05 ) { var_2 = 0.0; var_3 = !var_3; if ( var_3 ) target_showtoplayer( var_0, self ); else target_hidefromplayer( var_0, self ); } } } wait 0.05; } } sam_break_lockon( var_0, var_1, var_2 ) { self endon( "death" ); self endon( "lockon_broken" ); var_0 endon( "death" ); while ( target_isinrect( var_0, self, getdvarfloat( "cg_fov" ), var_1 * 1.25, var_2 * 1.25 ) ) wait 0.05; target_hidefromplayer( var_0, self ); target_drawcornersonly( var_0, 1 ); var_0 hudoutlinedisable(); var_0.lased = 0; level.sam_lockon_targets = common_scripts\utility::array_remove( level.sam_lockon_targets, var_0 ); if ( var_0.classname != "script_vehicle_y_8_gunship" ) { var_0 thread sam_add_target(); var_0 = self; } self notify( "lockon_broken" ); } looplocalseeksound( var_0, var_1 ) { self endon( "stop_lockon_sound" ); self endon( "death" ); for (;;) { self playlocalsound( var_0 ); wait( var_1 ); } } sam_fire_missiles() { self endon( "remove_sam_control" ); self endon( "exit_sam" ); self endon( "death" ); var_0 = 0; foreach ( var_2 in level.sam_lockon_targets ) { if ( isdefined( var_2 ) && target_istarget( var_2 ) && isalive( var_2 ) && level.sam_missiles.size > 0 ) { var_0 = 1; target_setattackmode( var_2, "direct" ); target_hidefromplayer( var_2, self ); var_2 hudoutlinedisable(); if ( var_2.classname == "script_vehicle_y_8_gunship" ) { var_2.attacked_this_run = 1; var_3 = anglestoforward( var_2.angles ) * 256 + ( 0, 0, 64 ); if ( !isdefined( var_2.left_missile_target ) ) var_2.left_missile_target = spawn( "script_origin", var_2.origin ); if ( !isdefined( var_2.right_missile_target ) ) var_2.right_missile_target = spawn( "script_origin", var_2.origin ); if ( !isdefined( var_2.bottom_missile_target ) ) var_2.bottom_missile_target = spawn( "script_origin", var_2.origin ); var_2.left_missile_target.origin = var_2.origin + var_3 - anglestoright( self getplayerangles() ) * 5000; var_2.right_missile_target.origin = var_2.origin + var_3 + anglestoright( self getplayerangles() ) * 5000; var_2.bottom_missile_target.origin = var_2.origin + var_3 - anglestoup( self getplayerangles() ) * 1000; var_2 thread sam_update_missile_targets(); for ( var_4 = 0; var_4 < 4; var_4++ ) { var_5 = sam_fire_missile(); if ( var_4 == 0 ) { var_5 thread sam_missile_lockon( var_2.left_missile_target ); var_2.left_missile_target.missile = var_5; } else if ( var_4 == 2 ) { var_5 thread sam_missile_lockon( var_2.right_missile_target ); var_2.right_missile_target.missile = var_5; } else if ( var_4 == 3 ) { var_5 thread sam_missile_lockon( var_2.bottom_missile_target ); var_2.bottom_missile_target.missile = var_5; } else { var_5 thread sam_missile_lockon( var_2 ); var_2 notify( "sam_targeted", var_5 ); } earthquake( 0.4, 0.15, self.origin, 999999999 ); self playrumbleonentity( "ac130_40mm_fire" ); wait( randomfloatrange( 0.05, 0.15 ) ); } } else { for ( var_4 = 0; var_4 < 2; var_4++ ) { var_5 = sam_fire_missile(); var_2 notify( "sam_targeted", var_5 ); var_5 thread sam_missile_lockon( var_2 ); earthquake( 0.4, 0.15, self.origin, 999999999 ); self playrumbleonentity( "ac130_40mm_fire" ); wait( randomfloatrange( 0.05, 0.15 ) ); } } self.sam_hud_elements["gunship"].alpha = 0; self.sam_hud_elements["helicopter"].alpha = 0; self.sam_hud_elements["inflatable"].alpha = 0; self.sam_hud_elements["class_2"].alpha = 0; self.sam_hud_elements["class_4"].alpha = 0; self.sam_hud_elements["engage"].alpha = 0; } } level.sam_targets = common_scripts\utility::array_remove_array( level.sam_targets, level.sam_lockon_targets ); level.sam_lockon_targets = []; } sam_fire_missile() { self endon( "remove_sam_control" ); self endon( "exit_sam" ); var_0 = level.sam_missiles[0]; var_1 = magicbullet( "sparrow_missile", var_0.origin, var_0.origin + anglestoforward( var_0.angles ) * 100000, level.player ); level notify( "sparrow_missile_fired" ); level.sam_missiles = maps\_utility::array_remove_index( level.sam_missiles, 0 ); wait 0.05; var_0 hide(); var_0 thread sam_reload_missile(); return var_1; } sam_reload_missile() { self endon( "remove_sam_control" ); self endon( "exit_sam" ); self endon( "death" ); wait 1; level.sam_missiles[level.sam_missiles.size] = self; } get_current_sam() { return level.sam_launchers[level.sam_launcher_index]; } load_sam_missiles() { level.sam_missiles = []; var_0 = 1; for ( var_1 = 0; var_1 < 12; var_1++ ) { var_2 = get_current_sam() gettagorigin( "tag_missile" + var_0 ); var_3 = get_current_sam() gettagangles( "tag_missile" + var_0 ); level.sam_missiles[var_1] = spawn( "script_model", var_2 ); level.sam_missiles[var_1] setmodel( "tag_origin" ); level.sam_missiles[var_1].angles = var_3; level.sam_missiles[var_1] linkto( get_current_sam() ); level.sam_missiles[var_1].missile_index = var_0; level.sam_missiles[var_1] setcontents( 0 ); if ( maps\carrier_code::modulus( var_1, 2 ) == 0 ) { var_0 = var_0 + 6; continue; } var_0 = var_0 - 5; } } clear_sam_missiles() { if ( isdefined( level.sam_missiles ) && level.sam_missiles.size > 0 ) { foreach ( var_1 in level.sam_missiles ) { var_1 unlink(); var_1 delete(); } } } sam_add_target() { if ( !isdefined( level.sam_targets ) ) level.sam_targets = []; if ( !common_scripts\utility::array_contains( level.sam_targets, self ) ) { level.sam_targets[level.sam_targets.size] = self; add_target( self ); } foreach ( var_1 in level.sam_targets ) { if ( isdefined( var_1 ) ) var_1 thread remove_sam_target_on_death(); } } add_target( var_0 ) { var_0 enableaimassist(); target_set( var_0 ); target_setshader( var_0, "crr_hud_lock_on_box" ); target_setscaledrendermode( var_0, 1 ); target_hidefromplayer( var_0, level.player ); target_drawcornersonly( var_0, 1 ); target_setmaxsize( var_0, 160 ); } remove_sam_target_on_death() { self notify( "remove_on_death_call" ); self endon( "remove_on_death_call" ); level.player endon( "stop_using_sam" ); level.player endon( "death" ); common_scripts\utility::waittill_any( "death", "delete" ); if ( isdefined( self ) && target_istarget( self ) ) { target_remove( self ); level.sam_targets = common_scripts\utility::array_remove( level.sam_targets, self ); if ( isdefined( level.sam_lockon_targets ) ) level.sam_lockon_targets = common_scripts\utility::array_remove( level.sam_lockon_targets, self ); } if ( isdefined( level.sam_targets ) ) level.sam_targets = common_scripts\utility::array_removeundefined( level.sam_targets ); if ( isdefined( level.sam_lockon_targets ) ) level.sam_lockon_targets = common_scripts\utility::array_removeundefined( level.sam_lockon_targets ); } sam_missile_lockon( var_0 ) { var_0 endon( "death" ); wait 0.1; if ( isdefined( var_0 ) ) { var_1 = ( 0, 0, 0 ); if ( isdefined( var_0.vehicletype ) && var_0 maps\_vehicle::ishelicopter() ) var_1 = ( 0, 0, -80 ); else if ( isdefined( var_0.vehicletype ) && var_0 maps\_vehicle::isairplane() ) var_1 = ( 0, 0, 64 ); else if ( isdefined( var_0.vehicletype ) && var_0.classname == "script_vehicle_y_8_gunship" ) var_1 = anglestoforward( var_0.angles ) * 256 + ( 0, 0, 64 ); else if ( isdefined( var_0.vehicletype ) && var_0.classname == "script_vehicle_zodiac_iw6" ) var_1 = ( 0, 0, 20 ); if ( isdefined( self ) && isvalidmissile( self ) ) self missile_settargetent( var_0, var_1 ); } var_2 = 10; thread missile_life( var_0, var_2 ); thread kill_target( var_0 ); } sam_update_missile_targets() { var_0 = distance( self.left_missile_target.origin, self.origin + anglestoforward( self.angles ) * 256 + ( 0, 0, 64 ) ); var_1 = distance( self.bottom_missile_target.origin, self.origin + anglestoforward( self.angles ) * 256 + ( 0, 0, 64 ) ); var_2 = 1.5; var_3 = 1.5; wait 0.35; while ( var_3 > 0 && isdefined( self ) ) { var_4 = self.origin + anglestoforward( self.angles ) * 256 + ( 0, 0, 64 ); self.left_missile_target.origin = var_4 + vectornormalize( self.left_missile_target.origin - var_4 ) * var_0 * var_3 / var_2; self.right_missile_target.origin = var_4 + vectornormalize( self.right_missile_target.origin - var_4 ) * var_0 * var_3 / var_2; self.bottom_missile_target.origin = var_4 + vectornormalize( self.bottom_missile_target.origin - var_4 ) * var_1 * var_3 / var_2; wait 0.05; var_3 = var_3 - 0.05; } if ( isdefined( self ) ) { self.left_missile_target delete(); self.right_missile_target delete(); self.bottom_missile_target delete(); } } missile_life( var_0, var_1 ) { self endon( "death" ); var_0 common_scripts\utility::waittill_any_timeout( var_1, "missile_hit" ); self notify( "missile_timer_ran_out" ); if ( isdefined( self ) ) self delete(); } kill_target( var_0 ) { self endon( "missile_timer_ran_out" ); self waittill( "death" ); var_0 notify( "missile_hit" ); if ( isdefined( var_0.vehicletype ) && var_0 maps\_vehicle::ishelicopter() ) var_0 kill(); else if ( isdefined( var_0.vehicletype ) && var_0.classname == "script_vehicle_zodiac_iw6" ) var_0 notify( "sparrow_hit_zodiac" ); }