1334 lines
46 KiB
Plaintext
1334 lines
46 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
intro_start()
|
|
{
|
|
maps\odin_util::move_player_to_start_point( "start_odin_intro" );
|
|
thread maps\odin_escape::manage_earth( "hide" );
|
|
|
|
if ( isdefined( level.prologue ) && level.prologue == 1 )
|
|
common_scripts\utility::flag_set( "do_transition_to_odin" );
|
|
|
|
level.space_breathing_enabled = 1;
|
|
}
|
|
|
|
section_precache()
|
|
{
|
|
precachestring( &"ODIN_INTROSCREEN_LINE_0" );
|
|
precachestring( &"ODIN_INTROSCREEN_LINE_1" );
|
|
precachestring( &"ODIN_INTROSCREEN_LINE_2" );
|
|
precachestring( &"ODIN_INTROSCREEN_LINE_3" );
|
|
precachestring( &"ODIN_INTRO_BUMPER_HINT2" );
|
|
precachestring( &"ODIN_INTRO_BUMPER_HINT2_PC" );
|
|
precachestring( &"ODIN_INTRO_BUMPER_HINT2_CROUCH" );
|
|
precachestring( &"ODIN_INTRO_BUMPER_HINT" );
|
|
precachestring( &"ODIN_INTRO_BUMPER_HINT_PC" );
|
|
precachestring( &"ODIN_STRAY_INTRO_WARNING" );
|
|
precachestring( &"ODIN_FAIL_STRAY_INTRO" );
|
|
precachemodel( "viewmodel_space_tar21" );
|
|
}
|
|
|
|
section_flag_init()
|
|
{
|
|
common_scripts\utility::flag_init( "start_transition_to_youngblood" );
|
|
common_scripts\utility::flag_init( "do_transition_to_odin" );
|
|
common_scripts\utility::flag_init( "intro_show_introtext" );
|
|
common_scripts\utility::flag_init( "clear_to_tweak_player" );
|
|
common_scripts\utility::flag_init( "player_is_leaving" );
|
|
common_scripts\utility::flag_init( "shuttle_starts_moving" );
|
|
common_scripts\utility::flag_init( "DOF_Rack_Complete" );
|
|
common_scripts\utility::flag_init( "kyra_is_in_station" );
|
|
common_scripts\utility::flag_init( "clear_to_tweak_player_forced" );
|
|
common_scripts\utility::flag_init( "open_exterior_hatch" );
|
|
common_scripts\utility::flag_init( "wall_push_tweak_player" );
|
|
common_scripts\utility::flag_init( "push_player_hard_wall" );
|
|
common_scripts\utility::flag_init( "get_intro_moving" );
|
|
common_scripts\utility::flag_init( "remove_bumper_hint" );
|
|
common_scripts\utility::flag_init( "ally_at_exterior_hatch" );
|
|
common_scripts\utility::flag_init( "remove_temp_blocker" );
|
|
common_scripts\utility::flag_init( "exterior_hatch_opening" );
|
|
common_scripts\utility::flag_init( "player_at_airlock" );
|
|
common_scripts\utility::flag_init( "invasion_clear" );
|
|
common_scripts\utility::flag_init( "airlock_begin_pressurize" );
|
|
common_scripts\utility::flag_init( "airlock_pressurized_and_open" );
|
|
common_scripts\utility::flag_init( "mission_failed" );
|
|
common_scripts\utility::flag_init( "pause_bumper_hints" );
|
|
common_scripts\utility::flag_init( "intro_fade_done" );
|
|
common_scripts\utility::flag_init( "begin_dof_rack_fade" );
|
|
common_scripts\utility::flag_init( "player_can_rise" );
|
|
common_scripts\utility::flag_init( "player_can_fall" );
|
|
common_scripts\utility::flag_init( "intro_vin_lines_done" );
|
|
common_scripts\utility::flag_init( "start_player_intro_anim" );
|
|
common_scripts\utility::flag_init( "ally_should_nag" );
|
|
common_scripts\utility::flag_init( "astronaut_needs_helps" );
|
|
common_scripts\utility::flag_init( "clear_helper_mark" );
|
|
common_scripts\utility::flag_init( "nags_should_overlap" );
|
|
common_scripts\utility::flag_init( "notetracked_lines_are_done" );
|
|
}
|
|
|
|
section_hint_string_init()
|
|
{
|
|
maps\_utility::add_hint_string( "intro_bumper_hint", &"ODIN_INTRO_BUMPER_HINT", ::hint_bumpers_intro );
|
|
maps\_utility::add_hint_string( "intro_bumper_hint2", &"ODIN_INTRO_BUMPER_HINT2", ::hint_bumpers_intro2 );
|
|
maps\_utility::add_hint_string( "intro_bumper_hint2_PC", &"ODIN_INTRO_BUMPER_HINT2_PC", ::hint_bumpers_intro2 );
|
|
maps\_utility::add_hint_string( "intro_bumper_hint2_CROUCH", &"ODIN_INTRO_BUMPER_HINT2_CROUCH", ::hint_bumpers_intro2 );
|
|
maps\_utility::add_hint_string( "intro_bumper_hint_pc", &"ODIN_INTRO_BUMPER_HINT_PC", ::hint_bumpers_intro );
|
|
maps\_utility::add_hint_string( "intro_stray_fail", &"ODIN_FAIL_STRAY_INTRO" );
|
|
maps\_utility::add_hint_string( "intro_stray_warn", &"ODIN_STRAY_INTRO_WARNING", ::hint_stray_warn );
|
|
}
|
|
|
|
hint_bumpers_intro()
|
|
{
|
|
if ( common_scripts\utility::flag( "pause_bumper_hints" ) )
|
|
return 1;
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
hint_bumpers_intro2()
|
|
{
|
|
if ( common_scripts\utility::flag( "pause_bumper_hints" ) )
|
|
return 1;
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
hint_stray_warn()
|
|
{
|
|
if ( common_scripts\utility::flag( "intro_player_in_bounds" ) || !common_scripts\utility::flag( "intro_player_death_area" ) )
|
|
return 1;
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
intro_main()
|
|
{
|
|
if ( isdefined( level.prologue ) && level.prologue == 1 )
|
|
thread maps\_utility::autosave_now();
|
|
|
|
common_scripts\utility::flag_clear( "enable_player_thruster_audio" );
|
|
thread maps\odin_anim::empty_suit_animation();
|
|
level.player freezecontrols( 1 );
|
|
level.space_breathing_enabled = 1;
|
|
|
|
if ( isdefined( level.prologue ) && level.prologue == 1 )
|
|
{
|
|
common_scripts\utility::flag_wait( "do_transition_to_odin" );
|
|
maps\odin_util::move_player_to_start_point( "start_odin_intro" );
|
|
}
|
|
|
|
thread intro_setup();
|
|
thread shuttle_docking();
|
|
thread player_near_station_checker();
|
|
thread open_exterior_hatch();
|
|
thread airlock_interior_hatch();
|
|
thread maps\odin_util::initial_satellite_placement();
|
|
thread maps\odin_escape::manage_earth( "hide" );
|
|
thread maps\odin_fx::satellite_rcs_thrusters();
|
|
odin_intro_screen();
|
|
thread intro_dialogue();
|
|
level.ally intro_vignette();
|
|
level.ally station_entrance_to_infiltration();
|
|
thread intro_cleanup( 0 );
|
|
}
|
|
|
|
intro_setup()
|
|
{
|
|
thread dof_rack();
|
|
thread player_intro_anim();
|
|
thread maps\odin_fx::fx_space_glass();
|
|
level.player setviewmodel( "viewhands_us_space" );
|
|
level.player disableweapons();
|
|
setsaveddvar( "ammoCounterHide", "1" );
|
|
maps\odin_util::actor_teleport( level.ally, "odin_intro_ally_tp" );
|
|
level.ally.animname = "odin_ally";
|
|
level.ally.ignoreall = 1;
|
|
level.ally maps\_utility::gun_remove();
|
|
|
|
if ( !isdefined( level.prologue ) )
|
|
setsaveddvar( "cg_fov", 70 );
|
|
|
|
level thread intro_ally_idle();
|
|
}
|
|
|
|
intro_ally_idle()
|
|
{
|
|
var_0 = getent( "scriptednode_player", "script_noteworthy" );
|
|
var_0 thread maps\_anim::anim_loop_solo( level.ally, "odin_intro_kyra_idle", "stop_loop" );
|
|
level waittill( "intro_stop_ally_idle" );
|
|
var_0 notify( "stop_loop" );
|
|
}
|
|
|
|
intro_dialogue()
|
|
{
|
|
level endon( "player_at_airlock" );
|
|
common_scripts\utility::flag_wait( "intro_vin_lines_done" );
|
|
nag_check_dialogue( "odin_cub_payloadthisisodin" );
|
|
nag_check_dialogue( "odin_kyr_odinmainwereheading" );
|
|
|
|
if ( !common_scripts\utility::flag( "player_at_entrance" ) )
|
|
nag_check_dialogue( "odin_cub_rogerwerepreppingairlock" );
|
|
|
|
if ( !common_scripts\utility::flag( "player_at_entrance" ) )
|
|
nag_check_dialogue( "odin_cub_payloadtenmetersbegin" );
|
|
|
|
if ( !common_scripts\utility::flag( "player_at_entrance" ) )
|
|
wait 4;
|
|
|
|
if ( !common_scripts\utility::flag( "player_at_entrance" ) )
|
|
nag_check_dialogue( "odin_cub_fivemeterspayload" );
|
|
|
|
if ( !common_scripts\utility::flag( "player_at_entrance" ) )
|
|
wait 3;
|
|
|
|
if ( !common_scripts\utility::flag( "player_at_entrance" ) )
|
|
nag_check_dialogue( "odin_cub_twometerszeroyour" );
|
|
|
|
common_scripts\utility::flag_wait( "player_at_entrance" );
|
|
maps\_utility::smart_radio_dialogue( "odin_cub_budkyraairlockc" );
|
|
|
|
if ( !common_scripts\utility::flag( "airlock_begin_pressurize" ) && !common_scripts\utility::flag( "kyra_is_in_station" ) )
|
|
nag_check_dialogue( "odin_pyl_capturing" );
|
|
|
|
if ( !common_scripts\utility::flag( "airlock_begin_pressurize" ) && !common_scripts\utility::flag( "kyra_is_in_station" ) )
|
|
nag_check_dialogue( "odin_pyl_talkbackisbarberpole" );
|
|
|
|
if ( !common_scripts\utility::flag( "airlock_begin_pressurize" ) && !common_scripts\utility::flag( "kyra_is_in_station" ) )
|
|
nag_check_dialogue( "odin_cub_copypayload" );
|
|
|
|
common_scripts\utility::flag_wait( "notetracked_lines_are_done" );
|
|
nag_check_dialogue( "odin_cub_payloadwehavehard" );
|
|
nag_check_dialogue( "odin_cub_andyouareparked" );
|
|
}
|
|
|
|
nag_check_dialogue( var_0 )
|
|
{
|
|
common_scripts\utility::flag_set( "nags_should_overlap" );
|
|
maps\_utility::smart_radio_dialogue( var_0 );
|
|
common_scripts\utility::flag_clear( "nags_should_overlap" );
|
|
}
|
|
|
|
player_near_station_checker()
|
|
{
|
|
level endon( "start_transition_to_youngblood" );
|
|
var_0 = getent( "ally_airlock_touch", "targetname" );
|
|
thread player_too_far_death();
|
|
wait 1;
|
|
|
|
for (;;)
|
|
{
|
|
common_scripts\utility::flag_waitopen( "intro_player_in_bounds" );
|
|
|
|
if ( common_scripts\utility::flag( "player_approaching_infiltration" ) || level.player istouching( var_0 ) )
|
|
return;
|
|
else
|
|
{
|
|
common_scripts\utility::flag_set( "astronaut_needs_helps" );
|
|
level.player thread maps\_utility::display_hint( "intro_stray_warn" );
|
|
common_scripts\utility::flag_set( "astronaut_needs_help" );
|
|
}
|
|
|
|
common_scripts\utility::flag_wait( "intro_player_in_bounds" );
|
|
}
|
|
}
|
|
|
|
player_too_far_death()
|
|
{
|
|
level endon( "start_transition_to_youngblood" );
|
|
wait 1;
|
|
|
|
for (;;)
|
|
{
|
|
common_scripts\utility::flag_waitopen( "intro_player_death_area" );
|
|
|
|
if ( common_scripts\utility::flag( "player_approaching_infiltration" ) )
|
|
return;
|
|
else
|
|
{
|
|
common_scripts\utility::flag_set( "mission_failed" );
|
|
level notify( "new_quote_string" );
|
|
setdvar( "ui_deadquote", "@ODIN_FAIL_STRAY_INTRO" );
|
|
maps\_utility::missionfailedwrapper();
|
|
}
|
|
|
|
common_scripts\utility::flag_wait( "intro_player_death_area" );
|
|
}
|
|
}
|
|
|
|
intro_vignette()
|
|
{
|
|
common_scripts\utility::flag_set( "no_push_zone" );
|
|
var_0 = getent( "scriptednode_player", "script_noteworthy" );
|
|
thread ally_intro_anims_and_logic( var_0 );
|
|
thread manage_exterior_hatch_lights();
|
|
common_scripts\utility::flag_set( "begin_dof_rack_fade" );
|
|
common_scripts\utility::flag_wait( "DOF_Rack_Complete" );
|
|
wait_for_player_movement_or_time();
|
|
common_scripts\utility::flag_set( "objective_return_to_station" );
|
|
common_scripts\utility::flag_wait( "ally_at_exterior_hatch" );
|
|
level notify( "stop_nag" );
|
|
var_0 notify( "stop_loop" );
|
|
self stopanimscripted();
|
|
waittillframeend;
|
|
}
|
|
|
|
intro_vin_ln_1( var_0 )
|
|
{
|
|
maps\_utility::smart_radio_dialogue( "odin_kyr_budyoushouldbe" );
|
|
}
|
|
|
|
intro_vin_ln_2( var_0 )
|
|
{
|
|
maps\_utility::smart_radio_dialogue( "odin_cub_iseeittoo" );
|
|
maps\_utility::music_play( "mus_odin_intro" );
|
|
}
|
|
|
|
intro_vin_ln_3( var_0 )
|
|
{
|
|
maps\_utility::smart_radio_dialogue( "odin_kyr_okbudcomeon" );
|
|
common_scripts\utility::flag_set( "intro_vin_lines_done" );
|
|
}
|
|
|
|
ally_intro_anims_and_logic( var_0 )
|
|
{
|
|
wait 2.5;
|
|
level notify( "intro_stop_ally_idle" );
|
|
common_scripts\utility::flag_set( "start_player_intro_anim" );
|
|
var_0 maps\_anim::anim_first_frame_solo( self, "odin_intro_kyra_satellite_idle" );
|
|
var_0 maps\_anim::anim_single_solo( self, "odin_intro_kyra_satellite_idle" );
|
|
level.ally rubber_band_kyra( "intro_exterior_scene", 320, var_0 );
|
|
common_scripts\utility::flag_clear( "no_push_zone" );
|
|
common_scripts\utility::flag_set( "ally_at_exterior_hatch" );
|
|
}
|
|
|
|
#using_animtree("generic_human");
|
|
|
|
rubber_band_kyra( var_0, var_1, var_2 )
|
|
{
|
|
level endon( "airlock_pressurized_and_open" );
|
|
var_2 thread maps\_anim::anim_single_solo( self, var_0 );
|
|
var_3 = 1.5;
|
|
var_4 = 1;
|
|
var_5 = 0;
|
|
level.random_nag_line = 99;
|
|
thread idle_nag_counter();
|
|
var_6 = getent( "intro_hatch_door_blocker_org", "targetname" );
|
|
|
|
for (;;)
|
|
{
|
|
var_7 = self getanimtime( %odin_intro_kyra );
|
|
var_8 = level.player.origin[0] - level.ally.origin[0];
|
|
|
|
if ( var_4 == 1 )
|
|
{
|
|
var_4 = 0;
|
|
|
|
while ( var_3 <= 2.5 )
|
|
{
|
|
var_7 = self getanimtime( %odin_intro_kyra );
|
|
var_3 = var_3 + 0.02;
|
|
self setanimtime( %odin_intro_kyra, var_7 );
|
|
maps\_anim::anim_set_rate_single( self, var_0, var_3 );
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
var_9 = distancesquared( level.player.origin, var_6.origin );
|
|
var_10 = distancesquared( level.ally.origin, var_6.origin );
|
|
|
|
if ( var_9 >= var_10 )
|
|
{
|
|
var_3 = maps\odin_util::factor_value_min_max( 0, 3, maps\odin_util::normalize_value( 0, var_1, var_8 ) );
|
|
var_3 = 3 - var_3;
|
|
}
|
|
else
|
|
{
|
|
var_3 = var_3 + 0.05;
|
|
|
|
if ( var_3 >= 3 )
|
|
var_3 = 3;
|
|
}
|
|
|
|
if ( var_7 >= 0.7 )
|
|
common_scripts\utility::flag_set( "open_exterior_hatch" );
|
|
|
|
if ( var_7 >= 1 )
|
|
return;
|
|
|
|
if ( var_3 <= 0.25 && var_5 == 0 )
|
|
{
|
|
var_11 = var_7;
|
|
common_scripts\utility::flag_set( "ally_should_nag" );
|
|
level.ally setanim( %odin_intro_kyra_wait_idle, 1, 0.5, 1 );
|
|
var_5 = 1;
|
|
}
|
|
else if ( var_3 > 0 )
|
|
{
|
|
level.ally notify( "stop_idle_loop" );
|
|
self setanim( %odin_intro_kyra, 1, 0.5 );
|
|
level.ally setanim( %odin_intro_kyra_wait_idle, 0, 0.5, 1 );
|
|
maps\_anim::anim_set_rate_single( self, var_0, var_3 );
|
|
var_5 = 0;
|
|
}
|
|
|
|
if ( var_3 >= 0.1 )
|
|
{
|
|
common_scripts\utility::flag_clear( "ally_should_nag" );
|
|
level notify( "ally_is_moving" );
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
player_intro_anim()
|
|
{
|
|
common_scripts\utility::flag_clear( "clear_to_tweak_player" );
|
|
var_0 = maps\_utility::spawn_anim_model( "player_rig" );
|
|
var_1 = getent( "scriptednode_player", "script_noteworthy" );
|
|
var_1 maps\_anim::anim_first_frame_solo( var_0, "intro_exterior_scene" );
|
|
var_2 = 0;
|
|
level.player playerlinktodelta( var_0, "tag_player", 1, var_2, var_2, var_2, var_2, 1 );
|
|
common_scripts\utility::flag_wait( "intro_fade_done" );
|
|
var_2 = 30;
|
|
level.player playerlinktodelta( var_0, "tag_player", 1, var_2, var_2, var_2, var_2, 1 );
|
|
common_scripts\utility::flag_wait( "start_player_intro_anim" );
|
|
wait 6.5;
|
|
thread maps\_utility::autosave_by_name( "Odin_intro_start" );
|
|
level.player thread maps\odin_audio::sfx_player_intro_movement();
|
|
var_1 maps\_anim::anim_single_solo( var_0, "intro_exterior_scene" );
|
|
level.player unlink();
|
|
common_scripts\utility::flag_set( "prologue_ready_for_thrusters" );
|
|
var_0 delete();
|
|
common_scripts\utility::flag_set( "enable_player_thruster_audio" );
|
|
common_scripts\utility::flag_set( "intro_show_introtext" );
|
|
thread prompt_player_controls();
|
|
common_scripts\utility::flag_set( "clear_to_tweak_player" );
|
|
thread tweak_off_axis_player();
|
|
}
|
|
|
|
wait_for_player_movement_or_time()
|
|
{
|
|
level endon( "airlock_pressurized_and_open" );
|
|
var_0 = level.player getorigin();
|
|
|
|
for (;;)
|
|
{
|
|
var_1 = level.player getorigin();
|
|
|
|
for ( var_2 = 0; var_2 < 3; var_2++ )
|
|
{
|
|
var_3 = var_0[var_2];
|
|
var_4 = var_1[var_2];
|
|
|
|
if ( var_3 < 0 )
|
|
var_3 = var_3 * -1;
|
|
|
|
if ( var_4 < 0 )
|
|
var_4 = var_4 * -1;
|
|
|
|
if ( var_3 - var_4 >= 1 || var_4 - var_3 <= -1 )
|
|
{
|
|
common_scripts\utility::flag_set( "player_is_leaving" );
|
|
return;
|
|
}
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
shuttle_docking()
|
|
{
|
|
var_0 = getent( "shuttle_stop_movement_vol", "targetname" );
|
|
var_1 = maps\_utility::spawn_anim_model( "shuttle" );
|
|
level.intro_ent_del[level.intro_ent_del.size] = var_1;
|
|
var_1 thread shuttle_fx();
|
|
var_2 = getent( "scriptednode_player", "script_noteworthy" );
|
|
var_3 = [];
|
|
var_3["shuttle"] = var_1;
|
|
var_2 maps\_anim::anim_first_frame_solo( var_1, "odin_intro_shuttle" );
|
|
var_0 linkto( var_1 );
|
|
maps\_anim::anim_set_rate( var_3, "odin_intro_shuttle", 5 );
|
|
wait 7;
|
|
thread maps\odin_audio::sfx_shuttle_passby( var_1 );
|
|
common_scripts\utility::flag_set( "shuttle_starts_moving" );
|
|
var_2 maps\_anim::anim_single_solo( var_1, "odin_intro_shuttle" );
|
|
}
|
|
|
|
shuttle_fx()
|
|
{
|
|
level.shuttle_thrust_brake = common_scripts\utility::spawn_tag_origin();
|
|
level.intro_ent_del[level.intro_ent_del.size] = level.shuttle_thrust_brake;
|
|
level.shuttle_thrust_brake.origin = self.origin + ( 720, 0, 30 );
|
|
level.shuttle_thrust_brake.angles = self.angles;
|
|
level.shuttle_thrust_brake linkto( self );
|
|
level.shuttle_thrust_fl = common_scripts\utility::spawn_tag_origin();
|
|
level.intro_ent_del[level.intro_ent_del.size] = level.shuttle_thrust_fl;
|
|
level.shuttle_thrust_fl.origin = self.origin + ( 620, 95, 5 );
|
|
level.shuttle_thrust_fl.angles = self.angles + ( 0, 90, 0 );
|
|
level.shuttle_thrust_fl linkto( self );
|
|
level.shuttle_thrust_fr = common_scripts\utility::spawn_tag_origin();
|
|
level.intro_ent_del[level.intro_ent_del.size] = level.shuttle_thrust_fr;
|
|
level.shuttle_thrust_fr.origin = self.origin + ( 620, -95, 5 );
|
|
level.shuttle_thrust_fr.angles = self.angles + ( 0, -90, 0 );
|
|
level.shuttle_thrust_fr linkto( self );
|
|
level.shuttle_thrust_rl = common_scripts\utility::spawn_tag_origin();
|
|
level.intro_ent_del[level.intro_ent_del.size] = level.shuttle_thrust_rl;
|
|
level.shuttle_thrust_rl.origin = self.origin + ( -57, 80, 10 );
|
|
level.shuttle_thrust_rl.angles = self.angles + ( 0, 90, 0 );
|
|
level.shuttle_thrust_rl linkto( self );
|
|
level.shuttle_thrust_rr = common_scripts\utility::spawn_tag_origin();
|
|
level.intro_ent_del[level.intro_ent_del.size] = level.shuttle_thrust_rr;
|
|
level.shuttle_thrust_rr.origin = self.origin + ( -57, -80, 10 );
|
|
level.shuttle_thrust_rr.angles = self.angles + ( 0, -90, 0 );
|
|
level.shuttle_thrust_rr linkto( self );
|
|
common_scripts\utility::flag_wait( "shuttle_starts_moving" );
|
|
wait 4.7;
|
|
maps\_utility::delaythread( 1, ::shuttle_thrust, "CW", 3 );
|
|
maps\_utility::delaythread( 1.5, ::shuttle_thrust, "brake", 30 );
|
|
maps\_utility::delaythread( 2, ::shuttle_thrust, "CW", 2 );
|
|
maps\_utility::delaythread( 3.5, ::shuttle_thrust, "brake", 30 );
|
|
maps\_utility::delaythread( 4.5, ::shuttle_thrust, "NOSECCW", 10 );
|
|
maps\_utility::delaythread( 5.0, ::shuttle_thrust, "brake", 20 );
|
|
maps\_utility::delaythread( 5.5, ::shuttle_thrust, "CW", 13 );
|
|
maps\_utility::delaythread( 6.5, ::shuttle_thrust, "CW", 3 );
|
|
maps\_utility::delaythread( 8.0, ::shuttle_thrust, "brake", 20 );
|
|
maps\_utility::delaythread( 8.5, ::shuttle_thrust, "NOSECCW", 10 );
|
|
maps\_utility::delaythread( 12.5, ::shuttle_thrust, "CW", 6 );
|
|
maps\_utility::delaythread( 13.0, ::shuttle_thrust, "NOSECCW", 13 );
|
|
maps\_utility::delaythread( 13.5, ::shuttle_thrust, "brake", 13 );
|
|
maps\_utility::delaythread( 14.5, ::shuttle_thrust, "CW", 3 );
|
|
maps\_utility::delaythread( 17.5, ::shuttle_thrust, "NOSECCW", 13 );
|
|
maps\_utility::delaythread( 20.0, ::shuttle_thrust, "NOSEUP", 3 );
|
|
maps\_utility::delaythread( 21.0, ::shuttle_thrust, "NOSECCW", 16 );
|
|
maps\_utility::delaythread( 21.5, ::shuttle_thrust, "brake", 15 );
|
|
maps\_utility::delaythread( 22.5, ::shuttle_thrust, "CW", 20 );
|
|
maps\_utility::delaythread( 22.5, ::shuttle_thrust, "NOSECW", 13 );
|
|
maps\_utility::delaythread( 23.5, ::shuttle_thrust, "CCW", 10 );
|
|
maps\_utility::delaythread( 24.5, ::shuttle_thrust, "brake", 13 );
|
|
maps\_utility::delaythread( 25.0, ::shuttle_thrust, "NOSECW", 6 );
|
|
maps\_utility::delaythread( 25.5, ::shuttle_thrust, "CCW", 10 );
|
|
maps\_utility::delaythread( 27.5, ::shuttle_thrust, "brake", 16 );
|
|
maps\_utility::delaythread( 29.5, ::shuttle_thrust, "CCW", 30 );
|
|
maps\_utility::delaythread( 30.0, ::shuttle_thrust, "NOSEUP", 23 );
|
|
maps\_utility::delaythread( 30.5, ::shuttle_thrust, "brake", 13 );
|
|
maps\_utility::delaythread( 31.0, ::shuttle_thrust, "CCW", 3 );
|
|
maps\_utility::delaythread( 31.5, ::shuttle_thrust, "brake", 1 );
|
|
maps\_utility::delaythread( 32.0, ::shuttle_thrust, "NOSECCW", 10 );
|
|
maps\_utility::delaythread( 33.0, ::shuttle_thrust, "NOSEDOWN", 13 );
|
|
maps\_utility::delaythread( 33.5, ::shuttle_thrust, "NOSECCW", 3 );
|
|
maps\_utility::delaythread( 34.5, ::shuttle_thrust, "UP", 23 );
|
|
maps\_utility::delaythread( 35.5, ::shuttle_thrust, "NOSECCW", 3 );
|
|
maps\_utility::delaythread( 36.5, ::shuttle_thrust, "UP", 13 );
|
|
maps\_utility::delaythread( 38.5, ::shuttle_thrust, "DOWN", 13 );
|
|
maps\_utility::delaythread( 39.0, ::shuttle_thrust, "NOSECCW", 13 );
|
|
maps\_utility::delaythread( 39.5, ::shuttle_thrust, "DOWN", 25 );
|
|
maps\_utility::delaythread( 40.0, ::shuttle_thrust, "DOWN", 13 );
|
|
maps\_utility::delaythread( 40.3, ::shuttle_thrust, "NOSECCW", 8 );
|
|
maps\_utility::delaythread( 40.5, ::shuttle_thrust, "DOWN", 5 );
|
|
maps\_utility::delaythread( 40.9, ::shuttle_thrust, "DOWN", 2 );
|
|
maps\_utility::delaythread( 41.3, ::shuttle_thrust, "DOWN", 2 );
|
|
maps\_utility::delaythread( 42.0, maps\odin_fx::fx_shuttle_dock );
|
|
wait 50;
|
|
level.shuttle_thrust_brake delete();
|
|
level.shuttle_thrust_fl delete();
|
|
level.shuttle_thrust_fr delete();
|
|
level.shuttle_thrust_rl delete();
|
|
level.shuttle_thrust_rr delete();
|
|
}
|
|
|
|
shuttle_thrust( var_0, var_1 )
|
|
{
|
|
var_2 = 0;
|
|
var_3 = 0;
|
|
var_4 = 0;
|
|
var_5 = 0;
|
|
|
|
if ( var_0 == "brake" )
|
|
{
|
|
for ( var_6 = 0; var_6 < var_1; var_6++ )
|
|
{
|
|
playfxontag( level._effect["vfx_shuttle_manuvr_thrust"], level.shuttle_thrust_brake, "tag_origin" );
|
|
wait 0.05;
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
if ( var_0 == "NOSECW" )
|
|
{
|
|
for ( var_6 = 0; var_6 < var_1; var_6++ )
|
|
{
|
|
playfxontag( level._effect["vfx_shuttle_manuvr_thrust"], level.shuttle_thrust_fl, "tag_origin" );
|
|
playfxontag( level._effect["vfx_shuttle_manuvr_thrust"], level.shuttle_thrust_rr, "tag_origin" );
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
if ( var_0 == "NOSECCW" )
|
|
{
|
|
for ( var_6 = 0; var_6 < var_1; var_6++ )
|
|
{
|
|
playfxontag( level._effect["vfx_shuttle_manuvr_thrust"], level.shuttle_thrust_fr, "tag_origin" );
|
|
playfxontag( level._effect["vfx_shuttle_manuvr_thrust"], level.shuttle_thrust_rl, "tag_origin" );
|
|
wait 0.05;
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
if ( var_0 == "CW" )
|
|
{
|
|
var_2 = 90;
|
|
var_3 = -90;
|
|
var_4 = 90;
|
|
var_5 = -90;
|
|
}
|
|
|
|
if ( var_0 == "CCW" )
|
|
{
|
|
var_2 = -90;
|
|
var_3 = 90;
|
|
var_4 = -90;
|
|
var_5 = 90;
|
|
}
|
|
|
|
if ( var_0 == "UP" )
|
|
{
|
|
var_2 = 90;
|
|
var_3 = 90;
|
|
var_4 = 90;
|
|
var_5 = 90;
|
|
}
|
|
|
|
if ( var_0 == "DOWN" )
|
|
{
|
|
var_2 = -90;
|
|
var_3 = -90;
|
|
var_4 = -90;
|
|
var_5 = -90;
|
|
}
|
|
|
|
if ( var_0 == "NOSEUP" )
|
|
{
|
|
var_2 = -90;
|
|
var_3 = -90;
|
|
var_4 = 90;
|
|
var_5 = 90;
|
|
}
|
|
|
|
if ( var_0 == "NOSEDOWN" )
|
|
{
|
|
var_2 = 90;
|
|
var_3 = 90;
|
|
var_4 = -90;
|
|
var_5 = -90;
|
|
}
|
|
|
|
var_7 = common_scripts\utility::spawn_tag_origin();
|
|
level.intro_ent_del[level.intro_ent_del.size] = var_7;
|
|
var_7.origin = level.shuttle_thrust_rl.origin;
|
|
var_7.angles = level.shuttle_thrust_rl.angles;
|
|
var_8 = common_scripts\utility::spawn_tag_origin();
|
|
level.intro_ent_del[level.intro_ent_del.size] = var_8;
|
|
var_8.origin = level.shuttle_thrust_rr.origin;
|
|
var_8.angles = level.shuttle_thrust_rr.angles;
|
|
var_9 = common_scripts\utility::spawn_tag_origin();
|
|
level.intro_ent_del[level.intro_ent_del.size] = var_9;
|
|
var_9.origin = level.shuttle_thrust_fl.origin;
|
|
var_9.angles = level.shuttle_thrust_fl.angles;
|
|
var_10 = common_scripts\utility::spawn_tag_origin();
|
|
level.intro_ent_del[level.intro_ent_del.size] = var_10;
|
|
var_10.origin = level.shuttle_thrust_fr.origin;
|
|
var_10.angles = level.shuttle_thrust_fr.angles;
|
|
var_7 linkto( level.shuttle_thrust_rl, "tag_origin", ( 0, 0, 0 ), ( var_2, 0, 0 ) );
|
|
var_8 linkto( level.shuttle_thrust_rr, "tag_origin", ( 0, 0, 0 ), ( var_3, 0, 0 ) );
|
|
var_9 linkto( level.shuttle_thrust_fl, "tag_origin", ( 0, 0, 0 ), ( var_4, 0, 0 ) );
|
|
var_10 linkto( level.shuttle_thrust_fr, "tag_origin", ( 0, 0, 0 ), ( var_5, 0, 0 ) );
|
|
|
|
for ( var_6 = 0; var_6 < var_1; var_6++ )
|
|
{
|
|
playfxontag( level._effect["vfx_shuttle_manuvr_thrust"], var_7, "tag_origin" );
|
|
playfxontag( level._effect["vfx_shuttle_manuvr_thrust"], var_8, "tag_origin" );
|
|
playfxontag( level._effect["vfx_shuttle_manuvr_thrust"], var_9, "tag_origin" );
|
|
playfxontag( level._effect["vfx_shuttle_manuvr_thrust"], var_10, "tag_origin" );
|
|
wait 0.05;
|
|
}
|
|
|
|
wait 1;
|
|
var_7 delete();
|
|
var_8 delete();
|
|
var_9 delete();
|
|
var_10 delete();
|
|
}
|
|
|
|
dof_rack()
|
|
{
|
|
if ( maps\_utility::is_gen4() )
|
|
maps\_art::dof_enable_script( 20, 112, 6, 1999, 200000, 0, 0 );
|
|
else
|
|
maps\_art::dof_enable_script( 12, 92, 4, 1999, 200000, 0, 0 );
|
|
|
|
common_scripts\utility::flag_wait( "begin_dof_rack_fade" );
|
|
wait 5;
|
|
maps\_art::dof_enable_script( 0, 0, 0, 0, 0, 0, 5 );
|
|
common_scripts\utility::flag_set( "DOF_Rack_Complete" );
|
|
}
|
|
|
|
prompt_player_controls()
|
|
{
|
|
level endon( "airlock_pressurized_and_open" );
|
|
thread track_odin_up();
|
|
var_0 = gettime();
|
|
var_1 = gettime() - 4000;
|
|
|
|
while ( !common_scripts\utility::flag( "player_can_rise" ) && var_1 < var_0 )
|
|
{
|
|
var_1 = gettime() - 4000;
|
|
|
|
if ( !common_scripts\utility::flag( "intro_player_in_bounds" ) || !common_scripts\utility::flag( "intro_player_death_area" ) )
|
|
{
|
|
common_scripts\utility::flag_set( "pause_bumper_hints" );
|
|
common_scripts\utility::flag_wait( "intro_player_in_bounds" );
|
|
var_0 = gettime();
|
|
var_1 = gettime() - 4000;
|
|
common_scripts\utility::flag_clear( "pause_bumper_hints" );
|
|
}
|
|
else if ( level.player usinggamepad() )
|
|
thread maps\_utility::display_hint( "intro_bumper_hint" );
|
|
else
|
|
thread maps\_utility::display_hint( "intro_bumper_hint_pc" );
|
|
|
|
wait 0.01;
|
|
}
|
|
|
|
common_scripts\utility::flag_set( "pause_bumper_hints" );
|
|
wait 1;
|
|
thread second_bumper_hint();
|
|
}
|
|
|
|
track_odin_up()
|
|
{
|
|
common_scripts\utility::flag_clear( "player_can_rise" );
|
|
level.player notifyonplayercommand( "pressed_up", "+frag" );
|
|
level.player notifyonplayercommand( "pressed_up", "+gostand" );
|
|
level.player waittill( "pressed_up" );
|
|
common_scripts\utility::flag_set( "player_can_rise" );
|
|
}
|
|
|
|
second_bumper_hint()
|
|
{
|
|
level endon( "airlock_pressurized_and_open" );
|
|
wait 1;
|
|
var_0 = gettime();
|
|
var_1 = gettime() - 4000;
|
|
thread track_odin_down();
|
|
common_scripts\utility::flag_clear( "pause_bumper_hints" );
|
|
|
|
while ( !common_scripts\utility::flag( "player_can_fall" ) && var_1 < var_0 )
|
|
{
|
|
var_1 = gettime() - 4000;
|
|
|
|
if ( !common_scripts\utility::flag( "intro_player_in_bounds" ) || !common_scripts\utility::flag( "intro_player_death_area" ) )
|
|
{
|
|
common_scripts\utility::flag_set( "pause_bumper_hints" );
|
|
common_scripts\utility::flag_wait( "intro_player_in_bounds" );
|
|
var_0 = gettime();
|
|
var_1 = gettime() - 4000;
|
|
common_scripts\utility::flag_clear( "pause_bumper_hints" );
|
|
}
|
|
else if ( level.player usinggamepad() )
|
|
thread maps\_utility::display_hint( "intro_bumper_hint2" );
|
|
else if ( maps\_utility::is_command_bound( "+crouch" ) || !maps\_utility::is_command_bound( "+stance" ) )
|
|
thread maps\_utility::display_hint( "intro_bumper_hint2_CROUCH" );
|
|
else
|
|
thread maps\_utility::display_hint( "intro_bumper_hint2_PC" );
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
common_scripts\utility::flag_set( "pause_bumper_hints" );
|
|
}
|
|
|
|
track_odin_down()
|
|
{
|
|
common_scripts\utility::flag_clear( "player_can_fall" );
|
|
level.player notifyonplayercommand( "pressed_down", "+smoke" );
|
|
level.player notifyonplayercommand( "pressed_down", "+toggleprone" );
|
|
level.player notifyonplayercommand( "pressed_down", "+stance" );
|
|
level.player waittill( "pressed_down" );
|
|
common_scripts\utility::flag_set( "player_can_fall" );
|
|
}
|
|
|
|
ally_nagging( var_0 )
|
|
{
|
|
level endon( "airlock_pressurized_and_open" );
|
|
level endon( "ally_is_moving" );
|
|
var_1 = [];
|
|
var_1[0] = "odin_kyr_budfollowmewe";
|
|
var_1[1] = "odin_kyr_altcomeonbudthisway";
|
|
var_2 = 0;
|
|
wait( var_0 );
|
|
|
|
if ( level.random_nag_line == var_2 )
|
|
var_2 = 1;
|
|
|
|
if ( common_scripts\utility::flag( "nags_should_overlap" ) && common_scripts\utility::flag( "ally_should_nag" ) )
|
|
maps\_utility::smart_radio_dialogue_overlap( var_1[var_2] );
|
|
else if ( common_scripts\utility::flag( "ally_should_nag" ) )
|
|
maps\_utility::smart_radio_dialogue( var_1[var_2] );
|
|
|
|
level.random_nag_line = var_2;
|
|
common_scripts\utility::flag_set( "astronaut_needs_help" );
|
|
common_scripts\utility::flag_set( "astronaut_needs_helps" );
|
|
}
|
|
|
|
idle_nag_counter()
|
|
{
|
|
level endon( "airlock_pressurized_and_open" );
|
|
|
|
for (;;)
|
|
{
|
|
common_scripts\utility::flag_wait( "ally_should_nag" );
|
|
var_0 = randomfloatrange( 8, 13 );
|
|
ally_nagging( var_0 );
|
|
wait 0.01;
|
|
}
|
|
}
|
|
|
|
open_exterior_hatch()
|
|
{
|
|
var_0 = getent( "scriptednode_pdoor", "targetname" );
|
|
var_1 = getent( "intro_airlock_door", "targetname" );
|
|
var_1.animname = "space_round_hatch";
|
|
var_1 maps\_utility::assign_animtree( "space_round_hatch" );
|
|
var_0 maps\_anim::anim_first_frame_solo( var_1, "odin_intro_exterior_door_open" );
|
|
var_2 = getent( "intro_hatch_door_blocker", "targetname" );
|
|
var_3 = getent( "intro_hatch_door_blocker_org", "targetname" );
|
|
var_3 linkto( var_1, "door_DM" );
|
|
var_2 linkto( var_3 );
|
|
common_scripts\utility::flag_wait( "open_exterior_hatch" );
|
|
thread maps\odin_ally::odin_invasion_scene();
|
|
var_0 maps\_anim::anim_single_solo( var_1, "odin_intro_exterior_door_open" );
|
|
|
|
for (;;)
|
|
{
|
|
if ( level.ally istouching( getent( "ally_airlock_touch", "targetname" ) ) && level.player istouching( getent( "ally_airlock_touch", "targetname" ) ) )
|
|
break;
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
common_scripts\utility::flag_set( "clear_helper_mark" );
|
|
thread maps\odin_audio::sfx_close_first_door( var_0 );
|
|
var_0 maps\_anim::anim_single_solo( var_1, "odin_infiltrate_exterior_door_close" );
|
|
common_scripts\utility::flag_set( "airlock_begin_pressurize" );
|
|
thread maps\odin_fx::god_rays_airlock();
|
|
thread maps\odin_ally::airlock_compression_door();
|
|
wait 3;
|
|
maps\_utility::stop_exploder( "intro_ambient_airlock_dust" );
|
|
common_scripts\utility::exploder( "intro_airlock_compression" );
|
|
thread maps\odin_fx::airlock_glass_fog();
|
|
wait 4.5;
|
|
maps\_utility::stop_exploder( "intro_airlock_compression" );
|
|
common_scripts\utility::exploder( "intro_airlock_complete" );
|
|
}
|
|
|
|
airlock_interior_hatch()
|
|
{
|
|
var_0 = getent( "scriptednode_squareDoor", "targetname" );
|
|
var_1 = maps\_utility::spawn_anim_model( "space_square_hatch" );
|
|
var_2 = spawn( "script_model", ( 0, 0, 0 ) );
|
|
var_2 setmodel( "tag_origin" );
|
|
var_2.origin = ( 3884, 47446, 48549 );
|
|
var_1 retargetscriptmodellighting( var_2 );
|
|
level.intro_ent_del[level.intro_ent_del.size] = var_1;
|
|
var_0 maps\_anim::anim_first_frame_solo( var_1, "odin_infiltrate_door_open" );
|
|
var_3 = getent( "intro_airlock_hatch_blocker", "targetname" );
|
|
var_4 = getent( "intro_airlock_hatch_blocker_org", "targetname" );
|
|
var_4 linkto( var_1, "tag_origin" );
|
|
var_3 linkto( var_4 );
|
|
common_scripts\utility::flag_wait( "open_airlock_door" );
|
|
thread maps\odin_audio::sfx_airlock_door();
|
|
common_scripts\utility::flag_set( "airlock_pressurized_and_open" );
|
|
var_0 maps\_anim::anim_single_solo( var_1, "odin_infiltrate_door_open" );
|
|
}
|
|
|
|
manage_exterior_hatch_lights()
|
|
{
|
|
level endon( "start_transition_to_youngblood" );
|
|
var_0 = getentarray( "intro_exterior_hatch_lights_on", "targetname" );
|
|
var_1 = getentarray( "intro_exterior_hatch_lights_beams", "targetname" );
|
|
var_0 = common_scripts\utility::array_combine( var_0, var_1 );
|
|
var_2 = getentarray( "intro_exterior_hatch_lights", "targetname" );
|
|
var_3 = getent( "intro_exterior_hatch_light", "targetname" );
|
|
|
|
foreach ( var_5 in var_0 )
|
|
var_5 hide();
|
|
|
|
common_scripts\utility::flag_wait( "exterior_hatch_opening" );
|
|
|
|
foreach ( var_5 in var_2 )
|
|
var_5 delete();
|
|
|
|
foreach ( var_5 in var_0 )
|
|
var_5 show();
|
|
|
|
var_3 setlightintensity( 1.1 );
|
|
common_scripts\utility::flag_wait( "player_approaching_infiltration" );
|
|
|
|
foreach ( var_5 in var_0 )
|
|
var_5 delete();
|
|
}
|
|
|
|
station_entrance_to_infiltration()
|
|
{
|
|
var_0 = getent( "anim_entrance_to_infiltrate", "script_noteworthy" );
|
|
common_scripts\utility::flag_set( "remove_temp_blocker" );
|
|
var_0 maps\_anim::anim_single_solo( self, "odin_infiltrate_kyra_entrance" );
|
|
var_0 thread maps\_anim::anim_loop_solo( self, "odin_infiltrate_kyra_midpoint_idle", "stop_loop" );
|
|
common_scripts\utility::flag_set( "kyra_is_in_station" );
|
|
common_scripts\utility::flag_wait( "player_entered_station" );
|
|
common_scripts\utility::flag_set( "open_airlock_door" );
|
|
var_0 notify( "stop_loop" );
|
|
}
|
|
|
|
mosley_airlock_ln_1( var_0 )
|
|
{
|
|
if ( common_scripts\utility::flag( "nags_should_overlap" ) )
|
|
maps\_utility::smart_radio_dialogue_overlap( "odin_ast1_pressurizingairlock" );
|
|
else
|
|
maps\_utility::smart_radio_dialogue( "odin_ast1_pressurizingairlock" );
|
|
}
|
|
|
|
mosley_airlock_ln_2( var_0 )
|
|
{
|
|
if ( common_scripts\utility::flag( "nags_should_overlap" ) )
|
|
maps\_utility::smart_radio_dialogue_overlap( "odin_ast1_reallylookingforwardto" );
|
|
else
|
|
maps\_utility::smart_radio_dialogue( "odin_ast1_reallylookingforwardto" );
|
|
|
|
common_scripts\utility::flag_set( "notetracked_lines_are_done" );
|
|
}
|
|
|
|
ally_movement()
|
|
{
|
|
level endon( "get_intro_moving" );
|
|
level endon( "airlock_pressurized_and_open" );
|
|
maps\_utility::delaythread( 10.0, common_scripts\utility::flag_set, "get_intro_moving" );
|
|
|
|
while ( level.player istouching( getent( "vol_player_at_satellite", "script_noteworthy" ) ) && !common_scripts\utility::flag( "get_intro_moving" ) )
|
|
wait 0.1;
|
|
}
|
|
|
|
tweak_off_axis_player()
|
|
{
|
|
level.rndpitchmax = 2;
|
|
level.rndrollhmax = 10;
|
|
level.desired_bob_pitch = 0;
|
|
level.desired_bob_roll = 0;
|
|
thread tweak_player_view_based_on_movement();
|
|
thread tweak_player_wall_push();
|
|
var_0 = common_scripts\utility::spawn_tag_origin();
|
|
level.view_ref_ent = var_0;
|
|
level.player playersetgroundreferenceent( level.view_ref_ent );
|
|
level.view_ref_base_rotator = common_scripts\utility::spawn_tag_origin();
|
|
level.view_ref_base_rotator.angles = level.view_ref_ent.angles;
|
|
|
|
if ( level.start_point == "odin_intro" )
|
|
{
|
|
common_scripts\utility::flag_clear( "clear_to_tweak_player" );
|
|
common_scripts\utility::flag_wait( "intro_fade_done" );
|
|
common_scripts\utility::flag_set( "clear_to_tweak_player" );
|
|
}
|
|
|
|
thread rotation_reset( level.view_ref_ent );
|
|
|
|
while ( !common_scripts\utility::flag( "stop_tweaking_player" ) )
|
|
{
|
|
if ( common_scripts\utility::flag( "clear_to_tweak_player" ) && !common_scripts\utility::flag( "clear_to_tweak_player_forced" ) && !common_scripts\utility::flag( "wall_push_tweak_player" ) )
|
|
{
|
|
var_1 = randomfloatrange( 0 - level.rndpitchmax, level.rndpitchmax );
|
|
var_2 = randomfloatrange( 0 - level.rndrollhmax, level.rndrollhmax );
|
|
var_3 = randomfloatrange( 10, 30 );
|
|
var_4 = var_3 * 0.25;
|
|
level.view_ref_base_rotator rotateto( ( var_1, 0, var_2 ), var_3, var_4, var_4 );
|
|
level.view_ref_base_rotator waittill( "rotatedone" );
|
|
}
|
|
else
|
|
wait 1.0;
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
level.view_ref_base_rotator notify( "rotatedone" );
|
|
level.view_ref_ent notify( "rotatedone" );
|
|
level.view_ref_ent rotateto( ( 0, 0, 0 ), 2, 0, 0 );
|
|
level.view_ref_base_rotator rotateto( ( 0, 0, 0 ), 2, 0, 0 );
|
|
wait 2;
|
|
level.player playersetgroundreferenceent( undefined );
|
|
level.view_ref_ent delete();
|
|
level.view_ref_base_rotator delete();
|
|
level notify( "tweaking_is_done" );
|
|
}
|
|
|
|
rotation_reset( var_0 )
|
|
{
|
|
wait 1;
|
|
level endon( "tweaking_is_done" );
|
|
|
|
for (;;)
|
|
{
|
|
common_scripts\utility::flag_waitopen( "clear_to_tweak_player" );
|
|
level.view_ref_base_rotator notify( "rotatedone" );
|
|
level.view_ref_ent notify( "rotatedone" );
|
|
level.view_ref_ent rotateto( ( 0, 0, 0 ), 2, 0, 0 );
|
|
level.view_ref_base_rotator rotateto( ( 0, 0, 0 ), 2, 0, 0 );
|
|
wait 2;
|
|
|
|
while ( !common_scripts\utility::flag( "clear_to_tweak_player" ) )
|
|
{
|
|
level.view_ref_base_rotator notify( "rotatedone" );
|
|
level.view_ref_ent notify( "rotatedone" );
|
|
level.view_ref_ent rotateto( ( 0, 0, 0 ), 2, 0, 0 );
|
|
level.view_ref_base_rotator rotateto( ( 0, 0, 0 ), 2, 0, 0 );
|
|
wait 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
tweak_player_view_based_on_movement()
|
|
{
|
|
level endon( "tweaking_is_done" );
|
|
|
|
if ( level.start_point == "odin_intro" )
|
|
wait 1;
|
|
|
|
level.view_ref_movement_rotator = common_scripts\utility::spawn_tag_origin();
|
|
var_0 = 1;
|
|
var_1 = "x";
|
|
var_2 = 0;
|
|
|
|
while ( !common_scripts\utility::flag( "stop_tweaking_player" ) )
|
|
{
|
|
if ( !common_scripts\utility::flag( "wall_push_tweak_player" ) && common_scripts\utility::flag( "clear_to_tweak_player" ) )
|
|
{
|
|
level.player playersetgroundreferenceent( level.view_ref_ent );
|
|
|
|
if ( isdefined( level.bob_axis ) )
|
|
{
|
|
if ( level.bob_axis == var_1 && level.bob_value == var_2 )
|
|
{
|
|
var_0 = var_0 + 0.5;
|
|
|
|
if ( var_0 > 3 )
|
|
var_0 = 3;
|
|
}
|
|
else
|
|
var_0 = 1.0;
|
|
|
|
if ( level.bob_axis == "x" )
|
|
{
|
|
if ( level.bob_value > 0 )
|
|
{
|
|
level.desired_bob_pitch = 0 - level.bob_value * var_0 * 0.5 * cos( level.player.angles[1] );
|
|
level.desired_bob_roll = 0 - level.bob_value * var_0 * 0.5 * sin( level.player.angles[1] );
|
|
}
|
|
else
|
|
{
|
|
level.desired_bob_pitch = 0 - level.bob_value * var_0 * 0.5 * cos( level.player.angles[1] );
|
|
level.desired_bob_roll = 0 - level.bob_value * var_0 * 0.5 * sin( level.player.angles[1] );
|
|
}
|
|
}
|
|
|
|
if ( level.bob_axis == "y" )
|
|
{
|
|
if ( level.bob_value > 0 )
|
|
{
|
|
level.desired_bob_pitch = 0 - level.bob_value * var_0 * sin( level.player.angles[1] );
|
|
level.desired_bob_roll = 0 - level.bob_value * var_0 * cos( level.player.angles[1] );
|
|
}
|
|
else
|
|
{
|
|
level.desired_bob_pitch = 0 - level.bob_value * var_0 * sin( level.player.angles[1] );
|
|
level.desired_bob_roll = 0 - level.bob_value * var_0 * cos( level.player.angles[1] );
|
|
}
|
|
}
|
|
|
|
if ( level.bob_axis == "z" )
|
|
{
|
|
if ( level.bob_value > 0 )
|
|
{
|
|
level.desired_bob_pitch = level.bob_value * var_0 * cos( level.player.angles[1] );
|
|
level.desired_bob_roll = 0 - level.bob_value * var_0 * sin( level.player.angles[1] );
|
|
}
|
|
else
|
|
{
|
|
level.desired_bob_pitch = level.bob_value * var_0 * cos( level.player.angles[1] );
|
|
level.desired_bob_roll = 0 - level.bob_value * var_0 * sin( level.player.angles[1] );
|
|
}
|
|
}
|
|
|
|
var_1 = level.bob_axis;
|
|
var_2 = level.bob_value;
|
|
|
|
if ( level.bob_value == 0 )
|
|
level.bob_axis = undefined;
|
|
|
|
var_3 = randomfloatrange( 1.5, 2.2 );
|
|
var_4 = level.view_ref_base_rotator.angles[0] + level.desired_bob_pitch;
|
|
var_5 = level.view_ref_base_rotator.angles[2] + level.desired_bob_roll;
|
|
level.view_ref_ent rotateto( ( var_4, 0, var_5 ), var_3, var_3 * 0.2, var_3 * 0.8 );
|
|
level.view_ref_ent waittill( "rotatedone" );
|
|
}
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
level.view_ref_movement_rotator delete();
|
|
}
|
|
|
|
tweak_player_view_do_rotate()
|
|
{
|
|
var_0 = level.view_ref_base_rotator.angles[0] + level.desired_bob_pitch;
|
|
var_1 = level.view_ref_base_rotator.angles[2] + level.desired_bob_roll;
|
|
level.view_ref_ent rotateto( ( var_0, 0, var_1 ), 1.6, 0.8, 0.8 );
|
|
level.view_ref_ent waittill( "rotatedone" );
|
|
}
|
|
|
|
tweak_off_translation_player()
|
|
{
|
|
level endon( "start_transition_to_youngblood" );
|
|
var_0 = 0;
|
|
var_1 = 0;
|
|
var_2 = 0;
|
|
|
|
for (;;)
|
|
{
|
|
var_3 = randomint( 3 );
|
|
|
|
if ( var_3 == 0 )
|
|
{
|
|
var_4 = randomfloatrange( 10, 30 );
|
|
var_5 = randomfloatrange( -300, 300 );
|
|
var_6 = randomfloatrange( -300, 300 );
|
|
var_7 = randomfloatrange( -300, 300 );
|
|
}
|
|
else
|
|
{
|
|
var_4 = randomfloatrange( 5, 10 );
|
|
var_5 = 0;
|
|
var_6 = 0;
|
|
var_7 = 0;
|
|
}
|
|
|
|
var_8 = ( var_5 - var_0 ) * ( 1 / var_4 );
|
|
var_9 = ( var_6 - var_1 ) * ( 1 / var_4 );
|
|
var_10 = ( var_7 - var_2 ) * ( 1 / var_4 );
|
|
|
|
while ( var_4 > 0 )
|
|
{
|
|
if ( common_scripts\utility::flag( "clear_to_tweak_player" ) && !common_scripts\utility::flag( "clear_to_tweak_player_forced" ) )
|
|
{
|
|
var_0 = var_0 + var_8;
|
|
var_1 = var_1 + var_9;
|
|
var_2 = var_2 + var_10;
|
|
setsaveddvar( "player_swimWaterCurrent", ( var_0, var_1, var_2 ) );
|
|
var_4 = var_4 - 1;
|
|
wait 0.05;
|
|
continue;
|
|
}
|
|
|
|
wait 1.0;
|
|
}
|
|
|
|
if ( var_3 == 0 )
|
|
{
|
|
wait( randomfloatrange( 0.5, 1 ) );
|
|
continue;
|
|
}
|
|
|
|
wait( randomfloatrange( 0.5, 1 ) );
|
|
}
|
|
}
|
|
|
|
tweak_player_wall_push()
|
|
{
|
|
level endon( "start_transition_to_youngblood" );
|
|
|
|
for (;;)
|
|
{
|
|
common_scripts\utility::flag_wait( "wall_push_tweak_player" );
|
|
|
|
if ( common_scripts\utility::flag( "clear_to_tweak_player" ) )
|
|
{
|
|
wait 0.8;
|
|
|
|
if ( level.player.angles[1] < -120 || level.player.angles[1] > 120 )
|
|
{
|
|
var_0 = randomfloatrange( -2, 2 );
|
|
|
|
if ( level.view_ref_ent.angles[2] > 0 )
|
|
var_1 = randomfloatrange( -25, -5 );
|
|
else
|
|
var_1 = randomfloatrange( 5, 25 );
|
|
}
|
|
else
|
|
{
|
|
var_1 = randomfloatrange( -2, 2 );
|
|
|
|
if ( level.view_ref_ent.angles[0] > 0 )
|
|
var_0 = randomfloatrange( -25, -5 );
|
|
else
|
|
var_0 = randomfloatrange( 5, 25 );
|
|
}
|
|
|
|
var_2 = randomfloatrange( 2.3, 3.8 );
|
|
level.view_ref_ent rotateto( ( var_0, 0, var_1 ), var_2, 0, var_2 * 0.8 );
|
|
wait( var_2 );
|
|
common_scripts\utility::flag_clear( "wall_push_tweak_player" );
|
|
level.view_ref_base_rotator.angles = level.view_ref_ent.angles;
|
|
continue;
|
|
}
|
|
|
|
wait 1;
|
|
}
|
|
}
|
|
|
|
odin_intro_screen()
|
|
{
|
|
var_0 = 2;
|
|
var_1 = 4;
|
|
var_2 = 5.5;
|
|
var_3 = 6;
|
|
|
|
if ( !isdefined( level.prologue ) || level.prologue == 0 )
|
|
var_0 = 0;
|
|
|
|
thread introscreen_generic_fade_in( "white", var_2, var_1, var_0 );
|
|
wait 2.75;
|
|
var_4 = [];
|
|
var_4[0] = &"ODIN_INTROSCREEN_LINE_0";
|
|
thread maps\_utility::stylized_center_text( var_4, var_3 );
|
|
thread delayed_intro();
|
|
wait 4.0;
|
|
common_scripts\utility::flag_set( "intro_fade_done" );
|
|
}
|
|
|
|
introscreen_generic_fade_in( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 1.5;
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
maps\_hud_util::start_overlay( var_0 );
|
|
else
|
|
maps\_hud_util::fade_out( var_3, var_0 );
|
|
|
|
wait( var_1 );
|
|
maps\_hud_util::fade_in( var_2, var_0 );
|
|
wait( var_2 );
|
|
setsaveddvar( "com_cinematicEndInWhite", 0 );
|
|
}
|
|
|
|
delayed_intro()
|
|
{
|
|
common_scripts\utility::flag_wait( "intro_show_introtext" );
|
|
wait 4.0;
|
|
level.introscreen = spawnstruct();
|
|
level.introscreen.completed_delay = 3;
|
|
level.introscreen.fade_out_time = 1.5;
|
|
level.introscreen.fade_in_time = undefined;
|
|
level.introscreen.lines = [ &"ODIN_INTROSCREEN_LINE_3", &"ODIN_INTROSCREEN_LINE_2", &"ODIN_INTROSCREEN_LINE_1" ];
|
|
maps\_introscreen::introscreen( 1, undefined );
|
|
}
|
|
|
|
fifteen_minutes_earlier_feed_lines( var_0, var_1 )
|
|
{
|
|
var_2 = getarraykeys( var_0 );
|
|
|
|
for ( var_3 = 0; var_3 < var_2.size; var_3++ )
|
|
{
|
|
var_4 = var_2[var_3];
|
|
var_5 = var_3 * var_1 + 1;
|
|
maps\_utility::delaythread( var_5, ::centerlinethread, var_0[var_4], var_0.size - var_3 - 1, var_1, var_4 );
|
|
}
|
|
}
|
|
|
|
centerlinethread( var_0, var_1, var_2, var_3 )
|
|
{
|
|
level notify( "new_introscreen_element" );
|
|
|
|
if ( !isdefined( level.intro_offset ) )
|
|
level.intro_offset = 0;
|
|
else
|
|
level.intro_offset++;
|
|
|
|
var_4 = newhudelem();
|
|
var_4.x = 0;
|
|
var_4.y = 0;
|
|
var_4.alignx = "center";
|
|
var_4.aligny = "middle";
|
|
var_4.horzalign = "center";
|
|
var_4.vertalign = "middle_adjustable";
|
|
var_4.sort = 1;
|
|
var_4.foreground = 1;
|
|
var_4 settext( var_0 );
|
|
var_4.alpha = 0;
|
|
var_4 fadeovertime( 0.2 );
|
|
var_4.alpha = 1;
|
|
var_4.hidewheninmenu = 1;
|
|
var_4.fontscale = 2.4;
|
|
var_4.color = ( 1, 1, 1 );
|
|
var_4.font = "objective";
|
|
var_4.glowcolor = ( 0, 0, 0 );
|
|
var_4.glowalpha = 1;
|
|
var_5 = int( var_2 * 1000 );
|
|
var_4 setpulsefx( 30, var_5, 700 );
|
|
thread maps\_introscreen::hudelem_destroy( var_4 );
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
return;
|
|
|
|
if ( !isstring( var_3 ) )
|
|
return;
|
|
|
|
if ( var_3 != "date" )
|
|
return;
|
|
}
|
|
|
|
intro_cleanup( var_0 )
|
|
{
|
|
if ( var_0 == 0 )
|
|
{
|
|
common_scripts\utility::flag_wait( "gun_struggle_commence_trig" );
|
|
|
|
if ( isdefined( level.intro_ent_del ) )
|
|
{
|
|
foreach ( var_2 in level.intro_ent_del )
|
|
{
|
|
if ( isdefined( var_2 ) )
|
|
var_2 delete();
|
|
}
|
|
}
|
|
}
|
|
|
|
maps\odin_util::safe_delete_noteworthy( "intro_trig_to_clean" );
|
|
maps\odin_util::safe_delete_noteworthy( "intro_ent_to_clean" );
|
|
var_4 = getentarray( "intro_tar_to_clean", "targetname" );
|
|
|
|
foreach ( var_6 in var_4 )
|
|
{
|
|
if ( isdefined( var_6 ) )
|
|
var_6 delete();
|
|
}
|
|
|
|
var_8 = getentarray( "intro_earth", "targetname" );
|
|
|
|
foreach ( var_10 in var_8 )
|
|
var_10 delete();
|
|
}
|