// IW6 GSC SOURCE // Generated by https://github.com/xensik/gsc-tool train_build( var_0, var_1 ) { var_2 = spawnstruct(); var_2 maps\_utility::ent_flag_init( "train_teleporting" ); var_2.names = var_0; var_2.cars = []; var_2.note = var_1; var_2.path_array = []; var_2.force_mantle_trigs = []; foreach ( var_4 in var_0 ) { var_5 = getentarray( var_4, "script_noteworthy" ); var_6 = spawnstruct(); var_6.body_ext = []; var_6.body_int = []; var_6.anim_models = []; var_6.trigs = []; var_6.overlaydelay = 0; var_6.overlayweight = 1; foreach ( var_8 in var_5 ) { if ( !isdefined( var_8.script_parameters ) ) continue; var_8._essential_part = 1; if ( var_8.script_parameters == "body" ) { var_8 maps\_utility::assign_animtree( var_4 + "_body" ); var_8 hide(); var_6.body = var_8; var_6.anim_models["body"] = var_8; continue; } if ( issubstr( var_8.script_parameters, "body_ext" ) ) { if ( issubstr( var_8.script_parameters, "anim" ) ) { var_8 maps\_utility::assign_animtree( var_4 + var_8.targetname ); var_6.anim_models[var_8.targetname] = var_8; } if ( isdefined( var_8.targetname ) ) var_6.body_ext[var_8.targetname] = var_8; else var_6.body_ext[var_6.body_int.size] = var_8; continue; } if ( issubstr( var_8.script_parameters, "body_int" ) ) { if ( issubstr( var_8.script_parameters, "anim" ) ) { var_8 maps\_utility::assign_animtree( var_4 + var_8.targetname ); var_6.anim_models[var_8.targetname] = var_8; } if ( isdefined( var_8.targetname ) ) var_6.body_int[var_8.targetname] = var_8; else var_6.body_int[var_6.body_int.size] = var_8; var_8._essential_part = undefined; continue; } if ( var_8.script_parameters == "sus_f" ) { var_8 maps\_utility::assign_animtree( var_4 + "_sus_f" ); var_6.sus_f = var_8; var_6.body_ext["sus_f"] = var_8; continue; } if ( var_8.script_parameters == "sus_f_disk" ) { var_6.sus_fd = var_8; var_6.body_ext["sus_fd"] = var_8; continue; } if ( var_8.script_parameters == "sus_f_left" ) { var_6.sus_fl = var_8; var_6.body_ext["sus_fl"] = var_8; continue; } if ( var_8.script_parameters == "sus_f_right" ) { var_6.sus_fr = var_8; var_6.body_ext["sus_fr"] = var_8; continue; } if ( var_8.script_parameters == "sus_f_link" ) { var_6.sus_flink = var_8; continue; } if ( var_8.script_parameters == "sus_b" ) { var_8 maps\_utility::assign_animtree( var_4 + "_sus_b" ); var_6.sus_b = var_8; var_6.body_ext["sus_b"] = var_8; continue; } if ( var_8.script_parameters == "sus_b_disk" ) { var_6.sus_bd = var_8; var_6.body_ext["sus_bd"] = var_8; continue; } if ( var_8.script_parameters == "sus_b_left" ) { var_6.sus_bl = var_8; var_6.body_ext["sus_bl"] = var_8; continue; } if ( var_8.script_parameters == "sus_b_right" ) { var_6.sus_br = var_8; var_6.body_ext["sus_br"] = var_8; continue; } if ( var_8.script_parameters == "sus_b_link" ) { var_6.sus_blink = var_8; continue; } var_8._essential_part = undefined; } if ( isdefined( var_6.sus_fd ) ) var_6.sus_fd linkto( var_6.sus_f, "j_mainroot" ); if ( isdefined( var_6.sus_fl ) ) var_6.sus_fl linkto( var_6.sus_f, "j_elbow_le" ); if ( isdefined( var_6.sus_fr ) ) var_6.sus_fr linkto( var_6.sus_f, "j_elbow_ri" ); if ( isdefined( var_6.sus_flink ) ) var_6.sus_flink linkto( var_6.sus_f, "j_mainroot" ); if ( isdefined( var_6.sus_bd ) ) var_6.sus_bd linkto( var_6.sus_b, "j_mainroot" ); if ( isdefined( var_6.sus_bl ) ) var_6.sus_bl linkto( var_6.sus_b, "j_elbow_le" ); if ( isdefined( var_6.sus_br ) ) var_6.sus_br linkto( var_6.sus_b, "j_elbow_ri" ); if ( isdefined( var_6.sus_blink ) ) var_6.sus_blink linkto( var_6.sus_b, "j_mainroot" ); var_6.ref_start = common_scripts\utility::spawn_tag_origin(); var_6.ref_start.origin = var_6.body gettagorigin( "j_spineupper" ); var_6.ref_start.angles = var_6.body gettagangles( "j_spineupper" ); var_6.ref_end = common_scripts\utility::spawn_tag_origin(); var_6.ref_end linkto( var_6.body, "j_spineupper", ( 0, 0, 0 ), ( 0, 0, 0 ) ); var_5 = common_scripts\utility::array_remove( var_5, var_6.body ); var_6.other_linked_parts = []; var_6.other_linked_parts_count = 0; foreach ( var_8 in var_5 ) { if ( var_8 islinked() || isdefined( var_8.script_parameters ) && issubstr( var_8.script_parameters, "dont_link" ) ) continue; if ( issubstr( var_8.classname, "trigger_" ) ) { var_8 enablelinkto(); if ( isdefined( var_8.script_flag ) && var_8.script_flag == "flag_force_mantle" ) var_2.force_mantle_trigs[var_2.force_mantle_trigs.size] = var_8; else var_6.trigs[var_6.trigs.size] = var_8; } if ( isdefined( var_8.script_parameters ) && issubstr( var_8.script_parameters, "weapon" ) ) { var_11 = spawn( var_8.script_parameters, var_8.origin ); var_11.angles = var_8.angles; if ( isdefined( var_8.script_index ) ) var_11 itemweaponsetammo( randomintrange( 10, 30 ), var_8.script_index ); } if ( issubstr( var_8.classname, "actor_" ) ) { var_8.car = var_6; var_8 maps\_utility::add_spawn_function( ::teleport_ai_instant ); continue; } if ( issubstr( var_8.classname, "script_vehicle_" ) ) continue; if ( issubstr( var_8.classname, "_volume" ) ) var_8 enablelinkto(); var_8 linkto( var_6.body, "j_spineupper" ); if ( !isdefined( var_8._essential_part ) && !issubstr( var_8.classname, "trigger_" ) ) { if ( !isdefined( var_6.other_linked_parts[var_8.classname] ) ) var_6.other_linked_parts[var_8.classname] = []; var_6.other_linked_parts[var_8.classname] = common_scripts\utility::array_add( var_6.other_linked_parts[var_8.classname], var_8 ); var_6.other_linked_parts_count++; } } var_6.sus_flink = undefined; var_6.sus_blink = undefined; var_2.cars[var_4] = var_6; } var_2.other_linked_parts_count = 0; foreach ( var_6 in var_2.cars ) var_2.other_linked_parts_count = var_2.other_linked_parts_count + var_6.other_linked_parts_count; common_scripts\utility::array_call( var_2.force_mantle_trigs, ::setmovingplatformtrigger ); return var_2; } train_queue_path_anims( var_0, var_1, var_2, var_3, var_4, var_5 ) { train_queue_path_anim( var_0[0], var_1, var_2, var_3, var_4, var_5 ); for ( var_6 = 1; var_6 < var_0.size; var_6++ ) thread train_queue_path_anim( var_0[var_6], var_1, var_2 ); } train_queue_path_anim( var_0, var_1, var_2, var_3, var_4, var_5 ) { self.loop_array = undefined; if ( !isdefined( var_3 ) ) var_3 = "none"; var_6 = spawnstruct(); var_6.anime = var_0; var_6.start = common_scripts\utility::getstruct( var_1, "targetname" ); var_6.end = common_scripts\utility::getstruct( var_2, "targetname" ); var_6.a_rel = var_5; if ( var_3 == "none" ) self.path_array[self.path_array.size] = var_6; else if ( var_3 == "next" ) self.path_array = maps\_utility::array_merge( [ var_6 ], self.path_array ); else if ( var_3 == "clear" ) self.path_array = [ var_6 ]; if ( isdefined( self.need_end_org ) || isdefined( self.path ) && !istrue( self.path.a_rel ) && ( var_3 == "next" || var_3 == "clear" ) ) { self.path.end_org = var_6.start common_scripts\utility::spawn_tag_origin(); self.need_end_org = undefined; } if ( istrue( var_4 ) ) level notify( self.note ); } train_queue_path_anim_loop( var_0, var_1, var_2, var_3, var_4, var_5 ) { if ( !isdefined( var_5 ) ) var_5 = 1; var_6 = []; for ( var_7 = 0; var_7 < var_0.size; var_7++ ) { if ( var_7 == 0 ) train_queue_path_anim( var_0[var_7], var_1, var_2, var_3, var_4, var_5 ); else train_queue_path_anim( var_0[var_7], var_1, var_2 ); var_6[var_7] = self.path_array[self.path_array.size - 1]; } self.loop_array = var_6; } train_path() { self notify( "end_train_path" ); self endon( "end_train_path" ); if ( isdefined( level.debug_no_move ) && istrue( level.debug_no_move ) ) return; self.path = self.path_array[0]; self.path_array = maps\_utility::array_remove_index( self.path_array, 0 ); self.path.anim_org = self.path.start common_scripts\utility::spawn_tag_origin(); foreach ( var_1 in self.cars ) { self.path.anim_org thread maps\_anim::anim_single_solo( var_1.body, self.path.anime ); var_1.sus_f thread maps\_anim::anim_single_solo( var_1.sus_f, self.path.anime ); var_1.sus_b thread maps\_anim::anim_single_solo( var_1.sus_b, self.path.anime ); var_1.sus_f setanim( level.scr_anim[var_1.sus_f.animname]["wheels"] ); var_1.sus_b setanim( level.scr_anim[var_1.sus_b.animname]["wheels"] ); var_1 thread train_wheel_anims(); } wait 0.15; for (;;) { level waittill( self.note ); while ( maps\_utility::ent_flag( "train_teleporting" ) ) wait 0.05; train_get_next_path(); foreach ( var_1 in self.cars ) { self.path.anim_org maps\_utility::anim_stopanimscripted(); var_1.body maps\_utility::anim_stopanimscripted(); var_1.sus_f maps\_utility::anim_stopanimscripted(); var_1.sus_b maps\_utility::anim_stopanimscripted(); self.path.anim_org thread maps\_anim::anim_single_solo( var_1.body, self.path.anime ); var_1.sus_f thread maps\_anim::anim_single_solo( var_1.sus_f, self.path.anime ); var_1.sus_b thread maps\_anim::anim_single_solo( var_1.sus_b, self.path.anime ); var_1 notify( "train_start_new_anims" ); } level notify( "notify_restart_overlay_anims" ); thread train_teleport(); level common_scripts\utility::waittill_notify_or_timeout( self.note, 0.15 ); } } train_get_next_path() { self endon( "end_train_path" ); if ( self.path_array.size < 1 ) { if ( isdefined( self.loop_array ) ) { self.path_array = self.loop_array; self.need_end_org = undefined; } else { self.need_end_org = undefined; if ( isdefined( self.path.start_org ) ) self.path.start_org delete(); if ( isdefined( self.path.end_org ) ) self.path.end_org delete(); self notify( "end_train_path" ); } } var_0 = self.path_array[0].start; if ( istrue( self.path_array[0].a_rel ) || self.path.start.origin != self.path_array[0].start.origin && !isdefined( self.path_array[0].a_rel ) ) { self.path_array[0].a_rel = 1; var_0 = self.path.end; } self.path.anim_org delete(); if ( isdefined( self.path.start_org ) ) self.path.start_org delete(); if ( isdefined( self.path.end_org ) ) self.path.end_org delete(); self.path = self.path_array[0]; self.path_array = maps\_utility::array_remove_index( self.path_array, 0 ); self.path.anim_org = var_0 common_scripts\utility::spawn_tag_origin(); if ( istrue( self.path.a_rel ) ) { self.path.start_org = self.path.anim_org common_scripts\utility::spawn_tag_origin(); self.path.end_org = self.path.start common_scripts\utility::spawn_tag_origin(); } else if ( self.path_array.size > 0 ) { self.path.start_org = self.path.end common_scripts\utility::spawn_tag_origin(); self.path.end_org = self.path_array[0].start common_scripts\utility::spawn_tag_origin(); } else { self.path.start_org = self.path.end common_scripts\utility::spawn_tag_origin(); self.need_end_org = 1; } } train_new_sus_path_anims( var_0, var_1 ) { if ( isdefined( level.debug_no_move ) && istrue( level.debug_no_move ) ) return; maps\skyway_anim::update_train_path_anims( var_1 ); self.cars[var_0].sus_f maps\_utility::anim_stopanimscripted(); self.cars[var_0].sus_b maps\_utility::anim_stopanimscripted(); self.cars[var_0].sus_f thread maps\_anim::anim_single_solo( self.cars[var_0].sus_f, self.path.anime ); self.cars[var_0].sus_b thread maps\_anim::anim_single_solo( self.cars[var_0].sus_b, self.path.anime ); var_2 = self.cars[var_0].body getanimtime( level.scr_anim[self.cars[var_0].body.animname][self.path.anime] ); self.cars[var_0].sus_f setanimtime( level.scr_anim[self.cars[var_0].sus_f.animname][self.path.anime], var_2 ); self.cars[var_0].sus_b setanimtime( level.scr_anim[self.cars[var_0].sus_b.animname][self.path.anime], var_2 ); self.cars[var_0] notify( "train_start_new_anims" ); level notify( "notify_restart_overlay_anims" ); var_3 = self.cars[var_0].sus_f getanimtime( level.scr_anim[self.cars[var_0].sus_f.animname]["wheels"] ); self.cars[var_0].sus_f setanimtime( level.scr_anim[self.cars[var_0].sus_f.animname]["wheels"], var_3 ); } train_teleport() { self notify( "end_train_teleport" ); self endon( "end_train_teleport" ); self waittill( "train_teleport_ready" ); maps\_utility::ent_flag_set( "train_teleporting" ); foreach ( var_1 in self.cars ) { if ( !isdefined( var_1.body ) ) continue; var_1.body linkto( self.path.anim_org ); } wait 0.05; self.path.anim_org teleportentityrelative( self.path.start_org, self.path.end_org ); teleportscene(); foreach ( var_1 in self.cars ) { if ( !isdefined( var_1.body ) ) continue; var_1.body unlink(); } if ( self.path_array.size > 0 ) self.path_array[0].a_rel = undefined; maps\_utility::ent_flag_clear( "train_teleporting" ); self notify( "train_teleporting_done" ); self notify( self.path.start.targetname ); } train_setup_teleport_triggers( var_0 ) { var_1 = getentarray( "player_train_trig_teleport", "script_noteworthy" ); common_scripts\utility::array_thread( var_1, ::train_tele_trig_proc, var_0 ); } train_tele_trig_proc( var_0 ) { self endon( "death" ); self endon( "stop_train_tele_trig" ); level endon( "stop_train_tele_trigs" ); for (;;) { self waittill( "trigger" ); var_0 notify( "train_teleport_ready" ); while ( var_0 maps\_utility::ent_flag( "train_teleporting" ) ) wait 0.05; } } player_sway() { level.player_default_sway_weight = 0.11; level.player_sway_weight = level.player_default_sway_weight; level.player_wind_weight = 0.0; level.player_ground_ref_mover = maps\_utility::spawn_anim_model( "player_rig" ); level.player_ground_ref_mover.origin = level.player.origin; var_0 = common_scripts\utility::spawn_tag_origin(); var_0.origin = level.player_ground_ref_mover gettagorigin( "tag_player" ); var_0.angles = level.player_ground_ref_mover gettagangles( "tag_player" ); var_0 linkto( level.player_ground_ref_mover, "tag_player" ); level.player playersetgroundreferenceent( var_0 ); wait 0.5; for (;;) { level.player_ground_ref_mover setanim( level.scr_anim["player_rig"]["player_sway_static"], level.player_sway_weight ); level.player_ground_ref_mover setanim( level.scr_anim["player_rig"]["player_wind_static"], level.player_wind_weight ); var_1 = level.player_sway_weight + level.player_wind_weight; if ( var_1 > 1 ) var_1 = 1; level.player_ground_ref_mover setanim( level.scr_anim["player_rig"]["player_nosway_static"], 1 - var_1 ); wait( level.timestep ); } } player_view_roll_with_traincar( var_0, var_1 ) { if ( common_scripts\utility::flag( "flag_player_view_rotating" ) ) return; common_scripts\utility::flag_set( "flag_player_view_rotating" ); var_2 = maps\_utility::spawn_anim_model( "view_roll" ); var_2.origin = level.player_ground_ref_mover.origin; var_2.angles = level._train.cars[level.player.car].body.angles; level.player_ground_ref_mover linkto( var_2, "origin_animate_jnt" ); var_2 setanimrestart( level.scr_anim["view_roll"]["nosway"], 1 - var_1 ); var_2 setanimrestart( level.scr_anim["view_roll"][var_0], var_1 ); wait( getanimlength( level.scr_anim["view_roll"][var_0] ) ); level.player_ground_ref_mover unlink(); common_scripts\utility::flag_clear( "flag_player_view_rotating" ); var_2 delete(); } player_sway_blendto( var_0, var_1, var_2 ) { level endon( "notify_change_player_sway" ); if ( var_0 == 0 ) var_0 = 0.05; if ( !isdefined( var_1 ) ) var_1 = level.player_default_sway_weight; var_3 = level.player_sway_weight; var_4 = var_1 - level.player_sway_weight; for ( var_5 = var_4 * ( level.timestep / var_0 ); var_0 > 0; var_0 = var_0 - level.timestep ) { var_3 = var_3 + var_5; if ( var_3 > 1 ) var_3 = 1; if ( var_3 < 0 ) var_3 = 0; level.player_sway_weight = var_3; wait( level.timestep ); } level.player_sway_weight = var_1; level notify( "notify_sway_blend_complete" ); } player_wind_blendto( var_0, var_1, var_2 ) { level endon( "notify_change_player_wind" ); if ( var_0 == 0 ) var_0 = 0.05; if ( !isdefined( var_1 ) ) var_1 = 0; var_3 = level.player_wind_weight; var_4 = var_1 - level.player_wind_weight; for ( var_5 = var_4 * ( level.timestep / var_0 ); var_0 > 0; var_0 = var_0 - level.timestep ) { var_3 = var_3 + var_5; if ( var_3 > 1 ) var_3 = 1; if ( var_3 < 0 ) var_3 = 0; level.player_wind_weight = var_3; wait( level.timestep ); } level.player_wind_weight = var_1; level notify( "notify_wind_blend_complete" ); } player_sway_bump( var_0, var_1, var_2, var_3 ) { level notify( "notify_change_player_sway" ); level endon( "notify_change_player_sway" ); thread player_sway_blendto( var_0, var_3 ); level waittill( "notify_sway_blend_complete" ); wait( var_1 ); thread player_sway_blendto( var_2 ); } player_wind_bump( var_0, var_1, var_2, var_3 ) { level notify( "notify_change_player_wind" ); level endon( "notify_change_player_wind" ); thread player_wind_blendto( var_0, var_3 ); level waittill( "notify_wind_blend_complete" ); wait( var_1 ); thread player_wind_blendto( var_2 ); } player_const_quake() { level.player_quake_weight = 0.0001; for (;;) { if ( !common_scripts\utility::flag( "flag_quake" ) && level.player_quake_weight > 0.001 ) earthquake( level.player_quake_weight, 0.1, level.player.origin, 5000 ); wait 0.05; } } player_const_quake_blendto( var_0, var_1 ) { level notify( "notify_change_player_quake" ); level endon( "notify_change_player_quake" ); if ( var_1 == 0 ) var_1 = 0.05; if ( !isdefined( var_0 ) ) var_0 = 0.0; if ( var_0 <= 0 ) var_0 = 0.0001; var_2 = level.player_sway_weight; var_3 = var_0 - level.player_sway_weight; for ( var_4 = var_3 * ( level.timestep / var_1 ); var_1 > 0; var_1 = var_1 - level.timestep ) { var_2 = var_2 + var_4; if ( var_2 > 1 ) var_2 = 1; if ( var_2 < 0 ) var_2 = 0; level.player_quake_weight = var_2; wait( level.timestep ); } level.player_quake_weight = var_0; } player_rumble() { level.player_rumble_ent = maps\_utility::get_rumble_ent(); level.player_rumble_ent maps\_utility::rumble_ramp_to( 0, 0.1 ); level.player_rumble_amb_ent = maps\_utility::get_rumble_ent(); level.player_rumble_amb_ent maps\_utility::rumble_ramp_to( 0, 0.1 ); level.player_rumble_rog_ent = maps\_utility::get_rumble_ent(); level.player_rumble_rog_ent maps\_utility::rumble_ramp_to( 0, 0.1 ); } player_rumble_bump( var_0, var_1, var_2, var_3, var_4, var_5, var_6 ) { if ( isdefined( var_6 ) ) { level notify( var_6 ); level endon( var_6 ); } var_0 thread maps\_utility::rumble_ramp_to( var_1, var_3 ); wait( var_3 + var_4 ); var_0 thread maps\_utility::rumble_ramp_to( var_2, var_5 ); } player_train_rythme_rumble_quake() { level.player_do_rythme_rumble = 1; for (;;) { if ( level.player_do_rythme_rumble == 1 ) { earthquake( 0.17, 0.2, level.player.origin, 5000 ); level.player playrumbleonentity( "damage_light" ); } wait 0.1; if ( level.player_do_rythme_rumble == 1 ) { earthquake( 0.12, 0.2, level.player.origin, 5000 ); level.player playrumbleonentity( "damage_light" ); } wait 0.8; } } train_wheel_anims() { self endon( "death" ); self endon( "stop_wheel_anims" ); for (;;) { self waittill( "train_start_new_anims" ); var_0 = self.sus_f getanimtime( level.scr_anim[self.sus_f.animname]["wheels"] ); self.sus_f setanim( level.scr_anim[self.sus_f.animname]["wheels"] ); self.sus_b setanim( level.scr_anim[self.sus_b.animname]["wheels"] ); self.sus_f setanimtime( level.scr_anim[self.sus_f.animname]["wheels"], var_0 ); self.sus_b setanimtime( level.scr_anim[self.sus_b.animname]["wheels"], var_0 ); } } blend_link_over_time( var_0, var_1, var_2, var_3, var_4, var_5 ) { self notify( "stop_blended_links" ); self endon( "stop_blended_links" ); if ( !isdefined( var_3 ) ) var_3 = 0; var_6 = var_2 * var_3; if ( !isdefined( var_4 ) ) var_4 = getpartname( var_0.model, 0 ); if ( !isdefined( var_5 ) ) var_5 = getpartname( var_1.model, 0 ); while ( var_6 < var_2 ) { var_7 = var_6 / var_2; var_8 = var_0 gettagangles( var_4 ); var_9 = var_1 gettagangles( var_5 ); var_10 = anglestoaxis( var_8 ); var_11 = anglestoaxis( var_9 ); var_12 = var_11["forward"] * var_7 + var_10["forward"] * ( 1 - var_7 ); var_13 = var_11["right"] * var_7 + var_10["right"] * ( 1 - var_7 ); var_14 = var_11["up"] * var_7 + var_10["up"] * ( 1 - var_7 ); var_15 = axistoangles( var_12, var_13, var_14 ); var_16 = var_0 gettagorigin( var_4 ); var_17 = var_1 gettagorigin( var_5 ); var_18 = var_17 * var_7 + var_16 * ( 1 - var_7 ); if ( var_7 < 0.5 ) self linkto( var_0, var_4, rotatevectorinverted( var_18 - var_16, var_8 ), var_15 - var_8 ); else self linkto( var_1, var_5, rotatevectorinverted( var_18 - var_17, var_9 ), var_15 - var_9 ); wait 0.05; var_6 = var_6 + 0.05; } self linkto( var_1, var_5, ( 0, 0, 0 ), ( 0, 0, 0 ) ); } blended_link( var_0, var_1, var_2, var_3, var_4 ) { self endon( "stop_blended_links" ); self endon( "death" ); if ( !isdefined( var_3 ) ) var_3 = getpartname( var_0.model, 0 ); if ( !isdefined( var_4 ) ) var_4 = getpartname( var_1.model, 0 ); if ( isdefined( var_2 ) && var_2 ) self linkto( var_0, var_3, ( 0, 0, 0 ), ( 0, 0, 0 ) ); for (;;) { var_5 = var_0 gettagangles( var_3 ); var_6 = var_1 gettagangles( var_4 ); var_7 = anglestoaxis( var_5 ); var_8 = anglestoaxis( var_6 ); var_9 = 0.5 * ( var_7["forward"] + var_8["forward"] ); var_10 = 0.5 * ( var_7["right"] + var_8["right"] ); var_11 = 0.5 * ( var_7["up"] + var_8["up"] ); var_12 = axistoangles( var_9, var_10, var_11 ); var_13 = var_0 gettagorigin( var_3 ); var_14 = var_1 gettagorigin( var_4 ); var_15 = 0.5 * ( var_14 + var_13 ); self linkto( var_0, var_3, rotatevectorinverted( var_15 - var_13, var_5 ), var_12 - var_5 ); wait 0.05; } } vision_hit_transition( var_0, var_1, var_2, var_3, var_4 ) { level notify( "notify_vision_set_transition" ); level endon( "notify_vision_set_transition" ); maps\_utility::vision_set_fog_changes( var_0, var_2 ); wait( var_3 ); maps\_utility::vision_set_fog_changes( var_1, var_4 ); } sun_hit_transition( var_0, var_1, var_2, var_3 ) { var_4 = getmapsunlight(); var_5 = ( var_4[0] * var_0, var_4[1] * var_0, var_4[2] * var_0 ); maps\_utility::sun_light_fade( var_4, var_5, var_1 ); wait( var_2 ); maps\_utility::sun_light_fade( var_5, var_4, var_1 ); } train_overlay( var_0, var_1, var_2, var_3, var_4 ) { foreach ( var_6 in self.cars ) { if ( isdefined( var_3 ) ) var_7 = var_3; else var_7 = var_6.overlayweight; var_6 thread train_overlay_solo( var_0, var_1, var_2, var_7, var_4, var_6.overlaydelay ); var_6.overlaydelay = 0; var_6.overlayweight = 1; } } sat_acc_overlay( var_0, var_1, var_2, var_3 ) { if ( isdefined( var_3 ) ) wait( var_3 ); foreach ( var_5 in self.accessory ) var_5 thread sat_acc_overlay_solo( var_0, var_1, var_2 ); } sat_acc_overlay_solo( var_0, var_1, var_2 ) { if ( !isdefined( var_1 ) ) var_1 = 1.0; if ( !isdefined( var_2 ) ) var_2 = 0.2; self setanimknobrestart( level.scr_anim[self.animname][var_0], 1, var_2 ); self setanim( level.scr_anim[self.animname]["overlay"], var_1, var_2 ); } train_overlay_solo( var_0, var_1, var_2, var_3, var_4, var_5, var_6 ) { if ( !isdefined( var_1 ) ) var_1 = "nothing"; if ( !isdefined( var_2 ) ) var_2 = 0; if ( !isdefined( var_3 ) ) var_3 = 1.0; if ( !isdefined( var_4 ) ) var_4 = 0.2; if ( !isdefined( var_6 ) ) var_6 = 0; if ( !isdefined( self.absolute ) ) self.absolute = 0; if ( self.absolute == 1 && var_6 == 0 ) return; if ( var_1 == "waitforpreviousanim" ) self waittill( "notify_train_overlay_complete" ); if ( var_6 == 1 ) self.absolute = 1; self notify( "notify_end_train_overlay" ); self endon( "notify_end_train_overlay" ); self endon( "notify_train_overlay_complete" ); if ( isdefined( var_5 ) ) wait( var_5 ); self.body setanimknobrestart( level.scr_anim[self.body.animname][var_0], 1, var_4 ); self.sus_f setanimknobrestart( level.scr_anim[self.sus_f.animname][var_0], 1, var_4 ); self.sus_b setanimknobrestart( level.scr_anim[self.sus_b.animname][var_0], 1, var_4 ); self.body setanim( level.scr_anim[self.body.animname]["overlay"], var_3, var_4 ); self.sus_f setanim( level.scr_anim[self.sus_f.animname]["overlay"], var_3, var_4 ); self.sus_b setanim( level.scr_anim[self.sus_b.animname]["overlay"], var_3, var_4 ); if ( !var_2 ) thread train_overlay_cleanup( var_0, var_6 ); for (;;) { level waittill( "notify_restart_overlay_anims" ); thread train_overlay_auto_restart( var_0, var_3 ); wait( level.timestep ); thread train_overlay_auto_restart( var_0, var_3 ); } } train_overlay_cleanup( var_0, var_1 ) { self endon( "notify_end_train_overlay" ); self endon( "notify_train_overlay_complete" ); wait( getanimlength( level.scr_anim[self.body.animname][var_0] ) ); if ( var_1 == 1 ) self.absolute = 0; self notify( "notify_train_overlay_complete" ); } train_overlay_auto_restart( var_0, var_1 ) { var_2 = self.body getanimtime( level.scr_anim[self.body.animname][var_0] ); self.body setanim( level.scr_anim[self.body.animname][var_0], 1, 0 ); self.sus_f setanim( level.scr_anim[self.sus_f.animname][var_0], 1, 0 ); self.sus_b setanim( level.scr_anim[self.sus_b.animname][var_0], 1, 0 ); self.body setanim( level.scr_anim[self.body.animname]["overlay"], var_1, 0 ); self.sus_f setanim( level.scr_anim[self.sus_f.animname]["overlay"], var_1, 0 ); self.sus_b setanim( level.scr_anim[self.sus_b.animname]["overlay"], var_1, 0 ); self.body setanimtime( level.scr_anim[self.body.animname][var_0], var_2 ); self.sus_f setanimtime( level.scr_anim[self.sus_f.animname][var_0], var_2 ); self.sus_b setanimtime( level.scr_anim[self.sus_b.animname][var_0], var_2 ); } play_anim_and_idle( var_0, var_1, var_2, var_3, var_4, var_5 ) { maps\_anim::anim_single_solo( var_0, var_1, var_5, 0.2 ); if ( !common_scripts\utility::flag( var_3 ) ) maps\_anim::anim_loop_solo( var_0, var_2, var_4, var_5 ); } rooftop_jumpcheck( var_0, var_1 ) { level endon( "rooftop_jumpfail" ); var_2 = 0; while ( !common_scripts\utility::flag( var_1 ) ) { var_2 = level.player jumpbuttonpressed(); wait 0.05; } maps\_utility::delaythread( var_0, ::rooftop_jumpfail ); for (;;) { if ( level.player jumpbuttonpressed() ) { if ( !var_2 && common_scripts\utility::flag( var_1 ) ) return; else if ( !var_2 ) var_2 = 1; } else var_2 = 0; wait 0.05; } } rooftop_jumpfail() { wait 100; } cleanup_roofjump_on_notify( var_0 ) { level waittill( "notify_player_end_vignette" ); level.player enableweapons(); level.player enableoffhandweapons(); level.player enableweaponswitch(); level.player allowcrouch( 1 ); level.player allowprone( 1 ); level.player showviewmodel(); level.player unlink(); var_0 delete(); } train_quake( var_0, var_1, var_2, var_3, var_4 ) { level notify( "train_quake" ); var_3 = max( var_1 * 3000, var_3 ); thread train_quake_proc( var_0, var_1, var_2, var_3, var_4 ); } train_quake_proc( var_0, var_1, var_2, var_3, var_4 ) { level endon( "train_quake" ); if ( isdefined( var_4 ) ) wait( var_4 ); if ( var_0 > level.player_quake_weight ) { common_scripts\utility::flag_set( "flag_quake" ); earthquake( var_0, var_1, var_2, var_3 ); thread train_quake_tele_check( var_0, var_1, var_2, var_3 ); var_5 = ( var_0 - level.player_quake_weight ) / var_0; wait( var_1 * var_5 ); common_scripts\utility::flag_clear( "flag_quake" ); } level notify( "train_quake" ); } train_quake_tele_check( var_0, var_1, var_2, var_3 ) { level endon( "train_quake" ); var_4 = var_1; while ( var_1 > 0 ) { var_5 = level._train common_scripts\utility::waittill_notify_or_timeout_return( "train_teleporting_done", 0.05 ); var_4 = var_4 - 0.05; if ( !isdefined( var_5 ) || var_5 != "timeout" ) { var_0 = var_0 * ( var_4 / var_1 ); thread train_quake( var_0, var_4, var_2, var_3 ); } } } delay_multi_fx( var_0, var_1, var_2, var_3, var_4 ) { if ( !isarray( var_1 ) ) var_1 = [ var_1 ]; if ( !isdefined( var_2 ) ) var_2 = []; else if ( !isarray( var_2 ) ) var_2 = [ var_2 ]; if ( !isdefined( var_3 ) ) var_3 = []; else if ( !isarray( var_3 ) ) var_3 = [ var_3 ]; if ( !isdefined( var_4 ) ) var_4 = "tag_origin"; thread delay_multi_fx_proc( var_0, var_1, var_2, var_3, var_4 ); } delay_multi_fx_proc( var_0, var_1, var_2, var_3, var_4 ) { if ( var_0 > 0 ) wait( var_0 ); foreach ( var_6 in var_1 ) { foreach ( var_8 in var_3 ) stopfxontag( common_scripts\utility::getfx( var_8 ), var_6, var_4 ); foreach ( var_8 in var_2 ) playfxontag( common_scripts\utility::getfx( var_8 ), var_6, var_4 ); } } test_func_on_button() { if ( 1 ) return; for (;;) { if ( level.player buttonpressed( "DPAD_DOWN" ) ) { var_0 = getent( "sea_floor_animated", "targetname" ); var_1 = 0; for (;;) { if ( var_1 == 0 ) { var_0 hide(); var_1 = 1; } else { var_0 show(); var_1 = 0; } wait( level.timestep ); } wait 1; } if ( level.player buttonpressed( "DPAD_UP" ) ) { for (;;) { iprintln( level.player_sway_weight ); iprintln( level.player_wind_weight ); wait( level.timestep ); } } if ( level.player buttonpressed( "DPAD_LEFT" ) ) common_scripts\utility::flag_set( "flag_breach_final_tracks" ); if ( level.player buttonpressed( "DPAD_RIGHT" ) ) { } wait( level.timestep ); } } jet_flyover( var_0, var_1, var_2, var_3, var_4, var_5 ) { if ( !isdefined( var_5 ) ) var_5 = 0; var_6 = maps\_utility::spawn_anim_model( "sw_jet" ); var_6.origin = var_0.origin; var_6.angles = var_0.angles; var_6 thread teleport_ent_generic(); var_7 = common_scripts\utility::spawn_tag_origin(); var_8 = common_scripts\utility::spawn_tag_origin(); var_7 linkto( var_6, "tag_jet_1", ( 0, 0, 0 ), ( 9, 0, 0 ) ); var_8 linkto( var_6, "tag_jet_1", ( 0, 0, 0 ), ( 0, 0, 0 ) ); var_7 playloopsound( "sw_jet_flyby_mid_loop" ); var_8 playloopsound( "sw_jet_flyby_close_loop" ); if ( isdefined( var_2 ) ) playfxontag( common_scripts\utility::getfx( var_2 ), var_6, "tag_jet_1" ); if ( isdefined( var_2 ) ) playfxontag( common_scripts\utility::getfx( var_3 ), var_6, "tag_jet_2" ); if ( isdefined( var_2 ) ) playfxontag( common_scripts\utility::getfx( var_4 ), var_6, "tag_jet_3" ); if ( var_5 ) { var_9 = maps\_utility::spawn_anim_model( "sw_mig" ); var_10 = maps\_utility::spawn_anim_model( "sw_mig" ); var_11 = maps\_utility::spawn_anim_model( "sw_mig" ); var_9 linkto( var_6, "tag_jet_1", ( 0, 0, 0 ), ( 0, 0, 90 ) ); var_10 linkto( var_6, "tag_jet_2", ( 0, 0, 0 ), ( 0, 0, 90 ) ); var_11 linkto( var_6, "tag_jet_3", ( 0, 0, 0 ), ( 0, 0, 90 ) ); } var_6 setanim( level.scr_anim["sw_jet"][var_1] ); wait( getanimlength( level.scr_anim["sw_jet"][var_1] ) ); var_6 delete(); var_7 delete(); var_8 delete(); } ambient_airbursts() { level waittill( "flag_hangar_door_open" ); wait 1; thread ambient_canyon_big_airbursts_and_rogs( 1 ); thread ambient_canyon_airbursts_far(); level waittill( "flag_tunnel_1_start" ); common_scripts\utility::flag_set( "flag_in_tunnel" ); thread ambient_canyon_airbursts_periph(); level waittill( "flag_tunnel_1_end" ); common_scripts\utility::flag_clear( "flag_in_tunnel" ); level waittill( "flag_helo_tunnel" ); common_scripts\utility::flag_set( "flag_in_tunnel" ); wait 3; common_scripts\utility::flag_set( "flag_stop_ambient_airbursts" ); } ambient_airbursts_startpoint() { wait 2; thread ambient_canyon_big_airbursts_and_rogs(); thread ambient_canyon_airbursts_far(); thread ambient_canyon_airbursts_periph(); level waittill( "flag_helo_tunnel" ); common_scripts\utility::flag_set( "flag_in_tunnel" ); wait 3; common_scripts\utility::flag_set( "flag_stop_ambient_airbursts" ); } ambient_canyon_big_airbursts_and_rogs( var_0 ) { if ( isdefined( var_0 ) ) wait 6; thread ambient_rog_strike_intro_timer( 10 ); level endon( "notify_stop_ambient_rogs" ); var_1 = 3.0; var_2 = 8.5; var_3 = [ "tag_rog_strike_1", "tag_rog_strike_2", "tag_rog_strike_3", "tag_rog_strike_4" ]; for (;;) { while ( common_scripts\utility::flag( "flag_pause_ambient_train_shakes" ) ) wait( level.timestep ); if ( common_scripts\utility::flag( "flag_queue_ambient_rog" ) ) { thread ambient_rog_strike_timer(); thread ambient_rog_strike( var_3 ); wait( randomfloatrange( 9, 11.5 ) ); common_scripts\utility::flag_clear( "flag_queue_ambient_rog" ); } ambient_canyon_airburst_close_shake(); wait( randomfloatrange( var_1, var_2 ) ); } } ambient_rog_strike_intro_timer( var_0 ) { wait( var_0 ); common_scripts\utility::flag_set( "flag_pause_ambient_train_shakes" ); thread ambient_rog_strike_timer(); thread ambient_rog_strike_intro(); wait 9; if ( !issubstr( level.start_point, "sat2" ) ) common_scripts\utility::flag_clear( "flag_pause_ambient_train_shakes" ); } ambient_rog_strike_timer() { var_0 = 13; var_1 = 19; wait( randomfloatrange( var_0, var_1 ) ); common_scripts\utility::flag_set( "flag_queue_ambient_rog" ); } ambient_rog_strike( var_0 ) { var_1 = level._train.cars["train_loco"].body; var_2 = common_scripts\utility::random( var_0 ); var_3 = common_scripts\utility::spawn_tag_origin(); var_3 thread teleport_ent_generic(); var_3.origin = var_1 gettagorigin( var_2 ); var_3.angles = var_1 gettagangles( var_2 ); if ( !common_scripts\utility::flag( "flag_helo_tunnel" ) ) playfxontag( common_scripts\utility::getfx( "rog_maintrail_01" ), var_3, "tag_origin" ); var_3 thread maps\skyway_audio::sfx_rog_canyon_impact( "tag_origin" ); wait 2.3; var_4 = 1.5; wait( var_4 ); if ( !common_scripts\utility::flag( "flag_helo_tunnel" ) ) playfxontag( common_scripts\utility::getfx( "vfx_rog_impact_canyon_temp_01" ), var_3, "tag_origin" ); if ( !common_scripts\utility::flag( "flag_helo_tunnel" ) ) thread rog_flash( 0.3, 0.3, 1.5 ); thread train_quake( 0.2, 2.2, level.player.origin, 2000 ); var_5 = 0.6; var_6 = 0.3; var_7 = "roghit"; wait 1.0; thread player_rumble_bump( level.player_rumble_rog_ent, 0.5, 0.0, 0.3, 0.0, 6.0, "notify_rog_rumble" ); thread maps\skyway_audio::sfx_impact_train( level._train.cars[level.player.car].overlaydelay, level._train.cars[level.player.car].overlayweight, undefined, 1 ); level._train.cars["train_sat_1"] thread sat_acc_overlay( var_7, var_5, var_6, level._train.cars["train_sat_1"].overlaydelay ); level._train.cars["train_sat_2"] thread sat_acc_overlay( var_7, var_5, var_6, level._train.cars["train_sat_2"].overlaydelay ); level._train train_overlay( var_7, undefined, undefined, var_5, var_6 ); thread player_wind_bump( 0.2, 0.0, 3.0, 0.9 ); wait 0.2; thread train_quake( 0.3, 0.8, level.player.origin, 2000 ); wait 15; var_3 delete(); } ambient_rog_strike_intro() { var_0 = getent( "model_rog_hit_ref_4", "targetname" ); playfxontag( common_scripts\utility::getfx( "rog_maintrail_01" ), var_0, "tag_explode_base" ); var_0 thread maps\skyway_audio::sfx_rog_sat_impact( "tag_explode" ); wait 2.3; var_1 = 1.5; wait( var_1 ); playfxontag( common_scripts\utility::getfx( "vfx_rog_impact_temp_01" ), var_0, "tag_shockwave" ); thread rog_flash( 0.3, 0.3, 1.5 ); thread train_quake( 0.2, 2.2, level.player.origin, 2000 ); var_2 = 0.6; var_3 = 0.3; var_4 = "roghit"; wait 1.0; thread player_rumble_bump( level.player_rumble_rog_ent, 0.5, 0.0, 0.3, 0.0, 6.0, "notify_rog_rumble" ); thread maps\skyway_audio::sfx_impact_train( level._train.cars[level.player.car].overlaydelay, level._train.cars[level.player.car].overlayweight, undefined, 1 ); level._train.cars["train_sat_1"] thread sat_acc_overlay( var_4, var_2, var_3, level._train.cars["train_sat_1"].overlaydelay ); level._train.cars["train_sat_2"] thread sat_acc_overlay( var_4, var_2, var_3, level._train.cars["train_sat_2"].overlaydelay ); level._train train_overlay( var_4, undefined, undefined, var_2, var_3 ); thread player_wind_bump( 0.2, 0.0, 3.0, 0.9 ); wait 0.2; thread train_quake( 0.3, 0.8, level.player.origin, 2000 ); wait 15; var_0 delete(); } ambient_canyon_airburst_close_shake() { if ( common_scripts\utility::flag( "flag_stop_ambient_airbursts" ) ) return; var_0 = [ "tag_air_burst_1", "tag_air_burst_2", "tag_air_burst_3", "tag_air_burst_4", "tag_air_burst_5", "tag_air_burst_6" ]; var_1 = determine_closest_cars( level.player.car ); var_2 = common_scripts\utility::random( var_0 ); var_3 = common_scripts\utility::random( var_1 ); var_4 = common_scripts\utility::spawn_tag_origin(); var_4.origin = level._train.cars[var_3].body gettagorigin( var_2 ); if ( !common_scripts\utility::flag( "flag_in_tunnel" ) ) playfxontag( common_scripts\utility::getfx( "air_burst_low" ), var_4, "tag_origin" ); var_4 thread ambient_canyon_airburst_fx_teleport_and_delete(); var_4 thread maps\_utility::play_sound_on_entity( "sw_aa_airburst" ); var_4 thread maps\_utility::play_sound_on_entity( "sw_aa_airburst_close" ); thread impact_train( var_4.origin, undefined, 0.3, undefined, 0.0 ); } determine_closest_cars( var_0 ) { var_1 = [ "train_sat_1", "train_sat_2", "train_rt0", "train_rt1", "train_rt2", "train_rt3", "train_loco" ]; switch ( var_0 ) { case "train_hangar": var_1 = [ "train_hangar", "train_sat_1", "train_sat_2" ]; return var_1; case "train_sat_1": var_1 = [ "train_sat_1", "train_sat_2", "train_rt0" ]; return var_1; case "train_sat_2": var_1 = [ "train_sat_2", "train_rt0", "train_rt1" ]; return var_1; case "train_rt0": var_1 = [ "train_rt0", "train_rt1", "train_rt2" ]; return var_1; case "train_rt1": var_1 = [ "train_rt1", "train_rt2", "train_rt3" ]; return var_1; case "train_rt2": var_1 = [ "train_rt2", "train_rt3", "train_loco" ]; return var_1; case "train_rt3": var_1 = [ "train_rt3", "train_loco" ]; return var_1; case "train_loco": var_1 = [ "train_rt3", "train_loco" ]; return var_1; default: iprintlnbold( "FAILED TO DETERMINE CAR" ); return var_1; } } ambient_canyon_airbursts_far() { level endon( "flag_stop_ambient_airbursts" ); var_0 = 0.2; var_1 = 1.9; var_2 = [ "tag_air_burst_high_1", "tag_air_burst_high_2", "tag_air_burst_high_3", "tag_air_burst_high_4", "tag_air_burst_high_5", "tag_air_burst_high_6" ]; var_3 = [ "train_sat_1", "train_sat_2", "train_rt0", "train_rt1", "train_rt2", "train_rt2", "train_rt3", "train_rt3", "train_rt3", "train_loco", "train_loco", "train_loco" ]; for (;;) { var_4 = common_scripts\utility::random( var_2 ); var_5 = common_scripts\utility::random( var_3 ); var_6 = common_scripts\utility::spawn_tag_origin(); var_6.origin = level._train.cars[var_5].body gettagorigin( var_4 ); if ( !common_scripts\utility::flag( "flag_in_tunnel" ) ) playfxontag( common_scripts\utility::getfx( "air_flak" ), var_6, "tag_origin" ); var_6 thread ambient_canyon_airburst_fx_teleport_and_delete(); var_6 thread maps\_utility::play_sound_on_entity( "sw_aa_airburst" ); thread ambient_airbursts_player_effcts( var_6 ); wait( randomfloatrange( var_0, var_1 ) ); } } ambient_canyon_airbursts_periph() { level endon( "flag_stop_ambient_airbursts" ); var_0 = level._train.cars["train_loco"].body; var_1 = 2; for (;;) { var_2 = common_scripts\utility::spawn_tag_origin(); var_2.origin = var_0.origin; var_2.angles = var_0.angles; var_2 rotatepitch( -90, 0.01 ); wait( level.timestep ); playfxontag( common_scripts\utility::getfx( "vfx_airburst_runner_01_attach" ), var_2, "tag_origin" ); var_2 thread teleport_ent_generic(); var_2 thread ambient_airburst_periph_cleanup( var_1 ); wait( var_1 ); } } ambient_airburst_periph_cleanup( var_0 ) { wait( var_0 ); stopfxontag( common_scripts\utility::getfx( "vfx_airburst_runner_01_attach" ), self, "tag_origin" ); wait 5; self delete(); } ambient_canyon_airburst_fx_teleport_and_delete() { thread teleport_ent_generic(); wait 10; self delete(); } hero_train_impact( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 ) { common_scripts\utility::flag_set( "flag_pause_ambient_train_shakes" ); var_9 = 1.8; var_10 = common_scripts\utility::spawn_tag_origin(); var_10.origin = var_0 gettagorigin( "tag_missile_source" ); var_10.angles = var_0 gettagangles( "tag_missile_source" ); var_10 thread teleport_ent_generic(); var_11 = common_scripts\utility::spawn_tag_origin(); var_11 linkto( var_0, var_1, ( 0, 0, 0 ), ( 0, 0, 0 ) ); var_12 = common_scripts\utility::spawn_tag_origin(); var_12 thread teleport_ent_generic(); var_12 thread blend_link_over_time( var_10, var_11, var_9 ); playfxontag( common_scripts\utility::getfx( "sathit_missile_trail" ), var_12, "tag_origin" ); var_11 thread maps\_utility::play_sound_on_entity( "sw_missile_incoming" ); level thread maps\_utility::notify_delay( "hero_train_impact_near", var_9 - 1.0 ); level thread maps\_utility::notify_delay( "hero_train_impact_ready", var_9 - 0.1 ); wait( var_9 ); level notify( "hero_train_impact_hit" ); if ( isdefined( var_7 ) ) level notify( "hero_train_impact_hit" + var_7 ); var_11 unlink(); var_11 thread teleport_ent_generic(); playfxontag( common_scripts\utility::getfx( var_2 ), var_11, "tag_origin" ); thread impact_train( var_11.origin, 1, var_4, var_5, 1, var_6 ); wait 0.2; foreach ( var_14 in var_3 ) var_11 thread maps\_utility::play_sound_on_entity( var_14 ); wait 7; if ( isdefined( var_8 ) && var_8 ) common_scripts\utility::flag_set( "flag_pause_ambient_train_shakes" ); else common_scripts\utility::flag_clear( "flag_pause_ambient_train_shakes" ); wait 20; var_12 delete(); var_10 delete(); var_11 delete(); } impact_train( var_0, var_1, var_2, var_3, var_4, var_5 ) { var_6 = 0.3; if ( !isdefined( var_2 ) ) var_2 = 0.7; if ( !isdefined( var_5 ) ) var_5 = 1; var_7 = level._train train_factor_explosion_time_offset_weight_dir( var_0, var_4, var_1 ); if ( var_7 == "R" ) { var_8 = "sathit_R"; var_9 = "roll_R"; } else { var_8 = "sathit_L"; var_9 = "roll_L"; } thread train_impact_player_effcts( level._train.cars[level.player.car].overlaydelay, var_9, level._train.cars[level.player.car].overlayweight, var_2, var_3, var_0 ); if ( !var_5 ) return; thread maps\skyway_audio::sfx_impact_train( level._train.cars[level.player.car].overlaydelay, level._train.cars[level.player.car].overlayweight, var_7 ); level._train.cars["train_sat_1"] thread sat_acc_overlay( var_8, level._train.cars["train_sat_1"].overlayweight, var_6, level._train.cars["train_sat_1"].overlaydelay ); level._train.cars["train_sat_2"] thread sat_acc_overlay( var_8, level._train.cars["train_sat_2"].overlayweight, var_6, level._train.cars["train_sat_2"].overlaydelay ); level._train train_overlay( var_8, undefined, undefined, undefined, var_6 ); } train_impact_player_effcts( var_0, var_1, var_2, var_3, var_4, var_5 ) { if ( !isdefined( var_4 ) ) var_4 = 0; var_6 = 0.35; var_7 = 0.07; var_8 = 0.6; var_9 = 0.1; var_10 = 1.0; var_11 = 0.3; var_12 = factor_value_min_max( var_9, var_8, var_2 ); var_13 = factor_value_min_max( var_7, var_6, var_2 ); var_14 = factor_value_min_max( var_11, var_10, var_2 ); wait( var_0 ); var_15 = var_2 * var_3; if ( var_3 > 0 ) thread player_view_roll_with_traincar( var_1, var_15 ); thread player_rumble_bump( level.player_rumble_ent, var_14, 0.0, 0.2, 0.0, 0.4 ); thread train_quake( var_13, 1.2, level.player.origin, 128 ); thread player_sway_bump( var_12, 0.1, 1.5, 1.4 ); if ( var_4 ) { level.player shellshock( "default_nosound", 2 ); level.player thread maps\skyway_fx::shockwave_dirt_hit( 1, 0.1, 4 ); radiusdamage( var_5, 3000, 40, 10 ); } } ambient_airbursts_player_effcts( var_0 ) { var_1 = 0.19; var_2 = 0.05; var_3 = 0.2; var_4 = 0.05; var_5 = distance( var_0.origin, level.player.origin ); var_6 = 4000; var_7 = 18000; var_8 = normalize_value( var_6, var_7, var_5 ); var_9 = factor_value_min_max( var_2, var_1, var_8 ); var_10 = factor_value_min_max( var_4, var_3, var_8 ); thread player_rumble_bump( level.player_rumble_amb_ent, var_10, 0.0, 0.2, 0.0, 0.4 ); thread train_quake( var_9, 1.2, level.player.origin, 128 ); } train_factor_explosion_time_offset_weight_dir( var_0, var_1, var_2 ) { if ( !isdefined( var_1 ) ) var_1 = 1; var_3 = 100000; var_4 = 11000; var_5 = 1500; var_6 = 7; var_7 = 0.38; var_8 = 0.18; var_9 = ""; var_10 = var_3; var_11 = 0; foreach ( var_13 in self.cars ) { var_14 = distance( var_0, var_13.body.origin ); var_15 = anglestoright( var_13.body.angles ); var_16 = var_0 - var_13.body.origin; var_17 = vectordot( var_15, var_16 ); var_18 = normalize_value( 0, var_3, var_14 ); var_13.overlaydelay = factor_value_min_max( 0, var_6, var_18 ); var_19 = normalize_value( var_5, var_4, var_14 ); if ( isdefined( var_2 ) ) var_13.overlayweight = var_2; else var_13.overlayweight = factor_value_min_max( var_7, var_8, var_19 ); if ( var_14 < var_10 ) { var_10 = var_14; var_11 = var_13.overlaydelay; if ( var_17 > 0 ) { var_9 = "R"; continue; } var_9 = "L"; } } foreach ( var_13 in self.cars ) var_13.overlaydelay = var_13.overlaydelay - var_11 * ( 1 - var_1 ); return var_9; } rt_helo_fx_setup( var_0 ) { self.fx_org_tail = common_scripts\utility::spawn_tag_origin(); self.fx_org_engine = common_scripts\utility::spawn_tag_origin(); self.fx_org_belly = common_scripts\utility::spawn_tag_origin(); self.fx_org_belly2 = common_scripts\utility::spawn_tag_origin(); self.fx_org_tail thread maps\skyway_fx::fx_origin_link_with_train_angles( self, var_0.body, "TAG_tail_damage_fx" ); self.fx_org_engine thread maps\skyway_fx::fx_origin_link_with_train_angles( self, var_0.body, "TAG_engine_damage_fx" ); self.fx_org_belly thread maps\skyway_fx::fx_origin_link_with_train_angles( self, var_0.body, "TAG_belly_damage_fx" ); self.fx_org_belly2 thread maps\skyway_fx::fx_origin_link_with_train_angles( self, var_0.body, "TAG_belly_2_damage_fx" ); self.fx_glass_front = rt_spawn_and_link_helo_glass( "rt_helo_glass_front", "glass_front" ); self.fx_glass_front_b = rt_spawn_and_link_helo_glass( "rt_helo_glass_front_b", "glass_front_b" ); self.fx_glass_mid_1 = rt_spawn_and_link_helo_glass( "rt_helo_glass_mid_1", "glass_mid_1" ); self.fx_glass_mid_2 = rt_spawn_and_link_helo_glass( "rt_helo_glass_mid_2", "glass_mid_2" ); self.fx_glass_back = rt_spawn_and_link_helo_glass( "rt_helo_glass_back", "glass_back" ); self retargetscriptmodellighting( var_0.body ); self.fx_glass_front retargetscriptmodellighting( var_0.body ); self.fx_glass_front_b retargetscriptmodellighting( var_0.body ); self.fx_glass_mid_1 retargetscriptmodellighting( var_0.body ); self.fx_glass_mid_2 retargetscriptmodellighting( var_0.body ); self.fx_glass_back retargetscriptmodellighting( var_0.body ); } rt_helo_crashed_fx_setup( var_0 ) { self.crashed.fx_org_tail_rotor = common_scripts\utility::spawn_tag_origin(); self.crashed.fx_org_tail_break = common_scripts\utility::spawn_tag_origin(); self.crashed.fx_org_body = common_scripts\utility::spawn_tag_origin(); self.crashed.fx_org_tail_rotor thread maps\skyway_fx::fx_origin_link_with_train_angles( self.crashed, var_0.body, "j_tail_rotor_rear" ); self.crashed.fx_org_tail_break thread maps\skyway_fx::fx_origin_link_with_train_angles( self.crashed, var_0.body, "j_tail_003" ); self.crashed.fx_org_body thread maps\skyway_fx::fx_origin_link_with_train_angles( self.crashed, var_0.body, "TAG_DEATHFX" ); } rt_spawn_and_link_helo_glass( var_0, var_1 ) { var_2 = maps\_utility::spawn_anim_model( var_0 ); var_2 linkto( self, "body_animate_jnt", ( 0, 0, 0 ), ( 0, 0, 0 ) ); if ( isdefined( var_1 ) ) thread rt_helo_break_glass( var_2, var_1 ); return var_2; } rt_helo_break_glass( var_0, var_1 ) { self endon( "death" ); var_0 setcandamage( 1 ); if ( !isdefined( self.ally_glass_kill ) ) self.ally_glass_kill = 0; for (;;) { var_0 waittill( "damage", var_2, var_3 ); if ( isplayer( var_3 ) ) break; if ( self.ally_glass_kill < 2 && var_1 != "glass_front" ) { self.ally_glass_kill = self.ally_glass_kill + 1; break; } } rt_helo_damage_fx( var_1 ); } rt_helo_damage_fx( var_0 ) { switch ( var_0 ) { case "belly_damage": playfxontag( common_scripts\utility::getfx( "rt_helo_belly_damage" ), self.fx_org_belly, "tag_origin" ); break; case "belly_crit": break; case "belly_death": stopfxontag( common_scripts\utility::getfx( "rt_helo_belly_damage" ), self.fx_org_belly, "tag_origin" ); playfxontag( common_scripts\utility::getfx( "rt_helo_belly_death" ), self.fx_org_belly, "tag_origin" ); playfxontag( common_scripts\utility::getfx( "rt_helo_belly_death2" ), self.fx_org_belly2, "tag_origin" ); break; case "engine_damage": playfxontag( common_scripts\utility::getfx( "rt_helo_engine_damage" ), self.fx_org_engine, "tag_origin" ); break; case "engine_crit": break; case "engine_death": stopfxontag( common_scripts\utility::getfx( "rt_helo_engine_damage" ), self.fx_org_engine, "tag_origin" ); playfxontag( common_scripts\utility::getfx( "rt_helo_engine_death" ), self.fx_org_engine, "tag_origin" ); break; case "tail_damage": playfxontag( common_scripts\utility::getfx( "rt_helo_tail_damage" ), self.fx_org_tail, "tag_origin" ); break; case "tail_crit": break; case "tail_death": stopfxontag( common_scripts\utility::getfx( "rt_helo_tail_damage" ), self.fx_org_tail, "tag_origin" ); playfxontag( common_scripts\utility::getfx( "rt_helo_tail_death" ), self.fx_org_tail, "tag_origin" ); self setanimknob( level.scr_anim["rt_helo_small"]["blades_top"] ); break; case "glass_front": var_1 = self.fx_glass_front; self.fx_glass_front = rt_spawn_and_link_helo_glass( "rt_helo_broken_glass_front" ); playfxontag( common_scripts\utility::getfx( "rt_helo_glass_front" ), self.fx_glass_front, "tag_break" ); var_1 delete(); break; case "glass_front_b": var_1 = self.fx_glass_front_b; self.fx_glass_front_b = rt_spawn_and_link_helo_glass( "rt_helo_broken_glass_front_b" ); playfxontag( common_scripts\utility::getfx( "rt_helo_glass_front_b" ), self.fx_glass_front_b, "tag_break" ); var_1 delete(); break; case "glass_back": var_1 = self.fx_glass_back; self.fx_glass_back = rt_spawn_and_link_helo_glass( "rt_helo_broken_glass_back" ); playfxontag( common_scripts\utility::getfx( "rt_helo_glass_back" ), self.fx_glass_back, "tag_break" ); var_1 delete(); break; case "glass_mid_1": var_1 = self.fx_glass_mid_1; self.fx_glass_mid_1 = rt_spawn_and_link_helo_glass( "rt_helo_broken_glass_mid_1" ); playfxontag( common_scripts\utility::getfx( "rt_helo_glass_mid_1" ), self.fx_glass_mid_1, "tag_break" ); var_1 delete(); break; case "glass_mid_2": var_1 = self.fx_glass_mid_2; self.fx_glass_mid_2 = rt_spawn_and_link_helo_glass( "rt_helo_broken_glass_mid_2" ); playfxontag( common_scripts\utility::getfx( "rt_helo_glass_mid_2" ), self.fx_glass_mid_2, "tag_break" ); var_1 delete(); break; } } rt_helo_cleanup() { stopfxontag( common_scripts\utility::getfx( "rt_helo_belly_damage" ), self.fx_org_belly, "tag_origin" ); stopfxontag( common_scripts\utility::getfx( "rt_helo_belly_death" ), self.fx_org_belly, "tag_origin" ); stopfxontag( common_scripts\utility::getfx( "rt_helo_belly_death2" ), self.fx_org_belly2, "tag_origin" ); stopfxontag( common_scripts\utility::getfx( "rt_helo_engine_damage" ), self.fx_org_engine, "tag_origin" ); stopfxontag( common_scripts\utility::getfx( "rt_helo_engine_death" ), self.fx_org_engine, "tag_origin" ); stopfxontag( common_scripts\utility::getfx( "rt_helo_tail_damage" ), self.fx_org_tail, "tag_origin" ); stopfxontag( common_scripts\utility::getfx( "rt_helo_tail_death" ), self.fx_org_tail, "tag_origin" ); self.org.link1 delete(); self.org.link2 delete(); self.fx_org_tail delete(); self.fx_org_engine delete(); self.fx_org_belly delete(); self.fx_org_belly2 delete(); self.fx_glass_front delete(); self.fx_glass_front_b delete(); self.fx_glass_mid_1 delete(); self.fx_glass_mid_2 delete(); self.fx_glass_back delete(); foreach ( var_1 in self.riders ) { if ( isdefined( var_1 ) && isalive( var_1 ) ) var_1 delete(); } } rt_helo_bullethits() { self endon( "death" ); for (;;) { self waittill( "damage", var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10, var_11 ); if ( isplayer( var_1 ) ) { var_12 = rotatevectorinverted( var_3 - var_10, var_11 ); if ( var_12[0] < 0 ) thread helo_bullethit_fx( var_12 ); } wait( level.timestep ); } } helo_bullethit_fx( var_0 ) { var_1 = common_scripts\utility::spawn_tag_origin(); var_1 linkto( self, "tag_origin", var_0, ( 0, 0, 0 ) ); wait 0.05; playfxontag( common_scripts\utility::getfx( "sw_helo_bullet_hit" ), var_1, "tag_origin" ); wait 3; var_1 delete(); } spawn_allies( var_0 ) { var_1 = 1; if ( level.start_point == "end_beach" ) var_0 = "spawner_allies_swim"; var_2 = getentarray( var_0, "script_noteworthy" ); foreach ( var_4 in var_2 ) var_4 maps\_utility::add_spawn_function( ::spawnfunc_ally ); if ( isdefined( level._ally ) ) { level._ally maps\_utility::stop_magic_bullet_shield(); level._ally delete(); } level._allies = spawn_allies_group( var_2 ); level._ally = level._allies[0]; maps\_utility::delaythread( 0.05, maps\_utility::set_team_bcvoice, "allies", "taskforce" ); } spawn_allies_group( var_0 ) { var_1 = []; foreach ( var_3 in var_0 ) { if ( issubstr( var_3.targetname, "ally_01" ) ) { var_3.script_friendname = "Hesh"; var_4 = var_3 maps\_utility::spawn_ai(); var_4.animname = "ally1"; var_4.v.invincible = 1; var_1[0] = var_4; continue; } if ( issubstr( var_3.targetname, "ally_02" ) ) { var_3.script_friendname = "Merrick"; var_4 = var_3 maps\_utility::spawn_ai(); var_4.animname = "ally2"; var_1[1] = var_4; continue; } } return var_1; } spawnfunc_ally() { maps\_utility::set_archetype( "no_helmet" ); maps\_utility::magic_bullet_shield(); thread maps\skyway_util_ai::ally_killer_tracker_proc(); self.hero = 1; } spawn_boss( var_0 ) { if ( isdefined( var_0 ) ) { if ( isdefined( level._boss ) ) { var_1 = level._boss; var_1 maps\_utility::stop_magic_bullet_shield(); var_1 hide(); var_1 common_scripts\utility::delaycall( 0.05, ::delete ); level._boss = undefined; } } else var_0 = "actor_boss"; var_2 = getent( var_0, "targetname" ) maps\_utility::spawn_ai( 1 ); var_2.animname = "boss"; var_2 maps\_utility::magic_bullet_shield(); level._boss = var_2; } delay_retreat( var_0, var_1, var_2, var_3, var_4, var_5, var_6 ) { if ( isdefined( var_2 ) ) thread opfor_retreat( var_0, var_2, var_3, var_4, var_5, var_6 ); common_scripts\utility::flag_wait_or_timeout( var_3, var_1 ); if ( common_scripts\utility::flag( var_3 ) && !isdefined( level.opfor_retreat ) ) { thread retreat_proc( var_3, var_4, var_5 ); return; } thread retreat_proc( var_3, var_4, var_5, var_6 ); level.opfor_retreat = undefined; } opfor_retreat( var_0, var_1, var_2, var_3, var_4, var_5 ) { level endon( var_2 ); if ( var_1 >= 0 ) { while ( maps\_utility::get_ai_group_sentient_count( var_0 ) > var_1 ) wait 0.1; } else { for ( var_6 = var_1; var_6 < 0; var_6++ ) { level waittill( "ai_killed", var_7 ); if ( !isdefined( var_7.script_aigroup ) || var_7.script_aigroup != var_0 ) var_6--; } } level.opfor_retreat = 1; common_scripts\utility::flag_set( var_2 ); } retreat_proc( var_0, var_1, var_2, var_3 ) { if ( !common_scripts\utility::flag( var_0 ) ) common_scripts\utility::flag_set( var_0 ); if ( isdefined( var_1 ) && !isarray( var_1 ) ) var_1 = [ var_1 ]; if ( isdefined( var_1 ) ) { var_4 = []; foreach ( var_6 in var_1 ) { var_6 = getent( var_6, "targetname" ); if ( isdefined( var_6 ) ) var_4[var_4.size] = var_6; } if ( var_4.size > 0 ) var_1 = var_4; else var_1 = undefined; } if ( isdefined( var_1 ) ) { var_1[0] notify( "trigger" ); wait 0.05; if ( isdefined( var_2 ) && var_2 ) { foreach ( var_6 in var_1 ) { if ( isdefined( var_6 ) ) var_6 delete(); } } } if ( isdefined( var_3 ) && !isarray( var_3 ) ) var_3 = [ var_3 ]; if ( isdefined( var_3 ) ) { foreach ( var_11 in var_3 ) level notify( var_11 ); } } kt_time( var_0 ) { if ( !isdefined( level.killer_tracker ) ) return var_0; if ( level.killer_tracker > 2 ) return var_0 * clamp( level.killer_tracker - 1, 1, 5 ); return var_0; } real_reload() { self endon( "death" ); for (;;) { self waittill( "reload_start" ); var_0 = self getcurrentweapon(); var_1 = self getcurrentweaponclipammo(); thread real_reload_proc( var_0, var_1 ); } } real_reload_proc( var_0, var_1 ) { self endon( "death" ); self endon( "weapon_fire" ); self endon( "weapon_change" ); self endon( "weapon_dropped" ); self waittill( "reload" ); if ( var_0 == self getcurrentweapon() && var_1 != self getcurrentweaponclipammo() ) { var_2 = self getweaponammostock( var_0 ); self setweaponammostock( var_0, var_2 - var_1 ); } } istrue( var_0 ) { if ( isdefined( var_0 ) && var_0 ) return 1; return 0; } player_start( var_0 ) { var_1 = var_0; if ( isstring( var_0 ) ) var_1 = getent( var_0, "targetname" ); level.player setorigin( var_1.origin ); level.player setplayerangles( var_1.angles ); } teleport_ai_instant() { self endon( "death" ); self teleportentityrelative( self, self.spawner ); self teleportentityrelative( self.car.ref_start, self.car.ref_end ); } teleport_ent_generic( var_0 ) { self endon( "death" ); if ( !isdefined( var_0 ) ) var_0 = level._train; for (;;) { var_0 waittill( "train_teleport_ready" ); wait 0.05; if ( !self islinked() ) self teleportentityrelative( var_0.path.start_org, var_0.path.end_org ); wait 0.05; } } get_local_coords( var_0, var_1, var_2, var_3 ) { if ( !isdefined( var_1 ) ) var_1 = self.origin; if ( !isdefined( var_2 ) ) var_2 = self.angles; if ( isdefined( var_3 ) && var_3 ) var_0 = common_scripts\utility::drop_to_ground( var_0, 100, -100 ); return rotatevectorinverted( var_0 - var_1, var_2 ); } flag_wait_badplace_brush( var_0, var_1, var_2, var_3, var_4 ) { if ( !isarray( var_0 ) ) var_0 = [ var_0, 0 ]; if ( !isarray( var_3 ) ) var_3 = [ var_3 ]; common_scripts\utility::flag_wait( var_0[0] ); if ( var_0.size > 2 ) common_scripts\utility::flag_wait_or_timeout( var_0[2], var_0[1] ); else wait( var_0[1] ); foreach ( var_7, var_6 in var_3 ) badplace_brush_moving( var_1 + var_7, var_2, var_6, "axis", var_4 ); } badplace_brush_moving( var_0, var_1, var_2, var_3, var_4 ) { var_2 endon( "death" ); if ( isdefined( var_4 ) && !isarray( var_4 ) ) var_4 = [ var_4, 0 ]; var_2.angles = var_2.angles * ( 0, 1, 0 ); badplace_brush( var_0, var_1, var_2, var_3 ); var_2 thread badplace_brush_flatten_angles(); if ( isdefined( var_4[0] ) ) { common_scripts\utility::flag_wait( var_4[0] ); wait( var_4[1] ); var_2 delete(); } } badplace_brush_flatten_angles() { self endon( "death" ); for (;;) { wait 0.05; self.angles = self.angles * ( 0, 1, 0 ); } } normalize_value( var_0, var_1, var_2 ) { if ( var_2 > var_1 ) return 1.0; else if ( var_2 < var_0 ) return 0.0; return ( var_2 - var_0 ) / ( var_1 - var_0 ); } factor_value_min_max( var_0, var_1, var_2 ) { return var_1 * var_2 + var_0 * ( 1 - var_2 ); } fall_check() { return !level.player.b_falling; } temp_dialogue_line( var_0, var_1, var_2 ) { if ( getdvarint( "loc_warnings", 0 ) ) return; if ( !isdefined( level.dialogue_huds ) ) level.dialogue_huds = []; var_3 = 0; for (;;) { if ( !isdefined( level.dialogue_huds[var_3] ) ) break; var_3++; } var_4 = "^3"; if ( !isdefined( var_2 ) ) var_2 = 1; var_2 = max( 1, var_2 ); level.dialogue_huds[var_3] = 1; var_5 = maps\_hud_util::createfontstring( "default", 1.5 ); var_5.location = 0; var_5.alignx = "left"; var_5.aligny = "top"; var_5.foreground = 1; var_5.sort = 20; var_5.alpha = 0; var_5 fadeovertime( 0.5 ); var_5.alpha = 1; var_5.x = 40; var_5.y = 260 + var_3 * 18; var_5.label = " " + var_4 + "< " + var_0 + " > ^7" + var_1; var_5.color = ( 1, 1, 1 ); wait( var_2 ); var_6 = 10.0; var_5 fadeovertime( 0.5 ); var_5.alpha = 0; for ( var_7 = 0; var_7 < var_6; var_7++ ) { var_5.color = ( 1, 1, 0 / ( var_6 - var_7 ) ); wait 0.05; } wait 0.25; var_5 destroy(); level.dialogue_huds[var_3] = undefined; } debug_show_pos( var_0 ) { self notify( "stop_debug_show_pos" ); self endon( "stop_debug_show_pos" ); self endon( "death" ); if ( !isdefined( var_0 ) ) var_0 = ( 1, 1, 1 ); for (;;) wait 0.05; } notifyanimcomplete( var_0, var_1, var_2, var_3 ) { if ( !isdefined( var_3 ) ) var_3 = 0.0; var_4 = getanimlength( level.scr_anim[var_0.animname][var_1] ); var_4 = var_4 - var_3; if ( var_4 < 0 ) var_4 = 0; wait( var_4 ); level notify( var_2 ); } show_train_geo( var_0, var_1 ) { if ( !isdefined( var_1 ) ) var_1 = []; var_2 = getarraykeys( level._train.cars ); var_3 = level._train.cars; level._train.hidden_parts = 0; foreach ( var_5 in var_2 ) { var_6 = var_3[var_5]; var_7 = getarraykeys( var_6.other_linked_parts ); if ( isdefined( common_scripts\utility::array_find( var_0, var_5 ) ) ) { var_6.sus_f show_if_defined(); var_6.sus_b show_if_defined(); foreach ( var_9 in var_6.other_linked_parts ) common_scripts\utility::array_thread( var_9, ::show_if_defined ); continue; } if ( var_1.size == 0 ) { var_6.sus_f hide_if_defined(); var_6.sus_b hide_if_defined(); level._train.hidden_parts = 2; var_1 = var_7; } else { var_6.sus_f show_if_defined(); var_6.sus_b show_if_defined(); } foreach ( var_12 in var_7 ) { var_9 = var_6.other_linked_parts[var_12]; if ( isdefined( common_scripts\utility::array_find( var_1, var_12 ) ) ) { common_scripts\utility::array_thread( var_9, ::hide_if_defined ); level._train.hidden_parts = level._train.hidden_parts + var_9.size; continue; } common_scripts\utility::array_thread( var_9, ::show_if_defined ); } } } show_if_defined() { if ( !isdefined( self ) || isdefined( self.noshow ) && self.noshow ) return; self show(); } hide_if_defined() { if ( !isdefined( self ) || isdefined( self.nohide ) && self.nohide ) return; self hide(); } hidenoshow() { self hide(); setnoshow( 1 ); } shownoshow() { self show(); setnoshow( 0 ); } setnoshow( var_0 ) { self.noshow = var_0; } setnohide( var_0 ) { self.nohide = var_0; } create_view_particle_source() { if ( !isdefined( self._source ) ) { var_0 = common_scripts\utility::spawn_tag_origin(); var_0.origin = self geteye(); var_1 = var_0 common_scripts\utility::spawn_tag_origin(); var_1 linkto( self ); self._source = var_0; self._source_base = var_1; thread start_current_car_watcher(); if ( self == level.player ) level.view_particle_source = var_0; } } start_current_car_watcher() { self endon( "death" ); self endon( "stop_current_car_watcher" ); self.car = "none"; self.b_falling = 0; for (;;) { var_0 = self getmovingplatformparent(); if ( isdefined( var_0 ) && isdefined( var_0.script_noteworthy ) && issubstr( var_0.script_noteworthy, "train" ) ) { var_1 = var_0.script_noteworthy; if ( self.car != var_1 ) self.car = var_1; if ( self.b_falling ) self.b_falling = 0; } else if ( !self.b_falling ) self.b_falling = 1; if ( isdefined( self._source ) && self.car != "none" ) { self._source.origin = self._source_base.origin; self._source.angles = level._train.cars[self.car].body.angles; } wait 0.05; } } stop_current_car_watcher() { self notify( "stop_current_car_watcher" ); if ( isdefined( self._source ) ) self._source delete(); } getcurrenttraincar() { for ( var_0 = 0; var_0 < 3; var_0++ ) { var_1 = self getmovingplatformparent(); if ( isdefined( var_1 ) && isdefined( var_1.script_noteworthy ) && issubstr( var_1.script_noteworthy, "train" ) ) return var_1.script_noteworthy; wait 0.05; } return undefined; } linktotrain( var_0 ) { self linkto( level._train.cars[var_0].body, "j_spineupper" ); } trig_watcher( var_0, var_1, var_2, var_3 ) { if ( isdefined( var_3 ) ) level endon( var_3 ); var_4 = "flag_" + var_0; if ( !common_scripts\utility::flag_exist( var_4 ) ) common_scripts\utility::flag_init( var_4 ); for (;;) { maps\_utility::trigger_wait_targetname( var_0 ); if ( isdefined( var_1 ) && !common_scripts\utility::flag( var_4 ) ) thread [[ var_1 ]](); common_scripts\utility::flag_set( var_4 ); level notify( var_4 + "set" ); thread trig_watcher_off( var_4, var_2 ); } } trig_watcher_off( var_0, var_1, var_2 ) { if ( isdefined( var_2 ) ) level endon( var_2 ); level endon( var_0 + "set" ); wait 0.1; common_scripts\utility::flag_clear( var_0 ); if ( isdefined( var_1 ) ) thread [[ var_1 ]](); } dialogue_nag( var_0, var_1, var_2 ) { if ( isdefined( var_1 ) ) level endon( var_1 ); var_3 = 0; if ( self == level ) var_3 = 1; foreach ( var_5 in var_0 ) { wait( randomfloatrange( 5, 8 ) ); if ( var_3 ) { thread maps\_utility::smart_radio_dialogue( var_5 ); continue; } thread maps\_utility::smart_dialogue( var_5 ); } if ( isdefined( var_2 ) ) { thread [[ var_2 ]](); return; } var_7 = var_0; for (;;) { if ( var_7.size == 0 ) var_7 = var_0; wait 13; var_5 = common_scripts\utility::random( var_7 ); var_7 = common_scripts\utility::array_remove( var_7, var_5 ); if ( var_3 ) { thread maps\_utility::smart_radio_dialogue( var_5 ); continue; } thread maps\_utility::smart_dialogue( var_5 ); } } spawn_tag_origin_from_tag( var_0, var_1 ) { var_2 = common_scripts\utility::spawn_tag_origin(); var_2.origin = self gettagorigin( var_0 ); var_2.angles = self gettagangles( var_0 ); if ( isdefined( var_1 ) ) var_2 linkto( var_1 ); return var_2; } death_watcher() { common_scripts\utility::flag_wait_either( "flag_kill_plane", "flag_death_crush" ); level.player enableinvulnerability(); var_0 = &"SKYWAY_FAIL_KILL_PLANE"; var_1 = level.player.origin; wait 0.05; var_2 = level.player.origin; var_3 = ( var_2 - var_1 ) * 20; var_3 = var_3 - ( 0, 0, 128 ); level.player thread maps\skyway_audio::skyway_death_fall_sfx(); setup_player_for_animated_sequence( 0, 0 ); var_4 = level.player_rig; var_5 = level.player_mover; var_4 thread maps\_anim::anim_single_solo( var_4, "death_fall" ); level.player playerlinktoblend( var_4, "tag_player", 0.5 ); level.player hideviewmodel(); var_5 movegravity( var_3, 8 ); var_6 = 0; var_7 = 0; var_8 = 2; var_9 = 0; for ( var_10 = 0; var_10 < var_8 + 1; var_10 = var_10 + 0.05 ) { var_3 = var_3 * 2; var_11 = ( 0, 0, -128 ); var_12 = anglestoforward( level.player_mover.angles ) * 128; var_13["fall_direction"] = bullettrace( level.player.origin, level.player.origin + var_3, 0 ); var_13["down"] = bullettrace( level.player.origin, level.player.origin + var_11, 0 ); var_13["forward"] = bullettrace( level.player.origin, level.player.origin + var_12, 0 ); foreach ( var_17, var_15 in var_13 ) { if ( var_15["surfacetype"] != "none" ) { var_16 = var_15["entity"]; if ( isdefined( var_16 ) ) { if ( isdefined( var_16.script_noteworthy ) && isdefined( level._train.cars[var_16.script_noteworthy] ) ) continue; if ( isdefined( var_16.targetname ) && issubstr( var_16.targetname, "sat" ) ) continue; } var_6 = 1; break; } if ( common_scripts\utility::flag( "flag_death_crush" ) && !var_7 ) { level.player dodamage( 1000, level.player.origin ); earthquake( 1.0, 0.6, level.player.origin, 128 ); thread blur( 0.5, 20, 0, 1 ); var_7 = 1; } } if ( ( var_6 || var_10 >= var_8 ) && !var_9 ) { setdvar( "ui_deadquote", var_0 ); maps\_utility::missionfailedwrapper(); var_9 = 1; } if ( var_6 ) { var_4 hide(); var_4 unlink(); level.player dodamage( 1000, level.player.origin ); earthquake( 1.0, 0.6, level.player.origin, 128 ); return; } var_1 = level.player_mover.origin; wait 0.05; var_2 = level.player_mover.origin; var_3 = var_2 - var_1; } } blur( var_0, var_1, var_2, var_3 ) { setblur( var_1, 0 ); wait( var_0 ); setblur( var_2, var_3 ); } setup_player_for_animated_sequence( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 ) { if ( !isdefined( var_0 ) ) var_0 = 1; if ( var_0 ) { if ( !isdefined( var_1 ) ) var_1 = 60; } if ( !isdefined( var_8 ) ) var_8 = 1; if ( !isdefined( var_2 ) ) var_2 = level.player.origin; if ( !isdefined( var_3 ) ) var_3 = level.player.angles; if ( !isdefined( var_4 ) ) var_4 = 1; if ( !isdefined( var_6 ) ) var_6 = "player_rig"; var_9 = maps\_utility::spawn_anim_model( var_6, var_2 ); level.player_rig = var_9; var_9.angles = var_3; var_9.animname = var_6; if ( isdefined( var_7 ) ) var_10 = maps\_utility::spawn_anim_model( var_7 ); else var_10 = common_scripts\utility::spawn_tag_origin(); level.player_mover = var_10; var_10.origin = var_2; var_10.angles = var_3; var_9 linkto( var_10 ); if ( var_0 ) { if ( isarray( var_1 ) ) level.player playerlinktodelta( var_9, "tag_player", var_8, var_1[0], var_1[1], var_1[2], var_1[3], 1 ); else level.player playerlinktodelta( var_9, "tag_player", var_8, var_1, var_1, var_1, var_1, 1 ); } if ( var_4 ) thread player_animated_sequence_restrictions( var_5 ); } player_animated_sequence_restrictions( var_0 ) { if ( isdefined( var_0 ) && var_0 ) level.player waittill( "notify_player_animated_sequence_restrictions" ); level.player.disablereload = 1; level.player disableweapons(); level.player disableoffhandweapons(); level.player disableweaponswitch(); level.player allowcrouch( 0 ); level.player allowjump( 0 ); level.player allowmelee( 0 ); level.player allowprone( 0 ); level.player allowsprint( 0 ); } player_animated_sequence_cleanup() { if ( !isdefined( level.player.early_weapon_enabled ) || !level.player.early_weapon_enabled ) { level.player.early_weapon_enabled = undefined; level.player.disablereload = 0; level.player enableweapons(); level.player enableoffhandweapons(); level.player enableweaponswitch(); } level.player allowcrouch( 1 ); level.player allowjump( 1 ); level.player allowmelee( 1 ); level.player allowprone( 1 ); level.player allowsprint( 1 ); level.player unlink(); if ( isdefined( level.player_mover ) ) level.player_mover delete(); if ( isdefined( level.player_rig ) ) level.player_rig delete(); } check_anim_time( var_0, var_1, var_2 ) { var_3 = self getanimtime( level.scr_anim[var_0][var_1] ); if ( var_3 >= var_2 ) return 1; return 0; } dynamic_sun_sample_size() { var_0 = 1.0; var_1 = 0.3; var_2 = 0.25; for (;;) { var_3 = level.player getplayerangles(); var_4 = combineangles( ( 0, -90, 0 ), var_3 ); var_4 = anglestoforward( var_4 ); var_5 = vectordot( vectornormalize( var_4 ), ( 0, 0, -1 ) ); var_5 = clamp( var_5, 0, 1 ); var_6 = var_1 - var_0; var_2 = var_6 * var_5 + var_0; setsaveddvar( "sm_sunSampleSizeNear", var_2 ); wait 0.05; } } set_motionblur_values( var_0, var_1, var_2, var_3, var_4 ) { if ( maps\_utility::is_gen4() ) { var_5 = getdvarfloat( "r_mbCameraRotationInfluence" ); var_6 = getdvarfloat( "r_mbCameraTranslationInfluence" ); var_7 = getdvarfloat( "r_mbModelVelocityScalar" ); var_8 = getdvarfloat( "r_mbStaticVelocityScalar" ); var_9 = 0; var_10 = var_4 / level.timestep; while ( var_9 < var_4 ) { if ( isdefined( var_0 ) ) { if ( var_5 != var_0 ) { var_11 = clamp( getdvarfloat( "r_mbCameraRotationInfluence" ) + ( var_0 - var_5 ) / var_10, 0, 1 ); setsaveddvar( "r_mbCameraRotationInfluence", var_11 ); } } else { } if ( isdefined( var_1 ) ) { if ( var_6 != var_1 ) { var_12 = clamp( getdvarfloat( "r_mbCameraTranslationInfluence" ) + ( var_1 - var_6 ) / var_10, 0, 1 ); setsaveddvar( "r_mbCameraTranslationInfluence", var_12 ); } } else { } if ( isdefined( var_2 ) ) { if ( var_7 != var_2 ) { var_13 = clamp( getdvarfloat( "r_mbModelVelocityScalar" ) + ( var_2 - var_7 ) / var_10, 0, 1000 ); setsaveddvar( "r_mbModelVelocityScalar", var_13 ); } } else { } if ( isdefined( var_3 ) ) { if ( var_8 != var_3 ) { var_14 = clamp( getdvarfloat( "r_mbStaticVelocityScalar" ) + ( var_3 - var_8 ) / var_10, 0, 1000 ); setsaveddvar( "r_mbStaticVelocityScalar", var_14 ); } } else { } var_9 = var_9 + level.timestep; wait( level.timestep ); } } } flag_watcher( var_0, var_1, var_2, var_3 ) { if ( isdefined( var_3 ) ) level endon( var_3 ); if ( !common_scripts\utility::flag_exist( var_0 ) ) common_scripts\utility::flag_init( var_0 ); var_4 = 0; for (;;) { if ( common_scripts\utility::flag( var_0 ) && !var_4 ) { if ( isdefined( var_1 ) ) self thread [[ var_1 ]](); var_4 = 1; } else if ( !common_scripts\utility::flag( var_0 ) && var_4 ) { if ( isdefined( var_2 ) ) self thread [[ var_2 ]](); var_4 = 0; } wait 0.05; } } wind_watcher() { level endon( "stop_wind_watcher" ); var_0 = 0; var_1 = 0; for (;;) { if ( common_scripts\utility::flag( "wind_3" ) ) var_0 = 3; else if ( common_scripts\utility::flag( "wind_2" ) ) var_0 = 2; else if ( common_scripts\utility::flag( "wind_1" ) ) var_0 = 1; else var_0 = 0; common_scripts\utility::flag_clear( "wind_3" ); common_scripts\utility::flag_clear( "wind_2" ); common_scripts\utility::flag_clear( "wind_1" ); if ( var_0 != var_1 ) wind_funcs( var_0 ); var_1 = var_0; wait 0.05; } } stop_wind_watcher() { level notify( "stop_wind" ); level notify( "stop_wind_watcher" ); } wind_funcs( var_0 ) { level notify( "stop_wind" ); switch ( var_0 ) { case 3: thread maps\skyway_fx::fx_like_dust_in_the_wind_03(); break; case 2: thread maps\skyway_fx::fx_like_dust_in_the_wind_02(); break; case 1: thread maps\skyway_fx::fx_like_dust_in_the_wind_01(); break; case 0: } } setup_door( var_0, var_1, var_2 ) { var_3 = undefined; if ( isstring( var_0 ) ) var_3 = getent( var_0, "targetname" ); else var_3 = var_0; if ( var_3.classname != "script_model" && var_3.classname != "script_brushmodel" ) { } var_4 = undefined; if ( isdefined( var_3.target ) ) { var_5 = getentarray( var_3.target, "targetname" ); foreach ( var_7 in var_5 ) { if ( var_7.classname == "script_brushmodel" ) { var_4 = var_7; continue; } if ( var_7.classname == "script_origin" ) { if ( !isdefined( var_2 ) ) { var_3.hinge = var_7; var_3.hinge.tag_name = var_2; var_3 linkto( var_3.hinge ); } } } } if ( isdefined( var_2 ) ) { var_3.hinge = common_scripts\utility::spawn_tag_origin(); var_3.hinge.origin = var_3 gettagorigin( var_2 ); var_3.hinge.angles = var_3 gettagangles( var_2 ); if ( !isdefined( var_1 ) ) var_3 linkto( var_3.hinge ); } if ( isdefined( var_4 ) ) { var_3.col_brush = var_4; if ( isdefined( var_2 ) ) var_3.col_brush linkto( var_3, var_2 ); else var_3.col_brush linkto( var_3 ); } else if ( var_3.classname == "script_brushmodel" ) var_3.col_brush = var_3; var_3.original_angles = var_3.angles; var_3.original_origin = var_3.origin; if ( isdefined( var_1 ) ) var_3 maps\_utility::assign_animtree( var_1 ); return var_3; } waittill_look_yaw( var_0, var_1, var_2, var_3 ) { if ( !isdefined( var_3 ) ) var_3 = 1; var_4 = vectortoyaw( var_1 - var_0 ); for (;;) { var_5 = level.player.angles[1]; if ( var_3 ) { if ( angleclamp180( var_5 - var_4 ) < var_2 ) return; } else if ( angleclamp180( var_5 - var_4 ) > var_2 ) return; wait 0.05; } } waittill_looking( var_0, var_1, var_2, var_3, var_4, var_5 ) { level endon( "notify_force_rorke" ); var_6 = undefined; if ( isdefined( var_4 ) ) var_6 = var_4; if ( isdefined( var_5 ) && !common_scripts\utility::flag_exist( var_5 ) ) common_scripts\utility::flag_init( var_5 ); var_7 = 0.5; if ( isdefined( var_2 ) ) var_7 = var_2; var_8 = 1; if ( isdefined( var_3 ) && !var_3 ) var_8 = 0; var_9 = undefined; if ( isdefined( var_1 ) ) var_0 = var_0 gettagorigin( var_1 ); else var_0 = var_0.origin; for (;;) { if ( level.player maps\_utility::player_looking_at( var_0, var_7, 1 ) ) var_9 = 1; else var_9 = 0; if ( var_9 && var_8 ) break; if ( !var_9 && !var_8 ) break; wait 0.05; if ( isdefined( var_6 ) ) { var_6 = var_6 - 0.05; if ( var_6 <= 0 ) break; } } if ( isdefined( var_5 ) ) common_scripts\utility::flag_set( var_5 ); } smooth_player_link( var_0, var_1 ) { level.player playerlinktoblend( var_0, "tag_player", var_1 ); wait( var_1 ); level.player playerlinktodelta( var_0, "tag_player", 1, 0, 0, 0, 0, 1 ); var_0 show(); } vision_watcher( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7 ) { if ( !isdefined( level.flag[var_0] ) ) common_scripts\utility::flag_init( var_0 ); if ( !isdefined( level._vision_sets_active ) ) level._vision_sets_active = 0; thread vision_watcher_thread( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7 ); } vision_watcher_thread( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7 ) { if ( isdefined( var_7 ) ) level endon( var_7 ); var_8 = 0; for (;;) { if ( common_scripts\utility::flag( var_0 ) && !var_8 ) { maps\_utility::vision_set_fog_changes( var_1, var_2 ); if ( isdefined( var_5 ) ) thread [[ var_5 ]](); var_8 = 1; level._vision_sets_active++; } else if ( !common_scripts\utility::flag( var_0 ) && var_8 ) { if ( level._vision_sets_active == 1 ) maps\_utility::vision_set_fog_changes( var_3, var_4 ); if ( isdefined( var_6 ) ) thread [[ var_6 ]](); var_8 = 0; level._vision_sets_active--; } wait 0.05; } } waittill_notify_flag_set( var_0, var_1 ) { if ( !common_scripts\utility::flag_exist( var_1 ) ) common_scripts\utility::flag_init( var_1 ); self waittill( var_0 ); common_scripts\utility::flag_set( var_1 ); } waittill_nt( var_0, var_1, var_2, var_3 ) { if ( isdefined( var_3 ) && !common_scripts\utility::flag_exist( var_3 ) ) common_scripts\utility::flag_init( var_3 ); if ( !isdefined( var_2 ) ) var_2 = 0; var_4 = getnotetracktimes( var_0, var_1 )[0]; var_5 = var_4 * getanimlength( var_0 ) + var_2; wait( var_5 ); if ( isdefined( var_3 ) ) common_scripts\utility::flag_set( var_3 ); } waittill_notify_func( var_0, var_1, var_2, var_3 ) { self waittill( var_0 ); if ( isdefined( var_3 ) ) self [[ var_1 ]]( var_2, var_3 ); else if ( isdefined( var_2 ) ) self [[ var_1 ]]( var_2 ); else self [[ var_1 ]](); } black_overlay( var_0 ) { var_1 = newhudelem(); var_1.x = 0; var_1.y = 0; var_1.horzalign = "fullscreen"; var_1.vertalign = "fullscreen"; var_1.foreground = 1; var_1.sort = -999; var_1 setshader( "black", 650, 490 ); var_1.alpha = 1; wait( var_0 ); var_1.alpha = 0; var_1 destroy(); var_1 = undefined; } skyway_introscreen( var_0, var_1 ) { level.chyron = spawnstruct(); level.chyron.huds = []; level.chyron.strips = []; level.chyron.last_strips = []; level.chyron.artifacts = []; level.chyron.text_x = 20; level.chyron.text_y = -82; level.chyron.text_incoming = 0; level.chyron.strips_disabled = 0; level.chyron.sound_org = spawn( "script_origin", level.player.origin ); level.chyron.sound_org linkto( level.player ); level.chyron.no_bg = 0; maps\_introscreen::chyron_sound( 0, "ui_chyron_on" ); thread maps\_introscreen::strips( 0 ); var_2 = 0.4; thread maps\_introscreen::quick_cursor( 0, var_2 ); wait( var_2 ); maps\_introscreen::sub_line( level.introscreen.lines[1], 0 ); wait 0.5; var_3 = maps\_introscreen::sub_line( level.introscreen.lines[2], 1, "default", 1, 1 ); wait 0.5; var_3 = maps\_introscreen::sub_line( level.introscreen.lines[3], 2, "default", 1, 1 ); var_3.color = ( 0.68, 0.744, 0.736 ); wait 1; level.chyron.strips_disabled = 1; wait 2; level.chyron.strips_disabled = 0; wait 1; maps\_introscreen::chyron_sound( 0, "ui_chyron_off" ); maps\_introscreen::faze_out( 0, 1 ); level notify( "stop_chyron" ); level.chyron.sound_org delete(); level.chyron = undefined; } skyway_introscreen_15_mins( var_0, var_1 ) { if ( !isdefined( var_0 ) ) { var_0 = 0; var_2 = 1; } if ( isdefined( var_1 ) ) { var_0 = 1; maps\_hud_util::start_overlay(); level.player freezecontrols( 1 ); level.player common_scripts\utility::delaycall( var_1, ::freezecontrols, 0 ); maps\_utility::delaythread( var_1, ::skyway_introscreen_fade_in ); } level.chyron = spawnstruct(); level.chyron.huds = []; level.chyron.strips = []; level.chyron.last_strips = []; level.chyron.artifacts = []; level.chyron.text_x = -170; level.chyron.text_y = -50; level.chyron.text_incoming = 0; level.chyron.strips_disabled = 0; level.chyron.sound_org = spawn( "script_origin", level.player.origin ); level.chyron.sound_org linkto( level.player ); wait 1; maps\_introscreen::chyron_sound( 0, "ui_chyron_on" ); var_3 = 0.4; thread cursor( 0, var_3 ); wait( var_3 ); maps\_introscreen::chyron_sound( 0, "ui_chyron_firstline" ); big_message( &"SKYWAY_INTROSCREEN_TIMEBEFORE", 3.5 ); maps\_introscreen::chyron_sound( 0, "ui_chyron_off" ); maps\_introscreen::faze_out( 0, var_0 ); level notify( "stop_chyron" ); level.chyron.sound_org delete(); level.chyron = undefined; } skyway_introscreen_fade_in() { var_0 = level.player maps\_hud_util::get_overlay( "black" ); var_0.alpha = 0; level.player freezecontrols( 0 ); } cursor( var_0, var_1 ) { wait 0.5; var_2 = newhudelem(); var_2.x = level.chyron.text_x; var_2.y = level.chyron.text_y; var_2.vertalign = "middle"; var_2.fontscale = 3; var_2.horzalign = "center"; var_2.aligny = "middle"; var_2.sort = 1; var_2.foreground = 1; var_2.hidewheninmenu = 1; var_2.alpha = 0.8; var_2 setshader( "white", 1, 35 ); var_2.color = ( 0.85, 0.93, 0.92 ); var_2 moveovertime( var_1 ); var_2 fadeovertime( var_1 * 0.5 ); var_2.alpha = 0; var_2.x = var_2.x + 300; wait 0.4; var_2 destroy(); } big_message( var_0, var_1 ) { var_2 = newhudelem(); var_2.x = level.chyron.text_x; var_2.y = level.chyron.text_y; var_2.horzalign = "center"; var_2.vertalign = "middle"; var_2.aligny = "middle"; var_2.sort = 3; var_2.foreground = 1; var_2 settext( var_0 ); var_2.text = var_0; var_2.alpha = 0; var_2.hidewheninmenu = 1; var_2.fontscale = 2.4; var_2.color = ( 0.85, 0.93, 0.92 ); var_2.font = "default"; level.chyron.huds[level.chyron.huds.size] = var_2; level.chyron.text_incoming_x = var_2.x; level.chyron.text_incoming_y = var_2.y; level.chyron.text_incoming = 1; wait 0.5; var_3 = dupe_hud( var_0 ); var_3 maps\_utility::delaythread( 1, ::location_dupes_thread, var_1 - 1 ); var_2.glowalpha = 0.05; var_2.glowcolor = var_2.color; var_4 = 0.3; var_2 moveovertime( var_4 ); var_2 fadeovertime( var_4 * 3 ); var_2.y = var_2.y + 10; var_5 = 0.5; var_5 = var_5 - var_4; wait( var_4 ); var_2 thread maps\_introscreen::quick_pulse( 0 ); var_2 setpulsefx( 30, 50000, 700 ); if ( randomint( 100 ) > 10 ) var_2 maps\_utility::delaythread( 2, maps\_introscreen::offset_thread, -7, 7, 3, -5, 5, 3 ); level.chyron.text_incoming = 0; wait( var_1 ); } dupe_hud( var_0 ) { var_1 = newhudelem(); var_1.x = level.chyron.text_x; var_1.y = level.chyron.text_y; var_1.horzalign = "center"; var_1.vertalign = "middle"; var_1.aligny = "middle"; var_1.sort = 3; var_1.foreground = 1; var_1 settext( var_0 ); var_1.text = var_0; var_1.alpha = 0; var_1.hidewheninmenu = 1; var_1.fontscale = 2.4; var_1.color = ( 0.85, 0.93, 0.92 ); var_1.font = "default"; level.chyron.huds[level.chyron.huds.size] = var_1; return var_1; } location_dupes_thread( var_0 ) { var_1 = self.x; var_2 = self.y; self.x = self.x + randomintrange( -30, -10 ); self.y = self.y + randomintrange( 10, 20 ); var_3 = 0.15; self moveovertime( var_3 ); self.x = var_1; self.y = var_2; self fadeovertime( var_3 ); self.alpha = 0.1; wait( var_3 ); self moveovertime( var_0 ); self.x = self.x + randomintrange( 15, 20 ); self.y = self.y + randomintrange( -4, 4 ); wait( var_0 ); var_3 = 0.05; self moveovertime( var_3 ); self.x = var_1; self.y = var_2; wait( var_3 ); self fadeovertime( var_3 ); self.alpha = 0; } player_random_blur( var_0, var_1, var_2 ) { level endon( var_0 ); thread player_random_blur_cleanup( var_0 ); if ( !isdefined( var_1 ) ) var_1 = 0; if ( !isdefined( var_2 ) ) var_2 = 2; var_3 = 0.0; for (;;) { wait( level.timestep ); if ( randomint( 100 ) > 10 ) continue; var_4 = randomint( 4 ) + var_2; var_5 = randomfloatrange( 1, 2 ); var_5 = var_5 + var_3; var_6 = randomfloatrange( 1, 2 ); setblur( var_4 * 1.2, var_5 ); wait( var_5 ); setblur( 0, var_6 ); var_7 = randomfloatrange( 2.0, 3.0 ); wait( var_7 ); var_3 = var_3 + var_1; } } player_random_blur_cleanup( var_0 ) { level waittill( var_0 ); var_1 = randomfloatrange( 1, 2 ); setblur( 0, var_1 ); } waittill_trigger_activate_looking_at( var_0, var_1, var_2, var_3, var_4, var_5, var_6 ) { var_7 = 0.5; if ( isdefined( var_3 ) ) var_7 = var_3; var_8 = 64; if ( isdefined( var_2 ) ) var_8 = var_2; var_9 = var_0; if ( isdefined( var_4 ) ) { var_9 = var_0 common_scripts\utility::spawn_tag_origin(); var_9 linkto( var_0, var_4, ( 0, 0, 0 ), ( 0, 0, 0 ) ); } if ( !isdefined( var_5 ) ) var_5 = 5; var_10 = var_1; if ( !common_scripts\utility::flag_exist( var_10 ) ) common_scripts\utility::flag_init( var_10 ); var_11 = 0; var_12 = 0; for (;;) { if ( level.player ismeleeing() || level.player isthrowinggrenade() || !level.player isonground() || level.player getstance() == "prone" ) { common_scripts\utility::flag_clear( var_10 ); var_12 = 0; level.player enableweaponpickup(); } else if ( level.player maps\_utility::player_looking_at( var_9.origin, var_7, 1 ) ) { if ( isdefined( var_6 ) ) { if ( common_scripts\utility::flag( var_6 ) ) { if ( !common_scripts\utility::flag( var_10 ) ) var_11 = 1; } else { common_scripts\utility::flag_clear( var_10 ); var_12 = 0; level.player enableweaponpickup(); } } else if ( distance( level.player geteye(), var_9.origin ) <= var_8 ) { if ( !common_scripts\utility::flag( var_10 ) ) var_11 = 1; } else { common_scripts\utility::flag_clear( var_10 ); var_12 = 0; level.player enableweaponpickup(); } } else { common_scripts\utility::flag_clear( var_10 ); var_12 = 0; level.player enableweaponpickup(); } if ( level.player usebuttonpressed() ) var_12++; if ( common_scripts\utility::flag( var_10 ) && var_12 >= var_5 ) break; if ( var_11 ) { common_scripts\utility::flag_set( var_10 ); maps\_utility::display_hint_timeout( var_1 ); var_11 = 0; level.player disableweaponpickup(); } wait 0.05; } level.player enableweaponpickup(); common_scripts\utility::flag_clear( var_10 ); if ( isdefined( var_4 ) ) var_9 delete(); } set_twitch( var_0 ) { if ( var_0 ) self.a.bdisablemovetwitch = 0; else self.a.bdisablemovetwitch = 1; } flag_wait_func( var_0, var_1, var_2 ) { common_scripts\utility::flag_wait( var_0 ); if ( isdefined( var_2 ) ) self [[ var_1 ]]( var_2 ); else self [[ var_1 ]](); } waittill_func( var_0, var_1, var_2 ) { self waittill( var_0 ); if ( isdefined( var_2 ) ) self [[ var_1 ]]( var_2 ); else self [[ var_1 ]](); } spawnfunc_death_override() { if ( isdefined( self._death_override ) ) return; self endon( "death" ); if ( !isdefined( level._death_anims ) ) level._death_anims = []; self._death_override = 0; for (;;) { if ( isdefined( self.node ) && isdefined( self.node.script_nodestate ) && check_angles( self.angles, self.node.angles ) ) { if ( !self._death_override ) { if ( isdefined( self.animname ) ) self.animname_old = self.animname; self._old_health = self.health; self.health = 1; self.animname = "generic"; var_0 = strtok( self.node.script_nodestate, " " ); var_0 = common_scripts\utility::array_randomize( var_0 ); var_1 = undefined; foreach ( var_3 in var_0 ) { var_4 = maps\_utility::getanim( var_3 ); if ( !isdefined( common_scripts\utility::array_find( level._death_anims, var_4 ) ) ) { level._death_anims = common_scripts\utility::array_add( level._death_anims, var_4 ); var_1 = var_3; break; } } if ( !isdefined( var_1 ) ) { if ( var_0.size > 1 ) { for ( var_6 = 1; var_6 < var_0.size; var_6++ ) level._death_anims = common_scripts\utility::array_remove( level._death_anims, maps\_utility::getanim( var_0[var_6] ) ); } var_1 = var_0[0]; } var_7 = 0; var_8 = [ "sw_op_crouch_rail_front", "sw_op_crouch_rail_left", "sw_op_crouch_rail_right", "sw_op_stand_rail_back", "sw_op_stand_rail_front", "sw_op_stand_rail_left", "sw_op_stand_rail_right" ]; if ( isdefined( common_scripts\utility::array_find( var_8, var_1 ) ) ) var_7 = 1; if ( var_7 ) thread death_freefall(); maps\_utility::set_deathanim( var_1 ); self._death_override = 1; } } else if ( self._death_override ) { if ( isdefined( self.animname_old ) ) { self.animname = self.animname_old; self.animname_old = undefined; } level._death_anims = common_scripts\utility::array_remove( level._death_anims, self.deathanim ); maps\_utility::clear_deathanim(); self notify( "stop_death_freefall" ); self._death_override = 0; self.health = self._old_health; self._old_health = undefined; } wait 0.05; } } death_freefall() { self endon( "stop_death_freefall" ); self waittill( "death" ); wait( getanimlength( self.deathanim ) ); self forcedeathfall( 1 ); } check_angles( var_0, var_1, var_2 ) { if ( distancesquared( self.origin, self.node.origin ) > 1024 ) return 0; if ( !isdefined( var_2 ) ) var_2 = 8; var_0 = angleclamp( var_0[1] ); var_1 = angleclamp( var_1[1] ); if ( abs( int( var_0 ) - int( var_1 ) ) <= var_2 ) return 1; else return 0; } rog_flash( var_0, var_1, var_2 ) { var_3 = level.lvl_visionset; var_4 = "skyway_rogstrike"; if ( !isdefined( var_0 ) ) var_0 = 1; if ( !isdefined( var_1 ) ) var_1 = 0.5; if ( !isdefined( var_2 ) ) var_2 = 1; var_5 = var_0 / ( var_1 / 0.05 ); var_6 = 0; maps\_utility::vision_set_fog_changes( var_4, var_1 ); wait( var_1 ); maps\_utility::vision_set_fog_changes( var_3, var_2 ); } ammo_hack( var_0 ) { while ( !isdefined( var_0 ) || var_0.size == 0 ) { var_0 = self getweaponslistall(); wait 0.05; } for ( var_1 = 0; var_1 < var_0.size; var_1++ ) self givestartammo( var_0[var_1] ); self setoffhandprimaryclass( "other" ); } skyway_hide_hud() { level.skyway_hud = 1; level.skyway_hud_ammocounterhide = getdvarint( "ammoCounterHide" ); level.skyway_hud_actionslotshide = getdvarint( "actionSlotsHide" ); level.skyway_hud_showstance = getdvarint( "hud_showStance" ); level.skyway_hud_compass = getdvarint( "compass" ); level.skyway_hud_g_friendlynamedist = getdvarint( "g_friendlyNameDist" ); setsaveddvar( "ammoCounterHide", 1 ); setsaveddvar( "actionSlotsHide", 1 ); setsaveddvar( "hud_showStance", 0 ); setsaveddvar( "compass", 0 ); setsaveddvar( "g_friendlyNameDist", 0 ); } skyway_show_previous_hud() { if ( !isdefined( level.skyway_hud ) ) return; setsaveddvar( "ammoCounterHide", level.skyway_hud_ammocounterhide ); setsaveddvar( "actionSlotsHide", level.skyway_hud_actionslotshide ); setsaveddvar( "hud_showStance", level.skyway_hud_showstance ); setsaveddvar( "compass", level.skyway_hud_compass ); setsaveddvar( "g_friendlyNameDist", level.skyway_hud_g_friendlynamedist ); level.skyway_hud = undefined; level.skyway_hud_ammocounterhide = undefined; level.skyway_hud_actionslotshide = undefined; level.skyway_hud_showstance = undefined; level.skyway_hud_compass = undefined; level.skyway_hud_g_friendlynamedist = undefined; } anim_reach_sw( var_0, var_1 ) { var_2 = common_scripts\utility::spawn_tag_origin(); var_2.origin = getstartorigin( self.origin, self.angles, var_0 maps\_utility::getanim( var_1 ) ); var_2.angles = getstartorigin( self.origin, self.angles, var_0 maps\_utility::getanim( var_1 ) ); var_2 linktotrain( self.script_noteworthy ); var_0 maps\_utility::disable_ai_color(); var_0.oldgoalradius = var_0.goalradius; var_0.goalradius = 64; var_0 setgoalentity( var_2 ); var_0 waittill( "goal" ); var_0.goalradius = var_0.oldgoalradius; var_0 maps\_utility::enable_ai_color(); maps\_anim::anim_reach_solo( var_0, var_1 ); } start_point_is_after( var_0, var_1 ) { var_2 = undefined; var_3 = undefined; var_0 = tolower( var_0 ); var_4 = getarraykeys( level.start_arrays ); for ( var_5 = 0; var_5 < var_4.size; var_5++ ) { if ( var_4[var_5] == var_0 ) var_2 = var_5; if ( var_4[var_5] == level.start_point ) var_3 = var_5; } if ( isdefined( var_1 ) && var_1 ) { if ( var_3 >= var_2 ) return 1; } else if ( var_3 > var_2 ) return 1; return 0; } start_nt_rumbles() { self endon( "stop_nt_rumbles" ); self endon( "death" ); for (;;) { level waittill( "rumble_medium" ); level.player playrumbleonentity( "damage_heavy" ); } } stop_nt_rumbles() { self notify( "stop_nt_rumbles" ); }