1461 lines
39 KiB
Plaintext
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 );
|
|
}
|