From ca98c642c7236cfb9e64ae64f05477328916cffb Mon Sep 17 00:00:00 2001 From: Heroman Date: Tue, 9 Nov 2021 05:50:16 +1000 Subject: [PATCH 001/172] Adds cooking oil, replaces usages of corn oil --- code/modules/economy/vending_machines.dm | 4 +-- code/modules/food/food/condiment.dm | 13 ++++++-- code/modules/food/food/snacks.dm | 2 +- .../food/kitchen/cooking_machines/fryer.dm | 30 +++++++++---------- code/modules/food/recipes_microwave.dm | 19 +++++++++++- .../machinery/dispenser/reagent_tank.dm | 2 +- .../reagents/reactions/instant/drinks.dm | 10 +++---- .../reagents/reactions/instant/food.dm | 18 ++++++++++- code/modules/reagents/reagents/food_drinks.dm | 6 ++++ 9 files changed, 75 insertions(+), 29 deletions(-) diff --git a/code/modules/economy/vending_machines.dm b/code/modules/economy/vending_machines.dm index f3680e13e73..0228a4c87b0 100644 --- a/code/modules/economy/vending_machines.dm +++ b/code/modules/economy/vending_machines.dm @@ -57,7 +57,7 @@ /obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao = 5, /obj/item/weapon/reagent_containers/food/drinks/bottle/cognac = 5, /obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine = 5, - /obj/item/weapon/reagent_containers/food/condiment/cornoil = 5, + /obj/item/weapon/reagent_containers/food/condiment/cookingoil = 5, /obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua = 5, /obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor = 5, /obj/item/weapon/reagent_containers/food/drinks/bottle/peppermintschnapps = 5, @@ -587,7 +587,7 @@ icon_state = "dinnerware" products = list( /obj/item/weapon/reagent_containers/food/condiment/yeast = 5, - /obj/item/weapon/reagent_containers/food/condiment/cornoil = 5, + /obj/item/weapon/reagent_containers/food/condiment/cookingoil = 5, /obj/item/weapon/tray = 8, /obj/item/weapon/material/kitchen/utensil/fork = 6, /obj/item/weapon/material/knife/plastic = 6, diff --git a/code/modules/food/food/condiment.dm b/code/modules/food/food/condiment.dm index abf4f89b373..5b137957db7 100644 --- a/code/modules/food/food/condiment.dm +++ b/code/modules/food/food/condiment.dm @@ -101,9 +101,9 @@ desc = "Often used to flavor food or make people sneeze." icon_state = "peppermillsmall" center_of_mass = list("x"=17, "y"=11) - if("cornoil") - name = "Corn Oil" - desc = "A delicious oil used in cooking. Made from corn." + if("cookingoil") + name = "Cooking Oil" + desc = "A delicious oil used in cooking. General purpose." icon_state = "oliveoil" center_of_mass = list("x"=16, "y"=6) if("sugar") @@ -175,6 +175,13 @@ . = ..() reagents.add_reagent("capsaicin", 50) +/obj/item/weapon/reagent_containers/food/condiment/cookingoil + name = "Cooking Oil" + +/obj/item/weapon/reagent_containers/food/condiment/cookingoil/Initialize() + . = ..() + reagents.add_reagent("cookingoil", 50) + /obj/item/weapon/reagent_containers/food/condiment/cornoil name = "Corn Oil" diff --git a/code/modules/food/food/snacks.dm b/code/modules/food/food/snacks.dm index 8e87f8d71d0..51ec3d82e65 100644 --- a/code/modules/food/food/snacks.dm +++ b/code/modules/food/food/snacks.dm @@ -3361,7 +3361,7 @@ . = ..() reagents.add_reagent("blackpepper", 1) reagents.add_reagent("sodiumchloride", 1) - reagents.add_reagent("cornoil", 1) + reagents.add_reagent("cookingoil", 1) /obj/item/weapon/reagent_containers/food/snacks/turkeyslice name = "turkey drumstick" diff --git a/code/modules/food/kitchen/cooking_machines/fryer.dm b/code/modules/food/kitchen/cooking_machines/fryer.dm index 6c2e0d9b71c..bcaad4e6939 100644 --- a/code/modules/food/kitchen/cooking_machines/fryer.dm +++ b/code/modules/food/kitchen/cooking_machines/fryer.dm @@ -13,13 +13,13 @@ appliancetype = FRYER active_power_usage = 12 KILOWATTS heating_power = 12 KILOWATTS - + light_y = 15 - + min_temp = 140 + T0C // Same as above, increasing this to just under 2x to make the % increase on efficiency not quite so painful as it would be at 80. optimal_temp = 400 + T0C // Increasing this to be 2x Oven to allow for a much higher/realistic frying temperatures. Doesn't really do anything but make heating the fryer take a bit longer. optimal_power = 0.95 // .35 higher than the default to give fryers faster cooking speed. - + idle_power_usage = 3.6 KILOWATTS // Power used to maintain temperature once it's heated. // Going with 25% of the active power. This is a somewhat arbitrary value. @@ -33,11 +33,11 @@ var/datum/reagents/oil var/optimal_oil = 9000 //90 litres of cooking oil - + /obj/machinery/appliance/cooker/fryer/Initialize() . = ..() fry_loop = new(list(src), FALSE) - + oil = new/datum/reagents(optimal_oil * 1.25, src) var/variance = rand()*0.15 // Fryer is always a little below full, but its usually negligible @@ -45,18 +45,18 @@ if(prob(20)) // Sometimes the fryer will start with much less than full oil, significantly impacting efficiency until filled variance = rand()*0.5 - oil.add_reagent("cornoil", optimal_oil*(1 - variance)) + oil.add_reagent("cookingoil", optimal_oil*(1 - variance)) /obj/machinery/appliance/cooker/fryer/Destroy() QDEL_NULL(fry_loop) QDEL_NULL(oil) return ..() - + /obj/machinery/appliance/cooker/fryer/examine(var/mob/user) . = ..() if(Adjacent(user)) to_chat(user, "Oil Level: [oil.total_volume]/[optimal_oil]") - + /obj/machinery/appliance/cooker/fryer/update_icon() // We add our own version of the proc to use the special fryer double-lights. cut_overlays() var/image/light @@ -69,7 +69,7 @@ light.pixel_x = light_x light.pixel_y = light_y add_overlay(light) - + /obj/machinery/appliance/cooker/fryer/heat_up() if (..()) //Set temperature of oil reagent @@ -102,7 +102,7 @@ cooking_power *= oil_efficiency - + /obj/machinery/appliance/cooker/fryer/update_icon() if(!stat) ..() @@ -119,7 +119,7 @@ if(fry_loop) fry_loop.stop(src) ..() - + //Fryer gradually infuses any cooked food with oil. Moar calories //This causes a slow drop in oil levels, encouraging refill after extended use /obj/machinery/appliance/cooker/fryer/do_cooking_tick(var/datum/cooking_item/CI) @@ -177,13 +177,13 @@ return // user.visible_message("\The [user] starts pushing \the [victim] into \the [src]!") - + //Removed delay on this action in favour of a cooldown after it //If you can lure someone close to the fryer and grab them then you deserve success. //And a delay on this kind of niche action just ensures it never happens //Cooldown ensures it can't be spammed to instakill someone user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN*3) - + fry_loop.start(src) if(!do_mob(user, victim, 20)) @@ -239,9 +239,9 @@ //Coat the victim in some oil oil.trans_to(victim, 40) - + fry_loop.stop() - + /obj/machinery/appliance/cooker/fryer/attackby(var/obj/item/I, var/mob/user) if(istype(I, /obj/item/weapon/reagent_containers/glass) && I.reagents) if (I.reagents.total_volume <= 0 && oil) diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm index c909c29fc51..34f4146159c 100644 --- a/code/modules/food/recipes_microwave.dm +++ b/code/modules/food/recipes_microwave.dm @@ -522,13 +522,20 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/cutlet -/datum/recipe/roastedsunflowerseeds +/datum/recipe/roastedcornsunflowerseeds reagents = list("sodiumchloride" = 1, "cornoil" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/rawsunflower ) result = /obj/item/weapon/reagent_containers/food/snacks/roastedsunflower +/datum/recipe/roastedsunflowerseeds + reagents = list("sodiumchloride" = 1, "cookingoil" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/rawsunflower + ) + result = /obj/item/weapon/reagent_containers/food/snacks/roastedsunflower + /datum/recipe/roastedpeanutsunflowerseeds reagents = list("sodiumchloride" = 1, "peanutoil" = 1) items = list( @@ -537,10 +544,20 @@ I said no! result = /obj/item/weapon/reagent_containers/food/snacks/roastedsunflower /datum/recipe/roastedpeanuts + fruit = list("peanut" = 2) + reagents = list("sodiumchloride" = 2, "cookingoil" = 1) + result = /obj/item/weapon/reagent_containers/food/snacks/roastedpeanuts + +/datum/recipe/roastedpeanutscorn fruit = list("peanut" = 2) reagents = list("sodiumchloride" = 2, "cornoil" = 1) result = /obj/item/weapon/reagent_containers/food/snacks/roastedpeanuts +/datum/recipe/roastedpeanutspeanut + fruit = list("peanut" = 2) + reagents = list("sodiumchloride" = 2, "peanutoil" = 1) + result = /obj/item/weapon/reagent_containers/food/snacks/roastedpeanuts + /datum/recipe/mint reagents = list("sugar" = 5, "frostoil" = 5) result = /obj/item/weapon/reagent_containers/food/snacks/mint diff --git a/code/modules/reagents/machinery/dispenser/reagent_tank.dm b/code/modules/reagents/machinery/dispenser/reagent_tank.dm index cfa809b2afe..097ee924e97 100644 --- a/code/modules/reagents/machinery/dispenser/reagent_tank.dm +++ b/code/modules/reagents/machinery/dispenser/reagent_tank.dm @@ -461,7 +461,7 @@ /obj/structure/reagent_dispensers/cookingoil/New() ..() - reagents.add_reagent("cornoil",5000) + reagents.add_reagent("cookingoil",5000) /obj/structure/reagent_dispensers/cookingoil/bullet_act(var/obj/item/projectile/Proj) if(Proj.get_structure_damage()) diff --git a/code/modules/reagents/reactions/instant/drinks.dm b/code/modules/reagents/reactions/instant/drinks.dm index efb58fe90c3..abd16b22797 100644 --- a/code/modules/reagents/reactions/instant/drinks.dm +++ b/code/modules/reagents/reactions/instant/drinks.dm @@ -141,7 +141,7 @@ name = "Space Beer" id = "spacebeer" result = "beer" - required_reagents = list("cornoil" = 10) + required_reagents = list("cornoil" = 5, "flour" = 5) catalysts = list("enzyme" = 5) result_amount = 10 @@ -907,7 +907,7 @@ name = "Debugger" id = "debugger" result = "debugger" - required_reagents = list("fuel" = 1, "sugar" = 2, "cornoil" = 2) + required_reagents = list("fuel" = 1, "sugar" = 2, "cookingoil" = 2) result_amount = 5 /decl/chemical_reaction/instant/drinks/spacersbrew @@ -1205,14 +1205,14 @@ name = "Oil Slick" id = "oilslick" result = "oilslick" - required_reagents = list("cornoil" = 2, "honey" = 1) + required_reagents = list("cookingoil" = 2, "honey" = 1) result_amount = 3 /decl/chemical_reaction/instant/drinks/slimeslam name = "Slick Slime Slammer" id = "slimeslammer" result = "slimeslammer" - required_reagents = list("cornoil" = 2, "peanutbutter" = 1) + required_reagents = list("cookingoil" = 2, "peanutbutter" = 1) result_amount = 3 /decl/chemical_reaction/instant/drinks/virginsexonthebeach @@ -1254,7 +1254,7 @@ name = "Soda Oil" id = "sodaoil" result = "sodaoil" - required_reagents = list("cornoil" = 4, "sodawater" = 1, "carbon" = 1, "tricordrazine" = 1) + required_reagents = list("cookingoil" = 4, "sodawater" = 1, "carbon" = 1, "tricordrazine" = 1) result_amount = 6 /decl/chemical_reaction/instant/drinks/fusionnaire diff --git a/code/modules/reagents/reactions/instant/food.dm b/code/modules/reagents/reactions/instant/food.dm index 952af8014b4..da16f251734 100644 --- a/code/modules/reagents/reactions/instant/food.dm +++ b/code/modules/reagents/reactions/instant/food.dm @@ -52,6 +52,22 @@ new /obj/item/weapon/reagent_containers/food/snacks/chocolatebar(location) return +/decl/chemical_reaction/instant/food/cookingoilcorn + name = "Cooking Oil" + id = "cookingoilcorn" + result = "cookingoil" + required_reagents = list("cornoil" = 10) + catalysts = list("enzyme" = 5) + result_amount = 10 + +/decl/chemical_reaction/instant/food/cookingoilpeanut + name = "Cooking Oil" + id = "cookingoilpeanut" + result = "cookingoil" + required_reagents = list("peanutoil" = 10) + catalysts = list("enzyme" = 5) + result_amount = 10 + /decl/chemical_reaction/instant/food/soysauce name = "Soy Sauce" id = "soysauce" @@ -85,7 +101,7 @@ name = "mayonnaise" id = "mayo" result = "mayo" - required_reagents = list("egg" = 9, "cornoil" = 5, "lemonjuice" = 5, "sodiumchloride" = 1) + required_reagents = list("egg" = 9, "cookingoil" = 5, "lemonjuice" = 5, "sodiumchloride" = 1) result_amount = 15 /decl/chemical_reaction/instant/food/cheesewheel diff --git a/code/modules/reagents/reagents/food_drinks.dm b/code/modules/reagents/reagents/food_drinks.dm index 1ddc24bfc93..8de9abd0b35 100644 --- a/code/modules/reagents/reagents/food_drinks.dm +++ b/code/modules/reagents/reagents/food_drinks.dm @@ -234,6 +234,12 @@ to_chat(M, "Searing hot oil burns you, wash it off quick!") lastburnmessage = world.time +/datum/reagent/nutriment/triglyceride/oil/cooking + name = "Cooking Oil" + id = "cookingoil" + description = "A general-purpose cooking oil." + reagent_state = LIQUID + /datum/reagent/nutriment/triglyceride/oil/corn name = "Corn Oil" id = "cornoil" From d1771b1e1dda355652ec8356497f8d3430c8ef76 Mon Sep 17 00:00:00 2001 From: Verkister Date: Sat, 13 Nov 2021 14:51:27 +0200 Subject: [PATCH 002/172] Adds vorepanel save doublecheck for non-slot chars Makes the vorepanel save button also do the double check it gives for simplemobs when the user is playing a character whose real_name doesn't match their client prefs, such as during body swap shenanigans etc. --- code/modules/vore/eating/vorepanel_vr.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index eebcb40214f..73e2601d138 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -304,7 +304,7 @@ return set_attr(usr, params) if("saveprefs") - if(!ishuman(host) && !issilicon(host)) + if(host.real_name != host.client.prefs.real_name || !ishuman(host) && !issilicon(host)) var/choice = tgui_alert(usr, "Warning: Saving your vore panel while playing what is very-likely not your normal character will overwrite whatever character you have loaded in character setup. Maybe this is your 'playing a simple mob' slot, though. Are you SURE you want to overwrite your current slot with these vore bellies?", "WARNING!", list("No, abort!", "Yes, save.")) if(choice != "Yes, save.") return TRUE From 675313a91b437e46128e0418d359eb77900b55c2 Mon Sep 17 00:00:00 2001 From: Heroman Date: Sun, 14 Nov 2021 09:10:07 +1000 Subject: [PATCH 003/172] Adds facility_type map var for the announcement messages --- code/modules/events/aurora_caelus.dm | 6 +++--- code/modules/events/ian_storm_vr.dm | 2 +- code/modules/events/prison_break.dm | 2 +- code/modules/events/radiation_storm.dm | 4 ++-- code/modules/events/rogue_drones.dm | 2 +- code/modules/events/solar_storm.dm | 6 +++--- code/modules/events/supply_demand_vr.dm | 2 +- code/modules/events/wallrot.dm | 2 +- code/modules/events/wormholes.dm | 2 +- maps/stellardelight/stellar_delight_defines.dm | 1 + maps/tether/tether_defines.dm | 1 + maps/~map_system/maps.dm | 1 + 12 files changed, 17 insertions(+), 14 deletions(-) diff --git a/code/modules/events/aurora_caelus.dm b/code/modules/events/aurora_caelus.dm index 2e4d9d84cf9..0af166fe230 100644 --- a/code/modules/events/aurora_caelus.dm +++ b/code/modules/events/aurora_caelus.dm @@ -5,13 +5,13 @@ endWhen = 126 /datum/event/aurora_caelus/announce() - command_announcement.Announce("[station_name()]: A harmless cloud of ions is approaching your station, and will exhaust their energy battering the hull. \ + command_announcement.Announce("[station_name()]: A harmless cloud of ions is approaching your [using_map.facility_type], and will exhaust their energy battering the hull. \ Nanotrasen has approved a short break for all employees to relax and observe this very rare event. \ During this time, starlight will be bright but gentle, shifting between quiet green and blue colors. \ Any staff who would like to view these lights for themselves may proceed to the area nearest to them with viewing ports to open space. \ You will have approximately two minutes before the ions begin to reach the hull. \ We hope you enjoy the lights.", "Nanotrasen Meteorology Division", new_sound = 'sound/AI/aurora.ogg') //VOREStation Edit - + /datum/event/aurora_caelus/start() affecting_z -= global.using_map.sealed_levels // Space levels only please! for(var/mob/M in player_list) @@ -31,6 +31,6 @@ Please return to your workplace and continue work as normal. \ Have a pleasant shift, [station_name()], and thank you for watching with us.", "Nanotrasen Meteorology Division", new_sound = 'sound/AI/aurora_end.ogg') //VOREStation Edit ..() - + /datum/event/aurora_caelus/overmap/announce() return diff --git a/code/modules/events/ian_storm_vr.dm b/code/modules/events/ian_storm_vr.dm index 8e654cff437..dc9aee617d4 100644 --- a/code/modules/events/ian_storm_vr.dm +++ b/code/modules/events/ian_storm_vr.dm @@ -4,7 +4,7 @@ endWhen = 3 /datum/event/ianstorm/announce() - command_announcement.Announce("It has come to our attention that the station passed through an ion storm. Please monitor all electronic equipment for malfunctions.", "Anomaly Alert", 'sound/AI/ian_storm.ogg') + command_announcement.Announce("It has come to our attention that the [using_map.facility_type] passed through an ion storm. Please monitor all electronic equipment for malfunctions.", "Anomaly Alert", 'sound/AI/ian_storm.ogg') spawn(7 SECONDS) command_announcement.Announce("Wait. No, thats wrong. The station passed through an IAN storm!.", "Ian Alert") diff --git a/code/modules/events/prison_break.dm b/code/modules/events/prison_break.dm index f2675a0ede1..2575873aae2 100644 --- a/code/modules/events/prison_break.dm +++ b/code/modules/events/prison_break.dm @@ -37,7 +37,7 @@ /datum/event/prison_break/announce() if(areas && areas.len > 0) - command_announcement.Announce("[pick("Gr3y.T1d3 virus","Malignant trojan")] detected in [station_name()] [(eventDept == "Security")? "imprisonment":"containment"] subroutines. Secure any compromised areas immediately. Station AI involvement is recommended.", "[eventDept] Alert") + command_announcement.Announce("[pick("Gr3y.T1d3 virus","Malignant trojan")] detected in [station_name()] [(eventDept == "Security")? "imprisonment":"containment"] subroutines. Secure any compromised areas immediately. Involvement of [using_map.facility_type] AI is recommended.", "[eventDept] Alert") /datum/event/prison_break/start() diff --git a/code/modules/events/radiation_storm.dm b/code/modules/events/radiation_storm.dm index 13f853dd3c2..a8668e561a4 100644 --- a/code/modules/events/radiation_storm.dm +++ b/code/modules/events/radiation_storm.dm @@ -16,7 +16,7 @@ /datum/event/radiation_storm/tick() if(activeFor == enterBelt) - command_announcement.Announce("The station has entered the radiation belt. Please remain in a sheltered area until we have passed the radiation belt.", "Anomaly Alert") + command_announcement.Announce("The [using_map.facility_type] has entered the radiation belt. Please remain in a sheltered area until we have passed the radiation belt.", "Anomaly Alert") radiate() if(activeFor >= enterBelt && activeFor <= leaveBelt) @@ -27,7 +27,7 @@ radiate() else if(activeFor == leaveBelt) - command_announcement.Announce("The station has passed the radiation belt. Please allow for up to one minute while radiation levels dissipate, and report to medbay if you experience any unusual symptoms. Maintenance will lose all access again shortly.", "Anomaly Alert") + command_announcement.Announce("The [using_map.facility_type] has passed the radiation belt. Please allow for up to one minute while radiation levels dissipate, and report to medbay if you experience any unusual symptoms. Maintenance will lose all access again shortly.", "Anomaly Alert") /datum/event/radiation_storm/proc/radiate() var/radiation_level = rand(15, 35) for(var/z in using_map.station_levels) diff --git a/code/modules/events/rogue_drones.dm b/code/modules/events/rogue_drones.dm index f6ac58b1e41..b7e9f37552a 100644 --- a/code/modules/events/rogue_drones.dm +++ b/code/modules/events/rogue_drones.dm @@ -35,7 +35,7 @@ if(4) msg = "A passing derelict ship's drone defense systems have just activated. If any are sighted in the area, use caution." if(5) - msg = "We're detecting a swarm of small objects approaching your station. Most likely a bunch of drones. Please exercise caution if you see any." + msg = "We're detecting a swarm of small objects approaching your [using_map.facility_type]. Most likely a bunch of drones. Please exercise caution if you see any." //VOREStation Edit End command_announcement.Announce(msg, "Rogue drone alert") diff --git a/code/modules/events/solar_storm.dm b/code/modules/events/solar_storm.dm index a8d4b92a3c0..33c2c477edf 100644 --- a/code/modules/events/solar_storm.dm +++ b/code/modules/events/solar_storm.dm @@ -9,7 +9,7 @@ endWhen = startWhen + rand(30,90) + rand(30,90) //2-6 minute duration /datum/event/solar_storm/announce() - command_announcement.Announce("A solar storm has been detected approaching \the [station_name()]. Please halt all EVA activites immediately and return to the interior of the station.", "Anomaly Alert", new_sound = 'sound/AI/radiation.ogg') + command_announcement.Announce("A solar storm has been detected approaching \the [station_name()]. Please halt all EVA activites immediately and return to the interior of the [using_map.facility_type].", "Anomaly Alert", new_sound = 'sound/AI/radiation.ogg') adjust_solar_output(1.5) /datum/event/solar_storm/proc/adjust_solar_output(var/mult = 1) @@ -18,7 +18,7 @@ /datum/event/solar_storm/start() - command_announcement.Announce("The solar storm has reached the station. Please refrain from EVA and remain inside the station until it has passed.", "Anomaly Alert") + command_announcement.Announce("The solar storm has reached the [using_map.facility_type]. Please refrain from EVA and remain inside the station until it has passed.", "Anomaly Alert") adjust_solar_output(5) @@ -40,7 +40,7 @@ L.rad_act(rand(15, 30)) /datum/event/solar_storm/end() - command_announcement.Announce("The solar storm has passed the station. It is now safe to resume EVA activities. Please report to medbay if you experience any unusual symptoms. ", "Anomaly Alert") + command_announcement.Announce("The solar storm has passed the [using_map.facility_type]. It is now safe to resume EVA activities. Please report to medbay if you experience any unusual symptoms. ", "Anomaly Alert") adjust_solar_output() diff --git a/code/modules/events/supply_demand_vr.dm b/code/modules/events/supply_demand_vr.dm index 6e229e1b483..f61d4744c44 100644 --- a/code/modules/events/supply_demand_vr.dm +++ b/code/modules/events/supply_demand_vr.dm @@ -63,7 +63,7 @@ send_console_message(message, dpt); // Also announce over main comms so people know to look - command_announcement.Announce("An order for the station to deliver supplies to [command_name()] has been delivered to all supply Request Consoles", my_department) + command_announcement.Announce("An order for the [using_map.facility_type] to deliver supplies to [command_name()] has been delivered to all supply Request Consoles", my_department) /datum/event/supply_demand/tick() if(required_items.len == 0) diff --git a/code/modules/events/wallrot.dm b/code/modules/events/wallrot.dm index e09cc50d2f5..311003a05ea 100644 --- a/code/modules/events/wallrot.dm +++ b/code/modules/events/wallrot.dm @@ -15,7 +15,7 @@ /datum/event/wallrot/announce() if(center) - command_announcement.Announce("Harmful fungi detected on \the [station_name()] nearby [center.loc.name]. Station structures may be contaminated.", "Biohazard Alert") + command_announcement.Announce("Harmful fungi detected on \the [station_name()] and [using_map.facility_type] structures nearby [center.loc.name] may be contaminated.", "Biohazard Alert") /datum/event/wallrot/start() spawn() diff --git a/code/modules/events/wormholes.dm b/code/modules/events/wormholes.dm index a9581341c5d..3ff2cf6b7b3 100644 --- a/code/modules/events/wormholes.dm +++ b/code/modules/events/wormholes.dm @@ -6,4 +6,4 @@ wormhole_event() /datum/event/wormholes/end() - command_announcement.Announce("There are no more space-time anomalies detected on the station.", "Anomaly Alert") + command_announcement.Announce("There are no more space-time anomalies detected on the [using_map.facility_type].", "Anomaly Alert") diff --git a/maps/stellardelight/stellar_delight_defines.dm b/maps/stellardelight/stellar_delight_defines.dm index 8e3ac822f66..fdcba1a49aa 100644 --- a/maps/stellardelight/stellar_delight_defines.dm +++ b/maps/stellardelight/stellar_delight_defines.dm @@ -54,6 +54,7 @@ */ station_name = "NRV Stellar Delight" station_short = "Stellar Delight" + facility_type = "ship" dock_name = "Virgo-3B Colony" dock_type = "surface" boss_name = "Central Command" diff --git a/maps/tether/tether_defines.dm b/maps/tether/tether_defines.dm index 3b6e851daf9..9e8f0004d46 100644 --- a/maps/tether/tether_defines.dm +++ b/maps/tether/tether_defines.dm @@ -68,6 +68,7 @@ station_name = "NSB Adephagia" station_short = "Tether" + facility_type = "station" dock_name = "Virgo-3B Colony" dock_type = "surface" boss_name = "Central Command" diff --git a/maps/~map_system/maps.dm b/maps/~map_system/maps.dm index 48a8963e367..3b23df5507c 100644 --- a/maps/~map_system/maps.dm +++ b/maps/~map_system/maps.dm @@ -81,6 +81,7 @@ var/list/all_maps = list() var/station_name = "BAD Station" var/station_short = "Baddy" + var/facility_type = "facility" var/dock_name = "THE PirateBay" var/dock_type = "station" //VOREStation Edit - for a list of valid types see the switch block in air_traffic.dm at line 148 var/boss_name = "Captain Roger" From 9a4215fddbf9c39979aeb1aa6e2afd36525d526b Mon Sep 17 00:00:00 2001 From: Hatterhat Date: Mon, 15 Nov 2021 19:14:30 -0600 Subject: [PATCH 004/172] when the --- .../rig/modules/specific/crusher_gauntlets.dm | 2 +- .../modules/specific/passive_protection.dm | 166 ++++++++++++++++++ .../modules/projectiles/guns/magnetic/bore.dm | 4 +- icons/obj/rig_modules.dmi | Bin 25554 -> 25220 bytes vorestation.dme | 3 +- 5 files changed, 171 insertions(+), 4 deletions(-) create mode 100644 code/modules/clothing/spacesuits/rig/modules/specific/passive_protection.dm diff --git a/code/modules/clothing/spacesuits/rig/modules/specific/crusher_gauntlets.dm b/code/modules/clothing/spacesuits/rig/modules/specific/crusher_gauntlets.dm index 3dff20284f7..9d156a13613 100644 --- a/code/modules/clothing/spacesuits/rig/modules/specific/crusher_gauntlets.dm +++ b/code/modules/clothing/spacesuits/rig/modules/specific/crusher_gauntlets.dm @@ -13,7 +13,7 @@ usable = 0 toggleable = 1 use_power_cost = 0 - active_power_cost = 2.5 + active_power_cost = 0 passive_power_cost = 0 var/obj/item/weapon/kinetic_crusher/machete/gauntlets/rig/stored_gauntlets diff --git a/code/modules/clothing/spacesuits/rig/modules/specific/passive_protection.dm b/code/modules/clothing/spacesuits/rig/modules/specific/passive_protection.dm new file mode 100644 index 00000000000..92dcd87dd39 --- /dev/null +++ b/code/modules/clothing/spacesuits/rig/modules/specific/passive_protection.dm @@ -0,0 +1,166 @@ +// contains the Radiation Absorption Device (RAD) and Atmospheric Protective Equipment (APE) modules +// you shits ready for some COPY AND PASTE? +/obj/item/rig_module/rad_shield + name = "radiation absorption device" + desc = "The acronym of this device - R.A.D. - and its full name both convey the application of the module." + description_info = "Through the usage of powered radiation collectors optimized for absorption rather than power generation, it protects the suit's wearer \ + from incoming ionizing radiation and converts it into a significantly less harmful form. This comes at the cost of concerningly high power consumption, \ + and thus should only be used in short bursts." + icon_state = "radsoak" + toggleable = 1 + disruptable = 1 + disruptive = 0 + + use_power_cost = 25 + active_power_cost = 25 + passive_power_cost = 0 + module_cooldown = 30 + + activate_string = "Enable Supplemental Radiation Shielding" + deactivate_string = "Disable Supplemental Radiation Shielding" + + interface_name = "radiation absorption system" + interface_desc = "Provides passive protection against radiation, at the cost of power." + var/stored_rad_armor = 0 + +/obj/item/rig_module/rad_shield/activate() + + if(!..()) + return 0 + + var/mob/living/carbon/human/H = holder.wearer + var/obj/item/clothing/shoes/boots = holder.boots + var/obj/item/clothing/suit/space/rig/chest = holder.chest + var/obj/item/clothing/head/helmet/space/rig/helmet = holder.helmet + var/obj/item/clothing/gloves/gauntlets/rig/gloves = holder.gloves + + to_chat(H, "You activate your suit's powered radiation shielding.") + stored_rad_armor = holder.armor["rad"] + if(boots) + boots.armor["rad"] = 100 + if(chest) + chest.armor["rad"] = 100 + if(helmet) + helmet.armor["rad"] = 100 + if(gloves) + gloves.armor["rad"] = 100 + holder.armor["rad"] = 100 + +/obj/item/rig_module/rad_shield/deactivate() + + if(!..()) + return 0 + + var/mob/living/carbon/human/H = holder.wearer + var/obj/item/clothing/shoes/boots = holder.boots + var/obj/item/clothing/suit/space/rig/chest = holder.chest + var/obj/item/clothing/head/helmet/space/rig/helmet = holder.helmet + var/obj/item/clothing/gloves/gauntlets/rig/gloves = holder.gloves + + to_chat(H, "You deactivate your suit's powered radiation shielding.") + + if(boots) + boots.armor["rad"] = stored_rad_armor + if(chest) + chest.armor["rad"] = stored_rad_armor + if(helmet) + helmet.armor["rad"] = stored_rad_armor + if(gloves) + gloves.armor["rad"] = stored_rad_armor + holder.armor["rad"] = stored_rad_armor + + stored_rad_armor = 0 + +/obj/item/rig_module/rad_shield/advanced + name = "advanced radiation absorption device" + desc = "The acronym of this device - R.A.D. - and its full name both convey the application of the module. It has additional quality notices \ + on the underside of the casing." + use_power_cost = 5 + active_power_cost = 5 + +/obj/item/rig_module/atmos_shield + name = "atmospheric protection enhancement suite" + desc = "The acronym of this suite - A.P.E. - unlike its loosely related cousin, the R.A.D., is remarkably unintuitive." + description_info = "Through the usage of powered shielding optimized for protection against the elements rather than from external physical issues, \ + it protects the suit's wearer from atmospheric pressure and temperatures. This comes at the cost of concerningly high power consumption, \ + and thus should only be used in short bursts." + icon_state = "atmosoak" + + toggleable = 1 + disruptable = 1 + disruptive = 0 + + use_power_cost = 25 + active_power_cost = 25 + passive_power_cost = 0 + module_cooldown = 30 + + activate_string = "Enable Powered Atmospheric Shielding" + deactivate_string = "Disable Powered Atmospheric Shielding" + + interface_name = "atmospheric protection enhancements" + interface_desc = "Provides passive protection against the atmosphere, at the cost of power." + var/stored_max_pressure = 0 + var/stored_max_temp = 0 + +/obj/item/rig_module/atmos_shield/activate() + + if(!..()) + return 0 + + var/mob/living/carbon/human/H = holder.wearer + var/obj/item/clothing/shoes/boots = holder.boots + var/obj/item/clothing/suit/space/rig/chest = holder.chest + var/obj/item/clothing/head/helmet/space/rig/helmet = holder.helmet + var/obj/item/clothing/gloves/gauntlets/rig/gloves = holder.gloves + + stored_max_pressure = holder.max_pressure_protection + stored_max_temp = holder.max_heat_protection_temperature + + to_chat(H, "You activate your suit's powered atmospheric shielding.") + + if(boots) + boots.max_pressure_protection = INFINITY + boots.max_heat_protection_temperature = INFINITY + if(chest) + chest.max_pressure_protection = INFINITY + chest.max_heat_protection_temperature = INFINITY + if(helmet) + helmet.max_pressure_protection = INFINITY + helmet.max_heat_protection_temperature = INFINITY + if(gloves) + gloves.max_pressure_protection = INFINITY + gloves.max_heat_protection_temperature = INFINITY + holder.max_pressure_protection = INFINITY + holder.max_heat_protection_temperature = INFINITY + +/obj/item/rig_module/atmos_shield/deactivate() + + if(!..()) + return 0 + + var/mob/living/carbon/human/H = holder.wearer + var/obj/item/clothing/shoes/boots = holder.boots + var/obj/item/clothing/suit/space/rig/chest = holder.chest + var/obj/item/clothing/head/helmet/space/rig/helmet = holder.helmet + var/obj/item/clothing/gloves/gauntlets/rig/gloves = holder.gloves + + to_chat(H, "You deactivate your suit's powered atmospheric shielding.") + + if(boots) + boots.max_pressure_protection = stored_max_pressure + boots.max_heat_protection_temperature = stored_max_temp + if(chest) + chest.max_pressure_protection = stored_max_pressure + chest.max_heat_protection_temperature = stored_max_temp + if(helmet) + helmet.max_pressure_protection = stored_max_pressure + helmet.max_heat_protection_temperature = stored_max_temp + if(gloves) + gloves.max_pressure_protection = stored_max_pressure + gloves.max_heat_protection_temperature = stored_max_temp + holder.max_pressure_protection = stored_max_pressure + holder.max_heat_protection_temperature = stored_max_temp + + stored_max_pressure = 0 + stored_max_temp = 0 \ No newline at end of file diff --git a/code/modules/projectiles/guns/magnetic/bore.dm b/code/modules/projectiles/guns/magnetic/bore.dm index 3cc05cc44bc..66e89cb9eb0 100644 --- a/code/modules/projectiles/guns/magnetic/bore.dm +++ b/code/modules/projectiles/guns/magnetic/bore.dm @@ -85,6 +85,8 @@ /obj/item/weapon/gun/magnetic/matfed/attackby(var/obj/item/thing, var/mob/user) + . = ..() + update_rating_mod() if(removable_components) if(thing.is_crowbar()) if(!manipulator) @@ -112,7 +114,6 @@ update_rating_mod() return - if(is_type_in_list(thing, load_type)) var/obj/item/stack/material/M = thing var/success = FALSE @@ -147,7 +148,6 @@ playsound(src, 'sound/weapons/flipblade.ogg', 50, 1) update_icon() return - . = ..() #define GEN_STARTING -1 #define GEN_OFF 0 diff --git a/icons/obj/rig_modules.dmi b/icons/obj/rig_modules.dmi index a63fcc23a859340d0f9750fc7ddc0a3db4abbb2a..841733ee7269e69c4066dc2a567eaa57f20ff509 100644 GIT binary patch literal 25220 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 z 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 JSIC+L{y#D!dbI!m literal 25554 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 diff --git a/vorestation.dme b/vorestation.dme index db68531e784..ec022ff397b 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -2016,6 +2016,7 @@ #include "code\modules\clothing\spacesuits\rig\modules\specific\metalfoam_launcher.dm" #include "code\modules\clothing\spacesuits\rig\modules\specific\mounted_gun.dm" #include "code\modules\clothing\spacesuits\rig\modules\specific\mounted_gun_vr.dm" +#include "code\modules\clothing\spacesuits\rig\modules\specific\passive_protection.dm" #include "code\modules\clothing\spacesuits\rig\modules\specific\pat_module_vr.dm" #include "code\modules\clothing\spacesuits\rig\modules\specific\powersink.dm" #include "code\modules\clothing\spacesuits\rig\modules\specific\rescue_pharm_vr.dm" @@ -4079,7 +4080,6 @@ #include "maps\southern_cross\loadout\loadout_suit.dm" #include "maps\southern_cross\loadout\loadout_uniform.dm" #include "maps\southern_cross\loadout\loadout_vr.dm" -#include "maps\stellardelight\stellar_delight.dm" #include "maps\submaps\_helpers.dm" #include "maps\submaps\_readme.dm" #include "maps\submaps\engine_submaps\engine.dm" @@ -4089,5 +4089,6 @@ #include "maps\submaps\space_submaps\debrisfield\debrisfield.dm" #include "maps\submaps\surface_submaps\wilderness\wilderness.dm" #include "maps\submaps\surface_submaps\wilderness\wilderness_areas.dm" +#include "maps\virgo_minitest\virgo_minitest.dm" #include "maps\~map_system\maps.dm" // END_INCLUDE From b450a650a3eb6aeace62064305ba53cf40c34423 Mon Sep 17 00:00:00 2001 From: Hatterhat Date: Mon, 15 Nov 2021 19:18:23 -0600 Subject: [PATCH 005/172] lmao oops --- vorestation.dme | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vorestation.dme b/vorestation.dme index ec022ff397b..8a938b8504e 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -4080,6 +4080,7 @@ #include "maps\southern_cross\loadout\loadout_suit.dm" #include "maps\southern_cross\loadout\loadout_uniform.dm" #include "maps\southern_cross\loadout\loadout_vr.dm" +#include "maps\stellardelight\stellar_delight.dm" #include "maps\submaps\_helpers.dm" #include "maps\submaps\_readme.dm" #include "maps\submaps\engine_submaps\engine.dm" @@ -4089,6 +4090,5 @@ #include "maps\submaps\space_submaps\debrisfield\debrisfield.dm" #include "maps\submaps\surface_submaps\wilderness\wilderness.dm" #include "maps\submaps\surface_submaps\wilderness\wilderness_areas.dm" -#include "maps\virgo_minitest\virgo_minitest.dm" #include "maps\~map_system\maps.dm" // END_INCLUDE From 735d70f728d1b1c8f3b13e63b3fb41fad0ef524f Mon Sep 17 00:00:00 2001 From: Hatterhat Date: Mon, 15 Nov 2021 20:25:06 -0600 Subject: [PATCH 006/172] booster gaming --- code/__defines/is_helpers.dm | 2 + .../objects/items/weapons/storage/belt.dm | 3 +- code/modules/research/designs/engineering.dm | 9 +++++ code/modules/telesci/quantum_pad.dm | 38 +++++++++++++++++- icons/obj/device_vr.dmi | Bin 14283 -> 14574 bytes 5 files changed, 50 insertions(+), 2 deletions(-) diff --git a/code/__defines/is_helpers.dm b/code/__defines/is_helpers.dm index 9a1b3871df6..07c25a40ab5 100644 --- a/code/__defines/is_helpers.dm +++ b/code/__defines/is_helpers.dm @@ -21,6 +21,8 @@ #define isstorage(A) istype(A, /obj/item/weapon/storage) +#define ismecha(A) istype(A, /obj/mecha) + //--------------- //#define isarea(D) istype(D, /area) //Built in diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 1c92c3e94e8..00647f37f37 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -158,7 +158,8 @@ /obj/item/stack/nanopaste, /obj/item/weapon/cell, //this is a bigger belt, might as well make it hold bigger cells too /obj/item/weapon/pipe_dispenser, //bigger belt for bigger tools - /obj/item/weapon/rcd //see above + /obj/item/weapon/rcd, //see above + /obj/item/device/quantum_pad_booster ) diff --git a/code/modules/research/designs/engineering.dm b/code/modules/research/designs/engineering.dm index 5c496fdc4fa..bf55cdd7885 100644 --- a/code/modules/research/designs/engineering.dm +++ b/code/modules/research/designs/engineering.dm @@ -40,6 +40,15 @@ build_path = /obj/item/weapon/pipe_dispenser sort_string = "NAAAD" +/datum/design/item/tool/qpad_booster + name = "Quantum Pad Particle Booster" + desc = "A deceptively simple interface for increasing the mass of objects a quantum pad is capable of teleporting, at the cost of increased power draw." + id = "qpad_booster" + req_tech = list(TECH_ENGINEERING = 7, TECH_MATERIAL = 7, TECH_BLUESPACE = 6) + materials = list(MAT_STEEL = 4000, MAT_GLASS = 2000, MAT_SILVER = 2000, MAT_GOLD = 2000, MAT_VERDANTIUM = 1000) + build_path = /obj/item/device/quantum_pad_booster + sort_string = "NAAAF" + // Other devices /datum/design/item/engineering/AssembleDesignName() diff --git a/code/modules/telesci/quantum_pad.dm b/code/modules/telesci/quantum_pad.dm index 6f1381a1915..a7aa2f69a05 100644 --- a/code/modules/telesci/quantum_pad.dm +++ b/code/modules/telesci/quantum_pad.dm @@ -13,6 +13,7 @@ var/last_teleport //to handle the cooldown var/teleporting = 0 //if it's in the process of teleporting var/power_efficiency = 1 + var/boosted = 0 // do we teleport mecha? var/obj/machinery/power/quantumpad/linked_pad //mapping @@ -32,6 +33,18 @@ mapped_quantum_pads -= map_pad_id return ..() +/obj/machinery/power/quantumpad/examine(mob/user) + . = ..() + . += "It is [linked_pad ? "currently" : "not"] linked to another pad." + if(world.time < last_teleport + teleport_cooldown) + . += "[src] is recharging power. A timer on the side reads [round((last_teleport + teleport_cooldown - world.time)/10)] seconds." + if(boosted) + . += SPAN_NOTICE("There appears to be a booster haphazardly jammed into the side of [src]. That looks unsafe.") + if(!panel_open) + . += "The panel is screwed in, obstructing the linking device." + else + . += "The linking device is now able to be scanned with a multitool." + /obj/machinery/power/quantumpad/RefreshParts() var/E = 0 for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) @@ -64,6 +77,14 @@ to_chat(user, "You link [src] to the one in [I]'s buffer.") update_icon() return 1 + + if(istype(I, /obj/item/device/quantum_pad_booster)) + var/obj/item/device/quantum_pad_booster/booster = I + visible_message("[user] violently jams [booster] into the side of [src]. [src] beeps, quietly.", \ + "You hear the sound of a device being improperly installed in sensitive machinery, then subsequent beeping.", runemessage = "beep!") + playsound(src, 'sound/items/rped.ogg', 25, 1) + boosted = TRUE + qdel(I) if(default_part_replacement(user, I)) return @@ -213,6 +234,8 @@ // Otherwise we'll need a powernet var/power_to_use = 10000 / power_efficiency + if(boosted) + power_to_use * 5 if(draw_power(power_to_use) != power_to_use) return FALSE return TRUE @@ -220,7 +243,10 @@ /obj/machinery/power/quantumpad/proc/transport_objects(turf/destination) for(var/atom/movable/ROI in get_turf(src)) // if is anchored, don't let through - if(ROI.anchored) + if(ROI.anchored && !ismecha(ROI)) + if(ismecha(ROI)) + if(boosted) + continue if(isliving(ROI)) var/mob/living/L = ROI if(L.buckled) @@ -262,3 +288,13 @@ to_chat(user, "You feel yourself pulled in different directions, before ending up not far from where you started.") flick("qpad-beam-out", src) transport_objects(get_turf(dest)) + +/obj/item/device/quantum_pad_booster + icon = 'icons/obj/device_vr.dmi' + name = "quantum pad particle booster" + desc = "A deceptively simple interface for increasing the mass of objects a quantum pad is capable of teleporting, at the cost of increased power draw." + description_info = "The three prongs at the base of the tool are not, in fact, for show." + force = 9 + sharp = TRUE + item_state = "analyzer" + icon_state = "hacktool" \ No newline at end of file diff --git a/icons/obj/device_vr.dmi b/icons/obj/device_vr.dmi index b75163e8810aece5cefdc54b7791e727c10bc2f4..3c4a3c5d09c444912ad886dbfa838a5de1c8b664 100644 GIT binary patch literal 14574 zcmbVzXH*njvu+PLh=52&Ku`gR0um)>$&!>bBqa(+lrZEZ8Bvg&gJeO10z(o(h8!hl z$sjO87?|NU?|05w-&yONweGz?dJVn1dv|s1s;8c+UA)uLQXwN@AOQe?Oifks82~_7 z!2=*707t0!%NxKGMPL2r9*QsBt=;ThJ?vea0pM+B(R)qjP63MWsb5^mHQ{AC#$SFF z;~4NPk&IYqQ<3&qPv10fL-TP4-b#vl=;E}MAvz@FawBJ_df=wvtY*Ny4QfVCi^HRI zTbZX33?y$eHeP6!m33_`;}V46DEqy9{*@t%Wj#%QPytf+)yjS>6;`s zO20Y$k_t}Y43QXJjZS!yT=*pv=T9=?Thj8+e4;}yj;h<~Qon5cmk@~Z^69mG)B8LT z#ujtaEUDYOu~$9x2zZ>R)pX>tb| zoF9Aj>Eq(Zbg0Q>`^G8zMsIZF={xB%!fgA=2AI)h5mq+%Fa!AP%6dY zw0c9UmF~vSlZNQi*~d`|7Ly8bJv9rJ7WMOMZ33^~vApJ~sRjU6Kuu9j|83@8mY@Ia ziTNv;3_p?6L`J1s5H&m}IpTCPa#JUL22ayL9(u1Wv@TvP6vRg z>I|m5G0|{F(|aMTHgv889|F+gRYx%oJouylpf@UxxY^i)gI2%hmyPQPQAnadZn_0+ z;Ny>^IK$tNfS{FiA|+$!$d?gSGjF`9r!-=*d@OPlgE#1Kzn_(VHpMnN;{%t6W7?MX z&cQ|B@NLsgAV8OLPXxmY=@3@5AZxlsifGB3^V7NLLc+Q;`oIlMJL3Sj(Rn4OdEc)A zXzQgx>VVic)LiAN3ubPv<&cm(g<13|l&mmtbvH2CP?Swt!uAU*cK?JdV8`W4i+J2c zf}ir;J-TyuPuTkP{HS-Y{i({*&7oQJ?>o%X@6t#zSl- z+=tTg70|x!P>%3aiDeqKT?jumdLluD8Xp=M$RJ#5D#z8ag&7cD0SnlONg0aMwkgWQ z->!7{2}3j~=ZLW4CodABmeZnId>ChVWN?5&f0x@Su)h-T+e8V9_c2WqhQ)pU0IP%u z$ugy74fZ^zscX6YoRA~8Yb3tu_uDyP;TNj3%#;LxokIg;$@`gYB(ANNneuB*-e;rF zT>S=Jf%e*$h^EJmlWz;J+Feeq-1Kh;Tn=ZYZw8)BUpeD19W71OVXJvB7At`Uh8I_% zgz6iMy(kr6KQQ5js*{Ac_-f)weO_m6I)Axttvlh*g*O}|%sKNtxk!P+Dbf;Gm%X&m z(pd9jNKicKEMzXcs~SUPBGVdM5`fCG_a#x>Q7??8NEJ5Q$**;rCF)|a z2%@HWkHeM;Ao{6y{Ib5Lq880vctfpwi%P{6{eyCCEw*d9tHdKF+WdK9&;3uqFUWU0 zO;`vZMDi-@F2k4SqHpr7ZU?=p?%$YJ;!ijCT^G+=piH9dtgR+fSBz}+_T6d9fB+2< zH-B&(ZT?SXF(p#Mq0Hc{?lyt0!m2&@_Dsg-Q^d#XP^r8TYm`HCi`wK=fU#Xcr~KZw4H>5Hbwf;&cp%Ir;JVU zE-O|_xFJofm)lGCc`hfQt)sq&)Ahw1IsWg}pFWj0QcsQf&{0}mzH^=(boPVj21{1d zasgGim(Y?AUT!3u<0=TZ9_zr)DutAKC+%E_;rFA*j)=#6<0{YY7(D*?sR1>`IsFY6 z_}k~$*52IaOZGUBNcrc`zS6{DXlbh(b-hs)8;5P?Fpv7hjLx|Ki#TwVlahsQmS{6| zd~>&*m{=gQIwmIjBcmHSQ)4sR_U21I1bBPwGbVX#>9o)?t#4#Rc*w!UMXaW#CZGQO zyF_edb?$_44@7fYv(f=oiN~6PH$MP%^fSgY|#b z+Xr)>k8RWkE(&8c-tn6u%&muu+L;Avql3Oqo_fqWRZOGhfKygLTAN{^_6MZZs7EXjP4*8|_CA)EN(4|epY93Szm)zm(jGEB3jy4n z5uN#&Jb2#9=iUB4_J<_a#=pxf`Qhb;!}&RYiA8T1^o9jEF>$xnrgx)@z`Fz7nO2t^ zwf%itE>JjwQ5$by4Hw)A;n1$`T` z&)wA6m<=HEj&v9yTq%dAXaZ$z8)##ZV6^r1!sy<(`_Q=iYT=^Ok@Ky;$WyQVVWe)% zZbqZK>{437*-^oq7Tpsbh`s$gE%GDCj5+?1A+)@l74r?dpeSp+<;MuIFS@p>@{(m# zz~D}Uqt9GI%E{c;jn#q3`Kxvv5+&a%F88R11d}*&2={{DUP| z#l<;m&V~?qi!z!qhp>L-upoKV) zB5>pXd)W0tYm>TL{oAMCoIGa8{O!~bFbY3xk&raTyS&IbYBAv8^t{JaX*vB3gV=JkGf9};m&5LwM zq&wL;#Nz;BPW8V}7MKB@%m`dCP>QF8r9>fcv+4_dmB(|CYJsdfhH`Eoe zg=;aiCV5*AN!C1lx4sgVw`ABgwhjZ(~k+FB{fOneRUsOKlq)lX2)__H4 zJ&hniNc#36N5YhD%-1Kr4!^ecc&9@z)$|04mLT1pefy(T8gA&SfSt-Ai`k$%QC45) zINZ>BB+Rbg$dL;mb!p2+8P#2(7O+7g7oZ3}V`())deCe?9SY;l0!uvY@s0D#|$J*St(k8|s)tlXAN% zEE_F*(2y#5j>+TaQ()b{!Y4QgtVfqgbksbFLm2dc|hBwU`&VYz^?I}Z`Jr`y+dZZ4k zyu;Xf6*npBd*PRVggC6e^RInTd0l3HCU{Kh%?>%DjaTgJ~Ua{ zQspgbc$?9@(J%~oZjA8MfHuJv!cQ|=IA zkZs?dX!));M_7sO-7|aN&31=`hrd~nAFmxV+e29A+t#AT9B2%Sr9IGGr$8yB0sZjb zk$0P4C5NaIMnB2eN2}y#vy~ihfh2S0Ho-okpeW@%Gh@-Sy@t~w4P}?W`!MZ>;7N2g z^Of-qcbwV*KTKP9)M$cG-={clsD%rkoHcOtc6XdBr~Ld9a$&n!K^?~RFE49sv`Ij` zCI?=6Z#80y6z~va^c5x2p|5ej-3>)aW9RN%`MLyp7nj&xyB_EPH+nM$*FN#=RjE4W zvAm9-EE9wE6_li8W~T?je-ID0!MKt|XBTtOZX5+E7x#vD_-z5@DQG1e%o`-(0qDC4 zQzLqT0}S=-lD_8um|kJ;ogmO_Cn_`+z%NIwvoUiS?Lo_CuxJDQDCd0hr^VSgCpnih5<14#YL@P(a8R;Gq z@3++~FM>R8;>=7zwV)NYVF4gIYI)MGlEY-r&rVaNLs9tnGuRyX7WMA4yz0K7wZxMs zT-h4c2lqz;jo#5IZ!zi`U`C0Z{EQ1kx^cBeNg_CV+`S=2W+-c~;+3Sn)D z_hbF}q+;+Gvvys0w5 z^`cB{w|wRAzMqMv8%skbeUjFVu}25kT$$WlX;xx~0@7BEcJS6u=X1~&#M&U;^$era zVYME8jcuFcoFLsujT%tdlkiPX9C&3y%ffQSSb4n1558KEm3X$VbDraf?RDS??P}b) zfQLvP2Phwz<0NCHOd>1pdjW5a5Hbu6!R4p{ zV{FTzsw2#+b`TUsUG0zdS*9x1CIY7K(wQq^^Xe6e4EMu_K|5-lE?W{S{$^=%=1P1< z=|01i*hBn_Ae^Nw0gF~#Sz>{JF`Gs-PvDp0vIlgG>+%C8hcD27qXaBfjmjsYUm{X` zV6149w#v$hb;Q>@HwkBEjKdex($Y*{zpnf{3o4w?3>BctR)D&|9V^k^U_SrReWc~cO85n{h2(W&Be&q<%bB05Sl}jAm#n*V_BQ^?p?ze$l1PJ}jXJ3Lp6fZ9= zMpsV^KfzAgdf%!0JR>ZUq3L?EHFh3|F*`=*z(2iyxhyT3^R-u@uK-*xV0dPRl1 z%pv|)%z6C6H%tb_(%c>I4X;`1lIqh;AV1v|gq;R&WtuWT$+Zel-F73tDm_)i9RmV% z&-uaP%fVmGBo~bI?O$p^^;LZ@j~`Q@UWBp6-v-4_6o}dx8yC#*(~P<+k|V7tRG9m% z$WWIM*k@dM@)G@Vhy|a-cjHcvGzZoD?Yd(6f?Fz&F4u`e;FUbkx^+wywZmY|g?-sVVts1)<$6o;AmrwtKUVOTCqjn;_Oz{5BBwee1DoVK#ct z%uH)6F;NG&e4ueV?wI-3Et2wj0{X3j;or{_Vv)Kv#*U`NsR(G6^pLNvr|Ax&#JdO# zSrG|ZiX~<~K44^n{pq$z3t9-!Rm>=uQ1vO|j}%2O4}HK{X{dkdi-wB*v&8FkNA)Ja z--!IlFy?HDQ0pDF>hW_NZa)(f?#avWILU>mhK3u8N=m0&nNti>C?l;5XEb(@TwLU} z^JgXbPEICi|L3ZDe)VQ{(l5#wl9HrJQp)N&kE-@LOOQ?3VSiHUYR_Zp6O7N-%PU<+ zZDCTedF9Fl)8W`*g96<+q0R%)Zo5XuE^lqL&5$??E>`ZC;UTwF{4NxqJi8_c!g;4p z`_msgs2F-wR}=7}CIob};~N?b6_tEWH}X_qvopq)j%6K-$%2%Ow4r~BX?~~k0HXk) zt2z}$Nsh<~bdk}{r-3ioG2enkyM*T$bs-)&Q9#wt zmqeapV{6@LciKXtW3Thlt4JC6#Ku_*_X-_$B8fNi$BHU0@8u7sG*(F&kq7v3aVU9d z>i3hO`r5wu8ZNLe*;5C&Rxkmp5TyyCn5e%ZjtR(an5-4%gW?d|1E93BQt8#J2OGc4 zeykuC;n_^aTaKP?V0g}l!)cO|7WNQmw6W>N*H)6B+ke->@GKXq5NO7PHWcHXj@}y* z?}XxKDL@N#w+V5QC_0~?H>10ABF=E91E|8UfU6K(ujqU+{k#yShf0R9f+p2os+$Vq zoVRPs`iXcW<>Y?`N#U$#D~xCV+P!kQs~~;r??MmO*p3;k{{7iuO^YX;wD|tu56i-xw`k3)g0SxMXQStflhC5L65<%0w zCmM+LADnmd_MxjhILR9RkFtQBz1vdX5|?vM_tWo9lGjPeeKC^@@A_}tjw zQx0qw2oQ&F>}wuRER71$cN&yt_}$bp(Tfu>@OuoB73UrH%~J`5W6%G11ZJ-7C+X$+SYm+8?!4{4y|e z>0NfsE#kV32rNE%I6D7ax8=iFr+@6^De~RX$;m5#LJR9#K4C9?Wd?KawZmlSt>(RE zpAiLv5v7b6S$wfqUO?#kWXN+1k)F66sl^H}o;VL~*3WcXyXAe}yfC9;d4K@#Am8TpcQN z($c===I2`_8?LhxaoNa*v4J7})KFjla(>f|0+-g8LpYBpjXY2EKQA$u5m;F$5GZoW zQ&L=y{@1S1zh|NUt(c&~)?rNw!SZfwxydeGBE>8(XO zv=8++Q~N)1R6^iB)w@d~!1cGZnrhEai$IAA+uNhJ#NsCS%t|If-qYIp>&KCI$rZ-F zPE2HBN^I;32he)6hy#>7S}H>CzRpUyx%Fd}a~~&MmeNXmko2W5?82_>4V$@_Q~4CTk9ab zTR?l5&C-Oow|kQmtxw~Io7xf~jSW!}GXRF#U%%`-vG!n;1DE1?<>T6|7t%hB#~7LF zfSQbqzjl1XgZ$)g8X;djWQ)iwkT-MDdYGc)wDTG&V&KZeM&1hcN*Xq1f=A_M3s5l+ zD482Vai1S7X*1?dkK!$w{WY-WHWPqgOHw0riPS9wwzs=;_Gem|Hao7+Tj7R34 z#d!I#^BCABB?=IMLENrUH2+%>je=2}*HbX)*>qgKfOD5k&&bi`m0hry}a0-JelKyfsy)}g<8n`Bt@<9Z{}?XUT!y-IxF3Vwo~g~z7z}c zo?0c%6b))p(EJWzV=vIbgxKIBd9J!x76sKjpG$z%T-ou1F+!xI7-~xuWme=}G=vWO zjob=(QuRoX5eVZ{@XhC@4|;pe334Jabd#wc(hDULSto}yfa?g%LnZNE=@UEEu(Qjq z5Ez1$&H{{nJkl5LRD))U;B9)|6PZ9jiX?9Q^P&Wp56wuBETd!$LaJRUPl|Q|YtNz29MWY1 zr3nF(1}9xpTkPd|X7l>~Q6lX2DyXCqZbOj<*gpu}N}2TkRpY1aPZR1X=^!Sa0t=X7q|R*^uT+FlmFd=$yWOw%_oE{=9bV*a zCtqJH*2>y;JMa6*U48MH^Lecev2ES-?bKN(5i?Cyau~R!;M$RcMRIh%dx=tTxeTWmRJw9^P=xH?B%sV*pWOCAQOmG`_g@p*Di@X1Eoo#dxg|v5ulYX0Z zZYHCoq@&nuy#~xD}qT`%j!fXBR4S?X6#qT+=(8d-Gd1@;`#C#!GdZ{LcmBnWdt~ z$Mxsj5WHt=$=Vc*j4_1FZ-JLDUw*f@RZ&?rHDT1kfHr0EYt->@5*^VT40) z#JKI_Dn(XG#F}MS;^TlPwLcS7j%qBUwA2;2dwePmm>|@E7_sHw#*-66VdM?2(ZR#2 z2X`V2HT)!Vlw0DbndT)wnQCJlh{A~admog7A{sAJ*S#88d7zaU^`hql;Ds^E7O78mD( zH;;YiGMt?VhbJYNGQf0_8%xl4We=jFR`5X#j*3(3xK8rV|Cb~`IPQZmm_&mWfm2EY zrnJKo(<jAmoygUC-y(EBW0ddB()_x_^3ENTB z*49!m^=EXno-V{FMBZHf{l$7o>}FcpWofAIC!O5@$@Hro5(iiO`(pF9^cv_>udkEi zxzs_Z6{VbG5=hWR1k#LxF*&4fBSC`vaSTlB!4Haz1b1`+9rh?py6b!2*1Hj29Cw9W zx?Eip`E8iDzP`R)dJcnxghV1JOJCnpaI1b5X^&lN3&2Q-#ZwjA+uLt$ZVngS;L6LB zHKNTY=Uj6UynA2xcBRDQu21l0;q1-G>sZgqA9Il7g9@EzYA3Jwc^!^L05FkG%*=eC zs5-z~->b@kUtX^)B8AwPAou!DR-m*F%=nQ~a#GSg1#Gt8;+(84mOK&sS?Gwl@2kAy zrvN5S1mw)I)o?UPC?WaJj!;6_ufh9|A3qig#6AHm)_RjvwY60Y45&xP&SkhxTFc5v zHimLkG&SSOcUx9MaS1h^rnYr|m0(JTLdNvkh74*>m?KGviK+iQ60$t5ye0&%UrASu z#vFevDskC_4*`mYbWG4i?Ad~9J73GXk+De zp1{L^lQ1auD3xh=${&v2=3e{r$7(2BD%*BDq_b1Ls;CH`T_s-8(2yoQJ)Htv`?9i! zd1>8!db+y7O-*94OybY%Ze_~^nvcEuO-Ok2li`6(e;mC8o;`aV#VJ|9@6F;s7Nvo6 zw+{x;j_3<>hPXf3 zf$r)C?1G~z;&E|O9usyIJ@m_`pru=GiJx7Qls??1(PTo+@>#cUzuw~}Dk)dPXGL+S z(j|0ggWrwCu-6bL{2@uoX2ME9if(^AP0>C;x1sl)t9mnc3T5u5E$%->8!NT*T!FVq zD78CSYVv>>|}h6L)LNj-9-{Ozlo{ER6Wk{H)sxYd3B@Nk>3`5W=CK24p731eKa=yc7roGK#0 zLR9~sO=%9+t}VRV>(%-$tvl6U@0f0JE44pGSFu@mUvyCOY$pokfY#-gRn5J!vO+;c z6`I7ZvI2e!XlO0T%TaAPGJ(uJ@prm;qIUhV(UwPYSHo8>E(g~k$=9B`6 zz3vof?mD;&d;0N<*Bt+(f9YKz4DsH}@1#jL`(cnceXtRM6}uZf6>!^H*VL~#Fmu>ti9 zs^xtp)gGPfk2gt|#;a(-GwP7=RMAfLc4t>tIOjdE-~;BdBh%CGz=BT+vi}Ly?j@w_ zD3v=>M!Wrq>o65w!{QI-mhyJ*w|opVoMbgMHB~h=sncIx zdkyIMC;Rg;ySq*xn6GS4lxt}Uwc5e?Z=HQ|856ylqF(2=mbjIbLJ-u(bHJ-ba4%k? z;&qGtzsS~UyTCtW>r?)y6l*X=FytqFkZI)CDpcwwedPi1qeqW8A3p5-?z!WtK4eV} zjinFG&u8N?Y3QGIdO6+nrr_-ouCc49<-ibzuwNl;g-hc<@vGvA_Z_Q(m~*r zB#72J=H^uhcgtAedl0~3DPLPbg^m53s6UlZ#wG{fHBKw<#ogiT># zc(mqod?h9(miK)erLAGcCg9Bh-#lvJ_Xsn*N)eMJ3_;ckF8aNP&u{pK#b43KeAk0xuaEne@i;5lptKU%@$zS< zSq)(UyG{YhYy^zk;6na2`th4=GOay{9i15q@{YOTJcVUfF${?eSx3sQ+PjF-&&lfzDGqyCFyMpf^`d5BkT-i64{fVG~QBtTouzdFt87x?w{8T@J&lFMZm$8 zIzX3|Gcn2d`%Lf+RYh|%nJoKTShbE7DLuC;(g3i<1w{vZbWkN;CP(PfQmTx;`g<-VE` z;%lcJ3~V^+V!s~xw^RV!$pVMF*>T-GkNn>MG>M($Ad)wE@|_BOlIb_{TrXU-!FdD7 z_1*9S+J}2K0Kgf3{_0+#4|YEjo3Bj~)=&zkOv*wk4e=5JAD}f$!wRPmV1J>N~65W0|P6A%kryE>;1%l!j4K+hKfd79;oK8bMK6 zrA3tA`1m`;7Nb-73@ir|Xxviy4%wTXr@tkehdLsFW-tVmu- zZwFs|Ew!t_!L0VqZ^t#KZQ54Lb3Ua|>()FZxCO4fQ@1BWfs}F%sWdT(-R3z@_P6sP zc+Sw8ZjrHgS%mP=mPSzxAiEhqe7ii8JkZx@t1HBN(G{_LylfKg(`YaVZm_)r8=rD_ z{A^@THPG;}mg71W0EnIY(qoUcWx>eN;vSVqyZgxn&KgDqHd`&f+g(8Ii$#bwyhfd| zf`y|tN~FOlgf~;P=SP*|qcXo@BN?{^0<2nE^KlD}W zPG8)^_(qxi3jGrc?-{;Q3^nRn-8 zCcnxH6t&r+`i=_*Up)W^XhQF(17~*Xs}lCX9QWKe!3wI5M8%yxO7qEg3(e)YAF(n2Top|3ISwSulqb0MeRSY~n=EbfOK z>7sY=bhOZG*^9k{Dy-G(;-Qp};GiR>XvPZc4QT@_@;@i{OrHdC(+(~_-NH(X;{3#Y zyV@zPRjs~+oow^l6$9Gy-Vpx%Ia2BT>@;0(^7orgt-tuQvCk&Z;xFhq4@OcX#aiTE zW73$*n+;1p%Z$B3ff5aCESh1uXDYCDEIvBPugROL+VmNLpJ$)3ZZiwpRdI@%z*70d$BAVFr^Jk%u>?p6}5j*On2AwV1^@X&fV#NL_ z_coFbN0@E~ogpA2lt1vHHu!WwEM9r&QiFJ90ufUEc64&^qO6w>KeN zJW@+0>L`XbZiGb+UC8nq%}j>qk_bWYKmUu~veIuICI(cY)bUEzsqCN{s>nm4Q8M$5 zj72$@_(0<6-T`aikwW?o|BJexKy?P)Buqvbm#WyD(xct*K`**zTTc@{_WX}5Aqt7{F zu+v6qISTmdN63qe-I{E%$X!|)e8AtU4x5ya8F2PT^ex6k>!=*OXJ+ZJfNo{u%UX8# z=&_Q;Ke)pe_oT{` zwm5`P;>pYK!dsT~@$pfn?a<-G`CnUAS$-i9V;-t&jKpBU>F+H;=Eb{UUn~Fb z!xPClur!sFn%aZ081xrp=f55&p9aTGe`CbFboFSz=eeD+IvQ64dh-pk&a#WZ61&nJ z6V6%s_3MXNo%?(&%Ja4EB^1wU1Je$@7e0RquvH@l-`%y*<=2x0uXM|vy1H&$Qr<>< zS>5w)YT8s?@Ne4iqy1$56P)J@IN@6>Sy8Yc5KT#O(P-K7)_bw43LY`)X> zSR-dU(0Xd|4slK+$s!{vnSQuQICr~k97iaqybX>QBm;~(e5mb}b9xuSTukNeOcD?WYR zA4az;nNd9v%v!=>XI_XZFC_Xh7T}-UNN6kDu46k9v4Oz+On%$aV0zIjW5JP1L4JP zS($d;pGOirj3&?rE&t{_`R6BoTh`>?d!3&EOSUQj{Z~v7CJ78HNP3V>7XMgdvjP+3 zeviruEu)CVwgS0*mC*1T9}eXE$Br%AI+96e@BU)qBV1NDz_udKmtbXlQ57csn_9r0 zg+eHIzS(;$YnWMfHH0#Zu%_GsRFT%Pc9ukVh6_B6x%)50wJ#^$acN^`Ov9W6HoWy` z8IE(773QOpd)vE9pOE%j?_l)v$jcptgNXX6@(z0A5MipEMj=1gL{2_U|c`1m|lTmUjOj zeEDGh+K`zRZDiZqDaw~F*oSxF*FQ$zceL9`6dicvNS?Zd?4x`&9WD0h@H@qFiI+G1 z6yjBSAj{k;XMsxmOEGD`Cb`&FDbT_Kshm6fqEI~UL5>o*kc z2=4qvsJVM|;FqFaqB@vMH>U$N=n6@`zN6PtMm=VX-Swh~pI{~Lh_&YQVLKhxj4V!tVdp_u3$??-J>`81>=&$bN*aQDU7E*k ziCnXug?vD&GQv|Z1mkeEU|Z>&@W34Q;4S@&9spnmRG&W4^-9`K_VuG1o5jl}`aaf^ zcc4?fa+{{)>K!W^n0lZVn^oz{EJj;`JU(_=h<)iBI_)6#T&lQN52~O>C43^ohWUdT zH^_^qvS&6%0MhF-SKPW+f7WbsCpJmJ)%(pogvuoAB+JT3QO8>q$f;y;SDCfml`@p; zs*5^3Jv}=~pg^ENCYc;{TQnIH^%LrlCqz%FgI+&nGy$Z$a45^_@0&M(Cd?MM-g05z z5D`N-I|&m}GQqoK@3?}~tg9wHl!U-fTH1`_xVi3NddJ61#=?Q@x5@LlC$m!r=34+a zKFP4ZZCA{BxXp~;NC}OzwO1S{KFsVP+4QqVTj(dbavc$O!Sj2$I@SdpU)7!9h`@W zRqRKr(6rVA>Cr}CO54xz0AO*0eu0V&7DRuP+I)~5Ums`tZc1q92aWZ*n|P47ppFI5 zv?7t%>8^}mnsc0MC)4wjAi<3C-@R)L%m?K_v@KyTiSg`nxR7yKy5mL^P3)u-V>?2I z`vF-TsRlfQMljQb+V{}IO}~K{P{FV2KY$-ws+_HQCHPRzzw*t#e@GB;(kAw_^J()@ z4t$<6o{WJtAxbkIq8i>^ZT<9n>_Z9eYrx>J4ROjcd-KnMpWgj0%Lknc3epO$an~|h)o`S7HfMfIe&LoFS5RfpTEHD3~<623Y*^x~$!bLm)0S3Vs|JYi~CcmEDdmF zsnq`!&x3-zGnS3kM^3BDI!WT*bfB=#%U#y985wH~^ezg$O*3bnOMS;JKu~(wYP{9O zalCV>&x3$hjlFB%?(ip=`kfl2&k2?aw*2IeQh$;%fmgqp{f>s)UY=C>P+ckO|)h79|CanOD5*aq&*KpdHzp+(FK-PfpXd zN>A3{`)XUkmgC=2ycS6xiipt9+Rw5+56MhVPd`4RzMa!%Hd;*=bu*r`Jdps!1xTY| zr^GCU7(Hf!jr3hLv@_Q>e5z*;G;0n~7-nSBJ)P)L)dk^7od+Rc>W|^^+FC=lV9%V) z@h7IEDPlobUOgT7%Kd{wo@;$Sd-=C@4VMQb$L1vwr-zW_|PKO@Z`M8rqx8`z?>Q)RQ$& zfBA(2=R>HU?;^Vs8;}}65eD|IWDHzf!B?ntEN?m^LEnS>EkOd5ckdIvf(%GqaQ!;p z)Y_XIcAxYfDC>esFynV8;LVS;@Lff+Dl-otCqE2wFjDGoMpSeiy;gox_U_$dDmw zLI#xQ;>i~FY?wH!q5(N=YI~tQi)VFwD&<TJQT83c2jRY?EvEE(ZJ|> zfq`BaKt4+K<-I9hj>0T$0!pd~!L};1)o3skT0bt!B>}(A_f#I3i6RDUv{>XpeIETq zvBip)_@^ce9hP{nNx4BGH;n=M!X=hn_-C*~m67T#gecLSIM|5WTn ziGVH~g{iP3q-eWbm`p}_-SY4F`rT7Ko%8j#U%Pcq3UYN)&^A<6c>sI6Fae)UVwdYy>AU<{vSP<@m7CN}C=9t=b=}nZ0ri!1 zX%1VtD^JM%iTWhdNdpo1WpL(OLX3GLJy+d{$RUH!sEDGP0Q!AM5 zyIua&n03AI&e)?2T$UF0g8_7`+DybUQNYjqTEq{{Q1PiNp~)|jSY@g^a;{+^yjmq@ zJ|mI4$NHYGKS|+Z>A3U^$59*=JuI`TaR}>U2Y*Qt9U(P4n+*y z{Vp*}ePNc7#a3v~p3{i*L+;Iz!2aO>*g;;x}IaNaV5zGuGEc%N}-A8x|;4D#nM zD8jOqZFB=5hY-5+=EI*L^l2uxZnsWvY;dYV!1IJOk4&{Mcr} zX3#6O>bslIv`FV(=9}4szt+36ERe6>JRD!(D{$P1j?gZ_w7-jOUB6(Xr_Hp*%^fuw z!ayXVu}(iLIs4KWDE|ZNo^uS$&PF@(Dh*(niyYB7Q80>b??&RZ8qY)&s=ybJ8YKx? z=8Zc+qh!wB=<)w#Klcf3tSeeqT+;VP34VEO0>E9(7rrACN%r!KgI3kX566Oa$atyF zigV)h2Xe8WL3@1#LlP~!)C`Va52u$kEjXy1o7D%c_w6D-axQm6#KqbhG|-X5m`V%} zY?!SVYnmFuLlQVh=EK4Cf06V5#<4_$2<&I7b#O&G5MwnyrTB2PD%5(4;x*{BLEQh% zb-iF*i@$%qGnRkD636HL1d}-SDvpmrR^JPo|>XqW|KCTY1RM?~oq`GG3xxuk-(xwjgFb}LAU9TjU z%;!;F-a!BuAAv5D$d;&LeUk!LbYe(B@us{X=RnSqFVD29o^{&ucwFyw{@M|!(FsH7 zOWML!JK7M0`jes2jTV(J&qi8_Cr)&m-=`sUQ_PytS()#DYvA*jjzkUdO42y_cV}Da z$ln1<(P~fPM_?&lUpg}KMqt-5^x`n6wP(5Q3q~(~M4aI>AGk_L3=vQbCzlr#@S%}Y|S`v{Cx;&ATlE+9-%?U8T@UmCA$GXLXIhtv zI?keC|6k&!1&e52M2ew{j}7khId>hNGD{t2hd0~oNscny`K*m>Od?=3fmdMtmF4D6 z7QYdL!9wez!geg?@4D|lruUiC6QGG+4zKIdx+u>H=tjl_gnyEcrMCoy{41d^Nt*D7fK1 z;LI)DpYmLx1lhM;Xk~I7CFa&ewh( z$a7k((y^u|Jp)kW0sT4g6mGnWKIeKD(3g?daJ_l>ldX;FP#I2Xi@6>jJud2Vc9wxZ z?u5R`-mRdz%YAPODfzJ?quH)mbw|PPy8rX9IK>^Pl}b?u_}e&2A|i68QJ6QfT*}8* z6*D>$p6~umB^8Ys)uShmA{;RSUpSbic zdGR)wRg6%&Iyy8erzC;w=OLylO5h&)|05ER-~IIYGtXQX_5(#N?H>q&PPV_s_@SGp zCjr38l}STSA6)eto_ET{ke-WdTRQZAa7Gym-8peo=usq>I`?NAG+X26wQzR)x*I2* zj{EuM#&Lzv>AMe#P)djCRu({v<-k$WtVe@vZoJ5@yStlq+vCi-{(#E;qFG7%yBV{n z!>C)DOg*MPc^=9;ZIA7VFsL2twt|UQ+f%uo*^2)~uI!CZPpiAIRVFcg)QlPx+pBGzsK&O-e<_>vO_qfI3KfBY^__%d(^>T zE-nZB75$!R>r{`s0&d$OqmEL#5akd>Xq4<~>)=!ntCptb<3a<+a-3Npxk}6VzDaG? zt-Dyr)w)@S-`(AU!$EEnsgHbhSvebfhfDw9T@Pt42q2Jy0oNS8)8Y=ERmHj1SLz^4Len;Wc zejdX-JUp&baKk18*2&d)QpO^F?%19SAI~pvpD{`;4J2S^7o8tW5l3Z7TWqIO)r;O4)Wn|hWyhQz3yL|oF~+#RR1H@ zS0K{^EzHX&?NF-GK78dDCnLfAjB$9(qU`nQ!HPdySo8Sqy4CTCkUePZF)AJ zdQd3;dFAx>4=p5C_V&jiEabgGnT0bI+{#!qDg~=)NenbCSSi1t9UN_gdy4&$F76x- zo1j@^h`^e1rS;#CG&EcSfLSo~qxujOS;Emo_*Z^KA*-a7GId)C8e>07r?&&k2EMoB zw{}eh_R#I19Z*)EW+}2hXT9g21PM4g@(AN9OlG(a$Q?_zSB%F;sz0b$i%p1)*-ZZo z(ll;_6E7B=%3JL;S29^c1Y}uBY~@5w+-q;vnc3zZ=JPOo6SzQ0Pgwr^{8;Nl>rjkp zV$Q;qqqiT-8>Uzgw2?&&m8v5d-W~ z0Zbz-lD6@zE%5m0zNqxvblo&M`pnYV#hOrBEP9+FQ<0}?{MJh0>8Wa;ECJBd*e|Ns za4@Zsl}%U~Vupp<2^4#-qOQ^zn{M3rBW`NOQl7l@6m9#R<5rP9CPD&mLOC7Z z8$o*SFlx_;?p`^n`xdL4D$>U&A{GM5cLTlRrYq8{|3c}v^6u^n5kpR(+?N#PH-^${ z&~v@`E6X?EAl?6Wf7$YG^0{@MftBN0MI2n3xTi7YgRCe*+0Z5~mRlF2aO;(akpkbd z-9EXEdZv@^bl$GhjkOYy(Ux&--ci@IjmCo=R!ynxjSV6o3r$(t`{QvUy@jh3sPe&? z84|T^@r1tplBvR<8wN7N=k4m6OKW9$UeW=(Td%!F;(st~MY=P}D9Sz8fBF*ywO|I_ zt^5mOUBQM56^$eRjh^VfqTmMPfM6+(VWXK8kQH~kny7W`?FagT9YqC45x)iKsFec= zeFROC@bhS`6`x#BX}M``M#*Nl?qIZ1B89@p@ZMR^M}U1)14+P%8TEAYtkdA)Ye590S*2-ZHY@`DyP}}p|aQ^Ej?hdvf`P~8MIoCN;4C)!iWnt0`@{O#)DYD3nsqZ zQbmqlCFJ#0R+b#ceT$Zyi;9V{Yin;m-b$LdDUH$VOL~VLFFqD~Y;RxC8O!k&q^M{( zG%j9-4*LBZeat0k`v6pF(8{c|v%`k7G<}i%n)xAvEnC@s&&1^Xj{&R?BiAd0LILpw zO+jZmrDZVc(tNY4PVe-?qbX*D8;m9zN!CFOjsX+D-+u20t0$fy8&e&ra8 zn|;1>D?QKO<0;?ww};?@hjA!8f1M{C`nRw&3}LHm{*)ynGc(vi+hbf`jAeU$b5q{U zP1vd4(cjgT3l+aCwWG7!L~r&^6Qx@yYkgQQlUz-Q#4e(r!}2K8S^^v*k^(Zi6;GCb zE50@b6)%s991T-SYzWew(C+WbPv)%k9`hhHSD! z58_<>ne4Br-IHIut75pRZ#+qDiz*QN^EMXAryl-q^tn8Uu2 zZbT8cVa?itBJ*kJX_p+wWi}$u0@|<}_Zk${0c|K0k(9*JA72;N9^VL&7B3&3*j!%U z*^z(yR{G7`i|P32XiRm#wJ&|t*g|->LXdYI|CXav^SGl&Fc;5Xy8c=R1<*o!OBKvV z?)B|%Y;;uT!ZWAnDd!ElHqXrE*yKXIF3hCzs9Z&uGyeMZ-63AH!L(E+6CcAT|OYif{7icnCW+%m!PR%S6ggI@VYPC7&;@E2y&*=L})rocMk^*|l+?Fe^Fx z;%B18cXWd{j=yVT+lnn_8)+Du^d+w%>NS@6H?KMw!^363Y-_wIV%l+`B{->SW$r-0 z5Va+lt{2C*^!(A{;P_(8*ViNUGLc_>thF3$lvr&34a*ozP3wntKMbnCYI2glYMzH$ z^savTEcDv3ba5o7EVw{h^q4j2=thCSOJ5NXtbj--DFvyA`FhzegR{@cUDD}I3KJMP z2Cd3o4^t9Po-b#q`yHL~OyY5@eLc7AE{2DP{muKSyY&2B5ki+5V=LS6 zwg|R@`Up2saBHQ!}fFs4>ydsPRT|E~Y<^Ga#*CHasX% zuQp_nzXgdvroAWCCH8uM)Ha9o> z48J1Svp`T9vAn!IV`O4-A)49qgxqvJc`%66TqbDl-;ZqFn8KPVn5ff96y^SD{eS0= z9)NJ=niaXY$ks@i*%g|ME{Z9TwO;ErZ4*zv)fF=z>iQF%3+F5FN}ik)^Sb|`ljJTV zrOMU_w!GoI7DN>(_a81_UJW9y#hX+{og07m^2me7uCk11YW2v2@n;!9bf63Y1AMSn zs|49in+INhg=FpZEuD=Xn(|2VsojP2K%?GVp?g5A8;DlLD~<3MKAgYrLisI$0Fd+l zdj_2PzsWd#tiY972fIDJQ-^JtKF2OW}FQ|Zd;bVHh zi5X&=KQLE$&onfe?Ffu3_X>88Q84D_|b0G*d^6leJvQzJZDzB96BbMv5!~1n>*uWbWLUwJV6rWCelO|PO zXPSN|H&RGemYx#jB=UvC%4~$@d_RNwlj?EI=U`ey79a{yXZmJY)_Zm>6+ z)Zop$C)nXot*nEedBJw9mWs8j)Ps4*M`)>A06VANqQEhFhlo7~0(>3`(3|_yx^P5D zH)q0`Po79HlakQgIu6fu!D#0=f}&X#!P^1a?mQJR)iRK-)$; zk+$JjPAj=wu0qw>-9Q=|7!pH2agUSp`s2ixjAzN#zRz}5dDJI?-JOL=U1O&-q>vq? zBqn=xRY~7wpxG{FcP)TC4k3o`w%+-A{DZ$Z_9o2PhYy{H6E(eP58Hysy+Xb4al{5# zLa5hx9s|HnB6f{kRbn7!D&XZK%Wpv1A|2beipsG=ZX?QtM{h7<<&|Tt3w9yk(uI&S zT?6ruSW=%AnBv36mS%>v{zz#Ez~grFzm=(X+GQN5l6CwrluQ$b-%CM%^$7UXFhfc5 zG<6fcGzN{TmI2H$(%HvxvX25p9y`&;DEx3FV0jckG0C6BTA z!lJ?y+}z5|TK?J?=;<+lnR|9vR8*7`v=oJ;PVe-&OOr4SfsW`j6-6zPRSU&5k`wRk z_`LaeMnvtIt12pIXUDRc5^onUx6+7jP2|p_R8z)gu|;4numS!QRWi5o8gkGnXoFPh zM46YyT_T;U1Oe3VRJ7dgK&S^C9UPVqome|V4z7LHCBEK<6;}v=d#sZ71jU%stWI(` zi6x%(X{oC)G@$5RS;qRDMi_FU0W3?n2F67$kMhGmW=aeF9z`L>oyA-4oIQNy$}3mK z%Od_d$7$T1nUjYq2M zawWYhZinzA0pN!8Wi5aJp!Fp#?x>El+W*4mv)i{BsSTk!bg5S#`CNtrR2NpxiM+{5 zsv)Lz{ZeW;*A|Lo@GJm4#3%RR;{0E6kgN%!j;3-SXs@SmKsZULX8g~#S>ut0758)3 z28XlN=qZLqerk{LTt4ef5NusKcvQ7INzd8y%u0t7!U~qe1*#gx!~qdir5Y5)HHRR4@c`$?UD+*_X_aE!v==-b7Kv zbm`krQs4%^Y45DZw0&53cyqP$5;YACLC#3{)&z3t{PYk6XiD$i-Fa;PC+k#jKohH@ zqoWcYA^*7t_LuE3@`op`j+n~EkfoJ4C|VtgcDY_g&;^R&a{<* z(t`_Z>ztl;A4580*iH&NR^)$mFPAkKv1z{+k@Y{kBoff&56ms26>(PVaA8@Z>u17+ zWohXhft?QzM?&0hRIMz!507}!USC7rs7z_RQrj>DQiGWj$8DdrWSB-_M$ezO5Cn9a z%NrZB43CVwF4f~K zD)wh+R5B~(@rqdGOHJh!bO7QuUMGVj;@0w{cd=T>zd1pAL`9B zHRnJeDJiLyt!-5CgW+k$QD0A7TCi5p%#?&4BAgGNOzlR4JdnoW3k6F{9-&8% zbY8sp04{x!cx&qU1QJTz>D(gx=n-vla&qk#4r!t5>pM#4PlC@ixU-a%GE8zT7)Ord zIv6fUfP^F>y48b=N0<26dXClld~2VIPxi!t%*;6VfxNL4XDwqumRpSzMXKPC^QymjriBtpOF zm2tHb0U%(}%V_@YU3z8Z4FiMoRJt=$Bcn)g%K)m==XXEC-F$#5dAJ$1;Q9(yDK#UeEaZ_2T9l($8dws5=MV&@e`veM;7*c^^J9 zp~5M^0au0U<|YL!c4^0Bd7q}()pc#yG7*%Wx1UWh_+v*>UF6`0r{{+QI@;O+^}fg0 zlssb4_Npr@A4f4gBC4sWv9h*)^8ERA8(Z68iyORJ?(QO=K7G0rK3&yoq2;PZ;_F>j zDJw(Qc@k0oHYf9#ZpGpFlh>I>ICt`KvX{Aqb%9@xSGLB9MigWTFG0q&PL3A~+gE2U z5d-QEhIIl|FUU~6h8&TFD;Khcj?cke)$AXEbVhA-v^0o6?3xS~jM?UV$XT z{VUZGFGAIAC9YLle}cp+Dj|Q3$r93jm(XSaCmqRE0)i@%k0~t85(L>_USYm!?P41b z##xI;jpu*Jibtb%o?#6Yn;zi7Zqxb%GHKTt?LN}%Gow4e*kB$3YN=Pd6DVxya~Hrh|`@Bgmzt?st| zt)U wNbLInaKVNubR=f0E{u6~WQu?rrA5eIttRdX1RNjz?_3^B1ePY?JPqU7&eAC>d3c4EMp?pYi3h|lKM%io zm-^)=?|AoYly<4ye4o50NLX-4{l2L5{o9Wzx?sh}U@CX+3~99tL+(0X>Kq0t;u@DH zz%V1MLyJ!6gVmVQ2=stt&IPBL$oV|6tUzC~Wc=sIAoM20#@d>oiFpWiJR2GpcY~wl zrjK)3Az3BWC+Wf|uv8Nk_70We>Q9eHwr3wU4>KGo0J?g5 zWEw)!$cS)?-0bYDOiWDjWp<#BySlrZ8(?R#@$sQiQRK$;K4V4JKNyOR+X>nB?6Kqc z+6=#U>dK3c9ue%tuUxeE1%TW{(Ff6J;iUKNc{o-^C6J7=yZ%DAmiRUur$Cb!Bz7xy zyaIP!8r+C;aBvW0XJ_j-`b#@(!2T|L-e1x&G>ibV^jTujgT%-7LSMgpaRS{|%m;mU zr~cR!9G;$!58Q2-R69LcXC@2)MLOShgey2WJj~C}ck_N2^)Xx*2%u-h3cKBY9EWHk z^xjiAGAN-~q5ly~#^3^!xNp5`r>F)2UjMXjRNI`8R$iQl+U8K2KJ(&D-b-xUf-)~9=*k@uBSee3aCiAyO zVqQFd4xnda*AWeit+_^34kBOU;#|P#IrIf%wk8sRwDR&V%tGcQ&(ze!_obZwa43Y3 zY>ctX2)c(i{YpN`=sB!S3NU3=6ueJJK@StTefu^EiodNidP6z%(=!nIn7={zu}H3N zU=fm?F}Fsxhp0O^SjHatB85dnt|oZc z5ZrU{_bi;2M;IY-8GMZ#YOd-bO%**oMZqo1$E2jF$w~bMgA&_`;^qyv7Kf_Lf&#LS zA3t_=bv5y%`ej(N#a5GkVP%>+Go&p8C9#Br#3de0@L@Y&7NcBPSO|-Z`~c3--2C<>RNY@xoF!L@ zF}oT23PibW0SX%?a*n_DLsofARaHsjzka=wprNi#Zv2qp&-C=rtS_gMk`kwk3@aE} zT0Z2mbb|Tq)nS3zoWsFLj~{wC$5WmbLMa{9K?`~t2^E#{)2CNJ34-E3g(sSUfanso z>gzN5`1m+&fA`SCwUw-u?j#DeZyOXsh^aQQED5InfbFYCbCx%*639IbI?Edw8R7C< z6Dx-DRJ&0-7M=$-XdLae=!xfSc`I?BpEg;`(@qfG zssB%apx; z7B);}C)wWb4w&r5FH0W28~L?A=mGp9U4Jd7p873{Zr??SJ&*+E=g)}g_FP?BKh%p2 z*Ime-40WP=B|P6fc6gO`I1;n*rD# zu0de7RcvBBmaW!xOZ@uqMvF4r*eDu2Rwk}%&`KVB$-wtLYd=0e^2Ti*?z<1QG}Q-n z@grKcg1f$vHCnPO${w?|whUEXI6^=CsB9^Ce{f19D}DC$@q?5`z{qoZ7=1126Amv6 zzaF{9-_(GY32r}RNOLaQ4jBfIznO~$D)DB6$2Fvt{w7SDE-P9GG%u&jtU=qh_g>0j z9g*H&rV<`uaMWHs_`LJ$h2TZ;fy;6XOE?_yhr73~$l^T;uYOtdWP;*>)LL#<&8(Vu z{q+Z$5|VvqSK;TlU3bAWv&~0U4CpGy4<}VTH&T1IjCNy|ykKXKQ>h5SLM-MdPOp61&>kM>l_o+|j^{jmyf4GArjl@Uon6+#k$DJsJBp@_oG^Pj-Z; z9EF?P>G`ZqjBFewTcf0@H_VKy;B)>k8i#gwL+uy`d5JJ+G6rYtSL(t zggzYO%8turraTv))>5uERR!<Wne=#cK=TD(|8Fna!mzP(^eO1__;etm43!INx zvJF$E;6C0b13Q);Zp)IUnr*P<{UpH_?)2sJ{z}niy$2HnU?m_ll>+X z@H?cm&c~V!nP+W7nZPg42gEiKHfYoo#^~jr_i@2!RTLCf0dJBq34t~iMvAkyW zrCYk*PjZO%p;XIvbhM{sZ7->+v@V9aZ(OI0lvg?OovLEnE4d+Saf(3rLlaz2dLg;B zZrzL*L!f`97wwLeNELEbgDWU2`6A@cS{(ow6l9i~w_IBW)qr`TU5ZmaJ5F0{m4yJ; z8nNzl8ot`D7ujH~zPs&N_ZO<*T~A>cJ(3T)qv!pv=rWKz$d)RFD8JpX@m3K6u#>e0 zzw_Z5_moJ!h_eoFl%&+x#DYWL-}ALv6=nSs!=pFA(6BXi`k<3m3)i&mTY@1CBw=YJ z?;2kW+FtfvuHT~p=9dyN2)|`?X4S9$Ex5OhHrQv7D3z_9S{8BV_(5C>KjEXxz-qs5 zYj+|-9OHDX@hvcmUxTPgHqw25{)tH{gzU~`oNl&+xJ1g`9(Y55Rc8NJF7S_zGQ|G9 z*6Za(c>pXEB!F7gfCk^(#9nz~^#Q6Okp0>@kRHZZq(vR{_~ac}+D2_SuSXljP9jfs z-azw_od^;f9IV8!5E8=49>`Aqfjo?zq!p|lA!!ll`iJ2H1N#5ej1c8?@LLj{p-N4% zfAb=Mt-N7#_zoBYNjG$@0UtOAY*_Sp>L43}2)&V0k#Jn!ZtU_~066c5O2G-@yv1FVW7-;(G0|Kwqdvk${67^(<2lNLQHnzWlZ_NhnC)qH+;(_7&mnfa zZb=OMcHi2ESdiyr1e18jVkzlS`;XB5#(R!$JF+?j-}%Y_^B}Z-X?_;nfb=|pR*NHG z42^TAysek?wZ{c0hLxNe3Dd39_g*=+?ts^@-teo4nDSA*;kdJ+(1uTyUQ9sx zy~5Cj=h7e2cdeOi^R(6xoh0i+i*L$}ORw2Gi?`v$!1$Oe;c9qti_|mgLl8m zwyJ(^6vgxVo^SI)bfCZfDiz|*hI!D+Ljm~@O-ko5TTpB+J1eU@;_wyi0%Go#lT7U;nKN^gmUXb>Io=rc@LHDn*#VKj{IgikeT0<;?>B4_iGJ AO8@`> From 32f410acfd30c13e94a18ab75cea32337eb71b4a Mon Sep 17 00:00:00 2001 From: Hatterhat Date: Mon, 15 Nov 2021 20:28:01 -0600 Subject: [PATCH 007/172] the --- code/modules/telesci/quantum_pad.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/telesci/quantum_pad.dm b/code/modules/telesci/quantum_pad.dm index a7aa2f69a05..21110a459ee 100644 --- a/code/modules/telesci/quantum_pad.dm +++ b/code/modules/telesci/quantum_pad.dm @@ -43,7 +43,7 @@ if(!panel_open) . += "The panel is screwed in, obstructing the linking device." else - . += "The linking device is now able to be scanned with a multitool." + . += "The linking device is now able to be scanned with a multitool." /obj/machinery/power/quantumpad/RefreshParts() var/E = 0 From b0804eed8019855ce496b9fa1d338268dbbacd20 Mon Sep 17 00:00:00 2001 From: FartMaster69420 <78667902+FartMaster69420@users.noreply.github.com> Date: Tue, 16 Nov 2021 01:24:30 -0500 Subject: [PATCH 008/172] Somatoray Buff, initial commit This adds micro laser stock parts as a component to floral somatorays. --- .../projectiles/guns/energy/special.dm | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 0ea7871e30b..bd2d3d2d012 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -47,7 +47,9 @@ modifystate = "floramut" cell_type = /obj/item/weapon/cell/device/weapon/recharge battery_lock = 1 + var/decl/plantgene/gene = null + var/obj/item/weapon/stock_parts/micro_laser/emitter firemodes = list( list(mode_name="induce mutations", projectile_type=/obj/item/projectile/energy/floramut, modifystate="floramut"), @@ -55,8 +57,44 @@ list(mode_name="induce specific mutations", projectile_type=/obj/item/projectile/energy/floramut/gene, modifystate="floramut"), ) +/obj/item/weapon/gun/energy/floragun/Initialize() + . = ..() + emitter = new(src) + +/obj/item/weapon/gun/energy/floragun/examine(var/mob/user) + . = ..() + if(Adjacent(user)) + . += "It has [emitter ? emitter : "no micro laser"] installed." + +/obj/item/weapon/gun/energy/floragun/attackby(obj/item/W, mob/user) + if(istype(W, /obj/item/weapon/stock_parts/micro_laser)) + if(!emitter) + user.drop_item() + W.loc = src + emitter = W + to_chat(user, "You install a [emitter.name] in [src].") + else + to_chat(user, "[src] already has a laser.") + + else if(W.is_screwdriver()) + if(emitter) + to_chat(user, "You remove the [emitter.name] from the [src].") + emitter.loc = get_turf(src.loc) + playsound(src, W.usesound, 50, 1) + emitter = null + return + else + to_chat(user, "There is no micro laser in this [src].") + return + ..() + return + /obj/item/weapon/gun/energy/floragun/afterattack(obj/target, mob/user, adjacent_flag) //allow shooting into adjacent hydrotrays regardless of intent + if(!emitter) + to_chat(user, "The [src] has no laser! ") + playsound(src, 'sound/weapons/empty.ogg', 50, 1) + return if(adjacent_flag && istype(target,/obj/machinery/portable_atmospherics/hydroponics)) user.visible_message("\The [user] fires \the [src] into \the [target]!") Fire(target,user) From 40f963ea2246d44ff29bc79da47b0f9081ec4f1c Mon Sep 17 00:00:00 2001 From: FartMaster69420 <78667902+FartMaster69420@users.noreply.github.com> Date: Tue, 16 Nov 2021 16:28:59 -0500 Subject: [PATCH 009/172] Adds effects to upgrading the Somatoray The chance of a mutation is now multiplied by the tier of laser used. --- code/modules/hydroponics/trays/tray.dm | 27 ++++++++++++------- .../projectiles/guns/energy/special.dm | 8 ++++++ .../modules/projectiles/projectile/special.dm | 3 ++- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index cdc4314c6c6..e6ea3ad1e40 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -217,17 +217,24 @@ return //Override for somatoray projectiles. - if(istype(Proj ,/obj/item/projectile/energy/floramut)&& prob(20)) - if(istype(Proj, /obj/item/projectile/energy/floramut/gene)) - var/obj/item/projectile/energy/floramut/gene/G = Proj - if(seed) - seed = seed.diverge_mutate_gene(G.gene, get_turf(loc)) //get_turf just in case it's not in a turf. - else - mutate(1) + var/mutchance = 15 + if(istype(Proj ,/obj/item/projectile/energy/floramut)) + var/obj/item/projectile/energy/floramut/GM = Proj + mutchance *= GM.lasermod + if(prob(mutchance)) + if(istype(Proj, /obj/item/projectile/energy/floramut/gene)) + var/obj/item/projectile/energy/floramut/gene/G = Proj + if(seed) + seed = seed.diverge_mutate_gene(G.gene, get_turf(loc)) //get_turf just in case it's not in a turf. + else + mutate(1) + return + else if(istype(Proj ,/obj/item/projectile/energy/florayield)) + var/obj/item/projectile/energy/floramut/GY = Proj + mutchance *= GY.lasermod + if(prob(mutchance)) + yield_mod = min(10,yield_mod+rand(1,2)) return - else if(istype(Proj ,/obj/item/projectile/energy/florayield) && prob(20)) - yield_mod = min(10,yield_mod+rand(1,2)) - return ..() diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index bd2d3d2d012..0bfafac81fe 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -120,8 +120,16 @@ /obj/item/weapon/gun/energy/floragun/consume_next_projectile() . = ..() var/obj/item/projectile/energy/floramut/gene/G = . + var/obj/item/projectile/energy/florayield/GY = . + var/obj/item/projectile/energy/floramut/GM = . + if(istype(G)) G.gene = gene + G.lasermod = emitter.rating + else if(istype(GY)) + GY.lasermod = emitter.rating + else if(istype(GM)) + GM.lasermod = emitter.rating /obj/item/weapon/gun/energy/meteorgun name = "meteor gun" diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index ee75074cc73..1d85c67f5dc 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -138,7 +138,7 @@ light_power = 0.5 light_color = "#33CC00" impact_effect_type = /obj/effect/temp_visual/impact_effect/monochrome_laser - + var/lasermod = 0 combustion = FALSE /obj/item/projectile/energy/floramut/on_hit(var/atom/target, var/blocked = 0) @@ -195,6 +195,7 @@ light_power = 0.5 light_color = "#FFFFFF" impact_effect_type = /obj/effect/temp_visual/impact_effect/monochrome_laser + var/lasermod = 0 /obj/item/projectile/energy/florayield/on_hit(var/atom/target, var/blocked = 0) var/mob/living/M = target From 83b77c7923bcec7b5552dbd7178072af8ea25704 Mon Sep 17 00:00:00 2001 From: FartMaster69420 <78667902+FartMaster69420@users.noreply.github.com> Date: Tue, 16 Nov 2021 16:39:54 -0500 Subject: [PATCH 010/172] Adding comments --- code/modules/hydroponics/trays/tray.dm | 3 ++- code/modules/projectiles/guns/energy/special.dm | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index e6ea3ad1e40..09e1ccbe9e8 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -216,7 +216,8 @@ if(seed && seed.get_trait(TRAIT_IMMUTABLE) > 0) return - //Override for somatoray projectiles. + // Override for somatoray projectiles. + // Change the mutchance var to buff or nerf somatorays, it will be multiplied by the tier of the laser. var/mutchance = 15 if(istype(Proj ,/obj/item/projectile/energy/floramut)) var/obj/item/projectile/energy/floramut/GM = Proj diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 0bfafac81fe..62a2af0f781 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -122,7 +122,7 @@ var/obj/item/projectile/energy/floramut/gene/G = . var/obj/item/projectile/energy/florayield/GY = . var/obj/item/projectile/energy/floramut/GM = . - + // Inserting the upgrade level of the gun to the projectile as there isn't a better way to do this. if(istype(G)) G.gene = gene G.lasermod = emitter.rating From 34bf86a38c5d72df665d0e0510186370d45fc5bb Mon Sep 17 00:00:00 2001 From: Heroman Date: Thu, 18 Nov 2021 06:12:27 +1000 Subject: [PATCH 011/172] Blast doors now properly resist fire --- code/game/machinery/doors/door_vr.dm | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/doors/door_vr.dm b/code/game/machinery/doors/door_vr.dm index 6583b841b85..1a504065cc3 100644 --- a/code/game/machinery/doors/door_vr.dm +++ b/code/game/machinery/doors/door_vr.dm @@ -101,7 +101,19 @@ /obj/machinery/door/blast/regular/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) return // blast doors are immune to fire completely. -/obj/machinery/door/blast/regular/ +/obj/machinery/door/blast/regular + heat_proof = 1 //just so repairing them doesn't try to fireproof something that never takes fire damage + +/obj/machinery/door/blast/angled/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) + return // blast doors are immune to fire completely. + +/obj/machinery/door/blast/angled + heat_proof = 1 //just so repairing them doesn't try to fireproof something that never takes fire damage + +/obj/machinery/door/blast/puzzle/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) + return // blast doors are immune to fire completely. + +/obj/machinery/door/blast/puzzle heat_proof = 1 //just so repairing them doesn't try to fireproof something that never takes fire damage /obj/machinery/door/proc/toggle() From 2430e62baa42f30b804ec758bb0ef3413ce28e16 Mon Sep 17 00:00:00 2001 From: VerySoft Date: Wed, 17 Nov 2021 19:40:52 -0500 Subject: [PATCH 012/172] Corrects a couple of variable errors --- maps/gateway_vr/variable/arynthilake_a.dmm | 2 +- maps/gateway_vr/variable/arynthilake_b.dmm | 2 +- maps/gateway_vr/variable/arynthilakeunderground_a.dmm | 2 +- maps/gateway_vr/variable/arynthilakeunderground_b.dmm | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/maps/gateway_vr/variable/arynthilake_a.dmm b/maps/gateway_vr/variable/arynthilake_a.dmm index 24a790b1772..4ff82692516 100644 --- a/maps/gateway_vr/variable/arynthilake_a.dmm +++ b/maps/gateway_vr/variable/arynthilake_a.dmm @@ -2098,7 +2098,7 @@ check_arrest = 0; check_down = 0; check_records = 0; - control_area = /area/gateway/grasslands/underground/maintenance; + control_area = /area/gateway/arynthilake/underground/maintenance; desc = "A firewall prevents AIs from interacting with this device."; lethal = 1; locked = 0; diff --git a/maps/gateway_vr/variable/arynthilake_b.dmm b/maps/gateway_vr/variable/arynthilake_b.dmm index 06169e3a6ba..f3be0775bf1 100644 --- a/maps/gateway_vr/variable/arynthilake_b.dmm +++ b/maps/gateway_vr/variable/arynthilake_b.dmm @@ -503,7 +503,7 @@ check_arrest = 0; check_down = 0; check_records = 0; - control_area = /area/gateway/grasslands/underground/maintenance; + control_area = /area/gateway/arynthilake/underground/maintenance; desc = "A firewall prevents AIs from interacting with this device."; lethal = 1; locked = 0; diff --git a/maps/gateway_vr/variable/arynthilakeunderground_a.dmm b/maps/gateway_vr/variable/arynthilakeunderground_a.dmm index 121b0fac96c..54d03f71a61 100644 --- a/maps/gateway_vr/variable/arynthilakeunderground_a.dmm +++ b/maps/gateway_vr/variable/arynthilakeunderground_a.dmm @@ -85,7 +85,7 @@ "lM" = ( /obj/effect/map_effect/perma_light/gateway{ light_color = "#0c6ba6"; - light_power = .3; + light_power = 0.3; light_range = 5 }, /turf/simulated/floor/beach/sand/desert, diff --git a/maps/gateway_vr/variable/arynthilakeunderground_b.dmm b/maps/gateway_vr/variable/arynthilakeunderground_b.dmm index 75fa807ad5a..ca1b2d01c9a 100644 --- a/maps/gateway_vr/variable/arynthilakeunderground_b.dmm +++ b/maps/gateway_vr/variable/arynthilakeunderground_b.dmm @@ -136,7 +136,7 @@ "ng" = ( /obj/effect/map_effect/perma_light/gateway{ light_color = "#0c6ba6"; - light_power = .3; + light_power = 0.3; light_range = 5 }, /turf/simulated/floor/beach/sand/desert, From 6f5ee57f5e8f60c7a38f7df94572eb8fa5103485 Mon Sep 17 00:00:00 2001 From: Anthony Rodriguez Date: Wed, 17 Nov 2021 21:35:14 -0800 Subject: [PATCH 013/172] Oh god landmarks and everything else hhhhh --- code/game/objects/effects/landmarks.dm | 4 - code/game/objects/effects/landmarks_vr.dm | 6 + code/global_vr.dm | 1 + code/modules/events/carp_migration.dm | 2 +- code/modules/events/drone_pod_vr.dm | 2 +- code/modules/events/event_container_vr.dm | 22 +-- code/modules/events/infestation.dm | 152 ++++++++------------- code/modules/events/jellyfish_migration.dm | 102 ++++++++++++++ maps/stellardelight/stellar_delight1.dmm | 91 ++++++------ maps/stellardelight/stellar_delight2.dmm | 101 ++++++++------ maps/stellardelight/stellar_delight3.dmm | 104 +++++++------- vorestation.dme | 1 + 12 files changed, 348 insertions(+), 240 deletions(-) create mode 100644 code/modules/events/jellyfish_migration.dm diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index 7ff7638995f..93f4319d5ee 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -61,10 +61,6 @@ prisonsecuritywarp += loc delete_me = 1 return - if("blobstart") - blobstart += loc - delete_me = 1 - return if("xeno_spawn") xeno_spawn += loc delete_me = 1 diff --git a/code/game/objects/effects/landmarks_vr.dm b/code/game/objects/effects/landmarks_vr.dm index da406c8043b..e436447109d 100644 --- a/code/game/objects/effects/landmarks_vr.dm +++ b/code/game/objects/effects/landmarks_vr.dm @@ -1,6 +1,12 @@ /obj/effect/landmark var/abductor = 0 +/obj/effect/landmark/vines + name = "vinestart" + +/obj/effect/landmark/vermin + name = "verminstart" + /obj/effect/landmark/late_antag name = "Antag Latespawn" var/antag_id diff --git a/code/global_vr.dm b/code/global_vr.dm index 8709577507c..6ed3403aaf7 100644 --- a/code/global_vr.dm +++ b/code/global_vr.dm @@ -1,4 +1,5 @@ var/list/vinestart = list() +var/list/verminstart = list() var/list/awayabductors = list() // List of scatter landmarks for Abductors in Gateways var/list/eventdestinations = list() // List of scatter landmarks for VOREStation event portals diff --git a/code/modules/events/carp_migration.dm b/code/modules/events/carp_migration.dm index d4fb6faa973..7f991b44fc2 100644 --- a/code/modules/events/carp_migration.dm +++ b/code/modules/events/carp_migration.dm @@ -26,7 +26,7 @@ if(activeFor % 5 != 0) return // Only process every 10 seconds. if(count_spawned_carps() < carp_cap) - spawn_fish(rand(1, severity * 2) - 1, severity, severity * 2) + spawn_fish(rand(3, 3 + severity * 2) - 1, 1, severity + 2) /datum/event/carp_migration/proc/spawn_fish(var/num_groups, var/group_size_min, var/group_size_max, var/dir) if(isnull(dir)) diff --git a/code/modules/events/drone_pod_vr.dm b/code/modules/events/drone_pod_vr.dm index 54ddd7bdba9..c93911e7779 100644 --- a/code/modules/events/drone_pod_vr.dm +++ b/code/modules/events/drone_pod_vr.dm @@ -22,7 +22,7 @@ qdel(target_spot) /datum/event/drone_pod_drop/announce() - command_announcement.Announce("An unidentified drone pod has been detected landing near the surface facilty. Open and examine at your own risk.", "NanoTrasen Orbital Monitoring") + command_announcement.Announce("An unidentified drone pod has been detected on a collision course towards the [location_name()]. Open and examine at your own risk.", "[location_name()] Sensor Network") /datum/event/drone_pod_drop/start() if(!land_target) diff --git a/code/modules/events/event_container_vr.dm b/code/modules/events/event_container_vr.dm index e82fa420d4f..7b429f94477 100644 --- a/code/modules/events/event_container_vr.dm +++ b/code/modules/events/event_container_vr.dm @@ -84,7 +84,8 @@ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grub Infestation", /datum/event/grub_infestation, 0, list(ASSIGNMENT_SECURITY = 10, ASSIGNMENT_ENGINEER = 30), 1), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Drone Pod Drop", /datum/event/drone_pod_drop, 10, list(ASSIGNMENT_SCIENTIST = 40), 1), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Morph Spawn", /datum/event/morph_spawn, 75, list(ASSIGNMENT_SECURITY = 30, ASSIGNMENT_SCIENTIST = 10), 1), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Maintenance Predator", /datum/event/maintenance_predator, 75, list(ASSIGNMENT_SECURITY = 40), 0) + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Maintenance Predator", /datum/event/maintenance_predator, 75, list(ASSIGNMENT_SECURITY = 40), 0), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Jellyfish School", /datum/event/jellyfish_migration, 5, list(ASSIGNMENT_ANY = 1, ASSIGNMENT_SECURITY = 5, ASSIGNMENT_MEDICAL = 3), 1), ) add_disabled_events(list( new /datum/event_meta(EVENT_LEVEL_MODERATE, "Appendicitis", /datum/event/spontaneous_appendicitis, 0, list(ASSIGNMENT_MEDICAL = 30), 1), @@ -97,17 +98,18 @@ /datum/event_container/major/New() available_events = list( - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Nothing", /datum/event/nothing, 3600), - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Atmos Leak", /datum/event/atmos_leak, 30, list(ASSIGNMENT_ENGINEER = 25), 1), - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Strike", /datum/event/meteor_strike, 10, list(ASSIGNMENT_ENGINEER = 15), 1), - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Space Vines", /datum/event/spacevine, 20, list(ASSIGNMENT_ENGINEER = 7), 1), - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Carp Migration", /datum/event/carp_migration, 10, list(ASSIGNMENT_SECURITY = 5), 1), - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Containment Breach", /datum/event/prison_break/station,0, list(ASSIGNMENT_ANY = 5), 1), + new /datum/event_meta(EVENT_LEVEL_MAJOR, "Nothing", /datum/event/nothing, 3600), + new /datum/event_meta(EVENT_LEVEL_MAJOR, "Atmos Leak", /datum/event/atmos_leak, 30, list(ASSIGNMENT_ENGINEER = 25), 1), + new /datum/event_meta(EVENT_LEVEL_MAJOR, "Space Vines", /datum/event/spacevine, 20, list(ASSIGNMENT_ENGINEER = 7), 1), + new /datum/event_meta(EVENT_LEVEL_MAJOR, "Carp Migration", /datum/event/carp_migration, 10, list(ASSIGNMENT_SECURITY = 5), 1), + new /datum/event_meta(EVENT_LEVEL_MAJOR, "Containment Breach", /datum/event/prison_break/station, 0, list(ASSIGNMENT_ANY = 5), 1), + new /datum/event_meta(EVENT_LEVEL_MAJOR, "Jellyfish Migration", /datum/event/jellyfish_migration, 5, list(ASSIGNMENT_ANY = 1, ASSIGNMENT_SECURITY = 5, ASSIGNMENT_MEDICAL = 3), 1), ) add_disabled_events(list( - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Blob", /datum/event/blob, 10, list(ASSIGNMENT_ENGINEER = 60), 1), - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Wave", /datum/event/meteor_wave, 30, list(ASSIGNMENT_ENGINEER = 15), 1), - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Supply Demand", /datum/event/supply_demand, 0, list(ASSIGNMENT_ANY = 5, ASSIGNMENT_SCIENCE = 15, ASSIGNMENT_GARDENER = 10, ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_MEDICAL = 15), 1), + new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Strike", /datum/event/meteor_strike, 10, list(ASSIGNMENT_ENGINEER = 15), 1), + new /datum/event_meta(EVENT_LEVEL_MAJOR, "Blob", /datum/event/blob, 10, list(ASSIGNMENT_ENGINEER = 60), 1), + new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Wave", /datum/event/meteor_wave, 30, list(ASSIGNMENT_ENGINEER = 15), 1), + new /datum/event_meta(EVENT_LEVEL_MAJOR, "Supply Demand", /datum/event/supply_demand, 0, list(ASSIGNMENT_ANY = 5, ASSIGNMENT_SCIENCE = 15, ASSIGNMENT_GARDENER = 10, ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_MEDICAL = 15), 1), )) #undef ASSIGNMENT_ANY diff --git a/code/modules/events/infestation.dm b/code/modules/events/infestation.dm index 985518067bf..d0d221d5fd1 100644 --- a/code/modules/events/infestation.dm +++ b/code/modules/events/infestation.dm @@ -1,120 +1,78 @@ -#define LOC_KITCHEN 0 -#define LOC_ATMOS 1 -#define LOC_CHAPEL 2 -#define LOC_LIBRARY 3 -#define LOC_HYDRO 4 -#define LOC_CONSTR 5 -#define LOC_TECH 6 -#define LOC_GARDEN 7 -#define LOC_STEMNGR 8 -#define LOC_RESEARCH 9 - #define VERM_MICE 0 #define VERM_LIZARDS 1 -#define VERM_SPIDERS 2 /datum/event/infestation announceWhen = 10 endWhen = 11 - var/location var/locstring var/vermin var/vermstring + var/list/spawned_vermin = list() + var/spawn_types + var/num_groups + var/prep_size_min + var/prep_size_max + var/vermin_cap = 40 + var/list/spawn_locations = list() /datum/event/infestation/start() - - location = rand(0,9) - var/list/turf/simulated/floor/turfs = list() - var/spawn_area_type - switch(location) - if(LOC_KITCHEN) - spawn_area_type = /area/crew_quarters/kitchen - locstring = "the kitchen" - if(LOC_ATMOS) - spawn_area_type = /area/engineering/atmos - locstring = "atmospherics" - if(LOC_CHAPEL) - spawn_area_type = /area/chapel/main - locstring = "the chapel" - if(LOC_LIBRARY) - spawn_area_type = /area/library - locstring = "the library" - if(LOC_HYDRO) - spawn_area_type = /area/hydroponics - locstring = "hydroponics" - if(LOC_CONSTR) - spawn_area_type = /area/construction - locstring = "the construction area" - if(LOC_TECH) - spawn_area_type = /area/storage/tech - locstring = "technical storage" - if(LOC_GARDEN) - spawn_area_type = /area/hydroponics/garden - locstring = "the public garden" - if(LOC_STEMNGR) - spawn_area_type = /area/crew_quarters/captain - locstring = "the site manager's office" - if(LOC_RESEARCH) - spawn_area_type = /area/rnd/research - locstring = "the research division" - - for(var/areapath in typesof(spawn_area_type)) - var/area/A = locate(areapath) - for(var/turf/simulated/floor/F in A.contents) - //VOREStation Edit - Fixes event - var/blocked = FALSE - for(var/atom/movable/AM in F) - if(AM.density) - blocked = TRUE - if(!blocked) - turfs += F - //VOREStation Edit - Fixes event - - var/list/spawn_types = list() - var/max_number - vermin = rand(0,2) + vermin = rand(0,1) switch(vermin) if(VERM_MICE) - spawn_types = list(/mob/living/simple_mob/animal/passive/mouse/gray, /mob/living/simple_mob/animal/passive/mouse/brown, /mob/living/simple_mob/animal/passive/mouse/white) - max_number = 12 + spawn_types = /mob/living/simple_mob/animal/passive/mouse/gray + prep_size_min = 1 + prep_size_max = 4 vermstring = "mice" if(VERM_LIZARDS) - spawn_types = list(/mob/living/simple_mob/animal/passive/lizard) - max_number = 6 + spawn_types = /mob/living/simple_mob/animal/passive/lizard + prep_size_min = 1 + prep_size_max = 3 vermstring = "lizards" - if(VERM_SPIDERS) - spawn_types = list(/obj/effect/spider/spiderling) - max_number = 3 - vermstring = "spiders" + // Check if any landmarks exist! + for(var/obj/effect/landmark/C in landmarks_list) + if(C.name == "verminstart") + spawn_locations.Add(C.loc) - spawn(0) - var/num = rand(2,max_number) - while(turfs.len > 0 && num > 0) - var/turf/simulated/floor/T = pick(turfs) - turfs.Remove(T) - num-- - if(vermin == VERM_SPIDERS) - var/obj/effect/spider/spiderling/S = new(T) - S.amount_grown = -1 - else - var/spawn_type = pick(spawn_types) - new spawn_type(T) +/datum/event/infestation/tick() + if(activeFor % 5 != 0) + return // Only process every 10 seconds. + if(count_spawned_vermin() < vermin_cap) + spawn_vermin(rand(4,10), prep_size_min, prep_size_max) + +/datum/event/infestation/proc/spawn_vermin(var/num_groups, var/group_size_min, var/group_size_max) + if(spawn_locations.len) // Okay we've got landmarks, lets use those! + shuffle_inplace(spawn_locations) + num_groups = min(num_groups, spawn_locations.len) + for (var/i = 1, i <= num_groups, i++) + var/group_size = rand(group_size_min, group_size_max) + for (var/j = 0, j < group_size, j++) + spawn_one_vermin(spawn_locations[i]) + return + +// Spawn a single vermin at given location. +/datum/event/infestation/proc/spawn_one_vermin(var/loc) + var/mob/living/simple_mob/animal/M = new spawn_types(loc) + GLOB.destroyed_event.register(M, src, .proc/on_vermin_destruction) + spawned_vermin.Add(M) + return M + +// Counts living vermin spawned by this event. +/datum/event/infestation/proc/count_spawned_vermin() + . = 0 + for(var/mob/living/simple_mob/animal/M as anything in spawned_vermin) + if(!QDELETED(M) && M.stat != DEAD) + . += 1 + +// If vermin is kill, remove it from the list. +/datum/event/infestation/proc/on_vermin_destruction(var/mob/M) + spawned_vermin -= M + GLOB.destroyed_event.unregister(M, src, .proc/on_vermin_destruction) + /datum/event/infestation/announce() - command_announcement.Announce("Bioscans indicate that [vermstring] have been breeding in [locstring]. Clear them out, before this starts to affect productivity.", "Vermin infestation") - -#undef LOC_KITCHEN -#undef LOC_ATMOS -#undef LOC_CHAPEL -#undef LOC_LIBRARY -#undef LOC_HYDRO -#undef LOC_TECH -#undef LOC_GARDEN -#undef LOC_STEMNGR -#undef LOC_RESEARCH + command_announcement.Announce("Bioscans indicate that [vermstring] have been breeding all over the facility. Clear them out, before this starts to affect productivity.", "Vermin infestation") #undef VERM_MICE -#undef VERM_LIZARDS -#undef VERM_SPIDERS +#undef VERM_LIZARDS \ No newline at end of file diff --git a/code/modules/events/jellyfish_migration.dm b/code/modules/events/jellyfish_migration.dm new file mode 100644 index 00000000000..7498539ae14 --- /dev/null +++ b/code/modules/events/jellyfish_migration.dm @@ -0,0 +1,102 @@ +/datum/event/jellyfish_migration + startWhen = 0 // Start immediately + announceWhen = 45 // Adjusted by setup + endWhen = 75 // Adjusted by setup + var/jellyfish_cap = 20 + var/list/spawned_jellyfish = list() + +/datum/event/jellyfish_migration/setup() + announceWhen = rand(30, 60) // 1 to 2 minutes + endWhen += severity * 25 + jellyfish_cap = 2 + 3 ** severity // No more than this many at once regardless of waves. (5, 11, 29) + +/datum/event/jellyfish_migration/start() + affecting_z -= global.using_map.sealed_levels // Space levels only please! + ..() + +/datum/event/jellyfish_migration/announce() + var/announcement = "" + if(severity == EVENT_LEVEL_MAJOR) + announcement = "Massive migration of unknown biological entities has been detected near [location_name()], please stand-by." + else + announcement = "Unknown biological [spawned_jellyfish.len == 1 ? "entity has" : "entities have"] been detected near [location_name()], please stand-by." + command_announcement.Announce(announcement, "Lifesign Alert") + +/datum/event/jellyfish_migration/tick() + if(activeFor % 5 != 0) + return // Only process every 10 seconds. + if(count_spawned_jellyfish() < jellyfish_cap) + spawn_fish(rand(3, 3 + severity * 2) - 1, 1, severity + 2) + +/datum/event/jellyfish_migration/proc/spawn_fish(var/num_groups, var/group_size_min, var/group_size_max, var/dir) + if(isnull(dir)) + dir = (victim && prob(80)) ? victim.fore_dir : pick(GLOB.cardinal) + + // Check if any landmarks exist! These will use the carp spawn since they already would spawn in these similar spots. + var/list/spawn_locations = list() + for(var/obj/effect/landmark/C in landmarks_list) + if(C.name == "carpspawn" && (C.z in affecting_z)) + spawn_locations.Add(C.loc) + if(spawn_locations.len) // Okay we've got landmarks, lets use those! + shuffle_inplace(spawn_locations) + num_groups = min(num_groups, spawn_locations.len) + for (var/i = 1, i <= num_groups, i++) + var/group_size = rand(group_size_min, group_size_max) + for (var/j = 0, j < group_size, j++) + spawn_one_jellyfish(spawn_locations[i]) + return + + // Okay we did *not* have any landmarks, so lets do our best! + var/i = 1 + while (i <= num_groups) + var/Z = pick(affecting_z) + var/group_size = rand(group_size_min, group_size_max) + var/turf/map_center = locate(round(world.maxx/2), round(world.maxy/2), Z) + var/turf/group_center = pick_random_edge_turf(dir, Z, TRANSITIONEDGE + 2) + var/list/turfs = getcircle(group_center, 2) + for (var/j = 0, j < group_size, j++) + var/mob/living/simple_mob/animal/M = spawn_one_jellyfish(turfs[(i % turfs.len) + 1]) + // Ray trace towards middle of the map to find where they can stop just outside of structure/ship. + var/turf/target + for(var/turf/T in getline(get_turf(M), map_center)) + if(!T.is_space()) + break; + target = T + if(target) + M.ai_holder?.give_destination(target) // Ask jellyfish to swim towards the middle of the map + i++ + +// Spawn a single jellyfish at given location. +/datum/event/jellyfish_migration/proc/spawn_one_jellyfish(var/loc) + var/mob/living/simple_mob/animal/M = new /mob/living/simple_mob/vore/alienanimals/space_jellyfish(loc) + GLOB.destroyed_event.register(M, src, .proc/on_jellyfish_destruction) + spawned_jellyfish.Add(M) + return M + +// Counts living jellyfish spawned by this event. +/datum/event/jellyfish_migration/proc/count_spawned_jellyfish() + . = 0 + for(var/mob/living/simple_mob/animal/M as anything in spawned_jellyfish) + if(!QDELETED(M) && M.stat != DEAD) + . += 1 + +// If jellyfish is bomphed, remove it from the list. +/datum/event/jellyfish_migration/proc/on_jellyfish_destruction(var/mob/M) + spawned_jellyfish -= M + GLOB.destroyed_event.unregister(M, src, .proc/on_jellyfish_destruction) + +/datum/event/jellyfish_migration/end() + . = ..() + // Clean up jellyfish that died in space for some reason. + spawn(0) + for(var/mob/living/simple_mob/SM in spawned_jellyfish) + if(SM.stat == DEAD) + var/turf/T = get_turf(SM) + if(istype(T, /turf/space)) + if(prob(75)) + qdel(SM) + CHECK_TICK + +// Overmap version +/datum/event/jellyfish_migration/overmap/announce() + return diff --git a/maps/stellardelight/stellar_delight1.dmm b/maps/stellardelight/stellar_delight1.dmm index 353763ac027..7056bbc6aa1 100644 --- a/maps/stellardelight/stellar_delight1.dmm +++ b/maps/stellardelight/stellar_delight1.dmm @@ -655,9 +655,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/catwalk_plated/dark, -/obj/effect/landmark{ - name = "vinestart" - }, +/obj/effect/landmark/vines, /turf/simulated/floor, /area/stellardelight/deck1/port) "bx" = ( @@ -1308,9 +1306,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/effect/landmark{ - name = "vinestart" - }, +/obj/effect/landmark/vines, /turf/simulated/floor/tiled/techmaint, /area/stellardelight/deck1/starboard) "cV" = ( @@ -2045,6 +2041,12 @@ }, /turf/simulated/floor/tiled/techfloor, /area/stellardelight/deck1/researchserver) +"et" = ( +/obj/effect/landmark{ + name = "droppod_landing" + }, +/turf/space, +/area/space) "eu" = ( /obj/structure/cable/green{ color = "#42038a"; @@ -4723,9 +4725,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/effect/landmark{ - name = "vinestart" - }, +/obj/effect/landmark/vines, /turf/simulated/floor/tiled/techmaint, /area/stellardelight/deck1/aft) "jV" = ( @@ -6906,6 +6906,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, +/obj/effect/landmark/vermin, /turf/simulated/floor/tiled/dark, /area/security/security_cell_hallway) "oC" = ( @@ -7162,9 +7163,7 @@ dir = 8 }, /obj/effect/catwalk_plated/dark, -/obj/effect/landmark{ - name = "vinestart" - }, +/obj/effect/landmark/vines, /turf/simulated/floor, /area/stellardelight/deck1/starboard) "ph" = ( @@ -8810,6 +8809,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, +/obj/effect/landmark/vermin, /turf/simulated/floor/tiled/dark, /area/chapel/main) "sC" = ( @@ -10476,6 +10476,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, +/obj/effect/landmark/vermin, /turf/simulated/floor/carpet/bcarpet, /area/stellardelight/deck1/starboard) "wo" = ( @@ -10796,9 +10797,7 @@ /obj/effect/floor_decal/milspec/color/red/half{ dir = 1 }, -/obj/effect/landmark{ - name = "vinestart" - }, +/obj/effect/landmark/vines, /turf/simulated/floor/tiled/techmaint, /area/stellardelight/deck1/fore) "xa" = ( @@ -11889,6 +11888,7 @@ dir = 4 }, /obj/effect/floor_decal/milspec/color/black, +/obj/effect/landmark/vermin, /turf/simulated/floor/tiled/dark, /area/security/armoury) "zq" = ( @@ -12944,6 +12944,7 @@ /obj/effect/floor_decal/milspec/color/red/half{ dir = 1 }, +/obj/effect/landmark/vermin, /turf/simulated/floor/tiled/techmaint, /area/stellardelight/deck1/fore) "BB" = ( @@ -13043,6 +13044,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, +/obj/effect/landmark/vermin, /turf/simulated/floor/tiled/milspec, /area/stellardelight/deck1/exploration) "BI" = ( @@ -14181,9 +14183,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, -/obj/effect/landmark{ - name = "vinestart" - }, +/obj/effect/landmark/vines, /turf/simulated/floor/tiled/techmaint, /area/stellardelight/deck1/port) "Eq" = ( @@ -16456,6 +16456,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, +/obj/effect/landmark/vermin, /turf/simulated/floor/tiled/steel_grid, /area/rnd/research) "Jd" = ( @@ -19899,6 +19900,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on, /obj/machinery/alarm/angled, /obj/effect/floor_decal/milspec/color/black, +/obj/effect/landmark/vermin, /turf/simulated/floor/tiled/dark, /area/security/armoury) "QQ" = ( @@ -21222,9 +21224,7 @@ /obj/structure/closet/crate/bin{ anchored = 1 }, -/obj/effect/landmark{ - name = "vinestart" - }, +/obj/effect/landmark/vines, /turf/simulated/floor/tiled/milspec, /area/stellardelight/deck1/exploration) "TB" = ( @@ -21830,6 +21830,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, +/obj/effect/landmark/vermin, /turf/simulated/floor/reinforced, /area/stellardelight/deck1/shuttlebay) "UK" = ( @@ -22185,6 +22186,7 @@ /obj/item/weapon/book/manual/supermatter_engine, /obj/item/weapon/book/manual/tesla_engine, /obj/item/weapon/book/manual/virology, +/obj/effect/landmark/vermin, /turf/simulated/floor/wood, /area/library) "Vq" = ( @@ -22942,6 +22944,7 @@ /obj/item/weapon/tank/jetpack/carbondioxide, /obj/item/weapon/tank/jetpack/carbondioxide, /obj/item/weapon/tank/jetpack/carbondioxide, +/obj/effect/landmark/vermin, /turf/simulated/floor/tiled/eris/white/gray_platform, /area/gateway) "WU" = ( @@ -24044,6 +24047,12 @@ /obj/machinery/recharge_station, /turf/simulated/floor/bluegrid, /area/assembly/robotics) +"Zd" = ( +/obj/effect/landmark{ + name = "carpspawn" + }, +/turf/space, +/area/space) "Ze" = ( /obj/machinery/door/firedoor/glass, /obj/structure/window/bay/reinforced, @@ -27549,7 +27558,7 @@ uq uq uq uq -uq +Zd uq uq uq @@ -28089,7 +28098,7 @@ uq uq uq uq -uq +Zd uq uq uq @@ -28271,7 +28280,7 @@ uq uq uq uq -uq +Zd uq uq uq @@ -28336,7 +28345,7 @@ uq uq uq uq -uq +Zd uq uq uq @@ -28713,7 +28722,7 @@ uq uq uq uq -uq +Zd uq uq uq @@ -29070,7 +29079,7 @@ uq uq uq uq -uq +Zd uq uq uq @@ -29741,7 +29750,7 @@ uq uq uq uq -uq +Zd uq uq uq @@ -30841,7 +30850,7 @@ RF RF uq uq -uq +et uq uq uq @@ -32265,7 +32274,7 @@ uq uq uq uq -uq +Zd uq uq uq @@ -32438,7 +32447,7 @@ uq uq uq uq -uq +Zd uq uq uq @@ -34710,7 +34719,7 @@ uq uq uq uq -uq +Zd uq uq uq @@ -37799,7 +37808,7 @@ EG RF uq uq -uq +et uq uq uq @@ -38262,7 +38271,7 @@ uq uq uq uq -uq +Zd uq uq uq @@ -38371,7 +38380,7 @@ uq uq uq uq -uq +Zd uq uq uq @@ -39007,7 +39016,7 @@ uq uq uq uq -uq +Zd uq uq uq @@ -39419,7 +39428,7 @@ uq uq uq uq -uq +Zd uq uq uq @@ -39727,7 +39736,7 @@ uq uq uq uq -uq +Zd uq uq uq @@ -40200,7 +40209,7 @@ uq uq uq uq -uq +Zd uq uq uq @@ -40597,7 +40606,7 @@ uq uq uq uq -uq +Zd uq uq uq @@ -41613,7 +41622,7 @@ uq uq uq uq -uq +Zd uq uq uq diff --git a/maps/stellardelight/stellar_delight2.dmm b/maps/stellardelight/stellar_delight2.dmm index 5ad6a31faac..8338ab1098f 100644 --- a/maps/stellardelight/stellar_delight2.dmm +++ b/maps/stellardelight/stellar_delight2.dmm @@ -2433,6 +2433,7 @@ /obj/machinery/light{ dir = 4 }, +/obj/effect/landmark/vermin, /turf/simulated/floor/wood, /area/crew_quarters/captain) "fp" = ( @@ -2588,6 +2589,7 @@ "fL" = ( /obj/machinery/computer/arcade/battle, /obj/machinery/atmospherics/unary/vent_pump/on, +/obj/effect/landmark/vermin, /turf/simulated/floor/tiled/eris/dark/cargo, /area/crew_quarters/recreation_area) "fN" = ( @@ -3114,6 +3116,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, +/obj/effect/landmark/vermin, /turf/simulated/floor/tiled/techmaint, /area/storage/primary) "gS" = ( @@ -5496,9 +5499,7 @@ }, /obj/machinery/vending/loadout/loadout_misc, /obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/landmark{ - name = "vinestart" - }, +/obj/effect/landmark/vines, /turf/simulated/floor/holofloor/tiled/dark, /area/crew_quarters/locker) "me" = ( @@ -5514,9 +5515,7 @@ "mg" = ( /obj/random/vendordrink, /obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/landmark{ - name = "vinestart" - }, +/obj/effect/landmark/vines, /turf/simulated/floor/tiled/steel_ridged, /area/stellardelight/deck2/port) "mh" = ( @@ -5751,6 +5750,7 @@ /obj/machinery/light{ dir = 1 }, +/obj/effect/landmark/vermin, /turf/simulated/floor/wood, /area/stellardelight/deck2/briefingroom) "mI" = ( @@ -5846,6 +5846,9 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, +/obj/effect/landmark{ + name = "verminstart" + }, /turf/simulated/floor/grass, /area/hydroponics) "mT" = ( @@ -6232,6 +6235,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, +/obj/effect/landmark/vermin, /turf/simulated/floor/lino, /area/crew_quarters/bar) "nR" = ( @@ -7236,6 +7240,7 @@ icon_state = "2-4" }, /obj/structure/closet/secure_closet/engineering_personal, +/obj/effect/landmark/vermin, /turf/simulated/floor/tiled/eris/dark/orangecorner, /area/engineering/locker_room) "qe" = ( @@ -7370,6 +7375,7 @@ /obj/machinery/newscaster{ pixel_y = 28 }, +/obj/effect/landmark/vermin, /turf/simulated/floor/tiled, /area/storage/art) "qt" = ( @@ -7973,9 +7979,7 @@ dir = 4; pixel_x = 24 }, -/obj/effect/landmark{ - name = "vinestart" - }, +/obj/effect/landmark/vines, /turf/simulated/floor/tiled/techmaint, /area/storage/primary) "rF" = ( @@ -9151,9 +9155,7 @@ "us" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/machinery/recharge_station, -/obj/effect/landmark{ - name = "vinestart" - }, +/obj/effect/landmark/vines, /turf/simulated/floor/tiled/steel_ridged, /area/stellardelight/deck2/starboard) "ut" = ( @@ -9755,6 +9757,7 @@ dir = 4; icon_state = "pipe-c" }, +/obj/effect/landmark/vermin, /turf/simulated/floor/tiled/monotile, /area/hydroponics) "vQ" = ( @@ -10009,6 +10012,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, +/obj/effect/landmark/vermin, /turf/simulated/floor/tiled/eris/white/bluecorner, /area/stellardelight/deck2/triage) "wy" = ( @@ -12706,6 +12710,7 @@ /obj/structure/cable/orange{ icon_state = "1-8" }, +/obj/effect/landmark/vermin, /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos/monitoring) "CO" = ( @@ -12959,6 +12964,7 @@ dir = 1 }, /obj/structure/undies_wardrobe, +/obj/effect/landmark/vermin, /turf/simulated/floor/holofloor/tiled/dark, /area/crew_quarters/locker) "Dv" = ( @@ -14263,6 +14269,7 @@ /obj/effect/floor_decal/milspec/color/silver/corner{ dir = 8 }, +/obj/effect/landmark/vines, /turf/simulated/floor/tiled, /area/stellardelight/deck2/fore) "Gb" = ( @@ -14771,6 +14778,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, +/obj/effect/landmark/vermin, /turf/simulated/floor/tiled/eris/steel/cargo, /area/quartermaster/storage) "Hf" = ( @@ -15302,6 +15310,7 @@ /obj/random/vendordrink, /obj/machinery/atmospherics/unary/vent_pump/on, /obj/machinery/firealarm/angled, +/obj/effect/landmark/vermin, /turf/simulated/floor/tiled, /area/stellardelight/deck2/aftstarboard) "Il" = ( @@ -15345,6 +15354,7 @@ }, /obj/structure/table/steel_reinforced, /obj/item/device/retail_scanner/command, +/obj/effect/landmark/vermin, /turf/simulated/floor/tiled/eris/dark/monofloor, /area/bridge) "Ip" = ( @@ -16356,9 +16366,7 @@ /obj/item/paint_palette, /obj/item/paint_brush, /obj/item/paint_brush, -/obj/effect/landmark{ - name = "vinestart" - }, +/obj/effect/landmark/vines, /turf/simulated/floor/tiled, /area/storage/art) "KD" = ( @@ -16547,6 +16555,7 @@ /obj/machinery/camera/network/medbay{ dir = 8 }, +/obj/effect/landmark/vermin, /turf/simulated/floor/tiled/eris/white/bluecorner, /area/medical/chemistry) "La" = ( @@ -17951,6 +17960,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/wood, /area/stellardelight/deck2/barbackroom) +"Oh" = ( +/obj/effect/landmark{ + name = "carpspawn" + }, +/turf/space, +/area/space) "Oi" = ( /obj/machinery/firealarm/angled, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -18134,6 +18149,9 @@ /obj/machinery/status_display{ pixel_y = 32 }, +/obj/effect/landmark{ + name = "verminstart" + }, /turf/simulated/floor/tiled/eris/cafe, /area/crew_quarters/kitchen) "OB" = ( @@ -18231,9 +18249,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/obj/effect/landmark{ - name = "vinestart" - }, +/obj/effect/landmark/vines, /turf/simulated/floor/tiled/eris/steel/brown_platform, /area/quartermaster/storage) "OQ" = ( @@ -18495,6 +18511,12 @@ }, /turf/simulated/floor/tiled/steel_ridged, /area/stellardelight/deck2/starboard) +"Pp" = ( +/obj/effect/landmark{ + name = "droppod_landing" + }, +/turf/space, +/area/space) "Pq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/red{ dir = 9 @@ -20251,6 +20273,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, +/obj/effect/landmark/vermin, /turf/simulated/floor/tiled/eris/white/bluecorner, /area/medical/cmostore) "Tn" = ( @@ -21913,6 +21936,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 4 }, +/obj/effect/landmark/vines, /turf/simulated/floor/tiled, /area/stellardelight/deck2/fore) "Xf" = ( @@ -22713,6 +22737,7 @@ "YW" = ( /obj/random/vendordrink, /obj/machinery/atmospherics/unary/vent_pump/on, +/obj/effect/landmark/vermin, /turf/simulated/floor/tiled/steel_ridged, /area/stellardelight/deck2/starboard) "YX" = ( @@ -25832,7 +25857,7 @@ Jh Jh Jh Jh -Jh +Oh Jh Jh Jh @@ -26237,7 +26262,7 @@ Jh Jh Jh Jh -Jh +Oh Jh Jh Jh @@ -26637,7 +26662,7 @@ Jh Jh Jh Jh -Jh +Oh Jh Jh Jh @@ -26858,7 +26883,7 @@ Jh Jh Jh Jh -Jh +Oh Jh Jh Jh @@ -27807,7 +27832,7 @@ Jh Jh Jh Jh -Jh +Oh Jh Jh Jh @@ -28779,7 +28804,7 @@ Jh Jh Jh Jh -Jh +Pp Jh Jh Jh @@ -28890,7 +28915,7 @@ Jh Jh Jh Jh -Jh +Oh Jh Jh Jh @@ -30574,7 +30599,7 @@ Jh Jh Jh Jh -Jh +Oh Jh Jh Jh @@ -31869,7 +31894,7 @@ Jh Jh Jh Jh -Jh +Oh Jh Jh Jh @@ -33124,7 +33149,7 @@ Jh Jh Jh Jh -Jh +Oh Jh Jh Jh @@ -34994,7 +35019,7 @@ Jh Jh Jh Jh -Jh +Oh Jh Jh Jh @@ -36393,7 +36418,7 @@ Jh Jh Jh Jh -Jh +Oh Jh Jh Jh @@ -36888,7 +36913,7 @@ bw Jh Jh Jh -Jh +Oh Jh Jh Jh @@ -37301,7 +37326,7 @@ Jh Jh Jh Jh -Jh +Pp Jh Jh Jh @@ -37379,7 +37404,7 @@ NL NL Jh Jh -Jh +Pp Jh Jh Jh @@ -37701,7 +37726,7 @@ Jh Jh Jh Jh -Jh +Oh Jh Jh Jh @@ -38292,7 +38317,7 @@ Jh Jh Jh Jh -Jh +Oh Jh Jh Jh @@ -39457,6 +39482,7 @@ Jh Jh Jh Jh +Oh Jh Jh Jh @@ -39501,8 +39527,7 @@ Jh Jh Jh Jh -Jh -Jh +Oh Jh Jh Jh @@ -40187,7 +40212,7 @@ Jh Jh Jh Jh -Jh +Oh Jh Jh Jh diff --git a/maps/stellardelight/stellar_delight3.dmm b/maps/stellardelight/stellar_delight3.dmm index 294faa22e83..629b2e2a2a6 100644 --- a/maps/stellardelight/stellar_delight3.dmm +++ b/maps/stellardelight/stellar_delight3.dmm @@ -230,9 +230,7 @@ /area/stellardelight/deck3/aft) "ba" = ( /obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/landmark{ - name = "vinestart" - }, +/obj/effect/landmark/vines, /turf/simulated/open, /area/stellardelight/deck2/fore) "bb" = ( @@ -501,6 +499,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, +/obj/effect/landmark/vines, /turf/simulated/open, /area/crew_quarters/bar) "cb" = ( @@ -5885,6 +5884,13 @@ /obj/structure/low_wall/bay/reinforced/steel, /turf/simulated/floor, /area/stellardelight/deck2/port) +"wc" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/effect/landmark/vermin, +/turf/simulated/open, +/area/stellardelight/deck2/starboard) "wd" = ( /obj/structure/table/standard, /obj/item/weapon/aiModule/oxygen, @@ -6296,6 +6302,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals5{ dir = 4 }, +/obj/effect/landmark/vermin, /turf/simulated/floor/tiled, /area/stellardelight/deck3/starboarddock) "xE" = ( @@ -6415,9 +6422,6 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/obj/effect/landmark{ - name = "vinestart" - }, /turf/simulated/floor/tiled/monotile, /area/stellardelight/deck3/commandhall) "yc" = ( @@ -6732,6 +6736,12 @@ }, /turf/simulated/floor/tiled/techfloor/grid, /area/ai_upload) +"zk" = ( +/obj/effect/landmark{ + name = "droppod_landing" + }, +/turf/space, +/area/space) "zm" = ( /obj/structure/cable/blue{ icon_state = "4-8" @@ -7664,6 +7674,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, +/obj/effect/landmark/vermin, /turf/simulated/open, /area/stellardelight/deck2/fore) "Cc" = ( @@ -8229,6 +8240,12 @@ /obj/random/trash_pile, /turf/simulated/floor, /area/maintenance/stellardelight/deck3/portcent) +"El" = ( +/obj/effect/landmark{ + name = "carpspawn" + }, +/turf/space, +/area/space) "En" = ( /obj/effect/floor_decal/industrial/warning/corner{ dir = 1 @@ -8475,6 +8492,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals5{ dir = 1 }, +/obj/effect/landmark/vermin, /turf/simulated/floor/tiled, /area/stellardelight/deck3/aft) "Fg" = ( @@ -9342,9 +9360,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/obj/effect/landmark{ - name = "vinestart" - }, +/obj/effect/landmark/vines, /turf/simulated/open, /area/stellardelight/deck2/fore) "IG" = ( @@ -10272,9 +10288,7 @@ dir = 4; pixel_x = 27 }, -/obj/effect/landmark{ - name = "vinestart" - }, +/obj/effect/landmark/vines, /turf/simulated/floor/tiled, /area/stellardelight/deck3/starboarddock) "LR" = ( @@ -10456,9 +10470,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/obj/effect/landmark{ - name = "vinestart" - }, +/obj/effect/landmark/vines, /turf/simulated/open, /area/stellardelight/deck2/fore) "Mw" = ( @@ -10671,9 +10683,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/obj/effect/landmark{ - name = "vinestart" - }, +/obj/effect/landmark/vines, /turf/simulated/open, /area/stellardelight/deck2/port) "Ne" = ( @@ -11319,9 +11329,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/obj/effect/landmark{ - name = "vinestart" - }, +/obj/effect/landmark/vines, /turf/simulated/open, /area/stellardelight/deck2/starboard) "Pa" = ( @@ -12580,6 +12588,7 @@ /area/ai_server_room) "TO" = ( /obj/machinery/atmospherics/unary/vent_pump/on, +/obj/effect/landmark/vermin, /turf/simulated/floor/tiled/monotile, /area/stellardelight/deck3/commandhall) "TP" = ( @@ -12856,9 +12865,7 @@ dir = 8; pixel_x = -27 }, -/obj/effect/landmark{ - name = "vinestart" - }, +/obj/effect/landmark/vines, /turf/simulated/floor/tiled, /area/stellardelight/deck3/portdock) "UX" = ( @@ -13483,6 +13490,7 @@ /obj/structure/cable/green{ icon_state = "1-2" }, +/obj/effect/landmark/vermin, /turf/simulated/open, /area/crew_quarters/bar) "Xd" = ( @@ -16918,7 +16926,7 @@ Jh Jh Jh Jh -Jh +El Jh Jh Jh @@ -17451,7 +17459,7 @@ Jh Jh Jh Jh -Jh +El Jh Jh Jh @@ -18322,7 +18330,7 @@ Jh Jh Jh Jh -Jh +El Jh Jh Jh @@ -18386,6 +18394,7 @@ Jh Jh Jh Jh +El Jh Jh Jh @@ -18421,8 +18430,7 @@ Jh Jh Jh Jh -Jh -Jh +El Jh Jh Jh @@ -19160,7 +19168,7 @@ Jh Jh Jh Jh -Jh +zk Jh Jh Jh @@ -19256,7 +19264,7 @@ Jh Jh Jh Jh -Jh +El Jh Jh Jh @@ -19630,7 +19638,7 @@ NL NL Jh Jh -Jh +zk Jh Jh Jh @@ -20416,7 +20424,7 @@ Jh Jh Jh Jh -Jh +El Jh Jh Jh @@ -21473,7 +21481,7 @@ NL Jh Jh Jh -Jh +El Jh Jh Jh @@ -21906,7 +21914,7 @@ Jh Jh Jh Jh -Jh +El Jh Jh Jh @@ -22209,7 +22217,7 @@ Jh Jh Jh Jh -Jh +El Jh Jh Jh @@ -25669,7 +25677,7 @@ qF hC aJ ow -ZC +wc ow yP Ks @@ -27153,7 +27161,7 @@ NL Jh Jh Jh -Jh +El Jh Jh Jh @@ -27720,7 +27728,7 @@ NL NL Jh Jh -Jh +zk Jh Jh Jh @@ -27941,7 +27949,7 @@ Jh Jh Jh Jh -Jh +El Jh Jh Jh @@ -28204,7 +28212,7 @@ Jh Jh Jh Jh -Jh +zk Jh Jh Jh @@ -28683,7 +28691,7 @@ Jh Jh Jh Jh -Jh +zk Jh Jh Jh @@ -29192,7 +29200,7 @@ Jh Jh Jh Jh -Jh +El Jh Jh Jh @@ -29926,6 +29934,7 @@ Jh Jh Jh Jh +El Jh Jh Jh @@ -29972,8 +29981,7 @@ Jh Jh Jh Jh -Jh -Jh +El Jh Jh Jh @@ -30022,6 +30030,7 @@ Jh Jh Jh Jh +El Jh Jh Jh @@ -30138,8 +30147,7 @@ Jh Jh Jh Jh -Jh -Jh +El Jh Jh Jh @@ -30670,7 +30678,7 @@ Jh Jh Jh Jh -Jh +El Jh Jh Jh diff --git a/vorestation.dme b/vorestation.dme index 44411ac86ae..1b67797a293 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -2193,6 +2193,7 @@ #include "code\modules\events\ian_storm_vr.dm" #include "code\modules\events\infestation.dm" #include "code\modules\events\ion_storm.dm" +#include "code\modules\events\jellyfish_migration.dm" #include "code\modules\events\maintenance_predator_vr.dm" #include "code\modules\events\meteor_strike_vr.dm" #include "code\modules\events\meteors.dm" From 3c20e7172c59186a714d039602f0f40bab62fad8 Mon Sep 17 00:00:00 2001 From: Anthony Rodriguez Date: Wed, 17 Nov 2021 21:37:42 -0800 Subject: [PATCH 014/172] Whoops removed bleb landmark proc --- code/game/objects/effects/landmarks.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index 93f4319d5ee..7ff7638995f 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -61,6 +61,10 @@ prisonsecuritywarp += loc delete_me = 1 return + if("blobstart") + blobstart += loc + delete_me = 1 + return if("xeno_spawn") xeno_spawn += loc delete_me = 1 From 4924592b91ab8d12e0b2c2429025ca7ddd1ad535 Mon Sep 17 00:00:00 2001 From: Casey Date: Thu, 18 Nov 2021 01:03:38 -0500 Subject: [PATCH 015/172] Update code/modules/vore/eating/vorepanel_vr.dm Co-authored-by: Aronai Sieyes --- code/modules/vore/eating/vorepanel_vr.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index 73e2601d138..5ac97d74aff 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -304,7 +304,7 @@ return set_attr(usr, params) if("saveprefs") - if(host.real_name != host.client.prefs.real_name || !ishuman(host) && !issilicon(host)) + if(host.real_name != host.client.prefs.real_name || (!ishuman(host) && !issilicon(host))) var/choice = tgui_alert(usr, "Warning: Saving your vore panel while playing what is very-likely not your normal character will overwrite whatever character you have loaded in character setup. Maybe this is your 'playing a simple mob' slot, though. Are you SURE you want to overwrite your current slot with these vore bellies?", "WARNING!", list("No, abort!", "Yes, save.")) if(choice != "Yes, save.") return TRUE From 8b05c6cc159ff840218d7112a5f034e575a271dd Mon Sep 17 00:00:00 2001 From: Hatterhat Date: Thu, 18 Nov 2021 00:48:21 -0600 Subject: [PATCH 016/172] bruh --- code/modules/clothing/spacesuits/rig/rig.dm | 6 +++--- .../clothing/spacesuits/rig/rig_tgui.dm | 4 ++++ tgui/packages/tgui/interfaces/RIGSuit.js | 20 ++++++++++++++----- tgui/public/tgui.bundle.js | 2 +- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index a749d6824d8..52922098076 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -183,7 +183,7 @@ . += "The access panel is [locked? "locked" : "unlocked"]." . += "The maintenance panel is [open ? "open" : "closed"]." . += "Hardsuit systems are [offline ? "offline" : "online"]." - . += "The cooling stystem is [cooling_on ? "active" : "inactive"]." + . += "The cooling system is [cooling_on ? "active" : "inactive"]." if(open) . += "It's equipped with [english_list(installed_modules)]." @@ -414,10 +414,10 @@ if(!cell) return if(cell.charge <= 0) - to_chat(user, "\The [src] has no power!.") + to_chat(user, "\The [src] has no power!") return if(!suit_is_deployed()) - to_chat(user, "The hardsuit needs to be deployed first!.") + to_chat(user, "The hardsuit needs to be deployed first!") return cooling_on = 1 diff --git a/code/modules/clothing/spacesuits/rig/rig_tgui.dm b/code/modules/clothing/spacesuits/rig/rig_tgui.dm index 0a493264e59..66c7266d3dd 100644 --- a/code/modules/clothing/spacesuits/rig/rig_tgui.dm +++ b/code/modules/clothing/spacesuits/rig/rig_tgui.dm @@ -51,6 +51,7 @@ else data["ai"] = FALSE + data["cooling"] = cooling_on data["sealed"] = !canremove data["sealing"] = sealing data["helmet"] = (helmet ? "[helmet.name]" : "None.") @@ -130,6 +131,9 @@ if("toggle_seals") toggle_seals(usr) . = TRUE + if("toggle_cooling") + toggle_cooling(usr) // cooling toggles have its own to_chats, tbf + . = TRUE if("toggle_ai_control") ai_override_enabled = !ai_override_enabled notify_ai("Synthetic suit control has been [ai_override_enabled ? "enabled" : "disabled"].") diff --git a/tgui/packages/tgui/interfaces/RIGSuit.js b/tgui/packages/tgui/interfaces/RIGSuit.js index 3b248a56a93..cc7ec9abe30 100644 --- a/tgui/packages/tgui/interfaces/RIGSuit.js +++ b/tgui/packages/tgui/interfaces/RIGSuit.js @@ -25,7 +25,7 @@ export const RIGSuit = (props, context) => { // Non-AI trying to control the hardsuit while it's AI control overridden override = -- HARDSUIT CONTROL OVERRIDDEN BY AI --; } - + return ( { const RIGSuitStatus = (props, context) => { const { act, data } = useBackend(context); - + const { // Power Bar chargestatus, @@ -57,6 +57,7 @@ const RIGSuitStatus = (props, context) => { // Suit Status sealing, sealed, + cooling, // Cover Locks emagged, securitycheck, @@ -77,6 +78,14 @@ const RIGSuitStatus = (props, context) => { onClick={() => act("toggle_seals")} /> ); + const CoolingButton = ( +