From 75753a4dfd6ccfa4417f6ddcb197e33e2a90ca7d Mon Sep 17 00:00:00 2001 From: oranges Date: Sat, 16 Dec 2017 12:00:40 +1300 Subject: [PATCH 001/104] Defines all subsystem priority values --- code/__DEFINES/subsystems.dm | 34 ++++++++++++++ code/controllers/subsystem.dm | 2 +- code/controllers/subsystem/acid.dm | 2 +- code/controllers/subsystem/air.dm | 2 +- code/controllers/subsystem/fire_burning.dm | 2 +- code/controllers/subsystem/garbage.dm | 2 +- code/controllers/subsystem/icon_smooth.dm | 2 +- code/controllers/subsystem/idlenpcpool.dm | 2 +- code/controllers/subsystem/inbounds.dm | 2 +- code/controllers/subsystem/input.dm | 12 +++++ code/controllers/subsystem/mobs.dm | 2 +- code/controllers/subsystem/npcpool.dm | 2 +- code/controllers/subsystem/orbit.dm | 47 +++++++++++++++++++ code/controllers/subsystem/overlays.dm | 2 +- code/controllers/subsystem/parallax.dm | 2 +- .../subsystem/processing/fields.dm | 2 +- .../subsystem/processing/flightpacks.dm | 2 +- .../subsystem/processing/networks.dm | 39 +++++++++++++++ code/controllers/subsystem/processing/obj.dm | 2 +- .../subsystem/processing/processing.dm | 2 +- .../subsystem/processing/projectiles.dm | 1 - code/controllers/subsystem/radiation.dm | 1 - code/controllers/subsystem/research.dm | 2 +- code/controllers/subsystem/server_maint.dm | 2 +- code/controllers/subsystem/spacedrift.dm | 2 +- code/controllers/subsystem/tgui.dm | 2 +- code/controllers/subsystem/throwing.dm | 2 +- code/controllers/subsystem/ticker.dm | 2 +- 28 files changed, 154 insertions(+), 24 deletions(-) create mode 100644 code/controllers/subsystem/input.dm diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 5a0dded276..39f9722486 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -70,6 +70,40 @@ #define INIT_ORDER_SQUEAK -40 #define INIT_ORDER_PERSISTENCE -100 +// Subsystem fire priority, from lowest to highest priority +// If the subsystem isn't listed here it's either DEFAULT or PROCESS (if it's a processing subsystem child) + +#define FIRE_PRIORITY_IDLE_NPC 1 +#define FIRE_PRIORITY_SERVER_MAINT 1 + +#define FIRE_PRIORITY_GARBAGE 4 +#define FIRE_PRIORITY_RESEARCH 4 +#define FIRE_PRIORITY_AIR 5 +#define FIRE_PRIORITY_NPC 5 +#define FIRE_PRIORITY_PROCESS 6 +#define FIRE_PRIORITY_THROWING 6 +#define FIRE_PRIORITY_FLIGHTPACKS 7 +#define FIRE_PRIORITY_SPACEDRIFT 7 +#define FIRE_PRIOTITY_SMOOTHING 8 +#define FIRE_PRIORITY_ORBIT 8 +#define FIRE_PRIORITY_OBJ 9 +#define FIRE_PRIORUTY_FIELDS 9 +#define FIRE_PRIORITY_ACID 9 +#define FIRE_PRIOTITY_BURNING 9 +#define FIRE_PRIORITY_INBOUNDS 9 + +#define FIRE_PRIORITY_DEFAULT 10 + +#define FIRE_PRIORITY_PARALLAX 11 +#define FIRE_PRIORITY_NETWORKS 12 +#define FIRE_PRIORITY_MOBS 13 +#define FIRE_PRIORITY_TGUI 14 + +#define FIRE_PRIORITY_TICKER 19 +#define FIRE_PRIORITY_OVERLAYS 20 + +#define FIRE_PRIORITY_INPUT 100 // This must always always be the max highest priority. Player input must never be lost. + // SS runlevels #define RUNLEVEL_INIT 0 diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm index 8d450e3a8e..c3779dc98f 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -4,7 +4,7 @@ name = "fire coderbus" //name of the subsystem var/init_order = INIT_ORDER_DEFAULT //order of initialization. Higher numbers are initialized first, lower numbers later. Use defines in __DEFINES/subsystems.dm for easy understanding of order. var/wait = 20 //time to wait (in deciseconds) between each call to fire(). Must be a positive integer. - var/priority = 50 //When mutiple subsystems need to run in the same tick, higher priority subsystems will run first and be given a higher share of the tick before MC_TICK_CHECK triggers a sleep + var/priority = FIRE_PRIORITY_DEFAULT //When mutiple subsystems need to run in the same tick, higher priority subsystems will run first and be given a higher share of the tick before MC_TICK_CHECK triggers a sleep var/flags = 0 //see MC.dm in __DEFINES Most flags must be set on world start to take full effect. (You can also restart the mc to force them to process again) diff --git a/code/controllers/subsystem/acid.dm b/code/controllers/subsystem/acid.dm index a83afb3923..e3c415960b 100644 --- a/code/controllers/subsystem/acid.dm +++ b/code/controllers/subsystem/acid.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(acid) name = "Acid" - priority = 40 + priority = FIRE_PRIORITY_ACID flags = SS_NO_INIT|SS_BACKGROUND runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 59b6fc34ef..1775d470b0 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -9,7 +9,7 @@ SUBSYSTEM_DEF(air) name = "Atmospherics" init_order = INIT_ORDER_AIR - priority = 20 + priority = FIRE_PRIORITY_AIR wait = 5 flags = SS_BACKGROUND runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME diff --git a/code/controllers/subsystem/fire_burning.dm b/code/controllers/subsystem/fire_burning.dm index 73358000f1..db6dc6513e 100644 --- a/code/controllers/subsystem/fire_burning.dm +++ b/code/controllers/subsystem/fire_burning.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(fire_burning) name = "Fire Burning" - priority = 40 + priority = FIRE_PRIOTITY_BURNING flags = SS_NO_INIT|SS_BACKGROUND runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm index 6203f1b474..4faf234ffd 100644 --- a/code/controllers/subsystem/garbage.dm +++ b/code/controllers/subsystem/garbage.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(garbage) name = "Garbage" - priority = 15 + priority = FIRE_PRIORITY_GARBAGE wait = 2 SECONDS flags = SS_POST_FIRE_TIMING|SS_BACKGROUND|SS_NO_INIT runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY diff --git a/code/controllers/subsystem/icon_smooth.dm b/code/controllers/subsystem/icon_smooth.dm index 84df089973..d0ad2ffbc3 100644 --- a/code/controllers/subsystem/icon_smooth.dm +++ b/code/controllers/subsystem/icon_smooth.dm @@ -2,7 +2,7 @@ SUBSYSTEM_DEF(icon_smooth) name = "Icon Smoothing" init_order = INIT_ORDER_ICON_SMOOTHING wait = 1 - priority = 35 + priority = FIRE_PRIOTITY_SMOOTHING flags = SS_TICKER var/list/smooth_queue = list() diff --git a/code/controllers/subsystem/idlenpcpool.dm b/code/controllers/subsystem/idlenpcpool.dm index 49846e6c9d..0ad2becde6 100644 --- a/code/controllers/subsystem/idlenpcpool.dm +++ b/code/controllers/subsystem/idlenpcpool.dm @@ -1,7 +1,7 @@ SUBSYSTEM_DEF(idlenpcpool) name = "Idling NPC Pool" flags = SS_POST_FIRE_TIMING|SS_NO_INIT|SS_BACKGROUND - priority = 10 + priority = FIRE_PRIORITY_IDLE_NPC wait = 60 runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME diff --git a/code/controllers/subsystem/inbounds.dm b/code/controllers/subsystem/inbounds.dm index 16e0f53028..63063c258f 100644 --- a/code/controllers/subsystem/inbounds.dm +++ b/code/controllers/subsystem/inbounds.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(inbounds) name = "Inbounds" - priority = 40 + priority = FIRE_PRIORITY_INBOUNDS flags = SS_NO_INIT runlevels = RUNLEVEL_GAME diff --git a/code/controllers/subsystem/input.dm b/code/controllers/subsystem/input.dm new file mode 100644 index 0000000000..f553d66307 --- /dev/null +++ b/code/controllers/subsystem/input.dm @@ -0,0 +1,12 @@ +SUBSYSTEM_DEF(input) + name = "Input" + wait = 1 //SS_TICKER means this runs every tick + flags = SS_TICKER | SS_NO_INIT + priority = FIRE_PRIORITY_INPUT + runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY + +/datum/controller/subsystem/input/fire() + var/list/clients = GLOB.clients // Let's sing the list cache song + for(var/i in 1 to clients.len) + var/client/C = clients[i] + C.keyLoop() diff --git a/code/controllers/subsystem/mobs.dm b/code/controllers/subsystem/mobs.dm index bcdb1af8ed..14ad19e1ea 100644 --- a/code/controllers/subsystem/mobs.dm +++ b/code/controllers/subsystem/mobs.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(mobs) name = "Mobs" - priority = 100 + priority = FIRE_PRIORITY_MOBS flags = SS_KEEP_TIMING runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME diff --git a/code/controllers/subsystem/npcpool.dm b/code/controllers/subsystem/npcpool.dm index 6ee4626f25..ca050cb9b2 100644 --- a/code/controllers/subsystem/npcpool.dm +++ b/code/controllers/subsystem/npcpool.dm @@ -6,7 +6,7 @@ SUBSYSTEM_DEF(npcpool) name = "NPC Pool" flags = SS_POST_FIRE_TIMING|SS_NO_INIT|SS_BACKGROUND - priority = 20 + priority = FIRE_PRIORITY_NPC runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME var/list/canBeUsed = list() diff --git a/code/controllers/subsystem/orbit.dm b/code/controllers/subsystem/orbit.dm index 6184bb005b..9567fb95a2 100644 --- a/code/controllers/subsystem/orbit.dm +++ b/code/controllers/subsystem/orbit.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD SUBSYSTEM_DEF(orbit) name = "Orbits" priority = 35 @@ -42,3 +43,49 @@ SUBSYSTEM_DEF(orbit) return +======= +SUBSYSTEM_DEF(orbit) + name = "Orbits" + priority = FIRE_PRIORITY_ORBIT + wait = 2 + flags = SS_NO_INIT|SS_TICKER + + var/list/currentrun = list() + var/list/processing = list() + +/datum/controller/subsystem/orbit/stat_entry() + ..("P:[processing.len]") + + +/datum/controller/subsystem/orbit/fire(resumed = 0) + if (!resumed) + src.currentrun = processing.Copy() + + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + + while (currentrun.len) + var/datum/orbit/O = currentrun[currentrun.len] + currentrun.len-- + if (!O) + processing -= O + if (MC_TICK_CHECK) + return + continue + if (!O.orbiter) + qdel(O) + if (MC_TICK_CHECK) + return + continue + if (O.lastprocess >= world.time) //we already checked recently + if (MC_TICK_CHECK) + return + continue + var/targetloc = get_turf(O.orbiting) + if (targetloc != O.lastloc || O.orbiter.loc != targetloc) + O.Check(targetloc) + if (MC_TICK_CHECK) + return + + +>>>>>>> 0244b61... Merge pull request #33537 from ninjanomnom/priority-defines diff --git a/code/controllers/subsystem/overlays.dm b/code/controllers/subsystem/overlays.dm index d0b2e8c303..23edb3e487 100644 --- a/code/controllers/subsystem/overlays.dm +++ b/code/controllers/subsystem/overlays.dm @@ -2,7 +2,7 @@ SUBSYSTEM_DEF(overlays) name = "Overlay" flags = SS_TICKER wait = 1 - priority = 500 + priority = FIRE_PRIORITY_OVERLAYS init_order = INIT_ORDER_OVERLAY runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_SETUP diff --git a/code/controllers/subsystem/parallax.dm b/code/controllers/subsystem/parallax.dm index 39d07ee676..f86e3f8ea7 100644 --- a/code/controllers/subsystem/parallax.dm +++ b/code/controllers/subsystem/parallax.dm @@ -2,7 +2,7 @@ SUBSYSTEM_DEF(parallax) name = "Parallax" wait = 2 flags = SS_POST_FIRE_TIMING | SS_BACKGROUND | SS_NO_INIT - priority = 65 + priority = FIRE_PRIORITY_PARALLAX runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT var/list/currentrun diff --git a/code/controllers/subsystem/processing/fields.dm b/code/controllers/subsystem/processing/fields.dm index 6a878fa142..b6996377b5 100644 --- a/code/controllers/subsystem/processing/fields.dm +++ b/code/controllers/subsystem/processing/fields.dm @@ -1,6 +1,6 @@ PROCESSING_SUBSYSTEM_DEF(fields) name = "Fields" wait = 2 - priority = 40 + priority = FIRE_PRIORUTY_FIELDS flags = SS_KEEP_TIMING | SS_NO_INIT runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME diff --git a/code/controllers/subsystem/processing/flightpacks.dm b/code/controllers/subsystem/processing/flightpacks.dm index 1d85811878..2981789338 100644 --- a/code/controllers/subsystem/processing/flightpacks.dm +++ b/code/controllers/subsystem/processing/flightpacks.dm @@ -1,6 +1,6 @@ PROCESSING_SUBSYSTEM_DEF(flightpacks) name = "Flightpack Movement" - priority = 30 + priority = FIRE_PRIORITY_FLIGHTPACKS wait = 2 stat_tag = "FM" flags = SS_NO_INIT|SS_TICKER|SS_KEEP_TIMING diff --git a/code/controllers/subsystem/processing/networks.dm b/code/controllers/subsystem/processing/networks.dm index 69c5fe1b2b..05c7d17364 100644 --- a/code/controllers/subsystem/processing/networks.dm +++ b/code/controllers/subsystem/processing/networks.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD PROCESSING_SUBSYSTEM_DEF(networks) name = "Networks" priority = 80 @@ -34,3 +35,41 @@ PROCESSING_SUBSYSTEM_DEF(networks) /datum/controller/subsystem/processing/networks/proc/unregister_interface(datum/component/ntnet_interface/D) interfaces_by_id -= D.hardware_id return TRUE +======= +PROCESSING_SUBSYSTEM_DEF(networks) + name = "Networks" + priority = FIRE_PRIORITY_NETWORKS + wait = 1 + stat_tag = "NET" + flags = SS_KEEP_TIMING + init_order = INIT_ORDER_NETWORKS + var/datum/ntnet/station/station_network + var/assignment_hardware_id = HID_RESTRICTED_END + var/list/networks_by_id = list() //id = network + var/list/interfaces_by_id = list() //hardware id = component interface + +/datum/controller/subsystem/processing/networks/Initialize() + station_network = new + station_network.register_map_supremecy() + . = ..() + +/datum/controller/subsystem/processing/networks/proc/register_network(datum/ntnet/network) + if(!networks_by_id[network.network_id]) + networks_by_id[network.network_id] = network + return TRUE + return FALSE + +/datum/controller/subsystem/processing/networks/proc/unregister_network(datum/ntnet/network) + networks_by_id -= network.network_id + return TRUE + +/datum/controller/subsystem/processing/networks/proc/register_interface(datum/component/ntnet_interface/D) + if(!interfaces_by_id[D.hardware_id]) + interfaces_by_id[D.hardware_id] = D + return TRUE + return FALSE + +/datum/controller/subsystem/processing/networks/proc/unregister_interface(datum/component/ntnet_interface/D) + interfaces_by_id -= D.hardware_id + return TRUE +>>>>>>> 0244b61... Merge pull request #33537 from ninjanomnom/priority-defines diff --git a/code/controllers/subsystem/processing/obj.dm b/code/controllers/subsystem/processing/obj.dm index 29fe277232..68f6f16cea 100644 --- a/code/controllers/subsystem/processing/obj.dm +++ b/code/controllers/subsystem/processing/obj.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(obj) name = "Objects" - priority = 40 + priority = FIRE_PRIORITY_OBJ flags = SS_NO_INIT var/list/processing = list() diff --git a/code/controllers/subsystem/processing/processing.dm b/code/controllers/subsystem/processing/processing.dm index 0586975866..f6d45ebff2 100644 --- a/code/controllers/subsystem/processing/processing.dm +++ b/code/controllers/subsystem/processing/processing.dm @@ -2,7 +2,7 @@ SUBSYSTEM_DEF(processing) name = "Processing" - priority = 25 + priority = FIRE_PRIORITY_PROCESS flags = SS_BACKGROUND|SS_POST_FIRE_TIMING|SS_NO_INIT wait = 10 diff --git a/code/controllers/subsystem/processing/projectiles.dm b/code/controllers/subsystem/processing/projectiles.dm index ebf217c79a..cc2399e3df 100644 --- a/code/controllers/subsystem/processing/projectiles.dm +++ b/code/controllers/subsystem/processing/projectiles.dm @@ -1,6 +1,5 @@ PROCESSING_SUBSYSTEM_DEF(projectiles) name = "Projectiles" - priority = 25 wait = 1 stat_tag = "PP" flags = SS_NO_INIT|SS_TICKER|SS_KEEP_TIMING diff --git a/code/controllers/subsystem/radiation.dm b/code/controllers/subsystem/radiation.dm index 0b69e003fc..a6cd658bf6 100644 --- a/code/controllers/subsystem/radiation.dm +++ b/code/controllers/subsystem/radiation.dm @@ -1,7 +1,6 @@ PROCESSING_SUBSYSTEM_DEF(radiation) name = "Radiation" flags = SS_NO_INIT | SS_BACKGROUND - priority = 25 var/list/warned_atoms = list() diff --git a/code/controllers/subsystem/research.dm b/code/controllers/subsystem/research.dm index d1bcf31885..06b5889e58 100644 --- a/code/controllers/subsystem/research.dm +++ b/code/controllers/subsystem/research.dm @@ -2,7 +2,7 @@ SUBSYSTEM_DEF(research) name = "Research" flags = SS_KEEP_TIMING - priority = 15 //My powergame is priority. + priority = FIRE_PRIORITY_RESEARCH wait = 10 init_order = INIT_ORDER_RESEARCH var/list/invalid_design_ids = list() //associative id = number of times diff --git a/code/controllers/subsystem/server_maint.dm b/code/controllers/subsystem/server_maint.dm index cb5a86bd75..dd68443bd7 100644 --- a/code/controllers/subsystem/server_maint.dm +++ b/code/controllers/subsystem/server_maint.dm @@ -4,7 +4,7 @@ SUBSYSTEM_DEF(server_maint) name = "Server Tasks" wait = 6 flags = SS_POST_FIRE_TIMING - priority = 10 + priority = FIRE_PRIORITY_SERVER_MAINT init_order = INIT_ORDER_SERVER_MAINT runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT var/list/currentrun diff --git a/code/controllers/subsystem/spacedrift.dm b/code/controllers/subsystem/spacedrift.dm index 8fe7cbe048..56a6786a20 100644 --- a/code/controllers/subsystem/spacedrift.dm +++ b/code/controllers/subsystem/spacedrift.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(spacedrift) name = "Space Drift" - priority = 30 + priority = FIRE_PRIORITY_SPACEDRIFT wait = 5 flags = SS_NO_INIT|SS_KEEP_TIMING runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME diff --git a/code/controllers/subsystem/tgui.dm b/code/controllers/subsystem/tgui.dm index a9b307bc0d..e03299f57f 100644 --- a/code/controllers/subsystem/tgui.dm +++ b/code/controllers/subsystem/tgui.dm @@ -2,7 +2,7 @@ SUBSYSTEM_DEF(tgui) name = "tgui" wait = 9 flags = SS_NO_INIT - priority = 110 + priority = FIRE_PRIORITY_TGUI runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT var/list/currentrun = list() diff --git a/code/controllers/subsystem/throwing.dm b/code/controllers/subsystem/throwing.dm index 97d84a0d3b..87153fbe93 100644 --- a/code/controllers/subsystem/throwing.dm +++ b/code/controllers/subsystem/throwing.dm @@ -3,7 +3,7 @@ SUBSYSTEM_DEF(throwing) name = "Throwing" - priority = 25 + priority = FIRE_PRIORITY_THROWING wait = 1 flags = SS_NO_INIT|SS_KEEP_TIMING|SS_TICKER runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 881bb7fcb7..d3ef05bdf8 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -4,7 +4,7 @@ SUBSYSTEM_DEF(ticker) name = "Ticker" init_order = INIT_ORDER_TICKER - priority = 200 + priority = FIRE_PRIORITY_TICKER flags = SS_KEEP_TIMING runlevels = RUNLEVEL_LOBBY | RUNLEVEL_SETUP | RUNLEVEL_GAME From 14128362014d209b1224dd79fbaf73c1ed0f7fbd Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sun, 17 Dec 2017 17:51:20 -0600 Subject: [PATCH 002/104] Update orbit.dm --- code/controllers/subsystem/orbit.dm | 49 ----------------------------- 1 file changed, 49 deletions(-) diff --git a/code/controllers/subsystem/orbit.dm b/code/controllers/subsystem/orbit.dm index 9567fb95a2..581b7821b2 100644 --- a/code/controllers/subsystem/orbit.dm +++ b/code/controllers/subsystem/orbit.dm @@ -1,49 +1,3 @@ -<<<<<<< HEAD -SUBSYSTEM_DEF(orbit) - name = "Orbits" - priority = 35 - wait = 2 - flags = SS_NO_INIT|SS_TICKER - - var/list/currentrun = list() - var/list/processing = list() - -/datum/controller/subsystem/orbit/stat_entry() - ..("P:[processing.len]") - - -/datum/controller/subsystem/orbit/fire(resumed = 0) - if (!resumed) - src.currentrun = processing.Copy() - - //cache for sanic speed (lists are references anyways) - var/list/currentrun = src.currentrun - - while (currentrun.len) - var/datum/orbit/O = currentrun[currentrun.len] - currentrun.len-- - if (!O) - processing -= O - if (MC_TICK_CHECK) - return - continue - if (!O.orbiter) - qdel(O) - if (MC_TICK_CHECK) - return - continue - if (O.lastprocess >= world.time) //we already checked recently - if (MC_TICK_CHECK) - return - continue - var/targetloc = get_turf(O.orbiting) - if (targetloc != O.lastloc || O.orbiter.loc != targetloc) - O.Check(targetloc) - if (MC_TICK_CHECK) - return - - -======= SUBSYSTEM_DEF(orbit) name = "Orbits" priority = FIRE_PRIORITY_ORBIT @@ -86,6 +40,3 @@ SUBSYSTEM_DEF(orbit) O.Check(targetloc) if (MC_TICK_CHECK) return - - ->>>>>>> 0244b61... Merge pull request #33537 from ninjanomnom/priority-defines From 69930a192d94a87323d37ebc43e453da68f811ff Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sun, 17 Dec 2017 17:51:28 -0600 Subject: [PATCH 003/104] Update networks.dm --- .../subsystem/processing/networks.dm | 39 ------------------- 1 file changed, 39 deletions(-) diff --git a/code/controllers/subsystem/processing/networks.dm b/code/controllers/subsystem/processing/networks.dm index 05c7d17364..a3f01efd0c 100644 --- a/code/controllers/subsystem/processing/networks.dm +++ b/code/controllers/subsystem/processing/networks.dm @@ -1,41 +1,3 @@ -<<<<<<< HEAD -PROCESSING_SUBSYSTEM_DEF(networks) - name = "Networks" - priority = 80 - wait = 1 - stat_tag = "NET" - flags = SS_KEEP_TIMING - init_order = INIT_ORDER_NETWORKS - var/datum/ntnet/station/station_network - var/assignment_hardware_id = HID_RESTRICTED_END - var/list/networks_by_id = list() //id = network - var/list/interfaces_by_id = list() //hardware id = component interface - -/datum/controller/subsystem/processing/networks/Initialize() - station_network = new - station_network.register_map_supremecy() - . = ..() - -/datum/controller/subsystem/processing/networks/proc/register_network(datum/ntnet/network) - if(!networks_by_id[network.network_id]) - networks_by_id[network.network_id] = network - return TRUE - return FALSE - -/datum/controller/subsystem/processing/networks/proc/unregister_network(datum/ntnet/network) - networks_by_id -= network.network_id - return TRUE - -/datum/controller/subsystem/processing/networks/proc/register_interface(datum/component/ntnet_interface/D) - if(!interfaces_by_id[D.hardware_id]) - interfaces_by_id[D.hardware_id] = D - return TRUE - return FALSE - -/datum/controller/subsystem/processing/networks/proc/unregister_interface(datum/component/ntnet_interface/D) - interfaces_by_id -= D.hardware_id - return TRUE -======= PROCESSING_SUBSYSTEM_DEF(networks) name = "Networks" priority = FIRE_PRIORITY_NETWORKS @@ -72,4 +34,3 @@ PROCESSING_SUBSYSTEM_DEF(networks) /datum/controller/subsystem/processing/networks/proc/unregister_interface(datum/component/ntnet_interface/D) interfaces_by_id -= D.hardware_id return TRUE ->>>>>>> 0244b61... Merge pull request #33537 from ninjanomnom/priority-defines From 8cbad06f3543e43607b72e17af7f5d98856643a8 Mon Sep 17 00:00:00 2001 From: vuonojenmustaturska Date: Mon, 18 Dec 2017 03:35:37 +0200 Subject: [PATCH 004/104] Advanced mob laziness --- code/__DEFINES/mobs.dm | 1 + code/_globalvars/lists/mobs.dm | 2 +- code/controllers/subsystem/idlenpcpool.dm | 16 +++++++++- code/modules/mob/living/living.dm | 7 +++++ .../living/simple_animal/hostile/hostile.dm | 29 +++++++++++++++++-- .../mob/living/simple_animal/simple_animal.dm | 23 +++++++++++++-- 6 files changed, 71 insertions(+), 7 deletions(-) diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 49e3c996fe..1cc5f7021d 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -108,6 +108,7 @@ #define AI_ON 1 #define AI_IDLE 2 #define AI_OFF 3 +#define AI_Z_OFF 4 //determines if a mob can smash through it #define ENVIRONMENT_SMASH_NONE 0 diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index 89e4481284..c2acea2753 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -22,7 +22,7 @@ GLOBAL_LIST_EMPTY(carbon_list) //all instances of /mob/living/carbon and subt GLOBAL_LIST_EMPTY(ai_list) GLOBAL_LIST_EMPTY(pai_list) GLOBAL_LIST_EMPTY(available_ai_shells) -GLOBAL_LIST_INIT(simple_animals, list(list(),list(),list())) // One for each AI_* status define +GLOBAL_LIST_INIT(simple_animals, list(list(),list(),list(),list())) // One for each AI_* status define GLOBAL_LIST_EMPTY(spidermobs) //all sentient spider mobs GLOBAL_LIST_EMPTY(bots_list) diff --git a/code/controllers/subsystem/idlenpcpool.dm b/code/controllers/subsystem/idlenpcpool.dm index 49846e6c9d..18c3b3cf30 100644 --- a/code/controllers/subsystem/idlenpcpool.dm +++ b/code/controllers/subsystem/idlenpcpool.dm @@ -1,15 +1,26 @@ SUBSYSTEM_DEF(idlenpcpool) name = "Idling NPC Pool" +<<<<<<< HEAD flags = SS_POST_FIRE_TIMING|SS_NO_INIT|SS_BACKGROUND priority = 10 +======= + flags = SS_POST_FIRE_TIMING|SS_BACKGROUND + priority = FIRE_PRIORITY_IDLE_NPC +>>>>>>> d03e4ef... Advanced mob laziness (#33574) wait = 60 runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME var/list/currentrun = list() + var/static/list/idle_mobs_by_zlevel[][] /datum/controller/subsystem/idlenpcpool/stat_entry() var/list/idlelist = GLOB.simple_animals[AI_IDLE] - ..("IdleNPCS:[idlelist.len]") + var/list/zlist = GLOB.simple_animals[AI_Z_OFF] + ..("IdleNPCS:[idlelist.len]|Z:[zlist.len]") + +/datum/controller/subsystem/idlenpcpool/Initialize(start_timeofday) + idle_mobs_by_zlevel = new /list(world.maxz,0) + return ..() /datum/controller/subsystem/idlenpcpool/fire(resumed = FALSE) @@ -24,6 +35,9 @@ SUBSYSTEM_DEF(idlenpcpool) while(currentrun.len) var/mob/living/simple_animal/SA = currentrun[currentrun.len] --currentrun.len + if (!SA) + GLOB.simple_animals[AI_IDLE] -= SA + continue if(!SA.ckey) if(SA.stat != DEAD) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index f589ecbb20..04c9fef63b 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1048,6 +1048,13 @@ if (client) if (new_z) SSmobs.clients_by_zlevel[new_z] += src + for (var/I in length(SSidlenpcpool.idle_mobs_by_zlevel[new_z]) to 1 step -1) //Backwards loop because we're removing (guarantees optimal rather than worst-case performance), it's fine to use .len here but doesn't compile on 511 + var/mob/living/simple_animal/SA = SSidlenpcpool.idle_mobs_by_zlevel[new_z][I] + if (SA) + SA.toggle_ai(AI_ON) // Guarantees responsiveness for when appearing right next to mobs + else + SSidlenpcpool.idle_mobs_by_zlevel[new_z] -= SA + registered_z = new_z else registered_z = null diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 10d9fd93d7..f5e69dc7a0 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -288,7 +288,7 @@ if(search_objects)//Turn off item searching and ignore whatever item we were looking at, we're more concerned with fight or flight target = null LoseSearchObjects() - if(AIStatus == AI_IDLE) + if(AIStatus != AI_ON && AIStatus != AI_OFF) toggle_ai(AI_ON) FindTarget() else if(target != null && prob(40))//No more pulling a mob forever and having a second player attack it, it can switch targets now if it finds a more suitable one @@ -479,6 +479,31 @@ mob/living/simple_animal/hostile/proc/DestroySurroundings() // for use with mega /mob/living/simple_animal/hostile/consider_wakeup() ..() - if(AIStatus == AI_IDLE && FindTarget(ListTargets(), 1)) + var/list/tlist + var/turf/T = get_turf(src) + + if (!T) + return + + if (!length(SSmobs.clients_by_zlevel[T.z])) // It's fine to use .len here but doesn't compile on 511 + toggle_ai(AI_Z_OFF) + return + + if (isturf(T) && !(T.z in GLOB.station_z_levels)) + tlist = ListTargetsLazy(T.z) + else + tlist = ListTargets() + + if(AIStatus == AI_IDLE && FindTarget(tlist, 1)) toggle_ai(AI_ON) +/mob/living/simple_animal/hostile/proc/ListTargetsLazy(var/_Z)//Step 1, find out what we can see + var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/mecha, /obj/structure/destructible/clockwork/ocular_warden)) + . = list() + for (var/I in SSmobs.clients_by_zlevel[_Z]) + var/mob/M = I + if (get_dist(M, src) < vision_range) + if (isturf(M.loc)) + . += M + else if (M.loc.type in hostile_machines) + . += M.loc diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index a4851bb432..020e105d9a 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -82,14 +82,18 @@ var/dextrous_hud_type = /datum/hud/dextrous var/datum/personal_crafting/handcrafting - var/AIStatus = AI_ON //The Status of our AI, can be set to AI_ON (On, usual processing), AI_IDLE (Will not process, but will return to AI_ON if an enemy comes near), AI_OFF (Off, Not processing ever) + var/AIStatus = AI_ON //The Status of our AI, can be set to AI_ON (On, usual processing), AI_IDLE (Will not process, but will return to AI_ON if an enemy comes near), AI_OFF (Off, Not processing ever), AI_Z_OFF (Temporarily off due to nonpresence of players) var/shouldwakeup = FALSE //convenience var for forcibly waking up an idling AI on next check. //domestication var/tame = 0 +<<<<<<< HEAD no_vore = TRUE +======= + var/my_z // I don't want to confuse this with client registered_z +>>>>>>> d03e4ef... Advanced mob laziness (#33574) /mob/living/simple_animal/Initialize() . = ..() @@ -544,7 +548,13 @@ /mob/living/simple_animal/proc/toggle_ai(togglestatus) if (AIStatus != togglestatus) - if (togglestatus > 0 && togglestatus < 4) + if (togglestatus > 0 && togglestatus < 5) + if (togglestatus == AI_Z_OFF || AIStatus == AI_Z_OFF) + var/turf/T = get_turf(src) + if (AIStatus == AI_Z_OFF) + SSidlenpcpool.idle_mobs_by_zlevel[T.z] -= src + else + SSidlenpcpool.idle_mobs_by_zlevel[T.z] += src GLOB.simple_animals[AIStatus] -= src GLOB.simple_animals[togglestatus] += src AIStatus = togglestatus @@ -559,4 +569,11 @@ . = ..() if(!ckey && !stat)//Not unconscious if(AIStatus == AI_IDLE) - toggle_ai(AI_ON) \ No newline at end of file + toggle_ai(AI_ON) + + +/mob/living/simple_animal/onTransitZ(old_z, new_z) + ..() + if (AIStatus == AI_Z_OFF) + SSidlenpcpool[old_z] -= src + toggle_ai(initial(AIStatus)) \ No newline at end of file From 2205500863c8023e82e14698518e2ec53b8d2d1c Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 18 Dec 2017 15:15:21 -0600 Subject: [PATCH 005/104] Update idlenpcpool.dm --- code/controllers/subsystem/idlenpcpool.dm | 5 ----- 1 file changed, 5 deletions(-) diff --git a/code/controllers/subsystem/idlenpcpool.dm b/code/controllers/subsystem/idlenpcpool.dm index 18c3b3cf30..a15237e5a7 100644 --- a/code/controllers/subsystem/idlenpcpool.dm +++ b/code/controllers/subsystem/idlenpcpool.dm @@ -1,12 +1,7 @@ SUBSYSTEM_DEF(idlenpcpool) name = "Idling NPC Pool" -<<<<<<< HEAD - flags = SS_POST_FIRE_TIMING|SS_NO_INIT|SS_BACKGROUND - priority = 10 -======= flags = SS_POST_FIRE_TIMING|SS_BACKGROUND priority = FIRE_PRIORITY_IDLE_NPC ->>>>>>> d03e4ef... Advanced mob laziness (#33574) wait = 60 runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME From 8fde63e016f8bc0d65288c7020b4fb64242758e9 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 18 Dec 2017 15:15:34 -0600 Subject: [PATCH 006/104] Update simple_animal.dm --- code/modules/mob/living/simple_animal/simple_animal.dm | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 020e105d9a..04735178d3 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -88,12 +88,8 @@ //domestication var/tame = 0 - -<<<<<<< HEAD no_vore = TRUE -======= var/my_z // I don't want to confuse this with client registered_z ->>>>>>> d03e4ef... Advanced mob laziness (#33574) /mob/living/simple_animal/Initialize() . = ..() @@ -576,4 +572,4 @@ ..() if (AIStatus == AI_Z_OFF) SSidlenpcpool[old_z] -= src - toggle_ai(initial(AIStatus)) \ No newline at end of file + toggle_ai(initial(AIStatus)) From 0f2fd05e87ffd5efe39a7e9d2fd73ea419d0e500 Mon Sep 17 00:00:00 2001 From: duncathan salt Date: Tue, 19 Dec 2017 08:02:54 -0600 Subject: [PATCH 007/104] removes silly garbage defines --- code/__DEFINES/atmospherics.dm | 28 +------- code/game/objects/effects/spiders.dm | 2 +- code/modules/admin/verbs/atmosdebug.dm | 4 +- .../atmospherics/machinery/atmosmachinery.dm | 27 ++++--- .../components/binary_devices/circulator.dm | 4 +- .../components/binary_devices/dp_vent_pump.dm | 12 ++-- .../components/binary_devices/passive_gate.dm | 4 +- .../components/binary_devices/pump.dm | 4 +- .../components/binary_devices/valve.dm | 2 +- .../components/binary_devices/volume_pump.dm | 9 ++- .../machinery/components/components_base.dm | 70 ++++++++----------- .../components/trinary_devices/filter.dm | 10 +-- .../components/trinary_devices/mixer.dm | 20 +++--- .../components/unary_devices/cryo.dm | 20 +++--- .../unary_devices/heat_exchanger.dm | 8 +-- .../unary_devices/outlet_injector.dm | 11 ++- .../unary_devices/portables_connector.dm | 2 +- .../components/unary_devices/tank.dm | 4 +- .../components/unary_devices/thermomachine.dm | 14 ++-- .../components/unary_devices/vent_pump.dm | 8 +-- .../components/unary_devices/vent_scrubber.dm | 6 +- .../atmospherics/machinery/datum_pipeline.dm | 4 +- .../machinery/pipes/heat_exchange/manifold.dm | 12 ++-- .../machinery/pipes/layermanifold.dm | 12 ++-- .../atmospherics/machinery/pipes/manifold.dm | 6 +- .../machinery/pipes/manifold4w.dm | 6 +- .../atmospherics/machinery/pipes/pipes.dm | 17 +++-- .../machinery/portable/canister.dm | 8 +-- .../portable/portable_atmospherics.dm | 2 +- .../atmospherics/machinery/portable/pump.dm | 12 ++-- code/modules/events/alien_infestation.dm | 2 +- code/modules/events/spider_infestation.dm | 2 +- code/modules/events/vent_clog.dm | 2 +- code/modules/mob/living/ventcrawling.dm | 2 +- code/modules/power/generator.dm | 12 ++-- code/modules/shuttle/on_move.dm | 10 +-- code/modules/shuttle/shuttle_rotate.dm | 12 ++-- 37 files changed, 184 insertions(+), 206 deletions(-) diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index dacd09c995..e52dfd8a24 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -123,38 +123,12 @@ #define MAX_OUTPUT_PRESSURE 4500 // (kPa) What pressure pumps and powered equipment max out at. #define MAX_TRANSFER_RATE 200 // (L/s) Maximum speed powered equipment can work at. -//used for device_type vars; used by DEVICE_TYPE_LOOP +//used for device_type vars #define UNARY 1 #define BINARY 2 #define TRINARY 3 #define QUATERNARY 4 -//TODO: finally remove this bullshit -//this is the standard for loop used by all sorts of atmos machinery procs -#define DEVICE_TYPE_LOOP var/I in 1 to device_type - -//defines for the various machinery lists -//NODE_I, AIR_I, PARENT_I are used within DEVICE_TYPE_LOOP - -//nodes list - all atmos machinery -#define NODE1 nodes[1] -#define NODE2 nodes[2] -#define NODE3 nodes[3] -#define NODE4 nodes[4] -#define NODE_I nodes[I] - -//airs list - components only -#define AIR1 airs[1] -#define AIR2 airs[2] -#define AIR3 airs[3] -#define AIR_I airs[I] - -//parents list - components only -#define PARENT1 parents[1] -#define PARENT2 parents[2] -#define PARENT3 parents[3] -#define PARENT_I parents[I] - //TANKS #define TANK_MELT_TEMPERATURE 1000000 //temperature in kelvins at which a tank will start to melt #define TANK_LEAK_PRESSURE (30.*ONE_ATMOSPHERE) //Tank starts leaking diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 4ecba7c982..83d24a26ee 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -133,7 +133,7 @@ else if(entry_vent) if(get_dist(src, entry_vent) <= 1) var/list/vents = list() - var/datum/pipeline/entry_vent_parent = entry_vent.PARENT1 + var/datum/pipeline/entry_vent_parent = entry_vent.parents[1] for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in entry_vent_parent.other_atmosmch) vents.Add(temp_vent) if(!vents.len) diff --git a/code/modules/admin/verbs/atmosdebug.dm b/code/modules/admin/verbs/atmosdebug.dm index 05c839d3fd..8c564551ba 100644 --- a/code/modules/admin/verbs/atmosdebug.dm +++ b/code/modules/admin/verbs/atmosdebug.dm @@ -13,12 +13,12 @@ //Manifolds for (var/obj/machinery/atmospherics/pipe/manifold/pipe in GLOB.machines) - if (!pipe.NODE1 || !pipe.NODE2 || !pipe.NODE3) + if (!pipe.nodes[1] || !pipe.nodes[2] || !pipe.nodes[3]) to_chat(usr, "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])") //Pipes for (var/obj/machinery/atmospherics/pipe/simple/pipe in GLOB.machines) - if (!pipe.NODE1 || !pipe.NODE2) + if (!pipe.nodes[1] || !pipe.nodes[2]) to_chat(usr, "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])") /client/proc/powerdebug() diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index 6c335bf896..2a5d792a1b 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -60,8 +60,8 @@ Pipelines + Other Objects -> Pipe network SetInitDirections() /obj/machinery/atmospherics/Destroy() - for(DEVICE_TYPE_LOOP) - nullifyNode(I) + for(var/i in 1 to device_type) + nullifyNode(i) SSair.atmos_machinery -= src @@ -79,22 +79,22 @@ Pipelines + Other Objects -> Pipe network // Called to build a network from this node return -/obj/machinery/atmospherics/proc/nullifyNode(I) - if(NODE_I) - var/obj/machinery/atmospherics/N = NODE_I +/obj/machinery/atmospherics/proc/nullifyNode(i) + if(nodes[i]) + var/obj/machinery/atmospherics/N = nodes[i] N.disconnect(src) - NODE_I = null + nodes[i] = null /obj/machinery/atmospherics/proc/getNodeConnects() var/list/node_connects = list() node_connects.len = device_type - for(DEVICE_TYPE_LOOP) + for(var/i in 1 to device_type) for(var/D in GLOB.cardinals) if(D & GetInitDirections()) if(D in node_connects) continue - node_connects[I] = D + node_connects[i] = D break return node_connects @@ -109,10 +109,10 @@ Pipelines + Other Objects -> Pipe network if(!node_connects) //for pipes where order of nodes doesn't matter node_connects = getNodeConnects() - for(DEVICE_TYPE_LOOP) - for(var/obj/machinery/atmospherics/target in get_step(src,node_connects[I])) - if(can_be_node(target, I)) - NODE_I = target + for(var/i in 1 to device_type) + for(var/obj/machinery/atmospherics/target in get_step(src,node_connects[i])) + if(can_be_node(target, i)) + nodes[i] = target break update_icon() @@ -171,8 +171,7 @@ Pipelines + Other Objects -> Pipe network if(istype(reference, /obj/machinery/atmospherics/pipe)) var/obj/machinery/atmospherics/pipe/P = reference P.destroy_network() - var/I = nodes.Find(reference) - NODE_I = null + nodes[nodes.Find(reference)] = null update_icon() /obj/machinery/atmospherics/update_icon() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm index ef6dd85afa..63af8e8aa2 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm @@ -21,8 +21,8 @@ /obj/machinery/atmospherics/components/binary/circulator/proc/return_transfer_air() - var/datum/gas_mixture/air1 = AIR1 - var/datum/gas_mixture/air2 = AIR2 + var/datum/gas_mixture/air1 = airs[1] + var/datum/gas_mixture/air2 = airs[2] var/output_starting_pressure = air1.return_pressure() var/input_starting_pressure = air2.return_pressure() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm index f8204947f1..db42819b87 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm @@ -49,8 +49,8 @@ Acts like a normal vent, but has an input AND output. /obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/New() ..() - var/datum/gas_mixture/air1 = AIR1 - var/datum/gas_mixture/air2 = AIR2 + var/datum/gas_mixture/air1 = airs[1] + var/datum/gas_mixture/air2 = airs[2] air1.volume = 1000 air2.volume = 1000 @@ -73,8 +73,8 @@ Acts like a normal vent, but has an input AND output. if(!on) return - var/datum/gas_mixture/air1 = AIR1 - var/datum/gas_mixture/air2 = AIR2 + var/datum/gas_mixture/air1 = airs[1] + var/datum/gas_mixture/air2 = airs[2] var/datum/gas_mixture/environment = loc.return_air() var/environment_pressure = environment.return_pressure() @@ -99,7 +99,7 @@ Acts like a normal vent, but has an input AND output. loc.assume_air(removed) air_update_turf() - var/datum/pipeline/parent1 = PARENT1 + var/datum/pipeline/parent1 = parents[1] parent1.update = 1 else //external -> output @@ -122,7 +122,7 @@ Acts like a normal vent, but has an input AND output. air2.merge(removed) air_update_turf() - var/datum/pipeline/parent2 = PARENT2 + var/datum/pipeline/parent2 = parents[2] parent2.update = 1 //Radio remote control diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm index 86c5375d07..e5ae5c718e 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm @@ -41,8 +41,8 @@ Passive gate is similar to the regular pump except: if(!on) return - var/datum/gas_mixture/air1 = AIR1 - var/datum/gas_mixture/air2 = AIR2 + var/datum/gas_mixture/air1 = airs[1] + var/datum/gas_mixture/air2 = airs[2] var/output_starting_pressure = air2.return_pressure() var/input_starting_pressure = air1.return_pressure() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index 97bba0e534..32933f9275 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -50,8 +50,8 @@ Thus, the two variables affect pump operation are set in New(): if(!on || !is_operational()) return - var/datum/gas_mixture/air1 = AIR1 - var/datum/gas_mixture/air2 = AIR2 + var/datum/gas_mixture/air1 = airs[1] + var/datum/gas_mixture/air2 = airs[2] var/output_starting_pressure = air2.return_pressure() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm index e613012e82..1a9c76cb4d 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm @@ -31,7 +31,7 @@ It's like a regular ol' straight pipe, but you can turn it on and off. open = TRUE update_icon_nopipes() update_parents() - var/datum/pipeline/parent1 = PARENT1 + var/datum/pipeline/parent1 = parents[1] parent1.reconcile_air() investigate_log("was opened by [usr ? key_name(usr) : "a remote signal"]", INVESTIGATE_ATMOS) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm index b154c0d3e4..d7b8073c87 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm @@ -48,8 +48,8 @@ Thus, the two variables affect pump operation are set in New(): if(!on || !is_operational()) return - var/datum/gas_mixture/air1 = AIR1 - var/datum/gas_mixture/air2 = AIR2 + var/datum/gas_mixture/air1 = airs[1] + var/datum/gas_mixture/air2 = airs[2] // Pump mechanism just won't do anything if the pressure is too high/too low @@ -151,8 +151,13 @@ Thus, the two variables affect pump operation are set in New(): on = !on if("set_transfer_rate" in signal.data) +<<<<<<< HEAD var/datum/gas_mixture/air1 = AIR1 transfer_rate = Clamp(text2num(signal.data["set_transfer_rate"]),0,air1.volume) +======= + var/datum/gas_mixture/air1 = airs[1] + transfer_rate = CLAMP(text2num(signal.data["set_transfer_rate"]),0,air1.volume) +>>>>>>> 6a7dbaa... removes silly garbage defines (#33621) if(on != old_on) investigate_log("was turned [on ? "on" : "off"] by a remote signal", INVESTIGATE_ATMOS) diff --git a/code/modules/atmospherics/machinery/components/components_base.dm b/code/modules/atmospherics/machinery/components/components_base.dm index 5fb4611d92..e7f4d7844a 100644 --- a/code/modules/atmospherics/machinery/components/components_base.dm +++ b/code/modules/atmospherics/machinery/components/components_base.dm @@ -15,10 +15,10 @@ On top of that, now people can add component-speciic procs/vars if they want! airs = new(device_type) ..() - for(DEVICE_TYPE_LOOP) + for(var/i in 1 to device_type) var/datum/gas_mixture/A = new A.volume = 200 - AIR_I = A + airs[i] = A /* Iconnery */ @@ -42,9 +42,9 @@ Iconnery var/connected = 0 //Direction bitset - for(DEVICE_TYPE_LOOP) //adds intact pieces - if(NODE_I) - connected |= icon_addintact(NODE_I) + for(var/i in 1 to device_type) //adds intact pieces + if(nodes[i]) + connected |= icon_addintact(nodes[i]) icon_addbroken(connected) //adds broken pieces @@ -53,52 +53,45 @@ Iconnery Pipenet stuff; housekeeping */ -/obj/machinery/atmospherics/components/nullifyNode(I) +/obj/machinery/atmospherics/components/nullifyNode(i) ..() - if(NODE_I) - nullifyPipenet(PARENT_I) - qdel(AIR_I) - AIR_I = null + if(nodes[i]) + nullifyPipenet(parents[i]) + QDEL_NULL(airs[i]) /obj/machinery/atmospherics/components/on_construction() ..() update_parents() /obj/machinery/atmospherics/components/build_network() - for(DEVICE_TYPE_LOOP) - if(!PARENT_I) - PARENT_I = new /datum/pipeline() - var/datum/pipeline/P = PARENT_I + for(var/i in 1 to device_type) + if(!parents[i]) + parents[i] = new /datum/pipeline() + var/datum/pipeline/P = parents[i] P.build_pipeline(src) /obj/machinery/atmospherics/components/proc/nullifyPipenet(datum/pipeline/reference) - var/I = parents.Find(reference) - reference.other_airs -= AIR_I + var/i = parents.Find(reference) + reference.other_airs -= airs[i] reference.other_atmosmch -= src - PARENT_I = null + parents[i] = null /obj/machinery/atmospherics/components/returnPipenetAir(datum/pipeline/reference) - var/I = parents.Find(reference) - return AIR_I + return airs[parents.Find(reference)] /obj/machinery/atmospherics/components/pipeline_expansion(datum/pipeline/reference) if(reference) - var/I = parents.Find(reference) - return list(NODE_I) - else - return ..() + return list(nodes[parents.Find(reference)]) + return ..() /obj/machinery/atmospherics/components/setPipenet(datum/pipeline/reference, obj/machinery/atmospherics/A) - var/I = nodes.Find(A) - PARENT_I = reference + parents[nodes.Find(A)] = reference -/obj/machinery/atmospherics/components/returnPipenet(obj/machinery/atmospherics/A = NODE1) //returns PARENT1 if called without argument - var/I = nodes.Find(A) - return PARENT_I +/obj/machinery/atmospherics/components/returnPipenet(obj/machinery/atmospherics/A = nodes[1]) //returns parents[1] if called without argument + return parents[nodes.Find(A)] /obj/machinery/atmospherics/components/replacePipenet(datum/pipeline/Old, datum/pipeline/New) - var/I = parents.Find(Old) - PARENT_I = New + parents[parents.Find(Old)] = New /obj/machinery/atmospherics/components/unsafe_pressure_release(var/mob/user, var/pressures) ..() @@ -109,15 +102,15 @@ Pipenet stuff; housekeeping var/datum/gas_mixture/environment = T.return_air() var/lost = null var/times_lost = 0 - for(DEVICE_TYPE_LOOP) - var/datum/gas_mixture/air = AIR_I + for(var/i in 1 to device_type) + var/datum/gas_mixture/air = airs[i] lost += pressures*environment.volume/(air.temperature * R_IDEAL_GAS_EQUATION) times_lost++ var/shared_loss = lost/times_lost var/datum/gas_mixture/to_release - for(DEVICE_TYPE_LOOP) - var/datum/gas_mixture/air = AIR_I + for(var/i in 1 to device_type) + var/datum/gas_mixture/air = airs[i] if(!to_release) to_release = air.remove(shared_loss) continue @@ -136,8 +129,8 @@ Helpers */ /obj/machinery/atmospherics/components/proc/update_parents() - for(DEVICE_TYPE_LOOP) - var/datum/pipeline/parent = PARENT_I + for(var/i in 1 to device_type) + var/datum/pipeline/parent = parents[i] if(!parent) throw EXCEPTION("Component is missing a pipenet! Rebuilding...") build_network() @@ -145,8 +138,8 @@ Helpers /obj/machinery/atmospherics/components/returnPipenets() . = list() - for(DEVICE_TYPE_LOOP) - . += returnPipenet(NODE_I) + for(var/i in 1 to device_type) + . += returnPipenet(nodes[i]) /* UI Stuff @@ -157,4 +150,3 @@ UI Stuff return ..() to_chat(user, "Access denied.") return UI_CLOSE - diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm index 4baeb3dd3e..0579ef2357 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm @@ -50,7 +50,7 @@ ..() /obj/machinery/atmospherics/components/trinary/filter/update_icon_nopipes() - if(on && NODE1 && NODE2 && NODE3 && is_operational()) + if(on && nodes[1] && nodes[2] && nodes[3] && is_operational()) icon_state = "filter_on[flipped?"_f":""]" return icon_state = "filter_off[flipped?"_f":""]" @@ -63,12 +63,12 @@ /obj/machinery/atmospherics/components/trinary/filter/process_atmos() ..() - if(!on || !(NODE1 && NODE2 && NODE3) || !is_operational()) + if(!on || !(nodes[1] && nodes[2] && nodes[3]) || !is_operational()) return - var/datum/gas_mixture/air1 = AIR1 - var/datum/gas_mixture/air2 = AIR2 - var/datum/gas_mixture/air3 = AIR3 + var/datum/gas_mixture/air1 = airs[1] + var/datum/gas_mixture/air2 = airs[2] + var/datum/gas_mixture/air3 = airs[3] var/output_starting_pressure = air3.return_pressure() diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm index b706cd3cd9..bdaadd0ff6 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm @@ -33,7 +33,7 @@ return ..() /obj/machinery/atmospherics/components/trinary/mixer/update_icon_nopipes() - if(on && NODE1 && NODE2 && NODE3 && is_operational()) + if(on && nodes[1] && nodes[2] && nodes[3] && is_operational()) icon_state = "mixer_on[flipped?"_f":""]" return icon_state = "mixer_off[flipped?"_f":""]" @@ -46,18 +46,18 @@ /obj/machinery/atmospherics/components/trinary/mixer/New() ..() - var/datum/gas_mixture/air3 = AIR3 + var/datum/gas_mixture/air3 = airs[3] air3.volume = 300 - AIR3 = air3 + airs[3] = air3 /obj/machinery/atmospherics/components/trinary/mixer/process_atmos() ..() - if(!on || !(NODE1 && NODE2 && NODE3) && !is_operational()) + if(!on || !(nodes[1] && nodes[2] && nodes[3]) && !is_operational()) return - var/datum/gas_mixture/air1 = AIR1 - var/datum/gas_mixture/air2 = AIR2 - var/datum/gas_mixture/air3 = AIR3 + var/datum/gas_mixture/air1 = airs[1] + var/datum/gas_mixture/air2 = airs[2] + var/datum/gas_mixture/air3 = airs[3] var/output_starting_pressure = air3.return_pressure() @@ -103,14 +103,14 @@ air3.merge(removed2) if(transfer_moles1) - var/datum/pipeline/parent1 = PARENT1 + var/datum/pipeline/parent1 = parents[1] parent1.update = TRUE if(transfer_moles2) - var/datum/pipeline/parent2 = PARENT2 + var/datum/pipeline/parent2 = parents[2] parent2.update = TRUE - var/datum/pipeline/parent3 = PARENT3 + var/datum/pipeline/parent3 = parents[3] parent3.update = TRUE return diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index a7123dd97b..74c2302ee9 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -174,7 +174,7 @@ open_machine() return - var/datum/gas_mixture/air1 = AIR1 + var/datum/gas_mixture/air1 = airs[1] if(air1.gases.len) if(mob_occupant.bodytemperature < T0C) // Sleepytime. Why? More cryo magic. @@ -196,9 +196,9 @@ if(!on) return - var/datum/gas_mixture/air1 = AIR1 + var/datum/gas_mixture/air1 = airs[1] - if(!NODE1 || !AIR1 || !air1.gases.len || air1.gases[/datum/gas/oxygen][MOLES] < 5) // Turn off if the machine won't work. + if(!nodes[1] || !airs[1] || !air1.gases.len || air1.gases[/datum/gas/oxygen][MOLES] < 5) // Turn off if the machine won't work. on = FALSE update_icon() return @@ -348,8 +348,12 @@ else data["occupant"]["temperaturestatus"] = "bad" +<<<<<<< HEAD var/datum/gas_mixture/air1 = AIR1 +======= + var/datum/gas_mixture/air1 = airs[1] +>>>>>>> 6a7dbaa... removes silly garbage defines (#33621) data["cellTemperature"] = round(air1.temperature, 1) data["isBeakerLoaded"] = beaker ? TRUE : FALSE @@ -401,7 +405,7 @@ return 0 // you can't see the pipe network when inside a cryo cell. /obj/machinery/atmospherics/components/unary/cryo_cell/return_temperature() - var/datum/gas_mixture/G = AIR1 + var/datum/gas_mixture/G = airs[1] if(G.total_moles() > 10) return G.temperature @@ -411,13 +415,13 @@ . = ..() if(.) SetInitDirections() - var/obj/machinery/atmospherics/node = NODE1 + var/obj/machinery/atmospherics/node = nodes[1] if(node) node.disconnect(src) - NODE1 = null - nullifyPipenet(PARENT1) + nodes[1] = null + nullifyPipenet(parents[1]) atmosinit() - node = NODE1 + node = nodes[1] if(node) node.atmosinit() node.addMember(src) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm b/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm index c8daf29ad3..bd81d5c876 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm @@ -15,9 +15,9 @@ pipe_state = "heunary" /obj/machinery/atmospherics/components/unary/heat_exchanger/update_icon() - if(NODE1) + if(nodes[1]) icon_state = "he_intact" - var/obj/machinery/atmospherics/node = NODE1 + var/obj/machinery/atmospherics/node = nodes[1] add_atom_colour(node.color, FIXED_COLOUR_PRIORITY) else icon_state = "he_exposed" @@ -42,8 +42,8 @@ update_cycle = SSair.times_fired partner.update_cycle = SSair.times_fired - var/datum/gas_mixture/air_contents = AIR1 - var/datum/gas_mixture/partner_air_contents = partner.AIR1 + var/datum/gas_mixture/air_contents = airs[1] + var/datum/gas_mixture/partner_air_contents = partner.airs[1] var/air_heat_capacity = air_contents.heat_capacity() var/other_air_heat_capacity = partner_air_contents.heat_capacity() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm index 37bfb5d952..e458e2a3fa 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm @@ -32,7 +32,7 @@ if(showpipe) add_overlay(getpipeimage(icon, "inje_cap", initialize_directions)) - if(!NODE1 || !on || !is_operational()) + if(!nodes[1] || !on || !is_operational()) icon_state = "inje_off" return @@ -53,7 +53,7 @@ if(!on || !is_operational()) return - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] if(air_contents.temperature > 0) var/transfer_moles = (air_contents.return_pressure())*volume_rate/(air_contents.temperature * R_IDEAL_GAS_EQUATION) @@ -70,7 +70,7 @@ if(on || injecting || !is_operational()) return - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] injecting = 1 @@ -130,8 +130,13 @@ if("set_volume_rate" in signal.data) var/number = text2num(signal.data["set_volume_rate"]) +<<<<<<< HEAD var/datum/gas_mixture/air_contents = AIR1 volume_rate = Clamp(number, 0, air_contents.volume) +======= + var/datum/gas_mixture/air_contents = airs[1] + volume_rate = CLAMP(number, 0, air_contents.volume) +>>>>>>> 6a7dbaa... removes silly garbage defines (#33621) if("status" in signal.data) spawn(2) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm b/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm index 051f3136ee..871aaeea13 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm @@ -13,7 +13,7 @@ /obj/machinery/atmospherics/components/unary/portables_connector/New() ..() - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] air_contents.volume = 0 diff --git a/code/modules/atmospherics/machinery/components/unary_devices/tank.dm b/code/modules/atmospherics/machinery/components/unary_devices/tank.dm index ec1fcdfc52..cf93f94390 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/tank.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/tank.dm @@ -13,7 +13,7 @@ /obj/machinery/atmospherics/components/unary/tank/New() ..() - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] air_contents.volume = volume air_contents.temperature = T20C if(gas_type) @@ -43,7 +43,7 @@ /obj/machinery/atmospherics/components/unary/tank/air/New() ..() - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] air_contents.assert_gases(/datum/gas/oxygen, /datum/gas/nitrogen) air_contents.gases[/datum/gas/oxygen][MOLES] = AIR_CONTENTS * 0.2 air_contents.gases[/datum/gas/nitrogen][MOLES] = AIR_CONTENTS * 0.8 diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index fa336c7a34..23cf9bad1d 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -48,9 +48,9 @@ /obj/machinery/atmospherics/components/unary/thermomachine/process_atmos() ..() - if(!on || !NODE1) + if(!on || !nodes[1]) return - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] var/air_heat_capacity = air_contents.heat_capacity() var/combined_heat_capacity = heat_capacity + air_heat_capacity @@ -88,14 +88,14 @@ if(!..()) return 0 SetInitDirections() - var/obj/machinery/atmospherics/node = NODE1 + var/obj/machinery/atmospherics/node = nodes[1] if(node) node.disconnect(src) - NODE1 = null - nullifyPipenet(PARENT1) + nodes[1] = null + nullifyPipenet(parents[1]) atmosinit() - node = NODE1 + node = nodes[1] if(node) node.atmosinit() node.addMember(src) @@ -123,7 +123,7 @@ data["target"] = target_temperature data["initial"] = initial(target_temperature) - var/datum/gas_mixture/air1 = AIR1 + var/datum/gas_mixture/air1 = airs[1] data["temperature"] = air1.temperature data["pressure"] = air1.return_pressure() return data diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index a05a13217d..de4199a52a 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -81,7 +81,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/high_volume/New() ..() - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] air_contents.volume = 1000 /obj/machinery/atmospherics/components/unary/vent_pump/update_icon_nopipes() @@ -93,7 +93,7 @@ icon_state = "vent_welded" return - if(!NODE1 || !on || !is_operational()) + if(!nodes[1] || !on || !is_operational()) if(icon_state == "vent_welded") icon_state = "vent_off" return @@ -122,12 +122,12 @@ ..() if(!is_operational()) return - if(!NODE1) + if(!nodes[1]) on = FALSE if(!on || welded) return - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] var/datum/gas_mixture/environment = loc.return_air() var/environment_pressure = environment.return_pressure() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm index b3ade6f0fb..8d1c28a928 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -77,7 +77,7 @@ icon_state = "scrub_welded" return - if(!NODE1 || !on || !is_operational()) + if(!nodes[1] || !on || !is_operational()) icon_state = "scrub_off" return @@ -142,7 +142,7 @@ ..() if(welded || !is_operational()) return FALSE - if(!NODE1 || !on) + if(!nodes[1] || !on) on = FALSE return FALSE scrub(loc) @@ -156,7 +156,7 @@ return FALSE var/datum/gas_mixture/environment = tile.return_air() - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] var/list/env_gases = environment.gases if(air_contents.return_pressure() >= 50*ONE_ATMOSPHERE) diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm index ad7fdb921a..9191916d10 100644 --- a/code/modules/atmospherics/machinery/datum_pipeline.dm +++ b/code/modules/atmospherics/machinery/datum_pipeline.dm @@ -216,8 +216,8 @@ GL += P.return_air() for(var/obj/machinery/atmospherics/components/binary/valve/V in P.other_atmosmch) if(V.open) - PL |= V.PARENT1 - PL |= V.PARENT2 + PL |= V.parents[1] + PL |= V.parents[2] for(var/obj/machinery/atmospherics/components/unary/portables_connector/C in P.other_atmosmch) if(C.connected_device) GL += C.portableConnectorReturnAir() diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm index e4df82073b..bfabe4e955 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm @@ -32,9 +32,9 @@ cut_overlays() //Add non-broken pieces - for(DEVICE_TYPE_LOOP) - if(NODE_I) - add_overlay(getpipeimage('icons/obj/atmospherics/pipes/heat.dmi', "manifold_intact[invis]", get_dir(src, NODE_I))) + for(var/i in 1 to device_type) + if(nodes[i]) + add_overlay(getpipeimage('icons/obj/atmospherics/pipes/heat.dmi', "manifold_intact[invis]", get_dir(src, nodes[i]))) //4-way manifold /obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w @@ -61,6 +61,6 @@ cut_overlays() //Add non-broken pieces - for(DEVICE_TYPE_LOOP) - if(NODE_I) - add_overlay(getpipeimage('icons/obj/atmospherics/pipes/heat.dmi', "manifold_intact[invis]", get_dir(src, NODE_I))) + for(var/i in 1 to device_type) + if(nodes[i]) + add_overlay(getpipeimage('icons/obj/atmospherics/pipes/heat.dmi', "manifold_intact[invis]", get_dir(src, nodes[i]))) diff --git a/code/modules/atmospherics/machinery/pipes/layermanifold.dm b/code/modules/atmospherics/machinery/pipes/layermanifold.dm index fee00baf50..de8b411fc6 100644 --- a/code/modules/atmospherics/machinery/pipes/layermanifold.dm +++ b/code/modules/atmospherics/machinery/pipes/layermanifold.dm @@ -107,14 +107,14 @@ P.destroy_network() while(reference in get_all_connected_nodes()) if(reference in nodes) - var/I = nodes.Find(reference) - NODE_I = null + var/i = nodes.Find(reference) + nodes[i] = null if(reference in front_nodes) - var/I = front_nodes.Find(reference) - front_nodes[I] = null + var/i = front_nodes.Find(reference) + front_nodes[i] = null if(reference in back_nodes) - var/I = back_nodes.Find(reference) - back_nodes[I] = null + var/i = back_nodes.Find(reference) + back_nodes[i] = null update_icon() /obj/machinery/atmospherics/pipe/layer_manifold/relaymove(mob/living/user, dir) diff --git a/code/modules/atmospherics/machinery/pipes/manifold.dm b/code/modules/atmospherics/machinery/pipes/manifold.dm index 8560addc3a..ff4a4ea1ff 100644 --- a/code/modules/atmospherics/machinery/pipes/manifold.dm +++ b/code/modules/atmospherics/machinery/pipes/manifold.dm @@ -35,9 +35,9 @@ cut_overlays() //Add non-broken pieces - for(DEVICE_TYPE_LOOP) - if(NODE_I) - add_overlay(getpipeimage('icons/obj/atmospherics/pipes/manifold.dmi', "manifold_full[invis]", get_dir(src, NODE_I))) + for(var/i in 1 to device_type) + if(nodes[i]) + add_overlay(getpipeimage('icons/obj/atmospherics/pipes/manifold.dmi', "manifold_full[invis]", get_dir(src, nodes[i]))) //Colored pipes, use these for mapping /obj/machinery/atmospherics/pipe/manifold/general diff --git a/code/modules/atmospherics/machinery/pipes/manifold4w.dm b/code/modules/atmospherics/machinery/pipes/manifold4w.dm index f368c6bb0f..f9692da4ab 100644 --- a/code/modules/atmospherics/machinery/pipes/manifold4w.dm +++ b/code/modules/atmospherics/machinery/pipes/manifold4w.dm @@ -26,9 +26,9 @@ cut_overlays() //Add non-broken pieces - for(DEVICE_TYPE_LOOP) - if(NODE_I) - add_overlay(getpipeimage('icons/obj/atmospherics/pipes/manifold.dmi', "manifold_full[invis]", get_dir(src, NODE_I))) + for(var/i in 1 to device_type) + if(nodes[i]) + add_overlay(getpipeimage('icons/obj/atmospherics/pipes/manifold.dmi', "manifold_full[invis]", get_dir(src, nodes[i]))) //Colored pipes, use these for mapping /obj/machinery/atmospherics/pipe/manifold4w/general diff --git a/code/modules/atmospherics/machinery/pipes/pipes.dm b/code/modules/atmospherics/machinery/pipes/pipes.dm index cc01e6c4bd..8f6b3976bf 100644 --- a/code/modules/atmospherics/machinery/pipes/pipes.dm +++ b/code/modules/atmospherics/machinery/pipes/pipes.dm @@ -18,8 +18,8 @@ volume = 35 * device_type ..() -/obj/machinery/atmospherics/pipe/nullifyNode(I) - var/obj/machinery/atmospherics/oldN = NODE_I +/obj/machinery/atmospherics/pipe/nullifyNode(i) + var/obj/machinery/atmospherics/oldN = nodes[i] ..() if(oldN) oldN.build_network() @@ -33,11 +33,11 @@ parent.build_pipeline(src) /obj/machinery/atmospherics/pipe/update_icon() //overridden by manifolds - if(NODE1&&NODE2) + if(nodes[1] && nodes[2]) icon_state = "intact[invisibility ? "-f" : "" ]" else - var/have_node1 = NODE1?1:0 - var/have_node2 = NODE2?1:0 + var/have_node1 = nodes[1] ? TRUE : FALSE + var/have_node2 = nodes[2] ? TRUE : FALSE icon_state = "exposed[have_node1][have_node2][invisibility ? "-f" : "" ]" /obj/machinery/atmospherics/pipe/atmosinit() @@ -91,9 +91,9 @@ QDEL_NULL(parent) /obj/machinery/atmospherics/pipe/proc/update_node_icon() - for(DEVICE_TYPE_LOOP) - if(NODE_I) - var/obj/machinery/atmospherics/N = NODE_I + for(var/i in 1 to device_type) + if(nodes[i]) + var/obj/machinery/atmospherics/N = nodes[i] N.update_icon() /obj/machinery/atmospherics/pipe/returnPipenets() @@ -109,4 +109,3 @@ pipe_color = paint_color update_node_icon() return TRUE - diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index 585b6e896a..21393fd321 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -324,13 +324,13 @@ valve_open = !valve_open timing = FALSE if(!valve_open) - pump.AIR1 = null - pump.AIR2 = null + pump.airs[1] = null + pump.airs[2] = null return var/turf/T = get_turf(src) - pump.AIR1 = air_contents - pump.AIR2 = holding ? holding.air_contents : T.return_air() + pump.airs[1] = air_contents + pump.airs[2] = holding ? holding.air_contents : T.return_air() pump.target_pressure = release_pressure pump.process_atmos() // Pump gas. diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index 590297820e..58846dc839 100644 --- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -54,7 +54,7 @@ //Perform the connection connected_port = new_port connected_port.connected_device = src - var/datum/pipeline/connected_port_parent = connected_port.PARENT1 + var/datum/pipeline/connected_port_parent = connected_port.parents[1] connected_port_parent.reconcile_air() anchored = TRUE //Prevent movement diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm index db153d60a4..59e74d3215 100644 --- a/code/modules/atmospherics/machinery/portable/pump.dm +++ b/code/modules/atmospherics/machinery/portable/pump.dm @@ -41,17 +41,17 @@ /obj/machinery/portable_atmospherics/pump/process_atmos() ..() if(!on) - pump.AIR1 = null - pump.AIR2 = null + pump.airs[1] = null + pump.airs[2] = null return var/turf/T = get_turf(src) if(direction == PUMP_OUT) // Hook up the internal pump. - pump.AIR1 = holding ? holding.air_contents : air_contents - pump.AIR2 = holding ? air_contents : T.return_air() + pump.airs[1] = holding ? holding.air_contents : air_contents + pump.airs[2] = holding ? air_contents : T.return_air() else - pump.AIR1 = holding ? air_contents : T.return_air() - pump.AIR2 = holding ? holding.air_contents : air_contents + pump.airs[1] = holding ? air_contents : T.return_air() + pump.airs[2] = holding ? holding.air_contents : air_contents pump.process_atmos() // Pump gas. if(!holding) diff --git a/code/modules/events/alien_infestation.dm b/code/modules/events/alien_infestation.dm index 1a8a174bff..b453e96198 100644 --- a/code/modules/events/alien_infestation.dm +++ b/code/modules/events/alien_infestation.dm @@ -41,7 +41,7 @@ if(QDELETED(temp_vent)) continue if((temp_vent.loc.z in GLOB.station_z_levels) && !temp_vent.welded) - var/datum/pipeline/temp_vent_parent = temp_vent.PARENT1 + var/datum/pipeline/temp_vent_parent = temp_vent.parents[1] //Stops Aliens getting stuck in small networks. //See: Security, Virology if(temp_vent_parent.other_atmosmch.len > 20) diff --git a/code/modules/events/spider_infestation.dm b/code/modules/events/spider_infestation.dm index d09aff976d..046208b5ac 100644 --- a/code/modules/events/spider_infestation.dm +++ b/code/modules/events/spider_infestation.dm @@ -23,7 +23,7 @@ var/list/vents = list() for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in world) if((temp_vent.loc.z in GLOB.station_z_levels) && !temp_vent.welded) - var/datum/pipeline/temp_vent_parent = temp_vent.PARENT1 + var/datum/pipeline/temp_vent_parent = temp_vent.parents[1] if(temp_vent_parent.other_atmosmch.len > 20) vents += temp_vent diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index 4aec0f8fe1..65bafaf401 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -20,7 +20,7 @@ endWhen = rand(25, 100) for(var/obj/machinery/atmospherics/components/unary/vent_scrubber/temp_vent in GLOB.machines) if((temp_vent.loc.z in GLOB.station_z_levels) && !temp_vent.welded) - var/datum/pipeline/temp_vent_parent = temp_vent.PARENT1 + var/datum/pipeline/temp_vent_parent = temp_vent.parents[1] if(temp_vent_parent.other_atmosmch.len > 20) vents += temp_vent if(!vents.len) diff --git a/code/modules/mob/living/ventcrawling.dm b/code/modules/mob/living/ventcrawling.dm index 471e103c26..2d3ed3d669 100644 --- a/code/modules/mob/living/ventcrawling.dm +++ b/code/modules/mob/living/ventcrawling.dm @@ -45,7 +45,7 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, typecacheof(list( if(vent_found) - var/datum/pipeline/vent_found_parent = vent_found.PARENT1 + var/datum/pipeline/vent_found_parent = vent_found.parents[1] if(vent_found_parent && (vent_found_parent.members.len || vent_found_parent.other_atmosmch)) visible_message("[src] begins climbing into the ventilation system..." ,"You begin climbing into the ventilation system...") diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index 6a8c6ec5ec..4681eabe20 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -99,11 +99,11 @@ // update icon overlays only if displayed level has changed if(hot_air) - var/datum/gas_mixture/hot_circ_air1 = hot_circ.AIR1 + var/datum/gas_mixture/hot_circ_air1 = hot_circ.airs[1] hot_circ_air1.merge(hot_air) if(cold_air) - var/datum/gas_mixture/cold_circ_air1 = cold_circ.AIR1 + var/datum/gas_mixture/cold_circ_air1 = cold_circ.airs[1] cold_circ_air1.merge(cold_air) update_icon() @@ -134,10 +134,10 @@ if(!powernet) t += "Unable to connect to the power network!" else if(cold_circ && hot_circ) - var/datum/gas_mixture/cold_circ_air1 = cold_circ.AIR1 - var/datum/gas_mixture/cold_circ_air2 = cold_circ.AIR2 - var/datum/gas_mixture/hot_circ_air1 = hot_circ.AIR1 - var/datum/gas_mixture/hot_circ_air2 = hot_circ.AIR2 + var/datum/gas_mixture/cold_circ_air1 = cold_circ.airs[1] + var/datum/gas_mixture/cold_circ_air2 = cold_circ.airs[2] + var/datum/gas_mixture/hot_circ_air1 = hot_circ.airs[1] + var/datum/gas_mixture/hot_circ_air2 = hot_circ.airs[2] t += "
" diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm index c7a77f9457..332acb6816 100644 --- a/code/modules/shuttle/on_move.dm +++ b/code/modules/shuttle/on_move.dm @@ -209,9 +209,9 @@ All ShuttleMove procs go here /obj/machinery/atmospherics/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) . = ..() var/missing_nodes = FALSE - for(DEVICE_TYPE_LOOP) - if(src.nodes[I]) - var/obj/machinery/atmospherics/node = src.nodes[I] + for(var/i in 1 to device_type) + if(nodes[i]) + var/obj/machinery/atmospherics/node = nodes[i] var/connected = FALSE for(var/D in GLOB.cardinals) if(node in get_step(src, D)) @@ -219,9 +219,9 @@ All ShuttleMove procs go here break if(!connected) - nullifyNode(I) + nullifyNode(i) - if(!src.nodes[I]) + if(!nodes[i]) missing_nodes = TRUE if(missing_nodes) diff --git a/code/modules/shuttle/shuttle_rotate.dm b/code/modules/shuttle/shuttle_rotate.dm index 49c7396dba..caf849ca3f 100644 --- a/code/modules/shuttle/shuttle_rotate.dm +++ b/code/modules/shuttle/shuttle_rotate.dm @@ -84,17 +84,17 @@ If ever any of these procs are useful for non-shuttles, rename it to proc/rotate /obj/machinery/atmospherics/shuttleRotate(rotation, params) var/list/real_node_connect = getNodeConnects() - for(DEVICE_TYPE_LOOP) - real_node_connect[I] = angle2dir(rotation+dir2angle(real_node_connect[I])) + for(var/i in 1 to device_type) + real_node_connect[i] = angle2dir(rotation+dir2angle(real_node_connect[i])) . = ..() SetInitDirections() var/list/supposed_node_connect = getNodeConnects() var/list/nodes_copy = nodes.Copy() - for(DEVICE_TYPE_LOOP) - var/new_pos = supposed_node_connect.Find(real_node_connect[I]) - nodes[new_pos] = nodes_copy[I] + for(var/i in 1 to device_type) + var/new_pos = supposed_node_connect.Find(real_node_connect[i]) + nodes[new_pos] = nodes_copy[i] //prevents shuttles attempting to rotate this since it messes up sprites /obj/machinery/gateway/shuttleRotate(rotation, params) @@ -104,4 +104,4 @@ If ever any of these procs are useful for non-shuttles, rename it to proc/rotate //prevents shuttles attempting to rotate this since it messes up sprites /obj/machinery/gravity_generator/shuttleRotate(rotation, params) params = NONE - return ..() \ No newline at end of file + return ..() From a912e1491267525981985b483719b13c89653a79 Mon Sep 17 00:00:00 2001 From: AnturK Date: Thu, 21 Dec 2017 14:13:11 +0100 Subject: [PATCH 008/104] Makes newscaster feedback messages and comments always a list. --- code/__HELPERS/roundend.dm | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index 3b346f7e1c..e20be6332f 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -63,6 +63,35 @@ antag_info["objectives"] += list(list("objective_type"=O.type,"text"=O.explanation_text,"result"=result)) SSblackbox.record_feedback("associative", "antagonists", 1, antag_info) +<<<<<<< HEAD +======= +/datum/controller/subsystem/ticker/proc/gather_newscaster() + var/json_file = file("[GLOB.log_directory]/newscaster.json") + var/list/file_data = list() + var/pos = 1 + for(var/V in GLOB.news_network.network_channels) + var/datum/newscaster/feed_channel/channel = V + if(!istype(channel)) + stack_trace("Non-channel in newscaster channel list") + continue + file_data["[pos]"] = list("channel name" = "[channel.channel_name]", "author" = "[channel.author]", "censored" = channel.censored ? 1 : 0, "author censored" = channel.authorCensor ? 1 : 0, "messages" = list()) + for(var/M in channel.messages) + var/datum/newscaster/feed_message/message = M + if(!istype(message)) + stack_trace("Non-message in newscaster channel messages list") + continue + file_data["[pos]"]["messages"] += list(list("author" = "[message.author]", "time stamp" = "[message.time_stamp]", "censored" = message.bodyCensor ? 1 : 0, "author censored" = message.authorCensor ? 1 : 0, "photo file" = "[message.photo_file]", "photo caption" = "[message.caption]", "body" = "[message.body]", "comments" = list())) + for(var/C in message.comments) + var/datum/newscaster/feed_comment/comment = C + if(!istype(comment)) + stack_trace("Non-message in newscaster message comments list") + continue + file_data["[pos]"]["messages"]["comments"] += list(list("author" = "[comment.author]", "time stamp" = "[comment.time_stamp]", "body" = "[comment.body]")) + pos++ + if(GLOB.news_network.wanted_issue.active) + file_data["wanted"] = list("author" = "[GLOB.news_network.wanted_issue.scannedUser]", "criminal" = "[GLOB.news_network.wanted_issue.criminal]", "description" = "[GLOB.news_network.wanted_issue.body]", "photo file" = "[GLOB.news_network.wanted_issue.photo_file]") + WRITE_FILE(json_file, json_encode(file_data)) +>>>>>>> e940102... Makes newscaster feedback messages and comments always a list. (#33682) /datum/controller/subsystem/ticker/proc/declare_completion() set waitfor = FALSE From e2ba458400517efcc408947aa3dbbb89af86a9cd Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sun, 24 Dec 2017 02:40:05 -0600 Subject: [PATCH 009/104] Update roundend.dm --- code/__HELPERS/roundend.dm | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index e20be6332f..0482bb668e 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -62,9 +62,7 @@ var/result = O.check_completion() ? "SUCCESS" : "FAIL" antag_info["objectives"] += list(list("objective_type"=O.type,"text"=O.explanation_text,"result"=result)) SSblackbox.record_feedback("associative", "antagonists", 1, antag_info) - -<<<<<<< HEAD -======= + /datum/controller/subsystem/ticker/proc/gather_newscaster() var/json_file = file("[GLOB.log_directory]/newscaster.json") var/list/file_data = list() @@ -91,7 +89,6 @@ if(GLOB.news_network.wanted_issue.active) file_data["wanted"] = list("author" = "[GLOB.news_network.wanted_issue.scannedUser]", "criminal" = "[GLOB.news_network.wanted_issue.criminal]", "description" = "[GLOB.news_network.wanted_issue.body]", "photo file" = "[GLOB.news_network.wanted_issue.photo_file]") WRITE_FILE(json_file, json_encode(file_data)) ->>>>>>> e940102... Makes newscaster feedback messages and comments always a list. (#33682) /datum/controller/subsystem/ticker/proc/declare_completion() set waitfor = FALSE From 9d0a4722e5048cdb870d0cb24b7a5ff033ced857 Mon Sep 17 00:00:00 2001 From: Emmett Gaines Date: Mon, 25 Dec 2017 20:10:08 -0500 Subject: [PATCH 010/104] turns the baseturf var into a part time list (#33705) --- .../LavaRuins/lavaland_surface_pizzaparty.dmm | 41 +- _maps/RandomRuins/SpaceRuins/deepstorage.dmm | 1635 +++++----------- _maps/RandomRuins/SpaceRuins/spacehotel.dmm | 18 +- _maps/RandomZLevels/beach2.dmm | 102 +- _maps/RandomZLevels/caves.dmm | 686 ++----- _maps/RandomZLevels/snowdin.dmm | 1682 ++++------------- _maps/shuttles/emergency_delta.dmm | 1 - code/__DEFINES/turf_flags.dm | 3 + code/datums/components/thermite.dm | 2 +- .../clock_cult/clock_structures/wall_gear.dm | 4 +- code/game/machinery/computer/arcade.dm | 2 +- code/game/machinery/doors/airlock.dm | 2 +- code/game/mecha/equipment/tools/work_tools.dm | 8 +- code/game/mecha/mech_bay.dm | 2 +- .../effects/effect_system/effects_foam.dm | 2 +- .../objects/effects/spawners/vaultspawner.dm | 4 +- code/game/objects/items/melee/misc.dm | 7 +- code/game/objects/structures/false_walls.dm | 2 +- code/game/objects/structures/girders.dm | 12 +- code/game/turfs/ChangeTurf.dm | 217 +++ code/game/turfs/closed.dm | 4 +- code/game/turfs/open.dm | 8 +- code/game/turfs/simulated/chasm.dm | 12 +- code/game/turfs/simulated/floor.dm | 15 +- .../game/turfs/simulated/floor/light_floor.dm | 2 +- code/game/turfs/simulated/floor/misc_floor.dm | 10 +- code/game/turfs/simulated/floor/plating.dm | 4 +- .../turfs/simulated/floor/plating/asteroid.dm | 16 +- .../turfs/simulated/floor/plating/dirt.dm | 2 +- .../simulated/floor/plating/misc_plating.dm | 12 +- .../game/turfs/simulated/floor/reinf_floor.dm | 6 +- code/game/turfs/simulated/lava.dm | 6 +- code/game/turfs/simulated/minerals.dm | 46 +- code/game/turfs/simulated/reebe_void.dm | 2 +- code/game/turfs/simulated/river.dm | 10 +- code/game/turfs/simulated/wall/misc_walls.dm | 6 +- code/game/turfs/simulated/walls.dm | 8 +- code/game/turfs/simulated/water.dm | 2 +- code/game/turfs/space/space.dm | 4 +- code/game/turfs/space/transit.dm | 2 +- code/game/turfs/turf.dm | 213 +-- code/modules/admin/verbs/randomverbs.dm | 2 +- .../atmospherics/environmental/LINDA_fire.dm | 2 +- code/modules/mapping/mapping_helpers.dm | 8 +- code/modules/mapping/reader.dm | 2 +- .../mob/living/simple_animal/bot/floorbot.dm | 4 +- .../hostile/mining_mobs/necropolis_tendril.dm | 2 +- .../reagents/pyrotechnic_reagents.dm | 4 +- code/modules/shuttle/on_move.dm | 16 +- code/modules/shuttle/shuttle.dm | 2 +- tgstation.dme | 2 + 51 files changed, 1538 insertions(+), 3328 deletions(-) create mode 100644 code/__DEFINES/turf_flags.dm create mode 100644 code/game/turfs/ChangeTurf.dm diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm index 3a89d344a8..8a34879707 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm @@ -10,14 +10,11 @@ /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "d" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - }, +/turf/closed/wall, /area/ruin/unpowered) "e" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -25,7 +22,6 @@ /obj/structure/table/wood, /obj/item/storage/box/cups, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -36,14 +32,12 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) "h" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -51,7 +45,6 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -59,7 +52,6 @@ /obj/item/reagent_containers/food/snacks/pizzaslice/mushroom, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -72,7 +64,6 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -89,7 +80,6 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -97,7 +87,6 @@ /obj/item/chair/wood/wings, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -105,7 +94,6 @@ /obj/structure/glowshroom/single, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -113,7 +101,6 @@ /obj/item/trash/plate, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -121,7 +108,6 @@ /obj/effect/decal/remains/human, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -129,7 +115,6 @@ /obj/item/chair/wood/wings, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -141,13 +126,11 @@ name = "party hat" }, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) "s" = ( /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -155,14 +138,12 @@ /obj/structure/chair/wood/wings, /obj/effect/decal/remains/human, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) "u" = ( /obj/structure/glowshroom/single, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -175,7 +156,6 @@ /obj/item/kitchen/fork, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -187,7 +167,6 @@ name = "pizza spawner" }, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -195,7 +174,6 @@ /obj/structure/table/wood, /obj/item/trash/plate, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -204,7 +182,6 @@ /obj/structure/glowshroom/single, /obj/item/a_gift, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -213,7 +190,6 @@ /obj/item/trash/plate, /obj/item/kitchen/fork, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -224,7 +200,6 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -233,7 +208,6 @@ /obj/item/reagent_containers/food/snacks/pizzaslice/margherita, /obj/item/trash/plate, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -241,7 +215,6 @@ /obj/structure/table/wood, /obj/item/reagent_containers/food/snacks/pizzaslice/meat, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -249,21 +222,18 @@ /obj/structure/table/wood, /obj/item/reagent_containers/food/snacks/store/cake/birthday, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) "G" = ( /obj/structure/table/wood, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) "H" = ( /obj/item/chair/wood/wings, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -271,7 +241,6 @@ /obj/item/kitchen/fork, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -279,7 +248,6 @@ /obj/structure/glowshroom/single, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -291,7 +259,6 @@ /obj/effect/decal/remains/human, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -299,7 +266,6 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -307,7 +273,6 @@ /obj/effect/decal/cleanable/dirt, /obj/item/a_gift, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -320,7 +285,6 @@ /obj/item/kitchen/knife, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -330,13 +294,11 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) "Q" = ( /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -344,7 +306,6 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) diff --git a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm index 9ff1aad4c6..cceb58a95d 100644 --- a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm +++ b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm @@ -19,43 +19,31 @@ name = "Asteroid - Space" }) "af" = ( -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/kitchen) "ag" = ( -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/crusher) "ah" = ( /obj/structure/kitchenspike, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage/kitchen) "ai" = ( /obj/structure/closet/secure_closet/freezer/meat, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage/kitchen) "aj" = ( /obj/machinery/light/small{ dir = 8 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "ak" = ( /obj/machinery/conveyor{ dir = 4; id = "bunkerrecycle" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "al" = ( /obj/machinery/conveyor{ @@ -65,9 +53,7 @@ /obj/machinery/light/small{ dir = 1 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "am" = ( /obj/machinery/recycler/deathtrap, @@ -75,9 +61,7 @@ dir = 4; id = "bunkerrecycle" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "an" = ( /obj/machinery/conveyor{ @@ -85,9 +69,7 @@ id = "bunkerrecycle"; movedir = 2 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "ao" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ @@ -96,46 +78,34 @@ /obj/machinery/light{ dir = 8 }, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage/kitchen) "ap" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 10 }, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage/kitchen) "aq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage/kitchen) "ar" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 }, /obj/structure/reagent_dispensers/beerkeg, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage/kitchen) "as" = ( /obj/structure/table, /obj/item/storage/toolbox/emergency, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "at" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "au" = ( /obj/machinery/conveyor_switch{ @@ -144,9 +114,7 @@ /obj/structure/window/reinforced{ dir = 1 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "av" = ( /obj/structure/window/plasma/reinforced{ @@ -157,62 +125,45 @@ id = "bunkerrecycle"; movedir = 2 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "aw" = ( -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/obj/effect/baseturf_helper/asteroid/airless, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/storage) "ax" = ( /obj/machinery/processor{ name = "processor" }, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage/kitchen) "ay" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage/kitchen) "az" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage/kitchen) "aA" = ( /obj/machinery/gibber, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage/kitchen) "aB" = ( /obj/structure/table, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "aC" = ( /obj/structure/cable/yellow{ icon_state = "2-4" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "aD" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "aE" = ( /obj/structure/cable/yellow{ @@ -223,9 +174,7 @@ name = "Recycling APC"; pixel_y = -24 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "aF" = ( /obj/machinery/conveyor{ @@ -236,9 +185,7 @@ /obj/machinery/light/small{ dir = 4 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "aG" = ( /obj/structure/closet/cardboard, @@ -345,18 +292,14 @@ /area/ruin/space/has_grav/deepstorage/storage) "aM" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/kitchen) "aN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/door/airlock{ name = "Freezer" }, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage/kitchen) "aO" = ( /obj/machinery/door/airlock/highsecurity{ @@ -366,23 +309,17 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/crusher) "aP" = ( /obj/machinery/door/airlock/highsecurity{ name = "Recycling Room"; req_access_txt = "200" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/crusher) "aQ" = ( -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/hydroponics) "aR" = ( /obj/structure/closet/cardboard, @@ -466,9 +403,7 @@ }, /obj/item/storage/box/cups, /obj/item/reagent_containers/glass/beaker, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "aY" = ( /obj/structure/table, @@ -482,9 +417,7 @@ /obj/machinery/firealarm{ pixel_y = 24 }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "aZ" = ( /obj/structure/table, @@ -497,9 +430,7 @@ /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 4 }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "ba" = ( /obj/structure/table, @@ -512,30 +443,22 @@ dir = 9 }, /obj/item/kitchen/knife, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bb" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bc" = ( /obj/structure/sink/kitchen{ pixel_y = 24 }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bd" = ( /obj/structure/table, /obj/machinery/microwave, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "be" = ( /obj/structure/cable/yellow{ @@ -544,17 +467,13 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "bf" = ( /obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{ dir = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "bg" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -562,9 +481,7 @@ }, /obj/machinery/door/firedoor, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/hydroponics) "bh" = ( /obj/structure/table, @@ -573,9 +490,7 @@ /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 4 }, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "bi" = ( /obj/machinery/vending/hydronutrients, @@ -585,9 +500,7 @@ /obj/machinery/firealarm{ pixel_y = 24 }, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "bj" = ( /obj/machinery/vending/hydroseeds{ @@ -596,18 +509,14 @@ /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 4 }, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "bk" = ( /obj/machinery/hydroponics/constructable, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 4 }, -/turf/open/floor/light{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/light, /area/ruin/space/has_grav/deepstorage/hydroponics) "bl" = ( /obj/machinery/hydroponics/constructable, @@ -617,57 +526,43 @@ /obj/machinery/light{ dir = 1 }, -/turf/open/floor/light{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/light, /area/ruin/space/has_grav/deepstorage/hydroponics) "bm" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "bn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "bo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "bp" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 6 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "bq" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "br" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "bs" = ( /obj/structure/closet/secure_closet/freezer/kitchen{ @@ -677,38 +572,28 @@ dir = 4 }, /obj/item/storage/box/drinkingglasses, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bt" = ( /obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{ dir = 4 }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bu" = ( -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bv" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bw" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bx" = ( /obj/structure/table, @@ -717,9 +602,7 @@ dir = 4; pixel_x = 24 }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "by" = ( /obj/structure/cable/yellow{ @@ -728,35 +611,25 @@ /obj/machinery/light{ dir = 8 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "bz" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "bA" = ( /obj/machinery/door/firedoor, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/hydroponics) "bB" = ( /obj/structure/table, /obj/item/cultivator, /obj/item/hatchet, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "bC" = ( -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "bD" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ @@ -766,52 +639,38 @@ dir = 4; pixel_x = 24 }, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "bE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/tank_dispenser/oxygen, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "bF" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "bG" = ( /obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "bH" = ( /obj/structure/reagent_dispensers/watertank/high, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "bI" = ( /obj/structure/closet/secure_closet/freezer/fridge, /obj/item/storage/box/ingredients/wildcard, /obj/item/storage/box/ingredients/wildcard, /obj/item/storage/box/ingredients/wildcard, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bJ" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /obj/structure/cable/yellow{ icon_state = "2-4" }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -820,9 +679,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bL" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -831,9 +688,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -842,9 +697,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bN" = ( /obj/structure/cable/yellow{ @@ -855,16 +708,12 @@ name = "Kitchen APC"; pixel_y = -24 }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bO" = ( /obj/machinery/light, /obj/machinery/vending/dinnerware, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bP" = ( /obj/structure/cable/yellow{ @@ -874,32 +723,24 @@ dir = 8; pixel_x = -24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "bQ" = ( /obj/machinery/door/airlock/public/glass{ name = "Hydroponics" }, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "bR" = ( /obj/structure/sink{ dir = 4; pixel_x = 11 }, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "bS" = ( /obj/machinery/hydroponics/constructable, -/turf/open/floor/light{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/light, /area/ruin/space/has_grav/deepstorage/hydroponics) "bT" = ( /obj/effect/turf_decal/delivery, @@ -915,9 +756,7 @@ /obj/machinery/light{ dir = 8 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "bU" = ( /obj/effect/turf_decal/delivery, @@ -930,21 +769,15 @@ /obj/item/reagent_containers/food/snacks/beans, /obj/item/reagent_containers/food/snacks/beans, /obj/item/reagent_containers/food/snacks/beans, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "bV" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "bW" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/storage) "bX" = ( /obj/machinery/door/airlock/highsecurity{ @@ -952,9 +785,7 @@ req_access_txt = "200" }, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "bY" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, @@ -965,16 +796,12 @@ /obj/machinery/door/airlock/public/glass{ name = "Kitchen" }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/smartfridge, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/kitchen) "ca" = ( /obj/structure/cable/yellow{ @@ -984,18 +811,14 @@ icon_state = "2-4" }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "cb" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "cc" = ( /obj/structure/cable/yellow{ @@ -1003,35 +826,27 @@ }, /obj/machinery/door/firedoor, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/hydroponics) "cd" = ( /obj/structure/table, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "ce" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "cf" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "cg" = ( /obj/structure/cable/yellow{ @@ -1042,9 +857,7 @@ name = "Hydroponics APC"; pixel_x = 24 }, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "ch" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, @@ -1052,15 +865,11 @@ dir = 8; pixel_x = 24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "ci" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "cj" = ( /obj/structure/noticeboard{ @@ -1069,9 +878,7 @@ /obj/item/paper/fluff/ruins/deepstorage/water_concern, /obj/item/paper/fluff/ruins/deepstorage/hydro_notice, /obj/item/paper/fluff/ruins/deepstorage/recycling_notice, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "ck" = ( /obj/structure/chair{ @@ -1083,9 +890,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/bar, /area/ruin/space/has_grav/deepstorage) "cl" = ( /obj/structure/table, @@ -1096,9 +901,7 @@ /obj/machinery/light{ dir = 1 }, -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/bar, /area/ruin/space/has_grav/deepstorage) "cm" = ( /obj/structure/table, @@ -1110,9 +913,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/bar, /area/ruin/space/has_grav/deepstorage) "cn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -1122,40 +923,30 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/bar, /area/ruin/space/has_grav/deepstorage) "co" = ( /obj/structure/closet/crate/bin, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/bar, /area/ruin/space/has_grav/deepstorage) "cp" = ( -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage) "cq" = ( /obj/machinery/shower{ dir = 4 }, /obj/item/soap, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage) "cr" = ( /obj/machinery/light{ dir = 1 }, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage) "cs" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, @@ -1164,9 +955,7 @@ locked = 0; pixel_y = 23 }, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage) "ct" = ( /obj/structure/cable/yellow{ @@ -1175,18 +964,14 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "cu" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "cv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -1194,9 +979,7 @@ }, /obj/machinery/door/firedoor, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/hydroponics) "cw" = ( /obj/structure/table, @@ -1209,18 +992,14 @@ pixel_y = 4 }, /obj/item/reagent_containers/glass/bucket, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "cx" = ( /obj/machinery/seed_extractor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "cy" = ( /obj/machinery/biogenerator, @@ -1228,27 +1007,21 @@ dir = 4 }, /obj/item/reagent_containers/glass/beaker/large, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "cz" = ( /obj/machinery/hydroponics/constructable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/light{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/light, /area/ruin/space/has_grav/deepstorage/hydroponics) "cA" = ( /obj/machinery/hydroponics/constructable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, -/turf/open/floor/light{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/light, /area/ruin/space/has_grav/deepstorage/hydroponics) "cB" = ( /obj/effect/turf_decal/delivery, @@ -1261,9 +1034,7 @@ /obj/item/reagent_containers/glass/beaker/waterbottle/large, /obj/item/reagent_containers/glass/beaker/waterbottle/large, /obj/item/reagent_containers/glass/beaker/waterbottle/large, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "cC" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -1272,9 +1043,7 @@ /obj/structure/cable/yellow{ icon_state = "2-4" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "cD" = ( /obj/machinery/door/airlock/highsecurity{ @@ -1287,9 +1056,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "cE" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -1299,74 +1066,54 @@ /obj/structure/cable/yellow{ icon_state = "2-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "cF" = ( /obj/machinery/atmospherics/pipe/manifold/supplymain/hidden, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "cG" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 10 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "cH" = ( /obj/structure/chair{ dir = 4 }, -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/bar, /area/ruin/space/has_grav/deepstorage) "cI" = ( /obj/structure/table, -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/bar, /area/ruin/space/has_grav/deepstorage) "cJ" = ( /obj/structure/table, /obj/item/kitchen/fork, -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/bar, /area/ruin/space/has_grav/deepstorage) "cK" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/bar, /area/ruin/space/has_grav/deepstorage) "cL" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/vending/coffee, -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/bar, /area/ruin/space/has_grav/deepstorage) "cM" = ( /obj/machinery/shower{ dir = 4 }, /obj/structure/window/plasma/reinforced, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage) "cN" = ( -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage) "cO" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, @@ -1377,18 +1124,14 @@ /obj/structure/mirror{ pixel_x = 24 }, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage) "cP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "cQ" = ( /obj/structure/cable/yellow, @@ -1397,9 +1140,7 @@ name = "Storage APC"; pixel_x = 24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "cR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -1407,20 +1148,14 @@ icon_state = "1-2" }, /obj/machinery/computer/arcade, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "cS" = ( /obj/structure/chair/stool, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "cT" = ( -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/bar, /area/ruin/space/has_grav/deepstorage) "cU" = ( /obj/structure/chair{ @@ -1429,9 +1164,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/bar, /area/ruin/space/has_grav/deepstorage) "cV" = ( /obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{ @@ -1440,9 +1173,7 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/bar, /area/ruin/space/has_grav/deepstorage) "cW" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -1451,30 +1182,22 @@ dir = 4; pixel_x = 24 }, -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/bar, /area/ruin/space/has_grav/deepstorage) "cX" = ( /obj/structure/toilet{ dir = 4 }, /obj/structure/curtain, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage) "cY" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage) "cZ" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage) "da" = ( /obj/structure/cable/yellow{ @@ -1482,9 +1205,7 @@ }, /obj/machinery/door/firedoor, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/armory) "db" = ( /obj/structure/table, @@ -1492,9 +1213,7 @@ /obj/item/device/healthanalyzer, /obj/item/stack/medical/gauze, /obj/item/stack/medical/gauze, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "dc" = ( /obj/structure/table, @@ -1503,9 +1222,7 @@ pixel_y = 4 }, /obj/item/storage/firstaid/regular, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "dd" = ( /obj/structure/table, @@ -1517,30 +1234,22 @@ /obj/machinery/light{ dir = 1 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "de" = ( -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/armory) "df" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "dg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/storage) "dh" = ( /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, @@ -1548,9 +1257,7 @@ icon_state = "1-4" }, /obj/machinery/computer/arcade, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "di" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -1560,9 +1267,7 @@ icon_state = "4-8" }, /obj/structure/chair/stool, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dj" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, @@ -1575,9 +1280,7 @@ /obj/structure/cable/yellow{ icon_state = "2-4" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -1586,9 +1289,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dl" = ( /obj/structure/cable/yellow{ @@ -1597,17 +1298,13 @@ /obj/structure/cable/yellow{ icon_state = "2-4" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dm" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dn" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, @@ -1617,9 +1314,7 @@ /obj/structure/cable/yellow{ icon_state = "2-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "do" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -1627,24 +1322,18 @@ dir = 4; pixel_x = 24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage) "dq" = ( /obj/machinery/door/airlock{ name = "Showers" }, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage) "dr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -1654,9 +1343,7 @@ /obj/structure/cable/yellow{ icon_state = "2-4" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "ds" = ( /obj/structure/cable/yellow{ @@ -1667,20 +1354,14 @@ }, /obj/machinery/door/firedoor, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/armory) "dt" = ( -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "du" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "dv" = ( /obj/structure/table, @@ -1695,9 +1376,7 @@ dir = 4; pixel_x = 24 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "dw" = ( /obj/effect/turf_decal/delivery, @@ -1716,9 +1395,7 @@ /obj/item/vending_refill/coffee, /obj/item/vending_refill/cigarette, /obj/item/vending_refill/cigarette, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "dx" = ( /obj/effect/turf_decal/delivery, @@ -1734,38 +1411,28 @@ /obj/item/vending_refill/coffee, /obj/item/vending_refill/cigarette, /obj/item/vending_refill/cigarette, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "dy" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "dz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/storage) "dA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/dorm) "dB" = ( -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/dorm) "dC" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, @@ -1775,17 +1442,13 @@ /obj/machinery/light{ dir = 8 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dD" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -1794,17 +1457,13 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dG" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -1814,15 +1473,11 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dH" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -1831,33 +1486,25 @@ /obj/machinery/light{ dir = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dJ" = ( /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /obj/machinery/door/firedoor, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dL" = ( /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dM" = ( /obj/machinery/door/airlock/highsecurity{ @@ -1867,25 +1514,19 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "dN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "dO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "dP" = ( /obj/structure/table, @@ -1900,15 +1541,11 @@ dir = 8; pixel_x = 24 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "dQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/dorm) "dR" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -1917,9 +1554,7 @@ /obj/structure/cable/yellow{ icon_state = "2-4" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/dorm) "dS" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -1932,26 +1567,20 @@ /obj/machinery/door/airlock/public/glass{ name = "Dorms" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/dorm) "dT" = ( /obj/machinery/atmospherics/pipe/manifold/supplymain/hidden, /obj/structure/cable/yellow{ icon_state = "1-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dU" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dV" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -1964,9 +1593,7 @@ pixel_y = -24 }, /obj/effect/turf_decal/stripes/corner, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dW" = ( /obj/machinery/atmospherics/pipe/manifold/supplymain/hidden, @@ -1974,9 +1601,7 @@ icon_state = "1-4" }, /obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dX" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -1985,9 +1610,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dY" = ( /obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{ @@ -1999,9 +1622,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dZ" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -2011,18 +1632,14 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "ea" = ( /obj/machinery/atmospherics/pipe/manifold/supplymain/hidden, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "eb" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -2032,9 +1649,7 @@ icon_state = "4-8" }, /obj/machinery/door/firedoor, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "ec" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -2050,18 +1665,14 @@ /obj/structure/cable/yellow{ icon_state = "2-4" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "ed" = ( /obj/machinery/atmospherics/pipe/manifold4w/supplymain/hidden, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "ee" = ( /obj/machinery/door/airlock/highsecurity{ @@ -2074,9 +1685,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "ef" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -2085,17 +1694,13 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "eg" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "eh" = ( /obj/structure/table, @@ -2110,15 +1715,11 @@ name = "Armory APC"; pixel_x = 24 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "ei" = ( /obj/structure/dresser, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/wood, /area/ruin/space/has_grav/deepstorage/dorm) "ej" = ( /obj/structure/table/wood, @@ -2126,9 +1727,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/wood, /area/ruin/space/has_grav/deepstorage/dorm) "ek" = ( /obj/structure/bed, @@ -2136,35 +1735,27 @@ dir = 4 }, /obj/item/bedsheet, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/wood, /area/ruin/space/has_grav/deepstorage/dorm) "el" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/dorm) "em" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/dorm) "en" = ( /obj/machinery/door/airlock/highsecurity{ name = "Canister Storage"; req_access_txt = "200" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage) "eo" = ( /obj/machinery/door/poddoor{ @@ -2172,23 +1763,17 @@ }, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "ep" = ( /obj/machinery/door/poddoor{ id = "bunkerinterior" }, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "eq" = ( -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/airlock) "er" = ( /obj/machinery/door/airlock/highsecurity{ @@ -2199,15 +1784,11 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "es" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/airlock) "et" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -2220,9 +1801,7 @@ /obj/machinery/light{ dir = 8 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "eu" = ( /obj/structure/cable/yellow{ @@ -2233,25 +1812,19 @@ }, /obj/machinery/door/firedoor, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/armory) "ev" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 5 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "ew" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "ex" = ( /obj/structure/table, @@ -2265,9 +1838,7 @@ /obj/structure/reagent_dispensers/peppertank{ pixel_x = 32 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "ey" = ( /obj/structure/closet/cabinet, @@ -2276,9 +1847,7 @@ icon_state = "centcom"; name = "bunker access ID" }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/wood, /area/ruin/space/has_grav/deepstorage/dorm) "ez" = ( /obj/structure/chair/stool, @@ -2286,17 +1855,13 @@ dir = 4 }, /obj/machinery/light/small, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/wood, /area/ruin/space/has_grav/deepstorage/dorm) "eA" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 4 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/wood, /area/ruin/space/has_grav/deepstorage/dorm) "eB" = ( /obj/machinery/door/airlock{ @@ -2306,9 +1871,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/wood, /area/ruin/space/has_grav/deepstorage/dorm) "eC" = ( /obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{ @@ -2317,14 +1880,10 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/dorm) "eD" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage) "eE" = ( /obj/machinery/portable_atmospherics/canister/oxygen, @@ -2332,9 +1891,7 @@ dir = 4 }, /obj/effect/turf_decal/delivery, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage) "eF" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, @@ -2344,9 +1901,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "eG" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ @@ -2355,17 +1910,13 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "eH" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 4 }, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/airlock) "eI" = ( /obj/structure/table, @@ -2398,9 +1949,7 @@ network = list("Bunker1"); pixel_y = 2 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "eJ" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ @@ -2413,9 +1962,7 @@ /obj/structure/cable/yellow{ icon_state = "1-4" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "eK" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ @@ -2428,9 +1975,7 @@ /obj/machinery/firealarm{ pixel_y = 24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "eL" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ @@ -2444,17 +1989,13 @@ name = "Airlock Control APC"; pixel_y = 24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "eM" = ( /obj/structure/cable/yellow, /obj/machinery/door/firedoor, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/armory) "eN" = ( /obj/structure/table, @@ -2465,9 +2006,7 @@ /obj/item/storage/firstaid/toxin, /obj/item/storage/pill_bottle/charcoal, /obj/machinery/light, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "eO" = ( /obj/structure/table, @@ -2482,9 +2021,7 @@ /obj/item/clothing/mask/gas, /obj/item/clothing/mask/gas, /obj/item/clothing/mask/gas, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "eP" = ( /obj/structure/table, @@ -2503,9 +2040,7 @@ /obj/item/device/flashlight/flare{ pixel_y = 6 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "eQ" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, @@ -2515,24 +2050,18 @@ /obj/machinery/light{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/dorm) "eR" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/effect/turf_decal/delivery, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage) "eS" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "eT" = ( /obj/machinery/door/poddoor/shutters/preopen{ @@ -2546,9 +2075,7 @@ }, /obj/machinery/door/firedoor, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/airlock) "eU" = ( /obj/structure/chair{ @@ -2557,9 +2084,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "eV" = ( /obj/structure/cable/yellow{ @@ -2568,15 +2093,11 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "eW" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "eX" = ( /obj/machinery/atmospherics/components/binary/valve{ @@ -2586,9 +2107,7 @@ dir = 4; pixel_x = 24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "eY" = ( /obj/machinery/door/airlock/highsecurity{ @@ -2599,9 +2118,7 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "eZ" = ( /obj/machinery/door/airlock/highsecurity{ @@ -2609,41 +2126,31 @@ req_access_txt = "200" }, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "fa" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 6 }, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/armory) "fb" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/armory) "fc" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/power) "fd" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ dir = 8 }, -/turf/open/floor/plating/airless/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating/airless/astplate, /area/ruin/space/has_grav/deepstorage/power) "fe" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, @@ -2654,22 +2161,16 @@ dir = 4; pixel_x = 24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/dorm) "ff" = ( /obj/machinery/portable_atmospherics/canister/nitrous_oxide, /obj/effect/turf_decal/delivery, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage) "fg" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "fh" = ( /obj/machinery/door/poddoor/shutters/preopen{ @@ -2678,47 +2179,35 @@ /obj/structure/cable/yellow, /obj/machinery/door/firedoor, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/airlock) "fi" = ( -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "fj" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "fk" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "fl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "fm" = ( /obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{ dir = 8 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "fn" = ( /obj/machinery/atmospherics/pipe/simple/green/visible, @@ -2730,20 +2219,14 @@ locked = 0; pixel_y = 23 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "fo" = ( /obj/machinery/suit_storage_unit/syndicate, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "fp" = ( -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/power) "fq" = ( /obj/machinery/portable_atmospherics/canister/nitrous_oxide, @@ -2751,9 +2234,7 @@ dir = 4 }, /obj/effect/turf_decal/delivery, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage) "fr" = ( /obj/machinery/atmospherics/pipe/simple/yellow/hidden{ @@ -2763,17 +2244,13 @@ dir = 4 }, /obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "fs" = ( /obj/machinery/atmospherics/pipe/simple/yellow/hidden{ dir = 4 }, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/airlock) "ft" = ( /obj/machinery/atmospherics/pipe/simple/yellow/hidden{ @@ -2783,27 +2260,21 @@ dir = 4; pixel_x = -24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "fu" = ( /obj/machinery/atmospherics/pipe/simple/yellow/hidden{ dir = 4 }, /obj/machinery/light, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "fv" = ( /obj/machinery/atmospherics/components/binary/valve{ dir = 4; name = "Port To Hall" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "fw" = ( /obj/machinery/portable_atmospherics/canister/nitrous_oxide, @@ -2811,9 +2282,7 @@ dir = 8 }, /obj/item/wrench, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "fx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, @@ -2829,9 +2298,7 @@ pixel_x = -25; pixel_y = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "fy" = ( /obj/machinery/atmospherics/components/trinary/mixer{ @@ -2841,26 +2308,20 @@ node2_concentration = 0.8; on = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "fz" = ( /obj/machinery/atmospherics/pipe/simple/green/visible, /obj/machinery/atmospherics/pipe/simple/supplymain/visible{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "fA" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/visible{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "fB" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/visible{ @@ -2868,9 +2329,7 @@ }, /obj/machinery/door/firedoor, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "fC" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ @@ -2879,14 +2338,10 @@ id_tag = "o2_out_bunker"; name = "oxygen out" }, -/turf/open/floor/plating/airless{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating/airless, /area/ruin/space/has_grav/deepstorage/power) "fD" = ( -/turf/open/floor/plating/airless{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating/airless, /area/ruin/space/has_grav/deepstorage/power) "fE" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, @@ -2896,9 +2351,7 @@ name = "Dormory APC"; pixel_x = 24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/dorm) "fF" = ( /obj/machinery/door/poddoor{ @@ -2906,30 +2359,22 @@ }, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "fG" = ( /obj/machinery/door/poddoor{ id = "bunkerexterior" }, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "fH" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/visible, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "fI" = ( /obj/machinery/atmospherics/pipe/simple/green/visible, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "fJ" = ( /obj/machinery/computer/atmos_control/tank{ @@ -2940,66 +2385,50 @@ output_tag = "o2_out_bunker"; sensors = list("o2_sensor_bunker" = "Tank") }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "fK" = ( /obj/machinery/door/firedoor, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "fL" = ( /obj/machinery/air_sensor{ frequency = 1441; id_tag = "o2_sensor_bunker" }, -/turf/open/floor/plating/airless{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating/airless, /area/ruin/space/has_grav/deepstorage/power) "fM" = ( /obj/machinery/atmospherics/miner/oxygen, /obj/machinery/light/small{ dir = 4 }, -/turf/open/floor/plating/airless{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating/airless, /area/ruin/space/has_grav/deepstorage/power) "fN" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/dorm) "fO" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/dorm) "fP" = ( /obj/structure/closet/wardrobe/pjs, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/dorm) "fQ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "fR" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -3014,9 +2443,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 8 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "fS" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -3025,14 +2452,10 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "fT" = ( -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "fU" = ( /obj/machinery/camera{ @@ -3044,15 +2467,11 @@ /obj/effect/turf_decal/stripes/corner{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "fV" = ( /obj/structure/closet/emcloset, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "fW" = ( /obj/structure/cable/yellow{ @@ -3061,9 +2480,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 4 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "fX" = ( /obj/structure/cable/yellow{ @@ -3075,9 +2492,7 @@ /obj/structure/sign/electricshock{ pixel_y = 32 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "fY" = ( /obj/effect/turf_decal/stripes/line{ @@ -3089,9 +2504,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 4 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "fZ" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ @@ -3100,9 +2513,7 @@ /obj/structure/cable/yellow{ icon_state = "1-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "ga" = ( /obj/machinery/atmospherics/components/trinary/filter{ @@ -3110,17 +2521,13 @@ filter_type = "o2"; on = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gb" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gc" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ @@ -3128,9 +2535,7 @@ }, /obj/machinery/door/firedoor, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "gd" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ @@ -3138,9 +2543,7 @@ frequency = 1441; id = "n2_in_bunker" }, -/turf/open/floor/plating/airless{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating/airless, /area/ruin/space/has_grav/deepstorage/power) "ge" = ( /obj/machinery/door/airlock{ @@ -3149,17 +2552,13 @@ /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 4 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/wood, /area/ruin/space/has_grav/deepstorage/dorm) "gf" = ( /obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/dorm) "gg" = ( /obj/machinery/washing_machine, @@ -3170,9 +2569,7 @@ dir = 8; pixel_x = 24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/dorm) "gh" = ( /obj/structure/cable/yellow{ @@ -3184,9 +2581,7 @@ /obj/machinery/light/small{ dir = 8 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "gi" = ( /obj/machinery/power/terminal{ @@ -3198,18 +2593,14 @@ /obj/structure/cable/yellow{ icon_state = "0-4" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "gj" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /obj/structure/cable/yellow{ icon_state = "2-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gk" = ( /obj/machinery/light{ @@ -3219,57 +2610,43 @@ dir = 4; pixel_x = 24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gl" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, /obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/dorm) "gm" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/closet/crate/bin{ name = "laundry bin" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/dorm) "gn" = ( /obj/machinery/light/small, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "go" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "gp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/power) "gq" = ( /obj/structure/cable/yellow{ icon_state = "1-4" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "gr" = ( /obj/machinery/power/smes/engineering, @@ -3279,9 +2656,7 @@ /obj/structure/sign/electricshock{ pixel_y = -32 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "gs" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ @@ -3290,9 +2665,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, @@ -3302,17 +2675,13 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gu" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/visible{ dir = 5 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gv" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ @@ -3321,22 +2690,16 @@ id_tag = "n2_out_bunker"; name = "nitrogen out" }, -/turf/open/floor/plating/airless{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating/airless, /area/ruin/space/has_grav/deepstorage/power) "gw" = ( /obj/machinery/sleeper{ dir = 4 }, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/white, /area/ruin/space/has_grav/deepstorage/dorm) "gx" = ( -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/white, /area/ruin/space/has_grav/deepstorage/dorm) "gy" = ( /obj/structure/closet/crate/freezer, @@ -3351,9 +2714,7 @@ /obj/item/reagent_containers/blood/random, /obj/item/reagent_containers/blood/random, /obj/item/reagent_containers/blood/random, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/white, /area/ruin/space/has_grav/deepstorage/dorm) "gz" = ( /obj/machinery/door/airlock/highsecurity{ @@ -3361,9 +2722,7 @@ name = "Inconspicuous Airlock"; req_access_txt = "200" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage) "gA" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ @@ -3372,17 +2731,13 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gB" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gC" = ( /obj/machinery/computer/atmos_control/tank{ @@ -3393,55 +2748,41 @@ output_tag = "n2_out_bunker"; sensors = list("n2_sensor_bunker" = "Tank") }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gD" = ( /obj/machinery/air_sensor{ frequency = 1441; id_tag = "n2_sensor_bunker" }, -/turf/open/floor/plating/airless{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating/airless, /area/ruin/space/has_grav/deepstorage/power) "gE" = ( /obj/machinery/atmospherics/miner/nitrogen, /obj/machinery/light/small{ dir = 4 }, -/turf/open/floor/plating/airless{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating/airless, /area/ruin/space/has_grav/deepstorage/power) "gF" = ( /obj/machinery/light/small, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/white, /area/ruin/space/has_grav/deepstorage/dorm) "gG" = ( /obj/machinery/iv_drip, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/white, /area/ruin/space/has_grav/deepstorage/dorm) "gH" = ( /obj/machinery/light/small{ dir = 8 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage) "gI" = ( /obj/machinery/light/small{ dir = 4 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage) "gJ" = ( /obj/machinery/light/small{ @@ -3450,9 +2791,7 @@ /obj/structure/cable/yellow{ icon_state = "2-4" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "gK" = ( /obj/structure/cable/yellow{ @@ -3461,9 +2800,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "gL" = ( /obj/machinery/door/airlock/highsecurity{ @@ -3473,23 +2810,17 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "gM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /obj/structure/cable/yellow{ icon_state = "1-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gN" = ( -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gO" = ( /obj/machinery/atmospherics/components/trinary/filter{ @@ -3497,9 +2828,7 @@ filter_type = "n2o"; on = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gP" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ @@ -3507,9 +2836,7 @@ frequency = 1441; id = "o2_in_bunker" }, -/turf/open/floor/plating/airless{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating/airless, /area/ruin/space/has_grav/deepstorage/power) "gQ" = ( /obj/machinery/door/airlock/highsecurity{ @@ -3518,18 +2845,14 @@ req_access_txt = "200" }, /obj/structure/fans/tiny, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage) "gR" = ( /obj/structure/grille, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "gS" = ( /obj/structure/grille, @@ -3540,9 +2863,7 @@ icon_state = "1-8" }, /obj/machinery/door/firedoor, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "gT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ @@ -3552,17 +2873,13 @@ /obj/structure/sign/radiation{ pixel_x = -32 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gU" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ @@ -3574,9 +2891,7 @@ pixel_y = 4 }, /obj/item/storage/toolbox/electrical, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gW" = ( /obj/structure/table, @@ -3585,9 +2900,7 @@ pixel_y = 4 }, /obj/item/storage/toolbox/mechanical, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gX" = ( /obj/machinery/power/rtg/advanced, @@ -3595,51 +2908,37 @@ icon_state = "1-2" }, /obj/structure/cable/yellow, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "gY" = ( /obj/machinery/door/airlock/highsecurity{ name = "Telecomms"; req_access_txt = "200" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "gZ" = ( /obj/machinery/power/rtg/advanced, /obj/structure/cable/yellow, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "ha" = ( /obj/machinery/power/rtg/advanced, /obj/machinery/light/small, /obj/structure/cable/yellow, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "hb" = ( /obj/machinery/blackbox_recorder, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "hc" = ( /obj/machinery/light/small, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "hd" = ( /obj/machinery/telecomms/relay/preset/telecomms, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "he" = ( /obj/structure/window/reinforced{ @@ -3648,9 +2947,7 @@ /obj/structure/window/reinforced{ dir = 1 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "hf" = ( /obj/machinery/hydroponics/constructable, @@ -3662,9 +2959,7 @@ locked = 0; pixel_y = 23 }, -/turf/open/floor/light{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/light, /area/ruin/space/has_grav/deepstorage/hydroponics) "hg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -3673,18 +2968,14 @@ /obj/machinery/firealarm{ pixel_y = 24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "hh" = ( /obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{ dir = 1 }, /obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "hi" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -3696,9 +2987,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "hj" = ( /obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{ @@ -3711,16 +3000,12 @@ dir = 4; pixel_x = 24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/dorm) "hk" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "hl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, @@ -3731,43 +3016,33 @@ dir = 8; pixel_x = -24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "hm" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "hn" = ( /obj/structure/closet/emcloset, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "ho" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 4 }, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/power) "hp" = ( /obj/machinery/power/smes/engineering, /obj/structure/cable/yellow{ icon_state = "0-8" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "hq" = ( /obj/machinery/door/firedoor, @@ -3775,9 +3050,117 @@ /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/deepstorage/power) +"hr" = ( +/obj/effect/baseturf_helper/asteroid/airless, +/turf/closed/mineral/random/low_chance, +/area/ruin/unpowered/no_grav) +"hs" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"ht" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hu" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hv" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hw" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hx" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hy" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hz" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hA" = ( +/obj/effect/baseturf_helper/asteroid/airless, +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/kitchen) +"hB" = ( +/obj/effect/baseturf_helper/asteroid/airless, +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/hydroponics) +"hC" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hD" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hE" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hF" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hG" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hH" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hI" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hJ" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hK" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hL" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hM" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hN" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hO" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hP" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hQ" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hR" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hS" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hT" = ( +/obj/effect/baseturf_helper/asteroid/airless, +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage) +"hU" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hV" = ( +/obj/effect/baseturf_helper/asteroid/airless, +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/dorm) +"hW" = ( +/obj/effect/baseturf_helper/asteroid/airless, +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/armory) +"hX" = ( +/obj/effect/baseturf_helper/asteroid/airless, +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/airlock) +"hY" = ( +/obj/effect/baseturf_helper/asteroid/airless, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/power) (1,1,1) = {" @@ -4259,7 +3642,7 @@ ab ab ab ab -ab +hr ab ab ab @@ -4318,14 +3701,14 @@ ab ab ab ab -aw -aw -aw -aw -aw -aw -aw -dB +hE +hJ +hN +hP +hQ +hS +hU +hV dB dB dB @@ -4370,7 +3753,7 @@ ab ab ab ab -aw +hF bT bU cB @@ -4419,10 +3802,10 @@ ab ab ab aw -aw -aw -aw -aw +hz +hC +hD +hG bU bU cB @@ -4470,11 +3853,11 @@ ab ab ab ab -aw +hs aG aR bm -aw +hH bV ch cC @@ -4522,15 +3905,15 @@ ab ab ab ab -aw +ht aH aS bn -aw -aw -aw +hI +hK +hO cD -aw +hR dg dz dQ @@ -4574,7 +3957,7 @@ ab ab ab ab -aw +hu aI aT bo @@ -4626,7 +4009,7 @@ ab ab ab ab -aw +hv aJ aU bp @@ -4678,12 +4061,12 @@ ab ab ab ab -aw +hw aK aV bq bG -aw +hL cj cG bz @@ -4730,12 +4113,12 @@ ab ab ab ab -aw +hx aL aW br bH -aw +hM ck cH cT @@ -4782,8 +4165,8 @@ ab ab ab ab -aw -af +hy +hA af af af @@ -4999,7 +4382,7 @@ af cp cp cp -cp +hT dI dX eq @@ -5059,7 +4442,7 @@ eJ eV fi fu -eq +hX ho fp fp @@ -5575,7 +4958,7 @@ de de de de -de +hW fb fp fD @@ -5585,7 +4968,7 @@ fp fD gE fD -fp +hY ab ab ab @@ -5719,7 +5102,7 @@ ab ab ab ab -aQ +hB aQ aQ aQ diff --git a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm index 2eab719806..42b04d5c30 100644 --- a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm @@ -4059,14 +4059,10 @@ /area/ruin/space/has_grav/hotel/pool) "li" = ( /obj/effect/light_emitter, -/turf/open/floor/plating/beach/water{ - baseturf = /turf/open/space - }, +/turf/open/floor/plating/beach/water, /area/ruin/space/has_grav/hotel/pool) "lj" = ( -/turf/open/floor/plating/beach/water{ - baseturf = /turf/open/space - }, +/turf/open/floor/plating/beach/water, /area/ruin/space/has_grav/hotel/pool) "lk" = ( /obj/structure/chair{ @@ -4274,9 +4270,7 @@ /area/ruin/space/has_grav/hotel/security) "lP" = ( /obj/item/bikehorn/rubberducky, -/turf/open/floor/plating/beach/water{ - baseturf = /turf/open/space - }, +/turf/open/floor/plating/beach/water, /area/ruin/space/has_grav/hotel/pool) "lQ" = ( /obj/structure/table, @@ -4655,6 +4649,10 @@ }, /turf/open/floor/carpet, /area/ruin/space/has_grav/hotel) +"mW" = ( +/obj/effect/baseturf_helper/space, +/turf/closed/wall, +/area/ruin/space/has_grav/hotel/pool) (1,1,1) = {" aa @@ -7090,7 +7088,7 @@ ih fi cJ jt -jQ +mW jQ jQ jQ diff --git a/_maps/RandomZLevels/beach2.dmm b/_maps/RandomZLevels/beach2.dmm index 7f48402838..81bb0144d9 100644 --- a/_maps/RandomZLevels/beach2.dmm +++ b/_maps/RandomZLevels/beach2.dmm @@ -91,22 +91,16 @@ density = 0; pixel_y = 18 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "at" = ( -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "au" = ( /obj/machinery/computer/security/telescreen/entertainment{ pixel_y = 32 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "av" = ( /obj/structure/toilet{ @@ -117,9 +111,7 @@ /area/awaymission/beach) "aw" = ( /obj/structure/closet/secure_closet/personal/cabinet, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "ax" = ( /obj/item/bedsheet/rainbow, @@ -131,9 +123,7 @@ pixel_x = 24; specialfunctions = 4 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "ay" = ( /obj/effect/overlay/palmtree_r, @@ -151,9 +141,7 @@ /obj/item/reagent_containers/food/drinks/bottle/wine, /obj/item/reagent_containers/food/drinks/bottle/rum, /obj/structure/table/wood, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aB" = ( /obj/effect/overlay/coconut, @@ -174,9 +162,7 @@ /obj/structure/mirror{ pixel_y = 28 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aF" = ( /obj/machinery/button/door{ @@ -186,9 +172,7 @@ pixel_x = 24; specialfunctions = 4 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aG" = ( /obj/machinery/button/door{ @@ -198,9 +182,7 @@ pixel_x = 24; specialfunctions = 4 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aH" = ( /obj/machinery/door/airlock/sandstone{ @@ -238,74 +220,52 @@ /area/awaymission/beach) "aM" = ( /obj/structure/closet/gmcloset, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aN" = ( /obj/structure/closet/secure_closet/bar, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aO" = ( /obj/structure/table/wood, /obj/item/book/manual/barman_recipes, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aP" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/drinks/shaker, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aQ" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/drinks/beer, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aR" = ( /obj/structure/table/wood, /obj/item/clothing/glasses/sunglasses, /obj/item/reagent_containers/food/drinks/beer, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aS" = ( /obj/effect/mob_spawn/human/bartender/alive, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aT" = ( /obj/machinery/vending/boozeomat, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aU" = ( /obj/machinery/vending/cigarette, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aV" = ( /obj/machinery/vending/cola, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aW" = ( /obj/machinery/vending/snack, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aX" = ( /obj/structure/mineral_door/wood{ @@ -316,29 +276,21 @@ "aY" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/drinks/ale, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aZ" = ( /obj/structure/table/wood, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "ba" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/drinks/soda_cans/dr_gibb, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "bb" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "bc" = ( /obj/item/toy/beach_ball, @@ -431,6 +383,10 @@ "bt" = ( /turf/open/floor/plating/beach/water, /area/awaymission/beach) +"bu" = ( +/obj/effect/baseturf_helper/beach/sand, +/turf/open/floor/plating/beach/sand, +/area/awaymission/beach) (1,1,1) = {" aa @@ -43447,7 +43403,7 @@ ab ab ab ab -ac +bu ac ac ac diff --git a/_maps/RandomZLevels/caves.dmm b/_maps/RandomZLevels/caves.dmm index cfbd187283..06ef5c5c79 100644 --- a/_maps/RandomZLevels/caves.dmm +++ b/_maps/RandomZLevels/caves.dmm @@ -10,7 +10,6 @@ /area/awaymission/caves/BMP_asteroid/level_three) "ad" = ( /turf/open/lava/smooth{ - baseturf = /turf/open/lava/smooth; desc = "Looks hot."; luminosity = 5; name = "lava"; @@ -36,7 +35,6 @@ /area/awaymission/caves/BMP_asteroid/level_three) "ah" = ( /turf/open/lava/smooth{ - baseturf = /turf/open/lava/smooth; desc = "Looks hot."; luminosity = 5; name = "lava"; @@ -77,14 +75,12 @@ /area/awaymission/caves/BMP_asteroid/level_four) "ao" = ( /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) "ap" = ( /obj/structure/destructible/cult/pylon, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -97,14 +93,12 @@ "ar" = ( /obj/effect/decal/cleanable/blood/old, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) "as" = ( /obj/effect/decal/cleanable/blood/gibs/old, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -124,7 +118,6 @@ /obj/item/clothing/mask/gas/clown_hat, /obj/item/organ/heart/demon, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -134,25 +127,20 @@ name = "shock rune" }, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) "aw" = ( /obj/effect/decal/remains/human, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) "ax" = ( /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, -/turf/closed/wall/mineral/cult{ - baseturf = /turf/open/lava/smooth - }, +/turf/closed/wall/mineral/cult, /area/awaymission/caves/BMP_asteroid/level_four) "ay" = ( /obj/structure/destructible/cult/tome, @@ -162,14 +150,12 @@ }, /obj/item/coin/antagtoken, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) "az" = ( /obj/structure/constructshell, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -177,14 +163,12 @@ /obj/structure/girder/cult, /obj/item/stack/sheet/runed_metal, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) "aB" = ( /mob/living/simple_animal/hostile/spawner/skeleton, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -192,14 +176,12 @@ /obj/structure/bed, /obj/item/bedsheet/cult, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) "aD" = ( /obj/item/stack/sheet/runed_metal, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -213,7 +195,6 @@ name = "an extremely flamboyant book" }, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -225,37 +206,29 @@ name = "weak forcefield" }, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) "aG" = ( /obj/item/ectoplasm, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) "aH" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/closed/wall, /area/awaymission/caves/BMP_asteroid/level_three) "aI" = ( /obj/machinery/door/airlock/external, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_three) "aJ" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/closed/wall/rust, /area/awaymission/caves/BMP_asteroid/level_three) "aK" = ( /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_three) @@ -264,7 +237,6 @@ dir = 4 }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_three) @@ -275,7 +247,6 @@ id = "minedeep" }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_three) @@ -293,7 +264,6 @@ dir = 8 }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_three) @@ -305,7 +275,6 @@ name = "rusty ladder" }, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -318,14 +287,12 @@ "aR" = ( /obj/effect/forcefield/cult, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) "aS" = ( /obj/structure/girder/cult, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -351,7 +318,6 @@ "aV" = ( /obj/effect/forcefield/cult, /turf/open/lava/smooth{ - baseturf = /turf/open/lava/smooth; desc = "Looks hot."; luminosity = 5; name = "lava"; @@ -361,7 +327,6 @@ "aW" = ( /obj/structure/barricade/wooden, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_three) @@ -371,7 +336,6 @@ id_target = "minedeepup" }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_three) @@ -390,7 +354,6 @@ name = "flame rune" }, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -398,7 +361,6 @@ /obj/structure/destructible/cult/talisman, /obj/item/plasma_fist_scroll, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -418,9 +380,7 @@ /turf/open/floor/plating/asteroid/basalt/lava{ initial_gas_mix = "n2=23;o2=14" }, -/turf/closed/wall/mineral/cult{ - baseturf = /turf/open/lava/smooth - }, +/turf/closed/wall/mineral/cult, /area/awaymission/caves/BMP_asteroid/level_four) "be" = ( /mob/living/simple_animal/hostile/spawner/mining/goliath, @@ -431,7 +391,6 @@ "bf" = ( /obj/effect/decal/cleanable/blood, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -452,7 +411,6 @@ dir = 9 }, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -461,7 +419,6 @@ dir = 1 }, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -470,7 +427,6 @@ dir = 5 }, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -479,7 +435,6 @@ dir = 8 }, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -488,7 +443,6 @@ calibrated = 0 }, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -497,7 +451,6 @@ dir = 4 }, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -513,14 +466,12 @@ dir = 10 }, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) "bq" = ( /obj/machinery/gateway, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -529,7 +480,6 @@ dir = 6 }, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -565,7 +515,6 @@ /obj/effect/decal/cleanable/blood, /mob/living/simple_animal/hostile/spawner/skeleton, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -586,7 +535,6 @@ /obj/effect/decal/remains/human, /obj/effect/decal/cleanable/blood, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -595,7 +543,6 @@ /obj/item/device/necromantic_stone, /obj/effect/decal/cleanable/blood, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -607,14 +554,12 @@ /area/awaymission/caves/BMP_asteroid/level_three) "bC" = ( /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_three) "bD" = ( /mob/living/simple_animal/hostile/skeleton, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_three) @@ -622,7 +567,6 @@ /obj/structure/destructible/cult/pylon, /obj/effect/decal/cleanable/blood, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -634,7 +578,6 @@ name = "rusty ladder" }, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_three) @@ -670,7 +613,6 @@ /area/awaymission/caves/BMP_asteroid) "bM" = ( /turf/open/lava/smooth{ - baseturf = /turf/open/lava/smooth; desc = "Looks hot."; luminosity = 5; name = "lava"; @@ -682,7 +624,6 @@ /area/awaymission/caves/BMP_asteroid/level_two) "bO" = ( /turf/open/lava/smooth{ - baseturf = /turf/open/lava/smooth; desc = "Looks hot."; luminosity = 5; name = "lava"; @@ -703,25 +644,19 @@ }, /area/awaymission/caves/BMP_asteroid/level_two) "bQ" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/closed/wall/rust, /area/awaymission/caves/BMP_asteroid/level_two) "bR" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/closed/wall, /area/awaymission/caves/BMP_asteroid/level_two) "bS" = ( /obj/structure/barricade/wooden, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_two) "bT" = ( /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_two) @@ -731,7 +666,6 @@ id_target = "minedeepup" }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_two) @@ -758,7 +692,6 @@ "bY" = ( /mob/living/simple_animal/hostile/skeleton, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_two) @@ -774,7 +707,6 @@ "ca" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) @@ -816,25 +748,19 @@ id = "mineintro" }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_two) "cf" = ( /turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_two) "cg" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/closed/wall, /area/awaymission/caves/research) "ch" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/closed/wall/rust, /area/awaymission/caves/research) "ci" = ( /obj/item/shard, @@ -859,7 +785,6 @@ "cl" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_two) @@ -868,7 +793,6 @@ /area/awaymission/caves/BMP_asteroid/level_two) "cn" = ( /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -879,14 +803,12 @@ /obj/structure/filingcabinet, /obj/item/paper/fluff/awaymissions/caves/omega, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) "cp" = ( /obj/structure/table, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -898,14 +820,12 @@ /area/awaymission/caves/BMP_asteroid/level_two) "cr" = ( /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) "cs" = ( /obj/item/shard, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -914,34 +834,29 @@ /obj/item/stack/rods, /obj/effect/decal/cleanable/blood/old, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) "cu" = ( /obj/effect/decal/cleanable/blood/gibs, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) "cv" = ( /obj/effect/decal/cleanable/blood/old, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) "cw" = ( /obj/item/stack/rods, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) "cx" = ( /turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) @@ -960,7 +875,6 @@ "cA" = ( /obj/effect/decal/remains/xeno, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -970,7 +884,6 @@ }, /obj/effect/decal/cleanable/xenoblood, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -979,14 +892,12 @@ /obj/item/restraints/handcuffs/cable, /obj/item/restraints/handcuffs/cable, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) "cD" = ( /obj/effect/decal/remains/human, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -997,14 +908,12 @@ }, /obj/item/stack/rods, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) "cF" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -1019,13 +928,11 @@ "cH" = ( /obj/machinery/door/airlock/external, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_two) "cI" = ( /turf/open/floor/plating{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_two) @@ -1039,9 +946,7 @@ desc = "A warning sign which reads 'HOLY SHIT NIGGA WHAT ARE YOU DOING'."; name = "\improper HOLY SHIT NIGGA WHAT ARE YOU DOING" }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/closed/wall, /area/awaymission/caves/BMP_asteroid/level_two) "cL" = ( /mob/living/simple_animal/hostile/spawner/mining/basilisk, @@ -1054,7 +959,6 @@ dir = 8 }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -1062,7 +966,6 @@ /obj/machinery/door/window/eastleft, /obj/effect/decal/cleanable/xenoblood/xgibs, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -1072,14 +975,12 @@ }, /obj/machinery/door/window/eastleft, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) "cP" = ( /obj/machinery/door/airlock/external, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -1099,7 +1000,6 @@ "cR" = ( /obj/effect/landmark/awaystart, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -1110,7 +1010,6 @@ icon_state = "right" }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -1122,7 +1021,6 @@ icon_state = "right" }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -1138,7 +1036,6 @@ "cV" = ( /obj/effect/decal/cleanable/xenoblood/xgibs, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -1147,7 +1044,6 @@ dir = 4 }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -1155,14 +1051,12 @@ /obj/structure/table, /obj/item/melee/baton, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) "cY" = ( /obj/structure/glowshroom/single, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -1172,7 +1066,6 @@ pixel_x = 32 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -1187,7 +1080,6 @@ /obj/machinery/cell_charger, /obj/item/stock_parts/cell/crap, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -1207,14 +1099,12 @@ "dd" = ( /obj/structure/closet/emcloset, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) "de" = ( /obj/machinery/light, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -1226,7 +1116,6 @@ /obj/item/grenade/syndieminibomb/concussion, /obj/item/grenade/syndieminibomb/concussion, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -1236,24 +1125,19 @@ id_target = "mineintroup" }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_two) "dh" = ( /obj/machinery/door/airlock/external, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid/level_two) "di" = ( /obj/structure/table, /obj/item/paper/fluff/awaymissions/caves/magma, /obj/item/pen, /obj/effect/decal/cleanable/cobweb, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid/level_two) "dj" = ( /obj/structure/ladder/unbreakable{ @@ -1261,64 +1145,46 @@ height = 2; id = "minedeep" }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid/level_two) "dk" = ( /obj/structure/table, /obj/machinery/microwave, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid/level_two) "dl" = ( /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid/level_two) "dm" = ( /obj/structure/spider/stickyweb, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid/level_two) "dn" = ( /obj/structure/chair{ dir = 1 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid/level_two) "do" = ( -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid/level_two) "dp" = ( /obj/structure/table, /obj/item/storage/box/donkpockets, /obj/item/clothing/glasses/meson, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid/level_two) "dq" = ( /obj/machinery/light/small/built{ dir = 4 }, /obj/structure/spider/stickyweb, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid/level_two) "dr" = ( /obj/structure/spider/stickyweb, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid/level_two) "ds" = ( /obj/structure/closet/secure_closet/personal, @@ -1330,193 +1196,137 @@ pixel_x = 5; throwforce = 1 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid/level_two) "dt" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/closed/wall, /area/awaymission/caves/northblock) "du" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/closed/wall/rust, /area/awaymission/caves/northblock) "dv" = ( /obj/machinery/suit_storage_unit/mining{ desc = "An industrial unit made to hold space suits. Age has seemed to rust the sliding door mechanisms, making it difficult to open."; name = "rusted suit storage unit" }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid/level_two) "dw" = ( /obj/structure/bed, /obj/item/bedsheet, /obj/effect/landmark/awaystart, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid/level_two) "dx" = ( /obj/structure/closet/secure_closet/personal, /obj/effect/decal/cleanable/cobweb, /obj/item/sord, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "dy" = ( -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "dz" = ( /obj/structure/table/wood, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "dA" = ( /obj/structure/closet/secure_closet/personal, /obj/item/gun/energy/kinetic_accelerator, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "dB" = ( /obj/structure/dresser, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "dC" = ( /obj/structure/closet/secure_closet/personal, /obj/effect/decal/cleanable/cobweb, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "dD" = ( /obj/structure/table/wood, /obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "dE" = ( /obj/machinery/light/small/built{ dir = 8 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "dF" = ( /obj/structure/bed, /obj/item/bedsheet, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "dG" = ( /obj/machinery/light/small{ dir = 8 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "dH" = ( /obj/structure/bed, /obj/item/bedsheet, /obj/effect/landmark/awaystart, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "dI" = ( /obj/machinery/door/airlock{ name = "Dorm" }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "dJ" = ( /obj/item/stack/rods, /obj/structure/spider/stickyweb, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/northblock) "dK" = ( /obj/structure/girder, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/northblock) "dL" = ( /obj/item/stack/sheet/metal, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/northblock) "dM" = ( -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/northblock) "dN" = ( /obj/machinery/light/small{ dir = 1 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/northblock) "dO" = ( /mob/living/simple_animal/hostile/retaliate/bat{ desc = "A rare breed of bat which roosts deep in caves."; name = "Cave Bat" }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/northblock) "dP" = ( /obj/item/stack/rods, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/northblock) "dQ" = ( /obj/machinery/door/airlock/mining{ name = "Dorm Access" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/northblock) "dR" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/northblock) "dS" = ( /obj/machinery/light/small, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/northblock) "dT" = ( /obj/structure/spider/stickyweb, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/northblock) "dU" = ( /obj/structure/closet/crate/miningcar{ @@ -1533,51 +1343,39 @@ /turf/open/floor/wood, /area/awaymission/caves/northblock) "dW" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/closed/wall, /area/awaymission/caves/BMP_asteroid) "dX" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/closed/wall/rust, /area/awaymission/caves/BMP_asteroid) "dY" = ( /obj/structure/bed, /obj/item/bedsheet, /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/landmark/awaystart, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "dZ" = ( /obj/machinery/light/small{ dir = 8 }, /obj/effect/decal/cleanable/cobweb, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "ea" = ( /obj/item/stack/sheet/metal, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "eb" = ( /obj/machinery/light/small/built{ dir = 8 }, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/northblock) "ec" = ( /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/northblock) @@ -1585,14 +1383,12 @@ /obj/structure/bed, /obj/effect/landmark/awaystart, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/northblock) "ee" = ( /obj/structure/girder, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/northblock) @@ -1604,30 +1400,22 @@ /area/awaymission/caves/BMP_asteroid) "eg" = ( /obj/effect/decal/cleanable/robot_debris/old, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "eh" = ( /obj/structure/table, /obj/item/device/radio, /obj/item/device/radio, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "ei" = ( /obj/structure/table, /obj/item/paper_bin, /obj/item/pen, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid) "ej" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid) "ek" = ( /obj/structure/window{ @@ -1635,41 +1423,33 @@ dir = 8 }, /mob/living/simple_animal/hostile/mining_drone, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid) "el" = ( /obj/structure/closet/secure_closet/personal, /obj/item/gun/energy/laser/captain/scattershot, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "em" = ( /obj/structure/closet/secure_closet/personal, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/northblock) "en" = ( /obj/effect/decal/cleanable/shreds, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/northblock) "eo" = ( /obj/item/stack/rods, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/northblock) "ep" = ( /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/northblock) @@ -1677,15 +1457,11 @@ /obj/machinery/light{ dir = 8 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "er" = ( /obj/structure/chair/stool, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid) "es" = ( /obj/structure/window{ @@ -1694,14 +1470,11 @@ }, /obj/structure/window, /mob/living/simple_animal/hostile/mining_drone, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid) "et" = ( /obj/effect/decal/cleanable/shreds, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/northblock) @@ -1712,32 +1485,24 @@ }, /area/awaymission/caves/BMP_asteroid) "ev" = ( -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "ew" = ( /obj/structure/table, /obj/item/device/mining_scanner, /obj/item/device/mining_scanner, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "ex" = ( /obj/structure/closet/secure_closet/miner, /obj/effect/decal/cleanable/cobweb, /obj/item/survivalcapsule, /obj/item/extinguisher/mini, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "ey" = ( /obj/structure/reagent_dispensers/watertank, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "ez" = ( /obj/machinery/light/small/built{ @@ -1747,22 +1512,16 @@ desc = "An industrial unit made to hold space suits. Age has seemed to rust the sliding door mechanisms, making it difficult to open."; name = "rusted suit storage unit" }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "eA" = ( /obj/structure/table, /obj/item/paper/fluff/awaymissions/caves/work_notice, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "eB" = ( /obj/structure/barricade/wooden, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "eC" = ( /obj/structure/table, @@ -1771,67 +1530,47 @@ /obj/item/clothing/glasses/meson, /obj/item/clothing/glasses/meson, /obj/item/clothing/glasses/meson, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "eD" = ( /obj/structure/closet/secure_closet/miner, /obj/item/survivalcapsule, /obj/item/extinguisher/mini, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "eE" = ( /obj/effect/landmark/awaystart, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "eF" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/closed/wall, /area/awaymission/caves/listeningpost) "eG" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/closed/wall/rust, /area/awaymission/caves/listeningpost) "eH" = ( /obj/machinery/vending/sustenance, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "eI" = ( /obj/structure/closet/crate/trashcart, /obj/item/switchblade, /obj/item/switchblade, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/listeningpost) "eJ" = ( -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/listeningpost) "eK" = ( /obj/structure/table, /obj/item/gun/energy/kinetic_accelerator, /obj/item/gun/energy/kinetic_accelerator, /obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/listeningpost) "eL" = ( /obj/machinery/vending/sovietsoda, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "eM" = ( /obj/machinery/light/small{ @@ -1840,21 +1579,15 @@ /obj/structure/table, /obj/item/storage/toolbox/electrical, /obj/item/device/multitool, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/listeningpost) "eN" = ( /obj/effect/decal/cleanable/oil, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/listeningpost) "eO" = ( /obj/effect/landmark/awaystart, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/listeningpost) "eP" = ( /obj/structure/table, @@ -1874,9 +1607,7 @@ pixel_x = 5; throwforce = 1 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/listeningpost) "eQ" = ( /obj/machinery/mineral/mint, @@ -1886,9 +1617,7 @@ /area/awaymission/caves/BMP_asteroid) "eR" = ( /obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "eS" = ( /obj/machinery/light/small/built, @@ -1896,29 +1625,21 @@ desc = "An industrial unit made to hold space suits. Age has seemed to rust the sliding door mechanisms, making it difficult to open."; name = "rusted suit storage unit" }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "eT" = ( /obj/structure/closet/emcloset, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "eU" = ( /obj/structure/table, /obj/item/storage/toolbox/mechanical, /obj/item/storage/toolbox/mechanical, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/listeningpost) "eV" = ( /obj/structure/closet/crate/bin, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/listeningpost) "eW" = ( /obj/structure/barricade/wooden, @@ -1927,23 +1648,17 @@ "eX" = ( /obj/structure/table, /obj/item/paper/pamphlet/gateway, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/listeningpost) "eY" = ( /obj/structure/table, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/listeningpost) "eZ" = ( /obj/machinery/light{ dir = 1 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/listeningpost) "fa" = ( /obj/structure/noticeboard{ @@ -1951,9 +1666,7 @@ }, /obj/item/paper/fluff/awaymissions/caves/shipment_notice, /obj/item/paper/fluff/awaymissions/caves/saftey_notice, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/listeningpost) "fb" = ( /mob/living/simple_animal/hostile/spawner/mining/hivelord, @@ -2005,15 +1718,11 @@ /area/awaymission/caves/BMP_asteroid) "fh" = ( /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/listeningpost) "fi" = ( /obj/machinery/door/airlock/external, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/listeningpost) "fj" = ( /obj/effect/mob_spawn/human/skeleton/alive{ @@ -2036,9 +1745,7 @@ }, /area/awaymission/caves/BMP_asteroid/level_two) "fm" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/listeningpost) "fn" = ( /obj/structure/closet/crate{ @@ -2075,9 +1782,7 @@ "fq" = ( /obj/structure/bed, /obj/effect/decal/cleanable/cobweb, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fr" = ( /obj/machinery/light/small/built{ @@ -2085,33 +1790,25 @@ }, /obj/structure/spider/stickyweb, /mob/living/simple_animal/hostile/poison/giant_spider/hunter, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fs" = ( /obj/structure/table, /obj/item/storage/firstaid/regular, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "ft" = ( /obj/structure/table, /obj/item/storage/firstaid/fire, /obj/item/storage/firstaid/fire, /obj/structure/spider/stickyweb, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fu" = ( /obj/structure/table, /obj/item/storage/firstaid/brute, /obj/item/reagent_containers/blood/OPlus, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fv" = ( /obj/structure/glowshroom/single, @@ -2131,40 +1828,31 @@ id_target = "mineintrodown" }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) "fy" = ( /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) "fz" = ( /obj/structure/barricade/wooden, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) "fA" = ( /obj/structure/bed, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fB" = ( /obj/structure/spider/stickyweb, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fC" = ( /mob/living/simple_animal/hostile/poison/giant_spider/hunter, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fD" = ( /obj/structure/spider/stickyweb, @@ -2172,9 +1860,7 @@ dir = 8 }, /mob/living/simple_animal/hostile/poison/giant_spider/hunter, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fE" = ( /obj/machinery/light/small, @@ -2197,9 +1883,7 @@ /area/awaymission/caves/BMP_asteroid) "fH" = ( /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid) "fI" = ( /obj/structure/sign/bluecross{ @@ -2211,44 +1895,33 @@ /area/awaymission/caves/BMP_asteroid) "fJ" = ( /obj/structure/grille, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid) "fK" = ( /obj/effect/decal/cleanable/cobweb, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fL" = ( /obj/structure/sign/examroom{ pixel_y = 32 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fM" = ( /obj/machinery/light/small{ dir = 1 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fN" = ( /obj/machinery/door/airlock/external, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid) "fO" = ( /obj/machinery/light/small{ dir = 4 }, /turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) @@ -2276,15 +1949,11 @@ /obj/item/storage/firstaid/toxin, /obj/item/storage/firstaid/toxin, /obj/item/reagent_containers/blood/OPlus, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fT" = ( /obj/machinery/iv_drip, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fU" = ( /obj/effect/landmark/awaystart, @@ -2295,7 +1964,6 @@ /area/awaymission/caves/BMP_asteroid) "fV" = ( /turf/open/floor/plasteel/elevatorshaft{ - baseturf = /turf/open/floor/plating/asteroid/basalt; name = "elevator flooring"; initial_gas_mix = "n2=23;o2=14" }, @@ -2303,7 +1971,6 @@ "fW" = ( /obj/structure/girder, /turf/open/floor/plating{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) @@ -2329,13 +1996,10 @@ "fY" = ( /obj/structure/table, /obj/machinery/microwave, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fZ" = ( /turf/open/floor/plating{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) @@ -2346,20 +2010,16 @@ id = "mineintro" }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) "gb" = ( /obj/structure/closet/secure_closet/freezer/kitchen, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "gc" = ( /obj/item/stack/rods, /turf/open/floor/plating{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) @@ -2383,22 +2043,18 @@ "gf" = ( /obj/structure/table/reinforced, /obj/item/reagent_containers/food/drinks/drinkingglass, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "gg" = ( /obj/structure/table/reinforced, /obj/item/storage/box/donkpockets, /turf/open/floor/plating{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) "gh" = ( /obj/structure/table/reinforced, /turf/open/floor/plating{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) @@ -2406,7 +2062,6 @@ /obj/structure/table/reinforced, /obj/item/stack/rods, /turf/open/floor/plating{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) @@ -2414,9 +2069,7 @@ /obj/machinery/door/airlock/mining{ name = "Kitchen" }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "gk" = ( /obj/effect/landmark/awaystart, @@ -2426,15 +2079,11 @@ /area/awaymission/caves/BMP_asteroid/level_two) "gl" = ( /obj/item/trash/plate, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "gm" = ( /obj/effect/decal/cleanable/blood/old, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "gn" = ( /obj/item/grown/log, @@ -2445,29 +2094,23 @@ "go" = ( /obj/structure/chair/stool, /turf/open/floor/plating{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) "gp" = ( /obj/structure/table_frame, /turf/open/floor/plating{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) "gq" = ( /obj/structure/chair/stool, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "gr" = ( /obj/structure/table, /obj/item/kitchen/fork, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "gs" = ( /obj/item/device/assembly/igniter, @@ -2478,63 +2121,47 @@ "gt" = ( /obj/structure/table_frame, /obj/item/stack/sheet/metal, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "gu" = ( /obj/item/stack/rods, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "gv" = ( /obj/structure/table_frame, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "gw" = ( /obj/structure/reagent_dispensers/beerkeg, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "gx" = ( /obj/structure/table, /obj/item/kitchen/fork, /obj/item/trash/plate, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "gy" = ( /obj/item/reagent_containers/food/drinks/drinkingglass, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "gz" = ( /obj/machinery/door/airlock/external{ name = "Mess Hall" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid) "gA" = ( /obj/machinery/light/small{ dir = 1 }, /turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) "gB" = ( /obj/machinery/mech_bay_recharge_port, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) @@ -2553,7 +2180,6 @@ dir = 4 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) @@ -2562,7 +2188,6 @@ /obj/item/storage/toolbox/mechanical, /obj/item/clothing/glasses/material, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) @@ -2574,34 +2199,26 @@ /obj/structure/table, /obj/item/mecha_parts/mecha_equipment/drill/diamonddrill, /obj/item/paper/fluff/awaymissions/caves/mech_notice, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid) "gI" = ( /obj/structure/chair/stool, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) "gJ" = ( /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) "gK" = ( /obj/structure/girder, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid) "gL" = ( /obj/item/stack/rods, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid) "gM" = ( /obj/structure/mecha_wreckage/ripley, @@ -2610,21 +2227,18 @@ "gN" = ( /obj/structure/holohoop, /turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) "gO" = ( /obj/structure/closet/emcloset, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) "gP" = ( /obj/item/toy/beach_ball/holoball, /turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) @@ -2655,16 +2269,13 @@ /obj/machinery/light/small{ dir = 4 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid) "gU" = ( /obj/structure/holohoop{ dir = 1 }, /turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) @@ -2681,6 +2292,31 @@ /obj/effect/mapping_helpers/planet_z, /turf/closed/indestructible/rock, /area/space/nearstation) +"gX" = ( +/obj/effect/baseturf_helper/lava, +/turf/closed/mineral/volcanic, +/area/awaymission/caves/BMP_asteroid/level_three) +"gY" = ( +/obj/effect/baseturf_helper/lava, +/turf/open/lava/smooth{ + desc = "Looks hot."; + luminosity = 5; + name = "lava"; + initial_gas_mix = "n2=23;o2=14" + }, +/area/awaymission/caves/BMP_asteroid/level_four) +"gZ" = ( +/obj/effect/baseturf_helper/lava, +/turf/closed/mineral/volcanic, +/area/awaymission/caves/BMP_asteroid/level_two) +"ha" = ( +/obj/effect/baseturf_helper/lava, +/turf/closed/mineral/volcanic, +/area/awaymission/caves/BMP_asteroid) +"hb" = ( +/obj/effect/baseturf_helper/asteroid/basalt, +/turf/closed/wall, +/area/awaymission/caves/northblock) (1,1,1) = {" aa @@ -4489,7 +4125,7 @@ aa aa aa aa -ac +gX ac ac ac @@ -4647,7 +4283,7 @@ aa aa aa aa -bL +ha bL bL bL @@ -5693,7 +5329,7 @@ bL bL bL bL -dt +hb dt dt du @@ -47151,7 +46787,7 @@ aa aa aa aa -ad +gY ad ad ad @@ -52448,7 +52084,7 @@ aa aa aa aa -bK +gZ bK bK bK diff --git a/_maps/RandomZLevels/snowdin.dmm b/_maps/RandomZLevels/snowdin.dmm index 7fb4fa76f1..31a6232330 100644 --- a/_maps/RandomZLevels/snowdin.dmm +++ b/_maps/RandomZLevels/snowdin.dmm @@ -9,16 +9,12 @@ /turf/open/floor/plating/asteroid/snow, /area/awaymission/snowdin) "ad" = ( -/turf/closed/wall/ice{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/closed/wall/ice, /area/awaymission/snowdin/post) "ae" = ( /obj/effect/decal/cleanable/oil, /obj/vehicle/ridden/atv, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "af" = ( /turf/open/floor/plating/ice, @@ -30,45 +26,32 @@ desc = "An emptied plasma tank, the oil on the nozzle seems to implied it was used for more than plasma storage."; name = "dusty plasma tank" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "ah" = ( /obj/effect/decal/cleanable/oil, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "ai" = ( /obj/vehicle/ridden/atv, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "aj" = ( /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) "ak" = ( /obj/structure/door_assembly/door_assembly_centcom, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "al" = ( -/turf/closed/wall/ice{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/closed/wall/ice, /area/awaymission/snowdin/base) "am" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile/ice, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "an" = ( /obj/structure/table, @@ -76,19 +59,14 @@ /obj/machinery/light/small{ dir = 8 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "ao" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "ap" = ( /obj/effect/decal/cleanable/oil, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) @@ -97,7 +75,6 @@ /obj/machinery/door/window/westright, /obj/item/paper/crumpled/ruins/snowdin/keys, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) @@ -109,7 +86,6 @@ status = 2 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) @@ -117,16 +93,12 @@ /obj/machinery/light/small{ dir = 1 }, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/base) "at" = ( /obj/structure/filingcabinet, /obj/item/paper/fluff/awaymissions/snowdin/secnotice, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/base) "au" = ( /obj/item/gun/ballistic/shotgun/boltaction, @@ -141,9 +113,7 @@ /obj/item/restraints/handcuffs, /obj/item/device/assembly/flash, /obj/item/storage/box/lethalshot, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/base) "av" = ( /obj/effect/decal/cleanable/oil, @@ -156,51 +126,37 @@ name = "garage door button"; pixel_x = 32 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "aw" = ( /obj/structure/chair/office/dark, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/base) "ax" = ( /obj/item/ammo_casing/a762, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/base) "ay" = ( /obj/structure/table/reinforced, /obj/item/paper_bin, /obj/item/pen, /obj/item/key, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/base) "az" = ( /obj/machinery/door/poddoor/shutters{ id = "garagesnow" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "aA" = ( /obj/machinery/door/airlock/external, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "aB" = ( /obj/structure/table/reinforced, /obj/structure/barricade/wooden, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/base) "aC" = ( /obj/structure/barricade/wooden, @@ -208,30 +164,22 @@ name = "Security Office"; req_access_txt = "63" }, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/base) "aD" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/closed/wall, /area/awaymission/snowdin/base) "aE" = ( /obj/structure/cable{ icon_state = "0-2" }, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "aF" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile/ice, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "aG" = ( /obj/machinery/light/small{ @@ -242,13 +190,11 @@ "aH" = ( /obj/item/ammo_casing/a762, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) "aI" = ( /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -257,7 +203,6 @@ icon_state = "1-2" }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -266,7 +211,6 @@ dir = 1 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -276,15 +220,12 @@ /area/awaymission/snowdin) "aM" = ( /obj/machinery/recharge_station, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "aN" = ( /obj/item/trash/sosjerky, /obj/effect/decal/cleanable/oil, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -293,27 +234,21 @@ dir = 9 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/base) "aP" = ( /obj/machinery/gateway{ dir = 5 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/base) "aQ" = ( /obj/machinery/gateway{ dir = 1 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/base) "aR" = ( /obj/structure/closet/crate, @@ -325,9 +260,7 @@ /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/winterboots, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/base) "aS" = ( /obj/structure/closet/crate, @@ -335,9 +268,7 @@ /obj/item/storage/firstaid/fire, /obj/item/storage/pill_bottle/stimulant, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/base) "aT" = ( /obj/machinery/light/small{ @@ -365,53 +296,39 @@ /obj/item/gun/ballistic/shotgun/automatic, /obj/item/gun/ballistic/shotgun/automatic, /obj/item/gun/ballistic/shotgun/automatic, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "aZ" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "ba" = ( /obj/machinery/door/airlock/maintenance_hatch, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "bb" = ( /obj/machinery/gateway{ dir = 8 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/base) "bc" = ( /obj/machinery/gateway{ dir = 4 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/base) "bd" = ( /obj/machinery/gateway/centeraway{ calibrated = 0 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/base) "be" = ( /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/base) "bf" = ( /obj/structure/closet/crate{ @@ -421,54 +338,40 @@ /obj/item/reagent_containers/spray/cleaner, /obj/item/soap/nanotrasen, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/base) "bg" = ( /obj/machinery/iv_drip, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) "bh" = ( /obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "bi" = ( /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "bj" = ( /obj/structure/reagent_dispensers/watertank, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "bk" = ( /obj/effect/decal/cleanable/oil, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "bl" = ( /obj/structure/table, /obj/item/shovel, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "bm" = ( /obj/machinery/light{ dir = 8 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -477,18 +380,14 @@ dir = 10 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/base) "bo" = ( /obj/machinery/gateway{ dir = 6 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/base) "bp" = ( /obj/machinery/gateway, @@ -496,9 +395,7 @@ icon_state = "0-2" }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/base) "bq" = ( /obj/structure/closet/crate, @@ -515,9 +412,7 @@ /obj/item/reagent_containers/food/snacks/grown/cocoapod, /obj/item/reagent_containers/food/snacks/grown/cocoapod, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/base) "br" = ( /obj/machinery/light{ @@ -525,7 +420,6 @@ }, /obj/machinery/iv_drip, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -533,17 +427,13 @@ /obj/structure/table, /obj/item/storage/toolbox/electrical, /obj/item/storage/toolbox/electrical, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "bt" = ( /obj/structure/table, /obj/item/shovel, /obj/item/paper/crumpled/ruins/snowdin/shovel, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "bu" = ( /obj/machinery/power/terminal{ @@ -553,7 +443,6 @@ icon_state = "0-2" }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -563,14 +452,12 @@ name = "power storage unit" }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) "bw" = ( /obj/effect/landmark/awaystart, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -580,7 +467,6 @@ icon_state = "1-2" }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -590,14 +476,12 @@ }, /obj/effect/landmark/awaystart, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) "bz" = ( /obj/effect/decal/cleanable/oil, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -608,7 +492,6 @@ /obj/item/reagent_containers/blood/random, /obj/item/reagent_containers/blood/random, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -616,22 +499,16 @@ /obj/structure/table, /obj/item/storage/toolbox/mechanical, /obj/item/storage/toolbox/mechanical, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "bC" = ( /obj/structure/showcase/machinery/signal_decrypter, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "bD" = ( /obj/machinery/space_heater, /obj/machinery/light/small, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "bE" = ( /obj/structure/closet/crate/trashcart, @@ -643,21 +520,15 @@ }, /obj/item/storage/box/rubbershot, /obj/item/key, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "bF" = ( /obj/machinery/power/port_gen/pacman, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "bG" = ( /obj/machinery/space_heater, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "bH" = ( /obj/machinery/power/terminal{ @@ -670,7 +541,6 @@ icon_state = "1-4" }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -680,7 +550,6 @@ }, /obj/effect/landmark/awaystart, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -693,7 +562,6 @@ icon_state = "1-8" }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -701,7 +569,6 @@ /obj/item/trash/pistachios, /obj/effect/landmark/awaystart, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -711,7 +578,6 @@ }, /obj/effect/landmark/awaystart, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -721,317 +587,227 @@ /area/awaymission/snowdin) "bN" = ( /obj/machinery/door/airlock/public/glass, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/base) "bO" = ( /obj/structure/dresser, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/base) "bP" = ( /obj/structure/bed, /obj/item/bedsheet, /obj/effect/landmark/awaystart, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/base) "bQ" = ( /obj/machinery/light/small{ dir = 1 }, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/base) "bR" = ( /obj/structure/bookcase/random/fiction, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/base) "bS" = ( /obj/structure/fireaxecabinet{ pixel_y = 32 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/base) "bT" = ( /obj/structure/bookcase/random/nonfiction, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/base) "bU" = ( -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/base) "bV" = ( /obj/structure/table/wood, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/base) "bW" = ( /obj/machinery/light{ dir = 8 }, /obj/structure/filingcabinet, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin/base) "bX" = ( /obj/structure/table, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin/base) "bY" = ( /obj/structure/table, /obj/item/paper_bin, /obj/item/pen, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin/base) "bZ" = ( /obj/structure/table, /obj/item/device/flashlight/lamp, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin/base) "ca" = ( /obj/machinery/light{ dir = 1 }, /obj/machinery/vending/coffee, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/base) "cb" = ( -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/base) "cc" = ( /obj/structure/table, /obj/machinery/microwave, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/base) "cd" = ( /obj/structure/closet/cabinet, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/suit/hooded/wintercoat, /obj/item/clothing/gloves/color/black, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/base) "ce" = ( -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/base) "cf" = ( /obj/machinery/door/airlock{ name = "Dorm Room" }, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/base) "cg" = ( /obj/machinery/light/small{ dir = 4 }, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/base) "ch" = ( -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin/base) "ci" = ( /obj/structure/chair{ dir = 1 }, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin/base) "cj" = ( /obj/structure/chair/comfy/beige, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/base) "ck" = ( /obj/item/cigbutt, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/base) "cl" = ( /obj/structure/chair/stool, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/base) "cm" = ( /obj/machinery/hydroponics/constructable, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/base) "cn" = ( /obj/structure/table/wood, /obj/item/trash/cheesie, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/base) "co" = ( /obj/machinery/light{ dir = 1 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/base) "cp" = ( /obj/effect/decal/cleanable/blood/drip, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/base) "cq" = ( /obj/structure/table/wood, /obj/item/toy/cards/deck, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/base) "cr" = ( /obj/structure/table/wood, /obj/item/trash/candle, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/base) "cs" = ( /obj/machinery/door/airlock/hatch, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin/base) "ct" = ( /obj/structure/table/wood, /obj/item/pizzabox/mushroom, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/base) "cu" = ( /obj/structure/table/wood, /obj/item/storage/pill_bottle/dice, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/base) "cv" = ( /obj/structure/table/wood, /obj/item/paper/crumpled/ruins/snowdin/snowdingatewaynotice, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/base) "cw" = ( /obj/structure/bed, /obj/item/bedsheet, /obj/effect/decal/cleanable/blood/gibs, /obj/effect/gibspawner/human, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/base) "cx" = ( /obj/structure/table/wood, /obj/item/key, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/base) "cy" = ( /obj/structure/table/wood, /obj/item/trash/can, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/base) "cz" = ( /obj/machinery/door/airlock{ name = "Dorm Room" }, /obj/structure/barricade/wooden, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/base) "cA" = ( /obj/effect/decal/cleanable/blood, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/base) "cB" = ( /obj/machinery/light/small{ dir = 4 }, /mob/living/simple_animal/hostile/bear/snow, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/base) "cC" = ( /obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/remains/human, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/base) "cD" = ( /obj/structure/chair, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin/base) "cE" = ( /obj/structure/chair/comfy/beige{ dir = 1; icon_state = "comfychair" }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/base) "cF" = ( /obj/machinery/light, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/base) "cG" = ( /obj/machinery/light{ @@ -1039,43 +815,32 @@ }, /obj/structure/filingcabinet, /obj/item/paper/fluff/awaymissions/snowdin/log, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin/base) "cH" = ( /obj/machinery/light, /obj/machinery/vending/cigarette, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/base) "cI" = ( /obj/structure/table, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/base) "cJ" = ( /obj/machinery/door/airlock{ name = "Dorms" }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/base) "cK" = ( /obj/effect/decal/cleanable/blood/drip, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) "cL" = ( /obj/machinery/door/airlock/external, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "cM" = ( /obj/structure/statue/snow/snowman, @@ -1142,9 +907,7 @@ /turf/closed/indestructible/rock/snow/ice, /area/awaymission/snowdin/post) "cZ" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/closed/wall, /area/awaymission/snowdin/post) "da" = ( /obj/effect/decal/remains/human, @@ -1172,13 +935,11 @@ /area/awaymission/snowdin/post) "de" = ( /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) "df" = ( /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -1192,7 +953,6 @@ /obj/structure/table, /obj/item/storage/toolbox/emergency, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) @@ -1215,7 +975,6 @@ /obj/structure/table, /obj/item/storage/toolbox/mechanical, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) @@ -1235,7 +994,6 @@ dir = 4 }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -1248,7 +1006,6 @@ /area/awaymission/snowdin/dungeon1) "dp" = ( /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -1264,7 +1021,6 @@ /obj/item/tank/internals/emergency_oxygen/engi, /obj/item/clothing/mask/breath, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) @@ -1276,7 +1032,6 @@ /obj/effect/spawner/lootdrop/snowdin/dungeonlite, /obj/effect/spawner/lootdrop/snowdin/dungeonmisc, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -1284,7 +1039,6 @@ "dt" = ( /obj/item/paper/crumpled/ruins/snowdin/lootstructures, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -1324,7 +1078,6 @@ "dA" = ( /obj/item/clothing/shoes/winterboots, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -1332,7 +1085,6 @@ "dB" = ( /obj/item/clothing/shoes/winterboots, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) @@ -1340,7 +1092,6 @@ /obj/structure/table, /obj/item/clothing/suit/hooded/wintercoat, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -1353,7 +1104,6 @@ /obj/effect/spawner/lootdrop/snowdin/dungeonmisc, /obj/effect/spawner/lootdrop/snowdin/dungeonmisc, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) @@ -1368,7 +1118,6 @@ /obj/effect/spawner/lootdrop/snowdin/dungeonmisc, /obj/effect/spawner/lootdrop/snowdin/dungeonlite, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) @@ -1380,7 +1129,6 @@ status = 2 }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -1390,14 +1138,11 @@ dir = 8 }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) "dJ" = ( -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "dK" = ( /obj/structure/closet/cabinet, @@ -1406,9 +1151,7 @@ /obj/item/clothing/gloves/color/black, /obj/item/shovel, /obj/item/switchblade, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "dL" = ( /obj/structure/closet/crate, @@ -1416,7 +1159,6 @@ /obj/effect/spawner/lootdrop/snowdin/dungeonmid, /obj/effect/spawner/lootdrop/snowdin/dungeonmid, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140; wet = 0 }, @@ -1426,7 +1168,6 @@ dir = 1 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140; wet = 0 }, @@ -1435,9 +1176,7 @@ /obj/machinery/light/small{ dir = 8 }, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "dO" = ( /obj/machinery/door/airlock{ @@ -1445,9 +1184,7 @@ name = "Dorm Room"; req_access_txt = "150" }, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "dP" = ( /turf/open/floor/plating/asteroid/basalt{ @@ -1456,7 +1193,6 @@ /area/awaymission/snowdin/post) "dQ" = ( /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140; wet = 0 }, @@ -1469,7 +1205,6 @@ /obj/effect/spawner/lootdrop/snowdin/dungeonmisc, /obj/effect/spawner/lootdrop/snowdin/dungeonmisc, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) @@ -1477,9 +1212,7 @@ /obj/structure/bed, /obj/effect/decal/remains/human, /obj/effect/decal/cleanable/blood/gibs/old, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "dT" = ( /turf/open/lava{ @@ -1488,16 +1221,13 @@ /area/awaymission/snowdin/post) "dU" = ( /mob/living/simple_animal/hostile/skeleton/eskimo, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "dV" = ( /obj/machinery/door/airlock/public/glass{ req_access_txt = "150" }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) @@ -1508,7 +1238,6 @@ "dX" = ( /obj/structure/table, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) @@ -1520,7 +1249,6 @@ status = 2 }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) @@ -1534,7 +1262,6 @@ status = 2 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) @@ -1544,7 +1271,6 @@ id_target = "up" }, /turf/open/floor/plasteel/stairs/right{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) @@ -1554,27 +1280,23 @@ id_target = "up" }, /turf/open/floor/plasteel/stairs/left{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) "ec" = ( /obj/machinery/door/airlock/external, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, /area/awaymission/snowdin/post) "ed" = ( /turf/open/floor/plasteel/stairs/right{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) "ee" = ( /turf/open/floor/plasteel/stairs/left{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) @@ -1582,7 +1304,6 @@ /obj/structure/grille, /obj/structure/window/reinforced/fulltile/ice, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -1590,7 +1311,6 @@ "eg" = ( /obj/machinery/light/small, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -1713,9 +1433,7 @@ /turf/open/floor/plating/snowed, /area/awaymission/snowdin/post) "eD" = ( -/turf/closed/wall/ice{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/closed/wall/ice, /area/awaymission/snowdin/dungeon1) "eE" = ( /obj/structure/table/wood, @@ -1761,7 +1479,6 @@ "eM" = ( /mob/living/simple_animal/hostile/skeleton/eskimo, /turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) @@ -1797,9 +1514,7 @@ /obj/item/cautery{ pixel_x = 4 }, -/turf/open/floor/plasteel/whiteblue{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/whiteblue, /area/awaymission/snowdin/sekret) "eR" = ( /turf/closed/indestructible/rock/snow, @@ -1867,36 +1582,26 @@ /obj/machinery/light/small{ dir = 1 }, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "fe" = ( /obj/machinery/door/airlock{ name = "Dorm Room" }, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "ff" = ( /obj/effect/decal/cleanable/blood/old, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "fg" = ( /obj/machinery/light/small{ dir = 1 }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/post) "fh" = ( -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/post) "fi" = ( /obj/machinery/light/small{ @@ -1906,24 +1611,18 @@ /obj/item/implanter/storage, /obj/item/clothing/shoes/jackboots, /obj/item/switchblade, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "fj" = ( /obj/machinery/recharge_station, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "fk" = ( /turf/open/floor/plating/ice, /area/awaymission/snowdin/post) "fl" = ( /obj/machinery/power/port_gen/pacman, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "fm" = ( /turf/open/floor/plating/ice/colder, @@ -1947,39 +1646,27 @@ /obj/item/clothing/suit/hooded/wintercoat, /obj/item/clothing/gloves/color/black, /obj/item/shovel, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "fq" = ( /obj/effect/decal/cleanable/blood/old, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/post) "fr" = ( /obj/machinery/door/airlock/maintenance_hatch, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "fs" = ( /obj/item/cigbutt/cigarbutt, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/post) "ft" = ( /obj/effect/landmark/awaystart, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "fu" = ( /obj/machinery/space_heater, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "fv" = ( /turf/open/floor/plating/snowed/colder, @@ -1998,33 +1685,25 @@ /area/awaymission/snowdin/dungeon1) "fy" = ( /obj/machinery/door/airlock/hatch, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/post) "fz" = ( /obj/machinery/power/terminal{ dir = 4 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "fA" = ( /obj/structure/table, /obj/item/key, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "fB" = ( /obj/machinery/power/smes/magical{ desc = "A high-capacity superconducting magnetic energy storage (SMES) unit."; name = "power storage unit" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "fC" = ( /obj/item/stack/sheet/metal, @@ -2036,7 +1715,6 @@ "fE" = ( /obj/effect/decal/cleanable/blood/old, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) @@ -2055,14 +1733,12 @@ /obj/item/paper_bin, /obj/item/pen, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) "fI" = ( /obj/structure/door_assembly/door_assembly_centcom, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140; wet = 0 }, @@ -2080,14 +1756,12 @@ dir = 4 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) "fM" = ( /obj/item/stack/sheet/metal, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -2098,7 +1772,6 @@ dir = 4 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) @@ -2115,7 +1788,6 @@ "fQ" = ( /obj/structure/grille, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -2123,14 +1795,12 @@ "fR" = ( /obj/structure/filingcabinet/chestdrawer, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) "fS" = ( /obj/item/storage/toolbox/mechanical, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140; wet = 0 }, @@ -2138,13 +1808,11 @@ "fT" = ( /mob/living/simple_animal/hostile/bear/snow, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) "fU" = ( /turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) @@ -2153,14 +1821,12 @@ /obj/item/reagent_containers/food/drinks/drinkingglass, /obj/item/key, /turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) "fW" = ( /obj/structure/chair/stool, /turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) @@ -2177,7 +1843,6 @@ /obj/effect/spawner/lootdrop/snowdin/dungeonmid, /obj/effect/spawner/lootdrop/snowdin/dungeonlite, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140; wet = 0 }, @@ -2192,7 +1857,6 @@ /obj/structure/table, /obj/item/storage/box/donkpockets, /turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) @@ -2206,9 +1870,7 @@ /obj/machinery/door/poddoor/shutters{ id = "garagesnow2" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "gd" = ( /obj/structure/ladder/unbreakable{ @@ -2226,9 +1888,7 @@ name = "shutter control"; pixel_x = 32 }, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/post) "gf" = ( /mob/living/simple_animal/hostile/skeleton/ice, @@ -2284,7 +1944,6 @@ id_target = "down" }, /turf/open/floor/plasteel/stairs/left{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/cave) @@ -2294,19 +1953,16 @@ id_target = "down" }, /turf/open/floor/plasteel/stairs/right{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/cave) "gp" = ( /turf/open/floor/plasteel/stairs/left{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/cave) "gq" = ( /turf/open/floor/plasteel/stairs/right{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/cave) @@ -2316,7 +1972,6 @@ "gs" = ( /obj/structure/girder, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -2329,48 +1984,36 @@ /obj/machinery/light/small{ dir = 1 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "gu" = ( /obj/item/stock_parts/cell/high/empty, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "gv" = ( /obj/structure/table, /obj/item/storage/toolbox/mechanical, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "gw" = ( /obj/structure/table, /obj/item/storage/toolbox/electrical, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "gx" = ( /obj/machinery/telecomms/allinone{ intercept = 1 }, -/turf/open/floor/plasteel/purple{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/purple, /area/awaymission/snowdin/sekret) "gy" = ( /obj/structure/table, /turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) "gz" = ( /turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) @@ -2380,9 +2023,7 @@ /obj/item/twohanded/spear, /obj/item/twohanded/spear, /obj/item/twohanded/spear, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "gB" = ( /obj/structure/table, @@ -2390,7 +2031,6 @@ dir = 4 }, /turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) @@ -2399,21 +2039,17 @@ dir = 4 }, /turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) "gD" = ( /obj/structure/table, /obj/item/shovel, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "gE" = ( /obj/item/pen, /turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) @@ -2421,7 +2057,6 @@ /obj/structure/table, /obj/item/paper_bin, /turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) @@ -2432,14 +2067,11 @@ }, /obj/effect/spawner/lootdrop/snowdin/dungeonlite, /obj/effect/spawner/lootdrop/snowdin/dungeonmid, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "gH" = ( /obj/structure/filingcabinet, /turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) @@ -2448,7 +2080,6 @@ dir = 8 }, /turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) @@ -2456,28 +2087,21 @@ /obj/machinery/door/airlock/public/glass, /obj/structure/barricade/wooden, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) "gK" = ( /obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "gL" = ( /obj/machinery/light/small, /obj/structure/showcase/machinery/signal_decrypter, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "gM" = ( /obj/structure/reagent_dispensers/watertank, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "gN" = ( /turf/open/floor/plating, @@ -2492,14 +2116,12 @@ "gP" = ( /obj/machinery/door/airlock/public/glass, /turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) "gQ" = ( /obj/machinery/vending/coffee, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) @@ -2508,34 +2130,26 @@ /obj/item/clothing/shoes/winterboots, /obj/item/clothing/suit/hooded/wintercoat, /obj/item/clothing/gloves/color/black, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "gS" = ( /obj/structure/bed, /obj/item/bedsheet, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "gT" = ( /obj/structure/closet/cabinet, /obj/effect/spawner/lootdrop/snowdin/dungeonlite, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "gU" = ( /turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) "gV" = ( /obj/structure/table, /turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) @@ -2544,14 +2158,12 @@ dir = 8 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) "gX" = ( /obj/machinery/door/airlock/public/glass, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) @@ -2565,9 +2177,7 @@ /obj/machinery/light/small{ dir = 4 }, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "ha" = ( /obj/structure/barricade/wooden, @@ -2575,29 +2185,22 @@ name = "Security Office"; req_access_txt = "63" }, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/post) "hb" = ( /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "hc" = ( /obj/structure/table/reinforced, /obj/structure/barricade/wooden, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/post) "hd" = ( /obj/machinery/light/built{ dir = 8 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) @@ -2605,7 +2208,6 @@ /obj/machinery/door/airlock/external, /obj/structure/barricade/wooden, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -2623,44 +2225,33 @@ status = 2 }, /turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) "hh" = ( -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/post) "hi" = ( /obj/structure/table/reinforced, /obj/item/paper_bin, /obj/item/pen, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/post) "hj" = ( /obj/structure/chair/office/dark{ dir = 1 }, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/post) "hk" = ( -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/post) "hl" = ( /obj/machinery/door/airlock{ name = "Dorms" }, /obj/structure/barricade/wooden, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/post) "hm" = ( /obj/item/gun/ballistic/shotgun/boltaction, @@ -2674,51 +2265,40 @@ }, /obj/item/restraints/handcuffs, /obj/item/device/assembly/flash, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/post) "hn" = ( /obj/structure/filingcabinet, /obj/item/paper/fluff/awaymissions/snowdin/secnotice, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/post) "ho" = ( /obj/machinery/door/airlock{ name = "Dorm Room" }, /turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) "hp" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/closed/wall, /area/awaymission/snowdin) "hq" = ( /obj/machinery/light/small{ dir = 4 }, /turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) "hr" = ( /turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) "hs" = ( /obj/structure/closet/cabinet, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "ht" = ( /mob/living/simple_animal/hostile/skeleton/eskimo, @@ -2801,7 +2381,6 @@ /obj/structure/window/reinforced/fulltile/ice, /obj/structure/barricade/wooden, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -2810,17 +2389,13 @@ /obj/structure/table, /obj/item/shovel, /obj/item/key, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "hL" = ( /obj/structure/table, /obj/item/shovel, /obj/item/storage/toolbox/mechanical, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "hM" = ( /obj/machinery/space_heater, @@ -2830,9 +2405,7 @@ icon_state = "bulb-broken"; status = 2 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "hN" = ( /obj/effect/decal/cleanable/blood/old, @@ -2841,7 +2414,6 @@ "hO" = ( /obj/machinery/door/airlock/glass_large, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) @@ -2853,7 +2425,6 @@ dir = 1 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) @@ -2873,56 +2444,41 @@ /turf/open/floor/plating/snowed/colder, /area/awaymission/snowdin/dungeon1) "hV" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/closed/wall/r_wall, /area/awaymission/snowdin/sekret) "hW" = ( /obj/structure/closet/emcloset, /obj/item/tank/internals/emergency_oxygen/engi, /obj/item/clothing/mask/breath, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/sekret) "hX" = ( /obj/machinery/space_heater, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/sekret) "hY" = ( /obj/machinery/power/port_gen/pacman, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/sekret) "hZ" = ( /obj/machinery/light, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, /area/awaymission/snowdin/post) "ia" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/sekret) "ib" = ( /obj/structure/table, /obj/item/storage/toolbox/electrical, /obj/item/storage/toolbox/electrical, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/sekret) "ic" = ( /obj/machinery/portable_atmospherics/canister/oxygen, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/sekret) "id" = ( /mob/living/simple_animal/hostile/skeleton/templar, @@ -2936,42 +2492,31 @@ dir = 8 }, /obj/item/storage/toolbox/mechanical, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/sekret) "if" = ( /obj/structure/table, /obj/item/shovel, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/sekret) "ig" = ( -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin/post) "ih" = ( /obj/machinery/door/poddoor/shutters{ id = "sekret" }, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin/post) "ii" = ( /obj/machinery/light/small{ dir = 1 }, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin/post) "ij" = ( /obj/machinery/porta_turret/syndicate, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -2982,44 +2527,32 @@ /obj/machinery/light/small{ dir = 4 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/sekret) "il" = ( /obj/structure/table/reinforced, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/post) "im" = ( /obj/machinery/power/terminal{ dir = 4 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/sekret) "in" = ( /obj/machinery/power/smes/magical{ desc = "A high-capacity superconducting magnetic energy storage (SMES) unit."; name = "power storage unit" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/sekret) "ip" = ( /obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/sekret) "iq" = ( /obj/structure/reagent_dispensers/watertank, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/sekret) "ir" = ( /obj/item/gun/ballistic/shotgun/boltaction, @@ -3034,33 +2567,25 @@ /obj/item/restraints/handcuffs, /obj/item/device/assembly/flash, /obj/item/storage/box/lethalshot, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/post) "is" = ( /obj/machinery/door/airlock/glass_security{ name = "Security Office"; req_access_txt = "63" }, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/post) "it" = ( /obj/machinery/light/small, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin/post) "iu" = ( /obj/machinery/door/airlock/highsecurity{ name = "Maint"; req_access_txt = "150" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/sekret) "iv" = ( /obj/item/device/multitool, @@ -3068,14 +2593,12 @@ /area/awaymission/snowdin) "iw" = ( /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) "ix" = ( /obj/machinery/vending/snack, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -3083,54 +2606,41 @@ /obj/structure/table, /obj/item/storage/firstaid/toxin, /obj/item/storage/firstaid/toxin, -/turf/open/floor/plasteel/cmo{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cmo, /area/awaymission/snowdin/sekret) "iz" = ( /obj/machinery/iv_drip, -/turf/open/floor/plasteel/cmo{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cmo, /area/awaymission/snowdin/sekret) "iA" = ( /obj/structure/table, /obj/item/storage/firstaid/o2, /obj/item/storage/firstaid/o2, -/turf/open/floor/plasteel/cmo{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cmo, /area/awaymission/snowdin/sekret) "iB" = ( /obj/structure/table, /obj/item/storage/firstaid/regular, /obj/item/storage/firstaid/regular, -/turf/open/floor/plasteel/cmo{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cmo, /area/awaymission/snowdin/sekret) "iC" = ( /obj/structure/table, /obj/item/storage/firstaid/fire, /obj/item/storage/firstaid/fire, -/turf/open/floor/plasteel/cmo{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cmo, /area/awaymission/snowdin/sekret) "iD" = ( /obj/structure/table, /obj/item/storage/firstaid/brute, /obj/item/storage/firstaid/brute, -/turf/open/floor/plasteel/cmo{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cmo, /area/awaymission/snowdin/sekret) "iE" = ( /obj/machinery/light{ dir = 1 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -3140,7 +2650,6 @@ dir = 1 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -3157,14 +2666,11 @@ }, /area/awaymission/snowdin/dungeon1) "iI" = ( -/turf/open/floor/plasteel/cmo{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cmo, /area/awaymission/snowdin/sekret) "iJ" = ( /obj/structure/table/reinforced, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -3172,7 +2678,6 @@ /obj/structure/grille, /obj/structure/window/reinforced/fulltile/ice, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -3180,7 +2685,6 @@ "iL" = ( /obj/structure/grille, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -3190,9 +2694,7 @@ /turf/open/floor/plating, /area/awaymission/snowdin) "iN" = ( -/turf/closed/wall/mineral/plastitanium{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/closed/wall/mineral/plastitanium, /area/awaymission/snowdin) "iO" = ( /obj/effect/spawner/lootdrop/snowdin/dungeonheavy, @@ -3210,7 +2712,6 @@ /obj/structure/grille, /obj/structure/window/reinforced/fulltile/ice, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -3220,7 +2721,6 @@ dir = 8 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -3228,9 +2728,7 @@ /obj/machinery/light{ dir = 8 }, -/turf/open/floor/plasteel/cmo{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cmo, /area/awaymission/snowdin/sekret) "iU" = ( /obj/structure/window/reinforced{ @@ -3239,9 +2737,7 @@ /obj/structure/window/reinforced{ dir = 1 }, -/turf/open/floor/plasteel/whiteblue{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/whiteblue, /area/awaymission/snowdin/sekret) "iV" = ( /obj/structure/window/reinforced{ @@ -3250,24 +2746,19 @@ /obj/structure/window/reinforced{ dir = 1 }, -/turf/open/floor/plasteel/whiteblue{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/whiteblue, /area/awaymission/snowdin/sekret) "iW" = ( /obj/structure/sign/bluecross{ pixel_x = -32 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) "iX" = ( /obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/sekret) "iY" = ( /obj/machinery/light/small, @@ -3280,38 +2771,31 @@ "ja" = ( /obj/item/shard, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, /area/awaymission/snowdin) "jb" = ( /obj/structure/frame/computer, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "jc" = ( /obj/machinery/door/poddoor/shutters{ id = "garagesnow3" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "jd" = ( /obj/machinery/door/airlock/external{ req_access_txt = "150" }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, /area/awaymission/snowdin/sekret) "je" = ( /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -3322,20 +2806,15 @@ req_access_txt = "150" }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) "jg" = ( /obj/structure/table/optable, -/turf/open/floor/plasteel/whiteblue{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/whiteblue, /area/awaymission/snowdin/sekret) "jh" = ( -/turf/open/floor/plasteel/whiteblue{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/whiteblue, /area/awaymission/snowdin/sekret) "ji" = ( /obj/machinery/door/airlock/highsecurity{ @@ -3343,33 +2822,25 @@ req_access_txt = "150" }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) "jj" = ( -/turf/closed/wall/ice{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/closed/wall/ice, /area/awaymission/snowdin) "jk" = ( /obj/machinery/door/airlock/external, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin) "jl" = ( /obj/structure/table, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, /area/awaymission/snowdin) "jm" = ( -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "jo" = ( /obj/machinery/porta_turret/syndicate, @@ -3380,7 +2851,6 @@ dir = 4 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -3388,33 +2858,25 @@ /obj/machinery/sleeper{ dir = 4 }, -/turf/open/floor/plasteel/cmo{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cmo, /area/awaymission/snowdin/sekret) "jr" = ( /obj/structure/window/reinforced, -/turf/open/floor/plasteel/whiteblue{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/whiteblue, /area/awaymission/snowdin/sekret) "js" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ dir = 8 }, -/turf/open/floor/plasteel/whiteblue{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/whiteblue, /area/awaymission/snowdin/sekret) "jt" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ dir = 4 }, -/turf/open/floor/plasteel/whiteblue{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/whiteblue, /area/awaymission/snowdin/sekret) "ju" = ( /obj/machinery/sleeper{ @@ -3423,43 +2885,32 @@ /obj/machinery/light{ dir = 4 }, -/turf/open/floor/plasteel/cmo{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cmo, /area/awaymission/snowdin/sekret) "jv" = ( /obj/machinery/light, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) "jw" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin) "jx" = ( /obj/effect/decal/cleanable/blood, /obj/effect/gibspawner/human, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "jy" = ( /obj/item/storage/box/donkpockets{ pixel_x = 3; pixel_y = 3 }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "jz" = ( /obj/effect/decal/cleanable/vomit/old, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "jA" = ( /obj/item/device/radio/intercom{ @@ -3471,15 +2922,11 @@ subspace_transmission = 1; syndie = 1 }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "jB" = ( /obj/effect/gibspawner/human, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "jC" = ( /obj/item/tank/internals/plasma{ @@ -3489,40 +2936,30 @@ /turf/open/floor/plating/asteroid/snow, /area/awaymission/snowdin) "jD" = ( -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/sekret) "jE" = ( /obj/machinery/vending/coffee, /obj/structure/window/reinforced{ dir = 1 }, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/sekret) "jF" = ( /obj/structure/table/wood, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/sekret) "jG" = ( /obj/structure/chair/comfy/beige{ dir = 8 }, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/sekret) "jH" = ( /obj/machinery/sleeper{ dir = 8 }, -/turf/open/floor/plasteel/cmo{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cmo, /area/awaymission/snowdin/sekret) "jI" = ( /obj/machinery/door/airlock/glass_large{ @@ -3533,17 +2970,13 @@ /obj/effect/turf_decal/stripes/line{ dir = 9 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/dark, /area/awaymission/snowdin/sekret) "jJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/dark, /area/awaymission/snowdin/sekret) "jK" = ( /obj/effect/decal/cleanable/blood, @@ -3559,9 +2992,7 @@ name = "Cockpit"; req_access_txt = "150" }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "jN" = ( /turf/closed/wall/mineral/plastitanium{ @@ -3582,15 +3013,11 @@ /area/awaymission/snowdin/sekret) "jP" = ( /obj/machinery/vending/cigarette, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/sekret) "jQ" = ( /obj/structure/table, -/turf/open/floor/plasteel/cmo{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cmo, /area/awaymission/snowdin/sekret) "jR" = ( /obj/structure/closet/crate/freezer, @@ -3600,22 +3027,17 @@ /obj/item/reagent_containers/blood/random, /obj/item/reagent_containers/blood/random, /obj/item/reagent_containers/blood/random, -/turf/open/floor/plasteel/cmo{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cmo, /area/awaymission/snowdin/sekret) "jS" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/dark, /area/awaymission/snowdin/sekret) "jT" = ( /obj/structure/girder, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -3628,23 +3050,18 @@ "jV" = ( /obj/structure/table, /obj/item/paper/crumpled/ruins/snowdin/misc1, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "jW" = ( /obj/structure/table, /obj/item/reagent_containers/food/drinks/beer, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "jX" = ( /obj/machinery/door/airlock/glass_large{ req_access_txt = "150" }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -3654,14 +3071,11 @@ req_access_txt = "150" }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) "jZ" = ( -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/dark, /area/awaymission/snowdin/sekret) "ka" = ( /obj/structure/closet/syndicate, @@ -3680,22 +3094,17 @@ /obj/effect/turf_decal/stripes/line{ dir = 9 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/dark, /area/awaymission/snowdin/sekret) "kb" = ( /obj/machinery/porta_turret/syndicate, /obj/effect/turf_decal/stripes/line{ dir = 5 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/dark, /area/awaymission/snowdin/sekret) "kc" = ( /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin) @@ -3705,7 +3114,6 @@ }, /obj/structure/window/reinforced/fulltile/ice, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -3717,83 +3125,60 @@ "kf" = ( /obj/item/stack/cable_coil, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, /area/awaymission/snowdin) "kg" = ( /obj/effect/decal/cleanable/blood, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "kh" = ( /obj/structure/chair{ dir = 4 }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "ki" = ( /obj/structure/chair{ dir = 8 }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "kj" = ( /obj/machinery/light/small{ dir = 1 }, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/sekret) "kk" = ( /obj/structure/mirror/magic/lesser{ desc = "A collab of the Wizard Federation and the Syndicate, a specialized mirror to help our operatives personalize themselves while stuck in this icy hell-hole."; pixel_x = -32 }, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/sekret) "kl" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/closed/wall, /area/awaymission/snowdin/sekret) "km" = ( /obj/effect/mob_spawn/human/syndicatesoldier/coldres/alive, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/sekret) "kn" = ( /obj/structure/bookcase/random/reference, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "ko" = ( /obj/structure/bookcase/random/adult, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "kp" = ( /obj/structure/bookcase/random/religion, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "kq" = ( -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/sekret) "kr" = ( /obj/structure/table/reinforced, @@ -3802,23 +3187,17 @@ /obj/machinery/light/small{ dir = 8 }, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/sekret) "ks" = ( /obj/structure/table/reinforced, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/sekret) "kt" = ( /obj/structure/chair/office/dark{ dir = 4 }, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/sekret) "ku" = ( /obj/structure/rack, @@ -3831,17 +3210,13 @@ /turf/open/floor/plasteel/dark, /area/awaymission/snowdin/sekret) "kv" = ( -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/sekret) "kw" = ( /obj/machinery/light{ dir = 1 }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/sekret) "kx" = ( /obj/structure/rack, @@ -3851,30 +3226,24 @@ }, /obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, /obj/item/paper/fluff/awaymissions/snowdin/saw_usage, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/dark, /area/awaymission/snowdin/sekret) "ky" = ( /obj/machinery/door/window/brigdoor/westleft{ name = "SAW Security Door"; req_access_txt = "150" }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/dark, /area/awaymission/snowdin/sekret) "kz" = ( /obj/item/shard, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin) "kA" = ( /obj/structure/grille/broken, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -3889,35 +3258,25 @@ "kC" = ( /obj/item/crowbar/red, /obj/effect/decal/cleanable/vomit, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "kD" = ( /obj/structure/dresser, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/sekret) "kE" = ( /obj/structure/table/wood, /obj/item/paper/fluff/awaymissions/snowdin/syndienotice, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/sekret) "kF" = ( -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "kG" = ( /obj/machinery/light{ dir = 8 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "kH" = ( /obj/item/gun/ballistic/shotgun/boltaction, @@ -3932,9 +3291,7 @@ /obj/item/restraints/handcuffs, /obj/item/device/assembly/flash, /obj/item/storage/box/lethalshot, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/sekret) "kI" = ( /obj/structure/rack, @@ -3953,15 +3310,11 @@ name = "Security Office"; req_access_txt = "63" }, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/sekret) "kK" = ( /obj/structure/chair/stool, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/sekret) "kL" = ( /obj/structure/rack, @@ -3969,14 +3322,11 @@ /obj/machinery/light/small{ dir = 4 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/dark, /area/awaymission/snowdin/sekret) "kM" = ( /obj/machinery/light/built, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin) @@ -3988,9 +3338,7 @@ /obj/machinery/door/airlock{ name = "Dorm Room" }, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/sekret) "kP" = ( /obj/machinery/door/airlock/glass_large{ @@ -3998,7 +3346,6 @@ req_access_txt = "150" }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -4008,9 +3355,7 @@ /area/awaymission/snowdin/sekret) "kR" = ( /obj/structure/table, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/sekret) "kS" = ( /obj/structure/rack, @@ -4019,9 +3364,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 10 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/dark, /area/awaymission/snowdin/sekret) "kT" = ( /obj/structure/rack, @@ -4030,9 +3373,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 6 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/dark, /area/awaymission/snowdin/sekret) "kU" = ( /obj/structure/girder, @@ -4040,112 +3381,83 @@ /area/awaymission/snowdin) "kV" = ( /obj/structure/table, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "kW" = ( /obj/item/storage/box/zipties{ pixel_x = 1; pixel_y = 2 }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "kX" = ( /obj/structure/chair{ dir = 8 }, /obj/item/reagent_containers/food/drinks/ale, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "kY" = ( /obj/structure/bookcase/random/fiction, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "kZ" = ( /obj/machinery/space_heater, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "la" = ( /obj/structure/bed/dogbed, /mob/living/simple_animal/pet/dog/corgi/puppy{ name = "Mr.Kempsy" }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "lb" = ( /obj/structure/bookcase/random/nonfiction, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "lc" = ( /obj/structure/chair/stool, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "ld" = ( /obj/machinery/light{ dir = 1 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "le" = ( /obj/structure/table, /obj/item/pizzabox/mushroom, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/sekret) "lf" = ( /obj/structure/bed, /obj/item/bedsheet, /obj/effect/landmark/awaystart, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin) "lg" = ( /obj/structure/closet/cabinet, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/suit/hooded/wintercoat, /obj/item/clothing/gloves/color/black, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin) "lh" = ( /obj/structure/table/wood, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin) "li" = ( /obj/effect/decal/cleanable/blood/drip, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, /area/awaymission/snowdin) "lj" = ( /obj/item/reagent_containers/food/drinks/beer, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "lk" = ( /obj/item/clothing/head/helmet/space/syndicate/black/red, @@ -4153,42 +3465,30 @@ /area/awaymission/snowdin) "ll" = ( /obj/machinery/light, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "lm" = ( /obj/structure/table/wood, /obj/item/trash/candle, /obj/item/paper_bin, /obj/item/pen/fourcolor, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "ln" = ( /obj/structure/table/wood, /obj/item/toy/cards/deck, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "lo" = ( /obj/structure/table, -/turf/open/floor/plasteel/purple{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/purple, /area/awaymission/snowdin/sekret) "lp" = ( /obj/structure/filingcabinet, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/white, /area/awaymission/snowdin/sekret) "lq" = ( -/turf/open/floor/plasteel/purple{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/purple, /area/awaymission/snowdin/sekret) "lr" = ( /obj/structure/table, @@ -4199,29 +3499,21 @@ listening = 1; name = "Pirate Radio Listening Channel" }, -/turf/open/floor/plasteel/purple{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/purple, /area/awaymission/snowdin/sekret) "ls" = ( -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin) "lt" = ( /obj/structure/bed, /obj/item/bedsheet, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin) "lu" = ( /obj/item/shard{ icon_state = "medium" }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "lv" = ( /obj/machinery/door/window{ @@ -4229,38 +3521,28 @@ name = "EVA Storage"; req_access_txt = "150" }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "lw" = ( /obj/machinery/door/airlock/external{ req_access_txt = "150" }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "lx" = ( /obj/structure/table/wood, /obj/item/book/manual/nuclear, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "ly" = ( /obj/structure/table/wood, /obj/item/storage/pill_bottle/dice, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "lz" = ( /obj/structure/table, /obj/machinery/microwave, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/sekret) "lA" = ( /obj/machinery/door/airlock/highsecurity{ @@ -4268,7 +3550,6 @@ req_access_txt = "150" }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -4281,41 +3562,29 @@ listening = 0; name = "Pirate Radio Broadcast Channel" }, -/turf/open/floor/plasteel/purple{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/purple, /area/awaymission/snowdin/sekret) "lC" = ( -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/white, /area/awaymission/snowdin/sekret) "lD" = ( /obj/structure/chair/office/light{ dir = 8 }, -/turf/open/floor/plasteel/purple{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/purple, /area/awaymission/snowdin/sekret) "lE" = ( /obj/machinery/door/airlock/public/glass, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin) "lF" = ( -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin) "lG" = ( /obj/machinery/door/airlock{ name = "Dorm Room" }, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin) "lH" = ( /obj/structure/bed, @@ -4324,16 +3593,13 @@ dir = 4 }, /obj/effect/landmark/awaystart, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin) "lI" = ( /obj/machinery/light{ dir = 8 }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -4345,15 +3611,11 @@ storage_type = null; suit_type = null }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "lK" = ( /obj/effect/decal/cleanable/vomit, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "lL" = ( /obj/machinery/door/window{ @@ -4363,42 +3625,31 @@ name = "EVA Storage"; req_access_txt = "150" }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "lM" = ( /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "lN" = ( /obj/item/gun/ballistic/automatic/pistol, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "lO" = ( /obj/structure/table, /obj/item/storage/box/donkpockets, /obj/item/storage/box/donkpockets, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/sekret) "lP" = ( /obj/structure/table, /obj/item/paper_bin, /obj/item/pen/fourcolor, -/turf/open/floor/plasteel/purple{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/purple, /area/awaymission/snowdin/sekret) "lQ" = ( /obj/item/stack/sheet/metal, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -4420,107 +3671,77 @@ syndie = 1 }, /obj/item/reagent_containers/food/drinks/ale, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "lT" = ( /obj/effect/mob_spawn/human/syndicatesoldier, /obj/effect/decal/cleanable/vomit, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "lU" = ( /obj/machinery/light/small, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/sekret) "lV" = ( /obj/effect/mob_spawn/human/syndicatesoldier/coldres/alive/female, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/sekret) "lW" = ( /obj/structure/table/wood, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "lX" = ( /obj/structure/chair/comfy/beige{ dir = 4 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "lY" = ( /obj/structure/table/wood, /obj/machinery/light, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "lZ" = ( /obj/structure/chair/comfy/beige{ dir = 8 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "ma" = ( /obj/structure/table/wood, /obj/item/gun/ballistic/automatic/c20r/toy, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "mb" = ( /obj/machinery/light, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/sekret) "mc" = ( /obj/machinery/light, /obj/structure/table, /obj/item/storage/box/drinkingglasses, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/sekret) "md" = ( /obj/machinery/light{ dir = 8 }, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/white, /area/awaymission/snowdin/sekret) "me" = ( /obj/machinery/light{ dir = 4 }, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/white, /area/awaymission/snowdin/sekret) "mf" = ( /obj/machinery/recharge_station, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "mg" = ( /obj/structure/table, /obj/machinery/cell_charger, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "mh" = ( /obj/item/device/assembly/voice{ @@ -4538,15 +3759,11 @@ /obj/item/reagent_containers/syringe/charcoal{ pixel_y = 4 }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "mk" = ( /obj/structure/chair/stool, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "ml" = ( /obj/machinery/door/window{ @@ -4557,36 +3774,28 @@ /obj/item/reagent_containers/syringe/charcoal{ pixel_y = 4 }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "mm" = ( /obj/machinery/door/window/westright{ name = "Tool Storage"; req_access_txt = "150" }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "mn" = ( /obj/item/stock_parts/cell/high, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "mo" = ( /obj/item/target/alien, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) "mp" = ( /obj/item/target/clown, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -4598,9 +3807,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/sekret) "mr" = ( /obj/structure/table/reinforced, @@ -4608,7 +3815,6 @@ dir = 1 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -4619,7 +3825,6 @@ pixel_y = 32 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -4627,7 +3832,6 @@ /obj/item/ammo_casing/c10mm, /obj/item/ammo_casing/c10mm, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -4637,7 +3841,6 @@ faction = list("syndicate") }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -4648,7 +3851,6 @@ }, /obj/item/storage/firstaid/tactical, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -4656,7 +3858,6 @@ /obj/structure/table/reinforced, /obj/item/storage/firstaid/tactical, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -4664,7 +3865,6 @@ /obj/structure/table/reinforced, /obj/item/storage/backpack/duffelbag/syndie/ammo/smg, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -4673,7 +3873,6 @@ dir = 1 }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -4683,16 +3882,13 @@ dir = 1 }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, /area/awaymission/snowdin) "mA" = ( /obj/item/stack/medical/bruise_pack, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "mB" = ( /obj/machinery/door/window{ @@ -4703,9 +3899,7 @@ req_access_txt = "150" }, /obj/item/stack/medical/ointment, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "mC" = ( /obj/machinery/door/window{ @@ -4713,22 +3907,17 @@ name = "Tool Storage"; req_access_txt = "150" }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "mD" = ( /obj/item/storage/toolbox/syndicate, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "mE" = ( /obj/item/screwdriver{ pixel_y = 9 }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -4742,7 +3931,6 @@ "mG" = ( /obj/item/target, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -4752,14 +3940,11 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/sekret) "mI" = ( /obj/item/ammo_casing/c10mm, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -4767,14 +3952,11 @@ /obj/machinery/telecomms/relay/preset/ruskie{ use_power = 0 }, -/turf/open/floor/plasteel/purple{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/purple, /area/awaymission/snowdin/sekret) "mK" = ( /obj/machinery/light/built, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -4782,7 +3964,6 @@ "mL" = ( /obj/effect/decal/cleanable/blood/drip, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin) @@ -4791,7 +3972,6 @@ icon_state = "medium" }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -4802,9 +3982,7 @@ name = "Secure Storage"; req_access_txt = "150" }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "mO" = ( /obj/structure/window/reinforced{ @@ -4813,14 +3991,11 @@ /obj/structure/window/reinforced{ dir = 1 }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "mP" = ( /obj/item/stock_parts/cell/high, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -4836,15 +4011,12 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/sekret) "mS" = ( /obj/structure/table/reinforced, /obj/item/ammo_box/a357, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -4854,7 +4026,6 @@ pixel_y = 2 }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -4867,9 +4038,7 @@ /obj/structure/mirror{ pixel_x = 30 }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "mW" = ( /obj/structure/flora/grass/green, @@ -4881,7 +4050,6 @@ dir = 8 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -4892,57 +4060,43 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/sekret) "mZ" = ( /obj/structure/table/reinforced, /obj/item/ammo_box/c10mm, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) "na" = ( -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "nb" = ( /mob/living/simple_animal/bot/cleanbot{ name = "\improper Cleanksy" }, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "nc" = ( /obj/structure/table, /obj/item/paper/crumpled/ruins/snowdin/shovel, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "nd" = ( /obj/structure/table, /obj/item/paper_bin, /obj/item/pen, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "ne" = ( /obj/structure/table, /obj/item/device/flashlight/lamp, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "nf" = ( /obj/machinery/space_heater, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -4952,7 +4106,6 @@ /obj/item/storage/toolbox/electrical, /obj/item/storage/toolbox/electrical, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -4977,9 +4130,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/sekret) "nk" = ( /mob/living/simple_animal/hostile/syndicate{ @@ -4988,28 +4139,21 @@ name = "Weakened Syndicate Operative"; speed = 2 }, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "nl" = ( /obj/structure/filingcabinet, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "nm" = ( /obj/structure/chair{ dir = 1 }, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "nn" = ( /obj/item/shovel, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -5019,7 +4163,6 @@ /obj/item/storage/toolbox/mechanical, /obj/item/storage/toolbox/mechanical, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -5042,15 +4185,12 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/sekret) "nt" = ( /obj/structure/table/reinforced, /obj/machinery/light, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -5061,7 +4201,6 @@ pixel_y = -32 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -5069,7 +4208,6 @@ /obj/item/ammo_casing/a357, /obj/item/ammo_casing/a357, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -5083,7 +4221,6 @@ /obj/item/target/clown, /obj/machinery/light, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -5091,7 +4228,6 @@ /obj/structure/table/reinforced, /obj/item/gun/ballistic/automatic/pistol, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -5101,7 +4237,6 @@ /obj/item/storage/box/lethalshot, /obj/item/storage/box/lethalshot, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -5109,7 +4244,6 @@ /obj/structure/table/reinforced, /obj/item/gun/ballistic/shotgun/automatic/combat, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -5125,27 +4259,19 @@ }, /obj/structure/filingcabinet, /obj/item/paper/fluff/awaymissions/snowdin/log2, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "nC" = ( /obj/effect/decal/cleanable/blood/drip, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "nD" = ( /obj/machinery/door/airlock/hatch, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "nE" = ( /obj/machinery/door/airlock/maintenance_hatch, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin) "nF" = ( /obj/machinery/power/smes/magical{ @@ -5153,7 +4279,6 @@ name = "power storage unit" }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -5163,27 +4288,21 @@ dir = 4 }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, /area/awaymission/snowdin) "nH" = ( /obj/effect/decal/cleanable/vomit, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "nI" = ( /obj/structure/chair, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "nJ" = ( /obj/machinery/power/port_gen/pacman, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -5196,20 +4315,15 @@ /area/awaymission/snowdin) "nL" = ( /obj/effect/spawner/lootdrop/snowdin/dungeonlite, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "nM" = ( /obj/structure/table, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "nN" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -5218,7 +4332,6 @@ /obj/structure/closet/crate, /obj/item/survivalcapsule, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -5226,7 +4339,6 @@ "nP" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -5241,9 +4353,33 @@ /obj/effect/mapping_helpers/planet_z, /turf/closed/indestructible/rock/snow, /area/awaymission/snowdin) +"nS" = ( +/obj/effect/baseturf_helper/asteroid/snow, +/turf/closed/indestructible/rock/snow, +/area/awaymission/snowdin) +"nT" = ( +/obj/effect/baseturf_helper/asteroid/snow, +/turf/closed/wall/ice, +/area/awaymission/snowdin/post) +"nU" = ( +/obj/effect/baseturf_helper/asteroid/snow, +/turf/closed/wall/ice, +/area/awaymission/snowdin/base) +"nV" = ( +/obj/effect/baseturf_helper/asteroid/snow, +/turf/closed/indestructible/rock/snow/ice, +/area/awaymission/snowdin/dungeon1) +"nW" = ( +/obj/effect/baseturf_helper/asteroid/snow, +/turf/closed/wall/mineral/snow, +/area/awaymission/snowdin/igloo) +"nX" = ( +/obj/effect/baseturf_helper/asteroid/snow, +/turf/open/floor/plating/asteroid/snow, +/area/awaymission/snowdin/cave) (1,1,1) = {" -aa +nS aa aa aa @@ -15536,7 +14672,7 @@ aa aa ac ac -al +nU al al al @@ -20160,7 +19296,7 @@ aa aa aa ac -ad +nT ad am ad @@ -23126,8 +22262,8 @@ ad hl ad ad -gr -gr +ez +ez eS eR eR @@ -23370,21 +22506,21 @@ eR eR eR ez -eC -eC -eC +ez +ez +ez ez gI gz gs gU gU -gr +ez gU gU df -gr -gr +ez +ez eS eS eS @@ -23626,10 +22762,10 @@ eR eR eT eT -eC -eC -eC -eC +ez +ez +ez +ez gz gz gz @@ -23638,9 +22774,9 @@ gU gU gU df -gr -gr -gr +ez +ez +ez fk eT eS @@ -23883,8 +23019,8 @@ eS eR eS eS -eC -eC +ez +ez ez gz ez @@ -23896,7 +23032,7 @@ gU hg gU df -gr +ez fk fk eT @@ -24140,9 +23276,9 @@ eS eS eS eS -eC +ez fk -eC +ez eM gz ad @@ -24398,7 +23534,7 @@ eT eS eR eK -eC +ez ez gz gz @@ -24655,7 +23791,7 @@ eR eR eR ad -eC +ez gz gz gz @@ -32781,7 +31917,7 @@ ac ac ac ac -cP +nW cW cP ac @@ -34887,7 +34023,7 @@ ac ac ac ac -eS +nX eS eS eS @@ -42028,7 +41164,7 @@ ab ab ab ab -cN +nV cN cN cN diff --git a/_maps/shuttles/emergency_delta.dmm b/_maps/shuttles/emergency_delta.dmm index e383e33e0b..caa457f43a 100644 --- a/_maps/shuttles/emergency_delta.dmm +++ b/_maps/shuttles/emergency_delta.dmm @@ -353,7 +353,6 @@ name = "emergency shower" }, /turf/open/floor/plasteel/whiteblue/side{ - baseturf = /turf/open/lava/smooth/lava_land_surface; dir = 4 }, /area/shuttle/escape) diff --git a/code/__DEFINES/turf_flags.dm b/code/__DEFINES/turf_flags.dm new file mode 100644 index 0000000000..fd89041207 --- /dev/null +++ b/code/__DEFINES/turf_flags.dm @@ -0,0 +1,3 @@ +#define CHANGETURF_DEFER_CHANGE 1 +#define CHANGETURF_IGNORE_AIR 2 +#define CHANGETURF_FORCEOP 4 \ No newline at end of file diff --git a/code/datums/components/thermite.dm b/code/datums/components/thermite.dm index 11611cadfb..13ec5ed8f9 100644 --- a/code/datums/components/thermite.dm +++ b/code/datums/components/thermite.dm @@ -63,7 +63,7 @@ if(amount >= 50) var/burning_time = max(100, 100-amount) - master = master.ChangeTurf(master.baseturf) + master = master.ScrapeAway() master.burn_tile() if(user) master.add_hiddenprint(user) diff --git a/code/game/gamemodes/clock_cult/clock_structures/wall_gear.dm b/code/game/gamemodes/clock_cult/clock_structures/wall_gear.dm index 1463ca6ac0..b1734b3aef 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/wall_gear.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/wall_gear.dm @@ -59,9 +59,9 @@ brass_floor = TRUE if(W.use(2 - brass_floor)) if(anchored) - T.ChangeTurf(/turf/closed/wall/clockwork) + T.PlaceOnTop(/turf/closed/wall/clockwork) else - T.ChangeTurf(/turf/open/floor/clockwork) + T.PlaceOnTop(/turf/open/floor/clockwork) new /obj/structure/falsewall/brass(T) qdel(src) else diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 89a4e8b130..085b55c2e1 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -528,7 +528,7 @@ playsound(loc, 'sound/effects/bang.ogg', 100, 1) var/turf/open/floor/F for(F in orange(1, src)) - F.ChangeTurf(F.baseturf) + F.ScrapeAway() say("Something slams into the floor around [src], exposing it to space!") if(hull) sleep(10) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 3d659f104b..9e689a096b 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -135,7 +135,7 @@ for(var/turf/closed/T in range(2, src)) here.ChangeTurf(T.type) return INITIALIZE_HINT_QDEL - here.ChangeTurf(/turf/closed/wall) + here.PlaceOnTop(/turf/closed/wall) if(9 to 11) lights = FALSE locked = TRUE diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm index f076b723ae..a52c8d1438 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -222,14 +222,14 @@ occupant_message("Deconstructing [W]...") if(do_after_cooldown(W)) chassis.spark_system.start() - W.ChangeTurf(/turf/open/floor/plating) + W.ScrapeAway() playsound(W, 'sound/items/deconstruct.ogg', 50, 1) else if(isfloorturf(target)) var/turf/open/floor/F = target occupant_message("Deconstructing [F]...") if(do_after_cooldown(target)) chassis.spark_system.start() - F.ChangeTurf(F.baseturf) + F.ScrapeAway() playsound(F, 'sound/items/deconstruct.ogg', 50, 1) else if (istype(target, /obj/machinery/door/airlock)) occupant_message("Deconstructing [target]...") @@ -242,14 +242,14 @@ var/turf/open/space/S = target occupant_message("Building Floor...") if(do_after_cooldown(S)) - S.ChangeTurf(/turf/open/floor/plating) + S.PlaceOnTop(/turf/open/floor/plating) playsound(S, 'sound/items/deconstruct.ogg', 50, 1) chassis.spark_system.start() else if(isfloorturf(target)) var/turf/open/floor/F = target occupant_message("Building Wall...") if(do_after_cooldown(F)) - F.ChangeTurf(/turf/closed/wall) + F.PlaceOnTop(/turf/closed/wall) playsound(F, 'sound/items/deconstruct.ogg', 50, 1) chassis.spark_system.start() if(2) diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index ccacd133e8..aabf382ff2 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -4,7 +4,7 @@ icon_state = "recharge_floor" // Some people just want to watch the world burn i guess /turf/open/floor/mech_bay_recharge_floor/break_tile() - src.ChangeTurf(/turf/open/floor/plating) + ScrapeAway() /turf/open/floor/mech_bay_recharge_floor/airless icon_state = "recharge_floor_asteroid" diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm index 3459bfc954..d7b6340c26 100644 --- a/code/game/objects/effects/effect_system/effects_foam.dm +++ b/code/game/objects/effects/effect_system/effects_foam.dm @@ -76,7 +76,7 @@ if(metal) var/turf/T = get_turf(src) if(isspaceturf(T)) //Block up any exposed space - T.ChangeTurf(/turf/open/floor/plating/foam) + T.PlaceOnTop(/turf/open/floor/plating/foam) for(var/direction in GLOB.cardinals) var/turf/cardinal_turf = get_step(T, direction) if(get_area(cardinal_turf) != get_area(T)) //We're at an area boundary, so let's block off this turf! diff --git a/code/game/objects/effects/spawners/vaultspawner.dm b/code/game/objects/effects/spawners/vaultspawner.dm index 0b39f3a5a5..9bdf0a673e 100644 --- a/code/game/objects/effects/spawners/vaultspawner.dm +++ b/code/game/objects/effects/spawners/vaultspawner.dm @@ -20,9 +20,9 @@ for(var/j = lowBoundY,j<=hiBoundY,j++) var/turf/T = locate(i,j,z) if(i == lowBoundX || i == hiBoundX || j == lowBoundY || j == hiBoundY) - T.ChangeTurf(/turf/closed/wall/vault) + T.PlaceOnTop(/turf/closed/wall/vault) else - T.ChangeTurf(/turf/open/floor/vault) + T.PlaceOnTop(/turf/open/floor/vault) T.icon_state = "[type]vault" qdel(src) diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 6fb173b905..d7d0ca1618 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -275,13 +275,14 @@ consume_turf(target) /obj/item/melee/supermatter_sword/proc/consume_turf(turf/T) - if(istype(T, T.baseturf)) - return //Can't void the void, baby! + var/oldtype = T.type + var/turf/newT = T.ScrapeAway() + if(newT.type == oldtype) + return playsound(T, 'sound/effects/supermatter.ogg', 50, 1) T.visible_message("[T] smacks into [src] and rapidly flashes to ash.",\ "You hear a loud crack as you are washed with a wave of heat.") shard.Consume() - T.ChangeTurf(T.baseturf) T.CalculateAdjacentTurfs() /obj/item/melee/supermatter_sword/add_blood(list/blood_dna) diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index 770442f6c9..ebeb065b2a 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -85,7 +85,7 @@ /obj/structure/falsewall/proc/ChangeToWall(delete = 1) var/turf/T = get_turf(src) - T.ChangeTurf(walltype) + T.PlaceOnTop(walltype) if(delete) qdel(src) return T diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 594dba355d..190dab7011 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -86,7 +86,7 @@ S.use(5) to_chat(user, "You add the plating.") var/turf/T = get_turf(src) - T.ChangeTurf(/turf/closed/wall/mineral/iron) + T.PlaceOnTop(/turf/closed/wall/mineral/iron) transfer_fingerprints_to(T) qdel(src) return @@ -120,7 +120,7 @@ S.use(2) to_chat(user, "You add the plating.") var/turf/T = get_turf(src) - T.ChangeTurf(/turf/closed/wall) + T.PlaceOnTop(/turf/closed/wall) transfer_fingerprints_to(T) qdel(src) return @@ -150,7 +150,7 @@ S.use(1) to_chat(user, "You fully reinforce the wall.") var/turf/T = get_turf(src) - T.ChangeTurf(/turf/closed/wall/r_wall) + T.PlaceOnTop(/turf/closed/wall/r_wall) transfer_fingerprints_to(T) qdel(src) return @@ -194,7 +194,7 @@ S.use(2) to_chat(user, "You add the plating.") var/turf/T = get_turf(src) - T.ChangeTurf(text2path("/turf/closed/wall/mineral/[M]")) + T.PlaceOnTop(text2path("/turf/closed/wall/mineral/[M]")) transfer_fingerprints_to(T) qdel(src) return @@ -397,7 +397,7 @@ user.visible_message("[user] plates [src] with runed metal.", "You construct a runed wall.") R.use(1) var/turf/T = get_turf(src) - T.ChangeTurf(/turf/closed/wall/mineral/cult) + T.PlaceOnTop(/turf/closed/wall/mineral/cult) qdel(src) else @@ -424,7 +424,7 @@ switch(passed_mode) if(RCD_FLOORWALL) to_chat(user, "You finish a wall.") - T.ChangeTurf(/turf/closed/wall) + T.PlaceOnTop(/turf/closed/wall) qdel(src) return TRUE if(RCD_DECONSTRUCT) diff --git a/code/game/turfs/ChangeTurf.dm b/code/game/turfs/ChangeTurf.dm new file mode 100644 index 0000000000..2f165d9a20 --- /dev/null +++ b/code/game/turfs/ChangeTurf.dm @@ -0,0 +1,217 @@ +/turf/proc/empty(turf_type=/turf/open/space, baseturf_type, list/ignore_typecache, flags) + // Remove all atoms except observers, landmarks, docking ports + var/static/list/ignored_atoms = typecacheof(list(/mob/dead, /obj/effect/landmark, /obj/docking_port, /atom/movable/lighting_object)) + var/list/allowed_contents = typecache_filter_list_reverse(GetAllContentsIgnoring(ignore_typecache), ignored_atoms) + allowed_contents -= src + for(var/i in 1 to allowed_contents.len) + var/thing = allowed_contents[i] + qdel(thing, force=TRUE) + + var/turf/newT = ChangeTurf(turf_type, baseturf_type, flags) + + SSair.remove_from_active(newT) + newT.CalculateAdjacentTurfs() + SSair.add_to_active(newT,1) + +/turf/proc/copyTurf(turf/T) + if(T.type != type) + var/obj/O + if(underlays.len) //we have underlays, which implies some sort of transparency, so we want to a snapshot of the previous turf as an underlay + O = new() + O.underlays.Add(T) + T.ChangeTurf(type) + for(var/group in decals) + T.add_decal(decals[group],group) + if(underlays.len) + T.underlays = O.underlays + if(T.icon_state != icon_state) + T.icon_state = icon_state + if(T.icon != icon) + T.icon = icon + if(color) + T.atom_colours = atom_colours.Copy() + T.update_atom_colour() + if(T.dir != dir) + T.setDir(dir) + return T + +//wrapper for ChangeTurf()s that you want to prevent/affect without overriding ChangeTurf() itself +/turf/proc/TerraformTurf(path, new_baseturf, flags) + return ChangeTurf(path, new_baseturf, flags) + +// Creates a new turf +// new_baseturfs can be either a single type or list of types, formated the same as baseturfs. see turf.dm +/turf/proc/ChangeTurf(path, list/new_baseturfs, flags) + if(!path) + return + if(!GLOB.use_preloader && path == type && !(flags & CHANGETURF_FORCEOP)) // Don't no-op if the map loader requires it to be reconstructed + return src + + var/old_opacity = opacity + var/old_dynamic_lighting = dynamic_lighting + var/old_affecting_lights = affecting_lights + var/old_lighting_object = lighting_object + var/old_corners = corners + + var/old_exl = explosion_level + var/old_exi = explosion_id + var/old_bp = blueprint_data + blueprint_data = null + + var/list/old_baseturfs = baseturfs + changing_turf = TRUE + + qdel(src) //Just get the side effects and call Destroy + var/turf/W = new path(src) + + if(new_baseturfs) + W.baseturfs = new_baseturfs + else + W.baseturfs = old_baseturfs + + W.explosion_id = old_exi + W.explosion_level = old_exl + + if(!(flags & CHANGETURF_DEFER_CHANGE)) + W.AfterChange(flags) + + W.blueprint_data = old_bp + + if(SSlighting.initialized) + recalc_atom_opacity() + lighting_object = old_lighting_object + affecting_lights = old_affecting_lights + corners = old_corners + if (old_opacity != opacity || dynamic_lighting != old_dynamic_lighting) + reconsider_lights() + + if (dynamic_lighting != old_dynamic_lighting) + if (IS_DYNAMIC_LIGHTING(src)) + lighting_build_overlay() + else + lighting_clear_overlay() + + for(var/turf/open/space/S in RANGE_TURFS(1, src)) //RANGE_TURFS is in code\__HELPERS\game.dm + S.update_starlight() + + return W + +// Take off the top layer turf and replace it with the next baseturf down +/turf/proc/ScrapeAway() + if(length(baseturfs)) + var/list/new_baseturfs = baseturfs + var/turf_type = new_baseturfs[new_baseturfs.len] + new_baseturfs.len-- + switch(new_baseturfs.len) + if(1) + new_baseturfs = new_baseturfs[1] + if(0) + new_baseturfs = turf_type + // We must never end up with a situation where there is no baseturf + WARNING("turf of type [type] had a baseturfs length 1 still in list form.") + return ChangeTurf(turf_type, new_baseturfs) + + if(baseturfs == type) + return src + + return ChangeTurf(baseturfs, baseturfs) // The bottom baseturf will never go away + +// Take the input as baseturfs and put it underneath the current baseturfs +// If fake_turf_type is provided and new_baseturfs is not the baseturfs list will be created identical to the turf type's +// If both or just new_baseturfs is provided they will be inserted below the existing baseturfs +/turf/proc/PlaceOnBottom(turf/fake_turf_type, list/new_baseturfs) + if(fake_turf_type) + if(!new_baseturfs) + var/list/old_baseturfs = baseturfs.Copy() + assemble_baseturfs(fake_turf_type) + baseturfs += old_baseturfs + return + else if(!length(new_baseturfs)) + new_baseturfs = list(new_baseturfs, fake_turf_type) + else + new_baseturfs += fake_turf_type + baseturfs.Insert(1, new_baseturfs) + +// Make a new turf and put it on top +/turf/proc/PlaceOnTop(turf/fake_turf_type, list/new_baseturfs) + var/list/temp_baseturfs = list() + temp_baseturfs += baseturfs // Doesn't matter if baseturfs is a list or single item, either will get added correctly + temp_baseturfs += type + if(new_baseturfs) + temp_baseturfs += new_baseturfs + return ChangeTurf(fake_turf_type, temp_baseturfs) + +// Copy an existing turf and put it on top +/turf/proc/CopyOnTop(turf/copytarget, ignore_bottom=1, depth=INFINITY) // x, 1, 0 + var/list/new_baseturfs = list() + new_baseturfs += baseturfs + new_baseturfs += type + + if(depth) + var/list/target_baseturfs = copytarget.baseturfs + var/base_len = length(target_baseturfs) + if(!base_len) + if(!ignore_bottom) + new_baseturfs += target_baseturfs + else if(base_len > ignore_bottom) + if(base_len - ignore_bottom <= depth) + new_baseturfs += target_baseturfs.Copy(ignore_bottom + 1) + else + new_baseturfs += target_baseturfs.Copy(base_len - depth) + + var/turf/newT = copytarget.copyTurf(src) + newT.baseturfs = new_baseturfs + return newT + +/turf/proc/AfterChange(flags) //called after a turf has been replaced in ChangeTurf() + levelupdate() + CalculateAdjacentTurfs() + + //update firedoor adjacency + var/list/turfs_to_check = get_adjacent_open_turfs(src) | src + for(var/I in turfs_to_check) + var/turf/T = I + for(var/obj/machinery/door/firedoor/FD in T) + FD.CalculateAffectingAreas() + + queue_smooth_neighbors(src) + + HandleTurfChange(src) + +/turf/open/AfterChange(flags) + ..() + RemoveLattice() + if(!(flags & CHANGETURF_IGNORE_AIR)) + Assimilate_Air() + +//////Assimilate Air////// +/turf/open/proc/Assimilate_Air() + var/turf_count = LAZYLEN(atmos_adjacent_turfs) + if(blocks_air || !turf_count) //if there weren't any open turfs, no need to update. + return + + var/datum/gas_mixture/total = new//Holders to assimilate air from nearby turfs + var/list/total_gases = total.gases + + for(var/T in atmos_adjacent_turfs) + var/turf/open/S = T + if(!S.air) + continue + var/list/S_gases = S.air.gases + for(var/id in S_gases) + ASSERT_GAS(id, total) + total_gases[id][MOLES] += S_gases[id][MOLES] + total.temperature += S.air.temperature + + air.copy_from(total) + + var/list/air_gases = air.gases + for(var/id in air_gases) + air_gases[id][MOLES] /= turf_count //Averages contents of the turfs, ignoring walls and the like + + air.temperature /= turf_count + SSair.add_to_active(src) + +/turf/proc/ReplaceWithLattice() + ScrapeAway() + new /obj/structure/lattice(locate(x, y, z)) \ No newline at end of file diff --git a/code/game/turfs/closed.dm b/code/game/turfs/closed.dm index 1dc749dc70..6f1e6bfaf0 100644 --- a/code/game/turfs/closed.dm +++ b/code/game/turfs/closed.dm @@ -137,7 +137,7 @@ icon = 'icons/turf/walls.dmi' icon_state = "necro" explosion_block = 50 - baseturf = /turf/closed/indestructible/necropolis + baseturfs = /turf/closed/indestructible/necropolis /turf/closed/indestructible/necropolis/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) underlay_appearance.icon = 'icons/turf/floors.dmi' @@ -151,7 +151,7 @@ icon_state = "wall" canSmoothWith = list(/turf/closed/indestructible/riveted/boss, /turf/closed/indestructible/riveted/boss/see_through) explosion_block = 50 - baseturf = /turf/closed/indestructible/riveted/boss + baseturfs = /turf/closed/indestructible/riveted/boss /turf/closed/indestructible/riveted/boss/see_through opacity = FALSE diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index 0eddbc411e..6fed77b5fe 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -30,7 +30,7 @@ desc = "It's regarding you suspiciously." icon = 'icons/turf/floors.dmi' icon_state = "necro1" - baseturf = /turf/open/indestructible/necropolis + baseturfs = /turf/open/indestructible/necropolis initial_gas_mix = LAVALAND_DEFAULT_ATMOS /turf/open/indestructible/necropolis/Initialize() @@ -45,7 +45,7 @@ name = "necropolis floor" icon = 'icons/turf/boss_floors.dmi' icon_state = "boss" - baseturf = /turf/open/indestructible/boss + baseturfs = /turf/open/indestructible/boss initial_gas_mix = LAVALAND_DEFAULT_ATMOS /turf/open/indestructible/boss/air @@ -54,7 +54,7 @@ /turf/open/indestructible/hierophant icon = 'icons/turf/floors/hierophant_floor.dmi' initial_gas_mix = LAVALAND_DEFAULT_ATMOS - baseturf = /turf/open/indestructible/hierophant + baseturfs = /turf/open/indestructible/hierophant smooth = SMOOTH_TRUE /turf/open/indestructible/hierophant/two @@ -71,7 +71,7 @@ name = "cogmetal" desc = "Brass plating that gently radiates heat. For some reason, it reminds you of blood." icon_state = "reebe" - baseturf = /turf/open/indestructible/clock_spawn_room + baseturfs = /turf/open/indestructible/clock_spawn_room /turf/open/indestructible/clock_spawn_room/Entered() ..() diff --git a/code/game/turfs/simulated/chasm.dm b/code/game/turfs/simulated/chasm.dm index 3f45d5e127..dec9deac51 100644 --- a/code/game/turfs/simulated/chasm.dm +++ b/code/game/turfs/simulated/chasm.dm @@ -2,7 +2,7 @@ /turf/open/chasm name = "chasm" desc = "Watch your step." - baseturf = /turf/open/chasm + baseturfs = /turf/open/chasm smooth = SMOOTH_TRUE | SMOOTH_BORDER | SMOOTH_MORE icon = 'icons/turf/floors/chasms.dmi' icon_state = "smooth" @@ -55,7 +55,7 @@ playsound(src, 'sound/weapons/genhit.ogg', 50, 1) to_chat(user, "You build a floor.") // Create a floor, which has this chasm underneath it - ChangeTurf(/turf/open/floor/plating, type) + PlaceOnTop(/turf/open/floor/plating) else to_chat(user, "You need one floor tile to build a floor!") else @@ -67,7 +67,7 @@ // Naive "down" which just subtracts a z-level /turf/open/chasm/straight_down - baseturf = /turf/open/chasm/straight_down + baseturfs = /turf/open/chasm/straight_down /turf/open/chasm/straight_down/Initialize() . = ..() @@ -78,7 +78,7 @@ /turf/open/chasm/lavaland initial_gas_mix = LAVALAND_DEFAULT_ATMOS planetary_atmos = TRUE - baseturf = /turf/open/chasm/lavaland + baseturfs = /turf/open/chasm/lavaland light_range = 1.9 //slightly less range than lava light_power = 0.65 //less bright, too light_color = LIGHT_COLOR_LAVA //let's just say you're falling into lava, that makes sense right @@ -89,7 +89,7 @@ icon = 'icons/turf/floors/junglechasm.dmi' initial_gas_mix = LAVALAND_DEFAULT_ATMOS planetary_atmos = TRUE - baseturf = /turf/open/chasm/jungle + baseturfs = /turf/open/chasm/jungle /turf/open/chasm/jungle/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) underlay_appearance.icon = 'icons/turf/floors.dmi' @@ -97,7 +97,7 @@ return TRUE /turf/open/chasm/jungle/straight_down - baseturf = /turf/open/chasm/jungle/straight_down + baseturfs = /turf/open/chasm/jungle/straight_down /turf/open/chasm/jungle/straight_down/Initialize(mapload) . = ..() diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 3978bc802d..db12cf3530 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -51,13 +51,13 @@ if(severity != 1 && shielded && target != src) return if(target == src) - src.ChangeTurf(src.baseturf) + ScrapeAway() if(target != null) severity = 3 switch(severity) if(1) - src.ChangeTurf(src.baseturf) + ScrapeAway() if(2) switch(pick(1,2;75,3)) if(1) @@ -65,7 +65,7 @@ if(prob(33)) new /obj/item/stack/sheet/metal(src) if(2) - src.ChangeTurf(src.baseturf) + ScrapeAway() if(3) if(prob(80)) src.break_tile_to_plating() @@ -119,7 +119,7 @@ /turf/open/floor/proc/make_plating() return ChangeTurf(/turf/open/floor/plating) -/turf/open/floor/ChangeTurf(path, new_baseturf, defer_change = FALSE, ignore_air = FALSE, forceop = FALSE) +/turf/open/floor/ChangeTurf(path, new_baseturf, flags) if(!isfloorturf(src)) return ..() //fucking turfs switch the fucking src of the fucking running procs if(!ispath(path, /turf/open/floor)) @@ -202,7 +202,7 @@ ChangeTurf(/turf/open/floor/clockwork) /turf/open/floor/acid_melt() - ChangeTurf(baseturf) + ScrapeAway() /turf/open/floor/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) switch(the_rcd.mode) @@ -223,7 +223,7 @@ switch(passed_mode) if(RCD_FLOORWALL) to_chat(user, "You build a wall.") - ChangeTurf(/turf/closed/wall) + PlaceOnTop(/turf/closed/wall) return TRUE if(RCD_AIRLOCK) if(locate(/obj/machinery/door/airlock) in src) @@ -244,10 +244,9 @@ A.autoclose = TRUE return TRUE if(RCD_DECONSTRUCT) - if(istype(src, baseturf)) + if(ScrapeAway() == src) return FALSE to_chat(user, "You deconstruct [src].") - ChangeTurf(baseturf) return TRUE if(RCD_WINDOWGRILLE) if(locate(/obj/structure/grille) in src) diff --git a/code/game/turfs/simulated/floor/light_floor.dm b/code/game/turfs/simulated/floor/light_floor.dm index f0fb7c4448..889638b27e 100644 --- a/code/game/turfs/simulated/floor/light_floor.dm +++ b/code/game/turfs/simulated/floor/light_floor.dm @@ -47,7 +47,7 @@ icon_state = "light_off" -/turf/open/floor/light/ChangeTurf(path, new_baseturf, defer_change = FALSE, ignore_air = FALSE, forceop = FALSE) +/turf/open/floor/light/ChangeTurf(path, new_baseturf, flags) set_light(0) return ..() diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm index 3e7540cdf6..e9ff95af84 100644 --- a/code/game/turfs/simulated/floor/misc_floor.dm +++ b/code/game/turfs/simulated/floor/misc_floor.dm @@ -142,7 +142,7 @@ name = "clockwork floor" desc = "Tightly-pressed brass tiles. They emit minute vibration." icon_state = "plating" - baseturf = /turf/open/floor/clockwork + baseturfs = /turf/open/floor/clockwork var/uses_overlay = TRUE var/obj/effect/clockwork/overlay/floor/realappearence @@ -161,9 +161,7 @@ return ..() /turf/open/floor/clockwork/ReplaceWithLattice() - if(baseturf == type) - return - ..() + . = ..() for(var/obj/structure/lattice/L in src) L.ratvar_act() @@ -196,7 +194,7 @@ L.adjustToxLoss(-3, TRUE, TRUE) /turf/open/floor/clockwork/attackby(obj/item/I, mob/living/user, params) - if(baseturf == type) + if(baseturfs == type) return if(istype(I, /obj/item/crowbar)) user.visible_message("[user] begins slowly prying up [src]...", "You begin painstakingly prying up [src]...") @@ -225,7 +223,7 @@ name = "cogplate" desc = "Warm brass plating. You can feel it gently vibrating, as if machinery is on the other side." icon_state = "reebe" - baseturf = /turf/open/floor/clockwork/reebe + baseturfs = /turf/open/floor/clockwork/reebe uses_overlay = FALSE /turf/open/floor/bluespace diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index 27afebef7c..a406f1e148 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -109,10 +109,10 @@ if(prob(I.force * 20 - 25)) user.visible_message("[user] smashes through [src]!", \ "You smash through [src] with [I]!") - ChangeTurf(baseturf) + ScrapeAway() else to_chat(user, "You hit [src], to no effect!") /turf/open/floor/plating/foam/ex_act() ..() - ChangeTurf(baseturf) + ScrapeAway() diff --git a/code/game/turfs/simulated/floor/plating/asteroid.dm b/code/game/turfs/simulated/floor/plating/asteroid.dm index 1419036d07..2cdac898b7 100644 --- a/code/game/turfs/simulated/floor/plating/asteroid.dm +++ b/code/game/turfs/simulated/floor/plating/asteroid.dm @@ -5,7 +5,7 @@ /turf/open/floor/plating/asteroid //floor piece name = "asteroid sand" - baseturf = /turf/open/floor/plating/asteroid + baseturfs = /turf/open/floor/plating/asteroid icon = 'icons/turf/floors.dmi' icon_state = "asteroid" icon_plating = "asteroid" @@ -61,7 +61,7 @@ /turf/open/floor/plating/asteroid/singularity_act() if(turf_z_is_planet(src)) return ..() - ChangeTurf(/turf/open/space) + ScrapeAway() /turf/open/floor/plating/asteroid/ex_act(severity, target) . = SendSignal(COMSIG_ATOM_EX_ACT, severity, target) @@ -70,7 +70,7 @@ /turf/open/floor/plating/asteroid/basalt name = "volcanic floor" - baseturf = /turf/open/floor/plating/asteroid/basalt + baseturfs = /turf/open/floor/plating/asteroid/basalt icon = 'icons/turf/floors.dmi' icon_state = "basalt" icon_plating = "basalt" @@ -79,7 +79,7 @@ floor_variance = 15 /turf/open/floor/plating/asteroid/basalt/lava //lava underneath - baseturf = /turf/open/lava/smooth + baseturfs = /turf/open/lava/smooth /turf/open/floor/plating/asteroid/basalt/airless initial_gas_mix = "TEMP=2.7" @@ -103,7 +103,7 @@ /turf/open/floor/plating/asteroid/basalt/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS planetary_atmos = TRUE - baseturf = /turf/open/lava/smooth/lava_land_surface + baseturfs = /turf/open/lava/smooth/lava_land_surface @@ -206,7 +206,7 @@ if(istype(tunnel)) // Small chance to have forks in our tunnel; otherwise dig our tunnel. if(i > 3 && prob(20)) - var/turf/open/floor/plating/asteroid/airless/cave/C = tunnel.ChangeTurf(data_having_type,FALSE,FALSE,TRUE) + var/turf/open/floor/plating/asteroid/airless/cave/C = tunnel.ChangeTurf(data_having_type, null, CHANGETURF_IGNORE_AIR) C.going_backwards = FALSE C.produce_tunnel_from_data(rand(10, 15), dir) else @@ -232,7 +232,7 @@ SpawnFlora(T) SpawnMonster(T) - T.ChangeTurf(turf_type,FALSE,FALSE,TRUE) + T.ChangeTurf(turf_type, null, CHANGETURF_IGNORE_AIR) /turf/open/floor/plating/asteroid/airless/cave/proc/SpawnMonster(turf/T) if(prob(30)) @@ -279,7 +279,7 @@ name = "snow" desc = "Looks cold." icon = 'icons/turf/snow.dmi' - baseturf = /turf/open/floor/plating/asteroid/snow + baseturfs = /turf/open/floor/plating/asteroid/snow icon_state = "snow" icon_plating = "snow" initial_gas_mix = "TEMP=180" diff --git a/code/game/turfs/simulated/floor/plating/dirt.dm b/code/game/turfs/simulated/floor/plating/dirt.dm index 3a02935657..a9ddd4180e 100644 --- a/code/game/turfs/simulated/floor/plating/dirt.dm +++ b/code/game/turfs/simulated/floor/plating/dirt.dm @@ -3,7 +3,7 @@ desc = "Upon closer examination, it's still dirt." icon = 'icons/turf/floors.dmi' icon_state = "dirt" - baseturf = /turf/open/chasm/jungle/straight_down + baseturfs = /turf/open/chasm/jungle/straight_down initial_gas_mix = LAVALAND_DEFAULT_ATMOS planetary_atmos = TRUE attachment_holes = FALSE diff --git a/code/game/turfs/simulated/floor/plating/misc_plating.dm b/code/game/turfs/simulated/floor/plating/misc_plating.dm index 259e374869..d08d93ef2c 100644 --- a/code/game/turfs/simulated/floor/plating/misc_plating.dm +++ b/code/game/turfs/simulated/floor/plating/misc_plating.dm @@ -37,7 +37,7 @@ smooth = SMOOTH_MORE|SMOOTH_BORDER var/smooth_icon = 'icons/turf/floors/ash.dmi' desc = "The ground is covered in volcanic ash." - baseturf = /turf/open/floor/plating/ashplanet/wateryrock //I assume this will be a chasm eventually, once this becomes an actual surface + baseturfs = /turf/open/floor/plating/ashplanet/wateryrock //I assume this will be a chasm eventually, once this becomes an actual surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS planetary_atmos = TRUE attachment_holes = FALSE @@ -91,24 +91,24 @@ name = "sand" desc = "Surf's up." icon_state = "sand" - baseturf = /turf/open/floor/plating/beach/sand + baseturfs = /turf/open/floor/plating/beach/sand /turf/open/floor/plating/beach/coastline_t name = "coastline" desc = "Tide's high tonight. Charge your batons." icon_state = "sandwater_t" - baseturf = /turf/open/floor/plating/beach/coastline_t + baseturfs = /turf/open/floor/plating/beach/coastline_t /turf/open/floor/plating/beach/coastline_b name = "coastline" icon_state = "sandwater_b" - baseturf = /turf/open/floor/plating/beach/coastline_b + baseturfs = /turf/open/floor/plating/beach/coastline_b /turf/open/floor/plating/beach/water name = "water" desc = "You get the feeling that nobody's bothered to actually make this water functional..." icon_state = "water" - baseturf = /turf/open/floor/plating/beach/water + baseturfs = /turf/open/floor/plating/beach/water /turf/open/floor/plating/ironsand @@ -129,7 +129,7 @@ icon = 'icons/turf/snow.dmi' icon_state = "ice" temperature = 180 - baseturf = /turf/open/floor/plating/ice + baseturfs = /turf/open/floor/plating/ice slowdown = 1 wet = TURF_WET_PERMAFROST attachment_holes = FALSE diff --git a/code/game/turfs/simulated/floor/reinf_floor.dm b/code/game/turfs/simulated/floor/reinf_floor.dm index 74354e78c7..f53e62dba7 100644 --- a/code/game/turfs/simulated/floor/reinf_floor.dm +++ b/code/game/turfs/simulated/floor/reinf_floor.dm @@ -48,14 +48,14 @@ if(severity != 1 && shielded && target != src) return if(target == src) - src.ChangeTurf(src.baseturf) + ScrapeAway() return switch(severity) if(1) if(prob(80)) ReplaceWithLattice() else if(prob(50)) - ChangeTurf(src.baseturf) + ScrapeAway() else make_plating(1) if(2) @@ -122,7 +122,7 @@ be_removed() return ..() -/turf/open/floor/engine/cult/ChangeTurf(path, new_baseturf, defer_change = FALSE, ignore_air = FALSE, forceop = FALSE) +/turf/open/floor/engine/cult/ChangeTurf(path, new_baseturf, flags) if(path != type) be_removed() return ..() diff --git a/code/game/turfs/simulated/lava.dm b/code/game/turfs/simulated/lava.dm index d5dbd79ff5..42ede622a1 100644 --- a/code/game/turfs/simulated/lava.dm +++ b/code/game/turfs/simulated/lava.dm @@ -4,7 +4,7 @@ name = "lava" icon_state = "lava" gender = PLURAL //"That's some lava." - baseturf = /turf/open/lava //lava all the way down + baseturfs = /turf/open/lava //lava all the way down slowdown = 2 light_range = 2 @@ -128,7 +128,7 @@ /turf/open/lava/smooth name = "lava" - baseturf = /turf/open/lava/smooth + baseturfs = /turf/open/lava/smooth icon = 'icons/turf/floors/lava.dmi' icon_state = "unsmooth" smooth = SMOOTH_MORE | SMOOTH_BORDER @@ -137,7 +137,7 @@ /turf/open/lava/smooth/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS planetary_atmos = TRUE - baseturf = /turf/open/chasm/lavaland + baseturfs = /turf/open/chasm/lavaland /turf/open/lava/smooth/airless initial_gas_mix = "TEMP=2.7" diff --git a/code/game/turfs/simulated/minerals.dm b/code/game/turfs/simulated/minerals.dm index 2a0147c82a..c737848749 100644 --- a/code/game/turfs/simulated/minerals.dm +++ b/code/game/turfs/simulated/minerals.dm @@ -7,7 +7,7 @@ var/smooth_icon = 'icons/turf/smoothrocks.dmi' smooth = SMOOTH_MORE|SMOOTH_BORDER canSmoothWith - baseturf = /turf/open/floor/plating/asteroid/airless + baseturfs = /turf/open/floor/plating/asteroid/airless initial_gas_mix = "TEMP=2.7" opacity = 1 density = TRUE @@ -78,7 +78,10 @@ SSblackbox.record_feedback("tally", "ore_mined", 1, mineralType) for(var/obj/effect/temp_visual/mining_overlay/M in src) qdel(M) - ChangeTurf(turf_type, FALSE, defer_change) + var/flags = NONE + if(defer_change) // TODO: make the defer change var a var for any changeturf flag + flags = CHANGETURF_DEFER_CHANGE + ChangeTurf(turf_type, null, flags) addtimer(CALLBACK(src, .proc/AfterChange), 1, TIMER_UNIQUE) playsound(src, 'sound/effects/break_stone.ogg', 50, 1) //beautiful destruction @@ -111,7 +114,7 @@ return /turf/closed/mineral/acid_melt() - ChangeTurf(baseturf) + ScrapeAway() /turf/closed/mineral/ex_act(severity, target) ..() @@ -153,7 +156,7 @@ M.mineralAmt = rand(1, 5) M.environment_type = src.environment_type M.turf_type = src.turf_type - M.baseturf = src.baseturf + M.baseturfs = src.baseturfs src = M M.levelupdate() @@ -168,7 +171,7 @@ /turf/closed/mineral/random/high_chance/volcanic environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturf = /turf/open/lava/smooth/lava_land_surface + baseturfs = /turf/open/lava/smooth/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS defer_change = 1 mineralSpawnChanceList = list( @@ -189,7 +192,7 @@ /turf/closed/mineral/random/volcanic environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturf = /turf/open/lava/smooth/lava_land_surface + baseturfs = /turf/open/lava/smooth/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS defer_change = 1 @@ -211,7 +214,7 @@ /turf/closed/mineral/random/labormineral/volcanic environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturf = /turf/open/lava/smooth/lava_land_surface + baseturfs = /turf/open/lava/smooth/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS defer_change = 1 mineralSpawnChanceList = list( @@ -230,7 +233,7 @@ /turf/closed/mineral/iron/volcanic environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface + baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS defer_change = 1 @@ -244,7 +247,7 @@ /turf/closed/mineral/uranium/volcanic environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface + baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS defer_change = 1 @@ -258,7 +261,7 @@ /turf/closed/mineral/diamond/volcanic environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface + baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS defer_change = 1 @@ -272,7 +275,7 @@ /turf/closed/mineral/gold/volcanic environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface + baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS defer_change = 1 @@ -286,7 +289,7 @@ /turf/closed/mineral/silver/volcanic environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface + baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS defer_change = 1 @@ -300,7 +303,7 @@ /turf/closed/mineral/titanium/volcanic environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface + baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS defer_change = 1 @@ -314,7 +317,7 @@ /turf/closed/mineral/plasma/volcanic environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface + baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS defer_change = 1 @@ -337,7 +340,7 @@ /turf/closed/mineral/bscrystal/volcanic environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface + baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS defer_change = 1 @@ -345,13 +348,13 @@ /turf/closed/mineral/volcanic environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt - baseturf = /turf/open/floor/plating/asteroid/basalt + baseturfs = /turf/open/floor/plating/asteroid/basalt initial_gas_mix = LAVALAND_DEFAULT_ATMOS /turf/closed/mineral/volcanic/lava_land_surface environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturf = /turf/open/lava/smooth/lava_land_surface + baseturfs = /turf/open/lava/smooth/lava_land_surface defer_change = 1 /turf/closed/mineral/ash_rock //wall piece @@ -361,7 +364,7 @@ icon_state = "rock2" smooth = SMOOTH_MORE|SMOOTH_BORDER canSmoothWith = list (/turf/closed) - baseturf = /turf/open/floor/plating/ashplanet/wateryrock + baseturfs = /turf/open/floor/plating/ashplanet/wateryrock initial_gas_mix = LAVALAND_DEFAULT_ATMOS environment_type = "waste" turf_type = /turf/open/floor/plating/ashplanet/rocky @@ -459,13 +462,16 @@ G.quality = 2 G.icon_state = "Gibtonite ore 2" - ChangeTurf(turf_type, FALSE, defer_change) + var/flags = NONE + if(defer_change) + flags = CHANGETURF_DEFER_CHANGE + ChangeTurf(turf_type, null, flags) addtimer(CALLBACK(src, .proc/AfterChange), 1, TIMER_UNIQUE) /turf/closed/mineral/gibtonite/volcanic environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface + baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS defer_change = 1 diff --git a/code/game/turfs/simulated/reebe_void.dm b/code/game/turfs/simulated/reebe_void.dm index 2e0246df83..3e40ebed64 100644 --- a/code/game/turfs/simulated/reebe_void.dm +++ b/code/game/turfs/simulated/reebe_void.dm @@ -2,7 +2,7 @@ name = "void" icon_state = "reebemap" layer = SPACE_LAYER - baseturf = /turf/open/indestructible/reebe_void + baseturfs = /turf/open/indestructible/reebe_void planetary_atmos = TRUE /turf/open/indestructible/reebe_void/Initialize(mapload) diff --git a/code/game/turfs/simulated/river.dm b/code/game/turfs/simulated/river.dm index 165af6ee68..fe9a5926bb 100644 --- a/code/game/turfs/simulated/river.dm +++ b/code/game/turfs/simulated/river.dm @@ -20,7 +20,7 @@ continue W.connected = 1 var/turf/cur_turf = get_turf(W) - cur_turf.ChangeTurf(turf_type,FALSE,FALSE,TRUE) + cur_turf.ChangeTurf(turf_type, null, CHANGETURF_IGNORE_AIR) var/turf/target_turf = get_turf(pick(river_nodes - W)) if(!target_turf) break @@ -49,7 +49,7 @@ cur_turf = get_step(cur_turf, cur_dir) continue else - var/turf/river_turf = cur_turf.ChangeTurf(turf_type,FALSE,FALSE,TRUE) + var/turf/river_turf = cur_turf.ChangeTurf(turf_type, null, CHANGETURF_IGNORE_AIR) river_turf.Spread(25, 11, whitelist_area) for(var/WP in river_nodes) @@ -85,16 +85,16 @@ for(var/F in cardinal_turfs) //cardinal turfs are always changed but don't always spread var/turf/T = F - if(!istype(T, logged_turf_type) && T.ChangeTurf(type,FALSE,FALSE,TRUE) && prob(probability)) + if(!istype(T, logged_turf_type) && T.ChangeTurf(type, null, CHANGETURF_IGNORE_AIR) && prob(probability)) T.Spread(probability - prob_loss, prob_loss, whitelisted_area) for(var/F in diagonal_turfs) //diagonal turfs only sometimes change, but will always spread if changed var/turf/T = F - if(!istype(T, logged_turf_type) && prob(probability) && T.ChangeTurf(type,FALSE,FALSE,TRUE)) + if(!istype(T, logged_turf_type) && prob(probability) && T.ChangeTurf(type, null, CHANGETURF_IGNORE_AIR)) T.Spread(probability - prob_loss, prob_loss, whitelisted_area) else if(ismineralturf(T)) var/turf/closed/mineral/M = T - M.ChangeTurf(M.turf_type,FALSE,FALSE,TRUE) + M.ChangeTurf(M.turf_type, null, CHANGETURF_IGNORE_AIR) #undef RANDOM_UPPER_X diff --git a/code/game/turfs/simulated/wall/misc_walls.dm b/code/game/turfs/simulated/wall/misc_walls.dm index ecc389af88..24056658c4 100644 --- a/code/game/turfs/simulated/wall/misc_walls.dm +++ b/code/game/turfs/simulated/wall/misc_walls.dm @@ -55,7 +55,7 @@ sheet_type = /obj/item/stack/tile/brass sheet_amount = 1 girder_type = /obj/structure/destructible/clockwork/wall_gear - baseturf = /turf/open/floor/clockwork/reebe + baseturfs = /turf/open/floor/clockwork/reebe var/heated var/obj/effect/clockwork/overlay/wall/realappearence @@ -88,13 +88,13 @@ /turf/closed/wall/clockwork/dismantle_wall(devastated=0, explode=0) if(devastated) devastate_wall() - ChangeTurf(/turf/open/floor/plating) + ScrapeAway() else playsound(src, 'sound/items/welder.ogg', 100, 1) var/newgirder = break_wall() if(newgirder) //maybe we want a gear! transfer_fingerprints_to(newgirder) - ChangeTurf(/turf/open/floor/clockwork) + ScrapeAway() for(var/obj/O in src) //Eject contents! if(istype(O, /obj/structure/sign/poster)) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 00377e4f3f..7da53425bd 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -10,6 +10,8 @@ thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT heat_capacity = 312500 //a little over 5 cm thick , 312500 for 1 m by 2.5 m by 0.25 m plasteel wall + baseturfs = /turf/open/floor/plating + var/hardness = 40 //lower numbers are harder. Used to determine the probability of a hulk smashing through. var/slicing_duration = 100 //default time taken to slice the wall var/sheet_type = /obj/item/stack/sheet/metal @@ -78,7 +80,7 @@ var/obj/structure/sign/poster/P = O P.roll_and_drop(src) - ChangeTurf(/turf/open/floor/plating) + ScrapeAway() /turf/closed/wall/proc/break_wall() new sheet_type(src, sheet_amount) @@ -96,7 +98,7 @@ switch(severity) if(1) //SN src = null - var/turf/NT = ChangeTurf(baseturf) + var/turf/NT = ScrapeAway() NT.contents_explosion(severity, target) return if(2) @@ -294,7 +296,7 @@ switch(passed_mode) if(RCD_DECONSTRUCT) to_chat(user, "You deconstruct the wall.") - ChangeTurf(/turf/open/floor/plating) + ScrapeAway() return TRUE return FALSE diff --git a/code/game/turfs/simulated/water.dm b/code/game/turfs/simulated/water.dm index c67fdc83a1..104f8b4b53 100644 --- a/code/game/turfs/simulated/water.dm +++ b/code/game/turfs/simulated/water.dm @@ -3,7 +3,7 @@ desc = "Shallow water." icon = 'icons/turf/floors.dmi' icon_state = "riverwater" - baseturf = /turf/open/chasm/lavaland + baseturfs = /turf/open/chasm/lavaland initial_gas_mix = LAVALAND_DEFAULT_ATMOS planetary_atmos = TRUE slowdown = 1 diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index 5399b748e6..e446eb3b2c 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -118,7 +118,7 @@ qdel(L) playsound(src, 'sound/weapons/genhit.ogg', 50, 1) to_chat(user, "You build a floor.") - ChangeTurf(/turf/open/floor/plating) + PlaceOnTop(/turf/open/floor/plating) else to_chat(user, "You need one floor tile to build a floor!") else @@ -192,7 +192,7 @@ switch(passed_mode) if(RCD_FLOORWALL) to_chat(user, "You build a floor.") - ChangeTurf(/turf/open/floor/plating) + PlaceOnTop(/turf/open/floor/plating) return TRUE return FALSE diff --git a/code/game/turfs/space/transit.dm b/code/game/turfs/space/transit.dm index 2ba08fa2a9..a2f8d8262c 100644 --- a/code/game/turfs/space/transit.dm +++ b/code/game/turfs/space/transit.dm @@ -1,7 +1,7 @@ /turf/open/space/transit icon_state = "black" dir = SOUTH - baseturf = /turf/open/space/transit + baseturfs = /turf/open/space/transit flags_1 = NOJAUNT_1 //This line goes out to every wizard that ever managed to escape the den. I'm sorry. explosion_block = INFINITY diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 36ba033eef..f0563ade79 100755 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -3,7 +3,13 @@ level = 1 var/intact = 1 - var/turf/baseturf = /turf/open/space + + // baseturfs can be either a list or a single turf type. + // In class definition like here it should always be a single type. + // A list will be created in initialization that figures out the baseturf's baseturf etc. + // In the case of a list it is sorted from bottom layer to top. + // This shouldn't be modified directly, use the helper procs. + var/list/baseturfs = /turf/open/space var/temperature = T20C var/to_be_destroyed = 0 //Used for fire, if a melting temperature was reached, it will be destroyed @@ -35,6 +41,8 @@ stack_trace("Warning: [src]([type]) initialized multiple times!") initialized = TRUE + assemble_baseturfs() + levelupdate() if(smooth) queue_smooth(src) @@ -180,6 +188,55 @@ /turf/proc/is_plasteel_floor() return FALSE +// A proc in case it needs to be recreated or badmins want to change the baseturfs +/turf/proc/assemble_baseturfs(turf/fake_baseturf_type) + var/static/list/created_baseturf_lists = list() + var/turf/current_target + if(fake_baseturf_type) + if(length(fake_baseturf_type)) // We were given a list, just apply it and move on + baseturfs = fake_baseturf_type + return + current_target = fake_baseturf_type + else + if(length(baseturfs)) + return // No replacement baseturf has been given and the current baseturfs value is already a list/assembled + if(!baseturfs) + current_target = initial(baseturfs) || type // This should never happen but just in case... + stack_trace("baseturfs var was null for [type]. Failsafe activated and it has been given a new baseturfs value of [current_target].") + else + current_target = baseturfs + + // If we've made the output before we don't need to regenerate it + if(created_baseturf_lists[current_target]) + var/list/premade_baseturfs = created_baseturf_lists[current_target] + if(length(premade_baseturfs)) + baseturfs = premade_baseturfs.Copy() + else + baseturfs = premade_baseturfs + return baseturfs + + var/turf/next_target = initial(current_target.baseturfs) + //Most things only have 1 baseturf so this loop won't run in most cases + if(current_target == next_target) + baseturfs = current_target + created_baseturf_lists[current_target] = current_target + return current_target + var/list/new_baseturfs = list(current_target) + for(var/i=0;current_target != next_target;i++) + if(i > 100) + // A baseturfs list over 100 members long is silly + // Because of how this is all structured it will only runtime/message once per type + stack_trace("A turf <[type]> created a baseturfs list over 100 members long. This is most likely an infinite loop.") + message_admins("A turf <[type]> created a baseturfs list over 100 members long. This is most likely an infinite loop.") + break + new_baseturfs.Insert(1, next_target) + current_target = next_target + next_target = initial(current_target.baseturfs) + + baseturfs = new_baseturfs + created_baseturf_lists[new_baseturfs[new_baseturfs.len]] = new_baseturfs.Copy() + return new_baseturfs + /turf/proc/levelupdate() for(var/obj/O in src) if(O.level == 1) @@ -197,119 +254,6 @@ if(L) qdel(L) -//wrapper for ChangeTurf()s that you want to prevent/affect without overriding ChangeTurf() itself -/turf/proc/TerraformTurf(path, new_baseturf, defer_change = FALSE, ignore_air = FALSE, forceop = FALSE) - return ChangeTurf(path, new_baseturf, defer_change, ignore_air, forceop) - -//Creates a new turf -/turf/proc/ChangeTurf(path, new_baseturf, defer_change = FALSE, ignore_air = FALSE, forceop = FALSE) - if(!path) - return - if(!GLOB.use_preloader && path == type && !forceop) // Don't no-op if the map loader requires it to be reconstructed - return src - - var/old_opacity = opacity - var/old_dynamic_lighting = dynamic_lighting - var/old_affecting_lights = affecting_lights - var/old_lighting_object = lighting_object - var/old_corners = corners - - var/old_exl = explosion_level - var/old_exi = explosion_id - var/old_bp = blueprint_data - blueprint_data = null - - var/old_baseturf = baseturf - changing_turf = TRUE - - qdel(src) //Just get the side effects and call Destroy - var/turf/W = new path(src) - - if(new_baseturf) - W.baseturf = new_baseturf - else - W.baseturf = old_baseturf - - W.explosion_id = old_exi - W.explosion_level = old_exl - - if(!defer_change) - W.AfterChange(ignore_air) - - W.blueprint_data = old_bp - - if(SSlighting.initialized) - recalc_atom_opacity() - lighting_object = old_lighting_object - affecting_lights = old_affecting_lights - corners = old_corners - if (old_opacity != opacity || dynamic_lighting != old_dynamic_lighting) - reconsider_lights() - - if (dynamic_lighting != old_dynamic_lighting) - if (IS_DYNAMIC_LIGHTING(src)) - lighting_build_overlay() - else - lighting_clear_overlay() - - for(var/turf/open/space/S in RANGE_TURFS(1, src)) //RANGE_TURFS is in code\__HELPERS\game.dm - S.update_starlight() - - return W - -/turf/proc/AfterChange(ignore_air = FALSE) //called after a turf has been replaced in ChangeTurf() - levelupdate() - CalculateAdjacentTurfs() - - //update firedoor adjacency - var/list/turfs_to_check = get_adjacent_open_turfs(src) | src - for(var/I in turfs_to_check) - var/turf/T = I - for(var/obj/machinery/door/firedoor/FD in T) - FD.CalculateAffectingAreas() - - queue_smooth_neighbors(src) - - HandleTurfChange(src) - -/turf/open/AfterChange(ignore_air) - ..() - RemoveLattice() - if(!ignore_air) - Assimilate_Air() - -//////Assimilate Air////// -/turf/open/proc/Assimilate_Air() - var/turf_count = LAZYLEN(atmos_adjacent_turfs) - if(blocks_air || !turf_count) //if there weren't any open turfs, no need to update. - return - - var/datum/gas_mixture/total = new//Holders to assimilate air from nearby turfs - var/list/total_gases = total.gases - - for(var/T in atmos_adjacent_turfs) - var/turf/open/S = T - if(!S.air) - continue - var/list/S_gases = S.air.gases - for(var/id in S_gases) - ASSERT_GAS(id, total) - total_gases[id][MOLES] += S_gases[id][MOLES] - total.temperature += S.air.temperature - - air.copy_from(total) - - var/list/air_gases = air.gases - for(var/id in air_gases) - air_gases[id][MOLES] /= turf_count //Averages contents of the turfs, ignoring walls and the like - - air.temperature /= turf_count - SSair.add_to_active(src) - -/turf/proc/ReplaceWithLattice() - ChangeTurf(baseturf) - new /obj/structure/lattice(locate(x, y, z)) - /turf/proc/phase_damage_creatures(damage,mob/U = null)//>Ninja Code. Hurts and knocks out creatures on this turf //NINJACODE for(var/mob/living/M in src) if(M==U) @@ -361,7 +305,7 @@ continue if(O.invisibility == INVISIBILITY_MAXIMUM) O.singularity_act() - ChangeTurf(src.baseturf) + ScrapeAway() return(2) /turf/proc/can_have_cabling() @@ -437,21 +381,6 @@ if(!SSticker.HasRoundStarted()) add_blueprints(AM) -/turf/proc/empty(turf_type=/turf/open/space, baseturf_type, list/ignore_typecache, forceop = FALSE) - // Remove all atoms except observers, landmarks, docking ports - var/static/list/ignored_atoms = typecacheof(list(/mob/dead, /obj/effect/landmark, /obj/docking_port, /atom/movable/lighting_object)) - var/list/allowed_contents = typecache_filter_list_reverse(GetAllContentsIgnoring(ignore_typecache), ignored_atoms) - allowed_contents -= src - for(var/i in 1 to allowed_contents.len) - var/thing = allowed_contents[i] - qdel(thing, force=TRUE) - - var/turf/newT = ChangeTurf(turf_type, baseturf_type, FALSE, FALSE, forceop) - - SSair.remove_from_active(newT) - newT.CalculateAdjacentTurfs() - SSair.add_to_active(newT,1) - /turf/proc/is_transition_turf() return @@ -473,33 +402,9 @@ if(!has_acid_effect) new acid_type(src, acidpwr, acid_volume) - /turf/proc/acid_melt() return - -/turf/proc/copyTurf(turf/T) - if(T.type != type) - var/obj/O - if(underlays.len) //we have underlays, which implies some sort of transparency, so we want to a snapshot of the previous turf as an underlay - O = new() - O.underlays.Add(T) - T.ChangeTurf(type) - for(var/group in decals) - T.add_decal(decals[group],group) - if(underlays.len) - T.underlays = O.underlays - if(T.icon_state != icon_state) - T.icon_state = icon_state - if(T.icon != icon) - T.icon = icon - if(color) - T.atom_colours = atom_colours.Copy() - T.update_atom_colour() - if(T.dir != dir) - T.setDir(dir) - return T - /turf/handle_fall(mob/faller, forced) faller.lying = pick(90, 270) if(!forced) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 8f13d887aa..b26453b461 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -523,7 +523,7 @@ Traitors and the like can also be revived with the previous role mostly intact. SSblackbox.record_feedback("tally", "admin_verb", 1, "Delete") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! if(isturf(D)) var/turf/T = D - T.ChangeTurf(T.baseturf) + T.ScrapeAway() else qdel(D) diff --git a/code/modules/atmospherics/environmental/LINDA_fire.dm b/code/modules/atmospherics/environmental/LINDA_fire.dm index d0c0979366..67e0381571 100644 --- a/code/modules/atmospherics/environmental/LINDA_fire.dm +++ b/code/modules/atmospherics/environmental/LINDA_fire.dm @@ -168,7 +168,7 @@ else chance_of_deletion = 100 if(prob(chance_of_deletion)) - T.ChangeTurf(T.baseturf) + T.ScrapeAway() else T.to_be_destroyed = FALSE T.max_fire_temperature_sustained = 0 diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index a4d3986020..13e2264b29 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -13,11 +13,15 @@ . = ..() var/area/thearea = get_area(src) for(var/turf/T in get_area_turfs(thearea, z)) - if(T.baseturf != T.type) //Don't break indestructible walls and the like - T.baseturf = baseturf + if(T.baseturfs != T.type) //Don't break indestructible walls and the like + T.baseturfs = baseturf return INITIALIZE_HINT_QDEL +/obj/effect/baseturf_helper/space + name = "space baseturf editor" + baseturf = /turf/open/space + /obj/effect/baseturf_helper/asteroid name = "asteroid baseturf editor" baseturf = /turf/open/floor/plating/asteroid diff --git a/code/modules/mapping/reader.dm b/code/modules/mapping/reader.dm index 559a93b87f..e73782edbc 100644 --- a/code/modules/mapping/reader.dm +++ b/code/modules/mapping/reader.dm @@ -339,7 +339,7 @@ GLOBAL_DATUM_INIT(_preloader, /dmm_suite/preloader, new) if(crds) if(!no_changeturf && ispath(path, /turf)) - . = crds.ChangeTurf(path, FALSE, TRUE) + . = crds.ChangeTurf(path, null, CHANGETURF_DEFER_CHANGE) else . = create_atom(path, crds)//first preloader pass diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm index 707d77e2ac..2d1b7d1fe5 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -321,9 +321,9 @@ sleep(50) if(mode == BOT_REPAIRING && src.loc == target_turf) if(autotile) //Build the floor and include a tile. - target_turf.ChangeTurf(/turf/open/floor/plasteel) + target_turf.PlaceOnTop(/turf/open/floor/plasteel) else //Build a hull plating without a floor tile. - target_turf.ChangeTurf(/turf/open/floor/plating) + target_turf.PlaceOnTop(/turf/open/floor/plating) else var/turf/open/floor/F = target_turf diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/necropolis_tendril.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/necropolis_tendril.dm index 923c34fef2..f03cc476fc 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/necropolis_tendril.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/necropolis_tendril.dm @@ -39,7 +39,7 @@ for(var/F in RANGE_TURFS(1, src)) if(ismineralturf(F)) var/turf/closed/mineral/M = F - M.ChangeTurf(M.turf_type,FALSE,FALSE,TRUE) + M.ChangeTurf(M.turf_type, null, CHANGETURF_IGNORE_AIR) gps = new /obj/item/device/gps/internal(src) /mob/living/simple_animal/hostile/spawner/lavaland/Destroy() diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm index b41d61be84..526a2602b6 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm @@ -51,7 +51,7 @@ if(isplatingturf(T)) var/turf/open/floor/plating/F = T if(prob(10 + F.burnt + 5*F.broken)) //broken or burnt plating is more susceptible to being destroyed - F.ChangeTurf(F.baseturf) + F.ScrapeAway() if(isfloorturf(T)) var/turf/open/floor/F = T if(prob(reac_volume)) @@ -65,7 +65,7 @@ if(iswallturf(T)) var/turf/closed/wall/W = T if(prob(reac_volume)) - W.ChangeTurf(/turf/open/floor/plating) + W.ScrapeAway() /datum/reagent/clf3/reaction_mob(mob/living/M, method=TOUCH, reac_volume) if(istype(M)) diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm index c7a77f9457..8f6f002a88 100644 --- a/code/modules/shuttle/on_move.dm +++ b/code/modules/shuttle/on_move.dm @@ -7,8 +7,15 @@ All ShuttleMove procs go here // Called on every turf in the shuttle region, returns a bitflag for allowed movements of that turf // returns the new move_mode (based on the old) /turf/proc/fromShuttleMove(turf/newT, turf_type, list/baseturf_cache, move_mode) - if(!(move_mode & MOVE_AREA) || (istype(src, turf_type) && baseturf_cache[baseturf])) + if(!(move_mode & MOVE_AREA)) return move_mode + if(istype(src, turf_type)) + if(length(baseturfs)) + if(baseturf_cache[baseturfs[1]]) + return move_mode + else if(baseturf_cache[baseturfs]) + return move_mode + return move_mode | MOVE_TURF | MOVE_CONTENTS // Called from the new turf before anything has been moved @@ -45,9 +52,7 @@ All ShuttleMove procs go here if(newT == src) // In case of in place shuttle rotation shenanigans. return //Destination turf changes - var/destination_turf_type = newT.type - newT = copyTurf(newT) - newT.baseturf = destination_turf_type + newT.CopyOnTop(src, 1, 0) // We only want a surface copy //Air stuff newT.blocks_air = TRUE newT.air_update_turf(TRUE) @@ -63,9 +68,8 @@ All ShuttleMove procs go here /turf/proc/afterShuttleMove(turf/oldT, turf_type, baseturf_type, rotation) //Dealing with the turf we left behind oldT.TransferComponents(src) - oldT.ChangeTurf(turf_type, baseturf_type, FALSE, TRUE) + oldT.ChangeTurf(turf_type, baseturf_type, CHANGETURF_IGNORE_AIR) // TODO: make this oldT.ScrapeAway() which requires templating all shuttles - // Rotate and let the air move again if(rotation) shuttleRotate(rotation) //see shuttle_rotate.dm diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 3811fa0e4a..7cb8bbd480 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -465,7 +465,7 @@ var/turf/T1 = L1[i] if(!T1) continue - if(T0.type != T0.baseturf) + if(T0.type != T0.baseturfs) ripple_turfs += T1 return ripple_turfs diff --git a/tgstation.dme b/tgstation.dme index 4b6ba31e8b..9502ead26d 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -85,6 +85,7 @@ #include "code\__DEFINES\tgui.dm" #include "code\__DEFINES\time.dm" #include "code\__DEFINES\tools.dm" +#include "code\__DEFINES\turf_flags.dm" #include "code\__DEFINES\typeids.dm" #include "code\__DEFINES\voreconstants.dm" #include "code\__DEFINES\vv.dm" @@ -1117,6 +1118,7 @@ #include "code\game\objects\structures\transit_tubes\transit_tube.dm" #include "code\game\objects\structures\transit_tubes\transit_tube_construction.dm" #include "code\game\objects\structures\transit_tubes\transit_tube_pod.dm" +#include "code\game\turfs\ChangeTurf.dm" #include "code\game\turfs\closed.dm" #include "code\game\turfs\open.dm" #include "code\game\turfs\turf.dm" From 9ece43116d0fd2f19237c2e127f0dcc16c9c77e5 Mon Sep 17 00:00:00 2001 From: Emmett Gaines Date: Mon, 25 Dec 2017 20:15:54 -0500 Subject: [PATCH 012/104] Makes cyclelinkeddir rotate with shuttle --- code/modules/shuttle/shuttle_rotate.dm | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/code/modules/shuttle/shuttle_rotate.dm b/code/modules/shuttle/shuttle_rotate.dm index 49c7396dba..bd86f84356 100644 --- a/code/modules/shuttle/shuttle_rotate.dm +++ b/code/modules/shuttle/shuttle_rotate.dm @@ -104,4 +104,14 @@ If ever any of these procs are useful for non-shuttles, rename it to proc/rotate //prevents shuttles attempting to rotate this since it messes up sprites /obj/machinery/gravity_generator/shuttleRotate(rotation, params) params = NONE - return ..() \ No newline at end of file +<<<<<<< HEAD + return ..() +======= + return ..() + +/obj/machinery/door/airlock/shuttleRotate(rotation, params) + . = ..() + if(cyclelinkeddir) + cyclelinkeddir = angle2dir(rotation+dir2angle(cyclelinkeddir)) + cyclelinkairlock() +>>>>>>> 6da0107... Makes cyclelinkeddir rotate with shuttle (#33734) From 1281bc24e9587280a6c4ce7adc7ccb18ce49d052 Mon Sep 17 00:00:00 2001 From: Leo Date: Tue, 26 Dec 2017 17:32:43 -0200 Subject: [PATCH 013/104] Adds coordinates to href logs --- code/modules/client/client_procs.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 4c5d8e7a4c..c5385b2abb 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -75,7 +75,12 @@ //Logs all hrefs, except chat pings if(!(href_list["_src_"] == "chat" && href_list["proc"] == "ping" && LAZYLEN(href_list) == 2)) +<<<<<<< HEAD WRITE_FILE(GLOB.world_href_log, "[time_stamp(show_ds = TRUE)] [src] (usr:[usr]) || [hsrc ? "[hsrc] " : ""][href]
") +======= + WRITE_FILE(GLOB.world_href_log, "[time_stamp(show_ds = TRUE)] [src] (usr:[usr]\[[COORD(usr)]\]) || [hsrc ? "[hsrc] " : ""][href]
") + +>>>>>>> 0687e88... Merge pull request #33835 from kevinz000/patch-415 // Admin PM if(href_list["priv_msg"]) cmd_admin_pm(href_list["priv_msg"],null) From 269208f6871ca360651086d111a25876d1e43952 Mon Sep 17 00:00:00 2001 From: oranges Date: Thu, 28 Dec 2017 10:18:11 +1300 Subject: [PATCH 014/104] [READY]Component Forensics and Item Blood OverlayS! --- code/__DEFINES/cleaning.dm | 7 +- code/__DEFINES/components.dm | 7 + code/__DEFINES/forensics.dm | 2 + code/datums/components/cleaning.dm | 16 +- code/datums/components/decal.dm | 22 +-- code/datums/components/decals/blood.dm | 35 ++++ code/datums/components/forensics.dm | 158 ++++++++++++++++++ code/game/atoms.dm | 128 +++----------- .../gamemodes/devil/true_devil/_true_devil.dm | 5 +- code/game/gamemodes/wizard/artefact.dm | 21 ++- .../game/machinery/computer/buildandrepair.dm | 2 +- code/game/machinery/pipe/pipe_dispenser.dm | 3 - code/game/machinery/suit_storage_unit.dm | 3 +- code/game/machinery/washing_machine.dm | 15 +- code/game/objects/effects/decals/cleanable.dm | 5 +- .../effects/decals/cleanable/aliens.dm | 10 +- .../effects/decals/cleanable/humans.dm | 18 +- .../objects/effects/spawners/gibspawner.dm | 4 +- code/game/objects/items.dm | 14 -- code/game/objects/items/clown_items.dm | 2 +- .../objects/items/devices/radio/intercom.dm | 4 +- code/game/objects/items/melee/energy.dm | 4 +- code/game/objects/items/melee/misc.dm | 4 +- code/game/objects/items/mop.dm | 1 - code/game/objects/items/stacks/stack.dm | 8 +- code/game/objects/items/storage/book.dm | 2 +- code/game/objects/items/twohanded.dm | 2 +- code/game/objects/structures/watercloset.dm | 15 +- code/game/turfs/open.dm | 2 +- code/modules/clothing/gloves/_gloves.dm | 10 +- code/modules/clothing/head/_head.dm | 2 +- code/modules/clothing/masks/_masks.dm | 2 +- code/modules/clothing/neck/_neck.dm | 2 +- code/modules/clothing/shoes/_shoes.dm | 17 +- code/modules/clothing/suits/_suits.dm | 2 +- code/modules/clothing/under/_under.dm | 3 +- code/modules/detectivework/detective_work.dm | 105 ++++++++++++ code/modules/detectivework/evidence.dm | 2 +- .../detectivework/footprints_and_rag.dm | 3 +- code/modules/detectivework/scanner.dm | 22 +-- .../integrated_electronics/core/printer.dm | 1 + code/modules/mob/living/blood.dm | 7 +- code/modules/mob/living/carbon/examine.dm | 13 +- .../mob/living/carbon/human/examine.dm | 68 ++------ code/modules/mob/living/carbon/human/human.dm | 20 +-- .../mob/living/carbon/human/human_movement.dm | 3 +- .../mob/living/carbon/human/update_icons.dm | 3 +- .../mob/living/simple_animal/bot/mulebot.dm | 6 +- .../simple_animal/friendly/drone/_drone.dm | 15 +- .../simple_animal/guardian/types/dextrous.dm | 11 +- .../mob/living/simple_animal/hostile/alien.dm | 2 +- code/modules/ninja/suit/gloves.dm | 16 +- code/modules/power/cable.dm | 4 +- code/modules/projectiles/guns/ballistic.dm | 2 +- .../chemistry/reagents/other_reagents.dm | 21 ++- code/modules/shuttle/computer.dm | 1 + tgstation.dme | 3 + 57 files changed, 523 insertions(+), 362 deletions(-) create mode 100644 code/__DEFINES/forensics.dm create mode 100644 code/datums/components/decals/blood.dm create mode 100644 code/datums/components/forensics.dm diff --git a/code/__DEFINES/cleaning.dm b/code/__DEFINES/cleaning.dm index 9f32992eb0..eed0ee5f54 100644 --- a/code/__DEFINES/cleaning.dm +++ b/code/__DEFINES/cleaning.dm @@ -4,4 +4,9 @@ #define CLEAN_MEDIUM 3 // Acceptable tools #define CLEAN_STRONG 4 // Industrial strength #define CLEAN_IMPRESSIVE 5 // Cleaning strong enough your granny would be proud -#define CLEAN_GOD 6 // Cleans things spotless down to the atomic structure \ No newline at end of file +#define CLEAN_GOD 6 // Cleans things spotless down to the atomic structure + +//How strong things have to be to wipe forensic evidence... +#define CLEAN_STRENGTH_FINGERPRINTS CLEAN_IMPRESSIVE +#define CLEAN_STRENGTH_BLOOD CLEAN_WEAK +#define CLEAN_STRENGTH_FIBERS CLEAN_IMPRESSIVE diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm index 78ade5c650..7eebdff142 100644 --- a/code/__DEFINES/components.dm +++ b/code/__DEFINES/components.dm @@ -27,6 +27,13 @@ #define COMPONENT_NO_AFTERATTACK 1 //Return this in response if you don't want afterattack to be called #define COMSIG_ATOM_HULK_ATTACK "hulk_attack" //from base of atom/attack_hulk(): (/mob/living/carbon/human) #define COMSIG_PARENT_EXAMINE "atom_examine" //from base of atom/examine(): (/mob) +#define COMSIG_ATOM_GET_EXAMINE_NAME "atom_examine_name" //from base of atom/get_examine_name(): (/mob, list/overrides) + //Positions for overrides list + #define EXAMINE_POSITION_ARTICLE 1 + #define EXAMINE_POSITION_BEFORE 2 + #define EXAMINE_POSITION_NAME 3 + //End positions + #define COMPONENT_EXNAME_CHANGED 1 #define COMSIG_ATOM_ENTERED "atom_entered" //from base of atom/Entered(): (/atom/movable, /atom) #define COMSIG_ATOM_EX_ACT "atom_ex_act" //from base of atom/ex_act(): (severity, target) #define COMSIG_ATOM_EMP_ACT "atom_emp_act" //from base of atom/emp_act(): (severity) diff --git a/code/__DEFINES/forensics.dm b/code/__DEFINES/forensics.dm new file mode 100644 index 0000000000..bb512edcde --- /dev/null +++ b/code/__DEFINES/forensics.dm @@ -0,0 +1,2 @@ +#define IF_HAS_BLOOD_DNA(__thing) GET_COMPONENT_FROM(__FR##__thing, /datum/component/forensics, __thing); if(__FR##__thing && length(__FR##__thing.blood_DNA)) +#define IF_HAS_BLOOD_DNA_AND(__thing, __conditions...) GET_COMPONENT_FROM(__FR##__thing, /datum/component/forensics, __thing); if(__FR##__thing && length(__FR##__thing.blood_DNA) && (##__conditions)) diff --git a/code/datums/components/cleaning.dm b/code/datums/components/cleaning.dm index 5d9d5992e2..cb91d3c513 100644 --- a/code/datums/components/cleaning.dm +++ b/code/datums/components/cleaning.dm @@ -13,28 +13,28 @@ if(!isturf(tile)) return - tile.clean_blood() + tile.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) for(var/A in tile) if(is_cleanable(A)) qdel(A) else if(istype(A, /obj/item)) - var/obj/item/cleaned_item = A - cleaned_item.clean_blood() + var/obj/item/I = A + I.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) else if(ishuman(A)) var/mob/living/carbon/human/cleaned_human = A if(cleaned_human.lying) if(cleaned_human.head) - cleaned_human.head.clean_blood() + cleaned_human.head.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) cleaned_human.update_inv_head() if(cleaned_human.wear_suit) - cleaned_human.wear_suit.clean_blood() + cleaned_human.wear_suit.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) cleaned_human.update_inv_wear_suit() else if(cleaned_human.w_uniform) - cleaned_human.w_uniform.clean_blood() + cleaned_human.w_uniform.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) cleaned_human.update_inv_w_uniform() if(cleaned_human.shoes) - cleaned_human.shoes.clean_blood() + cleaned_human.shoes.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) cleaned_human.update_inv_shoes() - cleaned_human.clean_blood() + cleaned_human.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) cleaned_human.wash_cream() to_chat(cleaned_human, "[AM] cleans your face!") diff --git a/code/datums/components/decal.dm b/code/datums/components/decal.dm index a79de32898..53faa27f39 100644 --- a/code/datums/components/decal.dm +++ b/code/datums/components/decal.dm @@ -6,19 +6,11 @@ var/mutable_appearance/pic /datum/component/decal/Initialize(_icon, _icon_state, _dir, _cleanable=CLEAN_GOD, _color, _layer=TURF_LAYER, _description) - if(!isatom(parent) || !_icon || !_icon_state) + if(!isatom(parent) || !generate_appearance(_icon, _icon_state, _dir, _layer, _color)) . = COMPONENT_INCOMPATIBLE CRASH("A turf decal was applied incorrectly to [parent.type]: icon:[_icon ? _icon : "none"] icon_state:[_icon_state ? _icon_state : "none"]") - - // It has to be made from an image or dir breaks because of a byond bug - var/temp_image = image(_icon, null, _icon_state, _layer, _dir) - pic = new(temp_image) - pic.color = _color - - cleanable = _cleanable description = _description - - apply() + cleanable = _cleanable if(_dir) // If no dir is assigned at start then it follows the atom's dir RegisterSignal(COMSIG_ATOM_DIR_CHANGE, .proc/rotate_react) @@ -26,6 +18,7 @@ RegisterSignal(COMSIG_COMPONENT_CLEAN_ACT, .proc/clean_react) if(_description) RegisterSignal(COMSIG_PARENT_EXAMINE, .proc/examine) + apply() /datum/component/decal/Destroy() remove() @@ -36,6 +29,15 @@ remove(thing) apply(thing) +/datum/component/decal/proc/generate_appearance(_icon, _icon_state, _dir, _layer, _color) + if(!_icon || !_icon_state) + return FALSE + // It has to be made from an image or dir breaks because of a byond bug + var/temp_image = image(_icon, null, _icon_state, _layer, _dir) + pic = new(temp_image) + pic.color = _color + return TRUE + /datum/component/decal/proc/apply(atom/thing) var/atom/master = thing || parent master.add_overlay(pic, TRUE) diff --git a/code/datums/components/decals/blood.dm b/code/datums/components/decals/blood.dm new file mode 100644 index 0000000000..f2dc9a48d0 --- /dev/null +++ b/code/datums/components/decals/blood.dm @@ -0,0 +1,35 @@ +/datum/component/decal/blood + dupe_mode = COMPONENT_DUPE_UNIQUE + +/datum/component/decal/blood/Initialize(_icon, _icon_state, _dir, _cleanable=CLEAN_STRENGTH_BLOOD, _color, _layer=ABOVE_OBJ_LAYER) + if(!isitem(parent)) + . = COMPONENT_INCOMPATIBLE + CRASH("Warning: Blood decal attempted to be added to non-item of type [parent.type]") + . = ..() + RegisterSignal(COMSIG_ATOM_GET_EXAMINE_NAME, .proc/get_examine_name) + +/datum/component/decal/blood/generate_appearance(_icon, _icon_state, _dir, _layer, _color) + var/obj/item/I = parent + if(!_icon) + _icon = 'icons/effects/blood.dmi' + if(!_icon_state) + _icon_state = "itemblood" + if(!initial(I.icon) || !initial(I.icon_state)) + return FALSE + var/static/list/blood_splatter_appearances = list() + //try to find a pre-processed blood-splatter. otherwise, make a new one + var/index = "[REF(initial(I.icon))]-[initial(I.icon_state)]" + pic = blood_splatter_appearances[index] + if(!pic) + var/icon/blood_splatter_icon = icon(initial(I.icon), initial(I.icon_state), , 1) //we only want to apply blood-splatters to the initial icon_state for each object + blood_splatter_icon.Blend("#fff", ICON_ADD) //fills the icon_state with white (except where it's transparent) + blood_splatter_icon.Blend(icon(_icon, _icon_state), ICON_MULTIPLY) //adds blood and the remaining white areas become transparant + pic = mutable_appearance(blood_splatter_icon, initial(I.icon_state), I.layer) + blood_splatter_appearances[index] = pic + return TRUE + +/datum/component/decal/blood/proc/get_examine_name(mob/user, list/override) + var/atom/A = parent + override[EXAMINE_POSITION_ARTICLE] = A.gender == PLURAL? "some" : "a" + override[EXAMINE_POSITION_BEFORE] = " blood-stained " + return COMPONENT_EXNAME_CHANGED diff --git a/code/datums/components/forensics.dm b/code/datums/components/forensics.dm new file mode 100644 index 0000000000..55633a2087 --- /dev/null +++ b/code/datums/components/forensics.dm @@ -0,0 +1,158 @@ +/datum/component/forensics + var/list/fingerprints //assoc print = print + var/list/hiddenprints //assoc ckey = realname/gloves/ckey + var/list/blood_DNA //assoc dna = bloodtype + var/list/fibers //assoc print = print + +/datum/component/forensics/InheritComponent(datum/component/forensics/F, original) //Use of | and |= being different here is INTENTIONAL. + fingerprints = fingerprints | F.fingerprints + hiddenprints = hiddenprints | F.hiddenprints + blood_DNA = blood_DNA | F.blood_DNA + fibers = fibers | F.fibers + check_blood() + return ..() + +/datum/component/forensics/Initialize(new_fingerprints, new_hiddenprints, new_blood_DNA, new_fibers) + if(!isatom(parent)) + . = COMPONENT_INCOMPATIBLE + CRASH("Forensics datum applied incorrectly to non-atom of type [parent.type]!") + fingerprints = new_fingerprints + hiddenprints = new_hiddenprints + blood_DNA = new_blood_DNA + fibers = new_fibers + check_blood() + RegisterSignal(COMSIG_COMPONENT_CLEAN_ACT, .proc/clean_act) + +/datum/component/forensics/proc/wipe_fingerprints() + fingerprints = null + return TRUE + +/datum/component/forensics/proc/wipe_hiddenprints() + return //no. + +/datum/component/forensics/proc/wipe_blood_DNA() + blood_DNA = null + if(isitem(parent)) + qdel(parent.GetComponent(/datum/component/decal/blood)) + return TRUE + +/datum/component/forensics/proc/wipe_fibers() + fibers = null + return TRUE + +/datum/component/forensics/proc/clean_act(strength) + if(strength >= CLEAN_STRENGTH_FINGERPRINTS) + wipe_fingerprints() + if(strength >= CLEAN_STRENGTH_BLOOD) + wipe_blood_DNA() + if(strength >= CLEAN_STRENGTH_FIBERS) + wipe_fibers() + +/datum/component/forensics/proc/add_fingerprint_list(list/_fingerprints) //list(text) + if(!length(_fingerprints)) + return + LAZYINITLIST(fingerprints) + for(var/i in _fingerprints) //We use an associative list, make sure we don't just merge a non-associative list into ours. + fingerprints[i] = i + return TRUE + +/datum/component/forensics/proc/add_fingerprint(mob/living/M, ignoregloves = FALSE) + if(!M) + return + add_hiddenprint(M) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + add_fibers(H) + if(H.gloves) //Check if the gloves (if any) hide fingerprints + var/obj/item/clothing/gloves/G = H.gloves + if(G.transfer_prints) + ignoregloves = TRUE + if(!ignoregloves) + H.gloves.add_fingerprint(H, TRUE) //ignoregloves = 1 to avoid infinite loop. + return + var/full_print = md5(H.dna.uni_identity) + LAZYSET(fingerprints, full_print, full_print) + return TRUE + +/datum/component/forensics/proc/add_fiber_list(list/_fibertext) //list(text) + if(!length(_fibertext)) + return + LAZYINITLIST(fibers) + for(var/i in _fibertext) //We use an associative list, make sure we don't just merge a non-associative list into ours. + fibers[i] = i + return TRUE + +/datum/component/forensics/proc/add_fibers(mob/living/carbon/human/M) + var/fibertext + var/item_multiplier = isitem(src)?1.2:1 + if(M.wear_suit) + fibertext = "Material from \a [M.wear_suit]." + if(prob(10*item_multiplier) && !LAZYACCESS(fibers, fibertext)) + LAZYSET(fibers, fibertext, fibertext) + if(!(M.wear_suit.body_parts_covered & CHEST)) + if(M.w_uniform) + fibertext = "Fibers from \a [M.w_uniform]." + if(prob(12*item_multiplier) && !LAZYACCESS(fibers, fibertext)) //Wearing a suit means less of the uniform exposed. + LAZYSET(fibers, fibertext, fibertext) + if(!(M.wear_suit.body_parts_covered & HANDS)) + if(M.gloves) + fibertext = "Material from a pair of [M.gloves.name]." + if(prob(20*item_multiplier) && !LAZYACCESS(fibers, fibertext)) + LAZYSET(fibers, fibertext, fibertext) + else if(M.w_uniform) + fibertext = "Fibers from \a [M.w_uniform]." + if(prob(15*item_multiplier) && !LAZYACCESS(fibers, fibertext)) + // "Added fibertext: [fibertext]" + LAZYSET(fibers, fibertext, fibertext) + if(M.gloves) + fibertext = "Material from a pair of [M.gloves.name]." + if(prob(20*item_multiplier) && !LAZYACCESS(fibers, fibertext)) + LAZYSET(fibers, fibertext, fibertext) + else if(M.gloves) + fibertext = "Material from a pair of [M.gloves.name]." + if(prob(20*item_multiplier) && !LAZYACCESS(fibers, fibertext)) + LAZYSET(fibers, fibertext, fibertext) + return TRUE + +/datum/component/forensics/proc/add_hiddenprint_list(list/_hiddenprints) //list(ckey = text) + if(!length(_hiddenprints)) + return + LAZYINITLIST(hiddenprints) + for(var/i in _hiddenprints) //We use an associative list, make sure we don't just merge a non-associative list into ours. + hiddenprints[i] = _hiddenprints[i] + return TRUE + +/datum/component/forensics/proc/add_hiddenprint(mob/living/M) + if(!M || !M.key) + return + var/hasgloves = "" + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.gloves) + hasgloves = "(gloves)" + var/current_time = time_stamp() + if(!LAZYACCESS(hiddenprints, M.key)) + LAZYSET(hiddenprints, M.key, "First: [M.real_name]\[[current_time]\][hasgloves]. Ckey: [M.ckey]") + else + var/laststamppos = findtext(LAZYACCESS(hiddenprints, M.key), " Last: ") + if(laststamppos) + LAZYSET(hiddenprints, M.key, copytext(hiddenprints[M.key], 1, laststamppos)) + hiddenprints[M.key] += " Last: [M.real_name]\[[current_time]\][hasgloves]. Ckey: [M.ckey]" //made sure to be existing by if(!LAZYACCESS);else + fingerprintslast = M.ckey + return TRUE + +/datum/component/forensics/proc/add_blood_DNA(list/dna) //list(dna_enzymes = type) + if(!length(dna)) + return + LAZYINITLIST(blood_DNA) + for(var/i in dna) + blood_DNA[i] = dna[i] + check_blood() + return TRUE + +/datum/component/forensics/proc/check_blood() + if(!isitem(parent)) + return + if(!length(blood_DNA)) + return + parent.LoadComponent(/datum/component/decal/blood) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 211f9dea59..67e5697916 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -5,10 +5,6 @@ var/flags_1 = 0 var/flags_2 = 0 - - var/list/fingerprints - var/list/fingerprintshidden - var/list/blood_DNA var/container_type = NONE var/admin_spawned = 0 //was this spawned by an admin? used for stat tracking stuff. var/datum/reagents/reagents = null @@ -232,21 +228,22 @@ /atom/proc/in_contents_of(container)//can take class or object instance as argument if(ispath(container)) if(istype(src.loc, container)) - return 1 + return TRUE else if(src in container) - return 1 + return TRUE + return FALSE + +/atom/proc/get_examine_name(mob/user) + . = "\a [src]" + var/list/override = list(gender == PLURAL? "some" : "a" , " ", "[name]") + if(SendSignal(COMSIG_ATOM_GET_EXAMINE_NAME, user, override) & COMPONENT_EXNAME_CHANGED) + . = override.Join("") + +/atom/proc/get_examine_string(mob/user, thats = FALSE) + . = "[icon2html(src, user)] [thats? "That's ":""][get_examine_name(user)]" /atom/proc/examine(mob/user) - //This reformat names to get a/an properly working on item descriptions when they are bloody - var/f_name = "\a [src]." - if(src.blood_DNA && !istype(src, /obj/effect/decal)) - if(gender == PLURAL) - f_name = "some " - else - f_name = "a " - f_name += "blood-stained [name]!" - - to_chat(user, "[icon2html(src, user)] That's [f_name]") + to_chat(user, get_examine_string(user, TRUE)) if(desc) to_chat(user, desc) @@ -303,11 +300,6 @@ if(AM && isturf(AM.loc)) step(AM, turn(AM.dir, 180)) -GLOBAL_LIST_EMPTY(blood_splatter_icons) - -/atom/proc/blood_splatter_index() - return "[REF(initial(icon))]-[initial(icon_state)]" - //returns the mob's dna info as a list, to be inserted in an object's blood_DNA list /mob/living/proc/get_blood_dna_list() if(get_blood_id() != "blood") @@ -332,100 +324,28 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons) // Returns 0 if we have that blood already var/new_blood_dna = L.get_blood_dna_list() if(!new_blood_dna) - return 0 - if(!blood_DNA) //if our list of DNA doesn't exist yet, initialise it. - blood_DNA = list() - var/old_length = blood_DNA.len - blood_DNA |= new_blood_dna - if(blood_DNA.len == old_length) - return 0 - return 1 - -//to add blood dna info to the object's blood_DNA list -/atom/proc/transfer_blood_dna(list/blood_dna) - if(!blood_DNA) - blood_DNA = list() - var/old_length = blood_DNA.len - blood_DNA |= blood_dna - if(blood_DNA.len > old_length) - return 1//some new blood DNA was added - + return FALSE + var/old_length = blood_DNA_length() + add_blood_DNA(new_blood_dna) + if(blood_DNA_length() == old_length) + return FALSE + return TRUE //to add blood from a mob onto something, and transfer their dna info /atom/proc/add_mob_blood(mob/living/M) var/list/blood_dna = M.get_blood_dna_list() if(!blood_dna) - return 0 - return add_blood(blood_dna) - -//to add blood onto something, with blood dna info to include. -/atom/proc/add_blood(list/blood_dna) - return 0 - -/obj/add_blood(list/blood_dna) - return transfer_blood_dna(blood_dna) - -/obj/item/add_blood(list/blood_dna) - var/blood_count = !blood_DNA ? 0 : blood_DNA.len - if(!..()) - return 0 - if(!blood_count)//apply the blood-splatter overlay if it isn't already in there - add_blood_overlay() - return 1 //we applied blood to the item - -/obj/item/proc/add_blood_overlay() - if(initial(icon) && initial(icon_state)) - //try to find a pre-processed blood-splatter. otherwise, make a new one - var/index = blood_splatter_index() - var/icon/blood_splatter_icon = GLOB.blood_splatter_icons[index] - if(!blood_splatter_icon) - blood_splatter_icon = icon(initial(icon), initial(icon_state), , 1) //we only want to apply blood-splatters to the initial icon_state for each object - blood_splatter_icon.Blend("#fff", ICON_ADD) //fills the icon_state with white (except where it's transparent) - blood_splatter_icon.Blend(icon('icons/effects/blood.dmi', "itemblood"), ICON_MULTIPLY) //adds blood and the remaining white areas become transparant - blood_splatter_icon = fcopy_rsc(blood_splatter_icon) - GLOB.blood_splatter_icons[index] = blood_splatter_icon - add_overlay(blood_splatter_icon) - -/obj/item/clothing/gloves/add_blood(list/blood_dna) - . = ..() - transfer_blood = rand(2, 4) - -/turf/add_blood(list/blood_dna, list/datum/disease/diseases) - var/obj/effect/decal/cleanable/blood/splatter/B = locate() in src - if(!B) - B = new /obj/effect/decal/cleanable/blood/splatter(src, diseases) - B.transfer_blood_dna(blood_dna) //give blood info to the blood decal. - return 1 //we bloodied the floor - -/mob/living/carbon/human/add_blood(list/blood_dna) - if(wear_suit) - wear_suit.add_blood(blood_dna) - update_inv_wear_suit() - else if(w_uniform) - w_uniform.add_blood(blood_dna) - update_inv_w_uniform() - if(gloves) - var/obj/item/clothing/gloves/G = gloves - G.add_blood(blood_dna) - else - transfer_blood_dna(blood_dna) - bloody_hands = rand(2, 4) - update_inv_gloves() //handles bloody hands overlays and updating - return 1 - -/atom/proc/clean_blood() - if(islist(blood_DNA)) - blood_DNA = null - return 1 + return FALSE + return add_blood_DNA(blood_dna) /atom/proc/wash_cream() - return 1 + return TRUE /atom/proc/isinspace() if(isspaceturf(get_turf(src))) - return 1 + return TRUE else - return 0 + return FALSE /atom/proc/handle_fall() return diff --git a/code/game/gamemodes/devil/true_devil/_true_devil.dm b/code/game/gamemodes/devil/true_devil/_true_devil.dm index 10f0b3393f..c1197a5742 100644 --- a/code/game/gamemodes/devil/true_devil/_true_devil.dm +++ b/code/game/gamemodes/devil/true_devil/_true_devil.dm @@ -67,10 +67,7 @@ //Left hand items for(var/obj/item/I in held_items) if(!(I.flags_1 & ABSTRACT_1)) - if(I.blood_DNA) - msg += "It is holding [icon2html(I, user)] [I.gender==PLURAL?"some":"a"] blood-stained [I.name] in its [get_held_index_name(get_held_index_of_item(I))]!\n" - else - msg += "It is holding [icon2html(I, user)] \a [I] in its [get_held_index_name(get_held_index_of_item(I))].\n" + msg += "It is holding [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))].\n" //Braindead if(!client && stat != DEAD) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 21de0fc2f9..6c662fbc18 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -213,7 +213,7 @@ righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' var/mob/living/carbon/human/target = null var/list/mob/living/carbon/human/possible = list() - var/obj/item/linked_item = null + var/obj/item/voodoo_link = null var/cooldown_time = 30 //3s var/cooldown = 0 max_integrity = 10 @@ -237,10 +237,10 @@ cooldown = world.time +cooldown_time return - if(!linked_item) + if(!voodoo_link) if(I.loc == user && istype(I) && I.w_class <= WEIGHT_CLASS_SMALL) if (user.transferItemToLoc(I,src)) - linked_item = I + voodoo_link = I to_chat(user, "You attach [I] to the doll.") update_targets() @@ -255,11 +255,11 @@ return if(user.zone_selected == "chest") - if(linked_item) + if(voodoo_link) target = null - linked_item.forceMove(drop_location()) - to_chat(user, "You remove the [linked_item] from the doll.") - linked_item = null + voodoo_link.forceMove(drop_location()) + to_chat(user, "You remove the [voodoo_link] from the doll.") + voodoo_link = null update_targets() return @@ -291,10 +291,13 @@ /obj/item/voodoo/proc/update_targets() possible = list() - if(!linked_item) + if(!voodoo_link) return + var/list/prints = voodoo_link.return_fingerprints() + if(!length(prints)) + return FALSE for(var/mob/living/carbon/human/H in GLOB.alive_mob_list) - if(md5(H.dna.uni_identity) in linked_item.fingerprints) + if(prints[md5(H.dna.uni_identity)]) possible |= H /obj/item/voodoo/proc/GiveHint(mob/victim,force=0) diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 7831437dc2..41f093a6d2 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -121,7 +121,7 @@ to_chat(user, "You remove the glass panel.") state = 3 icon_state = "3" - var/obj/item/stack/sheet/glass/G = new (drop_location(), 2) + var/obj/item/stack/sheet/glass/G = new(drop_location(), 2) G.add_fingerprint(user) return if(istype(P, /obj/item/screwdriver)) diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index a67ce24c9c..f3d3933428 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -154,11 +154,8 @@ to_chat(usr, "There's not enough room to build that here!") qdel(C) return - - if(href_list["dir"]) C.setDir(text2num(href_list["dir"])) - C.add_fingerprint(usr) C.update_icon() wait = world.time + 15 diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 53c0b746bd..307107d517 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -236,8 +236,7 @@ visible_message("[src]'s door slides open, barraging you with the nauseating smell of charred flesh.") playsound(src, 'sound/machines/airlockclose.ogg', 25, 1) for(var/obj/item/I in src) //Scorches away blood and forensic evidence, although the SSU itself is unaffected - I.clean_blood() - I.fingerprints = list() + I.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRONG) var/datum/component/radioactive/contamination = I.GetComponent(/datum/component/radioactive) if(contamination) qdel(contamination) diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index f1384c0ea3..b48f14e508 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -12,6 +12,10 @@ var/obj/item/color_source var/max_wash_capacity = 5 +/obj/machinery/washing_machine/ComponentInitialize() + . = ..() + AddComponent(/datum/component/redirect, list(COMSIG_COMPONENT_CLEAN_ACT), CALLBACK(src, .proc/clean_blood)) + /obj/machinery/washing_machine/examine(mob/user) ..() to_chat(user, "Alt-click it to start a wash cycle.") @@ -36,20 +40,17 @@ busy = TRUE update_icon() - sleep(200) - wash_cycle() + addtimer(CALLBACK(src, .proc/wash_cycle), 200) -/obj/machinery/washing_machine/clean_blood() - ..() +/obj/machinery/washing_machine/proc/clean_blood() if(!busy) - bloody_mess = 0 + bloody_mess = FALSE update_icon() - /obj/machinery/washing_machine/proc/wash_cycle() for(var/X in contents) var/atom/movable/AM = X - AM.clean_blood() + AM.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) AM.machine_wash(src) busy = FALSE diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index f06525863d..d6b70604af 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -79,14 +79,11 @@ add_blood = bloodiness bloodiness -= add_blood S.bloody_shoes[blood_state] = min(MAX_SHOE_BLOODINESS,S.bloody_shoes[blood_state]+add_blood) - if(blood_DNA && blood_DNA.len) - S.add_blood(blood_DNA) + S.add_blood_DNA(return_blood_DNA()) S.blood_state = blood_state update_icon() H.update_inv_shoes() - - /obj/effect/decal/cleanable/proc/can_bloodcrawl_in() if((blood_state != BLOOD_STATE_OIL) && (blood_state != BLOOD_STATE_NOT_BLOODY)) return bloodiness diff --git a/code/game/objects/effects/decals/cleanable/aliens.dm b/code/game/objects/effects/decals/cleanable/aliens.dm index 333da7f48a..55d5d32ffc 100644 --- a/code/game/objects/effects/decals/cleanable/aliens.dm +++ b/code/game/objects/effects/decals/cleanable/aliens.dm @@ -6,10 +6,13 @@ icon = 'icons/effects/blood.dmi' icon_state = "xfloor1" random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7") - blood_DNA = list("UNKNOWN DNA" = "X*") bloodiness = MAX_SHOE_BLOODINESS blood_state = BLOOD_STATE_XENO +/obj/effect/decal/cleanable/xenoblood/Initialize() + . = ..() + add_blood_DNA(list("UNKNOWN DNA" = "X*")) + /obj/effect/decal/cleanable/xenoblood/xsplatter random_icon_states = list("xgibbl1", "xgibbl2", "xgibbl3", "xgibbl4", "xgibbl5") @@ -62,4 +65,7 @@ /obj/effect/decal/cleanable/blood/xtracks icon_state = "xtracks" random_icon_states = null - blood_DNA = list("UNKNOWN DNA" = "X*") + +/obj/effect/decal/cleanable/blood/xtracks/Initialize() + . = ..() + add_blood_DNA(list("Unknown DNA" = "X*")) diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm index 42aec1582e..fbcf22fb90 100644 --- a/code/game/objects/effects/decals/cleanable/humans.dm +++ b/code/game/objects/effects/decals/cleanable/humans.dm @@ -4,13 +4,11 @@ icon = 'icons/effects/blood.dmi' icon_state = "floor1" random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7") - blood_DNA = list() blood_state = BLOOD_STATE_HUMAN bloodiness = MAX_SHOE_BLOODINESS /obj/effect/decal/cleanable/blood/replace_decal(obj/effect/decal/cleanable/blood/C) - if (C.blood_DNA) - blood_DNA |= C.blood_DNA.Copy() + add_blood_DNA(C.return_blood_DNA()) ..() /obj/effect/decal/cleanable/blood/old @@ -21,7 +19,7 @@ /obj/effect/decal/cleanable/blood/old/Initialize(mapload, list/datum/disease/diseases) . = ..() icon_state += "-old" //This IS necessary because the parent /blood type uses icon randomization. - blood_DNA["Non-human DNA"] = "A+" + add_blood_DNA(list("Non-human DNA" = "A+")) /obj/effect/decal/cleanable/blood/splatter random_icon_states = list("gibbl1", "gibbl2", "gibbl3", "gibbl4", "gibbl5") @@ -37,11 +35,9 @@ desc = "Your instincts say you shouldn't be following these." random_icon_states = null var/list/existing_dirs = list() - blood_DNA = list() /obj/effect/decal/cleanable/trail_holder/can_bloodcrawl_in() - return 1 - + return TRUE /obj/effect/decal/cleanable/blood/gibs name = "gibs" @@ -100,8 +96,7 @@ . = ..() setDir(pick(1,2,4,8)) icon_state += "-old" - blood_DNA["Non-human DNA"] = "A+" - + add_blood_DNA(list("Non-human DNA" = "A+")) /obj/effect/decal/cleanable/blood/drip name = "drips of blood" @@ -111,9 +106,8 @@ bloodiness = 0 var/drips = 1 - /obj/effect/decal/cleanable/blood/drip/can_bloodcrawl_in() - return 1 + return TRUE //BLOODY FOOTPRINTS @@ -151,7 +145,7 @@ if (!(exited_dirs & H.dir)) exited_dirs |= H.dir update_icon() - + /obj/effect/decal/cleanable/blood/footprints/update_icon() cut_overlays() diff --git a/code/game/objects/effects/spawners/gibspawner.dm b/code/game/objects/effects/spawners/gibspawner.dm index 43f10dc45e..79627a7a80 100644 --- a/code/game/objects/effects/spawners/gibspawner.dm +++ b/code/game/objects/effects/spawners/gibspawner.dm @@ -30,9 +30,9 @@ digester.stomach_contents += gib if(MobDNA) - gib.blood_DNA[MobDNA.unique_enzymes] = MobDNA.blood_type + else if(istype(src, /obj/effect/gibspawner/generic)) // Probably a monkey - gib.blood_DNA["Non-human DNA"] = "A+" + gib.add_blood_DNA(list("Non-human DNA" = "A+")) var/list/directions = gibdirections[i] if(isturf(loc)) if(directions.len) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 1cca673778..2eb573fd4d 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -553,20 +553,6 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) M.become_blind(EYE_DAMAGE) to_chat(M, "You go blind!") -/obj/item/clean_blood() - . = ..() - if(.) - if(initial(icon) && initial(icon_state)) - var/index = blood_splatter_index() - var/icon/blood_splatter_icon = GLOB.blood_splatter_icons[index] - if(blood_splatter_icon) - cut_overlay(blood_splatter_icon) - -/obj/item/clothing/gloves/clean_blood() - . = ..() - if(.) - transfer_blood = 0 - /obj/item/singularity_pull(S, current_size) ..() if(current_size >= STAGE_FOUR) diff --git a/code/game/objects/items/clown_items.dm b/code/game/objects/items/clown_items.dm index f2a804e9e9..e9ccda03ea 100644 --- a/code/game/objects/items/clown_items.dm +++ b/code/game/objects/items/clown_items.dm @@ -86,7 +86,7 @@ var/obj/effect/decal/cleanable/C = locate() in target qdel(C) target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - target.clean_blood() + target.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) target.wash_cream() return diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 3e9ce8c341..9cd0ca5d29 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -139,8 +139,8 @@ else icon_state = initial(icon_state) -/obj/item/device/radio/intercom/add_blood(list/blood_dna) - return 0 +/obj/item/device/radio/intercom/add_blood_DNA(list/blood_dna) + return FALSE //Created through the autolathe or through deconstructing intercoms. Can be applied to wall to make a new intercom on it! /obj/item/wallframe/intercom diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index 6eaf3f08bd..146bcbb3c3 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -20,8 +20,8 @@ user.visible_message("[user] is [pick("slitting [user.p_their()] stomach open with", "falling on")] [src]! It looks like [user.p_theyre()] trying to commit seppuku!") return (BRUTELOSS|FIRELOSS) -/obj/item/melee/transforming/energy/add_blood(list/blood_dna) - return 0 +/obj/item/melee/transforming/energy/add_blood_DNA(list/blood_dna) + return FALSE /obj/item/melee/transforming/energy/is_sharp() return active * sharpness diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 6fb173b905..0ce53157b2 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -284,8 +284,8 @@ T.ChangeTurf(T.baseturf) T.CalculateAdjacentTurfs() -/obj/item/melee/supermatter_sword/add_blood(list/blood_dna) - return 0 +/obj/item/melee/supermatter_sword/add_blood_DNA(list/blood_dna) + return FALSE /obj/item/melee/curator_whip name = "curator's whip" diff --git a/code/game/objects/items/mop.dm b/code/game/objects/items/mop.dm index e47cafdea9..45c687a66f 100644 --- a/code/game/objects/items/mop.dm +++ b/code/game/objects/items/mop.dm @@ -23,7 +23,6 @@ /obj/item/mop/proc/clean(turf/A) if(reagents.has_reagent("water", 1) || reagents.has_reagent("holywater", 1) || reagents.has_reagent("vodka", 1) || reagents.has_reagent("cleaner", 1)) - A.clean_blood() A.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM) for(var/obj/effect/O in A) if(is_cleanable(O)) diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index cef25a0a36..7463c69b4d 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -336,10 +336,10 @@ else . = ..() -/obj/item/stack/proc/copy_evidences(obj/item/stack/from as obj) - blood_DNA = from.blood_DNA - fingerprints = from.fingerprints - fingerprintshidden = from.fingerprintshidden +/obj/item/stack/proc/copy_evidences(obj/item/stack/from) + add_blood_DNA(from.return_blood_DNA()) + add_fingerprint_list(from.return_fingerprints()) + add_hiddenprint_list(from.return_hiddenprints()) fingerprintslast = from.fingerprintslast //TODO bloody overlay diff --git a/code/game/objects/items/storage/book.dm b/code/game/objects/items/storage/book.dm index a06d1a509e..46c3170349 100644 --- a/code/game/objects/items/storage/book.dm +++ b/code/game/objects/items/storage/book.dm @@ -213,5 +213,5 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible", else return ..(M,user,heal_mode = FALSE) -/obj/item/storage/book/bible/syndicate/add_blood(list/blood_dna) +/obj/item/storage/book/bible/syndicate/add_blood_DNA(list/blood_dna) return FALSE diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm index 293ef46197..7ac2a3fc3d 100644 --- a/code/game/objects/items/twohanded.dm +++ b/code/game/objects/items/twohanded.dm @@ -293,7 +293,7 @@ icon_state = "dualsaber[item_color][wielded]" else icon_state = "dualsaber0" - clean_blood()//blood overlays get weird otherwise, because the sprite changes. + SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) /obj/item/twohanded/dualsaber/attack(mob/target, mob/living/carbon/human/user) if(user.has_dna()) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 77b992704a..ab0f676007 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -296,8 +296,7 @@ /obj/machinery/shower/proc/wash_obj(obj/O) - O.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) - . = O.clean_blood() + . = O.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) O.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) if(isitem(O)) var/obj/item/I = O @@ -310,7 +309,6 @@ var/turf/tile = loc tile.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) tile.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - tile.clean_blood() for(var/obj/effect/E in tile) if(is_cleanable(E)) qdel(E) @@ -361,7 +359,7 @@ else if(H.w_uniform && wash_obj(H.w_uniform)) H.update_inv_w_uniform() if(washgloves) - H.clean_blood() + H.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) if(H.shoes && washshoes && wash_obj(H.shoes)) H.update_inv_shoes() if(H.wear_mask && washmask && wash_obj(H.wear_mask)) @@ -378,9 +376,9 @@ else if(M.wear_mask && wash_obj(M.wear_mask)) M.update_inv_wear_mask(0) - M.clean_blood() + M.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) else - L.clean_blood() + L.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) /obj/machinery/shower/proc/contamination_cleanse(atom/movable/thing) var/datum/component/radioactive/healthy_green_glow = thing.GetComponent(/datum/component/radioactive) @@ -473,8 +471,7 @@ H.regenerate_icons() user.drowsyness = max(user.drowsyness - rand(2,3), 0) //Washing your face wakes you up if you're falling asleep else - user.clean_blood() - + user.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) /obj/structure/sink/attackby(obj/item/O, mob/living/user, params) if(busy) @@ -530,7 +527,7 @@ busy = FALSE return 1 busy = FALSE - O.clean_blood() + O.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) O.acid_level = 0 create_reagents(5) reagents.add_reagent(dispensedreagent, 5) diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index 0eddbc411e..f7974d58b9 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -173,7 +173,7 @@ for(var/mob/living/simple_animal/slime/M in src) M.apply_water() - clean_blood() + SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) for(var/obj/effect/O in src) if(is_cleanable(O)) qdel(O) diff --git a/code/modules/clothing/gloves/_gloves.dm b/code/modules/clothing/gloves/_gloves.dm index c230b14295..39767234e5 100644 --- a/code/modules/clothing/gloves/_gloves.dm +++ b/code/modules/clothing/gloves/_gloves.dm @@ -11,13 +11,21 @@ strip_delay = 20 equip_delay_other = 40 +/obj/item/clothing/gloves/ComponentInitialize() + . = ..() + AddComponent(/datum/component/redirect, list(COMSIG_COMPONENT_CLEAN_ACT), CALLBACK(src, .proc/clean_blood)) + +/obj/item/clothing/gloves/proc/clean_blood(strength) + if(strength < CLEAN_STRENGTH_BLOOD) + return + transfer_blood = 0 /obj/item/clothing/gloves/worn_overlays(isinhands = FALSE) . = list() if(!isinhands) if(damaged_clothes) . += mutable_appearance('icons/effects/item_damage.dmi', "damagedgloves") - if(blood_DNA) + IF_HAS_BLOOD_DNA(src) . += mutable_appearance('icons/effects/blood.dmi', "bloodyhands") /obj/item/clothing/gloves/update_clothes_damaged_state(damaging = TRUE) diff --git a/code/modules/clothing/head/_head.dm b/code/modules/clothing/head/_head.dm index 8bc8f12dec..9ec6542cf5 100644 --- a/code/modules/clothing/head/_head.dm +++ b/code/modules/clothing/head/_head.dm @@ -20,7 +20,7 @@ if(!isinhands) if(damaged_clothes) . += mutable_appearance('icons/effects/item_damage.dmi', "damagedhelmet") - if(blood_DNA) + IF_HAS_BLOOD_DNA(src) . += mutable_appearance('icons/effects/blood.dmi', "helmetblood") /obj/item/clothing/head/update_clothes_damaged_state(damaging = TRUE) diff --git a/code/modules/clothing/masks/_masks.dm b/code/modules/clothing/masks/_masks.dm index eacfa3faea..562375e897 100644 --- a/code/modules/clothing/masks/_masks.dm +++ b/code/modules/clothing/masks/_masks.dm @@ -15,7 +15,7 @@ if(body_parts_covered & HEAD) if(damaged_clothes) . += mutable_appearance('icons/effects/item_damage.dmi', "damagedmask") - if(blood_DNA) + IF_HAS_BLOOD_DNA(src) . += mutable_appearance('icons/effects/blood.dmi', "maskblood") /obj/item/clothing/mask/update_clothes_damaged_state(damaging = TRUE) diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm index 2baaf91135..b0f2a18a5b 100644 --- a/code/modules/clothing/neck/_neck.dm +++ b/code/modules/clothing/neck/_neck.dm @@ -12,7 +12,7 @@ if(body_parts_covered & HEAD) if(damaged_clothes) . += mutable_appearance('icons/effects/item_damage.dmi', "damagedmask") - if(blood_DNA) + IF_HAS_BLOOD_DNA(src) . += mutable_appearance('icons/effects/blood.dmi', "maskblood") /obj/item/clothing/neck/tie diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index d71827df95..d058e82a3a 100644 --- a/code/modules/clothing/shoes/_shoes.dm +++ b/code/modules/clothing/shoes/_shoes.dm @@ -15,12 +15,16 @@ var/offset = 0 var/equipped_before_drop = FALSE +/obj/item/clothing/shoes/ComponentInitialize() + . = ..() + AddComponent(/datum/component/redirect, list(COMSIG_COMPONENT_CLEAN_ACT), CALLBACK(src, .proc/clean_blood)) + /obj/item/clothing/shoes/worn_overlays(isinhands = FALSE) . = list() if(!isinhands) - var/bloody = 0 - if(blood_DNA) - bloody = 1 + var/bloody = FALSE + IF_HAS_BLOOD_DNA(src) + bloody = TRUE else bloody = bloody_shoes[BLOOD_STATE_HUMAN] @@ -53,8 +57,9 @@ var/mob/M = loc M.update_inv_shoes() -/obj/item/clothing/shoes/clean_blood() - ..() +/obj/item/clothing/shoes/proc/clean_blood(strength) + if(strength < CLEAN_STRENGTH_BLOOD) + return bloody_shoes = list(BLOOD_STATE_HUMAN = 0,BLOOD_STATE_XENO = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0) blood_state = BLOOD_STATE_NOT_BLOODY if(ismob(loc)) @@ -62,4 +67,4 @@ M.update_inv_shoes() /obj/item/proc/negates_gravity() - return 0 \ No newline at end of file + return FALSE \ No newline at end of file diff --git a/code/modules/clothing/suits/_suits.dm b/code/modules/clothing/suits/_suits.dm index e934b77f38..a2707de58b 100644 --- a/code/modules/clothing/suits/_suits.dm +++ b/code/modules/clothing/suits/_suits.dm @@ -14,7 +14,7 @@ if(!isinhands) if(damaged_clothes) . += mutable_appearance('icons/effects/item_damage.dmi', "damaged[blood_overlay_type]") - if(blood_DNA) + IF_HAS_BLOOD_DNA(src) . += mutable_appearance('icons/effects/blood.dmi', "[blood_overlay_type]blood") var/mob/living/carbon/human/M = loc if(ishuman(M) && M.w_uniform) diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index 43da19896b..62fd5b5f5a 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -19,10 +19,9 @@ /obj/item/clothing/under/worn_overlays(isinhands = FALSE) . = list() if(!isinhands) - if(damaged_clothes) . += mutable_appearance('icons/effects/item_damage.dmi', "damageduniform") - if(blood_DNA) + IF_HAS_BLOOD_DNA(src) . += mutable_appearance('icons/effects/blood.dmi', "uniformblood") if(accessory_overlay) . += accessory_overlay diff --git a/code/modules/detectivework/detective_work.dm b/code/modules/detectivework/detective_work.dm index d2d633d103..51be073081 100644 --- a/code/modules/detectivework/detective_work.dm +++ b/code/modules/detectivework/detective_work.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD //CONTAINS: Suit fibers and Detective's Scanning Computer /atom/var/list/suit_fibers @@ -117,3 +118,107 @@ if(fingerprintshidden) A.fingerprintshidden |= fingerprintshidden.Copy() //admin A.fingerprintslast = fingerprintslast +======= +//CONTAINS: Suit fibers and Detective's Scanning Computer + +/atom/proc/return_fingerprints() + GET_COMPONENT(D, /datum/component/forensics) + if(D) + . = D.fingerprints + +/atom/proc/return_hiddenprints() + GET_COMPONENT(D, /datum/component/forensics) + if(D) + . = D.hiddenprints + +/atom/proc/return_blood_DNA() + GET_COMPONENT(D, /datum/component/forensics) + if(D) + . = D.blood_DNA + +/atom/proc/blood_DNA_length() + GET_COMPONENT(D, /datum/component/forensics) + if(D) + . = length(D.blood_DNA) + +/atom/proc/return_fibers() + GET_COMPONENT(D, /datum/component/forensics) + if(D) + . = D.fibers + +/atom/proc/add_fingerprint_list(list/fingerprints) //ASSOC LIST FINGERPRINT = FINGERPRINT + if(length(fingerprints)) + . = AddComponent(/datum/component/forensics, fingerprints) + +//Set ignoregloves to add prints irrespective of the mob having gloves on. +/atom/proc/add_fingerprint(mob/living/M, ignoregloves = FALSE) + var/datum/component/forensics/D = AddComponent(/datum/component/forensics) + . = D.add_fingerprint(M, ignoregloves) + +/atom/proc/add_fiber_list(list/fibertext) //ASSOC LIST FIBERTEXT = FIBERTEXT + if(length(fibertext)) + . = AddComponent(/datum/component/forensics, null, null, null, fibertext) + +/atom/proc/add_fibers(mob/living/carbon/human/M) + var/old = 0 + if(M.gloves && istype(M.gloves, /obj/item/clothing)) + var/obj/item/clothing/gloves/G = M.gloves + old = length(G.return_blood_DNA()) + if(G.transfer_blood > 1) //bloodied gloves transfer blood to touched objects + if(add_blood_DNA(G.return_blood_DNA()) && length(G.return_blood_DNA()) > old) //only reduces the bloodiness of our gloves if the item wasn't already bloody + G.transfer_blood-- + else if(M.bloody_hands > 1) + old = length(M.return_blood_DNA()) + if(add_blood_DNA(M.return_blood_DNA()) && length(M.return_blood_DNA()) > old) + M.bloody_hands-- + var/datum/component/forensics/D = AddComponent(/datum/component/forensics) + . = D.add_fibers(M) + +/atom/proc/add_hiddenprint_list(list/hiddenprints) //NOTE: THIS IS FOR ADMINISTRATION FINGERPRINTS, YOU MUST CUSTOM SET THIS TO INCLUDE CKEY/REAL NAMES! CHECK FORENSICS.DM + if(length(hiddenprints)) + . = AddComponent(/datum/component/forensics, null, hiddenprints) + +/atom/proc/add_hiddenprint(mob/living/M) + var/datum/component/forensics/D = AddComponent(/datum/component/forensics) + . = D.add_hiddenprint(M) + +/atom/proc/add_blood_DNA(list/dna) //ASSOC LIST DNA = BLOODTYPE + return FALSE + +/obj/add_blood_DNA(list/dna) + . = ..() + if(length(dna)) + . = AddComponent(/datum/component/forensics, null, null, dna) + +/obj/item/clothing/gloves/add_blood_DNA(list/blood_dna, list/datum/disease/diseases) + . = ..() + transfer_blood = rand(2, 4) + +/turf/add_blood_DNA(list/blood_dna, list/datum/disease/diseases) + var/obj/effect/decal/cleanable/blood/splatter/B = locate() in src + if(!B) + B = new /obj/effect/decal/cleanable/blood/splatter(src, diseases) + B.add_blood_DNA(blood_dna) //give blood info to the blood decal. + return TRUE //we bloodied the floor + +/mob/living/carbon/human/add_blood_DNA(list/blood_dna, list/datum/disease/diseases) + if(wear_suit) + wear_suit.add_blood_DNA(blood_dna) + update_inv_wear_suit() + else if(w_uniform) + w_uniform.add_blood_DNA(blood_dna) + update_inv_w_uniform() + if(gloves) + var/obj/item/clothing/gloves/G = gloves + G.add_blood_DNA(blood_dna) + else if(length(blood_dna)) + AddComponent(/datum/component/forensics, null, null, dna) + bloody_hands = rand(2, 4) + update_inv_gloves() //handles bloody hands overlays and updating + return TRUE + +/atom/proc/transfer_fingerprints_to(atom/A) + A.add_fingerprint_list(return_fingerprints()) + A.add_hiddenprint_list(return_hiddenprints()) + A.fingerprintslast = fingerprintslast +>>>>>>> 9d0e97f... Merge pull request #32311 from kevinz000/component_forensics diff --git a/code/modules/detectivework/evidence.dm b/code/modules/detectivework/evidence.dm index 1400fdbe0c..9c98677291 100644 --- a/code/modules/detectivework/evidence.dm +++ b/code/modules/detectivework/evidence.dm @@ -23,7 +23,7 @@ icon_state = initial(icon_state) desc = initial(desc) -/obj/item/evidencebag/proc/evidencebagEquip(obj/item/I, mob/user) +/obj/item/evidencebag/proc/evidencebagEquip(obj/item/I, mob/user) if(!istype(I) || I.anchored == 1) return diff --git a/code/modules/detectivework/footprints_and_rag.dm b/code/modules/detectivework/footprints_and_rag.dm index 793805977c..66405258b9 100644 --- a/code/modules/detectivework/footprints_and_rag.dm +++ b/code/modules/detectivework/footprints_and_rag.dm @@ -46,6 +46,5 @@ user.visible_message("[user] starts to wipe down [A] with [src]!", "You start to wipe down [A] with [src]...") if(do_after(user,30, target = A)) user.visible_message("[user] finishes wiping off the [A]!", "You finish wiping off the [A].") - A.clean_blood() - A.wash_cream() + A.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM) return diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm index 8cb27ea4f3..fa6c1f88cb 100644 --- a/code/modules/detectivework/scanner.dm +++ b/code/modules/detectivework/scanner.dm @@ -67,20 +67,14 @@ //Make our lists var/list/fingerprints = list() - var/list/blood = list() - var/list/fibers = list() + var/list/blood = A.return_blood_DNA() + var/list/fibers = A.return_fibers() var/list/reagents = list() var/target_name = A.name // Start gathering - if(A.blood_DNA && A.blood_DNA.len) - blood = A.blood_DNA.Copy() - - if(A.suit_fibers && A.suit_fibers.len) - fibers = A.suit_fibers.Copy() - if(ishuman(A)) var/mob/living/carbon/human/H = A @@ -89,8 +83,7 @@ else if(!ismob(A)) - if(A.fingerprints && A.fingerprints.len) - fingerprints = A.fingerprints.Copy() + fingerprints = A.return_fingerprints() // Only get reagents from non-mobs. if(A.reagents && A.reagents.reagent_list.len) @@ -104,6 +97,7 @@ if(R.data["blood_DNA"] && R.data["blood_type"]) var/blood_DNA = R.data["blood_DNA"] var/blood_type = R.data["blood_type"] + LAZYINITLIST(blood) blood[blood_DNA] = blood_type // We gathered everything. Create a fork and slowly display the results to the holder of the scanner. @@ -112,7 +106,7 @@ add_log("[worldtime2text()][get_timestamp()] - [target_name]", 0) // Fingerprints - if(fingerprints && fingerprints.len) + if(length(fingerprints)) sleep(30) add_log("Prints:") for(var/finger in fingerprints) @@ -120,7 +114,7 @@ found_something = 1 // Blood - if (blood && blood.len) + if (length(blood)) sleep(30) add_log("Blood:") found_something = 1 @@ -128,7 +122,7 @@ add_log("Type: [blood[B]] DNA: [B]") //Fibers - if(fibers && fibers.len) + if(length(fibers)) sleep(30) add_log("Fibers:") for(var/fiber in fibers) @@ -136,7 +130,7 @@ found_something = 1 //Reagents - if(reagents && reagents.len) + if(length(reagents)) sleep(30) add_log("Reagents:") for(var/R in reagents) diff --git a/code/modules/integrated_electronics/core/printer.dm b/code/modules/integrated_electronics/core/printer.dm index 15f76281ef..c5336094f1 100644 --- a/code/modules/integrated_electronics/core/printer.dm +++ b/code/modules/integrated_electronics/core/printer.dm @@ -101,6 +101,7 @@ return if(..()) return TRUE + add_fingerprint(usr) if(href_list["category"]) current_category = href_list["category"] diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index c1ea547b34..db04a02e4f 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -252,8 +252,7 @@ drop.transfer_mob_blood_dna(src) return else - temp_blood_DNA = list() - temp_blood_DNA |= drop.blood_DNA.Copy() //we transfer the dna from the drip to the splatter + temp_blood_DNA = drop.return_blood_DNA() //we transfer the dna from the drip to the splatter qdel(drop)//the drip is replaced by a bigger splatter else drop = new(T, get_static_viruses()) @@ -266,7 +265,7 @@ B = new /obj/effect/decal/cleanable/blood/splatter(T, get_static_viruses()) B.transfer_mob_blood_dna(src) //give blood info to the blood decal. if(temp_blood_DNA) - B.blood_DNA |= temp_blood_DNA + B.add_blood_DNA(temp_blood_DNA) /mob/living/carbon/human/add_splatter_floor(turf/T, small_drip) if(!(NOBLOOD in dna.species.species_traits)) @@ -278,7 +277,7 @@ var/obj/effect/decal/cleanable/xenoblood/B = locate() in T.contents if(!B) B = new(T) - B.blood_DNA["UNKNOWN DNA"] = "X*" + B.add_blood_DNA(list("UNKNOWN DNA" = "X*")) /mob/living/silicon/robot/add_splatter_floor(turf/T, small_drip) if(!T) diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm index b8d9d510fd..1c95059a91 100644 --- a/code/modules/mob/living/carbon/examine.dm +++ b/code/modules/mob/living/carbon/examine.dm @@ -11,21 +11,18 @@ if (handcuffed) msg += "[t_He] [t_is] [icon2html(handcuffed, user)] handcuffed!\n" if (head) - msg += "[t_He] [t_is] wearing [icon2html(head, user)] \a [src.head] on [t_his] head. \n" + msg += "[t_He] [t_is] wearing [head.get_examine_string(user)] on [t_his] head. \n" if (wear_mask) - msg += "[t_He] [t_is] wearing [icon2html(wear_mask, user)] \a [src.wear_mask] on [t_his] face.\n" + msg += "[t_He] [t_is] wearing [wear_mask.get_examine_string(user)] on [t_his] face.\n" if (wear_neck) - msg += "[t_He] [t_is] wearing [icon2html(wear_neck, user)] \a [src.wear_neck] around [t_his] neck.\n" + msg += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck.\n" for(var/obj/item/I in held_items) if(!(I.flags_1 & ABSTRACT_1)) - if(I.blood_DNA) - msg += "[t_He] [t_is] holding [icon2html(I, user)] [I.gender==PLURAL?"some":"a"] blood-stained [I.name] in [t_his] [get_held_index_name(get_held_index_of_item(I))]!\n" - else - msg += "[t_He] [t_is] holding [icon2html(I, user)] \a [I] in [t_his] [get_held_index_name(get_held_index_of_item(I))].\n" + msg += "[t_He] [t_is] holding [I.get_examine_string(user)] in [t_his] [get_held_index_name(get_held_index_of_item(I))].\n" if (back) - msg += "[t_He] [t_has] [icon2html(back, user)] \a [src.back] on [t_his] back.\n" + msg += "[t_He] [t_has] [back.get_examine_string(user)] on [t_his] back.\n" var/appears_dead = 0 if (stat == DEAD) appears_dead = 1 diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 39caec803b..a9e590c2ca 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -21,54 +21,30 @@ if(U.attached_accessory) accessory_msg += " with [icon2html(U.attached_accessory, user)] \a [U.attached_accessory]" - if(w_uniform.blood_DNA) - msg += "[t_He] [t_is] wearing [icon2html(w_uniform, user)] [w_uniform.gender==PLURAL?"some":"a"] blood-stained [w_uniform.name][accessory_msg]!\n" - else - msg += "[t_He] [t_is] wearing [icon2html(w_uniform, user)] \a [w_uniform][accessory_msg].\n" - + msg += "[t_He] [t_is] wearing [w_uniform.get_examine_string(user)][accessory_msg].\n" //head if(head) - if(head.blood_DNA) - msg += "[t_He] [t_is] wearing [icon2html(head, user)] [head.gender==PLURAL?"some":"a"] blood-stained [head.name] on [t_his] head!\n" - else - msg += "[t_He] [t_is] wearing [icon2html(head, user)] \a [head] on [t_his] head.\n" - + msg += "[t_He] [t_is] wearing [head.get_examine_string(user)] on [t_his] head.\n" //suit/armor if(wear_suit) - if(wear_suit.blood_DNA) - msg += "[t_He] [t_is] wearing [icon2html(wear_suit, user)] [wear_suit.gender==PLURAL?"some":"a"] blood-stained [wear_suit.name]!\n" - else - msg += "[t_He] [t_is] wearing [icon2html(wear_suit, user)] \a [wear_suit].\n" - + msg += "[t_He] [t_is] wearing [wear_suit.get_examine_string(user)].\n" //suit/armor storage if(s_store) - if(s_store.blood_DNA) - msg += "[t_He] [t_is] carrying [icon2html(s_store, user)] [s_store.gender==PLURAL?"some":"a"] blood-stained [s_store.name] on [t_his] [wear_suit.name]!\n" - else - msg += "[t_He] [t_is] carrying [icon2html(s_store, user)] \a [s_store] on [t_his] [wear_suit.name].\n" - + msg += "[t_He] [t_is] carrying [s_store.get_examine_string(user)] on [t_his] [wear_suit.name].\n" //back if(back) - if(back.blood_DNA) - msg += "[t_He] [t_has] [icon2html(back, user)] [back.gender==PLURAL?"some":"a"] blood-stained [back] on [t_his] back.\n" - else - msg += "[t_He] [t_has] [icon2html(back, user)] \a [back] on [t_his] back.\n" + msg += "[t_He] [t_has] [back.get_examine_string(user)] on [t_his] back.\n" //Hands for(var/obj/item/I in held_items) if(!(I.flags_1 & ABSTRACT_1)) - if(I.blood_DNA) - msg += "[t_He] [t_is] holding [icon2html(I, user)] [I.gender==PLURAL?"some":"a"] blood-stained [I.name] in [t_his] [get_held_index_name(get_held_index_of_item(I))]!\n" - else - msg += "[t_He] [t_is] holding [icon2html(I, user)] \a [I] in [t_his] [get_held_index_name(get_held_index_of_item(I))].\n" + msg += "[t_He] [t_is] holding [I.get_examine_string(user)] in [t_his] [get_held_index_name(get_held_index_of_item(I))].\n" + GET_COMPONENT(FR, /datum/component/forensics) //gloves if(gloves && !(slot_gloves in obscured)) - if(gloves.blood_DNA) - msg += "[t_He] [t_has] [icon2html(gloves, user)] [gloves.gender==PLURAL?"some":"a"] blood-stained [gloves.name] on [t_his] hands!\n" - else - msg += "[t_He] [t_has] [icon2html(gloves, user)] \a [gloves] on [t_his] hands.\n" - else if(blood_DNA) + msg += "[t_He] [t_has] [gloves.get_examine_string(user)] on [t_his] hands.\n" + else if(FR && length(FR.blood_DNA)) var/hand_number = get_num_arms() if(hand_number) msg += "[t_He] [t_has] [hand_number > 1 ? "" : "a"] blood-stained hand[hand_number > 1 ? "s" : ""]!\n" @@ -84,42 +60,30 @@ //belt if(belt) - if(belt.blood_DNA) - msg += "[t_He] [t_has] [icon2html(belt, user)] [belt.gender==PLURAL?"some":"a"] blood-stained [belt.name] about [t_his] waist!\n" - else - msg += "[t_He] [t_has] [icon2html(belt, user)] \a [belt] about [t_his] waist.\n" + msg += "[t_He] [t_has] [belt.get_examine_string(user)] about [t_his] waist.\n" //shoes if(shoes && !(slot_shoes in obscured)) - if(shoes.blood_DNA) - msg += "[t_He] [t_is] wearing [icon2html(shoes, user)] [shoes.gender==PLURAL?"some":"a"] blood-stained [shoes.name] on [t_his] feet!\n" - else - msg += "[t_He] [t_is] wearing [icon2html(shoes, user)] \a [shoes] on [t_his] feet.\n" + msg += "[t_He] [t_is] wearing [shoes.get_examine_string(user)] on [t_his] feet.\n" //mask if(wear_mask && !(slot_wear_mask in obscured)) - if(wear_mask.blood_DNA) - msg += "[t_He] [t_has] [icon2html(wear_mask, user)] [wear_mask.gender==PLURAL?"some":"a"] blood-stained [wear_mask.name] on [t_his] face!\n" - else - msg += "[t_He] [t_has] [icon2html(wear_mask, user)] \a [wear_mask] on [t_his] face.\n" + msg += "[t_He] [t_has] [wear_mask.get_examine_string(user)] on [t_his] face.\n" if (wear_neck && !(slot_neck in obscured)) - msg += "[t_He] [t_is] wearing [icon2html(wear_neck, user)] \a [src.wear_neck] around [t_his] neck.\n" + msg += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck.\n" //eyes if(glasses && !(slot_glasses in obscured)) - if(glasses.blood_DNA) - msg += "[t_He] [t_has] [icon2html(glasses, user)] [glasses.gender==PLURAL?"some":"a"] blood-stained [glasses] covering [t_his] eyes!\n" - else - msg += "[t_He] [t_has] [icon2html(glasses, user)] \a [glasses] covering [t_his] eyes.\n" + msg += "[t_He] [t_has] [glasses.get_examine_string(user)] covering [t_his] eyes.\n" //ears if(ears && !(slot_ears in obscured)) - msg += "[t_He] [t_has] [icon2html(ears, user)] \a [ears] on [t_his] ears.\n" + msg += "[t_He] [t_has] [ears.get_examine_string(user)] on [t_his] ears.\n" //ID if(wear_id) - msg += "[t_He] [t_is] wearing [icon2html(wear_id, user)] \a [wear_id].\n" + msg += "[t_He] [t_is] wearing [wear_id.get_examine_string(user)].\n" //Jitters switch(jitteriness) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index b153f914f3..caa25ca83b 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -25,6 +25,7 @@ create_internal_organs() //most of it is done in set_species now, this is only for parent call handcrafting = new() + AddComponent(/datum/component/redirect, list(COMSIG_COMPONENT_CLEAN_ACT), CALLBACK(src, .proc/clean_blood)) . = ..() @@ -683,19 +684,18 @@ if(..()) dropItemToGround(I) -/mob/living/carbon/human/clean_blood() - var/mob/living/carbon/human/H = src - if(H.gloves) - if(H.gloves.clean_blood()) - H.update_inv_gloves() +/mob/living/carbon/human/proc/clean_blood(strength) + if(strength < CLEAN_STRENGTH_BLOOD) + return + if(gloves) + if(gloves.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) + update_inv_gloves() else - ..() // Clear the Blood_DNA list - if(H.bloody_hands) - H.bloody_hands = 0 - H.update_inv_gloves() + if(bloody_hands) + bloody_hands = 0 + update_inv_gloves() update_icons() //apply the now updated overlays to the mob - /mob/living/carbon/human/wash_cream() if(creamed) //clean both to prevent a rare bug cut_overlay(mutable_appearance('icons/effects/creampie.dmi', "creampie_lizard")) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 6e5d8c7373..ae78e1e585 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -51,8 +51,7 @@ FP.blood_state = S.blood_state FP.entered_dirs |= dir FP.bloodiness = S.bloody_shoes[S.blood_state] - BLOOD_LOSS_IN_SPREAD - if(S.blood_DNA && S.blood_DNA.len) - FP.transfer_blood_dna(S.blood_DNA) + FP.add_blood_DNA(S.return_blood_DNA()) FP.update_icon() update_inv_shoes() //End bloody footprints diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 14f294fd90..969af98088 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -175,7 +175,8 @@ There are several things that need to be remembered: var/obj/screen/inventory/inv = hud_used.inv_slots[slot_gloves] inv.update_icon() - if(!gloves && blood_DNA) + GET_COMPONENT(FR, /datum/component/forensics) + if(!gloves && FR && length(FR.blood_DNA)) var/mutable_appearance/bloody_overlay = mutable_appearance('icons/effects/blood.dmi', "bloodyhands", -GLOVES_LAYER) if(get_num_arms() < 2) if(has_left_hand()) diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index 98d4557037..917211736b 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -472,8 +472,7 @@ if(isturf(next)) if(bloodiness) var/obj/effect/decal/cleanable/blood/tracks/B = new(loc) - if(blood_DNA && blood_DNA.len) - B.blood_DNA |= blood_DNA.Copy() + B.add_blood_DNA(return_blood_DNA()) var/newdir = get_dir(next, loc) if(newdir == dir) B.setDir(newdir) @@ -655,8 +654,7 @@ T.add_mob_blood(H) var/list/blood_dna = H.get_blood_dna_list() - if(blood_dna) - transfer_blood_dna(blood_dna) + add_blood_DNA(blood_dna) bloodiness += 4 // player on mulebot attempted to move diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm index ea159a5749..4d45716983 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm @@ -177,24 +177,15 @@ //Hands for(var/obj/item/I in held_items) if(!(I.flags_1 & ABSTRACT_1)) - if(I.blood_DNA) - msg += "It has [icon2html(I, user)] [I.gender==PLURAL?"some":"a"] blood-stained [I.name] in its [get_held_index_name(get_held_index_of_item(I))]!\n" - else - msg += "It has [icon2html(I, user)] \a [I] in its [get_held_index_name(get_held_index_of_item(I))].\n" + msg += "It has [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))].\n" //Internal storage if(internal_storage && !(internal_storage.flags_1&ABSTRACT_1)) - if(internal_storage.blood_DNA) - msg += "It is holding [icon2html(internal_storage, user)] [internal_storage.gender==PLURAL?"some":"a"] blood-stained [internal_storage.name] in its internal storage!\n" - else - msg += "It is holding [icon2html(internal_storage, user)] \a [internal_storage] in its internal storage.\n" + msg += "It is holding [internal_storage.get_examine_string(user)] in its internal storage.\n" //Cosmetic hat - provides no function other than looks if(head && !(head.flags_1&ABSTRACT_1)) - if(head.blood_DNA) - msg += "It is wearing [icon2html(head, user)] [head.gender==PLURAL?"some":"a"] blood-stained [head.name] on its head!\n" - else - msg += "It is wearing [icon2html(head, user)] \a [head] on its head.\n" + msg += "It is wearing [head.get_examine_string(user)] on its head.\n" //Braindead if(!client && stat != DEAD) diff --git a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm index 2f3ee4cefb..f36a30ccae 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm @@ -31,16 +31,9 @@ for(var/obj/item/I in held_items) if(!(I.flags_1 & ABSTRACT_1)) - if(I.blood_DNA) - msg += "It has [icon2html(I, user)] [I.gender==PLURAL?"some":"a"] blood-stained [I.name] in its [get_held_index_name(get_held_index_of_item(I))]!\n" - else - msg += "It has [icon2html(I, user)] \a [I] in its [get_held_index_name(get_held_index_of_item(I))].\n" - + msg += "It has [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))].\n" if(internal_storage && !(internal_storage.flags_1&ABSTRACT_1)) - if(internal_storage.blood_DNA) - msg += "It is holding [icon2html(internal_storage, user)] [internal_storage.gender==PLURAL?"some":"a"] blood-stained [internal_storage.name] in its internal storage!\n" - else - msg += "It is holding [icon2html(internal_storage, user)] \a [internal_storage] in its internal storage.\n" + msg += "It is holding [internal_storage.get_examine_string(user)] in its internal storage.\n" msg += "*---------*" to_chat(user, msg) else diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index 2651065b75..f9c9ae6ae4 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -173,6 +173,6 @@ qdel(target) return TRUE var/atom/movable/M = target - M.clean_blood() + M.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) visible_message("[src] polishes \the [target].") return TRUE diff --git a/code/modules/ninja/suit/gloves.dm b/code/modules/ninja/suit/gloves.dm index c49ca072e8..ef02a8a792 100644 --- a/code/modules/ninja/suit/gloves.dm +++ b/code/modules/ninja/suit/gloves.dm @@ -40,26 +40,26 @@ /obj/item/clothing/gloves/space_ninja/Touch(atom/A,proximity) if(!candrain || draining) - return 0 + return FALSE if(!ishuman(loc)) - return 0 //Only works while worn + return FALSE //Only works while worn var/mob/living/carbon/human/H = loc var/obj/item/clothing/suit/space/space_ninja/suit = H.wear_suit if(!istype(suit)) - return 0 + return FALSE if(isturf(A)) - return 0 + return FALSE if(!proximity) - return 0 + return FALSE A.add_fingerprint(H) - draining = 1 + draining = TRUE . = A.ninjadrain_act(suit,H,src) - draining = 0 + draining = FALSE if(isnum(.)) //Numerical values of drained handle their feedback here, Alpha values handle it themselves (Research hacking) if(.) @@ -67,7 +67,7 @@ else to_chat(H, "\The [A] has run dry of energy, you must find another source!") else - . = 0 //as to not cancel attack_hand() + . = FALSE //as to not cancel attack_hand() /obj/item/clothing/gloves/space_ninja/proc/toggledrain() diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index ca424cb80d..3ada84d601 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -665,7 +665,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai NC.d1 = 0 NC.d2 = fdirn - NC.add_fingerprint() + NC.add_fingerprint(user) NC.update_icon() //create a new powernet with the cable, if needed it will be merged later @@ -716,7 +716,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai //updates the stored cable coil C.update_stored(2, item_color) - C.add_fingerprint() + C.add_fingerprint(user) C.update_icon() diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index 680c86ff5c..35599553d7 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -164,7 +164,7 @@ if(iscarbon(user)) var/mob/living/carbon/C = user user_dna = C.dna - B.add_blood(user_dna) + B.add_blood_DNA(user_dna) var/datum/callback/gibspawner = CALLBACK(GLOBAL_PROC, /proc/spawn_atom_to_turf, /obj/effect/gibspawner/generic, B, 1, FALSE, list(user_dna)) B.throw_at(target, BRAINS_BLOWN_THROW_RANGE, BRAINS_BLOWN_THROW_SPEED, callback=gibspawner) return(BRUTELOSS) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 219d9df8ef..5c4cdcf7e0 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -79,8 +79,7 @@ if(!B) B = new(T) if(data["blood_DNA"]) - B.blood_DNA[data["blood_DNA"]] = data["blood_type"] - + B.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"])) /datum/reagent/liquidgibs name = "Liquid gibs" @@ -941,12 +940,12 @@ else if(O) O.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - O.clean_blood() + O.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) /datum/reagent/space_cleaner/reaction_turf(turf/T, reac_volume) if(reac_volume >= 1) T.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - T.clean_blood() + T.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) for(var/obj/effect/decal/cleanable/C in T) qdel(C) @@ -964,26 +963,26 @@ H.lip_style = null H.update_body() for(var/obj/item/I in C.held_items) - I.clean_blood() + I.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) if(C.wear_mask) - if(C.wear_mask.clean_blood()) + if(C.wear_mask.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) C.update_inv_wear_mask() if(ishuman(M)) var/mob/living/carbon/human/H = C if(H.head) - if(H.head.clean_blood()) + if(H.head.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) H.update_inv_head() if(H.wear_suit) - if(H.wear_suit.clean_blood()) + if(H.wear_suit.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) H.update_inv_wear_suit() else if(H.w_uniform) - if(H.w_uniform.clean_blood()) + if(H.w_uniform.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) H.update_inv_w_uniform() if(H.shoes) - if(H.shoes.clean_blood()) + if(H.shoes.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) H.update_inv_shoes() H.wash_cream() - M.clean_blood() + M.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) /datum/reagent/space_cleaner/ez_clean name = "EZ Clean" diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index 3c40996029..216aea306a 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -14,6 +14,7 @@ if(..(user)) return add_fingerprint(usr) + var/list/options = params2list(possible_destinations) var/obj/docking_port/mobile/M = SSshuttle.getShuttle(shuttleId) var/dat = "Status: [M ? M.getStatusText() : "*Missing*"]

" diff --git a/tgstation.dme b/tgstation.dme index cebbabd8da..907ff6b640 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -43,6 +43,7 @@ #include "code\__DEFINES\events.dm" #include "code\__DEFINES\flags.dm" #include "code\__DEFINES\food.dm" +#include "code\__DEFINES\forensics.dm" #include "code\__DEFINES\hud.dm" #include "code\__DEFINES\integrated_electronics.dm" #include "code\__DEFINES\inventory.dm" @@ -350,6 +351,7 @@ #include "code\datums\components\chasm.dm" #include "code\datums\components\cleaning.dm" #include "code\datums\components\decal.dm" +#include "code\datums\components\forensics.dm" #include "code\datums\components\infective.dm" #include "code\datums\components\jousting.dm" #include "code\datums\components\knockoff.dm" @@ -364,6 +366,7 @@ #include "code\datums\components\spooky.dm" #include "code\datums\components\squeek.dm" #include "code\datums\components\thermite.dm" +#include "code\datums\components\decals\blood.dm" #include "code\datums\diseases\_disease.dm" #include "code\datums\diseases\_MobProcs.dm" #include "code\datums\diseases\anxiety.dm" From ccdccb57af2d1b741e19c7d47235b5e8d3e11ad9 Mon Sep 17 00:00:00 2001 From: AnturK Date: Thu, 28 Dec 2017 21:22:29 +0100 Subject: [PATCH 015/104] Adds roundend nuke disk location tracking to feedback. --- code/__HELPERS/roundend.dm | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index 1f1bab691e..6d5efe8287 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -1,5 +1,6 @@ /datum/controller/subsystem/ticker/proc/gather_roundend_feedback() var/clients = GLOB.player_list.len +<<<<<<< HEAD var/surviving_humans = 0 var/surviving_total = 0 var/ghosts = 0 @@ -36,6 +37,22 @@ gather_antag_success_rate() /datum/controller/subsystem/ticker/proc/gather_antag_success_rate() +======= + var/popcount = count_survivors() + SSblackbox.record_feedback("nested tally", "round_end_stats", clients, list("clients")) + SSblackbox.record_feedback("nested tally", "round_end_stats", popcount[POPCOUNT_GHOSTS], list("ghosts")) + SSblackbox.record_feedback("nested tally", "round_end_stats", popcount[POPCOUNT_HUMAN_SURVIVORS], list("survivors", "human")) + SSblackbox.record_feedback("nested tally", "round_end_stats", popcount[POPCOUNT_SURVIVORS], list("survivors", "total")) + SSblackbox.record_feedback("nested tally", "round_end_stats", popcount[POPCOUNT_HUMAN_ESCAPEES], list("escapees", "human")) + SSblackbox.record_feedback("nested tally", "round_end_stats", popcount[POPCOUNT_ESCAPEES], list("escapees", "total")) + //Antag information + gather_antag_data() + + //Nuke disk + record_nuke_disk_location() + +/datum/controller/subsystem/ticker/proc/gather_antag_data() +>>>>>>> d863eb4... Adds roundend nuke disk location tracking to feedback. (#33660) var/team_gid = 1 var/list/team_ids = list() @@ -63,6 +80,27 @@ antag_info["objectives"] += list(list("objective_type"=O.type,"text"=O.explanation_text,"result"=result)) SSblackbox.record_feedback("associative", "antagonists", 1, antag_info) +<<<<<<< HEAD +======= +/datum/controller/subsystem/ticker/proc/record_nuke_disk_location() + var/obj/item/disk/nuclear/N = locate() in GLOB.poi_list + if(N) + var/list/data = list() + var/turf/T = get_turf(N) + if(T) + data["x"] = T.x + data["y"] = T.y + data["z"] = T.z + var/atom/outer = get_atom_on_turf(N,/mob/living) + if(outer != N) + if(isliving(outer)) + var/mob/living/L = outer + data["holder"] = L.real_name + else + data["holder"] = outer.name + + SSblackbox.record_feedback("associative", "roundend_nukedisk", 1 , data) +>>>>>>> d863eb4... Adds roundend nuke disk location tracking to feedback. (#33660) /datum/controller/subsystem/ticker/proc/gather_newscaster() var/json_file = file("[GLOB.log_directory]/newscaster.json") From d8943d6a1eeea848f773c23d9a63c443d1a0f3eb Mon Sep 17 00:00:00 2001 From: XDTM Date: Fri, 29 Dec 2017 09:37:10 +0100 Subject: [PATCH 016/104] [Ready]Adds the Pax reagent, small tweaks to pacifism --- code/__DEFINES/stat.dm | 1 + code/_onclick/item_attack.dm | 7 +++++++ code/modules/mob/living/carbon/human/life.dm | 4 ++++ .../chemistry/reagents/other_reagents.dm | 20 +++++++++++++++++++ .../reagents/chemistry/recipes/others.dm | 6 ++++++ 5 files changed, 38 insertions(+) diff --git a/code/__DEFINES/stat.dm b/code/__DEFINES/stat.dm index 543ac4badf..e6486a4fcf 100644 --- a/code/__DEFINES/stat.dm +++ b/code/__DEFINES/stat.dm @@ -32,6 +32,7 @@ #define STASIS_MUTE "stasis" #define GENETICS_SPELL "genetics_spell" #define TRAUMA_DISABILITY "trauma" +#define CHEMICAL_DISABILITY "chemical" // bitflags for machine stat variable diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 2dddce8542..f9c3c9668d 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -58,8 +58,15 @@ SendSignal(COMSIG_ITEM_ATTACK, M, user) if(flags_1 & NOBLUDGEON_1) return +<<<<<<< HEAD if(user.disabilities & PACIFISM) +======= + + if(force && user.has_disability(DISABILITY_PACIFISM)) + to_chat(user, "You don't want to harm other living beings!") +>>>>>>> 5d761c5... [Ready]Adds the Pax reagent, small tweaks to pacifism (#33663) return + if(!force) playsound(loc, 'sound/weapons/tap.ogg', get_clamped_volume(), 1, -1) else if(hitsound) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 80db28b99d..6f305a694c 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -72,6 +72,10 @@ else if(eye_blurry) //blurry eyes heal slowly adjust_blurriness(-1) + if(has_disability(DISABILITY_PACIFISM) && a_intent == INTENT_HARM) + to_chat(src, "You don't feel like harming anybody.") + a_intent_change(INTENT_HELP) + /mob/living/carbon/human/handle_mutations_and_radiation() if(!dna || !dna.species.handle_mutations_and_radiation(src)) ..() diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 219d9df8ef..bb504c316f 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -1688,3 +1688,23 @@ description = "blue sparkles that get everywhere" color = "#4040FF" //A blueish color glitter_type = /obj/effect/decal/cleanable/glitter/blue + +/datum/reagent/pax + name = "pax" + id = "pax" + description = "A colorless liquid that suppresses violence on the subjects." + color = "#AAAAAA55" + taste_description = "water" + metabolization_rate = 0.25 * REAGENTS_METABOLISM + +/datum/reagent/pax/on_mob_add(mob/M) + ..() + if(isliving(M)) + var/mob/living/L = M + L.add_disability(DISABILITY_PACIFISM, CHEMICAL_DISABILITY) + +/datum/reagent/pax/on_mob_delete(mob/M) + if(isliving(M)) + var/mob/living/L = M + L.remove_disability(DISABILITY_PACIFISM, CHEMICAL_DISABILITY) + ..() \ No newline at end of file diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm index 222f88ba8b..8ebc470c5f 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -671,3 +671,9 @@ var/location = get_turf(holder.my_atom) for(var/i in 1 to 10) new /obj/item/stack/sheet/plastic(location) + +/datum/chemical_reaction/pax + name = "pax" + id = "pax" + results = list("pax" = 3) + required_reagents = list("mindbreaker" = 1, "synaptizine" = 1, "water" = 1) From 866318e33e14672ca6a3a7533bd76d96985713bc Mon Sep 17 00:00:00 2001 From: coiax Date: Fri, 29 Dec 2017 08:51:41 +0000 Subject: [PATCH 017/104] Internal radio implant --- .../objects/items/implants/implant_misc.dm | 37 +++ .../game/objects/items/storage/uplink_kits.dm | 313 ++++++++++++++++++ code/modules/mob/living/say.dm | 10 + .../research/xenobiology/xenobiology.dm | 12 + code/modules/uplink/uplink_items.dm | 12 +- 5 files changed, 381 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/implants/implant_misc.dm b/code/game/objects/items/implants/implant_misc.dm index 32e0d937bd..2141fba7e8 100644 --- a/code/game/objects/items/implants/implant_misc.dm +++ b/code/game/objects/items/implants/implant_misc.dm @@ -77,3 +77,40 @@ if (!healthstring) healthstring = "ERROR" return healthstring + +/obj/item/implant/radio + name = "internal radio implant" + desc = "Are you there God? It's me, Syndicate Comms Agent." + activated = TRUE + var/obj/item/device/radio/radio + var/radio_key = /obj/item/device/encryptionkey/syndicate + icon = 'icons/obj/radio.dmi' + icon_state = "walkietalkie" + +/obj/item/implant/radio/activate() + // needs to be GLOB.deep_inventory_state otherwise it won't open + radio.ui_interact(usr, "main", null, FALSE, null, GLOB.deep_inventory_state) + +/obj/item/implant/radio/Initialize(mapload) + . = ..() + + radio = new(src) + // almost like an internal headset, but without the + // "must be in ears to hear" restriction. + radio.name = "internal radio" + radio.subspace_transmission = TRUE + radio.canhear_range = 0 + radio.keyslot = new radio_key + radio.recalculateChannels() + + +/obj/item/implant/radio/get_data() + var/dat = {"Implant Specifications:
+ Name: Internal Radio Implant
+ Life: 24 hours
+ Implant Details: Allows user to use an internal radio, useful if user expects equipment loss, or cannot equip conventional radios."} + return dat + +/obj/item/implanter/radio + name = "implanter (internal radio)" + imp_type = /obj/item/implant/radio diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 3718ca1a0f..668ab0b748 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD /obj/item/storage/box/syndicate /obj/item/storage/box/syndicate/PopulateContents() @@ -305,3 +306,315 @@ /obj/item/storage/box/syndie_kit/mimery/PopulateContents() new /obj/item/spellbook/oneuse/mimery_blockade(src) new /obj/item/spellbook/oneuse/mimery_guns(src) +======= +/obj/item/storage/box/syndicate + +/obj/item/storage/box/syndicate/PopulateContents() + switch (pickweight(list("bloodyspai" = 3, "stealth" = 2, "bond" = 2, "screwed" = 2, "sabotage" = 3, "guns" = 2, "murder" = 2, "implant" = 1, "hacker" = 3, "darklord" = 1, "sniper" = 1, "metaops" = 1, "ninja" = 1))) + if("bloodyspai") // 27 tc now this is more right + new /obj/item/clothing/under/chameleon(src) // 2 tc since it's not the full set + new /obj/item/clothing/mask/chameleon(src) // Goes with above + new /obj/item/card/id/syndicate(src) // 2 tc + new /obj/item/clothing/shoes/chameleon(src) // 2 tc + new /obj/item/device/camera_bug(src) // 1 tc + new /obj/item/device/multitool/ai_detect(src) // 1 tc + new /obj/item/device/encryptionkey/syndicate(src) // 2 tc + new /obj/item/reagent_containers/syringe/mulligan(src) // 4 tc + new /obj/item/switchblade(src) //I'll count this as 2 tc + new /obj/item/storage/fancy/cigarettes/cigpack_syndicate (src) // 2 tc this shit heals + new /obj/item/device/flashlight/emp(src) // 2 tc + new /obj/item/device/chameleon(src) // 7 tc + + if("stealth") // 31 tc + new /obj/item/gun/energy/kinetic_accelerator/crossbow(src) + new /obj/item/pen/sleepy(src) + new /obj/item/device/healthanalyzer/rad_laser(src) + new /obj/item/device/chameleon(src) + new /obj/item/soap/syndie(src) + new /obj/item/clothing/glasses/thermal/syndi(src) + + if("bond") // 29 tc + new /obj/item/gun/ballistic/automatic/pistol(src) + new /obj/item/suppressor(src) + new /obj/item/ammo_box/magazine/m10mm(src) + new /obj/item/ammo_box/magazine/m10mm(src) + new /obj/item/clothing/under/chameleon(src) + new /obj/item/card/id/syndicate(src) + new /obj/item/reagent_containers/syringe/stimulants(src) + + if("screwed") // 29 tc + new /obj/item/device/sbeacondrop/bomb(src) + new /obj/item/grenade/syndieminibomb(src) + new /obj/item/device/sbeacondrop/powersink(src) + new /obj/item/clothing/suit/space/syndicate/black/red(src) + new /obj/item/clothing/head/helmet/space/syndicate/black/red(src) + new /obj/item/device/encryptionkey/syndicate(src) + + if("guns") // 28 tc now + new /obj/item/gun/ballistic/revolver(src) + new /obj/item/ammo_box/a357(src) + new /obj/item/ammo_box/a357(src) + new /obj/item/card/emag(src) + new /obj/item/grenade/plastic/c4(src) + new /obj/item/clothing/gloves/color/latex/nitrile(src) + new /obj/item/clothing/mask/gas/clown_hat(src) + new /obj/item/clothing/under/suit_jacket/really_black(src) + + if("murder") // 28 tc now + new /obj/item/melee/transforming/energy/sword/saber(src) + new /obj/item/clothing/glasses/thermal/syndi(src) + new /obj/item/card/emag(src) + new /obj/item/clothing/shoes/chameleon(src) + new /obj/item/device/encryptionkey/syndicate(src) + new /obj/item/grenade/syndieminibomb(src) + + if("implant") // 55+ tc holy shit what the fuck this is a lottery disguised as fun boxes isn't it? + new /obj/item/implanter/freedom(src) + new /obj/item/implanter/uplink/precharged(src) + new /obj/item/implanter/emp(src) + new /obj/item/implanter/adrenalin(src) + new /obj/item/implanter/explosive(src) + new /obj/item/implanter/storage(src) + + if("hacker") // 26 tc + new /obj/item/aiModule/syndicate(src) + new /obj/item/card/emag(src) + new /obj/item/device/encryptionkey/binary(src) + new /obj/item/aiModule/toyAI(src) + new /obj/item/device/multitool/ai_detect(src) + + if("lordsingulo") // 24 tc + new /obj/item/device/sbeacondrop(src) + new /obj/item/clothing/suit/space/syndicate/black/red(src) + new /obj/item/clothing/head/helmet/space/syndicate/black/red(src) + new /obj/item/card/emag(src) + + if("sabotage") // 26 tc now + new /obj/item/grenade/plastic/c4 (src) + new /obj/item/grenade/plastic/c4 (src) + new /obj/item/device/doorCharge(src) + new /obj/item/device/doorCharge(src) + new /obj/item/device/camera_bug(src) + new /obj/item/device/sbeacondrop/powersink(src) + new /obj/item/cartridge/virus/syndicate(src) + new /obj/item/storage/toolbox/syndicate(src) //To actually get to those places + new /obj/item/pizzabox/bomb + + if("darklord") //20 tc + tk + summon item close enough for now + new /obj/item/twohanded/dualsaber(src) + new /obj/item/dnainjector/telemut/darkbundle(src) + new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) + new /obj/item/card/id/syndicate(src) + new /obj/item/clothing/shoes/chameleon(src) //because slipping while being a dark lord sucks + new /obj/item/spellbook/oneuse/summonitem(src) + + if("sniper") //This shit is unique so can't really balance it around tc, also no silencer because getting killed without ANY indicator on what killed you sucks + new /obj/item/gun/ballistic/automatic/sniper_rifle(src) // 12 tc + new /obj/item/ammo_box/magazine/sniper_rounds/penetrator(src) + new /obj/item/clothing/glasses/thermal/syndi(src) + new /obj/item/clothing/gloves/color/latex/nitrile(src) + new /obj/item/clothing/mask/gas/clown_hat(src) + new /obj/item/clothing/under/suit_jacket/really_black(src) + + if("metaops") // 30 tc + new /obj/item/clothing/suit/space/hardsuit/syndi(src) // 8 tc + new /obj/item/gun/ballistic/automatic/shotgun/bulldog/unrestricted(src) // 8 tc + new /obj/item/implanter/explosive(src) // 2 tc + new /obj/item/ammo_box/magazine/m12g/buckshot(src) // 2 tc + new /obj/item/ammo_box/magazine/m12g/buckshot(src) // 2 tc + new /obj/item/grenade/plastic/c4 (src) // 1 tc + new /obj/item/grenade/plastic/c4 (src) // 1 tc + new /obj/item/card/emag(src) // 6 tc + + if("ninja") // 33 tc worth + new /obj/item/katana(src) // Unique , hard to tell how much tc this is worth. 8 tc? + new /obj/item/implanter/adrenalin(src) // 8 tc + new /obj/item/throwing_star(src) // ~5 tc for all 6 + new /obj/item/throwing_star(src) + new /obj/item/throwing_star(src) + new /obj/item/throwing_star(src) + new /obj/item/throwing_star(src) + new /obj/item/throwing_star(src) + new /obj/item/storage/belt/chameleon(src) // Unique but worth at least 2 tc + new /obj/item/card/id/syndicate(src) // 2 tc + new /obj/item/device/chameleon(src) // 7 tc + +/obj/item/storage/box/syndie_kit + name = "box" + desc = "A sleek, sturdy box." + icon_state = "syndiebox" + illustration = "writing_syndie" + +/obj/item/storage/box/syndie_kit/imp_freedom + name = "boxed freedom implant (with injector)" + +/obj/item/storage/box/syndie_kit/imp_freedom/PopulateContents() + var/obj/item/implanter/O = new(src) + O.imp = new /obj/item/implant/freedom(O) + O.update_icon() + +/obj/item/storage/box/syndie_kit/imp_microbomb + name = "Microbomb Implant (with injector)" + +/obj/item/storage/box/syndie_kit/imp_microbomb/PopulateContents() + var/obj/item/implanter/O = new(src) + O.imp = new /obj/item/implant/explosive(O) + O.update_icon() + +/obj/item/storage/box/syndie_kit/imp_macrobomb + name = "Macrobomb Implant (with injector)" + +/obj/item/storage/box/syndie_kit/imp_macrobomb/PopulateContents() + var/obj/item/implanter/O = new(src) + O.imp = new /obj/item/implant/explosive/macro(O) + O.update_icon() + +/obj/item/storage/box/syndie_kit/imp_uplink + name = "boxed uplink implant (with injector)" + +/obj/item/storage/box/syndie_kit/imp_uplink/PopulateContents() + ..() + var/obj/item/implanter/O = new(src) + O.imp = new /obj/item/implant/uplink(O) + O.update_icon() + +/obj/item/storage/box/syndie_kit/bioterror + name = "bioterror syringe box" + +/obj/item/storage/box/syndie_kit/bioterror/PopulateContents() + for(var/i in 1 to 7) + new /obj/item/reagent_containers/syringe/bioterror(src) + +/obj/item/storage/box/syndie_kit/imp_adrenal + name = "boxed adrenal implant (with injector)" + +/obj/item/storage/box/syndie_kit/imp_adrenal/PopulateContents() + var/obj/item/implanter/O = new(src) + O.imp = new /obj/item/implant/adrenalin(O) + O.update_icon() + +/obj/item/storage/box/syndie_kit/imp_storage + name = "boxed storage implant (with injector)" + +/obj/item/storage/box/syndie_kit/imp_storage/PopulateContents() + new /obj/item/implanter/storage(src) + +/obj/item/storage/box/syndie_kit/space + name = "boxed space suit and helmet" + can_hold = list(/obj/item/clothing/suit/space/syndicate, /obj/item/clothing/head/helmet/space/syndicate) + max_w_class = WEIGHT_CLASS_NORMAL + +/obj/item/storage/box/syndie_kit/space/PopulateContents() + new /obj/item/clothing/suit/space/syndicate/black/red(src) // Black and red is so in right now + new /obj/item/clothing/head/helmet/space/syndicate/black/red(src) + +/obj/item/storage/box/syndie_kit/emp + name = "boxed EMP kit" + +/obj/item/storage/box/syndie_kit/emp/PopulateContents() + new /obj/item/grenade/empgrenade(src) + new /obj/item/grenade/empgrenade(src) + new /obj/item/grenade/empgrenade(src) + new /obj/item/grenade/empgrenade(src) + new /obj/item/grenade/empgrenade(src) + new /obj/item/implanter/emp(src) + +/obj/item/storage/box/syndie_kit/chemical + name = "boxed chemical kit" + storage_slots = 14 + +/obj/item/storage/box/syndie_kit/chemical/PopulateContents() + new /obj/item/reagent_containers/glass/bottle/polonium(src) + new /obj/item/reagent_containers/glass/bottle/venom(src) + new /obj/item/reagent_containers/glass/bottle/neurotoxin2(src) + new /obj/item/reagent_containers/glass/bottle/formaldehyde(src) + new /obj/item/reagent_containers/glass/bottle/spewium(src) + new /obj/item/reagent_containers/glass/bottle/cyanide(src) + new /obj/item/reagent_containers/glass/bottle/histamine(src) + new /obj/item/reagent_containers/glass/bottle/initropidril(src) + new /obj/item/reagent_containers/glass/bottle/pancuronium(src) + new /obj/item/reagent_containers/glass/bottle/sodium_thiopental(src) + new /obj/item/reagent_containers/glass/bottle/coniine(src) + new /obj/item/reagent_containers/glass/bottle/curare(src) + new /obj/item/reagent_containers/glass/bottle/amanitin(src) + new /obj/item/reagent_containers/syringe(src) + +/obj/item/storage/box/syndie_kit/nuke + name = "box" + +/obj/item/storage/box/syndie_kit/nuke/PopulateContents() + new /obj/item/screwdriver/nuke(src) + new /obj/item/nuke_core_container(src) + new /obj/item/paper/guides/antag/nuke_instructions(src) + +/obj/item/storage/box/syndie_kit/supermatter + name = "box" + +/obj/item/storage/box/syndie_kit/supermatter/PopulateContents() + new /obj/item/scalpel/supermatter(src) + new /obj/item/hemostat/supermatter(src) + new /obj/item/nuke_core_container/supermatter(src) + new /obj/item/paper/guides/antag/supermatter_sliver(src) + +/obj/item/storage/box/syndie_kit/tuberculosisgrenade + name = "boxed virus grenade kit" + +/obj/item/storage/box/syndie_kit/tuberculosisgrenade/PopulateContents() + new /obj/item/grenade/chem_grenade/tuberculosis(src) + for(var/i in 1 to 5) + new /obj/item/reagent_containers/hypospray/medipen/tuberculosiscure(src) + new /obj/item/reagent_containers/syringe(src) + new /obj/item/reagent_containers/glass/bottle/tuberculosiscure(src) + +/obj/item/storage/box/syndie_kit/chameleon + name = "chameleon kit" + +/obj/item/storage/box/syndie_kit/chameleon/PopulateContents() + new /obj/item/clothing/under/chameleon(src) + new /obj/item/clothing/suit/chameleon(src) + new /obj/item/clothing/gloves/chameleon(src) + new /obj/item/clothing/shoes/chameleon(src) + new /obj/item/clothing/glasses/chameleon(src) + new /obj/item/clothing/head/chameleon(src) + new /obj/item/clothing/mask/chameleon(src) + new /obj/item/storage/backpack/chameleon(src) + new /obj/item/device/radio/headset/chameleon(src) + new /obj/item/stamp/chameleon(src) + new /obj/item/device/pda/chameleon(src) + new /obj/item/gun/energy/laser/chameleon(src) + +//5*(2*4) = 5*8 = 45, 45 damage if you hit one person with all 5 stars. +//Not counting the damage it will do while embedded (2*4 = 8, at 15% chance) +/obj/item/storage/box/syndie_kit/throwing_weapons/PopulateContents() + new /obj/item/throwing_star(src) + new /obj/item/throwing_star(src) + new /obj/item/throwing_star(src) + new /obj/item/throwing_star(src) + new /obj/item/throwing_star(src) + new /obj/item/restraints/legcuffs/bola/tactical(src) + new /obj/item/restraints/legcuffs/bola/tactical(src) + +/obj/item/storage/box/syndie_kit/cutouts/PopulateContents() + for(var/i in 1 to 3) + new/obj/item/cardboard_cutout/adaptive(src) + new/obj/item/toy/crayon/rainbow(src) + +/obj/item/storage/box/syndie_kit/romerol/PopulateContents() + new /obj/item/reagent_containers/glass/bottle/romerol(src) + new /obj/item/reagent_containers/syringe(src) + new /obj/item/reagent_containers/dropper(src) + +/obj/item/storage/box/syndie_kit/ez_clean/PopulateContents() + for(var/i in 1 to 3) + new/obj/item/grenade/chem_grenade/ez_clean(src) + +/obj/item/storage/box/hug/reverse_revolver/PopulateContents() + new /obj/item/gun/ballistic/revolver/reverse(src) + +/obj/item/storage/box/syndie_kit/mimery/PopulateContents() + new /obj/item/spellbook/oneuse/mimery_blockade(src) + new /obj/item/spellbook/oneuse/mimery_guns(src) + +/obj/item/storage/box/syndie_kit/imp_radio/PopulateContents() + new /obj/item/implanter/radio(src) +>>>>>>> ac17202... Internal radio implant (#33842) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 4e731567f1..dc70ad839f 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -338,6 +338,15 @@ GLOBAL_LIST_INIT(department_radio_keys, list( return message /mob/living/proc/radio(message, message_mode, list/spans, language) + var/obj/item/implant/radio/imp = locate() in src + if(imp && imp.radio.on) + if(message_mode == MODE_HEADSET) + imp.radio.talk_into(src, message, , spans, language) + return ITALICS | REDUCE_RANGE + if(message_mode == MODE_DEPARTMENT || message_mode in GLOB.radiochannels) + imp.radio.talk_into(src, message, message_mode, spans, language) + return ITALICS | REDUCE_RANGE + switch(message_mode) if(MODE_WHISPER) return ITALICS @@ -359,6 +368,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list( if(MODE_BINARY) return ITALICS | REDUCE_RANGE //Does not return 0 since this is only reached by humans, not borgs or AIs. + return 0 /mob/living/say_mod(input, message_mode) diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 8e2ce4b7a0..5bcbaff705 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -199,12 +199,24 @@ to_chat(SM, "You are grateful to be self aware and owe [user.real_name] a great debt. Serve [user.real_name], and assist [user.p_them()] in completing [user.p_their()] goals at any cost.") to_chat(user, "[SM] accepts [src] and suddenly becomes attentive and aware. It worked!") SM.copy_known_languages_from(user, TRUE) + after_success(user, SM) qdel(src) else to_chat(user, "[SM] looks interested for a moment, but then looks back down. Maybe you should try again later.") being_used = 0 ..() +/obj/item/slimepotion/sentience/proc/after_success(mob/living/user, mob/living/simple_animal/SM) + return + +/obj/item/slimepotion/sentience/nuclear + name = "syndicate intelligence potion" + desc = "A miraculous chemical mix that grants human like intelligence to living beings. It has been modified with Syndicate technology to also grant an internal radio implant to the target." + +/obj/item/slimepotion/sentience/nuclear/after_success(mob/living/user, mob/living/simple_animal/SM) + var/obj/item/implant/radio/imp = new(src) + imp.implant(SM, user) + /obj/item/slimepotion/transference name = "consciousness transference potion" desc = "A strange slime-based chemical that, when used, allows the user to transfer their consciousness to a lesser being." diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index ebff0fdbeb..6ced230134 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -1059,9 +1059,9 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. include_modes = list(/datum/game_mode/nuclear) /datum/uplink_item/device_tools/potion - name = "Sentience Potion" - item = /obj/item/slimepotion/sentience - desc = "A potion recovered at great risk by undercover syndicate operatives. Using it will make any animal sentient, and bound to serve you." + name = "Syndicate Sentience Potion" + item = /obj/item/slimepotion/sentience/nuclear + desc = "A potion recovered at great risk by undercover syndicate operatives and then subsequently modified with syndicate technology. Using it will make any animal sentient, and bound to serve you, as well as implanting an internal radio for communication." cost = 4 include_modes = list(/datum/game_mode/nuclear) @@ -1152,6 +1152,12 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. cost = 20 include_modes = list(/datum/game_mode/nuclear) +/datum/uplink_item/implants/radio + name = "Internal Syndicate Radio Implant" + desc = "An implant injected into the body, allowing the use of an internal syndicate radio. Used just like a regular headset, but can be disabled to use external headsets normally and to avoid detection." + item = /obj/item/storage/box/syndie_kit/imp_radio + cost = 4 + // Cybernetics /datum/uplink_item/cyber_implants From 0b9ffdd3e30a09915871c691995720b62cfa4a1d Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Fri, 29 Dec 2017 11:00:13 -0500 Subject: [PATCH 018/104] Prevent infinite loops in orbit checks --- code/modules/orbit/orbit.dm | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/code/modules/orbit/orbit.dm b/code/modules/orbit/orbit.dm index 02a80675aa..913b552a55 100644 --- a/code/modules/orbit/orbit.dm +++ b/code/modules/orbit/orbit.dm @@ -33,7 +33,9 @@ orbiting = null return ..() -/datum/orbit/proc/Check(turf/targetloc) +/datum/orbit/proc/Check(turf/targetloc, list/checked_already = list()) + //Avoid infinite loops for people who end up orbiting themself through another orbiter + checked_already[src] = TRUE if (!orbiter) qdel(src) return @@ -55,9 +57,14 @@ lastloc = orbiter.loc for(var/other_orbit in orbiter.orbiters) var/datum/orbit/OO = other_orbit +<<<<<<< HEAD if(OO == src) +======= + //Skip if checked already + if(checked_already[OO]) +>>>>>>> 23d33a3... Merge pull request #33914 from optimumtact/thegreatestshow continue - OO.Check(targetloc) + OO.Check(targetloc, checked_already) /atom/movable/var/datum/orbit/orbiting = null /atom/var/list/orbiters = null From 8059894d7d830c0b6ef7659a4161ac5fcfbf5498 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Fri, 29 Dec 2017 11:01:45 -0500 Subject: [PATCH 019/104] Merge pull request #33903 from AnturK/pilot-fixes Fixes mobs targeting from inside things. --- code/modules/mob/living/simple_animal/hostile/hostile.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 10d9fd93d7..6432eb0484 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -235,7 +235,8 @@ LoseTarget() return 0 if(target in possible_targets) - if(target.z != z) + var/turf/T = get_turf(src) + if(target.z != T.z) LoseTarget() return 0 var/target_distance = get_dist(targets_from,target) @@ -417,7 +418,7 @@ mob/living/simple_animal/hostile/proc/DestroySurroundings() // for use with mega if(buckled) buckled.attack_animal(src) if(!isturf(targets_from.loc) && targets_from.loc != null)//Did someone put us in something? - var/atom/A = get_turf(targets_from) + var/atom/A = targets_from.loc A.attack_animal(src)//Bang on it till we get out From 459d4f35c730f7747d632e1c4ea748cdf3a0f181 Mon Sep 17 00:00:00 2001 From: MoreRobustThanYou Date: Fri, 29 Dec 2017 11:07:34 -0500 Subject: [PATCH 021/104] Monkeymode fixes (#33796) * Monkey fixes * Update say.dm --- code/datums/antagonists/monkey.dm | 3 +-- code/modules/mob/living/say.dm | 16 +++------------- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/code/datums/antagonists/monkey.dm b/code/datums/antagonists/monkey.dm index b1c5642a39..518161b51b 100644 --- a/code/datums/antagonists/monkey.dm +++ b/code/datums/antagonists/monkey.dm @@ -16,8 +16,7 @@ var/datum/disease/D = new /datum/disease/transformation/jungle_fever/monkeymode if(!owner.current.HasDisease(D)) - D.affected_mob = owner - owner.current.viruses += D + owner.current.AddDisease(D) else QDEL_NULL(D) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index fa315068ac..6eb4f0b77c 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -20,11 +20,6 @@ GLOBAL_LIST_INIT(department_radio_keys, list( "t" = "Syndicate", "y" = "CentCom", - // Species - "b" = "binary", - "g" = "changeling", - "a" = "alientalk", - // Admin "p" = "admin", "d" = "deadmin", @@ -55,11 +50,6 @@ GLOBAL_LIST_INIT(department_radio_keys, list( "å" = "Syndicate", "í" = "CentCom", - // Species - "è" = "binary", - "ï" = "changeling", - "ô" = "alientalk", - // Admin "ç" = "admin", "â" = "deadmin", @@ -81,13 +71,14 @@ GLOBAL_LIST_INIT(department_radio_keys, list( if(!message || message == "") return + var/datum/saymode/saymode = SSradio.saymodes[talk_key] var/message_mode = get_message_mode(message) var/original_message = message var/in_critical = InCritical() if(one_character_prefix[message_mode]) message = copytext(message, 2) - else if(message_mode) + else if(message_mode || saymode) message = copytext(message, 3) if(findtext(message, " ", 1, 2)) message = copytext(message, 2) @@ -135,8 +126,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list( // AIs use inherent channels for the holopad. Most inherent channels // ignore the language argument however. - var/datum/saymode/SM = SSradio.saymodes[talk_key] - if(SM && !SM.handle_message(src, message, language)) + if(saymode && !saymode.handle_message(src, message, language)) return if(!can_speak_vocal(message)) From d38a4a2aa53637caa87d2d88e1f3586abcf6d679 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Fri, 29 Dec 2017 11:09:56 -0500 Subject: [PATCH 023/104] Merge pull request #33905 from ShizCalev/jumpsuit-fix Fixes being able to adjust jumpsuits without an adjust state w/ chameleon & random jumpsuit --- code/game/machinery/vending.dm | 16 ++++++++-------- code/game/objects/items/devices/flashlight.dm | 2 +- code/game/objects/structures/bedsheet_bin.dm | 2 +- code/game/objects/structures/manned_turret.dm | 8 ++++---- code/modules/clothing/chameleon.dm | 1 + code/modules/clothing/gloves/color.dm | 10 +++------- code/modules/clothing/under/color.dm | 10 ++++------ 7 files changed, 22 insertions(+), 27 deletions(-) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index d3598d4866..1d0228d737 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -684,10 +684,10 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C desc = "Uh oh!" /obj/machinery/vending/snack/random/Initialize() - ..() - var/T = pick(subtypesof(/obj/machinery/vending/snack) - /obj/machinery/vending/snack/random) - new T(get_turf(src)) - return INITIALIZE_HINT_QDEL + ..() + var/T = pick(subtypesof(/obj/machinery/vending/snack) - /obj/machinery/vending/snack/random) + new T(loc) + return INITIALIZE_HINT_QDEL /obj/machinery/vending/snack/blue icon_state = "snackblue" @@ -737,10 +737,10 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C desc = "Uh oh!" /obj/machinery/vending/cola/random/Initialize() - . = ..() - var/T = pick(subtypesof(/obj/machinery/vending/cola) - /obj/machinery/vending/cola/random) - new T(get_turf(src)) - return INITIALIZE_HINT_QDEL + ..() + var/T = pick(subtypesof(/obj/machinery/vending/cola) - /obj/machinery/vending/cola/random) + new T(loc) + return INITIALIZE_HINT_QDEL /obj/machinery/vending/cola/blue icon_state = "Cola_Machine" diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 739ea246b7..7fc8df79ee 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -493,7 +493,7 @@ color = null /obj/item/device/flashlight/glowstick/random/Initialize() - . = ..() + ..() var/T = pick(typesof(/obj/item/device/flashlight/glowstick) - /obj/item/device/flashlight/glowstick/random) new T(loc) return INITIALIZE_HINT_QDEL diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index aa9acae22c..e97aedaf98 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -231,10 +231,10 @@ LINEN BINS desc = "If you're reading this description ingame, something has gone wrong! Honk!" /obj/item/bedsheet/random/Initialize() - . = INITIALIZE_HINT_QDEL ..() var/type = pick(typesof(/obj/item/bedsheet) - /obj/item/bedsheet/random) new type(loc) + return INITIALIZE_HINT_QDEL /obj/structure/bedsheetbin name = "linen bin" diff --git a/code/game/objects/structures/manned_turret.dm b/code/game/objects/structures/manned_turret.dm index ceef3ef0c0..afcace17a7 100644 --- a/code/game/objects/structures/manned_turret.dm +++ b/code/game/objects/structures/manned_turret.dm @@ -184,10 +184,10 @@ var/obj/machinery/manned_turret/turret /obj/item/gun_control/Initialize() - . = ..() - turret = loc - if(!istype(turret)) - return INITIALIZE_HINT_QDEL + . = ..() + turret = loc + if(!istype(turret)) + return INITIALIZE_HINT_QDEL /obj/item/gun_control/Destroy() turret = null diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index dd876f3701..42a85efbc6 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -206,6 +206,7 @@ sensor_mode = SENSOR_OFF //Hey who's this guy on the Syndicate Shuttle?? random_sensor = FALSE resistance_flags = NONE + can_adjust = FALSE armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) var/datum/action/item_action/chameleon/change/chameleon_action diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index 4f108a505f..a9cb528f2e 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -192,7 +192,7 @@ item_state = "wgloves" item_color = "mime" -/obj/item/clothing/gloves/color/random/New() +/obj/item/clothing/gloves/color/random/Initialize() ..() var/list/gloves = list( /obj/item/clothing/gloves/color/orange = 1, @@ -205,9 +205,5 @@ /obj/item/clothing/gloves/color/brown = 1) var/obj/item/clothing/gloves/color/selected = pick(gloves) - - name = initial(selected.name) - desc = initial(selected.desc) - icon_state = initial(selected.icon_state) - item_state = initial(selected.item_state) - item_color = initial(selected.item_color) + new selected(loc) + return INITIALIZE_HINT_QDEL diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index 2ff546a6eb..4ccfd44b17 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -4,13 +4,11 @@ /obj/item/clothing/under/color/random icon_state = "random_jumpsuit" -/obj/item/clothing/under/color/random/New() +/obj/item/clothing/under/color/random/Initialize() ..() - var/obj/item/clothing/under/color/C = pick(subtypesof(/obj/item/clothing/under/color) - /obj/item/clothing/under/color/random) - name = initial(C.name) - icon_state = initial(C.icon_state) - item_state = initial(C.item_state) - item_color = initial(C.item_color) + var/obj/item/clothing/under/color/C = pick(subtypesof(/obj/item/clothing/under/color) - /obj/item/clothing/under/color/random - /obj/item/clothing/under/color/grey/glorf - /obj/item/clothing/under/color/black/ghost) + new C(loc) + return INITIALIZE_HINT_QDEL /obj/item/clothing/under/color/black name = "black jumpsuit" From 0c84651ec45a8ee05ceeaa0c9625c90a4c34f1b3 Mon Sep 17 00:00:00 2001 From: ShizCalev Date: Thu, 28 Dec 2017 15:54:47 -0500 Subject: [PATCH 025/104] white and rainbow --- code/modules/clothing/gloves/color.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index 4f108a505f..11ae549e1b 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -202,7 +202,9 @@ /obj/item/clothing/gloves/color/green = 1, /obj/item/clothing/gloves/color/grey = 1, /obj/item/clothing/gloves/color/light_brown = 1, - /obj/item/clothing/gloves/color/brown = 1) + /obj/item/clothing/gloves/color/brown = 1, + /obj/item/clothing/gloves/color/white = 1, + /obj/item/clothing/gloves/color/rainbow = 1) var/obj/item/clothing/gloves/color/selected = pick(gloves) From a958de3d96d14dece4a8ba562b87ccf2e582f201 Mon Sep 17 00:00:00 2001 From: oranges Date: Sat, 30 Dec 2017 12:10:41 +1300 Subject: [PATCH 027/104] Fixes assistants spawning naked --- code/modules/clothing/gloves/color.dm | 9 +++++++++ code/modules/clothing/under/color.dm | 10 ++++++++++ 2 files changed, 19 insertions(+) diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index 4f108a505f..83e8f817c5 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -205,9 +205,18 @@ /obj/item/clothing/gloves/color/brown = 1) var/obj/item/clothing/gloves/color/selected = pick(gloves) +<<<<<<< HEAD name = initial(selected.name) desc = initial(selected.desc) icon_state = initial(selected.icon_state) item_state = initial(selected.item_state) item_color = initial(selected.item_color) +======= + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + H.equip_to_slot_or_del(new selected(H), slot_gloves) + else + new selected(loc) + return INITIALIZE_HINT_QDEL +>>>>>>> c063902... Merge pull request #33930 from ShizCalev/undersuit-fix diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index 2ff546a6eb..975ca26061 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -6,11 +6,21 @@ /obj/item/clothing/under/color/random/New() ..() +<<<<<<< HEAD var/obj/item/clothing/under/color/C = pick(subtypesof(/obj/item/clothing/under/color) - /obj/item/clothing/under/color/random) name = initial(C.name) icon_state = initial(C.icon_state) item_state = initial(C.item_state) item_color = initial(C.item_color) +======= + var/obj/item/clothing/under/color/C = pick(subtypesof(/obj/item/clothing/under/color) - /obj/item/clothing/under/color/random - /obj/item/clothing/under/color/grey/glorf - /obj/item/clothing/under/color/black/ghost) + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + H.equip_to_slot_or_del(new C(H), slot_w_uniform) //or else you end up with naked assistants running around everywhere... + else + new C(loc) + return INITIALIZE_HINT_QDEL +>>>>>>> c063902... Merge pull request #33930 from ShizCalev/undersuit-fix /obj/item/clothing/under/color/black name = "black jumpsuit" From ac7750202b6200c27f955791d4d1b5ded46cd666 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Fri, 29 Dec 2017 18:38:05 -0600 Subject: [PATCH 028/104] Update shuttle_rotate.dm --- code/modules/shuttle/shuttle_rotate.dm | 4 ---- 1 file changed, 4 deletions(-) diff --git a/code/modules/shuttle/shuttle_rotate.dm b/code/modules/shuttle/shuttle_rotate.dm index bd86f84356..28cb089597 100644 --- a/code/modules/shuttle/shuttle_rotate.dm +++ b/code/modules/shuttle/shuttle_rotate.dm @@ -104,9 +104,6 @@ If ever any of these procs are useful for non-shuttles, rename it to proc/rotate //prevents shuttles attempting to rotate this since it messes up sprites /obj/machinery/gravity_generator/shuttleRotate(rotation, params) params = NONE -<<<<<<< HEAD - return ..() -======= return ..() /obj/machinery/door/airlock/shuttleRotate(rotation, params) @@ -114,4 +111,3 @@ If ever any of these procs are useful for non-shuttles, rename it to proc/rotate if(cyclelinkeddir) cyclelinkeddir = angle2dir(rotation+dir2angle(cyclelinkeddir)) cyclelinkairlock() ->>>>>>> 6da0107... Makes cyclelinkeddir rotate with shuttle (#33734) From 010c1e17ad377e9e47d7c597d853d12636c8ff9d Mon Sep 17 00:00:00 2001 From: LetterJay Date: Fri, 29 Dec 2017 18:38:32 -0600 Subject: [PATCH 029/104] Update client_procs.dm --- code/modules/client/client_procs.dm | 4 ---- 1 file changed, 4 deletions(-) diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index c5385b2abb..facfe599c4 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -75,12 +75,8 @@ //Logs all hrefs, except chat pings if(!(href_list["_src_"] == "chat" && href_list["proc"] == "ping" && LAZYLEN(href_list) == 2)) -<<<<<<< HEAD - WRITE_FILE(GLOB.world_href_log, "[time_stamp(show_ds = TRUE)] [src] (usr:[usr]) || [hsrc ? "[hsrc] " : ""][href]
") -======= WRITE_FILE(GLOB.world_href_log, "[time_stamp(show_ds = TRUE)] [src] (usr:[usr]\[[COORD(usr)]\]) || [hsrc ? "[hsrc] " : ""][href]
") ->>>>>>> 0687e88... Merge pull request #33835 from kevinz000/patch-415 // Admin PM if(href_list["priv_msg"]) cmd_admin_pm(href_list["priv_msg"],null) From 86c5f3cb0b11a4c96652c4cc288c9fbb788741f3 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Fri, 29 Dec 2017 18:39:28 -0600 Subject: [PATCH 030/104] Update detective_work.dm --- code/modules/detectivework/detective_work.dm | 122 ------------------- 1 file changed, 122 deletions(-) diff --git a/code/modules/detectivework/detective_work.dm b/code/modules/detectivework/detective_work.dm index 51be073081..5bf4ad27b8 100644 --- a/code/modules/detectivework/detective_work.dm +++ b/code/modules/detectivework/detective_work.dm @@ -1,124 +1,3 @@ -<<<<<<< HEAD -//CONTAINS: Suit fibers and Detective's Scanning Computer - -/atom/var/list/suit_fibers - -/atom/proc/add_fibers(mob/living/carbon/human/M) - if(M.gloves && istype(M.gloves, /obj/item/clothing/)) - var/obj/item/clothing/gloves/G = M.gloves - if(G.transfer_blood > 1) //bloodied gloves transfer blood to touched objects - if(add_blood(G.blood_DNA)) //only reduces the bloodiness of our gloves if the item wasn't already bloody - G.transfer_blood-- - else if(M.bloody_hands > 1) - if(add_blood(M.blood_DNA)) - M.bloody_hands-- - if(!suit_fibers) - suit_fibers = list() - var/fibertext - var/item_multiplier = isitem(src)?1.2:1 - if(M.wear_suit) - fibertext = "Material from \a [M.wear_suit]." - if(prob(10*item_multiplier) && !(fibertext in suit_fibers)) - suit_fibers += fibertext - if(!(M.wear_suit.body_parts_covered & CHEST)) - if(M.w_uniform) - fibertext = "Fibers from \a [M.w_uniform]." - if(prob(12*item_multiplier) && !(fibertext in suit_fibers)) //Wearing a suit means less of the uniform exposed. - suit_fibers += fibertext - if(!(M.wear_suit.body_parts_covered & HANDS)) - if(M.gloves) - fibertext = "Material from a pair of [M.gloves.name]." - if(prob(20*item_multiplier) && !(fibertext in suit_fibers)) - suit_fibers += fibertext - else if(M.w_uniform) - fibertext = "Fibers from \a [M.w_uniform]." - if(prob(15*item_multiplier) && !(fibertext in suit_fibers)) - // "Added fibertext: [fibertext]" - suit_fibers += fibertext - if(M.gloves) - fibertext = "Material from a pair of [M.gloves.name]." - if(prob(20*item_multiplier) && !(fibertext in suit_fibers)) - suit_fibers += "Material from a pair of [M.gloves.name]." - else if(M.gloves) - fibertext = "Material from a pair of [M.gloves.name]." - if(prob(20*item_multiplier) && !(fibertext in suit_fibers)) - suit_fibers += "Material from a pair of [M.gloves.name]." - - -/atom/proc/add_hiddenprint(mob/living/M) - if(!M || !M.key) - return - - if(!fingerprintshidden) //Add the list if it does not exist - fingerprintshidden = list() - - var/hasgloves = "" - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.gloves) - hasgloves = "(gloves)" - - var/current_time = time_stamp() - if(!fingerprintshidden[M.key]) - fingerprintshidden[M.key] = "First: [M.real_name]\[[current_time]\][hasgloves]. Ckey: [M.ckey]" - else - var/laststamppos = findtext(fingerprintshidden[M.key], " Last: ") - if(laststamppos) - fingerprintshidden[M.key] = copytext(fingerprintshidden[M.key], 1, laststamppos) - fingerprintshidden[M.key] += " Last: [M.real_name]\[[current_time]\][hasgloves]. Ckey: [M.ckey]" - - fingerprintslast = M.ckey - - -//Set ignoregloves to add prints irrespective of the mob having gloves on. -/atom/proc/add_fingerprint(mob/living/M, ignoregloves = 0) - if(!M || !M.key) - return - - add_hiddenprint(M) - - if(ishuman(M)) - var/mob/living/carbon/human/H = M - - add_fibers(H) - - if(H.gloves) //Check if the gloves (if any) hide fingerprints - var/obj/item/clothing/gloves/G = H.gloves - if(G.transfer_prints) - ignoregloves = 1 - - if(!ignoregloves) - H.gloves.add_fingerprint(H, 1) //ignoregloves = 1 to avoid infinite loop. - return - - if(!fingerprints) //Add the list if it does not exist - fingerprints = list() - var/full_print = md5(H.dna.uni_identity) - fingerprints[full_print] = full_print - - - - -/atom/proc/transfer_fingerprints_to(atom/A) - - // Make sure everything are lists. - if(!islist(A.fingerprints)) - A.fingerprints = list() - if(!islist(A.fingerprintshidden)) - A.fingerprintshidden = list() - - if(!islist(fingerprints)) - fingerprints = list() - if(!islist(fingerprintshidden)) - fingerprintshidden = list() - - // Transfer - if(fingerprints) - A.fingerprints |= fingerprints.Copy() //detective - if(fingerprintshidden) - A.fingerprintshidden |= fingerprintshidden.Copy() //admin - A.fingerprintslast = fingerprintslast -======= //CONTAINS: Suit fibers and Detective's Scanning Computer /atom/proc/return_fingerprints() @@ -221,4 +100,3 @@ A.add_fingerprint_list(return_fingerprints()) A.add_hiddenprint_list(return_hiddenprints()) A.fingerprintslast = fingerprintslast ->>>>>>> 9d0e97f... Merge pull request #32311 from kevinz000/component_forensics From 6f8c2c1daf6cfd76ad1cd9309e385295c275cdc2 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Fri, 29 Dec 2017 18:40:58 -0600 Subject: [PATCH 031/104] Update item_attack.dm --- code/_onclick/item_attack.dm | 4 ---- 1 file changed, 4 deletions(-) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index f9c3c9668d..8a5b9ba519 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -58,13 +58,9 @@ SendSignal(COMSIG_ITEM_ATTACK, M, user) if(flags_1 & NOBLUDGEON_1) return -<<<<<<< HEAD - if(user.disabilities & PACIFISM) -======= if(force && user.has_disability(DISABILITY_PACIFISM)) to_chat(user, "You don't want to harm other living beings!") ->>>>>>> 5d761c5... [Ready]Adds the Pax reagent, small tweaks to pacifism (#33663) return if(!force) From d820575f783cf2a177a264ded8bf2e9381ddc2c4 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Fri, 29 Dec 2017 18:41:57 -0600 Subject: [PATCH 032/104] Update orbit.dm --- code/modules/orbit/orbit.dm | 4 ---- 1 file changed, 4 deletions(-) diff --git a/code/modules/orbit/orbit.dm b/code/modules/orbit/orbit.dm index 913b552a55..540e0cf7d5 100644 --- a/code/modules/orbit/orbit.dm +++ b/code/modules/orbit/orbit.dm @@ -57,12 +57,8 @@ lastloc = orbiter.loc for(var/other_orbit in orbiter.orbiters) var/datum/orbit/OO = other_orbit -<<<<<<< HEAD - if(OO == src) -======= //Skip if checked already if(checked_already[OO]) ->>>>>>> 23d33a3... Merge pull request #33914 from optimumtact/thegreatestshow continue OO.Check(targetloc, checked_already) From 2d9a70a487b3010d7ad2638927ece6bdf46947c4 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Fri, 29 Dec 2017 18:42:44 -0600 Subject: [PATCH 033/104] Update uplink_kits.dm --- .../game/objects/items/storage/uplink_kits.dm | 310 ------------------ 1 file changed, 310 deletions(-) diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 668ab0b748..fb44d094c7 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -1,312 +1,3 @@ -<<<<<<< HEAD -/obj/item/storage/box/syndicate - -/obj/item/storage/box/syndicate/PopulateContents() - switch (pickweight(list("bloodyspai" = 3, "stealth" = 2, "bond" = 2, "screwed" = 2, "sabotage" = 3, "guns" = 2, "murder" = 2, "implant" = 1, "hacker" = 3, "darklord" = 1, "sniper" = 1, "metaops" = 1, "ninja" = 1))) - if("bloodyspai") // 27 tc now this is more right - new /obj/item/clothing/under/chameleon(src) // 2 tc since it's not the full set - new /obj/item/clothing/mask/chameleon(src) // Goes with above - new /obj/item/card/id/syndicate(src) // 2 tc - new /obj/item/clothing/shoes/chameleon(src) // 2 tc - new /obj/item/device/camera_bug(src) // 1 tc - new /obj/item/device/multitool/ai_detect(src) // 1 tc - new /obj/item/device/encryptionkey/syndicate(src) // 2 tc - new /obj/item/reagent_containers/syringe/mulligan(src) // 4 tc - new /obj/item/switchblade(src) //I'll count this as 2 tc - new /obj/item/storage/fancy/cigarettes/cigpack_syndicate (src) // 2 tc this shit heals - new /obj/item/device/flashlight/emp(src) // 2 tc - new /obj/item/device/chameleon(src) // 7 tc - - if("stealth") // 31 tc - new /obj/item/gun/energy/kinetic_accelerator/crossbow(src) - new /obj/item/pen/sleepy(src) - new /obj/item/device/healthanalyzer/rad_laser(src) - new /obj/item/device/chameleon(src) - new /obj/item/soap/syndie(src) - new /obj/item/clothing/glasses/thermal/syndi(src) - - if("bond") // 29 tc - new /obj/item/gun/ballistic/automatic/pistol(src) - new /obj/item/suppressor(src) - new /obj/item/ammo_box/magazine/m10mm(src) - new /obj/item/ammo_box/magazine/m10mm(src) - new /obj/item/clothing/under/chameleon(src) - new /obj/item/card/id/syndicate(src) - new /obj/item/reagent_containers/syringe/stimulants(src) - - if("screwed") // 29 tc - new /obj/item/device/sbeacondrop/bomb(src) - new /obj/item/grenade/syndieminibomb(src) - new /obj/item/device/sbeacondrop/powersink(src) - new /obj/item/clothing/suit/space/syndicate/black/red(src) - new /obj/item/clothing/head/helmet/space/syndicate/black/red(src) - new /obj/item/device/encryptionkey/syndicate(src) - - if("guns") // 28 tc now - new /obj/item/gun/ballistic/revolver(src) - new /obj/item/ammo_box/a357(src) - new /obj/item/ammo_box/a357(src) - new /obj/item/card/emag(src) - new /obj/item/grenade/plastic/c4(src) - new /obj/item/clothing/gloves/color/latex/nitrile(src) - new /obj/item/clothing/mask/gas/clown_hat(src) - new /obj/item/clothing/under/suit_jacket/really_black(src) - - if("murder") // 28 tc now - new /obj/item/melee/transforming/energy/sword/saber(src) - new /obj/item/clothing/glasses/thermal/syndi(src) - new /obj/item/card/emag(src) - new /obj/item/clothing/shoes/chameleon(src) - new /obj/item/device/encryptionkey/syndicate(src) - new /obj/item/grenade/syndieminibomb(src) - - if("implant") // 55+ tc holy shit what the fuck this is a lottery disguised as fun boxes isn't it? - new /obj/item/implanter/freedom(src) - new /obj/item/implanter/uplink/precharged(src) - new /obj/item/implanter/emp(src) - new /obj/item/implanter/adrenalin(src) - new /obj/item/implanter/explosive(src) - new /obj/item/implanter/storage(src) - - if("hacker") // 26 tc - new /obj/item/aiModule/syndicate(src) - new /obj/item/card/emag(src) - new /obj/item/device/encryptionkey/binary(src) - new /obj/item/aiModule/toyAI(src) - new /obj/item/device/multitool/ai_detect(src) - - if("lordsingulo") // 24 tc - new /obj/item/device/sbeacondrop(src) - new /obj/item/clothing/suit/space/syndicate/black/red(src) - new /obj/item/clothing/head/helmet/space/syndicate/black/red(src) - new /obj/item/card/emag(src) - - if("sabotage") // 26 tc now - new /obj/item/grenade/plastic/c4 (src) - new /obj/item/grenade/plastic/c4 (src) - new /obj/item/device/doorCharge(src) - new /obj/item/device/doorCharge(src) - new /obj/item/device/camera_bug(src) - new /obj/item/device/sbeacondrop/powersink(src) - new /obj/item/cartridge/virus/syndicate(src) - new /obj/item/storage/toolbox/syndicate(src) //To actually get to those places - new /obj/item/pizzabox/bomb - - if("darklord") //20 tc + tk + summon item close enough for now - new /obj/item/twohanded/dualsaber(src) - new /obj/item/dnainjector/telemut/darkbundle(src) - new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) - new /obj/item/card/id/syndicate(src) - new /obj/item/clothing/shoes/chameleon(src) //because slipping while being a dark lord sucks - new /obj/item/spellbook/oneuse/summonitem(src) - - if("sniper") //This shit is unique so can't really balance it around tc, also no silencer because getting killed without ANY indicator on what killed you sucks - new /obj/item/gun/ballistic/automatic/sniper_rifle(src) // 12 tc - new /obj/item/ammo_box/magazine/sniper_rounds/penetrator(src) - new /obj/item/clothing/glasses/thermal/syndi(src) - new /obj/item/clothing/gloves/color/latex/nitrile(src) - new /obj/item/clothing/mask/gas/clown_hat(src) - new /obj/item/clothing/under/suit_jacket/really_black(src) - - if("metaops") // 30 tc - new /obj/item/clothing/suit/space/hardsuit/syndi(src) // 8 tc - new /obj/item/gun/ballistic/automatic/shotgun/bulldog/unrestricted(src) // 8 tc - new /obj/item/implanter/explosive(src) // 2 tc - new /obj/item/ammo_box/magazine/m12g/buckshot(src) // 2 tc - new /obj/item/ammo_box/magazine/m12g/buckshot(src) // 2 tc - new /obj/item/grenade/plastic/c4 (src) // 1 tc - new /obj/item/grenade/plastic/c4 (src) // 1 tc - new /obj/item/card/emag(src) // 6 tc - - if("ninja") // 33 tc worth - new /obj/item/katana(src) // Unique , hard to tell how much tc this is worth. 8 tc? - new /obj/item/implanter/adrenalin(src) // 8 tc - new /obj/item/throwing_star(src) // ~5 tc for all 6 - new /obj/item/throwing_star(src) - new /obj/item/throwing_star(src) - new /obj/item/throwing_star(src) - new /obj/item/throwing_star(src) - new /obj/item/throwing_star(src) - new /obj/item/storage/belt/chameleon(src) // Unique but worth at least 2 tc - new /obj/item/card/id/syndicate(src) // 2 tc - new /obj/item/device/chameleon(src) // 7 tc - -/obj/item/storage/box/syndie_kit - name = "box" - desc = "A sleek, sturdy box." - icon_state = "syndiebox" - illustration = "writing_syndie" - -/obj/item/storage/box/syndie_kit/imp_freedom - name = "boxed freedom implant (with injector)" - -/obj/item/storage/box/syndie_kit/imp_freedom/PopulateContents() - var/obj/item/implanter/O = new(src) - O.imp = new /obj/item/implant/freedom(O) - O.update_icon() - -/obj/item/storage/box/syndie_kit/imp_microbomb - name = "Microbomb Implant (with injector)" - -/obj/item/storage/box/syndie_kit/imp_microbomb/PopulateContents() - var/obj/item/implanter/O = new(src) - O.imp = new /obj/item/implant/explosive(O) - O.update_icon() - -/obj/item/storage/box/syndie_kit/imp_macrobomb - name = "Macrobomb Implant (with injector)" - -/obj/item/storage/box/syndie_kit/imp_macrobomb/PopulateContents() - var/obj/item/implanter/O = new(src) - O.imp = new /obj/item/implant/explosive/macro(O) - O.update_icon() - -/obj/item/storage/box/syndie_kit/imp_uplink - name = "boxed uplink implant (with injector)" - -/obj/item/storage/box/syndie_kit/imp_uplink/PopulateContents() - ..() - var/obj/item/implanter/O = new(src) - O.imp = new /obj/item/implant/uplink(O) - O.update_icon() - -/obj/item/storage/box/syndie_kit/bioterror - name = "bioterror syringe box" - -/obj/item/storage/box/syndie_kit/bioterror/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/reagent_containers/syringe/bioterror(src) - -/obj/item/storage/box/syndie_kit/imp_adrenal - name = "boxed adrenal implant (with injector)" - -/obj/item/storage/box/syndie_kit/imp_adrenal/PopulateContents() - var/obj/item/implanter/O = new(src) - O.imp = new /obj/item/implant/adrenalin(O) - O.update_icon() - -/obj/item/storage/box/syndie_kit/imp_storage - name = "boxed storage implant (with injector)" - -/obj/item/storage/box/syndie_kit/imp_storage/PopulateContents() - new /obj/item/implanter/storage(src) - -/obj/item/storage/box/syndie_kit/space - name = "boxed space suit and helmet" - can_hold = list(/obj/item/clothing/suit/space/syndicate, /obj/item/clothing/head/helmet/space/syndicate) - max_w_class = WEIGHT_CLASS_NORMAL - -/obj/item/storage/box/syndie_kit/space/PopulateContents() - new /obj/item/clothing/suit/space/syndicate/black/red(src) // Black and red is so in right now - new /obj/item/clothing/head/helmet/space/syndicate/black/red(src) - -/obj/item/storage/box/syndie_kit/emp - name = "boxed EMP kit" - -/obj/item/storage/box/syndie_kit/emp/PopulateContents() - new /obj/item/grenade/empgrenade(src) - new /obj/item/grenade/empgrenade(src) - new /obj/item/grenade/empgrenade(src) - new /obj/item/grenade/empgrenade(src) - new /obj/item/grenade/empgrenade(src) - new /obj/item/implanter/emp(src) - -/obj/item/storage/box/syndie_kit/chemical - name = "boxed chemical kit" - storage_slots = 14 - -/obj/item/storage/box/syndie_kit/chemical/PopulateContents() - new /obj/item/reagent_containers/glass/bottle/polonium(src) - new /obj/item/reagent_containers/glass/bottle/venom(src) - new /obj/item/reagent_containers/glass/bottle/neurotoxin2(src) - new /obj/item/reagent_containers/glass/bottle/formaldehyde(src) - new /obj/item/reagent_containers/glass/bottle/spewium(src) - new /obj/item/reagent_containers/glass/bottle/cyanide(src) - new /obj/item/reagent_containers/glass/bottle/histamine(src) - new /obj/item/reagent_containers/glass/bottle/initropidril(src) - new /obj/item/reagent_containers/glass/bottle/pancuronium(src) - new /obj/item/reagent_containers/glass/bottle/sodium_thiopental(src) - new /obj/item/reagent_containers/glass/bottle/coniine(src) - new /obj/item/reagent_containers/glass/bottle/curare(src) - new /obj/item/reagent_containers/glass/bottle/amanitin(src) - new /obj/item/reagent_containers/syringe(src) - -/obj/item/storage/box/syndie_kit/nuke - name = "box" - -/obj/item/storage/box/syndie_kit/nuke/PopulateContents() - new /obj/item/screwdriver/nuke(src) - new /obj/item/nuke_core_container(src) - new /obj/item/paper/guides/antag/nuke_instructions(src) - -/obj/item/storage/box/syndie_kit/supermatter - name = "box" - -/obj/item/storage/box/syndie_kit/supermatter/PopulateContents() - new /obj/item/scalpel/supermatter(src) - new /obj/item/hemostat/supermatter(src) - new /obj/item/nuke_core_container/supermatter(src) - new /obj/item/paper/guides/antag/supermatter_sliver(src) - -/obj/item/storage/box/syndie_kit/tuberculosisgrenade - name = "boxed virus grenade kit" - -/obj/item/storage/box/syndie_kit/tuberculosisgrenade/PopulateContents() - new /obj/item/grenade/chem_grenade/tuberculosis(src) - for(var/i in 1 to 5) - new /obj/item/reagent_containers/hypospray/medipen/tuberculosiscure(src) - new /obj/item/reagent_containers/syringe(src) - new /obj/item/reagent_containers/glass/bottle/tuberculosiscure(src) - -/obj/item/storage/box/syndie_kit/chameleon - name = "chameleon kit" - -/obj/item/storage/box/syndie_kit/chameleon/PopulateContents() - new /obj/item/clothing/under/chameleon(src) - new /obj/item/clothing/suit/chameleon(src) - new /obj/item/clothing/gloves/chameleon(src) - new /obj/item/clothing/shoes/chameleon(src) - new /obj/item/clothing/glasses/chameleon(src) - new /obj/item/clothing/head/chameleon(src) - new /obj/item/clothing/mask/chameleon(src) - new /obj/item/storage/backpack/chameleon(src) - new /obj/item/device/radio/headset/chameleon(src) - new /obj/item/stamp/chameleon(src) - new /obj/item/device/pda/chameleon(src) - new /obj/item/gun/energy/laser/chameleon(src) - -//5*(2*4) = 5*8 = 45, 45 damage if you hit one person with all 5 stars. -//Not counting the damage it will do while embedded (2*4 = 8, at 15% chance) -/obj/item/storage/box/syndie_kit/throwing_weapons/PopulateContents() - new /obj/item/throwing_star(src) - new /obj/item/throwing_star(src) - new /obj/item/throwing_star(src) - new /obj/item/throwing_star(src) - new /obj/item/throwing_star(src) - new /obj/item/restraints/legcuffs/bola/tactical(src) - new /obj/item/restraints/legcuffs/bola/tactical(src) - -/obj/item/storage/box/syndie_kit/cutouts/PopulateContents() - for(var/i in 1 to 3) - new/obj/item/cardboard_cutout/adaptive(src) - new/obj/item/toy/crayon/rainbow(src) - -/obj/item/storage/box/syndie_kit/romerol/PopulateContents() - new /obj/item/reagent_containers/glass/bottle/romerol(src) - new /obj/item/reagent_containers/syringe(src) - new /obj/item/reagent_containers/dropper(src) - -/obj/item/storage/box/syndie_kit/ez_clean/PopulateContents() - for(var/i in 1 to 3) - new/obj/item/grenade/chem_grenade/ez_clean(src) - -/obj/item/storage/box/hug/reverse_revolver/PopulateContents() - new /obj/item/gun/ballistic/revolver/reverse(src) - -/obj/item/storage/box/syndie_kit/mimery/PopulateContents() - new /obj/item/spellbook/oneuse/mimery_blockade(src) - new /obj/item/spellbook/oneuse/mimery_guns(src) -======= /obj/item/storage/box/syndicate /obj/item/storage/box/syndicate/PopulateContents() @@ -617,4 +308,3 @@ /obj/item/storage/box/syndie_kit/imp_radio/PopulateContents() new /obj/item/implanter/radio(src) ->>>>>>> ac17202... Internal radio implant (#33842) From d306c8fa62cc51e41e8f84a3f87301a15245b43d Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Fri, 29 Dec 2017 22:35:40 -0500 Subject: [PATCH 034/104] Removes suit sensors from bural garbs (#33915) * Removes suit sensors from bural garbs * Dew it right --- code/modules/clothing/under/miscellaneous.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 899219c227..7686ba54ca 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -274,6 +274,7 @@ icon_state = "burial" item_state = "burial" item_color = "burial" + has_sensor = NO_SENSORS /obj/item/clothing/under/skirt/black name = "black skirt" From 458c437a73bbbdbd76af33de72d331eaede3fdb8 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 30 Dec 2017 05:03:51 -0600 Subject: [PATCH 036/104] Automatic changelog generation for PR #4580 [ci skip] --- html/changelogs/AutoChangeLog-pr-4580.yml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4580.yml diff --git a/html/changelogs/AutoChangeLog-pr-4580.yml b/html/changelogs/AutoChangeLog-pr-4580.yml new file mode 100644 index 0000000000..6ccaebd033 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4580.yml @@ -0,0 +1,9 @@ +author: "coiax" +delete-after: True +changes: + - rscadd: "Adds an internal radio implant, allowing the use of the radio if +you expect to have your headset removed. Or if you don't have any ears +or hands. It can be purchased for 4 TC from any Syndicate uplink." + - rscadd: "Nuke ops now buy special \"syndicate intelligence potions\" that automatically +insert an internal radio implant when used successfully. Cayenne can now +participate in your high level discussions." From 283ee4bca3f7e569c2110ff8b747e43c4fe747a8 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 30 Dec 2017 05:05:22 -0600 Subject: [PATCH 037/104] Automatic changelog generation for PR #4590 [ci skip] --- html/changelogs/AutoChangeLog-pr-4590.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4590.yml diff --git a/html/changelogs/AutoChangeLog-pr-4590.yml b/html/changelogs/AutoChangeLog-pr-4590.yml new file mode 100644 index 0000000000..ed62412909 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4590.yml @@ -0,0 +1,5 @@ +author: "More Robust Than You" +delete-after: True +changes: + - bugfix: "Monkey chat should no longer have .k prefixed" + - bugfix: "Monkey leaders should actually get jungle fever now" From 68c5c6cfe233c5c867e1fead7e8893fbdad48fac Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 30 Dec 2017 05:06:34 -0600 Subject: [PATCH 038/104] Automatic changelog generation for PR #4533 [ci skip] --- html/changelogs/AutoChangeLog-pr-4533.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4533.yml diff --git a/html/changelogs/AutoChangeLog-pr-4533.yml b/html/changelogs/AutoChangeLog-pr-4533.yml new file mode 100644 index 0000000000..6bbeeb37c9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4533.yml @@ -0,0 +1,4 @@ +author: "ninjanomnom" +delete-after: True +changes: + - bugfix: "Cycling airlocks on shuttles should work correctly when rotated now." From f860fa0cd3cc094e847106153d63a3834e418e7e Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sat, 30 Dec 2017 05:12:10 -0600 Subject: [PATCH 039/104] Update closed.dm --- code/game/turfs/closed.dm | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/code/game/turfs/closed.dm b/code/game/turfs/closed.dm index 6f1e6bfaf0..5b22f9318f 100644 --- a/code/game/turfs/closed.dm +++ b/code/game/turfs/closed.dm @@ -18,8 +18,7 @@ /turf/closed/CanPass(atom/movable/mover, turf/target) if(istype(mover) && (mover.pass_flags & PASSCLOSEDTURF)) return TRUE - else - ..() + return ..() /turf/closed/indestructible name = "wall" @@ -59,21 +58,6 @@ if("icon") SStitle.icon = icon -/turf/closed/indestructible/reebe - name = "void" - icon_state = "reebe" - opacity = FALSE - baseturf = /turf/closed/indestructible/reebe - -/turf/closed/indestructible/reebe/ratvar_act() - return - -/turf/closed/indestructible/reebe/narsie_act() - return - -/turf/closed/indestructible/reebe/CollidedWith(atom/movable/AM) - playsound(src, 'sound/effects/bamf.ogg', 25, TRUE) - /turf/closed/indestructible/riveted icon = 'icons/turf/walls/riveted.dmi' icon_state = "riveted" From 8c6d660611b3fc7de3c453b721d0feb50ac65488 Mon Sep 17 00:00:00 2001 From: cebutris Date: Sat, 30 Dec 2017 10:04:03 -0500 Subject: [PATCH 040/104] adds functional cebusoap --- code/citadel/custom_loadout/custom_items.dm | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/code/citadel/custom_loadout/custom_items.dm b/code/citadel/custom_loadout/custom_items.dm index 7cda1d9e5a..4e8e3b5e49 100644 --- a/code/citadel/custom_loadout/custom_items.dm +++ b/code/citadel/custom_loadout/custom_items.dm @@ -10,6 +10,14 @@ w_class = WEIGHT_CLASS_TINY flags_1 = NOBLUDGEON_1 +/obj/item/soap/cebu //real versions, for admin shenanigans. Adminspawn only + desc = "A bright blue bar of soap that smells of wolves" + icon = 'icons/obj/custom.dmi' + icon_state = "cebu" + +/obj/item/soap/cebu/fast //speedyquick cleaning version. Still not as fast as Syndiesoap. Adminspawn only. + cleanspeed = 15 + /*Inferno707*/ From 90b67e2e134eaacec7278cc5623e29794d4402b4 Mon Sep 17 00:00:00 2001 From: cebutris Date: Sat, 30 Dec 2017 13:35:26 -0500 Subject: [PATCH 041/104] blacklists holoparasites from discounting --- modular_citadel/code/datums/uplink_items_cit.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/modular_citadel/code/datums/uplink_items_cit.dm b/modular_citadel/code/datums/uplink_items_cit.dm index 26591c72ef..18b3187ac6 100644 --- a/modular_citadel/code/datums/uplink_items_cit.dm +++ b/modular_citadel/code/datums/uplink_items_cit.dm @@ -38,6 +38,7 @@ item = /obj/item/gun/ballistic/automatic/pistol/antitank/syndicate cost = 14 surplus = 25 + cant_discount = TRUE include_modes = list(/datum/game_mode/nuclear) /* Commented out due to introduction of reskinnable stetchkins. May still have a niche if people decide it somehow has value. From 76a135fbb7cec5485de8e756df13062b79adcdf2 Mon Sep 17 00:00:00 2001 From: cebutris Date: Sat, 30 Dec 2017 13:50:59 -0500 Subject: [PATCH 042/104] WRONG THING OOPS --- modular_citadel/code/datums/uplink_items_cit.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_citadel/code/datums/uplink_items_cit.dm b/modular_citadel/code/datums/uplink_items_cit.dm index 18b3187ac6..392e26ba71 100644 --- a/modular_citadel/code/datums/uplink_items_cit.dm +++ b/modular_citadel/code/datums/uplink_items_cit.dm @@ -16,6 +16,7 @@ NOTE: The precise nature of the symbiosis required by the parasites renders them incompatible with changelings" //updated to actually describe what they do and warn traitorchans not to buy it item = /obj/item/storage/box/syndie_kit/holoparasite refundable = TRUE + cant_discount = TRUE cost = 15 surplus = 20 //Nobody needs a ton of parasites exclude_modes = list(/datum/game_mode/nuclear) @@ -38,7 +39,6 @@ item = /obj/item/gun/ballistic/automatic/pistol/antitank/syndicate cost = 14 surplus = 25 - cant_discount = TRUE include_modes = list(/datum/game_mode/nuclear) /* Commented out due to introduction of reskinnable stetchkins. May still have a niche if people decide it somehow has value. From 9ddc9fd7f9bbfb04fc26e7078315951e2a473bab Mon Sep 17 00:00:00 2001 From: gamedeviso Date: Sat, 30 Dec 2017 10:44:03 -0500 Subject: [PATCH 043/104] Changed BYOND Link to Secure HTTPS (#33918) * Changed BYOND Link to Secure HTTPS * Updated to direct link to download page --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b286239314..aaf2ad2a27 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ hassle if you want to make any changes at all, so it's not recommended.) ## INSTALLATION First-time installation should be fairly straightforward. First, you'll need -BYOND installed. You can get it from http://www.byond.com/. Once you've done +BYOND installed. You can get it from https://www.byond.com/download. Once you've done that, extract the game files to wherever you want to keep them. This is a sourcecode-only release, so the next step is to compile the server files. Open tgstation.dme by double-clicking it, open the Build menu, and click From eda5869b4f8d7c9983f09afe3f20159599df9a40 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 30 Dec 2017 13:19:02 -0600 Subject: [PATCH 045/104] Automatic changelog generation for PR #4530 [ci skip] --- html/changelogs/AutoChangeLog-pr-4530.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4530.yml diff --git a/html/changelogs/AutoChangeLog-pr-4530.yml b/html/changelogs/AutoChangeLog-pr-4530.yml new file mode 100644 index 0000000000..7fcc6e4c71 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4530.yml @@ -0,0 +1,4 @@ +author: "ninjanomnom" +delete-after: True +changes: + - bugfix: "Things like thermite which burned through walls straight to space now stop on plating. You'll have to thermite it again to get to space." From 8452cc74d0f7992f261f92b847f93e4c34d06498 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sat, 30 Dec 2017 13:21:31 -0600 Subject: [PATCH 046/104] Update newscaster.dm --- code/game/machinery/newscaster.dm | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index ee9b1ff31a..541c931593 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -22,6 +22,7 @@ GLOBAL_LIST_EMPTY(allCasters) var/creationTime var/authorCensor var/bodyCensor + var/photo_file /datum/newscaster/feed_message/proc/returnAuthor(censor) if(censor == -1) @@ -97,6 +98,7 @@ GLOBAL_LIST_EMPTY(allCasters) var/scannedUser var/isAdminMsg var/icon/img + var/photo_file /datum/newscaster/feed_network var/list/datum/newscaster/feed_channel/network_channels = list() @@ -126,6 +128,7 @@ GLOBAL_LIST_EMPTY(allCasters) if(photo) newMsg.img = photo.img newMsg.caption = photo.scribble + newMsg.photo_file = save_photo(photo.img) for(var/datum/newscaster/feed_channel/FC in network_channels) if(FC.channel_name == channel_name) FC.messages += newMsg @@ -143,6 +146,7 @@ GLOBAL_LIST_EMPTY(allCasters) wanted_issue.isAdminMsg = adminMsg if(photo) wanted_issue.img = photo.img + wanted_issue.photo_file = save_photo(photo.img) if(newMessage) for(var/obj/machinery/newscaster/N in GLOB.allCasters) N.newsAlert() @@ -157,7 +161,12 @@ GLOBAL_LIST_EMPTY(allCasters) for(var/obj/machinery/newscaster/NEWSCASTER in GLOB.allCasters) NEWSCASTER.update_icon() - +/datum/newscaster/feed_network/proc/save_photo(icon/photo) + var/photo_file = copytext(md5("\icon[photo]"), 1, 6) + if(!fexists("[GLOB.log_directory]/photos/[photo_file].png")) + var/icon/p = icon(photo, frame = 1) + fcopy(p, "[GLOB.log_directory]/photos/[photo_file].png") + return photo_file /obj/item/wallframe/newscaster name = "newscaster frame" From 95714a0207f386007795412d5c90d4f3daac5d79 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sat, 30 Dec 2017 13:22:46 -0600 Subject: [PATCH 047/104] Update volume_pump.dm --- .../machinery/components/binary_devices/volume_pump.dm | 5 ----- 1 file changed, 5 deletions(-) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm index d7b8073c87..9e7a3403e6 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm @@ -151,13 +151,8 @@ Thus, the two variables affect pump operation are set in New(): on = !on if("set_transfer_rate" in signal.data) -<<<<<<< HEAD - var/datum/gas_mixture/air1 = AIR1 - transfer_rate = Clamp(text2num(signal.data["set_transfer_rate"]),0,air1.volume) -======= var/datum/gas_mixture/air1 = airs[1] transfer_rate = CLAMP(text2num(signal.data["set_transfer_rate"]),0,air1.volume) ->>>>>>> 6a7dbaa... removes silly garbage defines (#33621) if(on != old_on) investigate_log("was turned [on ? "on" : "off"] by a remote signal", INVESTIGATE_ATMOS) From 70fea88a391608784e8dcac65e18c0d42fd52571 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sat, 30 Dec 2017 13:22:54 -0600 Subject: [PATCH 048/104] Update cryo.dm --- .../atmospherics/machinery/components/unary_devices/cryo.dm | 5 ----- 1 file changed, 5 deletions(-) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index 74c2302ee9..87d6387b99 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -348,12 +348,7 @@ else data["occupant"]["temperaturestatus"] = "bad" -<<<<<<< HEAD - - var/datum/gas_mixture/air1 = AIR1 -======= var/datum/gas_mixture/air1 = airs[1] ->>>>>>> 6a7dbaa... removes silly garbage defines (#33621) data["cellTemperature"] = round(air1.temperature, 1) data["isBeakerLoaded"] = beaker ? TRUE : FALSE From 35574263b1163b379219dbed56d7ab3386f24e3c Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sat, 30 Dec 2017 13:23:02 -0600 Subject: [PATCH 049/104] Update outlet_injector.dm --- .../machinery/components/unary_devices/outlet_injector.dm | 5 ----- 1 file changed, 5 deletions(-) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm index e458e2a3fa..eca11d613c 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm @@ -130,13 +130,8 @@ if("set_volume_rate" in signal.data) var/number = text2num(signal.data["set_volume_rate"]) -<<<<<<< HEAD - var/datum/gas_mixture/air_contents = AIR1 - volume_rate = Clamp(number, 0, air_contents.volume) -======= var/datum/gas_mixture/air_contents = airs[1] volume_rate = CLAMP(number, 0, air_contents.volume) ->>>>>>> 6a7dbaa... removes silly garbage defines (#33621) if("status" in signal.data) spawn(2) From dda430131aedded13fefa0fe838242e288f53f5c Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sat, 30 Dec 2017 13:28:58 -0600 Subject: [PATCH 050/104] Update roundend.dm --- code/__HELPERS/roundend.dm | 81 +++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 45 deletions(-) diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index 7d95a30cb3..7bb5fa4e93 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -8,42 +8,6 @@ /datum/controller/subsystem/ticker/proc/gather_roundend_feedback() //Survivor numbers var/clients = GLOB.player_list.len - var/surviving_humans = 0 - var/surviving_total = 0 - var/ghosts = 0 - var/escaped_humans = 0 - var/escaped_total = 0 - - for(var/mob/M in GLOB.player_list) - if(ishuman(M)) - if(!M.stat) - surviving_humans++ - if(M.z == ZLEVEL_CENTCOM) - escaped_humans++ - if(!M.stat) - surviving_total++ - if(M.z == ZLEVEL_CENTCOM) - escaped_total++ - - if(isobserver(M)) - ghosts++ - - if(clients) - SSblackbox.record_feedback("nested tally", "round_end_stats", clients, list("clients")) - if(ghosts) - SSblackbox.record_feedback("nested tally", "round_end_stats", ghosts, list("ghosts")) - if(surviving_humans) - SSblackbox.record_feedback("nested tally", "round_end_stats", surviving_humans, list("survivors", "human")) - if(surviving_total) - SSblackbox.record_feedback("nested tally", "round_end_stats", surviving_total, list("survivors", "total")) - if(escaped_humans) - SSblackbox.record_feedback("nested tally", "round_end_stats", escaped_humans, list("escapees", "human")) - if(escaped_total) - SSblackbox.record_feedback("nested tally", "round_end_stats", escaped_total, list("escapees", "total")) - - gather_antag_success_rate() - -/datum/controller/subsystem/ticker/proc/gather_antag_success_rate() var/popcount = count_survivors() SSblackbox.record_feedback("nested tally", "round_end_stats", clients, list("clients")) SSblackbox.record_feedback("nested tally", "round_end_stats", popcount[POPCOUNT_GHOSTS], list("ghosts")) @@ -85,7 +49,6 @@ antag_info["objectives"] += list(list("objective_type"=O.type,"text"=O.explanation_text,"result"=result)) SSblackbox.record_feedback("associative", "antagonists", 1, antag_info) - /datum/controller/subsystem/ticker/proc/record_nuke_disk_location() var/obj/item/disk/nuclear/N = locate() in GLOB.poi_list if(N) @@ -105,17 +68,45 @@ SSblackbox.record_feedback("associative", "roundend_nukedisk", 1 , data) +/datum/controller/subsystem/ticker/proc/gather_newscaster() + var/json_file = file("[GLOB.log_directory]/newscaster.json") + var/list/file_data = list() + var/pos = 1 + for(var/V in GLOB.news_network.network_channels) + var/datum/newscaster/feed_channel/channel = V + if(!istype(channel)) + stack_trace("Non-channel in newscaster channel list") + continue + file_data["[pos]"] = list("channel name" = "[channel.channel_name]", "author" = "[channel.author]", "censored" = channel.censored ? 1 : 0, "author censored" = channel.authorCensor ? 1 : 0, "messages" = list()) + for(var/M in channel.messages) + var/datum/newscaster/feed_message/message = M + if(!istype(message)) + stack_trace("Non-message in newscaster channel messages list") + continue + var/list/comment_data = list() + for(var/C in message.comments) + var/datum/newscaster/feed_comment/comment = C + if(!istype(comment)) + stack_trace("Non-message in newscaster message comments list") + continue + comment_data += list(list("author" = "[comment.author]", "time stamp" = "[comment.time_stamp]", "body" = "[comment.body]")) + file_data["[pos]"]["messages"] += list(list("author" = "[message.author]", "time stamp" = "[message.time_stamp]", "censored" = message.bodyCensor ? 1 : 0, "author censored" = message.authorCensor ? 1 : 0, "photo file" = "[message.photo_file]", "photo caption" = "[message.caption]", "body" = "[message.body]", "comments" = comment_data)) + pos++ + if(GLOB.news_network.wanted_issue.active) + file_data["wanted"] = list("author" = "[GLOB.news_network.wanted_issue.scannedUser]", "criminal" = "[GLOB.news_network.wanted_issue.criminal]", "description" = "[GLOB.news_network.wanted_issue.body]", "photo file" = "[GLOB.news_network.wanted_issue.photo_file]") + WRITE_FILE(json_file, json_encode(file_data)) + /datum/controller/subsystem/ticker/proc/declare_completion() set waitfor = FALSE - to_chat(world, "


The round has ended.") + to_chat(world, "


The round has ended.") if(LAZYLEN(GLOB.round_end_notifiees)) send2irc("Notice", "[GLOB.round_end_notifiees.Join(", ")] the round has ended.") - /*for(var/client/C in GLOB.clients) + for(var/client/C in GLOB.clients) if(!C.credits) C.RollCredits() - C.playtitlemusic(40)*/ + C.playtitlemusic(40) display_report() @@ -136,7 +127,7 @@ send2irc("Server", "Round just ended.") - if(CONFIG_GET(string/cross_server_address)) + if(length(CONFIG_GET(keyed_string_list/cross_server))) send_news_report() CHECK_TICK @@ -240,7 +231,7 @@ num_human_escapees++ if(shuttle_areas[get_area(Player)]) num_shuttle_escapees++ - + .[POPCOUNT_SURVIVORS] = num_survivors .[POPCOUNT_ESCAPEES] = num_escapees .[POPCOUNT_SHUTTLE_ESCAPEES] = num_shuttle_escapees @@ -252,7 +243,7 @@ var/list/parts = list() var/station_evacuated = EMERGENCY_ESCAPED_OR_ENDGAMED var/popcount = count_survivors() - + //Round statistics report var/datum/station_state/end_state = new /datum/station_state() end_state.count() @@ -404,7 +395,7 @@ currrent_category = A.roundend_category previous_category = A result += A.roundend_report() - result += "
" + result += "

" if(all_antagonists.len) var/datum/antagonist/last = all_antagonists[all_antagonists.len] @@ -451,7 +442,7 @@ text += " survived" if(fleecheck) var/turf/T = get_turf(ply.current) - if(!T || !(T.z in GLOB.station_z_levels)) + if(!T || !is_station_level(T.z)) text += " while fleeing the station" if(ply.current.real_name != ply.name) text += " as [ply.current.real_name]" From 4d3b7ddcbd733bc4cfe36d458a627975b2832dc9 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sat, 30 Dec 2017 13:37:23 -0600 Subject: [PATCH 051/104] Update color.dm --- code/modules/clothing/gloves/color.dm | 9 --------- 1 file changed, 9 deletions(-) diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index 83e8f817c5..75d6c66077 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -205,18 +205,9 @@ /obj/item/clothing/gloves/color/brown = 1) var/obj/item/clothing/gloves/color/selected = pick(gloves) -<<<<<<< HEAD - - name = initial(selected.name) - desc = initial(selected.desc) - icon_state = initial(selected.icon_state) - item_state = initial(selected.item_state) - item_color = initial(selected.item_color) -======= if(ishuman(loc)) var/mob/living/carbon/human/H = loc H.equip_to_slot_or_del(new selected(H), slot_gloves) else new selected(loc) return INITIALIZE_HINT_QDEL ->>>>>>> c063902... Merge pull request #33930 from ShizCalev/undersuit-fix From c1c67ced1a79ef7359743afbac4c806a0480fb72 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sat, 30 Dec 2017 13:37:30 -0600 Subject: [PATCH 052/104] Update color.dm --- code/modules/clothing/under/color.dm | 8 -------- 1 file changed, 8 deletions(-) diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index 975ca26061..a6ab5280c8 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -6,13 +6,6 @@ /obj/item/clothing/under/color/random/New() ..() -<<<<<<< HEAD - var/obj/item/clothing/under/color/C = pick(subtypesof(/obj/item/clothing/under/color) - /obj/item/clothing/under/color/random) - name = initial(C.name) - icon_state = initial(C.icon_state) - item_state = initial(C.item_state) - item_color = initial(C.item_color) -======= var/obj/item/clothing/under/color/C = pick(subtypesof(/obj/item/clothing/under/color) - /obj/item/clothing/under/color/random - /obj/item/clothing/under/color/grey/glorf - /obj/item/clothing/under/color/black/ghost) if(ishuman(loc)) var/mob/living/carbon/human/H = loc @@ -20,7 +13,6 @@ else new C(loc) return INITIALIZE_HINT_QDEL ->>>>>>> c063902... Merge pull request #33930 from ShizCalev/undersuit-fix /obj/item/clothing/under/color/black name = "black jumpsuit" From 3802cf8586dab39f620cd9b55df8aa3ff4ae6dd1 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Sat, 30 Dec 2017 14:56:23 -0500 Subject: [PATCH 053/104] Merge pull request #33805 from Cruix/shuttle_machines Fixed autolathes and ore redemption machines leaving things at previous shuttle locations --- code/game/machinery/autolathe.dm | 56 +++++++++++------------ code/modules/mining/machine_redemption.dm | 5 +- 2 files changed, 28 insertions(+), 33 deletions(-) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 1e0b41bca0..3d3d929c81 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -149,8 +149,6 @@ if(href_list["make"]) - var/turf/T = loc - ///////////////// //href protection being_built = stored_research.isDesignResearchedID(href_list["make"]) @@ -174,34 +172,8 @@ use_power(power) icon_state = "autolathe" flick("autolathe_n",src) - if(is_stack) - spawn(32*coeff) - use_power(power) - var/list/materials_used = list(MAT_METAL=metal_cost*multiplier, MAT_GLASS=glass_cost*multiplier) - materials.use_amount(materials_used) - - var/obj/item/stack/N = new being_built.build_path(T, multiplier) - N.update_icon() - N.autolathe_crafted(src) - - for(var/obj/item/stack/S in T.contents - N) - if(istype(S, N.merge_type)) - N.merge(S) - busy = FALSE - updateUsrDialog() - - else - spawn(32*coeff*multiplier) - use_power(power) - var/list/materials_used = list(MAT_METAL=metal_cost*coeff*multiplier, MAT_GLASS=glass_cost*coeff*multiplier) - materials.use_amount(materials_used) - for(var/i=1, i<=multiplier, i++) - var/obj/item/new_item = new being_built.build_path(T) - for(var/mat in materials_used) - new_item.materials[mat] = materials_used[mat] / multiplier - new_item.autolathe_crafted(src) - busy = FALSE - updateUsrDialog() + var/time = is_stack ? 32 : 32*coeff*multiplier + addtimer(CALLBACK(src, .proc/make_item, power, metal_cost, glass_cost, multiplier, coeff, is_stack), time) if(href_list["search"]) matching_designs.Cut() @@ -218,6 +190,30 @@ return +/obj/machinery/autolathe/proc/make_item(power, metal_cost, glass_cost, multiplier, coeff, is_stack) + GET_COMPONENT(materials, /datum/component/material_container) + var/atom/A = drop_location() + use_power(power) + var/list/materials_used = list(MAT_METAL=metal_cost*coeff*multiplier, MAT_GLASS=glass_cost*coeff*multiplier) + materials.use_amount(materials_used) + + if(is_stack) + var/obj/item/stack/N = new being_built.build_path(A, multiplier) + N.update_icon() + N.autolathe_crafted(src) + for(var/obj/item/stack/S in (A.contents - N)) + if(istype(S, N.merge_type)) + N.merge(S) + else + for(var/i=1, i<=multiplier, i++) + var/obj/item/new_item = new being_built.build_path(A) + for(var/mat in materials_used) + new_item.materials[mat] = materials_used[mat] / multiplier + new_item.autolathe_crafted(src) + + busy = FALSE + updateDialog() + /obj/machinery/autolathe/RefreshParts() var/T = 0 for(var/obj/item/stock_parts/matter_bin/MB in component_parts) diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm index e16eb0e5b2..ddfcfa62e3 100644 --- a/code/modules/mining/machine_redemption.dm +++ b/code/modules/mining/machine_redemption.dm @@ -257,9 +257,8 @@ if("Release") if(check_access(inserted_id) || allowed(usr)) //Check the ID inside, otherwise check the user - var/out = get_step(src, output_dir) if(params["id"] == "all") - materials.retrieve_all(out) + materials.retrieve_all(get_step(src, output_dir)) else var/mat_id = params["id"] if(!materials.materials[mat_id]) @@ -277,7 +276,7 @@ desired = input("How many sheets?", "How many sheets would you like to smelt?", 1) as null|num var/sheets_to_remove = round(min(desired,50,stored_amount)) - materials.retrieve_sheets(sheets_to_remove, mat_id, out) + materials.retrieve_sheets(sheets_to_remove, mat_id, get_step(src, output_dir)) else to_chat(usr, "Required access not found.") From 3128c26698a74e9649c3011c9bbfd22353b67398 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Sat, 30 Dec 2017 15:03:56 -0500 Subject: [PATCH 055/104] Merge pull request #33937 from AnturK/printplayerfix printplayer fix for jobless minds --- code/__HELPERS/roundend.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index 52dd7c6358..8ab1e2fac6 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -385,7 +385,10 @@ /proc/printplayer(datum/mind/ply, fleecheck) - var/text = "[ply.key] was [ply.name] the [ply.assigned_role] and" + var/jobtext = "" + if(ply.assigned_role) + jobtext = " the [ply.assigned_role]" + var/text = "[ply.key] was [ply.name][jobtext] and" if(ply.current) if(ply.current.stat == DEAD) text += " died" From 1be3d30c43cec537b4d186836c64fcd79baa6721 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 30 Dec 2017 14:13:25 -0600 Subject: [PATCH 057/104] Automatic changelog generation for PR #4579 [ci skip] --- html/changelogs/AutoChangeLog-pr-4579.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4579.yml diff --git a/html/changelogs/AutoChangeLog-pr-4579.yml b/html/changelogs/AutoChangeLog-pr-4579.yml new file mode 100644 index 0000000000..69327324f6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4579.yml @@ -0,0 +1,5 @@ +author: "XDTM" +delete-after: True +changes: + - rscadd: "Added a new reagent: Pax." + - rscadd: "Pax is made with Mindbreaker, Synaptizine and Water, and those affected by it are forced to be nonviolent against living beings. At least, not directly." From a89f221d35ff4193b9a9d77dbeb9fe6736c0fff6 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Sat, 30 Dec 2017 17:04:11 -0500 Subject: [PATCH 058/104] Removes chemist job from omegastation (#33863) * Removes chemist job from omegastation * Remove chemist start points --- _maps/map_files/OmegaStation/OmegaStation.dmm | 4 +--- _maps/map_files/OmegaStation/job_changes.dm | 3 ++- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index ffda1f471d..b38e7e8902 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -23737,7 +23737,6 @@ /obj/structure/chair/office/light{ dir = 1 }, -/obj/effect/landmark/start/chemist, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/medical/chemistry) @@ -24229,7 +24228,6 @@ /obj/structure/chair/office/light{ dir = 4 }, -/obj/effect/landmark/start/chemist, /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -74189,7 +74187,7 @@ aRf aSk aTr aUt -aVk +aVl aWg aRf aXr diff --git a/_maps/map_files/OmegaStation/job_changes.dm b/_maps/map_files/OmegaStation/job_changes.dm index 7f6c24fe26..bef766da7b 100644 --- a/_maps/map_files/OmegaStation/job_changes.dm +++ b/_maps/map_files/OmegaStation/job_changes.dm @@ -164,4 +164,5 @@ MAP_REMOVE_JOB(geneticist) MAP_REMOVE_JOB(virologist) MAP_REMOVE_JOB(rd) MAP_REMOVE_JOB(warden) -MAP_REMOVE_JOB(lawyer) \ No newline at end of file +MAP_REMOVE_JOB(lawyer) +MAP_REMOVE_JOB(chemist) From 3aef84aa5eef9dfd1cde404b39767b50773e611f Mon Sep 17 00:00:00 2001 From: oranges Date: Sun, 31 Dec 2017 11:53:34 +1300 Subject: [PATCH 060/104] Merge pull request #33778 from MrDoomBringer/youre-still,-in-a-dream,-SPACE-HEATEEER Updates space-heater sprite to 3/4, updates icon --- icons/obj/atmos.dmi | Bin 30420 -> 30696 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/atmos.dmi b/icons/obj/atmos.dmi index 1abc0b5ca719d91f0b6a56bd209f4686f67cd554..fcd971c674a65503d2c873a600f38dacde6e878e 100644 GIT binary patch literal 30696 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�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%0A=j(P2Fp^QgTlrLq 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 PQ;>?ns~1&rCL#X^3LR{y From 3208404f14a7526887199af041912da5929c9543 Mon Sep 17 00:00:00 2001 From: oranges Date: Sun, 31 Dec 2017 11:58:41 +1300 Subject: [PATCH 062/104] Merge pull request #33580 from Xhuis/defenses_balancing Some modest clockcult balancing - vitality matrices, brass skewers, pressure sensors --- code/__DEFINES/status_effects.dm | 2 ++ code/datums/status_effects/debuffs.dm | 24 +++++++++++++++ code/datums/status_effects/status_effect.dm | 1 + .../clock_cult/clock_effects/clock_sigils.dm | 27 ++++++++++------ .../clock_scriptures/scripture_scripts.dm | 6 ++++ .../trap_triggers/pressure_sensor.dm | 2 +- .../clock_structures/traps/brass_skewer.dm | 29 ++++++++++++------ .../mob/living/carbon/human/examine.dm | 16 ++++++++++ .../mob/living/silicon/robot/examine.dm | 1 + icons/mob/screen_alert.dmi | Bin 75852 -> 77077 bytes 10 files changed, 87 insertions(+), 21 deletions(-) diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index 4f36ddbb1e..2e1524ebac 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -64,6 +64,8 @@ #define STATUS_EFFECT_KINDLE /datum/status_effect/kindle //A knockdown reduced by 1 second for every 3 points of damage the target takes. +#define STATUS_EFFECT_ICHORIAL_STAIN /datum/status_effect/ichorial_stain //Prevents a servant from being revived by vitality matrices for one minute. + ///////////// // NEUTRAL // ///////////// diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index cc64cc2eb8..22868f855f 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -479,3 +479,27 @@ desc = "Blinding light dances in your vision, stunning and silencing you. Any damage taken will shorten the light's effects!" icon_state = "kindle" alerttooltipstyle = "clockcult" + + +//Ichorial Stain: Applied to servants revived by a vitality matrix. Prevents them from being revived by one again until the effect fades. +/datum/status_effect/ichorial_stain + id = "ichorial_stain" + status_type = STATUS_EFFECT_UNIQUE + duration = 600 + examine_text = "SUBJECTPRONOUN is drenched in thick, blue ichor!" + alert_type = /obj/screen/alert/status_effect/ichorial_stain + +/datum/status_effect/ichorial_stain/on_apply() + owner.visible_message("[owner] gets back up, [owner.p_their()] body dripping blue ichor!", \ + "Thick blue ichor covers your body; you can't be revived like this again until it dries!") + return TRUE + +/datum/status_effect/ichorial_stain/on_remove() + owner.visible_message("The blue ichor on [owner]'s body dries out!", \ + "The ichor on your body is dry - you can now be revived by vitality matrices again!") + +/obj/screen/alert/status_effect/ichorial_stain + name = "Ichorial Stain" + desc = "Your body is covered in blue ichor! You can't be revived by vitality matrices." + icon_state = "ichorial_stain" + alerttooltipstyle = "clockcult" diff --git a/code/datums/status_effects/status_effect.dm b/code/datums/status_effects/status_effect.dm index 19bd880a77..e24359d18c 100644 --- a/code/datums/status_effects/status_effect.dm +++ b/code/datums/status_effects/status_effect.dm @@ -9,6 +9,7 @@ var/mob/living/owner //The mob affected by the status effect. var/status_type = STATUS_EFFECT_UNIQUE //How many of the effect can be on one mob, and what happens when you try to add another var/on_remove_on_mob_delete = FALSE //if we call on_remove() when the mob is deleted + var/examine_text //If defined, this text will appear when the mob is examined - to use he, she etc. use "SUBJECTPRONOUN" and replace it in the examines themselves var/alert_type = /obj/screen/alert/status_effect //the alert thrown by the status effect, contains name and description var/obj/screen/alert/status_effect/linked_alert = null //the alert itself, if it exists diff --git a/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm b/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm index 29655a0ac9..3237cf5d35 100644 --- a/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm +++ b/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm @@ -278,7 +278,7 @@ animate(src, alpha = 255, time = 10, flags = ANIMATION_END_NOW) //we may have a previous animation going. finish it first, then do this one without delay. sleep(10) //as long as they're still on the sigil and are either not a servant or they're a servant AND it has remaining vitality - while(L && (!is_servant_of_ratvar(L) || (is_servant_of_ratvar(L) && (GLOB.ratvar_awakens || GLOB.clockwork_vitality))) && get_turf(L) == get_turf(src)) + while(L && (!is_servant_of_ratvar(L) || (is_servant_of_ratvar(L) && (GLOB.ratvar_awakens || GLOB.clockwork_vitality))) && get_turf(L) == get_turf(src) && !L.buckled) sigil_active = TRUE if(animation_number >= 4) new /obj/effect/temp_visual/ratvar/sigil/vitality(get_turf(src)) @@ -313,21 +313,28 @@ revival_cost = 0 var/mob/dead/observer/ghost = L.get_ghost(TRUE) if(GLOB.clockwork_vitality >= revival_cost && (ghost || (L.mind && L.mind.active))) - if(ghost) - ghost.reenter_corpse() - L.revive(1, 1) - var/obj/effect/temp_visual/ratvar/sigil/vitality/V = new /obj/effect/temp_visual/ratvar/sigil/vitality(get_turf(src)) - animate(V, alpha = 0, transform = matrix()*2, time = 8) - playsound(L, 'sound/magic/staff_healing.ogg', 50, 1) - L.visible_message("[L] suddenly gets back up, [L.p_their()] body dripping blue ichor!", "\"[text2ratvar("You will be okay, child.")]\"") - GLOB.clockwork_vitality -= revival_cost + if(L.has_status_effect(STATUS_EFFECT_ICHORIAL_STAIN)) + visible_message("[src] strains, but nothing happens...") + if(L.pulledby) + to_chat(L.pulledby, "[L] was already revived recently by a vitality matrix! Wait a bit longer!") + break + else + if(ghost) + ghost.reenter_corpse() + L.revive(1, 1) + var/obj/effect/temp_visual/ratvar/sigil/vitality/V = new /obj/effect/temp_visual/ratvar/sigil/vitality(get_turf(src)) + animate(V, alpha = 0, transform = matrix()*2, time = 8) + playsound(L, 'sound/magic/staff_healing.ogg', 50, 1) + to_chat(L, "\"[text2ratvar("You will be okay, child.")]\"") + L.apply_status_effect(STATUS_EFFECT_ICHORIAL_STAIN) + GLOB.clockwork_vitality -= revival_cost break if(!L.client || L.client.is_afk()) set waitfor = FALSE var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as a [L.name], an inactive clock cultist?", "[name]", null, "Clock Cultist", 50, L) var/mob/dead/observer/theghost = null if(candidates.len) - to_chat(L, "Your physical form has been taken over by another soul due to your inactivity! Ahelp if you wish to regain your form!") + to_chat(L, "Your physical form has been taken over by another soul due to your inactivity! Ahelp if you wish to regain your form!") message_admins("[key_name_admin(theghost)] has taken control of ([key_name_admin(L)]) to replace an inactive clock cultist.") L.ghostize(0) L.key = theghost.key diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm index 09cfeb99d3..c4774fe0ad 100644 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm +++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm @@ -70,6 +70,12 @@ quickbind = TRUE quickbind_desc = "Creates a Vitality Matrix, which drains non-Servants on it to heal Servants that cross it." +/datum/clockwork_scripture/create_object/vitality_matrix/check_special_requirements() + if(locate(object_path) in range(1, invoker)) + to_chat(invoker, "Vitality matrices placed next to each other could interfere and cause a feedback loop! Move away from the other ones!") + return FALSE + return ..() + //Judicial Visor: Creates a judicial visor, which can smite an area. /datum/clockwork_scripture/create_object/judicial_visor diff --git a/code/game/gamemodes/clock_cult/clock_structures/trap_triggers/pressure_sensor.dm b/code/game/gamemodes/clock_cult/clock_structures/trap_triggers/pressure_sensor.dm index f6a7b8e347..fffabe8f5c 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/trap_triggers/pressure_sensor.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/trap_triggers/pressure_sensor.dm @@ -3,7 +3,7 @@ name = "pressure sensor" desc = "A thin plate of brass, barely visible but clearly distinct." clockwork_desc = "A trigger that will activate when a non-servant runs across it." - max_integrity = 25 + max_integrity = 5 icon_state = "pressure_sensor" alpha = 80 layer = LOW_ITEM_LAYER diff --git a/code/game/gamemodes/clock_cult/clock_structures/traps/brass_skewer.dm b/code/game/gamemodes/clock_cult/clock_structures/traps/brass_skewer.dm index d79ca88ecb..c91cf594e8 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/traps/brass_skewer.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/traps/brass_skewer.dm @@ -21,9 +21,10 @@ STOP_PROCESSING(SSfastprocess, src) if(buckled_mobs && buckled_mobs.len) var/mob/living/L = buckled_mobs[1] - L.Knockdown(100) - L.visible_message("[L] is maimed as the skewer shatters while still in their body!") - L.adjustBruteLoss(15) + if(iscarbon(L)) + L.Knockdown(100) + L.visible_message("[L] is maimed as the skewer shatters while still in their body!") + L.adjustBruteLoss(15) unbuckle_mob(L) return ..() @@ -48,14 +49,22 @@ /obj/structure/destructible/clockwork/trap/brass_skewer/activate() if(density) return - var/mob/living/carbon/squirrel = locate() in get_turf(src) + var/mob/living/squirrel = locate() in get_turf(src) if(squirrel) - squirrel.visible_message("A massive brass spike erupts from the ground, impaling [squirrel]!", \ - "A massive brass spike rams through your chest, hoisting you into the air!") - squirrel.emote("scream") - playsound(squirrel, 'sound/effects/splat.ogg', 50, TRUE) - playsound(squirrel, 'sound/misc/desceration-03.ogg', 50, TRUE) - squirrel.apply_damage(20, BRUTE, "chest") + if(iscyborg(squirrel)) + if(!squirrel.stat) + squirrel.visible_message("A massive brass spike erupts from the ground, rending [squirrel]'s chassis but shattering into pieces!", \ + "A massive brass spike rips through your chassis and bursts into shrapnel in your casing!") + squirrel.adjustBruteLoss(50) + squirrel.Stun(20) + addtimer(CALLBACK(src, .proc/take_damage, max_integrity), 1) + else + squirrel.visible_message("A massive brass spike erupts from the ground, impaling [squirrel]!", \ + "A massive brass spike rams through your chest, hoisting you into the air!") + squirrel.emote("scream") + playsound(squirrel, 'sound/effects/splat.ogg', 50, TRUE) + playsound(squirrel, 'sound/misc/desceration-03.ogg', 50, TRUE) + squirrel.apply_damage(20, BRUTE, "chest") mouse_opacity = MOUSE_OPACITY_OPAQUE //So players can interact with the tile it's on to pull them off buckle_mob(squirrel, TRUE) else diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index bc4fd83334..9999d8c330 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -121,6 +121,9 @@ if(wear_id) msg += "[t_He] [t_is] wearing [icon2html(wear_id, user)] \a [wear_id].\n" + //Status effects + msg += status_effect_examines() + //Jitters switch(jitteriness) if(300 to INFINITY) @@ -354,3 +357,16 @@ msg += "*---------*" to_chat(user, msg) + +/mob/living/proc/status_effect_examines(pronoun_replacement) //You can include this in any mob's examine() to show the examine texts of status effects! + var/list/dat = list() + if(!pronoun_replacement) + pronoun_replacement = p_they(TRUE) + for(var/V in status_effects) + var/datum/status_effect/E = V + if(E.examine_text) + var/new_text = replacetext(E.examine_text, "SUBJECTPRONOUN", pronoun_replacement) + new_text = replacetext(new_text, "[pronoun_replacement] is", "[pronoun_replacement] [p_are()]") //To make sure something become "They are" or "She is", not "They are" and "She are" + dat += "[new_text]\n" //dat.Join("\n") doesn't work here, for some reason + if(dat.len) + return dat.Join() diff --git a/code/modules/mob/living/silicon/robot/examine.dm b/code/modules/mob/living/silicon/robot/examine.dm index 788a8f4255..3f5b12ae20 100644 --- a/code/modules/mob/living/silicon/robot/examine.dm +++ b/code/modules/mob/living/silicon/robot/examine.dm @@ -6,6 +6,7 @@ var/obj/act_module = get_active_held_item() if(act_module) msg += "It is holding [icon2html(act_module, user)] \a [act_module].\n" + msg += status_effect_examines() msg += "" if (src.getBruteLoss()) if (src.getBruteLoss() < maxHealth*0.5) diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi index ef680c266a9ce8e5ae33d7eccc7e83e972c3d7ce..e6d40977a7accd2dbc7ed07ab77a71fe991ef0e6 100644 GIT binary patch delta 5764 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 Date: Sat, 30 Dec 2017 18:23:25 -0500 Subject: [PATCH 064/104] Fixes vore not functioning --- .../code/modules/mob/living/carbon/human/human_defense.dm | 5 +++++ tgstation.dme | 1 + 2 files changed, 6 insertions(+) create mode 100644 modular_citadel/code/modules/mob/living/carbon/human/human_defense.dm diff --git a/modular_citadel/code/modules/mob/living/carbon/human/human_defense.dm b/modular_citadel/code/modules/mob/living/carbon/human/human_defense.dm new file mode 100644 index 0000000000..b61df944d1 --- /dev/null +++ b/modular_citadel/code/modules/mob/living/carbon/human/human_defense.dm @@ -0,0 +1,5 @@ +/mob/living/human/grabbedby(mob/living/carbon/user, supress_message = 0) + if(user == src && pulling && !pulling.anchored && grab_state >= GRAB_AGGRESSIVE && isliving(pulling)) + vore_attack(user, pulling) + else + ..() \ No newline at end of file diff --git a/tgstation.dme b/tgstation.dme index 30c5ff3848..1f3ea9671d 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -2473,4 +2473,5 @@ #include "modular_citadel\code\game\objects\items\melee\eutactic_blades.dm" #include "modular_citadel\code\modules\crafting\recipes.dm" #include "modular_citadel\code\modules\mob\living\silicon\robot\robot_modules.dm" +#include "modular_citadel\code\modules\mob\living\carbon\human\human_defense.dm" // END_INCLUDE From 06901e1edca86c3cd44cefa1ce8e125ee49e9f41 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 30 Dec 2017 17:43:28 -0600 Subject: [PATCH 065/104] Automatic changelog generation for PR #4610 [ci skip] --- html/changelogs/AutoChangeLog-pr-4610.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4610.yml diff --git a/html/changelogs/AutoChangeLog-pr-4610.yml b/html/changelogs/AutoChangeLog-pr-4610.yml new file mode 100644 index 0000000000..cdcfbde61b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4610.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - bugfix: "Vore is no longer restricted to monkeys." From 38870f4056daa2c0a7e2a44315a1c266d00ad0b0 Mon Sep 17 00:00:00 2001 From: Tad Hardesty Date: Sat, 30 Dec 2017 19:26:47 -0800 Subject: [PATCH 066/104] Fix PDA message photos not being viewable --- code/game/machinery/computer/message.dm | 2 +- .../telecomms/machines/message_server.dm | 180 ++++++++++++++++++ 2 files changed, 181 insertions(+), 1 deletion(-) create mode 100644 code/game/machinery/telecomms/machines/message_server.dm diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index a3ec6ba6ec..13ad75d7cc 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -126,7 +126,7 @@ break // Del - Sender - Recepient - Message // X - Al Green - Your Mom - WHAT UP!? - dat += "
X
[pda.sender][pda.recipient][pda.message][pda.photo ? "(Photo)":""]" + dat += "
X
[pda.sender][pda.recipient][pda.message][pda.photo ? " (Photo)":""]" dat += "" //Hacking screen. if(2) diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm new file mode 100644 index 0000000000..e0e88cce65 --- /dev/null +++ b/code/game/machinery/telecomms/machines/message_server.dm @@ -0,0 +1,180 @@ +/* + The equivalent of the server, for PDA and request console messages. + Without it, PDA and request console messages cannot be transmitted. + PDAs require the rest of the telecomms setup, but request consoles only + require the message server. +*/ + +// A decorational representation of SSblackbox, usually placed alongside the message server. +/obj/machinery/blackbox_recorder + icon = 'icons/obj/stationobjs.dmi' + icon_state = "blackbox" + name = "Blackbox Recorder" + density = TRUE + anchored = TRUE + use_power = IDLE_POWER_USE + idle_power_usage = 10 + active_power_usage = 100 + armor = list(melee = 25, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 70) + + +// The message server itself. +/obj/machinery/telecomms/message_server + icon = 'icons/obj/machines/research.dmi' + icon_state = "server" + name = "Messaging Server" + desc = "A machine that attempts to gather the secret knowledge of the universe." + density = TRUE + anchored = TRUE + use_power = IDLE_POWER_USE + idle_power_usage = 10 + active_power_usage = 100 + + id = "Messaging Server" + network = "tcommsat" + autolinkers = list("common") + + var/list/datum/data_pda_msg/pda_msgs = list() + var/list/datum/data_rc_msg/rc_msgs = list() + var/decryptkey + +/obj/machinery/telecomms/message_server/Initialize() + . = ..() + if (!decryptkey) + decryptkey = GenerateKey() + pda_msgs += new /datum/data_pda_msg("System Administrator", "system", "This is an automated message. The messaging system is functioning correctly.") + +/obj/machinery/telecomms/message_server/proc/GenerateKey() + var/newKey + newKey += pick("the", "if", "of", "as", "in", "a", "you", "from", "to", "an", "too", "little", "snow", "dead", "drunk", "rosebud", "duck", "al", "le") + newKey += pick("diamond", "beer", "mushroom", "assistant", "clown", "captain", "twinkie", "security", "nuke", "small", "big", "escape", "yellow", "gloves", "monkey", "engine", "nuclear", "ai") + newKey += pick("1", "2", "3", "4", "5", "6", "7", "8", "9", "0") + return newKey + +/obj/machinery/telecomms/message_server/process() + if(toggled && (stat & (BROKEN|NOPOWER))) + toggled = FALSE + update_icon() + +/obj/machinery/telecomms/message_server/receive_information(datum/signal/subspace/pda/signal, obj/machinery/telecomms/machine_from) + // can't log non-PDA signals + if(!istype(signal) || !signal.data["message"] || !toggled) + return + + // log the signal + var/datum/data_pda_msg/M = new(signal.format_target(), "[signal.data["name"]] ([signal.data["job"]])", signal.data["message"], signal.data["photo"]) + pda_msgs += M + signal.logged = M + + // pass it along to either the hub or the broadcaster + if(!relay_information(signal, /obj/machinery/telecomms/hub)) + relay_information(signal, /obj/machinery/telecomms/broadcaster) + +/obj/machinery/telecomms/message_server/update_icon() + if((stat & (BROKEN|NOPOWER))) + icon_state = "server-nopower" + else if (!toggled) + icon_state = "server-off" + else + icon_state = "server-on" + + +// Repath for maps +/obj/machinery/message_server + parent_type = /obj/machinery/telecomms/message_server + + +// PDA signal datum +/datum/signal/subspace/pda + frequency = FREQ_COMMON + server_type = /obj/machinery/telecomms/message_server + var/datum/data_pda_msg/logged + +/datum/signal/subspace/pda/New(source, data) + src.source = source + src.data = data + var/turf/T = get_turf(source) + levels = list(T.z) + +/datum/signal/subspace/pda/copy() + var/datum/signal/subspace/pda/copy = new(source, data.Copy()) + copy.original = src + copy.levels = levels + return copy + +/datum/signal/subspace/pda/proc/format_target() + if (length(data["targets"]) > 1) + return "Everyone" + return data["targets"][1] + +/datum/signal/subspace/pda/proc/format_message() + if (logged && data["photo"]) + return "\"[data["message"]]\" (Photo)" + return "\"data["message"]\"" + +/datum/signal/subspace/pda/broadcast() + if (!logged) // Can only go through if a message server logs it + return + for (var/obj/item/device/pda/P in GLOB.PDAs) + if ("[P.owner] ([P.ownjob])" in data["targets"]) + P.receive_message(src) + + +// Log datums stored by the message server. +/datum/data_pda_msg + var/sender = "Unspecified" + var/recipient = "Unspecified" + var/message = "Blank" // transferred message + var/icon/photo // attached photo + +/datum/data_pda_msg/New(param_rec, param_sender, param_message, param_photo) + if(param_rec) + recipient = param_rec + if(param_sender) + sender = param_sender + if(param_message) + message = param_message + if(param_photo) + photo = param_photo + +/datum/data_pda_msg/Topic(href,href_list) + ..() + if(href_list["photo"]) + var/mob/M = usr + M << browse_rsc(photo, "pda_photo.png") + M << browse("PDA Photo" \ + + "" \ + + "" \ + + "", "window=pdaphoto;size=192x192") + onclose(M, "pdaphoto") + +/datum/data_rc_msg + var/rec_dpt = "Unspecified" // receiving department + var/send_dpt = "Unspecified" // sending department + var/message = "Blank" + var/stamp = "Unstamped" + var/id_auth = "Unauthenticated" + var/priority = "Normal" + +/datum/data_rc_msg/New(param_rec, param_sender, param_message, param_stamp, param_id_auth, param_priority) + if(param_rec) + rec_dpt = param_rec + if(param_sender) + send_dpt = param_sender + if(param_message) + message = param_message + if(param_stamp) + stamp = param_stamp + if(param_id_auth) + id_auth = param_id_auth + if(param_priority) + switch(param_priority) + if(1) + priority = "Normal" + if(2) + priority = "High" + if(3) + priority = "Extreme" + else + priority = "Undetermined" + From 9c8959f2ff197f7c8b8f65a4870f8564e2bc79ab Mon Sep 17 00:00:00 2001 From: F-OS Date: Sun, 31 Dec 2017 01:23:42 -0700 Subject: [PATCH 067/104] Last resort now requires a confirmation. (#33947) * Update headcrab.dm * fixed * fuck * Update headcrab.dm * Update headcrab.dm --- code/game/gamemodes/changeling/powers/headcrab.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/game/gamemodes/changeling/powers/headcrab.dm b/code/game/gamemodes/changeling/powers/headcrab.dm index e7f23bc07b..7a219407a4 100644 --- a/code/game/gamemodes/changeling/powers/headcrab.dm +++ b/code/game/gamemodes/changeling/powers/headcrab.dm @@ -8,6 +8,8 @@ /obj/effect/proc_holder/changeling/headcrab/sting_action(mob/user) set waitfor = FALSE + if(alert("Are we sure we wish to kill ourself and create a headslug?",,"Yes", "No") == "No") + return var/datum/mind/M = user.mind var/list/organs = user.getorganszone("head", 1) @@ -35,4 +37,4 @@ if(crab.origin) crab.origin.active = 1 crab.origin.transfer_to(crab) - to_chat(crab, "You burst out of the remains of your former body in a shower of gore!") \ No newline at end of file + to_chat(crab, "You burst out of the remains of your former body in a shower of gore!") From 9dd9d9413add613e6d36c1080a2f366062bab88d Mon Sep 17 00:00:00 2001 From: vuonojenmustaturska Date: Sun, 31 Dec 2017 10:26:43 +0200 Subject: [PATCH 069/104] Improves loot drop spawners, adds AI law spawners to cores (#33945) * hymn to breaking strain * remove subtypes as requested * no-one saw that --- _maps/map_files/BoxStation/BoxStation.dmm | 5 ++- .../map_files/Deltastation/DeltaStation2.dmm | 40 +++++++++---------- _maps/map_files/MetaStation/MetaStation.dmm | 5 ++- _maps/map_files/OmegaStation/OmegaStation.dmm | 40 +++++++++---------- _maps/map_files/PubbyStation/PubbyStation.dmm | 5 ++- .../game/objects/effects/spawners/lootdrop.dm | 16 ++++++-- 6 files changed, 58 insertions(+), 53 deletions(-) diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index 335393adac..2f9716406c 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -22174,7 +22174,8 @@ req_access_txt = "20" }, /obj/structure/window/reinforced, -/obj/item/aiModule/core/full/corp, +/obj/effect/spawner/lootdrop/aimodule_harmless, +/obj/effect/spawner/lootdrop/aimodule_neutral, /obj/structure/window/reinforced{ dir = 1 }, @@ -22235,7 +22236,7 @@ }, /obj/item/aiModule/reset/purge, /obj/structure/window/reinforced, -/obj/item/aiModule/core/full/antimov, +/obj/effect/spawner/lootdrop/aimodule_harmful, /obj/structure/window/reinforced{ dir = 1 }, diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 2852c76257..fe77452705 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -54219,14 +54219,10 @@ name = "Core Modules"; req_access_txt = "20" }, -/obj/item/aiModule/core/full/paladin{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/aiModule/core/full/asimov, -/obj/item/aiModule/core/full/corp{ - pixel_x = -3; - pixel_y = -3 +/obj/effect/spawner/lootdrop/aimodule_harmless{ + fan_out_items = 1; + lootdoubles = 0; + lootcount = 3 }, /obj/structure/sign/nanotrasen{ pixel_x = -32 @@ -54279,12 +54275,12 @@ name = "Core Modules"; req_access_txt = "20" }, -/obj/item/aiModule/core/full/antimov{ - pixel_x = 3; - pixel_y = 3 +/obj/effect/spawner/lootdrop/aimodule_harmful{ + fan_out_items = 1; + lootdoubles = 0; + lootcount = 2 }, -/obj/item/aiModule/supplied/oxygen, -/obj/item/aiModule/supplied/protectStation{ +/obj/item/aiModule/supplied/oxygen{ pixel_x = -3; pixel_y = -3 }, @@ -55144,6 +55140,10 @@ pixel_y = 3 }, /obj/item/aiModule/core/full/custom, +/obj/item/aiModule/core/full/asimov{ + pixel_x = -3; + pixel_y = -3 + }, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -55226,7 +55226,7 @@ req_access_txt = "20" }, /obj/structure/window/reinforced, -/obj/item/aiModule/core/full/tyrant{ +/obj/item/aiModule/supplied/protectStation{ pixel_x = 3; pixel_y = 3 }, @@ -57252,14 +57252,10 @@ /area/ai_monitored/turret_protected/ai_upload) "clQ" = ( /obj/structure/table/reinforced, -/obj/item/aiModule/core/full/drone{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/aiModule/core/full/reporter, -/obj/item/aiModule/core/full/liveandletlive{ - pixel_x = -3; - pixel_y = -3 +/obj/effect/spawner/lootdrop/aimodule_neutral{ + fan_out_items = 1; + lootdoubles = 0; + lootcount = 3 }, /turf/open/floor/plasteel/vault{ dir = 8 diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 8ed9acf09f..3480f9d6c4 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -18443,6 +18443,7 @@ "aMG" = ( /obj/structure/table, /obj/item/aiModule/core/full/asimov, +/obj/effect/spawner/lootdrop/aimodule_harmless, /obj/item/aiModule/core/freeformcore, /obj/machinery/door/window{ base_state = "right"; @@ -18452,7 +18453,7 @@ req_access_txt = "20" }, /obj/structure/window/reinforced, -/obj/item/aiModule/core/full/corp, +/obj/effect/spawner/lootdrop/aimodule_neutral, /obj/item/aiModule/core/full/custom, /obj/machinery/flasher{ pixel_y = 24; @@ -18477,7 +18478,7 @@ pixel_y = 24; id = "AI" }, -/obj/item/aiModule/core/full/antimov, +/obj/effect/spawner/lootdrop/aimodule_harmful, /obj/item/aiModule/supplied/oxygen, /obj/item/aiModule/supplied/protectStation, /obj/item/aiModule/zeroth/oneHuman, diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index ffda1f471d..0352106ad4 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -2376,14 +2376,10 @@ name = "Core Modules"; req_access_txt = "20" }, -/obj/item/aiModule/core/full/paladin{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/aiModule/core/full/asimov, -/obj/item/aiModule/core/full/corp{ - pixel_x = -3; - pixel_y = -3 +/obj/effect/spawner/lootdrop/aimodule_harmless{ + fan_out_items = 1; + lootdoubles = 0; + lootcount = 3 }, /obj/structure/sign/nanotrasen{ pixel_x = -32 @@ -2499,12 +2495,12 @@ name = "Core Modules"; req_access_txt = "20" }, -/obj/item/aiModule/core/full/antimov{ - pixel_x = 3; - pixel_y = 3 +/obj/effect/spawner/lootdrop/aimodule_harmful{ + fan_out_items = 1; + lootdoubles = 0; + lootcount = 2 }, -/obj/item/aiModule/supplied/oxygen, -/obj/item/aiModule/supplied/protectStation{ +/obj/item/aiModule/supplied/oxygen{ pixel_x = -3; pixel_y = -3 }, @@ -2875,6 +2871,10 @@ pixel_y = 3 }, /obj/item/aiModule/core/full/custom, +/obj/item/aiModule/core/full/asimov{ + pixel_x = -3; + pixel_y = -3 + }, /obj/machinery/camera{ c_tag = "AI Core - Port"; dir = 4; @@ -2900,7 +2900,7 @@ req_access_txt = "20" }, /obj/structure/window/reinforced, -/obj/item/aiModule/core/full/tyrant{ +/obj/item/aiModule/supplied/protectStation{ pixel_x = 3; pixel_y = 3 }, @@ -4361,14 +4361,10 @@ /area/ai_monitored/turret_protected/ai) "ahV" = ( /obj/structure/table/reinforced, -/obj/item/aiModule/core/full/drone{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/aiModule/core/full/reporter, -/obj/item/aiModule/core/full/liveandletlive{ - pixel_x = -3; - pixel_y = -3 +/obj/effect/spawner/lootdrop/aimodule_neutral{ + fan_out_items = 1; + lootdoubles = 0; + lootcount = 3 }, /turf/open/floor/plasteel/vault{ dir = 8 diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index 7eb9a7ac7a..a504dc4a0b 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -12140,6 +12140,7 @@ "aED" = ( /obj/structure/table, /obj/item/aiModule/core/full/asimov, +/obj/effect/spawner/lootdrop/aimodule_harmless, /obj/item/aiModule/core/freeformcore, /obj/machinery/door/window{ base_state = "right"; @@ -12148,7 +12149,7 @@ name = "Core Modules"; req_access_txt = "20" }, -/obj/item/aiModule/core/full/corp, +/obj/effect/spawner/lootdrop/aimodule_neutral, /obj/item/aiModule/core/full/custom, /obj/structure/window/reinforced{ dir = 1; @@ -12197,7 +12198,7 @@ req_access_txt = "20" }, /obj/item/aiModule/reset/purge, -/obj/item/aiModule/core/full/antimov, +/obj/effect/spawner/lootdrop/aimodule_harmful, /obj/item/aiModule/supplied/protectStation, /obj/structure/window/reinforced{ dir = 1; diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 34e6793d5b..a2ff5b0674 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -5,19 +5,29 @@ var/lootcount = 1 //how many items will be spawned var/lootdoubles = TRUE //if the same item can be spawned twice var/list/loot //a list of possible items to spawn e.g. list(/obj/item, /obj/structure, /obj/effect) + var/fan_out_items = FALSE //Whether the items should be distributed to offsets 0,3,-3,6,-6,9,-9.. This overrides pixel_x/y on the spawner itself /obj/effect/spawner/lootdrop/Initialize(mapload) ..() if(loot && loot.len) var/turf/T = get_turf(src) - while(lootcount && loot.len) + var/loot_spawned = 0 + while((lootcount-loot_spawned) && loot.len) var/lootspawn = pickweight(loot) if(!lootdoubles) loot.Remove(lootspawn) if(lootspawn) - new lootspawn(T) - lootcount-- + var/atom/movable/spawned_loot = new lootspawn(T) + if (!fan_out_items) + if (pixel_x != 0) + spawned_loot.pixel_x = pixel_x + if (pixel_y != 0) + spawned_loot.pixel_y = pixel_y + else + if (loot_spawned) + spawned_loot.pixel_x = spawned_loot.pixel_y = ((!(loot_spawned%2)*loot_spawned/2)*-3)+((loot_spawned%2)*(loot_spawned+1)/2*3) + loot_spawned++ return INITIALIZE_HINT_QDEL /obj/effect/spawner/lootdrop/armory_contraband From 7dac76651e0d918027425d4985d3a8728b17aba7 Mon Sep 17 00:00:00 2001 From: BeeSting12 Date: Sun, 31 Dec 2017 03:27:37 -0500 Subject: [PATCH 071/104] Makes it clear that command reports are IC. (#33949) * fixes #33936 * sticky's idea was better --- code/modules/admin/verbs/randomverbs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index b26453b461..b37ff9ceb4 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -472,7 +472,7 @@ Traitors and the like can also be revived with the previous role mostly intact. if(!holder) to_chat(src, "Only administrators may use this command.") return - var/input = input(usr, "Please enter anything you want. Anything. Serious.", "What?", "") as message|null + var/input = input(usr, "Enter a Command Report. Ensure it makes sense IC.", "What?", "") as message|null if(!input) return From a57eba6a16e49194a9798702e2f39905a95fb9eb Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Sun, 31 Dec 2017 03:32:38 -0500 Subject: [PATCH 073/104] Explosions now cause camera shake based on distance (#33570) * Explosions now cause camera shake based on distance * Explosion close camera shake down to 2.5s * Explosion camera shake max 100 close intensity, 50 far --- code/datums/explosion.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/datums/explosion.dm b/code/datums/explosion.dm index 73b76a9155..85a8e40863 100644 --- a/code/datums/explosion.dm +++ b/code/datums/explosion.dm @@ -55,6 +55,8 @@ GLOBAL_LIST_EMPTY(explosions) var/orig_heavy_range = heavy_impact_range var/orig_light_range = light_impact_range + var/orig_max_distance = max(devastation_range, heavy_impact_range, light_impact_range, flash_range, flame_range) + //Zlevel specific bomb cap multiplier var/cap_multiplier = 1 switch(epicenter.z) @@ -119,11 +121,13 @@ GLOBAL_LIST_EMPTY(explosions) // If inside the blast radius + world.view - 2 if(dist <= round(max_range + world.view - 2, 1)) M.playsound_local(epicenter, null, 100, 1, frequency, falloff = 5, S = explosion_sound) + shake_camera(M, 25, min(orig_max_distance - dist, 100)) // You hear a far explosion if you're outside the blast radius. Small bombs shouldn't be heard all over the station. else if(dist <= far_dist) var/far_volume = CLAMP(far_dist, 30, 50) // Volume is based on explosion size and dist far_volume += (dist <= far_dist * 0.5 ? 50 : 0) // add 50 volume if the mob is pretty close to the explosion M.playsound_local(epicenter, null, far_volume, 1, frequency, falloff = 5, S = far_explosion_sound) + shake_camera(M, 10, min(orig_max_distance - dist, 50)) EX_PREPROCESS_CHECK_TICK //postpone processing for a bit From 3e5c7eb8978492cf0b8ccbd4efba5b00c2f466ba Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 31 Dec 2017 02:50:56 -0600 Subject: [PATCH 075/104] Automatic changelog generation for PR #4607 [ci skip] --- html/changelogs/AutoChangeLog-pr-4607.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4607.yml diff --git a/html/changelogs/AutoChangeLog-pr-4607.yml b/html/changelogs/AutoChangeLog-pr-4607.yml new file mode 100644 index 0000000000..1ce8e2136e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4607.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - tweak: "The chemistry job has been removed from Omegastation. Medical doctors still have full chemistry access" From 305d07faa291fb3877cd718b039a9620d90a45ac Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 31 Dec 2017 02:51:29 -0600 Subject: [PATCH 076/104] Automatic changelog generation for PR #4608 [ci skip] --- html/changelogs/AutoChangeLog-pr-4608.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4608.yml diff --git a/html/changelogs/AutoChangeLog-pr-4608.yml b/html/changelogs/AutoChangeLog-pr-4608.yml new file mode 100644 index 0000000000..dc7a2844d9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4608.yml @@ -0,0 +1,4 @@ +author: "MrDoomBringer" +delete-after: True +changes: + - imageadd: "NanoTrasen has sent the station new spaceheaters! They look nicer now!" From 92a7555322e59eec3a001e829c612fd7ae03a7c9 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 31 Dec 2017 02:51:47 -0600 Subject: [PATCH 077/104] Automatic changelog generation for PR #4609 [ci skip] --- html/changelogs/AutoChangeLog-pr-4609.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4609.yml diff --git a/html/changelogs/AutoChangeLog-pr-4609.yml b/html/changelogs/AutoChangeLog-pr-4609.yml new file mode 100644 index 0000000000..9f47aa2917 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4609.yml @@ -0,0 +1,8 @@ +author: "Xhuis" +delete-after: True +changes: + - balance: "Vitality matrices now apply Ichorial Stain when reviving a dead servant, which prevents that servant from being revived again by vitality matrices for a full minute." + - balance: "Vitality matrices can't be placed adjacent to one another." + - balance: "Brass skewers now damage and stun cyborgs." + - balance: "Vitality matrices no longer drain people impaled on brass skewers." + - balance: "Pressure sensors have 5 health again (down from 25.)" From cf1dc29d3bd4182bd328e009a10b2f0a82b3047b Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 31 Dec 2017 02:52:05 -0600 Subject: [PATCH 078/104] Automatic changelog generation for PR #4611 [ci skip] --- html/changelogs/AutoChangeLog-pr-4611.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4611.yml diff --git a/html/changelogs/AutoChangeLog-pr-4611.yml b/html/changelogs/AutoChangeLog-pr-4611.yml new file mode 100644 index 0000000000..135f53690f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4611.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "Viewing photos sent by PDA message works again." From 01e744041be6bad0be7de920d4d108a17ab051d0 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 31 Dec 2017 02:52:32 -0600 Subject: [PATCH 079/104] Automatic changelog generation for PR #4612 [ci skip] --- html/changelogs/AutoChangeLog-pr-4612.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4612.yml diff --git a/html/changelogs/AutoChangeLog-pr-4612.yml b/html/changelogs/AutoChangeLog-pr-4612.yml new file mode 100644 index 0000000000..1bb68ce590 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4612.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "Last resort now requires a confirmation" From 2268a2e53c1d1a67db8c3eb8291d8dbcc90180a8 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 31 Dec 2017 02:52:46 -0600 Subject: [PATCH 080/104] Automatic changelog generation for PR #4613 [ci skip] --- html/changelogs/AutoChangeLog-pr-4613.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4613.yml diff --git a/html/changelogs/AutoChangeLog-pr-4613.yml b/html/changelogs/AutoChangeLog-pr-4613.yml new file mode 100644 index 0000000000..871d1fc7ac --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4613.yml @@ -0,0 +1,5 @@ +author: "Naksu" +delete-after: True +changes: + - code_imp: "loot drop spawners now assign their pixel offsets to the items they spawn, also have a \"fanout\" setting to distribute items in a neat fashion like in omega/delta's core and some tech storages." + - tweak: "replaced several law boards in uploads with spawners, the net result being one more board in uploads that may be a duplicate asimov (but hopefully isn't)" From 38ddc2c0e32ece50d64d5b935d3afc38de0324c3 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 31 Dec 2017 02:53:36 -0600 Subject: [PATCH 081/104] Automatic changelog generation for PR #4615 [ci skip] --- html/changelogs/AutoChangeLog-pr-4615.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4615.yml diff --git a/html/changelogs/AutoChangeLog-pr-4615.yml b/html/changelogs/AutoChangeLog-pr-4615.yml new file mode 100644 index 0000000000..f7e0e15470 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4615.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - rscadd: "Explosions now cause camera shake based on intensity and distance" From bbca0afa37c3bb5bdc169cd56c6969e18029715e Mon Sep 17 00:00:00 2001 From: AnturK Date: Sun, 31 Dec 2017 13:30:00 +0100 Subject: [PATCH 082/104] Fixes thermals, also drops the see invisible from thermals. (#33950) --- code/modules/clothing/glasses/_glasses.dm | 4 ++-- code/modules/clothing/glasses/hud.dm | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 7dca5d9b3e..0bfb212e29 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -11,7 +11,7 @@ materials = list(MAT_GLASS = 250) var/vision_flags = 0 var/darkness_view = 2//Base human is 2 - var/invis_view = SEE_INVISIBLE_LIVING + var/invis_view = SEE_INVISIBLE_LIVING //admin only for now var/invis_override = 0 //Override to allow glasses to set higher than normal see_invis var/lighting_alpha var/list/icon/current = list() //the current hud icons @@ -261,7 +261,7 @@ icon_state = "thermal" item_state = "glasses" vision_flags = SEE_MOBS - invis_view = 2 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE flash_protect = 0 glass_colour_type = /datum/client_colour/glass_colour/red diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 877a3bb458..4d59a893ea 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -174,7 +174,7 @@ icon_state = "thermal" hud_type = DATA_HUD_SECURITY_ADVANCED vision_flags = SEE_MOBS - invis_view = 2 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE glass_colour_type = /datum/client_colour/glass_colour/red /obj/item/clothing/glasses/hud/toggle/thermal/attack_self(mob/user) From 7a6cf002d344f11119459ab3723ac5df3eef0c9f Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sun, 31 Dec 2017 06:41:03 -0600 Subject: [PATCH 084/104] Revert "[MIRROR] Fix PDA message photos not being viewable" --- code/game/machinery/computer/message.dm | 2 +- .../telecomms/machines/message_server.dm | 180 ------------------ 2 files changed, 1 insertion(+), 181 deletions(-) delete mode 100644 code/game/machinery/telecomms/machines/message_server.dm diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index 13ad75d7cc..a3ec6ba6ec 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -126,7 +126,7 @@ break // Del - Sender - Recepient - Message // X - Al Green - Your Mom - WHAT UP!? - dat += "
X
[pda.sender][pda.recipient][pda.message][pda.photo ? " (Photo)":""]" + dat += "
X
[pda.sender][pda.recipient][pda.message][pda.photo ? "(Photo)":""]" dat += "" //Hacking screen. if(2) diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm deleted file mode 100644 index e0e88cce65..0000000000 --- a/code/game/machinery/telecomms/machines/message_server.dm +++ /dev/null @@ -1,180 +0,0 @@ -/* - The equivalent of the server, for PDA and request console messages. - Without it, PDA and request console messages cannot be transmitted. - PDAs require the rest of the telecomms setup, but request consoles only - require the message server. -*/ - -// A decorational representation of SSblackbox, usually placed alongside the message server. -/obj/machinery/blackbox_recorder - icon = 'icons/obj/stationobjs.dmi' - icon_state = "blackbox" - name = "Blackbox Recorder" - density = TRUE - anchored = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = 10 - active_power_usage = 100 - armor = list(melee = 25, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 70) - - -// The message server itself. -/obj/machinery/telecomms/message_server - icon = 'icons/obj/machines/research.dmi' - icon_state = "server" - name = "Messaging Server" - desc = "A machine that attempts to gather the secret knowledge of the universe." - density = TRUE - anchored = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = 10 - active_power_usage = 100 - - id = "Messaging Server" - network = "tcommsat" - autolinkers = list("common") - - var/list/datum/data_pda_msg/pda_msgs = list() - var/list/datum/data_rc_msg/rc_msgs = list() - var/decryptkey - -/obj/machinery/telecomms/message_server/Initialize() - . = ..() - if (!decryptkey) - decryptkey = GenerateKey() - pda_msgs += new /datum/data_pda_msg("System Administrator", "system", "This is an automated message. The messaging system is functioning correctly.") - -/obj/machinery/telecomms/message_server/proc/GenerateKey() - var/newKey - newKey += pick("the", "if", "of", "as", "in", "a", "you", "from", "to", "an", "too", "little", "snow", "dead", "drunk", "rosebud", "duck", "al", "le") - newKey += pick("diamond", "beer", "mushroom", "assistant", "clown", "captain", "twinkie", "security", "nuke", "small", "big", "escape", "yellow", "gloves", "monkey", "engine", "nuclear", "ai") - newKey += pick("1", "2", "3", "4", "5", "6", "7", "8", "9", "0") - return newKey - -/obj/machinery/telecomms/message_server/process() - if(toggled && (stat & (BROKEN|NOPOWER))) - toggled = FALSE - update_icon() - -/obj/machinery/telecomms/message_server/receive_information(datum/signal/subspace/pda/signal, obj/machinery/telecomms/machine_from) - // can't log non-PDA signals - if(!istype(signal) || !signal.data["message"] || !toggled) - return - - // log the signal - var/datum/data_pda_msg/M = new(signal.format_target(), "[signal.data["name"]] ([signal.data["job"]])", signal.data["message"], signal.data["photo"]) - pda_msgs += M - signal.logged = M - - // pass it along to either the hub or the broadcaster - if(!relay_information(signal, /obj/machinery/telecomms/hub)) - relay_information(signal, /obj/machinery/telecomms/broadcaster) - -/obj/machinery/telecomms/message_server/update_icon() - if((stat & (BROKEN|NOPOWER))) - icon_state = "server-nopower" - else if (!toggled) - icon_state = "server-off" - else - icon_state = "server-on" - - -// Repath for maps -/obj/machinery/message_server - parent_type = /obj/machinery/telecomms/message_server - - -// PDA signal datum -/datum/signal/subspace/pda - frequency = FREQ_COMMON - server_type = /obj/machinery/telecomms/message_server - var/datum/data_pda_msg/logged - -/datum/signal/subspace/pda/New(source, data) - src.source = source - src.data = data - var/turf/T = get_turf(source) - levels = list(T.z) - -/datum/signal/subspace/pda/copy() - var/datum/signal/subspace/pda/copy = new(source, data.Copy()) - copy.original = src - copy.levels = levels - return copy - -/datum/signal/subspace/pda/proc/format_target() - if (length(data["targets"]) > 1) - return "Everyone" - return data["targets"][1] - -/datum/signal/subspace/pda/proc/format_message() - if (logged && data["photo"]) - return "\"[data["message"]]\" (Photo)" - return "\"data["message"]\"" - -/datum/signal/subspace/pda/broadcast() - if (!logged) // Can only go through if a message server logs it - return - for (var/obj/item/device/pda/P in GLOB.PDAs) - if ("[P.owner] ([P.ownjob])" in data["targets"]) - P.receive_message(src) - - -// Log datums stored by the message server. -/datum/data_pda_msg - var/sender = "Unspecified" - var/recipient = "Unspecified" - var/message = "Blank" // transferred message - var/icon/photo // attached photo - -/datum/data_pda_msg/New(param_rec, param_sender, param_message, param_photo) - if(param_rec) - recipient = param_rec - if(param_sender) - sender = param_sender - if(param_message) - message = param_message - if(param_photo) - photo = param_photo - -/datum/data_pda_msg/Topic(href,href_list) - ..() - if(href_list["photo"]) - var/mob/M = usr - M << browse_rsc(photo, "pda_photo.png") - M << browse("PDA Photo" \ - + "" \ - + "" \ - + "", "window=pdaphoto;size=192x192") - onclose(M, "pdaphoto") - -/datum/data_rc_msg - var/rec_dpt = "Unspecified" // receiving department - var/send_dpt = "Unspecified" // sending department - var/message = "Blank" - var/stamp = "Unstamped" - var/id_auth = "Unauthenticated" - var/priority = "Normal" - -/datum/data_rc_msg/New(param_rec, param_sender, param_message, param_stamp, param_id_auth, param_priority) - if(param_rec) - rec_dpt = param_rec - if(param_sender) - send_dpt = param_sender - if(param_message) - message = param_message - if(param_stamp) - stamp = param_stamp - if(param_id_auth) - id_auth = param_id_auth - if(param_priority) - switch(param_priority) - if(1) - priority = "Normal" - if(2) - priority = "High" - if(3) - priority = "Extreme" - else - priority = "Undetermined" - From 19c35c63d6b0a91fa3906f4b2a0a6f86f2c7dc23 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Sun, 31 Dec 2017 10:57:03 -0500 Subject: [PATCH 085/104] Merge pull request #33951 from AnturK/perspective_fix Fixes reset_perspective runtimes --- code/modules/mob/mob.dm | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index a818a01764..1bc7552c3f 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -254,24 +254,43 @@ return 0 +// reset_perspective(thing) set the eye to the thing (if it's equal to current default reset to mob perspective) +// reset_perspective() set eye to common default : mob on turf, loc otherwise /mob/proc/reset_perspective(atom/A) if(client) - if(ismovableatom(A)) - client.perspective = EYE_PERSPECTIVE - client.eye = A + if(A) + if(ismovableatom(A)) + //Set the the thing unless it's us + if(A != src) + client.perspective = EYE_PERSPECTIVE + client.eye = A + else + client.eye = client.mob + client.perspective = MOB_PERSPECTIVE + else if(isturf(A)) + //Set to the turf unless it's our current turf + if(A != loc) + client.perspective = EYE_PERSPECTIVE + client.eye = A + else + client.eye = client.mob + client.perspective = MOB_PERSPECTIVE + else + //Do nothing else - if(isturf(loc) && (!A || loc == A)) + //Reset to common defaults: mob if on turf, otherwise current loc + if(isturf(loc)) client.eye = client.mob client.perspective = MOB_PERSPECTIVE else client.perspective = EYE_PERSPECTIVE - client.eye = A + client.eye = loc return 1 /mob/living/reset_perspective(atom/A) if(..()) update_sight() - if(client.eye != src) + if(client.eye && client.eye != src) var/atom/AT = client.eye AT.get_remote_view_fullscreens(src) else From d0e5a38c290ece0bc5d2fc6612be5d884dcd6ed8 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Sun, 31 Dec 2017 10:58:22 -0500 Subject: [PATCH 087/104] Merge pull request #33954 from jammer312/components_fix fixes component's dupe --- code/datums/components/_component.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm index fcd4651459..46ffc25643 100644 --- a/code/datums/components/_component.dm +++ b/code/datums/components/_component.dm @@ -205,13 +205,13 @@ new_comp = new nt(arglist(args)) if(!QDELETED(new_comp)) old_comp.InheritComponent(new_comp, TRUE) - qdel(new_comp) + QDEL_NULL(new_comp) if(COMPONENT_DUPE_HIGHLANDER) if(!new_comp) new_comp = new nt(arglist(args)) if(!QDELETED(new_comp)) new_comp.InheritComponent(old_comp, FALSE) - qdel(old_comp) + QDEL_NULL(old_comp) if(COMPONENT_DUPE_UNIQUE_PASSARGS) if(!new_comp) var/list/arguments = args.Copy(2) From 4e0efc64d599cb289668af99e24e69ce7df0a867 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Sun, 31 Dec 2017 11:00:57 -0500 Subject: [PATCH 089/104] Merge pull request #33957 from ninjanomnom/helper-cleanup cleans up some behaviour for PlaceOnTop/Bottom --- code/game/turfs/ChangeTurf.dm | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/code/game/turfs/ChangeTurf.dm b/code/game/turfs/ChangeTurf.dm index 2f165d9a20..b3e542ca0f 100644 --- a/code/game/turfs/ChangeTurf.dm +++ b/code/game/turfs/ChangeTurf.dm @@ -119,27 +119,42 @@ // Take the input as baseturfs and put it underneath the current baseturfs // If fake_turf_type is provided and new_baseturfs is not the baseturfs list will be created identical to the turf type's // If both or just new_baseturfs is provided they will be inserted below the existing baseturfs -/turf/proc/PlaceOnBottom(turf/fake_turf_type, list/new_baseturfs) +/turf/proc/PlaceOnBottom(list/new_baseturfs, turf/fake_turf_type) if(fake_turf_type) if(!new_baseturfs) var/list/old_baseturfs = baseturfs.Copy() assemble_baseturfs(fake_turf_type) + if(!length(baseturfs)) + baseturfs = list(baseturfs) baseturfs += old_baseturfs return else if(!length(new_baseturfs)) new_baseturfs = list(new_baseturfs, fake_turf_type) else new_baseturfs += fake_turf_type + if(!length(baseturfs)) + baseturfs = list(baseturfs) baseturfs.Insert(1, new_baseturfs) // Make a new turf and put it on top -/turf/proc/PlaceOnTop(turf/fake_turf_type, list/new_baseturfs) - var/list/temp_baseturfs = list() - temp_baseturfs += baseturfs // Doesn't matter if baseturfs is a list or single item, either will get added correctly - temp_baseturfs += type - if(new_baseturfs) - temp_baseturfs += new_baseturfs - return ChangeTurf(fake_turf_type, temp_baseturfs) +// The args behave identical to PlaceOnBottom except they go on top +/turf/proc/PlaceOnTop(list/new_baseturfs, turf/fake_turf_type) + if(fake_turf_type) + if(!new_baseturfs) + var/list/old_baseturfs = baseturfs.Copy() + assemble_baseturfs(fake_turf_type) + if(!length(baseturfs)) + baseturfs = list(baseturfs) + baseturfs.Insert(1, old_baseturfs) + return + else if(!length(new_baseturfs)) + new_baseturfs = list(new_baseturfs, fake_turf_type) + else + new_baseturfs += fake_turf_type + if(!length(baseturfs)) + baseturfs = list(baseturfs) + baseturfs += new_baseturfs + // Copy an existing turf and put it on top /turf/proc/CopyOnTop(turf/copytarget, ignore_bottom=1, depth=INFINITY) // x, 1, 0 From 54032f9c6d9c124266ebeadfe7119f1d3f12f16a Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Sun, 31 Dec 2017 11:02:40 -0500 Subject: [PATCH 091/104] Merge pull request #33960 from ShizCalev/flamer Corrects flamethrower capitalization --- code/game/objects/items/flamethrower.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm index 3a351a6514..8cc6d6b179 100644 --- a/code/game/objects/items/flamethrower.dm +++ b/code/game/objects/items/flamethrower.dm @@ -233,7 +233,7 @@ /obj/item/flamethrower/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) var/obj/item/projectile/P = hitby if(damage && attack_type == PROJECTILE_ATTACK && P.damage_type != STAMINA && prob(15)) - owner.visible_message("[attack_text] hits the fueltank on [owner]'s [src], rupturing it! What a shot!") + owner.visible_message("\The [attack_text] hits the fueltank on [owner]'s [name], rupturing it! What a shot!") var/target_turf = get_turf(owner) igniter.ignite_turf(src,target_turf, release_amount = 100) qdel(ptank) From 2c350fcb6cfa399b75620a1951167efebc6c84bf Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Sun, 31 Dec 2017 15:25:56 -0500 Subject: [PATCH 093/104] Autotag .github => GitHub (#33965) --- tools/WebhookProcessor/github_webhook_processor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/WebhookProcessor/github_webhook_processor.php b/tools/WebhookProcessor/github_webhook_processor.php index a97b9db1c2..e6956dfb85 100644 --- a/tools/WebhookProcessor/github_webhook_processor.php +++ b/tools/WebhookProcessor/github_webhook_processor.php @@ -220,7 +220,7 @@ function tag_pr($payload, $opened) { else if ($mergeable === FALSE) $tags[] = 'Merge Conflict'; - $treetags = array('_maps' => 'Map Edit', 'tools' => 'Tools', 'SQL' => 'SQL'); + $treetags = array('_maps' => 'Map Edit', 'tools' => 'Tools', 'SQL' => 'SQL', '.github' => 'GitHub'); $addonlytags = array('icons' => 'Sprites', 'sound' => 'Sound', 'config' => 'Config Update', 'code/controllers/configuration/entries' => 'Config Update', 'tgui' => 'UI'); foreach($treetags as $tree => $tag) if(has_tree_been_edited($payload, $tree)) From a881de18b9d054496f72b56fda196bd2b87361a4 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 1 Jan 2018 04:25:40 -0600 Subject: [PATCH 095/104] Automatic changelog generation for PR #4596 [ci skip] --- html/changelogs/AutoChangeLog-pr-4596.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4596.yml diff --git a/html/changelogs/AutoChangeLog-pr-4596.yml b/html/changelogs/AutoChangeLog-pr-4596.yml new file mode 100644 index 0000000000..17bb98f350 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4596.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - tweak: "Burial jumpsuits no longer have suit sensors" From 0fbe251dfe554baa8ebc6dafe30c5be28f730fcc Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 1 Jan 2018 04:26:36 -0600 Subject: [PATCH 096/104] Automatic changelog generation for PR #4599 [ci skip] --- html/changelogs/AutoChangeLog-pr-4599.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4599.yml diff --git a/html/changelogs/AutoChangeLog-pr-4599.yml b/html/changelogs/AutoChangeLog-pr-4599.yml new file mode 100644 index 0000000000..a458b7dcf2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4599.yml @@ -0,0 +1,4 @@ +author: "Cebutris" +delete-after: True +changes: + - bugfix: "Holoparasite injectors can no longer be discounted" From 5486f71010b7c8c54a5adac1f9c5697e71e14044 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 1 Jan 2018 07:30:50 -0600 Subject: [PATCH 097/104] woo --- code/citadel/cit_reagents.dm | 9 ++++----- code/citadel/dogborgstuff.dm | 4 ++-- code/game/atoms_movable.dm | 12 ++++++------ .../code/game/objects/items/melee/eutactic_blades.dm | 2 +- tgstation.dme | 2 +- 5 files changed, 14 insertions(+), 15 deletions(-) diff --git a/code/citadel/cit_reagents.dm b/code/citadel/cit_reagents.dm index 12604f26f5..79ccfea936 100644 --- a/code/citadel/cit_reagents.dm +++ b/code/citadel/cit_reagents.dm @@ -21,7 +21,7 @@ S = new(T) S.reagents.add_reagent("semen", reac_volume) if(data["blood_DNA"]) - S.blood_DNA[data["blood_DNA"]] = data["blood_type"] + S.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"])) /obj/effect/decal/cleanable/semen name = "semen" @@ -62,17 +62,16 @@ icon = 'code/citadel/icons/effects.dmi' icon_state = "fem1" random_icon_states = list("fem1", "fem2", "fem3", "fem4") - blood_DNA = list() blood_state = null bloodiness = null /obj/effect/decal/cleanable/femcum/New() ..() dir = pick(1,2,4,8) + add_blood_DNA(list("Non-human DNA" = "A+")) /obj/effect/decal/cleanable/femcum/replace_decal(obj/effect/decal/cleanable/femcum/F) - if (F.blood_DNA) - blood_DNA |= F.blood_DNA.Copy() + F.add_blood_DNA(return_blood_DNA()) ..() /datum/reagent/consumable/femcum/reaction_turf(turf/T, reac_volume) @@ -86,7 +85,7 @@ S = new(T) S.reagents.add_reagent("femcum", reac_volume) if(data["blood_DNA"]) - S.blood_DNA[data["blood_DNA"]] = data["blood_type"] + S.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"])) //aphrodisiac & anaphrodisiac diff --git a/code/citadel/dogborgstuff.dm b/code/citadel/dogborgstuff.dm index 9a6a6581c9..2713b19976 100644 --- a/code/citadel/dogborgstuff.dm +++ b/code/citadel/dogborgstuff.dm @@ -259,7 +259,7 @@ to_chat(user,"You clean \the [target.name].") var/obj/effect/decal/cleanable/C = locate() in target qdel(C) - target.clean_blood() + SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) else if(ishuman(target)) if(src.emagged) var/mob/living/silicon/robot.R = user @@ -292,7 +292,7 @@ to_chat(user, "You clean \the [target.name].") var/obj/effect/decal/cleanable/C = locate() in target qdel(C) - target.clean_blood() + SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) return diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index ddb768488a..e494009e35 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -144,27 +144,27 @@ /atom/movable/proc/clean_on_move() var/turf/tile = loc if(isturf(tile)) - tile.clean_blood() + tile.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) for(var/A in tile) if(is_cleanable(A)) qdel(A) else if(istype(A, /obj/item)) var/obj/item/cleaned_item = A - cleaned_item.clean_blood() + cleaned_item.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) else if(ishuman(A)) var/mob/living/carbon/human/cleaned_human = A if(cleaned_human.lying) if(cleaned_human.head) - cleaned_human.head.clean_blood() + cleaned_human.head.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) cleaned_human.update_inv_head() if(cleaned_human.wear_suit) - cleaned_human.wear_suit.clean_blood() + cleaned_human.wear_suit.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) cleaned_human.update_inv_wear_suit() else if(cleaned_human.w_uniform) - cleaned_human.w_uniform.clean_blood() + cleaned_human.w_uniform.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) cleaned_human.update_inv_w_uniform() if(cleaned_human.shoes) - cleaned_human.shoes.clean_blood() + cleaned_human.shoes.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) cleaned_human.update_inv_shoes() cleaned_human.clean_blood() cleaned_human.wash_cream() diff --git a/modular_citadel/code/game/objects/items/melee/eutactic_blades.dm b/modular_citadel/code/game/objects/items/melee/eutactic_blades.dm index 385e9cd9d4..3c564f1807 100644 --- a/modular_citadel/code/game/objects/items/melee/eutactic_blades.dm +++ b/modular_citadel/code/game/objects/items/melee/eutactic_blades.dm @@ -273,7 +273,7 @@ var/mob/M = loc M.update_inv_hands() - clean_blood()//blood overlays get weird otherwise, because the sprite changes. (retained from original desword because I have no idea what this is) + SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)//blood overlays get weird otherwise, because the sprite changes. (retained from original desword because I have no idea what this is) /obj/item/twohanded/hypereutactic/AltClick(mob/living/user) if(!in_range(src, user)) //Basic checks to prevent abuse diff --git a/tgstation.dme b/tgstation.dme index 8217c8adbd..4d7f43a3e4 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -2475,6 +2475,6 @@ #include "modular_citadel\code\game\objects\items\devices\PDA\PDA.dm" #include "modular_citadel\code\game\objects\items\melee\eutactic_blades.dm" #include "modular_citadel\code\modules\crafting\recipes.dm" -#include "modular_citadel\code\modules\mob\living\silicon\robot\robot_modules.dm" #include "modular_citadel\code\modules\mob\living\carbon\human\human_defense.dm" +#include "modular_citadel\code\modules\mob\living\silicon\robot\robot_modules.dm" // END_INCLUDE From 73537f2951321d1efea10a5ba340c5b154887451 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 1 Jan 2018 07:40:00 -0600 Subject: [PATCH 098/104] Automatic changelog generation for PR #4555 [ci skip] --- html/changelogs/AutoChangeLog-pr-4555.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4555.yml diff --git a/html/changelogs/AutoChangeLog-pr-4555.yml b/html/changelogs/AutoChangeLog-pr-4555.yml new file mode 100644 index 0000000000..6197224d10 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4555.yml @@ -0,0 +1,5 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - code_imp: "Forensics is now a datum component." + - balance: "NPC humans will now start leaving fingerprints on things they touch!" From ea3652c30e0346f2f7e08c8bff2ccfcc50938307 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 1 Jan 2018 11:07:40 -0600 Subject: [PATCH 099/104] fuk --- code/__HELPERS/roundend.dm | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index 0ba19e795e..d7a51663a5 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -103,10 +103,10 @@ if(LAZYLEN(GLOB.round_end_notifiees)) send2irc("Notice", "[GLOB.round_end_notifiees.Join(", ")] the round has ended.") - for(var/client/C in GLOB.clients) + /*for(var/client/C in GLOB.clients) if(!C.credits) C.RollCredits() - C.playtitlemusic(40) + C.playtitlemusic(40)*/ display_report() @@ -434,10 +434,7 @@ /proc/printplayer(datum/mind/ply, fleecheck) - var/jobtext = "" - if(ply.assigned_role) - jobtext = " the [ply.assigned_role]" - var/text = "[ply.key] was [ply.name][jobtext] and" + var/text = "[ply.key] was [ply.name] the [ply.assigned_role] and" if(ply.current) if(ply.current.stat == DEAD) text += " died" @@ -445,7 +442,7 @@ text += " survived" if(fleecheck) var/turf/T = get_turf(ply.current) - if(!T || !is_station_level(T.z)) + if(!T || !(T.z in GLOB.station_z_levels)) text += " while fleeing the station" if(ply.current.real_name != ply.name) text += " as [ply.current.real_name]" From 3ee25693794765b2a9266b1e5a39c8a8161a1459 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 1 Jan 2018 14:07:17 -0600 Subject: [PATCH 100/104] Update borer_event.dm --- code/game/gamemodes/miniantags/borer/borer_event.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/miniantags/borer/borer_event.dm b/code/game/gamemodes/miniantags/borer/borer_event.dm index 567adddf53..e036c2a474 100644 --- a/code/game/gamemodes/miniantags/borer/borer_event.dm +++ b/code/game/gamemodes/miniantags/borer/borer_event.dm @@ -27,7 +27,7 @@ if(QDELETED(temp_vent)) continue if(temp_vent.loc.z == ZLEVEL_STATION_PRIMARY && !temp_vent.welded) - var/datum/pipeline/temp_vent_parent = temp_vent.PARENT1 + var/datum/pipeline/temp_vent_parent = temp_vent.parents[1] if(temp_vent_parent.other_atmosmch.len > 20) vents += temp_vent From 04f19ea53d56c74fd06511530393978e1dacdcfd Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 1 Jan 2018 20:18:43 -0500 Subject: [PATCH 101/104] ACTUALLY FIXES VORE --- .../code/modules/mob/living/carbon/human/human_defense.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_citadel/code/modules/mob/living/carbon/human/human_defense.dm b/modular_citadel/code/modules/mob/living/carbon/human/human_defense.dm index b61df944d1..1952b3a3b8 100644 --- a/modular_citadel/code/modules/mob/living/carbon/human/human_defense.dm +++ b/modular_citadel/code/modules/mob/living/carbon/human/human_defense.dm @@ -1,4 +1,4 @@ -/mob/living/human/grabbedby(mob/living/carbon/user, supress_message = 0) +/mob/living/carbon/human/grabbedby(mob/living/carbon/user, supress_message = 0) if(user == src && pulling && !pulling.anchored && grab_state >= GRAB_AGGRESSIVE && isliving(pulling)) vore_attack(user, pulling) else From 946bba6b98da35951e3ce5ce7e76dc7e154a5245 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 1 Jan 2018 21:34:29 -0600 Subject: [PATCH 102/104] Automatic changelog generation for PR #4628 [ci skip] --- html/changelogs/AutoChangeLog-pr-4628.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4628.yml diff --git a/html/changelogs/AutoChangeLog-pr-4628.yml b/html/changelogs/AutoChangeLog-pr-4628.yml new file mode 100644 index 0000000000..08311f545a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4628.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - bugfix: "Vore is now actually fixed. Fuck." From e395cded9d2d71a10a21e0272a44f9bf126632d4 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Tue, 2 Jan 2018 04:34:21 -0600 Subject: [PATCH 103/104] cl --- html/changelogs/AutoChangeLog-pr-4628.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4628.yml diff --git a/html/changelogs/AutoChangeLog-pr-4628.yml b/html/changelogs/AutoChangeLog-pr-4628.yml new file mode 100644 index 0000000000..08311f545a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4628.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - bugfix: "Vore is now actually fixed. Fuck." From c5a70ff34c1899341195f2a6985d4b939b8f68e2 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 2 Jan 2018 04:52:40 -0600 Subject: [PATCH 104/104] Automatic changelog generation for PR #4430 [ci skip] --- html/changelogs/AutoChangeLog-pr-4430.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4430.yml diff --git a/html/changelogs/AutoChangeLog-pr-4430.yml b/html/changelogs/AutoChangeLog-pr-4430.yml new file mode 100644 index 0000000000..11fd6bb4a7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4430.yml @@ -0,0 +1,4 @@ +author: "Naksu" +delete-after: True +changes: + - tweak: "Hostile mobs on z-levels without living players will now conserve their efforts and simply not run AI routines at all. Also, idling mob routines should be significantly cheaper on non-station Z-levels."