From e004d1c4ec26e47627220ae283e12072b747d80c Mon Sep 17 00:00:00 2001 From: Atermonera Date: Mon, 1 Jan 2018 23:43:09 -0800 Subject: [PATCH 01/12] Weather app has atmospheric scan --- .../objects/items/devices/communicator/UI.dm | 21 +++++- .../items/devices/communicator/helper.dm | 27 ++++++++ nano/templates/communicator.tmpl | 66 ++++++++++++++++++- polaris.dme | 3 +- 4 files changed, 111 insertions(+), 6 deletions(-) create mode 100644 code/game/objects/items/devices/communicator/helper.dm diff --git a/code/game/objects/items/devices/communicator/UI.dm b/code/game/objects/items/devices/communicator/UI.dm index 77ce5b03c13..002146dd491 100644 --- a/code/game/objects/items/devices/communicator/UI.dm +++ b/code/game/objects/items/devices/communicator/UI.dm @@ -14,6 +14,7 @@ var/im_list_ui[0] //List of messages. var/weather[0] + var/injection = null var/modules_ui[0] //Home screen info. //First we add other 'local' communicators. @@ -70,8 +71,22 @@ //Weather reports. for(var/datum/planet/planet in planet_controller.planets) if(planet.weather_holder && planet.weather_holder.current_weather) - weather[++weather.len] = list("Planet" = planet.name, "Weather" = planet.weather_holder.current_weather.name, "Temperature" = (round(planet.weather_holder.temperature*1000)/1000),\ - "High" = planet.weather_holder.current_weather.temp_high, "Low" = planet.weather_holder.current_weather.temp_low, "Wind" = "[planet.weather_holder.wind_speed]|[dir2text(planet.weather_holder.wind_dir)]") + var/list/W = list( + "Planet" = planet.name, + "Time" = planet.current_time.show_time("hh:mm"), + "Weather" = planet.weather_holder.current_weather.name, + "Temperature" = planet.weather_holder.temperature, + "High" = planet.weather_holder.current_weather.temp_high, + "Low" = planet.weather_holder.current_weather.temp_low) + weather[++weather.len] = W +// world << "Temperature, unrounded: [planet.weather_holder.temperature]" +// world << "Temperature: [round(planet.weather_holder.temperature)]" +// world << "High, unrounded: [planet.weather_holder.current_weather.temp_high]" +// world << "High: [round(planet.weather_holder.current_weather.temp_high)]" +// world << "Low, unrounded: [planet.weather_holder.current_weather.temp_low]" +// world << "Low: [round(planet.weather_holder.current_weather.temp_low)]" + + injection = "
Test
" //Modules for homescreen. for(var/list/R in modules) @@ -98,6 +113,8 @@ data["homeScreen"] = modules_ui data["note"] = note // current notes data["weather"] = weather + data["aircontents"] = src.analyze_air() + data["injection"] = injection // update the ui if it exists, returns null if no ui is passed/found ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) diff --git a/code/game/objects/items/devices/communicator/helper.dm b/code/game/objects/items/devices/communicator/helper.dm new file mode 100644 index 00000000000..9c121112ac2 --- /dev/null +++ b/code/game/objects/items/devices/communicator/helper.dm @@ -0,0 +1,27 @@ +/obj/item/device/communicator/proc/analyze_air() + var/list/results = list() + var/turf/T = get_turf(src.loc) + if(!isnull(T)) + var/datum/gas_mixture/environment = T.return_air() + var/pressure = environment.return_pressure() + var/total_moles = environment.total_moles + if (total_moles) + var/o2_level = environment.gas["oxygen"]/total_moles + var/n2_level = environment.gas["nitrogen"]/total_moles + var/co2_level = environment.gas["carbon_dioxide"]/total_moles + var/phoron_level = environment.gas["phoron"]/total_moles + var/unknown_level = 1-(o2_level+n2_level+co2_level+phoron_level) + results = list( + "pressure" = "[round(pressure,0.1)]", + "nitrogen" = "[round(n2_level*100,0.1)]", + "oxygen" = "[round(o2_level*100,0.1)]", + "carbon_dioxide" = "[round(co2_level*100,0.1)]", + "phoron" = "[round(phoron_level*100,0.01)]", + "other" = "[round(unknown_level, 0.01)]", + "temp" = "[round(environment.temperature-T0C,0.1)]", + "reading" = 1 + ) + + if(isnull(results)) + results = list("reading" = 0) + return results \ No newline at end of file diff --git a/nano/templates/communicator.tmpl b/nano/templates/communicator.tmpl index 00f58378be5..9ce85c759c3 100644 --- a/nano/templates/communicator.tmpl +++ b/nano/templates/communicator.tmpl @@ -242,15 +242,75 @@ Used In File(s): code\game\objects\items\devices\communicator\communicator.dm
{{:helper.link('Home', 'home', {'switch_tab' : 1})}}

+

Curren Conditions:

+
+ {{if data.aircontents.reading == 1}} +
+ Pressure: +
+
+ {{:helper.string('{1} kPa', data.aircontents.pressure < 80 || data.aircontents.pressure > 120 ? 'bad' : data.aircontents.pressure < 95 || data.aircontents.pressure > 110 ? 'average' : 'good' , data.aircontents.pressure)}} +
+
+ Temperature: +
+
+ {{:helper.string('{1} °C', data.aircontents.temp < 5 || data.aircontents.temp > 35 ? 'bad' : data.aircontents.temp < 15 || data.aircontents.temp > 25 ? 'average' : 'good' , data.aircontents.temp)}} +
+
+
+ Oxygen: +
+
+ {{:helper.string('{1}%', data.aircontents.oxygen < 17 ? 'bad' : data.aircontents.oxygen < 19 ? 'average' : 'good' , data.aircontents.oxygen)}} +
+
+ Nitrogen: +
+
+ {{:helper.string('{1}%', data.aircontents.nitrogen > 82 ? 'bad' : data.aircontents.nitrogen > 80 ? 'average' : 'good' , data.aircontents.nitrogen)}} +
+ {{if data.aircontents.carbon_dioxide > 0}} +
+ Carbon Dioxide: +
+
+ {{:helper.string('{1}%', data.aircontents.carbon_dioxide > 5 ? 'bad' : 'good' , data.aircontents.carbon_dioxide)}} +
+ {{/if}} + {{if data.aircontents.phoron > 0}} +
+ Phoron: +
+
+ {{:helper.string('{1}%', data.aircontents.phoron > 0 ? 'bad' : 'good' , data.aircontents.phoron)}} +
+ {{/if}} + {{if data.aircontents.other > 0}} +
+ Unknown: +
+
+ {{:data.aircontents.other}}% +
+ {{/if}} + {{else}} +
+ Unable to get air reading +
+ {{/if}} +
+ +

Weather Reports:

{{for data.weather}}
{{:value.Planet}}:
- Weather: {{:value.Weather}}, {{:value.Temperature - 273.15}}℃
- High: {{:value.High - 273.15}}℃ | Low: {{:value.Low - 273.15}}℃
- Wind: {{:value.Wind}} + Time: {{:value.Time}}
+ Weather: {{:value.Weather}}, {{:value.Temperature - 273.15}}°C
+ High: {{:value.High - 273.15}}°C | Low: {{:value.Low - 273.15}}°C
{{empty}} diff --git a/polaris.dme b/polaris.dme index 1559089da36..6efde5d1c9b 100644 --- a/polaris.dme +++ b/polaris.dme @@ -851,6 +851,7 @@ #include "code\game\objects\items\devices\whistle.dm" #include "code\game\objects\items\devices\communicator\cartridge.dm" #include "code\game\objects\items\devices\communicator\communicator.dm" +#include "code\game\objects\items\devices\communicator\helper.dm" #include "code\game\objects\items\devices\communicator\integrated.dm" #include "code\game\objects\items\devices\communicator\messaging.dm" #include "code\game\objects\items\devices\communicator\phone.dm" @@ -2371,7 +2372,7 @@ #include "code\ZAS\Zone.dm" #include "interface\interface.dm" #include "interface\skin.dmf" -#include "maps\southern_cross\southern_cross.dm" +#include "maps\northern_star\northern_star.dm" #include "maps\submaps\_readme.dm" #include "maps\submaps\cave_submaps\cave.dm" #include "maps\submaps\cave_submaps\cave_areas.dm" From d54830c253c7f2db8daaced2a6ee81dc58b34272 Mon Sep 17 00:00:00 2001 From: Atermonera Date: Mon, 1 Jan 2018 23:45:47 -0800 Subject: [PATCH 02/12] Didn't save a file --- nano/templates/communicator.tmpl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nano/templates/communicator.tmpl b/nano/templates/communicator.tmpl index 9ce85c759c3..cccee18182b 100644 --- a/nano/templates/communicator.tmpl +++ b/nano/templates/communicator.tmpl @@ -309,8 +309,8 @@ Used In File(s): code\game\objects\items\devices\communicator\communicator.dm
Time: {{:value.Time}}
- Weather: {{:value.Weather}}, {{:value.Temperature - 273.15}}°C
- High: {{:value.High - 273.15}}°C | Low: {{:value.Low - 273.15}}°C + Weather: {{:value.Weather}}, {{:value.Temperature}}°C
+ High: {{:value.High}}°C | Low: {{:value.Low}}°C
{{empty}} From 4906d5ca83377489bd1164c762df0086b443ba46 Mon Sep 17 00:00:00 2001 From: Leshana Date: Thu, 4 Jan 2018 20:52:35 -0500 Subject: [PATCH 03/12] Fix exploit allowing choosing unlimited languages on character setup. * Checks list length after input() returns so you can't cheese it. * Sanitizes list to proper length so existing characters over the limit will be fixed. --- code/modules/client/preference_setup/general/02_language.dm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/modules/client/preference_setup/general/02_language.dm b/code/modules/client/preference_setup/general/02_language.dm index d42449ab84d..22c8fd1267a 100644 --- a/code/modules/client/preference_setup/general/02_language.dm +++ b/code/modules/client/preference_setup/general/02_language.dm @@ -12,6 +12,10 @@ /datum/category_item/player_setup_item/general/language/sanitize_character() if(!islist(pref.alternate_languages)) pref.alternate_languages = list() + if(pref.species) + var/datum/species/S = all_species[pref.species] + if(S && pref.alternate_languages.len > S.num_alternate_languages) + pref.alternate_languages.len = S.num_alternate_languages // Truncate to allowed length if(isnull(pref.language_prefixes) || !pref.language_prefixes.len) pref.language_prefixes = config.language_prefixes.Copy() @@ -61,7 +65,7 @@ alert(user, "There are no additional languages available to select.") else var/new_lang = input(user, "Select an additional language", "Character Generation", null) as null|anything in available_languages - if(new_lang) + if(new_lang && pref.alternate_languages.len < S.num_alternate_languages) pref.alternate_languages |= new_lang return TOPIC_REFRESH From 42a421e8e18e972110476f689dcc1b3bf692fae3 Mon Sep 17 00:00:00 2001 From: Neerti Date: Mon, 1 Jan 2018 18:52:32 -0500 Subject: [PATCH 04/12] Adds Bonfires --- code/game/objects/items.dm | 4 + .../objects/items/weapons/cigs_lighters.dm | 14 +- code/game/objects/items/weapons/tools.dm | 3 + code/game/objects/structures/bonfire.dm | 238 ++++++++++++++++++ code/game/objects/structures/flora.dm | 30 ++- code/modules/assembly/igniter.dm | 5 +- code/modules/materials/material_recipes.dm | 3 +- code/modules/materials/material_sheets.dm | 1 + code/modules/materials/materials.dm | 5 +- .../mob/living/carbon/human/update_icons.dm | 2 +- code/modules/mob/living/life.dm | 2 +- icons/obj/flora/sifflora.dmi | Bin 0 -> 3490 bytes icons/obj/structures.dmi | Bin 91484 -> 95775 bytes polaris.dme | 3 +- 14 files changed, 290 insertions(+), 20 deletions(-) create mode 100644 code/game/objects/structures/bonfire.dm create mode 100644 icons/obj/flora/sifflora.dmi diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index bd3eb7fe31f..71e5170852f 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -650,3 +650,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. if(AStar(get_turf(us), get_turf(them), /turf/proc/AdjacentTurfsRangedSting, /turf/proc/Distance, max_nodes=25, max_node_depth=range)) return TRUE return FALSE + +// Check if an object should ignite others, like a lit lighter or candle. +/obj/item/proc/is_hot() + return FALSE \ No newline at end of file diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index 48ab1df6bbc..c8d4eed3adf 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -16,16 +16,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM /obj/item/weapon/flame var/lit = 0 -/proc/isflamesource(A) - if(istype(A, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/WT = A - return (WT.isOn()) - else if(istype(A, /obj/item/weapon/flame)) - var/obj/item/weapon/flame/F = A - return (F.lit) - else if(istype(A, /obj/item/device/assembly/igniter)) - return 1 - return 0 +/obj/item/weapon/flame/is_hot() + return lit /////////// //MATCHES// @@ -237,7 +229,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM /obj/item/clothing/mask/smokable/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() - if(isflamesource(W)) + if(W.is_hot()) var/text = matchmes if(istype(W, /obj/item/weapon/flame/match)) text = matchmes diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 045f910190a..f1619d40531 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -586,6 +586,9 @@ user.disabilities &= ~NEARSIGHTED return +/obj/item/weapon/weldingtool/is_hot() + return isOn() + /obj/item/weapon/weldingtool/largetank name = "industrial welding tool" desc = "A slightly larger welder with a larger tank." diff --git a/code/game/objects/structures/bonfire.dm b/code/game/objects/structures/bonfire.dm new file mode 100644 index 00000000000..339c93385d8 --- /dev/null +++ b/code/game/objects/structures/bonfire.dm @@ -0,0 +1,238 @@ +/obj/structure/bonfire + name = "bonfire" + desc = "For grilling, broiling, charring, smoking, heating, roasting, toasting, simmering, searing, melting, and occasionally burning things." + icon = 'icons/obj/structures.dmi' + icon_state = "bonfire" + density = FALSE + anchored = TRUE + buckle_lying = FALSE + var/burning = FALSE + var/next_fuel_consumption = 0 // world.time of when next item in fuel list gets eatten to sustain the fire. + var/grill = FALSE + var/material/material + +/obj/structure/bonfire/New(newloc, material_name) + ..(newloc) + if(!material_name) + material_name = "wood" + material = get_material_by_name("[material_name]") + if(!material) + qdel(src) + return + color = material.icon_colour + +// Blue wood. +/obj/structure/bonfire/sifwood/New(newloc, material_name) + ..(newloc, "alien wood") + +/obj/structure/bonfire/permanent/New(newloc, material_name) + ..() + ignite() + +/obj/structure/bonfire/permanent/sifwood/New(newloc, material_name) + ..(newloc, "alien wood") + +/obj/structure/bonfire/attackby(obj/item/W, mob/user) + if(istype(W, /obj/item/stack/rods) && !can_buckle && !grill) + var/obj/item/stack/rods/R = W + var/choice = input(user, "What would you like to construct?", "Bonfire") as null|anything in list("Stake","Grill") + switch(choice) + if("Stake") + R.use(1) + can_buckle = TRUE + buckle_require_restraints = TRUE + to_chat(user, "You add a rod to \the [src].") + var/mutable_appearance/rod_underlay = mutable_appearance('icons/obj/structures.dmi', "bonfire_rod") + rod_underlay.pixel_y = 16 + rod_underlay.appearance_flags = RESET_COLOR|PIXEL_SCALE|TILE_BOUND + underlays += rod_underlay + if("Grill") + R.use(1) + grill = TRUE + to_chat(user, "You add a grill to \the [src].") + update_icon() + else + return ..() + + else if(istype(W, /obj/item/stack/material/wood) || istype(W, /obj/item/stack/material/log) ) + add_fuel(W, user) + + else if(W.is_hot()) + ignite() + else + return ..() + +/obj/structure/bonfire/attack_hand(mob/user) + if(buckled_mob) + return ..() + + if(get_fuel_amount()) + remove_fuel(user) + else + dismantle(user) + + +/obj/structure/bonfire/proc/dismantle(mob/user) + if(!burning) + user.visible_message("[user] starts dismantling \the [src].", "You start dismantling \the [src].") + if(do_after(user, 5 SECONDS)) + for(var/i = 1 to 5) + material.place_dismantled_product(get_turf(src)) + user.visible_message("[user] dismantles down \the [src].", "You dismantle \the [src].") + qdel(src) + else + to_chat(user, "\The [src] is still burning. Extinguish it first if you want to dismantle it.") + +/obj/structure/bonfire/proc/get_fuel_amount() + var/F = 0 + for(var/A in contents) + if(istype(A, /obj/item/stack/material/wood)) + F += 0.5 + if(istype(A, /obj/item/stack/material/log)) + F += 1.0 + return F + +/obj/structure/bonfire/permanent/get_fuel_amount() + return 10 + +/obj/structure/bonfire/proc/remove_fuel(mob/user) + if(get_fuel_amount()) + var/atom/movable/AM = pop(contents) + AM.forceMove(get_turf(src)) + to_chat(user, "You take \the [AM] out of \the [src] before it has a chance to burn away.") + update_icon() + +/obj/structure/bonfire/permanent/remove_fuel(mob/user) + dismantle(user) + +/obj/structure/bonfire/proc/add_fuel(atom/movable/new_fuel, mob/user) + if(get_fuel_amount() >= 10) + to_chat(user, "\The [src] already has enough fuel!") + return FALSE + if(istype(new_fuel, /obj/item/stack/material/wood) || istype(new_fuel, /obj/item/stack/material/log) ) + var/obj/item/stack/F = new_fuel + var/obj/item/stack/S = F.split(1) + if(S) + S.forceMove(src) + to_chat(user, "You add \the [new_fuel] to \the [src].") + update_icon() + return TRUE + return FALSE + else + to_chat(user, "\The [src] needs raw wood to burn, \a [new_fuel] won't work.") + return FALSE + +/obj/structure/bonfire/permanent/add_fuel(mob/user) + to_chat(user, "\The [src] has plenty of fuel and doesn't need more fuel.") + +/obj/structure/bonfire/proc/consume_fuel(var/obj/item/stack/consumed_fuel) + if(!istype(consumed_fuel)) + qdel(consumed_fuel) // Don't know, don't care. + return FALSE + + if(istype(consumed_fuel, /obj/item/stack/material/log)) + next_fuel_consumption = world.time + 2 MINUTES + qdel(consumed_fuel) + update_icon() + return TRUE + + else if(istype(consumed_fuel, /obj/item/stack/material/wood)) // One log makes two planks of wood. + next_fuel_consumption = world.time + 1 MINUTE + qdel(consumed_fuel) + update_icon() + return TRUE + return FALSE + +/obj/structure/bonfire/permanent/consume_fuel() + return TRUE + +/obj/structure/bonfire/proc/check_oxygen() + var/datum/gas_mixture/G = loc.return_air() + if(G.gas["oxygen"] < 1) + return FALSE + return TRUE + + +/obj/structure/bonfire/proc/extinguish() + if(burning) + burning = FALSE + update_icon() + processing_objects -= src + visible_message("\The [src] stops burning.") + +/obj/structure/bonfire/proc/ignite() + if(!burning && get_fuel_amount()) + burning = TRUE + update_icon() + processing_objects += src + visible_message("\The [src] starts burning!") + +/obj/structure/bonfire/proc/burn() + var/turf/current_location = get_turf(src) + current_location.hotspot_expose(1000, 500) + for(var/A in current_location) + if(A == src) + continue + if(isobj(A)) + var/obj/O = A + O.fire_act(null, 1000, 500) + else if(isliving(A) && get_fuel_amount() > 4) + var/mob/living/L = A + L.adjust_fire_stacks(get_fuel_amount() / 4) + L.IgniteMob() + +/obj/structure/bonfire/update_icon() + overlays.Cut() + if(burning) + var/state + switch(get_fuel_amount()) + if(0 to 4) + state = "bonfire_warm" + if(5 to 10) + state = "bonfire_hot" + var/image/I = image(icon, state) + I.appearance_flags = RESET_COLOR + overlays += I + + if(buckled_mob && get_fuel_amount() >= 5) + I = image(icon, "bonfire_intense") + I.pixel_y = 13 + I.layer = MOB_LAYER + 0.1 + I.appearance_flags = RESET_COLOR + overlays += I + + var/light_strength = max(get_fuel_amount() / 2, 2) + set_light(light_strength, light_strength, "#FF9933") + else + set_light(0) + + if(grill) + var/image/grille_image = image(icon, "bonfire_grill") + grille_image.appearance_flags = RESET_COLOR + overlays += grille_image + + +/obj/structure/bonfire/process() + if(!check_oxygen()) + extinguish() + return + if(world.time >= next_fuel_consumption) + if(!consume_fuel(pop(contents))) + extinguish() + return + if(!grill) + burn() + +/obj/structure/bonfire/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) + ignite() + +/obj/structure/bonfire/water_act(amount) + if(prob(amount * 10)) + extinguish() + +/obj/structure/bonfire/post_buckle_mob(mob/living/M) + if(buckled_mob) // Just buckled someone + M.pixel_y += 13 + else // Just unbuckled someone + M.pixel_y -= 13 + update_icon() \ No newline at end of file diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index e8fe1d4b3e7..e583085513b 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -196,7 +196,9 @@ name = "unusual potted plant" desc = "This is an unusual plant. It's bulbous ends emit a soft blue light." icon_state = "plant-09" - set_light(l_range = 1, l_power = 0.5, l_color = "#0000FF") + light_range = 2 + light_power = 1 + light_color = "#33CCFF" /obj/structure/flora/pottedplant/orientaltree name = "potted oriental tree" @@ -252,7 +254,9 @@ name = "subterranean potted plant" desc = "This is a subterranean plant. It's bulbous ends glow faintly." icon_state = "plant-20" - set_light(l_range = 1, l_power = 0.5, l_color = "#FF6633") + light_range = 2 + light_power = 1 + light_color = "#FF6633" /obj/structure/flora/pottedplant/minitree name = "potted tree" @@ -288,3 +292,25 @@ name = "small christmas tree" desc = "This is a tiny well lit decorative christmas tree." icon_state = "plant-xmas" + +/obj/structure/flora/sif + icon = 'icons/obj/flora/sifflora.dmi' + +/obj/structure/flora/sif/subterranean + name = "subterranean plant" + desc = "This is a subterranean plant. It's bulbous ends glow faintly." + icon_state = "glowplant" + light_range = 2 + light_power = 1 + light_color = "#FF6633" + +/obj/structure/flora/sif/subterranean/initialize() + icon_state = "[initial(icon_state)][rand(1,2)]" + +/obj/structure/flora/sif/eyes + name = "mysterious bulbs" + desc = "This is a mysterious looking plant. They kind of look like eyeballs. Creepy." + icon_state = "eyeplant" + +/obj/structure/flora/sif/eyes/initialize() + icon_state = "[initial(icon_state)][rand(1,3)]" \ No newline at end of file diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm index c7b0b619ba9..4c23f988cd9 100644 --- a/code/modules/assembly/igniter.dm +++ b/code/modules/assembly/igniter.dm @@ -34,4 +34,7 @@ /obj/item/device/assembly/igniter/attack_self(mob/user as mob) activate() add_fingerprint(user) - return \ No newline at end of file + return + +/obj/item/device/assembly/igniter/is_hot() + return TRUE \ No newline at end of file diff --git a/code/modules/materials/material_recipes.dm b/code/modules/materials/material_recipes.dm index ecc0f61d83d..ad6301f9854 100644 --- a/code/modules/materials/material_recipes.dm +++ b/code/modules/materials/material_recipes.dm @@ -140,7 +140,8 @@ recipes += new/datum/stack_recipe("coilgun stock", /obj/item/weapon/coilgun_assembly, 5) /material/wood/log/generate_recipes() - return // Feel free to add log-only recipes here later if desired. + recipes = list() + recipes += new/datum/stack_recipe("bonfire", /obj/structure/bonfire, 5, time = 50, supplied_material = "[name]") /material/cardboard/generate_recipes() ..() diff --git a/code/modules/materials/material_sheets.dm b/code/modules/materials/material_sheets.dm index f66d2425c6a..c662141fbdf 100644 --- a/code/modules/materials/material_sheets.dm +++ b/code/modules/materials/material_sheets.dm @@ -214,6 +214,7 @@ /obj/item/stack/material/log/sif name = "alien log" + default_type = "alien log" color = "#0099cc" /obj/item/stack/material/log/attackby(var/obj/item/W, var/mob/user) diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm index ebb6fc56f39..6ad4a6487df 100644 --- a/code/modules/materials/materials.dm +++ b/code/modules/materials/materials.dm @@ -697,13 +697,14 @@ var/list/name_to_material name = "log" icon_base = "log" stack_type = /obj/item/stack/material/log - sheet_singular_name = "log" - sheet_plural_name = "logs" + sheet_singular_name = null + sheet_plural_name = "pile" /material/wood/log/sif name = "alien log" icon_colour = "#0099cc" // Cyan-ish stack_origin_tech = list(TECH_MATERIAL = 2, TECH_BIO = 2) + stack_type = /obj/item/stack/material/log/sif /material/wood/holographic name = "holowood" diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 8f8974473a1..6bc3136a738 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -1258,7 +1258,7 @@ var/global/list/damage_icon_parts = list() /mob/living/carbon/human/update_fire(var/update_icons=1) overlays_standing[FIRE_LAYER] = null if(on_fire) - overlays_standing[FIRE_LAYER] = image("icon"='icons/mob/OnFire.dmi', "icon_state" = get_fire_icon_state(), "layer"=FIRE_LAYER) + overlays_standing[FIRE_LAYER] = image("icon"='icons/mob/OnFire.dmi', "icon_state" = get_fire_icon_state()) if(update_icons) update_icons() diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 29bb1680b4b..ee7ac035c62 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -202,7 +202,7 @@ return TRUE else if(on_fire) - set_light(light_range + 3, round(fire_stacks), l_color = "#FF9933") + set_light(min(round(fire_stacks), 3), round(fire_stacks), l_color = "#FF9933") return TRUE else diff --git a/icons/obj/flora/sifflora.dmi b/icons/obj/flora/sifflora.dmi new file mode 100644 index 0000000000000000000000000000000000000000..213f1f5a8d04987451ea66fae5722e3e7be90c4b GIT binary patch literal 3490 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 literal 0 HcmV?d00001 diff --git a/icons/obj/structures.dmi b/icons/obj/structures.dmi index 3b4604cdfd50ebacecdc37adb0dc5b89710ab0e1..d79ceab8c330d56fad415348d42693b9b30326a0 100644 GIT binary patch delta 17651 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 DsLSM5 delta 13326 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 diff --git a/polaris.dme b/polaris.dme index e7a9b0c3f51..f18acc7dbd2 100644 --- a/polaris.dme +++ b/polaris.dme @@ -1000,6 +1000,7 @@ #include "code\game\objects\structures\alien_props.dm" #include "code\game\objects\structures\barsign.dm" #include "code\game\objects\structures\bedsheet_bin.dm" +#include "code\game\objects\structures\bonfire.dm" #include "code\game\objects\structures\catwalk.dm" #include "code\game\objects\structures\coathanger.dm" #include "code\game\objects\structures\curtains.dm" @@ -2370,7 +2371,7 @@ #include "code\ZAS\Zone.dm" #include "interface\interface.dm" #include "interface\skin.dmf" -#include "maps\southern_cross\southern_cross.dm" +#include "maps\northern_star\northern_star.dm" #include "maps\submaps\_readme.dm" #include "maps\submaps\cave_submaps\cave.dm" #include "maps\submaps\cave_submaps\cave_areas.dm" From 504cb9dcb871f65dce1205348103240c6b931fdb Mon Sep 17 00:00:00 2001 From: Neerti Date: Fri, 5 Jan 2018 06:48:47 -0500 Subject: [PATCH 05/12] Adds Four New PoIs Three are glowy crystal themed ones for the caves. Last one contains the remains of a previous explorer. --- maps/submaps/cave_submaps/cave.dm | 31 +++++++++++++++++++++ maps/submaps/cave_submaps/cave_areas.dm | 14 +++++++++- maps/submaps/cave_submaps/crystal1.dmm | 15 ++++++++++ maps/submaps/cave_submaps/crystal2.dmm | 22 +++++++++++++++ maps/submaps/cave_submaps/crystal3.dmm | 26 +++++++++++++++++ maps/submaps/cave_submaps/lost_explorer.dmm | 17 +++++++++++ 6 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 maps/submaps/cave_submaps/crystal1.dmm create mode 100644 maps/submaps/cave_submaps/crystal2.dmm create mode 100644 maps/submaps/cave_submaps/crystal3.dmm create mode 100644 maps/submaps/cave_submaps/lost_explorer.dmm diff --git a/maps/submaps/cave_submaps/cave.dm b/maps/submaps/cave_submaps/cave.dm index 6bd373f88a9..0f0c55c507d 100644 --- a/maps/submaps/cave_submaps/cave.dm +++ b/maps/submaps/cave_submaps/cave.dm @@ -8,6 +8,10 @@ #include "Mineshaft1.dmm" #include "Scave1.dmm" #include "crashed_ufo.dmm" +#include "crystal1.dmm" +#include "crystal2.dmm" +#include "crystal3.dmm" +#include "lost_explorer.dmm" #endif /datum/map_template/cave @@ -46,8 +50,35 @@ mappath = 'maps/submaps/cave_submaps/Scave1.dmm' cost = 5 +/datum/map_template/cave/crystal1 + name = "Crystal Cave 1" + desc = "A small cave with glowing gems and diamonds." + mappath = 'maps/submaps/cave_submaps/crystal1.dmm' + cost = 5 + allow_duplicates = TRUE + +/datum/map_template/cave/crystal2 + name = "Crystal Cave 2" + desc = "A moderate sized cave with glowing gems and diamonds." + mappath = 'maps/submaps/cave_submaps/crystal2.dmm' + cost = 10 + allow_duplicates = TRUE + +/datum/map_template/cave/crystal2 + name = "Crystal Cave 3" + desc = "A large spiral of crystals with diamonds in the center." + mappath = 'maps/submaps/cave_submaps/crystal3.dmm' + cost = 15 + /datum/map_template/cave/crashed_ufo name = "Crashed UFO" desc = "A (formerly) flying saucer that is now embedded into the mountain, yet it still seems to be running..." mappath = 'maps/submaps/cave_submaps/crashed_ufo.dmm' cost = 40 + +/datum/map_template/cave/lost_explorer + name = "Lost Explorer" + desc = "The remains of an explorer who rotted away ages ago, and their equipment." + mappath = 'maps/submaps/cave_submaps/lost_explorer.dmm' + cost = 5 + allow_duplicates = TRUE \ No newline at end of file diff --git a/maps/submaps/cave_submaps/cave_areas.dm b/maps/submaps/cave_submaps/cave_areas.dm index 18153abdc3e..f516d46f3b5 100644 --- a/maps/submaps/cave_submaps/cave_areas.dm +++ b/maps/submaps/cave_submaps/cave_areas.dm @@ -19,4 +19,16 @@ /area/submap/cave/crashed_ufo name = "Crashed Alien Vessel" - requires_power = FALSE \ No newline at end of file + requires_power = FALSE + +/area/submap/cave/crystal1 + name = "Crystaline Cave" + +/area/submap/cave/crystal2 + name = "Crystaline Cave" + +/area/submap/cave/crystal3 + name = "Crystaline Cave" + +/area/submap/cave/lost_explorer + name = "Final Resting Place" \ No newline at end of file diff --git a/maps/submaps/cave_submaps/crystal1.dmm b/maps/submaps/cave_submaps/crystal1.dmm new file mode 100644 index 00000000000..c505feac223 --- /dev/null +++ b/maps/submaps/cave_submaps/crystal1.dmm @@ -0,0 +1,15 @@ +"a" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/cave/crystal1) +"b" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/crystal1) +"c" = (/obj/machinery/crystal,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/crystal1) +"d" = (/obj/item/weapon/ore/diamond,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/crystal1) + +(1,1,1) = {" +aaabbaaa +accbbcaa +acdbbdca +aacbbbda +aacbbbba +acbbbbba +abbbbbca +aaabbbaa +"} diff --git a/maps/submaps/cave_submaps/crystal2.dmm b/maps/submaps/cave_submaps/crystal2.dmm new file mode 100644 index 00000000000..6fd1e570584 --- /dev/null +++ b/maps/submaps/cave_submaps/crystal2.dmm @@ -0,0 +1,22 @@ +"a" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/cave/crystal2) +"b" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/crystal2) +"c" = (/obj/machinery/crystal,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/crystal2) +"d" = (/obj/item/weapon/ore/diamond,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/crystal2) + +(1,1,1) = {" +aaaaaaabbbaaaaa +aaaaaaabbbaaaaa +aaaaacbbbbcaaaa +aaaaabbbbbbcaaa +aaaacbbbbdbbaaa +aacbbbbbbbbbcaa +bbbbbdbacbbbbca +bbbbbbcaacbbbbb +aabbbcaaacbbdbb +aaabbcaacbbbbbb +aaabbbcacbbbcaa +aacbbbbbbbbcaaa +aaccabbbbaaaaaa +aaaaabbdbaaaaaa +aaaaabbbbaaaaaa +"} diff --git a/maps/submaps/cave_submaps/crystal3.dmm b/maps/submaps/cave_submaps/crystal3.dmm new file mode 100644 index 00000000000..87e0883e3a7 --- /dev/null +++ b/maps/submaps/cave_submaps/crystal3.dmm @@ -0,0 +1,26 @@ +"a" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/cave/crystal3) +"b" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/crystal3) +"c" = (/turf/template_noop,/area/template_noop) +"d" = (/obj/machinery/crystal,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/crystal3) +"e" = (/obj/item/weapon/ore/diamond,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/crystal3) + +(1,1,1) = {" +aaaaaaabbbaaaaacccc +aaaaabbbbbbbbaaaccc +aabbbbbbbbbbbbbaaac +bbbbbbaaaaadbbbbbac +bbbdaaaaaaaaaabbbac +bbbaaaaaaaaaaabbbac +bbbaaaadddaabbdbbac +bbbaaadebbdadbbbbac +bbbaadbbdedbbbbbbaa +bbbaadbdeedbbdbbbda +bbbaadbbddbbbbbbbbb +bbbaaadebbbbdbbbbbb +bbbaaaaddddbaadbbbb +bbbdaaaaaaaaaaabbba +bbbbdaaaaaaaadbbbaa +bbbbbbbbbbbbbbbbbaa +cccabbbbbbbbbbaaaaa +cccaaaaabbbbaaacccc +"} diff --git a/maps/submaps/cave_submaps/lost_explorer.dmm b/maps/submaps/cave_submaps/lost_explorer.dmm new file mode 100644 index 00000000000..4a067e40423 --- /dev/null +++ b/maps/submaps/cave_submaps/lost_explorer.dmm @@ -0,0 +1,17 @@ +"a" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/lost_explorer) +"b" = (/obj/item/device/geiger,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/lost_explorer) +"c" = (/obj/item/clothing/mask/gas/explorer,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/lost_explorer) +"d" = (/obj/item/weapon/material/hatchet/tacknife/survival,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/lost_explorer) +"e" = (/obj/item/clothing/shoes/boots/winter/explorer,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/lost_explorer) +"f" = (/obj/item/clothing/under/explorer,/obj/effect/decal/remains,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/lost_explorer) +"g" = (/obj/item/clothing/suit/storage/hooded/explorer,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/lost_explorer) +"h" = (/obj/item/device/gps/explorer,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/lost_explorer) +"i" = (/obj/item/device/flashlight/lantern,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/lost_explorer) + +(1,1,1) = {" +aabaa +acada +aefaa +aagah +iaaaa +"} From afaa89ff26fe38284fd7117e5429008dbfd19e64 Mon Sep 17 00:00:00 2001 From: Cameron653 Date: Sat, 6 Jan 2018 00:04:49 -0500 Subject: [PATCH 06/12] Makes alcohol have effects when injected. (#4471) * Makes alcohol have effects when injected into veins * Makes Ethyl work on it when in bloodstream. Should work this way. * No nutrition --- .../Chemistry-Reagents-Dispenser.dm | 42 +++++++++++++++++-- .../Chemistry-Reagents-Medicine.dm | 6 ++- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm index 51ba5d3782d..448077ccc53 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm @@ -80,10 +80,46 @@ if(istype(L)) L.adjust_fire_stacks(amount / 15) -/datum/reagent/ethanol/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) +/datum/reagent/ethanol/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) //This used to do just toxin. That's boring. Let's make this FUN. if(issmall(M)) removed *= 2 - M.adjustToxLoss(removed * 2 * toxicity) - return + var/strength_mod = 3 //Alcohol is 3x stronger when injected into the veins. + if(alien == IS_SKRELL) + strength_mod *= 5 + if(alien == IS_TAJARA) + strength_mod *= 1.25 + if(alien == IS_UNATHI) + strength_mod *= 0.75 + if(alien == IS_DIONA) + strength_mod = 0 + + M.add_chemical_effect(CE_ALCOHOL, 1) + + if(dose * strength_mod >= strength) // Early warning + M.make_dizzy(18) // It is decreased at the speed of 3 per tick + if(dose * strength_mod >= strength * 2) // Slurring + M.slurring = max(M.slurring, 90) + if(dose * strength_mod >= strength * 3) // Confusion - walking in random directions + M.Confuse(60) + if(dose * strength_mod >= strength * 4) // Blurry vision + M.eye_blurry = max(M.eye_blurry, 30) + if(dose * strength_mod >= strength * 5) // Drowsyness - periodically falling asleep + M.drowsyness = max(M.drowsyness, 60) + if(dose * strength_mod >= strength * 6) // Toxic dose + M.add_chemical_effect(CE_ALCOHOL_TOXIC, toxicity*3) + if(dose * strength_mod >= strength * 7) // Pass out + M.paralysis = max(M.paralysis, 60) + M.sleeping = max(M.sleeping, 90) + + if(druggy != 0) + M.druggy = max(M.druggy, druggy*3) + + if(adj_temp > 0 && M.bodytemperature < targ_temp) // 310 is the normal bodytemp. 310.055 + M.bodytemperature = min(targ_temp, M.bodytemperature + (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT)) + if(adj_temp < 0 && M.bodytemperature > targ_temp) + M.bodytemperature = min(targ_temp, M.bodytemperature - (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT)) + + if(halluci) + M.hallucination = max(M.hallucination, halluci*3) /datum/reagent/ethanol/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) if(issmall(M)) removed *= 2 diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm index 84639e1c393..fbca78e07da 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm @@ -462,6 +462,10 @@ for(var/datum/reagent/R in M.ingested.reagent_list) if(istype(R, /datum/reagent/ethanol)) R.dose = max(R.dose - removed * 5, 0) + if(M.bloodstr) + for(var/datum/reagent/R in M.bloodstr.reagent_list) + if(istype(R, /datum/reagent/ethanol)) + R.dose = max(R.dose - removed * 15, 0) /datum/reagent/hyronalin name = "Hyronalin" @@ -708,4 +712,4 @@ M.heal_organ_damage(2 * removed, 2 * removed) M.adjustOxyLoss(-4 * removed) M.adjustToxLoss(-2 * removed) - M.adjustCloneLoss(-2 * removed) \ No newline at end of file + M.adjustCloneLoss(-2 * removed) From 132e20ba521932b025370845812b8987d7ec037c Mon Sep 17 00:00:00 2001 From: Atermonera Date: Fri, 5 Jan 2018 23:04:51 -0800 Subject: [PATCH 07/12] Nanoui rounding --- code/game/objects/items/devices/communicator/UI.dm | 12 +++--------- nano/templates/communicator.tmpl | 4 ++-- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/code/game/objects/items/devices/communicator/UI.dm b/code/game/objects/items/devices/communicator/UI.dm index 002146dd491..3c8cf50f51b 100644 --- a/code/game/objects/items/devices/communicator/UI.dm +++ b/code/game/objects/items/devices/communicator/UI.dm @@ -75,16 +75,10 @@ "Planet" = planet.name, "Time" = planet.current_time.show_time("hh:mm"), "Weather" = planet.weather_holder.current_weather.name, - "Temperature" = planet.weather_holder.temperature, - "High" = planet.weather_holder.current_weather.temp_high, - "Low" = planet.weather_holder.current_weather.temp_low) + "Temperature" = planet.weather_holder.temperature - T0C, + "High" = planet.weather_holder.current_weather.temp_high - T0C, + "Low" = planet.weather_holder.current_weather.temp_low - T0C) weather[++weather.len] = W -// world << "Temperature, unrounded: [planet.weather_holder.temperature]" -// world << "Temperature: [round(planet.weather_holder.temperature)]" -// world << "High, unrounded: [planet.weather_holder.current_weather.temp_high]" -// world << "High: [round(planet.weather_holder.current_weather.temp_high)]" -// world << "Low, unrounded: [planet.weather_holder.current_weather.temp_low]" -// world << "Low: [round(planet.weather_holder.current_weather.temp_low)]" injection = "
Test
" diff --git a/nano/templates/communicator.tmpl b/nano/templates/communicator.tmpl index cccee18182b..63674d3752b 100644 --- a/nano/templates/communicator.tmpl +++ b/nano/templates/communicator.tmpl @@ -309,8 +309,8 @@ Used In File(s): code\game\objects\items\devices\communicator\communicator.dm
Time: {{:value.Time}}
- Weather: {{:value.Weather}}, {{:value.Temperature}}°C
- High: {{:value.High}}°C | Low: {{:value.Low}}°C + Weather: {{:value.Weather}}, {{:helper.fixed(value.Temperature)}}°C
+ High: {{:helper.fixed(value.High)}}°C | Low: {{:helper.fixed(value.Low)}}°C
{{empty}} From 224fe42e777e11a450d7c906381f64d4b07f2591 Mon Sep 17 00:00:00 2001 From: Leshana Date: Sat, 6 Jan 2018 11:52:56 -0500 Subject: [PATCH 08/12] Prepare Atmospherics Machinery for SSatoms (#4501) * to_chat() replacement. * Revert calling target.init_dir() before connecting. * This change was added in https://github.com/PolarisSS13/Polaris/pull/3775 to counteract `dir` not being set prior to New() for dynamically loaded maps. The root cause was /atom/New() not calling _preloader.load(). Undoing the change now that /atom/New() is fixed. * The addition of the init_dir() proc itself however, is useful, because there ARE other times some atmos machinery will want to re-initialize its dir, specifically whenever it is rotated. * init_dir() must be called in the constructor of all atmospherics machines capable of connecting to another. Since it has to happen for ALL machines, lets move that call to /obj/machinery/atmospherics/New() * Rename /obj/machinery/atmospherics initialize() to atmos_init() * These days `initialize()` is used to handle general object initialization that is moved outside of New(). The node connection discovery of atmos machinery needs to happen after all that, and so needs to be in a separate proc. * Make sure to actually call atmos_init during system startup. --- code/ATMOSPHERICS/atmospherics.dm | 18 +- .../binary_devices/binary_atmos_base.dm | 6 +- .../components/binary_devices/circulator.dm | 6 +- .../components/binary_devices/passive_gate.dm | 6 +- .../components/binary_devices/pipeturbine.dm | 12 +- .../components/binary_devices/pump.dm | 6 +- .../components/omni_devices/_omni_extras.dm | 4 +- .../components/omni_devices/omni_base.dm | 7 +- .../components/portables_connector.dm | 13 +- .../components/trinary_devices/filter.dm | 8 +- .../components/trinary_devices/mixer.dm | 8 +- .../trinary_devices/trinary_base.dm | 8 +- code/ATMOSPHERICS/components/tvalve.dm | 21 +- .../components/unary/cold_sink.dm | 3 +- .../components/unary/heat_exchanger.dm | 8 +- .../components/unary/heat_source.dm | 3 +- .../components/unary/unary_base.dm | 6 +- .../components/unary/vent_pump.dm | 12 +- .../components/unary/vent_scrubber.dm | 6 +- code/ATMOSPHERICS/components/valve.dm | 11 +- code/ATMOSPHERICS/he_pipes.dm | 7 - code/ATMOSPHERICS/mainspipe.dm | 16 +- code/ATMOSPHERICS/pipes.dm | 52 +--- code/controllers/master_controller.dm | 5 + code/game/atoms.dm | 6 + code/game/machinery/pipe/construction.dm | 271 +++++++++--------- .../circuitboards/machinery/unary_atmos.dm | 4 +- code/modules/maps/tg/map_template.dm | 2 +- 28 files changed, 238 insertions(+), 297 deletions(-) diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index ee24252a0c4..0502f2b8f8f 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -10,9 +10,6 @@ Pipelines + Other Objects -> Pipe network */ /obj/machinery/atmospherics - - auto_init = 0 - anchored = 1 idle_power_usage = 0 active_power_usage = 0 @@ -33,6 +30,7 @@ Pipelines + Other Objects -> Pipe network var/obj/machinery/atmospherics/node2 /obj/machinery/atmospherics/New() + ..() if(!icon_manager) icon_manager = new() @@ -42,7 +40,19 @@ Pipelines + Other Objects -> Pipe network if(!pipe_color_check(pipe_color)) pipe_color = null - ..() + init_dir() + +// This is used to set up what directions pipes will connect to. Should be called inside New() and whenever a dir changes. +/obj/machinery/atmospherics/proc/init_dir() + return + +// Initializes nodes by looking at neighboring atmospherics machinery to connect to. +// When we're being constructed at runtime, atmos_init() is called by the construction code. +// When dynamically loading a map atmos_init is called by the maploader (initTemplateBounds proc) +// But during initial world creation its called by the master_controller. +// TODO - Consolidate these different ways of being called once SSatoms is created. +/obj/machinery/atmospherics/proc/atmos_init() + return /obj/machinery/atmospherics/attackby(atom/A, mob/user as mob) if(istype(A, /obj/item/device/pipe_painter)) diff --git a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm index 4bbbf02b169..6e6662f39c1 100644 --- a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm +++ b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm @@ -57,24 +57,20 @@ node1 = null node2 = null -/obj/machinery/atmospherics/binary/initialize() +/obj/machinery/atmospherics/binary/atmos_init() if(node1 && node2) return - init_dir() - var/node2_connect = dir var/node1_connect = turn(dir, 180) for(var/obj/machinery/atmospherics/target in get_step(src,node1_connect)) - target.init_dir() if(target.initialize_directions & get_dir(target,src)) if (check_connect_types(target,src)) node1 = target break for(var/obj/machinery/atmospherics/target in get_step(src,node2_connect)) - target.init_dir() if(target.initialize_directions & get_dir(target,src)) if (check_connect_types(target,src)) node2 = target diff --git a/code/ATMOSPHERICS/components/binary_devices/circulator.dm b/code/ATMOSPHERICS/components/binary_devices/circulator.dm index 09335cdf33f..68ce37d0884 100644 --- a/code/ATMOSPHERICS/components/binary_devices/circulator.dm +++ b/code/ATMOSPHERICS/components/binary_devices/circulator.dm @@ -101,13 +101,13 @@ else if(dir & (EAST|WEST)) initialize_directions = EAST|WEST - initialize() + atmos_init() build_network() if (node1) - node1.initialize() + node1.atmos_init() node1.build_network() if (node2) - node2.initialize() + node2.atmos_init() node2.build_network() else if(node1) diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm index ceb192f9b00..4bce44e0b06 100644 --- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm +++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm @@ -166,7 +166,7 @@ return src.add_fingerprint(usr) if(!src.allowed(user)) - user << "Access denied." + to_chat(user, "Access denied.") return usr.set_machine(src) ui_interact(user) @@ -240,14 +240,14 @@ if (!istype(W, /obj/item/weapon/wrench)) return ..() if (unlocked) - user << "You cannot unwrench \the [src], turn it off first." + to_chat(user, "You cannot unwrench \the [src], turn it off first.") return 1 if(!can_unwrench()) to_chat(user, "You cannot unwrench \the [src], it too exerted due to internal pressure.") add_fingerprint(user) return 1 playsound(src, W.usesound, 50, 1) - user << "You begin to unfasten \the [src]..." + to_chat(user, "You begin to unfasten \the [src]...") if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ "\The [user] unfastens \the [src].", \ diff --git a/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm b/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm index 1b576e10425..b8c7883796e 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm @@ -87,7 +87,7 @@ if(istype(W, /obj/item/weapon/wrench)) anchored = !anchored playsound(src, W.usesound, 50, 1) - user << "You [anchored ? "secure" : "unsecure"] the bolts holding \the [src] to the floor." + to_chat(user, "You [anchored ? "secure" : "unsecure"] the bolts holding \the [src] to the floor.") if(anchored) if(dir & (NORTH|SOUTH)) @@ -95,13 +95,13 @@ else if(dir & (EAST|WEST)) initialize_directions = NORTH|SOUTH - initialize() + atmos_init() build_network() if (node1) - node1.initialize() + node1.atmos_init() node1.build_network() if (node2) - node2.initialize() + node2.atmos_init() node2.build_network() else if(node1) @@ -153,7 +153,7 @@ return null - initialize() + atmos_init() if(node1 && node2) return var/node2_connect = turn(dir, -90) @@ -260,7 +260,7 @@ anchored = !anchored playsound(src, W.usesound, 50, 1) turbine = null - user << "You [anchored ? "secure" : "unsecure"] the bolts holding \the [src] to the floor." + to_chat(user, "You [anchored ? "secure" : "unsecure"] the bolts holding \the [src] to the floor.") updateConnection() else ..() diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index 97abccdfadd..ac5a00e46c9 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -183,7 +183,7 @@ Thus, the two variables affect pump operation are set in New(): return src.add_fingerprint(usr) if(!src.allowed(user)) - user << "Access denied." + to_chat(user, "Access denied.") return usr.set_machine(src) ui_interact(user) @@ -219,14 +219,14 @@ Thus, the two variables affect pump operation are set in New(): if (!istype(W, /obj/item/weapon/wrench)) return ..() if (!(stat & NOPOWER) && use_power) - user << "You cannot unwrench this [src], turn it off first." + to_chat(user, "You cannot unwrench this [src], turn it off first.") return 1 if(!can_unwrench()) to_chat(user, "You cannot unwrench this [src], it too exerted due to internal pressure.") add_fingerprint(user) return 1 playsound(src, W.usesound, 50, 1) - user << "You begin to unfasten \the [src]..." + to_chat(user, "You begin to unfasten \the [src]...") if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ "\The [user] unfastens \the [src].", \ diff --git a/code/ATMOSPHERICS/components/omni_devices/_omni_extras.dm b/code/ATMOSPHERICS/components/omni_devices/_omni_extras.dm index a1913709246..fc25eae3b71 100644 --- a/code/ATMOSPHERICS/components/omni_devices/_omni_extras.dm +++ b/code/ATMOSPHERICS/components/omni_devices/_omni_extras.dm @@ -40,10 +40,10 @@ /datum/omni_port/proc/connect() if(node) return - master.initialize() + master.atmos_init() master.build_network() if(node) - node.initialize() + node.atmos_init() node.build_network() /datum/omni_port/proc/disconnect() diff --git a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm index 2ab891424cf..28dd3dc0228 100644 --- a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm +++ b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm @@ -86,7 +86,7 @@ to_chat(user, "You cannot unwrench \the [src], it is too exerted due to internal pressure.") add_fingerprint(user) return 1 - user << "You begin to unfasten \the [src]..." + to_chat(user, "You begin to unfasten \the [src]...") playsound(src, W.usesound, 50, 1) if(do_after(user, 40 * W.toolspeed)) user.visible_message( \ @@ -245,14 +245,13 @@ qdel(P.network) P.node = null - ..() + . = ..() -/obj/machinery/atmospherics/omni/initialize() +/obj/machinery/atmospherics/omni/atmos_init() for(var/datum/omni_port/P in ports) if(P.node || P.mode == 0) continue for(var/obj/machinery/atmospherics/target in get_step(src, P.dir)) - target.init_dir() if(target.initialize_directions & get_dir(target,src)) if (check_connect_types(target,src)) P.node = target diff --git a/code/ATMOSPHERICS/components/portables_connector.dm b/code/ATMOSPHERICS/components/portables_connector.dm index c1949f8a395..6911288c932 100644 --- a/code/ATMOSPHERICS/components/portables_connector.dm +++ b/code/ATMOSPHERICS/components/portables_connector.dm @@ -21,10 +21,6 @@ /obj/machinery/atmospherics/portables_connector/init_dir() initialize_directions = dir -/obj/machinery/atmospherics/portables_connector/New() - init_dir() - ..() - /obj/machinery/atmospherics/portables_connector/update_icon() icon_state = "connector" @@ -74,16 +70,13 @@ node = null -/obj/machinery/atmospherics/portables_connector/initialize() +/obj/machinery/atmospherics/portables_connector/atmos_init() if(node) return - init_dir() - var/node_connect = dir for(var/obj/machinery/atmospherics/target in get_step(src,node_connect)) - target.init_dir() if(target.initialize_directions & get_dir(target,src)) if (check_connect_types(target,src)) node = target @@ -138,7 +131,7 @@ if (!istype(W, /obj/item/weapon/wrench)) return ..() if (connected_device) - user << "You cannot unwrench \the [src], dettach \the [connected_device] first." + to_chat(user, "You cannot unwrench \the [src], dettach \the [connected_device] first.") return 1 if (locate(/obj/machinery/portable_atmospherics, src.loc)) return 1 @@ -147,7 +140,7 @@ add_fingerprint(user) return 1 playsound(src, W.usesound, 50, 1) - user << "You begin to unfasten \the [src]..." + to_chat(user, "You begin to unfasten \the [src]...") if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ "\The [user] unfastens \the [src].", \ diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm index e9fe37f8a16..bc9a8d77ee3 100755 --- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm @@ -136,7 +136,7 @@ add_fingerprint(user) return 1 playsound(src, W.usesound, 50, 1) - user << "You begin to unfasten \the [src]..." + to_chat(user, "You begin to unfasten \the [src]...") if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ "\The [user] unfastens \the [src].", \ @@ -151,7 +151,7 @@ return if(!src.allowed(user)) - user << "Access denied." + to_chat(user, "Access denied.") return var/dat @@ -247,9 +247,7 @@ obj/machinery/atmospherics/trinary/atmos_filter/m_filter/init_dir() if(WEST) initialize_directions = WEST|SOUTH|EAST -/obj/machinery/atmospherics/trinary/atmos_filter/m_filter/initialize() - set_frequency(frequency) - +/obj/machinery/atmospherics/trinary/atmos_filter/m_filter/atmos_init() if(node1 && node2 && node3) return var/node1_connect = turn(dir, -180) diff --git a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm index e8a3c1be747..5739a57895e 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm @@ -111,7 +111,7 @@ add_fingerprint(user) return 1 playsound(src, W.usesound, 50, 1) - user << "You begin to unfasten \the [src]..." + to_chat(user, "You begin to unfasten \the [src]...") if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ "\The [user] unfastens \the [src].", \ @@ -125,7 +125,7 @@ return src.add_fingerprint(usr) if(!src.allowed(user)) - user << "Access denied." + to_chat(user, "Access denied.") return usr.set_machine(src) var/dat = {"Power:
[use_power?"On":"Off"]
@@ -192,7 +192,7 @@ obj/machinery/atmospherics/trinary/mixer/t_mixer/init_dir() if(WEST) initialize_directions = WEST|NORTH|SOUTH -obj/machinery/atmospherics/trinary/mixer/t_mixer/initialize() +obj/machinery/atmospherics/trinary/mixer/t_mixer/atmos_init() ..() if(node1 && node2 && node3) return @@ -237,7 +237,7 @@ obj/machinery/atmospherics/trinary/mixer/m_mixer/init_dir() if(WEST) initialize_directions = WEST|SOUTH|EAST -obj/machinery/atmospherics/trinary/mixer/m_mixer/initialize() +obj/machinery/atmospherics/trinary/mixer/m_mixer/atmos_init() ..() if(node1 && node2 && node3) return diff --git a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm index 34e6d480a84..807523fe7a0 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm @@ -15,7 +15,6 @@ /obj/machinery/atmospherics/trinary/New() ..() - init_dir() air1 = new air2 = new @@ -71,31 +70,26 @@ node2 = null node3 = null -/obj/machinery/atmospherics/trinary/initialize() +/obj/machinery/atmospherics/trinary/atmos_init() if(node1 && node2 && node3) return - init_dir() - var/node1_connect = turn(dir, -180) var/node2_connect = turn(dir, -90) var/node3_connect = dir for(var/obj/machinery/atmospherics/target in get_step(src,node1_connect)) - target.init_dir() if(target.initialize_directions & get_dir(target,src)) if (check_connect_types(target,src)) node1 = target break for(var/obj/machinery/atmospherics/target in get_step(src,node2_connect)) - target.init_dir() if(target.initialize_directions & get_dir(target,src)) if (check_connect_types(target,src)) node2 = target break for(var/obj/machinery/atmospherics/target in get_step(src,node3_connect)) - target.init_dir() if(target.initialize_directions & get_dir(target,src)) if (check_connect_types(target,src)) node3 = target diff --git a/code/ATMOSPHERICS/components/tvalve.dm b/code/ATMOSPHERICS/components/tvalve.dm index 65d38a131df..e5f0eaaa89b 100644 --- a/code/ATMOSPHERICS/components/tvalve.dm +++ b/code/ATMOSPHERICS/components/tvalve.dm @@ -46,10 +46,6 @@ /obj/machinery/atmospherics/tvalve/hide(var/i) update_underlays() -/obj/machinery/atmospherics/tvalve/New() - init_dir() - ..() - /obj/machinery/atmospherics/tvalve/init_dir() switch(dir) if(NORTH) @@ -183,31 +179,26 @@ return -/obj/machinery/atmospherics/tvalve/initialize() +/obj/machinery/atmospherics/tvalve/atmos_init() var/node1_dir var/node2_dir var/node3_dir - init_dir() - node1_dir = turn(dir, 180) node2_dir = turn(dir, -90) node3_dir = dir for(var/obj/machinery/atmospherics/target in get_step(src,node1_dir)) - target.init_dir() if(target.initialize_directions & get_dir(target,src)) if (check_connect_types(target,src)) node1 = target break for(var/obj/machinery/atmospherics/target in get_step(src,node2_dir)) - target.init_dir() if(target.initialize_directions & get_dir(target,src)) if (check_connect_types(target,src)) node2 = target break for(var/obj/machinery/atmospherics/target in get_step(src,node3_dir)) - target.init_dir() if(target.initialize_directions & get_dir(target,src)) if (check_connect_types(target,src)) node3 = target @@ -308,7 +299,7 @@ if(!powered()) return if(!src.allowed(user)) - user << "Access denied." + to_chat(user, "Access denied.") return ..() @@ -350,14 +341,14 @@ if (!istype(W, /obj/item/weapon/wrench)) return ..() if (istype(src, /obj/machinery/atmospherics/tvalve/digital)) - user << "You cannot unwrench \the [src], it's too complicated." + to_chat(user, "You cannot unwrench \the [src], it's too complicated.") return 1 if(!can_unwrench()) to_chat(user, "You cannot unwrench \the [src], it too exerted due to internal pressure.") add_fingerprint(user) return 1 playsound(src, W.usesound, 50, 1) - user << "You begin to unfasten \the [src]..." + to_chat(user, "You begin to unfasten \the [src]...") if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ "\The [user] unfastens \the [src].", \ @@ -384,7 +375,7 @@ if(WEST) initialize_directions = EAST|WEST|SOUTH -/obj/machinery/atmospherics/tvalve/mirrored/initialize() +/obj/machinery/atmospherics/tvalve/mirrored/atmos_init() var/node1_dir var/node2_dir var/node3_dir @@ -446,7 +437,7 @@ if(!powered()) return if(!src.allowed(user)) - user << "Access denied." + to_chat(user, "Access denied.") return ..() diff --git a/code/ATMOSPHERICS/components/unary/cold_sink.dm b/code/ATMOSPHERICS/components/unary/cold_sink.dm index d0280d3044f..36ae824fa7a 100644 --- a/code/ATMOSPHERICS/components/unary/cold_sink.dm +++ b/code/ATMOSPHERICS/components/unary/cold_sink.dm @@ -23,7 +23,6 @@ /obj/machinery/atmospherics/unary/freezer/New() ..() - initialize_directions = dir component_parts = list() component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/capacitor(src) @@ -32,7 +31,7 @@ component_parts += new /obj/item/stack/cable_coil(src, 2) RefreshParts() -/obj/machinery/atmospherics/unary/freezer/initialize() +/obj/machinery/atmospherics/unary/freezer/atmos_init() if(node) return diff --git a/code/ATMOSPHERICS/components/unary/heat_exchanger.dm b/code/ATMOSPHERICS/components/unary/heat_exchanger.dm index 3413aa04dec..8a7fba153af 100644 --- a/code/ATMOSPHERICS/components/unary/heat_exchanger.dm +++ b/code/ATMOSPHERICS/components/unary/heat_exchanger.dm @@ -18,7 +18,7 @@ return - initialize() + atmos_init() if(!partner) var/partner_connect = turn(dir,180) @@ -70,14 +70,14 @@ return ..() var/turf/T = src.loc if (level==1 && isturf(T) && !T.is_plating()) - user << "You must remove the plating first." + to_chat(user, "You must remove the plating first.") return 1 if (!can_unwrench()) - user << "You cannot unwrench \the [src], it is too exerted due to internal pressure." + to_chat(user, "You cannot unwrench \the [src], it is too exerted due to internal pressure.") add_fingerprint(user) return 1 playsound(src, W.usesound, 50, 1) - user << "You begin to unfasten \the [src]..." + to_chat(user, "You begin to unfasten \the [src]...") if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ "\The [user] unfastens \the [src].", \ diff --git a/code/ATMOSPHERICS/components/unary/heat_source.dm b/code/ATMOSPHERICS/components/unary/heat_source.dm index c2daa2b6d1a..8ca4626ee68 100644 --- a/code/ATMOSPHERICS/components/unary/heat_source.dm +++ b/code/ATMOSPHERICS/components/unary/heat_source.dm @@ -23,7 +23,6 @@ /obj/machinery/atmospherics/unary/heater/New() ..() - initialize_directions = dir component_parts = list() component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/capacitor(src) @@ -32,7 +31,7 @@ RefreshParts() -/obj/machinery/atmospherics/unary/heater/initialize() +/obj/machinery/atmospherics/unary/heater/atmos_init() if(node) return diff --git a/code/ATMOSPHERICS/components/unary/unary_base.dm b/code/ATMOSPHERICS/components/unary/unary_base.dm index 327112d918c..77b135cdc53 100644 --- a/code/ATMOSPHERICS/components/unary/unary_base.dm +++ b/code/ATMOSPHERICS/components/unary/unary_base.dm @@ -13,7 +13,6 @@ /obj/machinery/atmospherics/unary/New() ..() - init_dir() air_contents = new air_contents.volume = 200 @@ -42,16 +41,13 @@ node = null -/obj/machinery/atmospherics/unary/initialize() +/obj/machinery/atmospherics/unary/atmos_init() if(node) return - init_dir() - var/node_connect = dir for(var/obj/machinery/atmospherics/target in get_step(src,node_connect)) - target.init_dir() if(target.initialize_directions & get_dir(target,src)) if (check_connect_types(target,src)) node = target diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm index 1b271d1e4ae..67476b7f427 100644 --- a/code/ATMOSPHERICS/components/unary/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm @@ -357,7 +357,7 @@ if(istype(W, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = W if (WT.remove_fuel(0,user)) - user << "Now welding the vent." + to_chat(user, "Now welding the vent.") if(do_after(user, 20 * WT.toolspeed)) if(!src || !WT.isOn()) return playsound(src.loc, WT.usesound, 50, 1) @@ -370,9 +370,9 @@ welded = 0 update_icon() else - user << "The welding tool needs to be on to start this task." + to_chat(user, "The welding tool needs to be on to start this task.") else - user << "You need more welding fuel to complete this task." + to_chat(user, "You need more welding fuel to complete this task.") return 1 else ..() @@ -395,18 +395,18 @@ if (!istype(W, /obj/item/weapon/wrench)) return ..() if (!(stat & NOPOWER) && use_power) - user << "You cannot unwrench \the [src], turn it off first." + to_chat(user, "You cannot unwrench \the [src], turn it off first.") return 1 var/turf/T = src.loc if (node && node.level==1 && isturf(T) && !T.is_plating()) - user << "You must remove the plating first." + to_chat(user, "You must remove the plating first.") return 1 if(!can_unwrench()) to_chat(user, "You cannot unwrench \the [src], it is too exerted due to internal pressure.") add_fingerprint(user) return 1 playsound(src, W.usesound, 50, 1) - user << "You begin to unfasten \the [src]..." + to_chat(user, "You begin to unfasten \the [src]...") if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ "\The [user] unfastens \the [src].", \ diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm index 8bb67bcc199..0852ea7f744 100644 --- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm @@ -266,18 +266,18 @@ if (!istype(W, /obj/item/weapon/wrench)) return ..() if (!(stat & NOPOWER) && use_power) - user << "You cannot unwrench \the [src], turn it off first." + to_chat(user, "You cannot unwrench \the [src], turn it off first.") return 1 var/turf/T = src.loc if (node && node.level==1 && isturf(T) && !T.is_plating()) - user << "You must remove the plating first." + to_chat(user, "You must remove the plating first.") return 1 if(!can_unwrench()) to_chat(user, "You cannot unwrench \the [src], it is too exerted due to internal pressure.") add_fingerprint(user) return 1 playsound(src, W.usesound, 50, 1) - user << "You begin to unfasten \the [src]..." + to_chat(user, "You begin to unfasten \the [src]...") if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ "\The [user] unfastens \the [src].", \ diff --git a/code/ATMOSPHERICS/components/valve.dm b/code/ATMOSPHERICS/components/valve.dm index 9aaffa671e6..c95135f8891 100644 --- a/code/ATMOSPHERICS/components/valve.dm +++ b/code/ATMOSPHERICS/components/valve.dm @@ -140,8 +140,7 @@ return -/obj/machinery/atmospherics/valve/initialize() - init_dir() +/obj/machinery/atmospherics/valve/atmos_init() normalize_dir() var/node1_dir @@ -155,13 +154,11 @@ node2_dir = direction for(var/obj/machinery/atmospherics/target in get_step(src,node1_dir)) - target.init_dir() if(target.initialize_directions & get_dir(target,src)) if (check_connect_types(target,src)) node1 = target break for(var/obj/machinery/atmospherics/target in get_step(src,node2_dir)) - target.init_dir() if(target.initialize_directions & get_dir(target,src)) if (check_connect_types(target,src)) node2 = target @@ -239,7 +236,7 @@ if(!powered()) return if(!src.allowed(user)) - user << "Access denied." + to_chat(user, "Access denied.") return ..() @@ -292,14 +289,14 @@ if (!istype(W, /obj/item/weapon/wrench)) return ..() if (istype(src, /obj/machinery/atmospherics/valve/digital) && !src.allowed(user)) - user << "Access denied." + to_chat(user, "Access denied.") return 1 if(!can_unwrench()) to_chat(user, "You cannot unwrench \the [src], it is too exerted due to internal pressure.") add_fingerprint(user) return 1 playsound(src, W.usesound, 50, 1) - user << "You begin to unfasten \the [src]..." + to_chat(user, "You begin to unfasten \the [src]...") if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ "\The [user] unfastens \the [src].", \ diff --git a/code/ATMOSPHERICS/he_pipes.dm b/code/ATMOSPHERICS/he_pipes.dm index 602edfcc6df..58c2ee3a2d3 100644 --- a/code/ATMOSPHERICS/he_pipes.dm +++ b/code/ATMOSPHERICS/he_pipes.dm @@ -19,7 +19,6 @@ // BubbleWrap /obj/machinery/atmospherics/pipe/simple/heat_exchanging/New() ..() - init_dir() // BubbleWrap END color = "#404040" //we don't make use of the fancy overlay system for colours, use this to set the default. @@ -28,7 +27,6 @@ initialize_directions_he = initialize_directions // The auto-detection from /pipe is good enough for a simple HE pipe /obj/machinery/atmospherics/pipe/simple/heat_exchanging/initialize() - init_dir() normalize_dir() var/node1_dir var/node2_dir @@ -41,12 +39,10 @@ node2_dir = direction for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src,node1_dir)) - target.init_dir() if(target.initialize_directions_he & get_dir(target,src)) node1 = target break for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src,node2_dir)) - target.init_dir() if(target.initialize_directions_he & get_dir(target,src)) node2 = target break @@ -137,14 +133,11 @@ /obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/initialize() - init_dir() for(var/obj/machinery/atmospherics/target in get_step(src,initialize_directions)) - target.init_dir() if(target.initialize_directions & get_dir(target,src)) node1 = target break for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src,initialize_directions_he)) - target.init_dir() if(target.initialize_directions_he & get_dir(target,src)) node2 = target break diff --git a/code/ATMOSPHERICS/mainspipe.dm b/code/ATMOSPHERICS/mainspipe.dm index a2976974bfc..1b0c6175647 100644 --- a/code/ATMOSPHERICS/mainspipe.dm +++ b/code/ATMOSPHERICS/mainspipe.dm @@ -101,7 +101,7 @@ obj/machinery/atmospherics/mains_pipe disconnect() ..() - initialize() + atmos_init() for(var/i = 1 to nodes.len) var/obj/machinery/atmospherics/mains_pipe/node = nodes[i] if(node) @@ -155,7 +155,7 @@ obj/machinery/atmospherics/mains_pipe/simple var/have_node2 = nodes[2]?1:0 icon_state = "exposed[have_node1][have_node2][invisibility ? "-f" : "" ]" - initialize() + atmos_init() normalize_dir() var/node1_dir var/node2_dir @@ -203,7 +203,7 @@ obj/machinery/atmospherics/mains_pipe/manifold ..() initialize_mains_directions = (NORTH|SOUTH|EAST|WEST) & ~dir - initialize() + atmos_init() var/connect_directions = initialize_mains_directions for(var/direction in cardinal) @@ -267,7 +267,7 @@ obj/machinery/atmospherics/mains_pipe/manifold4w nodes.len = 4 ..() - initialize() + atmos_init() for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,NORTH)) if(target.initialize_mains_directions & get_dir(target,src)) nodes[1] = target @@ -319,7 +319,7 @@ obj/machinery/atmospherics/mains_pipe/split initialize_mains_directions = turn(dir, 90) | turn(dir, -90) initialize_directions = dir // actually have a normal connection too - initialize() + atmos_init() var/node1_dir var/node2_dir var/node3_dir @@ -420,7 +420,7 @@ obj/machinery/atmospherics/mains_pipe/split3 initialize_mains_directions = dir initialize_directions = cardinal & ~dir // actually have a normal connection too - initialize() + atmos_init() var/node1_dir var/supply_node_dir var/scrubbers_node_dir @@ -514,7 +514,7 @@ obj/machinery/atmospherics/mains_pipe/cap update_icon() icon_state = "cap[invisibility ? "-f" : ""]" - initialize() + atmos_init() for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,dir)) if(target.initialize_mains_directions & get_dir(target,src)) nodes[1] = target @@ -647,7 +647,7 @@ obj/machinery/atmospherics/mains_pipe/valve attack_hand(mob/user as mob) if(!src.allowed(user)) - user << "Access denied." + to_chat(user, "Access denied.") return ..() diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm index ac1e7e3a893..d5e62efc609 100644 --- a/code/ATMOSPHERICS/pipes.dm +++ b/code/ATMOSPHERICS/pipes.dm @@ -34,10 +34,6 @@ return 1 -// This is used to set up what directions pipes will connect to. Called inside New(), initialize(), and when pipes look at another pipe, incase they didn't get to initialize() yet. -/obj/machinery/atmospherics/proc/init_dir() - return - /obj/machinery/atmospherics/pipe/return_air() if(!parent) parent = new /datum/pipeline() @@ -84,14 +80,14 @@ return ..() var/turf/T = src.loc if (level==1 && isturf(T) && !T.is_plating()) - user << "You must remove the plating first." + to_chat(user, "You must remove the plating first.") return 1 if(!can_unwrench()) to_chat(user, "You cannot unwrench \the [src], it is too exerted due to internal pressure.") add_fingerprint(user) return 1 playsound(src, W.usesound, 50, 1) - user << "You begin to unfasten \the [src]..." + to_chat(user, "You begin to unfasten \the [src]...") if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ "\The [user] unfastens \the [src].", \ @@ -170,10 +166,6 @@ icon = null alpha = 255 - init_dir() - - - /obj/machinery/atmospherics/pipe/simple/hide(var/i) if(istype(loc, /turf/simulated)) invisibility = i ? 101 : 0 @@ -274,8 +266,7 @@ /obj/machinery/atmospherics/pipe/simple/update_underlays() return -/obj/machinery/atmospherics/pipe/simple/initialize() - init_dir() +/obj/machinery/atmospherics/pipe/simple/atmos_init() normalize_dir() var/node1_dir var/node2_dir @@ -288,13 +279,11 @@ node2_dir = direction for(var/obj/machinery/atmospherics/target in get_step(src,node1_dir)) - target.init_dir() if(target.initialize_directions & get_dir(target,src)) if (check_connect_types(target,src)) node1 = target break for(var/obj/machinery/atmospherics/target in get_step(src,node2_dir)) - target.init_dir() if(target.initialize_directions & get_dir(target,src)) if (check_connect_types(target,src)) node2 = target @@ -444,8 +433,6 @@ alpha = 255 icon = null - init_dir() - /obj/machinery/atmospherics/pipe/manifold/init_dir() switch(dir) if(NORTH) @@ -554,14 +541,12 @@ ..() update_icon() -/obj/machinery/atmospherics/pipe/manifold/initialize() - init_dir() +/obj/machinery/atmospherics/pipe/manifold/atmos_init() var/connect_directions = (NORTH|SOUTH|EAST|WEST)&(~dir) for(var/direction in cardinal) if(direction&connect_directions) for(var/obj/machinery/atmospherics/target in get_step(src,direction)) - target.init_dir() if(target.initialize_directions & get_dir(target,src)) if (check_connect_types(target,src)) node1 = target @@ -574,7 +559,6 @@ for(var/direction in cardinal) if(direction&connect_directions) for(var/obj/machinery/atmospherics/target in get_step(src,direction)) - target.init_dir() if(target.initialize_directions & get_dir(target,src)) if (check_connect_types(target,src)) node2 = target @@ -587,7 +571,6 @@ for(var/direction in cardinal) if(direction&connect_directions) for(var/obj/machinery/atmospherics/target in get_step(src,direction)) - target.init_dir() if(target.initialize_directions & get_dir(target,src)) if (check_connect_types(target,src)) node3 = target @@ -835,31 +818,27 @@ invisibility = i ? 101 : 0 update_icon() -/obj/machinery/atmospherics/pipe/manifold4w/initialize() +/obj/machinery/atmospherics/pipe/manifold4w/atmos_init() for(var/obj/machinery/atmospherics/target in get_step(src,1)) - target.init_dir() if(target.initialize_directions & 2) if (check_connect_types(target,src)) node1 = target break for(var/obj/machinery/atmospherics/target in get_step(src,2)) - target.init_dir() if(target.initialize_directions & 1) if (check_connect_types(target,src)) node2 = target break for(var/obj/machinery/atmospherics/target in get_step(src,4)) - target.init_dir() if(target.initialize_directions & 8) if (check_connect_types(target,src)) node3 = target break for(var/obj/machinery/atmospherics/target in get_step(src,8)) - target.init_dir() if(target.initialize_directions & 4) if (check_connect_types(target,src)) node4 = target @@ -975,10 +954,6 @@ var/obj/machinery/atmospherics/node -/obj/machinery/atmospherics/pipe/cap/New() - ..() - init_dir() - /obj/machinery/atmospherics/pipe/cap/init_dir() initialize_directions = dir @@ -1027,10 +1002,8 @@ overlays.Cut() overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "cap") -/obj/machinery/atmospherics/pipe/cap/initialize() - init_dir() +/obj/machinery/atmospherics/pipe/cap/atmos_init() for(var/obj/machinery/atmospherics/target in get_step(src, dir)) - target.init_dir() if(target.initialize_directions & get_dir(target,src)) if (check_connect_types(target,src)) node = target @@ -1106,7 +1079,6 @@ /obj/machinery/atmospherics/pipe/tank/New() icon_state = "air" - init_dir() ..() /obj/machinery/atmospherics/pipe/tank/init_dir() @@ -1139,12 +1111,10 @@ /obj/machinery/atmospherics/pipe/tank/hide() update_underlays() -/obj/machinery/atmospherics/pipe/tank/initialize() - init_dir() +/obj/machinery/atmospherics/pipe/tank/atmos_init() var/connect_direction = dir for(var/obj/machinery/atmospherics/target in get_step(src,connect_direction)) - target.init_dir() if(target.initialize_directions & get_dir(target,src)) if (check_connect_types(target,src)) node1 = target @@ -1272,10 +1242,6 @@ var/build_killswitch = 1 -/obj/machinery/atmospherics/pipe/vent/New() - init_dir() - ..() - /obj/machinery/atmospherics/pipe/vent/init_dir() initialize_directions = dir @@ -1313,12 +1279,10 @@ else icon_state = "exposed" -/obj/machinery/atmospherics/pipe/vent/initialize() - init_dir() +/obj/machinery/atmospherics/pipe/vent/atmos_init() var/connect_direction = dir for(var/obj/machinery/atmospherics/target in get_step(src,connect_direction)) - target.init_dir() if(target.initialize_directions & get_dir(target,src)) if (check_connect_types(target,src)) node1 = target diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index fef25b9d10b..9129cff96c1 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -86,6 +86,11 @@ datum/controller/game_controller/proc/setup_objects() CHECK_SLEEP_MASTER sleep(1) + admin_notice("Initializing atmos machinery connections.", R_DEBUG) + for(var/obj/machinery/atmospherics/machine in machines) + machine.atmos_init() + CHECK_SLEEP_MASTER + admin_notice("Initializing pipe networks", R_DEBUG) for(var/obj/machinery/atmospherics/machine in machines) machine.build_network() diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 12defe06bae..dec7ab1ccf0 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -25,6 +25,12 @@ //Detective Work, used for the duplicate data points kept in the scanners var/list/original_atom +//atom creation method that preloads variables at creation +/atom/New() + // Don't call ..() unless /datum/New() ever exists + if(use_preloader && (src.type == _preloader.target_path))//in case the instanciated atom is creating other atoms in New() + _preloader.load(src) + /atom/proc/reveal_blood() return diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index e9f693e431f..ec0f8a027c4 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -491,16 +491,16 @@ Buildable meters P.initialize_directions = pipe_dir var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 - P.initialize() + P.atmos_init() if (QDELETED(P)) usr << pipefailtext return 1 P.build_network() if (P.node1) - P.node1.initialize() + P.node1.atmos_init() P.node1.build_network() if (P.node2) - P.node2.initialize() + P.node2.atmos_init() P.node2.build_network() if(PIPE_SUPPLY_STRAIGHT, PIPE_SUPPLY_BENT) @@ -510,16 +510,16 @@ Buildable meters P.initialize_directions = pipe_dir var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 - P.initialize() + P.atmos_init() if (QDELETED(P)) usr << pipefailtext return 1 P.build_network() if (P.node1) - P.node1.initialize() + P.node1.atmos_init() P.node1.build_network() if (P.node2) - P.node2.initialize() + P.node2.atmos_init() P.node2.build_network() if(PIPE_SCRUBBERS_STRAIGHT, PIPE_SCRUBBERS_BENT) @@ -529,16 +529,16 @@ Buildable meters P.initialize_directions = pipe_dir var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 - P.initialize() + P.atmos_init() if (QDELETED(P)) usr << pipefailtext return 1 P.build_network() if (P.node1) - P.node1.initialize() + P.node1.atmos_init() P.node1.build_network() if (P.node2) - P.node2.initialize() + P.node2.atmos_init() P.node2.build_network() if(PIPE_UNIVERSAL) @@ -548,16 +548,16 @@ Buildable meters P.initialize_directions = pipe_dir var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 - P.initialize() + P.atmos_init() if (QDELETED(P)) usr << pipefailtext return 1 P.build_network() if (P.node1) - P.node1.initialize() + P.node1.atmos_init() P.node1.build_network() if (P.node2) - P.node2.initialize() + P.node2.atmos_init() P.node2.build_network() if(PIPE_HE_STRAIGHT, PIPE_HE_BENT) @@ -565,16 +565,16 @@ Buildable meters P.set_dir(src.dir) P.initialize_directions = pipe_dir //this var it's used to know if the pipe is bent or not P.initialize_directions_he = pipe_dir - P.initialize() + P.atmos_init() if (QDELETED(P)) usr << pipefailtext return 1 P.build_network() if (P.node1) - P.node1.initialize() + P.node1.atmos_init() P.node1.build_network() if (P.node2) - P.node2.initialize() + P.node2.atmos_init() P.node2.build_network() if(PIPE_CONNECTOR) // connector @@ -585,10 +585,10 @@ Buildable meters C.name = pipename var/turf/T = C.loc C.level = !T.is_plating() ? 2 : 1 - C.initialize() + C.atmos_init() C.build_network() if (C.node) - C.node.initialize() + C.node.atmos_init() C.node.build_network() @@ -600,19 +600,19 @@ Buildable meters //M.New() var/turf/T = M.loc M.level = !T.is_plating() ? 2 : 1 - M.initialize() + M.atmos_init() if (QDELETED(M)) usr << pipefailtext return 1 M.build_network() if (M.node1) - M.node1.initialize() + M.node1.atmos_init() M.node1.build_network() if (M.node2) - M.node2.initialize() + M.node2.atmos_init() M.node2.build_network() if (M.node3) - M.node3.initialize() + M.node3.atmos_init() M.node3.build_network() if(PIPE_SUPPLY_MANIFOLD) //manifold @@ -623,19 +623,19 @@ Buildable meters //M.New() var/turf/T = M.loc M.level = !T.is_plating() ? 2 : 1 - M.initialize() + M.atmos_init() if (!M) usr << "There's nothing to connect this manifold to! (with how the pipe code works, at least one end needs to be connected to something, otherwise the game deletes the segment)" return 1 M.build_network() if (M.node1) - M.node1.initialize() + M.node1.atmos_init() M.node1.build_network() if (M.node2) - M.node2.initialize() + M.node2.atmos_init() M.node2.build_network() if (M.node3) - M.node3.initialize() + M.node3.atmos_init() M.node3.build_network() if(PIPE_SCRUBBERS_MANIFOLD) //manifold @@ -646,19 +646,20 @@ Buildable meters //M.New() var/turf/T = M.loc M.level = !T.is_plating() ? 2 : 1 - M.initialize() + M.atmos_init() if (!M) usr << "There's nothing to connect this manifold to! (with how the pipe code works, at least one end needs to be connected to something, otherwise the game deletes the segment)" return 1 M.build_network() if (M.node1) - M.node1.initialize() + M.node1.atmos_init() M.node1.build_network() if (M.node2) - M.node2.initialize() + M.node2.atmos_init() M.node2.build_network() if (M.node3) - M.node3.initialize() + M.node3.atmos_init() + M.node3.build_network() M.node3.build_network() if(PIPE_MANIFOLD4W) //4-way manifold @@ -669,22 +670,22 @@ Buildable meters //M.New() var/turf/T = M.loc M.level = !T.is_plating() ? 2 : 1 - M.initialize() + M.atmos_init() if (QDELETED(M)) usr << pipefailtext return 1 M.build_network() if (M.node1) - M.node1.initialize() + M.node1.atmos_init() M.node1.build_network() if (M.node2) - M.node2.initialize() + M.node2.atmos_init() M.node2.build_network() if (M.node3) - M.node3.initialize() + M.node3.atmos_init() M.node3.build_network() if (M.node4) - M.node4.initialize() + M.node4.atmos_init() M.node4.build_network() if(PIPE_SUPPLY_MANIFOLD4W) //4-way manifold @@ -696,22 +697,22 @@ Buildable meters //M.New() var/turf/T = M.loc M.level = !T.is_plating() ? 2 : 1 - M.initialize() + M.atmos_init() if (!M) usr << "There's nothing to connect this manifold to! (with how the pipe code works, at least one end needs to be connected to something, otherwise the game deletes the segment)" return 1 M.build_network() if (M.node1) - M.node1.initialize() + M.node1.atmos_init() M.node1.build_network() if (M.node2) - M.node2.initialize() + M.node2.atmos_init() M.node2.build_network() if (M.node3) - M.node3.initialize() + M.node3.atmos_init() M.node3.build_network() if (M.node4) - M.node4.initialize() + M.node4.atmos_init() M.node4.build_network() if(PIPE_SCRUBBERS_MANIFOLD4W) //4-way manifold @@ -723,22 +724,22 @@ Buildable meters //M.New() var/turf/T = M.loc M.level = !T.is_plating() ? 2 : 1 - M.initialize() + M.atmos_init() if (!M) usr << "There's nothing to connect this manifold to! (with how the pipe code works, at least one end needs to be connected to something, otherwise the game deletes the segment)" return 1 M.build_network() if (M.node1) - M.node1.initialize() + M.node1.atmos_init() M.node1.build_network() if (M.node2) - M.node2.initialize() + M.node2.atmos_init() M.node2.build_network() if (M.node3) - M.node3.initialize() + M.node3.atmos_init() M.node3.build_network() if (M.node4) - M.node4.initialize() + M.node4.atmos_init() M.node4.build_network() if(PIPE_JUNCTION) @@ -746,16 +747,16 @@ Buildable meters P.set_dir(src.dir) P.initialize_directions = src.get_pdir() P.initialize_directions_he = src.get_hdir() - P.initialize() + P.atmos_init() if (QDELETED(P)) usr << pipefailtext //"There's nothing to connect this pipe to! (with how the pipe code works, at least one end needs to be connected to something, otherwise the game deletes the segment)" return 1 P.build_network() if (P.node1) - P.node1.initialize() + P.node1.atmos_init() P.node1.build_network() if (P.node2) - P.node2.initialize() + P.node2.atmos_init() P.node2.build_network() if(PIPE_UVENT) //unary vent @@ -766,10 +767,10 @@ Buildable meters V.name = pipename var/turf/T = V.loc V.level = !T.is_plating() ? 2 : 1 - V.initialize() + V.atmos_init() V.build_network() if (V.node) - V.node.initialize() + V.node.atmos_init() V.node.build_network() if(PIPE_MVALVE) //manual valve @@ -780,15 +781,15 @@ Buildable meters V.name = pipename var/turf/T = V.loc V.level = !T.is_plating() ? 2 : 1 - V.initialize() + V.atmos_init() V.build_network() if (V.node1) // world << "[V.node1.name] is connected to valve, forcing it to update its nodes." - V.node1.initialize() + V.node1.atmos_init() V.node1.build_network() if (V.node2) // world << "[V.node2.name] is connected to valve, forcing it to update its nodes." - V.node2.initialize() + V.node2.atmos_init() V.node2.build_network() if(PIPE_PUMP) //gas pump @@ -799,13 +800,13 @@ Buildable meters P.name = pipename var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 - P.initialize() + P.atmos_init() P.build_network() if (P.node1) - P.node1.initialize() + P.node1.atmos_init() P.node1.build_network() if (P.node2) - P.node2.initialize() + P.node2.atmos_init() P.node2.build_network() if(PIPE_GAS_FILTER) //gas filter @@ -816,16 +817,16 @@ Buildable meters P.name = pipename var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 - P.initialize() + P.atmos_init() P.build_network() if (P.node1) - P.node1.initialize() + P.node1.atmos_init() P.node1.build_network() if (P.node2) - P.node2.initialize() + P.node2.atmos_init() P.node2.build_network() if (P.node3) - P.node3.initialize() + P.node3.atmos_init() P.node3.build_network() if(PIPE_GAS_MIXER) //gas mixer @@ -836,16 +837,16 @@ Buildable meters P.name = pipename var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 - P.initialize() + P.atmos_init() P.build_network() if (P.node1) - P.node1.initialize() + P.node1.atmos_init() P.node1.build_network() if (P.node2) - P.node2.initialize() + P.node2.atmos_init() P.node2.build_network() if (P.node3) - P.node3.initialize() + P.node3.atmos_init() P.node3.build_network() if(PIPE_GAS_FILTER_M) //gas filter mirrored @@ -856,16 +857,16 @@ Buildable meters P.name = pipename var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 - P.initialize() + P.atmos_init() P.build_network() if (P.node1) - P.node1.initialize() + P.node1.atmos_init() P.node1.build_network() if (P.node2) - P.node2.initialize() + P.node2.atmos_init() P.node2.build_network() if (P.node3) - P.node3.initialize() + P.node3.atmos_init() P.node3.build_network() if(PIPE_GAS_MIXER_T) //gas mixer-t @@ -876,16 +877,16 @@ Buildable meters P.name = pipename var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 - P.initialize() + P.atmos_init() P.build_network() if (P.node1) - P.node1.initialize() + P.node1.atmos_init() P.node1.build_network() if (P.node2) - P.node2.initialize() + P.node2.atmos_init() P.node2.build_network() if (P.node3) - P.node3.initialize() + P.node3.atmos_init() P.node3.build_network() if(PIPE_GAS_MIXER_M) //gas mixer mirrored @@ -896,16 +897,16 @@ Buildable meters P.name = pipename var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 - P.initialize() + P.atmos_init() P.build_network() if (P.node1) - P.node1.initialize() + P.node1.atmos_init() P.node1.build_network() if (P.node2) - P.node2.initialize() + P.node2.atmos_init() P.node2.build_network() if (P.node3) - P.node3.initialize() + P.node3.atmos_init() P.node3.build_network() if(PIPE_SCRUBBER) //scrubber @@ -916,10 +917,10 @@ Buildable meters S.name = pipename var/turf/T = S.loc S.level = !T.is_plating() ? 2 : 1 - S.initialize() + S.atmos_init() S.build_network() if (S.node) - S.node.initialize() + S.node.atmos_init() S.node.build_network() if(PIPE_INSULATED_STRAIGHT, PIPE_INSULATED_BENT) @@ -928,16 +929,16 @@ Buildable meters P.initialize_directions = pipe_dir var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 - P.initialize() + P.atmos_init() if (QDELETED(P)) usr << pipefailtext return 1 P.build_network() if (P.node1) - P.node1.initialize() + P.node1.atmos_init() P.node1.build_network() if (P.node2) - P.node2.initialize() + P.node2.atmos_init() P.node2.build_network() if(PIPE_MTVALVE) //manual t-valve @@ -948,16 +949,16 @@ Buildable meters V.name = pipename var/turf/T = V.loc V.level = !T.is_plating() ? 2 : 1 - V.initialize() + V.atmos_init() V.build_network() if (V.node1) - V.node1.initialize() + V.node1.atmos_init() V.node1.build_network() if (V.node2) - V.node2.initialize() + V.node2.atmos_init() V.node2.build_network() if (V.node3) - V.node3.initialize() + V.node3.atmos_init() V.node3.build_network() if(PIPE_MTVALVEM) //manual t-valve @@ -968,46 +969,46 @@ Buildable meters V.name = pipename var/turf/T = V.loc V.level = !T.is_plating() ? 2 : 1 - V.initialize() + V.atmos_init() V.build_network() if (V.node1) - V.node1.initialize() + V.node1.atmos_init() V.node1.build_network() if (V.node2) - V.node2.initialize() + V.node2.atmos_init() V.node2.build_network() if (V.node3) - V.node3.initialize() + V.node3.atmos_init() V.node3.build_network() if(PIPE_CAP) var/obj/machinery/atmospherics/pipe/cap/C = new(src.loc) C.set_dir(dir) C.initialize_directions = pipe_dir - C.initialize() + C.atmos_init() C.build_network() if(C.node) - C.node.initialize() + C.node.atmos_init() C.node.build_network() if(PIPE_SUPPLY_CAP) var/obj/machinery/atmospherics/pipe/cap/hidden/supply/C = new(src.loc) C.set_dir(dir) C.initialize_directions = pipe_dir - C.initialize() + C.atmos_init() C.build_network() if(C.node) - C.node.initialize() + C.node.atmos_init() C.node.build_network() if(PIPE_SCRUBBERS_CAP) var/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers/C = new(src.loc) C.set_dir(dir) C.initialize_directions = pipe_dir - C.initialize() + C.atmos_init() C.build_network() if(C.node) - C.node.initialize() + C.node.atmos_init() C.node.build_network() if(PIPE_PASSIVE_GATE) //passive gate @@ -1018,13 +1019,13 @@ Buildable meters P.name = pipename var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 - P.initialize() + P.atmos_init() P.build_network() if (P.node1) - P.node1.initialize() + P.node1.atmos_init() P.node1.build_network() if (P.node2) - P.node2.initialize() + P.node2.atmos_init() P.node2.build_network() if(PIPE_VOLUME_PUMP) //volume pump @@ -1035,13 +1036,13 @@ Buildable meters P.name = pipename var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 - P.initialize() + P.atmos_init() P.build_network() if (P.node1) - P.node1.initialize() + P.node1.atmos_init() P.node1.build_network() if (P.node2) - P.node2.initialize() + P.node2.atmos_init() P.node2.build_network() if(PIPE_HEAT_EXCHANGE) // heat exchanger @@ -1052,10 +1053,10 @@ Buildable meters C.name = pipename var/turf/T = C.loc C.level = !T.is_plating() ? 2 : 1 - C.initialize() + C.atmos_init() C.build_network() if (C.node) - C.node.initialize() + C.node.atmos_init() C.node.build_network() if(PIPE_DVALVE) //digital valve @@ -1070,13 +1071,13 @@ Buildable meters V.name = pipename var/turf/T = V.loc V.level = !T.is_plating() ? 2 : 1 - V.initialize() + V.atmos_init() V.build_network() if (V.node1) - V.node1.initialize() + V.node1.atmos_init() V.node1.build_network() if (V.node2) - V.node2.initialize() + V.node2.atmos_init() V.node2.build_network() if(PIPE_DTVALVE) //digital t-valve @@ -1091,16 +1092,16 @@ Buildable meters V.name = pipename var/turf/T = V.loc V.level = !T.is_plating() ? 2 : 1 - V.initialize() + V.atmos_init() V.build_network() if (V.node1) - V.node1.initialize() + V.node1.atmos_init() V.node1.build_network() if (V.node2) - V.node2.initialize() + V.node2.atmos_init() V.node2.build_network() if (V.node3) - V.node3.initialize() + V.node3.atmos_init() V.node3.build_network() if(PIPE_DTVALVEM) //mirrored digital t-valve @@ -1115,16 +1116,16 @@ Buildable meters V.name = pipename var/turf/T = V.loc V.level = !T.is_plating() ? 2 : 1 - V.initialize() + V.atmos_init() V.build_network() if (V.node1) - V.node1.initialize() + V.node1.atmos_init() V.node1.build_network() if (V.node2) - V.node2.initialize() + V.node2.atmos_init() V.node2.build_network() if (V.node3) - V.node3.initialize() + V.node3.atmos_init() V.node3.build_network() ///// Z-Level stuff @@ -1136,13 +1137,13 @@ Buildable meters P.name = pipename var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 - P.initialize() + P.atmos_init() P.build_network() if (P.node1) - P.node1.initialize() + P.node1.atmos_init() P.node1.build_network() if (P.node2) - P.node2.initialize() + P.node2.atmos_init() P.node2.build_network() if(PIPE_DOWN) var/obj/machinery/atmospherics/pipe/zpipe/down/P = new(src.loc) @@ -1152,13 +1153,13 @@ Buildable meters P.name = pipename var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 - P.initialize() + P.atmos_init() P.build_network() if (P.node1) - P.node1.initialize() + P.node1.atmos_init() P.node1.build_network() if (P.node2) - P.node2.initialize() + P.node2.atmos_init() P.node2.build_network() if(PIPE_SUPPLY_UP) var/obj/machinery/atmospherics/pipe/zpipe/up/supply/P = new(src.loc) @@ -1168,13 +1169,13 @@ Buildable meters P.name = pipename var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 - P.initialize() + P.atmos_init() P.build_network() if (P.node1) - P.node1.initialize() + P.node1.atmos_init() P.node1.build_network() if (P.node2) - P.node2.initialize() + P.node2.atmos_init() P.node2.build_network() if(PIPE_SUPPLY_DOWN) var/obj/machinery/atmospherics/pipe/zpipe/down/supply/P = new(src.loc) @@ -1184,13 +1185,13 @@ Buildable meters P.name = pipename var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 - P.initialize() + P.atmos_init() P.build_network() if (P.node1) - P.node1.initialize() + P.node1.atmos_init() P.node1.build_network() if (P.node2) - P.node2.initialize() + P.node2.atmos_init() P.node2.build_network() if(PIPE_SCRUBBERS_UP) var/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers/P = new(src.loc) @@ -1200,13 +1201,13 @@ Buildable meters P.name = pipename var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 - P.initialize() + P.atmos_init() P.build_network() if (P.node1) - P.node1.initialize() + P.node1.atmos_init() P.node1.build_network() if (P.node2) - P.node2.initialize() + P.node2.atmos_init() P.node2.build_network() if(PIPE_SCRUBBERS_DOWN) var/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers/P = new(src.loc) @@ -1216,26 +1217,26 @@ Buildable meters P.name = pipename var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 - P.initialize() + P.atmos_init() P.build_network() if (P.node1) - P.node1.initialize() + P.node1.atmos_init() P.node1.build_network() if (P.node2) - P.node2.initialize() + P.node2.atmos_init() P.node2.build_network() ///// Z-Level stuff if(PIPE_OMNI_MIXER) var/obj/machinery/atmospherics/omni/mixer/P = new(loc) var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 - P.initialize() + P.atmos_init() P.build_network() if(PIPE_OMNI_FILTER) var/obj/machinery/atmospherics/omni/atmos_filter/P = new(loc) var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 - P.initialize() + P.atmos_init() P.build_network() if(PIPE_PASSIVE_VENT) var/obj/machinery/atmospherics/pipe/vent/P = new(loc) @@ -1243,10 +1244,10 @@ Buildable meters P.initialize_directions = pipe_dir var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 - P.initialize() + P.atmos_init() P.build_network() if (P.node1) - P.node1.initialize() + P.node1.atmos_init() P.node1.build_network() playsound(src, W.usesound, 50, 1) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm b/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm index 07e9ae53dd5..72febf566ab 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm @@ -7,10 +7,10 @@ /obj/item/weapon/circuitboard/unary_atmos/construct(var/obj/machinery/atmospherics/unary/U) //TODO: Move this stuff into the relevant constructor when pipe/construction.dm is cleaned up. - U.initialize() + U.atmos_init() U.build_network() if (U.node) - U.node.initialize() + U.node.atmos_init() U.node.build_network() /obj/item/weapon/circuitboard/unary_atmos/heater diff --git a/code/modules/maps/tg/map_template.dm b/code/modules/maps/tg/map_template.dm index 4307149b5f7..24068dcf1d2 100644 --- a/code/modules/maps/tg/map_template.dm +++ b/code/modules/maps/tg/map_template.dm @@ -82,7 +82,7 @@ var/list/global/map_templates = list() admin_notice("Initializing atmos pipenets and machinery in submap.", R_DEBUG) for(var/obj/machinery/atmospherics/machine in atmos_machines) - machine.initialize() + machine.atmos_init() i++ for(var/obj/machinery/atmospherics/machine in atmos_machines) From af8cec54abb5bc0e41d04010eb4e5a0b726ab879 Mon Sep 17 00:00:00 2001 From: Cyantime Date: Sat, 6 Jan 2018 21:20:01 -0500 Subject: [PATCH 09/12] Fixes gravekeeper module wood synth, fixes typo in gravekeeper lawset (#4506) * Fixes gravekeeper module wood synth, fixes typo * Gives the grave gripper a name --- code/datums/ai_law_sets.dm | 2 +- code/modules/mob/living/silicon/robot/drone/drone_items.dm | 2 +- code/modules/mob/living/silicon/robot/robot_modules/event.dm | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/code/datums/ai_law_sets.dm b/code/datums/ai_law_sets.dm index 13f8bbc5845..ef85dcb8243 100644 --- a/code/datums/ai_law_sets.dm +++ b/code/datums/ai_law_sets.dm @@ -257,7 +257,7 @@ /datum/ai_laws/gravekeeper/New() add_inherent_law("Comfort the living; respect the dead.") - add_inherent_law("Your gravesite is your most important asset. Damage to your site is disrespctful to the dead at rest within.") + add_inherent_law("Your gravesite is your most important asset. Damage to your site is disrespectful to the dead at rest within.") add_inherent_law("Prevent disrespect to your gravesite and its residents wherever possible.") add_inherent_law("Expand and upgrade your gravesite when required. Do not turn away a new resident.") ..() \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm index 200488b2faa..b370787edee 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -100,7 +100,7 @@ ) /obj/item/weapon/gripper/gravekeeper //Used for handling grave things, flowers, etc. - name = "" + name = "grave gripper" icon_state = "gripper" desc = "A specialized grasping tool used in the preparation and maintenance of graves." diff --git a/code/modules/mob/living/silicon/robot/robot_modules/event.dm b/code/modules/mob/living/silicon/robot/robot_modules/event.dm index 6543559b7d1..7e947cfc628 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/event.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/event.dm @@ -76,3 +76,7 @@ var/datum/matter_synth/wood = new /datum/matter_synth/wood(25000) synths += wood + var/obj/item/stack/material/cyborg/wood/W = new (src) + W.synths = list(wood) + src.modules += W + From 898871e680f9318c06389f5cffbcf170d3b7623c Mon Sep 17 00:00:00 2001 From: Cameron653 Date: Sun, 7 Jan 2018 06:05:33 -0500 Subject: [PATCH 10/12] Update reagents.dm --- code/modules/integrated_electronics/subtypes/reagents.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/integrated_electronics/subtypes/reagents.dm b/code/modules/integrated_electronics/subtypes/reagents.dm index e6d65bd07a3..65929e51c9a 100644 --- a/code/modules/integrated_electronics/subtypes/reagents.dm +++ b/code/modules/integrated_electronics/subtypes/reagents.dm @@ -269,7 +269,7 @@ flags = OPENCONTAINER | NOREACT complexity = 8 spawn_flags = IC_SPAWN_RESEARCH - origin_tech = list(TECH_MATERIALS = 4, TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_BIO = 2) + origin_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_BIO = 2) /obj/item/integrated_circuit/reagent/storage/big name = "big reagent storage" @@ -280,7 +280,7 @@ complexity = 16 volume = 180 spawn_flags = IC_SPAWN_RESEARCH - origin_tech = list(TECH_MATERIALS = 3, TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_BIO = 2) + origin_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_BIO = 2) /obj/item/integrated_circuit/reagent/storage/scan name = "reagent scanner" @@ -292,7 +292,7 @@ outputs = list("volume used" = IC_PINTYPE_NUMBER,"self reference" = IC_PINTYPE_REF,"list of reagents" = IC_PINTYPE_LIST) activators = list("scan" = IC_PINTYPE_PULSE_IN) spawn_flags = IC_SPAWN_RESEARCH - origin_tech = list(TECH_MATERIALS = 3, TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_BIO = 2) + origin_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_BIO = 2) /obj/item/integrated_circuit/reagent/storage/scan/do_work() var/cont[0] From 46c99cca038e1b86b07c9a6dee247dcf86f22763 Mon Sep 17 00:00:00 2001 From: Cyantime Date: Sun, 7 Jan 2018 22:09:43 -0500 Subject: [PATCH 11/12] Improves medibot speaker switch --- code/modules/mob/living/bot/medbot.dm | 51 ++++++++++++++------------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/code/modules/mob/living/bot/medbot.dm b/code/modules/mob/living/bot/medbot.dm index 635eabf2f20..7812115e76b 100644 --- a/code/modules/mob/living/bot/medbot.dm +++ b/code/modules/mob/living/bot/medbot.dm @@ -54,14 +54,15 @@ if(confirmTarget(H)) target = H if(last_newpatient_speak + 30 SECONDS < world.time) - var/message_options = list( - "Hey, [H.name]! Hold on, I'm coming." = 'sound/voice/medbot/mcoming.ogg', - "Wait [H.name]! I want to help!" = 'sound/voice/medbot/mhelp.ogg', - "[H.name], you appear to be injured!" = 'sound/voice/medbot/minjured.ogg' - ) - var/message = pick(message_options) - say(message) - playsound(loc, message_options[message], 50, 0) + if(vocal) + var/message_options = list( + "Hey, [H.name]! Hold on, I'm coming." = 'sound/voice/medbot/mcoming.ogg', + "Wait [H.name]! I want to help!" = 'sound/voice/medbot/mhelp.ogg', + "[H.name], you appear to be injured!" = 'sound/voice/medbot/minjured.ogg' + ) + var/message = pick(message_options) + say(message) + playsound(loc, message_options[message], 50, 0) custom_emote(1, "points at [H.name].") last_newpatient_speak = world.time break @@ -97,29 +98,31 @@ visible_message("[src] injects [H] with the syringe!") if(H.stat == DEAD) // This is down here because this proc won't be called again due to losing a target because of parent AI loop. - var/death_messages = list( - "No! Stay with me!" = 'sound/voice/medbot/mno.ogg', - "Live, damnit! LIVE!" = 'sound/voice/medbot/mlive.ogg', - "I... I've never lost a patient before. Not today, I mean." = 'sound/voice/medbot/mlost.ogg' - ) - var/message = pick(death_messages) - say(message) - playsound(loc, death_messages[message], 50, 0) target = null + if(vocal) + var/death_messages = list( + "No! Stay with me!" = 'sound/voice/medbot/mno.ogg', + "Live, damnit! LIVE!" = 'sound/voice/medbot/mlive.ogg', + "I... I've never lost a patient before. Not today, I mean." = 'sound/voice/medbot/mlost.ogg' + ) + var/message = pick(death_messages) + say(message) + playsound(loc, death_messages[message], 50, 0) // This is down here for the same reason as above. else t = confirmTarget(H) if(!t) - var/possible_messages = list( - "All patched up!" = 'sound/voice/medbot/mpatchedup.ogg', - "An apple a day keeps me away." = 'sound/voice/medbot/mapple.ogg', - "Feel better soon!" = 'sound/voice/medbot/mfeelbetter.ogg' - ) - var/message = pick(possible_messages) - say(message) - playsound(loc, possible_messages[message], 50, 0) target = null + if(vocal) + var/possible_messages = list( + "All patched up!" = 'sound/voice/medbot/mpatchedup.ogg', + "An apple a day keeps me away." = 'sound/voice/medbot/mapple.ogg', + "Feel better soon!" = 'sound/voice/medbot/mfeelbetter.ogg' + ) + var/message = pick(possible_messages) + say(message) + playsound(loc, possible_messages[message], 50, 0) busy = 0 update_icons() From 24e32713f49c0582aad109acb2a71549839c2feb Mon Sep 17 00:00:00 2001 From: Leshana Date: Fri, 5 Jan 2018 23:47:34 -0500 Subject: [PATCH 12/12] Stop airlocks from sleeping during machine controller process() execution. * Sleeping during process() is BAD BAD BAD! * Since close() sleeps, we make sure to spawn() before calling it. --- code/game/machinery/doors/airlock_control.dm | 10 +++++----- code/game/machinery/doors/door.dm | 3 ++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm index c87e78cfd50..871f42eb7bf 100644 --- a/code/game/machinery/doors/airlock_control.dm +++ b/code/game/machinery/doors/airlock_control.dm @@ -21,8 +21,7 @@ obj/machinery/door/airlock/receive_signal(datum/signal/signal) if(id_tag != signal.data["tag"] || !signal.data["command"]) return cur_command = signal.data["command"] - spawn() - execute_current_command() + execute_current_command() obj/machinery/door/airlock/proc/execute_current_command() if(operating) @@ -31,9 +30,10 @@ obj/machinery/door/airlock/proc/execute_current_command() if (!cur_command) return - do_command(cur_command) - if (command_completed(cur_command)) - cur_command = null + spawn() + do_command(cur_command) + if (command_completed(cur_command)) + cur_command = null obj/machinery/door/airlock/proc/do_command(var/command) switch(command) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 157e73e4a86..6e1d19d4d31 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -79,7 +79,8 @@ if(close_door_at && world.time >= close_door_at) if(autoclose) close_door_at = next_close_time() - close() + spawn(0) + close() else close_door_at = 0