From 2b1ed925a3256b5f028582e30761a57ab7dcd7cb Mon Sep 17 00:00:00 2001 From: Jbleezy Date: Mon, 15 Jan 2024 01:59:26 -0800 Subject: [PATCH] Encounter on Nuketown: all perks drop at once --- maps/mp/zm_nuked.d3dbsp | 45 ++++++++ scripts/zm/replaced/zm_nuked_perks.gsc | 140 +++++++++++++++++++++++++ 2 files changed, 185 insertions(+) diff --git a/maps/mp/zm_nuked.d3dbsp b/maps/mp/zm_nuked.d3dbsp index df88007c..32efa4fa 100644 --- a/maps/mp/zm_nuked.d3dbsp +++ b/maps/mp/zm_nuked.d3dbsp @@ -5694,6 +5694,51 @@ "guid" "7A119D3A" } { +"classname" "script_vehicle" +"vehicletype" "defaultvehicle" +"model" "defaultvehicle" +"origin" "-1511.5 -579 -52" +"targetname" "grief_perk_arrival_vehicle" +"spawnflags" "0" +"guid" "7A119D3A" +} +{ +"classname" "script_vehicle" +"vehicletype" "defaultvehicle" +"model" "defaultvehicle" +"origin" "-1511.5 -579 -52" +"targetname" "grief_perk_arrival_vehicle" +"spawnflags" "0" +"guid" "7A119D3A" +} +{ +"classname" "script_vehicle" +"vehicletype" "defaultvehicle" +"model" "defaultvehicle" +"origin" "-1511.5 -579 -52" +"targetname" "grief_perk_arrival_vehicle" +"spawnflags" "0" +"guid" "7A119D3A" +} +{ +"classname" "script_vehicle" +"vehicletype" "defaultvehicle" +"model" "defaultvehicle" +"origin" "-1511.5 -579 -52" +"targetname" "grief_perk_arrival_vehicle" +"spawnflags" "0" +"guid" "7A119D3A" +} +{ +"classname" "script_vehicle" +"vehicletype" "defaultvehicle" +"model" "defaultvehicle" +"origin" "-1511.5 -579 -52" +"targetname" "grief_perk_arrival_vehicle" +"spawnflags" "0" +"guid" "7A119D3A" +} +{ "target" "pf15_auto2911" "angles" "0 197.8 0" "targetname" "pf15_auto2903" diff --git a/scripts/zm/replaced/zm_nuked_perks.gsc b/scripts/zm/replaced/zm_nuked_perks.gsc index 30182e10..c9d8f82a 100644 --- a/scripts/zm/replaced/zm_nuked_perks.gsc +++ b/scripts/zm/replaced/zm_nuked_perks.gsc @@ -98,6 +98,18 @@ perks_from_the_sky() machine_triggers[4] trigger_off(); flag_wait("initial_blackscreen_passed"); + if (level.scr_zm_ui_gametype == "zgrief") + { + grief_bring_random_perks(machines, machine_triggers); + } + else + { + bring_random_perks(machines, machine_triggers); + } +} + +bring_random_perks(machines, machine_triggers) +{ wait(randomintrange(10, 20)); bring_random_perk(machines, machine_triggers); @@ -116,4 +128,132 @@ perks_from_the_sky() wait_for_round_range(20, 21); wait(randomintrange(60, 120)); bring_random_perk(machines, machine_triggers); +} + +grief_bring_random_perks(machines, machine_triggers) +{ + level.grief_perk_arrival_vehicles = getentarray("grief_perk_arrival_vehicle", "targetname"); + level.grief_perk_arrival_vehicles_ind = 0; + + foreach (grief_perk_arrival_vehicle in level.grief_perk_arrival_vehicles) + { + grief_perk_arrival_vehicle setmodel("tag_origin"); + } + + level waittill("restart_round_start"); + + wait(randomintrange(10, 20)); + grief_bring_random_perk(machines, machine_triggers); + grief_bring_random_perk(machines, machine_triggers); + grief_bring_random_perk(machines, machine_triggers); + grief_bring_random_perk(machines, machine_triggers); + grief_bring_random_perk(machines, machine_triggers); +} + +grief_bring_random_perk(machines, machine_triggers) +{ + count = machines.size; + + if (count <= 0) + return; + + index = randomintrange(0, count); + level thread grief_bring_perk(machines[index], machine_triggers[index]); + arrayremoveindex(machines, index); + arrayremoveindex(machine_triggers, index); +} + +grief_bring_perk(machine, trigger) +{ + initial_perk = level.grief_perk_arrival_vehicles_ind == 0; + perk_arrival_vehicle = level.grief_perk_arrival_vehicles[level.grief_perk_arrival_vehicles_ind]; + level.grief_perk_arrival_vehicles_ind++; + + if (initial_perk) + { + playsoundatposition("zmb_perks_incoming_quad_front", (0, 0, 0)); + playsoundatposition("zmb_perks_incoming_alarm", (-2198, 486, 327)); + } + + is_doubletap = 0; + is_sleight = 0; + is_revive = 0; + is_jugger = 0; + machine setclientfield("clientfield_perk_intro_fx", 1); + machine.fx = spawn("script_model", machine.origin); + machine.fx playloopsound("zmb_perks_incoming_loop", 6); + machine.fx thread perk_incoming_sound(); + machine.fx.angles = machine.angles; + machine.fx setmodel("tag_origin"); + machine.fx linkto(machine); + machine linkto(perk_arrival_vehicle, "tag_origin", (0, 0, 0), (0, 0, 0)); + start_node = getvehiclenode("perk_arrival_path_" + machine.script_int, "targetname"); + + perk_arrival_vehicle perk_follow_path(start_node); + machine unlink(); + offset = (0, 0, 0); + + if (issubstr(machine.targetname, "doubletap")) + { + forward_dir = anglestoforward(machine.original_angles + vectorscale((0, -1, 0), 90.0)); + offset = vectorscale(forward_dir * -1, 20); + is_doubletap = 1; + } + else if (issubstr(machine.targetname, "sleight")) + { + forward_dir = anglestoforward(machine.original_angles + vectorscale((0, -1, 0), 90.0)); + offset = vectorscale(forward_dir * -1, 5); + is_sleight = 1; + } + else if (issubstr(machine.targetname, "revive")) + { + forward_dir = anglestoforward(machine.original_angles + vectorscale((0, -1, 0), 90.0)); + offset = vectorscale(forward_dir * -1, 10); + trigger.blocker_model hide(); + is_revive = 1; + } + else if (issubstr(machine.targetname, "jugger")) + { + forward_dir = anglestoforward(machine.original_angles + vectorscale((0, -1, 0), 90.0)); + offset = vectorscale(forward_dir * -1, 10); + is_jugger = 1; + } + + if (!is_revive) + trigger.blocker_model delete(); + + machine.original_pos = machine.original_pos + (offset[0], offset[1], 0); + machine.origin = machine.original_pos; + machine.angles = machine.original_angles; + + if (is_revive) + { + level.quick_revive_final_pos = machine.origin; + level.quick_revive_final_angles = machine.angles; + } + + machine.fx stoploopsound(0.5); + machine setclientfield("clientfield_perk_intro_fx", 0); + playsoundatposition("zmb_perks_incoming_land", machine.origin); + trigger trigger_on(); + machine thread bring_perk_landing_damage(); + machine.fx unlink(); + machine.fx delete(); + machine notify(machine.turn_on_notify); + level notify(machine.turn_on_notify); + machine vibrate(vectorscale((0, -1, 0), 100.0), 0.3, 0.4, 3); + machine playsound("zmb_perks_power_on"); + machine maps\mp\zombies\_zm_perks::perk_fx(undefined, 1); + + if (is_revive) + { + level.revive_machine_spawned = 1; + machine thread maps\mp\zombies\_zm_perks::perk_fx("revive_light"); + } + else if (is_jugger) + machine thread maps\mp\zombies\_zm_perks::perk_fx("jugger_light"); + else if (is_doubletap) + machine thread maps\mp\zombies\_zm_perks::perk_fx("doubletap_light"); + else if (is_sleight) + machine thread maps\mp\zombies\_zm_perks::perk_fx("sleight_light"); } \ No newline at end of file