diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index d25839b92f..2d912d7104 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -641,6 +641,10 @@ Isn't that confusing?
There is also an undocumented keyword called `static` that has the same behaviour as global but more correctly describes BYOND's behaviour. Therefore, we always use static instead of global where we need it, as it reduces suprise when reading BYOND code.
+### Don't create code that hangs references
+
+This is part of the larger issue of hard deletes, read this file for more info: [Guide to Harddels](.\guides\HARDDELETES.md)
+
## Pull Request Process
There is no strict process when it comes to merging pull requests. Pull requests will sometimes take a while before they are looked at by a maintainer; the bigger the change, the more time it will take before they are accepted into the code. Every team member is a volunteer who is giving up their own time to help maintain and contribute, so please be courteous and respectful. Here are some helpful ways to make it easier for you and for the maintainers when making a pull request.
diff --git a/.github/guides/HARDDELETES.md b/.github/guides/HARDDELETES.md
new file mode 100644
index 0000000000..defc09360a
--- /dev/null
+++ b/.github/guides/HARDDELETES.md
@@ -0,0 +1,289 @@
+# Hard Deletes
+
+> Garbage collection is pretty gothic when you think about it.
+>
+>An object in code is like a ghost, clinging to its former life, and especially to the people it knew. It can only pass on and truly die when it has dealt with its unfinished business. And only when its been forgotten by everyone who ever knew it. If even one other object remembers it, it has a connection to the living world that lets it keep hanging on
+>
+>There is a kind of sombre tone to fixing GC errors too, its almost shamanistic, making sure all these little objects clear up their final affairs in life before they die, to ensure they don't become ghosts
+>
+> -- Nanako
+
+### Table of contents
+
+1. [What is hard deletion](#What-is-hard-deletion)
+2. [Causes of hard deletes](#causes-of-hard-deletes)
+3. [Detecting hard deletes](#detecting-hard-deletes)
+4. [Techniques for fixing hard deletes](#techniques-for-fixing-hard-deletes)
+5. [Help my code is erroring how fix](#help-my-code-is-erroring-how-fix)
+
+
+## What is Hard Deletion
+
+Hard deletion is a very expensive operation that basically clears all references to some "thing" from memory. Objects that undergo this process are referred to as hard deletes, or simply harddels
+
+What follows is a discussion of the theory behind this, why we would ever do it, and the what we do to avoid doing it as often as possible
+
+I'm gonna be using words like references and garbage collection, but don't worry, it's not complex, just a bit hard to pierce
+
+### Why do we need to Hard Delete?
+
+Ok so let's say you're some guy called Jerry, and you're writing a programming language
+
+You want your coders to be able to pass around objects without doing a full copy. So you'll store the pack of data somewhere in memory
+
+```dm
+/someobject
+ var/id = 42
+ var/name = "some shit"
+```
+
+Then you want them to be able to pass that object into say a proc, without doing a full copy. So you let them pass in the object's location in memory instead
+This is called passing something by reference
+
+```dm
+someshit(someobject) //This isn't making a copy of someobject, it's passing in a reference to it
+```
+
+This of course means they can store that location in memory in another object's vars, or in a list, or whatever
+
+```dm
+/datum
+ var/reference
+
+/proc/someshit(mem_location)
+ var/datum/some_obj = new()
+ some_obj.reference = mem_location
+```
+
+But what happens when you get rid of the object we're passing around references to? If we just cleared it out from memory, everything that holds a reference to it would suddenly be pointing to nowhere, or worse, something totally different!
+
+So then, you've gotta do something to clean up these references when you want to delete an object
+
+We could hold a list of references to everything that references us, but god, that'd get really expensive wouldn't it
+
+Why not keep count of how many times we're referenced then? If an object's ref count is ever 0, nothing whatsoever cares about it, so we can freely get rid of it
+
+But if something's holding onto a reference to us, we're not gonna have any idea where or what it is
+
+So I guess you should scan all of memory for that reference?
+
+```dm
+del(someobject) //We now need to scan memory until we find the thing holding a ref to us, and clear it
+```
+
+This pattern is about how BYOND handles this problem of hanging references, or Garbage Collection
+
+It's not a broken system, but as you can imagine scanning all of memory gets expensive fast
+
+What can we do to help that?
+
+### How we can avoid hard deletes
+
+If hard deletion is so slow, we're gonna need to clean up all our references ourselves
+
+In our codebase we do this with `/datum/proc/Destroy()`, a proc called by `qdel()`, whose purpose I will explain later
+
+This procs only job is cleaning up references to the object it's called on. Nothing more, nothing else. Don't let me catch you giving it side effects
+
+There's a long long list of things this does, since we use it a TON. So I can't really give you a short description. It will always move the object to nullspace though
+
+## Causes Of Hard Deletes
+
+Now that you know the theory, let's go over what can actually cause hard deletes. Some of this is obvious, some of it's much less so.
+
+The BYOND reference has a list [Here](https://secure.byond.com/docs/ref/#/DM/garbage), but it's not a complete one
+
+* Stored in a var
+* An item in a list, or associated with a list item
+* Has a tag
+* Is on the map (always true for turfs)
+* Inside another atom's contents
+* Inside an atom's vis_contents
+* A temporary value in a still-running proc
+* Is a mob with a key
+* Is an image object attached to an atom
+
+Let's briefly go over the more painful ones yeah?
+
+### Sleeping procs
+
+Any proc that calls `sleep()`, `spawn()`, or anything that creates a separate "thread" (not technically a thread, but it's the same in these terms. Not gonna cause any race conditions tho) will hang references to any var inside it. This includes the usr it started from, the src it was called on, and any vars created as a part of processing
+
+### Static vars
+
+`/static` and `/global` vars count for this too, they'll hang references just as well as anything. Be wary of this, these suckers can be a pain to solve
+
+### Range() and View() like procs
+
+Some internal BYOND procs will hold references to objects passed into them for a time after the proc is finished doing work, because they cache the returned info to make some code faster. You should never run into this issue, since we wait for what should be long enough to avoid this issue as a part of garbage collection
+
+This is what `qdel()` does by the by, it literally just means queue deletion. A reference to the object gets put into a queue, and if it still exists after 5 minutes or so, we hard delete it
+
+### Walk() procs
+
+Calling `walk()` on something will put it in an internal queue, which it'll remain in until `walk(thing, 0)` is called on it, which removes it from the queue
+
+This sort is very cheap to harddel, since BYOND prioritizes checking this queue first when it's clearing refs, but it should be avoided since it causes false positives
+
+You can read more about how BYOND prioritizes these things [Here](https://www.patreon.com/posts/diving-for-35855766)
+
+## Detecting Hard Deletes
+
+For very simple hard deletes, simple inspection should be enough to find them. Look at what the object does during `Initialize()`, and see if it's doing anything it doesn't undo later.
+If that fails, search the object's typepath, and look and see if anything is holding a reference to it without regard for the object deleting
+
+BYOND currently doesn't have the capability to give us information about where a hard delete is. Fortunately we can search for most all of then ourselves.
+The procs to perform this search are hidden behind compile time defines, since they'd be way too risky to expose to admin button pressing
+
+If you're having issues solving a harddel and want to perform this check yourself, go to `_compile_options.dm` and uncomment `TESTING`, `REFERENCE_TRACKING`, and `GC_FAILURE_HARD_LOOKUP`
+
+You can read more about what each of these do in that file, but the long and short of it is if something would hard delete our code will search for the reference (This will look like your game crashing, just hold out) and print information about anything it finds to the runtime log, which you can find inside the round folder inside `/data/logs/year/month/day`
+
+It'll tell you what object is holding the ref if it's in an object, or what pattern of list transversal was required to find the ref if it's hiding in a list of some sort
+
+## Techniques For Fixing Hard Deletes
+
+Once you've found the issue, it becomes a matter of making sure the ref is cleared as a part of Destroy(). I'm gonna walk you through a few patterns and discuss how you might go about fixing them
+
+### Our Tools
+
+First and simplest we have `Destroy()`. Use this to clean up after yourself for simple cases
+
+```dm
+/someobject/Initialize(mapload)
+ . = ..()
+ GLOB.somethings += src //We add ourselves to some global list
+
+/someobject/Destroy()
+ GLOB.somethings -= src //So when we Destroy() clean yourself from the list
+ return ..()
+```
+
+Next, and slightly more complex, pairs of objects that reference each other
+
+This is helpful when for cases where both objects "own" each other
+
+```dm
+/someobject
+ var/someotherobject/buddy
+
+/someotherobject
+ var/someobject/friend
+
+/someobject/Initialize(mapload)
+ if(!buddy)
+ buddy = new()
+ buddy.friend = src
+
+/someotherobject/Initialize(mapload)
+ if(!friend)
+ friend = new()
+ friend.buddy = src
+
+/someobject/Destroy()
+ if(buddy)
+ buddy.friend = null //Make sure to clear their ref to you
+ buddy = null //We clear our ref to them to make sure nothing goes wrong
+
+/someotherobject/Destroy()
+ if(friend)
+ friend.buddy = null //Make sure to clear their ref to you
+ friend = null //We clear our ref to them to make sure nothing goes wrong
+```
+
+Something similar can be accomplished with `QDELETED()`, a define that checks to see if something has started being `Destroy()`'d yet, and `QDEL_NULL()`, a define that `qdel()`'s a var and then sets it to null
+
+Now let's discuss something a bit more complex, weakrefs
+
+You'll need a bit of context, so let's do that now
+
+BYOND has an internal bit of behavior that looks like this
+
+`var/string = "\ref[someobject]"`
+
+This essentially gets that object's position in memory directly. Unlike normal references, this doesn't count for hard deletes. You can retrieve the object in question by using `locate()`
+
+`var/someobject/someobj = locate(string)`
+
+This has some flaws however, since the bit of memory we're pointing to might change, which would cause issues. Fortunately we've developed a datum to handle worrying about this for you, `/datum/weakref`
+
+You can create one using the `WEAKREF()` proc, and use weakref.resolve() to retrieve the actual object
+
+This should be used for things that your object doesn't "own", but still cares about
+
+For instance, a paper bin would own the paper inside it, but the paper inside it would just hold a weakref to the bin
+
+There's no need to clean these up, just make sure you account for it being null, since it'll return that if the object doesn't exist or has been queued for deletion
+
+```dm
+/someobject
+ var/datum/weakref/our_coin
+
+/someobject/proc/set_coin(/obj/item/coin/new_coin)
+ our_coin = WEAKREF(new_coin)
+
+/someobject/proc/get_value()
+ if(!our_coin)
+ return 0
+
+ var/obj/item/coin/potential_coin = our_coin.resolve()
+ if(!potential_coin)
+ our_coin = null //Remember to clear the weakref if we get nothing
+ return 0
+ return potential_coin.value
+```
+
+Now, for the worst case scenario
+
+Let's say you've got a var that's used too often to be weakref'd without making the code too expensive
+
+You can't hold a paired reference to it because it's not like it would ever care about you outside of just clearing the ref
+
+So then, we want to temporarily remember to clear a reference when it's deleted
+
+This is where I might lose you, but we're gonna use signals
+
+`qdel()`, the proc that sets off this whole deletion business, sends a signal called `COMSIG_PARENT_QDELETING`
+
+We can listen for that signal, and if we hear it clear whatever reference we may have
+
+Here's an example
+
+```dm
+/somemob
+ var/mob/target
+
+/somemob/proc/set_target(new_target)
+ if(target)
+ UnregisterSignal(target, COMSIG_PARENT_QDELETING) //We need to make sure any old signals are cleared
+ target = new_target
+ if(target)
+ RegisterSignal(target, COMSIG_PARENT_QDELETING, PROC_REF(clear_target)) //Call clear_target if target is ever qdel()'d
+
+/somemob/proc/clear_target(datum/source)
+ SIGNAL_HANDLER
+ set_target(null)
+```
+
+This really should be your last resort, since signals have some limitations. If some subtype of somemob also registered for parent_qdeleting on the same target you'd get a runtime, since signals don't support it
+
+But if you can't do anything else for reasons of conversion ease, or hot code, this will work
+
+## Help My Code Is Erroring How Fix
+
+First, do a quick check.
+
+Are you doing anything to the object in `Initialize()` that you don't undo in `Destroy()`? I don't mean like, setting its name, but are you adding it to any lists, stuff like that
+
+If this fails, you're just gonna have to read over this doc. You can skip the theory if you'd like, but it's all pretty important for having an understanding of this problem
+
+## Misc facts
+
+> i like rust and all, buuut it removes garbage collecctor, and i pretend garbage collector is a cute girl checking my code
+>
+> -- Armhulenn
+
+- The reference tracker, while powerful, is incredibly easy to break
+If it weren't for those unit tests we'd still be missing list["a"] = list(ref)
+- Everyone but me sucks, because everyone but me keeps adding new hard deletes
+- Garbage collection is a spook, best practice is to use a random reference in place of null, it scares the compiler demons
diff --git a/.tgs.yml b/.tgs.yml
index 22a65f0edc..66dc698137 100644
--- a/.tgs.yml
+++ b/.tgs.yml
@@ -3,7 +3,7 @@
version: 1
# The BYOND version to use (kept in sync with dependencies.sh by the "TGS Test Suite" CI job)
# Must be interpreted as a string, keep quoted
-byond: "514.1556"
+byond: "514.1589"
# Folders to create in "/Configuration/GameStaticFiles/"
static_files:
# Config directory should be static
@@ -18,6 +18,6 @@ linux_scripts:
PreCompile.sh: tools/tgs4_scripts/PreCompile.sh
# Same as above for Windows hosted servers
windows_scripts:
- PreCompile.bat: tools/tgs_scripts/PreCompile.bat
+ PreCompile.bat: tools/tgs4_scripts/PreCompile.bat
# The security level the game should be run at
security: Trusted
diff --git a/_maps/RandomRuins/SpaceRuins/listeningstation.dmm b/_maps/RandomRuins/SpaceRuins/listeningstation.dmm
index 49646fbd71..a4d5564ca3 100644
--- a/_maps/RandomRuins/SpaceRuins/listeningstation.dmm
+++ b/_maps/RandomRuins/SpaceRuins/listeningstation.dmm
@@ -9,61 +9,65 @@
/turf/closed/wall,
/area/ruin/space/has_grav/listeningstation)
"ad" = (
-/obj/machinery/computer/message_monitor{
- dir = 2
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
},
-/obj/machinery/airalarm/syndicate{
- pixel_y = 24
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/item/paper/monitorkey,
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/listeningstation)
"ae" = (
-/obj/structure/table/reinforced,
-/obj/machinery/firealarm{
- dir = 2;
- pixel_y = 24
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
},
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/computer/libraryconsole/bookmanagement,
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/listeningstation)
"af" = (
/obj/structure/rack{
dir = 8
},
-/obj/item/clothing/mask/gas{
- pixel_x = -3;
- pixel_y = 3
- },
/obj/effect/turf_decal/stripes/line,
-/obj/item/clothing/mask/gas,
+/obj/item/clothing/mask/gas/syndicate{
+ pixel_y = -1;
+ pixel_x = -7
+ },
+/obj/item/clothing/mask/gas/syndicate{
+ pixel_y = -1;
+ pixel_x = 8
+ },
+/obj/item/clothing/mask/gas/syndicate,
/turf/open/floor/mineral/plastitanium/red,
/area/ruin/space/has_grav/listeningstation)
"ag" = (
/turf/closed/wall/r_wall,
/area/ruin/space/has_grav/listeningstation)
"ah" = (
-/obj/machinery/computer/camera_advanced{
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/newscaster{
- pixel_y = 32
- },
-/obj/item/radio/intercom{
- freerange = 1;
- name = "Syndicate Radio Intercom";
- pixel_x = -30
- },
+/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/listeningstation)
"ai" = (
-/obj/structure/chair/office/dark{
- dir = 8
- },
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -77,8 +81,6 @@
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/listeningstation)
"aj" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -89,29 +91,21 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/listeningstation)
"ak" = (
-/obj/machinery/telecomms/relay/preset/ruskie{
- use_power = 0
- },
-/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/listeningstation)
"al" = (
/obj/structure/table,
/obj/item/storage/toolbox/syndicate,
/obj/item/flashlight{
- pixel_y = -12
+ pixel_y = -17
},
-/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/listeningstation)
"am" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -136,12 +130,20 @@
/turf/open/floor/plating,
/area/ruin/space/has_grav/listeningstation)
"ao" = (
-/obj/machinery/light/small,
-/obj/structure/sign/warning/vacuum{
- pixel_y = 32
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
},
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/listeningstation)
"ap" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
@@ -155,45 +157,48 @@
/turf/open/floor/plating,
/area/ruin/space/has_grav/listeningstation)
"aq" = (
-/obj/structure/curtain,
-/obj/machinery/shower{
- pixel_y = 14
- },
-/obj/machinery/light/small,
-/obj/item/soap,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel/showroomfloor,
-/area/ruin/space/has_grav/listeningstation)
-"ar" = (
-/obj/structure/sink{
- dir = 4;
- pixel_x = 11
- },
-/obj/structure/toilet{
- pixel_y = 18
- },
-/obj/structure/mirror{
- pixel_x = 28
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel/showroomfloor,
-/area/ruin/space/has_grav/listeningstation)
-"as" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/computer/med_data/syndie{
- dir = 4;
- req_one_access = null
+/obj/machinery/light/small{
+ brightness = 3;
+ dir = 8
},
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/listeningstation)
-"at" = (
-/obj/effect/decal/cleanable/dirt,
+"ar" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 4;
piping_layer = 3;
pixel_x = 5;
pixel_y = 5
},
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"as" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"at" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -204,16 +209,13 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/listeningstation)
"au" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -224,6 +226,9 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 10
+ },
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/listeningstation)
"av" = (
@@ -247,8 +252,6 @@
pixel_x = 3;
pixel_y = -7
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
/obj/machinery/airalarm/syndicate{
dir = 4;
pixel_x = -24
@@ -256,83 +259,42 @@
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/listeningstation)
"ax" = (
-/obj/machinery/light/small{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/corner{
- dir = 8
- },
-/obj/machinery/button/door{
- id = "syndie_listeningpost_external";
- name = "External Bolt Control";
- normaldoorcontrol = 1;
- pixel_x = 24;
- req_access_txt = "150";
- specialfunctions = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/effect/turf_decal/tile/neutral,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3,
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/listeningstation)
"ay" = (
-/obj/machinery/door/airlock{
- name = "Toilet"
- },
-/turf/open/floor/plasteel/showroomfloor,
-/area/ruin/space/has_grav/listeningstation)
-"az" = (
/obj/structure/filingcabinet,
-/obj/item/paper/fluff/ruins/listeningstation/reports/april,
-/obj/item/paper/fluff/ruins/listeningstation/reports/may,
-/obj/item/paper/fluff/ruins/listeningstation/reports/june,
-/obj/item/paper/fluff/ruins/listeningstation/reports/july,
-/obj/item/paper/fluff/ruins/listeningstation/reports/august,
-/obj/item/paper/fluff/ruins/listeningstation/reports/september,
-/obj/item/paper/fluff/ruins/listeningstation/reports/october,
-/obj/item/paper/fluff/ruins/listeningstation/receipt,
-/obj/effect/decal/cleanable/dirt,
/obj/item/paper/fluff/ruins/listeningstation/odd_report,
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/listeningstation)
+"az" = (
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/listeningstation)
"aA" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/carpet/red,
/area/ruin/space/has_grav/listeningstation)
"aB" = (
/obj/structure/rack{
dir = 8
},
/obj/item/multitool,
-/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/listeningstation)
"aC" = (
@@ -340,91 +302,73 @@
dir = 8;
layer = 2.9
},
-/obj/item/mining_scanner,
-/obj/item/pickaxe,
-/obj/effect/decal/cleanable/dirt,
+/obj/item/tank/internals/doubleoxygen,
+/obj/item/tank/internals/doubleoxygen{
+ pixel_x = -7;
+ pixel_y = 7
+ },
+/obj/item/tank/internals/doubleoxygen{
+ pixel_x = 9;
+ pixel_y = -6
+ },
+/obj/item/tank/internals/doubleoxygen{
+ pixel_x = 9;
+ pixel_y = 2
+ },
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/listeningstation)
"aD" = (
-/obj/structure/table,
-/obj/machinery/light/small{
- brightness = 3;
+/obj/structure/table/wood/poker,
+/obj/item/toy/cards/deck/syndicate,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"aE" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
dir = 8
},
-/obj/item/storage/box/donkpockets{
- pixel_x = -2;
- pixel_y = 6
- },
-/obj/item/storage/box/donkpockets{
- pixel_y = 3
- },
-/obj/item/storage/box/donkpockets{
- pixel_x = 2
- },
-/obj/item/reagent_containers/food/snacks/chocolatebar,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/sign/poster/contraband/random{
- pixel_x = -32
- },
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral,
+/obj/structure/closet/emcloset/anchored,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aF" = (
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
+/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/listeningstation)
-"aE" = (
+"aG" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/obj/structure/tank_dispenser/oxygen{
oxygentanks = 4
},
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
/turf/open/floor/mineral/plastitanium,
/area/ruin/space/has_grav/listeningstation)
-"aF" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+"aH" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
+ dir = 4
},
/turf/closed/wall/r_wall,
/area/ruin/space/has_grav/listeningstation)
-"aG" = (
-/obj/machinery/atmospherics/components/unary/outlet_injector/on{
- dir = 8;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
-/turf/open/floor/plating/airless,
-/area/ruin/space/has_grav/listeningstation)
-"aH" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/closet/crate/bin,
-/obj/structure/extinguisher_cabinet{
- pixel_x = -27;
- pixel_y = 1
- },
+"aI" = (
+/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
@@ -433,40 +377,15 @@
},
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/listeningstation)
-"aI" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel,
-/area/ruin/space/has_grav/listeningstation)
"aJ" = (
-/obj/machinery/washing_machine{
- pixel_x = 4
+/obj/machinery/door/airlock{
+ name = "Cabin"
},
-/obj/structure/window{
- dir = 8
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/carpet/red,
/area/ruin/space/has_grav/listeningstation)
"aK" = (
/obj/machinery/door/firedoor,
-/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
/obj/machinery/door/airlock/hatch{
name = "Telecommunications";
req_access_txt = "150"
@@ -481,23 +400,19 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/listeningstation)
"aL" = (
-/obj/item/bombcore/badmin{
- anchored = 1;
- invisibility = 100
+/obj/structure/chair/stool,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
-/turf/closed/wall,
+/turf/open/floor/plasteel,
/area/ruin/space/has_grav/listeningstation)
"aM" = (
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
/obj/machinery/door/airlock/hatch{
name = "E.V.A. Equipment";
req_access_txt = "150"
@@ -512,26 +427,15 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/listeningstation)
"aN" = (
-/obj/structure/table,
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = -26
- },
-/obj/machinery/microwave,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
+/obj/structure/bookcase/random/adult,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
dir = 8
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/carpet/black,
/area/ruin/space/has_grav/listeningstation)
"aO" = (
/obj/machinery/light/small{
@@ -547,17 +451,16 @@
icon_state = "1-2"
},
/obj/effect/turf_decal/stripes/line,
-/obj/effect/decal/cleanable/dirt,
/obj/item/storage/box/lights/bulbs,
/obj/item/stack/sheet/mineral/plasma{
amount = 30
},
/obj/item/stock_parts/cell/high/plus,
-/turf/open/floor/plating,
+/obj/item/inducer/sci/combat,
+/turf/open/floor/plasteel,
/area/ruin/space/has_grav/listeningstation)
"aP" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/turf/open/floor/plasteel,
@@ -566,11 +469,8 @@
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 6;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 1
},
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/listeningstation)
@@ -579,63 +479,44 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
/obj/machinery/door/airlock{
name = "Personal Quarters"
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/listeningstation)
"aS" = (
-/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
/obj/effect/turf_decal/tile/red{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/listeningstation)
"aT" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 2;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
/obj/effect/turf_decal/tile/red{
dir = 1
},
/obj/effect/turf_decal/tile/red{
dir = 4
},
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/listeningstation)
"aU" = (
/obj/machinery/airalarm/syndicate{
pixel_y = 24
},
-/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
/obj/effect/baseturf_helper/asteroid/airless,
/obj/effect/turf_decal/tile/red{
dir = 1
@@ -643,24 +524,24 @@
/obj/effect/turf_decal/tile/red{
dir = 4
},
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/listeningstation)
"aV" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
/obj/effect/turf_decal/tile/red{
dir = 1
},
/obj/effect/turf_decal/tile/red{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/listeningstation)
"aW" = (
@@ -674,45 +555,36 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 1;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
/obj/effect/turf_decal/tile/red{
dir = 1
},
/obj/effect/turf_decal/tile/red{
dir = 4
},
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/listeningstation)
"aX" = (
-/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
/obj/effect/turf_decal/tile/red{
dir = 1
},
/obj/effect/turf_decal/tile/red{
dir = 4
},
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/listeningstation)
"aY" = (
/obj/machinery/vending/snack/random{
extended_inventory = 1
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
/obj/structure/sign/poster/contraband/random{
pixel_x = 32
},
@@ -722,81 +594,50 @@
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/listeningstation)
"aZ" = (
-/obj/structure/table,
-/obj/machinery/computer/security/telescreen/entertainment{
- pixel_x = -30
- },
-/obj/item/reagent_containers/food/drinks/beer{
- pixel_x = -4;
- pixel_y = 14
- },
-/obj/item/reagent_containers/food/drinks/beer{
- pixel_x = 3;
- pixel_y = 11
- },
-/obj/item/storage/fancy/cigarettes/cigpack_syndicate{
- pixel_x = -3
- },
-/obj/item/lighter{
- pixel_x = 7;
- pixel_y = -3
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
+/obj/structure/filingcabinet,
+/obj/item/paper/fluff/ruins/listeningstation/reports/october,
+/obj/item/paper/fluff/ruins/listeningstation/reports/september,
+/obj/item/paper/fluff/ruins/listeningstation/reports/august,
+/obj/item/paper/fluff/ruins/listeningstation/reports/july,
+/obj/item/paper/fluff/ruins/listeningstation/reports/june,
+/obj/item/paper/fluff/ruins/listeningstation/reports/may,
+/obj/item/paper/fluff/ruins/listeningstation/reports/april,
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/listeningstation)
"ba" = (
-/obj/structure/chair/stool,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 9
},
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/listeningstation)
"bb" = (
-/obj/effect/turf_decal/stripes/red/corner,
-/obj/machinery/light/small{
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/airalarm/syndicate{
- dir = 8;
- pixel_x = 24
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/listeningstation)
"bc" = (
/obj/machinery/light/small,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/closet/emcloset/anchored,
-/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/listeningstation)
"bd" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel,
+/obj/structure/bed/pod{
+ dir = 1
+ },
+/obj/item/bedsheet/syndie{
+ dir = 8
+ },
+/obj/effect/mob_spawn/human/lavaland_syndicate/comms/space{
+ assignedrole = "Space Syndicate";
+ dir = 4;
+ flavour_text = "You are a syndicate agent, assigned to a small listening post station situated near your hated enemy's top secret research facility: Space Station 13. Monitor enemy activity as best you can, and try to keep a low profile. DON'T abandon the base without good cause. Use the communication equipment to provide support to any field agents, and sow disinformation to throw Nanotrasen off your trail. Do not let the base fall into enemy hands!"
+ },
+/turf/open/floor/carpet/red,
/area/ruin/space/has_grav/listeningstation)
"be" = (
-/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1
},
@@ -816,83 +657,49 @@
/area/ruin/space/has_grav/listeningstation)
"bg" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/turf/open/floor/plasteel/white/side,
/area/ruin/space/has_grav/listeningstation)
"bh" = (
/obj/machinery/vending/cola/random{
extended_inventory = 1
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/white/corner{
dir = 8
},
/area/ruin/space/has_grav/listeningstation)
"bi" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
-/turf/open/floor/plasteel/grimy,
-/area/ruin/space/has_grav/listeningstation)
-"bj" = (
-/obj/machinery/computer/arcade/orion_trail,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
},
-/obj/effect/turf_decal/tile/neutral{
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
dir = 8
},
-/turf/open/floor/plasteel/dark,
-/area/ruin/space/has_grav/listeningstation)
-"bk" = (
-/obj/effect/turf_decal/stripes/red/line{
- dir = 4
- },
-/obj/effect/turf_decal/caution/red{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/listeningstation)
-"bl" = (
-/obj/machinery/syndicatebomb/self_destruct{
- anchored = 1
+"bj" = (
+/obj/structure/chair/comfy/black{
+ dir = 8
},
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"bk" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"bl" = (
/obj/structure/sign/warning/securearea{
desc = "A warning sign which reads 'DANGER: SELF DESTRUCT DEVICE'.";
name = "DANGER: SELF DESTRUCT DEVICE";
pixel_x = 32
},
-/obj/machinery/door/window/brigdoor{
- dir = 8;
- req_access_txt = "150"
- },
-/turf/open/floor/circuit/red,
+/turf/closed/wall,
/area/ruin/space/has_grav/listeningstation)
"bm" = (
/obj/machinery/door/airlock/maintenance,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plating,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/turf/open/floor/plasteel,
/area/ruin/space/has_grav/listeningstation)
"bn" = (
/obj/structure/sign/departments/medbay/alt,
@@ -900,16 +707,11 @@
/area/ruin/space/has_grav/listeningstation)
"bo" = (
/obj/machinery/door/firedoor,
-/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
/obj/machinery/door/airlock/medical/glass{
name = "Medbay"
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/turf/open/floor/plasteel/white,
/area/ruin/space/has_grav/listeningstation)
"bp" = (
@@ -920,11 +722,7 @@
name = "Cabin"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/listeningstation)
"bq" = (
@@ -940,7 +738,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
+/turf/open/floor/plasteel,
/area/ruin/space/has_grav/listeningstation)
"br" = (
/obj/structure/cable/yellow{
@@ -952,8 +750,11 @@
name = "Syndicate Listening Post APC";
pixel_x = 24
},
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
+/obj/structure/cable/yellow{
+ icon_state = "0-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/turf/open/floor/plasteel,
/area/ruin/space/has_grav/listeningstation)
"bs" = (
/obj/structure/closet/crate/freezer,
@@ -962,12 +763,8 @@
pixel_y = 3
},
/obj/item/reagent_containers/blood/OMinus,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 4
},
/turf/open/floor/plasteel/white/side{
dir = 9
@@ -975,30 +772,1365 @@
/area/ruin/space/has_grav/listeningstation)
"bt" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 9;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 9
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 1
+ },
+/area/ruin/space/has_grav/listeningstation)
+"bu" = (
+/turf/open/floor/plasteel/white/side{
+ dir = 4
+ },
+/area/ruin/space/has_grav/listeningstation)
+"bv" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"bw" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/turf/closed/wall,
+/area/ruin/space/has_grav/listeningstation)
+"bx" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"by" = (
+/obj/machinery/power/terminal{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "0-2";
+ pixel_y = 1
+ },
+/obj/structure/reagent_dispensers/fueltank,
+/obj/item/clothing/head/welding,
+/obj/item/weldingtool/largetank,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"bz" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"bA" = (
+/turf/open/floor/plasteel/white/side{
+ dir = 8
+ },
+/area/ruin/space/has_grav/listeningstation)
+"bB" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel/white/side{
+ dir = 8
+ },
+/area/ruin/space/has_grav/listeningstation)
+"bC" = (
+/obj/structure/cable,
+/obj/machinery/power/port_gen/pacman{
+ anchored = 1
+ },
+/obj/effect/turf_decal/bot,
+/obj/item/wrench,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"bD" = (
+/obj/structure/table,
+/obj/item/storage/box/lights/bulbs,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"bF" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/meter,
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"bH" = (
+/obj/effect/turf_decal/bot,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"bI" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"bJ" = (
+/obj/docking_port/stationary{
+ dir = 4;
+ dwidth = 6;
+ height = 7;
+ id = "caravansyndicate3_listeningpost";
+ name = "Syndicate Listening Post";
+ width = 15
+ },
+/obj/docking_port/stationary{
+ dir = 4;
+ dwidth = 4;
+ height = 5;
+ id = "caravansyndicate1_listeningpost";
+ name = "Syndicate Listening Post";
+ width = 9
+ },
+/turf/template_noop,
+/area/template_noop)
+"cg" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
+ dir = 8
+ },
+/turf/closed/wall/r_wall,
+/area/ruin/space/has_grav/listeningstation)
+"cl" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/turf/open/floor/carpet/red,
+/area/ruin/space/has_grav/listeningstation)
+"cA" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
+ },
+/turf/open/floor/carpet/red,
+/area/ruin/space/has_grav/listeningstation)
+"di" = (
+/obj/structure/sink{
+ dir = 8;
+ pixel_x = -12;
+ pixel_y = 2
+ },
+/obj/structure/mirror{
+ pixel_x = -26
+ },
+/turf/open/floor/plasteel/showroomfloor,
+/area/ruin/space/has_grav/listeningstation)
+"dF" = (
+/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/n2{
+ dir = 1;
+ piping_layer = 3
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"dH" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/door/airlock/maintenance,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"dO" = (
+/obj/machinery/vending/snack/random{
+ onstation = 0
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"dV" = (
+/obj/machinery/computer/message_monitor{
+ dir = 2
+ },
+/obj/item/paper/monitorkey,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"es" = (
+/obj/machinery/atmospherics/miner/toxins,
+/turf/open/floor/plating/airless,
+/area/ruin/space/has_grav/listeningstation)
+"ey" = (
+/obj/structure/curtain,
+/obj/machinery/shower{
+ pixel_y = 14
+ },
+/obj/item/soap/syndie,
+/turf/open/floor/plasteel/showroomfloor,
+/area/ruin/space/has_grav/listeningstation)
+"eQ" = (
+/obj/machinery/power/compressor{
+ comp_id = "syndie_lavaland_incineratorturbine";
+ dir = 1;
+ luminosity = 2
+ },
+/obj/structure/cable,
+/obj/structure/cable{
+ icon_state = "0-2";
+ pixel_y = 1
+ },
+/turf/open/floor/engine/vacuum,
+/area/ruin/space/has_grav/listeningstation)
+"eR" = (
+/obj/structure/closet/crate/bin,
+/obj/structure/extinguisher_cabinet{
+ pixel_x = -27;
+ pixel_y = 1
+ },
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/listeningstation)
+"eW" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
+ dir = 4
+ },
+/turf/closed/wall/r_wall,
+/area/ruin/space/has_grav/listeningstation)
+"fo" = (
+/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer3{
+ dir = 4;
+ volume_rate = 200
+ },
+/turf/open/floor/plating/airless,
+/area/ruin/space/has_grav/listeningstation)
+"fE" = (
+/obj/machinery/power/smes{
+ charge = 5e+006
+ },
+/obj/structure/cable/yellow{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"fK" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/turf/closed/wall/r_wall,
+/area/ruin/space/has_grav/listeningstation)
+"fL" = (
+/obj/machinery/door/poddoor/incinerator_syndicatelava_aux,
+/turf/open/floor/engine/vacuum,
+/area/ruin/space/has_grav/listeningstation)
+"hg" = (
+/obj/machinery/door/airlock{
+ name = "Cabin"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/turf/open/floor/carpet/black,
+/area/ruin/space/has_grav/listeningstation)
+"hj" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/machinery/computer/arcade/amputation{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"hy" = (
+/turf/open/floor/engine/vacuum,
+/area/ruin/unpowered/no_grav)
+"hC" = (
+/obj/machinery/door/window/brigdoor{
+ dir = 4;
+ req_access_txt = "150"
+ },
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/listeningstation)
+"hG" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/machinery/vending/boozeomat/syndicate_access{
+ shut_up = 1;
+ onstation = 0
+ },
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/listeningstation)
+"ik" = (
+/turf/open/floor/carpet/black,
+/area/ruin/space/has_grav/listeningstation)
+"im" = (
+/obj/machinery/atmospherics/miner/oxygen,
+/turf/open/floor/plating/airless,
+/area/ruin/space/has_grav/listeningstation)
+"is" = (
+/obj/machinery/light/small{
+ dir = 4;
+ light_color = "#d8b1b1"
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"iK" = (
+/obj/structure/table,
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = -26
+ },
+/obj/machinery/microwave,
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/listeningstation)
+"jj" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4
+ },
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/listeningstation)
+"jm" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
+ dir = 10
+ },
+/turf/closed/wall/r_wall,
+/area/ruin/space/has_grav/listeningstation)
+"js" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
+ dir = 5
+ },
+/turf/closed/wall/r_wall,
+/area/ruin/space/has_grav/listeningstation)
+"ju" = (
+/obj/machinery/air_sensor{
+ frequency = 1442;
+ id_tag = "syndie_lavaland_o2_sensor"
+ },
+/turf/open/floor/plating/airless,
+/area/ruin/space/has_grav/listeningstation)
+"la" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_syndicatelava{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/ruin/space/has_grav/listeningstation)
+"mk" = (
+/obj/machinery/telecomms/relay/preset/ruskie{
+ use_power = 0
+ },
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"mA" = (
+/obj/structure/grille,
+/obj/structure/window/plastitanium,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
+ dir = 10
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"mR" = (
+/obj/machinery/computer/med_data/syndie{
+ dir = 4;
+ req_one_access = null
+ },
+/obj/machinery/light/small{
+ brightness = 3;
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"mV" = (
+/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer3{
+ dir = 8;
+ volume_rate = 200;
+ piping_layer = 2
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"mX" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{
+ dir = 8;
+ frequency = 1442;
+ id_tag = "syndie_lavaland_tox_out";
+ name = "toxin out"
+ },
+/turf/open/floor/plating/airless,
+/area/ruin/space/has_grav/listeningstation)
+"na" = (
+/obj/structure/table,
+/obj/item/storage/firstaid/regular,
+/obj/item/clothing/neck/stethoscope,
+/obj/item/storage/backpack/duffelbag/med/surgery,
+/obj/item/defibrillator/compact/combat/loaded,
+/turf/open/floor/plasteel/white/side{
+ dir = 10
+ },
+/area/ruin/space/has_grav/listeningstation)
+"nw" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"or" = (
+/obj/machinery/atmospherics/pipe/manifold/orange/visible{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"ow" = (
+/obj/machinery/power/port_gen/pacman/super,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"oL" = (
+/obj/structure/table/optable,
+/turf/open/floor/plasteel/white/side,
+/area/ruin/space/has_grav/listeningstation)
+"po" = (
+/obj/structure/toilet{
+ pixel_y = 18
+ },
+/turf/open/floor/plasteel/showroomfloor,
+/area/ruin/space/has_grav/listeningstation)
+"pp" = (
+/obj/machinery/door/poddoor/incinerator_syndicatelava_main,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"pr" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/cable/yellow{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"qc" = (
+/obj/structure/chair/stool,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"qQ" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/jukebox{
+ req_one_access = null
+ },
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"rc" = (
+/obj/structure/filingcabinet,
+/obj/item/paper/fluff/ruins/listeningstation/receipt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"rt" = (
+/obj/machinery/sleeper/syndie{
+ dir = 8
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 1
+ },
+/area/ruin/space/has_grav/listeningstation)
+"rv" = (
+/obj/machinery/atmospherics/components/trinary/mixer/airmix/flipped{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"rw" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/turf/closed/wall,
+/area/ruin/space/has_grav/listeningstation)
+"rx" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/manifold/supplymain/visible{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"sb" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/rack{
+ dir = 8
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/ruin/space/has_grav/listeningstation)
+"sg" = (
+/obj/machinery/door/airlock{
+ name = "Cabin"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/carpet/red,
+/area/ruin/space/has_grav/listeningstation)
+"ss" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"sD" = (
+/obj/machinery/door/airlock{
+ name = "Personal Quarters"
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"tn" = (
+/obj/structure/chair/office/dark{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"tI" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 9
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"tW" = (
+/obj/machinery/reagentgrinder{
+ pixel_y = 8
+ },
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/listeningstation)
+"uf" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/layer_manifold{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/ruin/space/has_grav/listeningstation)
+"uM" = (
+/obj/machinery/firealarm{
+ dir = 2;
+ pixel_y = 24
+ },
+/obj/structure/table,
+/obj/item/gun/ballistic/shotgun/boltaction,
+/obj/item/ammo_box/a762,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"uY" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3,
+/obj/machinery/atmospherics/components/binary/pump/on{
+ dir = 2;
+ name = "O2 to Incinerator";
+ target_pressure = 4500
+ },
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"ve" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 2
+ },
+/turf/open/floor/carpet/red,
+/area/ruin/space/has_grav/listeningstation)
+"vk" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 10
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"vG" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/obj/machinery/button/ignition/incinerator/syndicatelava{
+ pixel_x = 6;
+ pixel_y = -24
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"vM" = (
+/obj/machinery/light/small,
+/obj/structure/sign/warning/vacuum{
+ pixel_y = 32
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"vP" = (
+/obj/machinery/airalarm/syndicate{
+ pixel_y = 24
+ },
+/obj/machinery/newscaster{
+ pixel_x = -29
+ },
+/obj/machinery/computer/crew/syndie{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"vT" = (
+/obj/structure/grille,
+/obj/structure/window/plastitanium,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"wa" = (
+/obj/machinery/light/small,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 1
+ },
+/turf/open/floor/carpet/red,
+/area/ruin/space/has_grav/listeningstation)
+"wv" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"wV" = (
+/obj/item/reagent_containers/food/drinks/shaker,
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/listeningstation)
+"xf" = (
+/obj/structure/table/wood,
+/obj/item/ammo_box/magazine/m10mm,
+/obj/item/ammo_box/magazine/m10mm{
+ pixel_x = 7
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/turf/open/floor/carpet/red,
+/area/ruin/space/has_grav/listeningstation)
+"xC" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/turf/closed/wall/r_wall,
+/area/ruin/space/has_grav/listeningstation)
+"xG" = (
+/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/plasma{
+ dir = 1;
+ piping_layer = 3
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"xJ" = (
+/obj/machinery/light/small,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/carpet/red,
+/area/ruin/space/has_grav/listeningstation)
+"xP" = (
+/turf/open/floor/plasteel/showroomfloor,
+/area/ruin/space/has_grav/listeningstation)
+"yg" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/turf/open/floor/carpet/red,
+/area/ruin/space/has_grav/listeningstation)
+"yh" = (
+/obj/machinery/power/terminal{
+ dir = 1
+ },
+/obj/structure/closet/crate,
+/obj/item/stack/sheet/metal/fifty,
+/obj/item/storage/box/lights/bulbs,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/rods/twentyfive,
+/obj/item/stack/rods/twentyfive,
+/obj/item/stack/sheet/mineral/plasma{
+ amount = 30
+ },
+/obj/item/stock_parts/cell/high/plus,
+/obj/item/stock_parts/cell/high/plus,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"yC" = (
+/obj/machinery/air_sensor{
+ frequency = 1442;
+ id_tag = "syndie_lavaland_n2_sensor"
+ },
+/turf/open/floor/plating/airless,
+/area/ruin/space/has_grav/listeningstation)
+"yL" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/rack{
+ dir = 8
+ },
+/obj/item/paper{
+ info = "We took away your hardsuits because many operatives were leaving their posts to have orgies on stations nearby, dis-GUSTENG."
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/ruin/space/has_grav/listeningstation)
+"yY" = (
+/mob/living/carbon/monkey,
+/turf/open/floor/engine/vacuum,
+/area/ruin/space/has_grav/listeningstation)
+"zx" = (
+/obj/machinery/power/turbine{
+ luminosity = 2
+ },
+/obj/structure/cable,
+/turf/open/floor/engine/vacuum,
+/area/ruin/space/has_grav/listeningstation)
+"zT" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
+ dir = 5
+ },
+/obj/machinery/portable_atmospherics/canister,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 10
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"Am" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/rag,
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/listeningstation)
+"AC" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{
+ dir = 8;
+ frequency = 1442;
+ id_tag = "syndie_lavaland_o2_out";
+ name = "oxygen out"
+ },
+/turf/open/floor/plating/airless,
+/area/ruin/space/has_grav/listeningstation)
+"AJ" = (
+/obj/machinery/vending/cola/random{
+ onstation = 0
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"BE" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"BK" = (
+/obj/machinery/atmospherics/pipe/simple/supplymain/visible,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"Cd" = (
+/obj/item/radio/intercom{
+ freerange = 1;
+ name = "Syndicate Radio Intercom";
+ pixel_x = -30
+ },
+/obj/machinery/computer/secure_data/syndie{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"Ce" = (
+/obj/machinery/vending/donksofttoyvendor{
+ onstation = 0
+ },
+/turf/open/floor/carpet/black,
+/area/ruin/space/has_grav/listeningstation)
+"De" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4
+ },
+/obj/machinery/computer/monitor/secret,
+/obj/structure/cable/yellow{
+ icon_state = "0-2"
+ },
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"Dv" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"DA" = (
+/obj/machinery/computer/camera_advanced,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"DF" = (
+/mob/living/simple_animal/pet/penguin/emperor{
+ name = "Kowalski";
+ desc = "Analysis"
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"DJ" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"DK" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"EU" = (
+/obj/structure/grille,
+/obj/structure/window/plastitanium,
+/obj/machinery/atmospherics/pipe/simple/supplymain/visible{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"Ff" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supplymain/visible,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"Fv" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
+ dir = 5
+ },
+/turf/closed/wall/r_wall,
+/area/ruin/space/has_grav/listeningstation)
+"FX" = (
+/obj/structure/closet/secure_closet/medical1{
+ req_access = null;
+ req_access_txt = "150"
},
/turf/open/floor/plasteel/white/side{
dir = 5
},
/area/ruin/space/has_grav/listeningstation)
-"bu" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/closet/secure_closet/medical1{
- req_access = null;
- req_access_txt = "150"
+"Gf" = (
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/turf/open/floor/plasteel/white,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 1
+ },
+/obj/effect/mapping_helpers/airlock/locked,
+/obj/machinery/door/airlock/public/glass/incinerator/atmos_exterior,
+/turf/open/floor/engine/vacuum,
/area/ruin/space/has_grav/listeningstation)
-"bv" = (
-/obj/structure/bookcase/random,
-/turf/open/floor/plasteel/grimy,
+"Gr" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 8
+ },
+/turf/closed/wall,
/area/ruin/space/has_grav/listeningstation)
-"bw" = (
+"Gw" = (
+/obj/machinery/vending/autodrobe/all_access{
+ default_price = 0;
+ extra_price = 0;
+ fair_market_price = 0;
+ onstation = 0
+ },
+/turf/open/floor/carpet/black,
+/area/ruin/space/has_grav/listeningstation)
+"GB" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"GN" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/machinery/computer/arcade/battle{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"GY" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/listeningstation)
+"Hf" = (
+/obj/structure/sink{
+ dir = 4;
+ pixel_x = 11
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 4
+ },
+/area/ruin/space/has_grav/listeningstation)
+"Hq" = (
+/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer3{
+ dir = 1;
+ volume_rate = 200;
+ piping_layer = 2
+ },
+/turf/open/floor/engine/vacuum,
+/area/ruin/space/has_grav/listeningstation)
+"HH" = (
+/obj/structure/table/wood,
+/obj/item/ammo_box/magazine/m10mm,
+/obj/item/ammo_box/magazine/m10mm{
+ pixel_x = 7
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/turf/open/floor/carpet/red,
+/area/ruin/space/has_grav/listeningstation)
+"HU" = (
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/listeningstation)
+"HW" = (
+/obj/machinery/light/small,
+/turf/open/floor/plasteel/showroomfloor,
+/area/ruin/space/has_grav/listeningstation)
+"HX" = (
+/obj/structure/table,
+/obj/machinery/computer/security/telescreen/entertainment{
+ pixel_x = -30
+ },
+/obj/item/reagent_containers/food/drinks/beer{
+ pixel_x = -4;
+ pixel_y = 14
+ },
+/obj/item/reagent_containers/food/drinks/beer{
+ pixel_x = 3;
+ pixel_y = 11
+ },
+/obj/item/storage/fancy/cigarettes/cigpack_syndicate{
+ pixel_x = -3
+ },
+/obj/item/lighter{
+ pixel_x = 7;
+ pixel_y = -3
+ },
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/listeningstation)
+"Il" = (
+/obj/machinery/door/window/brigdoor{
+ dir = 2;
+ req_access_txt = "150";
+ pixel_y = 20
+ },
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/caution/red{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"Jc" = (
+/obj/structure/table,
+/obj/item/gun/ballistic/shotgun/boltaction,
+/obj/item/ammo_box/a762,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"Jn" = (
+/obj/structure/table,
+/obj/item/pipe_dispenser,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"Jv" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/binary/pump/on{
+ target_pressure = 4500
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 8
+ },
+/obj/machinery/airlock_sensor/incinerator_syndicatelava{
+ pixel_x = 22
+ },
+/turf/open/floor/engine,
+/area/ruin/space/has_grav/listeningstation)
+"JY" = (
+/obj/structure/statue/bronze/marx,
+/turf/open/floor/engine/vacuum,
+/area/ruin/unpowered/no_grav)
+"Kf" = (
+/obj/structure/table,
+/obj/machinery/chem_dispenser/drinks/beer/fullupgrade{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/listeningstation)
+"Kq" = (
+/obj/structure/bookcase/random/adult,
+/turf/open/floor/carpet/black,
+/area/ruin/space/has_grav/listeningstation)
+"Ks" = (
+/obj/structure/grille,
+/obj/structure/window/plastitanium,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"Kw" = (
+/obj/structure/chair/comfy/black{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"KB" = (
+/obj/structure/chair/stool,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/machinery/airalarm/syndicate{
+ dir = 8;
+ pixel_x = 22
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"KF" = (
+/obj/structure/chair/stool,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"KX" = (
+/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/o2{
+ dir = 1;
+ piping_layer = 3
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"Lu" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/machinery/computer/arcade/tetris{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"LL" = (
+/obj/structure/table,
+/obj/item/storage/box/donkpockets{
+ pixel_x = -2;
+ pixel_y = 6
+ },
+/obj/item/storage/box/donkpockets{
+ pixel_y = 3
+ },
+/obj/item/storage/box/donkpockets{
+ pixel_x = 2
+ },
+/obj/item/reagent_containers/food/snacks/chocolatebar,
+/obj/structure/sign/poster/contraband/random{
+ pixel_x = -32
+ },
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/listeningstation)
+"LV" = (
+/obj/machinery/computer/turbine_computer{
+ dir = 4;
+ id = "syndie_lavaland_incineratorturbine"
+ },
+/obj/machinery/button/door/incinerator_vent_syndicatelava_aux{
+ pixel_x = -6;
+ pixel_y = -24
+ },
+/obj/machinery/button/door/incinerator_vent_syndicatelava_main{
+ pixel_x = 6;
+ pixel_y = -24
+ },
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"Md" = (
+/obj/structure/table,
+/obj/item/storage/toolbox/emergency{
+ pixel_y = 13
+ },
+/obj/item/storage/toolbox/mechanical{
+ pixel_y = 5
+ },
+/obj/item/storage/toolbox/electrical{
+ pixel_y = -3
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"MH" = (
+/obj/machinery/igniter/incinerator_syndicatelava,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/engine/vacuum,
+/area/ruin/space/has_grav/listeningstation)
+"MK" = (
+/obj/machinery/syndicatebomb/self_destruct{
+ anchored = 1
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/circuit/red,
+/area/ruin/space/has_grav/listeningstation)
+"Nz" = (
+/obj/machinery/vending/kink{
+ default_price = 0;
+ extra_price = 0;
+ fair_market_price = 0;
+ onstation = 0
+ },
+/turf/open/floor/carpet/black,
+/area/ruin/space/has_grav/listeningstation)
+"NJ" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/carpet/red,
+/area/ruin/space/has_grav/listeningstation)
+"Ow" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/carpet/red,
+/area/ruin/space/has_grav/listeningstation)
+"Oz" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"OD" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/carpet/black,
+/area/ruin/space/has_grav/listeningstation)
+"Pg" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/turf/open/floor/carpet/red,
+/area/ruin/space/has_grav/listeningstation)
+"Pl" = (
+/obj/structure/bookcase/random/adult,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"PB" = (
+/obj/machinery/door/airlock{
+ name = "Toilet"
+ },
+/turf/open/floor/carpet/black,
+/area/ruin/space/has_grav/listeningstation)
+"PW" = (
+/obj/machinery/status_display{
+ pixel_x = -32
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"Qe" = (
+/obj/item/paper/fluff/ruins/listeningstation/briefing,
+/obj/structure/table/wood,
+/obj/item/clothing/accessory/ring/syntech,
+/turf/open/floor/carpet/black,
+/area/ruin/space/has_grav/listeningstation)
+"Qm" = (
+/obj/machinery/light/small,
+/obj/structure/table,
+/obj/item/melee/baton/stunsword/smithed,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"Qu" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/closed/wall,
+/area/ruin/space/has_grav/listeningstation)
+"QA" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper,
+/obj/effect/mapping_helpers/airlock/locked,
+/obj/machinery/door/airlock/public/glass/incinerator/atmos_interior,
+/obj/machinery/embedded_controller/radio/airlock_controller/incinerator_atmos{
+ pixel_x = 25;
+ pixel_y = 6
+ },
+/turf/open/floor/engine/vacuum,
+/area/ruin/space/has_grav/listeningstation)
+"QP" = (
+/obj/structure/table,
+/obj/machinery/chem_dispenser/drinks/fullupgrade{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/listeningstation)
+"QQ" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
+/turf/closed/wall/r_wall,
+/area/ruin/space/has_grav/listeningstation)
+"Rt" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 6
+ },
+/turf/closed/wall,
+/area/ruin/space/has_grav/listeningstation)
+"RA" = (
+/obj/machinery/light/small,
+/obj/machinery/airalarm/syndicate{
+ dir = 1;
+ pixel_y = -24
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/obj/machinery/computer/operating{
+ dir = 1;
+ name = "Robotics Operating Computer"
+ },
+/turf/open/floor/plasteel/white/side,
+/area/ruin/space/has_grav/listeningstation)
+"RP" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
+ dir = 9
+ },
+/turf/closed/wall/r_wall,
+/area/ruin/space/has_grav/listeningstation)
+"RY" = (
+/obj/structure/table/reinforced,
+/obj/machinery/computer/libraryconsole/bookmanagement,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"So" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/carpet/red,
+/area/ruin/space/has_grav/listeningstation)
+"SV" = (
/obj/structure/closet{
icon_door = "black";
name = "wardrobe"
@@ -1028,117 +2160,32 @@
pixel_x = 1;
pixel_y = -1
},
-/obj/effect/decal/cleanable/dirt,
/obj/item/storage/photo_album,
/obj/machinery/light/small,
-/turf/open/floor/plasteel/grimy,
+/turf/open/floor/plasteel,
/area/ruin/space/has_grav/listeningstation)
-"bx" = (
-/obj/effect/mob_spawn/human/lavaland_syndicate/comms/space{
- assignedrole = "Space Syndicate";
+"SY" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{
dir = 8;
- flavour_text = "You are a syndicate agent, assigned to a small listening post station situated near your hated enemy's top secret research facility: Space Station 13. Monitor enemy activity as best you can, and try to keep a low profile. DON'T abandon the base without good cause. Use the communication equipment to provide support to any field agents, and sow disinformation to throw Nanotrasen off your trail. Do not let the base fall into enemy hands!"
+ frequency = 1442;
+ id_tag = "syndie_lavaland_n2_out";
+ name = "nitrogen out"
},
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 8;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
-/turf/open/floor/plasteel/grimy,
+/turf/open/floor/plating/airless,
/area/ruin/space/has_grav/listeningstation)
-"by" = (
-/obj/machinery/power/terminal{
- dir = 1
- },
-/obj/structure/cable{
- icon_state = "0-2";
- pixel_y = 1
- },
-/obj/structure/reagent_dispensers/fueltank,
-/obj/item/clothing/head/welding,
-/obj/item/weldingtool/largetank,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
+"Tx" = (
+/obj/machinery/atmospherics/miner/nitrogen,
+/turf/open/floor/plating/airless,
/area/ruin/space/has_grav/listeningstation)
-"bz" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
+"TM" = (
+/turf/open/floor/engine/vacuum,
/area/ruin/space/has_grav/listeningstation)
-"bA" = (
-/obj/structure/table,
-/obj/item/storage/firstaid/regular,
-/obj/item/clothing/neck/stethoscope,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel/white/side{
- dir = 10
- },
-/area/ruin/space/has_grav/listeningstation)
-"bB" = (
-/obj/structure/sink{
- dir = 4;
- pixel_x = 11
- },
-/obj/machinery/iv_drip,
-/obj/machinery/light/small,
-/obj/machinery/airalarm/syndicate{
- dir = 1;
- pixel_y = -24
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
- },
-/turf/open/floor/plasteel/white/side{
- dir = 6
- },
-/area/ruin/space/has_grav/listeningstation)
-"bC" = (
-/obj/structure/cable,
-/obj/machinery/power/port_gen/pacman{
- anchored = 1
- },
-/obj/effect/turf_decal/bot,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/item/wrench,
-/turf/open/floor/plating,
-/area/ruin/space/has_grav/listeningstation)
-"bD" = (
-/obj/structure/table/wood,
-/obj/item/ammo_box/magazine/m10mm,
-/obj/item/paper/fluff/ruins/listeningstation/briefing,
-/turf/open/floor/plasteel/grimy,
-/area/ruin/space/has_grav/listeningstation)
-"bF" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/meter,
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plating,
-/area/ruin/space/has_grav/listeningstation)
-"bH" = (
-/obj/machinery/atmospherics/components/unary/tank/air{
- dir = 1
- },
-/obj/effect/turf_decal/bot,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/ruin/space/has_grav/listeningstation)
-"bI" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 8;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+"TO" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
@@ -1147,25 +2194,134 @@
},
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/listeningstation)
-"bJ" = (
-/obj/docking_port/stationary{
- dir = 4;
- dwidth = 6;
- height = 7;
- id = "caravansyndicate3_listeningpost";
- name = "Syndicate Listening Post";
- width = 15
+"Ue" = (
+/obj/structure/grille,
+/obj/structure/window/plastitanium,
+/obj/machinery/atmospherics/pipe/simple/supplymain/visible{
+ dir = 4
},
-/obj/docking_port/stationary{
- dir = 4;
- dwidth = 4;
- height = 5;
- id = "caravansyndicate1_listeningpost";
- name = "Syndicate Listening Post";
- width = 9
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"Vr" = (
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"VC" = (
+/obj/machinery/button/door{
+ id = "syndie_listeningpost_external";
+ name = "External Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_x = 24;
+ req_access_txt = "150";
+ specialfunctions = 4
},
-/turf/template_noop,
-/area/template_noop)
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"VE" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 5
+ },
+/turf/closed/wall/r_wall,
+/area/ruin/space/has_grav/listeningstation)
+"VM" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 5
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"Wi" = (
+/obj/machinery/washing_machine,
+/turf/open/floor/carpet/black,
+/area/ruin/space/has_grav/listeningstation)
+"Xf" = (
+/obj/machinery/iv_drip,
+/turf/open/floor/plasteel/white/side{
+ dir = 6
+ },
+/area/ruin/space/has_grav/listeningstation)
+"Xj" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"Xq" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 6
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"XP" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/turf/open/floor/carpet/red,
+/area/ruin/space/has_grav/listeningstation)
+"XT" = (
+/obj/structure/closet/firecloset/full,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"XY" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 9
+ },
+/turf/open/floor/carpet/red,
+/area/ruin/space/has_grav/listeningstation)
+"YM" = (
+/obj/structure/table/wood,
+/obj/item/radio/headset/syndicate/alt,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/item/radio/headset/syndicate/alt,
+/obj/item/card/emagfake{
+ pixel_y = -5
+ },
+/turf/open/floor/carpet/black,
+/area/ruin/space/has_grav/listeningstation)
+"YZ" = (
+/obj/machinery/light/small,
+/turf/open/floor/carpet/black,
+/area/ruin/space/has_grav/listeningstation)
+"ZY" = (
+/obj/machinery/vending/clothing{
+ default_price = 0;
+ extra_price = 0;
+ fair_market_price = 0;
+ onstation = 0
+ },
+/turf/open/floor/carpet/black,
+/area/ruin/space/has_grav/listeningstation)
+"ZZ" = (
+/obj/machinery/status_display{
+ pixel_x = 32
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
(1,1,1) = {"
aa
@@ -1184,11 +2340,9 @@ aa
aa
aa
aa
-ab
-ab
-ab
-ab
-ab
+aa
+aa
+aa
aa
aa
aa
@@ -1212,8 +2366,6 @@ aa
aa
aa
aa
-aa
-aa
ab
ab
ab
@@ -1224,15 +2376,15 @@ aa
aa
ab
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -1251,8 +2403,6 @@ aa
aa
aa
aa
-aa
-aa
ab
ab
ab
@@ -1266,22 +2416,22 @@ ab
ab
ab
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
aa
-ab
-ab
-ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -1290,481 +2440,457 @@ aa
(4,1,1) = {"
aa
aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
aa
aa
aa
"}
(5,1,1) = {"
aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
aa
aa
aa
"}
(6,1,1) = {"
aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
aa
"}
(7,1,1) = {"
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
aa
"}
(8,1,1) = {"
+ab
+ab
+ab
+ab
+hy
+hy
+hy
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
aa
"}
(9,1,1) = {"
+ab
+ab
+ab
+ab
+hy
+JY
+hy
+ab
+ab
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
aa
"}
(10,1,1) = {"
aa
+ab
+ab
+ab
+hy
+hy
+hy
+ab
+ab
+ac
+HX
+iK
+LL
+eR
+Kf
+QP
+hG
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
aa
"}
(11,1,1) = {"
aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ac
+az
+az
+az
+az
+az
+az
+az
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
aa
aa
"}
(12,1,1) = {"
aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ac
+hC
+jj
+Am
+tW
+GY
+wV
+HU
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
aa
aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
aa
aa
"}
(13,1,1) = {"
aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ac
+Vr
+aP
+qc
+Vr
+aL
+Vr
+KF
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
aa
aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
aa
"}
(14,1,1) = {"
aa
aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ac
+AJ
+aP
+Vr
+Vr
+DK
+qc
+hj
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
aa
"}
(15,1,1) = {"
aa
aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ac
+dO
+Xq
+bk
+bk
+ba
+qc
+GN
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
aa
"}
(16,1,1) = {"
@@ -1775,88 +2901,79 @@ ab
ab
ab
ab
+ac
+ac
+ac
+Vr
+bb
+Vr
+Vr
+Vr
+qc
+Lu
+ac
+bd
+xf
+cA
+Qu
+So
+HH
+bd
+ac
ab
ab
ab
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+aa
+aa
+aa
+aa
+aa
aa
"}
(17,1,1) = {"
aa
aa
+aa
+aa
+ab
+ab
+ab
+ac
+MK
+Il
+Vr
+bb
+Vr
+Vr
+is
+KB
+Lu
+ac
+ve
+XP
+xJ
+Gr
+XP
+XP
+wa
+ac
ab
ab
ab
ab
ab
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+aa
+aa
+aa
aa
"}
(18,1,1) = {"
aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+aa
+aa
+aa
ac
ac
ac
@@ -1864,89 +2981,99 @@ ac
ac
ac
ac
+qQ
+Vr
+Kw
+ac
+ac
+ac
+ac
+ac
+ac
+sg
+bw
+aJ
+ac
+ac
+ac
+ac
+ac
ac
ab
ab
ab
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+aa
+aa
aa
"}
(19,1,1) = {"
aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+aa
+aa
+Ks
ac
+vP
+Cd
+PW
aq
-ac
-aH
-aN
aZ
+ac
+bb
+Vr
aD
ac
+Pl
+Pl
+SV
ac
+YM
+NJ
+cl
+yg
+ik
+Wi
+ac
+po
+di
ac
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
ab
ab
ab
ab
ab
aa
+aa
"}
(20,1,1) = {"
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
+aa
+aa
+Ks
+Ks
+mR
+aI
+ah
+ah
ar
ay
-aI
-aP
-ba
+ac
+bb
+Vr
bj
ac
bv
+Vr
+Vr
ac
+Qe
+OD
+aA
+ik
+ik
+ik
+PB
+xP
+HW
ac
ab
ab
@@ -1955,50 +3082,37 @@ ab
ab
ab
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
"}
(21,1,1) = {"
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+aa
+aa
+Ks
+DA
+tn
+aI
+ah
+ah
+as
+rc
ac
-ac
-ac
-ac
-aJ
aQ
-bb
-bk
+DJ
+DJ
bp
bi
-bw
+DJ
+DJ
+hg
+Pg
+Ow
+XY
+ik
+ik
+YZ
+ac
+ey
+xP
ac
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
ab
ab
ab
@@ -2008,37 +3122,35 @@ ab
ab
"}
(22,1,1) = {"
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
+aa
+aa
+Ks
+dV
+tn
+aI
+DF
ah
as
-ac
+ak
ac
aR
-ac
+sD
bl
ac
bx
bD
+Qm
+ac
+Kq
+aN
+Ce
+Nz
+Gw
+ZY
+ac
+ac
+ac
ac
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
ab
ab
ab
@@ -2049,39 +3161,37 @@ ab
"}
(23,1,1) = {"
aa
-ab
-ab
-ab
-ab
-ab
-ab
-ac
+aa
+Ks
+RY
+tn
+aI
ad
ai
at
-az
+ak
ac
aS
+Vr
ac
ac
ac
ac
ac
-ac
-ac
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+Rt
+rw
+rw
+rw
+rw
+rw
+rw
+rw
+fK
+fK
+VE
+ag
+ag
+ag
ab
ab
ab
@@ -2089,17 +3199,15 @@ ab
"}
(24,1,1) = {"
aa
-ab
-ab
-ab
-ab
-ab
-ab
-ac
+aa
+Ks
+Ks
+mk
+TO
ae
aj
au
-aA
+bI
aK
aT
bc
@@ -2108,79 +3216,75 @@ bq
by
aO
bC
-ac
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bw
+De
+nw
+fE
+yh
+Jn
+Md
+ow
+LV
+ag
+uf
+ag
+TM
+ag
+ag
+ag
ab
+aa
"}
(25,1,1) = {"
aa
-ab
-ab
-ab
-ab
-ab
-ab
+aa
+aa
+Ks
ac
-ac
-ak
+uM
+Jc
+ZZ
av
aB
ac
aU
-bd
+DJ
bm
br
bz
bF
bH
-ac
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+dH
+wv
+pr
+Xj
+BE
+Oz
+Oz
+Oz
+VM
+QA
+la
+Gf
+MH
+eQ
+zx
+pp
+aa
aa
"}
(26,1,1) = {"
aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+aa
+aa
+aa
+ac
+ac
+ac
ac
ac
ac
ac
-aL
aV
be
ac
@@ -2189,31 +3293,29 @@ ac
ac
ac
ac
+vk
+dF
+KX
+xG
+Dv
+GB
+or
+vG
+Fv
+Jv
+xC
+Hq
+ag
+ag
+ag
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
aa
"}
(27,1,1) = {"
aa
aa
-ab
-ab
-ab
-ab
+aa
+aa
ab
ac
ac
@@ -2226,33 +3328,31 @@ bf
bn
bs
bA
-ac
+na
+ag
+XT
+rv
+Ff
+BK
+rx
+uY
+tI
+ss
+zT
+eW
+QQ
+ag
+fL
+ag
ab
ab
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
aa
"}
(28,1,1) = {"
aa
aa
aa
-aa
-ab
ab
ab
ac
@@ -2266,31 +3366,105 @@ bg
bo
bt
bB
-ac
+RA
+ag
+Ks
+EU
+aH
+mA
+Ue
+js
+Ks
+vT
+cg
+aH
+ab
+ab
+TM
ab
ab
ab
ab
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
"}
(29,1,1) = {"
aa
aa
aa
+ab
+ab
+ac
+yL
+aF
+aF
+aE
+ac
+aY
+bh
+ac
+rt
+bu
+oL
+ag
+yC
+SY
+aH
+ju
+AC
+cg
+ju
+mX
+cg
+aH
+ab
+TM
+TM
+TM
+ab
+ab
+ab
+ab
+"}
+(30,1,1) = {"
+aa
+aa
+aa
+ab
+ab
+ac
+sb
+ao
+VC
+aF
+ag
+ac
+ac
+ac
+FX
+Hf
+Xf
+ag
+Tx
+fo
+aH
+im
+fo
+cg
+es
+fo
+cg
+aH
+ab
+TM
+yY
+TM
+TM
+ab
+ab
+ab
+"}
+(31,1,1) = {"
+aa
aa
aa
ab
@@ -2299,53 +3473,46 @@ ac
ac
an
ac
-aE
-ac
-aY
-bh
-ac
-bu
+aG
+ag
+ab
+ab
ac
ac
+ac
+ac
+ag
+ag
+jm
+RP
+ag
+jm
+RP
+ag
+jm
+RP
+aH
+ab
+TM
+TM
+TM
ab
ab
ab
ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
"}
-(30,1,1) = {"
+(32,1,1) = {"
aa
aa
aa
aa
-aa
-ab
ab
ab
ag
-ao
+vM
+ag
ag
-aF
ag
-ac
-ac
-ac
-ac
-ac
ab
ab
ab
@@ -2354,22 +3521,25 @@ ab
ab
ab
ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aH
+ab
+ab
+TM
+ab
+ab
+ab
+ab
+ab
"}
-(31,1,1) = {"
-aa
-aa
+(33,1,1) = {"
aa
aa
aa
@@ -2379,15 +3549,12 @@ aa
ag
ap
ag
-aG
-ab
-ab
-ab
-ab
-ab
ab
ab
ab
+aa
+aa
+aa
ab
ab
ab
@@ -2395,21 +3562,22 @@ ab
ab
ab
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+ab
+ab
+ab
+ab
+ab
+mV
+ab
+ab
+ab
+ab
+ab
+ab
+ab
aa
"}
-(32,1,1) = {"
-aa
-aa
+(34,1,1) = {"
aa
aa
aa
@@ -2427,21 +3595,21 @@ aa
aa
aa
aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
ab
ab
ab
ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
diff --git a/_maps/RandomRuins/SpaceRuins/listeningstation.dmm.old b/_maps/RandomRuins/SpaceRuins/listeningstation.dmm.old
new file mode 100644
index 0000000000..49646fbd71
--- /dev/null
+++ b/_maps/RandomRuins/SpaceRuins/listeningstation.dmm.old
@@ -0,0 +1,2449 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"aa" = (
+/turf/template_noop,
+/area/template_noop)
+"ab" = (
+/turf/closed/mineral/random,
+/area/ruin/unpowered/no_grav)
+"ac" = (
+/turf/closed/wall,
+/area/ruin/space/has_grav/listeningstation)
+"ad" = (
+/obj/machinery/computer/message_monitor{
+ dir = 2
+ },
+/obj/machinery/airalarm/syndicate{
+ pixel_y = 24
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/paper/monitorkey,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"ae" = (
+/obj/structure/table/reinforced,
+/obj/machinery/firealarm{
+ dir = 2;
+ pixel_y = 24
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/computer/libraryconsole/bookmanagement,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"af" = (
+/obj/structure/rack{
+ dir = 8
+ },
+/obj/item/clothing/mask/gas{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/item/clothing/mask/gas,
+/turf/open/floor/mineral/plastitanium/red,
+/area/ruin/space/has_grav/listeningstation)
+"ag" = (
+/turf/closed/wall/r_wall,
+/area/ruin/space/has_grav/listeningstation)
+"ah" = (
+/obj/machinery/computer/camera_advanced{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/newscaster{
+ pixel_y = 32
+ },
+/obj/item/radio/intercom{
+ freerange = 1;
+ name = "Syndicate Radio Intercom";
+ pixel_x = -30
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"ai" = (
+/obj/structure/chair/office/dark{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aj" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"ak" = (
+/obj/machinery/telecomms/relay/preset/ruskie{
+ use_power = 0
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"al" = (
+/obj/structure/table,
+/obj/item/storage/toolbox/syndicate,
+/obj/item/flashlight{
+ pixel_y = -12
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"am" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"an" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 4
+ },
+/obj/machinery/door/airlock/external{
+ id_tag = "syndie_listeningpost_external";
+ req_access_txt = "150"
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"ao" = (
+/obj/machinery/light/small,
+/obj/structure/sign/warning/vacuum{
+ pixel_y = 32
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"ap" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/obj/machinery/door/airlock/external{
+ id_tag = "syndie_listeningpost_external";
+ req_access_txt = "150"
+ },
+/obj/structure/fans/tiny,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"aq" = (
+/obj/structure/curtain,
+/obj/machinery/shower{
+ pixel_y = 14
+ },
+/obj/machinery/light/small,
+/obj/item/soap,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/showroomfloor,
+/area/ruin/space/has_grav/listeningstation)
+"ar" = (
+/obj/structure/sink{
+ dir = 4;
+ pixel_x = 11
+ },
+/obj/structure/toilet{
+ pixel_y = 18
+ },
+/obj/structure/mirror{
+ pixel_x = 28
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/showroomfloor,
+/area/ruin/space/has_grav/listeningstation)
+"as" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/computer/med_data/syndie{
+ dir = 4;
+ req_one_access = null
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"at" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"au" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"av" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/structure/extinguisher_cabinet{
+ pixel_x = 25
+ },
+/obj/structure/table,
+/obj/item/paper_bin,
+/obj/item/paper/fluff/ruins/listeningstation/reports/november,
+/obj/item/pen,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aw" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/cell/high/plus,
+/obj/item/stack/cable_coil{
+ pixel_x = 3;
+ pixel_y = -7
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/airalarm/syndicate{
+ dir = 4;
+ pixel_x = -24
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"ax" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
+/obj/machinery/button/door{
+ id = "syndie_listeningpost_external";
+ name = "External Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_x = 24;
+ req_access_txt = "150";
+ specialfunctions = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"ay" = (
+/obj/machinery/door/airlock{
+ name = "Toilet"
+ },
+/turf/open/floor/plasteel/showroomfloor,
+/area/ruin/space/has_grav/listeningstation)
+"az" = (
+/obj/structure/filingcabinet,
+/obj/item/paper/fluff/ruins/listeningstation/reports/april,
+/obj/item/paper/fluff/ruins/listeningstation/reports/may,
+/obj/item/paper/fluff/ruins/listeningstation/reports/june,
+/obj/item/paper/fluff/ruins/listeningstation/reports/july,
+/obj/item/paper/fluff/ruins/listeningstation/reports/august,
+/obj/item/paper/fluff/ruins/listeningstation/reports/september,
+/obj/item/paper/fluff/ruins/listeningstation/reports/october,
+/obj/item/paper/fluff/ruins/listeningstation/receipt,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/paper/fluff/ruins/listeningstation/odd_report,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aA" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aB" = (
+/obj/structure/rack{
+ dir = 8
+ },
+/obj/item/multitool,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aC" = (
+/obj/structure/rack{
+ dir = 8;
+ layer = 2.9
+ },
+/obj/item/mining_scanner,
+/obj/item/pickaxe,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aD" = (
+/obj/structure/table,
+/obj/machinery/light/small{
+ brightness = 3;
+ dir = 8
+ },
+/obj/item/storage/box/donkpockets{
+ pixel_x = -2;
+ pixel_y = 6
+ },
+/obj/item/storage/box/donkpockets{
+ pixel_y = 3
+ },
+/obj/item/storage/box/donkpockets{
+ pixel_x = 2
+ },
+/obj/item/reagent_containers/food/snacks/chocolatebar,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/sign/poster/contraband/random{
+ pixel_x = -32
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aE" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/tank_dispenser/oxygen{
+ oxygentanks = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/ruin/space/has_grav/listeningstation)
+"aF" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/closed/wall/r_wall,
+/area/ruin/space/has_grav/listeningstation)
+"aG" = (
+/obj/machinery/atmospherics/components/unary/outlet_injector/on{
+ dir = 8;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plating/airless,
+/area/ruin/space/has_grav/listeningstation)
+"aH" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/closet/crate/bin,
+/obj/structure/extinguisher_cabinet{
+ pixel_x = -27;
+ pixel_y = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aI" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"aJ" = (
+/obj/machinery/washing_machine{
+ pixel_x = 4
+ },
+/obj/structure/window{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aK" = (
+/obj/machinery/door/firedoor,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/machinery/door/airlock/hatch{
+ name = "Telecommunications";
+ req_access_txt = "150"
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aL" = (
+/obj/item/bombcore/badmin{
+ anchored = 1;
+ invisibility = 100
+ },
+/turf/closed/wall,
+/area/ruin/space/has_grav/listeningstation)
+"aM" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/machinery/door/airlock/hatch{
+ name = "E.V.A. Equipment";
+ req_access_txt = "150"
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aN" = (
+/obj/structure/table,
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = -26
+ },
+/obj/machinery/microwave,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aO" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/closet/crate,
+/obj/item/stack/sheet/metal/twenty,
+/obj/item/stack/sheet/glass{
+ amount = 10
+ },
+/obj/item/stack/rods/ten,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/storage/box/lights/bulbs,
+/obj/item/stack/sheet/mineral/plasma{
+ amount = 30
+ },
+/obj/item/stock_parts/cell/high/plus,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"aP" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"aQ" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"aR" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/machinery/door/airlock{
+ name = "Personal Quarters"
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"aS" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"aT" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 2;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"aU" = (
+/obj/machinery/airalarm/syndicate{
+ pixel_y = 24
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/baseturf_helper/asteroid/airless,
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"aV" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"aW" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/machinery/firealarm{
+ dir = 2;
+ pixel_y = 24
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 1;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"aX" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"aY" = (
+/obj/machinery/vending/snack/random{
+ extended_inventory = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/sign/poster/contraband/random{
+ pixel_x = 32
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"aZ" = (
+/obj/structure/table,
+/obj/machinery/computer/security/telescreen/entertainment{
+ pixel_x = -30
+ },
+/obj/item/reagent_containers/food/drinks/beer{
+ pixel_x = -4;
+ pixel_y = 14
+ },
+/obj/item/reagent_containers/food/drinks/beer{
+ pixel_x = 3;
+ pixel_y = 11
+ },
+/obj/item/storage/fancy/cigarettes/cigpack_syndicate{
+ pixel_x = -3
+ },
+/obj/item/lighter{
+ pixel_x = 7;
+ pixel_y = -3
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"ba" = (
+/obj/structure/chair/stool,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"bb" = (
+/obj/effect/turf_decal/stripes/red/corner,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/machinery/airalarm/syndicate{
+ dir = 8;
+ pixel_x = 24
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"bc" = (
+/obj/machinery/light/small,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/closet/emcloset/anchored,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"bd" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"be" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/obj/structure/extinguisher_cabinet{
+ pixel_y = -29
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"bf" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel/white/corner,
+/area/ruin/space/has_grav/listeningstation)
+"bg" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel/white/side,
+/area/ruin/space/has_grav/listeningstation)
+"bh" = (
+/obj/machinery/vending/cola/random{
+ extended_inventory = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/white/corner{
+ dir = 8
+ },
+/area/ruin/space/has_grav/listeningstation)
+"bi" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 5;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"bj" = (
+/obj/machinery/computer/arcade/orion_trail,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"bk" = (
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/caution/red{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"bl" = (
+/obj/machinery/syndicatebomb/self_destruct{
+ anchored = 1
+ },
+/obj/structure/sign/warning/securearea{
+ desc = "A warning sign which reads 'DANGER: SELF DESTRUCT DEVICE'.";
+ name = "DANGER: SELF DESTRUCT DEVICE";
+ pixel_x = 32
+ },
+/obj/machinery/door/window/brigdoor{
+ dir = 8;
+ req_access_txt = "150"
+ },
+/turf/open/floor/circuit/red,
+/area/ruin/space/has_grav/listeningstation)
+"bm" = (
+/obj/machinery/door/airlock/maintenance,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"bn" = (
+/obj/structure/sign/departments/medbay/alt,
+/turf/closed/wall,
+/area/ruin/space/has_grav/listeningstation)
+"bo" = (
+/obj/machinery/door/firedoor,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/machinery/door/airlock/medical/glass{
+ name = "Medbay"
+ },
+/turf/open/floor/plasteel/white,
+/area/ruin/space/has_grav/listeningstation)
+"bp" = (
+/obj/effect/turf_decal/stripes/red/corner{
+ dir = 1
+ },
+/obj/machinery/door/airlock{
+ name = "Cabin"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"bq" = (
+/obj/structure/cable/yellow{
+ icon_state = "0-4"
+ },
+/obj/machinery/power/smes{
+ charge = 5e+006
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"br" = (
+/obj/structure/cable/yellow{
+ icon_state = "0-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/power/apc/syndicate{
+ dir = 4;
+ name = "Syndicate Listening Post APC";
+ pixel_x = 24
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"bs" = (
+/obj/structure/closet/crate/freezer,
+/obj/item/reagent_containers/blood/OMinus{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/item/reagent_containers/blood/OMinus,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 9
+ },
+/area/ruin/space/has_grav/listeningstation)
+"bt" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 5
+ },
+/area/ruin/space/has_grav/listeningstation)
+"bu" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/closet/secure_closet/medical1{
+ req_access = null;
+ req_access_txt = "150"
+ },
+/turf/open/floor/plasteel/white,
+/area/ruin/space/has_grav/listeningstation)
+"bv" = (
+/obj/structure/bookcase/random,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"bw" = (
+/obj/structure/closet{
+ icon_door = "black";
+ name = "wardrobe"
+ },
+/obj/item/clothing/under/color/black{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/item/clothing/under/color/black{
+ pixel_x = 1;
+ pixel_y = -1
+ },
+/obj/item/clothing/head/soft/black{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/item/clothing/head/soft/black{
+ pixel_x = 1;
+ pixel_y = -1
+ },
+/obj/item/clothing/gloves/fingerless,
+/obj/item/clothing/shoes/sneakers/black{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/item/clothing/shoes/sneakers/black{
+ pixel_x = 1;
+ pixel_y = -1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/item/storage/photo_album,
+/obj/machinery/light/small,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"bx" = (
+/obj/effect/mob_spawn/human/lavaland_syndicate/comms/space{
+ assignedrole = "Space Syndicate";
+ dir = 8;
+ flavour_text = "You are a syndicate agent, assigned to a small listening post station situated near your hated enemy's top secret research facility: Space Station 13. Monitor enemy activity as best you can, and try to keep a low profile. DON'T abandon the base without good cause. Use the communication equipment to provide support to any field agents, and sow disinformation to throw Nanotrasen off your trail. Do not let the base fall into enemy hands!"
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 8;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"by" = (
+/obj/machinery/power/terminal{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "0-2";
+ pixel_y = 1
+ },
+/obj/structure/reagent_dispensers/fueltank,
+/obj/item/clothing/head/welding,
+/obj/item/weldingtool/largetank,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"bz" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"bA" = (
+/obj/structure/table,
+/obj/item/storage/firstaid/regular,
+/obj/item/clothing/neck/stethoscope,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/white/side{
+ dir = 10
+ },
+/area/ruin/space/has_grav/listeningstation)
+"bB" = (
+/obj/structure/sink{
+ dir = 4;
+ pixel_x = 11
+ },
+/obj/machinery/iv_drip,
+/obj/machinery/light/small,
+/obj/machinery/airalarm/syndicate{
+ dir = 1;
+ pixel_y = -24
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 6
+ },
+/area/ruin/space/has_grav/listeningstation)
+"bC" = (
+/obj/structure/cable,
+/obj/machinery/power/port_gen/pacman{
+ anchored = 1
+ },
+/obj/effect/turf_decal/bot,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/wrench,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"bD" = (
+/obj/structure/table/wood,
+/obj/item/ammo_box/magazine/m10mm,
+/obj/item/paper/fluff/ruins/listeningstation/briefing,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"bF" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/meter,
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"bH" = (
+/obj/machinery/atmospherics/components/unary/tank/air{
+ dir = 1
+ },
+/obj/effect/turf_decal/bot,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"bI" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 8;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"bJ" = (
+/obj/docking_port/stationary{
+ dir = 4;
+ dwidth = 6;
+ height = 7;
+ id = "caravansyndicate3_listeningpost";
+ name = "Syndicate Listening Post";
+ width = 15
+ },
+/obj/docking_port/stationary{
+ dir = 4;
+ dwidth = 4;
+ height = 5;
+ id = "caravansyndicate1_listeningpost";
+ name = "Syndicate Listening Post";
+ width = 9
+ },
+/turf/template_noop,
+/area/template_noop)
+
+(1,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(2,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(3,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+"}
+(4,1,1) = {"
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+"}
+(5,1,1) = {"
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+"}
+(6,1,1) = {"
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+"}
+(7,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+"}
+(8,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+"}
+(9,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+"}
+(10,1,1) = {"
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+"}
+(11,1,1) = {"
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(12,1,1) = {"
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(13,1,1) = {"
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+"}
+(14,1,1) = {"
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+"}
+(15,1,1) = {"
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+"}
+(16,1,1) = {"
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+"}
+(17,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+"}
+(18,1,1) = {"
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+"}
+(19,1,1) = {"
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ac
+aq
+ac
+aH
+aN
+aZ
+aD
+ac
+ac
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+"}
+(20,1,1) = {"
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ac
+ar
+ay
+aI
+aP
+ba
+bj
+ac
+bv
+ac
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+"}
+(21,1,1) = {"
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ac
+ac
+ac
+ac
+aJ
+aQ
+bb
+bk
+bp
+bi
+bw
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+"}
+(22,1,1) = {"
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ac
+ac
+ah
+as
+ac
+ac
+aR
+ac
+bl
+ac
+bx
+bD
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+"}
+(23,1,1) = {"
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ac
+ad
+ai
+at
+az
+ac
+aS
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+"}
+(24,1,1) = {"
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ac
+ae
+aj
+au
+aA
+aK
+aT
+bc
+ac
+bq
+by
+aO
+bC
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+"}
+(25,1,1) = {"
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ac
+ac
+ak
+av
+aB
+ac
+aU
+bd
+bm
+br
+bz
+bF
+bH
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+"}
+(26,1,1) = {"
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ac
+ac
+ac
+ac
+aL
+aV
+be
+ac
+ac
+ac
+ac
+ac
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+"}
+(27,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ac
+ac
+al
+aw
+aC
+ac
+aW
+bf
+bn
+bs
+bA
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(28,1,1) = {"
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ac
+af
+am
+ax
+bI
+aM
+aX
+bg
+bo
+bt
+bB
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(29,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ac
+ac
+an
+ac
+aE
+ac
+aY
+bh
+ac
+bu
+ac
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(30,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ag
+ao
+ag
+aF
+ag
+ac
+ac
+ac
+ac
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(31,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ag
+ap
+ag
+aG
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(32,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+bJ
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
diff --git a/_maps/RandomRuins/SpaceRuins/listeningstation.dmm.phzold b/_maps/RandomRuins/SpaceRuins/listeningstation.dmm.phzold
new file mode 100644
index 0000000000..c12e42b31d
--- /dev/null
+++ b/_maps/RandomRuins/SpaceRuins/listeningstation.dmm.phzold
@@ -0,0 +1,2941 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"aa" = (
+/turf/template_noop,
+/area/template_noop)
+"ab" = (
+/turf/closed/mineral/random,
+/area/ruin/unpowered/no_grav)
+"ac" = (
+/turf/closed/wall,
+/area/ruin/space/has_grav/listeningstation)
+"ad" = (
+/obj/machinery/computer/message_monitor{
+ dir = 2
+ },
+/obj/machinery/airalarm/syndicate{
+ pixel_y = 24
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/paper/monitorkey,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"ae" = (
+/obj/structure/table/reinforced,
+/obj/machinery/firealarm{
+ pixel_x = 6;
+ pixel_y = 26
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/computer/libraryconsole/bookmanagement,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"af" = (
+/obj/structure/rack{
+ dir = 8
+ },
+/obj/item/clothing/mask/gas{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/item/clothing/mask/gas,
+/turf/open/floor/mineral/plastitanium/red,
+/area/ruin/space/has_grav/listeningstation)
+"ag" = (
+/turf/closed/wall/r_wall,
+/area/ruin/space/has_grav/listeningstation)
+"ah" = (
+/obj/machinery/computer/camera_advanced{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/newscaster{
+ pixel_y = 32
+ },
+/obj/item/radio/intercom{
+ freerange = 1;
+ name = "Syndicate Radio Intercom";
+ pixel_x = -30
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"ai" = (
+/obj/structure/chair/office/dark{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aj" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"ak" = (
+/obj/machinery/telecomms/relay/preset/ruskie{
+ use_power = 0
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"al" = (
+/obj/structure/table,
+/obj/item/storage/toolbox/syndicate,
+/obj/item/flashlight{
+ pixel_y = -12
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"am" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"an" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 4
+ },
+/obj/machinery/door/airlock/external{
+ id_tag = "syndie_listeningpost_external";
+ req_access_txt = "150"
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"ao" = (
+/obj/machinery/light/small,
+/obj/structure/sign/warning/vacuum{
+ pixel_y = 32
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"ap" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/obj/machinery/door/airlock/external{
+ id_tag = "syndie_listeningpost_external";
+ req_access_txt = "150"
+ },
+/obj/structure/fans/tiny,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"aq" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"ar" = (
+/obj/structure/mirror{
+ pixel_x = 28
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/plasteel/showroomfloor,
+/area/ruin/space/has_grav/listeningstation)
+"as" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/computer/med_data/syndie{
+ req_one_access = null;
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"at" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/chair/office/dark{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"au" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"av" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/structure/extinguisher_cabinet{
+ pixel_x = 25
+ },
+/obj/structure/table,
+/obj/item/paper_bin,
+/obj/item/paper/fluff/ruins/listeningstation/reports/november,
+/obj/item/pen,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aw" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/cell/high/plus,
+/obj/item/stack/cable_coil{
+ pixel_x = 3;
+ pixel_y = -7
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/airalarm/syndicate{
+ dir = 4;
+ pixel_x = -24
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"ax" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
+/obj/machinery/button/door{
+ id = "syndie_listeningpost_external";
+ name = "External Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_x = 24;
+ req_access_txt = "150";
+ specialfunctions = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"ay" = (
+/obj/structure/table/wood,
+/obj/item/flashlight/lamp/green{
+ pixel_x = -4;
+ pixel_y = 11
+ },
+/obj/item/ammo_box/magazine/m10mm,
+/obj/item/paper/fluff/ruins/listeningstation/briefing,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"az" = (
+/obj/structure/filingcabinet,
+/obj/item/paper/fluff/ruins/listeningstation/reports/april,
+/obj/item/paper/fluff/ruins/listeningstation/reports/may,
+/obj/item/paper/fluff/ruins/listeningstation/reports/june,
+/obj/item/paper/fluff/ruins/listeningstation/reports/july,
+/obj/item/paper/fluff/ruins/listeningstation/reports/august,
+/obj/item/paper/fluff/ruins/listeningstation/reports/september,
+/obj/item/paper/fluff/ruins/listeningstation/reports/october,
+/obj/item/paper/fluff/ruins/listeningstation/receipt,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/paper/fluff/ruins/listeningstation/odd_report,
+/obj/structure/sign/poster/contraband/random{
+ pixel_x = -1;
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aA" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aB" = (
+/obj/structure/rack{
+ dir = 8
+ },
+/obj/item/multitool,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aC" = (
+/obj/structure/rack{
+ dir = 8;
+ layer = 2.9
+ },
+/obj/item/mining_scanner,
+/obj/item/pickaxe,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aD" = (
+/obj/machinery/computer/arcade/tetris{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aE" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/tank_dispenser/oxygen{
+ oxygentanks = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/ruin/space/has_grav/listeningstation)
+"aF" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/closed/wall/r_wall,
+/area/ruin/space/has_grav/listeningstation)
+"aG" = (
+/obj/machinery/atmospherics/components/unary/outlet_injector/on{
+ dir = 8;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plating/airless,
+/area/ruin/space/has_grav/listeningstation)
+"aH" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aI" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aJ" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aK" = (
+/obj/machinery/door/firedoor,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/machinery/door/airlock/hatch{
+ name = "Telecommunications";
+ req_access_txt = "150"
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aL" = (
+/obj/item/bombcore/badmin{
+ anchored = 1;
+ invisibility = 100
+ },
+/turf/closed/wall,
+/area/ruin/space/has_grav/listeningstation)
+"aM" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/machinery/door/airlock/hatch{
+ name = "E.V.A. Equipment";
+ req_access_txt = "150"
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aN" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aO" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/closet/crate,
+/obj/item/stack/sheet/metal/twenty,
+/obj/item/stack/sheet/glass{
+ amount = 10
+ },
+/obj/item/stack/rods/ten,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/storage/box/lights/bulbs,
+/obj/item/stack/sheet/mineral/plasma{
+ amount = 30
+ },
+/obj/item/stock_parts/cell/high/plus,
+/obj/item/storage/box/lights/tubes,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"aP" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aQ" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aR" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/machinery/door/airlock{
+ name = "Personal Quarters"
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"aS" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"aT" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 2;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"aU" = (
+/obj/machinery/airalarm/syndicate{
+ pixel_y = 24
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/baseturf_helper/asteroid/airless,
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"aV" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"aW" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/machinery/firealarm{
+ dir = 2;
+ pixel_y = 28;
+ pixel_x = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 1;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"aX" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"aY" = (
+/obj/machinery/vending/snack/random{
+ extended_inventory = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/sign/poster/contraband/random{
+ pixel_x = 32
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"aZ" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/structure/chair/stool,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"ba" = (
+/obj/structure/chair/stool,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"bb" = (
+/obj/effect/turf_decal/stripes/red/corner,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/machinery/airalarm/syndicate{
+ dir = 8;
+ pixel_x = 24
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"bc" = (
+/obj/machinery/light/small,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/closet/emcloset/anchored,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"bd" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"be" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/obj/structure/extinguisher_cabinet{
+ pixel_y = -29
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"bf" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel/white/corner,
+/area/ruin/space/has_grav/listeningstation)
+"bg" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel/white/side,
+/area/ruin/space/has_grav/listeningstation)
+"bh" = (
+/obj/machinery/vending/cola/random{
+ extended_inventory = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/white/corner{
+ dir = 8
+ },
+/area/ruin/space/has_grav/listeningstation)
+"bi" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"bj" = (
+/obj/machinery/computer/arcade/orion_trail{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"bk" = (
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/caution/red{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"bl" = (
+/obj/machinery/syndicatebomb/self_destruct{
+ anchored = 1
+ },
+/obj/structure/sign/warning/securearea{
+ desc = "A warning sign which reads 'DANGER: SELF DESTRUCT DEVICE'.";
+ name = "DANGER: SELF DESTRUCT DEVICE";
+ pixel_x = 32
+ },
+/obj/machinery/door/window/brigdoor{
+ dir = 8;
+ req_access_txt = "150"
+ },
+/turf/open/floor/circuit/red,
+/area/ruin/space/has_grav/listeningstation)
+"bm" = (
+/obj/machinery/door/airlock/maintenance,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"bn" = (
+/obj/structure/sign/departments/medbay/alt,
+/turf/closed/wall,
+/area/ruin/space/has_grav/listeningstation)
+"bo" = (
+/obj/machinery/door/firedoor,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/machinery/door/airlock/medical/glass{
+ name = "Medbay"
+ },
+/turf/open/floor/plasteel/white,
+/area/ruin/space/has_grav/listeningstation)
+"bp" = (
+/obj/effect/turf_decal/stripes/red/corner{
+ dir = 1
+ },
+/obj/machinery/door/airlock{
+ name = "Cabin"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"bq" = (
+/obj/structure/cable/yellow{
+ icon_state = "0-4"
+ },
+/obj/machinery/power/smes{
+ charge = 5e+006
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"br" = (
+/obj/structure/cable/yellow{
+ icon_state = "0-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/power/apc/syndicate{
+ dir = 4;
+ name = "Syndicate Listening Post APC";
+ pixel_x = 24
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"bs" = (
+/obj/structure/closet/crate/freezer,
+/obj/item/reagent_containers/blood/OMinus{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/item/reagent_containers/blood/OMinus,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 9
+ },
+/area/ruin/space/has_grav/listeningstation)
+"bt" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 1
+ },
+/area/ruin/space/has_grav/listeningstation)
+"bu" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/closet/secure_closet/medical1{
+ req_access = null;
+ req_access_txt = "150"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/item/defibrillator/loaded{
+ cell = /obj/item/stock_parts/cell/bluespacereactor
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 5
+ },
+/area/ruin/space/has_grav/listeningstation)
+"bv" = (
+/obj/structure/bookcase/random,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"bw" = (
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"bx" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"by" = (
+/obj/machinery/power/terminal{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "0-2";
+ pixel_y = 1
+ },
+/obj/structure/reagent_dispensers/fueltank,
+/obj/item/clothing/head/welding,
+/obj/item/weldingtool/largetank,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"bz" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"bA" = (
+/obj/structure/table,
+/obj/item/storage/firstaid/regular{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/item/storage/backpack/duffelbag/med/surgery{
+ pixel_x = 4;
+ pixel_y = -2
+ },
+/obj/item/clothing/neck/stethoscope{
+ pixel_x = -1
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 8
+ },
+/area/ruin/space/has_grav/listeningstation)
+"bB" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/turf/open/floor/plasteel/telecomms,
+/area/ruin/space/has_grav/listeningstation)
+"bC" = (
+/obj/structure/cable,
+/obj/machinery/power/port_gen/pacman{
+ anchored = 1
+ },
+/obj/effect/turf_decal/bot,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/wrench,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"bD" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"bF" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/meter,
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"bH" = (
+/obj/machinery/atmospherics/components/unary/tank/air{
+ dir = 1
+ },
+/obj/effect/turf_decal/bot,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"bI" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 8;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"bJ" = (
+/obj/docking_port/stationary{
+ dir = 4;
+ dwidth = 6;
+ height = 7;
+ id = "caravansyndicate3_listeningpost";
+ name = "Syndicate Listening Post";
+ width = 15
+ },
+/obj/docking_port/stationary{
+ dir = 4;
+ dwidth = 4;
+ height = 5;
+ id = "caravansyndicate1_listeningpost";
+ name = "Syndicate Listening Post";
+ width = 9
+ },
+/turf/template_noop,
+/area/template_noop)
+"en" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"hP" = (
+/obj/structure/curtain,
+/obj/machinery/shower{
+ pixel_y = 14
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/item/soap/syndie,
+/obj/machinery/door/window,
+/turf/open/floor/plasteel/showroomfloor,
+/area/ruin/space/has_grav/listeningstation)
+"hS" = (
+/turf/open/floor/plasteel/showroomfloor,
+/area/ruin/space/has_grav/listeningstation)
+"ib" = (
+/obj/machinery/computer/security/telescreen/entertainment{
+ pixel_x = -30
+ },
+/obj/structure/table,
+/obj/machinery/chem_dispenser/drinks/beer/fullupgrade{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"iu" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/computer/operating{
+ dir = 1
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 10
+ },
+/area/ruin/space/has_grav/listeningstation)
+"iN" = (
+/obj/machinery/firealarm{
+ pixel_x = 6;
+ pixel_y = 28
+ },
+/obj/structure/table,
+/obj/machinery/microwave,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"jj" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4
+ },
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"lw" = (
+/obj/structure/bed/double{
+ dir = 1
+ },
+/obj/item/bedsheet/syndie/double{
+ dir = 1
+ },
+/obj/structure/sign/poster/contraband/random{
+ pixel_x = -32
+ },
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"lP" = (
+/obj/structure/sink{
+ pixel_y = 24
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/window{
+ dir = 8
+ },
+/turf/open/floor/plasteel/showroomfloor,
+/area/ruin/space/has_grav/listeningstation)
+"my" = (
+/obj/machinery/washing_machine{
+ pixel_x = 2;
+ pixel_y = 12
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/showroomfloor,
+/area/ruin/space/has_grav/listeningstation)
+"nz" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/mob_spawn/human/lavaland_syndicate/comms/space{
+ assignedrole = "Space Syndicate";
+ dir = 8;
+ flavour_text = "You are a syndicate agent, assigned to a small listening post station situated near your hated enemy's top secret research facility: Space Station 13. Monitor enemy activity as best you can, and try to keep a low profile. DON'T abandon the base without good cause. Use the communication equipment to provide support to any field agents, and sow disinformation to throw Nanotrasen off your trail. Do not let the base fall into enemy hands!"
+ },
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"nA" = (
+/obj/structure/extinguisher_cabinet{
+ pixel_x = 8;
+ pixel_y = 33
+ },
+/obj/structure/table,
+/obj/item/reagent_containers/food/drinks/beer{
+ pixel_x = 3;
+ pixel_y = 11
+ },
+/obj/item/reagent_containers/food/drinks/beer{
+ pixel_x = -4;
+ pixel_y = 14
+ },
+/obj/item/lighter{
+ pixel_x = 7;
+ pixel_y = -3
+ },
+/obj/item/storage/fancy/cigarettes/cigpack_syndicate{
+ pixel_x = -3
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"oz" = (
+/obj/structure/table/wood,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"px" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"tn" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/structure/table,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"tZ" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"uV" = (
+/obj/machinery/light/small,
+/obj/structure/chair/office/dark{
+ dir = 8
+ },
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"vw" = (
+/obj/machinery/jukebox{
+ req_one_access = null
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"wc" = (
+/obj/machinery/door/airlock{
+ name = "Toilet"
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"wS" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"xA" = (
+/obj/machinery/vending/boozeomat/syndicate_access{
+ shut_up = 1;
+ extended_inventory = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"xF" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"yh" = (
+/obj/structure/closet/secure_closet/freezer/fridge,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"yY" = (
+/obj/structure/table,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/storage/fancy/cigarettes/cigars{
+ pixel_y = 6;
+ pixel_x = -4
+ },
+/obj/item/storage/fancy/cigarettes/cigars/cohiba{
+ pixel_y = 3
+ },
+/obj/item/storage/fancy/cigarettes/cigars/havana{
+ pixel_x = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"BD" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/chair/sofa/corp/left{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"BR" = (
+/obj/structure/toilet{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/showroomfloor,
+/area/ruin/space/has_grav/listeningstation)
+"Cq" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"Dp" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/chair/sofa/corp/right{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"DM" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/machinery/vending/kink{
+ shut_up = 1;
+ extended_inventory = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"Eb" = (
+/obj/machinery/door/airlock{
+ name = "Cabin"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"IZ" = (
+/obj/machinery/sleeper/syndie/fullupgrade{
+ dir = 8
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 6
+ },
+/area/ruin/space/has_grav/listeningstation)
+"Jp" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"Kx" = (
+/obj/structure/table,
+/obj/item/storage/box/donkpockets{
+ pixel_x = -2;
+ pixel_y = 6
+ },
+/obj/item/storage/box/donkpockets{
+ pixel_y = 3
+ },
+/obj/item/storage/box/donkpockets{
+ pixel_x = 2
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"My" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"NI" = (
+/obj/structure/sign/poster/contraband/random{
+ pixel_x = -32
+ },
+/obj/structure/table,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"Ob" = (
+/obj/structure/sign/poster/contraband/random{
+ pixel_y = -31
+ },
+/obj/structure/sink/kitchen{
+ dir = 8;
+ pixel_x = 12
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"Od" = (
+/obj/structure/table,
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/item/reagent_containers/food/drinks/shaker{
+ pixel_y = 8;
+ pixel_x = -6
+ },
+/obj/item/reagent_containers/rag/towel/syndicate{
+ pixel_x = 4;
+ pixel_y = -3
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"Os" = (
+/obj/structure/table,
+/obj/machinery/chem_dispenser/drinks/fullupgrade{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"Pt" = (
+/obj/structure/closet/crate/bin,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"Qn" = (
+/obj/machinery/vending/donksofttoyvendor{
+ extended_inventory = 1
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"QX" = (
+/obj/machinery/vending/cigarette{
+ extended_inventory = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"SD" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"Ta" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4
+ },
+/obj/structure/table,
+/obj/item/toy/figure/syndie{
+ pixel_x = 3;
+ pixel_y = -8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"Ut" = (
+/obj/machinery/airalarm/syndicate{
+ dir = 1;
+ pixel_y = -24
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small,
+/obj/structure/table/optable,
+/turf/open/floor/plasteel/white/side,
+/area/ruin/space/has_grav/listeningstation)
+"UR" = (
+/obj/structure/sink{
+ dir = 4;
+ pixel_x = 11
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/iv_drip,
+/turf/open/floor/plasteel/white/side{
+ dir = 4
+ },
+/area/ruin/space/has_grav/listeningstation)
+"Vc" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"Vh" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/dresser,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"Zj" = (
+/obj/structure/closet{
+ icon_door = "black";
+ name = "wardrobe"
+ },
+/obj/item/clothing/under/color/black{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/item/clothing/under/color/black{
+ pixel_x = 1;
+ pixel_y = -1
+ },
+/obj/item/clothing/head/soft/black{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/item/clothing/head/soft/black{
+ pixel_x = 1;
+ pixel_y = -1
+ },
+/obj/item/clothing/gloves/fingerless,
+/obj/item/clothing/shoes/sneakers/black{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/item/clothing/shoes/sneakers/black{
+ pixel_x = 1;
+ pixel_y = -1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/item/storage/photo_album,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"ZU" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/structure/chair/sofa/corp{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+
+(1,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(2,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(3,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+"}
+(4,1,1) = {"
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+"}
+(5,1,1) = {"
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+"}
+(6,1,1) = {"
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+"}
+(7,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+"}
+(8,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+"}
+(9,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+"}
+(10,1,1) = {"
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+"}
+(11,1,1) = {"
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(12,1,1) = {"
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(13,1,1) = {"
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+"}
+(14,1,1) = {"
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+"}
+(15,1,1) = {"
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ac
+Kx
+NI
+Od
+ib
+Os
+xA
+yh
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+"}
+(16,1,1) = {"
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ac
+nA
+aI
+aH
+aI
+aI
+Jp
+Ob
+ac
+bv
+lw
+ay
+ac
+bv
+lw
+ay
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+"}
+(17,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ac
+ac
+ac
+ac
+iN
+wS
+vw
+Ta
+tn
+yY
+ac
+ac
+Vh
+Cq
+uV
+ac
+Vh
+Cq
+uV
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+"}
+(18,1,1) = {"
+aa
+ab
+ab
+ab
+ab
+ab
+ac
+hP
+BR
+ac
+Pt
+aH
+px
+Dp
+ZU
+BD
+ac
+ac
+jj
+bw
+nz
+ac
+jj
+bw
+nz
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+"}
+(19,1,1) = {"
+aa
+ab
+ab
+ab
+ab
+ab
+ac
+lP
+hS
+wc
+aq
+aH
+aH
+aN
+aZ
+aD
+ac
+ac
+Vc
+oz
+Zj
+ac
+Vc
+oz
+Zj
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+"}
+(20,1,1) = {"
+ab
+ab
+ab
+ab
+ab
+ab
+ac
+my
+ar
+ac
+DM
+aH
+aI
+aP
+ba
+bj
+ac
+ac
+Eb
+ac
+ac
+ac
+Eb
+ac
+ac
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+"}
+(21,1,1) = {"
+ab
+ab
+ab
+ab
+ab
+ab
+ac
+ac
+ac
+ac
+ac
+ac
+aJ
+aQ
+bb
+bk
+bp
+bi
+tZ
+xF
+bi
+bi
+SD
+Qn
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+"}
+(22,1,1) = {"
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ac
+ac
+ah
+as
+ac
+ac
+aR
+ac
+bl
+ac
+bx
+bD
+bD
+en
+My
+My
+QX
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+"}
+(23,1,1) = {"
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ac
+ad
+ai
+at
+az
+ac
+aS
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+"}
+(24,1,1) = {"
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ac
+ae
+aj
+au
+aA
+aK
+aT
+bc
+ac
+bq
+by
+aO
+bC
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+"}
+(25,1,1) = {"
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ac
+ac
+ak
+av
+aB
+ac
+aU
+bd
+bm
+br
+bz
+bF
+bH
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+"}
+(26,1,1) = {"
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ac
+ac
+ac
+ac
+aL
+aV
+be
+ac
+ac
+ac
+ac
+ac
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+"}
+(27,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ac
+ac
+al
+aw
+aC
+ac
+aW
+bf
+bn
+bs
+bA
+iu
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(28,1,1) = {"
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ac
+af
+am
+ax
+bI
+aM
+aX
+bg
+bo
+bt
+bB
+Ut
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(29,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ac
+ac
+an
+ac
+aE
+ac
+aY
+bh
+ac
+bu
+UR
+IZ
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(30,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ag
+ao
+ag
+aF
+ag
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(31,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ag
+ap
+ag
+aG
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(32,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+bJ
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
diff --git a/_maps/RandomZLevels/VR/snowdin_VR.dmm b/_maps/RandomZLevels/VR/snowdin_VR.dmm
index 4e50e72b84..834dfd2f3f 100644
--- a/_maps/RandomZLevels/VR/snowdin_VR.dmm
+++ b/_maps/RandomZLevels/VR/snowdin_VR.dmm
@@ -6215,9 +6215,7 @@
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
-/turf/open/floor/plasteel{
- icon_state = "yellow"
- },
+/turf/open/floor/plasteel,
/area/awaymission/snowdin/post/engineering)
"np" = (
/obj/structure/cable/yellow{
@@ -6461,9 +6459,7 @@
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
-/turf/open/floor/plasteel{
- icon_state = "yellow"
- },
+/turf/open/floor/plasteel,
/area/awaymission/snowdin/post/engineering)
"nR" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
@@ -7091,9 +7087,7 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
-/turf/open/floor/plasteel{
- icon_state = "redcorner"
- },
+/turf/open/floor/plasteel,
/area/awaymission/snowdin/post/secpost)
"pn" = (
/turf/open/floor/plating,
@@ -7727,9 +7721,7 @@
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
-/turf/open/floor/plasteel{
- icon_state = "yellow"
- },
+/turf/open/floor/plasteel,
/area/awaymission/snowdin/post/engineering)
"qS" = (
/obj/machinery/button/door{
diff --git a/_maps/map_files/layenia/layeniastation.dmm b/_maps/map_files/layenia/layeniastation.dmm
index 0031188dc3..b01c091f63 100644
--- a/_maps/map_files/layenia/layeniastation.dmm
+++ b/_maps/map_files/layenia/layeniastation.dmm
@@ -3300,10 +3300,6 @@
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
-"aAH" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/cargo/miningdock)
"aAW" = (
/obj/machinery/vending/wardrobe/sec_wardrobe,
/obj/effect/turf_decal/tile/red{
@@ -4570,6 +4566,9 @@
},
/obj/effect/landmark/event_spawn,
/obj/effect/landmark/nuclear_waste_spawner,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"aJI" = (
@@ -5012,10 +5011,6 @@
},
/turf/open/floor/plasteel/freezer,
/area/commons/toilet/restrooms)
-"aMP" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/maintenance/solars/aux/port)
"aMW" = (
/obj/effect/turf_decal/stripes/corner{
dir = 1
@@ -5352,13 +5347,6 @@
/obj/structure/chair/office/light{
dir = 4
},
-/obj/machinery/button/door{
- id = "robotics";
- name = "Shutters Control Button";
- pixel_x = -26;
- pixel_y = 8;
- req_access_txt = "29"
- },
/obj/effect/turf_decal/tile/red{
dir = 8
},
@@ -5923,7 +5911,6 @@
/obj/structure/disposalpipe/segment{
dir = 5
},
-/obj/effect/baseturf_helper/asteroid/layenia,
/turf/closed/wall,
/area/cargo/qm)
"aUA" = (
@@ -6154,6 +6141,9 @@
/obj/structure/cable{
icon_state = "4-8"
},
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
/turf/open/floor/plasteel/dark{
icon_state = "floor_rusty"
},
@@ -6766,10 +6756,6 @@
"bbE" = (
/turf/open/floor/plasteel/dark,
/area/engineering/main)
-"bbR" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/science)
"bbS" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
@@ -7267,12 +7253,10 @@
},
/area/security/brig)
"beT" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 1
- },
/obj/structure/cable{
icon_state = "1-2"
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/turf/open/floor/plasteel,
/area/engineering/teg)
"beV" = (
@@ -7693,13 +7677,6 @@
},
/turf/open/floor/plasteel,
/area/engineering/atmos)
-"bhP" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/turf/closed/wall/r_wall,
-/area/engineering/atmos)
"bhW" = (
/obj/structure/table,
/obj/machinery/airalarm{
@@ -8987,6 +8964,11 @@
},
/turf/open/floor/plasteel/cafeteria,
/area/service/kitchen)
+"bqx" = (
+/obj/effect/turf_decal/stripes/box,
+/obj/structure/fans/tiny/invisible,
+/turf/open/floor/plasteel/dark,
+/area/space)
"bqy" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer3{
dir = 8;
@@ -9247,8 +9229,8 @@
/turf/open/floor/plasteel/showroomfloor,
/area/security)
"bsK" = (
-/obj/structure/closet/crate/engineering,
/obj/effect/turf_decal/bot,
+/obj/structure/closet/crate/solarpanel_small,
/turf/open/floor/plasteel/dark,
/area/ruin/unpowered/no_grav)
"bsW" = (
@@ -9864,15 +9846,11 @@
/turf/open/floor/plasteel/dark,
/area/ai_monitored/turret_protected/aisat/hallway)
"bxg" = (
-/obj/structure/sink{
- dir = 4;
- pixel_x = 12
- },
-/obj/structure/mirror{
- icon_state = "mirror_broke";
- pixel_x = 28
- },
/obj/effect/decal/cleanable/dirt,
+/obj/structure/urinal/shit{
+ pixel_y = 4;
+ pixel_x = 26
+ },
/turf/open/floor/plasteel/grimy,
/area/maintenance/starboard)
"bxh" = (
@@ -10750,14 +10728,6 @@
},
/turf/open/floor/plasteel/white,
/area/medical/virology)
-"bEs" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/science/server)
-"bEz" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/cargo/warehouse)
"bEB" = (
/obj/effect/turf_decal/tile/neutral{
color = "#ffffff"
@@ -11023,7 +10993,6 @@
/obj/structure/cable{
icon_state = "0-8"
},
-/obj/effect/baseturf_helper/cloud,
/turf/open/floor/plasteel/airless/solarpanel{
initial_gas_mix = "o2=22;n2=82;TEMP=180";
planetary_atmos = 1
@@ -11811,13 +11780,9 @@
/turf/open/floor/plasteel/dark,
/area/command/bridge)
"bLY" = (
-/obj/effect/spawner/lootdrop/maintenance,
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/obj/machinery/power/apc/auto_name/west,
-/turf/open/floor/plating,
-/area/maintenance/port/aft)
+/mob/living/simple_animal/pet/penguin/emperor,
+/turf/open/floor/grass/snow,
+/area/commons/fitness)
"bMa" = (
/obj/effect/turf_decal/stripes/line{
dir = 6
@@ -11861,10 +11826,6 @@
},
/turf/open/floor/carpet,
/area/service/bar)
-"bMk" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/command/teleporter)
"bMn" = (
/obj/effect/turf_decal/loading_area{
color = "#55391A";
@@ -12052,9 +12013,8 @@
/turf/open/floor/plating,
/area/hallway/secondary/entry)
"bOi" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/obj/machinery/meter,
/obj/effect/turf_decal/stripes/box,
+/obj/machinery/atmospherics/components/binary/volume_pump,
/turf/open/floor/plasteel/dark,
/area/engineering/teg)
"bOp" = (
@@ -12272,20 +12232,8 @@
/turf/open/floor/carpet,
/area/service/library)
"bPz" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{
- name = "air supply pipe"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
- name = "scrubbers pipe"
- },
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/turf/open/floor/plating,
-/area/maintenance/port/aft)
+/turf/open/floor/glass,
+/area/hallway/primary/central)
"bPA" = (
/obj/effect/turf_decal/loading_area{
dir = 1;
@@ -13049,10 +12997,6 @@
"bWa" = (
/turf/closed/wall/r_wall,
/area/science)
-"bWd" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/engineering/main)
"bWe" = (
/obj/effect/turf_decal/tile/neutral{
dir = 9
@@ -13670,6 +13614,15 @@
icon_state = "darkfull_plate"
},
/area/hallway/primary/fore)
+"caC" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/engineering/main)
"caJ" = (
/obj/structure/rack,
/obj/effect/spawner/lootdrop/techstorage/tcomms,
@@ -14272,10 +14225,6 @@
},
/turf/open/floor/plasteel,
/area/cargo/sorting)
-"cgo" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/service/theater)
"cgs" = (
/obj/machinery/door/airlock/atmos/abandoned{
dir = 4;
@@ -17698,12 +17647,17 @@
/turf/open/floor/plating/layeniaredder,
/area/ruin/unpowered/no_grav)
"cIM" = (
-/obj/structure/railing{
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/turf_decal/stripes/line{
dir = 4
},
-/obj/structure/railing,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
/turf/open/floor/plating,
-/area/maintenance/port/aft)
+/area/ruin/unpowered/no_grav)
"cIO" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 4;
@@ -17777,6 +17731,22 @@
icon_state = "whitehall_plate"
},
/area/hallway/primary/starboard)
+"cJg" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
+ dir = 9;
+ name = "scrubbers pipe"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{
+ name = "air supply pipe"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/maintenance/solars/port/aft)
"cJh" = (
/obj/structure/flora/junglebush/large,
/turf/open/floor/grass,
@@ -18249,7 +18219,6 @@
name = "Maintenance Access";
req_access_txt = "12"
},
-/obj/effect/baseturf_helper/asteroid/layenia,
/obj/structure/cable{
icon_state = "1-2"
},
@@ -18375,17 +18344,6 @@
},
/turf/open/floor/plasteel/dark,
/area/science)
-"cOb" = (
-/obj/structure/fence,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/structure/fans/tiny/invisible,
-/turf/open/floor/plating,
-/area/ruin/unpowered/no_grav)
"cOo" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -18749,7 +18707,7 @@
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
-/area/engineering/break_room)
+/area/engineering/storage/tech)
"cQG" = (
/obj/structure/chair/sofa/corner{
dir = 8
@@ -19088,10 +19046,6 @@
icon_state = "floor_whole_alt"
},
/area/security/prison)
-"cSk" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/commons/dorms)
"cSo" = (
/obj/machinery/door/airlock/maintenance{
dir = 4;
@@ -19410,10 +19364,6 @@
},
/turf/open/floor/plasteel,
/area/maintenance/port)
-"cVg" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/maintenance/fore)
"cVj" = (
/obj/structure/cable{
icon_state = "1-4"
@@ -19452,7 +19402,6 @@
/obj/structure/cable{
icon_state = "0-4"
},
-/obj/machinery/power/apc/auto_name/south,
/turf/open/floor/plating,
/area/maintenance/port)
"cVN" = (
@@ -19550,7 +19499,6 @@
icon_state = "drain";
name = "drain"
},
-/obj/machinery/iv_drip,
/turf/open/floor/plasteel/freezer,
/area/medical/medbay/central)
"cWo" = (
@@ -19763,8 +19711,8 @@
/turf/open/floor/plasteel,
/area/science/xenobiology)
"cXA" = (
-/obj/machinery/atmospherics/components/binary/pump,
/obj/effect/turf_decal/stripes/box,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/turf/open/floor/plasteel/dark,
/area/engineering/teg)
"cXD" = (
@@ -19814,8 +19762,8 @@
/obj/effect/turf_decal/stripes/end{
dir = 8
},
-/obj/structure/fence/end{
- dir = 8
+/obj/structure/fence{
+ dir = 4
},
/turf/open/floor/plating/layeniaredder{
icon_state = "concrete2";
@@ -21213,10 +21161,6 @@
/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_atmos,
/turf/open/floor/engine,
/area/maintenance/disposal/incinerator)
-"dhV" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/maintenance/port)
"dhX" = (
/obj/machinery/door/airlock/maintenance{
name = "Maintenance Access";
@@ -21228,7 +21172,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
name = "scrubbers pipe"
},
-/obj/effect/baseturf_helper/asteroid/layenia,
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
@@ -21807,16 +21750,12 @@
},
/area/hallway/primary/fore)
"dlP" = (
-/obj/structure/disposalpipe/segment,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
+/obj/machinery/light{
+ dir = 8;
+ pixel_x = -7
},
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/structure/railing/corner,
-/turf/open/floor/plating,
-/area/space)
+/turf/open/floor/grass/snow,
+/area/commons/fitness)
"dlR" = (
/obj/machinery/door/airlock/medical{
name = "Morgue";
@@ -22598,10 +22537,6 @@
},
/turf/open/floor/grass,
/area/service/hydroponics/garden)
-"dsA" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/commons/toilet/restrooms)
"dsO" = (
/obj/structure/closet/secure_closet/security/sec,
/obj/effect/turf_decal/bot,
@@ -22828,10 +22763,6 @@
icon_state = "whitehall_plate"
},
/area/hallway/secondary/entry)
-"dtX" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/maintenance/solars/starboard/fore)
"dul" = (
/turf/closed/wall/r_wall,
/area/ruin/unpowered/no_grav)
@@ -24245,10 +24176,6 @@
},
/turf/open/floor/plasteel/dark,
/area/command/heads_quarters/ce)
-"dDZ" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/mineral/lead,
-/area/engineering/lobby)
"dEp" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -25545,11 +25472,9 @@
/obj/effect/turf_decal/stripes/line{
dir = 4
},
-/obj/structure/railing{
- dir = 8
- },
+/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
-/area/space)
+/area/cargo/sorting)
"dOI" = (
/obj/structure/closet/secure_closet/security/sec,
/obj/effect/turf_decal/bot,
@@ -25655,11 +25580,9 @@
/obj/effect/turf_decal/stripes/line{
dir = 8
},
-/obj/structure/railing{
- dir = 4
- },
+/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
-/area/space)
+/area/cargo/sorting)
"dPO" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{
name = "air supply pipe"
@@ -26726,13 +26649,6 @@
icon_state = "darkfull_plate"
},
/area/hallway/primary/port)
-"dXW" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/closed/wall/r_wall,
-/area/tcommsat/server)
"dYd" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -26807,6 +26723,19 @@
dir = 8;
name = "air scrubber"
},
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/structure/table,
/turf/open/floor/plating,
/area/maintenance/solars/starboard/fore)
"dYp" = (
@@ -27980,10 +27909,6 @@
icon_state = "floor_plate"
},
/area/hallway/primary/port/fore)
-"ehc" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/command/gateway)
"ehi" = (
/obj/machinery/vending/snack/random,
/turf/open/floor/plasteel/dark,
@@ -29925,13 +29850,22 @@
/area/ruin/unpowered/no_grav)
"evP" = (
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "0-8"
},
-/obj/structure/cable{
- icon_state = "1-4"
+/obj/effect/turf_decal/loading_area{
+ color = "#55391A";
+ icon_state = "siding_wood_line";
+ name = "wood"
},
-/turf/open/floor/plating,
-/area/maintenance/aft)
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer3{
+ dir = 8;
+ name = "air vent"
+ },
+/turf/open/floor/wood{
+ icon_state = "wood_parquet";
+ name = "parquet"
+ },
+/area/commons/dorms)
"evW" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 4;
@@ -30200,10 +30134,6 @@
dir = 4
},
/area/hallway/primary/port/fore)
-"exW" = (
-/obj/effect/baseturf_helper/cloud,
-/turf/open/space/basic,
-/area/space)
"exZ" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -30215,7 +30145,7 @@
name = "scrubbers pipe"
},
/turf/open/floor/plating,
-/area/space)
+/area/cargo/sorting)
"eyc" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{
dir = 10;
@@ -32087,10 +32017,8 @@
},
/area/maintenance/fore)
"eLh" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 1
- },
/obj/effect/turf_decal/stripes/box,
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/turf/open/floor/plasteel/dark,
/area/engineering/teg)
"eLm" = (
@@ -32213,6 +32141,12 @@
/area/ai_monitored/turret_protected/aisat/hallway)
"eMt" = (
/obj/structure/table,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
/turf/open/floor/plating,
/area/maintenance/solars/aux/port)
"eMy" = (
@@ -32606,6 +32540,12 @@
/obj/machinery/portable_atmospherics/canister/air,
/turf/open/floor/plating,
/area/maintenance/starboard)
+"ePJ" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 5
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/unpowered/no_grav)
"ePR" = (
/obj/item/gun/energy/e_gun/advtaser{
pixel_x = -3;
@@ -32708,15 +32648,10 @@
/turf/open/floor/plasteel/dark,
/area/ruin/unpowered/no_grav)
"eQR" = (
-/obj/machinery/door/airlock/engineering{
- name = "Starboard Quarter Solar Access";
- req_access_txt = "10"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plating,
-/area/maintenance/port/aft)
+/obj/structure/lattice/catwalk,
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
+/area/space)
"eQU" = (
/obj/effect/turf_decal/loading_area{
dir = 6;
@@ -33099,14 +33034,14 @@
dir = 8;
pixel_x = 24
},
-/obj/effect/turf_decal/tile/yellow{
- dir = 5
- },
/obj/effect/turf_decal/loading_area{
dir = 4;
icon_state = "drain";
name = "drain"
},
+/obj/effect/turf_decal/tile/red{
+ dir = 6
+ },
/turf/open/floor/plasteel{
dir = 4;
icon_state = "floor_plate"
@@ -33434,6 +33369,9 @@
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel/dark{
icon_state = "floor_rusty"
},
@@ -33499,6 +33437,7 @@
/obj/structure/cable{
icon_state = "0-8"
},
+/obj/machinery/power/apc/auto_name/north,
/turf/open/floor/plasteel/white/side,
/area/medical/virology)
"eWo" = (
@@ -33824,9 +33763,6 @@
/turf/open/floor/plasteel/cafeteria,
/area/service/kitchen)
"eZu" = (
-/obj/effect/turf_decal/tile/yellow{
- dir = 5
- },
/obj/effect/turf_decal/loading_area{
dir = 4;
icon_state = "drain";
@@ -33835,6 +33771,9 @@
/obj/structure/sign/warning/nosmoking{
pixel_x = 28
},
+/obj/effect/turf_decal/tile/red{
+ dir = 6
+ },
/turf/open/floor/plasteel{
dir = 4;
icon_state = "floor_plate"
@@ -35082,10 +35021,6 @@
initial_gas_mix = "o2=22;n2=82;TEMP=180"
},
/area/ruin/unpowered/no_grav)
-"fjB" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/command/heads_quarters/rd)
"fjC" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk,
@@ -35358,6 +35293,9 @@
dir = 4
},
/obj/effect/landmark/navigate_destination/engineering,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"flm" = (
@@ -36729,7 +36667,7 @@
icon_state = "0-2"
},
/obj/structure/cable,
-/turf/open/space/basic,
+/turf/open/floor/plasteel/dark,
/area/command/bridge)
"fwG" = (
/obj/effect/turf_decal/tile/red{
@@ -37306,6 +37244,7 @@
/obj/effect/turf_decal/stripes/red/line{
dir = 1
},
+/obj/structure/fans/tiny/invisible,
/turf/open/floor/plasteel/dark,
/area/ruin/unpowered/no_grav)
"fBH" = (
@@ -37515,10 +37454,6 @@
},
/turf/open/floor/plasteel/white,
/area/medical/virology)
-"fDn" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/cargo/sorting)
"fDo" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{
dir = 8;
@@ -37718,11 +37653,6 @@
/turf/open/floor/plating,
/area/space)
"fEL" = (
-/obj/machinery/door/airlock/security{
- dir = 4;
- name = "Brig";
- req_access_txt = "63; 42"
- },
/obj/machinery/door/firedoor{
dir = 8
},
@@ -37737,6 +37667,9 @@
/obj/structure/cable{
icon_state = "4-8"
},
+/obj/machinery/door/airlock/security{
+ name = "Court Backroom"
+ },
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
@@ -38737,6 +38670,13 @@
icon_state = "darkfull_plate"
},
/area/hallway/primary/port/fore)
+"fLF" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{
+ dir = 4;
+ name = "air scrubber"
+ },
+/turf/open/floor/plating,
+/area/maintenance/solars/port/aft)
"fLI" = (
/obj/structure/table/reinforced,
/obj/item/clothing/glasses/meson/engine,
@@ -39531,6 +39471,7 @@
/obj/effect/turf_decal/stripes/white/line{
dir = 8
},
+/obj/machinery/computer/operating,
/turf/open/floor/plasteel/freezer,
/area/medical/medbay/central)
"fRV" = (
@@ -39826,7 +39767,6 @@
/turf/open/floor/plating,
/area/maintenance/aft)
"fUd" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
/obj/structure/closet/emcloset,
/turf/open/floor/plasteel{
dir = 8;
@@ -41232,6 +41172,10 @@
},
/obj/item/folder/white,
/obj/item/pen,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "robotics";
+ name = "robotics lab shutters"
+ },
/turf/open/floor/plating,
/area/science/robotics/lab)
"geN" = (
@@ -41967,7 +41911,6 @@
/obj/structure/cable{
icon_state = "0-4"
},
-/obj/machinery/power/apc/auto_name/west,
/turf/open/floor/plasteel{
dir = 4;
icon_plating = "floor";
@@ -43042,9 +42985,6 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/effect/turf_decal/tile/yellow{
- dir = 5
- },
/obj/effect/turf_decal/loading_area{
dir = 4;
icon_state = "drain";
@@ -43054,6 +42994,9 @@
pixel_x = 24;
pixel_y = 21
},
+/obj/effect/turf_decal/tile/red{
+ dir = 6
+ },
/turf/open/floor/plasteel{
dir = 4;
icon_state = "floor_trim"
@@ -43523,10 +43466,6 @@
/obj/effect/landmark/start/assistant,
/turf/open/floor/grass,
/area/hallway/primary/port/fore)
-"gxr" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/maintenance/fore)
"gxv" = (
/obj/machinery/light,
/obj/effect/turf_decal/loading_area{
@@ -43953,10 +43892,6 @@
icon_state = "wood-broken5"
},
/area/maintenance/starboard)
-"gBl" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/maintenance/starboard/aft)
"gBm" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -44080,6 +44015,21 @@
icon_state = "floor_trim"
},
/area/hallway/primary/starboard)
+"gBS" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 10
+ },
+/obj/effect/turf_decal/loading_area{
+ dir = 8;
+ icon_state = "drain";
+ name = "drain"
+ },
+/obj/effect/turf_decal/vg_decals/department/sec,
+/turf/open/floor/plasteel{
+ dir = 8;
+ icon_state = "floor_plate"
+ },
+/area/hallway/primary/fore)
"gBW" = (
/obj/structure/sign/poster/random{
pixel_x = 32
@@ -44271,6 +44221,9 @@
/obj/structure/cable{
icon_state = "1-4"
},
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plasteel/dark,
/area/engineering/main)
"gDn" = (
@@ -44299,10 +44252,6 @@
/area/maintenance/starboard)
"gDr" = (
/obj/machinery/door/firedoor/heavy,
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "rnd2";
- name = "research lab shutters"
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{
name = "air supply pipe"
},
@@ -44317,6 +44266,10 @@
icon_state = "steel_decals_central6";
name = "maintenance hatch"
},
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "rnd2";
+ name = "research lab shutters"
+ },
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
@@ -45114,6 +45067,13 @@
/obj/item/stack/sheet/mineral/wood,
/turf/open/floor/plating/layeniaredder,
/area/ruin/unpowered/no_grav)
+"gKb" = (
+/obj/machinery/power/apc/auto_name/north,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/floor/plating,
+/area/maintenance/solars/port/aft)
"gKd" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/door/poddoor/preopen{
@@ -45421,11 +45381,11 @@
/area/engineering/main)
"gMz" = (
/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/door/firedoor,
/obj/machinery/door/poddoor/shutters/preopen{
id = "robotics";
name = "robotics lab shutters"
},
-/obj/machinery/door/firedoor,
/turf/open/floor/plating,
/area/science/robotics/lab)
"gMD" = (
@@ -46492,10 +46452,6 @@
"gVC" = (
/turf/closed/wall,
/area/service/chapel/main)
-"gVG" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/mineral/lead,
-/area/engineering/main/reactor_core)
"gVH" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -46620,6 +46576,7 @@
/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
dir = 9
},
+/obj/machinery/atmospherics/pipe/layer_manifold,
/turf/open/floor/engine/vacuum,
/area/engineering/teg)
"gWQ" = (
@@ -47089,10 +47046,6 @@
},
/turf/open/space/basic,
/area/space)
-"hap" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/medical/chemistry)
"hau" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 6;
@@ -47693,10 +47646,6 @@
},
/turf/open/floor/plating,
/area/ai_monitored/command/storage/eva)
-"heR" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/commons/storage/tools)
"heU" = (
/obj/machinery/door/firedoor{
dir = 8
@@ -48087,6 +48036,9 @@
/obj/machinery/door/firedoor{
dir = 8
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel{
dir = 8;
icon_plating = "floor";
@@ -48850,14 +48802,8 @@
/turf/open/floor/plasteel,
/area/engineering/teg)
"hmI" = (
-/obj/machinery/door/airlock/external{
- name = "External Access";
- req_access_txt = "12"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 8
- },
-/turf/open/floor/plating,
+/mob/living/simple_animal/pet/penguin/emperor,
+/turf/open/floor/holofloor/ice,
/area/commons/fitness)
"hmJ" = (
/obj/effect/turf_decal/tile/neutral{
@@ -49017,6 +48963,10 @@
},
/obj/item/pen,
/obj/machinery/door/firedoor,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "robotics";
+ name = "robotics lab shutters"
+ },
/turf/open/floor/plating,
/area/science/robotics/lab)
"hnn" = (
@@ -49829,15 +49779,11 @@
},
/area/maintenance/fore)
"htv" = (
-/obj/machinery/door/airlock/external{
- name = "External Access";
- req_access_txt = "12"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 4
+/obj/structure/cable{
+ icon_state = "0-2"
},
/turf/open/floor/plating,
-/area/commons/fitness)
+/area/maintenance/port)
"htC" = (
/obj/machinery/light{
dir = 4;
@@ -50172,16 +50118,6 @@
},
/turf/open/floor/plasteel,
/area/engineering/atmos)
-"hvT" = (
-/obj/effect/baseturf_helper/cloud,
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/turf/open/floor/plasteel/airless/solarpanel{
- initial_gas_mix = "o2=22;n2=82;TEMP=180";
- planetary_atmos = 1
- },
-/area/ruin/unpowered/no_grav)
"hvU" = (
/obj/effect/turf_decal/tile/blue{
dir = 5
@@ -50654,10 +50590,6 @@
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel/dark,
/area/ruin/unpowered/no_grav)
-"hAm" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/command/heads_quarters/ce)
"hAr" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -51862,13 +51794,11 @@
/turf/open/floor/plasteel,
/area/cargo/sorting)
"hIV" = (
-/obj/machinery/light{
- dir = 1;
- pixel_y = 19
- },
-/obj/item/stack/ore/iron,
-/turf/open/floor/plating/layeniaredder,
-/area/ruin/unpowered/no_grav)
+/obj/structure/lattice/catwalk,
+/obj/structure/railing,
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
+/area/space)
"hJa" = (
/obj/structure/table/wood,
/obj/item/storage/crayons{
@@ -52555,10 +52485,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
-"hNx" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/maintenance/department/medical/morgue)
"hNB" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/disposalpipe/segment,
@@ -52572,7 +52498,7 @@
/obj/structure/cable{
icon_state = "0-4"
},
-/turf/open/space/basic,
+/turf/open/floor/plasteel/dark,
/area/command/bridge)
"hNQ" = (
/obj/effect/turf_decal/tile/neutral{
@@ -53893,22 +53819,10 @@
/turf/open/floor/plasteel,
/area/security/checkpoint)
"hXA" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{
- dir = 8;
- name = "air supply pipe"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
- dir = 4;
- name = "scrubbers pipe"
- },
-/turf/open/floor/plating,
-/area/maintenance/port)
+/obj/machinery/suit_storage_unit/engine,
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel/dark,
+/area/engineering/lobby)
"hXI" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 4;
@@ -54144,9 +54058,12 @@
/turf/open/floor/plasteel/dark,
/area/engineering/storage/tech)
"hZs" = (
-/obj/structure/sign/warning/electricshock,
-/turf/closed/wall/r_wall,
-/area/maintenance/port/aft)
+/obj/structure/lattice/catwalk,
+/obj/structure/railing/corner{
+ dir = 8
+ },
+/turf/open/floor/plating/layeniaredder,
+/area/ruin/unpowered/no_grav)
"hZz" = (
/obj/structure/table,
/obj/machinery/light{
@@ -55614,6 +55531,7 @@
/area/hallway/primary/central)
"ilC" = (
/obj/effect/turf_decal/delivery,
+/obj/structure/closet/crate/solarpanel_small,
/turf/open/floor/plasteel/dark,
/area/ruin/unpowered/no_grav)
"ilH" = (
@@ -56642,7 +56560,7 @@
},
/obj/machinery/power/deck_relay,
/turf/open/floor/plating,
-/area/maintenance/port/aft)
+/area/maintenance/solars/port/aft)
"isR" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{
name = "air supply pipe"
@@ -56712,10 +56630,6 @@
"itR" = (
/turf/open/floor/plasteel/stairs/medium,
/area/science)
-"itS" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/commons/storage/auxiliary)
"itT" = (
/obj/effect/turf_decal/loading_area{
dir = 8;
@@ -56791,6 +56705,12 @@
/obj/item/clothing/head/kitty,
/turf/open/floor/plating,
/area/maintenance/starboard)
+"iuu" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/maintenance/solars/port/aft)
"iuv" = (
/turf/open/floor/plasteel{
dir = 8;
@@ -56945,6 +56865,18 @@
icon_state = "whitehall_plate"
},
/area/hallway/secondary/exit)
+"iwf" = (
+/obj/structure/rack,
+/obj/item/clothing/suit/hooded/wintercoat/engineering,
+/obj/item/clothing/suit/hooded/wintercoat/engineering,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/turf/open/floor/plating,
+/area/maintenance/solars/port/aft)
"iwg" = (
/obj/structure/table,
/obj/effect/turf_decal/tile/brown{
@@ -57441,10 +57373,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/port/fore)
-"izp" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/science/mixing)
"izH" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -58452,11 +58380,15 @@
/obj/effect/turf_decal/stripes/line{
dir = 4
},
-/obj/structure/railing/corner{
- dir = 8
+/obj/machinery/door/airlock/external{
+ name = "Disposal External Airlock"
+ },
+/obj/structure/fans/tiny,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 4
},
/turf/open/floor/plating,
-/area/space)
+/area/cargo/sorting)
"iHF" = (
/obj/effect/turf_decal/tile/neutral{
dir = 10
@@ -58516,10 +58448,6 @@
icon_state = "floor_plate"
},
/area/hallway/primary/fore)
-"iHU" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/security/range)
"iHV" = (
/turf/open/floor/plasteel/dark,
/area/cargo/miningdock)
@@ -58831,10 +58759,11 @@
"iKT" = (
/turf/closed/wall,
/area/security/checkpoint/science)
-"iLa" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/service/lawoffice)
+"iKU" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/fans/tiny/invisible,
+/turf/open/space/basic,
+/area/space)
"iLc" = (
/obj/structure/closet/secure_closet/freezer{
name = "fridge"
@@ -59221,6 +59150,9 @@
icon_state = "drain_corner";
name = "drain"
},
+/obj/effect/turf_decal/tile/red{
+ dir = 5
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"iNv" = (
@@ -60642,6 +60574,13 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/machinery/button/door{
+ id = "robotics";
+ name = "Shutters Control Button";
+ pixel_x = 6;
+ pixel_y = 7;
+ req_access_txt = "29"
+ },
/turf/open/floor/plasteel/white,
/area/science/robotics/lab)
"iXn" = (
@@ -61063,10 +61002,6 @@
},
/turf/open/floor/grass,
/area/maintenance/starboard)
-"jad" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/science/circuit)
"jap" = (
/obj/effect/turf_decal/loading_area{
dir = 4;
@@ -61191,7 +61126,6 @@
/obj/structure/cable{
icon_state = "0-2"
},
-/obj/machinery/power/apc/auto_name/north,
/turf/open/floor/plating,
/area/maintenance/port)
"jbb" = (
@@ -61220,6 +61154,9 @@
/obj/structure/cable{
icon_state = "4-8"
},
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
/turf/open/floor/plasteel/dark,
/area/command/gateway)
"jbL" = (
@@ -61243,7 +61180,6 @@
/area/security/prison)
"jbN" = (
/obj/structure/cable,
-/obj/machinery/power/apc/auto_name/south,
/turf/open/floor/plating,
/area/maintenance/starboard)
"jbU" = (
@@ -62612,6 +62548,12 @@
/obj/effect/turf_decal/stripes/box,
/turf/open/openspace,
/area/space)
+"jmM" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/dark,
+/area/engineering/lobby)
"jmO" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/poddoor/preopen{
@@ -63160,11 +63102,6 @@
},
/turf/open/floor/wood,
/area/maintenance/starboard)
-"jrl" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/obj/machinery/space_heater,
-/turf/open/floor/plating,
-/area/maintenance/port)
"jrm" = (
/obj/machinery/light{
pixel_y = -1
@@ -63206,6 +63143,18 @@
},
/turf/open/floor/plasteel,
/area/engineering/atmos)
+"jrz" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{
+ name = "air supply pipe"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating,
+/area/maintenance/solars/port/aft)
"jrD" = (
/obj/effect/turf_decal/loading_area{
dir = 8;
@@ -64321,6 +64270,22 @@
},
/turf/open/floor/plasteel/dark,
/area/hallway/secondary/service)
+"jzo" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8;
+ color = "#FFFFFF"
+ },
+/obj/effect/turf_decal/tile/neutral{
+ color = "#ffffff"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel{
+ dir = 1;
+ icon_state = "floor_plate"
+ },
+/area/engineering/lobby)
"jzx" = (
/obj/effect/turf_decal/stripes/line{
dir = 10
@@ -65208,6 +65173,13 @@
/obj/effect/turf_decal/tile/green,
/turf/open/floor/plasteel,
/area/service/hydroponics/garden)
+"jEI" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/fans/tiny/invisible,
+/turf/open/floor/plasteel/dark,
+/area/ruin/unpowered/no_grav)
"jEM" = (
/obj/effect/turf_decal/tile/neutral{
dir = 8;
@@ -66191,10 +66163,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
-"jKM" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/service/janitor)
"jKS" = (
/obj/machinery/teleport/hub,
/obj/effect/turf_decal/delivery,
@@ -66682,10 +66650,6 @@
},
/turf/open/floor/plasteel/dark,
/area/science/observatory)
-"jPl" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/service/hydroponics/garden)
"jPp" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1{
dir = 1;
@@ -67282,10 +67246,6 @@
},
/turf/open/floor/plasteel,
/area/security/courtroom)
-"jTo" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/science/research)
"jTr" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer3{
name = "air supply pipe"
@@ -67390,7 +67350,7 @@
/turf/open/floor/plasteel/freezer,
/area/medical/medbay/central)
"jUm" = (
-/turf/open/floor/plating,
+/turf/open/floor/holofloor/ice,
/area/commons/fitness)
"jUo" = (
/obj/structure/cable{
@@ -67408,6 +67368,14 @@
dir = 4;
pixel_x = 7
},
+/obj/structure/sink{
+ dir = 4;
+ pixel_x = 12
+ },
+/obj/structure/mirror{
+ icon_state = "mirror_broke";
+ pixel_x = 28
+ },
/turf/open/floor/plasteel/grimy,
/area/maintenance/starboard)
"jUv" = (
@@ -68492,8 +68460,8 @@
"kcd" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 4
},
/turf/open/floor/plasteel,
/area/engineering/teg)
@@ -69151,11 +69119,11 @@
},
/area/ruin/unpowered/no_grav)
"kht" = (
+/obj/effect/spawner/structure/window,
/obj/machinery/door/poddoor/shutters/preopen{
- id = "robotics2";
+ id = "robotics";
name = "robotics lab shutters"
},
-/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
/area/science/robotics/lab)
"khF" = (
@@ -70270,21 +70238,8 @@
/turf/open/floor/carpet/black,
/area/service/bar)
"kpZ" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{
- name = "air supply pipe"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
- name = "scrubbers pipe"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/obj/machinery/power/apc/auto_name/east,
-/turf/open/floor/plating,
-/area/maintenance/port)
+/turf/open/floor/grass/snow,
+/area/commons/fitness)
"kqf" = (
/obj/effect/turf_decal/loading_area{
dir = 5;
@@ -70504,6 +70459,12 @@
/obj/structure/rack,
/obj/item/clothing/suit/hooded/wintercoat/engineering,
/obj/item/clothing/suit/hooded/wintercoat/engineering,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
/turf/open/floor/plating,
/area/maintenance/solars/port/aft)
"krr" = (
@@ -71175,18 +71136,17 @@
/obj/machinery/door/firedoor{
dir = 8
},
-/obj/machinery/door/airlock/security/glass{
- dir = 8;
- id_tag = null;
- name = "Brig";
- req_access_txt = "63"
- },
/obj/structure/cable{
icon_state = "4-8"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
},
+/obj/machinery/door/airlock/security{
+ dir = 8;
+ name = "Security Checkpoint";
+ req_access_txt = "1"
+ },
/turf/open/floor/plasteel{
dir = 8;
icon_plating = "floor";
@@ -71521,10 +71481,6 @@
},
/turf/open/floor/wood,
/area/command/heads_quarters/hos)
-"kzk" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/ai_monitored/turret_protected/aisat/hallway)
"kzs" = (
/obj/machinery/light{
dir = 8;
@@ -71549,13 +71505,12 @@
/turf/open/floor/plasteel/dark,
/area/hallway/primary/port/fore)
"kzN" = (
-/obj/machinery/computer/operating{
- dir = 1
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{
dir = 8;
name = "air supply pipe"
},
+/obj/structure/table/optable,
+/obj/structure/table/optable,
/turf/open/floor/plasteel/freezer,
/area/medical/medbay/central)
"kzS" = (
@@ -71812,6 +71767,9 @@
/obj/structure/cable/yellow{
icon_state = "2-4"
},
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
/turf/open/floor/plasteel/dark,
/area/engineering/main)
"kBa" = (
@@ -72771,13 +72729,6 @@
icon_state = "whitehall_plate"
},
/area/hallway/primary/central)
-"kHL" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/tcommsat/server)
"kHO" = (
/turf/open/floor/plasteel/dark,
/area/maintenance/starboard)
@@ -72810,14 +72761,12 @@
/turf/open/floor/plasteel,
/area/hallway/secondary/exit)
"kHW" = (
-/obj/effect/spawner/structure/window,
-/obj/machinery/door/poddoor/shutters/preopen{
- dir = 8;
- id = "rnd2";
- name = "research lab shutters"
+/obj/structure/lattice/catwalk,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6
},
-/turf/open/floor/plating,
-/area/science/research)
+/turf/open/openspace,
+/area/space)
"kHY" = (
/obj/structure/window,
/obj/structure/window{
@@ -73133,10 +73082,6 @@
name = "parquet"
},
/area/medical/medbay/central)
-"kKC" = (
-/obj/structure/closet/crate/large,
-/turf/open/floor/plating,
-/area/maintenance/port/aft)
"kKD" = (
/obj/machinery/door/airlock/atmos/abandoned{
dir = 1;
@@ -74836,12 +74781,6 @@
/obj/machinery/door/firedoor{
dir = 8
},
-/obj/machinery/door/airlock/security/glass{
- dir = 8;
- id_tag = null;
- name = "Brig";
- req_access_txt = "63"
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{
dir = 8;
name = "air supply pipe"
@@ -74856,6 +74795,11 @@
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
},
+/obj/machinery/door/airlock/security{
+ dir = 4;
+ name = "Brig";
+ req_access_txt = "63; 42"
+ },
/turf/open/floor/plasteel{
dir = 8;
icon_plating = "floor";
@@ -75610,6 +75554,9 @@
/obj/machinery/door/firedoor{
dir = 8
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel,
/area/engineering/break_room)
"lfx" = (
@@ -76820,7 +76767,6 @@
/obj/effect/turf_decal/stripes/line{
dir = 9
},
-/obj/machinery/power/apc/auto_name/west,
/obj/effect/spawner/structure/window/plastitanium,
/obj/structure/cable{
icon_state = "0-4"
@@ -78424,6 +78370,7 @@
/obj/effect/turf_decal/tile/neutral{
color = "#ffffff"
},
+/obj/effect/turf_decal/vg_decals/department/sec,
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"lAR" = (
@@ -78911,6 +78858,15 @@
icon_state = "floor_trim"
},
/area/security/brig)
+"lEg" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/unpowered/no_grav)
"lEi" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{
name = "air supply pipe"
@@ -78951,6 +78907,14 @@
},
/turf/open/floor/plating,
/area/maintenance/port)
+"lEw" = (
+/obj/machinery/space_heater,
+/obj/effect/turf_decal/bot,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating,
+/area/engineering/main)
"lEC" = (
/obj/structure/cable{
icon_state = "0-8"
@@ -80691,13 +80655,14 @@
/turf/open/floor/plating,
/area/maintenance/fore)
"lRa" = (
-/obj/structure/fence,
-/obj/effect/turf_decal/stripes/end{
- dir = 1
+/obj/structure/chair{
+ dir = 4
},
-/obj/structure/fans/tiny/invisible,
-/turf/open/floor/plating,
-/area/ruin/unpowered/no_grav)
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/engineering/break_room)
"lRe" = (
/obj/effect/turf_decal/tile/blue{
dir = 9
@@ -80800,10 +80765,6 @@
},
/turf/open/floor/engine,
/area/science/mixing)
-"lRS" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/command/heads_quarters/cmo)
"lRT" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{
name = "air supply pipe"
@@ -81110,6 +81071,32 @@
},
/turf/open/floor/plasteel,
/area/engineering/break_room)
+"lTo" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
+ dir = 4;
+ name = "scrubbers pipe"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{
+ dir = 8;
+ name = "air supply pipe"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plasteel,
+/area/engineering/lobby)
"lTq" = (
/obj/structure/sink{
pixel_y = 30
@@ -82755,6 +82742,12 @@
name = "parquet"
},
/area/hallway/primary/port/fore)
+"meg" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating,
+/area/maintenance/solars/port/aft)
"mez" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/door/poddoor/preopen{
@@ -83099,6 +83092,7 @@
dir = 1
},
/obj/effect/turf_decal/stripes/line,
+/obj/structure/fence/door,
/turf/open/floor/plating/layeniaredder{
icon_state = "concrete2";
name = "concrete"
@@ -83354,6 +83348,9 @@
codes_txt = "patrol;next_patrol=Security";
location = "FP1"
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"mjc" = (
@@ -83582,11 +83579,6 @@
},
/turf/open/floor/carpet,
/area/commons/dorms)
-"mkv" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/open/floor/plating,
-/area/service/chapel/main)
"mkB" = (
/obj/effect/turf_decal/loading_area{
dir = 8;
@@ -84627,7 +84619,7 @@
"msl" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/public/glass{
- name = "Showers"
+ name = "Trash Room"
},
/turf/open/floor/plasteel,
/area/security/prison)
@@ -84863,6 +84855,9 @@
name = "ledge"
},
/obj/machinery/computer/gateway_control,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
/turf/open/floor/plasteel/dark,
/area/command/gateway)
"mtA" = (
@@ -87956,12 +87951,9 @@
/turf/open/floor/engine,
/area/engineering/main/reactor_core)
"mSR" = (
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/machinery/power/apc/auto_name/east,
-/turf/open/floor/plating,
-/area/maintenance/aft)
+/mob/living/simple_animal/pet/penguin/emperor/shamebrero,
+/turf/open/floor/grass/snow,
+/area/commons/fitness)
"mST" = (
/obj/structure/cable{
icon_state = "1-4"
@@ -88947,10 +88939,6 @@
dir = 8
},
/area/science)
-"mZq" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/hallway/primary/fore)
"mZD" = (
/obj/structure/fans/tiny,
/turf/open/floor/grass,
@@ -89711,6 +89699,12 @@
/obj/structure/railing/corner,
/turf/open/openspace,
/area/space)
+"nfT" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/engineering/main)
"nga" = (
/obj/structure/table/wood/fancy,
/obj/item/candle{
@@ -90043,6 +90037,7 @@
"niI" = (
/obj/effect/turf_decal/stripes/line,
/obj/effect/turf_decal/stripes/red/line,
+/obj/structure/fans/tiny/invisible,
/turf/open/floor/plasteel/dark,
/area/ruin/unpowered/no_grav)
"niY" = (
@@ -90211,7 +90206,6 @@
/obj/machinery/atmospherics/pipe/simple/general/hidden{
dir = 4
},
-/obj/structure/fans/tiny/invisible,
/turf/open/floor/plating,
/area/ruin/unpowered/no_grav)
"nkE" = (
@@ -90985,6 +90979,21 @@
icon_state = "floor_plate"
},
/area/hallway/primary/fore)
+"nqT" = (
+/obj/effect/turf_decal/tile/red{
+ dir = 5
+ },
+/obj/effect/turf_decal/loading_area{
+ dir = 4;
+ icon_state = "drain";
+ name = "drain"
+ },
+/obj/effect/turf_decal/vg_decals/department/sec,
+/turf/open/floor/plasteel{
+ dir = 4;
+ icon_state = "floor_plate"
+ },
+/area/hallway/primary/fore)
"nqW" = (
/obj/effect/turf_decal/tile/neutral{
color = "#ffffff"
@@ -91139,10 +91148,6 @@
dir = 1
},
/area/science)
-"nrT" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/cargo/qm/private)
"nrW" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -91752,6 +91757,8 @@
dir = 2;
pixel_x = -24
},
+/obj/machinery/suit_storage_unit/engine,
+/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel/dark,
/area/engineering/lobby)
"nwj" = (
@@ -92090,6 +92097,7 @@
/obj/effect/turf_decal/stripes/white/line{
dir = 8
},
+/obj/machinery/computer/operating,
/turf/open/floor/plasteel/freezer,
/area/medical/medbay/central)
"nyD" = (
@@ -93449,8 +93457,11 @@
/obj/effect/turf_decal/stripes/line{
dir = 1
},
-/obj/machinery/power/rad_collector,
/obj/effect/turf_decal/bot,
+/obj/machinery/power/smes/engineering,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
/turf/open/floor/plating,
/area/engineering/main)
"nHK" = (
@@ -95190,10 +95201,6 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
-"nWu" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/security/courtroom)
"nWD" = (
/obj/machinery/vending/coffee,
/obj/effect/turf_decal/loading_area{
@@ -95596,9 +95603,6 @@
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
"oah" = (
-/obj/effect/turf_decal/tile/yellow{
- dir = 5
- },
/obj/effect/turf_decal/loading_area{
dir = 4;
icon_state = "drain";
@@ -95608,6 +95612,9 @@
dir = 4;
pixel_x = 7
},
+/obj/effect/turf_decal/tile/red{
+ dir = 6
+ },
/turf/open/floor/plasteel{
dir = 4;
icon_state = "floor_plate"
@@ -95652,6 +95659,7 @@
icon_state = "drain";
name = "drain"
},
+/obj/machinery/iv_drip,
/turf/open/floor/plasteel/freezer,
/area/medical/medbay/central)
"oaq" = (
@@ -98103,10 +98111,6 @@
icon_state = "darkfull_whole_alt"
},
/area/maintenance/department/medical/morgue)
-"otT" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/hallway/secondary/exit)
"oua" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer3{
dir = 4;
@@ -100426,11 +100430,15 @@
/obj/effect/turf_decal/stripes/line{
dir = 8
},
-/obj/structure/railing/corner{
- dir = 4
+/obj/machinery/door/airlock/external{
+ name = "Disposal External Airlock"
+ },
+/obj/structure/fans/tiny,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
},
/turf/open/floor/plating,
-/area/space)
+/area/cargo/sorting)
"oLM" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 4;
@@ -100548,12 +100556,12 @@
/turf/open/floor/grass,
/area/security/prison)
"oMA" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "robotics2";
- name = "robotics lab shutters"
- },
/obj/effect/spawner/structure/window,
/obj/structure/disposalpipe/segment,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "robotics";
+ name = "robotics lab shutters"
+ },
/turf/open/floor/plating,
/area/science/robotics/lab)
"oMB" = (
@@ -100697,7 +100705,6 @@
/area/engineering/engine_smes)
"oNz" = (
/obj/machinery/power/tracker,
-/obj/effect/baseturf_helper/cloud,
/obj/structure/cable,
/turf/open/floor/plasteel/airless/solarpanel{
initial_gas_mix = "o2=22;n2=82;TEMP=180";
@@ -100727,10 +100734,6 @@
icon_state = "floor_plate"
},
/area/commons/dorms)
-"oNW" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/science/robotics/mechbay)
"oOd" = (
/obj/effect/turf_decal/loading_area{
dir = 1;
@@ -100978,9 +100981,8 @@
},
/area/security/prison)
"oPR" = (
-/obj/structure/closet/crate,
/turf/open/floor/plating,
-/area/maintenance/port/aft)
+/area/maintenance/solars/port/aft)
"oPW" = (
/obj/machinery/light{
dir = 1;
@@ -102345,6 +102347,10 @@
/obj/effect/turf_decal/stripes/line{
dir = 6
},
+/obj/machinery/power/apc/auto_name/south,
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
/turf/open/floor/plasteel,
/area/science)
"paG" = (
@@ -104273,10 +104279,6 @@
icon_state = "darkfull_plate"
},
/area/hallway/primary/fore)
-"pqp" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/construction/mining/aux_base)
"pqt" = (
/obj/structure/table,
/obj/effect/turf_decal/loading_area{
@@ -105109,7 +105111,6 @@
dir = 8
},
/obj/effect/spawner/structure/window,
-/obj/effect/baseturf_helper/asteroid/layenia,
/turf/open/floor/plating,
/area/medical/medbay/central)
"pxi" = (
@@ -105889,10 +105890,6 @@
name = "large"
},
/area/service/library)
-"pCV" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/maintenance/fore/secondary)
"pCX" = (
/obj/machinery/biogenerator,
/obj/effect/turf_decal/tile/neutral{
@@ -106541,6 +106538,18 @@
icon_state = "darkfull_plate"
},
/area/hallway/primary/fore)
+"pIV" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel{
+ dir = 1;
+ icon_state = "floor_plate"
+ },
+/area/engineering/main)
"pIW" = (
/obj/machinery/atmospherics/pipe/simple/purple/visible{
dir = 5
@@ -108964,10 +108973,6 @@
/obj/structure/railing,
/turf/open/floor/plating/snowed,
/area/ruin/unpowered/no_grav)
-"qcl" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/medical/medbay/central)
"qcm" = (
/obj/effect/turf_decal/tile/blue{
dir = 9
@@ -110236,20 +110241,6 @@
icon_state = "darkfull_whole_alt"
},
/area/service/barbershop)
-"qmI" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{
- name = "air supply pipe"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
- name = "scrubbers pipe"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/disposalpipe/segment,
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/open/floor/plating,
-/area/maintenance/fore/secondary)
"qmJ" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -111521,6 +111512,9 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"qxx" = (
@@ -112510,6 +112504,13 @@
},
/turf/closed/wall,
/area/cargo/office)
+"qDT" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
+ dir = 4;
+ name = "scrubbers pipe"
+ },
+/turf/open/floor/plating,
+/area/maintenance/solars/port/aft)
"qEa" = (
/obj/effect/turf_decal/tile/blue,
/obj/effect/turf_decal/tile/blue{
@@ -113220,8 +113221,13 @@
/obj/effect/turf_decal/stripes/line{
dir = 1
},
-/obj/machinery/power/rad_collector,
/obj/effect/turf_decal/bot,
+/obj/machinery/power/terminal{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ icon_state = "0-2"
+ },
/turf/open/floor/plating,
/area/engineering/main)
"qJo" = (
@@ -114276,6 +114282,7 @@
/obj/structure/window{
dir = 8
},
+/obj/machinery/gear_painter,
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
@@ -114470,7 +114477,7 @@
"qUu" = (
/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+ dir = 10
},
/turf/open/floor/engine/vacuum,
/area/engineering/teg)
@@ -117217,10 +117224,6 @@
},
/area/command/bridge)
"roX" = (
-/obj/machinery/mineral/ore_redemption{
- input_dir = 2;
- output_dir = 1
- },
/obj/machinery/door/firedoor,
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
@@ -117237,6 +117240,10 @@
/obj/machinery/door/poddoor/shutters/preopen{
id = "cargoshut1"
},
+/obj/machinery/mineral/ore_redemption{
+ input_dir = 2;
+ output_dir = 1
+ },
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
@@ -117309,6 +117316,9 @@
/area/hallway/primary/fore)
"rpp" = (
/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
@@ -118181,6 +118191,13 @@
},
/turf/open/floor/plasteel/white,
/area/science/research)
+"rvV" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/engineering/main)
"rwb" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -118369,11 +118386,11 @@
/area/security/brig)
"rxJ" = (
/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/door/firedoor,
/obj/machinery/door/poddoor/shutters/preopen{
id = "rnd2";
name = "research lab shutters"
},
-/obj/machinery/door/firedoor,
/turf/open/floor/plating,
/area/science/research)
"rxU" = (
@@ -118620,10 +118637,6 @@
icon_state = "darkfull_whole_alt"
},
/area/commons/fitness)
-"rzy" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/service/kitchen/coldroom)
"rzE" = (
/obj/structure/bodycontainer/morgue{
dir = 8
@@ -120075,7 +120088,6 @@
/area/commons/fitness)
"rJG" = (
/obj/machinery/power/tracker,
-/obj/effect/baseturf_helper/cloud,
/obj/structure/cable{
icon_state = "0-4"
},
@@ -120299,10 +120311,6 @@
},
/turf/open/floor/plasteel/dark,
/area/science)
-"rLm" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/service/library/artgallery)
"rLu" = (
/obj/structure/table,
/obj/machinery/cell_charger,
@@ -120878,7 +120886,6 @@
/obj/structure/bedsheetbin{
pixel_y = 4
},
-/obj/effect/baseturf_helper/asteroid/layenia,
/obj/effect/turf_decal/tile/blue{
dir = 9
},
@@ -120913,7 +120920,6 @@
/turf/open/floor/plasteel,
/area/security)
"rQy" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
/obj/effect/turf_decal/tile/brown{
dir = 10
},
@@ -121193,12 +121199,12 @@
},
/area/medical/medbay/central)
"rSi" = (
+/obj/effect/spawner/structure/window,
+/obj/structure/disposalpipe/segment,
/obj/machinery/door/poddoor/shutters/preopen{
id = "rnd2";
name = "research lab shutters"
},
-/obj/effect/spawner/structure/window,
-/obj/structure/disposalpipe/segment,
/turf/open/floor/plating,
/area/science/research)
"rSj" = (
@@ -121427,10 +121433,6 @@
name = "concrete"
},
/area/ruin/unpowered/no_grav)
-"rUn" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/maintenance/port/fore)
"rUz" = (
/obj/effect/spawner/lootdrop/maintenance,
/obj/effect/spawner/lootdrop/maintenance,
@@ -123829,10 +123831,6 @@
/obj/effect/turf_decal/stripes/corner,
/turf/open/floor/plasteel/dark,
/area/commons/dorms)
-"skL" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/security/processing)
"skN" = (
/obj/machinery/door/airlock/engineering/glass{
name = "Gas Storage";
@@ -124577,10 +124575,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
-"spz" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/engineering/main/reactor_core)
"spG" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/door/poddoor/shutters/preopen{
@@ -124765,10 +124759,6 @@
dir = 1
},
/area/maintenance/fore)
-"sqD" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/security/prison)
"sqL" = (
/obj/effect/turf_decal/tile/brown{
dir = 1
@@ -125544,12 +125534,6 @@
icon_state = "plaswhite_plate"
},
/area/medical/medbay/central)
-"swZ" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/open/floor/engine{
- name = "Holodeck Projector Floor"
- },
-/area/holodeck/rec_center)
"sxa" = (
/obj/structure/flora/ausbushes/fullgrass,
/obj/structure/flora/ausbushes/brflowers,
@@ -126184,7 +126168,7 @@
icon_state = "0-2"
},
/obj/structure/cable,
-/turf/open/space/basic,
+/turf/open/floor/plasteel/dark,
/area/hallway/primary/central)
"sDd" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{
@@ -128188,10 +128172,6 @@
icon_state = "floor_plate"
},
/area/security/prison)
-"sQZ" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/security/brig)
"sRd" = (
/obj/structure/flora/grass/jungle,
/obj/structure/flora/ausbushes/brflowers,
@@ -128889,7 +128869,13 @@
/area/security/office)
"sWP" = (
/obj/effect/turf_decal/bot,
-/obj/machinery/power/rad_collector,
+/obj/machinery/power/smes/engineering,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plating,
/area/engineering/main)
"sWV" = (
@@ -129669,7 +129655,6 @@
/obj/effect/turf_decal/stripes/line{
dir = 8
},
-/obj/effect/baseturf_helper/asteroid/layenia,
/obj/machinery/light{
dir = 8
},
@@ -131131,10 +131116,6 @@
},
/turf/open/floor/plasteel,
/area/engineering/teg)
-"tmh" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/maintenance/disposal/incinerator)
"tml" = (
/obj/effect/turf_decal/loading_area{
icon_state = "half_stairs_darkfull";
@@ -131365,6 +131346,7 @@
icon_state = "drain";
name = "drain"
},
+/obj/machinery/iv_drip,
/turf/open/floor/plasteel/freezer,
/area/medical/medbay/central)
"tns" = (
@@ -131538,6 +131520,13 @@
pixel_x = -30;
receive_ore_updates = 1
},
+/obj/machinery/button/door{
+ id = "rnd";
+ name = "Shutters Control Button";
+ pixel_x = 8;
+ pixel_y = -1;
+ req_access_txt = "47"
+ },
/turf/open/floor/plasteel/white,
/area/science/research)
"toK" = (
@@ -132614,6 +132603,9 @@
/obj/structure/cable{
icon_state = "1-2"
},
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
@@ -132703,15 +132695,12 @@
},
/area/medical/medbay/central)
"txl" = (
-/obj/machinery/button/door{
- id = "robotics2";
- name = "Shutters Control Button";
- pixel_x = 24;
- pixel_y = -24;
- req_access_txt = "29"
+/obj/structure/lattice/catwalk,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9
},
-/turf/open/floor/plasteel/white,
-/area/science/robotics/lab)
+/turf/open/openspace,
+/area/space)
"txm" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -132905,10 +132894,6 @@
},
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
-"tzp" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/maintenance/port/aft)
"tzv" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -134227,10 +134212,10 @@
/area/service/bar)
"tHV" = (
/obj/effect/turf_decal/bot,
-/obj/structure/closet/emcloset,
/obj/structure/railing{
dir = 1
},
+/obj/structure/closet/crate/solarpanel_small,
/turf/open/floor/plasteel/dark,
/area/ruin/unpowered/no_grav)
"tId" = (
@@ -134968,6 +134953,9 @@
/obj/structure/disposalpipe/segment{
dir = 9
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"tNo" = (
@@ -135950,14 +135938,14 @@
dir = 4;
pixel_x = 7
},
-/obj/effect/turf_decal/tile/yellow{
- dir = 5
- },
/obj/effect/turf_decal/loading_area{
dir = 4;
icon_state = "drain";
name = "drain"
},
+/obj/effect/turf_decal/tile/red{
+ dir = 6
+ },
/turf/open/floor/plasteel{
dir = 4;
icon_state = "floor_plate"
@@ -136156,9 +136144,8 @@
/area/commons/fitness)
"tWw" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/railing,
/obj/structure/railing{
- dir = 8
+ dir = 10
},
/turf/open/floor/plating,
/area/maintenance/fore)
@@ -137483,14 +137470,11 @@
/turf/open/floor/plating/layeniaredder,
/area/ruin/unpowered/no_grav)
"ugx" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- dir = 8;
- id = "rnd2";
- name = "research lab shutters"
- },
-/obj/effect/spawner/structure/window,
-/turf/open/floor/plating,
-/area/science/research)
+/obj/structure/lattice,
+/obj/structure/lattice/catwalk,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/openspace,
+/area/space)
"ugE" = (
/obj/machinery/telecomms/server/presets/supply,
/turf/open/floor/circuit/telecomms/mainframe,
@@ -138920,15 +138904,19 @@
/turf/open/floor/plasteel,
/area/security/checkpoint)
"usD" = (
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/obj/effect/turf_decal/stripes/line{
dir = 4
},
-/obj/structure/cable{
- icon_state = "4-8"
- },
+/obj/machinery/power/apc/auto_name/north,
/turf/open/floor/plasteel/dark/telecomms,
/area/tcommsat/server)
"usI" = (
@@ -139571,7 +139559,6 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/baseturf_helper/asteroid/layenia,
/turf/open/floor/plasteel{
dir = 8;
icon_plating = "floor";
@@ -141132,10 +141119,6 @@
icon_state = "floor_plate"
},
/area/hallway/primary/fore)
-"uLN" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/service/bar)
"uMa" = (
/obj/machinery/door/airlock/mining{
name = "Quartermaster";
@@ -141822,6 +141805,9 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"uRX" = (
@@ -142098,18 +142084,21 @@
/turf/closed/wall/r_wall,
/area/maintenance/department/electrical)
"uUv" = (
-/obj/structure/disposalpipe/segment,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 4
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{
+ name = "air supply pipe"
},
-/obj/structure/railing/corner{
- dir = 1
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
+ name = "scrubbers pipe"
+ },
+/obj/machinery/light{
+ dir = 4;
+ pixel_x = 7
},
/turf/open/floor/plating,
-/area/space)
+/area/cargo/sorting)
"uUF" = (
/obj/machinery/atmospherics/pipe/simple/yellow/visible/layer1{
dir = 4
@@ -142681,7 +142670,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
name = "scrubbers pipe"
},
-/obj/effect/baseturf_helper/asteroid/layenia,
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
@@ -143206,7 +143194,7 @@
/area/service/kitchen)
"vco" = (
/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/obj/machinery/atmospherics/components/binary/pump{
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
dir = 4
},
/turf/open/floor/plasteel,
@@ -143323,12 +143311,6 @@
icon_state = "floor_plate"
},
/area/engineering/atmos)
-"vdq" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/effect/baseturf_helper/asteroid/layenia,
-/obj/machinery/door/firedoor,
-/turf/open/floor/plating,
-/area/hallway/secondary/exit)
"vdy" = (
/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/obj/effect/turf_decal/tile/yellow{
@@ -143690,10 +143672,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
-"vgP" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/open/space/basic,
-/area/space)
"vgU" = (
/obj/effect/turf_decal/stripes/line{
dir = 5
@@ -143825,6 +143803,20 @@
icon_state = "floor_plate"
},
/area/hallway/primary/fore)
+"vhJ" = (
+/obj/effect/turf_decal/loading_area{
+ dir = 4;
+ icon_state = "drain";
+ name = "drain"
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 5
+ },
+/turf/open/floor/plasteel{
+ dir = 4;
+ icon_state = "floor_plate"
+ },
+/area/hallway/primary/fore)
"vhT" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -144182,6 +144174,9 @@
icon_state = "drain_corner";
name = "drain"
},
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"vku" = (
@@ -144364,6 +144359,20 @@
icon_state = "floor_plate"
},
/area/security/brig)
+"vlr" = (
+/obj/effect/turf_decal/loading_area{
+ dir = 4;
+ icon_state = "drain";
+ name = "drain"
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 6
+ },
+/turf/open/floor/plasteel{
+ dir = 4;
+ icon_state = "floor_plate"
+ },
+/area/hallway/primary/fore)
"vlt" = (
/obj/effect/turf_decal/loading_area{
dir = 6;
@@ -144440,6 +144449,14 @@
name = "tile"
},
/area/construction)
+"vlO" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/door/firedoor,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/engineering/main)
"vlR" = (
/obj/structure/table,
/obj/item/dildo/flared{
@@ -146040,6 +146057,16 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel/dark,
/area/command/bridge)
+"vxT" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer3{
+ dir = 1;
+ name = "air vent"
+ },
+/turf/open/floor/plating,
+/area/maintenance/solars/port/aft)
"vxV" = (
/obj/machinery/door/airlock/public/glass{
dir = 1;
@@ -146419,7 +146446,6 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/effect/baseturf_helper/asteroid/layenia,
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
},
@@ -147188,6 +147214,11 @@
/obj/machinery/camera/autoname{
dir = 1
},
+/obj/machinery/requests_console{
+ department = "Security";
+ departmentType = 5;
+ pixel_y = -29
+ },
/turf/open/floor/plasteel{
dir = 8;
icon_plating = "floor";
@@ -147532,6 +147563,20 @@
name = "concrete"
},
/area/ruin/unpowered/no_grav)
+"vHL" = (
+/obj/effect/turf_decal/loading_area{
+ dir = 4;
+ icon_state = "drain";
+ name = "drain"
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 6
+ },
+/turf/open/floor/plasteel{
+ dir = 4;
+ icon_state = "floor_trim"
+ },
+/area/hallway/primary/fore)
"vHO" = (
/obj/effect/turf_decal/tile/red{
dir = 6
@@ -147923,11 +147968,9 @@
/turf/open/floor/plasteel/dark,
/area/security/brig)
"vJS" = (
-/obj/structure/railing{
- dir = 4
- },
+/obj/structure/ladder,
/turf/open/floor/plating,
-/area/maintenance/port/aft)
+/area/maintenance/solars/port/aft)
"vJU" = (
/obj/structure/chair{
dir = 8
@@ -148685,10 +148728,6 @@
"vOM" = (
/turf/open/floor/plasteel/freezer,
/area/service/kitchen/coldroom)
-"vPn" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/medical/morgue)
"vPq" = (
/obj/machinery/atmospherics/pipe/simple/cyan/visible{
dir = 10
@@ -149490,10 +149529,6 @@
},
/turf/open/floor/plating,
/area/maintenance/fore)
-"vUV" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/science/research)
"vUY" = (
/obj/structure/closet/crate/coffin,
/obj/machinery/light/small{
@@ -149778,12 +149813,12 @@
req_one_access_txt = "7;29"
},
/obj/machinery/door/firedoor,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "rnd2";
+ name = "research lab shutters"
+ },
/turf/open/floor/plating,
/area/science/research)
-"vXh" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/commons/fitness)
"vXk" = (
/obj/structure/window/reinforced{
dir = 1
@@ -152334,6 +152369,9 @@
/obj/machinery/holopad,
/obj/effect/landmark/start/station_engineer,
/obj/effect/turf_decal/box,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
/turf/open/floor/plasteel,
/area/engineering/break_room)
"woR" = (
@@ -152961,10 +152999,6 @@
"wsU" = (
/turf/closed/wall/r_wall,
/area/maintenance/starboard)
-"wsV" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/hallway/secondary/service)
"wtl" = (
/obj/structure/table/glass,
/obj/item/storage/box/disks{
@@ -154418,7 +154452,6 @@
},
/area/science/xenobiology)
"wEb" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
@@ -154666,10 +154699,6 @@
icon_state = "floor_whole_alt"
},
/area/cargo/office)
-"wFJ" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/maintenance/port/aft)
"wFM" = (
/obj/machinery/door/window/brigdoor/security/cell{
id = "Cell 2";
@@ -155226,10 +155255,6 @@
icon_state = "plaswhite_traction"
},
/area/commons/toilet)
-"wJs" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/commons/dorms)
"wJu" = (
/obj/structure/lattice/catwalk,
/obj/structure/railing{
@@ -155615,11 +155640,11 @@
/turf/closed/wall/r_wall,
/area/science/explab)
"wMq" = (
+/obj/effect/spawner/structure/window,
/obj/machinery/door/poddoor/shutters/preopen{
id = "rnd2";
name = "research lab shutters"
},
-/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
/area/science/research)
"wMx" = (
@@ -155652,10 +155677,6 @@
},
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
-"wMX" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/service/chapel/office)
"wNb" = (
/obj/machinery/atmospherics/components/binary/pump{
name = "Mix to Port"
@@ -156755,11 +156776,15 @@
/turf/closed/wall,
/area/commons/storage/auxiliary)
"wUx" = (
-/obj/structure/fence,
-/obj/effect/turf_decal/stripes/end,
-/obj/structure/fans/tiny/invisible,
-/turf/open/floor/plating,
-/area/ruin/unpowered/no_grav)
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/yellow,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/fore)
"wUA" = (
/obj/machinery/light{
dir = 4;
@@ -159505,8 +159530,16 @@
},
/area/science)
"xqk" = (
-/obj/machinery/power/rad_collector,
/obj/effect/turf_decal/bot,
+/obj/machinery/power/terminal{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "0-2"
+ },
/turf/open/floor/plating,
/area/engineering/main)
"xql" = (
@@ -161200,10 +161233,6 @@
/obj/effect/landmark/navigate_destination/dockarrival,
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
-"xBJ" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/maintenance/starboard)
"xBL" = (
/obj/machinery/atmospherics/pipe/simple/cyan/visible/layer3{
dir = 4;
@@ -161538,10 +161567,6 @@
name = "tile"
},
/area/command/heads_quarters/hop)
-"xFb" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall,
-/area/commons/arcade)
"xFf" = (
/obj/effect/turf_decal/loading_area{
dir = 8;
@@ -161846,10 +161871,6 @@
icon_state = "floor_trim"
},
/area/service/theater)
-"xHD" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/service/hydroponics/garden)
"xHH" = (
/obj/effect/turf_decal/tile/red{
dir = 4
@@ -161870,10 +161891,6 @@
dir = 8
},
/area/hallway/primary/central)
-"xIb" = (
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/closed/wall/r_wall,
-/area/security/checkpoint/supply)
"xIe" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{
name = "air supply pipe"
@@ -162146,6 +162163,10 @@
},
/turf/open/floor/plasteel,
/area/cargo/sorting)
+"xKh" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/closed/wall/mineral/lead,
+/area/engineering/teg)
"xKt" = (
/obj/effect/turf_decal/tile/neutral{
dir = 4
@@ -162370,24 +162391,6 @@
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
-"xLx" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{
- dir = 8;
- name = "air supply pipe"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
- dir = 4;
- name = "scrubbers pipe"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/open/floor/plating,
-/area/maintenance/port)
"xLB" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -162520,7 +162523,7 @@
/obj/effect/turf_decal/stripes/end{
dir = 4
},
-/obj/structure/fence/end{
+/obj/structure/fence{
dir = 4
},
/turf/open/floor/plating/layeniaredder{
@@ -164607,12 +164610,6 @@
},
/turf/open/floor/plasteel/showroomfloor,
/area/security/prison)
-"ybl" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/door/firedoor,
-/obj/effect/baseturf_helper/asteroid/layenia,
-/turf/open/floor/plating,
-/area/medical/medbay/central)
"ybn" = (
/obj/effect/turf_decal/loading_area{
dir = 8;
@@ -164672,7 +164669,7 @@
/obj/structure/cable{
icon_state = "0-4"
},
-/turf/open/space/basic,
+/turf/open/floor/plasteel/dark,
/area/command/bridge)
"ybT" = (
/turf/open/floor/plating/layeniaredder{
@@ -164713,14 +164710,10 @@
},
/area/security/prison)
"ycm" = (
-/obj/effect/spawner/structure/window,
-/obj/machinery/door/poddoor/shutters/preopen{
- dir = 8;
- id = "robotics2";
- name = "robotics lab shutters"
- },
-/turf/open/floor/plating,
-/area/science/robotics/lab)
+/obj/structure/fans/tiny/invisible,
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
+/area/space)
"ycs" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -164797,12 +164790,12 @@
/turf/open/floor/plasteel/dark,
/area/maintenance/starboard)
"ycU" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/autolathe,
/obj/machinery/door/poddoor/shutters/preopen{
id = "rnd2";
name = "research lab shutters"
},
-/obj/machinery/door/firedoor,
-/obj/machinery/autolathe,
/turf/open/floor/plating,
/area/science/research)
"ycV" = (
@@ -165071,7 +165064,7 @@
"yep" = (
/obj/structure/grille,
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "0-4"
},
/turf/open/floor/plating,
/area/maintenance/starboard)
@@ -165129,9 +165122,7 @@
/area/maintenance/fore)
"yey" = (
/obj/machinery/door/airlock/security{
- dir = 1;
- name = "Alternative Punishment";
- req_access_txt = "63; 42"
+ name = "Court Backroom"
},
/turf/open/floor/plasteel/dark{
icon_state = "darkfull_whole_alt"
@@ -165800,7 +165791,6 @@
/area/hallway/primary/fore)
"yjw" = (
/obj/machinery/power/tracker,
-/obj/effect/baseturf_helper/cloud,
/obj/structure/cable{
icon_state = "0-4"
},
@@ -166211,7 +166201,7 @@
/area/security/prison)
(1,1,1) = {"
-exW
+boa
boa
boa
boa
@@ -166468,7 +166458,7 @@ boa
boa
"}
(2,1,1) = {"
-vgP
+boa
boa
boa
boa
@@ -180459,7 +180449,7 @@ oDp
vNH
ouM
qEf
-swZ
+foF
foF
foF
foF
@@ -183018,11 +183008,11 @@ mMs
boa
boa
boa
-cSk
+mMs
fts
fts
fts
-cSk
+mMs
spG
spG
spG
@@ -183274,7 +183264,7 @@ gFR
mMs
boa
boa
-vgP
+boa
mMs
wFu
iLv
@@ -183810,7 +183800,7 @@ aOc
aOc
aOc
aOc
-htv
+aOc
aOc
aOc
aOc
@@ -184042,7 +184032,7 @@ gFR
yiq
jgK
mMs
-cSk
+mMs
xmq
xmq
xmq
@@ -184055,7 +184045,7 @@ dAz
vpf
dAz
dAz
-vXh
+vfW
vfW
vfW
vfW
@@ -184064,12 +184054,12 @@ rpM
vGs
vfW
aOc
-wal
-xuJ
-aOc
+kpZ
+dlP
+jUm
+jUm
+jUm
jUm
-aOc
-wal
aKX
aKX
aKX
@@ -184321,12 +184311,12 @@ xUs
xii
xZr
gYN
-wal
-hjQ
-aOc
+kpZ
+bLY
hmI
-aOc
-wal
+hmI
+jUm
+jUm
aKX
pmb
pmb
@@ -184578,12 +184568,12 @@ iKk
ouM
aUq
gYN
-hjQ
-hjQ
-hjQ
-wal
-wal
-wal
+kpZ
+kpZ
+mSR
+kpZ
+jUm
+jUm
aKX
pmb
pmb
@@ -184835,12 +184825,12 @@ dTW
ouM
aUq
gYN
-hjQ
-hjQ
-wal
-wal
-wal
-wal
+kpZ
+bLY
+bLY
+bLY
+kpZ
+jUm
aKX
pmb
rja
@@ -185092,12 +185082,12 @@ dnk
fFa
aUq
aOc
-wal
-wal
-wal
-wal
-wal
-wal
+kpZ
+kpZ
+kpZ
+kpZ
+kpZ
+kpZ
aKX
pmb
rja
@@ -185616,7 +185606,7 @@ gqx
pmb
rja
pmb
-pqp
+fsC
fsC
fsC
fsC
@@ -185844,12 +185834,12 @@ gyt
mMs
bPO
xUG
-wJs
+dAz
dAz
oBk
dAz
dAz
-wJs
+dAz
dAz
jEX
dAz
@@ -185909,7 +185899,7 @@ xda
wfk
gyt
jjd
-wFJ
+lmO
vXp
vXp
lmO
@@ -186572,7 +186562,7 @@ boa
wPn
hjQ
upU
-hvT
+qrb
qCH
qCH
iPg
@@ -186851,7 +186841,7 @@ hjQ
wal
wal
hjQ
-aMP
+hcr
hcr
vdf
iIB
@@ -187659,7 +187649,7 @@ tnh
pbz
pgJ
rja
-jrl
+iEG
pmb
xjR
pmb
@@ -188415,11 +188405,11 @@ xAL
bPO
xUG
nOd
-wJs
+dAz
oly
qtc
wZW
-wJs
+dAz
bTI
qez
wZW
@@ -188430,7 +188420,7 @@ xTQ
lZk
rja
uEs
-dhV
+rja
rja
rja
rja
@@ -189235,7 +189225,7 @@ fsC
nqv
aKX
aKX
-xIb
+lAF
lAF
umm
umm
@@ -189735,7 +189725,7 @@ wTI
wTI
rzi
rja
-xLx
+wSC
pmb
pmb
lpY
@@ -189781,7 +189771,7 @@ hjQ
oON
qQE
sCT
-sBx
+wfk
gyt
boa
boa
@@ -190244,7 +190234,7 @@ qSE
jSz
yjY
aDe
-heR
+wWi
wWi
wWi
wWi
@@ -190252,7 +190242,7 @@ wWi
iLO
wWi
nEP
-bEz
+wwW
wwW
wwW
wwW
@@ -190461,7 +190451,7 @@ hjQ
mnw
boa
boa
-rUn
+fYt
pBQ
dIM
pBQ
@@ -190702,7 +190692,7 @@ mnw
mnw
mnw
mnw
-nWu
+kri
kri
kri
kri
@@ -191204,7 +191194,7 @@ orJ
mnw
mnw
mnw
-iLa
+bZn
bZn
bZn
bZn
@@ -192314,7 +192304,7 @@ rja
wka
pmb
cEw
-nrT
+fGc
fGc
fGc
fGc
@@ -192558,7 +192548,7 @@ wUe
ahM
mlq
wiB
-xFb
+iHi
iHi
iHi
iHi
@@ -192611,25 +192601,25 @@ upU
uoy
vdB
hjQ
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
+gyt
+gyt
+gyt
+gyt
+gyt
+gyt
+gyt
+gyt
+gyt
+gyt
+gyt
+gyt
+gyt
+gyt
+gyt
+gyt
+gyt
+gyt
+gyt
boa
boa
boa
@@ -192738,7 +192728,7 @@ boa
boa
boa
mnw
-sQZ
+cJi
cJi
cJi
cJi
@@ -192767,7 +192757,7 @@ dDr
msb
tqZ
sAK
-nWu
+kri
boa
boa
boa
@@ -192868,25 +192858,25 @@ upU
uoy
vdB
hjQ
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
+gyt
+gNa
+oHF
+oHF
+oHF
+oHF
+oHF
+oHF
+oHF
+oHF
+oHF
+oHF
+oHF
+oHF
+oHF
+oHF
+oHF
+vSC
+gyt
boa
boa
boa
@@ -193125,25 +193115,25 @@ upU
uoy
vdB
hjQ
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
+gyt
+qie
+oTa
+soa
+kKo
+xda
+oTa
+soa
+kKo
+xda
+oTa
+soa
+kKo
+xda
+oTa
+soa
+kKo
+wfk
+gyt
boa
boa
boa
@@ -193382,27 +193372,27 @@ upU
uoy
vdB
hjQ
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
+gyt
+qie
+oTa
+aKY
+kKo
+xda
+oTa
+aKY
+kKo
+xda
+oTa
+aKY
+kKo
+xda
+oTa
+aKY
+kKo
+wfk
+gyt
+gyt
+tmn
boa
boa
boa
@@ -193540,7 +193530,7 @@ jQX
jsw
kri
hWs
-mkv
+rwb
rwb
rwb
hWs
@@ -193559,7 +193549,7 @@ peW
gyu
ciI
gkU
-dsA
+mqU
mqU
mqU
mqU
@@ -193567,7 +193557,7 @@ mqU
mqU
mqU
dyO
-uLN
+dyO
dyO
dyO
dyO
@@ -193639,25 +193629,25 @@ upU
uoy
vdB
hjQ
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
+gyt
+qie
+oTa
+aKY
+kKo
+xda
+oTa
+aKY
+kKo
+xda
+oTa
+aKY
+kKo
+xda
+oTa
+aKY
+kKo
+wfk
+gyt
boa
boa
boa
@@ -193883,12 +193873,12 @@ dan
dan
dan
lmO
-lmO
-lmO
-lmO
-lmO
-lmO
-aiA
+eaj
+eaj
+eaj
+eaj
+eaj
+hjQ
hjQ
hjQ
hjQ
@@ -193896,25 +193886,25 @@ upU
uoy
vdB
boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
+gyt
+qie
+oTa
+aKY
+kKo
+xda
+oTa
+aKY
+kKo
+xda
+oTa
+aKY
+kKo
+xda
+oTa
+aKY
+kKo
+wfk
+gyt
boa
boa
boa
@@ -194017,7 +194007,7 @@ boa
boa
boa
boa
-iHU
+bzi
bzi
bzi
bzi
@@ -194140,40 +194130,40 @@ lbF
lbF
lbF
nSj
-lmO
-kKC
-dGo
-dGo
-lmO
+eaj
+fLF
+bfC
+oPR
+eaj
hjQ
hjQ
hjQ
hjQ
upU
uoy
+vdB
+gyt
+gyt
+qie
+oTa
+aKY
+kKo
+xda
+oTa
+aKY
+kKo
+xda
+oTa
+aKY
+kKo
+xda
+oTa
+aKY
+kKo
+wfk
+gyt
+gyt
gyt
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
boa
boa
boa
@@ -194397,17 +194387,39 @@ iVX
iVX
iVX
qPU
-hZs
-vJS
-cIM
-dGo
-dan
-hjQ
-hjQ
-hjQ
-hjQ
+fkv
+qDT
+oPR
+iwf
+tnQ
+tnQ
+tnQ
upU
-wfk
+upU
+upU
+hZs
+oHF
+oHF
+oHF
+mcr
+xda
+sgE
+xda
+xda
+xda
+sgE
+xda
+xda
+xda
+sgE
+xda
+xda
+xda
+sgE
+xda
+kZm
+oHF
+otB
gyt
boa
boa
@@ -194457,28 +194469,6 @@ boa
boa
boa
boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
"}
(111,1,1) = {"
boa
@@ -194643,7 +194633,7 @@ efX
bzQ
bzQ
ojv
-aAH
+iVX
iVX
taL
iVX
@@ -194654,42 +194644,42 @@ cMS
fxO
iVX
nOj
-eQR
-mfF
-dGo
-dGo
-dan
-hjQ
-hjQ
-hjQ
-hjQ
-upU
+tqf
+cJg
+jrz
+vxT
+joG
+daJ
+fVJ
+cIM
+qTV
+qTV
+qTV
+pXf
+pXf
+pXf
+pXf
+fEI
+nAq
+gqo
+gqo
+gqo
+nAq
+gqo
+gqo
+gqo
+nAq
+gqo
+gqo
+gqo
+nAq
+fal
+pXf
+oNz
wfk
gyt
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
+gyt
+tmn
boa
boa
boa
@@ -194799,7 +194789,7 @@ xYp
pCw
xeo
iOV
-iHU
+bzi
sGh
ajg
ajg
@@ -194911,17 +194901,39 @@ pdz
iHV
iVX
qPU
-lmO
+eaj
isQ
-dGo
-uKo
-dan
-hjQ
-hjQ
-hjQ
-hjQ
+iuu
+vJS
+tnQ
+tnQ
+tnQ
upU
-wfk
+upU
+upU
+rph
+cmh
+cmh
+cmh
+eLT
+hUF
+oDt
+xda
+xda
+xda
+oDt
+xda
+xda
+xda
+oDt
+xda
+xda
+xda
+oDt
+xda
+fdg
+cmh
+cRt
gyt
boa
boa
@@ -194971,28 +194983,6 @@ boa
boa
boa
boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
"}
(113,1,1) = {"
boa
@@ -195102,7 +195092,7 @@ uBn
cro
iDe
pzF
-wsV
+wSR
oOA
inF
jzn
@@ -195168,40 +195158,40 @@ pdz
iHV
iVX
qPU
-lmO
+eaj
+gKb
+meg
oPR
-dGo
-dGo
-lmO
+eaj
atS
atS
atS
xzv
upU
+uoy
+gyt
+gyt
+gyt
+qie
+oTa
+hYz
+kKo
+xda
+oTa
+hYz
+kKo
+xda
+oTa
+hYz
+kKo
+xda
+oTa
+hYz
+kKo
wfk
gyt
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
+gyt
+gyt
boa
boa
boa
@@ -195338,7 +195328,7 @@ oiU
pcU
fZK
iDe
-wMX
+iYS
iYS
tfH
tfH
@@ -195425,38 +195415,38 @@ anI
duB
iVX
qPU
-lmO
-dan
-dan
-dan
-lmO
-hIV
-lsP
-xCN
+eaj
+tnQ
+tnQ
+tnQ
+eaj
+hjQ
+hjQ
+hjQ
wPn
upU
wfk
gyt
boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
+gyt
+qie
+oTa
+hYz
+kKo
+xda
+oTa
+hYz
+kKo
+xda
+oTa
+hYz
+kKo
+xda
+oTa
+hYz
+kKo
+wfk
+gyt
boa
boa
boa
@@ -195559,7 +195549,7 @@ boa
boa
boa
boa
-iHU
+bzi
bzi
bzi
bzi
@@ -195621,7 +195611,7 @@ vpb
iew
ygj
vuE
-rzy
+khU
khU
khU
khU
@@ -195691,29 +195681,29 @@ rUe
rUe
gRx
wPn
-xda
-wfk
+eQR
+hIV
gyt
boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
+gyt
+qie
+oTa
+hYz
+kKo
+xda
+oTa
+hYz
+kKo
+xda
+oTa
+hYz
+kKo
+xda
+oTa
+hYz
+kKo
+wfk
+gyt
boa
boa
boa
@@ -195899,7 +195889,7 @@ gZn
wFn
mwd
wiB
-rLm
+xCw
xCw
xCw
xCw
@@ -195952,27 +195942,27 @@ xda
wfk
gyt
boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
+gyt
+qie
+oTa
+hYz
+kKo
+xda
+oTa
+hYz
+kKo
+xda
+oTa
+hYz
+kKo
+xda
+oTa
+hYz
+kKo
+wfk
+gyt
+gyt
+tmn
boa
boa
boa
@@ -196209,25 +196199,25 @@ xda
wfk
gyt
boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
+gyt
+qie
+oTa
+rjB
+kKo
+xda
+oTa
+rjB
+kKo
+xda
+oTa
+rjB
+kKo
+xda
+oTa
+rjB
+kKo
+wfk
+gyt
boa
boa
boa
@@ -196466,25 +196456,25 @@ xda
wfk
gyt
boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
-boa
+gyt
+cNU
+cmh
+cmh
+cmh
+cmh
+cmh
+cmh
+cmh
+cmh
+cmh
+cmh
+cmh
+cmh
+cmh
+cmh
+cmh
+cZM
+gyt
boa
boa
boa
@@ -196906,7 +196896,7 @@ dYt
gGn
wQd
aGM
-jPl
+uMm
tZY
uBu
xvQ
@@ -197133,7 +197123,7 @@ epI
dAm
fbc
nGb
-mZq
+rDc
kDq
aYt
dbn
@@ -197202,7 +197192,7 @@ eWP
wfW
xCw
iPp
-tzp
+giP
mdz
ntb
iMu
@@ -197463,7 +197453,7 @@ giP
cpw
vFo
wir
-hap
+nqk
nqk
nqk
kbc
@@ -197652,7 +197642,7 @@ pcU
mqK
lzW
vxq
-qmI
+oab
oab
oab
oab
@@ -197908,7 +197898,7 @@ cfe
pcU
maL
jrS
-pCV
+tKP
tKP
tKP
tKP
@@ -198430,7 +198420,7 @@ tKP
tKP
txX
weI
-jKM
+odf
odf
odf
odf
@@ -198529,7 +198519,7 @@ gyt
gyt
gyt
uiC
-fDn
+kOL
kOL
kOL
kOL
@@ -198766,7 +198756,7 @@ vfx
tCF
vfx
net
-vPn
+net
pEB
net
net
@@ -198780,7 +198770,7 @@ deQ
mmr
deQ
dOG
-uUv
+iHD
iHD
dOG
dOG
@@ -198903,7 +198893,7 @@ boa
boa
boa
boa
-sqD
+fvU
dti
jqY
eam
@@ -199036,13 +199026,13 @@ xMN
otR
nwa
eho
+uUv
exZ
exZ
exZ
exZ
exZ
-exZ
-exZ
+uUv
xVN
uwH
mTP
@@ -199295,11 +199285,11 @@ cYO
deQ
dPH
oLK
-dlP
-dPH
-dPH
-dPH
oLK
+dPH
+dPH
+dPH
+dPH
hNB
xSw
tMI
@@ -199519,7 +199509,7 @@ uDQ
qok
snR
phG
-qcl
+vfx
swW
bQs
bQs
@@ -200221,7 +200211,7 @@ fvU
lAg
fUF
tJh
-qZr
+gBS
dnd
rTO
qZr
@@ -200307,7 +200297,7 @@ oMG
bLj
jYp
hJI
-ybl
+bTW
cCU
rzh
cRY
@@ -200735,7 +200725,7 @@ fvU
xjC
vFR
pCo
-tuf
+nqT
tuf
lLf
tuf
@@ -200746,9 +200736,9 @@ tuf
tuf
tuf
kTx
+vhJ
kBG
-kBG
-kBG
+vhJ
kBG
qAy
kBG
@@ -200758,7 +200748,7 @@ vko
kBG
eZu
kBG
-kBG
+vlr
kBG
oah
cWK
@@ -200766,7 +200756,7 @@ guz
mjh
tUA
oRr
-oRr
+vHL
btA
eTs
mVo
@@ -200989,7 +200979,7 @@ hrz
lSh
trA
fvU
-mZq
+rDc
rDc
rDc
rDc
@@ -201020,7 +201010,7 @@ uSr
uSr
uSr
vzP
-itS
+wUs
wUs
lmF
lmF
@@ -201046,7 +201036,7 @@ fAy
fAy
fAy
heq
-oNW
+mMc
mMc
rgk
rgk
@@ -201252,7 +201242,7 @@ kji
kji
rNU
mdJ
-cVg
+rNU
rNU
rNU
rNU
@@ -202041,7 +202031,7 @@ vmU
tNj
gaF
qDw
-kzk
+hSZ
hSZ
hSZ
hSZ
@@ -202363,7 +202353,7 @@ lak
vfx
sol
sol
-qcl
+vfx
jEY
pqt
vuj
@@ -202552,7 +202542,7 @@ eaH
upF
uzs
aKw
-aKw
+wUx
aKw
jaq
hSZ
@@ -202843,7 +202833,7 @@ hjQ
hjQ
hjQ
hjQ
-oNW
+mMc
mMc
mMc
aib
@@ -203051,7 +203041,7 @@ vbF
vbF
vbF
vbF
-hAm
+jrU
jrU
rzN
jrU
@@ -203095,7 +203085,7 @@ pTW
dVo
ygw
mvb
-fjB
+muU
muU
muU
muU
@@ -203117,7 +203107,7 @@ lri
nxb
rrm
aHO
-hNx
+eWr
eWr
eWr
eWr
@@ -203322,7 +203312,7 @@ vxw
hef
oCV
aWJ
-tVj
+lRa
woP
tVj
fOj
@@ -203384,7 +203374,7 @@ iVE
ufN
soA
ghm
-qcl
+vfx
ppJ
etn
vfx
@@ -203591,7 +203581,7 @@ hSZ
tbo
nnm
bub
-xBJ
+nnm
nnm
nnm
nnm
@@ -204135,7 +204125,7 @@ eDi
kuj
kRj
pcr
-txl
+cni
cni
pAW
nmH
@@ -204327,7 +204317,7 @@ kji
rNU
kji
eBu
-bWd
+vbF
vbF
vbF
vbF
@@ -204391,7 +204381,7 @@ pFE
eDi
nuW
kRj
-ycm
+kht
geM
lri
lri
@@ -204605,7 +204595,7 @@ chw
gwb
dhm
uuM
-dXW
+xFZ
baL
baL
baL
@@ -204668,7 +204658,7 @@ ptO
upg
bjQ
jav
-lRS
+cyI
cyI
cyI
cyI
@@ -204933,7 +204923,7 @@ jwg
cyI
grA
pqE
-qcl
+vfx
vfx
vfx
hJy
@@ -205144,7 +205134,7 @@ mqU
mqU
mqU
mqU
-xBJ
+nnm
nnm
dXQ
cJd
@@ -205343,7 +205333,7 @@ bkp
aLN
fvU
cWR
-gxr
+nQT
qYi
oLI
rNU
@@ -205396,7 +205386,7 @@ lxK
dgd
gXk
ebF
-dsA
+mqU
qmm
mqU
iVj
@@ -205418,9 +205408,9 @@ bCt
tYU
nTq
tYU
-vUV
-ugx
-kHW
+xUf
+wMq
+wMq
dEq
bWa
bWa
@@ -205922,7 +205912,7 @@ lOI
udl
qyZ
eOs
-bbR
+bWa
dpP
fir
cAl
@@ -205962,8 +205952,8 @@ xuu
grA
pqE
bTW
-qqS
fyE
+qqS
kzN
klD
ioM
@@ -206143,7 +206133,7 @@ vzq
dnD
dyl
jqf
-lqZ
+hXA
hSs
jez
djZ
@@ -206400,7 +206390,7 @@ vru
vru
uyd
jqf
-lqZ
+hXA
hSs
jez
djZ
@@ -206453,7 +206443,7 @@ hlc
ewg
xdB
itH
-jTo
+dEq
wOm
uVy
dBi
@@ -206661,7 +206651,7 @@ lqZ
hSs
jez
djZ
-kHL
+xFZ
eqt
wNt
mFJ
@@ -206878,7 +206868,7 @@ fvU
fvU
fvU
fvU
-sqD
+fvU
fvU
fvU
fvU
@@ -207409,14 +207399,14 @@ xTk
nlY
gwr
ehx
-bWd
+vbF
vbF
una
una
una
vbF
vbF
-bWd
+vbF
vbF
akI
tBw
@@ -207632,7 +207622,7 @@ uxJ
uxJ
uxJ
uxJ
-dtX
+uxJ
cTA
rNU
kji
@@ -207757,7 +207747,7 @@ iZJ
vfx
eqg
lja
-qcl
+vfx
ceq
oHf
vfx
@@ -207977,7 +207967,7 @@ iLr
cOQ
dKg
jGP
-ehc
+hnz
hnz
hnz
hnz
@@ -208722,7 +208712,7 @@ pHi
pHi
pHi
pHi
-cgo
+wRn
kHh
kHh
kHh
@@ -209212,9 +209202,9 @@ hBZ
jFt
aIO
nHJ
-xqk
sWP
-fDt
+sWP
+lEw
fDt
hBZ
ujI
@@ -209471,22 +209461,22 @@ hBZ
qJn
xqk
xqk
-bbE
+caC
kAT
mRM
nPe
dzT
nSM
-vru
-vru
-xVZ
-xVZ
-vru
-phS
-jqf
-lqZ
-hSs
-jez
+nSM
+nSM
+rvV
+rvV
+nSM
+pIV
+vlO
+jmM
+jzo
+lTo
djZ
pHA
aAW
@@ -209728,7 +209718,7 @@ kAy
kAy
kAy
gDf
-bbE
+nfT
mfg
hBZ
oAs
@@ -210007,7 +209997,7 @@ hjQ
hjQ
hjQ
hjQ
-cgo
+wRn
ggg
llN
qta
@@ -210291,7 +210281,7 @@ pzO
rNK
aHO
hnz
-bEs
+ppI
ppI
ppI
ppI
@@ -210301,7 +210291,7 @@ ppI
son
hxS
tIF
-jad
+tIF
pYJ
pYJ
pYJ
@@ -210318,7 +210308,7 @@ nZP
vLr
bWa
bWa
-izp
+owC
owC
owC
hsm
@@ -210973,7 +210963,7 @@ qpL
qpL
qpL
jDN
-tmh
+uJI
uJI
uJI
nlK
@@ -211558,7 +211548,7 @@ wsU
hmO
wsU
wsU
-xHD
+qQu
uMm
uMm
uMm
@@ -211576,7 +211566,7 @@ cOQ
oYG
vHO
ffd
-bMk
+xvR
kMC
bOt
bOt
@@ -211789,7 +211779,7 @@ wal
hjQ
wal
wal
-dDZ
+gWi
luB
luB
luB
@@ -211860,7 +211850,7 @@ rqY
rMQ
bWa
bWa
-izp
+owC
owC
owC
owC
@@ -212525,7 +212515,7 @@ wJQ
wgT
nlK
wGW
-bhP
+dfs
unA
vtO
vtO
@@ -212821,7 +212811,7 @@ uTU
teF
sto
uTU
-gVG
+gEp
kQF
bOQ
bOQ
@@ -213618,7 +213608,7 @@ gyt
gyt
gyt
gyt
-vdq
+xWp
okY
xzc
keF
@@ -214152,7 +214142,7 @@ ozv
uGR
uPM
ufr
-bbR
+bWa
bwZ
nkj
sbX
@@ -214921,7 +214911,7 @@ fYs
uYu
dAg
ssp
-gBl
+kEz
kEz
kEz
pIl
@@ -215928,7 +215918,7 @@ hjQ
hjQ
ofN
jCS
-otT
+mFH
mFH
mFH
mFH
@@ -216170,7 +216160,7 @@ cmh
cmh
cmh
eLT
-spz
+iEz
iEz
iEz
iEz
@@ -217403,13 +217393,13 @@ boa
boa
boa
pxK
-lRa
-cOb
+tHi
+qpL
nkA
pxK
-lRa
-cOb
-wUx
+tHi
+qpL
+hbG
pxK
tHi
qpL
@@ -251193,7 +251183,7 @@ nLS
nLS
oLx
aQN
-wFJ
+lmO
lmO
nAz
lmO
@@ -255288,7 +255278,7 @@ msw
pYF
msw
msw
-kpZ
+msw
msw
xkR
msw
@@ -256814,7 +256804,7 @@ ttj
rja
gyt
rja
-uva
+htv
nIp
nIp
nIp
@@ -257257,7 +257247,7 @@ hjQ
hjQ
hjQ
hjQ
-skL
+omh
omh
omh
csy
@@ -257866,8 +257856,8 @@ cqH
mzj
qjN
rja
-uva
-hXA
+pmb
+oxx
aKX
nLS
nLS
@@ -264029,7 +264019,7 @@ lJD
swe
giP
dGo
-bLY
+hVT
dGo
dGo
inO
@@ -264286,7 +264276,7 @@ wTU
rfW
hze
swt
-bPz
+swt
swt
swt
bIM
@@ -269938,9 +269928,9 @@ bTG
iix
jBA
epM
-aQE
-aQE
-aQE
+bPz
+bPz
+bPz
pYe
axK
hOZ
@@ -272194,7 +272184,7 @@ ljS
ekW
ekW
cLM
-hsV
+sJB
sJB
sJB
sJB
@@ -272451,7 +272441,7 @@ iYi
iYi
cDH
jeE
-hsV
+sJB
nrD
rYo
vMM
@@ -272965,7 +272955,7 @@ bpR
bgH
gLF
cxf
-hsV
+sJB
srm
saP
fLl
@@ -273035,7 +273025,7 @@ wzv
wzv
wzv
wzv
-evP
+wzv
qXB
ssn
jHW
@@ -273049,7 +273039,7 @@ vfx
fCT
kjK
dAz
-lPz
+evP
htC
nXv
dOu
@@ -273222,7 +273212,7 @@ hsV
pNF
hnq
pNF
-hsV
+sJB
sJB
vMx
qcz
@@ -273292,7 +273282,7 @@ rjE
drT
drT
ilc
-mSR
+ilc
vfx
eCL
pAh
@@ -274510,7 +274500,7 @@ jWQ
iXa
fSu
iaM
-vES
+sJB
hPl
hcJ
wJd
@@ -274767,7 +274757,7 @@ oty
oty
iMs
iMs
-vES
+sJB
xZw
eRd
lvw
@@ -275024,7 +275014,7 @@ oty
oty
oty
iMs
-vES
+sJB
oFg
gbN
wPx
@@ -275281,7 +275271,7 @@ oMN
fmR
oMN
vcu
-vES
+sJB
eQo
jIt
aFD
@@ -277887,7 +277877,7 @@ nnm
xfv
tbo
nnm
-gws
+xfv
vyz
txw
xfv
@@ -278144,7 +278134,7 @@ nnm
xfv
tbo
nnm
-tbo
+xfv
xfv
nnm
xfv
@@ -280154,8 +280144,8 @@ xcR
kLo
qUu
gWH
-xcR
-oUm
+xKh
+ePJ
oUm
rPM
iVo
@@ -280412,7 +280402,7 @@ ksH
xry
qmz
xcR
-oUm
+pJp
oUm
rPM
iVo
@@ -280664,12 +280654,12 @@ cYr
cYr
cYr
cYr
-bIX
+bqx
fBz
-pJp
-niI
-uFK
oUm
+niI
+jEI
+pJp
oUm
rPM
iVo
@@ -280923,10 +280913,10 @@ nLS
nLS
xxD
fBz
-pJp
+oUm
niI
uFK
-oUm
+pJp
oUm
rPM
iVo
@@ -281180,10 +281170,10 @@ nLS
nLS
xxD
fBz
-pJp
+oUm
niI
uFK
-oUm
+pJp
oUm
aMW
fqw
@@ -281437,10 +281427,10 @@ nLS
nLS
xxD
fBz
-pJp
+oUm
niI
bKV
-pII
+lEg
pII
pII
pII
@@ -281693,11 +281683,11 @@ nLS
nLS
nLS
nLS
-cYr
+ycm
+boa
+ycm
+nLS
rLv
-cYr
-nLS
-nLS
nLS
nLS
nLS
@@ -281950,11 +281940,11 @@ nLS
nLS
nLS
nLS
-cYr
-rLv
-cYr
-nLS
-nLS
+ycm
+iKU
+ycm
+kHW
+txl
nLS
nLS
nLS
@@ -282208,9 +282198,9 @@ nLS
nLS
nLS
cYr
-rLv
-cYr
-nLS
+kHW
+ugx
+txl
nLS
nLS
nLS
diff --git a/code/__DEFINES/_flags/_flags.dm b/code/__DEFINES/_flags/_flags.dm
index ca026edbf2..0478c4d501 100644
--- a/code/__DEFINES/_flags/_flags.dm
+++ b/code/__DEFINES/_flags/_flags.dm
@@ -30,46 +30,46 @@ GLOBAL_LIST_INIT(bitflags, list(
//FLAGS BITMASK
///This flag is what recursive_hear_check() uses to determine wether to add an item to the hearer list or not.
-#define HEAR_1 (1<<3)
+#define HEAR_1 (1<<0)
///Projectiles will use default chance-based ricochet handling on things with this.
-#define DEFAULT_RICOCHET_1 (1<<4)
+#define DEFAULT_RICOCHET_1 (1<<1)
///Conducts electricity (metal etc.).
-#define CONDUCT_1 (1<<5)
+#define CONDUCT_1 (1<<2)
///For machines and structures that should not break into parts, eg, holodeck stuff.
-#define NODECONSTRUCT_1 (1<<7)
+#define NODECONSTRUCT_1 (1<<3)
///Atom queued to SSoverlay.
-#define OVERLAY_QUEUED_1 (1<<8)
+#define OVERLAY_QUEUED_1 (1<<4)
///Item has priority to check when entering or leaving.
-#define ON_BORDER_1 (1<<9)
+#define ON_BORDER_1 (1<<5)
///Whether or not this atom shows screentips when hovered over
-#define NO_SCREENTIPS_1 (1<<10)
+#define NO_SCREENTIPS_1 (1<<6)
///Prevent clicking things below it on the same turf eg. doors/ fulltile windows.
-#define PREVENT_CLICK_UNDER_1 (1<<11)
-#define HOLOGRAM_1 (1<<12)
+#define PREVENT_CLICK_UNDER_1 (1<<7)
+#define HOLOGRAM_1 (1<<8)
///Prevents mobs from getting chainshocked by teslas and the supermatter.
-#define SHOCKED_1 (1<<13)
+#define SHOCKED_1 (1<<9)
///Whether /atom/Initialize() has already run for the object.
-#define INITIALIZED_1 (1<<14)
+#define INITIALIZED_1 (1<<10)
///was this spawned by an admin? used for stat tracking stuff.
-#define ADMIN_SPAWNED_1 (1<<15)
+#define ADMIN_SPAWNED_1 (1<<11)
/// should not get harmed if this gets caught by an explosion?
-#define PREVENT_CONTENTS_EXPLOSION_1 (1<<16)
+#define PREVENT_CONTENTS_EXPLOSION_1 (1<<12)
/// Early returns mob.face_atom()
-#define BLOCK_FACE_ATOM_1 (1<<17)
+#define BLOCK_FACE_ATOM_1 (1<<13)
//turf-only flags
-#define NOJAUNT_1 (1<<0)
-#define UNUSED_RESERVATION_TURF_1 (1<<1)
+#define NOJAUNT_1 (1<<14)
+#define UNUSED_RESERVATION_TURF_1 (1<<15)
/// If a turf can be made dirty at roundstart. This is also used in areas.
-#define CAN_BE_DIRTY_1 (1<<2)
+#define CAN_BE_DIRTY_1 (1<<16)
/// Blocks lava rivers being generated on the turf
-#define NO_LAVA_GEN_1 (1<<6)
+#define NO_LAVA_GEN_1 (1<<17)
/// Blocks ruins spawning on the turf
-#define NO_RUINS_1 (1<<10)
+#define NO_RUINS_1 (1<<18)
/// Should this tile be cleaned up and reinserted into an excited group?
-#define EXCITED_CLEANUP_1 (1 << 13)
+#define EXCITED_CLEANUP_1 (1 << 19)
/// Whether or not this atom has contextual screentips when hovered OVER
-#define HAS_CONTEXTUAL_SCREENTIPS_1 (1 << 14)
+#define HAS_CONTEXTUAL_SCREENTIPS_1 (1 << 20)
////////////////Area flags\\\\\\\\\\\\\\
/// If it's a valid territory for cult summoning or the CRAB-17 phone to spawn
diff --git a/code/__DEFINES/cooldowns.dm b/code/__DEFINES/cooldowns.dm
index 39240ed7e5..c5ad0d745d 100644
--- a/code/__DEFINES/cooldowns.dm
+++ b/code/__DEFINES/cooldowns.dm
@@ -78,7 +78,7 @@
#define COOLDOWN_DECLARE(cd_index) var/##cd_index = 0
-#define COOLDOWN_START(cd_source, cd_index, cd_time) (cd_source.cd_index = world.time + cd_time)
+#define COOLDOWN_START(cd_source, cd_index, cd_time) (cd_source.cd_index = world.time + (cd_time))
//Returns true if the cooldown has run its course, false otherwise
#define COOLDOWN_FINISHED(cd_source, cd_index) (cd_source.cd_index < world.time)
diff --git a/code/__DEFINES/qdel.dm b/code/__DEFINES/qdel.dm
index 32e0025ab2..7a94df025e 100644
--- a/code/__DEFINES/qdel.dm
+++ b/code/__DEFINES/qdel.dm
@@ -40,6 +40,6 @@
#define GC_DEL_QUEUE 10 SECONDS
#define QDELING(X) (X.gc_destroyed)
-#define QDELETED(X) (!X || QDELING(X))
+#define QDELETED(X) (isnull(X) || QDELING(X))
#define QDESTROYING(X) (!X || X.gc_destroyed == GC_CURRENTLY_BEING_QDELETED)
diff --git a/code/__DEFINES/rust_g.dm b/code/__DEFINES/rust_g.dm
index 48a2ee5389..e354105cc9 100644
--- a/code/__DEFINES/rust_g.dm
+++ b/code/__DEFINES/rust_g.dm
@@ -38,8 +38,15 @@
#define RUST_G (__rust_g || __detect_rust_g())
#endif
+// Handle 515 call() -> call_ext() changes
+#if DM_VERSION >= 515
+#define RUSTG_CALL call_ext
+#else
+#define RUSTG_CALL call
+#endif
+
/// Gets the version of rust_g
-/proc/rustg_get_version() return call(RUST_G, "get_version")()
+/proc/rustg_get_version() return RUSTG_CALL(RUST_G, "get_version")()
/**
@@ -51,7 +58,7 @@
* * patterns - A non-associative list of strings to search for
* * replacements - Default replacements for this automaton, used with rustg_acreplace
*/
-#define rustg_setup_acreplace(key, patterns, replacements) call(RUST_G, "setup_acreplace")(key, json_encode(patterns), json_encode(replacements))
+#define rustg_setup_acreplace(key, patterns, replacements) RUSTG_CALL(RUST_G, "setup_acreplace")(key, json_encode(patterns), json_encode(replacements))
/**
* Sets up the Aho-Corasick automaton using supplied options.
@@ -63,7 +70,7 @@
* * patterns - A non-associative list of strings to search for
* * replacements - Default replacements for this automaton, used with rustg_acreplace
*/
-#define rustg_setup_acreplace_with_options(key, options, patterns, replacements) call(RUST_G, "setup_acreplace")(key, json_encode(options), json_encode(patterns), json_encode(replacements))
+#define rustg_setup_acreplace_with_options(key, options, patterns, replacements) RUSTG_CALL(RUST_G, "setup_acreplace")(key, json_encode(options), json_encode(patterns), json_encode(replacements))
/**
* Run the specified replacement engine with the provided haystack text to replace, returning replaced text.
@@ -72,7 +79,7 @@
* * key - The key for the automaton
* * text - Text to run replacements on
*/
-#define rustg_acreplace(key, text) call(RUST_G, "acreplace")(key, text)
+#define rustg_acreplace(key, text) RUSTG_CALL(RUST_G, "acreplace")(key, text)
/**
* Run the specified replacement engine with the provided haystack text to replace, returning replaced text.
@@ -82,7 +89,7 @@
* * text - Text to run replacements on
* * replacements - Replacements for this call. Must be the same length as the set-up patterns
*/
-#define rustg_acreplace_with_replacements(key, text, replacements) call(RUST_G, "acreplace_with_replacements")(key, text, json_encode(replacements))
+#define rustg_acreplace_with_replacements(key, text, replacements) RUSTG_CALL(RUST_G, "acreplace_with_replacements")(key, text, json_encode(replacements))
/**
* This proc generates a cellular automata noise grid which can be used in procedural generation methods.
@@ -98,7 +105,7 @@
* * height: The height of the grid.
*/
#define rustg_cnoise_generate(percentage, smoothing_iterations, birth_limit, death_limit, width, height) \
- call(RUST_G, "cnoise_generate")(percentage, smoothing_iterations, birth_limit, death_limit, width, height)
+ RUSTG_CALL(RUST_G, "cnoise_generate")(percentage, smoothing_iterations, birth_limit, death_limit, width, height)
/**
* This proc generates a grid of perlin-like noise
@@ -114,32 +121,38 @@
* * upper_range: upper bound of values selected for. (exclusive)
*/
#define rustg_dbp_generate(seed, accuracy, stamp_size, world_size, lower_range, upper_range) \
- call(RUST_G, "dbp_generate")(seed, accuracy, stamp_size, world_size, lower_range, upper_range)
+ RUSTG_CALL(RUST_G, "dbp_generate")(seed, accuracy, stamp_size, world_size, lower_range, upper_range)
-#define rustg_dmi_strip_metadata(fname) call(RUST_G, "dmi_strip_metadata")(fname)
-#define rustg_dmi_create_png(path, width, height, data) call(RUST_G, "dmi_create_png")(path, width, height, data)
-#define rustg_dmi_resize_png(path, width, height, resizetype) call(RUST_G, "dmi_resize_png")(path, width, height, resizetype)
+#define rustg_dmi_strip_metadata(fname) RUSTG_CALL(RUST_G, "dmi_strip_metadata")(fname)
+#define rustg_dmi_create_png(path, width, height, data) RUSTG_CALL(RUST_G, "dmi_create_png")(path, width, height, data)
+#define rustg_dmi_resize_png(path, width, height, resizetype) RUSTG_CALL(RUST_G, "dmi_resize_png")(path, width, height, resizetype)
+/**
+ * input: must be a path, not an /icon; you have to do your own handling if it is one, as icon objects can't be directly passed to rustg.
+ *
+ * output: json_encode'd list. json_decode to get a flat list with icon states in the order they're in inside the .dmi
+ */
+#define rustg_dmi_icon_states(fname) RUSTG_CALL(RUST_G, "dmi_icon_states")(fname)
-#define rustg_file_read(fname) call(RUST_G, "file_read")(fname)
-#define rustg_file_exists(fname) call(RUST_G, "file_exists")(fname)
-#define rustg_file_write(text, fname) call(RUST_G, "file_write")(text, fname)
-#define rustg_file_append(text, fname) call(RUST_G, "file_append")(text, fname)
-#define rustg_file_get_line_count(fname) text2num(call(RUST_G, "file_get_line_count")(fname))
-#define rustg_file_seek_line(fname, line) call(RUST_G, "file_seek_line")(fname, "[line]")
+#define rustg_file_read(fname) RUSTG_CALL(RUST_G, "file_read")(fname)
+#define rustg_file_exists(fname) RUSTG_CALL(RUST_G, "file_exists")(fname)
+#define rustg_file_write(text, fname) RUSTG_CALL(RUST_G, "file_write")(text, fname)
+#define rustg_file_append(text, fname) RUSTG_CALL(RUST_G, "file_append")(text, fname)
+#define rustg_file_get_line_count(fname) text2num(RUSTG_CALL(RUST_G, "file_get_line_count")(fname))
+#define rustg_file_seek_line(fname, line) RUSTG_CALL(RUST_G, "file_seek_line")(fname, "[line]")
#ifdef RUSTG_OVERRIDE_BUILTINS
#define file2text(fname) rustg_file_read("[fname]")
#define text2file(text, fname) rustg_file_append(text, "[fname]")
#endif
-#define rustg_git_revparse(rev) call(RUST_G, "rg_git_revparse")(rev)
-#define rustg_git_commit_date(rev) call(RUST_G, "rg_git_commit_date")(rev)
+#define rustg_git_revparse(rev) RUSTG_CALL(RUST_G, "rg_git_revparse")(rev)
+#define rustg_git_commit_date(rev) RUSTG_CALL(RUST_G, "rg_git_commit_date")(rev)
-#define rustg_hash_string(algorithm, text) call(RUST_G, "hash_string")(algorithm, text)
-#define rustg_hash_file(algorithm, fname) call(RUST_G, "hash_file")(algorithm, fname)
-#define rustg_hash_generate_totp(seed) call(RUST_G, "generate_totp")(seed)
-#define rustg_hash_generate_totp_tolerance(seed, tolerance) call(RUST_G, "generate_totp_tolerance")(seed, tolerance)
+#define rustg_hash_string(algorithm, text) RUSTG_CALL(RUST_G, "hash_string")(algorithm, text)
+#define rustg_hash_file(algorithm, fname) RUSTG_CALL(RUST_G, "hash_file")(algorithm, fname)
+#define rustg_hash_generate_totp(seed) RUSTG_CALL(RUST_G, "generate_totp")(seed)
+#define rustg_hash_generate_totp_tolerance(seed, tolerance) RUSTG_CALL(RUST_G, "generate_totp_tolerance")(seed, tolerance)
#define RUSTG_HASH_MD5 "md5"
#define RUSTG_HASH_SHA1 "sha1"
@@ -158,41 +171,117 @@
#define RUSTG_HTTP_METHOD_PATCH "patch"
#define RUSTG_HTTP_METHOD_HEAD "head"
#define RUSTG_HTTP_METHOD_POST "post"
-#define rustg_http_request_blocking(method, url, body, headers, options) call(RUST_G, "http_request_blocking")(method, url, body, headers, options)
-#define rustg_http_request_async(method, url, body, headers, options) call(RUST_G, "http_request_async")(method, url, body, headers, options)
-#define rustg_http_check_request(req_id) call(RUST_G, "http_check_request")(req_id)
+#define rustg_http_request_blocking(method, url, body, headers, options) RUSTG_CALL(RUST_G, "http_request_blocking")(method, url, body, headers, options)
+#define rustg_http_request_async(method, url, body, headers, options) RUSTG_CALL(RUST_G, "http_request_async")(method, url, body, headers, options)
+#define rustg_http_check_request(req_id) RUSTG_CALL(RUST_G, "http_check_request")(req_id)
#define RUSTG_JOB_NO_RESULTS_YET "NO RESULTS YET"
#define RUSTG_JOB_NO_SUCH_JOB "NO SUCH JOB"
#define RUSTG_JOB_ERROR "JOB PANICKED"
-#define rustg_json_is_valid(text) (call(RUST_G, "json_is_valid")(text) == "true")
+#define rustg_json_is_valid(text) (RUSTG_CALL(RUST_G, "json_is_valid")(text) == "true")
-#define rustg_log_write(fname, text, format) call(RUST_G, "log_write")(fname, text, format)
-/proc/rustg_log_close_all() return call(RUST_G, "log_close_all")()
+#define rustg_log_write(fname, text, format) RUSTG_CALL(RUST_G, "log_write")(fname, text, format)
+/proc/rustg_log_close_all() return RUSTG_CALL(RUST_G, "log_close_all")()
-#define rustg_noise_get_at_coordinates(seed, x, y) call(RUST_G, "noise_get_at_coordinates")(seed, x, y)
+#define rustg_noise_get_at_coordinates(seed, x, y) RUSTG_CALL(RUST_G, "noise_get_at_coordinates")(seed, x, y)
+
+/**
+ * Register a list of nodes into a rust library. This list of nodes must have been serialized in a json.
+ * Node {// Index of this node in the list of nodes
+ * unique_id: usize,
+ * // Position of the node in byond
+ * x: usize,
+ * y: usize,
+ * z: usize,
+ * // Indexes of nodes connected to this one
+ * connected_nodes_id: Vec}
+ * It is important that the node with the unique_id 0 is the first in the json, unique_id 1 right after that, etc.
+ * It is also important that all unique ids follow. {0, 1, 2, 4} is not a correct list and the registering will fail
+ * Nodes should not link across z levels.
+ * A node cannot link twice to the same node and shouldn't link itself either
+ */
+#define rustg_register_nodes_astar(json) RUSTG_CALL(RUST_G, "register_nodes_astar")(json)
+
+/**
+ * Add a new node to the static list of nodes. Same rule as registering_nodes applies.
+ * This node unique_id must be equal to the current length of the static list of nodes
+ */
+#define rustg_add_node_astar(json) RUSTG_CALL(RUST_G, "add_node_astar")(json)
+
+/**²
+ * Remove every link to the node with unique_id. Replace that node by null
+ */
+#define rustg_remove_node_astart(unique_id) RUSTG_CALL(RUST_G, "remove_node_astar")(unique_id)
+
+/**
+ * Compute the shortest path between start_node and goal_node using A*. Heuristic used is simple geometric distance
+ */
+#define rustg_generate_path_astar(start_node_id, goal_node_id) RUSTG_CALL(RUST_G, "generate_path_astar")(start_node_id, goal_node_id)
#define RUSTG_REDIS_ERROR_CHANNEL "RUSTG_REDIS_ERROR_CHANNEL"
-#define rustg_redis_connect(addr) call(RUST_G, "redis_connect")(addr)
-/proc/rustg_redis_disconnect() return call(RUST_G, "redis_disconnect")()
-#define rustg_redis_subscribe(channel) call(RUST_G, "redis_subscribe")(channel)
-/proc/rustg_redis_get_messages() return call(RUST_G, "redis_get_messages")()
-#define rustg_redis_publish(channel, message) call(RUST_G, "redis_publish")(channel, message)
+#define rustg_redis_connect(addr) RUSTG_CALL(RUST_G, "redis_connect")(addr)
+/proc/rustg_redis_disconnect() return RUSTG_CALL(RUST_G, "redis_disconnect")()
+#define rustg_redis_subscribe(channel) RUSTG_CALL(RUST_G, "redis_subscribe")(channel)
+/proc/rustg_redis_get_messages() return RUSTG_CALL(RUST_G, "redis_get_messages")()
+#define rustg_redis_publish(channel, message) RUSTG_CALL(RUST_G, "redis_publish")(channel, message)
-#define rustg_sql_connect_pool(options) call(RUST_G, "sql_connect_pool")(options)
-#define rustg_sql_query_async(handle, query, params) call(RUST_G, "sql_query_async")(handle, query, params)
-#define rustg_sql_query_blocking(handle, query, params) call(RUST_G, "sql_query_blocking")(handle, query, params)
-#define rustg_sql_connected(handle) call(RUST_G, "sql_connected")(handle)
-#define rustg_sql_disconnect_pool(handle) call(RUST_G, "sql_disconnect_pool")(handle)
-#define rustg_sql_check_query(job_id) call(RUST_G, "sql_check_query")("[job_id]")
+/**
+ * Connects to a given redis server.
+ *
+ * Arguments:
+ * * addr - The address of the server, for example "redis://127.0.0.1/"
+ */
+#define rustg_redis_connect_rq(addr) RUSTG_CALL(RUST_G, "redis_connect_rq")(addr)
+/**
+ * Disconnects from a previously connected redis server
+ */
+/proc/rustg_redis_disconnect_rq() return RUSTG_CALL(RUST_G, "redis_disconnect_rq")()
+/**
+ * https://redis.io/commands/lpush/
+ *
+ * Arguments
+ * * key (string) - The key to use
+ * * elements (list) - The elements to push, use a list even if there's only one element.
+ */
+#define rustg_redis_lpush(key, elements) RUSTG_CALL(RUST_G, "redis_lpush")(key, json_encode(elements))
+/**
+ * https://redis.io/commands/lrange/
+ *
+ * Arguments
+ * * key (string) - The key to use
+ * * start (string) - The zero-based index to start retrieving at
+ * * stop (string) - The zero-based index to stop retrieving at (inclusive)
+ */
+#define rustg_redis_lrange(key, start, stop) RUSTG_CALL(RUST_G, "redis_lrange")(key, start, stop)
+/**
+ * https://redis.io/commands/lpop/
+ *
+ * Arguments
+ * * key (string) - The key to use
+ * * count (string|null) - The amount to pop off the list, pass null to omit (thus just 1)
+ *
+ * Note: `count` was added in Redis version 6.2.0
+ */
+#define rustg_redis_lpop(key, count) RUSTG_CALL(RUST_G, "redis_lpop")(key, count)
-#define rustg_time_microseconds(id) text2num(call(RUST_G, "time_microseconds")(id))
-#define rustg_time_milliseconds(id) text2num(call(RUST_G, "time_milliseconds")(id))
-#define rustg_time_reset(id) call(RUST_G, "time_reset")(id)
+#define rustg_sql_connect_pool(options) RUSTG_CALL(RUST_G, "sql_connect_pool")(options)
+#define rustg_sql_query_async(handle, query, params) RUSTG_CALL(RUST_G, "sql_query_async")(handle, query, params)
+#define rustg_sql_query_blocking(handle, query, params) RUSTG_CALL(RUST_G, "sql_query_blocking")(handle, query, params)
+#define rustg_sql_connected(handle) RUSTG_CALL(RUST_G, "sql_connected")(handle)
+#define rustg_sql_disconnect_pool(handle) RUSTG_CALL(RUST_G, "sql_disconnect_pool")(handle)
+#define rustg_sql_check_query(job_id) RUSTG_CALL(RUST_G, "sql_check_query")("[job_id]")
-#define rustg_raw_read_toml_file(path) json_decode(call(RUST_G, "toml_file_to_json")(path) || "null")
+#define rustg_time_microseconds(id) text2num(RUSTG_CALL(RUST_G, "time_microseconds")(id))
+#define rustg_time_milliseconds(id) text2num(RUSTG_CALL(RUST_G, "time_milliseconds")(id))
+#define rustg_time_reset(id) RUSTG_CALL(RUST_G, "time_reset")(id)
+
+/// Returns the timestamp as a string
+/proc/rustg_unix_timestamp()
+ return RUSTG_CALL(RUST_G, "unix_timestamp")()
+
+#define rustg_raw_read_toml_file(path) json_decode(RUSTG_CALL(RUST_G, "toml_file_to_json")(path) || "null")
/proc/rustg_read_toml_file(path)
var/list/output = rustg_raw_read_toml_file(path)
@@ -201,11 +290,20 @@
else
CRASH(output["content"])
-#define rustg_unzip_download_async(url, unzip_directory) call(RUST_G, "unzip_download_async")(url, unzip_directory)
-#define rustg_unzip_check(job_id) call(RUST_G, "unzip_check")("[job_id]")
+#define rustg_raw_toml_encode(value) json_decode(RUSTG_CALL(RUST_G, "toml_encode")(json_encode(value)))
-#define rustg_url_encode(text) call(RUST_G, "url_encode")("[text]")
-#define rustg_url_decode(text) call(RUST_G, "url_decode")(text)
+/proc/rustg_toml_encode(value)
+ var/list/output = rustg_raw_toml_encode(value)
+ if (output["success"])
+ return output["content"]
+ else
+ CRASH(output["content"])
+
+#define rustg_unzip_download_async(url, unzip_directory) RUSTG_CALL(RUST_G, "unzip_download_async")(url, unzip_directory)
+#define rustg_unzip_check(job_id) RUSTG_CALL(RUST_G, "unzip_check")("[job_id]")
+
+#define rustg_url_encode(text) RUSTG_CALL(RUST_G, "url_encode")("[text]")
+#define rustg_url_decode(text) RUSTG_CALL(RUST_G, "url_decode")(text)
#ifdef RUSTG_OVERRIDE_BUILTINS
#define url_encode(text) rustg_url_encode(text)
@@ -226,6 +324,6 @@
* * node_max: maximum amount of nodes in a region
*/
#define rustg_worley_generate(region_size, threshold, node_per_region_chance, size, node_min, node_max) \
- call(RUST_G, "worley_generate")(region_size, threshold, node_per_region_chance, size, node_min, node_max)
+ RUSTG_CALL(RUST_G, "worley_generate")(region_size, threshold, node_per_region_chance, size, node_min, node_max)
diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm
index 49bad31a60..7247536885 100644
--- a/code/__DEFINES/subsystems.dm
+++ b/code/__DEFINES/subsystems.dm
@@ -87,6 +87,9 @@
///Call qdel on the atom after intialization
#define INITIALIZE_HINT_QDEL 2
+//Call qdel with a force of TRUE after initialization
+#define INITIALIZE_HINT_QDEL_FORCE 3
+
///type and all subtypes should always immediately call Initialize in New()
#define INITIALIZE_IMMEDIATE(X) ##X/New(loc, ...){\
..();\
diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm
index 22c3827022..6187a67825 100644
--- a/code/__DEFINES/tgs.dm
+++ b/code/__DEFINES/tgs.dm
@@ -1,6 +1,6 @@
// tgstation-server DMAPI
-#define TGS_DMAPI_VERSION "6.5.2"
+#define TGS_DMAPI_VERSION "6.5.3"
// All functions and datums outside this document are subject to change with any version and should not be relied on.
@@ -154,7 +154,7 @@
#define TGS_TOPIC var/tgs_topic_return = TgsTopic(args[1]); if(tgs_topic_return) return tgs_topic_return
/**
- * Call this as late as possible in [world/proc/Reboot].
+ * Call this as late as possible in [world/proc/Reboot] (BEFORE ..()).
*/
/world/proc/TgsReboot()
return
diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm
index 58b7516be3..92cc6da237 100644
--- a/code/__HELPERS/_logging.dm
+++ b/code/__HELPERS/_logging.dm
@@ -42,9 +42,16 @@
SEND_TEXT(world.log, text)
#endif
-#ifdef REFERENCE_TRACKING_LOG
+#if defined(REFERENCE_DOING_IT_LIVE)
+#define log_reftracker(msg) log_harddel("## REF SEARCH [msg]")
+
+/proc/log_harddel(text)
+ WRITE_LOG(GLOB.harddel_log, text)
+
+#elif defined(REFERENCE_TRACKING) // Doing it locally
#define log_reftracker(msg) log_world("## REF SEARCH [msg]")
-#else
+
+#else //Not tracking at all
#define log_reftracker(msg)
#endif
diff --git a/code/__HELPERS/do_after.dm b/code/__HELPERS/do_after.dm
index 5b17ed687c..eb63727166 100644
--- a/code/__HELPERS/do_after.dm
+++ b/code/__HELPERS/do_after.dm
@@ -185,7 +185,8 @@
while (world.time + resume_time < endtime)
stoplag(1)
if (progress)
- progbar.update(world.time - starttime + resume_time)
+ if(!QDELETED(progbar))
+ progbar.update(world.time - starttime + resume_time)
if(QDELETED(user) || QDELETED(target))
. = 0
break
@@ -264,7 +265,8 @@
while (world.time + resume_time < endtime)
stoplag(1)
if (progress)
- progbar.update(world.time - starttime + resume_time)
+ if(!QDELETED(progbar))
+ progbar.update(world.time - starttime + resume_time)
if(drifting && !user.inertia_dir)
drifting = 0
@@ -339,7 +341,8 @@
while(world.time < endtime)
stoplag(1)
if(progress)
- progbar.update(world.time - starttime)
+ if(!QDELETED(progbar))
+ progbar.update(world.time - starttime)
if(QDELETED(user) || !targets)
. = 0
break
diff --git a/code/__HELPERS/qdel.dm b/code/__HELPERS/qdel.dm
index 0d2bf89152..af7e7b99f0 100644
--- a/code/__HELPERS/qdel.dm
+++ b/code/__HELPERS/qdel.dm
@@ -1,4 +1,8 @@
-#define QDEL_IN(item, time) addtimer(CALLBACK(GLOBAL_PROC, .proc/qdel, item), time, TIMER_STOPPABLE)
+// This is a bit hacky, we do it to avoid people relying on a return value for the macro
+// If you need that you should use QDEL_IN_STOPPABLE instead
+#define QDEL_IN(item, time) ; \
+ addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), (time) > GC_FILTER_QUEUE ? WEAKREF(item) : item), time);
+#define QDEL_IN_STOPPABLE(item, time) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), (time) > GC_FILTER_QUEUE ? WEAKREF(item) : item), time, TIMER_STOPPABLE)
#define QDEL_IN_CLIENT_TIME(item, time) addtimer(CALLBACK(GLOBAL_PROC, .proc/qdel, item), time, TIMER_STOPPABLE | TIMER_CLIENT_TIME)
#define QDEL_NULL(item) qdel(item); item = null
#define QDEL_LIST(L) if(L) { for(var/I in L) qdel(I); L.Cut(); }
diff --git a/code/__SPLURTCODE/DEFINES/traits.dm b/code/__SPLURTCODE/DEFINES/traits.dm
index 4316b0a69f..751195be2b 100644
--- a/code/__SPLURTCODE/DEFINES/traits.dm
+++ b/code/__SPLURTCODE/DEFINES/traits.dm
@@ -42,5 +42,6 @@
#define TRAIT_DUMB_CUM "dumb_for_cum_base"
#define TRAIT_DUMB_CUM_CRAVE "dumb_for_cum_need"
#define TRAIT_RAD_FIEND "RadFiend"
+#define TRAIT_COSGLOW "cosmetic_glow"
#define TRAIT_BODY_MORPHER "body_morpher"
#define TRAIT_HALLOWED "hallowed"
diff --git a/code/_compile_options.dm b/code/_compile_options.dm
index 1aca8959c2..f25f39ab2b 100644
--- a/code/_compile_options.dm
+++ b/code/_compile_options.dm
@@ -43,6 +43,14 @@
// #define TRACK_MAX_SHARE //Allows max share tracking, for use in the atmos debugging ui
#endif //ifdef TESTING
+//#define REFERENCE_DOING_IT_LIVE
+#ifdef REFERENCE_DOING_IT_LIVE
+// compile the backend
+#define REFERENCE_TRACKING
+// actually look for refs
+#define GC_FAILURE_HARD_LOOKUP
+#endif // REFERENCE_DOING_IT_LIVE
+
//#define UNIT_TESTS //If this is uncommented, we do a single run though of the game setup and tear down process with unit tests in between
#ifndef PRELOAD_RSC //set to:
@@ -81,6 +89,7 @@
#define REFERENCE_TRACKING
#define REFERENCE_TRACKING_DEBUG
#define FIND_REF_NO_CHECK_TICK
+// #define GC_FAILURE_HARD_LOOKUP // Uncomment this to have harddel reftracking in unit tests (takes 3-5min to run per single harddel)
#endif
#ifdef TGS
diff --git a/code/_globalvars/logging.dm b/code/_globalvars/logging.dm
index e9c38546a7..aa70b7094a 100644
--- a/code/_globalvars/logging.dm
+++ b/code/_globalvars/logging.dm
@@ -87,6 +87,11 @@ GLOBAL_PROTECT(picture_logging_id)
GLOBAL_VAR(picture_logging_prefix)
GLOBAL_PROTECT(picture_logging_prefix)
/////
+#ifdef REFERENCE_DOING_IT_LIVE
+GLOBAL_LIST_EMPTY(harddel_log)
+GLOBAL_PROTECT(harddel_log)
+#endif
+
//// cit logging
GLOBAL_VAR(subsystem_log)
diff --git a/code/_onclick/hud/credits.dm b/code/_onclick/hud/credits.dm
index aaf423ecbc..632355e09d 100644
--- a/code/_onclick/hud/credits.dm
+++ b/code/_onclick/hud/credits.dm
@@ -55,14 +55,15 @@
animate(src, alpha = 255, time = CREDIT_EASE_DURATION, flags = ANIMATION_PARALLEL)
addtimer(CALLBACK(src, .proc/FadeOut), CREDIT_ROLL_SPEED - CREDIT_EASE_DURATION)
QDEL_IN(src, CREDIT_ROLL_SPEED)
- P.screen += src
+ if(parent)
+ parent.screen += src
/atom/movable/screen/credit/Destroy()
- var/client/P = parent
- P.screen -= src
icon = null
- LAZYREMOVE(P.credits, src)
- parent = null
+ if(parent)
+ parent.screen -= src
+ LAZYREMOVE(parent.credits, src)
+ parent = null
return ..()
/atom/movable/screen/credit/proc/FadeOut()
diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm
index 761a1bad4a..fa3a7942c9 100644
--- a/code/_onclick/hud/radial.dm
+++ b/code/_onclick/hud/radial.dm
@@ -9,6 +9,17 @@ GLOBAL_LIST_EMPTY(radial_menus)
plane = ABOVE_HUD_PLANE
var/datum/radial_menu/parent
+/atom/movable/screen/radial/proc/set_parent(new_value)
+ if(parent)
+ UnregisterSignal(parent, COMSIG_PARENT_QDELETING)
+ parent = new_value
+ if(parent)
+ RegisterSignal(parent, COMSIG_PARENT_QDELETING, .proc/handle_parent_del)
+
+/atom/movable/screen/radial/proc/handle_parent_del()
+ SIGNAL_HANDLER
+ set_parent(null)
+
/atom/movable/screen/radial/slice
icon_state = "radial_slice"
var/choice
@@ -124,7 +135,7 @@ GLOBAL_LIST_EMPTY(radial_menus)
for(var/i in 1 to elements_to_add) //Create all elements
var/atom/movable/screen/radial/slice/new_element = new /atom/movable/screen/radial/slice
new_element.tooltips = use_tooltips
- new_element.parent = src
+ new_element.set_parent(src)
elements += new_element
var/page = 1
@@ -210,7 +221,7 @@ GLOBAL_LIST_EMPTY(radial_menus)
/datum/radial_menu/New()
close_button = new
- close_button.parent = src
+ close_button.set_parent(src)
/datum/radial_menu/proc/Reset()
choices.Cut()
@@ -261,7 +272,7 @@ GLOBAL_LIST_EMPTY(radial_menus)
//Blank
menu_holder = image(icon='icons/effects/effects.dmi',loc=anchor,icon_state="nothing",layer = ABOVE_HUD_LAYER)
menu_holder.plane = ABOVE_HUD_PLANE
- menu_holder.appearance_flags |= KEEP_APART
+ menu_holder.appearance_flags |= KEEP_APART|NO_CLIENT_COLOR|RESET_ALPHA|RESET_COLOR|RESET_TRANSFORM
menu_holder.vis_contents += elements + close_button
current_user.images += menu_holder
diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm
index a82e22e870..bfdaae8069 100644
--- a/code/_onclick/hud/robot.dm
+++ b/code/_onclick/hud/robot.dm
@@ -302,8 +302,9 @@
icon_state = "lamp_off"
/atom/movable/screen/robot/lamp/Destroy()
- robot.lampButton = null
- robot = null
+ if(robot)
+ robot.lampButton = null
+ robot = null
return ..()
/atom/movable/screen/robot/alerts
@@ -343,8 +344,9 @@
var/mob/living/silicon/robot/robot
/atom/movable/screen/robot/modPC/Destroy()
- robot.interfaceButton = null
- robot = null
+ if(robot)
+ robot.interfaceButton = null
+ robot = null
return ..()
/atom/movable/screen/robot/modPC/Click()
diff --git a/code/controllers/subsystem/atoms.dm b/code/controllers/subsystem/atoms.dm
index ba2da8365b..b0c7d67d96 100644
--- a/code/controllers/subsystem/atoms.dm
+++ b/code/controllers/subsystem/atoms.dm
@@ -97,6 +97,9 @@ SUBSYSTEM_DEF(atoms)
if(INITIALIZE_HINT_QDEL)
qdel(A)
qdeleted = TRUE
+ if(INITIALIZE_HINT_QDEL_FORCE)
+ qdel(A, force = TRUE)
+ qdeleted = TRUE
else
BadInitializeCalls[the_type] |= BAD_INIT_NO_HINT
diff --git a/code/controllers/subsystem/jukeboxes.dm b/code/controllers/subsystem/jukeboxes.dm
index 8b9e424244..3ae5ebe86d 100644
--- a/code/controllers/subsystem/jukeboxes.dm
+++ b/code/controllers/subsystem/jukeboxes.dm
@@ -74,6 +74,8 @@ SUBSYSTEM_DEF(jukeboxes)
activejukeboxes[IDtoupdate][JUKE_FALLOFF] = jukefalloff
/datum/controller/subsystem/jukeboxes/proc/removejukebox(IDtoremove)
+ if(!IDtoremove)
+ return
if(islist(activejukeboxes[IDtoremove]))
var/jukechannel = activejukeboxes[IDtoremove][JUKE_CHANNEL]
for(var/mob/M in GLOB.player_list)
diff --git a/code/controllers/subsystem/persistence/_persistence.dm b/code/controllers/subsystem/persistence/_persistence.dm
index d494561d0f..c9898f2976 100644
--- a/code/controllers/subsystem/persistence/_persistence.dm
+++ b/code/controllers/subsystem/persistence/_persistence.dm
@@ -335,7 +335,7 @@ SUBSYSTEM_DEF(persistence)
if(!istype(ending_human) || !ending_human.mind || !ending_human.client || !ending_human.client.prefs || !ending_human.client.prefs.persistent_scars)
continue
- var/mob/living/carbon/human/original_human = ending_human.mind.original_character
+ var/mob/living/carbon/human/original_human = ending_human.mind.original_character.resolve()
if(!original_human || original_human.stat == DEAD || !original_human.all_scars || !(original_human == ending_human))
if(ending_human.client) // i was told if i don't check this every step of the way byond might decide a client ceases to exist mid proc so here we go
ending_human.client.prefs.scars_list["[ending_human.client.prefs.scars_index]"] = ""
@@ -356,7 +356,7 @@ SUBSYSTEM_DEF(persistence)
if(!istype(ending_human) || !ending_human.mind || !ending_human.client || !ending_human.client.prefs || !ending_human.client.prefs.tcg_cards)
continue
- var/mob/living/carbon/human/original_human = ending_human.mind.original_character
+ var/mob/living/carbon/human/original_human = ending_human.mind.original_character.resolve()
if(!original_human || original_human.stat == DEAD || !(original_human == ending_human))
continue
diff --git a/code/datums/action.dm b/code/datums/action.dm
index aa33c68f22..6652535058 100644
--- a/code/datums/action.dm
+++ b/code/datums/action.dm
@@ -648,6 +648,7 @@
/datum/action/spell_action/Destroy()
var/obj/effect/proc_holder/S = target
S.action = null
+ target = null
return ..()
/datum/action/spell_action/Trigger()
diff --git a/code/datums/brain_damage/imaginary_friend.dm b/code/datums/brain_damage/imaginary_friend.dm
index f35389f171..3d8eedbcb5 100644
--- a/code/datums/brain_damage/imaginary_friend.dm
+++ b/code/datums/brain_damage/imaginary_friend.dm
@@ -87,6 +87,8 @@
to_chat(src, "You cannot directly influence the world around you, but you can see what [owner] cannot.")
/mob/camera/imaginary_friend/Initialize(mapload, _trauma)
+ if(!_trauma)
+ return INITIALIZE_HINT_QDEL
. = ..()
trauma = _trauma
@@ -129,7 +131,7 @@
client.images |= current_image
/mob/camera/imaginary_friend/Destroy()
- if(owner.client)
+ if(owner?.client)
owner.client.images.Remove(human_image)
if(client)
client.images.Remove(human_image)
diff --git a/code/datums/components/mood.dm b/code/datums/components/mood.dm
index 920886cc74..c563a7e32b 100644
--- a/code/datums/components/mood.dm
+++ b/code/datums/components/mood.dm
@@ -43,6 +43,7 @@
hud.show_hud(hud.hud_version)
/datum/component/mood/Destroy()
+ QDEL_LIST_ASSOC_VAL(mood_events)
STOP_PROCESSING(SSobj, src)
unmodify_hud()
return ..()
diff --git a/code/datums/components/pellet_cloud.dm b/code/datums/components/pellet_cloud.dm
index a06242962f..b214b8b282 100644
--- a/code/datums/components/pellet_cloud.dm
+++ b/code/datums/components/pellet_cloud.dm
@@ -266,7 +266,7 @@
var/w_bonus = wound_info_by_part[hit_part][CLOUD_POSITION_W_BONUS]
var/bw_bonus = wound_info_by_part[hit_part][CLOUD_POSITION_BW_BONUS]
var/wound_type = (initial(P.damage_type) == BRUTE) ? WOUND_BLUNT : WOUND_BURN // sharpness is handled in the wound rolling
- wound_info_by_part[hit_part] = null
+ wound_info_by_part -= hit_part
hit_part.painless_wound_roll(wound_type, damage_dealt, w_bonus, bw_bonus, initial(P.sharpness))
if(num_hits > 1)
diff --git a/code/datums/components/squeak.dm b/code/datums/components/squeak.dm
index faca18caff..5462b35d53 100644
--- a/code/datums/components/squeak.dm
+++ b/code/datums/components/squeak.dm
@@ -111,7 +111,7 @@
if(AM.movement_type & (FLYING|FLOATING) || !AM.has_gravity())
return
var/atom/current_parent = parent
- if(isturf(current_parent.loc))
+ if(isturf(current_parent?.loc))
if(do_play_squeak())
SEND_SIGNAL(AM, COMSIG_CROSS_SQUEAKED)
diff --git a/code/datums/components/storage/storage.dm b/code/datums/components/storage/storage.dm
index 40daac88cf..07e6c463c9 100644
--- a/code/datums/components/storage/storage.dm
+++ b/code/datums/components/storage/storage.dm
@@ -674,7 +674,7 @@
var/atom/A = parent
update_actions()
for(var/mob/M in range(1, A))
- if(M.active_storage == src)
+ if(M.active_storage == src && (M != user))
close(M)
/datum/component/storage/proc/signal_take_obj(datum/source, atom/movable/AM, new_loc, force = FALSE)
diff --git a/code/datums/components/tackle.dm b/code/datums/components/tackle.dm
index 090acaa5e0..fdb3a88a9c 100644
--- a/code/datums/components/tackle.dm
+++ b/code/datums/components/tackle.dm
@@ -49,7 +49,7 @@
var/mob/living/carbon/P = parent
to_chat(P, "You can no longer tackle.")
P.tackling = FALSE
- ..()
+ return ..()
/datum/component/tackler/RegisterWithParent()
RegisterSignal(parent, COMSIG_MOB_CLICKON, .proc/checkTackle)
diff --git a/code/datums/dash_weapon.dm b/code/datums/dash_weapon.dm
index db5fa677f2..627216aace 100644
--- a/code/datums/dash_weapon.dm
+++ b/code/datums/dash_weapon.dm
@@ -19,6 +19,10 @@
dashing_item = dasher
holder = user
+/datum/action/innate/dash/Destroy()
+ dashing_item = null
+ return ..()
+
/datum/action/innate/dash/IsAvailable(silent = FALSE)
if(current_charges > 0)
return TRUE
diff --git a/code/datums/datum.dm b/code/datums/datum.dm
index 5f9bf37040..fadc565202 100644
--- a/code/datums/datum.dm
+++ b/code/datums/datum.dm
@@ -110,6 +110,12 @@
continue
qdel(timer)
+ #ifdef REFERENCE_TRACKING
+ #ifdef REFERENCE_TRACKING_DEBUG
+ found_refs = null
+ #endif
+ #endif
+
//BEGIN: ECS SHIT
signal_enabled = FALSE
diff --git a/code/datums/elements/dwarfism.dm b/code/datums/elements/dwarfism.dm
index bd72ddbc70..f07481cc5e 100644
--- a/code/datums/elements/dwarfism.dm
+++ b/code/datums/elements/dwarfism.dm
@@ -31,6 +31,8 @@
/datum/element/dwarfism/Detach(mob/living/L)
. = ..()
+ attached_targets -= L
+ UnregisterSignal(L, comsig)
if(QDELETED(L))
return
if(L.lying != 0)
@@ -39,8 +41,6 @@
else
L.transform = L.transform.Scale(1, TALL)
L.transform = L.transform.Translate(0, 16*(TALL-1)) //Makes sure you stand on the tile no matter the size - sand
- UnregisterSignal(L, comsig)
- attached_targets -= L
#undef SHORT
#undef TALL
diff --git a/code/datums/elements/spellcasting.dm b/code/datums/elements/spellcasting.dm
index 676168ea49..c789972d60 100644
--- a/code/datums/elements/spellcasting.dm
+++ b/code/datums/elements/spellcasting.dm
@@ -24,6 +24,7 @@
UnregisterSignal(target, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED, COMSIG_MOB_SPELL_CAN_CAST))
if(users_by_item[target])
var/mob/user = users_by_item[target]
+ users_by_item -= target
stacked_spellcasting_by_user[user]--
if(!stacked_spellcasting_by_user[user])
stacked_spellcasting_by_user -= user
diff --git a/code/datums/explosion.dm b/code/datums/explosion.dm
index 1c0a6803c9..b4e34de237 100644
--- a/code/datums/explosion.dm
+++ b/code/datums/explosion.dm
@@ -205,8 +205,8 @@ GLOBAL_LIST_EMPTY(explosions)
//lists are guaranteed to contain at least 1 turf at this point
var/iteration = 0
- var/affTurfLen = affected_turfs.len
- var/expBlockLen = cached_exp_block.len
+ var/affTurfLen = length(affected_turfs)
+ var/expBlockLen = length(cached_exp_block)
for(var/TI in affected_turfs)
var/turf/T = TI
++iteration
@@ -282,8 +282,8 @@ GLOBAL_LIST_EMPTY(explosions)
break
//update the trackers
- affTurfLen = affected_turfs.len
- expBlockLen = cached_exp_block.len
+ affTurfLen = length(affected_turfs)
+ expBlockLen = length(cached_exp_block)
if(break_condition)
if(reactionary)
@@ -299,8 +299,8 @@ GLOBAL_LIST_EMPTY(explosions)
break
//update the trackers
- affTurfLen = affected_turfs.len
- expBlockLen = cached_exp_block.len
+ affTurfLen = length(affected_turfs)
+ expBlockLen = length(cached_exp_block)
var/circumference = (PI * (init_dist + 4) * 2) //+4 to radius to prevent shit gaps
if(exploded_this_tick.len > circumference) //only do this every revolution
@@ -357,7 +357,7 @@ GLOBAL_LIST_EMPTY(explosions)
var/processed = 0
while(running)
var/I
- for(I in (processed + 1) to affected_turfs.len) // we cache the explosion block rating of every turf in the explosion area
+ for(I in (processed + 1) to length(affected_turfs)) // we cache the explosion block rating of every turf in the explosion area
var/turf/T = affected_turfs[I]
var/current_exp_block = T.density ? T.explosion_block : 0
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index a1b6e72c01..46c7be4e6a 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -80,8 +80,8 @@
var/list/ambitions
//ambition end
- ///What character we spawned in as- either at roundstart or latejoin, so we know for persistent scars if we ended as the same person or not
- var/mob/original_character
+ ///Weakref to the character we spawned in as- either at roundstart or latejoin, so we know for persistent scars if we ended as the same person or not
+ var/datum/weakref/original_character
/// A lazy list of statuses to add next to this mind in the traitor panel
var/list/special_statuses
@@ -101,8 +101,26 @@
qdel(i)
antag_datums = null
QDEL_NULL(skill_holder)
+ set_current(null)
+ soulOwner = null
return ..()
+/datum/mind/proc/set_current(mob/new_current)
+ if(new_current && QDELETED(new_current))
+ CRASH("Tried to set a mind's current var to a qdeleted mob, what the fuck")
+ if(current)
+ UnregisterSignal(src, COMSIG_PARENT_QDELETING)
+ current = new_current
+ if(current)
+ RegisterSignal(src, COMSIG_PARENT_QDELETING, PROC_REF(clear_current))
+
+/datum/mind/proc/clear_current(datum/source)
+ SIGNAL_HANDLER
+ set_current(null)
+
+/datum/mind/proc/set_original_character(new_original_character)
+ original_character = WEAKREF(new_original_character)
+
/datum/mind/proc/get_language_holder()
if(!language_holder)
language_holder = new (src)
@@ -125,13 +143,13 @@
key = new_character.key
if(new_character.mind) //disassociate any mind currently in our new body's mind variable
- new_character.mind.current = null
+ new_character.mind.set_current(null)
var/datum/atom_hud/antag/hud_to_transfer = antag_hud//we need this because leave_hud() will clear this list
var/mob/living/old_current = current
if(current)
current.transfer_observers_to(new_character) //transfer anyone observing the old character to the new one
- current = new_character //associate ourself with our new body
+ set_current(new_character) //associate ourself with our new body
new_character.mind = src //and associate our new body with ourself
for(var/a in antag_datums) //Makes sure all antag datums effects are applied in the new body
var/datum/antagonist/A = a
@@ -1704,7 +1722,7 @@ GLOBAL_LIST(objective_choices)
SEND_SIGNAL(src, COMSIG_MOB_ON_NEW_MIND)
if(!mind.name)
mind.name = real_name
- mind.current = src
+ mind.set_current(src)
mind.hide_ckey = client?.prefs?.hide_ckey
/mob/living/carbon/mind_initialize()
diff --git a/code/datums/mood_events/mood_event.dm b/code/datums/mood_events/mood_event.dm
index c125ba054a..7afc4d1e32 100644
--- a/code/datums/mood_events/mood_event.dm
+++ b/code/datums/mood_events/mood_event.dm
@@ -11,6 +11,7 @@
/datum/mood_event/Destroy()
remove_effects()
+ owner = null
return ..()
/datum/mood_event/proc/add_effects(param)
diff --git a/code/datums/mutations/antenna.dm b/code/datums/mutations/antenna.dm
index ad08b8ebdc..54139f74a0 100644
--- a/code/datums/mutations/antenna.dm
+++ b/code/datums/mutations/antenna.dm
@@ -15,7 +15,7 @@
icon_state = "walkietalkie"
/obj/item/implant/radio/antenna/Initialize(mapload)
- ..()
+ . = ..()
if (radio)
radio.name = "internal antenna"
diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm
index add0668950..c666c70463 100644
--- a/code/datums/shuttles.dm
+++ b/code/datums/shuttles.dm
@@ -32,11 +32,17 @@
if(!cached_map)
return
- discover_port_offset()
+ //SPLURT EDIT
+ var/offset = discover_offset(/obj/docking_port/mobile)
+
+ port_x_offset = offset[1]
+ port_y_offset = offset[2]
+ //SPLURT EDIT END
if(!cached_map)
cached_map = null
+/* SPLURT EDIT - Refractored in modular
/datum/map_template/shuttle/proc/discover_port_offset()
var/key
var/list/models = cached_map.grid_models
@@ -56,6 +62,7 @@
return
++xcrd
--ycrd
+*/
/datum/map_template/shuttle/load(turf/T, centered = FALSE, orientation = SOUTH, annihilate = default_annihilate, force_cache = FALSE, rotate_placement_to_orientation = FALSE, register = TRUE)
. = ..()
diff --git a/code/datums/weakrefs.dm b/code/datums/weakrefs.dm
index 31e0c3501b..c243f35f34 100644
--- a/code/datums/weakrefs.dm
+++ b/code/datums/weakrefs.dm
@@ -17,9 +17,10 @@
reference = REF(thing)
/datum/weakref/Destroy(force)
+ var/datum/target = resolve()
+ qdel(target)
if(!force)
return QDEL_HINT_LETMELIVE //Let BYOND autoGC thiswhen nothing is using it anymore.
- var/datum/target = resolve()
target?.weak_reference = null
return ..()
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 98cad49c9c..e0409d4259 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -245,7 +245,7 @@
AA.remove_from_hud(src)
if(reagents)
- qdel(reagents)
+ QDEL_NULL(reagents)
orbiters = null // The component is attached to us normaly and will be deleted elsewhere
diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm
index 446573e2af..8f97e232ae 100644
--- a/code/game/gamemodes/meteor/meteors.dm
+++ b/code/game/gamemodes/meteor/meteors.dm
@@ -131,7 +131,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event
GLOB.meteor_list += src
SSaugury.register_doom(src, threat)
SpinAnimation()
- timerid = QDEL_IN(src, lifetime)
+ timerid = QDEL_IN_STOPPABLE(src, lifetime)
chase_target(target)
/obj/effect/meteor/Bump(atom/A)
diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm
index e1d7737f5c..c19c59448f 100644
--- a/code/game/machinery/_machinery.dm
+++ b/code/game/machinery/_machinery.dm
@@ -175,6 +175,8 @@ Class Procs:
for(var/atom/A in component_parts)
qdel(A)
component_parts.Cut()
+ if(circuit)
+ QDEL_NULL(circuit)
return ..()
/obj/machinery/proc/locate_machinery()
@@ -454,6 +456,7 @@ Class Procs:
for(var/obj/item/I in component_parts)
I.forceMove(loc)
LAZYCLEARLIST(component_parts)
+ circuit = null
qdel(src)
/obj/machinery/proc/spawn_frame(disassembled)
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index cc8bab617d..d4112b1418 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -440,8 +440,10 @@ GLOBAL_LIST_EMPTY(cryopod_computers)
else
if(ishuman(mob_occupant))
var/mob/living/carbon/human/H = mob_occupant
- if(H.mind && H.client && H.client.prefs && H == H.mind.original_character)
- H.SaveTCGCards()
+ if(H.mind && H.client && H.client.prefs)
+ var/mob/living/carbon/human/H_original_character = H.mind.original_character?.resolve()
+ if(H_original_character && H == H_original_character)
+ H.SaveTCGCards()
var/list/gear = list()
if(iscarbon(mob_occupant)) // sorry simp-le-mobs deserve no mercy
diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm
index 14a90ff3bf..08fcae1013 100644
--- a/code/game/machinery/launch_pad.dm
+++ b/code/game/machinery/launch_pad.dm
@@ -39,9 +39,10 @@
MA.plane = 0
holder.appearance = MA
update_indicator()
-
+
/obj/machinery/launchpad/Destroy()
- qdel(hud_list[DIAG_LAUNCHPAD_HUD])
+ for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds)
+ diag_hud.remove_from_hud(src)
return ..()
/obj/machinery/launchpad/examine(mob/user)
@@ -229,7 +230,9 @@
src.briefcase = briefcase
/obj/machinery/launchpad/briefcase/Destroy()
- QDEL_NULL(briefcase)
+ if(!QDELETED(briefcase))
+ qdel(briefcase)
+ briefcase = null
return ..()
/obj/machinery/launchpad/briefcase/isAvailable(silent = FALSE)
@@ -271,7 +274,8 @@
/obj/item/storage/briefcase/launchpad/Destroy()
if(!QDELETED(pad))
- QDEL_NULL(pad)
+ qdel(pad)
+ pad = null
return ..()
/obj/item/storage/briefcase/launchpad/PopulateContents()
diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm
index 2bcb9b0762..2d442c745d 100644
--- a/code/game/machinery/navbeacon.dm
+++ b/code/game/machinery/navbeacon.dm
@@ -26,20 +26,13 @@
set_codes()
+ glob_lists_register(init=TRUE)
+
var/turf/T = loc
hide(T.intact)
- if(codes["patrol"])
- if(!GLOB.navbeacons["[z]"])
- GLOB.navbeacons["[z]"] = list()
- GLOB.navbeacons["[z]"] += src //Register with the patrol list!
- if(codes["delivery"])
- GLOB.deliverybeacons += src
- GLOB.deliverybeacontags += location
/obj/machinery/navbeacon/Destroy()
- if (GLOB.navbeacons["[z]"])
- GLOB.navbeacons["[z]"] -= src //Remove from beacon list, if in one.
- GLOB.deliverybeacons -= src
+ glob_lists_deregister()
return ..()
/obj/machinery/navbeacon/onTransitZ(old_z, new_z)
@@ -67,6 +60,26 @@
else
codes[e] = "1"
+/obj/machinery/navbeacon/proc/glob_lists_deregister()
+ if (GLOB.navbeacons["[z]"])
+ GLOB.navbeacons["[z]"] -= src //Remove from beacon list, if in one.
+ GLOB.deliverybeacons -= src
+ GLOB.deliverybeacontags -= location
+
+///Registers the navbeacon to the global beacon lists
+/obj/machinery/navbeacon/proc/glob_lists_register(init=FALSE)
+ if(!init)
+ glob_lists_deregister()
+ if(!codes)
+ return
+ if(codes["patrol"])
+ if(!GLOB.navbeacons["[z]"])
+ GLOB.navbeacons["[z]"] = list()
+ GLOB.navbeacons["[z]"] += src //Register with the patrol list!
+ if(codes["delivery"])
+ GLOB.deliverybeacons += src
+ GLOB.deliverybeacontags += location
+
// called when turf state changes
// hide the object if turf is intact
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index 64c6c93a4a..bd1ea0c483 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -232,6 +232,7 @@
QDEL_NULL(shoes)
QDEL_NULL(mod)
QDEL_NULL(storage)
+ QDEL_NULL(wires)
return ..()
/obj/machinery/suit_storage_unit/update_overlays()
diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm
index a49fb32538..9593066248 100644
--- a/code/game/machinery/telecomms/telecomunications.dm
+++ b/code/game/machinery/telecomms/telecomunications.dm
@@ -97,7 +97,7 @@ GLOBAL_LIST_EMPTY(telecomms_list)
/obj/machinery/telecomms/proc/add_link(obj/machinery/telecomms/T)
var/turf/position = get_turf(src)
var/turf/T_position = get_turf(T)
- if((position.z == T_position.z) || (long_range_link && T.long_range_link))
+ if((position?.z == T_position?.z) || (long_range_link && T.long_range_link))
if(src != T)
for(var/x in autolinkers)
if(x in T.autolinkers)
diff --git a/code/game/objects/effects/anomalies.dm b/code/game/objects/effects/anomalies.dm
index 39f68bc97c..69a7bc906a 100644
--- a/code/game/objects/effects/anomalies.dm
+++ b/code/game/objects/effects/anomalies.dm
@@ -57,7 +57,7 @@
/obj/effect/anomaly/Destroy()
GLOB.poi_list.Remove(src)
STOP_PROCESSING(SSobj, src)
- qdel(countdown)
+ QDEL_NULL(countdown)
if(aSignal)
QDEL_NULL(aSignal)
return ..()
diff --git a/code/game/objects/effects/decals/crayon.dm b/code/game/objects/effects/decals/crayon.dm
index d84b3f15ed..2293c79c1d 100644
--- a/code/game/objects/effects/decals/crayon.dm
+++ b/code/game/objects/effects/decals/crayon.dm
@@ -81,4 +81,4 @@ GLOBAL_LIST(gang_tags)
/obj/effect/decal/cleanable/crayon/gang/Destroy()
LAZYREMOVE(GLOB.gang_tags, src)
- ..()
+ return ..()
diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm
index ce0970acd1..1546991e59 100644
--- a/code/game/objects/effects/landmarks.dm
+++ b/code/game/objects/effects/landmarks.dm
@@ -43,12 +43,12 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark)
qdel(src)
/obj/effect/landmark/start/Initialize(mapload)
+ . = ..()
GLOB.start_landmarks_list += src
if(jobspawn_override)
if(!GLOB.jobspawn_overrides[name])
GLOB.jobspawn_overrides[name] = list()
GLOB.jobspawn_overrides[name] += src
- ..()
if(name != "start")
tag = "start*[name]"
diff --git a/code/game/objects/effects/temporary_visuals/temporary_visual.dm b/code/game/objects/effects/temporary_visuals/temporary_visual.dm
index bf4e82f7b7..29696f5ad7 100644
--- a/code/game/objects/effects/temporary_visuals/temporary_visual.dm
+++ b/code/game/objects/effects/temporary_visuals/temporary_visual.dm
@@ -13,7 +13,7 @@
if(randomdir)
setDir(pick(GLOB.cardinals))
- timerid = QDEL_IN(src, duration)
+ timerid = QDEL_IN_STOPPABLE(src, duration)
/obj/effect/temp_visual/Destroy()
. = ..()
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index e7d9ab1b5c..e70fb5a509 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -209,6 +209,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
LAZYADD(used_skills[path], S.skill_traits)
/obj/item/Destroy()
+ master = null
item_flags &= ~DROPDEL //prevent reqdels
if(ismob(loc))
var/mob/m = loc
diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm
index 4e90858b48..8ebbb8ff8e 100644
--- a/code/game/objects/items/cards_ids.dm
+++ b/code/game/objects/items/cards_ids.dm
@@ -783,6 +783,7 @@
/obj/item/card/id/departmental_budget/Destroy()
SSeconomy.dep_cards -= src
+ registered_account.bank_cards -= src
return ..()
/obj/item/card/id/departmental_budget/update_label()
diff --git a/code/game/objects/items/chrono_eraser.dm b/code/game/objects/items/chrono_eraser.dm
index 8c510bb489..938f24fc2a 100644
--- a/code/game/objects/items/chrono_eraser.dm
+++ b/code/game/objects/items/chrono_eraser.dm
@@ -130,6 +130,11 @@
if(istype(C))
gun = C.gun
+/obj/item/projectile/energy/chrono_beam/Destroy()
+ gun = null
+ return ..()
+
+
/obj/item/projectile/energy/chrono_beam/on_hit(atom/target)
if(target && gun && isliving(target))
var/obj/effect/chrono_field/F = new(target.loc, target, gun)
@@ -148,7 +153,9 @@
gun = loc
. = ..()
-
+/obj/item/ammo_casing/energy/chrono_beam/Destroy()
+ gun = null
+ return ..()
diff --git a/code/game/objects/items/crab17.dm b/code/game/objects/items/crab17.dm
index b71b520517..c42db9624f 100644
--- a/code/game/objects/items/crab17.dm
+++ b/code/game/objects/items/crab17.dm
@@ -81,6 +81,14 @@
addtimer(CALLBACK(src, .proc/startUp), 50)
QDEL_IN(src, 8 MINUTES) //Self destruct after 8 min
+/obj/structure/checkoutmachine/Destroy()
+ bogdanoff = null
+ stop_dumping()
+ STOP_PROCESSING(SSfastprocess, src)
+ priority_announce("The credit deposit machine at [get_area(src)] has been destroyed. Station funds have stopped draining!", sender_override = "CRAB-17 Protocol")
+ explosion(src, 0,0,1, flame_range = 2)
+ return ..()
+
/obj/structure/checkoutmachine/proc/startUp() //very VERY snowflake code that adds a neat animation when the pod lands.
start_dumping() //The machine doesnt move during this time, giving people close by a small window to grab their funds before it starts running around
@@ -145,13 +153,6 @@
canwalk = TRUE
START_PROCESSING(SSfastprocess, src)
-/obj/structure/checkoutmachine/Destroy()
- stop_dumping()
- STOP_PROCESSING(SSfastprocess, src)
- priority_announce("The credit deposit machine at [get_area(src)] has been destroyed. Station funds have stopped draining!", sender_override = "CRAB-17 Protocol")
- explosion(src, 0,0,1, flame_range = 2)
- return ..()
-
/obj/structure/checkoutmachine/proc/start_dumping()
accounts_to_rob = SSeconomy.bank_accounts.Copy()
accounts_to_rob -= bogdanoff.get_bank_account()
@@ -220,7 +221,10 @@
playsound(src, 'sound/weapons/mortar_whistle.ogg', 70, TRUE, 6)
addtimer(CALLBACK(src, .proc/endLaunch), 5, TIMER_CLIENT_TIME) //Go onto the last step after a very short falling animation
-
+/obj/effect/dumpeetTarget/Destroy()
+ dump = null
+ bogdanoff = null
+ return ..()
/obj/effect/dumpeetTarget/proc/endLaunch()
QDEL_NULL(DF) //Delete the falling machine effect, because at this point its animation is over. We dont use temp_visual because we want to manually delete it as soon as the pod appears
diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm
index 8656cc21f1..da252a3226 100644
--- a/code/game/objects/items/devices/chameleonproj.dm
+++ b/code/game/objects/items/devices/chameleonproj.dm
@@ -175,5 +175,7 @@
return
/obj/effect/dummy/chameleon/Destroy()
- master.disrupt(0)
+ if(master)
+ master.disrupt(0)
+ master = null
return ..()
diff --git a/code/game/objects/items/devices/forcefieldprojector.dm b/code/game/objects/items/devices/forcefieldprojector.dm
index 47c3bc8d13..58fafbc298 100644
--- a/code/game/objects/items/devices/forcefieldprojector.dm
+++ b/code/game/objects/items/devices/forcefieldprojector.dm
@@ -98,8 +98,9 @@
/obj/structure/projected_forcefield/Destroy()
visible_message("[src] flickers and disappears!")
playsound(src,'sound/weapons/resonator_blast.ogg',25,1)
- generator.current_fields -= src
- generator = null
+ if(generator)
+ generator.current_fields -= src
+ generator = null
return ..()
/obj/structure/projected_forcefield/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
@@ -108,4 +109,5 @@
/obj/structure/projected_forcefield/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir)
if(sound_effect)
play_attack_sound(damage_amount, damage_type, damage_flag)
- generator.shield_integrity = max(generator.shield_integrity - damage_amount, 0)
+ if(generator)
+ generator.shield_integrity = max(generator.shield_integrity - damage_amount, 0)
diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm
index 015d03e701..5280bac0ce 100644
--- a/code/game/objects/items/devices/radio/headset.dm
+++ b/code/game/objects/items/devices/radio/headset.dm
@@ -270,10 +270,6 @@ GLOBAL_LIST_INIT(channel_tokens, list(
name = "\proper mini Integrated Subspace Transceiver "
subspace_transmission = FALSE
-/obj/item/radio/headset/silicon/pai/ComponentInitialize()
- . = ..()
- AddElement(/datum/element/empprotection, EMP_PROTECT_WIRES)
-
/obj/item/radio/headset/silicon/pai/emp_act(severity)
. = ..()
return EMP_PROTECT_SELF
diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm
index fc777629e6..7aafd729ea 100644
--- a/code/game/objects/items/devices/transfer_valve.dm
+++ b/code/game/objects/items/devices/transfer_valve.dm
@@ -19,6 +19,23 @@
/obj/item/transfer_valve/IsAssemblyHolder()
return TRUE
+/obj/item/transfer_valve/Destroy()
+ attached_device = null
+ QDEL_NULL(tank_one)
+ QDEL_NULL(tank_two)
+ return ..()
+
+/obj/item/transfer_valve/handle_atom_del(atom/deleted_atom)
+ . = ..()
+ if(deleted_atom == tank_one)
+ tank_one = null
+ update_appearance()
+ return
+ if(deleted_atom == tank_two)
+ tank_two = null
+ update_appearance()
+ return
+
/obj/item/transfer_valve/attackby(obj/item/item, mob/user, params)
if(istype(item, /obj/item/tank))
if(tank_one && tank_two)
diff --git a/code/game/objects/items/grenades/clusterbuster.dm b/code/game/objects/items/grenades/clusterbuster.dm
index 9980ff34ce..94438652ee 100644
--- a/code/game/objects/items/grenades/clusterbuster.dm
+++ b/code/game/objects/items/grenades/clusterbuster.dm
@@ -70,7 +70,8 @@
/////////////////////////////////
/obj/effect/payload_spawner/Initialize(mapload, type, numspawned)
..()
- spawn_payload(type, numspawned)
+ if(type && isnum(numspawned))
+ spawn_payload(type, numspawned)
return INITIALIZE_HINT_QDEL
/obj/effect/payload_spawner/proc/spawn_payload(type, numspawned)
diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm
index 9c5f1475fd..1ae396b28b 100644
--- a/code/game/objects/items/grenades/plastic.dm
+++ b/code/game/objects/items/grenades/plastic.dm
@@ -33,7 +33,7 @@
qdel(nadeassembly)
nadeassembly = null
target = null
- ..()
+ return ..()
/obj/item/grenade/plastic/attackby(obj/item/I, mob/user, params)
if(!nadeassembly && istype(I, /obj/item/assembly_holder))
diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm
index b389efe542..f80538b015 100644
--- a/code/game/objects/items/melee/energy.dm
+++ b/code/game/objects/items/melee/energy.dm
@@ -332,6 +332,10 @@
spark_system.set_up(5, 0, src)
spark_system.attach(src)
+/obj/item/melee/transforming/energy/blade/Destroy()
+ QDEL_NULL(spark_system)
+ . = ..()
+
/obj/item/melee/transforming/energy/blade/transform_weapon(mob/living/user, supress_message_text)
return
diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm
index e60871dec7..c033aec648 100644
--- a/code/game/objects/items/plushes.dm
+++ b/code/game/objects/items/plushes.dm
@@ -467,7 +467,7 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths())
can_random_spawn = FALSE
/obj/item/toy/plush/random/Initialize(mapload)
- ..()
+ . = ..()
var/newtype
var/list/snowflake_list = CONFIG_GET(keyed_list/snowflake_plushies)
diff --git a/code/game/objects/items/religion.dm b/code/game/objects/items/religion.dm
index 20a2aae52a..59ca56ff8a 100644
--- a/code/game/objects/items/religion.dm
+++ b/code/game/objects/items/religion.dm
@@ -294,19 +294,13 @@
name = "Crusader's Armour Set" //i can't into ck2 references
desc = "This armour is said to be based on the armor of kings on another world thousands of years ago, who tended to assassinate, conspire, and plot against everyone who tried to do the same to them. Some things never change."
-/obj/item/storage/box/itemset/crusader/blue/New()
- ..()
- contents = list()
- sleep(1)
+/obj/item/storage/box/itemset/crusader/blue/PopulateContents()
new /obj/item/clothing/suit/armor/plate/crusader/blue(src)
new /obj/item/clothing/head/helmet/plate/crusader/blue(src)
new /obj/item/clothing/gloves/plate/blue(src)
new /obj/item/clothing/shoes/plate/blue(src)
-/obj/item/storage/box/itemset/crusader/red/New()
- ..()
- contents = list()
- sleep(1)
+/obj/item/storage/box/itemset/crusader/red/PopulateContents()
new /obj/item/clothing/suit/armor/plate/crusader/red(src)
new /obj/item/clothing/head/helmet/plate/crusader/red(src)
new /obj/item/clothing/gloves/plate/red(src)
diff --git a/code/game/objects/items/storage/_storage.dm b/code/game/objects/items/storage/_storage.dm
index cbaa1775eb..af61ee1ea9 100644
--- a/code/game/objects/items/storage/_storage.dm
+++ b/code/game/objects/items/storage/_storage.dm
@@ -16,7 +16,7 @@
AddComponent(component_type)
/obj/item/storage/AllowDrop()
- return TRUE
+ return !QDELETED(src)
/obj/item/storage/contents_explosion(severity, target, origin)
var/in_storage = istype(loc, /obj/item/storage)? (max(0, severity - 1)) : (severity)
diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm
index 1b8e1b1f33..af034ff693 100644
--- a/code/game/objects/items/storage/boxes.dm
+++ b/code/game/objects/items/storage/boxes.dm
@@ -633,7 +633,8 @@
STR.max_items = 8
/obj/item/storage/box/snappops/PopulateContents()
- SEND_SIGNAL(src, COMSIG_TRY_STORAGE_FILL_TYPE, /obj/item/toy/snappop)
+ for(var/i in 1 to 8)
+ new /obj/item/toy/snappop(src)
/obj/item/storage/box/matches
name = "matchbox"
@@ -654,7 +655,8 @@
STR.can_hold = typecacheof(list(/obj/item/match))
/obj/item/storage/box/matches/PopulateContents()
- SEND_SIGNAL(src, COMSIG_TRY_STORAGE_FILL_TYPE, /obj/item/match)
+ for(var/i in 1 to 10)
+ new /obj/item/match(src)
/obj/item/storage/box/matches/attackby(obj/item/match/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/match))
diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm
index 48db846a43..ab9e62bde6 100644
--- a/code/game/objects/items/storage/fancy.dm
+++ b/code/game/objects/items/storage/fancy.dm
@@ -23,6 +23,8 @@
var/fancy_open = FALSE
/obj/item/storage/fancy/PopulateContents()
+ if(!spawn_type)
+ return
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
for(var/i = 1 to STR.max_items)
new spawn_type(src)
diff --git a/code/game/objects/items/summon.dm b/code/game/objects/items/summon.dm
index ca678e2cbb..7cdc540f17 100644
--- a/code/game/objects/items/summon.dm
+++ b/code/game/objects/items/summon.dm
@@ -34,6 +34,10 @@
if(host_type)
host = new host_type(src, summon_count, range)
+/obj/item/summon/Destroy()
+ QDEL_NULL(host)
+ return ..()
+
/obj/item/summon/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
. = ..()
if(!host)
@@ -329,7 +333,9 @@
if(del_no_host)
qdel(src)
return
- HardReset(null)
+ if(animation_timerid)
+ deltimer(animation_timerid)
+ atom.transform = null
atom.moveToNullspace()
return
if(immediate)
diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm
index 188a8763cd..469a715a6b 100644
--- a/code/game/objects/items/tanks/watertank.dm
+++ b/code/game/objects/items/tanks/watertank.dm
@@ -119,11 +119,17 @@
/obj/item/reagent_containers/spray/mister/Initialize(mapload)
. = ..()
+ QDEL_NULL(reagents)
tank = loc
if(!istype(tank))
return INITIALIZE_HINT_QDEL
reagents = tank.reagents //This mister is really just a proxy for the tank's reagents
+/obj/item/reagent_containers/spray/mister/Destroy()
+ tank = null
+ reagents = null
+ return ..()
+
/obj/item/reagent_containers/spray/mister/attack_self()
return
@@ -221,12 +227,18 @@
/obj/item/extinguisher/mini/nozzle/Initialize(mapload)
. = ..()
+ QDEL_NULL(reagents)
tank = loc
if (!istype(tank))
return INITIALIZE_HINT_QDEL
reagents = tank.reagents
max_water = tank.volume
+/obj/item/extinguisher/mini/nozzle/Destroy()
+ reagents = null //This is a borrowed reference from the tank.
+ tank = null
+ return ..()
+
/obj/item/extinguisher/mini/nozzle/doMove(atom/destination)
if(destination && (destination != tank.loc || !ismob(destination)))
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index e968e42bb6..fcd0da3864 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -548,9 +548,10 @@
/obj/effect/decal/cleanable/ash/snappop_phoenix
var/respawn_time = 300
-/obj/effect/decal/cleanable/ash/snappop_phoenix/New()
+/obj/effect/decal/cleanable/ash/snappop_phoenix/Initialize(mapload)
. = ..()
- addtimer(CALLBACK(src, .proc/respawn), respawn_time)
+ if(!QDELETED(src))
+ addtimer(CALLBACK(src, .proc/respawn), respawn_time)
/obj/effect/decal/cleanable/ash/snappop_phoenix/proc/respawn()
new /obj/item/toy/snappop/phoenix(get_turf(src))
diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm
index e2d60fd7d1..636190b548 100644
--- a/code/game/objects/items/weaponry.dm
+++ b/code/game/objects/items/weaponry.dm
@@ -226,9 +226,9 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
/obj/item/claymore/highlander/robot/Initialize(mapload)
var/obj/item/robot_module/kiltkit = loc
robot = kiltkit.loc
+ . = ..()
if(!istype(robot))
- qdel(src)
- return ..()
+ return INITIALIZE_HINT_QDEL
/obj/item/claymore/highlander/robot/process()
loc.layer = LARGE_MOB_LAYER
diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm
index 2c3b0545f8..f1b580dc76 100644
--- a/code/game/objects/structures/bedsheet_bin.dm
+++ b/code/game/objects/structures/bedsheet_bin.dm
@@ -293,7 +293,7 @@ GLOBAL_LIST_INIT(double_bedsheets, list(/obj/item/bedsheet/double,
desc = "If you're reading this description ingame, something has gone wrong! Honk!"
/obj/item/bedsheet/random/Initialize(mapload)
- ..()
+ . = ..()
if(bedsheet_type == BEDSHEET_SINGLE)
var/type = pick(typesof(/obj/item/bedsheet) - (list(/obj/item/bedsheet/random, /obj/item/bedsheet/chameleon) + typesof(/obj/item/bedsheet/unlockable) + GLOB.double_bedsheets))
new type(loc)
@@ -454,7 +454,7 @@ GLOBAL_LIST_INIT(double_bedsheets, list(/obj/item/bedsheet/double,
bedsheet_type = BEDSHEET_DOUBLE
/obj/item/bedsheet/random/double/Initialize(mapload)
- ..()
+ . = ..()
if(bedsheet_type == BEDSHEET_DOUBLE)
var/type = pick(GLOB.double_bedsheets)
new type(loc)
diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm
index d585fd2ebf..f20ad1b6d3 100644
--- a/code/game/objects/structures/displaycase.dm
+++ b/code/game/objects/structures/displaycase.dm
@@ -376,8 +376,9 @@
I = icon('icons/obj/stationobjs.dmi',"laserbox_broken")
if(showpiece)
var/icon/S = getFlatIcon(showpiece)
- S.Scale(17,17)
- I.Blend(S,ICON_UNDERLAY,8,12)
+ if(S)
+ S.Scale(17,17)
+ I.Blend(S,ICON_UNDERLAY,8,12)
src.icon = I
return
diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm
index 4ed55e61a6..5a26fed2bd 100644
--- a/code/game/objects/structures/ghost_role_spawners.dm
+++ b/code/game/objects/structures/ghost_role_spawners.dm
@@ -433,7 +433,7 @@
/obj/effect/mob_spawn/human/hotel_staff/Destroy()
new/obj/structure/fluff/empty_sleeper/syndicate(get_turf(src))
- ..()
+ return ..()
/obj/effect/mob_spawn/human/hotel_staff/special(mob/living/carbon/human/new_spawn)
ADD_TRAIT(new_spawn,TRAIT_EXEMPT_HEALTH_EVENTS,GHOSTROLE_TRAIT)
@@ -457,6 +457,8 @@
/obj/effect/mob_spawn/human/demonic_friend/Initialize(mapload, datum/mind/owner_mind, obj/effect/proc_holder/spell/targeted/summon_friend/summoning_spell)
. = ..()
+ if(!owner_mind)
+ return
owner = owner_mind
flavour_text = "You have been given a reprieve from your eternity of torment, to be [owner.name]'s friend for [owner.p_their()] short mortal coil."
important_info = "Be aware that if you do not live up to [owner.name]'s expectations, they can send you back to hell with a single thought. [owner.name]'s death will also return you to hell."
diff --git a/code/game/objects/structures/guncase.dm b/code/game/objects/structures/guncase.dm
index 78f0da2db2..33803d8e85 100644
--- a/code/game/objects/structures/guncase.dm
+++ b/code/game/objects/structures/guncase.dm
@@ -13,7 +13,7 @@
var/capacity = 4
/obj/structure/guncase/Initialize(mapload)
- ..()
+ . = ..()
if(mapload)
for(var/obj/item/I in loc.contents)
if(istype(I, gun_category))
diff --git a/code/game/objects/structures/manned_turret.dm b/code/game/objects/structures/manned_turret.dm
index f70510e173..25d87aef7d 100644
--- a/code/game/objects/structures/manned_turret.dm
+++ b/code/game/objects/structures/manned_turret.dm
@@ -193,7 +193,7 @@
/obj/item/gun_control/Destroy()
turret = null
- ..()
+ return ..()
/obj/item/gun_control/CanItemAutoclick()
return TRUE
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index 69206f0d08..1f93932c83 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -121,7 +121,8 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an
playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1)
playsound(src, 'sound/effects/roll.ogg', 5, 1)
var/turf/T = get_step(src, dir)
- connected.setDir(dir)
+ if(connected)
+ connected.setDir(dir)
for(var/atom/movable/AM in src)
AM.forceMove(T)
update_icon()
diff --git a/code/game/objects/structures/traps.dm b/code/game/objects/structures/traps.dm
index e6a76f36ca..2c3f01935d 100644
--- a/code/game/objects/structures/traps.dm
+++ b/code/game/objects/structures/traps.dm
@@ -169,6 +169,12 @@
. = ..()
time_between_triggers = 10
+/obj/structure/trap/stun/hunter/Destroy()
+ if(!QDELETED(stored_item))
+ qdel(stored_item)
+ stored_item = null
+ return ..()
+
/obj/structure/trap/stun/hunter/Crossed(atom/movable/AM)
if(isliving(AM))
var/mob/living/L = AM
@@ -179,6 +185,11 @@
/obj/structure/trap/stun/hunter/flare()
..()
+ var/turf/our_turf = get_turf(src)
+ if(!our_turf)
+ return
+ if(!stored_item)
+ return
stored_item.forceMove(get_turf(src))
forceMove(stored_item)
if(caught)
@@ -208,6 +219,12 @@
stored_trap.name = name
stored_trap.stored_item = src
+/obj/item/bountytrap/Destroy()
+ QDEL_NULL(stored_trap)
+ QDEL_NULL(radio)
+ QDEL_NULL(spark_system)
+ . = ..()
+
/obj/item/bountytrap/proc/announce_fugitive()
spark_system.start()
playsound(src, 'sound/machines/ding.ogg', 50, TRUE)
@@ -220,9 +237,3 @@
to_chat(user, "You set up [src]. Examine while close to disarm it.")
stored_trap.forceMove(T)//moves trap to ground
forceMove(stored_trap)//moves item into trap
-
-/obj/item/bountytrap/Destroy()
- qdel(stored_trap)
- QDEL_NULL(radio)
- QDEL_NULL(spark_system)
- . = ..()
diff --git a/code/game/shuttle_engines.dm b/code/game/shuttle_engines.dm
index b0f06a1495..5327ce9419 100644
--- a/code/game/shuttle_engines.dm
+++ b/code/game/shuttle_engines.dm
@@ -72,7 +72,7 @@
/obj/structure/shuttle/engine/Destroy()
if(state == ENGINE_WELDED)
alter_engine_power(-engine_power)
- . = ..()
+ return ..()
//Propagates the change to the shuttle.
/obj/structure/shuttle/engine/proc/alter_engine_power(mod)
diff --git a/code/game/turfs/simulated/lava.dm b/code/game/turfs/simulated/lava.dm
index 943f60e752..a30be94cc2 100644
--- a/code/game/turfs/simulated/lava.dm
+++ b/code/game/turfs/simulated/lava.dm
@@ -48,6 +48,7 @@
initial_gas_mix = AIRLESS_ATMOS
/turf/open/lava/Entered(atom/movable/AM)
+ . = ..()
if(burn_stuff(AM))
START_PROCESSING(SSobj, src)
@@ -126,7 +127,6 @@
///Proc that sets on fire something or everything on the turf that's not immune to lava. Returns TRUE to make the turf start processing.
/turf/open/lava/proc/burn_stuff(atom/movable/to_burn, delta_time = 1)
-
if(is_safe())
return FALSE
diff --git a/code/game/turfs/simulated/openspace.dm b/code/game/turfs/simulated/openspace.dm
index 7dcdd1da32..35030d72c3 100644
--- a/code/game/turfs/simulated/openspace.dm
+++ b/code/game/turfs/simulated/openspace.dm
@@ -168,6 +168,8 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr
/turf/open/openspace/icemoon/Initialize(mapload)
. = ..()
var/turf/T = below()
+ if(!T)
+ return
if(T.flags_1 & NO_RUINS_1 && protect_ruin)
ChangeTurf(replacement_turf, null, CHANGETURF_IGNORE_AIR)
return
diff --git a/code/game/turfs/space/transit.dm b/code/game/turfs/space/transit.dm
index ed3b20fce4..fae12cc51e 100644
--- a/code/game/turfs/space/transit.dm
+++ b/code/game/turfs/space/transit.dm
@@ -92,9 +92,11 @@
_y = min
var/turf/T = locate(_x, _y, _z)
- AM.forceMove(T)
- var/turf/throwturf = get_ranged_target_turf(T, dir, 1)
- AM.safe_throw_at(throwturf, 1, 4, null, FALSE)
+
+ if(!QDELETED(AM))
+ AM.forceMove(T)
+ var/turf/throwturf = get_ranged_target_turf(T, dir, 1)
+ AM.safe_throw_at(throwturf, 1, 4, null, FALSE)
/turf/open/space/transit/CanBuildHere()
diff --git a/code/game/world.dm b/code/game/world.dm
index b1c0128c23..145d634b92 100644
--- a/code/game/world.dm
+++ b/code/game/world.dm
@@ -26,6 +26,10 @@ GLOBAL_LIST(topic_status_cache)
make_datum_references_lists() //initialises global lists for referencing frequently used datums (so that we only ever do it once)
+ #ifdef REFERENCE_DOING_IT_LIVE
+ GLOB.harddel_log = GLOB.world_game_log
+ #endif
+
GLOB.revdata = new
InitTgs()
@@ -140,6 +144,10 @@ GLOBAL_LIST(topic_status_cache)
#ifdef UNIT_TESTS
GLOB.test_log = "[GLOB.log_directory]/tests.log"
start_log(GLOB.test_log)
+#endif
+#ifdef REFERENCE_DOING_IT_LIVE
+ GLOB.harddel_log = "[GLOB.log_directory]/harddels.log"
+ start_log(GLOB.harddel_log)
#endif
start_log(GLOB.world_game_log)
start_log(GLOB.world_attack_log)
diff --git a/code/modules/admin/view_variables/reference_tracking.dm b/code/modules/admin/view_variables/reference_tracking.dm
index 714b54cd45..5953c8cf27 100644
--- a/code/modules/admin/view_variables/reference_tracking.dm
+++ b/code/modules/admin/view_variables/reference_tracking.dm
@@ -134,6 +134,15 @@ GLOBAL_LIST_EMPTY(deletion_failures)
DoSearchVar(GLOB, "GLOB") //globals
log_reftracker("Finished searching globals")
+ //Yes we do actually need to do this. The searcher refuses to read weird lists
+ //And global.vars is a really weird list
+ var/global_vars = list()
+ for(var/key in global.vars)
+ global_vars[key] = global.vars[key]
+
+ DoSearchVar(global_vars, "Native Global", search_time = starting_time)
+ log_reftracker("Finished searching native globals")
+
for(var/datum/thing in world) //atoms (don't beleive its lies)
DoSearchVar(thing, "World -> [thing.type]", search_time = starting_time)
log_reftracker("Finished searching atoms")
@@ -143,9 +152,11 @@ GLOBAL_LIST_EMPTY(deletion_failures)
log_reftracker("Finished searching datums")
//Warning, attempting to search clients like this will cause crashes if done on live. Watch yourself
+#ifndef REFERENCE_DOING_IT_LIVE
for(var/client/thing) //clients
DoSearchVar(thing, "Clients -> [thing.type]", search_time = starting_time)
log_reftracker("Finished searching clients")
+#endif
log_reftracker("Completed search for references to a [type].")
@@ -159,7 +170,7 @@ GLOBAL_LIST_EMPTY(deletion_failures)
/datum/proc/DoSearchVar(potential_container, container_name, recursive_limit = 64, search_time = world.time)
#ifdef REFERENCE_TRACKING_DEBUG
- if(!found_refs && SSgarbage.should_save_refs)
+ if(SSgarbage.should_save_refs && !found_refs)
found_refs = list()
#endif
diff --git a/code/modules/antagonists/blob/blob/blobstrains/synchronous_mesh.dm b/code/modules/antagonists/blob/blob/blobstrains/synchronous_mesh.dm
index ad6b36cf42..1103092366 100644
--- a/code/modules/antagonists/blob/blob/blobstrains/synchronous_mesh.dm
+++ b/code/modules/antagonists/blob/blob/blobstrains/synchronous_mesh.dm
@@ -9,6 +9,7 @@
complementary_color = "#AD6570"
blobbernaut_message = "synchronously strikes"
message = "The blobs strike you"
+ reagent = /datum/reagent/blob/synchronous_mesh
/datum/blobstrain/reagent/synchronous_mesh/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag)
if(damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) //the cause isn't fire or bombs, so split the damage
diff --git a/code/modules/antagonists/blob/blob/overmind.dm b/code/modules/antagonists/blob/blob/overmind.dm
index 5515c67e6b..664db35b19 100644
--- a/code/modules/antagonists/blob/blob/overmind.dm
+++ b/code/modules/antagonists/blob/blob/overmind.dm
@@ -72,19 +72,23 @@ GLOBAL_LIST_EMPTY(blob_nodes)
forceMove(T)
/mob/camera/blob/proc/set_strain(datum/blobstrain/new_strain)
- if (ispath(new_strain))
- var/hadstrain = FALSE
- if (istype(blobstrain))
- blobstrain.on_lose()
- qdel(blobstrain)
- hadstrain = TRUE
- blobstrain = new new_strain(src)
- blobstrain.on_gain()
- if (hadstrain)
- to_chat(src, "Your strain is now: [blobstrain.name]!")
- to_chat(src, "The [blobstrain.name] strain [blobstrain.description]")
- if(blobstrain.effectdesc)
- to_chat(src, "The [blobstrain.name] strain [blobstrain.effectdesc]")
+ if(!ispath(new_strain))
+ return FALSE
+
+ var/had_strain = FALSE
+ if(istype(blobstrain))
+ blobstrain.on_lose()
+ qdel(blobstrain)
+ had_strain = TRUE
+
+ blobstrain = new new_strain(src)
+ blobstrain.on_gain()
+
+ if(had_strain)
+ to_chat(src, "Your strain is now: [blobstrain.name]!")
+ to_chat(src, "The [blobstrain.name] strain [blobstrain.description]")
+ if(blobstrain.effectdesc)
+ to_chat(src, "The [blobstrain.name] strain [blobstrain.effectdesc]")
/mob/camera/blob/proc/is_valid_turf(turf/T)
var/area/A = get_area(T)
diff --git a/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm b/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm
index 79ad69b76f..e5d5de2f08 100644
--- a/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm
+++ b/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm
@@ -35,7 +35,7 @@
clockwork_desc = "A gateway in reality. It can only [sender ? "send" : "receive"] objects."
if(is_stable)
return
- timerid = QDEL_IN(src, lifetime) //We only need this if the gateway is not stable
+ timerid = QDEL_IN_STOPPABLE(src, lifetime) //We only need this if the gateway is not stable
//set up a gateway with another gateway
/obj/effect/clockwork/spatial_gateway/proc/setup_gateway(obj/effect/clockwork/spatial_gateway/gatewayB, set_duration, set_uses, two_way)
@@ -108,12 +108,12 @@
visible_message("[src] is disrupted!")
animate(src, alpha = 0, transform = matrix()*2, time = 10, flags = ANIMATION_END_NOW)
deltimer(timerid)
- timerid = QDEL_IN(src, 10)
+ timerid = QDEL_IN_STOPPABLE(src, 10)
linked_gateway.uses = 0
linked_gateway.visible_message("[linked_gateway] is disrupted!")
animate(linked_gateway, alpha = 0, transform = matrix()*2, time = 10, flags = ANIMATION_END_NOW)
deltimer(linked_gateway.timerid)
- linked_gateway.timerid = QDEL_IN(linked_gateway, 10)
+ linked_gateway.timerid = QDEL_IN_STOPPABLE(linked_gateway, 10)
return TRUE
return FALSE
@@ -279,8 +279,8 @@
/obj/effect/clockwork/spatial_gateway/stable/proc/start_shutdown()
deltimer(timerid)
deltimer(linked_gateway.timerid)
- timerid = QDEL_IN(src, 20)
- linked_gateway.timerid = QDEL_IN(linked_gateway, 20)
+ timerid = QDEL_IN_STOPPABLE(src, 20)
+ linked_gateway.timerid = QDEL_IN_STOPPABLE(linked_gateway, 20)
animate(src, alpha = 0, transform = matrix()*2, time = 20, flags = ANIMATION_END_NOW)
animate(linked_gateway, alpha = 0, transform = matrix()*2, time = 20, flags = ANIMATION_END_NOW)
src.visible_message("[src] begins to destabilise!")
diff --git a/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm
index 92225990dd..30b11bc8f3 100644
--- a/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm
@@ -40,6 +40,24 @@
if(!GLOB.ark_of_the_clockwork_justiciar)
GLOB.ark_of_the_clockwork_justiciar = src
+/obj/structure/destructible/clockwork/massive/celestial_gateway/Destroy()
+ STOP_PROCESSING(SSprocessing, src)
+ if(!purpose_fulfilled)
+ var/area/gate_area = get_area(src)
+ hierophant_message("An Ark of the Clockwork Justicar has fallen at [gate_area.map_name]!")
+ send_to_playing_players(sound(null, 0, channel = CHANNEL_JUSTICAR_ARK))
+ var/was_stranded = SSshuttle.emergency.mode == SHUTTLE_STRANDED
+ SSshuttle.clearHostileEnvironment(src)
+ if(!was_stranded && !purpose_fulfilled)
+ priority_announce("Massive energy anomaly no longer on short-range scanners, bluespace distortions still detected.","Central Command Higher Dimensional Affairs")
+ if(glow)
+ QDEL_NULL(glow)
+ if(countdown)
+ QDEL_NULL(countdown)
+ if(GLOB.ark_of_the_clockwork_justiciar == src)
+ GLOB.ark_of_the_clockwork_justiciar = null
+ . = ..()
+
/obj/structure/destructible/clockwork/massive/celestial_gateway/on_attack_hand(mob/user, act_intent, unarmed_attack_flags)
if(!active && is_servant_of_ratvar(user) && user.canUseTopic(src, !issilicon(user), NO_DEXTERY))
if(alert(user, "Are you sure you want to activate the ark? Once enabled, there will be no turning back.", "Enabling the ark", "Activate!", "Cancel") == "Activate!")
@@ -125,7 +143,7 @@
L.forceMove(pick(open_turfs))
glow = new(get_turf(src))
var/area/gate_area = get_area(src)
- hierophant_message("An Ark of the Clockwork Justicar has been created in [gate_area.map_name]!", FALSE, src)
+ hierophant_message("An Ark of the Clockwork Justicar has been created in [gate_area?.map_name]!", FALSE, src)
/obj/structure/destructible/clockwork/massive/celestial_gateway/proc/initiate_mass_recall()
recalling = TRUE
@@ -149,23 +167,7 @@
transform = matrix() * 2
animate(src, transform = matrix() * 0.5, time = 30, flags = ANIMATION_END_NOW)
-/obj/structure/destructible/clockwork/massive/celestial_gateway/Destroy()
- STOP_PROCESSING(SSprocessing, src)
- if(!purpose_fulfilled)
- var/area/gate_area = get_area(src)
- hierophant_message("An Ark of the Clockwork Justicar has fallen at [gate_area.map_name]!")
- send_to_playing_players(sound(null, 0, channel = CHANNEL_JUSTICAR_ARK))
- var/was_stranded = SSshuttle.emergency.mode == SHUTTLE_STRANDED
- SSshuttle.clearHostileEnvironment(src)
- if(!was_stranded && !purpose_fulfilled)
- priority_announce("Massive energy anomaly no longer on short-range scanners, bluespace distortions still detected.","Central Command Higher Dimensional Affairs")
- if(glow)
- qdel(glow)
- glow = null
- if(countdown)
- qdel(countdown)
- countdown = null
- . = ..()
+
/obj/structure/destructible/clockwork/massive/celestial_gateway/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
diff --git a/code/modules/antagonists/clockcult/clock_structures/taunting_trail.dm b/code/modules/antagonists/clockcult/clock_structures/taunting_trail.dm
index 5305758b25..853acdbe19 100644
--- a/code/modules/antagonists/clockcult/clock_structures/taunting_trail.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/taunting_trail.dm
@@ -16,7 +16,7 @@
/obj/structure/destructible/clockwork/taunting_trail/Initialize(mapload)
. = ..()
- timerid = QDEL_IN(src, 15)
+ timerid = QDEL_IN_STOPPABLE(src, 15)
var/obj/structure/destructible/clockwork/taunting_trail/Tt = locate(/obj/structure/destructible/clockwork/taunting_trail) in loc
if(Tt && Tt != src)
if(!step(src, pick(GLOB.alldirs)))
diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm
index 3373de9ff0..5847510255 100644
--- a/code/modules/antagonists/cult/blood_magic.dm
+++ b/code/modules/antagonists/cult/blood_magic.dm
@@ -357,9 +357,10 @@
/obj/item/melee/blood_magic/Initialize(mapload, spell)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT)
- source = spell
- uses = source.charges
- health_cost = source.health_cost
+ if(spell)
+ source = spell
+ uses = source.charges
+ health_cost = source.health_cost
/obj/item/melee/blood_magic/Destroy()
@@ -374,7 +375,7 @@
source.desc = source.base_desc
source.desc += "
Has [uses] use\s remaining."
source.UpdateButtonIcon()
- ..()
+ return ..()
/obj/item/melee/blood_magic/attack_self(mob/living/user)
afterattack(user, user, TRUE)
diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm
index a522285210..d31cf6f69d 100644
--- a/code/modules/antagonists/cult/cult_items.dm
+++ b/code/modules/antagonists/cult/cult_items.dm
@@ -137,6 +137,11 @@
jaunt = new(src)
linked_action = new(src)
+/obj/item/cult_bastard/Destroy()
+ QDEL_NULL(jaunt)
+ QDEL_NULL(linked_action)
+ . = ..()
+
/obj/item/cult_bastard/ComponentInitialize()
. = ..()
AddComponent(/datum/component/butchering, 50, 80)
@@ -740,7 +745,7 @@
/obj/item/cult_spear/Destroy()
if(spear_act)
qdel(spear_act)
- ..()
+ return ..()
/obj/item/cult_spear/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
var/turf/T = get_turf(hit_atom)
diff --git a/code/modules/antagonists/devil/imp/imp.dm b/code/modules/antagonists/devil/imp/imp.dm
index 4b2a41db71..bdbeb6f00f 100644
--- a/code/modules/antagonists/devil/imp/imp.dm
+++ b/code/modules/antagonists/devil/imp/imp.dm
@@ -45,7 +45,7 @@
of intentionally harming a fellow devil."
/mob/living/simple_animal/imp/Initialize(mapload)
- ..()
+ . = ..()
boost = world.time + 30
/mob/living/simple_animal/imp/BiologicalLife(delta_time, times_fired)
diff --git a/code/modules/antagonists/devil/true_devil/_true_devil.dm b/code/modules/antagonists/devil/true_devil/_true_devil.dm
index eb52a16462..ae4a9599d4 100644
--- a/code/modules/antagonists/devil/true_devil/_true_devil.dm
+++ b/code/modules/antagonists/devil/true_devil/_true_devil.dm
@@ -29,7 +29,7 @@
create_bodyparts() //initialize bodyparts
create_internal_organs()
grant_all_languages()
- ..()
+ . = ..()
/mob/living/carbon/true_devil/create_internal_organs()
internal_organs += new /obj/item/organ/brain
diff --git a/code/modules/antagonists/eldritch_cult/eldritch_items.dm b/code/modules/antagonists/eldritch_cult/eldritch_items.dm
index 58e0193de5..de0ca6b715 100644
--- a/code/modules/antagonists/eldritch_cult/eldritch_items.dm
+++ b/code/modules/antagonists/eldritch_cult/eldritch_items.dm
@@ -314,6 +314,10 @@
. = ..()
linked_action = new(src)
+/obj/item/melee/rune_knife/Destroy()
+ QDEL_NULL(linked_action)
+ . = ..()
+
/obj/item/melee/rune_knife/pickup(mob/user)
. = ..()
linked_action.Grant(user, src)
diff --git a/code/modules/antagonists/revenant/revenant.dm b/code/modules/antagonists/revenant/revenant.dm
index f05321487f..7f533c87b4 100644
--- a/code/modules/antagonists/revenant/revenant.dm
+++ b/code/modules/antagonists/revenant/revenant.dm
@@ -453,7 +453,7 @@
/obj/item/ectoplasm/revenant/Destroy()
if(!QDELETED(revenant))
qdel(revenant)
- ..()
+ return ..()
/proc/RevenantThrow(over, mob/user, obj/item/throwable)
var/mob/living/simple_animal/revenant/spooker = user
diff --git a/code/modules/antagonists/slaughter/slaughter.dm b/code/modules/antagonists/slaughter/slaughter.dm
index d2b698bce4..1c74c0a2c6 100644
--- a/code/modules/antagonists/slaughter/slaughter.dm
+++ b/code/modules/antagonists/slaughter/slaughter.dm
@@ -71,7 +71,7 @@
var/datum/action/cooldown/slam
/mob/living/simple_animal/slaughter/Initialize(mapload)
- ..()
+ . = ..()
var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new
AddSpell(bloodspell)
slam = new /datum/action/cooldown/slam
diff --git a/code/modules/antagonists/swarmer/swarmer.dm b/code/modules/antagonists/swarmer/swarmer.dm
index 4c48ad81dd..eb08d91f7d 100644
--- a/code/modules/antagonists/swarmer/swarmer.dm
+++ b/code/modules/antagonists/swarmer/swarmer.dm
@@ -194,9 +194,11 @@
return 0
/obj/item/IntegrateAmount() //returns the amount of resources gained when eating this item
+ . = ..()
+ if(!custom_materials)
+ return
if(custom_materials[SSmaterials.GetMaterialRef(/datum/material/iron)] || custom_materials[SSmaterials.GetMaterialRef(/datum/material/glass)])
return 1
- return ..()
/obj/item/gun/swarmer_act()//Stops you from eating the entire armory
return FALSE
diff --git a/code/modules/arousal/organs/penis.dm b/code/modules/arousal/organs/penis.dm
index 46dc8bb19c..e2040bcf13 100644
--- a/code/modules/arousal/organs/penis.dm
+++ b/code/modules/arousal/organs/penis.dm
@@ -88,7 +88,10 @@
if(T.taur_mode & S.accepted_taurs) //looks out of place on those.
lowershape = "taur, [lowershape]"
- desc = "You see [aroused_state ? "an erect" : "a flaccid"] [lowershape] [name]. You estimate it's about [round(length*get_size(owner), 0.25)] inch[round(length*get_size(owner), 0.25) != 1 ? "es" : ""] long and [round(diameter*get_size(owner), 0.25)] inch[round(diameter*get_size(owner), 0.25) != 1 ? "es" : ""] in diameter."
+ var/adjusted_length = round(length * (owner ? get_size(owner) : 1), 0.25)
+ var/adjusted_diameter = round(diameter * (owner ? get_size(owner) : 1), 0.25)
+
+ desc = "You see [aroused_state ? "an erect" : "a flaccid"] [lowershape] [name]. You estimate it's about [adjusted_length] inch[adjusted_length != 1 ? "es" : ""] long and [adjusted_diameter] inch[adjusted_diameter != 1 ? "es" : ""] in diameter."
/obj/item/organ/genital/penis/get_features(mob/living/carbon/human/H)
var/datum/dna/D = H.dna
diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm
index 5eb1f77fd7..de3603ed64 100644
--- a/code/modules/assembly/flash.dm
+++ b/code/modules/assembly/flash.dm
@@ -234,6 +234,10 @@
var/obj/item/organ/cyberimp/arm/flash/I = null
var/active_light_strength = 7
+/obj/item/assembly/flash/armimplant/Destroy()
+ I = null
+ return ..()
+
/obj/item/assembly/flash/armimplant/burn_out()
if(I && I.owner)
to_chat(I.owner, "Your photon projector implant overheats and deactivates!")
diff --git a/code/modules/awaymissions/capture_the_flag.dm b/code/modules/awaymissions/capture_the_flag.dm
index bb756076ac..b426b3082a 100644
--- a/code/modules/awaymissions/capture_the_flag.dm
+++ b/code/modules/awaymissions/capture_the_flag.dm
@@ -173,7 +173,7 @@
/obj/machinery/capture_the_flag/Destroy()
GLOB.poi_list.Remove(src)
- ..()
+ return ..()
/obj/machinery/capture_the_flag/process(delta_time)
for(var/i in spawned_mobs)
@@ -642,7 +642,7 @@
invisibility = 0
/obj/effect/ctf/ammo/Initialize(mapload)
- ..()
+ . = ..()
QDEL_IN(src, AMMO_DROP_LIFETIME)
/obj/effect/ctf/ammo/Crossed(atom/movable/AM)
@@ -681,6 +681,11 @@
for(var/obj/machinery/capture_the_flag/CTF in GLOB.machines)
CTF.dead_barricades += src
+/obj/effect/ctf/dead_barricade/Destroy(force)
+ for(var/obj/machinery/capture_the_flag/CTF in GLOB.machines)
+ CTF.dead_barricades -= src
+ return ..()
+
/obj/effect/ctf/dead_barricade/proc/respawn()
if(!QDELETED(src))
new /obj/structure/barricade/security/ctf(get_turf(src))
diff --git a/code/modules/awaymissions/mission_code/Cabin.dm b/code/modules/awaymissions/mission_code/Cabin.dm
index b5ff23d75b..c244431b22 100644
--- a/code/modules/awaymissions/mission_code/Cabin.dm
+++ b/code/modules/awaymissions/mission_code/Cabin.dm
@@ -44,7 +44,7 @@
var/active = 1
/obj/structure/firepit/Initialize(mapload)
- ..()
+ . = ..()
toggleFirepit()
/obj/structure/firepit/interact(mob/living/user)
diff --git a/code/modules/buildmode/effects/line.dm b/code/modules/buildmode/effects/line.dm
index d21c0787fa..dfcfd86475 100644
--- a/code/modules/buildmode/effects/line.dm
+++ b/code/modules/buildmode/effects/line.dm
@@ -3,6 +3,9 @@
var/client/cl
/obj/effect/buildmode_line/New(client/C, atom/atom_a, atom/atom_b, linename)
+ if(!C || !atom_a || !atom_b)
+ stack_trace("Buildmode effect created with odd inputs")
+ return
name = linename
loc = get_turf(atom_a)
I = image('icons/misc/mark.dmi', src, "line", 19.0)
diff --git a/code/modules/cargo/gondolapod.dm b/code/modules/cargo/gondolapod.dm
index 70431d6447..cbc4f088cd 100644
--- a/code/modules/cargo/gondolapod.dm
+++ b/code/modules/cargo/gondolapod.dm
@@ -28,6 +28,9 @@
var/obj/structure/closet/supplypod/centcompod/linked_pod
/mob/living/simple_animal/pet/gondola/gondolapod/Initialize(mapload, pod)
+ if(!pod)
+ stack_trace("Gondola pod created with no pod")
+ return INITIALIZE_HINT_QDEL
linked_pod = pod
name = linked_pod.name
. = ..()
@@ -71,6 +74,6 @@
update_icon()
/mob/living/simple_animal/pet/gondola/gondolapod/death()
- qdel(linked_pod) //Will cause the open() proc for the linked supplypod to be called with the "broken" parameter set to true, meaning that it will dump its contents on death
+ QDEL_NULL(linked_pod) //Will cause the open() proc for the linked supplypod to be called with the "broken" parameter set to true, meaning that it will dump its contents on death
qdel(src)
..()
diff --git a/code/modules/cargo/supplypod.dm b/code/modules/cargo/supplypod.dm
index 36086f56b8..b0b77ec2b4 100644
--- a/code/modules/cargo/supplypod.dm
+++ b/code/modules/cargo/supplypod.dm
@@ -538,6 +538,9 @@
/obj/effect/pod_landingzone_effect/Initialize(mapload, obj/structure/closet/supplypod/pod)
. = ..()
+ if(!pod)
+ stack_trace("Pod landingzone effect created with no pod")
+ return INITIALIZE_HINT_QDEL
transform = matrix() * 1.5
animate(src, transform = matrix()*0.01, time = pod.delays[POD_TRANSIT]+pod.delays[POD_FALLING])
@@ -556,6 +559,9 @@
/obj/effect/pod_landingzone/Initialize(mapload, podParam, single_order = null, clientman)
. = ..()
+ if(!podParam)
+ stack_trace("Pod landingzone created with no pod")
+ return INITIALIZE_HINT_QDEL
if (ispath(podParam)) //We can pass either a path for a pod (as expressconsoles do), or a reference to an instantiated pod (as the centcom_podlauncher does)
podParam = new podParam() //If its just a path, instantiate it
pod = podParam
diff --git a/code/modules/client/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm
index 93f91ad3a0..a1253acffb 100644
--- a/code/modules/client/verbs/ooc.dm
+++ b/code/modules/client/verbs/ooc.dm
@@ -234,7 +234,7 @@ GLOBAL_VAR_INIT(normal_ooc_colour, "#002eb8")
var/list/choices = list()
for(var/client/C in GLOB.clients)
if(isobserver(C.mob) && see_ghost_names)
- choices["[C.mob]([C])"] = C
+ choices["[C]"] = C //NONMODULARITY NOTE: Removes the ability to link CKEYs to Characters. Always reapply for privacy reasons.
else
choices[C] = C
choices = sortList(choices)
diff --git a/code/modules/clothing/gloves/mittens.dm b/code/modules/clothing/gloves/mittens.dm
index 2d00da6780..b5cd5e79c7 100644
--- a/code/modules/clothing/gloves/mittens.dm
+++ b/code/modules/clothing/gloves/mittens.dm
@@ -13,7 +13,7 @@
/obj/item/clothing/gloves/mittens/random
/obj/item/clothing/gloves/mittens/random/Initialize(mapload)
- ..()
+ . = ..()
var/colours = list("black", "yellow", "lightbrown", "brown", "orange", "red", "purple", "green", "blue", "kitten")
var/picked_c = pick(colours)
if(picked_c == "kitten")
diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm
index a2d13822f8..3e68c15788 100644
--- a/code/modules/clothing/masks/gasmask.dm
+++ b/code/modules/clothing/masks/gasmask.dm
@@ -56,7 +56,7 @@
/obj/item/clothing/mask/gas/welding/up
/obj/item/clothing/mask/gas/welding/up/Initialize(mapload)
- ..()
+ . = ..()
visor_toggling()
diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm
index c946002fa2..274663a3b1 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -313,6 +313,10 @@
if(istype(loc, /obj/item/clothing/suit/space/hardsuit/syndi))
linkedsuit = loc
+/obj/item/clothing/head/helmet/space/hardsuit/syndi/Destroy()
+ linkedsuit = null
+ return ..()
+
/obj/item/clothing/head/helmet/space/hardsuit/syndi/attack_self(mob/user) //Toggle Helmet
if(!isturf(user.loc))
to_chat(user, "You cannot toggle your helmet while in this [user.loc]!" )
@@ -526,6 +530,10 @@
. = ..()
bomb_radar = new /obj/machinery/doppler_array/integrated(src)
+/obj/item/clothing/head/helmet/space/hardsuit/rd/Destroy()
+ QDEL_NULL(bomb_radar)
+ return ..()
+
/obj/item/clothing/head/helmet/space/hardsuit/rd/equipped(mob/living/carbon/human/user, slot)
..()
if (slot == ITEM_SLOT_HEAD)
@@ -700,6 +708,10 @@
. = ..()
bomb_radar = new /obj/machinery/doppler_array/integrated(src)
+/obj/item/clothing/head/helmet/space/hardsuit/ancient/mason/Destroy()
+ QDEL_NULL(bomb_radar)
+ return ..()
+
/obj/item/clothing/head/helmet/space/hardsuit/ancient/mason/equipped(mob/living/carbon/human/user, slot)
..()
if (slot == ITEM_SLOT_HEAD)
@@ -965,7 +977,7 @@
var/energy_color = "#35FFF0"
/obj/item/clothing/suit/space/hardsuit/lavaknight/Initialize(mapload)
- ..()
+ . = ..()
light_color = energy_color
set_light(1)
update_icon()
diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm
index 25cbf27cf6..864e3ff808 100644
--- a/code/modules/clothing/suits/toggles.dm
+++ b/code/modules/clothing/suits/toggles.dm
@@ -153,8 +153,8 @@
/obj/item/clothing/suit/space/hardsuit/Destroy()
if(helmet)
helmet.suit = null
- qdel(helmet)
- qdel(jetpack)
+ QDEL_NULL(helmet)
+ QDEL_NULL(jetpack)
return ..()
/obj/item/clothing/head/helmet/space/hardsuit/Destroy()
diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm
index 8d6c5a6c4b..4c9dea45b7 100644
--- a/code/modules/clothing/under/color.dm
+++ b/code/modules/clothing/under/color.dm
@@ -12,7 +12,7 @@
icon_state = "random_jumpsuit"
/obj/item/clothing/under/color/random/Initialize(mapload)
- ..()
+ . = ..()
var/obj/item/clothing/under/color/C = pick(typesof(/obj/item/clothing/under/color) - subtypesof(/obj/item/clothing/under/color/jumpskirt) - /obj/item/clothing/under/color/random - /obj/item/clothing/under/color/grey/glorf - /obj/item/clothing/under/color/black/ghost)
if(ishuman(loc))
@@ -26,7 +26,7 @@
icon_state = "random_jumpsuit" //Skirt variant needed
/obj/item/clothing/under/color/jumpskirt/random/Initialize(mapload)
- ..()
+ . = ..()
var/obj/item/clothing/under/color/jumpskirt/C = pick(subtypesof(/obj/item/clothing/under/color/jumpskirt) - /obj/item/clothing/under/color/jumpskirt/random)
if(ishuman(loc))
var/mob/living/carbon/human/H = loc
diff --git a/code/modules/detectivework/detective_work.dm b/code/modules/detectivework/detective_work.dm
index 3b1b00fc3a..81eaa8b70d 100644
--- a/code/modules/detectivework/detective_work.dm
+++ b/code/modules/detectivework/detective_work.dm
@@ -67,7 +67,7 @@
//Set ignoregloves to add prints irrespective of the mob having gloves on.
/atom/proc/add_fingerprint(mob/living/M, ignoregloves = FALSE)
- if(!M || !M.key)
+ if(!istype(M))
return
add_hiddenprint(M)
diff --git a/code/modules/error_handler/error_handler.dm b/code/modules/error_handler/error_handler.dm
index 6a3d2c2233..4c6c105eb7 100644
--- a/code/modules/error_handler/error_handler.dm
+++ b/code/modules/error_handler/error_handler.dm
@@ -128,7 +128,7 @@ GLOBAL_VAR_INIT(total_runtimes_skipped, 0)
#ifdef UNIT_TESTS
if(GLOB.current_test)
//good day, sir
- GLOB.current_test.Fail("[main_line]\n[desclines.Join("\n")]")
+ GLOB.current_test.Fail("[main_line]\n[desclines.Join("\n")]", file = E.file, line = E.line)
#endif
diff --git a/code/modules/events/travelling_trader.dm b/code/modules/events/travelling_trader.dm
index ac9d103f5f..acc5324dc5 100644
--- a/code/modules/events/travelling_trader.dm
+++ b/code/modules/events/travelling_trader.dm
@@ -118,7 +118,7 @@
smoke.set_up(1, loc)
smoke.start()
visible_message("[src] disappears in a puff of smoke, leaving something on the ground!")
- ..()
+ return ..()
//travelling trader subtypes (the types that can actually spawn)
//so far there's: cook / botanist / bartender / animal hunter / artifact dealer / surgeon (6 types!)
@@ -144,7 +144,7 @@
requested_item = result
else
requested_item = /obj/item/reagent_containers/food/snacks/copypasta
- ..()
+ . = ..()
//botanist
/mob/living/carbon/human/dummy/travelling_trader/gardener
@@ -164,7 +164,7 @@
requested_item = pick(subtypesof(/obj/item/reagent_containers/food/snacks/grown) - list(/obj/item/reagent_containers/food/snacks/grown/shell,
/obj/item/reagent_containers/food/snacks/grown/shell/gatfruit,
/obj/item/reagent_containers/food/snacks/grown/cherry_bomb))
- ..()
+ . = ..()
//animal hunter
/mob/living/carbon/human/dummy/travelling_trader/animal_hunter
@@ -280,7 +280,7 @@
/mob/living/carbon/human/dummy/travelling_trader/artifact_dealer/Initialize(mapload)
possible_rewards += list(pick(subtypesof(/obj/item/clothing/head/collectable)) = 1) //this is slightly lower because it's absolutely useless
- ..()
+ . = ..()
/datum/outfit/artifact_dealer
name = "Artifact Dealer"
diff --git a/code/modules/events/wizard/greentext.dm b/code/modules/events/wizard/greentext.dm
index 1864ad6d20..281c4ba002 100644
--- a/code/modules/events/wizard/greentext.dm
+++ b/code/modules/events/wizard/greentext.dm
@@ -39,6 +39,26 @@
roundend_callback = CALLBACK(src,.proc/check_winner)
SSticker.OnRoundend(roundend_callback)
+/obj/item/greentext/Destroy(force)
+ if(!(resistance_flags & ON_FIRE) && !force)
+ return QDEL_HINT_LETMELIVE
+
+ SSticker.round_end_events -= roundend_callback
+ GLOB.poi_list.Remove(src)
+ roundend_callback = null
+ for(var/i in GLOB.player_list)
+ var/mob/M = i
+ var/message = "A dark temptation has passed from this world"
+ if(M in color_altered_mobs)
+ message += " and you're finally able to forgive yourself"
+ if(M.color == "#FF0000" || M.color == "#00FF00")
+ M.remove_atom_colour(ADMIN_COLOUR_PRIORITY)
+ message += "..."
+ // can't skip the mob check as it also does the decolouring
+ if(!quiet)
+ to_chat(M, message)
+ . = ..()
+
/obj/item/greentext/equipped(mob/living/user as mob)
to_chat(user, "So long as you leave this place with greentext in hand you know will be happy...")
var/list/other_objectives = user.mind.get_all_objectives()
@@ -80,24 +100,7 @@
last_holder.add_atom_colour("#FF0000", ADMIN_COLOUR_PRIORITY)
last_holder = new_holder //long live the king
-/obj/item/greentext/Destroy(force)
- if(!(resistance_flags & ON_FIRE) && !force)
- return QDEL_HINT_LETMELIVE
- SSticker.round_end_events -= roundend_callback
- GLOB.poi_list.Remove(src)
- for(var/i in GLOB.player_list)
- var/mob/M = i
- var/message = "A dark temptation has passed from this world"
- if(M in color_altered_mobs)
- message += " and you're finally able to forgive yourself"
- if(M.color == "#FF0000" || M.color == "#00FF00")
- M.remove_atom_colour(ADMIN_COLOUR_PRIORITY)
- message += "..."
- // can't skip the mob check as it also does the decolouring
- if(!quiet)
- to_chat(M, message)
- . = ..()
/obj/item/greentext/quiet
quiet = TRUE
diff --git a/code/modules/fields/infinite_void.dm b/code/modules/fields/infinite_void.dm
index 8a60976b43..06b656a3a9 100644
--- a/code/modules/fields/infinite_void.dm
+++ b/code/modules/fields/infinite_void.dm
@@ -34,7 +34,8 @@
INVOKE_ASYNC(src, .proc/domain_expansion)
/obj/effect/domain_expansion/Destroy()
- qdel(chronofield)
+ QDEL_NULL(chronofield)
+ target = null
return ..()
/obj/effect/domain_expansion/proc/domain_expansion()
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index e56d5a98d5..6aed1ba7d7 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -106,6 +106,9 @@ GLOBAL_LIST_INIT(hallucination_list, list(
/obj/effect/hallucination/simple/Initialize(mapload, var/mob/living/carbon/T)
. = ..()
+ if(!T)
+ stack_trace("A hallucination was created with no target")
+ return INITIALIZE_HINT_QDEL
target = T
current_image = GetImage()
if(target.client)
diff --git a/code/modules/food_and_drinks/food/snacks/meat.dm b/code/modules/food_and_drinks/food/snacks/meat.dm
index 20bd5880ff..adeef7f91d 100644
--- a/code/modules/food_and_drinks/food/snacks/meat.dm
+++ b/code/modules/food_and_drinks/food/snacks/meat.dm
@@ -278,7 +278,7 @@
visible_message("[src] finishes cooking!")
new /obj/item/reagent_containers/food/snacks/meat/steak/goliath(loc)
qdel(src)
-
+
/obj/item/reagent_containers/food/snacks/meat/slab/dragon
name = "ash drake meat"
desc = "Meat from an ash drake. It's probably not a good idea to eat this raw."
@@ -408,7 +408,7 @@
trash = null
tastes = list("meat" = 1, "rock" = 1)
foodtype = MEAT
-
+
/obj/item/reagent_containers/food/snacks/meat/steak/dragon
name = "dragon steak"
desc = "Spicy."
diff --git a/code/modules/holiday/halloween/halloween.dm b/code/modules/holiday/halloween/halloween.dm
index 59a7fcce0c..28709d0a05 100644
--- a/code/modules/holiday/halloween/halloween.dm
+++ b/code/modules/holiday/halloween/halloween.dm
@@ -43,7 +43,7 @@
var/mob/trapped_mob
/obj/structure/closet/Initialize(mapload)
- ..()
+ . = ..()
if(prob(30))
set_spooky_trap()
diff --git a/code/modules/instruments/songs/_song.dm b/code/modules/instruments/songs/_song.dm
index a0d96658e6..085b5e06c1 100644
--- a/code/modules/instruments/songs/_song.dm
+++ b/code/modules/instruments/songs/_song.dm
@@ -146,6 +146,8 @@
stop_playing()
SSinstruments.on_song_del(src)
lines = null
+ if(using_instrument)
+ using_instrument.songs_using -= src
using_instrument = null
allowed_instrument_ids = null
parent = null
diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm
index 09e91e84a2..d0cd5d53b1 100644
--- a/code/modules/integrated_electronics/subtypes/input.dm
+++ b/code/modules/integrated_electronics/subtypes/input.dm
@@ -654,18 +654,19 @@
/obj/item/integrated_circuit/input/signaler/Initialize(mapload)
. = ..()
- spawn(40)
- set_frequency(frequency)
- // Set the pins so when someone sees them, they won't show as null
- set_pin_data(IC_INPUT, 1, frequency)
- set_pin_data(IC_INPUT, 2, code)
+ addtimer(CALLBACK(src, .proc/init_frequency), 4 SECONDS)
/obj/item/integrated_circuit/input/signaler/Destroy()
SSradio.remove_object(src,frequency)
-
frequency = 0
return ..()
+/obj/item/integrated_circuit/input/signaler/proc/init_frequency()
+ set_frequency(frequency)
+ // Set the pins so when someone sees them, they won't show as null
+ set_pin_data(IC_INPUT, 1, frequency)
+ set_pin_data(IC_INPUT, 2, code)
+
/obj/item/integrated_circuit/input/signaler/on_data_written()
var/new_freq = get_pin_data(IC_INPUT, 1)
var/new_code = get_pin_data(IC_INPUT, 2)
diff --git a/code/modules/integrated_electronics/subtypes/smart.dm b/code/modules/integrated_electronics/subtypes/smart.dm
index ded900c9ad..67a1508b1d 100644
--- a/code/modules/integrated_electronics/subtypes/smart.dm
+++ b/code/modules/integrated_electronics/subtypes/smart.dm
@@ -177,7 +177,7 @@
/obj/item/integrated_circuit/input/mmi_tank/Destroy()
RemoveBrain()
- ..()
+ return ..()
/obj/item/integrated_circuit/input/mmi_tank/relaymove(var/n,var/dir)
set_pin_data(IC_OUTPUT, 2, dir)
@@ -320,7 +320,7 @@
/obj/item/integrated_circuit/input/pAI_connector/Destroy()
RemovepAI()
- ..()
+ return ..()
/obj/item/integrated_circuit/input/pAI_connector/proc/RemovepAI()
if(installed_pai)
diff --git a/code/modules/library/random_books.dm b/code/modules/library/random_books.dm
index be5e9ea6b5..137d1d7b24 100644
--- a/code/modules/library/random_books.dm
+++ b/code/modules/library/random_books.dm
@@ -2,7 +2,7 @@
icon_state = "random_book"
/obj/item/book/manual/random/Initialize(mapload)
- ..()
+ . = ..()
var/static/banned_books = list(/obj/item/book/manual/random, /obj/item/book/manual/nuclear, /obj/item/book/manual/wiki)
var/newtype = pick(subtypesof(/obj/item/book/manual) - banned_books)
new newtype(loc)
diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm
index 794a1cf20a..f89b67d323 100644
--- a/code/modules/mining/equipment/kinetic_crusher.dm
+++ b/code/modules/mining/equipment/kinetic_crusher.dm
@@ -270,6 +270,11 @@
active_style = new /datum/gauntlet_style/brawler
active_style.on_apply(src)
+/obj/item/kinetic_crusher/glaive/gauntlets/Destroy()
+ QDEL_NULL(active_style)
+ current_target = null
+ return ..()
+
/obj/item/kinetic_crusher/glaive/gauntlets/examine(mob/living/user)
. = ..()
. += "According to a very small display, the currently loaded style is \"[active_style.name]\"."
diff --git a/code/modules/mining/equipment/resonator.dm b/code/modules/mining/equipment/resonator.dm
index fd9ff4c91e..ed52f8399e 100644
--- a/code/modules/mining/equipment/resonator.dm
+++ b/code/modules/mining/equipment/resonator.dm
@@ -96,6 +96,7 @@
new /obj/effect/temp_visual/resonance_crush(T)
if(ismineralturf(T))
var/turf/closed/mineral/M = T
+ replicate(M)
M.gets_drilled(creator)
check_pressure(T)
playsound(T,'sound/weapons/resonator_blast.ogg',50,1)
@@ -115,3 +116,10 @@
. = ..()
transform = matrix()*1.5
animate(src, transform = matrix()*0.1, alpha = 50, time = 4)
+
+/obj/effect/temp_visual/resonance/proc/replicate(turf/closed/mineral/M) //yogs start: adds replication to resonator fields
+ if(!istype(M) || !M.mineralType) // so we don't end up in the ultimate chain reaction
+ return
+ for(var/turf/closed/mineral/T in orange(1, M))
+ if(istype(T) && T.mineralType)
+ new /obj/effect/temp_visual/resonance(T, creator, null, duration) //yogs end
diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm
index 18f816699c..83439a7664 100644
--- a/code/modules/mining/fulton.dm
+++ b/code/modules/mining/fulton.dm
@@ -168,7 +168,7 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons)
/obj/structure/extraction_point/Destroy()
GLOB.total_extraction_beacons -= src
- ..()
+ return ..()
/obj/effect/extraction_holder
name = "extraction holder"
diff --git a/code/modules/mining/lavaland/ash_tree.dm b/code/modules/mining/lavaland/ash_tree.dm
index 5dca7a8e2f..e1996d693c 100644
--- a/code/modules/mining/lavaland/ash_tree.dm
+++ b/code/modules/mining/lavaland/ash_tree.dm
@@ -25,7 +25,7 @@
var/sap_amount
/obj/structure/flora/ashtree/Initialize(mapload)
- ..()
+ . = ..()
if(prob(50))
sap = TRUE
icon_state = sap_icon_state
diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index 94a46ce719..db7f586642 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -434,6 +434,12 @@
var/obj/item/warp_cube/linked
var/teleporting = FALSE
+/obj/item/warp_cube/Destroy()
+ if(!QDELETED(linked))
+ linked.linked = null
+ QDEL_NULL(linked)
+ return ..()
+
/obj/item/warp_cube/attack_self(mob/user)
if(!linked)
to_chat(user, "[src] fizzles uselessly.")
@@ -480,6 +486,12 @@
linked = blue
blue.linked = src
+/obj/item/warp_cube/red/Destroy()
+ if(!QDELETED(linked))
+ linked.linked = null
+ QDEL_NULL(linked)
+ return ..()
+
/obj/effect/warp_cube
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
anchored = TRUE
diff --git a/code/modules/mob/dead/new_player/login.dm b/code/modules/mob/dead/new_player/login.dm
index dbcc2cb2b4..e40b467a79 100644
--- a/code/modules/mob/dead/new_player/login.dm
+++ b/code/modules/mob/dead/new_player/login.dm
@@ -5,7 +5,7 @@
if(!mind)
mind = new /datum/mind(key)
mind.active = 1
- mind.current = src
+ mind.set_current(src)
..()
diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm
index 80e63d8fee..0906ba4abe 100644
--- a/code/modules/mob/dead/new_player/new_player.dm
+++ b/code/modules/mob/dead/new_player/new_player.dm
@@ -708,7 +708,7 @@
mind.late_joiner = TRUE
mind.active = 0 //we wish to transfer the key manually
mind.transfer_to(H) //won't transfer key since the mind is not active
- mind.original_character = H
+ mind.set_original_character(H)
H.name = real_name
client.init_verbs()
diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm
index 607370cb07..c74a132300 100644
--- a/code/modules/mob/living/blood.dm
+++ b/code/modules/mob/living/blood.dm
@@ -361,6 +361,8 @@
var/obj/effect/decal/cleanable/blood/B = locate() in T
if(!B)
B = new /obj/effect/decal/cleanable/blood/splatter(T, get_static_viruses())
+ if(QDELETED(B)) //Give it up
+ return
if(B.bloodiness < MAX_SHOE_BLOODINESS) //add more blood, up to a limit
B.bloodiness += BLOOD_AMOUNT_PER_DECAL
B.transfer_mob_blood_dna(src) //give blood info to the blood decal.
diff --git a/code/modules/mob/living/brain/brain.dm b/code/modules/mob/living/brain/brain.dm
index ca9edead48..69dc59f1f8 100644
--- a/code/modules/mob/living/brain/brain.dm
+++ b/code/modules/mob/living/brain/brain.dm
@@ -34,10 +34,11 @@
if(stat!=DEAD) //If not dead.
death(1) //Brains can die again. AND THEY SHOULD AHA HA HA HA HA HA
if(mind) //You aren't allowed to return to brains that don't exist
- mind.current = null
+ mind.set_current(null)
mind.active = FALSE //No one's using it anymore.
ghostize() //Ghostize checks for key so nothing else is necessary.
container = null
+ QDEL_NULL(stored_dna)
return ..()
/mob/living/brain/update_mobility()
diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm
index 66a0827059..b848f49d0c 100644
--- a/code/modules/mob/living/brain/brain_item.dm
+++ b/code/modules/mob/living/brain/brain_item.dm
@@ -286,6 +286,8 @@
if(brainmob)
QDEL_NULL(brainmob)
QDEL_LIST(traumas)
+ if(owner?.mind)
+ owner.mind.set_current(null)
return ..()
//other types of brains
diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
index 71b1d09fad..a63aa11962 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
@@ -17,8 +17,8 @@
var/drooling = 0 //For Neruotoxic spit overlays
bodyparts = list(/obj/item/bodypart/chest/alien, /obj/item/bodypart/head/alien, /obj/item/bodypart/l_arm/alien,
/obj/item/bodypart/r_arm/alien, /obj/item/bodypart/r_leg/alien, /obj/item/bodypart/l_leg/alien)
-
can_ventcrawl = TRUE
+ var/obj/effect/proc_holder/alien/regurgitate/regurg
GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list(
/datum/strippable_item/hand/left,
@@ -29,7 +29,13 @@ GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list(
//This is fine right now, if we're adding organ specific damage this needs to be updated
/mob/living/carbon/alien/humanoid/Initialize(mapload)
- AddAbility(new/obj/effect/proc_holder/alien/regurgitate(null))
+ regurg = new(null)
+ AddAbility(regurg)
+ . = ..()
+
+/mob/living/carbon/alien/humanoid/Destroy()
+ RemoveAbility(regurg)
+ QDEL_NULL(regurg)
. = ..()
/mob/living/carbon/alien/humanoid/ComponentInitialize()
diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm
index 7e1c669e49..4205b4b993 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm
@@ -29,6 +29,7 @@
health = 400
icon_state = "alienq"
var/datum/action/small_sprite/smallsprite = new/datum/action/small_sprite/queen()
+ var/obj/effect/proc_holder/alien/royal/queen/promote/promote
/mob/living/carbon/alien/humanoid/royal/queen/Initialize(mapload)
//there should only be one queen
@@ -44,10 +45,17 @@
real_name = src.name
AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/repulse/xeno(src))
- AddAbility(new/obj/effect/proc_holder/alien/royal/queen/promote())
+ promote = new(null)
+ AddAbility(promote)
smallsprite.Grant(src)
return ..()
+/mob/living/carbon/alien/humanoid/royal/queen/Destroy()
+ RemoveAbility(promote)
+ QDEL_NULL(promote)
+ QDEL_NULL(small_sprite)
+ return ..()
+
/mob/living/carbon/alien/humanoid/royal/queen/create_internal_organs()
internal_organs += new /obj/item/organ/alien/plasmavessel/large/queen
internal_organs += new /obj/item/organ/alien/resinspinner
diff --git a/code/modules/mob/living/carbon/alien/organs.dm b/code/modules/mob/living/carbon/alien/organs.dm
index 2db912fe7e..f452c4997d 100644
--- a/code/modules/mob/living/carbon/alien/organs.dm
+++ b/code/modules/mob/living/carbon/alien/organs.dm
@@ -12,6 +12,9 @@
alien_powers += new A(src)
/obj/item/organ/alien/Destroy()
+ if(owner)
+ Remove(TRUE)
+ owner = null
QDEL_LIST(alien_powers)
return ..()
diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
index a82f77867f..cfbc36cde8 100644
--- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
@@ -447,6 +447,14 @@
var/datum/action/innate/use_extract/major/extract_major
var/extract_cooldown = 0
+/datum/species/jelly/luminescent/Destroy(force)
+ current_extract = null
+ QDEL_NULL(glow)
+ QDEL_NULL(extract_major)
+ QDEL_NULL(integrate_extract)
+ QDEL_NULL(extract_minor)
+ return ..()
+
/datum/species/jelly/luminescent/on_species_loss(mob/living/carbon/C)
..()
if(current_extract)
@@ -621,6 +629,14 @@
if(link_minds)
link_minds.Remove(C)
+//Species datums don't normally implement destroy, but JELLIES SUCK ASS OUT OF A STEEL STRAW ~LemonInTheDark, Tsurupeta
+/datum/species/jelly/stargazer/Destroy()
+ QDEL_NULL(project_thought)
+ QDEL_NULL(link_minds)
+ QDEL_LIST(linked_actions)
+ slimelink_owner = null
+ return ..()
+
/datum/species/jelly/stargazer/spec_death(gibbed, mob/living/carbon/human/H)
..()
for(var/M in linked_mobs)
@@ -673,6 +689,10 @@
..()
species = _species
+/datum/action/innate/linked_speech/Destroy()
+ species = null
+ return ..()
+
/datum/action/innate/linked_speech/Activate()
var/mob/living/carbon/human/H = owner
if(!species || !(H in species.linked_mobs))
@@ -750,6 +770,10 @@
..()
species = _species
+/datum/action/innate/linked_speech/Destroy()
+ species = null
+ return ..()
+
/datum/action/innate/link_minds/Activate()
var/mob/living/carbon/human/H = owner
if(!is_species(H, /datum/species/jelly/stargazer))
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
index c193509870..b53bf01e07 100644
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey.dm
@@ -184,6 +184,9 @@ GLOBAL_LIST_INIT(strippable_monkey_items, create_strippable_list(list(
/mob/living/carbon/monkey/angry/Initialize(mapload)
. = ..()
if(prob(10))
- var/obj/item/clothing/head/helmet/justice/escape/helmet = new(src)
- equip_to_slot_or_del(helmet,ITEM_SLOT_HEAD)
- INVOKE_ASYNC(helmet, /obj/item.proc/attack_self, src) // todo encapsulate toggle
+ INVOKE_ASYNC(src, PROC_REF(give_ape_escape_helmet))
+
+/mob/living/carbon/monkey/angry/proc/give_ape_escape_helmet()
+ var/obj/item/clothing/head/helmet/justice/escape/helmet = new(src)
+ equip_to_slot_or_del(helmet,ITEM_SLOT_HEAD)
+ helmet.attack_self(src) // todo encapsulate toggle
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 084da459f2..e055081123 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -35,6 +35,7 @@
if(buckled)
buckled.unbuckle_mob(src,force=1)
QDEL_LIST_ASSOC_VAL(ability_actions)
+ QDEL_LIST(abilities)
remove_from_all_data_huds()
GLOB.mob_living_list -= src
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index cee739cb79..58887a0cbf 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -187,6 +187,7 @@
// TODO: Why these no work?
// QDEL_NULL(robot_control)
QDEL_NULL(aiMulti)
+ QDEL_NULL(aiPDA)
// QDEL_NULL(alert_control)
malfhack = null
current = null
@@ -1036,9 +1037,9 @@
return
/mob/living/silicon/ai/spawned/Initialize(mapload, datum/ai_laws/L, mob/target_ai)
- . = ..()
if(!target_ai)
target_ai = src //cheat! just give... ourselves as the spawned AI, because that's technically correct
+ . = ..()
/mob/living/silicon/ai/proc/camera_visibility(mob/camera/aiEye/moved_eye)
GLOB.cameranet.visibility(moved_eye, client, all_eyes, USE_STATIC_OPAQUE)
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index 435d1853f6..1787523578 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -85,12 +85,15 @@
var/icon/custom_holoform_icon
/mob/living/silicon/pai/Destroy()
+ QDEL_NULL(signaler)
+ QDEL_NULL(pda)
QDEL_NULL(internal_instrument)
if (loc != card)
card.forceMove(drop_location())
card.pai = null
card.cut_overlays()
card.add_overlay("pai-off")
+ card = null
GLOB.pai_list -= src
return ..()
@@ -111,10 +114,9 @@
//PDA
pda = new(src)
- spawn(5)
- pda.ownjob = "pAI Messenger"
- pda.owner = text("[]", src)
- pda.name = pda.owner + " (" + pda.ownjob + ")"
+ pda.ownjob = "pAI Messenger"
+ pda.owner = text("[]", src)
+ pda.name = pda.owner + " (" + pda.ownjob + ")"
possible_chassis = typelist(NAMEOF(src, possible_chassis), list("cat" = TRUE, "mouse" = TRUE, "monkey" = TRUE, "corgi" = FALSE,
"fox" = FALSE, "repairbot" = TRUE, "rabbit" = TRUE, "borgi" = FALSE ,
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index b5b142604a..96f2ec557b 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -116,17 +116,19 @@
if(connected_ai)
set_connected_ai(null)
if(shell) //??? why would you give an ai radio keys?
- GLOB.available_ai_shells -= src
+ revert_shell()
else
if(T && istype(radio) && istype(radio.keyslot))
radio.keyslot.forceMove(T)
radio.keyslot = null
+ QDEL_LIST(upgrades)
QDEL_NULL(wires)
QDEL_NULL(module)
QDEL_NULL(eye_lights)
QDEL_NULL(inv1)
QDEL_NULL(inv2)
QDEL_NULL(inv3)
+ QDEL_NULL(aiPDA)
cell = null
return ..()
@@ -619,7 +621,7 @@
/mob/living/silicon/robot/proc/SetLockdown(state = TRUE)
// They stay locked down if their wire is cut.
- if(wires.is_cut(WIRE_LOCKDOWN))
+ if(wires?.is_cut(WIRE_LOCKDOWN))
state = TRUE
if(state)
throw_alert("locked", /atom/movable/screen/alert/locked)
@@ -693,7 +695,7 @@
// set_light_color(COLOR_RED) //This should only matter for doomsday borgs, as any other time the lamp will be off and the color not seen
// set_light_range(1) //Again, like above, this only takes effect when the light is forced on by doomsday mode.
lamp_enabled = FALSE
- lampButton.update_icon()
+ lampButton?.update_icon()
update_icons()
return
set_light(lamp_intensity, l_color = (lamp_doom? COLOR_RED : lamp_color))
@@ -701,7 +703,7 @@
// set_light_color(lamp_doom? COLOR_RED : lamp_color) //Red for doomsday killborgs, borg's choice otherwise
// set_light_on(TRUE)
lamp_enabled = TRUE
- lampButton.update_icon()
+ lampButton?.update_icon()
update_icons()
/mob/living/silicon/robot/proc/deconstruct()
@@ -1135,6 +1137,7 @@
for(var/obj/item/borg/upgrade/ai/boris in src)
//A player forced reset of a borg would drop the module before this is called, so this is for catching edge cases
qdel(boris)
+ upgrades -= boris
shell = FALSE
GLOB.available_ai_shells -= src
name = "Unformatted Cyborg-[ident]"
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index bc09c1aa84..97a283619e 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -411,7 +411,8 @@
"Haydee" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "haydeemedical"), // SPLURT Addon (Hyper Port)
"Borgi" = image(icon = 'modular_splurt/icons/mob/widerobot.dmi', icon_state = "borgi-medi-b"), // SPLURT Adoon (Skyrat Port)
"Drake" = image(icon = 'modular_sand/icons/mob/cyborg/drakemech.dmi', icon_state = "drakemedbox"),
- "Assaultron" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "assaultron_medical") // SPLURT Addon
+ "Assaultron" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "assaultron_medical"), // SPLURT Addon
+ "Meka" = image(icon = 'modular_splurt/icons/mob/robots_32x64.dmi', icon_state = "mekamed"), // SPLURT Addon
)
var/list/L = list("Medihound" = "medihound", "Medihound Dark" = "medihounddark", "Vale" = "valemed")
for(var/a in L)
@@ -538,6 +539,10 @@
cyborg_base_icon = "assaultron_medical"
cyborg_icon_override = 'modular_splurt/icons/mob/robots.dmi'
hat_offset = 3
+ if("Meka")
+ cyborg_base_icon = "mekamed"
+ cyborg_icon_override = 'modular_splurt/icons/mob/robots_32x64.dmi'
+ hat_offset = 3
else
return FALSE
return ..()
@@ -611,7 +616,8 @@
"Engihound Dark" = image(icon = 'modular_splurt/icons/mob/widerobot.dmi', icon_state = "engihounddark-b"), // SPLURT Adoon (Skyrat Port)
"Otie" = image(icon = 'modular_splurt/icons/mob/widerobot.dmi', icon_state = "otiee-b"), // SPLURT Adoon (Skyrat Port)
"Drake" = image(icon = 'modular_sand/icons/mob/cyborg/drakemech.dmi', icon_state = "drakeengbox"),
- "Assaultron" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "assaultron_engi") // SPLURT Addon
+ "Assaultron" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "assaultron_engi"), // SPLURT Addon
+ "Haydee" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "haydeeengi") // SPLURT Addon
)
var/list/L = list("Pup Dozer" = "pupdozer", "Vale" = "valeeng")
for(var/a in L)
@@ -734,10 +740,14 @@
cyborg_icon_override = 'modular_sand/icons/mob/cyborg/drakemech.dmi'
sleeper_overlay = "drakesecsleeper"
dogborg = TRUE
- if("Assaultron") // SPLURT Addon (Hyper Port)
+ if("Assaultron") // SPLURT Addon
cyborg_base_icon = "assaultron_engi"
cyborg_icon_override = 'modular_splurt/icons/mob/robots.dmi'
hat_offset = 3
+ if("Haydee") // SPLURT Addon
+ cyborg_base_icon = "haydeeengi"
+ cyborg_icon_override = 'modular_splurt/icons/mob/robots.dmi'
+ hat_offset = 3
else
return FALSE
return ..()
@@ -794,9 +804,8 @@
"EdgyBoy" = image(icon = 'modular_splurt/icons/mob/widerobot.dmi', icon_state = "badboi-b"), // SPLURT Addon (VIRGO Port)
"EdgyGirl" = image(icon = 'modular_splurt/icons/mob/widerobot.dmi', icon_state = "prettyboi-b"), // SPLURT Addon (VIRGO Port)
"Drake" = image(icon = 'modular_sand/icons/mob/cyborg/drakemech.dmi', icon_state = "drakesecbox"),
-
- "Assaultron" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "assaultron_sec") // SPLURT Addon
-
+ "Assaultron" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "assaultron_sec"), // SPLURT Addon
+ "Haydee" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "haydeesec") // SPLURT Addon
)
var/list/L = list("K9" = "k9", "Vale" = "valesec", "K9 Dark" = "k9dark")
for(var/a in L)
@@ -920,12 +929,14 @@
sleeper_overlay = "drakesecsleeper"
cyborg_icon_override = 'modular_sand/icons/mob/cyborg/drakemech.dmi'
dogborg = TRUE
-
if("Assaultron") // SPLURT Addon
cyborg_base_icon = "assaultron_sec"
cyborg_icon_override = 'modular_splurt/icons/mob/robots.dmi'
hat_offset = 3
-
+ if("Haydee") // SPLURT Addon
+ cyborg_base_icon = "haydeesec"
+ cyborg_icon_override = 'modular_splurt/icons/mob/robots.dmi'
+ hat_offset = 3
else
return FALSE
return ..()
@@ -982,6 +993,8 @@
"Vale" = image(icon = 'modular_splurt/icons/mob/widerobot.dmi', icon_state = "valepeace-b"), // SPLURT Adoon (Skyrat Port)
"Drake" = image(icon = 'modular_sand/icons/mob/cyborg/drakemech.dmi', icon_state = "drakepeacebox"),
"Assaultron" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "assaultron_peacekeeper"), // SPLURT Adoon
+ "Haydee" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "haydeepk"), // SPLURT Addon
+ "Meka" = image(icon = 'modular_splurt/icons/mob/robots_32x64.dmi', icon_state = "mekapeace"), // SPLURT Addon
))
var/peace_borg_icon = show_radial_menu(R, R , peace_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE)
switch(peace_borg_icon)
@@ -1043,6 +1056,14 @@
cyborg_base_icon = "assaultron_peacekeeper"
cyborg_icon_override = 'modular_splurt/icons/mob/robots.dmi'
hat_offset = 3
+ if("Haydee") // SPLURT Addon
+ cyborg_base_icon = "haydeepk"
+ cyborg_icon_override = 'modular_splurt/icons/mob/robots.dmi'
+ hat_offset = 3
+ if("Meka")
+ cyborg_base_icon = "mekapeace"
+ cyborg_icon_override = 'modular_splurt/icons/mob/robots_32x64.dmi'
+ hat_offset = 3
else
return FALSE
return ..()
@@ -1189,6 +1210,7 @@
"(Service) BootyS" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "bootyserviceS"), // SPLURT Addon (Hyper Port)
"(Service) K69" = image(icon = 'modular_splurt/icons/mob/widerobot.dmi', icon_state = "k69-b"), // SPLURT Addon (Skyrat Port) // The Cursed One
"(Service) Borgi" = image(icon = 'modular_splurt/icons/mob/widerobot.dmi', icon_state = "borgi-serv-b"), // SPLURT Addon (Skyrat Port)
+ "(Service) Meka" = image(icon = 'modular_splurt/icons/mob/robots_32x64.dmi', icon_state = "mekaserve"), // SPLURT Addon
"(Janitor) Default" = image(icon = 'icons/mob/robots.dmi', icon_state = "janitor"),
"(Janitor) Marina" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "marinajan"),
"(Janitor) Sleek" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "sleekjan"),
@@ -1211,6 +1233,9 @@
"(Janitor) Fembot" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "fembot-service"), // SPLURT Addon
"(Janitor) Drake" = image(icon = 'modular_sand/icons/mob/cyborg/drakemech.dmi', icon_state = "drakejanitbox"),
"Assaultron" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "assaultron_service"), // SPLURT Addon
+ "(Janitor) Haydee" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "haydeejan"), // SPLURT Addon
+ "(Janitor) Meka" = image(icon = 'modular_splurt/icons/mob/robots_32x64.dmi', icon_state = "mekajani"), // SPLURT Addon
+ "(Waiter) Meka" = image(icon = 'modular_splurt/icons/mob/robots_32x64.dmi', icon_state = "mekaserve_alt"), // SPLURT Addon
)
var/list/L = list("(Service) DarkK9" = "k50", "(Service) Vale" = "valeserv", "(Service) ValeDark" = "valeservdark",
"(Janitor) Scrubpuppy" = "scrubpup")
@@ -1305,6 +1330,10 @@
cyborg_icon_override = 'modular_splurt/icons/mob/widerobot.dmi'
sleeper_overlay = "borgi-sleeper"
dogborg = TRUE
+ if("(Service) Meka")
+ cyborg_base_icon = "mekaserve"
+ cyborg_icon_override = 'modular_splurt/icons/mob/robots_32x64.dmi'
+ hat_offset = 3
if("(Janitor) Default")
cyborg_base_icon = "janitor"
if("(Janitor) Marina")
@@ -1395,6 +1424,18 @@
cyborg_base_icon = "assaultron_service"
cyborg_icon_override = 'modular_splurt/icons/mob/robots.dmi'
hat_offset = 3
+ if("(Janitor) Haydee") // SPLURT Addon
+ cyborg_base_icon = "haydeejan"
+ cyborg_icon_override = 'modular_splurt/icons/mob/robots.dmi'
+ hat_offset = 3
+ if("(Janitor) Meka")
+ cyborg_base_icon = "mekajani"
+ cyborg_icon_override = 'modular_splurt/icons/mob/robots_32x64.dmi'
+ hat_offset = 3
+ if("(Waiter) Meka")
+ cyborg_base_icon = "mekaserve_alt"
+ cyborg_icon_override = 'modular_splurt/icons/mob/robots_32x64.dmi'
+ hat_offset = 3
else
return FALSE
return ..()
@@ -1456,7 +1497,9 @@
"Cargohound Dark" = image(icon = 'modular_splurt/icons/mob/widerobot.dmi', icon_state = "cargohounddark-b"), // SPLURT Adoon (Skyrat Port)
"Otie" = image(icon = 'modular_splurt/icons/mob/widerobot.dmi', icon_state = "otiec-b"), // SPLURT Adoon (Skyrat Port)
"Drake" = image(icon = 'modular_sand/icons/mob/cyborg/drakemech.dmi', icon_state = "drakeminebox"),
- "Assaultron" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "assaultron_mining"), // SPLURT
+ "Assaultron" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "assaultron_mining"), // SPLURT Addon
+ "Haydee" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "haydeeminer"), // SPLURT Addon
+ "Meka" = image(icon = 'modular_splurt/icons/mob/robots_32x64.dmi', icon_state = "mekamine"), // SPLURT Addon
)
var/list/L = list("Blade" = "blade", "Vale" = "valemine")
for(var/a in L)
@@ -1560,6 +1603,14 @@
cyborg_base_icon = "assaultron_mining"
cyborg_icon_override = 'modular_splurt/icons/mob/robots.dmi'
hat_offset = 3
+ if("Haydee") // SPLURT Addon
+ cyborg_base_icon = "haydeeminer"
+ cyborg_icon_override = 'modular_splurt/icons/mob/robots.dmi'
+ hat_offset = 3
+ if("Meka")
+ cyborg_base_icon = "mekamine"
+ cyborg_icon_override = 'modular_splurt/icons/mob/robots_32x64.dmi'
+ hat_offset = 3
else
return FALSE
return ..()
diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm
index c3ae3898dd..cde12b5459 100644
--- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm
@@ -53,21 +53,21 @@
lasercolor = created_lasercolor
icon_state = "[lasercolor]ed209[on]"
set_weapon() //giving it the right projectile and firing sound.
- spawn(3)
- var/datum/job/detective/J = new/datum/job/detective
- access_card.access += J.get_access()
- prev_access = access_card.access
- if(lasercolor)
- shot_delay = 6//Longer shot delay because JESUS CHRIST
- check_records = 0//Don't actively target people set to arrest
- arrest_type = 1//Don't even try to cuff
- bot_core.req_access = list(ACCESS_MAINT_TUNNELS, ACCESS_THEATRE)
- arrest_type = 1
- if((lasercolor == "b") && (name == "\improper ED-209 Security Robot"))//Picks a name if there isn't already a custome one
- name = pick("BLUE BALLER","SANIC","BLUE KILLDEATH MURDERBOT")
- if((lasercolor == "r") && (name == "\improper ED-209 Security Robot"))
- name = pick("RED RAMPAGE","RED ROVER","RED KILLDEATH MURDERBOT")
+ var/datum/job/detective/J = new /datum/job/detective
+ access_card.access += J.get_access()
+ prev_access = access_card.access
+
+ if(lasercolor)
+ shot_delay = 6//Longer shot delay because JESUS CHRIST
+ check_records = 0//Don't actively target people set to arrest
+ arrest_type = 1//Don't even try to cuff
+ bot_core.req_access = list(ACCESS_MAINT_TUNNELS, ACCESS_THEATRE)
+ arrest_type = 1
+ if((lasercolor == "b") && (name == "\improper ED-209 Security Robot"))//Picks a name if there isn't already a custome one
+ name = pick("BLUE BALLER","SANIC","BLUE KILLDEATH MURDERBOT")
+ if((lasercolor == "r") && (name == "\improper ED-209 Security Robot"))
+ name = pick("RED RAMPAGE","RED ROVER","RED KILLDEATH MURDERBOT")
//SECHUD
var/datum/atom_hud/secsensor = GLOB.huds[DATA_HUD_SECURITY_ADVANCED]
diff --git a/code/modules/mob/living/simple_animal/bot/firebot.dm b/code/modules/mob/living/simple_animal/bot/firebot.dm
index 0b97a553b2..b681fa895f 100644
--- a/code/modules/mob/living/simple_animal/bot/firebot.dm
+++ b/code/modules/mob/living/simple_animal/bot/firebot.dm
@@ -45,9 +45,12 @@
var/datum/job/engineer/J = new/datum/job/engineer
access_card.access += J.get_access()
prev_access = access_card.access
-
create_extinguisher()
+/mob/living/simple_animal/bot/firebot/Destroy()
+ QDEL_NULL(internal_ext)
+ return ..()
+
/mob/living/simple_animal/bot/firebot/bot_reset()
create_extinguisher()
diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm
index ed47611a8f..1bccdb1992 100644
--- a/code/modules/mob/living/simple_animal/bot/mulebot.dm
+++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm
@@ -68,8 +68,8 @@
/mob/living/simple_animal/bot/mulebot/Destroy()
unload(0)
- qdel(wires)
- wires = null
+ QDEL_NULL(wires)
+ QDEL_NULL(cell)
return ..()
/mob/living/simple_animal/bot/mulebot/proc/set_id(new_id)
diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
index 7893f7b26b..ed2bdf75af 100644
--- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
+++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
@@ -202,7 +202,7 @@
/mob/living/simple_animal/cow/random/Initialize(mapload)
milk_reagent = get_random_reagent_id() //this has a blacklist so don't worry about romerol cows, etc
- ..()
+ . = ..()
//Wisdom cow, speaks and bestows great wisdoms
/mob/living/simple_animal/cow/wisdom
diff --git a/code/modules/mob/living/simple_animal/guardian/types/support.dm b/code/modules/mob/living/simple_animal/guardian/types/support.dm
index 78225a458c..5243905b66 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/support.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/support.dm
@@ -98,7 +98,7 @@
/obj/structure/receiving_pad/New(loc, mob/living/simple_animal/hostile/guardian/healer/G)
. = ..()
- if(G.guardiancolor)
+ if(G?.guardiancolor)
add_atom_colour(G.guardiancolor, FIXED_COLOUR_PRIORITY)
/obj/structure/receiving_pad/proc/disappear()
diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
index 23a0d44d56..337334e15c 100644
--- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
+++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
@@ -396,10 +396,6 @@
action_icon_state = "wrap_0"
action_background_icon_state = "bg_alien"
-/obj/effect/proc_holder/wrap/Initialize(mapload)
- . = ..()
- action = new(src)
-
/obj/effect/proc_holder/wrap/update_icon()
action.button_icon_state = "wrap_[active]"
action.UpdateButtonIcon()
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm
index 3369588915..16d380064d 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm
@@ -62,6 +62,10 @@ Difficulty: Medium
internal = new/obj/item/gps/internal/miner(src)
miner_saw = new(src)
+/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/Destroy()
+ QDEL_NULL(miner_saw)
+ return ..()
+
/datum/action/innate/megafauna_attack/dash
name = "Dash To Target"
icon_icon = 'icons/mob/actions/actions_items.dmi'
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
index e1ee6bc455..2f2fcda03c 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
@@ -249,6 +249,8 @@ Difficulty: Very Hard
var/list/stored_items = list()
var/list/blacklist = list()
+GLOBAL_VAR(blackbox_smartfridge)
+
/obj/machinery/smartfridge/black_box/ComponentInitialize()
. = ..()
AddElement(/datum/element/update_icon_blocker)
@@ -263,11 +265,10 @@ Difficulty: Very Hard
/obj/machinery/smartfridge/black_box/Initialize()
. = ..()
- var/static/obj/machinery/smartfridge/black_box/current
- if(current && current != src)
+ if(GLOB.blackbox_smartfridge && GLOB.blackbox_smartfridge != src)
qdel(src, force=TRUE)
return
- current = src
+ GLOB.blackbox_smartfridge = src
ReadMemory()
/obj/machinery/smartfridge/black_box/process()
@@ -314,6 +315,8 @@ Difficulty: Very Hard
if(force)
for(var/thing in src)
qdel(thing)
+ if(GLOB.blackbox_smartfridge == src)
+ GLOB.blackbox_smartfridge = null
return ..()
else
return QDEL_HINT_LETMELIVE
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm
index 04b003b315..dd38a80f12 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm
@@ -30,7 +30,7 @@
/mob/living/simple_animal/hostile/asteroid/curseblob/Initialize(mapload)
. = ..()
- timerid = QDEL_IN(src, 600)
+ timerid = QDEL_IN_STOPPABLE(src, 600)
playsound(src, 'sound/effects/curse1.ogg', 100, 1, -1)
/mob/living/simple_animal/hostile/asteroid/curseblob/Destroy()
@@ -57,7 +57,8 @@
/mob/living/simple_animal/hostile/asteroid/curseblob/proc/check_for_target()
if(QDELETED(set_target) || set_target.stat != CONSCIOUS || z != set_target.z)
- qdel(src)
+ if(!QDELETED(src))
+ qdel(src)
return TRUE
/mob/living/simple_animal/hostile/asteroid/curseblob/GiveTarget(new_target)
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm
index 7b21ce6a62..fae2e1fedf 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm
@@ -204,7 +204,7 @@
var/mob/living/simple_animal/hostile/asteroid/elite/herald/my_master = null
/mob/living/simple_animal/hostile/asteroid/elite/herald/mirror/Initialize(mapload)
- ..()
+ . = ..()
toggle_ai(AI_OFF)
/mob/living/simple_animal/hostile/asteroid/elite/herald/mirror/Destroy()
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm
index 115681a7d4..f33bd6a3b7 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm
@@ -211,4 +211,4 @@
/obj/effect/temp_visual/goliath_tentacle/proc/retract()
icon_state = "Goliath_tentacle_retract"
deltimer(timerid)
- timerid = QDEL_IN(src, 7)
+ timerid = QDEL_IN_STOPPABLE(src, 7)
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm
index 4f24bada6b..4be5548fdd 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm
@@ -130,11 +130,6 @@
/obj/item/udder/gutlunch
name = "nutrient sac"
-/obj/item/udder/gutlunch/Initialize(mapload)
- . = ..()
- reagents = new(50)
- reagents.my_atom = src
-
/obj/item/udder/gutlunch/generateMilk()
if(prob(60))
reagents.add_reagent(/datum/reagent/consumable/cream, rand(2, 5))
diff --git a/code/modules/mob/living/simple_animal/hostile/wizard.dm b/code/modules/mob/living/simple_animal/hostile/wizard.dm
index 97f4a0a5fc..4cfba0c74c 100644
--- a/code/modules/mob/living/simple_animal/hostile/wizard.dm
+++ b/code/modules/mob/living/simple_animal/hostile/wizard.dm
@@ -60,6 +60,12 @@
blink.outer_tele_radius = 3
AddSpell(blink)
+/mob/living/simple_animal/hostile/wizard/Destroy()
+ QDEL_NULL(fireball)
+ QDEL_NULL(mm)
+ QDEL_NULL(blink)
+ return ..()
+
/mob/living/simple_animal/hostile/wizard/handle_automated_action()
. = ..()
INVOKE_ASYNC(src, .proc/AutomatedCast)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 70b2aaabb7..73dc71b037 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -24,6 +24,7 @@
remove_from_mob_list()
remove_from_dead_mob_list()
remove_from_alive_mob_list()
+ QDEL_LIST(mob_spell_list)
GLOB.all_clockwork_mobs -= src
focus = null
LAssailant = null
@@ -40,6 +41,8 @@
qdel(cc)
client_colours = null
ghostize()
+ if(mind?.current == src) //Let's just be safe yeah? This will occasionally be cleared, but not always. Can't do it with ghostize without changing behavior
+ mind.set_current(null)
..()
return QDEL_HINT_HARDDEL
diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm
index e2345a6384..e1733bb6f9 100644
--- a/code/modules/modular_computers/computers/item/computer.dm
+++ b/code/modules/modular_computers/computers/item/computer.dm
@@ -71,7 +71,6 @@
for(var/H in all_components)
var/obj/item/computer_hardware/CH = all_components[H]
if(CH.holder == src)
- CH.on_remove(src)
CH.holder = null
all_components.Remove(CH.device_type)
qdel(CH)
diff --git a/code/modules/modular_computers/file_system/programs/signaler.dm b/code/modules/modular_computers/file_system/programs/signaler.dm
index dfbef9f6d6..bf309ecdf4 100644
--- a/code/modules/modular_computers/file_system/programs/signaler.dm
+++ b/code/modules/modular_computers/file_system/programs/signaler.dm
@@ -19,6 +19,11 @@
set_frequency(signal_frequency)
return ..()
+/datum/computer_file/program/signaler/Destroy()
+ SSradio.remove_object(src, signal_frequency)
+ radio_connection = null
+ return ..()
+
/datum/computer_file/program/signaler/ui_data(mob/user)
var/list/data = get_header_data()
data["frequency"] = signal_frequency
diff --git a/code/modules/modular_computers/hardware/ai_slot.dm b/code/modules/modular_computers/hardware/ai_slot.dm
index 8740b59b35..455202a414 100644
--- a/code/modules/modular_computers/hardware/ai_slot.dm
+++ b/code/modules/modular_computers/hardware/ai_slot.dm
@@ -10,6 +10,10 @@
var/obj/item/aicard/stored_card
var/locked = FALSE
+/obj/item/computer_hardware/ai_slot/Destroy()
+ QDEL_NULL(stored_card)
+ return ..()
+
///What happens when the intellicard is removed (or deleted) from the module, through try_eject() or not.
/obj/item/computer_hardware/ai_slot/Exited(atom/movable/gone, direction)
if(stored_card == gone)
@@ -55,7 +59,7 @@
if(Adjacent(user))
user.put_in_hands(stored_card)
else
- stored_card.forceMove(drop_location())
+ stored_card.forceMove(get_turf(src))
return TRUE
return FALSE
diff --git a/code/modules/modular_computers/hardware/battery_module.dm b/code/modules/modular_computers/hardware/battery_module.dm
index 27d3546ca2..355e5049e1 100644
--- a/code/modules/modular_computers/hardware/battery_module.dm
+++ b/code/modules/modular_computers/hardware/battery_module.dm
@@ -16,7 +16,7 @@
battery = new battery_type(src)
/obj/item/computer_hardware/battery/Destroy()
- battery = null
+ QDEL_NULL(battery)
return ..()
///What happens when the battery is removed (or deleted) from the module, through try_eject() or not.
@@ -59,7 +59,7 @@
user.put_in_hands(battery)
to_chat(user, span_notice("You detach \the [battery] from \the [src]."))
else
- battery.forceMove(drop_location())
+ battery.forceMove(get_turf(src))
return TRUE
/obj/item/stock_parts/cell/computer
diff --git a/code/modules/modular_computers/hardware/card_slot.dm b/code/modules/modular_computers/hardware/card_slot.dm
index 13f1b3bbc9..0a4c9cf8e1 100644
--- a/code/modules/modular_computers/hardware/card_slot.dm
+++ b/code/modules/modular_computers/hardware/card_slot.dm
@@ -94,7 +94,7 @@
if(user && !issilicon(user) && in_range(src, user))
user.put_in_hands(stored_card)
else
- stored_card.forceMove(drop_location())
+ stored_card.forceMove(get_turf(src))
to_chat(user, span_notice("You remove the card from \the [src]."))
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE)
diff --git a/code/modules/movespeed/modifiers/mobs.dm b/code/modules/movespeed/modifiers/mobs.dm
index 71bc1020e2..69979b2052 100644
--- a/code/modules/movespeed/modifiers/mobs.dm
+++ b/code/modules/movespeed/modifiers/mobs.dm
@@ -63,7 +63,7 @@
var/mod = CONFIG_GET(number/movedelay/walk_delay)
multiplicative_slowdown = isnum(mod)? mod : initial(multiplicative_slowdown)
-/datum/movespeed_modifier/config_wak_run/walk/apply_multiplicative(existing, mob/target)
+/datum/movespeed_modifier/config_walk_run/walk/apply_multiplicative(existing, mob/target)
. = ..()
if(HAS_TRAIT(target, TRAIT_SPEEDY_STEP))
. -= 1.25
diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm
index 44ff5c7098..4ed9b2fa25 100644
--- a/code/modules/ninja/suit/suit.dm
+++ b/code/modules/ninja/suit/suit.dm
@@ -84,12 +84,14 @@
cell.icon_state = "bscell"
/obj/item/clothing/suit/space/space_ninja/Initialize(mapload)
- START_PROCESSING(SSobj, src)
- return ..()
+ START_PROCESSING(SSobj, src)
+ return ..()
/obj/item/clothing/suit/space/space_ninja/Destroy()
- STOP_PROCESSING(SSobj, src)
- return ..()
+ QDEL_NULL(spark_system)
+ QDEL_NULL(cell)
+ STOP_PROCESSING(SSobj, src)
+ return ..()
// Power usage
/obj/item/clothing/suit/space/space_ninja/process(delta_time)
diff --git a/code/modules/paperwork/contract.dm b/code/modules/paperwork/contract.dm
index f46d4bf029..d19fe23da6 100644
--- a/code/modules/paperwork/contract.dm
+++ b/code/modules/paperwork/contract.dm
@@ -92,6 +92,8 @@
/obj/item/paper/contract/infernal/New(atom/loc, mob/living/nTarget, datum/mind/nOwner)
..()
+ if(!nOwner || !nTarget)
+ return
owner = nOwner
devil_datum = owner.has_antag_datum(/datum/antagonist/devil)
target = nTarget
diff --git a/code/modules/pool/pool_controller.dm b/code/modules/pool/pool_controller.dm
index f2a3b23e57..942fb2eeb6 100644
--- a/code/modules/pool/pool_controller.dm
+++ b/code/modules/pool/pool_controller.dm
@@ -80,6 +80,7 @@
linked_turfs.Cut()
mobs_in_pool.Cut()
mist_off()
+ QDEL_NULL(wires)
return ..()
/obj/machinery/pool/controller/proc/scan_things()
diff --git a/code/modules/pool/pool_drain.dm b/code/modules/pool/pool_drain.dm
index 09afe09cd1..9843b5b249 100644
--- a/code/modules/pool/pool_drain.dm
+++ b/code/modules/pool/pool_drain.dm
@@ -31,8 +31,9 @@
/obj/machinery/pool/drain/Destroy()
STOP_PROCESSING(SSfastprocess, src)
- controller.linked_drain = null
- controller = null
+ if(controller)
+ controller.linked_drain = null
+ controller = null
whirling_mobs = null
return ..()
@@ -129,8 +130,9 @@
var/obj/machinery/pool/controller/controller
/obj/machinery/pool/filter/Destroy()
- controller.linked_filter = null
- controller = null
+ if(controller)
+ controller.linked_filter = null
+ controller = null
return ..()
/obj/machinery/pool/filter/emag_act(mob/living/user)
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 9896cc4088..f0fd7ebb46 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -303,17 +303,18 @@
if(malfai && operating)
malfai.malf_picker.processing_time = clamp(malfai.malf_picker.processing_time - 10,0,1000)
- area.power_light = FALSE
- area.power_equip = FALSE
- area.power_environ = FALSE
- area.power_change()
- area.poweralert(FALSE, src)
+ if(area)
+ area.power_light = FALSE
+ area.power_equip = FALSE
+ area.power_environ = FALSE
+ area.power_change()
+ area.poweralert(FALSE, src)
if(occupier)
malfvacate(1)
- qdel(wires)
- wires = null
+ if(wires)
+ QDEL_NULL(wires)
if(cell)
- qdel(cell)
+ QDEL_NULL(cell)
if(terminal)
disconnect_terminal()
. = ..()
diff --git a/code/modules/power/reactor/rbmk.dm b/code/modules/power/reactor/rbmk.dm
index cea10c6116..18f9a9cf55 100644
--- a/code/modules/power/reactor/rbmk.dm
+++ b/code/modules/power/reactor/rbmk.dm
@@ -552,6 +552,11 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
. = ..()
addtimer(CALLBACK(src, .proc/link_to_reactor), 10 SECONDS)
+/obj/machinery/computer/reactor/Destroy()
+ reactor = null
+ return ..()
+
+
/obj/machinery/computer/reactor/wrench_act(mob/living/user, obj/item/I)
to_chat(user, "You start [anchored ? "un" : ""]securing [name]...")
if(I.use_tool(src, user, 40, volume=75))
@@ -728,6 +733,11 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
. = ..()
radio_connection = SSradio.add_object(src, FREQ_RBMK_CONTROL,filter=RADIO_ATMOSIA)
+/obj/machinery/computer/reactor/pump/Destroy()
+ SSradio.remove_object(src, FREQ_RBMK_CONTROL)
+ radio_connection = null
+ return ..()
+
/obj/machinery/computer/reactor/pump/proc/signal(power, set_output_pressure=null)
var/datum/signal/signal
if(!set_output_pressure) //Yes this is stupid, but technically if you pass through "set_output_pressure" onto the signal, it'll always try and set its output pressure and yeahhh...
diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm
index 7c6b1cc922..f9ed50bb98 100644
--- a/code/modules/power/singularity/containment_field.dm
+++ b/code/modules/power/singularity/containment_field.dm
@@ -13,12 +13,16 @@
interaction_flags_machine = NONE
light_range = 4
layer = ABOVE_OBJ_LAYER
- var/obj/machinery/field/generator/FG1 = null
- var/obj/machinery/field/generator/FG2 = null
+ var/obj/machinery/field/generator/field_gen_1 = null
+ var/obj/machinery/field/generator/field_gen_2 = null
/obj/machinery/field/containment/Destroy()
- FG1.fields -= src
- FG2.fields -= src
+ if(field_gen_1)
+ field_gen_1.fields -= src
+ field_gen_1 = null
+ if(field_gen_2)
+ field_gen_2.fields -= src
+ field_gen_2 = null
return ..()
/obj/machinery/field/containment/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
@@ -46,12 +50,12 @@
return FALSE
/obj/machinery/field/containment/attack_animal(mob/living/simple_animal/M)
- if(!FG1 || !FG2)
+ if(!field_gen_1 || !field_gen_2)
qdel(src)
return
if(ismegafauna(M))
M.visible_message("[M] glows fiercely as the containment field flickers out!")
- FG1.calc_power(INFINITY) //rip that 'containment' field
+ field_gen_1.calc_power(INFINITY) //rip that 'containment' field
M.adjustHealth(-M.obj_damage)
else
..()
@@ -68,12 +72,12 @@
/obj/machinery/field/containment/proc/set_master(master1,master2)
if(!master1 || !master2)
return FALSE
- FG1 = master1
- FG2 = master2
+ field_gen_1 = master1
+ field_gen_2 = master2
return TRUE
/obj/machinery/field/containment/shock(mob/living/user)
- if(!FG1 || !FG2)
+ if(!field_gen_1 || !field_gen_2)
qdel(src)
return FALSE
..()
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index 8f9a7805c6..338e37e4ee 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -110,6 +110,7 @@
log_game("Emitter deleted at [AREACOORD(T)]")
investigate_log("deleted at [AREACOORD(T)]", INVESTIGATE_SINGULO)
QDEL_NULL(sparks)
+ QDEL_NULL(wires)
return ..()
/obj/machinery/power/emitter/update_icon_state()
diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm
index c32bbc0c86..c0505e2a9b 100644
--- a/code/modules/power/tesla/coil.dm
+++ b/code/modules/power/tesla/coil.dm
@@ -28,6 +28,12 @@
wires = new /datum/wires/tesla_coil(src)
linked_techweb = SSresearch.science_tech
+/obj/machinery/power/tesla_coil/Destroy()
+ QDEL_NULL(wires)
+ linked_techweb = null
+ return ..()
+
+
/obj/machinery/power/tesla_coil/RefreshParts()
var/power_multiplier = 0
zap_cooldown = 100
diff --git a/code/modules/projectiles/ammunition/energy/portal.dm b/code/modules/projectiles/ammunition/energy/portal.dm
index 7bb10da0cc..749ac8c3a4 100644
--- a/code/modules/projectiles/ammunition/energy/portal.dm
+++ b/code/modules/projectiles/ammunition/energy/portal.dm
@@ -2,8 +2,8 @@
projectile_type = /obj/item/projectile/beam/wormhole
e_cost = 0
fire_sound = 'sound/weapons/pulse3.ogg'
- var/obj/item/gun/energy/wormhole_projector/gun = null
select_name = "blue"
+ var/datum/weakref/gun
/obj/item/ammo_casing/energy/wormhole/orange
projectile_type = /obj/item/projectile/beam/wormhole/orange
@@ -11,7 +11,7 @@
/obj/item/ammo_casing/energy/wormhole/Initialize(mapload, obj/item/gun/energy/wormhole_projector/wh)
. = ..()
- gun = wh
+ gun = WEAKREF(wh)
/obj/item/ammo_casing/energy/wormhole/throw_proj()
. = ..()
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index a828336ba5..8a0070c431 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -150,7 +150,7 @@
AddComponent(/datum/component/automatic_fire, fire_delay)
/obj/item/gun/Destroy()
- if(pin)
+ if(isobj(pin))
QDEL_NULL(pin)
if(gun_light)
QDEL_NULL(gun_light)
@@ -162,6 +162,8 @@
QDEL_NULL(azoom)
if(firemode_action)
QDEL_NULL(firemode_action)
+ if(isatom(suppressed))
+ QDEL_NULL(suppressed)
return ..()
/obj/item/gun/examine(mob/user)
diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm
index 53ba6d6a92..8635cc7ff5 100644
--- a/code/modules/projectiles/guns/ballistic/pistol.dm
+++ b/code/modules/projectiles/guns/ballistic/pistol.dm
@@ -49,9 +49,9 @@
/obj/item/gun/ballistic/automatic/pistol/modular/update_overlays()
. = ..()
if(magazine && suppressed)
- . += "[unique_reskin[current_skin]["icon_state"]]-magazine-sup" //Yes, this means the default iconstate can't have a magazine overlay
+ . += "[current_skin ? unique_reskin[current_skin]["icon_state"] : initial(icon_state)]-magazine-sup" //Yes, this means the default iconstate can't have a magazine overlay
else if (magazine)
- . += "[unique_reskin[current_skin]["icon_state"]]-magazine"
+ . += "[current_skin ? unique_reskin[current_skin]["icon_state"] : initial(icon_state)]-magazine"
/obj/item/gun/ballistic/automatic/pistol/m1911
name = "\improper M1911"
diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm
index 03dfc46713..b691530333 100644
--- a/code/modules/projectiles/guns/energy.dm
+++ b/code/modules/projectiles/guns/energy.dm
@@ -69,6 +69,8 @@
AddElement(/datum/element/update_icon_updates_onmob)
/obj/item/gun/energy/Destroy()
+ if(cell)
+ QDEL_NULL(cell)
STOP_PROCESSING(SSobj, src)
return ..()
diff --git a/code/modules/projectiles/guns/energy/laser_gatling.dm b/code/modules/projectiles/guns/energy/laser_gatling.dm
index 65d525b638..3eb932529a 100644
--- a/code/modules/projectiles/guns/energy/laser_gatling.dm
+++ b/code/modules/projectiles/guns/energy/laser_gatling.dm
@@ -23,6 +23,9 @@
START_PROCESSING(SSfastprocess, src)
/obj/item/minigunpack/Destroy()
+ if(!QDELETED(gun))
+ qdel(gun)
+ gun = null
STOP_PROCESSING(SSfastprocess, src)
return ..()
@@ -120,6 +123,12 @@
return ..()
+/obj/item/gun/energy/minigun/Destroy()
+ if(!QDELETED(ammo_pack))
+ qdel(ammo_pack)
+ ammo_pack = null
+ return ..()
+
/obj/item/gun/energy/minigun/attack_self(mob/living/user)
return
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 67e7b58bd3..35d5d213e2 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -243,10 +243,10 @@
for(var/i in 1 to ammo_type.len)
var/obj/item/ammo_casing/energy/wormhole/W = ammo_type[i]
if(istype(W))
- W.gun = src
+ W.gun = WEAKREF(src)
var/obj/item/projectile/beam/wormhole/WH = W.BB
if(istype(WH))
- WH.gun = src
+ WH.gun = WEAKREF(src)
/obj/item/gun/energy/wormhole_projector/process_chamber()
..()
diff --git a/code/modules/projectiles/guns/magic.dm b/code/modules/projectiles/guns/magic.dm
index 4192f038c2..2628ddce86 100644
--- a/code/modules/projectiles/guns/magic.dm
+++ b/code/modules/projectiles/guns/magic.dm
@@ -52,7 +52,8 @@
/obj/item/gun/magic/Initialize(mapload)
. = ..()
charges = max_charges
- chambered = new ammo_type(src)
+ if(ammo_type)
+ chambered = new ammo_type(src)
if(can_charge)
START_PROCESSING(SSobj, src)
diff --git a/code/modules/projectiles/guns/magic/motivation.dm b/code/modules/projectiles/guns/magic/motivation.dm
index db4c222619..e9e5c0ab3a 100644
--- a/code/modules/projectiles/guns/magic/motivation.dm
+++ b/code/modules/projectiles/guns/magic/motivation.dm
@@ -27,6 +27,10 @@
. = ..()
judgementcut = new(src)
+/obj/item/gun/magic/staff/motivation/Destroy()
+ QDEL_NULL(judgementcut)
+ . = ..()
+
//lets the user know that their judgement cuts are recharging
/obj/item/gun/magic/staff/motivation/shoot_with_empty_chamber(mob/living/user as mob|obj)
to_chat(user, "Judgement Cut is recharging.")
diff --git a/code/modules/projectiles/guns/misc/beam_rifle.dm b/code/modules/projectiles/guns/misc/beam_rifle.dm
index 6f70998834..41bff2ece4 100644
--- a/code/modules/projectiles/guns/misc/beam_rifle.dm
+++ b/code/modules/projectiles/guns/misc/beam_rifle.dm
@@ -507,8 +507,8 @@
duration = 0
. = ..()
if(!generation) //first one
- QDEL_LIST(gun.current_tracers)
- gun.current_tracers += .
+ QDEL_LIST(gun?.current_tracers)
+ gun?.current_tracers += .
/obj/item/projectile/beam/beam_rifle/hitscan/aiming_beam
tracer_type = /obj/effect/projectile/tracer/tracer/aiming
diff --git a/code/modules/projectiles/projectile/special/curse.dm b/code/modules/projectiles/projectile/special/curse.dm
index 89b1ecba4c..0609ba8496 100644
--- a/code/modules/projectiles/projectile/special/curse.dm
+++ b/code/modules/projectiles/projectile/special/curse.dm
@@ -20,6 +20,10 @@
handedness = prob(50)
icon_state = "cursehand[handedness]"
+/obj/item/projectile/curse_hand/Destroy()
+ QDEL_NULL(arm)
+ . = ..()
+
/obj/item/projectile/curse_hand/update_icon_state()
icon_state = "[initial(icon_state)][handedness]"
@@ -43,9 +47,10 @@
for(var/obj/effect/temp_visual/dir_setting/curse/grasp_portal/G in starting)
qdel(G)
new /obj/effect/temp_visual/dir_setting/curse/grasp_portal/fading(starting, dir)
- var/datum/beam/D = starting.Beam(T, icon_state = "curse[handedness]", time = 32, maxdistance = INFINITY, beam_type=/obj/effect/ebeam/curse_arm, beam_sleep_time = 1)
- for(var/b in D.elements)
- var/obj/effect/ebeam/B = b
- animate(B, alpha = 0, time = 32)
+ var/datum/beam/D = starting?.Beam(T, icon_state = "curse[handedness]", time = 32, maxdistance = INFINITY, beam_type=/obj/effect/ebeam/curse_arm, beam_sleep_time = 1)
+ if(D)
+ for(var/b in D.elements)
+ var/obj/effect/ebeam/B = b
+ animate(B, alpha = 0, time = 32)
return ..()
diff --git a/code/modules/projectiles/projectile/special/gravity.dm b/code/modules/projectiles/projectile/special/gravity.dm
index ba21ecb28c..f5572f2f1b 100644
--- a/code/modules/projectiles/projectile/special/gravity.dm
+++ b/code/modules/projectiles/projectile/special/gravity.dm
@@ -13,7 +13,7 @@
. = ..()
var/obj/item/ammo_casing/energy/gravity/G = loc
if(istype(G))
- power = min(G.gun.power, 15)
+ power = min(G.gun?.power, 15)
/obj/item/projectile/gravity/on_hit()
. = ..()
diff --git a/code/modules/projectiles/projectile/special/hallucination.dm b/code/modules/projectiles/projectile/special/hallucination.dm
index 19fd13857a..8ad149c8d5 100644
--- a/code/modules/projectiles/projectile/special/hallucination.dm
+++ b/code/modules/projectiles/projectile/special/hallucination.dm
@@ -28,7 +28,7 @@
hal_target.client.images += fake_icon
/obj/item/projectile/hallucination/Destroy()
- if(hal_target.client)
+ if(hal_target?.client)
hal_target.client.images -= fake_icon
QDEL_NULL(fake_icon)
return ..()
diff --git a/code/modules/projectiles/projectile/special/wormhole.dm b/code/modules/projectiles/projectile/special/wormhole.dm
index aaf9f542d3..99410d38e4 100644
--- a/code/modules/projectiles/projectile/special/wormhole.dm
+++ b/code/modules/projectiles/projectile/special/wormhole.dm
@@ -5,12 +5,13 @@
damage = 0
nodamage = TRUE
pass_flags = PASSGLASS | PASSTABLE | PASSGRILLE | PASSMOB
- var/obj/item/gun/energy/wormhole_projector/gun
color = "#33CCFF"
tracer_type = /obj/effect/projectile/tracer/wormhole
impact_type = /obj/effect/projectile/impact/wormhole
muzzle_type = /obj/effect/projectile/muzzle/wormhole
hitscan = TRUE
+ //Weakref to the thing that shot us
+ var/datum/weakref/gun
/obj/item/projectile/beam/wormhole/orange
name = "orange bluespace beam"
@@ -23,7 +24,8 @@
/obj/item/projectile/beam/wormhole/on_hit(atom/target)
- if(!gun)
+ var/obj/item/gun/energy/wormhole_projector/projector = gun.resolve()
+ if(!projector)
qdel(src)
return BULLET_ACT_BLOCK
- gun.create_portal(src, get_turf(src))
+ projector.create_portal(src, get_turf(src))
diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm
index 77d713047a..a337855497 100644
--- a/code/modules/reagents/chemistry/holder.dm
+++ b/code/modules/reagents/chemistry/holder.dm
@@ -112,7 +112,6 @@
value_multiplier = new_value
/datum/reagents/Destroy()
- . = ..()
//We're about to delete all reagents, so lets cleanup
addiction_list.Cut()
var/list/cached_reagents = reagent_list
@@ -124,6 +123,7 @@
if(my_atom && my_atom.reagents == src)
my_atom.reagents = null
my_atom = null
+ return ..()
// Used in attack logs for reagents in pills and such
/datum/reagents/proc/log_list()
diff --git a/code/modules/reagents/reagent_containers/borghypo.dm b/code/modules/reagents/reagent_containers/borghypo.dm
index 0b3e5bcf75..10fe47f443 100644
--- a/code/modules/reagents/reagent_containers/borghypo.dm
+++ b/code/modules/reagents/reagent_containers/borghypo.dm
@@ -43,6 +43,7 @@ Borg Hypospray
START_PROCESSING(SSobj, src)
/obj/item/reagent_containers/borghypo/Destroy()
+ QDEL_LIST(reagent_list)
STOP_PROCESSING(SSobj, src)
return ..()
diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm
index 0ddb784d0c..02f77af17e 100644
--- a/code/modules/reagents/reagent_containers/pill.dm
+++ b/code/modules/reagents/reagent_containers/pill.dm
@@ -203,7 +203,7 @@
/obj/item/reagent_containers/pill/neurine
name = "neurine pill"
desc = "Used to treat non-severe mental traumas."
- list_reagents = list("neurine" = 10)
+ list_reagents = list(/datum/reagent/medicine/neurine = 10)
icon_state = "pill22"
roundstart = TRUE
diff --git a/code/modules/research/techweb/_techweb.dm b/code/modules/research/techweb/_techweb.dm
index dc07a5a184..6d43912d4d 100644
--- a/code/modules/research/techweb/_techweb.dm
+++ b/code/modules/research/techweb/_techweb.dm
@@ -212,7 +212,6 @@
/datum/techweb/proc/add_design(datum/design/design, custom = FALSE)
if(!istype(design))
return FALSE
- researched_designs[design.id] = design
researched_designs[design.id] = TRUE
if(custom)
custom_designs[design.id] = TRUE
diff --git a/code/modules/ruins/lavaland_ruin_code.dm b/code/modules/ruins/lavaland_ruin_code.dm
index 8ff6968108..8de89a186b 100644
--- a/code/modules/ruins/lavaland_ruin_code.dm
+++ b/code/modules/ruins/lavaland_ruin_code.dm
@@ -164,7 +164,7 @@
/obj/effect/mob_spawn/human/lavaland_syndicate/comms/space/Initialize(mapload)
. = ..()
- if(prob(90)) //only has a 10% chance of existing, otherwise it'll just be a NPC syndie.
+ if(prob(0)) //only has a 10% chance of existing, otherwise it'll just be a NPC syndie. //splurt edit: has a 100% chance of spawning so it doeds not cause problems with the double syndi comms agent base; changed from 90 to 0
new /mob/living/simple_animal/hostile/syndicate/ranged(get_turf(src))
return INITIALIZE_HINT_QDEL
diff --git a/code/modules/ruins/lavalandruin_code/puzzle.dm b/code/modules/ruins/lavalandruin_code/puzzle.dm
index 136acc7da7..2afdb1f101 100644
--- a/code/modules/ruins/lavalandruin_code/puzzle.dm
+++ b/code/modules/ruins/lavalandruin_code/puzzle.dm
@@ -242,7 +242,8 @@
/obj/structure/puzzle_element/Moved()
. = ..()
- source.validate()
+ if(source)
+ source.validate()
//Admin abuse version so you can pick the icon before it sets up
/obj/effect/sliding_puzzle/admin
diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm
index 5c1e34a7c7..84aa252605 100644
--- a/code/modules/smithing/anvil.dm
+++ b/code/modules/smithing/anvil.dm
@@ -71,7 +71,7 @@
RECIPE_STUNDIL = /obj/item/smithing/stundild)
/obj/structure/anvil/Initialize(mapload)
- ..()
+ . = ..()
currentquality = anvilquality
/obj/structure/anvil/attackby(obj/item/I, mob/user)
diff --git a/code/modules/smithing/finished_items.dm b/code/modules/smithing/finished_items.dm
index 6889bb3eb7..3b139bb61d 100644
--- a/code/modules/smithing/finished_items.dm
+++ b/code/modules/smithing/finished_items.dm
@@ -8,7 +8,7 @@
material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS
total_mass = TOTAL_MASS_MEDIEVAL_WEAPON //yeah ok
slot_flags = ITEM_SLOT_BELT
- obj_flags = UNIQUE_RENAME
+ obj_flags = UNIQUE_RENAME
w_class = WEIGHT_CLASS_NORMAL
force = 6
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
@@ -20,7 +20,7 @@
var/wield_force = 15
/obj/item/melee/smith/Initialize(mapload)
- ..()
+ . = ..()
if(desc == "cringe")
desc = "A handmade [name]."
overlay = mutable_appearance(icon, overlay_state)
@@ -57,7 +57,7 @@
sharpness = SHARP_POINTY//it doesnt have a blade it has a point
/obj/item/mining_scanner/prospector/Initialize(mapload)
- ..()
+ . = ..()
var/mutable_appearance/overlay
desc = "A handmade [name]."
overlay = mutable_appearance(icon, "minihandle")
@@ -75,7 +75,7 @@
sharpness = SHARP_POINTY
/obj/item/pickaxe/smithed/Initialize(mapload)
- ..()
+ . = ..()
desc = "A handmade [name]."
var/mutable_appearance/overlay
overlay = mutable_appearance(icon, "stick")
@@ -96,7 +96,7 @@
sharpness = SHARP_EDGED //it cuts through the earth
/obj/item/shovel/smithed/Initialize(mapload)
- ..()
+ . = ..()
desc = "A handmade [name]."
var/mutable_appearance/overlay
overlay = mutable_appearance(icon, "shovelhandle")
diff --git a/code/modules/smithing/furnace.dm b/code/modules/smithing/furnace.dm
index 70bff32030..952f185550 100644
--- a/code/modules/smithing/furnace.dm
+++ b/code/modules/smithing/furnace.dm
@@ -11,13 +11,13 @@
/obj/structure/furnace/Initialize(mapload)
- ..()
+ . = ..()
create_reagents(250, TRANSPARENT)
START_PROCESSING(SSobj, src)
/obj/structure/furnace/Destroy()
- ..()
STOP_PROCESSING(SSobj, src)
+ return ..()
/obj/structure/furnace/process()
if(debug)
diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm
index 4be592b919..fc427757ea 100644
--- a/code/modules/spells/spell.dm
+++ b/code/modules/spells/spell.dm
@@ -20,6 +20,12 @@
if(has_action)
action = new base_action(src)
+/obj/effect/proc_holder/Destroy()
+ QDEL_NULL(action)
+ if(ranged_ability_user)
+ remove_ranged_ability()
+ return ..()
+
/obj/effect/proc_holder/proc/on_gain(mob/living/user)
return
@@ -34,12 +40,6 @@
GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for the badmin verb for now
-/obj/effect/proc_holder/Destroy()
- QDEL_NULL(action)
- if(ranged_ability_user)
- remove_ranged_ability()
- return ..()
-
/obj/effect/proc_holder/singularity_act()
return
diff --git a/code/modules/spells/spell_types/lichdom.dm b/code/modules/spells/spell_types/lichdom.dm
index bf6051c87c..524d66da46 100644
--- a/code/modules/spells/spell_types/lichdom.dm
+++ b/code/modules/spells/spell_types/lichdom.dm
@@ -87,6 +87,9 @@
/obj/item/phylactery/Initialize(mapload, datum/mind/newmind)
. = ..()
+ if(!newmind)
+ stack_trace("A phylactery was created with no target mind")
+ return INITIALIZE_HINT_QDEL
mind = newmind
name = "phylactery of [mind.name]"
diff --git a/code/modules/spells/spell_types/shapeshift.dm b/code/modules/spells/spell_types/shapeshift.dm
index 9b9c1fbda3..d31a6c9bfa 100644
--- a/code/modules/spells/spell_types/shapeshift.dm
+++ b/code/modules/spells/spell_types/shapeshift.dm
@@ -94,7 +94,8 @@
src.source = source
shape = loc
if(!istype(shape))
- CRASH("shapeshift holder created outside mob/living")
+ stack_trace("shapeshift holder created outside mob/living")
+ return INITIALIZE_HINT_QDEL
stored = caster
if(stored.mind)
stored.mind.transfer_to(shape)
diff --git a/code/modules/spells/spell_types/touch_attacks.dm b/code/modules/spells/spell_types/touch_attacks.dm
index a23e16cf88..d989a60095 100644
--- a/code/modules/spells/spell_types/touch_attacks.dm
+++ b/code/modules/spells/spell_types/touch_attacks.dm
@@ -7,6 +7,14 @@
include_user = 1
range = -1
+
+/obj/effect/proc_holder/spell/targeted/touch/Destroy()
+ remove_hand()
+ if(action?.owner)
+ var/mob/guy_who_needs_to_know = action.owner
+ to_chat(guy_who_needs_to_know, span_notice("The power of the spell dissipates from your hand."))
+ return ..()
+
/obj/effect/proc_holder/spell/targeted/touch/proc/remove_hand(recharge = FALSE)
QDEL_NULL(attached_hand)
if(recharge)
diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm
index c4ab435ee0..5e4fb22904 100644
--- a/code/modules/surgery/bodyparts/_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/_bodyparts.dm
@@ -636,6 +636,7 @@
/obj/item/bodypart/proc/update_limb(dropping_limb, mob/living/carbon/source)
body_markings_list = list()
var/mob/living/carbon/C
+ owner.create_weakref()
if(source)
C = source
if(!original_owner)
@@ -646,6 +647,9 @@
C = owner
no_update = FALSE
+ if(!C)
+ return
+
if(HAS_TRAIT(C, TRAIT_HUSK) && is_organic_limb())
species_id = "husk" //overrides species_id
dmg_overlay_type = "" //no damage overlay shown when husked
diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm
index 998473abe3..215bd2370d 100644
--- a/code/modules/surgery/organs/augments_arms.dm
+++ b/code/modules/surgery/organs/augments_arms.dm
@@ -24,6 +24,11 @@
for(var/obj/item/I in contents)
add_item(I)
+/obj/item/organ/cyberimp/arm/Destroy()
+ QDEL_LIST(items_list)
+ QDEL_NULL(holder)
+ return ..()
+
/obj/item/organ/cyberimp/arm/proc/add_item(obj/item/I)
if(I in items_list)
return
diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm
index 1a600e2cc0..37955dabae 100644
--- a/code/modules/surgery/organs/organ_internal.dm
+++ b/code/modules/surgery/organs/organ_internal.dm
@@ -362,7 +362,7 @@
desc = "Something hecked up"
/obj/item/organ/random/Initialize(mapload)
- ..()
+ . = ..()
var/list = list(/obj/item/organ/tongue, /obj/item/organ/brain, /obj/item/organ/heart, /obj/item/organ/liver, /obj/item/organ/ears, /obj/item/organ/eyes, /obj/item/organ/tail, /obj/item/organ/stomach)
var/newtype = pick(list)
new newtype(loc)
diff --git a/code/modules/tcg/cards.dm b/code/modules/tcg/cards.dm
index 7717a44410..8308c6ca99 100644
--- a/code/modules/tcg/cards.dm
+++ b/code/modules/tcg/cards.dm
@@ -114,12 +114,15 @@
. = ..()
if(!special)
datum_type = new_datum
- card_datum = new datum_type
+ if(datum_type)
+ card_datum = new datum_type
+ illegal = illegal_card
+ if(!card_datum)
+ return
icon = card_datum.pack
icon_state = card_datum.icon_state
name = card_datum.name
desc = card_datum.desc
- illegal = illegal_card
switch(card_datum.rarity)
if("Common")
@@ -378,8 +381,8 @@
var/static/radial_pickup = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_pickup")
/obj/item/tcgcard_deck/Initialize(mapload)
- . = ..()
LoadComponent(/datum/component/storage/concrete/tcg)
+ . = ..()
/obj/item/tcgcard_deck/ComponentInitialize()
. = ..()
diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm
index df5d6703cf..b86e9430aa 100644
--- a/code/modules/unit_tests/_unit_tests.dm
+++ b/code/modules/unit_tests/_unit_tests.dm
@@ -3,9 +3,18 @@
#if defined(UNIT_TESTS) || defined(SPACEMAN_DMM)
+/// For advanced cases, fail unconditionally but don't return (so a test can return multiple results)
+#define TEST_FAIL(reason) (Fail(reason || "No reason", __FILE__, __LINE__))
+
/// Asserts that a condition is true
/// If the condition is not true, fails the test
-#define TEST_ASSERT(assertion, reason) if (!(assertion)) { return Fail("Assertion failed: [reason || "No reason"]") }
+#define TEST_ASSERT(assertion, reason) if (!(assertion)) { return Fail("Assertion failed: [reason || "No reason"]", __FILE__, __LINE__) }
+
+/// Asserts that a parameter is not null
+#define TEST_ASSERT_NOTNULL(a, reason) if (isnull(a)) { return Fail("Expected non-null value: [reason || "No reason"]", __FILE__, __LINE__) }
+
+/// Asserts that a parameter is null
+#define TEST_ASSERT_NULL(a, reason) if (!isnull(a)) { return Fail("Expected null value but received [a]: [reason || "No reason"]", __FILE__, __LINE__) }
/// Asserts that the two parameters passed are equal, fails otherwise
/// Optionally allows an additional message in the case of a failure
@@ -13,7 +22,7 @@
var/lhs = ##a; \
var/rhs = ##b; \
if (lhs != rhs) { \
- return Fail("Expected [isnull(lhs) ? "null" : lhs] to be equal to [isnull(rhs) ? "null" : rhs].[message ? " [message]" : ""]"); \
+ return Fail("Expected [isnull(lhs) ? "null" : lhs] to be equal to [isnull(rhs) ? "null" : rhs].[message ? " [message]" : ""]", __FILE__, __LINE__); \
} \
} while (FALSE)
@@ -23,7 +32,7 @@
var/lhs = ##a; \
var/rhs = ##b; \
if (lhs == rhs) { \
- return Fail("Expected [isnull(lhs) ? "null" : lhs] to not be equal to [isnull(rhs) ? "null" : rhs].[message ? " [message]" : ""]"); \
+ return Fail("Expected [isnull(lhs) ? "null" : lhs] to not be equal to [isnull(rhs) ? "null" : rhs].[message ? " [message]" : ""]", __FILE__, __LINE__); \
} \
} while (FALSE)
@@ -37,8 +46,25 @@
#define UNIT_TEST_FAILED 1
#define UNIT_TEST_SKIPPED 2
+#define TEST_PRE 0
#define TEST_DEFAULT 1
-#define TEST_DEL_WORLD INFINITY
+/// After most test steps, used for tests that run long so shorter issues can be noticed faster
+#define TEST_LONGER 10
+/// This must be the last test to run due to the inherent nature of the test iterating every single tangible atom in the game and qdeleting all of them (while taking long sleeps to make sure the garbage collector fires properly) taking a large amount of time.
+#define TEST_CREATE_AND_DESTROY INFINITY
+
+/// Change color to red on ANSI terminal output, if enabled with -DANSICOLORS.
+#ifdef ANSICOLORS
+#define TEST_OUTPUT_RED(text) "\x1B\x5B1;31m[text]\x1B\x5B0m"
+#else
+#define TEST_OUTPUT_RED(text) (text)
+#endif
+/// Change color to green on ANSI terminal output, if enabled with -DANSICOLORS.
+#ifdef ANSICOLORS
+#define TEST_OUTPUT_GREEN(text) "\x1B\x5B1;32m[text]\x1B\x5B0m"
+#else
+#define TEST_OUTPUT_GREEN(text) (text)
+#endif
/// A trait source when adding traits through unit tests
#define TRAIT_SOURCE_UNIT_TESTS "unit_tests"
@@ -55,7 +81,7 @@
// #include "connect_loc.dm"
// #include "confusion.dm"
// #include "crayons.dm"
-// #include "create_and_destroy.dm"
+#include "create_and_destroy.dm"
// #include "designs.dm"
#include "dynamic_ruleset_sanity.dm"
// #include "egg_glands.dm"
@@ -71,6 +97,7 @@
#include "medical_wounds.dm"
#include "merge_type.dm"
// #include "metabolizing.dm"
+#include "modular_map_loader.dm" //SPLURT EDIT
// #include "ntnetwork_tests.dm"
// #include "outfit_sanity.dm"
// #include "pills.dm"
@@ -105,12 +132,12 @@
/// SANDSTORM TESTS
#include "interactions.dm" //No regrets
-#ifdef REFERENCE_TRACKING //Don't try and parse this file if ref tracking isn't turned on. IE: don't parse ref tracking please mr linter
+#ifdef REFERENCE_TRACKING_DEBUG //Don't try and parse this file if ref tracking isn't turned on. IE: don't parse ref tracking please mr linter
#include "find_reference_sanity.dm"
#endif
#undef TEST_ASSERT
#undef TEST_ASSERT_EQUAL
#undef TEST_ASSERT_NOTEQUAL
-#undef TEST_FOCUS
+//#undef TEST_FOCUS - This define is used by vscode unit test extension to pick specific unit tests to run and appended later so needs to be used out of scope here
#endif
diff --git a/code/modules/unit_tests/anchored_mobs.dm b/code/modules/unit_tests/anchored_mobs.dm
index 103b97e7a9..88487ea2b8 100644
--- a/code/modules/unit_tests/anchored_mobs.dm
+++ b/code/modules/unit_tests/anchored_mobs.dm
@@ -4,6 +4,4 @@
var/mob/M = i
if(initial(M.anchored))
L += "[i]"
- if(!L.len)
- return //passed!
- Fail("The following mobs are defined as anchored. This is incompatible with the new move force/resist system and needs to be revised.: [L.Join(" ")]")
+ TEST_ASSERT(!L.len, "The following mobs are defined as anchored. This is incompatible with the new move force/resist system and needs to be revised.: [L.Join(" ")]")
diff --git a/code/modules/unit_tests/bespoke_id.dm b/code/modules/unit_tests/bespoke_id.dm
index 06676c626c..e1356650de 100644
--- a/code/modules/unit_tests/bespoke_id.dm
+++ b/code/modules/unit_tests/bespoke_id.dm
@@ -5,4 +5,4 @@
for(var/i in subtypesof(/datum/element))
var/datum/element/faketype = i
if((initial(faketype.element_flags) & ELEMENT_BESPOKE) && initial(faketype.id_arg_index) == base_index)
- Fail("A bespoke element was not configured with a proper id_arg_index: [faketype]")
+ TEST_FAIL("A bespoke element was not configured with a proper id_arg_index: [faketype]")
diff --git a/code/modules/unit_tests/card_mismatch.dm b/code/modules/unit_tests/card_mismatch.dm
index 506e88f19c..90d8250ff0 100644
--- a/code/modules/unit_tests/card_mismatch.dm
+++ b/code/modules/unit_tests/card_mismatch.dm
@@ -1,7 +1,6 @@
/datum/unit_test/card_mismatch
/datum/unit_test/card_mismatch/Run()
- var/message = checkCardpacks(SStrading_card_game.card_packs)
- message += checkCardDatums()
- if(message)
- Fail(message)
+ var/message = SStrading_card_game.check_cardpacks(SStrading_card_game.card_packs)
+ message += SStrading_card_game.check_card_datums()
+ TEST_ASSERT(!message, message)
diff --git a/code/modules/unit_tests/chain_pull_through_space.dm b/code/modules/unit_tests/chain_pull_through_space.dm
index 10363d5aad..b59de2a467 100644
--- a/code/modules/unit_tests/chain_pull_through_space.dm
+++ b/code/modules/unit_tests/chain_pull_through_space.dm
@@ -41,22 +41,15 @@
// Walk normally to the left, make sure we're still a chain
alice.Move(locate(run_loc_floor_bottom_left.x + 1, run_loc_floor_bottom_left.y, run_loc_floor_bottom_left.z))
- if (bob.x != run_loc_floor_bottom_left.x + 2)
- return Fail("During normal move, Bob was not at the correct x ([bob.x])")
- if (charlie.x != run_loc_floor_bottom_left.x + 3)
- return Fail("During normal move, Charlie was not at the correct x ([charlie.x])")
+ TEST_ASSERT_EQUAL(bob.x, run_loc_floor_bottom_left.x + 2, "During normal move, Bob was not at the correct x ([bob.x])")
+ TEST_ASSERT_EQUAL(charlie.x, run_loc_floor_bottom_left.x + 3, "During normal move, Charlie was not at the correct x ([charlie.x])")
// We're going through the space turf now that should teleport us
alice.Move(run_loc_floor_bottom_left)
- if (alice.z != space_tile.destination_z)
- return Fail("Alice did not teleport to the destination z-level. Current location: ([alice.x], [alice.y], [alice.z])")
+ TEST_ASSERT_EQUAL(alice.z, space_tile.destination_z, "Alice did not teleport to the destination z-level. Current location: ([alice.x], [alice.y], [alice.z])")
- if (bob.z != space_tile.destination_z)
- return Fail("Bob did not teleport to the destination z-level. Current location: ([bob.x], [bob.y], [bob.z])")
- if (!bob.Adjacent(alice))
- return Fail("Bob is not adjacent to Alice. Bob is at [bob.x], Alice is at [alice.x]")
+ TEST_ASSERT_EQUAL(bob.z, space_tile.destination_z, "Bob did not teleport to the destination z-level. Current location: ([bob.x], [bob.y], [bob.z])")
+ TEST_ASSERT(bob.Adjacent(alice), "Bob is not adjacent to Alice. Bob is at [bob.x], Alice is at [alice.x]")
- if (charlie.z != space_tile.destination_z)
- return Fail("Charlie did not teleport to the destination z-level. Current location: ([charlie.x], [charlie.y], [charlie.z])")
- if (!charlie.Adjacent(bob))
- return Fail("Charlie is not adjacent to Bob. Charlie is at [charlie.x], Bob is at [bob.x]")
+ TEST_ASSERT_EQUAL(charlie.z, space_tile.destination_z, "Charlie did not teleport to the destination z-level. Current location: ([charlie.x], [charlie.y], [charlie.z])")
+ TEST_ASSERT(charlie.Adjacent(bob), "Charlie is not adjacent to Bob. Charlie is at [charlie.x], Bob is at [bob.x]")
diff --git a/code/modules/unit_tests/character_saving.dm b/code/modules/unit_tests/character_saving.dm
index cca17b81e4..f7ca8b738b 100644
--- a/code/modules/unit_tests/character_saving.dm
+++ b/code/modules/unit_tests/character_saving.dm
@@ -12,17 +12,17 @@
P.save_character()
P.load_character()
if(P.features["flavor_text"] != UNIT_TEST_SAVING_FLAVOR_TEXT)
- Fail("Flavor text is failing to save.")
+ TEST_FAIL("Flavor text is failing to save.")
if(P.features["silicon_flavor_text"] != UNIT_TEST_SAVING_SILICON_FLAVOR_TEXT)
- Fail("Silicon flavor text is failing to save.")
+ TEST_FAIL("Silicon flavor text is failing to save.")
if(P.features["ooc_notes"] != UNIT_TEST_SAVING_OOC_NOTES)
- Fail("OOC text is failing to save.")
+ TEST_FAIL("OOC text is failing to save.")
P.save_character()
P.load_character()
if((P.features["flavor_text"] != UNIT_TEST_SAVING_FLAVOR_TEXT) || (P.features["silicon_flavor_text"] != UNIT_TEST_SAVING_SILICON_FLAVOR_TEXT) || (P.features["ooc_notes"] != UNIT_TEST_SAVING_OOC_NOTES))
- Fail("Repeated saving and loading possibly causing save deletion.")
+ TEST_FAIL("Repeated saving and loading possibly causing save deletion.")
catch(var/exception/e)
- Fail("Failed to save and load character due to exception [e.file]:[e.line], [e.name]")
+ TEST_FAIL("Failed to save and load character due to exception [e.file]:[e.line], [e.name]")
#undef UNIT_TEST_SAVING_FLAVOR_TEXT
#undef UNIT_TEST_SAVING_SILICON_FLAVOR_TEXT
diff --git a/code/modules/unit_tests/component_tests.dm b/code/modules/unit_tests/component_tests.dm
index 0099d7508c..f609e73c4b 100644
--- a/code/modules/unit_tests/component_tests.dm
+++ b/code/modules/unit_tests/component_tests.dm
@@ -8,5 +8,5 @@
var/dupe_type = initial(comp.dupe_type)
if(dupe_type && !ispath(dupe_type))
bad_dts += t
- if(length(bad_dms) || length(bad_dts))
- Fail("Components with invalid dupe modes: ([bad_dms.Join(",")]) ||| Components with invalid dupe types: ([bad_dts.Join(",")])")
+ TEST_ASSERT(!length(bad_dms) && !length(bad_dts),
+ "Components with invalid dupe modes: ([bad_dms.Join(",")]) ||| Components with invalid dupe types: ([bad_dts.Join(",")])")
diff --git a/code/modules/unit_tests/crafting_recipes.dm b/code/modules/unit_tests/crafting_recipes.dm
index 2d8c273786..9b437c801c 100644
--- a/code/modules/unit_tests/crafting_recipes.dm
+++ b/code/modules/unit_tests/crafting_recipes.dm
@@ -2,6 +2,6 @@
for(var/i in GLOB.crafting_recipes)
var/datum/crafting_recipe/R = i
if(!R.subcategory)
- Fail("Invalid subcategory on [R] ([R.type]).")
+ TEST_FAIL("Invalid subcategory on [R] ([R.type]).")
if(!R.category && (R.category != CAT_NONE))
- Fail("Invalid category on [R] ([R.type])")
+ TEST_FAIL("Invalid category on [R] ([R.type])")
diff --git a/code/modules/unit_tests/create_and_destroy.dm b/code/modules/unit_tests/create_and_destroy.dm
new file mode 100644
index 0000000000..9326dcf3f1
--- /dev/null
+++ b/code/modules/unit_tests/create_and_destroy.dm
@@ -0,0 +1,231 @@
+///Delete one of every type, sleep a while, then check to see if anything has gone fucky
+/datum/unit_test/create_and_destroy
+ //You absolutely must run last
+ priority = TEST_CREATE_AND_DESTROY
+
+GLOBAL_VAR_INIT(running_create_and_destroy, FALSE)
+/datum/unit_test/create_and_destroy/Run()
+ //We'll spawn everything here
+ var/turf/spawn_at = run_loc_floor_bottom_left
+ var/list/ignore = list(
+ //Never meant to be created, errors out the ass for mobcode reasons
+ /mob/living/carbon,
+ //Nother template type, doesn't like being created with no seed
+ // /obj/item/food/grown,
+ //And another
+ /obj/item/slimecross/recurring,
+ //This should be obvious
+ /obj/machinery/doomsday_device,
+ //Yet more templates
+ // /obj/machinery/restaurant_portal,
+ //Template type
+ /obj/effect/mob_spawn,
+ /obj/effect/mob_spawn/alien,
+ /obj/effect/mob_spawn/alien/corpse,
+ /obj/effect/mob_spawn/alien/corpse/humanoid,
+ //Template type
+ // /obj/structure/holosign/robot_seat,
+ //Singleton
+ /mob/dview,
+ //Template type
+ /obj/item/bodypart,
+ //This is meant to fail extremely loud every single time it occurs in any environment in any context, and it falsely alarms when this unit test iterates it. Let's not spawn it in.
+ // /obj/merge_conflict_marker,
+ //briefcase launchpads erroring
+ /obj/machinery/launchpad/briefcase,
+ // Needs mind
+ /obj/item/phylactery,
+ //Template type
+ /obj/item/genital_equipment,
+ //No ID to pass in
+ /obj/effect/spawner/structure/window/reinforced/tinted/electrochromatic,
+ // Needs proper args
+ /obj/effect/buildmode_line,
+ //Spawns it in the wall and shuttle controller runtimes (actually not caught in unit test)
+ /obj/effect/landmark/latejoin,
+ //Those DAMN SWARMERS ARE EATING EVERYTHING WHILE TEST IS RUNNING
+ /mob/living/simple_animal/hostile/megafauna/swarmer_swarm_beacon,
+ // Randomly causes test to fail because of random movement
+ /obj/item/grenade/clusterbuster/segment,
+ // With 10% Spawns `while() ... sleep()` proc that causes her hat to harddel // TODO rewrite helmet code attack_self() and port modern /tg/ helmet code
+ /mob/living/carbon/monkey/angry,
+ )
+ //Say it with me now, type template
+ ignore += typesof(/obj/effect/mapping_helpers)
+ //This turf existing is an error in and of itself
+ ignore += typesof(/turf/baseturf_skipover)
+ ignore += typesof(/turf/baseturf_bottom)
+ // Messes with test results by teleporting stuff out of location
+ ignore += typesof(/turf/open/space/transit)
+ //This demands a borg, so we'll let if off easy
+ ignore += typesof(/obj/item/modular_computer/tablet/integrated)
+ //This one demands a computer, ditto
+ ignore += typesof(/obj/item/modular_computer/processor)
+ //Very finiky, blacklisting to make things easier
+ ignore += typesof(/obj/item/poster/wanted)
+ //This expects a seed, we can't pass it
+ ignore += typesof(/obj/item/reagent_containers/food/snacks/grown)
+ //Needs clients / mobs to observe it to exist. Also includes hallucinations.
+ // ignore += typesof(/obj/effect/client_image_holder)
+ ignore += typesof(/obj/effect/hallucination)
+ //Same to above. Needs a client / mob / hallucination to observe it to exist.
+ ignore += typesof(/obj/item/projectile/hallucination)
+ // ignore += typesof(/obj/item/hallucinated)
+ //Can't pass in a thing to glow
+ ignore += typesof(/obj/effect/abstract/eye_lighting)
+ //We don't have a pod
+ ignore += typesof(/obj/effect/pod_landingzone_effect)
+ ignore += typesof(/obj/effect/pod_landingzone)
+ //We have a baseturf limit of 10, adding more than 10 baseturf helpers will kill CI, so here's a future edge case to fix.
+ ignore += typesof(/obj/effect/baseturf_helper)
+ //No host to pass in
+ ignore += typesof(/obj/effect/abstract/proximity_checker)
+ //No owner to pass in
+ ignore += typesof(/obj/effect/abstract/parry)
+ //No tauma to pass in
+ ignore += typesof(/mob/camera/imaginary_friend)
+ //There's no shapeshift to hold
+ ignore += typesof(/obj/shapeshift_holder)
+ //No pod to gondola
+ ignore += typesof(/mob/living/simple_animal/pet/gondola/gondolapod)
+ //No heart to give
+ // ignore += typesof(/obj/structure/ethereal_crystal)
+ //No linked console
+ ignore += typesof(/mob/camera/aiEye/remote/base_construction)
+ //See above
+ ignore += typesof(/mob/camera/aiEye/remote/shuttle_docker)
+ //Hangs a ref post invoke async, which we don't support. Could put a qdeleted check but it feels hacky
+ ignore += typesof(/obj/effect/anomaly/grav/high)
+ //See above
+ ignore += typesof(/obj/effect/timestop)
+ // See above
+ ignore += typesof(/obj/effect/domain_expansion)
+ //Invoke async in init, skippppp
+ ignore += typesof(/mob/living/silicon/robot/modules)
+ //This lad also sleeps
+ ignore += typesof(/obj/item/hilbertshotel)
+ //this boi spawns turf changing stuff, and it stacks and causes pain. Let's just not
+ ignore += typesof(/obj/effect/sliding_puzzle)
+ //Stacks baseturfs, can't be tested here
+ ignore += typesof(/obj/effect/temp_visual/lava_warning)
+ //Stacks baseturfs, can't be tested here
+ // ignore += typesof(/obj/effect/landmark/ctf)
+ //Our system doesn't support it without warning spam from unregister calls on things that never registered
+ ignore += typesof(/obj/docking_port)
+ //Asks for a shuttle that may not exist, let's leave it alone
+ ignore += typesof(/obj/item/pinpointer/shuttle)
+ //This spawns beams as a part of init, which can sleep past an async proc. This hangs a ref, and fucks us. It's only a problem here because the beam sleeps with CHECK_TICK
+ // ignore += typesof(/obj/structure/alien/resin/flower_bud)
+ //Needs a linked mecha
+ ignore += typesof(/obj/effect/skyfall_landingzone)
+ //Expects a mob to holderize, we have nothing to give
+ ignore += typesof(/obj/item/clothing/head/mob_holder)
+ //Needs cards passed into the initilazation args
+ ignore += typesof(/obj/item/toy/cards/cardhand)
+ //Needs cards passed into the initilazation args
+ ignore += typesof(/obj/item/toy/cards/cardhand)
+ //Needs a holodeck area linked to it which is not guarenteed to exist and technically is supposed to have a 1:1 relationship with computer anyway.
+ ignore += typesof(/obj/machinery/computer/holodeck)
+ //runtimes if not paired with a landmark
+ // ignore += typesof(/obj/structure/industrial_lift)
+ // Runtimes if the associated machinery does not exist, but not the base type
+ // ignore += subtypesof(/obj/machinery/airlock_controller)
+ // All of them sleep with CHECK_TICK and hang refs. //TODO: Port modern /tg/ techwebs
+ ignore += typesof(/obj/machinery/rnd/production)
+ // This one sleeps too in it's AI code
+ ignore += typesof(/mob/living/simple_animal/hostile/swarmer)
+
+ var/list/cached_contents = spawn_at.contents.Copy()
+ var/original_turf_type = spawn_at.type
+ var/original_baseturfs = islist(spawn_at.baseturfs) ? spawn_at.baseturfs.Copy() : spawn_at.baseturfs
+ var/original_baseturf_count = length(original_baseturfs)
+
+ GLOB.running_create_and_destroy = TRUE
+ for(var/type_path in typesof(/atom/movable, /turf) - ignore) //No areas please
+ if(ispath(type_path, /turf))
+ spawn_at.ChangeTurf(type_path)
+ //We change it back to prevent baseturfs stacking and hitting the limit
+ spawn_at.ChangeTurf(original_turf_type, original_baseturfs)
+ if(original_baseturf_count != length(spawn_at.baseturfs))
+ TEST_FAIL("[type_path] changed the amount of baseturfs from [original_baseturf_count] to [length(spawn_at.baseturfs)]; [english_list(original_baseturfs)] to [islist(spawn_at.baseturfs) ? english_list(spawn_at.baseturfs) : spawn_at.baseturfs]")
+ //Warn if it changes again
+ original_baseturfs = islist(spawn_at.baseturfs) ? spawn_at.baseturfs.Copy() : spawn_at.baseturfs
+ original_baseturf_count = length(original_baseturfs)
+ else
+ var/atom/creation = new type_path(spawn_at)
+ if(QDELETED(creation))
+ continue
+ //Go all in
+ qdel(creation, force = TRUE)
+ //This will hold a ref to the last thing we process unless we set it to null
+ //Yes byond is fucking sinful
+ creation = null
+
+ //There's a lot of stuff that either spawns stuff in on create, or removes stuff on destroy. Let's cut it all out so things are easier to deal with
+ var/list/to_del = spawn_at.contents - cached_contents
+ if(length(to_del))
+ for(var/atom/to_kill in to_del)
+ qdel(to_kill)
+
+ GLOB.running_create_and_destroy = FALSE
+ //Hell code, we're bound to have ended the round somehow so let's stop if from ending while we work
+ SSticker.delay_end = TRUE
+ //Prevent the garbage subsystem from harddeling anything, if only to save time
+ SSgarbage.collection_timeout[GC_QUEUE_HARDDELETE] = 10000 HOURS
+ //Clear it, just in case
+ cached_contents.Cut()
+
+ //Now that we've qdel'd everything, let's sleep until the gc has processed all the shit we care about
+ var/time_needed = SSgarbage.collection_timeout[GC_QUEUE_CHECK]
+ var/start_time = world.time
+ var/garbage_queue_processed = FALSE
+
+ sleep(time_needed)
+ while(!garbage_queue_processed)
+ var/list/queue_to_check = SSgarbage.queues[GC_QUEUE_CHECK]
+ //How the hell did you manage to empty this? Good job!
+ if(!length(queue_to_check))
+ garbage_queue_processed = TRUE
+ break
+
+ var/list/oldest_packet = queue_to_check[1]
+ //Pull out the time we deld at
+ var/qdeld_at = oldest_packet[1]
+ //If we've found a packet that got del'd later then we finished, then all our shit has been processed
+ if(qdeld_at > start_time)
+ garbage_queue_processed = TRUE
+ break
+
+ if(world.time > start_time + time_needed + 30 MINUTES) //If this gets us gitbanned I'm going to laugh so hard
+ TEST_FAIL("Something has gone horribly wrong, the garbage queue has been processing for well over 30 minutes. What the hell did you do")
+ break
+
+ //Immediately fire the gc right after
+ SSgarbage.next_fire = 1
+ //Unless you've seriously fucked up, queue processing shouldn't take "that" long. Let her run for a bit, see if anything's changed
+ sleep(20 SECONDS)
+
+ //Alright, time to see if anything messed up
+ var/list/cache_for_sonic_speed = SSgarbage.items
+ for(var/path in cache_for_sonic_speed)
+ var/datum/qdel_item/item = cache_for_sonic_speed[path]
+ if(item.failures)
+ TEST_FAIL("[item.name] hard deleted [item.failures] times out of a total del count of [item.qdels]")
+ if(item.no_respect_force)
+ TEST_FAIL("[item.name] failed to respect force deletion [item.no_respect_force] times out of a total del count of [item.qdels]")
+ if(item.no_hint)
+ TEST_FAIL("[item.name] failed to return a qdel hint [item.no_hint] times out of a total del count of [item.qdels]")
+
+ cache_for_sonic_speed = SSatoms.BadInitializeCalls
+ for(var/path in cache_for_sonic_speed)
+ var/fails = cache_for_sonic_speed[path]
+ if(fails & BAD_INIT_NO_HINT)
+ TEST_FAIL("[path] didn't return an Initialize hint")
+ if(fails & BAD_INIT_QDEL_BEFORE)
+ TEST_FAIL("[path] qdel'd in New()")
+ if(fails & BAD_INIT_SLEPT)
+ TEST_FAIL("[path] slept during Initialize()")
+
+ SSticker.delay_end = FALSE
+ //This shouldn't be needed, but let's be polite
+ SSgarbage.collection_timeout[GC_QUEUE_HARDDELETE] = 10 SECONDS
diff --git a/code/modules/unit_tests/dynamic_ruleset_sanity.dm b/code/modules/unit_tests/dynamic_ruleset_sanity.dm
index 837e0b235c..8ec500e1a8 100644
--- a/code/modules/unit_tests/dynamic_ruleset_sanity.dm
+++ b/code/modules/unit_tests/dynamic_ruleset_sanity.dm
@@ -9,9 +9,9 @@
var/is_lone = initial(ruleset.flags) & (LONE_RULESET | HIGH_IMPACT_RULESET)
if (has_scaling_cost && is_lone)
- Fail("[ruleset] has a scaling_cost, but is also a lone/highlander ruleset.")
+ TEST_FAIL("[ruleset] has a scaling_cost, but is also a lone/highlander ruleset.")
else if (!has_scaling_cost && !is_lone)
- Fail("[ruleset] has no scaling cost, but is also not a lone/highlander ruleset.")
+ TEST_FAIL("[ruleset] has no scaling cost, but is also not a lone/highlander ruleset.")
/// Verifies that dynamic rulesets have unique antag_flag.
/datum/unit_test/dynamic_unique_antag_flags
@@ -26,11 +26,11 @@
var/antag_flag = initial(ruleset.antag_flag)
if (isnull(antag_flag))
- Fail("[ruleset] has a null antag_flag!")
+ TEST_FAIL("[ruleset] has a null antag_flag!")
continue
if (antag_flag in known_antag_flags)
- Fail("[ruleset] has a non-unique antag_flag [antag_flag] (used by [known_antag_flags[antag_flag]])!")
+ TEST_FAIL("[ruleset] has a non-unique antag_flag [antag_flag] (used by [known_antag_flags[antag_flag]])!")
continue
known_antag_flags[antag_flag] = ruleset
diff --git a/code/modules/unit_tests/find_reference_sanity.dm b/code/modules/unit_tests/find_reference_sanity.dm
index f41714f065..1dcabc7bac 100644
--- a/code/modules/unit_tests/find_reference_sanity.dm
+++ b/code/modules/unit_tests/find_reference_sanity.dm
@@ -2,12 +2,14 @@
/datum/unit_test/find_reference_sanity
/atom/movable/ref_holder
+ var/static/atom/movable/ref_test/static_test
var/atom/movable/ref_test/test
var/list/test_list = list()
var/list/test_assoc_list = list()
/atom/movable/ref_holder/Destroy()
test = null
+ static_test = null
test_list.Cut()
test_assoc_list.Cut()
return ..()
@@ -25,6 +27,12 @@
SSgarbage.should_save_refs = TRUE
//Sanity check
+ /*
+ #if DM_VERSION >= 515
+ var/refcount = refcount(victim)
+ TEST_ASSERT_EQUAL(refcount, 3, "Should be: test references: 0 + baseline references: 3 (victim var,loc,allocated list)")
+ #endif
+ */
victim.DoSearchVar(testbed, "Sanity Check", search_time = 1) //We increment search time to get around an optimization
TEST_ASSERT(!victim.found_refs.len, "The ref-tracking tool found a ref where none existed")
SSgarbage.should_save_refs = FALSE
@@ -39,6 +47,12 @@
testbed.test_list += victim
testbed.test_assoc_list["baseline"] = victim
+ /*
+ #if DM_VERSION >= 515
+ var/refcount = refcount(victim)
+ TEST_ASSERT_EQUAL(refcount, 6, "Should be: test references: 3 + baseline references: 3 (victim var,loc,allocated list)")
+ #endif
+ */
victim.DoSearchVar(testbed, "First Run", search_time = 2)
TEST_ASSERT(victim.found_refs["test"], "The ref-tracking tool failed to find a regular value")
@@ -56,6 +70,12 @@
testbed.vis_contents += victim
testbed.test_assoc_list[victim] = TRUE
+ /*
+ #if DM_VERSION >= 515
+ var/refcount = refcount(victim)
+ TEST_ASSERT_EQUAL(refcount, 6, "Should be: test references: 3 + baseline references: 3 (victim var,loc,allocated list)")
+ #endif
+ */
victim.DoSearchVar(testbed, "Second Run", search_time = 3)
//This is another sanity check
@@ -76,6 +96,12 @@
var/list/to_find_assoc = list(victim)
testbed.test_assoc_list["Nesting"] = to_find_assoc
+ /*
+ #if DM_VERSION >= 515
+ var/refcount = refcount(victim)
+ TEST_ASSERT_EQUAL(refcount, 6, "Should be: test references: 3 + baseline references: 3 (victim var,loc,allocated list)")
+ #endif
+ */
victim.DoSearchVar(victim, "Third Run Self", search_time = 4)
victim.DoSearchVar(testbed, "Third Run Testbed", search_time = 4)
TEST_ASSERT(victim.found_refs["self_ref"], "The ref-tracking tool failed to find a self reference")
@@ -90,7 +116,12 @@
//Calm before the storm
testbed.test_assoc_list = list(null = victim)
-
+ /*
+ #if DM_VERSION >= 515
+ var/refcount = refcount(victim)
+ TEST_ASSERT_EQUAL(refcount, 4, "Should be: test references: 1 + baseline references: 3 (victim var,loc,allocated list)")
+ #endif
+ */
victim.DoSearchVar(testbed, "Fourth Run", search_time = 5)
TEST_ASSERT(testbed.test_assoc_list, "The ref-tracking tool failed to find a null key'd assoc list entry")
@@ -105,7 +136,39 @@
var/list/to_find_null_assoc_nested = list(victim)
testbed.test_assoc_list[null] = to_find_null_assoc_nested
+ /*
+ #if DM_VERSION >= 515
+ var/refcount = refcount(victim)
+ TEST_ASSERT_EQUAL(refcount, 5, "Should be: test references: 2 + baseline references: 3 (victim var,loc,allocated list)")
+ #endif
+ */
victim.DoSearchVar(testbed, "Fifth Run", search_time = 6)
TEST_ASSERT(victim.found_refs[to_find_in_key], "The ref-tracking tool failed to find a nested assoc list key")
TEST_ASSERT(victim.found_refs[to_find_null_assoc_nested], "The ref-tracking tool failed to find a null key'd nested assoc list entry")
SSgarbage.should_save_refs = FALSE
+
+/datum/unit_test/find_reference_static_inPvestigation/Run()
+ var/atom/movable/ref_test/victim = allocate(/atom/movable/ref_test)
+ var/atom/movable/ref_holder/testbed = allocate(/atom/movable/ref_holder)
+ pass(testbed)
+ SSgarbage.should_save_refs = TRUE
+
+ //Lets check static vars now, since those can be a real headache
+ testbed.static_test = victim
+
+ //Yes we do actually need to do this. The searcher refuses to read weird lists
+ //And global.vars is a really weird list
+ var/global_vars = list()
+ for(var/key in global.vars)
+ global_vars[key] = global.vars[key]
+
+ /*
+ #if DM_VERSION >= 515
+ var/refcount = refcount(victim)
+ TEST_ASSERT_EQUAL(refcount, 5, "Should be: test references: 2 + baseline references: 3 (victim var,loc,allocated list)")
+ #endif
+ */
+ victim.DoSearchVar(global_vars, "Sixth Run", search_time = 7)
+
+ TEST_ASSERT(victim.found_refs[global_vars], "The ref-tracking tool failed to find a natively global variable")
+ SSgarbage.should_save_refs = FALSE
diff --git a/code/modules/unit_tests/heretic_knowledge.dm b/code/modules/unit_tests/heretic_knowledge.dm
index a433bce1ec..484cc90245 100644
--- a/code/modules/unit_tests/heretic_knowledge.dm
+++ b/code/modules/unit_tests/heretic_knowledge.dm
@@ -18,4 +18,4 @@
var/list/unreachables = all_possible_knowledge - list_to_check
for(var/X in unreachables)
var/datum/eldritch_knowledge/eldritch_knowledge = X
- Fail("[initial(eldritch_knowledge.name)] is unreachable by players! Add it to the blacklist in /code/modules/unit_tests/heretic_knowledge.dm if it is purposeful!")
+ TEST_FAIL("[initial(eldritch_knowledge.name)] is unreachable by players! Add it to the blacklist in /code/modules/unit_tests/heretic_knowledge.dm if it is purposeful!")
diff --git a/code/modules/unit_tests/keybinding_init.dm b/code/modules/unit_tests/keybinding_init.dm
index 16141bc553..c9d17f688a 100644
--- a/code/modules/unit_tests/keybinding_init.dm
+++ b/code/modules/unit_tests/keybinding_init.dm
@@ -3,4 +3,4 @@
var/datum/keybinding/KB = i
if(initial(KB.keybind_signal) || !initial(KB.name))
continue
- Fail("[initial(KB.name)] does not have a keybind signal defined.")
+ TEST_FAIL("[KB.name] does not have a keybind signal defined.")
diff --git a/code/modules/unit_tests/merge_type.dm b/code/modules/unit_tests/merge_type.dm
index 1aed82e6a3..a89df7b492 100644
--- a/code/modules/unit_tests/merge_type.dm
+++ b/code/modules/unit_tests/merge_type.dm
@@ -12,4 +12,4 @@
for(var/stackpath in paths)
var/obj/item/stack/stack = new stackpath
if(!stack.merge_type)
- Fail("([stack]) lacks set merge_type variable!")
+ TEST_FAIL("([stack]) lacks set merge_type variable!")
diff --git a/code/modules/unit_tests/modular_map_loader.dm b/code/modules/unit_tests/modular_map_loader.dm
new file mode 100644
index 0000000000..df247e720a
--- /dev/null
+++ b/code/modules/unit_tests/modular_map_loader.dm
@@ -0,0 +1,10 @@
+/datum/unit_test/modular_map_loader
+
+/datum/unit_test/modular_map_loader/Run()
+ for (var/obj/modular_map_root/map_root_type as anything in subtypesof(/obj/modular_map_root))
+ var/config_file = initial(map_root_type.config_file)
+ if (!fexists(config_file))
+ Fail("[map_root_type] points to a config file which does not exist!")
+ continue
+ if (rustg_read_toml_file(config_file) == null)
+ Fail("[map_root_type] points to a config file which is invalid!")
diff --git a/code/modules/unit_tests/outfit_sanity.dm b/code/modules/unit_tests/outfit_sanity.dm
index e084069cf7..2a4d1c188e 100644
--- a/code/modules/unit_tests/outfit_sanity.dm
+++ b/code/modules/unit_tests/outfit_sanity.dm
@@ -2,7 +2,7 @@
H.equip_to_slot_or_del(new outfit.##outfit_key(H), ##slot_name, TRUE); \
/* We don't check the result of equip_to_slot_or_del because it returns false for random jumpsuits, as they delete themselves on init */ \
if (!H.get_item_by_slot(##slot_name)) { \
- Fail("[outfit.name]'s [#outfit_key] is invalid!"); \
+ TEST_FAIL("[outfit.name]'s [#outfit_key] is invalid!"); \
} \
}
@@ -51,6 +51,6 @@
var/number = backpack_contents[path] || 1
for (var/_ in 1 to number)
if (!H.equip_to_slot_or_del(new path(H), ITEM_SLOT_BACKPACK, TRUE))
- Fail("[outfit.name]'s backpack_contents are invalid! Couldn't add [path] to backpack.")
+ TEST_FAIL("[outfit.name]'s backpack_contents are invalid! Couldn't add [path] to backpack.")
#undef CHECK_OUTFIT_SLOT
diff --git a/code/modules/unit_tests/plantgrowth_tests.dm b/code/modules/unit_tests/plantgrowth_tests.dm
index 6b40236860..b1b213f034 100644
--- a/code/modules/unit_tests/plantgrowth_tests.dm
+++ b/code/modules/unit_tests/plantgrowth_tests.dm
@@ -17,11 +17,11 @@
for(var/i in 1 to seed.growthstages)
if("[seed.icon_grow][i]" in states)
continue
- Fail("[seed.name] ([seed.type]) lacks the [seed.icon_grow][i] icon!")
+ TEST_FAIL("[seed.name] ([seed.type]) lacks the [seed.icon_grow][i] icon!")
if(!(seed.icon_dead in states))
- Fail("[seed.name] ([seed.type]) lacks the [seed.icon_dead] icon!")
+ TEST_FAIL("[seed.name] ([seed.type]) lacks the [seed.icon_dead] icon!")
if(seed.icon_harvest) // mushrooms have no grown sprites, same for items with no product
if(!(seed.icon_harvest in states))
- Fail("[seed.name] ([seed.type]) lacks the [seed.icon_harvest] icon!")
+ TEST_FAIL("[seed.name] ([seed.type]) lacks the [seed.icon_harvest] icon!")
diff --git a/code/modules/unit_tests/projectiles.dm b/code/modules/unit_tests/projectiles.dm
index f1a2391c07..ddc7979d3d 100644
--- a/code/modules/unit_tests/projectiles.dm
+++ b/code/modules/unit_tests/projectiles.dm
@@ -2,4 +2,4 @@
for(var/path in typesof(/obj/item/projectile))
var/obj/item/projectile/projectile = path
if(initial(projectile.movement_type) & PHASING)
- Fail("[path] has default movement type PHASING. Piercing projectiles should be done using the projectile piercing system, not movement_types!")
+ TEST_FAIL("[path] has default movement type PHASING. Piercing projectiles should be done using the projectile piercing system, not movement_types!")
diff --git a/code/modules/unit_tests/reactions.dm b/code/modules/unit_tests/reactions.dm
index c2b62f6fdc..596e9eca8d 100644
--- a/code/modules/unit_tests/reactions.dm
+++ b/code/modules/unit_tests/reactions.dm
@@ -4,4 +4,4 @@
var/test_info = G.test()
if(!test_info["success"])
var/message = test_info["message"]
- Fail("Gas reaction [G.name] is failing its unit test with the following message: [message]")
+ TEST_FAIL("Gas reaction [G.name] is failing its unit test with the following message: [message]")
diff --git a/code/modules/unit_tests/reagent_id_typos.dm b/code/modules/unit_tests/reagent_id_typos.dm
index d6548852fa..f858349999 100644
--- a/code/modules/unit_tests/reagent_id_typos.dm
+++ b/code/modules/unit_tests/reagent_id_typos.dm
@@ -11,4 +11,4 @@
var/datum/chemical_reaction/R = V
for(var/id in (R.required_reagents + R.required_catalysts))
if(!GLOB.chemical_reagents_list[id])
- Fail("Unknown chemical id \"[id]\" in recipe [R.type]")
+ TEST_FAIL("Unknown chemical id \"[id]\" in recipe [R.type]")
diff --git a/code/modules/unit_tests/reagent_recipe_collisions.dm b/code/modules/unit_tests/reagent_recipe_collisions.dm
index 20e875422f..b75a17a7e7 100644
--- a/code/modules/unit_tests/reagent_recipe_collisions.dm
+++ b/code/modules/unit_tests/reagent_recipe_collisions.dm
@@ -12,4 +12,4 @@
var/datum/chemical_reaction/r1 = reactions[i]
var/datum/chemical_reaction/r2 = reactions[i2]
if(chem_recipes_do_conflict(r1, r2))
- Fail("Chemical recipe conflict between [r1.type] and [r2.type]")
+ TEST_FAIL("Chemical recipe conflict between [r1.type] and [r2.type]")
diff --git a/code/modules/unit_tests/species_whitelists.dm b/code/modules/unit_tests/species_whitelists.dm
index 145f3a259f..ec05d0cf9f 100644
--- a/code/modules/unit_tests/species_whitelists.dm
+++ b/code/modules/unit_tests/species_whitelists.dm
@@ -2,4 +2,4 @@
for(var/typepath in subtypesof(/datum/species))
var/datum/species/S = typepath
if(initial(S.changesource_flags) == NONE)
- Fail("A species type was detected with no changesource flags: [S]")
+ TEST_FAIL("A species type was detected with no changesource flags: [S]")
diff --git a/code/modules/unit_tests/subsystem_init.dm b/code/modules/unit_tests/subsystem_init.dm
index 7d5473bc1b..c377302ba6 100644
--- a/code/modules/unit_tests/subsystem_init.dm
+++ b/code/modules/unit_tests/subsystem_init.dm
@@ -4,4 +4,4 @@
if(ss.flags & SS_NO_INIT)
continue
if(!ss.initialized)
- Fail("[ss]([ss.type]) is a subsystem meant to initialize but doesn't get set as initialized.")
+ TEST_FAIL("[ss]([ss.type]) is a subsystem meant to initialize but doesn't get set as initialized.")
diff --git a/code/modules/unit_tests/timer_sanity.dm b/code/modules/unit_tests/timer_sanity.dm
index d92323a525..dbdf3f6d8e 100644
--- a/code/modules/unit_tests/timer_sanity.dm
+++ b/code/modules/unit_tests/timer_sanity.dm
@@ -1,3 +1,3 @@
/datum/unit_test/timer_sanity/Run()
- if(SStimer.bucket_count < 0)
- Fail("SStimer is going into negative bucket count from something")
+ TEST_ASSERT(SStimer.bucket_count >= 0,
+ "SStimer is going into negative bucket count from something")
diff --git a/code/modules/unit_tests/unit_test.dm b/code/modules/unit_tests/unit_test.dm
index aee62b7a52..4fc289a220 100644
--- a/code/modules/unit_tests/unit_test.dm
+++ b/code/modules/unit_tests/unit_test.dm
@@ -3,7 +3,7 @@
Usage:
Override /Run() to run your test code
-Call Fail() to fail the test (You should specify a reason)
+Call TEST_FAIL() to fail the test (You should specify a reason)
You may use /New() and /Destroy() for setup/teardown respectively
@@ -15,6 +15,18 @@ GLOBAL_DATUM(current_test, /datum/unit_test)
GLOBAL_VAR_INIT(failed_any_test, FALSE)
GLOBAL_VAR(test_log)
+/// A list of every test that is currently focused.
+/// Use the PERFORM_ALL_TESTS macro instead.
+GLOBAL_VAR_INIT(focused_tests, focused_tests())
+
+/proc/focused_tests()
+ var/list/focused_tests = list()
+ for (var/datum/unit_test/unit_test as anything in subtypesof(/datum/unit_test))
+ if (initial(unit_test.focus))
+ focused_tests += unit_test
+
+ return focused_tests.len > 0 ? focused_tests : null
+
/datum/unit_test
//Bit of metadata for the future maybe
var/list/procs_tested
@@ -62,15 +74,15 @@ GLOBAL_VAR(test_log)
return ..()
/datum/unit_test/proc/Run()
- Fail("Run() called parent or not implemented")
+ TEST_FAIL("Run() called parent or not implemented")
-/datum/unit_test/proc/Fail(reason = "No reason")
+/datum/unit_test/proc/Fail(reason = "No reason", file = "OUTDATED_TEST", line = 1)
succeeded = FALSE
if(!istext(reason))
reason = "FORMATTED: [reason != null ? reason : "NULL"]"
- LAZYADD(fail_reasons, reason)
+ LAZYADD(fail_reasons, list(list(reason, file, line)))
/// Allocates an instance of the provided type, and places it somewhere in an available loc
/// Instances allocated through this proc will be destroyed when the test is over
@@ -80,16 +92,71 @@ GLOBAL_VAR(test_log)
arguments = list(run_loc_floor_bottom_left)
else if (arguments[1] == null)
arguments[1] = run_loc_floor_bottom_left
- var/instance = new type(arglist(arguments))
+ var/instance
+ // Byond will throw an index out of bounds if arguments is empty in that arglist call. Sigh
+ if(length(arguments))
+ instance = new type(arglist(arguments))
+ else
+ instance = new type()
allocated += instance
return instance
+/*
+/datum/unit_test/proc/test_screenshot(name, icon/icon)
+ if (!istype(icon))
+ TEST_FAIL("[icon] is not an icon.")
+ return
+
+ var/path_prefix = replacetext(replacetext("[type]", "/datum/unit_test/", ""), "/", "_")
+ name = replacetext(name, "/", "_")
+
+ var/filename = "code/modules/unit_tests/screenshots/[path_prefix]_[name].png"
+
+ if (fexists(filename))
+ var/data_filename = "data/screenshots/[path_prefix]_[name].png"
+ fcopy(icon, data_filename)
+ log_test("\t[path_prefix]_[name] was found, putting in data/screenshots")
+ else if (fexists("code"))
+ // We are probably running in a local build
+ fcopy(icon, filename)
+ TEST_FAIL("Screenshot for [name] did not exist. One has been created.")
+ else
+ // We are probably running in real CI, so just pretend it worked and move on
+ fcopy(icon, "data/screenshots_new/[path_prefix]_[name].png")
+
+ log_test("\t[path_prefix]_[name] was put in data/screenshots_new")
+
+/// Helper for screenshot tests to take an image of an atom from all directions and insert it into one icon
+/datum/unit_test/proc/get_flat_icon_for_all_directions(atom/thing, no_anim = TRUE)
+ var/icon/output = icon('icons/effects/effects.dmi', "nothing")
+
+ for (var/direction in GLOB.cardinals)
+ var/icon/partial = getFlatIcon(thing, defdir = direction, no_anim = no_anim)
+ output.Insert(partial, dir = direction)
+
+ return output
+*/
+/// Logs a test message. Will use GitHub action syntax found at https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions
+/datum/unit_test/proc/log_for_test(text, priority, file, line)
+ var/map_name = SSmapping.config.map_name
+
+ // Need to escape the text to properly support newlines.
+ var/annotation_text = replacetext(text, "%", "%25")
+ annotation_text = replacetext(annotation_text, "\n", "%0A")
+
+ log_world("::[priority] file=[file],line=[line],title=[map_name]: [type]::[annotation_text]")
+
/proc/RunUnitTest(test_path, list/test_results)
+/*
+ if (ispath(test_path, /datum/unit_test/focus_only))
+ return
+*/
var/datum/unit_test/test = new test_path
GLOB.current_test = test
var/duration = REALTIMEOFDAY
+ log_world("::group::[test_path]")
test.Run()
duration = REALTIMEOFDAY - duration
@@ -99,11 +166,28 @@ GLOBAL_VAR(test_log)
var/list/log_entry = list("[test.succeeded ? "PASS" : "FAIL"]: [test_path] [duration / 10]s")
var/list/fail_reasons = test.fail_reasons
- for(var/J in 1 to LAZYLEN(fail_reasons))
- log_entry += "\tREASON #[J]: [fail_reasons[J]]"
+ for(var/reasonID in 1 to LAZYLEN(fail_reasons))
+ var/text = fail_reasons[reasonID][1]
+ var/file = fail_reasons[reasonID][2]
+ var/line = fail_reasons[reasonID][3]
+
+ test.log_for_test(text, "error", file, line)
+
+ // Normal log message
+ log_entry += "\tREASON #[reasonID]: [text] at [file]:[line]"
+
var/message = log_entry.Join("\n")
log_test(message)
+ var/test_output_desc = "[test_path] [duration / 10]s"
+ if (test.succeeded)
+ log_world("[TEST_OUTPUT_GREEN("PASS")] [test_output_desc]")
+
+ log_world("::endgroup::")
+
+ if (!test.succeeded)
+ log_world("::error::[TEST_OUTPUT_RED("FAIL")] [test_output_desc]")
+
test_results[test_path] = list("status" = test.succeeded ? UNIT_TEST_PASSED : UNIT_TEST_FAILED, "message" = message, "name" = test_path)
qdel(test)
@@ -112,11 +196,13 @@ GLOBAL_VAR(test_log)
CHECK_TICK
var/list/tests_to_run = subtypesof(/datum/unit_test)
+ var/list/focused_tests = list()
for (var/_test_to_run in tests_to_run)
var/datum/unit_test/test_to_run = _test_to_run
if (initial(test_to_run.focus))
- tests_to_run = list(test_to_run)
- break
+ focused_tests += test_to_run
+ if(length(focused_tests))
+ tests_to_run = focused_tests
tests_to_run = sortTim(tests_to_run, /proc/cmp_unit_test_priority)
diff --git a/code/modules/unit_tests/vore_tests.dm b/code/modules/unit_tests/vore_tests.dm
index 6549aa9ce7..08a525c5d5 100644
--- a/code/modules/unit_tests/vore_tests.dm
+++ b/code/modules/unit_tests/vore_tests.dm
@@ -11,7 +11,7 @@
break
mobloc = default_mobloc
if(!mobloc)
- Fail("Unable to find a location to create test mob")
+ TEST_FAIL("Unable to find a location to create test mob")
return FALSE
var/mob/living/carbon/human/H = new mobtype(mobloc)
@@ -44,7 +44,7 @@
endOxyloss = H.getOxyLoss()
if(!startOxyloss < endOxyloss)
- Fail("Human mob is not taking oxygen damage in space. (Before: [startOxyloss]; after: [endOxyloss])")
+ TEST_FAIL("Human mob is not taking oxygen damage in space. (Before: [startOxyloss]; after: [endOxyloss])")
qdel(H)
return 1
@@ -74,7 +74,7 @@
// Now that pred belly exists, we can eat the prey.
if(!pred.vore_selected)
- Fail("[pred] has no vore_selected.")
+ TEST_FAIL("[pred] has no vore_selected.")
return TRUE
// Attempt to eat the prey
@@ -82,7 +82,7 @@
pred.vore_selected.nom_mob(prey)
if(prey.loc != pred.vore_selected)
- Fail("[pred.vore_selected].nom_mob([prey]) did not put prey inside [pred]")
+ TEST_FAIL("[pred.vore_selected].nom_mob([prey]) did not put prey inside [pred]")
return TRUE
// Okay, we succeeded in eating them, now lets wait a bit
@@ -96,7 +96,7 @@
// Alright lets check it!
endOxyloss = prey.getOxyLoss()
if(startOxyloss < endOxyloss)
- Fail("Prey takes oxygen damage in a pred's belly! (Before: [startOxyloss]; after: [endOxyloss])")
+ TEST_FAIL("Prey takes oxygen damage in a pred's belly! (Before: [startOxyloss]; after: [endOxyloss])")
qdel(prey)
qdel(pred)
return TRUE
@@ -128,7 +128,7 @@
// Now that pred belly exists, we can eat the prey.
if(!pred.vore_selected)
- Fail("[pred] has no vore_selected.")
+ TEST_FAIL("[pred] has no vore_selected.")
return TRUE
// Attempt to eat the prey
@@ -136,12 +136,12 @@
pred.vore_selected.nom_mob(prey)
if(prey.loc != pred.vore_selected)
- Fail("[pred.vore_selected].nom_mob([prey]) did not put prey inside [pred]")
+ TEST_FAIL("[pred.vore_selected].nom_mob([prey]) did not put prey inside [pred]")
return TRUE
else
var/turf/T = locate(/turf/open/space)
if(!T)
- Fail("could not find a space turf for testing")
+ TEST_FAIL("could not find a space turf for testing")
return TRUE
else
pred.forceMove(T)
@@ -159,7 +159,7 @@
endOxyloss = prey.getOxyLoss()
endBruteloss = prey.getBruteLoss()
if(startBruteloss < endBruteloss)
- Fail("Prey takes brute damage in space! (Before: [startBruteloss]; after: [endBruteloss])")
+ TEST_FAIL("Prey takes brute damage in space! (Before: [startBruteloss]; after: [endBruteloss])")
qdel(prey)
qdel(pred)
return TRUE
@@ -189,7 +189,7 @@
// Now that pred belly exists, we can eat the prey.
if(!pred.vore_selected)
- Fail("[pred] has no vore_selected.")
+ TEST_FAIL("[pred] has no vore_selected.")
return TRUE
// Attempt to eat the prey
@@ -197,7 +197,7 @@
pred.vore_selected.nom_mob(prey)
if(prey.loc != pred.vore_selected)
- Fail("[pred.vore_selected].nom_mob([prey]) did not put prey inside [pred]")
+ TEST_FAIL("[pred.vore_selected].nom_mob([prey]) did not put prey inside [pred]")
return TRUE
// Okay, we succeeded in eating them, now lets wait a bit
@@ -212,7 +212,7 @@
// Alright lets check it!
endBruteBurn = prey.getBruteLoss() + prey.getFireLoss()
if(startBruteBurn >= endBruteBurn)
- Fail("Prey doesn't take damage in digesting belly! (Before: [startBruteBurn]; after: [endBruteBurn])")
+ TEST_FAIL("Prey doesn't take damage in digesting belly! (Before: [startBruteBurn]; after: [endBruteBurn])")
qdel(prey)
qdel(pred)
return TRUE
diff --git a/code/modules/vehicles/atv.dm b/code/modules/vehicles/atv.dm
index cb32b11083..1edb33b9e7 100644
--- a/code/modules/vehicles/atv.dm
+++ b/code/modules/vehicles/atv.dm
@@ -41,25 +41,29 @@
/obj/vehicle/ridden/atv/turret/Moved()
. = ..()
- if(turret)
- turret.forceMove(get_turf(src))
- switch(dir)
- if(NORTH)
- turret.pixel_x = 0
- turret.pixel_y = 4
- turret.layer = ABOVE_MOB_LAYER
- if(EAST)
- turret.pixel_x = -12
- turret.pixel_y = 4
- turret.layer = OBJ_LAYER
- if(SOUTH)
- turret.pixel_x = 0
- turret.pixel_y = 4
- turret.layer = OBJ_LAYER
- if(WEST)
- turret.pixel_x = 12
- turret.pixel_y = 4
- turret.layer = OBJ_LAYER
+ if(!turret)
+ return
+ var/turf/our_turf = get_turf(src)
+ if(!our_turf)
+ return
+ turret.forceMove(our_turf)
+ switch(dir)
+ if(NORTH)
+ turret.pixel_x = 0
+ turret.pixel_y = 4
+ turret.layer = ABOVE_MOB_LAYER
+ if(EAST)
+ turret.pixel_x = -12
+ turret.pixel_y = 4
+ turret.layer = OBJ_LAYER
+ if(SOUTH)
+ turret.pixel_x = 0
+ turret.pixel_y = 4
+ turret.layer = OBJ_LAYER
+ if(WEST)
+ turret.pixel_x = 12
+ turret.pixel_y = 4
+ turret.layer = OBJ_LAYER
/obj/vehicle/ridden/atv/snowmobile
name = "snowmobile"
diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm
index f4ffda302e..ae76fd877d 100644
--- a/code/modules/vehicles/mecha/_mecha.dm
+++ b/code/modules/vehicles/mecha/_mecha.dm
@@ -871,7 +871,7 @@
if(pilot_mob && pilot_mob.Adjacent(src))
if(LAZYLEN(occupants))
return
- LAZYADD(occupants, src)
+ LAZYADD(occupants, pilot_mob)
pilot_mob.mecha = src
pilot_mob.forceMove(src)
update_icon()
diff --git a/code/modules/vehicles/mecha/mech_fabricator.dm b/code/modules/vehicles/mecha/mech_fabricator.dm
index 71f0d8537e..459794619f 100644
--- a/code/modules/vehicles/mecha/mech_fabricator.dm
+++ b/code/modules/vehicles/mecha/mech_fabricator.dm
@@ -73,6 +73,11 @@
RefreshParts() //Recalculating local material sizes if the fab isn't linked
return ..()
+/obj/machinery/mecha_part_fabricator/Destroy()
+ QDEL_NULL(stored_research)
+ rmat = null
+ return ..()
+
/obj/machinery/mecha_part_fabricator/RefreshParts()
var/T = 0
diff --git a/code/modules/vending/cola.dm b/code/modules/vending/cola.dm
index f60c3fc2fa..c2f2b16fe3 100644
--- a/code/modules/vending/cola.dm
+++ b/code/modules/vending/cola.dm
@@ -37,7 +37,7 @@
desc = "Uh oh!"
/obj/machinery/vending/cola/random/Initialize(mapload)
- ..()
+ . = ..()
var/T = pick(subtypesof(/obj/machinery/vending/cola) - /obj/machinery/vending/cola/random)
new T(loc)
return INITIALIZE_HINT_QDEL
diff --git a/code/modules/vending/snack.dm b/code/modules/vending/snack.dm
index efb6670496..c85ec8a594 100644
--- a/code/modules/vending/snack.dm
+++ b/code/modules/vending/snack.dm
@@ -42,7 +42,7 @@
desc = "Uh oh!"
/obj/machinery/vending/snack/random/Initialize(mapload)
- ..()
+ . = ..()
var/T = pick(subtypesof(/obj/machinery/vending/snack) - /obj/machinery/vending/snack/random)
new T(loc)
return INITIALIZE_HINT_QDEL
diff --git a/config/maps.txt b/config/maps.txt
index 5401a6dccb..a4e94e7f45 100644
--- a/config/maps.txt
+++ b/config/maps.txt
@@ -21,7 +21,7 @@ map boxstation
endmap
map layeniastation
- minplayers 25
+ minplayers 50
#voteweight 0.5
endmap
diff --git a/config/modular_maps/Config Files/README.md b/config/modular_maps/Config Files/README.md
new file mode 100644
index 0000000000..4f04073cf5
--- /dev/null
+++ b/config/modular_maps/Config Files/README.md
@@ -0,0 +1,3 @@
+Add the config files for modular maps here.
+
+**These are fully cached so keep this directory empty by default.**
diff --git a/config/modular_maps/README.md b/config/modular_maps/README.md
new file mode 100644
index 0000000000..8f674e87e6
--- /dev/null
+++ b/config/modular_maps/README.md
@@ -0,0 +1,3 @@
+Add modular maps here.
+
+**These are fully cached so keep this directory empty by default.**
diff --git a/html/changelogs/AutoChangeLog-pr-935.yml b/html/changelogs/AutoChangeLog-pr-935.yml
new file mode 100644
index 0000000000..974cb33b3d
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-935.yml
@@ -0,0 +1,4 @@
+author: Tsurupeta
+delete-after: true
+changes:
+ - bugfix: fixes cryoing characters without mind
diff --git a/html/changelogs/archive/2023-08.yml b/html/changelogs/archive/2023-08.yml
index 720b1aa8e6..3e982e3e0d 100644
--- a/html/changelogs/archive/2023-08.yml
+++ b/html/changelogs/archive/2023-08.yml
@@ -28,3 +28,57 @@
NopemanMcHalt:
- spellcheck: Xenoarchaeolgist -> Xenoarchaeologist. Someone was drunk while adding
it.
+2023-08-12:
+ K4rlox:
+ - tweak: resonator now actually resonates
+ Yawet330:
+ - tweak: Radfiend has been adjusted to be more in-line with its original vision,
+ while still retaining what makes it different from full radiation immunity.
+ Report any and all unintended consequences.
+ - rscadd: Glowie Trait.
+2023-08-13:
+ Anonymous:
+ - rscadd: Finally, *scream2.
+2023-08-15:
+ Tsurupeta:
+ - code_imp: ported /tg/'s harddel unit test and fixed everything that it caused
+ it to fail
+ Yawet330:
+ - rscdel: Ability to link CKEYS & Characters as a non-admin
+ - rscdel: Ability to see genitals on all mobs regardless of clothes with a verb.
+2023-08-17:
+ Anonymous:
+ - rscadd: Sexual Advisor as an alt-title for Psychologist.
+ BongaTheProto:
+ - imageadd: New haydee sprites for other borg jobs and updates to the medical one
+ - imageadd: New Meka sprites for certain borg types
+2023-08-18:
+ Vhariik:
+ - bugfix: missing textures
+2023-08-22:
+ LeChatGuid2:
+ - rscadd: Added a pet_capsule item which look like a pokeball. interact with it
+ once to set the name of your pet and select one of three usually hostile but
+ now tamed mobs (giant spider, deathclaw or spess carp)
+ - rscadd: the tamed version of the hostile mobs concerned
+ PhazeJump:
+ - rscadd: added old versions of the maps listeningstation.dmm and syndielistenspace.dmm
+ as .old
+ - rscadd: Added a living room in the space comms base, made the bathroom bigger,
+ added a second sleeper for another ghost to spawn in, made bedrooms bigger,
+ expanded medbay a little bit to factor in having an operating table, tweaked
+ a few things to make it comfortable for two people to be in.
+ Vhariik:
+ - tweak: mapping fixes!
+ Yawet330:
+ - bugfix: config_wak_run -> config_walk_run
+2023-08-23:
+ BongaTheProto:
+ - rscadd: Chameleon suit is now a donator reward
+2023-08-25:
+ BongaTheProto:
+ - code_imp: adds modular ruins
+ - code_imp: updates rust-g to v3.0.0
+2023-08-27:
+ KeplerWasTaken:
+ - rscadd: Medikitty bot animations
diff --git a/icons/emoji_32.dmi b/icons/emoji_32.dmi
index 5da4a28f22..b673744a29 100644
Binary files a/icons/emoji_32.dmi and b/icons/emoji_32.dmi differ
diff --git a/modular_citadel/code/modules/clothing/neck.dm b/modular_citadel/code/modules/clothing/neck.dm
index 9507e65e0e..9e1870307d 100644
--- a/modular_citadel/code/modules/clothing/neck.dm
+++ b/modular_citadel/code/modules/clothing/neck.dm
@@ -19,5 +19,5 @@
/obj/item/clothing/neck/undertale/Initialize(mapload)
- ..()
+ . = ..()
AddComponent(/datum/component/souldeath/neck)
diff --git a/modular_citadel/code/modules/eventmaps/Spookystation/JTGSZwork.dm b/modular_citadel/code/modules/eventmaps/Spookystation/JTGSZwork.dm
index 252cb3d5f8..5897286cbf 100644
--- a/modular_citadel/code/modules/eventmaps/Spookystation/JTGSZwork.dm
+++ b/modular_citadel/code/modules/eventmaps/Spookystation/JTGSZwork.dm
@@ -1031,7 +1031,7 @@ GLOBAL_LIST_EMPTY(rain_sounds)
var/open = FALSE
/obj/item/umbrella/Initialize(mapload)
- ..()
+ . = ..()
color = RANDOM_COLOUR
update_icon()
diff --git a/modular_citadel/code/modules/vectorcrafts/vectorcraft.dm b/modular_citadel/code/modules/vectorcrafts/vectorcraft.dm
index 399a1c5f06..3c983ea40e 100644
--- a/modular_citadel/code/modules/vectorcrafts/vectorcraft.dm
+++ b/modular_citadel/code/modules/vectorcrafts/vectorcraft.dm
@@ -36,7 +36,7 @@
var/mob/living/carbon/human/driver
/obj/vehicle/sealed/vectorcraft/Initialize(mapload)
- ..()
+ . = ..()
i_m_acell = max_acceleration
i_m_decell = max_deceleration
i_boost = boost_power
diff --git a/modular_sand/code/game/machinery/telecomms/machines/receiver.dm b/modular_sand/code/game/machinery/telecomms/machines/receiver.dm
index f1f313d3a2..b5be66fa83 100644
--- a/modular_sand/code/game/machinery/telecomms/machines/receiver.dm
+++ b/modular_sand/code/game/machinery/telecomms/machines/receiver.dm
@@ -36,6 +36,10 @@
idle_power_usage = 0
var/obj/item/integrated_circuit/input/tcomm_interceptor/holder
+/obj/machinery/telecomms/receiver/circuit/Destroy()
+ holder = null
+ . = ..()
+
/obj/machinery/telecomms/receiver/circuit/receive_signal(datum/signal/signal)
if(!holder.get_pin_data(IC_INPUT, 1))
return
diff --git a/modular_sand/code/game/objects/items/chrono_eraser.dm b/modular_sand/code/game/objects/items/chrono_eraser.dm
index a168920e1d..c341ca3bfc 100644
--- a/modular_sand/code/game/objects/items/chrono_eraser.dm
+++ b/modular_sand/code/game/objects/items/chrono_eraser.dm
@@ -136,6 +136,10 @@
if(istype(C))
gun = C.gun
+/obj/item/projectile/energy/chrono_beam/Destroy()
+ gun = null
+ return ..()
+
/obj/item/projectile/energy/chrono_beam/on_hit(atom/target)
if(target && gun && isliving(target))
var/obj/structure/chrono_field/F = new(target.loc, target, gun)
@@ -154,6 +158,10 @@
gun = loc
. = ..()
+/obj/item/ammo_casing/energy/chrono_beam/Destroy()
+ gun = null
+ return ..()
+
/obj/structure/chrono_field
name = "eradication field"
desc = "An aura of time-bluespace energy."
diff --git a/modular_sand/code/modules/clothing/spacesuits/chronosuit.dm b/modular_sand/code/modules/clothing/spacesuits/chronosuit.dm
index fd6ce75120..945f95424d 100644
--- a/modular_sand/code/modules/clothing/spacesuits/chronosuit.dm
+++ b/modular_sand/code/modules/clothing/spacesuits/chronosuit.dm
@@ -15,6 +15,10 @@
suit.deactivate(1, 1)
..()
+/obj/item/clothing/head/helmet/space/chronos/helmet/Destroy()
+ suit = null
+ return ..()
+
/obj/item/clothing/suit/space/chronos
name = "Chronosuit"
desc = "An advanced spacesuit equipped with time-bluespace teleportation and anti-compression technology."
@@ -42,6 +46,13 @@
teleport_now.chronosuit = src
teleport_now.target = src
+/obj/item/clothing/suit/space/chronos/Destroy()
+ teleport_now.chronosuit = null
+ teleport_now.target = null
+ QDEL_NULL(teleport_now)
+ helmet = null
+ return ..()
+
/obj/item/clothing/suit/space/chronos/proc/new_camera(mob/user)
if(camera)
qdel(camera)
diff --git a/modular_sand/code/modules/integrated_electronics/subtypes/input.dm b/modular_sand/code/modules/integrated_electronics/subtypes/input.dm
index 118882922c..cfdbb60a5c 100644
--- a/modular_sand/code/modules/integrated_electronics/subtypes/input.dm
+++ b/modular_sand/code/modules/integrated_electronics/subtypes/input.dm
@@ -48,9 +48,9 @@
receiver.holder = src
/obj/item/integrated_circuit/input/tcomm_interceptor/Destroy()
- qdel(receiver)
+ QDEL_NULL(receiver)
GLOB.ic_jammers -= src
- ..()
+ return ..()
/obj/item/integrated_circuit/input/tcomm_interceptor/receive_signal(datum/signal/signal)
if((signal.transmission_method == TRANSMISSION_SUBSPACE) && get_pin_data(IC_INPUT, 1))
diff --git a/modular_sand/code/modules/integrated_electronics/subtypes/output.dm b/modular_sand/code/modules/integrated_electronics/subtypes/output.dm
index 1c16cb3445..c1cee65d1b 100644
--- a/modular_sand/code/modules/integrated_electronics/subtypes/output.dm
+++ b/modular_sand/code/modules/integrated_electronics/subtypes/output.dm
@@ -29,7 +29,7 @@
/obj/item/integrated_circuit/output/text_to_radio/Destroy()
qdel(radio)
GLOB.ic_speakers -= src
- ..()
+ return ..()
/obj/item/integrated_circuit/output/text_to_radio/on_data_written()
var/freq = get_pin_data(IC_INPUT, 2)
diff --git a/modular_sand/code/modules/mining/lavaland/necropolis_chests.dm b/modular_sand/code/modules/mining/lavaland/necropolis_chests.dm
index c96d95d358..85f7e6b0eb 100644
--- a/modular_sand/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/modular_sand/code/modules/mining/lavaland/necropolis_chests.dm
@@ -52,7 +52,7 @@
icon_state = "raft"
/obj/vehicle/ridden/lavaboat/dragon/gladiator/Initialize(mapload)
- ..()
+ . = ..()
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
D.vehicle_move_delay = 1
D.allowed_turf_typecache = typecacheof(/turf/open) //thanks Bob for telling me it was on purpose
@@ -507,125 +507,89 @@
qdel(src)
//normal chests
-/obj/structure/closet/crate/necropolis/tendril/PopulateContents()
+/obj/structure/closet/crate/necropolis/tendril/PopulateContents(spawn_cell = TRUE)
var/loot = rand(1,35)
- new /obj/item/stock_parts/cell/high/plus/argent(src)
+ if(spawn_cell)
+ new /obj/item/stock_parts/cell/high/plus/argent(src)
switch(loot)
if(1)
new /obj/item/shared_storage/red(src)
- return list(/obj/item/shared_storage/red)
if(2)
new /obj/item/clothing/suit/space/hardsuit/cult(src)
- return list(/obj/item/clothing/suit/space/hardsuit/cult)
if(3)
new /obj/item/soulstone/anybody(src)
- return list(/obj/item/soulstone/anybody)
if(4)
new /obj/item/katana/cursed(src)
- return list(/obj/item/katana/cursed)
if(5)
new /obj/item/clothing/glasses/godeye(src)
- return list(/obj/item/clothing/glasses/godeye)
if(6)
new /obj/item/reagent_containers/glass/bottle/potion/flight(src)
- return list(/obj/item/reagent_containers/glass/bottle/potion/flight)
if(7)
new /obj/item/pickaxe/diamond(src)
- return list(/obj/item/pickaxe/diamond)
if(8)
if(prob(50))
new /obj/item/disk/design_disk/modkit_disc/resonator_blast(src)
- return list(/obj/item/disk/design_disk/modkit_disc/resonator_blast)
else
new /obj/item/disk/design_disk/modkit_disc/rapid_repeater(src)
- return list(/obj/item/disk/design_disk/modkit_disc/rapid_repeater)
if(9)
new /obj/item/rod_of_asclepius(src)
- return list(/obj/item/rod_of_asclepius)
if(10)
new /obj/item/organ/heart/cursed/wizard(src)
- return list(/obj/item/organ/heart/cursed/wizard)
if(11)
new /obj/item/ship_in_a_bottle(src)
- return list(/obj/item/ship_in_a_bottle)
if(12)
new /obj/item/clothing/suit/space/hardsuit/ert/paranormal/beserker/damaged(src)
- return list(/obj/item/clothing/suit/space/hardsuit/ert/paranormal/beserker)
if(13)
new /obj/item/jacobs_ladder(src)
- return list(/obj/item/jacobs_ladder)
if(14)
new /obj/item/nullrod/scythe/talking(src)
- return list(/obj/item/nullrod/scythe/talking)
if(15)
new /obj/item/nullrod/armblade(src)
- return list(/obj/item/nullrod/armblade)
if(16)
new /obj/item/guardiancreator(src)
- return list(/obj/item/guardiancreator)
if(17)
if(prob(50))
new /obj/item/disk/design_disk/modkit_disc/mob_and_turf_aoe(src)
- return list(/obj/item/disk/design_disk/modkit_disc/mob_and_turf_aoe)
else
new /obj/item/disk/design_disk/modkit_disc/bounty(src)
- return list(/obj/item/disk/design_disk/modkit_disc/bounty)
if(18)
new /obj/item/warp_cube/red(src)
- return list(/obj/item/warp_cube/red)
if(19)
new /obj/item/wisp_lantern(src)
- return list(/obj/item/wisp_lantern)
if(20)
new /obj/item/immortality_talisman(src)
- return list(/obj/item/immortality_talisman)
if(21)
new /obj/item/gun/magic/hook(src)
- return list(/obj/item/gun/magic/hook)
if(22)
new /obj/item/voodoo(src)
- return list(/obj/item/voodoo)
if(23)
new /obj/item/grenade/clusterbuster/inferno(src)
- return list(/obj/item/grenade/clusterbuster/inferno)
if(24)
new /obj/item/reagent_containers/food/drinks/bottle/holywater/hell(src)
new /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor/damaged(src)
- return list(/obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor, /obj/item/reagent_containers/food/drinks/bottle/holywater/hell)
if(25)
new /obj/item/book/granter/spell/summonitem(src)
- return list(/obj/item/book/granter/spell/summonitem)
if(26)
new /obj/item/book_of_babel(src)
- return list(/obj/item/book_of_babel)
if(27)
new /obj/item/borg/upgrade/modkit/lifesteal(src)
new /obj/item/bedsheet/cult(src)
- return list(/obj/item/borg/upgrade/modkit/lifesteal, /obj/item/bedsheet/cult)
if(28)
new /obj/item/clothing/neck/necklace/memento_mori(src)
- return list(/obj/item/clothing/neck/necklace/memento_mori)
if(29)
new /obj/item/gun/magic/staff/door(src)
- return list(/obj/item/gun/magic/staff/door)
if(30)
new /obj/item/katana/necropolis(src)
- return list(/obj/item/katana/necropolis)
if(31)
new /obj/item/gun/ballistic/shotgun/boltaction(src)
- return list(/obj/item/gun/ballistic/shotgun/boltaction)
if(32)
new /obj/item/gun/magic/staff/locker/trashy
- return list(/obj/item/gun/magic/staff/locker)
if(33)
new /obj/item/clothing/accessory/fireresist(src)
- return list(/obj/item/clothing/accessory/fireresist)
if(34)
new /obj/item/clothing/accessory/lavawalk(src)
- return list(/obj/item/clothing/accessory/lavawalk)
if(35)
new /obj/item/gun/energy/kinetic_accelerator/premiumka/ashenka(src)
- return list(/obj/item/gun/energy/kinetic_accelerator/premiumka/ashenka)
/obj/item/gun/magic/staff/locker/trashy
max_charges = 1
@@ -781,12 +745,8 @@
/obj/structure/closet/crate/necropolis/tendril/legion_loot
name = "screeching legion crate"
-/obj/structure/closet/crate/necropolis/tendril/legion_loot/PopulateContents()
- var/obj/structure/closet/crate/necropolis/tendril/N = new /obj/structure/closet/crate/necropolis/tendril()
- var/list/weedeater = N.PopulateContents()
- for(var/loot in weedeater)
- new loot(src)
- qdel(N)
+/obj/structure/closet/crate/necropolis/tendril/legion_loot/PopulateContents(spawn_cell)
+ . = ..(spawn_cell = FALSE) // I hate the previous guy who wrote a lot of bad code instead of this 1 line
/obj/structure/closet/crate/necropolis/legion
name = "echoing legion crate"
@@ -804,13 +764,86 @@
new /obj/item/clothing/mask/gas/dagoth(src)
new /obj/item/crusher_trophy/golden_skull(src)
new /obj/item/borg/upgrade/modkit/skull(src)
- var/obj/structure/closet/crate/necropolis/tendril/T = new /obj/structure/closet/crate/necropolis/tendril //Yup, i know, VERY spaghetti code.
- var/obj/item/L
- for(var/i = 0, i < 3, i++)
- L = T.PopulateContents()
- for(var/loot in L)
- new loot(src)
- qdel(T)
+ var/loot = rand(1,35) // Copying 1 switch statement is still better than having 9 runtimes on spawn
+ switch(loot)
+ if(1)
+ new /obj/item/shared_storage/red(src)
+ if(2)
+ new /obj/item/clothing/suit/space/hardsuit/cult(src)
+ if(3)
+ new /obj/item/soulstone/anybody(src)
+ if(4)
+ new /obj/item/katana/cursed(src)
+ if(5)
+ new /obj/item/clothing/glasses/godeye(src)
+ if(6)
+ new /obj/item/reagent_containers/glass/bottle/potion/flight(src)
+ if(7)
+ new /obj/item/pickaxe/diamond(src)
+ if(8)
+ if(prob(50))
+ new /obj/item/disk/design_disk/modkit_disc/resonator_blast(src)
+ else
+ new /obj/item/disk/design_disk/modkit_disc/rapid_repeater(src)
+ if(9)
+ new /obj/item/rod_of_asclepius(src)
+ if(10)
+ new /obj/item/organ/heart/cursed/wizard(src)
+ if(11)
+ new /obj/item/ship_in_a_bottle(src)
+ if(12)
+ new /obj/item/clothing/suit/space/hardsuit/ert/paranormal/beserker/damaged(src)
+ if(13)
+ new /obj/item/jacobs_ladder(src)
+ if(14)
+ new /obj/item/nullrod/scythe/talking(src)
+ if(15)
+ new /obj/item/nullrod/armblade(src)
+ if(16)
+ new /obj/item/guardiancreator(src)
+ if(17)
+ if(prob(50))
+ new /obj/item/disk/design_disk/modkit_disc/mob_and_turf_aoe(src)
+ else
+ new /obj/item/disk/design_disk/modkit_disc/bounty(src)
+ if(18)
+ new /obj/item/warp_cube/red(src)
+ if(19)
+ new /obj/item/wisp_lantern(src)
+ if(20)
+ new /obj/item/immortality_talisman(src)
+ if(21)
+ new /obj/item/gun/magic/hook(src)
+ if(22)
+ new /obj/item/voodoo(src)
+ if(23)
+ new /obj/item/grenade/clusterbuster/inferno(src)
+ if(24)
+ new /obj/item/reagent_containers/food/drinks/bottle/holywater/hell(src)
+ new /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor/damaged(src)
+ if(25)
+ new /obj/item/book/granter/spell/summonitem(src)
+ if(26)
+ new /obj/item/book_of_babel(src)
+ if(27)
+ new /obj/item/borg/upgrade/modkit/lifesteal(src)
+ new /obj/item/bedsheet/cult(src)
+ if(28)
+ new /obj/item/clothing/neck/necklace/memento_mori(src)
+ if(29)
+ new /obj/item/gun/magic/staff/door(src)
+ if(30)
+ new /obj/item/katana/necropolis(src)
+ if(31)
+ new /obj/item/gun/ballistic/shotgun/boltaction(src)
+ if(32)
+ new /obj/item/gun/magic/staff/locker/trashy
+ if(33)
+ new /obj/item/clothing/accessory/fireresist(src)
+ if(34)
+ new /obj/item/clothing/accessory/lavawalk(src)
+ if(35)
+ new /obj/item/gun/energy/kinetic_accelerator/premiumka/ashenka(src)
//dagoth ur mask
/obj/item/clothing/mask/gas/dagoth
diff --git a/modular_sand/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/fanaticminer.dm b/modular_sand/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/fanaticminer.dm
index aeb10dfb71..0bb6a3db21 100644
--- a/modular_sand/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/fanaticminer.dm
+++ b/modular_sand/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/fanaticminer.dm
@@ -261,5 +261,5 @@
/obj/item/melee/diamondaxe/priest
/obj/item/melee/diamondaxe/priest/Initialize(mapload)
- ..()
+ . = ..()
QDEL_IN(src, 30)
diff --git a/modular_sand/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/modular_sand/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
index 12189b10ba..7ae265d5f8 100644
--- a/modular_sand/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
+++ b/modular_sand/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
@@ -52,7 +52,10 @@
/obj/item/gun/energy/kinetic_accelerator/nopenalty
desc = "A self recharging, ranged mining tool that does increased damage in low pressure. This one feels a bit heavier than usual."
- ammo_type = list(/obj/item/projectile/kinetic/nopenalty)
+ ammo_type = list(/obj/item/ammo_casing/energy/kinetic/nopenalty)
+
+/obj/item/ammo_casing/energy/kinetic/nopenalty
+ projectile_type = /obj/item/projectile/kinetic/nopenalty
/obj/item/projectile/kinetic/nopenalty
diff --git a/modular_sand/code/modules/ruins/lavalandruin_code/doom.dm b/modular_sand/code/modules/ruins/lavalandruin_code/doom.dm
index 0384a10c14..b693d9b840 100644
--- a/modular_sand/code/modules/ruins/lavalandruin_code/doom.dm
+++ b/modular_sand/code/modules/ruins/lavalandruin_code/doom.dm
@@ -106,7 +106,7 @@
icon_state = "barrel"
/obj/structure/fermenting_barrel/doom/Initialize(mapload)
- ..()
+ . = ..()
src.reagents.add_reagent(pick(subtypesof(/datum/reagent/toxin)), 300)
/obj/structure/fermenting_barrel/doom/Destroy()
diff --git a/modular_sand/code/modules/ruins/lavalandruin_code/misc.dm b/modular_sand/code/modules/ruins/lavalandruin_code/misc.dm
index ecf4bf0f91..d001b41fda 100644
--- a/modular_sand/code/modules/ruins/lavalandruin_code/misc.dm
+++ b/modular_sand/code/modules/ruins/lavalandruin_code/misc.dm
@@ -71,7 +71,7 @@
var/list/cmegalist = list()
/obj/effect/wrath/Initialize(mapload)
- ..()
+ . = ..()
megalist = list("Cockblock", "Cockblock", "Cockblock") //cockblock just to be sure that no one goes through the wrath wall in the 10 minute grace period
addtimer(CALLBACK(src, .proc/updatemegalist), 6000) //10 minutes delay so that all megafauna can spawn and etc.
diff --git a/modular_sand/code/modules/telescience/telepad.dm b/modular_sand/code/modules/telescience/telepad.dm
index f01719fa18..e36bc0bc63 100644
--- a/modular_sand/code/modules/telescience/telepad.dm
+++ b/modular_sand/code/modules/telescience/telepad.dm
@@ -8,13 +8,9 @@
use_power = 1
idle_power_usage = 200
active_power_usage = 5000
+ circuit = /obj/item/circuitboard/machine/telesci_pad
var/efficiency
-/obj/machinery/telepad/Initialize(mapload)
- . = ..()
- var/obj/item/circuitboard/machine/B = new /obj/item/circuitboard/machine/telesci_pad(null)
- B.apply_default_parts(src)
-
/obj/item/circuitboard/machine/telesci_pad
name = "Telepad (Machine Board)"
build_path = /obj/machinery/telepad
diff --git a/modular_splurt/_maps/RandomRuins/SpaceRuins/syndielistenspace.dmm b/modular_splurt/_maps/RandomRuins/SpaceRuins/syndielistenspace.dmm
index ed9b30357a..25aba3405e 100644
--- a/modular_splurt/_maps/RandomRuins/SpaceRuins/syndielistenspace.dmm
+++ b/modular_splurt/_maps/RandomRuins/SpaceRuins/syndielistenspace.dmm
@@ -1,74 +1,68 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
-"ab" = (
-/obj/machinery/light/small{
- dir = 4
- },
-/obj/structure/extinguisher_cabinet{
- pixel_x = 25
- },
-/obj/structure/table,
-/obj/item/paper_bin,
-/obj/item/paper/fluff/ruins/listeningstation/reports/november,
-/obj/item/pen,
-/turf/open/floor/plasteel/dark,
-/area/ruin/space/syndielistenspace)
-"ae" = (
+"aa" = (
/turf/template_noop,
/area/template_noop)
-"ag" = (
-/obj/structure/sink{
- dir = 4;
- pixel_x = 11
+"ab" = (
+/turf/closed/mineral/random,
+/area/ruin/unpowered/no_grav)
+"ac" = (
+/turf/closed/wall,
+/area/ruin/space/has_grav/listeningstation)
+"ad" = (
+/obj/machinery/computer/message_monitor{
+ dir = 2
},
-/obj/structure/toilet{
- pixel_y = 18
- },
-/obj/structure/mirror{
- pixel_x = 28
+/obj/machinery/airalarm/syndicate{
+ pixel_y = 24
},
/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel/showroomfloor,
-/area/ruin/space/syndielistenspace)
-"ax" = (
-/obj/machinery/atmospherics/components/unary/outlet_injector/on{
- dir = 8;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
-/turf/open/floor/plating/airless,
-/area/ruin/space/syndielistenspace)
-"bk" = (
-/obj/structure/rack{
- dir = 8;
- layer = 2.9
- },
-/obj/item/mining_scanner,
-/obj/item/pickaxe,
/obj/effect/decal/cleanable/dirt,
-/obj/item/mop/advanced,
+/obj/item/paper/monitorkey,
/turf/open/floor/plasteel/dark,
-/area/ruin/space/syndielistenspace)
-"bn" = (
+/area/ruin/space/has_grav/listeningstation)
+"ae" = (
+/obj/structure/table/reinforced,
+/obj/machinery/firealarm{
+ pixel_x = 6;
+ pixel_y = 26
+ },
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/power/terminal{
- dir = 1
+/obj/machinery/computer/libraryconsole/bookmanagement,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"af" = (
+/obj/structure/rack{
+ dir = 8
},
-/obj/structure/cable{
- icon_state = "0-2";
- pixel_y = 1
+/obj/item/clothing/mask/gas{
+ pixel_x = -3;
+ pixel_y = 3
},
-/obj/structure/reagent_dispensers/fueltank,
-/obj/item/clothing/head/welding,
-/obj/item/weldingtool/largetank,
-/turf/open/floor/plating,
-/area/ruin/space/syndielistenspace)
-"bX" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/effect/turf_decal/stripes/line,
+/obj/item/clothing/mask/gas,
+/turf/open/floor/mineral/plastitanium/red,
+/area/ruin/space/has_grav/listeningstation)
+"ag" = (
+/turf/closed/wall/r_wall,
+/area/ruin/space/has_grav/listeningstation)
+"ah" = (
+/obj/machinery/computer/camera_advanced{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/newscaster{
+ pixel_y = 32
+ },
+/obj/item/radio/intercom{
+ freerange = 1;
+ name = "Syndicate Radio Intercom";
+ pixel_x = -30
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"ai" = (
+/obj/structure/chair/office/dark{
+ dir = 8
},
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -81,95 +75,93 @@
dir = 8
},
/turf/open/floor/plasteel/dark,
-/area/ruin/space/syndielistenspace)
-"ff" = (
-/obj/machinery/door/firedoor,
+/area/ruin/space/has_grav/listeningstation)
+"aj" = (
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
},
-/obj/machinery/door/airlock/medical/glass{
- name = "Medbay"
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"ak" = (
+/obj/machinery/telecomms/relay/preset/ruskie{
+ use_power = 0
},
-/turf/open/floor/plasteel/white,
-/area/ruin/space/syndielistenspace)
-"fm" = (
/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"al" = (
+/obj/structure/table,
+/obj/item/storage/toolbox/syndicate,
+/obj/item/flashlight{
+ pixel_y = -12
+ },
/obj/effect/decal/cleanable/dirt,
-/obj/structure/closet/secure_closet/medical1{
- req_access = null;
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"am" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"an" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 4
+ },
+/obj/machinery/door/airlock/external{
+ id_tag = "syndie_listeningpost_external";
req_access_txt = "150"
},
-/turf/open/floor/plasteel/white,
-/area/ruin/space/syndielistenspace)
-"fs" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel,
-/area/ruin/space/syndielistenspace)
-"fW" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/meter,
-/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating,
-/area/ruin/space/syndielistenspace)
-"gu" = (
+/area/ruin/space/has_grav/listeningstation)
+"ao" = (
+/obj/machinery/light/small,
+/obj/structure/sign/warning/vacuum{
+ pixel_y = 32
+ },
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"ap" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/door/airlock/external{
+ id_tag = "syndie_listeningpost_external";
+ req_access_txt = "150"
},
-/obj/effect/turf_decal/tile/red{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/syndielistenspace)
-"gN" = (
-/obj/machinery/light/small{
+/obj/structure/fans/tiny,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"aq" = (
+/obj/machinery/computer/arcade/orion_trail{
dir = 1
},
-/obj/machinery/firealarm{
- dir = 2;
- pixel_y = 24
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 1;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/red{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/syndielistenspace)
-"hg" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 9;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
-/turf/open/floor/plasteel/white/side{
- dir = 5
- },
-/area/ruin/space/syndielistenspace)
-"hs" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"ar" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 2;
@@ -183,124 +175,32 @@
/obj/effect/turf_decal/tile/red{
dir = 4
},
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel,
-/area/ruin/space/syndielistenspace)
-"ia" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+/area/ruin/space/has_grav/listeningstation)
+"as" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/computer/med_data/syndie{
+ req_one_access = null;
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"at" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4;
piping_layer = 3;
pixel_x = 5;
pixel_y = 5
},
-/turf/open/floor/plasteel/white/side,
-/area/ruin/space/syndielistenspace)
-"ii" = (
-/obj/machinery/computer/message_monitor{
- dir = 2
- },
-/obj/machinery/airalarm/syndicate{
- pixel_y = 24
- },
/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/item/paper/monitorkey,
-/turf/open/floor/plasteel/dark,
-/area/ruin/space/syndielistenspace)
-"kd" = (
-/obj/structure/table,
-/obj/item/storage/firstaid/regular,
-/obj/item/clothing/neck/stethoscope,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel/white/side{
- dir = 10
- },
-/area/ruin/space/syndielistenspace)
-"kE" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
- },
-/obj/structure/extinguisher_cabinet{
- pixel_y = -29
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/syndielistenspace)
-"kO" = (
-/obj/machinery/washing_machine{
- pixel_x = 4
- },
-/obj/structure/window{
- dir = 8
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/ruin/space/syndielistenspace)
-"lp" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 8;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/ruin/space/syndielistenspace)
-"lW" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/structure/closet/crate/bin,
-/turf/open/floor/plasteel/dark,
-/area/ruin/space/syndielistenspace)
-"mh" = (
-/obj/docking_port/stationary{
- dir = 4;
- dwidth = 6;
- height = 7;
- id = "caravansyndicate3_listeningpost";
- name = "Syndicate Listening Post";
- width = 15
- },
-/obj/docking_port/stationary{
- dir = 4;
- dwidth = 4;
- height = 5;
- id = "caravansyndicate1_listeningpost";
- name = "Syndicate Listening Post";
- width = 9
- },
-/turf/template_noop,
-/area/template_noop)
-"mU" = (
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"au" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10;
@@ -319,239 +219,21 @@
dir = 8
},
/turf/open/floor/plasteel/dark,
-/area/ruin/space/syndielistenspace)
-"mZ" = (
-/obj/structure/closet/crate/freezer,
-/obj/item/reagent_containers/blood/OMinus{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/item/reagent_containers/blood/OMinus,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
-/turf/open/floor/plasteel/white/side{
- dir = 9
- },
-/area/ruin/space/syndielistenspace)
-"pa" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 8;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
-/obj/effect/mob_spawn/human/space/syndicate/comms{
- dir = 8
- },
-/turf/open/floor/plasteel/grimy,
-/area/ruin/space/syndielistenspace)
-"pV" = (
-/obj/machinery/light/small,
-/obj/structure/sign/warning/vacuum{
- pixel_y = 32
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/ruin/space/syndielistenspace)
-"qp" = (
-/obj/machinery/atmospherics/components/unary/tank/air{
- dir = 1
- },
-/obj/effect/turf_decal/bot,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/ruin/space/syndielistenspace)
-"qH" = (
-/obj/structure/table/wood,
-/obj/item/ammo_box/magazine/m10mm,
-/obj/item/paper/fluff/ruins/listeningstation/briefing,
-/turf/open/floor/plasteel/grimy,
-/area/ruin/space/syndielistenspace)
-"rr" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
-/turf/closed/wall/r_wall,
-/area/ruin/space/syndielistenspace)
-"rJ" = (
-/obj/machinery/vending/cola/random{
- extended_inventory = 1
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel/white/corner{
- dir = 8
- },
-/area/ruin/space/syndielistenspace)
-"te" = (
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 8
- },
-/obj/machinery/door/airlock/external{
- id_tag = "syndie_listeningpost_external";
- req_access_txt = "150"
- },
-/obj/structure/fans/tiny,
-/turf/open/floor/plating,
-/area/ruin/space/syndielistenspace)
-"tg" = (
-/obj/structure/table,
+/area/ruin/space/has_grav/listeningstation)
+"av" = (
/obj/machinery/light/small{
- brightness = 3;
- dir = 8
- },
-/obj/item/storage/box/donkpockets{
- pixel_x = -2;
- pixel_y = 6
- },
-/obj/item/storage/box/donkpockets{
- pixel_y = 3
- },
-/obj/item/storage/box/donkpockets{
- pixel_x = 2
- },
-/obj/item/reagent_containers/food/snacks/chocolatebar,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/sign/poster/contraband/random{
- pixel_x = -32
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
+/obj/structure/extinguisher_cabinet{
+ pixel_x = 25
},
+/obj/structure/table,
+/obj/item/paper_bin,
+/obj/item/paper/fluff/ruins/listeningstation/reports/november,
+/obj/item/pen,
/turf/open/floor/plasteel/dark,
-/area/ruin/space/syndielistenspace)
-"ty" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/syndielistenspace)
-"ui" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/structure/tank_dispenser/oxygen{
- oxygentanks = 4
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
-/turf/open/floor/mineral/plastitanium,
-/area/ruin/space/syndielistenspace)
-"ve" = (
-/obj/structure/sign/departments/medbay/alt,
-/turf/closed/wall,
-/area/ruin/space/syndielistenspace)
-"vj" = (
-/obj/effect/turf_decal/stripes/red/corner{
- dir = 1
- },
-/obj/machinery/door/airlock{
- name = "Cabin"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/syndielistenspace)
-"vH" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
-/obj/machinery/door/airlock{
- name = "Personal Quarters"
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/syndielistenspace)
-"vJ" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/power/apc/syndicate{
- dir = 4;
- name = "Syndicate Listening Post APC";
- pixel_x = 24;
- areastring = "/area/ruin/space/syndielistenspace"
- },
-/obj/structure/cable,
-/turf/open/floor/plating,
-/area/ruin/space/syndielistenspace)
-"vP" = (
-/obj/machinery/door/airlock/maintenance,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plating,
-/area/ruin/space/syndielistenspace)
-"wW" = (
-/obj/machinery/door/airlock{
- name = "Toilet"
- },
-/turf/open/floor/plasteel/showroomfloor,
-/area/ruin/space/syndielistenspace)
-"xh" = (
-/obj/structure/rack{
- dir = 8
- },
-/obj/item/multitool,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel/dark,
-/area/ruin/space/syndielistenspace)
-"xw" = (
-/obj/structure/chair/stool,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/syndielistenspace)
-"yi" = (
-/obj/machinery/syndicatebomb/self_destruct{
- anchored = 1
- },
-/obj/structure/sign/warning/securearea{
- desc = "A warning sign which reads 'DANGER: SELF DESTRUCT DEVICE'.";
- name = "DANGER: SELF DESTRUCT DEVICE";
- pixel_x = 32
- },
-/obj/machinery/door/window/brigdoor{
- dir = 8;
- req_access_txt = "150"
- },
-/turf/open/floor/circuit/red,
-/area/ruin/space/syndielistenspace)
-"yy" = (
+/area/ruin/space/has_grav/listeningstation)
+"aw" = (
/obj/structure/table,
/obj/machinery/cell_charger,
/obj/item/stock_parts/cell/high/plus,
@@ -566,416 +248,8 @@
pixel_x = -24
},
/turf/open/floor/plasteel/dark,
-/area/ruin/space/syndielistenspace)
-"yA" = (
-/obj/structure/table,
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = -26
- },
-/obj/machinery/microwave,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/ruin/space/syndielistenspace)
-"yC" = (
-/obj/structure/table/reinforced,
-/obj/machinery/firealarm{
- dir = 2;
- pixel_y = 24
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/computer/libraryconsole/bookmanagement,
-/turf/open/floor/plasteel/dark,
-/area/ruin/space/syndielistenspace)
-"yD" = (
-/turf/closed/mineral/random,
-/area/awaymission)
-"yS" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
-/turf/open/floor/plasteel/white/corner,
-/area/ruin/space/syndielistenspace)
-"zl" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/ruin/space/syndielistenspace)
-"Bm" = (
-/obj/machinery/door/firedoor,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
-/obj/machinery/door/airlock/hatch{
- name = "Telecommunications";
- req_access_txt = "150"
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/ruin/space/syndielistenspace)
-"Bo" = (
-/obj/machinery/airalarm/syndicate{
- pixel_y = 24
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
-/obj/effect/baseturf_helper/asteroid/airless,
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/red{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/syndielistenspace)
-"BG" = (
-/obj/structure/sink{
- dir = 4;
- pixel_x = 11
- },
-/obj/machinery/iv_drip,
-/obj/machinery/light/small,
-/obj/machinery/airalarm/syndicate{
- dir = 1;
- pixel_y = -24
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
- },
-/turf/open/floor/plasteel/white/side{
- dir = 6
- },
-/area/ruin/space/syndielistenspace)
-"CT" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/turf/open/floor/plating,
-/area/ruin/space/syndielistenspace)
-"Ds" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/power/smes/magical,
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/turf/open/floor/plating,
-/area/ruin/space/syndielistenspace)
-"DI" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
-/turf/open/floor/plasteel/grimy,
-/area/ruin/space/syndielistenspace)
-"DW" = (
-/obj/structure/rack{
- dir = 8
- },
-/obj/item/clothing/mask/gas{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/item/clothing/mask/gas,
-/turf/open/floor/mineral/plastitanium/red,
-/area/ruin/space/syndielistenspace)
-"EZ" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
-/obj/machinery/door/airlock/hatch{
- name = "E.V.A. Equipment";
- req_access_txt = "150"
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/ruin/space/syndielistenspace)
-"GN" = (
-/turf/closed/wall/r_wall,
-/area/ruin/space/syndielistenspace)
-"Hl" = (
-/obj/effect/turf_decal/stripes/red/corner,
-/obj/machinery/light/small{
- dir = 4
- },
-/obj/machinery/airalarm/syndicate{
- dir = 8;
- pixel_x = 24
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/syndielistenspace)
-"HF" = (
-/obj/structure/curtain,
-/obj/machinery/shower{
- pixel_y = 14
- },
-/obj/machinery/light/small,
-/obj/item/soap,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel/showroomfloor,
-/area/ruin/space/syndielistenspace)
-"HX" = (
-/obj/structure/filingcabinet,
-/obj/item/paper/fluff/ruins/listeningstation/reports/april,
-/obj/item/paper/fluff/ruins/listeningstation/reports/may,
-/obj/item/paper/fluff/ruins/listeningstation/reports/june,
-/obj/item/paper/fluff/ruins/listeningstation/reports/july,
-/obj/item/paper/fluff/ruins/listeningstation/reports/august,
-/obj/item/paper/fluff/ruins/listeningstation/reports/september,
-/obj/item/paper/fluff/ruins/listeningstation/reports/october,
-/obj/item/paper/fluff/ruins/listeningstation/receipt,
-/obj/effect/decal/cleanable/dirt,
-/obj/item/paper/fluff/ruins/listeningstation/odd_report,
-/turf/open/floor/plasteel/dark,
-/area/ruin/space/syndielistenspace)
-"JD" = (
-/obj/effect/turf_decal/bot,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable,
-/obj/machinery/power/port_gen/pacman,
-/turf/open/floor/plating,
-/area/ruin/space/syndielistenspace)
-"JN" = (
-/obj/machinery/light/small,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/closet/emcloset/anchored,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel,
-/area/ruin/space/syndielistenspace)
-"JU" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/ruin/space/syndielistenspace)
-"Kf" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/red{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/syndielistenspace)
-"Kg" = (
-/turf/closed/wall,
-/area/ruin/space/syndielistenspace)
-"Kn" = (
-/obj/structure/closet{
- icon_door = "black";
- name = "wardrobe"
- },
-/obj/item/clothing/under/color/black{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/item/clothing/under/color/black{
- pixel_x = 1;
- pixel_y = -1
- },
-/obj/item/clothing/head/soft/black{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/item/clothing/head/soft/black{
- pixel_x = 1;
- pixel_y = -1
- },
-/obj/item/clothing/gloves/fingerless,
-/obj/item/clothing/shoes/sneakers/black{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/item/clothing/shoes/sneakers/black{
- pixel_x = 1;
- pixel_y = -1
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/item/storage/photo_album,
-/obj/machinery/light/small,
-/turf/open/floor/plasteel/grimy,
-/area/ruin/space/syndielistenspace)
-"LZ" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/extinguisher_cabinet{
- pixel_x = -27;
- pixel_y = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/machinery/computer/arcade/tetris{
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
-/area/ruin/space/syndielistenspace)
-"Mk" = (
-/obj/effect/turf_decal/stripes/red/line{
- dir = 4
- },
-/obj/effect/turf_decal/caution/red{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/syndielistenspace)
-"NF" = (
-/obj/structure/table,
-/obj/item/storage/toolbox/syndicate,
-/obj/item/flashlight{
- pixel_y = -12
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel/dark,
-/area/ruin/space/syndielistenspace)
-"Oa" = (
-/obj/structure/chair/office/dark{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/ruin/space/syndielistenspace)
-"Ow" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel,
-/area/ruin/space/syndielistenspace)
-"Pk" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 6;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/syndielistenspace)
-"Pr" = (
+/area/ruin/space/has_grav/listeningstation)
+"ax" = (
/obj/machinery/light/small{
dir = 4
},
@@ -1007,18 +281,339 @@
dir = 8
},
/turf/open/floor/plasteel/dark,
-/area/ruin/space/syndielistenspace)
-"Qp" = (
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+/area/ruin/space/has_grav/listeningstation)
+"ay" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/structure/chair/stool,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/obj/machinery/door/airlock/external{
- id_tag = "syndie_listeningpost_external";
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"az" = (
+/obj/structure/filingcabinet,
+/obj/item/paper/fluff/ruins/listeningstation/reports/april,
+/obj/item/paper/fluff/ruins/listeningstation/reports/may,
+/obj/item/paper/fluff/ruins/listeningstation/reports/june,
+/obj/item/paper/fluff/ruins/listeningstation/reports/july,
+/obj/item/paper/fluff/ruins/listeningstation/reports/august,
+/obj/item/paper/fluff/ruins/listeningstation/reports/september,
+/obj/item/paper/fluff/ruins/listeningstation/reports/october,
+/obj/item/paper/fluff/ruins/listeningstation/receipt,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/paper/fluff/ruins/listeningstation/odd_report,
+/obj/structure/sign/poster/contraband/random{
+ pixel_x = -1;
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aA" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aB" = (
+/obj/structure/rack{
+ dir = 8
+ },
+/obj/item/multitool,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aC" = (
+/obj/structure/rack{
+ dir = 8;
+ layer = 2.9
+ },
+/obj/item/mining_scanner,
+/obj/item/pickaxe,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aD" = (
+/obj/machinery/computer/arcade/tetris{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aE" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/tank_dispenser/oxygen{
+ oxygentanks = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/ruin/space/has_grav/listeningstation)
+"aF" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/closed/wall/r_wall,
+/area/ruin/space/has_grav/listeningstation)
+"aG" = (
+/obj/machinery/atmospherics/components/unary/outlet_injector/on{
+ dir = 8;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plating/airless,
+/area/ruin/space/has_grav/listeningstation)
+"aH" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"aI" = (
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/caution/red{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aJ" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"aK" = (
+/obj/machinery/door/firedoor,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/machinery/door/airlock/hatch{
+ name = "Telecommunications";
req_access_txt = "150"
},
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aL" = (
+/obj/item/bombcore/badmin{
+ anchored = 1;
+ invisibility = 100
+ },
+/turf/closed/wall,
+/area/ruin/space/has_grav/listeningstation)
+"aM" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/machinery/door/airlock/hatch{
+ name = "E.V.A. Equipment";
+ req_access_txt = "150"
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aN" = (
+/obj/machinery/vending/donksofttoyvendor{
+ extended_inventory = 1
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"aO" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/closet/crate,
+/obj/item/stack/sheet/metal/twenty,
+/obj/item/stack/sheet/glass{
+ amount = 10
+ },
+/obj/item/stack/rods/ten,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/storage/box/lights/bulbs,
+/obj/item/stack/sheet/mineral/plasma{
+ amount = 30
+ },
+/obj/item/stock_parts/cell/high/plus,
+/obj/item/storage/box/lights/tubes,
/turf/open/floor/plating,
-/area/ruin/space/syndielistenspace)
-"RF" = (
+/area/ruin/space/has_grav/listeningstation)
+"aP" = (
+/obj/structure/closet/crate/bin,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aQ" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/chair/sofa/corp/right{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"aR" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/machinery/door/airlock{
+ name = "Personal Quarters"
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"aS" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"aT" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/mob_spawn/human/lavaland_syndicate/comms/space{
+ assignedrole = "Space Syndicate";
+ dir = 8;
+ flavour_text = "You are a syndicate agent, assigned to a small listening post station situated near your hated enemy's top secret research facility: Space Station 13. Monitor enemy activity as best you can, and try to keep a low profile. DON'T abandon the base without good cause. Use the communication equipment to provide support to any field agents, and sow disinformation to throw Nanotrasen off your trail. Do not let the base fall into enemy hands!"
+ },
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"aU" = (
+/obj/machinery/airalarm/syndicate{
+ pixel_y = 24
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/baseturf_helper/asteroid/airless,
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"aV" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
},
@@ -1035,74 +630,53 @@
dir = 4
},
/turf/open/floor/plasteel,
-/area/ruin/space/syndielistenspace)
-"Sy" = (
-/obj/structure/table,
-/obj/machinery/computer/security/telescreen/entertainment{
- pixel_x = -30
- },
-/obj/item/reagent_containers/food/drinks/beer{
- pixel_x = -4;
- pixel_y = 14
- },
-/obj/item/reagent_containers/food/drinks/beer{
- pixel_x = 3;
- pixel_y = 11
- },
-/obj/item/storage/fancy/cigarettes/cigpack_syndicate{
- pixel_x = -3
- },
-/obj/item/lighter{
- pixel_x = 7;
- pixel_y = -3
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/neutral{
+/area/ruin/space/has_grav/listeningstation)
+"aW" = (
+/obj/machinery/light/small{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
+/obj/machinery/firealarm{
+ dir = 2;
+ pixel_y = 28;
+ pixel_x = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 1;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
},
-/turf/open/floor/plasteel/dark,
-/area/ruin/space/syndielistenspace)
-"SC" = (
-/obj/structure/bookcase/random,
-/turf/open/floor/plasteel/grimy,
-/area/ruin/space/syndielistenspace)
-"Tc" = (
-/obj/item/bombcore/badmin{
- anchored = 1;
- invisibility = 100
+/obj/effect/turf_decal/tile/red{
+ dir = 1
},
-/turf/closed/wall,
-/area/ruin/space/syndielistenspace)
-"VK" = (
-/obj/machinery/telecomms/relay/preset/ruskie{
- use_power = 0
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel/dark,
-/area/ruin/space/syndielistenspace)
-"VP" = (
-/obj/machinery/computer/camera_advanced{
+/obj/effect/turf_decal/tile/red{
dir = 4
},
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"aX" = (
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/newscaster{
- pixel_y = 32
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 4
},
-/obj/item/radio/intercom{
- freerange = 1;
- name = "Syndicate Radio Intercom";
- pixel_x = -30
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
},
-/turf/open/floor/plasteel/dark,
-/area/ruin/space/syndielistenspace)
-"VX" = (
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"aY" = (
/obj/machinery/vending/snack/random{
extended_inventory = 1
},
@@ -1115,36 +689,372 @@
dir = 1
},
/turf/open/floor/plasteel,
-/area/ruin/space/syndielistenspace)
-"YD" = (
-/obj/machinery/light/small{
- dir = 8
- },
-/obj/structure/closet/crate,
-/obj/item/stack/sheet/metal/twenty,
-/obj/item/stack/sheet/glass{
- amount = 10
- },
-/obj/item/stack/rods/ten,
-/obj/effect/turf_decal/stripes/line,
+/area/ruin/space/has_grav/listeningstation)
+"aZ" = (
/obj/effect/decal/cleanable/dirt,
-/obj/item/storage/box/lights/bulbs,
-/obj/item/stock_parts/cell/high/plus,
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
},
-/obj/item/stack/sheet/mineral/plasma{
- amount = 20
- },
-/obj/item/wrench,
-/turf/open/floor/plating,
-/area/ruin/space/syndielistenspace)
-"YY" = (
-/obj/effect/turf_decal/stripes/line{
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
dir = 4
},
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"ba" = (
+/obj/effect/turf_decal/stripes/red/corner,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/machinery/airalarm/syndicate{
+ dir = 8;
+ pixel_x = 24
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"bb" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"bc" = (
+/obj/machinery/light/small,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/closet/emcloset/anchored,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"bd" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"be" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/obj/structure/extinguisher_cabinet{
+ pixel_y = -29
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"bf" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel/white/corner,
+/area/ruin/space/has_grav/listeningstation)
+"bg" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel/white/side,
+/area/ruin/space/has_grav/listeningstation)
+"bh" = (
+/obj/machinery/vending/cola/random{
+ extended_inventory = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/white/corner{
+ dir = 8
+ },
+/area/ruin/space/has_grav/listeningstation)
+"bi" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"bj" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/chair/sofa/corp/left{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"bk" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"bl" = (
+/obj/machinery/syndicatebomb/self_destruct{
+ anchored = 1
+ },
+/obj/structure/sign/warning/securearea{
+ desc = "A warning sign which reads 'DANGER: SELF DESTRUCT DEVICE'.";
+ name = "DANGER: SELF DESTRUCT DEVICE";
+ pixel_x = 32
+ },
+/obj/machinery/door/window/brigdoor{
+ dir = 8;
+ req_access_txt = "150"
+ },
+/turf/open/floor/circuit/red,
+/area/ruin/space/has_grav/listeningstation)
+"bm" = (
+/obj/machinery/door/airlock/maintenance,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"bn" = (
+/obj/structure/sign/departments/medbay/alt,
+/turf/closed/wall,
+/area/ruin/space/has_grav/listeningstation)
+"bo" = (
+/obj/machinery/door/firedoor,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/machinery/door/airlock/medical/glass{
+ name = "Medbay"
+ },
+/turf/open/floor/plasteel/white,
+/area/ruin/space/has_grav/listeningstation)
+"bp" = (
+/obj/effect/turf_decal/stripes/red/corner{
+ dir = 1
+ },
+/obj/machinery/door/airlock{
+ name = "Cabin"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"bq" = (
+/obj/structure/cable/yellow{
+ icon_state = "0-4"
+ },
+/obj/machinery/power/smes{
+ charge = 5e+006
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"br" = (
+/obj/structure/cable/yellow{
+ icon_state = "0-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/power/apc/syndicate{
+ dir = 4;
+ name = "Syndicate Listening Post APC";
+ pixel_x = 24
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"bs" = (
+/obj/structure/closet/crate/freezer,
+/obj/item/reagent_containers/blood/OMinus{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/item/reagent_containers/blood/OMinus,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 9
+ },
+/area/ruin/space/has_grav/listeningstation)
+"bt" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 1
+ },
+/area/ruin/space/has_grav/listeningstation)
+"bu" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/closet/secure_closet/medical1{
+ req_access = null;
+ req_access_txt = "150"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/item/defibrillator/loaded{
+ cell = /obj/item/stock_parts/cell/bluespacereactor
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 5
+ },
+/area/ruin/space/has_grav/listeningstation)
+"bv" = (
+/obj/structure/bookcase/random,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"bw" = (
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"bx" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"by" = (
+/obj/machinery/power/terminal{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "0-2";
+ pixel_y = 1
+ },
+/obj/structure/reagent_dispensers/fueltank,
+/obj/item/clothing/head/welding,
+/obj/item/weldingtool/largetank,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"bz" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"bA" = (
+/obj/structure/table,
+/obj/item/storage/firstaid/regular{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/item/storage/backpack/duffelbag/med/surgery{
+ pixel_x = 4;
+ pixel_y = -2
+ },
+/obj/item/clothing/neck/stethoscope{
+ pixel_x = -1
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 8
+ },
+/area/ruin/space/has_grav/listeningstation)
+"bB" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/turf/open/floor/plasteel/telecomms,
+/area/ruin/space/has_grav/listeningstation)
+"bC" = (
+/obj/structure/cable,
+/obj/machinery/power/port_gen/pacman{
+ anchored = 1
+ },
+/obj/effect/turf_decal/bot,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/wrench,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"bD" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"bF" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/meter,
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"bH" = (
+/obj/machinery/atmospherics/components/unary/tank/air{
+ dir = 1
+ },
+/obj/effect/turf_decal/bot,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/listeningstation)
+"bI" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 8;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -1156,453 +1066,1221 @@
dir = 8
},
/turf/open/floor/plasteel/dark,
-/area/ruin/space/syndielistenspace)
-"ZG" = (
+/area/ruin/space/has_grav/listeningstation)
+"bJ" = (
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/computer/med_data/syndie{
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"cg" = (
+/obj/structure/table,
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/item/reagent_containers/food/drinks/shaker{
+ pixel_y = 8;
+ pixel_x = -6
+ },
+/obj/item/reagent_containers/rag/towel/syndicate{
+ pixel_x = 4;
+ pixel_y = -3
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"cT" = (
+/obj/structure/curtain,
+/obj/machinery/shower{
+ pixel_y = 14
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/item/soap/syndie,
+/obj/machinery/door/window,
+/turf/open/floor/plasteel/showroomfloor,
+/area/ruin/space/has_grav/listeningstation)
+"dj" = (
+/obj/structure/closet{
+ icon_door = "black";
+ name = "wardrobe"
+ },
+/obj/item/clothing/under/color/black{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/item/clothing/under/color/black{
+ pixel_x = 1;
+ pixel_y = -1
+ },
+/obj/item/clothing/head/soft/black{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/item/clothing/head/soft/black{
+ pixel_x = 1;
+ pixel_y = -1
+ },
+/obj/item/clothing/gloves/fingerless,
+/obj/item/clothing/shoes/sneakers/black{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/item/clothing/shoes/sneakers/black{
+ pixel_x = 1;
+ pixel_y = -1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/item/storage/photo_album,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"fI" = (
+/obj/machinery/firealarm{
+ pixel_x = 6;
+ pixel_y = 28
+ },
+/obj/structure/table,
+/obj/machinery/microwave,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"fQ" = (
+/obj/machinery/sleeper/syndie/fullupgrade{
+ dir = 8
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 6
+ },
+/area/ruin/space/has_grav/listeningstation)
+"iI" = (
+/obj/machinery/door/airlock{
+ name = "Toilet"
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"iO" = (
+/obj/structure/table,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/storage/fancy/cigarettes/cigars{
+ pixel_y = 6;
+ pixel_x = -4
+ },
+/obj/item/storage/fancy/cigarettes/cigars/cohiba{
+ pixel_y = 3
+ },
+/obj/item/storage/fancy/cigarettes/cigars/havana{
+ pixel_x = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"iP" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/structure/chair/sofa/corp{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"lA" = (
+/obj/structure/sink{
+ pixel_y = 24
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/window{
+ dir = 8
+ },
+/turf/open/floor/plasteel/showroomfloor,
+/area/ruin/space/has_grav/listeningstation)
+"lE" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/machinery/vending/kink{
+ shut_up = 1;
+ extended_inventory = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"mP" = (
+/obj/structure/extinguisher_cabinet{
+ pixel_x = 8;
+ pixel_y = 33
+ },
+/obj/structure/table,
+/obj/item/reagent_containers/food/drinks/beer{
+ pixel_x = 3;
+ pixel_y = 11
+ },
+/obj/item/reagent_containers/food/drinks/beer{
+ pixel_x = -4;
+ pixel_y = 14
+ },
+/obj/item/lighter{
+ pixel_x = 7;
+ pixel_y = -3
+ },
+/obj/item/storage/fancy/cigarettes/cigpack_syndicate{
+ pixel_x = -3
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"pq" = (
+/obj/structure/table,
+/obj/machinery/chem_dispenser/drinks/fullupgrade{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"pG" = (
+/obj/structure/closet/secure_closet/freezer/fridge,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"pL" = (
+/obj/structure/toilet{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/showroomfloor,
+/area/ruin/space/has_grav/listeningstation)
+"rS" = (
+/obj/structure/sign/poster/contraband/random{
+ pixel_y = -31
+ },
+/obj/structure/sink/kitchen{
+ dir = 8;
+ pixel_x = 12
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"sP" = (
+/obj/machinery/airalarm/syndicate{
+ dir = 1;
+ pixel_y = -24
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small,
+/obj/structure/table/optable,
+/turf/open/floor/plasteel/white/side,
+/area/ruin/space/has_grav/listeningstation)
+"sV" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"ux" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/structure/table,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"uP" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/computer/operating{
+ dir = 1
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 10
+ },
+/area/ruin/space/has_grav/listeningstation)
+"yb" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"yU" = (
+/obj/machinery/washing_machine{
+ pixel_x = 2;
+ pixel_y = 12
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/showroomfloor,
+/area/ruin/space/has_grav/listeningstation)
+"yZ" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/dresser,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"AH" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"Dc" = (
+/obj/structure/mirror{
+ pixel_x = 28
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/plasteel/showroomfloor,
+/area/ruin/space/has_grav/listeningstation)
+"Gh" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"GZ" = (
+/obj/structure/sink{
+ dir = 4;
+ pixel_x = 11
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/iv_drip,
+/turf/open/floor/plasteel/white/side{
+ dir = 4
+ },
+/area/ruin/space/has_grav/listeningstation)
+"Io" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"IQ" = (
+/turf/open/floor/plasteel/showroomfloor,
+/area/ruin/space/has_grav/listeningstation)
+"Ll" = (
+/obj/machinery/jukebox{
req_one_access = null
},
/turf/open/floor/plasteel/dark,
-/area/ruin/space/syndielistenspace)
+/area/ruin/space/has_grav/listeningstation)
+"Lu" = (
+/obj/structure/sign/poster/contraband/random{
+ pixel_x = -32
+ },
+/obj/structure/table,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"LL" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"MM" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"Ne" = (
+/obj/machinery/light/small,
+/obj/structure/chair/office/dark{
+ dir = 8
+ },
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"NC" = (
+/obj/structure/table/wood,
+/obj/item/flashlight/lamp/green{
+ pixel_x = -4;
+ pixel_y = 11
+ },
+/obj/item/ammo_box/magazine/m10mm,
+/obj/item/paper/fluff/ruins/listeningstation/briefing,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"NL" = (
+/obj/structure/bed/double{
+ dir = 1
+ },
+/obj/item/bedsheet/syndie/double{
+ dir = 1
+ },
+/obj/structure/sign/poster/contraband/random{
+ pixel_x = -32
+ },
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"OH" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"Pb" = (
+/obj/machinery/vending/boozeomat/syndicate_access{
+ shut_up = 1;
+ extended_inventory = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"Po" = (
+/obj/machinery/vending/cigarette{
+ extended_inventory = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"PM" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4
+ },
+/obj/structure/table,
+/obj/item/toy/figure/syndie{
+ pixel_x = 3;
+ pixel_y = -8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"Qj" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4
+ },
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"Qv" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/chair/office/dark{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"Sz" = (
+/obj/structure/chair/stool,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"Ud" = (
+/obj/machinery/computer/security/telescreen/entertainment{
+ pixel_x = -30
+ },
+/obj/structure/table,
+/obj/machinery/chem_dispenser/drinks/beer/fullupgrade{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"UI" = (
+/obj/machinery/door/airlock{
+ name = "Cabin"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
+"VB" = (
+/obj/structure/table,
+/obj/item/storage/box/donkpockets{
+ pixel_x = -2;
+ pixel_y = 6
+ },
+/obj/item/storage/box/donkpockets{
+ pixel_y = 3
+ },
+/obj/item/storage/box/donkpockets{
+ pixel_x = 2
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"Wb" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/listeningstation)
+"YY" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/listeningstation)
+"Zp" = (
+/obj/structure/table/wood,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/listeningstation)
(1,1,1) = {"
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
"}
(2,1,1) = {"
-ae
-ae
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-ae
-yD
-yD
-yD
-yD
-yD
-ae
-ae
-ae
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+ab
+ab
+aa
+aa
+aa
+aa
+ab
+ab
+aa
+aa
+aa
+aa
+aa
"}
(3,1,1) = {"
-ae
-ae
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-ae
-ae
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
"}
(4,1,1) = {"
-ae
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-ae
+aa
+aa
+ab
+ab
+ab
+ab
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
"}
(5,1,1) = {"
-ae
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-ae
+aa
+aa
+ab
+ab
+ab
+ab
+ac
+VB
+Lu
+cg
+Ud
+pq
+Pb
+pG
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ab
+ab
+aa
"}
(6,1,1) = {"
-ae
-yD
-yD
-yD
-yD
-Kg
-Kg
-Kg
-Kg
-Kg
-Kg
-Kg
-Kg
-yD
-yD
-yD
-yD
-yD
-yD
-ae
+aa
+aa
+ab
+ab
+ab
+ab
+ac
+mP
+bk
+AH
+bk
+bk
+Io
+rS
+ac
+bv
+NL
+NC
+ac
+bv
+NL
+NC
+ac
+ab
+ab
+ab
"}
(7,1,1) = {"
-yD
-yD
-yD
-yD
-yD
-Kg
-HF
-Kg
-LZ
-yA
-Sy
-tg
-Kg
-Kg
-Kg
-yD
-yD
-yD
-yD
-ae
+aa
+aa
+ab
+ac
+ac
+ac
+ac
+fI
+bb
+Ll
+PM
+ux
+iO
+ac
+ac
+yZ
+aH
+Ne
+ac
+yZ
+aH
+Ne
+ac
+ab
+ab
+ab
"}
(8,1,1) = {"
-yD
-yD
-yD
-yD
-yD
-Kg
-ag
-wW
-Ow
-ty
-xw
-lW
-Kg
-SC
-Kg
-Kg
-yD
-yD
-yD
-ae
+aa
+ab
+ab
+ac
+cT
+pL
+ac
+aP
+AH
+aZ
+aQ
+iP
+bj
+ac
+ac
+Qj
+bw
+aT
+ac
+Qj
+bw
+aT
+ac
+ab
+ab
+ab
"}
(9,1,1) = {"
-yD
-yD
-yD
-yD
-Kg
-Kg
-Kg
-Kg
-kO
-Pk
-Hl
-Mk
-vj
-DI
-Kn
-Kg
-yD
-yD
-yD
-ae
+aa
+ab
+ab
+ac
+lA
+IQ
+iI
+OH
+AH
+AH
+Wb
+ay
+aD
+ac
+ac
+at
+Zp
+dj
+ac
+at
+Zp
+dj
+ac
+ab
+ab
+ab
"}
(10,1,1) = {"
-yD
-yD
-yD
-Kg
-Kg
-VP
-ZG
-Kg
-Kg
-vH
-Kg
-yi
-Kg
-pa
-qH
-Kg
-yD
-yD
-yD
-ae
+aa
+ab
+ab
+ac
+yU
+Dc
+ac
+lE
+AH
+bk
+bJ
+Sz
+aq
+ac
+ac
+UI
+ac
+ac
+ac
+UI
+ac
+ac
+ac
+ab
+ab
+aa
"}
(11,1,1) = {"
-yD
-yD
-yD
-Kg
-ii
-Oa
-JU
-HX
-Kg
-gu
-Kg
-Kg
-Kg
-Kg
-Kg
-Kg
-Kg
-yD
-yD
-ae
+ab
+ab
+ab
+ac
+ac
+ac
+ac
+ac
+ac
+sV
+LL
+ba
+aI
+bp
+bi
+aJ
+Gh
+bi
+bi
+yb
+aN
+ac
+ab
+ab
+ab
+aa
"}
(12,1,1) = {"
-yD
-yD
-yD
-Kg
-yC
-zl
-mU
-bX
-Bm
-hs
-JN
-Kg
-Ds
-bn
-YD
-JD
-Kg
-yD
-yD
-ae
+ab
+ab
+ab
+ab
+ac
+ac
+ah
+as
+ac
+ac
+aR
+ac
+bl
+ac
+MM
+YY
+YY
+bx
+bD
+bD
+Po
+ac
+ab
+ab
+aa
+aa
"}
(13,1,1) = {"
-yD
-yD
-yD
-Kg
-Kg
-VK
+aa
ab
-xh
-Kg
-Bo
-fs
-vP
-CT
-vJ
-fW
-qp
-Kg
-yD
-yD
-ae
+ab
+ab
+ac
+ad
+ai
+Qv
+az
+ac
+aS
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ab
+ab
+aa
+aa
"}
(14,1,1) = {"
-yD
-yD
-yD
-yD
-Kg
-Kg
-Kg
-Kg
-Tc
-RF
-kE
-Kg
-Kg
-Kg
-Kg
-Kg
-Kg
-yD
-yD
+aa
+ab
+ab
+ab
+ac
ae
+aj
+au
+aA
+aK
+ar
+bc
+ac
+bq
+by
+aO
+bC
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
"}
(15,1,1) = {"
-yD
-yD
-yD
-Kg
-Kg
-NF
-yy
-bk
-Kg
-gN
-yS
-ve
-mZ
-kd
-Kg
-yD
-yD
-yD
-yD
-ae
+aa
+ab
+ab
+ab
+ac
+ac
+ak
+av
+aB
+ac
+aU
+bd
+bm
+br
+bz
+bF
+bH
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
"}
(16,1,1) = {"
-yD
-yD
-yD
-Kg
-DW
-YY
-Pr
-lp
-EZ
-Kf
-ia
-ff
-hg
-BG
-Kg
-yD
-yD
-yD
-yD
-ae
+aa
+ab
+ab
+ab
+ab
+ac
+ac
+ac
+ac
+aL
+aV
+be
+ac
+ac
+ac
+ac
+ac
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
"}
(17,1,1) = {"
-ae
-yD
-yD
-Kg
-Kg
-Qp
-Kg
-ui
-Kg
-VX
-rJ
-Kg
-fm
-Kg
-Kg
-yD
-yD
-yD
-yD
-ae
+aa
+ab
+ab
+ab
+ac
+ac
+al
+aw
+aC
+ac
+aW
+bf
+bn
+bs
+bA
+uP
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
"}
(18,1,1) = {"
-ae
-yD
-yD
-yD
-GN
-pV
-GN
-rr
-GN
-Kg
-Kg
-Kg
-Kg
-Kg
-yD
-yD
-yD
-yD
-yD
-ae
+aa
+ab
+ab
+ab
+ac
+af
+am
+ax
+bI
+aM
+aX
+bg
+bo
+bt
+bB
+sP
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
"}
(19,1,1) = {"
-ae
-yD
-yD
-yD
-GN
-te
-GN
-ax
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-yD
-ae
-ae
+aa
+aa
+ab
+ab
+ac
+ac
+an
+ac
+aE
+ac
+aY
+bh
+ac
+bu
+GZ
+fQ
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
"}
(20,1,1) = {"
-ae
-ae
-ae
-ae
-ae
-mh
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-yD
-yD
-ae
-ae
-ae
+aa
+aa
+ab
+ab
+ab
+ag
+ao
+ag
+aF
+ag
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+"}
+(21,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+ag
+ap
+ag
+aG
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+"}
+(22,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(23,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
"}
diff --git a/modular_splurt/_maps/RandomRuins/SpaceRuins/syndielistenspace.dmm.old b/modular_splurt/_maps/RandomRuins/SpaceRuins/syndielistenspace.dmm.old
new file mode 100644
index 0000000000..ed9b30357a
--- /dev/null
+++ b/modular_splurt/_maps/RandomRuins/SpaceRuins/syndielistenspace.dmm.old
@@ -0,0 +1,1608 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"ab" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/structure/extinguisher_cabinet{
+ pixel_x = 25
+ },
+/obj/structure/table,
+/obj/item/paper_bin,
+/obj/item/paper/fluff/ruins/listeningstation/reports/november,
+/obj/item/pen,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/syndielistenspace)
+"ae" = (
+/turf/template_noop,
+/area/template_noop)
+"ag" = (
+/obj/structure/sink{
+ dir = 4;
+ pixel_x = 11
+ },
+/obj/structure/toilet{
+ pixel_y = 18
+ },
+/obj/structure/mirror{
+ pixel_x = 28
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/showroomfloor,
+/area/ruin/space/syndielistenspace)
+"ax" = (
+/obj/machinery/atmospherics/components/unary/outlet_injector/on{
+ dir = 8;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plating/airless,
+/area/ruin/space/syndielistenspace)
+"bk" = (
+/obj/structure/rack{
+ dir = 8;
+ layer = 2.9
+ },
+/obj/item/mining_scanner,
+/obj/item/pickaxe,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/mop/advanced,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/syndielistenspace)
+"bn" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/power/terminal{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "0-2";
+ pixel_y = 1
+ },
+/obj/structure/reagent_dispensers/fueltank,
+/obj/item/clothing/head/welding,
+/obj/item/weldingtool/largetank,
+/turf/open/floor/plating,
+/area/ruin/space/syndielistenspace)
+"bX" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/syndielistenspace)
+"ff" = (
+/obj/machinery/door/firedoor,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/machinery/door/airlock/medical/glass{
+ name = "Medbay"
+ },
+/turf/open/floor/plasteel/white,
+/area/ruin/space/syndielistenspace)
+"fm" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/closet/secure_closet/medical1{
+ req_access = null;
+ req_access_txt = "150"
+ },
+/turf/open/floor/plasteel/white,
+/area/ruin/space/syndielistenspace)
+"fs" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ruin/space/syndielistenspace)
+"fW" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/meter,
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating,
+/area/ruin/space/syndielistenspace)
+"gu" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/syndielistenspace)
+"gN" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/machinery/firealarm{
+ dir = 2;
+ pixel_y = 24
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 1;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/syndielistenspace)
+"hg" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 5
+ },
+/area/ruin/space/syndielistenspace)
+"hs" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 2;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/syndielistenspace)
+"ia" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel/white/side,
+/area/ruin/space/syndielistenspace)
+"ii" = (
+/obj/machinery/computer/message_monitor{
+ dir = 2
+ },
+/obj/machinery/airalarm/syndicate{
+ pixel_y = 24
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/paper/monitorkey,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/syndielistenspace)
+"kd" = (
+/obj/structure/table,
+/obj/item/storage/firstaid/regular,
+/obj/item/clothing/neck/stethoscope,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/white/side{
+ dir = 10
+ },
+/area/ruin/space/syndielistenspace)
+"kE" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/obj/structure/extinguisher_cabinet{
+ pixel_y = -29
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/syndielistenspace)
+"kO" = (
+/obj/machinery/washing_machine{
+ pixel_x = 4
+ },
+/obj/structure/window{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/syndielistenspace)
+"lp" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 8;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/syndielistenspace)
+"lW" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/closet/crate/bin,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/syndielistenspace)
+"mh" = (
+/obj/docking_port/stationary{
+ dir = 4;
+ dwidth = 6;
+ height = 7;
+ id = "caravansyndicate3_listeningpost";
+ name = "Syndicate Listening Post";
+ width = 15
+ },
+/obj/docking_port/stationary{
+ dir = 4;
+ dwidth = 4;
+ height = 5;
+ id = "caravansyndicate1_listeningpost";
+ name = "Syndicate Listening Post";
+ width = 9
+ },
+/turf/template_noop,
+/area/template_noop)
+"mU" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/syndielistenspace)
+"mZ" = (
+/obj/structure/closet/crate/freezer,
+/obj/item/reagent_containers/blood/OMinus{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/item/reagent_containers/blood/OMinus,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 9
+ },
+/area/ruin/space/syndielistenspace)
+"pa" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 8;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/mob_spawn/human/space/syndicate/comms{
+ dir = 8
+ },
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/syndielistenspace)
+"pV" = (
+/obj/machinery/light/small,
+/obj/structure/sign/warning/vacuum{
+ pixel_y = 32
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/ruin/space/syndielistenspace)
+"qp" = (
+/obj/machinery/atmospherics/components/unary/tank/air{
+ dir = 1
+ },
+/obj/effect/turf_decal/bot,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/ruin/space/syndielistenspace)
+"qH" = (
+/obj/structure/table/wood,
+/obj/item/ammo_box/magazine/m10mm,
+/obj/item/paper/fluff/ruins/listeningstation/briefing,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/syndielistenspace)
+"rr" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/closed/wall/r_wall,
+/area/ruin/space/syndielistenspace)
+"rJ" = (
+/obj/machinery/vending/cola/random{
+ extended_inventory = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/white/corner{
+ dir = 8
+ },
+/area/ruin/space/syndielistenspace)
+"te" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/obj/machinery/door/airlock/external{
+ id_tag = "syndie_listeningpost_external";
+ req_access_txt = "150"
+ },
+/obj/structure/fans/tiny,
+/turf/open/floor/plating,
+/area/ruin/space/syndielistenspace)
+"tg" = (
+/obj/structure/table,
+/obj/machinery/light/small{
+ brightness = 3;
+ dir = 8
+ },
+/obj/item/storage/box/donkpockets{
+ pixel_x = -2;
+ pixel_y = 6
+ },
+/obj/item/storage/box/donkpockets{
+ pixel_y = 3
+ },
+/obj/item/storage/box/donkpockets{
+ pixel_x = 2
+ },
+/obj/item/reagent_containers/food/snacks/chocolatebar,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/sign/poster/contraband/random{
+ pixel_x = -32
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/syndielistenspace)
+"ty" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/syndielistenspace)
+"ui" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/tank_dispenser/oxygen{
+ oxygentanks = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/ruin/space/syndielistenspace)
+"ve" = (
+/obj/structure/sign/departments/medbay/alt,
+/turf/closed/wall,
+/area/ruin/space/syndielistenspace)
+"vj" = (
+/obj/effect/turf_decal/stripes/red/corner{
+ dir = 1
+ },
+/obj/machinery/door/airlock{
+ name = "Cabin"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/syndielistenspace)
+"vH" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/machinery/door/airlock{
+ name = "Personal Quarters"
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/syndielistenspace)
+"vJ" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/power/apc/syndicate{
+ dir = 4;
+ name = "Syndicate Listening Post APC";
+ pixel_x = 24;
+ areastring = "/area/ruin/space/syndielistenspace"
+ },
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/ruin/space/syndielistenspace)
+"vP" = (
+/obj/machinery/door/airlock/maintenance,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plating,
+/area/ruin/space/syndielistenspace)
+"wW" = (
+/obj/machinery/door/airlock{
+ name = "Toilet"
+ },
+/turf/open/floor/plasteel/showroomfloor,
+/area/ruin/space/syndielistenspace)
+"xh" = (
+/obj/structure/rack{
+ dir = 8
+ },
+/obj/item/multitool,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/syndielistenspace)
+"xw" = (
+/obj/structure/chair/stool,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/syndielistenspace)
+"yi" = (
+/obj/machinery/syndicatebomb/self_destruct{
+ anchored = 1
+ },
+/obj/structure/sign/warning/securearea{
+ desc = "A warning sign which reads 'DANGER: SELF DESTRUCT DEVICE'.";
+ name = "DANGER: SELF DESTRUCT DEVICE";
+ pixel_x = 32
+ },
+/obj/machinery/door/window/brigdoor{
+ dir = 8;
+ req_access_txt = "150"
+ },
+/turf/open/floor/circuit/red,
+/area/ruin/space/syndielistenspace)
+"yy" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/cell/high/plus,
+/obj/item/stack/cable_coil{
+ pixel_x = 3;
+ pixel_y = -7
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/airalarm/syndicate{
+ dir = 4;
+ pixel_x = -24
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/syndielistenspace)
+"yA" = (
+/obj/structure/table,
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = -26
+ },
+/obj/machinery/microwave,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/syndielistenspace)
+"yC" = (
+/obj/structure/table/reinforced,
+/obj/machinery/firealarm{
+ dir = 2;
+ pixel_y = 24
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/computer/libraryconsole/bookmanagement,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/syndielistenspace)
+"yD" = (
+/turf/closed/mineral/random,
+/area/awaymission)
+"yS" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel/white/corner,
+/area/ruin/space/syndielistenspace)
+"zl" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/syndielistenspace)
+"Bm" = (
+/obj/machinery/door/firedoor,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/machinery/door/airlock/hatch{
+ name = "Telecommunications";
+ req_access_txt = "150"
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/syndielistenspace)
+"Bo" = (
+/obj/machinery/airalarm/syndicate{
+ pixel_y = 24
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/baseturf_helper/asteroid/airless,
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/syndielistenspace)
+"BG" = (
+/obj/structure/sink{
+ dir = 4;
+ pixel_x = 11
+ },
+/obj/machinery/iv_drip,
+/obj/machinery/light/small,
+/obj/machinery/airalarm/syndicate{
+ dir = 1;
+ pixel_y = -24
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 6
+ },
+/area/ruin/space/syndielistenspace)
+"CT" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plating,
+/area/ruin/space/syndielistenspace)
+"Ds" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/power/smes/magical,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating,
+/area/ruin/space/syndielistenspace)
+"DI" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 5;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/syndielistenspace)
+"DW" = (
+/obj/structure/rack{
+ dir = 8
+ },
+/obj/item/clothing/mask/gas{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/item/clothing/mask/gas,
+/turf/open/floor/mineral/plastitanium/red,
+/area/ruin/space/syndielistenspace)
+"EZ" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/machinery/door/airlock/hatch{
+ name = "E.V.A. Equipment";
+ req_access_txt = "150"
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/syndielistenspace)
+"GN" = (
+/turf/closed/wall/r_wall,
+/area/ruin/space/syndielistenspace)
+"Hl" = (
+/obj/effect/turf_decal/stripes/red/corner,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/machinery/airalarm/syndicate{
+ dir = 8;
+ pixel_x = 24
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/syndielistenspace)
+"HF" = (
+/obj/structure/curtain,
+/obj/machinery/shower{
+ pixel_y = 14
+ },
+/obj/machinery/light/small,
+/obj/item/soap,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/showroomfloor,
+/area/ruin/space/syndielistenspace)
+"HX" = (
+/obj/structure/filingcabinet,
+/obj/item/paper/fluff/ruins/listeningstation/reports/april,
+/obj/item/paper/fluff/ruins/listeningstation/reports/may,
+/obj/item/paper/fluff/ruins/listeningstation/reports/june,
+/obj/item/paper/fluff/ruins/listeningstation/reports/july,
+/obj/item/paper/fluff/ruins/listeningstation/reports/august,
+/obj/item/paper/fluff/ruins/listeningstation/reports/september,
+/obj/item/paper/fluff/ruins/listeningstation/reports/october,
+/obj/item/paper/fluff/ruins/listeningstation/receipt,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/paper/fluff/ruins/listeningstation/odd_report,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/syndielistenspace)
+"JD" = (
+/obj/effect/turf_decal/bot,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable,
+/obj/machinery/power/port_gen/pacman,
+/turf/open/floor/plating,
+/area/ruin/space/syndielistenspace)
+"JN" = (
+/obj/machinery/light/small,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/closet/emcloset/anchored,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ruin/space/syndielistenspace)
+"JU" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/syndielistenspace)
+"Kf" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/syndielistenspace)
+"Kg" = (
+/turf/closed/wall,
+/area/ruin/space/syndielistenspace)
+"Kn" = (
+/obj/structure/closet{
+ icon_door = "black";
+ name = "wardrobe"
+ },
+/obj/item/clothing/under/color/black{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/item/clothing/under/color/black{
+ pixel_x = 1;
+ pixel_y = -1
+ },
+/obj/item/clothing/head/soft/black{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/item/clothing/head/soft/black{
+ pixel_x = 1;
+ pixel_y = -1
+ },
+/obj/item/clothing/gloves/fingerless,
+/obj/item/clothing/shoes/sneakers/black{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/item/clothing/shoes/sneakers/black{
+ pixel_x = 1;
+ pixel_y = -1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/item/storage/photo_album,
+/obj/machinery/light/small,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/syndielistenspace)
+"LZ" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/extinguisher_cabinet{
+ pixel_x = -27;
+ pixel_y = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/computer/arcade/tetris{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/syndielistenspace)
+"Mk" = (
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/caution/red{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/syndielistenspace)
+"NF" = (
+/obj/structure/table,
+/obj/item/storage/toolbox/syndicate,
+/obj/item/flashlight{
+ pixel_y = -12
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/syndielistenspace)
+"Oa" = (
+/obj/structure/chair/office/dark{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/syndielistenspace)
+"Ow" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ruin/space/syndielistenspace)
+"Pk" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/syndielistenspace)
+"Pr" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
+/obj/machinery/button/door{
+ id = "syndie_listeningpost_external";
+ name = "External Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_x = 24;
+ req_access_txt = "150";
+ specialfunctions = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/syndielistenspace)
+"Qp" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 4
+ },
+/obj/machinery/door/airlock/external{
+ id_tag = "syndie_listeningpost_external";
+ req_access_txt = "150"
+ },
+/turf/open/floor/plating,
+/area/ruin/space/syndielistenspace)
+"RF" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4;
+ piping_layer = 3;
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/syndielistenspace)
+"Sy" = (
+/obj/structure/table,
+/obj/machinery/computer/security/telescreen/entertainment{
+ pixel_x = -30
+ },
+/obj/item/reagent_containers/food/drinks/beer{
+ pixel_x = -4;
+ pixel_y = 14
+ },
+/obj/item/reagent_containers/food/drinks/beer{
+ pixel_x = 3;
+ pixel_y = 11
+ },
+/obj/item/storage/fancy/cigarettes/cigpack_syndicate{
+ pixel_x = -3
+ },
+/obj/item/lighter{
+ pixel_x = 7;
+ pixel_y = -3
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/syndielistenspace)
+"SC" = (
+/obj/structure/bookcase/random,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/syndielistenspace)
+"Tc" = (
+/obj/item/bombcore/badmin{
+ anchored = 1;
+ invisibility = 100
+ },
+/turf/closed/wall,
+/area/ruin/space/syndielistenspace)
+"VK" = (
+/obj/machinery/telecomms/relay/preset/ruskie{
+ use_power = 0
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/syndielistenspace)
+"VP" = (
+/obj/machinery/computer/camera_advanced{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/newscaster{
+ pixel_y = 32
+ },
+/obj/item/radio/intercom{
+ freerange = 1;
+ name = "Syndicate Radio Intercom";
+ pixel_x = -30
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/syndielistenspace)
+"VX" = (
+/obj/machinery/vending/snack/random{
+ extended_inventory = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/sign/poster/contraband/random{
+ pixel_x = 32
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/syndielistenspace)
+"YD" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/closet/crate,
+/obj/item/stack/sheet/metal/twenty,
+/obj/item/stack/sheet/glass{
+ amount = 10
+ },
+/obj/item/stack/rods/ten,
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/storage/box/lights/bulbs,
+/obj/item/stock_parts/cell/high/plus,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/item/stack/sheet/mineral/plasma{
+ amount = 20
+ },
+/obj/item/wrench,
+/turf/open/floor/plating,
+/area/ruin/space/syndielistenspace)
+"YY" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/syndielistenspace)
+"ZG" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/computer/med_data/syndie{
+ dir = 4;
+ req_one_access = null
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/syndielistenspace)
+
+(1,1,1) = {"
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+"}
+(2,1,1) = {"
+ae
+ae
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+ae
+yD
+yD
+yD
+yD
+yD
+ae
+ae
+ae
+"}
+(3,1,1) = {"
+ae
+ae
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+ae
+ae
+"}
+(4,1,1) = {"
+ae
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+ae
+"}
+(5,1,1) = {"
+ae
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+ae
+"}
+(6,1,1) = {"
+ae
+yD
+yD
+yD
+yD
+Kg
+Kg
+Kg
+Kg
+Kg
+Kg
+Kg
+Kg
+yD
+yD
+yD
+yD
+yD
+yD
+ae
+"}
+(7,1,1) = {"
+yD
+yD
+yD
+yD
+yD
+Kg
+HF
+Kg
+LZ
+yA
+Sy
+tg
+Kg
+Kg
+Kg
+yD
+yD
+yD
+yD
+ae
+"}
+(8,1,1) = {"
+yD
+yD
+yD
+yD
+yD
+Kg
+ag
+wW
+Ow
+ty
+xw
+lW
+Kg
+SC
+Kg
+Kg
+yD
+yD
+yD
+ae
+"}
+(9,1,1) = {"
+yD
+yD
+yD
+yD
+Kg
+Kg
+Kg
+Kg
+kO
+Pk
+Hl
+Mk
+vj
+DI
+Kn
+Kg
+yD
+yD
+yD
+ae
+"}
+(10,1,1) = {"
+yD
+yD
+yD
+Kg
+Kg
+VP
+ZG
+Kg
+Kg
+vH
+Kg
+yi
+Kg
+pa
+qH
+Kg
+yD
+yD
+yD
+ae
+"}
+(11,1,1) = {"
+yD
+yD
+yD
+Kg
+ii
+Oa
+JU
+HX
+Kg
+gu
+Kg
+Kg
+Kg
+Kg
+Kg
+Kg
+Kg
+yD
+yD
+ae
+"}
+(12,1,1) = {"
+yD
+yD
+yD
+Kg
+yC
+zl
+mU
+bX
+Bm
+hs
+JN
+Kg
+Ds
+bn
+YD
+JD
+Kg
+yD
+yD
+ae
+"}
+(13,1,1) = {"
+yD
+yD
+yD
+Kg
+Kg
+VK
+ab
+xh
+Kg
+Bo
+fs
+vP
+CT
+vJ
+fW
+qp
+Kg
+yD
+yD
+ae
+"}
+(14,1,1) = {"
+yD
+yD
+yD
+yD
+Kg
+Kg
+Kg
+Kg
+Tc
+RF
+kE
+Kg
+Kg
+Kg
+Kg
+Kg
+Kg
+yD
+yD
+ae
+"}
+(15,1,1) = {"
+yD
+yD
+yD
+Kg
+Kg
+NF
+yy
+bk
+Kg
+gN
+yS
+ve
+mZ
+kd
+Kg
+yD
+yD
+yD
+yD
+ae
+"}
+(16,1,1) = {"
+yD
+yD
+yD
+Kg
+DW
+YY
+Pr
+lp
+EZ
+Kf
+ia
+ff
+hg
+BG
+Kg
+yD
+yD
+yD
+yD
+ae
+"}
+(17,1,1) = {"
+ae
+yD
+yD
+Kg
+Kg
+Qp
+Kg
+ui
+Kg
+VX
+rJ
+Kg
+fm
+Kg
+Kg
+yD
+yD
+yD
+yD
+ae
+"}
+(18,1,1) = {"
+ae
+yD
+yD
+yD
+GN
+pV
+GN
+rr
+GN
+Kg
+Kg
+Kg
+Kg
+Kg
+yD
+yD
+yD
+yD
+yD
+ae
+"}
+(19,1,1) = {"
+ae
+yD
+yD
+yD
+GN
+te
+GN
+ax
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+yD
+ae
+ae
+"}
+(20,1,1) = {"
+ae
+ae
+ae
+ae
+ae
+mh
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+yD
+yD
+ae
+ae
+ae
+"}
diff --git a/modular_splurt/code/__HELPERS/reagents.dm b/modular_splurt/code/__HELPERS/reagents.dm
index bcdd33ef9e..8f945ec74a 100644
--- a/modular_splurt/code/__HELPERS/reagents.dm
+++ b/modular_splurt/code/__HELPERS/reagents.dm
@@ -21,7 +21,5 @@
mixcolor = BlendRGB(mixcolor, color_temp, vol_temp/vol_counter)
else
mixcolor = BlendRGB(color_temp, mixcolor, vol_temp/vol_counter)
-
- qdel(R) //help me
return mixcolor
diff --git a/modular_splurt/code/datums/genitals/genitals_interface.dm b/modular_splurt/code/datums/genitals/genitals_interface.dm
index ef142eb47f..2c90652977 100644
--- a/modular_splurt/code/datums/genitals/genitals_interface.dm
+++ b/modular_splurt/code/datums/genitals/genitals_interface.dm
@@ -45,6 +45,8 @@
for(var/obj/item/organ/genital/genital in genital_holder.internal_organs) //Only get the genitals
if(CHECK_BITFIELD(genital.genital_flags, GENITAL_INTERNAL)) //Not those though
continue
+ if(!(genital.is_exposed() || genital.always_accessible || user_is_target)) //Hidden for a reason
+ continue
var/list/genital_entry = list()
genital_entry["img"] = icon2base64(getFlatIcon(genital, no_anim=TRUE))
diff --git a/modular_splurt/code/datums/traits/good.dm b/modular_splurt/code/datums/traits/good.dm
index 421bb1cb2c..eb557e3ddc 100644
--- a/modular_splurt/code/datums/traits/good.dm
+++ b/modular_splurt/code/datums/traits/good.dm
@@ -50,39 +50,19 @@
/datum/quirk/rad_fiend
name = "Rad Fiend"
- desc = "You've been blessed by Cherenkov's warming light, causing you to emit a subtle glow at all times. Only intense radiation is capable of penetrating your protective barrier."
+ desc = "You've been blessed by Cherenkov's warming light, causing you to emit a subtle glow at all times. Only -very- intense radiation is capable of penetrating your protective barrier."
value = 2
mob_trait = TRAIT_RAD_FIEND
gain_text = span_notice("You feel empowered by Cherenkov's glow.")
lose_text = span_notice("You realize that rads aren't so rad.")
- // Variable for the radiation immunity check
- var/can_gain = TRUE
-
/datum/quirk/rad_fiend/add()
// Define quirk holder mob
var/mob/living/carbon/human/quirk_mob = quirk_holder
-
- // Check for any radiation immunity
- if(HAS_TRAIT(quirk_mob, TRAIT_RADIMMUNE))
- // Set gain status
- can_gain = FALSE
-
- // Return without doing anything
- return
-
// Add glow control action
var/datum/action/rad_fiend/update_glow/quirk_action = new
quirk_action.Grant(quirk_mob)
-/datum/quirk/rad_fiend/post_add()
- // Check if quirk effect was gained
- if(can_gain)
- return
-
- // Alert quirk holder of gain status
- to_chat(quirk_holder, span_warning("As you are immune to radiation, you were unable to gain Cherenkov's blessing. Please discuss alternatives with a medical professional."))
-
/datum/quirk/rad_fiend/remove()
// Define quirk holder mob
var/mob/living/carbon/human/quirk_mob = quirk_holder
diff --git a/modular_splurt/code/datums/traits/neutral.dm b/modular_splurt/code/datums/traits/neutral.dm
index ddc571126c..5b4434f703 100644
--- a/modular_splurt/code/datums/traits/neutral.dm
+++ b/modular_splurt/code/datums/traits/neutral.dm
@@ -164,6 +164,33 @@
T.fluid_mult = 1.5 //Base is 0.133
T.fluid_max_volume = 5
+//You are a CIA agent.
+/datum/quirk/cosglow
+ name = "Cosmetic Glow"
+ desc = "You glow! Be it an obscure radiation emission, or simple Bioluminescent properties.."
+ value = 0
+ mob_trait = TRAIT_COSGLOW
+ gain_text = span_notice("You feel empowered by a three-letter agency!")
+ lose_text = span_notice("You realize that working for the space CIA sucks!")
+
+/datum/quirk/cosglow/add()
+ // Define quirk holder mob
+ var/mob/living/carbon/human/quirk_mob = quirk_holder
+ // Add glow control action
+ var/datum/action/cosglow/update_glow/quirk_action = new
+ quirk_action.Grant(quirk_mob)
+
+/datum/quirk/cosglow/remove()
+ // Define quirk holder mob
+ var/mob/living/carbon/human/quirk_mob = quirk_holder
+
+ // Remove glow control action
+ var/datum/action/cosglow/update_glow/quirk_action = locate() in quirk_mob.actions
+ quirk_action.Remove(quirk_mob)
+
+ // Remove glow effect
+ quirk_mob.remove_filter("rad_fiend_glow")
+
//well-trained moved to neutral to stop the awkward situation of a dom snapping and the 30 trait powergamers fall to the floor.
/datum/quirk/well_trained
name = "Well-Trained"
diff --git a/modular_splurt/code/datums/traits/trait_actions.dm b/modular_splurt/code/datums/traits/trait_actions.dm
index e465ee2c14..0a9ffaba7e 100644
--- a/modular_splurt/code/datums/traits/trait_actions.dm
+++ b/modular_splurt/code/datums/traits/trait_actions.dm
@@ -1480,6 +1480,69 @@
else
to_chat(H, span_warning("You are already conserving your energy!"))
+//Quirk: Cosmetic Glow
+//Copy and pasted. Cry about it.
+/datum/action/cosglow
+ name = "Broken Glow Action"
+ desc = "Report this to a coder."
+ icon_icon = 'icons/effects/effects.dmi'
+ button_icon_state = "static"
+
+/datum/action/cosglow/update_glow
+ name = "Modify Glow"
+ desc = "Change your glow color."
+ button_icon_state = "blank"
+
+ // Glow color to use
+ var/glow_color = "#39ff14" // Neon green
+
+ // Thickness of glow outline
+ var/glow_range = 1 //Less than radfiend
+
+
+/datum/action/cosglow/update_glow/Grant()
+ . = ..()
+
+ // Define user mob
+ var/mob/living/carbon/human/action_mob = owner
+
+ // Add outline effect
+ action_mob.add_filter("rad_fiend_glow", 1, list("type" = "outline", "color" = glow_color+"30", "size" = glow_range))
+
+/datum/action/cosglow/update_glow/Remove()
+ . = ..()
+
+ // Define user mob
+ var/mob/living/carbon/human/action_mob = owner
+
+ // Remove glow
+ action_mob.remove_filter("rad_fiend_glow")
+
+/datum/action/cosglow/update_glow/Trigger()
+ . = ..()
+
+ // Define user mob
+ var/mob/living/carbon/human/action_mob = owner
+
+ // Ask user for color input
+ var/input_color = input(action_mob, "Select a color to use for your glow outline.", "Select Glow Color", glow_color) as color|null
+
+ // Check if color input was given
+ // Reset to stored color when not given input
+ glow_color = (input_color ? input_color : glow_color)
+
+ // Ask user for range input
+ var/input_range = input(action_mob, "How much do you glow? Value may range between 1 to 2.", "Select Glow Range", glow_range) as num|null
+
+ // Check if range input was given
+ // Reset to stored color when not given input
+ // Input is clamped in the 1-4 range
+ glow_range = (input_range ? clamp(input_range, 0, 4) : glow_range) //More customisable, so you know when you're looking at someone with Radfiend (doom) or a normal player.
+
+ // Update outline effect
+ action_mob.remove_filter("rad_fiend_glow")
+ action_mob.add_filter("rad_fiend_glow", 1, list("type" = "outline", "color" = glow_color+"30", "size" = glow_range))
+
//
// Quirk: Rad Fiend
//
@@ -1501,6 +1564,7 @@
// Thickness of glow outline
var/glow_range = 2
+
/datum/action/rad_fiend/update_glow/Grant()
. = ..()
@@ -1537,8 +1601,8 @@
// Check if range input was given
// Reset to stored color when not given input
- // Input is clamped in the 1-2 range
- glow_range = (input_range ? clamp(input_range, 1, 2) : glow_range)
+ // Input is clamped in the 1-4 range
+ glow_range = (input_range ? clamp(input_range, 1, 4) : glow_range)
// Update outline effect
action_mob.remove_filter("rad_fiend_glow")
diff --git a/modular_splurt/code/game/machinery/computer/slavery.dm b/modular_splurt/code/game/machinery/computer/slavery.dm
index 303078cbc7..a760384d4d 100644
--- a/modular_splurt/code/game/machinery/computer/slavery.dm
+++ b/modular_splurt/code/game/machinery/computer/slavery.dm
@@ -27,7 +27,7 @@
/obj/machinery/computer/slavery/Destroy()
GLOB.tracked_slave_consoles -= src
QDEL_NULL(radio)
- ..()
+ return ..()
/obj/machinery/computer/slavery/proc/get_slaver_gear()
var/list/filtered_modules = list()
diff --git a/modular_splurt/code/game/objects/items/lewd_items/genital_equipment/chastity/chastity_cage.dm b/modular_splurt/code/game/objects/items/lewd_items/genital_equipment/chastity/chastity_cage.dm
index daefc9b61a..02105fbd3c 100644
--- a/modular_splurt/code/game/objects/items/lewd_items/genital_equipment/chastity/chastity_cage.dm
+++ b/modular_splurt/code/game/objects/items/lewd_items/genital_equipment/chastity/chastity_cage.dm
@@ -47,7 +47,9 @@
/obj/item/genital_equipment/chastity_cage/Destroy()
if(equipment.holder_genital)
item_removed(src, equipment.holder_genital, usr)
- . = ..()
+ key = null
+ belt = null
+ return ..()
/obj/item/genital_equipment/chastity_cage/item_inserting(datum/source, obj/item/organ/genital/G, mob/user)
. = TRUE
diff --git a/modular_splurt/code/game/objects/items/lewd_items/genital_equipment/chastity/estim_chastity_cage.dm b/modular_splurt/code/game/objects/items/lewd_items/genital_equipment/chastity/estim_chastity_cage.dm
index 12a375d65f..19a8bfe726 100644
--- a/modular_splurt/code/game/objects/items/lewd_items/genital_equipment/chastity/estim_chastity_cage.dm
+++ b/modular_splurt/code/game/objects/items/lewd_items/genital_equipment/chastity/estim_chastity_cage.dm
@@ -115,7 +115,9 @@
/obj/item/genital_equipment/chastity_cage/estim/Initialize(mapload, obj/item/key/chastity_key/estim/newkey = null)
. = ..()
var/obj/item/key/chastity_key/estim/estim_key = key
- if(!estim_key)
+ if(!estim_key && newkey)
estim_key = newkey
+ else
+ return
if(!estim_key.estim_cage)
estim_key.estim_cage = src
diff --git a/modular_splurt/code/game/objects/items/lewd_items/genital_equipment/genital_equipment.dm b/modular_splurt/code/game/objects/items/lewd_items/genital_equipment/genital_equipment.dm
index 8734dda848..428b16cafc 100644
--- a/modular_splurt/code/game/objects/items/lewd_items/genital_equipment/genital_equipment.dm
+++ b/modular_splurt/code/game/objects/items/lewd_items/genital_equipment/genital_equipment.dm
@@ -13,6 +13,10 @@
AddComponent(/datum/component/genital_equipment, genital_slot, procs_list)
equipment = GetComponent(/datum/component/genital_equipment)
+/obj/item/genital_equipment/Destroy()
+ equipment = null
+ return ..()
+
/// Item-specific checks to run before inserting in a genital
/obj/item/genital_equipment/proc/item_inserting(datum/source, obj/item/organ/genital/G, mob/user)
return TRUE
diff --git a/modular_splurt/code/game/objects/items/pet_capsule.dm b/modular_splurt/code/game/objects/items/pet_capsule.dm
new file mode 100644
index 0000000000..20ad3e2bbf
--- /dev/null
+++ b/modular_splurt/code/game/objects/items/pet_capsule.dm
@@ -0,0 +1,89 @@
+//Pet Capsule
+/obj/item/pet_capsule
+ name = "pet capsule"
+ desc = "A bluespace capsule used to store pets of the more... dangerous variety"
+ icon = 'modular_splurt/icons/obj/pet_capsule.dmi'
+ icon_state = "pet_capsule_closed"
+ w_class = WEIGHT_CLASS_TINY
+ var/mob/living/simple_animal/selected_pet
+ var/mob/living/simple_animal/stored_pet
+ var/new_name = "pet"
+ var/pet_picked = FALSE
+ var/open = FALSE
+ var/mob/owner
+
+/obj/item/pet_capsule/proc/pet_capsule_triggered(atom/location_atom, is_in_hand = FALSE, mob/user = null)
+ //If pet has not been chosen yet
+ if (!pet_picked && is_in_hand && user != null)
+ pet_picked = TRUE;
+
+ new_name = input(user, "New name :", "Rename your pet(Once per shift!)")
+
+ //radial menu appears to select one of the avaliable pets & store it in a template
+ var/static/list/pet_icons
+ if(!pet_icons)
+ pet_icons = list(
+ "Femclaw" = image(icon = 'modular_splurt/icons/mob/femclaw/newclaws.dmi', icon_state = "femclaw"),
+ "Deathclaw" = image(icon = 'modular_splurt/icons/mob/femclaw/newclaws.dmi', icon_state = "newclaw"),
+ "Carp" = image(icon = 'icons/mob/animal.dmi', icon_state = "carp"),
+ "Spider" = image(icon = 'icons/mob/animal.dmi', icon_state = "guard")
+ )
+ var/selected_icon = show_radial_menu(loc, loc , pet_icons, radius = 42, require_near = TRUE)
+ switch(selected_icon)
+ if("Femclaw")
+ selected_pet = /mob/living/simple_animal/hostile/deathclaw/funclaw/femclaw/pet_femclaw
+ if("Deathclaw")
+ selected_pet = /mob/living/simple_animal/hostile/deathclaw/funclaw/gentle/newclaw/pet_deathclaw
+ if("Carp")
+ selected_pet = /mob/living/simple_animal/hostile/carp/pet_carp
+ if("Spider")
+ selected_pet = /mob/living/simple_animal/hostile/poison/giant_spider/pet_spider
+ else
+ pet_picked = FALSE;
+ return FALSE
+ owner = user
+ return
+
+
+ else if (!open && pet_picked && is_in_hand && user != null)
+ {
+ owner = user
+ to_chat(user, "You set yourself as the owner!")
+ }
+ //Make pet appear if thrown on the floor
+ else if (!open && !is_in_hand && pet_picked)
+ open = TRUE
+ icon_state = "pet_capsule_opened"
+ var/turf/targetloc = location_atom
+ stored_pet = new selected_pet(targetloc) //stores reference to the pet to be able to do the recall
+ stored_pet.name = new_name //Apply the customized name
+
+ // smoke & message effect
+ loc.visible_message("\The [src] opens, [stored_pet.name] suddenly appearing!")
+ var/datum/effect_system/spark_spread/smoke = new
+ smoke.set_up(10,TRUE, targetloc)
+ smoke.start()
+
+ //setting owners only for pets which can be interacted with
+ if(istype(stored_pet, /mob/living/simple_animal/hostile/deathclaw/funclaw/femclaw/pet_femclaw))
+ var/mob/living/simple_animal/hostile/deathclaw/funclaw/femclaw/pet_femclaw/ownable = stored_pet
+ ownable.capsule_owner = owner
+ else if(istype(stored_pet,/mob/living/simple_animal/hostile/deathclaw/funclaw/gentle/newclaw/pet_deathclaw))
+ var/mob/living/simple_animal/hostile/deathclaw/funclaw/gentle/newclaw/pet_deathclaw/ownable = stored_pet
+ ownable.capsule_owner = owner
+
+
+ //recall pet
+ else if (open && stored_pet != null)
+ open = FALSE
+ icon_state = "pet_capsule_closed"
+ loc.visible_message("\The [src] closes, [stored_pet.name] being recalled inside of it!")
+ del(stored_pet)
+
+/obj/item/pet_capsule/attack_self(mob/user)
+ pet_capsule_triggered(loc,TRUE,user)
+
+/obj/item/pet_capsule/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
+ .=..()
+ pet_capsule_triggered(hit_atom)
+
diff --git a/modular_splurt/code/game/objects/structures/ladder.dm b/modular_splurt/code/game/objects/structures/ladder.dm
index df191baff0..c4a577759f 100644
--- a/modular_splurt/code/game/objects/structures/ladder.dm
+++ b/modular_splurt/code/game/objects/structures/ladder.dm
@@ -1,17 +1,32 @@
/obj/structure/ladder/teleport
var/tag_teleport = null
var/static/list/teleport_ladders = list()
+ var/list/datum/weakref/uprefs = list()// list because it can be several...
+ var/list/datum/weakref/downrefs = list()
/obj/structure/ladder/teleport/Initialize(mapload, obj/structure/ladder/up, obj/structure/ladder/down)
..()
teleport_ladders.Add(src)
return INITIALIZE_HINT_LATELOAD
+/obj/structure/ladder/teleport/Destroy(force)
+ down = null
+ up = null
+ for(var/datum/weakref/ref in uprefs)
+ var/obj/structure/ladder/teleport/lad = ref.resolve()
+ lad.up = null
+ for(var/datum/weakref/ref in downrefs)
+ var/obj/structure/ladder/teleport/lad = ref.resolve()
+ lad.down = null
+ teleport_ladders.Remove(src)
+ return ..()
+
+
/obj/structure/ladder/teleport/LateInitialize()
if (!down)
-
for(var/obj/structure/ladder/teleport/T in teleport_ladders)
if(T.tag_teleport == src.tag_teleport && src.z > T.z)
+ uprefs += WEAKREF(T)
T.up = src
src.down = T
T.update_icon()
@@ -19,6 +34,7 @@
if (!up)
for(var/obj/structure/ladder/teleport/T in teleport_ladders)
if(T.tag_teleport == src.tag_teleport && src.z < T.z)
+ downrefs += WEAKREF(T)
T.down = src
src.up = T
T.update_icon()
@@ -26,4 +42,3 @@
/obj/structure/ladder/teleport/xenoarch
tag_teleport = "xenoarch"
-
diff --git a/modular_splurt/code/game/turfs/open.dm b/modular_splurt/code/game/turfs/open.dm
index 6a47635023..39f5f11eee 100644
--- a/modular_splurt/code/game/turfs/open.dm
+++ b/modular_splurt/code/game/turfs/open.dm
@@ -61,3 +61,6 @@
/turf/open/floor/plating/layeniaredder/acid_act(acidpwr, acid_volume)
acidpwr = min(acidpwr, 50)
. = ..()
+
+/turf/open/openspace
+ heat_capacity = INFINITY
diff --git a/modular_splurt/code/modules/antagonists/qareen/qareen.dm b/modular_splurt/code/modules/antagonists/qareen/qareen.dm
index 77189708d9..c8087bdf2c 100644
--- a/modular_splurt/code/modules/antagonists/qareen/qareen.dm
+++ b/modular_splurt/code/modules/antagonists/qareen/qareen.dm
@@ -456,7 +456,7 @@
/obj/item/ectoplasm/qareen/Destroy()
if(!QDELETED(qareen))
qdel(qareen)
- ..()
+ return ..()
/mob/living/simple_animal/qareen/proc/qareenThrow(over, mob/user, obj/item/throwable)
var/mob/living/simple_animal/qareen/spooker = user
diff --git a/modular_splurt/code/modules/antagonists/wendigo/mob/defines_init.dm b/modular_splurt/code/modules/antagonists/wendigo/mob/defines_init.dm
index 9cc5b9de67..a0a6bc07ba 100644
--- a/modular_splurt/code/modules/antagonists/wendigo/mob/defines_init.dm
+++ b/modular_splurt/code/modules/antagonists/wendigo/mob/defines_init.dm
@@ -40,7 +40,6 @@
var/list/slaves = list() //people enslaved
/mob/living/carbon/wendigo/Initialize()
- . = ..()
/* //TODO: Uncomment when objectives + forest get finished
if(!connected_link)
if(!GLOB.wendigo_soul_storages.len)
@@ -77,7 +76,7 @@
ADD_TRAIT(src, TRAIT_NOCLONE, GENERIC)
add_verb(src, /mob/living/proc/mob_sleep)
add_verb(src, /mob/living/proc/lay_down)
- update_body_parts()
+ . = ..()
/mob/living/carbon/wendigo/Destroy()
QDEL_NULL(physiology)
diff --git a/modular_splurt/code/modules/client/loadout/donator/first_tier.dm b/modular_splurt/code/modules/client/loadout/donator/first_tier.dm
index beeb3f3af9..ce763274e1 100644
--- a/modular_splurt/code/modules/client/loadout/donator/first_tier.dm
+++ b/modular_splurt/code/modules/client/loadout/donator/first_tier.dm
@@ -13,6 +13,12 @@
ckeywhitelist = list()
donator_group_id = DONATOR_GROUP_TIER_1
+/datum/gear/donator/uniform/chameleon
+ name = "Chameleon suit"
+ path = /obj/item/clothing/under/chameleon
+ ckeywhitelist = list()
+ donator_group_id = DONATOR_GROUP_TIER_1
+
//Head
/datum/gear/donator/head/crown/fancy
name = "magnificent crown"
diff --git a/modular_splurt/code/modules/client/loadout/donator/third_tier.dm b/modular_splurt/code/modules/client/loadout/donator/third_tier.dm
index 8a78541680..7c9446273e 100644
--- a/modular_splurt/code/modules/client/loadout/donator/third_tier.dm
+++ b/modular_splurt/code/modules/client/loadout/donator/third_tier.dm
@@ -12,3 +12,10 @@
cost = 4
ckeywhitelist = list()
donator_group_id = DONATOR_GROUP_TIER_3
+
+/datum/gear/donator/backpack/pet_capsule
+ name = "pet capsule"
+ path = /obj/item/pet_capsule
+ cost = 2
+ ckeywhitelist = list()
+ donator_group_id = DONATOR_GROUP_TIER_3
diff --git a/modular_splurt/code/modules/clothing/lewd_clothing/eyes/hypnogoggles.dm b/modular_splurt/code/modules/clothing/lewd_clothing/eyes/hypnogoggles.dm
index 9bc3ef1d7d..641acf95b1 100644
--- a/modular_splurt/code/modules/clothing/lewd_clothing/eyes/hypnogoggles.dm
+++ b/modular_splurt/code/modules/clothing/lewd_clothing/eyes/hypnogoggles.dm
@@ -33,10 +33,10 @@
victim = null
/obj/item/clothing/glasses/hypno/Destroy()
- . = ..()
if(victim)
if(victim.glasses == src)
victim.cure_trauma_type(/datum/brain_trauma/induced_hypnosis, TRAUMA_RESILIENCE_BASIC)
+ . = ..()
/obj/item/clothing/glasses/hypno/attack_self(mob/user) //Setting up hypnotizing phrase
. = ..()
diff --git a/modular_splurt/code/modules/jobs/job_types/_job_alt_titles.dm b/modular_splurt/code/modules/jobs/job_types/_job_alt_titles.dm
index 705b13a92f..dbcd8d5b37 100644
--- a/modular_splurt/code/modules/jobs/job_types/_job_alt_titles.dm
+++ b/modular_splurt/code/modules/jobs/job_types/_job_alt_titles.dm
@@ -258,7 +258,8 @@
"Sex Educator",
"Rental Mommy",
"Rental Daddy",
- "Psycholo-Slut"
+ "Psycholo-Slut",
+ "Sexual Advisor"
)
LAZYADD(alt_titles, extra_titles)
. = ..()
diff --git a/modular_splurt/code/modules/jobs/job_types/peacekeeper.dm b/modular_splurt/code/modules/jobs/job_types/peacekeeper.dm
index 369756f9b8..850ec35749 100644
--- a/modular_splurt/code/modules/jobs/job_types/peacekeeper.dm
+++ b/modular_splurt/code/modules/jobs/job_types/peacekeeper.dm
@@ -122,13 +122,12 @@ Peacekeeper Hypospray
/obj/item/reagent_containers/peacehypo/Initialize(mapload)
. = ..()
-
for(var/R in reagent_ids)
add_reagent(R)
-
START_PROCESSING(SSobj, src)
/obj/item/reagent_containers/peacehypo/Destroy()
+ QDEL_LIST(reagent_list)
STOP_PROCESSING(SSobj, src)
return ..()
diff --git a/modular_splurt/code/modules/mapping/map_template.dm b/modular_splurt/code/modules/mapping/map_template.dm
new file mode 100644
index 0000000000..a3b7348968
--- /dev/null
+++ b/modular_splurt/code/modules/mapping/map_template.dm
@@ -0,0 +1,17 @@
+/// Takes in a type path, locates an instance of that type in the cached map, and calculates its offset from the origin of the map, returns this offset in the form list(x, y).
+/datum/map_template/proc/discover_offset(obj/marker)
+ var/key
+ var/list/models = cached_map.grid_models
+ for(key in models)
+ if(findtext(models[key], "[marker]")) // Yay compile time checks
+ break // This works by assuming there will ever only be one mobile dock in a template at most
+
+ for(var/datum/grid_set/gset as anything in cached_map.gridSets)
+ var/ycrd = gset.ycrd
+ for(var/line in gset.gridLines)
+ var/xcrd = gset.xcrd
+ for(var/j in 1 to length(line) step cached_map.key_len)
+ if(key == copytext(line, j, j + cached_map.key_len))
+ return list(xcrd, ycrd)
+ ++xcrd
+ --ycrd
diff --git a/modular_splurt/code/modules/mapping/modular_map_loader/README.md b/modular_splurt/code/modules/mapping/modular_map_loader/README.md
new file mode 100644
index 0000000000..1009191b4e
--- /dev/null
+++ b/modular_splurt/code/modules/mapping/modular_map_loader/README.md
@@ -0,0 +1,132 @@
+# Modular Map Loader
+
+## Concept
+
+Modular map loading is a system to allow maps to be generated with random variants by selecting from a set of pre-made modules. The system is designed to be as simple as possible for mappers to use, with a minimum of interaction with the code required.
+
+## Implementation
+
+### /obj/modular_map_root
+
+This root object handled picking and loading in map modules. It has two variables, and one proc.
+
+* `var/config_file` - A string, points to a TOML configuration file, which is used to hold the information necessary to pull the correct map files and place them on the correct roots. This will be the same for all roots on a map.
+* `var/key` - A string, used to pull a list of `.dmm` files from the configuration file.
+* `load_map()` - Called asynchronously in the root's `Initialize()`. This proc creates a new instance of `/datum/map_template/map_module`, ingests the configuration file `config_file` points to, and picks a `.dmm` file path which maps to the root's `key`, by picking a random filename from among those which `key` maps to, and appending it to a folder path. This file path is passed into the map templace instance's `load()`, and the template takes over.
+
+INITIALIZE_IMMEDIATE is used to ensure the ruins are loaded at the right time to avoid runtime errors related to lighting.
+
+### /datum/map_template/map_module
+
+This map templace subtype is responsible for loading in the module, it has two variables and two relevant procs.
+
+* `var/x_offset` and `var/y_offset` - Integers, used to store the offsets used to correctly align the module when it is loaded.
+* `load()` - Extends the functionality of the general map template's `load()` to allow a map to be specified at runtime. This means `preload_size()` must be called again here as the template's map file has been changed. The origin turf for the map to be loaded from is set using the offsets, and the map is loaded as per the parent.
+* `preload_size()` - Extends the functionality of the general map template's `preload_size()` to run the `discover_offset` proc, calculating the offset of `/obj/modular_map_connector` and setting the offset variables accordingly.
+
+### /obj/modular_map_connector
+
+This object is used only to determine the offsets to be used on loading, and has no other functionality.
+
+### TOML configuration
+
+This TOML file is used to map between a list of `.dmm` files and a string key. The file consists of two parts. The first is a line
+
+```
+directory = "_maps/etc/"
+```
+
+which points at a folder containing the `.dmm` files of the modules used in the map. The second is a series of tables
+
+```
+[rooms.example]
+modules = ["example_1.dmm", "example_2.dmm"]
+```
+
+which contains the mapping between the key `"example"` and the list of filenames `["example_1.dmm", "example_2.dmm"]`.
+
+### /datum/unit_test/modular_map_loader
+
+This is the unit test for modular map loading. It performs two checks on every subtype of `/obj/modular_map_root`. First it checks if the file `config_file` points at, and if it does not the test is failed because the file does not exist. If it does exist, it then attempts to read the file, if this is null it means the fild is not valid TOML, and the test is failed because the TOML file is invalid.
+
+## How-To
+
+This section will cover the basics of how to use map modules as a mapper. If you want a concrete example to look at, the space ruin `_maps/RandomRuins/SpaceRuins/DJstation.dmm` and its associated code, configuration and modules employ all the techniques covered in this tutorial.
+
+### The Main Map
+
+First we need to create a map, as we usually would. Let's say we want to create a new space ruin `foobar.dmm`, and we put it in the appropriate folder as usual, `_maps/RandomRuins/SpaceRuins/foobar.dmm`. We now need to create three more things.
+
+* `code/modules/ruins/spaceruin_code/foobar.dm` - A code file like would be used to store any code specific to this map.
+* `strings/modular_maps/foobar.toml`- A configuration file, this will be looked at in more detail later.
+* `_maps/RandomRuins/SpaceRuins/foobar/` - A new subfolder, which is where we will put the `.dmm` files for the modules.
+
+In `code/modules/ruins/spaceruin_code/foobar.dm` we need to add a small piece of code to define a new modular map root type for our map, which should look like this
+
+```
+/obj/modular_map_root/foobar
+ config_file = "strings/modular_maps/foobar.toml"
+```
+
+This means when we place root objects `/obj/modular_map_root` in our new map, we use this subtype that points to the correct configuration file.
+
+When creating our main map, we place one of these roots in the location we want to generate a module at. Typically this would be placed at a natural landmark, such as a doorway. We then edit the varaibles of the placed root object, and set the `key` var to some string, let's use `key = vault`. Make the rest of the map, ensuring that every root you want to use a unique set of modules has a unique `key`.
+
+### Module Maps
+
+Now we need to make the modules to be placed on our roots. These will be saved in the folder we created earlier, `_maps/RandomRuins/SpaceRuins/foobar/`. Modules do not have to be the same size, so long as all modules will fit properly on the root without running into other parts of the map.
+
+When making a module, you need to include a connector object `/obj/modular_map_connector`. When the module is loaded, it will be offset so this connector is placed on top of the root on the main map.
+
+We will be making the first variant of our vault module, so we save this as `vault_1.dmm`, following the format `[key]_[number].dmm`. Keep doing this until all your modules have been made.
+
+If you wish, you can also place another root on a module, if for some reason that module's position is dependent on the current one. IF you do this, make sure you've placed a root with the same key on every variant of the current module (unless you only want it to appear on certain varaints of this one.)
+
+### Configuration
+
+Now we go back to our configuration file `strings/modular_maps/foobar.toml`. Say we ended up using three different sets of modules in our map, `vault`, `airlock` and `bathroom`, each of which have two variants. We want our `.toml` file to look like this
+
+```
+directory = "_maps/RandomRuins/SpaceRuins/foobar/"
+
+[rooms.vault]
+modules = ["vault_1.dmm", "vault_2.dmm"]
+
+[rooms.airlock]
+modules = ["airlock_1.dmm", "airlock_2.dmm"]
+
+[rooms.bathroom]
+modules = ["bathroom_1.dmm", "bathroom_2.dmm"]
+```
+
+Let's break down what is happening here.
+
+`directory = "_maps/RandomRuins/SpaceRuins/foobar/"` points to the folder where our modules are stored.
+
+`[rooms.vault]` identifies the following line as being the modules for a root with `key = vault`.
+
+`modules = ["vault_1.dmm", "vault_2.dmm"]` specifies which map files within the folder are to be associated with this key.
+
+Once this configuration is done, the map should be fully functional. Compile and run, place your map somewhere, and continue doing this until you have satisfied yourself that everything looks how you expected it to. Remember to do everything else you need to do when adding any new ruin, or whatever kind of map you made.
+
+### Common Mistakes
+
+> My map has modules that didn't load!
+
+Check your configuration is correct. Do the filenames given for the problem root match the names of the map files? Is the key specified in the configuration file the same as the one on the root in the map?
+
+> A module is loading in the wrong location!
+
+Check the positioning of the connector is correct, and that only one is placed on the module.
+
+> My ruin is spawning too close to or overlapping with something!
+
+Make sure your main map is large enough to fully contain the most expansive variation that can possibly be chosen.
+
+> Parts of my map are overlapping with each other!
+
+Make sure modules placed adjacent or close to each other have no combination of variants which can overlap with each other, this may take some trial and error in complicated cases.
+
+> My map still isn't working and I don't know what's wrong!
+
+Ping @Maintainer in our coding channels if you need any help or find any problems
diff --git a/modular_splurt/code/modules/mapping/modular_map_loader/modular_map_loader.dm b/modular_splurt/code/modules/mapping/modular_map_loader/modular_map_loader.dm
new file mode 100644
index 0000000000..d1f3d4b15d
--- /dev/null
+++ b/modular_splurt/code/modules/mapping/modular_map_loader/modular_map_loader.dm
@@ -0,0 +1,77 @@
+/obj/modular_map_root
+ invisibility = INVISIBILITY_ABSTRACT
+ icon = 'icons/obj/device.dmi'
+ icon_state = "pinonclose"
+
+ resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
+ anchored = TRUE
+
+ /// Points to a .toml file storing configuration data about the modules associated with this root
+ var/config_file = null
+ /// Key used to look up the appropriate map paths in the associated .toml file
+ var/key = null
+
+INITIALIZE_IMMEDIATE(/obj/modular_map_root)
+
+/obj/modular_map_root/Initialize(mapload)
+ . = ..()
+ INVOKE_ASYNC(src, .proc/load_map)
+
+/// Randonly selects a map file from the TOML config specified in config_file, loads it, then deletes itself.
+/obj/modular_map_root/proc/load_map()
+ var/turf/spawn_area = get_turf(src)
+
+ var/datum/map_template/map_module/map = new()
+
+ if(!config_file)
+ return
+
+ if(!key)
+ return
+
+ var/config = rustg_read_toml_file(config_file)
+
+ var/mapfile = config["directory"] + pick(config["rooms"][key]["modules"])
+
+ map.load(spawn_area, FALSE, mapfile = mapfile)
+
+ qdel(src, force=TRUE)
+
+/datum/map_template/map_module
+ name = "Base Map Module Template"
+
+ var/x_offset = 0
+ var/y_offset = 0
+
+/datum/map_template/map_module/load(turf/T, centered = FALSE, orientation = SOUTH, annihilate = default_annihilate, force_cache = FALSE, rotate_placement_to_orientation = FALSE, mapfile = null)
+
+ if(!mapfile)
+ return
+
+ mappath = mapfile
+
+ preload_size(mappath) // We need to run this here as the map path has been null until now
+
+ T = locate(T.x - x_offset, T.y - y_offset, T.z)
+ . = ..()
+
+/datum/map_template/map_module/preload_size(path, cache)
+ . = ..(path, TRUE) // Done this way because we still want to know if someone actualy wanted to cache the map
+ if(!cached_map)
+ return
+
+ var/list/offset = discover_offset(/obj/modular_map_connector)
+
+ x_offset = offset[1] - 1
+ y_offset = offset[2] - 1
+
+ if(!cache)
+ cached_map = null
+
+/obj/modular_map_connector
+ invisibility = INVISIBILITY_ABSTRACT
+ icon = 'icons/obj/device.dmi'
+ icon_state = "pinonclose"
+
+ resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
+ anchored = TRUE
diff --git a/modular_splurt/code/modules/mob/living/carbon/human/species.dm b/modular_splurt/code/modules/mob/living/carbon/human/species.dm
index bf8ee799cd..0ed5a22b75 100644
--- a/modular_splurt/code/modules/mob/living/carbon/human/species.dm
+++ b/modular_splurt/code/modules/mob/living/carbon/human/species.dm
@@ -35,9 +35,8 @@
H.adjust_thirst(-thirst_rate)
/datum/species/handle_mutations_and_radiation(mob/living/carbon/human/H)
- // Check for rad fiend quirk
- // Check for radiation resist threshold
- if(HAS_TRAIT(H, TRAIT_RAD_FIEND) && (H.radiation < RAD_BURN_THRESHOLD))
+ //Note: In the future, we should probably make radfiend assign TRAIT_RADIMMUME, but this is a good balancing aspect for now.
+ if(HAS_TRAIT(H, TRAIT_RAD_FIEND)) //Note. Due to how radiation code works, this does not provide FULL immunity.
// Return without effects
return TRUE
diff --git a/modular_splurt/code/modules/mob/living/carbon/human/species_types/zombies2.dm b/modular_splurt/code/modules/mob/living/carbon/human/species_types/zombies2.dm
index e812380fbc..f52374cef4 100644
--- a/modular_splurt/code/modules/mob/living/carbon/human/species_types/zombies2.dm
+++ b/modular_splurt/code/modules/mob/living/carbon/human/species_types/zombies2.dm
@@ -256,7 +256,7 @@
Insert(loc)
GLOB.zombie_infection_list += src
-/obj/item/organ/zombie_infection/Destroy()
+/obj/item/organ/undead_infection/Destroy()
GLOB.zombie_infection_list -= src
. = ..()
diff --git a/modular_splurt/code/modules/mob/living/emotes.dm b/modular_splurt/code/modules/mob/living/emotes.dm
index 714020731b..cddf25ec73 100644
--- a/modular_splurt/code/modules/mob/living/emotes.dm
+++ b/modular_splurt/code/modules/mob/living/emotes.dm
@@ -1028,3 +1028,16 @@
message_mime = "acts like a mooing cow."
emote_sound = 'modular_splurt/sound/voice/moo.ogg'
emote_cooldown = 1.7 SECONDS
+
+/datum/emote/living/audio/scream2
+ key = "scream2"
+ key_third_person = "screams2"
+ message = "screams!"
+ message_mime = "acts out a rather silly scream!"
+ emote_sound = 'modular_splurt/sound/voice/cscream1.ogg'
+ emote_cooldown = 3.3 SECONDS // Uses longest sound's time.
+ emote_pitch_variance = FALSE
+
+/datum/emote/living/audio/scream2/run_emote(mob/user, params)
+ emote_sound = pick('modular_splurt/sound/voice/cscream1.ogg', 'modular_splurt/sound/voice/cscream2.ogg', 'modular_splurt/sound/voice/cscream3.ogg', 'modular_splurt/sound/voice/cscream4.ogg', 'modular_splurt/sound/voice/cscream5.ogg', 'modular_splurt/sound/voice/cscream6.ogg', 'modular_splurt/sound/voice/cscream7.ogg', 'modular_splurt/sound/voice/cscream8.ogg', 'modular_splurt/sound/voice/cscream9.ogg', 'modular_splurt/sound/voice/cscream10.ogg')
+ . = ..()
diff --git a/modular_splurt/code/modules/mob/living/silicon/robot/robot_modules.dm b/modular_splurt/code/modules/mob/living/silicon/robot/robot_modules.dm
index 3e63d74f88..b9fdbe284c 100644
--- a/modular_splurt/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/modular_splurt/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -172,8 +172,8 @@
"Zoomba" = image(icon = 'modular_splurt/icons/mob/robots_cargo.dmi', icon_state = "zoomba_cargo"),
"Borgi" = image(icon = 'modular_splurt/icons/mob/widerobots_cargo.dmi', icon_state = "borgi-cargo"),
"Drake" = image(icon = 'modular_splurt/icons/mob/widerobots_cargo.dmi', icon_state = "drakecargo"),
- "Assaultron" = image(icon = 'modular_splurt/icons/mob/robots_cargo.dmi', icon_state = "assaultron_cargo")
-
+ "Assaultron" = image(icon = 'modular_splurt/icons/mob/robots_cargo.dmi', icon_state = "assaultron_cargo"),
+ "Meka" = image(icon = 'modular_splurt/icons/mob/robots_32x64.dmi', icon_state = "mekacargo"), // SPLURT Addon
)
var/list/L = list("Cargohound" = "cargohound", "Cargohound Dark" = "cargohounddark", "Vale" = "valecargo")
for(var/a in L)
@@ -220,6 +220,10 @@
cyborg_base_icon = "assaultron_cargo"
cyborg_icon_override = 'modular_splurt/icons/mob/robots_cargo.dmi'
hat_offset = 3
+ if("Meka")
+ cyborg_base_icon = "mekacargo"
+ cyborg_icon_override = 'modular_splurt/icons/mob/robots_32x64.dmi'
+ hat_offset = 3
else
return FALSE
return ..()
diff --git a/modular_splurt/code/modules/mob/living/simple_animal/hostile/carrion.dm b/modular_splurt/code/modules/mob/living/simple_animal/hostile/carrion.dm
index 7beb606364..dd544fcc1b 100644
--- a/modular_splurt/code/modules/mob/living/simple_animal/hostile/carrion.dm
+++ b/modular_splurt/code/modules/mob/living/simple_animal/hostile/carrion.dm
@@ -48,6 +48,6 @@
/mob/living/simple_animal/hostile/carrion/Initialize()
//Move the sprite into position, cant use Pixel_X and Y, causes issues with the tenticle sprite!
- ..()
+ . = ..()
var/matrix/M = transform
transform = M.Translate(-32,-32)
diff --git a/modular_splurt/code/modules/mob/living/simple_animal/hostile/deathclaw/pet_deathclaw.dm b/modular_splurt/code/modules/mob/living/simple_animal/hostile/deathclaw/pet_deathclaw.dm
new file mode 100644
index 0000000000..adc5f09117
--- /dev/null
+++ b/modular_splurt/code/modules/mob/living/simple_animal/hostile/deathclaw/pet_deathclaw.dm
@@ -0,0 +1,79 @@
+/mob/living/simple_animal/hostile/deathclaw/funclaw/femclaw/pet_femclaw
+ vision_range = 0
+ aggro_vision_range = 0
+ wander = 1
+ melee_damage_lower = 0
+ melee_damage_upper = 0
+ stop_automated_movement_when_pulled = 1
+
+ //Ordering mechanics
+ var/list/speech_buffer = ""
+ var/mob/capsule_owner
+
+/mob/living/simple_animal/hostile/deathclaw/funclaw/gentle/newclaw/pet_deathclaw
+ vision_range = 0
+ aggro_vision_range = 0
+ wander = 1
+ melee_damage_lower = 0
+ melee_damage_upper = 0
+ stop_automated_movement_when_pulled = 1
+
+ //Ordering mechanics
+ var/list/speech_buffer = ""
+ var/mob/capsule_owner
+
+
+/mob/living/simple_animal/hostile/deathclaw/funclaw/femclaw/pet_femclaw/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, spans, message_mode, atom/movable/source)
+ . = ..()
+ SEND_SIGNAL(src, COMSIG_MOB_EMOTE, args)
+ if(speaker != src && !radio_freq && !stat)
+ if (speaker == capsule_owner)
+ speech_buffer = ""
+ speech_buffer = lowertext(html_decode(message))
+ new_order()
+
+/mob/living/simple_animal/hostile/deathclaw/funclaw/femclaw/pet_femclaw/proc/new_order()
+ if(speech_buffer != null)
+ if (findtext(speech_buffer, "fuck") && findtext(speech_buffer, "me"))
+ target = capsule_owner
+ aggro_vision_range =9
+ vision_range = 9
+ if (findtext(speech_buffer, "stop"))
+ target = null
+ aggro_vision_range = 0
+ vision_range = 0
+
+/mob/living/simple_animal/hostile/deathclaw/funclaw/femclaw/pet_femclaw/CanAttack(atom/the_target)
+ . = ..()
+ if(the_target != capsule_owner)
+ aggro_vision_range = 0
+ vision_range = 0
+ return FALSE
+
+/mob/living/simple_animal/hostile/deathclaw/funclaw/gentle/newclaw/pet_deathclaw/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, spans, message_mode, atom/movable/source)
+ . = ..()
+ SEND_SIGNAL(src, COMSIG_MOB_EMOTE, args)
+ if(speaker != src && !radio_freq && !stat)
+ if (speaker == capsule_owner)
+ speech_buffer = ""
+ speech_buffer = lowertext(html_decode(message))
+ new_order()
+
+/mob/living/simple_animal/hostile/deathclaw/funclaw/gentle/newclaw/pet_deathclaw/proc/new_order()
+ if(speech_buffer != null)
+ if (findtext(speech_buffer, "fuck") && findtext(speech_buffer, "me"))
+ target = capsule_owner
+ aggro_vision_range =9
+ vision_range = 9
+ if (findtext(speech_buffer, "stop"))
+ target = null
+ aggro_vision_range = 0
+ vision_range = 0
+
+/mob/living/simple_animal/hostile/deathclaw/funclaw/gentle/newclaw/pet_deathclaw/CanAttack(atom/the_target)
+ . = ..()
+ if(the_target != capsule_owner)
+ aggro_vision_range = 0
+ vision_range = 0
+ return FALSE
+
diff --git a/modular_splurt/code/modules/mob/living/simple_animal/hostile/pet_carp.dm b/modular_splurt/code/modules/mob/living/simple_animal/hostile/pet_carp.dm
new file mode 100644
index 0000000000..921b4ad6f9
--- /dev/null
+++ b/modular_splurt/code/modules/mob/living/simple_animal/hostile/pet_carp.dm
@@ -0,0 +1,11 @@
+//tamed version of the default giant spider, subtype of the hostile one to keep the emote flavor
+/mob/living/simple_animal/hostile/carp/pet_carp
+ desc = "A ferocious, fang-bearing creature that resembles a fish.This one seems tamed!"
+ speak_emote = list("gnashes.", "gnashes cutely.")
+ speak_chance = 5
+ vision_range = 0
+ aggro_vision_range = 0
+ wander = 1
+ melee_damage_lower = 0
+ melee_damage_upper = 0
+ stop_automated_movement_when_pulled = 1
diff --git a/modular_splurt/code/modules/mob/living/simple_animal/hostile/pet_spider.dm b/modular_splurt/code/modules/mob/living/simple_animal/hostile/pet_spider.dm
new file mode 100644
index 0000000000..6dafd28dc7
--- /dev/null
+++ b/modular_splurt/code/modules/mob/living/simple_animal/hostile/pet_spider.dm
@@ -0,0 +1,11 @@
+//tamed version of the default giant spider, subtype of the hostile one to keep the emote flavor
+/mob/living/simple_animal/hostile/poison/giant_spider/pet_spider
+ desc = "Furry and black, it makes you shudder to look at it. This one has deep red eyes. Good thing it's tamed!"
+ speak_emote = list("chitters.", "chitters happily.")
+ speak_chance = 5
+ vision_range = 0
+ aggro_vision_range = 0
+ wander = 1
+ melee_damage_lower = 0
+ melee_damage_upper = 0
+ stop_automated_movement_when_pulled = 1
diff --git a/modular_splurt/code/modules/research/xenoarch/artifact.dm b/modular_splurt/code/modules/research/xenoarch/artifact.dm
index af87a01158..946ce62622 100644
--- a/modular_splurt/code/modules/research/xenoarch/artifact.dm
+++ b/modular_splurt/code/modules/research/xenoarch/artifact.dm
@@ -3,8 +3,7 @@
desc = "You shouldn't have this."
icon = 'modular_splurt/code/modules/research/xenoarch/fossil_and_artifact.dmi'
-/obj/item/ancientartifact/Initialize()
- ..()
+
//
@@ -26,7 +25,7 @@
/obj/item/ancientartifact/useless/Initialize()
icon_state = pick(list("urn","statuette","instrument","unknown1","unknown2","unknown3"))
- ..()
+ . =..()
/obj/item/ancientartifact/useless/attackby(obj/item/W, mob/user, params)
if(istype(W,/obj/item/xenoarch/help/research))
@@ -43,7 +42,7 @@
/obj/item/ancientartifact/faunafossil/Initialize()
icon_state = pick(list("bone1","bone2","bone3","bone4","bone5","bone6"))
- ..()
+ . =..()
/obj/item/ancientartifact/faunafossil/attackby(obj/item/W, mob/user, params)
if(istype(W,/obj/item/xenoarch/help/research))
@@ -60,7 +59,7 @@
/obj/item/ancientartifact/florafossil/Initialize()
icon_state = pick(list("plant1","plant2","plant3","plant4","plant5","plant6"))
- ..()
+ . =..()
/obj/item/ancientartifact/florafossil/attackby(obj/item/W, mob/user, params)
if(istype(W,/obj/item/xenoarch/help/research))
diff --git a/modular_splurt/code/modules/research/xenoarch/strange_rock.dm b/modular_splurt/code/modules/research/xenoarch/strange_rock.dm
index 20a2670a75..b665002ae4 100644
--- a/modular_splurt/code/modules/research/xenoarch/strange_rock.dm
+++ b/modular_splurt/code/modules/research/xenoarch/strange_rock.dm
@@ -32,7 +32,7 @@
itembasedepth = rand(70,100)
itemsafedepth = rand(12,14)
itemactualdepth = rand(itembasedepth - itemsafedepth,itembasedepth)
- ..()
+ . = ..()
/obj/item/strangerock/attackby(obj/item/W, mob/user, params)
if(istype(W,/obj/item/xenoarch/clean/hammer))
diff --git a/modular_splurt/code/modules/research/xenoarch/tools.dm b/modular_splurt/code/modules/research/xenoarch/tools.dm
index 76f43d1cd7..a793c793da 100644
--- a/modular_splurt/code/modules/research/xenoarch/tools.dm
+++ b/modular_splurt/code/modules/research/xenoarch/tools.dm
@@ -3,9 +3,6 @@
desc = "Debug. Parent Clean"
icon = 'modular_splurt/code/modules/research/xenoarch/tools.dmi'
-/obj/item/xenoarch/Initialize()
- ..()
-
/obj/item/xenoarch/clean/hammer
name = "Parent hammer"
desc = "Debug. Parent Hammer."
diff --git a/modular_splurt/icons/mob/catmedbot.dmi b/modular_splurt/icons/mob/catmedbot.dmi
index b276ab8c54..1c6d6bbb23 100644
Binary files a/modular_splurt/icons/mob/catmedbot.dmi and b/modular_splurt/icons/mob/catmedbot.dmi differ
diff --git a/modular_splurt/icons/mob/robots.dmi b/modular_splurt/icons/mob/robots.dmi
index 3fbd56e50b..4feb96cfab 100644
Binary files a/modular_splurt/icons/mob/robots.dmi and b/modular_splurt/icons/mob/robots.dmi differ
diff --git a/modular_splurt/icons/mob/robots_32x64.dmi b/modular_splurt/icons/mob/robots_32x64.dmi
new file mode 100644
index 0000000000..36c8297af1
Binary files /dev/null and b/modular_splurt/icons/mob/robots_32x64.dmi differ
diff --git a/modular_splurt/icons/obj/pet_capsule.dmi b/modular_splurt/icons/obj/pet_capsule.dmi
new file mode 100644
index 0000000000..293ed39ba7
Binary files /dev/null and b/modular_splurt/icons/obj/pet_capsule.dmi differ
diff --git a/modular_splurt/sound/voice/cscream1.ogg b/modular_splurt/sound/voice/cscream1.ogg
new file mode 100644
index 0000000000..74e4dda52e
Binary files /dev/null and b/modular_splurt/sound/voice/cscream1.ogg differ
diff --git a/modular_splurt/sound/voice/cscream10.ogg b/modular_splurt/sound/voice/cscream10.ogg
new file mode 100644
index 0000000000..87edec6417
Binary files /dev/null and b/modular_splurt/sound/voice/cscream10.ogg differ
diff --git a/modular_splurt/sound/voice/cscream2.ogg b/modular_splurt/sound/voice/cscream2.ogg
new file mode 100644
index 0000000000..77d8ea96e3
Binary files /dev/null and b/modular_splurt/sound/voice/cscream2.ogg differ
diff --git a/modular_splurt/sound/voice/cscream3.ogg b/modular_splurt/sound/voice/cscream3.ogg
new file mode 100644
index 0000000000..6d1db7669e
Binary files /dev/null and b/modular_splurt/sound/voice/cscream3.ogg differ
diff --git a/modular_splurt/sound/voice/cscream4.ogg b/modular_splurt/sound/voice/cscream4.ogg
new file mode 100644
index 0000000000..19740ae297
Binary files /dev/null and b/modular_splurt/sound/voice/cscream4.ogg differ
diff --git a/modular_splurt/sound/voice/cscream5.ogg b/modular_splurt/sound/voice/cscream5.ogg
new file mode 100644
index 0000000000..0c2ef6365b
Binary files /dev/null and b/modular_splurt/sound/voice/cscream5.ogg differ
diff --git a/modular_splurt/sound/voice/cscream6.ogg b/modular_splurt/sound/voice/cscream6.ogg
new file mode 100644
index 0000000000..a8833d595f
Binary files /dev/null and b/modular_splurt/sound/voice/cscream6.ogg differ
diff --git a/modular_splurt/sound/voice/cscream7.ogg b/modular_splurt/sound/voice/cscream7.ogg
new file mode 100644
index 0000000000..43cad2fb4d
Binary files /dev/null and b/modular_splurt/sound/voice/cscream7.ogg differ
diff --git a/modular_splurt/sound/voice/cscream8.ogg b/modular_splurt/sound/voice/cscream8.ogg
new file mode 100644
index 0000000000..4d5e1005df
Binary files /dev/null and b/modular_splurt/sound/voice/cscream8.ogg differ
diff --git a/modular_splurt/sound/voice/cscream9.ogg b/modular_splurt/sound/voice/cscream9.ogg
new file mode 100644
index 0000000000..8c4d89d2ca
Binary files /dev/null and b/modular_splurt/sound/voice/cscream9.ogg differ
diff --git a/rust_g.dll b/rust_g.dll
index 2197a22465..1b5f515b34 100644
Binary files a/rust_g.dll and b/rust_g.dll differ
diff --git a/tgstation.dme b/tgstation.dme
index 90b83d86b7..9bedc776a8 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -4456,6 +4456,7 @@
#include "modular_splurt\code\game\objects\items\milking_machine.dm"
#include "modular_splurt\code\game\objects\items\miscellaneous.dm"
#include "modular_splurt\code\game\objects\items\oviposition.dm"
+#include "modular_splurt\code\game\objects\items\pet_capsule.dm"
#include "modular_splurt\code\game\objects\items\plaguedoc.dm"
#include "modular_splurt\code\game\objects\items\plushes.dm"
#include "modular_splurt\code\game\objects\items\pregnancy_tester.dm"
@@ -4758,6 +4759,8 @@
#include "modular_splurt\code\modules\mapping\mapping_helpers\baseturf.dm"
#include "modular_splurt\code\modules\mentor\mentor_mouse.dm"
#include "modular_splurt\code\modules\mentor\mentor_verbs.dm"
+#include "modular_splurt\code\modules\mapping\map_template.dm"
+#include "modular_splurt\code\modules\mapping\modular_map_loader\modular_map_loader.dm"
#include "modular_splurt\code\modules\mining\equipment\kinetic_crusher.dm"
#include "modular_splurt\code\modules\mining\equipment\machine_vending.dm"
#include "modular_splurt\code\modules\mining\lavaland\necropolis_chests.dm"
@@ -4835,9 +4838,12 @@
#include "modular_splurt\code\modules\mob\living\simple_animal\hostile\dancer.dm"
#include "modular_splurt\code\modules\mob\living\simple_animal\hostile\deth.dm"
#include "modular_splurt\code\modules\mob\living\simple_animal\hostile\heavymaniac.dm"
+#include "modular_splurt\code\modules\mob\living\simple_animal\hostile\pet_carp.dm"
+#include "modular_splurt\code\modules\mob\living\simple_animal\hostile\pet_spider.dm"
#include "modular_splurt\code\modules\mob\living\simple_animal\hostile\spiderassault.dm"
#include "modular_splurt\code\modules\mob\living\simple_animal\hostile\deathclaw\deathclaw.dm"
#include "modular_splurt\code\modules\mob\living\simple_animal\hostile\deathclaw\funclaw.dm"
+#include "modular_splurt\code\modules\mob\living\simple_animal\hostile\deathclaw\pet_deathclaw.dm"
#include "modular_splurt\code\modules\mob\living\simple_animal\hostile\megafauna\blood_drunk_miner.dm"
#include "modular_splurt\code\modules\mob\living\simple_animal\hostile\megafauna\king_of_goats.dm"
#include "modular_splurt\code\modules\mob\living\simple_animal\hostile\megafauna\penguinhiero.dm"