From 3a4c054f24671e902ca7d451061b30e1a6ad2cda Mon Sep 17 00:00:00 2001 From: Jbleezy Date: Thu, 16 Mar 2023 03:17:12 -0700 Subject: [PATCH] Tranzit: add Cornfield location --- README.md | 13 +- scripts/zm/locs/zm_transit_loc_cornfield.gsc | 236 ++++++++++++++++++ scripts/zm/replaced/_zm_perks.gsc | 22 ++ scripts/zm/replaced/zm_transit_gamemodes.gsc | 4 + scripts/zm/zgrief/zgrief_reimagined.gsc | 4 + .../zm/zgrief/zgrief_reimagined_server.gsc | 6 +- 6 files changed, 282 insertions(+), 3 deletions(-) create mode 100644 scripts/zm/locs/zm_transit_loc_cornfield.gsc diff --git a/README.md b/README.md index 69911ab6..41be0819 100644 --- a/README.md +++ b/README.md @@ -413,6 +413,7 @@ * Added Survival and Grief game modes * Wallbuys: M14, Olympia, MP5, Galvaknuckles * Perks: Juggernog, Quick Revive, Speed Cola, Double Tap +* No Pack-a-Punch #### Farm * Zombies spawn in the Farm zone when in the Barn zone @@ -422,7 +423,7 @@ #### Power Station * Added Survival and Grief game modes -* Wallbuys: M14, Olympia, AK74u, MP5, Bowie Knife +* Wallbuys: M14, Olympia, MP5, Ak74u, Remington 870, Bowie Knife * Perks: Juggernog, Quick Revive, Speed Cola, Double Tap, Tombstone Soda * Pack-a-Punch @@ -434,10 +435,18 @@ #### Tunnel * Added Survival and Grief game modes -* Wallbuys: M14, Olympia, M16, MP5, Semtex +* Wallbuys: M14, Olympia, MP5, M16, Semtex +* No Mystery Box * Perks: Juggernog, Quick Revive, Speed Cola, Double Tap, Stamin-Up * Pack-a-Punch +#### Cornfield +* Added Survival and Grief game modes +* Wallbuys: M14, Olympia, B23R, MP5, Ak74u, M16, Remington 870, Semtex, Claymore +* 2 Mystery Box locations +* No perks +* Pack-a-Punch + ### Die Rise * Moved weapon locker to the downstairs fridge * Zombies no longer spawn in the Upper Blue Highrise zone when in the Trample Steam zone diff --git a/scripts/zm/locs/zm_transit_loc_cornfield.gsc b/scripts/zm/locs/zm_transit_loc_cornfield.gsc new file mode 100644 index 00000000..607e42d5 --- /dev/null +++ b/scripts/zm/locs/zm_transit_loc_cornfield.gsc @@ -0,0 +1,236 @@ +#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() +{ + scripts\zm\replaced\utility::register_perk_struct( "", "", ( 0, 0, 0 ), ( 0, 0, 0 ) ); // need this for pap to work + scripts\zm\replaced\utility::register_perk_struct( "specialty_weapupgrade", "p6_anim_zm_buildable_pap_on", ( 10460, -564, -220 ), ( 0, -35, 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_cornfield") + { + ind = i; + break; + } + } + + level.struct_class_names["script_noteworthy"]["initial_spawn"] = []; + + respawn_array = getstructarray(respawnpoints[ind].target, "targetname"); + foreach(respawn in respawn_array) + { + origin = respawn.origin + (anglesToRight(respawn.angles) * 32); + angles = respawn.angles; + script_int = 1; + + scripts\zm\replaced\utility::register_map_initial_spawnpoint( origin, angles, script_int ); + + origin = respawn.origin + (anglesToRight(respawn.angles) * -32); + angles = respawn.angles; + script_int = 2; + + scripts\zm\replaced\utility::register_map_initial_spawnpoint( origin, angles, script_int ); + } + + structs = getstructarray( "game_mode_object", "targetname" ); + foreach ( struct in structs ) + { + if ( isDefined( struct.script_noteworthy ) && struct.script_noteworthy == "cornfield" ) + { + struct.script_string = "zstandard zgrief"; + } + } + + intermission_cam = spawnStruct(); + intermission_cam.origin = (10266, 470, -90); + intermission_cam.angles = (0, -90, 0); + intermission_cam.targetname = "intermission"; + intermission_cam.script_string = "cornfield"; + intermission_cam.speed = 30; + intermission_cam.target = "intermission_cornfield_end"; + scripts\zm\replaced\utility::add_struct(intermission_cam); + + intermission_cam_end = spawnStruct(); + intermission_cam_end.origin = (10216, -1224, -199); + intermission_cam_end.angles = (0, -90, 0); + intermission_cam_end.targetname = "intermission_cornfield_end"; + scripts\zm\replaced\utility::add_struct(intermission_cam_end); +} + +precache() +{ + start_chest_zbarrier = getEnt( "start_chest_zbarrier", "script_noteworthy" ); + start_chest_zbarrier.origin = ( 13487, 33, -182 ); + start_chest_zbarrier.angles = ( 0, 90, 0 ); + start_chest = spawnStruct(); + start_chest.origin = start_chest_zbarrier.origin; + start_chest.angles = start_chest_zbarrier.angles; + start_chest.script_noteworthy = "start_chest"; + start_chest.zombie_cost = 950; + collision = spawn( "script_model", start_chest_zbarrier.origin, 1 ); + collision.angles = start_chest_zbarrier.angles; + collision setmodel( "collision_clip_32x32x128" ); + collision disconnectpaths(); + collision = spawn( "script_model", start_chest_zbarrier.origin - ( 0, 32, 0 ), 1 ); + collision.angles = start_chest_zbarrier.angles; + collision setmodel( "collision_clip_32x32x128" ); + collision disconnectpaths(); + collision = spawn( "script_model", start_chest_zbarrier.origin + ( 0, 32, 0 ), 1 ); + collision.angles = start_chest_zbarrier.angles; + collision setmodel( "collision_clip_32x32x128" ); + collision disconnectpaths(); + + start_chest2_zbarrier = getEnt( "depot_chest_zbarrier", "script_noteworthy" ); + start_chest2_zbarrier.origin = ( 7458, -464, -197 ); + start_chest2_zbarrier.angles = ( 0, -90, 0 ); + start_chest2 = spawnStruct(); + start_chest2.origin = start_chest2_zbarrier.origin; + start_chest2.angles = start_chest2_zbarrier.angles; + start_chest2.script_noteworthy = "depot_chest"; + start_chest2.zombie_cost = 950; + collision = spawn( "script_model", start_chest2_zbarrier.origin, 1 ); + collision.angles = start_chest2_zbarrier.angles; + collision setmodel( "collision_clip_32x32x128" ); + collision disconnectpaths(); + collision = spawn( "script_model", start_chest2_zbarrier.origin - ( 0, 32, 0 ), 1 ); + collision.angles = start_chest2_zbarrier.angles; + collision setmodel( "collision_clip_32x32x128" ); + collision disconnectpaths(); + collision = spawn( "script_model", start_chest2_zbarrier.origin + ( 0, 32, 0 ), 1 ); + collision.angles = start_chest2_zbarrier.angles; + collision setmodel( "collision_clip_32x32x128" ); + collision disconnectpaths(); + + level.chests = []; + level.chests[0] = start_chest; + level.chests[1] = start_chest2; +} + +main() +{ + init_wallbuys(); + init_barriers(); + setup_standard_objects("cornfield"); + maps\mp\zombies\_zm_magicbox::treasure_chest_init( random( array( "start_chest", "depot_chest" ) ) ); + thread disable_zombie_spawn_locations(); + scripts\zm\locs\loc_common::init(); +} + +init_wallbuys() +{ + scripts\zm\replaced\utility::wallbuy( "m14_zm", "m14", "weapon_upgrade", ( 13663, -1166, -134 ), ( 0, -90, 0 ) ); + scripts\zm\replaced\utility::wallbuy( "rottweil72_zm", "olympia", "weapon_upgrade", ( 13554, -539, -133 ), ( 0, -90, 0 ) ); + scripts\zm\replaced\utility::wallbuy( "beretta93r_zm", "beretta93r", "weapon_upgrade", ( 13793, -1644, -105 ), ( 0, 0, 0 ) ); + scripts\zm\replaced\utility::wallbuy( "mp5k_zm", "mp5", "weapon_upgrade", ( 13554, -769, -133 ), ( 0, -90, 0 ) ); + scripts\zm\replaced\utility::wallbuy( "ak74u_zm", "ak74u", "weapon_upgrade", ( 13978, -1550, -134 ), ( 0, 90, 0 ) ); + scripts\zm\replaced\utility::wallbuy( "m16_zm", "m16", "weapon_upgrade", ( 14092, -351, -133 ), ( 0, 90, 0 ) ); + scripts\zm\replaced\utility::wallbuy( "870mcs_zm", "870mcs", "weapon_upgrade", ( 13554, -1387, -134 ), ( 0, -90, 0 ) ); + scripts\zm\replaced\utility::wallbuy( "sticky_grenade_zm", "sticky_grenade", "weapon_upgrade", ( 13603, -1079, -134 ), ( 0, 0, 0 ) ); + scripts\zm\replaced\utility::wallbuy( "claymore_zm", "claymore", "claymore_purchase", ( 13603, -1282, -134 ), ( 0, -180, 0 ) ); +} + +init_barriers() +{ + model = spawn( "script_model", (10176.5, -14.8391, -221.988), 1); + model.angles = (0, 35, 0); + model setmodel("collision_clip_wall_256x256x10"); + model disconnectpaths(); + + model = spawn( "script_model", (10002.6, -95.4607, -212.275), 1); + model.angles = (0, 0, 0); + model setmodel("collision_clip_wall_128x128x10"); + model disconnectpaths(); + + model = spawn( "script_model", (10173.4, -1761.36, -217.812), 1); + model.angles = (0, -60, 0); + model setmodel("collision_clip_wall_128x128x10"); + model disconnectpaths(); + + model = spawn( "script_model", (10147.5, -1657.67, -217.208), 1); + model.angles = (0, 88, 0); + model setmodel("collision_clip_wall_256x256x10"); + model disconnectpaths(); + + model = spawn( "script_model", (10082.7, -1528.05, -217.288), 1); + model.angles = (0, -180, 0); + model setmodel("collision_clip_wall_128x128x10"); + model disconnectpaths(); + + model = spawn( "script_model", (10159.6, -1104.45, -214.861), 1); + model.angles = (0, -30, 0); + model setmodel("collision_clip_64x64x256"); + model disconnectpaths(); + + model = spawn( "script_model", (10157.4, -1222.83, -217.875), 1); + model.angles = (0, 10, 0); + model setmodel("collision_clip_64x64x256"); + model disconnectpaths(); + + model = spawn( "script_model", (10216.6, -1134.53, -217.261), 1); + model.angles = (0, -30, 0); + model setmodel("collision_clip_64x64x256"); + model disconnectpaths(); + + model = spawn( "script_model", (10147.4, -1152.83, -217.875), 1); + model.angles = (0, 10, 0); + model setmodel("collision_clip_64x64x256"); + model disconnectpaths(); + + model = spawn( "script_model", (10099.6, -1064.45, -214.861), 1); + model.angles = (0, -30, 0); + model setmodel("collision_clip_64x64x256"); + model disconnectpaths(); + + model = spawn( "script_model", (10016.8, -1490.24, -217.875), 1); + model.angles = (0, -30, 0); + model setmodel("collision_clip_128x128x128"); + model disconnectpaths(); + + model = spawn( "script_model", (10443.9, -353.378, -217.748), 1); + model.angles = (0, -35, 0); + model setmodel("collision_clip_128x128x128"); + model disconnectpaths(); + + model = spawn( "script_model", (10393.5, -421.323, -220.142), 1); + model.angles = (0, -25, 0); + model setmodel("collision_clip_128x128x128"); + model disconnectpaths(); + + model = spawn( "script_model", (10334.9, -544.594, -217.922), 1); + model.angles = (0, -25, 0); + model setmodel("collision_clip_128x128x128"); + model disconnectpaths(); +} + +disable_zombie_spawn_locations() +{ + for ( z = 0; z < level.zone_keys.size; z++ ) + { + zone_name = level.zone_keys[z]; + if(zone_name == "zone_amb_cornfield") + { + zone = level.zones[ zone_name ]; + + i = 0; + while ( i < zone.spawn_locations.size ) + { + if (zone.spawn_locations[i].origin == (8394, -2545, -205.16)) + { + zone.spawn_locations[i].is_enabled = false; + } + + i++; + } + } + } +} \ No newline at end of file diff --git a/scripts/zm/replaced/_zm_perks.gsc b/scripts/zm/replaced/_zm_perks.gsc index 5720b226..0f169414 100644 --- a/scripts/zm/replaced/_zm_perks.gsc +++ b/scripts/zm/replaced/_zm_perks.gsc @@ -351,6 +351,28 @@ add_missing_perk_machines() } } } + else if((level.script == "zm_transit" && level.scr_zm_map_start_location == "cornfield")) + { + if(isDefined(struct.script_noteworthy) && struct.script_noteworthy == "specialty_armorvest") + { + if(isDefined(struct.script_string) && isSubStr(struct.script_string, "zclassic_perks_transit")) + { + struct.script_string += " zgrief_perks_cornfield"; + struct.origin = (9985, -91, -213); + struct.angles = (0, 30, 0); + } + } + + if(isDefined(struct.script_noteworthy) && struct.script_noteworthy == "specialty_fastreload") + { + if(isDefined(struct.script_string) && isSubStr(struct.script_string, "zclassic_perks_transit")) + { + struct.script_string += " zgrief_perks_cornfield"; + struct.origin = (10257, -1802, -212); + struct.angles = (0, 180, 0); + } + } + } else if((level.script == "zm_prison" && level.scr_zm_map_start_location == "cellblock")) { if(isDefined(struct.script_noteworthy) && struct.script_noteworthy == "specialty_rof") diff --git a/scripts/zm/replaced/zm_transit_gamemodes.gsc b/scripts/zm/replaced/zm_transit_gamemodes.gsc index 143c15d8..55268d75 100644 --- a/scripts/zm/replaced/zm_transit_gamemodes.gsc +++ b/scripts/zm/replaced/zm_transit_gamemodes.gsc @@ -34,6 +34,7 @@ init() 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( "zstandard", "cornfield", scripts\zm\locs\zm_transit_loc_cornfield::precache, scripts\zm\locs\zm_transit_loc_cornfield::main ); add_map_location_gamemode( "zgrief", "transit", scripts\zm\replaced\zm_transit_grief_station::precache, scripts\zm\replaced\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 ); @@ -41,6 +42,7 @@ init() 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 ); + add_map_location_gamemode( "zgrief", "cornfield", scripts\zm\locs\zm_transit_loc_cornfield::precache, scripts\zm\locs\zm_transit_loc_cornfield::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 ); @@ -48,4 +50,6 @@ 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 ); + scripts\zm\replaced\utility::add_struct_location_gamemode_func( "zstandard", "cornfield", scripts\zm\locs\zm_transit_loc_cornfield::struct_init ); + scripts\zm\replaced\utility::add_struct_location_gamemode_func( "zgrief", "cornfield", scripts\zm\locs\zm_transit_loc_cornfield::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 22d700de..051d3d72 100644 --- a/scripts/zm/zgrief/zgrief_reimagined.gsc +++ b/scripts/zm/zgrief/zgrief_reimagined.gsc @@ -2915,6 +2915,10 @@ containment_get_zones() { containment_zones = array("zone_amb_tunnel"); } + else if(level.scr_zm_map_start_location == "cornfield") + { + containment_zones = array("zone_cornfield_prototype"); + } } else if(level.script == "zm_prison") { diff --git a/scripts/zm/zgrief/zgrief_reimagined_server.gsc b/scripts/zm/zgrief/zgrief_reimagined_server.gsc index 5bd5ad9d..14cecc40 100644 --- a/scripts/zm/zgrief/zgrief_reimagined_server.gsc +++ b/scripts/zm/zgrief/zgrief_reimagined_server.gsc @@ -45,7 +45,6 @@ precache_map_strings() precachestring(&"ZMUI_TOWN"); precachestring(&"ZMUI_DINER"); precachestring(&"ZMUI_TUNNEL"); - precachestring(&"ZMUI_POWER"); precachestring(&"ZMUI_CELLBLOCK"); precachestring(&"ZMUI_STREET_LOC"); } @@ -57,6 +56,7 @@ precache_map_images() preCacheShader("loadscreen_zm_transit_zgrief_town"); preCacheShader("loadscreen_zm_transit_zgrief_power"); preCacheShader("loadscreen_zm_transit_zgrief_tunnel"); + preCacheShader("loadscreen_zm_transit_zgrief_cornfield"); preCacheShader("loadscreen_zm_transit_dr_zcleansed_diner"); preCacheShader("loadscreen_zm_prison_zgrief_cellblock"); preCacheShader("loadscreen_zm_buried_zgrief_street"); @@ -545,6 +545,10 @@ get_name_for_loc(locname) { return &"ZMUI_TUNNEL"; } + else if (locname == "cornfield") + { + return "Cornfield"; + } else if (locname == "cellblock") { return &"ZMUI_CELLBLOCK";