1589 lines
65 KiB
Plaintext
1589 lines
65 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
main()
|
|
{
|
|
level._effect["vfx_scrnfx_space_glass_fog"] = loadfx( "vfx/gameplay/screen_effects/vfx_scrnfx_space_glass_fog" );
|
|
level._effect["vfx_scrnfx_space_glass"] = loadfx( "vfx/gameplay/screen_effects/vfx_scrnfx_space_glass" );
|
|
level._effect["vfx_shuttle_manuvr_thrust"] = loadfx( "vfx/moments/odin/vfx_shuttle_manuvr_thrust" );
|
|
level._effect["glow_red_light_400_strobe"] = loadfx( "vfx/ambient/lights/vfx_glow_red_light_400_strobe" );
|
|
level._effect["light_blue_steady_FX"] = loadfx( "fx/misc/tower_light_blue_steady" );
|
|
level._effect["amber_light_45_beacon_nolight_glow"] = loadfx( "vfx/ambient/lights/amber_light_45_beacon_nolight_glow" );
|
|
level._effect["strobe_flash_distant"] = loadfx( "vfx/moments/odin/strobe_flash_distant" );
|
|
level._effect["odin_fire_close"] = loadfx( "vfx/moments/odin/odin_fire_close" );
|
|
level._effect["space_microtar_shot"] = loadfx( "vfx/gameplay/muzzle_flashes/smg/vfx_muz_smg_v" );
|
|
level._effect["space_clip_reload"] = loadfx( "vfx/gameplay/space/space_clip_reload" );
|
|
level._effect["space_clip_reload_odin_ext"] = loadfx( "vfx/gameplay/space/space_clip_reload_odin_ext" );
|
|
level._effect["electrical_transformer_explosion"] = loadfx( "fx/explosions/electrical_transformer_explosion" );
|
|
level._effect["electrical_transformer_spark_runner_tight"] = loadfx( "fx/explosions/electrical_transformer_spark_runner_tight" );
|
|
level._effect["electrical_transformer_sparks_a_cone"] = loadfx( "fx/explosions/electrical_transformer_sparks_a_cone" );
|
|
level._effect["steam_jet_large"] = loadfx( "fx/smoke/steam_jet_large" );
|
|
level._effect["flashlight"] = loadfx( "vfx/moments/odin/flashlight_spotlight_odin_bright" );
|
|
level._effect["vfx_kyra_impact_head_space"] = loadfx( "vfx/moments/odin/vfx_kyra_impact_head_space" );
|
|
level._effect["vfx_kyra_impact_head_space_blood"] = loadfx( "vfx/moments/odin/vfx_kyra_impact_head_space_blood" );
|
|
level._effect["sun_lens_flare"] = loadfx( "vfx/moments/odin/odin_sun_flare" );
|
|
level._effect["amber_light_45_flare_nolight"] = loadfx( "vfx/ambient/lights/amber_light_45_flare_nolight" );
|
|
level._effect["blood_impact_space"] = loadfx( "vfx/moments/odin/vfx_blood_impact_space" );
|
|
level._effect["blue_light_100_nolight"] = loadfx( "vfx/ambient/lights/blue_light_100_nolight" );
|
|
level._effect["ext_dust_motes"] = loadfx( "vfx/moments/odin/vfx_ext_dust_motes" );
|
|
level._effect["fuel_explosion_zerog"] = loadfx( "vfx/moments/loki/fuel_explosion_zerog" );
|
|
level._effect["fuel_fire_zerog_small"] = loadfx( "vfx/moments/loki/vfx_fuel_fire_zerog_small" );
|
|
level._effect["fuel_leak_zerog_small"] = loadfx( "vfx/moments/loki/vfx_fuel_leak_zerog_small" );
|
|
level._effect["int_space_smoke"] = loadfx( "vfx/moments/odin/vfx_int_space_smoke" );
|
|
level._effect["odin_airlock_dust"] = loadfx( "vfx/moments/odin/odin_airlock_dust" );
|
|
level._effect["odin_airlock_dust_excited"] = loadfx( "vfx/moments/odin/odin_airlock_dust_excited" );
|
|
level._effect["odin_airlock_steam"] = loadfx( "vfx/moments/odin/odin_airlock_steam" );
|
|
level._effect["odin_blood_splat_48"] = loadfx( "vfx/moments/odin/odin_blood_splat_48" );
|
|
level._effect["odin_burnup_kyra_trail_runner"] = loadfx( "vfx/moments/odin/odin_burnup_kyra_trail_runner" );
|
|
level._effect["odin_burnup_player_trail_runner"] = loadfx( "vfx/moments/odin/odin_burnup_player_trail_runner" );
|
|
level._effect["odin_burnup_sat_door_trail_runner"] = loadfx( "vfx/moments/odin/odin_burnup_sat_door_trail_runner" );
|
|
level._effect["odin_burnup_sat_trail_runner"] = loadfx( "vfx/moments/odin/odin_burnup_sat_trail_runner" );
|
|
level._effect["odin_burnup_scrnfx"] = loadfx( "vfx/moments/odin/odin_burnup_scrnfx" );
|
|
level._effect["odin_debris_field_high_runner"] = loadfx( "vfx/moments/odin/odin_debris_field_high_runner" );
|
|
level._effect["odin_debris_field_low_runner"] = loadfx( "vfx/moments/odin/odin_debris_field_low_runner" );
|
|
level._effect["odin_debris_field_max_runner"] = loadfx( "vfx/moments/odin/odin_debris_field_max_runner" );
|
|
level._effect["odin_debris_field_med_runner"] = loadfx( "vfx/moments/odin/odin_debris_field_med_runner" );
|
|
level._effect["odin_escape_godray"] = loadfx( "vfx/moments/odin/odin_escape_godray" );
|
|
level._effect["odin_fire_flare_runner"] = loadfx( "vfx/moments/odin/odin_fire_flare_runner" );
|
|
level._effect["odin_helmet_glass_shatter"] = loadfx( "vfx/moments/odin/odin_helmet_glass_shatter" );
|
|
level._effect["odin_int_dust"] = loadfx( "vfx/moments/odin/odin_int_dust" );
|
|
level._effect["odin_int_white_light_rect"] = loadfx( "vfx/moments/odin/odin_int_white_light_rect" );
|
|
level._effect["odin_int_white_light_rect_glow"] = loadfx( "vfx/moments/odin/odin_int_white_light_rect_glow" );
|
|
level._effect["odin_rog_barrel_flash"] = loadfx( "vfx/moments/odin/odin_rog_barrel_flash" );
|
|
level._effect["odin_rog_flash"] = loadfx( "vfx/moments/odin/odin_rog_flash" );
|
|
level._effect["odin_rog_impact"] = loadfx( "vfx/moments/odin/odin_rog_impact" );
|
|
level._effect["odin_rog_plume_01"] = loadfx( "vfx/moments/odin/odin_rog_plume_01" );
|
|
level._effect["odin_rog_plume_02"] = loadfx( "vfx/moments/odin/odin_rog_plume_02" );
|
|
level._effect["odin_rog_plume_03"] = loadfx( "vfx/moments/odin/odin_rog_plume_03" );
|
|
level._effect["odin_rog_trail_flare"] = loadfx( "vfx/moments/odin/odin_rog_trail_flare" );
|
|
level._effect["odin_rog_trail_geotrail_runner"] = loadfx( "vfx/moments/odin/odin_rog_trail_geotrail_runner" );
|
|
level._effect["odin_sat_exp_rcs_fire_runner"] = loadfx( "vfx/moments/odin/odin_sat_exp_rcs_fire_runner" );
|
|
level._effect["odin_sat_rcs_fire_puff"] = loadfx( "vfx/moments/odin/odin_sat_rcs_fire_puff" );
|
|
level._effect["odin_sat_rcs_fuel_fire"] = loadfx( "vfx/moments/odin/odin_sat_rcs_fuel_fire" );
|
|
level._effect["odin_sat_red_light"] = loadfx( "vfx/moments/odin/odin_sat_red_light" );
|
|
level._effect["odin_sat_red_light_blinker_runner"] = loadfx( "vfx/moments/odin/odin_sat_red_light_blinker_runner" );
|
|
level._effect["odin_sat_thrusters_ignite_sporadic"] = loadfx( "vfx/moments/odin/odin_sat_thrusters_ignite_sporadic" );
|
|
level._effect["odin_sat_thrusters_runner"] = loadfx( "vfx/moments/odin/odin_sat_thrusters_runner" );
|
|
level._effect["odin_shuttle_dock_steam"] = loadfx( "vfx/moments/odin/odin_shuttle_dock_steam" );
|
|
level._effect["odin_spin_decompression"] = loadfx( "vfx/moments/odin/odin_spin_decompression" );
|
|
level._effect["odin_spin_implosion"] = loadfx( "vfx/moments/odin/odin_spin_implosion" );
|
|
level._effect["odin_spin_piece_debris"] = loadfx( "vfx/moments/odin/odin_spin_piece_debris" );
|
|
level._effect["odin_spin_piece_debris_runner"] = loadfx( "vfx/moments/odin/odin_spin_piece_debris_runner" );
|
|
level._effect["odin_spin_solar_flash"] = loadfx( "vfx/moments/odin/odin_spin_solar_flash" );
|
|
level._effect["odin_spin_solar_player_debris"] = loadfx( "vfx/moments/odin/odin_spin_solar_player_debris" );
|
|
level._effect["odin_spin_solar_runner"] = loadfx( "vfx/moments/odin/odin_spin_solar_runner" );
|
|
level._effect["red_light_45_flare_nolight"] = loadfx( "vfx/ambient/lights/red_light_45_flare_nolight" );
|
|
level._effect["red_light_45_rect_nolight"] = loadfx( "vfx/ambient/lights/red_light_45_rect_nolight" );
|
|
level._effect["space_jet_small"] = loadfx( "vfx/gameplay/space/space_jet_small" );
|
|
level._effect["spc_battle_smoke_200"] = loadfx( "vfx/ambient/space/spc_battle_smoke_200" );
|
|
level._effect["spc_battle_smoke_200_thick"] = loadfx( "vfx/ambient/space/spc_battle_smoke_200_thick" );
|
|
level._effect["spc_explosion_1200"] = loadfx( "vfx/gameplay/space/spc_explosion_1200" );
|
|
level._effect["spc_explosion_240"] = loadfx( "vfx/gameplay/space/spc_explosion_240" );
|
|
level._effect["spc_fire_big_light"] = loadfx( "vfx/ambient/space/spc_fire_big_light" );
|
|
level._effect["spc_fire_oriented"] = loadfx( "vfx/ambient/space/spc_fire_oriented" );
|
|
level._effect["spc_fire_oriented_big"] = loadfx( "vfx/ambient/space/spc_fire_oriented_big" );
|
|
level._effect["spc_fire_puff_bigger_light"] = loadfx( "vfx/ambient/space/spc_fire_puff_bigger_light" );
|
|
level._effect["spc_shell_casings"] = loadfx( "vfx/ambient/space/spc_shell_casings" );
|
|
level._effect["spc_sparks_jet_single_runner"] = loadfx( "vfx/ambient/space/spc_sparks_jet_single_runner" );
|
|
level._effect["station_piece_collision"] = loadfx( "vfx/moments/odin/station_piece_collision" );
|
|
level._effect["warm_light_30_rect_nolight"] = loadfx( "vfx/ambient/lights/warm_light_30_rect_nolight" );
|
|
level._effect["white_light_40_nolight"] = loadfx( "vfx/ambient/lights/white_light_40_nolight" );
|
|
level._effect["zg_electrical_sparks_big"] = loadfx( "vfx/ambient/space/zg_electrical_sparks_big" );
|
|
level._effect["zg_electrical_sparks_big_single_runner"] = loadfx( "vfx/ambient/space/zg_electrical_sparks_big_single_runner" );
|
|
level._effect["zg_electrical_sparks_runner"] = loadfx( "vfx/ambient/space/zg_electrical_sparks_runner" );
|
|
level._effect["zg_electrical_sparks_runner_40"] = loadfx( "vfx/ambient/space/zg_electrical_sparks_runner_40" );
|
|
level._effect["zg_fire_jet"] = loadfx( "vfx/ambient/space/zg_fire_jet" );
|
|
level._effect["zg_fire_puff"] = loadfx( "vfx/ambient/space/zg_fire_puff" );
|
|
level._effect["zg_fire_puff_single"] = loadfx( "vfx/ambient/space/zg_fire_puff_single" );
|
|
maps\_utility::setsaveddvar_cg_ng( "fx_alphathreshold", 9, 2 );
|
|
|
|
if ( !getdvarint( "r_reflectionProbeGenerate" ) )
|
|
{
|
|
if ( isdefined( level.prologue ) && level.prologue == 1 )
|
|
{
|
|
level.createfx_offset = ( 0, 50000, 50000 );
|
|
maps\createfx\odin_fx::main();
|
|
level.createfx_offset = undefined;
|
|
}
|
|
else
|
|
maps\createfx\odin_fx::main();
|
|
|
|
maps\createfx\odin_sound::main();
|
|
}
|
|
}
|
|
|
|
fx_init()
|
|
{
|
|
common_scripts\utility::flag_init( "fx_start_burnup" );
|
|
common_scripts\utility::flag_init( "clear_for_sat_clean" );
|
|
level thread fx_ambient_setup();
|
|
level.crack_effects = [];
|
|
level.crack_effects[0] = level._effect["vfx_scrnfx_odin_helmet_cracks_0"];
|
|
level.crack_effects[1] = level._effect["vfx_scrnfx_odin_helmet_cracks_1"];
|
|
level.crack_effects[2] = level._effect["vfx_scrnfx_odin_helmet_cracks_2"];
|
|
level.crack_effects[3] = level._effect["vfx_scrnfx_odin_helmet_cracks_3"];
|
|
level.crack_effects[4] = level._effect["vfx_scrnfx_odin_helmet_cracks_4"];
|
|
level.crack_effects[5] = level._effect["vfx_scrnfx_odin_helmet_cracks_5"];
|
|
}
|
|
|
|
odin_lgt_pulsing( var_0 )
|
|
{
|
|
level endon( "start_transition_to_youngblood" );
|
|
self endon( "stopLightPulsing" );
|
|
var_1 = self getlightintensity();
|
|
var_2 = 0.05;
|
|
var_3 = var_1;
|
|
var_4 = 0.3 / var_0;
|
|
var_5 = 0.6 / var_0;
|
|
var_6 = ( var_1 - var_2 ) / ( var_4 / 0.05 );
|
|
var_7 = ( var_1 - var_2 ) / ( var_5 / 0.05 );
|
|
wait( randomfloatrange( 0.01, 0.3 ) );
|
|
|
|
for (;;)
|
|
{
|
|
var_8 = 0;
|
|
|
|
while ( var_8 < var_5 )
|
|
{
|
|
var_3 = var_3 - var_7;
|
|
var_3 = clamp( var_3, 0, 100 );
|
|
self setlightintensity( var_3 );
|
|
var_8 = var_8 + 0.05;
|
|
wait 0.05;
|
|
}
|
|
|
|
wait 1;
|
|
var_8 = 0;
|
|
|
|
while ( var_8 < var_4 )
|
|
{
|
|
var_3 = var_3 + var_6;
|
|
var_3 = clamp( var_3, 0, 100 );
|
|
self setlightintensity( var_3 );
|
|
var_8 = var_8 + 0.05;
|
|
wait 0.05;
|
|
}
|
|
|
|
wait 0.5;
|
|
}
|
|
}
|
|
|
|
odin_lgt_flicker( var_0, var_1, var_2, var_3 )
|
|
{
|
|
self endon( "stopLightFlicker" );
|
|
var_4 = var_0;
|
|
var_5 = 0.0;
|
|
maps\_utility::ent_flag_init( "stop_flicker" );
|
|
var_6 = self getlightintensity();
|
|
var_7 = 0;
|
|
var_8 = var_6;
|
|
var_9 = 0;
|
|
|
|
for (;;)
|
|
{
|
|
if ( maps\_utility::ent_flag( "stop_flicker" ) )
|
|
{
|
|
wait 0.05;
|
|
continue;
|
|
}
|
|
|
|
var_10 = var_4;
|
|
var_4 = var_0 + ( var_1 - var_0 ) * randomfloat( 1.0 );
|
|
var_9 = randomintrange( 1, 10 );
|
|
|
|
if ( var_2 != var_3 )
|
|
var_5 = var_5 + randomfloatrange( var_2, var_3 );
|
|
else
|
|
var_5 = var_5 + var_2;
|
|
|
|
if ( var_5 == 0 )
|
|
var_5 = var_5 + 0.0000001;
|
|
|
|
for ( var_11 = ( var_10 - var_4 ) * ( 1 / var_5 ); var_5 > 0 && !maps\_utility::ent_flag( "stop_flicker" ); var_5 = var_5 - 0.05 )
|
|
{
|
|
self setlightcolor( var_4 + var_11 * var_5 );
|
|
wait 0.05;
|
|
}
|
|
|
|
while ( var_9 )
|
|
{
|
|
wait( randomfloatrange( 0.05, 0.1 ) );
|
|
|
|
if ( var_8 > 0.2 )
|
|
var_8 = randomfloatrange( 0, 0.3 );
|
|
else
|
|
var_8 = var_6;
|
|
|
|
self setlightintensity( var_8 );
|
|
var_9--;
|
|
}
|
|
|
|
self setlightintensity( var_6 );
|
|
wait( randomfloatrange( var_2, var_3 ) );
|
|
}
|
|
}
|
|
|
|
changelightintensityovertime( var_0, var_1 )
|
|
{
|
|
var_2 = self getlightintensity();
|
|
var_3 = int( var_1 / 0.05 );
|
|
var_4 = ( var_0 - var_2 ) / var_3;
|
|
var_5 = var_2;
|
|
|
|
for ( var_6 = 0; var_6 < var_3; var_6++ )
|
|
{
|
|
var_5 = var_5 + var_4;
|
|
self setlightintensity( var_5 );
|
|
wait 0.05;
|
|
}
|
|
|
|
self setlightintensity( var_0 );
|
|
}
|
|
|
|
place_sun_with_moving_source( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( isdefined( var_2 ) )
|
|
common_scripts\utility::flag_wait( var_2 );
|
|
|
|
var_4 = 0;
|
|
var_5 = 0;
|
|
var_6 = maps\_utility::create_sunflare_setting( "odin_spin" );
|
|
|
|
for (;;)
|
|
{
|
|
if ( isdefined( var_1 ) )
|
|
var_7 = var_0 gettagorigin( "tag_flash" );
|
|
else
|
|
var_7 = var_0.origin;
|
|
|
|
var_4 = atan( ( level.player.origin[2] - var_7[2] ) / sqrt( squared( level.player.origin[0] - var_7[0] ) + squared( level.player.origin[1] - var_7[1] ) ) );
|
|
|
|
if ( level.player.origin[0] < var_7[0] )
|
|
var_5 = atan( ( level.player.origin[1] - var_7[1] ) / ( level.player.origin[0] - var_7[0] ) );
|
|
else
|
|
var_5 = 180 + atan( ( level.player.origin[1] - var_7[1] ) / ( level.player.origin[0] - var_7[0] ) );
|
|
|
|
var_6.position = ( var_4, var_5, 0 );
|
|
maps\_art::sunflare_changes( "odin_spin", 0 );
|
|
wait 0.05;
|
|
|
|
if ( isdefined( var_3 ) )
|
|
{
|
|
if ( common_scripts\utility::flag( var_3 ) )
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
lgt_init()
|
|
{
|
|
maps\_utility::setsaveddvar_cg_ng( "r_specularColorScale", 1.5, 9.01 );
|
|
setsaveddvar( "actor_spaceLightingOffset", 20 );
|
|
setsaveddvar( "sm_sunSampleSizeNear", 0.5 );
|
|
common_scripts\utility::flag_init( "lgt_flag_end_sun_move" );
|
|
level.spinsuntranstime = 0.25;
|
|
var_0 = getentarray( "lgt_odin_pulsing", "script_noteworthy" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 thread odin_lgt_pulsing( 1 );
|
|
|
|
thread lgt_intro_sequence();
|
|
thread lgt_ally_sequence();
|
|
thread lgt_escape_sequence();
|
|
thread lgt_spin_sequence();
|
|
thread lgt_sat_sequence();
|
|
resetsunlight();
|
|
resetsundirection();
|
|
var_4 = getent( "intro_airlock_door", "targetname" );
|
|
var_5 = spawn( "script_model", ( 0, 0, 0 ) );
|
|
var_5 setmodel( "tag_origin" );
|
|
var_5.origin = var_4.origin - ( 168, 0, 0 );
|
|
var_4 retargetscriptmodellighting( var_5 );
|
|
}
|
|
|
|
lgt_intro_sequence()
|
|
{
|
|
common_scripts\utility::flag_wait( "do_transition_to_odin" );
|
|
maps\_art::sunflare_changes( "odin_default", 0 );
|
|
var_0 = vectornormalize( ( -1232, -2641, -155 ) );
|
|
|
|
if ( !isdefined( level.sunflare ) )
|
|
{
|
|
level.sunflare = spawn( "script_model", ( 0, 0, 0 ) );
|
|
level.sunflare setmodel( "tag_origin" );
|
|
playfxontag( level._effect["sun_lens_flare"], level.sunflare, "tag_origin" );
|
|
}
|
|
|
|
while ( !common_scripts\utility::flag( "ally_clear" ) )
|
|
{
|
|
level.sunflare.origin = level.player.origin + var_0 * 100000;
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
}
|
|
|
|
lgt_ally_sequence()
|
|
{
|
|
common_scripts\utility::flag_wait_any( "unlock_post_infil_auto_door", "lgt_trg_allySunSample", "player_approaching_infiltration" );
|
|
setsaveddvar( "actor_spaceLightingOffset", -10 );
|
|
setsaveddvar( "sm_sunSampleSizeNear", 0.2 );
|
|
common_scripts\utility::flag_wait( "invader_scene_begin" );
|
|
setsaveddvar( "actor_spaceLightingOffset", 20 );
|
|
}
|
|
|
|
lgt_escape_sequence()
|
|
{
|
|
common_scripts\utility::flag_wait( "ally_clear" );
|
|
setsaveddvar( "sm_sunSampleSizeNear", 0.1 );
|
|
maps\_art::sunflare_changes( "odin_escape", 0 );
|
|
thread lgt_odin_firing();
|
|
var_0 = vectornormalize( ( 296, -835, -20 ) );
|
|
|
|
if ( !isdefined( level.sunflare ) )
|
|
{
|
|
level.sunflare = spawn( "script_model", ( 0, 0, 0 ) );
|
|
level.sunflare setmodel( "tag_origin" );
|
|
playfxontag( level._effect["sun_lens_flare"], level.sunflare, "tag_origin" );
|
|
}
|
|
|
|
while ( !common_scripts\utility::flag( "lgt_trg_odin_destruction" ) )
|
|
{
|
|
level.sunflare.origin = level.player.origin + var_0 * 100000;
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
}
|
|
|
|
lgt_spin_sequence()
|
|
{
|
|
level endon( "start_transition_to_youngblood" );
|
|
common_scripts\utility::flag_wait( "lgt_spin_setup" );
|
|
level.spinsuntranstime = 10;
|
|
common_scripts\utility::flag_set( "lgt_trg_odin_destruction" );
|
|
setsaveddvar( "sm_sunSampleSizeNear", 0.1 );
|
|
|
|
if ( !isdefined( level.sunflare ) )
|
|
{
|
|
level.sunflare = spawn( "script_model", ( 0, 0, 0 ) );
|
|
level.sunflare setmodel( "tag_origin" );
|
|
playfxontag( level._effect["sun_lens_flare"], level.sunflare, "tag_origin" );
|
|
}
|
|
|
|
var_0 = maps\odin_util::earth_get_script_mover();
|
|
var_1 = ( 48583, 18170, -45500 );
|
|
level.sunflare.origin = var_0.origin - var_1;
|
|
level.sunflare linkto( var_0 );
|
|
wait 2;
|
|
thread place_sun_with_moving_source( level.sunflare, undefined, undefined, "lgt_flag_end_sun_move" );
|
|
common_scripts\utility::flag_wait_any( "lgt_flag_spin_over", "trigger_spacejump" );
|
|
level.sunflare unlink( var_0 );
|
|
common_scripts\utility::flag_set( "lgt_flag_end_sun_move" );
|
|
}
|
|
|
|
lgt_sat_sequence()
|
|
{
|
|
level endon( "start_transition_to_youngblood" );
|
|
common_scripts\utility::flag_wait( "trigger_spacejump" );
|
|
wait 0.25;
|
|
var_0 = vectornormalize( ( -3, -5, 6 ) );
|
|
var_1 = level.player.origin + var_0 * 100000;
|
|
|
|
if ( !isdefined( level.sunflare ) )
|
|
{
|
|
level.sunflare = spawn( "script_model", ( -55629, -13122.8, 46438.3 ) );
|
|
level.sunflare setmodel( "tag_origin" );
|
|
playfxontag( level._effect["sun_lens_flare"], level.sunflare, "tag_origin" );
|
|
}
|
|
|
|
thread maps\_art::sunflare_changes( "odin_satellite", level.spinsuntranstime );
|
|
level.sunflare moveto( var_1, level.spinsuntranstime );
|
|
common_scripts\utility::flag_set( "lgt_trg_odin_destruction" );
|
|
enableforcedsunshadows();
|
|
thread maps\_utility::lerp_saveddvar( "sm_sunSampleSizeNear", 0.6, 1.5 );
|
|
common_scripts\utility::flag_wait( "fx_start_burnup" );
|
|
killfxontag( level._effect["sun_lens_flare"], level.sunflare, "tag_origin" );
|
|
disableforcedsunshadows();
|
|
}
|
|
|
|
lgt_odin_firing()
|
|
{
|
|
var_0 = getentarray( "lgt_odin_destruction", "script_noteworthy" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 thread odin_lgt_pulsing( 1 );
|
|
|
|
thread rotatelights( "lgt_odin_spin_ref", "lgt_odin_spinning", "pitch" );
|
|
thread rotatelights( "lgt_odin_spin_ref_1", "lgt_odin_spinning_1", "yaw" );
|
|
thread rotatelights( "lgt_odin_spin_ref_2", "lgt_odin_spinning_2", "roll" );
|
|
thread fx_rotate_lights_setup();
|
|
common_scripts\utility::flag_wait( "lgt_trg_odin_destruction" );
|
|
wait 3;
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
var_2 notify( "stopLightPulsing" );
|
|
var_2 setlightintensity( 0.1 );
|
|
var_2 maps\_lights::changelightcolorto( ( 0.993235, 0.24, 0.145098 ), 0.4, 0.1, 0.05 );
|
|
}
|
|
|
|
wait 3.5;
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
var_2 changelightintensityovertime( randomfloatrange( 1.3, 1.7 ), 0.1 );
|
|
common_scripts\utility::waitframe();
|
|
var_2 thread odin_lgt_pulsing( 4 );
|
|
}
|
|
}
|
|
|
|
rotatelights( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = getentarray( var_1, "script_noteworthy" );
|
|
var_4 = getent( var_0, "script_noteworthy" );
|
|
|
|
if ( !isdefined( var_3 ) || !isdefined( var_4 ) || !isdefined( var_2 ) )
|
|
return;
|
|
|
|
var_4 thread rotateme( -360, var_2, 1.0 );
|
|
|
|
foreach ( var_6 in var_3 )
|
|
var_6 thread maps\_utility::manual_linkto( var_4, var_6.origin - var_4.origin );
|
|
}
|
|
|
|
rotateme( var_0, var_1, var_2 )
|
|
{
|
|
level endon( "start_transition_to_youngblood" );
|
|
self endon( "stopLightSpinning" );
|
|
|
|
for (;;)
|
|
{
|
|
switch ( var_1 )
|
|
{
|
|
case "yaw":
|
|
self rotateyaw( var_0, var_2 );
|
|
wait( var_2 );
|
|
break;
|
|
case "pitch":
|
|
self rotatepitch( var_0, var_2 );
|
|
wait( var_2 );
|
|
break;
|
|
case "roll":
|
|
self rotateroll( var_0, var_2 );
|
|
wait( var_2 );
|
|
break;
|
|
default:
|
|
wait 1;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
fx_ambient_setup()
|
|
{
|
|
level thread fx_intro_ambient();
|
|
level thread fx_airlock_ambient();
|
|
level thread fx_escape_ambient();
|
|
level thread fx_spin_ambient();
|
|
level thread fx_jump_ambient();
|
|
level thread fx_sat_ambient();
|
|
}
|
|
|
|
fx_intro_ambient()
|
|
{
|
|
level endon( "start_transition_to_youngblood" );
|
|
|
|
for (;;)
|
|
{
|
|
common_scripts\utility::flag_wait( "fx_intro_ambient" );
|
|
common_scripts\utility::exploder( "intro_ambient" );
|
|
common_scripts\utility::exploder( "intro_ambient_airlock_dust" );
|
|
common_scripts\utility::flag_waitopen( "fx_intro_ambient" );
|
|
maps\_utility::stop_exploder( "intro_ambient" );
|
|
maps\_utility::stop_exploder( "intro_ambient_airlock_dust" );
|
|
maps\_utility::stop_exploder( "intro_airlock_complete" );
|
|
}
|
|
}
|
|
|
|
fx_airlock_ambient()
|
|
{
|
|
level endon( "start_transition_to_youngblood" );
|
|
|
|
for (;;)
|
|
{
|
|
common_scripts\utility::flag_wait( "fx_airlock_ambient" );
|
|
common_scripts\utility::exploder( "airlock_ambient" );
|
|
common_scripts\utility::flag_waitopen( "fx_airlock_ambient" );
|
|
maps\_utility::stop_exploder( "airlock_ambient" );
|
|
}
|
|
}
|
|
|
|
fx_escape_ambient()
|
|
{
|
|
level endon( "start_transition_to_youngblood" );
|
|
|
|
for (;;)
|
|
{
|
|
common_scripts\utility::flag_wait( "fx_escape_ambient" );
|
|
common_scripts\utility::exploder( "escape_ambient" );
|
|
common_scripts\utility::flag_waitopen( "fx_escape_ambient" );
|
|
maps\_utility::stop_exploder( "escape_ambient" );
|
|
}
|
|
}
|
|
|
|
fx_spin_ambient()
|
|
{
|
|
level endon( "start_transition_to_youngblood" );
|
|
|
|
for (;;)
|
|
{
|
|
common_scripts\utility::flag_wait( "fx_spin_ambient" );
|
|
common_scripts\utility::exploder( "spin_ambient" );
|
|
common_scripts\utility::flag_waitopen( "fx_spin_ambient" );
|
|
maps\_utility::stop_exploder( "spin_ambient" );
|
|
}
|
|
}
|
|
|
|
fx_jump_ambient()
|
|
{
|
|
level endon( "start_transition_to_youngblood" );
|
|
|
|
for (;;)
|
|
{
|
|
common_scripts\utility::flag_wait( "fx_jump_ambient" );
|
|
common_scripts\utility::exploder( "jump_ambient" );
|
|
common_scripts\utility::exploder( "jump_ambient_fire_1" );
|
|
common_scripts\utility::exploder( "jump_ambient_fire_2" );
|
|
common_scripts\utility::exploder( "jump_ambient_fire_3" );
|
|
common_scripts\utility::exploder( "jump_ambient_fire_4" );
|
|
common_scripts\utility::exploder( "jump_ambient_fire_5" );
|
|
level thread fx_jump_ambient_fire_killer();
|
|
common_scripts\utility::flag_waitopen( "fx_jump_ambient" );
|
|
maps\_utility::stop_exploder( "jump_ambient" );
|
|
maps\_utility::stop_exploder( "jump_ambient_fire_1" );
|
|
maps\_utility::stop_exploder( "jump_ambient_fire_2" );
|
|
maps\_utility::stop_exploder( "jump_ambient_fire_3" );
|
|
maps\_utility::stop_exploder( "jump_ambient_fire_4" );
|
|
maps\_utility::stop_exploder( "jump_ambient_fire_5" );
|
|
}
|
|
}
|
|
|
|
fx_jump_ambient_fire_killer()
|
|
{
|
|
level endon( "start_transition_to_youngblood" );
|
|
wait 4.5;
|
|
maps\_utility::stop_exploder( "jump_ambient_fire_1" );
|
|
level waittill( "decomp_player_anim_done" );
|
|
wait 9;
|
|
maps\_utility::stop_exploder( "jump_ambient_fire_2" );
|
|
wait 3;
|
|
maps\_utility::stop_exploder( "jump_ambient_fire_3" );
|
|
wait 3;
|
|
maps\_utility::stop_exploder( "jump_ambient_fire_4" );
|
|
wait 3;
|
|
maps\_utility::stop_exploder( "jump_ambient_fire_5" );
|
|
}
|
|
|
|
fx_sat_ambient()
|
|
{
|
|
level endon( "start_transition_to_youngblood" );
|
|
|
|
for (;;)
|
|
{
|
|
common_scripts\utility::flag_wait( "fx_sat_ambient" );
|
|
common_scripts\utility::exploder( "sat_ambient" );
|
|
common_scripts\utility::flag_waitopen( "fx_sat_ambient" );
|
|
maps\_utility::stop_exploder( "sat_ambient" );
|
|
}
|
|
}
|
|
|
|
fx_infil_red_shirt_die( var_0 )
|
|
{
|
|
playfxontag( level._effect["blood_impact_space"], var_0, "j_head" );
|
|
}
|
|
|
|
fx_escape_fire_rods()
|
|
{
|
|
level endon( "player_exited_escape_hallway" );
|
|
var_0 = getent( "sat_barrel_top", "script_noteworthy" );
|
|
var_1 = getent( "sat_barrel_target", "script_noteworthy" );
|
|
var_2 = getent( "sat_barrel_bottom", "script_noteworthy" );
|
|
var_3 = common_scripts\utility::spawn_tag_origin();
|
|
var_3.angles = var_0.angles;
|
|
var_4 = getent( "fake_earth", "targetname" );
|
|
var_5 = 1;
|
|
var_6 = maps\odin_util::satellite_get_script_mover();
|
|
|
|
while ( !common_scripts\utility::flag( "absolute_fire_decompression" ) )
|
|
{
|
|
common_scripts\utility::flag_wait( "fire_rog" );
|
|
common_scripts\utility::flag_clear( "fire_rog" );
|
|
common_scripts\utility::flag_set( "ready_to_fire_next_salvo" );
|
|
var_7 = "tag_fx_impact_" + var_5;
|
|
var_8 = var_4 gettagorigin( var_7 );
|
|
var_9 = var_1.origin - var_0.origin;
|
|
var_10 = var_8 - var_0.origin;
|
|
var_11 = common_scripts\utility::spawn_tag_origin();
|
|
var_11.origin = var_6.origin;
|
|
var_11.angles = vectortoangles( var_9 );
|
|
var_6 linkto( var_11 );
|
|
|
|
if ( var_7 == "tag_fx_impact_1" )
|
|
var_12 = vectortoangles( var_10 ) + ( 0, 0, -40 );
|
|
else
|
|
var_12 = vectortoangles( var_10 ) + ( 0, 0, randomfloatrange( -4, 4 ) );
|
|
|
|
var_11 rotateto( var_12, 4, 2, 2 );
|
|
thread fire_sat_rcs_thrusters( var_11.angles, vectortoangles( var_10 ), 4 );
|
|
wait 4;
|
|
var_6 unlink();
|
|
var_11 delete();
|
|
var_3.origin = var_0.origin;
|
|
wait 1.2;
|
|
thread rog_firing_fx_at_player( var_2.origin );
|
|
thread maps\odin_audio::sfx_dist_odin_fire();
|
|
wait 2;
|
|
playfxontag( level._effect["odin_rog_flash"], var_3, "tag_origin" );
|
|
thread bright_light_flash_into_console();
|
|
thread sfx_and_visual_shake();
|
|
thread odin_missile_rod( var_2, var_1, 0.1 );
|
|
var_4 thread fx_escape_play_rog_impact( var_7, 8 );
|
|
var_3 thread fx_rog_trail( 0.1, 6.7 );
|
|
var_3 thread rog_fire_at_off_axis_target( 8, var_7, var_4, "player_exited_escape_hallway", "odin_interior_rog", "odin_interior" );
|
|
var_5 = var_5 + 1;
|
|
|
|
if ( var_5 > 7 )
|
|
var_5 = 2;
|
|
}
|
|
|
|
var_3 delete();
|
|
}
|
|
|
|
fx_spin_fire_rods()
|
|
{
|
|
level endon( "start_transition_to_youngblood" );
|
|
var_0 = common_scripts\utility::spawn_tag_origin();
|
|
var_1 = getent( "sat_barrel_top", "script_noteworthy" );
|
|
var_2 = getent( "sat_barrel_target", "script_noteworthy" );
|
|
var_3 = getent( "sat_barrel_bottom", "script_noteworthy" );
|
|
var_0.angles = var_1.angles;
|
|
var_4 = maps\odin_util::earth_get_script_mover().earth_model;
|
|
var_5 = 4;
|
|
var_6 = maps\odin_util::satellite_get_script_mover();
|
|
var_7 = getent( "final_sat_orientation", "targetname" );
|
|
|
|
while ( !common_scripts\utility::flag( "satellite_end_anim_started" ) )
|
|
{
|
|
var_8 = "tag_fx_impact_" + var_5;
|
|
var_9 = var_4 gettagorigin( var_8 );
|
|
var_10 = var_2.origin - var_1.origin;
|
|
var_11 = vectortoangles( var_9 - var_1.origin );
|
|
var_12 = var_7.angles - var_11;
|
|
var_13 = distance( level.ally.origin, var_6.origin );
|
|
var_14 = distance( level.player.origin, var_6.origin );
|
|
var_15 = 1;
|
|
level.satellite_small_thrusts = 0;
|
|
|
|
if ( !common_scripts\utility::flag( "triggered_finale" ) )
|
|
{
|
|
if ( var_13 > 6250 || var_14 > 6250 )
|
|
{
|
|
var_16 = var_13 / 1000;
|
|
var_15 = 3;
|
|
var_17 = var_7.angles + ( randomfloatrange( 0 - var_16, var_16 ), randomfloatrange( 0 - var_16, var_16 ), randomfloatrange( 0 - var_16, var_16 ) );
|
|
}
|
|
else
|
|
{
|
|
var_17 = var_7.angles;
|
|
level.satellite_small_thrusts = 1;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var_17 = var_7.angles;
|
|
level.satellite_small_thrusts = 1;
|
|
}
|
|
|
|
if ( !common_scripts\utility::flag( "first_finale_stage_done" ) )
|
|
thread fire_sat_rcs_thrusters( ( var_6.angles - var_12 ) * var_15, ( var_17 - var_12 ) * var_15, 6 );
|
|
|
|
if ( common_scripts\utility::flag( "lgt_flag_spin_over" ) )
|
|
{
|
|
var_6 rotateto( var_17, 6, 3, 3 );
|
|
wait 6;
|
|
}
|
|
else
|
|
wait 6;
|
|
|
|
var_0.origin = var_1.origin;
|
|
wait 0.5;
|
|
thread rog_firing_fx_at_player( var_3.origin );
|
|
thread maps\odin_audio::sfx_dist_odin_fire();
|
|
wait 2;
|
|
playfxontag( level._effect["odin_rog_flash"], var_0, "tag_origin" );
|
|
thread sfx_and_visual_shake();
|
|
|
|
if ( !common_scripts\utility::flag( "landed_on_satellite" ) )
|
|
{
|
|
thread odin_missile_rod( var_3, var_2, 0.1 );
|
|
var_4 thread fx_spin_play_rog_impact( var_8, 8 );
|
|
var_0 thread fx_rog_trail( 1.4, 6.7 );
|
|
var_0 thread rog_fire_at_off_axis_target( 8, var_8, var_4, "triggered_finale", "odin_spin_rog", "odin_spin" );
|
|
}
|
|
|
|
var_5 = var_5 + 1;
|
|
|
|
if ( var_5 > 11 )
|
|
var_5 = 4;
|
|
|
|
wait 1;
|
|
}
|
|
|
|
var_0 delete();
|
|
}
|
|
|
|
sat_pretend_to_keep_moving_and_firing()
|
|
{
|
|
|
|
}
|
|
|
|
rog_fire_at_off_axis_target( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
var_6 = self;
|
|
var_7 = getent( "sat_barrel_bottom", "script_noteworthy" );
|
|
var_8 = getent( "sat_barrel_target", "script_noteworthy" );
|
|
var_9 = common_scripts\utility::spawn_tag_origin();
|
|
var_9.origin = var_8.origin;
|
|
var_10 = var_7.origin - var_6.origin;
|
|
var_6.angles = vectortoangles( var_10 );
|
|
|
|
if ( !common_scripts\utility::flag( var_3 ) )
|
|
var_6 thread god_rays_from_rog( 8, var_4, var_5 );
|
|
|
|
var_6 moveto( var_7.origin, var_0 * 0.1, var_0 * 0.1, 0 );
|
|
var_6 waittill( "movedone" );
|
|
var_11 = 0;
|
|
|
|
while ( var_11 < 110 )
|
|
{
|
|
if ( common_scripts\utility::flag( "landed_on_satellite" ) )
|
|
break;
|
|
|
|
var_12 = var_2 gettagorigin( var_1 );
|
|
var_10 = var_6.origin - var_9.origin;
|
|
var_6.angles = vectortoangles( var_10 );
|
|
var_9 moveto( var_12, 1.5 );
|
|
var_6 moveto( var_9.origin, var_0 );
|
|
var_11 = var_11 + 1;
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
god_rays_from_rog( var_0, var_1, var_2 )
|
|
{
|
|
if ( maps\_utility::is_gen4() )
|
|
{
|
|
var_3 = 0;
|
|
var_4 = 0;
|
|
var_5 = 0;
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
maps\_utility::vision_set_fog_changes( var_1, 0.5 );
|
|
wait 0.5;
|
|
}
|
|
|
|
var_6 = maps\_utility::create_sunflare_setting( "odin_rog_fire" );
|
|
|
|
if ( isdefined( var_2 ) )
|
|
{
|
|
maps\_utility::delaythread( 3, maps\_utility::vision_set_fog_changes, var_2, 3 );
|
|
maps\_utility::delaythread( 6, maps\_utility::vision_set_fog_changes, "", 0 );
|
|
}
|
|
|
|
for (;;)
|
|
{
|
|
var_7 = self.origin;
|
|
var_3 = atan( ( level.player.origin[2] - var_7[2] ) / sqrt( squared( level.player.origin[0] - var_7[0] ) + squared( level.player.origin[1] - var_7[1] ) ) );
|
|
|
|
if ( level.player.origin[0] < var_7[0] )
|
|
var_4 = atan( ( level.player.origin[1] - var_7[1] ) / ( level.player.origin[0] - var_7[0] ) );
|
|
else
|
|
var_4 = 180 + atan( ( level.player.origin[1] - var_7[1] ) / ( level.player.origin[0] - var_7[0] ) );
|
|
|
|
var_6.position = ( var_3, var_4, 0 );
|
|
wait 0.05;
|
|
var_5 = var_5 + 0.05;
|
|
|
|
if ( var_5 > var_0 )
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
god_rays_airlock()
|
|
{
|
|
if ( maps\_utility::is_gen4() )
|
|
{
|
|
wait 4;
|
|
var_0 = maps\_utility::create_sunflare_setting( "odin_airlock" );
|
|
var_0.position = ( 90, -90, 0 );
|
|
maps\_art::sunflare_changes( "odin_airlock", 0 );
|
|
maps\_utility::vision_set_fog_changes( "odin_interior_rog", 3 );
|
|
wait 4;
|
|
maps\_utility::vision_set_fog_changes( "", 4 );
|
|
}
|
|
}
|
|
|
|
fire_sat_rcs_thrusters( var_0, var_1, var_2 )
|
|
{
|
|
level endon( "triggered_finale" );
|
|
var_3 = 0;
|
|
var_4 = 0;
|
|
var_5 = 0;
|
|
var_6 = 0;
|
|
|
|
if ( level.satellite_small_thrusts == 1 )
|
|
{
|
|
var_3 = 4;
|
|
var_4 = 4;
|
|
var_5 = 3;
|
|
var_6 = 3;
|
|
}
|
|
|
|
if ( var_0[1] < var_1[1] )
|
|
var_3 = 5;
|
|
else
|
|
var_6 = 5;
|
|
|
|
if ( var_0[0] < var_1[0] )
|
|
var_5 = 3;
|
|
else
|
|
var_4 = 3;
|
|
|
|
thread maps\odin_audio::sfx_satellite_lat_thruster_loop( level.thruster_01_lat_fx );
|
|
thread maps\odin_audio::sfx_satellite_thruster_initial_burst( level.thruster_03_lat_fx );
|
|
thread maps\odin_audio::sfx_satellite_thruster_initial_burst( level.thruster_01_lat_fx );
|
|
|
|
for ( var_7 = 0; var_7 < var_2 * 2; var_7++ )
|
|
{
|
|
if ( var_3 > randomfloatrange( 1, 6 ) )
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_01_lat_fx, "tag_origin" );
|
|
else
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_04_lat_fx, "tag_origin" );
|
|
|
|
if ( var_6 > randomfloatrange( 1, 6 ) )
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_04_lat_fx, "tag_origin" );
|
|
else
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_01_lat_fx, "tag_origin" );
|
|
|
|
if ( var_5 > randomfloatrange( 1, 5 ) )
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_03_lat_fx, "tag_origin" );
|
|
else
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_02_lat_fx, "tag_origin" );
|
|
|
|
if ( var_4 > randomfloatrange( 1, 5 ) )
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_02_lat_fx, "tag_origin" );
|
|
else
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_03_lat_fx, "tag_origin" );
|
|
|
|
wait 0.15;
|
|
stopfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_01_lat_fx, "tag_origin" );
|
|
stopfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_02_lat_fx, "tag_origin" );
|
|
stopfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_03_lat_fx, "tag_origin" );
|
|
stopfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_04_lat_fx, "tag_origin" );
|
|
wait 0.05;
|
|
}
|
|
|
|
common_scripts\utility::flag_set( "stop_sat_lat_thrust_loop" );
|
|
wait( var_2 * 0.1 );
|
|
thread maps\odin_audio::sfx_satellite_lat_thruster_loop( level.thruster_01_lat_fx );
|
|
thread maps\odin_audio::sfx_satellite_thruster_initial_burst( level.thruster_03_lat_fx );
|
|
thread maps\odin_audio::sfx_satellite_thruster_initial_burst( level.thruster_01_lat_fx );
|
|
|
|
for ( var_7 = 0; var_7 < var_2 * 2; var_7++ )
|
|
{
|
|
if ( var_6 > randomfloatrange( 1, 6 ) )
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_01_lat_fx, "tag_origin" );
|
|
else
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_04_lat_fx, "tag_origin" );
|
|
|
|
if ( var_3 > randomfloatrange( 1, 6 ) )
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_04_lat_fx, "tag_origin" );
|
|
else
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_01_lat_fx, "tag_origin" );
|
|
|
|
if ( var_4 > randomfloatrange( 1, 5 ) )
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_03_lat_fx, "tag_origin" );
|
|
else
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_02_lat_fx, "tag_origin" );
|
|
|
|
if ( var_5 > randomfloatrange( 1, 5 ) )
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_02_lat_fx, "tag_origin" );
|
|
else
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_03_lat_fx, "tag_origin" );
|
|
|
|
wait 0.15;
|
|
stopfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_01_lat_fx, "tag_origin" );
|
|
stopfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_02_lat_fx, "tag_origin" );
|
|
stopfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_03_lat_fx, "tag_origin" );
|
|
stopfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_04_lat_fx, "tag_origin" );
|
|
wait 0.05;
|
|
}
|
|
|
|
common_scripts\utility::flag_set( "stop_sat_lat_thrust_loop" );
|
|
}
|
|
|
|
rog_firing_fx_at_player( var_0 )
|
|
{
|
|
if ( distance2d( var_0, level.player.origin ) < 15000 )
|
|
{
|
|
earthquake( 0.1, 3, var_0, 14000 );
|
|
|
|
if ( !common_scripts\utility::flag( "hold_satellite_back_thrusters" ) )
|
|
thread rog_firing_back_thrusters();
|
|
|
|
wait 1.0;
|
|
playfx( level._effect["odin_fire_close"], var_0 );
|
|
wait 1;
|
|
earthquake( 0.3, 2, var_0, 14000 );
|
|
wait 1;
|
|
earthquake( 0.1, 6, var_0, 14000 );
|
|
}
|
|
}
|
|
|
|
rog_firing_back_thrusters()
|
|
{
|
|
level endon( "first_finale_stage_done" );
|
|
wait 0.5;
|
|
|
|
if ( !common_scripts\utility::flag( "first_finale_stage_done" ) )
|
|
{
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_01_fx, "tag_origin" );
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_02_fx, "tag_origin" );
|
|
thread maps\odin_audio::sfx_satellite_thruster_initial_burst( level.thruster_01_fx );
|
|
thread maps\odin_audio::sfx_satellite_thruster_loop( level.thruster_01_fx );
|
|
thread maps\odin_audio::sfx_satellite_thruster_initial_burst( level.thruster_02_fx );
|
|
common_scripts\utility::waitframe();
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_03_fx, "tag_origin" );
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_04_fx, "tag_origin" );
|
|
thread maps\odin_audio::sfx_satellite_thruster_initial_burst( level.thruster_03_fx );
|
|
thread maps\odin_audio::sfx_satellite_thruster_initial_burst( level.thruster_04_fx );
|
|
wait 0.6;
|
|
stopfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_01_fx, "tag_origin" );
|
|
stopfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_02_fx, "tag_origin" );
|
|
stopfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_03_fx, "tag_origin" );
|
|
stopfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_04_fx, "tag_origin" );
|
|
wait( randomfloatrange( 0.05, 0.15 ) );
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_01_fx, "tag_origin" );
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_02_fx, "tag_origin" );
|
|
common_scripts\utility::waitframe();
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_03_fx, "tag_origin" );
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_04_fx, "tag_origin" );
|
|
wait 0.8;
|
|
stopfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_01_fx, "tag_origin" );
|
|
stopfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_02_fx, "tag_origin" );
|
|
stopfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_03_fx, "tag_origin" );
|
|
stopfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_04_fx, "tag_origin" );
|
|
wait( randomfloatrange( 0.1, 0.8 ) );
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_01_fx, "tag_origin" );
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_02_fx, "tag_origin" );
|
|
common_scripts\utility::waitframe();
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_03_fx, "tag_origin" );
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_04_fx, "tag_origin" );
|
|
wait 1.2;
|
|
stopfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_01_fx, "tag_origin" );
|
|
stopfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_02_fx, "tag_origin" );
|
|
stopfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_03_fx, "tag_origin" );
|
|
stopfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_04_fx, "tag_origin" );
|
|
common_scripts\utility::flag_set( "stop_sat_thrust_loop" );
|
|
}
|
|
}
|
|
|
|
fx_escape_play_rog_impact( var_0, var_1 )
|
|
{
|
|
var_2 = gettime();
|
|
var_3 = gettime() - var_1 * 1000;
|
|
|
|
for (;;)
|
|
{
|
|
var_3 = gettime() - var_1 * 1000;
|
|
|
|
if ( common_scripts\utility::flag( "absolute_fire_decompression" ) )
|
|
break;
|
|
else if ( var_3 >= var_2 )
|
|
{
|
|
playfxontag( level._effect["odin_rog_impact"], self, var_0 );
|
|
thread maps\odin_audio::sfx_rog_impact();
|
|
break;
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
common_scripts\utility::flag_wait( "absolute_fire_decompression" );
|
|
wait 0.5;
|
|
killfxontag( level._effect["odin_rog_impact"], self, var_0 );
|
|
}
|
|
|
|
fx_spin_play_rog_impact( var_0, var_1 )
|
|
{
|
|
wait( var_1 );
|
|
playfxontag( level._effect["odin_rog_impact"], self, var_0 );
|
|
}
|
|
|
|
odin_missile_rod( var_0, var_1, var_2 )
|
|
{
|
|
wait( var_2 );
|
|
}
|
|
|
|
fx_rog_trail( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = 2;
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 3;
|
|
|
|
wait( var_0 );
|
|
|
|
if ( !isdefined( self ) )
|
|
return;
|
|
|
|
playfxontag( level._effect["odin_rog_trail_flare"], self, "tag_origin" );
|
|
playfxontag( level._effect["odin_rog_trail_geotrail_runner"], self, "tag_origin" );
|
|
wait( var_1 );
|
|
|
|
if ( !isdefined( self ) )
|
|
return;
|
|
else
|
|
killfxontag( level._effect["odin_rog_trail_flare"], self, "tag_origin" );
|
|
}
|
|
|
|
sfx_and_visual_shake()
|
|
{
|
|
if ( level.play_shake_sound == 0 )
|
|
{
|
|
wait 0.7;
|
|
thread maps\odin_audio::sfx_shaky_camera_moment();
|
|
wait 0.4;
|
|
earthquake( randomfloatrange( 0.05, 0.12 ), 3.0, level.player.origin, 500 );
|
|
}
|
|
else if ( level.play_shake_sound == 3 )
|
|
earthquake( randomfloatrange( 0.05, 0.12 ), 3.0, level.player.origin, 500 );
|
|
}
|
|
|
|
bright_light_flash_into_console()
|
|
{
|
|
var_0 = getent( "bright_light_flash_into_console", "script_noteworthy" );
|
|
|
|
for ( var_1 = 0; var_1 <= 1.8; var_1 = var_1 + 0.05 )
|
|
{
|
|
var_0 setlightintensity( var_1 );
|
|
wait 0.06;
|
|
}
|
|
|
|
while ( var_1 > 0 )
|
|
{
|
|
var_0 setlightintensity( var_1 );
|
|
wait 0.1;
|
|
var_1 = var_1 - 0.05;
|
|
}
|
|
}
|
|
|
|
satellite_rcs_thrusters()
|
|
{
|
|
level.satellite_small_thrusts = 0;
|
|
level.thruster_01 = getent( "sat_thruster_01", "script_noteworthy" );
|
|
level.thruster_02 = getent( "sat_thruster_02", "script_noteworthy" );
|
|
level.thruster_03 = getent( "sat_thruster_03", "script_noteworthy" );
|
|
level.thruster_04 = getent( "sat_thruster_04", "script_noteworthy" );
|
|
level.thruster_01_lat = getent( "sat_thruster_01_lat", "script_noteworthy" );
|
|
level.thruster_02_lat = getent( "sat_thruster_02_lat", "script_noteworthy" );
|
|
level.thruster_03_lat = getent( "sat_thruster_03_lat", "script_noteworthy" );
|
|
level.thruster_04_lat = getent( "sat_thruster_04_lat", "script_noteworthy" );
|
|
level.thruster_01_fx = common_scripts\utility::spawn_tag_origin();
|
|
level.thruster_01_fx.origin = level.thruster_01.origin;
|
|
level.thruster_01_fx.angles = level.thruster_01.angles;
|
|
level.thruster_01_fx linkto( level.thruster_01 );
|
|
level.thruster_02_fx = common_scripts\utility::spawn_tag_origin();
|
|
level.thruster_02_fx.origin = level.thruster_02.origin;
|
|
level.thruster_02_fx.angles = level.thruster_02.angles;
|
|
level.thruster_02_fx linkto( level.thruster_02 );
|
|
level.thruster_03_fx = common_scripts\utility::spawn_tag_origin();
|
|
level.thruster_03_fx.origin = level.thruster_03.origin;
|
|
level.thruster_03_fx.angles = level.thruster_03.angles;
|
|
level.thruster_03_fx linkto( level.thruster_03 );
|
|
level.thruster_04_fx = common_scripts\utility::spawn_tag_origin();
|
|
level.thruster_04_fx.origin = level.thruster_04.origin;
|
|
level.thruster_04_fx.angles = level.thruster_04.angles;
|
|
level.thruster_04_fx linkto( level.thruster_04 );
|
|
level.thruster_01_lat_fx = common_scripts\utility::spawn_tag_origin();
|
|
level.thruster_01_lat_fx.origin = level.thruster_01_lat.origin;
|
|
level.thruster_01_lat_fx.angles = level.thruster_01_lat.angles;
|
|
level.thruster_01_lat_fx linkto( level.thruster_01_lat );
|
|
level.thruster_02_lat_fx = common_scripts\utility::spawn_tag_origin();
|
|
level.thruster_02_lat_fx.origin = level.thruster_02_lat.origin;
|
|
level.thruster_02_lat_fx.angles = level.thruster_02_lat.angles;
|
|
level.thruster_02_lat_fx linkto( level.thruster_02_lat );
|
|
level.thruster_03_lat_fx = common_scripts\utility::spawn_tag_origin();
|
|
level.thruster_03_lat_fx.origin = level.thruster_03_lat.origin;
|
|
level.thruster_03_lat_fx.angles = level.thruster_03_lat.angles;
|
|
level.thruster_03_lat_fx linkto( level.thruster_03_lat );
|
|
level.thruster_04_lat_fx = common_scripts\utility::spawn_tag_origin();
|
|
level.thruster_04_lat_fx.origin = level.thruster_04_lat.origin;
|
|
level.thruster_04_lat_fx.angles = level.thruster_04_lat.angles;
|
|
level.thruster_04_lat_fx linkto( level.thruster_04_lat );
|
|
common_scripts\utility::flag_wait( "satellite_end_anim_started" );
|
|
level.thruster_01 delete();
|
|
level.thruster_02 delete();
|
|
level.thruster_03 delete();
|
|
level.thruster_04 delete();
|
|
level.thruster_01_lat_fx delete();
|
|
level.thruster_02_lat_fx delete();
|
|
level.thruster_03_lat_fx delete();
|
|
level.thruster_04_lat_fx delete();
|
|
}
|
|
|
|
fx_burnup()
|
|
{
|
|
wait 10;
|
|
level thread fx_burnup_sat();
|
|
wait 5;
|
|
common_scripts\utility::flag_set( "fx_start_burnup" );
|
|
maps\_utility::vision_set_fog_changes( "odin_burnup", 8 );
|
|
level.ally thread fx_burnup_kyra();
|
|
level.player thread fx_burnup_player();
|
|
}
|
|
|
|
fx_burnup_kyra()
|
|
{
|
|
self endon( "death" );
|
|
playfxontag( level._effect["odin_burnup_kyra_trail_runner"], self, "j_spinelower" );
|
|
common_scripts\utility::waitframe();
|
|
playfxontag( level._effect["odin_burnup_player_trail_runner"], self, "j_wrist_le" );
|
|
playfxontag( level._effect["odin_burnup_player_trail_runner"], self, "j_wrist_ri" );
|
|
common_scripts\utility::waitframe();
|
|
playfxontag( level._effect["odin_burnup_player_trail_runner"], self, "j_ankle_le" );
|
|
playfxontag( level._effect["odin_burnup_player_trail_runner"], self, "j_ankle_ri" );
|
|
common_scripts\utility::flag_wait( "start_transition_to_youngblood" );
|
|
self endon( "death" );
|
|
wait 2;
|
|
|
|
if ( !isdefined( self ) )
|
|
return;
|
|
|
|
killfxontag( level._effect["odin_burnup_kyra_trail_runner"], self, "j_spinelower" );
|
|
killfxontag( level._effect["odin_burnup_player_trail_runner"], self, "j_wrist_le" );
|
|
killfxontag( level._effect["odin_burnup_player_trail_runner"], self, "j_wrist_ri" );
|
|
common_scripts\utility::waitframe();
|
|
|
|
if ( !isdefined( self ) )
|
|
return;
|
|
|
|
killfxontag( level._effect["odin_burnup_player_trail_runner"], self, "j_ankle_le" );
|
|
killfxontag( level._effect["odin_burnup_player_trail_runner"], self, "j_ankle_ri" );
|
|
}
|
|
|
|
fx_burnup_player()
|
|
{
|
|
var_0 = spawn( "script_model", ( 0, 0, 0 ) );
|
|
var_0 setmodel( "tag_origin" );
|
|
var_0 linktoplayerview( self, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ), 1 );
|
|
playfxontag( level._effect["odin_burnup_scrnfx"], var_0, "tag_origin" );
|
|
common_scripts\utility::flag_wait( "start_transition_to_youngblood" );
|
|
wait 1.9;
|
|
killfxontag( level._effect["odin_burnup_scrnfx"], var_0, "tag_origin" );
|
|
common_scripts\utility::waitframe();
|
|
var_0 delete();
|
|
}
|
|
|
|
fx_burnup_sat()
|
|
{
|
|
var_0 = [];
|
|
var_0[var_0.size] = getent( "odin_sat_section_04_pod_doorL_01", "script_noteworthy" );
|
|
var_0[var_0.size] = getent( "odin_sat_section_04_pod_doorL_02", "script_noteworthy" );
|
|
var_0[var_0.size] = getent( "odin_sat_section_04_pod_doorL_03", "script_noteworthy" );
|
|
var_0[var_0.size] = getent( "odin_sat_section_04_pod_doorL_04", "script_noteworthy" );
|
|
var_0[var_0.size] = getent( "odin_sat_section_04_pod_doorR_01", "script_noteworthy" );
|
|
var_0[var_0.size] = getent( "odin_sat_section_04_pod_doorR_02", "script_noteworthy" );
|
|
var_0[var_0.size] = getent( "odin_sat_section_04_pod_doorR_03", "script_noteworthy" );
|
|
var_0[var_0.size] = getent( "odin_sat_section_04_pod_doorR_04", "script_noteworthy" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
if ( maps\_utility::hastag( var_2.model, "tag_fx_tip" ) )
|
|
playfxontag( level._effect["odin_burnup_sat_door_trail_runner"], var_2, "tag_fx_tip" );
|
|
|
|
wait( randomfloatrange( 0.1, 0.5 ) );
|
|
}
|
|
|
|
var_4 = getentarray( "fx_sat_burnup_trail", "script_noteworthy" );
|
|
var_5 = [];
|
|
|
|
foreach ( var_2 in var_4 )
|
|
{
|
|
var_7 = var_2 common_scripts\utility::spawn_tag_origin();
|
|
var_7 linkto( var_2 );
|
|
playfxontag( level._effect["odin_burnup_sat_trail_runner"], var_7, "tag_origin" );
|
|
var_5[var_5.size] = var_7;
|
|
wait( randomfloatrange( 0.1, 0.5 ) );
|
|
}
|
|
|
|
common_scripts\utility::flag_wait( "start_transition_to_youngblood" );
|
|
wait 1.9;
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
if ( maps\_utility::hastag( var_2.model, "tag_fx_tip" ) )
|
|
killfxontag( level._effect["odin_burnup_sat_door_trail_runner"], var_2, "tag_fx_tip" );
|
|
}
|
|
|
|
foreach ( var_2 in var_5 )
|
|
var_2 delete();
|
|
|
|
common_scripts\utility::flag_set( "clear_for_sat_clean" );
|
|
}
|
|
|
|
fx_sat_thrusters_damage()
|
|
{
|
|
if ( !isdefined( level.thruster_01_fx ) )
|
|
{
|
|
level.thruster_01 = getent( "sat_thruster_01", "script_noteworthy" );
|
|
level.thruster_02 = getent( "sat_thruster_02", "script_noteworthy" );
|
|
level.thruster_03 = getent( "sat_thruster_03", "script_noteworthy" );
|
|
level.thruster_04 = getent( "sat_thruster_04", "script_noteworthy" );
|
|
level.thruster_01_fx = common_scripts\utility::spawn_tag_origin();
|
|
level.thruster_01_fx.origin = level.thruster_01.origin;
|
|
level.thruster_01_fx.angles = level.thruster_01.angles;
|
|
level.thruster_01_fx linkto( level.thruster_01 );
|
|
level.thruster_02_fx = common_scripts\utility::spawn_tag_origin();
|
|
level.thruster_02_fx.origin = level.thruster_02.origin;
|
|
level.thruster_02_fx.angles = level.thruster_02.angles;
|
|
level.thruster_02_fx linkto( level.thruster_02 );
|
|
level.thruster_03_fx = common_scripts\utility::spawn_tag_origin();
|
|
level.thruster_03_fx.origin = level.thruster_03.origin;
|
|
level.thruster_03_fx.angles = level.thruster_03.angles;
|
|
level.thruster_03_fx linkto( level.thruster_03 );
|
|
level.thruster_04_fx = common_scripts\utility::spawn_tag_origin();
|
|
level.thruster_04_fx.origin = level.thruster_04.origin;
|
|
level.thruster_04_fx.angles = level.thruster_04.angles;
|
|
level.thruster_04_fx linkto( level.thruster_04 );
|
|
}
|
|
|
|
common_scripts\utility::flag_wait( "first_finale_stage_done" );
|
|
stopfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_01_fx, "tag_origin" );
|
|
stopfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_02_fx, "tag_origin" );
|
|
stopfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_03_fx, "tag_origin" );
|
|
stopfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_04_fx, "tag_origin" );
|
|
common_scripts\utility::waitframe();
|
|
playfxontag( level._effect["odin_sat_thrusters_ignite_sporadic"], level.thruster_01_fx, "tag_origin" );
|
|
thread maps\odin_audio::sfx_satellite_thruster_initial_burst( level.thruster_01_fx );
|
|
thread maps\odin_audio::sfx_satellite_thruster_loop( level.thruster_01_fx );
|
|
playfxontag( level._effect["odin_sat_thrusters_ignite_sporadic"], level.thruster_02_fx, "tag_origin" );
|
|
thread maps\odin_audio::sfx_satellite_thruster_initial_burst( level.thruster_02_fx );
|
|
common_scripts\utility::waitframe();
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_03_fx, "tag_origin" );
|
|
thread maps\odin_audio::sfx_satellite_thruster_initial_burst( level.thruster_03_fx );
|
|
playfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_04_fx, "tag_origin" );
|
|
thread maps\odin_audio::sfx_satellite_thruster_initial_burst( level.thruster_04_fx );
|
|
common_scripts\utility::flag_wait( "satellite_end_anim_started" );
|
|
killfxontag( level._effect["odin_sat_thrusters_ignite_sporadic"], level.thruster_01_fx, "tag_origin" );
|
|
killfxontag( level._effect["odin_sat_thrusters_ignite_sporadic"], level.thruster_02_fx, "tag_origin" );
|
|
killfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_03_fx, "tag_origin" );
|
|
killfxontag( level._effect["odin_sat_thrusters_runner"], level.thruster_04_fx, "tag_origin" );
|
|
common_scripts\utility::flag_set( "stop_sat_thrust_loop" );
|
|
}
|
|
|
|
fx_spin_player_debris()
|
|
{
|
|
wait 2.1;
|
|
level.playerview = spawn( "script_model", ( 0, 0, 0 ) );
|
|
level.playerview setmodel( "tag_origin" );
|
|
level.playerview linktoplayerview( level.player, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ), 1 );
|
|
playfxontag( level._effect["odin_debris_field_max_runner"], level.playerview, "tag_origin" );
|
|
wait 10.3;
|
|
stopfxontag( level._effect["odin_debris_field_max_runner"], level.playerview, "tag_origin" );
|
|
playfxontag( level._effect["odin_debris_field_high_runner"], level.playerview, "tag_origin" );
|
|
wait 15;
|
|
stopfxontag( level._effect["odin_debris_field_high_runner"], level.playerview, "tag_origin" );
|
|
playfxontag( level._effect["odin_debris_field_med_runner"], level.playerview, "tag_origin" );
|
|
wait 8;
|
|
stopfxontag( level._effect["odin_debris_field_med_runner"], level.playerview, "tag_origin" );
|
|
playfxontag( level._effect["odin_debris_field_low_runner"], level.playerview, "tag_origin" );
|
|
level waittill( "objective_destroy_sat" );
|
|
wait 5;
|
|
stopfxontag( level._effect["odin_debris_field_max_runner"], level.playerview, "tag_origin" );
|
|
stopfxontag( level._effect["odin_debris_field_high_runner"], level.playerview, "tag_origin" );
|
|
stopfxontag( level._effect["odin_debris_field_med_runner"], level.playerview, "tag_origin" );
|
|
stopfxontag( level._effect["odin_debris_field_low_runner"], level.playerview, "tag_origin" );
|
|
level.playerview delete();
|
|
}
|
|
|
|
fx_sat_rcs_damage( var_0 )
|
|
{
|
|
switch ( var_0 )
|
|
{
|
|
case 1:
|
|
var_1 = getent( "fx_sat_rcs_damage_1", "script_noteworthy" );
|
|
var_2 = var_1.origin;
|
|
var_3 = anglestoforward( var_1.angles );
|
|
var_4 = anglestoup( var_1.angles );
|
|
level.fx_sat_rcs_damage[level.fx_sat_rcs_damage.size] = spawnfx( level._effect["fuel_leak_zerog_small"], var_2, var_3, var_4 );
|
|
triggerfx( level.fx_sat_rcs_damage[level.fx_sat_rcs_damage.size - 1] );
|
|
thread maps\odin_audio::sfx_rcs_destr( var_1, 1, 0 );
|
|
thread maps\odin_audio::sfx_set_ending_flag();
|
|
break;
|
|
case 2:
|
|
var_1 = getent( "fx_sat_rcs_damage_2", "script_noteworthy" );
|
|
var_2 = var_1.origin;
|
|
var_3 = anglestoforward( var_1.angles );
|
|
var_4 = anglestoup( var_1.angles );
|
|
level.fx_sat_rcs_damage[level.fx_sat_rcs_damage.size] = spawnfx( level._effect["fuel_fire_zerog_small"], var_2, var_3, var_4 );
|
|
triggerfx( level.fx_sat_rcs_damage[level.fx_sat_rcs_damage.size - 1] );
|
|
thread maps\odin_audio::sfx_rcs_destr( var_1, 2, 0 );
|
|
break;
|
|
case 3:
|
|
fx_sat_rcs_damage_kill();
|
|
var_1 = getent( "fx_sat_rcs_damage_1", "script_noteworthy" );
|
|
var_2 = var_1.origin;
|
|
var_3 = anglestoforward( var_1.angles );
|
|
var_4 = anglestoup( var_1.angles );
|
|
level.fx_sat_rcs_damage[level.fx_sat_rcs_damage.size] = spawnfx( level._effect["fuel_fire_zerog_small"], var_2, var_3, var_4 );
|
|
triggerfx( level.fx_sat_rcs_damage[level.fx_sat_rcs_damage.size - 1] );
|
|
thread maps\odin_audio::sfx_rcs_destr( var_1, 3, 0 );
|
|
thread maps\odin_audio::sfx_rcs_destr( var_1, 5, 5 );
|
|
var_1 = getent( "fx_sat_rcs_damage_2", "script_noteworthy" );
|
|
var_2 = var_1.origin;
|
|
var_3 = anglestoforward( var_1.angles );
|
|
var_4 = anglestoup( var_1.angles );
|
|
level.fx_sat_rcs_damage[level.fx_sat_rcs_damage.size] = spawnfx( level._effect["fuel_fire_zerog_small"], var_2, var_3, var_4 );
|
|
triggerfx( level.fx_sat_rcs_damage[level.fx_sat_rcs_damage.size - 1] );
|
|
var_1 = getent( "fx_sat_rcs_damage_3", "script_noteworthy" );
|
|
var_2 = var_1.origin;
|
|
var_3 = anglestoforward( var_1.angles );
|
|
var_4 = anglestoup( var_1.angles );
|
|
level.fx_sat_rcs_damage[level.fx_sat_rcs_damage.size] = spawnfx( level._effect["fuel_fire_zerog_small"], var_2, var_3, var_4 );
|
|
triggerfx( level.fx_sat_rcs_damage[level.fx_sat_rcs_damage.size - 1] );
|
|
thread maps\odin_audio::sfx_rcs_destr( var_1, 4, 0.1 );
|
|
var_1 = getent( "ally_shooting_target", "script_noteworthy" );
|
|
var_2 = var_1.origin;
|
|
var_3 = anglestoforward( var_1.angles );
|
|
var_4 = anglestoup( var_1.angles );
|
|
level.fx_sat_rcs_damage[level.fx_sat_rcs_damage.size] = spawnfx( level._effect["zg_electrical_sparks_runner_40"], var_2, var_3, var_4 );
|
|
triggerfx( level.fx_sat_rcs_damage[level.fx_sat_rcs_damage.size - 1] );
|
|
break;
|
|
case 4:
|
|
var_1 = getent( "fx_sat_rcs_damage_4", "script_noteworthy" );
|
|
var_2 = var_1.origin;
|
|
var_3 = anglestoforward( var_1.angles );
|
|
var_4 = anglestoup( var_1.angles );
|
|
level.fx_sat_rcs_damage[level.fx_sat_rcs_damage.size] = spawnfx( level._effect["fuel_fire_zerog_small"], var_2, var_3, var_4 );
|
|
triggerfx( level.fx_sat_rcs_damage[level.fx_sat_rcs_damage.size - 1] );
|
|
var_1 = getent( "fx_sat_rcs_damage_5", "script_noteworthy" );
|
|
var_2 = var_1.origin;
|
|
var_3 = anglestoforward( var_1.angles );
|
|
var_4 = anglestoup( var_1.angles );
|
|
level.fx_sat_rcs_damage[level.fx_sat_rcs_damage.size] = spawnfx( level._effect["fuel_fire_zerog_small"], var_2, var_3, var_4 );
|
|
triggerfx( level.fx_sat_rcs_damage[level.fx_sat_rcs_damage.size - 1] );
|
|
thread maps\odin_audio::sfx_rcs_destr( var_1, 4, 0.1 );
|
|
var_1 = getent( "ally_shooting_target", "script_noteworthy" );
|
|
var_2 = var_1.origin;
|
|
var_3 = anglestoforward( var_1.angles );
|
|
var_4 = anglestoup( var_1.angles );
|
|
level.fx_sat_rcs_damage[level.fx_sat_rcs_damage.size] = spawnfx( level._effect["odin_fire_flare_runner"], var_2, var_3, var_4 );
|
|
triggerfx( level.fx_sat_rcs_damage[level.fx_sat_rcs_damage.size - 1] );
|
|
break;
|
|
case 5:
|
|
var_1 = getent( "fx_sat_rcs_damage_6", "script_noteworthy" );
|
|
var_2 = var_1.origin;
|
|
var_3 = anglestoforward( var_1.angles );
|
|
var_4 = anglestoup( var_1.angles );
|
|
level.fx_sat_rcs_damage[level.fx_sat_rcs_damage.size] = spawnfx( level._effect["odin_sat_rcs_fire_puff"], var_2, var_3, var_4 );
|
|
triggerfx( level.fx_sat_rcs_damage[level.fx_sat_rcs_damage.size - 1] );
|
|
thread maps\odin_audio::sfx_rcs_destr( var_1, 5, 0 );
|
|
var_1 = getent( "fx_sat_rcs_damage_7", "script_noteworthy" );
|
|
var_2 = var_1.origin;
|
|
var_3 = anglestoforward( var_1.angles );
|
|
var_4 = anglestoup( var_1.angles );
|
|
level.fx_sat_rcs_damage[level.fx_sat_rcs_damage.size] = spawnfx( level._effect["odin_sat_rcs_fire_puff"], var_2, var_3, var_4 );
|
|
triggerfx( level.fx_sat_rcs_damage[level.fx_sat_rcs_damage.size - 1] );
|
|
thread maps\odin_audio::sfx_rcs_destr( var_1, 4, 0.5 );
|
|
thread maps\odin_audio::sfx_rcs_destr( var_1, 5, 2.1 );
|
|
wait 3;
|
|
level notify( "thrusters_fully_damaged" );
|
|
break;
|
|
default:
|
|
}
|
|
}
|
|
|
|
fx_sat_rcs_damage_kill()
|
|
{
|
|
foreach ( var_1 in level.fx_sat_rcs_damage )
|
|
var_1 delete();
|
|
|
|
level.fx_sat_rcs_damage = [];
|
|
}
|
|
|
|
fx_spin_solar_panel_collision_01( var_0 )
|
|
{
|
|
playfxontag( level._effect["odin_spin_solar_flash"], var_0, "panel_04" );
|
|
playfxontag( level._effect["odin_spin_solar_flash"], var_0, "panel_06" );
|
|
|
|
if ( maps\_utility::is_gen4() )
|
|
{
|
|
common_scripts\utility::waitframe();
|
|
playfxontag( level._effect["odin_spin_solar_runner"], var_0, "panel_04" );
|
|
playfxontag( level._effect["odin_spin_solar_runner"], var_0, "panel_06" );
|
|
playfxontag( level._effect["odin_spin_solar_runner"], var_0, "panel_07" );
|
|
}
|
|
}
|
|
|
|
fx_spin_solar_panel_collision_02( var_0 )
|
|
{
|
|
playfxontag( level._effect["odin_spin_solar_flash"], var_0, "panel_03" );
|
|
playfxontag( level._effect["odin_spin_solar_player_debris"], level.playerview, "tag_origin" );
|
|
}
|
|
|
|
fx_solar_panel_collision_kyra( var_0 )
|
|
{
|
|
|
|
}
|
|
|
|
fx_solar_panel_collision_player( var_0 )
|
|
{
|
|
|
|
}
|
|
|
|
fx_shuttle_dock()
|
|
{
|
|
common_scripts\utility::exploder( "shuttle_dock" );
|
|
}
|
|
|
|
fx_sat_explosion( var_0 )
|
|
{
|
|
var_1 = getent( "fx_sat_rcs_explosion", "script_noteworthy" );
|
|
var_2 = common_scripts\utility::spawn_tag_origin();
|
|
var_2.origin = var_1.origin;
|
|
var_2.angles = var_1.angles;
|
|
var_2 linkto( var_0 );
|
|
playfxontag( level._effect["odin_sat_exp_rcs_fire_runner"], var_2, "tag_origin" );
|
|
common_scripts\utility::flag_wait( "start_transition_to_youngblood" );
|
|
wait 1.9;
|
|
killfxontag( level._effect["odin_sat_exp_rcs_fire_runner"], var_2, "tag_origin" );
|
|
var_2 delete();
|
|
}
|
|
|
|
fx_rotate_lights_setup()
|
|
{
|
|
common_scripts\utility::array_thread( getentarray( "fx_amber_light_pitch", "script_noteworthy" ), ::fx_rotate_lights, "amber", "pitch" );
|
|
common_scripts\utility::array_thread( getentarray( "fx_amber_light_yaw", "script_noteworthy" ), ::fx_rotate_lights, "amber", "yaw" );
|
|
common_scripts\utility::array_thread( getentarray( "fx_red_light_pitch", "script_noteworthy" ), ::fx_rotate_lights, "red", "pitch" );
|
|
common_scripts\utility::array_thread( getentarray( "fx_red_light_pitch_2", "script_noteworthy" ), ::fx_rotate_lights, "red", "pitch_2" );
|
|
common_scripts\utility::array_thread( getentarray( "fx_red_light_yaw", "script_noteworthy" ), ::fx_rotate_lights, "red", "yaw" );
|
|
}
|
|
|
|
fx_rotate_lights( var_0, var_1 )
|
|
{
|
|
var_2 = common_scripts\utility::spawn_tag_origin();
|
|
var_2.origin = self.origin + 2.5 * anglestoup( self.angles );
|
|
var_2.angles = self.angles;
|
|
var_2 linkto( self );
|
|
|
|
switch ( var_0 )
|
|
{
|
|
case "amber":
|
|
playfxontag( level._effect["amber_light_45_flare_nolight"], var_2, "tag_origin" );
|
|
break;
|
|
case "red":
|
|
playfxontag( level._effect["red_light_45_flare_nolight"], var_2, "tag_origin" );
|
|
break;
|
|
}
|
|
|
|
switch ( var_1 )
|
|
{
|
|
case "pitch":
|
|
thread rotateme( -360, "pitch", 1 );
|
|
break;
|
|
case "pitch_2":
|
|
thread rotateme( 360, "pitch", 1 );
|
|
break;
|
|
case "yaw":
|
|
thread rotateme( -360, "yaw", 1 );
|
|
break;
|
|
}
|
|
|
|
self waittill( "start_transition_to_youngblood" );
|
|
var_2 delete();
|
|
}
|
|
|
|
fx_space_glass()
|
|
{
|
|
level.space_screen = spawn( "script_model", ( 0, 0, 0 ) );
|
|
level.space_screen setmodel( "tag_origin" );
|
|
level.space_screen linktoplayerview( level.player, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ), 1 );
|
|
playfxontag( common_scripts\utility::getfx( "vfx_scrnfx_space_glass" ), level.space_screen, "tag_origin" );
|
|
common_scripts\utility::flag_wait( "invasion_clear" );
|
|
killfxontag( common_scripts\utility::getfx( "vfx_scrnfx_space_glass" ), level.space_screen, "tag_origin" );
|
|
level.space_screen delete();
|
|
}
|
|
|
|
fx_setup_sat_lights()
|
|
{
|
|
var_0 = getentarray( "fx_sat_antenna_light", "script_noteworthy" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
var_3 = var_2 common_scripts\utility::spawn_tag_origin();
|
|
var_3 linkto( var_2 );
|
|
playfxontag( level._effect["odin_sat_red_light"], var_3, "tag_origin" );
|
|
}
|
|
}
|
|
|
|
fx_sat_doors_open( var_0 )
|
|
{
|
|
foreach ( var_2 in var_0 )
|
|
playfxontag( level._effect["odin_sat_red_light_blinker_runner"], var_2, "tag_fx_base_light" );
|
|
|
|
wait 18;
|
|
|
|
foreach ( var_2 in var_0 )
|
|
stopfxontag( level._effect["odin_sat_red_light_blinker_runner"], var_2, "tag_fx_base_light" );
|
|
}
|
|
|
|
fx_sat_doors_close( var_0 )
|
|
{
|
|
foreach ( var_2 in var_0 )
|
|
playfxontag( level._effect["odin_sat_red_light_blinker_runner"], var_2, "tag_fx_base_light" );
|
|
|
|
wait 20;
|
|
|
|
foreach ( var_2 in var_0 )
|
|
stopfxontag( level._effect["odin_sat_red_light_blinker_runner"], var_2, "tag_fx_base_light" );
|
|
}
|
|
|
|
airlock_glass_fog()
|
|
{
|
|
wait 2.0;
|
|
level.fog_screen = spawn( "script_model", ( 0, 0, 0 ) );
|
|
level.fog_screen setmodel( "tag_origin" );
|
|
level.fog_screen linktoplayerview( level.player, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ), 1 );
|
|
playfxontag( common_scripts\utility::getfx( "vfx_scrnfx_space_glass_fog" ), level.fog_screen, "tag_origin" );
|
|
}
|
|
|
|
fx_spin_create_rog_plumes()
|
|
{
|
|
var_0 = maps\odin_util::earth_get_script_mover().earth_model;
|
|
|
|
for ( var_1 = 1; var_1 < 4; var_1++ )
|
|
{
|
|
var_2 = "tag_fx_impact_" + var_1;
|
|
playfxontag( level._effect["odin_rog_plume_0" + var_1], var_0, var_2 );
|
|
}
|
|
|
|
common_scripts\utility::flag_wait( "start_transition_to_youngblood" );
|
|
|
|
for ( var_1 = 1; var_1 < 4; var_1++ )
|
|
{
|
|
var_2 = "tag_fx_impact_" + var_1;
|
|
killfxontag( level._effect["odin_rog_plume_0" + var_1], var_0, var_2 );
|
|
}
|
|
}
|