From 965d71b5142fffd7a6a3fb20eec12c3c5e66a6be Mon Sep 17 00:00:00 2001 From: Jbleezy Date: Fri, 12 Aug 2022 22:20:26 -0700 Subject: [PATCH] Tranzit: add Tunnel location --- README.md | 8 +- scripts/zm/locs/zm_transit_loc_tunnel.gsc | 258 +++++++++++++++++++ scripts/zm/replaced/utility.gsc | 30 ++- scripts/zm/replaced/zm_transit_gamemodes.gsc | 5 + scripts/zm/zgrief/zgrief_reimagined.gsc | 4 + 5 files changed, 301 insertions(+), 4 deletions(-) create mode 100644 scripts/zm/locs/zm_transit_loc_tunnel.gsc diff --git a/README.md b/README.md index 92b4b188..b1b63558 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ * Can shoot while looking at other players * Increased mantle speed * Increased ladder climb speed -* Start with semtex on maps that have semtex +* Start with Semtex on maps that have Semtex * Entering and exiting last stand no longer refills last stand weapon clip automatically * Decreased friendly player name fade out time from 1.5 seconds to 0.25 seconds * Removed enemy player name fade in time @@ -380,6 +380,12 @@ * Moved Tombstone Soda to the laundry room front door * Grief: added Tombstone Soda +#### Tunnel +* Added Survival and Grief gamemodes +* Wallbuys: M14, Olympia, M16, MP5, Semtex +* Perks: Juggernog, Quick Revive, Speed Cola, Double Tap, Stamin-Up +* Pack-a-Punch + ### Die Rise * Zombies no longer spawn in the Upper Blue Highrise zone when in the Trample Steam zone * Zombies no longer spawn in the zone next to the AN94 when in the AN94 zone while the debris is closed diff --git a/scripts/zm/locs/zm_transit_loc_tunnel.gsc b/scripts/zm/locs/zm_transit_loc_tunnel.gsc new file mode 100644 index 00000000..3dc68ce8 --- /dev/null +++ b/scripts/zm/locs/zm_transit_loc_tunnel.gsc @@ -0,0 +1,258 @@ +#include maps/mp/zombies/_zm_game_module; +#include maps/mp/zombies/_zm_utility; +#include common_scripts/utility; +#include maps/mp/_utility; +#include maps/mp/zombies/_zm; +#include maps/mp/zombies/_zm_zonemgr; + +#include scripts/zm/replaced/utility; +#include scripts/zm/locs/loc_common; + +struct_init() +{ + replaceFunc(maps/mp/zombies/_zm_zonemgr::manage_zones, ::manage_zones); + + scripts/zm/replaced/utility::register_perk_struct( "specialty_armorvest", "zombie_vending_jugg", ( -11541, -2630, 194 ), ( 0, -180, 0 ) ); + scripts/zm/replaced/utility::register_perk_struct( "specialty_quickrevive", "zombie_vending_quickrevive", ( -10780, -2565, 224 ), ( 0, 270, 0 ) ); + scripts/zm/replaced/utility::register_perk_struct( "specialty_fastreload", "zombie_vending_sleight", ( -11373, -1674, 192 ), ( 0, -89, 0 ) ); + scripts/zm/replaced/utility::register_perk_struct( "specialty_rof", "zombie_vending_doubletap2", ( -11170, -590, 196 ), ( 0, -10, 0 ) ); + scripts/zm/replaced/utility::register_perk_struct( "specialty_longersprint", "zombie_vending_marathon", ( -11681, -734, 228 ), ( 0, -19, 0 ) ); + scripts/zm/replaced/utility::register_perk_struct( "specialty_weapupgrade", "p6_anim_zm_buildable_pap_on", ( -11301, -2096, 184 ), ( 0, 115, 0 ) ); + + ind = 0; + respawnpoints = maps/mp/gametypes_zm/_zm_gametype::get_player_spawns_for_gametype(); + for(i = 0; i < respawnpoints.size; i++) + { + if(respawnpoints[i].script_noteworthy == "zone_amb_tunnel") + { + ind = i; + break; + } + } + + respawn_array = getstructarray(respawnpoints[ind].target, "targetname"); + foreach(respawn in respawn_array) + { + // if(respawn.script_int == 2) + // { + // respawn.angles += (0, 180, 0); + // } + + scripts/zm/replaced/utility::register_map_initial_spawnpoint( respawn.origin, respawn.angles, respawn.script_int ); + } +} + +precache() +{ + +} + +main() +{ + init_wallbuys(); + init_barriers(); + thread disable_zombie_spawn_locations(); + scripts/zm/locs/loc_common::init(); +} + +init_wallbuys() +{ + scripts/zm/replaced/utility::wallbuy( "m14_zm", "m14", "weapon_upgrade", ( -11166, -2844, 247 ), ( 0, -86, 0 ) ); + scripts/zm/replaced/utility::wallbuy( "rottweil72_zm", "olympia", "weapon_upgrade", ( -10787, -1430, 247 ), ( 0, 88, 0 ) ); + scripts/zm/replaced/utility::wallbuy( "mp5k_zm", "mp5", "weapon_upgrade", ( -10656, -752, 247 ), ( 0, 83, 0 ) ); + scripts/zm/replaced/utility::wallbuy( "m16_zm", "m16", "weapon_upgrade", ( -11839, -1695.1, 287 ), ( 0, 270, 0 ) ); + scripts/zm/replaced/utility::wallbuy( "sticky_grenade_zm", "sticky_grenade", "weapon_upgrade", ( -11839, -2406, 283 ), ( 0, -93, 0 ) ); +} + +init_barriers() +{ + origin = ( -11270, -500, 255 ); + angles = ( 0, 195, 0 ); + scripts/zm/replaced/utility::barrier( "collision_player_wall_512x512x10", origin + (anglesToRight(angles) * -25) + (anglesToForward(angles) * 150), angles ); + scripts/zm/replaced/utility::barrier( "veh_t6_civ_60s_coupe_dead", origin + (anglesToUp(angles) * -63) + (anglesToForward(angles) * 125) + (anglesToRight(angles) * 25), angles ); + scripts/zm/replaced/utility::barrier( "veh_t6_civ_smallwagon_dead", origin + (anglesToUp(angles) * -63) + (anglesToForward(angles) * -30) + (anglesToRight(angles) * 50), angles + (0, -90, 0) ); + + origin = ( -10750, -3275, 255 ); + angles = ( 0, 195, 0 ); + scripts/zm/replaced/utility::barrier( "collision_player_wall_512x512x10", origin + (anglesToRight(angles) * 55), angles ); + scripts/zm/replaced/utility::barrier( "veh_t6_civ_movingtrk_cab_dead", origin, angles ); +} + +disable_zombie_spawn_locations() +{ + wait 10; + player = get_players()[0]; + player notify( "stop_player_out_of_playable_area_monitor" ); + + for ( z = 0; z < level.zone_keys.size; z++ ) + { + zone = level.zones[ level.zone_keys[ z ] ]; + if(zone == "zone_amb_tunnel") + { + i = 0; + while ( i < zone.spawn_locations.size ) + { + if ( zone.spawn_locations[ i ].origin == ( -11447, -3424, 254.2 ) ) + { + zone.spawn_locations[ i ].is_enabled = false; + } + else if ( zone.spawn_locations[ i ].origin == ( -11093, 393, 192 ) ) + { + zone.spawn_locations[ i ].is_enabled = false; + } + else if ( zone.spawn_locations[ i ].origin == ( -10944, -3846, 221.14 ) ) + { + zone.spawn_locations[ i ].is_enabled = false; + } + else if ( zone.spawn_locations[ i ].origin == ( -10836, 1195, 209.7 ) ) + { + zone.spawn_locations[ i ].is_enabled = false; + } + else if ( zone.spawn_locations[ i ].origin == ( -11251, -4397, 200.02 ) ) + { + zone.spawn_locations[ i ].is_enabled = false; + } + else if ( zone.spawn_locations[ i ].origin == ( -11334, -5280, 212.7 ) ) + { + zone.spawn_locations[ i ].is_enabled = false; + } + else if ( zone.spawn_locations[ i ].origin == ( -11347, -3134, 283.9 ) ) + { + zone.spawn_locations[ i ].is_enabled = false; + } + + i++; + } + } + } +} + +manage_zones( initial_zone ) +{ + initial_zone = []; + initial_zone[0] = "zone_amb_tunnel"; + + deactivate_initial_barrier_goals(); + zone_choke = 0; + spawn_points = maps/mp/gametypes_zm/_zm_gametype::get_player_spawns_for_gametype(); + for ( i = 0; i < spawn_points.size; i++ ) + { + spawn_points[ i ].locked = 1; + } + if ( isDefined( level.zone_manager_init_func ) ) + { + [[ level.zone_manager_init_func ]](); + } + + if ( isarray( initial_zone ) ) + { + for ( i = 0; i < initial_zone.size; i++ ) + { + zone_init( initial_zone[ i ] ); + enable_zone( initial_zone[ i ] ); + } + } + else + { + zone_init( initial_zone ); + enable_zone( initial_zone ); + } + setup_zone_flag_waits(); + zkeys = getarraykeys( level.zones ); + level.zone_keys = zkeys; + level.newzones = []; + for ( z = 0; z < zkeys.size; z++ ) + { + level.newzones[ zkeys[ z ] ] = spawnstruct(); + } + oldzone = undefined; + flag_set( "zones_initialized" ); + flag_wait( "begin_spawning" ); + while ( getDvarInt( "noclip" ) == 0 || getDvarInt( "notarget" ) != 0 ) + { + for( z = 0; z < zkeys.size; z++ ) + { + level.newzones[ zkeys[ z ] ].is_active = 0; + level.newzones[ zkeys[ z ] ].is_occupied = 0; + } + a_zone_is_active = 0; + a_zone_is_spawning_allowed = 0; + level.zone_scanning_active = 1; + z = 0; + while ( z < zkeys.size ) + { + zone = level.zones[ zkeys[ z ] ]; + newzone = level.newzones[ zkeys[ z ] ]; + if( !zone.is_enabled ) + { + z++; + continue; + } + if ( isdefined(level.zone_occupied_func ) ) + { + newzone.is_occupied = [[ level.zone_occupied_func ]]( zkeys[ z ] ); + } + else + { + newzone.is_occupied = player_in_zone( zkeys[ z ] ); + } + if ( newzone.is_occupied ) + { + newzone.is_active = 1; + a_zone_is_active = 1; + if ( zone.is_spawning_allowed ) + { + a_zone_is_spawning_allowed = 1; + } + if ( !isdefined(oldzone) || oldzone != newzone ) + { + level notify( "newzoneActive", zkeys[ z ] ); + oldzone = newzone; + } + azkeys = getarraykeys( zone.adjacent_zones ); + for ( az = 0; az < zone.adjacent_zones.size; az++ ) + { + if ( zone.adjacent_zones[ azkeys[ az ] ].is_connected && level.zones[ azkeys[ az ] ].is_enabled ) + { + level.newzones[ azkeys[ az ] ].is_active = 1; + if ( level.zones[ azkeys[ az ] ].is_spawning_allowed ) + { + a_zone_is_spawning_allowed = 1; + } + } + } + } + zone_choke++; + if ( zone_choke >= 3 ) + { + zone_choke = 0; + wait 0.05; + } + z++; + } + level.zone_scanning_active = 0; + for ( z = 0; z < zkeys.size; z++ ) + { + level.zones[ zkeys[ z ] ].is_active = level.newzones[ zkeys[ z ] ].is_active; + level.zones[ zkeys[ z ] ].is_occupied = level.newzones[ zkeys[ z ] ].is_occupied; + } + if ( !a_zone_is_active || !a_zone_is_spawning_allowed ) + { + if ( isarray( initial_zone ) ) + { + level.zones[ initial_zone[ 0 ] ].is_active = 1; + level.zones[ initial_zone[ 0 ] ].is_occupied = 1; + level.zones[ initial_zone[ 0 ] ].is_spawning_allowed = 1; + } + else + { + level.zones[ initial_zone ].is_active = 1; + level.zones[ initial_zone ].is_occupied = 1; + level.zones[ initial_zone ].is_spawning_allowed = 1; + } + } + [[ level.create_spawner_list_func ]]( zkeys ); + level.active_zone_names = maps/mp/zombies/_zm_zonemgr::get_active_zone_names(); + wait 1; + } +} \ No newline at end of file diff --git a/scripts/zm/replaced/utility.gsc b/scripts/zm/replaced/utility.gsc index d4c48377..dbaf6be3 100644 --- a/scripts/zm/replaced/utility.gsc +++ b/scripts/zm/replaced/utility.gsc @@ -176,9 +176,13 @@ wallbuy( weapon_name, target, targetname, origin, angles ) unitrigger_stub.angles = angles; model_name = undefined; - if ( weapon_name == "claymore_zm" ) + if ( weapon_name == "sticky_grenade_zm" ) { - model_name = "t6_wpn_claymore_world"; // getWeaponModel for claymore is wrong model + model_name = "semtex_bag"; + } + else if ( weapon_name == "claymore_zm" ) + { + model_name = "t6_wpn_claymore_world"; } wallmodel = spawn_weapon_model( weapon_name, model_name, origin, angles ); @@ -197,7 +201,7 @@ wallbuy( weapon_name, target, targetname, origin, angles ) unitrigger_stub.targetname = targetname; unitrigger_stub.cursor_hint = "HINT_NOICON"; - // move model foreward so it always shows in front of chalk + // move model forward so it always shows in front of chalk move_amount = anglesToRight( wallmodel.angles ) * -0.3; wallmodel.origin += move_amount; unitrigger_stub.origin += move_amount; @@ -289,6 +293,11 @@ wallbuy( weapon_name, target, targetname, origin, angles ) chalk_fx = weapon_name + "_fx"; level thread playchalkfx( chalk_fx, origin, angles ); + + if(weaponType(weapon_name) == "grenade") + { + unitrigger_stub thread wallbuy_grenade_model_fix(); + } } playchalkfx( effect, origin, angles ) @@ -302,6 +311,21 @@ playchalkfx( effect, origin, angles ) } } + +// fixes grenade wallbuy model doing first trigger animation everytime +wallbuy_grenade_model_fix() +{ + model = getent(self.target, "targetname"); + if(!isDefined(model)) + { + return; + } + + model waittill("movedone"); + + self.target = undefined; +} + barrier( model, origin, angles, not_solid ) { if ( !isDefined( level.survival_barriers ) ) diff --git a/scripts/zm/replaced/zm_transit_gamemodes.gsc b/scripts/zm/replaced/zm_transit_gamemodes.gsc index 7d164f61..623afa7a 100644 --- a/scripts/zm/replaced/zm_transit_gamemodes.gsc +++ b/scripts/zm/replaced/zm_transit_gamemodes.gsc @@ -15,6 +15,7 @@ #include scripts/zm/locs/zm_transit_loc_diner; #include scripts/zm/locs/zm_transit_loc_power; +#include scripts/zm/locs/zm_transit_loc_tunnel; init() { @@ -29,15 +30,19 @@ init() add_map_location_gamemode( "zstandard", "town", maps/mp/zm_transit_standard_town::precache, maps/mp/zm_transit_standard_town::main ); add_map_location_gamemode( "zstandard", "diner", scripts/zm/locs/zm_transit_loc_diner::precache, scripts/zm/locs/zm_transit_loc_diner::main ); add_map_location_gamemode( "zstandard", "power", scripts/zm/locs/zm_transit_loc_power::precache, scripts/zm/locs/zm_transit_loc_power::main ); + add_map_location_gamemode( "zstandard", "tunnel", scripts/zm/locs/zm_transit_loc_tunnel::precache, scripts/zm/locs/zm_transit_loc_tunnel::main ); add_map_location_gamemode( "zgrief", "transit", maps/mp/zm_transit_grief_station::precache, maps/mp/zm_transit_grief_station::main ); add_map_location_gamemode( "zgrief", "farm", maps/mp/zm_transit_grief_farm::precache, maps/mp/zm_transit_grief_farm::main ); add_map_location_gamemode( "zgrief", "town", maps/mp/zm_transit_grief_town::precache, maps/mp/zm_transit_grief_town::main ); add_map_location_gamemode( "zgrief", "diner", scripts/zm/locs/zm_transit_loc_diner::precache, scripts/zm/locs/zm_transit_loc_diner::main ); add_map_location_gamemode( "zgrief", "power", scripts/zm/locs/zm_transit_loc_power::precache, scripts/zm/locs/zm_transit_loc_power::main ); + add_map_location_gamemode( "zgrief", "tunnel", scripts/zm/locs/zm_transit_loc_tunnel::precache, scripts/zm/locs/zm_transit_loc_tunnel::main ); scripts/zm/replaced/utility::add_struct_location_gamemode_func( "zstandard", "diner", scripts/zm/locs/zm_transit_loc_diner::struct_init ); scripts/zm/replaced/utility::add_struct_location_gamemode_func( "zgrief", "diner", scripts/zm/locs/zm_transit_loc_diner::struct_init ); scripts/zm/replaced/utility::add_struct_location_gamemode_func( "zstandard", "power", scripts/zm/locs/zm_transit_loc_power::struct_init ); scripts/zm/replaced/utility::add_struct_location_gamemode_func( "zgrief", "power", scripts/zm/locs/zm_transit_loc_power::struct_init ); + scripts/zm/replaced/utility::add_struct_location_gamemode_func( "zstandard", "tunnel", scripts/zm/locs/zm_transit_loc_tunnel::struct_init ); + scripts/zm/replaced/utility::add_struct_location_gamemode_func( "zgrief", "tunnel", scripts/zm/locs/zm_transit_loc_tunnel::struct_init ); } \ No newline at end of file diff --git a/scripts/zm/zgrief/zgrief_reimagined.gsc b/scripts/zm/zgrief/zgrief_reimagined.gsc index b0bcc945..36c43311 100644 --- a/scripts/zm/zgrief/zgrief_reimagined.gsc +++ b/scripts/zm/zgrief/zgrief_reimagined.gsc @@ -2385,6 +2385,10 @@ containment_init() { level.containment_zones = array("zone_town_north", "zone_town_south", "zone_town_east", "zone_town_west", "zone_bar", "zone_town_barber", "zone_ban"); } + else if(level.scr_zm_map_start_location == "tunnel") + { + level.containment_zones = array("zone_amb_tunnel"); + } } else if(level.script == "zm_prison") {