mirror of
https://github.com/ineedbots/t5_bot_warfare.git
synced 2025-04-21 00:55:44 +00:00
717 lines
20 KiB
Plaintext
717 lines
20 KiB
Plaintext
#include maps\mp\_utility;
|
|
#include common_scripts\utility;
|
|
#include maps\mp\_events;
|
|
|
|
main()
|
|
{
|
|
precachemodel("tag_origin");
|
|
|
|
level.onSpawnIntermission = ::cosmodrome_intermission;
|
|
|
|
/#
|
|
level thread devgui_cosmodrome();
|
|
execdevgui( "devgui_mp_cosmodrome" );
|
|
#/
|
|
|
|
//needs to be first for create fx
|
|
maps\mp\mp_cosmodrome_fx::main();
|
|
|
|
precachemodel("collision_wall_128x128x10");
|
|
precachemodel("collision_geo_128x128x128");
|
|
precachemodel("collision_wall_512x512x10");
|
|
precachemodel("collision_geo_mc_8x560x190");
|
|
precachemodel("collision_geo_mc_4x52x190");
|
|
precachemodel("collision_geo_mc_4x156x190");
|
|
|
|
maps\mp\_load::main();
|
|
if ( GetDvarInt( #"xblive_wagermatch" ) == 1 )
|
|
{
|
|
maps\mp\_compass::setupMiniMap("compass_map_mp_cosmodrome_wager");
|
|
}
|
|
else
|
|
{
|
|
maps\mp\_compass::setupMiniMap("compass_map_mp_cosmodrome");
|
|
}
|
|
maps\mp\mp_cosmodrome_amb::main();
|
|
|
|
// If the team nationalites change in this file,
|
|
// you must update the team nationality in the level's csc file as well!
|
|
maps\mp\gametypes\_teamset_urbanspecops::level_init();
|
|
|
|
level thread rocket_arm_think();
|
|
level thread rocket_think();
|
|
level thread radar_dish_think();
|
|
level thread distant_rockets_think();
|
|
|
|
// spawn collision to prevent players from sneaking under a small area by the rocket
|
|
spawncollision("collision_wall_128x128x10","collider",(1558, -179, -362), (0, 225, 0));
|
|
|
|
// spawn collision to prevent players from sneaking inside 2 vents
|
|
spawncollision("collision_wall_128x128x10","collider",(-699, 1457, -60), (0, 270, 0));
|
|
spawncollision("collision_wall_128x128x10","collider",(-699, 1329, -60), (0, 270, 0));
|
|
|
|
// spawn collision to prevent players from strafe jumping onto pipes.
|
|
spawncollision("collision_geo_128x128x128","collider",(1408.5, 863, -126.5), (0, 0, 0));
|
|
spawncollision("collision_geo_128x128x128","collider",(1536.5, 863, -126.5), (0, 0, 0));
|
|
|
|
// spawn collision to prevent players from jumping up onto walls by the rocket
|
|
spawncollision("collision_wall_512x512x10","collider",(1224, -160, 240), (0, 0, 0));
|
|
spawncollision("collision_wall_512x512x10","collider",(1348, -160, 240), (0, 0, 0));
|
|
|
|
// Spawn collision to keep players from walking onto a small ledge of collision on the green girders.
|
|
spawncollision("collision_wall_128x128x10","collider",(1911, 1018, -82), (0, 270, 0));
|
|
|
|
// not sure if this is the best way to determine that the map has been trimmed down
|
|
if ( isSmallMapVersion() )
|
|
{
|
|
//spawning missile clip collision to catch grenades, rockets and crossbow bolts on the wager match boundary
|
|
spawncollision("collision_geo_mc_8x560x190","collider",(-393, 396.5, -72), (0, 270, 0));
|
|
spawncollision("collision_geo_mc_4x52x190","collider",(-358, 676.5, -74), (0, 0, 0));
|
|
spawncollision("collision_geo_mc_4x156x190","collider",(-328.5, 758, -74), (0, 270, 0));
|
|
}
|
|
|
|
// enable new spawning system
|
|
maps\mp\gametypes\_spawning::level_use_unified_spawning(true);
|
|
|
|
SetDvar( "scr_spawn_enemy_influencer_radius", 1700 );
|
|
SetDvar( "scr_spawn_dead_friend_influencer_radius", 1300 );
|
|
SetDvar( "scr_spawn_dead_friend_influencer_timeout_seconds", 10 );
|
|
SetDvar( "scr_spawn_dead_friend_influencer_count", 7 );
|
|
}
|
|
|
|
isSmallMapVersion()
|
|
{
|
|
if ( GetDvarInt( #"xblive_wagermatch" ) == 1 )
|
|
{
|
|
return true;
|
|
}
|
|
|
|
gametype = getDvar( #"g_gametype" );
|
|
if ( gametype == "oic" )
|
|
return true;
|
|
|
|
if ( gametype == "hlnd" )
|
|
return true;
|
|
|
|
if ( gametype == "shrp" )
|
|
return true;
|
|
|
|
if ( gametype == "gun" )
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
cosmodrome_intermission()
|
|
{
|
|
maps\mp\gametypes\_globallogic_defaults::default_onSpawnIntermission();
|
|
|
|
rocket_base = GetEnt( "cosmodrome_rocket_base", "script_noteworthy" );
|
|
|
|
if ( !IsDefined( rocket_base ) )
|
|
{
|
|
return;
|
|
}
|
|
|
|
if ( IsDefined( level.rocket_camera ) && level.rocket_camera == true )
|
|
{
|
|
lookat = Spawn( "script_model", rocket_base.origin + ( 0, 0, 1024 ) );
|
|
lookat SetModel( "tag_origin" );
|
|
lookat LinkTo( rocket_base );
|
|
|
|
self CameraSetPosition( self.origin );
|
|
self CameraSetLookAt( lookat );
|
|
self CameraActivate( true );
|
|
}
|
|
}
|
|
|
|
rocket_arm_think()
|
|
{
|
|
start_pitch = set_dvar_int_if_unset( "scr_rocket_arm_pitch", "90" );
|
|
rotate_time = set_dvar_int_if_unset( "scr_rocket_arm_rotate_secs", "30" );
|
|
wait_time = set_dvar_int_if_unset( "scr_rocket_arm_wait_secs", "5" );
|
|
|
|
arm_base = GetEnt( "cosmodrome_rocket_arm_base", "targetname" );
|
|
AssertEx( IsDefined( arm_base ), "Unable to find entity with targetname: 'cosmodrome_rocket_arm_base'" );
|
|
|
|
arm = GetEntArray( "cosmodrome_rocket_arm", "targetname" );
|
|
AssertEx( IsDefined( arm ), "Unable to find entity with targetname: 'cosmodrome_rocket_arm'" );
|
|
|
|
for ( i = 0; i < arm.size; i++ )
|
|
{
|
|
arm[i] LinkTo( arm_base );
|
|
}
|
|
|
|
if ( !IsDefined( arm_base.angles_target ) )
|
|
{
|
|
arm_base.angles_target = arm_base.angles;
|
|
}
|
|
|
|
arm_base.angles = ( start_pitch, arm_base.angles[1], arm_base.angles[2] );
|
|
//IPrintLnBold ("rocket is MOVING?");
|
|
|
|
wait ( wait_time );
|
|
|
|
//IPrintLnBold ("start arm sound");
|
|
arm_base playloopsound("evt_rocket_lp",.2);
|
|
arm_base PlaySound ("evt_rocket_start");
|
|
arm_base RotateTo( arm_base.angles_target, rotate_time );
|
|
|
|
|
|
wait(rotate_time);
|
|
arm_base stoploopsound(.3);
|
|
arm_base PlaySound ("evt_rocket_end");
|
|
// IPrintLnBold (rotate_time);
|
|
// stop loppsound with fade
|
|
// play oneshot attach
|
|
// stop loop sound
|
|
}
|
|
|
|
rocket_prelaunch( rocket_base )
|
|
{
|
|
//this will play vo for countdown and delay the launch by 10 seconds
|
|
snd_countdown ();
|
|
|
|
// move the claw arms away from the rocket
|
|
claw_r = GetEntArray("claw_r", "targetname");
|
|
claw_l = GetEntArray("claw_l", "targetname");
|
|
claw_arm_r = GetEntArray("claw_arm_r", "targetname");
|
|
claw_arm_l = GetEntArray("claw_arm_l", "targetname");
|
|
mover_r = GetEnt("claw_r_mover", "targetname");
|
|
mover_l = GetEnt("claw_l_mover", "targetname");
|
|
move_here_r = GetEnt("claw_r_move_here", "targetname");
|
|
move_here_l = GetEnt("claw_l_move_here", "targetname");
|
|
|
|
for(i = 0 ; i < claw_r.size; i++)
|
|
{
|
|
claw_r[i] LinkTo(mover_r);
|
|
}
|
|
for(i = 0 ; i < claw_l.size; i++)
|
|
{
|
|
claw_l[i] LinkTo(mover_l);
|
|
}
|
|
mover_r MoveTo(move_here_r.origin, 3.0);
|
|
mover_l MoveTo(move_here_l.origin, 3.0);
|
|
|
|
// play sound on the arms
|
|
thread snd_rocket_gantry ( mover_r, mover_l);
|
|
|
|
wait(4.0);
|
|
for(i = 0; i < claw_r.size; i++)
|
|
{
|
|
claw_r[i] Unlink();
|
|
claw_r[i] LinkTo(move_here_r);
|
|
}
|
|
for(i = 0; i < claw_l.size; i++)
|
|
{
|
|
claw_l[i] Unlink();
|
|
claw_l[i] LinkTo(move_here_l);
|
|
}
|
|
|
|
for(i = 0; i < claw_arm_r.size; i++)
|
|
{
|
|
claw_arm_r[i] LinkTo(move_here_r);
|
|
}
|
|
for(i = 0; i < claw_arm_l.size; i++)
|
|
{
|
|
claw_arm_l[i] LinkTo(move_here_l);
|
|
}
|
|
move_here_r RotateYaw(75, 3.0);
|
|
move_here_l RotateYaw(-75, 3.0);
|
|
|
|
// wait to launch
|
|
rocket_base playsound ("evt_cosmo_launch");
|
|
playsoundatposition("evt_cosmo_air_distf",(0,0,0));
|
|
playsoundatposition("evt_cosmo_air_distr",(0,0,0));
|
|
|
|
wait(5);
|
|
}
|
|
|
|
Rocket_Think()
|
|
{
|
|
level.const_fx_exploder_rocket_coolant = 2;
|
|
|
|
level.rocket_camera = false;
|
|
flag_init( "rocket_launch_grenade_detonate" );
|
|
|
|
rocket = GetEntArray( "cosmodrome_rocket", "targetname" );
|
|
AssertEx( IsDefined( rocket ), "Unable to find entity with targetname: 'cosmodrome_rocket'" );
|
|
array_thread( rocket, ::rocket_sticky_grenade_think );
|
|
|
|
rocket_base = GetEnt( "cosmodrome_rocket_base", "script_noteworthy" );
|
|
AssertEx( IsDefined( rocket_base ), "Unable to find entity with script_noteworthy: 'cosmodrome_rocket_base'" );
|
|
level.rocket_base = rocket_base;
|
|
|
|
rocket_damage_triggers = GetEntArray( "cosmodrome_rocket_damage_trigger", "targetname" );
|
|
rocket_collision = GetEntArray( "rocket_collision", "targetname" );
|
|
|
|
killCamEnt = spawn( "script_model", rocket_base.origin );
|
|
rocket_base.killCamEnt = killCamEnt;
|
|
killCamEnt.startTime = gettime();
|
|
killCamEnt linkTo( rocket_base, "tag_origin", (50,0,-1000), ( 0,0,0 ) );
|
|
|
|
|
|
rocket_timer_init();
|
|
|
|
wait( 3 );
|
|
exploder( level.const_fx_exploder_rocket_coolant );
|
|
|
|
event = level waittill_any_return( "rocket_launch", "rocket_launch_skip_prelaunch" );
|
|
|
|
if ( event == "rocket_launch" )
|
|
{
|
|
rocket_prelaunch( rocket_base );
|
|
}
|
|
|
|
level.rocket_camera = true;
|
|
|
|
// pre-launch fx
|
|
earthquake_origin = rocket_base GetTagOrigin( "tag_engine" );
|
|
earthquake( .25, 4, earthquake_origin, 4096 );
|
|
|
|
//play 3d launch aounds on rocket_base, and 2 st 2d sounds
|
|
|
|
|
|
wait( 3.5 );
|
|
flag_set( "rocket_launch_grenade_detonate" );
|
|
|
|
// launch fx
|
|
earthquake( .35, 15, earthquake_origin, 4096 );
|
|
array_thread( rocket_damage_triggers, ::rocket_damage_think );
|
|
array_thread( rocket_damage_triggers, ::destroy_greandes_in_trigger );
|
|
rocket_base SetClientFlag( level.const_flag_rocket_fx );
|
|
exploder_stop( level.const_fx_exploder_rocket_coolant );
|
|
|
|
// move pieces
|
|
array_thread( rocket, ::rocket_move );
|
|
|
|
// stop damage
|
|
wait( 6 );
|
|
level notify( "rocket_damage_stop" );
|
|
|
|
wait( 2 );
|
|
level.rocket_camera = false;
|
|
|
|
for ( i = 0; i < rocket_damage_triggers.size; i++ )
|
|
{
|
|
rocket_damage_triggers[i] delete();
|
|
}
|
|
|
|
for ( i = 0; i < rocket_collision.size; i++ )
|
|
{
|
|
rocket_collision[i] delete();
|
|
}
|
|
}
|
|
|
|
snd_rocket_gantry ( orignr, originl)
|
|
{
|
|
orignr playsound ("evt_gantry_disengage");
|
|
orignr playsound ("evt_rocket_start");
|
|
// originl playsound ("evt_rocket_start");
|
|
}
|
|
snd_countdown()
|
|
{
|
|
//wait 2;
|
|
countdownl = spawn("script_origin", (480, -1256, 224));
|
|
countdownr = spawn("script_origin", (152, 1488, 224));
|
|
|
|
clientnotify ( "snd_rocket_launch" );
|
|
|
|
|
|
if( IsDefined(countdownl)&& IsDefined(countdownr) )
|
|
{
|
|
countdownl playsound( "vox_mp_com_1a_rua1" );
|
|
wait .112;
|
|
countdownr playsound( "vox_mp_com_1a_rua1" );
|
|
wait 16.5;
|
|
|
|
thread snd_launch ();
|
|
|
|
|
|
}
|
|
}
|
|
snd_launch ()
|
|
{
|
|
countdownl = spawn("script_origin", (480, -1256, 224));
|
|
countdownr = spawn("script_origin", (152, 1488, 224));
|
|
wait 2;
|
|
countdownl playsound( "vox_mp_com_2a_rua1" );
|
|
wait .112;
|
|
countdownr playsound( "vox_mp_com_2a_rua1" );
|
|
|
|
}
|
|
rocket_sticky_grenade_think()
|
|
{
|
|
self endon( "death" );
|
|
|
|
for ( ;; )
|
|
{
|
|
self waittill( "grenade_stuck", grenade_ent );
|
|
grenade_ent thread sticky_grenade_think();
|
|
}
|
|
}
|
|
|
|
sticky_grenade_think()
|
|
{
|
|
self endon( "death" );
|
|
level endon( "rocket_damage_stop" );
|
|
|
|
flag_wait( "rocket_launch_grenade_detonate" );
|
|
wait( 0.05 );
|
|
|
|
self Detonate();
|
|
}
|
|
|
|
//Self is the trigger. This loops to make sure any grenade or claymore that's touching the damage trigger explodes.
|
|
destroy_greandes_in_trigger()
|
|
{
|
|
self endon( "death" );
|
|
level endon( "rocket_damage_stop" );
|
|
|
|
flag_wait( "rocket_launch_grenade_detonate" );
|
|
|
|
for( ;; )
|
|
{
|
|
grenades = GetEntArray( "grenade", "classname" );
|
|
|
|
for ( i = 0; i < grenades.size; i++ )
|
|
{
|
|
if( grenades[i] IsTouching( self ))
|
|
{
|
|
grenades[i] Detonate();
|
|
}
|
|
|
|
}
|
|
|
|
wait 1;
|
|
}
|
|
}
|
|
|
|
rocket_timer_init()
|
|
{
|
|
level waittill( "prematch_over" );
|
|
|
|
event = set_dvar_if_unset( "scr_rocket_event", "end" );
|
|
trigger1 = set_dvar_int_if_unset( "scr_rocket_event_trigger1", "0" );
|
|
trigger2 = set_dvar_int_if_unset( "scr_rocket_event_trigger2", "0" );
|
|
|
|
if ( rocket_launch_abort() )
|
|
{
|
|
return;
|
|
}
|
|
|
|
switch ( event )
|
|
{
|
|
case "end":
|
|
add_timed_event( 0, "rocket_launch" );
|
|
add_score_event( level.scorelimit, "rocket_launch" );
|
|
// AE 11-2-09: putting in the distant rocket timing
|
|
add_score_event( int(level.scorelimit * 0.5), "distant_rocket_launch" );
|
|
break;
|
|
|
|
case "time":
|
|
assert( trigger1 >= 0 );
|
|
add_timed_event( trigger1, "rocket_launch" );
|
|
// AE 11-2-09: putting in the distant rocket timing
|
|
add_timed_event( int(trigger1 * 0.5), "distant_rocket_launch" );
|
|
break;
|
|
|
|
case "percent":
|
|
assert( trigger1 >= 0 );
|
|
assert( trigger1 <= 100 );
|
|
|
|
minutes = ( trigger1 * 0.01 ) * level.timelimit;
|
|
add_timed_event( minutes * 60, "rocket_launch" );
|
|
// AE 11-2-09: putting in the distant rocket timing
|
|
add_timed_event( int(minutes * 60 * 0.5), "distant_rocket_launch" );
|
|
|
|
score = ( trigger1 * 0.01 ) * level.scorelimit;
|
|
add_score_event( score, "rocket_launch" );
|
|
// AE 11-2-09: putting in the distant rocket timing
|
|
add_score_event( int(score * 0.5), "distant_rocket_launch" );
|
|
break;
|
|
|
|
case "random_time":
|
|
assert( trigger1 >= 0 );
|
|
assert( trigger2 >= 0 );
|
|
assert( trigger1 < trigger2 );
|
|
|
|
time = RandomIntRange( trigger1, trigger2 + 1 );
|
|
add_timed_event( trigger1, "rocket_launch" );
|
|
// AE 11-2-09: putting in the distant rocket timing
|
|
add_timed_event( int(trigger1 * 0.5), "distant_rocket_launch" );
|
|
break;
|
|
|
|
case "random_percent":
|
|
assert( trigger1 >= 0 );
|
|
assert( trigger1 <= 100 );
|
|
assert( trigger2 >= 0 );
|
|
assert( trigger2 <= 100 );
|
|
assert( trigger1 < trigger2 );
|
|
|
|
percent = RandomIntRange( trigger1, trigger2 + 1 );
|
|
minutes = ( percent * 0.01 ) * level.timelimit;
|
|
add_timed_event( minutes * 60, "rocket_launch" );
|
|
// AE 11-2-09: putting in the distant rocket timing
|
|
add_timed_event( int(minutes * 60 * 0.5), "distant_rocket_launch" );
|
|
|
|
percent = RandomIntRange( trigger1, trigger2 + 1 );
|
|
score = ( percent * 0.01 ) * level.scorelimit;
|
|
add_score_event( score, "rocket_launch" );
|
|
// AE 11-2-09: putting in the distant rocket timing
|
|
add_score_event( int(score * 0.5), "distant_rocket_launch" );
|
|
break;
|
|
|
|
default:
|
|
error( "Unknown event type: '" + event + "' used in dvar 'scr_rocket_event'" );
|
|
break;
|
|
}
|
|
}
|
|
|
|
rocket_launch_abort()
|
|
{
|
|
launch_abort = set_dvar_int_if_unset( "scr_rocket_event_off", "0" );
|
|
assert( launch_abort >= 0 );
|
|
assert( launch_abort <= 100 );
|
|
|
|
if ( RandomInt( 101 ) < launch_abort )
|
|
{
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
rocket_move()
|
|
{
|
|
self MoveTo( self.origin + ( 0, 0, 50000 ), 50, 45 );
|
|
|
|
self waittill( "movedone" );
|
|
self delete();
|
|
}
|
|
|
|
rocket_damage_think()
|
|
{
|
|
level endon( "rocket_damage_stop" );
|
|
damage_interval_secs = 1;
|
|
|
|
assert( self.classname == "trigger_radius" );
|
|
|
|
/#
|
|
if ( set_dvar_int_if_unset( "scr_rocket_debug", "0" ) != 0 )
|
|
{
|
|
drawcylinder( self.origin, self.radius, self.height, undefined, "rocket_damage_stop" );
|
|
}
|
|
#/
|
|
|
|
for( ;; )
|
|
{
|
|
self waittill( "trigger", ent );
|
|
|
|
if(IsPlayer(ent))
|
|
{
|
|
player = ent;
|
|
|
|
if ( player.sessionstate != "playing" )
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if ( !IsDefined( player.rocket_damage_time ) )
|
|
{
|
|
player.rocket_damage_time = GetTime();
|
|
}
|
|
|
|
if ( player.rocket_damage_time > GetTime() )
|
|
{
|
|
continue;
|
|
}
|
|
|
|
player shellshock( "tabun_gas_mp", damage_interval_secs );
|
|
player.rocket_damage_time = GetTime() + ( damage_interval_secs * 1000 );
|
|
player DoDamage( RandomIntRange( 40, 60 ), self.origin, self, level.rocket_base, 0, "MOD_SUICIDE" );
|
|
}
|
|
//This kill dogs in the radius trigger
|
|
else if ( IsAI( ent ))
|
|
{
|
|
ent DoDamage( ent.health * 2, ent.origin);
|
|
}
|
|
//This kills RC bombs in the radius trigger
|
|
else if(IsDefined( ent.targetname ) && ent.targetname == "rcbomb" )
|
|
{
|
|
//Destroy RC bomb
|
|
ent maps\mp\_rcbomb::rcbomb_force_explode();
|
|
}
|
|
}
|
|
}
|
|
|
|
radar_dish_think()
|
|
{
|
|
radar_dish = GetEnt( "cosmodrome_radar_dish", "targetname" );
|
|
AssertEx( IsDefined( radar_dish ), "Unable to find entity with targetname: 'cosmodrome_radar_dish'" );
|
|
|
|
for ( ;; )
|
|
{
|
|
rotate_time = set_dvar_int_if_unset( "scr_radar_dish_rotate_secs", "30" );
|
|
|
|
if ( rotate_time <= 0 )
|
|
{
|
|
return;
|
|
}
|
|
|
|
radar_dish RotateYaw( 360, rotate_time );
|
|
radar_dish waittill( "rotatedone" );
|
|
}
|
|
|
|
}
|
|
|
|
devgui_cosmodrome( cmd )
|
|
{
|
|
for ( ;; )
|
|
{
|
|
wait( 0.5 );
|
|
|
|
devgui_string = GetDvar( #"devgui_notify" );
|
|
|
|
switch( devgui_string )
|
|
{
|
|
case "":
|
|
break;
|
|
|
|
case "rocket_arm":
|
|
SetDvar( "scr_rocket_arm_wait_secs", "0" );
|
|
level thread rocket_arm_think();
|
|
break;
|
|
|
|
default:
|
|
level notify( devgui_string );
|
|
break;
|
|
}
|
|
|
|
SetDvar( "devgui_notify", "" );
|
|
}
|
|
}
|
|
|
|
distant_rockets_think()
|
|
{
|
|
// have the rockets in the distance going off
|
|
|
|
distant_rocket = GetEntArray( "distant_rocket", "targetname" );
|
|
AssertEx( IsDefined( distant_rocket ), "Unable to find entity with targetname: 'distant_rocket'" );
|
|
|
|
distant_rocket_gantry1 = GetEntArray("distant_rocket_gantry1", "targetname");
|
|
AssertEx( IsDefined( distant_rocket_gantry1 ), "Unable to find entity with targetname: 'distant_rocket_gantry1'" );
|
|
distant_rocket_gantry2 = GetEntArray("distant_rocket_gantry2", "targetname");
|
|
AssertEx( IsDefined( distant_rocket_gantry2 ), "Unable to find entity with targetname: 'distant_rocket_gantry2'" );
|
|
|
|
distant_rocket_arm1 = GetEntArray( "distant_rocket_arm1", "targetname" );
|
|
AssertEx( IsDefined( distant_rocket_arm1 ), "Unable to find entity with targetname: 'distant_rocket_arm1'" );
|
|
distant_rocket_arm2 = GetEntArray( "distant_rocket_arm2", "targetname" );
|
|
AssertEx( IsDefined( distant_rocket_arm2 ), "Unable to find entity with targetname: 'distant_rocket_arm2'" );
|
|
distant_rocket_arm3 = GetEntArray( "distant_rocket_arm3", "targetname" );
|
|
AssertEx( IsDefined( distant_rocket_arm3 ), "Unable to find entity with targetname: 'distant_rocket_arm3'" );
|
|
distant_rocket_arm4 = GetEntArray( "distant_rocket_arm4", "targetname" );
|
|
AssertEx( IsDefined( distant_rocket_arm4 ), "Unable to find entity with targetname: 'distant_rocket_arm4'" );
|
|
|
|
distant_rocket_engine = GetEnt( "distant_rocket_engine", "script_noteworthy" );
|
|
AssertEx( IsDefined( distant_rocket_engine ), "Unable to find entity with script_noteworthy: 'distant_rocket_engine'" );
|
|
distant_rocket_engine SetModel("tag_origin");
|
|
distant_rocket_engine.angles = (-90, 0, 0);
|
|
|
|
wait( 3 );
|
|
|
|
level waittill( "distant_rocket_launch" );
|
|
|
|
// splay sound on the gantry
|
|
thread snd_distant_gantry (distant_rocket_engine, distant_rocket_engine);
|
|
// play sound for arms
|
|
thread snd_distant_rocket_arm (distant_rocket_engine);
|
|
|
|
// move the gantry away from the rocket
|
|
array_thread( distant_rocket_gantry1, ::distant_rocket_gantry1_move );
|
|
array_thread( distant_rocket_gantry2, ::distant_rocket_gantry2_move );
|
|
|
|
wait(10);
|
|
|
|
// move the arms away from the rocket
|
|
array_thread( distant_rocket_arm1, ::distant_rocket_arm1_move );
|
|
array_thread( distant_rocket_arm2, ::distant_rocket_arm2_move );
|
|
array_thread( distant_rocket_arm3, ::distant_rocket_arm3_move );
|
|
array_thread( distant_rocket_arm4, ::distant_rocket_arm4_move );
|
|
|
|
|
|
|
|
// wait to launch
|
|
wait(8);
|
|
|
|
// pre-launch fx
|
|
// TODO: small earthquakes??
|
|
//earthquake_origin = rocket_base GetTagOrigin( "tag_engine" );
|
|
//earthquake( .25, 4, earthquake_origin, 4096 );
|
|
|
|
// play 3d launch aounds on distant_rocket_engine, and 2 st 2d sounds
|
|
distant_rocket_engine playsound ("evt_dist_cosmo_launch");
|
|
//playsoundatposition("evt_dist_cosmo_air_distf",(0,0,0));
|
|
distant_rocket_engine playsound ("evt_dist_cosmo_air_distf");
|
|
wait( 3.5 );
|
|
|
|
// launch fx
|
|
//earthquake( .35, 15, earthquake_origin, 4096 );
|
|
|
|
playfxontag( level._effect["rocket_blast_trail"], distant_rocket_engine, "tag_origin" );
|
|
|
|
// move pieces
|
|
array_thread( distant_rocket, ::rocket_move );
|
|
|
|
}
|
|
|
|
distant_rocket_gantry1_move() // self == distant_rocket_gantry
|
|
{
|
|
self RotatePitch(-45, 10.0);
|
|
self waittill("rotatedone");
|
|
}
|
|
distant_rocket_gantry2_move() // self == distant_rocket_gantry
|
|
{
|
|
self RotatePitch(45, 10.0);
|
|
self waittill("rotatedone");
|
|
}
|
|
|
|
distant_rocket_arm1_move() // self == distant_rocket_arm
|
|
{
|
|
self RotatePitch(-45, 6.0);
|
|
self waittill("rotatedone");
|
|
}
|
|
distant_rocket_arm2_move() // self == distant_rocket_arm
|
|
{
|
|
self RotateRoll(-45, 6.0);
|
|
self waittill("rotatedone");
|
|
}
|
|
distant_rocket_arm3_move() // self == distant_rocket_arm
|
|
{
|
|
self RotatePitch(45, 6.0);
|
|
self waittill("rotatedone");
|
|
}
|
|
distant_rocket_arm4_move() // self == distant_rocket_arm
|
|
{
|
|
self RotateRoll(45, 6.0);
|
|
self waittill("rotatedone");
|
|
}
|
|
snd_distant_rocket_arm ( distant_rocket_engine )
|
|
{
|
|
|
|
//IPrintLnBold ("this is in the distant rocket arm section - snd_distant_rocket_arm");
|
|
distant_rocket_engine playloopsound ("evt_dist_rocket_lp", .5);
|
|
distant_rocket_engine PlaySound ("evt_dist_rocket_start");
|
|
//self waittill("rotatedone");
|
|
wait (16);
|
|
distant_rocket_engine stoploopsound(.3);
|
|
distant_rocket_engine PlaySound ("evt_dist_rocket_end");
|
|
|
|
}
|
|
snd_distant_gantry ( orignr, originl)
|
|
{
|
|
//IPrintLnBold ("this is playing dist rocket start");
|
|
orignr playsound ("evt_dist_gantry_disengage");
|
|
orignr playsound ("evt_dist_rocket_start");
|
|
}
|