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

1461 lines
39 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
move_player_to_start_point( var_0 )
{
var_1 = getent( var_0, "targetname" );
level.player setorigin( var_1.origin );
var_2 = undefined;
if ( isdefined( var_1.target ) )
var_2 = getent( var_1.target, "targetname" );
if ( isdefined( var_2 ) )
level.player setplayerangles( vectortoangles( var_2.origin - var_1.origin ) );
else
level.player setplayerangles( var_1.angles );
}
actor_teleport( var_0, var_1 )
{
var_2 = getent( var_1, "targetname" );
if ( isplayer( var_0 ) )
{
var_0 setplayerangles( var_2.angles );
var_0 setorigin( var_2.origin );
}
else if ( isai( var_0 ) )
var_0 forceteleport( var_2.origin, var_2.angles );
}
safe_trigger_by_targetname( var_0 )
{
var_1 = getent( var_0, "targetname" );
if ( !isdefined( var_1 ) )
return;
var_1 notify( "trigger" );
if ( var_1.classname == "trigger_once" || isdefined( var_1.spawnflags ) && var_1.spawnflags & 64 )
var_1 delete();
}
safe_trigger_by_noteworthy( var_0 )
{
var_1 = getent( var_0, "script_noteworthy" );
if ( !isdefined( var_1 ) )
return;
var_1 notify( "trigger" );
if ( var_1.classname == "trigger_once" || isdefined( var_1.spawnflags ) && var_1.spawnflags & 64 )
var_1 delete();
}
teleport_squad( var_0, var_1 )
{
if ( !isdefined( var_1 ) )
var_2 = [ "ALLY_ALPHA", "ALLY_BRAVO", "ALLY_CHARLIE", "ALLY_DELTA", "ALLY_ECHO" ];
else
var_2 = [ "ALLY_ALPHA", "ALLY_BRAVO", "ALLY_CHARLIE" ];
for ( var_3 = 0; var_3 < var_2.size; var_3++ )
{
actor_teleport( level.squad[var_2[var_3]], var_2[var_3] + "_" + var_0 + "_teleport" );
var_4 = getnode( var_2[var_3] + "_" + var_0 + "_node", "targetname" );
level.squad[var_2[var_3]] setgoalnode( var_4 );
}
}
teleport_squadmember( var_0, var_1 )
{
actor_teleport( level.squad[var_1], var_1 + "_" + var_0 + "_teleport" );
var_2 = getnode( var_1 + "_" + var_0 + "_node", "targetname" );
level.squad[var_1] setgoalnode( var_2 );
}
safe_delete_targetname( var_0 )
{
safe_delete_array( getentarray( var_0, "targetname" ) );
}
safe_delete_noteworthy( var_0 )
{
safe_delete_array( getentarray( var_0, "script_noteworthy" ) );
}
safe_delete( var_0 )
{
if ( isdefined( var_0 ) )
var_0 delete();
else
{
}
}
safe_delete_array( var_0 )
{
foreach ( var_2 in var_0 )
safe_delete( var_2 );
}
add_debug_dialogue( var_0, var_1, var_2 )
{
if ( getdvarint( "loc_warnings", 0 ) )
return;
if ( !isdefined( level.debug_dialogue_huds ) )
level.debug_dialogue_huds = [];
var_3 = "^3";
if ( isdefined( var_2 ) )
{
switch ( var_2 )
{
case "red":
case "r":
var_3 = "^1";
break;
case "green":
case "g":
var_3 = "^2";
break;
case "yellow":
case "y":
var_3 = "^3";
break;
case "blue":
case "b":
var_3 = "^4";
break;
case "cyan":
case "c":
var_3 = "^5";
break;
case "purple":
case "p":
var_3 = "^6";
break;
case "white":
case "w":
var_3 = "^7";
break;
case "black":
case "bl":
var_3 = "^8";
break;
}
}
var_4 = maps\_hud_util::createfontstring( "default", 1.5 );
var_4.location = 0;
var_4.alignx = "left";
var_4.aligny = "top";
var_4.foreground = 1;
var_4.sort = 20;
var_4.alpha = 0;
var_4 fadeovertime( 0.5 );
var_4.alpha = 1;
var_4.x = 40;
var_4.y = 325;
var_4.label = " " + var_3 + "< " + var_0 + " > ^7" + var_1;
var_4.color = ( 1, 1, 1 );
level.debug_dialogue_huds = common_scripts\utility::array_insert( level.debug_dialogue_huds, var_4, 0 );
foreach ( var_7, var_6 in level.debug_dialogue_huds )
{
if ( var_7 == 0 )
continue;
if ( isdefined( var_6 ) )
var_6.y = 325 - var_7 * 18;
}
wait 2;
var_8 = 40;
var_4 fadeovertime( 3 );
var_4.alpha = 0;
for ( var_7 = 0; var_7 < var_8; var_7++ )
{
var_4.color = ( 1, 1, 0 / ( var_8 - var_7 ) );
wait 0.05;
}
wait 4;
var_4 destroy();
common_scripts\utility::array_removeundefined( level.debug_dialogue_huds );
}
teleport_to_target()
{
var_0 = common_scripts\utility::get_target_ent();
if ( !isdefined( var_0.angles ) )
var_0.angles = self.angles;
self forceteleport( var_0.origin, var_0.angles );
}
spawn_odin_actor_array( var_0, var_1 )
{
var_2 = getentarray( var_0, "targetname" );
var_3 = [];
foreach ( var_5 in var_2 )
var_3[var_3.size] = var_5 spawn_odin_actor_internal( var_1 );
return var_3;
}
spawn_odin_actor_single( var_0, var_1 )
{
var_2 = getent( var_0, "targetname" );
if ( !isdefined( var_2 ) )
return undefined;
var_3 = var_2 spawn_odin_actor_internal( var_1 );
return var_3;
}
spawn_odin_actor_internal( var_0, var_1 )
{
if ( !isdefined( self ) )
return undefined;
if ( !isdefined( var_1 ) )
var_1 = 0;
var_2 = maps\_utility::spawn_ai( var_1 );
if ( maps\_utility::spawn_failed( var_2 ) )
return;
var_2 thread maps\_space_ai::enable_space();
var_3 = common_scripts\utility::get_target_ent();
if ( isdefined( var_3 ) )
{
if ( !isdefined( var_3.angles ) )
var_3.angles = self.angles;
var_2 forceteleport( var_3.origin, var_3.angles );
}
if ( isdefined( var_3.target ) )
{
var_2.default_node = getnode( var_3.target, "targetname" );
if ( isdefined( var_2.default_node ) )
{
var_2 setgoalnode( var_2.default_node );
var_2.goalradius = 4;
}
}
return var_2;
}
add_light_to_actor( var_0 )
{
var_1 = common_scripts\utility::spawn_tag_origin();
var_2 = self gettagorigin( "tag_eye" );
var_1.origin = var_2 + ( -9, 0, 2 );
var_1 linkto( self, "tag_eye" );
var_3 = common_scripts\utility::getfx( "light_blue_steady_FX" );
if ( var_0 == "ally" )
var_3 = common_scripts\utility::getfx( "light_blue_steady_FX" );
if ( var_0 == "axis" )
var_3 = common_scripts\utility::getfx( "amber_light_45_beacon_nolight_glow" );
while ( isalive( self ) )
{
playfxontag( var_3, var_1, "tag_origin" );
wait 0.2;
stopfxontag( var_3, var_1, "tag_origin" );
wait 0.8;
}
var_1 delete();
}
set_mission_view_tweaks()
{
setsaveddvar( "cg_fov", level.odin_fov );
if ( !common_scripts\utility::flag( "spin_start_exterior_dialogue" ) )
maps\_utility::lerp_fov_overtime( 0.05, level.odin_fov );
common_scripts\utility::flag_wait( "ally_gun_struggle_FOV_change" );
maps\_utility::lerp_fov_overtime( 1, level.odin_fov + 10 );
common_scripts\utility::flag_wait( "saved_ally" );
maps\_utility::lerp_fov_overtime( 3, level.odin_fov );
common_scripts\utility::flag_wait( "start_transition_to_youngblood" );
maps\_utility::lerp_fov_overtime( 5, 65 );
}
player_physics_pulse()
{
level endon( "kickoff_player_finale" );
if ( isdefined( level.player.physics_pulse_on ) && level.player.physics_pulse_on )
return;
level.player.physics_pulse_on = 1;
var_0 = 0.15;
var_1 = 64;
for (;;)
{
if ( common_scripts\utility::flag( "player_spin_decomp_anim_done" ) )
{
var_0 = 0.2;
var_1 = 96;
}
physicsexplosionsphere( level.player.origin, var_1, 1, var_0 );
wait 0.05;
}
}
ally_physics_pulse()
{
level endon( "kickoff_player_finale" );
if ( isdefined( level.ally.physics_pulse_on ) && level.ally.physics_pulse_on )
return;
level.ally.physics_pulse_on = 1;
for (;;)
{
physicsexplosionsphere( level.ally.origin, 45, 32, 0.15 );
wait 0.05;
}
}
npc_physics_pulse()
{
self endon( "death" );
if ( isdefined( self.physics_pulse_on ) && self.physics_pulse_on )
return;
self.physics_pulse_on = 1;
for (;;)
{
physicsexplosionsphere( self.origin, 45, 32, 0.15 );
wait 0.05;
}
}
floating_corpses( var_0, var_1 )
{
var_2 = spawn_odin_actor_array( var_0, 1 );
foreach ( var_4 in var_2 )
{
var_4.no_ai = 1;
var_4.ignoreall = 1;
var_4.ignoreme = 1;
var_4.dontevershoot = 1;
var_4.team = "neutral";
var_4.diequietly = 1;
var_4.no_pain_sound = 1;
var_4.nocorpsedelete = 1;
var_4.forceragdollimmediate = 1;
var_4.skipdeathanim = 1;
}
wait 1.0;
if ( isdefined( var_1 ) )
common_scripts\utility::flag_wait( var_1 );
foreach ( var_4 in var_2 )
var_4 kill();
}
load_transient( var_0 )
{
unloadalltransients();
loadtransient( var_0 );
}
sync_transients()
{
while ( !synctransients() )
wait 0.05;
}
moving_objects_handler( var_0 )
{
var_1 = undefined;
var_2 = undefined;
var_3 = undefined;
var_4 = getentarray( var_0, "script_noteworthy" );
foreach ( var_6 in var_4 )
{
if ( var_6.script_parameters == "moving_object_origin" )
var_3 = var_6;
}
foreach ( var_6 in var_4 )
{
if ( var_6.script_parameters == "moving_object" )
var_6 linkto( var_3 );
if ( var_6.script_parameters == "path_connector" )
{
var_6 linkto( var_3 );
var_3.connector = var_6;
}
if ( var_6.script_parameters == "path_disconnector" )
{
var_6 linkto( var_3 );
var_3.disconnector = var_6;
}
}
thread path_disconnector( var_3.disconnector, var_3.connector );
return var_3;
}
path_disconnector( var_0, var_1 )
{
self endon( "death" );
self endon( "stop_scripts" );
var_2 = getentarray( "moving_platform_path_trigger", "targetname" );
var_3 = getentarray( "path_connector", "script_noteworthy" );
var_4 = getentarray( "path_disconnector", "script_noteworthy" );
for (;;)
{
var_0 solid();
var_1 solid();
var_0 disconnectpaths();
var_1 connectpaths();
var_0 notsolid();
var_1 notsolid();
wait 0.2;
}
}
create_sliding_space_door( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
{
var_7 = getentarray( var_0, "script_noteworthy" );
if ( !isdefined( var_7 ) || var_7.size == 0 )
iprintln( "create_sliding_space_door failed. No parts" );
else
{
var_8 = undefined;
var_9 = undefined;
var_10 = undefined;
foreach ( var_12 in var_7 )
{
if ( var_12.classname == "script_origin" )
{
if ( isdefined( var_12.targetname ) )
{
if ( var_12.targetname == "door_closed_node" )
{
var_8 = var_12;
continue;
}
if ( var_12.targetname == "door_node" )
{
var_9 = var_12;
continue;
}
if ( var_12.targetname == "door_open_node" )
var_10 = var_12;
}
}
}
var_8.door = var_9;
var_8.door_open = var_10;
var_8.time = var_1;
var_8.accel = var_2;
var_8.delay = var_3;
var_8.automatic = var_4;
var_8.lock_notify = var_5;
var_8.unlock_flag = var_6;
var_8.door_name = var_0;
var_14 = getentarray( var_8.door.target, "targetname" );
var_8.parts = var_14;
foreach ( var_12 in var_14 )
var_12 linkto( var_8.door );
var_8.trigger = spawn( "trigger_radius", var_8.origin, 3, var_8.radius, 64 );
if ( isdefined( var_4 ) && var_4 == 1 )
{
var_8.trigger common_scripts\utility::trigger_on();
var_8 thread automatic_sliding_door_logic();
}
else
var_8 thread sliding_door_logic();
var_8 thread sliding_door_lock();
}
}
automatic_sliding_door_logic()
{
self endon( "death" );
level endon( self.lock_notify );
self.state = "open";
self.trigger.triggered = 0;
self.trigger thread automatic_sliding_door_detector( self.lock_notify );
for (;;)
{
if ( self.trigger.triggered )
{
if ( isdefined( self.unlock_flag ) && !common_scripts\utility::flag( self.unlock_flag ) )
{
wait 0.5;
continue;
}
if ( self.state == "closing" || self.state == "closed" )
{
self.state = "open";
if ( self.delay > 0 )
wait( self.delay );
self.door moveto( self.door_open.origin, self.time, self.accel );
thread maps\odin_audio::sfx_interior_door_open( self );
}
}
else if ( self.state == "opening" || self.state == "open" )
{
self.state = "closed";
if ( self.delay > 0 )
wait( self.delay );
self.door moveto( self.origin, self.time, self.accel );
thread maps\odin_audio::sfx_interior_door_close( self );
}
wait 0.1;
}
}
automatic_sliding_door_detector( var_0 )
{
self endon( "death" );
level endon( var_0 );
for (;;)
{
self.triggered = 0;
self waittill( "trigger" );
self.triggered = 1;
wait 0.5;
}
}
sliding_door_logic()
{
self endon( "death" );
level endon( self.lock_notify );
if ( isdefined( self.unlock_flag ) && !common_scripts\utility::flag( self.unlock_flag ) )
{
self.state = "closed";
self.door moveto( self.origin, 0.1, self.accel );
common_scripts\utility::flag_wait( self.unlock_flag );
if ( self.state == "closing" || self.state == "closed" )
{
self.state = "open";
if ( self.delay > 0 )
wait( self.delay );
self.door moveto( self.door_open.origin, self.time, self.accel );
if ( self.door_name == "post_z_door" || self.door_name == "escape_door_blocker" )
thread maps\odin_audio::sfx_escape_door_open();
else if ( self.door_name == "spin_decomp_door" )
thread maps\odin_audio::sfx_decomp_door();
else
thread maps\odin_audio::sfx_interior_door_open( self );
}
}
}
sliding_door_lock()
{
level endon( "start_transition_to_youngblood" );
self endon( "death" );
level waittill( self.lock_notify );
self.state = "closed";
if ( self.delay > 0 )
wait( self.delay );
self.door moveto( self.origin, self.time, self.accel );
thread maps\odin_audio::sfx_interior_door_close( self );
if ( isdefined( self.trigger ) )
{
self.trigger common_scripts\utility::trigger_off();
self.trigger delete();
}
}
normalize_value( var_0, var_1, var_2 )
{
if ( var_2 > var_1 )
return 1.0;
else if ( var_2 < var_0 )
return 0.0;
return ( var_2 - var_0 ) / ( var_1 - var_0 );
}
factor_value_min_max( var_0, var_1, var_2 )
{
return var_1 * var_2 + var_0 * ( 1 - var_2 );
}
check_anim_time( var_0, var_1, var_2 )
{
var_3 = self getanimtime( level.scr_anim[var_0][var_1] );
if ( var_3 >= var_2 )
return 1;
return 0;
}
god_rays_from_moving_source( var_0, var_1, var_2 )
{
var_3 = 0;
var_4 = 0;
var_5 = maps\_utility::create_sunflare_setting( "default" );
while ( !common_scripts\utility::flag( var_2 ) )
{
var_6 = var_0.origin;
var_3 = atan( ( level.player.origin[2] - var_6[2] ) / sqrt( squared( level.player.origin[0] - var_6[0] ) + squared( level.player.origin[1] - var_6[1] ) ) );
if ( level.player.origin[0] < var_6[0] )
var_4 = atan( ( level.player.origin[1] - var_6[1] ) / ( level.player.origin[0] - var_6[0] ) );
else
var_4 = 180 + atan( ( level.player.origin[1] - var_6[1] ) / ( level.player.origin[0] - var_6[0] ) );
var_5.position = ( var_3, var_4, 0 );
maps\_art::sunflare_changes( "default", 0 );
wait 0.05;
}
}
initial_satellite_placement()
{
var_0 = satellite_get_script_mover();
var_1 = getent( "sat_intro_initial_position", "targetname" );
var_0 moveto( var_1.origin, 0.1 );
var_0 rotateto( var_1.angles, 0.1 );
var_0 waittill( "movedone" );
wait 4;
var_2 = [];
var_2["odin_sat_section_04_pod_doorL_01"] = level.animated_sat_part["odin_sat_section_04_pod_doorL_01"];
var_2["odin_sat_section_04_pod_doorL_02"] = level.animated_sat_part["odin_sat_section_04_pod_doorL_02"];
var_2["odin_sat_section_04_pod_doorL_03"] = level.animated_sat_part["odin_sat_section_04_pod_doorL_03"];
var_2["odin_sat_section_04_pod_doorL_04"] = level.animated_sat_part["odin_sat_section_04_pod_doorL_04"];
var_2["odin_sat_section_04_pod_doorR_01"] = level.animated_sat_part["odin_sat_section_04_pod_doorR_01"];
var_2["odin_sat_section_04_pod_doorR_02"] = level.animated_sat_part["odin_sat_section_04_pod_doorR_02"];
var_2["odin_sat_section_04_pod_doorR_03"] = level.animated_sat_part["odin_sat_section_04_pod_doorR_03"];
var_2["odin_sat_section_04_pod_doorR_04"] = level.animated_sat_part["odin_sat_section_04_pod_doorR_04"];
level thread maps\odin_fx::fx_sat_doors_close( var_2 );
level.odin_animnode thread maps\_anim::anim_single( level.animated_sat_part, "sat_blossom_close" );
}
nag_line_generator( var_0, var_1, var_2 )
{
level endon( "stop_nag" );
level endon( var_1 );
var_3 = 8;
var_4 = 20;
var_5 = 0.5;
var_6 = 1.5;
if ( !isdefined( var_0 ) )
var_0 = randomizer_create( [ "factory_bkr_hurryuprook", "factory_bkr_comeon", "factory_bkr_theholdup" ] );
else
var_0 = randomizer_create( var_0 );
for (;;)
{
wait( var_3 + randomfloatrange( -2.0, 2.0 ) );
var_7 = var_0 randomizer_get_no_repeat();
if ( isdefined( var_2 ) )
maps\_utility::smart_radio_dialogue( var_7 );
else
thread maps\_utility::smart_dialogue( var_7 );
if ( var_3 < var_4 )
var_3 = var_3 + randomfloatrange( var_5, var_6 );
}
}
randomizer_create( var_0 )
{
var_1 = spawnstruct();
var_1.array = var_0;
return var_1;
}
randomizer_get_no_repeat()
{
var_0 = undefined;
if ( self.array.size > 1 && isdefined( self.last_index ) )
{
var_0 = randomint( self.array.size - 1 );
if ( var_0 >= self.last_index )
var_0++;
}
else
var_0 = randomint( self.array.size );
self.last_index = var_0;
return self.array[var_0];
}
nag_line_generator_text( var_0, var_1, var_2, var_3 )
{
level endon( "stop_nag" );
self endon( var_1 );
var_4 = 10;
var_5 = 20;
var_6 = 0.5;
var_7 = 1.5;
var_0 = randomizer_create( var_0 );
for (;;)
{
wait( var_4 + randomfloatrange( -2.0, 2.0 ) );
var_8 = var_0 randomizer_get_no_repeat();
thread add_debug_dialogue( var_2, var_8, var_3 );
if ( var_4 < var_5 )
var_4 = var_4 + randomfloatrange( var_6, var_7 );
}
}
flashlight()
{
var_0 = spawn( "script_model", ( 0, 0, 0 ) );
var_0 setmodel( "tag_origin" );
var_0 linktoplayerview( self, "tag_flash", ( 0, 0, 0 ), ( 0, 0, 0 ), 1 );
playfxontag( level._effect["flashlight"], var_0, "tag_origin" );
}
struggle_flashlight( var_0 )
{
playfxontag( level._effect["flashlight"], var_0, "tag_light" );
common_scripts\utility::flag_wait( "teleport_player_to_z_trans" );
wait 1;
stopfxontag( level._effect["flashlight"], var_0, "tag_light" );
}
satellite_get_script_mover()
{
if ( !isdefined( level.satellite_script_mover ) )
{
var_0 = getent( "satellite_link_org", "targetname" );
level.satellite_script_mover = var_0;
spawn_and_assemble_animated_satellite( var_0 );
var_1 = getentarray( "spacejump_sat", "targetname" );
foreach ( var_3 in var_1 )
{
var_3 linkto( var_0 );
level.sat_ent_del[level.sat_ent_del.size] = var_3;
}
maps\odin_fx::fx_setup_sat_lights();
}
return level.satellite_script_mover;
}
spawn_and_assemble_animated_satellite( var_0 )
{
level.odin_animnode = var_0;
var_1 = getentarray( "odin_satellite_animated", "targetname" );
level.odin_rotator = getent( "odin_sat_section_03_rot", "script_noteworthy" );
level.sat_ent_del[level.sat_ent_del.size] = level.odin_rotator;
level.odin_rotator.animname = "odin_sat_section_03_rot";
level.odin_rotator maps\_utility::assign_animtree( "odin_sat_section_03_rot" );
level.animated_sat_part = [];
foreach ( var_3 in var_1 )
{
if ( isdefined( var_3.script_noteworthy ) && var_3.script_noteworthy != "odin_sat_section_03_rot" )
{
var_3.animname = var_3.script_noteworthy;
level.animated_sat_part[var_3.script_noteworthy] = var_3;
level.animated_sat_part[var_3.script_noteworthy] maps\_utility::assign_animtree( var_3.script_noteworthy );
var_3 linkto( level.odin_animnode );
level.sat_ent_del[level.sat_ent_del.size] = var_3;
}
}
level.odin_animnode maps\_anim::anim_first_frame( level.animated_sat_part, "sat_blossom_close" );
level.odin_rotator linkto( level.odin_animnode );
foreach ( var_6 in level.animated_sat_part )
var_6 linkto( level.odin_animnode );
level.odin_animnode thread maps\_anim::anim_loop_solo( level.odin_rotator, "odin_sat_blossom_close_spin", "stop_sat_loops" );
foreach ( var_6 in level.animated_sat_part )
var_6 stopanimscripted();
}
satellite_move_to( var_0, var_1, var_2, var_3 )
{
var_4 = satellite_get_script_mover();
var_5 = getent( var_0, "targetname" );
if ( isdefined( var_2 ) )
var_4 moveto( var_5.origin, var_1, var_2, var_3 );
else
var_4 moveto( var_5.origin, var_1 );
}
earth_get_script_mover()
{
if ( !isdefined( level.earth_script_mover ) )
{
var_0 = getentarray( "spin_earth", "targetname" );
var_1 = undefined;
var_2 = undefined;
foreach ( var_4 in var_0 )
{
if ( var_4.classname == "script_origin" )
{
var_1 = var_4;
continue;
}
if ( var_4.classname == "script_model" )
var_2 = var_4;
}
if ( !isdefined( var_1 ) )
return;
var_0 = common_scripts\utility::array_remove( var_0, var_1 );
if ( isdefined( var_1.target ) )
{
foreach ( var_4 in var_0 )
var_4 linkto( var_1 );
}
level.earth_script_mover = var_1;
level.earth_script_mover.earth_model = var_2;
}
return level.earth_script_mover;
}
odin_control_player_speed()
{
var_0 = 0;
if ( level.start_point != "default" )
var_0 = 1;
switch ( level.start_point )
{
case "odin_intro":
case "default":
level.space_friction = 15;
level.space_speed = 80;
level.space_accel = 75;
level.space_vertical_speed = 65;
level.space_vertical_accel = 85;
odin_refresh_player_speed();
common_scripts\utility::flag_wait( "open_airlock_door" );
case "odin_ally":
common_scripts\utility::flag_set( "prologue_ready_for_thrusters" );
level.space_friction = 15;
level.space_speed = 46.66;
level.space_accel = 75;
level.space_vertical_speed = 60;
level.space_vertical_accel = 75;
odin_refresh_player_speed();
case "odin_escape":
common_scripts\utility::flag_set( "prologue_ready_for_thrusters" );
level.space_friction = 15;
level.space_speed = 46.66;
level.space_accel = 75;
level.space_vertical_speed = 60;
level.space_vertical_accel = 75;
odin_refresh_player_speed();
common_scripts\utility::flag_wait( "ally_console_scene_done" );
level.space_speed = 58;
odin_refresh_player_speed();
common_scripts\utility::flag_wait( "player_in_outside_spin" );
case "odin_spin":
common_scripts\utility::flag_set( "prologue_ready_for_thrusters" );
level.space_friction = 15;
level.space_speed = 70;
level.space_accel = 75;
level.space_vertical_speed = 60;
level.space_vertical_accel = 75;
odin_refresh_player_speed();
common_scripts\utility::flag_wait( "spin_clear" );
case "odin_spacejump":
common_scripts\utility::flag_set( "prologue_ready_for_thrusters" );
level.space_friction = 15;
level.space_speed = 70;
level.space_accel = 75;
level.space_vertical_speed = 60;
level.space_vertical_accel = 75;
odin_refresh_player_speed();
common_scripts\utility::flag_wait( "spacejump_clear" );
case "odin_satellite":
common_scripts\utility::flag_set( "prologue_ready_for_thrusters" );
level.space_friction = 15;
level.space_speed = 70;
level.space_accel = 65;
level.space_vertical_speed = 55;
level.space_vertical_accel = 65;
common_scripts\utility::flag_wait( "triggered_finale" );
default:
}
}
odin_refresh_player_speed()
{
setsaveddvar( "player_swimFriction", level.space_friction );
setsaveddvar( "player_swimAcceleration", level.space_accel );
setsaveddvar( "player_swimVerticalSpeed", level.space_vertical_speed );
setsaveddvar( "player_swimVerticalAcceleration", level.space_vertical_accel );
setsaveddvar( "player_swimSpeed", level.space_speed );
}
push_out_of_doorway( var_0, var_1, var_2, var_3 )
{
switch ( var_0 )
{
case "X":
case "x":
var_0 = 0;
break;
case "Y":
case "y":
var_0 = 1;
break;
default:
break;
}
switch ( var_1 )
{
case ">":
while ( level.player.origin[var_0] - 32 >= level.ally.origin[var_0] )
{
setsaveddvar( "player_swimSpeed", 0 );
level.ally pushplayer( 0 );
setsaveddvar( "player_swimWaterCurrent", ( var_2, var_3, 0 ) );
wait 0.01;
}
break;
case "<":
while ( level.player.origin[var_0] - 32 <= level.ally.origin[var_0] )
{
setsaveddvar( "player_swimSpeed", 0 );
level.ally pushplayer( 0 );
setsaveddvar( "player_swimWaterCurrent", ( var_2, var_3, 0 ) );
wait 0.01;
}
break;
default:
break;
}
setsaveddvar( "player_swimSpeed", level.space_speed );
level.ally pushplayer( 1 );
wait 0.5;
setsaveddvar( "player_swimWaterCurrent", ( 0, 0, 0 ) );
}
finale_anim_loop_killer( var_0, var_1 )
{
common_scripts\utility::flag_wait( "end_ally_loop_anims" );
if ( isdefined( var_0 ) )
var_0 notify( "ender" );
}
entity_counter()
{
common_scripts\utility::create_dvar( "entity_counter", 1 );
for ( var_0 = getdvarint( "entity_counter" ); var_0; var_0 = getdvarint( "entity_counter" ) )
{
iprintln( "ENTS: " + getentarray().size );
wait 1;
}
}
player_speed_check()
{
wait 4;
var_0 = level.player.origin;
var_1 = level.player.origin;
var_2 = 0;
for (;;)
{
var_0 = level.player.origin;
var_3 = distance( var_0, var_1 );
var_3 = var_3 * 3600;
var_3 = var_3 / 12;
var_3 = var_3 / 5280;
if ( var_2 < var_3 )
var_2 = var_3;
iprintlnbold( "MPH: " + var_3 + " Top: " + var_2 );
var_1 = level.player.origin;
wait 1;
}
}
odin_drop_weapon()
{
level endon( "stop_weapon_drop_scripts" );
if ( !isdefined( level.odin_custom_weap_splash ) )
{
level.odin_dropped_weapons = [];
thread custom_weap_splash();
}
level.odin_custom_weap_splash = 1;
var_0 = self.a.weaponpos["right"];
if ( var_0 != "none" )
{
self.nodrop = 1;
var_1 = create_world_model_from_ent_weapon( var_0 );
var_1 hide();
var_1.origin = self gettagorigin( "tag_weapon" );
var_1.angles = self gettagangles( "tag_weapon" );
var_1 linkto( self, "tag_weapon" );
self waittill( "death" );
var_2 = create_drop_weapon_trigger( var_1 );
var_1 show();
animscripts\shared::placeweaponon( var_0, "none" );
if ( common_scripts\utility::cointoss() )
var_3 = randomintrange( -400, -100 );
else
var_3 = randomintrange( 100, 400 );
if ( common_scripts\utility::cointoss() )
var_4 = randomintrange( -400, -100 );
else
var_4 = randomintrange( 100, 400 );
var_1 physicslaunchserver( var_1.origin + ( 0, 0, 10 ), ( var_3, 0, 0 ) );
var_1 thread odin_drop_weapon_cleanup( var_2 );
}
}
custom_weap_splash()
{
thread display_splash_func();
level endon( "player_has_shroud_now" );
for (;;)
{
common_scripts\utility::flag_wait( "show_custom_weap_splash" );
create_qte_prompt( &"ODIN_SHROUD_PICKUP", "hud_icon_microtar_space", 1.25 );
common_scripts\utility::flag_waitopen( "show_custom_weap_splash" );
destroy_qte_prompt();
}
}
display_splash_func()
{
level endon( "player_has_shroud_now" );
for (;;)
{
var_0 = 0;
foreach ( var_2 in level.odin_dropped_weapons )
{
if ( isdefined( var_2 ) )
{
var_3 = distance( level.player.origin, var_2.origin );
if ( var_3 <= 60 )
var_0 = 1;
}
}
if ( var_0 == 1 )
common_scripts\utility::flag_set( "show_custom_weap_splash" );
else
common_scripts\utility::flag_clear( "show_custom_weap_splash" );
wait 0.1;
}
}
create_drop_weapon_trigger( var_0 )
{
var_0 makeusable();
thread wait_for_use_trigger_stop( var_0 );
thread odin_drop_weapon_trigger_use( var_0 );
level.odin_dropped_weapons[level.odin_dropped_weapons.size] = var_0;
}
wait_for_use_trigger_stop( var_0 )
{
common_scripts\utility::flag_wait( "player_has_shroud" );
level notify( "player_has_shroud_now" );
if ( !isdefined( var_0 ) )
return;
destroy_qte_prompt();
var_0 makeunusable();
var_1 = spawn( "trigger_radius", var_0.origin, 0, 20, 20 );
var_1 enablelinkto();
var_1 linkto( var_0 );
var_1 thread odin_drop_weapon_trigger( var_0 );
return var_1;
}
odin_drop_weapon_trigger_use( var_0 )
{
level endon( "start_transition_to_youngblood" );
level endon( "player_has_shroud_now" );
var_0 waittill( "trigger" );
level.player takeallweapons();
if ( common_scripts\utility::flag( "odin_start_spin_decomp_real" ) )
{
level.player giveweapon( "microtar_space+acogsmg_sp+spaceshroud_sp" );
level.player switchtoweapon( "microtar_space+acogsmg_sp+spaceshroud_sp" );
}
else
{
level.player giveweapon( "microtar_space_interior+acogsmg_sp+spaceshroud_sp" );
level.player switchtoweapon( "microtar_space_interior+acogsmg_sp+spaceshroud_sp" );
}
level.player.weapon_interior = "microtar_space_interior+acogsmg_sp+spaceshroud_sp";
level.player.weapon_exterior = "microtar_space+acogsmg_sp+spaceshroud_sp";
var_1 = level.player getcurrentprimaryweapon();
var_2 = level.player getweaponammostock( var_1 );
level.player playsound( "weap_pickup_large_plr" );
level.player setweaponammostock( var_1, var_2 + randomintrange( 30, 60 ) );
var_0 hidepart( "tag_clip" );
var_0 hidepart( "tag_silencer" );
level thread create_pushed_dropped_weapon( var_0.origin, var_0.angles, var_0.model, var_0.attachments, 1 );
var_0 delete();
common_scripts\utility::flag_set( "player_has_shroud" );
}
create_pushed_dropped_weapon( var_0, var_1, var_2, var_3, var_4 )
{
var_5 = spawn( "script_model", var_0 );
var_5.angles = var_1;
var_5 setmodel( var_2 );
var_5 hidepart( "tag_clip" );
var_5.attachments = var_3;
var_5 create_world_model_from_ent_weapon();
if ( isdefined( var_4 ) )
var_5 hidepart( "tag_silencer" );
var_5 physicslaunchserver( var_5.origin, anglestoforward( level.player.angles ) * 2500, 500000, 5 );
wait 0.5;
if ( !isdefined( var_5 ) )
return;
var_5 thread odin_drop_weapon_cleanup( undefined, 10 );
}
odin_drop_weapon_trigger( var_0 )
{
level endon( "start_transition_to_youngblood" );
self waittill( "trigger" );
var_1 = level.player getcurrentprimaryweapon();
var_2 = level.player getweaponammostock( var_1 );
level.player playsound( "weap_pickup_large_plr" );
level.player setweaponammostock( var_1, var_2 + randomintrange( 30, 60 ) );
var_0 hidepart( "tag_clip" );
thread destroy_qte_prompt();
level thread create_pushed_dropped_weapon( var_0.origin, var_0.angles, var_0.model, var_0.attachments );
var_0 delete();
self delete();
}
odin_drop_weapon_cleanup( var_0, var_1 )
{
self endon( "death" );
if ( !isdefined( var_1 ) )
var_1 = 45;
wait( var_1 );
while ( maps\_utility::player_looking_at( self.origin, 0.4, 1 ) )
common_scripts\utility::waitframe();
if ( isdefined( var_0 ) && isalive( var_0 ) )
var_0 delete();
self delete();
}
create_world_model_from_ent_weapon( var_0 )
{
if ( isdefined( var_0 ) )
{
var_1 = getweaponmodel( var_0 );
var_2 = spawn( "script_model", ( 0, 0, -10000 ) );
var_2 setmodel( var_1 );
var_2.attachments = getweaponattachments( var_0 );
}
else
{
var_2 = self;
var_1 = self.model;
var_2.attachments = self.attachments;
}
var_2 hidepart( "tag_sight_on", var_1 );
var_2 attach( "weapon_acog_iw6", "tag_acog_2", 1 );
var_2 attach( "weapon_barrel_shroud_iw6", "tag_silencer", 1 );
return var_2;
}
view_control_lerp( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
{
var_7 = maps\_utility::spawn_anim_model( "player_rig" );
var_7.origin = level.player.origin - ( 0, 0, 60 );
var_7.angles = level.player getplayerangles();
wait 0.05;
level.player playerlinktodelta( var_7, "tag_player", 1, var_0, var_0, var_0, var_0, 1 );
if ( !isdefined( var_4 ) || var_4 > var_3 )
var_4 = 0;
if ( !isdefined( var_5 ) || var_5 > var_3 )
var_5 = 0;
var_7 moveto( var_1, var_3, var_4, var_5 );
var_7 rotateto( var_2, var_3, var_4, var_5 );
wait( var_3 );
level.player playerlinktodelta( var_6, "tag_player", 1, var_0, var_0, var_0, var_0, 1 );
var_7 delete();
}
dynamic_object_pusher()
{
var_0 = [];
var_0[0] = getent( "odin_escape_ally_tp", "targetname" );
var_0[1] = getent( "player_escape_door_blocker_origin", "targetname" );
var_0[2] = getent( "final_dyn_push_dest", "script_noteworthy" );
var_1 = common_scripts\utility::spawn_tag_origin();
var_1.origin = var_0[0].origin;
thread pusher_pulses( var_1 );
thread dynamic_repulsor( var_0[1] );
var_1 moveto( var_0[1].origin, 3, 0, 0 );
wait 3;
var_1 notify( "stop_pushing" );
common_scripts\utility::flag_wait( "esc_combat_done" );
var_1 moveto( var_0[2].origin, 3, 0, 0 );
wait 2;
thread pusher_pulses( var_1 );
wait 1;
var_1 notify( "stop_pushing" );
wait 1;
var_1 delete();
}
pusher_pulses( var_0 )
{
var_0 endon( "stop_pushing" );
for (;;)
{
physicsexplosionsphere( var_0.origin, 96, 1, 0.03 );
wait 0.05;
}
}
dynamic_repulsor( var_0 )
{
var_1 = var_0.origin;
while ( !common_scripts\utility::flag( "escape_blocker_door_trig" ) )
{
physicsexplosionsphere( var_1, 32, 1, 0.03 );
wait 0.05;
}
}
fx_odin_monitor_bink_init()
{
setsaveddvar( "cg_cinematicFullScreen", "0" );
if ( maps\_utility::is_gen4() )
cinematicingameloopresident( "prologue_odin_monitor_ng" );
else
cinematicingameloopresident( "prologue_odin_monitor" );
thread fx_odin_monitor_bink_shutdown();
}
fx_odin_monitor_bink_shutdown()
{
if ( level.start_point == "odin_escape" )
stopcinematicingame();
else
{
common_scripts\utility::flag_wait( "player_second_z_turn" );
stopcinematicingame();
}
common_scripts\utility::flag_wait( "kyra_push_bag_anim" );
setsaveddvar( "cg_cinematicFullScreen", "0" );
if ( maps\_utility::is_gen4() )
cinematicingameloopresident( "prologue_odin_monitor_ng" );
else
cinematicingameloopresident( "prologue_odin_monitor" );
common_scripts\utility::flag_wait( "decomp_done" );
stopcinematicingame();
}
odin_breathing_func( var_0 )
{
switch ( var_0 )
{
case "breathing_better":
self playlocalsound( "breathing_better_space" );
break;
case "breathing_hurt":
self playlocalsound( "breathing_hurt_space" );
break;
default:
break;
}
}
create_qte_prompt( var_0, var_1, var_2, var_3 )
{
var_4 = -3;
if ( !isdefined( var_3 ) )
var_3 = 100;
var_5 = var_2;
var_6 = 3;
var_7 = 130;
var_8 = [];
var_9 = level.player maps\_hud_util::createclientfontstring( "default", var_5 );
var_9.x = var_4 * -1;
var_9.y = var_3;
var_9.horzalign = "right";
var_9.alignx = "right";
var_9.alignx = "center";
var_9.aligny = "middle";
var_9.horzalign = "center";
var_9.vertalign = "middle";
var_9.hidewhendead = 1;
var_9.hidewheninmenu = 1;
var_9.sort = 205;
var_9.foreground = 1;
var_9.alpha = 1;
var_9 settext( var_0 );
var_8["text"] = var_9;
if ( isdefined( var_1 ) )
{
var_10 = maps\_hud_util::createicon( var_1, 100, 40 );
var_10.x = var_6;
var_10.y = var_7;
var_10.alignx = "center";
var_10.aligny = "middle";
var_10.horzalign = "center";
var_10.vertalign = "middle";
var_10.hidewhendead = 1;
var_10.hidewheninmenu = 1;
var_10.sort = 205;
var_10.foreground = 1;
var_10.alpha = 1;
var_8["icon"] = var_10;
}
level.qte_prompt = var_8;
}
destroy_qte_prompt()
{
if ( !isdefined( level.qte_prompt ) )
return;
level notify( "stop_blink" );
foreach ( var_1 in level.qte_prompt )
{
if ( isdefined( var_1 ) )
var_1 destroy();
}
}
dialogue_facial( var_0, var_1 )
{
if ( !isdefined( self ) )
return;
maps\_utility_code::add_to_radio( var_0 );
self playsound( var_0 );
maps\_utility::bcs_scripted_dialogue_start();
maps\_anim::anim_single_queue( self, var_1 );
}