From ca98c642c7236cfb9e64ae64f05477328916cffb Mon Sep 17 00:00:00 2001 From: Heroman Date: Tue, 9 Nov 2021 05:50:16 +1000 Subject: [PATCH 01/30] 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 f3680e13e7..0228a4c87b 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 abf4f89b37..5b137957db 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 8e87f8d71d..51ec3d82e6 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 6c2e0d9b71..bcaad4e693 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 c909c29fc5..34f4146159 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 cfa809b2af..097ee924e9 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 efb58fe90c..abd16b2279 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 952af8014b..da16f25173 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 1ddc24bfc9..8de9abd0b3 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 02/30] 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 eebcb40214..73e2601d13 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 03/30] 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 2e4d9d84cf..0af166fe23 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 8e654cff43..dc9aee617d 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 f2675a0ede..2575873aae 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 13f853dd3c..a8668e561a 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 f6ac58b1e4..b7e9f37552 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 a8d4b92a3c..33c2c477ed 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 6e229e1b48..f61d4744c4 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 e09cc50d2f..311003a05e 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 a9581341c5..3ff2cf6b7b 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 8e3ac822f6..fdcba1a49a 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 3b6e851daf..9e8f0004d4 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 48a8963e36..3b23df5507 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 735d70f728d1b1c8f3b13e63b3fb41fad0ef524f Mon Sep 17 00:00:00 2001 From: Hatterhat Date: Mon, 15 Nov 2021 20:25:06 -0600 Subject: [PATCH 04/30] 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 9a1b3871df..07c25a40ab 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 1c92c3e94e..00647f37f3 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 5c496fdc4f..bf55cdd788 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 6f1381a191..a7aa2f69a0 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 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 AO8@`> From 32f410acfd30c13e94a18ab75cea32337eb71b4a Mon Sep 17 00:00:00 2001 From: Hatterhat Date: Mon, 15 Nov 2021 20:28:01 -0600 Subject: [PATCH 05/30] 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 a7aa2f69a0..21110a459e 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 06/30] 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 0ea7871e30..bd2d3d2d01 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 c3ede024fdd6fa660d8e0c1ef6b9a55934e4decb Mon Sep 17 00:00:00 2001 From: Heroman Date: Wed, 17 Nov 2021 04:59:05 +1000 Subject: [PATCH 07/30] Fixes teshari not having soft landing --- code/modules/mob/living/carbon/human/species/station/teshari.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/mob/living/carbon/human/species/station/teshari.dm b/code/modules/mob/living/carbon/human/species/station/teshari.dm index cd4bc0b1e9..6f24341889 100644 --- a/code/modules/mob/living/carbon/human/species/station/teshari.dm +++ b/code/modules/mob/living/carbon/human/species/station/teshari.dm @@ -55,6 +55,7 @@ gluttonous = 1 blood_volume = 400 hunger_factor = 0.2 + soft_landing = TRUE ambiguous_genders = TRUE 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 08/30] 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 cdc4314c6c..e6ea3ad1e4 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 bd2d3d2d01..0bfafac81f 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 ee75074cc7..1d85c67f5d 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 09/30] 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 e6ea3ad1e4..09e1ccbe9e 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 0bfafac81f..62a2af0f78 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 c2dada040f402f8d57a44de2c1df132e78477728 Mon Sep 17 00:00:00 2001 From: Heroman Date: Wed, 17 Nov 2021 15:41:36 +1000 Subject: [PATCH 10/30] Fixes bugs related to weaversilk structures --- code/modules/ai/ai_holder_combat.dm | 9 +++++++-- .../human/species/station/traits_vr/weaver_objs.dm | 6 ++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/code/modules/ai/ai_holder_combat.dm b/code/modules/ai/ai_holder_combat.dm index 29c58e5670..e21d8de5b2 100644 --- a/code/modules/ai/ai_holder_combat.dm +++ b/code/modules/ai/ai_holder_combat.dm @@ -310,15 +310,20 @@ // Kill common obstacle in the way like tables. var/obj/structure/obstacle = locate(/obj/structure, problem_turf) - if(istype(obstacle, /obj/structure/window) || istype(obstacle, /obj/structure/closet) || istype(obstacle, /obj/structure/table) || istype(obstacle, /obj/structure/grille) || istype(obstacle, /obj/effect/weaversilk/wall)) //VOREStation Edit: spdr + if(istype(obstacle, /obj/structure/window) || istype(obstacle, /obj/structure/closet) || istype(obstacle, /obj/structure/table) || istype(obstacle, /obj/structure/grille)) ai_log("destroy_surroundings() : Attacking generic structure.", AI_LOG_INFO) return melee_attack(obstacle) + var/obj/effect/weaversilk/web = locate(/obj/effect/weaversilk, problem_turf) + if(istype(web, /obj/effect/weaversilk/wall)) //VOREStation Edit: spdr + ai_log("destroy_surroundings() : Attacking weaversilk effect.", AI_LOG_INFO) + return melee_attack(web) + for(var/obj/machinery/door/D in problem_turf) // Required since firelocks take up the same turf. if(D.density) ai_log("destroy_surroundings() : Attacking closed door.", AI_LOG_INFO) return melee_attack(D) - + // Should always be last thing attempted if(!problem_turf.opacity) ai_log("destroy_surroundings() : Attacking a transparent (window?) turf.", AI_LOG_INFO) diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/weaver_objs.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/weaver_objs.dm index 45aeefc2b5..fef1206c66 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/weaver_objs.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/weaver_objs.dm @@ -89,6 +89,7 @@ desc = "A silky, yet firm trap. Be careful not to step into it! Or don't..." icon_state = "trap" var/trap_active = TRUE + can_buckle = TRUE /obj/effect/weaversilk/trap/Crossed(atom/movable/AM as mob|obj) if(AM.is_incorporeal()) @@ -106,17 +107,18 @@ "You hear a squishy noise!" ) set_dir(L.dir) - can_buckle = TRUE buckle_mob(L) L.Stun(1) to_chat(L, "The sticky fibers of \the [src] ensnare, trapping you in place!") trap_active = FALSE - can_buckle = initial(can_buckle) desc += " Actually, it looks like it's been all spent." ..() +/obj/effect/weaversilk/trap/MouseDrop_T(atom/movable/AM,mob/user) + return + // Items // TODO: Spidersilk clothing and actual bindings, once sprites are ready. From 34bf86a38c5d72df665d0e0510186370d45fc5bb Mon Sep 17 00:00:00 2001 From: Heroman Date: Thu, 18 Nov 2021 06:12:27 +1000 Subject: [PATCH 11/30] 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 6583b841b8..1a504065cc 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 12/30] 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 24a790b177..4ff8269251 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 06169e3a6b..f3be0775bf 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 121b0fac96..54d03f71a6 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 75fa807ad5..ca1b2d01c9 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 13/30] 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 7ff7638995..93f4319d5e 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 da406c8043..e436447109 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 8709577507..6ed3403aaf 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 d4fb6faa97..7f991b44fc 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 54ddd7bdba..c93911e777 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 e82fa420d4..7b429f9447 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 985518067b..d0d221d5fd 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 0000000000..7498539ae1 --- /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 353763ac02..7056bbc6aa 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 5ad6a31faa..8338ab1098 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 294faa22e8..629b2e2a2a 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 44411ac86a..1b67797a29 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 14/30] 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 93f4319d5e..7ff7638995 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 15/30] 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 73e2601d13..5ac97d74af 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 16/30] 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 a749d6824d..5292209807 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 0a493264e5..66c7266d3d 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 3b248a56a9..cc7ec9abe3 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 = ( +