Files
IL-GSC/BO1/PC/ZM/clientscripts/zombie_cosmodrome.csc
2024-02-18 17:32:07 -05:00

1854 lines
51 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include clientscripts\_utility;
#include clientscripts\_music;
#include clientscripts\_zombiemode_weapons;
main()
{
level thread clientscripts\zombie_cosmodrome_ffotd::main_start();
level._uses_crossbow = true;
level._power_on = false;
level.rocket_num = 0;
level._visionset_map_nopower = "zombie_cosmodrome_nopower";
level._visionset_priority_map_nopower = 1;
level._visionset_map_sudden_power = "zombie_cosmodrome_powerUP";
level._visionset_priority_map_sudden_power = 2;
level._visionset_map_poweron = "zombie_cosmodrome_powerON";
level._visionset_priority_map_poweron = 3;
level._visionset_map_monkey = "zombie_cosmodrome_monkey";
level._visionset_priority_map_monkey = 4;
level._visionset_map_begin = "zombie_cosmodrome_begin";
level._visionset_priority_map_begin = 5;
level._visionset_map_monkeylandon = "flare";
level._visionset_priority_map_monkeylandon = 6;
level._visionset_monkey_transition_time_on = 0.5;
level._visionset_monkey_transition_time_off = 3.0;
level._visionset_zombie_sudden_power_transition_time = 0.1;
level._visionset_zombie_transition_time = 2.5;
level._fog_settings_monkey = "monkey";
level._fog_settings_monkey_priority = 3;
level._fog_settings_lander = "lander";
level._fog_settings_lander_priority = 2;
level._fog_settings_default = "normal";
level._fog_settings_default_priority = 1;
include_weapons();
PreCacheRumble( "damage_heavy" );
PrecacheRumble( "explosion_generic" );
clientscripts\_zombiemode::main();
register_clientflag_callback("actor", 0, ::actor_flag_soulpull_handler);
register_clientflag_callback("scriptmover", 0, ::rocket_fx);
register_clientflag_callback("scriptmover", 1, ::lander_engine_fx);
register_clientflag_callback("scriptmover", 2, ::lander_status_light);
register_clientflag_callback("scriptmover", 3, ::launch_panel_centrifuge_status);
register_clientflag_callback("scriptmover", 4, ::launch_panel_baseentry_status);
register_clientflag_callback("scriptmover", 5, ::launch_panel_storage_status);
register_clientflag_callback("scriptmover", 6, ::launch_panel_catwalk_status);
register_clientflag_callback("scriptmover", 7, ::lander_rumble_and_quake);
level._SCRIPTMOVER_COSMODROME_CLIENT_FLAG_CENTRIFUGE_RUMBLE = 8;
register_clientflag_callback( "scriptmover", level._SCRIPTMOVER_COSMODROME_CLIENT_FLAG_CENTRIFUGE_RUMBLE, ::centrifuge_rumble_control );
register_clientflag_callback("scriptmover", 9, ::lander_move_fx);
register_clientflag_callback("player", 0 , ::player_lander_fog);
level._SCRIPTMOVER_COSMODROME_CLIENT_FLAG_CENTRIFUGE_LIGHTS = 11;
register_clientflag_callback( "scriptmover", level._SCRIPTMOVER_COSMODROME_CLIENT_FLAG_CENTRIFUGE_LIGHTS, ::centrifuge_warning_lights_init );
level._SCRIPTMOVER_COSMODROME_CLIENT_FLAG_MONKEY_LANDER_FX = 12;
register_clientflag_callback( "scriptmover", level._SCRIPTMOVER_COSMODROME_CLIENT_FLAG_MONKEY_LANDER_FX, ::monkey_lander_fx );
level thread catwalk_lander_doors();
level thread base_entry_lander_doors();
level thread storage_lander_doors();
level thread centrifuge_lander_doors();
level thread lander_station_think();
level thread setup_fog();
level thread init_rocket_debris();
clientscripts\_zombiemode_weap_black_hole_bomb::init();
clientscripts\zombie_cosmodrome_fx::main();
thread clientscripts\zombie_cosmodrome_amb::main();
clientscripts\_zombiemode_deathcard::init();
level init_cosmodrome_box_screens();
OnPlayerConnect_Callback( ::cosmo_on_player_connect );
OnPlayerSpawned_Callback( ::cosmo_on_player_spawned );
waitforclient(0);
level thread cosmodrome_ZPO_listener();
level thread cosmodrome_monkey_round_start_listener();
register_zombie_types();
level thread radar_dish_init();
players = GetLocalPlayers();
for ( i=0; i<players.size; i++ )
{
level thread nml_fx_monitor( i );
}
level.nml_spark_pull = GetStruct( "nml_spark_pull", "targetname" );
level thread monkey_start_monitor();
level thread monkey_stop_monitor();
level thread monkey_land_on();
level thread monkey_land_off();
level thread cosmodrome_power_vision_set_swap();
level thread clientscripts\zombie_cosmodrome_ffotd::main_end();
}
cosmodrome_monkey_round_start_listener()
{
while(1)
{
level waittill("MRS");
players = getlocalplayers();
for ( i = 0; i < players.size; i++ )
{
players[i] Earthquake( 0.2, 5.0, players[i].origin, 20000 );
}
PlaySound( 0, "zmb_ape_intro_sonicboom_fnt", (0,0,0) );
}
}
cosmodrome_ZPO_listener()
{
while(1)
{
level waittill("ZPO");
level._power_on = true;
players = GetLocalPlayers();
for ( i=0; i<players.size; i++ )
{
level thread setup_lander_screens( i );
}
}
}
register_zombie_types()
{
character\clientscripts\c_zom_cosmo_scientist::register_gibs();
character\clientscripts\c_zom_cosmo_spetznaz::register_gibs();
character\clientscripts\c_zom_cosmo_cosmonaut::register_gibs();
}
include_weapons()
{
include_weapon( "frag_grenade_zm", false );
include_weapon( "claymore_zm", false );
include_weapon( "m1911_zm", false );
include_weapon( "m1911_upgraded_zm", false );
include_weapon( "python_zm" );
include_weapon( "python_upgraded_zm", false );
include_weapon( "cz75_zm" );
include_weapon( "cz75_upgraded_zm", false );
include_weapon( "m14_zm", false );
include_weapon( "m14_upgraded_zm", false );
include_weapon( "m16_zm", false );
include_weapon( "m16_gl_upgraded_zm", false );
include_weapon( "g11_lps_zm" );
include_weapon( "g11_lps_upgraded_zm", false );
include_weapon( "famas_zm" );
include_weapon( "famas_upgraded_zm", false );
include_weapon( "ak74u_zm", false );
include_weapon( "ak74u_upgraded_zm", false );
include_weapon( "mp5k_zm", false );
include_weapon( "mp5k_upgraded_zm", false );
include_weapon( "mp40_zm", false );
include_weapon( "mp40_upgraded_zm", false );
include_weapon( "mpl_zm", false );
include_weapon( "mpl_upgraded_zm", false );
include_weapon( "pm63_zm", false );
include_weapon( "pm63_upgraded_zm", false );
include_weapon( "spectre_zm" );
include_weapon( "spectre_upgraded_zm", false );
include_weapon( "cz75dw_zm" );
include_weapon( "cz75dw_upgraded_zm", false );
include_weapon( "ithaca_zm", false );
include_weapon( "ithaca_upgraded_zm", false );
include_weapon( "rottweil72_zm", false );
include_weapon( "rottweil72_upgraded_zm", false );
include_weapon( "spas_zm" );
include_weapon( "spas_upgraded_zm", false );
include_weapon( "hs10_zm" );
include_weapon( "hs10_upgraded_zm", false );
include_weapon( "aug_acog_zm" );
include_weapon( "aug_acog_mk_upgraded_zm", false );
include_weapon( "galil_zm" );
include_weapon( "galil_upgraded_zm", false );
include_weapon( "commando_zm" );
include_weapon( "commando_upgraded_zm", false );
include_weapon( "fnfal_zm" );
include_weapon( "fnfal_upgraded_zm", false );
include_weapon( "dragunov_zm" );
include_weapon( "dragunov_upgraded_zm", false );
include_weapon( "l96a1_zm" );
include_weapon( "l96a1_upgraded_zm", false );
include_weapon( "rpk_zm" );
include_weapon( "rpk_upgraded_zm", false );
include_weapon( "hk21_zm" );
include_weapon( "hk21_upgraded_zm", false );
include_weapon( "m72_law_zm" );
include_weapon( "m72_law_upgraded_zm", false );
include_weapon( "china_lake_zm" );
include_weapon( "china_lake_upgraded_zm", false );
include_weapon( "zombie_black_hole_bomb" );
include_weapon( "zombie_nesting_dolls" );
include_weapon( "ray_gun_zm" );
include_weapon( "ray_gun_upgraded_zm", false );
include_weapon( "thundergun_zm" );
include_weapon( "thundergun_upgraded_zm", false );
include_weapon( "crossbow_explosive_zm" );
include_weapon( "crossbow_explosive_upgraded_zm", false );
include_weapon( "knife_ballistic_zm", true );
include_weapon( "knife_ballistic_upgraded_zm", false );
include_weapon( "knife_ballistic_bowie_zm", false );
include_weapon( "knife_ballistic_bowie_upgraded_zm", false );
}
vista_rockets()
{
all_rockets = getentarray(0,"vista_rocket","targetname");
rockets = array_randomize(all_rockets);
for(i=0;i<rockets.size;i++)
{
level thread rocket_launch(rockets[i]);
wait(randomintrange(60,300));
}
}
rocket_launch(rocket)
{
wait(.1);
rocket moveto(rocket.origin + (0,0,50000),50,45);
rocket waittill("movedone");
rocket delete();
}
closest_point_on_line_to_point( Point, LineStart, LineEnd )
{
LineMagSqrd = lengthsquared(LineEnd - LineStart);
t = ( ( ( Point[0] - LineStart[0] ) * ( LineEnd[0] - LineStart[0] ) ) +
( ( Point[1] - LineStart[1] ) * ( LineEnd[1] - LineStart[1] ) ) +
( ( Point[2] - LineStart[2] ) * ( LineEnd[2] - LineStart[2] ) ) ) /
( LineMagSqrd );
if( t < 0.0 )
{
return LineStart;
}
else if( t > 1.0 )
{
return LineEnd;
}
else
{
start_x = LineStart[0] + t * ( LineEnd[0] - LineStart[0] );
start_y = LineStart[1] + t * ( LineEnd[1] - LineStart[1] );
start_z = LineStart[2] + t * ( LineEnd[2] - LineStart[2] );
return (start_x,start_y,start_z);
}
}
plane_position_updater (fake_ent, plane)
{
apex = 5000;
soundid = -1;
dx = undefined;
last_time = undefined;
last_pos = undefined;
start_time = 0;
while(IsDefined(plane))
{
setfakeentorg(0, fake_ent, plane.origin);
if((soundid < 0) && isdefined(last_pos))
{
dx = plane.origin - last_pos;
if(length(dx) > .01)
{
velocity = dx / (getrealtime()-last_time);
assert(isdefined(velocity));
players = getlocalplayers();
assert(isdefined(players));
other_point = plane.origin + (velocity * 100000);
player_origin = players[0] GetOrigin();
if( !isDefined( player_origin ) )
{
continue;
}
point = closest_point_on_line_to_point(player_origin, plane.origin, other_point );
assert(isdefined(point));
dist = Distance( point, plane.origin );
assert(isdefined(dist));
time = dist / length(velocity);
assert(isdefined(time));
if(time < apex)
{
soundid = playloopsound(0, fake_ent, "veh_mig_flyby", 0 );
playsound (0, "veh_mig_flyby_lfe", (0,0,0));
start_time = getRealTime();
}
}
}
last_pos = plane.origin;
last_time = GetRealTime();
if(start_time != 0)
{
}
wait(0.1);
}
deletefakeent(0, fake_ent);
}
migs_fly_by()
{
points = getstructarray("spawn_flyby","targetname");
while(1)
{
point = random(points);
planes = [];
fake_ent_planes = [];
planes[0] = spawn(0,point.origin,"script_origin");
planes[0] setmodel("t5_veh_jet_mig17");
planes[0].angles = point.angles;
fake_ent_planes[0] = spawnfakeent( 0 );
wait(.1);
if(randomint(100) > 50 )
{
planes[1] = spawn(0,point.origin + ( -1100,0,0),"script_origin");
planes[1].angles = point.angles;
planes[1] setmodel("t5_veh_jet_mig17");
fake_ent_planes[1] = spawnfakeent( 0 );
wait(.1);
if(randomint(100) > 50 )
{
planes[2] = spawn(0,point.origin + ( 1100,0,0),"script_origin");
planes[2].angles = point.angles;
planes[2] setmodel("t5_veh_jet_mig17");
fake_ent_planes[2] = spawnfakeent( 0 );
wait(.1);
}
}
for(i=0;i<planes.size;i++)
{
playfxontag(0,level._effect["mig_trail"],planes[i],"tag_engine");
planes[i] rotateto(point.angles,.05);
forward = anglestoforward (point.angles);
moveto_spot = vector_scale_2d(forward,50000);
planes[i] moveto( moveto_spot,20);
if(planes.size > 2 && i == 0)
{
wait(.35);
}
}
playsound (0, "veh_mig_flyby_2d", (0,0,0));
for(i=0;i<fake_ent_planes.size;i++)
{
thread plane_position_updater (fake_ent_planes[i], planes[i]);
}
planes[0] waittill("movedone");
for(i=0;i<planes.size;i++)
{
planes[i] delete();
}
wait(randomintrange(60, 180));
}
}
vector_scale_2d(vec, scale)
{
vec = (vec[0] * scale, vec[1] * scale, vec[2] );
return vec;
}
radar_dish_init()
{
radar_dish = GetEntArray(0, "zombie_cosmodrome_radar_dish", "targetname");
if(IsDefined(radar_dish))
{
for ( i = 0; i < radar_dish.size; i++ )
{
radar_dish[i] thread radar_dish_rotate();
}
}
}
radar_dish_rotate()
{
wait(0.1);
while(true)
{
self rotateyaw( 360, 10 );
self waittill("rotatedone");
}
}
nml_electric_barriers( client_num )
{
level endon("nm0");
while (1)
{
buildup_spots = GetStructArray( "nml_build_sparks", "targetname" );
for( i=0; i< buildup_spots.size; i++ )
{
level waittill( "eb+" );
angles = (0, 0, 0);
if ( IsDefined( buildup_spots[i].angles ) )
{
angles = buildup_spots[i].angles;
}
buildup_spots[i].fx = SpawnFx( client_num, level._effect[ "zombie_power_switch" ], buildup_spots[i].origin, 0, AnglesToForward(angles), AnglesToUp(angles) );
triggerfx( buildup_spots[i].fx );
}
level waittill( "eb1" );
for( i=0; i<buildup_spots.size; i++ )
{
if ( IsDefined( buildup_spots[i].target ) )
{
buildup_spots[i] thread perk_wire_fx_client( client_num, "wire_fx_done" );
}
}
wait( 0.5 );
for( i=0; i<buildup_spots.size; i++ )
{
if ( IsDefined( buildup_spots[i].target ) )
{
buildup_spots[i] thread perk_wire_fx_client( client_num, "wire_fx_done" );
}
}
wait( 0.5 );
for( i=0; i<buildup_spots.size; i++ )
{
if ( IsDefined( buildup_spots[i].fx ) )
{
buildup_spots[i].fx Delete();
if ( IsDefined( buildup_spots[i].target ) )
{
buildup_spots[i] thread perk_wire_fx_client( client_num, "wire_fx_done" );
}
}
}
trap_spots = GetStructArray( "nml_trap_sparks", "targetname" );
for( i=0; i<trap_spots.size; i++ )
{
angles = (0, 0, 0);
if ( IsDefined( trap_spots[i].angles ) )
{
angles = trap_spots[i].angles;
}
trap_spots[i].fx = SpawnFx( client_num, level._effect[ "elec_terminal" ], trap_spots[i].origin, 0, AnglesToForward(angles), AnglesToUp(angles) );
triggerfx( trap_spots[i].fx );
}
level waittill( "eb0" );
for( i=0; i<trap_spots.size; i++ )
{
if ( IsDefined(trap_spots[i].fx) )
{
trap_spots[i].fx Delete();
}
}
}
}
nml_fx_monitor( client_num )
{
while (1)
{
level thread nml_electric_barriers( client_num );
level waittill("nm0");
buildup_spots = GetStructArray( "nml_build_sparks", "targetname" );
for( i=0; i<buildup_spots.size; i++ )
{
if ( IsDefined( buildup_spots[i].fx ) )
{
buildup_spots[i].fx Delete();
}
}
trap_spots = GetStructArray( "nml_trap_sparks", "targetname" );
for( i=0; i<trap_spots.size; i++ )
{
if ( IsDefined(trap_spots[i].fx) )
{
trap_spots[i].fx Delete();
}
}
}
}
perk_wire_fx_client( client_num, done_notify )
{
println( "perk_wire_fx_client for client #"+client_num );
targ = GetStruct(self.target, "targetname");
if ( !IsDefined( targ ) )
{
return;
}
mover = Spawn( client_num, targ.origin, "script_model" );
mover SetModel( "tag_origin" );
fx = PlayFxOnTag( client_num, level._effect["wire_spark"], mover, "tag_origin" );
while(isDefined(targ))
{
if(isDefined(targ.target))
{
println( "perk_wire_fx_client#"+client_num+" next target: "+targ.target );
target = getstruct(targ.target,"targetname");
mover MoveTo( target.origin, 0.5 );
wait( 0.5 );
targ = target;
}
else
{
break;
}
}
level notify( "spark_done" );
mover Delete();
level notify( done_notify );
}
tele_spark_audio_mover(fake_ent)
{
level endon( "spark_done" );
while (1)
{
realwait(0.05);
setfakeentorg(0, fake_ent, self.origin);
}
}
actor_flag_soulpull_handler( client_num, set, newEnt )
{
if ( set )
{
self thread soul_pull( client_num );
}
}
soul_pull( client_num )
{
println("*** ACTOR soul_pull . pos="+self.origin+" ; to "+level.nml_spark_pull.origin );
mover = Spawn( client_num, self.origin, "script_model" );
mover SetModel( "tag_origin" );
fx = PlayFxOnTag( client_num, level._effect["soul_spark"], mover, "tag_origin" );
wait( 1.0 );
mover MoveTo( level.nml_spark_pull.origin, 3.0 );
wait( 3.0 );
mover Delete();
}
init_cosmodrome_box_screens()
{
level._cosmodrome_fire_sale = array( "p_zom_monitor_csm_screen_fsale1", "p_zom_monitor_csm_screen_fsale2" );
level.magic_box_tv_off = array( "p_zom_monitor_csm_screen_off" );
level.magic_box_tv_on = array( "p_zom_monitor_csm_screen_on" );
level.magic_box_tv_start_1 = array( "p_zom_monitor_csm_screen_obsdeck" );
level.magic_box_tv_roof_connector = array( "p_zom_monitor_csm_screen_labs" );
level.magic_box_tv_centrifuge = array( "p_zom_monitor_csm_screen_centrifuge" );
level.magic_box_tv_base_entry = array( "p_zom_monitor_csm_screen_enter" );
level.magic_box_tv_storage = array( "p_zom_monitor_csm_screen_storage" );
level.magic_box_tv_catwalks = array( "p_zom_monitor_csm_screen_catwalk" );
level.magic_box_tv_north_pass = array( "p_zom_monitor_csm_screen_topack" );
level.magic_box_tv_warehouse = array( "p_zom_monitor_csm_screen_warehouse" );
level.magic_box_tv_random = array( "p_zom_monitor_csm_screen_logo" );
level._box_locations = array( level.magic_box_tv_start_1,
level.magic_box_tv_roof_connector,
level.magic_box_tv_centrifuge,
level.magic_box_tv_base_entry,
level.magic_box_tv_storage,
level.magic_box_tv_catwalks,
level.magic_box_tv_north_pass,
level.magic_box_tv_warehouse );
level._custom_box_monitor = ::cosmodrome_screen_switch;
}
cosmodrome_screen_switch( client_num, state, oldState )
{
cosmodrome_tv_init( client_num );
if( state == "n" )
{
if( level._power_on == false )
{
screen_to_display = level.magic_box_tv_off;
}
else
{
screen_to_display = level.magic_box_tv_on;
}
}
else if( state == "f" )
{
screen_to_display = level._cosmodrome_fire_sale;
}
else
{
array_number = Int( state );
screen_to_display = level._box_locations[ array_number ];
}
stop_notify = "stop_tv_swap";
for( i = 0; i < level.cosmodrome_tvs[client_num].size; i++ )
{
tele = level.cosmodrome_tvs[client_num][i];
tele notify( stop_notify );
wait( 0.2 );
tele thread magic_box_screen_swap( screen_to_display, "stop_tv_swap" );
tele thread play_magic_box_tv_audio( state );
}
}
cosmodrome_tv_init( client_num )
{
if ( !isdefined( level.cosmodrome_tvs ) )
{
level.cosmodrome_tvs = [];
}
if ( isdefined( level.cosmodrome_tvs[client_num] ) )
{
return;
}
level.cosmodrome_tvs[client_num] = GetEntArray( client_num, "model_cosmodrome_box_screens", "targetname" );
for( i = 0; i < level.cosmodrome_tvs[client_num].size; i++ )
{
tele = level.cosmodrome_tvs[client_num][i];
tele SetModel( level.magic_box_tv_off[0] );
wait( 0.1 );
}
}
magic_box_screen_swap( model_array, endon_notify )
{
self endon( endon_notify );
while( true )
{
for( i = 0; i < model_array.size; i++ )
{
self SetModel( model_array[i] );
wait( 3.0 );
}
if( 3 > RandomInt( 100 ) && IsDefined( level.magic_box_tv_random ) )
{
self SetModel( level.magic_box_tv_random[ RandomInt( level.magic_box_tv_random.size ) ] );
wait( 2.0 );
}
wait( 1.0 );
}
}
play_magic_box_tv_audio( state )
{
alias = "amb_tv_static";
if( state == "n" )
{
if( level._power_on == false )
{
alias = undefined;
}
else
{
alias = "amb_tv_static";
}
}
else if( state == "f" )
{
alias = "mus_fire_sale";
}
else
{
alias = "amb_tv_static";
}
if( !IsDefined(alias) )
{
self stoploopsound( .5 );
}
else
{
self PlayLoopSound( alias, .5 );
}
}
monkey_start_monitor()
{
while( 1 )
{
level waittill( "monkey_start" );
players = GetLocalPlayers();
for( i = 0; i < players.size; i++ )
{
players[i] clientscripts\_zombiemode::zombie_vision_set_apply( level._visionset_map_monkey, level._visionset_priority_map_monkey );
players[i] fog_apply( "monkey",level._fog_settings_monkey_priority );
}
level._effect["eye_glow"] = level._effect["monkey_eye_glow"];
}
}
monkey_stop_monitor()
{
while( 1 )
{
level waittill( "monkey_stop" );
players = GetLocalPlayers();
for( i = 0; i < players.size; i++ )
{
players[i] clientscripts\_zombiemode::zombie_vision_set_remove( level._visionset_map_monkey );
players[i] fog_remove( "monkey" );
}
level._effect["eye_glow"] = level._effect["zombie_eye_glow"];
}
}
monkey_land_on()
{
while ( 1 )
{
level waittill( "MLO" );
players = GetLocalPlayers();
for( i = 0; i < players.size; i++ )
{
players[i] clientscripts\_zombiemode::zombie_vision_set_apply( level._visionset_map_monkeylandon, level._visionset_priority_map_monkeylandon, level._visionset_monkey_transition_time_on );
}
wait( 0.05 );
}
}
monkey_land_off()
{
while ( 1 )
{
level waittill( "MLF" );
players = GetLocalPlayers();
for( i = 0; i < players.size; i++ )
{
players[i] clientscripts\_zombiemode::zombie_vision_set_remove( level._visionset_map_monkeylandon, level._visionset_monkey_transition_time_off );
}
wait( 0.05 );
}
}
cosmo_on_player_connect( int_local_client_num )
{
self endon( "disconnect" );
while( !ClientHasSnapshot( int_local_client_num ) )
{
wait( 0.05 );
}
if( int_local_client_num != 0 )
{
return;
}
players = GetLocalPlayers();
for( i = 0; i < players.size; i++ )
{
players[i] thread cosmodrome_first_vision_set( i );
}
}
cosmo_on_player_spawned( int_local_client_num )
{
self endon( "disconnect" );
while ( !self hasdobj( int_local_client_num ) )
{
wait( 0.05 );
}
if( int_local_client_num != 0 )
{
return;
}
players = GetLocalPlayers();
for( i = 0; i < players.size; i++ )
{
players[i] cosmodrome_vision_set( i );
players[i] fog_apply( "normal", level._fog_settings_default_priority );
}
}
cosmodrome_first_vision_set( int_client_num )
{
self endon( "disconnect" );
self clientscripts\_zombiemode::zombie_vision_set_apply( level._visionset_map_begin, level._visionset_priority_map_begin, 0.1, int_client_num );
self clientscripts\_zombiemode::zombie_vision_set_apply( level._visionset_map_nopower, level._visionset_priority_map_nopower, 0.1, int_client_num );
level waittill( "ZID" );
self clientscripts\_zombiemode::zombie_vision_set_remove( level._visionset_map_begin, 8.5, int_client_num );
}
cosmodrome_vision_set( int_client_num )
{
self endon( "disconnect" );
if( level._power_on == true )
{
self thread clientscripts\_zombiemode::zombie_vision_set_apply( level._visionset_map_poweron, level._visionset_priority_map_poweron, level._visionset_zombie_transition_time, int_client_num );
}
else
{
self thread clientscripts\_zombiemode::zombie_vision_set_apply( level._visionset_map_nopower, level._visionset_priority_map_nopower, 0, int_client_num );
}
}
cosmodrome_power_vision_set_swap()
{
level waittill( "ZPO" );
players = GetLocalPlayers();
for( i = 0; i < players.size; i++ )
{
players[i] clientscripts\_zombiemode::zombie_vision_set_apply( level._visionset_map_sudden_power, level._visionset_priority_map_sudden_power, level._visionset_zombie_sudden_power_transition_time, i );
}
wait( 1.0 );
players = GetLocalPlayers();
for( i = 0; i < players.size; i++ )
{
players[i] clientscripts\_zombiemode::zombie_vision_set_apply( level._visionset_map_poweron, level._visionset_priority_map_poweron, level._visionset_zombie_transition_time, i );
}
}
catwalk_lander_doors()
{
level thread catwalk_lander_doors_only();
while(1)
{
level waittill("CW_O");
level thread open_lander_bay_doors("catwalk_zip_door");
level waittill("CW_C");
level thread close_lander_bay_doors("catwalk_zip_door");
}
}
catwalk_lander_doors_only()
{
while(1)
{
level waittill("CWD");
level thread open_lander_bay_doors_only("catwalk_zip_door");
}
}
base_entry_lander_doors()
{
level thread base_entry_lander_doors_only();
while(1)
{
level waittill("BE_O");
level thread open_lander_bay_doors("base_entry_zip_door");
level waittill("BE_C");
level thread close_lander_bay_doors("base_entry_zip_door");
}
}
base_entry_lander_doors_only()
{
while(1)
{
level waittill("BED");
level thread open_lander_bay_doors_only("base_entry_zip_door");
}
}
storage_lander_doors()
{
level thread storage_lander_doors_only();
while(1)
{
level waittill("S_O");
level thread open_lander_bay_doors("storage_zip_door");
level waittill("S_C");
level thread close_lander_bay_doors("storage_zip_door");
}
}
storage_lander_doors_only()
{
while(1)
{
level waittill("SOD");
level thread open_lander_bay_doors_only("storage_zip_door");
}
}
centrifuge_lander_doors()
{
level thread centrifuge_lander_doors_only();
while(1)
{
level waittill("CF_O");
level thread open_lander_bay_doors("centrifuge_zip_door");
level waittill("CF_C");
level thread close_lander_bay_doors("centrifuge_zip_door");
}
}
centrifuge_lander_doors_only()
{
while(1)
{
level waittill("CFD");
level thread open_lander_bay_doors_only("centrifuge_zip_door");
}
}
open_lander_bay_doors(door_name)
{
println("***** -- Opening door");
players = GetLocalPlayers();
sound_count = 0;
for(x=0;x<players.size;x++)
{
doors = getentarray(x,door_name,"targetname");
for(i=0;i<doors.size;i++)
{
open_pos = getstruct(doors[i].target, "targetname");
start_pos = getstruct(open_pos.target, "targetname");
if( !IsDefined(doors[i].script_noteworthy))
{
doors[i] moveto(start_pos.origin, 1.0);
if( sound_count == 0 )
{
PlaySound( 0, "zmb_lander_door", doors[i].origin );
sound_count++;
}
}
}
}
level waittill("LL");
println("raising_shaft_cap");
players = GetLocalPlayers();
sound_count = 0;
for(x=0;x<players.size;x++)
{
doors = getentarray(x,door_name,"targetname");
for(i=0;i<doors.size;i++)
{
open_pos = getstruct(doors[i].target, "targetname");
start_pos = getstruct(open_pos.target, "targetname");
if(IsDefined(doors[i].script_noteworthy))
{
doors[i] moveto(open_pos.origin, 1.0);
if( sound_count == 0 )
{
PlaySound( 0, "zmb_lander_door", doors[i].origin );
sound_count++;
}
}
}
}
}
open_lander_bay_doors_only(door_name)
{
players = GetLocalPlayers();
sound_count = 0;
for(x=0;x<players.size;x++)
{
doors = getentarray(x,door_name,"targetname");
for(i=0;i<doors.size;i++)
{
open_pos = getstruct(doors[i].target, "targetname");
if( !IsDefined(doors[i].script_noteworthy))
{
doors[i] moveto(open_pos.origin, 1.0);
if( sound_count == 0 )
{
PlaySound( 0, "zmb_lander_door", doors[i].origin );
sound_count++;
}
}
}
}
}
close_lander_bay_doors(door_name)
{
println("***** -- closing door");
players = GetLocalPlayers();
sound_count = 0;
for(x=0;x<players.size;x++)
{
doors = getentarray(x,door_name,"targetname");
for(i=0;i<doors.size;i++)
{
open_pos = getstruct(doors[i].target, "targetname");
start_pos = getstruct(open_pos.target, "targetname");
if( IsDefined(doors[i].script_noteworthy) )
{
doors[i] moveto(start_pos.origin, 1.0);
if( sound_count == 0 )
{
PlaySound( 0, "zmb_lander_door", doors[i].origin );
sound_count++;
}
}
}
}
level waittill("LG");
players = GetLocalPlayers();
sound_count = 0;
for(x=0;x<players.size;x++)
{
doors = getentarray(x,door_name,"targetname");
for(i=0;i<doors.size;i++)
{
open_pos = getstruct(doors[i].target, "targetname");
start_pos = getstruct(open_pos.target, "targetname");
if(!IsDefined(doors[i].script_noteworthy) )
{
doors[i] moveto(start_pos.origin, 1.0);
if( sound_count == 0 )
{
PlaySound( 0, "zmb_lander_door", doors[i].origin );
sound_count++;
}
}
}
}
}
rocket_fx( localClientNum, set,newEnt )
{
if ( !set )
return;
PlayFxOnTag( localClientNum, level._effect["rocket_blast_trail"], self, "tag_engine" );
}
lander_engine_fx(localClientNum, set,newEnt)
{
player = getlocalplayers()[localClientNum];
if(set)
{
if(isDefined(player.lander_fx))
{
StopFX(localClientNum,player.lander_fx);
StopFX(localClientNum,player.lander_fx1);
StopFX(localClientNum,player.lander_fx2);
StopFX(localClientNum,player.lander_fx3);
StopFX(localClientNum,player.lander_fx4);
}
player.lander_fx = PlayFxOnTag( localClientNum, level._effect["lunar_lander_thruster_leg"], self, "tag_engine01" );
player.lander_fx1 = PlayFxOnTag( localClientNum, level._effect["lunar_lander_thruster_leg"], self, "tag_engine02" );
player.lander_fx2 = PlayFxOnTag( localClientNum, level._effect["lunar_lander_thruster_leg"], self, "tag_engine03" );
player.lander_fx3 = PlayFxOnTag( localClientNum, level._effect["lunar_lander_thruster_leg"], self, "tag_engine04" );
player.lander_fx4 = PlayFxOnTag( localClientNum, level._effect["lunar_lander_thruster_bellow"], self, "tag_bellow" );
self thread start_ground_sounds();
}
else
{
if(isDefined(player.lander_fx))
{
StopFX(localClientNum,player.lander_fx);
StopFX(localClientNum,player.lander_fx1);
StopFX(localClientNum,player.lander_fx2);
StopFX(localClientNum,player.lander_fx3);
StopFX(localClientNum,player.lander_fx4);
}
}
}
start_ground_sounds()
{
self endon( "entityshutdown" );
level endon( "save_restore" );
self notify( "start_ground_sounds" );
self.stop_ground_sounds = false;
trace = undefined;
self.ground_sound_ent = spawn(0, (0,0,0), "script_origin" );
pre_origin = ( 100000, 100000, 100000 );
while( IsDefined( self ) )
{
wait( .15 );
if( IsDefined( self.stop_ground_sounds ) && self.stop_ground_sounds )
{
if( IsDefined( self.ground_sound_ent ) )
self.ground_sound_ent StopLoopSound( 2 );
return;
}
if( DistanceSquared( pre_origin, self gettagorigin( "tag_bellow" ) ) < 144 )
{
continue;
}
pre_origin = self gettagorigin( "tag_bellow" );
trace = bullettrace( self gettagorigin( "tag_bellow" ) , self gettagorigin( "tag_bellow" ) -( 0, 0, 100000 ), false, undefined );
if( !IsDefined( trace ) )
continue;
if( !IsDefined( trace["position"] ) )
{
self.ground_sound_ent StopLoopSound( 2 );
continue;
}
self.ground_sound_ent.origin = trace["position"] + (0,0,30);
self.ground_sound_ent PlayLoopSound( "zmb_lander_ground_sounds", 3 );
}
}
end_ground_sounds()
{
self endon( "start_ground_sounds" );
self.stop_ground_sounds = true;
wait(3);
self.ground_sound_ent Delete();
}
lander_status_light(localClientNum, set,newEnt)
{
if(isDefined(self.status_light))
{
StopFX(localclientNum,self.status_light);
}
if(set)
{
self.status_light = PlayFxOnTag( localClientNum, level._effect["lander_red"], self, "tag_origin" );
}
else
{
self.status_light = PlayFxOnTag( localClientNum, level._effect["lander_green"], self, "tag_origin" );
}
}
init_rocket_debris()
{
players = GetLocalPlayers();
for(x=0;x<players.size;x++)
{
rocket_debris = getentarray(x,"rocket_explode_debris","targetname");
for(i=0;i<rocket_debris.size;i++)
{
rocket_debris[i] hide();
}
}
level waittill("RX");
players = GetLocalPlayers();
for(x=0;x<players.size;x++)
{
players[x] thread rain_debris(x);
}
}
get_random_spot_in_player_view(fwd_min,fwd_max,side_min,side_max)
{
fwd = AnglesToForward( self.angles );
fwd = vector_scale( fwd, RandomIntRange( fwd_min, fwd_max ) );
if( randomint(100) > 50 )
{
side = AnglesToRight(self.angles);
}
else
{
side = AnglesToRight(self.angles) * - 1;
}
side = vector_scale( side, RandomIntRange( side_min, side_max ) );
point = self.origin + fwd + side;
trace = bullettrace(point,point + (0,0,-10000),false,undefined);
return trace["position"];
}
rain_debris(clientnum)
{
rocket_debris = getentarray(clientnum,"rocket_explode_debris","targetname");
for(i=0;i<10;i++)
{
spot = self get_random_spot_in_player_view(1000,3500,50,1000);
debris = spawn(clientnum,spot + (0,0,10000),"script_model");
debris.angles = (randomint(360),randomint(360),randomint(360));;
debris setmodel(random(rocket_debris).model);
debris thread debris_crash_and_burn(spot,clientnum,self);
wait(randomfloatrange(.5,1.5));
}
}
debris_crash_and_burn(spot,client,player)
{
playfxontag(client,level._effect["debris_trail"] ,self,"tag_origin");
self moveto(spot,3.1);
for(i=0;i<10;i++)
{
self rotateto( (randomint(360),randomint(360),randomint(360)),.3);
wait(.3);
}
wait(3.1);
player earthquake(0.4,0.5,self.origin,1200);
playfx( client, level._effect["debris_hit"], self.origin );
wait(1);
self delete();
}
setup_lander_screens(clientnum)
{
screens = GetEntArray( clientnum,"lander_screens","targetname");
for(i=0;i<screens.size;i++)
{
if(IsDefined(screens[i].model))
{
screens[i] SetModel("p_zom_cosmo_lunar_control_panel_dlc_on");
}
}
}
lander_at_station(station,clientnum)
{
if(isDefined(self.panel_fx))
{
StopFX(clientnum,self.panel_fx);
}
if(isDefined(self.lander_fx))
{
StopFX(clientnum,self.lander_fx);
}
switch(station)
{
case "baseentry":
self.panel_fx = PlayFxOnTag(clientnum,level._effect["panel_green"],self,"tag_location_3");
self.lander_location = self gettagorigin("tag_location_3");
self.lander_location_angles = self gettagangles("tag_location_3");
break;
case "storage":
self.panel_fx = PlayFxOnTag(clientnum,level._effect["panel_green"],self,"tag_location_1");
self.lander_location = self gettagorigin("tag_location_1");
self.lander_location_angles = self gettagangles("tag_location_1");
break;
case "catwalk":
self.panel_fx = PlayFxOnTag(clientnum,level._effect["panel_green"],self,"tag_location_2");
self.lander_location = self gettagorigin("tag_location_2");
self.lander_location_angles = self gettagangles("tag_location_2");
break;
case "centrifuge":
self.panel_fx = PlayFxOnTag(clientnum,level._effect["panel_green"],self,"tag_home");
self.lander_location = self gettagorigin("tag_home");
self.lander_location_angles = self gettagangles("tag_home");
break;
}
}
lander_move_fx(localClientNum, set,newEnt)
{
player = getlocalplayers()[localClientNum];
if(set)
{
player thread lander_station_move_lander_marker(localClientNum);
}
else
{
}
}
lander_station_move_lander_marker(localClientNum)
{
dest = undefined;
x= localClientNum;
screens = GetEntArray( x,"lander_screens","targetname");
for(i=0;i<screens.size;i++)
{
screen = screens[i];
if(isDefined(screen.lander_fx))
{
StopFX(x,screen.lander_fx);
}
if(isDefined(screen.panel_fx))
{
StopFX(x,screen.panel_fx);
}
if(!isDefined(screen.lander_fx_ent))
{
screen.lander_fx_ent = spawn(x,screen.lander_location,"script_origin");
screen.lander_fx_ent setmodel("tag_origin");
screen.lander_fx_ent.angles = screen.lander_location_angles;
}
screen.lander_fx = playfxontag(x,level._effect["panel_green"],screen.lander_fx_ent,"tag_origin");
switch(level.lander_dest_station)
{
case "base":
dest = screen gettagorigin("tag_location_3");
break;
case "storage":
dest = screen gettagorigin("tag_location_1");
break;
case "centrifuge":
dest = screen gettagorigin("tag_home");
break;
case "catwalk":
dest = screen gettagorigin("tag_location_2");
break;
}
screen.lander_fx_ent moveto(dest,10);
}
}
lander_station_think()
{
level thread lander_station_centrifuge_mon();
level thread lander_station_baseentry_mon();
level thread lander_station_storage_mon();
level thread lander_station_catwalk_mon();
level thread lander_station_centrifuge();
level thread lander_station_baseentry();
level thread lander_station_storage();
level thread lander_station_catwalk();
}
lander_station_centrifuge_mon()
{
while(1)
{
level waittill("LLCF");
level.lander_dest_station = "centrifuge";
}
}
lander_station_baseentry_mon()
{
while(1)
{
level waittill("LLBE");
level.lander_dest_station = "base";
}
}
lander_station_storage_mon()
{
while(1)
{
level waittill("LLSS");
level.lander_dest_station = "storage";
}
}
lander_station_catwalk_mon()
{
while(1)
{
level waittill("LLCW");
level.lander_dest_station = "catwalk";
}
}
lander_station_centrifuge()
{
while(1)
{
level waittill("LACF");
players = GetLocalPlayers();
for ( x=0; x<players.size; x++ )
{
screens = GetEntArray( x,"lander_screens","targetname");
for(i=0;i<screens.size;i++)
{
screens[i] lander_at_station("centrifuge",x);
}
}
}
}
lander_station_baseentry()
{
while(1)
{
level waittill("LABE");
players = GetLocalPlayers();
for ( x=0; x<players.size; x++ )
{
screens = GetEntArray( x,"lander_screens","targetname");
for(i=0;i<screens.size;i++)
{
screens[i] lander_at_station("baseentry",x);;
}
}
}
}
lander_station_storage()
{
while(1)
{
level waittill("LASS");
players = GetLocalPlayers();
for ( x=0; x<players.size; x++ )
{
screens = GetEntArray( x,"lander_screens","targetname");
for(i=0;i<screens.size;i++)
{
screens[i] lander_at_station("storage",x);
}
}
}
}
lander_station_catwalk()
{
while(1)
{
level waittill("LACW");
players = GetLocalPlayers();
for ( x=0; x<players.size; x++ )
{
screens = GetEntArray( x,"lander_screens","targetname");
for(i=0;i<screens.size;i++)
{
screens[i] lander_at_station("catwalk",x);
}
}
}
}
launch_panel_centrifuge_status(localClientNum, set,newEnt)
{
if(set)
{
if(isDefined(self.centrifuge_status))
{
StopFX(localClientNum,self.centrifuge_status);
}
self.centrifuge_status = PlayFxOnTag(localClientNum,level._effect["panel_red"],self,"tag_home");
}
else
{
if(isDefined(self.centrifuge_status))
{
StopFX(localClientNum,self.centrifuge_status);
}
self.centrifuge_status = PlayFxOnTag(localClientNum,level._effect["panel_green"],self,"tag_home");
}
}
launch_panel_storage_status(localClientNum, set,newEnt)
{
if(set)
{
if(localClientNum == 0)
{
level.rocket_num++;
}
level thread rocket_launch_display(localClientNum);
}
else
{
}
}
launch_panel_baseentry_status(localClientNum, set,newEnt)
{
if(set)
{
if(localClientNum == 0)
{
level.rocket_num++;
}
level thread rocket_launch_display(localClientNum);
}
else
{
}
}
launch_panel_catwalk_status(localClientNum, set,newEnt)
{
if(set)
{
if(localClientNum == 0)
{
level.rocket_num++;
}
level thread rocket_launch_display(localClientNum);
}
else
{
}
}
rocket_launch_display(localClientNum)
{
level waittill("LG");
wait(2);
rocket_screens = GetEntArray(localClientNum,"rocket_launch_sign","targetname");
model = rocket_screens[0].model;
switch(level.rocket_num)
{
case 1:
model = "p_zom_rocket_sign_02";
break;
case 2:
model = "p_zom_rocket_sign_03";
break;
case 3:
model = "p_zom_rocket_sign_04";
break;
}
array_thread(rocket_screens,::update_rocket_display,model);
}
update_rocket_display(on_model)
{
old_model = self.model;
for(i=0;i<3;i++)
{
self SetModel(on_model);
wait(.35);
self SetModel(old_model);
wait(.35);
}
self SetModel(on_model);
}
lander_rumble_and_quake(localClientNum, set,newEnt)
{
player = getlocalplayers()[localClientNum];
player endon("death");
player endon("disconnect");
if ( player IsSpectating() )
{
return;
}
if(set)
{
player Earthquake( RandomFloatRange( 0.2, 0.3 ), RandomFloatRange(2, 2.5), player.origin, 150 );
player PlayRumbleOnEntity(localClientNum,"artillery_rumble");
self thread do_lander_rumble_quake(localClientNum);
}
else
{
self thread end_ground_sounds();
player Earthquake( RandomFloatRange( 0.3, 0.4 ), RandomFloatRange(0.5, 0.6), self.origin, 150 );
wait( 0.6 );
if(IsDefined(player) && IsDefined(self))
{
player EarthQuake( RandomFloatRange( 0.1, 0.2 ), RandomFloatRange(0.2, 0.3), self.origin, 150 );
}
level notify("stop_lander_rumble");
}
}
do_lander_rumble_quake(localClientNum)
{
level endon("stop_lander_rumble");
player = getlocalplayers()[localClientNum];
player endon("death");
player endon("disconnect");
while(1)
{
if(!isDefined(self.origin) || !isDefined(player.origin))
{
wait(.05);
continue;
}
if(distancesquared ( player.origin,self.origin) > (1500 * 1500))
{
wait(.1);
continue;
}
dist = distancesquared ( player.origin,self.origin);
if(dist > 750*750 )
{
player Earthquake( RandomFloatRange( 0.1, 0.15 ), RandomFloatRange(0.15, 0.16), self.origin, 1000 );
rumble = "slide_rumble";
}
else
{
player Earthquake( RandomFloatRange( 0.15, 0.2 ), RandomFloatRange(0.15, 0.16), self.origin, 750 );
rumble = "damage_light";
}
player PlayRumbleOnEntity(localClientNum,rumble);
wait(.1);
}
}
centrifuge_rumble_control( local_client_num, set, newEnt )
{
if( local_client_num != 0 )
{
return;
}
if( set )
{
players = GetLocalPlayers();
for( i = 0; i < players.size; i++ )
{
players[i] thread centrifuge_rumble_when_close( self, i );
}
}
else
{
level notify( "centrifuge_rumble_done" );
}
}
centrifuge_rumble_when_close( ent_centrifuge, int_client_num )
{
self endon( "death" );
self endon( "disconnect" );
level endon( "centrifuge_rumble_done" );
rumble_range = 600*600;
centrifuge_rumble = "damage_heavy";
client_num = undefined;
while( IsDefined(self) )
{
distance_to_centrifuge = DistanceSquared( self.origin, ent_centrifuge.origin );
if( ( distance_to_centrifuge < rumble_range ) && IsDefined(self))
{
if( IsDefined( int_client_num ) )
{
self PlayRumbleOnEntity( int_client_num, centrifuge_rumble );
}
}
if( ( distance_to_centrifuge > rumble_range ) )
{
if( IsDefined( int_client_num ) && IsDefined(self))
{
self StopRumble( int_client_num, centrifuge_rumble );
}
}
wait( 0.1 );
}
}
centrifuge_clean_rumble( int_client_num )
{
self endon( "death" );
self endon( "disconnect" );
self StopRumble( int_client_num, "damage_heavy" );
}
centrifuge_warning_lights_init( local_client_num, set, newEnt )
{
while( !self hasdobj( local_client_num ) )
{
wait(0.1);
}
if( local_client_num != 0 )
{
return;
}
players = GetLocalPlayers();
for( i = 0; i < players.size; i++ )
{
self centrifuge_warning_lights_off( i );
}
if( set )
{
players = GetLocalPlayers();
for( i = 0; i < players.size; i++ )
{
self centrifuge_fx_spot_init( i );
self centrifuge_warning_lights_on( i );
}
}
}
monkey_lander_fx_on()
{
self endon("switch_off_monkey_lander_fx");
PlaySound(0, "zmb_ape_intro_whoosh", self.origin);
realWait( 2.5 );
self.fx = [];
players = getlocalplayers();
ent_num = self GetEntityNumber();
for(i = 0; i < players.size; i ++)
{
player = players[i];
if(!IsDefined(player._monkey_lander_fx))
{
player._monkey_lander_fx = [];
}
if(IsDefined(player._monkey_lander_fx[ent_num]))
{
DeleteFX(i, player._monkey_lander_fx[ent_num]);
player._monkey_lander_fx[ent_num] = undefined;
}
player._monkey_lander_fx[ent_num] = PlayFXOnTag(i, level._effect["monkey_trail"],self,"tag_origin");
}
}
monkey_lander_delay_fx_off()
{
realWait( 5 );
self notify("switch_off_monkey_lander_fx");
players = getlocalplayers();
ent_num = self GetEntityNumber();
for(i = 0; i < players.size; i ++)
{
player = players[i];
if(IsDefined(player._monkey_lander_fx[ent_num]))
{
DeleteFX(i, player._monkey_lander_fx[ent_num]);
player._monkey_lander_fx[ent_num] = undefined;
}
}
}
monkey_lander_fx_off()
{
self thread monkey_lander_delay_fx_off();
players = getlocalplayers();
ent_num = self GetEntityNumber();
for(i = 0; i < players.size; i ++)
{
player = players[i];
PlayFX(i, level._effect["monkey_spawn"], self.origin );
PlayRumbleOnPosition( i, "explosion_generic", self.origin );
player Earthquake( 0.5, 0.5, player.origin, 1000 );
}
PlaySound( 0, "zmb_ape_intro_land", self.origin );
level notify( "MLO" );
wait( 0.5 );
level notify ( "MLF" );
}
monkey_lander_fx(local_client_num, set, newEnt)
{
if( local_client_num != 0 )
{
return;
}
while( !self hasdobj( local_client_num ) )
{
wait(0.1);
}
if(set)
{
self thread monkey_lander_fx_on();
}
else
{
self thread monkey_lander_fx_off();
}
}
centrifuge_fx_spot_init( int_client_num )
{
self._centrifuge_lights_[int_client_num] = [];
self._centrifuge_lights_[int_client_num] = add_to_array( self._centrifuge_lights_[int_client_num], "tag_light_bk_top", false );
self._centrifuge_lights_[int_client_num] = add_to_array( self._centrifuge_lights_[int_client_num], "tag_light_fnt_top", false );
self._centrifuge_sparks_[int_client_num] = [];
self._centrifuge_sparks_[int_client_num] = add_to_array( self._centrifuge_sparks_[int_client_num], "tag_light_bk_bttm", false );
self._centrifuge_sparks_[int_client_num] = add_to_array( self._centrifuge_sparks_[int_client_num], "tag_light_fnt_bttm", false );
self._centrifuge_steams_[int_client_num] = [];
self._centrifuge_steams_[int_client_num] = add_to_array( self._centrifuge_steams_[int_client_num], "tag_vent_bk_btm", false );
self._centrifuge_steams_[int_client_num] = add_to_array( self._centrifuge_steams_[int_client_num], "tag_vent_top_btm", false );
self._centrifuge_light_mdls_[int_client_num] = [];
self._centrifuge_fx_setup = true;
}
centrifuge_warning_lights_on( client_num )
{
for( i = 0; i < self._centrifuge_lights_[client_num].size; i++ )
{
temp_mdl = Spawn( client_num, self GetTagOrigin( self._centrifuge_lights_[client_num][i] ), "script_model" );
temp_mdl.angles = self GetTagAngles( self._centrifuge_lights_[client_num][i] );
temp_mdl SetModel( "tag_origin" );
temp_mdl LinkTo( self, self._centrifuge_lights_[client_num][i] );
PlayFXOnTag( client_num, level._effect[ "centrifuge_warning_light" ], temp_mdl, "tag_origin" );
self._centrifuge_light_mdls_[client_num] = add_to_array( self._centrifuge_light_mdls_[client_num], temp_mdl, false );
}
for( i = 0; i < self._centrifuge_sparks_[client_num].size; i++ )
{
temp_mdl = Spawn( client_num, self GetTagOrigin( self._centrifuge_sparks_[client_num][i] ), "script_model" );
temp_mdl.angles = self GetTagAngles( self._centrifuge_sparks_[client_num][i] );
temp_mdl SetModel( "tag_origin" );
temp_mdl LinkTo( self, self._centrifuge_sparks_[client_num][i] );
PlayFXOnTag( client_num, level._effect[ "centrifuge_light_spark" ], temp_mdl, "tag_origin" );
self._centrifuge_light_mdls_[client_num] = add_to_array( self._centrifuge_light_mdls_[client_num], temp_mdl, false );
}
self thread centrifuge_steam_warning( client_num );
}
centrifuge_steam_warning( client_num )
{
wait( 1.0 );
for( i = 0; i < self._centrifuge_steams_[client_num].size; i++ )
{
PlayFXOnTag( client_num, level._effect[ "centrifuge_start_steam" ], self, self._centrifuge_steams_[client_num][i] );
}
}
centrifuge_warning_lights_off( client_num )
{
if( !IsDefined( self._centrifuge_fx_setup ) )
{
return;
}
wait( 0.2 );
for( i = 0; i < self._centrifuge_light_mdls_[client_num].size; i++ )
{
if( IsDefined( self._centrifuge_light_mdls_[client_num][i] ) )
{
self._centrifuge_light_mdls_[client_num][i] Unlink();
}
}
array_delete( self._centrifuge_light_mdls_[client_num] );
self._centrifuge_light_mdls_[client_num] = [];
}
fog_apply( str_fog, int_priority )
{
self endon( "death" );
self endon( "disconnect" );
if( !IsDefined( self._zombie_fog_list ) )
{
self._zombie_fog_list = [];
}
if( !IsDefined( str_fog ) || !IsDefined( int_priority ) )
{
return;
}
already_in_array = false;
if( self._zombie_fog_list.size != 0 )
{
for( i = 0; i < self._zombie_fog_list.size; i++ )
{
if( IsDefined( self._zombie_fog_list[i].fog_setting ) && self._zombie_fog_list[i].fog_setting == str_fog )
{
already_in_array = true;
if( self._zombie_fog_list[i].priority != int_priority )
{
self._zombie_fog_list[i].priority = int_priority;
}
break;
}
}
}
if( !already_in_array )
{
temp_struct = spawnStruct();
temp_struct.fog_setting = str_fog;
temp_struct.priority = int_priority;
self._zombie_fog_list = add_to_array( self._zombie_fog_list, temp_struct, false );
}
fog_to_set = get_fog_by_priority();
set_fog(fog_to_set);
}
fog_remove( str_fog )
{
self endon( "death" );
self endon( "disconnect" );
if( !IsDefined( str_fog ) )
{
return;
}
if( !IsDefined( self._zombie_fog_list ) )
{
self._zombie_fog_list = [];
}
temp_struct = undefined;
for( i = 0; i < self._zombie_fog_list.size; i++ )
{
if( IsDefined( self._zombie_fog_list[i].fog_setting ) && self._zombie_fog_list[i].fog_setting == str_fog )
{
temp_struct = self._zombie_fog_list[i];
}
}
if( IsDefined( temp_struct ) )
{
self._zombie_fog_list = array_remove( self._zombie_fog_list, temp_struct );
}
fog_to_set = get_fog_by_priority();
set_fog(fog_to_set);
}
get_fog_by_priority()
{
if( !IsDefined( self._zombie_fog_list ) )
{
return;
}
highest_score = 0;
highest_score_fog = undefined;
for( i = 0; i < self._zombie_fog_list.size; i++ )
{
if( IsDefined( self._zombie_fog_list[i].priority ) && self._zombie_fog_list[i].priority > highest_score )
{
highest_score = self._zombie_fog_list[i].priority;
highest_score_fog = self._zombie_fog_list[i].fog_setting;
}
}
return highest_score_fog;
}
setup_fog()
{
waitforclient(0);
wait(1);
players = getlocalplayers();
for(i=0;i<players.size;i++)
{
players[i] fog_apply("normal",level._fog_settings_default_priority);
}
}
set_fog(fog_type)
{
if(!IsDefined(fog_type))
{
return;
}
switch(fog_type)
{
case "normal":
start_dist = 2013.52;
half_dist = 2400.04;
half_height = 640.408;
base_height = 805;
fog_r = 0.055;
fog_g = 0.0862;
fog_b = 0.0862;
fog_scale = 3.29585;
sun_col_r = 0.341176;
sun_col_g = 0.368627;
sun_col_b = 0.388235;
sun_dir_x = -0.492497;
sun_dir_y = 0.584479;
sun_dir_z = 0.64485;
sun_start_ang = 14.832;
sun_stop_ang = 113.6;
time = 5;
max_fog_opacity = 1;
setVolFog(start_dist, half_dist, half_height, base_height, fog_r, fog_g, fog_b, fog_scale,
sun_col_r, sun_col_g, sun_col_b, sun_dir_x, sun_dir_y, sun_dir_z, sun_start_ang,
sun_stop_ang, time, max_fog_opacity);
break;
case "monkey":
start_dist = 335.113;
half_dist = 512.821;
half_height = 913.4;
base_height = 539.71;
fog_r = 0.231373;
fog_g = 0.176471;
fog_b = 0.254902;
fog_scale = 3.57142;
sun_col_r = 0.431373;
sun_col_g = 0;
sun_col_b = 0;
sun_dir_x = 0;
sun_dir_y = 0;
sun_dir_z = -1;
sun_start_ang = 0;
sun_stop_ang = 118.502;
time = 3;
max_fog_opacity = 0.999887;
setVolFog(start_dist, half_dist, half_height, base_height, fog_r, fog_g, fog_b, fog_scale,
sun_col_r, sun_col_g, sun_col_b, sun_dir_x, sun_dir_y, sun_dir_z, sun_start_ang,
sun_stop_ang, time, max_fog_opacity);
break;
case "lander":
start_dist = 767.866;
half_dist = 512.821;
half_height = 913.4;
base_height = 539.71;
fog_r = 0.054902;
fog_g = 0.0823529;
fog_b = 0.0901961;
fog_scale = 3.29585;
sun_col_r = 0.439216;
sun_col_g = 0.466667;
sun_col_b = 0.486275;
sun_dir_x = -0.290644;
sun_dir_y = 0.728615;
sun_dir_z = 0.620199;
sun_start_ang = 0;
sun_stop_ang = 62.865;
time = 3;
max_fog_opacity = 1;
setVolFog(start_dist, half_dist, half_height, base_height, fog_r, fog_g, fog_b, fog_scale,
sun_col_r, sun_col_g, sun_col_b, sun_dir_x, sun_dir_y, sun_dir_z, sun_start_ang,
sun_stop_ang, time, max_fog_opacity);
break;
}
}
player_lander_fog( local_client_num, set, newEnt )
{
player = getlocalplayers()[local_client_num];
if(set)
{
player thread fog_apply( "lander", level._fog_settings_lander_priority );
}
else
{
player thread fog_remove("lander");
}
}