mirror of
https://github.com/ineedbots/t5_bot_warfare.git
synced 2025-04-21 17:15:42 +00:00
405 lines
10 KiB
Plaintext
405 lines
10 KiB
Plaintext
#include maps\mp\_utility;
|
|
#include common_scripts\utility;
|
|
|
|
main()
|
|
{
|
|
//needs to be first for create fx
|
|
maps\mp\mp_nuked_fx::main();
|
|
|
|
precachemodel("collision_wall_128x128x10");
|
|
|
|
// move a dom spawn that is sharing space with one of the mannequins
|
|
move_spawn_point( "mp_dom_spawn", (791, 449, -20), ( 779, 445, -20 ) );
|
|
|
|
maps\mp\_load::main();
|
|
|
|
maps\mp\mp_nuked_amb::main();
|
|
maps\mp\_compass::setupMiniMap("compass_map_mp_nuked");
|
|
|
|
level.onSpawnIntermission = ::nuked_intermission;
|
|
|
|
/#
|
|
level thread devgui_nuked();
|
|
execdevgui( "devgui_mp_nuked" );
|
|
#/
|
|
|
|
// 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();
|
|
|
|
// Set up the default range of the compass
|
|
setdvar("compassmaxrange","2100");
|
|
|
|
// Set up some generic War Flag Names.
|
|
// Example from COD5: CALLSIGN_SEELOW_A is the name of the 1st flag in Selow whose string is "Cottage"
|
|
// The string must have MPUI_CALLSIGN_ and _A. Replace Mapname with the name of your map/bsp and in the
|
|
// actual string enter a keyword that names the location (Roundhouse, Missle Silo, Launchpad, Guard Tower, etc)
|
|
|
|
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";
|
|
|
|
// enable new spawning system
|
|
maps\mp\gametypes\_spawning::level_use_unified_spawning(true);
|
|
SetDvar( "scr_spawn_enemy_influencer_radius", 1600 );
|
|
SetDvar( "scr_spawn_dead_friend_influencer_radius", 1300 );
|
|
SetDvar( "scr_spawn_dead_friend_influencer_timeout_seconds", 8 );
|
|
SetDvar( "scr_spawn_dead_friend_influencer_count", 7 );
|
|
|
|
//spawn collision in yellow house to prevent players from jump-crouching into a door.
|
|
spawncollision("collision_wall_128x128x10","collider",(769.2, 329.3, 143), (0, 290.6, 0));
|
|
spawncollision("collision_wall_128x128x10","collider",(769.2, 329.3, 271), (0, 290.6, 0));
|
|
|
|
level.const_fx_exploder_end_game_glass_shatter = 5001;
|
|
level.disableOutroVisionSet = true;
|
|
|
|
level thread nuked_mannequin_init();
|
|
nuked_doomsday_clock_init();
|
|
level thread maps\mp\mp_nuked_platform::main();
|
|
|
|
level thread nuked_population_sign_think();
|
|
level thread nuked_bomb_drop_think();
|
|
|
|
/#
|
|
level thread nuked_bomb_drop_dev();
|
|
#/
|
|
|
|
}
|
|
|
|
move_spawn_point( targetname, start_point, new_point )
|
|
{
|
|
spawn_points = getentarray( targetname, "classname" );
|
|
|
|
for ( i = 0; i < spawn_points.size; i++ )
|
|
{
|
|
if ( distancesquared( spawn_points[i].origin, start_point ) < 1 )
|
|
{
|
|
spawn_points[i].origin = new_point;
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
nuked_mannequin_init()
|
|
{
|
|
keep_count = 28;
|
|
level.mannequin_count = 0;
|
|
|
|
destructibles = GetEntArray( "destructible", "targetname" );
|
|
mannequins = nuked_mannequin_filter( destructibles );
|
|
|
|
if ( mannequins.size <= 0 )
|
|
{
|
|
return;
|
|
}
|
|
|
|
remove_count = mannequins.size - keep_count;
|
|
remove_count = clamp( remove_count, 0, remove_count );
|
|
|
|
mannequins = array_randomize( mannequins );
|
|
|
|
for ( i = 0; i < remove_count; i++ )
|
|
{
|
|
assert( IsDefined( mannequins[i].target ) );
|
|
|
|
collision = GetEnt( mannequins[i].target, "targetname" );
|
|
assert( IsDefined( collision ) );
|
|
|
|
collision delete();
|
|
mannequins[i] delete();
|
|
level.mannequin_count--;
|
|
}
|
|
|
|
level waittill( "prematch_over" );
|
|
level.mannequin_time = GetTime();
|
|
}
|
|
|
|
nuked_mannequin_filter( destructibles )
|
|
{
|
|
mannequins = [];
|
|
|
|
for ( i = 0; i < destructibles.size; i++ )
|
|
{
|
|
destructible = destructibles[i];
|
|
|
|
if ( IsSubStr( destructible.destructibledef, "male" ) )
|
|
{
|
|
mannequins[ mannequins.size ] = destructible;
|
|
level.mannequin_count++;
|
|
}
|
|
}
|
|
|
|
return mannequins;
|
|
}
|
|
|
|
nuked_intermission()
|
|
{
|
|
maps\mp\gametypes\_globallogic_defaults::default_onSpawnIntermission();
|
|
|
|
if ( wasLastRound() )
|
|
{
|
|
level notify( "bomb_drop" );
|
|
}
|
|
}
|
|
|
|
nuked_bomb_drop_think()
|
|
{
|
|
cameraStart = GetStruct( "endgame_camera_start", "targetname" );
|
|
cameraEnd = GetStruct( cameraStart.target, "targetname" );
|
|
|
|
bomb = GetEnt( "nuked_bomb", "targetname" );
|
|
|
|
for ( ;; )
|
|
{
|
|
camera = Spawn( "script_model", cameraStart.origin );
|
|
camera.angles = cameraStart.angles;
|
|
camera SetModel( "tag_origin" );
|
|
|
|
level waittill( "bomb_drop" );
|
|
|
|
if( level.finalkillcam && IsDefined(level.lastKillCam ) )
|
|
{
|
|
wait( 0.1 );
|
|
while( level.inFinalKillcam )
|
|
{
|
|
wait( 0.1 );
|
|
}
|
|
}
|
|
|
|
for ( i = 0; i < get_players().size; i++ )
|
|
{
|
|
player = get_players()[i];
|
|
player CameraSetPosition( camera );
|
|
player CameraSetLookAt();
|
|
player CameraActivate( true );
|
|
}
|
|
|
|
cam_move_time = set_dvar_float_if_unset( "scr_cam_move_time", "2.5" );
|
|
bomb_explode_delay = set_dvar_float_if_unset( "scr_bomb_explode_delay", "1.5" );
|
|
glass_break_delay = set_dvar_float_if_unset( "scr_glass_break_delay", "0.5" );
|
|
//white_out_delay = set_dvar_float_if_unset( "scr_white_out_delay", "1.0" );
|
|
|
|
camera MoveTo( cameraEnd.origin, cam_move_time, 0, 0 );
|
|
camera RotateTo( cameraEnd.angles, cam_move_time, 0, 0 );
|
|
|
|
bomb playSound ("amb_end_nuke");
|
|
|
|
dest = ( bomb.origin[0], bomb.origin[1], bomb.origin[2] - 3700 );
|
|
|
|
time = set_dvar_float_if_unset( "scr_bomb_time", "1.5" );
|
|
accel_time = set_dvar_float_if_unset( "scr_bomb_accel_time", ".75" );
|
|
|
|
bomb MoveTo( dest, time, accel_time, 0 );
|
|
|
|
wait( bomb_explode_delay );
|
|
playfx ( level._effect["fx_mp_nuked_nuclear_explosion"], bomb.origin);
|
|
wait( glass_break_delay );
|
|
level thread waitForGlassBreak();
|
|
cameraForward = anglestoforward( cameraEnd.angles );
|
|
explodePoint = cameraEnd.origin + 20*cameraForward;
|
|
//black = ( 0.2, 0.2, 0.2 );
|
|
//debugstar(explodePoint, 2 * 1000, black);
|
|
physicsExplosionSphere( explodePoint, 128, 128, 1 );
|
|
RadiusDamage( explodePoint, 128, 128, 128 );
|
|
//wait( white_out_delay );
|
|
|
|
camera thread vibrate();
|
|
|
|
//PrintLn( "SND NUKE play" );
|
|
//VisionSetNaked( "flash_grenade", .4 );
|
|
|
|
/#
|
|
//bomb waittill( "movedone" );
|
|
|
|
wait( 3.5 - glass_break_delay );
|
|
level notify( "bomb_reset" );
|
|
camera delete();
|
|
#/
|
|
}
|
|
}
|
|
|
|
vibrate()
|
|
{
|
|
self endon( "death" );
|
|
|
|
pitchVibrateAmplitude = 1;
|
|
|
|
vibrateAmplitude = 2;
|
|
vibrateTime = 0.05;
|
|
|
|
originalAngles = self.angles;
|
|
|
|
angles0 = ( originalAngles[0], originalAngles[1], originalAngles[2] - vibrateAmplitude );
|
|
angles1 = ( originalAngles[0], originalAngles[1], originalAngles[2] + vibrateAmplitude );
|
|
|
|
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" );
|
|
|
|
if ( vibrateAmplitude > 0 )
|
|
vibrateAmplitude -= 0.25;
|
|
pitchVibrateAmplitude = 0 - pitchVibrateAmplitude;
|
|
pitchVibrateAmplitude *= 0.66;
|
|
}
|
|
}
|
|
|
|
waitForGlassBreak()
|
|
{
|
|
level endon( "bomb_reset" );
|
|
level waittill( "glass_smash", origin );
|
|
|
|
exploder( level.const_fx_exploder_end_game_glass_shatter );
|
|
}
|
|
|
|
nuked_population_sign_think()
|
|
{
|
|
tens_model = GetEnt( "counter_tens", "targetname" );
|
|
ones_model = GetEnt( "counter_ones", "targetname" );
|
|
|
|
step = ( 360 / 10 ); // 10 digits (0-9) on the dial
|
|
|
|
// put the dials at 0
|
|
ones = 0;
|
|
tens = 0;
|
|
|
|
tens_model RotateRoll( step, 0.05 );
|
|
ones_model RotateRoll( step, 0.05 );
|
|
|
|
for ( ;; )
|
|
{
|
|
wait( 1 );
|
|
|
|
for ( ;; )
|
|
{
|
|
num_players = get_players().size;
|
|
|
|
dial = ones + ( tens * 10 );
|
|
|
|
if ( num_players < dial )
|
|
{
|
|
ones--;
|
|
time = set_dvar_float_if_unset( "scr_dial_rotate_time", "0.5" );
|
|
|
|
if ( ones < 0 )
|
|
{
|
|
ones = 9;
|
|
tens_model RotateRoll( 0 - step, time );
|
|
tens--;
|
|
}
|
|
|
|
ones_model RotateRoll( 0 - step, time );
|
|
ones_model waittill( "rotatedone" );
|
|
}
|
|
else if ( num_players > dial )
|
|
{
|
|
ones++;
|
|
time = set_dvar_float_if_unset( "scr_dial_rotate_time", "0.5" );
|
|
|
|
if ( ones > 9 )
|
|
{
|
|
ones = 0;
|
|
tens_model RotateRoll( step, time );
|
|
tens++;
|
|
}
|
|
|
|
ones_model RotateRoll( step, time );
|
|
ones_model waittill( "rotatedone" );
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
nuked_doomsday_clock_init()
|
|
{
|
|
min_hand_model = GetEnt( "clock_min_hand", "targetname" );
|
|
sec_hand_model = GetEnt( "clock_sec_hand", "targetname" );
|
|
|
|
start_angle = 318;
|
|
|
|
min_hand_model RotatePitch( start_angle, 0.05 );
|
|
min_hand_model waittill( "rotatedone" );
|
|
|
|
if ( level.timelimit > 0 )
|
|
{
|
|
min_hand_model RotatePitch( 360 - start_angle, level.timelimit * 60 );
|
|
sec_hand_model RotatePitch( 360 * level.timelimit, level.timelimit * 60 );
|
|
}
|
|
else
|
|
{
|
|
sec_hand_model thread nuked_doomsday_clock_seconds_think();
|
|
}
|
|
}
|
|
|
|
nuked_doomsday_clock_seconds_think()
|
|
{
|
|
for ( ;; )
|
|
{
|
|
self RotatePitch( 360, 60 );
|
|
self waittill( "rotatedone" );
|
|
}
|
|
}
|
|
|
|
/#
|
|
nuked_bomb_drop_dev()
|
|
{
|
|
bomb = GetEnt( "nuked_bomb", "targetname" );
|
|
bomb_origin = bomb.origin;
|
|
|
|
for ( ;; )
|
|
{
|
|
level waittill( "bomb_reset" );
|
|
bomb.origin = bomb_origin;
|
|
|
|
player = getHostPlayer();
|
|
player CameraActivate( false );
|
|
VisionSetNaked( "mp_nuked", 0 );
|
|
}
|
|
}
|
|
|
|
devgui_nuked( cmd )
|
|
{
|
|
for ( ;; )
|
|
{
|
|
wait( 0.5 );
|
|
|
|
devgui_string = GetDvar( #"devgui_notify" );
|
|
|
|
switch( devgui_string )
|
|
{
|
|
case "":
|
|
break;
|
|
|
|
case "warp_to_bomb":
|
|
player = getHostPlayer();
|
|
AddDebugCommand( "noclip" );
|
|
player SetOrigin( ( 3969, 8094, 1052 ) );
|
|
player SetPlayerAngles( ( -19, 94, 0 ) );
|
|
break;
|
|
|
|
default:
|
|
level notify( devgui_string );
|
|
break;
|
|
}
|
|
|
|
SetDvar( "devgui_notify", "" );
|
|
}
|
|
}
|
|
#/ |