mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-10 10:47:58 -05:00
360 lines
10 KiB
Plaintext
360 lines
10 KiB
Plaintext
//checked includes changed to match cerberus output
|
|
#include maps/mp/gametypes/_spawning;
|
|
#include maps/mp/_compass;
|
|
#include maps/mp/_load;
|
|
#include maps/mp/mp_takeoff_fx;
|
|
#include common_scripts/utility;
|
|
#include maps/mp/_events;
|
|
#include maps/mp/_utility;
|
|
|
|
main() //checked changed to match cerberus output
|
|
{
|
|
level.levelspawndvars = ::levelspawndvars;
|
|
level.overrideplayerdeathwatchtimer = ::leveloverridetime;
|
|
level.useintermissionpointsonwavespawn = ::useintermissionpointsonwavespawn;
|
|
maps/mp/mp_takeoff_fx::main();
|
|
precachemodel( "collision_nosight_wall_64x64x10" );
|
|
precachemodel( "collision_clip_wall_128x128x10" );
|
|
precachemodel( "collision_mp_takeoff_solar_weap" );
|
|
maps/mp/_load::main();
|
|
maps/mp/_compass::setupminimap( "compass_map_mp_takeoff" );
|
|
setdvar( "compassmaxrange", "2100" );
|
|
game[ "strings" ][ "war_callsign_a" ] = &"MPUI_CALLSIGN_MAPNAME_A";
|
|
game[ "strings" ][ "war_callsign_b" ] = &"MPUI_CALLSIGN_MAPNAME_B";
|
|
game[ "strings" ][ "war_callsign_c" ] = &"MPUI_CALLSIGN_MAPNAME_C";
|
|
game[ "strings" ][ "war_callsign_d" ] = &"MPUI_CALLSIGN_MAPNAME_D";
|
|
game[ "strings" ][ "war_callsign_e" ] = &"MPUI_CALLSIGN_MAPNAME_E";
|
|
game[ "strings_menu" ][ "war_callsign_a" ] = "@MPUI_CALLSIGN_MAPNAME_A";
|
|
game[ "strings_menu" ][ "war_callsign_b" ] = "@MPUI_CALLSIGN_MAPNAME_B";
|
|
game[ "strings_menu" ][ "war_callsign_c" ] = "@MPUI_CALLSIGN_MAPNAME_C";
|
|
game[ "strings_menu" ][ "war_callsign_d" ] = "@MPUI_CALLSIGN_MAPNAME_D";
|
|
game[ "strings_menu" ][ "war_callsign_e" ] = "@MPUI_CALLSIGN_MAPNAME_E";
|
|
spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -915, 790, 212 ), ( 0, 0, 0 ) );
|
|
spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -979, 790, 212 ), ( 0, 0, 0 ) );
|
|
spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -1043, 790, 212 ), ( 0, 0, 0 ) );
|
|
spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -1083, 790, 212 ), ( 0, 0, 0 ) );
|
|
spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -915, 790, 148 ), ( 0, 0, 0 ) );
|
|
spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -979, 790, 148 ), ( 0, 0, 0 ) );
|
|
spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -1043, 790, 148 ), ( 0, 0, 0 ) );
|
|
spawncollision( "collision_nosight_wall_64x64x10", "collider", ( -1083, 790, 148 ), ( 0, 0, 0 ) );
|
|
spawncollision( "collision_clip_wall_128x128x10", "collider", ( 136, 2511, 245.5 ), vectorScale( ( 0, 1, 0 ), 90 ) );
|
|
spawncollision( "collision_mp_takeoff_solar_weap", "collider", ( 580, 3239.5, 32.5 ), ( 0, 1, 0 ) );
|
|
maps/mp/gametypes/_spawning::level_use_unified_spawning( 1 );
|
|
level thread dog_jump_think();
|
|
level.disableoutrovisionset = 1;
|
|
level.mptakeoffrocket = getent( "takeoff_rocket", "targetname" );
|
|
/*
|
|
/#
|
|
assert( isDefined( level.mptakeoffrocket ), "Unable to find entity with targetname: 'takeoff_rocket'" );
|
|
#/
|
|
*/
|
|
level.endgamefunction = ::takeoff_end_game;
|
|
level.preendgamefunction = ::takeoff_pre_end_game;
|
|
level thread setuprocketcamera();
|
|
/*
|
|
/#
|
|
execdevgui( "devgui_mp_takeoff" );
|
|
level thread watchdevnotify();
|
|
level thread devgui_endgame();
|
|
#/
|
|
*/
|
|
}
|
|
|
|
dog_jump_think() //checked matches cerberus output
|
|
{
|
|
origin = ( 209, 3819, 91 );
|
|
trigger = spawn( "trigger_box", origin, getaitriggerflags(), 64, 32, 64 );
|
|
trigger setexcludeteamfortrigger( "none" );
|
|
for ( ;; )
|
|
{
|
|
trigger waittill( "trigger", entity );
|
|
if ( isai( entity ) )
|
|
{
|
|
glassradiusdamage( origin, 64, 5001, 5000 );
|
|
trigger delete();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
setuprocketcamera() //checked matches cerberus output
|
|
{
|
|
wait 0.1;
|
|
getrocketcamera();
|
|
}
|
|
|
|
getrocketcamera() //checked matches cerberus output
|
|
{
|
|
camerastruct = getstruct( "endgame_first_camera", "targetname" );
|
|
/*
|
|
/#
|
|
assert( isDefined( camerastruct ), "Unable to find entity with targetname: 'endgame_first_camera'" );
|
|
#/
|
|
*/
|
|
if ( !isDefined( level.rocketcamera ) )
|
|
{
|
|
level.rocketcamera = spawn( "script_model", camerastruct.origin );
|
|
level.rocketcamera setmodel( "tag_origin" );
|
|
}
|
|
else
|
|
{
|
|
level.rocketcamera.origin = camerastruct.origin;
|
|
}
|
|
level.rocketcamera.angles = camerastruct.angles;
|
|
return level.rocketcamera;
|
|
}
|
|
|
|
levelspawndvars( reset_dvars ) //checked matches cerberus output
|
|
{
|
|
ss = level.spawnsystem;
|
|
ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2300", reset_dvars );
|
|
}
|
|
|
|
watchdevnotify() //checked matches cerberus output dvar not found
|
|
{
|
|
/*
|
|
/#
|
|
startvalue = 0;
|
|
setdvarint( "scr_takeoff_rocket", startvalue );
|
|
for ( ;; )
|
|
{
|
|
takeoff_rocket = getDvarInt( #"12AE1013" );
|
|
if ( takeoff_rocket != startvalue )
|
|
{
|
|
level notify( "dev_takeoff_rocket" );
|
|
startvalue = takeoff_rocket;
|
|
}
|
|
wait 0.2;
|
|
#/
|
|
}
|
|
*/
|
|
}
|
|
|
|
devgui_endgame() //checked changed to match cerberus output
|
|
{
|
|
/*
|
|
/#
|
|
rocket = level.mptakeoffrocket;
|
|
assert( isDefined( rocket ), "Unable to find entity with targetname: 'takeoff_rocket'" );
|
|
rocketorigin = rocket.origin;
|
|
rocketangles = rocket.angles;
|
|
rocketmodel = rocket.model;
|
|
for ( ;; )
|
|
{
|
|
level waittill( "dev_takeoff_rocket" );
|
|
visionsetnaked( "blackout", 0.1 );
|
|
thread takeoff_pre_end_game();
|
|
wait 1;
|
|
visionsetnaked( "mp_takeoff", 0.1 );
|
|
thread takeoff_end_game();
|
|
wait 4.5;
|
|
level notify( "debug_end_takeoff" );
|
|
wait 1;
|
|
visionsetnaked( "mp_takeoff", 0.1 );
|
|
for(i = 0; i < level.players.size; i++)
|
|
{
|
|
player = level.players[ i ];
|
|
player cameraactivate( 0 );
|
|
}
|
|
stop_exploder( 1001 );
|
|
rocket delete();
|
|
rocket = spawn( "script_model", rocketorigin );
|
|
rocket.angles = rocketangles;
|
|
rocket setmodel( rocketmodel );
|
|
level.mptakeoffrocket = rocket;
|
|
#/
|
|
}
|
|
*/
|
|
}
|
|
|
|
water_trigger_init() //checked partially changed to match cerberus output see info.md
|
|
{
|
|
wait 3;
|
|
triggers = getentarray( "trigger_hurt", "classname" );
|
|
foreach ( trigger in triggers )
|
|
{
|
|
if ( trigger.origin[ 2 ] > level.mapcenter[ 2 ] )
|
|
{
|
|
}
|
|
else
|
|
{
|
|
trigger thread water_trigger_think();
|
|
}
|
|
}
|
|
triggers = getentarray( "water_killbrush", "targetname" );
|
|
foreach ( trigger in triggers )
|
|
{
|
|
trigger thread player_splash_think();
|
|
}
|
|
}
|
|
|
|
player_splash_think() //checked matches cerberus output
|
|
{
|
|
for ( ;; )
|
|
{
|
|
self waittill( "trigger", entity );
|
|
if ( isplayer( entity ) && isalive( entity ) )
|
|
{
|
|
self thread trigger_thread( entity, ::player_water_fx );
|
|
}
|
|
}
|
|
}
|
|
|
|
player_water_fx( player, endon_condition ) //checked matches cerberus output
|
|
{
|
|
maxs = self.origin + self getmaxs();
|
|
if ( maxs[ 2 ] > 60 )
|
|
{
|
|
maxs += vectorScale( ( 0, 0, 1 ), 10 );
|
|
}
|
|
origin = ( player.origin[ 0 ], player.origin[ 1 ], maxs[ 2 ] );
|
|
playfx( level._effect[ "water_splash_sm" ], origin );
|
|
}
|
|
|
|
water_trigger_think() //checked matches cerberus output
|
|
{
|
|
for ( ;; )
|
|
{
|
|
self waittill( "trigger", entity );
|
|
if ( isplayer( entity ) )
|
|
{
|
|
entity playsound( "mpl_splash_death" );
|
|
playfx( level._effect[ "water_splash" ], entity.origin + vectorScale( ( 0, 0, 1 ), 40 ) );
|
|
}
|
|
}
|
|
}
|
|
|
|
leveloverridetime( defaulttime ) //checked matches cerberus output
|
|
{
|
|
if ( self isinwater() )
|
|
{
|
|
return 0.4;
|
|
}
|
|
return defaulttime;
|
|
}
|
|
|
|
useintermissionpointsonwavespawn() //checked matches cerberus output
|
|
{
|
|
return self isinwater();
|
|
}
|
|
|
|
isinwater() //checked partially changed to match cerberus output see info.md
|
|
{
|
|
triggers = getentarray( "trigger_hurt", "classname" );
|
|
foreach ( trigger in triggers )
|
|
{
|
|
if ( trigger.origin[ 2 ] > level.mapcenter[ 2 ] )
|
|
{
|
|
}
|
|
else
|
|
{
|
|
if ( self istouching( trigger ) )
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
takeoff_pre_end_game( timetillendgame, debug ) //checked matches cerberus output
|
|
{
|
|
if ( !isDefined( debug ) )
|
|
{
|
|
level waittill( "play_final_killcam" );
|
|
wait 10;
|
|
}
|
|
rocket = level.mptakeoffrocket;
|
|
/*
|
|
/#
|
|
assert( isDefined( rocket ), "Unable to find entity with targetname: 'takeoff_rocket'" );
|
|
#/
|
|
*/
|
|
rocket rocket_thrusters_initialize();
|
|
}
|
|
|
|
takeoff_end_game() //checked changed to match cerberus output
|
|
{
|
|
/*
|
|
/#
|
|
level endon( "debug_end_takeoff" );
|
|
#/
|
|
*/
|
|
level.rocket_camera = 0;
|
|
rocket = level.mptakeoffrocket;
|
|
rocket playsound( "evt_shuttle_launch" );
|
|
/*
|
|
/#
|
|
assert( isDefined( rocket ), "Unable to find entity with targetname: 'takeoff_rocket'" );
|
|
#/
|
|
*/
|
|
rocket rocket_thrusters_initialize();
|
|
cameraone = getrocketcamera();
|
|
cameraone thread vibrateaftertime( getdvarfloatdefault( "mp_takeoff_shakewait", 0.5 ) );
|
|
for ( i = 0; i < level.players.size; i++ )
|
|
{
|
|
player = level.players[ i ];
|
|
player camerasetposition( cameraone );
|
|
player camerasetlookat();
|
|
player cameraactivate( 1 );
|
|
player setdepthoffield( 0, 0, 512, 512, 4, 0 );
|
|
}
|
|
level.rocket_camera = 1;
|
|
rocket thread rocket_move();
|
|
wait 4;
|
|
visionsetnaked( "blackout", getdvarfloatdefault( "mp_takeoff_fade_black", 0.5 ) );
|
|
}
|
|
|
|
rocket_thrusters_initialize() //checked matches cerberus output
|
|
{
|
|
if ( !isDefined( self.thrustersinited ) )
|
|
{
|
|
self.thrustersinited = 1;
|
|
exploder( 1001 );
|
|
playfxontag( level._effect[ "fx_mp_tak_shuttle_thruster_lg" ], self, "tag_fx" );
|
|
playfxontag( level._effect[ "fx_mp_tak_shuttle_thruster_sm" ], self, "tag_fx5" );
|
|
playfxontag( level._effect[ "fx_mp_tak_shuttle_thruster_md" ], self, "tag_fx6" );
|
|
playfxontag( level._effect[ "fx_mp_tak_shuttle_thruster_sm" ], self, "tag_fx7" );
|
|
}
|
|
}
|
|
|
|
rocket_move() //checked matches cerberus output
|
|
{
|
|
origin = self.origin;
|
|
heightincrease = getdvarintdefault( "mp_takeoff_rocket_start_height", 0 );
|
|
self.origin += ( 0, 0, heightincrease );
|
|
movetime = getdvarintdefault( "mp_takeoff_moveTime", 17 );
|
|
moveaccelratio = getdvarfloatdefault( "mp_takeoff_moveAccel", 1 );
|
|
self moveto( self.origin + vectorScale( ( 0, 0, 1 ), 50000 ), movetime, movetime * moveaccelratio );
|
|
self waittill( "movedone" );
|
|
origin = self.origin;
|
|
}
|
|
|
|
vibrateaftertime( waittime ) //checked matches cerberus output
|
|
{
|
|
self endon( "death" );
|
|
/*
|
|
/#
|
|
level endon( "debug_end_takeoff" );
|
|
#/
|
|
*/
|
|
wait waittime;
|
|
pitchvibrateamplitude = getdvarfloatdefault( "mp_takeoff_start", 0.1 );
|
|
vibrateamplitude = getdvarfloatdefault( "mp_takeoff_a_start", 0.1 );
|
|
vibratetime = 0.05;
|
|
originalangles = self.angles;
|
|
for ( ;; )
|
|
{
|
|
angles0 = ( originalangles[ 0 ] - pitchvibrateamplitude, originalangles[ 1 ], originalangles[ 2 ] - vibrateamplitude );
|
|
angles1 = ( originalangles[ 0 ] + pitchvibrateamplitude, originalangles[ 1 ], originalangles[ 2 ] + vibrateamplitude );
|
|
self rotateto( angles0, vibratetime );
|
|
self waittill( "rotatedone" );
|
|
self rotateto( angles1, vibratetime );
|
|
self waittill( "rotatedone" );
|
|
vibrateamplitude *= getdvarfloatdefault( "mp_takeoff_amp_vredux", 1.12 );
|
|
pitchvibrateamplitude = 0 - pitchvibrateamplitude;
|
|
pitchvibrateamplitude *= getdvarfloatdefault( "mp_takeoff_amp_predux", 1.11 );
|
|
}
|
|
}
|
|
|