Files
Recompilable-gscs-for-BO2-z…/zm_buried_patch/maps/mp/zm_buried_ffotd.gsc
2020-06-05 01:51:32 -07:00

705 lines
19 KiB
Plaintext

#include maps/mp/zombies/_zm;
#include maps/mp/gametypes_zm/_zm_gametype;
#include maps/mp/zm_buried;
#include maps/mp/zombies/_zm_zonemgr;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/_utility;
main_start()
{
level thread spawned_collision_ffotd();
level thread ghost_round_override_init();
level thread init_push_triggers();
level thread init_dtp_triggers();
level thread spawned_slide_push_trigger();
level thread spawned_slide_prone_trigger();
level thread spawned_life_triggers();
onplayerconnect_callback( ::ffotd_player_threads );
}
main_end()
{
if ( is_gametype_active( "zgrief" ) )
{
level thread zgrief_mode_fix();
level.check_for_valid_spawn_near_team_callback = ::zgrief_respawn_override;
}
level.zombie_init_done = ::ffotd_zombie_init_done;
level thread bar_spawner_fix();
level thread maze_blocker_fix();
level thread door_clip_fix();
level thread player_respawn_fix();
}
ffotd_zombie_init_done()
{
self maps/mp/zm_buried::zombie_init_done();
self thread jail_traversal_fix();
}
jail_traversal_fix()
{
self endon( "death" );
window_pos = ( -837, 496, 8 );
fix_dist = 64;
while ( 1 )
{
dist = distancesquared( self.origin, window_pos );
if ( dist < fix_dist )
{
node = self getnegotiationstartnode();
if ( isDefined( node ) )
{
if ( node.animscript == "zm_jump_down_48" && node.type == "Begin" )
{
self setphysparams( 25, 0, 72 );
wait 1;
if ( is_true( self.has_legs ) )
{
self setphysparams( 15, 0, 72 );
break;
}
else
{
self setphysparams( 15, 0, 24 );
}
}
}
}
wait 0,25;
}
}
ghost_round_override_init()
{
origin = ( 2593, 562, 290 );
length = 512;
width = 91;
height = 290;
trig1 = spawn( "trigger_box", origin, 0, length, width, height );
trig1.angles = vectorScale( ( 0, 0, 0 ), 69 );
trig1.script_noteworthy = "ghost_round_override";
}
zgrief_mode_fix()
{
speed_trigger = getentarray( "specialty_fastreload", "script_noteworthy" );
_a98 = speed_trigger;
_k98 = getFirstArrayKey( _a98 );
while ( isDefined( _k98 ) )
{
trig = _a98[ _k98 ];
if ( trig.origin == ( -170,5, -328,25, 174 ) )
{
trig.origin += vectorScale( ( 0, 0, 0 ), 32 );
if ( isDefined( trig.clip ) )
{
trig.clip.origin += vectorScale( ( 0, 0, 0 ), 32 );
}
if ( isDefined( trig.machine ) )
{
trig.machine.origin += vectorScale( ( 0, 0, 0 ), 32 );
}
}
_k98 = getNextArrayKey( _a98, _k98 );
}
}
zgrief_respawn_override( revivee, return_struct )
{
players = get_players();
spawn_points = maps/mp/gametypes_zm/_zm_gametype::get_player_spawns_for_gametype();
grief_initial = getstructarray( "street_standard_player_spawns", "targetname" );
_a119 = grief_initial;
_k119 = getFirstArrayKey( _a119 );
while ( isDefined( _k119 ) )
{
struct = _a119[ _k119 ];
if ( isDefined( struct.script_int ) && struct.script_int == 2000 )
{
spawn_points[ spawn_points.size ] = struct;
initial_point = struct;
initial_point.locked = 0;
}
_k119 = getNextArrayKey( _a119, _k119 );
}
closest_group = undefined;
closest_distance = 100000000;
backup_group = undefined;
backup_distance = 100000000;
if ( spawn_points.size == 0 )
{
return undefined;
}
i = 0;
while ( i < players.size )
{
while ( is_player_valid( players[ i ], undefined, 1 ) && players[ i ] != self )
{
j = 0;
while ( j < spawn_points.size )
{
if ( isDefined( spawn_points[ j ].script_int ) )
{
ideal_distance = spawn_points[ j ].script_int;
}
else
{
ideal_distance = 1000;
}
if ( spawn_points[ j ].locked == 0 )
{
plyr_dist = distancesquared( players[ i ].origin, spawn_points[ j ].origin );
if ( plyr_dist < ( ideal_distance * ideal_distance ) )
{
if ( plyr_dist < closest_distance )
{
closest_distance = plyr_dist;
closest_group = j;
}
j++;
continue;
}
else
{
if ( plyr_dist < backup_distance )
{
backup_group = j;
backup_distance = plyr_dist;
}
}
}
j++;
}
}
if ( !isDefined( closest_group ) )
{
closest_group = backup_group;
}
if ( isDefined( closest_group ) )
{
spawn_location = maps/mp/zombies/_zm::get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct );
if ( isDefined( spawn_location ) && !positionwouldtelefrag( spawn_location.origin ) )
{
if ( isDefined( spawn_location.plyr ) && spawn_location.plyr != revivee getentitynumber() )
{
i++;
continue;
}
else
{
return spawn_location;
}
}
}
i++;
}
while ( isDefined( initial_point ) )
{
k = 0;
while ( k < spawn_points.size )
{
if ( spawn_points[ k ] == initial_point )
{
closest_group = k;
spawn_location = maps/mp/zombies/_zm::get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct );
return spawn_location;
}
k++;
}
}
return undefined;
}
spawned_slide_prone_trigger()
{
origin = ( -2820, -412, 1438 );
length = 216;
width = 216;
height = 108;
trig1 = spawn( "trigger_box", origin, 0, length, width, height );
trig1.angles = ( 0, 0, 0 );
trig1.targetname = "force_from_prone";
}
spawned_slide_push_trigger()
{
origin = ( -1416,5, -324, 428,5 );
length = 111;
width = 394;
height = 189;
trig1 = spawn( "trigger_box", origin, 0, length, width, height );
trig1.angles = ( 0, 0, 0 );
trig1.targetname = "push_from_prone";
trig1.push_player_towards_point = ( -1336, -320, 360 );
while ( 1 )
{
trig1 waittill( "trigger", who );
if ( who getstance() == "prone" && isplayer( who ) )
{
who setstance( "crouch" );
}
trig1 thread slide_push_think( who );
wait 0,1;
}
}
slide_push_think( who )
{
whopos = ( 0, 0, 0 );
while ( who istouching( self ) )
{
if ( who.origin == whopos )
{
who setvelocity( self get_push_vector() );
}
whopos = who.origin;
wait 2;
}
}
slide_push_in_trigger( player )
{
if ( !player is_player_using_thumbstick() )
{
player setvelocity( self get_push_vector() );
}
}
spawned_life_triggers()
{
origin = ( 6637, 516, -580 );
length = 1110;
width = 982;
height = 824;
trig1 = spawn( "trigger_box", origin, 0, length, width, height );
trig1.angles = ( 0, 0, 0 );
trig1.script_noteworthy = "life_brush";
}
spawned_collision_ffotd()
{
precachemodel( "collision_geo_64x64x10_slick" );
precachemodel( "collision_geo_64x64x128_slick" );
precachemodel( "collision_geo_128x128x10_slick" );
precachemodel( "collision_geo_64x64x10_standard" );
precachemodel( "collision_geo_64x64x64_standard" );
precachemodel( "collision_geo_128x128x10_standard" );
precachemodel( "collision_geo_128x128x128_standard" );
precachemodel( "collision_geo_256x256x10_standard" );
precachemodel( "collision_geo_256x256x256_standard" );
precachemodel( "p6_zm_bu_rock_strata_column_01" );
precachemodel( "p6_zm_bu_rock_strata_01" );
precachemodel( "p6_zm_bu_rock_strata_04" );
precachemodel( "p6_zm_bu_wood_planks_106x171" );
flag_wait( "start_zombie_round_logic" );
if ( isDefined( level.optimise_for_splitscreen ) && !level.optimise_for_splitscreen )
{
collision1 = spawn( "script_model", ( 3731,5, 736, 6,5 ) );
collision1 setmodel( "collision_geo_64x64x128_slick" );
collision1.angles = ( 4,54625, 313,41, -4,78954 );
collision1 ghost();
collision2 = spawn( "script_model", ( 34, -1691, 375 ) );
collision2 setmodel( "collision_geo_256x256x10_standard" );
collision2.angles = vectorScale( ( 0, 0, 0 ), 3,80002 );
collision2 ghost();
collision3 = spawn( "script_model", ( 641, 545, -1,21359 ) );
collision3 setmodel( "collision_geo_64x64x128_slick" );
collision3.angles = ( 1,27355, 320,806, -5,38137 );
collision3 ghost();
saloon1 = spawn( "script_model", ( 1032,22, -1744,09, 309 ) );
saloon1 setmodel( "collision_geo_64x64x64_standard" );
saloon1.angles = vectorScale( ( 0, 0, 0 ), 40,8 );
saloon1 ghost();
saloon2 = spawn( "script_model", ( 1005,78, -1766,91, 309 ) );
saloon2 setmodel( "collision_geo_64x64x64_standard" );
saloon2.angles = vectorScale( ( 0, 0, 0 ), 40,8 );
saloon2 ghost();
gs1 = spawn( "script_model", ( 118,001, -537,037, 236 ) );
gs1 setmodel( "collision_geo_64x64x64_standard" );
gs1.angles = vectorScale( ( 0, 0, 0 ), 90 );
gs1 ghost();
gs1 thread delete_upon_flag( "general_store_porch_door1" );
gs2 = spawn( "script_model", ( 117,999, -571,963, 236 ) );
gs2 setmodel( "collision_geo_64x64x64_standard" );
gs2.angles = vectorScale( ( 0, 0, 0 ), 90 );
gs2 ghost();
gs2 thread delete_upon_flag( "general_store_porch_door1" );
collision4 = spawn( "script_model", ( 1672, 692, 99 ) );
collision4 setmodel( "collision_geo_128x128x10_slick" );
collision4.angles = ( 280,6, 270, 86,6 );
collision4 ghost();
cw1 = spawn( "script_model", ( 320, -1988, 116 ) );
cw1 setmodel( "collision_geo_128x128x128_standard" );
cw1.angles = ( 0, 0, 0 );
cw1 ghost();
rock1 = spawn( "script_model", ( 311, -1945, 104 ) );
rock1 setmodel( "p6_zm_bu_rock_strata_column_01" );
rock1.angles = vectorScale( ( 0, 0, 0 ), 90 );
st1 = spawn( "script_model", ( -736, -2, 25 ) );
st1 setmodel( "collision_geo_128x128x10_standard" );
st1.angles = ( 270, 45, 0 );
st1 ghost();
ml1 = spawn( "script_model", ( 2831, 440, 405 ) );
ml1 setmodel( "collision_geo_128x128x128_standard" );
ml1.angles = ( 0, 0, 0 );
ml1 ghost();
ml2 = spawn( "script_model", ( 2831, 680, 420 ) );
ml2 setmodel( "collision_geo_128x128x128_standard" );
ml2.angles = ( 0, 0, 0 );
ml2 ghost();
mr1 = spawn( "script_model", ( 2380, 1123, 350 ) );
mr1 setmodel( "collision_geo_256x256x10_standard" );
mr1.angles = ( 0, 13,8, -90 );
mr1 ghost();
th1 = spawn( "script_model", ( 2072, 1168, 360 ) );
th1 setmodel( "collision_geo_128x128x128_standard" );
th1.angles = ( 0, 0, 0 );
th1 ghost();
th1a = spawn( "script_model", ( 2296, 1088, 400 ) );
th1a setmodel( "collision_geo_128x128x128_standard" );
th1a.angles = ( 0, 0, 0 );
th1a ghost();
th2 = spawn( "script_model", ( -544, 510, 286 ) );
th2 setmodel( "collision_geo_256x256x10_standard" );
th2.angles = ( 0, 7,2, -7,8 );
th2 ghost();
th2a = spawn( "script_model", ( -296,95, 537,996, 312,557 ) );
th2a setmodel( "collision_geo_256x256x10_standard" );
th2a.angles = ( 347,355, 6,47392, -7,41809 );
th2a ghost();
th3 = spawn( "script_model", ( 864, 872, 420 ) );
th3 setmodel( "collision_geo_256x256x256_standard" );
th3.angles = ( 0, 0, 0 );
th3 ghost();
th4 = spawn( "script_model", ( 2361, 1056, 398 ) );
th4 setmodel( "collision_geo_256x256x10_standard" );
th4.angles = vectorScale( ( 0, 0, 0 ), 270 );
th4 ghost();
ch1 = spawn( "script_model", ( 1954, 1996, 222 ) );
ch1 setmodel( "collision_geo_256x256x10_standard" );
ch1.angles = ( 270, 340, 0,32 );
ch1 ghost();
ch2 = spawn( "script_model", ( 1945, 1972, 222 ) );
ch2 setmodel( "collision_geo_256x256x10_standard" );
ch2.angles = ( 270, 340, 0,32 );
ch2 ghost();
rock1 = spawn( "script_model", ( 3259,54, -189,38, 146,23 ) );
rock1 setmodel( "p6_zm_bu_rock_strata_column_01" );
rock1.angles = ( 7,87264, 94,015, 4,57899 );
rock2 = spawn( "script_model", ( 3351,97, -254,58, 95 ) );
rock2 setmodel( "p6_zm_bu_rock_strata_01" );
rock2.angles = vectorScale( ( 0, 0, 0 ), 169,1 );
yt1 = spawn( "script_model", ( 671, -1412, 214 ) );
yt1 setmodel( "collision_geo_64x64x10_slick" );
yt1.angles = ( 62,8, 315, 0 );
yt1 ghost();
yt2 = spawn( "script_model", ( 676, -1407, 214 ) );
yt2 setmodel( "collision_geo_64x64x10_slick" );
yt2.angles = ( 62,8, 315, 0 );
yt2 ghost();
stb1 = spawn( "script_model", ( -807, 59, 127 ) );
stb1 setmodel( "collision_geo_64x64x10_standard" );
stb1.angles = vectorScale( ( 0, 0, 0 ), 90 );
stb1 ghost();
stb2 = spawn( "script_model", ( -807, 59, 191 ) );
stb2 setmodel( "collision_geo_64x64x10_standard" );
stb2.angles = vectorScale( ( 0, 0, 0 ), 90 );
stb2 ghost();
stb3 = spawn( "script_model", ( -861, 59, 31 ) );
stb3 setmodel( "collision_geo_128x128x10_standard" );
stb3.angles = vectorScale( ( 0, 0, 0 ), 90 );
stb3 ghost();
j162 = spawn( "script_model", ( 912, -936, 214 ) );
j162 setmodel( "collision_geo_128x128x10_standard" );
j162.angles = ( 0, 0, 0 );
j162 ghost();
j156 = spawn( "script_model", ( 434, 1213, 184 ) );
j156 setmodel( "collision_geo_128x128x10_standard" );
j156.angles = vectorScale( ( 0, 0, 0 ), 273 );
j156 ghost();
j163_1 = spawn( "script_model", ( 1663, 68, 29 ) );
j163_1 setmodel( "collision_geo_128x128x10_slick" );
j163_1.angles = vectorScale( ( 0, 0, 0 ), 270 );
j163_1 ghost();
j163_2 = spawn( "script_model", ( 1663, 259, 29 ) );
j163_2 setmodel( "collision_geo_128x128x10_slick" );
j163_2.angles = vectorScale( ( 0, 0, 0 ), 270 );
j163_2 ghost();
j125_1 = spawn( "script_model", ( 2443,65, 1013,54, 236,213 ) );
j125_1 setmodel( "p6_zm_bu_rock_strata_04" );
j125_1.angles = ( 13,345, 103,42, -13,4657 );
j125_3 = spawn( "script_model", ( 2448,7, 852,791, 272,051 ) );
j125_3 setmodel( "p6_zm_bu_wood_planks_106x171" );
j125_3.angles = ( 0, 270, 19,4 );
j125_4 = spawn( "script_model", ( 2313,21, 872,54, 241,01 ) );
j125_4 setmodel( "p6_zm_bu_wood_planks_106x171" );
j125_4.angles = ( 0, 0, 0 );
}
}
delete_upon_flag( flag_notify )
{
level flag_wait( flag_notify );
self delete();
}
init_push_triggers()
{
ghost_mansion_to_maze_push_trigger_left();
ghost_mansion_to_maze_push_trigger_right();
ghost_mansion_from_maze_push_trigger();
a_push_triggers = getentarray( "push_trigger", "script_noteworthy" );
array_thread( a_push_triggers, ::push_players_standing_in_trigger_volumes );
}
ghost_mansion_to_maze_push_trigger_left()
{
origin = ( 2656, 689, 183 );
length = 128;
width = 8;
height = 64;
trig1 = spawn( "trigger_box", origin, 0, width, length, height );
trig1.angles = vectorScale( ( 0, 0, 0 ), 325,6 );
trig1.script_noteworthy = "push_trigger";
trig1.push_player_towards_point = ( 2666, 685, 183 );
}
ghost_mansion_to_maze_push_trigger_right()
{
origin = ( 2592, 453, 183 );
length = 32;
width = 16;
height = 64;
trig1 = spawn( "trigger_box", origin, 0, width, length, height );
trig1.angles = vectorScale( ( 0, 0, 0 ), 325,6 );
trig1.script_noteworthy = "push_trigger";
trig1.push_player_towards_point = ( 2686, 440, 174 );
}
ghost_mansion_from_maze_push_trigger()
{
origin = ( 3425, 1067, 53 );
length = 128;
width = 16;
height = 64;
trig1 = spawn( "trigger_box", origin, 0, width, length, height );
trig1.angles = ( 0, 0, 0 );
trig1.script_noteworthy = "push_trigger";
trig1.push_player_towards_point = ( 3337, 1067, 90 );
}
push_players_standing_in_trigger_volumes()
{
/#
assert( isDefined( self.push_player_towards_point ), "push_player_towards_point field is undefined on push_trigger! This is required for the push functionality to work" );
#/
while ( 1 )
{
self waittill( "trigger", player );
if ( !player is_player_using_thumbstick() )
{
player setvelocity( self get_push_vector() );
}
}
}
is_player_using_thumbstick()
{
b_using_thumbstick = 1;
v_thumbstick = self getnormalizedmovement();
if ( length( v_thumbstick ) < 0,3 )
{
b_using_thumbstick = 0;
}
return b_using_thumbstick;
}
get_push_vector()
{
return vectornormalize( self.push_player_towards_point - self.origin ) * 100;
}
bar_spawner_fix()
{
bad_pos = ( 459,5, -1984, 84 );
dist_fix = 64;
bar_spawners = getstructarray( "zone_bar_spawners", "targetname" );
_a586 = bar_spawners;
_k586 = getFirstArrayKey( _a586 );
while ( isDefined( _k586 ) )
{
spawner = _a586[ _k586 ];
if ( isDefined( spawner.script_string ) && spawner.script_string == "bar2" )
{
dist = distancesquared( spawner.origin, bad_pos );
if ( dist < dist_fix )
{
spawner.origin = ( 459,5, -2020, 84 );
}
}
_k586 = getNextArrayKey( _a586, _k586 );
}
}
player_respawn_fix()
{
maze_spawners = getstructarray( "maze_spawn_points", "targetname" );
_a602 = maze_spawners;
_k602 = getFirstArrayKey( _a602 );
while ( isDefined( _k602 ) )
{
spawner = _a602[ _k602 ];
if ( spawner.origin == ( 3469, 1026, 20 ) )
{
spawner.origin = ( 3509, 1032, 76 );
}
_k602 = getNextArrayKey( _a602, _k602 );
}
}
door_clip_fix()
{
bank1 = getentarray( "pf728_auto2510", "targetname" );
i = 0;
while ( i < bank1.size )
{
if ( isDefined( bank1[ i ].script_noteworthy ) && bank1[ i ].script_noteworthy == "clip" )
{
bank1[ i ] delete();
}
i++;
}
bank2 = getentarray( "pf728_auto2507", "targetname" );
i = 0;
while ( i < bank2.size )
{
if ( isDefined( bank2[ i ].script_noteworthy ) && bank2[ i ].script_noteworthy == "clip" )
{
bank2[ i ] delete();
}
i++;
}
}
maze_blocker_fix()
{
node_org = ( 4732, 960, 32 );
node_target_org = ( 4734, 1198, 32 );
blocker_node = getnearestnode( node_org );
blocker_node_target = getnearestnode( node_target_org );
while ( 1 )
{
level waittill( "zm_buried_maze_changed" );
found = 0;
perm_list = level._maze._perms[ level._maze._cur_perm ];
_a648 = perm_list;
_k648 = getFirstArrayKey( _a648 );
while ( isDefined( _k648 ) )
{
blocker = _a648[ _k648 ];
if ( blocker == "blocker_10" )
{
found = 1;
if ( isDefined( blocker_node ) && isDefined( blocker_node_target ) )
{
unlink_nodes( blocker_node, blocker_node_target, 0 );
unlink_nodes( blocker_node_target, blocker_node, 0 );
}
}
_k648 = getNextArrayKey( _a648, _k648 );
}
if ( !found )
{
if ( isDefined( blocker_node ) && isDefined( blocker_node_target ) )
{
link_nodes( blocker_node, blocker_node_target, 1 );
link_nodes( blocker_node_target, blocker_node, 1 );
}
}
}
}
time_bomb_takeaway()
{
self endon( "disconnect" );
while ( 1 )
{
self waittill( "new_tactical_grenade", new_weapon );
if ( isDefined( new_weapon ) && new_weapon != "time_bomb_zm" && self hasweapon( "time_bomb_detonator_zm" ) )
{
self takeweapon( "time_bomb_detonator_zm" );
}
}
}
ffotd_player_threads()
{
self thread time_bomb_takeaway();
}
init_dtp_triggers()
{
barn_hay_push_trigger();
barn_rail_push_trigger();
church_fence_push_trigger();
a_push_triggers = getentarray( "push_from_dtp", "script_noteworthy" );
array_thread( a_push_triggers, ::dtp_push );
}
barn_hay_push_trigger()
{
origin = ( -1137, -190, 188 );
length = 48;
width = 64;
height = 64;
trig1 = spawn( "trigger_box", origin, 0, width, length, height );
trig1.angles = ( 0, 0, 0 );
trig1.script_noteworthy = "push_from_dtp";
trig1.push_player_towards_point = ( -1137, -264, 200 );
}
barn_rail_push_trigger()
{
origin = ( -1137, -211, 188 );
length = 32;
width = 128;
height = 64;
trig1 = spawn( "trigger_box", origin, 0, width, length, height );
trig1.angles = ( 0, 0, 0 );
trig1.script_noteworthy = "push_from_dtp";
trig1.push_player_towards_point = ( -1137, -285, 200 );
}
church_fence_push_trigger()
{
origin = ( 900, 1000, 54 );
length = 64;
width = 192;
height = 64;
trig1 = spawn( "trigger_box", origin, 0, width, length, height );
trig1.angles = ( 0, 0, 0 );
trig1.script_noteworthy = "push_from_dtp";
trig1.push_player_towards_point = ( 929, 943, 64 );
}
dtp_push()
{
pos = ( 0, 0, 0 );
while ( 1 )
{
self waittill( "trigger", player );
if ( pos == player.origin )
{
if ( player getstance() == "prone" )
{
player setstance( "crouch" );
}
player setvelocity( self get_push_vector() );
}
pos = player.origin;
wait 0,5;
}
}