iw6-scripts/maps/_remoteturret.gsc
2024-02-13 13:20:49 +01:00

799 lines
20 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
precache_cam_names( var_0 )
{
if ( !isdefined( var_0 ) || !isarray( var_0 ) )
return;
level._remoteturret_loc_table = var_0;
var_1 = get_terminals();
foreach ( var_3 in var_1 )
{
var_4 = var_3 common_scripts\utility::get_linked_ents();
foreach ( var_6 in var_4 )
{
if ( isdefined( var_0[var_6.script_startname] ) )
precachestring( var_0[var_6.script_startname] );
}
}
}
init()
{
precacheshader( "uav_crosshair" );
precacheshader( "uav_vertical_meter" );
precacheshader( "uav_horizontal_meter" );
precacheshader( "overlay_grain" );
precacheshader( "uav_arrow_up" );
precacheshader( "uav_arrow_left" );
precacheshader( "ac130_thermal_overlay_bar" );
var_0 = get_terminals();
common_scripts\utility::array_thread( var_0, ::remote_turret_terminal_think );
foreach ( var_2 in level.players )
var_2 maps\_utility::ent_flag_init( "on_remote_turret" );
common_scripts\utility::flag_init( "_remoteturret_manual_getoff" );
common_scripts\utility::flag_init( "_remoteturret_nofade" );
common_scripts\utility::flag_set( "_remoteturret_manual_getoff" );
}
get_terminals()
{
return getentarray( "remote_turret_terminal", "targetname" );
}
remote_turret_terminal_think()
{
var_0 = spawn( "script_model", self.origin );
self.trigger = var_0;
self.lastturretindex = 0;
self._remote_turrets = common_scripts\utility::get_linked_ents();
common_scripts\utility::array_thread( self._remote_turrets, ::setup_turret, self );
var_0.angles = self.angles;
var_0 setmodel( "com_laptop_2_open_obj" );
var_0 makeusable();
var_0 sethintstring( &"PLATFORM_HOLD_TO_USE" );
for (;;)
{
var_0 waittill( "trigger", var_1 );
var_0 common_scripts\utility::trigger_off();
var_1 thread maps\_utility::play_sound_on_entity( "intelligence_pickup" );
var_1 thread remote_turret_loop( self );
var_1 waittill( "get_off_turret" );
var_0 common_scripts\utility::trigger_on();
}
}
remote_turret_loop( var_0 )
{
self endon( "transfer_terminal" );
if ( common_scripts\utility::flag( "_remoteturret_manual_getoff" ) )
self notifyonplayercommand( "get_off_turret", "+stance" );
if ( var_0._remote_turrets.size > 1 )
thread turret_switch_input_loop( var_0 );
thread remote_turret_enable( var_0._remote_turrets[var_0.lastturretindex], var_0 );
thread cancel_on_player_damage();
self waittill( "get_off_turret" );
thread remote_turret_disable( var_0._remote_turrets[var_0.lastturretindex], var_0 );
maps\_utility::ent_flag_waitopen( "on_remote_turret" );
}
turret_switch_input_loop( var_0 )
{
self endon( "no_switching_allowed" );
self endon( "get_off_turret" );
self notifyonplayercommand( "next_turret", "weapnext" );
waittillframeend;
for (;;)
{
self waittill( "next_turret" );
if ( maps\_utility::ent_flag( "on_remote_turret" ) )
remote_turret_next( var_0 );
}
}
setup_turret( var_0 )
{
var_1 = self;
var_1 makeunusable();
var_1.issentrygun = 1;
if ( isdefined( var_1.target ) )
{
var_2 = var_1 common_scripts\utility::get_target_ent();
var_1.last_look_origin = var_2.origin;
}
if ( !isdefined( var_1.leftarc ) )
var_1.leftarc = 70;
if ( !isdefined( var_1.rightarc ) )
var_1.rightarc = 70;
if ( !isdefined( var_1.toparc ) )
var_1.toparc = 60;
if ( !isdefined( var_1.bottomarc ) )
var_1.bottomarc = 60;
var_1 setrightarc( var_1.rightarc );
var_1 setleftarc( var_1.rightarc );
var_1 settoparc( var_1.toparc );
var_1 setbottomarc( var_1.bottomarc );
var_1.terminal = var_0;
var_1.turret = spawnturret( "misc_turret", var_1.origin, var_1.weaponinfo );
var_1.turret.angles = var_1.angles;
var_1.turret setmodel( var_1.model );
var_1.turret hide();
var_1.turret makeunusable();
var_1.turret setdefaultdroppitch( 0 );
}
player_turret_shoot( var_0 )
{
var_0 endon( "stop_use_turret" );
for (;;)
{
while ( !self attackbuttonpressed() )
wait 0.05;
var_0 shootturret();
var_0 notify( "create_badplace" );
wait 0.05;
}
}
player_look_aim( var_0, var_1 )
{
var_0 endon( "stop_use_turret" );
var_2 = getaiarray( "axis" );
var_3 = var_0 gettagorigin( "tag_player" );
var_0 setmode( "manual" );
var_0 settargetentity( var_1 );
for (;;)
{
var_4 = self getplayerangles();
var_5 = anglestoforward( var_4 );
var_6 = var_3 + var_5 * 999999;
var_1.origin = var_6;
var_0.last_look_origin = var_6;
wait 0.1;
}
}
remote_turret_enable( var_0, var_1 )
{
self endon( "get_off_turret" );
var_0.attacker = self;
var_0.owner = self;
var_0 setsentryowner( self );
self freezecontrols( 1 );
self.oldangles = self getplayerangles();
self disableweapons();
holdstancechange( 0 );
rt_fade_out();
self thermalvisionon();
self remotecamerasoundscapeon();
text_titlecreate();
maps\_utility::ent_flag_set( "on_remote_turret" );
huditemshide();
thread turret_activate( var_0, var_1 );
rt_fade_in();
self freezecontrols( 0 );
}
remote_turret_disable( var_0, var_1 )
{
var_0.attacker = undefined;
var_0.owner = undefined;
self setsentryowner( undefined );
maps\_utility::ent_flag_clear( "on_remote_turret" );
if ( !common_scripts\utility::flag( "_remoteturret_nofade" ) )
rt_fade_out();
turret_deactivate( var_0, var_1 );
self enableweapons();
self thermalvisionoff();
self remotecamerasoundscapeoff();
self setplayerangles( self.oldangles );
holdstancechange( 1 );
huditemsshow();
text_titledestroy();
if ( !common_scripts\utility::flag( "_remoteturret_nofade" ) )
rt_fade_in();
}
remote_turret_next( var_0 )
{
maps\_utility::ent_flag_clear( "on_remote_turret" );
self endon( "get_off_turret" );
if ( !common_scripts\utility::flag( "_remoteturret_nofade" ) )
rt_fade_out();
turret_deactivate( var_0._remote_turrets[var_0.lastturretindex], var_0 );
var_0.lastturretindex = var_0.lastturretindex + 1;
var_0.lastturretindex = var_0.lastturretindex % var_0._remote_turrets.size;
thread turret_activate( var_0._remote_turrets[var_0.lastturretindex], var_0 );
if ( !common_scripts\utility::flag( "_remoteturret_nofade" ) )
rt_fade_in();
maps\_utility::ent_flag_set( "on_remote_turret" );
}
turret_activate( var_0, var_1 )
{
if ( isdefined( level._remoteturret_loc_table ) && isdefined( var_0.script_startname ) && isdefined( level._remoteturret_loc_table[var_0.script_startname] ) )
text_titlesettext( level._remoteturret_loc_table[var_0.script_startname] );
else
text_titlesettext( "CAMERA: " + ( var_1.lastturretindex + 1 ) );
var_0 hideonclient( self );
uav_enable_view();
var_2 = common_scripts\utility::spawn_tag_origin();
var_3 = var_0 gettagangles( "tag_origin" );
if ( isdefined( var_0.last_look_origin ) )
var_3 = vectortoangles( var_0.last_look_origin - var_0.origin );
self setplayerangles( ( var_3[0], var_3[1], self.angles[2] ) );
self playerlinkto( var_0, "tag_player", 0, var_0.rightarc * 0.9, var_0.leftarc * 0.9, var_0.toparc * 0.9, var_0.bottomarc * 0.9 );
var_0 turretfireenable();
var_0 makeusable();
var_0 useby( self );
var_0 makeunusable();
self disableturretdismount();
var_2 delete();
}
turret_deactivate( var_0, var_1 )
{
uav_disable_view();
var_0 turretfiredisable();
var_0 stopfiring();
wait 0.1;
self unlink();
self enableturretdismount();
var_0 makeusable();
var_0 useby( self );
var_0 makeunusable();
var_0 notify( "stop_use_turret" );
var_0 showonclient( self );
}
remote_turret_badplace( var_0, var_1 )
{
var_0 endon( "stop_use_turret" );
for (;;)
{
var_0 waittill( "create_badplace" );
var_2 = var_0 gettagorigin( "tag_flash" );
var_3 = var_0 gettagangles( "tag_flash" );
var_4 = var_2 + anglestoforward( var_3 ) * 9999;
var_5 = bullettrace( var_2, var_4, 0 );
badplace_cylinder( "bullet_impact", 1, var_5["position"], 256, 96, "axis" );
wait 1;
}
}
rt_fade_in()
{
if ( level.missionfailed )
return;
level notify( "now_fade_in" );
wait 0.05;
var_0 = get_white_overlay();
var_0 fadeovertime( 0.2 );
var_0.alpha = 0;
wait 0.3;
}
rt_fade_out()
{
var_0 = get_white_overlay();
var_0 fadeovertime( 0.2 );
var_0.alpha = 1;
wait 0.2;
}
get_white_overlay()
{
if ( !isdefined( self.white_overlay ) )
self.white_overlay = maps\_hud_util::create_client_overlay( "white", 0, self );
self.white_overlay.sort = -1;
self.white_overlay.foreground = 0;
return self.white_overlay;
}
huditemshide()
{
if ( level.players.size > 0 )
{
for ( var_0 = 0; var_0 < level.players.size; var_0++ )
{
if ( level.players[var_0] maps\_utility::ent_flag( "on_remote_turret" ) )
setdvar( "ui_remotemissile_playernum", var_0 + 1 );
}
}
else
{
setsaveddvar( "compass", "0" );
setsaveddvar( "ammoCounterHide", "1" );
setsaveddvar( "actionSlotsHide", "1" );
}
}
huditemsshow()
{
if ( level.players.size > 0 )
setdvar( "ui_remotemissile_playernum", 0 );
else
{
setsaveddvar( "compass", "1" );
setsaveddvar( "ammoCounterHide", "0" );
setsaveddvar( "actionSlotsHide", "0" );
}
}
holdstancechange( var_0 )
{
if ( !var_0 )
{
var_1 = self getstance();
if ( var_1 != "prone" )
self allowprone( var_0 );
if ( var_1 != "crouch" )
self allowcrouch( var_0 );
if ( var_1 != "stand" )
{
self allowstand( var_0 );
return;
}
}
else
{
self allowprone( var_0 );
self allowcrouch( var_0 );
self allowstand( var_0 );
}
}
uav_enable_view( var_0, var_1 )
{
level.uav_sort = -5;
level.uav_hud_color = ( 1, 1, 1 );
self.uav_huds = [];
self.uav_huds["static_hud"] = create_hud_static_overlay( var_0 );
self.uav_huds["scanline"] = create_hud_scanline_overlay( var_0 );
self.uav_huds["crosshair"] = create_hud_crosshair( var_0 );
setsaveddvar( "sm_sunsamplesizenear", "1" );
setsaveddvar( "sm_cameraoffset", "3400" );
thread uav_hud_scanline();
}
hud_fade_in_time( var_0, var_1 )
{
if ( !isdefined( var_0 ) )
return 0;
if ( !isdefined( var_1 ) )
var_1 = 1;
self.alpha = 0;
self fadeovertime( var_0 );
self.alpha = var_1;
return 1;
}
create_hud_static_overlay( var_0 )
{
var_1 = maps\_hud_util::create_client_overlay( "overlay_grain", 0.3, self );
var_1.sort = level.uav_sort;
if ( !var_1 hud_fade_in_time( var_0, 0.3 ) )
var_1.alpha = 0.3;
return var_1;
}
create_hud_scanline_overlay( var_0 )
{
var_1 = maps\_hud_util::create_client_overlay( "ac130_thermal_overlay_bar", 1, self );
var_1.x = 0;
var_1.y = 0;
var_1.sort = level.uav_sort + 1;
var_1.horzalign = "fullscreen";
var_1.vertalign = "fullscreen";
if ( !var_1 hud_fade_in_time( var_0, 1 ) )
var_1.alpha = 1;
return var_1;
}
create_hud_horizontal_meter( var_0 )
{
var_1 = newhudelem();
var_1.x = 320;
var_1.y = 40;
var_1.sort = level.uav_sort;
var_1.alignx = "center";
var_1.aligny = "bottom";
var_1.color = level.uav_hud_color;
var_1 setshader( "uav_horizontal_meter", 96, 16 );
var_1 hud_fade_in_time( var_0 );
return var_1;
}
create_hud_vertical_meter( var_0 )
{
var_1 = newhudelem();
var_1.x = 40;
var_1.y = 240;
var_1.sort = level.uav_sort;
var_1.alignx = "right";
var_1.aligny = "middle";
var_1.color = level.uav_hud_color;
var_1 setshader( "uav_vertical_meter", 16, 96 );
var_1 hud_fade_in_time( var_0 );
return var_1;
}
create_hud_crosshair( var_0 )
{
var_1 = maps\_hud_util::createclienticon( "uav_crosshair", 320, 240 );
var_1.sort = level.uav_sort;
var_1.elemtype = "icon";
var_1 maps\_hud_util::setparent( level.uiparent );
var_1 maps\_hud_util::setpoint( "CENTER", undefined, 0, 0 );
var_1 hud_fade_in_time( var_0 );
return var_1;
}
uav_set_target_hud_data( var_0, var_1 )
{
self.uav_huds["lower_right"][var_0].data_value setvalue( var_1 );
}
uav_set_hud_data( var_0, var_1 )
{
self.uav_huds[var_0].data_value setvalue( var_1 );
}
create_hud_upper_left( var_0 )
{
var_1 = [];
var_1["nar"] = [ &"UAV_NAR", "none" ];
var_1["white"] = [ &"UAV_WHT", "none" ];
var_1["rate"] = [ &"UAV_RATE", "none" ];
var_1["angle"] = [ &"UAV_RATIO", "none" ];
var_1["numbers"] = [ &"UAV_ABOVE_TEMP_NUMBERS", "none" ];
var_1["temp"] = [ &"UAV_TEMP", "none" ];
return create_hud_section( var_1, 10, 80, "left", var_0 );
}
create_hud_upper_right( var_0 )
{
var_1 = [];
var_1["acft"] = [ &"UAV_ACFT", "none" ];
var_1["long"] = [ &"UAV_N", "none" ];
var_1["lat"] = [ &"UAV_W", "none" ];
var_1["angle"] = [ &"UAV_HAT", "none" ];
return create_hud_section( var_1, 510, 80, "left", var_0 );
}
create_hud_lower_right( var_0 )
{
var_1 = [];
var_1["long"] = [ &"UAV_N", "none" ];
var_1["lat"] = [ &"UAV_W", "none" ];
var_2 = create_hud_section( var_1, 500, 335, "left", var_0 );
var_1 = [];
var_1["brg"] = [ &"UAV_BRG", "" ];
var_1["rng_m"] = [ &"UAV_RNG", &"UAV_M" ];
var_1["rng_nm"] = [ &"UAV_RNG", &"UAV_NM" ];
var_1["elv"] = [ &"UAV_ELV", &"UAV_F" ];
var_3 = create_hud_section( var_1, 510, 360, "right", var_0 );
foreach ( var_6, var_5 in var_3 )
var_2[var_6] = var_5;
return var_2;
}
create_hud_section( var_0, var_1, var_2, var_3, var_4 )
{
var_5 = [];
var_6 = 10 * level.uav_fontscale;
foreach ( var_10, var_8 in var_0 )
{
var_9 = newhudelem();
var_9.x = var_1;
var_9.y = var_2;
var_9.sort = level.uav_sort;
var_9.alignx = var_3;
var_9.aligny = "middle";
var_9.fontscale = level.uav_fontscale;
var_9.color = level.uav_hud_color;
var_9 settext( var_8[0] );
if ( isdefined( var_8[1] ) )
{
if ( !string_is_valid( var_8[1], "none" ) )
var_9 create_hud_data_value( var_8[1], var_4 );
}
else
var_9 create_hud_data_value( undefined, var_4 );
var_9 hud_fade_in_time( var_4 );
var_5[var_10] = var_9;
var_2 = var_2 + var_6;
}
return var_5;
}
string_is_valid( var_0, var_1 )
{
if ( isstring( var_0 ) )
{
if ( var_0 == var_1 )
return 1;
}
return 0;
}
create_hud_data_value( var_0, var_1 )
{
var_2 = 75;
if ( isdefined( var_0 ) && !string_is_valid( var_0, "" ) )
{
var_3 = newhudelem();
var_3.x = self.x + var_2;
var_3.y = self.y;
var_3.alignx = "right";
var_3.aligny = "middle";
var_3.fontscale = level.uav_fontscale;
var_3.color = level.uav_hud_color;
var_3.sort = level.uav_sort;
var_3 settext( var_0 );
self.data_value_suffix = var_3;
var_4 = 1;
if ( var_0 == &"UAV_NM" )
var_4 = 2;
var_3 hud_fade_in_time( var_1 );
var_2 = var_2 - 10 * var_4;
}
var_5 = newhudelem();
var_5.x = self.x + var_2;
var_5.y = self.y;
var_5.alignx = "right";
var_5.aligny = "middle";
var_5.fontscale = level.uav_fontscale;
var_5.color = level.uav_hud_color;
var_5.sort = level.uav_sort;
var_5 setvalue( 0 );
var_5 hud_fade_in_time( var_1 );
self.data_value = var_5;
}
create_hud_arrow( var_0, var_1 )
{
if ( var_0 == "up" )
{
var_2 = "uav_arrow_up";
var_3 = self.uav_huds["horz_meter"];
var_4 = 320;
var_5 = var_3.y + 10;
var_6 = "center";
var_7 = "top";
}
else
{
var_2 = "uav_arrow_left";
var_3 = self.uav_huds["vert_meter"];
var_4 = var_3.x + 10;
var_5 = 240;
var_6 = "left";
var_7 = "middle";
}
var_8 = newhudelem();
var_8.x = var_4;
var_8.y = var_5;
var_8.alignx = var_6;
var_8.aligny = var_7;
var_8.sort = level.uav_sort;
var_8 setshader( var_2, 16, 16 );
var_8 hud_fade_in_time( var_1 );
var_8 create_hud_arrow_value( var_0, var_1 );
return var_8;
}
create_hud_arrow_value( var_0, var_1 )
{
if ( var_0 == "up" )
{
var_2 = self.x;
var_3 = self.y + 16;
var_4 = "center";
var_5 = "top";
}
else
{
var_2 = self.x + 16;
var_3 = self.y;
var_4 = "left";
var_5 = "middle";
}
var_6 = newhudelem();
var_6.x = var_2;
var_6.y = var_3;
var_6.alignx = var_4;
var_6.aligny = var_5;
var_6.sort = level.uav_sort;
var_6 setvalue( 0 );
var_6 hud_fade_in_time( var_1 );
self.data_value = var_6;
}
uav_disable_view( var_0 )
{
if ( isdefined( self.uav_huds ) )
{
foreach ( var_2 in self.uav_huds )
{
if ( isarray( var_2 ) )
{
foreach ( var_4 in var_2 )
uav_destroy_hud( var_4, var_0 );
var_2 = undefined;
continue;
}
uav_destroy_hud( var_2, var_0 );
}
}
if ( !isdefined( var_0 ) )
var_0 = 0.05;
setsaveddvar( "sm_sunenable", 1.0 );
}
uav_destroy_hud( var_0, var_1 )
{
if ( isdefined( var_0.data_value ) )
var_0.data_value thread uav_destroy_hud_wrapper( var_1 );
if ( isdefined( var_0.data_value_suffix ) )
var_0.data_value_suffix thread uav_destroy_hud_wrapper( var_1 );
var_0 thread uav_destroy_hud_wrapper( var_1 );
}
uav_destroy_hud_wrapper( var_0 )
{
if ( isdefined( var_0 ) )
{
self fadeovertime( var_0 );
self.alpha = 0;
wait( var_0 );
}
if ( isdefined( self ) )
self destroy();
}
text_titlecreate()
{
level.text1 = maps\_hud_util::createclientfontstring( "objective", 2.0 );
level.text1 maps\_hud_util::setpoint( "TOP", undefined, 0, 10 );
}
text_titlesettext( var_0 )
{
level.text1 settext( var_0 );
}
text_titlefadeout()
{
level.text1 fadeovertime( 0.25 );
level.text1.alpha = 0;
}
text_titledestroy()
{
if ( !isdefined( level.text1 ) )
return;
level.text1 destroy();
level.text1 = undefined;
}
cancel_on_player_damage()
{
self endon( "get_off_turret" );
self.took_damage = 0;
common_scripts\utility::waittill_any( "damage", "dtest", "force_out_of_uav" );
self.took_damage = 1;
self notify( "get_off_turret" );
}
uav_hud_scanline()
{
var_0 = self.uav_huds["scanline"];
if ( !isdefined( var_0 ) )
return;
var_0 endon( "death" );
var_1 = 80;
var_2 = 280;
var_3 = 7;
var_4 = 15;
var_5 = -100;
var_6 = 580;
for (;;)
{
var_0.y = var_5;
var_7 = randomintrange( var_1, var_2 );
var_0 setshader( "ac130_thermal_overlay_bar", 640, var_7 );
var_8 = randomfloatrange( var_3, var_4 );
var_0 moveovertime( var_8 );
var_0.y = var_6;
wait( var_8 );
}
}
transfer_to_new_terminal( var_0, var_1 )
{
common_scripts\utility::flag_set( "_remoteturret_nofade" );
maps\_utility::ent_flag_clear( "on_remote_turret" );
self notify( "no_switching_allowed" );
rt_fade_out();
turret_deactivate( var_0 get_active_turret() );
self notify( "transfer_terminal" );
self notify( "get_off_turret" );
text_titledestroy();
thread remote_turret_loop( var_1 );
rt_fade_in();
maps\_utility::ent_flag_set( "on_remote_turret" );
common_scripts\utility::flag_clear( "_remoteturret_nofade" );
}
get_active_turret()
{
return self._remote_turrets[self.lastturretindex];
}